diff --git a/test/test.wgsl.expected.hlsl b/test/test.wgsl.expected.hlsl
deleted file mode 100644
index cd85e1a..0000000
--- a/test/test.wgsl.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-[numthreads(1, 1, 1)]
-void unused_entry_point() {
-  return;
-}
-
-void f() {
-  {
-    for(; ; ) {
-    }
-  }
-}
diff --git a/test/test.wgsl.expected.msl b/test/test.wgsl.expected.msl
deleted file mode 100644
index e716521..0000000
--- a/test/test.wgsl.expected.msl
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void f() {
-  for(; ; ) {
-  }
-}
-
diff --git a/test/test.wgsl.expected.spvasm b/test/test.wgsl.expected.spvasm
deleted file mode 100644
index 4cbeee3..0000000
--- a/test/test.wgsl.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
-               OpExecutionMode %unused_entry_point LocalSize 1 1 1
-               OpName %unused_entry_point "unused_entry_point"
-               OpName %f "f"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-%unused_entry_point = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-          %f = OpFunction %void None %1
-          %6 = OpLabel
-               OpBranch %7
-          %7 = OpLabel
-               OpLoopMerge %8 %9 None
-               OpBranch %10
-         %10 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpBranch %7
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/test.wgsl.expected.wgsl b/test/test.wgsl.expected.wgsl
deleted file mode 100644
index 9f110c8..0000000
--- a/test/test.wgsl.expected.wgsl
+++ /dev/null
@@ -1,4 +0,0 @@
-fn f() {
-  for(; ; ) {
-  }
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index ac09841..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_99 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index b389a5b..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_99 = tint_symbol_1.read(uint2(vi12), 0);
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 917bf89..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageFetch %v4float %47 %28 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index c8535c1..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec4<f32> = textureLoad(x_20, vi12, 0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 1725be2..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<uint4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const uint4 x_99 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index b53ddd8..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<uint, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  uint4 const x_99 = tint_symbol_1.read(uint2(vi12), 0);
-  return;
-}
-
-fragment void tint_symbol(texture2d<uint, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index 51a3a49..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %uint = OpTypeInt 32 0
-          %6 = OpTypeImage %uint 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageFetch %v4uint %47 %29 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index fe8fbb1..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<u32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec4<u32> = textureLoad(x_20, vi12, 0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index 176bcdd..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<int4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const int4 x_99 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 9b762e1..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<int, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int4 const x_99 = tint_symbol_1.read(uint2(vi12), 0);
-  return;
-}
-
-fragment void tint_symbol(texture2d<int, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 2ed8afb..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-        %int = OpTypeInt 32 1
-          %6 = OpTypeImage %int 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageFetch %v4int %47 %28 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 149a246..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<i32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec4<i32> = textureLoad(x_20, vi12, 0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index d3c24fe..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_99 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 2f5f0ee..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_99 = tint_symbol_1.read(uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 754bebf..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageRead %v4float %47 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 412c09e..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec4<f32> = textureLoad(x_20, vi12);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index 8955379..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2D<uint4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const uint4 x_99 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
deleted file mode 100644
index 4af0fd0..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<uint, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  uint4 const x_99 = tint_symbol_1.read(uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<uint, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index 8d9735a..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %uint = OpTypeInt 32 0
-          %6 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageRead %v4uint %47 %29
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index 502c9b1..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32uint, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec4<u32> = textureLoad(x_20, vi12);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
deleted file mode 100644
index 2383277..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2D<int4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const int4 x_99 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
deleted file mode 100644
index 6708165..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<int, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int4 const x_99 = tint_symbol_1.read(uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<int, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
deleted file mode 100644
index 59796e2..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-        %int = OpTypeInt 32 1
-          %6 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageRead %v4int %47 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
deleted file mode 100644
index b2035a7..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32sint, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec4<i32> = textureLoad(x_20, vi12);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl
deleted file mode 100644
index 932c9d9..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_99 = x_20.Sample(x_10, vf12);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl
deleted file mode 100644
index ec6c455..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_99 = tint_symbol_1.sample(tint_symbol_2, vf12);
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm
deleted file mode 100644
index b9b07e0..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,77 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleImplicitLod %v4float %50 %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl
deleted file mode 100644
index 472823f..0000000
--- a/test/unittest/reader/spirv/ConvertResultSignedness_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec4<f32> = textureSample(x_20, x_10, vf12);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 1824125..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Load(int4(int3(int2(vu123.xy), int(vu123.z)), 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index d331808..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.read(uint2(int2(vu123.xy)), int(vu123.z), 0);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 26448f3..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %51 = OpVectorShuffle %v2uint %34 %34 0 1
-         %50 = OpBitcast %v2int %51
-         %52 = OpCompositeExtract %int %50 0
-         %53 = OpCompositeExtract %int %50 1
-         %55 = OpCompositeExtract %uint %34 2
-         %54 = OpBitcast %int %55
-         %56 = OpCompositeConstruct %v3int %52 %53 %54
-         %48 = OpImageFetch %v4float %49 %56 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index 50eaee4..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureLoad(x_20, vec2<i32>(vu123.xy), i32(vu123.z), 0);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index 151c2c1..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_71 = x_20.Load(int4(int3(int2(vu123.xy), int(vu123.z)), 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index ac7b571..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::read> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_71 = tint_symbol_1.read(uint2(int2(vu123.xy)), int(vu123.z));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index e8183eb..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %51 = OpVectorShuffle %v2uint %34 %34 0 1
-         %50 = OpBitcast %v2int %51
-         %52 = OpCompositeExtract %int %50 0
-         %53 = OpCompositeExtract %int %50 1
-         %55 = OpCompositeExtract %uint %34 2
-         %54 = OpBitcast %int %55
-         %56 = OpCompositeConstruct %v3int %52 %53 %54
-         %48 = OpImageRead %v4float %49 %56
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index 73814bb..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,30 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d_array<r32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_71 : vec4<f32> = textureLoad(x_20, vec2<i32>(vu123.xy), i32(vu123.z));
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
deleted file mode 100644
index 0b62a41..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-RWTexture2DArray<float4> x_20 : register(u1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  x_20[int3(int2(vu123.xy), int(vu123.z))] = vf1234;
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
deleted file mode 100644
index 9c67b74..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::write> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  tint_symbol_1.write(vf1234, uint2(int2(vu123.xy)), int(vu123.z));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
deleted file mode 100644
index 998442e..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %51 = OpVectorShuffle %v2uint %34 %34 0 1
-         %50 = OpBitcast %v2int %51
-         %52 = OpCompositeExtract %int %50 0
-         %53 = OpCompositeExtract %int %50 1
-         %55 = OpCompositeExtract %uint %34 2
-         %54 = OpBitcast %int %55
-         %56 = OpCompositeConstruct %v3int %52 %53 %54
-               OpImageWrite %49 %56 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
deleted file mode 100644
index 39db0b1..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d_array<r32float, write>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  textureStore(x_20, vec2<i32>(vu123.xy), i32(vu123.z), vf1234);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 6357492..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Load(int2(int(u1), 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index 6cf7258..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::sample> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.read(uint(int(u1)), 0);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 1848be4..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpBitcast %int %uint_1
-         %48 = OpImageFetch %v4float %49 %50 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index 0b67cff..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_1d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureLoad(x_20, i32(u1), 0);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index 00b6261..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_71 = x_20.Load(int2(int(u1), 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index c04d539..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::read> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_71 = tint_symbol_1.read(uint(int(u1)));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index b47cc8e..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpCapability Image1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpBitcast %int %uint_1
-         %48 = OpImageRead %v4float %49 %50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index a236ae0..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,30 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_1d<r32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_71 : vec4<f32> = textureLoad(x_20, i32(u1));
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
deleted file mode 100644
index 1a33a73..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-RWTexture1D<float4> x_20 : register(u1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  x_20[int(u1)] = vf1234;
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
deleted file mode 100644
index 5e9c742..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::write> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  tint_symbol_1.write(vf1234, uint(int(u1)));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
deleted file mode 100644
index 4e465fa..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpCapability Image1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpBitcast %int %uint_1
-               OpImageWrite %49 %50 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
deleted file mode 100644
index e4de802..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_1d<r32float, write>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  textureStore(x_20, i32(u1), vf1234);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl
deleted file mode 100644
index c9b7e1b..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Load(int3(int2(vu12), 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl
deleted file mode 100644
index 655b96b..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.read(uint2(int2(vu12)), 0);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm
deleted file mode 100644
index 76c637eb..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpBitcast %v2int %31
-         %48 = OpImageFetch %v4float %49 %50 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl
deleted file mode 100644
index dba1319..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureLoad(x_20, vec2<i32>(vu12), 0);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl
deleted file mode 100644
index 4ead2a6..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_71 = x_20.Load(int3(int2(vu12), 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl
deleted file mode 100644
index a9ede45..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::read> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_71 = tint_symbol_1.read(uint2(int2(vu12)));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm
deleted file mode 100644
index eee2570..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpBitcast %v2int %31
-         %48 = OpImageRead %v4float %49 %50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl
deleted file mode 100644
index fbe4e1a..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,30 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_71 : vec4<f32> = textureLoad(x_20, vec2<i32>(vu12));
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.hlsl
deleted file mode 100644
index 5c83a3f..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-RWTexture2D<float4> x_20 : register(u1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  x_20[int2(vu12)] = vf1234;
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.msl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.msl
deleted file mode 100644
index 146a085..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  tint_symbol_1.write(vf1234, uint2(int2(vu12)));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.spvasm
deleted file mode 100644
index 263b5c4..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpBitcast %v2int %31
-               OpImageWrite %49 %50 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.wgsl
deleted file mode 100644
index ca42d80..0000000
--- a/test/unittest/reader/spirv/ConvertUintCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32float, write>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  textureStore(x_20, vec2<i32>(vu12), vf1234);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 5d99a18..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, f1);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index cd357fb..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, f1);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 15138de..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %48 = OpImageSampleImplicitLod %v4float %52 %float_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index 193ebee..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_1d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, f1);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index c90be53..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf12.x);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index 150f027..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf12.x);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index 3b16a16..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpCompositeExtract %float %41 0
-         %48 = OpImageSampleImplicitLod %v4float %52 %53
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index ac4b620..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_1d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf12.x);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
deleted file mode 100644
index 5d62d42..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf123.x);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
deleted file mode 100644
index 7dd0d49..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf123.x);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
deleted file mode 100644
index 40a76be..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpCompositeExtract %float %44 0
-         %48 = OpImageSampleImplicitLod %v4float %52 %53
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
deleted file mode 100644
index c58533f..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_1d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf123.x);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl
deleted file mode 100644
index 83a5703..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf1234.x);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl
deleted file mode 100644
index 8107821..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf1234.x);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm
deleted file mode 100644
index f6a1b00..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpCompositeExtract %float %47 0
-         %48 = OpImageSampleImplicitLod %v4float %52 %53
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl
deleted file mode 100644
index ed286d5..0000000
--- a/test/unittest/reader/spirv/Good_1D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_1d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf1234.x);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 0b1e681..0000000
--- a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, float3(vf123.xy, float(int(vf123.z))));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index d690dbf..0000000
--- a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf123.xy, int(vf123.z));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 7645a19..0000000
--- a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v2float %44 %44 0 1
-         %54 = OpCompositeExtract %float %53 0
-         %55 = OpCompositeExtract %float %53 1
-         %58 = OpCompositeExtract %float %44 2
-         %57 = OpConvertFToS %int %58
-         %56 = OpConvertSToF %float %57
-         %59 = OpCompositeConstruct %v3float %54 %55 %56
-         %48 = OpImageSampleImplicitLod %v4float %52 %59
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index a5f904a..0000000
--- a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf123.xy, i32(vf123.z));
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index 054600e..0000000
--- a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, float3(vf1234.xy, float(int(vf1234.z))));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index e319e91..0000000
--- a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf1234.xy, int(vf1234.z));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index 4d5a9cb..0000000
--- a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v2float %47 %47 0 1
-         %54 = OpCompositeExtract %float %53 0
-         %55 = OpCompositeExtract %float %53 1
-         %58 = OpCompositeExtract %float %47 2
-         %57 = OpConvertFToS %int %58
-         %56 = OpConvertSToF %float %57
-         %59 = OpCompositeConstruct %v3float %54 %55 %56
-         %48 = OpImageSampleImplicitLod %v4float %52 %59
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index 5cb51a3..0000000
--- a/test/unittest/reader/spirv/Good_2DArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf1234.xy, i32(vf1234.z));
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index e80450b..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf12);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index aa26663..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf12);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index d065038..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %48 = OpImageSampleImplicitLod %v4float %52 %41
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index bb63d93..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf12);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index ccd77f9..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf123.xy);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index d4a73e2..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf123.xy);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index 4164842..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v2float %44 %44 0 1
-         %48 = OpImageSampleImplicitLod %v4float %52 %53
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index bc7bd7b..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf123.xy);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
deleted file mode 100644
index f00cd55..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf1234.xy);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
deleted file mode 100644
index 25175ab..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf1234.xy);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
deleted file mode 100644
index f290163..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v2float %47 %47 0 1
-         %48 = OpImageSampleImplicitLod %v4float %52 %53
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
deleted file mode 100644
index d514b6d..0000000
--- a/test/unittest/reader/spirv/Good_2D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf1234.xy);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 86fbb4f..0000000
--- a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture3D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf123);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index 4c7f1ac..0000000
--- a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture3d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf123);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture3d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 2fe350a..0000000
--- a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %48 = OpImageSampleImplicitLod %v4float %52 %44
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index 525e451..0000000
--- a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_3d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf123);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index b51bc16..0000000
--- a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture3D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf1234.xyz);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index eb44299..0000000
--- a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture3d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf1234.xyz);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture3d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index 245318a..0000000
--- a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v3float %47 %47 0 1 2
-         %48 = OpImageSampleImplicitLod %v4float %52 %53
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index 309ec34..0000000
--- a/test/unittest/reader/spirv/Good_3D_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_3d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf1234.xyz);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index cf2e325..0000000
--- a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCubeArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, float4(vf1234.xyz, float(int(vf1234.w))));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index 357c811..0000000
--- a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texturecube_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf1234.xyz, int(vf1234.w));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texturecube_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 5da605c..0000000
--- a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,90 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampledCubeArray
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v3float %47 %47 0 1 2
-         %54 = OpCompositeExtract %float %53 0
-         %55 = OpCompositeExtract %float %53 1
-         %56 = OpCompositeExtract %float %53 2
-         %59 = OpCompositeExtract %float %47 3
-         %58 = OpConvertFToS %int %59
-         %57 = OpConvertSToF %float %58
-         %60 = OpCompositeConstruct %v4float %54 %55 %56 %57
-         %48 = OpImageSampleImplicitLod %v4float %52 %60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index ab52711..0000000
--- a/test/unittest/reader/spirv/Good_CubeArray_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_cube_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf1234.xyz, i32(vf1234.w));
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index f180cc3..0000000
--- a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCube<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf123);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index 2b86564..0000000
--- a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texturecube<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf123);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texturecube<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index f087d4b..0000000
--- a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %48 = OpImageSampleImplicitLod %v4float %52 %44
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index a850027..0000000
--- a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_cube<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf123);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index 3eff801..0000000
--- a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCube<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf1234.xyz);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index 1cc31d7..0000000
--- a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texturecube<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf1234.xyz);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texturecube<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index 73ebb70..0000000
--- a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v3float %47 %47 0 1 2
-         %48 = OpImageSampleImplicitLod %v4float %52 %53
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index 08cbbd3..0000000
--- a/test/unittest/reader/spirv/Good_Cube_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_cube<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf1234.xyz);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 94c1196..0000000
--- a/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-Texture2DMS<float4> x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = float4(x_20.Load(int3(vi12, 0), i1).x, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 5925ccb..0000000
--- a/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d_ms<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = float4(tint_symbol_1.read(uint2(vi12), i1), 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-fragment void tint_symbol(depth2d_ms<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index a49c62c..0000000
--- a/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 1 0 1 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %44 = OpLoad %3 %x_20
-         %43 = OpImageFetch %v4float %44 %23 Sample %int_1
-         %42 = OpCompositeExtract %float %43 0
-         %46 = OpCompositeConstruct %v4float %42 %float_0 %float_0 %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 1f17b47..0000000
--- a/test/unittest/reader/spirv/ImageFetch_DepthMultisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_depth_multisampled_2d;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = vec4<f32>(textureLoad(x_20, vi12, i1), 0.0, 0.0, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 276e56d..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-Texture2D x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = float4(x_20.Load(int3(vi12, 0)).x, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index fe06360..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = float4(tint_symbol_1.read(uint2(vi12), 0), 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 2da4858..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,68 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %44 = OpLoad %3 %x_20
-         %43 = OpImageFetch %v4float %44 %23 Lod %int_0
-         %42 = OpCompositeExtract %float %43 0
-         %47 = OpCompositeConstruct %v4float %42 %float_0 %float_0 %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index fc8398c..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Depth_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = vec4<f32>(textureLoad(x_20, vi12, 0), 0.0, 0.0, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 5552bb5..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-Texture2DMS<float4> x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = x_20.Load(vi12, int(u1));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 6345a99..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_ms<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = tint_symbol_1.read(uint2(vi12), int(u1));
-  return;
-}
-
-fragment void tint_symbol(texture2d_ms<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 11b9e37..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 48
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %44 = OpBitcast %int %uint_1
-         %42 = OpImageFetch %v4float %43 %23 Sample %44
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index e90b685..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Multisampled_ConvertSampleOperand_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_multisampled_2d<f32>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = textureLoad(x_20, vi12, i32(u1));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 12d9a7e..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-Texture2DMS<float4> x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = x_20.Load(vi12, i1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index f8bde24..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_ms<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = tint_symbol_1.read(uint2(vi12), i1);
-  return;
-}
-
-fragment void tint_symbol(texture2d_ms<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 14513e2..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,64 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %42 = OpImageFetch %v4float %43 %23 Sample %int_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 099e81d..0000000
--- a/test/unittest/reader/spirv/ImageFetch_Multisampled_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_multisampled_2d<f32>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = textureLoad(x_20, vi12, i1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 7accfe0..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-Texture2D<float4> x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 4859037..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = tint_symbol_1.read(uint2(vi12), 0);
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index d8c9513..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 48
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %42 = OpImageFetch %v4float %43 %23 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 4510f15..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = textureLoad(x_20, vi12, 0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 226a19f..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-Texture2D<float4> x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = x_20.Load(int3(vi12, 3));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 9584010..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = tint_symbol_1.read(uint2(vi12), 3);
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index c1bde58..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,64 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %42 = OpImageFetch %v4float %43 %23 Lod %int_3
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index d4a286c..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = textureLoad(x_20, vi12, 3);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index 276e56d..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-Texture2D x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = float4(x_20.Load(int3(vi12, 0)).x, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index fe06360..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = float4(tint_symbol_1.read(uint2(vi12), 0), 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 2da4858..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,68 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %44 = OpLoad %3 %x_20
-         %43 = OpImageFetch %v4float %44 %23 Lod %int_0
-         %42 = OpCompositeExtract %float %43 0
-         %47 = OpCompositeConstruct %v4float %42 %float_0 %float_0 %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index fc8398c..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = vec4<f32>(textureLoad(x_20, vi12, 0), 0.0, 0.0, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index 7ebeb96..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-Texture2D x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = float4(x_20.Load(int3(vi12, 3)).x, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index d0545ae..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = float4(tint_symbol_1.read(uint2(vi12), 3), 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 3f8a1c8..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %44 = OpLoad %3 %x_20
-         %43 = OpImageFetch %v4float %44 %23 Lod %int_3
-         %42 = OpCompositeExtract %float %43 0
-         %46 = OpCompositeConstruct %v4float %42 %float_0 %float_0 %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 5f61e27..0000000
--- a/test/unittest/reader/spirv/ImageFetch_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = vec4<f32>(textureLoad(x_20, vi12, 3), 0.0, 0.0, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index a1c275b..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int x_99 = tint_tmp.z;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index dad08ff..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index f4b288f..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 1dfacd6..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index c89ba14..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  const int x_99 = tint_tmp.w;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index b88bd6a..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index 5dd28cb..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 0f64f8d..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index 4b93bd2..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture3D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  const int x_99 = tint_tmp.w;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index a5495ab..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture3d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(texture3d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index d42a8e9..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index b9f0bf4..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_3d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index b6bc8de..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCube<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int x_99 = tint_tmp.z;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 2dee0b0..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texturecube<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(texturecube<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 258238e..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 9cd5760..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_cube<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index e992e81..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCubeArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  const int x_99 = tint_tmp.w;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
deleted file mode 100644
index 3c4c504..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texturecube_array<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(texturecube_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index e3f3f68..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampledCubeArray
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index 99c8bf4..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_cube_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
deleted file mode 100644
index 485be37..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int x_99 = tint_tmp.z;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
deleted file mode 100644
index 2239f9f..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
deleted file mode 100644
index 66f82b0..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
deleted file mode 100644
index a059785..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl
deleted file mode 100644
index 56fc13f..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  const int x_99 = tint_tmp.w;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl
deleted file mode 100644
index ba7e2ba..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d_array<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(depth2d_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm
deleted file mode 100644
index 23d006c..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl
deleted file mode 100644
index f6d61ae..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.hlsl
deleted file mode 100644
index 39b656f..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCube x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int x_99 = tint_tmp.z;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.msl
deleted file mode 100644
index 2ca52ca..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depthcube<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(depthcube<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.spvasm
deleted file mode 100644
index d9342e6..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.wgsl
deleted file mode 100644
index 19ff8ec..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_cube;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.hlsl
deleted file mode 100644
index 27c1534..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCubeArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  const int x_99 = tint_tmp.w;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.msl
deleted file mode 100644
index 6152c24..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depthcube_array<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_mip_levels());
-  return;
-}
-
-fragment void tint_symbol(depthcube_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.spvasm
deleted file mode 100644
index a8d0d58..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampledCubeArray
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQueryLevels %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.wgsl
deleted file mode 100644
index 618b4f6..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_cube_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumLevels(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 7442848..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const uint x_99 = uint(tint_tmp.z);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 73e2dc3..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  uint const x_99 = uint(int(tint_symbol_1.get_num_mip_levels()));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 92079d3..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQueryLevels %int %48
-         %46 = OpBitcast %uint %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index cde8eeb..0000000
--- a/test/unittest/reader/spirv/ImageQueryLevels_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : u32 = u32(textureNumLevels(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 17c6a11..0000000
--- a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DMS<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int x_99 = tint_tmp.z;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 968f404..0000000
--- a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_ms<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int const x_99 = int(tint_symbol_1.get_num_samples());
-  return;
-}
-
-fragment void tint_symbol(texture2d_ms<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 7cbddbb..0000000
--- a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %6 %x_20
-         %46 = OpImageQuerySamples %int %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index c2207de..0000000
--- a/test/unittest/reader/spirv/ImageQuerySamples_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_multisampled_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : i32 = textureNumSamples(x_20);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index d0fc2f3..0000000
--- a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DMS<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const uint x_99 = uint(tint_tmp.z);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 5b2ed4d..0000000
--- a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_ms<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  uint const x_99 = uint(int(tint_symbol_1.get_num_samples()));
-  return;
-}
-
-fragment void tint_symbol(texture2d_ms<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 67ed2b5..0000000
--- a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySamples %int %48
-         %46 = OpBitcast %uint %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 03f824f..0000000
--- a/test/unittest/reader/spirv/ImageQuerySamples_UnsignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_multisampled_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : u32 = u32(textureNumSamples(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 737b06b..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  int3 tint_tmp_1;
-  x_20.GetDimensions(tint_tmp_1.x, tint_tmp_1.y, tint_tmp_1.z);
-  const int3 x_99 = int3(tint_tmp.xy, tint_tmp_1.z);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index f663818..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int3 const x_99 = int3(int2(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1)), int(tint_symbol_1.get_array_size()));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index f1cc99f..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v3int %48 %int_1
-         %46 = OpVectorShuffle %v2int %47 %47 0 1
-         %49 = OpCompositeExtract %int %46 0
-         %50 = OpCompositeExtract %int %46 1
-         %53 = OpLoad %6 %x_20
-         %52 = OpImageQuerySizeLod %v3int %53 %int_0
-         %51 = OpCompositeExtract %int %52 2
-         %55 = OpCompositeConstruct %v3int %49 %50 %51
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 7b57d9a..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec3<i32> = vec3<i32>(textureDimensions(x_20, i1), textureNumLayers(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 7b21f26..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCubeArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  int3 tint_tmp_1;
-  x_20.GetDimensions(tint_tmp_1.x, tint_tmp_1.y, tint_tmp_1.z);
-  const int3 x_99 = int3(tint_tmp.xy.xy, tint_tmp_1.z);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index f75acda..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texturecube_array<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int3 const x_99 = int3(int2(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1)).xy, int(tint_symbol_1.get_array_size()));
-  return;
-}
-
-fragment void tint_symbol(texturecube_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index e3febe5..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampledCubeArray
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v3int %48 %int_1
-         %46 = OpVectorShuffle %v2int %47 %47 0 1
-         %49 = OpVectorShuffle %v2int %46 %46 0 1
-         %50 = OpCompositeExtract %int %49 0
-         %51 = OpCompositeExtract %int %49 1
-         %54 = OpLoad %6 %x_20
-         %53 = OpImageQuerySizeLod %v3int %54 %int_0
-         %52 = OpCompositeExtract %int %53 2
-         %56 = OpCompositeConstruct %v3int %50 %51 %52
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 497b830..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_cube_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec3<i32> = vec3<i32>(textureDimensions(x_20, i1).xy, textureNumLayers(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index 3192658..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  int3 tint_tmp_1;
-  x_20.GetDimensions(tint_tmp_1.x, tint_tmp_1.y, tint_tmp_1.z);
-  const int3 x_99 = int3(tint_tmp.xy, tint_tmp_1.z);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 5717a17..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d_array<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int3 const x_99 = int3(int2(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1)), int(tint_symbol_1.get_array_size()));
-  return;
-}
-
-fragment void tint_symbol(depth2d_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index feffb2f..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v3int %48 %int_1
-         %46 = OpVectorShuffle %v2int %47 %47 0 1
-         %49 = OpCompositeExtract %int %46 0
-         %50 = OpCompositeExtract %int %46 1
-         %53 = OpLoad %6 %x_20
-         %52 = OpImageQuerySizeLod %v3int %53 %int_0
-         %51 = OpCompositeExtract %int %52 2
-         %55 = OpCompositeConstruct %v3int %49 %50 %51
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 362eee8..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec3<i32> = vec3<i32>(textureDimensions(x_20, i1), textureNumLayers(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index 78f2dd8..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCubeArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  int3 tint_tmp_1;
-  x_20.GetDimensions(tint_tmp_1.x, tint_tmp_1.y, tint_tmp_1.z);
-  const int3 x_99 = int3(tint_tmp.xy.xy, tint_tmp_1.z);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 83fc391..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depthcube_array<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int3 const x_99 = int3(int2(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1)).xy, int(tint_symbol_1.get_array_size()));
-  return;
-}
-
-fragment void tint_symbol(depthcube_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index cc25919..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampledCubeArray
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v3int %48 %int_1
-         %46 = OpVectorShuffle %v2int %47 %47 0 1
-         %49 = OpVectorShuffle %v2int %46 %46 0 1
-         %50 = OpCompositeExtract %int %49 0
-         %51 = OpCompositeExtract %int %49 1
-         %54 = OpLoad %6 %x_20
-         %53 = OpImageQuerySizeLod %v3int %54 %int_0
-         %52 = OpCompositeExtract %int %53 2
-         %56 = OpCompositeConstruct %v3int %50 %51 %52
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 84671ed..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_cube_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec3<i32> = vec3<i32>(textureDimensions(x_20, i1).xy, textureNumLayers(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 615507a..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int2 x_99 = int2(tint_tmp.xy);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 0facef9..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int2 const x_99 = int2(int2(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1)));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index 3c1a645..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v2int %48 %int_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 01f8917..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec2<i32> = vec2<i32>(textureDimensions(x_20, i1));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index a36cb04..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture3D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int4 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
-  const int3 x_99 = int3(tint_tmp.xyz);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index ea128c4..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture3d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int3 const x_99 = int3(int3(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1), tint_symbol_1.get_depth(i1)));
-  return;
-}
-
-fragment void tint_symbol(texture3d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 375680d..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v3int %48 %int_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index cc23ec1..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_3d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec3<i32> = vec3<i32>(textureDimensions(x_20, i1));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index 416f283..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCube<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int2 x_99 = int2(tint_tmp.xy.xy);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 67332d0..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texturecube<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int2 const x_99 = int2(int2(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1)).xy);
-  return;
-}
-
-fragment void tint_symbol(texturecube<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 44bbb99..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v2int %48 %int_1
-         %49 = OpVectorShuffle %v2int %47 %47 0 1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %51 = OpLabel
-         %52 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 0aac2b1..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_cube<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec2<i32> = vec2<i32>(textureDimensions(x_20, i1).xy);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index 0272d4e..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int2 x_99 = int2(tint_tmp.xy);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
deleted file mode 100644
index 5d81362..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int2 const x_99 = int2(int2(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1)));
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index dcb0fa8..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v2int %48 %int_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index 57e9d2f..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec2<i32> = vec2<i32>(textureDimensions(x_20, i1));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
deleted file mode 100644
index 45f9b9b..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-TextureCube x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(i1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int2 x_99 = int2(tint_tmp.xy.xy);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
deleted file mode 100644
index e5c95fe..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depthcube<float, access::sample> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int2 const x_99 = int2(int2(tint_symbol_1.get_width(i1), tint_symbol_1.get_height(i1)).xy);
-  return;
-}
-
-fragment void tint_symbol(depthcube<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
deleted file mode 100644
index cd2eb75..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySizeLod %v2int %48 %int_1
-         %49 = OpVectorShuffle %v2int %47 %47 0 1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %51 = OpLabel
-         %52 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
deleted file mode 100644
index 7234972..0000000
--- a/test/unittest/reader/spirv/ImageQuerySizeLod_NonArrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_cube;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec2<i32> = vec2<i32>(textureDimensions(x_20, i1).xy);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 7ec5278..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  int3 tint_tmp_1;
-  x_20.GetDimensions(tint_tmp_1.x, tint_tmp_1.y, tint_tmp_1.z);
-  const int3 x_99 = int3(tint_tmp.xy, tint_tmp_1.z);
-  const float4 x_98 = x_20.Load(int4(int3(vi123.xy, vi123.z), 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 856424c..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int3 const x_99 = int3(int2(tint_symbol_1.get_width(), tint_symbol_1.get_height()), int(tint_symbol_1.get_array_size()));
-  float4 const x_98 = tint_symbol_1.read(uint2(vi123.xy), vi123.z);
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 0503340..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,91 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySize %v3int %48
-         %46 = OpVectorShuffle %v2int %47 %47 0 1
-         %49 = OpCompositeExtract %int %46 0
-         %50 = OpCompositeExtract %int %46 1
-         %53 = OpLoad %6 %x_20
-         %52 = OpImageQuerySize %v3int %53
-         %51 = OpCompositeExtract %int %52 2
-         %54 = OpCompositeConstruct %v3int %49 %50 %51
-         %56 = OpLoad %6 %x_20
-         %57 = OpVectorShuffle %v2int %31 %31 0 1
-         %58 = OpCompositeExtract %int %57 0
-         %59 = OpCompositeExtract %int %57 1
-         %60 = OpCompositeExtract %int %31 2
-         %61 = OpCompositeConstruct %v3int %58 %59 %60
-         %55 = OpImageRead %v4float %56 %61
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index bbdc71f..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_Arrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d_array<rgba32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec3<i32> = vec3<i32>(textureDimensions(x_20), textureNumLayers(x_20));
-  let x_98 : vec4<f32> = textureLoad(x_20, vi123.xy, vi123.z);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 00208b9..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int2 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y);
-  const int2 x_99 = int2(tint_tmp);
-  const float4 x_98 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 752567f..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int2 const x_99 = int2(int2(tint_symbol_1.get_width(), tint_symbol_1.get_height()));
-  float4 const x_98 = tint_symbol_1.read(uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index b156c3e..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySize %v2int %48
-         %50 = OpLoad %6 %x_20
-         %49 = OpImageRead %v4float %50 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 66757c0..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec2<i32> = vec2<i32>(textureDimensions(x_20));
-  let x_98 : vec4<f32> = textureLoad(x_20, vi12);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index 8583b1b..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture3D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int3 x_99 = int3(tint_tmp);
-  const float4 x_98 = x_20.Load(int4(vi123, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 2de5b2c..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture3d<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int3 const x_99 = int3(int3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth()));
-  float4 const x_98 = tint_symbol_1.read(uint3(vi123));
-  return;
-}
-
-fragment void tint_symbol(texture3d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 6595822..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySize %v3int %48
-         %50 = OpLoad %6 %x_20
-         %49 = OpImageRead %v4float %50 %31
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 022852a..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_3d<rgba32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec3<i32> = vec3<i32>(textureDimensions(x_20));
-  let x_98 : vec4<f32> = textureLoad(x_20, vi123);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index 34d7716..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DMS<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  int3 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const int2 x_99 = int2(tint_tmp.xy);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 65e3deb..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_ms<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  int2 const x_99 = int2(int2(tint_symbol_1.get_width(), tint_symbol_1.get_height()));
-  return;
-}
-
-fragment void tint_symbol(texture2d_ms<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index a6fe6f9..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %6 %x_20
-         %47 = OpImageQuerySize %v2int %48
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index b6eed29..0000000
--- a/test/unittest/reader/spirv/ImageQuerySize_NonArrayed_SignedResult_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_multisampled_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_99 : vec2<i32> = vec2<i32>(textureDimensions(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index b6074fd..0000000
--- a/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-warning: use of deprecated intrinsic
-Texture2D<float4> x_20 : register(t1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  const float4 x_99 = x_20.Load(int3(vi12, 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 2f39a14..0000000
--- a/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::read> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  float4 const x_99 = tint_symbol_1.read(uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 0590182..0000000
--- a/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %42 = OpImageRead %v4float %43 %23
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index ee058ef..0000000
--- a/test/unittest/reader/spirv/ImageRead_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32float, read>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  let x_99 : vec4<f32> = textureLoad(x_20, vi12);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 29f4734..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmpLevelZero(x_10, vf12, 0.200000003f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 9dafd8b..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords12, 0.200000003f, level(0));
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index dcb7022..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %47 = OpImageSampleDrefExplicitLod %float %51 %17 %float_0_200000003 Lod %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index dc05282..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompareLevel(x_20, x_10, coords12, 0.200000003);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 0db5d67..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2DArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmpLevelZero(x_10, float3(coords123.xy, float(int(coords123.z))), 0.200000003f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 63b2ca3..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords123.xy, int(coords123.z), 0.200000003f, level(0));
-  return;
-}
-
-fragment void tint_symbol(depth2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index c907c32..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %52 = OpVectorShuffle %v2float %21 %21 0 1
-         %53 = OpCompositeExtract %float %52 0
-         %54 = OpCompositeExtract %float %52 1
-         %57 = OpCompositeExtract %float %21 2
-         %56 = OpConvertFToS %int %57
-         %55 = OpConvertSToF %float %56
-         %58 = OpCompositeConstruct %v3float %53 %54 %55
-         %47 = OpImageSampleDrefExplicitLod %float %51 %58 %float_0_200000003 Lod %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 3042bf3..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompareLevel(x_20, x_10, coords123.xy, i32(coords123.z), 0.200000003);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index aaea7f7..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmpLevelZero(x_10, vf12, 0.200000003f, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 4abbaa8..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords12, 0.200000003f, level(0), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 14b94d7..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-    %float_0 = OpConstant %float 0
-         %54 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %47 = OpImageSampleDrefExplicitLod %float %51 %17 %float_0_200000003 Lod|ConstOffset %float_0 %54
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 1fede99..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompareLevel(x_20, x_10, coords12, 0.200000003, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index 5231fc8..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2DArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmpLevelZero(x_10, float3(coords123.xy, float(int(coords123.z))), 0.200000003f, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 87603be..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords123.xy, int(coords123.z), 0.200000003f, level(0), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(depth2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 1a27bc0..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-    %float_0 = OpConstant %float 0
-         %61 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %52 = OpVectorShuffle %v2float %21 %21 0 1
-         %53 = OpCompositeExtract %float %52 0
-         %54 = OpCompositeExtract %float %52 1
-         %57 = OpCompositeExtract %float %21 2
-         %56 = OpConvertFToS %int %57
-         %55 = OpConvertSToF %float %56
-         %58 = OpCompositeConstruct %v3float %53 %54 %55
-         %47 = OpImageSampleDrefExplicitLod %float %51 %58 %float_0_200000003 Lod|ConstOffset %float_0 %61
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index b01094d..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompareLevel(x_20, x_10, coords123.xy, i32(coords123.z), 0.200000003, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index 1d68927..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-TextureCube x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmpLevelZero(x_10, vf123, 0.200000003f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
deleted file mode 100644
index d4df875..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depthcube<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords123, 0.200000003f, level(0));
-  return;
-}
-
-fragment void tint_symbol(depthcube<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index addf940..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %47 = OpImageSampleDrefExplicitLod %float %51 %21 %float_0_200000003 Lod %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index 6422976..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_cube;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompareLevel(x_20, x_10, coords123, 0.200000003);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
deleted file mode 100644
index 7dc9c5f..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-TextureCubeArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmpLevelZero(x_10, float4(coords1234.xyz, float(int(coords1234.w))), 0.200000003f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
deleted file mode 100644
index 5d62846..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depthcube_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords1234.xyz, int(coords1234.w), 0.200000003f, level(0));
-  return;
-}
-
-fragment void tint_symbol(depthcube_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
deleted file mode 100644
index af5c4f0..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,89 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampledCubeArray
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float Cube 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %52 = OpVectorShuffle %v3float %24 %24 0 1 2
-         %53 = OpCompositeExtract %float %52 0
-         %54 = OpCompositeExtract %float %52 1
-         %55 = OpCompositeExtract %float %52 2
-         %58 = OpCompositeExtract %float %24 3
-         %57 = OpConvertFToS %int %58
-         %56 = OpConvertSToF %float %57
-         %59 = OpCompositeConstruct %v4float %53 %54 %55 %56
-         %47 = OpImageSampleDrefExplicitLod %float %51 %59 %float_0_200000003 Lod %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
deleted file mode 100644
index 7ca37e7..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefExplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_cube_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompareLevel(x_20, x_10, coords1234.xyz, i32(coords1234.w), 0.200000003);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 9a7cc2e..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmp(x_10, vf12, 0.200000003f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 9146ee9..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords12, 0.200000003f);
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 0279112..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %47 = OpImageSampleDrefImplicitLod %float %51 %17 %float_0_200000003
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index a49497f..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompare(x_20, x_10, coords12, 0.200000003);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 4ce5274..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2DArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmp(x_10, float3(coords123.xy, float(int(coords123.z))), 0.200000003f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 3d3f719..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords123.xy, int(coords123.z), 0.200000003f);
-  return;
-}
-
-fragment void tint_symbol(depth2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index add70aa..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %52 = OpVectorShuffle %v2float %21 %21 0 1
-         %53 = OpCompositeExtract %float %52 0
-         %54 = OpCompositeExtract %float %52 1
-         %57 = OpCompositeExtract %float %21 2
-         %56 = OpConvertFToS %int %57
-         %55 = OpConvertSToF %float %56
-         %58 = OpCompositeConstruct %v3float %53 %54 %55
-         %47 = OpImageSampleDrefImplicitLod %float %51 %58 %float_0_200000003
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 0f4560d..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompare(x_20, x_10, coords123.xy, i32(coords123.z), 0.200000003);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index 4c3c3d9..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmp(x_10, vf12, 0.200000003f, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 0e6614a..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords12, 0.200000003f, int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 7e97a13..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-         %53 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %47 = OpImageSampleDrefImplicitLod %float %51 %17 %float_0_200000003 ConstOffset %53
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 6b39dae..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompare(x_20, x_10, coords12, 0.200000003, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index f325185..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2DArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float x_79 = x_20.SampleCmp(x_10, float3(coords123.xy, float(int(coords123.z))), 0.200000003f, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 21bbffd..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float const x_79 = tint_symbol_1.sample_compare(tint_symbol_2, coords123.xy, int(coords123.z), 0.200000003f, int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(depth2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 17489b5..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-         %60 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %52 = OpVectorShuffle %v2float %21 %21 0 1
-         %53 = OpCompositeExtract %float %52 0
-         %54 = OpCompositeExtract %float %52 1
-         %57 = OpCompositeExtract %float %21 2
-         %56 = OpConvertFToS %int %57
-         %55 = OpConvertSToF %float %56
-         %58 = OpCompositeConstruct %v3float %53 %54 %55
-         %47 = OpImageSampleDrefImplicitLod %float %51 %58 %float_0_200000003 ConstOffset %60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 276e633..0000000
--- a/test/unittest/reader/spirv/ImageSampleDrefImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : f32 = textureSampleCompare(x_20, x_10, coords123.xy, i32(coords123.z), 0.200000003, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index a7a3154..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleLevel(x_10, vf12, f1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 28ae049..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, vf12, level(f1));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 327ff1e..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,77 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleExplicitLod %v4float %50 %16 Lod %float_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index aadaa4e..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleLevel(x_20, x_10, vf12, f1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 925e26a..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = float4(x_20.SampleLevel(x_10, vf12, int(f1)).x, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index d5bea1a..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = float4(tint_symbol_1.sample(tint_symbol_2, vf12, level(int(f1))), 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index be082bb..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %50 = OpTypeSampledImage %6
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %48 = OpLoad %3 %x_10
-         %49 = OpLoad %6 %x_20
-         %51 = OpSampledImage %50 %49 %48
-         %53 = OpConvertFToS %int %float_1
-         %52 = OpConvertSToF %float %53
-         %47 = OpImageSampleExplicitLod %v4float %51 %16 Lod %52
-         %46 = OpCompositeExtract %float %47 0
-         %55 = OpCompositeConstruct %v4float %46 %float_0 %float_0 %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 090941d..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_DepthTexture_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = vec4<f32>(textureSampleLevel(x_20, x_10, vf12, i32(f1)), 0.0, 0.0, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 9c6e504..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleGrad(x_10, vf12, vf12, vf21);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 5142044..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, gradient2d(vf12, vf21));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 67236c7..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,77 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleExplicitLod %v4float %50 %16 Grad %16 %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index fd8a7a6..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleGrad(x_20, x_10, coords12, vf12, vf21);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index b09b8df..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleGrad(x_10, float3(coords123.xy, float(int(coords123.z))), vf12, vf21);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 447648b..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), gradient2d(vf12, vf21));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index 29ee7b8..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleExplicitLod %v4float %50 %57 Grad %16 %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 9df3616..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleGrad(x_20, x_10, coords123.xy, i32(coords123.z), vf12, vf21);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index 9c0f1cc..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleGrad(x_10, vf12, vf12, vf21, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index b987bed..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, gradient2d(vf12, vf21), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 83e52c9..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,78 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-         %51 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleExplicitLod %v4float %50 %16 Grad|ConstOffset %16 %17 %51
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 3f066bd..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleGrad(x_20, x_10, coords12, vf12, vf21, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index d232f37..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleGrad(x_10, vf12, vf12, vf21, int2(uint2(3u, 4u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index b6682b3..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, gradient2d(vf12, vf21), int2(uint2(3u, 4u)));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 8d831c6..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,78 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-         %51 = OpConstantComposite %v2int %int_3 %int_3
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleExplicitLod %v4float %50 %16 Grad|ConstOffset %16 %17 %51
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index ce99bde..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleGrad(x_20, x_10, coords12, vf12, vf21, vec2<i32>(vec2<u32>(3u, 4u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index 449647a..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleGrad(x_10, float3(coords123.xy, float(int(coords123.z))), vf12, vf21, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
deleted file mode 100644
index 9def2de..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), gradient2d(vf12, vf21), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index d873c84..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-         %58 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleExplicitLod %v4float %50 %57 Grad|ConstOffset %16 %17 %58
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index 36779e2..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleGrad(x_20, x_10, coords123.xy, i32(coords123.z), vf12, vf21, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
deleted file mode 100644
index 76c0cd0..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleGrad(x_10, float3(coords123.xy, float(int(coords123.z))), vf12, vf21, int2(uint2(3u, 4u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
deleted file mode 100644
index 0192842..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), gradient2d(vf12, vf21), int2(uint2(3u, 4u)));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
deleted file mode 100644
index 7635bff..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-         %58 = OpConstantComposite %v2int %int_3 %int_3
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleExplicitLod %v4float %50 %57 Grad|ConstOffset %16 %17 %58
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
deleted file mode 100644
index af81b04..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingGrad_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleGrad(x_20, x_10, coords123.xy, i32(coords123.z), vf12, vf21, vec2<i32>(vec2<u32>(3u, 4u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index d5db37c..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleLevel(x_10, vf12, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 18abb26..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, level(0.0f));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index e6f3413..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,78 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleExplicitLod %v4float %50 %16 Lod %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 59fd0f3..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleLevel(x_20, x_10, coords12, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 79643f4..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleLevel(x_10, float3(coords123.xy, float(int(coords123.z))), 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index d6dfa64..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), level(0.0f));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index cc09c3e..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleExplicitLod %v4float %50 %57 Lod %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 3ce4005..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleLevel(x_20, x_10, coords123.xy, i32(coords123.z), 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index e6113c9..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleLevel(x_10, vf12, 0.0f, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 8b6bf6e..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, level(0.0f), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 8f50fc6..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleExplicitLod %v4float %50 %16 Lod|ConstOffset %float_0 %52
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 7865423..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleLevel(x_20, x_10, coords12, 0.0, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index cb37d6f..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleLevel(x_10, vf12, 0.0f, int2(uint2(3u, 4u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index ce2de4c..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, level(0.0f), int2(uint2(3u, 4u)));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index ab036fd..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v2int %int_3 %int_3
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleExplicitLod %v4float %50 %16 Lod|ConstOffset %float_0 %52
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 4bb18fa..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleLevel(x_20, x_10, coords12, 0.0, vec2<i32>(vec2<u32>(3u, 4u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index 4981065..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleLevel(x_10, float3(coords123.xy, float(int(coords123.z))), 0.0f, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
deleted file mode 100644
index fa4068f..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), level(0.0f), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index c6caa9b..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_0 = OpConstant %float 0
-         %59 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleExplicitLod %v4float %50 %57 Lod|ConstOffset %float_0 %59
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index 54de1ae..0000000
--- a/test/unittest/reader/spirv/ImageSampleExplicitLod_UsingLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleLevel(x_20, x_10, coords123.xy, i32(coords123.z), 0.0, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index c43b5da..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerComparisonState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_200 = float4(x_20.Sample(x_10, coords12).x, 0.0f, 0.0f, 0.0f);
-  const float x_210 = x_20.SampleCmp(x_30, coords12, 0.200000003f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index e2f4f20..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2, sampler tint_symbol_3) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_200 = float4(tint_symbol_1.sample(tint_symbol_2, coords12), 0.0f, 0.0f, 0.0f);
-  float const x_210 = tint_symbol_1.sample_compare(tint_symbol_3, coords12, 0.200000003f);
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_4 [[texture(0)]], sampler tint_symbol_5 [[sampler(0)]], sampler tint_symbol_6 [[sampler(1)]]) {
-  main_1(tint_symbol_4, tint_symbol_5, tint_symbol_6);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 95e31fb..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %17 = OpConstantComposite %v2float %float_1 %float_2
-         %18 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %21 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %29 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %32 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %35 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %40 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %43 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %46 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %51 = OpTypeSampledImage %6
-    %float_0 = OpConstant %float 0
-%float_0_200000003 = OpConstant %float 0.200000003
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %48 = OpImageSampleImplicitLod %v4float %52 %17
-         %47 = OpCompositeExtract %float %48 0
-         %54 = OpCompositeConstruct %v4float %47 %float_0 %float_0 %float_0
-         %56 = OpLoad %3 %x_30
-         %57 = OpLoad %6 %x_20
-         %58 = OpSampledImage %51 %57 %56
-         %55 = OpImageSampleDrefImplicitLod %float %58 %17 %float_0_200000003
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 58da158..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_BothDrefAndNonDref_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler_comparison;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_200 : vec4<f32> = vec4<f32>(textureSample(x_20, x_10, coords12), 0.0, 0.0, 0.0);
-  let x_210 : f32 = textureSampleCompare(x_20, x_30, coords12, 0.200000003);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index e940f29..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.Sample(x_10, vf12);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index d779927..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12);
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index b9b07e0..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,77 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleImplicitLod %v4float %50 %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 6be7f3c..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSample(x_20, x_10, coords12);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 59431b0..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.Sample(x_10, float3(coords123.xy, float(int(coords123.z))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index b27e521..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index a3319b3..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleImplicitLod %v4float %50 %57
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index aa90028..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSample(x_20, x_10, coords123.xy, i32(coords123.z));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index dfaec94..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.Sample(x_10, vf12, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 3fca582..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 00b89b0..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,78 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-         %51 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleImplicitLod %v4float %50 %16 ConstOffset %51
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index ceb1e1a..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSample(x_20, x_10, coords12, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index 555605d..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.Sample(x_10, float3(coords123.xy, float(int(coords123.z))), int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 378bd5f..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 2b8533c..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-         %58 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleImplicitLod %v4float %50 %57 ConstOffset %58
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 64373e6..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSample(x_20, x_10, coords123.xy, i32(coords123.z), vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index cc97de1..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleBias(x_10, vf12, 7.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
deleted file mode 100644
index 525da67..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, bias(7.0f));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index 53b54aa..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,78 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_7 = OpConstant %float 7
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleImplicitLod %v4float %50 %16 Bias %float_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index 45deb93..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleBias(x_20, x_10, coords12, 7.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
deleted file mode 100644
index 4cce41b..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleBias(x_10, float3(coords123.xy, float(int(coords123.z))), 7.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
deleted file mode 100644
index 3604bc3..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), bias(7.0f));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
deleted file mode 100644
index 49c3787..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_7 = OpConstant %float 7
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleImplicitLod %v4float %50 %57 Bias %float_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
deleted file mode 100644
index 47fc92f..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleBias(x_20, x_10, coords123.xy, i32(coords123.z), 7.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl
deleted file mode 100644
index a7fbb8b..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleBias(x_10, vf12, 7.0f, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl
deleted file mode 100644
index de3934d..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, bias(7.0f), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm
deleted file mode 100644
index 4dbd27c..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_7 = OpConstant %float 7
-         %52 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleImplicitLod %v4float %50 %16 Bias|ConstOffset %float_7 %52
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl
deleted file mode 100644
index 049a22b..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleBias(x_20, x_10, coords12, 7.0, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.hlsl
deleted file mode 100644
index 997c2cb..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleBias(x_10, vf12, 7.0f, int2(uint2(3u, 4u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.msl
deleted file mode 100644
index 9f75094..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords12, bias(7.0f), int2(uint2(3u, 4u)));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.spvasm
deleted file mode 100644
index 91ee5bc..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_7 = OpConstant %float 7
-         %52 = OpConstantComposite %v2int %int_3 %int_3
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %46 = OpImageSampleImplicitLod %v4float %50 %16 Bias|ConstOffset %float_7 %52
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.wgsl
deleted file mode 100644
index 1545cfd..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleBias(x_20, x_10, coords12, 7.0, vec2<i32>(vec2<u32>(3u, 4u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.hlsl
deleted file mode 100644
index f92cc32..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float2 vf21 = float2(2.0f, 1.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float coords1 = 1.0f;
-  const float2 coords12 = vf12;
-  const float3 coords123 = vf123;
-  const float4 coords1234 = vf1234;
-  const float4 x_79 = x_20.SampleBias(x_10, float3(coords123.xy, float(int(coords123.z))), 7.0f, int2(3, 4));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.msl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.msl
deleted file mode 100644
index acd7de0..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float2 const vf21 = float2(2.0f, 1.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const coords1 = 1.0f;
-  float2 const coords12 = vf12;
-  float3 const coords123 = vf123;
-  float4 const coords1234 = vf1234;
-  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), bias(7.0f), int2(3, 4));
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.spvasm
deleted file mode 100644
index 42d0090..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %16 = OpConstantComposite %v2float %float_1 %float_2
-         %17 = OpConstantComposite %v2float %float_2 %float_1
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %20 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %28 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %31 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %34 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %39 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %42 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %45 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %49 = OpTypeSampledImage %6
-    %float_7 = OpConstant %float 7
-         %59 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %47 = OpLoad %3 %x_10
-         %48 = OpLoad %6 %x_20
-         %50 = OpSampledImage %49 %48 %47
-         %51 = OpVectorShuffle %v2float %20 %20 0 1
-         %52 = OpCompositeExtract %float %51 0
-         %53 = OpCompositeExtract %float %51 1
-         %56 = OpCompositeExtract %float %20 2
-         %55 = OpConvertFToS %int %56
-         %54 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v3float %52 %53 %54
-         %46 = OpImageSampleImplicitLod %v4float %50 %57 Bias|ConstOffset %float_7 %59
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.wgsl
deleted file mode 100644
index f3e078c..0000000
--- a/test/unittest/reader/spirv/ImageSampleImplicitLod_SpvParserHandleTest_SampledImageAccessTest_Variable_8.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf21 : vec2<f32> = vec2<f32>(2.0, 1.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let coords1 : f32 = 1.0;
-  let coords12 : vec2<f32> = vf12;
-  let coords123 : vec3<f32> = vf123;
-  let coords1234 : vec4<f32> = vf1234;
-  let x_79 : vec4<f32> = textureSampleBias(x_20, x_10, coords123.xy, i32(coords123.z), 7.0, vec2<i32>(3, 4));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index fd04635..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = float4(f1, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 4cf4146..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(float4(f1, 0.0f, 0.0f, 0.0f), uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 43b2122..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %45 = OpCompositeConstruct %v4float %float_1 %float_0 %float_0 %float_0
-               OpImageWrite %43 %23 %45
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 0e65cd9..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vec4<f32>(f1, 0.0, 0.0, 0.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 11dee90..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = float4(vf12, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 21c4397..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(float4(vf12, 0.0f, 0.0f), uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index 2dbce18..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %44 = OpCompositeExtract %float %12 0
-         %45 = OpCompositeExtract %float %12 1
-         %47 = OpCompositeConstruct %v4float %44 %45 %float_0 %float_0
-               OpImageWrite %43 %23 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 00f5da6..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vec4<f32>(vf12, 0.0, 0.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index ae87f19..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = float4(vf123, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 2e6a730..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(float4(vf123, 0.0f), uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index 545d472..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,70 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %44 = OpCompositeExtract %float %15 0
-         %45 = OpCompositeExtract %float %15 1
-         %46 = OpCompositeExtract %float %15 2
-         %48 = OpCompositeConstruct %v4float %44 %45 %46 %float_0
-               OpImageWrite %43 %23 %48
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 831db1a..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vec4<f32>(vf123, 0.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index 247c816..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = vf1234;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 73059c6..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(vf1234, uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 74da5a3..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-               OpImageWrite %43 %23 %18
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 1a90a89..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vf1234);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index 11dee90..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = float4(vf12, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.msl
deleted file mode 100644
index 21c4397..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(float4(vf12, 0.0f, 0.0f), uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index 48172e2..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,70 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpCapability StorageImageExtendedFormats
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %44 = OpCompositeExtract %float %12 0
-         %45 = OpCompositeExtract %float %12 1
-         %47 = OpCompositeConstruct %v4float %44 %45 %float_0 %float_0
-               OpImageWrite %43 %23 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index 11e28a6..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rg32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vec4<f32>(vf12, 0.0, 0.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.hlsl
deleted file mode 100644
index ae87f19..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = float4(vf123, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.msl
deleted file mode 100644
index 2e6a730..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(float4(vf123, 0.0f), uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.spvasm
deleted file mode 100644
index 643e924..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,71 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpCapability StorageImageExtendedFormats
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %44 = OpCompositeExtract %float %15 0
-         %45 = OpCompositeExtract %float %15 1
-         %46 = OpCompositeExtract %float %15 2
-         %48 = OpCompositeConstruct %v4float %44 %45 %46 %float_0
-               OpImageWrite %43 %23 %48
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.wgsl
deleted file mode 100644
index 66c3140..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rg32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vec4<f32>(vf123, 0.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.hlsl
deleted file mode 100644
index 247c816..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = vf1234;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.msl
deleted file mode 100644
index 73059c6..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(vf1234, uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.spvasm
deleted file mode 100644
index 630dc28..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpCapability StorageImageExtendedFormats
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-               OpImageWrite %43 %23 %18
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.wgsl
deleted file mode 100644
index 7b752c7..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rg32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vf1234);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.hlsl
deleted file mode 100644
index 247c816..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = vf1234;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.msl
deleted file mode 100644
index 73059c6..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(vf1234, uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.spvasm
deleted file mode 100644
index 56c5392..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-               OpImageWrite %43 %23 %18
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.wgsl
deleted file mode 100644
index d0c05f4..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Arity_SpvParserHandleTest_ImageAccessTest_Variable_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vf1234);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index e3e7108..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<uint4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = vu1234;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index f6079d7..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<uint, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(vu1234, uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<uint, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 75f775e..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-       %uint = OpTypeInt 32 0
-          %3 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %13 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %16 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %19 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %24 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %27 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %30 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-               OpImageWrite %43 %24 %40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index dbddd5b..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32uint, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vu1234);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 3a143b1..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<int4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = vi1234;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 5a0dc85..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<int, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(vi1234, uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<int, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index 0951fe5..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-        %int = OpTypeInt 32 1
-          %3 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %13 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %16 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %19 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-               OpImageWrite %43 %23 %29
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 99f8aea..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_SameSignedness_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32sint, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vi1234);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 0b05d87..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<uint4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = uint4(vu12, 0u, 0u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index f191b64..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<uint, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(uint4(vu12, 0u, 0u), uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<uint, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 2621eb7..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-       %uint = OpTypeInt 32 0
-          %3 = OpTypeImage %uint 2D 0 0 0 2 R32ui
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %13 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %16 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %19 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %24 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %27 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %30 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %44 = OpCompositeExtract %uint %34 0
-         %45 = OpCompositeExtract %uint %34 1
-         %47 = OpCompositeConstruct %v4uint %44 %45 %uint_0 %uint_0
-               OpImageWrite %43 %24 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 71e539d..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32uint, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vec4<u32>(vu12, 0u, 0u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 1e84180..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<int4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = int4(vi12, 0, 0);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl
deleted file mode 100644
index 6660ef6..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<int, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(int4(vi12, 0, 0), uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<int, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index 9ea9534..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-        %int = OpTypeInt 32 1
-          %3 = OpTypeImage %int 2D 0 0 0 2 R32i
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %13 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %16 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %19 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-         %44 = OpCompositeExtract %int %23 0
-         %45 = OpCompositeExtract %int %23 1
-         %47 = OpCompositeConstruct %v4int %44 %45 %int_0 %int_0
-               OpImageWrite %43 %23 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %49 = OpLabel
-         %50 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index ba6ec48..0000000
--- a/test/unittest/reader/spirv/ImageWrite_ConvertTexelOperand_Signedness_AndWidening_SpvParserHandleTest_ImageAccessTest_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32sint, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vec4<i32>(vi12, 0, 0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 247c816..0000000
--- a/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-RWTexture2D<float4> x_20 : register(u1, space2);
-
-void main_1() {
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const int2 offsets2d = int2(3, 4);
-  x_20[vi12] = vf1234;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 73059c6..0000000
--- a/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  int2 const offsets2d = int2(3, 4);
-  tint_symbol_1.write(vf1234, uint2(vi12));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 56c5392..0000000
--- a/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %12 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %15 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %23 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %26 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %29 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %34 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %37 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %40 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-         %41 = OpConstantComposite %v2int %int_3 %int_4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %43 = OpLoad %3 %x_20
-               OpImageWrite %43 %23 %18
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index d0c05f4..0000000
--- a/test/unittest/reader/spirv/ImageWrite_OptionalParams_SpvParserHandleTest_ImageAccessTest_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<rgba32float, write>;
-
-fn main_1() {
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let offsets2d : vec2<i32> = vec2<i32>(3, 4);
-  textureStore(x_20, vi12, vf1234);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index bc1d9f0..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-Texture1D<float4> x_10 : register(t0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 8313226..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index aae3c19..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[group(0), binding(0)]] var x_10 : texture_1d<f32>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index bc1d9f0..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-Texture1D<float4> x_10 : register(t0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index e27fc57..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpCapability Image1D
-               OpCapability StorageImageExtendedFormats
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 1D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 0cd9014..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[group(0), binding(0)]] var x_10 : texture_storage_1d<rg32float, read>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index 8f1936b..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWTexture1D<float4> x_10 : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index d534af7..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpCapability Image1D
-               OpCapability StorageImageExtendedFormats
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 NonReadable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 1D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index 5f7b40a..0000000
--- a/test/unittest/reader/spirv/Images_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[group(0), binding(0)]] var x_10 : texture_storage_1d<rg32float, write>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.hlsl
deleted file mode 100644
index 675bb94..0000000
--- a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DMS<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  int3 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const uint x_71 = uint(tint_tmp.z);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.msl b/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.msl
deleted file mode 100644
index f4cb285..0000000
--- a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_ms<float, access::read> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  uint const x_71 = uint(int(tint_symbol_1.get_num_samples()));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_ms<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.spvasm
deleted file mode 100644
index 99757d0..0000000
--- a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %50 = OpLoad %6 %x_20
-         %49 = OpImageQuerySamples %int %50
-         %48 = OpBitcast %uint %49
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.wgsl
deleted file mode 100644
index a79ff60..0000000
--- a/test/unittest/reader/spirv/Multisampled_Only2DNonArrayedIsValid_SpvParserHandleTest_ImageDeclTest_DeclareAndUseHandle_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_multisampled_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_71 : u32 = u32(textureNumSamples(x_20));
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 0b1e681..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, float3(vf123.xy, float(int(vf123.z))));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index d690dbf..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf123.xy, int(vf123.z));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 7645a19..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v2float %44 %44 0 1
-         %54 = OpCompositeExtract %float %53 0
-         %55 = OpCompositeExtract %float %53 1
-         %58 = OpCompositeExtract %float %44 2
-         %57 = OpConvertFToS %int %58
-         %56 = OpConvertSToF %float %57
-         %59 = OpCompositeConstruct %v3float %54 %55 %56
-         %48 = OpImageSampleImplicitLod %v4float %52 %59
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index a5f904a..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf123.xy, i32(vf123.z));
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index 0a0812e..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.SampleLevel(x_10, float3(vf123.xy, float(int(vf123.z))), f1);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index cbd2780..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf123.xy, int(vf123.z), level(f1));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index c2ba135..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %53 = OpVectorShuffle %v2float %44 %44 0 1
-         %54 = OpCompositeExtract %float %53 0
-         %55 = OpCompositeExtract %float %53 1
-         %58 = OpCompositeExtract %float %44 2
-         %57 = OpConvertFToS %int %58
-         %56 = OpConvertSToF %float %57
-         %59 = OpCompositeConstruct %v3float %54 %55 %56
-         %48 = OpImageSampleExplicitLod %v4float %52 %59 Lod %float_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index 3e2748d..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSampleLevel(x_20, x_10, vf123.xy, i32(vf123.z), f1);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
deleted file mode 100644
index 63be007..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2DArray x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float x_73 = x_20.SampleCmp(x_10, float3(vf123.xy, float(int(vf123.z))), 0.200000003f);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
deleted file mode 100644
index c15b716..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float const x_73 = tint_symbol_1.sample_compare(tint_symbol_2, vf123.xy, int(vf123.z), 0.200000003f);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(depth2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
deleted file mode 100644
index 70122c9..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,90 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %21 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %24 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %27 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %32 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %35 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %38 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %42 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %45 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %48 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %52 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %16
-         %50 = OpLoad %3 %x_10
-         %51 = OpLoad %6 %x_20
-         %53 = OpSampledImage %52 %51 %50
-         %54 = OpVectorShuffle %v2float %45 %45 0 1
-         %55 = OpCompositeExtract %float %54 0
-         %56 = OpCompositeExtract %float %54 1
-         %59 = OpCompositeExtract %float %45 2
-         %58 = OpConvertFToS %int %59
-         %57 = OpConvertSToF %float %58
-         %60 = OpCompositeConstruct %v3float %55 %56 %57
-         %49 = OpImageSampleDrefImplicitLod %float %53 %60 %float_0_200000003
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
deleted file mode 100644
index af05101..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d_array;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : f32 = textureSampleCompare(x_20, x_10, vf123.xy, i32(vf123.z), 0.200000003);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 5d99a18..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, f1);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index cd357fb..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, f1);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 15138de..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %48 = OpImageSampleImplicitLod %v4float %52 %float_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index 193ebee..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_1d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, f1);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
deleted file mode 100644
index e80450b..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Sample(x_10, vf12);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
deleted file mode 100644
index aa26663..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf12);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
deleted file mode 100644
index d065038..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %48 = OpImageSampleImplicitLod %v4float %52 %41
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
deleted file mode 100644
index bb63d93..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSample(x_20, x_10, vf12);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl
deleted file mode 100644
index 8cfe6f4..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.SampleLevel(x_10, vf12, f1);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl
deleted file mode 100644
index 6bcdf1b..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.sample(tint_symbol_2, vf12, level(f1));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm
deleted file mode 100644
index 16c8bf6..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %51 = OpTypeSampledImage %6
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %3 %x_10
-         %50 = OpLoad %6 %x_20
-         %52 = OpSampledImage %51 %50 %49
-         %48 = OpImageSampleExplicitLod %v4float %52 %41 Lod %float_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl
deleted file mode 100644
index f5408be..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureSampleLevel(x_20, x_10, vf12, f1);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl
deleted file mode 100644
index e89c169..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float x_73 = x_20.SampleCmp(x_10, vf12, 0.200000003f);
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl
deleted file mode 100644
index 8de442d..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float const x_73 = tint_symbol_1.sample_compare(tint_symbol_2, vf12, 0.200000003f);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm
deleted file mode 100644
index d88517e..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-%_ptr_UniformConstant_3_0 = OpTypePointer UniformConstant %3
-       %x_30 = OpVariable %_ptr_UniformConstant_3_0 UniformConstant
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %21 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %24 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %27 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %32 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %35 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %38 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %42 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %45 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %48 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-         %52 = OpTypeSampledImage %6
-%float_0_200000003 = OpConstant %float 0.200000003
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %16
-         %50 = OpLoad %3 %x_10
-         %51 = OpLoad %6 %x_20
-         %53 = OpSampledImage %52 %51 %50
-         %49 = OpImageSampleDrefImplicitLod %float %53 %42 %float_0_200000003
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl
deleted file mode 100644
index fc93a17..0000000
--- a/test/unittest/reader/spirv/PreserveFloatCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(2), binding(1)]] var x_20 : texture_depth_2d;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : f32 = textureSampleCompare(x_20, x_10, vf12, 0.200000003);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 9bc75ae..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Load(int4(int3(vi123.xy, vi123.z), 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index e606b3b..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::sample> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.read(uint2(vi123.xy), vi123.z, 0);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index a9b420a..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpVectorShuffle %v2int %23 %23 0 1
-         %51 = OpCompositeExtract %int %50 0
-         %52 = OpCompositeExtract %int %50 1
-         %53 = OpCompositeExtract %int %23 2
-         %54 = OpCompositeConstruct %v3int %51 %52 %53
-         %48 = OpImageFetch %v4float %49 %54 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index b695621..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d_array<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureLoad(x_20, vi123.xy, vi123.z, 0);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index 97b57e5..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2DArray<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_71 = x_20.Load(int4(int3(vi123.xy, vi123.z), 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index d9da0fc..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::read> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_71 = tint_symbol_1.read(uint2(vi123.xy), vi123.z);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index 74200f2..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpVectorShuffle %v2int %23 %23 0 1
-         %51 = OpCompositeExtract %int %50 0
-         %52 = OpCompositeExtract %int %50 1
-         %53 = OpCompositeExtract %int %23 2
-         %54 = OpCompositeConstruct %v3int %51 %52 %53
-         %48 = OpImageRead %v4float %49 %54
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index 41b4743..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,30 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d_array<r32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_71 : vec4<f32> = textureLoad(x_20, vi123.xy, vi123.z);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
deleted file mode 100644
index 6b702c0..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-RWTexture2DArray<float4> x_20 : register(u1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  x_20[int3(vi123.xy, vi123.z)] = vf1234;
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
deleted file mode 100644
index 8bc602e..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_array<float, access::write> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  tint_symbol_1.write(vf1234, uint2(vi123.xy), vi123.z);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d_array<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
deleted file mode 100644
index 9b7d609..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 1 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %50 = OpVectorShuffle %v2int %23 %23 0 1
-         %51 = OpCompositeExtract %int %50 0
-         %52 = OpCompositeExtract %int %50 1
-         %53 = OpCompositeExtract %int %23 2
-         %54 = OpCompositeConstruct %v3int %51 %52 %53
-               OpImageWrite %49 %54 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
deleted file mode 100644
index c57e52c..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_Arrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d_array<r32float, write>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  textureStore(x_20, vi123.xy, vi123.z, vf1234);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
deleted file mode 100644
index 66bd7b1..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Load(int2(i1, 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
deleted file mode 100644
index a6c4ed3..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::sample> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.read(uint(i1), 0);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
deleted file mode 100644
index 80160fc..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %48 = OpImageFetch %v4float %49 %int_1 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
deleted file mode 100644
index 67965cc..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_1d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureLoad(x_20, i1, 0);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
deleted file mode 100644
index 4e14e7b..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_71 = x_20.Load(int2(i1, 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
deleted file mode 100644
index 725effd..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::read> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_71 = tint_symbol_1.read(uint(i1));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
deleted file mode 100644
index 92691a2..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpCapability Image1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %48 = OpImageRead %v4float %49 %int_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
deleted file mode 100644
index 4877caa..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,30 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_1d<r32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_71 : vec4<f32> = textureLoad(x_20, i1);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
deleted file mode 100644
index d337988..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-RWTexture1D<float4> x_20 : register(u1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  x_20[i1] = vf1234;
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
deleted file mode 100644
index f52757c..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::write> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  tint_symbol_1.write(vf1234, uint(i1));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
deleted file mode 100644
index 97b34b3..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpCapability Image1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-               OpImageWrite %49 %int_1 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
deleted file mode 100644
index baaf43c..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_1d<r32float, write>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  textureStore(x_20, i1, vf1234);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl
deleted file mode 100644
index b7ff9fd..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_73 = x_20.Load(int3(vi12, 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl
deleted file mode 100644
index f13373d..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_73 = tint_symbol_1.read(uint2(vi12), 0);
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm
deleted file mode 100644
index b3d4848..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %48 = OpImageFetch %v4float %49 %20 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl
deleted file mode 100644
index 5fdecc4..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_73 : vec4<f32> = textureLoad(x_20, vi12, 0);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl
deleted file mode 100644
index cac0179..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float4 x_71 = x_20.Load(int3(vi12, 0));
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl
deleted file mode 100644
index ad47c3a..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::read> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_71 = tint_symbol_1.read(uint2(vi12));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm
deleted file mode 100644
index bd3810f..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-         %48 = OpImageRead %v4float %49 %20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl
deleted file mode 100644
index 3eb6605..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,30 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32float, read>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_71 : vec4<f32> = textureLoad(x_20, vi12);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.hlsl
deleted file mode 100644
index d6a9080..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-RWTexture2D<float4> x_20 : register(u1, space2);
-SamplerState x_30 : register(s1, space0);
-
-void main_1() {
-  float float_var = 0.0f;
-  const int i1 = 1;
-  const int2 vi12 = int2(1, 2);
-  const int3 vi123 = int3(1, 2, 3);
-  const int4 vi1234 = int4(1, 2, 3, 4);
-  const uint u1 = 1u;
-  const uint2 vu12 = uint2(1u, 2u);
-  const uint3 vu123 = uint3(1u, 2u, 3u);
-  const uint4 vu1234 = uint4(1u, 2u, 3u, 4u);
-  const float f1 = 1.0f;
-  const float2 vf12 = float2(1.0f, 2.0f);
-  const float3 vf123 = float3(1.0f, 2.0f, 3.0f);
-  const float4 vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  x_20[vi12] = vf1234;
-  const uint x_1000 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.msl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.msl
deleted file mode 100644
index 5985570..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::write> tint_symbol_1) {
-  float float_var = 0.0f;
-  int const i1 = 1;
-  int2 const vi12 = int2(1, 2);
-  int3 const vi123 = int3(1, 2, 3);
-  int4 const vi1234 = int4(1, 2, 3, 4);
-  uint const u1 = 1u;
-  uint2 const vu12 = uint2(1u, 2u);
-  uint3 const vu123 = uint3(1u, 2u, 3u);
-  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
-  float const f1 = 1.0f;
-  float2 const vf12 = float2(1.0f, 2.0f);
-  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
-  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  tint_symbol_1.write(vf1234, uint2(vi12));
-  uint const x_1000 = 0u;
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.spvasm
deleted file mode 100644
index 8fff5dd..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %x_30 "x_30"
-               OpName %main_1 "main_1"
-               OpName %float_var "float_var"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 2
-               OpDecorate %x_20 Binding 1
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %x_30 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %v2int = OpTypeVector %int 2
-      %int_2 = OpConstant %int 2
-         %20 = OpConstantComposite %v2int %int_1 %int_2
-      %v3int = OpTypeVector %int 3
-      %int_3 = OpConstant %int 3
-         %23 = OpConstantComposite %v3int %int_1 %int_2 %int_3
-      %v4int = OpTypeVector %int 4
-      %int_4 = OpConstant %int 4
-         %26 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %v2uint = OpTypeVector %uint 2
-     %uint_2 = OpConstant %uint 2
-         %31 = OpConstantComposite %v2uint %uint_1 %uint_2
-     %v3uint = OpTypeVector %uint 3
-     %uint_3 = OpConstant %uint 3
-         %34 = OpConstantComposite %v3uint %uint_1 %uint_2 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %uint_4 = OpConstant %uint 4
-         %37 = OpConstantComposite %v4uint %uint_1 %uint_2 %uint_3 %uint_4
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %41 = OpConstantComposite %v2float %float_1 %float_2
-    %v3float = OpTypeVector %float 3
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-    %v4float = OpTypeVector %float 4
-    %float_4 = OpConstant %float 4
-         %47 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-  %float_var = OpVariable %_ptr_Function_float Function %15
-         %49 = OpLoad %6 %x_20
-               OpImageWrite %49 %20 %47
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.wgsl
deleted file mode 100644
index 322a9bf..0000000
--- a/test/unittest/reader/spirv/PreserveIntCoords_NonArrayed_SpvParserHandleTest_ImageCoordsTest_MakeCoordinateOperandsForImageAccess_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(2), binding(1)]] var x_20 : texture_storage_2d<r32float, write>;
-
-[[group(0), binding(1)]] var x_30 : sampler;
-
-fn main_1() {
-  var float_var : f32;
-  let i1 : i32 = 1;
-  let vi12 : vec2<i32> = vec2<i32>(1, 2);
-  let vi123 : vec3<i32> = vec3<i32>(1, 2, 3);
-  let vi1234 : vec4<i32> = vec4<i32>(1, 2, 3, 4);
-  let u1 : u32 = 1u;
-  let vu12 : vec2<u32> = vec2<u32>(1u, 2u);
-  let vu123 : vec3<u32> = vec3<u32>(1u, 2u, 3u);
-  let vu1234 : vec4<u32> = vec4<u32>(1u, 2u, 3u, 4u);
-  let f1 : f32 = 1.0;
-  let vf12 : vec2<f32> = vec2<f32>(1.0, 2.0);
-  let vf123 : vec3<f32> = vec3<f32>(1.0, 2.0, 3.0);
-  let vf1234 : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  textureStore(x_20, vi12, vf1234);
-  let x_1000 : u32 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 6de43b2..0000000
--- a/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index 2fb8878..0000000
--- a/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %4 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %4
-          %7 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %4
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index a564925..0000000
--- a/test/unittest/reader/spirv/Samplers_SpvParserHandleTest_DeclUnderspecifiedHandle_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.hlsl
deleted file mode 100644
index fdefc79..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  const uint x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_GroupIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.msl
deleted file mode 100644
index 6762cc0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  uint const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread uint* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
-  thread uint tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.spvasm
deleted file mode 100644
index 0ed0565..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationIndex
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %6 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-         %12 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %11 = OpLoad %uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %12
-  %x_1_param = OpFunctionParameter %uint
-         %15 = OpLabel
-               OpStore %x_1 %x_1_param
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %20 = OpLoad %uint %x_1_param_1
-         %19 = OpFunctionCall %void %main_inner %20
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.wgsl
deleted file mode 100644
index e877436..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  let x_2 : u32 = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_index)]] x_1_param : u32) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.hlsl
deleted file mode 100644
index da1756b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int x_1 = 0;
-
-void main_1() {
-  const int x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_GroupIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.msl
deleted file mode 100644
index b933b90..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int* const tint_symbol_1) {
-  int const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread int* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
-  thread int tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.spvasm
deleted file mode 100644
index 1509a4b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationIndex
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %7 = OpConstantNull %int
-        %x_1 = OpVariable %_ptr_Private_int Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %uint
-         %16 = OpLabel
-         %17 = OpBitcast %int %x_1_param
-               OpStore %x_1 %17
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %20 = OpLabel
-         %22 = OpLoad %uint %x_1_param_1
-         %21 = OpFunctionCall %void %main_inner %22
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.wgsl
deleted file mode 100644
index 325c2c5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : i32;
-
-fn main_1() {
-  let x_2 : i32 = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_index)]] x_1_param : u32) {
-  x_1 = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.hlsl
deleted file mode 100644
index 855f188..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.msl
deleted file mode 100644
index 4408675..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.spvasm
deleted file mode 100644
index 6e238d4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.wgsl
deleted file mode 100644
index d287187..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_2 : vec3<u32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.hlsl
deleted file mode 100644
index 51330f4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.msl
deleted file mode 100644
index 8fcdb7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.spvasm
deleted file mode 100644
index 581ee7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.wgsl
deleted file mode 100644
index d5f74d9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_2 : vec3<i32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.hlsl
deleted file mode 100644
index 5a4551e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.msl
deleted file mode 100644
index 446258d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.spvasm
deleted file mode 100644
index 08c464f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn GlobalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.wgsl
deleted file mode 100644
index eb4dd00..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_2 : vec3<u32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.hlsl
deleted file mode 100644
index ec5b041..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.msl
deleted file mode 100644
index 4bf5529..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.spvasm
deleted file mode 100644
index 1e65d56..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn GlobalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.wgsl
deleted file mode 100644
index f57b424..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_2 : vec3<i32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.hlsl
deleted file mode 100644
index f2242ef..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.msl
deleted file mode 100644
index 5198dd3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[threadgroup_position_in_grid]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.spvasm
deleted file mode 100644
index cb25298..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn WorkgroupId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.wgsl
deleted file mode 100644
index c68c220..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_2 : vec3<u32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(workgroup_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.hlsl
deleted file mode 100644
index 755186d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.msl
deleted file mode 100644
index d8fe682..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[threadgroup_position_in_grid]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.spvasm
deleted file mode 100644
index 406850a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn WorkgroupId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.wgsl
deleted file mode 100644
index ef7e659..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_AccessChain_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_2 : vec3<i32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(workgroup_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.hlsl
deleted file mode 100644
index fdefc79..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  const uint x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_GroupIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.msl
deleted file mode 100644
index 6762cc0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  uint const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread uint* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
-  thread uint tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.spvasm
deleted file mode 100644
index 0ed0565..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationIndex
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %6 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-         %12 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %11 = OpLoad %uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %12
-  %x_1_param = OpFunctionParameter %uint
-         %15 = OpLabel
-               OpStore %x_1 %x_1_param
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %20 = OpLoad %uint %x_1_param_1
-         %19 = OpFunctionCall %void %main_inner %20
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.wgsl
deleted file mode 100644
index 768c1fa..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  let x_13 : ptr<private, u32> = &(x_1);
-  let x_2 : u32 = *(x_13);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_index)]] x_1_param : u32) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.hlsl
deleted file mode 100644
index da1756b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int x_1 = 0;
-
-void main_1() {
-  const int x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_GroupIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.msl
deleted file mode 100644
index b933b90..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int* const tint_symbol_1) {
-  int const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread int* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
-  thread int tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.spvasm
deleted file mode 100644
index 1509a4b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationIndex
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %7 = OpConstantNull %int
-        %x_1 = OpVariable %_ptr_Private_int Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %uint
-         %16 = OpLabel
-         %17 = OpBitcast %int %x_1_param
-               OpStore %x_1 %17
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %20 = OpLabel
-         %22 = OpLoad %uint %x_1_param_1
-         %21 = OpFunctionCall %void %main_inner %22
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.wgsl
deleted file mode 100644
index e96cecc..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : i32;
-
-fn main_1() {
-  let x_13 : ptr<private, i32> = &(x_1);
-  let x_2 : i32 = *(x_13);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_index)]] x_1_param : u32) {
-  x_1 = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.hlsl
deleted file mode 100644
index 855f188..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.msl
deleted file mode 100644
index 4408675..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.spvasm
deleted file mode 100644
index 6e238d4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.wgsl
deleted file mode 100644
index 219224d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_13 : ptr<private, vec3<u32>> = &(x_1);
-  let x_2 : vec3<u32> = *(x_13);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.hlsl
deleted file mode 100644
index 51330f4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.msl
deleted file mode 100644
index 8fcdb7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.spvasm
deleted file mode 100644
index 581ee7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.wgsl
deleted file mode 100644
index c4a03f9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_13 : ptr<private, vec3<i32>> = &(x_1);
-  let x_2 : vec3<i32> = *(x_13);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.hlsl
deleted file mode 100644
index 5a4551e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.msl
deleted file mode 100644
index 446258d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.spvasm
deleted file mode 100644
index 08c464f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn GlobalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.wgsl
deleted file mode 100644
index 92c5c3b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_13 : ptr<private, vec3<u32>> = &(x_1);
-  let x_2 : vec3<u32> = *(x_13);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.hlsl
deleted file mode 100644
index ec5b041..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.msl
deleted file mode 100644
index 4bf5529..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.spvasm
deleted file mode 100644
index 1e65d56..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn GlobalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.wgsl
deleted file mode 100644
index 679d802..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_13 : ptr<private, vec3<i32>> = &(x_1);
-  let x_2 : vec3<i32> = *(x_13);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.hlsl
deleted file mode 100644
index f2242ef..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.msl
deleted file mode 100644
index 5198dd3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[threadgroup_position_in_grid]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.spvasm
deleted file mode 100644
index cb25298..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn WorkgroupId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.wgsl
deleted file mode 100644
index 862a322..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_13 : ptr<private, vec3<u32>> = &(x_1);
-  let x_2 : vec3<u32> = *(x_13);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(workgroup_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.hlsl
deleted file mode 100644
index 755186d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.msl
deleted file mode 100644
index d8fe682..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[threadgroup_position_in_grid]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.spvasm
deleted file mode 100644
index 406850a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn WorkgroupId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.wgsl
deleted file mode 100644
index e60015a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_CopyObject_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_13 : ptr<private, vec3<i32>> = &(x_1);
-  let x_2 : vec3<i32> = *(x_13);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(workgroup_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.hlsl
deleted file mode 100644
index fdefc79..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  const uint x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_GroupIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.msl
deleted file mode 100644
index 6762cc0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  uint const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread uint* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
-  thread uint tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.spvasm
deleted file mode 100644
index 0ed0565..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationIndex
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %6 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-         %12 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %11 = OpLoad %uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %12
-  %x_1_param = OpFunctionParameter %uint
-         %15 = OpLabel
-               OpStore %x_1 %x_1_param
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %20 = OpLoad %uint %x_1_param_1
-         %19 = OpFunctionCall %void %main_inner %20
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.wgsl
deleted file mode 100644
index e877436..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  let x_2 : u32 = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_index)]] x_1_param : u32) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.hlsl
deleted file mode 100644
index da1756b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int x_1 = 0;
-
-void main_1() {
-  const int x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_GroupIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.msl
deleted file mode 100644
index b933b90..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int* const tint_symbol_1) {
-  int const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread int* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint x_1_param [[thread_index_in_threadgroup]]) {
-  thread int tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.spvasm
deleted file mode 100644
index 1509a4b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationIndex
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %7 = OpConstantNull %int
-        %x_1 = OpVariable %_ptr_Private_int Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %uint
-         %16 = OpLabel
-         %17 = OpBitcast %int %x_1_param
-               OpStore %x_1 %17
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %20 = OpLabel
-         %22 = OpLoad %uint %x_1_param_1
-         %21 = OpFunctionCall %void %main_inner %22
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.wgsl
deleted file mode 100644
index 325c2c5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : i32;
-
-fn main_1() {
-  let x_2 : i32 = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_index)]] x_1_param : u32) {
-  x_1 = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.hlsl
deleted file mode 100644
index 855f188..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.msl
deleted file mode 100644
index 4408675..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.spvasm
deleted file mode 100644
index 6e238d4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.wgsl
deleted file mode 100644
index d287187..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_2 : vec3<u32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.hlsl
deleted file mode 100644
index 51330f4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.msl
deleted file mode 100644
index 8fcdb7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_threadgroup]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.spvasm
deleted file mode 100644
index 581ee7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn LocalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.wgsl
deleted file mode 100644
index d5f74d9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_2 : vec3<i32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.hlsl
deleted file mode 100644
index 5a4551e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.msl
deleted file mode 100644
index 446258d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.spvasm
deleted file mode 100644
index 08c464f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn GlobalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.wgsl
deleted file mode 100644
index eb4dd00..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_2 : vec3<u32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.hlsl
deleted file mode 100644
index ec5b041..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.msl
deleted file mode 100644
index 4bf5529..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[thread_position_in_grid]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.spvasm
deleted file mode 100644
index 1e65d56..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn GlobalInvocationId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.wgsl
deleted file mode 100644
index f57b424..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_2 : vec3<i32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.hlsl
deleted file mode 100644
index f2242ef..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint3 x_1 = uint3(0u, 0u, 0u);
-
-void main_1() {
-  const uint3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.msl
deleted file mode 100644
index 5198dd3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint3* const tint_symbol_1) {
-  uint3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[threadgroup_position_in_grid]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.spvasm
deleted file mode 100644
index cb25298..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn WorkgroupId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_1 = OpVariable %_ptr_Private_v3uint Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %v3uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %v3uint
-         %16 = OpLabel
-               OpStore %x_1 %x_1_param
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %19 = OpLabel
-         %21 = OpLoad %v3uint %x_1_param_1
-         %20 = OpFunctionCall %void %main_inner %21
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.wgsl
deleted file mode 100644
index c68c220..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<u32>;
-
-fn main_1() {
-  let x_2 : vec3<u32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(workgroup_id)]] x_1_param : vec3<u32>) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.hlsl
deleted file mode 100644
index 755186d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static int3 x_1 = int3(0, 0, 0);
-
-void main_1() {
-  const int3 x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_1_param : SV_GroupID;
-};
-
-void main_inner(uint3 x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.msl
deleted file mode 100644
index d8fe682..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int3* const tint_symbol_1) {
-  int3 const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint3 x_1_param, thread int3* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int3>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_1_param [[threadgroup_position_in_grid]]) {
-  thread int3 tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.spvasm
deleted file mode 100644
index 406850a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_1_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn WorkgroupId
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_1_param_1 = OpVariable %_ptr_Input_v3uint Input
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-%_ptr_Private_v3int = OpTypePointer Private %v3int
-          %9 = OpConstantNull %v3int
-        %x_1 = OpVariable %_ptr_Private_v3int Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %14 = OpLoad %v3int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %v3uint
-         %18 = OpLabel
-         %19 = OpBitcast %v3int %x_1_param
-               OpStore %x_1 %19
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %24 = OpLoad %v3uint %x_1_param_1
-         %23 = OpFunctionCall %void %main_inner %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.wgsl
deleted file mode 100644
index ef7e659..0000000
--- a/test/unittest/reader/spirv/Samples_SpvModuleScopeVarParserTest_ComputeBuiltin_Load_Direct_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : vec3<i32>;
-
-fn main_1() {
-  let x_2 : vec3<i32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(workgroup_id)]] x_1_param : vec3<u32>) {
-  x_1 = bitcast<vec3<i32>>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.hlsl
deleted file mode 100644
index 071b671..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-warning: use of deprecated intrinsic
-Texture1D<float4> x_20 : register(t0, space0);
-
-void main_1() {
-  const float4 x_125 = x_20.Load(int2(int(1u), 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.msl
deleted file mode 100644
index 7efcaaf..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::read> tint_symbol_1) {
-  float4 const x_125 = tint_symbol_1.read(uint(int(1u)));
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.spvasm
deleted file mode 100644
index b6cb9e7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpCapability Image1D
-               OpCapability StorageImageExtendedFormats
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 1D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %v4float = OpTypeVector %float 4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %11 = OpLoad %3 %x_20
-          %9 = OpImageRead %v4float %11 %int_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.wgsl
deleted file mode 100644
index 6339b4f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-warning: use of deprecated intrinsic
-[[group(0), binding(0)]] var x_20 : texture_storage_1d<rg32float, read>;
-
-fn main_1() {
-  let x_125 : vec4<f32> = textureLoad(x_20, i32(1u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.hlsl
deleted file mode 100644
index 8486152..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-RWTexture1D<float4> x_20 : register(u0, space0);
-
-void main_1() {
-  x_20[int(1u)] = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.msl
deleted file mode 100644
index c2a8c6d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::write> tint_symbol_1) {
-  tint_symbol_1.write(float4(0.0f, 0.0f, 0.0f, 0.0f), uint(int(1u)));
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::write> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.spvasm
deleted file mode 100644
index 950da1c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,39 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpCapability Image1D
-               OpCapability StorageImageExtendedFormats
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonReadable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 1D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-    %v4float = OpTypeVector %float 4
-    %float_0 = OpConstant %float 0
-         %15 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %10 = OpLoad %3 %x_20
-               OpImageWrite %10 %int_1 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.wgsl
deleted file mode 100644
index 3a825ba..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-[[group(0), binding(0)]] var x_20 : texture_storage_1d<rg32float, write>;
-
-fn main_1() {
-  textureStore(x_20, i32(1u), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index e4acdba..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-Texture1D<float4> x_20 : register(t0, space0);
-
-void main_1() {
-  const float4 x_125 = x_20.Load(int2(int(0u), 0));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 67e007f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture1d<float, access::sample> tint_symbol_1) {
-  float4 const x_125 = tint_symbol_1.read(uint(int(0u)), 0);
-  return;
-}
-
-fragment void tint_symbol(texture1d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index ec825f0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %v4float = OpTypeVector %float 4
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %11 = OpLoad %3 %x_20
-          %9 = OpImageFetch %v4float %11 %int_0 Lod %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index e6a759a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-[[group(0), binding(0)]] var x_20 : texture_1d<f32>;
-
-fn main_1() {
-  let x_125 : vec4<f32> = textureLoad(x_20, i32(0u), 0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index edb38d5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-Texture2D<float4> x_20 : register(t0, space0);
-
-void main_1() {
-  int3 tint_tmp;
-  x_20.GetDimensions(int(1u), tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const uint2 x_125 = uint2(tint_tmp.xy);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.msl
deleted file mode 100644
index cf03d78..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  uint2 const x_125 = uint2(int2(tint_symbol_1.get_width(int(1u)), tint_symbol_1.get_height(int(1u))));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 855359c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %15 = OpLoad %3 %x_20
-         %12 = OpImageQuerySizeLod %v2int %15 %int_1
-          %9 = OpBitcast %v2uint %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 4029efe..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-[[group(0), binding(0)]] var x_20 : texture_2d<f32>;
-
-fn main_1() {
-  let x_125 : vec2<u32> = vec2<u32>(textureDimensions(x_20, i32(1u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index 11ad13c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-Texture2D<float4> x_20 : register(t0, space0);
-
-void main_1() {
-  int2 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y);
-  const uint2 x_125 = uint2(tint_tmp);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.msl
deleted file mode 100644
index cf24ad6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::read> tint_symbol_1) {
-  uint2 const x_125 = uint2(int2(tint_symbol_1.get_width(), tint_symbol_1.get_height()));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index 5f31a30..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,39 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpCapability StorageImageExtendedFormats
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %15 = OpLoad %3 %x_20
-         %12 = OpImageQuerySize %v2int %15
-          %9 = OpBitcast %v2uint %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index b7e8c34..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-[[group(0), binding(0)]] var x_20 : texture_storage_2d<rg32float, read>;
-
-fn main_1() {
-  let x_125 : vec2<u32> = vec2<u32>(textureDimensions(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.hlsl
deleted file mode 100644
index 9abae08..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-Texture2D<float4> x_20 : register(t0, space0);
-
-void main_1() {
-  int3 tint_tmp;
-  x_20.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const uint x_125 = uint(tint_tmp.z);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.msl
deleted file mode 100644
index cbbdada..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1) {
-  uint const x_125 = uint(int(tint_symbol_1.get_num_mip_levels()));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.spvasm
deleted file mode 100644
index fcc8849..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %13 = OpLoad %3 %x_20
-         %11 = OpImageQueryLevels %int %13
-          %9 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.wgsl
deleted file mode 100644
index 3c794d7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-[[group(0), binding(0)]] var x_20 : texture_2d<f32>;
-
-fn main_1() {
-  let x_125 : u32 = u32(textureNumLevels(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.hlsl
deleted file mode 100644
index 903865a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-Texture2DMS<float4> x_20 : register(t0, space0);
-
-void main_1() {
-  int3 tint_tmp;
-  x_20.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
-  const uint x_125 = uint(tint_tmp.z);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.msl
deleted file mode 100644
index e9ec103..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d_ms<float, access::read> tint_symbol_1) {
-  uint const x_125 = uint(int(tint_symbol_1.get_num_samples()));
-  return;
-}
-
-fragment void tint_symbol(texture2d_ms<float, access::read> tint_symbol_2 [[texture(0)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.spvasm
deleted file mode 100644
index 9ea81a1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpCapability ImageQuery
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_20 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-         %13 = OpLoad %3 %x_20
-         %11 = OpImageQuerySamples %int %13
-          %9 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.wgsl
deleted file mode 100644
index 9575cb5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_RawImage_Variable_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-[[group(0), binding(0)]] var x_20 : texture_multisampled_2d<f32>;
-
-fn main_1() {
-  let x_125 : u32 = u32(textureNumSamples(x_20));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.hlsl
deleted file mode 100644
index c65283c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space0);
-
-void main_1() {
-  const float4 x_131 = x_20.Sample(x_10, float2(0.0f, 0.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.msl
deleted file mode 100644
index 9016445..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float4 const x_131 = tint_symbol_1.sample(tint_symbol_2, float2(0.0f, 0.0f));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.spvasm
deleted file mode 100644
index e1bce55..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v4float = OpTypeVector %float 4
-         %16 = OpTypeSampledImage %6
-    %v2float = OpTypeVector %float 2
-    %float_0 = OpConstant %float 0
-         %20 = OpConstantComposite %v2float %float_0 %float_0
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %14 = OpLoad %3 %x_10
-         %15 = OpLoad %6 %x_20
-         %17 = OpSampledImage %16 %15 %14
-         %12 = OpImageSampleImplicitLod %v4float %17 %20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.wgsl
deleted file mode 100644
index a19e4a9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(0), binding(1)]] var x_20 : texture_2d<f32>;
-
-fn main_1() {
-  let x_131 : vec4<f32> = textureSample(x_20, x_10, vec2<f32>(0.0, 0.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.hlsl
deleted file mode 100644
index a099f4c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture2D<float4> x_20 : register(t1, space0);
-
-void main_1() {
-  const float4 x_131 = x_20.SampleLevel(x_10, float2(0.0f, 0.0f), 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.msl
deleted file mode 100644
index 6c769c6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float4 const x_131 = tint_symbol_1.sample(tint_symbol_2, float2(0.0f, 0.0f), level(0.0f));
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.spvasm
deleted file mode 100644
index 3c11baf..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v4float = OpTypeVector %float 4
-         %16 = OpTypeSampledImage %6
-    %v2float = OpTypeVector %float 2
-    %float_0 = OpConstant %float 0
-         %20 = OpConstantComposite %v2float %float_0 %float_0
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %14 = OpLoad %3 %x_10
-         %15 = OpLoad %6 %x_20
-         %17 = OpSampledImage %16 %15 %14
-         %12 = OpImageSampleExplicitLod %v4float %17 %20 Lod %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.wgsl
deleted file mode 100644
index 5e6d650..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(0), binding(1)]] var x_20 : texture_2d<f32>;
-
-fn main_1() {
-  let x_131 : vec4<f32> = textureSampleLevel(x_20, x_10, vec2<f32>(0.0, 0.0), 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.hlsl
deleted file mode 100644
index b780a17..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-SamplerComparisonState x_10 : register(s0, space0);
-Texture2D x_20 : register(t1, space0);
-
-void main_1() {
-  const float x_131 = x_20.SampleCmp(x_10, float2(0.0f, 0.0f), 0.200000003f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.msl
deleted file mode 100644
index e86f00a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(depth2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float const x_131 = tint_symbol_1.sample_compare(tint_symbol_2, float2(0.0f, 0.0f), 0.200000003f);
-  return;
-}
-
-fragment void tint_symbol(depth2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.spvasm
deleted file mode 100644
index 973dbf7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 2D 1 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %15 = OpTypeSampledImage %6
-    %v2float = OpTypeVector %float 2
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v2float %float_0 %float_0
-%float_0_200000003 = OpConstant %float 0.200000003
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %13 = OpLoad %3 %x_10
-         %14 = OpLoad %6 %x_20
-         %16 = OpSampledImage %15 %14 %13
-         %12 = OpImageSampleDrefImplicitLod %float %16 %19 %float_0_200000003
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.wgsl
deleted file mode 100644
index b8630ae..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserHandleTest_RegisterHandleUsage_SampledImage_Variable_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler_comparison;
-
-[[group(0), binding(1)]] var x_20 : texture_depth_2d;
-
-fn main_1() {
-  let x_131 : f32 = textureSampleCompare(x_20, x_10, vec2<f32>(0.0, 0.0), 0.200000003);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.hlsl
deleted file mode 100644
index f5d101b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-uint tint_pack4x8snorm(float4 param_0) {
-  int4 i = int4(round(clamp(param_0, -1.0, 1.0) * 127.0)) & 0xff;
-  return asuint(i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = tint_pack4x8snorm(v4f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.msl
deleted file mode 100644
index e11c628..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = pack_float_to_snorm4x8(v4f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.spvasm
deleted file mode 100644
index c9e44e8..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %uint %35 PackSnorm4x8 %33
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.wgsl
deleted file mode 100644
index e69479f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = pack4x8snorm(v4f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.hlsl
deleted file mode 100644
index 603ec91..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-uint tint_pack4x8unorm(float4 param_0) {
-  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
-  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = tint_pack4x8unorm(v4f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.msl
deleted file mode 100644
index 71bfdcf..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = pack_float_to_unorm4x8(v4f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.spvasm
deleted file mode 100644
index f35a829..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %uint %35 PackUnorm4x8 %33
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.wgsl
deleted file mode 100644
index fbe54ff..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = pack4x8unorm(v4f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.hlsl
deleted file mode 100644
index bb71e73..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-uint tint_pack2x16snorm(float2 param_0) {
-  int2 i = int2(round(clamp(param_0, -1.0, 1.0) * 32767.0)) & 0xffff;
-  return asuint(i.x | i.y << 16);
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = tint_pack2x16snorm(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.msl
deleted file mode 100644
index 314fb7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = pack_float_to_snorm2x16(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.spvasm
deleted file mode 100644
index f9adb2b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %uint %35 PackSnorm2x16 %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.wgsl
deleted file mode 100644
index 3c03ebe..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = pack2x16snorm(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.hlsl
deleted file mode 100644
index 602213c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-uint tint_pack2x16unorm(float2 param_0) {
-  uint2 i = uint2(round(clamp(param_0, 0.0, 1.0) * 65535.0));
-  return (i.x | i.y << 16);
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = tint_pack2x16unorm(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.msl
deleted file mode 100644
index 4fd5294..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = pack_float_to_unorm2x16(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.spvasm
deleted file mode 100644
index cec3063..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %uint %35 PackUnorm2x16 %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.wgsl
deleted file mode 100644
index 2fb416b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = pack2x16unorm(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.hlsl
deleted file mode 100644
index b7cb4e5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-uint tint_pack2x16float(float2 param_0) {
-  uint2 i = f32tof16(param_0);
-  return i.x | (i.y << 16);
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = tint_pack2x16float(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.msl
deleted file mode 100644
index 2326c08..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = as_type<uint>(half2(v2f1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.spvasm
deleted file mode 100644
index 697a638..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %uint %35 PackHalf2x16 %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.wgsl
deleted file mode 100644
index 80383a4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataPacking_Valid_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = pack2x16float(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.hlsl
deleted file mode 100644
index 119835a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float4 x_1 = tint_unpack4x8snorm(u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.msl
deleted file mode 100644
index 3db4e59..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float4 const x_1 = unpack_snorm4x8_to_float(u1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.spvasm
deleted file mode 100644
index 87fd429..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v4float %35 UnpackSnorm4x8 %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.wgsl
deleted file mode 100644
index 802d8c9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec4<f32> = unpack4x8snorm(u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.hlsl
deleted file mode 100644
index ae9fc1c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float4 x_1 = tint_unpack4x8unorm(u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.msl
deleted file mode 100644
index 17fdac6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float4 const x_1 = unpack_unorm4x8_to_float(u1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.spvasm
deleted file mode 100644
index 2a9d4ce..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v4float %35 UnpackUnorm4x8 %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.wgsl
deleted file mode 100644
index 6fcb6a9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec4<f32> = unpack4x8unorm(u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.hlsl
deleted file mode 100644
index bc0d022..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-float2 tint_unpack2x16snorm(uint param_0) {
-  int j = int(param_0);
-  int2 i = int2(j << 16, j) >> 16;
-  return clamp(float2(i) / 32767.0, -1.0, 1.0);
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = tint_unpack2x16snorm(u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.msl
deleted file mode 100644
index cbcf5eb..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = unpack_snorm2x16_to_float(u1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.spvasm
deleted file mode 100644
index 441d49c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 UnpackSnorm2x16 %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.wgsl
deleted file mode 100644
index c6677a5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = unpack2x16snorm(u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.hlsl
deleted file mode 100644
index 4f72aff..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-float2 tint_unpack2x16unorm(uint param_0) {
-  uint j = param_0;
-  uint2 i = uint2(j & 0xffff, j >> 16);
-  return float2(i) / 65535.0;
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = tint_unpack2x16unorm(u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.msl
deleted file mode 100644
index 11a05dd..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = unpack_unorm2x16_to_float(u1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.spvasm
deleted file mode 100644
index 9a062b9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 UnpackUnorm2x16 %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.wgsl
deleted file mode 100644
index a4b1e14..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = unpack2x16unorm(u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.hlsl
deleted file mode 100644
index 4e67d7d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-float2 tint_unpack2x16float(uint param_0) {
-  uint i = param_0;
-  return f16tof32(uint2(i & 0xffff, i >> 16));
-}
-
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = tint_unpack2x16float(u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.msl
deleted file mode 100644
index a56289b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = float2(as_type<half2>(u1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.spvasm
deleted file mode 100644
index 8cc47a8..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 UnpackHalf2x16 %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.wgsl
deleted file mode 100644
index f1b3b1f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_DataUnpacking_Valid_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = unpack2x16float(u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.hlsl
deleted file mode 100644
index 5eb9727..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float3 x_1 = cross(v3f1, v3f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.msl
deleted file mode 100644
index d05ff1f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float3 const x_1 = cross(v3f1, v3f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.spvasm
deleted file mode 100644
index 67ec16b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v3float %35 Cross %30 %31
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.wgsl
deleted file mode 100644
index 794ced9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float3_Float3Float3_Samples_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec3<f32> = cross(v3f1, v3f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index ee7e7da..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = distance(f1, f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 238245e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fabs(f1 - f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index 3ce85f1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Distance %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 6b350f0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = distance(f1, f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index 26bb202..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = distance(v2f1, v2f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.msl
deleted file mode 100644
index 093539e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = distance(v2f1, v2f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index 1d4adf4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Distance %26 %27
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index a0f52d6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_FloatingFloating_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = distance(v2f1, v2f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index a8f6e4a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = length(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 4ac5f38..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fabs(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index 05663ec..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Length %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 79afbe1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = length(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index 167d0d8..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = length(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.msl
deleted file mode 100644
index 0b9b36d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = length(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index 2306f2d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Length %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index b0351b5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Float_Floating_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = length(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index eeae052..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = clamp(f1, f2, f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 401988b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = clamp(f1, f2, f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index d5b56f1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 NClamp %float_50 %float_60 %float_70
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 2c8272f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = clamp(f1, f2, f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.hlsl
deleted file mode 100644
index eeae052..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = clamp(f1, f2, f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.msl
deleted file mode 100644
index 401988b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = clamp(f1, f2, f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.spvasm
deleted file mode 100644
index d5b56f1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 NClamp %float_50 %float_60 %float_70
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.wgsl
deleted file mode 100644
index 2c8272f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = clamp(f1, f2, f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.hlsl
deleted file mode 100644
index d2234d1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = mad(f1, f2, f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.msl
deleted file mode 100644
index 007fa77..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fma(f1, f2, f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.spvasm
deleted file mode 100644
index aa0d13c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Fma %float_50 %float_60 %float_70
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.wgsl
deleted file mode 100644
index d4cb313..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = fma(f1, f2, f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.hlsl
deleted file mode 100644
index 6281d7d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = lerp(f1, f2, f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.msl
deleted file mode 100644
index a704b23..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = mix(f1, f2, f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.spvasm
deleted file mode 100644
index a75d944..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 FMix %float_50 %float_60 %float_70
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.wgsl
deleted file mode 100644
index 0c904b8..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = mix(f1, f2, f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.hlsl
deleted file mode 100644
index 31d3f7f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = smoothstep(f1, f2, f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.msl
deleted file mode 100644
index 6f931cd..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = smoothstep(f1, f2, f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.spvasm
deleted file mode 100644
index 38c9cc0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 SmoothStep %float_50 %float_60 %float_70
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.wgsl
deleted file mode 100644
index 3888f75..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Scalar_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = smoothStep(f1, f2, f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index f06a436..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = clamp(v2f1, v2f2, v2f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.msl
deleted file mode 100644
index 1683450..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = clamp(v2f1, v2f2, v2f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index ec15f9f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 NClamp %26 %27 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index a0890eb..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = clamp(v2f1, v2f2, v2f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.hlsl
deleted file mode 100644
index f06a436..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = clamp(v2f1, v2f2, v2f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.msl
deleted file mode 100644
index 1683450..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = clamp(v2f1, v2f2, v2f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.spvasm
deleted file mode 100644
index ec15f9f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 NClamp %26 %27 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.wgsl
deleted file mode 100644
index a0890eb..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = clamp(v2f1, v2f2, v2f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.hlsl
deleted file mode 100644
index 8bf6534..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = mad(v2f1, v2f2, v2f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.msl
deleted file mode 100644
index a622bcb..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = fma(v2f1, v2f2, v2f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.spvasm
deleted file mode 100644
index 0b93ffd..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Fma %26 %27 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.wgsl
deleted file mode 100644
index 5d16362..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = fma(v2f1, v2f2, v2f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.hlsl
deleted file mode 100644
index 5e0fe7b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = lerp(v2f1, v2f2, v2f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.msl
deleted file mode 100644
index 323a427..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = mix(v2f1, v2f2, v2f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.spvasm
deleted file mode 100644
index 0c07d32..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 FMix %26 %27 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.wgsl
deleted file mode 100644
index 6d2e82e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = mix(v2f1, v2f2, v2f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.hlsl
deleted file mode 100644
index a65e391..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = smoothstep(v2f1, v2f2, v2f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.msl
deleted file mode 100644
index 546d4d6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = smoothstep(v2f1, v2f2, v2f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.spvasm
deleted file mode 100644
index c4062ba..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 SmoothStep %26 %27 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.wgsl
deleted file mode 100644
index 66a46c5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloatingFloating_Vector_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = smoothStep(v2f1, v2f2, v2f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index 2337025..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = atan2(f1, f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 8fb8a80..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = atan2(f1, f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index 8d1f6d7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Atan2 %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index f98852d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = atan2(f1, f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.hlsl
deleted file mode 100644
index b336ec5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = max(f1, f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.msl
deleted file mode 100644
index ac90c5f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fmax(f1, f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.spvasm
deleted file mode 100644
index 1dfa7a6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 NMax %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.wgsl
deleted file mode 100644
index add72a2..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = max(f1, f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.hlsl
deleted file mode 100644
index 795e9ba..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = min(f1, f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.msl
deleted file mode 100644
index eaaa317..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fmin(f1, f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.spvasm
deleted file mode 100644
index 8cf51cb..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 NMin %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.wgsl
deleted file mode 100644
index 91dbf8e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = min(f1, f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.hlsl
deleted file mode 100644
index b336ec5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = max(f1, f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.msl
deleted file mode 100644
index ac90c5f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fmax(f1, f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.spvasm
deleted file mode 100644
index 1dfa7a6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 NMax %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.wgsl
deleted file mode 100644
index add72a2..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = max(f1, f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.hlsl
deleted file mode 100644
index 795e9ba..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = min(f1, f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.msl
deleted file mode 100644
index eaaa317..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fmin(f1, f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.spvasm
deleted file mode 100644
index 8cf51cb..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 NMin %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.wgsl
deleted file mode 100644
index 91dbf8e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = min(f1, f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.hlsl
deleted file mode 100644
index d637bbc..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = pow(f1, f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.msl
deleted file mode 100644
index f243db3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = pow(f1, f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.spvasm
deleted file mode 100644
index 723f920..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Pow %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.wgsl
deleted file mode 100644
index 0e1f2ab..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = pow(f1, f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.hlsl
deleted file mode 100644
index 2b9bea6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = step(f1, f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.msl
deleted file mode 100644
index 5d51e76..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = step(f1, f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.spvasm
deleted file mode 100644
index c2f07fe..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Step %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.wgsl
deleted file mode 100644
index 4c5a1b5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Scalar_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = step(f1, f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index e3cc1fe..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = atan2(v2f1, v2f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.msl
deleted file mode 100644
index a380d9c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = atan2(v2f1, v2f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index 908222e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Atan2 %26 %27
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index 30dff65..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = atan2(v2f1, v2f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.hlsl
deleted file mode 100644
index ba378fd..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = max(v2f1, v2f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.msl
deleted file mode 100644
index e197300..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = fmax(v2f1, v2f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.spvasm
deleted file mode 100644
index a6309d5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 NMax %26 %27
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.wgsl
deleted file mode 100644
index 4b34831..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = max(v2f1, v2f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.hlsl
deleted file mode 100644
index 95069c1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = min(v2f1, v2f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.msl
deleted file mode 100644
index d23ae08..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = fmin(v2f1, v2f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.spvasm
deleted file mode 100644
index 2692f6f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 NMin %26 %27
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.wgsl
deleted file mode 100644
index 816369d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = min(v2f1, v2f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.hlsl
deleted file mode 100644
index ba378fd..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = max(v2f1, v2f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.msl
deleted file mode 100644
index e197300..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = fmax(v2f1, v2f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.spvasm
deleted file mode 100644
index a6309d5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 NMax %26 %27
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.wgsl
deleted file mode 100644
index 4b34831..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = max(v2f1, v2f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.hlsl
deleted file mode 100644
index 95069c1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = min(v2f1, v2f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.msl
deleted file mode 100644
index d23ae08..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = fmin(v2f1, v2f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.spvasm
deleted file mode 100644
index 2692f6f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 NMin %26 %27
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.wgsl
deleted file mode 100644
index 816369d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = min(v2f1, v2f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.hlsl
deleted file mode 100644
index c99efcf..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = pow(v2f1, v2f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.msl
deleted file mode 100644
index ec149a3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = pow(v2f1, v2f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.spvasm
deleted file mode 100644
index 01b2669..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Pow %26 %27
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.wgsl
deleted file mode 100644
index 14c8c1d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = pow(v2f1, v2f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.hlsl
deleted file mode 100644
index 6dd1cc8..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = step(v2f1, v2f2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.msl
deleted file mode 100644
index 999dc50..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = step(v2f1, v2f2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.spvasm
deleted file mode 100644
index 687e3b0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Step %26 %27
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.wgsl
deleted file mode 100644
index cf8872b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingFloating_Vector_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = step(v2f1, v2f2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index 876d281..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = ldexp(f1, i1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 56622e8..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = ldexp(f1, i1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index 28f401d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Ldexp %float_50 %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 6a6e445..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = ldexp(f1, i1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index 49d65b9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = ldexp(v2f1, v2i1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.msl
deleted file mode 100644
index 7f4b918..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = ldexp(v2f1, v2i1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index 13c02b5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Ldexp %26 %22
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index 70e623e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingInting_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = ldexp(v2f1, v2i1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index a889e78..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = ldexp(f1, int(u1));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 9484dda..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = ldexp(f1, int(u1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index 2eab6d4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %36 = OpBitcast %int %uint_10
-         %34 = OpExtInst %float %35 Ldexp %float_50 %36
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 45e0784..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = ldexp(f1, i32(u1));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index 8968843..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = ldexp(v2f1, int2(v2u1));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.msl
deleted file mode 100644
index 937bf3d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = ldexp(v2f1, int2(v2u1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index 69e8594..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %36 = OpBitcast %v2int %18
-         %34 = OpExtInst %v2float %35 Ldexp %26 %36
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index 100a2a9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_FloatingUinting_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = ldexp(v2f1, vec2<i32>(v2u1));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index 505499f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = acos(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 532fd4e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = acos(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index 1f36b25..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Acos %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 8dc2477..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = acos(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.hlsl
deleted file mode 100644
index c49973b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = asin(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.msl
deleted file mode 100644
index 13e07e7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = asin(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.spvasm
deleted file mode 100644
index c9db4ff..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Asin %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.wgsl
deleted file mode 100644
index 50556c9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = asin(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.hlsl
deleted file mode 100644
index 5851103..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = floor(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.msl
deleted file mode 100644
index 48e0ad9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = floor(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.spvasm
deleted file mode 100644
index 9c27eb9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Floor %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.wgsl
deleted file mode 100644
index 5db5f20..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_10.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = floor(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.hlsl
deleted file mode 100644
index ef9bbc9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = frac(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.msl
deleted file mode 100644
index 0795995..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fract(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.spvasm
deleted file mode 100644
index b95a0db..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Fract %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.wgsl
deleted file mode 100644
index 2d34c5c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_11.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = fract(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.hlsl
deleted file mode 100644
index 9b022fe..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = rsqrt(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.msl
deleted file mode 100644
index c7910f2..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = rsqrt(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.spvasm
deleted file mode 100644
index 6b6df66..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 InverseSqrt %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.wgsl
deleted file mode 100644
index ab280a6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_12.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = inverseSqrt(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.hlsl
deleted file mode 100644
index e2f4cbe..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = log(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.msl
deleted file mode 100644
index 9c67337..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = log(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.spvasm
deleted file mode 100644
index 0e6037c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Log %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.wgsl
deleted file mode 100644
index 0223a9e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_13.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = log(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.hlsl
deleted file mode 100644
index ac39225..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = log2(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.msl
deleted file mode 100644
index a2c3822..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = log2(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.spvasm
deleted file mode 100644
index 7f8fc7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Log2 %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.wgsl
deleted file mode 100644
index 07aa82b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_14.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = log2(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.hlsl
deleted file mode 100644
index 4b2ecb1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = round(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.msl
deleted file mode 100644
index 1a37151..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = rint(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.spvasm
deleted file mode 100644
index 06f3802..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 RoundEven %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.wgsl
deleted file mode 100644
index 24859ef..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_15.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = round(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.hlsl
deleted file mode 100644
index 4b2ecb1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = round(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.msl
deleted file mode 100644
index 1a37151..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = rint(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.spvasm
deleted file mode 100644
index 06f3802..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 RoundEven %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.wgsl
deleted file mode 100644
index 24859ef..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_16.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = round(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.hlsl
deleted file mode 100644
index 95a2b2c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = sin(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.msl
deleted file mode 100644
index 4a19e7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = sin(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.spvasm
deleted file mode 100644
index 5d27967..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Sin %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.wgsl
deleted file mode 100644
index 090ba0e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_17.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = sin(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.hlsl
deleted file mode 100644
index 2a30ec3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = sinh(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.msl
deleted file mode 100644
index ab34002..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = sinh(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.spvasm
deleted file mode 100644
index f6b5725..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Sinh %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.wgsl
deleted file mode 100644
index 6038ab1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_18.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = sinh(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.hlsl
deleted file mode 100644
index ad23fb5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = sqrt(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.msl
deleted file mode 100644
index 58cca00..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = sqrt(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.spvasm
deleted file mode 100644
index 73900b4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Sqrt %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.wgsl
deleted file mode 100644
index f6b726f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_19.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = sqrt(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.hlsl
deleted file mode 100644
index 4c441f5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = atan(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.msl
deleted file mode 100644
index a34ad6e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = atan(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.spvasm
deleted file mode 100644
index aa4a093..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Atan %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.wgsl
deleted file mode 100644
index 8afd315..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = atan(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.hlsl
deleted file mode 100644
index b50f17c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = tan(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.msl
deleted file mode 100644
index c0266db..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = tan(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.spvasm
deleted file mode 100644
index fef4710..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Tan %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.wgsl
deleted file mode 100644
index 37c4b39..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_20.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = tan(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.hlsl
deleted file mode 100644
index e558c37..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = tanh(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.msl
deleted file mode 100644
index 134e6a5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = tanh(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.spvasm
deleted file mode 100644
index 19d1f47..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Tanh %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.wgsl
deleted file mode 100644
index b4ae346..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_21.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = tanh(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.hlsl
deleted file mode 100644
index 4562c25..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = trunc(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.msl
deleted file mode 100644
index 8c80b00..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = trunc(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.spvasm
deleted file mode 100644
index ec22dae..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Trunc %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.wgsl
deleted file mode 100644
index 5bfb997..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_22.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = trunc(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.hlsl
deleted file mode 100644
index a3321b9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = ceil(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.msl
deleted file mode 100644
index 4d42251..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = ceil(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.spvasm
deleted file mode 100644
index 731cfb5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Ceil %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.wgsl
deleted file mode 100644
index be4ceb2..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = ceil(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.hlsl
deleted file mode 100644
index 02eb11a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = cos(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.msl
deleted file mode 100644
index b22344f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = cos(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.spvasm
deleted file mode 100644
index 60c2705..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Cos %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.wgsl
deleted file mode 100644
index ca8637c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = cos(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.hlsl
deleted file mode 100644
index 71470f4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = cosh(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.msl
deleted file mode 100644
index c4dcb4e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = cosh(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.spvasm
deleted file mode 100644
index c70835d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Cosh %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.wgsl
deleted file mode 100644
index 802e5d3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = cosh(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.hlsl
deleted file mode 100644
index 26092f7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = exp(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.msl
deleted file mode 100644
index 2e89ac4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = exp(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.spvasm
deleted file mode 100644
index 47c6f20..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Exp %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.wgsl
deleted file mode 100644
index bf702a3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = exp(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.hlsl
deleted file mode 100644
index 5f2e11a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = exp2(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.msl
deleted file mode 100644
index e31b33f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = exp2(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.spvasm
deleted file mode 100644
index 41553ce..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 Exp2 %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.wgsl
deleted file mode 100644
index 82a960a..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = exp2(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.hlsl
deleted file mode 100644
index 4900be4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = abs(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.msl
deleted file mode 100644
index 4ac5f38..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = fabs(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.spvasm
deleted file mode 100644
index e78343c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 FAbs %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.wgsl
deleted file mode 100644
index 7589973..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_8.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = abs(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.hlsl
deleted file mode 100644
index f1df3b7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = sign(f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.msl
deleted file mode 100644
index 44f8245..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = sign(f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.spvasm
deleted file mode 100644
index 26bd845..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %float %35 FSign %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.wgsl
deleted file mode 100644
index 70f3873..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Scalar_9.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = sign(f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index 321b64c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = acos(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.msl
deleted file mode 100644
index 0c9a877..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = acos(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index a7d7194..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Acos %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index deac856..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = acos(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.hlsl
deleted file mode 100644
index 1a80112..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = asin(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.msl
deleted file mode 100644
index 01ab346..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = asin(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.spvasm
deleted file mode 100644
index 0664b10..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Asin %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.wgsl
deleted file mode 100644
index 358bdd6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = asin(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.hlsl
deleted file mode 100644
index a080366..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = floor(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.msl
deleted file mode 100644
index eb9416f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = floor(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.spvasm
deleted file mode 100644
index aa27ff4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Floor %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.wgsl
deleted file mode 100644
index 91cfb3d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_10.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = floor(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.hlsl
deleted file mode 100644
index d4b6ff7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = frac(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.msl
deleted file mode 100644
index b179f70..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = fract(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.spvasm
deleted file mode 100644
index b4b13ee..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Fract %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.wgsl
deleted file mode 100644
index 2e14f76..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_11.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = fract(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.hlsl
deleted file mode 100644
index 47fe07f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = rsqrt(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.msl
deleted file mode 100644
index 99db3c2..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = rsqrt(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.spvasm
deleted file mode 100644
index f87d3ab..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 InverseSqrt %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.wgsl
deleted file mode 100644
index 177941e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_12.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = inverseSqrt(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.hlsl
deleted file mode 100644
index d51a664..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = log(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.msl
deleted file mode 100644
index 9c033ad..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = log(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.spvasm
deleted file mode 100644
index 0ea92cc..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Log %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.wgsl
deleted file mode 100644
index b136a0f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_13.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = log(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.hlsl
deleted file mode 100644
index b4f49f6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = log2(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.msl
deleted file mode 100644
index eab849b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = log2(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.spvasm
deleted file mode 100644
index 68a5d86..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Log2 %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.wgsl
deleted file mode 100644
index 6adbf96..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_14.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = log2(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.hlsl
deleted file mode 100644
index b33a1bb..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = round(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.msl
deleted file mode 100644
index 51d1956..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = rint(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.spvasm
deleted file mode 100644
index 87c4d05..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 RoundEven %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.wgsl
deleted file mode 100644
index d2f6d19..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_15.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = round(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.hlsl
deleted file mode 100644
index b33a1bb..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = round(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.msl
deleted file mode 100644
index 51d1956..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = rint(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.spvasm
deleted file mode 100644
index 87c4d05..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 RoundEven %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.wgsl
deleted file mode 100644
index d2f6d19..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_16.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = round(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.hlsl
deleted file mode 100644
index 1c67f46..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = sin(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.msl
deleted file mode 100644
index 4cc0ef1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = sin(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.spvasm
deleted file mode 100644
index 7f5e16d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Sin %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.wgsl
deleted file mode 100644
index bdea50d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_17.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = sin(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.hlsl
deleted file mode 100644
index 44a46d2..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = sinh(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.msl
deleted file mode 100644
index 34c9fbd..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = sinh(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.spvasm
deleted file mode 100644
index 16386c1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Sinh %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.wgsl
deleted file mode 100644
index 2910d47..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_18.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = sinh(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.hlsl
deleted file mode 100644
index ff291e1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = sqrt(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.msl
deleted file mode 100644
index 0610770..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = sqrt(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.spvasm
deleted file mode 100644
index ce4e5b5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Sqrt %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.wgsl
deleted file mode 100644
index 1b87cef..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_19.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = sqrt(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.hlsl
deleted file mode 100644
index c358e0c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = atan(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.msl
deleted file mode 100644
index b8e0ca6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = atan(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.spvasm
deleted file mode 100644
index 90c23c5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Atan %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.wgsl
deleted file mode 100644
index e3b1d27..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = atan(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.hlsl
deleted file mode 100644
index 07771f1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = tan(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.msl
deleted file mode 100644
index 4c361b9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = tan(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.spvasm
deleted file mode 100644
index c8b7bf4..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Tan %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.wgsl
deleted file mode 100644
index dfc7ab8..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_20.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = tan(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.hlsl
deleted file mode 100644
index fe10015..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = tanh(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.msl
deleted file mode 100644
index 7e67e78..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = tanh(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.spvasm
deleted file mode 100644
index 0454501..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Tanh %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.wgsl
deleted file mode 100644
index e52aaae..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_21.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = tanh(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.hlsl
deleted file mode 100644
index 8e6cd9e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = trunc(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.msl
deleted file mode 100644
index a5f8eea..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = trunc(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.spvasm
deleted file mode 100644
index 675d331..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Trunc %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.wgsl
deleted file mode 100644
index bcde1e7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_22.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = trunc(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.hlsl
deleted file mode 100644
index cf532f1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = ceil(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.msl
deleted file mode 100644
index df24b99..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = ceil(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.spvasm
deleted file mode 100644
index bcd6bcf..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Ceil %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.wgsl
deleted file mode 100644
index 9e07fad..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = ceil(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.hlsl
deleted file mode 100644
index 9c500ae..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = cos(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.msl
deleted file mode 100644
index 3539768..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = cos(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.spvasm
deleted file mode 100644
index 1a19598..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Cos %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.wgsl
deleted file mode 100644
index 7bbcb58..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = cos(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.hlsl
deleted file mode 100644
index 5103700..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = cosh(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.msl
deleted file mode 100644
index f7b8b3b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = cosh(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.spvasm
deleted file mode 100644
index 183406e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Cosh %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.wgsl
deleted file mode 100644
index 6028d58..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = cosh(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.hlsl
deleted file mode 100644
index 0882adc..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = exp(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.msl
deleted file mode 100644
index dad62b2..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = exp(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.spvasm
deleted file mode 100644
index 85e23b7d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Exp %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.wgsl
deleted file mode 100644
index c333e7c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = exp(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.hlsl
deleted file mode 100644
index bad88d7..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = exp2(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.msl
deleted file mode 100644
index 3c14f10..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = exp2(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.spvasm
deleted file mode 100644
index 8c65099..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Exp2 %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.wgsl
deleted file mode 100644
index 6cb9632..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = exp2(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.hlsl
deleted file mode 100644
index 65778c2..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = abs(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.msl
deleted file mode 100644
index 1d7c757..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = fabs(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.spvasm
deleted file mode 100644
index 559526e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 FAbs %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.wgsl
deleted file mode 100644
index dcc4ffa..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_8.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = abs(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.hlsl
deleted file mode 100644
index d408af1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = sign(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.msl
deleted file mode 100644
index 04cdee9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = sign(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.spvasm
deleted file mode 100644
index 88a34b5..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 FSign %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.wgsl
deleted file mode 100644
index 59f383e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Floating_Floating_Vector_9.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = sign(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index dfa6a4c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int x_1 = clamp(i1, i2, i3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index f6270ef..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int const x_1 = clamp(i1, i2, i3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index b5a717e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %int %35 SClamp %int_30 %int_35 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 1d63491..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : i32 = clamp(i1, i2, i3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index d3f5444..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int2 x_1 = clamp(v2i1, v2i2, v2i3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.msl
deleted file mode 100644
index 20d1b4f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int2 const x_1 = clamp(v2i1, v2i2, v2i3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index abc2be9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2int %35 SClamp %22 %23 %24
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index edc1279..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingIntingInting_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<i32> = clamp(v2i1, v2i2, v2i3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index a4dfe37..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int x_1 = max(i1, i2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index e8f9a6f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int const x_1 = max(i1, i2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index 01ffe59..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %int %35 SMax %int_30 %int_35
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 754e187..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : i32 = max(i1, i2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.hlsl
deleted file mode 100644
index ef189df..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int x_1 = min(i1, i2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.msl
deleted file mode 100644
index e95f3e1..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int const x_1 = min(i1, i2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.spvasm
deleted file mode 100644
index a5a4c67..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %int %35 SMin %int_30 %int_35
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.wgsl
deleted file mode 100644
index 828a699..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Scalar_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : i32 = min(i1, i2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index 3c0d4d6..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int2 x_1 = max(v2i1, v2i2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.msl
deleted file mode 100644
index d8a6fa3..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int2 const x_1 = max(v2i1, v2i2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index d2c2caa..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2int %35 SMax %22 %23
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index e947913..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<i32> = max(v2i1, v2i2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.hlsl
deleted file mode 100644
index 17494ca..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int2 x_1 = min(v2i1, v2i2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.msl
deleted file mode 100644
index 1e40c2c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int2 const x_1 = min(v2i1, v2i2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.spvasm
deleted file mode 100644
index 0d9ddef..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2int %35 SMin %22 %23
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.wgsl
deleted file mode 100644
index c3f15fd..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_IntingInting_Vector_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<i32> = min(v2i1, v2i2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index eaa6b3c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int x_1 = abs(i1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 53978b8..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int const x_1 = abs(i1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index 76be129..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %int %35 SAbs %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index b60592f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : i32 = abs(i1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index a042e61..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int2 x_1 = abs(v2i1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.msl
deleted file mode 100644
index a16acf9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int2 const x_1 = abs(v2i1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index 6a2a901..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2int %35 SAbs %22
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index 74dcc1c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Inting_Inting_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<i32> = abs(v2i1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index e6d5394..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = clamp(u1, u2, u3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 63921c0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = clamp(u1, u2, u3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index a4c872c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %uint %35 UClamp %uint_10 %uint_15 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index 7d57d99..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = clamp(u1, u2, u3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index 14b4acd..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint2 x_1 = clamp(v2u1, v2u2, v2u3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.msl
deleted file mode 100644
index 357c4ad..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint2 const x_1 = clamp(v2u1, v2u2, v2u3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index bb8214b..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2uint %35 UClamp %18 %19 %20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index eec1568..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUintingUinting_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<u32> = clamp(v2u1, v2u2, v2u3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.hlsl
deleted file mode 100644
index 0966e6c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = max(u1, u2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.msl
deleted file mode 100644
index 7338b41..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = max(u1, u2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.spvasm
deleted file mode 100644
index f8d0210..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %uint %35 UMax %uint_10 %uint_15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.wgsl
deleted file mode 100644
index b3bd92f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = max(u1, u2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.hlsl
deleted file mode 100644
index b1696c0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = min(u1, u2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.msl
deleted file mode 100644
index 1d6243d..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = min(u1, u2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.spvasm
deleted file mode 100644
index 2e552fe..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %uint %35 UMin %uint_10 %uint_15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.wgsl
deleted file mode 100644
index f95d6fc..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Scalar_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = min(u1, u2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.hlsl
deleted file mode 100644
index e3d86b0..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint2 x_1 = max(v2u1, v2u2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.msl
deleted file mode 100644
index c5e299c..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint2 const x_1 = max(v2u1, v2u2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.spvasm
deleted file mode 100644
index e680513..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2uint %35 UMax %18 %19
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.wgsl
deleted file mode 100644
index b0b6f9e..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<u32> = max(v2u1, v2u2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.hlsl
deleted file mode 100644
index 8c8fed9..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint2 x_1 = min(v2u1, v2u2);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.msl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.msl
deleted file mode 100644
index fad0f0f..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint2 const x_1 = min(v2u1, v2u2);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.spvasm
deleted file mode 100644
index 5d86c55..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2uint %35 UMin %18 %19
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.wgsl
deleted file mode 100644
index f4c5a08..0000000
--- a/test/unittest/reader/spirv/Samples_SpvParserTest_GlslStd450_Uinting_UintingUinting_Vector_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<u32> = min(v2u1, v2u2);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.hlsl
deleted file mode 100644
index 94f5f56..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = float2(60.0f, 50.0f);
-  const float x_3 = dot(x_1, x_2);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.msl
deleted file mode 100644
index 0375390..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = float2(60.0f, 50.0f);
-  float const x_3 = dot(x_1, x_2);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.spvasm
deleted file mode 100644
index 2258453..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpDot %float %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.wgsl
deleted file mode 100644
index bd1ae89..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_Dot.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let x_3 : f32 = dot(x_1, x_2);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 6a5fd68..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = (50.0f - (60.0f * floor((50.0f / 60.0f))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.msl
deleted file mode 100644
index 71427b2..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = (50.0f - (60.0f * floor((50.0f / 60.0f))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 6eec256..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-          %9 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpFDiv %float %float_50 %float_60
-          %8 = OpExtInst %float %9 Floor %10
-         %11 = OpFMul %float %float_60 %8
-         %12 = OpFSub %float %float_50 %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 19dadbf..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = (50.0 - (60.0 * floor((50.0 / 60.0))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.hlsl
deleted file mode 100644
index fc465ff..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2 x_1 = (float2(50.0f, 60.0f) - (float2(60.0f, 50.0f) * floor((float2(50.0f, 60.0f) / float2(60.0f, 50.0f)))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.msl
deleted file mode 100644
index b00d178..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = (float2(50.0f, 60.0f) - (float2(60.0f, 50.0f) * floor((float2(50.0f, 60.0f) / float2(60.0f, 50.0f)))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.spvasm
deleted file mode 100644
index d4c9808..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-         %12 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpFDiv %v2float %9 %10
-         %11 = OpExtInst %v2float %12 Floor %13
-         %14 = OpFMul %v2float %10 %11
-         %15 = OpFSub %v2float %9 %14
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 25e93f0..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_FMod_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = (vec2<f32>(50.0, 60.0) - (vec2<f32>(60.0, 50.0) * floor((vec2<f32>(50.0, 60.0) / vec2<f32>(60.0, 50.0)))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.hlsl
deleted file mode 100644
index 679689f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const float2x2 x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  const float2x2 x_2 = float2x2(float2(60.0f, 50.0f), float2(50.0f, 60.0f));
-  const float2x2 x_10 = mul(x_2, x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.msl
deleted file mode 100644
index c454b67..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2x2 const x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  float2x2 const x_2 = float2x2(float2(60.0f, 50.0f), float2(50.0f, 60.0f));
-  float2x2 const x_10 = (x_1 * x_2);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.spvasm
deleted file mode 100644
index 900987a..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-         %12 = OpConstantComposite %mat2v2float %10 %11
-         %13 = OpConstantComposite %mat2v2float %11 %10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %14 = OpMatrixTimesMatrix %mat2v2float %12 %13
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.wgsl
deleted file mode 100644
index d05a954..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesMatrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  let x_1 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(50.0, 60.0), vec2<f32>(60.0, 50.0));
-  let x_2 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(60.0, 50.0), vec2<f32>(50.0, 60.0));
-  let x_10 : mat2x2<f32> = (x_1 * x_2);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.hlsl
deleted file mode 100644
index b51b74e..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2x2 x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  const float2x2 x_10 = (x_1 * 50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.msl
deleted file mode 100644
index 5e2d89d..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2x2 const x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  float const x_2 = 50.0f;
-  float2x2 const x_10 = (x_1 * x_2);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.spvasm
deleted file mode 100644
index b0279b1..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-         %12 = OpConstantComposite %mat2v2float %10 %11
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpMatrixTimesScalar %mat2v2float %12 %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.wgsl
deleted file mode 100644
index f4611f4..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesScalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  let x_1 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(50.0, 60.0), vec2<f32>(60.0, 50.0));
-  let x_2 : f32 = 50.0;
-  let x_10 : mat2x2<f32> = (x_1 * x_2);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.hlsl
deleted file mode 100644
index 7f8ada7..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const float2x2 x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  const float2 x_2 = float2(50.0f, 60.0f);
-  const float2 x_10 = mul(x_2, x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.msl
deleted file mode 100644
index 5c2941d..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2x2 const x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  float2 const x_2 = float2(50.0f, 60.0f);
-  float2 const x_10 = (x_1 * x_2);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.spvasm
deleted file mode 100644
index a06a834..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-         %12 = OpConstantComposite %mat2v2float %10 %11
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpMatrixTimesVector %v2float %12 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.wgsl
deleted file mode 100644
index d66e9e4..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_MatrixTimesVector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  let x_1 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(50.0, 60.0), vec2<f32>(60.0, 50.0));
-  let x_2 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_10 : vec2<f32> = (x_1 * x_2);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.hlsl
deleted file mode 100644
index b6eb7ec..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const float3 x_1 = (float3(50.0f, 60.0f, 70.0f) + float3(50.0f, 60.0f, 70.0f));
-  const float2 x_2 = (float2(60.0f, 50.0f) + float2(50.0f, 60.0f));
-  const float2x3 x_3 = float2x3(float3((x_2.x * x_1.x), (x_2.x * x_1.y), (x_2.x * x_1.z)), float3((x_2.y * x_1.x), (x_2.y * x_1.y), (x_2.y * x_1.z)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.msl
deleted file mode 100644
index 7246ce8..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = (float3(50.0f, 60.0f, 70.0f) + float3(50.0f, 60.0f, 70.0f));
-  float2 const x_2 = (float2(60.0f, 50.0f) + float2(50.0f, 60.0f));
-  float2x3 const x_3 = float2x3(float3((x_2.x * x_1.x), (x_2.x * x_1.y), (x_2.x * x_1.z)), float3((x_2.y * x_1.x), (x_2.y * x_1.y), (x_2.y * x_1.z)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.spvasm
deleted file mode 100644
index cc8d70b..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,55 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-    %v2float = OpTypeVector %float 2
-         %13 = OpConstantComposite %v2float %float_60 %float_50
-         %14 = OpConstantComposite %v2float %float_50 %float_60
-%mat2v3float = OpTypeMatrix %v3float 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFAdd %v3float %10 %10
-         %15 = OpFAdd %v2float %13 %14
-         %17 = OpCompositeExtract %float %15 0
-         %18 = OpCompositeExtract %float %11 0
-         %19 = OpFMul %float %17 %18
-         %20 = OpCompositeExtract %float %15 0
-         %21 = OpCompositeExtract %float %11 1
-         %22 = OpFMul %float %20 %21
-         %23 = OpCompositeExtract %float %15 0
-         %24 = OpCompositeExtract %float %11 2
-         %25 = OpFMul %float %23 %24
-         %26 = OpCompositeConstruct %v3float %19 %22 %25
-         %27 = OpCompositeExtract %float %15 1
-         %28 = OpCompositeExtract %float %11 0
-         %29 = OpFMul %float %27 %28
-         %30 = OpCompositeExtract %float %15 1
-         %31 = OpCompositeExtract %float %11 1
-         %32 = OpFMul %float %30 %31
-         %33 = OpCompositeExtract %float %15 1
-         %34 = OpCompositeExtract %float %11 2
-         %35 = OpFMul %float %33 %34
-         %36 = OpCompositeConstruct %v3float %29 %32 %35
-         %37 = OpCompositeConstruct %mat2v3float %26 %36
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.wgsl
deleted file mode 100644
index 37432da..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_OuterProduct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = (vec3<f32>(50.0, 60.0, 70.0) + vec3<f32>(50.0, 60.0, 70.0));
-  let x_2 : vec2<f32> = (vec2<f32>(60.0, 50.0) + vec2<f32>(50.0, 60.0));
-  let x_3 : mat2x3<f32> = mat2x3<f32>(vec3<f32>((x_2.x * x_1.x), (x_2.x * x_1.y), (x_2.x * x_1.z)), vec3<f32>((x_2.y * x_1.x), (x_2.y * x_1.y), (x_2.y * x_1.z)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.hlsl
deleted file mode 100644
index d3c8c9f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 / 40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.msl
deleted file mode 100644
index 4214737..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>((30 / 40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.spvasm
deleted file mode 100644
index c6dee99..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpSDiv %int %int_30 %int_40
-          %5 = OpBitcast %uint %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.wgsl
deleted file mode 100644
index 046334f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Scalar_UnsignedResult.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 / 40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.hlsl
deleted file mode 100644
index c142541..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) / int2(40, 30)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.msl
deleted file mode 100644
index b313264..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>((int2(30, 40) / int2(40, 30)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.spvasm
deleted file mode 100644
index a03b2fe..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-         %13 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %14 = OpSDiv %v2int %12 %13
-          %5 = OpBitcast %v2uint %14
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.wgsl
deleted file mode 100644
index bee7f57..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SDiv_Vector_UnsignedResult.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) / vec2<i32>(40, 30)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.hlsl
deleted file mode 100644
index 78291bb..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 % 40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.msl
deleted file mode 100644
index ba27adf..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>((30 % 40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.spvasm
deleted file mode 100644
index 84d2f53..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpSMod %int %int_30 %int_40
-          %5 = OpBitcast %uint %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.wgsl
deleted file mode 100644
index 0bbe6ca..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Scalar_UnsignedResult.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 % 40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.hlsl
deleted file mode 100644
index 174eca0..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) % int2(40, 30)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.msl
deleted file mode 100644
index 88a2915..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>((int2(30, 40) % int2(40, 30)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.spvasm
deleted file mode 100644
index f22b845..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-         %13 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %14 = OpSMod %v2int %12 %13
-          %5 = OpBitcast %v2uint %14
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.wgsl
deleted file mode 100644
index 23f1bd0..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_SMod_Vector_UnsignedResult.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) % vec2<i32>(40, 30)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.hlsl
deleted file mode 100644
index 7f8ada7..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const float2x2 x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  const float2 x_2 = float2(50.0f, 60.0f);
-  const float2 x_10 = mul(x_2, x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.msl
deleted file mode 100644
index 5c2941d..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2x2 const x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  float2 const x_2 = float2(50.0f, 60.0f);
-  float2 const x_10 = (x_1 * x_2);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.spvasm
deleted file mode 100644
index a06a834..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-         %12 = OpConstantComposite %mat2v2float %10 %11
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpMatrixTimesVector %v2float %12 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.wgsl
deleted file mode 100644
index d66e9e4..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesMatrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  let x_1 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(50.0, 60.0), vec2<f32>(60.0, 50.0));
-  let x_2 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_10 : vec2<f32> = (x_1 * x_2);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.hlsl
deleted file mode 100644
index 1843297..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_10 = (x_1 * 50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.msl
deleted file mode 100644
index c420ea4..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float const x_2 = 50.0f;
-  float2 const x_10 = (x_1 * x_2);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.spvasm
deleted file mode 100644
index 64946ed..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpVectorTimesScalar %v2float %9 %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.wgsl
deleted file mode 100644
index ac34d3c..0000000
--- a/test/unittest/reader/spirv/SpvBinaryArithTestBasic_VectorTimesScalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : f32 = 50.0;
-  let x_10 : vec2<f32> = (x_1 * x_2);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.hlsl
deleted file mode 100644
index 1d554c3..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = ddx(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.msl
deleted file mode 100644
index 2072656..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.spvasm
deleted file mode 100644
index 9bcc44f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpDPdx %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.wgsl
deleted file mode 100644
index 82db1f9..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = dpdx(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.hlsl
deleted file mode 100644
index 1e5872e..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = ddx(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.msl
deleted file mode 100644
index 0a0efd2..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.spvasm
deleted file mode 100644
index ed86b26..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpDPdx %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.wgsl
deleted file mode 100644
index 36704aa..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = dpdx(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.hlsl
deleted file mode 100644
index 9404848..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = ddx_fine(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.msl
deleted file mode 100644
index 0a0efd2..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.spvasm
deleted file mode 100644
index ed18e8b..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpDPdxFine %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.wgsl
deleted file mode 100644
index d7dacf3..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = dpdxFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.hlsl
deleted file mode 100644
index 2f2f39a..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = ddx_fine(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.msl
deleted file mode 100644
index d0b0b54..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.spvasm
deleted file mode 100644
index 8d9e49c..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpDPdxFine %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.wgsl
deleted file mode 100644
index ea448bc..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = dpdxFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.hlsl
deleted file mode 100644
index a82b871..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = ddy_fine(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.msl
deleted file mode 100644
index 3eb6aaf..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.spvasm
deleted file mode 100644
index 0f6f954..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpDPdyFine %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.wgsl
deleted file mode 100644
index fe17388..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = dpdyFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.hlsl
deleted file mode 100644
index 978f994..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = ddy_fine(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.msl
deleted file mode 100644
index 125c08e..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.spvasm
deleted file mode 100644
index dcf9a40..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpDPdyFine %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.wgsl
deleted file mode 100644
index 1d303f3..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = dpdyFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.hlsl
deleted file mode 100644
index 14fdbca..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = ddy_fine(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.msl
deleted file mode 100644
index 999f205..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.spvasm
deleted file mode 100644
index 7f14b55..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpDPdyFine %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.wgsl
deleted file mode 100644
index 0afb23d..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = dpdyFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.hlsl
deleted file mode 100644
index f015927..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = fwidth(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.msl
deleted file mode 100644
index 948f0c9..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.spvasm
deleted file mode 100644
index 698703c..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpFwidthFine %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.wgsl
deleted file mode 100644
index bbea772..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_15.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = fwidthFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.hlsl
deleted file mode 100644
index a945113..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = fwidth(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.msl
deleted file mode 100644
index ee87b31..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.spvasm
deleted file mode 100644
index 713c113..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpFwidthFine %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.wgsl
deleted file mode 100644
index f67a29a..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_16.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = fwidthFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.hlsl
deleted file mode 100644
index ff6dce6..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = fwidth(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.msl
deleted file mode 100644
index 8209a1d..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.spvasm
deleted file mode 100644
index 8252c42..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFwidthFine %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.wgsl
deleted file mode 100644
index 68b3fbf..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_17.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = fwidthFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.hlsl
deleted file mode 100644
index 24551be..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = ddx_coarse(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.msl
deleted file mode 100644
index 2072656..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.spvasm
deleted file mode 100644
index 31a916f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpDPdxCoarse %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.wgsl
deleted file mode 100644
index 0d94747..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = dpdxCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.hlsl
deleted file mode 100644
index 00bec1c..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = ddx_coarse(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.msl
deleted file mode 100644
index 0a0efd2..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.spvasm
deleted file mode 100644
index ab012a7..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpDPdxCoarse %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.wgsl
deleted file mode 100644
index acc24bd..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = dpdxCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.hlsl
deleted file mode 100644
index f9d2045..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = ddx(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.msl
deleted file mode 100644
index d0b0b54..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.spvasm
deleted file mode 100644
index b1749a2..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpDPdx %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.wgsl
deleted file mode 100644
index 398fb2f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = dpdx(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.hlsl
deleted file mode 100644
index 9588372..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = ddx_coarse(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.msl
deleted file mode 100644
index d0b0b54..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.spvasm
deleted file mode 100644
index 3593979..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpDPdxCoarse %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.wgsl
deleted file mode 100644
index 9b568c0..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = dpdxCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.hlsl
deleted file mode 100644
index f79885f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = ddy_coarse(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.msl
deleted file mode 100644
index 3eb6aaf..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.spvasm
deleted file mode 100644
index 55befd0..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpDPdyCoarse %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.wgsl
deleted file mode 100644
index fbdafc5..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = dpdyCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.hlsl
deleted file mode 100644
index b375285..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = ddy_coarse(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.msl
deleted file mode 100644
index 125c08e..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.spvasm
deleted file mode 100644
index 93e2966..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpDPdyCoarse %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.wgsl
deleted file mode 100644
index 91825b5..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = dpdyCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.hlsl
deleted file mode 100644
index 99d51c1..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = ddy_coarse(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.msl
deleted file mode 100644
index 999f205..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.spvasm
deleted file mode 100644
index 35bc166..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpDPdyCoarse %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.wgsl
deleted file mode 100644
index 0d04201..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = dpdyCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.hlsl
deleted file mode 100644
index f015927..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = fwidth(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.msl
deleted file mode 100644
index 948f0c9..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.spvasm
deleted file mode 100644
index e0e3703..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpFwidthCoarse %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.wgsl
deleted file mode 100644
index d2dba47..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_24.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = fwidthCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.hlsl
deleted file mode 100644
index a945113..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = fwidth(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.msl
deleted file mode 100644
index ee87b31..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.spvasm
deleted file mode 100644
index ad91ad8..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpFwidthCoarse %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.wgsl
deleted file mode 100644
index 5ddce50..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_25.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = fwidthCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.hlsl
deleted file mode 100644
index ff6dce6..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = fwidth(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.msl
deleted file mode 100644
index 8209a1d..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.spvasm
deleted file mode 100644
index 973575b..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFwidthCoarse %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.wgsl
deleted file mode 100644
index d628e0f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_26.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = fwidthCoarse(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.hlsl
deleted file mode 100644
index ba90055..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = ddy(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.msl
deleted file mode 100644
index 3eb6aaf..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.spvasm
deleted file mode 100644
index 18dc2ef..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpDPdy %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.wgsl
deleted file mode 100644
index d83de4f..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = dpdy(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.hlsl
deleted file mode 100644
index 63fe558..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = ddy(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.msl
deleted file mode 100644
index 125c08e..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.spvasm
deleted file mode 100644
index 3c40cc6..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpDPdy %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.wgsl
deleted file mode 100644
index 7e84a6a..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = dpdy(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.hlsl
deleted file mode 100644
index 2597a98..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = ddy(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.msl
deleted file mode 100644
index 999f205..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = dfdy(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.spvasm
deleted file mode 100644
index e9e4d08..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpDPdy %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.wgsl
deleted file mode 100644
index 52878ed..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = dpdy(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.hlsl
deleted file mode 100644
index f015927..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = fwidth(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.msl
deleted file mode 100644
index 948f0c9..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.spvasm
deleted file mode 100644
index c71a50a..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpFwidth %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.wgsl
deleted file mode 100644
index f3acf8c..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_6.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = fwidth(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.hlsl
deleted file mode 100644
index a945113..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_1 = float2(50.0f, 60.0f);
-  const float2 x_2 = fwidth(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.msl
deleted file mode 100644
index ee87b31..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = float2(50.0f, 60.0f);
-  float2 const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.spvasm
deleted file mode 100644
index 3f4bc91..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpFwidth %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.wgsl
deleted file mode 100644
index a16d4d5..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_7.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_2 : vec2<f32> = fwidth(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.hlsl
deleted file mode 100644
index ff6dce6..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3 x_1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 x_2 = fwidth(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.msl
deleted file mode 100644
index 8209a1d..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3 const x_1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const x_2 = fwidth(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.spvasm
deleted file mode 100644
index f12d235..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %10 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFwidth %v3float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.wgsl
deleted file mode 100644
index bd2752b..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_8.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let x_2 : vec3<f32> = fwidth(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.hlsl
deleted file mode 100644
index c1aadba..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_2 = ddx_fine(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.msl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.msl
deleted file mode 100644
index 2072656..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = 50.0f;
-  float const x_2 = dfdx(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.spvasm
deleted file mode 100644
index d7754fe..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpCapability DerivativeControl
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpDPdxFine %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.wgsl
deleted file mode 100644
index c61e2ff..0000000
--- a/test/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = 50.0;
-  let x_2 : f32 = dpdxFine(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index d4ed465..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = !((50.0f != 60.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.msl
deleted file mode 100644
index d7cb0c0..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = !((50.0f != 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 2728036..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpFOrdNotEqual %bool %float_50 %float_60
-          %5 = OpLogicalNot %bool %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 7e6f985..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = !((50.0 != 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 6e2c9c9..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = !((float2(50.0f, 60.0f) != float2(60.0f, 50.0f)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.msl
deleted file mode 100644
index 55eb273..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = !((float2(50.0f, 60.0f) != float2(60.0f, 50.0f)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 6865ccc..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %12 = OpFOrdNotEqual %v2bool %10 %11
-          %5 = OpLogicalNot %v2bool %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 91630e5..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordEqual_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = !((vec2<f32>(50.0, 60.0) != vec2<f32>(60.0, 50.0)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 6b5a3c6..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = !((50.0f < 60.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.msl
deleted file mode 100644
index 9c519dc..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = !((50.0f < 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 4c6f483..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpFOrdLessThan %bool %float_50 %float_60
-          %5 = OpLogicalNot %bool %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index c9006fa..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = !((50.0 < 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.hlsl
deleted file mode 100644
index e911ebf..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = !((float2(50.0f, 60.0f) < float2(60.0f, 50.0f)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.msl
deleted file mode 100644
index e9ababc..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = !((float2(50.0f, 60.0f) < float2(60.0f, 50.0f)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.spvasm
deleted file mode 100644
index c9427b7..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %12 = OpFOrdLessThan %v2bool %10 %11
-          %5 = OpLogicalNot %v2bool %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.wgsl
deleted file mode 100644
index d92afa3..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThanEqual_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = !((vec2<f32>(50.0, 60.0) < vec2<f32>(60.0, 50.0)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index c8232c5..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = !((50.0f <= 60.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.msl
deleted file mode 100644
index 1c146e7..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = !((50.0f <= 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 5dbe6fe..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpFOrdLessThanEqual %bool %float_50 %float_60
-          %5 = OpLogicalNot %bool %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index bfb44bd..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = !((50.0 <= 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 990f329..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = !((float2(50.0f, 60.0f) <= float2(60.0f, 50.0f)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.msl
deleted file mode 100644
index 5e7ab76..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = !((float2(50.0f, 60.0f) <= float2(60.0f, 50.0f)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.spvasm
deleted file mode 100644
index bd947be..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %12 = OpFOrdLessThanEqual %v2bool %10 %11
-          %5 = OpLogicalNot %v2bool %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.wgsl
deleted file mode 100644
index c20efcd..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordGreaterThan_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = !((vec2<f32>(50.0, 60.0) <= vec2<f32>(60.0, 50.0)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 448c8b3..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = !((50.0f > 60.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.msl
deleted file mode 100644
index 211c9b0..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = !((50.0f > 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 0b46ad4..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpFOrdGreaterThan %bool %float_50 %float_60
-          %5 = OpLogicalNot %bool %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index f0e117f..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = !((50.0 > 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.hlsl
deleted file mode 100644
index d9a0e67..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = !((float2(50.0f, 60.0f) > float2(60.0f, 50.0f)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.msl
deleted file mode 100644
index 449f8f6..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = !((float2(50.0f, 60.0f) > float2(60.0f, 50.0f)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 9da8af0..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %12 = OpFOrdGreaterThan %v2bool %10 %11
-          %5 = OpLogicalNot %v2bool %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.wgsl
deleted file mode 100644
index a78ec59..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThanEqual_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = !((vec2<f32>(50.0, 60.0) > vec2<f32>(60.0, 50.0)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 68ba23d..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = !((50.0f >= 60.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.msl
deleted file mode 100644
index c1f9ec6..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = !((50.0f >= 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index ce97680..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpFOrdGreaterThanEqual %bool %float_50 %float_60
-          %5 = OpLogicalNot %bool %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 288eb16..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = !((50.0 >= 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.hlsl
deleted file mode 100644
index c75e8f1..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = !((float2(50.0f, 60.0f) >= float2(60.0f, 50.0f)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.msl
deleted file mode 100644
index d1df2a8..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = !((float2(50.0f, 60.0f) >= float2(60.0f, 50.0f)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 88b76a4..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %12 = OpFOrdGreaterThanEqual %v2bool %10 %11
-          %5 = OpLogicalNot %v2bool %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 54563a6..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordLessThan_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = !((vec2<f32>(50.0, 60.0) >= vec2<f32>(60.0, 50.0)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 4e0d011..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = !((50.0f == 60.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.msl
deleted file mode 100644
index 0c11121..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = !((50.0f == 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 1914d11..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpFOrdEqual %bool %float_50 %float_60
-          %5 = OpLogicalNot %bool %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 26e0da0..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = !((50.0 == 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 6babf24..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = !((float2(50.0f, 60.0f) == float2(60.0f, 50.0f)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.msl
deleted file mode 100644
index 2a6bb86..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = !((float2(50.0f, 60.0f) == float2(60.0f, 50.0f)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 803c87d..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %12 = OpFOrdEqual %v2bool %10 %11
-          %5 = OpLogicalNot %v2bool %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.wgsl
deleted file mode 100644
index c6e1a26..0000000
--- a/test/unittest/reader/spirv/SpvFUnordTest_FUnordNotEqual_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = !((vec2<f32>(50.0, 60.0) == vec2<f32>(60.0, 50.0)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.hlsl
deleted file mode 100644
index 7baa0d3..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = all(bool2(true, false));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.msl
deleted file mode 100644
index 6471daa..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = all(bool2(true, false));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.spvasm
deleted file mode 100644
index 4f0ec93..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-         %10 = OpConstantComposite %v2bool %true %false
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpAll %bool %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.wgsl
deleted file mode 100644
index 13754e9..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_All.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = all(vec2<bool>(true, false));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.hlsl
deleted file mode 100644
index 355566f..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = any(bool2(true, false));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.msl
deleted file mode 100644
index 2a1ff4f..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = any(bool2(true, false));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.spvasm
deleted file mode 100644
index 04cdf1c..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-         %10 = OpConstantComposite %v2bool %true %false
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpAny %bool %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.wgsl
deleted file mode 100644
index c83767f..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Any.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = any(vec2<bool>(true, false));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 7b8907a..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = isinf(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.msl
deleted file mode 100644
index 3573991..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = isinf(50.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 6c8a8fd..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpIsInf %bool %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index b943653..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = isInf(50.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 15bb43c..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = isinf(float2(50.0f, 60.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.msl
deleted file mode 100644
index 4af81bf..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = isinf(float2(50.0f, 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 04fe779..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %12 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpIsInf %v2bool %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.wgsl
deleted file mode 100644
index facbd2c..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsInf_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = isInf(vec2<f32>(50.0, 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 85fcf7b..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = isnan(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.msl
deleted file mode 100644
index 0d31ca9..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = isnan(50.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index c4dd240..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpIsNan %bool %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index fc8c045..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = isNan(50.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.msl
deleted file mode 100644
index a604594..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = isnan(float2(50.0f, 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 76fde65..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %12 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpIsNan %v2bool %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 1542d4b..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_IsNan_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = isNan(vec2<f32>(50.0, 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.hlsl
deleted file mode 100644
index 4cd29eb..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (true ? true : false);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.msl
deleted file mode 100644
index e9d89bb..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = select(false, true, true);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.spvasm
deleted file mode 100644
index e4b1526..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpSelect %bool %true %true %false
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.wgsl
deleted file mode 100644
index 97b860c..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_BoolParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = select(false, true, true);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.hlsl
deleted file mode 100644
index 44e6747..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = (true ? 50.0f : 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.msl
deleted file mode 100644
index 2357906..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = select(60.0f, 50.0f, true);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.spvasm
deleted file mode 100644
index 5a1f1a2..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpSelect %float %true %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.wgsl
deleted file mode 100644
index 72689b5..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_FloatScalarParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = select(60.0, 50.0, true);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.hlsl
deleted file mode 100644
index 30c0b99..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (true ? 10u : 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.msl
deleted file mode 100644
index 7ca3b5a..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = select(20u, 10u, true);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.spvasm
deleted file mode 100644
index 49265a3..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpSelect %uint %true %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.wgsl
deleted file mode 100644
index fcbb222..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_BoolCond_IntScalarParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = select(20u, 10u, true);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.hlsl
deleted file mode 100644
index 4c97d41..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (bool2(true, false) ? uint2(10u, 20u) : uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.msl
deleted file mode 100644
index 385c9c3..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = select(uint2(20u, 10u), uint2(10u, 20u), bool2(true, false));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.spvasm
deleted file mode 100644
index dcf2cf7..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-         %12 = OpConstantComposite %v2bool %true %false
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %15 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %16 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpSelect %v2uint %12 %15 %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.wgsl
deleted file mode 100644
index f7b7d94..0000000
--- a/test/unittest/reader/spirv/SpvLogicalTest_Select_VecBoolCond_VectorParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = select(vec2<u32>(20u, 10u), vec2<u32>(10u, 20u), vec2<bool>(true, false));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.hlsl
deleted file mode 100644
index 5d2e80b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-groupshared float x_52;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.spvasm
deleted file mode 100644
index ce68cdf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_52 "x_52"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-%_ptr_Workgroup_float = OpTypePointer Workgroup %float
-       %x_52 = OpVariable %_ptr_Workgroup_float Workgroup
-       %void = OpTypeVoid
-          %4 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %4
-          %7 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %4
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.wgsl
deleted file mode 100644
index dc4d09d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_AnonWorkgroupVar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<workgroup> x_52 : f32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.hlsl
deleted file mode 100644
index cb7c87e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint x_200[2] = {1u, 2u};
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.msl
deleted file mode 100644
index 4118613..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.spvasm
deleted file mode 100644
index e9636c0..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-     %uint_1 = OpConstant %uint 1
-          %5 = OpConstantComposite %_arr_uint_uint_2 %uint_1 %uint_2
-%_ptr_Private__arr_uint_uint_2 = OpTypePointer Private %_arr_uint_uint_2
-      %x_200 = OpVariable %_ptr_Private__arr_uint_uint_2 Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.wgsl
deleted file mode 100644
index 9486c7d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : array<u32, 2> = array<u32, 2>(1u, 2u);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 0ef58fb..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint x_200[2] = {0u, 0u};
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.msl
deleted file mode 100644
index 4118613..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.spvasm
deleted file mode 100644
index b237838..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-     %uint_0 = OpConstant %uint 0
-          %5 = OpConstantComposite %_arr_uint_uint_2 %uint_0 %uint_0
-%_ptr_Private__arr_uint_uint_2 = OpTypePointer Private %_arr_uint_uint_2
-      %x_200 = OpVariable %_ptr_Private__arr_uint_uint_2 Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.wgsl
deleted file mode 100644
index 83d177a..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ArrayNullInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : array<u32, 2> = array<u32, 2>(0u, 0u);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.hlsl
deleted file mode 100644
index adebfd6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer x_1 : register(u3, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.msl
deleted file mode 100644
index fd04641..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  /* 0x0000 */ uint arr[2];
-};
-struct S {
-  /* 0x0000 */ uint field0;
-  /* 0x0004 */ float field1;
-  /* 0x0008 */ tint_array_wrapper field2;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.spvasm
deleted file mode 100644
index 3f2fdf9..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-               OpDecorate %x_1 DescriptorSet 0
-               OpDecorate %x_1 Binding 3
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-          %S = OpTypeStruct %uint %float %_arr_uint_uint_2
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_1 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.wgsl
deleted file mode 100644
index 7bf378e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BindingDecoration_Valid.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-type Arr = [[stride(4)]] array<u32, 2>;
-
-[[block]]
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : Arr;
-};
-
-[[group(0), binding(3)]] var<storage, read_write> x_1 : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.hlsl
deleted file mode 100644
index 444c8e7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float x_900 = 0.0f;
-
-void main_1() {
-  x_900 = 1.0f;
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_2};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.msl
deleted file mode 100644
index 9ccdb81..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1(thread float* const tint_symbol_3) {
-  *(tint_symbol_3) = 1.0f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_2_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float tint_symbol_6 = 0.0f;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.spvasm
deleted file mode 100644
index ed72268..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_2_1_1 %vertex_point_size
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_2 "x_2"
-               OpName %x_900 "x_900"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-      %x_900 = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %18 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %x_900 %float_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %18
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-         %23 = OpLoad %v4float %x_2
-         %24 = OpCompositeConstruct %main_out %23
-               OpReturnValue %24
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %26 = OpLabel
-         %27 = OpFunctionCall %main_out %main_inner
-         %28 = OpCompositeExtract %v4float %27 0
-               OpStore %x_2_1_1 %28
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.wgsl
deleted file mode 100644
index 7cca8de..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_ReadReplaced_Vertex.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_900 : f32;
-
-fn main_1() {
-  x_900 = 1.0;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.hlsl
deleted file mode 100644
index 4edc58e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_2};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.msl
deleted file mode 100644
index 2589dab..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_2_1=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_4 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.spvasm
deleted file mode 100644
index 7ca42ed..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_2_1_1 %vertex_point_size
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %15 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %15
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-         %20 = OpLoad %v4float %x_2
-         %21 = OpCompositeConstruct %main_out %20
-               OpReturnValue %21
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %23 = OpLabel
-         %24 = OpFunctionCall %main_out %main_inner
-         %25 = OpCompositeExtract %v4float %24 0
-               OpStore %x_2_1_1 %25
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.wgsl
deleted file mode 100644
index 7f989e8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_Write1_IsErased.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.hlsl
deleted file mode 100644
index 4edc58e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_2};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.msl
deleted file mode 100644
index 2589dab..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_2_1=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_4 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.spvasm
deleted file mode 100644
index 7ca42ed..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_2_1_1 %vertex_point_size
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %15 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %15
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-         %20 = OpLoad %v4float %x_2
-         %21 = OpCompositeConstruct %main_out %20
-               OpReturnValue %21
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %23 = OpLabel
-         %24 = OpFunctionCall %main_out %main_inner
-         %25 = OpCompositeExtract %v4float %24 0
-               OpStore %x_2_1_1 %25
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.wgsl
deleted file mode 100644
index 7f989e8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.hlsl
deleted file mode 100644
index 4edc58e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_2};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.msl
deleted file mode 100644
index 2589dab..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_2_1=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_4 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.spvasm
deleted file mode 100644
index 7ca42ed..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_2_1_1 %vertex_point_size
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %15 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %15
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-         %20 = OpLoad %v4float %x_2
-         %21 = OpCompositeConstruct %main_out %20
-               OpReturnValue %21
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %23 = OpLabel
-         %24 = OpFunctionCall %main_out %main_inner
-         %25 = OpCompositeExtract %v4float %24 0
-               OpStore %x_2_1_1 %25
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.wgsl
deleted file mode 100644
index 7f989e8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Loose_WriteViaCopyObjectPriorAccess_Erased.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.hlsl
deleted file mode 100644
index 7f01c0b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static float x_900 = 0.0f;
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_900 = 1.0f;
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.msl
deleted file mode 100644
index 1840cc2..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float* const tint_symbol_3) {
-  *(tint_symbol_3) = 1.0f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float tint_symbol_6 = 0.0f;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.spvasm
deleted file mode 100644
index c042ca8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_900 "x_900"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_float = OpTypePointer Private %float
-      %x_900 = OpVariable %_ptr_Private_float Private %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %18 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %x_900 %float_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %18
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-         %23 = OpLoad %v4float %gl_Position
-         %24 = OpCompositeConstruct %main_out %23
-               OpReturnValue %24
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %26 = OpLabel
-         %27 = OpFunctionCall %main_out %main_inner
-         %28 = OpCompositeExtract %v4float %27 0
-               OpStore %gl_Position_1 %28
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.wgsl
deleted file mode 100644
index 55cfd34..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_ReadReplaced.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> x_900 : f32;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  x_900 = 1.0;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.hlsl
deleted file mode 100644
index fd53068..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.msl
deleted file mode 100644
index 9d19e8c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_4 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.spvasm
deleted file mode 100644
index d928dee..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %15 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %15
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-         %20 = OpLoad %v4float %gl_Position
-         %21 = OpCompositeConstruct %main_out %20
-               OpReturnValue %21
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %23 = OpLabel
-         %24 = OpFunctionCall %main_out %main_inner
-         %25 = OpCompositeExtract %v4float %24 0
-               OpStore %gl_Position_1 %25
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.wgsl
deleted file mode 100644
index b9c43ff..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_Write1_IsErased.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.hlsl
deleted file mode 100644
index fd53068..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.msl
deleted file mode 100644
index 9d19e8c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_4 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.spvasm
deleted file mode 100644
index d928dee..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %15 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %15
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-         %20 = OpLoad %v4float %gl_Position
-         %21 = OpCompositeConstruct %main_out %20
-               OpReturnValue %21
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %23 = OpLabel
-         %24 = OpFunctionCall %main_out %main_inner
-         %25 = OpCompositeExtract %v4float %24 0
-               OpStore %gl_Position_1 %25
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.wgsl
deleted file mode 100644
index b9c43ff..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPointSize_WriteViaCopyObjectPostAccessChainErased.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.hlsl
deleted file mode 100644
index fd53068..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.msl
deleted file mode 100644
index 9d19e8c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_4 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.spvasm
deleted file mode 100644
index d928dee..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %15 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %15
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-         %20 = OpLoad %v4float %gl_Position
-         %21 = OpCompositeConstruct %main_out %20
-               OpReturnValue %21
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %23 = OpLabel
-         %24 = OpFunctionCall %main_out %main_inner
-         %25 = OpCompositeExtract %v4float %24 0
-               OpStore %gl_Position_1 %25
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.wgsl
deleted file mode 100644
index b9c43ff..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.hlsl
deleted file mode 100644
index 3558296..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float4 gl_Position = float4(1.0f, 2.0f, 3.0f, 4.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.msl
deleted file mode 100644
index c969091..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_4 = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.spvasm
deleted file mode 100644
index 8c3d7cb..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 31
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %13 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %13
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %gl_Position
-         %26 = OpCompositeConstruct %main_out %25
-               OpReturnValue %26
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %28 = OpLabel
-         %29 = OpFunctionCall %main_out %main_inner
-         %30 = OpCompositeExtract %v4float %29 0
-               OpStore %gl_Position_1 %30
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.wgsl
deleted file mode 100644
index ed9859a..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_BuiltIn_Position_Initializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> gl_Position : vec4<f32> = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.hlsl
deleted file mode 100644
index b262a94..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.msl
deleted file mode 100644
index 8622e3b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.spvasm
deleted file mode 100644
index 0a7c17b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.spvasm
+++ /dev/null
@@ -1,56 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %16 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %17 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpStore %gl_Position %16
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %17
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-         %22 = OpLoad %v4float %gl_Position
-         %23 = OpCompositeConstruct %main_out %22
-               OpReturnValue %23
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %26 = OpFunctionCall %main_out %main_inner
-         %27 = OpCompositeExtract %v4float %26 0
-               OpStore %gl_Position_1 %27
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.wgsl
deleted file mode 100644
index 45b705f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  gl_Position = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 1236e98..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position.y = 0.0f;
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.msl
deleted file mode 100644
index 4b46a5f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  (*(tint_symbol_3)).y = 0.0f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.spvasm
deleted file mode 100644
index dca5f5f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-         %20 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_float %gl_Position %uint_1
-               OpStore %18 %float_0
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %gl_Position
-         %26 = OpCompositeConstruct %main_out %25
-               OpReturnValue %26
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %28 = OpLabel
-         %29 = OpFunctionCall %main_out %main_inner
-         %30 = OpCompositeExtract %v4float %29 0
-               OpStore %gl_Position_1 %30
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 45d50df..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_OneAccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  gl_Position.y = 0.0;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 1236e98..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position.y = 0.0f;
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.msl
deleted file mode 100644
index 4b46a5f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  (*(tint_symbol_3)).y = 0.0f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.spvasm
deleted file mode 100644
index dca5f5f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-         %20 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_float %gl_Position %uint_1
-               OpStore %18 %float_0
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %gl_Position
-         %26 = OpCompositeConstruct %main_out %25
-               OpReturnValue %26
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %28 = OpLabel
-         %29 = OpFunctionCall %main_out %main_inner
-         %30 = OpCompositeExtract %v4float %29 0
-               OpStore %gl_Position_1 %30
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 45d50df..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePositionMember_TwoAccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  gl_Position.y = 0.0;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.hlsl
deleted file mode 100644
index b262a94..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {gl_Position};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.msl
deleted file mode 100644
index 8622e3b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.gl_Position=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.spvasm
deleted file mode 100644
index 0a7c17b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.spvasm
+++ /dev/null
@@ -1,56 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %gl_Position_1 %vertex_point_size
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %16 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %17 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpStore %gl_Position %16
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %17
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-         %22 = OpLoad %v4float %gl_Position
-         %23 = OpCompositeConstruct %main_out %22
-               OpReturnValue %23
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %26 = OpFunctionCall %main_out %main_inner
-         %27 = OpCompositeExtract %v4float %26 0
-               OpStore %gl_Position_1 %27
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.wgsl
deleted file mode 100644
index 45b705f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinPosition_StorePosition_PerVertexStructOutOfOrderDecl.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  gl_Position = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.hlsl
deleted file mode 100644
index 97cf434..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-static uint x_2 = 0u;
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  uint x_2_param : SV_VertexID;
-};
-struct tint_symbol_2 {
-  float4 position_1 : SV_Position;
-};
-
-main_out main_inner(uint x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-  const main_out tint_symbol_3 = {position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.msl
deleted file mode 100644
index 0f0882a..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  float4 position_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(uint x_2_param, thread uint* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = x_2_param;
-  main_1();
-  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_2_param [[vertex_id]]) {
-  thread uint tint_symbol_5 = 0u;
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_2_param, &(tint_symbol_5), &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.spvasm
deleted file mode 100644
index bc62fa7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 35
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_2_param_1 %position_1_1 %vertex_point_size
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %position_1_1 "position_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_2 "x_2"
-               OpName %position "position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "position_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn VertexIndex
-               OpDecorate %position_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_2_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%position_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpConstantNull %uint
-        %x_2 = OpVariable %_ptr_Private_uint Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %21 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-  %x_2_param = OpFunctionParameter %uint
-         %25 = OpLabel
-               OpStore %x_2 %x_2_param
-         %26 = OpFunctionCall %void %main_1
-         %27 = OpLoad %v4float %position
-         %28 = OpCompositeConstruct %main_out %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %30 = OpLabel
-         %32 = OpLoad %uint %x_2_param_1
-         %31 = OpFunctionCall %main_out %main_inner %32
-         %33 = OpCompositeExtract %v4float %31 0
-               OpStore %position_1_1 %33
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.wgsl
deleted file mode 100644
index 1c1e5b8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_BuiltinVertexIndex.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> x_2 : u32;
-
-var<private> position : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  position_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] x_2_param : u32) -> main_out {
-  x_2 = x_2_param;
-  main_1();
-  return main_out(position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.hlsl
deleted file mode 100644
index ff4c73d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static int x_1 = 0;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.spvasm
deleted file mode 100644
index 54f15f9..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %4 = OpConstantNull %int
-        %x_1 = OpVariable %_ptr_Private_int Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.wgsl
deleted file mode 100644
index 6526967..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_OppositeSignednessAsWGSL.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_1 : i32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.hlsl
deleted file mode 100644
index 415c810..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.spvasm
deleted file mode 100644
index de87216..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.wgsl
deleted file mode 100644
index 21b73b3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Input_SameSignednessAsWGSL.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.hlsl
deleted file mode 100644
index 542b23f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static int x_1[1] = {14};
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.msl
deleted file mode 100644
index 2dea471..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.spvasm
deleted file mode 100644
index eb3e1f2..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-     %int_14 = OpConstant %int 14
-          %6 = OpConstantComposite %_arr_int_uint_1 %int_14
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %6
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.wgsl
deleted file mode 100644
index 005f56f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_OppositeSignednessAsWGSL.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_1 : array<i32, 1> = array<i32, 1>(14);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.hlsl
deleted file mode 100644
index f8d7e81..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint x_1[1] = {2u};
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.msl
deleted file mode 100644
index 1a7edff..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.spvasm
deleted file mode 100644
index cb40bb0..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-     %uint_2 = OpConstant %uint 2
-          %5 = OpConstantComposite %_arr_uint_uint_1 %uint_2
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.wgsl
deleted file mode 100644
index 1e6a354..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Builtin_Output_Initializer_SameSignednessAsWGSL.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_1 : array<u32, 1> = array<u32, 1>(2u);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.hlsl
deleted file mode 100644
index ef0855d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.msl
deleted file mode 100644
index ecdf927..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float3x2 field0;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.spvasm
deleted file mode 100644
index 64446e5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 0 ColMajor
-               OpMemberDecorate %S 0 MatrixStride 8
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-          %S = OpTypeStruct %mat3v2float
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.wgsl
deleted file mode 100644
index 79b8f48..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ColMajorDecoration_Dropped.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-[[block]]
-struct S {
-  field0 : mat3x2<f32>;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.hlsl
deleted file mode 100644
index 734ada3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer x_1 : register(u9, space3);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.msl
deleted file mode 100644
index fd04641..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  /* 0x0000 */ uint arr[2];
-};
-struct S {
-  /* 0x0000 */ uint field0;
-  /* 0x0004 */ float field1;
-  /* 0x0008 */ tint_array_wrapper field2;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.spvasm
deleted file mode 100644
index 2abc2d9..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-               OpDecorate %x_1 DescriptorSet 3
-               OpDecorate %x_1 Binding 9
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-          %S = OpTypeStruct %uint %float %_arr_uint_uint_2
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_1 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.wgsl
deleted file mode 100644
index c732065..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_DescriptorGroupDecoration_Valid.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-type Arr = [[stride(4)]] array<u32, 2>;
-
-[[block]]
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : Arr;
-};
-
-[[group(3), binding(9)]] var<storage, read_write> x_1 : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.hlsl
deleted file mode 100644
index 340d082..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float x_1 = 0.0f;
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float x_1_1;
-};
-struct tint_symbol {
-  float x_1_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.msl
deleted file mode 100644
index 3003cbb..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float x_1_1;
-};
-struct tint_symbol_1 {
-  float x_1_1 [[depth(any)]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float tint_symbol_4 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.spvasm
deleted file mode 100644
index e3574b5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,48 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_1_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-%_ptr_Output_float = OpTypePointer Output %float
-          %4 = OpConstantNull %float
-    %x_1_1_1 = OpVariable %_ptr_Output_float Output %4
-    %float_0 = OpConstant %float 0
-%_ptr_Private_float = OpTypePointer Private %float
-        %x_1 = OpVariable %_ptr_Private_float Private %float_0
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-   %main_out = OpTypeStruct %float
-         %12 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %12
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-         %17 = OpLoad %float %x_1
-         %18 = OpCompositeConstruct %main_out %17
-               OpReturnValue %18
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %20 = OpLabel
-         %21 = OpFunctionCall %main_out %main_inner
-         %22 = OpCompositeExtract %float %21 0
-               OpStore %x_1_1_1 %22
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.wgsl
deleted file mode 100644
index b1cced5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_FragDepth_Out_Initializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> x_1 : f32 = 0.0;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(frag_depth)]]
-  x_1_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.hlsl
deleted file mode 100644
index 068eed1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static int x_4 = 0;
-static float4 x_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_InstanceID;
-};
-struct tint_symbol_2 {
-  float4 x_1_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = asint(x_4_param);
-  main_1();
-  const main_out tint_symbol_3 = {x_1};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.msl
deleted file mode 100644
index 20da9c1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_1 [[position]];
-};
-
-void main_1(thread int* const tint_symbol_3) {
-  int const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = as_type<int>(x_4_param);
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[instance_id]]) {
-  thread int tint_symbol_6 = 0;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.spvasm
deleted file mode 100644
index 01a0e14..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %x_1_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn InstanceIndex
-               OpDecorate %x_1_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_1_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %15 = OpConstantNull %int
-        %x_4 = OpVariable %_ptr_Private_int Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_1 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %23 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %22 = OpLoad %int %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %23
-  %x_4_param = OpFunctionParameter %uint
-         %27 = OpLabel
-         %28 = OpBitcast %int %x_4_param
-               OpStore %x_4 %28
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %x_1
-         %31 = OpCompositeConstruct %main_out %30
-               OpReturnValue %31
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %33 = OpLabel
-         %35 = OpLoad %uint %x_4_param_1
-         %34 = OpFunctionCall %main_out %main_inner %35
-         %36 = OpCompositeExtract %v4float %34 0
-               OpStore %x_1_1_1 %36
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.wgsl
deleted file mode 100644
index 4d89296..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_OppositeSignedness.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : i32;
-
-var<private> x_1 : vec4<f32>;
-
-fn main_1() {
-  let x_2 : i32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_1_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(instance_index)]] x_4_param : u32) -> main_out {
-  x_4 = bitcast<i32>(x_4_param);
-  main_1();
-  return main_out(x_1);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.hlsl
deleted file mode 100644
index 0d07fb7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static uint x_1 = 0u;
-static float4 x_4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint x_2 = x_1;
-  return;
-}
-
-struct main_out {
-  float4 x_4_1;
-};
-struct tint_symbol_1 {
-  uint x_1_param : SV_InstanceID;
-};
-struct tint_symbol_2 {
-  float4 x_4_1 : SV_Position;
-};
-
-main_out main_inner(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_1_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.msl
deleted file mode 100644
index 5dbfcc1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_4_1;
-};
-struct tint_symbol_1 {
-  float4 x_4_1 [[position]];
-};
-
-void main_1(thread uint* const tint_symbol_3) {
-  uint const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_1_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = x_1_param;
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_4_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_1_param [[instance_id]]) {
-  thread uint tint_symbol_6 = 0u;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_1_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.spvasm
deleted file mode 100644
index 4584546..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_param_1 %x_4_1_1 %vertex_point_size
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_1 "x_1"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn InstanceIndex
-               OpDecorate %x_4_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_4_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_4 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %22 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %22
-  %x_1_param = OpFunctionParameter %uint
-         %26 = OpLabel
-               OpStore %x_1 %x_1_param
-         %27 = OpFunctionCall %void %main_1
-         %28 = OpLoad %v4float %x_4
-         %29 = OpCompositeConstruct %main_out %28
-               OpReturnValue %29
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %31 = OpLabel
-         %33 = OpLoad %uint %x_1_param_1
-         %32 = OpFunctionCall %main_out %main_inner %33
-         %34 = OpCompositeExtract %v4float %32 0
-               OpStore %x_4_1_1 %34
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.wgsl
deleted file mode 100644
index 0258417..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_Input_SameSignedness.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_1 : u32;
-
-var<private> x_4 : vec4<f32>;
-
-fn main_1() {
-  let x_2 : u32 = x_1;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_4_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(instance_index)]] x_1_param : u32) -> main_out {
-  x_1 = x_1_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.hlsl
deleted file mode 100644
index ae94ff8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static int x_1[1] = (int[1])0;
-
-void main_1() {
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = asint(x_1_param);
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.msl
deleted file mode 100644
index d8d0a49..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-
-void main_1() {
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_1) {
-  (*(tint_symbol_1)).arr[0] = as_type<int>(x_1_param);
-  main_1();
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_2 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.spvasm
deleted file mode 100644
index 9d318b1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-         %10 = OpConstantNull %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %10
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-         %15 = OpTypeFunction %void %uint
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %15
-  %x_1_param = OpFunctionParameter %uint
-         %18 = OpLabel
-         %21 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %22 = OpBitcast %int %x_1_param
-               OpStore %21 %22
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %28 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %29 = OpLoad %uint %28
-         %26 = OpFunctionCall %void %main_inner %29
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.wgsl
deleted file mode 100644
index a4ecdbb..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Signed.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-var<private> x_1 : array<i32, 1>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.hlsl
deleted file mode 100644
index e137b4d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.msl
deleted file mode 100644
index a1503ea..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-
-void main_1() {
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_1) {
-  (*(tint_symbol_1)).arr[0] = x_1_param;
-  main_1();
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_2 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.spvasm
deleted file mode 100644
index 8c41c94..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 28
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-          %8 = OpConstantNull %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %8
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %uint
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %uint
-         %16 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %20 %x_1_param
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %23 = OpLabel
-         %26 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %27 = OpLoad %uint %26
-         %24 = OpFunctionCall %void %main_inner %27
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.wgsl
deleted file mode 100644
index 9850594..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_In_Unsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-var<private> x_1 : array<u32, 1>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.hlsl
deleted file mode 100644
index 2414617..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static int x_1[1] = {0};
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {asuint(x_1[0])};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.msl
deleted file mode 100644
index b7398c5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=as_type<uint>((*(tint_symbol_3)).arr[0])};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_4 = {.arr={0}};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.spvasm
deleted file mode 100644
index 378ee26..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-      %int_0 = OpConstant %int 0
-         %10 = OpConstantComposite %_arr_int_uint_1 %int_0
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %10
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-   %main_out = OpTypeStruct %uint
-         %17 = OpTypeFunction %main_out
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %17
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-         %24 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %25 = OpLoad %int %24
-         %22 = OpBitcast %uint %25
-         %26 = OpCompositeConstruct %main_out %22
-               OpReturnValue %26
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %28 = OpLabel
-         %29 = OpFunctionCall %main_out %main_inner
-         %31 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %32 = OpCompositeExtract %uint %29 0
-               OpStore %31 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.wgsl
deleted file mode 100644
index 48a29f6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Signed_Initializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> x_1 : array<i32, 1> = array<i32, 1>(0);
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(bitcast<u32>(x_1[0]));
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.hlsl
deleted file mode 100644
index 979b63d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint x_1[1] = {0u};
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1[0]};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.msl
deleted file mode 100644
index 0b92cd3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_3)).arr[0]};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_4 = {.arr={0u}};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.spvasm
deleted file mode 100644
index a96308e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-     %uint_0 = OpConstant %uint 0
-          %8 = OpConstantComposite %_arr_uint_uint_1 %uint_0
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %8
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %uint
-         %15 = OpTypeFunction %main_out
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %15
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-         %23 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %24 = OpLoad %uint %23
-         %25 = OpCompositeConstruct %main_out %24
-               OpReturnValue %25
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %27 = OpLabel
-         %28 = OpFunctionCall %main_out %main_inner
-         %30 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %31 = OpCompositeExtract %uint %28 0
-               OpStore %30 %31
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.wgsl
deleted file mode 100644
index 1011156..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_BuiltinVar_SampleMask_Out_Unsigned_Initializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> x_1 : array<u32, 1> = array<u32, 1>(0u);
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1[0]);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.hlsl
deleted file mode 100644
index b5d52c8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-struct S {
-  float field0;
-  float field1;
-};
-
-static float x_1[2] = (float[2])0;
-static S x_2 = (S)0;
-
-void main_1() {
-  return;
-}
-
-struct tint_symbol_1 {
-  nointerpolation float x_1_param : TEXCOORD1;
-  nointerpolation float x_1_param_1 : TEXCOORD2;
-  nointerpolation float x_2_param : TEXCOORD5;
-  nointerpolation float x_2_param_1 : TEXCOORD6;
-};
-
-void main_inner(float x_1_param, float x_1_param_1, float x_2_param, float x_2_param_1) {
-  x_1[0] = x_1_param;
-  x_1[1] = x_1_param_1;
-  x_2.field0 = x_2_param;
-  x_2.field1 = x_2_param_1;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param, tint_symbol.x_1_param_1, tint_symbol.x_2_param, tint_symbol.x_2_param_1);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.msl
deleted file mode 100644
index 8c80813..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float field0;
-  float field1;
-};
-struct tint_array_wrapper {
-  float arr[2];
-};
-struct tint_symbol_2 {
-  float x_1_param [[user(locn1)]] [[flat]];
-  float x_1_param_1 [[user(locn2)]] [[flat]];
-  float x_2_param [[user(locn5)]] [[flat]];
-  float x_2_param_1 [[user(locn6)]] [[flat]];
-};
-
-void main_1() {
-  return;
-}
-
-void tint_symbol_inner(float x_1_param, float x_1_param_1, float x_2_param, float x_2_param_1, thread tint_array_wrapper* const tint_symbol_3, thread S* const tint_symbol_4) {
-  (*(tint_symbol_3)).arr[0] = x_1_param;
-  (*(tint_symbol_3)).arr[1] = x_1_param_1;
-  (*(tint_symbol_4)).field0 = x_2_param;
-  (*(tint_symbol_4)).field1 = x_2_param_1;
-  main_1();
-}
-
-fragment void tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  thread S tint_symbol_6 = {};
-  tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, tint_symbol_1.x_2_param, tint_symbol_1.x_2_param_1, &(tint_symbol_5), &(tint_symbol_6));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.spvasm
deleted file mode 100644
index 9916586..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.spvasm
+++ /dev/null
@@ -1,91 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_2 %x_1_param_1_1 %x_2_param_2 %x_2_param_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_2 "x_1_param_2"
-               OpName %x_1_param_1_1 "x_1_param_1_1"
-               OpName %x_2_param_2 "x_2_param_2"
-               OpName %x_2_param_1_1 "x_2_param_1_1"
-               OpName %x_1 "x_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_2_param "x_2_param"
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %main "main"
-               OpDecorate %x_1_param_2 Location 1
-               OpDecorate %x_1_param_2 Flat
-               OpDecorate %x_1_param_1_1 Location 2
-               OpDecorate %x_1_param_1_1 Flat
-               OpDecorate %x_2_param_2 Location 5
-               OpDecorate %x_2_param_2 Flat
-               OpDecorate %x_2_param_1_1 Location 6
-               OpDecorate %x_2_param_1_1 Flat
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-      %float = OpTypeFloat 32
-%_ptr_Input_float = OpTypePointer Input %float
-%x_1_param_2 = OpVariable %_ptr_Input_float Input
-%x_1_param_1_1 = OpVariable %_ptr_Input_float Input
-%x_2_param_2 = OpVariable %_ptr_Input_float Input
-%x_2_param_1_1 = OpVariable %_ptr_Input_float Input
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Private__arr_float_uint_2 = OpTypePointer Private %_arr_float_uint_2
-         %12 = OpConstantNull %_arr_float_uint_2
-        %x_1 = OpVariable %_ptr_Private__arr_float_uint_2 Private %12
-          %S = OpTypeStruct %float %float
-%_ptr_Private_S = OpTypePointer Private %S
-         %16 = OpConstantNull %S
-        %x_2 = OpVariable %_ptr_Private_S Private %16
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-         %21 = OpTypeFunction %void %float %float %float %float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %21
-  %x_1_param = OpFunctionParameter %float
-%x_1_param_1 = OpFunctionParameter %float
-  %x_2_param = OpFunctionParameter %float
-%x_2_param_1 = OpFunctionParameter %float
-         %27 = OpLabel
-         %31 = OpAccessChain %_ptr_Private_float %x_1 %int_0
-               OpStore %31 %x_1_param
-         %33 = OpAccessChain %_ptr_Private_float %x_1 %int_1
-               OpStore %33 %x_1_param_1
-         %35 = OpAccessChain %_ptr_Private_float %x_2 %uint_0
-               OpStore %35 %x_2_param
-         %37 = OpAccessChain %_ptr_Private_float %x_2 %uint_1
-               OpStore %37 %x_2_param_1
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %40 = OpLabel
-         %42 = OpLoad %float %x_1_param_2
-         %43 = OpLoad %float %x_1_param_1_1
-         %44 = OpLoad %float %x_2_param_2
-         %45 = OpLoad %float %x_2_param_1_1
-         %41 = OpFunctionCall %void %main_inner %42 %43 %44 %45
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.wgsl
deleted file mode 100644
index 490af9f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Flat_Fragment_In.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-struct S {
-  field0 : f32;
-  field1 : f32;
-};
-
-var<private> x_1 : array<f32, 2>;
-
-var<private> x_2 : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[location(1), interpolate(flat)]] x_1_param : f32, [[location(2), interpolate(flat)]] x_1_param_1 : f32, [[location(5), interpolate(flat)]] x_2_param : f32, [[location(6), interpolate(flat)]] x_2_param_1 : f32) {
-  x_1[0] = x_1_param;
-  x_1[1] = x_1_param_1;
-  x_2.field0 = x_2_param;
-  x_2.field1 = x_2_param_1;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.hlsl
deleted file mode 100644
index a857a8b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-struct S {
-  float field0;
-  float field1;
-  float field2;
-  float field3;
-  float field4;
-  float field5;
-};
-
-static S x_1 = (S)0;
-
-void main_1() {
-  return;
-}
-
-struct tint_symbol_1 {
-  float x_1_param : TEXCOORD1;
-  linear centroid float x_1_param_1 : TEXCOORD2;
-  linear sample float x_1_param_2 : TEXCOORD3;
-  noperspective float x_1_param_3 : TEXCOORD4;
-  noperspective centroid float x_1_param_4 : TEXCOORD5;
-  noperspective sample float x_1_param_5 : TEXCOORD6;
-};
-
-void main_inner(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5) {
-  x_1.field0 = x_1_param;
-  x_1.field1 = x_1_param_1;
-  x_1.field2 = x_1_param_2;
-  x_1.field3 = x_1_param_3;
-  x_1.field4 = x_1_param_4;
-  x_1.field5 = x_1_param_5;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param, tint_symbol.x_1_param_1, tint_symbol.x_1_param_2, tint_symbol.x_1_param_3, tint_symbol.x_1_param_4, tint_symbol.x_1_param_5);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.msl
deleted file mode 100644
index 092ee02..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float field0;
-  float field1;
-  float field2;
-  float field3;
-  float field4;
-  float field5;
-};
-struct tint_symbol_2 {
-  float x_1_param [[user(locn1)]];
-  float x_1_param_1 [[user(locn2)]] [[centroid_perspective]];
-  float x_1_param_2 [[user(locn3)]] [[sample_perspective]];
-  float x_1_param_3 [[user(locn4)]] [[no_perspective]];
-  float x_1_param_4 [[user(locn5)]] [[centroid_no_perspective]];
-  float x_1_param_5 [[user(locn6)]] [[sample_no_perspective]];
-};
-
-void main_1() {
-  return;
-}
-
-void tint_symbol_inner(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5, thread S* const tint_symbol_3) {
-  (*(tint_symbol_3)).field0 = x_1_param;
-  (*(tint_symbol_3)).field1 = x_1_param_1;
-  (*(tint_symbol_3)).field2 = x_1_param_2;
-  (*(tint_symbol_3)).field3 = x_1_param_3;
-  (*(tint_symbol_3)).field4 = x_1_param_4;
-  (*(tint_symbol_3)).field5 = x_1_param_5;
-  main_1();
-}
-
-fragment void tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread S tint_symbol_4 = {};
-  tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, tint_symbol_1.x_1_param_2, tint_symbol_1.x_1_param_3, tint_symbol_1.x_1_param_4, tint_symbol_1.x_1_param_5, &(tint_symbol_4));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.spvasm
deleted file mode 100644
index 56a3c44..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.spvasm
+++ /dev/null
@@ -1,113 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_6 %x_1_param_1_1 %x_1_param_2_1 %x_1_param_3_1 %x_1_param_4_1 %x_1_param_5_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_6 "x_1_param_6"
-               OpName %x_1_param_1_1 "x_1_param_1_1"
-               OpName %x_1_param_2_1 "x_1_param_2_1"
-               OpName %x_1_param_3_1 "x_1_param_3_1"
-               OpName %x_1_param_4_1 "x_1_param_4_1"
-               OpName %x_1_param_5_1 "x_1_param_5_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpMemberName %S 3 "field3"
-               OpMemberName %S 4 "field4"
-               OpMemberName %S 5 "field5"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1_param_2 "x_1_param_2"
-               OpName %x_1_param_3 "x_1_param_3"
-               OpName %x_1_param_4 "x_1_param_4"
-               OpName %x_1_param_5 "x_1_param_5"
-               OpName %main "main"
-               OpDecorate %x_1_param_6 Location 1
-               OpDecorate %x_1_param_1_1 Location 2
-               OpDecorate %x_1_param_1_1 Centroid
-               OpDecorate %x_1_param_2_1 Location 3
-               OpDecorate %x_1_param_2_1 Sample
-               OpDecorate %x_1_param_3_1 Location 4
-               OpDecorate %x_1_param_3_1 NoPerspective
-               OpDecorate %x_1_param_4_1 Location 5
-               OpDecorate %x_1_param_4_1 NoPerspective
-               OpDecorate %x_1_param_4_1 Centroid
-               OpDecorate %x_1_param_5_1 Location 6
-               OpDecorate %x_1_param_5_1 NoPerspective
-               OpDecorate %x_1_param_5_1 Sample
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpMemberDecorate %S 3 Offset 12
-               OpMemberDecorate %S 4 Offset 16
-               OpMemberDecorate %S 5 Offset 20
-      %float = OpTypeFloat 32
-%_ptr_Input_float = OpTypePointer Input %float
-%x_1_param_6 = OpVariable %_ptr_Input_float Input
-%x_1_param_1_1 = OpVariable %_ptr_Input_float Input
-%x_1_param_2_1 = OpVariable %_ptr_Input_float Input
-%x_1_param_3_1 = OpVariable %_ptr_Input_float Input
-%x_1_param_4_1 = OpVariable %_ptr_Input_float Input
-%x_1_param_5_1 = OpVariable %_ptr_Input_float Input
-          %S = OpTypeStruct %float %float %float %float %float %float
-%_ptr_Private_S = OpTypePointer Private %S
-         %12 = OpConstantNull %S
-        %x_1 = OpVariable %_ptr_Private_S Private %12
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-         %17 = OpTypeFunction %void %float %float %float %float %float %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %17
-  %x_1_param = OpFunctionParameter %float
-%x_1_param_1 = OpFunctionParameter %float
-%x_1_param_2 = OpFunctionParameter %float
-%x_1_param_3 = OpFunctionParameter %float
-%x_1_param_4 = OpFunctionParameter %float
-%x_1_param_5 = OpFunctionParameter %float
-         %25 = OpLabel
-         %29 = OpAccessChain %_ptr_Private_float %x_1 %uint_0
-               OpStore %29 %x_1_param
-         %31 = OpAccessChain %_ptr_Private_float %x_1 %uint_1
-               OpStore %31 %x_1_param_1
-         %33 = OpAccessChain %_ptr_Private_float %x_1 %uint_2
-               OpStore %33 %x_1_param_2
-         %35 = OpAccessChain %_ptr_Private_float %x_1 %uint_3
-               OpStore %35 %x_1_param_3
-         %37 = OpAccessChain %_ptr_Private_float %x_1 %uint_4
-               OpStore %37 %x_1_param_4
-         %39 = OpAccessChain %_ptr_Private_float %x_1 %uint_5
-               OpStore %39 %x_1_param_5
-         %40 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %42 = OpLabel
-         %44 = OpLoad %float %x_1_param_6
-         %45 = OpLoad %float %x_1_param_1_1
-         %46 = OpLoad %float %x_1_param_2_1
-         %47 = OpLoad %float %x_1_param_3_1
-         %48 = OpLoad %float %x_1_param_4_1
-         %49 = OpLoad %float %x_1_param_5_1
-         %43 = OpFunctionCall %void %main_inner %44 %45 %46 %47 %48 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.wgsl
deleted file mode 100644
index 6f69d2f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_In.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-struct S {
-  field0 : f32;
-  field1 : f32;
-  field2 : f32;
-  field3 : f32;
-  field4 : f32;
-  field5 : f32;
-};
-
-var<private> x_1 : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[location(1)]] x_1_param : f32, [[location(2), interpolate(perspective, centroid)]] x_1_param_1 : f32, [[location(3), interpolate(perspective, sample)]] x_1_param_2 : f32, [[location(4), interpolate(linear)]] x_1_param_3 : f32, [[location(5), interpolate(linear, centroid)]] x_1_param_4 : f32, [[location(6), interpolate(linear, sample)]] x_1_param_5 : f32) {
-  x_1.field0 = x_1_param;
-  x_1.field1 = x_1_param_1;
-  x_1.field2 = x_1_param_2;
-  x_1.field3 = x_1_param_3;
-  x_1.field4 = x_1_param_4;
-  x_1.field5 = x_1_param_5;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.hlsl
deleted file mode 100644
index 7fe3df7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-struct S {
-  float field0;
-  float field1;
-  float field2;
-  float field3;
-  float field4;
-  float field5;
-};
-
-static S x_1 = (S)0;
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float x_1_1;
-  float x_1_2;
-  float x_1_3;
-  float x_1_4;
-  float x_1_5;
-  float x_1_6;
-};
-struct tint_symbol {
-  float x_1_1 : SV_Target1;
-  linear centroid float x_1_2 : SV_Target2;
-  linear sample float x_1_3 : SV_Target3;
-  noperspective float x_1_4 : SV_Target4;
-  noperspective centroid float x_1_5 : SV_Target5;
-  noperspective sample float x_1_6 : SV_Target6;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1.field0, x_1.field1, x_1.field2, x_1.field3, x_1.field4, x_1.field5};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_1_2 = inner_result.x_1_2;
-  wrapper_result.x_1_3 = inner_result.x_1_3;
-  wrapper_result.x_1_4 = inner_result.x_1_4;
-  wrapper_result.x_1_5 = inner_result.x_1_5;
-  wrapper_result.x_1_6 = inner_result.x_1_6;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.msl
deleted file mode 100644
index 907819c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.msl
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float field0;
-  float field1;
-  float field2;
-  float field3;
-  float field4;
-  float field5;
-};
-struct main_out {
-  float x_1_1;
-  float x_1_2;
-  float x_1_3;
-  float x_1_4;
-  float x_1_5;
-  float x_1_6;
-};
-struct tint_symbol_1 {
-  float x_1_1 [[color(1)]];
-  float x_1_2 [[color(2)]] [[centroid_perspective]];
-  float x_1_3 [[color(3)]] [[sample_perspective]];
-  float x_1_4 [[color(4)]] [[no_perspective]];
-  float x_1_5 [[color(5)]] [[centroid_no_perspective]];
-  float x_1_6 [[color(6)]] [[sample_no_perspective]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread S* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_3)).field0, .x_1_2=(*(tint_symbol_3)).field1, .x_1_3=(*(tint_symbol_3)).field2, .x_1_4=(*(tint_symbol_3)).field3, .x_1_5=(*(tint_symbol_3)).field4, .x_1_6=(*(tint_symbol_3)).field5};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread S tint_symbol_4 = {};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_1_2 = inner_result.x_1_2;
-  wrapper_result.x_1_3 = inner_result.x_1_3;
-  wrapper_result.x_1_4 = inner_result.x_1_4;
-  wrapper_result.x_1_5 = inner_result.x_1_5;
-  wrapper_result.x_1_6 = inner_result.x_1_6;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.spvasm
deleted file mode 100644
index ef276d9..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1 %x_1_2_1 %x_1_3_1 %x_1_4_1 %x_1_5_1 %x_1_6_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1_2_1 "x_1_2_1"
-               OpName %x_1_3_1 "x_1_3_1"
-               OpName %x_1_4_1 "x_1_4_1"
-               OpName %x_1_5_1 "x_1_5_1"
-               OpName %x_1_6_1 "x_1_6_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpMemberName %S 3 "field3"
-               OpMemberName %S 4 "field4"
-               OpMemberName %S 5 "field5"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpMemberName %main_out 1 "x_1_2"
-               OpMemberName %main_out 2 "x_1_3"
-               OpMemberName %main_out 3 "x_1_4"
-               OpMemberName %main_out 4 "x_1_5"
-               OpMemberName %main_out 5 "x_1_6"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_1_1_1 Location 1
-               OpDecorate %x_1_2_1 Location 2
-               OpDecorate %x_1_2_1 Centroid
-               OpDecorate %x_1_3_1 Location 3
-               OpDecorate %x_1_3_1 Sample
-               OpDecorate %x_1_4_1 Location 4
-               OpDecorate %x_1_4_1 NoPerspective
-               OpDecorate %x_1_5_1 Location 5
-               OpDecorate %x_1_5_1 NoPerspective
-               OpDecorate %x_1_5_1 Centroid
-               OpDecorate %x_1_6_1 Location 6
-               OpDecorate %x_1_6_1 NoPerspective
-               OpDecorate %x_1_6_1 Sample
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpMemberDecorate %S 3 Offset 12
-               OpMemberDecorate %S 4 Offset 16
-               OpMemberDecorate %S 5 Offset 20
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 4
-               OpMemberDecorate %main_out 2 Offset 8
-               OpMemberDecorate %main_out 3 Offset 12
-               OpMemberDecorate %main_out 4 Offset 16
-               OpMemberDecorate %main_out 5 Offset 20
-      %float = OpTypeFloat 32
-%_ptr_Output_float = OpTypePointer Output %float
-          %4 = OpConstantNull %float
-    %x_1_1_1 = OpVariable %_ptr_Output_float Output %4
-    %x_1_2_1 = OpVariable %_ptr_Output_float Output %4
-    %x_1_3_1 = OpVariable %_ptr_Output_float Output %4
-    %x_1_4_1 = OpVariable %_ptr_Output_float Output %4
-    %x_1_5_1 = OpVariable %_ptr_Output_float Output %4
-    %x_1_6_1 = OpVariable %_ptr_Output_float Output %4
-          %S = OpTypeStruct %float %float %float %float %float %float
-%_ptr_Private_S = OpTypePointer Private %S
-         %13 = OpConstantNull %S
-        %x_1 = OpVariable %_ptr_Private_S Private %13
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-   %main_out = OpTypeStruct %float %float %float %float %float %float
-         %18 = OpTypeFunction %main_out
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %18
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-         %26 = OpAccessChain %_ptr_Private_float %x_1 %uint_0
-         %27 = OpLoad %float %26
-         %29 = OpAccessChain %_ptr_Private_float %x_1 %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Private_float %x_1 %uint_2
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Private_float %x_1 %uint_3
-         %36 = OpLoad %float %35
-         %38 = OpAccessChain %_ptr_Private_float %x_1 %uint_4
-         %39 = OpLoad %float %38
-         %41 = OpAccessChain %_ptr_Private_float %x_1 %uint_5
-         %42 = OpLoad %float %41
-         %43 = OpCompositeConstruct %main_out %27 %30 %33 %36 %39 %42
-               OpReturnValue %43
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %45 = OpLabel
-         %46 = OpFunctionCall %main_out %main_inner
-         %47 = OpCompositeExtract %float %46 0
-               OpStore %x_1_1_1 %47
-         %48 = OpCompositeExtract %float %46 1
-               OpStore %x_1_2_1 %48
-         %49 = OpCompositeExtract %float %46 2
-               OpStore %x_1_3_1 %49
-         %50 = OpCompositeExtract %float %46 3
-               OpStore %x_1_4_1 %50
-         %51 = OpCompositeExtract %float %46 4
-               OpStore %x_1_5_1 %51
-         %52 = OpCompositeExtract %float %46 5
-               OpStore %x_1_6_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.wgsl
deleted file mode 100644
index 985d7db..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Flatten_Interpolation_Floating_Fragment_Out.spvasm.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-struct S {
-  field0 : f32;
-  field1 : f32;
-  field2 : f32;
-  field3 : f32;
-  field4 : f32;
-  field5 : f32;
-};
-
-var<private> x_1 : S;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[location(1)]]
-  x_1_1 : f32;
-  [[location(2), interpolate(perspective, centroid)]]
-  x_1_2 : f32;
-  [[location(3), interpolate(perspective, sample)]]
-  x_1_3 : f32;
-  [[location(4), interpolate(linear)]]
-  x_1_4 : f32;
-  [[location(5), interpolate(linear, centroid)]]
-  x_1_5 : f32;
-  [[location(6), interpolate(linear, sample)]]
-  x_1_6 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1.field0, x_1.field1, x_1.field2, x_1.field3, x_1.field4, x_1.field5);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.hlsl
deleted file mode 100644
index 44e09c5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static uint x_1 = 0u;
-static uint x_2 = 0u;
-static uint x_3 = 0u;
-static uint x_4 = 0u;
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  uint x_2_1;
-  uint x_4_1;
-};
-struct tint_symbol_1 {
-  uint x_1_param : TEXCOORD0;
-  uint x_3_param : TEXCOORD30;
-};
-struct tint_symbol_2 {
-  uint x_2_1 : SV_Target0;
-  uint x_4_1 : SV_Target6;
-};
-
-main_out main_inner(uint x_1_param, uint x_3_param) {
-  x_1 = x_1_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_2, x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_1_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.msl
deleted file mode 100644
index c4db905..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  uint x_2_1;
-  uint x_4_1;
-};
-struct tint_symbol_2 {
-  uint x_1_param [[user(locn0)]];
-  uint x_3_param [[user(locn30)]];
-};
-struct tint_symbol_3 {
-  uint x_2_1 [[color(0)]];
-  uint x_4_1 [[color(6)]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(uint x_1_param, uint x_3_param, thread uint* const tint_symbol_5, thread uint* const tint_symbol_6, thread uint* const tint_symbol_7, thread uint* const tint_symbol_8) {
-  *(tint_symbol_5) = x_1_param;
-  *(tint_symbol_6) = x_3_param;
-  main_1();
-  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_7), .x_4_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread uint tint_symbol_9 = 0u;
-  thread uint tint_symbol_10 = 0u;
-  thread uint tint_symbol_11 = 0u;
-  thread uint tint_symbol_12 = 0u;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_3_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.spvasm
deleted file mode 100644
index f395152..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.spvasm
+++ /dev/null
@@ -1,77 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 35
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1 %x_3_param_1 %x_2_1_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpMemberName %main_out 1 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 Location 0
-               OpDecorate %x_1_param_1 Flat
-               OpDecorate %x_3_param_1 Location 30
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_2_1_1 Location 0
-               OpDecorate %x_4_1_1 Location 6
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 4
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-%x_3_param_1 = OpVariable %_ptr_Input_uint Input
-%_ptr_Output_uint = OpTypePointer Output %uint
-          %7 = OpConstantNull %uint
-    %x_2_1_1 = OpVariable %_ptr_Output_uint Output %7
-    %x_4_1_1 = OpVariable %_ptr_Output_uint Output %7
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %7
-        %x_2 = OpVariable %_ptr_Private_uint Private %7
-        %x_3 = OpVariable %_ptr_Private_uint Private %7
-        %x_4 = OpVariable %_ptr_Private_uint Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-   %main_out = OpTypeStruct %uint %uint
-         %18 = OpTypeFunction %main_out %uint %uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %18
-  %x_1_param = OpFunctionParameter %uint
-  %x_3_param = OpFunctionParameter %uint
-         %23 = OpLabel
-               OpStore %x_1 %x_1_param
-               OpStore %x_3 %x_3_param
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %uint %x_2
-         %26 = OpLoad %uint %x_4
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %29 = OpLabel
-         %31 = OpLoad %uint %x_1_param_1
-         %32 = OpLoad %uint %x_3_param_1
-         %30 = OpFunctionCall %main_out %main_inner %31 %32
-         %33 = OpCompositeExtract %uint %30 0
-               OpStore %x_2_1_1 %33
-         %34 = OpCompositeExtract %uint %30 1
-               OpStore %x_4_1_1 %34
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.wgsl
deleted file mode 100644
index 59ed023..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_IOLocations.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> x_1 : u32;
-
-var<private> x_2 : u32;
-
-var<private> x_3 : u32;
-
-var<private> x_4 : u32;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_2_1 : u32;
-  [[location(6)]]
-  x_4_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main([[location(0)]] x_1_param : u32, [[location(30)]] x_3_param : u32) -> main_out {
-  x_1 = x_1_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_2, x_4);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.hlsl
deleted file mode 100644
index 0a3ff65..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-static uint x_1 = 0u;
-static uint2 x_2 = uint2(0u, 0u);
-static int x_3 = 0;
-static int2 x_4 = int2(0, 0);
-static float x_5 = 0.0f;
-static float2 x_6 = float2(0.0f, 0.0f);
-static float4 x_8 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_8_1;
-};
-struct tint_symbol_1 {
-  uint x_1_param : TEXCOORD1;
-  uint2 x_2_param : TEXCOORD2;
-  int x_3_param : TEXCOORD3;
-  int2 x_4_param : TEXCOORD4;
-  nointerpolation float x_5_param : TEXCOORD5;
-  nointerpolation float2 x_6_param : TEXCOORD6;
-};
-struct tint_symbol_2 {
-  float4 x_8_1 : SV_Position;
-};
-
-main_out main_inner(uint x_1_param, uint2 x_2_param, int x_3_param, int2 x_4_param, float x_5_param, float2 x_6_param) {
-  x_1 = x_1_param;
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  x_4 = x_4_param;
-  x_5 = x_5_param;
-  x_6 = x_6_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_8};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_1_param, tint_symbol.x_2_param, tint_symbol.x_3_param, tint_symbol.x_4_param, tint_symbol.x_5_param, tint_symbol.x_6_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_8_1 = inner_result.x_8_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.msl
deleted file mode 100644
index 50e9d5f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_8_1;
-};
-struct tint_symbol_2 {
-  uint x_1_param [[attribute(1)]];
-  uint2 x_2_param [[attribute(2)]];
-  int x_3_param [[attribute(3)]];
-  int2 x_4_param [[attribute(4)]];
-  float x_5_param [[attribute(5)]] [[flat]];
-  float2 x_6_param [[attribute(6)]] [[flat]];
-};
-struct tint_symbol_3 {
-  float4 x_8_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(uint x_1_param, uint2 x_2_param, int x_3_param, int2 x_4_param, float x_5_param, float2 x_6_param, thread uint* const tint_symbol_5, thread uint2* const tint_symbol_6, thread int* const tint_symbol_7, thread int2* const tint_symbol_8, thread float* const tint_symbol_9, thread float2* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_5) = x_1_param;
-  *(tint_symbol_6) = x_2_param;
-  *(tint_symbol_7) = x_3_param;
-  *(tint_symbol_8) = x_4_param;
-  *(tint_symbol_9) = x_5_param;
-  *(tint_symbol_10) = x_6_param;
-  main_1();
-  main_out const tint_symbol_4 = {.x_8_1=*(tint_symbol_11)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread uint tint_symbol_12 = 0u;
-  thread uint2 tint_symbol_13 = 0u;
-  thread int tint_symbol_14 = 0;
-  thread int2 tint_symbol_15 = 0;
-  thread float tint_symbol_16 = 0.0f;
-  thread float2 tint_symbol_17 = 0.0f;
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_2_param, tint_symbol_1.x_3_param, tint_symbol_1.x_4_param, tint_symbol_1.x_5_param, tint_symbol_1.x_6_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_8_1 = inner_result.x_8_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.spvasm
deleted file mode 100644
index a248252..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.spvasm
+++ /dev/null
@@ -1,131 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 73
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_param_1 %x_2_param_1 %x_3_param_1 %x_4_param_1 %x_5_param_1 %x_6_param_1 %x_8_1_1 %vertex_point_size
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_5_param_1 "x_5_param_1"
-               OpName %x_6_param_1 "x_6_param_1"
-               OpName %x_8_1_1 "x_8_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_8_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %x_4_param "x_4_param"
-               OpName %x_5_param "x_5_param"
-               OpName %x_6_param "x_6_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 Location 1
-               OpDecorate %x_2_param_1 Location 2
-               OpDecorate %x_3_param_1 Location 3
-               OpDecorate %x_4_param_1 Location 4
-               OpDecorate %x_5_param_1 Location 5
-               OpDecorate %x_5_param_1 Flat
-               OpDecorate %x_6_param_1 Location 6
-               OpDecorate %x_6_param_1 Flat
-               OpDecorate %x_8_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-     %v2uint = OpTypeVector %uint 2
-%_ptr_Input_v2uint = OpTypePointer Input %v2uint
-%x_2_param_1 = OpVariable %_ptr_Input_v2uint Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-      %v2int = OpTypeVector %int 2
-%_ptr_Input_v2int = OpTypePointer Input %v2int
-%x_4_param_1 = OpVariable %_ptr_Input_v2int Input
-      %float = OpTypeFloat 32
-%_ptr_Input_float = OpTypePointer Input %float
-%x_5_param_1 = OpVariable %_ptr_Input_float Input
-    %v2float = OpTypeVector %float 2
-%_ptr_Input_v2float = OpTypePointer Input %v2float
-%x_6_param_1 = OpVariable %_ptr_Input_v2float Input
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-         %22 = OpConstantNull %v4float
-    %x_8_1_1 = OpVariable %_ptr_Output_v4float Output %22
-%_ptr_Output_float = OpTypePointer Output %float
-         %25 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %25
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %28 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %28
-%_ptr_Private_v2uint = OpTypePointer Private %v2uint
-         %31 = OpConstantNull %v2uint
-        %x_2 = OpVariable %_ptr_Private_v2uint Private %31
-%_ptr_Private_int = OpTypePointer Private %int
-         %34 = OpConstantNull %int
-        %x_3 = OpVariable %_ptr_Private_int Private %34
-%_ptr_Private_v2int = OpTypePointer Private %v2int
-         %37 = OpConstantNull %v2int
-        %x_4 = OpVariable %_ptr_Private_v2int Private %37
-%_ptr_Private_float = OpTypePointer Private %float
-        %x_5 = OpVariable %_ptr_Private_float Private %25
-%_ptr_Private_v2float = OpTypePointer Private %v2float
-         %42 = OpConstantNull %v2float
-        %x_6 = OpVariable %_ptr_Private_v2float Private %42
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_8 = OpVariable %_ptr_Private_v4float Private %22
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out %uint %v2uint %int %v2int %float %v2float
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-  %x_1_param = OpFunctionParameter %uint
-  %x_2_param = OpFunctionParameter %v2uint
-  %x_3_param = OpFunctionParameter %int
-  %x_4_param = OpFunctionParameter %v2int
-  %x_5_param = OpFunctionParameter %float
-  %x_6_param = OpFunctionParameter %v2float
-         %58 = OpLabel
-               OpStore %x_1 %x_1_param
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-               OpStore %x_4 %x_4_param
-               OpStore %x_5 %x_5_param
-               OpStore %x_6 %x_6_param
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_8
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-         %63 = OpLabel
-         %65 = OpLoad %uint %x_1_param_1
-         %66 = OpLoad %v2uint %x_2_param_1
-         %67 = OpLoad %int %x_3_param_1
-         %68 = OpLoad %v2int %x_4_param_1
-         %69 = OpLoad %float %x_5_param_1
-         %70 = OpLoad %v2float %x_6_param_1
-         %64 = OpFunctionCall %main_out %main_inner %65 %66 %67 %68 %69 %70
-         %71 = OpCompositeExtract %v4float %64 0
-               OpStore %x_8_1_1 %71
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.wgsl
deleted file mode 100644
index 7122217..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_In.spvasm.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-var<private> x_1 : u32;
-
-var<private> x_2 : vec2<u32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : vec2<i32>;
-
-var<private> x_5 : f32;
-
-var<private> x_6 : vec2<f32>;
-
-var<private> x_8 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_8_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(1)]] x_1_param : u32, [[location(2)]] x_2_param : vec2<u32>, [[location(3)]] x_3_param : i32, [[location(4)]] x_4_param : vec2<i32>, [[location(5), interpolate(flat)]] x_5_param : f32, [[location(6), interpolate(flat)]] x_6_param : vec2<f32>) -> main_out {
-  x_1 = x_1_param;
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  x_4 = x_4_param;
-  x_5 = x_5_param;
-  x_6 = x_6_param;
-  main_1();
-  return main_out(x_8);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.hlsl
deleted file mode 100644
index 7f7e005..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static uint x_1 = 0u;
-static uint2 x_2 = uint2(0u, 0u);
-static int x_3 = 0;
-static int2 x_4 = int2(0, 0);
-static float x_5 = 0.0f;
-static float2 x_6 = float2(0.0f, 0.0f);
-static float4 x_8 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-  uint2 x_2_1;
-  int x_3_1;
-  int2 x_4_1;
-  float x_5_1;
-  float2 x_6_1;
-  float4 x_8_1;
-};
-struct tint_symbol {
-  uint x_1_1 : TEXCOORD1;
-  uint2 x_2_1 : TEXCOORD2;
-  int x_3_1 : TEXCOORD3;
-  int2 x_4_1 : TEXCOORD4;
-  nointerpolation float x_5_1 : TEXCOORD5;
-  nointerpolation float2 x_6_1 : TEXCOORD6;
-  float4 x_8_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1, x_2, x_3, x_4, x_5, x_6, x_8};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.x_5_1 = inner_result.x_5_1;
-  wrapper_result.x_6_1 = inner_result.x_6_1;
-  wrapper_result.x_8_1 = inner_result.x_8_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.msl
deleted file mode 100644
index f0325d4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  uint x_1_1;
-  uint2 x_2_1;
-  int x_3_1;
-  int2 x_4_1;
-  float x_5_1;
-  float2 x_6_1;
-  float4 x_8_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[user(locn1)]];
-  uint2 x_2_1 [[user(locn2)]];
-  int x_3_1 [[user(locn3)]];
-  int2 x_4_1 [[user(locn4)]];
-  float x_5_1 [[user(locn5)]] [[flat]];
-  float2 x_6_1 [[user(locn6)]] [[flat]];
-  float4 x_8_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread uint* const tint_symbol_3, thread uint2* const tint_symbol_4, thread int* const tint_symbol_5, thread int2* const tint_symbol_6, thread float* const tint_symbol_7, thread float2* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_3), .x_2_1=*(tint_symbol_4), .x_3_1=*(tint_symbol_5), .x_4_1=*(tint_symbol_6), .x_5_1=*(tint_symbol_7), .x_6_1=*(tint_symbol_8), .x_8_1=*(tint_symbol_9)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread uint tint_symbol_10 = 0u;
-  thread uint2 tint_symbol_11 = 0u;
-  thread int tint_symbol_12 = 0;
-  thread int2 tint_symbol_13 = 0;
-  thread float tint_symbol_14 = 0.0f;
-  thread float2 tint_symbol_15 = 0.0f;
-  thread float4 tint_symbol_16 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_10), &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.x_5_1 = inner_result.x_5_1;
-  wrapper_result.x_6_1 = inner_result.x_6_1;
-  wrapper_result.x_8_1 = inner_result.x_8_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.spvasm
deleted file mode 100644
index 7fe0a34..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_1_1 %x_2_1_1 %x_3_1_1 %x_4_1_1 %x_5_1_1 %x_6_1_1 %x_8_1_1 %vertex_point_size
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %x_3_1_1 "x_3_1_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_5_1_1 "x_5_1_1"
-               OpName %x_6_1_1 "x_6_1_1"
-               OpName %x_8_1_1 "x_8_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpMemberName %main_out 1 "x_2_1"
-               OpMemberName %main_out 2 "x_3_1"
-               OpMemberName %main_out 3 "x_4_1"
-               OpMemberName %main_out 4 "x_5_1"
-               OpMemberName %main_out 5 "x_6_1"
-               OpMemberName %main_out 6 "x_8_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_1_1_1 Location 1
-               OpDecorate %x_1_1_1 Flat
-               OpDecorate %x_2_1_1 Location 2
-               OpDecorate %x_2_1_1 Flat
-               OpDecorate %x_3_1_1 Location 3
-               OpDecorate %x_3_1_1 Flat
-               OpDecorate %x_4_1_1 Location 4
-               OpDecorate %x_4_1_1 Flat
-               OpDecorate %x_5_1_1 Location 5
-               OpDecorate %x_5_1_1 Flat
-               OpDecorate %x_6_1_1 Location 6
-               OpDecorate %x_6_1_1 Flat
-               OpDecorate %x_8_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 8
-               OpMemberDecorate %main_out 2 Offset 16
-               OpMemberDecorate %main_out 3 Offset 24
-               OpMemberDecorate %main_out 4 Offset 32
-               OpMemberDecorate %main_out 5 Offset 40
-               OpMemberDecorate %main_out 6 Offset 48
-       %uint = OpTypeInt 32 0
-%_ptr_Output_uint = OpTypePointer Output %uint
-          %4 = OpConstantNull %uint
-    %x_1_1_1 = OpVariable %_ptr_Output_uint Output %4
-     %v2uint = OpTypeVector %uint 2
-%_ptr_Output_v2uint = OpTypePointer Output %v2uint
-          %8 = OpConstantNull %v2uint
-    %x_2_1_1 = OpVariable %_ptr_Output_v2uint Output %8
-        %int = OpTypeInt 32 1
-%_ptr_Output_int = OpTypePointer Output %int
-         %12 = OpConstantNull %int
-    %x_3_1_1 = OpVariable %_ptr_Output_int Output %12
-      %v2int = OpTypeVector %int 2
-%_ptr_Output_v2int = OpTypePointer Output %v2int
-         %16 = OpConstantNull %v2int
-    %x_4_1_1 = OpVariable %_ptr_Output_v2int Output %16
-      %float = OpTypeFloat 32
-%_ptr_Output_float = OpTypePointer Output %float
-         %20 = OpConstantNull %float
-    %x_5_1_1 = OpVariable %_ptr_Output_float Output %20
-    %v2float = OpTypeVector %float 2
-%_ptr_Output_v2float = OpTypePointer Output %v2float
-         %24 = OpConstantNull %v2float
-    %x_6_1_1 = OpVariable %_ptr_Output_v2float Output %24
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-         %28 = OpConstantNull %v4float
-    %x_8_1_1 = OpVariable %_ptr_Output_v4float Output %28
-%vertex_point_size = OpVariable %_ptr_Output_float Output %20
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-%_ptr_Private_v2uint = OpTypePointer Private %v2uint
-        %x_2 = OpVariable %_ptr_Private_v2uint Private %8
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %12
-%_ptr_Private_v2int = OpTypePointer Private %v2int
-        %x_4 = OpVariable %_ptr_Private_v2int Private %16
-%_ptr_Private_float = OpTypePointer Private %float
-        %x_5 = OpVariable %_ptr_Private_float Private %20
-%_ptr_Private_v2float = OpTypePointer Private %v2float
-        %x_6 = OpVariable %_ptr_Private_v2float Private %24
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_8 = OpVariable %_ptr_Private_v4float Private %28
-       %void = OpTypeVoid
-         %44 = OpTypeFunction %void
-   %main_out = OpTypeStruct %uint %v2uint %int %v2int %float %v2float %v4float
-         %48 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %44
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %48
-         %51 = OpLabel
-         %52 = OpFunctionCall %void %main_1
-         %53 = OpLoad %uint %x_1
-         %54 = OpLoad %v2uint %x_2
-         %55 = OpLoad %int %x_3
-         %56 = OpLoad %v2int %x_4
-         %57 = OpLoad %float %x_5
-         %58 = OpLoad %v2float %x_6
-         %59 = OpLoad %v4float %x_8
-         %60 = OpCompositeConstruct %main_out %53 %54 %55 %56 %57 %58 %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %44
-         %62 = OpLabel
-         %63 = OpFunctionCall %main_out %main_inner
-         %64 = OpCompositeExtract %uint %63 0
-               OpStore %x_1_1_1 %64
-         %65 = OpCompositeExtract %v2uint %63 1
-               OpStore %x_2_1_1 %65
-         %66 = OpCompositeExtract %int %63 2
-               OpStore %x_3_1_1 %66
-         %67 = OpCompositeExtract %v2int %63 3
-               OpStore %x_4_1_1 %67
-         %68 = OpCompositeExtract %float %63 4
-               OpStore %x_5_1_1 %68
-         %69 = OpCompositeExtract %v2float %63 5
-               OpStore %x_6_1_1 %69
-         %70 = OpCompositeExtract %v4float %63 6
-               OpStore %x_8_1_1 %70
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.wgsl
deleted file mode 100644
index 06f66ac..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Flat_Vertex_Output.spvasm.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-var<private> x_1 : u32;
-
-var<private> x_2 : vec2<u32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : vec2<i32>;
-
-var<private> x_5 : f32;
-
-var<private> x_6 : vec2<f32>;
-
-var<private> x_8 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[location(1)]]
-  x_1_1 : u32;
-  [[location(2)]]
-  x_2_1 : vec2<u32>;
-  [[location(3)]]
-  x_3_1 : i32;
-  [[location(4)]]
-  x_4_1 : vec2<i32>;
-  [[location(5), interpolate(flat)]]
-  x_5_1 : f32;
-  [[location(6), interpolate(flat)]]
-  x_6_1 : vec2<f32>;
-  [[builtin(position)]]
-  x_8_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1, x_2, x_3, x_4, x_5, x_6, x_8);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.hlsl
deleted file mode 100644
index 03c9fd5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float x_1 = 0.0f;
-static float x_2 = 0.0f;
-static float x_3 = 0.0f;
-static float x_4 = 0.0f;
-static float x_5 = 0.0f;
-static float x_6 = 0.0f;
-
-void main_1() {
-  return;
-}
-
-struct tint_symbol_1 {
-  float x_1_param : TEXCOORD1;
-  linear centroid float x_2_param : TEXCOORD2;
-  linear sample float x_3_param : TEXCOORD3;
-  noperspective float x_4_param : TEXCOORD4;
-  noperspective centroid float x_5_param : TEXCOORD5;
-  noperspective sample float x_6_param : TEXCOORD6;
-};
-
-void main_inner(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param) {
-  x_1 = x_1_param;
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  x_4 = x_4_param;
-  x_5 = x_5_param;
-  x_6 = x_6_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param, tint_symbol.x_2_param, tint_symbol.x_3_param, tint_symbol.x_4_param, tint_symbol.x_5_param, tint_symbol.x_6_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.msl
deleted file mode 100644
index fcb0848..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_symbol_2 {
-  float x_1_param [[user(locn1)]];
-  float x_2_param [[user(locn2)]] [[centroid_perspective]];
-  float x_3_param [[user(locn3)]] [[sample_perspective]];
-  float x_4_param [[user(locn4)]] [[no_perspective]];
-  float x_5_param [[user(locn5)]] [[centroid_no_perspective]];
-  float x_6_param [[user(locn6)]] [[sample_no_perspective]];
-};
-
-void main_1() {
-  return;
-}
-
-void tint_symbol_inner(float x_1_param, float x_2_param, float x_3_param, float x_4_param, float x_5_param, float x_6_param, thread float* const tint_symbol_3, thread float* const tint_symbol_4, thread float* const tint_symbol_5, thread float* const tint_symbol_6, thread float* const tint_symbol_7, thread float* const tint_symbol_8) {
-  *(tint_symbol_3) = x_1_param;
-  *(tint_symbol_4) = x_2_param;
-  *(tint_symbol_5) = x_3_param;
-  *(tint_symbol_6) = x_4_param;
-  *(tint_symbol_7) = x_5_param;
-  *(tint_symbol_8) = x_6_param;
-  main_1();
-}
-
-fragment void tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float tint_symbol_9 = 0.0f;
-  thread float tint_symbol_10 = 0.0f;
-  thread float tint_symbol_11 = 0.0f;
-  thread float tint_symbol_12 = 0.0f;
-  thread float tint_symbol_13 = 0.0f;
-  thread float tint_symbol_14 = 0.0f;
-  tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_2_param, tint_symbol_1.x_3_param, tint_symbol_1.x_4_param, tint_symbol_1.x_5_param, tint_symbol_1.x_6_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.spvasm
deleted file mode 100644
index 5308c15..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1 %x_2_param_1 %x_3_param_1 %x_4_param_1 %x_5_param_1 %x_6_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_5_param_1 "x_5_param_1"
-               OpName %x_6_param_1 "x_6_param_1"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %x_4_param "x_4_param"
-               OpName %x_5_param "x_5_param"
-               OpName %x_6_param "x_6_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 Location 1
-               OpDecorate %x_2_param_1 Location 2
-               OpDecorate %x_2_param_1 Centroid
-               OpDecorate %x_3_param_1 Location 3
-               OpDecorate %x_3_param_1 Sample
-               OpDecorate %x_4_param_1 Location 4
-               OpDecorate %x_4_param_1 NoPerspective
-               OpDecorate %x_5_param_1 Location 5
-               OpDecorate %x_5_param_1 NoPerspective
-               OpDecorate %x_5_param_1 Centroid
-               OpDecorate %x_6_param_1 Location 6
-               OpDecorate %x_6_param_1 NoPerspective
-               OpDecorate %x_6_param_1 Sample
-      %float = OpTypeFloat 32
-%_ptr_Input_float = OpTypePointer Input %float
-%x_1_param_1 = OpVariable %_ptr_Input_float Input
-%x_2_param_1 = OpVariable %_ptr_Input_float Input
-%x_3_param_1 = OpVariable %_ptr_Input_float Input
-%x_4_param_1 = OpVariable %_ptr_Input_float Input
-%x_5_param_1 = OpVariable %_ptr_Input_float Input
-%x_6_param_1 = OpVariable %_ptr_Input_float Input
-%_ptr_Private_float = OpTypePointer Private %float
-         %11 = OpConstantNull %float
-        %x_1 = OpVariable %_ptr_Private_float Private %11
-        %x_2 = OpVariable %_ptr_Private_float Private %11
-        %x_3 = OpVariable %_ptr_Private_float Private %11
-        %x_4 = OpVariable %_ptr_Private_float Private %11
-        %x_5 = OpVariable %_ptr_Private_float Private %11
-        %x_6 = OpVariable %_ptr_Private_float Private %11
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-         %21 = OpTypeFunction %void %float %float %float %float %float %float
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %21
-  %x_1_param = OpFunctionParameter %float
-  %x_2_param = OpFunctionParameter %float
-  %x_3_param = OpFunctionParameter %float
-  %x_4_param = OpFunctionParameter %float
-  %x_5_param = OpFunctionParameter %float
-  %x_6_param = OpFunctionParameter %float
-         %29 = OpLabel
-               OpStore %x_1 %x_1_param
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-               OpStore %x_4 %x_4_param
-               OpStore %x_5 %x_5_param
-               OpStore %x_6 %x_6_param
-         %30 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %32 = OpLabel
-         %34 = OpLoad %float %x_1_param_1
-         %35 = OpLoad %float %x_2_param_1
-         %36 = OpLoad %float %x_3_param_1
-         %37 = OpLoad %float %x_4_param_1
-         %38 = OpLoad %float %x_5_param_1
-         %39 = OpLoad %float %x_6_param_1
-         %33 = OpFunctionCall %void %main_inner %34 %35 %36 %37 %38 %39
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.wgsl
deleted file mode 100644
index aad5228..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_In.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> x_1 : f32;
-
-var<private> x_2 : f32;
-
-var<private> x_3 : f32;
-
-var<private> x_4 : f32;
-
-var<private> x_5 : f32;
-
-var<private> x_6 : f32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[location(1)]] x_1_param : f32, [[location(2), interpolate(perspective, centroid)]] x_2_param : f32, [[location(3), interpolate(perspective, sample)]] x_3_param : f32, [[location(4), interpolate(linear)]] x_4_param : f32, [[location(5), interpolate(linear, centroid)]] x_5_param : f32, [[location(6), interpolate(linear, sample)]] x_6_param : f32) {
-  x_1 = x_1_param;
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  x_4 = x_4_param;
-  x_5 = x_5_param;
-  x_6 = x_6_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.hlsl
deleted file mode 100644
index 3f44590..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-static float x_1 = 0.0f;
-static float x_2 = 0.0f;
-static float x_3 = 0.0f;
-static float x_4 = 0.0f;
-static float x_5 = 0.0f;
-static float x_6 = 0.0f;
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float x_1_1;
-  float x_2_1;
-  float x_3_1;
-  float x_4_1;
-  float x_5_1;
-  float x_6_1;
-};
-struct tint_symbol {
-  float x_1_1 : SV_Target1;
-  linear centroid float x_2_1 : SV_Target2;
-  linear sample float x_3_1 : SV_Target3;
-  noperspective float x_4_1 : SV_Target4;
-  noperspective centroid float x_5_1 : SV_Target5;
-  noperspective sample float x_6_1 : SV_Target6;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1, x_2, x_3, x_4, x_5, x_6};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.x_5_1 = inner_result.x_5_1;
-  wrapper_result.x_6_1 = inner_result.x_6_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.msl
deleted file mode 100644
index 8a29123..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float x_1_1;
-  float x_2_1;
-  float x_3_1;
-  float x_4_1;
-  float x_5_1;
-  float x_6_1;
-};
-struct tint_symbol_1 {
-  float x_1_1 [[color(1)]];
-  float x_2_1 [[color(2)]] [[centroid_perspective]];
-  float x_3_1 [[color(3)]] [[sample_perspective]];
-  float x_4_1 [[color(4)]] [[no_perspective]];
-  float x_5_1 [[color(5)]] [[centroid_no_perspective]];
-  float x_6_1 [[color(6)]] [[sample_no_perspective]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float* const tint_symbol_3, thread float* const tint_symbol_4, thread float* const tint_symbol_5, thread float* const tint_symbol_6, thread float* const tint_symbol_7, thread float* const tint_symbol_8) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_3), .x_2_1=*(tint_symbol_4), .x_3_1=*(tint_symbol_5), .x_4_1=*(tint_symbol_6), .x_5_1=*(tint_symbol_7), .x_6_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float tint_symbol_9 = 0.0f;
-  thread float tint_symbol_10 = 0.0f;
-  thread float tint_symbol_11 = 0.0f;
-  thread float tint_symbol_12 = 0.0f;
-  thread float tint_symbol_13 = 0.0f;
-  thread float tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.x_5_1 = inner_result.x_5_1;
-  wrapper_result.x_6_1 = inner_result.x_6_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.spvasm
deleted file mode 100644
index a2b4430..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.spvasm
+++ /dev/null
@@ -1,104 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 42
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1 %x_2_1_1 %x_3_1_1 %x_4_1_1 %x_5_1_1 %x_6_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %x_3_1_1 "x_3_1_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_5_1_1 "x_5_1_1"
-               OpName %x_6_1_1 "x_6_1_1"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpMemberName %main_out 1 "x_2_1"
-               OpMemberName %main_out 2 "x_3_1"
-               OpMemberName %main_out 3 "x_4_1"
-               OpMemberName %main_out 4 "x_5_1"
-               OpMemberName %main_out 5 "x_6_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_1_1_1 Location 1
-               OpDecorate %x_2_1_1 Location 2
-               OpDecorate %x_2_1_1 Centroid
-               OpDecorate %x_3_1_1 Location 3
-               OpDecorate %x_3_1_1 Sample
-               OpDecorate %x_4_1_1 Location 4
-               OpDecorate %x_4_1_1 NoPerspective
-               OpDecorate %x_5_1_1 Location 5
-               OpDecorate %x_5_1_1 NoPerspective
-               OpDecorate %x_5_1_1 Centroid
-               OpDecorate %x_6_1_1 Location 6
-               OpDecorate %x_6_1_1 NoPerspective
-               OpDecorate %x_6_1_1 Sample
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 4
-               OpMemberDecorate %main_out 2 Offset 8
-               OpMemberDecorate %main_out 3 Offset 12
-               OpMemberDecorate %main_out 4 Offset 16
-               OpMemberDecorate %main_out 5 Offset 20
-      %float = OpTypeFloat 32
-%_ptr_Output_float = OpTypePointer Output %float
-          %4 = OpConstantNull %float
-    %x_1_1_1 = OpVariable %_ptr_Output_float Output %4
-    %x_2_1_1 = OpVariable %_ptr_Output_float Output %4
-    %x_3_1_1 = OpVariable %_ptr_Output_float Output %4
-    %x_4_1_1 = OpVariable %_ptr_Output_float Output %4
-    %x_5_1_1 = OpVariable %_ptr_Output_float Output %4
-    %x_6_1_1 = OpVariable %_ptr_Output_float Output %4
-%_ptr_Private_float = OpTypePointer Private %float
-        %x_1 = OpVariable %_ptr_Private_float Private %4
-        %x_2 = OpVariable %_ptr_Private_float Private %4
-        %x_3 = OpVariable %_ptr_Private_float Private %4
-        %x_4 = OpVariable %_ptr_Private_float Private %4
-        %x_5 = OpVariable %_ptr_Private_float Private %4
-        %x_6 = OpVariable %_ptr_Private_float Private %4
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %float %float %float %float %float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %float %x_1
-         %27 = OpLoad %float %x_2
-         %28 = OpLoad %float %x_3
-         %29 = OpLoad %float %x_4
-         %30 = OpLoad %float %x_5
-         %31 = OpLoad %float %x_6
-         %32 = OpCompositeConstruct %main_out %26 %27 %28 %29 %30 %31
-               OpReturnValue %32
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %34 = OpLabel
-         %35 = OpFunctionCall %main_out %main_inner
-         %36 = OpCompositeExtract %float %35 0
-               OpStore %x_1_1_1 %36
-         %37 = OpCompositeExtract %float %35 1
-               OpStore %x_2_1_1 %37
-         %38 = OpCompositeExtract %float %35 2
-               OpStore %x_3_1_1 %38
-         %39 = OpCompositeExtract %float %35 3
-               OpStore %x_4_1_1 %39
-         %40 = OpCompositeExtract %float %35 4
-               OpStore %x_5_1_1 %40
-         %41 = OpCompositeExtract %float %35 5
-               OpStore %x_6_1_1 %41
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.wgsl
deleted file mode 100644
index 3229335..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_EntryPointWrapping_Interpolation_Floating_Fragment_Out.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-var<private> x_1 : f32;
-
-var<private> x_2 : f32;
-
-var<private> x_3 : f32;
-
-var<private> x_4 : f32;
-
-var<private> x_5 : f32;
-
-var<private> x_6 : f32;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[location(1)]]
-  x_1_1 : f32;
-  [[location(2), interpolate(perspective, centroid)]]
-  x_2_1 : f32;
-  [[location(3), interpolate(perspective, sample)]]
-  x_3_1 : f32;
-  [[location(4), interpolate(linear)]]
-  x_4_1 : f32;
-  [[location(5), interpolate(linear, centroid)]]
-  x_5_1 : f32;
-  [[location(6), interpolate(linear, sample)]]
-  x_6_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1, x_2, x_3, x_4, x_5, x_6);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.hlsl
deleted file mode 100644
index 407c8bd..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-struct Communicators {
-  float alice;
-  float4 bob;
-};
-
-static Communicators x_1 = (Communicators)0;
-static Communicators x_3 = (Communicators)0;
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-  float x_3_1;
-  float4 x_3_2;
-};
-struct tint_symbol_1 {
-  float x_1_param : TEXCOORD9;
-  float4 x_1_param_1 : TEXCOORD11;
-};
-struct tint_symbol_2 {
-  float x_3_1 : TEXCOORD9;
-  float4 x_3_2 : TEXCOORD11;
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner(float x_1_param, float4 x_1_param_1) {
-  x_1.alice = x_1_param;
-  x_1.bob = x_1_param_1;
-  main_1();
-  const main_out tint_symbol_3 = {x_2, x_3.alice, x_3.bob};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_1_param, tint_symbol.x_1_param_1);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  wrapper_result.x_3_2 = inner_result.x_3_2;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.msl
deleted file mode 100644
index 6bfb232..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct Communicators {
-  float alice;
-  float4 bob;
-};
-struct main_out {
-  float4 x_2_1;
-  float x_3_1;
-  float4 x_3_2;
-};
-struct tint_symbol_2 {
-  float x_1_param [[attribute(9)]];
-  float4 x_1_param_1 [[attribute(11)]];
-};
-struct tint_symbol_3 {
-  float x_3_1 [[user(locn9)]];
-  float4 x_3_2 [[user(locn11)]];
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(float x_1_param, float4 x_1_param_1, thread Communicators* const tint_symbol_5, thread float4* const tint_symbol_6, thread Communicators* const tint_symbol_7) {
-  (*(tint_symbol_5)).alice = x_1_param;
-  (*(tint_symbol_5)).bob = x_1_param_1;
-  main_1();
-  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_6), .x_3_1=(*(tint_symbol_7)).alice, .x_3_2=(*(tint_symbol_7)).bob};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread Communicators tint_symbol_8 = {};
-  thread float4 tint_symbol_9 = 0.0f;
-  thread Communicators tint_symbol_10 = {};
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, &(tint_symbol_8), &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  wrapper_result.x_3_2 = inner_result.x_3_2;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.spvasm
deleted file mode 100644
index ae11421..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_param_2 %x_1_param_1_1 %x_2_1_1 %x_3_1_1 %x_3_2_1 %vertex_point_size
-               OpName %x_1_param_2 "x_1_param_2"
-               OpName %x_1_param_1_1 "x_1_param_1_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %x_3_1_1 "x_3_1_1"
-               OpName %x_3_2_1 "x_3_2_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %Communicators "Communicators"
-               OpMemberName %Communicators 0 "alice"
-               OpMemberName %Communicators 1 "bob"
-               OpName %x_1 "x_1"
-               OpName %x_3 "x_3"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpMemberName %main_out 1 "x_3_1"
-               OpMemberName %main_out 2 "x_3_2"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %main "main"
-               OpDecorate %x_1_param_2 Location 9
-               OpDecorate %x_1_param_1_1 Location 11
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %x_3_1_1 Location 9
-               OpDecorate %x_3_2_1 Location 11
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %Communicators 0 Offset 0
-               OpMemberDecorate %Communicators 1 Offset 16
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-               OpMemberDecorate %main_out 2 Offset 32
-      %float = OpTypeFloat 32
-%_ptr_Input_float = OpTypePointer Input %float
-%x_1_param_2 = OpVariable %_ptr_Input_float Input
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_1_param_1_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %9 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %9
-%_ptr_Output_float = OpTypePointer Output %float
-         %12 = OpConstantNull %float
-    %x_3_1_1 = OpVariable %_ptr_Output_float Output %12
-    %x_3_2_1 = OpVariable %_ptr_Output_v4float Output %9
-%vertex_point_size = OpVariable %_ptr_Output_float Output %12
-%Communicators = OpTypeStruct %float %v4float
-%_ptr_Private_Communicators = OpTypePointer Private %Communicators
-         %18 = OpConstantNull %Communicators
-        %x_1 = OpVariable %_ptr_Private_Communicators Private %18
-        %x_3 = OpVariable %_ptr_Private_Communicators Private %18
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %9
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float %float %v4float
-         %26 = OpTypeFunction %main_out %float %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %26
-  %x_1_param = OpFunctionParameter %float
-%x_1_param_1 = OpFunctionParameter %v4float
-         %31 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %x_1 %uint_0
-               OpStore %35 %x_1_param
-         %37 = OpAccessChain %_ptr_Private_v4float %x_1 %uint_1
-               OpStore %37 %x_1_param_1
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_2
-         %40 = OpAccessChain %_ptr_Private_float %x_3 %uint_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Private_v4float %x_3 %uint_1
-         %43 = OpLoad %v4float %42
-         %44 = OpCompositeConstruct %main_out %39 %41 %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %46 = OpLabel
-         %48 = OpLoad %float %x_1_param_2
-         %49 = OpLoad %v4float %x_1_param_1_1
-         %47 = OpFunctionCall %main_out %main_inner %48 %49
-         %50 = OpCompositeExtract %v4float %47 0
-               OpStore %x_2_1_1 %50
-         %51 = OpCompositeExtract %float %47 1
-               OpStore %x_3_1_1 %51
-         %52 = OpCompositeExtract %v4float %47 2
-               OpStore %x_3_2_1 %52
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.wgsl
deleted file mode 100644
index 67fb380..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_FlattenStruct_LocOnMembers.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-struct Communicators {
-  alice : f32;
-  bob : vec4<f32>;
-};
-
-var<private> x_1 : Communicators;
-
-var<private> x_3 : Communicators;
-
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-  [[location(9)]]
-  x_3_1 : f32;
-  [[location(11)]]
-  x_3_2 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(9)]] x_1_param : f32, [[location(11)]] x_1_param_1 : vec4<f32>) -> main_out {
-  x_1.alice = x_1_param;
-  x_1.bob = x_1_param_1;
-  main_1();
-  return main_out(x_2, x_3.alice, x_3.bob);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.hlsl
deleted file mode 100644
index 415c810..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.spvasm
deleted file mode 100644
index de87216..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.wgsl
deleted file mode 100644
index 21b73b3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InputVarsConvertedToPrivate.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.hlsl
deleted file mode 100644
index 9ae2da5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float x_1[3] = (float[3])0;
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float x_1_param : TEXCOORD4;
-  float x_1_param_1 : TEXCOORD5;
-  float x_1_param_2 : TEXCOORD6;
-};
-struct tint_symbol_2 {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner(float x_1_param, float x_1_param_1, float x_1_param_2) {
-  x_1[0] = x_1_param;
-  x_1[1] = x_1_param_1;
-  x_1[2] = x_1_param_2;
-  main_1();
-  const main_out tint_symbol_3 = {x_2};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_1_param, tint_symbol.x_1_param_1, tint_symbol.x_1_param_2);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.msl
deleted file mode 100644
index 6a3cce0..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[3];
-};
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_2 {
-  float x_1_param [[attribute(4)]];
-  float x_1_param_1 [[attribute(5)]];
-  float x_1_param_2 [[attribute(6)]];
-};
-struct tint_symbol_3 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(float x_1_param, float x_1_param_1, float x_1_param_2, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  (*(tint_symbol_5)).arr[0] = x_1_param;
-  (*(tint_symbol_5)).arr[1] = x_1_param_1;
-  (*(tint_symbol_5)).arr[2] = x_1_param_2;
-  main_1();
-  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread tint_array_wrapper tint_symbol_7 = {};
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, tint_symbol_1.x_1_param_2, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.spvasm
deleted file mode 100644
index ba49208..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,91 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_param_3 %x_1_param_1_1 %x_1_param_2_1 %x_2_1_1 %vertex_point_size
-               OpName %x_1_param_3 "x_1_param_3"
-               OpName %x_1_param_1_1 "x_1_param_1_1"
-               OpName %x_1_param_2_1 "x_1_param_2_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1_param_2 "x_1_param_2"
-               OpName %main "main"
-               OpDecorate %x_1_param_3 Location 4
-               OpDecorate %x_1_param_1_1 Location 5
-               OpDecorate %x_1_param_2_1 Location 6
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-%_ptr_Input_float = OpTypePointer Input %float
-%x_1_param_3 = OpVariable %_ptr_Input_float Input
-%x_1_param_1_1 = OpVariable %_ptr_Input_float Input
-%x_1_param_2_1 = OpVariable %_ptr_Input_float Input
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %9 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %9
-%_ptr_Output_float = OpTypePointer Output %float
-         %12 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %12
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Private__arr_float_uint_3 = OpTypePointer Private %_arr_float_uint_3
-         %18 = OpConstantNull %_arr_float_uint_3
-        %x_1 = OpVariable %_ptr_Private__arr_float_uint_3 Private %18
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %9
-       %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %25 = OpTypeFunction %main_out %float %float %float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %21
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %25
-  %x_1_param = OpFunctionParameter %float
-%x_1_param_1 = OpFunctionParameter %float
-%x_1_param_2 = OpFunctionParameter %float
-         %31 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %x_1 %int_0
-               OpStore %35 %x_1_param
-         %37 = OpAccessChain %_ptr_Private_float %x_1 %int_1
-               OpStore %37 %x_1_param_1
-         %39 = OpAccessChain %_ptr_Private_float %x_1 %int_2
-               OpStore %39 %x_1_param_2
-         %40 = OpFunctionCall %void %main_1
-         %41 = OpLoad %v4float %x_2
-         %42 = OpCompositeConstruct %main_out %41
-               OpReturnValue %42
-               OpFunctionEnd
-       %main = OpFunction %void None %21
-         %44 = OpLabel
-         %46 = OpLoad %float %x_1_param_3
-         %47 = OpLoad %float %x_1_param_1_1
-         %48 = OpLoad %float %x_1_param_2_1
-         %45 = OpFunctionCall %main_out %main_inner %46 %47 %48
-         %49 = OpCompositeExtract %v4float %45 0
-               OpStore %x_2_1_1 %49
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.wgsl
deleted file mode 100644
index 70c14aa..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenArray_OneLevel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> x_1 : array<f32, 3>;
-
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(4)]] x_1_param : f32, [[location(5)]] x_1_param_1 : f32, [[location(6)]] x_1_param_2 : f32) -> main_out {
-  x_1[0] = x_1_param;
-  x_1[1] = x_1_param_1;
-  x_1[2] = x_1_param_2;
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.hlsl
deleted file mode 100644
index 4c25874..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float2x4 x_1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_param : TEXCOORD9;
-  float4 x_1_param_1 : TEXCOORD10;
-};
-struct tint_symbol_2 {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner(float4 x_1_param, float4 x_1_param_1) {
-  x_1[0] = x_1_param;
-  x_1[1] = x_1_param_1;
-  main_1();
-  const main_out tint_symbol_3 = {x_2};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_1_param, tint_symbol.x_1_param_1);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.msl
deleted file mode 100644
index 3dee922..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_2 {
-  float4 x_1_param [[attribute(9)]];
-  float4 x_1_param_1 [[attribute(10)]];
-};
-struct tint_symbol_3 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_1_param, float4 x_1_param_1, thread float2x4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  (*(tint_symbol_5))[0] = x_1_param;
-  (*(tint_symbol_5))[1] = x_1_param_1;
-  main_1();
-  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float2x4 tint_symbol_7 = float2x4(0.0f);
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.spvasm
deleted file mode 100644
index 8caff85..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,78 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_param_2 %x_1_param_1_1 %x_2_1_1 %vertex_point_size
-               OpName %x_1_param_2 "x_1_param_2"
-               OpName %x_1_param_1_1 "x_1_param_1_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %main "main"
-               OpDecorate %x_1_param_2 Location 9
-               OpDecorate %x_1_param_1_1 Location 10
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_1_param_2 = OpVariable %_ptr_Input_v4float Input
-%x_1_param_1_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%mat2v4float = OpTypeMatrix %v4float 2
-%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
-         %15 = OpConstantNull %mat2v4float
-        %x_1 = OpVariable %_ptr_Private_mat2v4float Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %22 = OpTypeFunction %main_out %v4float %v4float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %22
-  %x_1_param = OpFunctionParameter %v4float
-%x_1_param_1 = OpFunctionParameter %v4float
-         %27 = OpLabel
-         %30 = OpAccessChain %_ptr_Private_v4float %x_1 %int_0
-               OpStore %30 %x_1_param
-         %32 = OpAccessChain %_ptr_Private_v4float %x_1 %int_1
-               OpStore %32 %x_1_param_1
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %x_2
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %37 = OpLabel
-         %39 = OpLoad %v4float %x_1_param_2
-         %40 = OpLoad %v4float %x_1_param_1_1
-         %38 = OpFunctionCall %main_out %main_inner %39 %40
-         %41 = OpCompositeExtract %v4float %38 0
-               OpStore %x_2_1_1 %41
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.wgsl
deleted file mode 100644
index d101097..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenMatrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_1 : mat2x4<f32>;
-
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(9)]] x_1_param : vec4<f32>, [[location(10)]] x_1_param_1 : vec4<f32>) -> main_out {
-  x_1[0] = x_1_param;
-  x_1[1] = x_1_param_1;
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.hlsl
deleted file mode 100644
index ad1ad2b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float2x4 x_1[2] = (float2x4[2])0;
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_param : TEXCOORD7;
-  float4 x_1_param_1 : TEXCOORD8;
-  float4 x_1_param_2 : TEXCOORD9;
-  float4 x_1_param_3 : TEXCOORD10;
-};
-struct tint_symbol_2 {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner(float4 x_1_param, float4 x_1_param_1, float4 x_1_param_2, float4 x_1_param_3) {
-  x_1[0][0] = x_1_param;
-  x_1[0][1] = x_1_param_1;
-  x_1[1][0] = x_1_param_2;
-  x_1[1][1] = x_1_param_3;
-  main_1();
-  const main_out tint_symbol_3 = {x_2};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_1_param, tint_symbol.x_1_param_1, tint_symbol.x_1_param_2, tint_symbol.x_1_param_3);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.msl
deleted file mode 100644
index 21e8520..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.msl
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float2x4 arr[2];
-};
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_2 {
-  float4 x_1_param [[attribute(7)]];
-  float4 x_1_param_1 [[attribute(8)]];
-  float4 x_1_param_2 [[attribute(9)]];
-  float4 x_1_param_3 [[attribute(10)]];
-};
-struct tint_symbol_3 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_1_param, float4 x_1_param_1, float4 x_1_param_2, float4 x_1_param_3, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  (*(tint_symbol_5)).arr[0][0] = x_1_param;
-  (*(tint_symbol_5)).arr[0][1] = x_1_param_1;
-  (*(tint_symbol_5)).arr[1][0] = x_1_param_2;
-  (*(tint_symbol_5)).arr[1][1] = x_1_param_3;
-  main_1();
-  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread tint_array_wrapper tint_symbol_7 = {};
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, tint_symbol_1.x_1_param_2, tint_symbol_1.x_1_param_3, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.spvasm
deleted file mode 100644
index 2374315..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.spvasm
+++ /dev/null
@@ -1,98 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_param_4 %x_1_param_1_1 %x_1_param_2_1 %x_1_param_3_1 %x_2_1_1 %vertex_point_size
-               OpName %x_1_param_4 "x_1_param_4"
-               OpName %x_1_param_1_1 "x_1_param_1_1"
-               OpName %x_1_param_2_1 "x_1_param_2_1"
-               OpName %x_1_param_3_1 "x_1_param_3_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1_param_2 "x_1_param_2"
-               OpName %x_1_param_3 "x_1_param_3"
-               OpName %main "main"
-               OpDecorate %x_1_param_4 Location 7
-               OpDecorate %x_1_param_1_1 Location 8
-               OpDecorate %x_1_param_2_1 Location 9
-               OpDecorate %x_1_param_3_1 Location 10
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpDecorate %_arr_mat2v4float_uint_2 ArrayStride 32
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_1_param_4 = OpVariable %_ptr_Input_v4float Input
-%x_1_param_1_1 = OpVariable %_ptr_Input_v4float Input
-%x_1_param_2_1 = OpVariable %_ptr_Input_v4float Input
-%x_1_param_3_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-         %10 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %10
-%_ptr_Output_float = OpTypePointer Output %float
-         %13 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %13
-%mat2v4float = OpTypeMatrix %v4float 2
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_mat2v4float_uint_2 = OpTypeArray %mat2v4float %uint_2
-%_ptr_Private__arr_mat2v4float_uint_2 = OpTypePointer Private %_arr_mat2v4float_uint_2
-         %20 = OpConstantNull %_arr_mat2v4float_uint_2
-        %x_1 = OpVariable %_ptr_Private__arr_mat2v4float_uint_2 Private %20
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %10
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %27 = OpTypeFunction %main_out %v4float %v4float %v4float %v4float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %27
-  %x_1_param = OpFunctionParameter %v4float
-%x_1_param_1 = OpFunctionParameter %v4float
-%x_1_param_2 = OpFunctionParameter %v4float
-%x_1_param_3 = OpFunctionParameter %v4float
-         %34 = OpLabel
-         %37 = OpAccessChain %_ptr_Private_v4float %x_1 %int_0 %int_0
-               OpStore %37 %x_1_param
-         %39 = OpAccessChain %_ptr_Private_v4float %x_1 %int_0 %int_1
-               OpStore %39 %x_1_param_1
-         %40 = OpAccessChain %_ptr_Private_v4float %x_1 %int_1 %int_0
-               OpStore %40 %x_1_param_2
-         %41 = OpAccessChain %_ptr_Private_v4float %x_1 %int_1 %int_1
-               OpStore %41 %x_1_param_3
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_2
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %46 = OpLabel
-         %48 = OpLoad %v4float %x_1_param_4
-         %49 = OpLoad %v4float %x_1_param_1_1
-         %50 = OpLoad %v4float %x_1_param_2_1
-         %51 = OpLoad %v4float %x_1_param_3_1
-         %47 = OpFunctionCall %main_out %main_inner %48 %49 %50 %51
-         %52 = OpCompositeExtract %v4float %47 0
-               OpStore %x_2_1_1 %52
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.wgsl
deleted file mode 100644
index d6d08ca..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenNested.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> x_1 : array<mat2x4<f32>, 2>;
-
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(7)]] x_1_param : vec4<f32>, [[location(8)]] x_1_param_1 : vec4<f32>, [[location(9)]] x_1_param_2 : vec4<f32>, [[location(10)]] x_1_param_3 : vec4<f32>) -> main_out {
-  x_1[0][0] = x_1_param;
-  x_1[0][1] = x_1_param_1;
-  x_1[1][0] = x_1_param_2;
-  x_1[1][1] = x_1_param_3;
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.hlsl
deleted file mode 100644
index 0cf6df9..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-struct Communicators {
-  float alice;
-  float4 bob;
-};
-
-static Communicators x_1 = (Communicators)0;
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float x_1_param : TEXCOORD9;
-  float4 x_1_param_1 : TEXCOORD10;
-};
-struct tint_symbol_2 {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner(float x_1_param, float4 x_1_param_1) {
-  x_1.alice = x_1_param;
-  x_1.bob = x_1_param_1;
-  main_1();
-  const main_out tint_symbol_3 = {x_2};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_1_param, tint_symbol.x_1_param_1);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.msl
deleted file mode 100644
index 79a8f95..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct Communicators {
-  float alice;
-  float4 bob;
-};
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_2 {
-  float x_1_param [[attribute(9)]];
-  float4 x_1_param_1 [[attribute(10)]];
-};
-struct tint_symbol_3 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(float x_1_param, float4 x_1_param_1, thread Communicators* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  (*(tint_symbol_5)).alice = x_1_param;
-  (*(tint_symbol_5)).bob = x_1_param_1;
-  main_1();
-  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread Communicators tint_symbol_7 = {};
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.spvasm
deleted file mode 100644
index 386b02c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_param_2 %x_1_param_1_1 %x_2_1_1 %vertex_point_size
-               OpName %x_1_param_2 "x_1_param_2"
-               OpName %x_1_param_1_1 "x_1_param_1_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %Communicators "Communicators"
-               OpMemberName %Communicators 0 "alice"
-               OpMemberName %Communicators 1 "bob"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %main "main"
-               OpDecorate %x_1_param_2 Location 9
-               OpDecorate %x_1_param_1_1 Location 10
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %Communicators 0 Offset 0
-               OpMemberDecorate %Communicators 1 Offset 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-%_ptr_Input_float = OpTypePointer Input %float
-%x_1_param_2 = OpVariable %_ptr_Input_float Input
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_1_param_1_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %9 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %9
-%_ptr_Output_float = OpTypePointer Output %float
-         %12 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %12
-%Communicators = OpTypeStruct %float %v4float
-%_ptr_Private_Communicators = OpTypePointer Private %Communicators
-         %16 = OpConstantNull %Communicators
-        %x_1 = OpVariable %_ptr_Private_Communicators Private %16
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %9
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %23 = OpTypeFunction %main_out %float %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %23
-  %x_1_param = OpFunctionParameter %float
-%x_1_param_1 = OpFunctionParameter %v4float
-         %28 = OpLabel
-         %32 = OpAccessChain %_ptr_Private_float %x_1 %uint_0
-               OpStore %32 %x_1_param
-         %34 = OpAccessChain %_ptr_Private_v4float %x_1 %uint_1
-               OpStore %34 %x_1_param_1
-         %35 = OpFunctionCall %void %main_1
-         %36 = OpLoad %v4float %x_2
-         %37 = OpCompositeConstruct %main_out %36
-               OpReturnValue %37
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %39 = OpLabel
-         %41 = OpLoad %float %x_1_param_2
-         %42 = OpLoad %v4float %x_1_param_1_1
-         %40 = OpFunctionCall %main_out %main_inner %41 %42
-         %43 = OpCompositeExtract %v4float %40 0
-               OpStore %x_2_1_1 %43
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.wgsl
deleted file mode 100644
index 01cb741..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Input_FlattenStruct_LocOnVariable.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-struct Communicators {
-  alice : f32;
-  bob : vec4<f32>;
-};
-
-var<private> x_1 : Communicators;
-
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(9)]] x_1_param : f32, [[location(10)]] x_1_param_1 : vec4<f32>) -> main_out {
-  x_1.alice = x_1_param;
-  x_1.bob = x_1_param_1;
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 38a928f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static int x_4 = 0;
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_InstanceID;
-};
-struct tint_symbol_2 {
-  float4 position_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = asint(x_4_param);
-  main_1();
-  const main_out tint_symbol_3 = {position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.msl
deleted file mode 100644
index 2266a63..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  float4 position_1 [[position]];
-};
-
-void main_1(thread int* const tint_symbol_3) {
-  int const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = as_type<int>(x_4_param);
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[instance_id]]) {
-  thread int tint_symbol_6 = 0;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index 7c2dc75..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %position_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %position_1_1 "position_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %position "position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "position_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn InstanceIndex
-               OpDecorate %position_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%position_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %15 = OpConstantNull %int
-        %x_4 = OpVariable %_ptr_Private_int Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %23 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %22 = OpLoad %int %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %23
-  %x_4_param = OpFunctionParameter %uint
-         %27 = OpLabel
-         %28 = OpBitcast %int %x_4_param
-               OpStore %x_4 %28
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %position
-         %31 = OpCompositeConstruct %main_out %30
-               OpReturnValue %31
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %33 = OpLabel
-         %35 = OpLoad %uint %x_4_param_1
-         %34 = OpFunctionCall %main_out %main_inner %35
-         %36 = OpCompositeExtract %v4float %34 0
-               OpStore %position_1_1 %36
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 53c8743..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : i32;
-
-var<private> position : vec4<f32>;
-
-fn main_1() {
-  let x_2 : i32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  position_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(instance_index)]] x_4_param : u32) -> main_out {
-  x_4 = bitcast<i32>(x_4_param);
-  main_1();
-  return main_out(position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index 38a928f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static int x_4 = 0;
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_InstanceID;
-};
-struct tint_symbol_2 {
-  float4 position_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = asint(x_4_param);
-  main_1();
-  const main_out tint_symbol_3 = {position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.msl
deleted file mode 100644
index 2266a63..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  float4 position_1 [[position]];
-};
-
-void main_1(thread int* const tint_symbol_3) {
-  int const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = as_type<int>(x_4_param);
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[instance_id]]) {
-  thread int tint_symbol_6 = 0;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index 7c2dc75..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %position_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %position_1_1 "position_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %position "position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "position_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn InstanceIndex
-               OpDecorate %position_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%position_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %15 = OpConstantNull %int
-        %x_4 = OpVariable %_ptr_Private_int Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %23 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %22 = OpLoad %int %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %23
-  %x_4_param = OpFunctionParameter %uint
-         %27 = OpLabel
-         %28 = OpBitcast %int %x_4_param
-               OpStore %x_4 %28
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %position
-         %31 = OpCompositeConstruct %main_out %30
-               OpReturnValue %31
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %33 = OpLabel
-         %35 = OpLoad %uint %x_4_param_1
-         %34 = OpFunctionCall %main_out %main_inner %35
-         %36 = OpCompositeExtract %v4float %34 0
-               OpStore %position_1_1 %36
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index cfcf7b3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> x_4 : i32;
-
-var<private> position : vec4<f32>;
-
-fn main_1() {
-  let x_14 : ptr<private, i32> = &(x_4);
-  let x_2 : i32 = *(x_14);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  position_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(instance_index)]] x_4_param : u32) -> main_out {
-  x_4 = bitcast<i32>(x_4_param);
-  main_1();
-  return main_out(position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.hlsl
deleted file mode 100644
index 38a928f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static int x_4 = 0;
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_InstanceID;
-};
-struct tint_symbol_2 {
-  float4 position_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = asint(x_4_param);
-  main_1();
-  const main_out tint_symbol_3 = {position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.msl
deleted file mode 100644
index 2266a63..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  float4 position_1 [[position]];
-};
-
-void main_1(thread int* const tint_symbol_3) {
-  int const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = as_type<int>(x_4_param);
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[instance_id]]) {
-  thread int tint_symbol_6 = 0;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.spvasm
deleted file mode 100644
index 7c2dc75..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %position_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %position_1_1 "position_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %position "position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "position_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn InstanceIndex
-               OpDecorate %position_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%position_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %15 = OpConstantNull %int
-        %x_4 = OpVariable %_ptr_Private_int Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %23 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %22 = OpLoad %int %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %23
-  %x_4_param = OpFunctionParameter %uint
-         %27 = OpLabel
-         %28 = OpBitcast %int %x_4_param
-               OpStore %x_4 %28
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %position
-         %31 = OpCompositeConstruct %main_out %30
-               OpReturnValue %31
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %33 = OpLabel
-         %35 = OpLoad %uint %x_4_param_1
-         %34 = OpFunctionCall %main_out %main_inner %35
-         %36 = OpCompositeExtract %v4float %34 0
-               OpStore %position_1_1 %36
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 53c8743..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_I32_Load_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : i32;
-
-var<private> position : vec4<f32>;
-
-fn main_1() {
-  let x_2 : i32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  position_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(instance_index)]] x_4_param : u32) -> main_out {
-  x_4 = bitcast<i32>(x_4_param);
-  main_1();
-  return main_out(position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index c41df17..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static uint x_4 = 0u;
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_InstanceID;
-};
-struct tint_symbol_2 {
-  float4 position_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = x_4_param;
-  main_1();
-  const main_out tint_symbol_3 = {position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.msl
deleted file mode 100644
index 5391d30..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  float4 position_1 [[position]];
-};
-
-void main_1(thread uint* const tint_symbol_3) {
-  uint const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = x_4_param;
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[instance_id]]) {
-  thread uint tint_symbol_6 = 0u;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index cf8a771..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %position_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %position_1_1 "position_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %position "position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "position_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn InstanceIndex
-               OpDecorate %position_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%position_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpConstantNull %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %22 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %uint %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %22
-  %x_4_param = OpFunctionParameter %uint
-         %26 = OpLabel
-               OpStore %x_4 %x_4_param
-         %27 = OpFunctionCall %void %main_1
-         %28 = OpLoad %v4float %position
-         %29 = OpCompositeConstruct %main_out %28
-               OpReturnValue %29
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %31 = OpLabel
-         %33 = OpLoad %uint %x_4_param_1
-         %32 = OpFunctionCall %main_out %main_inner %33
-         %34 = OpCompositeExtract %v4float %32 0
-               OpStore %position_1_1 %34
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 213cedf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : u32;
-
-var<private> position : vec4<f32>;
-
-fn main_1() {
-  let x_2 : u32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  position_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(instance_index)]] x_4_param : u32) -> main_out {
-  x_4 = x_4_param;
-  main_1();
-  return main_out(position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index c41df17..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static uint x_4 = 0u;
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_InstanceID;
-};
-struct tint_symbol_2 {
-  float4 position_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = x_4_param;
-  main_1();
-  const main_out tint_symbol_3 = {position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.msl
deleted file mode 100644
index 5391d30..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  float4 position_1 [[position]];
-};
-
-void main_1(thread uint* const tint_symbol_3) {
-  uint const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = x_4_param;
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[instance_id]]) {
-  thread uint tint_symbol_6 = 0u;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index cf8a771..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %position_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %position_1_1 "position_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %position "position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "position_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn InstanceIndex
-               OpDecorate %position_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%position_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpConstantNull %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %22 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %uint %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %22
-  %x_4_param = OpFunctionParameter %uint
-         %26 = OpLabel
-               OpStore %x_4 %x_4_param
-         %27 = OpFunctionCall %void %main_1
-         %28 = OpLoad %v4float %position
-         %29 = OpCompositeConstruct %main_out %28
-               OpReturnValue %29
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %31 = OpLabel
-         %33 = OpLoad %uint %x_4_param_1
-         %32 = OpFunctionCall %main_out %main_inner %33
-         %34 = OpCompositeExtract %v4float %32 0
-               OpStore %position_1_1 %34
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index 4318882..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> x_4 : u32;
-
-var<private> position : vec4<f32>;
-
-fn main_1() {
-  let x_14 : ptr<private, u32> = &(x_4);
-  let x_2 : u32 = *(x_14);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  position_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(instance_index)]] x_4_param : u32) -> main_out {
-  x_4 = x_4_param;
-  main_1();
-  return main_out(position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.hlsl
deleted file mode 100644
index c41df17..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static uint x_4 = 0u;
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_InstanceID;
-};
-struct tint_symbol_2 {
-  float4 position_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = x_4_param;
-  main_1();
-  const main_out tint_symbol_3 = {position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.msl
deleted file mode 100644
index 5391d30..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 position_1;
-};
-struct tint_symbol_1 {
-  float4 position_1 [[position]];
-};
-
-void main_1(thread uint* const tint_symbol_3) {
-  uint const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = x_4_param;
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[instance_id]]) {
-  thread uint tint_symbol_6 = 0u;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.position_1 = inner_result.position_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.spvasm
deleted file mode 100644
index cf8a771..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %position_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %position_1_1 "position_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %position "position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "position_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn InstanceIndex
-               OpDecorate %position_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%position_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpConstantNull %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %22 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %uint %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %22
-  %x_4_param = OpFunctionParameter %uint
-         %26 = OpLabel
-               OpStore %x_4 %x_4_param
-         %27 = OpFunctionCall %void %main_1
-         %28 = OpLoad %v4float %position
-         %29 = OpCompositeConstruct %main_out %28
-               OpReturnValue %29
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %31 = OpLabel
-         %33 = OpLoad %uint %x_4_param_1
-         %32 = OpFunctionCall %main_out %main_inner %33
-         %34 = OpCompositeExtract %v4float %32 0
-               OpStore %position_1_1 %34
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 213cedf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_InstanceIndex_U32_Load_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : u32;
-
-var<private> position : vec4<f32>;
-
-fn main_1() {
-  let x_2 : u32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  position_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(instance_index)]] x_4_param : u32) -> main_out {
-  x_4 = x_4_param;
-  main_1();
-  return main_out(position);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 9b65d1f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static float3x2 x_200 = float3x2(float2(1.5f, 2.0f), float2(2.0f, 3.0f), float2(3.0f, 4.0f));
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.spvasm
deleted file mode 100644
index 34d28df..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-  %float_1_5 = OpConstant %float 1.5
-    %float_2 = OpConstant %float 2
-          %6 = OpConstantComposite %v2float %float_1_5 %float_2
-    %float_3 = OpConstant %float 3
-          %8 = OpConstantComposite %v2float %float_2 %float_3
-    %float_4 = OpConstant %float 4
-         %10 = OpConstantComposite %v2float %float_3 %float_4
-         %11 = OpConstantComposite %mat3v2float %6 %8 %10
-%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
-      %x_200 = OpVariable %_ptr_Private_mat3v2float Private %11
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.wgsl
deleted file mode 100644
index 1d137c9..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : mat3x2<f32> = mat3x2<f32>(vec2<f32>(1.5, 2.0), vec2<f32>(2.0, 3.0), vec2<f32>(3.0, 4.0));
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 89e1fde..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static float3x2 x_200 = float3x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.spvasm
deleted file mode 100644
index afc1b9f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-    %float_0 = OpConstant %float 0
-          %5 = OpConstantComposite %v2float %float_0 %float_0
-          %6 = OpConstantComposite %mat3v2float %5 %5 %5
-%_ptr_Private_mat3v2float = OpTypePointer Private %mat3v2float
-      %x_200 = OpVariable %_ptr_Private_mat3v2float Private %6
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.wgsl
deleted file mode 100644
index bc1e84b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixNullInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : mat3x2<f32> = mat3x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.hlsl
deleted file mode 100644
index ef0855d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.msl
deleted file mode 100644
index b2a51ad..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ packed_float2 el;
-  /* 0x0008 */ int8_t tint_pad[56];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct S {
-  /* 0x0000 */ tint_array_wrapper field0;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.spvasm
deleted file mode 100644
index 33921e1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_v2float_uint_3 ArrayStride 64
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_v2float_uint_3 = OpTypeArray %v2float %uint_3
-          %S = OpTypeStruct %_arr_v2float_uint_3
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.wgsl
deleted file mode 100644
index 996fa56..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-[[block]]
-struct S {
-  field0 : [[stride(64)]] array<vec2<f32>, 3>;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.hlsl
deleted file mode 100644
index ef0855d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.msl
deleted file mode 100644
index ecdf927..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float3x2 field0;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.spvasm
deleted file mode 100644
index 64446e5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 0 ColMajor
-               OpMemberDecorate %S 0 MatrixStride 8
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-          %S = OpTypeStruct %mat3v2float
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.wgsl
deleted file mode 100644
index 79b8f48..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Dropped.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-[[block]]
-struct S {
-  field0 : mat3x2<f32>;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.hlsl
deleted file mode 100644
index ef0855d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.msl
deleted file mode 100644
index ecdf927..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float3x2 field0;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.spvasm
deleted file mode 100644
index 64446e5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 0 ColMajor
-               OpMemberDecorate %S 0 MatrixStride 8
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-          %S = OpTypeStruct %mat3v2float
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.wgsl
deleted file mode 100644
index 79b8f48..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_MatrixStrideDecoration_Natural_Dropped.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-[[block]]
-struct S {
-  field0 : mat3x2<f32>;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.hlsl
deleted file mode 100644
index 2ce495e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-groupshared float the_counter;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.spvasm
deleted file mode 100644
index 20f308b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %the_counter "the_counter"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-%_ptr_Workgroup_float = OpTypePointer Workgroup %float
-%the_counter = OpVariable %_ptr_Workgroup_float Workgroup
-       %void = OpTypeVoid
-          %4 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %4
-          %7 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %4
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.wgsl
deleted file mode 100644
index 1ab5fb5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NamedWorkgroupVar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<workgroup> the_counter : f32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.hlsl
deleted file mode 100644
index 1135368..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.spvasm
deleted file mode 100644
index ca944f0..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.wgsl
deleted file mode 100644
index 471e2a6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_NoVar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.hlsl
deleted file mode 100644
index 415c810..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.spvasm
deleted file mode 100644
index de87216..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.wgsl
deleted file mode 100644
index 21b73b3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.hlsl
deleted file mode 100644
index d9b85b3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint x_1 = 1u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.spvasm
deleted file mode 100644
index ced9f15..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %uint_1
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.wgsl
deleted file mode 100644
index 146796b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_OutputVarsConvertedToPrivate_WithInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_1 : u32 = 1u;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.hlsl
deleted file mode 100644
index d5ba352..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-static float x_1[3] = (float[3])0;
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float x_1_1;
-  float x_1_2;
-  float x_1_3;
-  float4 x_2_1;
-};
-struct tint_symbol {
-  float x_1_1 : TEXCOORD4;
-  float x_1_2 : TEXCOORD5;
-  float x_1_3 : TEXCOORD6;
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1[0], x_1[1], x_1[2], x_2};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_1_2 = inner_result.x_1_2;
-  wrapper_result.x_1_3 = inner_result.x_1_3;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.msl
deleted file mode 100644
index a11ecf4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[3];
-};
-struct main_out {
-  float x_1_1;
-  float x_1_2;
-  float x_1_3;
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float x_1_1 [[user(locn4)]];
-  float x_1_2 [[user(locn5)]];
-  float x_1_3 [[user(locn6)]];
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_3)).arr[0], .x_1_2=(*(tint_symbol_3)).arr[1], .x_1_3=(*(tint_symbol_3)).arr[2], .x_2_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5), &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_1_2 = inner_result.x_1_2;
-  wrapper_result.x_1_3 = inner_result.x_1_3;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.spvasm
deleted file mode 100644
index 22cf6f9..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,93 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_1_1 %x_1_2_1 %x_1_3_1 %x_2_1_1 %vertex_point_size
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1_2_1 "x_1_2_1"
-               OpName %x_1_3_1 "x_1_3_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpMemberName %main_out 1 "x_1_2"
-               OpMemberName %main_out 2 "x_1_3"
-               OpMemberName %main_out 3 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_1_1_1 Location 4
-               OpDecorate %x_1_2_1 Location 5
-               OpDecorate %x_1_3_1 Location 6
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 4
-               OpMemberDecorate %main_out 2 Offset 8
-               OpMemberDecorate %main_out 3 Offset 16
-      %float = OpTypeFloat 32
-%_ptr_Output_float = OpTypePointer Output %float
-          %4 = OpConstantNull %float
-    %x_1_1_1 = OpVariable %_ptr_Output_float Output %4
-    %x_1_2_1 = OpVariable %_ptr_Output_float Output %4
-    %x_1_3_1 = OpVariable %_ptr_Output_float Output %4
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-         %10 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %10
-%vertex_point_size = OpVariable %_ptr_Output_float Output %4
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Private__arr_float_uint_3 = OpTypePointer Private %_arr_float_uint_3
-         %17 = OpConstantNull %_arr_float_uint_3
-        %x_1 = OpVariable %_ptr_Private__arr_float_uint_3 Private %17
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %10
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-   %main_out = OpTypeStruct %float %float %float %v4float
-         %24 = OpTypeFunction %main_out
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %24
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %main_1
-         %32 = OpAccessChain %_ptr_Private_float %x_1 %int_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Private_float %x_1 %int_1
-         %36 = OpLoad %float %35
-         %38 = OpAccessChain %_ptr_Private_float %x_1 %int_2
-         %39 = OpLoad %float %38
-         %40 = OpLoad %v4float %x_2
-         %41 = OpCompositeConstruct %main_out %33 %36 %39 %40
-               OpReturnValue %41
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %43 = OpLabel
-         %44 = OpFunctionCall %main_out %main_inner
-         %45 = OpCompositeExtract %float %44 0
-               OpStore %x_1_1_1 %45
-         %46 = OpCompositeExtract %float %44 1
-               OpStore %x_1_2_1 %46
-         %47 = OpCompositeExtract %float %44 2
-               OpStore %x_1_3_1 %47
-         %48 = OpCompositeExtract %v4float %44 3
-               OpStore %x_2_1_1 %48
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.wgsl
deleted file mode 100644
index eafdb67..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenArray_OneLevel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_1 : array<f32, 3>;
-
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[location(4)]]
-  x_1_1 : f32;
-  [[location(5)]]
-  x_1_2 : f32;
-  [[location(6)]]
-  x_1_3 : f32;
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1[0], x_1[1], x_1[2], x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.hlsl
deleted file mode 100644
index 705ecff..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float2x4 x_1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_1_1;
-  float4 x_1_2;
-  float4 x_2_1;
-};
-struct tint_symbol {
-  float4 x_1_1 : TEXCOORD9;
-  float4 x_1_2 : TEXCOORD10;
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1[0], x_1[1], x_2};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_1_2 = inner_result.x_1_2;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.msl
deleted file mode 100644
index 43846a3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_1_1;
-  float4 x_1_2;
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_1 [[user(locn9)]];
-  float4 x_1_2 [[user(locn10)]];
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float2x4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_3))[0], .x_1_2=(*(tint_symbol_3))[1], .x_2_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float2x4 tint_symbol_5 = float2x4(0.0f);
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5), &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_1_2 = inner_result.x_1_2;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.spvasm
deleted file mode 100644
index ed0b979..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 42
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_1_1 %x_1_2_1 %x_2_1_1 %vertex_point_size
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1_2_1 "x_1_2_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpMemberName %main_out 1 "x_1_2"
-               OpMemberName %main_out 2 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_1_1_1 Location 9
-               OpDecorate %x_1_2_1 Location 10
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-               OpMemberDecorate %main_out 2 Offset 32
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-    %x_1_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %x_1_2_1 = OpVariable %_ptr_Output_v4float Output %5
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%mat2v4float = OpTypeMatrix %v4float 2
-%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
-         %14 = OpConstantNull %mat2v4float
-        %x_1 = OpVariable %_ptr_Private_mat2v4float Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float %v4float %v4float
-         %21 = OpTypeFunction %main_out
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %28 = OpAccessChain %_ptr_Private_v4float %x_1 %int_0
-         %29 = OpLoad %v4float %28
-         %31 = OpAccessChain %_ptr_Private_v4float %x_1 %int_1
-         %32 = OpLoad %v4float %31
-         %33 = OpLoad %v4float %x_2
-         %34 = OpCompositeConstruct %main_out %29 %32 %33
-               OpReturnValue %34
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %36 = OpLabel
-         %37 = OpFunctionCall %main_out %main_inner
-         %38 = OpCompositeExtract %v4float %37 0
-               OpStore %x_1_1_1 %38
-         %39 = OpCompositeExtract %v4float %37 1
-               OpStore %x_1_2_1 %39
-         %40 = OpCompositeExtract %v4float %37 2
-               OpStore %x_2_1_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.wgsl
deleted file mode 100644
index 4bd102d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenMatrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> x_1 : mat2x4<f32>;
-
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[location(9)]]
-  x_1_1 : vec4<f32>;
-  [[location(10)]]
-  x_1_2 : vec4<f32>;
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1[0], x_1[1], x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.hlsl
deleted file mode 100644
index 28260d3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-struct Communicators {
-  float alice;
-  float4 bob;
-};
-
-static Communicators x_1 = (Communicators)0;
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float x_1_1;
-  float4 x_1_2;
-  float4 x_2_1;
-};
-struct tint_symbol {
-  float x_1_1 : TEXCOORD9;
-  float4 x_1_2 : TEXCOORD10;
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1.alice, x_1.bob, x_2};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_1_2 = inner_result.x_1_2;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.msl
deleted file mode 100644
index b1202b4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct Communicators {
-  float alice;
-  float4 bob;
-};
-struct main_out {
-  float x_1_1;
-  float4 x_1_2;
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float x_1_1 [[user(locn9)]];
-  float4 x_1_2 [[user(locn10)]];
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread Communicators* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_3)).alice, .x_1_2=(*(tint_symbol_3)).bob, .x_2_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread Communicators tint_symbol_5 = {};
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5), &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  wrapper_result.x_1_2 = inner_result.x_1_2;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.spvasm
deleted file mode 100644
index 05cb930..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_1_1_1 %x_1_2_1 %x_2_1_1 %vertex_point_size
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1_2_1 "x_1_2_1"
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %Communicators "Communicators"
-               OpMemberName %Communicators 0 "alice"
-               OpMemberName %Communicators 1 "bob"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpMemberName %main_out 1 "x_1_2"
-               OpMemberName %main_out 2 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_1_1_1 Location 9
-               OpDecorate %x_1_2_1 Location 10
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %Communicators 0 Offset 0
-               OpMemberDecorate %Communicators 1 Offset 16
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-               OpMemberDecorate %main_out 2 Offset 32
-      %float = OpTypeFloat 32
-%_ptr_Output_float = OpTypePointer Output %float
-          %4 = OpConstantNull %float
-    %x_1_1_1 = OpVariable %_ptr_Output_float Output %4
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_1_2_1 = OpVariable %_ptr_Output_v4float Output %8
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%vertex_point_size = OpVariable %_ptr_Output_float Output %4
-%Communicators = OpTypeStruct %float %v4float
-%_ptr_Private_Communicators = OpTypePointer Private %Communicators
-         %14 = OpConstantNull %Communicators
-        %x_1 = OpVariable %_ptr_Private_Communicators Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %float %v4float %v4float
-         %21 = OpTypeFunction %main_out
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %29 = OpAccessChain %_ptr_Private_float %x_1 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Private_v4float %x_1 %uint_1
-         %33 = OpLoad %v4float %32
-         %34 = OpLoad %v4float %x_2
-         %35 = OpCompositeConstruct %main_out %30 %33 %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %37 = OpLabel
-         %38 = OpFunctionCall %main_out %main_inner
-         %39 = OpCompositeExtract %float %38 0
-               OpStore %x_1_1_1 %39
-         %40 = OpCompositeExtract %v4float %38 1
-               OpStore %x_1_2_1 %40
-         %41 = OpCompositeExtract %v4float %38 2
-               OpStore %x_2_1_1 %41
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.wgsl
deleted file mode 100644
index 3283c58..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_Output_FlattenStruct_LocOnVariable.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-struct Communicators {
-  alice : f32;
-  bob : vec4<f32>;
-};
-
-var<private> x_1 : Communicators;
-
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[location(9)]]
-  x_1_1 : f32;
-  [[location(10)]]
-  x_1_2 : vec4<f32>;
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1.alice, x_1.bob, x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.hlsl
deleted file mode 100644
index 76182bd..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static float my_own_private_idaho = 0.0f;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.spvasm
deleted file mode 100644
index 458710e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %my_own_private_idaho "my_own_private_idaho"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-%_ptr_Private_float = OpTypePointer Private %float
-          %4 = OpConstantNull %float
-%my_own_private_idaho = OpVariable %_ptr_Private_float Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.wgsl
deleted file mode 100644
index 46b790f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_PrivateVar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> my_own_private_idaho : f32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index c61318d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static int x_1 = 0;
-
-void main_1() {
-  const int x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_SampleIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.msl
deleted file mode 100644
index 0ea0fc4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int* const tint_symbol_1) {
-  int const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread int* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_id]]) {
-  thread int tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index 00e04ab..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn SampleId
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %7 = OpConstantNull %int
-        %x_1 = OpVariable %_ptr_Private_int Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %uint
-         %16 = OpLabel
-         %17 = OpBitcast %int %x_1_param
-               OpStore %x_1 %17
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %20 = OpLabel
-         %22 = OpLoad %uint %x_1_param_1
-         %21 = OpFunctionCall %void %main_inner %22
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 5035555..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : i32;
-
-fn main_1() {
-  let x_2 : i32 = x_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_index)]] x_1_param : u32) {
-  x_1 = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index c61318d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static int x_1 = 0;
-
-void main_1() {
-  const int x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_SampleIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.msl
deleted file mode 100644
index 0ea0fc4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int* const tint_symbol_1) {
-  int const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread int* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_id]]) {
-  thread int tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index 00e04ab..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn SampleId
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %7 = OpConstantNull %int
-        %x_1 = OpVariable %_ptr_Private_int Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %uint
-         %16 = OpLabel
-         %17 = OpBitcast %int %x_1_param
-               OpStore %x_1 %17
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %20 = OpLabel
-         %22 = OpLoad %uint %x_1_param_1
-         %21 = OpFunctionCall %void %main_inner %22
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index cc8821e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : i32;
-
-fn main_1() {
-  let x_11 : ptr<private, i32> = &(x_1);
-  let x_2 : i32 = *(x_11);
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_index)]] x_1_param : u32) {
-  x_1 = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.hlsl
deleted file mode 100644
index c61318d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static int x_1 = 0;
-
-void main_1() {
-  const int x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_SampleIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = asint(x_1_param);
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.msl
deleted file mode 100644
index 0ea0fc4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread int* const tint_symbol_1) {
-  int const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread int* const tint_symbol_2) {
-  *(tint_symbol_2) = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_id]]) {
-  thread int tint_symbol_3 = 0;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.spvasm
deleted file mode 100644
index 00e04ab..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn SampleId
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %7 = OpConstantNull %int
-        %x_1 = OpVariable %_ptr_Private_int Private %7
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-         %13 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpLoad %int %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %13
-  %x_1_param = OpFunctionParameter %uint
-         %16 = OpLabel
-         %17 = OpBitcast %int %x_1_param
-               OpStore %x_1 %17
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %20 = OpLabel
-         %22 = OpLoad %uint %x_1_param_1
-         %21 = OpFunctionCall %void %main_inner %22
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 5035555..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_I32_Load_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : i32;
-
-fn main_1() {
-  let x_2 : i32 = x_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_index)]] x_1_param : u32) {
-  x_1 = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 6daf7ac..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  const uint x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_SampleIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.msl
deleted file mode 100644
index 0f1f6d8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  uint const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread uint* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_id]]) {
-  thread uint tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index e04af0c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn SampleId
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %6 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-         %12 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %11 = OpLoad %uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %12
-  %x_1_param = OpFunctionParameter %uint
-         %15 = OpLabel
-               OpStore %x_1 %x_1_param
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %20 = OpLoad %uint %x_1_param_1
-         %19 = OpFunctionCall %void %main_inner %20
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 9b4cf72..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  let x_2 : u32 = x_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_index)]] x_1_param : u32) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index 6daf7ac..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  const uint x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_SampleIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.msl
deleted file mode 100644
index 0f1f6d8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  uint const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread uint* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_id]]) {
-  thread uint tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index e04af0c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn SampleId
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %6 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-         %12 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %11 = OpLoad %uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %12
-  %x_1_param = OpFunctionParameter %uint
-         %15 = OpLabel
-               OpStore %x_1 %x_1_param
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %20 = OpLoad %uint %x_1_param_1
-         %19 = OpFunctionCall %void %main_inner %20
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index bbfa55e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  let x_11 : ptr<private, u32> = &(x_1);
-  let x_2 : u32 = *(x_11);
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_index)]] x_1_param : u32) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.hlsl
deleted file mode 100644
index 6daf7ac..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  const uint x_2 = x_1;
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_SampleIndex;
-};
-
-void main_inner(uint x_1_param) {
-  x_1 = x_1_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.msl
deleted file mode 100644
index 0f1f6d8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  uint const x_2 = *(tint_symbol_1);
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread uint* const tint_symbol_2) {
-  *(tint_symbol_2) = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_id]]) {
-  thread uint tint_symbol_3 = 0u;
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.spvasm
deleted file mode 100644
index e04af0c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpCapability SampleRateShading
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %x_1_param_1 BuiltIn SampleId
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_1_param_1 = OpVariable %_ptr_Input_uint Input
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %6 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-         %12 = OpTypeFunction %void %uint
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %11 = OpLoad %uint %x_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %12
-  %x_1_param = OpFunctionParameter %uint
-         %15 = OpLabel
-               OpStore %x_1 %x_1_param
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %20 = OpLoad %uint %x_1_param_1
-         %19 = OpFunctionCall %void %main_inner %20
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 9b4cf72..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleId_U32_Load_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  let x_2 : u32 = x_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_index)]] x_1_param : u32) {
-  x_1 = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 41e13ad..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static int x_1[1] = (int[1])0;
-
-void main_1() {
-  const int x_4 = x_1[0];
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = asint(x_1_param);
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.msl
deleted file mode 100644
index 8bb32ce..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_1) {
-  int const x_4 = (*(tint_symbol_1)).arr[0];
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_2) {
-  (*(tint_symbol_2)).arr[0] = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_3 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index 89f39fa..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,56 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-         %10 = OpConstantNull %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %10
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %19 = OpTypeFunction %void %uint
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %17 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %18 = OpLoad %int %17
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %19
-  %x_1_param = OpFunctionParameter %uint
-         %22 = OpLabel
-         %23 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %24 = OpBitcast %int %x_1_param
-               OpStore %23 %24
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %27 = OpLabel
-         %30 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %31 = OpLoad %uint %30
-         %28 = OpFunctionCall %void %main_inner %31
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 8e340b1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : array<i32, 1>;
-
-fn main_1() {
-  let x_4 : i32 = x_1[0];
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index 41e13ad..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static int x_1[1] = (int[1])0;
-
-void main_1() {
-  const int x_4 = x_1[0];
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = asint(x_1_param);
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.msl
deleted file mode 100644
index 8bb32ce..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_1) {
-  int const x_4 = (*(tint_symbol_1)).arr[0];
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_2) {
-  (*(tint_symbol_2)).arr[0] = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_3 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index 89f39fa..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,56 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-         %10 = OpConstantNull %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %10
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %19 = OpTypeFunction %void %uint
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %17 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %18 = OpLoad %int %17
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %19
-  %x_1_param = OpFunctionParameter %uint
-         %22 = OpLabel
-         %23 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %24 = OpBitcast %int %x_1_param
-               OpStore %23 %24
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %27 = OpLabel
-         %30 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %31 = OpLoad %uint %30
-         %28 = OpFunctionCall %void %main_inner %31
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index 8e340b1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : array<i32, 1>;
-
-fn main_1() {
-  let x_4 : i32 = x_1[0];
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.hlsl
deleted file mode 100644
index 719e31e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static int x_1[1] = (int[1])0;
-
-void main_1() {
-  const int x_3 = x_1[0];
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = asint(x_1_param);
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.msl
deleted file mode 100644
index 5282e0e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_1) {
-  int const x_3 = (*(tint_symbol_1)).arr[0];
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_2) {
-  (*(tint_symbol_2)).arr[0] = as_type<int>(x_1_param);
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_3 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.spvasm
deleted file mode 100644
index 89f39fa..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,56 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-         %10 = OpConstantNull %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %10
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %19 = OpTypeFunction %void %uint
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %17 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %18 = OpLoad %int %17
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %19
-  %x_1_param = OpFunctionParameter %uint
-         %22 = OpLabel
-         %23 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %24 = OpBitcast %int %x_1_param
-               OpStore %23 %24
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %27 = OpLabel
-         %30 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %31 = OpLoad %uint %30
-         %28 = OpFunctionCall %void %main_inner %31
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 95ed8a7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_I32_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : array<i32, 1>;
-
-fn main_1() {
-  let x_3 : i32 = x_1[0];
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = bitcast<i32>(x_1_param);
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index b628f8f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  const uint x_4 = x_1[0];
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.msl
deleted file mode 100644
index a309057..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_1) {
-  uint const x_4 = (*(tint_symbol_1)).arr[0];
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_2) {
-  (*(tint_symbol_2)).arr[0] = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_3 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index c457454..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-          %8 = OpConstantNull %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %8
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %18 = OpTypeFunction %void %uint
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %16 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %17 = OpLoad %uint %16
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %18
-  %x_1_param = OpFunctionParameter %uint
-         %21 = OpLabel
-         %22 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %22 %x_1_param
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %25 = OpLabel
-         %28 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %29 = OpLoad %uint %28
-         %26 = OpFunctionCall %void %main_inner %29
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index e5d5580..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : array<u32, 1>;
-
-fn main_1() {
-  let x_4 : u32 = x_1[0];
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index b628f8f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  const uint x_4 = x_1[0];
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.msl
deleted file mode 100644
index a309057..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_1) {
-  uint const x_4 = (*(tint_symbol_1)).arr[0];
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_2) {
-  (*(tint_symbol_2)).arr[0] = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_3 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index c457454..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-          %8 = OpConstantNull %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %8
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %18 = OpTypeFunction %void %uint
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %16 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %17 = OpLoad %uint %16
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %18
-  %x_1_param = OpFunctionParameter %uint
-         %21 = OpLabel
-         %22 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %22 %x_1_param
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %25 = OpLabel
-         %28 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %29 = OpLoad %uint %28
-         %26 = OpFunctionCall %void %main_inner %29
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index e5d5580..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : array<u32, 1>;
-
-fn main_1() {
-  let x_4 : u32 = x_1[0];
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.hlsl
deleted file mode 100644
index 431e66b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  const uint x_3 = x_1[0];
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.msl
deleted file mode 100644
index 87b5d88..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_1) {
-  uint const x_3 = (*(tint_symbol_1)).arr[0];
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_2) {
-  (*(tint_symbol_2)).arr[0] = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_3 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.spvasm
deleted file mode 100644
index c457454..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-          %8 = OpConstantNull %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %8
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %18 = OpTypeFunction %void %uint
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %16 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %17 = OpLoad %uint %16
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %18
-  %x_1_param = OpFunctionParameter %uint
-         %21 = OpLabel
-         %22 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %22 %x_1_param
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %25 = OpLabel
-         %28 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %29 = OpLoad %uint %28
-         %26 = OpFunctionCall %void %main_inner %29
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 911c8ad..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_U32_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_1 : array<u32, 1>;
-
-fn main_1() {
-  let x_3 : u32 = x_1[0];
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.hlsl
deleted file mode 100644
index 431e66b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  const uint x_3 = x_1[0];
-  return;
-}
-
-struct tint_symbol_1 {
-  uint x_1_param : SV_Coverage;
-};
-
-void main_inner(uint x_1_param) {
-  x_1[0] = x_1_param;
-  main_1();
-}
-
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_1_param);
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.msl
deleted file mode 100644
index 89663fb..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-struct tint_array_wrapper_1 {
-  uint arr[2];
-};
-struct tint_array_wrapper_2 {
-  int arr[1];
-};
-struct tint_array_wrapper_3 {
-  int arr[2];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_1) {
-  uint const x_3 = (*(tint_symbol_1)).arr[0];
-  return;
-}
-
-void tint_symbol_inner(uint x_1_param, thread tint_array_wrapper* const tint_symbol_2) {
-  (*(tint_symbol_2)).arr[0] = x_1_param;
-  main_1(tint_symbol_2);
-}
-
-fragment void tint_symbol(uint x_1_param [[sample_mask]]) {
-  thread tint_array_wrapper tint_symbol_3 = {};
-  tint_symbol_inner(x_1_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.spvasm
deleted file mode 100644
index c457454..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_param_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_param_1 "x_1_param_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_1_param "x_1_param"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_param_1 BuiltIn SampleMask
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Input__arr_uint_uint_1 = OpTypePointer Input %_arr_uint_uint_1
-%x_1_param_1 = OpVariable %_ptr_Input__arr_uint_uint_1 Input
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-          %8 = OpConstantNull %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %8
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %18 = OpTypeFunction %void %uint
-%_ptr_Input_uint = OpTypePointer Input %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %16 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %17 = OpLoad %uint %16
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %18
-  %x_1_param = OpFunctionParameter %uint
-         %21 = OpLabel
-         %22 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %22 %x_1_param
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %25 = OpLabel
-         %28 = OpAccessChain %_ptr_Input_uint %x_1_param_1 %int_0
-         %29 = OpLoad %uint %28
-         %26 = OpFunctionCall %void %main_inner %29
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.wgsl
deleted file mode 100644
index d0434bb..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_In_WithStride.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-type Arr = [[stride(4)]] array<u32, 1>;
-
-type Arr_1 = [[stride(4)]] array<u32, 2>;
-
-type Arr_2 = [[stride(4)]] array<i32, 1>;
-
-type Arr_3 = [[stride(4)]] array<i32, 2>;
-
-var<private> x_1 : Arr;
-
-fn main_1() {
-  let x_3 : u32 = x_1[0];
-  return;
-}
-
-[[stage(fragment)]]
-fn main([[builtin(sample_mask)]] x_1_param : u32) {
-  x_1[0] = x_1_param;
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 57501e5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static int x_1[1] = (int[1])0;
-
-void main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {asuint(x_1[0])};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.msl
deleted file mode 100644
index ee1d80b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_3) {
-  (*(tint_symbol_3)).arr[0] = 12;
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=as_type<uint>((*(tint_symbol_4)).arr[0])};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index db222d7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,62 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 35
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-         %11 = OpConstantNull %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %11
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_12 = OpConstant %int 12
-   %main_out = OpTypeStruct %uint
-         %20 = OpTypeFunction %main_out
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-               OpStore %18 %int_12
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %26 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %27 = OpLoad %int %26
-         %25 = OpBitcast %uint %27
-         %28 = OpCompositeConstruct %main_out %25
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %33 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %34 = OpCompositeExtract %uint %31 0
-               OpStore %33 %34
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 42f0760..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> x_1 : array<i32, 1>;
-
-fn main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(bitcast<u32>(x_1[0]));
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index 57501e5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static int x_1[1] = (int[1])0;
-
-void main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {asuint(x_1[0])};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.msl
deleted file mode 100644
index ee1d80b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_3) {
-  (*(tint_symbol_3)).arr[0] = 12;
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=as_type<uint>((*(tint_symbol_4)).arr[0])};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index db222d7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,62 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 35
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-         %11 = OpConstantNull %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %11
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_12 = OpConstant %int 12
-   %main_out = OpTypeStruct %uint
-         %20 = OpTypeFunction %main_out
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-               OpStore %18 %int_12
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %26 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %27 = OpLoad %int %26
-         %25 = OpBitcast %uint %27
-         %28 = OpCompositeConstruct %main_out %25
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %33 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %34 = OpCompositeExtract %uint %31 0
-               OpStore %33 %34
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index 42f0760..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> x_1 : array<i32, 1>;
-
-fn main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(bitcast<u32>(x_1[0]));
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.hlsl
deleted file mode 100644
index 57501e5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static int x_1[1] = (int[1])0;
-
-void main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {asuint(x_1[0])};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.msl
deleted file mode 100644
index ee1d80b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_3) {
-  (*(tint_symbol_3)).arr[0] = 12;
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=as_type<uint>((*(tint_symbol_4)).arr[0])};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.spvasm
deleted file mode 100644
index db222d7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,62 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 35
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Private__arr_int_uint_1 = OpTypePointer Private %_arr_int_uint_1
-         %11 = OpConstantNull %_arr_int_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_int_uint_1 Private %11
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_12 = OpConstant %int 12
-   %main_out = OpTypeStruct %uint
-         %20 = OpTypeFunction %main_out
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-               OpStore %18 %int_12
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %26 = OpAccessChain %_ptr_Private_int %x_1 %int_0
-         %27 = OpLoad %int %26
-         %25 = OpBitcast %uint %27
-         %28 = OpCompositeConstruct %main_out %25
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %33 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %34 = OpCompositeExtract %uint %31 0
-               OpStore %33 %34
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 42f0760..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_I32_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> x_1 : array<i32, 1>;
-
-fn main_1() {
-  x_1[0] = 12;
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(bitcast<u32>(x_1[0]));
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 48138a6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1[0]};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.msl
deleted file mode 100644
index e59f4bf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_3) {
-  (*(tint_symbol_3)).arr[0] = 0u;
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_4)).arr[0]};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index 8d25fb8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %6
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-     %uint_0 = OpConstant %uint 0
-   %main_out = OpTypeStruct %uint
-         %18 = OpTypeFunction %main_out
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %16 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %16 %uint_0
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %18
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-         %23 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %24 = OpLoad %uint %23
-         %25 = OpCompositeConstruct %main_out %24
-               OpReturnValue %25
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %main_out %main_inner
-         %30 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %31 = OpCompositeExtract %uint %28 0
-               OpStore %30 %31
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 8791e1c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> x_1 : array<u32, 1>;
-
-fn main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1[0]);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index 48138a6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1[0]};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.msl
deleted file mode 100644
index e59f4bf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_3) {
-  (*(tint_symbol_3)).arr[0] = 0u;
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_4)).arr[0]};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index 8d25fb8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %6
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-     %uint_0 = OpConstant %uint 0
-   %main_out = OpTypeStruct %uint
-         %18 = OpTypeFunction %main_out
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %16 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %16 %uint_0
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %18
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-         %23 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %24 = OpLoad %uint %23
-         %25 = OpCompositeConstruct %main_out %24
-               OpReturnValue %25
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %main_out %main_inner
-         %30 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %31 = OpCompositeExtract %uint %28 0
-               OpStore %30 %31
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index 8791e1c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> x_1 : array<u32, 1>;
-
-fn main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1[0]);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.hlsl
deleted file mode 100644
index 48138a6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1[0]};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.msl
deleted file mode 100644
index e59f4bf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_3) {
-  (*(tint_symbol_3)).arr[0] = 0u;
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_4)).arr[0]};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.spvasm
deleted file mode 100644
index 8d25fb8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %6
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-     %uint_0 = OpConstant %uint 0
-   %main_out = OpTypeStruct %uint
-         %18 = OpTypeFunction %main_out
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %16 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %16 %uint_0
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %18
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-         %23 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %24 = OpLoad %uint %23
-         %25 = OpCompositeConstruct %main_out %24
-               OpReturnValue %25
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %main_out %main_inner
-         %30 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %31 = OpCompositeExtract %uint %28 0
-               OpStore %30 %31
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 8791e1c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_U32_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> x_1 : array<u32, 1>;
-
-fn main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1[0]);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.hlsl
deleted file mode 100644
index 48138a6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint x_1[1] = (uint[1])0;
-
-void main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol {
-  uint x_1_1 : SV_Coverage;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_1[0]};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.msl
deleted file mode 100644
index 0779246..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[1];
-};
-struct tint_array_wrapper_1 {
-  uint arr[2];
-};
-struct tint_array_wrapper_2 {
-  int arr[1];
-};
-struct tint_array_wrapper_3 {
-  int arr[2];
-};
-struct main_out {
-  uint x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_1_1 [[sample_mask]];
-};
-
-void main_1(thread tint_array_wrapper* const tint_symbol_3) {
-  (*(tint_symbol_3)).arr[0] = 0u;
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=(*(tint_symbol_4)).arr[0]};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_5 = {};
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.spvasm
deleted file mode 100644
index 8d25fb8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_1 ArrayStride 4
-               OpDecorate %x_1_1_1 BuiltIn SampleMask
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-%_ptr_Output__arr_uint_uint_1 = OpTypePointer Output %_arr_uint_uint_1
-          %6 = OpConstantNull %_arr_uint_uint_1
-    %x_1_1_1 = OpVariable %_ptr_Output__arr_uint_uint_1 Output %6
-%_ptr_Private__arr_uint_uint_1 = OpTypePointer Private %_arr_uint_uint_1
-        %x_1 = OpVariable %_ptr_Private__arr_uint_uint_1 Private %6
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-     %uint_0 = OpConstant %uint 0
-   %main_out = OpTypeStruct %uint
-         %18 = OpTypeFunction %main_out
-%_ptr_Output_uint = OpTypePointer Output %uint
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %16 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-               OpStore %16 %uint_0
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %18
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-         %23 = OpAccessChain %_ptr_Private_uint %x_1 %int_0
-         %24 = OpLoad %uint %23
-         %25 = OpCompositeConstruct %main_out %24
-               OpReturnValue %25
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %main_out %main_inner
-         %30 = OpAccessChain %_ptr_Output_uint %x_1_1_1 %int_0
-         %31 = OpCompositeExtract %uint %28 0
-               OpStore %30 %31
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.wgsl
deleted file mode 100644
index fdce3e2..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_SampleMask_Out_WithStride.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-type Arr = [[stride(4)]] array<u32, 1>;
-
-type Arr_1 = [[stride(4)]] array<u32, 2>;
-
-type Arr_2 = [[stride(4)]] array<i32, 1>;
-
-type Arr_3 = [[stride(4)]] array<i32, 2>;
-
-var<private> x_1 : Arr;
-
-fn main_1() {
-  x_1[0] = 0u;
-  return;
-}
-
-struct main_out {
-  [[builtin(sample_mask)]]
-  x_1_1 : u32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_1[0]);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.hlsl
deleted file mode 100644
index f31c427..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static bool x_1 = true;
-static bool x_2 = false;
-static int x_3 = -1;
-static uint x_4 = 1u;
-static float x_5 = 1.5f;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.spvasm
deleted file mode 100644
index dc898fe..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Private_bool = OpTypePointer Private %bool
-        %x_1 = OpVariable %_ptr_Private_bool Private %true
-      %false = OpConstantFalse %bool
-        %x_2 = OpVariable %_ptr_Private_bool Private %false
-        %int = OpTypeInt 32 1
-     %int_n1 = OpConstant %int -1
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %int_n1
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %uint_1
-      %float = OpTypeFloat 32
-  %float_1_5 = OpConstant %float 1.5
-%_ptr_Private_float = OpTypePointer Private %float
-        %x_5 = OpVariable %_ptr_Private_float Private %float_1_5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.wgsl
deleted file mode 100644
index 22083e1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarInitializers.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> x_1 : bool = true;
-
-var<private> x_2 : bool = false;
-
-var<private> x_3 : i32 = -1;
-
-var<private> x_4 : u32 = 1u;
-
-var<private> x_5 : f32 = 1.5;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.hlsl
deleted file mode 100644
index 1488be8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-static bool x_1 = false;
-static int x_2 = 0;
-static uint x_3 = 0u;
-static float x_4 = 0.0f;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.spvasm
deleted file mode 100644
index 29592b7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Private_bool = OpTypePointer Private %bool
-        %x_1 = OpVariable %_ptr_Private_bool Private %false
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_2 = OpVariable %_ptr_Private_int Private %int_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %x_3 = OpVariable %_ptr_Private_uint Private %uint_0
-      %float = OpTypeFloat 32
-    %float_0 = OpConstant %float 0
-%_ptr_Private_float = OpTypePointer Private %float
-        %x_4 = OpVariable %_ptr_Private_float Private %float_0
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.wgsl
deleted file mode 100644
index aa25194..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarNullInitializers.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> x_1 : bool = false;
-
-var<private> x_2 : i32 = 0;
-
-var<private> x_3 : u32 = 0u;
-
-var<private> x_4 : f32 = 0.0;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.hlsl
deleted file mode 100644
index 566f341..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_12
-#define WGSL_SPEC_CONSTANT_12 2.5f
-#endif
-static const float myconst = WGSL_SPEC_CONSTANT_12;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.msl
deleted file mode 100644
index 4677fca..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant float myconst [[function_constant(12)]];
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.spvasm
deleted file mode 100644
index 9972bb5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myconst "myconst"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %myconst SpecId 12
-      %float = OpTypeFloat 32
-    %myconst = OpSpecConstant %float 2.5
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %3
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %3
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.wgsl
deleted file mode 100644
index db31ce6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[override(12)]] let myconst : f32 = 2.5;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.hlsl
deleted file mode 100644
index 381aa13..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static const float myconst = 2.5f;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.msl
deleted file mode 100644
index dcbce29..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant float myconst = 2.5f;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.spvasm
deleted file mode 100644
index eda6c88..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myconst "myconst"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %myconst = OpConstant %float 2.5
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %3
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %3
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.wgsl
deleted file mode 100644
index 9821d8b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_F32_WithoutSpecId.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-let myconst : f32 = 2.5;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.hlsl
deleted file mode 100644
index 1f95b39..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_12
-#define WGSL_SPEC_CONSTANT_12 false
-#endif
-static const bool myconst = WGSL_SPEC_CONSTANT_12;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.msl
deleted file mode 100644
index fe268c4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant bool myconst [[function_constant(12)]];
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.spvasm
deleted file mode 100644
index 213d2fd..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myconst "myconst"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %myconst SpecId 12
-       %bool = OpTypeBool
-    %myconst = OpSpecConstantFalse %bool
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %3
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %3
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.wgsl
deleted file mode 100644
index 58606bc..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_False.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[override(12)]] let myconst : bool = false;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.hlsl
deleted file mode 100644
index e2f518b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_12
-#define WGSL_SPEC_CONSTANT_12 42
-#endif
-static const int myconst = WGSL_SPEC_CONSTANT_12;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.msl
deleted file mode 100644
index a23617b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant int myconst [[function_constant(12)]];
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.spvasm
deleted file mode 100644
index de23b73..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myconst "myconst"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %myconst SpecId 12
-        %int = OpTypeInt 32 1
-    %myconst = OpSpecConstant %int 42
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %3
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %3
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.wgsl
deleted file mode 100644
index f6d39f8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_I32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[override(12)]] let myconst : i32 = 42;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.hlsl
deleted file mode 100644
index 960b2a2..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_65535
-#define WGSL_SPEC_CONSTANT_65535 true
-#endif
-static const bool x_1 = WGSL_SPEC_CONSTANT_65535;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.msl
deleted file mode 100644
index 2d9ab1d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant bool x_1 [[function_constant(65535)]];
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.spvasm
deleted file mode 100644
index 23b6d79..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_1 SpecId 65535
-       %bool = OpTypeBool
-        %x_1 = OpSpecConstantTrue %bool
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %3
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %3
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.wgsl
deleted file mode 100644
index cb4864e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_Id_MaxValid.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[override(65535)]] let x_1 : bool = true;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.hlsl
deleted file mode 100644
index 1603206..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_12
-#define WGSL_SPEC_CONSTANT_12 true
-#endif
-static const bool myconst = WGSL_SPEC_CONSTANT_12;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.msl
deleted file mode 100644
index fe268c4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant bool myconst [[function_constant(12)]];
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.spvasm
deleted file mode 100644
index 2770f9e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myconst "myconst"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %myconst SpecId 12
-       %bool = OpTypeBool
-    %myconst = OpSpecConstantTrue %bool
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %3
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %3
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.wgsl
deleted file mode 100644
index caa65dc..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_True.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[override(12)]] let myconst : bool = true;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.hlsl
deleted file mode 100644
index ba040ea..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_12
-#define WGSL_SPEC_CONSTANT_12 42u
-#endif
-static const uint myconst = WGSL_SPEC_CONSTANT_12;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.msl
deleted file mode 100644
index 19c2af7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant uint myconst [[function_constant(12)]];
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.spvasm
deleted file mode 100644
index 9461ab1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myconst "myconst"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %myconst SpecId 12
-       %uint = OpTypeInt 32 0
-    %myconst = OpSpecConstant %uint 42
-       %void = OpTypeVoid
-          %3 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %3
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %3
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.wgsl
deleted file mode 100644
index 86846ed..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_DeclareConst_U32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-[[override(12)]] let myconst : u32 = 42u;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.hlsl
deleted file mode 100644
index 41fb01d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static const float myconst = 2.5f;
-
-float x_100() {
-  return (myconst + myconst);
-}
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.msl
deleted file mode 100644
index c8f2a48..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant float myconst = 2.5f;
-float x_100() {
-  return (myconst + myconst);
-}
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.spvasm
deleted file mode 100644
index 8c812c0..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myconst "myconst"
-               OpName %x_100 "x_100"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %myconst = OpConstant %float 2.5
-          %3 = OpTypeFunction %float
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-      %x_100 = OpFunction %float None %3
-          %5 = OpLabel
-          %6 = OpFAdd %float %myconst %myconst
-               OpReturnValue %6
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.wgsl
deleted file mode 100644
index 3c3108e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_ScalarSpecConstant_UsedInFunction.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-let myconst : f32 = 2.5;
-
-fn x_100() -> f32 {
-  return (myconst + myconst);
-}
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.hlsl
deleted file mode 100644
index 006f2c1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-ByteAddressBuffer x_1 : register(t0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.msl
deleted file mode 100644
index 0766b35..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float field0;
-  /* 0x0004 */ float field1;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.spvasm
deleted file mode 100644
index a8f386b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %x_1 NonWritable
-               OpDecorate %x_1 DescriptorSet 0
-               OpDecorate %x_1 Binding 0
-      %float = OpTypeFloat 32
-          %S = OpTypeStruct %float %float
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_1 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.wgsl
deleted file mode 100644
index ff67ffa..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_AllMembers.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-[[block]]
-struct S {
-  field0 : f32;
-  field1 : f32;
-};
-
-[[group(0), binding(0)]] var<storage, read> x_1 : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.hlsl
deleted file mode 100644
index 356578f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer x_1 : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.msl
deleted file mode 100644
index 0766b35..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float field0;
-  /* 0x0004 */ float field1;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.spvasm
deleted file mode 100644
index 7734cd7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %x_1 DescriptorSet 0
-               OpDecorate %x_1 Binding 0
-      %float = OpTypeFloat 32
-          %S = OpTypeStruct %float %float
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_1 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.wgsl
deleted file mode 100644
index 408912e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-[[block]]
-struct S {
-  field0 : f32;
-  field1 : f32;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_1 : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.hlsl
deleted file mode 100644
index 356578f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer x_1 : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.msl
deleted file mode 100644
index 0766b35..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float field0;
-  /* 0x0004 */ float field1;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.spvasm
deleted file mode 100644
index 7734cd7..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %x_1 DescriptorSet 0
-               OpDecorate %x_1 Binding 0
-      %float = OpTypeFloat 32
-          %S = OpTypeStruct %float %float
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_1 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.wgsl
deleted file mode 100644
index 408912e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StorageBuffer_NonWritable_NotAllMembers_DuplicatedOnSameMember.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-[[block]]
-struct S {
-  field0 : f32;
-  field1 : f32;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_1 : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 8e7b09e..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  uint field0;
-  float field1;
-  uint field2[2];
-};
-
-static S x_200 = {1u, 1.5f, {1u, 2u}};
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.msl
deleted file mode 100644
index 967624c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.spvasm
deleted file mode 100644
index 450c52d..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-          %S = OpTypeStruct %uint %float %_arr_uint_uint_2
-     %uint_1 = OpConstant %uint 1
-  %float_1_5 = OpConstant %float 1.5
-          %8 = OpConstantComposite %_arr_uint_uint_2 %uint_1 %uint_2
-          %9 = OpConstantComposite %S %uint_1 %float_1_5 %8
-%_ptr_Private_S = OpTypePointer Private %S
-      %x_200 = OpVariable %_ptr_Private_S Private %9
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.wgsl
deleted file mode 100644
index ce1529b..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_200 : S = S(1u, 1.5, array<u32, 2>(1u, 2u));
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.hlsl
deleted file mode 100644
index 356578f..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer x_1 : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.msl
deleted file mode 100644
index fd04641..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  /* 0x0000 */ uint arr[2];
-};
-struct S {
-  /* 0x0000 */ uint field0;
-  /* 0x0004 */ float field1;
-  /* 0x0008 */ tint_array_wrapper field2;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.spvasm
deleted file mode 100644
index 5385430..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-               OpDecorate %x_1 DescriptorSet 0
-               OpDecorate %x_1 Binding 0
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-          %S = OpTypeStruct %uint %float %_arr_uint_uint_2
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_1 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.wgsl
deleted file mode 100644
index 7a1df2a..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructMember_NonReadableDecoration_Dropped.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-type Arr = [[stride(4)]] array<u32, 2>;
-
-[[block]]
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : Arr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_1 : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 630bcc2..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  uint field0;
-  float field1;
-  uint field2[2];
-};
-
-static S x_200 = {0u, 0.0f, {0u, 0u}};
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.msl
deleted file mode 100644
index 967624c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.spvasm
deleted file mode 100644
index ede3bc6..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-          %S = OpTypeStruct %uint %float %_arr_uint_uint_2
-     %uint_0 = OpConstant %uint 0
-    %float_0 = OpConstant %float 0
-          %8 = OpConstantComposite %_arr_uint_uint_2 %uint_0 %uint_0
-          %9 = OpConstantComposite %S %uint_0 %float_0 %8
-%_ptr_Private_S = OpTypePointer Private %S
-      %x_200 = OpVariable %_ptr_Private_S Private %9
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.wgsl
deleted file mode 100644
index 46c9e52..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_StructNullInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_200 : S = S(0u, 0.0, array<u32, 2>(0u, 0u));
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 3bd690c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static bool2 x_200 = bool2(false, false);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.spvasm
deleted file mode 100644
index 2b85452..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-      %false = OpConstantFalse %bool
-          %4 = OpConstantComposite %v2bool %false %false
-%_ptr_Private_v2bool = OpTypePointer Private %v2bool
-      %x_200 = OpVariable %_ptr_Private_v2bool Private %4
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.wgsl
deleted file mode 100644
index 7d0f3a4..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorBoolNullInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : vec2<bool> = vec2<bool>(false, false);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 09fde37..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static float2 x_200 = float2(0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.spvasm
deleted file mode 100644
index a9c49dd..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-    %float_0 = OpConstant %float 0
-          %4 = OpConstantComposite %v2float %float_0 %float_0
-%_ptr_Private_v2float = OpTypePointer Private %v2float
-      %x_200 = OpVariable %_ptr_Private_v2float Private %4
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.wgsl
deleted file mode 100644
index e4716f3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorFloatNullInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : vec2<f32> = vec2<f32>(0.0, 0.0);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 64afda1..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static float2 x_200 = float2(1.5f, 2.0f);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.spvasm
deleted file mode 100644
index 390aea8..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-  %float_1_5 = OpConstant %float 1.5
-    %float_2 = OpConstant %float 2
-          %5 = OpConstantComposite %v2float %float_1_5 %float_2
-%_ptr_Private_v2float = OpTypePointer Private %v2float
-      %x_200 = OpVariable %_ptr_Private_v2float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.wgsl
deleted file mode 100644
index 5317c3c..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : vec2<f32> = vec2<f32>(1.5, 2.0);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.hlsl
deleted file mode 100644
index f241300..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static int2 x_200 = int2(0, 0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.spvasm
deleted file mode 100644
index 73eb146..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_0 = OpConstant %int 0
-          %4 = OpConstantComposite %v2int %int_0 %int_0
-%_ptr_Private_v2int = OpTypePointer Private %v2int
-      %x_200 = OpVariable %_ptr_Private_v2int Private %4
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.wgsl
deleted file mode 100644
index f602218..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorIntNullInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : vec2<i32> = vec2<i32>(0, 0);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 0fb91cc..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint2 x_200 = uint2(0u, 0u);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.spvasm
deleted file mode 100644
index 3374b53..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %uint_0 = OpConstant %uint 0
-          %4 = OpConstantComposite %v2uint %uint_0 %uint_0
-%_ptr_Private_v2uint = OpTypePointer Private %v2uint
-      %x_200 = OpVariable %_ptr_Private_v2uint Private %4
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.wgsl
deleted file mode 100644
index c248ed3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VectorUintNullInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> x_200 : vec2<u32> = vec2<u32>(0u, 0u);
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index d642d96..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static int x_4 = 0;
-static float4 x_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_VertexID;
-};
-struct tint_symbol_2 {
-  float4 x_1_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = asint(x_4_param);
-  main_1();
-  const main_out tint_symbol_3 = {x_1};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.msl
deleted file mode 100644
index b65c953..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_1 [[position]];
-};
-
-void main_1(thread int* const tint_symbol_3) {
-  int const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = as_type<int>(x_4_param);
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[vertex_id]]) {
-  thread int tint_symbol_6 = 0;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index 7a2afa5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %x_1_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn VertexIndex
-               OpDecorate %x_1_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_1_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %15 = OpConstantNull %int
-        %x_4 = OpVariable %_ptr_Private_int Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_1 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %23 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %22 = OpLoad %int %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %23
-  %x_4_param = OpFunctionParameter %uint
-         %27 = OpLabel
-         %28 = OpBitcast %int %x_4_param
-               OpStore %x_4 %28
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %x_1
-         %31 = OpCompositeConstruct %main_out %30
-               OpReturnValue %31
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %33 = OpLabel
-         %35 = OpLoad %uint %x_4_param_1
-         %34 = OpFunctionCall %main_out %main_inner %35
-         %36 = OpCompositeExtract %v4float %34 0
-               OpStore %x_1_1_1 %36
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 43d88d3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : i32;
-
-var<private> x_1 : vec4<f32>;
-
-fn main_1() {
-  let x_2 : i32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_1_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] x_4_param : u32) -> main_out {
-  x_4 = bitcast<i32>(x_4_param);
-  main_1();
-  return main_out(x_1);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index d642d96..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static int x_4 = 0;
-static float4 x_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_VertexID;
-};
-struct tint_symbol_2 {
-  float4 x_1_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = asint(x_4_param);
-  main_1();
-  const main_out tint_symbol_3 = {x_1};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.msl
deleted file mode 100644
index b65c953..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_1 [[position]];
-};
-
-void main_1(thread int* const tint_symbol_3) {
-  int const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = as_type<int>(x_4_param);
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[vertex_id]]) {
-  thread int tint_symbol_6 = 0;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index 7a2afa5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %x_1_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn VertexIndex
-               OpDecorate %x_1_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_1_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %15 = OpConstantNull %int
-        %x_4 = OpVariable %_ptr_Private_int Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_1 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %23 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %22 = OpLoad %int %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %23
-  %x_4_param = OpFunctionParameter %uint
-         %27 = OpLabel
-         %28 = OpBitcast %int %x_4_param
-               OpStore %x_4 %28
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %x_1
-         %31 = OpCompositeConstruct %main_out %30
-               OpReturnValue %31
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %33 = OpLabel
-         %35 = OpLoad %uint %x_4_param_1
-         %34 = OpFunctionCall %main_out %main_inner %35
-         %36 = OpCompositeExtract %v4float %34 0
-               OpStore %x_1_1_1 %36
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index 44937db..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> x_4 : i32;
-
-var<private> x_1 : vec4<f32>;
-
-fn main_1() {
-  let x_14 : ptr<private, i32> = &(x_4);
-  let x_2 : i32 = *(x_14);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_1_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] x_4_param : u32) -> main_out {
-  x_4 = bitcast<i32>(x_4_param);
-  main_1();
-  return main_out(x_1);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.hlsl
deleted file mode 100644
index d642d96..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static int x_4 = 0;
-static float4 x_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_VertexID;
-};
-struct tint_symbol_2 {
-  float4 x_1_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = asint(x_4_param);
-  main_1();
-  const main_out tint_symbol_3 = {x_1};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.msl
deleted file mode 100644
index b65c953..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_1 [[position]];
-};
-
-void main_1(thread int* const tint_symbol_3) {
-  int const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = as_type<int>(x_4_param);
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[vertex_id]]) {
-  thread int tint_symbol_6 = 0;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.spvasm
deleted file mode 100644
index 7a2afa5..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %x_1_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn VertexIndex
-               OpDecorate %x_1_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_1_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %15 = OpConstantNull %int
-        %x_4 = OpVariable %_ptr_Private_int Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_1 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %23 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %22 = OpLoad %int %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %23
-  %x_4_param = OpFunctionParameter %uint
-         %27 = OpLabel
-         %28 = OpBitcast %int %x_4_param
-               OpStore %x_4 %28
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %x_1
-         %31 = OpCompositeConstruct %main_out %30
-               OpReturnValue %31
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %33 = OpLabel
-         %35 = OpLoad %uint %x_4_param_1
-         %34 = OpFunctionCall %main_out %main_inner %35
-         %36 = OpCompositeExtract %v4float %34 0
-               OpStore %x_1_1_1 %36
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.wgsl
deleted file mode 100644
index 43d88d3..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_I32_Load_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : i32;
-
-var<private> x_1 : vec4<f32>;
-
-fn main_1() {
-  let x_2 : i32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_1_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] x_4_param : u32) -> main_out {
-  x_4 = bitcast<i32>(x_4_param);
-  main_1();
-  return main_out(x_1);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 2fa3cdf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static uint x_4 = 0u;
-static float4 x_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_VertexID;
-};
-struct tint_symbol_2 {
-  float4 x_1_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = x_4_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_1};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.msl
deleted file mode 100644
index 000b942..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_1 [[position]];
-};
-
-void main_1(thread uint* const tint_symbol_3) {
-  uint const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = x_4_param;
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[vertex_id]]) {
-  thread uint tint_symbol_6 = 0u;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.spvasm
deleted file mode 100644
index 09aa967..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %x_1_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn VertexIndex
-               OpDecorate %x_1_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_1_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpConstantNull %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_1 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %22 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %uint %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %22
-  %x_4_param = OpFunctionParameter %uint
-         %26 = OpLabel
-               OpStore %x_4 %x_4_param
-         %27 = OpFunctionCall %void %main_1
-         %28 = OpLoad %v4float %x_1
-         %29 = OpCompositeConstruct %main_out %28
-               OpReturnValue %29
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %31 = OpLabel
-         %33 = OpLoad %uint %x_4_param_1
-         %32 = OpFunctionCall %main_out %main_inner %33
-         %34 = OpCompositeExtract %v4float %32 0
-               OpStore %x_1_1_1 %34
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.wgsl
deleted file mode 100644
index ef5bf46..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_AccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : u32;
-
-var<private> x_1 : vec4<f32>;
-
-fn main_1() {
-  let x_2 : u32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_1_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] x_4_param : u32) -> main_out {
-  x_4 = x_4_param;
-  main_1();
-  return main_out(x_1);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index 2fa3cdf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static uint x_4 = 0u;
-static float4 x_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_VertexID;
-};
-struct tint_symbol_2 {
-  float4 x_1_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = x_4_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_1};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.msl
deleted file mode 100644
index 000b942..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_1 [[position]];
-};
-
-void main_1(thread uint* const tint_symbol_3) {
-  uint const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = x_4_param;
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[vertex_id]]) {
-  thread uint tint_symbol_6 = 0u;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index 09aa967..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %x_1_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn VertexIndex
-               OpDecorate %x_1_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_1_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpConstantNull %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_1 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %22 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %uint %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %22
-  %x_4_param = OpFunctionParameter %uint
-         %26 = OpLabel
-               OpStore %x_4 %x_4_param
-         %27 = OpFunctionCall %void %main_1
-         %28 = OpLoad %v4float %x_1
-         %29 = OpCompositeConstruct %main_out %28
-               OpReturnValue %29
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %31 = OpLabel
-         %33 = OpLoad %uint %x_4_param_1
-         %32 = OpFunctionCall %main_out %main_inner %33
-         %34 = OpCompositeExtract %v4float %32 0
-               OpStore %x_1_1_1 %34
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index cf6e07a..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> x_4 : u32;
-
-var<private> x_1 : vec4<f32>;
-
-fn main_1() {
-  let x_14 : ptr<private, u32> = &(x_4);
-  let x_2 : u32 = *(x_14);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_1_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] x_4_param : u32) -> main_out {
-  x_4 = x_4_param;
-  main_1();
-  return main_out(x_1);
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.hlsl
deleted file mode 100644
index 2fa3cdf..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static uint x_4 = 0u;
-static float4 x_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint x_2 = x_4;
-  return;
-}
-
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  uint x_4_param : SV_VertexID;
-};
-struct tint_symbol_2 {
-  float4 x_1_1 : SV_Position;
-};
-
-main_out main_inner(uint x_4_param) {
-  x_4 = x_4_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_1};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_4_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.msl
deleted file mode 100644
index 000b942..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_1_1;
-};
-struct tint_symbol_1 {
-  float4 x_1_1 [[position]];
-};
-
-void main_1(thread uint* const tint_symbol_3) {
-  uint const x_2 = *(tint_symbol_3);
-  return;
-}
-
-main_out tint_symbol_inner(uint x_4_param, thread uint* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = x_4_param;
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_1_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol(uint x_4_param [[vertex_id]]) {
-  thread uint tint_symbol_6 = 0u;
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_4_param, &(tint_symbol_6), &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_1_1 = inner_result.x_1_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.spvasm
deleted file mode 100644
index 09aa967..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_4_param_1 %x_1_1_1 %vertex_point_size
-               OpName %x_4_param_1 "x_4_param_1"
-               OpName %x_1_1_1 "x_1_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_4 "x_4"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_1_1"
-               OpName %main_inner "main_inner"
-               OpName %x_4_param "x_4_param"
-               OpName %main "main"
-               OpDecorate %x_4_param_1 BuiltIn VertexIndex
-               OpDecorate %x_1_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-       %uint = OpTypeInt 32 0
-%_ptr_Input_uint = OpTypePointer Input %uint
-%x_4_param_1 = OpVariable %_ptr_Input_uint Input
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-    %x_1_1_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpConstantNull %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_1 = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %22 = OpTypeFunction %main_out %uint
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %uint %x_4
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %22
-  %x_4_param = OpFunctionParameter %uint
-         %26 = OpLabel
-               OpStore %x_4 %x_4_param
-         %27 = OpFunctionCall %void %main_1
-         %28 = OpLoad %v4float %x_1
-         %29 = OpCompositeConstruct %main_out %28
-               OpReturnValue %29
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %31 = OpLabel
-         %33 = OpLoad %uint %x_4_param_1
-         %32 = OpFunctionCall %main_out %main_inner %33
-         %34 = OpCompositeExtract %v4float %32 0
-               OpStore %x_1_1_1 %34
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.wgsl
deleted file mode 100644
index ef5bf46..0000000
--- a/test/unittest/reader/spirv/SpvModuleScopeVarParserTest_VertexIndex_U32_Load_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> x_4 : u32;
-
-var<private> x_1 : vec4<f32>;
-
-fn main_1() {
-  let x_2 : u32 = x_4;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_1_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[builtin(vertex_index)]] x_4_param : u32) -> main_out {
-  x_4 = x_4_param;
-  main_1();
-  return main_out(x_1);
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsHeader.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_MultiBlockContinueConstruct_ContinueIsNotHeader.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_MultiBlockLoop_SingleBlockContinueConstruct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_BackEdge_SingleBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.hlsl
deleted file mode 100644
index 4db0e46..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 40u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.msl
deleted file mode 100644
index 15a5536..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      /* fallthrough */
-    }
-    case 40u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.spvasm
deleted file mode 100644
index e591acf..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12 40 %13
-         %12 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.wgsl
deleted file mode 100644
index 6c1a4a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      fallthrough;
-    }
-    case 40u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.hlsl
deleted file mode 100644
index debf902..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.msl
deleted file mode 100644
index 5a8b82a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      /* fallthrough */
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.spvasm
deleted file mode 100644
index 98443a8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.wgsl
deleted file mode 100644
index 0871e80..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_CaseTailToDefaultNotMerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      fallthrough;
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.hlsl
deleted file mode 100644
index 9513a68..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    default: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 40u: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.msl
deleted file mode 100644
index bdb9c18..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    default: {
-      /* fallthrough */
-    }
-    case 40u: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.spvasm
deleted file mode 100644
index 2a1a8ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 40 %12
-         %11 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.wgsl
deleted file mode 100644
index c29337c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Fallthrough_DefaultToCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    default: {
-      fallthrough;
-    }
-    case 40u: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToElse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_IfToThen.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_LoopHeadToBody.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.hlsl
deleted file mode 100644
index b37d337..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.msl
deleted file mode 100644
index 9ea19ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.spvasm
deleted file mode 100644
index 53e2006..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.wgsl
deleted file mode 100644
index fe32b0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.hlsl
deleted file mode 100644
index b37d337..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.msl
deleted file mode 100644
index 9ea19ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.spvasm
deleted file mode 100644
index 53e2006..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.wgsl
deleted file mode 100644
index fe32b0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Forward_SwitchToDefaultNotMerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.hlsl
deleted file mode 100644
index 430e5fb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,23 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  bool guard10 = true;
-  if (false) {
-    guard10 = false;
-  } else {
-    if (guard10) {
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        guard10 = false;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.msl
deleted file mode 100644
index 767c027..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool guard10 = true;
-  if (false) {
-    guard10 = false;
-  } else {
-    if (guard10) {
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        guard10 = false;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.spvasm
deleted file mode 100644
index fe77433..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,62 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %guard10 "guard10"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %13 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-    %guard10 = OpVariable %_ptr_Function_bool Function %13
-               OpStore %guard10 %true
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %15
-         %17 = OpLabel
-         %18 = OpLoad %bool %guard10
-               OpSelectionMerge %19 None
-               OpBranchConditional %18 %20 %19
-         %20 = OpLabel
-               OpSelectionMerge %21 None
-               OpBranchConditional %true %22 %21
-         %22 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %21
-         %21 = OpLabel
-         %23 = OpLoad %bool %guard10
-               OpSelectionMerge %24 None
-               OpBranchConditional %23 %25 %24
-         %25 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %24
-         %24 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.wgsl
deleted file mode 100644
index 6fd58e4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var guard10 : bool = true;
-  if (false) {
-    guard10 = false;
-  } else {
-    if (guard10) {
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        guard10 = false;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfHeader.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromIfThenElse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.hlsl
deleted file mode 100644
index c15b476..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  bool guard10 = true;
-  if (false) {
-    if (true) {
-      guard10 = false;
-    }
-    if (guard10) {
-      guard10 = false;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.msl
deleted file mode 100644
index 34e2408..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool guard10 = true;
-  if (false) {
-    if (true) {
-      guard10 = false;
-    }
-    if (guard10) {
-      guard10 = false;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.spvasm
deleted file mode 100644
index 7368bda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %guard10 "guard10"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %13 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-    %guard10 = OpVariable %_ptr_Function_bool Function %13
-               OpStore %guard10 %true
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpSelectionMerge %17 None
-               OpBranchConditional %true %18 %17
-         %18 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %17
-         %17 = OpLabel
-         %19 = OpLoad %bool %guard10
-               OpSelectionMerge %20 None
-               OpBranchConditional %19 %21 %20
-         %21 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %20
-         %20 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.wgsl
deleted file mode 100644
index 7d8850b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var guard10 : bool = true;
-  if (false) {
-    if (true) {
-      guard10 = false;
-    }
-    if (guard10) {
-      guard10 = false;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.msl
deleted file mode 100644
index bb14141..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.spvasm
deleted file mode 100644
index 393929c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranchConditional %true %9 %10
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.wgsl
deleted file mode 100644
index 99f5532..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructHeader.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-
-    continuing {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.msl
deleted file mode 100644
index bb14141..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.spvasm
deleted file mode 100644
index 393929c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranchConditional %true %9 %10
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.wgsl
deleted file mode 100644
index 99f5532..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromContinueConstructTail.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-
-    continuing {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.hlsl
deleted file mode 100644
index 56dedb5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.msl
deleted file mode 100644
index 11d5e00..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.spvasm
deleted file mode 100644
index 21d52a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %21
-         %20 = OpLabel
-               OpBranch %19
-         %21 = OpLabel
-               OpBranch %10
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.wgsl
deleted file mode 100644
index 5b862df..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBody.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.msl
deleted file mode 100644
index baeb119..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.spvasm
deleted file mode 100644
index d7eea0c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.wgsl
deleted file mode 100644
index 304252c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyDirect.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.hlsl
deleted file mode 100644
index 9a2183e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      if (false) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.msl
deleted file mode 100644
index 1f53e06..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      if (false) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.spvasm
deleted file mode 100644
index ca2cb6b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,56 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpSelectionMerge %21 None
-               OpBranchConditional %false %22 %21
-         %22 = OpLabel
-               OpBranch %10
-         %21 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.wgsl
deleted file mode 100644
index edd72ad..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Conditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      if (false) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.hlsl
deleted file mode 100644
index c38af3d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.msl
deleted file mode 100644
index 8f73d74..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.spvasm
deleted file mode 100644
index f6d8364..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %10
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.wgsl
deleted file mode 100644
index ff57f2f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopBodyNestedSelection_Unconditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_MultiBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_FalseBranch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.msl
deleted file mode 100644
index fc2a957..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.spvasm
deleted file mode 100644
index e406af2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.wgsl
deleted file mode 100644
index d089493..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.hlsl
deleted file mode 100644
index 71e94e8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.msl
deleted file mode 100644
index e5c85e6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.spvasm
deleted file mode 100644
index 6553da9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,56 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpSelectionMerge %21 None
-               OpBranchConditional %true %22 %21
-         %22 = OpLabel
-               OpBranch %11
-         %21 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.wgsl
deleted file mode 100644
index bb1bf7c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_ConditionalFromNestedIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.hlsl
deleted file mode 100644
index 218e1b3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.msl
deleted file mode 100644
index e83d11c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.spvasm
deleted file mode 100644
index 0a750f4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %11
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.wgsl
deleted file mode 100644
index dd4e390..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.hlsl
deleted file mode 100644
index 59c7c7a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 40u: {
-        continue;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.msl
deleted file mode 100644
index 96c7549..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 40u: {
-        continue;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.spvasm
deleted file mode 100644
index db9c97e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %18 None
-               OpSwitch %uint_42 %20 40 %21
-         %21 = OpLabel
-               OpBranch %11
-         %20 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.wgsl
deleted file mode 100644
index 1373cbd..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchCaseBody_Unconditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 40u: {
-        continue;
-      }
-      default: {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.hlsl
deleted file mode 100644
index 89ab524..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      default: {
-        if (true) {
-          continue;
-        }
-        break;
-      }
-      case 79u: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.msl
deleted file mode 100644
index 95ee233..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      default: {
-        if (true) {
-          continue;
-        }
-        break;
-      }
-      case 79u: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.spvasm
deleted file mode 100644
index e3cc162..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 28
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_42 = OpConstant %uint 42
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %18 None
-               OpSwitch %uint_42 %20 79 %21
-         %20 = OpLabel
-               OpSelectionMerge %23 None
-               OpBranchConditional %true %24 %23
-         %24 = OpLabel
-               OpBranch %11
-         %23 = OpLabel
-               OpBranch %18
-         %21 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.wgsl
deleted file mode 100644
index 6f6fe49..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Conditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      default: {
-        if (true) {
-          continue;
-        }
-      }
-      case 79u: {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.hlsl
deleted file mode 100644
index 260d523..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      default: {
-        continue;
-        break;
-      }
-      case 79u: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.msl
deleted file mode 100644
index 88b3e07..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      default: {
-        continue;
-        break;
-      }
-      case 79u: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.spvasm
deleted file mode 100644
index baeafde..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %18 None
-               OpSwitch %uint_42 %20 79 %21
-         %20 = OpLabel
-               OpBranch %11
-         %21 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.wgsl
deleted file mode 100644
index a419125..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_FromNestedSwitchDefaultBody_Unconditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      default: {
-        continue;
-      }
-      case 79u: {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopContinue_LoopBodyToContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.hlsl
deleted file mode 100644
index 57f0f07..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.msl
deleted file mode 100644
index f88292d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.spvasm
deleted file mode 100644
index e19655c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %10
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.wgsl
deleted file mode 100644
index aacd780..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_LoopHeadSplitBody.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      break;
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.hlsl
deleted file mode 100644
index 6280e0e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.msl
deleted file mode 100644
index ec038a3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.spvasm
deleted file mode 100644
index 0979ee2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpSelectionMerge %14 None
-               OpBranchConditional %true %15 %14
-         %15 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.wgsl
deleted file mode 100644
index 4abd08f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Premerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_Pathological_Forward_Regardless.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.hlsl
deleted file mode 100644
index 41886eb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,23 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        if (true) {
-          break;
-        }
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.msl
deleted file mode 100644
index 1a544d2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        if (true) {
-          break;
-        }
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.spvasm
deleted file mode 100644
index 0831e97..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,48 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpSelectionMerge %18 None
-               OpBranchConditional %true %19 %18
-         %19 = OpLabel
-               OpBranch %9
-         %18 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.wgsl
deleted file mode 100644
index 0c8d1d8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Conditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        if (true) {
-          break;
-        }
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.hlsl
deleted file mode 100644
index ed2ddf8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.msl
deleted file mode 100644
index e585500..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.spvasm
deleted file mode 100644
index 7da6bfc..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %9
-         %15 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.wgsl
deleted file mode 100644
index 7b0b3d3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromNestedIf_Unconditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.hlsl
deleted file mode 100644
index b37d337..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.msl
deleted file mode 100644
index 9ea19ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.spvasm
deleted file mode 100644
index 53e2006..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.wgsl
deleted file mode 100644
index fe32b0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseBody.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.hlsl
deleted file mode 100644
index f198b00..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    default: {
-      break;
-    }
-    case 20u: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.msl
deleted file mode 100644
index 58c4499..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    default: {
-      break;
-    }
-    case 20u: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.spvasm
deleted file mode 100644
index 689eb89..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %11 = OpLabel
-               OpBranch %9
-         %12 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.wgsl
deleted file mode 100644
index ef47d68..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchCaseDirect.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    default: {
-    }
-    case 20u: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.hlsl
deleted file mode 100644
index b37d337..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.msl
deleted file mode 100644
index 9ea19ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.spvasm
deleted file mode 100644
index 53e2006..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.wgsl
deleted file mode 100644
index fe32b0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultBody.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.hlsl
deleted file mode 100644
index b37d337..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.msl
deleted file mode 100644
index 9ea19ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.spvasm
deleted file mode 100644
index 53e2006..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.wgsl
deleted file mode 100644
index fe32b0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_SwitchBreak_FromSwitchDefaultIsMerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_DupConditionalBranch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_FalseOnlyBranch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_IgnoreStaticalyUnreachable.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.hlsl
deleted file mode 100644
index 856a956..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  discard;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.msl
deleted file mode 100644
index f5d3c1b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  discard_fragment();
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.spvasm
deleted file mode 100644
index 8b592e7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpKill
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.wgsl
deleted file mode 100644
index dfd6d9e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_KillIsDeadEnd.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  discard;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.msl
deleted file mode 100644
index baeb119..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.spvasm
deleted file mode 100644
index d7eea0c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.wgsl
deleted file mode 100644
index 304252c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreak.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.hlsl
deleted file mode 100644
index c38af3d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.msl
deleted file mode 100644
index 8f73d74..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.spvasm
deleted file mode 100644
index f6d8364..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %10
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.wgsl
deleted file mode 100644
index ff57f2f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.hlsl
deleted file mode 100644
index 56dedb5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.msl
deleted file mode 100644
index 11d5e00..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.spvasm
deleted file mode 100644
index 21d52a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %21
-         %20 = OpLabel
-               OpBranch %19
-         %21 = OpLabel
-               OpBranch %10
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.wgsl
deleted file mode 100644
index 5b862df..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasBreakUnless.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.hlsl
deleted file mode 100644
index 218e1b3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.msl
deleted file mode 100644
index e83d11c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.spvasm
deleted file mode 100644
index 0a750f4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %11
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.wgsl
deleted file mode 100644
index dd4e390..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.hlsl
deleted file mode 100644
index b81a2e5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.msl
deleted file mode 100644
index 44b0a05..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.spvasm
deleted file mode 100644
index 6ccc679..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %21
-         %20 = OpLabel
-               OpBranch %19
-         %21 = OpLabel
-               OpBranch %11
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.wgsl
deleted file mode 100644
index 1f6d3c3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_BodyHasContinueUnless.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.hlsl
deleted file mode 100644
index aca28ce..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.msl
deleted file mode 100644
index 3d8920a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.spvasm
deleted file mode 100644
index 84909b2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.wgsl
deleted file mode 100644
index 3ce9f4e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.hlsl
deleted file mode 100644
index c38af3d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.msl
deleted file mode 100644
index 8f73d74..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.spvasm
deleted file mode 100644
index f6d8364..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %10
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.wgsl
deleted file mode 100644
index ff57f2f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Break.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.hlsl
deleted file mode 100644
index 218e1b3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.msl
deleted file mode 100644
index e83d11c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.spvasm
deleted file mode 100644
index 0a750f4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %11
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.wgsl
deleted file mode 100644
index dd4e390..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_If_Continue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.hlsl
deleted file mode 100644
index 514e583..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 45u: {
-        break;
-      }
-      case 40u: {
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.msl
deleted file mode 100644
index b6fc2ae..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 45u: {
-        break;
-      }
-      case 40u: {
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.spvasm
deleted file mode 100644
index e2b50d5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,55 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %18 None
-               OpSwitch %uint_42 %20 45 %21 40 %22
-         %21 = OpLabel
-               OpBranch %18
-         %22 = OpLabel
-               OpBranch %18
-         %20 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.wgsl
deleted file mode 100644
index 8083282..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 45u: {
-      }
-      case 40u: {
-      }
-      default: {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.hlsl
deleted file mode 100644
index 969b7d5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 45u: {
-        break;
-      }
-      case 40u: {
-        continue;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.msl
deleted file mode 100644
index 12d13bb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 45u: {
-        break;
-      }
-      case 40u: {
-        continue;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.spvasm
deleted file mode 100644
index 3501c09..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.spvasm
+++ /dev/null
@@ -1,55 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %18 None
-               OpSwitch %uint_42 %20 45 %21 40 %22
-         %21 = OpLabel
-               OpBranch %18
-         %22 = OpLabel
-               OpBranch %11
-         %20 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.wgsl
deleted file mode 100644
index 593d512..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Body_Switch_CaseContinues.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    switch(42u) {
-      case 45u: {
-      }
-      case 40u: {
-        continue;
-      }
-      default: {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.hlsl
deleted file mode 100644
index b39c5d2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      if (true) {
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.msl
deleted file mode 100644
index a4a4352..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      if (true) {
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.spvasm
deleted file mode 100644
index 0ca7bb7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.wgsl
deleted file mode 100644
index 6dc2d6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_ContainsIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-
-    continuing {
-      if (true) {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.msl
deleted file mode 100644
index 7c96331..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      if (true) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.spvasm
deleted file mode 100644
index 66942c2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranchConditional %true %10 %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.wgsl
deleted file mode 100644
index 2af2019..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-
-    continuing {
-      if (true) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.msl
deleted file mode 100644
index bb14141..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.spvasm
deleted file mode 100644
index 393929c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranchConditional %true %9 %10
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.wgsl
deleted file mode 100644
index 99f5532..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_HasBreakUnless.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-
-    continuing {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Continue_Sequence.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.msl
deleted file mode 100644
index fc2a957..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.spvasm
deleted file mode 100644
index e406af2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.wgsl
deleted file mode 100644
index d089493..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.hlsl
deleted file mode 100644
index 56c69c8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.msl
deleted file mode 100644
index 82f6bba..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.spvasm
deleted file mode 100644
index 60462be..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,62 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-               OpSelectionMerge %23 None
-               OpBranchConditional %true %24 %25
-         %24 = OpLabel
-               OpBranch %23
-         %25 = OpLabel
-               OpBranch %19
-         %23 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpBranch %18
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.wgsl
deleted file mode 100644
index de05e86..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.hlsl
deleted file mode 100644
index d22165f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      if (false) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.msl
deleted file mode 100644
index 6432e87..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      if (false) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.spvasm
deleted file mode 100644
index 074475e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 31
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-               OpSelectionMerge %23 None
-               OpBranchConditional %true %24 %25
-         %24 = OpLabel
-               OpBranch %23
-         %25 = OpLabel
-               OpBranch %19
-         %23 = OpLabel
-               OpSelectionMerge %26 None
-               OpBranchConditional %false %27 %26
-         %27 = OpLabel
-               OpBranch %19
-         %26 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpBranch %18
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.wgsl
deleted file mode 100644
index d79060f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerBreak.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-      if (false) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.hlsl
deleted file mode 100644
index f51bd41..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.msl
deleted file mode 100644
index 8ec3732..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.spvasm
deleted file mode 100644
index f8d4894..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-               OpSelectionMerge %23 None
-               OpBranchConditional %true %24 %25
-         %24 = OpLabel
-               OpBranch %23
-         %25 = OpLabel
-               OpBranch %19
-         %23 = OpLabel
-               OpSelectionMerge %26 None
-               OpBranchConditional %false %27 %28
-         %27 = OpLabel
-               OpBranch %26
-         %28 = OpLabel
-               OpBranch %19
-         %26 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpBranch %18
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.wgsl
deleted file mode 100644
index c39e75b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.hlsl
deleted file mode 100644
index 72d7f4f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.msl
deleted file mode 100644
index 3785f50..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.spvasm
deleted file mode 100644
index e0cae50..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.spvasm
+++ /dev/null
@@ -1,62 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-               OpSelectionMerge %23 None
-               OpBranchConditional %true %24 %25
-         %24 = OpLabel
-               OpBranch %23
-         %25 = OpLabel
-               OpBranch %19
-         %23 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpBranchConditional %false %18 %19
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.wgsl
deleted file mode 100644
index f59ea7d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_Loop_InnerContinueBreaks.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-
-      continuing {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.msl
deleted file mode 100644
index 598fdda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.spvasm
deleted file mode 100644
index abe0206..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.wgsl
deleted file mode 100644
index 8c64952..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_DupInfinite.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.msl
deleted file mode 100644
index 598fdda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.spvasm
deleted file mode 100644
index abe0206..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.wgsl
deleted file mode 100644
index 8c64952..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Infinite.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_SingleBlock_Simple.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.hlsl
deleted file mode 100644
index 2c99195..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-      break;
-    }
-    default: {
-      /* fallthrough */
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      break;
-    }
-    case 50u: {
-      if (false) {
-      } else {
-        break;
-      }
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.msl
deleted file mode 100644
index e9200c2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-      break;
-    }
-    default: {
-      /* fallthrough */
-    }
-    case 50u: {
-      if (false) {
-      } else {
-        break;
-      }
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.spvasm
deleted file mode 100644
index 26fad70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12 50 %13
-         %12 = OpLabel
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %16
-         %17 = OpLabel
-               OpBranch %9
-         %16 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %20
-         %19 = OpLabel
-               OpBranch %18
-         %20 = OpLabel
-               OpBranch %9
-         %18 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.wgsl
deleted file mode 100644
index 1e8916d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfBreak_In_SwitchCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-    }
-    default: {
-      fallthrough;
-    }
-    case 50u: {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.hlsl
deleted file mode 100644
index 7f1c3f1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-      }
-      if (false) {
-        break;
-      }
-      /* fallthrough */
-      {
-        /* fallthrough */
-      }
-      {
-        if (false) {
-        }
-      }
-      break;
-    }
-    default: {
-      /* fallthrough */
-      {
-        if (false) {
-        }
-      }
-      break;
-    }
-    case 50u: {
-      if (false) {
-      }
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.msl
deleted file mode 100644
index 7b508c8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-      }
-      if (false) {
-        break;
-      }
-      /* fallthrough */
-    }
-    default: {
-      /* fallthrough */
-    }
-    case 50u: {
-      if (false) {
-      }
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.spvasm
deleted file mode 100644
index 85b1596..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12 50 %13
-         %12 = OpLabel
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %16
-         %17 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %18
-         %19 = OpLabel
-               OpBranch %9
-         %18 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpSelectionMerge %20 None
-               OpBranchConditional %false %21 %20
-         %21 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.wgsl
deleted file mode 100644
index 7013479..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_IfFallthrough_In_SwitchCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-      }
-      if (false) {
-        break;
-      }
-      fallthrough;
-    }
-    default: {
-      fallthrough;
-    }
-    case 50u: {
-      if (false) {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.hlsl
deleted file mode 100644
index 1739c33..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    if (false) {
-    }
-  } else {
-    if (false) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.msl
deleted file mode 100644
index 2384b83..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-    if (false) {
-    }
-  } else {
-    if (false) {
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.spvasm
deleted file mode 100644
index 6704967..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %13
-         %12 = OpLabel
-               OpSelectionMerge %14 None
-               OpBranchConditional %false %15 %14
-         %15 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpBranch %11
-         %13 = OpLabel
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %16
-         %17 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.wgsl
deleted file mode 100644
index f60e6ae..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_Contains_If.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    if (false) {
-    }
-  } else {
-    if (false) {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.hlsl
deleted file mode 100644
index 58535aa..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-      }
-      break;
-    }
-    default: {
-      /* fallthrough */
-      {
-        if (false) {
-        }
-      }
-      break;
-    }
-    case 50u: {
-      if (false) {
-      }
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.msl
deleted file mode 100644
index df4749b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-      }
-      break;
-    }
-    default: {
-      /* fallthrough */
-    }
-    case 50u: {
-      if (false) {
-      }
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.spvasm
deleted file mode 100644
index 602dc8b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12 50 %13
-         %12 = OpLabel
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %16
-         %17 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %18
-         %19 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.wgsl
deleted file mode 100644
index fdc8189..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Nest_If_In_SwitchCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      if (false) {
-      }
-    }
-    default: {
-      fallthrough;
-    }
-    case 50u: {
-      if (false) {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_OneBlock.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.hlsl
deleted file mode 100644
index b109634..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.hlsl
+++ /dev/null
@@ -1,15 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-    return;
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.msl
deleted file mode 100644
index 04dcab3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-    return;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.spvasm
deleted file mode 100644
index 021ce3f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpSelectionMerge %14 None
-               OpBranchConditional %true %15 %14
-         %15 = OpLabel
-               OpReturn
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.wgsl
deleted file mode 100644
index a4faff3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_ReorderSequence.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  if (true) {
-    return;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.hlsl
deleted file mode 100644
index 7c3b265..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  } else {
-    return;
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.msl
deleted file mode 100644
index 3d70851..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  } else {
-    return;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.spvasm
deleted file mode 100644
index 782c4e6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %13
-         %12 = OpLabel
-               OpBranch %11
-         %13 = OpLabel
-               OpReturn
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.wgsl
deleted file mode 100644
index 13fa49d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectConditionalBranchOrder.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  } else {
-    return;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.hlsl
deleted file mode 100644
index 2577571..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 50u: {
-      break;
-    }
-    case 20u: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 40u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.msl
deleted file mode 100644
index 151be92..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      /* fallthrough */
-    }
-    case 50u: {
-      break;
-    }
-    case 20u: {
-      /* fallthrough */
-    }
-    case 40u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.spvasm
deleted file mode 100644
index 5a7d864..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 30 %12 50 %13 20 %14 40 %15
-         %12 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpBranch %9
-         %14 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.wgsl
deleted file mode 100644
index 6e09415..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 30u: {
-      fallthrough;
-    }
-    case 50u: {
-    }
-    case 20u: {
-      fallthrough;
-    }
-    case 40u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.hlsl
deleted file mode 100644
index 1f6f81b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      /* fallthrough */
-      {
-        /* fallthrough */
-      }
-      {
-      }
-      break;
-    }
-    default: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 30u: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.msl
deleted file mode 100644
index 12098b9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      /* fallthrough */
-    }
-    default: {
-      /* fallthrough */
-    }
-    case 30u: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.spvasm
deleted file mode 100644
index 222e91c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12 30 %13
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.wgsl
deleted file mode 100644
index 8da965c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromCaseToDefaultToCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      fallthrough;
-    }
-    default: {
-      fallthrough;
-    }
-    case 30u: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.hlsl
deleted file mode 100644
index 945e968..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      /* fallthrough */
-      {
-        /* fallthrough */
-      }
-      {
-      }
-      break;
-    }
-    case 30u: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 40u: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.msl
deleted file mode 100644
index 98d92c0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      /* fallthrough */
-    }
-    case 30u: {
-      /* fallthrough */
-    }
-    case 40u: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.spvasm
deleted file mode 100644
index 985caf6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.spvasm
+++ /dev/null
@@ -1,39 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12 30 %13 40 %14
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.wgsl
deleted file mode 100644
index 3a77a68..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_FromDefault.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-      fallthrough;
-    }
-    case 30u: {
-      fallthrough;
-    }
-    case 40u: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.hlsl
deleted file mode 100644
index 2577571..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 50u: {
-      break;
-    }
-    case 20u: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 40u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.msl
deleted file mode 100644
index 151be92..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      /* fallthrough */
-    }
-    case 50u: {
-      break;
-    }
-    case 20u: {
-      /* fallthrough */
-    }
-    case 40u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.spvasm
deleted file mode 100644
index 5a7d864..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 30 %12 50 %13 20 %14 40 %15
-         %12 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpBranch %9
-         %14 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.wgsl
deleted file mode 100644
index 6e09415..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_RespectSwitchCaseFallthrough_Interleaved.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 30u: {
-      fallthrough;
-    }
-    case 50u: {
-    }
-    case 20u: {
-      fallthrough;
-    }
-    case 40u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.hlsl
deleted file mode 100644
index 9313bca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      return;
-      break;
-    }
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.msl
deleted file mode 100644
index 00308e9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      return;
-      break;
-    }
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.spvasm
deleted file mode 100644
index 8223142..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 30 %12 20 %13
-         %12 = OpLabel
-               OpReturn
-         %13 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.wgsl
deleted file mode 100644
index b96a786..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchOrderNaturallyReversed.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 30u: {
-      return;
-    }
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.hlsl
deleted file mode 100644
index 9313bca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      return;
-      break;
-    }
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.msl
deleted file mode 100644
index 00308e9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      return;
-      break;
-    }
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.spvasm
deleted file mode 100644
index 8223142..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 30 %12 20 %13
-         %12 = OpLabel
-               OpReturn
-         %13 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.wgsl
deleted file mode 100644
index b96a786..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_SwitchWithDefaultOrderNaturallyReversed.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 30u: {
-      return;
-    }
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.hlsl
deleted file mode 100644
index 07fe5eb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 40u: {
-      break;
-    }
-    case 20u: {
-      break;
-    }
-    default: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 30u: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.msl
deleted file mode 100644
index ee56619..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 40u: {
-      break;
-    }
-    case 20u: {
-      break;
-    }
-    default: {
-      /* fallthrough */
-    }
-    case 30u: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.spvasm
deleted file mode 100644
index 0280026..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,39 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 40 %12 20 %13 30 %14
-         %12 = OpLabel
-               OpBranch %9
-         %13 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.wgsl
deleted file mode 100644
index df36f07..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Switch_DefaultSameAsACase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 40u: {
-    }
-    case 20u: {
-    }
-    default: {
-      fallthrough;
-    }
-    case 30u: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_TrueOnlyBranch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_UnreachableIsDeadEnd.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.hlsl
deleted file mode 100644
index 9aa4fae..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  while (true) {
-    var_1 = 1u;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.msl
deleted file mode 100644
index 7b33b3f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index b7e1daf..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpBranchConditional %false %10 %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index 7b2d608..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.msl
deleted file mode 100644
index d43d445..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    {
-      if (false) {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index f42b5b6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpBranchConditional %false %11 %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index 62e60af..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_MultiBlock_LoopBreak_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-
-    continuing {
-      if (false) {
-        break;
-      }
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.msl
deleted file mode 100644
index 36e1a7c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.spvasm
deleted file mode 100644
index 235dbca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.wgsl
deleted file mode 100644
index 8a3597a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_Back.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.hlsl
deleted file mode 100644
index c02c601..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  while (true) {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.msl
deleted file mode 100644
index 7a859d1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index 7c6b9df..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %19
-         %18 = OpLabel
-               OpBranch %17
-         %19 = OpLabel
-               OpBranch %11
-         %17 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index 93701b8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.msl
deleted file mode 100644
index de9516f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index 2e57d72..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %17
-         %18 = OpLabel
-               OpBranch %11
-         %17 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index f103a4e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Back_SingleBlock_LoopBreak_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    if (false) {
-      break;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.msl
deleted file mode 100644
index 43efbe2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (true) {
-      *(tint_symbol_1) = 3u;
-      {
-        *(tint_symbol_1) = 5u;
-      }
-      continue;
-    }
-    *(tint_symbol_1) = 4u;
-    {
-      *(tint_symbol_1) = 5u;
-    }
-  }
-  *(tint_symbol_1) = 6u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.spvasm
deleted file mode 100644
index b0ed067..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %uint_6 = OpConstant %uint 6
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %true %19 %18
-         %19 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %18 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_5
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_6
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.wgsl
deleted file mode 100644
index 798257b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (true) {
-      var_1 = 3u;
-      continue;
-    }
-    var_1 = 4u;
-
-    continuing {
-      var_1 = 5u;
-    }
-  }
-  var_1 = 6u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.msl
deleted file mode 100644
index 2df17cc..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (true) {
-      *(tint_symbol_1) = 3u;
-      continue;
-    }
-    *(tint_symbol_1) = 4u;
-  }
-  *(tint_symbol_1) = 6u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.spvasm
deleted file mode 100644
index fcce539..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.spvasm
+++ /dev/null
@@ -1,55 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_6 = OpConstant %uint 6
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %true %19 %18
-         %19 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %18 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_6
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.wgsl
deleted file mode 100644
index 8b32d79..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Conditional_EmptyContinuing.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (true) {
-      var_1 = 3u;
-      continue;
-    }
-    var_1 = 4u;
-  }
-  var_1 = 6u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.msl
deleted file mode 100644
index 58dfda1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.spvasm
deleted file mode 100644
index 675d575..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.wgsl
deleted file mode 100644
index f238b48..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_AfterHeader_Unconditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.msl
deleted file mode 100644
index 5b3988b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.spvasm
deleted file mode 100644
index c7340c6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.wgsl
deleted file mode 100644
index 94759b7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Continue_FromHeader.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.msl
deleted file mode 100644
index 6109a63..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    switch(42u) {
-      case 40u: {
-        *(tint_symbol_1) = 40u;
-        if (false) {
-          {
-            *(tint_symbol_1) = 4u;
-          }
-          continue;
-        }
-        /* fallthrough */
-      }
-      case 50u: {
-        *(tint_symbol_1) = 50u;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index 6cc516b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,69 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-    %uint_42 = OpConstant %uint 42
-    %uint_40 = OpConstant %uint 40
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_50 = OpConstant %uint 50
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %16 None
-               OpSwitch %uint_42 %18 40 %19 50 %20
-         %19 = OpLabel
-               OpStore %var_1 %uint_40
-               OpSelectionMerge %24 None
-               OpBranchConditional %false %25 %24
-         %25 = OpLabel
-               OpBranch %12
-         %24 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpStore %var_1 %uint_50
-               OpBranch %16
-         %18 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index bbcdec3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 40u;
-        if (false) {
-          continue;
-        }
-        fallthrough;
-      }
-      case 50u: {
-        var_1 = 50u;
-      }
-      default: {
-      }
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.msl
deleted file mode 100644
index dc94b10..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    switch(42u) {
-      case 40u: {
-        *(tint_symbol_1) = 40u;
-        if (false) {
-        } else {
-          {
-            *(tint_symbol_1) = 4u;
-          }
-          continue;
-        }
-        /* fallthrough */
-      }
-      case 50u: {
-        *(tint_symbol_1) = 50u;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index f7d2e83..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,71 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-    %uint_42 = OpConstant %uint 42
-    %uint_40 = OpConstant %uint 40
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_50 = OpConstant %uint 50
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %16 None
-               OpSwitch %uint_42 %18 40 %19 50 %20
-         %19 = OpLabel
-               OpStore %var_1 %uint_40
-               OpSelectionMerge %24 None
-               OpBranchConditional %false %25 %26
-         %25 = OpLabel
-               OpBranch %24
-         %26 = OpLabel
-               OpBranch %12
-         %24 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpStore %var_1 %uint_50
-               OpBranch %16
-         %18 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index 0d15505..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Fallthrough_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 40u;
-        if (false) {
-        } else {
-          continue;
-        }
-        fallthrough;
-      }
-      case 50u: {
-        var_1 = 50u;
-      }
-      default: {
-      }
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.msl
deleted file mode 100644
index 29d5600..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (false) {
-      {
-        *(tint_symbol_1) = 4u;
-      }
-      continue;
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index 900b645..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,55 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %18
-         %19 = OpLabel
-               OpBranch %12
-         %18 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index 1ec7161..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (false) {
-      continue;
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.msl
deleted file mode 100644
index b87c418..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (false) {
-    } else {
-      {
-        *(tint_symbol_1) = 4u;
-      }
-      continue;
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index 699222b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %20
-         %19 = OpLabel
-               OpBranch %18
-         %20 = OpLabel
-               OpBranch %12
-         %18 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index 7d49a90..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_Forward_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (false) {
-    } else {
-      continue;
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.msl
deleted file mode 100644
index 7ccdd87..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (true) {
-      *(tint_symbol_1) = 3u;
-      if (false) {
-        {
-          *(tint_symbol_1) = 5u;
-        }
-        continue;
-      }
-    }
-    *(tint_symbol_1) = 4u;
-    {
-      *(tint_symbol_1) = 5u;
-    }
-  }
-  *(tint_symbol_1) = 6u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index 5d84afa..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,63 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_3 = OpConstant %uint 3
-      %false = OpConstantFalse %bool
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %uint_6 = OpConstant %uint 6
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %true %19 %18
-         %19 = OpLabel
-               OpStore %var_1 %uint_3
-               OpSelectionMerge %22 None
-               OpBranchConditional %false %23 %22
-         %23 = OpLabel
-               OpBranch %12
-         %22 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_5
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_6
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index 243ee9f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (true) {
-      var_1 = 3u;
-      if (false) {
-        continue;
-      }
-    }
-    var_1 = 4u;
-
-    continuing {
-      var_1 = 5u;
-    }
-  }
-  var_1 = 6u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.msl
deleted file mode 100644
index 2cf4fe7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (true) {
-      *(tint_symbol_1) = 3u;
-      if (false) {
-      } else {
-        {
-          *(tint_symbol_1) = 5u;
-        }
-        continue;
-      }
-    }
-    *(tint_symbol_1) = 4u;
-    {
-      *(tint_symbol_1) = 5u;
-    }
-  }
-  *(tint_symbol_1) = 6u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index e0c9b64..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 31
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_3 = OpConstant %uint 3
-      %false = OpConstantFalse %bool
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %uint_6 = OpConstant %uint 6
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %true %19 %18
-         %19 = OpLabel
-               OpStore %var_1 %uint_3
-               OpSelectionMerge %22 None
-               OpBranchConditional %false %23 %24
-         %23 = OpLabel
-               OpBranch %22
-         %24 = OpLabel
-               OpBranch %12
-         %22 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_5
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_6
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index d9e895c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Continue_IfBreak_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (true) {
-      var_1 = 3u;
-      if (false) {
-      } else {
-        continue;
-      }
-    }
-    var_1 = 4u;
-
-    continuing {
-      var_1 = 5u;
-    }
-  }
-  var_1 = 6u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.hlsl
deleted file mode 100644
index 1a65f4d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      /* fallthrough */
-      {
-        var_1 = 30u;
-      }
-      break;
-    }
-    case 30u: {
-      var_1 = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.msl
deleted file mode 100644
index 38398b8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      /* fallthrough */
-    }
-    case 30u: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.spvasm
deleted file mode 100644
index 94fbf17..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-    %uint_30 = OpConstant %uint 30
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13 30 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %14
-         %14 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.wgsl
deleted file mode 100644
index af1f3f9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Fallthrough_Fallthrough_Same.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      fallthrough;
-    }
-    case 30u: {
-      var_1 = 30u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.hlsl
deleted file mode 100644
index 8f48fc5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  var_1 = 2u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.msl
deleted file mode 100644
index 6c622f5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  *(tint_symbol_1) = 2u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.spvasm
deleted file mode 100644
index 8d04cde..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.wgsl
deleted file mode 100644
index 7201e50..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_Forward_Forward_Same.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  var_1 = 2u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.hlsl
deleted file mode 100644
index e96888a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  if (false) {
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.msl
deleted file mode 100644
index 12e68ab..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  if (false) {
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.spvasm
deleted file mode 100644
index 9a0ac9d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpSelectionMerge %12 None
-               OpBranchConditional %false %13 %12
-         %13 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.wgsl
deleted file mode 100644
index d8631ef..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_IfBreak_IfBreak_Same.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  if (false) {
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.msl
deleted file mode 100644
index 1ea53a7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (true) {
-      *(tint_symbol_1) = 2u;
-      if (false) {
-        break;
-      } else {
-        {
-          *(tint_symbol_1) = 4u;
-        }
-        continue;
-      }
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index 2cfcfd1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,63 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %17 None
-               OpBranchConditional %true %18 %17
-         %18 = OpLabel
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %21 None
-               OpBranchConditional %false %22 %23
-         %22 = OpLabel
-               OpBranch %11
-         %23 = OpLabel
-               OpBranch %12
-         %21 = OpLabel
-               OpBranch %17
-         %17 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index 8912427..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    if (true) {
-      var_1 = 2u;
-      if (false) {
-        break;
-      } else {
-        continue;
-      }
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.hlsl
deleted file mode 100644
index 2d4e25e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  while (true) {
-    var_1 = 1u;
-    if (true) {
-      var_1 = 2u;
-      if (false) {
-        {
-          var_1 = 4u;
-        }
-        continue;
-      } else {
-        break;
-      }
-    }
-    var_1 = 3u;
-    {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.msl
deleted file mode 100644
index 3bfddee..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (true) {
-      *(tint_symbol_1) = 2u;
-      if (false) {
-        {
-          *(tint_symbol_1) = 4u;
-        }
-        continue;
-      } else {
-        break;
-      }
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index 2f9440b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,63 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %17 None
-               OpBranchConditional %true %18 %17
-         %18 = OpLabel
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %21 None
-               OpBranchConditional %false %22 %23
-         %22 = OpLabel
-               OpBranch %12
-         %23 = OpLabel
-               OpBranch %11
-         %21 = OpLabel
-               OpBranch %17
-         %17 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index eb40ee1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Continue_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    if (true) {
-      var_1 = 2u;
-      if (false) {
-        continue;
-      } else {
-        break;
-      }
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.msl
deleted file mode 100644
index c422f73..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (false) {
-      break;
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index 57535ab..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,55 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %18
-         %19 = OpLabel
-               OpBranch %11
-         %18 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index e4b5505..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (false) {
-      break;
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.hlsl
deleted file mode 100644
index c3276ff..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  while (true) {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (false) {
-    } else {
-      break;
-    }
-    var_1 = 3u;
-    {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.msl
deleted file mode 100644
index 9f98375..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (false) {
-    } else {
-      break;
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index d8d4d7f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %20
-         %19 = OpLabel
-               OpBranch %18
-         %20 = OpLabel
-               OpBranch %11
-         %18 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index 745d1a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_Forward_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (false) {
-    } else {
-      break;
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.hlsl
deleted file mode 100644
index ced9780..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  while (true) {
-    var_1 = 1u;
-    var_1 = 2u;
-    break;
-    {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.msl
deleted file mode 100644
index 929ba54..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    break;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.spvasm
deleted file mode 100644
index 81947d8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpBranch %11
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.wgsl
deleted file mode 100644
index 40faeef..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_MultiBlock_LoopBreak.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    break;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.hlsl
deleted file mode 100644
index fb42491..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  while (true) {
-    var_1 = 1u;
-    break;
-    {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.msl
deleted file mode 100644
index 4f56341..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    break;
-    {
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.spvasm
deleted file mode 100644
index 2b2d072..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %11
-         %12 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.wgsl
deleted file mode 100644
index 7fd500c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopBreak_SingleBlock_LoopBreak.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    break;
-
-    continuing {
-      var_1 = 4u;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.msl
deleted file mode 100644
index b3374cd..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  while (true) {
-    *(tint_symbol_1) = 2u;
-    *(tint_symbol_1) = 3u;
-    switch(42u) {
-      case 40u: {
-        *(tint_symbol_1) = 4u;
-        {
-          *(tint_symbol_1) = 6u;
-        }
-        continue;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    *(tint_symbol_1) = 5u;
-    {
-      *(tint_symbol_1) = 6u;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.spvasm
deleted file mode 100644
index 61aedfb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-    %uint_42 = OpConstant %uint 42
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %uint_6 = OpConstant %uint 6
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_2
-               OpStore %var_1 %uint_3
-               OpSelectionMerge %16 None
-               OpSwitch %uint_42 %18 40 %19
-         %19 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %12
-         %18 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_5
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_6
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.wgsl
deleted file mode 100644
index 674013a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_LoopContinue_FromSwitch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  loop {
-    var_1 = 2u;
-    var_1 = 3u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 4u;
-        continue;
-      }
-      default: {
-      }
-    }
-    var_1 = 5u;
-
-    continuing {
-      var_1 = 6u;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.msl
deleted file mode 100644
index cf4d143..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  while (true) {
-    *(tint_symbol_1) = 2u;
-    *(tint_symbol_1) = 3u;
-    switch(42u) {
-      case 40u: {
-        *(tint_symbol_1) = 40u;
-        if (false) {
-        } else {
-          {
-            *(tint_symbol_1) = 7u;
-          }
-          continue;
-        }
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    *(tint_symbol_1) = 6u;
-    {
-      *(tint_symbol_1) = 7u;
-    }
-  }
-  *(tint_symbol_1) = 8u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index d14f8c8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-    %uint_42 = OpConstant %uint 42
-    %uint_40 = OpConstant %uint 40
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_6 = OpConstant %uint 6
-     %uint_7 = OpConstant %uint 7
-     %uint_8 = OpConstant %uint 8
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_2
-               OpStore %var_1 %uint_3
-               OpSelectionMerge %16 None
-               OpSwitch %uint_42 %18 40 %19
-         %19 = OpLabel
-               OpStore %var_1 %uint_40
-               OpSelectionMerge %23 None
-               OpBranchConditional %false %24 %25
-         %24 = OpLabel
-               OpBranch %23
-         %25 = OpLabel
-               OpBranch %12
-         %23 = OpLabel
-               OpBranch %16
-         %18 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_6
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_7
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index e1975e3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  loop {
-    var_1 = 2u;
-    var_1 = 3u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 40u;
-        if (false) {
-        } else {
-          continue;
-        }
-      }
-      default: {
-      }
-    }
-    var_1 = 6u;
-
-    continuing {
-      var_1 = 7u;
-    }
-  }
-  var_1 = 8u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.msl
deleted file mode 100644
index 0d344df..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  while (true) {
-    *(tint_symbol_1) = 2u;
-    *(tint_symbol_1) = 3u;
-    switch(42u) {
-      case 40u: {
-        *(tint_symbol_1) = 40u;
-        if (false) {
-          {
-            *(tint_symbol_1) = 7u;
-          }
-          continue;
-        }
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    *(tint_symbol_1) = 6u;
-    {
-      *(tint_symbol_1) = 7u;
-    }
-  }
-  *(tint_symbol_1) = 8u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index 19a499d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 31
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-    %uint_42 = OpConstant %uint 42
-    %uint_40 = OpConstant %uint 40
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_6 = OpConstant %uint 6
-     %uint_7 = OpConstant %uint 7
-     %uint_8 = OpConstant %uint 8
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_2
-               OpStore %var_1 %uint_3
-               OpSelectionMerge %16 None
-               OpSwitch %uint_42 %18 40 %19
-         %19 = OpLabel
-               OpStore %var_1 %uint_40
-               OpSelectionMerge %23 None
-               OpBranchConditional %false %24 %23
-         %24 = OpLabel
-               OpBranch %12
-         %23 = OpLabel
-               OpBranch %16
-         %18 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_6
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_7
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index b926d1a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Continue_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  loop {
-    var_1 = 2u;
-    var_1 = 3u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 40u;
-        if (false) {
-          continue;
-        }
-      }
-      default: {
-      }
-    }
-    var_1 = 6u;
-
-    continuing {
-      var_1 = 7u;
-    }
-  }
-  var_1 = 8u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.hlsl
deleted file mode 100644
index e91d419..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-        break;
-      }
-      /* fallthrough */
-      {
-        var_1 = 30u;
-      }
-      break;
-    }
-    case 30u: {
-      var_1 = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.msl
deleted file mode 100644
index 3360c55..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      if (false) {
-        break;
-      }
-      /* fallthrough */
-    }
-    case 30u: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index 2d65a6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,52 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_30 = OpConstant %uint 30
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13 30 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %18
-         %19 = OpLabel
-               OpBranch %10
-         %18 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index 205de3c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-        break;
-      }
-      fallthrough;
-    }
-    case 30u: {
-      var_1 = 30u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.hlsl
deleted file mode 100644
index 046b1e6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-      } else {
-        break;
-      }
-      /* fallthrough */
-      {
-        var_1 = 30u;
-      }
-      break;
-    }
-    case 30u: {
-      var_1 = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.msl
deleted file mode 100644
index c49bf0b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      if (false) {
-      } else {
-        break;
-      }
-      /* fallthrough */
-    }
-    case 30u: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index d5913cf..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_30 = OpConstant %uint 30
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13 30 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %20
-         %19 = OpLabel
-               OpBranch %18
-         %20 = OpLabel
-               OpBranch %10
-         %18 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index 876e799..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Fallthrough_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-      } else {
-        break;
-      }
-      fallthrough;
-    }
-    case 30u: {
-      var_1 = 30u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.hlsl
deleted file mode 100644
index 46d4baa..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-        break;
-      }
-      var_1 = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 8u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.msl
deleted file mode 100644
index c6dd3c8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      if (false) {
-        break;
-      }
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 8u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.spvasm
deleted file mode 100644
index 270a5b6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_30 = OpConstant %uint 30
-     %uint_8 = OpConstant %uint 8
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %17
-         %18 = OpLabel
-               OpBranch %10
-         %17 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.wgsl
deleted file mode 100644
index 7b790f5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-        break;
-      }
-      var_1 = 30u;
-    }
-    default: {
-    }
-  }
-  var_1 = 8u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.hlsl
deleted file mode 100644
index 379755b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-      } else {
-        break;
-      }
-      var_1 = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 8u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.msl
deleted file mode 100644
index b6e71c2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      if (false) {
-      } else {
-        break;
-      }
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 8u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.spvasm
deleted file mode 100644
index 426a8c5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,52 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_30 = OpConstant %uint 30
-     %uint_8 = OpConstant %uint 8
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %19
-         %18 = OpLabel
-               OpBranch %17
-         %19 = OpLabel
-               OpBranch %10
-         %17 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.wgsl
deleted file mode 100644
index d0b6571..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_Forward_OnTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-      } else {
-        break;
-      }
-      var_1 = 30u;
-    }
-    default: {
-    }
-  }
-  var_1 = 8u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.hlsl
deleted file mode 100644
index dc27829..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.msl
deleted file mode 100644
index 722311b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.spvasm
deleted file mode 100644
index 3533650..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.wgsl
deleted file mode 100644
index 8452e21..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_LastInCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.hlsl
deleted file mode 100644
index 3b5b5ba..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-        var_1 = 40u;
-        break;
-      }
-      var_1 = 50u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.msl
deleted file mode 100644
index d88cc2b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      if (false) {
-        *(tint_symbol_1) = 40u;
-        break;
-      }
-      *(tint_symbol_1) = 50u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.spvasm
deleted file mode 100644
index c451eb0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,52 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_40 = OpConstant %uint 40
-    %uint_50 = OpConstant %uint 50
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %17
-         %18 = OpLabel
-               OpStore %var_1 %uint_40
-               OpBranch %10
-         %17 = OpLabel
-               OpStore %var_1 %uint_50
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.wgsl
deleted file mode 100644
index 3ac298c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_BranchConditional_SwitchBreak_SwitchBreak_NotLastInCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-        var_1 = 40u;
-        break;
-      }
-      var_1 = 50u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 323585c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    {
-      *(tint_symbol_1) = 1u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 1946f34..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index a799866..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_MultiBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-
-    continuing {
-      var_1 = 1u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.msl
deleted file mode 100644
index e5e10d8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 1a3bdd2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index 9aaeb0d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_BackEdge_SingleBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.hlsl
deleted file mode 100644
index 1a65f4d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      /* fallthrough */
-      {
-        var_1 = 30u;
-      }
-      break;
-    }
-    case 30u: {
-      var_1 = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.msl
deleted file mode 100644
index 38398b8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      /* fallthrough */
-    }
-    case 30u: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.spvasm
deleted file mode 100644
index 94fbf17..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-    %uint_30 = OpConstant %uint 30
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13 30 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %14
-         %14 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.wgsl
deleted file mode 100644
index af1f3f9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Fallthrough.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      fallthrough;
-    }
-    case 30u: {
-      var_1 = 30u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.hlsl
deleted file mode 100644
index 8f48fc5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  var_1 = 2u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.msl
deleted file mode 100644
index 6c622f5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  *(tint_symbol_1) = 2u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.spvasm
deleted file mode 100644
index 8d04cde..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.wgsl
deleted file mode 100644
index 7201e50..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_Forward.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  var_1 = 2u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.hlsl
deleted file mode 100644
index eef0417..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,15 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  } else {
-    var_1 = 1u;
-  }
-  var_1 = 2u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.msl
deleted file mode 100644
index 62705b4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  if (false) {
-  } else {
-    *(tint_symbol_1) = 1u;
-  }
-  *(tint_symbol_1) = 2u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.spvasm
deleted file mode 100644
index 98ecfb4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %13
-         %12 = OpLabel
-               OpBranch %11
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.wgsl
deleted file mode 100644
index 6f1ec56..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromElse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  } else {
-    var_1 = 1u;
-  }
-  var_1 = 2u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.hlsl
deleted file mode 100644
index f5eb775..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    var_1 = 1u;
-  }
-  var_1 = 2u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.msl
deleted file mode 100644
index ca14976..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  if (false) {
-    *(tint_symbol_1) = 1u;
-  }
-  *(tint_symbol_1) = 2u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.spvasm
deleted file mode 100644
index 01aa6d1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.wgsl
deleted file mode 100644
index 7ebbcd8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_IfBreak_FromThen.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    var_1 = 1u;
-  }
-  var_1 = 2u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.hlsl
deleted file mode 100644
index 5bdbb28..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    var_1 = 1u;
-    break;
-    {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.msl
deleted file mode 100644
index 0891fc7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    break;
-    {
-      *(tint_symbol_1) = 2u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.spvasm
deleted file mode 100644
index 33ba905..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.wgsl
deleted file mode 100644
index bb3843e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromBody.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    break;
-
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.hlsl
deleted file mode 100644
index a783e6d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    {
-      var_1 = 1u;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.msl
deleted file mode 100644
index d81b5d4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    {
-      *(tint_symbol_1) = 1u;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.spvasm
deleted file mode 100644
index 6a9fb0e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranchConditional %false %9 %10
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.wgsl
deleted file mode 100644
index dc5a5c8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopBreak_MultiBlockLoop_FromContinueConstructEnd_Conditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-
-    continuing {
-      var_1 = 1u;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.msl
deleted file mode 100644
index 54b32ea..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    if (false) {
-      *(tint_symbol_1) = 1u;
-      {
-        *(tint_symbol_1) = 3u;
-      }
-      continue;
-    }
-    *(tint_symbol_1) = 2u;
-    {
-      *(tint_symbol_1) = 3u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.spvasm
deleted file mode 100644
index ce3dbc4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %11
-         %15 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.wgsl
deleted file mode 100644
index 0d66f87..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_BeforeLast.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      var_1 = 1u;
-      continue;
-    }
-    var_1 = 2u;
-
-    continuing {
-      var_1 = 3u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.msl
deleted file mode 100644
index b3374cd..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  while (true) {
-    *(tint_symbol_1) = 2u;
-    *(tint_symbol_1) = 3u;
-    switch(42u) {
-      case 40u: {
-        *(tint_symbol_1) = 4u;
-        {
-          *(tint_symbol_1) = 6u;
-        }
-        continue;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    *(tint_symbol_1) = 5u;
-    {
-      *(tint_symbol_1) = 6u;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.spvasm
deleted file mode 100644
index 61aedfb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-    %uint_42 = OpConstant %uint 42
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %uint_6 = OpConstant %uint 6
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_2
-               OpStore %var_1 %uint_3
-               OpSelectionMerge %16 None
-               OpSwitch %uint_42 %18 40 %19
-         %19 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %12
-         %18 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_5
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_6
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.wgsl
deleted file mode 100644
index 674013a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_FromSwitch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  loop {
-    var_1 = 2u;
-    var_1 = 3u;
-    switch(42u) {
-      case 40u: {
-        var_1 = 4u;
-        continue;
-      }
-      default: {
-      }
-    }
-    var_1 = 5u;
-
-    continuing {
-      var_1 = 6u;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.msl
deleted file mode 100644
index 7c64f18..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    {
-      *(tint_symbol_1) = 2u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.spvasm
deleted file mode 100644
index 8f8c047..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.wgsl
deleted file mode 100644
index f23ea02..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_LoopContinue_LastInLoopConstruct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.hlsl
deleted file mode 100644
index dc27829..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.msl
deleted file mode 100644
index 722311b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.spvasm
deleted file mode 100644
index 3533650..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.wgsl
deleted file mode 100644
index 8452e21..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_LastInCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.hlsl
deleted file mode 100644
index 3b5b5ba..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-        var_1 = 40u;
-        break;
-      }
-      var_1 = 50u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.msl
deleted file mode 100644
index d88cc2b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      if (false) {
-        *(tint_symbol_1) = 40u;
-        break;
-      }
-      *(tint_symbol_1) = 50u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.spvasm
deleted file mode 100644
index c451eb0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,52 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_40 = OpConstant %uint 40
-    %uint_50 = OpConstant %uint 50
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %17
-         %18 = OpLabel
-               OpStore %var_1 %uint_40
-               OpBranch %10
-         %17 = OpLabel
-               OpStore %var_1 %uint_50
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.wgsl
deleted file mode 100644
index 3ac298c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Branch_SwitchBreak_NotLastInCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      if (false) {
-        var_1 = 40u;
-        break;
-      }
-      var_1 = 50u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopBreak.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.msl
deleted file mode 100644
index 6ea82c9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.spvasm
deleted file mode 100644
index 8c7bc0c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %11
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.wgsl
deleted file mode 100644
index 169951e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_LoopContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.hlsl
deleted file mode 100644
index ea27551..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-      } else {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.msl
deleted file mode 100644
index 1d512d2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-      } else {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.spvasm
deleted file mode 100644
index 0d6e7ce..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_20 %11 20 %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %9
-         %15 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.wgsl
deleted file mode 100644
index 419b2af..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_FalseBranch_SwitchBreak.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.hlsl
deleted file mode 100644
index 700f4dc..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  bool guard10 = true;
-  if (false) {
-    var_1 = 2u;
-    guard10 = false;
-  } else {
-    if (guard10) {
-      var_1 = 3u;
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        var_1 = 4u;
-        guard10 = false;
-      }
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.msl
deleted file mode 100644
index 58c9960..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  bool guard10 = true;
-  if (false) {
-    *(tint_symbol_1) = 2u;
-    guard10 = false;
-  } else {
-    if (guard10) {
-      *(tint_symbol_1) = 3u;
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        *(tint_symbol_1) = 4u;
-        guard10 = false;
-      }
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.spvasm
deleted file mode 100644
index 69248ff..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %guard10 "guard10"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %14 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-    %guard10 = OpVariable %_ptr_Function_bool Function %14
-               OpStore %var_1 %uint_1
-               OpStore %guard10 %true
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %18
-         %17 = OpLabel
-               OpStore %var_1 %uint_2
-               OpStore %guard10 %false
-               OpBranch %16
-         %18 = OpLabel
-         %20 = OpLoad %bool %guard10
-               OpSelectionMerge %21 None
-               OpBranchConditional %20 %22 %21
-         %22 = OpLabel
-               OpStore %var_1 %uint_3
-               OpSelectionMerge %24 None
-               OpBranchConditional %true %25 %24
-         %25 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %24
-         %24 = OpLabel
-         %26 = OpLoad %bool %guard10
-               OpSelectionMerge %27 None
-               OpBranchConditional %26 %28 %27
-         %28 = OpLabel
-               OpStore %var_1 %uint_4
-               OpStore %guard10 %false
-               OpBranch %27
-         %27 = OpLabel
-               OpBranch %21
-         %21 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.wgsl
deleted file mode 100644
index 0f34f3f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromElse_ForwardWithinElse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  var guard10 : bool = true;
-  if (false) {
-    var_1 = 2u;
-    guard10 = false;
-  } else {
-    if (guard10) {
-      var_1 = 3u;
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        var_1 = 4u;
-        guard10 = false;
-      }
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.hlsl
deleted file mode 100644
index 2ff2452..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  bool guard10 = true;
-  if (false) {
-    var_1 = 2u;
-    if (true) {
-    } else {
-      guard10 = false;
-    }
-    if (guard10) {
-      var_1 = 3u;
-    }
-  } else {
-    if (guard10) {
-      var_1 = 4u;
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        var_1 = 5u;
-      }
-    }
-  }
-  if (guard10) {
-    var_1 = 6u;
-    if (false) {
-    } else {
-      guard10 = false;
-    }
-    if (guard10) {
-      var_1 = 7u;
-      guard10 = false;
-    }
-  }
-  var_1 = 8u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.msl
deleted file mode 100644
index 7f66270..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  bool guard10 = true;
-  if (false) {
-    *(tint_symbol_1) = 2u;
-    if (true) {
-    } else {
-      guard10 = false;
-    }
-    if (guard10) {
-      *(tint_symbol_1) = 3u;
-    }
-  } else {
-    if (guard10) {
-      *(tint_symbol_1) = 4u;
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        *(tint_symbol_1) = 5u;
-      }
-    }
-  }
-  if (guard10) {
-    *(tint_symbol_1) = 6u;
-    if (false) {
-    } else {
-      guard10 = false;
-    }
-    if (guard10) {
-      *(tint_symbol_1) = 7u;
-      guard10 = false;
-    }
-  }
-  *(tint_symbol_1) = 8u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.spvasm
deleted file mode 100644
index 49de3ea..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %guard10 "guard10"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %14 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %uint_6 = OpConstant %uint 6
-     %uint_7 = OpConstant %uint 7
-     %uint_8 = OpConstant %uint 8
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-    %guard10 = OpVariable %_ptr_Function_bool Function %14
-               OpStore %var_1 %uint_1
-               OpStore %guard10 %true
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %18
-         %17 = OpLabel
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %20 None
-               OpBranchConditional %true %21 %22
-         %21 = OpLabel
-               OpBranch %20
-         %22 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %20
-         %20 = OpLabel
-         %23 = OpLoad %bool %guard10
-               OpSelectionMerge %24 None
-               OpBranchConditional %23 %25 %24
-         %25 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %24
-         %24 = OpLabel
-               OpBranch %16
-         %18 = OpLabel
-         %27 = OpLoad %bool %guard10
-               OpSelectionMerge %28 None
-               OpBranchConditional %27 %29 %28
-         %29 = OpLabel
-               OpStore %var_1 %uint_4
-               OpSelectionMerge %31 None
-               OpBranchConditional %true %32 %31
-         %32 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %31
-         %31 = OpLabel
-         %33 = OpLoad %bool %guard10
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %34
-         %35 = OpLabel
-               OpStore %var_1 %uint_5
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-         %37 = OpLoad %bool %guard10
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %38
-         %39 = OpLabel
-               OpStore %var_1 %uint_6
-               OpSelectionMerge %41 None
-               OpBranchConditional %false %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %41
-         %41 = OpLabel
-         %44 = OpLoad %bool %guard10
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-               OpStore %var_1 %uint_7
-               OpStore %guard10 %false
-               OpBranch %45
-         %45 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-               OpStore %var_1 %uint_8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.wgsl
deleted file mode 100644
index 66666c4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThenWithForward_FromElseWithForward_AlsoPremerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  var guard10 : bool = true;
-  if (false) {
-    var_1 = 2u;
-    if (true) {
-    } else {
-      guard10 = false;
-    }
-    if (guard10) {
-      var_1 = 3u;
-    }
-  } else {
-    if (guard10) {
-      var_1 = 4u;
-      if (true) {
-        guard10 = false;
-      }
-      if (guard10) {
-        var_1 = 5u;
-      }
-    }
-  }
-  if (guard10) {
-    var_1 = 6u;
-    if (false) {
-    } else {
-      guard10 = false;
-    }
-    if (guard10) {
-      var_1 = 7u;
-      guard10 = false;
-    }
-  }
-  var_1 = 8u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.hlsl
deleted file mode 100644
index 02ac4d8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.hlsl
+++ /dev/null
@@ -1,28 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  bool guard10 = true;
-  if (false) {
-    var_1 = 2u;
-    if (true) {
-      guard10 = false;
-    }
-    if (guard10) {
-      var_1 = 3u;
-      guard10 = false;
-    }
-  } else {
-    if (guard10) {
-      var_1 = 4u;
-      guard10 = false;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.msl
deleted file mode 100644
index a337efe..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  bool guard10 = true;
-  if (false) {
-    *(tint_symbol_1) = 2u;
-    if (true) {
-      guard10 = false;
-    }
-    if (guard10) {
-      *(tint_symbol_1) = 3u;
-      guard10 = false;
-    }
-  } else {
-    if (guard10) {
-      *(tint_symbol_1) = 4u;
-      guard10 = false;
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.spvasm
deleted file mode 100644
index c20c840..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %guard10 "guard10"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %14 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-    %guard10 = OpVariable %_ptr_Function_bool Function %14
-               OpStore %var_1 %uint_1
-               OpStore %guard10 %true
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %18
-         %17 = OpLabel
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %20 None
-               OpBranchConditional %true %21 %20
-         %21 = OpLabel
-               OpStore %guard10 %false
-               OpBranch %20
-         %20 = OpLabel
-         %22 = OpLoad %bool %guard10
-               OpSelectionMerge %23 None
-               OpBranchConditional %22 %24 %23
-         %24 = OpLabel
-               OpStore %var_1 %uint_3
-               OpStore %guard10 %false
-               OpBranch %23
-         %23 = OpLabel
-               OpBranch %16
-         %18 = OpLabel
-         %26 = OpLoad %bool %guard10
-               OpSelectionMerge %27 None
-               OpBranchConditional %26 %28 %27
-         %28 = OpLabel
-               OpStore %var_1 %uint_4
-               OpStore %guard10 %false
-               OpBranch %27
-         %27 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.wgsl
deleted file mode 100644
index 77150f0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfBreak_FromThen_ForwardWithinThen.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  var guard10 : bool = true;
-  if (false) {
-    var_1 = 2u;
-    if (true) {
-      guard10 = false;
-    }
-    if (guard10) {
-      var_1 = 3u;
-      guard10 = false;
-    }
-  } else {
-    if (guard10) {
-      var_1 = 4u;
-      guard10 = false;
-    }
-  }
-  var_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.msl
deleted file mode 100644
index fc2a957..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.spvasm
deleted file mode 100644
index e406af2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.wgsl
deleted file mode 100644
index d089493..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.hlsl
deleted file mode 100644
index 1daa202..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  if (false) {
-  } else {
-    var_1 = 1u;
-  }
-  if (true) {
-    var_1 = 3u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.msl
deleted file mode 100644
index 9c914e2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  if (false) {
-  } else {
-    *(tint_symbol_1) = 1u;
-  }
-  if (true) {
-    *(tint_symbol_1) = 3u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.spvasm
deleted file mode 100644
index 88d083a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-       %true = OpConstantTrue %bool
-     %uint_3 = OpConstant %uint 3
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpSelectionMerge %12 None
-               OpBranchConditional %false %13 %14
-         %13 = OpLabel
-               OpBranch %12
-         %14 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %17 None
-               OpBranchConditional %true %18 %17
-         %18 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %17
-         %17 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.wgsl
deleted file mode 100644
index 51849d6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Else_Premerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  if (false) {
-  } else {
-    var_1 = 1u;
-  }
-  if (true) {
-    var_1 = 3u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Empty.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.hlsl
deleted file mode 100644
index fb80d51..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-    if (true) {
-      var_1 = 2u;
-    }
-    var_1 = 3u;
-  } else {
-    var_1 = 4u;
-    if (true) {
-    } else {
-      var_1 = 5u;
-    }
-    var_1 = 6u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.msl
deleted file mode 100644
index 2edb037..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  if (false) {
-    *(tint_symbol_1) = 1u;
-    if (true) {
-      *(tint_symbol_1) = 2u;
-    }
-    *(tint_symbol_1) = 3u;
-  } else {
-    *(tint_symbol_1) = 4u;
-    if (true) {
-    } else {
-      *(tint_symbol_1) = 5u;
-    }
-    *(tint_symbol_1) = 6u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.spvasm
deleted file mode 100644
index 86dd802..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.spvasm
+++ /dev/null
@@ -1,65 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 31
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %uint_6 = OpConstant %uint 6
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpSelectionMerge %12 None
-               OpBranchConditional %false %13 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %17 None
-               OpBranchConditional %true %18 %17
-         %18 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %17
-         %17 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %12
-         %14 = OpLabel
-               OpStore %var_1 %uint_4
-               OpSelectionMerge %22 None
-               OpBranchConditional %true %23 %24
-         %23 = OpLabel
-               OpBranch %22
-         %24 = OpLabel
-               OpStore %var_1 %uint_5
-               OpBranch %22
-         %22 = OpLabel
-               OpStore %var_1 %uint_6
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.wgsl
deleted file mode 100644
index 3c6a28f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Nest_If.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-    if (true) {
-      var_1 = 2u;
-    }
-    var_1 = 3u;
-  } else {
-    var_1 = 4u;
-    if (true) {
-    } else {
-      var_1 = 5u;
-    }
-    var_1 = 6u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.hlsl
deleted file mode 100644
index e920c30..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  if (false) {
-  } else {
-    var_1 = 1u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.msl
deleted file mode 100644
index afddae1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  if (false) {
-  } else {
-    *(tint_symbol_1) = 1u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.spvasm
deleted file mode 100644
index 2b5ca6c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpSelectionMerge %12 None
-               OpBranchConditional %false %13 %14
-         %13 = OpLabel
-               OpBranch %12
-         %14 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.wgsl
deleted file mode 100644
index 1af5e0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_NoThen_Else.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  if (false) {
-  } else {
-    var_1 = 1u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.hlsl
deleted file mode 100644
index ef78092..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-  } else {
-    var_1 = 2u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.msl
deleted file mode 100644
index 243de2f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  if (false) {
-    *(tint_symbol_1) = 1u;
-  } else {
-    *(tint_symbol_1) = 2u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.spvasm
deleted file mode 100644
index 91394e3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpSelectionMerge %12 None
-               OpBranchConditional %false %13 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %14 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.wgsl
deleted file mode 100644
index 180d5b9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-  } else {
-    var_1 = 2u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.hlsl
deleted file mode 100644
index 455b652..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-  } else {
-    var_1 = 2u;
-  }
-  if (true) {
-    var_1 = 3u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.msl
deleted file mode 100644
index 07bb22c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  if (false) {
-    *(tint_symbol_1) = 1u;
-  } else {
-    *(tint_symbol_1) = 2u;
-  }
-  if (true) {
-    *(tint_symbol_1) = 3u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.spvasm
deleted file mode 100644
index eaea586..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,52 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %true = OpConstantTrue %bool
-     %uint_3 = OpConstant %uint 3
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpSelectionMerge %12 None
-               OpBranchConditional %false %13 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %14 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %18 None
-               OpBranchConditional %true %19 %18
-         %19 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %18
-         %18 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.wgsl
deleted file mode 100644
index 9d88c7c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Else_Premerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-  } else {
-    var_1 = 2u;
-  }
-  if (true) {
-    var_1 = 3u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.hlsl
deleted file mode 100644
index 30825b5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,15 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.msl
deleted file mode 100644
index b2f523d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  if (false) {
-    *(tint_symbol_1) = 1u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.spvasm
deleted file mode 100644
index 25edd8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpSelectionMerge %12 None
-               OpBranchConditional %false %13 %12
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.wgsl
deleted file mode 100644
index 4d979fd..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_NoElse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.hlsl
deleted file mode 100644
index 78aa30f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-  }
-  if (true) {
-    var_1 = 3u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.msl
deleted file mode 100644
index 422a895..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  if (false) {
-    *(tint_symbol_1) = 1u;
-  }
-  if (true) {
-    *(tint_symbol_1) = 3u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.spvasm
deleted file mode 100644
index 18d9d5e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,48 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-       %true = OpConstantTrue %bool
-     %uint_3 = OpConstant %uint 3
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpSelectionMerge %12 None
-               OpBranchConditional %false %13 %12
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %16 None
-               OpBranchConditional %true %17 %16
-         %17 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %16
-         %16 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.wgsl
deleted file mode 100644
index d2055a2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_If_Then_Premerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  if (false) {
-    var_1 = 1u;
-  }
-  if (true) {
-    var_1 = 3u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.hlsl
deleted file mode 100644
index e82ac97..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    discard;
-  }
-  discard;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.msl
deleted file mode 100644
index bfbb6f4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-    discard_fragment();
-  }
-  discard_fragment();
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.spvasm
deleted file mode 100644
index 5abbaed..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpKill
-         %11 = OpLabel
-               OpKill
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.wgsl
deleted file mode 100644
index 1da9df0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    discard;
-  }
-  discard;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.msl
deleted file mode 100644
index 76bdb15..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    discard_fragment();
-  }
-  discard_fragment();
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.spvasm
deleted file mode 100644
index 1e9c1fa..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpKill
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpKill
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.wgsl
deleted file mode 100644
index 7fb5f4f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_InsideLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    discard;
-  }
-  discard;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.hlsl
deleted file mode 100644
index 856a956..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  discard;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.msl
deleted file mode 100644
index f5d3c1b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  discard_fragment();
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.spvasm
deleted file mode 100644
index 8b592e7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpKill
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.wgsl
deleted file mode 100644
index dfd6d9e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Kill_TopLevel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  discard;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.msl
deleted file mode 100644
index 6c3b4c4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 10u;
-  while (true) {
-    *(tint_symbol_1) = 20u;
-    if (false) {
-      *(tint_symbol_1) = 30u;
-      {
-        *(tint_symbol_1) = 90u;
-      }
-      continue;
-    } else {
-      *(tint_symbol_1) = 40u;
-    }
-    {
-      *(tint_symbol_1) = 90u;
-    }
-  }
-  *(tint_symbol_1) = 99u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.spvasm
deleted file mode 100644
index 6112971..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_30 = OpConstant %uint 30
-    %uint_40 = OpConstant %uint 40
-    %uint_90 = OpConstant %uint 90
-    %uint_99 = OpConstant %uint 99
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_10
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %19
-         %18 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %12
-         %19 = OpLabel
-               OpStore %var_1 %uint_40
-               OpBranch %17
-         %17 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_90
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_99
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.wgsl
deleted file mode 100644
index 53006f1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_LoopInternallyDiverge_Simple.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 10u;
-  loop {
-    var_1 = 20u;
-    if (false) {
-      var_1 = 30u;
-      continue;
-    } else {
-      var_1 = 40u;
-    }
-
-    continuing {
-      var_1 = 90u;
-    }
-  }
-  var_1 = 99u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.hlsl
deleted file mode 100644
index 5bdbb28..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    var_1 = 1u;
-    break;
-    {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.msl
deleted file mode 100644
index 0891fc7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    break;
-    {
-      *(tint_symbol_1) = 2u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.spvasm
deleted file mode 100644
index 33ba905..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.wgsl
deleted file mode 100644
index bb3843e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyAlwaysBreaks.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    break;
-
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.hlsl
deleted file mode 100644
index c279966..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.msl
deleted file mode 100644
index c26cd2d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      *(tint_symbol_1) = 2u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.spvasm
deleted file mode 100644
index ab8127f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %18
-         %17 = OpLabel
-               OpBranch %16
-         %18 = OpLabel
-               OpBranch %10
-         %16 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.wgsl
deleted file mode 100644
index 68654dd..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.hlsl
deleted file mode 100644
index 3f0228b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    var_1 = 3u;
-    {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.msl
deleted file mode 100644
index d40dfe7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 2u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.spvasm
deleted file mode 100644
index fb79a99..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %18
-         %17 = OpLabel
-               OpBranch %16
-         %18 = OpLabel
-               OpBranch %10
-         %16 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.wgsl
deleted file mode 100644
index 969c912..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromFalse_Early.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.msl
deleted file mode 100644
index 9b16297..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-      break;
-    }
-    {
-      *(tint_symbol_1) = 2u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.spvasm
deleted file mode 100644
index f2da94e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %16
-         %17 = OpLabel
-               OpBranch %10
-         %16 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.wgsl
deleted file mode 100644
index 530220d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    if (false) {
-      break;
-    }
-
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.msl
deleted file mode 100644
index bb370ef..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-      break;
-    }
-    *(tint_symbol_1) = 3u;
-    {
-      *(tint_symbol_1) = 2u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.spvasm
deleted file mode 100644
index c881b61..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %16
-         %17 = OpLabel
-               OpBranch %10
-         %16 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.wgsl
deleted file mode 100644
index b703346..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_BodyConditionallyBreaks_FromTrue_Early.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    if (false) {
-      break;
-    }
-    var_1 = 3u;
-
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.hlsl
deleted file mode 100644
index 6fa8cc9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    var_1 = 2u;
-    {
-      var_1 = 3u;
-    }
-  }
-  var_1 = 4u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.msl
deleted file mode 100644
index a395bdb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    *(tint_symbol_1) = 2u;
-    {
-      *(tint_symbol_1) = 3u;
-    }
-  }
-  *(tint_symbol_1) = 4u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.spvasm
deleted file mode 100644
index 22190e0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %18
-         %17 = OpLabel
-               OpBranch %16
-         %18 = OpLabel
-               OpBranch %10
-         %16 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %9
-         %10 = OpLabel
-               OpStore %var_1 %uint_4
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.wgsl
deleted file mode 100644
index 604b078..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_FalseToBody_TrueBreaks.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    var_1 = 2u;
-
-    continuing {
-      var_1 = 3u;
-    }
-  }
-  var_1 = 4u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.msl
deleted file mode 100644
index 46d558e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    if (false) {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 3u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.spvasm
deleted file mode 100644
index 31320d4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %18
-         %19 = OpLabel
-               OpBranch %11
-         %18 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_3
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.wgsl
deleted file mode 100644
index 61c17a1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_MultiBlockContinueIsEntireLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-    if (false) {
-      break;
-    }
-  }
-  var_1 = 3u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.msl
deleted file mode 100644
index 54b32ea..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    if (false) {
-      *(tint_symbol_1) = 1u;
-      {
-        *(tint_symbol_1) = 3u;
-      }
-      continue;
-    }
-    *(tint_symbol_1) = 2u;
-    {
-      *(tint_symbol_1) = 3u;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.spvasm
deleted file mode 100644
index ce3dbc4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %11
-         %15 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.wgsl
deleted file mode 100644
index 0d66f87..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_NestedIfContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      var_1 = 1u;
-      continue;
-    }
-    var_1 = 2u;
-
-    continuing {
-      var_1 = 3u;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.hlsl
deleted file mode 100644
index d040ced..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    var_1 = 1u;
-    break;
-    {
-      var_1 = 2u;
-    }
-  }
-  var_1 = 3u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.msl
deleted file mode 100644
index e5e10c1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    break;
-    {
-      *(tint_symbol_1) = 2u;
-    }
-  }
-  *(tint_symbol_1) = 3u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.spvasm
deleted file mode 100644
index fe91b41..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %9
-         %10 = OpLabel
-               OpStore %var_1 %uint_3
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.wgsl
deleted file mode 100644
index dbbeae8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Never.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    break;
-
-    continuing {
-      var_1 = 2u;
-    }
-  }
-  var_1 = 3u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.msl
deleted file mode 100644
index ea86c1a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.spvasm
deleted file mode 100644
index b03b091..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.wgsl
deleted file mode 100644
index 533da6e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_BothBackedge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.msl
deleted file mode 100644
index 1c7f5e7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.spvasm
deleted file mode 100644
index 9fde6f5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %17
-         %18 = OpLabel
-               OpBranch %11
-         %17 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.wgsl
deleted file mode 100644
index a02819e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_FalseBackedge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    if (false) {
-      break;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.hlsl
deleted file mode 100644
index 77f5bbc..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 0u;
-  while (true) {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.msl
deleted file mode 100644
index 0544bb1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.spvasm
deleted file mode 100644
index 4719efe..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %19
-         %18 = OpLabel
-               OpBranch %17
-         %19 = OpLabel
-               OpBranch %11
-         %17 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.wgsl
deleted file mode 100644
index 7f67521..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_TrueBackedge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.msl
deleted file mode 100644
index ea86c1a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.spvasm
deleted file mode 100644
index b03b091..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.wgsl
deleted file mode 100644
index 533da6e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_SingleBlock_UnconditionalBackege.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.hlsl
deleted file mode 100644
index 6fa8cc9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    var_1 = 2u;
-    {
-      var_1 = 3u;
-    }
-  }
-  var_1 = 4u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.msl
deleted file mode 100644
index a395bdb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    *(tint_symbol_1) = 2u;
-    {
-      *(tint_symbol_1) = 3u;
-    }
-  }
-  *(tint_symbol_1) = 4u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.spvasm
deleted file mode 100644
index 22190e0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %18
-         %17 = OpLabel
-               OpBranch %16
-         %18 = OpLabel
-               OpBranch %10
-         %16 = OpLabel
-               OpStore %var_1 %uint_2
-               OpBranch %11
-         %11 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %9
-         %10 = OpLabel
-               OpStore %var_1 %uint_4
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.wgsl
deleted file mode 100644
index 604b078..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_TrueToBody_FalseBreaks.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    var_1 = 1u;
-    if (false) {
-    } else {
-      break;
-    }
-    var_1 = 2u;
-
-    continuing {
-      var_1 = 3u;
-    }
-  }
-  var_1 = 4u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.msl
deleted file mode 100644
index 5d8fe8a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    {
-      *(tint_symbol_1) = 3u;
-      if (true) {
-        *(tint_symbol_1) = 4u;
-      }
-      *(tint_symbol_1) = 5u;
-    }
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.spvasm
deleted file mode 100644
index 4b540e5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_3
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpStore %var_1 %uint_4
-               OpBranch %19
-         %19 = OpLabel
-               OpStore %var_1 %uint_5
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.wgsl
deleted file mode 100644
index a031175..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_ContinueNestIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-
-    continuing {
-      var_1 = 3u;
-      if (true) {
-        var_1 = 4u;
-      }
-      var_1 = 5u;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.msl
deleted file mode 100644
index 22de66c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    {
-      *(tint_symbol_1) = 3u;
-      *(tint_symbol_1) = 4u;
-    }
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.spvasm
deleted file mode 100644
index 7606e95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,48 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_3
-               OpStore %var_1 %uint_4
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.wgsl
deleted file mode 100644
index 4f1ff80..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_MultiBlockContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-
-    continuing {
-      var_1 = 3u;
-      var_1 = 4u;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.msl
deleted file mode 100644
index b9531c1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    *(tint_symbol_1) = 1u;
-    *(tint_symbol_1) = 2u;
-    {
-      *(tint_symbol_1) = 3u;
-    }
-  }
-  *(tint_symbol_1) = 999u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.spvasm
deleted file mode 100644
index 76a5593..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-   %uint_999 = OpConstant %uint 999
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_1
-               OpStore %var_1 %uint_2
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %var_1 %uint_3
-               OpBranch %10
-         %11 = OpLabel
-               OpStore %var_1 %uint_999
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.wgsl
deleted file mode 100644
index f5f8f3a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Loop_Unconditional_Body_SingleBlockContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 0u;
-  loop {
-    var_1 = 1u;
-    var_1 = 2u;
-
-    continuing {
-      var_1 = 3u;
-    }
-  }
-  var_1 = 999u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.hlsl
deleted file mode 100644
index 8164e48..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-uint x_200() {
-  if (false) {
-    return 2u;
-  }
-  return 3u;
-}
-
-void main_1() {
-  const uint x_11 = x_200();
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.msl
deleted file mode 100644
index aa29663..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-uint x_200() {
-  if (false) {
-    return 2u;
-  }
-  return 3u;
-}
-
-void main_1() {
-  uint const x_11 = x_200();
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.spvasm
deleted file mode 100644
index d409cac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-          %5 = OpTypeFunction %uint
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-      %x_200 = OpFunction %uint None %5
-          %7 = OpLabel
-               OpSelectionMerge %10 None
-               OpBranchConditional %false %11 %10
-         %11 = OpLabel
-               OpReturnValue %uint_2
-         %10 = OpLabel
-               OpReturnValue %uint_3
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpFunctionCall %uint %x_200
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.wgsl
deleted file mode 100644
index 0923877..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_InsideIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn x_200() -> u32 {
-  if (false) {
-    return 2u;
-  }
-  return 3u;
-}
-
-fn main_1() {
-  let x_11 : u32 = x_200();
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.hlsl
deleted file mode 100644
index 62aef67..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-uint x_200() {
-  while (true) {
-    return 2u;
-  }
-  return 3u;
-}
-
-void main_1() {
-  const uint x_11 = x_200();
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.msl
deleted file mode 100644
index b3e4ce1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-uint x_200() {
-  while (true) {
-    return 2u;
-  }
-  return 3u;
-}
-
-void main_1() {
-  uint const x_11 = x_200();
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.spvasm
deleted file mode 100644
index b2d369d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-          %5 = OpTypeFunction %uint
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-      %x_200 = OpFunction %uint None %5
-          %7 = OpLabel
-               OpBranch %8
-          %8 = OpLabel
-               OpLoopMerge %9 %10 None
-               OpBranch %11
-         %11 = OpLabel
-               OpReturnValue %uint_2
-         %10 = OpLabel
-               OpBranch %8
-          %9 = OpLabel
-               OpReturnValue %uint_3
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpFunctionCall %uint %x_200
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.wgsl
deleted file mode 100644
index fc4233f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_Loop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn x_200() -> u32 {
-  loop {
-    return 2u;
-  }
-  return 3u;
-}
-
-fn main_1() {
-  let x_11 : u32 = x_200();
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.hlsl
deleted file mode 100644
index 3e97fbb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,15 +0,0 @@
-static uint var_1 = 0u;
-
-uint x_200() {
-  return 2u;
-}
-
-void main_1() {
-  const uint x_11 = x_200();
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.msl
deleted file mode 100644
index 379405d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-uint x_200() {
-  return 2u;
-}
-
-void main_1() {
-  uint const x_11 = x_200();
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.spvasm
deleted file mode 100644
index d37a80b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-          %5 = OpTypeFunction %uint
-     %uint_2 = OpConstant %uint 2
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-      %x_200 = OpFunction %uint None %5
-          %7 = OpLabel
-               OpReturnValue %uint_2
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %13 = OpFunctionCall %uint %x_200
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.wgsl
deleted file mode 100644
index 9aecfcd..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_ReturnValue_TopLevel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn x_200() -> u32 {
-  return 2u;
-}
-
-fn main_1() {
-  let x_11 : u32 = x_200();
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.hlsl
deleted file mode 100644
index dc451e9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    return;
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.msl
deleted file mode 100644
index fb3b83a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-    return;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.spvasm
deleted file mode 100644
index 9558a9a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpReturn
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.wgsl
deleted file mode 100644
index 4da92df..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    return;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.hlsl
deleted file mode 100644
index b9dbbea..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    return;
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.msl
deleted file mode 100644
index d80c8fa..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    return;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.spvasm
deleted file mode 100644
index f445af6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpReturn
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.wgsl
deleted file mode 100644
index 3e1a55f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_InsideLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    return;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Return_TopLevel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.hlsl
deleted file mode 100644
index 594c316..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42) {
-    case -294967296: {
-      var_1 = 40u;
-      break;
-    }
-    case 2000000000: {
-      var_1 = 30u;
-      break;
-    }
-    case 20: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.msl
deleted file mode 100644
index 3e10b9f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42) {
-    case -294967296: {
-      *(tint_symbol_1) = 40u;
-      break;
-    }
-    case 2000000000: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    case 20: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.spvasm
deleted file mode 100644
index c4d6470..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-     %int_42 = OpConstant %int 42
-    %uint_40 = OpConstant %uint 40
-    %uint_30 = OpConstant %uint 30
-    %uint_20 = OpConstant %uint 20
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %int_42 %13 -294967296 %14 2000000000 %15 20 %16
-         %14 = OpLabel
-               OpStore %var_1 %uint_40
-               OpBranch %10
-         %15 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %16 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %13 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.wgsl
deleted file mode 100644
index fb63bf3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_SintValue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42) {
-    case -294967296: {
-      var_1 = 40u;
-    }
-    case 2000000000: {
-      var_1 = 30u;
-    }
-    case 20: {
-      var_1 = 20u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.hlsl
deleted file mode 100644
index 752ebc8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 50u: {
-      var_1 = 40u;
-      break;
-    }
-    case 2000000000u: {
-      var_1 = 30u;
-      break;
-    }
-    case 20u: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.msl
deleted file mode 100644
index 1fd89e9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 50u: {
-      *(tint_symbol_1) = 40u;
-      break;
-    }
-    case 2000000000u: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.spvasm
deleted file mode 100644
index dc8924f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_40 = OpConstant %uint 40
-    %uint_30 = OpConstant %uint 30
-    %uint_20 = OpConstant %uint 20
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 50 %13 2000000000 %14 20 %15
-         %13 = OpLabel
-               OpStore %var_1 %uint_40
-               OpBranch %10
-         %14 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %15 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.wgsl
deleted file mode 100644
index fcfc593..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_Case_UintValue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 50u: {
-      var_1 = 40u;
-    }
-    case 2000000000u: {
-      var_1 = 30u;
-    }
-    case 20u: {
-      var_1 = 20u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.hlsl
deleted file mode 100644
index 808a33f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 40u: {
-      var_1 = 40u;
-      break;
-    }
-    case 20u: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      var_1 = 30u;
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.msl
deleted file mode 100644
index e6c97a1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 40u: {
-      *(tint_symbol_1) = 40u;
-      break;
-    }
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.spvasm
deleted file mode 100644
index 51a1ac2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.spvasm
+++ /dev/null
@@ -1,47 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_40 = OpConstant %uint 40
-    %uint_20 = OpConstant %uint 20
-    %uint_30 = OpConstant %uint 30
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 40 %13 20 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_40
-               OpBranch %10
-         %14 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %12 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.wgsl
deleted file mode 100644
index 9f0eaa9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_NoDupCases.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 40u: {
-      var_1 = 40u;
-    }
-    case 20u: {
-      var_1 = 20u;
-    }
-    default: {
-      var_1 = 30u;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.hlsl
deleted file mode 100644
index 66c5986..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 40u: {
-      var_1 = 40u;
-      break;
-    }
-    case 20u: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      /* fallthrough */
-      {
-        var_1 = 30u;
-      }
-      break;
-    }
-    case 30u: {
-      var_1 = 30u;
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.msl
deleted file mode 100644
index e78e905..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 40u: {
-      *(tint_symbol_1) = 40u;
-      break;
-    }
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      /* fallthrough */
-    }
-    case 30u: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.spvasm
deleted file mode 100644
index c8eacd3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_40 = OpConstant %uint 40
-    %uint_20 = OpConstant %uint 20
-    %uint_30 = OpConstant %uint 30
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 40 %13 20 %14 30 %15
-         %13 = OpLabel
-               OpStore %var_1 %uint_40
-               OpBranch %10
-         %14 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.wgsl
deleted file mode 100644
index b933eab..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsCase_WithDupCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 40u: {
-      var_1 = 40u;
-    }
-    case 20u: {
-      var_1 = 20u;
-    }
-    default: {
-      fallthrough;
-    }
-    case 30u: {
-      var_1 = 30u;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.hlsl
deleted file mode 100644
index 3f4408c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 30u: {
-      var_1 = 30u;
-      break;
-    }
-    case 20u:
-    case 40u: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.msl
deleted file mode 100644
index d0df57a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 30u: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    case 20u:
-    case 40u: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.spvasm
deleted file mode 100644
index c89d848..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_30 = OpConstant %uint 30
-    %uint_20 = OpConstant %uint 20
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 30 %13 20 %14 40 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %14 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.wgsl
deleted file mode 100644
index 9e4b23f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_CasesWithDup.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 30u: {
-      var_1 = 30u;
-    }
-    case 20u, 40u: {
-      var_1 = 20u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.hlsl
deleted file mode 100644
index 1fcc430..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.msl
deleted file mode 100644
index cfffd8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.spvasm
deleted file mode 100644
index 330516e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.wgsl
deleted file mode 100644
index 5d5acac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_NoCases.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.hlsl
deleted file mode 100644
index dc27829..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.msl
deleted file mode 100644
index 722311b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.spvasm
deleted file mode 100644
index 3533650..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_20 = OpConstant %uint 20
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 20 %13
-         %13 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.wgsl
deleted file mode 100644
index 8452e21..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_OneCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 20u: {
-      var_1 = 20u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.hlsl
deleted file mode 100644
index acad3e5..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 30u: {
-      var_1 = 30u;
-      break;
-    }
-    case 20u: {
-      var_1 = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.msl
deleted file mode 100644
index 4fdb0f6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 1u;
-  switch(42u) {
-    case 30u: {
-      *(tint_symbol_1) = 30u;
-      break;
-    }
-    case 20u: {
-      *(tint_symbol_1) = 20u;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_1) = 7u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.spvasm
deleted file mode 100644
index 1a30d6c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-    %uint_42 = OpConstant %uint 42
-    %uint_30 = OpConstant %uint 30
-    %uint_20 = OpConstant %uint 20
-     %uint_7 = OpConstant %uint 7
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %var_1 %uint_1
-               OpSelectionMerge %10 None
-               OpSwitch %uint_42 %12 30 %13 20 %14
-         %13 = OpLabel
-               OpStore %var_1 %uint_30
-               OpBranch %10
-         %14 = OpLabel
-               OpStore %var_1 %uint_20
-               OpBranch %10
-         %12 = OpLabel
-               OpBranch %10
-         %10 = OpLabel
-               OpStore %var_1 %uint_7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.wgsl
deleted file mode 100644
index 9668adb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Switch_DefaultIsMerge_TwoCases.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  var_1 = 1u;
-  switch(42u) {
-    case 30u: {
-      var_1 = 30u;
-    }
-    case 20u: {
-      var_1 = 20u;
-    }
-    default: {
-    }
-  }
-  var_1 = 7u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.msl
deleted file mode 100644
index a0c4009..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.spvasm
deleted file mode 100644
index dc36d5b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %11
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.wgsl
deleted file mode 100644
index 76e6581..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_LoopContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.hlsl
deleted file mode 100644
index f7b800d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.msl
deleted file mode 100644
index 0b3ef61..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.spvasm
deleted file mode 100644
index 79f2cfc..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_20 %11 20 %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %9
-         %15 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.wgsl
deleted file mode 100644
index f65408d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_TrueBranch_SwitchBreak.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.hlsl
deleted file mode 100644
index b169b45..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.hlsl
+++ /dev/null
@@ -1,15 +0,0 @@
-static uint var_1 = 0u;
-
-uint x_200() {
-  return 0u;
-}
-
-void main_1() {
-  const uint x_11 = x_200();
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.msl
deleted file mode 100644
index cb0c2e9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-uint x_200() {
-  return 0u;
-}
-
-void main_1() {
-  uint const x_11 = x_200();
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.spvasm
deleted file mode 100644
index ff27b30..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-          %5 = OpTypeFunction %uint
-     %uint_0 = OpConstant %uint 0
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-      %x_200 = OpFunction %uint None %5
-          %7 = OpLabel
-               OpReturnValue %uint_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-         %13 = OpFunctionCall %uint %x_200
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.wgsl
deleted file mode 100644
index 99dd21f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InNonVoidFunction.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn x_200() -> u32 {
-  return 0u;
-}
-
-fn main_1() {
-  let x_11 : u32 = x_200();
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.hlsl
deleted file mode 100644
index dc451e9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    return;
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.msl
deleted file mode 100644
index fb3b83a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-    return;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.spvasm
deleted file mode 100644
index 9558a9a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpReturn
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.wgsl
deleted file mode 100644
index 4da92df..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    return;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.hlsl
deleted file mode 100644
index b9dbbea..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    return;
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.msl
deleted file mode 100644
index d80c8fa..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    return;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.spvasm
deleted file mode 100644
index f445af6..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpReturn
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.wgsl
deleted file mode 100644
index 3e1a55f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_InsideLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    return;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_EmitBody_Unreachable_TopLevel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ElseOnly.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopBreak_Ok.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.msl
deleted file mode 100644
index 6ea82c9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.spvasm
deleted file mode 100644
index 8c7bc0c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %11
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.wgsl
deleted file mode 100644
index 169951e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_LoopContinue_Ok.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.hlsl
deleted file mode 100644
index ea27551..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-      } else {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.msl
deleted file mode 100644
index 1d512d2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-      } else {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.spvasm
deleted file mode 100644
index 0d6e7ce..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_20 %11 20 %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %9
-         %15 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.wgsl
deleted file mode 100644
index 419b2af..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_FalseBranch_SwitchBreak_Ok.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_IfOnly.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_NoIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.hlsl
deleted file mode 100644
index 6280e0e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.msl
deleted file mode 100644
index ec038a3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.spvasm
deleted file mode 100644
index 0979ee2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpSelectionMerge %14 None
-               OpBranchConditional %true %15 %14
-         %15 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.wgsl
deleted file mode 100644
index 4abd08f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ElseDirectToThen.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.hlsl
deleted file mode 100644
index 6280e0e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.msl
deleted file mode 100644
index ec038a3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.spvasm
deleted file mode 100644
index 0979ee2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpSelectionMerge %14 None
-               OpBranchConditional %true %15 %14
-         %15 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.wgsl
deleted file mode 100644
index 4abd08f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_Simple.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.hlsl
deleted file mode 100644
index 6280e0e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.msl
deleted file mode 100644
index ec038a3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.spvasm
deleted file mode 100644
index 0979ee2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpSelectionMerge %14 None
-               OpBranchConditional %true %15 %14
-         %15 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.wgsl
deleted file mode 100644
index 4abd08f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Premerge_ThenDirectToElse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  if (true) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_Regardless.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_ThenElse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.msl
deleted file mode 100644
index fc2a957..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.spvasm
deleted file mode 100644
index e406af2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.wgsl
deleted file mode 100644
index d089493..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.msl
deleted file mode 100644
index a0c4009..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.spvasm
deleted file mode 100644
index dc36d5b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %11
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.wgsl
deleted file mode 100644
index 76e6581..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopContinue_Ok.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.hlsl
deleted file mode 100644
index f7b800d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.msl
deleted file mode 100644
index 0b3ef61..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.spvasm
deleted file mode 100644
index 79f2cfc..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_20 %11 20 %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %9
-         %15 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.wgsl
deleted file mode 100644
index f65408d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_SwitchBreak_Ok.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(20u) {
-    case 20u: {
-      if (false) {
-        break;
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.hlsl
deleted file mode 100644
index f8e1ca9..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    default: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 200u: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.msl
deleted file mode 100644
index 2c5820d..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    default: {
-      /* fallthrough */
-    }
-    case 200u: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.spvasm
deleted file mode 100644
index 2ab5766..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 200 %12
-         %11 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.wgsl
deleted file mode 100644
index f7802bd..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsDefault.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    default: {
-      fallthrough;
-    }
-    case 200u: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.hlsl
deleted file mode 100644
index c9cc499..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 200u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.msl
deleted file mode 100644
index 53a599e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 200u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.spvasm
deleted file mode 100644
index 64b98ee..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 200 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.wgsl
deleted file mode 100644
index d498fce..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_CaseIsNotDefault.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 200u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.hlsl
deleted file mode 100644
index b37d337..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.msl
deleted file mode 100644
index 9ea19ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.spvasm
deleted file mode 100644
index 53e2006..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.wgsl
deleted file mode 100644
index fe32b0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsMerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.hlsl
deleted file mode 100644
index b37d337..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.msl
deleted file mode 100644
index 9ea19ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.spvasm
deleted file mode 100644
index 53e2006..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.wgsl
deleted file mode 100644
index fe32b0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_DefaultIsNotMerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.hlsl
deleted file mode 100644
index 8b113db..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 200u:
-    case 300u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.msl
deleted file mode 100644
index 7c822a3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 200u:
-    case 300u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.spvasm
deleted file mode 100644
index f2feb0e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 200 %12 300 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.wgsl
deleted file mode 100644
index 2913781..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_ManyValuesWithSameCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 200u, 300u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_FindSwitchCaseHeaders_NoSwitch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_FunctionIsOnlyIfSelectionAndItsMerge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.msl
deleted file mode 100644
index a0c4009..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.spvasm
deleted file mode 100644
index dc36d5b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %15
-         %16 = OpLabel
-               OpBranch %11
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.wgsl
deleted file mode 100644
index 76e6581..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_LoopInterallyDiverge.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-      continue;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.hlsl
deleted file mode 100644
index 3848446..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.msl
deleted file mode 100644
index 94480e4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.spvasm
deleted file mode 100644
index 2368871..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpLoopMerge %14 %15 None
-               OpBranch %16
-         %16 = OpLabel
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %19
-         %18 = OpLabel
-               OpBranch %17
-         %19 = OpLabel
-               OpBranch %14
-         %17 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpBranch %13
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.wgsl
deleted file mode 100644
index c4f4627..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoMultiBlockLoopHeader.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index 4058d37..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 94480e4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 2368871..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpLoopMerge %14 %15 None
-               OpBranch %16
-         %16 = OpLabel
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %19
-         %18 = OpLabel
-               OpBranch %17
-         %19 = OpLabel
-               OpBranch %14
-         %17 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpBranch %13
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index c4f4627..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MergeBlockIsAlsoSingleBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_MultiBlockLoop_HeaderIsNotContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.hlsl
deleted file mode 100644
index 1739c33..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    if (false) {
-    }
-  } else {
-    if (false) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.msl
deleted file mode 100644
index 2384b83..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-    if (false) {
-    }
-  } else {
-    if (false) {
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.spvasm
deleted file mode 100644
index 6704967..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %13
-         %12 = OpLabel
-               OpSelectionMerge %14 None
-               OpBranchConditional %false %15 %14
-         %15 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpBranch %11
-         %13 = OpLabel
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %16
-         %17 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.wgsl
deleted file mode 100644
index f60e6ae..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_If.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    if (false) {
-    }
-  } else {
-    if (false) {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index 0033e41..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    while (true) {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 3869dc8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-    while (true) {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index e669414..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpLoopMerge %14 %15 None
-               OpBranch %16
-         %16 = OpLabel
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %19
-         %18 = OpLabel
-               OpBranch %17
-         %19 = OpLabel
-               OpBranch %14
-         %17 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpBranch %13
-         %14 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index bcc1dec..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_MultiBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    loop {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index 38d4913..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    {
-      for(; false; ) {
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 3869dc8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-    while (true) {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index e669414..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpLoopMerge %14 %15 None
-               OpBranch %16
-         %16 = OpLabel
-               OpSelectionMerge %17 None
-               OpBranchConditional %false %18 %19
-         %18 = OpLabel
-               OpBranch %17
-         %19 = OpLabel
-               OpBranch %14
-         %17 = OpLabel
-               OpBranch %15
-         %15 = OpLabel
-               OpBranch %13
-         %14 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index bcc1dec..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_SingleBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    loop {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.hlsl
deleted file mode 100644
index 905bf2e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-    switch(42u) {
-      case 20u: {
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.msl
deleted file mode 100644
index 34d6676..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-    switch(42u) {
-      case 20u: {
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.spvasm
deleted file mode 100644
index 814f5d4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpSelectionMerge %13 None
-               OpSwitch %uint_42 %15 20 %16
-         %16 = OpLabel
-               OpBranch %13
-         %15 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.wgsl
deleted file mode 100644
index ac2fe60..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_If_Switch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-    switch(42u) {
-      case 20u: {
-      }
-      default: {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.hlsl
deleted file mode 100644
index b39c5d2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      if (true) {
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.msl
deleted file mode 100644
index a4a4352..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      if (true) {
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.spvasm
deleted file mode 100644
index 0ca7bb7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.wgsl
deleted file mode 100644
index 6dc2d6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_LoopContinue_If.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-
-    continuing {
-      if (true) {
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.hlsl
deleted file mode 100644
index aca28ce..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.msl
deleted file mode 100644
index 3d8920a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.spvasm
deleted file mode 100644
index 84909b2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.spvasm
+++ /dev/null
@@ -1,51 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.wgsl
deleted file mode 100644
index 3ce9f4e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_If.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    if (true) {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.hlsl
deleted file mode 100644
index b858639..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,20 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    {
-      for(; true; ) {
-      }
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.msl
deleted file mode 100644
index 82f6bba..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.spvasm
deleted file mode 100644
index 60462be..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,62 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-               OpSelectionMerge %23 None
-               OpBranchConditional %true %24 %25
-         %24 = OpLabel
-               OpBranch %23
-         %25 = OpLabel
-               OpBranch %19
-         %23 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpBranch %18
-         %19 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.wgsl
deleted file mode 100644
index de05e86..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Loop_Loop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.hlsl
deleted file mode 100644
index 3aae378..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 50u: {
-      if (false) {
-      }
-      break;
-    }
-    case 20u: {
-      if (false) {
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.msl
deleted file mode 100644
index 7524d03..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 50u: {
-      if (false) {
-      }
-      break;
-    }
-    case 20u: {
-      if (false) {
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.spvasm
deleted file mode 100644
index 590fccb..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.spvasm
+++ /dev/null
@@ -1,49 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 50 %12 20 %13
-         %12 = OpLabel
-               OpSelectionMerge %16 None
-               OpBranchConditional %false %17 %16
-         %17 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpBranch %9
-         %13 = OpLabel
-               OpSelectionMerge %18 None
-               OpBranchConditional %false %19 %18
-         %19 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.wgsl
deleted file mode 100644
index 3a7d97b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_Nest_Switch_If.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 50u: {
-      if (false) {
-      }
-    }
-    case 20u: {
-      if (false) {
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_MultiBlock.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_OuterConstructIsFunction_SingleBlock.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_PaddingBlocksBeforeAndAfterStructuredConstruct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SingleBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.hlsl
deleted file mode 100644
index 77d4580..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      break;
-    }
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.msl
deleted file mode 100644
index edafec2..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 30u: {
-      break;
-    }
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.spvasm
deleted file mode 100644
index d3cfeb1..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 30 %12 20 %13
-         %12 = OpLabel
-               OpBranch %9
-         %13 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.wgsl
deleted file mode 100644
index 8509af3..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_LabelControlFlowConstructs_SwitchSelection.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 30u: {
-    }
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.msl
deleted file mode 100644
index 598fdda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.spvasm
deleted file mode 100644
index abe0206..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.wgsl
deleted file mode 100644
index 8c64952..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsHeader.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_Branch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_MultiBlockLoop_ContinueIsNotHeader_BranchConditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodLoopMerge_SingleBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_BranchConditional.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.hlsl
deleted file mode 100644
index b37d337..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.msl
deleted file mode 100644
index 9ea19ca..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.spvasm
deleted file mode 100644
index 53e2006..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12
-         %12 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.wgsl
deleted file mode 100644
index fe32b0f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_GoodSelectionMerge_Switch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_RegisterMerges_NoMerges.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_ContinueIsWholeMultiBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_HasSiblingLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_NotAContinue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_Null.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_SiblingLoopConstruct_SingleBlockLoop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_If.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.hlsl
deleted file mode 100644
index 856a956..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  discard;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.msl
deleted file mode 100644
index f5d3c1b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  discard_fragment();
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.spvasm
deleted file mode 100644
index 8b592e7..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpKill
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.wgsl
deleted file mode 100644
index dfd6d9e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Kill.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  discard;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_Simple.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Loop_SingleBlock.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Sequence.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_SingleBlock.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.hlsl
deleted file mode 100644
index 05eab6e..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.hlsl
+++ /dev/null
@@ -1,24 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 30u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.msl
deleted file mode 100644
index 9b574ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  switch(42u) {
-    case 20u: {
-      /* fallthrough */
-    }
-    case 30u: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.spvasm
deleted file mode 100644
index fb94495..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %9 None
-               OpSwitch %uint_42 %11 20 %12 30 %13
-         %12 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpBranch %9
-         %11 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.wgsl
deleted file mode 100644
index d39a7b8..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Switch.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  switch(42u) {
-    case 20u: {
-      fallthrough;
-    }
-    case 30u: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.hlsl
deleted file mode 100644
index a126c6f..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.spvasm
deleted file mode 100644
index 4486cda..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.wgsl
deleted file mode 100644
index bb48a6a..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_TerminatorsAreValid_Unreachable.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.hlsl
deleted file mode 100644
index ad01345..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_MultiBlockLoop_Good.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.hlsl
deleted file mode 100644
index 581055b..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.msl
deleted file mode 100644
index 4661d81..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  if (false) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.spvasm
deleted file mode 100644
index 857ac95..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.wgsl
deleted file mode 100644
index b9d9b8c..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_Selection_Good.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  if (false) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.hlsl
deleted file mode 100644
index a6998ac..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint var_1 = 0u;
-
-void main_1() {
-  {
-    for(; false; ) {
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.msl
deleted file mode 100644
index 52904a0..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.spvasm
deleted file mode 100644
index 6f107a4..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.spvasm
+++ /dev/null
@@ -1,45 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %var_1 "var_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %var_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpLoopMerge %10 %11 None
-               OpBranch %12
-         %12 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %false %16 %17
-         %16 = OpLabel
-               OpBranch %15
-         %17 = OpLabel
-               OpBranch %10
-         %15 = OpLabel
-               OpBranch %11
-         %11 = OpLabel
-               OpBranch %9
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.wgsl
deleted file mode 100644
index 834ea70..0000000
--- a/test/unittest/reader/spirv/SpvParserCFGTest_VerifyHeaderContinueMergeOrder_SingleBlockLoop_Good.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> var_1 : u32;
-
-fn main_1() {
-  loop {
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.hlsl
deleted file mode 100644
index e89cc85..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  uint x_1 = 0u;
-  uint x_2 = 0u;
-  uint x_3 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.msl
deleted file mode 100644
index 7256baf..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  uint x_1 = 0u;
-  uint x_2 = 0u;
-  uint x_3 = 0u;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.spvasm
deleted file mode 100644
index a3c9176..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_uint Function %8
-        %x_2 = OpVariable %_ptr_Function_uint Function %8
-        %x_3 = OpVariable %_ptr_Function_uint Function %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.wgsl
deleted file mode 100644
index 4c3887f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_AnonymousVars.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_1 : u32;
-  var x_2 : u32;
-  var x_3 : u32;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 6ac840c..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  uint x_200[2] = {1u, 2u};
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.msl
deleted file mode 100644
index fc01ca2..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  tint_array_wrapper x_200 = {.arr={1u, 2u}};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.spvasm
deleted file mode 100644
index cc3cfdd..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-     %uint_1 = OpConstant %uint 1
-          %9 = OpConstantComposite %_arr_uint_uint_2 %uint_1 %uint_2
-%_ptr_Function__arr_uint_uint_2 = OpTypePointer Function %_arr_uint_uint_2
-         %12 = OpConstantNull %_arr_uint_uint_2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function__arr_uint_uint_2 Function %12
-               OpStore %x_200 %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.wgsl
deleted file mode 100644
index db2452e..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_200 : array<u32, 2> = array<u32, 2>(1u, 2u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.hlsl
deleted file mode 100644
index 39503fc..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-struct tint_padded_array_element {
-  uint el;
-};
-
-void main_1() {
-  tint_padded_array_element x_200[2] = {{1u}, {2u}};
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.msl
deleted file mode 100644
index f097d24..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  uint el;
-};
-struct tint_array_wrapper {
-  tint_padded_array_element arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  tint_array_wrapper x_200 = {.arr={{.el=1u}, {.el=2u}}};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.spvasm
deleted file mode 100644
index 1825b90..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_2 ArrayStride 16
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-     %uint_1 = OpConstant %uint 1
-          %9 = OpConstantComposite %_arr_uint_uint_2 %uint_1 %uint_2
-%_ptr_Function__arr_uint_uint_2 = OpTypePointer Function %_arr_uint_uint_2
-         %12 = OpConstantNull %_arr_uint_uint_2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function__arr_uint_uint_2 Function %12
-               OpStore %x_200 %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.wgsl
deleted file mode 100644
index a517f83..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-type Arr = [[stride(16)]] array<u32, 2>;
-
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : Arr;
-};
-
-fn main_1() {
-  var x_200 : Arr = Arr(1u, 2u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.hlsl
deleted file mode 100644
index 5daca9f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-struct tint_padded_array_element {
-  uint el;
-};
-
-void main_1() {
-  tint_padded_array_element x_200[2] = {{0u}, {0u}};
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.msl
deleted file mode 100644
index 3a99c0f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  uint el;
-};
-struct tint_array_wrapper {
-  tint_padded_array_element arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  tint_array_wrapper x_200 = {.arr={{.el=0u}, {.el=0u}}};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.spvasm
deleted file mode 100644
index ef2915c..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_2 ArrayStride 16
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-     %uint_0 = OpConstant %uint 0
-          %9 = OpConstantComposite %_arr_uint_uint_2 %uint_0 %uint_0
-%_ptr_Function__arr_uint_uint_2 = OpTypePointer Function %_arr_uint_uint_2
-         %12 = OpConstantNull %_arr_uint_uint_2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function__arr_uint_uint_2 Function %12
-               OpStore %x_200 %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.wgsl
deleted file mode 100644
index be10f25..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Alias_Null.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-type Arr = [[stride(16)]] array<u32, 2>;
-
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : Arr;
-};
-
-fn main_1() {
-  var x_200 : Arr = Arr(0u, 0u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.hlsl
deleted file mode 100644
index c51a182..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  uint x_200[2] = {0u, 0u};
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.msl
deleted file mode 100644
index de6f9c2..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  tint_array_wrapper x_200 = {.arr={0u, 0u}};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.spvasm
deleted file mode 100644
index 0aa594f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-     %uint_0 = OpConstant %uint 0
-          %9 = OpConstantComposite %_arr_uint_uint_2 %uint_0 %uint_0
-%_ptr_Function__arr_uint_uint_2 = OpTypePointer Function %_arr_uint_uint_2
-         %12 = OpConstantNull %_arr_uint_uint_2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function__arr_uint_uint_2 Function %12
-               OpStore %x_200 %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.wgsl
deleted file mode 100644
index b8e3ed6..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ArrayInitializer_Null.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_200 : array<u32, 2> = array<u32, 2>(0u, 0u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.hlsl
deleted file mode 100644
index 529c7bd..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  float myvar = 0.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.msl
deleted file mode 100644
index 74976c4..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float myvar = 0.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.spvasm
deleted file mode 100644
index d5ae00f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %myvar "myvar"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-%_ptr_Function_float = OpTypePointer Function %float
-          %8 = OpConstantNull %float
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %myvar = OpVariable %_ptr_Function_float Function %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.wgsl
deleted file mode 100644
index dd324f6..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_Decorate_RelaxedPrecision.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  var myvar : f32;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.hlsl
deleted file mode 100644
index b5e7894..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  float3x2 x_200 = float3x2(float2(1.5f, 2.0f), float2(2.0f, 3.0f), float2(3.0f, 4.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.msl
deleted file mode 100644
index f23bd3f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  float3x2 x_200 = float3x2(float2(1.5f, 2.0f), float2(2.0f, 3.0f), float2(3.0f, 4.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.spvasm
deleted file mode 100644
index 4d0d45e..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-  %float_1_5 = OpConstant %float 1.5
-    %float_2 = OpConstant %float 2
-         %10 = OpConstantComposite %v2float %float_1_5 %float_2
-    %float_3 = OpConstant %float 3
-         %12 = OpConstantComposite %v2float %float_2 %float_3
-    %float_4 = OpConstant %float 4
-         %14 = OpConstantComposite %v2float %float_3 %float_4
-         %15 = OpConstantComposite %mat3v2float %10 %12 %14
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %18 = OpConstantNull %mat3v2float
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function_mat3v2float Function %18
-               OpStore %x_200 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.wgsl
deleted file mode 100644
index 20a04e2..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MatrixInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_200 : mat3x2<f32> = mat3x2<f32>(vec2<f32>(1.5, 2.0), vec2<f32>(2.0, 3.0), vec2<f32>(3.0, 4.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.hlsl
deleted file mode 100644
index bee12fd..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-struct strct {
-  float field0;
-};
-
-void main_1() {
-  strct myvar = (strct)0;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.msl
deleted file mode 100644
index a472ed1..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct strct {
-  float field0;
-};
-
-void main_1() {
-  strct myvar = {};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.spvasm
deleted file mode 100644
index 706ab89..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %strct "strct"
-               OpMemberName %strct 0 "field0"
-               OpName %myvar "myvar"
-               OpName %main "main"
-               OpMemberDecorate %strct 0 Offset 0
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-      %strct = OpTypeStruct %float
-%_ptr_Function_strct = OpTypePointer Function %strct
-          %9 = OpConstantNull %strct
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %myvar = OpVariable %_ptr_Function_strct Function %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.wgsl
deleted file mode 100644
index 2018ad4..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MemberDecorate_RelaxedPrecision.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-struct strct {
-  field0 : f32;
-};
-
-fn main_1() {
-  var myvar : strct;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.hlsl
deleted file mode 100644
index 4b152b0..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  uint a = 0u;
-  int b = 0;
-  float c = 0.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.msl
deleted file mode 100644
index 5165012..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  uint a = 0u;
-  int b = 0;
-  float c = 0.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.spvasm
deleted file mode 100644
index f12a1f6..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpConstantNull %int
-      %float = OpTypeFloat 32
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %8
-          %b = OpVariable %_ptr_Function_int Function %12
-          %c = OpVariable %_ptr_Function_float Function %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.wgsl
deleted file mode 100644
index 724c200..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_MixedTypes.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var a : u32;
-  var b : i32;
-  var c : f32;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.hlsl
deleted file mode 100644
index 92a2bcc..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  uint a = 0u;
-  uint b = 0u;
-  uint c = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.msl
deleted file mode 100644
index 60e829f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  uint a = 0u;
-  uint b = 0u;
-  uint c = 0u;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.spvasm
deleted file mode 100644
index c4a447e..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %8
-          %b = OpVariable %_ptr_Function_uint Function %8
-          %c = OpVariable %_ptr_Function_uint Function %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.wgsl
deleted file mode 100644
index 391c0d5..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_NamedVars.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var a : u32;
-  var b : u32;
-  var c : u32;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.hlsl
deleted file mode 100644
index 79b8275..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-void main_1() {
-  bool a = true;
-  bool b = false;
-  int c = -1;
-  uint d = 1u;
-  float e = 1.5f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.msl
deleted file mode 100644
index b353732..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  bool a = true;
-  bool b = false;
-  int c = -1;
-  uint d = 1u;
-  float e = 1.5f;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.spvasm
deleted file mode 100644
index ab7324f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %e "e"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-          %9 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-        %int = OpTypeInt 32 1
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_int = OpTypePointer Function %int
-         %16 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %21 = OpConstantNull %uint
-      %float = OpTypeFloat 32
-  %float_1_5 = OpConstant %float 1.5
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %a = OpVariable %_ptr_Function_bool Function %9
-          %b = OpVariable %_ptr_Function_bool Function %9
-          %c = OpVariable %_ptr_Function_int Function %16
-          %d = OpVariable %_ptr_Function_uint Function %21
-          %e = OpVariable %_ptr_Function_float Function %26
-               OpStore %a %true
-               OpStore %b %false
-               OpStore %c %int_n1
-               OpStore %d %uint_1
-               OpStore %e %float_1_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.wgsl
deleted file mode 100644
index f37bcb0..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarInitializers.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var a : bool = true;
-  var b : bool = false;
-  var c : i32 = -1;
-  var d : u32 = 1u;
-  var e : f32 = 1.5;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.hlsl
deleted file mode 100644
index b9e839b..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  bool a = false;
-  int b = 0;
-  uint c = 0u;
-  float d = 0.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.msl
deleted file mode 100644
index 43076d2..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  bool a = false;
-  int b = 0;
-  uint c = 0u;
-  float d = 0.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.spvasm
deleted file mode 100644
index 085f1ef..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 28
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-          %9 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Function_int = OpTypePointer Function %int
-         %14 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %19 = OpConstantNull %uint
-      %float = OpTypeFloat 32
-    %float_0 = OpConstant %float 0
-%_ptr_Function_float = OpTypePointer Function %float
-         %24 = OpConstantNull %float
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %a = OpVariable %_ptr_Function_bool Function %9
-          %b = OpVariable %_ptr_Function_int Function %14
-          %c = OpVariable %_ptr_Function_uint Function %19
-          %d = OpVariable %_ptr_Function_float Function %24
-               OpStore %a %false
-               OpStore %b %int_0
-               OpStore %c %uint_0
-               OpStore %d %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.wgsl
deleted file mode 100644
index 2e764c2..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_ScalarNullInitializers.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var a : bool = false;
-  var b : i32 = 0;
-  var c : u32 = 0u;
-  var d : f32 = 0.0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.hlsl
deleted file mode 100644
index b9c297e..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  uint algo;
-};
-struct S_1 {
-  uint rithm;
-};
-
-void main_1() {
-  S x_40 = (S)0;
-  S_1 x_41 = (S_1)0;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.msl
deleted file mode 100644
index 98d5b76..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  uint algo;
-};
-struct S_1 {
-  uint rithm;
-};
-
-void main_1() {
-  S x_40 = {};
-  S_1 x_41 = {};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.spvasm
deleted file mode 100644
index 66cb234..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.spvasm
+++ /dev/null
@@ -1,39 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "algo"
-               OpName %x_40 "x_40"
-               OpName %S_1 "S_1"
-               OpMemberName %S_1 0 "rithm"
-               OpName %x_41 "x_41"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S_1 0 Offset 0
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-          %S = OpTypeStruct %uint
-%_ptr_Function_S = OpTypePointer Function %S
-          %9 = OpConstantNull %S
-        %S_1 = OpTypeStruct %uint
-%_ptr_Function_S_1 = OpTypePointer Function %S_1
-         %13 = OpConstantNull %S_1
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_40 = OpVariable %_ptr_Function_S Function %9
-       %x_41 = OpVariable %_ptr_Function_S_1 Function %13
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.wgsl
deleted file mode 100644
index 541f264..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructDifferOnlyInMemberName.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-struct S {
-  algo : u32;
-};
-
-struct S_1 {
-  rithm : u32;
-};
-
-fn main_1() {
-  var x_40 : S;
-  var x_41 : S_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.hlsl
deleted file mode 100644
index a7c957d..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  uint field0;
-  float field1;
-  uint field2[2];
-};
-
-void main_1() {
-  const uint tint_symbol[2] = {1u, 2u};
-  S x_200 = {1u, 1.5f, tint_symbol};
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.msl
deleted file mode 100644
index ac9741f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  tint_array_wrapper const tint_symbol_1 = {.arr={1u, 2u}};
-  S x_200 = {.field0=1u, .field1=1.5f, .field2=tint_symbol_1};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.spvasm
deleted file mode 100644
index bab5b05..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-          %S = OpTypeStruct %uint %float %_arr_uint_uint_2
-     %uint_1 = OpConstant %uint 1
-  %float_1_5 = OpConstant %float 1.5
-         %12 = OpConstantComposite %_arr_uint_uint_2 %uint_1 %uint_2
-         %13 = OpConstantComposite %S %uint_1 %float_1_5 %12
-%_ptr_Function_S = OpTypePointer Function %S
-         %16 = OpConstantNull %S
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function_S Function %16
-               OpStore %x_200 %13
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.wgsl
deleted file mode 100644
index babd224..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_200 : S = S(1u, 1.5, array<u32, 2>(1u, 2u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.hlsl
deleted file mode 100644
index 272f716..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  uint field0;
-  float field1;
-  uint field2[2];
-};
-
-void main_1() {
-  const uint tint_symbol[2] = {0u, 0u};
-  S x_200 = {0u, 0.0f, tint_symbol};
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.msl
deleted file mode 100644
index 81ee737..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  tint_array_wrapper const tint_symbol_1 = {.arr={0u, 0u}};
-  S x_200 = {.field0=0u, .field1=0.0f, .field2=tint_symbol_1};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.spvasm
deleted file mode 100644
index e406537..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-          %S = OpTypeStruct %uint %float %_arr_uint_uint_2
-     %uint_0 = OpConstant %uint 0
-    %float_0 = OpConstant %float 0
-         %12 = OpConstantComposite %_arr_uint_uint_2 %uint_0 %uint_0
-         %13 = OpConstantComposite %S %uint_0 %float_0 %12
-%_ptr_Function_S = OpTypePointer Function %S
-         %16 = OpConstantNull %S
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function_S Function %16
-               OpStore %x_200 %13
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.wgsl
deleted file mode 100644
index a055f58..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_StructInitializer_Null.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_200 : S = S(0u, 0.0, array<u32, 2>(0u, 0u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.hlsl
deleted file mode 100644
index 4121d17..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  float2 x_200 = float2(1.5f, 2.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.msl
deleted file mode 100644
index 21611db..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  float2 x_200 = float2(1.5f, 2.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.spvasm
deleted file mode 100644
index dce6b4e..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-  %float_1_5 = OpConstant %float 1.5
-    %float_2 = OpConstant %float 2
-          %9 = OpConstantComposite %v2float %float_1_5 %float_2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %12 = OpConstantNull %v2float
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function_v2float Function %12
-               OpStore %x_200 %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.wgsl
deleted file mode 100644
index ae3b881..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitFunctionVariables_VectorInitializer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_200 : vec2<f32> = vec2<f32>(1.5, 2.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.msl
deleted file mode 100644
index ae93b02..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 0u;
-  while (true) {
-    uint x_2 = 0u;
-    *(tint_symbol_1) = 1u;
-    if (false) {
-      break;
-    }
-    *(tint_symbol_1) = 3u;
-    if (true) {
-      x_2 = (1u + 1u);
-    } else {
-      return;
-    }
-    *(tint_symbol_1) = x_2;
-    {
-      *(tint_symbol_1) = 4u;
-      if (false) {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_1) = 5u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.spvasm
deleted file mode 100644
index d144a38..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.spvasm
+++ /dev/null
@@ -1,68 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %x_2 "x_2"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-     %uint_4 = OpConstant %uint 4
-     %uint_5 = OpConstant %uint 5
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-        %x_2 = OpVariable %_ptr_Function_uint Function %4
-               OpStore %x_1 %uint_0
-               OpBranch %10
-         %10 = OpLabel
-               OpLoopMerge %11 %12 None
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %x_1 %uint_1
-               OpSelectionMerge %19 None
-               OpBranchConditional %false %20 %19
-         %20 = OpLabel
-               OpBranch %11
-         %19 = OpLabel
-               OpStore %x_1 %uint_3
-               OpSelectionMerge %23 None
-               OpBranchConditional %true %24 %25
-         %24 = OpLabel
-         %26 = OpIAdd %uint %uint_1 %uint_1
-               OpStore %x_2 %26
-               OpBranch %23
-         %25 = OpLabel
-               OpReturn
-         %23 = OpLabel
-         %27 = OpLoad %uint %x_2
-               OpStore %x_1 %27
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %x_1 %uint_4
-               OpBranchConditional %false %11 %10
-         %11 = OpLabel
-               OpStore %x_1 %uint_5
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.wgsl
deleted file mode 100644
index 9e59f91..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_DefConstruct_DoesNotEncloseAllUses.spvasm.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_1 : u32;
-
-fn main_1() {
-  x_1 = 0u;
-  loop {
-    var x_2 : u32;
-    x_1 = 1u;
-    if (false) {
-      break;
-    }
-    x_1 = 3u;
-    if (true) {
-      x_2 = (1u + 1u);
-    } else {
-      return;
-    }
-    x_1 = x_2;
-
-    continuing {
-      x_1 = 4u;
-      if (false) {
-        break;
-      }
-    }
-  }
-  x_1 = 5u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.hlsl
deleted file mode 100644
index 0cf1714..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const uint x_2 = 1u;
-  if (true) {
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.msl
deleted file mode 100644
index 1f3d451..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  uint const x_1 = 1u;
-  uint const x_2 = x_1;
-  if (true) {
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.spvasm
deleted file mode 100644
index 17bb5e7..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpSelectionMerge %9 None
-               OpBranchConditional %true %10 %9
-         %10 = OpLabel
-               OpBranch %9
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.wgsl
deleted file mode 100644
index f557570..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefAndUseFirstBlockIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  let x_1 : u32 = 1u;
-  let x_2 : u32 = x_1;
-  if (true) {
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.hlsl
deleted file mode 100644
index d1cbc4c..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-static uint x_200 = 0u;
-
-void main_1() {
-  const uint x_1 = 1u;
-  if (true) {
-  }
-  x_200 = x_1;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.msl
deleted file mode 100644
index 73ae2f7..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread uint* const tint_symbol_1) {
-  uint const x_1 = 1u;
-  if (true) {
-  }
-  uint const x_3 = x_1;
-  *(tint_symbol_1) = x_3;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.spvasm
deleted file mode 100644
index 8a25980..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %x_200 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %12 None
-               OpBranchConditional %true %13 %12
-         %13 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %x_200 %uint_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.wgsl
deleted file mode 100644
index 6e48a90..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InFunction.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_200 : u32;
-
-fn main_1() {
-  let x_1 : u32 = 1u;
-  if (true) {
-  }
-  let x_3 : u32 = x_1;
-  x_200 = x_3;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.hlsl
deleted file mode 100644
index f541cf6..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-static uint x_200 = 0u;
-
-void main_1() {
-  if (true) {
-    const uint x_1 = 1u;
-    if (true) {
-    }
-    x_200 = x_1;
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.msl
deleted file mode 100644
index eda2ef3..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread uint* const tint_symbol_1) {
-  if (true) {
-    uint const x_1 = 1u;
-    if (true) {
-    }
-    uint const x_3 = x_1;
-    *(tint_symbol_1) = x_3;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.spvasm
deleted file mode 100644
index 1f2f212..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %x_200 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %true %12 %11
-         %12 = OpLabel
-               OpSelectionMerge %14 None
-               OpBranchConditional %true %15 %14
-         %15 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpStore %x_200 %uint_1
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.wgsl
deleted file mode 100644
index 39a6957..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockIf_InIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,23 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_200 : u32;
-
-fn main_1() {
-  if (true) {
-    let x_1 : u32 = 1u;
-    if (true) {
-    }
-    let x_3 : u32 = x_1;
-    x_200 = x_3;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.hlsl
deleted file mode 100644
index 0f61ca0..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-static uint x_200 = 0u;
-
-void main_1() {
-  if (true) {
-    const uint x_1 = 1u;
-    switch(1u) {
-      case 0u: {
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    x_200 = x_1;
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.msl
deleted file mode 100644
index 4711ae1..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread uint* const tint_symbol_1) {
-  if (true) {
-    uint const x_1 = 1u;
-    switch(1u) {
-      case 0u: {
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    uint const x_3 = x_1;
-    *(tint_symbol_1) = x_3;
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.spvasm
deleted file mode 100644
index c7250dd..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.spvasm
+++ /dev/null
@@ -1,43 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-      %x_200 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %true %12 %11
-         %12 = OpLabel
-               OpSelectionMerge %14 None
-               OpSwitch %uint_1 %15 0 %16
-         %16 = OpLabel
-               OpBranch %14
-         %15 = OpLabel
-               OpBranch %14
-         %14 = OpLabel
-               OpStore %x_200 %uint_1
-               OpBranch %11
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.wgsl
deleted file mode 100644
index 02ec62d..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialNonPointer_Hoisting_DefFirstBlockSwitch_InIf.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_200 : u32;
-
-fn main_1() {
-  if (true) {
-    let x_1 : u32 = 1u;
-    switch(1u) {
-      case 0u: {
-      }
-      default: {
-      }
-    }
-    let x_3 : u32 = x_1;
-    x_200 = x_3;
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.hlsl
deleted file mode 100644
index d8166c5..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  uint x_25 = 0u;
-  x_25 = 1u;
-  x_25 = (1u + 1u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.msl
deleted file mode 100644
index a30ed6f..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  uint x_25 = 0u;
-  x_25 = 1u;
-  x_25 = (1u + 1u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.spvasm
deleted file mode 100644
index 87ef5ae..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_25 "x_25"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_25 = OpVariable %_ptr_Function_uint Function %8
-               OpStore %x_25 %uint_1
-         %10 = OpIAdd %uint %uint_1 %uint_1
-               OpStore %x_25 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.wgsl
deleted file mode 100644
index 8fca7f2..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Defer_UsedOnceSameConstruct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_25 : u32;
-  x_25 = 1u;
-  x_25 = (1u + 1u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.msl
deleted file mode 100644
index 223c46e..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  uint x_25 = 0u;
-  uint const x_2 = (1u + 1u);
-  x_25 = 1u;
-  while (true) {
-    {
-      x_25 = x_2;
-    }
-  }
-  x_25 = 2u;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.spvasm
deleted file mode 100644
index c6832a8..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_25 "x_25"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_25 = OpVariable %_ptr_Function_uint Function %8
-         %10 = OpIAdd %uint %uint_1 %uint_1
-               OpStore %x_25 %uint_1
-               OpBranch %11
-         %11 = OpLabel
-               OpLoopMerge %12 %13 None
-               OpBranch %14
-         %14 = OpLabel
-               OpBranch %13
-         %13 = OpLabel
-               OpStore %x_25 %10
-               OpBranch %11
-         %12 = OpLabel
-               OpStore %x_25 %uint_2
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.wgsl
deleted file mode 100644
index 9dac7e4..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedOnceDifferentConstruct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_25 : u32;
-  let x_2 : u32 = (1u + 1u);
-  x_25 = 1u;
-  loop {
-
-    continuing {
-      x_25 = x_2;
-    }
-  }
-  x_25 = 2u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.hlsl
deleted file mode 100644
index 44decb4..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-void main_1() {
-  uint x_25 = 0u;
-  const uint x_2 = (1u + 1u);
-  x_25 = 1u;
-  x_25 = x_2;
-  x_25 = x_2;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.msl
deleted file mode 100644
index c207f56..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  uint x_25 = 0u;
-  uint const x_2 = (1u + 1u);
-  x_25 = 1u;
-  x_25 = x_2;
-  x_25 = x_2;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.spvasm
deleted file mode 100644
index 8dce044..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_25 "x_25"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_25 = OpVariable %_ptr_Function_uint Function %8
-         %10 = OpIAdd %uint %uint_1 %uint_1
-               OpStore %x_25 %uint_1
-               OpStore %x_25 %10
-               OpStore %x_25 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.wgsl
deleted file mode 100644
index abec2fa..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_CombinatorialValue_Immediate_UsedTwice.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_25 : u32;
-  let x_2 : u32 = (1u + 1u);
-  x_25 = 1u;
-  x_25 = x_2;
-  x_25 = x_2;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.hlsl
deleted file mode 100644
index ded87d7..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-void main_1() {
-  int2 x_200 = int2(0, 0);
-  if (true) {
-    x_200 = int2(0, 0);
-    x_200.x = 0;
-  } else {
-    return;
-  }
-  const int2 x_201 = x_200;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.msl
deleted file mode 100644
index 0c1053a..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  int2 x_200 = 0;
-  if (true) {
-    x_200 = int2(0, 0);
-    x_200.x = 0;
-  } else {
-    return;
-  }
-  int2 const x_201 = x_200;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.spvasm
deleted file mode 100644
index df3fb8b..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-          %9 = OpConstantNull %v2int
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-         %16 = OpConstantComposite %v2int %int_0 %int_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_int = OpTypePointer Function %int
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function_v2int Function %9
-               OpSelectionMerge %12 None
-               OpBranchConditional %true %13 %14
-         %13 = OpLabel
-               OpStore %x_200 %16
-         %20 = OpAccessChain %_ptr_Function_int %x_200 %uint_0
-               OpStore %20 %int_0
-               OpBranch %12
-         %14 = OpLabel
-               OpReturn
-         %12 = OpLabel
-         %21 = OpLoad %v2int %x_200
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.wgsl
deleted file mode 100644
index 748c68e..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_CompositeInsert.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_200 : vec2<i32>;
-  if (true) {
-    x_200 = vec2<i32>(0, 0);
-    x_200.x = 0;
-  } else {
-    return;
-  }
-  let x_201 : vec2<i32> = x_200;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.hlsl
deleted file mode 100644
index f9805b7..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-void x_500(int x_501) {
-  return;
-}
-
-void main_1() {
-  int x_200 = 0;
-  if (true) {
-    x_200 = 1;
-  } else {
-    return;
-  }
-  x_500(x_200);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.msl
deleted file mode 100644
index ffc6cb2..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.msl
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void x_500(int x_501) {
-  return;
-}
-
-void main_1() {
-  int x_200 = 0;
-  if (true) {
-    x_200 = 1;
-  } else {
-    return;
-  }
-  x_500(x_200);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.spvasm
deleted file mode 100644
index 9c75a61..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.spvasm
+++ /dev/null
@@ -1,48 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_500 "x_500"
-               OpName %x_501 "x_501"
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-       %void = OpTypeVoid
-        %int = OpTypeInt 32 1
-          %1 = OpTypeFunction %void %int
-          %7 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpConstantNull %int
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-      %x_500 = OpFunction %void None %1
-      %x_501 = OpFunctionParameter %int
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %7
-          %9 = OpLabel
-      %x_200 = OpVariable %_ptr_Function_int Function %12
-               OpSelectionMerge %15 None
-               OpBranchConditional %true %16 %17
-         %16 = OpLabel
-               OpStore %x_200 %int_1
-               OpBranch %15
-         %17 = OpLabel
-               OpReturn
-         %15 = OpLabel
-         %20 = OpLoad %int %x_200
-         %19 = OpFunctionCall %void %x_500 %20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.wgsl
deleted file mode 100644
index 99f2a9a..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_UsedAsNonPtrArg.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn x_500(x_501 : i32) {
-  return;
-}
-
-fn main_1() {
-  var x_200 : i32;
-  if (true) {
-    x_200 = 1;
-  } else {
-    return;
-  }
-  x_500(x_200);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.hlsl
deleted file mode 100644
index 305aab8..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-void main_1() {
-  int2 x_200 = int2(0, 0);
-  if (true) {
-    x_200 = int2(0, 0);
-    x_200[1] = 3;
-  } else {
-    return;
-  }
-  const int2 x_201 = x_200;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.msl
deleted file mode 100644
index 9dd20f7..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  int2 x_200 = 0;
-  if (true) {
-    x_200 = int2(0, 0);
-    x_200[1] = 3;
-  } else {
-    return;
-  }
-  int2 const x_201 = x_200;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.spvasm
deleted file mode 100644
index 8f2e929..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.spvasm
+++ /dev/null
@@ -1,46 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_200 "x_200"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-          %9 = OpConstantNull %v2int
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-         %16 = OpConstantComposite %v2int %int_0 %int_0
-      %int_1 = OpConstant %int 1
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_3 = OpConstant %int 3
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_200 = OpVariable %_ptr_Function_v2int Function %9
-               OpSelectionMerge %12 None
-               OpBranchConditional %true %13 %14
-         %13 = OpLabel
-               OpStore %x_200 %16
-         %19 = OpAccessChain %_ptr_Function_int %x_200 %int_1
-               OpStore %19 %int_3
-               OpBranch %12
-         %14 = OpLabel
-               OpReturn
-         %12 = OpLabel
-         %21 = OpLoad %v2int %x_200
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.wgsl
deleted file mode 100644
index f14ee09..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Hoist_VectorInsertDynamic.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_200 : vec2<i32>;
-  if (true) {
-    x_200 = vec2<i32>(0, 0);
-    x_200[1] = 3;
-  } else {
-    return;
-  }
-  let x_201 : vec2<i32> = x_200;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.msl
deleted file mode 100644
index 04dbbd5..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread bool* const tint_symbol_1, thread bool* const tint_symbol_2, thread uint* const tint_symbol_3) {
-  bool const x_101 = *(tint_symbol_1);
-  bool const x_102 = *(tint_symbol_2);
-  while (true) {
-    uint x_2_phi = 0u;
-    if (x_101) {
-      break;
-    }
-    if (x_102) {
-      x_2_phi = 0u;
-      {
-        uint const x_2 = x_2_phi;
-        *(tint_symbol_3) = x_2;
-      }
-      continue;
-    } else {
-      x_2_phi = 1u;
-      {
-        uint const x_2 = x_2_phi;
-        *(tint_symbol_3) = x_2;
-      }
-      continue;
-    }
-    x_2_phi = 0u;
-    {
-      uint const x_2 = x_2_phi;
-      *(tint_symbol_3) = x_2;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread bool tint_symbol_4 = false;
-  thread bool tint_symbol_5 = false;
-  thread uint tint_symbol_6 = 0u;
-  main_1(&(tint_symbol_4), &(tint_symbol_5), &(tint_symbol_6));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.spvasm
deleted file mode 100644
index 8d90b52..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %x_2_phi "x_2_phi"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %bool = OpTypeBool
-%_ptr_Private_bool = OpTypePointer Private %bool
-          %8 = OpConstantNull %bool
-        %x_7 = OpVariable %_ptr_Private_bool Private %8
-        %x_8 = OpVariable %_ptr_Private_bool Private %8
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-    %x_2_phi = OpVariable %_ptr_Function_uint Function %4
-         %14 = OpLoad %bool %x_7
-         %15 = OpLoad %bool %x_8
-               OpBranch %16
-         %16 = OpLabel
-               OpLoopMerge %17 %18 None
-               OpBranch %19
-         %19 = OpLabel
-               OpSelectionMerge %22 None
-               OpBranchConditional %14 %23 %22
-         %23 = OpLabel
-               OpBranch %17
-         %22 = OpLabel
-               OpSelectionMerge %24 None
-               OpBranchConditional %15 %25 %26
-         %25 = OpLabel
-               OpStore %x_2_phi %uint_0
-               OpBranch %18
-         %26 = OpLabel
-               OpStore %x_2_phi %uint_1
-               OpBranch %18
-         %24 = OpLabel
-               OpStore %x_2_phi %uint_0
-               OpBranch %18
-         %18 = OpLabel
-         %29 = OpLoad %uint %x_2_phi
-               OpStore %x_1 %29
-               OpBranch %16
-         %17 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.wgsl
deleted file mode 100644
index b4f1c80..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromElseAndThen.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_1 : u32;
-
-var<private> x_7 : bool;
-
-var<private> x_8 : bool;
-
-fn main_1() {
-  let x_101 : bool = x_7;
-  let x_102 : bool = x_8;
-  loop {
-    var x_2_phi : u32;
-    if (x_101) {
-      break;
-    }
-    if (x_102) {
-      x_2_phi = 0u;
-      continue;
-    } else {
-      x_2_phi = 1u;
-      continue;
-    }
-    x_2_phi = 0u;
-
-    continuing {
-      let x_2 : u32 = x_2_phi;
-      x_1 = x_2;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.msl
deleted file mode 100644
index b80683d..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread bool* const tint_symbol_1, thread bool* const tint_symbol_2, thread uint* const tint_symbol_3) {
-  bool const x_101 = *(tint_symbol_1);
-  bool const x_102 = *(tint_symbol_2);
-  while (true) {
-    uint x_2_phi = 0u;
-    if (x_101) {
-      break;
-    }
-    x_2_phi = 0u;
-    if (x_102) {
-      x_2_phi = 1u;
-      {
-        uint const x_2 = x_2_phi;
-        *(tint_symbol_3) = x_2;
-      }
-      continue;
-    } else {
-      {
-        uint const x_2 = x_2_phi;
-        *(tint_symbol_3) = x_2;
-      }
-      continue;
-    }
-    return;
-    {
-      uint const x_2 = x_2_phi;
-      *(tint_symbol_3) = x_2;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread bool tint_symbol_4 = false;
-  thread bool tint_symbol_5 = false;
-  thread uint tint_symbol_6 = 0u;
-  main_1(&(tint_symbol_4), &(tint_symbol_5), &(tint_symbol_6));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.spvasm
deleted file mode 100644
index d930c87..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %x_2_phi "x_2_phi"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %bool = OpTypeBool
-%_ptr_Private_bool = OpTypePointer Private %bool
-          %8 = OpConstantNull %bool
-        %x_7 = OpVariable %_ptr_Private_bool Private %8
-        %x_8 = OpVariable %_ptr_Private_bool Private %8
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-    %x_2_phi = OpVariable %_ptr_Function_uint Function %4
-         %14 = OpLoad %bool %x_7
-         %15 = OpLoad %bool %x_8
-               OpBranch %16
-         %16 = OpLabel
-               OpLoopMerge %17 %18 None
-               OpBranch %19
-         %19 = OpLabel
-               OpSelectionMerge %22 None
-               OpBranchConditional %14 %23 %22
-         %23 = OpLabel
-               OpBranch %17
-         %22 = OpLabel
-               OpStore %x_2_phi %uint_0
-               OpSelectionMerge %25 None
-               OpBranchConditional %15 %26 %27
-         %26 = OpLabel
-               OpStore %x_2_phi %uint_1
-               OpBranch %18
-         %27 = OpLabel
-               OpBranch %18
-         %25 = OpLabel
-               OpReturn
-         %18 = OpLabel
-         %29 = OpLoad %uint %x_2_phi
-               OpStore %x_1 %29
-               OpBranch %16
-         %17 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.wgsl
deleted file mode 100644
index cfe9e87..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_FromHeaderAndThen.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_1 : u32;
-
-var<private> x_7 : bool;
-
-var<private> x_8 : bool;
-
-fn main_1() {
-  let x_101 : bool = x_7;
-  let x_102 : bool = x_8;
-  loop {
-    var x_2_phi : u32;
-    if (x_101) {
-      break;
-    }
-    x_2_phi = 0u;
-    if (x_102) {
-      x_2_phi = 1u;
-      continue;
-    } else {
-      continue;
-    }
-    return;
-
-    continuing {
-      let x_2 : u32 = x_2_phi;
-      x_1 = x_2;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.hlsl
deleted file mode 100644
index a9c80ae..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,52 +0,0 @@
-static uint x_1 = 0u;
-static bool x_7 = false;
-static bool x_8 = false;
-
-void main_1() {
-  uint x_41_phi = 0u;
-  switch(1u) {
-    default: {
-      /* fallthrough */
-      {
-        /* fallthrough */
-      }
-      {
-        if (true) {
-        } else {
-          x_41_phi = 0u;
-          break;
-        }
-        x_41_phi = 1u;
-      }
-      break;
-    }
-    case 0u: {
-      /* fallthrough */
-      {
-        if (true) {
-        } else {
-          x_41_phi = 0u;
-          break;
-        }
-        x_41_phi = 1u;
-      }
-      break;
-    }
-    case 1u: {
-      if (true) {
-      } else {
-        x_41_phi = 0u;
-        break;
-      }
-      x_41_phi = 1u;
-      break;
-    }
-  }
-  const uint x_41 = x_41_phi;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.msl
deleted file mode 100644
index 10b28b7..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  uint x_41_phi = 0u;
-  switch(1u) {
-    default: {
-      /* fallthrough */
-    }
-    case 0u: {
-      /* fallthrough */
-    }
-    case 1u: {
-      if (true) {
-      } else {
-        x_41_phi = 0u;
-        break;
-      }
-      x_41_phi = 1u;
-      break;
-    }
-  }
-  uint const x_41 = x_41_phi;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.spvasm
deleted file mode 100644
index 6b004bc..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 30
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %x_41_phi "x_41_phi"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %bool = OpTypeBool
-%_ptr_Private_bool = OpTypePointer Private %bool
-          %8 = OpConstantNull %bool
-        %x_7 = OpVariable %_ptr_Private_bool Private %8
-        %x_8 = OpVariable %_ptr_Private_bool Private %8
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %uint_1 = OpConstant %uint 1
-       %true = OpConstantTrue %bool
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-   %x_41_phi = OpVariable %_ptr_Function_uint Function %4
-               OpSelectionMerge %16 None
-               OpSwitch %uint_1 %18 0 %19 1 %20
-         %18 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpSelectionMerge %22 None
-               OpBranchConditional %true %23 %24
-         %23 = OpLabel
-               OpBranch %22
-         %24 = OpLabel
-               OpStore %x_41_phi %uint_0
-               OpBranch %16
-         %22 = OpLabel
-               OpStore %x_41_phi %uint_1
-               OpBranch %16
-         %16 = OpLabel
-         %26 = OpLoad %uint %x_41_phi
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.wgsl
deleted file mode 100644
index b9e3c22..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_InMerge_PredecessorsDominatdByNestedSwitchCase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,38 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_1 : u32;
-
-var<private> x_7 : bool;
-
-var<private> x_8 : bool;
-
-fn main_1() {
-  var x_41_phi : u32;
-  switch(1u) {
-    default: {
-      fallthrough;
-    }
-    case 0u: {
-      fallthrough;
-    }
-    case 1u: {
-      if (true) {
-      } else {
-        x_41_phi = 0u;
-        break;
-      }
-      x_41_phi = 1u;
-    }
-  }
-  let x_41 : u32 = x_41_phi;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.msl
deleted file mode 100644
index d1b9fef..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread bool* const tint_symbol_1, thread bool* const tint_symbol_2) {
-  while (true) {
-    uint x_2_phi = 0u;
-    uint x_3_phi = 0u;
-    bool const x_101 = *(tint_symbol_1);
-    bool const x_102 = *(tint_symbol_2);
-    x_2_phi = 0u;
-    x_3_phi = 1u;
-    if (x_101) {
-      break;
-    }
-    while (true) {
-      uint x_4 = 0u;
-      uint const x_2 = x_2_phi;
-      uint const x_3 = x_3_phi;
-      if (x_102) {
-        break;
-      }
-      {
-        x_4 = (x_2 + 1u);
-        x_2_phi = x_4;
-        x_3_phi = x_3;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread bool tint_symbol_3 = false;
-  thread bool tint_symbol_4 = false;
-  main_1(&(tint_symbol_3), &(tint_symbol_4));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.spvasm
deleted file mode 100644
index 2151604..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %x_2_phi "x_2_phi"
-               OpName %x_3_phi "x_3_phi"
-               OpName %x_4 "x_4"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %bool = OpTypeBool
-%_ptr_Private_bool = OpTypePointer Private %bool
-          %8 = OpConstantNull %bool
-        %x_7 = OpVariable %_ptr_Private_bool Private %8
-        %x_8 = OpVariable %_ptr_Private_bool Private %8
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-    %x_2_phi = OpVariable %_ptr_Function_uint Function %4
-    %x_3_phi = OpVariable %_ptr_Function_uint Function %4
-        %x_4 = OpVariable %_ptr_Function_uint Function %4
-               OpBranch %14
-         %14 = OpLabel
-               OpLoopMerge %15 %16 None
-               OpBranch %17
-         %17 = OpLabel
-         %21 = OpLoad %bool %x_7
-         %22 = OpLoad %bool %x_8
-               OpStore %x_2_phi %uint_0
-               OpStore %x_3_phi %uint_1
-               OpSelectionMerge %25 None
-               OpBranchConditional %21 %26 %25
-         %26 = OpLabel
-               OpBranch %15
-         %25 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %32 = OpLoad %uint %x_2_phi
-         %33 = OpLoad %uint %x_3_phi
-               OpSelectionMerge %34 None
-               OpBranchConditional %22 %35 %34
-         %35 = OpLabel
-               OpBranch %28
-         %34 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-         %36 = OpIAdd %uint %32 %uint_1
-               OpStore %x_4 %36
-         %37 = OpLoad %uint %x_4
-               OpStore %x_2_phi %37
-               OpStore %x_3_phi %33
-               OpBranch %27
-         %28 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpBranch %14
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.wgsl
deleted file mode 100644
index 0cb6422..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_1 : u32;
-
-var<private> x_7 : bool;
-
-var<private> x_8 : bool;
-
-fn main_1() {
-  loop {
-    var x_2_phi : u32;
-    var x_3_phi : u32;
-    let x_101 : bool = x_7;
-    let x_102 : bool = x_8;
-    x_2_phi = 0u;
-    x_3_phi = 1u;
-    if (x_101) {
-      break;
-    }
-    loop {
-      var x_4 : u32;
-      let x_2 : u32 = x_2_phi;
-      let x_3 : u32 = x_3_phi;
-      if (x_102) {
-        break;
-      }
-
-      continuing {
-        x_4 = (x_2 + 1u);
-        x_2_phi = x_4;
-        x_3_phi = x_3;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.msl
deleted file mode 100644
index 148695c..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread bool* const tint_symbol_1, thread bool* const tint_symbol_2) {
-  while (true) {
-    uint x_2_phi = 0u;
-    uint x_3_phi = 0u;
-    bool const x_101 = *(tint_symbol_1);
-    bool const x_102 = *(tint_symbol_2);
-    x_2_phi = 0u;
-    x_3_phi = 1u;
-    if (x_101) {
-      break;
-    }
-    while (true) {
-      uint const x_2 = x_2_phi;
-      uint const x_3 = x_3_phi;
-      x_2_phi = (x_2 + 1u);
-      x_3_phi = x_3;
-      if (x_102) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread bool tint_symbol_3 = false;
-  thread bool tint_symbol_4 = false;
-  main_1(&(tint_symbol_3), &(tint_symbol_4));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.spvasm
deleted file mode 100644
index a265f16..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.spvasm
+++ /dev/null
@@ -1,78 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %x_2_phi "x_2_phi"
-               OpName %x_3_phi "x_3_phi"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %bool = OpTypeBool
-%_ptr_Private_bool = OpTypePointer Private %bool
-          %8 = OpConstantNull %bool
-        %x_7 = OpVariable %_ptr_Private_bool Private %8
-        %x_8 = OpVariable %_ptr_Private_bool Private %8
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-    %x_2_phi = OpVariable %_ptr_Function_uint Function %4
-    %x_3_phi = OpVariable %_ptr_Function_uint Function %4
-               OpBranch %14
-         %14 = OpLabel
-               OpLoopMerge %15 %16 None
-               OpBranch %17
-         %17 = OpLabel
-         %21 = OpLoad %bool %x_7
-         %22 = OpLoad %bool %x_8
-               OpStore %x_2_phi %uint_0
-               OpStore %x_3_phi %uint_1
-               OpSelectionMerge %25 None
-               OpBranchConditional %21 %26 %25
-         %26 = OpLabel
-               OpBranch %15
-         %25 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %31 = OpLoad %uint %x_2_phi
-         %32 = OpLoad %uint %x_3_phi
-         %33 = OpIAdd %uint %31 %uint_1
-               OpStore %x_2_phi %33
-               OpStore %x_3_phi %32
-               OpSelectionMerge %34 None
-               OpBranchConditional %22 %35 %34
-         %35 = OpLabel
-               OpBranch %28
-         %34 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-               OpBranch %27
-         %28 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpBranch %14
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.wgsl
deleted file mode 100644
index 05b015a..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_1 : u32;
-
-var<private> x_7 : bool;
-
-var<private> x_8 : bool;
-
-fn main_1() {
-  loop {
-    var x_2_phi : u32;
-    var x_3_phi : u32;
-    let x_101 : bool = x_7;
-    let x_102 : bool = x_8;
-    x_2_phi = 0u;
-    x_3_phi = 1u;
-    if (x_101) {
-      break;
-    }
-    loop {
-      let x_2 : u32 = x_2_phi;
-      let x_3 : u32 = x_3_phi;
-      x_2_phi = (x_2 + 1u);
-      x_3_phi = x_3;
-      if (x_102) {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.hlsl
deleted file mode 100644
index 5d1e440..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    }
-    break;
-    {
-      float x_81_phi = 0.0f;
-      const float x_81 = x_81_phi;
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.msl
deleted file mode 100644
index e957103..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.msl
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    }
-    break;
-    {
-      float x_81_phi = 0.0f;
-      float const x_81 = x_81_phi;
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.spvasm
deleted file mode 100644
index 70ce29c..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_81_phi "x_81_phi"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %float = OpTypeFloat 32
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-   %x_81_phi = OpVariable %_ptr_Function_float Function %16
-               OpBranch %5
-          %5 = OpLabel
-               OpLoopMerge %6 %7 None
-               OpBranch %8
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %6
-         %11 = OpLabel
-               OpBranch %6
-          %7 = OpLabel
-         %17 = OpLoad %float %x_81_phi
-               OpBranch %5
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.wgsl
deleted file mode 100644
index da37a5e..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromBlockNotInBlockOrderIgnored.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  loop {
-    if (false) {
-      break;
-    }
-    break;
-
-    continuing {
-      var x_81_phi : f32;
-      let x_81 : f32 = x_81_phi;
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.msl
deleted file mode 100644
index d100dae..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1(thread bool* const tint_symbol_1) {
-  bool const x_101 = *(tint_symbol_1);
-  while (true) {
-    uint x_2_phi = 0u;
-    uint x_5_phi = 0u;
-    x_2_phi = 0u;
-    x_5_phi = 1u;
-    while (true) {
-      uint x_7 = 0u;
-      uint const x_2 = x_2_phi;
-      uint const x_5 = x_5_phi;
-      uint const x_4 = (x_2 + 1u);
-      uint const x_6 = (x_4 + 1u);
-      if (x_101) {
-        break;
-      }
-      {
-        x_7 = (x_4 + x_6);
-        x_2_phi = x_4;
-        x_5_phi = x_7;
-      }
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  thread bool tint_symbol_2 = false;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.spvasm
deleted file mode 100644
index dcd5119..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %x_17 "x_17"
-               OpName %main_1 "main_1"
-               OpName %x_2_phi "x_2_phi"
-               OpName %x_5_phi "x_5_phi"
-               OpName %x_7 "x_7"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %bool = OpTypeBool
-%_ptr_Private_bool = OpTypePointer Private %bool
-          %8 = OpConstantNull %bool
-       %x_17 = OpVariable %_ptr_Private_bool Private %8
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %9
-         %12 = OpLabel
-    %x_2_phi = OpVariable %_ptr_Function_uint Function %4
-    %x_5_phi = OpVariable %_ptr_Function_uint Function %4
-        %x_7 = OpVariable %_ptr_Function_uint Function %4
-         %13 = OpLoad %bool %x_17
-               OpBranch %14
-         %14 = OpLabel
-               OpLoopMerge %15 %16 None
-               OpBranch %17
-         %17 = OpLabel
-               OpStore %x_2_phi %uint_0
-               OpStore %x_5_phi %uint_1
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %28 = OpLoad %uint %x_2_phi
-         %29 = OpLoad %uint %x_5_phi
-         %30 = OpIAdd %uint %28 %uint_1
-         %31 = OpIAdd %uint %30 %uint_1
-               OpSelectionMerge %32 None
-               OpBranchConditional %13 %33 %32
-         %33 = OpLabel
-               OpBranch %24
-         %32 = OpLabel
-               OpBranch %25
-         %25 = OpLabel
-         %34 = OpIAdd %uint %30 %31
-               OpStore %x_7 %34
-               OpStore %x_2_phi %30
-         %35 = OpLoad %uint %x_7
-               OpStore %x_5_phi %35
-               OpBranch %23
-         %24 = OpLabel
-               OpBranch %16
-         %16 = OpLabel
-               OpBranch %14
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.wgsl
deleted file mode 100644
index 3d5749c..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_ValueFromLoopBodyAndContinuing.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-var<private> x_1 : u32;
-
-var<private> x_17 : bool;
-
-fn main_1() {
-  let x_101 : bool = x_17;
-  loop {
-    var x_2_phi : u32;
-    var x_5_phi : u32;
-    x_2_phi = 0u;
-    x_5_phi = 1u;
-    loop {
-      var x_7 : u32;
-      let x_2 : u32 = x_2_phi;
-      let x_5 : u32 = x_5_phi;
-      let x_4 : u32 = (x_2 + 1u);
-      let x_6 : u32 = (x_4 + 1u);
-      if (x_101) {
-        break;
-      }
-
-      continuing {
-        x_7 = (x_4 + x_6);
-        x_2_phi = x_4;
-        x_5_phi = x_7;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.hlsl
deleted file mode 100644
index 7d340d6..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-void main_1() {
-  bool x_101_phi = false;
-  const bool x_11 = (true & true);
-  const bool x_12 = !(x_11);
-  x_101_phi = x_11;
-  if (true) {
-    x_101_phi = x_12;
-  }
-  const bool x_101 = x_101_phi;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.msl
deleted file mode 100644
index c30c618..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-struct S {
-  uint field0;
-  float field1;
-  tint_array_wrapper field2;
-};
-
-void main_1() {
-  bool x_101_phi = false;
-  bool const x_11 = (true & true);
-  bool const x_12 = !(x_11);
-  x_101_phi = x_11;
-  if (true) {
-    x_101_phi = x_12;
-  }
-  bool const x_101 = x_101_phi;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.spvasm
deleted file mode 100644
index 0fc2381..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_101_phi "x_101_phi"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-          %8 = OpConstantNull %bool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-  %x_101_phi = OpVariable %_ptr_Function_bool Function %8
-         %10 = OpLogicalAnd %bool %true %true
-         %11 = OpLogicalNot %bool %10
-               OpStore %x_101_phi %10
-               OpSelectionMerge %12 None
-               OpBranchConditional %true %13 %12
-         %13 = OpLabel
-               OpStore %x_101_phi %11
-               OpBranch %12
-         %12 = OpLabel
-         %14 = OpLoad %bool %x_101_phi
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.wgsl
deleted file mode 100644
index e1f35fc..0000000
--- a/test/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_UseInPhiCountsAsUse.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-  field2 : array<u32, 2>;
-};
-
-fn main_1() {
-  var x_101_phi : bool;
-  let x_11 : bool = (true & true);
-  let x_12 : bool = !(x_11);
-  x_101_phi = x_11;
-  if (true) {
-    x_101_phi = x_12;
-  }
-  let x_101 : bool = x_101_phi;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.hlsl
deleted file mode 100644
index 7792c6c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.spvasm
deleted file mode 100644
index 54fcf1c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.wgsl
deleted file mode 100644
index a747f05..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_CopyObject.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(0), binding(1)]] var x_20 : texture_1d<f32>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.hlsl
deleted file mode 100644
index 7792c6c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.spvasm
deleted file mode 100644
index 54fcf1c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.wgsl
deleted file mode 100644
index a747f05..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Direct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(0), binding(1)]] var x_20 : texture_1d<f32>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.hlsl
deleted file mode 100644
index 7792c6c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.spvasm
deleted file mode 100644
index 54fcf1c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.wgsl
deleted file mode 100644
index a747f05..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Image.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(0), binding(1)]] var x_20 : texture_1d<f32>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.hlsl
deleted file mode 100644
index 7792c6c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.spvasm
deleted file mode 100644
index 54fcf1c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.wgsl
deleted file mode 100644
index a747f05..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_Load.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(0), binding(1)]] var x_20 : texture_1d<f32>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.hlsl
deleted file mode 100644
index 7792c6c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SamplerState x_10 : register(s0, space0);
-Texture1D<float4> x_20 : register(t1, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.spvasm
deleted file mode 100644
index 54fcf1c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpCapability Sampled1D
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_10 "x_10"
-               OpName %x_20 "x_20"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-          %3 = OpTypeSampler
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-       %x_10 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-      %float = OpTypeFloat 32
-          %6 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_6 = OpTypePointer UniformConstant %6
-       %x_20 = OpVariable %_ptr_UniformConstant_6 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.wgsl
deleted file mode 100644
index a747f05..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_GetMemoryObjectDeclarationForHandle_Variable_SampledImage.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-[[group(0), binding(0)]] var x_10 : sampler;
-
-[[group(0), binding(1)]] var x_20 : texture_1d<f32>;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.hlsl
deleted file mode 100644
index 7aadea3..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.hlsl
+++ /dev/null
@@ -1,15 +0,0 @@
-Texture2D<float4> x_2 : register(t0, space0);
-SamplerState x_3 : register(s1, space0);
-
-void main_1() {
-  float4 var_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_22 = x_2.Sample(x_3, float2(0.0f, 0.0f));
-  const float4 x_26 = x_2.Sample(x_3, float2(0.0f, 0.0f));
-  var_1 = (x_22 + x_26);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.msl
deleted file mode 100644
index 2cddd7c..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
-  float4 var_1 = 0.0f;
-  float4 const x_22 = tint_symbol_1.sample(tint_symbol_2, float2(0.0f, 0.0f));
-  float4 const x_26 = tint_symbol_1.sample(tint_symbol_2, float2(0.0f, 0.0f));
-  var_1 = (x_22 + x_26);
-  return;
-}
-
-fragment void tint_symbol(texture2d<float, access::sample> tint_symbol_3 [[texture(0)]], sampler tint_symbol_4 [[sampler(0)]]) {
-  main_1(tint_symbol_3, tint_symbol_4);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.spvasm
deleted file mode 100644
index bf2703b..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 32
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %main_1 "main_1"
-               OpName %var_1 "var_1"
-               OpName %main "main"
-               OpDecorate %x_2 DescriptorSet 0
-               OpDecorate %x_2 Binding 0
-               OpDecorate %x_3 DescriptorSet 0
-               OpDecorate %x_3 Binding 1
-      %float = OpTypeFloat 32
-          %3 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_3 = OpTypePointer UniformConstant %3
-        %x_2 = OpVariable %_ptr_UniformConstant_3 UniformConstant
-          %7 = OpTypeSampler
-%_ptr_UniformConstant_7 = OpTypePointer UniformConstant %7
-        %x_3 = OpVariable %_ptr_UniformConstant_7 UniformConstant
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v4float = OpTypeVector %float 4
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %15 = OpConstantNull %v4float
-         %19 = OpTypeSampledImage %3
-    %v2float = OpTypeVector %float 2
-    %float_0 = OpConstant %float 0
-         %23 = OpConstantComposite %v2float %float_0 %float_0
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-      %var_1 = OpVariable %_ptr_Function_v4float Function %15
-         %17 = OpLoad %7 %x_3
-         %18 = OpLoad %3 %x_2
-         %20 = OpSampledImage %19 %18 %17
-         %16 = OpImageSampleImplicitLod %v4float %20 %23
-         %25 = OpLoad %7 %x_3
-         %26 = OpLoad %3 %x_2
-         %27 = OpSampledImage %19 %26 %25
-         %24 = OpImageSampleImplicitLod %v4float %27 %23
-         %28 = OpFAdd %v4float %16 %24
-               OpStore %var_1 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.wgsl
deleted file mode 100644
index 57dd5c4..0000000
--- a/test/unittest/reader/spirv/SpvParserHandleTest_NeverGenerateConstDeclForHandle_UseVariableDirectly.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-[[group(0), binding(0)]] var x_2 : texture_2d<f32>;
-
-[[group(0), binding(1)]] var x_3 : sampler;
-
-fn main_1() {
-  var var_1 : vec4<f32>;
-  let x_22 : vec4<f32> = textureSample(x_2, x_3, vec2<f32>(0.0, 0.0));
-  let x_26 : vec4<f32> = textureSample(x_2, x_3, vec2<f32>(0.0, 0.0));
-  var_1 = (x_22 + x_26);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 6909040..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  uint tint_symbol_1 = 0u;
-  myvar.GetDimensions(tint_symbol_1);
-  const uint tint_symbol_2 = ((tint_symbol_1 - 4u) / 4u);
-  const uint x_1 = tint_symbol_2;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.msl
deleted file mode 100644
index ceb3198..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_symbol_1 {
-  /* 0x0000 */ uint4 buffer_size[1];
-};
-struct S {
-  /* 0x0000 */ uint first;
-  /* 0x0004 */ uint rtarr[1];
-};
-
-void main_1(constant tint_symbol_1& tint_symbol_2) {
-  uint const x_1 = ((tint_symbol_2.buffer_size[0u][0u] - 4u) / 4u);
-  return;
-}
-
-fragment void tint_symbol(constant tint_symbol_1& tint_symbol_2 [[buffer(30)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.spvasm
deleted file mode 100644
index e397172..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "first"
-               OpMemberName %S 1 "rtarr"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %uint %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %10 = OpArrayLength %uint %myvar 1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 159e6ec..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  first : u32;
-  rtarr : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  let x_1 : u32 = arrayLength(&(myvar.rtarr));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.hlsl
deleted file mode 100644
index 6909040..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  uint tint_symbol_1 = 0u;
-  myvar.GetDimensions(tint_symbol_1);
-  const uint tint_symbol_2 = ((tint_symbol_1 - 4u) / 4u);
-  const uint x_1 = tint_symbol_2;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.msl
deleted file mode 100644
index ceb3198..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_symbol_1 {
-  /* 0x0000 */ uint4 buffer_size[1];
-};
-struct S {
-  /* 0x0000 */ uint first;
-  /* 0x0004 */ uint rtarr[1];
-};
-
-void main_1(constant tint_symbol_1& tint_symbol_2) {
-  uint const x_1 = ((tint_symbol_2.buffer_size[0u][0u] - 4u) / 4u);
-  return;
-}
-
-fragment void tint_symbol(constant tint_symbol_1& tint_symbol_2 [[buffer(30)]]) {
-  main_1(tint_symbol_2);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.spvasm
deleted file mode 100644
index e397172..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "first"
-               OpMemberName %S 1 "rtarr"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %uint %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %10 = OpArrayLength %uint %myvar 1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.wgsl
deleted file mode 100644
index 159e6ec..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  first : u32;
-  rtarr : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  let x_1 : u32 = arrayLength(&(myvar.rtarr));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.hlsl
deleted file mode 100644
index a823f8a..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-static float3x4 myvar = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  myvar[2u] = float4(42.0f, 42.0f, 42.0f, 42.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.msl
deleted file mode 100644
index 691c9bd..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread float3x4* const tint_symbol_1) {
-  (*(tint_symbol_1))[2u] = float4(42.0f, 42.0f, 42.0f, 42.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  thread float3x4 tint_symbol_2 = float3x4(0.0f);
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.spvasm
deleted file mode 100644
index d3c1087..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
-          %6 = OpConstantNull %mat3v4float
-      %myvar = OpVariable %_ptr_Private_mat3v4float Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %float_42 = OpConstant %float 42
-         %16 = OpConstantComposite %v4float %float_42 %float_42 %float_42 %float_42
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %14 = OpAccessChain %_ptr_Private_v4float %myvar %uint_2
-               OpStore %14 %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.wgsl
deleted file mode 100644
index 5946ed3..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Array.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-var<private> myvar : mat3x4<f32>;
-
-fn main_1() {
-  myvar[2u] = vec4<f32>(42.0, 42.0, 42.0, 42.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 075acd5..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-static float3x4 myvar = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  myvar[2u].w = 42.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.msl
deleted file mode 100644
index 70ad8df..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread float3x4* const tint_symbol_1) {
-  (*(tint_symbol_1))[2u].w = 42.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread float3x4 tint_symbol_2 = float3x4(0.0f);
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 87f8e08..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
-          %6 = OpConstantNull %mat3v4float
-      %myvar = OpVariable %_ptr_Private_mat3v4float Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_42 = OpConstant %float 42
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %15 = OpAccessChain %_ptr_Private_float %myvar %uint_2 %uint_3
-               OpStore %15 %float_42
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.wgsl
deleted file mode 100644
index b299269..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Compound_Matrix_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-var<private> myvar : mat3x4<f32>;
-
-fn main_1() {
-  myvar[2u].w = 42.0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.hlsl
deleted file mode 100644
index 724afae..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-void x_200(inout uint2 x_1) {
-  const uint x_3 = x_1.x;
-  return;
-}
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.msl
deleted file mode 100644
index 3cbe56b..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_200(thread uint2* const x_1) {
-  uint const x_3 = (*(x_1)).x;
-  return;
-}
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.spvasm
deleted file mode 100644
index d350ad9..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-%_ptr_Private_v2uint = OpTypePointer Private %v2uint
-          %1 = OpTypeFunction %void %_ptr_Private_v2uint
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-         %14 = OpTypeFunction %void
-      %x_200 = OpFunction %void None %1
-        %x_1 = OpFunctionParameter %_ptr_Private_v2uint
-          %8 = OpLabel
-         %12 = OpAccessChain %_ptr_Private_uint %x_1 %uint_0
-         %13 = OpLoad %uint %12
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %14
-         %16 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.wgsl
deleted file mode 100644
index 1aa32ff..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_DereferenceBase.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn x_200(x_1 : ptr<private, vec2<u32>>) {
-  let x_3 : u32 = (*(x_1)).x;
-  return;
-}
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.hlsl
deleted file mode 100644
index 2706802..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  uint x_1 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.msl
deleted file mode 100644
index 223e020..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint x_1 = 0u;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.spvasm
deleted file mode 100644
index f910efa..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_uint Function %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.wgsl
deleted file mode 100644
index 88fb923..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_InferFunctionStorageClass.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  var x_1 : u32;
-  let x_2 : ptr<function, u32> = &(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.hlsl
deleted file mode 100644
index a823f8a..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-static float3x4 myvar = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  myvar[2u] = float4(42.0f, 42.0f, 42.0f, 42.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.msl
deleted file mode 100644
index 691c9bd..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread float3x4* const tint_symbol_1) {
-  (*(tint_symbol_1))[2u] = float4(42.0f, 42.0f, 42.0f, 42.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  thread float3x4 tint_symbol_2 = float3x4(0.0f);
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.spvasm
deleted file mode 100644
index d3c1087..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Private_mat3v4float = OpTypePointer Private %mat3v4float
-          %6 = OpConstantNull %mat3v4float
-      %myvar = OpVariable %_ptr_Private_mat3v4float Private %6
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %float_42 = OpConstant %float 42
-         %16 = OpConstantComposite %v4float %float_42 %float_42 %float_42 %float_42
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %14 = OpAccessChain %_ptr_Private_v4float %myvar %uint_2
-               OpStore %14 %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.wgsl
deleted file mode 100644
index 5946ed3..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Matrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-var<private> myvar : mat3x4<f32>;
-
-fn main_1() {
-  myvar[2u] = vec4<f32>(42.0, 42.0, 42.0, 42.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.hlsl
deleted file mode 100644
index 3a71de3..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  float field0;
-  float age;
-};
-
-static S myvar = (S)0;
-
-void main_1() {
-  myvar.age = 42.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.msl
deleted file mode 100644
index 30fb4de..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float field0;
-  float age;
-};
-
-void main_1(thread S* const tint_symbol_1) {
-  (*(tint_symbol_1)).age = 42.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread S tint_symbol_2 = {};
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.spvasm
deleted file mode 100644
index a8679b9..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,39 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "age"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-      %float = OpTypeFloat 32
-          %S = OpTypeStruct %float %float
-%_ptr_Private_S = OpTypePointer Private %S
-          %5 = OpConstantNull %S
-      %myvar = OpVariable %_ptr_Private_S Private %5
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_42 = OpConstant %float 42
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %13 = OpAccessChain %_ptr_Private_float %myvar %uint_1
-               OpStore %13 %float_42
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.wgsl
deleted file mode 100644
index 1020d48..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  field0 : f32;
-  age : f32;
-};
-
-var<private> myvar : S;
-
-fn main_1() {
-  myvar.age = 42.0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.hlsl
deleted file mode 100644
index a54dfa0..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-struct S {
-  float field0;
-  float age;
-};
-struct S_1 {
-  float field0;
-  float ancientness;
-};
-
-static S myvar = (S)0;
-static S_1 myvar2 = (S_1)0;
-
-void main_1() {
-  myvar.age = 42.0f;
-  myvar2.ancientness = 420.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.msl
deleted file mode 100644
index 7321f9b..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float field0;
-  float age;
-};
-struct S_1 {
-  float field0;
-  float ancientness;
-};
-
-void main_1(thread S* const tint_symbol_1, thread S_1* const tint_symbol_2) {
-  (*(tint_symbol_1)).age = 42.0f;
-  (*(tint_symbol_2)).ancientness = 420.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread S tint_symbol_3 = {};
-  thread S_1 tint_symbol_4 = {};
-  main_1(&(tint_symbol_3), &(tint_symbol_4));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.spvasm
deleted file mode 100644
index 8ba7712..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.spvasm
+++ /dev/null
@@ -1,52 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "age"
-               OpName %myvar "myvar"
-               OpName %S_1 "S_1"
-               OpMemberName %S_1 0 "field0"
-               OpMemberName %S_1 1 "ancientness"
-               OpName %myvar2 "myvar2"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S_1 0 Offset 0
-               OpMemberDecorate %S_1 1 Offset 4
-      %float = OpTypeFloat 32
-          %S = OpTypeStruct %float %float
-%_ptr_Private_S = OpTypePointer Private %S
-          %5 = OpConstantNull %S
-      %myvar = OpVariable %_ptr_Private_S Private %5
-        %S_1 = OpTypeStruct %float %float
-%_ptr_Private_S_1 = OpTypePointer Private %S_1
-          %9 = OpConstantNull %S_1
-     %myvar2 = OpVariable %_ptr_Private_S_1 Private %9
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_42 = OpConstant %float 42
-  %float_420 = OpConstant %float 420
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-         %17 = OpAccessChain %_ptr_Private_float %myvar %uint_1
-               OpStore %17 %float_42
-         %19 = OpAccessChain %_ptr_Private_float %myvar2 %uint_1
-               OpStore %19 %float_420
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.wgsl
deleted file mode 100644
index 6a3bcf1..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_DifferOnlyMemberName.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-struct S {
-  field0 : f32;
-  age : f32;
-};
-
-struct S_1 {
-  field0 : f32;
-  ancientness : f32;
-};
-
-var<private> myvar : S;
-
-var<private> myvar2 : S_1;
-
-fn main_1() {
-  myvar.age = 42.0;
-  myvar2.ancientness = 420.0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.hlsl
deleted file mode 100644
index 0111825..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  myvar.Store(12u, asuint(42.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.msl
deleted file mode 100644
index 02d7554..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float field0;
-  /* 0x0004 */ float age[1];
-};
-
-void main_1(device S& myvar) {
-  myvar.age[2u] = 42.0f;
-  return;
-}
-
-fragment void tint_symbol(device S& myvar [[buffer(0)]]) {
-  main_1(myvar);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.spvasm
deleted file mode 100644
index 424eb40..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "age"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_runtimearr_float ArrayStride 4
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-      %float = OpTypeFloat 32
-%_runtimearr_float = OpTypeRuntimeArray %float
-          %S = OpTypeStruct %float %_runtimearr_float
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
-   %float_42 = OpConstant %float 42
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %14 = OpAccessChain %_ptr_StorageBuffer_float %myvar %uint_1 %uint_2
-               OpStore %14 %float_42
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.wgsl
deleted file mode 100644
index 1613181..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_Struct_RuntimeArray.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-type RTArr = [[stride(4)]] array<f32>;
-
-[[block]]
-struct S {
-  field0 : f32;
-  age : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  myvar.age[2u] = 42.0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.hlsl
deleted file mode 100644
index 0bb697a..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-void set_uint4(inout uint4 vec, int idx, uint val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static uint4 myvar = uint4(0u, 0u, 0u, 0u);
-static uint4 x_10 = uint4(0u, 0u, 0u, 0u);
-
-void main_1() {
-  const uint a_dynamic_index = x_10.z;
-  set_uint4(myvar, a_dynamic_index, 42u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.msl
deleted file mode 100644
index fb8ba9e..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint4* const tint_symbol_1, thread uint4* const tint_symbol_2) {
-  uint4 const x_11 = *(tint_symbol_1);
-  uint const a_dynamic_index = x_11.z;
-  (*(tint_symbol_2))[a_dynamic_index] = 42u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint4 tint_symbol_3 = 0u;
-  thread uint4 tint_symbol_4 = 0u;
-  main_1(&(tint_symbol_3), &(tint_symbol_4));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.spvasm
deleted file mode 100644
index 403d538..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myvar "myvar"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-     %v4uint = OpTypeVector %uint 4
-%_ptr_Private_v4uint = OpTypePointer Private %v4uint
-          %5 = OpConstantNull %v4uint
-      %myvar = OpVariable %_ptr_Private_v4uint Private %5
-       %x_10 = OpVariable %_ptr_Private_v4uint Private %5
-       %void = OpTypeVoid
-          %7 = OpTypeFunction %void
-%_ptr_Private_uint = OpTypePointer Private %uint
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %7
-         %10 = OpLabel
-         %11 = OpLoad %v4uint %x_10
-         %12 = OpCompositeExtract %uint %11 2
-         %14 = OpAccessChain %_ptr_Private_uint %myvar %12
-               OpStore %14 %uint_42
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %7
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.wgsl
deleted file mode 100644
index 9b3b236..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorNonConstIndex.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-var<private> myvar : vec4<u32>;
-
-var<private> x_10 : vec4<u32>;
-
-fn main_1() {
-  let x_11 : vec4<u32> = x_10;
-  let a_dynamic_index : u32 = x_11.z;
-  myvar[a_dynamic_index] = 42u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.hlsl
deleted file mode 100644
index 04495ad..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-static uint4 myvar = uint4(0u, 0u, 0u, 0u);
-
-void main_1() {
-  myvar.z = 42u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.msl
deleted file mode 100644
index a724359..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint4* const tint_symbol_1) {
-  (*(tint_symbol_1)).z = 42u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint4 tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.spvasm
deleted file mode 100644
index 16433fc..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-     %v4uint = OpTypeVector %uint 4
-%_ptr_Private_v4uint = OpTypePointer Private %v4uint
-          %5 = OpConstantNull %v4uint
-      %myvar = OpVariable %_ptr_Private_v4uint Private %5
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_ptr_Private_uint = OpTypePointer Private %uint
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %12 = OpAccessChain %_ptr_Private_uint %myvar %uint_2
-               OpStore %12 %uint_42
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.wgsl
deleted file mode 100644
index e52b291..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_AccessChain_VectorSwizzle.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-var<private> myvar : vec4<u32>;
-
-fn main_1() {
-  myvar.z = 42u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.hlsl
deleted file mode 100644
index 79794e4..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-static uint x_2 = 0u;
-
-void main_1() {
-  uint x_1 = 0u;
-  x_2 = x_1;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.msl
deleted file mode 100644
index d71a2b9..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  uint x_1 = 0u;
-  *(tint_symbol_1) = x_1;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.spvasm
deleted file mode 100644
index ce6e08a..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_2 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_uint Function %4
-         %11 = OpLoad %uint %x_1
-               OpStore %x_2 %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.wgsl
deleted file mode 100644
index c4daeea..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_CopyMemory_Scalar_Function_To_Private.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-var<private> x_2 : u32;
-
-fn main_1() {
-  var x_1 : u32;
-  x_2 = x_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.hlsl
deleted file mode 100644
index 82ac527..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  bool x_1 = true;
-  const bool x_2 = x_1;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.msl
deleted file mode 100644
index 09bfe9f..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool x_1 = true;
-  bool const x_2 = x_1;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.spvasm
deleted file mode 100644
index 4b20fc2..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-          %9 = OpConstantNull %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_bool Function %9
-               OpStore %x_1 %true
-         %10 = OpLoad %bool %x_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.wgsl
deleted file mode 100644
index 98e051f..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadBool.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  var x_1 : bool = true;
-  let x_2 : bool = x_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.hlsl
deleted file mode 100644
index 99af8f9..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  uint x_1 = 42u;
-  const uint x_2 = x_1;
-  const uint x_3 = x_1;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.msl
deleted file mode 100644
index 0bebad7..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint x_1 = 42u;
-  uint const x_2 = x_1;
-  uint const x_3 = x_1;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.spvasm
deleted file mode 100644
index ffd75f0..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_42 = OpConstant %uint 42
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %9 = OpConstantNull %uint
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_uint Function %9
-               OpStore %x_1 %uint_42
-         %10 = OpLoad %uint %x_1
-         %11 = OpLoad %uint %x_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.wgsl
deleted file mode 100644
index e83f8cd..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_LoadScalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  var x_1 : u32 = 42u;
-  let x_2 : u32 = x_1;
-  let x_3 : u32 = x_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.hlsl
deleted file mode 100644
index 4c3376e..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  bool x_1 = false;
-  x_1 = true;
-  x_1 = false;
-  x_1 = false;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.msl
deleted file mode 100644
index b4282dd..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool x_1 = false;
-  x_1 = true;
-  x_1 = false;
-  x_1 = false;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.spvasm
deleted file mode 100644
index ae01291..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-          %8 = OpConstantNull %bool
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_bool Function %8
-               OpStore %x_1 %true
-               OpStore %x_1 %false
-               OpStore %x_1 %false
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.wgsl
deleted file mode 100644
index bcc6cb9..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreBoolConst.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn main_1() {
-  var x_1 : bool;
-  x_1 = true;
-  x_1 = false;
-  x_1 = false;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.hlsl
deleted file mode 100644
index 0e9290e..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  float x_1 = 0.0f;
-  x_1 = 42.0f;
-  x_1 = 0.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.msl
deleted file mode 100644
index c1d4c1f..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float x_1 = 0.0f;
-  x_1 = 42.0f;
-  x_1 = 0.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.spvasm
deleted file mode 100644
index ca4e7a5..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-%_ptr_Function_float = OpTypePointer Function %float
-          %8 = OpConstantNull %float
-   %float_42 = OpConstant %float 42
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_float Function %8
-               OpStore %x_1 %float_42
-               OpStore %x_1 %float_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.wgsl
deleted file mode 100644
index 51a00a5..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreFloatConst.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  var x_1 : f32;
-  x_1 = 42.0;
-  x_1 = 0.0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.hlsl
deleted file mode 100644
index 1ecf6df..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  int x_1 = 0;
-  x_1 = 42;
-  x_1 = 0;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.msl
deleted file mode 100644
index bfcf069..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int x_1 = 0;
-  x_1 = 42;
-  x_1 = 0;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.spvasm
deleted file mode 100644
index ceb82a4..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-          %8 = OpConstantNull %int
-     %int_42 = OpConstant %int 42
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_int Function %8
-               OpStore %x_1 %int_42
-               OpStore %x_1 %int_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.wgsl
deleted file mode 100644
index 7fa89f0..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreIntConst.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  var x_1 : i32;
-  x_1 = 42;
-  x_1 = 0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.hlsl
deleted file mode 100644
index ce9f2c6..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-static uint x_1 = 0u;
-
-void main_1() {
-  x_1 = 42u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.msl
deleted file mode 100644
index a117075..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1(thread uint* const tint_symbol_1) {
-  *(tint_symbol_1) = 42u;
-  return;
-}
-
-fragment void tint_symbol() {
-  thread uint tint_symbol_2 = 0u;
-  main_1(&(tint_symbol_2));
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.spvasm
deleted file mode 100644
index 5bfc4f8..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_1 "x_1"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %uint = OpTypeInt 32 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-          %4 = OpConstantNull %uint
-        %x_1 = OpVariable %_ptr_Private_uint Private %4
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpStore %x_1 %uint_42
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.wgsl
deleted file mode 100644
index adfb154..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreToModuleScopeVar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-var<private> x_1 : u32;
-
-fn main_1() {
-  x_1 = 42u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.hlsl
deleted file mode 100644
index a481728..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  uint x_1 = 0u;
-  x_1 = 42u;
-  x_1 = 0u;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.msl
deleted file mode 100644
index 2d18ec6..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint x_1 = 0u;
-  x_1 = 42u;
-  x_1 = 0u;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.spvasm
deleted file mode 100644
index f359441..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-    %uint_42 = OpConstant %uint 42
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_uint Function %8
-               OpStore %x_1 %uint_42
-               OpStore %x_1 %uint_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.wgsl
deleted file mode 100644
index 0e7cc16..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_StoreUintConst.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  var x_1 : u32;
-  x_1 = 42u;
-  x_1 = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.hlsl
deleted file mode 100644
index 50151bc..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  uint x_1 = 42u;
-  const uint x_2 = x_1;
-  x_1 = x_2;
-  x_1 = x_2;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.msl
deleted file mode 100644
index 9d0f241..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint x_1 = 42u;
-  uint const x_2 = x_1;
-  x_1 = x_2;
-  x_1 = x_2;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.spvasm
deleted file mode 100644
index 742992c..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_1 "x_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_42 = OpConstant %uint 42
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %9 = OpConstantNull %uint
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-        %x_1 = OpVariable %_ptr_Function_uint Function %9
-               OpStore %x_1 %uint_42
-         %10 = OpLoad %uint %x_1
-               OpStore %x_1 %10
-               OpStore %x_1 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.wgsl
deleted file mode 100644
index 2df1056..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_EmitStatement_UseLoadedScalarTwice.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn main_1() {
-  var x_1 : u32 = 42u;
-  let x_2 : u32 = x_1;
-  x_1 = x_2;
-  x_1 = x_2;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.hlsl
deleted file mode 100644
index da24ebe..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  myvar.Store(8u, asuint(0u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.msl
deleted file mode 100644
index d0340a1..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0;
-  /* 0x0004 */ uint field1[1];
-};
-
-void main_1(device S& myvar) {
-  myvar.field1[1u] = 0u;
-  return;
-}
-
-fragment void tint_symbol(device S& myvar [[buffer(0)]]) {
-  main_1(myvar);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.spvasm
deleted file mode 100644
index 6febe30..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %uint %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %12 = OpAccessChain %_ptr_StorageBuffer_uint %myvar %uint_1 %uint_1
-               OpStore %12 %uint_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.wgsl
deleted file mode 100644
index 36d715b..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_Cascaded.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : u32;
-  field1 : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  myvar.field1[1u] = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.hlsl
deleted file mode 100644
index 1ad868f..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  myvar.Store(0u, asuint(0u));
-  myvar.Store(8u, asuint(0u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.msl
deleted file mode 100644
index a4a55e9..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0;
-  /* 0x0004 */ uint field1[1];
-};
-
-void main_1(device S& myvar) {
-  myvar.field0 = 0u;
-  myvar.field1[1u] = 0u;
-  return;
-}
-
-fragment void tint_symbol(device S& myvar [[buffer(0)]]) {
-  main_1(myvar);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.spvasm
deleted file mode 100644
index 476b04f..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %uint %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %12 = OpAccessChain %_ptr_StorageBuffer_uint %myvar %uint_0
-               OpStore %12 %uint_0
-         %14 = OpAccessChain %_ptr_StorageBuffer_uint %myvar %uint_1 %uint_1
-               OpStore %14 %uint_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.wgsl
deleted file mode 100644
index 8e3aa2e..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : u32;
-  field1 : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  myvar.field0 = 0u;
-  myvar.field1[1u] = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.hlsl
deleted file mode 100644
index 1ad868f..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  myvar.Store(0u, asuint(0u));
-  myvar.Store(8u, asuint(0u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.msl
deleted file mode 100644
index a4a55e9..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0;
-  /* 0x0004 */ uint field1[1];
-};
-
-void main_1(device S& myvar) {
-  myvar.field0 = 0u;
-  myvar.field1[1u] = 0u;
-  return;
-}
-
-fragment void tint_symbol(device S& myvar [[buffer(0)]]) {
-  main_1(myvar);
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.spvasm
deleted file mode 100644
index 476b04f..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %uint %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-     %uint_1 = OpConstant %uint 1
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %12 = OpAccessChain %_ptr_StorageBuffer_uint %myvar %uint_0
-               OpStore %12 %uint_0
-         %14 = OpAccessChain %_ptr_StorageBuffer_uint %myvar %uint_1 %uint_1
-               OpStore %14 %uint_0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.wgsl
deleted file mode 100644
index 8e3aa2e..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_ThroughAccessChain_NonCascaded_InBoundsAccessChain.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : u32;
-  field1 : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  myvar.field0 = 0u;
-  myvar.field1[1u] = 0u;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.hlsl
deleted file mode 100644
index ef0855d..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-RWByteAddressBuffer myvar : register(u0, space0);
-
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.msl
deleted file mode 100644
index a15bf99..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0;
-  /* 0x0004 */ uint field1[1];
-};
-
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.spvasm
deleted file mode 100644
index f6a41d8..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpName %myvar "myvar"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %myvar DescriptorSet 0
-               OpDecorate %myvar Binding 0
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %uint %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-      %myvar = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.wgsl
deleted file mode 100644
index 2f2d486..0000000
--- a/test/unittest/reader/spirv/SpvParserMemoryTest_RemapStorageBuffer_TypesAndVarDeclarations.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : u32;
-  field1 : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> myvar : S;
-
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.hlsl
deleted file mode 100644
index 1135368..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.spvasm
deleted file mode 100644
index ca944f0..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.wgsl
deleted file mode 100644
index 471e2a6..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpNop.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 1c333fc..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  const bool x_11 = false;
-  const uint x_12 = 0u;
-  const int x_13 = 0;
-  const float x_14 = 0.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.msl
deleted file mode 100644
index b8ebf26..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_11 = false;
-  uint const x_12 = 0u;
-  int const x_13 = 0;
-  float const x_14 = 0.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 39169de..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-      %float = OpTypeFloat 32
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 7f824c3..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn main_1() {
-  let x_11 : bool = false;
-  let x_12 : u32 = 0u;
-  let x_13 : i32 = 0;
-  let x_14 : f32 = 0.0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.hlsl
deleted file mode 100644
index f48d969..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  const bool2 x_14 = bool2(false, false);
-  const uint2 x_11 = uint2(0u, 0u);
-  const int2 x_12 = int2(0, 0);
-  const float2 x_13 = float2(0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.msl
deleted file mode 100644
index 2c5087c..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_14 = bool2(false, false);
-  uint2 const x_11 = uint2(0u, 0u);
-  int2 const x_12 = int2(0, 0);
-  float2 const x_13 = float2(0.0f, 0.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 34b50e9..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-      %false = OpConstantFalse %bool
-          %8 = OpConstantComposite %v2bool %false %false
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %uint_0 = OpConstant %uint 0
-         %12 = OpConstantComposite %v2uint %uint_0 %uint_0
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_0 = OpConstant %int 0
-         %16 = OpConstantComposite %v2int %int_0 %int_0
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-    %float_0 = OpConstant %float 0
-         %20 = OpConstantComposite %v2float %float_0 %float_0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 16e44de..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_BeforeFunction_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn main_1() {
-  let x_14 : vec2<bool> = vec2<bool>(false, false);
-  let x_11 : vec2<u32> = vec2<u32>(0u, 0u);
-  let x_12 : vec2<i32> = vec2<i32>(0, 0);
-  let x_13 : vec2<f32> = vec2<f32>(0.0, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.hlsl
deleted file mode 100644
index e2dc20c..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_11[2] = {0u, 0u};
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.msl
deleted file mode 100644
index c1cb8ea..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  uint arr[2];
-};
-
-void main_1() {
-  tint_array_wrapper const x_11 = {.arr={0u, 0u}};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.spvasm
deleted file mode 100644
index 65a7f77..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_2 ArrayStride 4
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-     %uint_0 = OpConstant %uint 0
-          %9 = OpConstantComposite %_arr_uint_uint_2 %uint_0 %uint_0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.wgsl
deleted file mode 100644
index 1b75341..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Array.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_11 : array<u32, 2> = array<u32, 2>(0u, 0u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.hlsl
deleted file mode 100644
index 33b9a66..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2x2 x_11 = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.msl
deleted file mode 100644
index 39e9c10..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2x2 const x_11 = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.spvasm
deleted file mode 100644
index 5d8aff4..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-    %float_0 = OpConstant %float 0
-          %9 = OpConstantComposite %v2float %float_0 %float_0
-         %10 = OpConstantComposite %mat2v2float %9 %9
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.wgsl
deleted file mode 100644
index 8a02cce..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Matrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_11 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 1c333fc..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  const bool x_11 = false;
-  const uint x_12 = 0u;
-  const int x_13 = 0;
-  const float x_14 = 0.0f;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.msl
deleted file mode 100644
index b8ebf26..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_11 = false;
-  uint const x_12 = 0u;
-  int const x_13 = 0;
-  float const x_14 = 0.0f;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 39169de..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-      %float = OpTypeFloat 32
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 7f824c3..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn main_1() {
-  let x_11 : bool = false;
-  let x_12 : u32 = 0u;
-  let x_13 : i32 = 0;
-  let x_14 : f32 = 0.0;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.hlsl
deleted file mode 100644
index 1e627e2..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  bool field0;
-  uint field1;
-  int field2;
-  float field3;
-};
-
-void main_1() {
-  const S x_11 = {false, 0u, 0, 0.0f};
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.msl
deleted file mode 100644
index 062b737..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  bool field0;
-  uint field1;
-  int field2;
-  float field3;
-};
-
-void main_1() {
-  S const x_11 = {.field0=false, .field1=0u, .field2=0, .field3=0.0f};
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.spvasm
deleted file mode 100644
index 6843c11..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,41 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpMemberName %S 3 "field3"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpMemberDecorate %S 3 Offset 12
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-      %float = OpTypeFloat 32
-          %S = OpTypeStruct %bool %uint %int %float
-      %false = OpConstantFalse %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-         %14 = OpConstantComposite %S %false %uint_0 %int_0 %float_0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.wgsl
deleted file mode 100644
index 2ace22b..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Struct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  field0 : bool;
-  field1 : u32;
-  field2 : i32;
-  field3 : f32;
-};
-
-fn main_1() {
-  let x_11 : S = S(false, 0u, 0, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 622822c..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const uint2 x_11 = uint2(0u, 0u);
-  const int2 x_12 = int2(0, 0);
-  const float2 x_13 = float2(0.0f, 0.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.msl
deleted file mode 100644
index ed0c516..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_11 = uint2(0u, 0u);
-  int2 const x_12 = int2(0, 0);
-  float2 const x_13 = float2(0.0f, 0.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 18b0836..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %uint_0 = OpConstant %uint 0
-          %8 = OpConstantComposite %v2uint %uint_0 %uint_0
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_0 = OpConstant %int 0
-         %12 = OpConstantComposite %v2int %int_0 %int_0
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-    %float_0 = OpConstant %float 0
-         %16 = OpConstantComposite %v2float %float_0 %float_0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.wgsl
deleted file mode 100644
index b77d651..0000000
--- a/test/unittest/reader/spirv/SpvParserTestMiscInstruction_OpUndef_InFunction_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,11 +0,0 @@
-fn main_1() {
-  let x_11 : vec2<u32> = vec2<u32>(0u, 0u);
-  let x_12 : vec2<i32> = vec2<i32>(0, 0);
-  let x_13 : vec2<f32> = vec2<f32>(0.0, 0.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 8daeff3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 & asint(10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 09866c1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>((30 & as_type<int>(10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index d86103d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %int %uint_10
-         %11 = OpBitwiseAnd %int %int_30 %9
-          %5 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 28cdc31..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 & bitcast<i32>(10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index ccbe5e6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 & asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 7185ce3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 & as_type<int>(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 974aae3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpBitwiseAnd %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 8b6ccf6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 & bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 35fff8a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u & asuint(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 9b39fed..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u & as_type<uint>(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 0439ab7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %10 = OpBitwiseAnd %uint %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index ede5ddd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u & bitcast<u32>(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 267c570..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((20u & 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 7e6d49c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((20u & 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index dacfa9a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitwiseAnd %uint %uint_20 %uint_10
-          %5 = OpBitcast %int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index ddd452a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((20u & 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 35f97f3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) & asint(uint2(10u, 20u))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 5d6a845..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>((int2(30, 40) & as_type<int2>(uint2(10u, 20u))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 5e37605..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %16 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2int %16
-         %17 = OpBitwiseAnd %v2int %12 %13
-          %5 = OpBitcast %v2uint %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 15cf3a7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) & bitcast<vec2<i32>>(vec2<u32>(10u, 20u))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 6dcfce8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((uint2(10u, 20u) & asuint(int2(40, 30))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 25561f0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((uint2(10u, 20u) & as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 4fcbe33..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %16 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2uint %16
-         %17 = OpBitwiseAnd %v2uint %12 %13
-          %5 = OpBitcast %v2int %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 599291f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((vec2<u32>(10u, 20u) & bitcast<vec2<u32>>(vec2<i32>(40, 30))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 6fd61f1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u & 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 4857fea..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u & 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index c0acca2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitwiseAnd %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index fa96560..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u & 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 069f035..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 & 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 9c2ddb4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 & 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 87fc4f0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitwiseAnd %int %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index e4fe605..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 & 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 61c9c17..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) & uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 35af63a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) & uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index bf1ec0d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpBitwiseAnd %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 92d0c5b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) & vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 777dfba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) & int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 244225b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(30, 40) & int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 2956339..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpBitwiseAnd %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index b67e732..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseAnd_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) & vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index af5bd3d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 | asint(10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 43972ab..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>((30 | as_type<int>(10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 6263cce..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %int %uint_10
-         %11 = OpBitwiseOr %int %int_30 %9
-          %5 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index c574be1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 | bitcast<i32>(10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index fbb2d3d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 | asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 161017d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 | as_type<int>(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 3240ac4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpBitwiseOr %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 4e8ebb1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 | bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index fe7026f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u | asuint(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 7303545..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u | as_type<uint>(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index f9b9023..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %10 = OpBitwiseOr %uint %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 8a4c1d2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u | bitcast<u32>(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index dbc5745..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((20u | 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index ba5554c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((20u | 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 0e7eac2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitwiseOr %uint %uint_20 %uint_10
-          %5 = OpBitcast %int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index b291348..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((20u | 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 0334e75..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) | asint(uint2(10u, 20u))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index d445f70..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>((int2(30, 40) | as_type<int2>(uint2(10u, 20u))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 214b8c0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %16 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2int %16
-         %17 = OpBitwiseOr %v2int %12 %13
-          %5 = OpBitcast %v2uint %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 7e05596..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) | bitcast<vec2<i32>>(vec2<u32>(10u, 20u))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 1e2f655..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((uint2(10u, 20u) | asuint(int2(40, 30))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 3dee84f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((uint2(10u, 20u) | as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index c56abb4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %16 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2uint %16
-         %17 = OpBitwiseOr %v2uint %12 %13
-          %5 = OpBitcast %v2int %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index fe7e851..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((vec2<u32>(10u, 20u) | bitcast<vec2<u32>>(vec2<i32>(40, 30))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 33a7f6a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u | 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index dd24d81..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u | 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index e6efbf2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitwiseOr %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 86bf584..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u | 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 0f8b9c6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 | 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 09800fd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 | 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 2f91c36..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitwiseOr %int %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 4810762..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 | 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index bd2b6f3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) | uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index d37cfab..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) | uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 729dcb4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpBitwiseOr %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index de8cdec..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) | vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 34cc261..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) | int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 0e2c805..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(30, 40) | int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 329413f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpBitwiseOr %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 02f76d1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseOr_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) | vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index f084e8d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 ^ asint(10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 2beff4c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>((30 ^ as_type<int>(10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 9af7f7e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %int %uint_10
-         %11 = OpBitwiseXor %int %int_30 %9
-          %5 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 5d4ebcb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 ^ bitcast<i32>(10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index ce0016b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 ^ asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 1bd1ed6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 ^ as_type<int>(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 93f031a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpBitwiseXor %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index d728e06..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 ^ bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 96dfbcc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u ^ asuint(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index e4a4633..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u ^ as_type<uint>(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 13f74a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %10 = OpBitwiseXor %uint %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 9a7ed2c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u ^ bitcast<u32>(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 49b03a7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((20u ^ 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 5069e92..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((20u ^ 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 63b8a51..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitwiseXor %uint %uint_20 %uint_10
-          %5 = OpBitcast %int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 13df578..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((20u ^ 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 589ccb9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) ^ asint(uint2(10u, 20u))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index c17bc8a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>((int2(30, 40) ^ as_type<int2>(uint2(10u, 20u))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index cb26191..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %16 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2int %16
-         %17 = OpBitwiseXor %v2int %12 %13
-          %5 = OpBitcast %v2uint %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 25238d2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) ^ bitcast<vec2<i32>>(vec2<u32>(10u, 20u))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 0bc9085..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((uint2(10u, 20u) ^ asuint(int2(40, 30))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 1b587bf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((uint2(10u, 20u) ^ as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 6abc053..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %16 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2uint %16
-         %17 = OpBitwiseXor %v2uint %12 %13
-          %5 = OpBitcast %v2int %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index aedf862..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_MixedSignedness_SpvBinaryBitGeneralTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((vec2<u32>(10u, 20u) ^ bitcast<vec2<u32>>(vec2<i32>(40, 30))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 5cb2f7b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u ^ 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 7b580d9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u ^ 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index ab87cf7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitwiseXor %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 7640633..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u ^ 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index b086603..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 ^ 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 9a6691b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 ^ 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 1de9101..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitwiseXor %int %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index bff8479..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 ^ 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index f318a1f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) ^ uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 3949abf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) ^ uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index bf9d7fb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpBitwiseXor %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 2f68b93..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) ^ vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index e1c2b26..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) ^ int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 68ab203..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(30, 40) ^ int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 7ff16f1b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpBitwiseXor %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index fa65cd2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_BitwiseXor_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) ^ vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.hlsl
deleted file mode 100644
index 05d43e2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  uint x_35[5] = (uint[5])0;
-  const uint x_2 = x_35[3u];
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.msl
deleted file mode 100644
index fa5ff1b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-struct tint_array_wrapper {
-  uint arr[5];
-};
-
-void main_1() {
-  tint_array_wrapper x_35 = {};
-  tint_array_wrapper const x_1 = x_35;
-  uint const x_2 = x_1.arr[3u];
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.spvasm
deleted file mode 100644
index 3b9cb09..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_35 "x_35"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_5 ArrayStride 4
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_uint_uint_5 = OpTypeArray %uint %uint_5
-%_ptr_Function__arr_uint_uint_5 = OpTypePointer Function %_arr_uint_uint_5
-         %10 = OpConstantNull %_arr_uint_uint_5
-     %uint_3 = OpConstant %uint 3
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_35 = OpVariable %_ptr_Function__arr_uint_uint_5 Function %10
-         %11 = OpLoad %_arr_uint_uint_5 %x_35
-         %13 = OpCompositeExtract %uint %11 3
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.wgsl
deleted file mode 100644
index f5ddf63..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Array.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_35 : array<u32, 5>;
-  let x_1 : array<u32, 5> = x_35;
-  let x_2 : u32 = x_1[3u];
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.hlsl
deleted file mode 100644
index 89799a1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  float3x2 x_35 = float3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const float2 x_2 = x_35[2u];
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.msl
deleted file mode 100644
index 5ca2e35..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  float3x2 x_35 = float3x2(0.0f);
-  float3x2 const x_1 = x_35;
-  float2 const x_2 = x_1[2u];
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.spvasm
deleted file mode 100644
index ad6e65c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_35 "x_35"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %10 = OpConstantNull %mat3v2float
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_35 = OpVariable %_ptr_Function_mat3v2float Function %10
-         %11 = OpLoad %mat3v2float %x_35
-         %14 = OpCompositeExtract %v2float %11 2
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.wgsl
deleted file mode 100644
index 8dc1f71..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_35 : mat3x2<f32>;
-  let x_1 : mat3x2<f32> = x_35;
-  let x_2 : vec2<f32> = x_1[2u];
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 8a1c2e1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  float3x2 x_35 = float3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_2 = x_35[2u].y;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.msl
deleted file mode 100644
index 0030961..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  float3x2 x_35 = float3x2(0.0f);
-  float3x2 const x_1 = x_35;
-  float const x_2 = x_1[2u].y;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 7fe8e86..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_35 "x_35"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %10 = OpConstantNull %mat3v2float
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_35 = OpVariable %_ptr_Function_mat3v2float Function %10
-         %11 = OpLoad %mat3v2float %x_35
-         %14 = OpCompositeExtract %v2float %11 2
-         %15 = OpCompositeExtract %float %14 1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.wgsl
deleted file mode 100644
index eceabfb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Matrix_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_35 : mat3x2<f32>;
-  let x_1 : mat3x2<f32> = x_35;
-  let x_2 : f32 = x_1[2u].y;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.hlsl
deleted file mode 100644
index 2c66421..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  S x_35 = (S)0;
-  const int x_2 = x_35.field2;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.msl
deleted file mode 100644
index 3aef306..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  S x_35 = {};
-  S const x_1 = x_35;
-  int const x_2 = x_1.field2;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.spvasm
deleted file mode 100644
index 5e02b6c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_35 "x_35"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 8
-               OpMemberDecorate %S 2 Offset 12
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-          %S = OpTypeStruct %v2float %uint %int
-%_ptr_Function_S = OpTypePointer Function %S
-         %12 = OpConstantNull %S
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_35 = OpVariable %_ptr_Function_S Function %12
-         %13 = OpLoad %S %x_35
-         %14 = OpCompositeExtract %int %13 2
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.wgsl
deleted file mode 100644
index 39ef3eb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_35 : S;
-  let x_1 : S = x_35;
-  let x_2 : i32 = x_1.field2;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.hlsl
deleted file mode 100644
index bc08b10..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S_1 {
-  uint field0;
-  float3x2 field1[3];
-};
-
-void main_1() {
-  S_1 x_37 = (S_1)0;
-  const float x_2 = x_37.field1[2u][0u].y;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.msl
deleted file mode 100644
index 848baf7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-struct tint_array_wrapper {
-  float3x2 arr[3];
-};
-struct S_1 {
-  uint field0;
-  tint_array_wrapper field1;
-};
-
-void main_1() {
-  S_1 x_37 = {};
-  S_1 const x_1 = x_37;
-  float const x_2 = x_1.field1.arr[2u][0u].y;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 27b9be7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,48 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %S_1 "S_1"
-               OpMemberName %S_1 0 "field0"
-               OpMemberName %S_1 1 "field1"
-               OpName %x_37 "x_37"
-               OpName %main "main"
-               OpMemberDecorate %S_1 0 Offset 0
-               OpMemberDecorate %S_1 1 Offset 8
-               OpMemberDecorate %S_1 1 ColMajor
-               OpMemberDecorate %S_1 1 MatrixStride 8
-               OpDecorate %_arr_mat3v2float_uint_3 ArrayStride 24
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-     %uint_3 = OpConstant %uint 3
-%_arr_mat3v2float_uint_3 = OpTypeArray %mat3v2float %uint_3
-        %S_1 = OpTypeStruct %uint %_arr_mat3v2float_uint_3
-%_ptr_Function_S_1 = OpTypePointer Function %S_1
-         %14 = OpConstantNull %S_1
-     %uint_2 = OpConstant %uint 2
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_37 = OpVariable %_ptr_Function_S_1 Function %14
-         %15 = OpLoad %S_1 %x_37
-         %16 = OpCompositeExtract %_arr_mat3v2float_uint_3 %15 1
-         %18 = OpCompositeExtract %mat3v2float %16 2
-         %20 = OpCompositeExtract %v2float %18 0
-         %21 = OpCompositeExtract %float %20 1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 4279fe1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Struct_Array_Matrix_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-struct S_1 {
-  field0 : u32;
-  field1 : array<mat3x2<f32>, 3>;
-};
-
-fn main_1() {
-  var x_37 : S_1;
-  let x_1 : S_1 = x_37;
-  let x_2 : f32 = x_1.field1[2u][0u].y;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 36759a1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float x_1 = float2(50.0f, 60.0f).y;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.msl
deleted file mode 100644
index 246c468..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  float const x_1 = float2(50.0f, 60.0f).y;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 219e36a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpCompositeExtract %float %9 1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 55863bb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeExtract_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : f32 = vec2<f32>(50.0, 60.0).y;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.hlsl
deleted file mode 100644
index 19178b2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-void main_1() {
-  uint x_35[5] = (uint[5])0;
-  uint x_2_1[5] = x_35;
-  x_2_1[3u] = 20u;
-  const uint x_2[5] = x_2_1;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.msl
deleted file mode 100644
index dcaff85..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-struct tint_array_wrapper {
-  uint arr[5];
-};
-
-void main_1() {
-  tint_array_wrapper x_35 = {};
-  tint_array_wrapper const x_1 = x_35;
-  tint_array_wrapper x_2_1 = x_1;
-  x_2_1.arr[3u] = 20u;
-  tint_array_wrapper const x_2 = x_2_1;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.spvasm
deleted file mode 100644
index 2e5dcd5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_35 "x_35"
-               OpName %x_2_1 "x_2_1"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_5 ArrayStride 4
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_uint_uint_5 = OpTypeArray %uint %uint_5
-%_ptr_Function__arr_uint_uint_5 = OpTypePointer Function %_arr_uint_uint_5
-         %10 = OpConstantNull %_arr_uint_uint_5
-     %uint_3 = OpConstant %uint 3
-%_ptr_Function_uint = OpTypePointer Function %uint
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_35 = OpVariable %_ptr_Function__arr_uint_uint_5 Function %10
-      %x_2_1 = OpVariable %_ptr_Function__arr_uint_uint_5 Function %10
-         %11 = OpLoad %_arr_uint_uint_5 %x_35
-               OpStore %x_2_1 %11
-         %15 = OpAccessChain %_ptr_Function_uint %x_2_1 %uint_3
-               OpStore %15 %uint_20
-         %17 = OpLoad %_arr_uint_uint_5 %x_2_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.wgsl
deleted file mode 100644
index 5ce5820..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Array.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_35 : array<u32, 5>;
-  let x_1 : array<u32, 5> = x_35;
-  var x_2_1 : array<u32, 5> = x_1;
-  x_2_1[3u] = 20u;
-  let x_2 : array<u32, 5> = x_2_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.hlsl
deleted file mode 100644
index a70ffdd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-void main_1() {
-  float3x2 x_35 = float3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3x2 x_2_1 = x_35;
-  x_2_1[2u] = float2(50.0f, 60.0f);
-  const float3x2 x_2 = x_2_1;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.msl
deleted file mode 100644
index 794de75..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  float3x2 x_35 = float3x2(0.0f);
-  float3x2 const x_1 = x_35;
-  float3x2 x_2_1 = x_1;
-  x_2_1[2u] = float2(50.0f, 60.0f);
-  float3x2 const x_2 = x_2_1;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.spvasm
deleted file mode 100644
index 5517818..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_35 "x_35"
-               OpName %x_2_1 "x_2_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %10 = OpConstantNull %mat3v2float
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %19 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_35 = OpVariable %_ptr_Function_mat3v2float Function %10
-      %x_2_1 = OpVariable %_ptr_Function_mat3v2float Function %10
-         %11 = OpLoad %mat3v2float %x_35
-               OpStore %x_2_1 %11
-         %16 = OpAccessChain %_ptr_Function_v2float %x_2_1 %uint_2
-               OpStore %16 %19
-         %20 = OpLoad %mat3v2float %x_2_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.wgsl
deleted file mode 100644
index 2816a96..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_35 : mat3x2<f32>;
-  let x_1 : mat3x2<f32> = x_35;
-  var x_2_1 : mat3x2<f32> = x_1;
-  x_2_1[2u] = vec2<f32>(50.0, 60.0);
-  let x_2 : mat3x2<f32> = x_2_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.hlsl
deleted file mode 100644
index a70ffdd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-void main_1() {
-  float3x2 x_35 = float3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3x2 x_2_1 = x_35;
-  x_2_1[2u] = float2(50.0f, 60.0f);
-  const float3x2 x_2 = x_2_1;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.msl
deleted file mode 100644
index 794de75..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  float3x2 x_35 = float3x2(0.0f);
-  float3x2 const x_1 = x_35;
-  float3x2 x_2_1 = x_1;
-  x_2_1[2u] = float2(50.0f, 60.0f);
-  float3x2 const x_2 = x_2_1;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 5517818..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 24
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_35 "x_35"
-               OpName %x_2_1 "x_2_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %10 = OpConstantNull %mat3v2float
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %19 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_35 = OpVariable %_ptr_Function_mat3v2float Function %10
-      %x_2_1 = OpVariable %_ptr_Function_mat3v2float Function %10
-         %11 = OpLoad %mat3v2float %x_35
-               OpStore %x_2_1 %11
-         %16 = OpAccessChain %_ptr_Function_v2float %x_2_1 %uint_2
-               OpStore %16 %19
-         %20 = OpLoad %mat3v2float %x_2_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 2816a96..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Matrix_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_35 : mat3x2<f32>;
-  let x_1 : mat3x2<f32> = x_35;
-  var x_2_1 : mat3x2<f32> = x_1;
-  x_2_1[2u] = vec2<f32>(50.0, 60.0);
-  let x_2 : mat3x2<f32> = x_2_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.hlsl
deleted file mode 100644
index b7cd046..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  S x_35 = (S)0;
-  S x_2_1 = x_35;
-  x_2_1.field2 = 30;
-  const S x_2 = x_2_1;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.msl
deleted file mode 100644
index a09c526..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.msl
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  S x_35 = {};
-  S const x_1 = x_35;
-  S x_2_1 = x_1;
-  x_2_1.field2 = 30;
-  S const x_2 = x_2_1;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.spvasm
deleted file mode 100644
index d81b001..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,48 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %x_35 "x_35"
-               OpName %x_2_1 "x_2_1"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 8
-               OpMemberDecorate %S 2 Offset 12
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-          %S = OpTypeStruct %v2float %uint %int
-%_ptr_Function_S = OpTypePointer Function %S
-         %12 = OpConstantNull %S
-     %uint_2 = OpConstant %uint 2
-%_ptr_Function_int = OpTypePointer Function %int
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_35 = OpVariable %_ptr_Function_S Function %12
-      %x_2_1 = OpVariable %_ptr_Function_S Function %12
-         %13 = OpLoad %S %x_35
-               OpStore %x_2_1 %13
-         %17 = OpAccessChain %_ptr_Function_int %x_2_1 %uint_2
-               OpStore %17 %int_30
-         %19 = OpLoad %S %x_2_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.wgsl
deleted file mode 100644
index 2af8923..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,19 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_35 : S;
-  let x_1 : S = x_35;
-  var x_2_1 : S = x_1;
-  x_2_1.field2 = 30;
-  let x_2 : S = x_2_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 0382970..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-struct S_1 {
-  uint field0;
-  float3x2 field1[3];
-};
-
-void main_1() {
-  S_1 x_37 = (S_1)0;
-  S_1 x_2_1 = x_37;
-  x_2_1.field1[2u][0u].y = 70.0f;
-  const S_1 x_2 = x_2_1;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.msl
deleted file mode 100644
index 3797dc8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-struct tint_array_wrapper {
-  float3x2 arr[3];
-};
-struct S_1 {
-  uint field0;
-  tint_array_wrapper field1;
-};
-
-void main_1() {
-  S_1 x_37 = {};
-  S_1 const x_1 = x_37;
-  S_1 x_2_1 = x_1;
-  x_2_1.field1.arr[2u][0u].y = 70.0f;
-  S_1 const x_2 = x_2_1;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 662e895..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %S_1 "S_1"
-               OpMemberName %S_1 0 "field0"
-               OpMemberName %S_1 1 "field1"
-               OpName %x_37 "x_37"
-               OpName %x_2_1 "x_2_1"
-               OpName %main "main"
-               OpMemberDecorate %S_1 0 Offset 0
-               OpMemberDecorate %S_1 1 Offset 8
-               OpMemberDecorate %S_1 1 ColMajor
-               OpMemberDecorate %S_1 1 MatrixStride 8
-               OpDecorate %_arr_mat3v2float_uint_3 ArrayStride 24
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-     %uint_3 = OpConstant %uint 3
-%_arr_mat3v2float_uint_3 = OpTypeArray %mat3v2float %uint_3
-        %S_1 = OpTypeStruct %uint %_arr_mat3v2float_uint_3
-%_ptr_Function_S_1 = OpTypePointer Function %S_1
-         %14 = OpConstantNull %S_1
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-   %float_70 = OpConstant %float 70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_37 = OpVariable %_ptr_Function_S_1 Function %14
-      %x_2_1 = OpVariable %_ptr_Function_S_1 Function %14
-         %15 = OpLoad %S_1 %x_37
-               OpStore %x_2_1 %15
-         %21 = OpAccessChain %_ptr_Function_float %x_2_1 %uint_1 %uint_2 %uint_0 %uint_1
-               OpStore %21 %float_70
-         %23 = OpLoad %S_1 %x_2_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 0a25140..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_Array_Matrix_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-struct S_1 {
-  field0 : u32;
-  field1 : array<mat3x2<f32>, 3>;
-};
-
-fn main_1() {
-  var x_37 : S_1;
-  let x_1 : S_1 = x_37;
-  var x_2_1 : S_1 = x_1;
-  x_2_1.field1[2u][0u].y = 70.0;
-  let x_2 : S_1 = x_2_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.hlsl
deleted file mode 100644
index e55fd97..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.hlsl
+++ /dev/null
@@ -1,23 +0,0 @@
-struct S {
-  uint algo;
-};
-struct S_1 {
-  uint rithm;
-};
-
-void main_1() {
-  S var0 = (S)0;
-  S_1 var1 = (S_1)0;
-  S x_2_1 = var0;
-  x_2_1.algo = 10u;
-  const S x_2 = x_2_1;
-  S_1 x_4_1 = var1;
-  x_4_1.rithm = 11u;
-  const S_1 x_4 = x_4_1;
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.msl
deleted file mode 100644
index 2b3fd60..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  uint algo;
-};
-struct S_1 {
-  uint rithm;
-};
-
-void main_1() {
-  S var0 = {};
-  S_1 var1 = {};
-  S const x_1 = var0;
-  S x_2_1 = x_1;
-  x_2_1.algo = 10u;
-  S const x_2 = x_2_1;
-  S_1 const x_3 = var1;
-  S_1 x_4_1 = x_3;
-  x_4_1.rithm = 11u;
-  S_1 const x_4 = x_4_1;
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.spvasm
deleted file mode 100644
index f611976..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "algo"
-               OpName %var0 "var0"
-               OpName %S_1 "S_1"
-               OpMemberName %S_1 0 "rithm"
-               OpName %var1 "var1"
-               OpName %x_2_1 "x_2_1"
-               OpName %x_4_1 "x_4_1"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S_1 0 Offset 0
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-          %S = OpTypeStruct %uint
-%_ptr_Function_S = OpTypePointer Function %S
-          %9 = OpConstantNull %S
-        %S_1 = OpTypeStruct %uint
-%_ptr_Function_S_1 = OpTypePointer Function %S_1
-         %13 = OpConstantNull %S_1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-    %uint_10 = OpConstant %uint 10
-    %uint_11 = OpConstant %uint 11
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %var0 = OpVariable %_ptr_Function_S Function %9
-       %var1 = OpVariable %_ptr_Function_S_1 Function %13
-      %x_2_1 = OpVariable %_ptr_Function_S Function %9
-      %x_4_1 = OpVariable %_ptr_Function_S_1 Function %13
-         %14 = OpLoad %S %var0
-               OpStore %x_2_1 %14
-         %18 = OpAccessChain %_ptr_Function_uint %x_2_1 %uint_0
-               OpStore %18 %uint_10
-         %20 = OpLoad %S %x_2_1
-         %21 = OpLoad %S_1 %var1
-               OpStore %x_4_1 %21
-         %23 = OpAccessChain %_ptr_Function_uint %x_4_1 %uint_0
-               OpStore %23 %uint_11
-         %25 = OpLoad %S_1 %x_4_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.wgsl
deleted file mode 100644
index ba2ae45..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Struct_DifferOnlyInMemberName.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-struct S {
-  algo : u32;
-};
-
-struct S_1 {
-  rithm : u32;
-};
-
-fn main_1() {
-  var var0 : S;
-  var var1 : S_1;
-  let x_1 : S = var0;
-  var x_2_1 : S = x_1;
-  x_2_1.algo = 10u;
-  let x_2 : S = x_2_1;
-  let x_3 : S_1 = var1;
-  var x_4_1 : S_1 = x_3;
-  x_4_1.rithm = 11u;
-  let x_4 : S_1 = x_4_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 7f31544..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  float2 x_1_1 = float2(50.0f, 60.0f);
-  x_1_1.y = 70.0f;
-  const float2 x_1 = x_1_1;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.msl
deleted file mode 100644
index 8e3912a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  float2 x_1_1 = float2(50.0f, 60.0f);
-  x_1_1.y = 70.0f;
-  float2 const x_1 = x_1_1;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 4a130b6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,39 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_1_1 "x_1_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %12 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-   %float_70 = OpConstant %float 70
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_1_1 = OpVariable %_ptr_Function_v2float Function %12
-               OpStore %x_1_1 %9
-         %16 = OpAccessChain %_ptr_Function_float %x_1_1 %uint_1
-               OpStore %16 %float_70
-         %18 = OpLoad %v2float %x_1_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 14d6304..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CompositeInsert_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_1_1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  x_1_1.y = 70.0;
-  let x_1 : vec2<f32> = x_1_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.hlsl
deleted file mode 100644
index 7d783ca..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const uint x_1[5] = {10u, 20u, 3u, 4u, 5u};
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.msl
deleted file mode 100644
index 8d4e43f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.msl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-struct tint_array_wrapper {
-  uint arr[5];
-};
-
-void main_1() {
-  tint_array_wrapper const x_1 = {.arr={10u, 20u, 3u, 4u, 5u}};
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.spvasm
deleted file mode 100644
index 6d4b90f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %_arr_uint_uint_5 ArrayStride 4
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_uint_uint_5 = OpTypeArray %uint %uint_5
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-         %12 = OpConstantComposite %_arr_uint_uint_5 %uint_10 %uint_20 %uint_3 %uint_4 %uint_5
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.wgsl
deleted file mode 100644
index 05ed420..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Array.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : array<u32, 5> = array<u32, 5>(10u, 20u, 3u, 4u, 5u);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.hlsl
deleted file mode 100644
index 08b4743..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3x2 x_1 = float3x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f), float2(70.0f, 70.0f));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.msl
deleted file mode 100644
index 099ab71..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  float3x2 const x_1 = float3x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f), float2(70.0f, 70.0f));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.spvasm
deleted file mode 100644
index a6199c2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-   %float_70 = OpConstant %float 70
-         %13 = OpConstantComposite %v2float %float_70 %float_70
-         %14 = OpConstantComposite %mat3v2float %10 %11 %13
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.wgsl
deleted file mode 100644
index 0bb8da5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Matrix.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : mat3x2<f32> = mat3x2<f32>(vec2<f32>(50.0, 60.0), vec2<f32>(60.0, 50.0), vec2<f32>(70.0, 70.0));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.hlsl
deleted file mode 100644
index 5fe220c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  const S x_1 = {float2(50.0f, 60.0f), 5u, 30};
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.msl
deleted file mode 100644
index 80d8ce6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  S const x_1 = {.field0=float2(50.0f, 60.0f), .field1=5u, .field2=30};
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.spvasm
deleted file mode 100644
index 4a65d40..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.spvasm
+++ /dev/null
@@ -1,40 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpMemberName %S 1 "field1"
-               OpMemberName %S 2 "field2"
-               OpName %main "main"
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 8
-               OpMemberDecorate %S 2 Offset 12
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-          %S = OpTypeStruct %v2float %uint %int
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %12 = OpConstantComposite %v2float %float_50 %float_60
-     %uint_5 = OpConstant %uint 5
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %S %12 %uint_5 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.wgsl
deleted file mode 100644
index 4b35253..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Struct.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : S = S(vec2<f32>(50.0, 60.0), 5u, 30);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.hlsl
deleted file mode 100644
index d64f138..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  const uint2 x_1 = uint2(10u, 20u);
-  const int2 x_2 = int2(30, 40);
-  const float2 x_3 = float2(50.0f, 60.0f);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.msl
deleted file mode 100644
index 381608f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint2 const x_1 = uint2(10u, 20u);
-  int2 const x_2 = int2(30, 40);
-  float2 const x_3 = float2(50.0f, 60.0f);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 16c2568..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 23
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %19 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 57e2e22..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Composite_Construct_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let x_2 : vec2<i32> = vec2<i32>(30, 40);
-  let x_3 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Array.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.msl
deleted file mode 100644
index 29e48c8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  uint el;
-};
-struct tint_array_wrapper {
-  tint_padded_array_element arr[5];
-};
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.wgsl
deleted file mode 100644
index 832c058..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_ArrayStride_Valid.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-type Arr = [[stride(8)]] array<u32, 5>;
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Bool.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_F32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_I32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Image_PretendVoid.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_MatrixOverF32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerFunction.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerImage.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerInput.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerOutput.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerPrivate.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerStorageBuffer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerToPointer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniform.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerUniformConstant.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_PointerWorkgroup.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.msl
deleted file mode 100644
index f139cc3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.wgsl
deleted file mode 100644
index 2fa51ee..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-type RTArr = array<u32>;
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.msl
deleted file mode 100644
index 35ec4e8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  uint el;
-};
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.wgsl
deleted file mode 100644
index 33ecaf5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_RuntimeArray_ArrayStride_Valid.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-type RTArr = [[stride(64)]] array<u32>;
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_SampledImage_PretendVoid.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Sampler_PretendVoid.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.msl
deleted file mode 100644
index 5658b79..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  uint field0;
-  float field1;
-};
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.wgsl
deleted file mode 100644
index 9e865ed..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructTwoMembers.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-struct S {
-  field0 : u32;
-  field1 : f32;
-};
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.msl
deleted file mode 100644
index f8e95d1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  uint field0;
-};
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.wgsl
deleted file mode 100644
index a7f1f27..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithBlockDecoration.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-struct S {
-  field0 : u32;
-};
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.msl
deleted file mode 100644
index 1d13c86..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float field0;
-  float2 field1;
-  float2x2 field2;
-};
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.wgsl
deleted file mode 100644
index 67729f3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_StructWithMemberDecorations.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  field0 : f32;
-  [[size(4)]]
-  padding : u32;
-  field1 : vec2<f32>;
-  field2 : mat2x2<f32>;
-};
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_U32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverF32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverI32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_VecOverU32.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ConvertType_Void.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.hlsl
deleted file mode 100644
index 0bc2907..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  uint x_10 = 0u;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.msl
deleted file mode 100644
index 63dd04c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint x_10 = 0u;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.spvasm
deleted file mode 100644
index bf3b294..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_10 "x_10"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-          %8 = OpConstantNull %uint
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-       %x_10 = OpVariable %_ptr_Function_uint Function %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.wgsl
deleted file mode 100644
index b4520cb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Pointer.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  var x_10 : u32;
-  let x_1 : ptr<function, u32> = &(x_10);
-  let x_2 : ptr<function, u32> = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index c46879a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const uint x_2 = 3u;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.msl
deleted file mode 100644
index ba9d691..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint const x_1 = 3u;
-  uint const x_2 = x_1;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index b547a71..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,24 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index bb59772..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_CopyObject_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : u32 = 3u;
-  let x_2 : u32 = x_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.hlsl
deleted file mode 100644
index f8a784a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-uint leaf() {
-  return 0u;
-}
-
-uint tint_symbol() {
-  const uint leaf_result = leaf();
-  return leaf_result;
-}
-
-void root() {
-  const uint branch_result = tint_symbol();
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.msl
deleted file mode 100644
index 305f1f9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-uint leaf() {
-  return 0u;
-}
-
-uint branch() {
-  uint const leaf_result = leaf();
-  return leaf_result;
-}
-
-void root() {
-  uint const branch_result = branch();
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.spvasm
deleted file mode 100644
index 0abd155..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %leaf "leaf"
-               OpName %branch "branch"
-               OpName %root "root"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %uint = OpTypeInt 32 0
-          %1 = OpTypeFunction %uint
-     %uint_0 = OpConstant %uint 0
-       %void = OpTypeVoid
-          %9 = OpTypeFunction %void
-       %leaf = OpFunction %uint None %1
-          %4 = OpLabel
-               OpReturnValue %uint_0
-               OpFunctionEnd
-     %branch = OpFunction %uint None %1
-          %7 = OpLabel
-          %8 = OpFunctionCall %uint %leaf
-               OpReturnValue %8
-               OpFunctionEnd
-       %root = OpFunction %void None %9
-         %12 = OpLabel
-         %13 = OpFunctionCall %uint %branch
-               OpReturn
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %9
-         %15 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %9
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.wgsl
deleted file mode 100644
index 2812801..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_CalleePrecedesCaller.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-fn leaf() -> u32 {
-  return 0u;
-}
-
-fn branch() -> u32 {
-  let leaf_result : u32 = leaf();
-  return leaf_result;
-}
-
-fn root() {
-  let branch_result : u32 = branch();
-  return;
-}
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.hlsl
deleted file mode 100644
index 1135368..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.spvasm
deleted file mode 100644
index ca944f0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.wgsl
deleted file mode 100644
index 471e2a6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Fragment.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.hlsl
deleted file mode 100644
index 7d04ef1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.msl
deleted file mode 100644
index 1de7f83..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.spvasm
deleted file mode 100644
index 0114d7e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.wgsl
deleted file mode 100644
index 05ff825..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.hlsl
deleted file mode 100644
index 5166e1b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void comp_main_1() {
-  return;
-}
-
-[numthreads(2, 4, 8)]
-void comp_main() {
-  comp_main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.msl
deleted file mode 100644
index 13e6b61..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void comp_main_1() {
-  return;
-}
-
-kernel void comp_main() {
-  comp_main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.spvasm
deleted file mode 100644
index 498c258..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %comp_main "comp_main"
-               OpExecutionMode %comp_main LocalSize 2 4 8
-               OpName %comp_main_1 "comp_main_1"
-               OpName %comp_main "comp_main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-%comp_main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-  %comp_main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %comp_main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.wgsl
deleted file mode 100644
index 605ba35..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_GLCompute_LocalSize_Only.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn comp_main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(2, 4, 8)]]
-fn comp_main() {
-  comp_main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.hlsl
deleted file mode 100644
index c73a243..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_0
-#define WGSL_SPEC_CONSTANT_0 3u
-#endif
-static const uint x_3 = WGSL_SPEC_CONSTANT_0;
-#ifndef WGSL_SPEC_CONSTANT_1
-#define WGSL_SPEC_CONSTANT_1 5u
-#endif
-static const uint x_4 = WGSL_SPEC_CONSTANT_1;
-#ifndef WGSL_SPEC_CONSTANT_2
-#define WGSL_SPEC_CONSTANT_2 7u
-#endif
-static const uint x_5 = WGSL_SPEC_CONSTANT_2;
-
-void comp_main_1() {
-  return;
-}
-
-[numthreads(3, 5, 7)]
-void comp_main() {
-  comp_main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.msl
deleted file mode 100644
index 818f216..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant uint x_3 [[function_constant(0)]];
-constant uint x_4 [[function_constant(1)]];
-constant uint x_5 [[function_constant(2)]];
-void comp_main_1() {
-  return;
-}
-
-kernel void comp_main() {
-  comp_main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.spvasm
deleted file mode 100644
index d0987b2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %comp_main "comp_main"
-               OpExecutionMode %comp_main LocalSize 3 5 7
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %comp_main_1 "comp_main_1"
-               OpName %comp_main "comp_main"
-               OpDecorate %x_3 SpecId 0
-               OpDecorate %x_4 SpecId 1
-               OpDecorate %x_5 SpecId 2
-       %uint = OpTypeInt 32 0
-        %x_3 = OpSpecConstant %uint 3
-        %x_4 = OpSpecConstant %uint 5
-        %x_5 = OpSpecConstant %uint 7
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%comp_main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-  %comp_main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %comp_main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.wgsl
deleted file mode 100644
index 32cb805..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_LocalSize_And_WGSBuiltin_SpecConstant.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-[[override(0)]] let x_3 : u32 = 3u;
-
-[[override(1)]] let x_4 : u32 = 5u;
-
-[[override(2)]] let x_5 : u32 = 7u;
-
-fn comp_main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(3, 5, 7)]]
-fn comp_main() {
-  comp_main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.hlsl
deleted file mode 100644
index 6d1d064..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-void first_shader_1() {
-  return;
-}
-
-void first_shader() {
-  first_shader_1();
-  return;
-}
-
-void second_shader() {
-  first_shader_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.msl
deleted file mode 100644
index c26e2c7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void first_shader_1() {
-  return;
-}
-
-fragment void first_shader() {
-  first_shader_1();
-  return;
-}
-
-fragment void second_shader() {
-  first_shader_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.spvasm
deleted file mode 100644
index 74b91bf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %first_shader "first_shader"
-               OpEntryPoint Fragment %second_shader "second_shader"
-               OpExecutionMode %first_shader OriginUpperLeft
-               OpExecutionMode %second_shader OriginUpperLeft
-               OpName %first_shader_1 "first_shader_1"
-               OpName %first_shader "first_shader"
-               OpName %second_shader "second_shader"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-%first_shader_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-%first_shader = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %first_shader_1
-               OpReturn
-               OpFunctionEnd
-%second_shader = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %first_shader_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.wgsl
deleted file mode 100644
index 20b0a60..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_MultipleEntryPoints.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn first_shader_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn first_shader() {
-  first_shader_1();
-}
-
-[[stage(fragment)]]
-fn second_shader() {
-  first_shader_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.hlsl
deleted file mode 100644
index 4edc58e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  return;
-}
-
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol {
-  float4 x_2_1 : SV_Position;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_2};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.msl
deleted file mode 100644
index 2589dab..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.msl
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_2_1;
-};
-struct tint_symbol_1 {
-  float4 x_2_1 [[position]];
-};
-
-void main_1() {
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_3) {
-  main_1();
-  main_out const tint_symbol_2 = {.x_2_1=*(tint_symbol_3)};
-  return tint_symbol_2;
-}
-
-vertex tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_4 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_4));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_2_1 = inner_result.x_2_1;
-  return wrapper_result;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.spvasm
deleted file mode 100644
index 7ca42ed..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 27
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_2_1_1 %vertex_point_size
-               OpName %x_2_1_1 "x_2_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_2 "x_2"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_2_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_2_1_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-    %x_2_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %15 = OpTypeFunction %main_out
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %15
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-         %20 = OpLoad %v4float %x_2
-         %21 = OpCompositeConstruct %main_out %20
-               OpReturnValue %21
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %23 = OpLabel
-         %24 = OpFunctionCall %main_out %main_inner
-         %25 = OpCompositeExtract %v4float %24 0
-               OpStore %x_2_1_1 %25
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.wgsl
deleted file mode 100644
index 7f989e8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_Vertex.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-fn main_1() {
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  x_2_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_2);
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.hlsl
deleted file mode 100644
index 4450285..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void comp_main_1() {
-  return;
-}
-
-[numthreads(3, 5, 7)]
-void comp_main() {
-  comp_main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.msl
deleted file mode 100644
index 13e6b61..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void comp_main_1() {
-  return;
-}
-
-kernel void comp_main() {
-  comp_main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.spvasm
deleted file mode 100644
index 16f8d91..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %comp_main "comp_main"
-               OpExecutionMode %comp_main LocalSize 3 5 7
-               OpName %comp_main_1 "comp_main_1"
-               OpName %comp_main "comp_main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-%comp_main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-  %comp_main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %comp_main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.wgsl
deleted file mode 100644
index 7fba773..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_Constant_Only.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn comp_main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(3, 5, 7)]]
-fn comp_main() {
-  comp_main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.hlsl
deleted file mode 100644
index c73a243..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.hlsl
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_0
-#define WGSL_SPEC_CONSTANT_0 3u
-#endif
-static const uint x_3 = WGSL_SPEC_CONSTANT_0;
-#ifndef WGSL_SPEC_CONSTANT_1
-#define WGSL_SPEC_CONSTANT_1 5u
-#endif
-static const uint x_4 = WGSL_SPEC_CONSTANT_1;
-#ifndef WGSL_SPEC_CONSTANT_2
-#define WGSL_SPEC_CONSTANT_2 7u
-#endif
-static const uint x_5 = WGSL_SPEC_CONSTANT_2;
-
-void comp_main_1() {
-  return;
-}
-
-[numthreads(3, 5, 7)]
-void comp_main() {
-  comp_main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.msl
deleted file mode 100644
index 818f216..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.msl
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant uint x_3 [[function_constant(0)]];
-constant uint x_4 [[function_constant(1)]];
-constant uint x_5 [[function_constant(2)]];
-void comp_main_1() {
-  return;
-}
-
-kernel void comp_main() {
-  comp_main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.spvasm
deleted file mode 100644
index d0987b2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %comp_main "comp_main"
-               OpExecutionMode %comp_main LocalSize 3 5 7
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %comp_main_1 "comp_main_1"
-               OpName %comp_main "comp_main"
-               OpDecorate %x_3 SpecId 0
-               OpDecorate %x_4 SpecId 1
-               OpDecorate %x_5 SpecId 2
-       %uint = OpTypeInt 32 0
-        %x_3 = OpSpecConstant %uint 3
-        %x_4 = OpSpecConstant %uint 5
-        %x_5 = OpSpecConstant %uint 7
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-%comp_main_1 = OpFunction %void None %5
-          %8 = OpLabel
-               OpReturn
-               OpFunctionEnd
-  %comp_main = OpFunction %void None %5
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %comp_main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.wgsl
deleted file mode 100644
index 32cb805..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSizeBuiltin_SpecConstant_Only.spvasm.expected.wgsl
+++ /dev/null
@@ -1,14 +0,0 @@
-[[override(0)]] let x_3 : u32 = 3u;
-
-[[override(1)]] let x_4 : u32 = 5u;
-
-[[override(2)]] let x_5 : u32 = 7u;
-
-fn comp_main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(3, 5, 7)]]
-fn comp_main() {
-  comp_main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.hlsl
deleted file mode 100644
index e998d27..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef WGSL_SPEC_CONSTANT_0
-#define WGSL_SPEC_CONSTANT_0 3u
-#endif
-static const uint x_3 = WGSL_SPEC_CONSTANT_0;
-#ifndef WGSL_SPEC_CONSTANT_2
-#define WGSL_SPEC_CONSTANT_2 7u
-#endif
-static const uint x_4 = WGSL_SPEC_CONSTANT_2;
-
-void comp_main_1() {
-  return;
-}
-
-[numthreads(3, 5, 7)]
-void comp_main() {
-  comp_main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.msl
deleted file mode 100644
index 020c4fe..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-constant uint x_3 [[function_constant(0)]];
-constant uint x_4 [[function_constant(2)]];
-void comp_main_1() {
-  return;
-}
-
-kernel void comp_main() {
-  comp_main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.spvasm
deleted file mode 100644
index 6a4d2f7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %comp_main "comp_main"
-               OpExecutionMode %comp_main LocalSize 3 5 7
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %comp_main_1 "comp_main_1"
-               OpName %comp_main "comp_main"
-               OpDecorate %x_3 SpecId 0
-               OpDecorate %x_4 SpecId 2
-       %uint = OpTypeInt 32 0
-        %x_3 = OpSpecConstant %uint 3
-        %x_4 = OpSpecConstant %uint 7
-       %void = OpTypeVoid
-          %4 = OpTypeFunction %void
-%comp_main_1 = OpFunction %void None %4
-          %7 = OpLabel
-               OpReturn
-               OpFunctionEnd
-  %comp_main = OpFunction %void None %4
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %comp_main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.wgsl
deleted file mode 100644
index 7ee6f41..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_Function_EntryPoint_WorkgroupSize_MixedConstantSpecConstant.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-[[override(0)]] let x_3 : u32 = 3u;
-
-[[override(2)]] let x_4 : u32 = 7u;
-
-fn comp_main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(3, 5, 7)]]
-fn comp_main() {
-  comp_main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.hlsl
deleted file mode 100644
index fa3e504..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void mixed_params(uint x_14, float x_15, int x_16) {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.msl
deleted file mode 100644
index 09cf906..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void mixed_params(uint x_14, float x_15, int x_16) {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.spvasm
deleted file mode 100644
index d8023c9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %mixed_params "mixed_params"
-               OpName %x_14 "x_14"
-               OpName %x_15 "x_15"
-               OpName %x_16 "x_16"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-        %int = OpTypeInt 32 1
-          %1 = OpTypeFunction %void %uint %float %int
-         %11 = OpTypeFunction %void
-%mixed_params = OpFunction %void None %1
-       %x_14 = OpFunctionParameter %uint
-       %x_15 = OpFunctionParameter %float
-       %x_16 = OpFunctionParameter %int
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %11
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %11
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.wgsl
deleted file mode 100644
index 59ec144..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_GenerateParamNames.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn mixed_params(x_14 : u32, x_15 : f32, x_16 : i32) {
-  return;
-}
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.hlsl
deleted file mode 100644
index 8bb064f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void mixed_params(uint a, float b, int c) {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.msl
deleted file mode 100644
index 8c45f10..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void mixed_params(uint a, float b, int c) {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.spvasm
deleted file mode 100644
index 335fe4a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %mixed_params "mixed_params"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-        %int = OpTypeInt 32 1
-          %1 = OpTypeFunction %void %uint %float %int
-         %11 = OpTypeFunction %void
-%mixed_params = OpFunction %void None %1
-          %a = OpFunctionParameter %uint
-          %b = OpFunctionParameter %float
-          %c = OpFunctionParameter %int
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %11
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %11
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.wgsl
deleted file mode 100644
index 92df1dc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_MixedParamTypes.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn mixed_params(a : u32, b : f32, c : i32) {
-  return;
-}
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.hlsl
deleted file mode 100644
index 41e0477..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-float ret_float() {
-  return 0.0f;
-}
-
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.msl
deleted file mode 100644
index e894cc3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-float ret_float() {
-  return 0.0f;
-}
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.spvasm
deleted file mode 100644
index c059279..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %ret_float "ret_float"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-      %float = OpTypeFloat 32
-          %1 = OpTypeFunction %float
-    %float_0 = OpConstant %float 0
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-  %ret_float = OpFunction %float None %1
-          %4 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %6
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %6
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.wgsl
deleted file mode 100644
index 4a62673..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_NonVoidResultType.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn ret_float() -> f32 {
-  return 0.0;
-}
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.hlsl
deleted file mode 100644
index b63a391..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void another_function() {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.msl
deleted file mode 100644
index 5d653d0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void another_function() {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.spvasm
deleted file mode 100644
index c3318d1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 10
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %another_function "another_function"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-%another_function = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %1
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %8 = OpLabel
-          %9 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.wgsl
deleted file mode 100644
index 844ebc1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitFunctions_VoidFunctionWithoutParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn another_function() {
-  return;
-}
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.hlsl
deleted file mode 100644
index 1656622..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-uint x_50(uint x_51, uint x_52) {
-  return (x_51 + x_52);
-}
-
-void x_100_1() {
-  const uint x_1 = x_50(42u, 84u);
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.msl
deleted file mode 100644
index 8f4f1c3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-uint x_50(uint x_51, uint x_52) {
-  return (x_51 + x_52);
-}
-
-void x_100_1() {
-  uint const x_1 = x_50(42u, 84u);
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.spvasm
deleted file mode 100644
index 031e2c0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_50 "x_50"
-               OpName %x_51 "x_51"
-               OpName %x_52 "x_52"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %uint = OpTypeInt 32 0
-          %1 = OpTypeFunction %uint %uint %uint
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %uint_42 = OpConstant %uint 42
-    %uint_84 = OpConstant %uint 84
-       %x_50 = OpFunction %uint None %1
-       %x_51 = OpFunctionParameter %uint
-       %x_52 = OpFunctionParameter %uint
-          %6 = OpLabel
-          %7 = OpIAdd %uint %x_51 %x_52
-               OpReturnValue %7
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %12 = OpFunctionCall %uint %x_50 %uint_42 %uint_84
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %8
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.wgsl
deleted file mode 100644
index 5673d62..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_CallWithParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn x_50(x_51 : u32, x_52 : u32) -> u32 {
-  return (x_51 + x_52);
-}
-
-fn x_100_1() {
-  let x_1 : u32 = x_50(42u, 84u);
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.hlsl
deleted file mode 100644
index 81982a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-uint x_50() {
-  return 42u;
-}
-
-void x_100_1() {
-  const uint x_1 = x_50();
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.msl
deleted file mode 100644
index 06d7dfc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-uint x_50() {
-  return 42u;
-}
-
-void x_100_1() {
-  uint const x_1 = x_50();
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.spvasm
deleted file mode 100644
index 9ab6a52..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_50 "x_50"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %uint = OpTypeInt 32 0
-          %1 = OpTypeFunction %uint
-    %uint_42 = OpConstant %uint 42
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-       %x_50 = OpFunction %uint None %1
-          %4 = OpLabel
-               OpReturnValue %uint_42
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %10 = OpFunctionCall %uint %x_50
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %6
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.wgsl
deleted file mode 100644
index bc149df..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn x_50() -> u32 {
-  return 42u;
-}
-
-fn x_100_1() {
-  let x_1 : u32 = x_50();
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.hlsl
deleted file mode 100644
index 23a62a5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.hlsl
+++ /dev/null
@@ -1,16 +0,0 @@
-uint x_50() {
-  return 42u;
-}
-
-void x_100_1() {
-  uint x_10 = 0u;
-  const uint x_1 = x_50();
-  x_10 = x_1;
-  x_10 = x_1;
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.msl
deleted file mode 100644
index 68968cb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-uint x_50() {
-  return 42u;
-}
-
-void x_100_1() {
-  uint x_10 = 0u;
-  uint const x_1 = x_50();
-  x_10 = x_1;
-  x_10 = x_1;
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.spvasm
deleted file mode 100644
index 5437902..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_50 "x_50"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_10 "x_10"
-               OpName %x_100 "x_100"
-       %uint = OpTypeInt 32 0
-          %1 = OpTypeFunction %uint
-    %uint_42 = OpConstant %uint 42
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %12 = OpConstantNull %uint
-       %x_50 = OpFunction %uint None %1
-          %4 = OpLabel
-               OpReturnValue %uint_42
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %6
-          %9 = OpLabel
-       %x_10 = OpVariable %_ptr_Function_uint Function %12
-         %13 = OpFunctionCall %uint %x_50
-               OpStore %x_10 %13
-               OpStore %x_10 %13
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %6
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.wgsl
deleted file mode 100644
index 6fc6cb0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_ScalarCallNoParamsUsedTwice.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-fn x_50() -> u32 {
-  return 42u;
-}
-
-fn x_100_1() {
-  var x_10 : u32;
-  let x_1 : u32 = x_50();
-  x_10 = x_1;
-  x_10 = x_1;
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.hlsl
deleted file mode 100644
index 6b5bd6a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,13 +0,0 @@
-void x_50() {
-  return;
-}
-
-void x_100_1() {
-  x_50();
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.msl
deleted file mode 100644
index a43084e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_50() {
-  return;
-}
-
-void x_100_1() {
-  x_50();
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.spvasm
deleted file mode 100644
index 340b927..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_50 "x_50"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %x_50 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_50
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.wgsl
deleted file mode 100644
index b01d658..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_EmitStatement_VoidCallNoParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn x_50() {
-  return;
-}
-
-fn x_100_1() {
-  x_50();
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.hlsl
deleted file mode 100644
index 71f2e86..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void x_200(uint x_14, float x_15, int x_16) {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.msl
deleted file mode 100644
index dc7c64f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_200(uint x_14, float x_15, int x_16) {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.spvasm
deleted file mode 100644
index 057e45b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %x_14 "x_14"
-               OpName %x_15 "x_15"
-               OpName %x_16 "x_16"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-        %int = OpTypeInt 32 1
-          %1 = OpTypeFunction %void %uint %float %int
-         %11 = OpTypeFunction %void
-      %x_200 = OpFunction %void None %1
-       %x_14 = OpFunctionParameter %uint
-       %x_15 = OpFunctionParameter %float
-       %x_16 = OpFunctionParameter %int
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %11
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %11
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.wgsl
deleted file mode 100644
index 336222e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_GenerateParamNames.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn x_200(x_14 : u32, x_15 : f32, x_16 : i32) {
-  return;
-}
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.hlsl
deleted file mode 100644
index b662c26..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void x_200(uint a, float b, int c) {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.msl
deleted file mode 100644
index 8c83ee2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_200(uint a, float b, int c) {
-  return;
-}
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.spvasm
deleted file mode 100644
index b6b979f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.spvasm
+++ /dev/null
@@ -1,37 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-        %int = OpTypeInt 32 1
-          %1 = OpTypeFunction %void %uint %float %int
-         %11 = OpTypeFunction %void
-      %x_200 = OpFunction %void None %1
-          %a = OpFunctionParameter %uint
-          %b = OpFunctionParameter %float
-          %c = OpFunctionParameter %int
-         %10 = OpLabel
-               OpReturn
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %11
-         %13 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %11
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.wgsl
deleted file mode 100644
index 49b5c4f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_MixedParamTypes.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn x_200(a : u32, b : f32, c : i32) {
-  return;
-}
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.hlsl
deleted file mode 100644
index 89368e3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-float x_200() {
-  return 0.0f;
-}
-
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.msl
deleted file mode 100644
index 7ad6db7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-float x_200() {
-  return 0.0f;
-}
-
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.spvasm
deleted file mode 100644
index 1ff2e3d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_200 "x_200"
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-      %float = OpTypeFloat 32
-          %1 = OpTypeFunction %float
-    %float_0 = OpConstant %float 0
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-      %x_200 = OpFunction %float None %1
-          %4 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-    %x_100_1 = OpFunction %void None %6
-          %9 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %6
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.wgsl
deleted file mode 100644
index 9eb339e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_NonVoidResultType.spvasm.expected.wgsl
+++ /dev/null
@@ -1,12 +0,0 @@
-fn x_200() -> f32 {
-  return 0.0;
-}
-
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.hlsl
deleted file mode 100644
index 21d4c2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void x_100_1() {
-  return;
-}
-
-void x_100() {
-  x_100_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.msl
deleted file mode 100644
index a84e722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void x_100_1() {
-  return;
-}
-
-fragment void x_100() {
-  x_100_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.spvasm
deleted file mode 100644
index 916c0a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %x_100 "x_100"
-               OpExecutionMode %x_100 OriginUpperLeft
-               OpName %x_100_1 "x_100_1"
-               OpName %x_100 "x_100"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-    %x_100_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-      %x_100 = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %x_100_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.wgsl
deleted file mode 100644
index 0f1f8b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Emit_VoidFunctionWithoutParams.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn x_100_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn x_100() {
-  x_100_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 5d58eb8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = (50.0f + 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 7ab5c8b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = (50.0f + 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 501b826..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFAdd %float %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index b8519a2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = (50.0 + 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index f481460..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2 x_1 = (float2(50.0f, 60.0f) + float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index f8fced1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = (float2(50.0f, 60.0f) + float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index cd83094..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFAdd %v2float %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 9c3ae79..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = (vec2<f32>(50.0, 60.0) + vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 4f6b1b0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = (50.0f / 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 3bb77d8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = (50.0f / 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index f7fb692..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFDiv %float %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 20ce1ed..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = (50.0 / 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 65ecc3b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2 x_1 = (float2(50.0f, 60.0f) / float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 57a35d1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = (float2(50.0f, 60.0f) / float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index f86e637..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFDiv %v2float %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index e4dcd9c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = (vec2<f32>(50.0, 60.0) / vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index b8f2184..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = (50.0f * 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 80a14d6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = (50.0f * 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 1a418e8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFMul %float %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 1d65720..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = (50.0 * 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 0329458..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2 x_1 = (float2(50.0f, 60.0f) * float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 0a72f02..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = (float2(50.0f, 60.0f) * float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index e061df7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFMul %v2float %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 83da3ae..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = (vec2<f32>(50.0, 60.0) * vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 0fdafb9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (50.0f == 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index ddbce69..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (50.0f == 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 183a0c4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFOrdEqual %bool %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index bd904ba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (50.0 == 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 1e8a0eb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (float2(50.0f, 60.0f) == float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 9a9ff78..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (float2(50.0f, 60.0f) == float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 51400be..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFOrdEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index e118682..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<f32>(50.0, 60.0) == vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 6b02277..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (50.0f >= 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 0b7e78b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (50.0f >= 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 2af4d48..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFOrdGreaterThanEqual %bool %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 6474c9b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (50.0 >= 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index cc6388a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (float2(50.0f, 60.0f) >= float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index c8ea69d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (float2(50.0f, 60.0f) >= float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index f9e0a1c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFOrdGreaterThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index f33c013..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<f32>(50.0, 60.0) >= vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index b395733..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (50.0f > 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index e2fec32..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (50.0f > 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 6add1d9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFOrdGreaterThan %bool %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 9329898..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (50.0 > 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 3d89201..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (float2(50.0f, 60.0f) > float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index d1312d1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (float2(50.0f, 60.0f) > float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index f43f20b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFOrdGreaterThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 2ea7f10..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<f32>(50.0, 60.0) > vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 439cdfb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (50.0f <= 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 2bf9e39..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (50.0f <= 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 3a0cf56..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFOrdLessThanEqual %bool %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index bbc2657..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (50.0 <= 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 5a8aae4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (float2(50.0f, 60.0f) <= float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index a0d076d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (float2(50.0f, 60.0f) <= float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 9f63d6a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFOrdLessThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index a3a429b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<f32>(50.0, 60.0) <= vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 888c361..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (50.0f < 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 451287d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (50.0f < 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 9fb887e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFOrdLessThan %bool %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 2f58a22..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (50.0 < 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 050e47f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (float2(50.0f, 60.0f) < float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 1b992f8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (float2(50.0f, 60.0f) < float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 6565ef2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFOrdLessThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 2e3e352..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<f32>(50.0, 60.0) < vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index d682505..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (50.0f != 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 60c4a54..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (50.0f != 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index fca4100..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFOrdNotEqual %bool %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 8d1c5e8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (50.0 != 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 22d3e82..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (float2(50.0f, 60.0f) != float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 65c26d3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (float2(50.0f, 60.0f) != float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 21f436e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFOrdNotEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 077fbf6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FOrdNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<f32>(50.0, 60.0) != vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 1c931e7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = (50.0f % 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index b4462f4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = fmod(50.0f, 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index a44c20a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFRem %float %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 271d304..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = (50.0 % 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index becf790..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2 x_1 = (float2(50.0f, 60.0f) % float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 8c46829..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = fmod(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 573b966..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFRem %v2float %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 651cb6f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FRem_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = (vec2<f32>(50.0, 60.0) % vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 1ea0507..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = (50.0f - 60.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index b8bf490..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = (50.0f - 60.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index bbaa3eb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpFSub %float %float_50 %float_60
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 35c05a3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = (50.0 - 60.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 01938b0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2 x_1 = (float2(50.0f, 60.0f) - float2(60.0f, 50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index aba88c4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = (float2(50.0f, 60.0f) - float2(60.0f, 50.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index fa02a9e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-         %10 = OpConstantComposite %v2float %float_60 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpFSub %v2float %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 7c15eff..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_FSub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = (vec2<f32>(50.0, 60.0) - vec2<f32>(60.0, 50.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 0e53fc1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = (50.0f * 57.295780182f);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.msl
deleted file mode 100644
index 8488e7a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = (50.0f * 57.295780182f);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index edc4086..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-%float_57_2957802 = OpConstant %float 57.2957802
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %35 = OpFMul %float %float_50 %float_57_2957802
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 13bb1db..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = (50.0 * 57.295780182);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 8db1479..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float3 x_1 = (float3(60.0f, 70.0f, 50.0f) * float3((57.295780182f).xxx));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.msl
deleted file mode 100644
index 0bc76fb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float3 const x_1 = (float3(60.0f, 70.0f, 50.0f) * float3(57.295780182f));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 8ed2398..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-%float_57_2957802 = OpConstant %float 57.2957802
-         %35 = OpConstantComposite %v3float %float_57_2957802 %float_57_2957802 %float_57_2957802
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %36 = OpFMul %v3float %31 %35
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 2b55baa..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Degrees_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec3<f32> = (vec3<f32>(60.0, 70.0, 50.0) * vec3<f32>(57.295780182));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 2c7cb1c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_99 = (f1 + f1);
-  const float x_1 = (((f2 * f3) < 0.0f) ? x_99 : -(x_99));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.msl
deleted file mode 100644
index 40b47a9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_99 = (f1 + f1);
-  float const x_1 = select(-(x_99), x_99, ((f2 * f3) < 0.0f));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 7ee5ac8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpFAdd %float %float_50 %float_50
-         %36 = OpFMul %float %float_60 %float_70
-         %38 = OpFOrdLessThan %bool %36 %float_0
-         %40 = OpFNegate %float %34
-         %35 = OpSelect %float %38 %34 %40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 7df3903..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_99 : f32 = (f1 + f1);
-  let x_1 : f32 = select(-(x_99), x_99, ((f2 * f3) < 0.0));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 33ab00f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_99 = (v2f1 + v2f1);
-  const float2 x_1 = faceforward(v2f1, v2f2, v2f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.msl
deleted file mode 100644
index a689cf8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_99 = (v2f1 + v2f1);
-  float2 const x_1 = faceforward(v2f1, v2f2, v2f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.spvasm
deleted file mode 100644
index a4bb534..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-         %36 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpFAdd %v2float %26 %26
-         %35 = OpExtInst %v2float %36 FaceForward %26 %27 %28
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 24e2556..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_FaceForward_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_99 : vec2<f32> = (v2f1 + v2f1);
-  let x_1 : vec2<f32> = faceForward(v2f1, v2f2, v2f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.hlsl
deleted file mode 100644
index a889e78..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = ldexp(f1, int(u1));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.msl
deleted file mode 100644
index 9484dda..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = ldexp(f1, int(u1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.spvasm
deleted file mode 100644
index 2eab6d4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %36 = OpBitcast %int %uint_10
-         %34 = OpExtInst %float %35 Ldexp %float_50 %36
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.wgsl
deleted file mode 100644
index 45e0784..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Scalar_Float_Uint.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = ldexp(f1, i32(u1));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.hlsl
deleted file mode 100644
index 8968843..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = ldexp(v2f1, int2(v2u1));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.msl
deleted file mode 100644
index 937bf3d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = ldexp(v2f1, int2(v2u1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.spvasm
deleted file mode 100644
index 69e8594..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %36 = OpBitcast %v2int %18
-         %34 = OpExtInst %v2float %35 Ldexp %26 %36
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.wgsl
deleted file mode 100644
index 100a2a9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Ldexp_Vector_Floatvec_Uintvec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = ldexp(v2f1, vec2<i32>(v2u1));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 5ac4b2d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = (50.0f * 0.017453292f);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.msl
deleted file mode 100644
index 42cf7f6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = (50.0f * 0.017453292f);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index ff03441..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-%float_0_0174532924 = OpConstant %float 0.0174532924
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %35 = OpFMul %float %float_50 %float_0_0174532924
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index babef61..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = (50.0 * 0.017453292);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 63ead05..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float3 x_1 = (float3(60.0f, 70.0f, 50.0f) * float3((0.017453292f).xxx));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.msl
deleted file mode 100644
index c78ed47..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float3 const x_1 = (float3(60.0f, 70.0f, 50.0f) * float3(0.017453292f));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 5b37b27..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,54 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-%float_0_0174532924 = OpConstant %float 0.0174532924
-         %35 = OpConstantComposite %v3float %float_0_0174532924 %float_0_0174532924 %float_0_0174532924
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %36 = OpFMul %v3float %31 %35
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 2b00f74..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Radians_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec3<f32> = (vec3<f32>(60.0, 70.0, 50.0) * vec3<f32>(0.017453292));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 4508a06..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_98 = (f1 + f1);
-  const float x_99 = (f2 + f2);
-  const float x_1 = (x_98 - (2.0f * (x_99 * (x_99 * x_98))));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.msl
deleted file mode 100644
index b6df305..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_98 = (f1 + f1);
-  float const x_99 = (f2 + f2);
-  float const x_1 = (x_98 - (2.0f * (x_99 * (x_99 * x_98))));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 75df323..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-    %float_2 = OpConstant %float 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpFAdd %float %float_50 %float_50
-         %35 = OpFAdd %float %float_60 %float_60
-         %37 = OpFMul %float %35 %34
-         %38 = OpFMul %float %35 %37
-         %39 = OpFMul %float %float_2 %38
-         %40 = OpFSub %float %34 %39
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index d49b8df..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_98 : f32 = (f1 + f1);
-  let x_99 : f32 = (f2 + f2);
-  let x_1 : f32 = (x_98 - (2.0 * (x_99 * (x_99 * x_98))));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 520cb20..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_98 = (v2f1 + v2f1);
-  const float2 x_99 = (v2f2 + v2f2);
-  const float2 x_1 = reflect(x_98, x_99);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.msl
deleted file mode 100644
index f2ea7f0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_98 = (v2f1 + v2f1);
-  float2 const x_99 = (v2f2 + v2f2);
-  float2 const x_1 = reflect(x_98, x_99);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.spvasm
deleted file mode 100644
index d245c34..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,55 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-         %37 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpFAdd %v2float %26 %26
-         %35 = OpFAdd %v2float %27 %27
-         %36 = OpExtInst %v2float %37 Reflect %34 %35
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.wgsl
deleted file mode 100644
index d7448e8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Reflect_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_98 : vec2<f32> = (v2f1 + v2f1);
-  let x_99 : vec2<f32> = (v2f2 + v2f2);
-  let x_1 : vec2<f32> = reflect(x_98, x_99);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index bd33258..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = refract(float2(f1, 0.0f), float2(f2, 0.0f), f3).x;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.msl
deleted file mode 100644
index 158f79e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = refract(float2(f1, 0.0f), float2(f2, 0.0f), f3).x;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 298630d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,57 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-    %float_0 = OpConstant %float 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %37 = OpCompositeConstruct %v2float %float_50 %float_0
-         %38 = OpCompositeConstruct %v2float %float_60 %float_0
-         %34 = OpExtInst %v2float %35 Refract %37 %38 %float_70
-         %39 = OpCompositeExtract %float %34 0
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 8cd2c79..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = refract(vec2<f32>(f1, 0.0), vec2<f32>(f2, 0.0), f3).x;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.hlsl
deleted file mode 100644
index edf4bcd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = refract(v2f1, v2f2, f3);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.msl
deleted file mode 100644
index 9df2059..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = refract(v2f1, v2f2, f3);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 710ed48..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Refract %26 %27 %float_70
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 152b4f5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_GlslStd450_Refract_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = refract(v2f1, v2f2, f3);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index a70664c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 + asint(10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 10a013c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>(as_type<int>((as_type<uint>(30) + as_type<uint>(as_type<int>(10u)))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 39bd486..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %int %uint_10
-         %11 = OpIAdd %int %int_30 %9
-          %5 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 089a191..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 + bitcast<i32>(10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 2bb3392..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 + asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index a43d563..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) + as_type<uint>(as_type<int>(10u))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 3bc7079..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpIAdd %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index b44f1d5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 + bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index f2e60bf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u + asuint(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index a467ebf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u + as_type<uint>(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 89a66db..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %10 = OpIAdd %uint %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index b0965f7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u + bitcast<u32>(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 76ee2db..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((20u + 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index a01c1f2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((20u + 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 6f4b334..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpIAdd %uint %uint_20 %uint_10
-          %5 = OpBitcast %int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 2737419..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((20u + 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index d04ca14..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) + asint(uint2(10u, 20u))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index ce30689..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>(as_type<int2>((as_type<uint2>(int2(30, 40)) + as_type<uint2>(as_type<int2>(uint2(10u, 20u))))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index c74351c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %16 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2int %16
-         %17 = OpIAdd %v2int %12 %13
-          %5 = OpBitcast %v2uint %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 8a2483b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) + bitcast<vec2<i32>>(vec2<u32>(10u, 20u))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 62873fd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((uint2(10u, 20u) + asuint(int2(40, 30))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 904d114..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((uint2(10u, 20u) + as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index d0b6e63..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %16 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2uint %16
-         %17 = OpIAdd %v2uint %12 %13
-          %5 = OpBitcast %v2int %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 915a5d2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((vec2<u32>(10u, 20u) + bitcast<vec2<u32>>(vec2<i32>(40, 30))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index ae95ad5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u + 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index dbe5779..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u + 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 14b7586..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpIAdd %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 80e3cd9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u + 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 634063c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 + 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 9bc4d08..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) + as_type<uint>(40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index fc75ca4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpIAdd %int %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index a51fe4e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 + 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 6a9156d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) + uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 849afc5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) + uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 9d95c08..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpIAdd %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 03de63f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) + vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 1dd9722..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) + int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 4a2d842..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((as_type<uint2>(int2(30, 40)) + as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index edd0729..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpIAdd %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 67bf68e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IAdd_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) + vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index c5abd6e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u == 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index ad4dbce..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u == 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index d5aec7d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpIEqual %bool %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 0eebca7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u == 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 4bb04e2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 == 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index f441a6c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 == 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 282f307..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpIEqual %bool %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 3c86e10..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 == 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 1682c95..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u == asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 7942900..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u == as_type<uint>(40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index b024031..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpIEqual %bool %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 6630862..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u == bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 6f61155..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (40 == asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 76aecf0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (40 == as_type<int>(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index c924384..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpIEqual %bool %int_40 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 24d16f1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (40 == bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 8cb8a41..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) == uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 33ef672..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) == uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 207a092..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpIEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 896c40d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) == vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index cb31165..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) == int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index f137971..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) == int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 794aee3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpIEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 9678081..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) == vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 13437e5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 * asint(10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index deba5f1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>(as_type<int>((as_type<uint>(30) * as_type<uint>(as_type<int>(10u)))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index c03046e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %int %uint_10
-         %11 = OpIMul %int %int_30 %9
-          %5 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index fdae772..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 * bitcast<i32>(10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index dab2168..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 * asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index d47c480..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) * as_type<uint>(as_type<int>(10u))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 9805f02..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpIMul %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index ed7343b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 * bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 19b4984..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u * asuint(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 7bb6fb5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u * as_type<uint>(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index cf4bf78..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %10 = OpIMul %uint %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index f055e20..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u * bitcast<u32>(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 685e5ec..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((20u * 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 0c63299..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((20u * 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index a07c1b8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpIMul %uint %uint_20 %uint_10
-          %5 = OpBitcast %int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 70f4e23..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((20u * 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index c2db694..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) * asint(uint2(10u, 20u))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 19aa3da..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>(as_type<int2>((as_type<uint2>(int2(30, 40)) * as_type<uint2>(as_type<int2>(uint2(10u, 20u))))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 446dd1b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %16 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2int %16
-         %17 = OpIMul %v2int %12 %13
-          %5 = OpBitcast %v2uint %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 163b209..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) * bitcast<vec2<i32>>(vec2<u32>(10u, 20u))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 11199ec..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((uint2(10u, 20u) * asuint(int2(40, 30))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index d8943b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((uint2(10u, 20u) * as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index f3b4b79..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %16 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2uint %16
-         %17 = OpIMul %v2uint %12 %13
-          %5 = OpBitcast %v2int %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 3ff7bf1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((vec2<u32>(10u, 20u) * bitcast<vec2<u32>>(vec2<i32>(40, 30))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 32fd039..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u * 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index ff512b9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u * 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 4cbc23f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpIMul %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index db992a1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u * 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 8b7ddea..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 * 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 8c5646e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) * as_type<uint>(40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 054491b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpIMul %int %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 3605549..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 * 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index e903d31..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) * uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 031e2c7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) * uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index b149d90..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpIMul %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 302f1bd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) * vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index a902abb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) * int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index a644e96..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((as_type<uint2>(int2(30, 40)) * as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 1f8967f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpIMul %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 463a31d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_IMul_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) * vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 9a1ea1d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u != 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 27fa617..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u != 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 7080284..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpINotEqual %bool %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 289af88..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u != 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index d5e6e89..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 != 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 6c5304d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 != 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 136ca1e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpINotEqual %bool %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 5f798f4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 != 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index cefd02d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u != asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index aaebd00..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u != as_type<uint>(40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 0ac55ae..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpINotEqual %bool %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index b48ae51..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u != bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 95bd50f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (40 != asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index e2bd1fd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (40 != as_type<int>(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index e77eeb1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpINotEqual %bool %int_40 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 0426f71..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (40 != bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index ea71e08..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) != uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 4a0b714..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) != uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index f5542c5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpINotEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 71bef4a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) != vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index c14b6a3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) != int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 5d3fdd9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) != int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 32b1360..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpINotEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 507065d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_INotEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) != vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 9f28ae3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 - asint(10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 11ac7ce..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>(as_type<int>((as_type<uint>(30) - as_type<uint>(as_type<int>(10u)))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 5b1b6d6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %int %uint_10
-         %11 = OpISub %int %int_30 %9
-          %5 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 114a500..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 - bitcast<i32>(10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 9f0aea8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 - asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 4bdc2cd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) - as_type<uint>(as_type<int>(10u))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index a1d2f9c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpISub %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 2ba4104..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 - bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 1fb98d0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u - asuint(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 4783009..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u - as_type<uint>(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index e696da6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %10 = OpISub %uint %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index a5696bd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u - bitcast<u32>(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index d52f28d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((20u - 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index d8d6962..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((20u - 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 4376189..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpISub %uint %uint_20 %uint_10
-          %5 = OpBitcast %int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 5f47fc6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((20u - 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index dc9ae97..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) - asint(uint2(10u, 20u))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index e4f851c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>(as_type<int2>((as_type<uint2>(int2(30, 40)) - as_type<uint2>(as_type<int2>(uint2(10u, 20u))))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index b28b112..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %16 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2int %16
-         %17 = OpISub %v2int %12 %13
-          %5 = OpBitcast %v2uint %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 4552c14..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) - bitcast<vec2<i32>>(vec2<u32>(10u, 20u))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 055f410..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((uint2(10u, 20u) - asuint(int2(40, 30))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index e4dd9d0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((uint2(10u, 20u) - as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 0bfbe9b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %16 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2uint %16
-         %17 = OpISub %v2uint %12 %13
-          %5 = OpBitcast %v2int %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 2aad01e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_MixedSignedness_SpvBinaryArithGeneralTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((vec2<u32>(10u, 20u) - bitcast<vec2<u32>>(vec2<i32>(40, 30))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index cdb420b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u - 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 1232f61..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u - 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index f625348..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpISub %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index d9230b5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u - 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 80fc1e3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 - 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 70fc7a6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) - as_type<uint>(40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 63364b9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpISub %int %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index d4c522a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 - 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 5ca61a8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) - uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index dba660b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) - uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index f9c645d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpISub %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 2078358..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) - vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 2e9894b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) - int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 57ee2da..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((as_type<uint2>(int2(30, 40)) - as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index bad9c62..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpISub %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 0194db8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ISub_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) - vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.hlsl
deleted file mode 100644
index 7d04ef1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.msl
deleted file mode 100644
index 1de7f83..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.spvasm
deleted file mode 100644
index 0114d7e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.wgsl
deleted file mode 100644
index 05ff825..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_GLSL450MemoryModel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.hlsl
deleted file mode 100644
index 7d04ef1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.msl
deleted file mode 100644
index 1de7f83..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.spvasm
deleted file mode 100644
index 0114d7e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.wgsl
deleted file mode 100644
index 05ff825..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_SimpleMemoryModel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.hlsl
deleted file mode 100644
index 7d04ef1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.msl
deleted file mode 100644
index 1de7f83..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.spvasm
deleted file mode 100644
index 0114d7e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.wgsl
deleted file mode 100644
index 05ff825..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_GenericVulkanShader_VulkanMemoryModel.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.hlsl
deleted file mode 100644
index 7d04ef1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.msl
deleted file mode 100644
index 1de7f83..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.spvasm
deleted file mode 100644
index 0114d7e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.wgsl
deleted file mode 100644
index 05ff825..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_InvalidId.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.hlsl
deleted file mode 100644
index 7d04ef1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.msl
deleted file mode 100644
index 1de7f83..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.spvasm
deleted file mode 100644
index 0114d7e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.wgsl
deleted file mode 100644
index 05ff825..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_NoOpLine.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.hlsl
deleted file mode 100644
index 7d04ef1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.msl
deleted file mode 100644
index 1de7f83..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.spvasm
deleted file mode 100644
index 0114d7e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.wgsl
deleted file mode 100644
index 05ff825..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Impl_Source_WithOpLine_WithOpNoLine.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 6ff4e0d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (true & false);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 3a9a17c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (true & false);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 7e7b5fa..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpLogicalAnd %bool %true %false
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 31d0cda..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (true & false);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index d4c3151..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (bool2(true, false) & bool2(false, true));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index a742917..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (bool2(true, false) & bool2(false, true));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index d0f1211..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-          %9 = OpConstantComposite %v2bool %true %false
-         %10 = OpConstantComposite %v2bool %false %true
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpLogicalAnd %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index e433e28..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalAnd_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<bool>(true, false) & vec2<bool>(false, true));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 8cdd1c1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (true == false);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 6cbe165..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (true == false);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 47fb878..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpLogicalEqual %bool %true %false
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index d910851..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (true == false);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index f5ac81a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (bool2(true, false) == bool2(false, true));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 83ad92b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (bool2(true, false) == bool2(false, true));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index ad3fd35..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-          %9 = OpConstantComposite %v2bool %true %false
-         %10 = OpConstantComposite %v2bool %false %true
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpLogicalEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index ab3500c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<bool>(true, false) == vec2<bool>(false, true));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 44272bb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (true != false);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index ddeb2de..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (true != false);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index f322a1d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpLogicalNotEqual %bool %true %false
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 9391abd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (true != false);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 7a639b2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (bool2(true, false) != bool2(false, true));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index e0133cf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (bool2(true, false) != bool2(false, true));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 78ae80c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-          %9 = OpConstantComposite %v2bool %true %false
-         %10 = OpConstantComposite %v2bool %false %true
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpLogicalNotEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 6919af3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalNotEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<bool>(true, false) != vec2<bool>(false, true));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 839b7e6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (true | false);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 7fe4c06..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (true | false);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index fa39d05..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpLogicalOr %bool %true %false
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 08ce435..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (true | false);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index a46d24d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (bool2(true, false) | bool2(false, true));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 3bb31d1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (bool2(true, false) | bool2(false, true));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 8df242a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-          %9 = OpConstantComposite %v2bool %true %false
-         %10 = OpConstantComposite %v2bool %false %true
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpLogicalOr %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 3a972a8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_LogicalOr_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<bool>(true, false) | vec2<bool>(false, true));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index e04c522..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float x_1 = 1.0f;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.msl
deleted file mode 100644
index 08de93c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float const x_1 = 1.0f;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 2f01ae1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,52 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 0495eff..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : f32 = 1.0;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.hlsl
deleted file mode 100644
index b66ee0b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float2 x_1 = normalize(v2f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.msl
deleted file mode 100644
index 1b791c9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float2 const x_1 = normalize(v2f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.spvasm
deleted file mode 100644
index ac4aa8d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v2float %35 Normalize %26
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.wgsl
deleted file mode 100644
index 2ab7993..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec2<f32> = normalize(v2f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.hlsl
deleted file mode 100644
index 7da5a59..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float3 x_1 = normalize(v3f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.msl
deleted file mode 100644
index a75733d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float3 const x_1 = normalize(v3f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.spvasm
deleted file mode 100644
index 7381c81..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v3float %35 Normalize %30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.wgsl
deleted file mode 100644
index 8a15992..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec3<f32> = normalize(v3f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.hlsl
deleted file mode 100644
index b613feb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const float4 x_1 = normalize(v4f1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.msl
deleted file mode 100644
index 818b1f8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  float4 const x_1 = normalize(v4f1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.spvasm
deleted file mode 100644
index 6c7867a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %34 = OpExtInst %v4float %35 Normalize %33
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.wgsl
deleted file mode 100644
index 82185ba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_Normalize_Vector4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : vec4<f32> = normalize(v4f1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.hlsl
deleted file mode 100644
index 88f882a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = asuint(abs(asint(u1)));
-  const uint2 x_2 = asuint(abs(asint(v2u1)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.msl
deleted file mode 100644
index 5f2b521..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = as_type<uint>(abs(as_type<int>(u1)));
-  uint2 const x_2 = as_type<uint2>(abs(as_type<int2>(v2u1)));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.spvasm
deleted file mode 100644
index 470c7df..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.spvasm
+++ /dev/null
@@ -1,58 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-         %36 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %37 = OpBitcast %int %uint_10
-         %35 = OpExtInst %int %36 SAbs %37
-         %34 = OpBitcast %uint %35
-         %40 = OpBitcast %v2int %18
-         %39 = OpExtInst %v2int %36 SAbs %40
-         %38 = OpBitcast %v2uint %39
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.wgsl
deleted file mode 100644
index 491fb35..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SAbs.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = bitcast<u32>(abs(bitcast<i32>(u1)));
-  let x_2 : vec2<u32> = bitcast<vec2<u32>>(abs(bitcast<vec2<i32>>(v2u1)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.hlsl
deleted file mode 100644
index 6f41bb3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = asuint(clamp(asint(u1), i2, asint(u3)));
-  const uint2 x_2 = asuint(clamp(asint(v2u1), v2i2, asint(v2u3)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.msl
deleted file mode 100644
index e4b7ad4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = as_type<uint>(clamp(as_type<int>(u1), i2, as_type<int>(u3)));
-  uint2 const x_2 = as_type<uint2>(clamp(as_type<int2>(v2u1), v2i2, as_type<int2>(v2u3)));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.spvasm
deleted file mode 100644
index b3fde4f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.spvasm
+++ /dev/null
@@ -1,60 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-         %36 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %37 = OpBitcast %int %uint_10
-         %38 = OpBitcast %int %uint_20
-         %35 = OpExtInst %int %36 SClamp %37 %int_35 %38
-         %34 = OpBitcast %uint %35
-         %41 = OpBitcast %v2int %18
-         %42 = OpBitcast %v2int %20
-         %40 = OpExtInst %v2int %36 SClamp %41 %23 %42
-         %39 = OpBitcast %v2uint %40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.wgsl
deleted file mode 100644
index e09d7df..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SClamp.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = bitcast<u32>(clamp(bitcast<i32>(u1), i2, bitcast<i32>(u3)));
-  let x_2 : vec2<u32> = bitcast<vec2<u32>>(clamp(bitcast<vec2<i32>>(v2u1), v2i2, bitcast<vec2<i32>>(v2u3)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.hlsl
deleted file mode 100644
index 93cc10b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = asuint(max(asint(u1), asint(u2)));
-  const uint2 x_2 = asuint(max(asint(v2u1), asint(v2u2)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.msl
deleted file mode 100644
index d57ffef..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = as_type<uint>(max(as_type<int>(u1), as_type<int>(u2)));
-  uint2 const x_2 = as_type<uint2>(max(as_type<int2>(v2u1), as_type<int2>(v2u2)));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.spvasm
deleted file mode 100644
index 0d65721..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.spvasm
+++ /dev/null
@@ -1,60 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-         %36 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %37 = OpBitcast %int %uint_10
-         %38 = OpBitcast %int %uint_15
-         %35 = OpExtInst %int %36 SMax %37 %38
-         %34 = OpBitcast %uint %35
-         %41 = OpBitcast %v2int %18
-         %42 = OpBitcast %v2int %19
-         %40 = OpExtInst %v2int %36 SMax %41 %42
-         %39 = OpBitcast %v2uint %40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.wgsl
deleted file mode 100644
index 645cbeb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMax.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = bitcast<u32>(max(bitcast<i32>(u1), bitcast<i32>(u2)));
-  let x_2 : vec2<u32> = bitcast<vec2<u32>>(max(bitcast<vec2<i32>>(v2u1), bitcast<vec2<i32>>(v2u2)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.hlsl
deleted file mode 100644
index bfd2e77..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const uint x_1 = asuint(min(asint(u1), asint(u2)));
-  const uint2 x_2 = asuint(min(asint(v2u1), asint(v2u2)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.msl
deleted file mode 100644
index 788552e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  uint const x_1 = as_type<uint>(min(as_type<int>(u1), as_type<int>(u2)));
-  uint2 const x_2 = as_type<uint2>(min(as_type<int2>(v2u1), as_type<int2>(v2u2)));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.spvasm
deleted file mode 100644
index b74dc36..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.spvasm
+++ /dev/null
@@ -1,60 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-         %36 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %37 = OpBitcast %int %uint_10
-         %38 = OpBitcast %int %uint_15
-         %35 = OpExtInst %int %36 SMin %37 %38
-         %34 = OpBitcast %uint %35
-         %41 = OpBitcast %v2int %18
-         %42 = OpBitcast %v2int %19
-         %40 = OpExtInst %v2int %36 SMin %41 %42
-         %39 = OpBitcast %v2uint %40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.wgsl
deleted file mode 100644
index 2ef32a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_SMin.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : u32 = bitcast<u32>(min(bitcast<i32>(u1), bitcast<i32>(u2)));
-  let x_2 : vec2<u32> = bitcast<vec2<u32>>(min(bitcast<vec2<i32>>(v2u1), bitcast<vec2<i32>>(v2u2)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.hlsl
deleted file mode 100644
index 3e0abef..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int x_1 = asint(clamp(asuint(i1), u2, asuint(i3)));
-  const int2 x_2 = asint(clamp(asuint(v2i1), v2u2, asuint(v2i3)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.msl
deleted file mode 100644
index f96a5c4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int const x_1 = as_type<int>(clamp(as_type<uint>(i1), u2, as_type<uint>(i3)));
-  int2 const x_2 = as_type<int2>(clamp(as_type<uint2>(v2i1), v2u2, as_type<uint2>(v2i3)));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.spvasm
deleted file mode 100644
index 523237d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.spvasm
+++ /dev/null
@@ -1,60 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-         %36 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %37 = OpBitcast %uint %int_30
-         %38 = OpBitcast %uint %int_40
-         %35 = OpExtInst %uint %36 UClamp %37 %uint_15 %38
-         %34 = OpBitcast %int %35
-         %41 = OpBitcast %v2uint %22
-         %42 = OpBitcast %v2uint %24
-         %40 = OpExtInst %v2uint %36 UClamp %41 %19 %42
-         %39 = OpBitcast %v2int %40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.wgsl
deleted file mode 100644
index a4a8e84..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UClamp.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : i32 = bitcast<i32>(clamp(bitcast<u32>(i1), u2, bitcast<u32>(i3)));
-  let x_2 : vec2<i32> = bitcast<vec2<i32>>(clamp(bitcast<vec2<u32>>(v2i1), v2u2, bitcast<vec2<u32>>(v2i3)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.hlsl
deleted file mode 100644
index 53c460a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int x_1 = asint(max(asuint(i1), asuint(i2)));
-  const int2 x_2 = asint(max(asuint(v2i1), asuint(v2i2)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.msl
deleted file mode 100644
index 63af415..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int const x_1 = as_type<int>(max(as_type<uint>(i1), as_type<uint>(i2)));
-  int2 const x_2 = as_type<int2>(max(as_type<uint2>(v2i1), as_type<uint2>(v2i2)));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.spvasm
deleted file mode 100644
index 8188c0f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.spvasm
+++ /dev/null
@@ -1,60 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-         %36 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %37 = OpBitcast %uint %int_30
-         %38 = OpBitcast %uint %int_35
-         %35 = OpExtInst %uint %36 UMax %37 %38
-         %34 = OpBitcast %int %35
-         %41 = OpBitcast %v2uint %22
-         %42 = OpBitcast %v2uint %23
-         %40 = OpExtInst %v2uint %36 UMax %41 %42
-         %39 = OpBitcast %v2int %40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.wgsl
deleted file mode 100644
index dfc2521..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMax.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : i32 = bitcast<i32>(max(bitcast<u32>(i1), bitcast<u32>(i2)));
-  let x_2 : vec2<i32> = bitcast<vec2<i32>>(max(bitcast<vec2<u32>>(v2i1), bitcast<vec2<u32>>(v2i2)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.hlsl
deleted file mode 100644
index f01d594..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const uint u2 = 15u;
-  const uint u3 = 20u;
-  const int i1 = 30;
-  const int i2 = 35;
-  const int i3 = 40;
-  const float f1 = 50.0f;
-  const float f2 = 60.0f;
-  const float f3 = 70.0f;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const uint2 v2u2 = uint2(20u, 10u);
-  const uint2 v2u3 = uint2(15u, 15u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 v2i2 = int2(40, 30);
-  const int2 v2i3 = int2(35, 35);
-  const float2 v2f1 = float2(50.0f, 60.0f);
-  const float2 v2f2 = float2(60.0f, 50.0f);
-  const float2 v2f3 = float2(70.0f, 70.0f);
-  const float3 v3f1 = float3(50.0f, 60.0f, 70.0f);
-  const float3 v3f2 = float3(60.0f, 70.0f, 50.0f);
-  const float4 v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  const float4 v4f2 = v4f1;
-  const int x_1 = asint(min(asuint(i1), asuint(i2)));
-  const int2 x_2 = asint(min(asuint(v2i1), asuint(v2i2)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.msl
deleted file mode 100644
index f0705ea..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  uint const u2 = 15u;
-  uint const u3 = 20u;
-  int const i1 = 30;
-  int const i2 = 35;
-  int const i3 = 40;
-  float const f1 = 50.0f;
-  float const f2 = 60.0f;
-  float const f3 = 70.0f;
-  uint2 const v2u1 = uint2(10u, 20u);
-  uint2 const v2u2 = uint2(20u, 10u);
-  uint2 const v2u3 = uint2(15u, 15u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const v2i2 = int2(40, 30);
-  int2 const v2i3 = int2(35, 35);
-  float2 const v2f1 = float2(50.0f, 60.0f);
-  float2 const v2f2 = float2(60.0f, 50.0f);
-  float2 const v2f3 = float2(70.0f, 70.0f);
-  float3 const v3f1 = float3(50.0f, 60.0f, 70.0f);
-  float3 const v3f2 = float3(60.0f, 70.0f, 50.0f);
-  float4 const v4f1 = float4(50.0f, 50.0f, 50.0f, 50.0f);
-  float4 const v4f2 = v4f1;
-  int const x_1 = as_type<int>(min(as_type<uint>(i1), as_type<uint>(i2)));
-  int2 const x_2 = as_type<int2>(min(as_type<uint2>(v2i1), as_type<uint2>(v2i2)));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.spvasm
deleted file mode 100644
index 98a38f6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.spvasm
+++ /dev/null
@@ -1,60 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-         %36 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_15 = OpConstant %uint 15
-    %uint_20 = OpConstant %uint 20
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_35 = OpConstant %int 35
-     %int_40 = OpConstant %int 40
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-     %v2uint = OpTypeVector %uint 2
-         %18 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %19 = OpConstantComposite %v2uint %uint_20 %uint_10
-         %20 = OpConstantComposite %v2uint %uint_15 %uint_15
-      %v2int = OpTypeVector %int 2
-         %22 = OpConstantComposite %v2int %int_30 %int_40
-         %23 = OpConstantComposite %v2int %int_40 %int_30
-         %24 = OpConstantComposite %v2int %int_35 %int_35
-    %v2float = OpTypeVector %float 2
-         %26 = OpConstantComposite %v2float %float_50 %float_60
-         %27 = OpConstantComposite %v2float %float_60 %float_50
-         %28 = OpConstantComposite %v2float %float_70 %float_70
-    %v3float = OpTypeVector %float 3
-         %30 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %31 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-    %v4float = OpTypeVector %float 4
-         %33 = OpConstantComposite %v4float %float_50 %float_50 %float_50 %float_50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %37 = OpBitcast %uint %int_30
-         %38 = OpBitcast %uint %int_35
-         %35 = OpExtInst %uint %36 UMin %37 %38
-         %34 = OpBitcast %int %35
-         %41 = OpBitcast %v2uint %22
-         %42 = OpBitcast %v2uint %23
-         %40 = OpExtInst %v2uint %36 UMin %41 %42
-         %39 = OpBitcast %v2int %40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.wgsl
deleted file mode 100644
index 2f6410a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_RectifyOperandsAndResult_UMin.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let u2 : u32 = 15u;
-  let u3 : u32 = 20u;
-  let i1 : i32 = 30;
-  let i2 : i32 = 35;
-  let i3 : i32 = 40;
-  let f1 : f32 = 50.0;
-  let f2 : f32 = 60.0;
-  let f3 : f32 = 70.0;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2u2 : vec2<u32> = vec2<u32>(20u, 10u);
-  let v2u3 : vec2<u32> = vec2<u32>(15u, 15u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let v2i2 : vec2<i32> = vec2<i32>(40, 30);
-  let v2i3 : vec2<i32> = vec2<i32>(35, 35);
-  let v2f1 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let v2f2 : vec2<f32> = vec2<f32>(60.0, 50.0);
-  let v2f3 : vec2<f32> = vec2<f32>(70.0, 70.0);
-  let v3f1 : vec3<f32> = vec3<f32>(50.0, 60.0, 70.0);
-  let v3f2 : vec3<f32> = vec3<f32>(60.0, 70.0, 50.0);
-  let v4f1 : vec4<f32> = vec4<f32>(50.0, 50.0, 50.0, 50.0);
-  let v4f2 : vec4<f32> = v4f1;
-  let x_1 : i32 = bitcast<i32>(min(bitcast<u32>(i1), bitcast<u32>(i2)));
-  let x_2 : vec2<i32> = bitcast<vec2<i32>>(min(bitcast<vec2<u32>>(v2i1), bitcast<vec2<u32>>(v2i2)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index defa908..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 / asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index e5ac158..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 / as_type<int>(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index b13347e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpSDiv %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 58c4800..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 / bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 63478a3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (asint(10u) / 30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index ec582b5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (as_type<int>(10u) / 30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 40e86f4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %int %uint_10
-         %10 = OpSDiv %int %5 %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index b516923..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (bitcast<i32>(10u) / 30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index d2f1861..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (asint(uint2(10u, 20u)) / int2(30, 40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index a4cca6a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (as_type<int2>(uint2(10u, 20u)) / int2(30, 40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 0cb0fff..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %15 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2int %12
-         %16 = OpSDiv %v2int %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index a83a6d2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (bitcast<vec2<i32>>(vec2<u32>(10u, 20u)) / vec2<i32>(30, 40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 7979a9b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) / asint(uint2(10u, 20u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 451cfad..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(30, 40) / as_type<int2>(uint2(10u, 20u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 412e08b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %15 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2int %15
-         %16 = OpSDiv %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 55f7129..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) / bitcast<vec2<i32>>(vec2<u32>(10u, 20u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 5179e09..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 / 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index daabff4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 / 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 9c9ba2b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpSDiv %int %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index b3f732f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 / 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 2fc0a32..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) / int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 8aa7b14..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(30, 40) / int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 42b241b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpSDiv %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 04fc1d2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) / vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 8b818ec..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 >= 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index b48d94a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 >= 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 4c3dbf8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpSGreaterThanEqual %bool %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index d9c02fd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 >= 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index ada89cf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (asint(10u) >= 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index d35ed70..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (as_type<int>(10u) >= 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 4ead06b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %int %uint_10
-         %10 = OpSGreaterThanEqual %bool %5 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 51fa4f9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (bitcast<i32>(10u) >= 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 9d6c8de..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 >= asint(20u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index b598067..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 >= as_type<int>(20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index bcf5de9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_20
-         %10 = OpSGreaterThanEqual %bool %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 804ed03..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 >= bitcast<i32>(20u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index e32aea7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) >= int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index ec751ec..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) >= int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 9a475a3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpSGreaterThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index dafbd49..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) >= vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 7666b7d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (asint(uint2(10u, 20u)) >= int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 932cbe8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (as_type<int2>(uint2(10u, 20u)) >= int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index fd8bab8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2int %12
-         %16 = OpSGreaterThanEqual %v2bool %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 0352cfc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (bitcast<vec2<i32>>(vec2<u32>(10u, 20u)) >= vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index f74a2cc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) >= asint(uint2(20u, 10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 17b0609..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) >= as_type<int2>(uint2(20u, 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 577be19..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2int %15
-         %16 = OpSGreaterThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 02da6b0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) >= bitcast<vec2<i32>>(vec2<u32>(20u, 10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 5605d58..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 > 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 162e06b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 > 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index bf38d33..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpSGreaterThan %bool %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 895ed77..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 > 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index e6c107b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (asint(10u) > 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index d888be9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (as_type<int>(10u) > 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 1e38c38..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %int %uint_10
-         %10 = OpSGreaterThan %bool %5 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index a7094f2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (bitcast<i32>(10u) > 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index cb82baf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 > asint(20u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index be5e68b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 > as_type<int>(20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index b14b893..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_20
-         %10 = OpSGreaterThan %bool %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 105fab9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 > bitcast<i32>(20u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 87fae0e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) > int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index cf4ad4a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) > int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 5dfcaf9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpSGreaterThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 9f59d59..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) > vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 8650924..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (asint(uint2(10u, 20u)) > int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index f30a5d5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (as_type<int2>(uint2(10u, 20u)) > int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 7a2e86e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2int %12
-         %16 = OpSGreaterThan %v2bool %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 2680fb4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (bitcast<vec2<i32>>(vec2<u32>(10u, 20u)) > vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 6fedeac..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) > asint(uint2(20u, 10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 532d559..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) > as_type<int2>(uint2(20u, 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index db2ed4f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2int %15
-         %16 = OpSGreaterThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 2ad66c5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) > bitcast<vec2<i32>>(vec2<u32>(20u, 10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index bcfbc55..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 <= 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index b5e0e61..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 <= 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 182d1ed..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpSLessThanEqual %bool %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index e583996..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 <= 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 3f403d7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (asint(10u) <= 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index a845fcb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (as_type<int>(10u) <= 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 4f210d2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %int %uint_10
-         %10 = OpSLessThanEqual %bool %5 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index e6eea97..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (bitcast<i32>(10u) <= 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 8494aef..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 <= asint(20u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 76d5435..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 <= as_type<int>(20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index bda3489..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_20
-         %10 = OpSLessThanEqual %bool %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 6aa2915..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 <= bitcast<i32>(20u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 5b5e70c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) <= int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 1966829..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) <= int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 507bff3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpSLessThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index fbd80c7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) <= vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 6d9da8a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (asint(uint2(10u, 20u)) <= int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 1b10334..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (as_type<int2>(uint2(10u, 20u)) <= int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 4138a0f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2int %12
-         %16 = OpSLessThanEqual %v2bool %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 5593a3b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (bitcast<vec2<i32>>(vec2<u32>(10u, 20u)) <= vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index ea43b6b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) <= asint(uint2(20u, 10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 0af2432..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) <= as_type<int2>(uint2(20u, 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 9bcc136..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2int %15
-         %16 = OpSLessThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 0e1cb7f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) <= bitcast<vec2<i32>>(vec2<u32>(20u, 10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index ead1e5e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 < 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 7e80f5d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 < 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 278b5c5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpSLessThan %bool %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 11b0642..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 < 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 45b3aeb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (asint(10u) < 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index b16d09f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (as_type<int>(10u) < 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 781f412..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %int %uint_10
-         %10 = OpSLessThan %bool %5 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index a9497dd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (bitcast<i32>(10u) < 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index a040e74..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (30 < asint(20u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 1042dba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (30 < as_type<int>(20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index d388618..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_20
-         %10 = OpSLessThan %bool %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index f078b97..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (30 < bitcast<i32>(20u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 12d6f0f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) < int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index e6def40..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) < int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index efb9643..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpSLessThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 3664a2f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) < vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index a8908da..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (asint(uint2(10u, 20u)) < int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index ec554e9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (as_type<int2>(uint2(10u, 20u)) < int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 8163531..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2int %12
-         %16 = OpSLessThan %v2bool %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 118474d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (bitcast<vec2<i32>>(vec2<u32>(10u, 20u)) < vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index cbc9245..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (int2(30, 40) < asint(uint2(20u, 10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index cc17d4a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (int2(30, 40) < as_type<int2>(uint2(20u, 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 6c1b619..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2int %15
-         %16 = OpSLessThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index a26f77d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SLessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<i32>(30, 40) < bitcast<vec2<i32>>(vec2<u32>(20u, 10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index d748005..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 % asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 55517d6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 % as_type<int>(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index bd60d09..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpSMod %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 8f02084..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 % bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 63e176f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (asint(10u) % 30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index c3a9181..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (as_type<int>(10u) % 30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index e86a863..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %int %uint_10
-         %10 = OpSMod %int %5 %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index b34b87b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (bitcast<i32>(10u) % 30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 5883bd9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (asint(uint2(10u, 20u)) % int2(30, 40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 75cd027..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (as_type<int2>(uint2(10u, 20u)) % int2(30, 40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 288a9ba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %15 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2int %12
-         %16 = OpSMod %v2int %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index d1bd49d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (bitcast<vec2<i32>>(vec2<u32>(10u, 20u)) % vec2<i32>(30, 40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index d7adb8e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) % asint(uint2(10u, 20u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 89b5627..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(30, 40) % as_type<int2>(uint2(10u, 20u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 84a80e3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %15 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2int %15
-         %16 = OpSMod %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 115838f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_MixedSignednessOperands_SpvBinaryArithTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) % bitcast<vec2<i32>>(vec2<u32>(10u, 20u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index be2c6ae..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 % 40);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 4d6bc47..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 % 40);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 8ab36ff..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpSMod %int %int_30 %int_40
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 88c4d00..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 % 40);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 3b023f4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) % int2(40, 30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 3808cd9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(30, 40) % int2(40, 30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 59b9622..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-         %10 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpSMod %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 9fff949..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_SMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) % vec2<i32>(40, 30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index da4c40a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 << asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index a8ef0fd..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) << as_type<uint>(40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index bea7497..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpShiftLeftLogical %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index f9c9c0f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 << bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index bb09952..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u << asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index daa90a3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u << as_type<uint>(40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 34f6aac..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpShiftLeftLogical %uint %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index c21ba25..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u << bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 3298030..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) << uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index f585f56..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) << uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 35025bb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpShiftLeftLogical %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 2f07877..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) << vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 50533a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) << asuint(int2(40, 30)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index dbaa54e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((as_type<uint2>(int2(30, 40)) << as_type<uint2>(int2(40, 30))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 7f96e9d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-         %13 = OpConstantComposite %v2int %int_40 %int_30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2uint %13
-         %14 = OpShiftLeftLogical %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index a9e670d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) << bitcast<vec2<u32>>(vec2<i32>(40, 30)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 522b2a9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u << 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 59a5762..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u << 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index e492467..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpShiftLeftLogical %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index b7d926a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u << 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 684e4bb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 << 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 49e4eba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) << 20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 50df6f9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpShiftLeftLogical %int %int_30 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 8861845..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 << 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 3298030..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) << uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index f585f56..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) << uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 35025bb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpShiftLeftLogical %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 2f07877..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) << vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 7dfc099..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(30, 40) << uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 80d40ff..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((as_type<uint2>(int2(30, 40)) << uint2(20u, 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 98a3f34..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %14 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpShiftLeftLogical %v2int %9 %14
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index bfa4807..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_Arg2Unsigned_SpvBinaryBitTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(30, 40) << vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index e6cfa85..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 << 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index d746695..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>(as_type<int>((as_type<uint>(30) << 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index b038d38..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpShiftLeftLogical %int %int_30 %uint_10
-          %5 = OpBitcast %uint %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 244c276..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 << 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index ae6e093..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) << uint2(20u, 10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 999f72a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>(as_type<int2>((as_type<uint2>(int2(30, 40)) << uint2(20u, 10u))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 9449517..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %16 = OpShiftLeftLogical %v2int %12 %15
-          %5 = OpBitcast %v2uint %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index a85aabc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftLeftLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) << vec2<u32>(20u, 10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index aa6d2b6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((asint(10u) >> asuint(30)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 6d7d9b7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>((as_type<int>(10u) >> as_type<uint>(30)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index abac46a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-    %uint_10 = OpConstant %uint 10
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %10 = OpBitcast %uint %int_30
-         %12 = OpShiftRightArithmetic %int %7 %10
-          %5 = OpBitcast %uint %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index b9dfa9a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((bitcast<i32>(10u) >> bitcast<u32>(30)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 1f3d8f5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 >> asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index c18e6c1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 >> as_type<uint>(40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 7e7dc5d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpShiftRightArithmetic %int %int_30 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 12b8f3c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 >> bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 254af38..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((asint(uint2(10u, 20u)) >> asuint(int2(30, 40))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 28def88..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>((as_type<int2>(uint2(10u, 20u)) >> as_type<uint2>(int2(30, 40))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 1e63192..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %13 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %17 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitcast %v2int %13
-         %14 = OpBitcast %v2uint %17
-         %18 = OpShiftRightArithmetic %v2int %8 %14
-          %5 = OpBitcast %v2uint %18
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 1c0238a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((bitcast<vec2<i32>>(vec2<u32>(10u, 20u)) >> bitcast<vec2<u32>>(vec2<i32>(30, 40))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 2627d37..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(40, 30) >> asuint(int2(30, 40)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index eb98703..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(40, 30) >> as_type<uint2>(int2(30, 40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 069612b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-          %9 = OpConstantComposite %v2int %int_40 %int_30
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-         %13 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2uint %13
-         %14 = OpShiftRightArithmetic %v2int %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index d38f1fc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(40, 30) >> bitcast<vec2<u32>>(vec2<i32>(30, 40)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 4221afa..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((asint(10u) >> 20u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index eb4dbee..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>((as_type<int>(10u) >> 20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index dc1f007..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %int %uint_10
-         %11 = OpShiftRightArithmetic %int %7 %uint_20
-          %5 = OpBitcast %uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 5e1b625..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((bitcast<i32>(10u) >> 20u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index d7265d3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = (30 >> 10u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 380a4a7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = (30 >> 10u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 2653c8c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpShiftRightArithmetic %int %int_30 %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 057af01..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = (30 >> 10u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 971b55b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((asint(uint2(10u, 20u)) >> uint2(20u, 10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index a193e22..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>((as_type<int2>(uint2(10u, 20u)) >> uint2(20u, 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 8b7e238..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %13 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %14 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitcast %v2int %13
-         %15 = OpShiftRightArithmetic %v2int %8 %14
-          %5 = OpBitcast %v2uint %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index ae84fd1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((bitcast<vec2<i32>>(vec2<u32>(10u, 20u)) >> vec2<u32>(20u, 10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 4cfc73b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = (int2(40, 30) >> uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 45f1424..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = (int2(40, 30) >> uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index a471451..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-          %9 = OpConstantComposite %v2int %int_40 %int_30
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %14 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpShiftRightArithmetic %v2int %9 %14
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 84ea2b5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = (vec2<i32>(40, 30) >> vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index ec77cf8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint((30 >> 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 33ceeba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>((30 >> 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index d1fc418..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpShiftRightArithmetic %int %int_30 %uint_10
-          %5 = OpBitcast %uint %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 23cb77e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>((30 >> 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index c5ef155..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint((int2(30, 40) >> uint2(20u, 10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 97283a0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>((int2(30, 40) >> uint2(20u, 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index e6af6ba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %16 = OpShiftRightArithmetic %v2int %12 %15
-          %5 = OpBitcast %v2uint %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index c37f278..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightArithmetic_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>((vec2<i32>(30, 40) >> vec2<u32>(20u, 10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index a089bba..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u >> asuint(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index e4ef80b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u >> as_type<uint>(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index cc52d64..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %10 = OpShiftRightLogical %uint %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 2334466..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u >> bitcast<u32>(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 7764fc7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((asuint(30) >> asuint(40)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 1cf94f6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) >> as_type<uint>(40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 26de32f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %10 = OpBitcast %uint %int_40
-         %12 = OpShiftRightLogical %uint %7 %10
-          %5 = OpBitcast %int %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index dcfcc28..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((bitcast<u32>(30) >> bitcast<u32>(40)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index fccd02b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) >> asuint(int2(30, 40)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index bea342c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) >> as_type<uint2>(int2(30, 40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index a160b65..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %15 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2uint %15
-         %16 = OpShiftRightLogical %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 236e312..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) >> bitcast<vec2<u32>>(vec2<i32>(30, 40)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 1781994..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((asuint(int2(40, 30)) >> asuint(int2(30, 40))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 496df37..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((as_type<uint2>(int2(40, 30)) >> as_type<uint2>(int2(30, 40))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index adc4f06..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %13 = OpConstantComposite %v2int %int_40 %int_30
-         %15 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitcast %v2uint %13
-         %14 = OpBitcast %v2uint %15
-         %16 = OpShiftRightLogical %v2uint %8 %14
-          %5 = OpBitcast %v2int %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index d210ae2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Signed_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((bitcast<vec2<u32>>(vec2<i32>(40, 30)) >> bitcast<vec2<u32>>(vec2<i32>(30, 40))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index fe69c41..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u >> 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index b9f45a4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u >> 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 2ff1d3d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpShiftRightLogical %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index dcce358..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u >> 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index cce77bf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((asuint(30) >> 20u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index fe03581..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((as_type<uint>(30) >> 20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index bae8ebb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %int_30 = OpConstant %int 30
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_30
-         %11 = OpShiftRightLogical %uint %7 %uint_20
-          %5 = OpBitcast %int %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index d946dd9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((bitcast<u32>(30) >> 20u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index e14739a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) >> uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index 15ddfb1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) >> uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 14d913c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpShiftRightLogical %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index d943102..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) >> vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 33234e9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((asuint(int2(30, 40)) >> uint2(10u, 20u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 89ed12c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((as_type<uint2>(int2(30, 40)) >> uint2(10u, 20u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 6cada59..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %13 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %16 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitcast %v2uint %13
-         %17 = OpShiftRightLogical %v2uint %8 %16
-          %5 = OpBitcast %v2int %17
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 57706fe..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_Arg2Unsigned_SpvBinaryBitGeneralTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((bitcast<vec2<u32>>(vec2<i32>(30, 40)) >> vec2<u32>(10u, 20u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 6d3a42e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint((20u >> 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index b434eea..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>((20u >> 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 4793ea0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpShiftRightLogical %uint %uint_20 %uint_10
-          %5 = OpBitcast %int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index debcad5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>((20u >> 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 2ac568f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint((uint2(10u, 20u) >> uint2(20u, 10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 1f77cfb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>((uint2(10u, 20u) >> uint2(20u, 10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 68f9a1d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %13 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %14 = OpShiftRightLogical %v2uint %12 %13
-          %5 = OpBitcast %v2int %14
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 6a821a6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ShiftRightLogical_BitcastResult_SpvBinaryBitGeneralTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>((vec2<u32>(10u, 20u) >> vec2<u32>(20u, 10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index f1d2dd7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u / 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 788d389..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u / 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 6dac704..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpUDiv %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index a211969..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u / 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index ec26f7f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) / uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 9adf36c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) / uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 7f0bf43..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpUDiv %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 572afb7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UDiv_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) / vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 269dbdc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u >= 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 79726d6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u >= 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index ea7e086..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpUGreaterThanEqual %bool %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index d1568cc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u >= 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 101a663..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (asuint(30) >= 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 4c3627a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (as_type<uint>(30) >= 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 3a28cbf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %uint %int_30
-         %10 = OpUGreaterThanEqual %bool %5 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 6f61fad..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (bitcast<u32>(30) >= 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index eaab66f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u >= asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index a860f02..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u >= as_type<uint>(40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 3aa9633..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpUGreaterThanEqual %bool %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 6a48097..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u >= bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 18bea18..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) >= uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index caaa4c0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) >= uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 2dda07d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpUGreaterThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index 484b06f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) >= vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 50cb12f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (asuint(int2(30, 40)) >= uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 29ebb85..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (as_type<uint2>(int2(30, 40)) >= uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 85c6ef1..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2uint %12
-         %16 = OpUGreaterThanEqual %v2bool %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index b5c1d5d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (bitcast<vec2<u32>>(vec2<i32>(30, 40)) >= vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 569fa4d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) >= asuint(int2(40, 30)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index e83f2e9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) >= as_type<uint2>(int2(40, 30)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 62f78c7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2uint %15
-         %16 = OpUGreaterThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index e22ecaa..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) >= bitcast<vec2<u32>>(vec2<i32>(40, 30)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 395694e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u > 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index f92a651..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u > 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index 4ffd4ad..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpUGreaterThan %bool %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index ba1b933..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u > 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 616c20b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (asuint(30) > 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index ca095b2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (as_type<uint>(30) > 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index c5a189b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %uint %int_30
-         %10 = OpUGreaterThan %bool %5 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 5b62486..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (bitcast<u32>(30) > 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index e01e8e3..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u > asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index cdd8212..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u > as_type<uint>(40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index c2611bc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpUGreaterThan %bool %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 52b4915..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u > bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 22ada31..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) > uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 98af048..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) > uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 1ab95a8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpUGreaterThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index fb41332..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) > vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 611e248..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (asuint(int2(30, 40)) > uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 6aebfa0..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (as_type<uint2>(int2(30, 40)) > uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 2b177eb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2uint %12
-         %16 = OpUGreaterThan %v2bool %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 33324fc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (bitcast<vec2<u32>>(vec2<i32>(30, 40)) > vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 99e15f7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) > asuint(int2(40, 30)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index fac467f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) > as_type<uint2>(int2(40, 30)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index c13dfc6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2uint %15
-         %16 = OpUGreaterThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 726a9cb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UGreaterThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) > bitcast<vec2<u32>>(vec2<i32>(40, 30)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index b4b48a8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u <= 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 565f43e..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u <= 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index c9fd16c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpULessThanEqual %bool %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 4ca1576..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u <= 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index ebaa675..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (asuint(30) <= 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 0449677..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (as_type<uint>(30) <= 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 4d4fc86..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %uint %int_30
-         %10 = OpULessThanEqual %bool %5 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index 4bdbb7b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (bitcast<u32>(30) <= 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index 5134767..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u <= asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index bf2bbad..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u <= as_type<uint>(40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index 94a4a39..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpULessThanEqual %bool %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 78fb0eb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u <= bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index aadcc08..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) <= uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index 603faf2..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) <= uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 9fb5892..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpULessThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index a72937f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) <= vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index fe3cd84..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (asuint(int2(30, 40)) <= uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 5779984..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (as_type<uint2>(int2(30, 40)) <= uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 44c3f9a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2uint %12
-         %16 = OpULessThanEqual %v2bool %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 1a31f7c..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (bitcast<vec2<u32>>(vec2<i32>(30, 40)) <= vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index 84c03db..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) <= asuint(int2(40, 30)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index ec6c1fc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) <= as_type<uint2>(int2(40, 30)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index 158173a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2uint %15
-         %16 = OpULessThanEqual %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 0f7d1fe..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThanEqual_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) <= bitcast<vec2<u32>>(vec2<i32>(40, 30)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index 58fdafc..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u < 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index 600fb97..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u < 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index f1cdb11..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpULessThan %bool %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index da0007f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u < 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 88c9a0b..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (asuint(30) < 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 56104b5..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (as_type<uint>(30) < 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index f441af6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-    %uint_20 = OpConstant %uint 20
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %uint %int_30
-         %10 = OpULessThan %bool %5 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index d82804a..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (bitcast<u32>(30) < 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
deleted file mode 100644
index faa2785..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = (10u < asuint(40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
deleted file mode 100644
index a5f3097..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = (10u < as_type<uint>(40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
deleted file mode 100644
index b678462..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-       %bool = OpTypeBool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpBitcast %uint %int_40
-         %10 = OpULessThan %bool %uint_10 %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
deleted file mode 100644
index 095014f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = (10u < bitcast<u32>(40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
deleted file mode 100644
index 5a53bda..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) < uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
deleted file mode 100644
index a1ca897..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) < uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
deleted file mode 100644
index 984ef08..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpULessThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
deleted file mode 100644
index c2c2599..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) < vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
deleted file mode 100644
index 2b6fcf6..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (asuint(int2(30, 40)) < uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
deleted file mode 100644
index 749f7fa..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (as_type<uint2>(int2(30, 40)) < uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
deleted file mode 100644
index 4cad910..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %12 = OpConstantComposite %v2int %int_30 %int_40
-    %uint_20 = OpConstant %uint 20
-    %uint_10 = OpConstant %uint 10
-         %15 = OpConstantComposite %v2uint %uint_20 %uint_10
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2uint %12
-         %16 = OpULessThan %v2bool %5 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
deleted file mode 100644
index 2a91bce..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_4.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (bitcast<vec2<u32>>(vec2<i32>(30, 40)) < vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
deleted file mode 100644
index bef764d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = (uint2(10u, 20u) < asuint(int2(40, 30)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
deleted file mode 100644
index 52e34c4..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = (uint2(10u, 20u) < as_type<uint2>(int2(40, 30)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
deleted file mode 100644
index c84e351..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.spvasm
+++ /dev/null
@@ -1,36 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-     %int_30 = OpConstant %int 30
-         %15 = OpConstantComposite %v2int %int_40 %int_30
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpBitcast %v2uint %15
-         %16 = OpULessThan %v2bool %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
deleted file mode 100644
index 5039a15..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ULessThan_SpvBinaryLogicalTest_EmitExpression_5.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = (vec2<u32>(10u, 20u) < bitcast<vec2<u32>>(vec2<i32>(40, 30)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
deleted file mode 100644
index c02baaf..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = (10u % 20u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
deleted file mode 100644
index f5eaa38..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = (10u % 20u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
deleted file mode 100644
index fcc8b64..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpUMod %uint %uint_10 %uint_20
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
deleted file mode 100644
index 5c6fcbb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = (10u % 20u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
deleted file mode 100644
index 31e7210..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = (uint2(10u, 20u) % uint2(20u, 10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
deleted file mode 100644
index 7cbfbb8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = (uint2(10u, 20u) % uint2(20u, 10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
deleted file mode 100644
index 7595701..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,29 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 15
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-         %10 = OpConstantComposite %v2uint %uint_20 %uint_10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpUMod %v2uint %9 %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %13 = OpLabel
-         %14 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
deleted file mode 100644
index d623487..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_UMod_SpvBinaryArithTest_EmitExpression_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = (vec2<u32>(10u, 20u) % vec2<u32>(20u, 10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.hlsl
deleted file mode 100644
index 4998500..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.hlsl
+++ /dev/null
@@ -1,17 +0,0 @@
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    }
-    break;
-    {
-      const float x_81 = (0.0f * 42.0f);
-    }
-  }
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.msl
deleted file mode 100644
index c1a3641..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    if (false) {
-      break;
-    }
-    break;
-    {
-      float const x_81 = (0.0f * 42.0f);
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.spvasm
deleted file mode 100644
index 483c563..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.spvasm
+++ /dev/null
@@ -1,42 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %float = OpTypeFloat 32
-    %float_0 = OpConstant %float 0
-   %float_42 = OpConstant %float 42
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpBranch %5
-          %5 = OpLabel
-               OpLoopMerge %6 %7 None
-               OpBranch %8
-          %8 = OpLabel
-               OpSelectionMerge %11 None
-               OpBranchConditional %false %12 %11
-         %12 = OpLabel
-               OpBranch %6
-         %11 = OpLabel
-               OpBranch %6
-          %7 = OpLabel
-         %16 = OpFMul %float %float_0 %float_42
-               OpBranch %5
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.wgsl
deleted file mode 100644
index 5629082..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_ValueFromBlockNotInBlockOrder.spvasm.expected.wgsl
+++ /dev/null
@@ -1,18 +0,0 @@
-fn main_1() {
-  loop {
-    if (false) {
-      break;
-    }
-    break;
-
-    continuing {
-      let x_81 : f32 = (0.0 * 42.0);
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.hlsl
deleted file mode 100644
index 5204289..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const uint2 x_1 = uint2(3u, 4u);
-  const uint x_10 = x_1[1];
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.msl
deleted file mode 100644
index 77e55e8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint2 const x_1 = uint2(3u, 4u);
-  int const x_2 = 1;
-  uint const x_10 = x_1[x_2];
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.spvasm
deleted file mode 100644
index a5b74de..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-          %9 = OpConstantComposite %v2uint %uint_3 %uint_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %12 = OpVectorExtractDynamic %uint %9 %int_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.wgsl
deleted file mode 100644
index 3ba0951..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_SignedIndex.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : vec2<u32> = vec2<u32>(3u, 4u);
-  let x_2 : i32 = 1;
-  let x_10 : u32 = x_1[x_2];
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.msl
deleted file mode 100644
index 2d7efef..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint2 const x_1 = uint2(3u, 4u);
-  uint const x_2 = 3u;
-  uint const x_10 = x_1[x_2];
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.spvasm
deleted file mode 100644
index c5b37ff..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-          %9 = OpConstantComposite %v2uint %uint_3 %uint_4
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpVectorExtractDynamic %uint %9 %uint_3
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.wgsl
deleted file mode 100644
index a48d2d8..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorExtractDynamic_UnsignedIndex.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : vec2<u32> = vec2<u32>(3u, 4u);
-  let x_2 : u32 = 3u;
-  let x_10 : u32 = x_1[x_2];
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.hlsl
deleted file mode 100644
index 1c7138d..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.hlsl
+++ /dev/null
@@ -1,19 +0,0 @@
-void set_uint2(inout uint2 vec, int idx, uint val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-void main_1() {
-  const uint2 x_1 = uint2(3u, 4u);
-  const uint x_2 = 3u;
-  const int x_3 = 1;
-  uint2 x_10_1 = x_1;
-  set_uint2(x_10_1, x_3, x_2);
-  const uint2 x_10 = x_10_1;
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.msl
deleted file mode 100644
index 431e568..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.msl
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint2 const x_1 = uint2(3u, 4u);
-  uint const x_2 = 3u;
-  int const x_3 = 1;
-  uint2 x_10_1 = x_1;
-  x_10_1[x_3] = x_2;
-  uint2 const x_10 = x_10_1;
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.spvasm
deleted file mode 100644
index dc89859..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.spvasm
+++ /dev/null
@@ -1,38 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %x_10_1 "x_10_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-          %9 = OpConstantComposite %v2uint %uint_3 %uint_4
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Function_v2uint = OpTypePointer Function %v2uint
-         %14 = OpConstantNull %v2uint
-%_ptr_Function_uint = OpTypePointer Function %uint
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-     %x_10_1 = OpVariable %_ptr_Function_v2uint Function %14
-               OpStore %x_10_1 %9
-         %16 = OpAccessChain %_ptr_Function_uint %x_10_1 %int_1
-               OpStore %16 %uint_3
-         %17 = OpLoad %v2uint %x_10_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.wgsl
deleted file mode 100644
index cd22d95..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorInsertDynamic_Sample.spvasm.expected.wgsl
+++ /dev/null
@@ -1,20 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : vec2<u32> = vec2<u32>(3u, 4u);
-  let x_2 : u32 = 3u;
-  let x_3 : i32 = 1;
-  var x_10_1 : vec2<u32> = x_1;
-  x_10_1[x_3] = x_2;
-  let x_10 : vec2<u32> = x_10_1;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.hlsl
deleted file mode 100644
index d4440e7..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.hlsl
+++ /dev/null
@@ -1,11 +0,0 @@
-void main_1() {
-  const uint2 x_1 = uint2(4u, 3u);
-  const uint2 x_10 = uint2(0u, x_1.y);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.msl
deleted file mode 100644
index f67f345..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.msl
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint2 const x_1 = uint2(4u, 3u);
-  uint2 const x_10 = uint2(0u, x_1.y);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.spvasm
deleted file mode 100644
index f63ae41..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %uint_4 = OpConstant %uint 4
-     %uint_3 = OpConstant %uint 3
-          %9 = OpConstantComposite %v2uint %uint_4 %uint_3
-     %uint_0 = OpConstant %uint 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpCompositeExtract %uint %9 1
-         %12 = OpCompositeConstruct %v2uint %uint_0 %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.wgsl
deleted file mode 100644
index cb4f32f..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_AllOnesMapToNull.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : vec2<u32> = vec2<u32>(4u, 3u);
-  let x_10 : vec2<u32> = vec2<u32>(0u, x_1.y);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.hlsl
deleted file mode 100644
index 8ac6411..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const uint4 x_10 = uint4(uint2(4u, 3u).y, uint2(4u, 3u).x, uint2(3u, 4u).y, uint2(3u, 4u).x);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.msl
deleted file mode 100644
index 54f9b82..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.msl
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint4 const x_10 = uint4(uint2(4u, 3u).y, uint2(4u, 3u).x, uint2(3u, 4u).y, uint2(3u, 4u).x);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.spvasm
deleted file mode 100644
index d7b0084..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v4uint = OpTypeVector %uint 4
-     %v2uint = OpTypeVector %uint 2
-     %uint_4 = OpConstant %uint 4
-     %uint_3 = OpConstant %uint 3
-         %10 = OpConstantComposite %v2uint %uint_4 %uint_3
-         %13 = OpConstantComposite %v2uint %uint_3 %uint_4
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpCompositeExtract %uint %10 1
-         %12 = OpCompositeExtract %uint %10 0
-         %14 = OpCompositeExtract %uint %13 1
-         %15 = OpCompositeExtract %uint %13 0
-         %16 = OpCompositeConstruct %v4uint %11 %12 %14 %15
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.wgsl
deleted file mode 100644
index 76fc929..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_ConstantOperands_UseBoth.spvasm.expected.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_10 : vec4<u32> = vec4<u32>(vec2<u32>(4u, 3u).y, vec2<u32>(4u, 3u).x, vec2<u32>(3u, 4u).y, vec2<u32>(3u, 4u).x);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.hlsl
deleted file mode 100644
index be343bb..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-void main_1() {
-  const uint2 x_1 = uint2(3u, 4u);
-  const uint2 x_2 = (uint2(4u, 3u) + uint2(3u, 4u));
-  const uint4 x_10 = uint4(x_2.y, x_2.x, x_1.y, x_1.x);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.msl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.msl
deleted file mode 100644
index 7532ca9..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.msl
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  float2 field0;
-  uint field1;
-  int field2;
-};
-
-void main_1() {
-  uint2 const x_1 = uint2(3u, 4u);
-  uint2 const x_2 = (uint2(4u, 3u) + uint2(3u, 4u));
-  uint4 const x_10 = uint4(x_2.y, x_2.x, x_1.y, x_1.x);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.spvasm
deleted file mode 100644
index 36eecad..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.spvasm
+++ /dev/null
@@ -1,35 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 21
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %uint_3 = OpConstant %uint 3
-     %uint_4 = OpConstant %uint 4
-          %9 = OpConstantComposite %v2uint %uint_3 %uint_4
-         %10 = OpConstantComposite %v2uint %uint_4 %uint_3
-     %v4uint = OpTypeVector %uint 4
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %11 = OpIAdd %v2uint %10 %9
-         %13 = OpCompositeExtract %uint %11 1
-         %14 = OpCompositeExtract %uint %11 0
-         %15 = OpCompositeExtract %uint %9 1
-         %16 = OpCompositeExtract %uint %9 0
-         %17 = OpCompositeConstruct %v4uint %13 %14 %15 %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.wgsl
deleted file mode 100644
index a82b9de..0000000
--- a/test/unittest/reader/spirv/SpvParserTest_VectorShuffle_FunctionScopeOperands_UseBoth.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-struct S {
-  field0 : vec2<f32>;
-  field1 : u32;
-  field2 : i32;
-};
-
-fn main_1() {
-  let x_1 : vec2<u32> = vec2<u32>(3u, 4u);
-  let x_2 : vec2<u32> = (vec2<u32>(4u, 3u) + vec2<u32>(3u, 4u));
-  let x_10 : vec4<u32> = vec4<u32>(x_2.y, x_2.x, x_1.y, x_1.x);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index e369a1a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = -(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.msl
deleted file mode 100644
index bbfcf2d..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_1 = -(50.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 0d238ba..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpFNegate %float %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 054b45d..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : f32 = -(50.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 0bb1446..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2 x_1 = -(float2(50.0f, 60.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.msl
deleted file mode 100644
index 245fc91..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = -(float2(50.0f, 60.0f));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.spvasm
deleted file mode 100644
index dd99469..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpFNegate %v2float %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 4f90986..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_FNegate_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = -(vec2<f32>(50.0, 60.0));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.hlsl
deleted file mode 100644
index dda227d..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = -(30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.msl
deleted file mode 100644
index 4cee065..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-void main_1() {
-  int const x_1 = tint_unary_minus(30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.spvasm
deleted file mode 100644
index a82b84c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpSNegate %int %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.wgsl
deleted file mode 100644
index e45ce36..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Int.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = -(30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.hlsl
deleted file mode 100644
index e1f744f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = -(asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.msl
deleted file mode 100644
index 532c85b..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-void main_1() {
-  int const x_1 = tint_unary_minus(as_type<int>(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.spvasm
deleted file mode 100644
index d08b192..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %6 = OpBitcast %int %uint_10
-          %5 = OpSNegate %int %6
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.wgsl
deleted file mode 100644
index a724b62..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Int_Uint.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = -(bitcast<i32>(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.hlsl
deleted file mode 100644
index 05ee1e8..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = -(int2(30, 40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.msl
deleted file mode 100644
index 89d098a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int2 tint_unary_minus(const int2 v) {
-  return select(-v, v, v == -2147483648);
-}
-
-void main_1() {
-  int2 const x_1 = tint_unary_minus(int2(30, 40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.spvasm
deleted file mode 100644
index fd0c186..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %10 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpSNegate %v2int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.wgsl
deleted file mode 100644
index ca508f6..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_SignedVec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = -(vec2<i32>(30, 40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.hlsl
deleted file mode 100644
index a5aa25f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = -(asint(uint2(10u, 20u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.msl
deleted file mode 100644
index e58159a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int2 tint_unary_minus(const int2 v) {
-  return select(-v, v, v == -2147483648);
-}
-
-void main_1() {
-  int2 const x_1 = tint_unary_minus(as_type<int2>(uint2(10u, 20u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.spvasm
deleted file mode 100644
index 4c5d463..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %13 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %6 = OpBitcast %v2int %13
-          %5 = OpSNegate %v2int %6
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.wgsl
deleted file mode 100644
index 12ce537..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_SignedVec_UnsignedVec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = -(bitcast<vec2<i32>>(vec2<u32>(10u, 20u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.hlsl
deleted file mode 100644
index 3f8072a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint(-(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.msl
deleted file mode 100644
index 473cac5..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-void main_1() {
-  uint const x_1 = as_type<uint>(tint_unary_minus(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.spvasm
deleted file mode 100644
index f819fda..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpSNegate %int %int_30
-          %5 = OpBitcast %uint %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.wgsl
deleted file mode 100644
index 1b940b1..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Int.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>(-(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.hlsl
deleted file mode 100644
index 804956a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint(-(asint(10u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.msl
deleted file mode 100644
index 5e00292..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-void main_1() {
-  uint const x_1 = as_type<uint>(tint_unary_minus(as_type<int>(10u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.spvasm
deleted file mode 100644
index dcb1e68..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpBitcast %int %uint_10
-          %7 = OpSNegate %int %8
-          %5 = OpBitcast %uint %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.wgsl
deleted file mode 100644
index 2a97574..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_Uint_Uint.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>(-(bitcast<i32>(10u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.hlsl
deleted file mode 100644
index c89b09b..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint(-(int2(30, 40)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.msl
deleted file mode 100644
index eb13fff..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int2 tint_unary_minus(const int2 v) {
-  return select(-v, v, v == -2147483648);
-}
-
-void main_1() {
-  uint2 const x_1 = as_type<uint2>(tint_unary_minus(int2(30, 40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.spvasm
deleted file mode 100644
index d030846..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %13 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpSNegate %v2int %13
-          %5 = OpBitcast %v2uint %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.wgsl
deleted file mode 100644
index 480baac..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_SignedVec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>(-(vec2<i32>(30, 40)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.hlsl
deleted file mode 100644
index bb34342..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint(-(asint(uint2(10u, 20u))));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.msl
deleted file mode 100644
index 49b59a2..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.msl
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int2 tint_unary_minus(const int2 v) {
-  return select(-v, v, v == -2147483648);
-}
-
-void main_1() {
-  uint2 const x_1 = as_type<uint2>(tint_unary_minus(as_type<int2>(uint2(10u, 20u))));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.spvasm
deleted file mode 100644
index bed8b43..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,32 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 18
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %14 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %v2int %14
-          %8 = OpSNegate %v2int %9
-          %5 = OpBitcast %v2uint %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %16 = OpLabel
-         %17 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.wgsl
deleted file mode 100644
index de725ac..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_SNegate_UnsignedVec_UnsignedVec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>(-(bitcast<vec2<i32>>(vec2<u32>(10u, 20u))));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.hlsl
deleted file mode 100644
index 3ce255a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2x2 x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  const float2x2 x_2 = transpose(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.msl
deleted file mode 100644
index 25b6177..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2x2 const x_1 = float2x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f));
-  float2x2 const x_2 = transpose(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.spvasm
deleted file mode 100644
index df2b125..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-         %12 = OpConstantComposite %mat2v2float %10 %11
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpTranspose %mat2v2float %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.wgsl
deleted file mode 100644
index 751df07..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(50.0, 60.0), vec2<f32>(60.0, 50.0));
-  let x_2 : mat2x2<f32> = transpose(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.hlsl
deleted file mode 100644
index 37a218a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2x3 x_1 = float2x3(float3(50.0f, 60.0f, 70.0f), float3(60.0f, 70.0f, 50.0f));
-  const float3x2 x_2 = transpose(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.msl
deleted file mode 100644
index 9f4e66f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2x3 const x_1 = float2x3(float3(50.0f, 60.0f, 70.0f), float3(60.0f, 70.0f, 50.0f));
-  float3x2 const x_2 = transpose(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.spvasm
deleted file mode 100644
index 9aa68e1..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-%mat2v3float = OpTypeMatrix %v3float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-   %float_70 = OpConstant %float 70
-         %11 = OpConstantComposite %v3float %float_50 %float_60 %float_70
-         %12 = OpConstantComposite %v3float %float_60 %float_70 %float_50
-         %13 = OpConstantComposite %mat2v3float %11 %12
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %14 = OpTranspose %mat3v2float %13
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.wgsl
deleted file mode 100644
index 4de5b41..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_2x3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : mat2x3<f32> = mat2x3<f32>(vec3<f32>(50.0, 60.0, 70.0), vec3<f32>(60.0, 70.0, 50.0));
-  let x_2 : mat3x2<f32> = transpose(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.hlsl
deleted file mode 100644
index c95ec77..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float3x2 x_1 = float3x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f), float2(50.0f, 60.0f));
-  const float2x3 x_2 = transpose(x_1);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.msl
deleted file mode 100644
index 9262636..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float3x2 const x_1 = float3x2(float2(50.0f, 60.0f), float2(60.0f, 50.0f), float2(50.0f, 60.0f));
-  float2x3 const x_2 = transpose(x_1);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.spvasm
deleted file mode 100644
index 5629bf1..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-         %10 = OpConstantComposite %v2float %float_50 %float_60
-         %11 = OpConstantComposite %v2float %float_60 %float_50
-         %12 = OpConstantComposite %mat3v2float %10 %11 %10
-    %v3float = OpTypeVector %float 3
-%mat2v3float = OpTypeMatrix %v3float 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpTranspose %mat2v3float %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.wgsl
deleted file mode 100644
index 69ed3f8..0000000
--- a/test/unittest/reader/spirv/SpvUnaryArithTest_Transpose_3x2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_1 : mat3x2<f32> = mat3x2<f32>(vec2<f32>(50.0, 60.0), vec2<f32>(60.0, 50.0), vec2<f32>(50.0, 60.0));
-  let x_2 : mat2x3<f32> = transpose(x_1);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.hlsl
deleted file mode 100644
index a74cb65..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 x_1 = countbits(v2i1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.msl
deleted file mode 100644
index 5e5318b..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const x_1 = popcount(v2i1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.spvasm
deleted file mode 100644
index 6b32833..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpBitCount %v2int %14
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.wgsl
deleted file mode 100644
index 1602531..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_IntVector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : vec2<i32> = countOneBits(v2i1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.hlsl
deleted file mode 100644
index 7e6c5c9..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 x_1 = asint(countbits(v2u1));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.msl
deleted file mode 100644
index 8534554..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const x_1 = as_type<int2>(popcount(v2u1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.spvasm
deleted file mode 100644
index 19f814f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %16 = OpBitCount %v2uint %11
-         %15 = OpBitcast %v2int %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.wgsl
deleted file mode 100644
index b026757..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_IntVector_UintVector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>(countOneBits(v2u1));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.hlsl
deleted file mode 100644
index 7b091c8..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const int x_1 = countbits(i1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.msl
deleted file mode 100644
index 2926cf7..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  int const x_1 = popcount(i1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.spvasm
deleted file mode 100644
index 39559dd..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpBitCount %int %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.wgsl
deleted file mode 100644
index a5be6f6..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Int.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : i32 = countOneBits(i1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.hlsl
deleted file mode 100644
index c63362f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const int x_1 = asint(countbits(u1));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.msl
deleted file mode 100644
index da169f4..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  int const x_1 = as_type<int>(popcount(u1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.spvasm
deleted file mode 100644
index 8b67a15..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %16 = OpBitCount %uint %uint_10
-         %15 = OpBitcast %int %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.wgsl
deleted file mode 100644
index 56eb02d..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Int_Uint.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : i32 = bitcast<i32>(countOneBits(u1));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.hlsl
deleted file mode 100644
index 39bb2b5..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const uint2 x_1 = asuint(countbits(v2i1));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.msl
deleted file mode 100644
index c7677e7..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  uint2 const x_1 = as_type<uint2>(popcount(v2i1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.spvasm
deleted file mode 100644
index 623cfd2..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %16 = OpBitCount %v2int %14
-         %15 = OpBitcast %v2uint %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.wgsl
deleted file mode 100644
index ae46259..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_IntVector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>(countOneBits(v2i1));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.hlsl
deleted file mode 100644
index 061d888..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const uint2 x_1 = countbits(v2u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.msl
deleted file mode 100644
index 5c913c0..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  uint2 const x_1 = popcount(v2u1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.spvasm
deleted file mode 100644
index 217cc0f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpBitCount %v2uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.wgsl
deleted file mode 100644
index 70ee7e7..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_UintVector_UintVector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : vec2<u32> = countOneBits(v2u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.hlsl
deleted file mode 100644
index f630817..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const uint x_1 = asuint(countbits(i1));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.msl
deleted file mode 100644
index 898195b..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  uint const x_1 = as_type<uint>(popcount(i1));
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.spvasm
deleted file mode 100644
index b508644..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.spvasm
+++ /dev/null
@@ -1,34 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 20
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %16 = OpBitCount %int %int_30
-         %15 = OpBitcast %uint %16
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.wgsl
deleted file mode 100644
index df7f6e5..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Int.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : u32 = bitcast<u32>(countOneBits(i1));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.hlsl
deleted file mode 100644
index e61ae04..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const uint x_1 = countbits(u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.msl
deleted file mode 100644
index 586570a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  uint const x_1 = popcount(u1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.spvasm
deleted file mode 100644
index 54532f3..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpBitCount %uint %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.wgsl
deleted file mode 100644
index 3a50022..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitCount_Uint_Uint.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : u32 = countOneBits(u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.hlsl
deleted file mode 100644
index 0b913fd..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const int2 x_1 = reversebits(v2i1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.msl
deleted file mode 100644
index 84640e6..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  int2 const x_1 = reverse_bits(v2i1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.spvasm
deleted file mode 100644
index e6dd3b9..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpBitReverse %v2int %14
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.wgsl
deleted file mode 100644
index 97da394..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_IntVector_IntVector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : vec2<i32> = reverseBits(v2i1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.hlsl
deleted file mode 100644
index a73c3bb..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const int x_1 = reversebits(i1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.msl
deleted file mode 100644
index 362484c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  int const x_1 = reverse_bits(i1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.spvasm
deleted file mode 100644
index b164bbe..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpBitReverse %int %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.wgsl
deleted file mode 100644
index b4f28a1..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Int_Int.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : i32 = reverseBits(i1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.hlsl
deleted file mode 100644
index a00c844..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const uint2 x_1 = reversebits(v2u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.msl
deleted file mode 100644
index c43e1a2..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  uint2 const x_1 = reverse_bits(v2u1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.spvasm
deleted file mode 100644
index 6f35e4f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpBitReverse %v2uint %11
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.wgsl
deleted file mode 100644
index d8fc5b2..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_UintVector_UintVector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : vec2<u32> = reverseBits(v2u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.hlsl
deleted file mode 100644
index 3fbf216..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.hlsl
+++ /dev/null
@@ -1,14 +0,0 @@
-void main_1() {
-  const uint u1 = 10u;
-  const int i1 = 30;
-  const uint2 v2u1 = uint2(10u, 20u);
-  const int2 v2i1 = int2(30, 40);
-  const uint x_1 = reversebits(u1);
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.msl
deleted file mode 100644
index 46ed69f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const u1 = 10u;
-  int const i1 = 30;
-  uint2 const v2u1 = uint2(10u, 20u);
-  int2 const v2i1 = int2(30, 40);
-  uint const x_1 = reverse_bits(u1);
-  return;
-}
-
-kernel void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.spvasm
deleted file mode 100644
index 198d84a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %v2uint = OpTypeVector %uint 2
-    %uint_20 = OpConstant %uint 20
-         %11 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %v2int = OpTypeVector %int 2
-     %int_40 = OpConstant %int 40
-         %14 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %15 = OpBitReverse %uint %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.wgsl
deleted file mode 100644
index e6bc8af..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_BitReverse_Uint_Uint.spvasm.expected.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn main_1() {
-  let u1 : u32 = 10u;
-  let i1 : i32 = 30;
-  let v2u1 : vec2<u32> = vec2<u32>(10u, 20u);
-  let v2i1 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : u32 = reverseBits(u1);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.hlsl
deleted file mode 100644
index d2088a6..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = ~(30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.msl
deleted file mode 100644
index 2a5889c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = ~(30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.spvasm
deleted file mode 100644
index de9da51..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpNot %int %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.wgsl
deleted file mode 100644
index ba77c8b..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Int.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = ~(30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.hlsl
deleted file mode 100644
index 419c8eb..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = asint(~(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.msl
deleted file mode 100644
index 25d88c1..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_1 = as_type<int>(~(10u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.spvasm
deleted file mode 100644
index a9f4544..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpNot %uint %uint_10
-          %5 = OpBitcast %int %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.wgsl
deleted file mode 100644
index 4a0d1d2..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Int_Uint.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : i32 = bitcast<i32>(~(10u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.hlsl
deleted file mode 100644
index c31086e..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = ~(int2(30, 40));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.msl
deleted file mode 100644
index 49ddd7c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = ~(int2(30, 40));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.spvasm
deleted file mode 100644
index 216d11c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %10 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpNot %v2int %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.wgsl
deleted file mode 100644
index f995c02..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_SignedVec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = ~(vec2<i32>(30, 40));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.hlsl
deleted file mode 100644
index 4afab65..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int2 x_1 = asint(~(uint2(10u, 20u)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.msl
deleted file mode 100644
index c856d53..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_1 = as_type<int2>(~(uint2(10u, 20u)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.spvasm
deleted file mode 100644
index 2cdcffd..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %13 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpNot %v2uint %13
-          %5 = OpBitcast %v2int %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.wgsl
deleted file mode 100644
index 0e9634a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_SignedVec_UnsignedVec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<i32> = bitcast<vec2<i32>>(~(vec2<u32>(10u, 20u)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.hlsl
deleted file mode 100644
index 412cd83..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint(~(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.msl
deleted file mode 100644
index 31af6b7..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>(~(30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.spvasm
deleted file mode 100644
index de53b0f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.spvasm
+++ /dev/null
@@ -1,27 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 13
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpNot %int %int_30
-          %5 = OpBitcast %uint %7
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %11 = OpLabel
-         %12 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.wgsl
deleted file mode 100644
index 33488fc..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Int.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>(~(30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.hlsl
deleted file mode 100644
index c6bcbd3..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = ~(10u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.msl
deleted file mode 100644
index 8a0b29f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = ~(10u);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.spvasm
deleted file mode 100644
index 52708c0..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpNot %uint %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.wgsl
deleted file mode 100644
index b5b5737..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_Uint_Uint.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = ~(10u);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.hlsl
deleted file mode 100644
index 23e8405..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = asuint(~(int2(30, 40)));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.msl
deleted file mode 100644
index a36ed94..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = as_type<uint2>(~(int2(30, 40)));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.spvasm
deleted file mode 100644
index 5a5760f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,31 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 17
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-         %13 = OpConstantComposite %v2int %int_30 %int_40
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %8 = OpNot %v2int %13
-          %5 = OpBitcast %v2uint %8
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %15 = OpLabel
-         %16 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.wgsl
deleted file mode 100644
index 599e40c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_SignedVec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>(~(vec2<i32>(30, 40)));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.hlsl
deleted file mode 100644
index 6dce691..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint2 x_1 = ~(uint2(10u, 20u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.msl
deleted file mode 100644
index 466557e..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_1 = ~(uint2(10u, 20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.spvasm
deleted file mode 100644
index 56fd96e..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %10 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpNot %v2uint %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.wgsl
deleted file mode 100644
index 365232c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryBitTest_Not_UnsignedVec_UnsignedVec.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<u32> = ~(vec2<u32>(10u, 20u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 50712af..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.msl
deleted file mode 100644
index f49756a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_1 = as_type<uint>(50.0f);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index 3f9dc7d..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %uint %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index bc3e4f0..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : u32 = bitcast<u32>(50.0);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 5fa0315..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float2 x_1 = asfloat(uint2(10u, 20u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.msl
deleted file mode 100644
index e9a42bd..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_1 = as_type<float2>(uint2(10u, 20u));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.spvasm
deleted file mode 100644
index 4e1b6a3..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-         %12 = OpConstantComposite %v2uint %uint_10 %uint_20
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpBitcast %v2float %12
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.wgsl
deleted file mode 100644
index b246e5c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_Bitcast_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<f32> = bitcast<vec2<f32>>(vec2<u32>(10u, 20u));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.hlsl
deleted file mode 100644
index 37bf3ea..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const int x_1 = int(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.msl
deleted file mode 100644
index 63ba130..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_30 = 50.0f;
-  int const x_1 = int(x_30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.spvasm
deleted file mode 100644
index dafa8c6..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-        %int = OpTypeInt 32 1
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpConvertFToS %int %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.wgsl
deleted file mode 100644
index 67c9af7..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToSigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : f32 = 50.0;
-  let x_1 : i32 = i32(x_30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.hlsl
deleted file mode 100644
index cf36d40..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = asuint(int(50.0f));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.msl
deleted file mode 100644
index dde5810..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_30 = 50.0f;
-  uint const x_1 = as_type<uint>(int(x_30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.spvasm
deleted file mode 100644
index 4e71a6a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-       %uint = OpTypeInt 32 0
-        %int = OpTypeInt 32 1
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpConvertFToS %int %float_50
-          %7 = OpBitcast %uint %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.wgsl
deleted file mode 100644
index a1e3904..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Scalar_ToUnsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : f32 = 50.0;
-  let x_1 : u32 = bitcast<u32>(i32(x_30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.hlsl
deleted file mode 100644
index d3c3333..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_30 = float2(50.0f, 60.0f);
-  const int2 x_1 = int2(x_30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.msl
deleted file mode 100644
index e576c46..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_30 = float2(50.0f, 60.0f);
-  int2 const x_1 = int2(x_30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.spvasm
deleted file mode 100644
index 985a540..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpConvertFToS %v2int %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.wgsl
deleted file mode 100644
index 8e28abb..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToSigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_1 : vec2<i32> = vec2<i32>(x_30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.hlsl
deleted file mode 100644
index 5ebd2d5..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_30 = float2(50.0f, 60.0f);
-  const uint2 x_1 = asuint(int2(x_30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.msl
deleted file mode 100644
index 9205302..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_30 = float2(50.0f, 60.0f);
-  uint2 const x_1 = as_type<uint2>(int2(x_30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.spvasm
deleted file mode 100644
index 1b4a5a0..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpConvertFToS %v2int %9
-         %10 = OpBitcast %v2uint %13
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.wgsl
deleted file mode 100644
index 87519d5..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToS_Vector_ToUnsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_1 : vec2<u32> = bitcast<vec2<u32>>(vec2<i32>(x_30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.msl
deleted file mode 100644
index 35623e0..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  while (true) {
-    float x_600 = 0.0f;
-    if (true) {
-      break;
-    }
-    if (true) {
-      x_600 = 50.0f;
-    }
-    break;
-    {
-      uint const x_82 = uint(x_600);
-    }
-  }
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.spvasm
deleted file mode 100644
index 6d41788..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.spvasm
+++ /dev/null
@@ -1,53 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 26
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %x_600 "x_600"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-%_ptr_Function_float = OpTypePointer Function %float
-         %12 = OpConstantNull %float
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-   %float_50 = OpConstant %float 50
-       %uint = OpTypeInt 32 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-      %x_600 = OpVariable %_ptr_Function_float Function %12
-               OpBranch %5
-          %5 = OpLabel
-               OpLoopMerge %6 %7 None
-               OpBranch %8
-          %8 = OpLabel
-               OpSelectionMerge %15 None
-               OpBranchConditional %true %16 %15
-         %16 = OpLabel
-               OpBranch %6
-         %15 = OpLabel
-               OpSelectionMerge %17 None
-               OpBranchConditional %true %18 %17
-         %18 = OpLabel
-               OpStore %x_600 %float_50
-               OpBranch %17
-         %17 = OpLabel
-               OpBranch %6
-          %7 = OpLabel
-         %22 = OpLoad %float %x_600
-         %20 = OpConvertFToU %uint %22
-               OpBranch %5
-          %6 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.wgsl
deleted file mode 100644
index 6678285..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_HoistedValue.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-fn main_1() {
-  loop {
-    var x_600 : f32;
-    if (true) {
-      break;
-    }
-    if (true) {
-      x_600 = 50.0;
-    }
-    break;
-
-    continuing {
-      let x_82 : u32 = u32(x_600);
-    }
-  }
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.hlsl
deleted file mode 100644
index f9bd3d1..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const uint x_1 = uint(50.0f);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.msl
deleted file mode 100644
index 5816307..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float const x_30 = 50.0f;
-  uint const x_1 = uint(x_30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.spvasm
deleted file mode 100644
index d92f19d..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-   %float_50 = OpConstant %float 50
-       %uint = OpTypeInt 32 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpConvertFToU %uint %float_50
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.wgsl
deleted file mode 100644
index d5fc2a0..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Scalar_ToUnsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : f32 = 50.0;
-  let x_1 : u32 = u32(x_30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.hlsl
deleted file mode 100644
index e3598e1..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const float2 x_30 = float2(50.0f, 60.0f);
-  const uint2 x_1 = uint2(x_30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.msl
deleted file mode 100644
index f625fd7..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  float2 const x_30 = float2(50.0f, 60.0f);
-  uint2 const x_1 = uint2(x_30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.spvasm
deleted file mode 100644
index 3382ffd..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-   %float_50 = OpConstant %float 50
-   %float_60 = OpConstant %float 60
-          %9 = OpConstantComposite %v2float %float_50 %float_60
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpConvertFToU %v2uint %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.wgsl
deleted file mode 100644
index 0a56609..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertFToU_Vector_ToUnsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : vec2<f32> = vec2<f32>(50.0, 60.0);
-  let x_1 : vec2<u32> = vec2<u32>(x_30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.hlsl
deleted file mode 100644
index 15cffe5..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = float(30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.msl
deleted file mode 100644
index 7d826c9..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_30 = 30;
-  float const x_1 = float(x_30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.spvasm
deleted file mode 100644
index 01149f4..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-      %float = OpTypeFloat 32
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpConvertSToF %float %int_30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.wgsl
deleted file mode 100644
index f2a25de..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromSigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : i32 = 30;
-  let x_1 : f32 = f32(x_30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.hlsl
deleted file mode 100644
index 69adf2f..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = float(asint(10u));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.msl
deleted file mode 100644
index 81eb659..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_30 = 10u;
-  float const x_1 = float(as_type<int>(x_30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.spvasm
deleted file mode 100644
index 4c858de..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-      %float = OpTypeFloat 32
-        %int = OpTypeInt 32 1
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %int %uint_10
-          %7 = OpConvertSToF %float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.wgsl
deleted file mode 100644
index 4dfbe0a..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Scalar_FromUnsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : u32 = 10u;
-  let x_1 : f32 = f32(bitcast<i32>(x_30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.hlsl
deleted file mode 100644
index ec27605..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const int2 x_30 = int2(30, 40);
-  const float2 x_1 = float2(x_30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.msl
deleted file mode 100644
index 3d1641c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_30 = int2(30, 40);
-  float2 const x_1 = float2(x_30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.spvasm
deleted file mode 100644
index 1ae6382..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpConvertSToF %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.wgsl
deleted file mode 100644
index 890b5ef..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromSigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : vec2<f32> = vec2<f32>(x_30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.hlsl
deleted file mode 100644
index 3c03393..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const uint2 x_30 = uint2(10u, 20u);
-  const float2 x_1 = float2(asint(x_30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.msl
deleted file mode 100644
index a465e1b..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_30 = uint2(10u, 20u);
-  float2 const x_1 = float2(as_type<int2>(x_30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.spvasm
deleted file mode 100644
index 84c993d..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2int %9
-         %10 = OpConvertSToF %v2float %13
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.wgsl
deleted file mode 100644
index 4b89c49..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertSToF_Vector_FromUnsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : vec2<u32> = vec2<u32>(10u, 20u);
-  let x_1 : vec2<f32> = vec2<f32>(bitcast<vec2<i32>>(x_30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.hlsl
deleted file mode 100644
index ceb6068..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = float(asuint(30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.msl
deleted file mode 100644
index bbba127..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int const x_30 = 30;
-  float const x_1 = float(as_type<uint>(x_30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.spvasm
deleted file mode 100644
index 6dff3cf..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-     %int_30 = OpConstant %int 30
-      %float = OpTypeFloat 32
-       %uint = OpTypeInt 32 0
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %9 = OpBitcast %uint %int_30
-          %7 = OpConvertUToF %float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.wgsl
deleted file mode 100644
index c441a83..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromSigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : i32 = 30;
-  let x_1 : f32 = f32(bitcast<u32>(x_30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.hlsl
deleted file mode 100644
index 9cf6f11..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const float x_1 = float(10u);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.msl
deleted file mode 100644
index 67605f2..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint const x_30 = 10u;
-  float const x_1 = float(x_30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.spvasm
deleted file mode 100644
index fa7fada..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,26 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 12
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-      %float = OpTypeFloat 32
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %7 = OpConvertUToF %float %uint_10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %10 = OpLabel
-         %11 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.wgsl
deleted file mode 100644
index 97057ca..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Scalar_FromUnsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : u32 = 10u;
-  let x_1 : f32 = f32(x_30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.hlsl
deleted file mode 100644
index 78b7747..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const int2 x_30 = int2(30, 40);
-  const float2 x_1 = float2(asuint(x_30));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.msl
deleted file mode 100644
index 332c882..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  int2 const x_30 = int2(30, 40);
-  float2 const x_1 = float2(as_type<uint2>(x_30));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.spvasm
deleted file mode 100644
index 0459c16..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,33 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 19
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-     %int_30 = OpConstant %int 30
-     %int_40 = OpConstant %int 40
-          %9 = OpConstantComposite %v2int %int_30 %int_40
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %13 = OpBitcast %v2uint %9
-         %10 = OpConvertUToF %v2float %13
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.wgsl
deleted file mode 100644
index f0901ef..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromSigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : vec2<i32> = vec2<i32>(30, 40);
-  let x_1 : vec2<f32> = vec2<f32>(bitcast<vec2<u32>>(x_30));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.hlsl
deleted file mode 100644
index 1850a19..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.hlsl
+++ /dev/null
@@ -1,10 +0,0 @@
-void main_1() {
-  const uint2 x_30 = uint2(10u, 20u);
-  const float2 x_1 = float2(x_30);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.msl
deleted file mode 100644
index dc3b443..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.msl
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  uint2 const x_30 = uint2(10u, 20u);
-  float2 const x_1 = float2(x_30);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.spvasm
deleted file mode 100644
index 597f34c..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.spvasm
+++ /dev/null
@@ -1,30 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 16
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %v2uint = OpTypeVector %uint 2
-    %uint_10 = OpConstant %uint 10
-    %uint_20 = OpConstant %uint 20
-          %9 = OpConstantComposite %v2uint %uint_10 %uint_20
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-         %10 = OpConvertUToF %v2float %9
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %14 = OpLabel
-         %15 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.wgsl
deleted file mode 100644
index 7a949fd..0000000
--- a/test/unittest/reader/spirv/SpvUnaryConversionTest_ConvertUToF_Vector_FromUnsigned.spvasm.expected.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-fn main_1() {
-  let x_30 : vec2<u32> = vec2<u32>(10u, 20u);
-  let x_1 : vec2<f32> = vec2<f32>(x_30);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.hlsl
deleted file mode 100644
index 971e568..0000000
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool x_1 = !(true);
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.msl
deleted file mode 100644
index b29b9ed..0000000
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool const x_1 = !(true);
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.spvasm
deleted file mode 100644
index c5b1780..0000000
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.spvasm
+++ /dev/null
@@ -1,25 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 11
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpLogicalNot %bool %true
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %9 = OpLabel
-         %10 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.wgsl
deleted file mode 100644
index 8619a46..0000000
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Scalar.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : bool = !(true);
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.hlsl b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.hlsl
deleted file mode 100644
index 96a249d..0000000
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.hlsl
+++ /dev/null
@@ -1,9 +0,0 @@
-void main_1() {
-  const bool2 x_1 = !(bool2(true, false));
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.msl b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.msl
deleted file mode 100644
index 69e0b18..0000000
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.msl
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  bool2 const x_1 = !(bool2(true, false));
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.spvasm b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.spvasm
deleted file mode 100644
index cc48336..0000000
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.spvasm
+++ /dev/null
@@ -1,28 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 14
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-         %10 = OpConstantComposite %v2bool %true %false
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-          %5 = OpLogicalNot %v2bool %10
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-         %12 = OpLabel
-         %13 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.wgsl b/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.wgsl
deleted file mode 100644
index 71c370b..0000000
--- a/test/unittest/reader/spirv/SpvUnaryLogicalTest_LogicalNot_Vector.spvasm.expected.wgsl
+++ /dev/null
@@ -1,9 +0,0 @@
-fn main_1() {
-  let x_1 : vec2<bool> = !(vec2<bool>(true, false));
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.hlsl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.hlsl
deleted file mode 100644
index 1135368..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.msl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.spvasm b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.spvasm
deleted file mode 100644
index ca944f0..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.wgsl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.wgsl
deleted file mode 100644
index 471e2a6..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.hlsl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.hlsl
deleted file mode 100644
index 1135368..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.msl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.spvasm b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.spvasm
deleted file mode 100644
index ca944f0..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.wgsl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.wgsl
deleted file mode 100644
index 471e2a6..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.hlsl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.hlsl
deleted file mode 100644
index 1135368..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.msl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.spvasm b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.spvasm
deleted file mode 100644
index ca944f0..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.wgsl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.wgsl
deleted file mode 100644
index 471e2a6..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.hlsl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.hlsl
deleted file mode 100644
index 1135368..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.hlsl
+++ /dev/null
@@ -1,8 +0,0 @@
-void main_1() {
-  return;
-}
-
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.msl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.msl
deleted file mode 100644
index b0c5c47..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.msl
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-void main_1() {
-  return;
-}
-
-fragment void tint_symbol() {
-  main_1();
-  return;
-}
-
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.spvasm b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.spvasm
deleted file mode 100644
index ca944f0..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.spvasm
+++ /dev/null
@@ -1,22 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 8
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main"
-               OpExecutionMode %main OriginUpperLeft
-               OpName %main_1 "main_1"
-               OpName %main "main"
-       %void = OpTypeVoid
-          %1 = OpTypeFunction %void
-     %main_1 = OpFunction %void None %1
-          %4 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %1
-          %6 = OpLabel
-          %7 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.wgsl b/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.wgsl
deleted file mode 100644
index 471e2a6..0000000
--- a/test/unittest/reader/spirv/ValidIndex_SpvParserSwizzleTest_Sample_3.spvasm.expected.wgsl
+++ /dev/null
@@ -1,8 +0,0 @@
-fn main_1() {
-  return;
-}
-
-[[stage(fragment)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.hlsl b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.hlsl
deleted file mode 100644
index 970956b..0000000
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-RWByteAddressBuffer x_4 : register(u3, space0);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b2, space0) {
-  uint4 x_10[1];
-};
-
-void main_1() {
-  const int x_25 = asint(x_6[0].x);
-  x_4.Store(0u, asuint(x_25));
-  const int x_28 = asint(x_8[0].x);
-  x_4.Store(4u, asuint(x_28));
-  const int x_31 = asint(x_10[0].x);
-  x_4.Store(8u, asuint(x_31));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.msl b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.msl
deleted file mode 100644
index 396f33d..0000000
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.msl
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct result {
-  /* 0x0000 */ int res0;
-  /* 0x0004 */ int res1;
-  /* 0x0008 */ int res2;
-};
-struct block0 {
-  /* 0x0000 */ int data0;
-};
-struct block1 {
-  /* 0x0000 */ int data1;
-};
-struct block2 {
-  /* 0x0000 */ int data2;
-};
-
-void main_1(constant block0& x_6, constant block1& x_8, constant block2& x_10, device result& x_4) {
-  int const x_25 = x_6.data0;
-  x_4.res0 = x_25;
-  int const x_28 = x_8.data1;
-  x_4.res1 = x_28;
-  int const x_31 = x_10.data2;
-  x_4.res2 = x_31;
-  return;
-}
-
-kernel void tint_symbol(constant block0& x_6 [[buffer(0)]], constant block1& x_8 [[buffer(1)]], constant block2& x_10 [[buffer(2)]], device result& x_4 [[buffer(3)]]) {
-  main_1(x_6, x_8, x_10, x_4);
-  return;
-}
-
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.spvasm b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.spvasm
deleted file mode 100644
index bd8b189..0000000
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %result "result"
-               OpMemberName %result 0 "res0"
-               OpMemberName %result 1 "res1"
-               OpMemberName %result 2 "res2"
-               OpName %x_4 "x_4"
-               OpName %block0 "block0"
-               OpMemberName %block0 0 "data0"
-               OpName %x_6 "x_6"
-               OpName %block1 "block1"
-               OpMemberName %block1 0 "data1"
-               OpName %x_8 "x_8"
-               OpName %block2 "block2"
-               OpMemberName %block2 0 "data2"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %result Block
-               OpMemberDecorate %result 0 Offset 0
-               OpMemberDecorate %result 1 Offset 4
-               OpMemberDecorate %result 2 Offset 8
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 3
-               OpDecorate %block0 Block
-               OpMemberDecorate %block0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %block1 Block
-               OpMemberDecorate %block1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %block2 Block
-               OpMemberDecorate %block2 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 2
-        %int = OpTypeInt 32 1
-     %result = OpTypeStruct %int %int %int
-%_ptr_StorageBuffer_result = OpTypePointer StorageBuffer %result
-        %x_4 = OpVariable %_ptr_StorageBuffer_result StorageBuffer
-     %block0 = OpTypeStruct %int
-%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
-        %x_6 = OpVariable %_ptr_Uniform_block0 Uniform
-     %block1 = OpTypeStruct %int
-%_ptr_Uniform_block1 = OpTypePointer Uniform %block1
-        %x_8 = OpVariable %_ptr_Uniform_block1 Uniform
-     %block2 = OpTypeStruct %int
-%_ptr_Uniform_block2 = OpTypePointer Uniform %block2
-       %x_10 = OpVariable %_ptr_Uniform_block2 Uniform
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %21 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %22 = OpLoad %int %21
-         %24 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %24 %22
-         %25 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %26 = OpLoad %int %25
-         %28 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_1
-               OpStore %28 %26
-         %29 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_2
-               OpStore %32 %30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.wgsl b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.wgsl
deleted file mode 100644
index 7f8a2d7..0000000
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct result {
-  res0 : i32;
-  res1 : i32;
-  res2 : i32;
-};
-
-[[block]]
-struct block0 {
-  data0 : i32;
-};
-
-[[block]]
-struct block1 {
-  data1 : i32;
-};
-
-[[block]]
-struct block2 {
-  data2 : i32;
-};
-
-[[group(0), binding(3)]] var<storage, read_write> x_4 : result;
-
-[[group(0), binding(0)]] var<uniform> x_6 : block0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : block1;
-
-[[group(0), binding(2)]] var<uniform> x_10 : block2;
-
-fn main_1() {
-  let x_25 : i32 = x_6.data0;
-  x_4.res0 = x_25;
-  let x_28 : i32 = x_8.data1;
-  x_4.res1 = x_28;
-  let x_31 : i32 = x_10.data2;
-  x_4.res2 = x_31;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.hlsl b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.hlsl
deleted file mode 100644
index 970956b..0000000
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-RWByteAddressBuffer x_4 : register(u3, space0);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b2, space0) {
-  uint4 x_10[1];
-};
-
-void main_1() {
-  const int x_25 = asint(x_6[0].x);
-  x_4.Store(0u, asuint(x_25));
-  const int x_28 = asint(x_8[0].x);
-  x_4.Store(4u, asuint(x_28));
-  const int x_31 = asint(x_10[0].x);
-  x_4.Store(8u, asuint(x_31));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.msl b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.msl
deleted file mode 100644
index 396f33d..0000000
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.msl
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct result {
-  /* 0x0000 */ int res0;
-  /* 0x0004 */ int res1;
-  /* 0x0008 */ int res2;
-};
-struct block0 {
-  /* 0x0000 */ int data0;
-};
-struct block1 {
-  /* 0x0000 */ int data1;
-};
-struct block2 {
-  /* 0x0000 */ int data2;
-};
-
-void main_1(constant block0& x_6, constant block1& x_8, constant block2& x_10, device result& x_4) {
-  int const x_25 = x_6.data0;
-  x_4.res0 = x_25;
-  int const x_28 = x_8.data1;
-  x_4.res1 = x_28;
-  int const x_31 = x_10.data2;
-  x_4.res2 = x_31;
-  return;
-}
-
-kernel void tint_symbol(constant block0& x_6 [[buffer(0)]], constant block1& x_8 [[buffer(1)]], constant block2& x_10 [[buffer(2)]], device result& x_4 [[buffer(3)]]) {
-  main_1(x_6, x_8, x_10, x_4);
-  return;
-}
-
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.spvasm b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.spvasm
deleted file mode 100644
index bd8b189..0000000
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 36
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %result "result"
-               OpMemberName %result 0 "res0"
-               OpMemberName %result 1 "res1"
-               OpMemberName %result 2 "res2"
-               OpName %x_4 "x_4"
-               OpName %block0 "block0"
-               OpMemberName %block0 0 "data0"
-               OpName %x_6 "x_6"
-               OpName %block1 "block1"
-               OpMemberName %block1 0 "data1"
-               OpName %x_8 "x_8"
-               OpName %block2 "block2"
-               OpMemberName %block2 0 "data2"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %result Block
-               OpMemberDecorate %result 0 Offset 0
-               OpMemberDecorate %result 1 Offset 4
-               OpMemberDecorate %result 2 Offset 8
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 3
-               OpDecorate %block0 Block
-               OpMemberDecorate %block0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %block1 Block
-               OpMemberDecorate %block1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %block2 Block
-               OpMemberDecorate %block2 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 2
-        %int = OpTypeInt 32 1
-     %result = OpTypeStruct %int %int %int
-%_ptr_StorageBuffer_result = OpTypePointer StorageBuffer %result
-        %x_4 = OpVariable %_ptr_StorageBuffer_result StorageBuffer
-     %block0 = OpTypeStruct %int
-%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
-        %x_6 = OpVariable %_ptr_Uniform_block0 Uniform
-     %block1 = OpTypeStruct %int
-%_ptr_Uniform_block1 = OpTypePointer Uniform %block1
-        %x_8 = OpVariable %_ptr_Uniform_block1 Uniform
-     %block2 = OpTypeStruct %int
-%_ptr_Uniform_block2 = OpTypePointer Uniform %block2
-       %x_10 = OpVariable %_ptr_Uniform_block2 Uniform
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %21 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %22 = OpLoad %int %21
-         %24 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %24 %22
-         %25 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %26 = OpLoad %int %25
-         %28 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_1
-               OpStore %28 %26
-         %29 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_2
-               OpStore %32 %30
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.wgsl b/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.wgsl
deleted file mode 100644
index 7f8a2d7..0000000
--- a/test/vk-gl-cts/api/descriptor_set/descriptor_set_layout_binding/layout_binding_order/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct result {
-  res0 : i32;
-  res1 : i32;
-  res2 : i32;
-};
-
-[[block]]
-struct block0 {
-  data0 : i32;
-};
-
-[[block]]
-struct block1 {
-  data1 : i32;
-};
-
-[[block]]
-struct block2 {
-  data2 : i32;
-};
-
-[[group(0), binding(3)]] var<storage, read_write> x_4 : result;
-
-[[group(0), binding(0)]] var<uniform> x_6 : block0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : block1;
-
-[[group(0), binding(2)]] var<uniform> x_10 : block2;
-
-fn main_1() {
-  let x_25 : i32 = x_6.data0;
-  x_4.res0 = x_25;
-  let x_28 : i32 = x_8.data1;
-  x_4.res1 = x_28;
-  let x_31 : i32 = x_10.data2;
-  x_4.res2 = x_31;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.hlsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.hlsl
deleted file mode 100644
index a5513da..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-RWByteAddressBuffer x_4 : register(u1, space0);
-
-void main_1() {
-  x_4.Store4(0u, asuint(float4(1.0f, 2.0f, 3.0f, 4.0f)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.msl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.msl
deleted file mode 100644
index 306dcaa..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct block0 {
-  /* 0x0000 */ float4 data;
-};
-
-void main_1(device block0& x_4) {
-  x_4.data = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  return;
-}
-
-kernel void tint_symbol(device block0& x_4 [[buffer(0)]]) {
-  main_1(x_4);
-  return;
-}
-
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.spvasm b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.spvasm
deleted file mode 100644
index 9494d1f..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %block0 "block0"
-               OpMemberName %block0 0 "data"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %block0 Block
-               OpMemberDecorate %block0 0 Offset 0
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 1
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-     %block0 = OpTypeStruct %v4float
-%_ptr_StorageBuffer_block0 = OpTypePointer StorageBuffer %block0
-        %x_4 = OpVariable %_ptr_StorageBuffer_block0 StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %13 = OpAccessChain %_ptr_StorageBuffer_v4float %x_4 %uint_0
-               OpStore %13 %18
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.wgsl
deleted file mode 100644
index 40325a2..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-[[block]]
-struct block0 {
-  data : vec4<f32>;
-};
-
-[[group(0), binding(1)]] var<storage, read_write> x_4 : block0;
-
-fn main_1() {
-  x_4.data = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.hlsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.hlsl
deleted file mode 100644
index a5513da..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,12 +0,0 @@
-RWByteAddressBuffer x_4 : register(u1, space0);
-
-void main_1() {
-  x_4.Store4(0u, asuint(float4(1.0f, 2.0f, 3.0f, 4.0f)));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.msl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.msl
deleted file mode 100644
index 306dcaa..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.msl
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct block0 {
-  /* 0x0000 */ float4 data;
-};
-
-void main_1(device block0& x_4) {
-  x_4.data = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  return;
-}
-
-kernel void tint_symbol(device block0& x_4 [[buffer(0)]]) {
-  main_1(x_4);
-  return;
-}
-
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.spvasm b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.spvasm
deleted file mode 100644
index 9494d1f..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,44 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 22
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %block0 "block0"
-               OpMemberName %block0 0 "data"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %block0 Block
-               OpMemberDecorate %block0 0 Offset 0
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 1
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-     %block0 = OpTypeStruct %v4float
-%_ptr_StorageBuffer_block0 = OpTypePointer StorageBuffer %block0
-        %x_4 = OpVariable %_ptr_StorageBuffer_block0 StorageBuffer
-       %void = OpTypeVoid
-          %6 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_v4float = OpTypePointer StorageBuffer %v4float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %18 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-     %main_1 = OpFunction %void None %6
-          %9 = OpLabel
-         %13 = OpAccessChain %_ptr_StorageBuffer_v4float %x_4 %uint_0
-               OpStore %13 %18
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %6
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.wgsl
deleted file mode 100644
index 40325a2..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_compute/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,16 +0,0 @@
-[[block]]
-struct block0 {
-  data : vec4<f32>;
-};
-
-[[group(0), binding(1)]] var<storage, read_write> x_4 : block0;
-
-fn main_1() {
-  x_4.data = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.hlsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.hlsl
deleted file mode 100644
index dcab099..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = position;
-  const float4 x_27 = asfloat(x_8[0]);
-  frag_color = x_27;
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-  float4 frag_color_1;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_4 = {gl_Position, frag_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.msl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.msl
deleted file mode 100644
index 8b15107..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct block0 {
-  /* 0x0000 */ float4 in_color;
-};
-struct main_out {
-  float4 gl_Position;
-  float4 frag_color_1;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(constant block0& x_8, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float4 const x_24 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_24;
-  float4 const x_27 = x_8.in_color;
-  *(tint_symbol_7) = x_27;
-  return;
-}
-
-main_out tint_symbol_inner(constant block0& x_8, float4 position_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = position_param;
-  main_1(x_8, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_9), .frag_color_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant block0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, tint_symbol_1.position_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.spvasm b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.spvasm
deleted file mode 100644
index d9ecccd..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %frag_color_1_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %frag_color "frag_color"
-               OpName %block0 "block0"
-               OpMemberName %block0 0 "in_color"
-               OpName %x_8 "x_8"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpMemberName %main_out 1 "frag_color_1"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpDecorate %block0 Block
-               OpMemberDecorate %block0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-     %block0 = OpTypeStruct %v4float
-%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
-        %x_8 = OpVariable %_ptr_Uniform_block0 Uniform
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
-   %main_out = OpTypeStruct %v4float %v4float
-         %29 = OpTypeFunction %main_out %v4float
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %23 = OpLoad %v4float %position
-               OpStore %gl_Position %23
-         %27 = OpAccessChain %_ptr_Uniform_v4float %x_8 %uint_0
-         %28 = OpLoad %v4float %27
-               OpStore %frag_color %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %29
-%position_param = OpFunctionParameter %v4float
-         %33 = OpLabel
-               OpStore %position %position_param
-         %34 = OpFunctionCall %void %main_1
-         %35 = OpLoad %v4float %gl_Position
-         %36 = OpLoad %v4float %frag_color
-         %37 = OpCompositeConstruct %main_out %35 %36
-               OpReturnValue %37
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %39 = OpLabel
-         %41 = OpLoad %v4float %position_param_1
-         %40 = OpFunctionCall %main_out %main_inner %41
-         %42 = OpCompositeExtract %v4float %40 0
-               OpStore %gl_Position_1 %42
-         %43 = OpCompositeExtract %v4float %40 1
-               OpStore %frag_color_1_1 %43
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.wgsl
deleted file mode 100644
index 1b98fae..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-[[block]]
-struct block0 {
-  in_color : vec4<f32>;
-};
-
-var<private> position : vec4<f32>;
-
-var<private> frag_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : block0;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_24 : vec4<f32> = position;
-  gl_Position = x_24;
-  let x_27 : vec4<f32> = x_8.in_color;
-  frag_color = x_27;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position, frag_color);
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.hlsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.hlsl
deleted file mode 100644
index dcab099..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = position;
-  const float4 x_27 = asfloat(x_8[0]);
-  frag_color = x_27;
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-  float4 frag_color_1;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_4 = {gl_Position, frag_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.msl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.msl
deleted file mode 100644
index 8b15107..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct block0 {
-  /* 0x0000 */ float4 in_color;
-};
-struct main_out {
-  float4 gl_Position;
-  float4 frag_color_1;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(constant block0& x_8, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float4 const x_24 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_24;
-  float4 const x_27 = x_8.in_color;
-  *(tint_symbol_7) = x_27;
-  return;
-}
-
-main_out tint_symbol_inner(constant block0& x_8, float4 position_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = position_param;
-  main_1(x_8, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_9), .frag_color_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant block0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, tint_symbol_1.position_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.spvasm b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.spvasm
deleted file mode 100644
index d9ecccd..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %frag_color_1_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %frag_color "frag_color"
-               OpName %block0 "block0"
-               OpMemberName %block0 0 "in_color"
-               OpName %x_8 "x_8"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpMemberName %main_out 1 "frag_color_1"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpDecorate %block0 Block
-               OpMemberDecorate %block0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-     %block0 = OpTypeStruct %v4float
-%_ptr_Uniform_block0 = OpTypePointer Uniform %block0
-        %x_8 = OpVariable %_ptr_Uniform_block0 Uniform
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
-   %main_out = OpTypeStruct %v4float %v4float
-         %29 = OpTypeFunction %main_out %v4float
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %23 = OpLoad %v4float %position
-               OpStore %gl_Position %23
-         %27 = OpAccessChain %_ptr_Uniform_v4float %x_8 %uint_0
-         %28 = OpLoad %v4float %27
-               OpStore %frag_color %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %29
-%position_param = OpFunctionParameter %v4float
-         %33 = OpLabel
-               OpStore %position %position_param
-         %34 = OpFunctionCall %void %main_1
-         %35 = OpLoad %v4float %gl_Position
-         %36 = OpLoad %v4float %frag_color
-         %37 = OpCompositeConstruct %main_out %35 %36
-               OpReturnValue %37
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %39 = OpLabel
-         %41 = OpLoad %v4float %position_param_1
-         %40 = OpFunctionCall %main_out %main_inner %41
-         %42 = OpCompositeExtract %v4float %40 0
-               OpStore %gl_Position_1 %42
-         %43 = OpCompositeExtract %v4float %40 1
-               OpStore %frag_color_1_1 %43
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.wgsl
deleted file mode 100644
index 1b98fae..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-[[block]]
-struct block0 {
-  in_color : vec4<f32>;
-};
-
-var<private> position : vec4<f32>;
-
-var<private> frag_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : block0;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_24 : vec4<f32> = position;
-  gl_Position = x_24;
-  let x_27 : vec4<f32> = x_8.in_color;
-  frag_color = x_27;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position, frag_color);
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.hlsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.hlsl
deleted file mode 100644
index a918e8f..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 final_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  final_color = frag_color;
-  return;
-}
-
-struct main_out {
-  float4 final_color_1;
-};
-struct tint_symbol_1 {
-  float4 frag_color_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 final_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 frag_color_param) {
-  frag_color = frag_color_param;
-  main_1();
-  const main_out tint_symbol_3 = {final_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.frag_color_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.final_color_1 = inner_result.final_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.msl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.msl
deleted file mode 100644
index b1a11b2..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 final_color_1;
-};
-struct tint_symbol_2 {
-  float4 frag_color_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  float4 final_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_12 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_12;
-  return;
-}
-
-main_out tint_symbol_inner(float4 frag_color_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = frag_color_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.final_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.frag_color_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.final_color_1 = inner_result.final_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.spvasm b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.spvasm
deleted file mode 100644
index 227546a..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %frag_color_param_1 %final_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %frag_color_param_1 "frag_color_param_1"
-               OpName %final_color_1_1 "final_color_1_1"
-               OpName %final_color "final_color"
-               OpName %frag_color "frag_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "final_color_1"
-               OpName %main_inner "main_inner"
-               OpName %frag_color_param "frag_color_param"
-               OpName %main "main"
-               OpDecorate %frag_color_param_1 Location 0
-               OpDecorate %final_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%frag_color_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%final_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%final_color = OpVariable %_ptr_Private_v4float Private %7
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %16 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %15 = OpLoad %v4float %frag_color
-               OpStore %final_color %15
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %16
-%frag_color_param = OpFunctionParameter %v4float
-         %20 = OpLabel
-               OpStore %frag_color %frag_color_param
-         %21 = OpFunctionCall %void %main_1
-         %22 = OpLoad %v4float %final_color
-         %23 = OpCompositeConstruct %main_out %22
-               OpReturnValue %23
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %27 = OpLoad %v4float %frag_color_param_1
-         %26 = OpFunctionCall %main_out %main_inner %27
-         %28 = OpCompositeExtract %v4float %26 0
-               OpStore %final_color_1_1 %28
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.wgsl
deleted file mode 100644
index 0901c1f..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> final_color : vec4<f32>;
-
-var<private> frag_color : vec4<f32>;
-
-fn main_1() {
-  let x_12 : vec4<f32> = frag_color;
-  final_color = x_12;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  final_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[location(0)]] frag_color_param : vec4<f32>) -> main_out {
-  frag_color = frag_color_param;
-  main_1();
-  return main_out(final_color);
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.hlsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.hlsl
deleted file mode 100644
index a918e8f..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 final_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  final_color = frag_color;
-  return;
-}
-
-struct main_out {
-  float4 final_color_1;
-};
-struct tint_symbol_1 {
-  float4 frag_color_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 final_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 frag_color_param) {
-  frag_color = frag_color_param;
-  main_1();
-  const main_out tint_symbol_3 = {final_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.frag_color_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.final_color_1 = inner_result.final_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.msl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.msl
deleted file mode 100644
index b1a11b2..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 final_color_1;
-};
-struct tint_symbol_2 {
-  float4 frag_color_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  float4 final_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_12 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_12;
-  return;
-}
-
-main_out tint_symbol_inner(float4 frag_color_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = frag_color_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.final_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.frag_color_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.final_color_1 = inner_result.final_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.spvasm b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.spvasm
deleted file mode 100644
index 227546a..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %frag_color_param_1 %final_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %frag_color_param_1 "frag_color_param_1"
-               OpName %final_color_1_1 "final_color_1_1"
-               OpName %final_color "final_color"
-               OpName %frag_color "frag_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "final_color_1"
-               OpName %main_inner "main_inner"
-               OpName %frag_color_param "frag_color_param"
-               OpName %main "main"
-               OpDecorate %frag_color_param_1 Location 0
-               OpDecorate %final_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%frag_color_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%final_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%final_color = OpVariable %_ptr_Private_v4float Private %7
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %16 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %15 = OpLoad %v4float %frag_color
-               OpStore %final_color %15
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %16
-%frag_color_param = OpFunctionParameter %v4float
-         %20 = OpLabel
-               OpStore %frag_color %frag_color_param
-         %21 = OpFunctionCall %void %main_1
-         %22 = OpLoad %v4float %final_color
-         %23 = OpCompositeConstruct %main_out %22
-               OpReturnValue %23
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %27 = OpLoad %v4float %frag_color_param_1
-         %26 = OpFunctionCall %main_out %main_inner %27
-         %28 = OpCompositeExtract %v4float %26 0
-               OpStore %final_color_1_1 %28
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.wgsl b/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.wgsl
deleted file mode 100644
index 0901c1f..0000000
--- a/test/vk-gl-cts/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> final_color : vec4<f32>;
-
-var<private> frag_color : vec4<f32>;
-
-fn main_1() {
-  let x_12 : vec4<f32> = frag_color;
-  final_color = x_12;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  final_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[location(0)]] frag_color_param : vec4<f32>) -> main_out {
-  frag_color = frag_color_param;
-  main_1();
-  return main_out(final_color);
-}
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1667248..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = position;
-  frag_color = (position * 0.5f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-  float4 frag_color_1;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD1;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position, frag_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.msl b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.msl
deleted file mode 100644
index f0ab629..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-  float4 frag_color_1;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn1)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float4 const x_21 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_21;
-  float4 const x_23 = *(tint_symbol_5);
-  *(tint_symbol_7) = (x_23 * 0.5f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = position_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_9), .frag_color_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3c0d01a..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %frag_color_1_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpMemberName %main_out 1 "frag_color_1"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %frag_color_1_1 Location 1
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-  %float_0_5 = OpConstant %float 0.5
-   %main_out = OpTypeStruct %v4float %v4float
-         %24 = OpTypeFunction %main_out %v4float
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-         %20 = OpLoad %v4float %position
-               OpStore %gl_Position %20
-         %21 = OpLoad %v4float %position
-         %23 = OpVectorTimesScalar %v4float %21 %float_0_5
-               OpStore %frag_color %23
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %24
-%position_param = OpFunctionParameter %v4float
-         %28 = OpLabel
-               OpStore %position %position_param
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %gl_Position
-         %31 = OpLoad %v4float %frag_color
-         %32 = OpCompositeConstruct %main_out %30 %31
-               OpReturnValue %32
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %34 = OpLabel
-         %36 = OpLoad %v4float %position_param_1
-         %35 = OpFunctionCall %main_out %main_inner %36
-         %37 = OpCompositeExtract %v4float %35 0
-               OpStore %gl_Position_1 %37
-         %38 = OpCompositeExtract %v4float %35 1
-               OpStore %frag_color_1_1 %38
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b9cc524..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_21 : vec4<f32> = position;
-  gl_Position = x_21;
-  let x_23 : vec4<f32> = position;
-  frag_color = (x_23 * 0.5);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-  [[location(1)]]
-  frag_color_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position, frag_color);
-}
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1667248..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = position;
-  frag_color = (position * 0.5f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-  float4 frag_color_1;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD1;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position, frag_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.msl b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.msl
deleted file mode 100644
index f0ab629..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-  float4 frag_color_1;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn1)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float4 const x_21 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_21;
-  float4 const x_23 = *(tint_symbol_5);
-  *(tint_symbol_7) = (x_23 * 0.5f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = position_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_9), .frag_color_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3c0d01a..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %frag_color_1_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpMemberName %main_out 1 "frag_color_1"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %frag_color_1_1 Location 1
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-  %float_0_5 = OpConstant %float 0.5
-   %main_out = OpTypeStruct %v4float %v4float
-         %24 = OpTypeFunction %main_out %v4float
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-         %20 = OpLoad %v4float %position
-               OpStore %gl_Position %20
-         %21 = OpLoad %v4float %position
-         %23 = OpVectorTimesScalar %v4float %21 %float_0_5
-               OpStore %frag_color %23
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %24
-%position_param = OpFunctionParameter %v4float
-         %28 = OpLabel
-               OpStore %position %position_param
-         %29 = OpFunctionCall %void %main_1
-         %30 = OpLoad %v4float %gl_Position
-         %31 = OpLoad %v4float %frag_color
-         %32 = OpCompositeConstruct %main_out %30 %31
-               OpReturnValue %32
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %34 = OpLabel
-         %36 = OpLoad %v4float %position_param_1
-         %35 = OpFunctionCall %main_out %main_inner %36
-         %37 = OpCompositeExtract %v4float %35 0
-               OpStore %gl_Position_1 %37
-         %38 = OpCompositeExtract %v4float %35 1
-               OpStore %frag_color_1_1 %38
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b9cc524..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_21 : vec4<f32> = position;
-  gl_Position = x_21;
-  let x_23 : vec4<f32> = position;
-  frag_color = (x_23 * 0.5);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-  [[location(1)]]
-  frag_color_1 : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position, frag_color);
-}
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.hlsl b/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.hlsl
deleted file mode 100644
index 267afe9..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int2 iv = int2(0, 0);
-  const float4 x_28 = frag_color;
-  iv = int2((float2(x_28.x, x_28.y) * 256.0f));
-  const int x_33 = iv.y;
-  if ((((x_33 / 2) & 64) == 64)) {
-    color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    color_out = float4(0.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_1 {
-  float4 frag_color_param : TEXCOORD1;
-};
-struct tint_symbol_2 {
-  float4 color_out_1 : SV_Target0;
-};
-
-main_out main_inner(float4 frag_color_param) {
-  frag_color = frag_color_param;
-  main_1();
-  const main_out tint_symbol_3 = {color_out};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.frag_color_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.msl b/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.msl
deleted file mode 100644
index cdf6e49..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.msl
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_2 {
-  float4 frag_color_param [[user(locn1)]];
-};
-struct tint_symbol_3 {
-  float4 color_out_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int2 iv = 0;
-  float4 const x_28 = *(tint_symbol_5);
-  iv = int2((float2(x_28.x, x_28.y) * 256.0f));
-  int const x_33 = iv.y;
-  if ((((x_33 / 2) & 64) == 64)) {
-    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_6) = float4(0.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 frag_color_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = frag_color_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.color_out_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.frag_color_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.spvasm b/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.spvasm
deleted file mode 100644
index a53c84d..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %frag_color_param_1 %color_out_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %frag_color_param_1 "frag_color_param_1"
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %frag_color "frag_color"
-               OpName %color_out "color_out"
-               OpName %main_1 "main_1"
-               OpName %iv "iv"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpName %main_inner "main_inner"
-               OpName %frag_color_param "frag_color_param"
-               OpName %main "main"
-               OpDecorate %frag_color_param_1 Location 1
-               OpDecorate %color_out_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%frag_color_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-  %color_out = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %19 = OpConstantNull %v2int
-    %v2float = OpTypeVector %float 2
-  %float_256 = OpConstant %float 256
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_2 = OpConstant %int 2
-     %int_64 = OpConstant %int 64
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %44 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %45 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %46 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %iv = OpVariable %_ptr_Function_v2int Function %19
-         %20 = OpLoad %v4float %frag_color
-         %23 = OpCompositeExtract %float %20 0
-         %24 = OpCompositeExtract %float %20 1
-         %25 = OpCompositeConstruct %v2float %23 %24
-         %27 = OpVectorTimesScalar %v2float %25 %float_256
-         %21 = OpConvertFToS %v2int %27
-               OpStore %iv %21
-         %31 = OpAccessChain %_ptr_Function_int %iv %uint_1
-         %32 = OpLoad %int %31
-         %34 = OpSDiv %int %32 %int_2
-         %36 = OpBitwiseAnd %int %34 %int_64
-         %37 = OpIEqual %bool %36 %int_64
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpStore %color_out %44
-               OpBranch %39
-         %41 = OpLabel
-               OpStore %color_out %45
-               OpBranch %39
-         %39 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %46
-%frag_color_param = OpFunctionParameter %v4float
-         %50 = OpLabel
-               OpStore %frag_color %frag_color_param
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %color_out
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %55 = OpLabel
-         %57 = OpLoad %v4float %frag_color_param_1
-         %56 = OpFunctionCall %main_out %main_inner %57
-         %58 = OpCompositeExtract %v4float %56 0
-               OpStore %color_out_1_1 %58
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.wgsl b/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.wgsl
deleted file mode 100644
index cbbd626..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> frag_color : vec4<f32>;
-
-var<private> color_out : vec4<f32>;
-
-fn main_1() {
-  var iv : vec2<i32>;
-  let x_28 : vec4<f32> = frag_color;
-  iv = vec2<i32>((vec2<f32>(x_28.x, x_28.y) * 256.0));
-  let x_33 : i32 = iv.y;
-  if ((((x_33 / 2) & 64) == 64)) {
-    color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    color_out = vec4<f32>(0.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[location(1)]] frag_color_param : vec4<f32>) -> main_out {
-  frag_color = frag_color_param;
-  main_1();
-  return main_out(color_out);
-}
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.hlsl b/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.hlsl
deleted file mode 100644
index 267afe9..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int2 iv = int2(0, 0);
-  const float4 x_28 = frag_color;
-  iv = int2((float2(x_28.x, x_28.y) * 256.0f));
-  const int x_33 = iv.y;
-  if ((((x_33 / 2) & 64) == 64)) {
-    color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    color_out = float4(0.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_1 {
-  float4 frag_color_param : TEXCOORD1;
-};
-struct tint_symbol_2 {
-  float4 color_out_1 : SV_Target0;
-};
-
-main_out main_inner(float4 frag_color_param) {
-  frag_color = frag_color_param;
-  main_1();
-  const main_out tint_symbol_3 = {color_out};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.frag_color_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.msl b/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.msl
deleted file mode 100644
index cdf6e49..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.msl
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_2 {
-  float4 frag_color_param [[user(locn1)]];
-};
-struct tint_symbol_3 {
-  float4 color_out_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int2 iv = 0;
-  float4 const x_28 = *(tint_symbol_5);
-  iv = int2((float2(x_28.x, x_28.y) * 256.0f));
-  int const x_33 = iv.y;
-  if ((((x_33 / 2) & 64) == 64)) {
-    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_6) = float4(0.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 frag_color_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = frag_color_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.color_out_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.frag_color_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.spvasm b/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.spvasm
deleted file mode 100644
index a53c84d..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %frag_color_param_1 %color_out_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %frag_color_param_1 "frag_color_param_1"
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %frag_color "frag_color"
-               OpName %color_out "color_out"
-               OpName %main_1 "main_1"
-               OpName %iv "iv"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpName %main_inner "main_inner"
-               OpName %frag_color_param "frag_color_param"
-               OpName %main "main"
-               OpDecorate %frag_color_param_1 Location 1
-               OpDecorate %color_out_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%frag_color_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-  %color_out = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %19 = OpConstantNull %v2int
-    %v2float = OpTypeVector %float 2
-  %float_256 = OpConstant %float 256
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_2 = OpConstant %int 2
-     %int_64 = OpConstant %int 64
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %44 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %45 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %46 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %iv = OpVariable %_ptr_Function_v2int Function %19
-         %20 = OpLoad %v4float %frag_color
-         %23 = OpCompositeExtract %float %20 0
-         %24 = OpCompositeExtract %float %20 1
-         %25 = OpCompositeConstruct %v2float %23 %24
-         %27 = OpVectorTimesScalar %v2float %25 %float_256
-         %21 = OpConvertFToS %v2int %27
-               OpStore %iv %21
-         %31 = OpAccessChain %_ptr_Function_int %iv %uint_1
-         %32 = OpLoad %int %31
-         %34 = OpSDiv %int %32 %int_2
-         %36 = OpBitwiseAnd %int %34 %int_64
-         %37 = OpIEqual %bool %36 %int_64
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpStore %color_out %44
-               OpBranch %39
-         %41 = OpLabel
-               OpStore %color_out %45
-               OpBranch %39
-         %39 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %46
-%frag_color_param = OpFunctionParameter %v4float
-         %50 = OpLabel
-               OpStore %frag_color %frag_color_param
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %color_out
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %55 = OpLabel
-         %57 = OpLoad %v4float %frag_color_param_1
-         %56 = OpFunctionCall %main_out %main_inner %57
-         %58 = OpCompositeExtract %v4float %56 0
-               OpStore %color_out_1_1 %58
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.wgsl b/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.wgsl
deleted file mode 100644
index cbbd626..0000000
--- a/test/vk-gl-cts/combined_operations/negintdivand/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> frag_color : vec4<f32>;
-
-var<private> color_out : vec4<f32>;
-
-fn main_1() {
-  var iv : vec2<i32>;
-  let x_28 : vec4<f32> = frag_color;
-  iv = vec2<i32>((vec2<f32>(x_28.x, x_28.y) * 256.0));
-  let x_33 : i32 = iv.y;
-  if ((((x_33 / 2) & 64) == 64)) {
-    color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    color_out = vec4<f32>(0.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[location(1)]] frag_color_param : vec4<f32>) -> main_out {
-  frag_color = frag_color_param;
-  main_1();
-  return main_out(color_out);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4b4febe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x = 0;
-  x = 0;
-  if ((float4(1.0f, 1.0f, 1.0f, 1.0f)[clamp(x, 0, 3)] >= 1.0f)) {
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.msl
deleted file mode 100644
index a12c755..0000000
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int x = 0;
-  x = 0;
-  int const x_5 = x;
-  if ((float4(1.0f, 1.0f, 1.0f, 1.0f)[clamp(x_5, 0, 3)] >= 1.0f)) {
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index fbf1c80..0000000
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,71 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-         %21 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x "x"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-         %19 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %30 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %15
-               OpStore %x %int_0
-         %17 = OpLoad %int %x
-         %20 = OpExtInst %int %21 SClamp %17 %int_0 %int_3
-         %23 = OpVectorExtractDynamic %float %19 %20
-         %24 = OpFOrdGreaterThanEqual %bool %23 %float_1
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-               OpStore %x_GLF_color %29
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %30
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %main_1
-         %35 = OpLoad %v4float %x_GLF_color
-         %36 = OpCompositeConstruct %main_out %35
-               OpReturnValue %36
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %38 = OpLabel
-         %39 = OpFunctionCall %main_out %main_inner
-         %40 = OpCompositeExtract %v4float %39 0
-               OpStore %x_GLF_color_1_1 %40
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8432d48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x : i32;
-  x = 0;
-  let x_5 : i32 = x;
-  if ((vec4<f32>(1.0, 1.0, 1.0, 1.0)[clamp(x_5, 0, 3)] >= 1.0)) {
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4b4febe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,30 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x = 0;
-  x = 0;
-  if ((float4(1.0f, 1.0f, 1.0f, 1.0f)[clamp(x, 0, 3)] >= 1.0f)) {
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.msl
deleted file mode 100644
index a12c755..0000000
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int x = 0;
-  x = 0;
-  int const x_5 = x;
-  if ((float4(1.0f, 1.0f, 1.0f, 1.0f)[clamp(x_5, 0, 3)] >= 1.0f)) {
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index fbf1c80..0000000
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,71 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-         %21 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x "x"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-         %19 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %30 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %15
-               OpStore %x %int_0
-         %17 = OpLoad %int %x
-         %20 = OpExtInst %int %21 SClamp %17 %int_0 %int_3
-         %23 = OpVectorExtractDynamic %float %19 %20
-         %24 = OpFOrdGreaterThanEqual %bool %23 %float_1
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-               OpStore %x_GLF_color %29
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %30
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %main_1
-         %35 = OpLoad %v4float %x_GLF_color
-         %36 = OpCompositeConstruct %main_out %35
-               OpReturnValue %36
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %38 = OpLabel
-         %39 = OpFunctionCall %main_out %main_inner
-         %40 = OpCompositeExtract %v4float %39 0
-               OpStore %x_GLF_color_1_1 %40
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8432d48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/access-new-vector-inside-if-condition/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x : i32;
-  x = 0;
-  let x_5 : i32 = x;
-  if ((vec4<f32>(1.0, 1.0, 1.0, 1.0)[clamp(x_5, 0, 3)] >= 1.0)) {
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f017b19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,174 +0,0 @@
-struct tmp_struct {
-  int nmb[1];
-};
-
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_24[1] = (int[1])0;
-  bool x_68 = false;
-  int x_17 = 0;
-  int x_18 = 0;
-  int x_19 = 0;
-  int x_20 = 0;
-  bool x_69 = false;
-  float tmp_float = 0.0f;
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  while (true) {
-    int x_25 = 0;
-    float3 x_101 = float3(0.0f, 0.0f, 0.0f);
-    bool x_79_phi = false;
-    int x_26_phi = 0;
-    const float x_75 = asfloat(x_11[0].y);
-    tmp_float = x_75;
-    const float3 x_76 = float3(x_75, x_75, x_75);
-    color = x_76;
-    const int tint_symbol_2[1] = {0};
-    const tmp_struct tint_symbol_3 = {tint_symbol_2};
-    x_24 = tint_symbol_3.nmb;
-    x_68 = false;
-    x_79_phi = false;
-    while (true) {
-      int x_21_phi = 0;
-      int x_25_phi = 0;
-      bool x_93_phi = false;
-      const bool x_79 = x_79_phi;
-      x_18 = 1;
-      x_21_phi = 1;
-      while (true) {
-        const int x_21 = x_21_phi;
-        x_25_phi = 0;
-        x_93_phi = x_79;
-        if ((x_21 > 10)) {
-        } else {
-          break;
-        }
-        const int x_22 = (x_21 - 1);
-        x_19 = x_22;
-        const int x_23 = x_24[x_22];
-        if ((x_23 == 1)) {
-          x_68 = true;
-          x_17 = 1;
-          x_25_phi = 1;
-          x_93_phi = true;
-          break;
-        }
-        x_18 = x_22;
-        {
-          x_21_phi = x_22;
-        }
-      }
-      x_25 = x_25_phi;
-      const bool x_93 = x_93_phi;
-      x_26_phi = x_25;
-      if (x_93) {
-        break;
-      }
-      x_68 = true;
-      x_17 = -1;
-      x_26_phi = -1;
-      break;
-      {
-        x_79_phi = false;
-      }
-    }
-    const int x_26 = x_26_phi;
-    x_20 = x_26;
-    if ((x_26 == -1)) {
-      discard;
-    } else {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      const float2 x_100 = (float2(x_76.y, x_76.z) + float2(1.0f, 1.0f));
-      x_101 = float3(x_76.x, x_100.x, x_100.y);
-      color = x_101;
-      const float x_103 = asfloat(x_11[0].x);
-      if ((x_103 > 1.0f)) {
-        x_69 = true;
-        break;
-      }
-    }
-    x_GLF_color = float4(x_101.x, x_101.y, x_101.z, 1.0f);
-    x_69 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int binarySearch_struct_tmp_struct_i1_1_1_(inout tmp_struct obj) {
-  bool x_112 = false;
-  int x_16 = 0;
-  int one = 0;
-  int zero = 0;
-  int x_27 = 0;
-  bool x_114_phi = false;
-  int x_28_phi = 0;
-  x_114_phi = false;
-  while (true) {
-    int x_15_phi = 0;
-    int x_27_phi = 0;
-    bool x_128_phi = false;
-    const bool x_114 = x_114_phi;
-    one = 1;
-    x_15_phi = 1;
-    while (true) {
-      const int x_15 = x_15_phi;
-      x_27_phi = 0;
-      x_128_phi = x_114;
-      if ((x_15 > 10)) {
-      } else {
-        break;
-      }
-      const int x_13 = (x_15 - 1);
-      zero = x_13;
-      const int x_14 = obj.nmb[x_13];
-      if ((x_14 == 1)) {
-        x_112 = true;
-        x_16 = 1;
-        x_27_phi = 1;
-        x_128_phi = true;
-        break;
-      }
-      one = x_13;
-      {
-        x_15_phi = x_13;
-      }
-    }
-    x_27 = x_27_phi;
-    const bool x_128 = x_128_phi;
-    x_28_phi = x_27;
-    if (x_128) {
-      break;
-    }
-    x_112 = true;
-    x_16 = -1;
-    x_28_phi = -1;
-    break;
-    {
-      x_114_phi = false;
-    }
-  }
-  return x_28_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.msl
deleted file mode 100644
index 51b5870..0000000
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,180 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct tmp_struct {
-  tint_array_wrapper nmb;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_11, thread float4* const tint_symbol_5) {
-  tint_array_wrapper x_24 = {};
-  bool x_68 = false;
-  int x_17 = 0;
-  int x_18 = 0;
-  int x_19 = 0;
-  int x_20 = 0;
-  bool x_69 = false;
-  float tmp_float = 0.0f;
-  float3 color = 0.0f;
-  while (true) {
-    int x_25 = 0;
-    float3 x_101 = 0.0f;
-    bool x_79_phi = false;
-    int x_26_phi = 0;
-    float const x_75 = x_11.injectionSwitch.y;
-    tmp_float = x_75;
-    float3 const x_76 = float3(x_75, x_75, x_75);
-    color = x_76;
-    tint_array_wrapper const tint_symbol_2 = {.arr={0}};
-    tmp_struct const tint_symbol_3 = {.nmb=tint_symbol_2};
-    x_24 = tint_symbol_3.nmb;
-    x_68 = false;
-    x_79_phi = false;
-    while (true) {
-      int x_21_phi = 0;
-      int x_25_phi = 0;
-      bool x_93_phi = false;
-      bool const x_79 = x_79_phi;
-      x_18 = 1;
-      x_21_phi = 1;
-      while (true) {
-        int const x_21 = x_21_phi;
-        x_25_phi = 0;
-        x_93_phi = x_79;
-        if ((x_21 > 10)) {
-        } else {
-          break;
-        }
-        int const x_22 = as_type<int>((as_type<uint>(x_21) - as_type<uint>(1)));
-        x_19 = x_22;
-        int const x_23 = x_24.arr[x_22];
-        if ((x_23 == 1)) {
-          x_68 = true;
-          x_17 = 1;
-          x_25_phi = 1;
-          x_93_phi = true;
-          break;
-        }
-        x_18 = x_22;
-        {
-          x_21_phi = x_22;
-        }
-      }
-      x_25 = x_25_phi;
-      bool const x_93 = x_93_phi;
-      x_26_phi = x_25;
-      if (x_93) {
-        break;
-      }
-      x_68 = true;
-      x_17 = -1;
-      x_26_phi = -1;
-      break;
-      {
-        x_79_phi = false;
-      }
-    }
-    int const x_26 = x_26_phi;
-    x_20 = x_26;
-    if ((x_26 == -1)) {
-      discard_fragment();
-    } else {
-      *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      float2 const x_100 = (float2(x_76.y, x_76.z) + float2(1.0f, 1.0f));
-      x_101 = float3(x_76.x, x_100.x, x_100.y);
-      color = x_101;
-      float const x_103 = x_11.injectionSwitch.x;
-      if ((x_103 > 1.0f)) {
-        x_69 = true;
-        break;
-      }
-    }
-    *(tint_symbol_5) = float4(x_101.x, x_101.y, x_101.z, 1.0f);
-    x_69 = true;
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_11, thread float4* const tint_symbol_6) {
-  main_1(x_11, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_11 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_11, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int binarySearch_struct_tmp_struct_i1_1_1_(thread tmp_struct* const obj) {
-  bool x_112 = false;
-  int x_16 = 0;
-  int one = 0;
-  int zero = 0;
-  int x_27 = 0;
-  bool x_114_phi = false;
-  int x_28_phi = 0;
-  x_114_phi = false;
-  while (true) {
-    int x_15_phi = 0;
-    int x_27_phi = 0;
-    bool x_128_phi = false;
-    bool const x_114 = x_114_phi;
-    one = 1;
-    x_15_phi = 1;
-    while (true) {
-      int const x_15 = x_15_phi;
-      x_27_phi = 0;
-      x_128_phi = x_114;
-      if ((x_15 > 10)) {
-      } else {
-        break;
-      }
-      int const x_13 = as_type<int>((as_type<uint>(x_15) - as_type<uint>(1)));
-      zero = x_13;
-      int const x_14 = (*(obj)).nmb.arr[x_13];
-      if ((x_14 == 1)) {
-        x_112 = true;
-        x_16 = 1;
-        x_27_phi = 1;
-        x_128_phi = true;
-        break;
-      }
-      one = x_13;
-      {
-        x_15_phi = x_13;
-      }
-    }
-    x_27 = x_27_phi;
-    bool const x_128 = x_128_phi;
-    x_28_phi = x_27;
-    if (x_128) {
-      break;
-    }
-    x_112 = true;
-    x_16 = -1;
-    x_28_phi = -1;
-    break;
-    {
-      x_114_phi = false;
-    }
-  }
-  int const x_28 = x_28_phi;
-  return x_28;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 9670704..0000000
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,343 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 176
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_24 "x_24"
-               OpName %x_68 "x_68"
-               OpName %x_17 "x_17"
-               OpName %x_18 "x_18"
-               OpName %x_19 "x_19"
-               OpName %x_20 "x_20"
-               OpName %x_69 "x_69"
-               OpName %tmp_float "tmp_float"
-               OpName %color "color"
-               OpName %x_25 "x_25"
-               OpName %x_101 "x_101"
-               OpName %x_79_phi "x_79_phi"
-               OpName %x_26_phi "x_26_phi"
-               OpName %tmp_struct "tmp_struct"
-               OpMemberName %tmp_struct 0 "nmb"
-               OpName %x_21_phi "x_21_phi"
-               OpName %x_25_phi "x_25_phi"
-               OpName %x_93_phi "x_93_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %binarySearch_struct_tmp_struct_i1_1_1_ "binarySearch_struct_tmp_struct_i1_1_1_"
-               OpName %obj "obj"
-               OpName %x_112 "x_112"
-               OpName %x_16 "x_16"
-               OpName %one "one"
-               OpName %zero "zero"
-               OpName %x_27 "x_27"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_28_phi "x_28_phi"
-               OpName %x_15_phi "x_15_phi"
-               OpName %x_27_phi "x_27_phi"
-               OpName %x_128_phi "x_128_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %tmp_struct 0 Offset 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Function__arr_int_uint_1 = OpTypePointer Function %_arr_int_uint_1
-         %22 = OpConstantNull %_arr_int_uint_1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %37 = OpConstantNull %float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %41 = OpConstantNull %v3float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
- %tmp_struct = OpTypeStruct %_arr_int_uint_1
-      %int_0 = OpConstant %int 0
-         %57 = OpConstantComposite %_arr_int_uint_1 %int_0
-         %58 = OpConstantComposite %tmp_struct %57
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-       %true = OpConstantTrue %bool
-     %int_n1 = OpConstant %int -1
-    %float_0 = OpConstant %float 0
-         %98 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-        %103 = OpConstantComposite %v2float %float_1 %float_1
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-        %123 = OpTypeFunction %main_out
-%_ptr_Function_tmp_struct = OpTypePointer Function %tmp_struct
-        %134 = OpTypeFunction %int %_ptr_Function_tmp_struct
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_24 = OpVariable %_ptr_Function__arr_int_uint_1 Function %22
-       %x_68 = OpVariable %_ptr_Function_bool Function %27
-       %x_17 = OpVariable %_ptr_Function_int Function %30
-       %x_18 = OpVariable %_ptr_Function_int Function %30
-       %x_19 = OpVariable %_ptr_Function_int Function %30
-       %x_20 = OpVariable %_ptr_Function_int Function %30
-       %x_69 = OpVariable %_ptr_Function_bool Function %27
-  %tmp_float = OpVariable %_ptr_Function_float Function %37
-      %color = OpVariable %_ptr_Function_v3float Function %41
-       %x_25 = OpVariable %_ptr_Function_int Function %30
-      %x_101 = OpVariable %_ptr_Function_v3float Function %41
-   %x_79_phi = OpVariable %_ptr_Function_bool Function %27
-   %x_26_phi = OpVariable %_ptr_Function_int Function %30
-   %x_21_phi = OpVariable %_ptr_Function_int Function %30
-   %x_25_phi = OpVariable %_ptr_Function_int Function %30
-   %x_93_phi = OpVariable %_ptr_Function_bool Function %27
-               OpStore %x_68 %false
-               OpStore %x_69 %false
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_1
-         %53 = OpLoad %float %52
-               OpStore %tmp_float %53
-         %54 = OpCompositeConstruct %v3float %53 %53 %53
-               OpStore %color %54
-         %59 = OpCompositeExtract %_arr_int_uint_1 %58 0
-               OpStore %x_24 %59
-               OpStore %x_68 %false
-               OpStore %x_79_phi %false
-               OpBranch %60
-         %60 = OpLabel
-               OpLoopMerge %61 %62 None
-               OpBranch %63
-         %63 = OpLabel
-         %67 = OpLoad %bool %x_79_phi
-               OpStore %x_18 %int_1
-               OpStore %x_21_phi %int_1
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %x_21_phi
-               OpStore %x_25_phi %int_0
-               OpStore %x_93_phi %67
-         %75 = OpSGreaterThan %bool %73 %int_10
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-               OpBranch %76
-         %78 = OpLabel
-               OpBranch %70
-         %76 = OpLabel
-         %79 = OpISub %int %73 %int_1
-               OpStore %x_19 %79
-         %80 = OpAccessChain %_ptr_Function_int %x_24 %79
-         %81 = OpLoad %int %80
-         %82 = OpIEqual %bool %81 %int_1
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-               OpStore %x_68 %true
-               OpStore %x_17 %int_1
-               OpStore %x_25_phi %int_1
-               OpStore %x_93_phi %true
-               OpBranch %70
-         %83 = OpLabel
-               OpStore %x_18 %79
-               OpBranch %71
-         %71 = OpLabel
-               OpStore %x_21_phi %79
-               OpBranch %69
-         %70 = OpLabel
-         %86 = OpLoad %int %x_25_phi
-               OpStore %x_25 %86
-         %87 = OpLoad %bool %x_93_phi
-         %88 = OpLoad %int %x_25
-               OpStore %x_26_phi %88
-               OpSelectionMerge %89 None
-               OpBranchConditional %87 %90 %89
-         %90 = OpLabel
-               OpBranch %61
-         %89 = OpLabel
-               OpStore %x_68 %true
-               OpStore %x_17 %int_n1
-               OpStore %x_26_phi %int_n1
-               OpBranch %61
-         %62 = OpLabel
-               OpStore %x_79_phi %false
-               OpBranch %60
-         %61 = OpLabel
-         %92 = OpLoad %int %x_26_phi
-               OpStore %x_20 %92
-         %93 = OpIEqual %bool %92 %int_n1
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-               OpKill
-         %96 = OpLabel
-               OpStore %x_GLF_color %98
-         %99 = OpCompositeExtract %float %54 1
-        %100 = OpCompositeExtract %float %54 2
-        %101 = OpCompositeConstruct %v2float %99 %100
-        %104 = OpFAdd %v2float %101 %103
-        %105 = OpCompositeExtract %float %54 0
-        %106 = OpCompositeExtract %float %104 0
-        %107 = OpCompositeExtract %float %104 1
-        %108 = OpCompositeConstruct %v3float %105 %106 %107
-               OpStore %x_101 %108
-        %109 = OpLoad %v3float %x_101
-               OpStore %color %109
-        %110 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_0
-        %111 = OpLoad %float %110
-        %112 = OpFOrdGreaterThan %bool %111 %float_1
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %113
-        %114 = OpLabel
-               OpStore %x_69 %true
-               OpBranch %43
-        %113 = OpLabel
-               OpBranch %94
-         %94 = OpLabel
-        %115 = OpAccessChain %_ptr_Function_float %x_101 %uint_0
-        %116 = OpLoad %float %115
-        %117 = OpAccessChain %_ptr_Function_float %x_101 %uint_1
-        %118 = OpLoad %float %117
-        %120 = OpAccessChain %_ptr_Function_float %x_101 %uint_2
-        %121 = OpLoad %float %120
-        %122 = OpCompositeConstruct %v4float %116 %118 %121 %float_1
-               OpStore %x_GLF_color %122
-               OpStore %x_69 %true
-               OpBranch %43
-         %44 = OpLabel
-               OpBranch %42
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %123
-        %126 = OpLabel
-        %127 = OpFunctionCall %void %main_1
-        %128 = OpLoad %v4float %x_GLF_color
-        %129 = OpCompositeConstruct %main_out %128
-               OpReturnValue %129
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %131 = OpLabel
-        %132 = OpFunctionCall %main_out %main_inner
-        %133 = OpCompositeExtract %v4float %132 0
-               OpStore %x_GLF_color_1_1 %133
-               OpReturn
-               OpFunctionEnd
-%binarySearch_struct_tmp_struct_i1_1_1_ = OpFunction %int None %134
-        %obj = OpFunctionParameter %_ptr_Function_tmp_struct
-        %138 = OpLabel
-      %x_112 = OpVariable %_ptr_Function_bool Function %27
-       %x_16 = OpVariable %_ptr_Function_int Function %30
-        %one = OpVariable %_ptr_Function_int Function %30
-       %zero = OpVariable %_ptr_Function_int Function %30
-       %x_27 = OpVariable %_ptr_Function_int Function %30
-  %x_114_phi = OpVariable %_ptr_Function_bool Function %27
-   %x_28_phi = OpVariable %_ptr_Function_int Function %30
-   %x_15_phi = OpVariable %_ptr_Function_int Function %30
-   %x_27_phi = OpVariable %_ptr_Function_int Function %30
-  %x_128_phi = OpVariable %_ptr_Function_bool Function %27
-               OpStore %x_112 %false
-               OpStore %x_114_phi %false
-               OpBranch %146
-        %146 = OpLabel
-               OpLoopMerge %147 %148 None
-               OpBranch %149
-        %149 = OpLabel
-        %153 = OpLoad %bool %x_114_phi
-               OpStore %one %int_1
-               OpStore %x_15_phi %int_1
-               OpBranch %154
-        %154 = OpLabel
-               OpLoopMerge %155 %156 None
-               OpBranch %157
-        %157 = OpLabel
-        %158 = OpLoad %int %x_15_phi
-               OpStore %x_27_phi %int_0
-               OpStore %x_128_phi %153
-        %159 = OpSGreaterThan %bool %158 %int_10
-               OpSelectionMerge %160 None
-               OpBranchConditional %159 %161 %162
-        %161 = OpLabel
-               OpBranch %160
-        %162 = OpLabel
-               OpBranch %155
-        %160 = OpLabel
-        %163 = OpISub %int %158 %int_1
-               OpStore %zero %163
-        %165 = OpAccessChain %_ptr_Function_int %obj %uint_0 %163
-        %166 = OpLoad %int %165
-        %167 = OpIEqual %bool %166 %int_1
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %168
-        %169 = OpLabel
-               OpStore %x_112 %true
-               OpStore %x_16 %int_1
-               OpStore %x_27_phi %int_1
-               OpStore %x_128_phi %true
-               OpBranch %155
-        %168 = OpLabel
-               OpStore %one %163
-               OpBranch %156
-        %156 = OpLabel
-               OpStore %x_15_phi %163
-               OpBranch %154
-        %155 = OpLabel
-        %170 = OpLoad %int %x_27_phi
-               OpStore %x_27 %170
-        %171 = OpLoad %bool %x_128_phi
-        %172 = OpLoad %int %x_27
-               OpStore %x_28_phi %172
-               OpSelectionMerge %173 None
-               OpBranchConditional %171 %174 %173
-        %174 = OpLabel
-               OpBranch %147
-        %173 = OpLabel
-               OpStore %x_112 %true
-               OpStore %x_16 %int_n1
-               OpStore %x_28_phi %int_n1
-               OpBranch %147
-        %148 = OpLabel
-               OpStore %x_114_phi %false
-               OpBranch %146
-        %147 = OpLabel
-        %175 = OpLoad %int %x_28_phi
-               OpReturnValue %175
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 58324d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,172 +0,0 @@
-struct tmp_struct {
-  nmb : array<i32, 1>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_24 : array<i32, 1>;
-  var x_68 : bool = false;
-  var x_17 : i32;
-  var x_18 : i32;
-  var x_19 : i32;
-  var x_20 : i32;
-  var x_69 : bool = false;
-  var tmp_float : f32;
-  var color : vec3<f32>;
-  loop {
-    var x_25 : i32;
-    var x_101 : vec3<f32>;
-    var x_79_phi : bool;
-    var x_26_phi : i32;
-    let x_75 : f32 = x_11.injectionSwitch.y;
-    tmp_float = x_75;
-    let x_76 : vec3<f32> = vec3<f32>(x_75, x_75, x_75);
-    color = x_76;
-    x_24 = tmp_struct(array<i32, 1>(0)).nmb;
-    x_68 = false;
-    x_79_phi = false;
-    loop {
-      var x_21_phi : i32;
-      var x_25_phi : i32;
-      var x_93_phi : bool;
-      let x_79 : bool = x_79_phi;
-      x_18 = 1;
-      x_21_phi = 1;
-      loop {
-        let x_21 : i32 = x_21_phi;
-        x_25_phi = 0;
-        x_93_phi = x_79;
-        if ((x_21 > 10)) {
-        } else {
-          break;
-        }
-        let x_22 : i32 = (x_21 - 1);
-        x_19 = x_22;
-        let x_23 : i32 = x_24[x_22];
-        if ((x_23 == 1)) {
-          x_68 = true;
-          x_17 = 1;
-          x_25_phi = 1;
-          x_93_phi = true;
-          break;
-        }
-        x_18 = x_22;
-
-        continuing {
-          x_21_phi = x_22;
-        }
-      }
-      x_25 = x_25_phi;
-      let x_93 : bool = x_93_phi;
-      x_26_phi = x_25;
-      if (x_93) {
-        break;
-      }
-      x_68 = true;
-      x_17 = -1;
-      x_26_phi = -1;
-      break;
-
-      continuing {
-        x_79_phi = false;
-      }
-    }
-    let x_26 : i32 = x_26_phi;
-    x_20 = x_26;
-    if ((x_26 == -1)) {
-      discard;
-    } else {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      let x_100 : vec2<f32> = (vec2<f32>(x_76.y, x_76.z) + vec2<f32>(1.0, 1.0));
-      x_101 = vec3<f32>(x_76.x, x_100.x, x_100.y);
-      color = x_101;
-      let x_103 : f32 = x_11.injectionSwitch.x;
-      if ((x_103 > 1.0)) {
-        x_69 = true;
-        break;
-      }
-    }
-    x_GLF_color = vec4<f32>(x_101.x, x_101.y, x_101.z, 1.0);
-    x_69 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn binarySearch_struct_tmp_struct_i1_1_1_(obj : ptr<function, tmp_struct>) -> i32 {
-  var x_112 : bool = false;
-  var x_16 : i32;
-  var one : i32;
-  var zero : i32;
-  var x_27 : i32;
-  var x_114_phi : bool;
-  var x_28_phi : i32;
-  x_114_phi = false;
-  loop {
-    var x_15_phi : i32;
-    var x_27_phi : i32;
-    var x_128_phi : bool;
-    let x_114 : bool = x_114_phi;
-    one = 1;
-    x_15_phi = 1;
-    loop {
-      let x_15 : i32 = x_15_phi;
-      x_27_phi = 0;
-      x_128_phi = x_114;
-      if ((x_15 > 10)) {
-      } else {
-        break;
-      }
-      let x_13 : i32 = (x_15 - 1);
-      zero = x_13;
-      let x_14 : i32 = (*(obj)).nmb[x_13];
-      if ((x_14 == 1)) {
-        x_112 = true;
-        x_16 = 1;
-        x_27_phi = 1;
-        x_128_phi = true;
-        break;
-      }
-      one = x_13;
-
-      continuing {
-        x_15_phi = x_13;
-      }
-    }
-    x_27 = x_27_phi;
-    let x_128 : bool = x_128_phi;
-    x_28_phi = x_27;
-    if (x_128) {
-      break;
-    }
-    x_112 = true;
-    x_16 = -1;
-    x_28_phi = -1;
-    break;
-
-    continuing {
-      x_114_phi = false;
-    }
-  }
-  let x_28 : i32 = x_28_phi;
-  return x_28;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f017b19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,174 +0,0 @@
-struct tmp_struct {
-  int nmb[1];
-};
-
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_24[1] = (int[1])0;
-  bool x_68 = false;
-  int x_17 = 0;
-  int x_18 = 0;
-  int x_19 = 0;
-  int x_20 = 0;
-  bool x_69 = false;
-  float tmp_float = 0.0f;
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  while (true) {
-    int x_25 = 0;
-    float3 x_101 = float3(0.0f, 0.0f, 0.0f);
-    bool x_79_phi = false;
-    int x_26_phi = 0;
-    const float x_75 = asfloat(x_11[0].y);
-    tmp_float = x_75;
-    const float3 x_76 = float3(x_75, x_75, x_75);
-    color = x_76;
-    const int tint_symbol_2[1] = {0};
-    const tmp_struct tint_symbol_3 = {tint_symbol_2};
-    x_24 = tint_symbol_3.nmb;
-    x_68 = false;
-    x_79_phi = false;
-    while (true) {
-      int x_21_phi = 0;
-      int x_25_phi = 0;
-      bool x_93_phi = false;
-      const bool x_79 = x_79_phi;
-      x_18 = 1;
-      x_21_phi = 1;
-      while (true) {
-        const int x_21 = x_21_phi;
-        x_25_phi = 0;
-        x_93_phi = x_79;
-        if ((x_21 > 10)) {
-        } else {
-          break;
-        }
-        const int x_22 = (x_21 - 1);
-        x_19 = x_22;
-        const int x_23 = x_24[x_22];
-        if ((x_23 == 1)) {
-          x_68 = true;
-          x_17 = 1;
-          x_25_phi = 1;
-          x_93_phi = true;
-          break;
-        }
-        x_18 = x_22;
-        {
-          x_21_phi = x_22;
-        }
-      }
-      x_25 = x_25_phi;
-      const bool x_93 = x_93_phi;
-      x_26_phi = x_25;
-      if (x_93) {
-        break;
-      }
-      x_68 = true;
-      x_17 = -1;
-      x_26_phi = -1;
-      break;
-      {
-        x_79_phi = false;
-      }
-    }
-    const int x_26 = x_26_phi;
-    x_20 = x_26;
-    if ((x_26 == -1)) {
-      discard;
-    } else {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      const float2 x_100 = (float2(x_76.y, x_76.z) + float2(1.0f, 1.0f));
-      x_101 = float3(x_76.x, x_100.x, x_100.y);
-      color = x_101;
-      const float x_103 = asfloat(x_11[0].x);
-      if ((x_103 > 1.0f)) {
-        x_69 = true;
-        break;
-      }
-    }
-    x_GLF_color = float4(x_101.x, x_101.y, x_101.z, 1.0f);
-    x_69 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int binarySearch_struct_tmp_struct_i1_1_1_(inout tmp_struct obj) {
-  bool x_112 = false;
-  int x_16 = 0;
-  int one = 0;
-  int zero = 0;
-  int x_27 = 0;
-  bool x_114_phi = false;
-  int x_28_phi = 0;
-  x_114_phi = false;
-  while (true) {
-    int x_15_phi = 0;
-    int x_27_phi = 0;
-    bool x_128_phi = false;
-    const bool x_114 = x_114_phi;
-    one = 1;
-    x_15_phi = 1;
-    while (true) {
-      const int x_15 = x_15_phi;
-      x_27_phi = 0;
-      x_128_phi = x_114;
-      if ((x_15 > 10)) {
-      } else {
-        break;
-      }
-      const int x_13 = (x_15 - 1);
-      zero = x_13;
-      const int x_14 = obj.nmb[x_13];
-      if ((x_14 == 1)) {
-        x_112 = true;
-        x_16 = 1;
-        x_27_phi = 1;
-        x_128_phi = true;
-        break;
-      }
-      one = x_13;
-      {
-        x_15_phi = x_13;
-      }
-    }
-    x_27 = x_27_phi;
-    const bool x_128 = x_128_phi;
-    x_28_phi = x_27;
-    if (x_128) {
-      break;
-    }
-    x_112 = true;
-    x_16 = -1;
-    x_28_phi = -1;
-    break;
-    {
-      x_114_phi = false;
-    }
-  }
-  return x_28_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.msl
deleted file mode 100644
index 51b5870..0000000
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,180 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct tmp_struct {
-  tint_array_wrapper nmb;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_11, thread float4* const tint_symbol_5) {
-  tint_array_wrapper x_24 = {};
-  bool x_68 = false;
-  int x_17 = 0;
-  int x_18 = 0;
-  int x_19 = 0;
-  int x_20 = 0;
-  bool x_69 = false;
-  float tmp_float = 0.0f;
-  float3 color = 0.0f;
-  while (true) {
-    int x_25 = 0;
-    float3 x_101 = 0.0f;
-    bool x_79_phi = false;
-    int x_26_phi = 0;
-    float const x_75 = x_11.injectionSwitch.y;
-    tmp_float = x_75;
-    float3 const x_76 = float3(x_75, x_75, x_75);
-    color = x_76;
-    tint_array_wrapper const tint_symbol_2 = {.arr={0}};
-    tmp_struct const tint_symbol_3 = {.nmb=tint_symbol_2};
-    x_24 = tint_symbol_3.nmb;
-    x_68 = false;
-    x_79_phi = false;
-    while (true) {
-      int x_21_phi = 0;
-      int x_25_phi = 0;
-      bool x_93_phi = false;
-      bool const x_79 = x_79_phi;
-      x_18 = 1;
-      x_21_phi = 1;
-      while (true) {
-        int const x_21 = x_21_phi;
-        x_25_phi = 0;
-        x_93_phi = x_79;
-        if ((x_21 > 10)) {
-        } else {
-          break;
-        }
-        int const x_22 = as_type<int>((as_type<uint>(x_21) - as_type<uint>(1)));
-        x_19 = x_22;
-        int const x_23 = x_24.arr[x_22];
-        if ((x_23 == 1)) {
-          x_68 = true;
-          x_17 = 1;
-          x_25_phi = 1;
-          x_93_phi = true;
-          break;
-        }
-        x_18 = x_22;
-        {
-          x_21_phi = x_22;
-        }
-      }
-      x_25 = x_25_phi;
-      bool const x_93 = x_93_phi;
-      x_26_phi = x_25;
-      if (x_93) {
-        break;
-      }
-      x_68 = true;
-      x_17 = -1;
-      x_26_phi = -1;
-      break;
-      {
-        x_79_phi = false;
-      }
-    }
-    int const x_26 = x_26_phi;
-    x_20 = x_26;
-    if ((x_26 == -1)) {
-      discard_fragment();
-    } else {
-      *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      float2 const x_100 = (float2(x_76.y, x_76.z) + float2(1.0f, 1.0f));
-      x_101 = float3(x_76.x, x_100.x, x_100.y);
-      color = x_101;
-      float const x_103 = x_11.injectionSwitch.x;
-      if ((x_103 > 1.0f)) {
-        x_69 = true;
-        break;
-      }
-    }
-    *(tint_symbol_5) = float4(x_101.x, x_101.y, x_101.z, 1.0f);
-    x_69 = true;
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_11, thread float4* const tint_symbol_6) {
-  main_1(x_11, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_11 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_11, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int binarySearch_struct_tmp_struct_i1_1_1_(thread tmp_struct* const obj) {
-  bool x_112 = false;
-  int x_16 = 0;
-  int one = 0;
-  int zero = 0;
-  int x_27 = 0;
-  bool x_114_phi = false;
-  int x_28_phi = 0;
-  x_114_phi = false;
-  while (true) {
-    int x_15_phi = 0;
-    int x_27_phi = 0;
-    bool x_128_phi = false;
-    bool const x_114 = x_114_phi;
-    one = 1;
-    x_15_phi = 1;
-    while (true) {
-      int const x_15 = x_15_phi;
-      x_27_phi = 0;
-      x_128_phi = x_114;
-      if ((x_15 > 10)) {
-      } else {
-        break;
-      }
-      int const x_13 = as_type<int>((as_type<uint>(x_15) - as_type<uint>(1)));
-      zero = x_13;
-      int const x_14 = (*(obj)).nmb.arr[x_13];
-      if ((x_14 == 1)) {
-        x_112 = true;
-        x_16 = 1;
-        x_27_phi = 1;
-        x_128_phi = true;
-        break;
-      }
-      one = x_13;
-      {
-        x_15_phi = x_13;
-      }
-    }
-    x_27 = x_27_phi;
-    bool const x_128 = x_128_phi;
-    x_28_phi = x_27;
-    if (x_128) {
-      break;
-    }
-    x_112 = true;
-    x_16 = -1;
-    x_28_phi = -1;
-    break;
-    {
-      x_114_phi = false;
-    }
-  }
-  int const x_28 = x_28_phi;
-  return x_28;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9670704..0000000
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,343 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 176
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_24 "x_24"
-               OpName %x_68 "x_68"
-               OpName %x_17 "x_17"
-               OpName %x_18 "x_18"
-               OpName %x_19 "x_19"
-               OpName %x_20 "x_20"
-               OpName %x_69 "x_69"
-               OpName %tmp_float "tmp_float"
-               OpName %color "color"
-               OpName %x_25 "x_25"
-               OpName %x_101 "x_101"
-               OpName %x_79_phi "x_79_phi"
-               OpName %x_26_phi "x_26_phi"
-               OpName %tmp_struct "tmp_struct"
-               OpMemberName %tmp_struct 0 "nmb"
-               OpName %x_21_phi "x_21_phi"
-               OpName %x_25_phi "x_25_phi"
-               OpName %x_93_phi "x_93_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %binarySearch_struct_tmp_struct_i1_1_1_ "binarySearch_struct_tmp_struct_i1_1_1_"
-               OpName %obj "obj"
-               OpName %x_112 "x_112"
-               OpName %x_16 "x_16"
-               OpName %one "one"
-               OpName %zero "zero"
-               OpName %x_27 "x_27"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_28_phi "x_28_phi"
-               OpName %x_15_phi "x_15_phi"
-               OpName %x_27_phi "x_27_phi"
-               OpName %x_128_phi "x_128_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %tmp_struct 0 Offset 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Function__arr_int_uint_1 = OpTypePointer Function %_arr_int_uint_1
-         %22 = OpConstantNull %_arr_int_uint_1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %37 = OpConstantNull %float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %41 = OpConstantNull %v3float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
- %tmp_struct = OpTypeStruct %_arr_int_uint_1
-      %int_0 = OpConstant %int 0
-         %57 = OpConstantComposite %_arr_int_uint_1 %int_0
-         %58 = OpConstantComposite %tmp_struct %57
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-       %true = OpConstantTrue %bool
-     %int_n1 = OpConstant %int -1
-    %float_0 = OpConstant %float 0
-         %98 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-        %103 = OpConstantComposite %v2float %float_1 %float_1
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-        %123 = OpTypeFunction %main_out
-%_ptr_Function_tmp_struct = OpTypePointer Function %tmp_struct
-        %134 = OpTypeFunction %int %_ptr_Function_tmp_struct
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_24 = OpVariable %_ptr_Function__arr_int_uint_1 Function %22
-       %x_68 = OpVariable %_ptr_Function_bool Function %27
-       %x_17 = OpVariable %_ptr_Function_int Function %30
-       %x_18 = OpVariable %_ptr_Function_int Function %30
-       %x_19 = OpVariable %_ptr_Function_int Function %30
-       %x_20 = OpVariable %_ptr_Function_int Function %30
-       %x_69 = OpVariable %_ptr_Function_bool Function %27
-  %tmp_float = OpVariable %_ptr_Function_float Function %37
-      %color = OpVariable %_ptr_Function_v3float Function %41
-       %x_25 = OpVariable %_ptr_Function_int Function %30
-      %x_101 = OpVariable %_ptr_Function_v3float Function %41
-   %x_79_phi = OpVariable %_ptr_Function_bool Function %27
-   %x_26_phi = OpVariable %_ptr_Function_int Function %30
-   %x_21_phi = OpVariable %_ptr_Function_int Function %30
-   %x_25_phi = OpVariable %_ptr_Function_int Function %30
-   %x_93_phi = OpVariable %_ptr_Function_bool Function %27
-               OpStore %x_68 %false
-               OpStore %x_69 %false
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_1
-         %53 = OpLoad %float %52
-               OpStore %tmp_float %53
-         %54 = OpCompositeConstruct %v3float %53 %53 %53
-               OpStore %color %54
-         %59 = OpCompositeExtract %_arr_int_uint_1 %58 0
-               OpStore %x_24 %59
-               OpStore %x_68 %false
-               OpStore %x_79_phi %false
-               OpBranch %60
-         %60 = OpLabel
-               OpLoopMerge %61 %62 None
-               OpBranch %63
-         %63 = OpLabel
-         %67 = OpLoad %bool %x_79_phi
-               OpStore %x_18 %int_1
-               OpStore %x_21_phi %int_1
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %x_21_phi
-               OpStore %x_25_phi %int_0
-               OpStore %x_93_phi %67
-         %75 = OpSGreaterThan %bool %73 %int_10
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-               OpBranch %76
-         %78 = OpLabel
-               OpBranch %70
-         %76 = OpLabel
-         %79 = OpISub %int %73 %int_1
-               OpStore %x_19 %79
-         %80 = OpAccessChain %_ptr_Function_int %x_24 %79
-         %81 = OpLoad %int %80
-         %82 = OpIEqual %bool %81 %int_1
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-               OpStore %x_68 %true
-               OpStore %x_17 %int_1
-               OpStore %x_25_phi %int_1
-               OpStore %x_93_phi %true
-               OpBranch %70
-         %83 = OpLabel
-               OpStore %x_18 %79
-               OpBranch %71
-         %71 = OpLabel
-               OpStore %x_21_phi %79
-               OpBranch %69
-         %70 = OpLabel
-         %86 = OpLoad %int %x_25_phi
-               OpStore %x_25 %86
-         %87 = OpLoad %bool %x_93_phi
-         %88 = OpLoad %int %x_25
-               OpStore %x_26_phi %88
-               OpSelectionMerge %89 None
-               OpBranchConditional %87 %90 %89
-         %90 = OpLabel
-               OpBranch %61
-         %89 = OpLabel
-               OpStore %x_68 %true
-               OpStore %x_17 %int_n1
-               OpStore %x_26_phi %int_n1
-               OpBranch %61
-         %62 = OpLabel
-               OpStore %x_79_phi %false
-               OpBranch %60
-         %61 = OpLabel
-         %92 = OpLoad %int %x_26_phi
-               OpStore %x_20 %92
-         %93 = OpIEqual %bool %92 %int_n1
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-               OpKill
-         %96 = OpLabel
-               OpStore %x_GLF_color %98
-         %99 = OpCompositeExtract %float %54 1
-        %100 = OpCompositeExtract %float %54 2
-        %101 = OpCompositeConstruct %v2float %99 %100
-        %104 = OpFAdd %v2float %101 %103
-        %105 = OpCompositeExtract %float %54 0
-        %106 = OpCompositeExtract %float %104 0
-        %107 = OpCompositeExtract %float %104 1
-        %108 = OpCompositeConstruct %v3float %105 %106 %107
-               OpStore %x_101 %108
-        %109 = OpLoad %v3float %x_101
-               OpStore %color %109
-        %110 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_0
-        %111 = OpLoad %float %110
-        %112 = OpFOrdGreaterThan %bool %111 %float_1
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %113
-        %114 = OpLabel
-               OpStore %x_69 %true
-               OpBranch %43
-        %113 = OpLabel
-               OpBranch %94
-         %94 = OpLabel
-        %115 = OpAccessChain %_ptr_Function_float %x_101 %uint_0
-        %116 = OpLoad %float %115
-        %117 = OpAccessChain %_ptr_Function_float %x_101 %uint_1
-        %118 = OpLoad %float %117
-        %120 = OpAccessChain %_ptr_Function_float %x_101 %uint_2
-        %121 = OpLoad %float %120
-        %122 = OpCompositeConstruct %v4float %116 %118 %121 %float_1
-               OpStore %x_GLF_color %122
-               OpStore %x_69 %true
-               OpBranch %43
-         %44 = OpLabel
-               OpBranch %42
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %123
-        %126 = OpLabel
-        %127 = OpFunctionCall %void %main_1
-        %128 = OpLoad %v4float %x_GLF_color
-        %129 = OpCompositeConstruct %main_out %128
-               OpReturnValue %129
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %131 = OpLabel
-        %132 = OpFunctionCall %main_out %main_inner
-        %133 = OpCompositeExtract %v4float %132 0
-               OpStore %x_GLF_color_1_1 %133
-               OpReturn
-               OpFunctionEnd
-%binarySearch_struct_tmp_struct_i1_1_1_ = OpFunction %int None %134
-        %obj = OpFunctionParameter %_ptr_Function_tmp_struct
-        %138 = OpLabel
-      %x_112 = OpVariable %_ptr_Function_bool Function %27
-       %x_16 = OpVariable %_ptr_Function_int Function %30
-        %one = OpVariable %_ptr_Function_int Function %30
-       %zero = OpVariable %_ptr_Function_int Function %30
-       %x_27 = OpVariable %_ptr_Function_int Function %30
-  %x_114_phi = OpVariable %_ptr_Function_bool Function %27
-   %x_28_phi = OpVariable %_ptr_Function_int Function %30
-   %x_15_phi = OpVariable %_ptr_Function_int Function %30
-   %x_27_phi = OpVariable %_ptr_Function_int Function %30
-  %x_128_phi = OpVariable %_ptr_Function_bool Function %27
-               OpStore %x_112 %false
-               OpStore %x_114_phi %false
-               OpBranch %146
-        %146 = OpLabel
-               OpLoopMerge %147 %148 None
-               OpBranch %149
-        %149 = OpLabel
-        %153 = OpLoad %bool %x_114_phi
-               OpStore %one %int_1
-               OpStore %x_15_phi %int_1
-               OpBranch %154
-        %154 = OpLabel
-               OpLoopMerge %155 %156 None
-               OpBranch %157
-        %157 = OpLabel
-        %158 = OpLoad %int %x_15_phi
-               OpStore %x_27_phi %int_0
-               OpStore %x_128_phi %153
-        %159 = OpSGreaterThan %bool %158 %int_10
-               OpSelectionMerge %160 None
-               OpBranchConditional %159 %161 %162
-        %161 = OpLabel
-               OpBranch %160
-        %162 = OpLabel
-               OpBranch %155
-        %160 = OpLabel
-        %163 = OpISub %int %158 %int_1
-               OpStore %zero %163
-        %165 = OpAccessChain %_ptr_Function_int %obj %uint_0 %163
-        %166 = OpLoad %int %165
-        %167 = OpIEqual %bool %166 %int_1
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %168
-        %169 = OpLabel
-               OpStore %x_112 %true
-               OpStore %x_16 %int_1
-               OpStore %x_27_phi %int_1
-               OpStore %x_128_phi %true
-               OpBranch %155
-        %168 = OpLabel
-               OpStore %one %163
-               OpBranch %156
-        %156 = OpLabel
-               OpStore %x_15_phi %163
-               OpBranch %154
-        %155 = OpLabel
-        %170 = OpLoad %int %x_27_phi
-               OpStore %x_27 %170
-        %171 = OpLoad %bool %x_128_phi
-        %172 = OpLoad %int %x_27
-               OpStore %x_28_phi %172
-               OpSelectionMerge %173 None
-               OpBranchConditional %171 %174 %173
-        %174 = OpLabel
-               OpBranch %147
-        %173 = OpLabel
-               OpStore %x_112 %true
-               OpStore %x_16 %int_n1
-               OpStore %x_28_phi %int_n1
-               OpBranch %147
-        %148 = OpLabel
-               OpStore %x_114_phi %false
-               OpBranch %146
-        %147 = OpLabel
-        %175 = OpLoad %int %x_28_phi
-               OpReturnValue %175
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 58324d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/always-discarding-function/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,172 +0,0 @@
-struct tmp_struct {
-  nmb : array<i32, 1>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_24 : array<i32, 1>;
-  var x_68 : bool = false;
-  var x_17 : i32;
-  var x_18 : i32;
-  var x_19 : i32;
-  var x_20 : i32;
-  var x_69 : bool = false;
-  var tmp_float : f32;
-  var color : vec3<f32>;
-  loop {
-    var x_25 : i32;
-    var x_101 : vec3<f32>;
-    var x_79_phi : bool;
-    var x_26_phi : i32;
-    let x_75 : f32 = x_11.injectionSwitch.y;
-    tmp_float = x_75;
-    let x_76 : vec3<f32> = vec3<f32>(x_75, x_75, x_75);
-    color = x_76;
-    x_24 = tmp_struct(array<i32, 1>(0)).nmb;
-    x_68 = false;
-    x_79_phi = false;
-    loop {
-      var x_21_phi : i32;
-      var x_25_phi : i32;
-      var x_93_phi : bool;
-      let x_79 : bool = x_79_phi;
-      x_18 = 1;
-      x_21_phi = 1;
-      loop {
-        let x_21 : i32 = x_21_phi;
-        x_25_phi = 0;
-        x_93_phi = x_79;
-        if ((x_21 > 10)) {
-        } else {
-          break;
-        }
-        let x_22 : i32 = (x_21 - 1);
-        x_19 = x_22;
-        let x_23 : i32 = x_24[x_22];
-        if ((x_23 == 1)) {
-          x_68 = true;
-          x_17 = 1;
-          x_25_phi = 1;
-          x_93_phi = true;
-          break;
-        }
-        x_18 = x_22;
-
-        continuing {
-          x_21_phi = x_22;
-        }
-      }
-      x_25 = x_25_phi;
-      let x_93 : bool = x_93_phi;
-      x_26_phi = x_25;
-      if (x_93) {
-        break;
-      }
-      x_68 = true;
-      x_17 = -1;
-      x_26_phi = -1;
-      break;
-
-      continuing {
-        x_79_phi = false;
-      }
-    }
-    let x_26 : i32 = x_26_phi;
-    x_20 = x_26;
-    if ((x_26 == -1)) {
-      discard;
-    } else {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      let x_100 : vec2<f32> = (vec2<f32>(x_76.y, x_76.z) + vec2<f32>(1.0, 1.0));
-      x_101 = vec3<f32>(x_76.x, x_100.x, x_100.y);
-      color = x_101;
-      let x_103 : f32 = x_11.injectionSwitch.x;
-      if ((x_103 > 1.0)) {
-        x_69 = true;
-        break;
-      }
-    }
-    x_GLF_color = vec4<f32>(x_101.x, x_101.y, x_101.z, 1.0);
-    x_69 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn binarySearch_struct_tmp_struct_i1_1_1_(obj : ptr<function, tmp_struct>) -> i32 {
-  var x_112 : bool = false;
-  var x_16 : i32;
-  var one : i32;
-  var zero : i32;
-  var x_27 : i32;
-  var x_114_phi : bool;
-  var x_28_phi : i32;
-  x_114_phi = false;
-  loop {
-    var x_15_phi : i32;
-    var x_27_phi : i32;
-    var x_128_phi : bool;
-    let x_114 : bool = x_114_phi;
-    one = 1;
-    x_15_phi = 1;
-    loop {
-      let x_15 : i32 = x_15_phi;
-      x_27_phi = 0;
-      x_128_phi = x_114;
-      if ((x_15 > 10)) {
-      } else {
-        break;
-      }
-      let x_13 : i32 = (x_15 - 1);
-      zero = x_13;
-      let x_14 : i32 = (*(obj)).nmb[x_13];
-      if ((x_14 == 1)) {
-        x_112 = true;
-        x_16 = 1;
-        x_27_phi = 1;
-        x_128_phi = true;
-        break;
-      }
-      one = x_13;
-
-      continuing {
-        x_15_phi = x_13;
-      }
-    }
-    x_27 = x_27_phi;
-    let x_128 : bool = x_128_phi;
-    x_28_phi = x_27;
-    if (x_128) {
-      break;
-    }
-    x_112 = true;
-    x_16 = -1;
-    x_28_phi = -1;
-    break;
-
-    continuing {
-      x_114_phi = false;
-    }
-  }
-  let x_28 : i32 = x_28_phi;
-  return x_28;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 73b6df0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,160 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_30 : register(b0, space0) {
-  uint4 x_30[1];
-};
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_92 = i;
-  const int x_94 = obj.numbers[x_92];
-  temp = x_94;
-  const int x_95 = i;
-  const int x_96 = j;
-  const int x_98 = obj.numbers[x_96];
-  obj.numbers[x_95] = x_98;
-  const int x_100 = j;
-  obj.numbers[x_100] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_104 = h;
-  const int x_106 = obj.numbers[x_104];
-  pivot = x_106;
-  const int x_107 = l;
-  i_1 = (x_107 - 1);
-  const int x_109 = l;
-  j_1 = x_109;
-  while (true) {
-    const int x_114 = j_1;
-    const int x_115 = h;
-    if ((x_114 <= (x_115 - 1))) {
-    } else {
-      break;
-    }
-    const int x_121 = obj.numbers[j_1];
-    if ((x_121 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_135 = h;
-  param_3 = x_135;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_141 = (top + 1);
-  top = x_141;
-  stack[x_141] = l_1;
-  const int x_145 = (top + 1);
-  top = x_145;
-  stack[x_145] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_155 = top;
-    top = (x_155 - 1);
-    const int x_158 = stack[x_155];
-    h_1 = x_158;
-    const int x_159 = top;
-    top = (x_159 - 1);
-    const int x_162 = stack[x_159];
-    l_1 = x_162;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_165 = performPartition_i1_i1_(param_4, param_5);
-    p = x_165;
-    if (((p - 1) > l_1)) {
-      const int x_173 = (top + 1);
-      top = x_173;
-      stack[x_173] = l_1;
-      const int x_177 = (top + 1);
-      top = x_177;
-      stack[x_177] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_188 = (top + 1);
-      top = x_188;
-      stack[x_188] = (p + 1);
-      const int x_193 = (top + 1);
-      top = x_193;
-      stack[x_193] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_71 = i_2;
-      const int x_74 = obj.numbers[i_2];
-      const int x_77 = obj.numbers[i_2];
-      obj.numbers[x_71] = (x_74 * x_77);
-    }
-  }
-  quicksort_();
-  const int x_84 = obj.numbers[0];
-  const int x_86 = obj.numbers[4];
-  if ((x_84 < x_86)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 1.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4afc658..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_3) {
-  int temp = 0;
-  int const x_92 = *(i);
-  int const x_94 = (*(tint_symbol_3)).numbers.arr[x_92];
-  temp = x_94;
-  int const x_95 = *(i);
-  int const x_96 = *(j);
-  int const x_98 = (*(tint_symbol_3)).numbers.arr[x_96];
-  (*(tint_symbol_3)).numbers.arr[x_95] = x_98;
-  int const x_100 = *(j);
-  int const x_101 = temp;
-  (*(tint_symbol_3)).numbers.arr[x_100] = x_101;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_4) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_104 = *(h);
-  int const x_106 = (*(tint_symbol_4)).numbers.arr[x_104];
-  pivot = x_106;
-  int const x_107 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_107) - as_type<uint>(1)));
-  int const x_109 = *(l);
-  j_1 = x_109;
-  while (true) {
-    int const x_114 = j_1;
-    int const x_115 = *(h);
-    if ((x_114 <= as_type<int>((as_type<uint>(x_115) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_119 = j_1;
-    int const x_121 = (*(tint_symbol_4)).numbers.arr[x_119];
-    int const x_122 = pivot;
-    if ((x_121 <= x_122)) {
-      int const x_126 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-      int const x_128 = i_1;
-      param = x_128;
-      int const x_129 = j_1;
-      param_1 = x_129;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_4);
-    }
-    {
-      int const x_131 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_131) + as_type<uint>(1)));
-    }
-  }
-  int const x_133 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
-  int const x_135 = *(h);
-  param_3 = x_135;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_4);
-  int const x_137 = i_1;
-  return as_type<int>((as_type<uint>(x_137) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_5) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_140 = top;
-  int const x_141 = as_type<int>((as_type<uint>(x_140) + as_type<uint>(1)));
-  top = x_141;
-  int const x_142 = l_1;
-  stack.arr[x_141] = x_142;
-  int const x_144 = top;
-  int const x_145 = as_type<int>((as_type<uint>(x_144) + as_type<uint>(1)));
-  top = x_145;
-  int const x_146 = h_1;
-  stack.arr[x_145] = x_146;
-  while (true) {
-    int const x_152 = top;
-    if ((x_152 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_155 = top;
-    top = as_type<int>((as_type<uint>(x_155) - as_type<uint>(1)));
-    int const x_158 = stack.arr[x_155];
-    h_1 = x_158;
-    int const x_159 = top;
-    top = as_type<int>((as_type<uint>(x_159) - as_type<uint>(1)));
-    int const x_162 = stack.arr[x_159];
-    l_1 = x_162;
-    int const x_163 = l_1;
-    param_4 = x_163;
-    int const x_164 = h_1;
-    param_5 = x_164;
-    int const x_165 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_5);
-    p = x_165;
-    int const x_166 = p;
-    int const x_168 = l_1;
-    if ((as_type<int>((as_type<uint>(x_166) - as_type<uint>(1))) > x_168)) {
-      int const x_172 = top;
-      int const x_173 = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
-      top = x_173;
-      int const x_174 = l_1;
-      stack.arr[x_173] = x_174;
-      int const x_176 = top;
-      int const x_177 = as_type<int>((as_type<uint>(x_176) + as_type<uint>(1)));
-      top = x_177;
-      int const x_178 = p;
-      stack.arr[x_177] = as_type<int>((as_type<uint>(x_178) - as_type<uint>(1)));
-    }
-    int const x_181 = p;
-    int const x_183 = h_1;
-    if ((as_type<int>((as_type<uint>(x_181) + as_type<uint>(1))) < x_183)) {
-      int const x_187 = top;
-      int const x_188 = as_type<int>((as_type<uint>(x_187) + as_type<uint>(1)));
-      top = x_188;
-      int const x_189 = p;
-      stack.arr[x_188] = as_type<int>((as_type<uint>(x_189) + as_type<uint>(1)));
-      int const x_192 = top;
-      int const x_193 = as_type<int>((as_type<uint>(x_192) + as_type<uint>(1)));
-      top = x_193;
-      int const x_194 = h_1;
-      stack.arr[x_193] = x_194;
-    }
-  }
-  return;
-}
-
-void main_1(thread QuicksortObject* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  int i_2 = 0;
-  i_2 = 0;
-  while (true) {
-    int const x_64 = i_2;
-    if ((x_64 < 10)) {
-    } else {
-      break;
-    }
-    int const x_67 = i_2;
-    int const x_68 = i_2;
-    (*(tint_symbol_6)).numbers.arr[x_67] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_68)));
-    int const x_71 = i_2;
-    int const x_72 = i_2;
-    int const x_74 = (*(tint_symbol_6)).numbers.arr[x_72];
-    int const x_75 = i_2;
-    int const x_77 = (*(tint_symbol_6)).numbers.arr[x_75];
-    (*(tint_symbol_6)).numbers.arr[x_71] = as_type<int>((as_type<uint>(x_74) * as_type<uint>(x_77)));
-    {
-      int const x_80 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_80) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_6);
-  int const x_84 = (*(tint_symbol_6)).numbers.arr[0];
-  int const x_86 = (*(tint_symbol_6)).numbers.arr[4];
-  if ((x_84 < x_86)) {
-    *(tint_symbol_7) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_7) = float4(0.0f, 1.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread QuicksortObject* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  main_1(tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread QuicksortObject tint_symbol_10 = {};
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index cb0fe80..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,365 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 234
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_30 "x_30"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_30 NonWritable
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %13 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %13
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_30 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %46 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %106 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %114 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-     %int_10 = OpConstant %int 10
-      %int_4 = OpConstant %int 4
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %221 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %222 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %223 = OpTypeFunction %main_out
-%swap_i1_i1_ = OpFunction %void None %20
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %26 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %28
-         %30 = OpLoad %int %i
-         %33 = OpAccessChain %_ptr_Private_int %obj %uint_0 %30
-         %34 = OpLoad %int %33
-               OpStore %temp %34
-         %36 = OpLoad %int %i
-         %38 = OpLoad %int %j
-         %39 = OpAccessChain %_ptr_Private_int %obj %uint_0 %38
-         %40 = OpLoad %int %39
-         %41 = OpAccessChain %_ptr_Private_int %obj %uint_0 %36
-               OpStore %41 %40
-         %43 = OpLoad %int %j
-         %44 = OpLoad %int %temp
-         %45 = OpAccessChain %_ptr_Private_int %obj %uint_0 %43
-               OpStore %45 %44
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %46
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %50 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %28
-        %i_1 = OpVariable %_ptr_Function_int Function %28
-        %j_1 = OpVariable %_ptr_Function_int Function %28
-      %param = OpVariable %_ptr_Function_int Function %28
-    %param_1 = OpVariable %_ptr_Function_int Function %28
-    %param_2 = OpVariable %_ptr_Function_int Function %28
-    %param_3 = OpVariable %_ptr_Function_int Function %28
-         %59 = OpLoad %int %h
-         %60 = OpAccessChain %_ptr_Private_int %obj %uint_0 %59
-         %61 = OpLoad %int %60
-               OpStore %pivot %61
-         %63 = OpLoad %int %l
-         %65 = OpISub %int %63 %int_1
-               OpStore %i_1 %65
-         %67 = OpLoad %int %l
-               OpStore %j_1 %67
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %72 = OpLoad %int %j_1
-         %74 = OpLoad %int %h
-         %75 = OpISub %int %74 %int_1
-         %76 = OpSLessThanEqual %bool %72 %75
-               OpSelectionMerge %78 None
-               OpBranchConditional %76 %79 %80
-         %79 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-               OpBranch %69
-         %78 = OpLabel
-         %81 = OpLoad %int %j_1
-         %82 = OpAccessChain %_ptr_Private_int %obj %uint_0 %81
-         %83 = OpLoad %int %82
-         %84 = OpLoad %int %pivot
-         %85 = OpSLessThanEqual %bool %83 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpLoad %int %i_1
-         %89 = OpIAdd %int %88 %int_1
-               OpStore %i_1 %89
-         %90 = OpLoad %int %i_1
-               OpStore %param %90
-         %91 = OpLoad %int %j_1
-               OpStore %param_1 %91
-         %92 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %86
-         %86 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-         %95 = OpLoad %int %j_1
-         %96 = OpIAdd %int %95 %int_1
-               OpStore %j_1 %96
-               OpBranch %68
-         %69 = OpLabel
-         %97 = OpLoad %int %i_1
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %param_2 %98
-        %100 = OpLoad %int %h
-               OpStore %param_3 %100
-        %101 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %104 = OpLoad %int %i_1
-        %105 = OpIAdd %int %104 %int_1
-               OpReturnValue %105
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %106
-        %108 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %28
-        %h_1 = OpVariable %_ptr_Function_int Function %28
-        %top = OpVariable %_ptr_Function_int Function %28
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %114
-          %p = OpVariable %_ptr_Function_int Function %28
-    %param_4 = OpVariable %_ptr_Function_int Function %28
-    %param_5 = OpVariable %_ptr_Function_int Function %28
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %121 = OpLoad %int %top
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %top %122
-        %123 = OpLoad %int %l_1
-        %124 = OpAccessChain %_ptr_Function_int %stack %122
-               OpStore %124 %123
-        %125 = OpLoad %int %top
-        %126 = OpIAdd %int %125 %int_1
-               OpStore %top %126
-        %127 = OpLoad %int %h_1
-        %128 = OpAccessChain %_ptr_Function_int %stack %126
-               OpStore %128 %127
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %top
-        %134 = OpSGreaterThanEqual %bool %133 %int_0
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %130
-        %135 = OpLabel
-        %138 = OpLoad %int %top
-        %139 = OpISub %int %138 %int_1
-               OpStore %top %139
-        %140 = OpAccessChain %_ptr_Function_int %stack %138
-        %141 = OpLoad %int %140
-               OpStore %h_1 %141
-        %142 = OpLoad %int %top
-        %143 = OpISub %int %142 %int_1
-               OpStore %top %143
-        %144 = OpAccessChain %_ptr_Function_int %stack %142
-        %145 = OpLoad %int %144
-               OpStore %l_1 %145
-        %146 = OpLoad %int %l_1
-               OpStore %param_4 %146
-        %147 = OpLoad %int %h_1
-               OpStore %param_5 %147
-        %148 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %148
-        %151 = OpLoad %int %p
-        %152 = OpLoad %int %l_1
-        %153 = OpISub %int %151 %int_1
-        %154 = OpSGreaterThan %bool %153 %152
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %155
-        %156 = OpLabel
-        %157 = OpLoad %int %top
-        %158 = OpIAdd %int %157 %int_1
-               OpStore %top %158
-        %159 = OpLoad %int %l_1
-        %160 = OpAccessChain %_ptr_Function_int %stack %158
-               OpStore %160 %159
-        %161 = OpLoad %int %top
-        %162 = OpIAdd %int %161 %int_1
-               OpStore %top %162
-        %163 = OpLoad %int %p
-        %164 = OpAccessChain %_ptr_Function_int %stack %162
-        %165 = OpISub %int %163 %int_1
-               OpStore %164 %165
-               OpBranch %155
-        %155 = OpLabel
-        %166 = OpLoad %int %p
-        %167 = OpLoad %int %h_1
-        %168 = OpIAdd %int %166 %int_1
-        %169 = OpSLessThan %bool %168 %167
-               OpSelectionMerge %170 None
-               OpBranchConditional %169 %171 %170
-        %171 = OpLabel
-        %172 = OpLoad %int %top
-        %173 = OpIAdd %int %172 %int_1
-               OpStore %top %173
-        %174 = OpLoad %int %p
-        %175 = OpAccessChain %_ptr_Function_int %stack %173
-        %176 = OpIAdd %int %174 %int_1
-               OpStore %175 %176
-        %177 = OpLoad %int %top
-        %178 = OpIAdd %int %177 %int_1
-               OpStore %top %178
-        %179 = OpLoad %int %h_1
-        %180 = OpAccessChain %_ptr_Function_int %stack %178
-               OpStore %180 %179
-               OpBranch %170
-        %170 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpBranch %129
-        %130 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %106
-        %182 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %28
-               OpStore %i_2 %int_0
-               OpBranch %184
-        %184 = OpLabel
-               OpLoopMerge %185 %186 None
-               OpBranch %187
-        %187 = OpLabel
-        %188 = OpLoad %int %i_2
-        %190 = OpSLessThan %bool %188 %int_10
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %193
-        %192 = OpLabel
-               OpBranch %191
-        %193 = OpLabel
-               OpBranch %185
-        %191 = OpLabel
-        %194 = OpLoad %int %i_2
-        %195 = OpLoad %int %i_2
-        %196 = OpAccessChain %_ptr_Private_int %obj %uint_0 %194
-        %197 = OpISub %int %int_10 %195
-               OpStore %196 %197
-        %198 = OpLoad %int %i_2
-        %199 = OpLoad %int %i_2
-        %200 = OpAccessChain %_ptr_Private_int %obj %uint_0 %199
-        %201 = OpLoad %int %200
-        %202 = OpLoad %int %i_2
-        %203 = OpAccessChain %_ptr_Private_int %obj %uint_0 %202
-        %204 = OpLoad %int %203
-        %205 = OpAccessChain %_ptr_Private_int %obj %uint_0 %198
-        %206 = OpIMul %int %201 %204
-               OpStore %205 %206
-               OpBranch %186
-        %186 = OpLabel
-        %207 = OpLoad %int %i_2
-        %208 = OpIAdd %int %207 %int_1
-               OpStore %i_2 %208
-               OpBranch %184
-        %185 = OpLabel
-        %209 = OpFunctionCall %void %quicksort_
-        %210 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %211 = OpLoad %int %210
-        %213 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %214 = OpLoad %int %213
-        %215 = OpSLessThan %bool %211 %214
-               OpSelectionMerge %216 None
-               OpBranchConditional %215 %217 %218
-        %217 = OpLabel
-               OpStore %x_GLF_color %221
-               OpBranch %216
-        %218 = OpLabel
-               OpStore %x_GLF_color %222
-               OpBranch %216
-        %216 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %223
-        %226 = OpLabel
-        %227 = OpFunctionCall %void %main_1
-        %228 = OpLoad %v4float %x_GLF_color
-        %229 = OpCompositeConstruct %main_out %228
-               OpReturnValue %229
-               OpFunctionEnd
-       %main = OpFunction %void None %106
-        %231 = OpLabel
-        %232 = OpFunctionCall %main_out %main_inner
-        %233 = OpCompositeExtract %v4float %232 0
-               OpStore %x_GLF_color_1_1 %233
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 03cd2ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,197 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_30 : buf0;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_92 : i32 = *(i);
-  let x_94 : i32 = obj.numbers[x_92];
-  temp = x_94;
-  let x_95 : i32 = *(i);
-  let x_96 : i32 = *(j);
-  let x_98 : i32 = obj.numbers[x_96];
-  obj.numbers[x_95] = x_98;
-  let x_100 : i32 = *(j);
-  let x_101 : i32 = temp;
-  obj.numbers[x_100] = x_101;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_104 : i32 = *(h);
-  let x_106 : i32 = obj.numbers[x_104];
-  pivot = x_106;
-  let x_107 : i32 = *(l);
-  i_1 = (x_107 - 1);
-  let x_109 : i32 = *(l);
-  j_1 = x_109;
-  loop {
-    let x_114 : i32 = j_1;
-    let x_115 : i32 = *(h);
-    if ((x_114 <= (x_115 - 1))) {
-    } else {
-      break;
-    }
-    let x_119 : i32 = j_1;
-    let x_121 : i32 = obj.numbers[x_119];
-    let x_122 : i32 = pivot;
-    if ((x_121 <= x_122)) {
-      let x_126 : i32 = i_1;
-      i_1 = (x_126 + 1);
-      let x_128 : i32 = i_1;
-      param = x_128;
-      let x_129 : i32 = j_1;
-      param_1 = x_129;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_131 : i32 = j_1;
-      j_1 = (x_131 + 1);
-    }
-  }
-  let x_133 : i32 = i_1;
-  param_2 = (x_133 + 1);
-  let x_135 : i32 = *(h);
-  param_3 = x_135;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_137 : i32 = i_1;
-  return (x_137 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_140 : i32 = top;
-  let x_141 : i32 = (x_140 + 1);
-  top = x_141;
-  let x_142 : i32 = l_1;
-  stack[x_141] = x_142;
-  let x_144 : i32 = top;
-  let x_145 : i32 = (x_144 + 1);
-  top = x_145;
-  let x_146 : i32 = h_1;
-  stack[x_145] = x_146;
-  loop {
-    let x_152 : i32 = top;
-    if ((x_152 >= 0)) {
-    } else {
-      break;
-    }
-    let x_155 : i32 = top;
-    top = (x_155 - 1);
-    let x_158 : i32 = stack[x_155];
-    h_1 = x_158;
-    let x_159 : i32 = top;
-    top = (x_159 - 1);
-    let x_162 : i32 = stack[x_159];
-    l_1 = x_162;
-    let x_163 : i32 = l_1;
-    param_4 = x_163;
-    let x_164 : i32 = h_1;
-    param_5 = x_164;
-    let x_165 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_165;
-    let x_166 : i32 = p;
-    let x_168 : i32 = l_1;
-    if (((x_166 - 1) > x_168)) {
-      let x_172 : i32 = top;
-      let x_173 : i32 = (x_172 + 1);
-      top = x_173;
-      let x_174 : i32 = l_1;
-      stack[x_173] = x_174;
-      let x_176 : i32 = top;
-      let x_177 : i32 = (x_176 + 1);
-      top = x_177;
-      let x_178 : i32 = p;
-      stack[x_177] = (x_178 - 1);
-    }
-    let x_181 : i32 = p;
-    let x_183 : i32 = h_1;
-    if (((x_181 + 1) < x_183)) {
-      let x_187 : i32 = top;
-      let x_188 : i32 = (x_187 + 1);
-      top = x_188;
-      let x_189 : i32 = p;
-      stack[x_188] = (x_189 + 1);
-      let x_192 : i32 = top;
-      let x_193 : i32 = (x_192 + 1);
-      top = x_193;
-      let x_194 : i32 = h_1;
-      stack[x_193] = x_194;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  i_2 = 0;
-  loop {
-    let x_64 : i32 = i_2;
-    if ((x_64 < 10)) {
-    } else {
-      break;
-    }
-    let x_67 : i32 = i_2;
-    let x_68 : i32 = i_2;
-    obj.numbers[x_67] = (10 - x_68);
-    let x_71 : i32 = i_2;
-    let x_72 : i32 = i_2;
-    let x_74 : i32 = obj.numbers[x_72];
-    let x_75 : i32 = i_2;
-    let x_77 : i32 = obj.numbers[x_75];
-    obj.numbers[x_71] = (x_74 * x_77);
-
-    continuing {
-      let x_80 : i32 = i_2;
-      i_2 = (x_80 + 1);
-    }
-  }
-  quicksort_();
-  let x_84 : i32 = obj.numbers[0];
-  let x_86 : i32 = obj.numbers[4];
-  if ((x_84 < x_86)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 1.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 73b6df0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,160 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_30 : register(b0, space0) {
-  uint4 x_30[1];
-};
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_92 = i;
-  const int x_94 = obj.numbers[x_92];
-  temp = x_94;
-  const int x_95 = i;
-  const int x_96 = j;
-  const int x_98 = obj.numbers[x_96];
-  obj.numbers[x_95] = x_98;
-  const int x_100 = j;
-  obj.numbers[x_100] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_104 = h;
-  const int x_106 = obj.numbers[x_104];
-  pivot = x_106;
-  const int x_107 = l;
-  i_1 = (x_107 - 1);
-  const int x_109 = l;
-  j_1 = x_109;
-  while (true) {
-    const int x_114 = j_1;
-    const int x_115 = h;
-    if ((x_114 <= (x_115 - 1))) {
-    } else {
-      break;
-    }
-    const int x_121 = obj.numbers[j_1];
-    if ((x_121 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_135 = h;
-  param_3 = x_135;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_141 = (top + 1);
-  top = x_141;
-  stack[x_141] = l_1;
-  const int x_145 = (top + 1);
-  top = x_145;
-  stack[x_145] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_155 = top;
-    top = (x_155 - 1);
-    const int x_158 = stack[x_155];
-    h_1 = x_158;
-    const int x_159 = top;
-    top = (x_159 - 1);
-    const int x_162 = stack[x_159];
-    l_1 = x_162;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_165 = performPartition_i1_i1_(param_4, param_5);
-    p = x_165;
-    if (((p - 1) > l_1)) {
-      const int x_173 = (top + 1);
-      top = x_173;
-      stack[x_173] = l_1;
-      const int x_177 = (top + 1);
-      top = x_177;
-      stack[x_177] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_188 = (top + 1);
-      top = x_188;
-      stack[x_188] = (p + 1);
-      const int x_193 = (top + 1);
-      top = x_193;
-      stack[x_193] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_71 = i_2;
-      const int x_74 = obj.numbers[i_2];
-      const int x_77 = obj.numbers[i_2];
-      obj.numbers[x_71] = (x_74 * x_77);
-    }
-  }
-  quicksort_();
-  const int x_84 = obj.numbers[0];
-  const int x_86 = obj.numbers[4];
-  if ((x_84 < x_86)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 1.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4afc658..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_3) {
-  int temp = 0;
-  int const x_92 = *(i);
-  int const x_94 = (*(tint_symbol_3)).numbers.arr[x_92];
-  temp = x_94;
-  int const x_95 = *(i);
-  int const x_96 = *(j);
-  int const x_98 = (*(tint_symbol_3)).numbers.arr[x_96];
-  (*(tint_symbol_3)).numbers.arr[x_95] = x_98;
-  int const x_100 = *(j);
-  int const x_101 = temp;
-  (*(tint_symbol_3)).numbers.arr[x_100] = x_101;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_4) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_104 = *(h);
-  int const x_106 = (*(tint_symbol_4)).numbers.arr[x_104];
-  pivot = x_106;
-  int const x_107 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_107) - as_type<uint>(1)));
-  int const x_109 = *(l);
-  j_1 = x_109;
-  while (true) {
-    int const x_114 = j_1;
-    int const x_115 = *(h);
-    if ((x_114 <= as_type<int>((as_type<uint>(x_115) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_119 = j_1;
-    int const x_121 = (*(tint_symbol_4)).numbers.arr[x_119];
-    int const x_122 = pivot;
-    if ((x_121 <= x_122)) {
-      int const x_126 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-      int const x_128 = i_1;
-      param = x_128;
-      int const x_129 = j_1;
-      param_1 = x_129;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_4);
-    }
-    {
-      int const x_131 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_131) + as_type<uint>(1)));
-    }
-  }
-  int const x_133 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
-  int const x_135 = *(h);
-  param_3 = x_135;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_4);
-  int const x_137 = i_1;
-  return as_type<int>((as_type<uint>(x_137) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_5) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_140 = top;
-  int const x_141 = as_type<int>((as_type<uint>(x_140) + as_type<uint>(1)));
-  top = x_141;
-  int const x_142 = l_1;
-  stack.arr[x_141] = x_142;
-  int const x_144 = top;
-  int const x_145 = as_type<int>((as_type<uint>(x_144) + as_type<uint>(1)));
-  top = x_145;
-  int const x_146 = h_1;
-  stack.arr[x_145] = x_146;
-  while (true) {
-    int const x_152 = top;
-    if ((x_152 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_155 = top;
-    top = as_type<int>((as_type<uint>(x_155) - as_type<uint>(1)));
-    int const x_158 = stack.arr[x_155];
-    h_1 = x_158;
-    int const x_159 = top;
-    top = as_type<int>((as_type<uint>(x_159) - as_type<uint>(1)));
-    int const x_162 = stack.arr[x_159];
-    l_1 = x_162;
-    int const x_163 = l_1;
-    param_4 = x_163;
-    int const x_164 = h_1;
-    param_5 = x_164;
-    int const x_165 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_5);
-    p = x_165;
-    int const x_166 = p;
-    int const x_168 = l_1;
-    if ((as_type<int>((as_type<uint>(x_166) - as_type<uint>(1))) > x_168)) {
-      int const x_172 = top;
-      int const x_173 = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
-      top = x_173;
-      int const x_174 = l_1;
-      stack.arr[x_173] = x_174;
-      int const x_176 = top;
-      int const x_177 = as_type<int>((as_type<uint>(x_176) + as_type<uint>(1)));
-      top = x_177;
-      int const x_178 = p;
-      stack.arr[x_177] = as_type<int>((as_type<uint>(x_178) - as_type<uint>(1)));
-    }
-    int const x_181 = p;
-    int const x_183 = h_1;
-    if ((as_type<int>((as_type<uint>(x_181) + as_type<uint>(1))) < x_183)) {
-      int const x_187 = top;
-      int const x_188 = as_type<int>((as_type<uint>(x_187) + as_type<uint>(1)));
-      top = x_188;
-      int const x_189 = p;
-      stack.arr[x_188] = as_type<int>((as_type<uint>(x_189) + as_type<uint>(1)));
-      int const x_192 = top;
-      int const x_193 = as_type<int>((as_type<uint>(x_192) + as_type<uint>(1)));
-      top = x_193;
-      int const x_194 = h_1;
-      stack.arr[x_193] = x_194;
-    }
-  }
-  return;
-}
-
-void main_1(thread QuicksortObject* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  int i_2 = 0;
-  i_2 = 0;
-  while (true) {
-    int const x_64 = i_2;
-    if ((x_64 < 10)) {
-    } else {
-      break;
-    }
-    int const x_67 = i_2;
-    int const x_68 = i_2;
-    (*(tint_symbol_6)).numbers.arr[x_67] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_68)));
-    int const x_71 = i_2;
-    int const x_72 = i_2;
-    int const x_74 = (*(tint_symbol_6)).numbers.arr[x_72];
-    int const x_75 = i_2;
-    int const x_77 = (*(tint_symbol_6)).numbers.arr[x_75];
-    (*(tint_symbol_6)).numbers.arr[x_71] = as_type<int>((as_type<uint>(x_74) * as_type<uint>(x_77)));
-    {
-      int const x_80 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_80) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_6);
-  int const x_84 = (*(tint_symbol_6)).numbers.arr[0];
-  int const x_86 = (*(tint_symbol_6)).numbers.arr[4];
-  if ((x_84 < x_86)) {
-    *(tint_symbol_7) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_7) = float4(0.0f, 1.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread QuicksortObject* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  main_1(tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread QuicksortObject tint_symbol_10 = {};
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index cb0fe80..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,365 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 234
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_30 "x_30"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_30 NonWritable
-               OpDecorate %x_30 DescriptorSet 0
-               OpDecorate %x_30 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %13 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %13
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_30 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %46 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %106 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %114 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-     %int_10 = OpConstant %int 10
-      %int_4 = OpConstant %int 4
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %221 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %222 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %223 = OpTypeFunction %main_out
-%swap_i1_i1_ = OpFunction %void None %20
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %26 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %28
-         %30 = OpLoad %int %i
-         %33 = OpAccessChain %_ptr_Private_int %obj %uint_0 %30
-         %34 = OpLoad %int %33
-               OpStore %temp %34
-         %36 = OpLoad %int %i
-         %38 = OpLoad %int %j
-         %39 = OpAccessChain %_ptr_Private_int %obj %uint_0 %38
-         %40 = OpLoad %int %39
-         %41 = OpAccessChain %_ptr_Private_int %obj %uint_0 %36
-               OpStore %41 %40
-         %43 = OpLoad %int %j
-         %44 = OpLoad %int %temp
-         %45 = OpAccessChain %_ptr_Private_int %obj %uint_0 %43
-               OpStore %45 %44
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %46
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %50 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %28
-        %i_1 = OpVariable %_ptr_Function_int Function %28
-        %j_1 = OpVariable %_ptr_Function_int Function %28
-      %param = OpVariable %_ptr_Function_int Function %28
-    %param_1 = OpVariable %_ptr_Function_int Function %28
-    %param_2 = OpVariable %_ptr_Function_int Function %28
-    %param_3 = OpVariable %_ptr_Function_int Function %28
-         %59 = OpLoad %int %h
-         %60 = OpAccessChain %_ptr_Private_int %obj %uint_0 %59
-         %61 = OpLoad %int %60
-               OpStore %pivot %61
-         %63 = OpLoad %int %l
-         %65 = OpISub %int %63 %int_1
-               OpStore %i_1 %65
-         %67 = OpLoad %int %l
-               OpStore %j_1 %67
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %72 = OpLoad %int %j_1
-         %74 = OpLoad %int %h
-         %75 = OpISub %int %74 %int_1
-         %76 = OpSLessThanEqual %bool %72 %75
-               OpSelectionMerge %78 None
-               OpBranchConditional %76 %79 %80
-         %79 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-               OpBranch %69
-         %78 = OpLabel
-         %81 = OpLoad %int %j_1
-         %82 = OpAccessChain %_ptr_Private_int %obj %uint_0 %81
-         %83 = OpLoad %int %82
-         %84 = OpLoad %int %pivot
-         %85 = OpSLessThanEqual %bool %83 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpLoad %int %i_1
-         %89 = OpIAdd %int %88 %int_1
-               OpStore %i_1 %89
-         %90 = OpLoad %int %i_1
-               OpStore %param %90
-         %91 = OpLoad %int %j_1
-               OpStore %param_1 %91
-         %92 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %86
-         %86 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-         %95 = OpLoad %int %j_1
-         %96 = OpIAdd %int %95 %int_1
-               OpStore %j_1 %96
-               OpBranch %68
-         %69 = OpLabel
-         %97 = OpLoad %int %i_1
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %param_2 %98
-        %100 = OpLoad %int %h
-               OpStore %param_3 %100
-        %101 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %104 = OpLoad %int %i_1
-        %105 = OpIAdd %int %104 %int_1
-               OpReturnValue %105
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %106
-        %108 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %28
-        %h_1 = OpVariable %_ptr_Function_int Function %28
-        %top = OpVariable %_ptr_Function_int Function %28
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %114
-          %p = OpVariable %_ptr_Function_int Function %28
-    %param_4 = OpVariable %_ptr_Function_int Function %28
-    %param_5 = OpVariable %_ptr_Function_int Function %28
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %121 = OpLoad %int %top
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %top %122
-        %123 = OpLoad %int %l_1
-        %124 = OpAccessChain %_ptr_Function_int %stack %122
-               OpStore %124 %123
-        %125 = OpLoad %int %top
-        %126 = OpIAdd %int %125 %int_1
-               OpStore %top %126
-        %127 = OpLoad %int %h_1
-        %128 = OpAccessChain %_ptr_Function_int %stack %126
-               OpStore %128 %127
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %top
-        %134 = OpSGreaterThanEqual %bool %133 %int_0
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %130
-        %135 = OpLabel
-        %138 = OpLoad %int %top
-        %139 = OpISub %int %138 %int_1
-               OpStore %top %139
-        %140 = OpAccessChain %_ptr_Function_int %stack %138
-        %141 = OpLoad %int %140
-               OpStore %h_1 %141
-        %142 = OpLoad %int %top
-        %143 = OpISub %int %142 %int_1
-               OpStore %top %143
-        %144 = OpAccessChain %_ptr_Function_int %stack %142
-        %145 = OpLoad %int %144
-               OpStore %l_1 %145
-        %146 = OpLoad %int %l_1
-               OpStore %param_4 %146
-        %147 = OpLoad %int %h_1
-               OpStore %param_5 %147
-        %148 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %148
-        %151 = OpLoad %int %p
-        %152 = OpLoad %int %l_1
-        %153 = OpISub %int %151 %int_1
-        %154 = OpSGreaterThan %bool %153 %152
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %155
-        %156 = OpLabel
-        %157 = OpLoad %int %top
-        %158 = OpIAdd %int %157 %int_1
-               OpStore %top %158
-        %159 = OpLoad %int %l_1
-        %160 = OpAccessChain %_ptr_Function_int %stack %158
-               OpStore %160 %159
-        %161 = OpLoad %int %top
-        %162 = OpIAdd %int %161 %int_1
-               OpStore %top %162
-        %163 = OpLoad %int %p
-        %164 = OpAccessChain %_ptr_Function_int %stack %162
-        %165 = OpISub %int %163 %int_1
-               OpStore %164 %165
-               OpBranch %155
-        %155 = OpLabel
-        %166 = OpLoad %int %p
-        %167 = OpLoad %int %h_1
-        %168 = OpIAdd %int %166 %int_1
-        %169 = OpSLessThan %bool %168 %167
-               OpSelectionMerge %170 None
-               OpBranchConditional %169 %171 %170
-        %171 = OpLabel
-        %172 = OpLoad %int %top
-        %173 = OpIAdd %int %172 %int_1
-               OpStore %top %173
-        %174 = OpLoad %int %p
-        %175 = OpAccessChain %_ptr_Function_int %stack %173
-        %176 = OpIAdd %int %174 %int_1
-               OpStore %175 %176
-        %177 = OpLoad %int %top
-        %178 = OpIAdd %int %177 %int_1
-               OpStore %top %178
-        %179 = OpLoad %int %h_1
-        %180 = OpAccessChain %_ptr_Function_int %stack %178
-               OpStore %180 %179
-               OpBranch %170
-        %170 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpBranch %129
-        %130 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %106
-        %182 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %28
-               OpStore %i_2 %int_0
-               OpBranch %184
-        %184 = OpLabel
-               OpLoopMerge %185 %186 None
-               OpBranch %187
-        %187 = OpLabel
-        %188 = OpLoad %int %i_2
-        %190 = OpSLessThan %bool %188 %int_10
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %193
-        %192 = OpLabel
-               OpBranch %191
-        %193 = OpLabel
-               OpBranch %185
-        %191 = OpLabel
-        %194 = OpLoad %int %i_2
-        %195 = OpLoad %int %i_2
-        %196 = OpAccessChain %_ptr_Private_int %obj %uint_0 %194
-        %197 = OpISub %int %int_10 %195
-               OpStore %196 %197
-        %198 = OpLoad %int %i_2
-        %199 = OpLoad %int %i_2
-        %200 = OpAccessChain %_ptr_Private_int %obj %uint_0 %199
-        %201 = OpLoad %int %200
-        %202 = OpLoad %int %i_2
-        %203 = OpAccessChain %_ptr_Private_int %obj %uint_0 %202
-        %204 = OpLoad %int %203
-        %205 = OpAccessChain %_ptr_Private_int %obj %uint_0 %198
-        %206 = OpIMul %int %201 %204
-               OpStore %205 %206
-               OpBranch %186
-        %186 = OpLabel
-        %207 = OpLoad %int %i_2
-        %208 = OpIAdd %int %207 %int_1
-               OpStore %i_2 %208
-               OpBranch %184
-        %185 = OpLabel
-        %209 = OpFunctionCall %void %quicksort_
-        %210 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %211 = OpLoad %int %210
-        %213 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %214 = OpLoad %int %213
-        %215 = OpSLessThan %bool %211 %214
-               OpSelectionMerge %216 None
-               OpBranchConditional %215 %217 %218
-        %217 = OpLabel
-               OpStore %x_GLF_color %221
-               OpBranch %216
-        %218 = OpLabel
-               OpStore %x_GLF_color %222
-               OpBranch %216
-        %216 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %223
-        %226 = OpLabel
-        %227 = OpFunctionCall %void %main_1
-        %228 = OpLoad %v4float %x_GLF_color
-        %229 = OpCompositeConstruct %main_out %228
-               OpReturnValue %229
-               OpFunctionEnd
-       %main = OpFunction %void None %106
-        %231 = OpLabel
-        %232 = OpFunctionCall %main_out %main_inner
-        %233 = OpCompositeExtract %v4float %232 0
-               OpStore %x_GLF_color_1_1 %233
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 03cd2ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,197 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_30 : buf0;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_92 : i32 = *(i);
-  let x_94 : i32 = obj.numbers[x_92];
-  temp = x_94;
-  let x_95 : i32 = *(i);
-  let x_96 : i32 = *(j);
-  let x_98 : i32 = obj.numbers[x_96];
-  obj.numbers[x_95] = x_98;
-  let x_100 : i32 = *(j);
-  let x_101 : i32 = temp;
-  obj.numbers[x_100] = x_101;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_104 : i32 = *(h);
-  let x_106 : i32 = obj.numbers[x_104];
-  pivot = x_106;
-  let x_107 : i32 = *(l);
-  i_1 = (x_107 - 1);
-  let x_109 : i32 = *(l);
-  j_1 = x_109;
-  loop {
-    let x_114 : i32 = j_1;
-    let x_115 : i32 = *(h);
-    if ((x_114 <= (x_115 - 1))) {
-    } else {
-      break;
-    }
-    let x_119 : i32 = j_1;
-    let x_121 : i32 = obj.numbers[x_119];
-    let x_122 : i32 = pivot;
-    if ((x_121 <= x_122)) {
-      let x_126 : i32 = i_1;
-      i_1 = (x_126 + 1);
-      let x_128 : i32 = i_1;
-      param = x_128;
-      let x_129 : i32 = j_1;
-      param_1 = x_129;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_131 : i32 = j_1;
-      j_1 = (x_131 + 1);
-    }
-  }
-  let x_133 : i32 = i_1;
-  param_2 = (x_133 + 1);
-  let x_135 : i32 = *(h);
-  param_3 = x_135;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_137 : i32 = i_1;
-  return (x_137 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_140 : i32 = top;
-  let x_141 : i32 = (x_140 + 1);
-  top = x_141;
-  let x_142 : i32 = l_1;
-  stack[x_141] = x_142;
-  let x_144 : i32 = top;
-  let x_145 : i32 = (x_144 + 1);
-  top = x_145;
-  let x_146 : i32 = h_1;
-  stack[x_145] = x_146;
-  loop {
-    let x_152 : i32 = top;
-    if ((x_152 >= 0)) {
-    } else {
-      break;
-    }
-    let x_155 : i32 = top;
-    top = (x_155 - 1);
-    let x_158 : i32 = stack[x_155];
-    h_1 = x_158;
-    let x_159 : i32 = top;
-    top = (x_159 - 1);
-    let x_162 : i32 = stack[x_159];
-    l_1 = x_162;
-    let x_163 : i32 = l_1;
-    param_4 = x_163;
-    let x_164 : i32 = h_1;
-    param_5 = x_164;
-    let x_165 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_165;
-    let x_166 : i32 = p;
-    let x_168 : i32 = l_1;
-    if (((x_166 - 1) > x_168)) {
-      let x_172 : i32 = top;
-      let x_173 : i32 = (x_172 + 1);
-      top = x_173;
-      let x_174 : i32 = l_1;
-      stack[x_173] = x_174;
-      let x_176 : i32 = top;
-      let x_177 : i32 = (x_176 + 1);
-      top = x_177;
-      let x_178 : i32 = p;
-      stack[x_177] = (x_178 - 1);
-    }
-    let x_181 : i32 = p;
-    let x_183 : i32 = h_1;
-    if (((x_181 + 1) < x_183)) {
-      let x_187 : i32 = top;
-      let x_188 : i32 = (x_187 + 1);
-      top = x_188;
-      let x_189 : i32 = p;
-      stack[x_188] = (x_189 + 1);
-      let x_192 : i32 = top;
-      let x_193 : i32 = (x_192 + 1);
-      top = x_193;
-      let x_194 : i32 = h_1;
-      stack[x_193] = x_194;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  i_2 = 0;
-  loop {
-    let x_64 : i32 = i_2;
-    if ((x_64 < 10)) {
-    } else {
-      break;
-    }
-    let x_67 : i32 = i_2;
-    let x_68 : i32 = i_2;
-    obj.numbers[x_67] = (10 - x_68);
-    let x_71 : i32 = i_2;
-    let x_72 : i32 = i_2;
-    let x_74 : i32 = obj.numbers[x_72];
-    let x_75 : i32 = i_2;
-    let x_77 : i32 = obj.numbers[x_75];
-    obj.numbers[x_71] = (x_74 * x_77);
-
-    continuing {
-      let x_80 : i32 = i_2;
-      i_2 = (x_80 + 1);
-    }
-  }
-  quicksort_();
-  let x_84 : i32 = obj.numbers[0];
-  let x_86 : i32 = obj.numbers[4];
-  if ((x_84 < x_86)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 1.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f4566b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,103 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  int x = 0;
-  const float x_99 = gl_FragCoord.x;
-  if ((x_99 < 1.0f)) {
-    return 5.0f;
-  }
-  const float x_104 = asfloat(x_7[0].x);
-  const float x_106 = asfloat(x_7[0].y);
-  if ((x_104 > x_106)) {
-    return 1.0f;
-  }
-  const float x_111 = asfloat(x_7[0].x);
-  x = int(x_111);
-  const float x_114 = asfloat(x_7[0].x);
-  x = (x + (int(clamp(x_114, 0.0f, 1.0f)) * 3));
-  return (5.0f + float(x));
-}
-
-void main_1() {
-  int i = 0;
-  int j = 0;
-  float2 data[17] = (float2[17])0;
-  i = 0;
-  while (true) {
-    const int x_48 = i;
-    const float x_50 = asfloat(x_7[0].x);
-    if ((x_48 < (4 + int(x_50)))) {
-    } else {
-      break;
-    }
-    const float x_56 = gl_FragCoord.x;
-    if ((x_56 >= 0.0f)) {
-      j = 0;
-      while (true) {
-        bool x_81 = false;
-        bool x_82_phi = false;
-        if ((j < 4)) {
-        } else {
-          break;
-        }
-        const int x_67 = j;
-        const int x_69 = i;
-        const float x_71 = func_();
-        data[((4 * x_67) + x_69)].x = x_71;
-        const float x_74 = data[0].x;
-        const bool x_75 = (x_74 == 5.0f);
-        x_82_phi = x_75;
-        if (!(x_75)) {
-          const float x_80 = data[15].x;
-          x_81 = (x_80 == 5.0f);
-          x_82_phi = x_81;
-        }
-        if (x_82_phi) {
-          x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        } else {
-          x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        }
-        const float x_87 = asfloat(x_7[0].x);
-        const float x_89 = asfloat(x_7[0].y);
-        if ((x_87 > x_89)) {
-          return;
-        }
-        {
-          j = (j + 1);
-        }
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.msl
deleted file mode 100644
index e8231d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float2 arr[17];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int x = 0;
-  float const x_99 = (*(tint_symbol_3)).x;
-  if ((x_99 < 1.0f)) {
-    return 5.0f;
-  }
-  float const x_104 = x_7.injectionSwitch.x;
-  float const x_106 = x_7.injectionSwitch.y;
-  if ((x_104 > x_106)) {
-    return 1.0f;
-  }
-  float const x_111 = x_7.injectionSwitch.x;
-  x = int(x_111);
-  float const x_114 = x_7.injectionSwitch.x;
-  int const x_118 = x;
-  x = as_type<int>((as_type<uint>(x_118) + as_type<uint>(as_type<int>((as_type<uint>(int(clamp(x_114, 0.0f, 1.0f))) * as_type<uint>(3))))));
-  int const x_120 = x;
-  return (5.0f + float(x_120));
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int i = 0;
-  int j = 0;
-  tint_array_wrapper data = {};
-  i = 0;
-  while (true) {
-    int const x_48 = i;
-    float const x_50 = x_7.injectionSwitch.x;
-    if ((x_48 < as_type<int>((as_type<uint>(4) + as_type<uint>(int(x_50)))))) {
-    } else {
-      break;
-    }
-    float const x_56 = (*(tint_symbol_4)).x;
-    if ((x_56 >= 0.0f)) {
-      j = 0;
-      while (true) {
-        bool x_81 = false;
-        bool x_82_phi = false;
-        int const x_64 = j;
-        if ((x_64 < 4)) {
-        } else {
-          break;
-        }
-        int const x_67 = j;
-        int const x_69 = i;
-        float const x_71 = func_(x_7, tint_symbol_4);
-        data.arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(x_67)))) + as_type<uint>(x_69)))].x = x_71;
-        float const x_74 = data.arr[0].x;
-        bool const x_75 = (x_74 == 5.0f);
-        x_82_phi = x_75;
-        if (!(x_75)) {
-          float const x_80 = data.arr[15].x;
-          x_81 = (x_80 == 5.0f);
-          x_82_phi = x_81;
-        }
-        bool const x_82 = x_82_phi;
-        if (x_82) {
-          *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        } else {
-          *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        }
-        float const x_87 = x_7.injectionSwitch.x;
-        float const x_89 = x_7.injectionSwitch.y;
-        if ((x_87 > x_89)) {
-          return;
-        }
-        {
-          int const x_93 = j;
-          j = as_type<int>((as_type<uint>(x_93) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_95 = i;
-      i = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2489f66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,247 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-         %50 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %data "data"
-               OpName %x_81 "x_81"
-               OpName %x_82_phi "x_82_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_v2float_uint_17 ArrayStride 8
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %15 = OpTypeFunction %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_5 = OpConstant %float 5
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-      %int_3 = OpConstant %int 3
-       %void = OpTypeVoid
-         %58 = OpTypeFunction %void
-    %uint_17 = OpConstant %uint 17
-%_arr_v2float_uint_17 = OpTypeArray %v2float %uint_17
-%_ptr_Function__arr_v2float_uint_17 = OpTypePointer Function %_arr_v2float_uint_17
-         %68 = OpConstantNull %_arr_v2float_uint_17
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %95 = OpConstantNull %bool
-%_ptr_Function_float = OpTypePointer Function %float
-     %int_15 = OpConstant %int 15
-        %124 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %125 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %138 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %float None %15
-         %17 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpFOrdLessThan %bool %26 %float_1
-               OpSelectionMerge %30 None
-               OpBranchConditional %28 %31 %30
-         %31 = OpLabel
-               OpReturnValue %float_5
-         %30 = OpLabel
-         %34 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %35 = OpLoad %float %34
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThan %bool %35 %38
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-               OpReturnValue %float_1
-         %40 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %43 = OpLoad %float %42
-         %44 = OpConvertFToS %int %43
-               OpStore %x %44
-         %45 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %46 = OpLoad %float %45
-         %47 = OpLoad %int %x
-         %49 = OpExtInst %float %50 NClamp %46 %float_0 %float_1
-         %48 = OpConvertFToS %int %49
-         %53 = OpIMul %int %48 %int_3
-         %54 = OpIAdd %int %47 %53
-               OpStore %x %54
-         %55 = OpLoad %int %x
-         %56 = OpConvertSToF %float %55
-         %57 = OpFAdd %float %float_5 %56
-               OpReturnValue %57
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %58
-         %61 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %j = OpVariable %_ptr_Function_int Function %21
-       %data = OpVariable %_ptr_Function__arr_v2float_uint_17 Function %68
-       %x_81 = OpVariable %_ptr_Function_bool Function %95
-   %x_82_phi = OpVariable %_ptr_Function_bool Function %95
-               OpStore %i %int_0
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %76 = OpLoad %float %75
-         %78 = OpConvertFToS %int %76
-         %79 = OpIAdd %int %int_4 %78
-         %80 = OpSLessThan %bool %74 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %71
-         %81 = OpLabel
-         %84 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %85 = OpLoad %float %84
-         %86 = OpFOrdGreaterThanEqual %bool %85 %float_0
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %87
-         %88 = OpLabel
-               OpStore %j %int_0
-               OpBranch %89
-         %89 = OpLabel
-               OpLoopMerge %90 %91 None
-               OpBranch %92
-         %92 = OpLabel
-         %97 = OpLoad %int %j
-         %98 = OpSLessThan %bool %97 %int_4
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %90
-         %99 = OpLabel
-        %102 = OpLoad %int %j
-        %103 = OpLoad %int %i
-        %104 = OpFunctionCall %float %func_
-        %105 = OpIMul %int %int_4 %102
-        %106 = OpIAdd %int %105 %103
-        %108 = OpAccessChain %_ptr_Function_float %data %106 %uint_0
-               OpStore %108 %104
-        %109 = OpAccessChain %_ptr_Function_float %data %int_0 %uint_0
-        %110 = OpLoad %float %109
-        %111 = OpFOrdEqual %bool %110 %float_5
-               OpStore %x_82_phi %111
-        %112 = OpLogicalNot %bool %111
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %113
-        %114 = OpLabel
-        %116 = OpAccessChain %_ptr_Function_float %data %int_15 %uint_0
-        %117 = OpLoad %float %116
-        %118 = OpFOrdEqual %bool %117 %float_5
-               OpStore %x_81 %118
-        %119 = OpLoad %bool %x_81
-               OpStore %x_82_phi %119
-               OpBranch %113
-        %113 = OpLabel
-        %120 = OpLoad %bool %x_82_phi
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpStore %x_GLF_color %124
-               OpBranch %121
-        %123 = OpLabel
-               OpStore %x_GLF_color %125
-               OpBranch %121
-        %121 = OpLabel
-        %126 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-        %127 = OpLoad %float %126
-        %128 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-        %129 = OpLoad %float %128
-        %130 = OpFOrdGreaterThan %bool %127 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %131
-        %132 = OpLabel
-               OpReturn
-        %131 = OpLabel
-               OpBranch %91
-         %91 = OpLabel
-        %133 = OpLoad %int %j
-        %135 = OpIAdd %int %133 %int_1
-               OpStore %j %135
-               OpBranch %89
-         %90 = OpLabel
-               OpBranch %87
-         %87 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-        %136 = OpLoad %int %i
-        %137 = OpIAdd %int %136 %int_1
-               OpStore %i %137
-               OpBranch %70
-         %71 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %138
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %142 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %143 = OpFunctionCall %void %main_1
-        %144 = OpLoad %v4float %x_GLF_color
-        %145 = OpCompositeConstruct %main_out %144
-               OpReturnValue %145
-               OpFunctionEnd
-       %main = OpFunction %void None %58
-        %147 = OpLabel
-        %149 = OpLoad %v4float %gl_FragCoord_param_1
-        %148 = OpFunctionCall %main_out %main_inner %149
-        %150 = OpCompositeExtract %v4float %148 0
-               OpStore %x_GLF_color_1_1 %150
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 430c6db..0000000
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,104 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var x : i32;
-  let x_99 : f32 = gl_FragCoord.x;
-  if ((x_99 < 1.0)) {
-    return 5.0;
-  }
-  let x_104 : f32 = x_7.injectionSwitch.x;
-  let x_106 : f32 = x_7.injectionSwitch.y;
-  if ((x_104 > x_106)) {
-    return 1.0;
-  }
-  let x_111 : f32 = x_7.injectionSwitch.x;
-  x = i32(x_111);
-  let x_114 : f32 = x_7.injectionSwitch.x;
-  let x_118 : i32 = x;
-  x = (x_118 + (i32(clamp(x_114, 0.0, 1.0)) * 3));
-  let x_120 : i32 = x;
-  return (5.0 + f32(x_120));
-}
-
-fn main_1() {
-  var i : i32;
-  var j : i32;
-  var data : array<vec2<f32>, 17>;
-  i = 0;
-  loop {
-    let x_48 : i32 = i;
-    let x_50 : f32 = x_7.injectionSwitch.x;
-    if ((x_48 < (4 + i32(x_50)))) {
-    } else {
-      break;
-    }
-    let x_56 : f32 = gl_FragCoord.x;
-    if ((x_56 >= 0.0)) {
-      j = 0;
-      loop {
-        var x_81 : bool;
-        var x_82_phi : bool;
-        let x_64 : i32 = j;
-        if ((x_64 < 4)) {
-        } else {
-          break;
-        }
-        let x_67 : i32 = j;
-        let x_69 : i32 = i;
-        let x_71 : f32 = func_();
-        data[((4 * x_67) + x_69)].x = x_71;
-        let x_74 : f32 = data[0].x;
-        let x_75 : bool = (x_74 == 5.0);
-        x_82_phi = x_75;
-        if (!(x_75)) {
-          let x_80 : f32 = data[15].x;
-          x_81 = (x_80 == 5.0);
-          x_82_phi = x_81;
-        }
-        let x_82 : bool = x_82_phi;
-        if (x_82) {
-          x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-        } else {
-          x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        }
-        let x_87 : f32 = x_7.injectionSwitch.x;
-        let x_89 : f32 = x_7.injectionSwitch.y;
-        if ((x_87 > x_89)) {
-          return;
-        }
-
-        continuing {
-          let x_93 : i32 = j;
-          j = (x_93 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_95 : i32 = i;
-      i = (x_95 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f4566b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,103 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  int x = 0;
-  const float x_99 = gl_FragCoord.x;
-  if ((x_99 < 1.0f)) {
-    return 5.0f;
-  }
-  const float x_104 = asfloat(x_7[0].x);
-  const float x_106 = asfloat(x_7[0].y);
-  if ((x_104 > x_106)) {
-    return 1.0f;
-  }
-  const float x_111 = asfloat(x_7[0].x);
-  x = int(x_111);
-  const float x_114 = asfloat(x_7[0].x);
-  x = (x + (int(clamp(x_114, 0.0f, 1.0f)) * 3));
-  return (5.0f + float(x));
-}
-
-void main_1() {
-  int i = 0;
-  int j = 0;
-  float2 data[17] = (float2[17])0;
-  i = 0;
-  while (true) {
-    const int x_48 = i;
-    const float x_50 = asfloat(x_7[0].x);
-    if ((x_48 < (4 + int(x_50)))) {
-    } else {
-      break;
-    }
-    const float x_56 = gl_FragCoord.x;
-    if ((x_56 >= 0.0f)) {
-      j = 0;
-      while (true) {
-        bool x_81 = false;
-        bool x_82_phi = false;
-        if ((j < 4)) {
-        } else {
-          break;
-        }
-        const int x_67 = j;
-        const int x_69 = i;
-        const float x_71 = func_();
-        data[((4 * x_67) + x_69)].x = x_71;
-        const float x_74 = data[0].x;
-        const bool x_75 = (x_74 == 5.0f);
-        x_82_phi = x_75;
-        if (!(x_75)) {
-          const float x_80 = data[15].x;
-          x_81 = (x_80 == 5.0f);
-          x_82_phi = x_81;
-        }
-        if (x_82_phi) {
-          x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        } else {
-          x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        }
-        const float x_87 = asfloat(x_7[0].x);
-        const float x_89 = asfloat(x_7[0].y);
-        if ((x_87 > x_89)) {
-          return;
-        }
-        {
-          j = (j + 1);
-        }
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.msl
deleted file mode 100644
index e8231d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float2 arr[17];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int x = 0;
-  float const x_99 = (*(tint_symbol_3)).x;
-  if ((x_99 < 1.0f)) {
-    return 5.0f;
-  }
-  float const x_104 = x_7.injectionSwitch.x;
-  float const x_106 = x_7.injectionSwitch.y;
-  if ((x_104 > x_106)) {
-    return 1.0f;
-  }
-  float const x_111 = x_7.injectionSwitch.x;
-  x = int(x_111);
-  float const x_114 = x_7.injectionSwitch.x;
-  int const x_118 = x;
-  x = as_type<int>((as_type<uint>(x_118) + as_type<uint>(as_type<int>((as_type<uint>(int(clamp(x_114, 0.0f, 1.0f))) * as_type<uint>(3))))));
-  int const x_120 = x;
-  return (5.0f + float(x_120));
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int i = 0;
-  int j = 0;
-  tint_array_wrapper data = {};
-  i = 0;
-  while (true) {
-    int const x_48 = i;
-    float const x_50 = x_7.injectionSwitch.x;
-    if ((x_48 < as_type<int>((as_type<uint>(4) + as_type<uint>(int(x_50)))))) {
-    } else {
-      break;
-    }
-    float const x_56 = (*(tint_symbol_4)).x;
-    if ((x_56 >= 0.0f)) {
-      j = 0;
-      while (true) {
-        bool x_81 = false;
-        bool x_82_phi = false;
-        int const x_64 = j;
-        if ((x_64 < 4)) {
-        } else {
-          break;
-        }
-        int const x_67 = j;
-        int const x_69 = i;
-        float const x_71 = func_(x_7, tint_symbol_4);
-        data.arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(x_67)))) + as_type<uint>(x_69)))].x = x_71;
-        float const x_74 = data.arr[0].x;
-        bool const x_75 = (x_74 == 5.0f);
-        x_82_phi = x_75;
-        if (!(x_75)) {
-          float const x_80 = data.arr[15].x;
-          x_81 = (x_80 == 5.0f);
-          x_82_phi = x_81;
-        }
-        bool const x_82 = x_82_phi;
-        if (x_82) {
-          *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        } else {
-          *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        }
-        float const x_87 = x_7.injectionSwitch.x;
-        float const x_89 = x_7.injectionSwitch.y;
-        if ((x_87 > x_89)) {
-          return;
-        }
-        {
-          int const x_93 = j;
-          j = as_type<int>((as_type<uint>(x_93) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_95 = i;
-      i = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2489f66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,247 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-         %50 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %data "data"
-               OpName %x_81 "x_81"
-               OpName %x_82_phi "x_82_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_v2float_uint_17 ArrayStride 8
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %15 = OpTypeFunction %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_5 = OpConstant %float 5
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-      %int_3 = OpConstant %int 3
-       %void = OpTypeVoid
-         %58 = OpTypeFunction %void
-    %uint_17 = OpConstant %uint 17
-%_arr_v2float_uint_17 = OpTypeArray %v2float %uint_17
-%_ptr_Function__arr_v2float_uint_17 = OpTypePointer Function %_arr_v2float_uint_17
-         %68 = OpConstantNull %_arr_v2float_uint_17
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %95 = OpConstantNull %bool
-%_ptr_Function_float = OpTypePointer Function %float
-     %int_15 = OpConstant %int 15
-        %124 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %125 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %138 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %float None %15
-         %17 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpFOrdLessThan %bool %26 %float_1
-               OpSelectionMerge %30 None
-               OpBranchConditional %28 %31 %30
-         %31 = OpLabel
-               OpReturnValue %float_5
-         %30 = OpLabel
-         %34 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %35 = OpLoad %float %34
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThan %bool %35 %38
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-               OpReturnValue %float_1
-         %40 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %43 = OpLoad %float %42
-         %44 = OpConvertFToS %int %43
-               OpStore %x %44
-         %45 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %46 = OpLoad %float %45
-         %47 = OpLoad %int %x
-         %49 = OpExtInst %float %50 NClamp %46 %float_0 %float_1
-         %48 = OpConvertFToS %int %49
-         %53 = OpIMul %int %48 %int_3
-         %54 = OpIAdd %int %47 %53
-               OpStore %x %54
-         %55 = OpLoad %int %x
-         %56 = OpConvertSToF %float %55
-         %57 = OpFAdd %float %float_5 %56
-               OpReturnValue %57
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %58
-         %61 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %j = OpVariable %_ptr_Function_int Function %21
-       %data = OpVariable %_ptr_Function__arr_v2float_uint_17 Function %68
-       %x_81 = OpVariable %_ptr_Function_bool Function %95
-   %x_82_phi = OpVariable %_ptr_Function_bool Function %95
-               OpStore %i %int_0
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %76 = OpLoad %float %75
-         %78 = OpConvertFToS %int %76
-         %79 = OpIAdd %int %int_4 %78
-         %80 = OpSLessThan %bool %74 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %71
-         %81 = OpLabel
-         %84 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %85 = OpLoad %float %84
-         %86 = OpFOrdGreaterThanEqual %bool %85 %float_0
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %87
-         %88 = OpLabel
-               OpStore %j %int_0
-               OpBranch %89
-         %89 = OpLabel
-               OpLoopMerge %90 %91 None
-               OpBranch %92
-         %92 = OpLabel
-         %97 = OpLoad %int %j
-         %98 = OpSLessThan %bool %97 %int_4
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %90
-         %99 = OpLabel
-        %102 = OpLoad %int %j
-        %103 = OpLoad %int %i
-        %104 = OpFunctionCall %float %func_
-        %105 = OpIMul %int %int_4 %102
-        %106 = OpIAdd %int %105 %103
-        %108 = OpAccessChain %_ptr_Function_float %data %106 %uint_0
-               OpStore %108 %104
-        %109 = OpAccessChain %_ptr_Function_float %data %int_0 %uint_0
-        %110 = OpLoad %float %109
-        %111 = OpFOrdEqual %bool %110 %float_5
-               OpStore %x_82_phi %111
-        %112 = OpLogicalNot %bool %111
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %113
-        %114 = OpLabel
-        %116 = OpAccessChain %_ptr_Function_float %data %int_15 %uint_0
-        %117 = OpLoad %float %116
-        %118 = OpFOrdEqual %bool %117 %float_5
-               OpStore %x_81 %118
-        %119 = OpLoad %bool %x_81
-               OpStore %x_82_phi %119
-               OpBranch %113
-        %113 = OpLabel
-        %120 = OpLoad %bool %x_82_phi
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpStore %x_GLF_color %124
-               OpBranch %121
-        %123 = OpLabel
-               OpStore %x_GLF_color %125
-               OpBranch %121
-        %121 = OpLabel
-        %126 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-        %127 = OpLoad %float %126
-        %128 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-        %129 = OpLoad %float %128
-        %130 = OpFOrdGreaterThan %bool %127 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %131
-        %132 = OpLabel
-               OpReturn
-        %131 = OpLabel
-               OpBranch %91
-         %91 = OpLabel
-        %133 = OpLoad %int %j
-        %135 = OpIAdd %int %133 %int_1
-               OpStore %j %135
-               OpBranch %89
-         %90 = OpLabel
-               OpBranch %87
-         %87 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-        %136 = OpLoad %int %i
-        %137 = OpIAdd %int %136 %int_1
-               OpStore %i %137
-               OpBranch %70
-         %71 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %138
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %142 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %143 = OpFunctionCall %void %main_1
-        %144 = OpLoad %v4float %x_GLF_color
-        %145 = OpCompositeConstruct %main_out %144
-               OpReturnValue %145
-               OpFunctionEnd
-       %main = OpFunction %void None %58
-        %147 = OpLabel
-        %149 = OpLoad %v4float %gl_FragCoord_param_1
-        %148 = OpFunctionCall %main_out %main_inner %149
-        %150 = OpCompositeExtract %v4float %148 0
-               OpStore %x_GLF_color_1_1 %150
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 430c6db..0000000
--- a/test/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,104 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var x : i32;
-  let x_99 : f32 = gl_FragCoord.x;
-  if ((x_99 < 1.0)) {
-    return 5.0;
-  }
-  let x_104 : f32 = x_7.injectionSwitch.x;
-  let x_106 : f32 = x_7.injectionSwitch.y;
-  if ((x_104 > x_106)) {
-    return 1.0;
-  }
-  let x_111 : f32 = x_7.injectionSwitch.x;
-  x = i32(x_111);
-  let x_114 : f32 = x_7.injectionSwitch.x;
-  let x_118 : i32 = x;
-  x = (x_118 + (i32(clamp(x_114, 0.0, 1.0)) * 3));
-  let x_120 : i32 = x;
-  return (5.0 + f32(x_120));
-}
-
-fn main_1() {
-  var i : i32;
-  var j : i32;
-  var data : array<vec2<f32>, 17>;
-  i = 0;
-  loop {
-    let x_48 : i32 = i;
-    let x_50 : f32 = x_7.injectionSwitch.x;
-    if ((x_48 < (4 + i32(x_50)))) {
-    } else {
-      break;
-    }
-    let x_56 : f32 = gl_FragCoord.x;
-    if ((x_56 >= 0.0)) {
-      j = 0;
-      loop {
-        var x_81 : bool;
-        var x_82_phi : bool;
-        let x_64 : i32 = j;
-        if ((x_64 < 4)) {
-        } else {
-          break;
-        }
-        let x_67 : i32 = j;
-        let x_69 : i32 = i;
-        let x_71 : f32 = func_();
-        data[((4 * x_67) + x_69)].x = x_71;
-        let x_74 : f32 = data[0].x;
-        let x_75 : bool = (x_74 == 5.0);
-        x_82_phi = x_75;
-        if (!(x_75)) {
-          let x_80 : f32 = data[15].x;
-          x_81 = (x_80 == 5.0);
-          x_82_phi = x_81;
-        }
-        let x_82 : bool = x_82_phi;
-        if (x_82) {
-          x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-        } else {
-          x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        }
-        let x_87 : f32 = x_7.injectionSwitch.x;
-        let x_89 : f32 = x_7.injectionSwitch.y;
-        if ((x_87 > x_89)) {
-          return;
-        }
-
-        continuing {
-          let x_93 : i32 = j;
-          j = (x_93 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_95 : i32 = i;
-      i = (x_95 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1d0f1e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,101 +0,0 @@
-static int data[9] = (int[9])0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int temp[7] = (int[7])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_i1_(inout int a) {
-  int b = 0;
-  int i = 0;
-  bool x_115 = false;
-  bool x_116_phi = false;
-  b = 0;
-  data[0] = 5;
-  data[2] = 0;
-  data[4] = 0;
-  data[6] = 0;
-  data[8] = 0;
-  const float x_71 = gl_FragCoord.x;
-  if ((x_71 >= 0.0f)) {
-    while (true) {
-      const int x_79 = b;
-      const int x_80 = a;
-      if ((x_79 <= x_80)) {
-      } else {
-        break;
-      }
-      if ((b <= 5)) {
-        const int x_87 = b;
-        const int x_90 = data[b];
-        temp[x_87] = x_90;
-        b = (b + 2);
-      }
-    }
-  }
-  i = 0;
-  {
-    for(; (i < 3); i = (i + 1)) {
-      const int x_101 = i;
-      const int x_103 = temp[0];
-      data[x_101] = (x_103 + 1);
-    }
-  }
-  const int x_109 = temp[0];
-  const bool x_110 = (x_109 == 5);
-  x_116_phi = x_110;
-  if (x_110) {
-    const int x_114 = data[0];
-    x_115 = (x_114 == 6);
-    x_116_phi = x_115;
-  }
-  if (x_116_phi) {
-    return 1.0f;
-  } else {
-    return 0.0f;
-  }
-  return 0.0f;
-}
-
-void main_1() {
-  int i_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  i_1 = 0;
-  {
-    for(; (i_1 < 6); i_1 = (i_1 + 1)) {
-      param = i_1;
-      const float x_55 = func_i1_(param);
-      param_1 = i_1;
-      const float x_57 = func_i1_(param_1);
-      if ((x_57 == 1.0f)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      } else {
-        x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1405653..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[9];
-};
-struct tint_array_wrapper_1 {
-  int arr[7];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol_3, thread float4* const tint_symbol_4, thread tint_array_wrapper_1* const tint_symbol_5) {
-  int b = 0;
-  int i = 0;
-  bool x_115 = false;
-  bool x_116_phi = false;
-  b = 0;
-  (*(tint_symbol_3)).arr[0] = 5;
-  (*(tint_symbol_3)).arr[2] = 0;
-  (*(tint_symbol_3)).arr[4] = 0;
-  (*(tint_symbol_3)).arr[6] = 0;
-  (*(tint_symbol_3)).arr[8] = 0;
-  float const x_71 = (*(tint_symbol_4)).x;
-  if ((x_71 >= 0.0f)) {
-    while (true) {
-      int const x_79 = b;
-      int const x_80 = *(a);
-      if ((x_79 <= x_80)) {
-      } else {
-        break;
-      }
-      int const x_83 = b;
-      if ((x_83 <= 5)) {
-        int const x_87 = b;
-        int const x_88 = b;
-        int const x_90 = (*(tint_symbol_3)).arr[x_88];
-        (*(tint_symbol_5)).arr[x_87] = x_90;
-        int const x_92 = b;
-        b = as_type<int>((as_type<uint>(x_92) + as_type<uint>(2)));
-      }
-    }
-  }
-  i = 0;
-  while (true) {
-    int const x_98 = i;
-    if ((x_98 < 3)) {
-    } else {
-      break;
-    }
-    int const x_101 = i;
-    int const x_103 = (*(tint_symbol_5)).arr[0];
-    (*(tint_symbol_3)).arr[x_101] = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-    {
-      int const x_106 = i;
-      i = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-    }
-  }
-  int const x_109 = (*(tint_symbol_5)).arr[0];
-  bool const x_110 = (x_109 == 5);
-  x_116_phi = x_110;
-  if (x_110) {
-    int const x_114 = (*(tint_symbol_3)).arr[0];
-    x_115 = (x_114 == 6);
-    x_116_phi = x_115;
-  }
-  bool const x_116 = x_116_phi;
-  if (x_116) {
-    return 1.0f;
-  } else {
-    return 0.0f;
-  }
-  return 0.0f;
-}
-
-void main_1(thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7, thread tint_array_wrapper_1* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int i_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  i_1 = 0;
-  while (true) {
-    int const x_51 = i_1;
-    if ((x_51 < 6)) {
-    } else {
-      break;
-    }
-    int const x_54 = i_1;
-    param = x_54;
-    float const x_55 = func_i1_(&(param), tint_symbol_6, tint_symbol_7, tint_symbol_8);
-    int const x_56 = i_1;
-    param_1 = x_56;
-    float const x_57 = func_i1_(&(param_1), tint_symbol_6, tint_symbol_7, tint_symbol_8);
-    if ((x_57 == 1.0f)) {
-      *(tint_symbol_9) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    } else {
-      *(tint_symbol_9) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    }
-    {
-      int const x_62 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread tint_array_wrapper_1* const tint_symbol_12, thread float4* const tint_symbol_13) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(tint_symbol_11, tint_symbol_10, tint_symbol_12, tint_symbol_13);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_13)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_14 = 0.0f;
-  thread tint_array_wrapper tint_symbol_15 = {};
-  thread tint_array_wrapper_1 tint_symbol_16 = {};
-  thread float4 tint_symbol_17 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a711e79..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,258 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 153
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %temp "temp"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %x_115 "x_115"
-               OpName %x_116_phi "x_116_phi"
-               OpName %main_1 "main_1"
-               OpName %i_1 "i_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_9 ArrayStride 4
-               OpDecorate %_arr_int_uint_7 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_int_uint_9 = OpTypeArray %int %uint_9
-%_ptr_Private__arr_int_uint_9 = OpTypePointer Private %_arr_int_uint_9
-         %14 = OpConstantNull %_arr_int_uint_9
-       %data = OpVariable %_ptr_Private__arr_int_uint_9 Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_7 = OpConstant %uint 7
-%_arr_int_uint_7 = OpTypeArray %int %uint_7
-%_ptr_Private__arr_int_uint_7 = OpTypePointer Private %_arr_int_uint_7
-         %21 = OpConstantNull %_arr_int_uint_7
-       %temp = OpVariable %_ptr_Private__arr_int_uint_7 Private %21
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %float %_ptr_Function_int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %34 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_5 = OpConstant %int 5
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-      %int_6 = OpConstant %int 6
-      %int_8 = OpConstant %int 8
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-        %110 = OpTypeFunction %void
-        %136 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %137 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out %v4float
-   %func_i1_ = OpFunction %float None %23
-          %a = OpFunctionParameter %_ptr_Function_int
-         %27 = OpLabel
-          %b = OpVariable %_ptr_Function_int Function %29
-          %i = OpVariable %_ptr_Function_int Function %29
-      %x_115 = OpVariable %_ptr_Function_bool Function %34
-  %x_116_phi = OpVariable %_ptr_Function_bool Function %34
-               OpStore %b %int_0
-         %38 = OpAccessChain %_ptr_Private_int %data %int_0
-               OpStore %38 %int_5
-         %41 = OpAccessChain %_ptr_Private_int %data %int_2
-               OpStore %41 %int_0
-         %43 = OpAccessChain %_ptr_Private_int %data %int_4
-               OpStore %43 %int_0
-         %45 = OpAccessChain %_ptr_Private_int %data %int_6
-               OpStore %45 %int_0
-         %47 = OpAccessChain %_ptr_Private_int %data %int_8
-               OpStore %47 %int_0
-         %50 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %51 = OpLoad %float %50
-         %53 = OpFOrdGreaterThanEqual %bool %51 %float_0
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %54
-         %55 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %60 = OpLoad %int %b
-         %62 = OpLoad %int %a
-         %63 = OpSLessThanEqual %bool %60 %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %57
-         %64 = OpLabel
-         %67 = OpLoad %int %b
-         %68 = OpSLessThanEqual %bool %67 %int_5
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpLoad %int %b
-         %72 = OpLoad %int %b
-         %73 = OpAccessChain %_ptr_Private_int %data %72
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Private_int %temp %71
-               OpStore %75 %74
-         %76 = OpLoad %int %b
-         %77 = OpIAdd %int %76 %int_2
-               OpStore %b %77
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %58
-         %58 = OpLabel
-               OpBranch %56
-         %57 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-               OpStore %i %int_0
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %82 = OpLoad %int %i
-         %84 = OpSLessThan %bool %82 %int_3
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %87
-         %86 = OpLabel
-               OpBranch %85
-         %87 = OpLabel
-               OpBranch %79
-         %85 = OpLabel
-         %88 = OpLoad %int %i
-         %89 = OpAccessChain %_ptr_Private_int %temp %int_0
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Private_int %data %88
-         %93 = OpIAdd %int %90 %int_1
-               OpStore %91 %93
-               OpBranch %80
-         %80 = OpLabel
-         %94 = OpLoad %int %i
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %i %95
-               OpBranch %78
-         %79 = OpLabel
-         %96 = OpAccessChain %_ptr_Private_int %temp %int_0
-         %97 = OpLoad %int %96
-         %98 = OpIEqual %bool %97 %int_5
-               OpStore %x_116_phi %98
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %99
-        %100 = OpLabel
-        %101 = OpAccessChain %_ptr_Private_int %data %int_0
-        %102 = OpLoad %int %101
-        %103 = OpIEqual %bool %102 %int_6
-               OpStore %x_115 %103
-        %104 = OpLoad %bool %x_115
-               OpStore %x_116_phi %104
-               OpBranch %99
-         %99 = OpLabel
-        %105 = OpLoad %bool %x_116_phi
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %108
-        %107 = OpLabel
-               OpReturnValue %float_1
-        %108 = OpLabel
-               OpReturnValue %float_0
-        %106 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %110
-        %113 = OpLabel
-        %i_1 = OpVariable %_ptr_Function_int Function %29
-      %param = OpVariable %_ptr_Function_int Function %29
-    %param_1 = OpVariable %_ptr_Function_int Function %29
-               OpStore %i_1 %int_0
-               OpBranch %117
-        %117 = OpLabel
-               OpLoopMerge %118 %119 None
-               OpBranch %120
-        %120 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpSLessThan %bool %121 %int_6
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %125
-        %124 = OpLabel
-               OpBranch %123
-        %125 = OpLabel
-               OpBranch %118
-        %123 = OpLabel
-        %126 = OpLoad %int %i_1
-               OpStore %param %126
-        %127 = OpFunctionCall %float %func_i1_ %param
-        %129 = OpLoad %int %i_1
-               OpStore %param_1 %129
-        %130 = OpFunctionCall %float %func_i1_ %param_1
-        %132 = OpFOrdEqual %bool %130 %float_1
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %135
-        %134 = OpLabel
-               OpStore %x_GLF_color %136
-               OpBranch %133
-        %135 = OpLabel
-               OpStore %x_GLF_color %137
-               OpBranch %133
-        %133 = OpLabel
-               OpBranch %119
-        %119 = OpLabel
-        %138 = OpLoad %int %i_1
-        %139 = OpIAdd %int %138 %int_1
-               OpStore %i_1 %139
-               OpBranch %117
-        %118 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %144 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %145 = OpFunctionCall %void %main_1
-        %146 = OpLoad %v4float %x_GLF_color
-        %147 = OpCompositeConstruct %main_out %146
-               OpReturnValue %147
-               OpFunctionEnd
-       %main = OpFunction %void None %110
-        %149 = OpLabel
-        %151 = OpLoad %v4float %gl_FragCoord_param_1
-        %150 = OpFunctionCall %main_out %main_inner %151
-        %152 = OpCompositeExtract %v4float %150 0
-               OpStore %x_GLF_color_1_1 %152
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a09f0d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,114 +0,0 @@
-var<private> data : array<i32, 9>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> temp : array<i32, 7>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(a : ptr<function, i32>) -> f32 {
-  var b : i32;
-  var i : i32;
-  var x_115 : bool;
-  var x_116_phi : bool;
-  b = 0;
-  data[0] = 5;
-  data[2] = 0;
-  data[4] = 0;
-  data[6] = 0;
-  data[8] = 0;
-  let x_71 : f32 = gl_FragCoord.x;
-  if ((x_71 >= 0.0)) {
-    loop {
-      let x_79 : i32 = b;
-      let x_80 : i32 = *(a);
-      if ((x_79 <= x_80)) {
-      } else {
-        break;
-      }
-      let x_83 : i32 = b;
-      if ((x_83 <= 5)) {
-        let x_87 : i32 = b;
-        let x_88 : i32 = b;
-        let x_90 : i32 = data[x_88];
-        temp[x_87] = x_90;
-        let x_92 : i32 = b;
-        b = (x_92 + 2);
-      }
-    }
-  }
-  i = 0;
-  loop {
-    let x_98 : i32 = i;
-    if ((x_98 < 3)) {
-    } else {
-      break;
-    }
-    let x_101 : i32 = i;
-    let x_103 : i32 = temp[0];
-    data[x_101] = (x_103 + 1);
-
-    continuing {
-      let x_106 : i32 = i;
-      i = (x_106 + 1);
-    }
-  }
-  let x_109 : i32 = temp[0];
-  let x_110 : bool = (x_109 == 5);
-  x_116_phi = x_110;
-  if (x_110) {
-    let x_114 : i32 = data[0];
-    x_115 = (x_114 == 6);
-    x_116_phi = x_115;
-  }
-  let x_116 : bool = x_116_phi;
-  if (x_116) {
-    return 1.0;
-  } else {
-    return 0.0;
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var i_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  i_1 = 0;
-  loop {
-    let x_51 : i32 = i_1;
-    if ((x_51 < 6)) {
-    } else {
-      break;
-    }
-    let x_54 : i32 = i_1;
-    param = x_54;
-    let x_55 : f32 = func_i1_(&(param));
-    let x_56 : i32 = i_1;
-    param_1 = x_56;
-    let x_57 : f32 = func_i1_(&(param_1));
-    if ((x_57 == 1.0)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    } else {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    }
-
-    continuing {
-      let x_62 : i32 = i_1;
-      i_1 = (x_62 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1d0f1e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,101 +0,0 @@
-static int data[9] = (int[9])0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int temp[7] = (int[7])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_i1_(inout int a) {
-  int b = 0;
-  int i = 0;
-  bool x_115 = false;
-  bool x_116_phi = false;
-  b = 0;
-  data[0] = 5;
-  data[2] = 0;
-  data[4] = 0;
-  data[6] = 0;
-  data[8] = 0;
-  const float x_71 = gl_FragCoord.x;
-  if ((x_71 >= 0.0f)) {
-    while (true) {
-      const int x_79 = b;
-      const int x_80 = a;
-      if ((x_79 <= x_80)) {
-      } else {
-        break;
-      }
-      if ((b <= 5)) {
-        const int x_87 = b;
-        const int x_90 = data[b];
-        temp[x_87] = x_90;
-        b = (b + 2);
-      }
-    }
-  }
-  i = 0;
-  {
-    for(; (i < 3); i = (i + 1)) {
-      const int x_101 = i;
-      const int x_103 = temp[0];
-      data[x_101] = (x_103 + 1);
-    }
-  }
-  const int x_109 = temp[0];
-  const bool x_110 = (x_109 == 5);
-  x_116_phi = x_110;
-  if (x_110) {
-    const int x_114 = data[0];
-    x_115 = (x_114 == 6);
-    x_116_phi = x_115;
-  }
-  if (x_116_phi) {
-    return 1.0f;
-  } else {
-    return 0.0f;
-  }
-  return 0.0f;
-}
-
-void main_1() {
-  int i_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  i_1 = 0;
-  {
-    for(; (i_1 < 6); i_1 = (i_1 + 1)) {
-      param = i_1;
-      const float x_55 = func_i1_(param);
-      param_1 = i_1;
-      const float x_57 = func_i1_(param_1);
-      if ((x_57 == 1.0f)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      } else {
-        x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1405653..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[9];
-};
-struct tint_array_wrapper_1 {
-  int arr[7];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol_3, thread float4* const tint_symbol_4, thread tint_array_wrapper_1* const tint_symbol_5) {
-  int b = 0;
-  int i = 0;
-  bool x_115 = false;
-  bool x_116_phi = false;
-  b = 0;
-  (*(tint_symbol_3)).arr[0] = 5;
-  (*(tint_symbol_3)).arr[2] = 0;
-  (*(tint_symbol_3)).arr[4] = 0;
-  (*(tint_symbol_3)).arr[6] = 0;
-  (*(tint_symbol_3)).arr[8] = 0;
-  float const x_71 = (*(tint_symbol_4)).x;
-  if ((x_71 >= 0.0f)) {
-    while (true) {
-      int const x_79 = b;
-      int const x_80 = *(a);
-      if ((x_79 <= x_80)) {
-      } else {
-        break;
-      }
-      int const x_83 = b;
-      if ((x_83 <= 5)) {
-        int const x_87 = b;
-        int const x_88 = b;
-        int const x_90 = (*(tint_symbol_3)).arr[x_88];
-        (*(tint_symbol_5)).arr[x_87] = x_90;
-        int const x_92 = b;
-        b = as_type<int>((as_type<uint>(x_92) + as_type<uint>(2)));
-      }
-    }
-  }
-  i = 0;
-  while (true) {
-    int const x_98 = i;
-    if ((x_98 < 3)) {
-    } else {
-      break;
-    }
-    int const x_101 = i;
-    int const x_103 = (*(tint_symbol_5)).arr[0];
-    (*(tint_symbol_3)).arr[x_101] = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-    {
-      int const x_106 = i;
-      i = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-    }
-  }
-  int const x_109 = (*(tint_symbol_5)).arr[0];
-  bool const x_110 = (x_109 == 5);
-  x_116_phi = x_110;
-  if (x_110) {
-    int const x_114 = (*(tint_symbol_3)).arr[0];
-    x_115 = (x_114 == 6);
-    x_116_phi = x_115;
-  }
-  bool const x_116 = x_116_phi;
-  if (x_116) {
-    return 1.0f;
-  } else {
-    return 0.0f;
-  }
-  return 0.0f;
-}
-
-void main_1(thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7, thread tint_array_wrapper_1* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int i_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  i_1 = 0;
-  while (true) {
-    int const x_51 = i_1;
-    if ((x_51 < 6)) {
-    } else {
-      break;
-    }
-    int const x_54 = i_1;
-    param = x_54;
-    float const x_55 = func_i1_(&(param), tint_symbol_6, tint_symbol_7, tint_symbol_8);
-    int const x_56 = i_1;
-    param_1 = x_56;
-    float const x_57 = func_i1_(&(param_1), tint_symbol_6, tint_symbol_7, tint_symbol_8);
-    if ((x_57 == 1.0f)) {
-      *(tint_symbol_9) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    } else {
-      *(tint_symbol_9) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    }
-    {
-      int const x_62 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread tint_array_wrapper_1* const tint_symbol_12, thread float4* const tint_symbol_13) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(tint_symbol_11, tint_symbol_10, tint_symbol_12, tint_symbol_13);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_13)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_14 = 0.0f;
-  thread tint_array_wrapper tint_symbol_15 = {};
-  thread tint_array_wrapper_1 tint_symbol_16 = {};
-  thread float4 tint_symbol_17 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a711e79..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,258 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 153
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %temp "temp"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %x_115 "x_115"
-               OpName %x_116_phi "x_116_phi"
-               OpName %main_1 "main_1"
-               OpName %i_1 "i_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_9 ArrayStride 4
-               OpDecorate %_arr_int_uint_7 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_int_uint_9 = OpTypeArray %int %uint_9
-%_ptr_Private__arr_int_uint_9 = OpTypePointer Private %_arr_int_uint_9
-         %14 = OpConstantNull %_arr_int_uint_9
-       %data = OpVariable %_ptr_Private__arr_int_uint_9 Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_7 = OpConstant %uint 7
-%_arr_int_uint_7 = OpTypeArray %int %uint_7
-%_ptr_Private__arr_int_uint_7 = OpTypePointer Private %_arr_int_uint_7
-         %21 = OpConstantNull %_arr_int_uint_7
-       %temp = OpVariable %_ptr_Private__arr_int_uint_7 Private %21
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %float %_ptr_Function_int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %34 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_5 = OpConstant %int 5
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-      %int_6 = OpConstant %int 6
-      %int_8 = OpConstant %int 8
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-        %110 = OpTypeFunction %void
-        %136 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %137 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out %v4float
-   %func_i1_ = OpFunction %float None %23
-          %a = OpFunctionParameter %_ptr_Function_int
-         %27 = OpLabel
-          %b = OpVariable %_ptr_Function_int Function %29
-          %i = OpVariable %_ptr_Function_int Function %29
-      %x_115 = OpVariable %_ptr_Function_bool Function %34
-  %x_116_phi = OpVariable %_ptr_Function_bool Function %34
-               OpStore %b %int_0
-         %38 = OpAccessChain %_ptr_Private_int %data %int_0
-               OpStore %38 %int_5
-         %41 = OpAccessChain %_ptr_Private_int %data %int_2
-               OpStore %41 %int_0
-         %43 = OpAccessChain %_ptr_Private_int %data %int_4
-               OpStore %43 %int_0
-         %45 = OpAccessChain %_ptr_Private_int %data %int_6
-               OpStore %45 %int_0
-         %47 = OpAccessChain %_ptr_Private_int %data %int_8
-               OpStore %47 %int_0
-         %50 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %51 = OpLoad %float %50
-         %53 = OpFOrdGreaterThanEqual %bool %51 %float_0
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %54
-         %55 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %60 = OpLoad %int %b
-         %62 = OpLoad %int %a
-         %63 = OpSLessThanEqual %bool %60 %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %57
-         %64 = OpLabel
-         %67 = OpLoad %int %b
-         %68 = OpSLessThanEqual %bool %67 %int_5
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpLoad %int %b
-         %72 = OpLoad %int %b
-         %73 = OpAccessChain %_ptr_Private_int %data %72
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Private_int %temp %71
-               OpStore %75 %74
-         %76 = OpLoad %int %b
-         %77 = OpIAdd %int %76 %int_2
-               OpStore %b %77
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %58
-         %58 = OpLabel
-               OpBranch %56
-         %57 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-               OpStore %i %int_0
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %82 = OpLoad %int %i
-         %84 = OpSLessThan %bool %82 %int_3
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %87
-         %86 = OpLabel
-               OpBranch %85
-         %87 = OpLabel
-               OpBranch %79
-         %85 = OpLabel
-         %88 = OpLoad %int %i
-         %89 = OpAccessChain %_ptr_Private_int %temp %int_0
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Private_int %data %88
-         %93 = OpIAdd %int %90 %int_1
-               OpStore %91 %93
-               OpBranch %80
-         %80 = OpLabel
-         %94 = OpLoad %int %i
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %i %95
-               OpBranch %78
-         %79 = OpLabel
-         %96 = OpAccessChain %_ptr_Private_int %temp %int_0
-         %97 = OpLoad %int %96
-         %98 = OpIEqual %bool %97 %int_5
-               OpStore %x_116_phi %98
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %99
-        %100 = OpLabel
-        %101 = OpAccessChain %_ptr_Private_int %data %int_0
-        %102 = OpLoad %int %101
-        %103 = OpIEqual %bool %102 %int_6
-               OpStore %x_115 %103
-        %104 = OpLoad %bool %x_115
-               OpStore %x_116_phi %104
-               OpBranch %99
-         %99 = OpLabel
-        %105 = OpLoad %bool %x_116_phi
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %108
-        %107 = OpLabel
-               OpReturnValue %float_1
-        %108 = OpLabel
-               OpReturnValue %float_0
-        %106 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %110
-        %113 = OpLabel
-        %i_1 = OpVariable %_ptr_Function_int Function %29
-      %param = OpVariable %_ptr_Function_int Function %29
-    %param_1 = OpVariable %_ptr_Function_int Function %29
-               OpStore %i_1 %int_0
-               OpBranch %117
-        %117 = OpLabel
-               OpLoopMerge %118 %119 None
-               OpBranch %120
-        %120 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpSLessThan %bool %121 %int_6
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %125
-        %124 = OpLabel
-               OpBranch %123
-        %125 = OpLabel
-               OpBranch %118
-        %123 = OpLabel
-        %126 = OpLoad %int %i_1
-               OpStore %param %126
-        %127 = OpFunctionCall %float %func_i1_ %param
-        %129 = OpLoad %int %i_1
-               OpStore %param_1 %129
-        %130 = OpFunctionCall %float %func_i1_ %param_1
-        %132 = OpFOrdEqual %bool %130 %float_1
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %135
-        %134 = OpLabel
-               OpStore %x_GLF_color %136
-               OpBranch %133
-        %135 = OpLabel
-               OpStore %x_GLF_color %137
-               OpBranch %133
-        %133 = OpLabel
-               OpBranch %119
-        %119 = OpLabel
-        %138 = OpLoad %int %i_1
-        %139 = OpIAdd %int %138 %int_1
-               OpStore %i_1 %139
-               OpBranch %117
-        %118 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %144 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %145 = OpFunctionCall %void %main_1
-        %146 = OpLoad %v4float %x_GLF_color
-        %147 = OpCompositeConstruct %main_out %146
-               OpReturnValue %147
-               OpFunctionEnd
-       %main = OpFunction %void None %110
-        %149 = OpLabel
-        %151 = OpLoad %v4float %gl_FragCoord_param_1
-        %150 = OpFunctionCall %main_out %main_inner %151
-        %152 = OpCompositeExtract %v4float %150 0
-               OpStore %x_GLF_color_1_1 %152
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a09f0d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array-2/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,114 +0,0 @@
-var<private> data : array<i32, 9>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> temp : array<i32, 7>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(a : ptr<function, i32>) -> f32 {
-  var b : i32;
-  var i : i32;
-  var x_115 : bool;
-  var x_116_phi : bool;
-  b = 0;
-  data[0] = 5;
-  data[2] = 0;
-  data[4] = 0;
-  data[6] = 0;
-  data[8] = 0;
-  let x_71 : f32 = gl_FragCoord.x;
-  if ((x_71 >= 0.0)) {
-    loop {
-      let x_79 : i32 = b;
-      let x_80 : i32 = *(a);
-      if ((x_79 <= x_80)) {
-      } else {
-        break;
-      }
-      let x_83 : i32 = b;
-      if ((x_83 <= 5)) {
-        let x_87 : i32 = b;
-        let x_88 : i32 = b;
-        let x_90 : i32 = data[x_88];
-        temp[x_87] = x_90;
-        let x_92 : i32 = b;
-        b = (x_92 + 2);
-      }
-    }
-  }
-  i = 0;
-  loop {
-    let x_98 : i32 = i;
-    if ((x_98 < 3)) {
-    } else {
-      break;
-    }
-    let x_101 : i32 = i;
-    let x_103 : i32 = temp[0];
-    data[x_101] = (x_103 + 1);
-
-    continuing {
-      let x_106 : i32 = i;
-      i = (x_106 + 1);
-    }
-  }
-  let x_109 : i32 = temp[0];
-  let x_110 : bool = (x_109 == 5);
-  x_116_phi = x_110;
-  if (x_110) {
-    let x_114 : i32 = data[0];
-    x_115 = (x_114 == 6);
-    x_116_phi = x_115;
-  }
-  let x_116 : bool = x_116_phi;
-  if (x_116) {
-    return 1.0;
-  } else {
-    return 0.0;
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var i_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  i_1 = 0;
-  loop {
-    let x_51 : i32 = i_1;
-    if ((x_51 < 6)) {
-    } else {
-      break;
-    }
-    let x_54 : i32 = i_1;
-    param = x_54;
-    let x_55 : f32 = func_i1_(&(param));
-    let x_56 : i32 = i_1;
-    param_1 = x_56;
-    let x_57 : f32 = func_i1_(&(param_1));
-    if ((x_57 == 1.0)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    } else {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    }
-
-    continuing {
-      let x_62 : i32 = i_1;
-      i_1 = (x_62 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index cd61498..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,81 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_i1_(inout int x) {
-  int a = 0;
-  int data[9] = (int[9])0;
-  int temp[2] = (int[2])0;
-  int i = 0;
-  bool x_95 = false;
-  bool x_96_phi = false;
-  a = 0;
-  data[0] = 5;
-  while (true) {
-    const int x_56 = a;
-    const int x_57 = x;
-    if ((x_56 <= x_57)) {
-    } else {
-      break;
-    }
-    if ((a <= 10)) {
-      const int x_64 = a;
-      const int x_69 = data[min(a, 0)];
-      temp[min(x_64, 1)] = x_69;
-      a = (a + 1);
-    }
-  }
-  i = 0;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      const int x_80 = i;
-      const int x_82 = temp[0];
-      data[x_80] = (x_82 + i);
-    }
-  }
-  const int x_89 = data[0];
-  const bool x_90 = (x_89 == 5);
-  x_96_phi = x_90;
-  if (x_90) {
-    const int x_94 = data[1];
-    x_95 = (x_94 == 6);
-    x_96_phi = x_95;
-  }
-  if (x_96_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-void main_1() {
-  int i_1 = 0;
-  int param = 0;
-  i_1 = 1;
-  {
-    for(; (i_1 < 6); i_1 = (i_1 + 1)) {
-      param = i_1;
-      func_i1_(param);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.msl
deleted file mode 100644
index bb5f180..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,110 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[9];
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_i1_(thread int* const x, thread float4* const tint_symbol_3) {
-  int a = 0;
-  tint_array_wrapper data = {};
-  tint_array_wrapper_1 temp = {};
-  int i = 0;
-  bool x_95 = false;
-  bool x_96_phi = false;
-  a = 0;
-  data.arr[0] = 5;
-  while (true) {
-    int const x_56 = a;
-    int const x_57 = *(x);
-    if ((x_56 <= x_57)) {
-    } else {
-      break;
-    }
-    int const x_60 = a;
-    if ((x_60 <= 10)) {
-      int const x_64 = a;
-      int const x_66 = a;
-      int const x_69 = data.arr[min(x_66, 0)];
-      temp.arr[min(x_64, 1)] = x_69;
-      int const x_71 = a;
-      a = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-    }
-  }
-  i = 0;
-  while (true) {
-    int const x_77 = i;
-    if ((x_77 < 2)) {
-    } else {
-      break;
-    }
-    int const x_80 = i;
-    int const x_82 = temp.arr[0];
-    int const x_83 = i;
-    data.arr[x_80] = as_type<int>((as_type<uint>(x_82) + as_type<uint>(x_83)));
-    {
-      int const x_86 = i;
-      i = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-    }
-  }
-  int const x_89 = data.arr[0];
-  bool const x_90 = (x_89 == 5);
-  x_96_phi = x_90;
-  if (x_90) {
-    int const x_94 = data.arr[1];
-    x_95 = (x_94 == 6);
-    x_96_phi = x_95;
-  }
-  bool const x_96 = x_96_phi;
-  if (x_96) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-void main_1(thread float4* const tint_symbol_4) {
-  int i_1 = 0;
-  int param = 0;
-  i_1 = 1;
-  while (true) {
-    int const x_43 = i_1;
-    if ((x_43 < 6)) {
-    } else {
-      break;
-    }
-    int const x_46 = i_1;
-    param = x_46;
-    func_i1_(&(param), tint_symbol_4);
-    {
-      int const x_48 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5) {
-  main_1(tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8342f8b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,218 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %a "a"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %i "i"
-               OpName %x_95 "x_95"
-               OpName %x_96_phi "x_96_phi"
-               OpName %main_1 "main_1"
-               OpName %i_1 "i_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_9 ArrayStride 4
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-          %8 = OpTypeFunction %void %_ptr_Function_int
-         %16 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_int_uint_9 = OpTypeArray %int %uint_9
-%_ptr_Function__arr_int_uint_9 = OpTypePointer Function %_arr_int_uint_9
-         %22 = OpConstantNull %_arr_int_uint_9
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %27 = OpConstantNull %_arr_int_uint_2
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %98 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %99 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %100 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %void None %8
-          %x = OpFunctionParameter %_ptr_Function_int
-         %14 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %16
-       %data = OpVariable %_ptr_Function__arr_int_uint_9 Function %22
-       %temp = OpVariable %_ptr_Function__arr_int_uint_2 Function %27
-          %i = OpVariable %_ptr_Function_int Function %16
-       %x_95 = OpVariable %_ptr_Function_bool Function %32
-   %x_96_phi = OpVariable %_ptr_Function_bool Function %32
-               OpStore %a %int_0
-         %35 = OpAccessChain %_ptr_Function_int %data %int_0
-               OpStore %35 %int_5
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %41 = OpLoad %int %a
-         %43 = OpLoad %int %x
-         %44 = OpSLessThanEqual %bool %41 %43
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %38
-         %45 = OpLabel
-         %48 = OpLoad %int %a
-         %50 = OpSLessThanEqual %bool %48 %int_10
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %53 = OpLoad %int %a
-         %54 = OpLoad %int %a
-         %55 = OpExtInst %int %56 SMin %54 %int_0
-         %57 = OpAccessChain %_ptr_Function_int %data %55
-         %58 = OpLoad %int %57
-         %59 = OpExtInst %int %56 SMin %53 %int_1
-         %61 = OpAccessChain %_ptr_Function_int %temp %59
-               OpStore %61 %58
-         %62 = OpLoad %int %a
-         %63 = OpIAdd %int %62 %int_1
-               OpStore %a %63
-               OpBranch %51
-         %51 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-               OpBranch %37
-         %38 = OpLabel
-               OpStore %i %int_0
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %i
-         %70 = OpSLessThan %bool %68 %int_2
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %65
-         %71 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpAccessChain %_ptr_Function_int %temp %int_0
-         %76 = OpLoad %int %75
-         %77 = OpLoad %int %i
-         %78 = OpAccessChain %_ptr_Function_int %data %74
-         %79 = OpIAdd %int %76 %77
-               OpStore %78 %79
-               OpBranch %66
-         %66 = OpLabel
-         %80 = OpLoad %int %i
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %i %81
-               OpBranch %64
-         %65 = OpLabel
-         %82 = OpAccessChain %_ptr_Function_int %data %int_0
-         %83 = OpLoad %int %82
-         %84 = OpIEqual %bool %83 %int_5
-               OpStore %x_96_phi %84
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Function_int %data %int_1
-         %88 = OpLoad %int %87
-         %90 = OpIEqual %bool %88 %int_6
-               OpStore %x_95 %90
-         %91 = OpLoad %bool %x_95
-               OpStore %x_96_phi %91
-               OpBranch %85
-         %85 = OpLabel
-         %92 = OpLoad %bool %x_96_phi
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpStore %x_GLF_color %98
-               OpBranch %93
-         %95 = OpLabel
-               OpStore %x_GLF_color %99
-               OpBranch %93
-         %93 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %100
-        %102 = OpLabel
-        %i_1 = OpVariable %_ptr_Function_int Function %16
-      %param = OpVariable %_ptr_Function_int Function %16
-               OpStore %i_1 %int_1
-               OpBranch %105
-        %105 = OpLabel
-               OpLoopMerge %106 %107 None
-               OpBranch %108
-        %108 = OpLabel
-        %109 = OpLoad %int %i_1
-        %110 = OpSLessThan %bool %109 %int_6
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %113
-        %112 = OpLabel
-               OpBranch %111
-        %113 = OpLabel
-               OpBranch %106
-        %111 = OpLabel
-        %114 = OpLoad %int %i_1
-               OpStore %param %114
-        %115 = OpFunctionCall %void %func_i1_ %param
-               OpBranch %107
-        %107 = OpLabel
-        %117 = OpLoad %int %i_1
-        %118 = OpIAdd %int %117 %int_1
-               OpStore %i_1 %118
-               OpBranch %105
-        %106 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %100
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 19735ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,94 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) {
-  var a : i32;
-  var data : array<i32, 9>;
-  var temp : array<i32, 2>;
-  var i : i32;
-  var x_95 : bool;
-  var x_96_phi : bool;
-  a = 0;
-  data[0] = 5;
-  loop {
-    let x_56 : i32 = a;
-    let x_57 : i32 = *(x);
-    if ((x_56 <= x_57)) {
-    } else {
-      break;
-    }
-    let x_60 : i32 = a;
-    if ((x_60 <= 10)) {
-      let x_64 : i32 = a;
-      let x_66 : i32 = a;
-      let x_69 : i32 = data[min(x_66, 0)];
-      temp[min(x_64, 1)] = x_69;
-      let x_71 : i32 = a;
-      a = (x_71 + 1);
-    }
-  }
-  i = 0;
-  loop {
-    let x_77 : i32 = i;
-    if ((x_77 < 2)) {
-    } else {
-      break;
-    }
-    let x_80 : i32 = i;
-    let x_82 : i32 = temp[0];
-    let x_83 : i32 = i;
-    data[x_80] = (x_82 + x_83);
-
-    continuing {
-      let x_86 : i32 = i;
-      i = (x_86 + 1);
-    }
-  }
-  let x_89 : i32 = data[0];
-  let x_90 : bool = (x_89 == 5);
-  x_96_phi = x_90;
-  if (x_90) {
-    let x_94 : i32 = data[1];
-    x_95 = (x_94 == 6);
-    x_96_phi = x_95;
-  }
-  let x_96 : bool = x_96_phi;
-  if (x_96) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-fn main_1() {
-  var i_1 : i32;
-  var param : i32;
-  i_1 = 1;
-  loop {
-    let x_43 : i32 = i_1;
-    if ((x_43 < 6)) {
-    } else {
-      break;
-    }
-    let x_46 : i32 = i_1;
-    param = x_46;
-    func_i1_(&(param));
-
-    continuing {
-      let x_48 : i32 = i_1;
-      i_1 = (x_48 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index cd61498..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,81 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_i1_(inout int x) {
-  int a = 0;
-  int data[9] = (int[9])0;
-  int temp[2] = (int[2])0;
-  int i = 0;
-  bool x_95 = false;
-  bool x_96_phi = false;
-  a = 0;
-  data[0] = 5;
-  while (true) {
-    const int x_56 = a;
-    const int x_57 = x;
-    if ((x_56 <= x_57)) {
-    } else {
-      break;
-    }
-    if ((a <= 10)) {
-      const int x_64 = a;
-      const int x_69 = data[min(a, 0)];
-      temp[min(x_64, 1)] = x_69;
-      a = (a + 1);
-    }
-  }
-  i = 0;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      const int x_80 = i;
-      const int x_82 = temp[0];
-      data[x_80] = (x_82 + i);
-    }
-  }
-  const int x_89 = data[0];
-  const bool x_90 = (x_89 == 5);
-  x_96_phi = x_90;
-  if (x_90) {
-    const int x_94 = data[1];
-    x_95 = (x_94 == 6);
-    x_96_phi = x_95;
-  }
-  if (x_96_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-void main_1() {
-  int i_1 = 0;
-  int param = 0;
-  i_1 = 1;
-  {
-    for(; (i_1 < 6); i_1 = (i_1 + 1)) {
-      param = i_1;
-      func_i1_(param);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.msl
deleted file mode 100644
index bb5f180..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,110 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[9];
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_i1_(thread int* const x, thread float4* const tint_symbol_3) {
-  int a = 0;
-  tint_array_wrapper data = {};
-  tint_array_wrapper_1 temp = {};
-  int i = 0;
-  bool x_95 = false;
-  bool x_96_phi = false;
-  a = 0;
-  data.arr[0] = 5;
-  while (true) {
-    int const x_56 = a;
-    int const x_57 = *(x);
-    if ((x_56 <= x_57)) {
-    } else {
-      break;
-    }
-    int const x_60 = a;
-    if ((x_60 <= 10)) {
-      int const x_64 = a;
-      int const x_66 = a;
-      int const x_69 = data.arr[min(x_66, 0)];
-      temp.arr[min(x_64, 1)] = x_69;
-      int const x_71 = a;
-      a = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-    }
-  }
-  i = 0;
-  while (true) {
-    int const x_77 = i;
-    if ((x_77 < 2)) {
-    } else {
-      break;
-    }
-    int const x_80 = i;
-    int const x_82 = temp.arr[0];
-    int const x_83 = i;
-    data.arr[x_80] = as_type<int>((as_type<uint>(x_82) + as_type<uint>(x_83)));
-    {
-      int const x_86 = i;
-      i = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-    }
-  }
-  int const x_89 = data.arr[0];
-  bool const x_90 = (x_89 == 5);
-  x_96_phi = x_90;
-  if (x_90) {
-    int const x_94 = data.arr[1];
-    x_95 = (x_94 == 6);
-    x_96_phi = x_95;
-  }
-  bool const x_96 = x_96_phi;
-  if (x_96) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-void main_1(thread float4* const tint_symbol_4) {
-  int i_1 = 0;
-  int param = 0;
-  i_1 = 1;
-  while (true) {
-    int const x_43 = i_1;
-    if ((x_43 < 6)) {
-    } else {
-      break;
-    }
-    int const x_46 = i_1;
-    param = x_46;
-    func_i1_(&(param), tint_symbol_4);
-    {
-      int const x_48 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5) {
-  main_1(tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8342f8b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,218 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %a "a"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %i "i"
-               OpName %x_95 "x_95"
-               OpName %x_96_phi "x_96_phi"
-               OpName %main_1 "main_1"
-               OpName %i_1 "i_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_9 ArrayStride 4
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-          %8 = OpTypeFunction %void %_ptr_Function_int
-         %16 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_int_uint_9 = OpTypeArray %int %uint_9
-%_ptr_Function__arr_int_uint_9 = OpTypePointer Function %_arr_int_uint_9
-         %22 = OpConstantNull %_arr_int_uint_9
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %27 = OpConstantNull %_arr_int_uint_2
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %98 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %99 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %100 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %void None %8
-          %x = OpFunctionParameter %_ptr_Function_int
-         %14 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %16
-       %data = OpVariable %_ptr_Function__arr_int_uint_9 Function %22
-       %temp = OpVariable %_ptr_Function__arr_int_uint_2 Function %27
-          %i = OpVariable %_ptr_Function_int Function %16
-       %x_95 = OpVariable %_ptr_Function_bool Function %32
-   %x_96_phi = OpVariable %_ptr_Function_bool Function %32
-               OpStore %a %int_0
-         %35 = OpAccessChain %_ptr_Function_int %data %int_0
-               OpStore %35 %int_5
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %41 = OpLoad %int %a
-         %43 = OpLoad %int %x
-         %44 = OpSLessThanEqual %bool %41 %43
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %38
-         %45 = OpLabel
-         %48 = OpLoad %int %a
-         %50 = OpSLessThanEqual %bool %48 %int_10
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %53 = OpLoad %int %a
-         %54 = OpLoad %int %a
-         %55 = OpExtInst %int %56 SMin %54 %int_0
-         %57 = OpAccessChain %_ptr_Function_int %data %55
-         %58 = OpLoad %int %57
-         %59 = OpExtInst %int %56 SMin %53 %int_1
-         %61 = OpAccessChain %_ptr_Function_int %temp %59
-               OpStore %61 %58
-         %62 = OpLoad %int %a
-         %63 = OpIAdd %int %62 %int_1
-               OpStore %a %63
-               OpBranch %51
-         %51 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-               OpBranch %37
-         %38 = OpLabel
-               OpStore %i %int_0
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %i
-         %70 = OpSLessThan %bool %68 %int_2
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %65
-         %71 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpAccessChain %_ptr_Function_int %temp %int_0
-         %76 = OpLoad %int %75
-         %77 = OpLoad %int %i
-         %78 = OpAccessChain %_ptr_Function_int %data %74
-         %79 = OpIAdd %int %76 %77
-               OpStore %78 %79
-               OpBranch %66
-         %66 = OpLabel
-         %80 = OpLoad %int %i
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %i %81
-               OpBranch %64
-         %65 = OpLabel
-         %82 = OpAccessChain %_ptr_Function_int %data %int_0
-         %83 = OpLoad %int %82
-         %84 = OpIEqual %bool %83 %int_5
-               OpStore %x_96_phi %84
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Function_int %data %int_1
-         %88 = OpLoad %int %87
-         %90 = OpIEqual %bool %88 %int_6
-               OpStore %x_95 %90
-         %91 = OpLoad %bool %x_95
-               OpStore %x_96_phi %91
-               OpBranch %85
-         %85 = OpLabel
-         %92 = OpLoad %bool %x_96_phi
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpStore %x_GLF_color %98
-               OpBranch %93
-         %95 = OpLabel
-               OpStore %x_GLF_color %99
-               OpBranch %93
-         %93 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %100
-        %102 = OpLabel
-        %i_1 = OpVariable %_ptr_Function_int Function %16
-      %param = OpVariable %_ptr_Function_int Function %16
-               OpStore %i_1 %int_1
-               OpBranch %105
-        %105 = OpLabel
-               OpLoopMerge %106 %107 None
-               OpBranch %108
-        %108 = OpLabel
-        %109 = OpLoad %int %i_1
-        %110 = OpSLessThan %bool %109 %int_6
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %113
-        %112 = OpLabel
-               OpBranch %111
-        %113 = OpLabel
-               OpBranch %106
-        %111 = OpLabel
-        %114 = OpLoad %int %i_1
-               OpStore %param %114
-        %115 = OpFunctionCall %void %func_i1_ %param
-               OpBranch %107
-        %107 = OpLabel
-        %117 = OpLoad %int %i_1
-        %118 = OpIAdd %int %117 %int_1
-               OpStore %i_1 %118
-               OpBranch %105
-        %106 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %100
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 19735ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/assign-array-value-to-another-array/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,94 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) {
-  var a : i32;
-  var data : array<i32, 9>;
-  var temp : array<i32, 2>;
-  var i : i32;
-  var x_95 : bool;
-  var x_96_phi : bool;
-  a = 0;
-  data[0] = 5;
-  loop {
-    let x_56 : i32 = a;
-    let x_57 : i32 = *(x);
-    if ((x_56 <= x_57)) {
-    } else {
-      break;
-    }
-    let x_60 : i32 = a;
-    if ((x_60 <= 10)) {
-      let x_64 : i32 = a;
-      let x_66 : i32 = a;
-      let x_69 : i32 = data[min(x_66, 0)];
-      temp[min(x_64, 1)] = x_69;
-      let x_71 : i32 = a;
-      a = (x_71 + 1);
-    }
-  }
-  i = 0;
-  loop {
-    let x_77 : i32 = i;
-    if ((x_77 < 2)) {
-    } else {
-      break;
-    }
-    let x_80 : i32 = i;
-    let x_82 : i32 = temp[0];
-    let x_83 : i32 = i;
-    data[x_80] = (x_82 + x_83);
-
-    continuing {
-      let x_86 : i32 = i;
-      i = (x_86 + 1);
-    }
-  }
-  let x_89 : i32 = data[0];
-  let x_90 : bool = (x_89 == 5);
-  x_96_phi = x_90;
-  if (x_90) {
-    let x_94 : i32 = data[1];
-    x_95 = (x_94 == 6);
-    x_96_phi = x_95;
-  }
-  let x_96 : bool = x_96_phi;
-  if (x_96) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-fn main_1() {
-  var i_1 : i32;
-  var param : i32;
-  i_1 = 1;
-  loop {
-    let x_43 : i32 = i_1;
-    if ((x_43 < 6)) {
-    } else {
-      break;
-    }
-    let x_46 : i32 = i_1;
-    param = x_46;
-    func_i1_(&(param));
-
-    continuing {
-      let x_48 : i32 = i_1;
-      i_1 = (x_48 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 475a276..0000000
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-static uint3 gl_LocalInvocationID = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_7 : register(u0, space0);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[1];
-};
-
-void main_1() {
-  int lid = 0;
-  int val = 0;
-  int i = 0;
-  const uint x_40 = gl_LocalInvocationID.x;
-  lid = asint(x_40);
-  const int x_43 = asint(x_7.Load(0u));
-  val = x_43;
-  i = 0;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      if ((lid > 0)) {
-        const int x_58 = asint(x_7.Load((4u + (4u * uint((lid - 1))))));
-        val = (val + x_58);
-        const float x_62 = asfloat(x_10[0].x);
-        if ((x_62 > 100.0f)) {
-          break;
-        }
-      }
-      GroupMemoryBarrierWithGroupSync();
-    }
-  }
-  if ((lid == 0)) {
-    x_7.Store((4u + (4u * uint(0))), asuint(42));
-  }
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 gl_LocalInvocationID_param : SV_GroupThreadID;
-};
-
-void main_inner(uint3 gl_LocalInvocationID_param) {
-  gl_LocalInvocationID = gl_LocalInvocationID_param;
-  main_1();
-}
-
-[numthreads(16, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_LocalInvocationID_param);
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.msl
deleted file mode 100644
index d7ed948..0000000
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct doesNotMatter {
-  /* 0x0000 */ int global_seed;
-  /* 0x0004 */ int data[1];
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-
-void main_1(constant buf1& x_10, device doesNotMatter& x_7, thread uint3* const tint_symbol_1) {
-  int lid = 0;
-  int val = 0;
-  int i = 0;
-  uint const x_40 = (*(tint_symbol_1)).x;
-  lid = as_type<int>(x_40);
-  int const x_43 = x_7.global_seed;
-  val = x_43;
-  i = 0;
-  while (true) {
-    int const x_48 = i;
-    if ((x_48 < 2)) {
-    } else {
-      break;
-    }
-    int const x_51 = lid;
-    if ((x_51 > 0)) {
-      int const x_55 = lid;
-      int const x_58 = x_7.data[as_type<int>((as_type<uint>(x_55) - as_type<uint>(1)))];
-      int const x_59 = val;
-      val = as_type<int>((as_type<uint>(x_59) + as_type<uint>(x_58)));
-      float const x_62 = x_10.injectionSwitch.x;
-      if ((x_62 > 100.0f)) {
-        break;
-      }
-    }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    {
-      int const x_66 = i;
-      i = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-    }
-  }
-  int const x_68 = lid;
-  if ((x_68 == 0)) {
-    x_7.data[0] = 42;
-  }
-  return;
-}
-
-void tint_symbol_inner(constant buf1& x_10, device doesNotMatter& x_7, uint3 gl_LocalInvocationID_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = gl_LocalInvocationID_param;
-  main_1(x_10, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 gl_LocalInvocationID_param [[thread_position_in_threadgroup]], constant buf1& x_10 [[buffer(0)]], device doesNotMatter& x_7 [[buffer(1)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_10, x_7, gl_LocalInvocationID_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b830459..0000000
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 86
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_LocalInvocationID_param_1
-               OpExecutionMode %main LocalSize 16 1 1
-               OpName %gl_LocalInvocationID_param_1 "gl_LocalInvocationID_param_1"
-               OpName %gl_LocalInvocationID "gl_LocalInvocationID"
-               OpName %doesNotMatter "doesNotMatter"
-               OpMemberName %doesNotMatter 0 "global_seed"
-               OpMemberName %doesNotMatter 1 "data"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %lid "lid"
-               OpName %val "val"
-               OpName %i "i"
-               OpName %main_inner "main_inner"
-               OpName %gl_LocalInvocationID_param "gl_LocalInvocationID_param"
-               OpName %main "main"
-               OpDecorate %gl_LocalInvocationID_param_1 BuiltIn LocalInvocationId
-               OpDecorate %doesNotMatter Block
-               OpMemberDecorate %doesNotMatter 0 Offset 0
-               OpMemberDecorate %doesNotMatter 1 Offset 4
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_LocalInvocationID_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-%gl_LocalInvocationID = OpVariable %_ptr_Private_v3uint Private %7
-        %int = OpTypeInt 32 1
-%_runtimearr_int = OpTypeRuntimeArray %int
-%doesNotMatter = OpTypeStruct %int %_runtimearr_int
-%_ptr_StorageBuffer_doesNotMatter = OpTypePointer StorageBuffer %doesNotMatter
-        %x_7 = OpVariable %_ptr_StorageBuffer_doesNotMatter StorageBuffer
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-  %float_100 = OpConstant %float 100
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-     %int_42 = OpConstant %int 42
-         %77 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-        %lid = OpVariable %_ptr_Function_int Function %24
-        %val = OpVariable %_ptr_Function_int Function %24
-          %i = OpVariable %_ptr_Function_int Function %24
-         %29 = OpAccessChain %_ptr_Private_uint %gl_LocalInvocationID %uint_0
-         %30 = OpLoad %uint %29
-         %31 = OpBitcast %int %30
-               OpStore %lid %31
-         %33 = OpAccessChain %_ptr_StorageBuffer_int %x_7 %uint_0
-         %34 = OpLoad %int %33
-               OpStore %val %34
-               OpStore %i %int_0
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpSLessThan %bool %40 %int_2
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %37
-         %44 = OpLabel
-         %47 = OpLoad %int %lid
-         %48 = OpSGreaterThan %bool %47 %int_0
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-         %51 = OpLoad %int %lid
-         %54 = OpISub %int %51 %int_1
-         %55 = OpAccessChain %_ptr_StorageBuffer_int %x_7 %uint_1 %54
-         %56 = OpLoad %int %55
-         %57 = OpLoad %int %val
-         %58 = OpIAdd %int %57 %56
-               OpStore %val %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-         %61 = OpLoad %float %60
-         %63 = OpFOrdGreaterThan %bool %61 %float_100
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-               OpBranch %37
-         %64 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %38
-         %38 = OpLabel
-         %69 = OpLoad %int %i
-         %70 = OpIAdd %int %69 %int_1
-               OpStore %i %70
-               OpBranch %36
-         %37 = OpLabel
-         %71 = OpLoad %int %lid
-         %72 = OpIEqual %bool %71 %int_0
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpAccessChain %_ptr_StorageBuffer_int %x_7 %uint_1 %int_0
-               OpStore %75 %int_42
-               OpBranch %73
-         %73 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %77
-%gl_LocalInvocationID_param = OpFunctionParameter %v3uint
-         %80 = OpLabel
-               OpStore %gl_LocalInvocationID %gl_LocalInvocationID_param
-         %81 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %83 = OpLabel
-         %85 = OpLoad %v3uint %gl_LocalInvocationID_param_1
-         %84 = OpFunctionCall %void %main_inner %85
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f57b088..0000000
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct doesNotMatter {
-  global_seed : i32;
-  data : RTArr;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_LocalInvocationID : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_7 : doesNotMatter;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-fn main_1() {
-  var lid : i32;
-  var val : i32;
-  var i : i32;
-  let x_40 : u32 = gl_LocalInvocationID.x;
-  lid = bitcast<i32>(x_40);
-  let x_43 : i32 = x_7.global_seed;
-  val = x_43;
-  i = 0;
-  loop {
-    let x_48 : i32 = i;
-    if ((x_48 < 2)) {
-    } else {
-      break;
-    }
-    let x_51 : i32 = lid;
-    if ((x_51 > 0)) {
-      let x_55 : i32 = lid;
-      let x_58 : i32 = x_7.data[(x_55 - 1)];
-      let x_59 : i32 = val;
-      val = (x_59 + x_58);
-      let x_62 : f32 = x_10.injectionSwitch.x;
-      if ((x_62 > 100.0)) {
-        break;
-      }
-    }
-    workgroupBarrier();
-
-    continuing {
-      let x_66 : i32 = i;
-      i = (x_66 + 1);
-    }
-  }
-  let x_68 : i32 = lid;
-  if ((x_68 == 0)) {
-    x_7.data[0] = 42;
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(16, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] gl_LocalInvocationID_param : vec3<u32>) {
-  gl_LocalInvocationID = gl_LocalInvocationID_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 475a276..0000000
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-static uint3 gl_LocalInvocationID = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_7 : register(u0, space0);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[1];
-};
-
-void main_1() {
-  int lid = 0;
-  int val = 0;
-  int i = 0;
-  const uint x_40 = gl_LocalInvocationID.x;
-  lid = asint(x_40);
-  const int x_43 = asint(x_7.Load(0u));
-  val = x_43;
-  i = 0;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      if ((lid > 0)) {
-        const int x_58 = asint(x_7.Load((4u + (4u * uint((lid - 1))))));
-        val = (val + x_58);
-        const float x_62 = asfloat(x_10[0].x);
-        if ((x_62 > 100.0f)) {
-          break;
-        }
-      }
-      GroupMemoryBarrierWithGroupSync();
-    }
-  }
-  if ((lid == 0)) {
-    x_7.Store((4u + (4u * uint(0))), asuint(42));
-  }
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 gl_LocalInvocationID_param : SV_GroupThreadID;
-};
-
-void main_inner(uint3 gl_LocalInvocationID_param) {
-  gl_LocalInvocationID = gl_LocalInvocationID_param;
-  main_1();
-}
-
-[numthreads(16, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_LocalInvocationID_param);
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.msl
deleted file mode 100644
index d7ed948..0000000
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct doesNotMatter {
-  /* 0x0000 */ int global_seed;
-  /* 0x0004 */ int data[1];
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-
-void main_1(constant buf1& x_10, device doesNotMatter& x_7, thread uint3* const tint_symbol_1) {
-  int lid = 0;
-  int val = 0;
-  int i = 0;
-  uint const x_40 = (*(tint_symbol_1)).x;
-  lid = as_type<int>(x_40);
-  int const x_43 = x_7.global_seed;
-  val = x_43;
-  i = 0;
-  while (true) {
-    int const x_48 = i;
-    if ((x_48 < 2)) {
-    } else {
-      break;
-    }
-    int const x_51 = lid;
-    if ((x_51 > 0)) {
-      int const x_55 = lid;
-      int const x_58 = x_7.data[as_type<int>((as_type<uint>(x_55) - as_type<uint>(1)))];
-      int const x_59 = val;
-      val = as_type<int>((as_type<uint>(x_59) + as_type<uint>(x_58)));
-      float const x_62 = x_10.injectionSwitch.x;
-      if ((x_62 > 100.0f)) {
-        break;
-      }
-    }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    {
-      int const x_66 = i;
-      i = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-    }
-  }
-  int const x_68 = lid;
-  if ((x_68 == 0)) {
-    x_7.data[0] = 42;
-  }
-  return;
-}
-
-void tint_symbol_inner(constant buf1& x_10, device doesNotMatter& x_7, uint3 gl_LocalInvocationID_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = gl_LocalInvocationID_param;
-  main_1(x_10, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 gl_LocalInvocationID_param [[thread_position_in_threadgroup]], constant buf1& x_10 [[buffer(0)]], device doesNotMatter& x_7 [[buffer(1)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_10, x_7, gl_LocalInvocationID_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b830459..0000000
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 86
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_LocalInvocationID_param_1
-               OpExecutionMode %main LocalSize 16 1 1
-               OpName %gl_LocalInvocationID_param_1 "gl_LocalInvocationID_param_1"
-               OpName %gl_LocalInvocationID "gl_LocalInvocationID"
-               OpName %doesNotMatter "doesNotMatter"
-               OpMemberName %doesNotMatter 0 "global_seed"
-               OpMemberName %doesNotMatter 1 "data"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %lid "lid"
-               OpName %val "val"
-               OpName %i "i"
-               OpName %main_inner "main_inner"
-               OpName %gl_LocalInvocationID_param "gl_LocalInvocationID_param"
-               OpName %main "main"
-               OpDecorate %gl_LocalInvocationID_param_1 BuiltIn LocalInvocationId
-               OpDecorate %doesNotMatter Block
-               OpMemberDecorate %doesNotMatter 0 Offset 0
-               OpMemberDecorate %doesNotMatter 1 Offset 4
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_LocalInvocationID_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-%gl_LocalInvocationID = OpVariable %_ptr_Private_v3uint Private %7
-        %int = OpTypeInt 32 1
-%_runtimearr_int = OpTypeRuntimeArray %int
-%doesNotMatter = OpTypeStruct %int %_runtimearr_int
-%_ptr_StorageBuffer_doesNotMatter = OpTypePointer StorageBuffer %doesNotMatter
-        %x_7 = OpVariable %_ptr_StorageBuffer_doesNotMatter StorageBuffer
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-  %float_100 = OpConstant %float 100
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-     %int_42 = OpConstant %int 42
-         %77 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-        %lid = OpVariable %_ptr_Function_int Function %24
-        %val = OpVariable %_ptr_Function_int Function %24
-          %i = OpVariable %_ptr_Function_int Function %24
-         %29 = OpAccessChain %_ptr_Private_uint %gl_LocalInvocationID %uint_0
-         %30 = OpLoad %uint %29
-         %31 = OpBitcast %int %30
-               OpStore %lid %31
-         %33 = OpAccessChain %_ptr_StorageBuffer_int %x_7 %uint_0
-         %34 = OpLoad %int %33
-               OpStore %val %34
-               OpStore %i %int_0
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpSLessThan %bool %40 %int_2
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %37
-         %44 = OpLabel
-         %47 = OpLoad %int %lid
-         %48 = OpSGreaterThan %bool %47 %int_0
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-         %51 = OpLoad %int %lid
-         %54 = OpISub %int %51 %int_1
-         %55 = OpAccessChain %_ptr_StorageBuffer_int %x_7 %uint_1 %54
-         %56 = OpLoad %int %55
-         %57 = OpLoad %int %val
-         %58 = OpIAdd %int %57 %56
-               OpStore %val %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-         %61 = OpLoad %float %60
-         %63 = OpFOrdGreaterThan %bool %61 %float_100
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-               OpBranch %37
-         %64 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %38
-         %38 = OpLabel
-         %69 = OpLoad %int %i
-         %70 = OpIAdd %int %69 %int_1
-               OpStore %i %70
-               OpBranch %36
-         %37 = OpLabel
-         %71 = OpLoad %int %lid
-         %72 = OpIEqual %bool %71 %int_0
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpAccessChain %_ptr_StorageBuffer_int %x_7 %uint_1 %int_0
-               OpStore %75 %int_42
-               OpBranch %73
-         %73 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %77
-%gl_LocalInvocationID_param = OpFunctionParameter %v3uint
-         %80 = OpLabel
-               OpStore %gl_LocalInvocationID %gl_LocalInvocationID_param
-         %81 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %83 = OpLabel
-         %85 = OpLoad %v3uint %gl_LocalInvocationID_param_1
-         %84 = OpFunctionCall %void %main_inner %85
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f57b088..0000000
--- a/test/vk-gl-cts/graphicsfuzz/barrier-in-loop-with-break/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct doesNotMatter {
-  global_seed : i32;
-  data : RTArr;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_LocalInvocationID : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_7 : doesNotMatter;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-fn main_1() {
-  var lid : i32;
-  var val : i32;
-  var i : i32;
-  let x_40 : u32 = gl_LocalInvocationID.x;
-  lid = bitcast<i32>(x_40);
-  let x_43 : i32 = x_7.global_seed;
-  val = x_43;
-  i = 0;
-  loop {
-    let x_48 : i32 = i;
-    if ((x_48 < 2)) {
-    } else {
-      break;
-    }
-    let x_51 : i32 = lid;
-    if ((x_51 > 0)) {
-      let x_55 : i32 = lid;
-      let x_58 : i32 = x_7.data[(x_55 - 1)];
-      let x_59 : i32 = val;
-      val = (x_59 + x_58);
-      let x_62 : f32 = x_10.injectionSwitch.x;
-      if ((x_62 > 100.0)) {
-        break;
-      }
-    }
-    workgroupBarrier();
-
-    continuing {
-      let x_66 : i32 = i;
-      i = (x_66 + 1);
-    }
-  }
-  let x_68 : i32 = lid;
-  if ((x_68 == 0)) {
-    x_7.data[0] = 42;
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(16, 1, 1)]]
-fn main([[builtin(local_invocation_id)]] gl_LocalInvocationID_param : vec3<u32>) {
-  gl_LocalInvocationID = gl_LocalInvocationID_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index cf40a39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  bool GLF_live12c5 = false;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    const float x_31 = asfloat(x_5[0].y);
-    if ((x_31 < 0.0f)) {
-      GLF_live12c5 = false;
-      if (GLF_live12c5) {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      } else {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    break;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7d2bc53..0000000
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool GLF_live12c5 = false;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    float const x_31 = x_5.injectionSwitch.y;
-    if ((x_31 < 0.0f)) {
-      GLF_live12c5 = false;
-      bool const x_35 = GLF_live12c5;
-      if (x_35) {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      } else {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    break;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c48f0d6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %GLF_live12c5 "GLF_live12c5"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-%GLF_live12c5 = OpVariable %_ptr_Function_bool Function %19
-               OpStore %x_GLF_color %22
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %31 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %32 = OpLoad %float %31
-         %33 = OpFOrdLessThan %bool %32 %float_0
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %34
-         %35 = OpLabel
-               OpStore %GLF_live12c5 %false
-         %37 = OpLoad %bool %GLF_live12c5
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %40
-         %39 = OpLabel
-               OpBranch %25
-         %40 = OpLabel
-               OpBranch %25
-         %38 = OpLabel
-               OpBranch %25
-         %34 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-               OpBranchConditional %false %23 %24
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4e7bacd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var GLF_live12c5 : bool;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  loop {
-    let x_31 : f32 = x_5.injectionSwitch.y;
-    if ((x_31 < 0.0)) {
-      GLF_live12c5 = false;
-      let x_35 : bool = GLF_live12c5;
-      if (x_35) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    break;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index cf40a39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  bool GLF_live12c5 = false;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    const float x_31 = asfloat(x_5[0].y);
-    if ((x_31 < 0.0f)) {
-      GLF_live12c5 = false;
-      if (GLF_live12c5) {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      } else {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    break;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7d2bc53..0000000
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool GLF_live12c5 = false;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    float const x_31 = x_5.injectionSwitch.y;
-    if ((x_31 < 0.0f)) {
-      GLF_live12c5 = false;
-      bool const x_35 = GLF_live12c5;
-      if (x_35) {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      } else {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    break;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c48f0d6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %GLF_live12c5 "GLF_live12c5"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-%GLF_live12c5 = OpVariable %_ptr_Function_bool Function %19
-               OpStore %x_GLF_color %22
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %31 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %32 = OpLoad %float %31
-         %33 = OpFOrdLessThan %bool %32 %float_0
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %34
-         %35 = OpLabel
-               OpStore %GLF_live12c5 %false
-         %37 = OpLoad %bool %GLF_live12c5
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %40
-         %39 = OpLabel
-               OpBranch %25
-         %40 = OpLabel
-               OpBranch %25
-         %38 = OpLabel
-               OpBranch %25
-         %34 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-               OpBranchConditional %false %23 %24
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 4e7bacd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/break-in-do-while-with-nested-if/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var GLF_live12c5 : bool;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  loop {
-    let x_31 : f32 = x_5.injectionSwitch.y;
-    if ((x_31 < 0.0)) {
-      GLF_live12c5 = false;
-      let x_35 : bool = GLF_live12c5;
-      if (x_35) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    break;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index da68b65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_() {
-  const float x_28 = asfloat(x_6[0].x);
-  if ((1.0f > x_28)) {
-    discard;
-  }
-  return;
-}
-
-void main_1() {
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  while (true) {
-    func_();
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.msl
deleted file mode 100644
index c50c71e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_(constant buf0& x_6) {
-  float const x_28 = x_6.one;
-  if ((1.0f > x_28)) {
-    discard_fragment();
-  }
-  return;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  while (true) {
-    func_(x_6);
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6073859..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %28 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %39 = OpTypeFunction %main_out
-      %func_ = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %19 = OpLoad %float %18
-         %21 = OpFOrdGreaterThan %bool %float_1 %19
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %24 %23
-         %24 = OpLabel
-               OpKill
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %11
-         %26 = OpLabel
-               OpStore %x_GLF_color %28
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %func_
-               OpSelectionMerge %35 None
-               OpBranchConditional %false %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %30
-         %35 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-               OpBranch %29
-         %30 = OpLabel
-               OpStore %x_GLF_color %38
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %39
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %v4float %x_GLF_color
-         %45 = OpCompositeConstruct %main_out %44
-               OpReturnValue %45
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %47 = OpLabel
-         %48 = OpFunctionCall %main_out %main_inner
-         %49 = OpCompositeExtract %v4float %48 0
-               OpStore %x_GLF_color_1_1 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 64f1aaa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() {
-  let x_28 : f32 = x_6.one;
-  if ((1.0 > x_28)) {
-    discard;
-  }
-  return;
-}
-
-fn main_1() {
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  loop {
-    func_();
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index da68b65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_() {
-  const float x_28 = asfloat(x_6[0].x);
-  if ((1.0f > x_28)) {
-    discard;
-  }
-  return;
-}
-
-void main_1() {
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  while (true) {
-    func_();
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.msl
deleted file mode 100644
index c50c71e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_(constant buf0& x_6) {
-  float const x_28 = x_6.one;
-  if ((1.0f > x_28)) {
-    discard_fragment();
-  }
-  return;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  while (true) {
-    func_(x_6);
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6073859..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %28 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %39 = OpTypeFunction %main_out
-      %func_ = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %19 = OpLoad %float %18
-         %21 = OpFOrdGreaterThan %bool %float_1 %19
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %24 %23
-         %24 = OpLabel
-               OpKill
-         %23 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %11
-         %26 = OpLabel
-               OpStore %x_GLF_color %28
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %func_
-               OpSelectionMerge %35 None
-               OpBranchConditional %false %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %30
-         %35 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-               OpBranch %29
-         %30 = OpLabel
-               OpStore %x_GLF_color %38
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %39
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %v4float %x_GLF_color
-         %45 = OpCompositeConstruct %main_out %44
-               OpReturnValue %45
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %47 = OpLabel
-         %48 = OpFunctionCall %main_out %main_inner
-         %49 = OpCompositeExtract %v4float %48 0
-               OpStore %x_GLF_color_1_1 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 64f1aaa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-function-with-discard/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() {
-  let x_28 : f32 = x_6.one;
-  if ((1.0 > x_28)) {
-    discard;
-  }
-  return;
-}
-
-fn main_1() {
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  loop {
-    func_();
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index af1e00b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,89 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int data[10] = (int[10])0;
-  int x_40 = 0;
-  int x_40_phi = 0;
-  int x_11_phi = 0;
-  const int x_7 = data[1];
-  const int x_10 = ((1 < x_7) ? 2 : 1);
-  x_40_phi = 1;
-  x_11_phi = x_10;
-  while (true) {
-    int x_54 = 0;
-    int x_41 = 0;
-    int x_41_phi = 0;
-    x_40 = x_40_phi;
-    const int x_11 = x_11_phi;
-    if ((x_11 < 3)) {
-    } else {
-      break;
-    }
-    int x_54_phi = 0;
-    const int x_8 = (x_11 + 1);
-    const float x_47 = asfloat(x_6[0].x);
-    x_54_phi = x_40;
-    switch(int(x_47)) {
-      case 78: {
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        /* fallthrough */
-      }
-      case 19: {
-        x_54_phi = asint((x_40 + asint(1)));
-        /* fallthrough */
-      }
-      case 23:
-      case 38: {
-        x_54 = x_54_phi;
-        x_41_phi = x_54;
-        {
-          x_41 = x_41_phi;
-          x_40_phi = x_41;
-          x_11_phi = x_8;
-        }
-        continue;
-        break;
-      }
-      default: {
-        x_41_phi = x_40;
-        {
-          x_41 = x_41_phi;
-          x_40_phi = x_41;
-          x_11_phi = x_8;
-        }
-        continue;
-        break;
-      }
-    }
-    x_41_phi = 0;
-    {
-      x_41 = x_41_phi;
-      x_40_phi = x_41;
-      x_11_phi = x_8;
-    }
-  }
-  data[x_40] = 1;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x00000147CAC76330(47,9-17): error X3708: continue cannot be used in a switch
-
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7c2698e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  tint_array_wrapper data = {};
-  int x_40 = 0;
-  int x_40_phi = 0;
-  int x_11_phi = 0;
-  int const x_7 = data.arr[1];
-  int const x_10 = select(1, 2, (1 < x_7));
-  x_40_phi = 1;
-  x_11_phi = x_10;
-  while (true) {
-    int x_54 = 0;
-    int x_41 = 0;
-    int x_41_phi = 0;
-    x_40 = x_40_phi;
-    int const x_11 = x_11_phi;
-    if ((x_11 < 3)) {
-    } else {
-      break;
-    }
-    int x_54_phi = 0;
-    int const x_8 = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-    float const x_47 = x_6.injectionSwitch.x;
-    x_54_phi = x_40;
-    switch(int(x_47)) {
-      case 78: {
-        *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        /* fallthrough */
-      }
-      case 19: {
-        x_54_phi = as_type<int>(as_type<int>((as_type<uint>(x_40) + as_type<uint>(as_type<int>(1)))));
-        /* fallthrough */
-      }
-      case 23:
-      case 38: {
-        x_54 = x_54_phi;
-        x_41_phi = x_54;
-        {
-          x_41 = x_41_phi;
-          x_40_phi = x_41;
-          x_11_phi = x_8;
-        }
-        continue;
-        break;
-      }
-      default: {
-        x_41_phi = x_40;
-        {
-          x_41 = x_41_phi;
-          x_40_phi = x_41;
-          x_11_phi = x_8;
-        }
-        continue;
-        break;
-      }
-    }
-    x_41_phi = 0;
-    {
-      x_41 = x_41_phi;
-      x_40_phi = x_41;
-      x_11_phi = x_8;
-    }
-  }
-  data.arr[x_40] = 1;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c6107e4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,160 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 89
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %x_40 "x_40"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_11_phi "x_11_phi"
-               OpName %x_54 "x_54"
-               OpName %x_41 "x_41"
-               OpName %x_41_phi "x_41_phi"
-               OpName %x_54_phi "x_54_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %22 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %63 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-         %77 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %78 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_int_uint_10 Function %22
-       %x_40 = OpVariable %_ptr_Function_int Function %25
-   %x_40_phi = OpVariable %_ptr_Function_int Function %25
-   %x_11_phi = OpVariable %_ptr_Function_int Function %25
-       %x_54 = OpVariable %_ptr_Function_int Function %25
-       %x_41 = OpVariable %_ptr_Function_int Function %25
-   %x_41_phi = OpVariable %_ptr_Function_int Function %25
-   %x_54_phi = OpVariable %_ptr_Function_int Function %25
-         %29 = OpAccessChain %_ptr_Function_int %data %int_1
-         %30 = OpLoad %int %29
-         %32 = OpSLessThan %bool %int_1 %30
-         %31 = OpSelect %int %32 %int_2 %int_1
-               OpStore %x_40_phi %int_1
-               OpStore %x_11_phi %31
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %42 = OpLoad %int %x_40_phi
-               OpStore %x_40 %42
-         %43 = OpLoad %int %x_11_phi
-         %45 = OpSLessThan %bool %43 %int_3
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %36
-         %46 = OpLabel
-         %50 = OpIAdd %int %43 %int_1
-         %53 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %54 = OpLoad %float %53
-         %55 = OpLoad %int %x_40
-               OpStore %x_54_phi %55
-         %57 = OpConvertFToS %int %54
-               OpSelectionMerge %56 None
-               OpSwitch %57 %58 78 %59 19 %60 23 %61 38 %61
-         %59 = OpLabel
-               OpStore %x_GLF_color %63
-               OpBranch %60
-         %60 = OpLabel
-         %65 = OpLoad %int %x_40
-         %66 = OpCopyObject %int %int_1
-         %67 = OpIAdd %int %65 %66
-         %64 = OpCopyObject %int %67
-               OpStore %x_54_phi %64
-               OpBranch %61
-         %61 = OpLabel
-         %68 = OpLoad %int %x_54_phi
-               OpStore %x_54 %68
-         %69 = OpLoad %int %x_54
-               OpStore %x_41_phi %69
-               OpBranch %37
-         %58 = OpLabel
-         %70 = OpLoad %int %x_40
-               OpStore %x_41_phi %70
-               OpBranch %37
-         %56 = OpLabel
-               OpStore %x_41_phi %int_0
-               OpBranch %37
-         %37 = OpLabel
-         %72 = OpLoad %int %x_41_phi
-               OpStore %x_41 %72
-         %73 = OpLoad %int %x_41
-               OpStore %x_40_phi %73
-               OpStore %x_11_phi %50
-               OpBranch %35
-         %36 = OpLabel
-         %74 = OpLoad %int %x_40
-         %75 = OpAccessChain %_ptr_Function_int %data %74
-               OpStore %75 %int_1
-               OpStore %x_GLF_color %77
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %78
-         %81 = OpLabel
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %86 = OpLabel
-         %87 = OpFunctionCall %main_out %main_inner
-         %88 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %88
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e49880e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<i32, 10>;
-  var x_40 : i32;
-  var x_40_phi : i32;
-  var x_11_phi : i32;
-  let x_7 : i32 = data[1];
-  let x_10 : i32 = select(1, 2, (1 < x_7));
-  x_40_phi = 1;
-  x_11_phi = x_10;
-  loop {
-    var x_54 : i32;
-    var x_41 : i32;
-    var x_41_phi : i32;
-    x_40 = x_40_phi;
-    let x_11 : i32 = x_11_phi;
-    if ((x_11 < 3)) {
-    } else {
-      break;
-    }
-    var x_54_phi : i32;
-    let x_8 : i32 = (x_11 + 1);
-    let x_47 : f32 = x_6.injectionSwitch.x;
-    x_54_phi = x_40;
-    switch(i32(x_47)) {
-      case 78: {
-        x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-        fallthrough;
-      }
-      case 19: {
-        x_54_phi = bitcast<i32>((x_40 + bitcast<i32>(1)));
-        fallthrough;
-      }
-      case 23, 38: {
-        x_54 = x_54_phi;
-        x_41_phi = x_54;
-        continue;
-      }
-      default: {
-        x_41_phi = x_40;
-        continue;
-      }
-    }
-    x_41_phi = 0;
-
-    continuing {
-      x_41 = x_41_phi;
-      x_40_phi = x_41;
-      x_11_phi = x_8;
-    }
-  }
-  data[x_40] = 1;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0054dcd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,89 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int data[10] = (int[10])0;
-  int x_40 = 0;
-  int x_40_phi = 0;
-  int x_11_phi = 0;
-  const int x_7 = data[1];
-  const int x_10 = ((1 < x_7) ? 2 : 1);
-  x_40_phi = 1;
-  x_11_phi = x_10;
-  while (true) {
-    int x_54 = 0;
-    int x_41 = 0;
-    int x_41_phi = 0;
-    x_40 = x_40_phi;
-    const int x_11 = x_11_phi;
-    if ((x_11 < 3)) {
-    } else {
-      break;
-    }
-    int x_54_phi = 0;
-    const int x_8 = (x_11 + 1);
-    const float x_47 = asfloat(x_6[0].x);
-    x_54_phi = x_40;
-    switch(int(x_47)) {
-      case 78: {
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        /* fallthrough */
-      }
-      case 19: {
-        x_54_phi = asint((x_40 + asint(1)));
-        /* fallthrough */
-      }
-      case 23:
-      case 38: {
-        x_54 = x_54_phi;
-        x_41_phi = x_54;
-        {
-          x_41 = x_41_phi;
-          x_40_phi = x_41;
-          x_11_phi = x_8;
-        }
-        continue;
-        break;
-      }
-      default: {
-        x_41_phi = x_40;
-        {
-          x_41 = x_41_phi;
-          x_40_phi = x_41;
-          x_11_phi = x_8;
-        }
-        continue;
-        break;
-      }
-    }
-    x_41_phi = 0;
-    {
-      x_41 = x_41_phi;
-      x_40_phi = x_41;
-      x_11_phi = x_8;
-    }
-  }
-  data[x_40] = 1;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x000001DB60E578A0(47,9-17): error X3708: continue cannot be used in a switch
-
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7c2698e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  tint_array_wrapper data = {};
-  int x_40 = 0;
-  int x_40_phi = 0;
-  int x_11_phi = 0;
-  int const x_7 = data.arr[1];
-  int const x_10 = select(1, 2, (1 < x_7));
-  x_40_phi = 1;
-  x_11_phi = x_10;
-  while (true) {
-    int x_54 = 0;
-    int x_41 = 0;
-    int x_41_phi = 0;
-    x_40 = x_40_phi;
-    int const x_11 = x_11_phi;
-    if ((x_11 < 3)) {
-    } else {
-      break;
-    }
-    int x_54_phi = 0;
-    int const x_8 = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-    float const x_47 = x_6.injectionSwitch.x;
-    x_54_phi = x_40;
-    switch(int(x_47)) {
-      case 78: {
-        *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        /* fallthrough */
-      }
-      case 19: {
-        x_54_phi = as_type<int>(as_type<int>((as_type<uint>(x_40) + as_type<uint>(as_type<int>(1)))));
-        /* fallthrough */
-      }
-      case 23:
-      case 38: {
-        x_54 = x_54_phi;
-        x_41_phi = x_54;
-        {
-          x_41 = x_41_phi;
-          x_40_phi = x_41;
-          x_11_phi = x_8;
-        }
-        continue;
-        break;
-      }
-      default: {
-        x_41_phi = x_40;
-        {
-          x_41 = x_41_phi;
-          x_40_phi = x_41;
-          x_11_phi = x_8;
-        }
-        continue;
-        break;
-      }
-    }
-    x_41_phi = 0;
-    {
-      x_41 = x_41_phi;
-      x_40_phi = x_41;
-      x_11_phi = x_8;
-    }
-  }
-  data.arr[x_40] = 1;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c6107e4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,160 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 89
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %x_40 "x_40"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_11_phi "x_11_phi"
-               OpName %x_54 "x_54"
-               OpName %x_41 "x_41"
-               OpName %x_41_phi "x_41_phi"
-               OpName %x_54_phi "x_54_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %22 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %63 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-         %77 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %78 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_int_uint_10 Function %22
-       %x_40 = OpVariable %_ptr_Function_int Function %25
-   %x_40_phi = OpVariable %_ptr_Function_int Function %25
-   %x_11_phi = OpVariable %_ptr_Function_int Function %25
-       %x_54 = OpVariable %_ptr_Function_int Function %25
-       %x_41 = OpVariable %_ptr_Function_int Function %25
-   %x_41_phi = OpVariable %_ptr_Function_int Function %25
-   %x_54_phi = OpVariable %_ptr_Function_int Function %25
-         %29 = OpAccessChain %_ptr_Function_int %data %int_1
-         %30 = OpLoad %int %29
-         %32 = OpSLessThan %bool %int_1 %30
-         %31 = OpSelect %int %32 %int_2 %int_1
-               OpStore %x_40_phi %int_1
-               OpStore %x_11_phi %31
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %42 = OpLoad %int %x_40_phi
-               OpStore %x_40 %42
-         %43 = OpLoad %int %x_11_phi
-         %45 = OpSLessThan %bool %43 %int_3
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %36
-         %46 = OpLabel
-         %50 = OpIAdd %int %43 %int_1
-         %53 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %54 = OpLoad %float %53
-         %55 = OpLoad %int %x_40
-               OpStore %x_54_phi %55
-         %57 = OpConvertFToS %int %54
-               OpSelectionMerge %56 None
-               OpSwitch %57 %58 78 %59 19 %60 23 %61 38 %61
-         %59 = OpLabel
-               OpStore %x_GLF_color %63
-               OpBranch %60
-         %60 = OpLabel
-         %65 = OpLoad %int %x_40
-         %66 = OpCopyObject %int %int_1
-         %67 = OpIAdd %int %65 %66
-         %64 = OpCopyObject %int %67
-               OpStore %x_54_phi %64
-               OpBranch %61
-         %61 = OpLabel
-         %68 = OpLoad %int %x_54_phi
-               OpStore %x_54 %68
-         %69 = OpLoad %int %x_54
-               OpStore %x_41_phi %69
-               OpBranch %37
-         %58 = OpLabel
-         %70 = OpLoad %int %x_40
-               OpStore %x_41_phi %70
-               OpBranch %37
-         %56 = OpLabel
-               OpStore %x_41_phi %int_0
-               OpBranch %37
-         %37 = OpLabel
-         %72 = OpLoad %int %x_41_phi
-               OpStore %x_41 %72
-         %73 = OpLoad %int %x_41
-               OpStore %x_40_phi %73
-               OpStore %x_11_phi %50
-               OpBranch %35
-         %36 = OpLabel
-         %74 = OpLoad %int %x_40
-         %75 = OpAccessChain %_ptr_Function_int %data %74
-               OpStore %75 %int_1
-               OpStore %x_GLF_color %77
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %78
-         %81 = OpLabel
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %86 = OpLabel
-         %87 = OpFunctionCall %main_out %main_inner
-         %88 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %88
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e49880e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/call-if-while-switch/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<i32, 10>;
-  var x_40 : i32;
-  var x_40_phi : i32;
-  var x_11_phi : i32;
-  let x_7 : i32 = data[1];
-  let x_10 : i32 = select(1, 2, (1 < x_7));
-  x_40_phi = 1;
-  x_11_phi = x_10;
-  loop {
-    var x_54 : i32;
-    var x_41 : i32;
-    var x_41_phi : i32;
-    x_40 = x_40_phi;
-    let x_11 : i32 = x_11_phi;
-    if ((x_11 < 3)) {
-    } else {
-      break;
-    }
-    var x_54_phi : i32;
-    let x_8 : i32 = (x_11 + 1);
-    let x_47 : f32 = x_6.injectionSwitch.x;
-    x_54_phi = x_40;
-    switch(i32(x_47)) {
-      case 78: {
-        x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-        fallthrough;
-      }
-      case 19: {
-        x_54_phi = bitcast<i32>((x_40 + bitcast<i32>(1)));
-        fallthrough;
-      }
-      case 23, 38: {
-        x_54 = x_54_phi;
-        x_41_phi = x_54;
-        continue;
-      }
-      default: {
-        x_41_phi = x_40;
-        continue;
-      }
-    }
-    x_41_phi = 0;
-
-    continuing {
-      x_41 = x_41_phi;
-      x_40_phi = x_41;
-      x_11_phi = x_8;
-    }
-  }
-  data[x_40] = 1;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5e2a1cc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_26 = x_5.injectionSwitch.x;
-  if ((x_26 > 1.0f)) {
-    while (true) {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-    }
-    return;
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 56304fb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %31 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %33 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %20 = OpLoad %float %19
-         %22 = OpFOrdGreaterThan %bool %20 %float_1
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %24
-         %25 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %28
-         %28 = OpLabel
-               OpBranch %26
-         %27 = OpLabel
-               OpReturn
-         %24 = OpLabel
-               OpStore %x_GLF_color %32
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %33
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %main_1
-         %38 = OpLoad %v4float %x_GLF_color
-         %39 = OpCompositeConstruct %main_out %38
-               OpReturnValue %39
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %41 = OpLabel
-         %42 = OpFunctionCall %main_out %main_inner
-         %43 = OpCompositeExtract %v4float %42 0
-               OpStore %x_GLF_color_1_1 %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1d247e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_26 : f32 = x_5.injectionSwitch.x;
-  if ((x_26 > 1.0)) {
-    loop {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-    return;
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5e2a1cc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_26 = x_5.injectionSwitch.x;
-  if ((x_26 > 1.0f)) {
-    while (true) {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-    }
-    return;
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 56304fb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %31 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %33 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %20 = OpLoad %float %19
-         %22 = OpFOrdGreaterThan %bool %20 %float_1
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %24
-         %25 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %28
-         %28 = OpLabel
-               OpBranch %26
-         %27 = OpLabel
-               OpReturn
-         %24 = OpLabel
-               OpStore %x_GLF_color %32
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %33
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %main_1
-         %38 = OpLoad %v4float %x_GLF_color
-         %39 = OpCompositeConstruct %main_out %38
-               OpReturnValue %39
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %41 = OpLabel
-         %42 = OpFunctionCall %main_out %main_inner
-         %43 = OpCompositeExtract %v4float %42 0
-               OpStore %x_GLF_color_1_1 %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1d247e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_26 : f32 = x_5.injectionSwitch.x;
-  if ((x_26 > 1.0)) {
-    loop {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-    return;
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.hlsl
deleted file mode 100644
index 61d9c34..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-struct S {
-  int f0;
-  float4x3 f1;
-};
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_51 = 0;
-  int x_12_phi = 0;
-  while (true) {
-    S x_45 = (S)0;
-    S x_45_phi = (S)0;
-    int x_11_phi = 0;
-    const S tint_symbol_3 = {0, float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f))};
-    x_45_phi = tint_symbol_3;
-    x_11_phi = 0;
-    while (true) {
-      S x_46 = (S)0;
-      int x_9 = 0;
-      x_45 = x_45_phi;
-      const int x_11 = x_11_phi;
-      const float x_49 = gl_FragCoord.x;
-      x_51 = ((x_49 == 0.0f) ? 1 : 2);
-      if ((x_11 < x_51)) {
-      } else {
-        break;
-      }
-      {
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        x_46 = x_45;
-        x_46.f0 = (x_45.f0 + 1);
-        x_9 = (x_11 + 1);
-        x_45_phi = x_46;
-        x_11_phi = x_9;
-      }
-    }
-    if ((x_45.f0 < 1000)) {
-      break;
-    }
-    break;
-  }
-  x_12_phi = 0;
-  while (true) {
-    int x_6 = 0;
-    const int x_12 = x_12_phi;
-    if ((x_12 < x_51)) {
-    } else {
-      break;
-    }
-    {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      x_6 = (x_12 + 1);
-      x_12_phi = x_6;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.msl
deleted file mode 100644
index c6cb6b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int f0;
-  float4x3 f1;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int x_51 = 0;
-  int x_12_phi = 0;
-  while (true) {
-    S x_45 = {};
-    S x_45_phi = {};
-    int x_11_phi = 0;
-    S const tint_symbol_2 = {.f0=0, .f1=float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f))};
-    x_45_phi = tint_symbol_2;
-    x_11_phi = 0;
-    while (true) {
-      S x_46 = {};
-      int x_9 = 0;
-      x_45 = x_45_phi;
-      int const x_11 = x_11_phi;
-      float const x_49 = (*(tint_symbol_4)).x;
-      x_51 = select(2, 1, (x_49 == 0.0f));
-      if ((x_11 < x_51)) {
-      } else {
-        break;
-      }
-      {
-        *(tint_symbol_5) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        x_46 = x_45;
-        x_46.f0 = as_type<int>((as_type<uint>(x_45.f0) + as_type<uint>(1)));
-        x_9 = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-        x_45_phi = x_46;
-        x_11_phi = x_9;
-      }
-    }
-    if ((x_45.f0 < 1000)) {
-      break;
-    }
-    break;
-  }
-  x_12_phi = 0;
-  while (true) {
-    int x_6 = 0;
-    int const x_12 = x_12_phi;
-    if ((x_12 < x_51)) {
-    } else {
-      break;
-    }
-    {
-      *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      x_6 = as_type<int>((as_type<uint>(x_12) + as_type<uint>(1)));
-      x_12_phi = x_6;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index 2d3c083..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,190 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 106
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_51 "x_51"
-               OpName %x_12_phi "x_12_phi"
-               OpName %S "S"
-               OpMemberName %S 0 "f0"
-               OpMemberName %S 1 "f1"
-               OpName %x_45 "x_45"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_11_phi "x_11_phi"
-               OpName %x_46 "x_46"
-               OpName %x_9 "x_9"
-               OpName %x_6 "x_6"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 16
-               OpMemberDecorate %S 1 ColMajor
-               OpMemberDecorate %S 1 MatrixStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-          %S = OpTypeStruct %int %mat4v3float
-%_ptr_Function_S = OpTypePointer Function %S
-         %29 = OpConstantNull %S
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %35 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %36 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-         %37 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %38 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %39 = OpConstantComposite %mat4v3float %35 %36 %37 %38
-         %40 = OpConstantComposite %S %int_0 %39
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-         %64 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %int_1000 = OpConstant %int 1000
-         %90 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %93 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_51 = OpVariable %_ptr_Function_int Function %18
-   %x_12_phi = OpVariable %_ptr_Function_int Function %18
-       %x_45 = OpVariable %_ptr_Function_S Function %29
-   %x_45_phi = OpVariable %_ptr_Function_S Function %29
-   %x_11_phi = OpVariable %_ptr_Function_int Function %18
-       %x_46 = OpVariable %_ptr_Function_S Function %29
-        %x_9 = OpVariable %_ptr_Function_int Function %18
-        %x_6 = OpVariable %_ptr_Function_int Function %18
-               OpBranch %20
-         %20 = OpLabel
-               OpLoopMerge %21 %22 None
-               OpBranch %23
-         %23 = OpLabel
-               OpStore %x_45_phi %40
-               OpStore %x_11_phi %int_0
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %47 = OpLoad %S %x_45_phi
-               OpStore %x_45 %47
-         %48 = OpLoad %int %x_11_phi
-         %52 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %53 = OpLoad %float %52
-         %55 = OpFOrdEqual %bool %53 %float_0
-         %54 = OpSelect %int %55 %int_1 %int_2
-               OpStore %x_51 %54
-         %59 = OpLoad %int %x_51
-         %60 = OpSLessThan %bool %48 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %42
-         %61 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpStore %x_GLF_color %64
-         %65 = OpLoad %S %x_45
-               OpStore %x_46 %65
-         %66 = OpAccessChain %_ptr_Function_int %x_46 %uint_0
-         %67 = OpAccessChain %_ptr_Function_int %x_45 %uint_0
-         %68 = OpLoad %int %67
-         %69 = OpIAdd %int %68 %int_1
-               OpStore %66 %69
-         %70 = OpIAdd %int %48 %int_1
-               OpStore %x_9 %70
-         %71 = OpLoad %S %x_46
-               OpStore %x_45_phi %71
-         %72 = OpLoad %int %x_9
-               OpStore %x_11_phi %72
-               OpBranch %41
-         %42 = OpLabel
-         %73 = OpAccessChain %_ptr_Function_int %x_45 %uint_0
-         %74 = OpLoad %int %73
-         %76 = OpSLessThan %bool %74 %int_1000
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %77
-         %78 = OpLabel
-               OpBranch %21
-         %77 = OpLabel
-               OpBranch %21
-         %22 = OpLabel
-               OpBranch %20
-         %21 = OpLabel
-               OpStore %x_12_phi %int_0
-               OpBranch %79
-         %79 = OpLabel
-               OpLoopMerge %80 %81 None
-               OpBranch %82
-         %82 = OpLabel
-         %84 = OpLoad %int %x_12_phi
-         %85 = OpLoad %int %x_51
-         %86 = OpSLessThan %bool %84 %85
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %89
-         %88 = OpLabel
-               OpBranch %87
-         %89 = OpLabel
-               OpBranch %80
-         %87 = OpLabel
-               OpBranch %81
-         %81 = OpLabel
-               OpStore %x_GLF_color %90
-         %91 = OpIAdd %int %84 %int_1
-               OpStore %x_6 %91
-         %92 = OpLoad %int %x_6
-               OpStore %x_12_phi %92
-               OpBranch %79
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %93
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %97 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %98 = OpFunctionCall %void %main_1
-         %99 = OpLoad %v4float %x_GLF_color
-        %100 = OpCompositeConstruct %main_out %99
-               OpReturnValue %100
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-        %102 = OpLabel
-        %104 = OpLoad %v4float %gl_FragCoord_param_1
-        %103 = OpFunctionCall %main_out %main_inner %104
-        %105 = OpCompositeExtract %v4float %103 0
-               OpStore %x_GLF_color_1_1 %105
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index 088c0f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,73 +0,0 @@
-struct S {
-  f0 : i32;
-  f1 : mat4x3<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_51 : i32;
-  var x_12_phi : i32;
-  loop {
-    var x_45 : S;
-    var x_45_phi : S;
-    var x_11_phi : i32;
-    x_45_phi = S(0, mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0)));
-    x_11_phi = 0;
-    loop {
-      var x_46 : S;
-      var x_9 : i32;
-      x_45 = x_45_phi;
-      let x_11 : i32 = x_11_phi;
-      let x_49 : f32 = gl_FragCoord.x;
-      x_51 = select(2, 1, (x_49 == 0.0));
-      if ((x_11 < x_51)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-        x_46 = x_45;
-        x_46.f0 = (x_45.f0 + 1);
-        x_9 = (x_11 + 1);
-        x_45_phi = x_46;
-        x_11_phi = x_9;
-      }
-    }
-    if ((x_45.f0 < 1000)) {
-      break;
-    }
-    break;
-  }
-  x_12_phi = 0;
-  loop {
-    var x_6 : i32;
-    let x_12 : i32 = x_12_phi;
-    if ((x_12 < x_51)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      x_6 = (x_12 + 1);
-      x_12_phi = x_6;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.hlsl
deleted file mode 100644
index 61d9c34..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-struct S {
-  int f0;
-  float4x3 f1;
-};
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_51 = 0;
-  int x_12_phi = 0;
-  while (true) {
-    S x_45 = (S)0;
-    S x_45_phi = (S)0;
-    int x_11_phi = 0;
-    const S tint_symbol_3 = {0, float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f))};
-    x_45_phi = tint_symbol_3;
-    x_11_phi = 0;
-    while (true) {
-      S x_46 = (S)0;
-      int x_9 = 0;
-      x_45 = x_45_phi;
-      const int x_11 = x_11_phi;
-      const float x_49 = gl_FragCoord.x;
-      x_51 = ((x_49 == 0.0f) ? 1 : 2);
-      if ((x_11 < x_51)) {
-      } else {
-        break;
-      }
-      {
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        x_46 = x_45;
-        x_46.f0 = (x_45.f0 + 1);
-        x_9 = (x_11 + 1);
-        x_45_phi = x_46;
-        x_11_phi = x_9;
-      }
-    }
-    if ((x_45.f0 < 1000)) {
-      break;
-    }
-    break;
-  }
-  x_12_phi = 0;
-  while (true) {
-    int x_6 = 0;
-    const int x_12 = x_12_phi;
-    if ((x_12 < x_51)) {
-    } else {
-      break;
-    }
-    {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      x_6 = (x_12 + 1);
-      x_12_phi = x_6;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.msl
deleted file mode 100644
index c6cb6b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int f0;
-  float4x3 f1;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int x_51 = 0;
-  int x_12_phi = 0;
-  while (true) {
-    S x_45 = {};
-    S x_45_phi = {};
-    int x_11_phi = 0;
-    S const tint_symbol_2 = {.f0=0, .f1=float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f))};
-    x_45_phi = tint_symbol_2;
-    x_11_phi = 0;
-    while (true) {
-      S x_46 = {};
-      int x_9 = 0;
-      x_45 = x_45_phi;
-      int const x_11 = x_11_phi;
-      float const x_49 = (*(tint_symbol_4)).x;
-      x_51 = select(2, 1, (x_49 == 0.0f));
-      if ((x_11 < x_51)) {
-      } else {
-        break;
-      }
-      {
-        *(tint_symbol_5) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        x_46 = x_45;
-        x_46.f0 = as_type<int>((as_type<uint>(x_45.f0) + as_type<uint>(1)));
-        x_9 = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-        x_45_phi = x_46;
-        x_11_phi = x_9;
-      }
-    }
-    if ((x_45.f0 < 1000)) {
-      break;
-    }
-    break;
-  }
-  x_12_phi = 0;
-  while (true) {
-    int x_6 = 0;
-    int const x_12 = x_12_phi;
-    if ((x_12 < x_51)) {
-    } else {
-      break;
-    }
-    {
-      *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      x_6 = as_type<int>((as_type<uint>(x_12) + as_type<uint>(1)));
-      x_12_phi = x_6;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index 2d3c083..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,190 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 106
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_51 "x_51"
-               OpName %x_12_phi "x_12_phi"
-               OpName %S "S"
-               OpMemberName %S 0 "f0"
-               OpMemberName %S 1 "f1"
-               OpName %x_45 "x_45"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_11_phi "x_11_phi"
-               OpName %x_46 "x_46"
-               OpName %x_9 "x_9"
-               OpName %x_6 "x_6"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 16
-               OpMemberDecorate %S 1 ColMajor
-               OpMemberDecorate %S 1 MatrixStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-          %S = OpTypeStruct %int %mat4v3float
-%_ptr_Function_S = OpTypePointer Function %S
-         %29 = OpConstantNull %S
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %35 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %36 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-         %37 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %38 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %39 = OpConstantComposite %mat4v3float %35 %36 %37 %38
-         %40 = OpConstantComposite %S %int_0 %39
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-         %64 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %int_1000 = OpConstant %int 1000
-         %90 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %93 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_51 = OpVariable %_ptr_Function_int Function %18
-   %x_12_phi = OpVariable %_ptr_Function_int Function %18
-       %x_45 = OpVariable %_ptr_Function_S Function %29
-   %x_45_phi = OpVariable %_ptr_Function_S Function %29
-   %x_11_phi = OpVariable %_ptr_Function_int Function %18
-       %x_46 = OpVariable %_ptr_Function_S Function %29
-        %x_9 = OpVariable %_ptr_Function_int Function %18
-        %x_6 = OpVariable %_ptr_Function_int Function %18
-               OpBranch %20
-         %20 = OpLabel
-               OpLoopMerge %21 %22 None
-               OpBranch %23
-         %23 = OpLabel
-               OpStore %x_45_phi %40
-               OpStore %x_11_phi %int_0
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %47 = OpLoad %S %x_45_phi
-               OpStore %x_45 %47
-         %48 = OpLoad %int %x_11_phi
-         %52 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %53 = OpLoad %float %52
-         %55 = OpFOrdEqual %bool %53 %float_0
-         %54 = OpSelect %int %55 %int_1 %int_2
-               OpStore %x_51 %54
-         %59 = OpLoad %int %x_51
-         %60 = OpSLessThan %bool %48 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %42
-         %61 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpStore %x_GLF_color %64
-         %65 = OpLoad %S %x_45
-               OpStore %x_46 %65
-         %66 = OpAccessChain %_ptr_Function_int %x_46 %uint_0
-         %67 = OpAccessChain %_ptr_Function_int %x_45 %uint_0
-         %68 = OpLoad %int %67
-         %69 = OpIAdd %int %68 %int_1
-               OpStore %66 %69
-         %70 = OpIAdd %int %48 %int_1
-               OpStore %x_9 %70
-         %71 = OpLoad %S %x_46
-               OpStore %x_45_phi %71
-         %72 = OpLoad %int %x_9
-               OpStore %x_11_phi %72
-               OpBranch %41
-         %42 = OpLabel
-         %73 = OpAccessChain %_ptr_Function_int %x_45 %uint_0
-         %74 = OpLoad %int %73
-         %76 = OpSLessThan %bool %74 %int_1000
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %77
-         %78 = OpLabel
-               OpBranch %21
-         %77 = OpLabel
-               OpBranch %21
-         %22 = OpLabel
-               OpBranch %20
-         %21 = OpLabel
-               OpStore %x_12_phi %int_0
-               OpBranch %79
-         %79 = OpLabel
-               OpLoopMerge %80 %81 None
-               OpBranch %82
-         %82 = OpLabel
-         %84 = OpLoad %int %x_12_phi
-         %85 = OpLoad %int %x_51
-         %86 = OpSLessThan %bool %84 %85
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %89
-         %88 = OpLabel
-               OpBranch %87
-         %89 = OpLabel
-               OpBranch %80
-         %87 = OpLabel
-               OpBranch %81
-         %81 = OpLabel
-               OpStore %x_GLF_color %90
-         %91 = OpIAdd %int %84 %int_1
-               OpStore %x_6 %91
-         %92 = OpLoad %int %x_6
-               OpStore %x_12_phi %92
-               OpBranch %79
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %93
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %97 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %98 = OpFunctionCall %void %main_1
-         %99 = OpLoad %v4float %x_GLF_color
-        %100 = OpCompositeConstruct %main_out %99
-               OpReturnValue %100
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-        %102 = OpLabel
-        %104 = OpLoad %v4float %gl_FragCoord_param_1
-        %103 = OpFunctionCall %main_out %main_inner %104
-        %105 = OpCompositeExtract %v4float %103 0
-               OpStore %x_GLF_color_1_1 %105
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index 088c0f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/color-write-in-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,73 +0,0 @@
-struct S {
-  f0 : i32;
-  f1 : mat4x3<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_51 : i32;
-  var x_12_phi : i32;
-  loop {
-    var x_45 : S;
-    var x_45_phi : S;
-    var x_11_phi : i32;
-    x_45_phi = S(0, mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0)));
-    x_11_phi = 0;
-    loop {
-      var x_46 : S;
-      var x_9 : i32;
-      x_45 = x_45_phi;
-      let x_11 : i32 = x_11_phi;
-      let x_49 : f32 = gl_FragCoord.x;
-      x_51 = select(2, 1, (x_49 == 0.0));
-      if ((x_11 < x_51)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-        x_46 = x_45;
-        x_46.f0 = (x_45.f0 + 1);
-        x_9 = (x_11 + 1);
-        x_45_phi = x_46;
-        x_11_phi = x_9;
-      }
-    }
-    if ((x_45.f0 < 1000)) {
-      break;
-    }
-    break;
-  }
-  x_12_phi = 0;
-  loop {
-    var x_6 : i32;
-    let x_12 : i32 = x_12_phi;
-    if ((x_12 < x_51)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      x_6 = (x_12 + 1);
-      x_12_phi = x_6;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f895653..0000000
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static int GLF_live6tree[10] = (int[10])0;
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int GLF_live6search_() {
-  int GLF_live6index = 0;
-  int GLF_live6currentNode = 0;
-  GLF_live6index = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    const int x_11 = GLF_live6tree[GLF_live6index];
-    GLF_live6currentNode = x_11;
-    if ((GLF_live6currentNode != 1)) {
-      return 1;
-    }
-    GLF_live6index = 1;
-  }
-  return 1;
-}
-
-void main_1() {
-  const float x_40 = asfloat(x_9[0].x);
-  if ((x_40 > 1.0f)) {
-    const int x_13 = GLF_live6search_();
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2708002..0000000
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int GLF_live6search_(thread tint_array_wrapper* const tint_symbol_3) {
-  int GLF_live6index = 0;
-  int GLF_live6currentNode = 0;
-  GLF_live6index = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    int const x_10 = GLF_live6index;
-    int const x_11 = (*(tint_symbol_3)).arr[x_10];
-    GLF_live6currentNode = x_11;
-    int const x_12 = GLF_live6currentNode;
-    if ((x_12 != 1)) {
-      return 1;
-    }
-    GLF_live6index = 1;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_9, thread tint_array_wrapper* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float const x_40 = x_9.injectionSwitch.x;
-  if ((x_40 > 1.0f)) {
-    int const x_13 = GLF_live6search_(tint_symbol_4);
-  }
-  *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  main_1(x_9, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread tint_array_wrapper tint_symbol_8 = {};
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6bca158..0000000
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %GLF_live6tree "GLF_live6tree"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %GLF_live6search_ "GLF_live6search_"
-               OpName %GLF_live6index "GLF_live6index"
-               OpName %GLF_live6currentNode "GLF_live6currentNode"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %12 = OpConstantNull %_arr_int_uint_10
-%GLF_live6tree = OpVariable %_ptr_Private__arr_int_uint_10 Private %12
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %19 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %59 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-%GLF_live6search_ = OpFunction %int None %19
-         %21 = OpLabel
-%GLF_live6index = OpVariable %_ptr_Function_int Function %24
-%GLF_live6currentNode = OpVariable %_ptr_Function_int Function %24
-               OpStore %GLF_live6index %int_0
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-               OpSelectionMerge %33 None
-               OpBranchConditional %true %34 %35
-         %34 = OpLabel
-               OpBranch %33
-         %35 = OpLabel
-               OpBranch %28
-         %33 = OpLabel
-         %36 = OpLoad %int %GLF_live6index
-         %38 = OpAccessChain %_ptr_Private_int %GLF_live6tree %36
-         %39 = OpLoad %int %38
-               OpStore %GLF_live6currentNode %39
-         %40 = OpLoad %int %GLF_live6currentNode
-         %42 = OpINotEqual %bool %40 %int_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpReturnValue %int_1
-         %43 = OpLabel
-               OpStore %GLF_live6index %int_1
-               OpBranch %29
-         %29 = OpLabel
-               OpBranch %27
-         %28 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %52 = OpLoad %float %51
-         %54 = OpFOrdGreaterThan %bool %52 %float_1
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-         %57 = OpFunctionCall %int %GLF_live6search_
-               OpBranch %55
-         %55 = OpLabel
-               OpStore %x_GLF_color %59
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bd10f84..0000000
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> GLF_live6tree : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn GLF_live6search_() -> i32 {
-  var GLF_live6index : i32;
-  var GLF_live6currentNode : i32;
-  GLF_live6index = 0;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    let x_10 : i32 = GLF_live6index;
-    let x_11 : i32 = GLF_live6tree[x_10];
-    GLF_live6currentNode = x_11;
-    let x_12 : i32 = GLF_live6currentNode;
-    if ((x_12 != 1)) {
-      return 1;
-    }
-    GLF_live6index = 1;
-  }
-  return 1;
-}
-
-fn main_1() {
-  let x_40 : f32 = x_9.injectionSwitch.x;
-  if ((x_40 > 1.0)) {
-    let x_13 : i32 = GLF_live6search_();
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f895653..0000000
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static int GLF_live6tree[10] = (int[10])0;
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int GLF_live6search_() {
-  int GLF_live6index = 0;
-  int GLF_live6currentNode = 0;
-  GLF_live6index = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    const int x_11 = GLF_live6tree[GLF_live6index];
-    GLF_live6currentNode = x_11;
-    if ((GLF_live6currentNode != 1)) {
-      return 1;
-    }
-    GLF_live6index = 1;
-  }
-  return 1;
-}
-
-void main_1() {
-  const float x_40 = asfloat(x_9[0].x);
-  if ((x_40 > 1.0f)) {
-    const int x_13 = GLF_live6search_();
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2708002..0000000
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int GLF_live6search_(thread tint_array_wrapper* const tint_symbol_3) {
-  int GLF_live6index = 0;
-  int GLF_live6currentNode = 0;
-  GLF_live6index = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    int const x_10 = GLF_live6index;
-    int const x_11 = (*(tint_symbol_3)).arr[x_10];
-    GLF_live6currentNode = x_11;
-    int const x_12 = GLF_live6currentNode;
-    if ((x_12 != 1)) {
-      return 1;
-    }
-    GLF_live6index = 1;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_9, thread tint_array_wrapper* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float const x_40 = x_9.injectionSwitch.x;
-  if ((x_40 > 1.0f)) {
-    int const x_13 = GLF_live6search_(tint_symbol_4);
-  }
-  *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  main_1(x_9, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread tint_array_wrapper tint_symbol_8 = {};
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6bca158..0000000
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %GLF_live6tree "GLF_live6tree"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %GLF_live6search_ "GLF_live6search_"
-               OpName %GLF_live6index "GLF_live6index"
-               OpName %GLF_live6currentNode "GLF_live6currentNode"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %12 = OpConstantNull %_arr_int_uint_10
-%GLF_live6tree = OpVariable %_ptr_Private__arr_int_uint_10 Private %12
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %19 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %59 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-%GLF_live6search_ = OpFunction %int None %19
-         %21 = OpLabel
-%GLF_live6index = OpVariable %_ptr_Function_int Function %24
-%GLF_live6currentNode = OpVariable %_ptr_Function_int Function %24
-               OpStore %GLF_live6index %int_0
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-               OpSelectionMerge %33 None
-               OpBranchConditional %true %34 %35
-         %34 = OpLabel
-               OpBranch %33
-         %35 = OpLabel
-               OpBranch %28
-         %33 = OpLabel
-         %36 = OpLoad %int %GLF_live6index
-         %38 = OpAccessChain %_ptr_Private_int %GLF_live6tree %36
-         %39 = OpLoad %int %38
-               OpStore %GLF_live6currentNode %39
-         %40 = OpLoad %int %GLF_live6currentNode
-         %42 = OpINotEqual %bool %40 %int_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpReturnValue %int_1
-         %43 = OpLabel
-               OpStore %GLF_live6index %int_1
-               OpBranch %29
-         %29 = OpLabel
-               OpBranch %27
-         %28 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %52 = OpLoad %float %51
-         %54 = OpFOrdGreaterThan %bool %52 %float_1
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-         %57 = OpFunctionCall %int %GLF_live6search_
-               OpBranch %55
-         %55 = OpLabel
-               OpStore %x_GLF_color %59
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index bd10f84..0000000
--- a/test/vk-gl-cts/graphicsfuzz/conditional-return-in-infinite-while/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> GLF_live6tree : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn GLF_live6search_() -> i32 {
-  var GLF_live6index : i32;
-  var GLF_live6currentNode : i32;
-  GLF_live6index = 0;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    let x_10 : i32 = GLF_live6index;
-    let x_11 : i32 = GLF_live6tree[x_10];
-    GLF_live6currentNode = x_11;
-    let x_12 : i32 = GLF_live6currentNode;
-    if ((x_12 != 1)) {
-      return 1;
-    }
-    GLF_live6index = 1;
-  }
-  return 1;
-}
-
-fn main_1() {
-  let x_40 : f32 = x_9.injectionSwitch.x;
-  if ((x_40 > 1.0)) {
-    let x_13 : i32 = GLF_live6search_();
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b9958ca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,214 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-cbuffer cbuffer_x_25 : register(b0, space0) {
-  uint4 x_25[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 drawShape_vf2_(inout float2 pos) {
-  bool c2 = false;
-  bool c3 = false;
-  bool c4 = false;
-  bool c5 = false;
-  bool c6 = false;
-  int GLF_live4i = 0;
-  int GLF_live4_looplimiter5 = 0;
-  float4x2 GLF_live7m42 = float4x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3x3 GLF_live7m33 = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int GLF_live7cols = 0;
-  int GLF_live7_looplimiter3 = 0;
-  int GLF_live7rows = 0;
-  int GLF_live7_looplimiter2 = 0;
-  int GLF_live7_looplimiter1 = 0;
-  int GLF_live7c = 0;
-  int GLF_live7r = 0;
-  int GLF_live7_looplimiter0 = 0;
-  int GLF_live7sum_index = 0;
-  int GLF_live7_looplimiter7 = 0;
-  int GLF_live7cols_1 = 0;
-  int GLF_live7rows_1 = 0;
-  float GLF_live7sums[9] = (float[9])0;
-  int GLF_live7c_1 = 0;
-  int GLF_live7r_1 = 0;
-  int x_180 = 0;
-  float3x3 indexable = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_182 = pos.x;
-  c2 = (x_182 > 1.0f);
-  if (c2) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  const float x_188 = pos.y;
-  c3 = (x_188 < 1.0f);
-  if (c3) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  const float x_194 = pos.y;
-  c4 = (x_194 > 1.0f);
-  if (c4) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  const float x_200 = pos.x;
-  c5 = (x_200 < 1.0f);
-  if (c5) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  const float x_206 = pos.x;
-  c6 = ((x_206 + 1.0f) > 1.0f);
-  if (c6) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  GLF_live4i = 0;
-  {
-    for(; (GLF_live4i < 4); GLF_live4i = (GLF_live4i + 1)) {
-      if ((GLF_live4_looplimiter5 >= 7)) {
-        break;
-      }
-      GLF_live4_looplimiter5 = (GLF_live4_looplimiter5 + 1);
-      GLF_live7m42 = float4x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f), float2(0.0f, 0.0f), float2(1.0f, 0.0f));
-      GLF_live7m33 = float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f));
-      GLF_live7cols = 2;
-      {
-        for(; (GLF_live7cols < 4); GLF_live7cols = (GLF_live7cols + 1)) {
-          if ((GLF_live7_looplimiter3 >= 7)) {
-            break;
-          }
-          GLF_live7_looplimiter3 = (GLF_live7_looplimiter3 + 1);
-          GLF_live7rows = 2;
-          {
-            for(; (GLF_live7rows < 4); GLF_live7rows = (GLF_live7rows + 1)) {
-              if ((GLF_live7_looplimiter2 >= 7)) {
-                break;
-              }
-              GLF_live7_looplimiter2 = (GLF_live7_looplimiter2 + 1);
-              GLF_live7_looplimiter1 = 0;
-              GLF_live7c = 0;
-              {
-                for(; (GLF_live7c < 3); GLF_live7c = (GLF_live7c + 1)) {
-                  if ((GLF_live7_looplimiter1 >= 7)) {
-                    break;
-                  }
-                  GLF_live7_looplimiter1 = (GLF_live7_looplimiter1 + 1);
-                  GLF_live7r = 0;
-                  {
-                    for(; (GLF_live7r < 2); GLF_live7r = (GLF_live7r + 1)) {
-                      if ((GLF_live7_looplimiter0 >= 7)) {
-                        break;
-                      }
-                      GLF_live7_looplimiter0 = (GLF_live7_looplimiter0 + 1);
-                      set_float3(GLF_live7m33[(((GLF_live7c >= 0) & (GLF_live7c < 3)) ? GLF_live7c : 0)], (((GLF_live7r >= 0) & (GLF_live7r < 3)) ? GLF_live7r : 0), 1.0f);
-                      const float x_267 = asfloat(x_25[0].y);
-                      if ((0.0f > x_267)) {
-                      } else {
-                        set_float2(GLF_live7m42[(((GLF_live7c >= 0) & (GLF_live7c < 4)) ? GLF_live7c : 0)], (((GLF_live7r >= 0) & (GLF_live7r < 2)) ? GLF_live7r : 0), 1.0f);
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-      GLF_live7sum_index = 0;
-      GLF_live7_looplimiter7 = 0;
-      GLF_live7cols_1 = 2;
-      {
-        for(; (GLF_live7cols_1 < 4); GLF_live7cols_1 = (GLF_live7cols_1 + 1)) {
-          if ((GLF_live7_looplimiter7 >= 7)) {
-            break;
-          }
-          GLF_live7_looplimiter7 = (GLF_live7_looplimiter7 + 1);
-          GLF_live7rows_1 = 2;
-          GLF_live7sums[(((GLF_live7sum_index >= 0) & (GLF_live7sum_index < 9)) ? GLF_live7sum_index : 0)] = 0.0f;
-          GLF_live7c_1 = 0;
-          {
-            for(; (GLF_live7c_1 < 1); GLF_live7c_1 = (GLF_live7c_1 + 1)) {
-              GLF_live7r_1 = 0;
-              {
-                for(; (GLF_live7r_1 < GLF_live7rows_1); GLF_live7r_1 = (GLF_live7r_1 + 1)) {
-                  const int x_310 = (((GLF_live7sum_index >= 0) & (GLF_live7sum_index < 9)) ? GLF_live7sum_index : 0);
-                  const float3x3 x_312 = transpose(GLF_live7m33);
-                  if ((GLF_live7c_1 < 3)) {
-                    x_180 = 1;
-                  } else {
-                    const float x_318 = asfloat(x_25[0].x);
-                    x_180 = int(x_318);
-                  }
-                  const int x_320 = x_180;
-                  const int x_93 = GLF_live7r_1;
-                  indexable = x_312;
-                  const float x_324 = indexable[x_320][((x_93 < 3) ? 1 : 0)];
-                  const float x_326 = GLF_live7sums[x_310];
-                  GLF_live7sums[x_310] = (x_326 + x_324);
-                  const int x_332 = (((GLF_live7sum_index >= 0) & (GLF_live7sum_index < 9)) ? GLF_live7sum_index : 0);
-                  const float x_334 = GLF_live7m42[1][GLF_live7r_1];
-                  const float x_336 = GLF_live7sums[x_332];
-                  GLF_live7sums[x_332] = (x_336 + x_334);
-                }
-              }
-            }
-          }
-          GLF_live7sum_index = (GLF_live7sum_index + 1);
-        }
-      }
-    }
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1() {
-  float2 position = float2(0.0f, 0.0f);
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  int i = 0;
-  float2 param_2 = float2(0.0f, 0.0f);
-  const float x_161 = asfloat(x_25[0].x);
-  if ((x_161 >= 2.0f)) {
-    const float4 x_165 = gl_FragCoord;
-    position = float2(x_165.x, x_165.y);
-    param = position;
-    const float3 x_168 = drawShape_vf2_(param);
-    param_1 = position;
-    const float3 x_170 = drawShape_vf2_(param_1);
-    i = 25;
-    {
-      for(; (i > 0); i = (i - 1)) {
-        param_2 = position;
-        const float3 x_178 = drawShape_vf2_(param_2);
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.msl
deleted file mode 100644
index dd12d4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,318 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 drawShape_vf2_(constant buf0& x_25, thread float2* const pos) {
-  bool c2 = false;
-  bool c3 = false;
-  bool c4 = false;
-  bool c5 = false;
-  bool c6 = false;
-  int GLF_live4i = 0;
-  int GLF_live4_looplimiter5 = 0;
-  float4x2 GLF_live7m42 = float4x2(0.0f);
-  float3x3 GLF_live7m33 = float3x3(0.0f);
-  int GLF_live7cols = 0;
-  int GLF_live7_looplimiter3 = 0;
-  int GLF_live7rows = 0;
-  int GLF_live7_looplimiter2 = 0;
-  int GLF_live7_looplimiter1 = 0;
-  int GLF_live7c = 0;
-  int GLF_live7r = 0;
-  int GLF_live7_looplimiter0 = 0;
-  int GLF_live7sum_index = 0;
-  int GLF_live7_looplimiter7 = 0;
-  int GLF_live7cols_1 = 0;
-  int GLF_live7rows_1 = 0;
-  tint_array_wrapper GLF_live7sums = {};
-  int GLF_live7c_1 = 0;
-  int GLF_live7r_1 = 0;
-  int x_180 = 0;
-  float3x3 indexable = float3x3(0.0f);
-  float const x_182 = (*(pos)).x;
-  c2 = (x_182 > 1.0f);
-  bool const x_184 = c2;
-  if (x_184) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  float const x_188 = (*(pos)).y;
-  c3 = (x_188 < 1.0f);
-  bool const x_190 = c3;
-  if (x_190) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  float const x_194 = (*(pos)).y;
-  c4 = (x_194 > 1.0f);
-  bool const x_196 = c4;
-  if (x_196) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  float const x_200 = (*(pos)).x;
-  c5 = (x_200 < 1.0f);
-  bool const x_202 = c5;
-  if (x_202) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  float const x_206 = (*(pos)).x;
-  c6 = ((x_206 + 1.0f) > 1.0f);
-  bool const x_209 = c6;
-  if (x_209) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  GLF_live4i = 0;
-  while (true) {
-    int const x_39 = GLF_live4i;
-    if ((x_39 < 4)) {
-    } else {
-      break;
-    }
-    int const x_40 = GLF_live4_looplimiter5;
-    if ((x_40 >= 7)) {
-      break;
-    }
-    int const x_41 = GLF_live4_looplimiter5;
-    GLF_live4_looplimiter5 = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
-    GLF_live7m42 = float4x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f), float2(0.0f, 0.0f), float2(1.0f, 0.0f));
-    GLF_live7m33 = float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f));
-    GLF_live7cols = 2;
-    while (true) {
-      int const x_43 = GLF_live7cols;
-      if ((x_43 < 4)) {
-      } else {
-        break;
-      }
-      int const x_44 = GLF_live7_looplimiter3;
-      if ((x_44 >= 7)) {
-        break;
-      }
-      int const x_45 = GLF_live7_looplimiter3;
-      GLF_live7_looplimiter3 = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-      GLF_live7rows = 2;
-      while (true) {
-        int const x_47 = GLF_live7rows;
-        if ((x_47 < 4)) {
-        } else {
-          break;
-        }
-        int const x_48 = GLF_live7_looplimiter2;
-        if ((x_48 >= 7)) {
-          break;
-        }
-        int const x_49 = GLF_live7_looplimiter2;
-        GLF_live7_looplimiter2 = as_type<int>((as_type<uint>(x_49) + as_type<uint>(1)));
-        GLF_live7_looplimiter1 = 0;
-        GLF_live7c = 0;
-        while (true) {
-          int const x_51 = GLF_live7c;
-          if ((x_51 < 3)) {
-          } else {
-            break;
-          }
-          int const x_52 = GLF_live7_looplimiter1;
-          if ((x_52 >= 7)) {
-            break;
-          }
-          int const x_53 = GLF_live7_looplimiter1;
-          GLF_live7_looplimiter1 = as_type<int>((as_type<uint>(x_53) + as_type<uint>(1)));
-          GLF_live7r = 0;
-          while (true) {
-            int const x_55 = GLF_live7r;
-            if ((x_55 < 2)) {
-            } else {
-              break;
-            }
-            int const x_56 = GLF_live7_looplimiter0;
-            if ((x_56 >= 7)) {
-              break;
-            }
-            int const x_57 = GLF_live7_looplimiter0;
-            GLF_live7_looplimiter0 = as_type<int>((as_type<uint>(x_57) + as_type<uint>(1)));
-            int const x_59 = GLF_live7c;
-            int const x_60 = GLF_live7c;
-            int const x_61 = GLF_live7c;
-            int const x_62 = GLF_live7r;
-            int const x_63 = GLF_live7r;
-            int const x_64 = GLF_live7r;
-            GLF_live7m33[select(0, x_61, ((x_59 >= 0) & (x_60 < 3)))][select(0, x_64, ((x_62 >= 0) & (x_63 < 3)))] = 1.0f;
-            float const x_267 = x_25.injectionSwitch.y;
-            if ((0.0f > x_267)) {
-            } else {
-              int const x_65 = GLF_live7c;
-              int const x_66 = GLF_live7c;
-              int const x_67 = GLF_live7c;
-              int const x_68 = GLF_live7r;
-              int const x_69 = GLF_live7r;
-              int const x_70 = GLF_live7r;
-              GLF_live7m42[select(0, x_67, ((x_65 >= 0) & (x_66 < 4)))][select(0, x_70, ((x_68 >= 0) & (x_69 < 2)))] = 1.0f;
-            }
-            {
-              int const x_71 = GLF_live7r;
-              GLF_live7r = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_73 = GLF_live7c;
-            GLF_live7c = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_75 = GLF_live7rows;
-          GLF_live7rows = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_77 = GLF_live7cols;
-        GLF_live7cols = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-      }
-    }
-    GLF_live7sum_index = 0;
-    GLF_live7_looplimiter7 = 0;
-    GLF_live7cols_1 = 2;
-    while (true) {
-      int const x_79 = GLF_live7cols_1;
-      if ((x_79 < 4)) {
-      } else {
-        break;
-      }
-      int const x_80 = GLF_live7_looplimiter7;
-      if ((x_80 >= 7)) {
-        break;
-      }
-      int const x_81 = GLF_live7_looplimiter7;
-      GLF_live7_looplimiter7 = as_type<int>((as_type<uint>(x_81) + as_type<uint>(1)));
-      GLF_live7rows_1 = 2;
-      int const x_83 = GLF_live7sum_index;
-      int const x_84 = GLF_live7sum_index;
-      int const x_85 = GLF_live7sum_index;
-      GLF_live7sums.arr[select(0, x_85, ((x_83 >= 0) & (x_84 < 9)))] = 0.0f;
-      GLF_live7c_1 = 0;
-      while (true) {
-        int const x_86 = GLF_live7c_1;
-        if ((x_86 < 1)) {
-        } else {
-          break;
-        }
-        GLF_live7r_1 = 0;
-        while (true) {
-          int const x_87 = GLF_live7r_1;
-          int const x_88 = GLF_live7rows_1;
-          if ((x_87 < x_88)) {
-          } else {
-            break;
-          }
-          int const x_89 = GLF_live7sum_index;
-          int const x_90 = GLF_live7sum_index;
-          int const x_91 = GLF_live7sum_index;
-          int const x_310 = select(0, x_91, ((x_89 >= 0) & (x_90 < 9)));
-          float3x3 const x_311 = GLF_live7m33;
-          float3x3 const x_312 = transpose(x_311);
-          int const x_92 = GLF_live7c_1;
-          if ((x_92 < 3)) {
-            x_180 = 1;
-          } else {
-            float const x_318 = x_25.injectionSwitch.x;
-            x_180 = int(x_318);
-          }
-          int const x_320 = x_180;
-          int const x_93 = GLF_live7r_1;
-          indexable = x_312;
-          float const x_324 = indexable[x_320][select(0, 1, (x_93 < 3))];
-          float const x_326 = GLF_live7sums.arr[x_310];
-          GLF_live7sums.arr[x_310] = (x_326 + x_324);
-          int const x_94 = GLF_live7sum_index;
-          int const x_95 = GLF_live7sum_index;
-          int const x_96 = GLF_live7sum_index;
-          int const x_332 = select(0, x_96, ((x_94 >= 0) & (x_95 < 9)));
-          int const x_97 = GLF_live7r_1;
-          float const x_334 = GLF_live7m42[1][x_97];
-          float const x_336 = GLF_live7sums.arr[x_332];
-          GLF_live7sums.arr[x_332] = (x_336 + x_334);
-          {
-            int const x_98 = GLF_live7r_1;
-            GLF_live7r_1 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_100 = GLF_live7c_1;
-          GLF_live7c_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-        }
-      }
-      int const x_102 = GLF_live7sum_index;
-      GLF_live7sum_index = as_type<int>((as_type<uint>(x_102) + as_type<uint>(1)));
-      {
-        int const x_104 = GLF_live7cols_1;
-        GLF_live7cols_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_106 = GLF_live4i;
-      GLF_live4i = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-    }
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1(constant buf0& x_25, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 position = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  int i = 0;
-  float2 param_2 = 0.0f;
-  float const x_161 = x_25.injectionSwitch.x;
-  if ((x_161 >= 2.0f)) {
-    float4 const x_165 = *(tint_symbol_3);
-    position = float2(x_165.x, x_165.y);
-    float2 const x_167 = position;
-    param = x_167;
-    float3 const x_168 = drawShape_vf2_(x_25, &(param));
-    float2 const x_169 = position;
-    param_1 = x_169;
-    float3 const x_170 = drawShape_vf2_(x_25, &(param_1));
-    i = 25;
-    while (true) {
-      int const x_108 = i;
-      if ((x_108 > 0)) {
-      } else {
-        break;
-      }
-      float2 const x_177 = position;
-      param_2 = x_177;
-      float3 const x_178 = drawShape_vf2_(x_25, &(param_2));
-      {
-        int const x_109 = i;
-        i = as_type<int>((as_type<uint>(x_109) - as_type<uint>(1)));
-      }
-    }
-  }
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_25, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_25, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_25 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_25, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1379bb5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,628 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 389
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_25 "x_25"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %drawShape_vf2_ "drawShape_vf2_"
-               OpName %pos "pos"
-               OpName %c2 "c2"
-               OpName %c3 "c3"
-               OpName %c4 "c4"
-               OpName %c5 "c5"
-               OpName %c6 "c6"
-               OpName %GLF_live4i "GLF_live4i"
-               OpName %GLF_live4_looplimiter5 "GLF_live4_looplimiter5"
-               OpName %GLF_live7m42 "GLF_live7m42"
-               OpName %GLF_live7m33 "GLF_live7m33"
-               OpName %GLF_live7cols "GLF_live7cols"
-               OpName %GLF_live7_looplimiter3 "GLF_live7_looplimiter3"
-               OpName %GLF_live7rows "GLF_live7rows"
-               OpName %GLF_live7_looplimiter2 "GLF_live7_looplimiter2"
-               OpName %GLF_live7_looplimiter1 "GLF_live7_looplimiter1"
-               OpName %GLF_live7c "GLF_live7c"
-               OpName %GLF_live7r "GLF_live7r"
-               OpName %GLF_live7_looplimiter0 "GLF_live7_looplimiter0"
-               OpName %GLF_live7sum_index "GLF_live7sum_index"
-               OpName %GLF_live7_looplimiter7 "GLF_live7_looplimiter7"
-               OpName %GLF_live7cols_1 "GLF_live7cols_1"
-               OpName %GLF_live7rows_1 "GLF_live7rows_1"
-               OpName %GLF_live7sums "GLF_live7sums"
-               OpName %GLF_live7c_1 "GLF_live7c_1"
-               OpName %GLF_live7r_1 "GLF_live7r_1"
-               OpName %x_180 "x_180"
-               OpName %indexable "indexable"
-               OpName %main_1 "main_1"
-               OpName %position "position"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %i "i"
-               OpName %param_2 "param_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_25 NonWritable
-               OpDecorate %x_25 DescriptorSet 0
-               OpDecorate %x_25 Binding 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_25 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %v3float %_ptr_Function_v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %24 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpConstantNull %int
-%mat4v2float = OpTypeMatrix %v2float 4
-%_ptr_Function_mat4v2float = OpTypePointer Function %mat4v2float
-         %37 = OpConstantNull %mat4v2float
-%mat3v3float = OpTypeMatrix %v3float 3
-%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
-         %41 = OpConstantNull %mat3v3float
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %59 = OpConstantNull %_arr_float_uint_9
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-         %74 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-     %uint_1 = OpConstant %uint 1
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-      %int_7 = OpConstant %int 7
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-        %125 = OpConstantComposite %v2float %float_1 %float_0
-        %126 = OpConstantComposite %v2float %float_0 %float_1
-        %127 = OpConstantComposite %v2float %float_0 %float_0
-        %128 = OpConstantComposite %mat4v2float %125 %126 %127 %125
-        %129 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-        %130 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-        %131 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-        %132 = OpConstantComposite %mat3v3float %129 %130 %131
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_9 = OpConstant %int 9
-       %void = OpTypeVoid
-        %334 = OpTypeFunction %void
-        %339 = OpConstantNull %v2float
-    %float_2 = OpConstant %float 2
-     %int_25 = OpConstant %int 25
-        %375 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %376 = OpTypeFunction %main_out %v4float
-%drawShape_vf2_ = OpFunction %v3float None %15
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %c2 = OpVariable %_ptr_Function_bool Function %24
-         %c3 = OpVariable %_ptr_Function_bool Function %24
-         %c4 = OpVariable %_ptr_Function_bool Function %24
-         %c5 = OpVariable %_ptr_Function_bool Function %24
-         %c6 = OpVariable %_ptr_Function_bool Function %24
- %GLF_live4i = OpVariable %_ptr_Function_int Function %32
-%GLF_live4_looplimiter5 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7m42 = OpVariable %_ptr_Function_mat4v2float Function %37
-%GLF_live7m33 = OpVariable %_ptr_Function_mat3v3float Function %41
-%GLF_live7cols = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter3 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7rows = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter2 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter1 = OpVariable %_ptr_Function_int Function %32
- %GLF_live7c = OpVariable %_ptr_Function_int Function %32
- %GLF_live7r = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter0 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7sum_index = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter7 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7cols_1 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7rows_1 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %59
-%GLF_live7c_1 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7r_1 = OpVariable %_ptr_Function_int Function %32
-      %x_180 = OpVariable %_ptr_Function_int Function %32
-  %indexable = OpVariable %_ptr_Function_mat3v3float Function %41
-         %67 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %68 = OpLoad %float %67
-         %70 = OpFOrdGreaterThan %bool %68 %float_1
-               OpStore %c2 %70
-         %71 = OpLoad %bool %c2
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturnValue %74
-         %72 = OpLabel
-         %77 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %78 = OpLoad %float %77
-         %79 = OpFOrdLessThan %bool %78 %float_1
-               OpStore %c3 %79
-         %80 = OpLoad %bool %c3
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %81
-         %82 = OpLabel
-               OpReturnValue %74
-         %81 = OpLabel
-         %84 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %85 = OpLoad %float %84
-         %86 = OpFOrdGreaterThan %bool %85 %float_1
-               OpStore %c4 %86
-         %87 = OpLoad %bool %c4
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpReturnValue %74
-         %88 = OpLabel
-         %91 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %92 = OpLoad %float %91
-         %93 = OpFOrdLessThan %bool %92 %float_1
-               OpStore %c5 %93
-         %94 = OpLoad %bool %c5
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-               OpReturnValue %74
-         %95 = OpLabel
-         %98 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %99 = OpLoad %float %98
-        %100 = OpFAdd %float %99 %float_1
-        %101 = OpFOrdGreaterThan %bool %100 %float_1
-               OpStore %c6 %101
-        %102 = OpLoad %bool %c6
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %103
-        %104 = OpLabel
-               OpReturnValue %74
-        %103 = OpLabel
-               OpStore %GLF_live4i %int_0
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %GLF_live4i
-        %112 = OpSLessThan %bool %110 %int_4
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %115
-        %114 = OpLabel
-               OpBranch %113
-        %115 = OpLabel
-               OpBranch %107
-        %113 = OpLabel
-        %116 = OpLoad %int %GLF_live4_looplimiter5
-        %118 = OpSGreaterThanEqual %bool %116 %int_7
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpBranch %107
-        %119 = OpLabel
-        %121 = OpLoad %int %GLF_live4_looplimiter5
-        %123 = OpIAdd %int %121 %int_1
-               OpStore %GLF_live4_looplimiter5 %123
-               OpStore %GLF_live7m42 %128
-               OpStore %GLF_live7m33 %132
-               OpStore %GLF_live7cols %int_2
-               OpBranch %134
-        %134 = OpLabel
-               OpLoopMerge %135 %136 None
-               OpBranch %137
-        %137 = OpLabel
-        %138 = OpLoad %int %GLF_live7cols
-        %139 = OpSLessThan %bool %138 %int_4
-               OpSelectionMerge %140 None
-               OpBranchConditional %139 %141 %142
-        %141 = OpLabel
-               OpBranch %140
-        %142 = OpLabel
-               OpBranch %135
-        %140 = OpLabel
-        %143 = OpLoad %int %GLF_live7_looplimiter3
-        %144 = OpSGreaterThanEqual %bool %143 %int_7
-               OpSelectionMerge %145 None
-               OpBranchConditional %144 %146 %145
-        %146 = OpLabel
-               OpBranch %135
-        %145 = OpLabel
-        %147 = OpLoad %int %GLF_live7_looplimiter3
-        %148 = OpIAdd %int %147 %int_1
-               OpStore %GLF_live7_looplimiter3 %148
-               OpStore %GLF_live7rows %int_2
-               OpBranch %149
-        %149 = OpLabel
-               OpLoopMerge %150 %151 None
-               OpBranch %152
-        %152 = OpLabel
-        %153 = OpLoad %int %GLF_live7rows
-        %154 = OpSLessThan %bool %153 %int_4
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-               OpBranch %155
-        %157 = OpLabel
-               OpBranch %150
-        %155 = OpLabel
-        %158 = OpLoad %int %GLF_live7_looplimiter2
-        %159 = OpSGreaterThanEqual %bool %158 %int_7
-               OpSelectionMerge %160 None
-               OpBranchConditional %159 %161 %160
-        %161 = OpLabel
-               OpBranch %150
-        %160 = OpLabel
-        %162 = OpLoad %int %GLF_live7_looplimiter2
-        %163 = OpIAdd %int %162 %int_1
-               OpStore %GLF_live7_looplimiter2 %163
-               OpStore %GLF_live7_looplimiter1 %int_0
-               OpStore %GLF_live7c %int_0
-               OpBranch %164
-        %164 = OpLabel
-               OpLoopMerge %165 %166 None
-               OpBranch %167
-        %167 = OpLabel
-        %168 = OpLoad %int %GLF_live7c
-        %170 = OpSLessThan %bool %168 %int_3
-               OpSelectionMerge %171 None
-               OpBranchConditional %170 %172 %173
-        %172 = OpLabel
-               OpBranch %171
-        %173 = OpLabel
-               OpBranch %165
-        %171 = OpLabel
-        %174 = OpLoad %int %GLF_live7_looplimiter1
-        %175 = OpSGreaterThanEqual %bool %174 %int_7
-               OpSelectionMerge %176 None
-               OpBranchConditional %175 %177 %176
-        %177 = OpLabel
-               OpBranch %165
-        %176 = OpLabel
-        %178 = OpLoad %int %GLF_live7_looplimiter1
-        %179 = OpIAdd %int %178 %int_1
-               OpStore %GLF_live7_looplimiter1 %179
-               OpStore %GLF_live7r %int_0
-               OpBranch %180
-        %180 = OpLabel
-               OpLoopMerge %181 %182 None
-               OpBranch %183
-        %183 = OpLabel
-        %184 = OpLoad %int %GLF_live7r
-        %185 = OpSLessThan %bool %184 %int_2
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-               OpBranch %186
-        %188 = OpLabel
-               OpBranch %181
-        %186 = OpLabel
-        %189 = OpLoad %int %GLF_live7_looplimiter0
-        %190 = OpSGreaterThanEqual %bool %189 %int_7
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %191
-        %192 = OpLabel
-               OpBranch %181
-        %191 = OpLabel
-        %193 = OpLoad %int %GLF_live7_looplimiter0
-        %194 = OpIAdd %int %193 %int_1
-               OpStore %GLF_live7_looplimiter0 %194
-        %195 = OpLoad %int %GLF_live7c
-        %196 = OpLoad %int %GLF_live7c
-        %197 = OpLoad %int %GLF_live7c
-        %198 = OpLoad %int %GLF_live7r
-        %199 = OpLoad %int %GLF_live7r
-        %200 = OpLoad %int %GLF_live7r
-        %202 = OpSGreaterThanEqual %bool %195 %int_0
-        %203 = OpSLessThan %bool %196 %int_3
-        %204 = OpLogicalAnd %bool %202 %203
-        %201 = OpSelect %int %204 %197 %int_0
-        %206 = OpSGreaterThanEqual %bool %198 %int_0
-        %207 = OpSLessThan %bool %199 %int_3
-        %208 = OpLogicalAnd %bool %206 %207
-        %205 = OpSelect %int %208 %200 %int_0
-        %209 = OpAccessChain %_ptr_Function_float %GLF_live7m33 %201 %205
-               OpStore %209 %float_1
-        %211 = OpAccessChain %_ptr_Uniform_float %x_25 %uint_0 %uint_1
-        %212 = OpLoad %float %211
-        %213 = OpFOrdGreaterThan %bool %float_0 %212
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-        %217 = OpLoad %int %GLF_live7c
-        %218 = OpLoad %int %GLF_live7c
-        %219 = OpLoad %int %GLF_live7c
-        %220 = OpLoad %int %GLF_live7r
-        %221 = OpLoad %int %GLF_live7r
-        %222 = OpLoad %int %GLF_live7r
-        %224 = OpSGreaterThanEqual %bool %217 %int_0
-        %225 = OpSLessThan %bool %218 %int_4
-        %226 = OpLogicalAnd %bool %224 %225
-        %223 = OpSelect %int %226 %219 %int_0
-        %228 = OpSGreaterThanEqual %bool %220 %int_0
-        %229 = OpSLessThan %bool %221 %int_2
-        %230 = OpLogicalAnd %bool %228 %229
-        %227 = OpSelect %int %230 %222 %int_0
-        %231 = OpAccessChain %_ptr_Function_float %GLF_live7m42 %223 %227
-               OpStore %231 %float_1
-               OpBranch %214
-        %214 = OpLabel
-               OpBranch %182
-        %182 = OpLabel
-        %232 = OpLoad %int %GLF_live7r
-        %233 = OpIAdd %int %232 %int_1
-               OpStore %GLF_live7r %233
-               OpBranch %180
-        %181 = OpLabel
-               OpBranch %166
-        %166 = OpLabel
-        %234 = OpLoad %int %GLF_live7c
-        %235 = OpIAdd %int %234 %int_1
-               OpStore %GLF_live7c %235
-               OpBranch %164
-        %165 = OpLabel
-               OpBranch %151
-        %151 = OpLabel
-        %236 = OpLoad %int %GLF_live7rows
-        %237 = OpIAdd %int %236 %int_1
-               OpStore %GLF_live7rows %237
-               OpBranch %149
-        %150 = OpLabel
-               OpBranch %136
-        %136 = OpLabel
-        %238 = OpLoad %int %GLF_live7cols
-        %239 = OpIAdd %int %238 %int_1
-               OpStore %GLF_live7cols %239
-               OpBranch %134
-        %135 = OpLabel
-               OpStore %GLF_live7sum_index %int_0
-               OpStore %GLF_live7_looplimiter7 %int_0
-               OpStore %GLF_live7cols_1 %int_2
-               OpBranch %240
-        %240 = OpLabel
-               OpLoopMerge %241 %242 None
-               OpBranch %243
-        %243 = OpLabel
-        %244 = OpLoad %int %GLF_live7cols_1
-        %245 = OpSLessThan %bool %244 %int_4
-               OpSelectionMerge %246 None
-               OpBranchConditional %245 %247 %248
-        %247 = OpLabel
-               OpBranch %246
-        %248 = OpLabel
-               OpBranch %241
-        %246 = OpLabel
-        %249 = OpLoad %int %GLF_live7_looplimiter7
-        %250 = OpSGreaterThanEqual %bool %249 %int_7
-               OpSelectionMerge %251 None
-               OpBranchConditional %250 %252 %251
-        %252 = OpLabel
-               OpBranch %241
-        %251 = OpLabel
-        %253 = OpLoad %int %GLF_live7_looplimiter7
-        %254 = OpIAdd %int %253 %int_1
-               OpStore %GLF_live7_looplimiter7 %254
-               OpStore %GLF_live7rows_1 %int_2
-        %255 = OpLoad %int %GLF_live7sum_index
-        %256 = OpLoad %int %GLF_live7sum_index
-        %257 = OpLoad %int %GLF_live7sum_index
-        %259 = OpSGreaterThanEqual %bool %255 %int_0
-        %261 = OpSLessThan %bool %256 %int_9
-        %262 = OpLogicalAnd %bool %259 %261
-        %258 = OpSelect %int %262 %257 %int_0
-        %263 = OpAccessChain %_ptr_Function_float %GLF_live7sums %258
-               OpStore %263 %float_0
-               OpStore %GLF_live7c_1 %int_0
-               OpBranch %264
-        %264 = OpLabel
-               OpLoopMerge %265 %266 None
-               OpBranch %267
-        %267 = OpLabel
-        %268 = OpLoad %int %GLF_live7c_1
-        %269 = OpSLessThan %bool %268 %int_1
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %272
-        %271 = OpLabel
-               OpBranch %270
-        %272 = OpLabel
-               OpBranch %265
-        %270 = OpLabel
-               OpStore %GLF_live7r_1 %int_0
-               OpBranch %273
-        %273 = OpLabel
-               OpLoopMerge %274 %275 None
-               OpBranch %276
-        %276 = OpLabel
-        %277 = OpLoad %int %GLF_live7r_1
-        %278 = OpLoad %int %GLF_live7rows_1
-        %279 = OpSLessThan %bool %277 %278
-               OpSelectionMerge %280 None
-               OpBranchConditional %279 %281 %282
-        %281 = OpLabel
-               OpBranch %280
-        %282 = OpLabel
-               OpBranch %274
-        %280 = OpLabel
-        %283 = OpLoad %int %GLF_live7sum_index
-        %284 = OpLoad %int %GLF_live7sum_index
-        %285 = OpLoad %int %GLF_live7sum_index
-        %287 = OpSGreaterThanEqual %bool %283 %int_0
-        %288 = OpSLessThan %bool %284 %int_9
-        %289 = OpLogicalAnd %bool %287 %288
-        %286 = OpSelect %int %289 %285 %int_0
-        %290 = OpLoad %mat3v3float %GLF_live7m33
-        %291 = OpTranspose %mat3v3float %290
-        %292 = OpLoad %int %GLF_live7c_1
-        %293 = OpSLessThan %bool %292 %int_3
-               OpSelectionMerge %294 None
-               OpBranchConditional %293 %295 %296
-        %295 = OpLabel
-               OpStore %x_180 %int_1
-               OpBranch %294
-        %296 = OpLabel
-        %297 = OpAccessChain %_ptr_Uniform_float %x_25 %uint_0 %uint_0
-        %298 = OpLoad %float %297
-        %299 = OpConvertFToS %int %298
-               OpStore %x_180 %299
-               OpBranch %294
-        %294 = OpLabel
-        %300 = OpLoad %int %x_180
-        %301 = OpLoad %int %GLF_live7r_1
-               OpStore %indexable %291
-        %303 = OpSLessThan %bool %301 %int_3
-        %302 = OpSelect %int %303 %int_1 %int_0
-        %304 = OpAccessChain %_ptr_Function_float %indexable %300 %302
-        %305 = OpLoad %float %304
-        %306 = OpAccessChain %_ptr_Function_float %GLF_live7sums %286
-        %307 = OpLoad %float %306
-        %308 = OpAccessChain %_ptr_Function_float %GLF_live7sums %286
-        %309 = OpFAdd %float %307 %305
-               OpStore %308 %309
-        %310 = OpLoad %int %GLF_live7sum_index
-        %311 = OpLoad %int %GLF_live7sum_index
-        %312 = OpLoad %int %GLF_live7sum_index
-        %314 = OpSGreaterThanEqual %bool %310 %int_0
-        %315 = OpSLessThan %bool %311 %int_9
-        %316 = OpLogicalAnd %bool %314 %315
-        %313 = OpSelect %int %316 %312 %int_0
-        %317 = OpLoad %int %GLF_live7r_1
-        %318 = OpAccessChain %_ptr_Function_float %GLF_live7m42 %int_1 %317
-        %319 = OpLoad %float %318
-        %320 = OpAccessChain %_ptr_Function_float %GLF_live7sums %313
-        %321 = OpLoad %float %320
-        %322 = OpAccessChain %_ptr_Function_float %GLF_live7sums %313
-        %323 = OpFAdd %float %321 %319
-               OpStore %322 %323
-               OpBranch %275
-        %275 = OpLabel
-        %324 = OpLoad %int %GLF_live7r_1
-        %325 = OpIAdd %int %324 %int_1
-               OpStore %GLF_live7r_1 %325
-               OpBranch %273
-        %274 = OpLabel
-               OpBranch %266
-        %266 = OpLabel
-        %326 = OpLoad %int %GLF_live7c_1
-        %327 = OpIAdd %int %326 %int_1
-               OpStore %GLF_live7c_1 %327
-               OpBranch %264
-        %265 = OpLabel
-        %328 = OpLoad %int %GLF_live7sum_index
-        %329 = OpIAdd %int %328 %int_1
-               OpStore %GLF_live7sum_index %329
-               OpBranch %242
-        %242 = OpLabel
-        %330 = OpLoad %int %GLF_live7cols_1
-        %331 = OpIAdd %int %330 %int_1
-               OpStore %GLF_live7cols_1 %331
-               OpBranch %240
-        %241 = OpLabel
-               OpBranch %108
-        %108 = OpLabel
-        %332 = OpLoad %int %GLF_live4i
-        %333 = OpIAdd %int %332 %int_1
-               OpStore %GLF_live4i %333
-               OpBranch %106
-        %107 = OpLabel
-               OpReturnValue %74
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %334
-        %337 = OpLabel
-   %position = OpVariable %_ptr_Function_v2float Function %339
-      %param = OpVariable %_ptr_Function_v2float Function %339
-    %param_1 = OpVariable %_ptr_Function_v2float Function %339
-          %i = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_v2float Function %339
-        %344 = OpAccessChain %_ptr_Uniform_float %x_25 %uint_0 %uint_0
-        %345 = OpLoad %float %344
-        %347 = OpFOrdGreaterThanEqual %bool %345 %float_2
-               OpSelectionMerge %348 None
-               OpBranchConditional %347 %349 %348
-        %349 = OpLabel
-        %350 = OpLoad %v4float %gl_FragCoord
-        %351 = OpCompositeExtract %float %350 0
-        %352 = OpCompositeExtract %float %350 1
-        %353 = OpCompositeConstruct %v2float %351 %352
-               OpStore %position %353
-        %354 = OpLoad %v2float %position
-               OpStore %param %354
-        %355 = OpFunctionCall %v3float %drawShape_vf2_ %param
-        %357 = OpLoad %v2float %position
-               OpStore %param_1 %357
-        %358 = OpFunctionCall %v3float %drawShape_vf2_ %param_1
-               OpStore %i %int_25
-               OpBranch %361
-        %361 = OpLabel
-               OpLoopMerge %362 %363 None
-               OpBranch %364
-        %364 = OpLabel
-        %365 = OpLoad %int %i
-        %366 = OpSGreaterThan %bool %365 %int_0
-               OpSelectionMerge %367 None
-               OpBranchConditional %366 %368 %369
-        %368 = OpLabel
-               OpBranch %367
-        %369 = OpLabel
-               OpBranch %362
-        %367 = OpLabel
-        %370 = OpLoad %v2float %position
-               OpStore %param_2 %370
-        %371 = OpFunctionCall %v3float %drawShape_vf2_ %param_2
-               OpBranch %363
-        %363 = OpLabel
-        %373 = OpLoad %int %i
-        %374 = OpISub %int %373 %int_1
-               OpStore %i %374
-               OpBranch %361
-        %362 = OpLabel
-               OpBranch %348
-        %348 = OpLabel
-               OpStore %x_GLF_color %375
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %376
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %380 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %381 = OpFunctionCall %void %main_1
-        %382 = OpLoad %v4float %x_GLF_color
-        %383 = OpCompositeConstruct %main_out %382
-               OpReturnValue %383
-               OpFunctionEnd
-       %main = OpFunction %void None %334
-        %385 = OpLabel
-        %387 = OpLoad %v4float %gl_FragCoord_param_1
-        %386 = OpFunctionCall %main_out %main_inner %387
-        %388 = OpCompositeExtract %v4float %386 0
-               OpStore %x_GLF_color_1_1 %388
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0730594..0000000
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,317 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_25 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn drawShape_vf2_(pos : ptr<function, vec2<f32>>) -> vec3<f32> {
-  var c2 : bool;
-  var c3 : bool;
-  var c4 : bool;
-  var c5 : bool;
-  var c6 : bool;
-  var GLF_live4i : i32;
-  var GLF_live4_looplimiter5 : i32;
-  var GLF_live7m42 : mat4x2<f32>;
-  var GLF_live7m33 : mat3x3<f32>;
-  var GLF_live7cols : i32;
-  var GLF_live7_looplimiter3 : i32;
-  var GLF_live7rows : i32;
-  var GLF_live7_looplimiter2 : i32;
-  var GLF_live7_looplimiter1 : i32;
-  var GLF_live7c : i32;
-  var GLF_live7r : i32;
-  var GLF_live7_looplimiter0 : i32;
-  var GLF_live7sum_index : i32;
-  var GLF_live7_looplimiter7 : i32;
-  var GLF_live7cols_1 : i32;
-  var GLF_live7rows_1 : i32;
-  var GLF_live7sums : array<f32, 9>;
-  var GLF_live7c_1 : i32;
-  var GLF_live7r_1 : i32;
-  var x_180 : i32;
-  var indexable : mat3x3<f32>;
-  let x_182 : f32 = (*(pos)).x;
-  c2 = (x_182 > 1.0);
-  let x_184 : bool = c2;
-  if (x_184) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  let x_188 : f32 = (*(pos)).y;
-  c3 = (x_188 < 1.0);
-  let x_190 : bool = c3;
-  if (x_190) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  let x_194 : f32 = (*(pos)).y;
-  c4 = (x_194 > 1.0);
-  let x_196 : bool = c4;
-  if (x_196) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  let x_200 : f32 = (*(pos)).x;
-  c5 = (x_200 < 1.0);
-  let x_202 : bool = c5;
-  if (x_202) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  let x_206 : f32 = (*(pos)).x;
-  c6 = ((x_206 + 1.0) > 1.0);
-  let x_209 : bool = c6;
-  if (x_209) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  GLF_live4i = 0;
-  loop {
-    let x_39 : i32 = GLF_live4i;
-    if ((x_39 < 4)) {
-    } else {
-      break;
-    }
-    let x_40 : i32 = GLF_live4_looplimiter5;
-    if ((x_40 >= 7)) {
-      break;
-    }
-    let x_41 : i32 = GLF_live4_looplimiter5;
-    GLF_live4_looplimiter5 = (x_41 + 1);
-    GLF_live7m42 = mat4x2<f32>(vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0), vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 0.0));
-    GLF_live7m33 = mat3x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0));
-    GLF_live7cols = 2;
-    loop {
-      let x_43 : i32 = GLF_live7cols;
-      if ((x_43 < 4)) {
-      } else {
-        break;
-      }
-      let x_44 : i32 = GLF_live7_looplimiter3;
-      if ((x_44 >= 7)) {
-        break;
-      }
-      let x_45 : i32 = GLF_live7_looplimiter3;
-      GLF_live7_looplimiter3 = (x_45 + 1);
-      GLF_live7rows = 2;
-      loop {
-        let x_47 : i32 = GLF_live7rows;
-        if ((x_47 < 4)) {
-        } else {
-          break;
-        }
-        let x_48 : i32 = GLF_live7_looplimiter2;
-        if ((x_48 >= 7)) {
-          break;
-        }
-        let x_49 : i32 = GLF_live7_looplimiter2;
-        GLF_live7_looplimiter2 = (x_49 + 1);
-        GLF_live7_looplimiter1 = 0;
-        GLF_live7c = 0;
-        loop {
-          let x_51 : i32 = GLF_live7c;
-          if ((x_51 < 3)) {
-          } else {
-            break;
-          }
-          let x_52 : i32 = GLF_live7_looplimiter1;
-          if ((x_52 >= 7)) {
-            break;
-          }
-          let x_53 : i32 = GLF_live7_looplimiter1;
-          GLF_live7_looplimiter1 = (x_53 + 1);
-          GLF_live7r = 0;
-          loop {
-            let x_55 : i32 = GLF_live7r;
-            if ((x_55 < 2)) {
-            } else {
-              break;
-            }
-            let x_56 : i32 = GLF_live7_looplimiter0;
-            if ((x_56 >= 7)) {
-              break;
-            }
-            let x_57 : i32 = GLF_live7_looplimiter0;
-            GLF_live7_looplimiter0 = (x_57 + 1);
-            let x_59 : i32 = GLF_live7c;
-            let x_60 : i32 = GLF_live7c;
-            let x_61 : i32 = GLF_live7c;
-            let x_62 : i32 = GLF_live7r;
-            let x_63 : i32 = GLF_live7r;
-            let x_64 : i32 = GLF_live7r;
-            GLF_live7m33[select(0, x_61, ((x_59 >= 0) & (x_60 < 3)))][select(0, x_64, ((x_62 >= 0) & (x_63 < 3)))] = 1.0;
-            let x_267 : f32 = x_25.injectionSwitch.y;
-            if ((0.0 > x_267)) {
-            } else {
-              let x_65 : i32 = GLF_live7c;
-              let x_66 : i32 = GLF_live7c;
-              let x_67 : i32 = GLF_live7c;
-              let x_68 : i32 = GLF_live7r;
-              let x_69 : i32 = GLF_live7r;
-              let x_70 : i32 = GLF_live7r;
-              GLF_live7m42[select(0, x_67, ((x_65 >= 0) & (x_66 < 4)))][select(0, x_70, ((x_68 >= 0) & (x_69 < 2)))] = 1.0;
-            }
-
-            continuing {
-              let x_71 : i32 = GLF_live7r;
-              GLF_live7r = (x_71 + 1);
-            }
-          }
-
-          continuing {
-            let x_73 : i32 = GLF_live7c;
-            GLF_live7c = (x_73 + 1);
-          }
-        }
-
-        continuing {
-          let x_75 : i32 = GLF_live7rows;
-          GLF_live7rows = (x_75 + 1);
-        }
-      }
-
-      continuing {
-        let x_77 : i32 = GLF_live7cols;
-        GLF_live7cols = (x_77 + 1);
-      }
-    }
-    GLF_live7sum_index = 0;
-    GLF_live7_looplimiter7 = 0;
-    GLF_live7cols_1 = 2;
-    loop {
-      let x_79 : i32 = GLF_live7cols_1;
-      if ((x_79 < 4)) {
-      } else {
-        break;
-      }
-      let x_80 : i32 = GLF_live7_looplimiter7;
-      if ((x_80 >= 7)) {
-        break;
-      }
-      let x_81 : i32 = GLF_live7_looplimiter7;
-      GLF_live7_looplimiter7 = (x_81 + 1);
-      GLF_live7rows_1 = 2;
-      let x_83 : i32 = GLF_live7sum_index;
-      let x_84 : i32 = GLF_live7sum_index;
-      let x_85 : i32 = GLF_live7sum_index;
-      GLF_live7sums[select(0, x_85, ((x_83 >= 0) & (x_84 < 9)))] = 0.0;
-      GLF_live7c_1 = 0;
-      loop {
-        let x_86 : i32 = GLF_live7c_1;
-        if ((x_86 < 1)) {
-        } else {
-          break;
-        }
-        GLF_live7r_1 = 0;
-        loop {
-          let x_87 : i32 = GLF_live7r_1;
-          let x_88 : i32 = GLF_live7rows_1;
-          if ((x_87 < x_88)) {
-          } else {
-            break;
-          }
-          let x_89 : i32 = GLF_live7sum_index;
-          let x_90 : i32 = GLF_live7sum_index;
-          let x_91 : i32 = GLF_live7sum_index;
-          let x_310 : i32 = select(0, x_91, ((x_89 >= 0) & (x_90 < 9)));
-          let x_311 : mat3x3<f32> = GLF_live7m33;
-          let x_312 : mat3x3<f32> = transpose(x_311);
-          let x_92 : i32 = GLF_live7c_1;
-          if ((x_92 < 3)) {
-            x_180 = 1;
-          } else {
-            let x_318 : f32 = x_25.injectionSwitch.x;
-            x_180 = i32(x_318);
-          }
-          let x_320 : i32 = x_180;
-          let x_93 : i32 = GLF_live7r_1;
-          indexable = x_312;
-          let x_324 : f32 = indexable[x_320][select(0, 1, (x_93 < 3))];
-          let x_326 : f32 = GLF_live7sums[x_310];
-          GLF_live7sums[x_310] = (x_326 + x_324);
-          let x_94 : i32 = GLF_live7sum_index;
-          let x_95 : i32 = GLF_live7sum_index;
-          let x_96 : i32 = GLF_live7sum_index;
-          let x_332 : i32 = select(0, x_96, ((x_94 >= 0) & (x_95 < 9)));
-          let x_97 : i32 = GLF_live7r_1;
-          let x_334 : f32 = GLF_live7m42[1][x_97];
-          let x_336 : f32 = GLF_live7sums[x_332];
-          GLF_live7sums[x_332] = (x_336 + x_334);
-
-          continuing {
-            let x_98 : i32 = GLF_live7r_1;
-            GLF_live7r_1 = (x_98 + 1);
-          }
-        }
-
-        continuing {
-          let x_100 : i32 = GLF_live7c_1;
-          GLF_live7c_1 = (x_100 + 1);
-        }
-      }
-      let x_102 : i32 = GLF_live7sum_index;
-      GLF_live7sum_index = (x_102 + 1);
-
-      continuing {
-        let x_104 : i32 = GLF_live7cols_1;
-        GLF_live7cols_1 = (x_104 + 1);
-      }
-    }
-
-    continuing {
-      let x_106 : i32 = GLF_live4i;
-      GLF_live4i = (x_106 + 1);
-    }
-  }
-  return vec3<f32>(1.0, 1.0, 1.0);
-}
-
-fn main_1() {
-  var position : vec2<f32>;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var i : i32;
-  var param_2 : vec2<f32>;
-  let x_161 : f32 = x_25.injectionSwitch.x;
-  if ((x_161 >= 2.0)) {
-    let x_165 : vec4<f32> = gl_FragCoord;
-    position = vec2<f32>(x_165.x, x_165.y);
-    let x_167 : vec2<f32> = position;
-    param = x_167;
-    let x_168 : vec3<f32> = drawShape_vf2_(&(param));
-    let x_169 : vec2<f32> = position;
-    param_1 = x_169;
-    let x_170 : vec3<f32> = drawShape_vf2_(&(param_1));
-    i = 25;
-    loop {
-      let x_108 : i32 = i;
-      if ((x_108 > 0)) {
-      } else {
-        break;
-      }
-      let x_177 : vec2<f32> = position;
-      param_2 = x_177;
-      let x_178 : vec3<f32> = drawShape_vf2_(&(param_2));
-
-      continuing {
-        let x_109 : i32 = i;
-        i = (x_109 - 1);
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4e46c3d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,242 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-cbuffer cbuffer_x_25 : register(b0, space0) {
-  uint4 x_25[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 drawShape_vf2_(inout float2 pos) {
-  bool c2 = false;
-  bool c3 = false;
-  bool c4 = false;
-  bool c5 = false;
-  bool c6 = false;
-  int GLF_live4i = 0;
-  int GLF_live4_looplimiter5 = 0;
-  float4x2 GLF_live7m42 = float4x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3x3 GLF_live7m33 = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int GLF_live7cols = 0;
-  int GLF_live7_looplimiter3 = 0;
-  int GLF_live7rows = 0;
-  int GLF_live7_looplimiter2 = 0;
-  int GLF_live7_looplimiter1 = 0;
-  int GLF_live7c = 0;
-  int GLF_live7r = 0;
-  int GLF_live7_looplimiter0 = 0;
-  int GLF_live7sum_index = 0;
-  int GLF_live7_looplimiter7 = 0;
-  int GLF_live7cols_1 = 0;
-  int GLF_live7rows_1 = 0;
-  float GLF_live7sums[9] = (float[9])0;
-  int GLF_live7c_1 = 0;
-  int GLF_live7r_1 = 0;
-  int x_180 = 0;
-  float3x3 indexable = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_182 = pos.x;
-  c2 = (x_182 > 1.0f);
-  if (c2) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  const float x_188 = pos.y;
-  c3 = (x_188 < 1.0f);
-  if (c3) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  const float x_194 = pos.y;
-  c4 = (x_194 > 1.0f);
-  if (c4) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  const float x_200 = pos.x;
-  c5 = (x_200 < 1.0f);
-  if (c5) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  const float x_206 = pos.x;
-  c6 = ((x_206 + 1.0f) > 1.0f);
-  if (c6) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  GLF_live4i = 0;
-  {
-    for(; (GLF_live4i < 4); GLF_live4i = (GLF_live4i + 1)) {
-      if ((GLF_live4_looplimiter5 >= 7)) {
-        break;
-      }
-      GLF_live4_looplimiter5 = (GLF_live4_looplimiter5 + 1);
-      GLF_live7m42 = float4x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f), float2(0.0f, 0.0f), float2(1.0f, 0.0f));
-      GLF_live7m33 = float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f));
-      GLF_live7cols = 2;
-      {
-        for(; (GLF_live7cols < 4); GLF_live7cols = (GLF_live7cols + 1)) {
-          if ((GLF_live7_looplimiter3 >= 7)) {
-            break;
-          }
-          GLF_live7_looplimiter3 = (GLF_live7_looplimiter3 + 1);
-          GLF_live7rows = 2;
-          {
-            for(; (GLF_live7rows < 4); GLF_live7rows = (GLF_live7rows + 1)) {
-              if ((GLF_live7_looplimiter2 >= 7)) {
-                break;
-              }
-              GLF_live7_looplimiter2 = (GLF_live7_looplimiter2 + 1);
-              GLF_live7_looplimiter1 = 0;
-              GLF_live7c = 0;
-              {
-                for(; (GLF_live7c < 3); GLF_live7c = (GLF_live7c + 1)) {
-                  if ((GLF_live7_looplimiter1 >= 7)) {
-                    break;
-                  }
-                  GLF_live7_looplimiter1 = (GLF_live7_looplimiter1 + 1);
-                  GLF_live7r = 0;
-                  {
-                    for(; (GLF_live7r < 2); GLF_live7r = (GLF_live7r + 1)) {
-                      if ((GLF_live7_looplimiter0 >= 7)) {
-                        break;
-                      }
-                      GLF_live7_looplimiter0 = (GLF_live7_looplimiter0 + 1);
-                      bool tint_tmp = (GLF_live7c >= 0);
-                      if (tint_tmp) {
-                        tint_tmp = (GLF_live7c < 3);
-                      }
-                      bool tint_tmp_1 = (GLF_live7r >= 0);
-                      if (tint_tmp_1) {
-                        tint_tmp_1 = (GLF_live7r < 3);
-                      }
-                      set_float3(GLF_live7m33[((tint_tmp) ? GLF_live7c : 0)], ((tint_tmp_1) ? GLF_live7r : 0), 1.0f);
-                      const float x_267 = asfloat(x_25[0].y);
-                      if ((0.0f > x_267)) {
-                      } else {
-                        bool tint_tmp_2 = (GLF_live7c >= 0);
-                        if (tint_tmp_2) {
-                          tint_tmp_2 = (GLF_live7c < 4);
-                        }
-                        bool tint_tmp_3 = (GLF_live7r >= 0);
-                        if (tint_tmp_3) {
-                          tint_tmp_3 = (GLF_live7r < 2);
-                        }
-                        set_float2(GLF_live7m42[((tint_tmp_2) ? GLF_live7c : 0)], ((tint_tmp_3) ? GLF_live7r : 0), 1.0f);
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-      GLF_live7sum_index = 0;
-      GLF_live7_looplimiter7 = 0;
-      GLF_live7cols_1 = 2;
-      {
-        for(; (GLF_live7cols_1 < 4); GLF_live7cols_1 = (GLF_live7cols_1 + 1)) {
-          if ((GLF_live7_looplimiter7 >= 7)) {
-            break;
-          }
-          GLF_live7_looplimiter7 = (GLF_live7_looplimiter7 + 1);
-          GLF_live7rows_1 = 2;
-          bool tint_tmp_4 = (GLF_live7sum_index >= 0);
-          if (tint_tmp_4) {
-            tint_tmp_4 = (GLF_live7sum_index < 9);
-          }
-          GLF_live7sums[((tint_tmp_4) ? GLF_live7sum_index : 0)] = 0.0f;
-          GLF_live7c_1 = 0;
-          {
-            for(; (GLF_live7c_1 < 1); GLF_live7c_1 = (GLF_live7c_1 + 1)) {
-              GLF_live7r_1 = 0;
-              {
-                for(; (GLF_live7r_1 < GLF_live7rows_1); GLF_live7r_1 = (GLF_live7r_1 + 1)) {
-                  bool tint_tmp_5 = (GLF_live7sum_index >= 0);
-                  if (tint_tmp_5) {
-                    tint_tmp_5 = (GLF_live7sum_index < 9);
-                  }
-                  const int x_310 = ((tint_tmp_5) ? GLF_live7sum_index : 0);
-                  const float3x3 x_312 = transpose(GLF_live7m33);
-                  if ((GLF_live7c_1 < 3)) {
-                    x_180 = 1;
-                  } else {
-                    const float x_318 = asfloat(x_25[0].x);
-                    x_180 = int(x_318);
-                  }
-                  const int x_320 = x_180;
-                  const int x_93 = GLF_live7r_1;
-                  indexable = x_312;
-                  const float x_324 = indexable[x_320][((x_93 < 3) ? 1 : 0)];
-                  const float x_326 = GLF_live7sums[x_310];
-                  GLF_live7sums[x_310] = (x_326 + x_324);
-                  bool tint_tmp_6 = (GLF_live7sum_index >= 0);
-                  if (tint_tmp_6) {
-                    tint_tmp_6 = (GLF_live7sum_index < 9);
-                  }
-                  const int x_332 = ((tint_tmp_6) ? GLF_live7sum_index : 0);
-                  const float x_334 = GLF_live7m42[1][GLF_live7r_1];
-                  const float x_336 = GLF_live7sums[x_332];
-                  GLF_live7sums[x_332] = (x_336 + x_334);
-                }
-              }
-            }
-          }
-          GLF_live7sum_index = (GLF_live7sum_index + 1);
-        }
-      }
-    }
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1() {
-  float2 position = float2(0.0f, 0.0f);
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  int i = 0;
-  float2 param_2 = float2(0.0f, 0.0f);
-  const float x_161 = asfloat(x_25[0].x);
-  if ((x_161 >= 2.0f)) {
-    const float4 x_165 = gl_FragCoord;
-    position = float2(x_165.x, x_165.y);
-    param = position;
-    const float3 x_168 = drawShape_vf2_(param);
-    param_1 = position;
-    const float3 x_170 = drawShape_vf2_(param_1);
-    i = 25;
-    {
-      for(; (i > 0); i = (i - 1)) {
-        param_2 = position;
-        const float3 x_178 = drawShape_vf2_(param_2);
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.msl
deleted file mode 100644
index 53472e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,318 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 drawShape_vf2_(constant buf0& x_25, thread float2* const pos) {
-  bool c2 = false;
-  bool c3 = false;
-  bool c4 = false;
-  bool c5 = false;
-  bool c6 = false;
-  int GLF_live4i = 0;
-  int GLF_live4_looplimiter5 = 0;
-  float4x2 GLF_live7m42 = float4x2(0.0f);
-  float3x3 GLF_live7m33 = float3x3(0.0f);
-  int GLF_live7cols = 0;
-  int GLF_live7_looplimiter3 = 0;
-  int GLF_live7rows = 0;
-  int GLF_live7_looplimiter2 = 0;
-  int GLF_live7_looplimiter1 = 0;
-  int GLF_live7c = 0;
-  int GLF_live7r = 0;
-  int GLF_live7_looplimiter0 = 0;
-  int GLF_live7sum_index = 0;
-  int GLF_live7_looplimiter7 = 0;
-  int GLF_live7cols_1 = 0;
-  int GLF_live7rows_1 = 0;
-  tint_array_wrapper GLF_live7sums = {};
-  int GLF_live7c_1 = 0;
-  int GLF_live7r_1 = 0;
-  int x_180 = 0;
-  float3x3 indexable = float3x3(0.0f);
-  float const x_182 = (*(pos)).x;
-  c2 = (x_182 > 1.0f);
-  bool const x_184 = c2;
-  if (x_184) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  float const x_188 = (*(pos)).y;
-  c3 = (x_188 < 1.0f);
-  bool const x_190 = c3;
-  if (x_190) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  float const x_194 = (*(pos)).y;
-  c4 = (x_194 > 1.0f);
-  bool const x_196 = c4;
-  if (x_196) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  float const x_200 = (*(pos)).x;
-  c5 = (x_200 < 1.0f);
-  bool const x_202 = c5;
-  if (x_202) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  float const x_206 = (*(pos)).x;
-  c6 = ((x_206 + 1.0f) > 1.0f);
-  bool const x_209 = c6;
-  if (x_209) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  GLF_live4i = 0;
-  while (true) {
-    int const x_39 = GLF_live4i;
-    if ((x_39 < 4)) {
-    } else {
-      break;
-    }
-    int const x_40 = GLF_live4_looplimiter5;
-    if ((x_40 >= 7)) {
-      break;
-    }
-    int const x_41 = GLF_live4_looplimiter5;
-    GLF_live4_looplimiter5 = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
-    GLF_live7m42 = float4x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f), float2(0.0f, 0.0f), float2(1.0f, 0.0f));
-    GLF_live7m33 = float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f));
-    GLF_live7cols = 2;
-    while (true) {
-      int const x_43 = GLF_live7cols;
-      if ((x_43 < 4)) {
-      } else {
-        break;
-      }
-      int const x_44 = GLF_live7_looplimiter3;
-      if ((x_44 >= 7)) {
-        break;
-      }
-      int const x_45 = GLF_live7_looplimiter3;
-      GLF_live7_looplimiter3 = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-      GLF_live7rows = 2;
-      while (true) {
-        int const x_47 = GLF_live7rows;
-        if ((x_47 < 4)) {
-        } else {
-          break;
-        }
-        int const x_48 = GLF_live7_looplimiter2;
-        if ((x_48 >= 7)) {
-          break;
-        }
-        int const x_49 = GLF_live7_looplimiter2;
-        GLF_live7_looplimiter2 = as_type<int>((as_type<uint>(x_49) + as_type<uint>(1)));
-        GLF_live7_looplimiter1 = 0;
-        GLF_live7c = 0;
-        while (true) {
-          int const x_51 = GLF_live7c;
-          if ((x_51 < 3)) {
-          } else {
-            break;
-          }
-          int const x_52 = GLF_live7_looplimiter1;
-          if ((x_52 >= 7)) {
-            break;
-          }
-          int const x_53 = GLF_live7_looplimiter1;
-          GLF_live7_looplimiter1 = as_type<int>((as_type<uint>(x_53) + as_type<uint>(1)));
-          GLF_live7r = 0;
-          while (true) {
-            int const x_55 = GLF_live7r;
-            if ((x_55 < 2)) {
-            } else {
-              break;
-            }
-            int const x_56 = GLF_live7_looplimiter0;
-            if ((x_56 >= 7)) {
-              break;
-            }
-            int const x_57 = GLF_live7_looplimiter0;
-            GLF_live7_looplimiter0 = as_type<int>((as_type<uint>(x_57) + as_type<uint>(1)));
-            int const x_59 = GLF_live7c;
-            int const x_60 = GLF_live7c;
-            int const x_61 = GLF_live7c;
-            int const x_62 = GLF_live7r;
-            int const x_63 = GLF_live7r;
-            int const x_64 = GLF_live7r;
-            GLF_live7m33[select(0, x_61, ((x_59 >= 0) && (x_60 < 3)))][select(0, x_64, ((x_62 >= 0) && (x_63 < 3)))] = 1.0f;
-            float const x_267 = x_25.injectionSwitch.y;
-            if ((0.0f > x_267)) {
-            } else {
-              int const x_65 = GLF_live7c;
-              int const x_66 = GLF_live7c;
-              int const x_67 = GLF_live7c;
-              int const x_68 = GLF_live7r;
-              int const x_69 = GLF_live7r;
-              int const x_70 = GLF_live7r;
-              GLF_live7m42[select(0, x_67, ((x_65 >= 0) && (x_66 < 4)))][select(0, x_70, ((x_68 >= 0) && (x_69 < 2)))] = 1.0f;
-            }
-            {
-              int const x_71 = GLF_live7r;
-              GLF_live7r = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_73 = GLF_live7c;
-            GLF_live7c = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_75 = GLF_live7rows;
-          GLF_live7rows = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_77 = GLF_live7cols;
-        GLF_live7cols = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-      }
-    }
-    GLF_live7sum_index = 0;
-    GLF_live7_looplimiter7 = 0;
-    GLF_live7cols_1 = 2;
-    while (true) {
-      int const x_79 = GLF_live7cols_1;
-      if ((x_79 < 4)) {
-      } else {
-        break;
-      }
-      int const x_80 = GLF_live7_looplimiter7;
-      if ((x_80 >= 7)) {
-        break;
-      }
-      int const x_81 = GLF_live7_looplimiter7;
-      GLF_live7_looplimiter7 = as_type<int>((as_type<uint>(x_81) + as_type<uint>(1)));
-      GLF_live7rows_1 = 2;
-      int const x_83 = GLF_live7sum_index;
-      int const x_84 = GLF_live7sum_index;
-      int const x_85 = GLF_live7sum_index;
-      GLF_live7sums.arr[select(0, x_85, ((x_83 >= 0) && (x_84 < 9)))] = 0.0f;
-      GLF_live7c_1 = 0;
-      while (true) {
-        int const x_86 = GLF_live7c_1;
-        if ((x_86 < 1)) {
-        } else {
-          break;
-        }
-        GLF_live7r_1 = 0;
-        while (true) {
-          int const x_87 = GLF_live7r_1;
-          int const x_88 = GLF_live7rows_1;
-          if ((x_87 < x_88)) {
-          } else {
-            break;
-          }
-          int const x_89 = GLF_live7sum_index;
-          int const x_90 = GLF_live7sum_index;
-          int const x_91 = GLF_live7sum_index;
-          int const x_310 = select(0, x_91, ((x_89 >= 0) && (x_90 < 9)));
-          float3x3 const x_311 = GLF_live7m33;
-          float3x3 const x_312 = transpose(x_311);
-          int const x_92 = GLF_live7c_1;
-          if ((x_92 < 3)) {
-            x_180 = 1;
-          } else {
-            float const x_318 = x_25.injectionSwitch.x;
-            x_180 = int(x_318);
-          }
-          int const x_320 = x_180;
-          int const x_93 = GLF_live7r_1;
-          indexable = x_312;
-          float const x_324 = indexable[x_320][select(0, 1, (x_93 < 3))];
-          float const x_326 = GLF_live7sums.arr[x_310];
-          GLF_live7sums.arr[x_310] = (x_326 + x_324);
-          int const x_94 = GLF_live7sum_index;
-          int const x_95 = GLF_live7sum_index;
-          int const x_96 = GLF_live7sum_index;
-          int const x_332 = select(0, x_96, ((x_94 >= 0) && (x_95 < 9)));
-          int const x_97 = GLF_live7r_1;
-          float const x_334 = GLF_live7m42[1][x_97];
-          float const x_336 = GLF_live7sums.arr[x_332];
-          GLF_live7sums.arr[x_332] = (x_336 + x_334);
-          {
-            int const x_98 = GLF_live7r_1;
-            GLF_live7r_1 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_100 = GLF_live7c_1;
-          GLF_live7c_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-        }
-      }
-      int const x_102 = GLF_live7sum_index;
-      GLF_live7sum_index = as_type<int>((as_type<uint>(x_102) + as_type<uint>(1)));
-      {
-        int const x_104 = GLF_live7cols_1;
-        GLF_live7cols_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_106 = GLF_live4i;
-      GLF_live4i = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-    }
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1(constant buf0& x_25, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 position = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  int i = 0;
-  float2 param_2 = 0.0f;
-  float const x_161 = x_25.injectionSwitch.x;
-  if ((x_161 >= 2.0f)) {
-    float4 const x_165 = *(tint_symbol_3);
-    position = float2(x_165.x, x_165.y);
-    float2 const x_167 = position;
-    param = x_167;
-    float3 const x_168 = drawShape_vf2_(x_25, &(param));
-    float2 const x_169 = position;
-    param_1 = x_169;
-    float3 const x_170 = drawShape_vf2_(x_25, &(param_1));
-    i = 25;
-    while (true) {
-      int const x_108 = i;
-      if ((x_108 > 0)) {
-      } else {
-        break;
-      }
-      float2 const x_177 = position;
-      param_2 = x_177;
-      float3 const x_178 = drawShape_vf2_(x_25, &(param_2));
-      {
-        int const x_109 = i;
-        i = as_type<int>((as_type<uint>(x_109) - as_type<uint>(1)));
-      }
-    }
-  }
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_25, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_25, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_25 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_25, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 99d77e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,663 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 403
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_25 "x_25"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %drawShape_vf2_ "drawShape_vf2_"
-               OpName %pos "pos"
-               OpName %c2 "c2"
-               OpName %c3 "c3"
-               OpName %c4 "c4"
-               OpName %c5 "c5"
-               OpName %c6 "c6"
-               OpName %GLF_live4i "GLF_live4i"
-               OpName %GLF_live4_looplimiter5 "GLF_live4_looplimiter5"
-               OpName %GLF_live7m42 "GLF_live7m42"
-               OpName %GLF_live7m33 "GLF_live7m33"
-               OpName %GLF_live7cols "GLF_live7cols"
-               OpName %GLF_live7_looplimiter3 "GLF_live7_looplimiter3"
-               OpName %GLF_live7rows "GLF_live7rows"
-               OpName %GLF_live7_looplimiter2 "GLF_live7_looplimiter2"
-               OpName %GLF_live7_looplimiter1 "GLF_live7_looplimiter1"
-               OpName %GLF_live7c "GLF_live7c"
-               OpName %GLF_live7r "GLF_live7r"
-               OpName %GLF_live7_looplimiter0 "GLF_live7_looplimiter0"
-               OpName %GLF_live7sum_index "GLF_live7sum_index"
-               OpName %GLF_live7_looplimiter7 "GLF_live7_looplimiter7"
-               OpName %GLF_live7cols_1 "GLF_live7cols_1"
-               OpName %GLF_live7rows_1 "GLF_live7rows_1"
-               OpName %GLF_live7sums "GLF_live7sums"
-               OpName %GLF_live7c_1 "GLF_live7c_1"
-               OpName %GLF_live7r_1 "GLF_live7r_1"
-               OpName %x_180 "x_180"
-               OpName %indexable "indexable"
-               OpName %main_1 "main_1"
-               OpName %position "position"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %i "i"
-               OpName %param_2 "param_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_25 NonWritable
-               OpDecorate %x_25 DescriptorSet 0
-               OpDecorate %x_25 Binding 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_25 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %v3float %_ptr_Function_v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %24 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpConstantNull %int
-%mat4v2float = OpTypeMatrix %v2float 4
-%_ptr_Function_mat4v2float = OpTypePointer Function %mat4v2float
-         %37 = OpConstantNull %mat4v2float
-%mat3v3float = OpTypeMatrix %v3float 3
-%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
-         %41 = OpConstantNull %mat3v3float
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %59 = OpConstantNull %_arr_float_uint_9
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-         %74 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-     %uint_1 = OpConstant %uint 1
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-      %int_7 = OpConstant %int 7
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-        %125 = OpConstantComposite %v2float %float_1 %float_0
-        %126 = OpConstantComposite %v2float %float_0 %float_1
-        %127 = OpConstantComposite %v2float %float_0 %float_0
-        %128 = OpConstantComposite %mat4v2float %125 %126 %127 %125
-        %129 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-        %130 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-        %131 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-        %132 = OpConstantComposite %mat3v3float %129 %130 %131
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_9 = OpConstant %int 9
-       %void = OpTypeVoid
-        %348 = OpTypeFunction %void
-        %353 = OpConstantNull %v2float
-    %float_2 = OpConstant %float 2
-     %int_25 = OpConstant %int 25
-        %389 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %390 = OpTypeFunction %main_out %v4float
-%drawShape_vf2_ = OpFunction %v3float None %15
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %c2 = OpVariable %_ptr_Function_bool Function %24
-         %c3 = OpVariable %_ptr_Function_bool Function %24
-         %c4 = OpVariable %_ptr_Function_bool Function %24
-         %c5 = OpVariable %_ptr_Function_bool Function %24
-         %c6 = OpVariable %_ptr_Function_bool Function %24
- %GLF_live4i = OpVariable %_ptr_Function_int Function %32
-%GLF_live4_looplimiter5 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7m42 = OpVariable %_ptr_Function_mat4v2float Function %37
-%GLF_live7m33 = OpVariable %_ptr_Function_mat3v3float Function %41
-%GLF_live7cols = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter3 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7rows = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter2 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter1 = OpVariable %_ptr_Function_int Function %32
- %GLF_live7c = OpVariable %_ptr_Function_int Function %32
- %GLF_live7r = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter0 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7sum_index = OpVariable %_ptr_Function_int Function %32
-%GLF_live7_looplimiter7 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7cols_1 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7rows_1 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %59
-%GLF_live7c_1 = OpVariable %_ptr_Function_int Function %32
-%GLF_live7r_1 = OpVariable %_ptr_Function_int Function %32
-      %x_180 = OpVariable %_ptr_Function_int Function %32
-  %indexable = OpVariable %_ptr_Function_mat3v3float Function %41
-         %67 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %68 = OpLoad %float %67
-         %70 = OpFOrdGreaterThan %bool %68 %float_1
-               OpStore %c2 %70
-         %71 = OpLoad %bool %c2
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturnValue %74
-         %72 = OpLabel
-         %77 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %78 = OpLoad %float %77
-         %79 = OpFOrdLessThan %bool %78 %float_1
-               OpStore %c3 %79
-         %80 = OpLoad %bool %c3
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %81
-         %82 = OpLabel
-               OpReturnValue %74
-         %81 = OpLabel
-         %84 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %85 = OpLoad %float %84
-         %86 = OpFOrdGreaterThan %bool %85 %float_1
-               OpStore %c4 %86
-         %87 = OpLoad %bool %c4
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpReturnValue %74
-         %88 = OpLabel
-         %91 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %92 = OpLoad %float %91
-         %93 = OpFOrdLessThan %bool %92 %float_1
-               OpStore %c5 %93
-         %94 = OpLoad %bool %c5
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-               OpReturnValue %74
-         %95 = OpLabel
-         %98 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %99 = OpLoad %float %98
-        %100 = OpFAdd %float %99 %float_1
-        %101 = OpFOrdGreaterThan %bool %100 %float_1
-               OpStore %c6 %101
-        %102 = OpLoad %bool %c6
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %103
-        %104 = OpLabel
-               OpReturnValue %74
-        %103 = OpLabel
-               OpStore %GLF_live4i %int_0
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %GLF_live4i
-        %112 = OpSLessThan %bool %110 %int_4
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %115
-        %114 = OpLabel
-               OpBranch %113
-        %115 = OpLabel
-               OpBranch %107
-        %113 = OpLabel
-        %116 = OpLoad %int %GLF_live4_looplimiter5
-        %118 = OpSGreaterThanEqual %bool %116 %int_7
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpBranch %107
-        %119 = OpLabel
-        %121 = OpLoad %int %GLF_live4_looplimiter5
-        %123 = OpIAdd %int %121 %int_1
-               OpStore %GLF_live4_looplimiter5 %123
-               OpStore %GLF_live7m42 %128
-               OpStore %GLF_live7m33 %132
-               OpStore %GLF_live7cols %int_2
-               OpBranch %134
-        %134 = OpLabel
-               OpLoopMerge %135 %136 None
-               OpBranch %137
-        %137 = OpLabel
-        %138 = OpLoad %int %GLF_live7cols
-        %139 = OpSLessThan %bool %138 %int_4
-               OpSelectionMerge %140 None
-               OpBranchConditional %139 %141 %142
-        %141 = OpLabel
-               OpBranch %140
-        %142 = OpLabel
-               OpBranch %135
-        %140 = OpLabel
-        %143 = OpLoad %int %GLF_live7_looplimiter3
-        %144 = OpSGreaterThanEqual %bool %143 %int_7
-               OpSelectionMerge %145 None
-               OpBranchConditional %144 %146 %145
-        %146 = OpLabel
-               OpBranch %135
-        %145 = OpLabel
-        %147 = OpLoad %int %GLF_live7_looplimiter3
-        %148 = OpIAdd %int %147 %int_1
-               OpStore %GLF_live7_looplimiter3 %148
-               OpStore %GLF_live7rows %int_2
-               OpBranch %149
-        %149 = OpLabel
-               OpLoopMerge %150 %151 None
-               OpBranch %152
-        %152 = OpLabel
-        %153 = OpLoad %int %GLF_live7rows
-        %154 = OpSLessThan %bool %153 %int_4
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-               OpBranch %155
-        %157 = OpLabel
-               OpBranch %150
-        %155 = OpLabel
-        %158 = OpLoad %int %GLF_live7_looplimiter2
-        %159 = OpSGreaterThanEqual %bool %158 %int_7
-               OpSelectionMerge %160 None
-               OpBranchConditional %159 %161 %160
-        %161 = OpLabel
-               OpBranch %150
-        %160 = OpLabel
-        %162 = OpLoad %int %GLF_live7_looplimiter2
-        %163 = OpIAdd %int %162 %int_1
-               OpStore %GLF_live7_looplimiter2 %163
-               OpStore %GLF_live7_looplimiter1 %int_0
-               OpStore %GLF_live7c %int_0
-               OpBranch %164
-        %164 = OpLabel
-               OpLoopMerge %165 %166 None
-               OpBranch %167
-        %167 = OpLabel
-        %168 = OpLoad %int %GLF_live7c
-        %170 = OpSLessThan %bool %168 %int_3
-               OpSelectionMerge %171 None
-               OpBranchConditional %170 %172 %173
-        %172 = OpLabel
-               OpBranch %171
-        %173 = OpLabel
-               OpBranch %165
-        %171 = OpLabel
-        %174 = OpLoad %int %GLF_live7_looplimiter1
-        %175 = OpSGreaterThanEqual %bool %174 %int_7
-               OpSelectionMerge %176 None
-               OpBranchConditional %175 %177 %176
-        %177 = OpLabel
-               OpBranch %165
-        %176 = OpLabel
-        %178 = OpLoad %int %GLF_live7_looplimiter1
-        %179 = OpIAdd %int %178 %int_1
-               OpStore %GLF_live7_looplimiter1 %179
-               OpStore %GLF_live7r %int_0
-               OpBranch %180
-        %180 = OpLabel
-               OpLoopMerge %181 %182 None
-               OpBranch %183
-        %183 = OpLabel
-        %184 = OpLoad %int %GLF_live7r
-        %185 = OpSLessThan %bool %184 %int_2
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-               OpBranch %186
-        %188 = OpLabel
-               OpBranch %181
-        %186 = OpLabel
-        %189 = OpLoad %int %GLF_live7_looplimiter0
-        %190 = OpSGreaterThanEqual %bool %189 %int_7
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %191
-        %192 = OpLabel
-               OpBranch %181
-        %191 = OpLabel
-        %193 = OpLoad %int %GLF_live7_looplimiter0
-        %194 = OpIAdd %int %193 %int_1
-               OpStore %GLF_live7_looplimiter0 %194
-        %195 = OpLoad %int %GLF_live7c
-        %196 = OpLoad %int %GLF_live7c
-        %197 = OpLoad %int %GLF_live7c
-        %198 = OpLoad %int %GLF_live7r
-        %199 = OpLoad %int %GLF_live7r
-        %200 = OpLoad %int %GLF_live7r
-        %202 = OpSGreaterThanEqual %bool %195 %int_0
-               OpSelectionMerge %203 None
-               OpBranchConditional %202 %204 %203
-        %204 = OpLabel
-        %205 = OpSLessThan %bool %196 %int_3
-               OpBranch %203
-        %203 = OpLabel
-        %206 = OpPhi %bool %202 %191 %205 %204
-        %201 = OpSelect %int %206 %197 %int_0
-        %208 = OpSGreaterThanEqual %bool %198 %int_0
-               OpSelectionMerge %209 None
-               OpBranchConditional %208 %210 %209
-        %210 = OpLabel
-        %211 = OpSLessThan %bool %199 %int_3
-               OpBranch %209
-        %209 = OpLabel
-        %212 = OpPhi %bool %208 %203 %211 %210
-        %207 = OpSelect %int %212 %200 %int_0
-        %213 = OpAccessChain %_ptr_Function_float %GLF_live7m33 %201 %207
-               OpStore %213 %float_1
-        %215 = OpAccessChain %_ptr_Uniform_float %x_25 %uint_0 %uint_1
-        %216 = OpLoad %float %215
-        %217 = OpFOrdGreaterThan %bool %float_0 %216
-               OpSelectionMerge %218 None
-               OpBranchConditional %217 %219 %220
-        %219 = OpLabel
-               OpBranch %218
-        %220 = OpLabel
-        %221 = OpLoad %int %GLF_live7c
-        %222 = OpLoad %int %GLF_live7c
-        %223 = OpLoad %int %GLF_live7c
-        %224 = OpLoad %int %GLF_live7r
-        %225 = OpLoad %int %GLF_live7r
-        %226 = OpLoad %int %GLF_live7r
-        %228 = OpSGreaterThanEqual %bool %221 %int_0
-               OpSelectionMerge %229 None
-               OpBranchConditional %228 %230 %229
-        %230 = OpLabel
-        %231 = OpSLessThan %bool %222 %int_4
-               OpBranch %229
-        %229 = OpLabel
-        %232 = OpPhi %bool %228 %220 %231 %230
-        %227 = OpSelect %int %232 %223 %int_0
-        %234 = OpSGreaterThanEqual %bool %224 %int_0
-               OpSelectionMerge %235 None
-               OpBranchConditional %234 %236 %235
-        %236 = OpLabel
-        %237 = OpSLessThan %bool %225 %int_2
-               OpBranch %235
-        %235 = OpLabel
-        %238 = OpPhi %bool %234 %229 %237 %236
-        %233 = OpSelect %int %238 %226 %int_0
-        %239 = OpAccessChain %_ptr_Function_float %GLF_live7m42 %227 %233
-               OpStore %239 %float_1
-               OpBranch %218
-        %218 = OpLabel
-               OpBranch %182
-        %182 = OpLabel
-        %240 = OpLoad %int %GLF_live7r
-        %241 = OpIAdd %int %240 %int_1
-               OpStore %GLF_live7r %241
-               OpBranch %180
-        %181 = OpLabel
-               OpBranch %166
-        %166 = OpLabel
-        %242 = OpLoad %int %GLF_live7c
-        %243 = OpIAdd %int %242 %int_1
-               OpStore %GLF_live7c %243
-               OpBranch %164
-        %165 = OpLabel
-               OpBranch %151
-        %151 = OpLabel
-        %244 = OpLoad %int %GLF_live7rows
-        %245 = OpIAdd %int %244 %int_1
-               OpStore %GLF_live7rows %245
-               OpBranch %149
-        %150 = OpLabel
-               OpBranch %136
-        %136 = OpLabel
-        %246 = OpLoad %int %GLF_live7cols
-        %247 = OpIAdd %int %246 %int_1
-               OpStore %GLF_live7cols %247
-               OpBranch %134
-        %135 = OpLabel
-               OpStore %GLF_live7sum_index %int_0
-               OpStore %GLF_live7_looplimiter7 %int_0
-               OpStore %GLF_live7cols_1 %int_2
-               OpBranch %248
-        %248 = OpLabel
-               OpLoopMerge %249 %250 None
-               OpBranch %251
-        %251 = OpLabel
-        %252 = OpLoad %int %GLF_live7cols_1
-        %253 = OpSLessThan %bool %252 %int_4
-               OpSelectionMerge %254 None
-               OpBranchConditional %253 %255 %256
-        %255 = OpLabel
-               OpBranch %254
-        %256 = OpLabel
-               OpBranch %249
-        %254 = OpLabel
-        %257 = OpLoad %int %GLF_live7_looplimiter7
-        %258 = OpSGreaterThanEqual %bool %257 %int_7
-               OpSelectionMerge %259 None
-               OpBranchConditional %258 %260 %259
-        %260 = OpLabel
-               OpBranch %249
-        %259 = OpLabel
-        %261 = OpLoad %int %GLF_live7_looplimiter7
-        %262 = OpIAdd %int %261 %int_1
-               OpStore %GLF_live7_looplimiter7 %262
-               OpStore %GLF_live7rows_1 %int_2
-        %263 = OpLoad %int %GLF_live7sum_index
-        %264 = OpLoad %int %GLF_live7sum_index
-        %265 = OpLoad %int %GLF_live7sum_index
-        %267 = OpSGreaterThanEqual %bool %263 %int_0
-               OpSelectionMerge %268 None
-               OpBranchConditional %267 %269 %268
-        %269 = OpLabel
-        %271 = OpSLessThan %bool %264 %int_9
-               OpBranch %268
-        %268 = OpLabel
-        %272 = OpPhi %bool %267 %259 %271 %269
-        %266 = OpSelect %int %272 %265 %int_0
-        %273 = OpAccessChain %_ptr_Function_float %GLF_live7sums %266
-               OpStore %273 %float_0
-               OpStore %GLF_live7c_1 %int_0
-               OpBranch %274
-        %274 = OpLabel
-               OpLoopMerge %275 %276 None
-               OpBranch %277
-        %277 = OpLabel
-        %278 = OpLoad %int %GLF_live7c_1
-        %279 = OpSLessThan %bool %278 %int_1
-               OpSelectionMerge %280 None
-               OpBranchConditional %279 %281 %282
-        %281 = OpLabel
-               OpBranch %280
-        %282 = OpLabel
-               OpBranch %275
-        %280 = OpLabel
-               OpStore %GLF_live7r_1 %int_0
-               OpBranch %283
-        %283 = OpLabel
-               OpLoopMerge %284 %285 None
-               OpBranch %286
-        %286 = OpLabel
-        %287 = OpLoad %int %GLF_live7r_1
-        %288 = OpLoad %int %GLF_live7rows_1
-        %289 = OpSLessThan %bool %287 %288
-               OpSelectionMerge %290 None
-               OpBranchConditional %289 %291 %292
-        %291 = OpLabel
-               OpBranch %290
-        %292 = OpLabel
-               OpBranch %284
-        %290 = OpLabel
-        %293 = OpLoad %int %GLF_live7sum_index
-        %294 = OpLoad %int %GLF_live7sum_index
-        %295 = OpLoad %int %GLF_live7sum_index
-        %297 = OpSGreaterThanEqual %bool %293 %int_0
-               OpSelectionMerge %298 None
-               OpBranchConditional %297 %299 %298
-        %299 = OpLabel
-        %300 = OpSLessThan %bool %294 %int_9
-               OpBranch %298
-        %298 = OpLabel
-        %301 = OpPhi %bool %297 %290 %300 %299
-        %296 = OpSelect %int %301 %295 %int_0
-        %302 = OpLoad %mat3v3float %GLF_live7m33
-        %303 = OpTranspose %mat3v3float %302
-        %304 = OpLoad %int %GLF_live7c_1
-        %305 = OpSLessThan %bool %304 %int_3
-               OpSelectionMerge %306 None
-               OpBranchConditional %305 %307 %308
-        %307 = OpLabel
-               OpStore %x_180 %int_1
-               OpBranch %306
-        %308 = OpLabel
-        %309 = OpAccessChain %_ptr_Uniform_float %x_25 %uint_0 %uint_0
-        %310 = OpLoad %float %309
-        %311 = OpConvertFToS %int %310
-               OpStore %x_180 %311
-               OpBranch %306
-        %306 = OpLabel
-        %312 = OpLoad %int %x_180
-        %313 = OpLoad %int %GLF_live7r_1
-               OpStore %indexable %303
-        %315 = OpSLessThan %bool %313 %int_3
-        %314 = OpSelect %int %315 %int_1 %int_0
-        %316 = OpAccessChain %_ptr_Function_float %indexable %312 %314
-        %317 = OpLoad %float %316
-        %318 = OpAccessChain %_ptr_Function_float %GLF_live7sums %296
-        %319 = OpLoad %float %318
-        %320 = OpAccessChain %_ptr_Function_float %GLF_live7sums %296
-        %321 = OpFAdd %float %319 %317
-               OpStore %320 %321
-        %322 = OpLoad %int %GLF_live7sum_index
-        %323 = OpLoad %int %GLF_live7sum_index
-        %324 = OpLoad %int %GLF_live7sum_index
-        %326 = OpSGreaterThanEqual %bool %322 %int_0
-               OpSelectionMerge %327 None
-               OpBranchConditional %326 %328 %327
-        %328 = OpLabel
-        %329 = OpSLessThan %bool %323 %int_9
-               OpBranch %327
-        %327 = OpLabel
-        %330 = OpPhi %bool %326 %306 %329 %328
-        %325 = OpSelect %int %330 %324 %int_0
-        %331 = OpLoad %int %GLF_live7r_1
-        %332 = OpAccessChain %_ptr_Function_float %GLF_live7m42 %int_1 %331
-        %333 = OpLoad %float %332
-        %334 = OpAccessChain %_ptr_Function_float %GLF_live7sums %325
-        %335 = OpLoad %float %334
-        %336 = OpAccessChain %_ptr_Function_float %GLF_live7sums %325
-        %337 = OpFAdd %float %335 %333
-               OpStore %336 %337
-               OpBranch %285
-        %285 = OpLabel
-        %338 = OpLoad %int %GLF_live7r_1
-        %339 = OpIAdd %int %338 %int_1
-               OpStore %GLF_live7r_1 %339
-               OpBranch %283
-        %284 = OpLabel
-               OpBranch %276
-        %276 = OpLabel
-        %340 = OpLoad %int %GLF_live7c_1
-        %341 = OpIAdd %int %340 %int_1
-               OpStore %GLF_live7c_1 %341
-               OpBranch %274
-        %275 = OpLabel
-        %342 = OpLoad %int %GLF_live7sum_index
-        %343 = OpIAdd %int %342 %int_1
-               OpStore %GLF_live7sum_index %343
-               OpBranch %250
-        %250 = OpLabel
-        %344 = OpLoad %int %GLF_live7cols_1
-        %345 = OpIAdd %int %344 %int_1
-               OpStore %GLF_live7cols_1 %345
-               OpBranch %248
-        %249 = OpLabel
-               OpBranch %108
-        %108 = OpLabel
-        %346 = OpLoad %int %GLF_live4i
-        %347 = OpIAdd %int %346 %int_1
-               OpStore %GLF_live4i %347
-               OpBranch %106
-        %107 = OpLabel
-               OpReturnValue %74
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %348
-        %351 = OpLabel
-   %position = OpVariable %_ptr_Function_v2float Function %353
-      %param = OpVariable %_ptr_Function_v2float Function %353
-    %param_1 = OpVariable %_ptr_Function_v2float Function %353
-          %i = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_v2float Function %353
-        %358 = OpAccessChain %_ptr_Uniform_float %x_25 %uint_0 %uint_0
-        %359 = OpLoad %float %358
-        %361 = OpFOrdGreaterThanEqual %bool %359 %float_2
-               OpSelectionMerge %362 None
-               OpBranchConditional %361 %363 %362
-        %363 = OpLabel
-        %364 = OpLoad %v4float %gl_FragCoord
-        %365 = OpCompositeExtract %float %364 0
-        %366 = OpCompositeExtract %float %364 1
-        %367 = OpCompositeConstruct %v2float %365 %366
-               OpStore %position %367
-        %368 = OpLoad %v2float %position
-               OpStore %param %368
-        %369 = OpFunctionCall %v3float %drawShape_vf2_ %param
-        %371 = OpLoad %v2float %position
-               OpStore %param_1 %371
-        %372 = OpFunctionCall %v3float %drawShape_vf2_ %param_1
-               OpStore %i %int_25
-               OpBranch %375
-        %375 = OpLabel
-               OpLoopMerge %376 %377 None
-               OpBranch %378
-        %378 = OpLabel
-        %379 = OpLoad %int %i
-        %380 = OpSGreaterThan %bool %379 %int_0
-               OpSelectionMerge %381 None
-               OpBranchConditional %380 %382 %383
-        %382 = OpLabel
-               OpBranch %381
-        %383 = OpLabel
-               OpBranch %376
-        %381 = OpLabel
-        %384 = OpLoad %v2float %position
-               OpStore %param_2 %384
-        %385 = OpFunctionCall %v3float %drawShape_vf2_ %param_2
-               OpBranch %377
-        %377 = OpLabel
-        %387 = OpLoad %int %i
-        %388 = OpISub %int %387 %int_1
-               OpStore %i %388
-               OpBranch %375
-        %376 = OpLabel
-               OpBranch %362
-        %362 = OpLabel
-               OpStore %x_GLF_color %389
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %390
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %394 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %395 = OpFunctionCall %void %main_1
-        %396 = OpLoad %v4float %x_GLF_color
-        %397 = OpCompositeConstruct %main_out %396
-               OpReturnValue %397
-               OpFunctionEnd
-       %main = OpFunction %void None %348
-        %399 = OpLabel
-        %401 = OpLoad %v4float %gl_FragCoord_param_1
-        %400 = OpFunctionCall %main_out %main_inner %401
-        %402 = OpCompositeExtract %v4float %400 0
-               OpStore %x_GLF_color_1_1 %402
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9ca6d37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/control-flow-in-function/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,317 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_25 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn drawShape_vf2_(pos : ptr<function, vec2<f32>>) -> vec3<f32> {
-  var c2 : bool;
-  var c3 : bool;
-  var c4 : bool;
-  var c5 : bool;
-  var c6 : bool;
-  var GLF_live4i : i32;
-  var GLF_live4_looplimiter5 : i32;
-  var GLF_live7m42 : mat4x2<f32>;
-  var GLF_live7m33 : mat3x3<f32>;
-  var GLF_live7cols : i32;
-  var GLF_live7_looplimiter3 : i32;
-  var GLF_live7rows : i32;
-  var GLF_live7_looplimiter2 : i32;
-  var GLF_live7_looplimiter1 : i32;
-  var GLF_live7c : i32;
-  var GLF_live7r : i32;
-  var GLF_live7_looplimiter0 : i32;
-  var GLF_live7sum_index : i32;
-  var GLF_live7_looplimiter7 : i32;
-  var GLF_live7cols_1 : i32;
-  var GLF_live7rows_1 : i32;
-  var GLF_live7sums : array<f32, 9>;
-  var GLF_live7c_1 : i32;
-  var GLF_live7r_1 : i32;
-  var x_180 : i32;
-  var indexable : mat3x3<f32>;
-  let x_182 : f32 = (*(pos)).x;
-  c2 = (x_182 > 1.0);
-  let x_184 : bool = c2;
-  if (x_184) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  let x_188 : f32 = (*(pos)).y;
-  c3 = (x_188 < 1.0);
-  let x_190 : bool = c3;
-  if (x_190) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  let x_194 : f32 = (*(pos)).y;
-  c4 = (x_194 > 1.0);
-  let x_196 : bool = c4;
-  if (x_196) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  let x_200 : f32 = (*(pos)).x;
-  c5 = (x_200 < 1.0);
-  let x_202 : bool = c5;
-  if (x_202) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  let x_206 : f32 = (*(pos)).x;
-  c6 = ((x_206 + 1.0) > 1.0);
-  let x_209 : bool = c6;
-  if (x_209) {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  GLF_live4i = 0;
-  loop {
-    let x_39 : i32 = GLF_live4i;
-    if ((x_39 < 4)) {
-    } else {
-      break;
-    }
-    let x_40 : i32 = GLF_live4_looplimiter5;
-    if ((x_40 >= 7)) {
-      break;
-    }
-    let x_41 : i32 = GLF_live4_looplimiter5;
-    GLF_live4_looplimiter5 = (x_41 + 1);
-    GLF_live7m42 = mat4x2<f32>(vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0), vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 0.0));
-    GLF_live7m33 = mat3x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0));
-    GLF_live7cols = 2;
-    loop {
-      let x_43 : i32 = GLF_live7cols;
-      if ((x_43 < 4)) {
-      } else {
-        break;
-      }
-      let x_44 : i32 = GLF_live7_looplimiter3;
-      if ((x_44 >= 7)) {
-        break;
-      }
-      let x_45 : i32 = GLF_live7_looplimiter3;
-      GLF_live7_looplimiter3 = (x_45 + 1);
-      GLF_live7rows = 2;
-      loop {
-        let x_47 : i32 = GLF_live7rows;
-        if ((x_47 < 4)) {
-        } else {
-          break;
-        }
-        let x_48 : i32 = GLF_live7_looplimiter2;
-        if ((x_48 >= 7)) {
-          break;
-        }
-        let x_49 : i32 = GLF_live7_looplimiter2;
-        GLF_live7_looplimiter2 = (x_49 + 1);
-        GLF_live7_looplimiter1 = 0;
-        GLF_live7c = 0;
-        loop {
-          let x_51 : i32 = GLF_live7c;
-          if ((x_51 < 3)) {
-          } else {
-            break;
-          }
-          let x_52 : i32 = GLF_live7_looplimiter1;
-          if ((x_52 >= 7)) {
-            break;
-          }
-          let x_53 : i32 = GLF_live7_looplimiter1;
-          GLF_live7_looplimiter1 = (x_53 + 1);
-          GLF_live7r = 0;
-          loop {
-            let x_55 : i32 = GLF_live7r;
-            if ((x_55 < 2)) {
-            } else {
-              break;
-            }
-            let x_56 : i32 = GLF_live7_looplimiter0;
-            if ((x_56 >= 7)) {
-              break;
-            }
-            let x_57 : i32 = GLF_live7_looplimiter0;
-            GLF_live7_looplimiter0 = (x_57 + 1);
-            let x_59 : i32 = GLF_live7c;
-            let x_60 : i32 = GLF_live7c;
-            let x_61 : i32 = GLF_live7c;
-            let x_62 : i32 = GLF_live7r;
-            let x_63 : i32 = GLF_live7r;
-            let x_64 : i32 = GLF_live7r;
-            GLF_live7m33[select(0, x_61, ((x_59 >= 0) && (x_60 < 3)))][select(0, x_64, ((x_62 >= 0) && (x_63 < 3)))] = 1.0;
-            let x_267 : f32 = x_25.injectionSwitch.y;
-            if ((0.0 > x_267)) {
-            } else {
-              let x_65 : i32 = GLF_live7c;
-              let x_66 : i32 = GLF_live7c;
-              let x_67 : i32 = GLF_live7c;
-              let x_68 : i32 = GLF_live7r;
-              let x_69 : i32 = GLF_live7r;
-              let x_70 : i32 = GLF_live7r;
-              GLF_live7m42[select(0, x_67, ((x_65 >= 0) && (x_66 < 4)))][select(0, x_70, ((x_68 >= 0) && (x_69 < 2)))] = 1.0;
-            }
-
-            continuing {
-              let x_71 : i32 = GLF_live7r;
-              GLF_live7r = (x_71 + 1);
-            }
-          }
-
-          continuing {
-            let x_73 : i32 = GLF_live7c;
-            GLF_live7c = (x_73 + 1);
-          }
-        }
-
-        continuing {
-          let x_75 : i32 = GLF_live7rows;
-          GLF_live7rows = (x_75 + 1);
-        }
-      }
-
-      continuing {
-        let x_77 : i32 = GLF_live7cols;
-        GLF_live7cols = (x_77 + 1);
-      }
-    }
-    GLF_live7sum_index = 0;
-    GLF_live7_looplimiter7 = 0;
-    GLF_live7cols_1 = 2;
-    loop {
-      let x_79 : i32 = GLF_live7cols_1;
-      if ((x_79 < 4)) {
-      } else {
-        break;
-      }
-      let x_80 : i32 = GLF_live7_looplimiter7;
-      if ((x_80 >= 7)) {
-        break;
-      }
-      let x_81 : i32 = GLF_live7_looplimiter7;
-      GLF_live7_looplimiter7 = (x_81 + 1);
-      GLF_live7rows_1 = 2;
-      let x_83 : i32 = GLF_live7sum_index;
-      let x_84 : i32 = GLF_live7sum_index;
-      let x_85 : i32 = GLF_live7sum_index;
-      GLF_live7sums[select(0, x_85, ((x_83 >= 0) && (x_84 < 9)))] = 0.0;
-      GLF_live7c_1 = 0;
-      loop {
-        let x_86 : i32 = GLF_live7c_1;
-        if ((x_86 < 1)) {
-        } else {
-          break;
-        }
-        GLF_live7r_1 = 0;
-        loop {
-          let x_87 : i32 = GLF_live7r_1;
-          let x_88 : i32 = GLF_live7rows_1;
-          if ((x_87 < x_88)) {
-          } else {
-            break;
-          }
-          let x_89 : i32 = GLF_live7sum_index;
-          let x_90 : i32 = GLF_live7sum_index;
-          let x_91 : i32 = GLF_live7sum_index;
-          let x_310 : i32 = select(0, x_91, ((x_89 >= 0) && (x_90 < 9)));
-          let x_311 : mat3x3<f32> = GLF_live7m33;
-          let x_312 : mat3x3<f32> = transpose(x_311);
-          let x_92 : i32 = GLF_live7c_1;
-          if ((x_92 < 3)) {
-            x_180 = 1;
-          } else {
-            let x_318 : f32 = x_25.injectionSwitch.x;
-            x_180 = i32(x_318);
-          }
-          let x_320 : i32 = x_180;
-          let x_93 : i32 = GLF_live7r_1;
-          indexable = x_312;
-          let x_324 : f32 = indexable[x_320][select(0, 1, (x_93 < 3))];
-          let x_326 : f32 = GLF_live7sums[x_310];
-          GLF_live7sums[x_310] = (x_326 + x_324);
-          let x_94 : i32 = GLF_live7sum_index;
-          let x_95 : i32 = GLF_live7sum_index;
-          let x_96 : i32 = GLF_live7sum_index;
-          let x_332 : i32 = select(0, x_96, ((x_94 >= 0) && (x_95 < 9)));
-          let x_97 : i32 = GLF_live7r_1;
-          let x_334 : f32 = GLF_live7m42[1][x_97];
-          let x_336 : f32 = GLF_live7sums[x_332];
-          GLF_live7sums[x_332] = (x_336 + x_334);
-
-          continuing {
-            let x_98 : i32 = GLF_live7r_1;
-            GLF_live7r_1 = (x_98 + 1);
-          }
-        }
-
-        continuing {
-          let x_100 : i32 = GLF_live7c_1;
-          GLF_live7c_1 = (x_100 + 1);
-        }
-      }
-      let x_102 : i32 = GLF_live7sum_index;
-      GLF_live7sum_index = (x_102 + 1);
-
-      continuing {
-        let x_104 : i32 = GLF_live7cols_1;
-        GLF_live7cols_1 = (x_104 + 1);
-      }
-    }
-
-    continuing {
-      let x_106 : i32 = GLF_live4i;
-      GLF_live4i = (x_106 + 1);
-    }
-  }
-  return vec3<f32>(1.0, 1.0, 1.0);
-}
-
-fn main_1() {
-  var position : vec2<f32>;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var i : i32;
-  var param_2 : vec2<f32>;
-  let x_161 : f32 = x_25.injectionSwitch.x;
-  if ((x_161 >= 2.0)) {
-    let x_165 : vec4<f32> = gl_FragCoord;
-    position = vec2<f32>(x_165.x, x_165.y);
-    let x_167 : vec2<f32> = position;
-    param = x_167;
-    let x_168 : vec3<f32> = drawShape_vf2_(&(param));
-    let x_169 : vec2<f32> = position;
-    param_1 = x_169;
-    let x_170 : vec3<f32> = drawShape_vf2_(&(param_1));
-    i = 25;
-    loop {
-      let x_108 : i32 = i;
-      if ((x_108 > 0)) {
-      } else {
-        break;
-      }
-      let x_177 : vec2<f32> = position;
-      param_2 = x_177;
-      let x_178 : vec3<f32> = drawShape_vf2_(&(param_2));
-
-      continuing {
-        let x_109 : i32 = i;
-        i = (x_109 - 1);
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4e2e246..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,111 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-
-float func_i1_(inout int b) {
-  int ndx = 0;
-  int i = 0;
-  ndx = 0;
-  {
-    for(; (ndx < 2); ndx = (ndx + 1)) {
-      const float x_104 = gl_FragCoord.x;
-      if ((x_104 < 0.0f)) {
-        i = 0;
-        {
-          for(; (i < 2); i = (i + 1)) {
-            if ((int(cosh(float2(1.0f, 800.0f)).x) <= 1)) {
-              discard;
-            }
-          }
-        }
-      }
-    }
-  }
-  const int x_125 = b;
-  if ((x_125 > 1)) {
-    return 3.0f;
-  }
-  const float x_130 = gl_FragCoord.x;
-  if ((x_130 < 0.0f)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return 5.0f;
-}
-
-void main_1() {
-  float f = 0.0f;
-  int param = 0;
-  int x_1 = 0;
-  int param_1 = 0;
-  x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  f = 0.0f;
-  while (true) {
-    const float x_54 = x_GLF_color.y;
-    if ((int(x_54) < 0)) {
-      discard;
-    } else {
-      const float x_61 = asfloat(x_11[0].x);
-      param = int(x_61);
-      const float x_63 = func_i1_(param);
-      f = x_63;
-    }
-    const float x_65 = x_GLF_color.y;
-    if ((int(x_65) > 65)) {
-      discard;
-    }
-    x_1 = 0;
-    while (true) {
-      const int x_74 = x_1;
-      const float x_76 = asfloat(x_11[0].x);
-      if ((x_74 < (int(x_76) + 1))) {
-      } else {
-        break;
-      }
-      param_1 = (x_1 + 10);
-      const float x_83 = func_i1_(param_1);
-      f = x_83;
-      {
-        x_1 = (x_1 + 1);
-      }
-    }
-    {
-      const float x_87 = asfloat(x_11[0].x);
-      if ((int(x_87) > 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((f == 3.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.msl
deleted file mode 100644
index a676889..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,128 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_i1_(thread int* const b, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int ndx = 0;
-  int i = 0;
-  ndx = 0;
-  while (true) {
-    int const x_100 = ndx;
-    if ((x_100 < 2)) {
-    } else {
-      break;
-    }
-    float const x_104 = (*(tint_symbol_3)).x;
-    if ((x_104 < 0.0f)) {
-      i = 0;
-      while (true) {
-        int const x_112 = i;
-        if ((x_112 < 2)) {
-        } else {
-          break;
-        }
-        if ((int(cosh(float2(1.0f, 800.0f)).x) <= 1)) {
-          discard_fragment();
-        }
-        {
-          int const x_121 = i;
-          i = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_123 = ndx;
-      ndx = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
-    }
-  }
-  int const x_125 = *(b);
-  if ((x_125 > 1)) {
-    return 3.0f;
-  }
-  float const x_130 = (*(tint_symbol_3)).x;
-  if ((x_130 < 0.0f)) {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return 5.0f;
-}
-
-void main_1(constant buf0& x_11, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float f = 0.0f;
-  int param = 0;
-  int x_1 = 0;
-  int param_1 = 0;
-  *(tint_symbol_5) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  f = 0.0f;
-  while (true) {
-    float const x_54 = (*(tint_symbol_5)).y;
-    if ((int(x_54) < 0)) {
-      discard_fragment();
-    } else {
-      float const x_61 = x_11.zero;
-      param = int(x_61);
-      float const x_63 = func_i1_(&(param), tint_symbol_6, tint_symbol_5);
-      f = x_63;
-    }
-    float const x_65 = (*(tint_symbol_5)).y;
-    if ((int(x_65) > 65)) {
-      discard_fragment();
-    }
-    x_1 = 0;
-    while (true) {
-      int const x_74 = x_1;
-      float const x_76 = x_11.zero;
-      if ((x_74 < as_type<int>((as_type<uint>(int(x_76)) + as_type<uint>(1))))) {
-      } else {
-        break;
-      }
-      int const x_81 = x_1;
-      param_1 = as_type<int>((as_type<uint>(x_81) + as_type<uint>(10)));
-      float const x_83 = func_i1_(&(param_1), tint_symbol_6, tint_symbol_5);
-      f = x_83;
-      {
-        int const x_84 = x_1;
-        x_1 = as_type<int>((as_type<uint>(x_84) + as_type<uint>(1)));
-      }
-    }
-    {
-      float const x_87 = x_11.zero;
-      if ((int(x_87) > 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_90 = f;
-  if ((x_90 == 3.0f)) {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_11, tint_symbol_8, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_11 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_11, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8b27838..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,275 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 161
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_11 "x_11"
-               OpName %func_i1_ "func_i1_"
-               OpName %b "b"
-               OpName %ndx "ndx"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %param "param"
-               OpName %x "x"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %14 = OpTypeFunction %float %_ptr_Function_int
-         %21 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-  %float_800 = OpConstant %float 800
-         %59 = OpConstantComposite %v2float %float_1 %float_800
-      %int_1 = OpConstant %int 1
-    %float_3 = OpConstant %float 3
-         %80 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_5 = OpConstant %float 5
-       %void = OpTypeVoid
-         %82 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %88 = OpConstantNull %float
-         %92 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_65 = OpConstant %int 65
-     %int_10 = OpConstant %int 10
-        %147 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %148 = OpTypeFunction %main_out %v4float
-   %func_i1_ = OpFunction %float None %14
-          %b = OpFunctionParameter %_ptr_Function_int
-         %19 = OpLabel
-        %ndx = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-               OpStore %ndx %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %ndx
-         %30 = OpSLessThan %bool %28 %int_2
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-         %38 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %39 = OpLoad %float %38
-         %41 = OpFOrdLessThan %bool %39 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpStore %i %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %49 = OpSLessThan %bool %48 %int_2
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %45
-         %50 = OpLabel
-         %54 = OpExtInst %v2float %56 Cosh %59
-         %60 = OpCompositeExtract %float %54 0
-         %53 = OpConvertFToS %int %60
-         %62 = OpSLessThanEqual %bool %53 %int_1
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %63
-         %64 = OpLabel
-               OpKill
-         %63 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-         %65 = OpLoad %int %i
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %i %66
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-         %67 = OpLoad %int %ndx
-         %68 = OpIAdd %int %67 %int_1
-               OpStore %ndx %68
-               OpBranch %24
-         %25 = OpLabel
-         %70 = OpLoad %int %b
-         %71 = OpSGreaterThan %bool %70 %int_1
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturnValue %float_3
-         %72 = OpLabel
-         %75 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %76 = OpLoad %float %75
-         %77 = OpFOrdLessThan %bool %76 %float_0
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %78
-         %79 = OpLabel
-               OpStore %x_GLF_color %80
-               OpBranch %78
-         %78 = OpLabel
-               OpReturnValue %float_5
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %82
-         %85 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %88
-      %param = OpVariable %_ptr_Function_int Function %21
-          %x = OpVariable %_ptr_Function_int Function %21
-    %param_1 = OpVariable %_ptr_Function_int Function %21
-               OpStore %x_GLF_color %92
-               OpStore %f %float_0
-               OpBranch %93
-         %93 = OpLabel
-               OpLoopMerge %94 %95 None
-               OpBranch %96
-         %96 = OpLabel
-         %98 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-         %99 = OpLoad %float %98
-        %100 = OpConvertFToS %int %99
-        %101 = OpSLessThan %bool %100 %int_0
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpKill
-        %104 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0
-        %107 = OpLoad %float %106
-        %108 = OpConvertFToS %int %107
-               OpStore %param %108
-        %109 = OpFunctionCall %float %func_i1_ %param
-               OpStore %f %109
-               OpBranch %102
-        %102 = OpLabel
-        %111 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-        %112 = OpLoad %float %111
-        %113 = OpConvertFToS %int %112
-        %115 = OpSGreaterThan %bool %113 %int_65
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-               OpKill
-        %116 = OpLabel
-               OpStore %x %int_0
-               OpBranch %118
-        %118 = OpLabel
-               OpLoopMerge %119 %120 None
-               OpBranch %121
-        %121 = OpLabel
-        %122 = OpLoad %int %x
-        %123 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0
-        %124 = OpLoad %float %123
-        %125 = OpConvertFToS %int %124
-        %126 = OpIAdd %int %125 %int_1
-        %127 = OpSLessThan %bool %122 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-               OpBranch %128
-        %130 = OpLabel
-               OpBranch %119
-        %128 = OpLabel
-        %131 = OpLoad %int %x
-        %133 = OpIAdd %int %131 %int_10
-               OpStore %param_1 %133
-        %134 = OpFunctionCall %float %func_i1_ %param_1
-               OpStore %f %134
-               OpBranch %120
-        %120 = OpLabel
-        %136 = OpLoad %int %x
-        %137 = OpIAdd %int %136 %int_1
-               OpStore %x %137
-               OpBranch %118
-        %119 = OpLabel
-               OpBranch %95
-         %95 = OpLabel
-        %138 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0
-        %139 = OpLoad %float %138
-        %140 = OpConvertFToS %int %139
-        %141 = OpSGreaterThan %bool %140 %int_1
-               OpBranchConditional %141 %93 %94
-         %94 = OpLabel
-        %142 = OpLoad %float %f
-        %143 = OpFOrdEqual %bool %142 %float_3
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %146
-        %145 = OpLabel
-               OpStore %x_GLF_color %147
-               OpBranch %144
-        %146 = OpLabel
-               OpStore %x_GLF_color %80
-               OpBranch %144
-        %144 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %148
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %152 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %153 = OpFunctionCall %void %main_1
-        %154 = OpLoad %v4float %x_GLF_color
-        %155 = OpCompositeConstruct %main_out %154
-               OpReturnValue %155
-               OpFunctionEnd
-       %main = OpFunction %void None %82
-        %157 = OpLabel
-        %159 = OpLoad %v4float %gl_FragCoord_param_1
-        %158 = OpFunctionCall %main_out %main_inner %159
-        %160 = OpCompositeExtract %v4float %158 0
-               OpStore %x_GLF_color_1_1 %160
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a6a3d97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,125 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-fn func_i1_(b : ptr<function, i32>) -> f32 {
-  var ndx : i32;
-  var i : i32;
-  ndx = 0;
-  loop {
-    let x_100 : i32 = ndx;
-    if ((x_100 < 2)) {
-    } else {
-      break;
-    }
-    let x_104 : f32 = gl_FragCoord.x;
-    if ((x_104 < 0.0)) {
-      i = 0;
-      loop {
-        let x_112 : i32 = i;
-        if ((x_112 < 2)) {
-        } else {
-          break;
-        }
-        if ((i32(cosh(vec2<f32>(1.0, 800.0)).x) <= 1)) {
-          discard;
-        }
-
-        continuing {
-          let x_121 : i32 = i;
-          i = (x_121 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_123 : i32 = ndx;
-      ndx = (x_123 + 1);
-    }
-  }
-  let x_125 : i32 = *(b);
-  if ((x_125 > 1)) {
-    return 3.0;
-  }
-  let x_130 : f32 = gl_FragCoord.x;
-  if ((x_130 < 0.0)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return 5.0;
-}
-
-fn main_1() {
-  var f : f32;
-  var param : i32;
-  var x : i32;
-  var param_1 : i32;
-  x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  f = 0.0;
-  loop {
-    let x_54 : f32 = x_GLF_color.y;
-    if ((i32(x_54) < 0)) {
-      discard;
-    } else {
-      let x_61 : f32 = x_11.zero;
-      param = i32(x_61);
-      let x_63 : f32 = func_i1_(&(param));
-      f = x_63;
-    }
-    let x_65 : f32 = x_GLF_color.y;
-    if ((i32(x_65) > 65)) {
-      discard;
-    }
-    x = 0;
-    loop {
-      let x_74 : i32 = x;
-      let x_76 : f32 = x_11.zero;
-      if ((x_74 < (i32(x_76) + 1))) {
-      } else {
-        break;
-      }
-      let x_81 : i32 = x;
-      param_1 = (x_81 + 10);
-      let x_83 : f32 = func_i1_(&(param_1));
-      f = x_83;
-
-      continuing {
-        let x_84 : i32 = x;
-        x = (x_84 + 1);
-      }
-    }
-
-    continuing {
-      let x_87 : f32 = x_11.zero;
-      if ((i32(x_87) > 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_90 : f32 = f;
-  if ((x_90 == 3.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4e2e246..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,111 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-
-float func_i1_(inout int b) {
-  int ndx = 0;
-  int i = 0;
-  ndx = 0;
-  {
-    for(; (ndx < 2); ndx = (ndx + 1)) {
-      const float x_104 = gl_FragCoord.x;
-      if ((x_104 < 0.0f)) {
-        i = 0;
-        {
-          for(; (i < 2); i = (i + 1)) {
-            if ((int(cosh(float2(1.0f, 800.0f)).x) <= 1)) {
-              discard;
-            }
-          }
-        }
-      }
-    }
-  }
-  const int x_125 = b;
-  if ((x_125 > 1)) {
-    return 3.0f;
-  }
-  const float x_130 = gl_FragCoord.x;
-  if ((x_130 < 0.0f)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return 5.0f;
-}
-
-void main_1() {
-  float f = 0.0f;
-  int param = 0;
-  int x_1 = 0;
-  int param_1 = 0;
-  x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  f = 0.0f;
-  while (true) {
-    const float x_54 = x_GLF_color.y;
-    if ((int(x_54) < 0)) {
-      discard;
-    } else {
-      const float x_61 = asfloat(x_11[0].x);
-      param = int(x_61);
-      const float x_63 = func_i1_(param);
-      f = x_63;
-    }
-    const float x_65 = x_GLF_color.y;
-    if ((int(x_65) > 65)) {
-      discard;
-    }
-    x_1 = 0;
-    while (true) {
-      const int x_74 = x_1;
-      const float x_76 = asfloat(x_11[0].x);
-      if ((x_74 < (int(x_76) + 1))) {
-      } else {
-        break;
-      }
-      param_1 = (x_1 + 10);
-      const float x_83 = func_i1_(param_1);
-      f = x_83;
-      {
-        x_1 = (x_1 + 1);
-      }
-    }
-    {
-      const float x_87 = asfloat(x_11[0].x);
-      if ((int(x_87) > 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((f == 3.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.msl
deleted file mode 100644
index a676889..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,128 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_i1_(thread int* const b, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int ndx = 0;
-  int i = 0;
-  ndx = 0;
-  while (true) {
-    int const x_100 = ndx;
-    if ((x_100 < 2)) {
-    } else {
-      break;
-    }
-    float const x_104 = (*(tint_symbol_3)).x;
-    if ((x_104 < 0.0f)) {
-      i = 0;
-      while (true) {
-        int const x_112 = i;
-        if ((x_112 < 2)) {
-        } else {
-          break;
-        }
-        if ((int(cosh(float2(1.0f, 800.0f)).x) <= 1)) {
-          discard_fragment();
-        }
-        {
-          int const x_121 = i;
-          i = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_123 = ndx;
-      ndx = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
-    }
-  }
-  int const x_125 = *(b);
-  if ((x_125 > 1)) {
-    return 3.0f;
-  }
-  float const x_130 = (*(tint_symbol_3)).x;
-  if ((x_130 < 0.0f)) {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return 5.0f;
-}
-
-void main_1(constant buf0& x_11, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float f = 0.0f;
-  int param = 0;
-  int x_1 = 0;
-  int param_1 = 0;
-  *(tint_symbol_5) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  f = 0.0f;
-  while (true) {
-    float const x_54 = (*(tint_symbol_5)).y;
-    if ((int(x_54) < 0)) {
-      discard_fragment();
-    } else {
-      float const x_61 = x_11.zero;
-      param = int(x_61);
-      float const x_63 = func_i1_(&(param), tint_symbol_6, tint_symbol_5);
-      f = x_63;
-    }
-    float const x_65 = (*(tint_symbol_5)).y;
-    if ((int(x_65) > 65)) {
-      discard_fragment();
-    }
-    x_1 = 0;
-    while (true) {
-      int const x_74 = x_1;
-      float const x_76 = x_11.zero;
-      if ((x_74 < as_type<int>((as_type<uint>(int(x_76)) + as_type<uint>(1))))) {
-      } else {
-        break;
-      }
-      int const x_81 = x_1;
-      param_1 = as_type<int>((as_type<uint>(x_81) + as_type<uint>(10)));
-      float const x_83 = func_i1_(&(param_1), tint_symbol_6, tint_symbol_5);
-      f = x_83;
-      {
-        int const x_84 = x_1;
-        x_1 = as_type<int>((as_type<uint>(x_84) + as_type<uint>(1)));
-      }
-    }
-    {
-      float const x_87 = x_11.zero;
-      if ((int(x_87) > 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_90 = f;
-  if ((x_90 == 3.0f)) {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_11, tint_symbol_8, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_11 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_11, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8b27838..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,275 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 161
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_11 "x_11"
-               OpName %func_i1_ "func_i1_"
-               OpName %b "b"
-               OpName %ndx "ndx"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %param "param"
-               OpName %x "x"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %14 = OpTypeFunction %float %_ptr_Function_int
-         %21 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-  %float_800 = OpConstant %float 800
-         %59 = OpConstantComposite %v2float %float_1 %float_800
-      %int_1 = OpConstant %int 1
-    %float_3 = OpConstant %float 3
-         %80 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_5 = OpConstant %float 5
-       %void = OpTypeVoid
-         %82 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %88 = OpConstantNull %float
-         %92 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_65 = OpConstant %int 65
-     %int_10 = OpConstant %int 10
-        %147 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %148 = OpTypeFunction %main_out %v4float
-   %func_i1_ = OpFunction %float None %14
-          %b = OpFunctionParameter %_ptr_Function_int
-         %19 = OpLabel
-        %ndx = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-               OpStore %ndx %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %ndx
-         %30 = OpSLessThan %bool %28 %int_2
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-         %38 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %39 = OpLoad %float %38
-         %41 = OpFOrdLessThan %bool %39 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpStore %i %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %49 = OpSLessThan %bool %48 %int_2
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %45
-         %50 = OpLabel
-         %54 = OpExtInst %v2float %56 Cosh %59
-         %60 = OpCompositeExtract %float %54 0
-         %53 = OpConvertFToS %int %60
-         %62 = OpSLessThanEqual %bool %53 %int_1
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %63
-         %64 = OpLabel
-               OpKill
-         %63 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-         %65 = OpLoad %int %i
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %i %66
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-         %67 = OpLoad %int %ndx
-         %68 = OpIAdd %int %67 %int_1
-               OpStore %ndx %68
-               OpBranch %24
-         %25 = OpLabel
-         %70 = OpLoad %int %b
-         %71 = OpSGreaterThan %bool %70 %int_1
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturnValue %float_3
-         %72 = OpLabel
-         %75 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %76 = OpLoad %float %75
-         %77 = OpFOrdLessThan %bool %76 %float_0
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %78
-         %79 = OpLabel
-               OpStore %x_GLF_color %80
-               OpBranch %78
-         %78 = OpLabel
-               OpReturnValue %float_5
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %82
-         %85 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %88
-      %param = OpVariable %_ptr_Function_int Function %21
-          %x = OpVariable %_ptr_Function_int Function %21
-    %param_1 = OpVariable %_ptr_Function_int Function %21
-               OpStore %x_GLF_color %92
-               OpStore %f %float_0
-               OpBranch %93
-         %93 = OpLabel
-               OpLoopMerge %94 %95 None
-               OpBranch %96
-         %96 = OpLabel
-         %98 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-         %99 = OpLoad %float %98
-        %100 = OpConvertFToS %int %99
-        %101 = OpSLessThan %bool %100 %int_0
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpKill
-        %104 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0
-        %107 = OpLoad %float %106
-        %108 = OpConvertFToS %int %107
-               OpStore %param %108
-        %109 = OpFunctionCall %float %func_i1_ %param
-               OpStore %f %109
-               OpBranch %102
-        %102 = OpLabel
-        %111 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-        %112 = OpLoad %float %111
-        %113 = OpConvertFToS %int %112
-        %115 = OpSGreaterThan %bool %113 %int_65
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-               OpKill
-        %116 = OpLabel
-               OpStore %x %int_0
-               OpBranch %118
-        %118 = OpLabel
-               OpLoopMerge %119 %120 None
-               OpBranch %121
-        %121 = OpLabel
-        %122 = OpLoad %int %x
-        %123 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0
-        %124 = OpLoad %float %123
-        %125 = OpConvertFToS %int %124
-        %126 = OpIAdd %int %125 %int_1
-        %127 = OpSLessThan %bool %122 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-               OpBranch %128
-        %130 = OpLabel
-               OpBranch %119
-        %128 = OpLabel
-        %131 = OpLoad %int %x
-        %133 = OpIAdd %int %131 %int_10
-               OpStore %param_1 %133
-        %134 = OpFunctionCall %float %func_i1_ %param_1
-               OpStore %f %134
-               OpBranch %120
-        %120 = OpLabel
-        %136 = OpLoad %int %x
-        %137 = OpIAdd %int %136 %int_1
-               OpStore %x %137
-               OpBranch %118
-        %119 = OpLabel
-               OpBranch %95
-         %95 = OpLabel
-        %138 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0
-        %139 = OpLoad %float %138
-        %140 = OpConvertFToS %int %139
-        %141 = OpSGreaterThan %bool %140 %int_1
-               OpBranchConditional %141 %93 %94
-         %94 = OpLabel
-        %142 = OpLoad %float %f
-        %143 = OpFOrdEqual %bool %142 %float_3
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %146
-        %145 = OpLabel
-               OpStore %x_GLF_color %147
-               OpBranch %144
-        %146 = OpLabel
-               OpStore %x_GLF_color %80
-               OpBranch %144
-        %144 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %148
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %152 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %153 = OpFunctionCall %void %main_1
-        %154 = OpLoad %v4float %x_GLF_color
-        %155 = OpCompositeConstruct %main_out %154
-               OpReturnValue %155
-               OpFunctionEnd
-       %main = OpFunction %void None %82
-        %157 = OpLabel
-        %159 = OpLoad %v4float %gl_FragCoord_param_1
-        %158 = OpFunctionCall %main_out %main_inner %159
-        %160 = OpCompositeExtract %v4float %158 0
-               OpStore %x_GLF_color_1_1 %160
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a6a3d97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cosh-return-inf-unused/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,125 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-fn func_i1_(b : ptr<function, i32>) -> f32 {
-  var ndx : i32;
-  var i : i32;
-  ndx = 0;
-  loop {
-    let x_100 : i32 = ndx;
-    if ((x_100 < 2)) {
-    } else {
-      break;
-    }
-    let x_104 : f32 = gl_FragCoord.x;
-    if ((x_104 < 0.0)) {
-      i = 0;
-      loop {
-        let x_112 : i32 = i;
-        if ((x_112 < 2)) {
-        } else {
-          break;
-        }
-        if ((i32(cosh(vec2<f32>(1.0, 800.0)).x) <= 1)) {
-          discard;
-        }
-
-        continuing {
-          let x_121 : i32 = i;
-          i = (x_121 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_123 : i32 = ndx;
-      ndx = (x_123 + 1);
-    }
-  }
-  let x_125 : i32 = *(b);
-  if ((x_125 > 1)) {
-    return 3.0;
-  }
-  let x_130 : f32 = gl_FragCoord.x;
-  if ((x_130 < 0.0)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return 5.0;
-}
-
-fn main_1() {
-  var f : f32;
-  var param : i32;
-  var x : i32;
-  var param_1 : i32;
-  x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  f = 0.0;
-  loop {
-    let x_54 : f32 = x_GLF_color.y;
-    if ((i32(x_54) < 0)) {
-      discard;
-    } else {
-      let x_61 : f32 = x_11.zero;
-      param = i32(x_61);
-      let x_63 : f32 = func_i1_(&(param));
-      f = x_63;
-    }
-    let x_65 : f32 = x_GLF_color.y;
-    if ((i32(x_65) > 65)) {
-      discard;
-    }
-    x = 0;
-    loop {
-      let x_74 : i32 = x;
-      let x_76 : f32 = x_11.zero;
-      if ((x_74 < (i32(x_76) + 1))) {
-      } else {
-        break;
-      }
-      let x_81 : i32 = x;
-      param_1 = (x_81 + 10);
-      let x_83 : f32 = func_i1_(&(param_1));
-      f = x_83;
-
-      continuing {
-        let x_84 : i32 = x;
-        x = (x_84 + 1);
-      }
-    }
-
-    continuing {
-      let x_87 : f32 = x_11.zero;
-      if ((i32(x_87) > 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_90 : f32 = f;
-  if ((x_90 == 3.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f144bdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int numbers[3] = (int[3])0;
-  float2 a = float2(0.0f, 0.0f);
-  float b = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  numbers[x_38] = x_40;
-  const int x_43 = asint(x_6[1].x);
-  const int x_45 = asint(x_6[1].x);
-  numbers[x_43] = x_45;
-  const int x_48 = asint(x_6[2].x);
-  const int x_50 = asint(x_6[2].x);
-  numbers[x_48] = x_50;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_56 = asfloat(x_9[2].x);
-  const int x_60 = numbers[((0.0f < x_56) ? 1 : 2)];
-  a = float2(float(x_53), float(x_60));
-  const float2 x_63 = a;
-  const float x_65 = asfloat(x_9[1].x);
-  const float x_67 = asfloat(x_9[1].x);
-  b = dot(x_63, float2(x_65, x_67));
-  const float x_70 = b;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_72 = asfloat(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  if ((x_70 == x_72)) {
-    const int x_78 = asint(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_81 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_84 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_87 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_78), float(x_81), float(x_84), float(x_87));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_91 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_92 = float(x_91);
-    x_GLF_color = float4(x_92, x_92, x_92, x_92);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.msl
deleted file mode 100644
index 79a8f2a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 numbers = {};
-  float2 a = 0.0f;
-  float b = 0.0f;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  numbers.arr[x_38] = x_40;
-  int const x_43 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_45 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  numbers.arr[x_43] = x_45;
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_50 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  numbers.arr[x_48] = x_50;
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_56 = x_9.x_GLF_uniform_float_values.arr[2].el;
-  int const x_60 = numbers.arr[select(2, 1, (0.0f < x_56))];
-  a = float2(float(x_53), float(x_60));
-  float2 const x_63 = a;
-  float const x_65 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  float const x_67 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  b = dot(x_63, float2(x_65, x_67));
-  float const x_70 = b;
-  float const x_72 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_70 == x_72)) {
-    int const x_78 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_84 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_87 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_78), float(x_81), float(x_84), float(x_87));
-  } else {
-    int const x_91 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_92 = float(x_91);
-    *(tint_symbol_3) = float4(x_92, x_92, x_92, x_92);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 7d9d490..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,168 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 111
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %numbers "numbers"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_int_uint_3_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_arr_int_uint_3_0 = OpTypeArray %int %uint_3
-%_ptr_Function__arr_int_uint_3_0 = OpTypePointer Function %_arr_int_uint_3_0
-         %26 = OpConstantNull %_arr_int_uint_3_0
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %30 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %33 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-        %100 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-    %numbers = OpVariable %_ptr_Function__arr_int_uint_3_0 Function %26
-          %a = OpVariable %_ptr_Function_v2float Function %30
-          %b = OpVariable %_ptr_Function_float Function %33
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %42 = OpAccessChain %_ptr_Function_int %numbers %38
-               OpStore %42 %40
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Function_int %numbers %45
-               OpStore %48 %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Function_int %numbers %51
-               OpStore %54 %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_2
-         %59 = OpLoad %float %58
-         %62 = OpFOrdLessThan %bool %float_0 %59
-         %60 = OpSelect %int %62 %int_1 %int_2
-         %64 = OpAccessChain %_ptr_Function_int %numbers %60
-         %65 = OpLoad %int %64
-         %66 = OpConvertSToF %float %56
-         %67 = OpConvertSToF %float %65
-         %68 = OpCompositeConstruct %v2float %66 %67
-               OpStore %a %68
-         %69 = OpLoad %v2float %a
-         %70 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %73 = OpLoad %float %72
-         %75 = OpCompositeConstruct %v2float %71 %73
-         %74 = OpDot %float %69 %75
-               OpStore %b %74
-         %76 = OpLoad %float %b
-         %77 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %78 = OpLoad %float %77
-         %79 = OpFOrdEqual %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpConvertSToF %float %84
-         %92 = OpConvertSToF %float %86
-         %93 = OpConvertSToF %float %88
-         %94 = OpConvertSToF %float %90
-         %95 = OpCompositeConstruct %v4float %91 %92 %93 %94
-               OpStore %x_GLF_color %95
-               OpBranch %80
-         %82 = OpLabel
-         %96 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %97 = OpLoad %int %96
-         %98 = OpConvertSToF %float %97
-         %99 = OpCompositeConstruct %v4float %98 %98 %98 %98
-               OpStore %x_GLF_color %99
-               OpBranch %80
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %100
-        %103 = OpLabel
-        %104 = OpFunctionCall %void %main_1
-        %105 = OpLoad %v4float %x_GLF_color
-        %106 = OpCompositeConstruct %main_out %105
-               OpReturnValue %106
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %108 = OpLabel
-        %109 = OpFunctionCall %main_out %main_inner
-        %110 = OpCompositeExtract %v4float %109 0
-               OpStore %x_GLF_color_1_1 %110
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a706204..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var numbers : array<i32, 3>;
-  var a : vec2<f32>;
-  var b : f32;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-  numbers[x_38] = x_40;
-  let x_43 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_45 : i32 = x_6.x_GLF_uniform_int_values[1];
-  numbers[x_43] = x_45;
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_50 : i32 = x_6.x_GLF_uniform_int_values[2];
-  numbers[x_48] = x_50;
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_56 : f32 = x_9.x_GLF_uniform_float_values[2];
-  let x_60 : i32 = numbers[select(2, 1, (0.0 < x_56))];
-  a = vec2<f32>(f32(x_53), f32(x_60));
-  let x_63 : vec2<f32> = a;
-  let x_65 : f32 = x_9.x_GLF_uniform_float_values[1];
-  let x_67 : f32 = x_9.x_GLF_uniform_float_values[1];
-  b = dot(x_63, vec2<f32>(x_65, x_67));
-  let x_70 : f32 = b;
-  let x_72 : f32 = x_9.x_GLF_uniform_float_values[0];
-  if ((x_70 == x_72)) {
-    let x_78 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_87 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_78), f32(x_81), f32(x_84), f32(x_87));
-  } else {
-    let x_91 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_92 : f32 = f32(x_91);
-    x_GLF_color = vec4<f32>(x_92, x_92, x_92, x_92);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f144bdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int numbers[3] = (int[3])0;
-  float2 a = float2(0.0f, 0.0f);
-  float b = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  numbers[x_38] = x_40;
-  const int x_43 = asint(x_6[1].x);
-  const int x_45 = asint(x_6[1].x);
-  numbers[x_43] = x_45;
-  const int x_48 = asint(x_6[2].x);
-  const int x_50 = asint(x_6[2].x);
-  numbers[x_48] = x_50;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_56 = asfloat(x_9[2].x);
-  const int x_60 = numbers[((0.0f < x_56) ? 1 : 2)];
-  a = float2(float(x_53), float(x_60));
-  const float2 x_63 = a;
-  const float x_65 = asfloat(x_9[1].x);
-  const float x_67 = asfloat(x_9[1].x);
-  b = dot(x_63, float2(x_65, x_67));
-  const float x_70 = b;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_72 = asfloat(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  if ((x_70 == x_72)) {
-    const int x_78 = asint(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_81 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_84 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_87 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_78), float(x_81), float(x_84), float(x_87));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_91 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_92 = float(x_91);
-    x_GLF_color = float4(x_92, x_92, x_92, x_92);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.msl
deleted file mode 100644
index 79a8f2a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 numbers = {};
-  float2 a = 0.0f;
-  float b = 0.0f;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  numbers.arr[x_38] = x_40;
-  int const x_43 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_45 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  numbers.arr[x_43] = x_45;
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_50 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  numbers.arr[x_48] = x_50;
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_56 = x_9.x_GLF_uniform_float_values.arr[2].el;
-  int const x_60 = numbers.arr[select(2, 1, (0.0f < x_56))];
-  a = float2(float(x_53), float(x_60));
-  float2 const x_63 = a;
-  float const x_65 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  float const x_67 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  b = dot(x_63, float2(x_65, x_67));
-  float const x_70 = b;
-  float const x_72 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_70 == x_72)) {
-    int const x_78 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_84 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_87 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_78), float(x_81), float(x_84), float(x_87));
-  } else {
-    int const x_91 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_92 = float(x_91);
-    *(tint_symbol_3) = float4(x_92, x_92, x_92, x_92);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 7d9d490..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,168 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 111
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %numbers "numbers"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_int_uint_3_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_arr_int_uint_3_0 = OpTypeArray %int %uint_3
-%_ptr_Function__arr_int_uint_3_0 = OpTypePointer Function %_arr_int_uint_3_0
-         %26 = OpConstantNull %_arr_int_uint_3_0
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %30 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %33 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-        %100 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-    %numbers = OpVariable %_ptr_Function__arr_int_uint_3_0 Function %26
-          %a = OpVariable %_ptr_Function_v2float Function %30
-          %b = OpVariable %_ptr_Function_float Function %33
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %42 = OpAccessChain %_ptr_Function_int %numbers %38
-               OpStore %42 %40
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Function_int %numbers %45
-               OpStore %48 %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Function_int %numbers %51
-               OpStore %54 %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_2
-         %59 = OpLoad %float %58
-         %62 = OpFOrdLessThan %bool %float_0 %59
-         %60 = OpSelect %int %62 %int_1 %int_2
-         %64 = OpAccessChain %_ptr_Function_int %numbers %60
-         %65 = OpLoad %int %64
-         %66 = OpConvertSToF %float %56
-         %67 = OpConvertSToF %float %65
-         %68 = OpCompositeConstruct %v2float %66 %67
-               OpStore %a %68
-         %69 = OpLoad %v2float %a
-         %70 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %73 = OpLoad %float %72
-         %75 = OpCompositeConstruct %v2float %71 %73
-         %74 = OpDot %float %69 %75
-               OpStore %b %74
-         %76 = OpLoad %float %b
-         %77 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %78 = OpLoad %float %77
-         %79 = OpFOrdEqual %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpConvertSToF %float %84
-         %92 = OpConvertSToF %float %86
-         %93 = OpConvertSToF %float %88
-         %94 = OpConvertSToF %float %90
-         %95 = OpCompositeConstruct %v4float %91 %92 %93 %94
-               OpStore %x_GLF_color %95
-               OpBranch %80
-         %82 = OpLabel
-         %96 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %97 = OpLoad %int %96
-         %98 = OpConvertSToF %float %97
-         %99 = OpCompositeConstruct %v4float %98 %98 %98 %98
-               OpStore %x_GLF_color %99
-               OpBranch %80
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %100
-        %103 = OpLabel
-        %104 = OpFunctionCall %void %main_1
-        %105 = OpLoad %v4float %x_GLF_color
-        %106 = OpCompositeConstruct %main_out %105
-               OpReturnValue %106
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %108 = OpLabel
-        %109 = OpFunctionCall %main_out %main_inner
-        %110 = OpCompositeExtract %v4float %109 0
-               OpStore %x_GLF_color_1_1 %110
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a706204..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-access-array-dot/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var numbers : array<i32, 3>;
-  var a : vec2<f32>;
-  var b : f32;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-  numbers[x_38] = x_40;
-  let x_43 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_45 : i32 = x_6.x_GLF_uniform_int_values[1];
-  numbers[x_43] = x_45;
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_50 : i32 = x_6.x_GLF_uniform_int_values[2];
-  numbers[x_48] = x_50;
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_56 : f32 = x_9.x_GLF_uniform_float_values[2];
-  let x_60 : i32 = numbers[select(2, 1, (0.0 < x_56))];
-  a = vec2<f32>(f32(x_53), f32(x_60));
-  let x_63 : vec2<f32> = a;
-  let x_65 : f32 = x_9.x_GLF_uniform_float_values[1];
-  let x_67 : f32 = x_9.x_GLF_uniform_float_values[1];
-  b = dot(x_63, vec2<f32>(x_65, x_67));
-  let x_70 : f32 = b;
-  let x_72 : f32 = x_9.x_GLF_uniform_float_values[0];
-  if ((x_70 == x_72)) {
-    let x_78 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_87 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_78), f32(x_81), f32(x_84), f32(x_87));
-  } else {
-    let x_91 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_92 : f32 = f32(x_91);
-    x_GLF_color = vec4<f32>(x_92, x_92, x_92, x_92);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f7df751..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  float s = 0.0f;
-  int i = 0;
-  int j = 0;
-  s = 2.0f;
-  i = 0;
-  while (true) {
-    const int x_47 = i;
-    const int x_49 = asint(x_8[0].x);
-    if ((x_47 < (x_49 + 1))) {
-    } else {
-      break;
-    }
-    s = (s + 3.0f);
-    j = 0;
-    {
-      for(; (j < 10); j = (j + 1)) {
-        const int x_63 = asint(x_8[0].x);
-        if ((x_63 == 1)) {
-          discard;
-        }
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return s;
-}
-
-void main_1() {
-  float4 c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_34 = func_();
-  c = float4(x_34, 0.0f, 0.0f, 1.0f);
-  const float x_36 = func_();
-  if ((x_36 == 5.0f)) {
-    x_GLF_color = c;
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3c0bbb7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(constant buf0& x_8) {
-  float s = 0.0f;
-  int i = 0;
-  int j = 0;
-  s = 2.0f;
-  i = 0;
-  while (true) {
-    int const x_47 = i;
-    int const x_49 = x_8.zero;
-    if ((x_47 < as_type<int>((as_type<uint>(x_49) + as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    float const x_53 = s;
-    s = (x_53 + 3.0f);
-    j = 0;
-    while (true) {
-      int const x_59 = j;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      int const x_63 = x_8.zero;
-      if ((x_63 == 1)) {
-        discard_fragment();
-      }
-      {
-        int const x_67 = j;
-        j = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_69 = i;
-      i = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-    }
-  }
-  float const x_71 = s;
-  return x_71;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float4 c = 0.0f;
-  float const x_34 = func_(x_8);
-  c = float4(x_34, 0.0f, 0.0f, 1.0f);
-  float const x_36 = func_(x_8);
-  if ((x_36 == 5.0f)) {
-    float4 const x_41 = c;
-    *(tint_symbol_3) = x_41;
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e614433..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,166 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 93
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %s "s"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-    %float_2 = OpConstant %float 2
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-    %float_3 = OpConstant %float 3
-     %int_10 = OpConstant %int 10
-       %void = OpTypeVoid
-         %64 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-    %float_5 = OpConstant %float 5
-         %81 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %82 = OpTypeFunction %main_out
-      %func_ = OpFunction %float None %12
-         %14 = OpLabel
-          %s = OpVariable %_ptr_Function_float Function %17
-          %i = OpVariable %_ptr_Function_int Function %20
-          %j = OpVariable %_ptr_Function_int Function %20
-               OpStore %s %float_2
-               OpStore %i %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %i
-         %32 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %33 = OpLoad %int %32
-         %35 = OpIAdd %int %33 %int_1
-         %36 = OpSLessThan %bool %28 %35
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpBranch %38
-         %40 = OpLabel
-               OpBranch %25
-         %38 = OpLabel
-         %41 = OpLoad %float %s
-         %43 = OpFAdd %float %41 %float_3
-               OpStore %s %43
-               OpStore %j %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %j
-         %50 = OpSLessThan %bool %48 %int_10
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpBranch %51
-         %53 = OpLabel
-               OpBranch %45
-         %51 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %55 %int_1
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpKill
-         %57 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-         %59 = OpLoad %int %j
-         %60 = OpIAdd %int %59 %int_1
-               OpStore %j %60
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-         %61 = OpLoad %int %i
-         %62 = OpIAdd %int %61 %int_1
-               OpStore %i %62
-               OpBranch %24
-         %25 = OpLabel
-         %63 = OpLoad %float %s
-               OpReturnValue %63
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %64
-         %67 = OpLabel
-          %c = OpVariable %_ptr_Function_v4float Function %5
-         %70 = OpFunctionCall %float %func_
-         %73 = OpCompositeConstruct %v4float %70 %float_0 %float_0 %float_1
-               OpStore %c %73
-         %74 = OpFunctionCall %float %func_
-         %76 = OpFOrdEqual %bool %74 %float_5
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-         %80 = OpLoad %v4float %c
-               OpStore %x_GLF_color %80
-               OpBranch %77
-         %79 = OpLabel
-               OpStore %x_GLF_color %81
-               OpBranch %77
-         %77 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %82
-         %85 = OpLabel
-         %86 = OpFunctionCall %void %main_1
-         %87 = OpLoad %v4float %x_GLF_color
-         %88 = OpCompositeConstruct %main_out %87
-               OpReturnValue %88
-               OpFunctionEnd
-       %main = OpFunction %void None %64
-         %90 = OpLabel
-         %91 = OpFunctionCall %main_out %main_inner
-         %92 = OpCompositeExtract %v4float %91 0
-               OpStore %x_GLF_color_1_1 %92
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f8b40bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var s : f32;
-  var i : i32;
-  var j : i32;
-  s = 2.0;
-  i = 0;
-  loop {
-    let x_47 : i32 = i;
-    let x_49 : i32 = x_8.zero;
-    if ((x_47 < (x_49 + 1))) {
-    } else {
-      break;
-    }
-    let x_53 : f32 = s;
-    s = (x_53 + 3.0);
-    j = 0;
-    loop {
-      let x_59 : i32 = j;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      let x_63 : i32 = x_8.zero;
-      if ((x_63 == 1)) {
-        discard;
-      }
-
-      continuing {
-        let x_67 : i32 = j;
-        j = (x_67 + 1);
-      }
-    }
-
-    continuing {
-      let x_69 : i32 = i;
-      i = (x_69 + 1);
-    }
-  }
-  let x_71 : f32 = s;
-  return x_71;
-}
-
-fn main_1() {
-  var c : vec4<f32>;
-  let x_34 : f32 = func_();
-  c = vec4<f32>(x_34, 0.0, 0.0, 1.0);
-  let x_36 : f32 = func_();
-  if ((x_36 == 5.0)) {
-    let x_41 : vec4<f32> = c;
-    x_GLF_color = x_41;
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f7df751..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  float s = 0.0f;
-  int i = 0;
-  int j = 0;
-  s = 2.0f;
-  i = 0;
-  while (true) {
-    const int x_47 = i;
-    const int x_49 = asint(x_8[0].x);
-    if ((x_47 < (x_49 + 1))) {
-    } else {
-      break;
-    }
-    s = (s + 3.0f);
-    j = 0;
-    {
-      for(; (j < 10); j = (j + 1)) {
-        const int x_63 = asint(x_8[0].x);
-        if ((x_63 == 1)) {
-          discard;
-        }
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return s;
-}
-
-void main_1() {
-  float4 c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_34 = func_();
-  c = float4(x_34, 0.0f, 0.0f, 1.0f);
-  const float x_36 = func_();
-  if ((x_36 == 5.0f)) {
-    x_GLF_color = c;
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3c0bbb7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(constant buf0& x_8) {
-  float s = 0.0f;
-  int i = 0;
-  int j = 0;
-  s = 2.0f;
-  i = 0;
-  while (true) {
-    int const x_47 = i;
-    int const x_49 = x_8.zero;
-    if ((x_47 < as_type<int>((as_type<uint>(x_49) + as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    float const x_53 = s;
-    s = (x_53 + 3.0f);
-    j = 0;
-    while (true) {
-      int const x_59 = j;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      int const x_63 = x_8.zero;
-      if ((x_63 == 1)) {
-        discard_fragment();
-      }
-      {
-        int const x_67 = j;
-        j = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_69 = i;
-      i = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-    }
-  }
-  float const x_71 = s;
-  return x_71;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float4 c = 0.0f;
-  float const x_34 = func_(x_8);
-  c = float4(x_34, 0.0f, 0.0f, 1.0f);
-  float const x_36 = func_(x_8);
-  if ((x_36 == 5.0f)) {
-    float4 const x_41 = c;
-    *(tint_symbol_3) = x_41;
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e614433..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,166 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 93
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %s "s"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-    %float_2 = OpConstant %float 2
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-    %float_3 = OpConstant %float 3
-     %int_10 = OpConstant %int 10
-       %void = OpTypeVoid
-         %64 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-    %float_5 = OpConstant %float 5
-         %81 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %82 = OpTypeFunction %main_out
-      %func_ = OpFunction %float None %12
-         %14 = OpLabel
-          %s = OpVariable %_ptr_Function_float Function %17
-          %i = OpVariable %_ptr_Function_int Function %20
-          %j = OpVariable %_ptr_Function_int Function %20
-               OpStore %s %float_2
-               OpStore %i %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %i
-         %32 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %33 = OpLoad %int %32
-         %35 = OpIAdd %int %33 %int_1
-         %36 = OpSLessThan %bool %28 %35
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpBranch %38
-         %40 = OpLabel
-               OpBranch %25
-         %38 = OpLabel
-         %41 = OpLoad %float %s
-         %43 = OpFAdd %float %41 %float_3
-               OpStore %s %43
-               OpStore %j %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %j
-         %50 = OpSLessThan %bool %48 %int_10
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpBranch %51
-         %53 = OpLabel
-               OpBranch %45
-         %51 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %55 %int_1
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpKill
-         %57 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-         %59 = OpLoad %int %j
-         %60 = OpIAdd %int %59 %int_1
-               OpStore %j %60
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-         %61 = OpLoad %int %i
-         %62 = OpIAdd %int %61 %int_1
-               OpStore %i %62
-               OpBranch %24
-         %25 = OpLabel
-         %63 = OpLoad %float %s
-               OpReturnValue %63
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %64
-         %67 = OpLabel
-          %c = OpVariable %_ptr_Function_v4float Function %5
-         %70 = OpFunctionCall %float %func_
-         %73 = OpCompositeConstruct %v4float %70 %float_0 %float_0 %float_1
-               OpStore %c %73
-         %74 = OpFunctionCall %float %func_
-         %76 = OpFOrdEqual %bool %74 %float_5
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-         %80 = OpLoad %v4float %c
-               OpStore %x_GLF_color %80
-               OpBranch %77
-         %79 = OpLabel
-               OpStore %x_GLF_color %81
-               OpBranch %77
-         %77 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %82
-         %85 = OpLabel
-         %86 = OpFunctionCall %void %main_1
-         %87 = OpLoad %v4float %x_GLF_color
-         %88 = OpCompositeConstruct %main_out %87
-               OpReturnValue %88
-               OpFunctionEnd
-       %main = OpFunction %void None %64
-         %90 = OpLabel
-         %91 = OpFunctionCall %main_out %main_inner
-         %92 = OpCompositeExtract %v4float %91 0
-               OpStore %x_GLF_color_1_1 %92
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f8b40bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-analysis-reachable-from-many/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var s : f32;
-  var i : i32;
-  var j : i32;
-  s = 2.0;
-  i = 0;
-  loop {
-    let x_47 : i32 = i;
-    let x_49 : i32 = x_8.zero;
-    if ((x_47 < (x_49 + 1))) {
-    } else {
-      break;
-    }
-    let x_53 : f32 = s;
-    s = (x_53 + 3.0);
-    j = 0;
-    loop {
-      let x_59 : i32 = j;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      let x_63 : i32 = x_8.zero;
-      if ((x_63 == 1)) {
-        discard;
-      }
-
-      continuing {
-        let x_67 : i32 = j;
-        j = (x_67 + 1);
-      }
-    }
-
-    continuing {
-      let x_69 : i32 = i;
-      i = (x_69 + 1);
-    }
-  }
-  let x_71 : f32 = s;
-  return x_71;
-}
-
-fn main_1() {
-  var c : vec4<f32>;
-  let x_34 : f32 = func_();
-  c = vec4<f32>(x_34, 0.0, 0.0, 1.0);
-  let x_36 : f32 = func_();
-  if ((x_36 == 5.0)) {
-    let x_41 : vec4<f32> = c;
-    x_GLF_color = x_41;
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7d70ea9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  int2 v = int2(0, 0);
-  const float x_39 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_39 < x_41)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_48 = float(x_47);
-    x_GLF_color = float4(x_48, x_48, x_48, x_48);
-  } else {
-    const float4 x_50 = gl_FragCoord;
-    const float x_53 = asfloat(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_55 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_59 = asfloat(x_6[2].x);
-    v = int2(((float2(x_50.x, x_50.y) - float2(x_53, x_55)) * x_59));
-    const float x_63 = asfloat(x_6[1].x);
-    const int x_65 = v.y;
-    const int x_67 = asint(x_8[1].x);
-    const int x_70 = asint(x_8[1].x);
-    const int x_74 = v.x;
-    const int x_76 = asint(x_8[1].x);
-    const float x_80 = asfloat(x_6[1].x);
-    x_GLF_color = float4(x_63, float(((x_65 - x_67) & x_70)), float((x_74 & x_76)), x_80);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.msl
deleted file mode 100644
index c5ef40a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int2 v = 0;
-  float const x_39 = (*(tint_symbol_3)).y;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_39 < x_41)) {
-    int const x_47 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_48 = float(x_47);
-    *(tint_symbol_4) = float4(x_48, x_48, x_48, x_48);
-  } else {
-    float4 const x_50 = *(tint_symbol_3);
-    float const x_53 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_55 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_59 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    v = int2(((float2(x_50.x, x_50.y) - float2(x_53, x_55)) * x_59));
-    float const x_63 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    int const x_65 = v.y;
-    int const x_67 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_70 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_74 = v.x;
-    int const x_76 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_80 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_4) = float4(x_63, float((as_type<int>((as_type<uint>(x_65) - as_type<uint>(x_67))) & x_70)), float((x_74 & x_76)), x_80);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c00bb8c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,156 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 101
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %30 = OpConstantNull %v2int
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_int = OpTypePointer Function %int
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %v = OpVariable %_ptr_Function_v2int Function %30
-         %33 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %34 = OpLoad %float %33
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpFOrdLessThan %bool %34 %39
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %47 = OpLoad %int %46
-         %48 = OpConvertSToF %float %47
-         %49 = OpCompositeConstruct %v4float %48 %48 %48 %48
-               OpStore %x_GLF_color %49
-               OpBranch %42
-         %44 = OpLabel
-         %50 = OpLoad %v4float %gl_FragCoord
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %57 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %58 = OpLoad %float %57
-         %61 = OpCompositeExtract %float %50 0
-         %62 = OpCompositeExtract %float %50 1
-         %63 = OpCompositeConstruct %v2float %61 %62
-         %64 = OpCompositeConstruct %v2float %53 %55
-         %65 = OpFSub %v2float %63 %64
-         %66 = OpVectorTimesScalar %v2float %65 %58
-         %59 = OpConvertFToS %v2int %66
-               OpStore %v %59
-         %67 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %68 = OpLoad %float %67
-         %70 = OpAccessChain %_ptr_Function_int %v %uint_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_int %v %uint_0
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %81 = OpLoad %float %80
-         %83 = OpISub %int %71 %73
-         %84 = OpBitwiseAnd %int %83 %75
-         %82 = OpConvertSToF %float %84
-         %86 = OpBitwiseAnd %int %77 %79
-         %85 = OpConvertSToF %float %86
-         %87 = OpCompositeConstruct %v4float %68 %82 %85 %81
-               OpStore %x_GLF_color %87
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %92 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %93 = OpFunctionCall %void %main_1
-         %94 = OpLoad %v4float %x_GLF_color
-         %95 = OpCompositeConstruct %main_out %94
-               OpReturnValue %95
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %97 = OpLabel
-         %99 = OpLoad %v4float %gl_FragCoord_param_1
-         %98 = OpFunctionCall %main_out %main_inner %99
-        %100 = OpCompositeExtract %v4float %98 0
-               OpStore %x_GLF_color_1_1 %100
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9a549c4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var v : vec2<i32>;
-  let x_39 : f32 = gl_FragCoord.y;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_39 < x_41)) {
-    let x_47 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_48 : f32 = f32(x_47);
-    x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
-  } else {
-    let x_50 : vec4<f32> = gl_FragCoord;
-    let x_53 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_55 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_59 : f32 = x_6.x_GLF_uniform_float_values[2];
-    v = vec2<i32>(((vec2<f32>(x_50.x, x_50.y) - vec2<f32>(x_53, x_55)) * x_59));
-    let x_63 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_65 : i32 = v.y;
-    let x_67 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_70 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_74 : i32 = v.x;
-    let x_76 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_80 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_63, f32(((x_65 - x_67) & x_70)), f32((x_74 & x_76)), x_80);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7d70ea9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  int2 v = int2(0, 0);
-  const float x_39 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_39 < x_41)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_48 = float(x_47);
-    x_GLF_color = float4(x_48, x_48, x_48, x_48);
-  } else {
-    const float4 x_50 = gl_FragCoord;
-    const float x_53 = asfloat(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_55 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_59 = asfloat(x_6[2].x);
-    v = int2(((float2(x_50.x, x_50.y) - float2(x_53, x_55)) * x_59));
-    const float x_63 = asfloat(x_6[1].x);
-    const int x_65 = v.y;
-    const int x_67 = asint(x_8[1].x);
-    const int x_70 = asint(x_8[1].x);
-    const int x_74 = v.x;
-    const int x_76 = asint(x_8[1].x);
-    const float x_80 = asfloat(x_6[1].x);
-    x_GLF_color = float4(x_63, float(((x_65 - x_67) & x_70)), float((x_74 & x_76)), x_80);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.msl
deleted file mode 100644
index c5ef40a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int2 v = 0;
-  float const x_39 = (*(tint_symbol_3)).y;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_39 < x_41)) {
-    int const x_47 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_48 = float(x_47);
-    *(tint_symbol_4) = float4(x_48, x_48, x_48, x_48);
-  } else {
-    float4 const x_50 = *(tint_symbol_3);
-    float const x_53 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_55 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_59 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    v = int2(((float2(x_50.x, x_50.y) - float2(x_53, x_55)) * x_59));
-    float const x_63 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    int const x_65 = v.y;
-    int const x_67 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_70 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_74 = v.x;
-    int const x_76 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_80 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_4) = float4(x_63, float((as_type<int>((as_type<uint>(x_65) - as_type<uint>(x_67))) & x_70)), float((x_74 & x_76)), x_80);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c00bb8c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,156 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 101
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %30 = OpConstantNull %v2int
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_int = OpTypePointer Function %int
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %v = OpVariable %_ptr_Function_v2int Function %30
-         %33 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %34 = OpLoad %float %33
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpFOrdLessThan %bool %34 %39
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %47 = OpLoad %int %46
-         %48 = OpConvertSToF %float %47
-         %49 = OpCompositeConstruct %v4float %48 %48 %48 %48
-               OpStore %x_GLF_color %49
-               OpBranch %42
-         %44 = OpLabel
-         %50 = OpLoad %v4float %gl_FragCoord
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %57 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %58 = OpLoad %float %57
-         %61 = OpCompositeExtract %float %50 0
-         %62 = OpCompositeExtract %float %50 1
-         %63 = OpCompositeConstruct %v2float %61 %62
-         %64 = OpCompositeConstruct %v2float %53 %55
-         %65 = OpFSub %v2float %63 %64
-         %66 = OpVectorTimesScalar %v2float %65 %58
-         %59 = OpConvertFToS %v2int %66
-               OpStore %v %59
-         %67 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %68 = OpLoad %float %67
-         %70 = OpAccessChain %_ptr_Function_int %v %uint_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_int %v %uint_0
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %81 = OpLoad %float %80
-         %83 = OpISub %int %71 %73
-         %84 = OpBitwiseAnd %int %83 %75
-         %82 = OpConvertSToF %float %84
-         %86 = OpBitwiseAnd %int %77 %79
-         %85 = OpConvertSToF %float %86
-         %87 = OpCompositeConstruct %v4float %68 %82 %85 %81
-               OpStore %x_GLF_color %87
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %92 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %93 = OpFunctionCall %void %main_1
-         %94 = OpLoad %v4float %x_GLF_color
-         %95 = OpCompositeConstruct %main_out %94
-               OpReturnValue %95
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %97 = OpLabel
-         %99 = OpLoad %v4float %gl_FragCoord_param_1
-         %98 = OpFunctionCall %main_out %main_inner %99
-        %100 = OpCompositeExtract %v4float %98 0
-               OpStore %x_GLF_color_1_1 %100
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9a549c4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-and-even-numbers-from-fragcoord/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var v : vec2<i32>;
-  let x_39 : f32 = gl_FragCoord.y;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_39 < x_41)) {
-    let x_47 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_48 : f32 = f32(x_47);
-    x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
-  } else {
-    let x_50 : vec4<f32> = gl_FragCoord;
-    let x_53 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_55 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_59 : f32 = x_6.x_GLF_uniform_float_values[2];
-    v = vec2<i32>(((vec2<f32>(x_50.x, x_50.y) - vec2<f32>(x_53, x_55)) * x_59));
-    let x_63 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_65 : i32 = v.y;
-    let x_67 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_70 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_74 : i32 = v.x;
-    let x_76 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_80 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_63, f32(((x_65 - x_67) & x_70)), f32((x_74 & x_76)), x_80);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 52308d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v = float2(0.0f, 0.0f);
-  float d = 0.0f;
-  const int x_35 = asint(x_6[0].x);
-  v = acos(ldexp(float2(0.100000001f, 0.100000001f), int2(x_35, 3)));
-  d = distance(v, float2(1.159279943f, 0.64349997f));
-  if ((d < 0.01f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7baf635..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 v = 0.0f;
-  float d = 0.0f;
-  int const x_35 = x_6.two;
-  v = acos(ldexp(float2(0.100000001f, 0.100000001f), int2(x_35, 3)));
-  float2 const x_39 = v;
-  d = distance(x_39, float2(1.159279943f, 0.64349997f));
-  float const x_41 = d;
-  if ((x_41 < 0.01f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a83eaf8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-         %29 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %d "d"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %19 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%float_0_100000001 = OpConstant %float 0.100000001
-         %32 = OpConstantComposite %v2float %float_0_100000001 %float_0_100000001
-      %v2int = OpTypeVector %int 2
-      %int_3 = OpConstant %int 3
-%float_1_15927994 = OpConstant %float 1.15927994
-%float_0_64349997 = OpConstant %float 0.64349997
-         %40 = OpConstantComposite %v2float %float_1_15927994 %float_0_64349997
-%float_0_00999999978 = OpConstant %float 0.00999999978
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %50 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %51 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %52 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %19
-          %d = OpVariable %_ptr_Function_float Function %22
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %27 = OpLoad %int %26
-         %35 = OpCompositeConstruct %v2int %27 %int_3
-         %30 = OpExtInst %v2float %29 Ldexp %32 %35
-         %28 = OpExtInst %v2float %29 Acos %30
-               OpStore %v %28
-         %36 = OpLoad %v2float %v
-         %37 = OpExtInst %float %29 Distance %36 %40
-               OpStore %d %37
-         %41 = OpLoad %float %d
-         %43 = OpFOrdLessThan %bool %41 %float_0_00999999978
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpStore %x_GLF_color %50
-               OpBranch %45
-         %47 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %45
-         %45 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %52
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-         %57 = OpLoad %v4float %x_GLF_color
-         %58 = OpCompositeConstruct %main_out %57
-               OpReturnValue %58
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %60 = OpLabel
-         %61 = OpFunctionCall %main_out %main_inner
-         %62 = OpCompositeExtract %v4float %61 0
-               OpStore %x_GLF_color_1_1 %62
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index eb29614..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-[[block]]
-struct buf0 {
-  two : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec2<f32>;
-  var d : f32;
-  let x_35 : i32 = x_6.two;
-  v = acos(ldexp(vec2<f32>(0.100000001, 0.100000001), vec2<i32>(x_35, 3)));
-  let x_39 : vec2<f32> = v;
-  d = distance(x_39, vec2<f32>(1.159279943, 0.64349997));
-  let x_41 : f32 = d;
-  if ((x_41 < 0.01)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 52308d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v = float2(0.0f, 0.0f);
-  float d = 0.0f;
-  const int x_35 = asint(x_6[0].x);
-  v = acos(ldexp(float2(0.100000001f, 0.100000001f), int2(x_35, 3)));
-  d = distance(v, float2(1.159279943f, 0.64349997f));
-  if ((d < 0.01f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7baf635..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 v = 0.0f;
-  float d = 0.0f;
-  int const x_35 = x_6.two;
-  v = acos(ldexp(float2(0.100000001f, 0.100000001f), int2(x_35, 3)));
-  float2 const x_39 = v;
-  d = distance(x_39, float2(1.159279943f, 0.64349997f));
-  float const x_41 = d;
-  if ((x_41 < 0.01f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a83eaf8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-         %29 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %d "d"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %19 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%float_0_100000001 = OpConstant %float 0.100000001
-         %32 = OpConstantComposite %v2float %float_0_100000001 %float_0_100000001
-      %v2int = OpTypeVector %int 2
-      %int_3 = OpConstant %int 3
-%float_1_15927994 = OpConstant %float 1.15927994
-%float_0_64349997 = OpConstant %float 0.64349997
-         %40 = OpConstantComposite %v2float %float_1_15927994 %float_0_64349997
-%float_0_00999999978 = OpConstant %float 0.00999999978
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %50 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %51 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %52 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %19
-          %d = OpVariable %_ptr_Function_float Function %22
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %27 = OpLoad %int %26
-         %35 = OpCompositeConstruct %v2int %27 %int_3
-         %30 = OpExtInst %v2float %29 Ldexp %32 %35
-         %28 = OpExtInst %v2float %29 Acos %30
-               OpStore %v %28
-         %36 = OpLoad %v2float %v
-         %37 = OpExtInst %float %29 Distance %36 %40
-               OpStore %d %37
-         %41 = OpLoad %float %d
-         %43 = OpFOrdLessThan %bool %41 %float_0_00999999978
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpStore %x_GLF_color %50
-               OpBranch %45
-         %47 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %45
-         %45 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %52
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-         %57 = OpLoad %v4float %x_GLF_color
-         %58 = OpCompositeConstruct %main_out %57
-               OpReturnValue %58
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %60 = OpLabel
-         %61 = OpFunctionCall %main_out %main_inner
-         %62 = OpCompositeExtract %v4float %61 0
-               OpStore %x_GLF_color_1_1 %62
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index eb29614..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-acos-ldexp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-[[block]]
-struct buf0 {
-  two : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec2<f32>;
-  var d : f32;
-  let x_35 : i32 = x_6.two;
-  v = acos(ldexp(vec2<f32>(0.100000001, 0.100000001), vec2<i32>(x_35, 3)));
-  let x_39 : vec2<f32> = v;
-  d = distance(x_39, vec2<f32>(1.159279943, 0.64349997));
-  let x_41 : f32 = d;
-  if ((x_41 < 0.01)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index c4f79bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[10];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float nan = 0.0f;
-  float4 undefined = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_83 = false;
-  bool x_84_phi = false;
-  nan = asfloat(-1);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_43 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const int x_46 = asint(x_7[1].x);
-  const int x_49 = asint(x_7[2].x);
-  const int x_52 = asint(x_7[3].x);
-  const int x_56 = asint(x_7[4].x);
-  const int x_59 = asint(x_7[5].x);
-  const int x_62 = asint(x_7[6].x);
-  const int x_65 = asint(x_7[7].x);
-  const float x_68 = nan;
-  undefined = lerp(float4(float(x_43), float(x_46), float(x_49), float(x_52)), float4(float(x_56), float(x_59), float(x_62), float(x_65)), float4(x_68, x_68, x_68, x_68));
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_72 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_74 = asint(x_7[9].x);
-  const bool x_75 = (x_72 == x_74);
-  x_84_phi = x_75;
-  if (!(x_75)) {
-    const float x_80 = undefined.x;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_82 = asfloat(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_83 = (x_80 > x_82);
-    x_84_phi = x_83;
-  }
-  if (x_84_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_89 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_92 = asint(x_7[8].x);
-    const int x_95 = asint(x_7[8].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_98 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_89), float(x_92), float(x_95), float(x_98));
-  } else {
-    const int x_102 = asint(x_7[8].x);
-    const float x_103 = float(x_102);
-    x_GLF_color = float4(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.msl
deleted file mode 100644
index b2f2542..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[10];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float nan = 0.0f;
-  float4 undefined = 0.0f;
-  bool x_83 = false;
-  bool x_84_phi = false;
-  nan = as_type<float>(-1);
-  int const x_43 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_46 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_49 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  int const x_52 = x_7.x_GLF_uniform_int_values.arr[3].el;
-  int const x_56 = x_7.x_GLF_uniform_int_values.arr[4].el;
-  int const x_59 = x_7.x_GLF_uniform_int_values.arr[5].el;
-  int const x_62 = x_7.x_GLF_uniform_int_values.arr[6].el;
-  int const x_65 = x_7.x_GLF_uniform_int_values.arr[7].el;
-  float const x_68 = nan;
-  undefined = mix(float4(float(x_43), float(x_46), float(x_49), float(x_52)), float4(float(x_56), float(x_59), float(x_62), float(x_65)), float4(x_68, x_68, x_68, x_68));
-  int const x_72 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_74 = x_7.x_GLF_uniform_int_values.arr[9].el;
-  bool const x_75 = (x_72 == x_74);
-  x_84_phi = x_75;
-  if (!(x_75)) {
-    float const x_80 = undefined.x;
-    float const x_82 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    x_83 = (x_80 > x_82);
-    x_84_phi = x_83;
-  }
-  bool const x_84 = x_84_phi;
-  if (x_84) {
-    int const x_89 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_92 = x_7.x_GLF_uniform_int_values.arr[8].el;
-    int const x_95 = x_7.x_GLF_uniform_int_values.arr[8].el;
-    int const x_98 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_89), float(x_92), float(x_95), float(x_98));
-  } else {
-    int const x_102 = x_7.x_GLF_uniform_int_values.arr[8].el;
-    float const x_103 = float(x_102);
-    *(tint_symbol_3) = float4(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_7, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 637b8df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,185 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 125
-; Schema: 0
-               OpCapability Shader
-         %64 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %nan "nan"
-               OpName %undefined "undefined"
-               OpName %x_83 "x_83"
-               OpName %x_84_phi "x_84_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-       %buf1 = OpTypeStruct %_arr_int_uint_10
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-     %int_n1 = OpConstant %int -1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_9 = OpConstant %int 9
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float
-        %114 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-        %nan = OpVariable %_ptr_Function_float Function %26
-  %undefined = OpVariable %_ptr_Function_v4float Function %5
-       %x_83 = OpVariable %_ptr_Function_bool Function %32
-   %x_84_phi = OpVariable %_ptr_Function_bool Function %32
-         %34 = OpBitcast %float %int_n1
-               OpStore %nan %34
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %48 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_3
-         %49 = OpLoad %int %48
-         %51 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_4
-         %52 = OpLoad %int %51
-         %54 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_5
-         %55 = OpLoad %int %54
-         %57 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_6
-         %58 = OpLoad %int %57
-         %60 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_7
-         %61 = OpLoad %int %60
-         %62 = OpLoad %float %nan
-         %65 = OpConvertSToF %float %40
-         %66 = OpConvertSToF %float %43
-         %67 = OpConvertSToF %float %46
-         %68 = OpConvertSToF %float %49
-         %69 = OpCompositeConstruct %v4float %65 %66 %67 %68
-         %70 = OpConvertSToF %float %52
-         %71 = OpConvertSToF %float %55
-         %72 = OpConvertSToF %float %58
-         %73 = OpConvertSToF %float %61
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-         %75 = OpCompositeConstruct %v4float %62 %62 %62 %62
-         %63 = OpExtInst %v4float %64 FMix %69 %74 %75
-               OpStore %undefined %63
-         %76 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %79 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_9
-         %80 = OpLoad %int %79
-         %81 = OpIEqual %bool %77 %80
-               OpStore %x_84_phi %81
-         %82 = OpLogicalNot %bool %81
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-         %85 = OpAccessChain %_ptr_Function_float %undefined %uint_0
-         %86 = OpLoad %float %85
-         %88 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %89 = OpLoad %float %88
-         %90 = OpFOrdGreaterThan %bool %86 %89
-               OpStore %x_83 %90
-         %91 = OpLoad %bool %x_83
-               OpStore %x_84_phi %91
-               OpBranch %83
-         %83 = OpLabel
-         %92 = OpLoad %bool %x_84_phi
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-         %96 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %97 = OpLoad %int %96
-         %99 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_8
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_8
-        %102 = OpLoad %int %101
-        %103 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-        %104 = OpLoad %int %103
-        %105 = OpConvertSToF %float %97
-        %106 = OpConvertSToF %float %100
-        %107 = OpConvertSToF %float %102
-        %108 = OpConvertSToF %float %104
-        %109 = OpCompositeConstruct %v4float %105 %106 %107 %108
-               OpStore %x_GLF_color %109
-               OpBranch %93
-         %95 = OpLabel
-        %110 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_8
-        %111 = OpLoad %int %110
-        %112 = OpConvertSToF %float %111
-        %113 = OpCompositeConstruct %v4float %112 %112 %112 %112
-               OpStore %x_GLF_color %113
-               OpBranch %93
-         %93 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %114
-        %117 = OpLabel
-        %118 = OpFunctionCall %void %main_1
-        %119 = OpLoad %v4float %x_GLF_color
-        %120 = OpCompositeConstruct %main_out %119
-               OpReturnValue %120
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %122 = OpLabel
-        %123 = OpFunctionCall %main_out %main_inner
-        %124 = OpCompositeExtract %v4float %123 0
-               OpStore %x_GLF_color_1_1 %124
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a59f8d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 10>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var nan : f32;
-  var undefined : vec4<f32>;
-  var x_83 : bool;
-  var x_84_phi : bool;
-  nan = bitcast<f32>(-1);
-  let x_43 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_46 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
-  let x_52 : i32 = x_7.x_GLF_uniform_int_values[3];
-  let x_56 : i32 = x_7.x_GLF_uniform_int_values[4];
-  let x_59 : i32 = x_7.x_GLF_uniform_int_values[5];
-  let x_62 : i32 = x_7.x_GLF_uniform_int_values[6];
-  let x_65 : i32 = x_7.x_GLF_uniform_int_values[7];
-  let x_68 : f32 = nan;
-  undefined = mix(vec4<f32>(f32(x_43), f32(x_46), f32(x_49), f32(x_52)), vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65)), vec4<f32>(x_68, x_68, x_68, x_68));
-  let x_72 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_74 : i32 = x_7.x_GLF_uniform_int_values[9];
-  let x_75 : bool = (x_72 == x_74);
-  x_84_phi = x_75;
-  if (!(x_75)) {
-    let x_80 : f32 = undefined.x;
-    let x_82 : f32 = x_9.x_GLF_uniform_float_values[0];
-    x_83 = (x_80 > x_82);
-    x_84_phi = x_83;
-  }
-  let x_84 : bool = x_84_phi;
-  if (x_84) {
-    let x_89 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_92 : i32 = x_7.x_GLF_uniform_int_values[8];
-    let x_95 : i32 = x_7.x_GLF_uniform_int_values[8];
-    let x_98 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_89), f32(x_92), f32(x_95), f32(x_98));
-  } else {
-    let x_102 : i32 = x_7.x_GLF_uniform_int_values[8];
-    let x_103 : f32 = f32(x_102);
-    x_GLF_color = vec4<f32>(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c4f79bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[10];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float nan = 0.0f;
-  float4 undefined = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_83 = false;
-  bool x_84_phi = false;
-  nan = asfloat(-1);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_43 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const int x_46 = asint(x_7[1].x);
-  const int x_49 = asint(x_7[2].x);
-  const int x_52 = asint(x_7[3].x);
-  const int x_56 = asint(x_7[4].x);
-  const int x_59 = asint(x_7[5].x);
-  const int x_62 = asint(x_7[6].x);
-  const int x_65 = asint(x_7[7].x);
-  const float x_68 = nan;
-  undefined = lerp(float4(float(x_43), float(x_46), float(x_49), float(x_52)), float4(float(x_56), float(x_59), float(x_62), float(x_65)), float4(x_68, x_68, x_68, x_68));
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_72 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_74 = asint(x_7[9].x);
-  const bool x_75 = (x_72 == x_74);
-  x_84_phi = x_75;
-  if (!(x_75)) {
-    const float x_80 = undefined.x;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_82 = asfloat(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_83 = (x_80 > x_82);
-    x_84_phi = x_83;
-  }
-  if (x_84_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_89 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_92 = asint(x_7[8].x);
-    const int x_95 = asint(x_7[8].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_98 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_89), float(x_92), float(x_95), float(x_98));
-  } else {
-    const int x_102 = asint(x_7[8].x);
-    const float x_103 = float(x_102);
-    x_GLF_color = float4(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.msl
deleted file mode 100644
index b2f2542..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[10];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float nan = 0.0f;
-  float4 undefined = 0.0f;
-  bool x_83 = false;
-  bool x_84_phi = false;
-  nan = as_type<float>(-1);
-  int const x_43 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_46 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_49 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  int const x_52 = x_7.x_GLF_uniform_int_values.arr[3].el;
-  int const x_56 = x_7.x_GLF_uniform_int_values.arr[4].el;
-  int const x_59 = x_7.x_GLF_uniform_int_values.arr[5].el;
-  int const x_62 = x_7.x_GLF_uniform_int_values.arr[6].el;
-  int const x_65 = x_7.x_GLF_uniform_int_values.arr[7].el;
-  float const x_68 = nan;
-  undefined = mix(float4(float(x_43), float(x_46), float(x_49), float(x_52)), float4(float(x_56), float(x_59), float(x_62), float(x_65)), float4(x_68, x_68, x_68, x_68));
-  int const x_72 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_74 = x_7.x_GLF_uniform_int_values.arr[9].el;
-  bool const x_75 = (x_72 == x_74);
-  x_84_phi = x_75;
-  if (!(x_75)) {
-    float const x_80 = undefined.x;
-    float const x_82 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    x_83 = (x_80 > x_82);
-    x_84_phi = x_83;
-  }
-  bool const x_84 = x_84_phi;
-  if (x_84) {
-    int const x_89 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_92 = x_7.x_GLF_uniform_int_values.arr[8].el;
-    int const x_95 = x_7.x_GLF_uniform_int_values.arr[8].el;
-    int const x_98 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_89), float(x_92), float(x_95), float(x_98));
-  } else {
-    int const x_102 = x_7.x_GLF_uniform_int_values.arr[8].el;
-    float const x_103 = float(x_102);
-    *(tint_symbol_3) = float4(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_7, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 637b8df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,185 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 125
-; Schema: 0
-               OpCapability Shader
-         %64 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %nan "nan"
-               OpName %undefined "undefined"
-               OpName %x_83 "x_83"
-               OpName %x_84_phi "x_84_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-       %buf1 = OpTypeStruct %_arr_int_uint_10
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-     %int_n1 = OpConstant %int -1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_9 = OpConstant %int 9
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float
-        %114 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-        %nan = OpVariable %_ptr_Function_float Function %26
-  %undefined = OpVariable %_ptr_Function_v4float Function %5
-       %x_83 = OpVariable %_ptr_Function_bool Function %32
-   %x_84_phi = OpVariable %_ptr_Function_bool Function %32
-         %34 = OpBitcast %float %int_n1
-               OpStore %nan %34
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %48 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_3
-         %49 = OpLoad %int %48
-         %51 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_4
-         %52 = OpLoad %int %51
-         %54 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_5
-         %55 = OpLoad %int %54
-         %57 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_6
-         %58 = OpLoad %int %57
-         %60 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_7
-         %61 = OpLoad %int %60
-         %62 = OpLoad %float %nan
-         %65 = OpConvertSToF %float %40
-         %66 = OpConvertSToF %float %43
-         %67 = OpConvertSToF %float %46
-         %68 = OpConvertSToF %float %49
-         %69 = OpCompositeConstruct %v4float %65 %66 %67 %68
-         %70 = OpConvertSToF %float %52
-         %71 = OpConvertSToF %float %55
-         %72 = OpConvertSToF %float %58
-         %73 = OpConvertSToF %float %61
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-         %75 = OpCompositeConstruct %v4float %62 %62 %62 %62
-         %63 = OpExtInst %v4float %64 FMix %69 %74 %75
-               OpStore %undefined %63
-         %76 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %79 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_9
-         %80 = OpLoad %int %79
-         %81 = OpIEqual %bool %77 %80
-               OpStore %x_84_phi %81
-         %82 = OpLogicalNot %bool %81
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-         %85 = OpAccessChain %_ptr_Function_float %undefined %uint_0
-         %86 = OpLoad %float %85
-         %88 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %89 = OpLoad %float %88
-         %90 = OpFOrdGreaterThan %bool %86 %89
-               OpStore %x_83 %90
-         %91 = OpLoad %bool %x_83
-               OpStore %x_84_phi %91
-               OpBranch %83
-         %83 = OpLabel
-         %92 = OpLoad %bool %x_84_phi
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-         %96 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %97 = OpLoad %int %96
-         %99 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_8
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_8
-        %102 = OpLoad %int %101
-        %103 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-        %104 = OpLoad %int %103
-        %105 = OpConvertSToF %float %97
-        %106 = OpConvertSToF %float %100
-        %107 = OpConvertSToF %float %102
-        %108 = OpConvertSToF %float %104
-        %109 = OpCompositeConstruct %v4float %105 %106 %107 %108
-               OpStore %x_GLF_color %109
-               OpBranch %93
-         %95 = OpLabel
-        %110 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_8
-        %111 = OpLoad %int %110
-        %112 = OpConvertSToF %float %111
-        %113 = OpCompositeConstruct %v4float %112 %112 %112 %112
-               OpStore %x_GLF_color %113
-               OpBranch %93
-         %93 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %114
-        %117 = OpLabel
-        %118 = OpFunctionCall %void %main_1
-        %119 = OpLoad %v4float %x_GLF_color
-        %120 = OpCompositeConstruct %main_out %119
-               OpReturnValue %120
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %122 = OpLabel
-        %123 = OpFunctionCall %main_out %main_inner
-        %124 = OpCompositeExtract %v4float %123 0
-               OpStore %x_GLF_color_1_1 %124
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a59f8d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mix-nan/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 10>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var nan : f32;
-  var undefined : vec4<f32>;
-  var x_83 : bool;
-  var x_84_phi : bool;
-  nan = bitcast<f32>(-1);
-  let x_43 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_46 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
-  let x_52 : i32 = x_7.x_GLF_uniform_int_values[3];
-  let x_56 : i32 = x_7.x_GLF_uniform_int_values[4];
-  let x_59 : i32 = x_7.x_GLF_uniform_int_values[5];
-  let x_62 : i32 = x_7.x_GLF_uniform_int_values[6];
-  let x_65 : i32 = x_7.x_GLF_uniform_int_values[7];
-  let x_68 : f32 = nan;
-  undefined = mix(vec4<f32>(f32(x_43), f32(x_46), f32(x_49), f32(x_52)), vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65)), vec4<f32>(x_68, x_68, x_68, x_68));
-  let x_72 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_74 : i32 = x_7.x_GLF_uniform_int_values[9];
-  let x_75 : bool = (x_72 == x_74);
-  x_84_phi = x_75;
-  if (!(x_75)) {
-    let x_80 : f32 = undefined.x;
-    let x_82 : f32 = x_9.x_GLF_uniform_float_values[0];
-    x_83 = (x_80 > x_82);
-    x_84_phi = x_83;
-  }
-  let x_84 : bool = x_84_phi;
-  if (x_84) {
-    let x_89 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_92 : i32 = x_7.x_GLF_uniform_int_values[8];
-    let x_95 : i32 = x_7.x_GLF_uniform_int_values[8];
-    let x_98 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_89), f32(x_92), f32(x_95), f32(x_98));
-  } else {
-    let x_102 : i32 = x_7.x_GLF_uniform_int_values[8];
-    let x_103 : f32 = f32(x_102);
-    x_GLF_color = vec4<f32>(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index fa6f99a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float undefined = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  undefined = (5.0f - (0.0f * floor((5.0f / 0.0f))));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_11 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_12 = asint(x_6[1].x);
-  const bool x_44 = (x_10 == (x_11 + x_12));
-  x_52_phi = x_44;
-  if (!(x_44)) {
-    const float x_48 = undefined;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_50 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_51 = (x_48 > x_50);
-    x_52_phi = x_51;
-  }
-  if (x_52_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_15 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_16 = asint(x_6[1].x);
-    const int x_17 = asint(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_18 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_15), float(x_16), float(x_17), float(x_18));
-  } else {
-    const int x_19 = asint(x_6[1].x);
-    const float x_66 = float(x_19);
-    x_GLF_color = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.msl
deleted file mode 100755
index 02b9fec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float undefined = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  undefined = (5.0f - (0.0f * floor((5.0f / 0.0f))));
-  int const x_10 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_11 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_12 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  bool const x_44 = (x_10 == as_type<int>((as_type<uint>(x_11) + as_type<uint>(x_12))));
-  x_52_phi = x_44;
-  if (!(x_44)) {
-    float const x_48 = undefined;
-    float const x_50 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    x_51 = (x_48 > x_50);
-    x_52_phi = x_51;
-  }
-  bool const x_52 = x_52_phi;
-  if (x_52) {
-    int const x_15 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_16 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_17 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_18 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_15), float(x_16), float(x_17), float(x_18));
-  } else {
-    int const x_19 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_66 = float(x_19);
-    *(tint_symbol_3) = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 90ce459..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,150 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 92
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %undefined "undefined"
-               OpName %x_51 "x_51"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-    %float_5 = OpConstant %float 5
-    %float_0 = OpConstant %float 0
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %81 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-  %undefined = OpVariable %_ptr_Function_float Function %26
-       %x_51 = OpVariable %_ptr_Function_bool Function %30
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %30
-         %36 = OpFDiv %float %float_5 %float_0
-         %34 = OpExtInst %float %35 Floor %36
-         %37 = OpFMul %float %float_0 %34
-         %38 = OpFSub %float %float_5 %37
-               OpStore %undefined %38
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %48 = OpLoad %int %47
-         %49 = OpIAdd %int %45 %48
-         %50 = OpIEqual %bool %43 %49
-               OpStore %x_52_phi %50
-         %51 = OpLogicalNot %bool %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-         %54 = OpLoad %float %undefined
-         %56 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %57 = OpLoad %float %56
-         %58 = OpFOrdGreaterThan %bool %54 %57
-               OpStore %x_51 %58
-         %59 = OpLoad %bool %x_51
-               OpStore %x_52_phi %59
-               OpBranch %52
-         %52 = OpLabel
-         %60 = OpLoad %bool %x_52_phi
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpConvertSToF %float %65
-         %73 = OpConvertSToF %float %67
-         %74 = OpConvertSToF %float %69
-         %75 = OpConvertSToF %float %71
-         %76 = OpCompositeConstruct %v4float %72 %73 %74 %75
-               OpStore %x_GLF_color %76
-               OpBranch %61
-         %63 = OpLabel
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %78 = OpLoad %int %77
-         %79 = OpConvertSToF %float %78
-         %80 = OpCompositeConstruct %v4float %79 %79 %79 %79
-               OpStore %x_GLF_color %80
-               OpBranch %61
-         %61 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %81
-         %84 = OpLabel
-         %85 = OpFunctionCall %void %main_1
-         %86 = OpLoad %v4float %x_GLF_color
-         %87 = OpCompositeConstruct %main_out %86
-               OpReturnValue %87
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %89 = OpLabel
-         %90 = OpFunctionCall %main_out %main_inner
-         %91 = OpCompositeExtract %v4float %90 0
-               OpStore %x_GLF_color_1_1 %91
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 43a60a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,61 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var undefined : f32;
-  var x_51 : bool;
-  var x_52_phi : bool;
-  undefined = (5.0 - (0.0 * floor((5.0 / 0.0))));
-  let x_10 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_11 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_12 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_44 : bool = (x_10 == (x_11 + x_12));
-  x_52_phi = x_44;
-  if (!(x_44)) {
-    let x_48 : f32 = undefined;
-    let x_50 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_51 = (x_48 > x_50);
-    x_52_phi = x_51;
-  }
-  let x_52 : bool = x_52_phi;
-  if (x_52) {
-    let x_15 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_16 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_17 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_18 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_15), f32(x_16), f32(x_17), f32(x_18));
-  } else {
-    let x_19 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_66 : f32 = f32(x_19);
-    x_GLF_color = vec4<f32>(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c21b5ad..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float undefined = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  undefined = (5.0f % 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_11 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_12 = asint(x_6[1].x);
-  const bool x_44 = (x_10 == (x_11 + x_12));
-  x_52_phi = x_44;
-  if (!(x_44)) {
-    const float x_48 = undefined;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_50 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_51 = (x_48 > x_50);
-    x_52_phi = x_51;
-  }
-  if (x_52_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_15 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_16 = asint(x_6[1].x);
-    const int x_17 = asint(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_18 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_15), float(x_16), float(x_17), float(x_18));
-  } else {
-    const int x_19 = asint(x_6[1].x);
-    const float x_66 = float(x_19);
-    x_GLF_color = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.msl
deleted file mode 100755
index b8e6b45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float undefined = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  undefined = fmod(5.0f, 0.0f);
-  int const x_10 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_11 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_12 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  bool const x_44 = (x_10 == as_type<int>((as_type<uint>(x_11) + as_type<uint>(x_12))));
-  x_52_phi = x_44;
-  if (!(x_44)) {
-    float const x_48 = undefined;
-    float const x_50 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    x_51 = (x_48 > x_50);
-    x_52_phi = x_51;
-  }
-  bool const x_52 = x_52_phi;
-  if (x_52) {
-    int const x_15 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_16 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_17 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_18 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_15), float(x_16), float(x_17), float(x_18));
-  } else {
-    int const x_19 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_66 = float(x_19);
-    *(tint_symbol_3) = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b89cc7a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,146 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %undefined "undefined"
-               OpName %x_51 "x_51"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-    %float_5 = OpConstant %float 5
-    %float_0 = OpConstant %float 0
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-  %undefined = OpVariable %_ptr_Function_float Function %26
-       %x_51 = OpVariable %_ptr_Function_bool Function %30
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %30
-         %34 = OpFRem %float %float_5 %float_0
-               OpStore %undefined %34
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpIAdd %int %41 %44
-         %46 = OpIEqual %bool %39 %45
-               OpStore %x_52_phi %46
-         %47 = OpLogicalNot %bool %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-         %50 = OpLoad %float %undefined
-         %52 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %53 = OpLoad %float %52
-         %54 = OpFOrdGreaterThan %bool %50 %53
-               OpStore %x_51 %54
-         %55 = OpLoad %bool %x_51
-               OpStore %x_52_phi %55
-               OpBranch %48
-         %48 = OpLabel
-         %56 = OpLoad %bool %x_52_phi
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpBranch %57
-         %59 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ee6f6f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-mod-zero/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,61 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var undefined : f32;
-  var x_51 : bool;
-  var x_52_phi : bool;
-  undefined = (5.0 % 0.0);
-  let x_10 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_11 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_12 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_44 : bool = (x_10 == (x_11 + x_12));
-  x_52_phi = x_44;
-  if (!(x_44)) {
-    let x_48 : f32 = undefined;
-    let x_50 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_51 = (x_48 > x_50);
-    x_52_phi = x_51;
-  }
-  let x_52 : bool = x_52_phi;
-  if (x_52) {
-    let x_15 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_16 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_17 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_18 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_15), f32(x_16), f32(x_17), f32(x_18));
-  } else {
-    let x_19 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_66 : f32 = f32(x_19);
-    x_GLF_color = vec4<f32>(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f08846b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-
-void main_1() {
-  float f0 = 0.0f;
-  float s1 = 0.0f;
-  float f1 = 0.0f;
-  bool x_72 = false;
-  bool x_73_phi = false;
-  f0 = (10.0f - (0.000001f * floor((10.0f / 0.000001f))));
-  s1 = 9.99999935e-39f;
-  if ((s1 == 0.0f)) {
-    s1 = 1.0f;
-  }
-  bool x_62 = false;
-  bool x_71 = false;
-  bool x_63_phi = false;
-  bool x_72_phi = false;
-  const float x_42 = s1;
-  f1 = (10.0f - (x_42 * floor((10.0f / x_42))));
-  const bool x_48 = (isinf(f1) | (s1 == 1.0f));
-  x_73_phi = x_48;
-  if (!(x_48)) {
-    const bool x_54 = (f0 == f1);
-    x_63_phi = x_54;
-    if (!(x_54)) {
-      x_62 = ((f0 > 0.99000001f) & (f0 < 0.01f));
-      x_63_phi = x_62;
-    }
-    const bool x_63 = x_63_phi;
-    x_72_phi = x_63;
-    if (!(x_63)) {
-      x_71 = ((f1 > 0.99000001f) & (f1 < 0.01f));
-      x_72_phi = x_71;
-    }
-    x_72 = x_72_phi;
-    x_73_phi = x_72;
-  }
-  if ((x_73_phi | (f1 == 10.0f))) {
-    const int x_81 = asint(x_8[1].x);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_84 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_87 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_90 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_81), float(x_84), float(x_87), float(x_90));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_94 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_95 = float(x_94);
-    x_GLF_color = float4(x_95, x_95, x_95, x_95);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.msl
deleted file mode 100755
index 5ef03b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float f0 = 0.0f;
-  float s1 = 0.0f;
-  float f1 = 0.0f;
-  bool x_72 = false;
-  bool x_73_phi = false;
-  f0 = (10.0f - (0.000001f * floor((10.0f / 0.000001f))));
-  s1 = 9.99999935e-39f;
-  float const x_38 = s1;
-  if ((x_38 == 0.0f)) {
-    s1 = 1.0f;
-  }
-  bool x_62 = false;
-  bool x_71 = false;
-  bool x_63_phi = false;
-  bool x_72_phi = false;
-  float const x_42 = s1;
-  f1 = (10.0f - (x_42 * floor((10.0f / x_42))));
-  float const x_44 = f1;
-  float const x_46 = s1;
-  bool const x_48 = (isinf(x_44) | (x_46 == 1.0f));
-  x_73_phi = x_48;
-  if (!(x_48)) {
-    float const x_52 = f0;
-    float const x_53 = f1;
-    bool const x_54 = (x_52 == x_53);
-    x_63_phi = x_54;
-    if (!(x_54)) {
-      float const x_58 = f0;
-      float const x_60 = f0;
-      x_62 = ((x_58 > 0.99000001f) & (x_60 < 0.01f));
-      x_63_phi = x_62;
-    }
-    bool const x_63 = x_63_phi;
-    x_72_phi = x_63;
-    if (!(x_63)) {
-      float const x_67 = f1;
-      float const x_69 = f1;
-      x_71 = ((x_67 > 0.99000001f) & (x_69 < 0.01f));
-      x_72_phi = x_71;
-    }
-    x_72 = x_72_phi;
-    x_73_phi = x_72;
-  }
-  bool const x_73 = x_73_phi;
-  float const x_74 = f1;
-  if ((x_73 | (x_74 == 10.0f))) {
-    int const x_81 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_84 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_87 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_90 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_81), float(x_84), float(x_87), float(x_90));
-  } else {
-    int const x_94 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_95 = float(x_94);
-    *(tint_symbol_3) = float4(x_95, x_95, x_95, x_95);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 154c791..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,212 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-         %37 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %f0 "f0"
-               OpName %s1 "s1"
-               OpName %f1 "f1"
-               OpName %x_72 "x_72"
-               OpName %x_73_phi "x_73_phi"
-               OpName %x_62 "x_62"
-               OpName %x_71 "x_71"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_72_phi "x_72_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-   %float_10 = OpConstant %float 10
-%float_9_99999997en07 = OpConstant %float 9.99999997e-07
-%float_0x1_b38fb8pn127 = OpConstant %float 0x1.b38fb8p-127
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-%float_0_99000001 = OpConstant %float 0.99000001
-%float_0_00999999978 = OpConstant %float 0.00999999978
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %f0 = OpVariable %_ptr_Function_float Function %26
-         %s1 = OpVariable %_ptr_Function_float Function %26
-         %f1 = OpVariable %_ptr_Function_float Function %26
-       %x_72 = OpVariable %_ptr_Function_bool Function %32
-   %x_73_phi = OpVariable %_ptr_Function_bool Function %32
-       %x_62 = OpVariable %_ptr_Function_bool Function %32
-       %x_71 = OpVariable %_ptr_Function_bool Function %32
-   %x_63_phi = OpVariable %_ptr_Function_bool Function %32
-   %x_72_phi = OpVariable %_ptr_Function_bool Function %32
-         %38 = OpFDiv %float %float_10 %float_9_99999997en07
-         %36 = OpExtInst %float %37 Floor %38
-         %39 = OpFMul %float %float_9_99999997en07 %36
-         %40 = OpFSub %float %float_10 %39
-               OpStore %f0 %40
-               OpStore %s1 %float_0x1_b38fb8pn127
-         %42 = OpLoad %float %s1
-         %44 = OpFOrdEqual %bool %42 %float_0
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-               OpStore %s1 %float_1
-               OpBranch %45
-         %45 = OpLabel
-         %52 = OpLoad %float %s1
-         %54 = OpFDiv %float %float_10 %52
-         %53 = OpExtInst %float %37 Floor %54
-         %55 = OpFMul %float %52 %53
-         %56 = OpFSub %float %float_10 %55
-               OpStore %f1 %56
-         %57 = OpLoad %float %f1
-         %58 = OpLoad %float %s1
-         %59 = OpIsInf %bool %57
-         %60 = OpFOrdEqual %bool %58 %float_1
-         %61 = OpLogicalOr %bool %59 %60
-               OpStore %x_73_phi %61
-         %62 = OpLogicalNot %bool %61
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %63
-         %64 = OpLabel
-         %65 = OpLoad %float %f0
-         %66 = OpLoad %float %f1
-         %67 = OpFOrdEqual %bool %65 %66
-               OpStore %x_63_phi %67
-         %68 = OpLogicalNot %bool %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpLoad %float %f0
-         %72 = OpLoad %float %f0
-         %74 = OpFOrdGreaterThan %bool %71 %float_0_99000001
-         %76 = OpFOrdLessThan %bool %72 %float_0_00999999978
-         %77 = OpLogicalAnd %bool %74 %76
-               OpStore %x_62 %77
-         %78 = OpLoad %bool %x_62
-               OpStore %x_63_phi %78
-               OpBranch %69
-         %69 = OpLabel
-         %79 = OpLoad %bool %x_63_phi
-               OpStore %x_72_phi %79
-         %80 = OpLogicalNot %bool %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %81
-         %82 = OpLabel
-         %83 = OpLoad %float %f1
-         %84 = OpLoad %float %f1
-         %85 = OpFOrdGreaterThan %bool %83 %float_0_99000001
-         %86 = OpFOrdLessThan %bool %84 %float_0_00999999978
-         %87 = OpLogicalAnd %bool %85 %86
-               OpStore %x_71 %87
-         %88 = OpLoad %bool %x_71
-               OpStore %x_72_phi %88
-               OpBranch %81
-         %81 = OpLabel
-         %89 = OpLoad %bool %x_72_phi
-               OpStore %x_72 %89
-         %90 = OpLoad %bool %x_72
-               OpStore %x_73_phi %90
-               OpBranch %63
-         %63 = OpLabel
-         %91 = OpLoad %bool %x_73_phi
-         %92 = OpLoad %float %f1
-         %93 = OpFOrdEqual %bool %92 %float_10
-         %94 = OpLogicalOr %bool %91 %93
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %97
-         %96 = OpLabel
-        %101 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %104 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %102
-        %111 = OpConvertSToF %float %105
-        %112 = OpConvertSToF %float %107
-        %113 = OpConvertSToF %float %109
-        %114 = OpCompositeConstruct %v4float %110 %111 %112 %113
-               OpStore %x_GLF_color %114
-               OpBranch %95
-         %97 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpCompositeConstruct %v4float %117 %117 %117 %117
-               OpStore %x_GLF_color %118
-               OpBranch %95
-         %95 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6c98a92..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,90 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn main_1() {
-  var f0 : f32;
-  var s1 : f32;
-  var f1 : f32;
-  var x_72 : bool;
-  var x_73_phi : bool;
-  f0 = (10.0 - (0.000001 * floor((10.0 / 0.000001))));
-  s1 = 0x1.b38fb8p-127;
-  let x_38 : f32 = s1;
-  if ((x_38 == 0.0)) {
-    s1 = 1.0;
-  }
-  var x_62 : bool;
-  var x_71 : bool;
-  var x_63_phi : bool;
-  var x_72_phi : bool;
-  let x_42 : f32 = s1;
-  f1 = (10.0 - (x_42 * floor((10.0 / x_42))));
-  let x_44 : f32 = f1;
-  let x_46 : f32 = s1;
-  let x_48 : bool = (isInf(x_44) | (x_46 == 1.0));
-  x_73_phi = x_48;
-  if (!(x_48)) {
-    let x_52 : f32 = f0;
-    let x_53 : f32 = f1;
-    let x_54 : bool = (x_52 == x_53);
-    x_63_phi = x_54;
-    if (!(x_54)) {
-      let x_58 : f32 = f0;
-      let x_60 : f32 = f0;
-      x_62 = ((x_58 > 0.99000001) & (x_60 < 0.01));
-      x_63_phi = x_62;
-    }
-    let x_63 : bool = x_63_phi;
-    x_72_phi = x_63;
-    if (!(x_63)) {
-      let x_67 : f32 = f1;
-      let x_69 : f32 = f1;
-      x_71 = ((x_67 > 0.99000001) & (x_69 < 0.01));
-      x_72_phi = x_71;
-    }
-    x_72 = x_72_phi;
-    x_73_phi = x_72;
-  }
-  let x_73 : bool = x_73_phi;
-  let x_74 : f32 = f1;
-  if ((x_73 | (x_74 == 10.0))) {
-    let x_81 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_84 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_87 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_90 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_81), f32(x_84), f32(x_87), f32(x_90));
-  } else {
-    let x_94 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_95 : f32 = f32(x_94);
-    x_GLF_color = vec4<f32>(x_95, x_95, x_95, x_95);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e84ccc9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,94 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-
-void main_1() {
-  float f0 = 0.0f;
-  float s1 = 0.0f;
-  float f1 = 0.0f;
-  bool x_72 = false;
-  bool x_73_phi = false;
-  f0 = (10.0f % 0.000001f);
-  s1 = 9.99999935e-39f;
-  if ((s1 == 0.0f)) {
-    s1 = 1.0f;
-  }
-  bool x_62 = false;
-  bool x_71 = false;
-  bool x_63_phi = false;
-  bool x_72_phi = false;
-  f1 = (10.0f % s1);
-  bool tint_tmp = isinf(f1);
-  if (!tint_tmp) {
-    tint_tmp = (s1 == 1.0f);
-  }
-  const bool x_48 = (tint_tmp);
-  x_73_phi = x_48;
-  if (!(x_48)) {
-    const bool x_54 = (f0 == f1);
-    x_63_phi = x_54;
-    if (!(x_54)) {
-      bool tint_tmp_1 = (f0 > 0.99000001f);
-      if (tint_tmp_1) {
-        tint_tmp_1 = (f0 < 0.01f);
-      }
-      x_62 = (tint_tmp_1);
-      x_63_phi = x_62;
-    }
-    const bool x_63 = x_63_phi;
-    x_72_phi = x_63;
-    if (!(x_63)) {
-      bool tint_tmp_2 = (f1 > 0.99000001f);
-      if (tint_tmp_2) {
-        tint_tmp_2 = (f1 < 0.01f);
-      }
-      x_71 = (tint_tmp_2);
-      x_72_phi = x_71;
-    }
-    x_72 = x_72_phi;
-    x_73_phi = x_72;
-  }
-  bool tint_tmp_3 = x_73_phi;
-  if (!tint_tmp_3) {
-    tint_tmp_3 = (f1 == 10.0f);
-  }
-  if ((tint_tmp_3)) {
-    const int x_81 = asint(x_8[1].x);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_84 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_87 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_90 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_81), float(x_84), float(x_87), float(x_90));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_94 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_95 = float(x_94);
-    x_GLF_color = float4(x_95, x_95, x_95, x_95);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.msl
deleted file mode 100644
index 8f8e26d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float f0 = 0.0f;
-  float s1 = 0.0f;
-  float f1 = 0.0f;
-  bool x_72 = false;
-  bool x_73_phi = false;
-  f0 = fmod(10.0f, 0.000001f);
-  s1 = 9.99999935e-39f;
-  float const x_38 = s1;
-  if ((x_38 == 0.0f)) {
-    s1 = 1.0f;
-  }
-  bool x_62 = false;
-  bool x_71 = false;
-  bool x_63_phi = false;
-  bool x_72_phi = false;
-  float const x_42 = s1;
-  f1 = fmod(10.0f, x_42);
-  float const x_44 = f1;
-  float const x_46 = s1;
-  bool const x_48 = (isinf(x_44) || (x_46 == 1.0f));
-  x_73_phi = x_48;
-  if (!(x_48)) {
-    float const x_52 = f0;
-    float const x_53 = f1;
-    bool const x_54 = (x_52 == x_53);
-    x_63_phi = x_54;
-    if (!(x_54)) {
-      float const x_58 = f0;
-      float const x_60 = f0;
-      x_62 = ((x_58 > 0.99000001f) && (x_60 < 0.01f));
-      x_63_phi = x_62;
-    }
-    bool const x_63 = x_63_phi;
-    x_72_phi = x_63;
-    if (!(x_63)) {
-      float const x_67 = f1;
-      float const x_69 = f1;
-      x_71 = ((x_67 > 0.99000001f) && (x_69 < 0.01f));
-      x_72_phi = x_71;
-    }
-    x_72 = x_72_phi;
-    x_73_phi = x_72;
-  }
-  bool const x_73 = x_73_phi;
-  float const x_74 = f1;
-  if ((x_73 || (x_74 == 10.0f))) {
-    int const x_81 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_84 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_87 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_90 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_81), float(x_84), float(x_87), float(x_90));
-  } else {
-    int const x_94 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_95 = float(x_94);
-    *(tint_symbol_3) = float4(x_95, x_95, x_95, x_95);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6489e94..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,225 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 131
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %f0 "f0"
-               OpName %s1 "s1"
-               OpName %f1 "f1"
-               OpName %x_72 "x_72"
-               OpName %x_73_phi "x_73_phi"
-               OpName %x_62 "x_62"
-               OpName %x_71 "x_71"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_72_phi "x_72_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-   %float_10 = OpConstant %float 10
-%float_9_99999997en07 = OpConstant %float 9.99999997e-07
-%float_0x1_b38fb8pn127 = OpConstant %float 0x1.b38fb8p-127
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-%float_0_99000001 = OpConstant %float 0.99000001
-%float_0_00999999978 = OpConstant %float 0.00999999978
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-        %120 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %f0 = OpVariable %_ptr_Function_float Function %26
-         %s1 = OpVariable %_ptr_Function_float Function %26
-         %f1 = OpVariable %_ptr_Function_float Function %26
-       %x_72 = OpVariable %_ptr_Function_bool Function %32
-   %x_73_phi = OpVariable %_ptr_Function_bool Function %32
-       %x_62 = OpVariable %_ptr_Function_bool Function %32
-       %x_71 = OpVariable %_ptr_Function_bool Function %32
-   %x_63_phi = OpVariable %_ptr_Function_bool Function %32
-   %x_72_phi = OpVariable %_ptr_Function_bool Function %32
-         %36 = OpFRem %float %float_10 %float_9_99999997en07
-               OpStore %f0 %36
-               OpStore %s1 %float_0x1_b38fb8pn127
-         %38 = OpLoad %float %s1
-         %40 = OpFOrdEqual %bool %38 %float_0
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-               OpStore %s1 %float_1
-               OpBranch %41
-         %41 = OpLabel
-         %48 = OpLoad %float %s1
-         %49 = OpFRem %float %float_10 %48
-               OpStore %f1 %49
-         %50 = OpLoad %float %f1
-         %51 = OpLoad %float %s1
-         %52 = OpIsInf %bool %50
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %53 %54
-         %54 = OpLabel
-         %55 = OpFOrdEqual %bool %51 %float_1
-               OpBranch %53
-         %53 = OpLabel
-         %56 = OpPhi %bool %52 %41 %55 %54
-               OpStore %x_73_phi %56
-         %57 = OpLogicalNot %bool %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-         %60 = OpLoad %float %f0
-         %61 = OpLoad %float %f1
-         %62 = OpFOrdEqual %bool %60 %61
-               OpStore %x_63_phi %62
-         %63 = OpLogicalNot %bool %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-         %66 = OpLoad %float %f0
-         %67 = OpLoad %float %f0
-         %69 = OpFOrdGreaterThan %bool %66 %float_0_99000001
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %73 = OpFOrdLessThan %bool %67 %float_0_00999999978
-               OpBranch %70
-         %70 = OpLabel
-         %74 = OpPhi %bool %69 %65 %73 %71
-               OpStore %x_62 %74
-         %75 = OpLoad %bool %x_62
-               OpStore %x_63_phi %75
-               OpBranch %64
-         %64 = OpLabel
-         %76 = OpLoad %bool %x_63_phi
-               OpStore %x_72_phi %76
-         %77 = OpLogicalNot %bool %76
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %78
-         %79 = OpLabel
-         %80 = OpLoad %float %f1
-         %81 = OpLoad %float %f1
-         %82 = OpFOrdGreaterThan %bool %80 %float_0_99000001
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-         %85 = OpFOrdLessThan %bool %81 %float_0_00999999978
-               OpBranch %83
-         %83 = OpLabel
-         %86 = OpPhi %bool %82 %79 %85 %84
-               OpStore %x_71 %86
-         %87 = OpLoad %bool %x_71
-               OpStore %x_72_phi %87
-               OpBranch %78
-         %78 = OpLabel
-         %88 = OpLoad %bool %x_72_phi
-               OpStore %x_72 %88
-         %89 = OpLoad %bool %x_72
-               OpStore %x_73_phi %89
-               OpBranch %58
-         %58 = OpLabel
-         %90 = OpLoad %bool %x_73_phi
-         %91 = OpLoad %float %f1
-               OpSelectionMerge %92 None
-               OpBranchConditional %90 %92 %93
-         %93 = OpLabel
-         %94 = OpFOrdEqual %bool %91 %float_10
-               OpBranch %92
-         %92 = OpLabel
-         %95 = OpPhi %bool %90 %58 %94 %93
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %98
-         %97 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %103 = OpLoad %int %102
-        %105 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %110 = OpLoad %int %109
-        %111 = OpConvertSToF %float %103
-        %112 = OpConvertSToF %float %106
-        %113 = OpConvertSToF %float %108
-        %114 = OpConvertSToF %float %110
-        %115 = OpCompositeConstruct %v4float %111 %112 %113 %114
-               OpStore %x_GLF_color %115
-               OpBranch %96
-         %98 = OpLabel
-        %116 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %117 = OpLoad %int %116
-        %118 = OpConvertSToF %float %117
-        %119 = OpCompositeConstruct %v4float %118 %118 %118 %118
-               OpStore %x_GLF_color %119
-               OpBranch %96
-         %96 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %120
-        %123 = OpLabel
-        %124 = OpFunctionCall %void %main_1
-        %125 = OpLoad %v4float %x_GLF_color
-        %126 = OpCompositeConstruct %main_out %125
-               OpReturnValue %126
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %128 = OpLabel
-        %129 = OpFunctionCall %main_out %main_inner
-        %130 = OpCompositeExtract %v4float %129 0
-               OpStore %x_GLF_color_1_1 %130
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8b2ad19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-module-small-number/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,90 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn main_1() {
-  var f0 : f32;
-  var s1 : f32;
-  var f1 : f32;
-  var x_72 : bool;
-  var x_73_phi : bool;
-  f0 = (10.0 % 0.000001);
-  s1 = 0x1.b38fb8p-127;
-  let x_38 : f32 = s1;
-  if ((x_38 == 0.0)) {
-    s1 = 1.0;
-  }
-  var x_62 : bool;
-  var x_71 : bool;
-  var x_63_phi : bool;
-  var x_72_phi : bool;
-  let x_42 : f32 = s1;
-  f1 = (10.0 % x_42);
-  let x_44 : f32 = f1;
-  let x_46 : f32 = s1;
-  let x_48 : bool = (isInf(x_44) || (x_46 == 1.0));
-  x_73_phi = x_48;
-  if (!(x_48)) {
-    let x_52 : f32 = f0;
-    let x_53 : f32 = f1;
-    let x_54 : bool = (x_52 == x_53);
-    x_63_phi = x_54;
-    if (!(x_54)) {
-      let x_58 : f32 = f0;
-      let x_60 : f32 = f0;
-      x_62 = ((x_58 > 0.99000001) && (x_60 < 0.01));
-      x_63_phi = x_62;
-    }
-    let x_63 : bool = x_63_phi;
-    x_72_phi = x_63;
-    if (!(x_63)) {
-      let x_67 : f32 = f1;
-      let x_69 : f32 = f1;
-      x_71 = ((x_67 > 0.99000001) && (x_69 < 0.01));
-      x_72_phi = x_71;
-    }
-    x_72 = x_72_phi;
-    x_73_phi = x_72;
-  }
-  let x_73 : bool = x_73_phi;
-  let x_74 : f32 = f1;
-  if ((x_73 || (x_74 == 10.0))) {
-    let x_81 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_84 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_87 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_90 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_81), f32(x_84), f32(x_87), f32(x_90));
-  } else {
-    let x_94 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_95 : f32 = f32(x_94);
-    x_GLF_color = vec4<f32>(x_95, x_95, x_95, x_95);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 427a06e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 I = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 N = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 R = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 ref = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_40 = asint(x_6[2].x);
-  const int x_43 = asint(x_6[3].x);
-  const int x_46 = asint(x_6[4].x);
-  I = asfloat(uint4(asuint(x_40), asuint(x_43), asuint(x_46), 92985u));
-  const float x_51 = asfloat(x_9[1].x);
-  N = float4(x_51, x_51, x_51, x_51);
-  R = reflect(I, float4(0.5f, 0.5f, 0.5f, 0.5f));
-  const float4 x_55 = I;
-  const float x_57 = asfloat(x_9[2].x);
-  ref = (x_55 - (N * (x_57 * dot(N, I))));
-  const float4 x_65 = R;
-  const float4 x_66 = ref;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_69 = asfloat(x_9[scalar_offset / 4][scalar_offset % 4]);
-  if ((distance(x_65, x_66) < x_69)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_75 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_78 = asint(x_6[1].x);
-    const int x_81 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_84 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_75), float(x_78), float(x_81), float(x_84));
-  } else {
-    const int x_88 = asint(x_6[1].x);
-    const float x_89 = float(x_88);
-    x_GLF_color = float4(x_89, x_89, x_89, x_89);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.msl
deleted file mode 100644
index afdf0a0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float4 I = 0.0f;
-  float4 N = 0.0f;
-  float4 R = 0.0f;
-  float4 ref = 0.0f;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_43 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  I = as_type<float4>(uint4(as_type<uint>(x_40), as_type<uint>(x_43), as_type<uint>(x_46), 92985u));
-  float const x_51 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  N = float4(x_51, x_51, x_51, x_51);
-  float4 const x_53 = I;
-  R = reflect(x_53, float4(0.5f, 0.5f, 0.5f, 0.5f));
-  float4 const x_55 = I;
-  float const x_57 = x_9.x_GLF_uniform_float_values.arr[2].el;
-  float4 const x_58 = N;
-  float4 const x_59 = I;
-  float4 const x_62 = N;
-  ref = (x_55 - (x_62 * (x_57 * dot(x_58, x_59))));
-  float4 const x_65 = R;
-  float4 const x_66 = ref;
-  float const x_69 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  if ((distance(x_65, x_66) < x_69)) {
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_78 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_84 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_75), float(x_78), float(x_81), float(x_84));
-  } else {
-    int const x_88 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_89 = float(x_88);
-    *(tint_symbol_3) = float4(x_89, x_89, x_89, x_89);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index bd2d69d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,162 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 106
-; Schema: 0
-               OpCapability Shader
-         %54 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %I "I"
-               OpName %N "N"
-               OpName %R "R"
-               OpName %ref "ref"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %v4uint = OpTypeVector %uint 4
- %uint_92985 = OpConstant %uint 92985
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-  %float_0_5 = OpConstant %float 0.5
-         %56 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %95 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %I = OpVariable %_ptr_Function_v4float Function %5
-          %N = OpVariable %_ptr_Function_v4float Function %5
-          %R = OpVariable %_ptr_Function_v4float Function %5
-        %ref = OpVariable %_ptr_Function_v4float Function %5
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %33 = OpLoad %int %32
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %36 = OpLoad %int %35
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %39 = OpLoad %int %38
-         %42 = OpBitcast %uint %33
-         %43 = OpBitcast %uint %36
-         %44 = OpBitcast %uint %39
-         %46 = OpCompositeConstruct %v4uint %42 %43 %44 %uint_92985
-         %40 = OpBitcast %v4float %46
-               OpStore %I %40
-         %49 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %50 = OpLoad %float %49
-         %51 = OpCompositeConstruct %v4float %50 %50 %50 %50
-               OpStore %N %51
-         %52 = OpLoad %v4float %I
-         %53 = OpExtInst %v4float %54 Reflect %52 %56
-               OpStore %R %53
-         %57 = OpLoad %v4float %I
-         %58 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_2
-         %59 = OpLoad %float %58
-         %60 = OpLoad %v4float %N
-         %61 = OpLoad %v4float %I
-         %62 = OpLoad %v4float %N
-         %63 = OpDot %float %60 %61
-         %64 = OpFMul %float %59 %63
-         %65 = OpVectorTimesScalar %v4float %62 %64
-         %66 = OpFSub %v4float %57 %65
-               OpStore %ref %66
-         %67 = OpLoad %v4float %R
-         %68 = OpLoad %v4float %ref
-         %70 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %71 = OpLoad %float %70
-         %72 = OpExtInst %float %54 Distance %67 %68
-         %73 = OpFOrdLessThan %bool %72 %71
-               OpSelectionMerge %75 None
-               OpBranchConditional %73 %76 %77
-         %76 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpConvertSToF %float %79
-         %87 = OpConvertSToF %float %81
-         %88 = OpConvertSToF %float %83
-         %89 = OpConvertSToF %float %85
-         %90 = OpCompositeConstruct %v4float %86 %87 %88 %89
-               OpStore %x_GLF_color %90
-               OpBranch %75
-         %77 = OpLabel
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %92
-         %94 = OpCompositeConstruct %v4float %93 %93 %93 %93
-               OpStore %x_GLF_color %94
-               OpBranch %75
-         %75 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %95
-         %98 = OpLabel
-         %99 = OpFunctionCall %void %main_1
-        %100 = OpLoad %v4float %x_GLF_color
-        %101 = OpCompositeConstruct %main_out %100
-               OpReturnValue %101
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %103 = OpLabel
-        %104 = OpFunctionCall %main_out %main_inner
-        %105 = OpCompositeExtract %v4float %104 0
-               OpStore %x_GLF_color_1_1 %105
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c992ddc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,66 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var I : vec4<f32>;
-  var N : vec4<f32>;
-  var R : vec4<f32>;
-  var ref : vec4<f32>;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_43 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[4];
-  I = bitcast<vec4<f32>>(vec4<u32>(bitcast<u32>(x_40), bitcast<u32>(x_43), bitcast<u32>(x_46), 92985u));
-  let x_51 : f32 = x_9.x_GLF_uniform_float_values[1];
-  N = vec4<f32>(x_51, x_51, x_51, x_51);
-  let x_53 : vec4<f32> = I;
-  R = reflect(x_53, vec4<f32>(0.5, 0.5, 0.5, 0.5));
-  let x_55 : vec4<f32> = I;
-  let x_57 : f32 = x_9.x_GLF_uniform_float_values[2];
-  let x_58 : vec4<f32> = N;
-  let x_59 : vec4<f32> = I;
-  let x_62 : vec4<f32> = N;
-  ref = (x_55 - (x_62 * (x_57 * dot(x_58, x_59))));
-  let x_65 : vec4<f32> = R;
-  let x_66 : vec4<f32> = ref;
-  let x_69 : f32 = x_9.x_GLF_uniform_float_values[0];
-  if ((distance(x_65, x_66) < x_69)) {
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_78 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_75), f32(x_78), f32(x_81), f32(x_84));
-  } else {
-    let x_88 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_89 : f32 = f32(x_88);
-    x_GLF_color = vec4<f32>(x_89, x_89, x_89, x_89);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 427a06e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 I = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 N = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 R = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 ref = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_40 = asint(x_6[2].x);
-  const int x_43 = asint(x_6[3].x);
-  const int x_46 = asint(x_6[4].x);
-  I = asfloat(uint4(asuint(x_40), asuint(x_43), asuint(x_46), 92985u));
-  const float x_51 = asfloat(x_9[1].x);
-  N = float4(x_51, x_51, x_51, x_51);
-  R = reflect(I, float4(0.5f, 0.5f, 0.5f, 0.5f));
-  const float4 x_55 = I;
-  const float x_57 = asfloat(x_9[2].x);
-  ref = (x_55 - (N * (x_57 * dot(N, I))));
-  const float4 x_65 = R;
-  const float4 x_66 = ref;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_69 = asfloat(x_9[scalar_offset / 4][scalar_offset % 4]);
-  if ((distance(x_65, x_66) < x_69)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_75 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_78 = asint(x_6[1].x);
-    const int x_81 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_84 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_75), float(x_78), float(x_81), float(x_84));
-  } else {
-    const int x_88 = asint(x_6[1].x);
-    const float x_89 = float(x_88);
-    x_GLF_color = float4(x_89, x_89, x_89, x_89);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.msl
deleted file mode 100644
index afdf0a0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float4 I = 0.0f;
-  float4 N = 0.0f;
-  float4 R = 0.0f;
-  float4 ref = 0.0f;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_43 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  I = as_type<float4>(uint4(as_type<uint>(x_40), as_type<uint>(x_43), as_type<uint>(x_46), 92985u));
-  float const x_51 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  N = float4(x_51, x_51, x_51, x_51);
-  float4 const x_53 = I;
-  R = reflect(x_53, float4(0.5f, 0.5f, 0.5f, 0.5f));
-  float4 const x_55 = I;
-  float const x_57 = x_9.x_GLF_uniform_float_values.arr[2].el;
-  float4 const x_58 = N;
-  float4 const x_59 = I;
-  float4 const x_62 = N;
-  ref = (x_55 - (x_62 * (x_57 * dot(x_58, x_59))));
-  float4 const x_65 = R;
-  float4 const x_66 = ref;
-  float const x_69 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  if ((distance(x_65, x_66) < x_69)) {
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_78 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_84 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_75), float(x_78), float(x_81), float(x_84));
-  } else {
-    int const x_88 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_89 = float(x_88);
-    *(tint_symbol_3) = float4(x_89, x_89, x_89, x_89);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index bd2d69d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,162 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 106
-; Schema: 0
-               OpCapability Shader
-         %54 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %I "I"
-               OpName %N "N"
-               OpName %R "R"
-               OpName %ref "ref"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %v4uint = OpTypeVector %uint 4
- %uint_92985 = OpConstant %uint 92985
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-  %float_0_5 = OpConstant %float 0.5
-         %56 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %95 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %I = OpVariable %_ptr_Function_v4float Function %5
-          %N = OpVariable %_ptr_Function_v4float Function %5
-          %R = OpVariable %_ptr_Function_v4float Function %5
-        %ref = OpVariable %_ptr_Function_v4float Function %5
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %33 = OpLoad %int %32
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %36 = OpLoad %int %35
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %39 = OpLoad %int %38
-         %42 = OpBitcast %uint %33
-         %43 = OpBitcast %uint %36
-         %44 = OpBitcast %uint %39
-         %46 = OpCompositeConstruct %v4uint %42 %43 %44 %uint_92985
-         %40 = OpBitcast %v4float %46
-               OpStore %I %40
-         %49 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %50 = OpLoad %float %49
-         %51 = OpCompositeConstruct %v4float %50 %50 %50 %50
-               OpStore %N %51
-         %52 = OpLoad %v4float %I
-         %53 = OpExtInst %v4float %54 Reflect %52 %56
-               OpStore %R %53
-         %57 = OpLoad %v4float %I
-         %58 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_2
-         %59 = OpLoad %float %58
-         %60 = OpLoad %v4float %N
-         %61 = OpLoad %v4float %I
-         %62 = OpLoad %v4float %N
-         %63 = OpDot %float %60 %61
-         %64 = OpFMul %float %59 %63
-         %65 = OpVectorTimesScalar %v4float %62 %64
-         %66 = OpFSub %v4float %57 %65
-               OpStore %ref %66
-         %67 = OpLoad %v4float %R
-         %68 = OpLoad %v4float %ref
-         %70 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %71 = OpLoad %float %70
-         %72 = OpExtInst %float %54 Distance %67 %68
-         %73 = OpFOrdLessThan %bool %72 %71
-               OpSelectionMerge %75 None
-               OpBranchConditional %73 %76 %77
-         %76 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpConvertSToF %float %79
-         %87 = OpConvertSToF %float %81
-         %88 = OpConvertSToF %float %83
-         %89 = OpConvertSToF %float %85
-         %90 = OpCompositeConstruct %v4float %86 %87 %88 %89
-               OpStore %x_GLF_color %90
-               OpBranch %75
-         %77 = OpLabel
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %92
-         %94 = OpCompositeConstruct %v4float %93 %93 %93 %93
-               OpStore %x_GLF_color %94
-               OpBranch %75
-         %75 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %95
-         %98 = OpLabel
-         %99 = OpFunctionCall %void %main_1
-        %100 = OpLoad %v4float %x_GLF_color
-        %101 = OpCompositeConstruct %main_out %100
-               OpReturnValue %101
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %103 = OpLabel
-        %104 = OpFunctionCall %main_out %main_inner
-        %105 = OpCompositeExtract %v4float %104 0
-               OpStore %x_GLF_color_1_1 %105
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c992ddc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-reflect-denorm/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,66 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var I : vec4<f32>;
-  var N : vec4<f32>;
-  var R : vec4<f32>;
-  var ref : vec4<f32>;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_43 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[4];
-  I = bitcast<vec4<f32>>(vec4<u32>(bitcast<u32>(x_40), bitcast<u32>(x_43), bitcast<u32>(x_46), 92985u));
-  let x_51 : f32 = x_9.x_GLF_uniform_float_values[1];
-  N = vec4<f32>(x_51, x_51, x_51, x_51);
-  let x_53 : vec4<f32> = I;
-  R = reflect(x_53, vec4<f32>(0.5, 0.5, 0.5, 0.5));
-  let x_55 : vec4<f32> = I;
-  let x_57 : f32 = x_9.x_GLF_uniform_float_values[2];
-  let x_58 : vec4<f32> = N;
-  let x_59 : vec4<f32> = I;
-  let x_62 : vec4<f32> = N;
-  ref = (x_55 - (x_62 * (x_57 * dot(x_58, x_59))));
-  let x_65 : vec4<f32> = R;
-  let x_66 : vec4<f32> = ref;
-  let x_69 : f32 = x_9.x_GLF_uniform_float_values[0];
-  if ((distance(x_65, x_66) < x_69)) {
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_78 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_75), f32(x_78), f32(x_81), f32(x_84));
-  } else {
-    let x_88 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_89 : f32 = f32(x_88);
-    x_GLF_color = vec4<f32>(x_89, x_89, x_89, x_89);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b61eb9d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float undefined = 0.0f;
-  bool x_45 = false;
-  bool x_46_phi = false;
-  undefined = sinh(asfloat(0x7fc00000u));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const bool x_38 = (1 == x_10);
-  x_46_phi = x_38;
-  if (!(x_38)) {
-    const float x_42 = undefined;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_44 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_45 = (x_42 > x_44);
-    x_46_phi = x_45;
-  }
-  if (x_46_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_12 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_13 = asint(x_6[1].x);
-    const int x_14 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_15 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_12), float(x_13), float(x_14), float(x_15));
-  } else {
-    const int x_16 = asint(x_6[1].x);
-    const float x_60 = float(x_16);
-    x_GLF_color = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.msl
deleted file mode 100644
index 41d7b01..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float undefined = 0.0f;
-  bool x_45 = false;
-  bool x_46_phi = false;
-  undefined = sinh(NAN);
-  int const x_10 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  bool const x_38 = (1 == x_10);
-  x_46_phi = x_38;
-  if (!(x_38)) {
-    float const x_42 = undefined;
-    float const x_44 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    x_45 = (x_42 > x_44);
-    x_46_phi = x_45;
-  }
-  bool const x_46 = x_46_phi;
-  if (x_46) {
-    int const x_12 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_13 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_14 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_15 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_12), float(x_13), float(x_14), float(x_15));
-  } else {
-    int const x_16 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_60 = float(x_16);
-    *(tint_symbol_3) = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b87ac77..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,141 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 83
-; Schema: 0
-               OpCapability Shader
-         %33 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %undefined "undefined"
-               OpName %x_45 "x_45"
-               OpName %x_46_phi "x_46_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-%float_0x1_8p_128 = OpConstant %float 0x1.8p+128
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-  %undefined = OpVariable %_ptr_Function_float Function %26
-       %x_45 = OpVariable %_ptr_Function_bool Function %30
-   %x_46_phi = OpVariable %_ptr_Function_bool Function %30
-         %32 = OpExtInst %float %33 Sinh %float_0x1_8p_128
-               OpStore %undefined %32
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %41 = OpIEqual %bool %int_1 %39
-               OpStore %x_46_phi %41
-         %42 = OpLogicalNot %bool %41
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-         %45 = OpLoad %float %undefined
-         %47 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %48 = OpLoad %float %47
-         %49 = OpFOrdGreaterThan %bool %45 %48
-               OpStore %x_45 %49
-         %50 = OpLoad %bool %x_45
-               OpStore %x_46_phi %50
-               OpBranch %43
-         %43 = OpLabel
-         %51 = OpLoad %bool %x_46_phi
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpConvertSToF %float %56
-         %64 = OpConvertSToF %float %58
-         %65 = OpConvertSToF %float %60
-         %66 = OpConvertSToF %float %62
-         %67 = OpCompositeConstruct %v4float %63 %64 %65 %66
-               OpStore %x_GLF_color %67
-               OpBranch %52
-         %54 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %69
-         %71 = OpCompositeConstruct %v4float %70 %70 %70 %70
-               OpStore %x_GLF_color %71
-               OpBranch %52
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 09b3c27..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var undefined : f32;
-  var x_45 : bool;
-  var x_46_phi : bool;
-  undefined = sinh(0x1.8p+128);
-  let x_10 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_38 : bool = (1 == x_10);
-  x_46_phi = x_38;
-  if (!(x_38)) {
-    let x_42 : f32 = undefined;
-    let x_44 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_45 = (x_42 > x_44);
-    x_46_phi = x_45;
-  }
-  let x_46 : bool = x_46_phi;
-  if (x_46) {
-    let x_12 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_13 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_14 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_15 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_12), f32(x_13), f32(x_14), f32(x_15));
-  } else {
-    let x_16 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_60 : f32 = f32(x_16);
-    x_GLF_color = vec4<f32>(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 9b834f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float undefined = 0.0f;
-  bool x_45 = false;
-  bool x_46_phi = false;
-  undefined = sinh(asfloat(0x7f800000u));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const bool x_38 = (1 == x_10);
-  x_46_phi = x_38;
-  if (!(x_38)) {
-    const float x_42 = undefined;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_44 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_45 = (x_42 > x_44);
-    x_46_phi = x_45;
-  }
-  if (x_46_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_12 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_13 = asint(x_6[1].x);
-    const int x_14 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_15 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_12), float(x_13), float(x_14), float(x_15));
-  } else {
-    const int x_16 = asint(x_6[1].x);
-    const float x_60 = float(x_16);
-    x_GLF_color = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1e7b6c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float undefined = 0.0f;
-  bool x_45 = false;
-  bool x_46_phi = false;
-  undefined = sinh(INFINITY);
-  int const x_10 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  bool const x_38 = (1 == x_10);
-  x_46_phi = x_38;
-  if (!(x_38)) {
-    float const x_42 = undefined;
-    float const x_44 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    x_45 = (x_42 > x_44);
-    x_46_phi = x_45;
-  }
-  bool const x_46 = x_46_phi;
-  if (x_46) {
-    int const x_12 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_13 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_14 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_15 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_12), float(x_13), float(x_14), float(x_15));
-  } else {
-    int const x_16 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_60 = float(x_16);
-    *(tint_symbol_3) = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 03787ca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,141 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 83
-; Schema: 0
-               OpCapability Shader
-         %33 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %undefined "undefined"
-               OpName %x_45 "x_45"
-               OpName %x_46_phi "x_46_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-%float_0x1p_128 = OpConstant %float 0x1p+128
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-  %undefined = OpVariable %_ptr_Function_float Function %26
-       %x_45 = OpVariable %_ptr_Function_bool Function %30
-   %x_46_phi = OpVariable %_ptr_Function_bool Function %30
-         %32 = OpExtInst %float %33 Sinh %float_0x1p_128
-               OpStore %undefined %32
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %41 = OpIEqual %bool %int_1 %39
-               OpStore %x_46_phi %41
-         %42 = OpLogicalNot %bool %41
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-         %45 = OpLoad %float %undefined
-         %47 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %48 = OpLoad %float %47
-         %49 = OpFOrdGreaterThan %bool %45 %48
-               OpStore %x_45 %49
-         %50 = OpLoad %bool %x_45
-               OpStore %x_46_phi %50
-               OpBranch %43
-         %43 = OpLabel
-         %51 = OpLoad %bool %x_46_phi
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpConvertSToF %float %56
-         %64 = OpConvertSToF %float %58
-         %65 = OpConvertSToF %float %60
-         %66 = OpConvertSToF %float %62
-         %67 = OpCompositeConstruct %v4float %63 %64 %65 %66
-               OpStore %x_GLF_color %67
-               OpBranch %52
-         %54 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %69
-         %71 = OpCompositeConstruct %v4float %70 %70 %70 %70
-               OpStore %x_GLF_color %71
-               OpBranch %52
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c6e4a57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-sinh-negative-log2/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var undefined : f32;
-  var x_45 : bool;
-  var x_46_phi : bool;
-  undefined = sinh(0x1p+128);
-  let x_10 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_38 : bool = (1 == x_10);
-  x_46_phi = x_38;
-  if (!(x_38)) {
-    let x_42 : f32 = undefined;
-    let x_44 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_45 = (x_42 > x_44);
-    x_46_phi = x_45;
-  }
-  let x_46 : bool = x_46_phi;
-  if (x_46) {
-    let x_12 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_13 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_14 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_15 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_12), f32(x_13), f32(x_14), f32(x_15));
-  } else {
-    let x_16 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_60 : f32 = f32(x_16);
-    x_GLF_color = vec4<f32>(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 27fad2b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float dist1 = 0.0f;
-  float dist2 = 0.0f;
-  v = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  dist1 = distance(tanh(v), (sinh(v) / cosh(v)));
-  dist2 = distance(tanh(v), float4(0.761590004f, 0.964030027f, 0.995050013f, 0.999329984f));
-  if (((dist1 < 0.100000001f) & (dist2 < 0.100000001f))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5c3bb08..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float dist1 = 0.0f;
-  float dist2 = 0.0f;
-  v = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_30 = v;
-  float4 const x_32 = v;
-  float4 const x_34 = v;
-  dist1 = distance(tanh(x_30), (sinh(x_32) / cosh(x_34)));
-  float4 const x_38 = v;
-  dist2 = distance(tanh(x_38), float4(0.761590004f, 0.964030027f, 0.995050013f, 0.999329984f));
-  float const x_41 = dist1;
-  float const x_43 = dist2;
-  if (((x_41 < 0.100000001f) & (x_43 < 0.100000001f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e89c0bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,100 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-         %27 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %dist1 "dist1"
-               OpName %dist2 "dist2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %22 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-%float_0_761590004 = OpConstant %float 0.761590004
-%float_0_964030027 = OpConstant %float 0.964030027
-%float_0_995050013 = OpConstant %float 0.995050013
-%float_0_999329984 = OpConstant %float 0.999329984
-         %39 = OpConstantComposite %v4float %float_0_761590004 %float_0_964030027 %float_0_995050013 %float_0_999329984
-%float_0_100000001 = OpConstant %float 0.100000001
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %51 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %52 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-      %dist1 = OpVariable %_ptr_Function_float Function %16
-      %dist2 = OpVariable %_ptr_Function_float Function %16
-               OpStore %v %22
-         %23 = OpLoad %v4float %v
-         %24 = OpLoad %v4float %v
-         %25 = OpLoad %v4float %v
-         %28 = OpExtInst %v4float %27 Tanh %23
-         %29 = OpExtInst %v4float %27 Sinh %24
-         %30 = OpExtInst %v4float %27 Cosh %25
-         %31 = OpFDiv %v4float %29 %30
-         %26 = OpExtInst %float %27 Distance %28 %31
-               OpStore %dist1 %26
-         %32 = OpLoad %v4float %v
-         %34 = OpExtInst %v4float %27 Tanh %32
-         %33 = OpExtInst %float %27 Distance %34 %39
-               OpStore %dist2 %33
-         %40 = OpLoad %float %dist1
-         %41 = OpLoad %float %dist2
-         %43 = OpFOrdLessThan %bool %40 %float_0_100000001
-         %45 = OpFOrdLessThan %bool %41 %float_0_100000001
-         %46 = OpLogicalAnd %bool %43 %45
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %47
-         %49 = OpLabel
-               OpStore %x_GLF_color %52
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 64816ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var dist1 : f32;
-  var dist2 : f32;
-  v = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_30 : vec4<f32> = v;
-  let x_32 : vec4<f32> = v;
-  let x_34 : vec4<f32> = v;
-  dist1 = distance(tanh(x_30), (sinh(x_32) / cosh(x_34)));
-  let x_38 : vec4<f32> = v;
-  dist2 = distance(tanh(x_38), vec4<f32>(0.761590004, 0.964030027, 0.995050013, 0.999329984));
-  let x_41 : f32 = dist1;
-  let x_43 : f32 = dist2;
-  if (((x_41 < 0.100000001) & (x_43 < 0.100000001))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3d2c160..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float dist1 = 0.0f;
-  float dist2 = 0.0f;
-  v = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  dist1 = distance(tanh(v), (sinh(v) / cosh(v)));
-  dist2 = distance(tanh(v), float4(0.761590004f, 0.964030027f, 0.995050013f, 0.999329984f));
-  bool tint_tmp = (dist1 < 0.100000001f);
-  if (tint_tmp) {
-    tint_tmp = (dist2 < 0.100000001f);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1881300..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float dist1 = 0.0f;
-  float dist2 = 0.0f;
-  v = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float4 const x_30 = v;
-  float4 const x_32 = v;
-  float4 const x_34 = v;
-  dist1 = distance(tanh(x_30), (sinh(x_32) / cosh(x_34)));
-  float4 const x_38 = v;
-  dist2 = distance(tanh(x_38), float4(0.761590004f, 0.964030027f, 0.995050013f, 0.999329984f));
-  float const x_41 = dist1;
-  float const x_43 = dist2;
-  if (((x_41 < 0.100000001f) && (x_43 < 0.100000001f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d72db82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-         %27 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %dist1 "dist1"
-               OpName %dist2 "dist2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %22 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-%float_0_761590004 = OpConstant %float 0.761590004
-%float_0_964030027 = OpConstant %float 0.964030027
-%float_0_995050013 = OpConstant %float 0.995050013
-%float_0_999329984 = OpConstant %float 0.999329984
-         %39 = OpConstantComposite %v4float %float_0_761590004 %float_0_964030027 %float_0_995050013 %float_0_999329984
-%float_0_100000001 = OpConstant %float 0.100000001
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %53 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %54 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-      %dist1 = OpVariable %_ptr_Function_float Function %16
-      %dist2 = OpVariable %_ptr_Function_float Function %16
-               OpStore %v %22
-         %23 = OpLoad %v4float %v
-         %24 = OpLoad %v4float %v
-         %25 = OpLoad %v4float %v
-         %28 = OpExtInst %v4float %27 Tanh %23
-         %29 = OpExtInst %v4float %27 Sinh %24
-         %30 = OpExtInst %v4float %27 Cosh %25
-         %31 = OpFDiv %v4float %29 %30
-         %26 = OpExtInst %float %27 Distance %28 %31
-               OpStore %dist1 %26
-         %32 = OpLoad %v4float %v
-         %34 = OpExtInst %v4float %27 Tanh %32
-         %33 = OpExtInst %float %27 Distance %34 %39
-               OpStore %dist2 %33
-         %40 = OpLoad %float %dist1
-         %41 = OpLoad %float %dist2
-         %43 = OpFOrdLessThan %bool %40 %float_0_100000001
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %45
-         %46 = OpLabel
-         %47 = OpFOrdLessThan %bool %41 %float_0_100000001
-               OpBranch %45
-         %45 = OpLabel
-         %48 = OpPhi %bool %43 %11 %47 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %49
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8bcb3a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-tanh/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var dist1 : f32;
-  var dist2 : f32;
-  v = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_30 : vec4<f32> = v;
-  let x_32 : vec4<f32> = v;
-  let x_34 : vec4<f32> = v;
-  dist1 = distance(tanh(x_30), (sinh(x_32) / cosh(x_34)));
-  let x_38 : vec4<f32> = v;
-  dist2 = distance(tanh(x_38), vec4<f32>(0.761590004, 0.964030027, 0.995050013, 0.999329984));
-  let x_41 : f32 = dist1;
-  let x_43 : f32 = dist2;
-  if (((x_41 < 0.100000001) && (x_43 < 0.100000001))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1f0d1c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[12];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_15 : register(b0, space0) {
-  uint4 x_15[1];
-};
-
-void main_1() {
-  float3x4 m0 = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3x4 m1 = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3 undefined = float3(0.0f, 0.0f, 0.0f);
-  float3 defined = float3(0.0f, 0.0f, 0.0f);
-  float4 v0 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_17 = asint(x_6[4].x);
-  const int x_18 = asint(x_6[5].x);
-  const int x_19 = asint(x_6[6].x);
-  const int x_20 = asint(x_6[10].x);
-  const int x_21 = asint(x_6[7].x);
-  const int x_22 = asint(x_6[8].x);
-  const int x_23 = asint(x_6[11].x);
-  const int x_24 = asint(x_6[1].x);
-  const int x_25 = asint(x_6[2].x);
-  const int x_26 = asint(x_6[3].x);
-  m0 = float3x4(float4(float(x_17), float(x_18), float(x_19), 4.0f), float4(float(x_20), float(x_21), float(x_22), 8.0f), float4(float(x_23), float(x_24), float(x_25), float(x_26)));
-  const int x_27 = asint(x_6[4].x);
-  const float x_104 = float(x_27);
-  m1 = float3x4(float4(x_104, 0.0f, 0.0f, 0.0f), float4(0.0f, x_104, 0.0f, 0.0f), float4(0.0f, 0.0f, x_104, 0.0f));
-  undefined = ldexp(float3(1.0f, 1.0f, 1.0f), int3(500, 500, 500));
-  const int x_28 = asint(x_6[4].x);
-  const float x_111 = float(x_28);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  defined = ldexp(float3(x_111, x_111, x_111), int3(x_29, x_29, x_29));
-  v0 = mul(undefined, m0);
-  v1 = mul(undefined, m1);
-  v2 = mul(defined, m0);
-  v3 = mul(defined, m1);
-  const float x_129 = v2.x;
-  const float x_131 = v3.x;
-  if ((x_129 > x_131)) {
-    const int x_30 = asint(x_6[4].x);
-    const int x_31 = asint(x_6[9].x);
-    const int x_32 = asint(x_6[9].x);
-    const int x_33 = asint(x_6[4].x);
-    x_GLF_color = float4(float(x_30), float(x_31), float(x_32), float(x_33));
-  } else {
-    const int x_34 = asint(x_6[9].x);
-    const float x_146 = float(x_34);
-    x_GLF_color = float4(x_146, x_146, x_146, x_146);
-  }
-  const float x_149 = v0.x;
-  const float x_151 = v1.x;
-  if ((x_149 < x_151)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_156 = asfloat(x_15[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color.y = x_156;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.msl
deleted file mode 100644
index 46fb959..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,106 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[12];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_15, thread float4* const tint_symbol_3) {
-  float3x4 m0 = float3x4(0.0f);
-  float3x4 m1 = float3x4(0.0f);
-  float3 undefined = 0.0f;
-  float3 defined = 0.0f;
-  float4 v0 = 0.0f;
-  float4 v1 = 0.0f;
-  float4 v2 = 0.0f;
-  float4 v3 = 0.0f;
-  int const x_17 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_18 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_19 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_20 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  int const x_21 = x_6.x_GLF_uniform_int_values.arr[7].el;
-  int const x_22 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_23 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_24 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  m0 = float3x4(float4(float(x_17), float(x_18), float(x_19), 4.0f), float4(float(x_20), float(x_21), float(x_22), 8.0f), float4(float(x_23), float(x_24), float(x_25), float(x_26)));
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  float const x_104 = float(x_27);
-  m1 = float3x4(float4(x_104, 0.0f, 0.0f, 0.0f), float4(0.0f, x_104, 0.0f, 0.0f), float4(0.0f, 0.0f, x_104, 0.0f));
-  undefined = ldexp(float3(1.0f, 1.0f, 1.0f), int3(500, 500, 500));
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  float const x_111 = float(x_28);
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  defined = ldexp(float3(x_111, x_111, x_111), int3(x_29, x_29, x_29));
-  float3x4 const x_116 = m0;
-  float3 const x_117 = undefined;
-  v0 = (x_116 * x_117);
-  float3x4 const x_119 = m1;
-  float3 const x_120 = undefined;
-  v1 = (x_119 * x_120);
-  float3x4 const x_122 = m0;
-  float3 const x_123 = defined;
-  v2 = (x_122 * x_123);
-  float3x4 const x_125 = m1;
-  float3 const x_126 = defined;
-  v3 = (x_125 * x_126);
-  float const x_129 = v2.x;
-  float const x_131 = v3.x;
-  if ((x_129 > x_131)) {
-    int const x_30 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_31 = x_6.x_GLF_uniform_int_values.arr[9].el;
-    int const x_32 = x_6.x_GLF_uniform_int_values.arr[9].el;
-    int const x_33 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    *(tint_symbol_3) = float4(float(x_30), float(x_31), float(x_32), float(x_33));
-  } else {
-    int const x_34 = x_6.x_GLF_uniform_int_values.arr[9].el;
-    float const x_146 = float(x_34);
-    *(tint_symbol_3) = float4(x_146, x_146, x_146, x_146);
-  }
-  float const x_149 = v0.x;
-  float const x_151 = v1.x;
-  if ((x_149 < x_151)) {
-    float const x_156 = x_15.x_GLF_uniform_float_values.arr[0].el;
-    (*(tint_symbol_3)).y = x_156;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_15, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_15, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_15 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_15, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f914586..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,242 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 174
-; Schema: 0
-               OpCapability Shader
-         %96 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_15 "x_15"
-               OpName %main_1 "main_1"
-               OpName %m0 "m0"
-               OpName %m1 "m1"
-               OpName %undefined "undefined"
-               OpName %defined "defined"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %v3 "v3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_12 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_15 NonWritable
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_12 = OpConstant %uint 12
-%_arr_int_uint_12 = OpTypeArray %int %uint_12
-       %buf1 = OpTypeStruct %_arr_int_uint_12
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_15 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float
-         %27 = OpConstantNull %mat3v4float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %32 = OpConstantNull %v3float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_4 = OpConstant %int 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-     %int_10 = OpConstant %int 10
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-     %int_11 = OpConstant %int 11
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-    %float_4 = OpConstant %float 4
-    %float_8 = OpConstant %float 8
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %98 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-      %v3int = OpTypeVector %int 3
-    %int_500 = OpConstant %int 500
-        %101 = OpConstantComposite %v3int %int_500 %int_500 %int_500
-      %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-       %bool = OpTypeBool
-      %int_9 = OpConstant %int 9
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-        %163 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %m0 = OpVariable %_ptr_Function_mat3v4float Function %27
-         %m1 = OpVariable %_ptr_Function_mat3v4float Function %27
-  %undefined = OpVariable %_ptr_Function_v3float Function %32
-    %defined = OpVariable %_ptr_Function_v3float Function %32
-         %v0 = OpVariable %_ptr_Function_v4float Function %5
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-         %v2 = OpVariable %_ptr_Function_v4float Function %5
-         %v3 = OpVariable %_ptr_Function_v4float Function %5
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %43 = OpLoad %int %42
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %46 = OpLoad %int %45
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-         %49 = OpLoad %int %48
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-         %52 = OpLoad %int %51
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-         %55 = OpLoad %int %54
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-         %58 = OpLoad %int %57
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-         %61 = OpLoad %int %60
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %67 = OpLoad %int %66
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %43
-         %72 = OpConvertSToF %float %46
-         %73 = OpConvertSToF %float %49
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %float_4
-         %76 = OpConvertSToF %float %52
-         %77 = OpConvertSToF %float %55
-         %78 = OpConvertSToF %float %58
-         %80 = OpCompositeConstruct %v4float %76 %77 %78 %float_8
-         %81 = OpConvertSToF %float %61
-         %82 = OpConvertSToF %float %64
-         %83 = OpConvertSToF %float %67
-         %84 = OpConvertSToF %float %70
-         %85 = OpCompositeConstruct %v4float %81 %82 %83 %84
-         %86 = OpCompositeConstruct %mat3v4float %75 %80 %85
-               OpStore %m0 %86
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %88
-         %91 = OpCompositeConstruct %v4float %89 %float_0 %float_0 %float_0
-         %92 = OpCompositeConstruct %v4float %float_0 %89 %float_0 %float_0
-         %93 = OpCompositeConstruct %v4float %float_0 %float_0 %89 %float_0
-         %94 = OpCompositeConstruct %mat3v4float %91 %92 %93
-               OpStore %m1 %94
-         %95 = OpExtInst %v3float %96 Ldexp %98 %101
-               OpStore %undefined %95
-        %102 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %103 = OpLoad %int %102
-        %104 = OpConvertSToF %float %103
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %107 = OpLoad %int %106
-        %109 = OpCompositeConstruct %v3float %104 %104 %104
-        %110 = OpCompositeConstruct %v3int %107 %107 %107
-        %108 = OpExtInst %v3float %96 Ldexp %109 %110
-               OpStore %defined %108
-        %111 = OpLoad %mat3v4float %m0
-        %112 = OpLoad %v3float %undefined
-        %113 = OpMatrixTimesVector %v4float %111 %112
-               OpStore %v0 %113
-        %114 = OpLoad %mat3v4float %m1
-        %115 = OpLoad %v3float %undefined
-        %116 = OpMatrixTimesVector %v4float %114 %115
-               OpStore %v1 %116
-        %117 = OpLoad %mat3v4float %m0
-        %118 = OpLoad %v3float %defined
-        %119 = OpMatrixTimesVector %v4float %117 %118
-               OpStore %v2 %119
-        %120 = OpLoad %mat3v4float %m1
-        %121 = OpLoad %v3float %defined
-        %122 = OpMatrixTimesVector %v4float %120 %121
-               OpStore %v3 %122
-        %124 = OpAccessChain %_ptr_Function_float %v2 %uint_0
-        %125 = OpLoad %float %124
-        %126 = OpAccessChain %_ptr_Function_float %v3 %uint_0
-        %127 = OpLoad %float %126
-        %128 = OpFOrdGreaterThan %bool %125 %127
-               OpSelectionMerge %130 None
-               OpBranchConditional %128 %131 %132
-        %131 = OpLabel
-        %133 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %134 = OpLoad %int %133
-        %136 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-        %139 = OpLoad %int %138
-        %140 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %141 = OpLoad %int %140
-        %142 = OpConvertSToF %float %134
-        %143 = OpConvertSToF %float %137
-        %144 = OpConvertSToF %float %139
-        %145 = OpConvertSToF %float %141
-        %146 = OpCompositeConstruct %v4float %142 %143 %144 %145
-               OpStore %x_GLF_color %146
-               OpBranch %130
-        %132 = OpLabel
-        %147 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-        %148 = OpLoad %int %147
-        %149 = OpConvertSToF %float %148
-        %150 = OpCompositeConstruct %v4float %149 %149 %149 %149
-               OpStore %x_GLF_color %150
-               OpBranch %130
-        %130 = OpLabel
-        %151 = OpAccessChain %_ptr_Function_float %v0 %uint_0
-        %152 = OpLoad %float %151
-        %153 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-        %154 = OpLoad %float %153
-        %155 = OpFOrdLessThan %bool %152 %154
-               OpSelectionMerge %156 None
-               OpBranchConditional %155 %157 %156
-        %157 = OpLabel
-        %159 = OpAccessChain %_ptr_Uniform_float %x_15 %uint_0 %int_0
-        %160 = OpLoad %float %159
-        %162 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %162 %160
-               OpBranch %156
-        %156 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %163
-        %166 = OpLabel
-        %167 = OpFunctionCall %void %main_1
-        %168 = OpLoad %v4float %x_GLF_color
-        %169 = OpCompositeConstruct %main_out %168
-               OpReturnValue %169
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %171 = OpLabel
-        %172 = OpFunctionCall %main_out %main_inner
-        %173 = OpCompositeExtract %v4float %172 0
-               OpStore %x_GLF_color_1_1 %173
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e298a8c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,92 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 12>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
-
-fn main_1() {
-  var m0 : mat3x4<f32>;
-  var m1 : mat3x4<f32>;
-  var undefined : vec3<f32>;
-  var defined : vec3<f32>;
-  var v0 : vec4<f32>;
-  var v1 : vec4<f32>;
-  var v2 : vec4<f32>;
-  var v3 : vec4<f32>;
-  let x_17 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_18 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_19 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_20 : i32 = x_6.x_GLF_uniform_int_values[10];
-  let x_21 : i32 = x_6.x_GLF_uniform_int_values[7];
-  let x_22 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_23 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_24 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[3];
-  m0 = mat3x4<f32>(vec4<f32>(f32(x_17), f32(x_18), f32(x_19), 4.0), vec4<f32>(f32(x_20), f32(x_21), f32(x_22), 8.0), vec4<f32>(f32(x_23), f32(x_24), f32(x_25), f32(x_26)));
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_104 : f32 = f32(x_27);
-  m1 = mat3x4<f32>(vec4<f32>(x_104, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_104, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_104, 0.0));
-  undefined = ldexp(vec3<f32>(1.0, 1.0, 1.0), vec3<i32>(500, 500, 500));
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_111 : f32 = f32(x_28);
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  defined = ldexp(vec3<f32>(x_111, x_111, x_111), vec3<i32>(x_29, x_29, x_29));
-  let x_116 : mat3x4<f32> = m0;
-  let x_117 : vec3<f32> = undefined;
-  v0 = (x_116 * x_117);
-  let x_119 : mat3x4<f32> = m1;
-  let x_120 : vec3<f32> = undefined;
-  v1 = (x_119 * x_120);
-  let x_122 : mat3x4<f32> = m0;
-  let x_123 : vec3<f32> = defined;
-  v2 = (x_122 * x_123);
-  let x_125 : mat3x4<f32> = m1;
-  let x_126 : vec3<f32> = defined;
-  v3 = (x_125 * x_126);
-  let x_129 : f32 = v2.x;
-  let x_131 : f32 = v3.x;
-  if ((x_129 > x_131)) {
-    let x_30 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_31 : i32 = x_6.x_GLF_uniform_int_values[9];
-    let x_32 : i32 = x_6.x_GLF_uniform_int_values[9];
-    let x_33 : i32 = x_6.x_GLF_uniform_int_values[4];
-    x_GLF_color = vec4<f32>(f32(x_30), f32(x_31), f32(x_32), f32(x_33));
-  } else {
-    let x_34 : i32 = x_6.x_GLF_uniform_int_values[9];
-    let x_146 : f32 = f32(x_34);
-    x_GLF_color = vec4<f32>(x_146, x_146, x_146, x_146);
-  }
-  let x_149 : f32 = v0.x;
-  let x_151 : f32 = v1.x;
-  if ((x_149 < x_151)) {
-    let x_156 : f32 = x_15.x_GLF_uniform_float_values[0];
-    x_GLF_color.y = x_156;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1f0d1c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[12];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_15 : register(b0, space0) {
-  uint4 x_15[1];
-};
-
-void main_1() {
-  float3x4 m0 = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3x4 m1 = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3 undefined = float3(0.0f, 0.0f, 0.0f);
-  float3 defined = float3(0.0f, 0.0f, 0.0f);
-  float4 v0 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_17 = asint(x_6[4].x);
-  const int x_18 = asint(x_6[5].x);
-  const int x_19 = asint(x_6[6].x);
-  const int x_20 = asint(x_6[10].x);
-  const int x_21 = asint(x_6[7].x);
-  const int x_22 = asint(x_6[8].x);
-  const int x_23 = asint(x_6[11].x);
-  const int x_24 = asint(x_6[1].x);
-  const int x_25 = asint(x_6[2].x);
-  const int x_26 = asint(x_6[3].x);
-  m0 = float3x4(float4(float(x_17), float(x_18), float(x_19), 4.0f), float4(float(x_20), float(x_21), float(x_22), 8.0f), float4(float(x_23), float(x_24), float(x_25), float(x_26)));
-  const int x_27 = asint(x_6[4].x);
-  const float x_104 = float(x_27);
-  m1 = float3x4(float4(x_104, 0.0f, 0.0f, 0.0f), float4(0.0f, x_104, 0.0f, 0.0f), float4(0.0f, 0.0f, x_104, 0.0f));
-  undefined = ldexp(float3(1.0f, 1.0f, 1.0f), int3(500, 500, 500));
-  const int x_28 = asint(x_6[4].x);
-  const float x_111 = float(x_28);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  defined = ldexp(float3(x_111, x_111, x_111), int3(x_29, x_29, x_29));
-  v0 = mul(undefined, m0);
-  v1 = mul(undefined, m1);
-  v2 = mul(defined, m0);
-  v3 = mul(defined, m1);
-  const float x_129 = v2.x;
-  const float x_131 = v3.x;
-  if ((x_129 > x_131)) {
-    const int x_30 = asint(x_6[4].x);
-    const int x_31 = asint(x_6[9].x);
-    const int x_32 = asint(x_6[9].x);
-    const int x_33 = asint(x_6[4].x);
-    x_GLF_color = float4(float(x_30), float(x_31), float(x_32), float(x_33));
-  } else {
-    const int x_34 = asint(x_6[9].x);
-    const float x_146 = float(x_34);
-    x_GLF_color = float4(x_146, x_146, x_146, x_146);
-  }
-  const float x_149 = v0.x;
-  const float x_151 = v1.x;
-  if ((x_149 < x_151)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_156 = asfloat(x_15[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color.y = x_156;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.msl
deleted file mode 100644
index 46fb959..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,106 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[12];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_15, thread float4* const tint_symbol_3) {
-  float3x4 m0 = float3x4(0.0f);
-  float3x4 m1 = float3x4(0.0f);
-  float3 undefined = 0.0f;
-  float3 defined = 0.0f;
-  float4 v0 = 0.0f;
-  float4 v1 = 0.0f;
-  float4 v2 = 0.0f;
-  float4 v3 = 0.0f;
-  int const x_17 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_18 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_19 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_20 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  int const x_21 = x_6.x_GLF_uniform_int_values.arr[7].el;
-  int const x_22 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_23 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_24 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  m0 = float3x4(float4(float(x_17), float(x_18), float(x_19), 4.0f), float4(float(x_20), float(x_21), float(x_22), 8.0f), float4(float(x_23), float(x_24), float(x_25), float(x_26)));
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  float const x_104 = float(x_27);
-  m1 = float3x4(float4(x_104, 0.0f, 0.0f, 0.0f), float4(0.0f, x_104, 0.0f, 0.0f), float4(0.0f, 0.0f, x_104, 0.0f));
-  undefined = ldexp(float3(1.0f, 1.0f, 1.0f), int3(500, 500, 500));
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  float const x_111 = float(x_28);
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  defined = ldexp(float3(x_111, x_111, x_111), int3(x_29, x_29, x_29));
-  float3x4 const x_116 = m0;
-  float3 const x_117 = undefined;
-  v0 = (x_116 * x_117);
-  float3x4 const x_119 = m1;
-  float3 const x_120 = undefined;
-  v1 = (x_119 * x_120);
-  float3x4 const x_122 = m0;
-  float3 const x_123 = defined;
-  v2 = (x_122 * x_123);
-  float3x4 const x_125 = m1;
-  float3 const x_126 = defined;
-  v3 = (x_125 * x_126);
-  float const x_129 = v2.x;
-  float const x_131 = v3.x;
-  if ((x_129 > x_131)) {
-    int const x_30 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_31 = x_6.x_GLF_uniform_int_values.arr[9].el;
-    int const x_32 = x_6.x_GLF_uniform_int_values.arr[9].el;
-    int const x_33 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    *(tint_symbol_3) = float4(float(x_30), float(x_31), float(x_32), float(x_33));
-  } else {
-    int const x_34 = x_6.x_GLF_uniform_int_values.arr[9].el;
-    float const x_146 = float(x_34);
-    *(tint_symbol_3) = float4(x_146, x_146, x_146, x_146);
-  }
-  float const x_149 = v0.x;
-  float const x_151 = v1.x;
-  if ((x_149 < x_151)) {
-    float const x_156 = x_15.x_GLF_uniform_float_values.arr[0].el;
-    (*(tint_symbol_3)).y = x_156;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_15, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_15, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_15 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_15, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f914586..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,242 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 174
-; Schema: 0
-               OpCapability Shader
-         %96 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_15 "x_15"
-               OpName %main_1 "main_1"
-               OpName %m0 "m0"
-               OpName %m1 "m1"
-               OpName %undefined "undefined"
-               OpName %defined "defined"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %v3 "v3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_12 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_15 NonWritable
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_12 = OpConstant %uint 12
-%_arr_int_uint_12 = OpTypeArray %int %uint_12
-       %buf1 = OpTypeStruct %_arr_int_uint_12
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_15 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float
-         %27 = OpConstantNull %mat3v4float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %32 = OpConstantNull %v3float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_4 = OpConstant %int 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-     %int_10 = OpConstant %int 10
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-     %int_11 = OpConstant %int 11
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-    %float_4 = OpConstant %float 4
-    %float_8 = OpConstant %float 8
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %98 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-      %v3int = OpTypeVector %int 3
-    %int_500 = OpConstant %int 500
-        %101 = OpConstantComposite %v3int %int_500 %int_500 %int_500
-      %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-       %bool = OpTypeBool
-      %int_9 = OpConstant %int 9
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-        %163 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %m0 = OpVariable %_ptr_Function_mat3v4float Function %27
-         %m1 = OpVariable %_ptr_Function_mat3v4float Function %27
-  %undefined = OpVariable %_ptr_Function_v3float Function %32
-    %defined = OpVariable %_ptr_Function_v3float Function %32
-         %v0 = OpVariable %_ptr_Function_v4float Function %5
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-         %v2 = OpVariable %_ptr_Function_v4float Function %5
-         %v3 = OpVariable %_ptr_Function_v4float Function %5
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %43 = OpLoad %int %42
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %46 = OpLoad %int %45
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-         %49 = OpLoad %int %48
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-         %52 = OpLoad %int %51
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-         %55 = OpLoad %int %54
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-         %58 = OpLoad %int %57
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-         %61 = OpLoad %int %60
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %67 = OpLoad %int %66
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %43
-         %72 = OpConvertSToF %float %46
-         %73 = OpConvertSToF %float %49
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %float_4
-         %76 = OpConvertSToF %float %52
-         %77 = OpConvertSToF %float %55
-         %78 = OpConvertSToF %float %58
-         %80 = OpCompositeConstruct %v4float %76 %77 %78 %float_8
-         %81 = OpConvertSToF %float %61
-         %82 = OpConvertSToF %float %64
-         %83 = OpConvertSToF %float %67
-         %84 = OpConvertSToF %float %70
-         %85 = OpCompositeConstruct %v4float %81 %82 %83 %84
-         %86 = OpCompositeConstruct %mat3v4float %75 %80 %85
-               OpStore %m0 %86
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %88
-         %91 = OpCompositeConstruct %v4float %89 %float_0 %float_0 %float_0
-         %92 = OpCompositeConstruct %v4float %float_0 %89 %float_0 %float_0
-         %93 = OpCompositeConstruct %v4float %float_0 %float_0 %89 %float_0
-         %94 = OpCompositeConstruct %mat3v4float %91 %92 %93
-               OpStore %m1 %94
-         %95 = OpExtInst %v3float %96 Ldexp %98 %101
-               OpStore %undefined %95
-        %102 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %103 = OpLoad %int %102
-        %104 = OpConvertSToF %float %103
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %107 = OpLoad %int %106
-        %109 = OpCompositeConstruct %v3float %104 %104 %104
-        %110 = OpCompositeConstruct %v3int %107 %107 %107
-        %108 = OpExtInst %v3float %96 Ldexp %109 %110
-               OpStore %defined %108
-        %111 = OpLoad %mat3v4float %m0
-        %112 = OpLoad %v3float %undefined
-        %113 = OpMatrixTimesVector %v4float %111 %112
-               OpStore %v0 %113
-        %114 = OpLoad %mat3v4float %m1
-        %115 = OpLoad %v3float %undefined
-        %116 = OpMatrixTimesVector %v4float %114 %115
-               OpStore %v1 %116
-        %117 = OpLoad %mat3v4float %m0
-        %118 = OpLoad %v3float %defined
-        %119 = OpMatrixTimesVector %v4float %117 %118
-               OpStore %v2 %119
-        %120 = OpLoad %mat3v4float %m1
-        %121 = OpLoad %v3float %defined
-        %122 = OpMatrixTimesVector %v4float %120 %121
-               OpStore %v3 %122
-        %124 = OpAccessChain %_ptr_Function_float %v2 %uint_0
-        %125 = OpLoad %float %124
-        %126 = OpAccessChain %_ptr_Function_float %v3 %uint_0
-        %127 = OpLoad %float %126
-        %128 = OpFOrdGreaterThan %bool %125 %127
-               OpSelectionMerge %130 None
-               OpBranchConditional %128 %131 %132
-        %131 = OpLabel
-        %133 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %134 = OpLoad %int %133
-        %136 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-        %139 = OpLoad %int %138
-        %140 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %141 = OpLoad %int %140
-        %142 = OpConvertSToF %float %134
-        %143 = OpConvertSToF %float %137
-        %144 = OpConvertSToF %float %139
-        %145 = OpConvertSToF %float %141
-        %146 = OpCompositeConstruct %v4float %142 %143 %144 %145
-               OpStore %x_GLF_color %146
-               OpBranch %130
-        %132 = OpLabel
-        %147 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-        %148 = OpLoad %int %147
-        %149 = OpConvertSToF %float %148
-        %150 = OpCompositeConstruct %v4float %149 %149 %149 %149
-               OpStore %x_GLF_color %150
-               OpBranch %130
-        %130 = OpLabel
-        %151 = OpAccessChain %_ptr_Function_float %v0 %uint_0
-        %152 = OpLoad %float %151
-        %153 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-        %154 = OpLoad %float %153
-        %155 = OpFOrdLessThan %bool %152 %154
-               OpSelectionMerge %156 None
-               OpBranchConditional %155 %157 %156
-        %157 = OpLabel
-        %159 = OpAccessChain %_ptr_Uniform_float %x_15 %uint_0 %int_0
-        %160 = OpLoad %float %159
-        %162 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %162 %160
-               OpBranch %156
-        %156 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %163
-        %166 = OpLabel
-        %167 = OpFunctionCall %void %main_1
-        %168 = OpLoad %v4float %x_GLF_color
-        %169 = OpCompositeConstruct %main_out %168
-               OpReturnValue %169
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %171 = OpLabel
-        %172 = OpFunctionCall %main_out %main_inner
-        %173 = OpCompositeExtract %v4float %172 0
-               OpStore %x_GLF_color_1_1 %173
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e298a8c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-undefined-matrix-mul/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,92 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 12>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
-
-fn main_1() {
-  var m0 : mat3x4<f32>;
-  var m1 : mat3x4<f32>;
-  var undefined : vec3<f32>;
-  var defined : vec3<f32>;
-  var v0 : vec4<f32>;
-  var v1 : vec4<f32>;
-  var v2 : vec4<f32>;
-  var v3 : vec4<f32>;
-  let x_17 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_18 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_19 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_20 : i32 = x_6.x_GLF_uniform_int_values[10];
-  let x_21 : i32 = x_6.x_GLF_uniform_int_values[7];
-  let x_22 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_23 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_24 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[3];
-  m0 = mat3x4<f32>(vec4<f32>(f32(x_17), f32(x_18), f32(x_19), 4.0), vec4<f32>(f32(x_20), f32(x_21), f32(x_22), 8.0), vec4<f32>(f32(x_23), f32(x_24), f32(x_25), f32(x_26)));
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_104 : f32 = f32(x_27);
-  m1 = mat3x4<f32>(vec4<f32>(x_104, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_104, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_104, 0.0));
-  undefined = ldexp(vec3<f32>(1.0, 1.0, 1.0), vec3<i32>(500, 500, 500));
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_111 : f32 = f32(x_28);
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  defined = ldexp(vec3<f32>(x_111, x_111, x_111), vec3<i32>(x_29, x_29, x_29));
-  let x_116 : mat3x4<f32> = m0;
-  let x_117 : vec3<f32> = undefined;
-  v0 = (x_116 * x_117);
-  let x_119 : mat3x4<f32> = m1;
-  let x_120 : vec3<f32> = undefined;
-  v1 = (x_119 * x_120);
-  let x_122 : mat3x4<f32> = m0;
-  let x_123 : vec3<f32> = defined;
-  v2 = (x_122 * x_123);
-  let x_125 : mat3x4<f32> = m1;
-  let x_126 : vec3<f32> = defined;
-  v3 = (x_125 * x_126);
-  let x_129 : f32 = v2.x;
-  let x_131 : f32 = v3.x;
-  if ((x_129 > x_131)) {
-    let x_30 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_31 : i32 = x_6.x_GLF_uniform_int_values[9];
-    let x_32 : i32 = x_6.x_GLF_uniform_int_values[9];
-    let x_33 : i32 = x_6.x_GLF_uniform_int_values[4];
-    x_GLF_color = vec4<f32>(f32(x_30), f32(x_31), f32(x_32), f32(x_33));
-  } else {
-    let x_34 : i32 = x_6.x_GLF_uniform_int_values[9];
-    let x_146 : f32 = f32(x_34);
-    x_GLF_color = vec4<f32>(x_146, x_146, x_146, x_146);
-  }
-  let x_149 : f32 = v0.x;
-  let x_151 : f32 = v1.x;
-  if ((x_149 < x_151)) {
-    let x_156 : f32 = x_15.x_GLF_uniform_float_values[0];
-    x_GLF_color.y = x_156;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7fed836..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_30 = asint(x_6[1].x);
-  i = x_30;
-  while (true) {
-    const int x_35 = i;
-    const int x_37 = asint(x_6[2].x);
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    v = tint_unpack4x8unorm(100u);
-    const float x_42 = v.x;
-    if ((int(x_42) > i)) {
-      const int x_49 = asint(x_6[1].x);
-      const float x_50 = float(x_49);
-      x_GLF_color = float4(x_50, x_50, x_50, x_50);
-      return;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_58 = asint(x_6[1].x);
-  const int x_61 = asint(x_6[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_64 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 62f0616..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  float4 v = 0.0f;
-  int const x_30 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_30;
-  while (true) {
-    int const x_35 = i;
-    int const x_37 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    v = unpack_unorm4x8_to_float(100u);
-    float const x_42 = v.x;
-    int const x_44 = i;
-    if ((int(x_42) > x_44)) {
-      int const x_49 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      float const x_50 = float(x_49);
-      *(tint_symbol_3) = float4(x_50, x_50, x_50, x_50);
-      return;
-    }
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_61 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_64 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e81d465..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,136 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 84
-; Schema: 0
-               OpCapability Shader
-         %43 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-   %uint_100 = OpConstant %uint 100
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %73 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %28 = OpLoad %int %27
-               OpStore %i %28
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %i
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %36 = OpLoad %int %35
-         %37 = OpSLessThan %bool %33 %36
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %30
-         %39 = OpLabel
-         %42 = OpExtInst %v4float %43 UnpackUnorm4x8 %uint_100
-               OpStore %v %42
-         %46 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %47 = OpLoad %float %46
-         %48 = OpLoad %int %i
-         %49 = OpConvertFToS %int %47
-         %50 = OpSGreaterThan %bool %49 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %54 = OpLoad %int %53
-         %55 = OpConvertSToF %float %54
-         %56 = OpCompositeConstruct %v4float %55 %55 %55 %55
-               OpStore %x_GLF_color %56
-               OpReturn
-         %51 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %57 = OpLoad %int %i
-         %58 = OpIAdd %int %57 %int_1
-               OpStore %i %58
-               OpBranch %29
-         %30 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %73
-         %76 = OpLabel
-         %77 = OpFunctionCall %void %main_1
-         %78 = OpLoad %v4float %x_GLF_color
-         %79 = OpCompositeConstruct %main_out %78
-               OpReturnValue %79
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %81 = OpLabel
-         %82 = OpFunctionCall %main_out %main_inner
-         %83 = OpCompositeExtract %v4float %82 0
-               OpStore %x_GLF_color_1_1 %83
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a67101b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var v : vec4<f32>;
-  let x_30 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_30;
-  loop {
-    let x_35 : i32 = i;
-    let x_37 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    v = unpack4x8unorm(100u);
-    let x_42 : f32 = v.x;
-    let x_44 : i32 = i;
-    if ((i32(x_42) > x_44)) {
-      let x_49 : i32 = x_6.x_GLF_uniform_int_values[1];
-      let x_50 : f32 = f32(x_49);
-      x_GLF_color = vec4<f32>(x_50, x_50, x_50, x_50);
-      return;
-    }
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_61 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_64 : i32 = x_6.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7fed836..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_30 = asint(x_6[1].x);
-  i = x_30;
-  while (true) {
-    const int x_35 = i;
-    const int x_37 = asint(x_6[2].x);
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    v = tint_unpack4x8unorm(100u);
-    const float x_42 = v.x;
-    if ((int(x_42) > i)) {
-      const int x_49 = asint(x_6[1].x);
-      const float x_50 = float(x_49);
-      x_GLF_color = float4(x_50, x_50, x_50, x_50);
-      return;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_58 = asint(x_6[1].x);
-  const int x_61 = asint(x_6[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_64 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 62f0616..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  float4 v = 0.0f;
-  int const x_30 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_30;
-  while (true) {
-    int const x_35 = i;
-    int const x_37 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    v = unpack_unorm4x8_to_float(100u);
-    float const x_42 = v.x;
-    int const x_44 = i;
-    if ((int(x_42) > x_44)) {
-      int const x_49 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      float const x_50 = float(x_49);
-      *(tint_symbol_3) = float4(x_50, x_50, x_50, x_50);
-      return;
-    }
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_61 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_64 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e81d465..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,136 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 84
-; Schema: 0
-               OpCapability Shader
-         %43 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-   %uint_100 = OpConstant %uint 100
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %73 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %28 = OpLoad %int %27
-               OpStore %i %28
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %i
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %36 = OpLoad %int %35
-         %37 = OpSLessThan %bool %33 %36
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %30
-         %39 = OpLabel
-         %42 = OpExtInst %v4float %43 UnpackUnorm4x8 %uint_100
-               OpStore %v %42
-         %46 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %47 = OpLoad %float %46
-         %48 = OpLoad %int %i
-         %49 = OpConvertFToS %int %47
-         %50 = OpSGreaterThan %bool %49 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %54 = OpLoad %int %53
-         %55 = OpConvertSToF %float %54
-         %56 = OpCompositeConstruct %v4float %55 %55 %55 %55
-               OpStore %x_GLF_color %56
-               OpReturn
-         %51 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %57 = OpLoad %int %i
-         %58 = OpIAdd %int %57 %int_1
-               OpStore %i %58
-               OpBranch %29
-         %30 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %73
-         %76 = OpLabel
-         %77 = OpFunctionCall %void %main_1
-         %78 = OpLoad %v4float %x_GLF_color
-         %79 = OpCompositeConstruct %main_out %78
-               OpReturnValue %79
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %81 = OpLabel
-         %82 = OpFunctionCall %main_out %main_inner
-         %83 = OpCompositeExtract %v4float %82 0
-               OpStore %x_GLF_color_1_1 %83
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a67101b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-apfloat-unpackunorm-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var v : vec4<f32>;
-  let x_30 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_30;
-  loop {
-    let x_35 : i32 = i;
-    let x_37 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    v = unpack4x8unorm(100u);
-    let x_42 : f32 = v.x;
-    let x_44 : i32 = i;
-    if ((i32(x_42) > x_44)) {
-      let x_49 : i32 = x_6.x_GLF_uniform_int_values[1];
-      let x_50 : f32 = f32(x_49);
-      x_GLF_color = vec4<f32>(x_50, x_50, x_50, x_50);
-      return;
-    }
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_61 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_64 : i32 = x_6.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4b0f991..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int arr[3] = (int[3])0;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  const int x_40 = asint(x_7[1].x);
-  const int x_42 = asint(x_7[1].x);
-  const int x_44 = asint(x_7[1].x);
-  const int tint_symbol_5[3] = {x_40, x_42, x_44};
-  arr = tint_symbol_5;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const int x_49 = arr[x_47];
-  a = x_49;
-  b = (a - 1);
-  const float x_53 = gl_FragCoord.x;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_55 = asfloat(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_53 < x_55)) {
-    b = (b + 1);
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_62 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  c = x_62;
-  const int x_63 = c;
-  const int x_65 = asint(x_7[1].x);
-  const int x_67 = asint(x_7[2].x);
-  arr[clamp(x_63, x_65, x_67)] = b;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_72 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_74 = arr[x_72];
-  const int x_77 = asint(x_7[1].x);
-  const int x_79 = arr[x_77];
-  const int x_82 = asint(x_7[1].x);
-  const int x_84 = arr[x_82];
-  const int x_87 = asint(x_7[2].x);
-  const int x_89 = arr[x_87];
-  x_GLF_color = float4(float(x_74), float(x_79), float(x_84), float(x_89));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.msl
deleted file mode 100644
index ace5774..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_2 arr = {};
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int const x_40 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_42 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_44 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_40, x_42, x_44}};
-  arr = tint_symbol_2;
-  int const x_47 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_49 = arr.arr[x_47];
-  a = x_49;
-  int const x_50 = a;
-  b = as_type<int>((as_type<uint>(x_50) - as_type<uint>(1)));
-  float const x_53 = (*(tint_symbol_4)).x;
-  float const x_55 = x_11.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_53 < x_55)) {
-    int const x_59 = b;
-    b = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-  }
-  int const x_62 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  c = x_62;
-  int const x_63 = c;
-  int const x_65 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_67 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  int const x_69 = b;
-  arr.arr[clamp(x_63, x_65, x_67)] = x_69;
-  int const x_72 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_74 = arr.arr[x_72];
-  int const x_77 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_79 = arr.arr[x_77];
-  int const x_82 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_84 = arr.arr[x_82];
-  int const x_87 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  int const x_89 = arr.arr[x_87];
-  *(tint_symbol_5) = float4(float(x_74), float(x_79), float(x_84), float(x_89));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, x_11, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c84ec50..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,173 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 111
-; Schema: 0
-               OpCapability Shader
-         %75 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpDecorate %_arr_int_uint_3_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_arr_int_uint_3_0 = OpTypeArray %int %uint_3
-%_ptr_Function__arr_int_uint_3_0 = OpTypePointer Function %_arr_int_uint_3_0
-         %30 = OpConstantNull %_arr_int_uint_3_0
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_int_uint_3_0 Function %30
-          %a = OpVariable %_ptr_Function_int Function %33
-          %b = OpVariable %_ptr_Function_int Function %33
-          %c = OpVariable %_ptr_Function_int Function %33
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %40 = OpLoad %int %39
-         %41 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpCompositeConstruct %_arr_int_uint_3_0 %40 %42 %44
-               OpStore %arr %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Function_int %arr %48
-         %50 = OpLoad %int %49
-               OpStore %a %50
-         %51 = OpLoad %int %a
-         %52 = OpISub %int %51 %int_1
-               OpStore %b %52
-         %54 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %55 = OpLoad %float %54
-         %57 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %59 = OpFOrdLessThan %bool %55 %58
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %61
-         %62 = OpLabel
-         %63 = OpLoad %int %b
-         %64 = OpIAdd %int %63 %int_1
-               OpStore %b %64
-               OpBranch %61
-         %61 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %66 = OpLoad %int %65
-               OpStore %c %66
-         %67 = OpLoad %int %c
-         %68 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %71 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %72 = OpLoad %int %71
-         %73 = OpLoad %int %b
-         %74 = OpExtInst %int %75 SClamp %67 %69 %72
-         %76 = OpAccessChain %_ptr_Function_int %arr %74
-               OpStore %76 %73
-         %77 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Function_int %arr %78
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Function_int %arr %82
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Function_int %arr %86
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Function_int %arr %90
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %80
-         %94 = OpConvertSToF %float %84
-         %95 = OpConvertSToF %float %88
-         %96 = OpConvertSToF %float %92
-         %97 = OpCompositeConstruct %v4float %93 %94 %95 %96
-               OpStore %x_GLF_color %97
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %102 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %103 = OpFunctionCall %void %main_1
-        %104 = OpLoad %v4float %x_GLF_color
-        %105 = OpCompositeConstruct %main_out %104
-               OpReturnValue %105
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %107 = OpLabel
-        %109 = OpLoad %v4float %gl_FragCoord_param_1
-        %108 = OpFunctionCall %main_out %main_inner %109
-        %110 = OpCompositeExtract %v4float %108 0
-               OpStore %x_GLF_color_1_1 %110
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index eac5611..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,72 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<i32, 3>;
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  let x_40 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_44 : i32 = x_7.x_GLF_uniform_int_values[1];
-  arr = array<i32, 3>(x_40, x_42, x_44);
-  let x_47 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_49 : i32 = arr[x_47];
-  a = x_49;
-  let x_50 : i32 = a;
-  b = (x_50 - 1);
-  let x_53 : f32 = gl_FragCoord.x;
-  let x_55 : f32 = x_11.x_GLF_uniform_float_values[0];
-  if ((x_53 < x_55)) {
-    let x_59 : i32 = b;
-    b = (x_59 + 1);
-  }
-  let x_62 : i32 = x_7.x_GLF_uniform_int_values[0];
-  c = x_62;
-  let x_63 : i32 = c;
-  let x_65 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_67 : i32 = x_7.x_GLF_uniform_int_values[2];
-  let x_69 : i32 = b;
-  arr[clamp(x_63, x_65, x_67)] = x_69;
-  let x_72 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_74 : i32 = arr[x_72];
-  let x_77 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_79 : i32 = arr[x_77];
-  let x_82 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_84 : i32 = arr[x_82];
-  let x_87 : i32 = x_7.x_GLF_uniform_int_values[2];
-  let x_89 : i32 = arr[x_87];
-  x_GLF_color = vec4<f32>(f32(x_74), f32(x_79), f32(x_84), f32(x_89));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4b0f991..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int arr[3] = (int[3])0;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  const int x_40 = asint(x_7[1].x);
-  const int x_42 = asint(x_7[1].x);
-  const int x_44 = asint(x_7[1].x);
-  const int tint_symbol_5[3] = {x_40, x_42, x_44};
-  arr = tint_symbol_5;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const int x_49 = arr[x_47];
-  a = x_49;
-  b = (a - 1);
-  const float x_53 = gl_FragCoord.x;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_55 = asfloat(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_53 < x_55)) {
-    b = (b + 1);
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_62 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  c = x_62;
-  const int x_63 = c;
-  const int x_65 = asint(x_7[1].x);
-  const int x_67 = asint(x_7[2].x);
-  arr[clamp(x_63, x_65, x_67)] = b;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_72 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_74 = arr[x_72];
-  const int x_77 = asint(x_7[1].x);
-  const int x_79 = arr[x_77];
-  const int x_82 = asint(x_7[1].x);
-  const int x_84 = arr[x_82];
-  const int x_87 = asint(x_7[2].x);
-  const int x_89 = arr[x_87];
-  x_GLF_color = float4(float(x_74), float(x_79), float(x_84), float(x_89));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.msl
deleted file mode 100644
index ace5774..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_2 arr = {};
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int const x_40 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_42 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_44 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_40, x_42, x_44}};
-  arr = tint_symbol_2;
-  int const x_47 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_49 = arr.arr[x_47];
-  a = x_49;
-  int const x_50 = a;
-  b = as_type<int>((as_type<uint>(x_50) - as_type<uint>(1)));
-  float const x_53 = (*(tint_symbol_4)).x;
-  float const x_55 = x_11.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_53 < x_55)) {
-    int const x_59 = b;
-    b = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-  }
-  int const x_62 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  c = x_62;
-  int const x_63 = c;
-  int const x_65 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_67 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  int const x_69 = b;
-  arr.arr[clamp(x_63, x_65, x_67)] = x_69;
-  int const x_72 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_74 = arr.arr[x_72];
-  int const x_77 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_79 = arr.arr[x_77];
-  int const x_82 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_84 = arr.arr[x_82];
-  int const x_87 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  int const x_89 = arr.arr[x_87];
-  *(tint_symbol_5) = float4(float(x_74), float(x_79), float(x_84), float(x_89));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, x_11, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c84ec50..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,173 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 111
-; Schema: 0
-               OpCapability Shader
-         %75 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpDecorate %_arr_int_uint_3_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_arr_int_uint_3_0 = OpTypeArray %int %uint_3
-%_ptr_Function__arr_int_uint_3_0 = OpTypePointer Function %_arr_int_uint_3_0
-         %30 = OpConstantNull %_arr_int_uint_3_0
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_int_uint_3_0 Function %30
-          %a = OpVariable %_ptr_Function_int Function %33
-          %b = OpVariable %_ptr_Function_int Function %33
-          %c = OpVariable %_ptr_Function_int Function %33
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %40 = OpLoad %int %39
-         %41 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpCompositeConstruct %_arr_int_uint_3_0 %40 %42 %44
-               OpStore %arr %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Function_int %arr %48
-         %50 = OpLoad %int %49
-               OpStore %a %50
-         %51 = OpLoad %int %a
-         %52 = OpISub %int %51 %int_1
-               OpStore %b %52
-         %54 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %55 = OpLoad %float %54
-         %57 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %59 = OpFOrdLessThan %bool %55 %58
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %61
-         %62 = OpLabel
-         %63 = OpLoad %int %b
-         %64 = OpIAdd %int %63 %int_1
-               OpStore %b %64
-               OpBranch %61
-         %61 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %66 = OpLoad %int %65
-               OpStore %c %66
-         %67 = OpLoad %int %c
-         %68 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %71 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %72 = OpLoad %int %71
-         %73 = OpLoad %int %b
-         %74 = OpExtInst %int %75 SClamp %67 %69 %72
-         %76 = OpAccessChain %_ptr_Function_int %arr %74
-               OpStore %76 %73
-         %77 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Function_int %arr %78
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Function_int %arr %82
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Function_int %arr %86
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Function_int %arr %90
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %80
-         %94 = OpConvertSToF %float %84
-         %95 = OpConvertSToF %float %88
-         %96 = OpConvertSToF %float %92
-         %97 = OpCompositeConstruct %v4float %93 %94 %95 %96
-               OpStore %x_GLF_color %97
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %102 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %103 = OpFunctionCall %void %main_1
-        %104 = OpLoad %v4float %x_GLF_color
-        %105 = OpCompositeConstruct %main_out %104
-               OpReturnValue %105
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %107 = OpLabel
-        %109 = OpLoad %v4float %gl_FragCoord_param_1
-        %108 = OpFunctionCall %main_out %main_inner %109
-        %110 = OpCompositeExtract %v4float %108 0
-               OpStore %x_GLF_color_1_1 %110
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index eac5611..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-accesses-clamp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,72 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<i32, 3>;
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  let x_40 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_44 : i32 = x_7.x_GLF_uniform_int_values[1];
-  arr = array<i32, 3>(x_40, x_42, x_44);
-  let x_47 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_49 : i32 = arr[x_47];
-  a = x_49;
-  let x_50 : i32 = a;
-  b = (x_50 - 1);
-  let x_53 : f32 = gl_FragCoord.x;
-  let x_55 : f32 = x_11.x_GLF_uniform_float_values[0];
-  if ((x_53 < x_55)) {
-    let x_59 : i32 = b;
-    b = (x_59 + 1);
-  }
-  let x_62 : i32 = x_7.x_GLF_uniform_int_values[0];
-  c = x_62;
-  let x_63 : i32 = c;
-  let x_65 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_67 : i32 = x_7.x_GLF_uniform_int_values[2];
-  let x_69 : i32 = b;
-  arr[clamp(x_63, x_65, x_67)] = x_69;
-  let x_72 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_74 : i32 = arr[x_72];
-  let x_77 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_79 : i32 = arr[x_77];
-  let x_82 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_84 : i32 = arr[x_82];
-  let x_87 : i32 = x_7.x_GLF_uniform_int_values[2];
-  let x_89 : i32 = arr[x_87];
-  x_GLF_color = vec4<f32>(f32(x_74), f32(x_79), f32(x_84), f32(x_89));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 34f8a21..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,210 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[20];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_19 : register(b1, space0) {
-  uint4 x_19[1];
-};
-
-void main_1() {
-  int arr0[10] = (int[10])0;
-  int arr1[10] = (int[10])0;
-  int a = 0;
-  int limiter0 = 0;
-  int limiter1 = 0;
-  int b = 0;
-  int limiter2 = 0;
-  int limiter3 = 0;
-  int d = 0;
-  int ref0[10] = (int[10])0;
-  int ref1[10] = (int[10])0;
-  int i = 0;
-  const int x_59 = asint(x_6[3].x);
-  const int x_61 = asint(x_6[2].x);
-  const int x_63 = asint(x_6[4].x);
-  const int x_65 = asint(x_6[5].x);
-  const int x_67 = asint(x_6[6].x);
-  const int x_69 = asint(x_6[7].x);
-  const int x_71 = asint(x_6[8].x);
-  const int x_73 = asint(x_6[9].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_75 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_77 = asint(x_6[10].x);
-  const int tint_symbol_2[10] = {x_59, x_61, x_63, x_65, x_67, x_69, x_71, x_73, x_75, x_77};
-  arr0 = tint_symbol_2;
-  const int x_80 = asint(x_6[1].x);
-  const int x_82 = asint(x_6[12].x);
-  const int x_84 = asint(x_6[15].x);
-  const int x_86 = asint(x_6[16].x);
-  const int x_88 = asint(x_6[17].x);
-  const int x_90 = asint(x_6[13].x);
-  const int x_92 = asint(x_6[14].x);
-  const int x_94 = asint(x_6[11].x);
-  const int x_96 = asint(x_6[18].x);
-  const int x_98 = asint(x_6[19].x);
-  const int tint_symbol_3[10] = {x_80, x_82, x_84, x_86, x_88, x_90, x_92, x_94, x_96, x_98};
-  arr1 = tint_symbol_3;
-  const int x_101 = asint(x_6[8].x);
-  a = x_101;
-  while (true) {
-    const int x_106 = a;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_108 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_106 < x_108)) {
-    } else {
-      break;
-    }
-    const int x_112 = asint(x_6[3].x);
-    limiter0 = x_112;
-    while (true) {
-      const int x_117 = limiter0;
-      const int x_119 = asint(x_6[4].x);
-      if ((x_117 < x_119)) {
-      } else {
-        break;
-      }
-      limiter0 = (limiter0 + 1);
-      const int x_125 = asint(x_6[2].x);
-      limiter1 = x_125;
-      const int x_127 = asint(x_6[3].x);
-      b = x_127;
-      while (true) {
-        const int x_132 = b;
-        const int x_134 = asint(x_6[1].x);
-        if ((x_132 < x_134)) {
-        } else {
-          break;
-        }
-        const int x_137 = limiter1;
-        const int x_139 = asint(x_6[5].x);
-        if ((x_137 > x_139)) {
-          break;
-        }
-        limiter1 = (limiter1 + 1);
-        const int x_145 = b;
-        const int x_148 = arr1[a];
-        arr0[x_145] = x_148;
-        {
-          b = (b + 1);
-        }
-      }
-    }
-    limiter2 = 0;
-    while (true) {
-      if ((limiter2 < 5)) {
-      } else {
-        break;
-      }
-      limiter2 = (limiter2 + 1);
-      const int x_162 = arr1[1];
-      arr0[1] = x_162;
-    }
-    while (true) {
-      limiter3 = 0;
-      d = 0;
-      {
-        for(; (d < 10); d = (d + 1)) {
-          if ((limiter3 > 4)) {
-            break;
-          }
-          limiter3 = (limiter3 + 1);
-          const int x_181 = d;
-          const int x_184 = arr0[d];
-          arr1[x_181] = x_184;
-        }
-      }
-      {
-        const int x_189 = asint(x_6[2].x);
-        const int x_191 = asint(x_6[3].x);
-        if ((x_189 == x_191)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const int x_196 = asint(x_6[11].x);
-  const int x_198 = asint(x_6[12].x);
-  const int x_200 = asint(x_6[11].x);
-  const int x_202 = asint(x_6[5].x);
-  const int x_204 = asint(x_6[6].x);
-  const int x_206 = asint(x_6[7].x);
-  const int x_208 = asint(x_6[8].x);
-  const int x_210 = asint(x_6[9].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_212 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_214 = asint(x_6[10].x);
-  const int tint_symbol_4[10] = {x_196, x_198, x_200, x_202, x_204, x_206, x_208, x_210, x_212, x_214};
-  ref0 = tint_symbol_4;
-  const int x_217 = asint(x_6[11].x);
-  const int x_219 = asint(x_6[12].x);
-  const int x_221 = asint(x_6[11].x);
-  const int x_223 = asint(x_6[5].x);
-  const int x_225 = asint(x_6[6].x);
-  const int x_227 = asint(x_6[13].x);
-  const int x_229 = asint(x_6[14].x);
-  const int x_231 = asint(x_6[11].x);
-  const int x_233 = asint(x_6[18].x);
-  const int x_235 = asint(x_6[19].x);
-  const int tint_symbol_5[10] = {x_217, x_219, x_221, x_223, x_225, x_227, x_229, x_231, x_233, x_235};
-  ref1 = tint_symbol_5;
-  const int x_238 = asint(x_6[2].x);
-  const int x_241 = asint(x_6[3].x);
-  const int x_244 = asint(x_6[3].x);
-  const int x_247 = asint(x_6[2].x);
-  x_GLF_color = float4(float(x_238), float(x_241), float(x_244), float(x_247));
-  const int x_251 = asint(x_6[3].x);
-  i = x_251;
-  while (true) {
-    bool x_277 = false;
-    bool x_278_phi = false;
-    const int x_256 = i;
-    const int x_258 = asint(x_6[1].x);
-    if ((x_256 < x_258)) {
-    } else {
-      break;
-    }
-    const int x_263 = arr0[i];
-    const int x_266 = ref0[i];
-    const bool x_267 = (x_263 != x_266);
-    x_278_phi = x_267;
-    if (!(x_267)) {
-      const int x_273 = arr1[i];
-      const int x_276 = ref1[i];
-      x_277 = (x_273 != x_276);
-      x_278_phi = x_277;
-    }
-    if (x_278_phi) {
-      const int x_282 = asint(x_6[3].x);
-      const float x_283 = float(x_282);
-      x_GLF_color = float4(x_283, x_283, x_283, x_283);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.msl
deleted file mode 100644
index fdc26d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,243 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[20];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct buf1 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper_1 {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper_1 arr0 = {};
-  tint_array_wrapper_1 arr1 = {};
-  int a = 0;
-  int limiter0 = 0;
-  int limiter1 = 0;
-  int b = 0;
-  int limiter2 = 0;
-  int limiter3 = 0;
-  int d = 0;
-  tint_array_wrapper_1 ref0 = {};
-  tint_array_wrapper_1 ref1 = {};
-  int i = 0;
-  int const x_59 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_61 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_63 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_65 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_67 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_69 = x_6.x_GLF_uniform_int_values.arr[7].el;
-  int const x_71 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_73 = x_6.x_GLF_uniform_int_values.arr[9].el;
-  int const x_75 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_77 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_59, x_61, x_63, x_65, x_67, x_69, x_71, x_73, x_75, x_77}};
-  arr0 = tint_symbol_2;
-  int const x_80 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_82 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_84 = x_6.x_GLF_uniform_int_values.arr[15].el;
-  int const x_86 = x_6.x_GLF_uniform_int_values.arr[16].el;
-  int const x_88 = x_6.x_GLF_uniform_int_values.arr[17].el;
-  int const x_90 = x_6.x_GLF_uniform_int_values.arr[13].el;
-  int const x_92 = x_6.x_GLF_uniform_int_values.arr[14].el;
-  int const x_94 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_96 = x_6.x_GLF_uniform_int_values.arr[18].el;
-  int const x_98 = x_6.x_GLF_uniform_int_values.arr[19].el;
-  tint_array_wrapper_1 const tint_symbol_3 = {.arr={x_80, x_82, x_84, x_86, x_88, x_90, x_92, x_94, x_96, x_98}};
-  arr1 = tint_symbol_3;
-  int const x_101 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  a = x_101;
-  while (true) {
-    int const x_106 = a;
-    int const x_108 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_106 < x_108)) {
-    } else {
-      break;
-    }
-    int const x_112 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    limiter0 = x_112;
-    while (true) {
-      int const x_117 = limiter0;
-      int const x_119 = x_6.x_GLF_uniform_int_values.arr[4].el;
-      if ((x_117 < x_119)) {
-      } else {
-        break;
-      }
-      int const x_122 = limiter0;
-      limiter0 = as_type<int>((as_type<uint>(x_122) + as_type<uint>(1)));
-      int const x_125 = x_6.x_GLF_uniform_int_values.arr[2].el;
-      limiter1 = x_125;
-      int const x_127 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      b = x_127;
-      while (true) {
-        int const x_132 = b;
-        int const x_134 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        if ((x_132 < x_134)) {
-        } else {
-          break;
-        }
-        int const x_137 = limiter1;
-        int const x_139 = x_6.x_GLF_uniform_int_values.arr[5].el;
-        if ((x_137 > x_139)) {
-          break;
-        }
-        int const x_143 = limiter1;
-        limiter1 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-        int const x_145 = b;
-        int const x_146 = a;
-        int const x_148 = arr1.arr[x_146];
-        arr0.arr[x_145] = x_148;
-        {
-          int const x_150 = b;
-          b = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-        }
-      }
-    }
-    limiter2 = 0;
-    while (true) {
-      int const x_156 = limiter2;
-      if ((x_156 < 5)) {
-      } else {
-        break;
-      }
-      int const x_159 = limiter2;
-      limiter2 = as_type<int>((as_type<uint>(x_159) + as_type<uint>(1)));
-      int const x_162 = arr1.arr[1];
-      arr0.arr[1] = x_162;
-    }
-    while (true) {
-      limiter3 = 0;
-      d = 0;
-      while (true) {
-        int const x_172 = d;
-        if ((x_172 < 10)) {
-        } else {
-          break;
-        }
-        int const x_175 = limiter3;
-        if ((x_175 > 4)) {
-          break;
-        }
-        int const x_179 = limiter3;
-        limiter3 = as_type<int>((as_type<uint>(x_179) + as_type<uint>(1)));
-        int const x_181 = d;
-        int const x_182 = d;
-        int const x_184 = arr0.arr[x_182];
-        arr1.arr[x_181] = x_184;
-        {
-          int const x_186 = d;
-          d = as_type<int>((as_type<uint>(x_186) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_189 = x_6.x_GLF_uniform_int_values.arr[2].el;
-        int const x_191 = x_6.x_GLF_uniform_int_values.arr[3].el;
-        if ((x_189 == x_191)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      int const x_193 = a;
-      a = as_type<int>((as_type<uint>(x_193) + as_type<uint>(1)));
-    }
-  }
-  int const x_196 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_198 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_200 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_202 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_204 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_206 = x_6.x_GLF_uniform_int_values.arr[7].el;
-  int const x_208 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_210 = x_6.x_GLF_uniform_int_values.arr[9].el;
-  int const x_212 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_214 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  tint_array_wrapper_1 const tint_symbol_4 = {.arr={x_196, x_198, x_200, x_202, x_204, x_206, x_208, x_210, x_212, x_214}};
-  ref0 = tint_symbol_4;
-  int const x_217 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_219 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_221 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_223 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_225 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_227 = x_6.x_GLF_uniform_int_values.arr[13].el;
-  int const x_229 = x_6.x_GLF_uniform_int_values.arr[14].el;
-  int const x_231 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_233 = x_6.x_GLF_uniform_int_values.arr[18].el;
-  int const x_235 = x_6.x_GLF_uniform_int_values.arr[19].el;
-  tint_array_wrapper_1 const tint_symbol_5 = {.arr={x_217, x_219, x_221, x_223, x_225, x_227, x_229, x_231, x_233, x_235}};
-  ref1 = tint_symbol_5;
-  int const x_238 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_241 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_244 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_247 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  *(tint_symbol_7) = float4(float(x_238), float(x_241), float(x_244), float(x_247));
-  int const x_251 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  i = x_251;
-  while (true) {
-    bool x_277 = false;
-    bool x_278_phi = false;
-    int const x_256 = i;
-    int const x_258 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_256 < x_258)) {
-    } else {
-      break;
-    }
-    int const x_261 = i;
-    int const x_263 = arr0.arr[x_261];
-    int const x_264 = i;
-    int const x_266 = ref0.arr[x_264];
-    bool const x_267 = (x_263 != x_266);
-    x_278_phi = x_267;
-    if (!(x_267)) {
-      int const x_271 = i;
-      int const x_273 = arr1.arr[x_271];
-      int const x_274 = i;
-      int const x_276 = ref1.arr[x_274];
-      x_277 = (x_273 != x_276);
-      x_278_phi = x_277;
-    }
-    bool const x_278 = x_278_phi;
-    if (x_278) {
-      int const x_282 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      float const x_283 = float(x_282);
-      *(tint_symbol_7) = float4(x_283, x_283, x_283, x_283);
-    }
-    {
-      int const x_285 = i;
-      i = as_type<int>((as_type<uint>(x_285) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_8) {
-  main_1(x_6, tint_symbol_8);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4698e5c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,475 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 320
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "one"
-               OpName %x_19 "x_19"
-               OpName %main_1 "main_1"
-               OpName %arr0 "arr0"
-               OpName %arr1 "arr1"
-               OpName %a "a"
-               OpName %limiter0 "limiter0"
-               OpName %limiter1 "limiter1"
-               OpName %b "b"
-               OpName %limiter2 "limiter2"
-               OpName %limiter3 "limiter3"
-               OpName %d "d"
-               OpName %ref0 "ref0"
-               OpName %ref1 "ref1"
-               OpName %i "i"
-               OpName %x_277 "x_277"
-               OpName %x_278_phi "x_278_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_20 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 1
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-%_arr_int_uint_20 = OpTypeArray %int %uint_20
-       %buf0 = OpTypeStruct %_arr_int_uint_20
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %buf1 = OpTypeStruct %int
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_19 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %26 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_14 = OpConstant %int 14
-     %int_11 = OpConstant %int 11
-     %int_18 = OpConstant %int 18
-     %int_19 = OpConstant %int 19
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-        %273 = OpConstantNull %bool
-   %main_out = OpTypeStruct %v4float
-        %309 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-       %arr0 = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-       %arr1 = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-          %a = OpVariable %_ptr_Function_int Function %30
-   %limiter0 = OpVariable %_ptr_Function_int Function %30
-   %limiter1 = OpVariable %_ptr_Function_int Function %30
-          %b = OpVariable %_ptr_Function_int Function %30
-   %limiter2 = OpVariable %_ptr_Function_int Function %30
-   %limiter3 = OpVariable %_ptr_Function_int Function %30
-          %d = OpVariable %_ptr_Function_int Function %30
-       %ref0 = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-       %ref1 = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-          %i = OpVariable %_ptr_Function_int Function %30
-      %x_277 = OpVariable %_ptr_Function_bool Function %273
-  %x_278_phi = OpVariable %_ptr_Function_bool Function %273
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %44 = OpLoad %int %43
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %47 = OpLoad %int %46
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %50 = OpLoad %int %49
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %53 = OpLoad %int %52
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-         %56 = OpLoad %int %55
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-         %59 = OpLoad %int %58
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-         %62 = OpLoad %int %61
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-         %65 = OpLoad %int %64
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-         %71 = OpLoad %int %70
-         %72 = OpCompositeConstruct %_arr_int_uint_10 %44 %47 %50 %53 %56 %59 %62 %65 %68 %71
-               OpStore %arr0 %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-         %78 = OpLoad %int %77
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_15
-         %81 = OpLoad %int %80
-         %83 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_16
-         %84 = OpLoad %int %83
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_17
-         %87 = OpLoad %int %86
-         %89 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_13
-         %90 = OpLoad %int %89
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_14
-         %93 = OpLoad %int %92
-         %95 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-         %96 = OpLoad %int %95
-         %98 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_18
-         %99 = OpLoad %int %98
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_19
-        %102 = OpLoad %int %101
-        %103 = OpCompositeConstruct %_arr_int_uint_10 %75 %78 %81 %84 %87 %90 %93 %96 %99 %102
-               OpStore %arr1 %103
-        %104 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-        %105 = OpLoad %int %104
-               OpStore %a %105
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %a
-        %111 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %112 = OpLoad %int %111
-        %113 = OpSLessThan %bool %110 %112
-               OpSelectionMerge %115 None
-               OpBranchConditional %113 %116 %117
-        %116 = OpLabel
-               OpBranch %115
-        %117 = OpLabel
-               OpBranch %107
-        %115 = OpLabel
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %119 = OpLoad %int %118
-               OpStore %limiter0 %119
-               OpBranch %120
-        %120 = OpLabel
-               OpLoopMerge %121 %122 None
-               OpBranch %123
-        %123 = OpLabel
-        %124 = OpLoad %int %limiter0
-        %125 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %126 = OpLoad %int %125
-        %127 = OpSLessThan %bool %124 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-               OpBranch %128
-        %130 = OpLabel
-               OpBranch %121
-        %128 = OpLabel
-        %131 = OpLoad %int %limiter0
-        %132 = OpIAdd %int %131 %int_1
-               OpStore %limiter0 %132
-        %133 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %134 = OpLoad %int %133
-               OpStore %limiter1 %134
-        %135 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %136 = OpLoad %int %135
-               OpStore %b %136
-               OpBranch %137
-        %137 = OpLabel
-               OpLoopMerge %138 %139 None
-               OpBranch %140
-        %140 = OpLabel
-        %141 = OpLoad %int %b
-        %142 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %143 = OpLoad %int %142
-        %144 = OpSLessThan %bool %141 %143
-               OpSelectionMerge %145 None
-               OpBranchConditional %144 %146 %147
-        %146 = OpLabel
-               OpBranch %145
-        %147 = OpLabel
-               OpBranch %138
-        %145 = OpLabel
-        %148 = OpLoad %int %limiter1
-        %149 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %150 = OpLoad %int %149
-        %151 = OpSGreaterThan %bool %148 %150
-               OpSelectionMerge %152 None
-               OpBranchConditional %151 %153 %152
-        %153 = OpLabel
-               OpBranch %138
-        %152 = OpLabel
-        %154 = OpLoad %int %limiter1
-        %155 = OpIAdd %int %154 %int_1
-               OpStore %limiter1 %155
-        %156 = OpLoad %int %b
-        %157 = OpLoad %int %a
-        %158 = OpAccessChain %_ptr_Function_int %arr1 %157
-        %159 = OpLoad %int %158
-        %160 = OpAccessChain %_ptr_Function_int %arr0 %156
-               OpStore %160 %159
-               OpBranch %139
-        %139 = OpLabel
-        %161 = OpLoad %int %b
-        %162 = OpIAdd %int %161 %int_1
-               OpStore %b %162
-               OpBranch %137
-        %138 = OpLabel
-               OpBranch %122
-        %122 = OpLabel
-               OpBranch %120
-        %121 = OpLabel
-               OpStore %limiter2 %int_0
-               OpBranch %163
-        %163 = OpLabel
-               OpLoopMerge %164 %165 None
-               OpBranch %166
-        %166 = OpLabel
-        %167 = OpLoad %int %limiter2
-        %168 = OpSLessThan %bool %167 %int_5
-               OpSelectionMerge %169 None
-               OpBranchConditional %168 %170 %171
-        %170 = OpLabel
-               OpBranch %169
-        %171 = OpLabel
-               OpBranch %164
-        %169 = OpLabel
-        %172 = OpLoad %int %limiter2
-        %173 = OpIAdd %int %172 %int_1
-               OpStore %limiter2 %173
-        %174 = OpAccessChain %_ptr_Function_int %arr1 %int_1
-        %175 = OpLoad %int %174
-        %176 = OpAccessChain %_ptr_Function_int %arr0 %int_1
-               OpStore %176 %175
-               OpBranch %165
-        %165 = OpLabel
-               OpBranch %163
-        %164 = OpLabel
-               OpBranch %177
-        %177 = OpLabel
-               OpLoopMerge %178 %179 None
-               OpBranch %180
-        %180 = OpLabel
-               OpStore %limiter3 %int_0
-               OpStore %d %int_0
-               OpBranch %181
-        %181 = OpLabel
-               OpLoopMerge %182 %183 None
-               OpBranch %184
-        %184 = OpLabel
-        %185 = OpLoad %int %d
-        %186 = OpSLessThan %bool %185 %int_10
-               OpSelectionMerge %187 None
-               OpBranchConditional %186 %188 %189
-        %188 = OpLabel
-               OpBranch %187
-        %189 = OpLabel
-               OpBranch %182
-        %187 = OpLabel
-        %190 = OpLoad %int %limiter3
-        %191 = OpSGreaterThan %bool %190 %int_4
-               OpSelectionMerge %192 None
-               OpBranchConditional %191 %193 %192
-        %193 = OpLabel
-               OpBranch %182
-        %192 = OpLabel
-        %194 = OpLoad %int %limiter3
-        %195 = OpIAdd %int %194 %int_1
-               OpStore %limiter3 %195
-        %196 = OpLoad %int %d
-        %197 = OpLoad %int %d
-        %198 = OpAccessChain %_ptr_Function_int %arr0 %197
-        %199 = OpLoad %int %198
-        %200 = OpAccessChain %_ptr_Function_int %arr1 %196
-               OpStore %200 %199
-               OpBranch %183
-        %183 = OpLabel
-        %201 = OpLoad %int %d
-        %202 = OpIAdd %int %201 %int_1
-               OpStore %d %202
-               OpBranch %181
-        %182 = OpLabel
-               OpBranch %179
-        %179 = OpLabel
-        %203 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %204 = OpLoad %int %203
-        %205 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %206 = OpLoad %int %205
-        %207 = OpIEqual %bool %204 %206
-               OpBranchConditional %207 %177 %178
-        %178 = OpLabel
-               OpBranch %108
-        %108 = OpLabel
-        %208 = OpLoad %int %a
-        %209 = OpIAdd %int %208 %int_1
-               OpStore %a %209
-               OpBranch %106
-        %107 = OpLabel
-        %210 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %211 = OpLoad %int %210
-        %212 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-        %213 = OpLoad %int %212
-        %214 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %215 = OpLoad %int %214
-        %216 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %217 = OpLoad %int %216
-        %218 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %219 = OpLoad %int %218
-        %220 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-        %221 = OpLoad %int %220
-        %222 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-        %223 = OpLoad %int %222
-        %224 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-        %225 = OpLoad %int %224
-        %226 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %227 = OpLoad %int %226
-        %228 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-        %229 = OpLoad %int %228
-        %230 = OpCompositeConstruct %_arr_int_uint_10 %211 %213 %215 %217 %219 %221 %223 %225 %227 %229
-               OpStore %ref0 %230
-        %231 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %232 = OpLoad %int %231
-        %233 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-        %234 = OpLoad %int %233
-        %235 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %236 = OpLoad %int %235
-        %237 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %238 = OpLoad %int %237
-        %239 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %240 = OpLoad %int %239
-        %241 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_13
-        %242 = OpLoad %int %241
-        %243 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_14
-        %244 = OpLoad %int %243
-        %245 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %246 = OpLoad %int %245
-        %247 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_18
-        %248 = OpLoad %int %247
-        %249 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_19
-        %250 = OpLoad %int %249
-        %251 = OpCompositeConstruct %_arr_int_uint_10 %232 %234 %236 %238 %240 %242 %244 %246 %248 %250
-               OpStore %ref1 %251
-        %252 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %253 = OpLoad %int %252
-        %254 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %255 = OpLoad %int %254
-        %256 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %257 = OpLoad %int %256
-        %258 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %259 = OpLoad %int %258
-        %260 = OpConvertSToF %float %253
-        %261 = OpConvertSToF %float %255
-        %262 = OpConvertSToF %float %257
-        %263 = OpConvertSToF %float %259
-        %264 = OpCompositeConstruct %v4float %260 %261 %262 %263
-               OpStore %x_GLF_color %264
-        %265 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %266 = OpLoad %int %265
-               OpStore %i %266
-               OpBranch %267
-        %267 = OpLabel
-               OpLoopMerge %268 %269 None
-               OpBranch %270
-        %270 = OpLabel
-        %275 = OpLoad %int %i
-        %276 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %277 = OpLoad %int %276
-        %278 = OpSLessThan %bool %275 %277
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
-               OpBranch %279
-        %281 = OpLabel
-               OpBranch %268
-        %279 = OpLabel
-        %282 = OpLoad %int %i
-        %283 = OpAccessChain %_ptr_Function_int %arr0 %282
-        %284 = OpLoad %int %283
-        %285 = OpLoad %int %i
-        %286 = OpAccessChain %_ptr_Function_int %ref0 %285
-        %287 = OpLoad %int %286
-        %288 = OpINotEqual %bool %284 %287
-               OpStore %x_278_phi %288
-        %289 = OpLogicalNot %bool %288
-               OpSelectionMerge %290 None
-               OpBranchConditional %289 %291 %290
-        %291 = OpLabel
-        %292 = OpLoad %int %i
-        %293 = OpAccessChain %_ptr_Function_int %arr1 %292
-        %294 = OpLoad %int %293
-        %295 = OpLoad %int %i
-        %296 = OpAccessChain %_ptr_Function_int %ref1 %295
-        %297 = OpLoad %int %296
-        %298 = OpINotEqual %bool %294 %297
-               OpStore %x_277 %298
-        %299 = OpLoad %bool %x_277
-               OpStore %x_278_phi %299
-               OpBranch %290
-        %290 = OpLabel
-        %300 = OpLoad %bool %x_278_phi
-               OpSelectionMerge %301 None
-               OpBranchConditional %300 %302 %301
-        %302 = OpLabel
-        %303 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %304 = OpLoad %int %303
-        %305 = OpConvertSToF %float %304
-        %306 = OpCompositeConstruct %v4float %305 %305 %305 %305
-               OpStore %x_GLF_color %306
-               OpBranch %301
-        %301 = OpLabel
-               OpBranch %269
-        %269 = OpLabel
-        %307 = OpLoad %int %i
-        %308 = OpIAdd %int %307 %int_1
-               OpStore %i %308
-               OpBranch %267
-        %268 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %309
-        %312 = OpLabel
-        %313 = OpFunctionCall %void %main_1
-        %314 = OpLoad %v4float %x_GLF_color
-        %315 = OpCompositeConstruct %main_out %314
-               OpReturnValue %315
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %317 = OpLabel
-        %318 = OpFunctionCall %main_out %main_inner
-        %319 = OpCompositeExtract %v4float %318 0
-               OpStore %x_GLF_color_1_1 %319
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 60a0604..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,232 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 20>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[block]]
-struct buf1 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_19 : buf1;
-
-fn main_1() {
-  var arr0 : array<i32, 10>;
-  var arr1 : array<i32, 10>;
-  var a : i32;
-  var limiter0 : i32;
-  var limiter1 : i32;
-  var b : i32;
-  var limiter2 : i32;
-  var limiter3 : i32;
-  var d : i32;
-  var ref0 : array<i32, 10>;
-  var ref1 : array<i32, 10>;
-  var i : i32;
-  let x_59 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_61 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_63 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_65 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_67 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_69 : i32 = x_6.x_GLF_uniform_int_values[7];
-  let x_71 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_73 : i32 = x_6.x_GLF_uniform_int_values[9];
-  let x_75 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_77 : i32 = x_6.x_GLF_uniform_int_values[10];
-  arr0 = array<i32, 10>(x_59, x_61, x_63, x_65, x_67, x_69, x_71, x_73, x_75, x_77);
-  let x_80 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_82 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_84 : i32 = x_6.x_GLF_uniform_int_values[15];
-  let x_86 : i32 = x_6.x_GLF_uniform_int_values[16];
-  let x_88 : i32 = x_6.x_GLF_uniform_int_values[17];
-  let x_90 : i32 = x_6.x_GLF_uniform_int_values[13];
-  let x_92 : i32 = x_6.x_GLF_uniform_int_values[14];
-  let x_94 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_96 : i32 = x_6.x_GLF_uniform_int_values[18];
-  let x_98 : i32 = x_6.x_GLF_uniform_int_values[19];
-  arr1 = array<i32, 10>(x_80, x_82, x_84, x_86, x_88, x_90, x_92, x_94, x_96, x_98);
-  let x_101 : i32 = x_6.x_GLF_uniform_int_values[8];
-  a = x_101;
-  loop {
-    let x_106 : i32 = a;
-    let x_108 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_106 < x_108)) {
-    } else {
-      break;
-    }
-    let x_112 : i32 = x_6.x_GLF_uniform_int_values[3];
-    limiter0 = x_112;
-    loop {
-      let x_117 : i32 = limiter0;
-      let x_119 : i32 = x_6.x_GLF_uniform_int_values[4];
-      if ((x_117 < x_119)) {
-      } else {
-        break;
-      }
-      let x_122 : i32 = limiter0;
-      limiter0 = (x_122 + 1);
-      let x_125 : i32 = x_6.x_GLF_uniform_int_values[2];
-      limiter1 = x_125;
-      let x_127 : i32 = x_6.x_GLF_uniform_int_values[3];
-      b = x_127;
-      loop {
-        let x_132 : i32 = b;
-        let x_134 : i32 = x_6.x_GLF_uniform_int_values[1];
-        if ((x_132 < x_134)) {
-        } else {
-          break;
-        }
-        let x_137 : i32 = limiter1;
-        let x_139 : i32 = x_6.x_GLF_uniform_int_values[5];
-        if ((x_137 > x_139)) {
-          break;
-        }
-        let x_143 : i32 = limiter1;
-        limiter1 = (x_143 + 1);
-        let x_145 : i32 = b;
-        let x_146 : i32 = a;
-        let x_148 : i32 = arr1[x_146];
-        arr0[x_145] = x_148;
-
-        continuing {
-          let x_150 : i32 = b;
-          b = (x_150 + 1);
-        }
-      }
-    }
-    limiter2 = 0;
-    loop {
-      let x_156 : i32 = limiter2;
-      if ((x_156 < 5)) {
-      } else {
-        break;
-      }
-      let x_159 : i32 = limiter2;
-      limiter2 = (x_159 + 1);
-      let x_162 : i32 = arr1[1];
-      arr0[1] = x_162;
-    }
-    loop {
-      limiter3 = 0;
-      d = 0;
-      loop {
-        let x_172 : i32 = d;
-        if ((x_172 < 10)) {
-        } else {
-          break;
-        }
-        let x_175 : i32 = limiter3;
-        if ((x_175 > 4)) {
-          break;
-        }
-        let x_179 : i32 = limiter3;
-        limiter3 = (x_179 + 1);
-        let x_181 : i32 = d;
-        let x_182 : i32 = d;
-        let x_184 : i32 = arr0[x_182];
-        arr1[x_181] = x_184;
-
-        continuing {
-          let x_186 : i32 = d;
-          d = (x_186 + 1);
-        }
-      }
-
-      continuing {
-        let x_189 : i32 = x_6.x_GLF_uniform_int_values[2];
-        let x_191 : i32 = x_6.x_GLF_uniform_int_values[3];
-        if ((x_189 == x_191)) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      let x_193 : i32 = a;
-      a = (x_193 + 1);
-    }
-  }
-  let x_196 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_198 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_200 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_202 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_204 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_206 : i32 = x_6.x_GLF_uniform_int_values[7];
-  let x_208 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_210 : i32 = x_6.x_GLF_uniform_int_values[9];
-  let x_212 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_214 : i32 = x_6.x_GLF_uniform_int_values[10];
-  ref0 = array<i32, 10>(x_196, x_198, x_200, x_202, x_204, x_206, x_208, x_210, x_212, x_214);
-  let x_217 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_219 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_221 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_223 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_225 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_227 : i32 = x_6.x_GLF_uniform_int_values[13];
-  let x_229 : i32 = x_6.x_GLF_uniform_int_values[14];
-  let x_231 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_233 : i32 = x_6.x_GLF_uniform_int_values[18];
-  let x_235 : i32 = x_6.x_GLF_uniform_int_values[19];
-  ref1 = array<i32, 10>(x_217, x_219, x_221, x_223, x_225, x_227, x_229, x_231, x_233, x_235);
-  let x_238 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_241 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_244 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_247 : i32 = x_6.x_GLF_uniform_int_values[2];
-  x_GLF_color = vec4<f32>(f32(x_238), f32(x_241), f32(x_244), f32(x_247));
-  let x_251 : i32 = x_6.x_GLF_uniform_int_values[3];
-  i = x_251;
-  loop {
-    var x_277 : bool;
-    var x_278_phi : bool;
-    let x_256 : i32 = i;
-    let x_258 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_256 < x_258)) {
-    } else {
-      break;
-    }
-    let x_261 : i32 = i;
-    let x_263 : i32 = arr0[x_261];
-    let x_264 : i32 = i;
-    let x_266 : i32 = ref0[x_264];
-    let x_267 : bool = (x_263 != x_266);
-    x_278_phi = x_267;
-    if (!(x_267)) {
-      let x_271 : i32 = i;
-      let x_273 : i32 = arr1[x_271];
-      let x_274 : i32 = i;
-      let x_276 : i32 = ref1[x_274];
-      x_277 = (x_273 != x_276);
-      x_278_phi = x_277;
-    }
-    let x_278 : bool = x_278_phi;
-    if (x_278) {
-      let x_282 : i32 = x_6.x_GLF_uniform_int_values[3];
-      let x_283 : f32 = f32(x_282);
-      x_GLF_color = vec4<f32>(x_283, x_283, x_283, x_283);
-    }
-
-    continuing {
-      let x_285 : i32 = i;
-      i = (x_285 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 34f8a21..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,210 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[20];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_19 : register(b1, space0) {
-  uint4 x_19[1];
-};
-
-void main_1() {
-  int arr0[10] = (int[10])0;
-  int arr1[10] = (int[10])0;
-  int a = 0;
-  int limiter0 = 0;
-  int limiter1 = 0;
-  int b = 0;
-  int limiter2 = 0;
-  int limiter3 = 0;
-  int d = 0;
-  int ref0[10] = (int[10])0;
-  int ref1[10] = (int[10])0;
-  int i = 0;
-  const int x_59 = asint(x_6[3].x);
-  const int x_61 = asint(x_6[2].x);
-  const int x_63 = asint(x_6[4].x);
-  const int x_65 = asint(x_6[5].x);
-  const int x_67 = asint(x_6[6].x);
-  const int x_69 = asint(x_6[7].x);
-  const int x_71 = asint(x_6[8].x);
-  const int x_73 = asint(x_6[9].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_75 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_77 = asint(x_6[10].x);
-  const int tint_symbol_2[10] = {x_59, x_61, x_63, x_65, x_67, x_69, x_71, x_73, x_75, x_77};
-  arr0 = tint_symbol_2;
-  const int x_80 = asint(x_6[1].x);
-  const int x_82 = asint(x_6[12].x);
-  const int x_84 = asint(x_6[15].x);
-  const int x_86 = asint(x_6[16].x);
-  const int x_88 = asint(x_6[17].x);
-  const int x_90 = asint(x_6[13].x);
-  const int x_92 = asint(x_6[14].x);
-  const int x_94 = asint(x_6[11].x);
-  const int x_96 = asint(x_6[18].x);
-  const int x_98 = asint(x_6[19].x);
-  const int tint_symbol_3[10] = {x_80, x_82, x_84, x_86, x_88, x_90, x_92, x_94, x_96, x_98};
-  arr1 = tint_symbol_3;
-  const int x_101 = asint(x_6[8].x);
-  a = x_101;
-  while (true) {
-    const int x_106 = a;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_108 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_106 < x_108)) {
-    } else {
-      break;
-    }
-    const int x_112 = asint(x_6[3].x);
-    limiter0 = x_112;
-    while (true) {
-      const int x_117 = limiter0;
-      const int x_119 = asint(x_6[4].x);
-      if ((x_117 < x_119)) {
-      } else {
-        break;
-      }
-      limiter0 = (limiter0 + 1);
-      const int x_125 = asint(x_6[2].x);
-      limiter1 = x_125;
-      const int x_127 = asint(x_6[3].x);
-      b = x_127;
-      while (true) {
-        const int x_132 = b;
-        const int x_134 = asint(x_6[1].x);
-        if ((x_132 < x_134)) {
-        } else {
-          break;
-        }
-        const int x_137 = limiter1;
-        const int x_139 = asint(x_6[5].x);
-        if ((x_137 > x_139)) {
-          break;
-        }
-        limiter1 = (limiter1 + 1);
-        const int x_145 = b;
-        const int x_148 = arr1[a];
-        arr0[x_145] = x_148;
-        {
-          b = (b + 1);
-        }
-      }
-    }
-    limiter2 = 0;
-    while (true) {
-      if ((limiter2 < 5)) {
-      } else {
-        break;
-      }
-      limiter2 = (limiter2 + 1);
-      const int x_162 = arr1[1];
-      arr0[1] = x_162;
-    }
-    while (true) {
-      limiter3 = 0;
-      d = 0;
-      {
-        for(; (d < 10); d = (d + 1)) {
-          if ((limiter3 > 4)) {
-            break;
-          }
-          limiter3 = (limiter3 + 1);
-          const int x_181 = d;
-          const int x_184 = arr0[d];
-          arr1[x_181] = x_184;
-        }
-      }
-      {
-        const int x_189 = asint(x_6[2].x);
-        const int x_191 = asint(x_6[3].x);
-        if ((x_189 == x_191)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const int x_196 = asint(x_6[11].x);
-  const int x_198 = asint(x_6[12].x);
-  const int x_200 = asint(x_6[11].x);
-  const int x_202 = asint(x_6[5].x);
-  const int x_204 = asint(x_6[6].x);
-  const int x_206 = asint(x_6[7].x);
-  const int x_208 = asint(x_6[8].x);
-  const int x_210 = asint(x_6[9].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_212 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_214 = asint(x_6[10].x);
-  const int tint_symbol_4[10] = {x_196, x_198, x_200, x_202, x_204, x_206, x_208, x_210, x_212, x_214};
-  ref0 = tint_symbol_4;
-  const int x_217 = asint(x_6[11].x);
-  const int x_219 = asint(x_6[12].x);
-  const int x_221 = asint(x_6[11].x);
-  const int x_223 = asint(x_6[5].x);
-  const int x_225 = asint(x_6[6].x);
-  const int x_227 = asint(x_6[13].x);
-  const int x_229 = asint(x_6[14].x);
-  const int x_231 = asint(x_6[11].x);
-  const int x_233 = asint(x_6[18].x);
-  const int x_235 = asint(x_6[19].x);
-  const int tint_symbol_5[10] = {x_217, x_219, x_221, x_223, x_225, x_227, x_229, x_231, x_233, x_235};
-  ref1 = tint_symbol_5;
-  const int x_238 = asint(x_6[2].x);
-  const int x_241 = asint(x_6[3].x);
-  const int x_244 = asint(x_6[3].x);
-  const int x_247 = asint(x_6[2].x);
-  x_GLF_color = float4(float(x_238), float(x_241), float(x_244), float(x_247));
-  const int x_251 = asint(x_6[3].x);
-  i = x_251;
-  while (true) {
-    bool x_277 = false;
-    bool x_278_phi = false;
-    const int x_256 = i;
-    const int x_258 = asint(x_6[1].x);
-    if ((x_256 < x_258)) {
-    } else {
-      break;
-    }
-    const int x_263 = arr0[i];
-    const int x_266 = ref0[i];
-    const bool x_267 = (x_263 != x_266);
-    x_278_phi = x_267;
-    if (!(x_267)) {
-      const int x_273 = arr1[i];
-      const int x_276 = ref1[i];
-      x_277 = (x_273 != x_276);
-      x_278_phi = x_277;
-    }
-    if (x_278_phi) {
-      const int x_282 = asint(x_6[3].x);
-      const float x_283 = float(x_282);
-      x_GLF_color = float4(x_283, x_283, x_283, x_283);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.msl
deleted file mode 100644
index fdc26d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,243 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[20];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct buf1 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper_1 {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper_1 arr0 = {};
-  tint_array_wrapper_1 arr1 = {};
-  int a = 0;
-  int limiter0 = 0;
-  int limiter1 = 0;
-  int b = 0;
-  int limiter2 = 0;
-  int limiter3 = 0;
-  int d = 0;
-  tint_array_wrapper_1 ref0 = {};
-  tint_array_wrapper_1 ref1 = {};
-  int i = 0;
-  int const x_59 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_61 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_63 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_65 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_67 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_69 = x_6.x_GLF_uniform_int_values.arr[7].el;
-  int const x_71 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_73 = x_6.x_GLF_uniform_int_values.arr[9].el;
-  int const x_75 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_77 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_59, x_61, x_63, x_65, x_67, x_69, x_71, x_73, x_75, x_77}};
-  arr0 = tint_symbol_2;
-  int const x_80 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_82 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_84 = x_6.x_GLF_uniform_int_values.arr[15].el;
-  int const x_86 = x_6.x_GLF_uniform_int_values.arr[16].el;
-  int const x_88 = x_6.x_GLF_uniform_int_values.arr[17].el;
-  int const x_90 = x_6.x_GLF_uniform_int_values.arr[13].el;
-  int const x_92 = x_6.x_GLF_uniform_int_values.arr[14].el;
-  int const x_94 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_96 = x_6.x_GLF_uniform_int_values.arr[18].el;
-  int const x_98 = x_6.x_GLF_uniform_int_values.arr[19].el;
-  tint_array_wrapper_1 const tint_symbol_3 = {.arr={x_80, x_82, x_84, x_86, x_88, x_90, x_92, x_94, x_96, x_98}};
-  arr1 = tint_symbol_3;
-  int const x_101 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  a = x_101;
-  while (true) {
-    int const x_106 = a;
-    int const x_108 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_106 < x_108)) {
-    } else {
-      break;
-    }
-    int const x_112 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    limiter0 = x_112;
-    while (true) {
-      int const x_117 = limiter0;
-      int const x_119 = x_6.x_GLF_uniform_int_values.arr[4].el;
-      if ((x_117 < x_119)) {
-      } else {
-        break;
-      }
-      int const x_122 = limiter0;
-      limiter0 = as_type<int>((as_type<uint>(x_122) + as_type<uint>(1)));
-      int const x_125 = x_6.x_GLF_uniform_int_values.arr[2].el;
-      limiter1 = x_125;
-      int const x_127 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      b = x_127;
-      while (true) {
-        int const x_132 = b;
-        int const x_134 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        if ((x_132 < x_134)) {
-        } else {
-          break;
-        }
-        int const x_137 = limiter1;
-        int const x_139 = x_6.x_GLF_uniform_int_values.arr[5].el;
-        if ((x_137 > x_139)) {
-          break;
-        }
-        int const x_143 = limiter1;
-        limiter1 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-        int const x_145 = b;
-        int const x_146 = a;
-        int const x_148 = arr1.arr[x_146];
-        arr0.arr[x_145] = x_148;
-        {
-          int const x_150 = b;
-          b = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-        }
-      }
-    }
-    limiter2 = 0;
-    while (true) {
-      int const x_156 = limiter2;
-      if ((x_156 < 5)) {
-      } else {
-        break;
-      }
-      int const x_159 = limiter2;
-      limiter2 = as_type<int>((as_type<uint>(x_159) + as_type<uint>(1)));
-      int const x_162 = arr1.arr[1];
-      arr0.arr[1] = x_162;
-    }
-    while (true) {
-      limiter3 = 0;
-      d = 0;
-      while (true) {
-        int const x_172 = d;
-        if ((x_172 < 10)) {
-        } else {
-          break;
-        }
-        int const x_175 = limiter3;
-        if ((x_175 > 4)) {
-          break;
-        }
-        int const x_179 = limiter3;
-        limiter3 = as_type<int>((as_type<uint>(x_179) + as_type<uint>(1)));
-        int const x_181 = d;
-        int const x_182 = d;
-        int const x_184 = arr0.arr[x_182];
-        arr1.arr[x_181] = x_184;
-        {
-          int const x_186 = d;
-          d = as_type<int>((as_type<uint>(x_186) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_189 = x_6.x_GLF_uniform_int_values.arr[2].el;
-        int const x_191 = x_6.x_GLF_uniform_int_values.arr[3].el;
-        if ((x_189 == x_191)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      int const x_193 = a;
-      a = as_type<int>((as_type<uint>(x_193) + as_type<uint>(1)));
-    }
-  }
-  int const x_196 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_198 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_200 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_202 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_204 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_206 = x_6.x_GLF_uniform_int_values.arr[7].el;
-  int const x_208 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_210 = x_6.x_GLF_uniform_int_values.arr[9].el;
-  int const x_212 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_214 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  tint_array_wrapper_1 const tint_symbol_4 = {.arr={x_196, x_198, x_200, x_202, x_204, x_206, x_208, x_210, x_212, x_214}};
-  ref0 = tint_symbol_4;
-  int const x_217 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_219 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_221 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_223 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_225 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_227 = x_6.x_GLF_uniform_int_values.arr[13].el;
-  int const x_229 = x_6.x_GLF_uniform_int_values.arr[14].el;
-  int const x_231 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_233 = x_6.x_GLF_uniform_int_values.arr[18].el;
-  int const x_235 = x_6.x_GLF_uniform_int_values.arr[19].el;
-  tint_array_wrapper_1 const tint_symbol_5 = {.arr={x_217, x_219, x_221, x_223, x_225, x_227, x_229, x_231, x_233, x_235}};
-  ref1 = tint_symbol_5;
-  int const x_238 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_241 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_244 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_247 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  *(tint_symbol_7) = float4(float(x_238), float(x_241), float(x_244), float(x_247));
-  int const x_251 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  i = x_251;
-  while (true) {
-    bool x_277 = false;
-    bool x_278_phi = false;
-    int const x_256 = i;
-    int const x_258 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_256 < x_258)) {
-    } else {
-      break;
-    }
-    int const x_261 = i;
-    int const x_263 = arr0.arr[x_261];
-    int const x_264 = i;
-    int const x_266 = ref0.arr[x_264];
-    bool const x_267 = (x_263 != x_266);
-    x_278_phi = x_267;
-    if (!(x_267)) {
-      int const x_271 = i;
-      int const x_273 = arr1.arr[x_271];
-      int const x_274 = i;
-      int const x_276 = ref1.arr[x_274];
-      x_277 = (x_273 != x_276);
-      x_278_phi = x_277;
-    }
-    bool const x_278 = x_278_phi;
-    if (x_278) {
-      int const x_282 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      float const x_283 = float(x_282);
-      *(tint_symbol_7) = float4(x_283, x_283, x_283, x_283);
-    }
-    {
-      int const x_285 = i;
-      i = as_type<int>((as_type<uint>(x_285) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_8) {
-  main_1(x_6, tint_symbol_8);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4698e5c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,475 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 320
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "one"
-               OpName %x_19 "x_19"
-               OpName %main_1 "main_1"
-               OpName %arr0 "arr0"
-               OpName %arr1 "arr1"
-               OpName %a "a"
-               OpName %limiter0 "limiter0"
-               OpName %limiter1 "limiter1"
-               OpName %b "b"
-               OpName %limiter2 "limiter2"
-               OpName %limiter3 "limiter3"
-               OpName %d "d"
-               OpName %ref0 "ref0"
-               OpName %ref1 "ref1"
-               OpName %i "i"
-               OpName %x_277 "x_277"
-               OpName %x_278_phi "x_278_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_20 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 1
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_20 = OpConstant %uint 20
-%_arr_int_uint_20 = OpTypeArray %int %uint_20
-       %buf0 = OpTypeStruct %_arr_int_uint_20
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %buf1 = OpTypeStruct %int
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_19 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %26 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_14 = OpConstant %int 14
-     %int_11 = OpConstant %int 11
-     %int_18 = OpConstant %int 18
-     %int_19 = OpConstant %int 19
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-        %273 = OpConstantNull %bool
-   %main_out = OpTypeStruct %v4float
-        %309 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-       %arr0 = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-       %arr1 = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-          %a = OpVariable %_ptr_Function_int Function %30
-   %limiter0 = OpVariable %_ptr_Function_int Function %30
-   %limiter1 = OpVariable %_ptr_Function_int Function %30
-          %b = OpVariable %_ptr_Function_int Function %30
-   %limiter2 = OpVariable %_ptr_Function_int Function %30
-   %limiter3 = OpVariable %_ptr_Function_int Function %30
-          %d = OpVariable %_ptr_Function_int Function %30
-       %ref0 = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-       %ref1 = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-          %i = OpVariable %_ptr_Function_int Function %30
-      %x_277 = OpVariable %_ptr_Function_bool Function %273
-  %x_278_phi = OpVariable %_ptr_Function_bool Function %273
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %44 = OpLoad %int %43
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %47 = OpLoad %int %46
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %50 = OpLoad %int %49
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %53 = OpLoad %int %52
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-         %56 = OpLoad %int %55
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-         %59 = OpLoad %int %58
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-         %62 = OpLoad %int %61
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-         %65 = OpLoad %int %64
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-         %71 = OpLoad %int %70
-         %72 = OpCompositeConstruct %_arr_int_uint_10 %44 %47 %50 %53 %56 %59 %62 %65 %68 %71
-               OpStore %arr0 %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-         %78 = OpLoad %int %77
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_15
-         %81 = OpLoad %int %80
-         %83 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_16
-         %84 = OpLoad %int %83
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_17
-         %87 = OpLoad %int %86
-         %89 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_13
-         %90 = OpLoad %int %89
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_14
-         %93 = OpLoad %int %92
-         %95 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-         %96 = OpLoad %int %95
-         %98 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_18
-         %99 = OpLoad %int %98
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_19
-        %102 = OpLoad %int %101
-        %103 = OpCompositeConstruct %_arr_int_uint_10 %75 %78 %81 %84 %87 %90 %93 %96 %99 %102
-               OpStore %arr1 %103
-        %104 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-        %105 = OpLoad %int %104
-               OpStore %a %105
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %a
-        %111 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %112 = OpLoad %int %111
-        %113 = OpSLessThan %bool %110 %112
-               OpSelectionMerge %115 None
-               OpBranchConditional %113 %116 %117
-        %116 = OpLabel
-               OpBranch %115
-        %117 = OpLabel
-               OpBranch %107
-        %115 = OpLabel
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %119 = OpLoad %int %118
-               OpStore %limiter0 %119
-               OpBranch %120
-        %120 = OpLabel
-               OpLoopMerge %121 %122 None
-               OpBranch %123
-        %123 = OpLabel
-        %124 = OpLoad %int %limiter0
-        %125 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %126 = OpLoad %int %125
-        %127 = OpSLessThan %bool %124 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-               OpBranch %128
-        %130 = OpLabel
-               OpBranch %121
-        %128 = OpLabel
-        %131 = OpLoad %int %limiter0
-        %132 = OpIAdd %int %131 %int_1
-               OpStore %limiter0 %132
-        %133 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %134 = OpLoad %int %133
-               OpStore %limiter1 %134
-        %135 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %136 = OpLoad %int %135
-               OpStore %b %136
-               OpBranch %137
-        %137 = OpLabel
-               OpLoopMerge %138 %139 None
-               OpBranch %140
-        %140 = OpLabel
-        %141 = OpLoad %int %b
-        %142 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %143 = OpLoad %int %142
-        %144 = OpSLessThan %bool %141 %143
-               OpSelectionMerge %145 None
-               OpBranchConditional %144 %146 %147
-        %146 = OpLabel
-               OpBranch %145
-        %147 = OpLabel
-               OpBranch %138
-        %145 = OpLabel
-        %148 = OpLoad %int %limiter1
-        %149 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %150 = OpLoad %int %149
-        %151 = OpSGreaterThan %bool %148 %150
-               OpSelectionMerge %152 None
-               OpBranchConditional %151 %153 %152
-        %153 = OpLabel
-               OpBranch %138
-        %152 = OpLabel
-        %154 = OpLoad %int %limiter1
-        %155 = OpIAdd %int %154 %int_1
-               OpStore %limiter1 %155
-        %156 = OpLoad %int %b
-        %157 = OpLoad %int %a
-        %158 = OpAccessChain %_ptr_Function_int %arr1 %157
-        %159 = OpLoad %int %158
-        %160 = OpAccessChain %_ptr_Function_int %arr0 %156
-               OpStore %160 %159
-               OpBranch %139
-        %139 = OpLabel
-        %161 = OpLoad %int %b
-        %162 = OpIAdd %int %161 %int_1
-               OpStore %b %162
-               OpBranch %137
-        %138 = OpLabel
-               OpBranch %122
-        %122 = OpLabel
-               OpBranch %120
-        %121 = OpLabel
-               OpStore %limiter2 %int_0
-               OpBranch %163
-        %163 = OpLabel
-               OpLoopMerge %164 %165 None
-               OpBranch %166
-        %166 = OpLabel
-        %167 = OpLoad %int %limiter2
-        %168 = OpSLessThan %bool %167 %int_5
-               OpSelectionMerge %169 None
-               OpBranchConditional %168 %170 %171
-        %170 = OpLabel
-               OpBranch %169
-        %171 = OpLabel
-               OpBranch %164
-        %169 = OpLabel
-        %172 = OpLoad %int %limiter2
-        %173 = OpIAdd %int %172 %int_1
-               OpStore %limiter2 %173
-        %174 = OpAccessChain %_ptr_Function_int %arr1 %int_1
-        %175 = OpLoad %int %174
-        %176 = OpAccessChain %_ptr_Function_int %arr0 %int_1
-               OpStore %176 %175
-               OpBranch %165
-        %165 = OpLabel
-               OpBranch %163
-        %164 = OpLabel
-               OpBranch %177
-        %177 = OpLabel
-               OpLoopMerge %178 %179 None
-               OpBranch %180
-        %180 = OpLabel
-               OpStore %limiter3 %int_0
-               OpStore %d %int_0
-               OpBranch %181
-        %181 = OpLabel
-               OpLoopMerge %182 %183 None
-               OpBranch %184
-        %184 = OpLabel
-        %185 = OpLoad %int %d
-        %186 = OpSLessThan %bool %185 %int_10
-               OpSelectionMerge %187 None
-               OpBranchConditional %186 %188 %189
-        %188 = OpLabel
-               OpBranch %187
-        %189 = OpLabel
-               OpBranch %182
-        %187 = OpLabel
-        %190 = OpLoad %int %limiter3
-        %191 = OpSGreaterThan %bool %190 %int_4
-               OpSelectionMerge %192 None
-               OpBranchConditional %191 %193 %192
-        %193 = OpLabel
-               OpBranch %182
-        %192 = OpLabel
-        %194 = OpLoad %int %limiter3
-        %195 = OpIAdd %int %194 %int_1
-               OpStore %limiter3 %195
-        %196 = OpLoad %int %d
-        %197 = OpLoad %int %d
-        %198 = OpAccessChain %_ptr_Function_int %arr0 %197
-        %199 = OpLoad %int %198
-        %200 = OpAccessChain %_ptr_Function_int %arr1 %196
-               OpStore %200 %199
-               OpBranch %183
-        %183 = OpLabel
-        %201 = OpLoad %int %d
-        %202 = OpIAdd %int %201 %int_1
-               OpStore %d %202
-               OpBranch %181
-        %182 = OpLabel
-               OpBranch %179
-        %179 = OpLabel
-        %203 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %204 = OpLoad %int %203
-        %205 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %206 = OpLoad %int %205
-        %207 = OpIEqual %bool %204 %206
-               OpBranchConditional %207 %177 %178
-        %178 = OpLabel
-               OpBranch %108
-        %108 = OpLabel
-        %208 = OpLoad %int %a
-        %209 = OpIAdd %int %208 %int_1
-               OpStore %a %209
-               OpBranch %106
-        %107 = OpLabel
-        %210 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %211 = OpLoad %int %210
-        %212 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-        %213 = OpLoad %int %212
-        %214 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %215 = OpLoad %int %214
-        %216 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %217 = OpLoad %int %216
-        %218 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %219 = OpLoad %int %218
-        %220 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-        %221 = OpLoad %int %220
-        %222 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-        %223 = OpLoad %int %222
-        %224 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-        %225 = OpLoad %int %224
-        %226 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %227 = OpLoad %int %226
-        %228 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-        %229 = OpLoad %int %228
-        %230 = OpCompositeConstruct %_arr_int_uint_10 %211 %213 %215 %217 %219 %221 %223 %225 %227 %229
-               OpStore %ref0 %230
-        %231 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %232 = OpLoad %int %231
-        %233 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-        %234 = OpLoad %int %233
-        %235 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %236 = OpLoad %int %235
-        %237 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %238 = OpLoad %int %237
-        %239 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %240 = OpLoad %int %239
-        %241 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_13
-        %242 = OpLoad %int %241
-        %243 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_14
-        %244 = OpLoad %int %243
-        %245 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-        %246 = OpLoad %int %245
-        %247 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_18
-        %248 = OpLoad %int %247
-        %249 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_19
-        %250 = OpLoad %int %249
-        %251 = OpCompositeConstruct %_arr_int_uint_10 %232 %234 %236 %238 %240 %242 %244 %246 %248 %250
-               OpStore %ref1 %251
-        %252 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %253 = OpLoad %int %252
-        %254 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %255 = OpLoad %int %254
-        %256 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %257 = OpLoad %int %256
-        %258 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %259 = OpLoad %int %258
-        %260 = OpConvertSToF %float %253
-        %261 = OpConvertSToF %float %255
-        %262 = OpConvertSToF %float %257
-        %263 = OpConvertSToF %float %259
-        %264 = OpCompositeConstruct %v4float %260 %261 %262 %263
-               OpStore %x_GLF_color %264
-        %265 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %266 = OpLoad %int %265
-               OpStore %i %266
-               OpBranch %267
-        %267 = OpLabel
-               OpLoopMerge %268 %269 None
-               OpBranch %270
-        %270 = OpLabel
-        %275 = OpLoad %int %i
-        %276 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %277 = OpLoad %int %276
-        %278 = OpSLessThan %bool %275 %277
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
-               OpBranch %279
-        %281 = OpLabel
-               OpBranch %268
-        %279 = OpLabel
-        %282 = OpLoad %int %i
-        %283 = OpAccessChain %_ptr_Function_int %arr0 %282
-        %284 = OpLoad %int %283
-        %285 = OpLoad %int %i
-        %286 = OpAccessChain %_ptr_Function_int %ref0 %285
-        %287 = OpLoad %int %286
-        %288 = OpINotEqual %bool %284 %287
-               OpStore %x_278_phi %288
-        %289 = OpLogicalNot %bool %288
-               OpSelectionMerge %290 None
-               OpBranchConditional %289 %291 %290
-        %291 = OpLabel
-        %292 = OpLoad %int %i
-        %293 = OpAccessChain %_ptr_Function_int %arr1 %292
-        %294 = OpLoad %int %293
-        %295 = OpLoad %int %i
-        %296 = OpAccessChain %_ptr_Function_int %ref1 %295
-        %297 = OpLoad %int %296
-        %298 = OpINotEqual %bool %294 %297
-               OpStore %x_277 %298
-        %299 = OpLoad %bool %x_277
-               OpStore %x_278_phi %299
-               OpBranch %290
-        %290 = OpLabel
-        %300 = OpLoad %bool %x_278_phi
-               OpSelectionMerge %301 None
-               OpBranchConditional %300 %302 %301
-        %302 = OpLabel
-        %303 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %304 = OpLoad %int %303
-        %305 = OpConvertSToF %float %304
-        %306 = OpCompositeConstruct %v4float %305 %305 %305 %305
-               OpStore %x_GLF_color %306
-               OpBranch %301
-        %301 = OpLabel
-               OpBranch %269
-        %269 = OpLabel
-        %307 = OpLoad %int %i
-        %308 = OpIAdd %int %307 %int_1
-               OpStore %i %308
-               OpBranch %267
-        %268 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %309
-        %312 = OpLabel
-        %313 = OpFunctionCall %void %main_1
-        %314 = OpLoad %v4float %x_GLF_color
-        %315 = OpCompositeConstruct %main_out %314
-               OpReturnValue %315
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %317 = OpLabel
-        %318 = OpFunctionCall %main_out %main_inner
-        %319 = OpCompositeExtract %v4float %318 0
-               OpStore %x_GLF_color_1_1 %319
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 60a0604..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-array-copies-loops-with-limiters/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,232 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 20>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[block]]
-struct buf1 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_19 : buf1;
-
-fn main_1() {
-  var arr0 : array<i32, 10>;
-  var arr1 : array<i32, 10>;
-  var a : i32;
-  var limiter0 : i32;
-  var limiter1 : i32;
-  var b : i32;
-  var limiter2 : i32;
-  var limiter3 : i32;
-  var d : i32;
-  var ref0 : array<i32, 10>;
-  var ref1 : array<i32, 10>;
-  var i : i32;
-  let x_59 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_61 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_63 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_65 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_67 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_69 : i32 = x_6.x_GLF_uniform_int_values[7];
-  let x_71 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_73 : i32 = x_6.x_GLF_uniform_int_values[9];
-  let x_75 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_77 : i32 = x_6.x_GLF_uniform_int_values[10];
-  arr0 = array<i32, 10>(x_59, x_61, x_63, x_65, x_67, x_69, x_71, x_73, x_75, x_77);
-  let x_80 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_82 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_84 : i32 = x_6.x_GLF_uniform_int_values[15];
-  let x_86 : i32 = x_6.x_GLF_uniform_int_values[16];
-  let x_88 : i32 = x_6.x_GLF_uniform_int_values[17];
-  let x_90 : i32 = x_6.x_GLF_uniform_int_values[13];
-  let x_92 : i32 = x_6.x_GLF_uniform_int_values[14];
-  let x_94 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_96 : i32 = x_6.x_GLF_uniform_int_values[18];
-  let x_98 : i32 = x_6.x_GLF_uniform_int_values[19];
-  arr1 = array<i32, 10>(x_80, x_82, x_84, x_86, x_88, x_90, x_92, x_94, x_96, x_98);
-  let x_101 : i32 = x_6.x_GLF_uniform_int_values[8];
-  a = x_101;
-  loop {
-    let x_106 : i32 = a;
-    let x_108 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_106 < x_108)) {
-    } else {
-      break;
-    }
-    let x_112 : i32 = x_6.x_GLF_uniform_int_values[3];
-    limiter0 = x_112;
-    loop {
-      let x_117 : i32 = limiter0;
-      let x_119 : i32 = x_6.x_GLF_uniform_int_values[4];
-      if ((x_117 < x_119)) {
-      } else {
-        break;
-      }
-      let x_122 : i32 = limiter0;
-      limiter0 = (x_122 + 1);
-      let x_125 : i32 = x_6.x_GLF_uniform_int_values[2];
-      limiter1 = x_125;
-      let x_127 : i32 = x_6.x_GLF_uniform_int_values[3];
-      b = x_127;
-      loop {
-        let x_132 : i32 = b;
-        let x_134 : i32 = x_6.x_GLF_uniform_int_values[1];
-        if ((x_132 < x_134)) {
-        } else {
-          break;
-        }
-        let x_137 : i32 = limiter1;
-        let x_139 : i32 = x_6.x_GLF_uniform_int_values[5];
-        if ((x_137 > x_139)) {
-          break;
-        }
-        let x_143 : i32 = limiter1;
-        limiter1 = (x_143 + 1);
-        let x_145 : i32 = b;
-        let x_146 : i32 = a;
-        let x_148 : i32 = arr1[x_146];
-        arr0[x_145] = x_148;
-
-        continuing {
-          let x_150 : i32 = b;
-          b = (x_150 + 1);
-        }
-      }
-    }
-    limiter2 = 0;
-    loop {
-      let x_156 : i32 = limiter2;
-      if ((x_156 < 5)) {
-      } else {
-        break;
-      }
-      let x_159 : i32 = limiter2;
-      limiter2 = (x_159 + 1);
-      let x_162 : i32 = arr1[1];
-      arr0[1] = x_162;
-    }
-    loop {
-      limiter3 = 0;
-      d = 0;
-      loop {
-        let x_172 : i32 = d;
-        if ((x_172 < 10)) {
-        } else {
-          break;
-        }
-        let x_175 : i32 = limiter3;
-        if ((x_175 > 4)) {
-          break;
-        }
-        let x_179 : i32 = limiter3;
-        limiter3 = (x_179 + 1);
-        let x_181 : i32 = d;
-        let x_182 : i32 = d;
-        let x_184 : i32 = arr0[x_182];
-        arr1[x_181] = x_184;
-
-        continuing {
-          let x_186 : i32 = d;
-          d = (x_186 + 1);
-        }
-      }
-
-      continuing {
-        let x_189 : i32 = x_6.x_GLF_uniform_int_values[2];
-        let x_191 : i32 = x_6.x_GLF_uniform_int_values[3];
-        if ((x_189 == x_191)) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      let x_193 : i32 = a;
-      a = (x_193 + 1);
-    }
-  }
-  let x_196 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_198 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_200 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_202 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_204 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_206 : i32 = x_6.x_GLF_uniform_int_values[7];
-  let x_208 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_210 : i32 = x_6.x_GLF_uniform_int_values[9];
-  let x_212 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_214 : i32 = x_6.x_GLF_uniform_int_values[10];
-  ref0 = array<i32, 10>(x_196, x_198, x_200, x_202, x_204, x_206, x_208, x_210, x_212, x_214);
-  let x_217 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_219 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_221 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_223 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_225 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_227 : i32 = x_6.x_GLF_uniform_int_values[13];
-  let x_229 : i32 = x_6.x_GLF_uniform_int_values[14];
-  let x_231 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_233 : i32 = x_6.x_GLF_uniform_int_values[18];
-  let x_235 : i32 = x_6.x_GLF_uniform_int_values[19];
-  ref1 = array<i32, 10>(x_217, x_219, x_221, x_223, x_225, x_227, x_229, x_231, x_233, x_235);
-  let x_238 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_241 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_244 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_247 : i32 = x_6.x_GLF_uniform_int_values[2];
-  x_GLF_color = vec4<f32>(f32(x_238), f32(x_241), f32(x_244), f32(x_247));
-  let x_251 : i32 = x_6.x_GLF_uniform_int_values[3];
-  i = x_251;
-  loop {
-    var x_277 : bool;
-    var x_278_phi : bool;
-    let x_256 : i32 = i;
-    let x_258 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_256 < x_258)) {
-    } else {
-      break;
-    }
-    let x_261 : i32 = i;
-    let x_263 : i32 = arr0[x_261];
-    let x_264 : i32 = i;
-    let x_266 : i32 = ref0[x_264];
-    let x_267 : bool = (x_263 != x_266);
-    x_278_phi = x_267;
-    if (!(x_267)) {
-      let x_271 : i32 = i;
-      let x_273 : i32 = arr1[x_271];
-      let x_274 : i32 = i;
-      let x_276 : i32 = ref1[x_274];
-      x_277 = (x_273 != x_276);
-      x_278_phi = x_277;
-    }
-    let x_278 : bool = x_278_phi;
-    if (x_278) {
-      let x_282 : i32 = x_6.x_GLF_uniform_int_values[3];
-      let x_283 : f32 = f32(x_282);
-      x_GLF_color = vec4<f32>(x_283, x_283, x_283, x_283);
-    }
-
-    continuing {
-      let x_285 : i32 = i;
-      i = (x_285 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ade1ece..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,100 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[7];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_69 = false;
-  bool x_77 = false;
-  bool x_85 = false;
-  bool x_93 = false;
-  bool x_70_phi = false;
-  bool x_78_phi = false;
-  bool x_86_phi = false;
-  bool x_94_phi = false;
-  const float x_41 = asfloat(x_6[2].x);
-  const float x_43 = asfloat(x_6[2].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_47 = asfloat(x_6[2].x);
-  v1 = float4(x_41, x_43, x_45, x_47);
-  v2 = float4(1.570796371f, 1.119769573f, asfloat(0x7fc00000u), 0.927295208f);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_50 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  v3 = float4(x_50, x_50, x_50, x_50);
-  v4 = smoothstep(v1, v2, v3);
-  const float4 x_56 = v4;
-  x_GLF_color = float4(x_56.x, x_56.y, x_56.w, x_56.x);
-  const float x_59 = v4.x;
-  const float x_61 = asfloat(x_6[4].x);
-  const bool x_62 = (x_59 > x_61);
-  x_70_phi = x_62;
-  if (x_62) {
-    const float x_66 = v4.x;
-    const float x_68 = asfloat(x_6[5].x);
-    x_69 = (x_66 < x_68);
-    x_70_phi = x_69;
-  }
-  const bool x_70 = x_70_phi;
-  x_78_phi = x_70;
-  if (x_70) {
-    const float x_74 = v4.y;
-    const float x_76 = asfloat(x_6[3].x);
-    x_77 = (x_74 > x_76);
-    x_78_phi = x_77;
-  }
-  const bool x_78 = x_78_phi;
-  x_86_phi = x_78;
-  if (x_78) {
-    const float x_82 = v4.y;
-    const float x_84 = asfloat(x_6[6].x);
-    x_85 = (x_82 < x_84);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_94_phi = x_86;
-  if (x_86) {
-    const float x_90 = v4.w;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_92 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_93 = (x_90 == x_92);
-    x_94_phi = x_93;
-  }
-  if (x_94_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_99 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_101 = asfloat(x_6[1].x);
-    const float x_103 = asfloat(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_105 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(x_99, x_101, x_103, x_105);
-  } else {
-    const float x_108 = asfloat(x_6[1].x);
-    x_GLF_color = float4(x_108, x_108, x_108, x_108);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.msl
deleted file mode 100644
index de0a874..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,109 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[7];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 v1 = 0.0f;
-  float4 v2 = 0.0f;
-  float4 v3 = 0.0f;
-  float4 v4 = 0.0f;
-  bool x_69 = false;
-  bool x_77 = false;
-  bool x_85 = false;
-  bool x_93 = false;
-  bool x_70_phi = false;
-  bool x_78_phi = false;
-  bool x_86_phi = false;
-  bool x_94_phi = false;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  v1 = float4(x_41, x_43, x_45, x_47);
-  v2 = float4(1.570796371f, 1.119769573f, NAN, 0.927295208f);
-  float const x_50 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v3 = float4(x_50, x_50, x_50, x_50);
-  float4 const x_52 = v1;
-  float4 const x_53 = v2;
-  float4 const x_54 = v3;
-  v4 = smoothstep(x_52, x_53, x_54);
-  float4 const x_56 = v4;
-  *(tint_symbol_3) = float4(x_56.x, x_56.y, x_56.w, x_56.x);
-  float const x_59 = v4.x;
-  float const x_61 = x_6.x_GLF_uniform_float_values.arr[4].el;
-  bool const x_62 = (x_59 > x_61);
-  x_70_phi = x_62;
-  if (x_62) {
-    float const x_66 = v4.x;
-    float const x_68 = x_6.x_GLF_uniform_float_values.arr[5].el;
-    x_69 = (x_66 < x_68);
-    x_70_phi = x_69;
-  }
-  bool const x_70 = x_70_phi;
-  x_78_phi = x_70;
-  if (x_70) {
-    float const x_74 = v4.y;
-    float const x_76 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    x_77 = (x_74 > x_76);
-    x_78_phi = x_77;
-  }
-  bool const x_78 = x_78_phi;
-  x_86_phi = x_78;
-  if (x_78) {
-    float const x_82 = v4.y;
-    float const x_84 = x_6.x_GLF_uniform_float_values.arr[6].el;
-    x_85 = (x_82 < x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_94_phi = x_86;
-  if (x_86) {
-    float const x_90 = v4.w;
-    float const x_92 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    x_93 = (x_90 == x_92);
-    x_94_phi = x_93;
-  }
-  bool const x_94 = x_94_phi;
-  if (x_94) {
-    float const x_99 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_101 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_103 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_105 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_99, x_101, x_103, x_105);
-  } else {
-    float const x_108 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_3) = float4(x_108, x_108, x_108, x_108);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a954c3c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,222 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 142
-; Schema: 0
-               OpCapability Shader
-         %60 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %v3 "v3"
-               OpName %v4 "v4"
-               OpName %x_69 "x_69"
-               OpName %x_77 "x_77"
-               OpName %x_85 "x_85"
-               OpName %x_93 "x_93"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_78_phi "x_78_phi"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_94_phi "x_94_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_7 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_7 = OpConstant %uint 7
-%_arr_float_uint_7 = OpTypeArray %float %uint_7
-       %buf0 = OpTypeStruct %_arr_float_uint_7
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%float_1_57079637 = OpConstant %float 1.57079637
-%float_1_11976957 = OpConstant %float 1.11976957
-%float_0x1_8p_128 = OpConstant %float 0x1.8p+128
-%float_0_927295208 = OpConstant %float 0.927295208
-         %52 = OpConstantComposite %v4float %float_1_57079637 %float_1_11976957 %float_0x1_8p_128 %float_0_927295208
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-      %int_3 = OpConstant %int 3
-      %int_6 = OpConstant %int 6
-     %uint_3 = OpConstant %uint 3
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %131 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-         %v2 = OpVariable %_ptr_Function_v4float Function %5
-         %v3 = OpVariable %_ptr_Function_v4float Function %5
-         %v4 = OpVariable %_ptr_Function_v4float Function %5
-       %x_69 = OpVariable %_ptr_Function_bool Function %26
-       %x_77 = OpVariable %_ptr_Function_bool Function %26
-       %x_85 = OpVariable %_ptr_Function_bool Function %26
-       %x_93 = OpVariable %_ptr_Function_bool Function %26
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_78_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_94_phi = OpVariable %_ptr_Function_bool Function %26
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %41 = OpLoad %float %40
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %46 = OpLoad %float %45
-         %47 = OpCompositeConstruct %v4float %39 %41 %44 %46
-               OpStore %v1 %47
-               OpStore %v2 %52
-         %53 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %55 = OpCompositeConstruct %v4float %54 %54 %54 %54
-               OpStore %v3 %55
-         %56 = OpLoad %v4float %v1
-         %57 = OpLoad %v4float %v2
-         %58 = OpLoad %v4float %v3
-         %59 = OpExtInst %v4float %60 SmoothStep %56 %57 %58
-               OpStore %v4 %59
-         %61 = OpLoad %v4float %v4
-         %62 = OpCompositeExtract %float %61 0
-         %63 = OpCompositeExtract %float %61 1
-         %64 = OpCompositeExtract %float %61 3
-         %65 = OpCompositeExtract %float %61 0
-         %66 = OpCompositeConstruct %v4float %62 %63 %64 %65
-               OpStore %x_GLF_color %66
-         %68 = OpAccessChain %_ptr_Function_float %v4 %uint_0
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %72 = OpLoad %float %71
-         %73 = OpFOrdGreaterThan %bool %69 %72
-               OpStore %x_70_phi %73
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %74
-         %75 = OpLabel
-         %76 = OpAccessChain %_ptr_Function_float %v4 %uint_0
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_5
-         %80 = OpLoad %float %79
-         %81 = OpFOrdLessThan %bool %77 %80
-               OpStore %x_69 %81
-         %82 = OpLoad %bool %x_69
-               OpStore %x_70_phi %82
-               OpBranch %74
-         %74 = OpLabel
-         %83 = OpLoad %bool %x_70_phi
-               OpStore %x_78_phi %83
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %84
-         %85 = OpLabel
-         %87 = OpAccessChain %_ptr_Function_float %v4 %uint_1
-         %88 = OpLoad %float %87
-         %90 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %91 = OpLoad %float %90
-         %92 = OpFOrdGreaterThan %bool %88 %91
-               OpStore %x_77 %92
-         %93 = OpLoad %bool %x_77
-               OpStore %x_78_phi %93
-               OpBranch %84
-         %84 = OpLabel
-         %94 = OpLoad %bool %x_78_phi
-               OpStore %x_86_phi %94
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-         %97 = OpAccessChain %_ptr_Function_float %v4 %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_6
-        %101 = OpLoad %float %100
-        %102 = OpFOrdLessThan %bool %98 %101
-               OpStore %x_85 %102
-        %103 = OpLoad %bool %x_85
-               OpStore %x_86_phi %103
-               OpBranch %95
-         %95 = OpLabel
-        %104 = OpLoad %bool %x_86_phi
-               OpStore %x_94_phi %104
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %105
-        %106 = OpLabel
-        %108 = OpAccessChain %_ptr_Function_float %v4 %uint_3
-        %109 = OpLoad %float %108
-        %110 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %111 = OpLoad %float %110
-        %112 = OpFOrdEqual %bool %109 %111
-               OpStore %x_93 %112
-        %113 = OpLoad %bool %x_93
-               OpStore %x_94_phi %113
-               OpBranch %105
-        %105 = OpLabel
-        %114 = OpLoad %bool %x_94_phi
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %119 = OpLoad %float %118
-        %121 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %122 = OpLoad %float %121
-        %123 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %124 = OpLoad %float %123
-        %125 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %126 = OpLoad %float %125
-        %127 = OpCompositeConstruct %v4float %119 %122 %124 %126
-               OpStore %x_GLF_color %127
-               OpBranch %115
-        %117 = OpLabel
-        %128 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %129 = OpLoad %float %128
-        %130 = OpCompositeConstruct %v4float %129 %129 %129 %129
-               OpStore %x_GLF_color %130
-               OpBranch %115
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %131
-        %134 = OpLabel
-        %135 = OpFunctionCall %void %main_1
-        %136 = OpLoad %v4float %x_GLF_color
-        %137 = OpCompositeConstruct %main_out %136
-               OpReturnValue %137
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-        %139 = OpLabel
-        %140 = OpFunctionCall %main_out %main_inner
-        %141 = OpCompositeExtract %v4float %140 0
-               OpStore %x_GLF_color_1_1 %141
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 32f966d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,96 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 7>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec4<f32>;
-  var v2 : vec4<f32>;
-  var v3 : vec4<f32>;
-  var v4 : vec4<f32>;
-  var x_69 : bool;
-  var x_77 : bool;
-  var x_85 : bool;
-  var x_93 : bool;
-  var x_70_phi : bool;
-  var x_78_phi : bool;
-  var x_86_phi : bool;
-  var x_94_phi : bool;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[2];
-  v1 = vec4<f32>(x_41, x_43, x_45, x_47);
-  v2 = vec4<f32>(1.570796371, 1.119769573, 0x1.8p+128, 0.927295208);
-  let x_50 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v3 = vec4<f32>(x_50, x_50, x_50, x_50);
-  let x_52 : vec4<f32> = v1;
-  let x_53 : vec4<f32> = v2;
-  let x_54 : vec4<f32> = v3;
-  v4 = smoothStep(x_52, x_53, x_54);
-  let x_56 : vec4<f32> = v4;
-  x_GLF_color = vec4<f32>(x_56.x, x_56.y, x_56.w, x_56.x);
-  let x_59 : f32 = v4.x;
-  let x_61 : f32 = x_6.x_GLF_uniform_float_values[4];
-  let x_62 : bool = (x_59 > x_61);
-  x_70_phi = x_62;
-  if (x_62) {
-    let x_66 : f32 = v4.x;
-    let x_68 : f32 = x_6.x_GLF_uniform_float_values[5];
-    x_69 = (x_66 < x_68);
-    x_70_phi = x_69;
-  }
-  let x_70 : bool = x_70_phi;
-  x_78_phi = x_70;
-  if (x_70) {
-    let x_74 : f32 = v4.y;
-    let x_76 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_77 = (x_74 > x_76);
-    x_78_phi = x_77;
-  }
-  let x_78 : bool = x_78_phi;
-  x_86_phi = x_78;
-  if (x_78) {
-    let x_82 : f32 = v4.y;
-    let x_84 : f32 = x_6.x_GLF_uniform_float_values[6];
-    x_85 = (x_82 < x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_94_phi = x_86;
-  if (x_86) {
-    let x_90 : f32 = v4.w;
-    let x_92 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_93 = (x_90 == x_92);
-    x_94_phi = x_93;
-  }
-  let x_94 : bool = x_94_phi;
-  if (x_94) {
-    let x_99 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_101 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_103 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_105 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_99, x_101, x_103, x_105);
-  } else {
-    let x_108 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_108, x_108, x_108, x_108);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 26aeb1f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,100 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[7];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_69 = false;
-  bool x_77 = false;
-  bool x_85 = false;
-  bool x_93 = false;
-  bool x_70_phi = false;
-  bool x_78_phi = false;
-  bool x_86_phi = false;
-  bool x_94_phi = false;
-  const float x_41 = asfloat(x_6[2].x);
-  const float x_43 = asfloat(x_6[2].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_47 = asfloat(x_6[2].x);
-  v1 = float4(x_41, x_43, x_45, x_47);
-  v2 = float4(1.570796371f, 1.119769573f, asfloat(0x7f800000u), 0.927295208f);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_50 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  v3 = float4(x_50, x_50, x_50, x_50);
-  v4 = smoothstep(v1, v2, v3);
-  const float4 x_56 = v4;
-  x_GLF_color = float4(x_56.x, x_56.y, x_56.w, x_56.x);
-  const float x_59 = v4.x;
-  const float x_61 = asfloat(x_6[4].x);
-  const bool x_62 = (x_59 > x_61);
-  x_70_phi = x_62;
-  if (x_62) {
-    const float x_66 = v4.x;
-    const float x_68 = asfloat(x_6[5].x);
-    x_69 = (x_66 < x_68);
-    x_70_phi = x_69;
-  }
-  const bool x_70 = x_70_phi;
-  x_78_phi = x_70;
-  if (x_70) {
-    const float x_74 = v4.y;
-    const float x_76 = asfloat(x_6[3].x);
-    x_77 = (x_74 > x_76);
-    x_78_phi = x_77;
-  }
-  const bool x_78 = x_78_phi;
-  x_86_phi = x_78;
-  if (x_78) {
-    const float x_82 = v4.y;
-    const float x_84 = asfloat(x_6[6].x);
-    x_85 = (x_82 < x_84);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_94_phi = x_86;
-  if (x_86) {
-    const float x_90 = v4.w;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_92 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_93 = (x_90 == x_92);
-    x_94_phi = x_93;
-  }
-  if (x_94_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_99 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_101 = asfloat(x_6[1].x);
-    const float x_103 = asfloat(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_105 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(x_99, x_101, x_103, x_105);
-  } else {
-    const float x_108 = asfloat(x_6[1].x);
-    x_GLF_color = float4(x_108, x_108, x_108, x_108);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.msl
deleted file mode 100644
index b77e17c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,109 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[7];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 v1 = 0.0f;
-  float4 v2 = 0.0f;
-  float4 v3 = 0.0f;
-  float4 v4 = 0.0f;
-  bool x_69 = false;
-  bool x_77 = false;
-  bool x_85 = false;
-  bool x_93 = false;
-  bool x_70_phi = false;
-  bool x_78_phi = false;
-  bool x_86_phi = false;
-  bool x_94_phi = false;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  v1 = float4(x_41, x_43, x_45, x_47);
-  v2 = float4(1.570796371f, 1.119769573f, INFINITY, 0.927295208f);
-  float const x_50 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v3 = float4(x_50, x_50, x_50, x_50);
-  float4 const x_52 = v1;
-  float4 const x_53 = v2;
-  float4 const x_54 = v3;
-  v4 = smoothstep(x_52, x_53, x_54);
-  float4 const x_56 = v4;
-  *(tint_symbol_3) = float4(x_56.x, x_56.y, x_56.w, x_56.x);
-  float const x_59 = v4.x;
-  float const x_61 = x_6.x_GLF_uniform_float_values.arr[4].el;
-  bool const x_62 = (x_59 > x_61);
-  x_70_phi = x_62;
-  if (x_62) {
-    float const x_66 = v4.x;
-    float const x_68 = x_6.x_GLF_uniform_float_values.arr[5].el;
-    x_69 = (x_66 < x_68);
-    x_70_phi = x_69;
-  }
-  bool const x_70 = x_70_phi;
-  x_78_phi = x_70;
-  if (x_70) {
-    float const x_74 = v4.y;
-    float const x_76 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    x_77 = (x_74 > x_76);
-    x_78_phi = x_77;
-  }
-  bool const x_78 = x_78_phi;
-  x_86_phi = x_78;
-  if (x_78) {
-    float const x_82 = v4.y;
-    float const x_84 = x_6.x_GLF_uniform_float_values.arr[6].el;
-    x_85 = (x_82 < x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_94_phi = x_86;
-  if (x_86) {
-    float const x_90 = v4.w;
-    float const x_92 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    x_93 = (x_90 == x_92);
-    x_94_phi = x_93;
-  }
-  bool const x_94 = x_94_phi;
-  if (x_94) {
-    float const x_99 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_101 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_103 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_105 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_99, x_101, x_103, x_105);
-  } else {
-    float const x_108 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_3) = float4(x_108, x_108, x_108, x_108);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3d79753..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,222 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 142
-; Schema: 0
-               OpCapability Shader
-         %60 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %v3 "v3"
-               OpName %v4 "v4"
-               OpName %x_69 "x_69"
-               OpName %x_77 "x_77"
-               OpName %x_85 "x_85"
-               OpName %x_93 "x_93"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_78_phi "x_78_phi"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_94_phi "x_94_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_7 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_7 = OpConstant %uint 7
-%_arr_float_uint_7 = OpTypeArray %float %uint_7
-       %buf0 = OpTypeStruct %_arr_float_uint_7
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%float_1_57079637 = OpConstant %float 1.57079637
-%float_1_11976957 = OpConstant %float 1.11976957
-%float_0x1p_128 = OpConstant %float 0x1p+128
-%float_0_927295208 = OpConstant %float 0.927295208
-         %52 = OpConstantComposite %v4float %float_1_57079637 %float_1_11976957 %float_0x1p_128 %float_0_927295208
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-      %int_3 = OpConstant %int 3
-      %int_6 = OpConstant %int 6
-     %uint_3 = OpConstant %uint 3
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %131 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-         %v2 = OpVariable %_ptr_Function_v4float Function %5
-         %v3 = OpVariable %_ptr_Function_v4float Function %5
-         %v4 = OpVariable %_ptr_Function_v4float Function %5
-       %x_69 = OpVariable %_ptr_Function_bool Function %26
-       %x_77 = OpVariable %_ptr_Function_bool Function %26
-       %x_85 = OpVariable %_ptr_Function_bool Function %26
-       %x_93 = OpVariable %_ptr_Function_bool Function %26
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_78_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_94_phi = OpVariable %_ptr_Function_bool Function %26
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %41 = OpLoad %float %40
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %46 = OpLoad %float %45
-         %47 = OpCompositeConstruct %v4float %39 %41 %44 %46
-               OpStore %v1 %47
-               OpStore %v2 %52
-         %53 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %55 = OpCompositeConstruct %v4float %54 %54 %54 %54
-               OpStore %v3 %55
-         %56 = OpLoad %v4float %v1
-         %57 = OpLoad %v4float %v2
-         %58 = OpLoad %v4float %v3
-         %59 = OpExtInst %v4float %60 SmoothStep %56 %57 %58
-               OpStore %v4 %59
-         %61 = OpLoad %v4float %v4
-         %62 = OpCompositeExtract %float %61 0
-         %63 = OpCompositeExtract %float %61 1
-         %64 = OpCompositeExtract %float %61 3
-         %65 = OpCompositeExtract %float %61 0
-         %66 = OpCompositeConstruct %v4float %62 %63 %64 %65
-               OpStore %x_GLF_color %66
-         %68 = OpAccessChain %_ptr_Function_float %v4 %uint_0
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %72 = OpLoad %float %71
-         %73 = OpFOrdGreaterThan %bool %69 %72
-               OpStore %x_70_phi %73
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %74
-         %75 = OpLabel
-         %76 = OpAccessChain %_ptr_Function_float %v4 %uint_0
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_5
-         %80 = OpLoad %float %79
-         %81 = OpFOrdLessThan %bool %77 %80
-               OpStore %x_69 %81
-         %82 = OpLoad %bool %x_69
-               OpStore %x_70_phi %82
-               OpBranch %74
-         %74 = OpLabel
-         %83 = OpLoad %bool %x_70_phi
-               OpStore %x_78_phi %83
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %84
-         %85 = OpLabel
-         %87 = OpAccessChain %_ptr_Function_float %v4 %uint_1
-         %88 = OpLoad %float %87
-         %90 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %91 = OpLoad %float %90
-         %92 = OpFOrdGreaterThan %bool %88 %91
-               OpStore %x_77 %92
-         %93 = OpLoad %bool %x_77
-               OpStore %x_78_phi %93
-               OpBranch %84
-         %84 = OpLabel
-         %94 = OpLoad %bool %x_78_phi
-               OpStore %x_86_phi %94
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-         %97 = OpAccessChain %_ptr_Function_float %v4 %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_6
-        %101 = OpLoad %float %100
-        %102 = OpFOrdLessThan %bool %98 %101
-               OpStore %x_85 %102
-        %103 = OpLoad %bool %x_85
-               OpStore %x_86_phi %103
-               OpBranch %95
-         %95 = OpLabel
-        %104 = OpLoad %bool %x_86_phi
-               OpStore %x_94_phi %104
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %105
-        %106 = OpLabel
-        %108 = OpAccessChain %_ptr_Function_float %v4 %uint_3
-        %109 = OpLoad %float %108
-        %110 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %111 = OpLoad %float %110
-        %112 = OpFOrdEqual %bool %109 %111
-               OpStore %x_93 %112
-        %113 = OpLoad %bool %x_93
-               OpStore %x_94_phi %113
-               OpBranch %105
-        %105 = OpLabel
-        %114 = OpLoad %bool %x_94_phi
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %119 = OpLoad %float %118
-        %121 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %122 = OpLoad %float %121
-        %123 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %124 = OpLoad %float %123
-        %125 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %126 = OpLoad %float %125
-        %127 = OpCompositeConstruct %v4float %119 %122 %124 %126
-               OpStore %x_GLF_color %127
-               OpBranch %115
-        %117 = OpLabel
-        %128 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %129 = OpLoad %float %128
-        %130 = OpCompositeConstruct %v4float %129 %129 %129 %129
-               OpStore %x_GLF_color %130
-               OpBranch %115
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %131
-        %134 = OpLabel
-        %135 = OpFunctionCall %void %main_1
-        %136 = OpLoad %v4float %x_GLF_color
-        %137 = OpCompositeConstruct %main_out %136
-               OpReturnValue %137
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-        %139 = OpLabel
-        %140 = OpFunctionCall %main_out %main_inner
-        %141 = OpCompositeExtract %v4float %140 0
-               OpStore %x_GLF_color_1_1 %141
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a957299..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-asin-undefined-smoothstep/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,96 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 7>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec4<f32>;
-  var v2 : vec4<f32>;
-  var v3 : vec4<f32>;
-  var v4 : vec4<f32>;
-  var x_69 : bool;
-  var x_77 : bool;
-  var x_85 : bool;
-  var x_93 : bool;
-  var x_70_phi : bool;
-  var x_78_phi : bool;
-  var x_86_phi : bool;
-  var x_94_phi : bool;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[2];
-  v1 = vec4<f32>(x_41, x_43, x_45, x_47);
-  v2 = vec4<f32>(1.570796371, 1.119769573, 0x1p+128, 0.927295208);
-  let x_50 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v3 = vec4<f32>(x_50, x_50, x_50, x_50);
-  let x_52 : vec4<f32> = v1;
-  let x_53 : vec4<f32> = v2;
-  let x_54 : vec4<f32> = v3;
-  v4 = smoothStep(x_52, x_53, x_54);
-  let x_56 : vec4<f32> = v4;
-  x_GLF_color = vec4<f32>(x_56.x, x_56.y, x_56.w, x_56.x);
-  let x_59 : f32 = v4.x;
-  let x_61 : f32 = x_6.x_GLF_uniform_float_values[4];
-  let x_62 : bool = (x_59 > x_61);
-  x_70_phi = x_62;
-  if (x_62) {
-    let x_66 : f32 = v4.x;
-    let x_68 : f32 = x_6.x_GLF_uniform_float_values[5];
-    x_69 = (x_66 < x_68);
-    x_70_phi = x_69;
-  }
-  let x_70 : bool = x_70_phi;
-  x_78_phi = x_70;
-  if (x_70) {
-    let x_74 : f32 = v4.y;
-    let x_76 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_77 = (x_74 > x_76);
-    x_78_phi = x_77;
-  }
-  let x_78 : bool = x_78_phi;
-  x_86_phi = x_78;
-  if (x_78) {
-    let x_82 : f32 = v4.y;
-    let x_84 : f32 = x_6.x_GLF_uniform_float_values[6];
-    x_85 = (x_82 < x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_94_phi = x_86;
-  if (x_86) {
-    let x_90 : f32 = v4.w;
-    let x_92 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_93 = (x_90 == x_92);
-    x_94_phi = x_93;
-  }
-  let x_94 : bool = x_94_phi;
-  if (x_94) {
-    let x_99 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_101 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_103 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_105 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_99, x_101, x_103, x_105);
-  } else {
-    let x_108 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_108, x_108, x_108, x_108);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d25ae2c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float f = 0.0f;
-  bool x_56 = false;
-  bool x_57_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_32 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_35 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  v = float4(float(x_32), float(x_35), -621.596008301f, float(x_38));
-  f = atan(trunc(v)).z;
-  const float x_45 = f;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const bool x_49 = (x_45 > -(x_47));
-  x_57_phi = x_49;
-  if (x_49) {
-    const float x_52 = f;
-    const float x_54 = asfloat(x_9[1].x);
-    x_56 = (x_52 < -(x_54));
-    x_57_phi = x_56;
-  }
-  if (x_57_phi) {
-    const int x_62 = asint(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_68 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_71 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_62), float(x_65), float(x_68), float(x_71));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_75 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_76 = float(x_75);
-    x_GLF_color = float4(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.msl
deleted file mode 100644
index c26b21e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float f = 0.0f;
-  bool x_56 = false;
-  bool x_57_phi = false;
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  v = float4(float(x_32), float(x_35), -621.596008301f, float(x_38));
-  float4 const x_41 = v;
-  f = atan(trunc(x_41)).z;
-  float const x_45 = f;
-  float const x_47 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_49 = (x_45 > -(x_47));
-  x_57_phi = x_49;
-  if (x_49) {
-    float const x_52 = f;
-    float const x_54 = x_9.x_GLF_uniform_float_values.arr[1].el;
-    x_56 = (x_52 < -(x_54));
-    x_57_phi = x_56;
-  }
-  bool const x_57 = x_57_phi;
-  if (x_57) {
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_68 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_62), float(x_65), float(x_68), float(x_71));
-  } else {
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_76 = float(x_75);
-    *(tint_symbol_3) = float4(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a7b854b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,159 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 99
-; Schema: 0
-               OpCapability Shader
-         %49 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %f "f"
-               OpName %x_56 "x_56"
-               OpName %x_57_phi "x_57_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %27 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %31 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%float_n621_596008 = OpConstant %float -621.596008
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %f = OpVariable %_ptr_Function_float Function %27
-       %x_56 = OpVariable %_ptr_Function_bool Function %31
-   %x_57_phi = OpVariable %_ptr_Function_bool Function %31
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpConvertSToF %float %37
-         %43 = OpConvertSToF %float %39
-         %45 = OpConvertSToF %float %41
-         %46 = OpCompositeConstruct %v4float %42 %43 %float_n621_596008 %45
-               OpStore %v %46
-         %47 = OpLoad %v4float %v
-         %50 = OpExtInst %v4float %49 Trunc %47
-         %48 = OpExtInst %v4float %49 Atan %50
-         %51 = OpCompositeExtract %float %48 2
-               OpStore %f %51
-         %52 = OpLoad %float %f
-         %54 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpFNegate %float %55
-         %57 = OpFOrdGreaterThan %bool %52 %56
-               OpStore %x_57_phi %57
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-         %60 = OpLoad %float %f
-         %62 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %63 = OpLoad %float %62
-         %64 = OpFNegate %float %63
-         %65 = OpFOrdLessThan %bool %60 %64
-               OpStore %x_56 %65
-         %66 = OpLoad %bool %x_56
-               OpStore %x_57_phi %66
-               OpBranch %58
-         %58 = OpLabel
-         %67 = OpLoad %bool %x_57_phi
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %78 = OpLoad %int %77
-         %79 = OpConvertSToF %float %72
-         %80 = OpConvertSToF %float %74
-         %81 = OpConvertSToF %float %76
-         %82 = OpConvertSToF %float %78
-         %83 = OpCompositeConstruct %v4float %79 %80 %81 %82
-               OpStore %x_GLF_color %83
-               OpBranch %68
-         %70 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpConvertSToF %float %85
-         %87 = OpCompositeConstruct %v4float %86 %86 %86 %86
-               OpStore %x_GLF_color %87
-               OpBranch %68
-         %68 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-         %91 = OpLabel
-         %92 = OpFunctionCall %void %main_1
-         %93 = OpLoad %v4float %x_GLF_color
-         %94 = OpCompositeConstruct %main_out %93
-               OpReturnValue %94
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %96 = OpLabel
-         %97 = OpFunctionCall %main_out %main_inner
-         %98 = OpCompositeExtract %v4float %97 0
-               OpStore %x_GLF_color_1_1 %98
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0ac797e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,66 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var f : f32;
-  var x_56 : bool;
-  var x_57_phi : bool;
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  v = vec4<f32>(f32(x_32), f32(x_35), -621.596008301, f32(x_38));
-  let x_41 : vec4<f32> = v;
-  f = atan(trunc(x_41)).z;
-  let x_45 : f32 = f;
-  let x_47 : f32 = x_9.x_GLF_uniform_float_values[0];
-  let x_49 : bool = (x_45 > -(x_47));
-  x_57_phi = x_49;
-  if (x_49) {
-    let x_52 : f32 = f;
-    let x_54 : f32 = x_9.x_GLF_uniform_float_values[1];
-    x_56 = (x_52 < -(x_54));
-    x_57_phi = x_56;
-  }
-  let x_57 : bool = x_57_phi;
-  if (x_57) {
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_68 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_62), f32(x_65), f32(x_68), f32(x_71));
-  } else {
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_76 : f32 = f32(x_75);
-    x_GLF_color = vec4<f32>(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d25ae2c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float f = 0.0f;
-  bool x_56 = false;
-  bool x_57_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_32 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_35 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  v = float4(float(x_32), float(x_35), -621.596008301f, float(x_38));
-  f = atan(trunc(v)).z;
-  const float x_45 = f;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const bool x_49 = (x_45 > -(x_47));
-  x_57_phi = x_49;
-  if (x_49) {
-    const float x_52 = f;
-    const float x_54 = asfloat(x_9[1].x);
-    x_56 = (x_52 < -(x_54));
-    x_57_phi = x_56;
-  }
-  if (x_57_phi) {
-    const int x_62 = asint(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_68 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_71 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_62), float(x_65), float(x_68), float(x_71));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_75 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_76 = float(x_75);
-    x_GLF_color = float4(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.msl
deleted file mode 100644
index c26b21e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float f = 0.0f;
-  bool x_56 = false;
-  bool x_57_phi = false;
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  v = float4(float(x_32), float(x_35), -621.596008301f, float(x_38));
-  float4 const x_41 = v;
-  f = atan(trunc(x_41)).z;
-  float const x_45 = f;
-  float const x_47 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_49 = (x_45 > -(x_47));
-  x_57_phi = x_49;
-  if (x_49) {
-    float const x_52 = f;
-    float const x_54 = x_9.x_GLF_uniform_float_values.arr[1].el;
-    x_56 = (x_52 < -(x_54));
-    x_57_phi = x_56;
-  }
-  bool const x_57 = x_57_phi;
-  if (x_57) {
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_68 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_62), float(x_65), float(x_68), float(x_71));
-  } else {
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_76 = float(x_75);
-    *(tint_symbol_3) = float4(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a7b854b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,159 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 99
-; Schema: 0
-               OpCapability Shader
-         %49 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %f "f"
-               OpName %x_56 "x_56"
-               OpName %x_57_phi "x_57_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %27 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %31 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%float_n621_596008 = OpConstant %float -621.596008
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %f = OpVariable %_ptr_Function_float Function %27
-       %x_56 = OpVariable %_ptr_Function_bool Function %31
-   %x_57_phi = OpVariable %_ptr_Function_bool Function %31
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpConvertSToF %float %37
-         %43 = OpConvertSToF %float %39
-         %45 = OpConvertSToF %float %41
-         %46 = OpCompositeConstruct %v4float %42 %43 %float_n621_596008 %45
-               OpStore %v %46
-         %47 = OpLoad %v4float %v
-         %50 = OpExtInst %v4float %49 Trunc %47
-         %48 = OpExtInst %v4float %49 Atan %50
-         %51 = OpCompositeExtract %float %48 2
-               OpStore %f %51
-         %52 = OpLoad %float %f
-         %54 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpFNegate %float %55
-         %57 = OpFOrdGreaterThan %bool %52 %56
-               OpStore %x_57_phi %57
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-         %60 = OpLoad %float %f
-         %62 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %63 = OpLoad %float %62
-         %64 = OpFNegate %float %63
-         %65 = OpFOrdLessThan %bool %60 %64
-               OpStore %x_56 %65
-         %66 = OpLoad %bool %x_56
-               OpStore %x_57_phi %66
-               OpBranch %58
-         %58 = OpLabel
-         %67 = OpLoad %bool %x_57_phi
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %78 = OpLoad %int %77
-         %79 = OpConvertSToF %float %72
-         %80 = OpConvertSToF %float %74
-         %81 = OpConvertSToF %float %76
-         %82 = OpConvertSToF %float %78
-         %83 = OpCompositeConstruct %v4float %79 %80 %81 %82
-               OpStore %x_GLF_color %83
-               OpBranch %68
-         %70 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpConvertSToF %float %85
-         %87 = OpCompositeConstruct %v4float %86 %86 %86 %86
-               OpStore %x_GLF_color %87
-               OpBranch %68
-         %68 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-         %91 = OpLabel
-         %92 = OpFunctionCall %void %main_1
-         %93 = OpLoad %v4float %x_GLF_color
-         %94 = OpCompositeConstruct %main_out %93
-               OpReturnValue %94
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %96 = OpLabel
-         %97 = OpFunctionCall %main_out %main_inner
-         %98 = OpCompositeExtract %v4float %97 0
-               OpStore %x_GLF_color_1_1 %98
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 0ac797e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-atan-trunc-vec4/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,66 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var f : f32;
-  var x_56 : bool;
-  var x_57_phi : bool;
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  v = vec4<f32>(f32(x_32), f32(x_35), -621.596008301, f32(x_38));
-  let x_41 : vec4<f32> = v;
-  f = atan(trunc(x_41)).z;
-  let x_45 : f32 = f;
-  let x_47 : f32 = x_9.x_GLF_uniform_float_values[0];
-  let x_49 : bool = (x_45 > -(x_47));
-  x_57_phi = x_49;
-  if (x_49) {
-    let x_52 : f32 = f;
-    let x_54 : f32 = x_9.x_GLF_uniform_float_values[1];
-    x_56 = (x_52 < -(x_54));
-    x_57_phi = x_56;
-  }
-  let x_57 : bool = x_57_phi;
-  if (x_57) {
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_68 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_62), f32(x_65), f32(x_68), f32(x_71));
-  } else {
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_76 : f32 = f32(x_75);
-    x_GLF_color = vec4<f32>(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b2ee8b3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_i1_(inout int x) {
-  const int x_45 = x;
-  if ((x_45 == 10)) {
-    discard;
-  }
-  const int x_49 = x;
-  return x_49;
-}
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int param = 0;
-  int x_37 = 0;
-  int x_35_phi = 0;
-  a = 0;
-  const int x_33 = asint(x_9[0].x);
-  b = x_33;
-  x_35_phi = x_33;
-  while (true) {
-    const int x_35 = x_35_phi;
-    param = x_35;
-    x_37 = func_i1_(param);
-    a = x_37;
-    const int x_36 = (x_35 + 1);
-    b = x_36;
-    x_35_phi = x_36;
-    if ((x_36 < 4)) {
-    } else {
-      break;
-    }
-  }
-  if ((x_37 == asint(3))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x000001D546D5DC90(6,12-25): error X3507: 'func_i1_': Not all control paths return a value
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.msl
deleted file mode 100644
index a5a977a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_i1_(thread int* const x) {
-  int const x_45 = *(x);
-  if ((x_45 == 10)) {
-    discard_fragment();
-  }
-  int const x_49 = *(x);
-  return x_49;
-}
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  int param = 0;
-  int x_37 = 0;
-  int x_35_phi = 0;
-  a = 0;
-  int const x_33 = x_9.zero;
-  b = x_33;
-  x_35_phi = x_33;
-  while (true) {
-    int const x_35 = x_35_phi;
-    param = x_35;
-    x_37 = func_i1_(&(param));
-    a = x_37;
-    int const x_36 = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-    b = x_36;
-    x_35_phi = x_36;
-    if ((x_36 < 4)) {
-    } else {
-      break;
-    }
-  }
-  if ((x_37 == as_type<int>(3))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8eb3378..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %param "param"
-               OpName %x_37 "x_37"
-               OpName %x_35_phi "x_35_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %int %_ptr_Function_int
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-       %void = OpTypeVoid
-         %26 = OpTypeFunction %void
-         %31 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %66 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %67 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %int None %12
-          %x = OpFunctionParameter %_ptr_Function_int
-         %16 = OpLabel
-         %18 = OpLoad %int %x
-         %20 = OpIEqual %bool %18 %int_10
-               OpSelectionMerge %22 None
-               OpBranchConditional %20 %23 %22
-         %23 = OpLabel
-               OpKill
-         %22 = OpLabel
-         %25 = OpLoad %int %x
-               OpReturnValue %25
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %26
-         %29 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %31
-          %b = OpVariable %_ptr_Function_int Function %31
-      %param = OpVariable %_ptr_Function_int Function %31
-       %x_37 = OpVariable %_ptr_Function_int Function %31
-   %x_35_phi = OpVariable %_ptr_Function_int Function %31
-               OpStore %a %int_0
-         %40 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %41 = OpLoad %int %40
-               OpStore %b %41
-               OpStore %x_35_phi %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %46 = OpLoad %int %x_35_phi
-               OpStore %param %46
-         %47 = OpFunctionCall %int %func_i1_ %param
-               OpStore %x_37 %47
-         %49 = OpLoad %int %x_37
-               OpStore %a %49
-         %51 = OpIAdd %int %46 %int_1
-               OpStore %b %51
-               OpStore %x_35_phi %51
-         %53 = OpSLessThan %bool %51 %int_4
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpBranch %54
-         %56 = OpLabel
-               OpBranch %43
-         %54 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %42
-         %43 = OpLabel
-         %57 = OpLoad %int %x_37
-         %58 = OpCopyObject %int %int_3
-         %60 = OpIEqual %bool %57 %58
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpStore %x_GLF_color %66
-               OpBranch %61
-         %63 = OpLabel
-               OpStore %x_GLF_color %67
-               OpBranch %61
-         %61 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-         %71 = OpLabel
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %26
-         %76 = OpLabel
-         %77 = OpFunctionCall %main_out %main_inner
-         %78 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 39b2064..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) -> i32 {
-  let x_45 : i32 = *(x);
-  if ((x_45 == 10)) {
-    discard;
-  }
-  let x_49 : i32 = *(x);
-  return x_49;
-}
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var param : i32;
-  var x_37 : i32;
-  var x_35_phi : i32;
-  a = 0;
-  let x_33 : i32 = x_9.zero;
-  b = x_33;
-  x_35_phi = x_33;
-  loop {
-    let x_35 : i32 = x_35_phi;
-    param = x_35;
-    x_37 = func_i1_(&(param));
-    a = x_37;
-    let x_36 : i32 = (x_35 + 1);
-    b = x_36;
-    x_35_phi = x_36;
-    if ((x_36 < 4)) {
-    } else {
-      break;
-    }
-  }
-  if ((x_37 == bitcast<i32>(3))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 19fe83a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_i1_(inout int x) {
-  const int x_45 = x;
-  if ((x_45 == 10)) {
-    discard;
-  }
-  const int x_49 = x;
-  return x_49;
-}
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int param = 0;
-  int x_37 = 0;
-  int x_35_phi = 0;
-  a = 0;
-  const int x_33 = asint(x_9[0].x);
-  b = x_33;
-  x_35_phi = x_33;
-  while (true) {
-    const int x_35 = x_35_phi;
-    param = x_35;
-    x_37 = func_i1_(param);
-    a = x_37;
-    const int x_36 = (x_35 + 1);
-    b = x_36;
-    x_35_phi = x_36;
-    if ((x_36 < 4)) {
-    } else {
-      break;
-    }
-  }
-  if ((x_37 == asint(3))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x0000026EBFC3A3B0(6,12-25): error X3507: 'func_i1_': Not all control paths return a value
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.msl
deleted file mode 100644
index a5a977a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_i1_(thread int* const x) {
-  int const x_45 = *(x);
-  if ((x_45 == 10)) {
-    discard_fragment();
-  }
-  int const x_49 = *(x);
-  return x_49;
-}
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  int param = 0;
-  int x_37 = 0;
-  int x_35_phi = 0;
-  a = 0;
-  int const x_33 = x_9.zero;
-  b = x_33;
-  x_35_phi = x_33;
-  while (true) {
-    int const x_35 = x_35_phi;
-    param = x_35;
-    x_37 = func_i1_(&(param));
-    a = x_37;
-    int const x_36 = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-    b = x_36;
-    x_35_phi = x_36;
-    if ((x_36 < 4)) {
-    } else {
-      break;
-    }
-  }
-  if ((x_37 == as_type<int>(3))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8eb3378..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %param "param"
-               OpName %x_37 "x_37"
-               OpName %x_35_phi "x_35_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %int %_ptr_Function_int
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-       %void = OpTypeVoid
-         %26 = OpTypeFunction %void
-         %31 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %66 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %67 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %int None %12
-          %x = OpFunctionParameter %_ptr_Function_int
-         %16 = OpLabel
-         %18 = OpLoad %int %x
-         %20 = OpIEqual %bool %18 %int_10
-               OpSelectionMerge %22 None
-               OpBranchConditional %20 %23 %22
-         %23 = OpLabel
-               OpKill
-         %22 = OpLabel
-         %25 = OpLoad %int %x
-               OpReturnValue %25
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %26
-         %29 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %31
-          %b = OpVariable %_ptr_Function_int Function %31
-      %param = OpVariable %_ptr_Function_int Function %31
-       %x_37 = OpVariable %_ptr_Function_int Function %31
-   %x_35_phi = OpVariable %_ptr_Function_int Function %31
-               OpStore %a %int_0
-         %40 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %41 = OpLoad %int %40
-               OpStore %b %41
-               OpStore %x_35_phi %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %46 = OpLoad %int %x_35_phi
-               OpStore %param %46
-         %47 = OpFunctionCall %int %func_i1_ %param
-               OpStore %x_37 %47
-         %49 = OpLoad %int %x_37
-               OpStore %a %49
-         %51 = OpIAdd %int %46 %int_1
-               OpStore %b %51
-               OpStore %x_35_phi %51
-         %53 = OpSLessThan %bool %51 %int_4
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpBranch %54
-         %56 = OpLabel
-               OpBranch %43
-         %54 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %42
-         %43 = OpLabel
-         %57 = OpLoad %int %x_37
-         %58 = OpCopyObject %int %int_3
-         %60 = OpIEqual %bool %57 %58
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpStore %x_GLF_color %66
-               OpBranch %61
-         %63 = OpLabel
-               OpStore %x_GLF_color %67
-               OpBranch %61
-         %61 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-         %71 = OpLabel
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %26
-         %76 = OpLabel
-         %77 = OpFunctionCall %main_out %main_inner
-         %78 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 39b2064..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-basic-block-discard-in-function/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) -> i32 {
-  let x_45 : i32 = *(x);
-  if ((x_45 == 10)) {
-    discard;
-  }
-  let x_49 : i32 = *(x);
-  return x_49;
-}
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var param : i32;
-  var x_37 : i32;
-  var x_35_phi : i32;
-  a = 0;
-  let x_33 : i32 = x_9.zero;
-  b = x_33;
-  x_35_phi = x_33;
-  loop {
-    let x_35 : i32 = x_35_phi;
-    param = x_35;
-    x_37 = func_i1_(&(param));
-    a = x_37;
-    let x_36 : i32 = (x_35 + 1);
-    b = x_36;
-    x_35_phi = x_36;
-    if ((x_36 < 4)) {
-    } else {
-      break;
-    }
-  }
-  if ((x_37 == bitcast<i32>(3))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8139112..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int f1_() {
-  int a = 0;
-  int i = 0;
-  a = 256;
-  const float x_65 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_67 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_65 > x_67)) {
-    a = (a + 1);
-  }
-  i = countbits(a);
-  const int x_75 = i;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_77 = asint(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_75 < x_77)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_82 = asint(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    return x_82;
-  }
-  return i;
-}
-
-void main_1() {
-  int a_1 = 0;
-  const int x_38 = f1_();
-  a_1 = x_38;
-  const int x_39 = a_1;
-  const int x_41 = asint(x_11[2].x);
-  if ((x_39 == x_41)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_11[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_50 = asint(x_11[1].x);
-    const int x_53 = asint(x_11[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_11[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    const int x_60 = asint(x_11[1].x);
-    const float x_61 = float(x_60);
-    x_GLF_color = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.msl
deleted file mode 100644
index f7867d5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,88 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int f1_(constant buf0& x_8, constant buf1& x_11, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 256;
-  float const x_65 = (*(tint_symbol_3)).y;
-  float const x_67 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_65 > x_67)) {
-    int const x_71 = a;
-    a = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-  }
-  int const x_73 = a;
-  i = popcount(x_73);
-  int const x_75 = i;
-  int const x_77 = x_11.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_75 < x_77)) {
-    int const x_82 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    return x_82;
-  }
-  int const x_83 = i;
-  return x_83;
-}
-
-void main_1(constant buf0& x_8, constant buf1& x_11, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int a_1 = 0;
-  int const x_38 = f1_(x_8, x_11, tint_symbol_4);
-  a_1 = x_38;
-  int const x_39 = a_1;
-  int const x_41 = x_11.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_39 == x_41)) {
-    int const x_47 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    int const x_50 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_53 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    int const x_60 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    float const x_61 = float(x_60);
-    *(tint_symbol_5) = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, constant buf1& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_8, x_11, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_11, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d915897..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,171 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 102
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f1_ "f1_"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %a_1 "a_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %23 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-    %int_256 = OpConstant %int 256
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %void = OpTypeVoid
-         %58 = OpTypeFunction %void
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %89 = OpTypeFunction %main_out %v4float
-        %f1_ = OpFunction %int None %23
-         %25 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %28
-          %i = OpVariable %_ptr_Function_int Function %28
-               OpStore %a %int_256
-         %32 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %33 = OpLoad %float %32
-         %37 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThan %bool %33 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %41
-         %42 = OpLabel
-         %43 = OpLoad %int %a
-         %45 = OpIAdd %int %43 %int_1
-               OpStore %a %45
-               OpBranch %41
-         %41 = OpLabel
-         %46 = OpLoad %int %a
-         %47 = OpBitCount %int %46
-               OpStore %i %47
-         %48 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpSLessThan %bool %48 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %56 = OpLoad %int %55
-               OpReturnValue %56
-         %53 = OpLabel
-         %57 = OpLoad %int %i
-               OpReturnValue %57
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %58
-         %61 = OpLabel
-        %a_1 = OpVariable %_ptr_Function_int Function %28
-         %63 = OpFunctionCall %int %f1_
-               OpStore %a_1 %63
-         %64 = OpLoad %int %a_1
-         %66 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %67 = OpLoad %int %66
-         %68 = OpIEqual %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %73
-         %81 = OpConvertSToF %float %75
-         %82 = OpConvertSToF %float %77
-         %83 = OpConvertSToF %float %79
-         %84 = OpCompositeConstruct %v4float %80 %81 %82 %83
-               OpStore %x_GLF_color %84
-               OpBranch %69
-         %71 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %86
-         %88 = OpCompositeConstruct %v4float %87 %87 %87 %87
-               OpStore %x_GLF_color %88
-               OpBranch %69
-         %69 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %89
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %93 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %94 = OpFunctionCall %void %main_1
-         %95 = OpLoad %v4float %x_GLF_color
-         %96 = OpCompositeConstruct %main_out %95
-               OpReturnValue %96
-               OpFunctionEnd
-       %main = OpFunction %void None %58
-         %98 = OpLabel
-        %100 = OpLoad %v4float %gl_FragCoord_param_1
-         %99 = OpFunctionCall %main_out %main_inner %100
-        %101 = OpCompositeExtract %v4float %99 0
-               OpStore %x_GLF_color_1_1 %101
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a14b4cb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f1_() -> i32 {
-  var a : i32;
-  var i : i32;
-  a = 256;
-  let x_65 : f32 = gl_FragCoord.y;
-  let x_67 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_65 > x_67)) {
-    let x_71 : i32 = a;
-    a = (x_71 + 1);
-  }
-  let x_73 : i32 = a;
-  i = countOneBits(x_73);
-  let x_75 : i32 = i;
-  let x_77 : i32 = x_11.x_GLF_uniform_int_values[0];
-  if ((x_75 < x_77)) {
-    let x_82 : i32 = x_11.x_GLF_uniform_int_values[0];
-    return x_82;
-  }
-  let x_83 : i32 = i;
-  return x_83;
-}
-
-fn main_1() {
-  var a_1 : i32;
-  let x_38 : i32 = f1_();
-  a_1 = x_38;
-  let x_39 : i32 = a_1;
-  let x_41 : i32 = x_11.x_GLF_uniform_int_values[2];
-  if ((x_39 == x_41)) {
-    let x_47 : i32 = x_11.x_GLF_uniform_int_values[0];
-    let x_50 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_53 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_11.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_47), f32(x_50), f32(x_53), f32(x_56));
-  } else {
-    let x_60 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_61 : f32 = f32(x_60);
-    x_GLF_color = vec4<f32>(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8139112..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int f1_() {
-  int a = 0;
-  int i = 0;
-  a = 256;
-  const float x_65 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_67 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_65 > x_67)) {
-    a = (a + 1);
-  }
-  i = countbits(a);
-  const int x_75 = i;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_77 = asint(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_75 < x_77)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_82 = asint(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    return x_82;
-  }
-  return i;
-}
-
-void main_1() {
-  int a_1 = 0;
-  const int x_38 = f1_();
-  a_1 = x_38;
-  const int x_39 = a_1;
-  const int x_41 = asint(x_11[2].x);
-  if ((x_39 == x_41)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_11[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_50 = asint(x_11[1].x);
-    const int x_53 = asint(x_11[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_11[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    const int x_60 = asint(x_11[1].x);
-    const float x_61 = float(x_60);
-    x_GLF_color = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.msl
deleted file mode 100644
index f7867d5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,88 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int f1_(constant buf0& x_8, constant buf1& x_11, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 256;
-  float const x_65 = (*(tint_symbol_3)).y;
-  float const x_67 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_65 > x_67)) {
-    int const x_71 = a;
-    a = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-  }
-  int const x_73 = a;
-  i = popcount(x_73);
-  int const x_75 = i;
-  int const x_77 = x_11.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_75 < x_77)) {
-    int const x_82 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    return x_82;
-  }
-  int const x_83 = i;
-  return x_83;
-}
-
-void main_1(constant buf0& x_8, constant buf1& x_11, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int a_1 = 0;
-  int const x_38 = f1_(x_8, x_11, tint_symbol_4);
-  a_1 = x_38;
-  int const x_39 = a_1;
-  int const x_41 = x_11.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_39 == x_41)) {
-    int const x_47 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    int const x_50 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_53 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    int const x_60 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    float const x_61 = float(x_60);
-    *(tint_symbol_5) = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, constant buf1& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_8, x_11, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_11, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d915897..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,171 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 102
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f1_ "f1_"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %a_1 "a_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %23 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-    %int_256 = OpConstant %int 256
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %void = OpTypeVoid
-         %58 = OpTypeFunction %void
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %89 = OpTypeFunction %main_out %v4float
-        %f1_ = OpFunction %int None %23
-         %25 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %28
-          %i = OpVariable %_ptr_Function_int Function %28
-               OpStore %a %int_256
-         %32 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %33 = OpLoad %float %32
-         %37 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThan %bool %33 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %41
-         %42 = OpLabel
-         %43 = OpLoad %int %a
-         %45 = OpIAdd %int %43 %int_1
-               OpStore %a %45
-               OpBranch %41
-         %41 = OpLabel
-         %46 = OpLoad %int %a
-         %47 = OpBitCount %int %46
-               OpStore %i %47
-         %48 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpSLessThan %bool %48 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %56 = OpLoad %int %55
-               OpReturnValue %56
-         %53 = OpLabel
-         %57 = OpLoad %int %i
-               OpReturnValue %57
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %58
-         %61 = OpLabel
-        %a_1 = OpVariable %_ptr_Function_int Function %28
-         %63 = OpFunctionCall %int %f1_
-               OpStore %a_1 %63
-         %64 = OpLoad %int %a_1
-         %66 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %67 = OpLoad %int %66
-         %68 = OpIEqual %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %73
-         %81 = OpConvertSToF %float %75
-         %82 = OpConvertSToF %float %77
-         %83 = OpConvertSToF %float %79
-         %84 = OpCompositeConstruct %v4float %80 %81 %82 %83
-               OpStore %x_GLF_color %84
-               OpBranch %69
-         %71 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %86
-         %88 = OpCompositeConstruct %v4float %87 %87 %87 %87
-               OpStore %x_GLF_color %88
-               OpBranch %69
-         %69 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %89
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %93 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %94 = OpFunctionCall %void %main_1
-         %95 = OpLoad %v4float %x_GLF_color
-         %96 = OpCompositeConstruct %main_out %95
-               OpReturnValue %96
-               OpFunctionEnd
-       %main = OpFunction %void None %58
-         %98 = OpLabel
-        %100 = OpLoad %v4float %gl_FragCoord_param_1
-         %99 = OpFunctionCall %main_out %main_inner %100
-        %101 = OpCompositeExtract %v4float %99 0
-               OpStore %x_GLF_color_1_1 %101
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a14b4cb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitcount/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f1_() -> i32 {
-  var a : i32;
-  var i : i32;
-  a = 256;
-  let x_65 : f32 = gl_FragCoord.y;
-  let x_67 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_65 > x_67)) {
-    let x_71 : i32 = a;
-    a = (x_71 + 1);
-  }
-  let x_73 : i32 = a;
-  i = countOneBits(x_73);
-  let x_75 : i32 = i;
-  let x_77 : i32 = x_11.x_GLF_uniform_int_values[0];
-  if ((x_75 < x_77)) {
-    let x_82 : i32 = x_11.x_GLF_uniform_int_values[0];
-    return x_82;
-  }
-  let x_83 : i32 = i;
-  return x_83;
-}
-
-fn main_1() {
-  var a_1 : i32;
-  let x_38 : i32 = f1_();
-  a_1 = x_38;
-  let x_39 : i32 = a_1;
-  let x_41 : i32 = x_11.x_GLF_uniform_int_values[2];
-  if ((x_39 == x_41)) {
-    let x_47 : i32 = x_11.x_GLF_uniform_int_values[0];
-    let x_50 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_53 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_11.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_47), f32(x_50), f32(x_53), f32(x_56));
-  } else {
-    let x_60 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_61 : f32 = f32(x_60);
-    x_GLF_color = vec4<f32>(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.hlsl
deleted file mode 100644
index ef9a28d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_28 = 0;
-  int x_29 = 0;
-  int x_28_phi = 0;
-  int x_31_phi = 0;
-  int x_42_phi = 0;
-  const int x_24 = min(1, reversebits(1));
-  const int x_26 = asint(x_5[3].x);
-  x_28_phi = x_26;
-  x_31_phi = 1;
-  while (true) {
-    int x_32 = 0;
-    x_28 = x_28_phi;
-    const int x_31 = x_31_phi;
-    x_42_phi = x_28;
-    if ((x_31 <= (x_24 - 1))) {
-    } else {
-      break;
-    }
-    x_29 = asint((x_28 + asint(x_31)));
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_38 == 1)) {
-      x_42_phi = x_29;
-      break;
-    }
-    {
-      x_32 = (x_31 + 1);
-      x_28_phi = x_29;
-      x_31_phi = x_32;
-    }
-  }
-  const int x_42 = x_42_phi;
-  const int x_44 = asint(x_5[2].x);
-  if ((x_42 == x_44)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_51 = float(x_50);
-    const int x_53 = asint(x_5[1].x);
-    const float x_54 = float(x_53);
-    x_GLF_color = float4(x_51, x_54, x_54, x_51);
-  } else {
-    const int x_57 = asint(x_5[1].x);
-    const float x_58 = float(x_57);
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.msl
deleted file mode 100644
index d0803c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int x_28 = 0;
-  int x_29 = 0;
-  int x_28_phi = 0;
-  int x_31_phi = 0;
-  int x_42_phi = 0;
-  int const x_24 = min(1, reverse_bits(1));
-  int const x_26 = x_5.x_GLF_uniform_int_values.arr[3].el;
-  x_28_phi = x_26;
-  x_31_phi = 1;
-  while (true) {
-    int x_32 = 0;
-    x_28 = x_28_phi;
-    int const x_31 = x_31_phi;
-    x_42_phi = x_28;
-    if ((x_31 <= as_type<int>((as_type<uint>(x_24) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    x_29 = as_type<int>(as_type<int>((as_type<uint>(x_28) + as_type<uint>(as_type<int>(x_31)))));
-    int const x_38 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_38 == 1)) {
-      x_42_phi = x_29;
-      break;
-    }
-    {
-      x_32 = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-      x_28_phi = x_29;
-      x_31_phi = x_32;
-    }
-  }
-  int const x_42 = x_42_phi;
-  int const x_44 = x_5.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_42 == x_44)) {
-    int const x_50 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    float const x_51 = float(x_50);
-    int const x_53 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    float const x_54 = float(x_53);
-    *(tint_symbol_3) = float4(x_51, x_54, x_54, x_51);
-  } else {
-    int const x_57 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    float const x_58 = float(x_57);
-    *(tint_symbol_3) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.spvasm
deleted file mode 100644
index 1a4c3c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,159 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 93
-; Schema: 0
-               OpCapability Shader
-         %27 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_28 "x_28"
-               OpName %x_29 "x_29"
-               OpName %x_28_phi "x_28_phi"
-               OpName %x_31_phi "x_31_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %x_32 "x_32"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %82 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_28 = OpVariable %_ptr_Function_int Function %21
-       %x_29 = OpVariable %_ptr_Function_int Function %21
-   %x_28_phi = OpVariable %_ptr_Function_int Function %21
-   %x_31_phi = OpVariable %_ptr_Function_int Function %21
-   %x_42_phi = OpVariable %_ptr_Function_int Function %21
-       %x_32 = OpVariable %_ptr_Function_int Function %21
-         %29 = OpBitReverse %int %int_1
-         %26 = OpExtInst %int %27 SMin %int_1 %29
-         %33 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_3
-         %34 = OpLoad %int %33
-               OpStore %x_28_phi %34
-               OpStore %x_31_phi %int_1
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %40 = OpLoad %int %x_28_phi
-               OpStore %x_28 %40
-         %41 = OpLoad %int %x_31_phi
-         %42 = OpLoad %int %x_28
-               OpStore %x_42_phi %42
-         %43 = OpISub %int %26 %int_1
-         %44 = OpSLessThanEqual %bool %41 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %36
-         %46 = OpLabel
-         %50 = OpLoad %int %x_28
-         %51 = OpCopyObject %int %41
-         %52 = OpIAdd %int %50 %51
-         %49 = OpCopyObject %int %52
-               OpStore %x_29 %49
-         %54 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %55 %int_1
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-         %59 = OpLoad %int %x_29
-               OpStore %x_42_phi %59
-               OpBranch %36
-         %57 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %60 = OpIAdd %int %41 %int_1
-               OpStore %x_32 %60
-         %61 = OpLoad %int %x_29
-               OpStore %x_28_phi %61
-         %62 = OpLoad %int %x_32
-               OpStore %x_31_phi %62
-               OpBranch %35
-         %36 = OpLabel
-         %63 = OpLoad %int %x_42_phi
-         %65 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpIEqual %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %72 = OpLoad %int %71
-         %73 = OpConvertSToF %float %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpConvertSToF %float %75
-         %77 = OpCompositeConstruct %v4float %73 %76 %76 %73
-               OpStore %x_GLF_color %77
-               OpBranch %68
-         %70 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %79
-         %81 = OpCompositeConstruct %v4float %80 %80 %80 %80
-               OpStore %x_GLF_color %81
-               OpBranch %68
-         %68 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %82
-         %85 = OpLabel
-         %86 = OpFunctionCall %void %main_1
-         %87 = OpLoad %v4float %x_GLF_color
-         %88 = OpCompositeConstruct %main_out %87
-               OpReturnValue %88
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %90 = OpLabel
-         %91 = OpFunctionCall %main_out %main_inner
-         %92 = OpCompositeExtract %v4float %91 0
-               OpStore %x_GLF_color_1_1 %92
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.wgsl
deleted file mode 100644
index c0b46ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,69 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_28 : i32;
-  var x_29 : i32;
-  var x_28_phi : i32;
-  var x_31_phi : i32;
-  var x_42_phi : i32;
-  let x_24 : i32 = min(1, reverseBits(1));
-  let x_26 : i32 = x_5.x_GLF_uniform_int_values[3];
-  x_28_phi = x_26;
-  x_31_phi = 1;
-  loop {
-    var x_32 : i32;
-    x_28 = x_28_phi;
-    let x_31 : i32 = x_31_phi;
-    x_42_phi = x_28;
-    if ((x_31 <= (x_24 - 1))) {
-    } else {
-      break;
-    }
-    x_29 = bitcast<i32>((x_28 + bitcast<i32>(x_31)));
-    let x_38 : i32 = x_5.x_GLF_uniform_int_values[0];
-    if ((x_38 == 1)) {
-      x_42_phi = x_29;
-      break;
-    }
-
-    continuing {
-      x_32 = (x_31 + 1);
-      x_28_phi = x_29;
-      x_31_phi = x_32;
-    }
-  }
-  let x_42 : i32 = x_42_phi;
-  let x_44 : i32 = x_5.x_GLF_uniform_int_values[2];
-  if ((x_42 == x_44)) {
-    let x_50 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_51 : f32 = f32(x_50);
-    let x_53 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_54 : f32 = f32(x_53);
-    x_GLF_color = vec4<f32>(x_51, x_54, x_54, x_51);
-  } else {
-    let x_57 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_58 : f32 = f32(x_57);
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.hlsl
deleted file mode 100644
index ef9a28d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_28 = 0;
-  int x_29 = 0;
-  int x_28_phi = 0;
-  int x_31_phi = 0;
-  int x_42_phi = 0;
-  const int x_24 = min(1, reversebits(1));
-  const int x_26 = asint(x_5[3].x);
-  x_28_phi = x_26;
-  x_31_phi = 1;
-  while (true) {
-    int x_32 = 0;
-    x_28 = x_28_phi;
-    const int x_31 = x_31_phi;
-    x_42_phi = x_28;
-    if ((x_31 <= (x_24 - 1))) {
-    } else {
-      break;
-    }
-    x_29 = asint((x_28 + asint(x_31)));
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_38 == 1)) {
-      x_42_phi = x_29;
-      break;
-    }
-    {
-      x_32 = (x_31 + 1);
-      x_28_phi = x_29;
-      x_31_phi = x_32;
-    }
-  }
-  const int x_42 = x_42_phi;
-  const int x_44 = asint(x_5[2].x);
-  if ((x_42 == x_44)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_51 = float(x_50);
-    const int x_53 = asint(x_5[1].x);
-    const float x_54 = float(x_53);
-    x_GLF_color = float4(x_51, x_54, x_54, x_51);
-  } else {
-    const int x_57 = asint(x_5[1].x);
-    const float x_58 = float(x_57);
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.msl
deleted file mode 100644
index d0803c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int x_28 = 0;
-  int x_29 = 0;
-  int x_28_phi = 0;
-  int x_31_phi = 0;
-  int x_42_phi = 0;
-  int const x_24 = min(1, reverse_bits(1));
-  int const x_26 = x_5.x_GLF_uniform_int_values.arr[3].el;
-  x_28_phi = x_26;
-  x_31_phi = 1;
-  while (true) {
-    int x_32 = 0;
-    x_28 = x_28_phi;
-    int const x_31 = x_31_phi;
-    x_42_phi = x_28;
-    if ((x_31 <= as_type<int>((as_type<uint>(x_24) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    x_29 = as_type<int>(as_type<int>((as_type<uint>(x_28) + as_type<uint>(as_type<int>(x_31)))));
-    int const x_38 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_38 == 1)) {
-      x_42_phi = x_29;
-      break;
-    }
-    {
-      x_32 = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-      x_28_phi = x_29;
-      x_31_phi = x_32;
-    }
-  }
-  int const x_42 = x_42_phi;
-  int const x_44 = x_5.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_42 == x_44)) {
-    int const x_50 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    float const x_51 = float(x_50);
-    int const x_53 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    float const x_54 = float(x_53);
-    *(tint_symbol_3) = float4(x_51, x_54, x_54, x_51);
-  } else {
-    int const x_57 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    float const x_58 = float(x_57);
-    *(tint_symbol_3) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.spvasm
deleted file mode 100644
index 1a4c3c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,159 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 93
-; Schema: 0
-               OpCapability Shader
-         %27 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_28 "x_28"
-               OpName %x_29 "x_29"
-               OpName %x_28_phi "x_28_phi"
-               OpName %x_31_phi "x_31_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %x_32 "x_32"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %82 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_28 = OpVariable %_ptr_Function_int Function %21
-       %x_29 = OpVariable %_ptr_Function_int Function %21
-   %x_28_phi = OpVariable %_ptr_Function_int Function %21
-   %x_31_phi = OpVariable %_ptr_Function_int Function %21
-   %x_42_phi = OpVariable %_ptr_Function_int Function %21
-       %x_32 = OpVariable %_ptr_Function_int Function %21
-         %29 = OpBitReverse %int %int_1
-         %26 = OpExtInst %int %27 SMin %int_1 %29
-         %33 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_3
-         %34 = OpLoad %int %33
-               OpStore %x_28_phi %34
-               OpStore %x_31_phi %int_1
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %40 = OpLoad %int %x_28_phi
-               OpStore %x_28 %40
-         %41 = OpLoad %int %x_31_phi
-         %42 = OpLoad %int %x_28
-               OpStore %x_42_phi %42
-         %43 = OpISub %int %26 %int_1
-         %44 = OpSLessThanEqual %bool %41 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %36
-         %46 = OpLabel
-         %50 = OpLoad %int %x_28
-         %51 = OpCopyObject %int %41
-         %52 = OpIAdd %int %50 %51
-         %49 = OpCopyObject %int %52
-               OpStore %x_29 %49
-         %54 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %55 %int_1
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-         %59 = OpLoad %int %x_29
-               OpStore %x_42_phi %59
-               OpBranch %36
-         %57 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %60 = OpIAdd %int %41 %int_1
-               OpStore %x_32 %60
-         %61 = OpLoad %int %x_29
-               OpStore %x_28_phi %61
-         %62 = OpLoad %int %x_32
-               OpStore %x_31_phi %62
-               OpBranch %35
-         %36 = OpLabel
-         %63 = OpLoad %int %x_42_phi
-         %65 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpIEqual %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %72 = OpLoad %int %71
-         %73 = OpConvertSToF %float %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpConvertSToF %float %75
-         %77 = OpCompositeConstruct %v4float %73 %76 %76 %73
-               OpStore %x_GLF_color %77
-               OpBranch %68
-         %70 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %79
-         %81 = OpCompositeConstruct %v4float %80 %80 %80 %80
-               OpStore %x_GLF_color %81
-               OpBranch %68
-         %68 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %82
-         %85 = OpLabel
-         %86 = OpFunctionCall %void %main_1
-         %87 = OpLoad %v4float %x_GLF_color
-         %88 = OpCompositeConstruct %main_out %87
-               OpReturnValue %88
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %90 = OpLabel
-         %91 = OpFunctionCall %main_out %main_inner
-         %92 = OpCompositeExtract %v4float %91 0
-               OpStore %x_GLF_color_1_1 %92
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.wgsl
deleted file mode 100644
index c0b46ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitfieldreverse-loop-limit-underflow/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,69 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_28 : i32;
-  var x_29 : i32;
-  var x_28_phi : i32;
-  var x_31_phi : i32;
-  var x_42_phi : i32;
-  let x_24 : i32 = min(1, reverseBits(1));
-  let x_26 : i32 = x_5.x_GLF_uniform_int_values[3];
-  x_28_phi = x_26;
-  x_31_phi = 1;
-  loop {
-    var x_32 : i32;
-    x_28 = x_28_phi;
-    let x_31 : i32 = x_31_phi;
-    x_42_phi = x_28;
-    if ((x_31 <= (x_24 - 1))) {
-    } else {
-      break;
-    }
-    x_29 = bitcast<i32>((x_28 + bitcast<i32>(x_31)));
-    let x_38 : i32 = x_5.x_GLF_uniform_int_values[0];
-    if ((x_38 == 1)) {
-      x_42_phi = x_29;
-      break;
-    }
-
-    continuing {
-      x_32 = (x_31 + 1);
-      x_28_phi = x_29;
-      x_31_phi = x_32;
-    }
-  }
-  let x_42 : i32 = x_42_phi;
-  let x_44 : i32 = x_5.x_GLF_uniform_int_values[2];
-  if ((x_42 == x_44)) {
-    let x_50 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_51 : f32 = f32(x_50);
-    let x_53 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_54 : f32 = f32(x_53);
-    x_GLF_color = vec4<f32>(x_51, x_54, x_54, x_51);
-  } else {
-    let x_57 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_58 : f32 = f32(x_57);
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 039913f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_6 : register(b2, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int x_32 = 0;
-  const float x_34 = asfloat(x_6[0].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_34 < x_36)) {
-    const int x_42 = asint(x_10[1].x);
-    x_32 = x_42;
-  } else {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_44 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_32 = x_44;
-  }
-  a = ~((x_32 | 1));
-  const int x_48 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_50 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_48 == ~(x_50))) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_60 = asint(x_10[1].x);
-    const int x_63 = asint(x_10[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_57), float(x_60), float(x_63), float(x_66));
-  } else {
-    const int x_70 = asint(x_10[1].x);
-    const float x_71 = float(x_70);
-    x_GLF_color = float4(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.msl
deleted file mode 100644
index 47e12de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf2 {
-  /* 0x0000 */ float zero;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf2& x_6, constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int x_32 = 0;
-  float const x_34 = x_6.zero;
-  float const x_36 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_34 < x_36)) {
-    int const x_42 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    x_32 = x_42;
-  } else {
-    int const x_44 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    x_32 = x_44;
-  }
-  int const x_45 = x_32;
-  a = ~((x_45 | 1));
-  int const x_48 = a;
-  int const x_50 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_48 == ~(x_50))) {
-    int const x_57 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_63 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_66 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_57), float(x_60), float(x_63), float(x_66));
-  } else {
-    int const x_70 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_71 = float(x_70);
-    *(tint_symbol_3) = float4(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf2& x_6, constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf2& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]], constant buf1& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 083d97c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %x_32 "x_32"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_6 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %29
-       %x_32 = OpVariable %_ptr_Function_int Function %29
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %34 = OpLoad %float %33
-         %36 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %37 = OpLoad %float %36
-         %38 = OpFOrdLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %46 = OpLoad %int %45
-               OpStore %x_32 %46
-               OpBranch %40
-         %42 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %48 = OpLoad %int %47
-               OpStore %x_32 %48
-               OpBranch %40
-         %40 = OpLabel
-         %49 = OpLoad %int %x_32
-         %51 = OpBitwiseOr %int %49 %int_1
-         %50 = OpNot %int %51
-               OpStore %a %50
-         %52 = OpLoad %int %a
-         %53 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpNot %int %54
-         %56 = OpIEqual %bool %52 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpBranch %57
-         %59 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1e307de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-[[block]]
-struct buf2 {
-  zero : f32;
-};
-
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(2)]] var<uniform> x_6 : buf2;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var x_32 : i32;
-  let x_34 : f32 = x_6.zero;
-  let x_36 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_34 < x_36)) {
-    let x_42 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_32 = x_42;
-  } else {
-    let x_44 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_32 = x_44;
-  }
-  let x_45 : i32 = x_32;
-  a = ~((x_45 | 1));
-  let x_48 : i32 = a;
-  let x_50 : i32 = x_10.x_GLF_uniform_int_values[0];
-  if ((x_48 == ~(x_50))) {
-    let x_57 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_63 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_66 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_57), f32(x_60), f32(x_63), f32(x_66));
-  } else {
-    let x_70 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_71 : f32 = f32(x_70);
-    x_GLF_color = vec4<f32>(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 039913f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_6 : register(b2, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int x_32 = 0;
-  const float x_34 = asfloat(x_6[0].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_34 < x_36)) {
-    const int x_42 = asint(x_10[1].x);
-    x_32 = x_42;
-  } else {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_44 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_32 = x_44;
-  }
-  a = ~((x_32 | 1));
-  const int x_48 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_50 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_48 == ~(x_50))) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_60 = asint(x_10[1].x);
-    const int x_63 = asint(x_10[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_57), float(x_60), float(x_63), float(x_66));
-  } else {
-    const int x_70 = asint(x_10[1].x);
-    const float x_71 = float(x_70);
-    x_GLF_color = float4(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.msl
deleted file mode 100644
index 47e12de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf2 {
-  /* 0x0000 */ float zero;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf2& x_6, constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int x_32 = 0;
-  float const x_34 = x_6.zero;
-  float const x_36 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_34 < x_36)) {
-    int const x_42 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    x_32 = x_42;
-  } else {
-    int const x_44 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    x_32 = x_44;
-  }
-  int const x_45 = x_32;
-  a = ~((x_45 | 1));
-  int const x_48 = a;
-  int const x_50 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_48 == ~(x_50))) {
-    int const x_57 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_63 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_66 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_57), float(x_60), float(x_63), float(x_66));
-  } else {
-    int const x_70 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_71 = float(x_70);
-    *(tint_symbol_3) = float4(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf2& x_6, constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf2& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]], constant buf1& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 083d97c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %x_32 "x_32"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_6 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %29
-       %x_32 = OpVariable %_ptr_Function_int Function %29
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %34 = OpLoad %float %33
-         %36 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %37 = OpLoad %float %36
-         %38 = OpFOrdLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %46 = OpLoad %int %45
-               OpStore %x_32 %46
-               OpBranch %40
-         %42 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %48 = OpLoad %int %47
-               OpStore %x_32 %48
-               OpBranch %40
-         %40 = OpLabel
-         %49 = OpLoad %int %x_32
-         %51 = OpBitwiseOr %int %49 %int_1
-         %50 = OpNot %int %51
-               OpStore %a %50
-         %52 = OpLoad %int %a
-         %53 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpNot %int %54
-         %56 = OpIEqual %bool %52 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpBranch %57
-         %59 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1e307de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-bitwise-inverse-uniform-condition/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-[[block]]
-struct buf2 {
-  zero : f32;
-};
-
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(2)]] var<uniform> x_6 : buf2;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var x_32 : i32;
-  let x_34 : f32 = x_6.zero;
-  let x_36 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_34 < x_36)) {
-    let x_42 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_32 = x_42;
-  } else {
-    let x_44 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_32 = x_44;
-  }
-  let x_45 : i32 = x_32;
-  a = ~((x_45 | 1));
-  let x_48 : i32 = a;
-  let x_50 : i32 = x_10.x_GLF_uniform_int_values[0];
-  if ((x_48 == ~(x_50))) {
-    let x_57 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_63 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_66 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_57), f32(x_60), f32(x_63), f32(x_66));
-  } else {
-    let x_70 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_71 : f32 = f32(x_70);
-    x_GLF_color = vec4<f32>(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 53ef080..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,107 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int a = 0;
-  int i1 = 0;
-  int i2 = 0;
-  int i3 = 0;
-  int i4 = 0;
-  int i5 = 0;
-  int i6 = 0;
-  int i7 = 0;
-  int i8_1 = 0;
-  c = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  a = 0;
-  while (true) {
-    while (true) {
-      set_float4(c, a, 1.0f);
-      i1 = 0;
-      {
-        for(; (i1 < 1); i1 = (i1 + 1)) {
-          i2 = 0;
-          {
-            for(; (i2 < 1); i2 = (i2 + 1)) {
-              i3 = 0;
-              {
-                for(; (i3 < 1); i3 = (i3 + 1)) {
-                  i4 = 0;
-                  {
-                    for(; (i4 < 1); i4 = (i4 + 1)) {
-                      i5 = 0;
-                      {
-                        for(; (i5 < 1); i5 = (i5 + 1)) {
-                          i6 = 0;
-                          {
-                            for(; (i6 < 1); i6 = (i6 + 1)) {
-                              i7 = 0;
-                              {
-                                for(; (i7 < 1); i7 = (i7 + 1)) {
-                                  i8_1 = 0;
-                                  {
-                                    for(; (i8_1 < 17); i8_1 = (i8_1 + 1)) {
-                                      a = (a + 1);
-                                    }
-                                  }
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-      {
-        const float x_123 = gl_FragCoord.x;
-        if ((x_123 < -1.0f)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      const float x_126 = gl_FragCoord.y;
-      if ((x_126 < -1.0f)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = c;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6f4d4bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4 c = 0.0f;
-  int a = 0;
-  int i1 = 0;
-  int i2 = 0;
-  int i3 = 0;
-  int i4 = 0;
-  int i5 = 0;
-  int i6 = 0;
-  int i7 = 0;
-  int i8_1 = 0;
-  c = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  a = 0;
-  while (true) {
-    while (true) {
-      int const x_46 = a;
-      c[x_46] = 1.0f;
-      i1 = 0;
-      while (true) {
-        int const x_52 = i1;
-        if ((x_52 < 1)) {
-        } else {
-          break;
-        }
-        i2 = 0;
-        while (true) {
-          int const x_59 = i2;
-          if ((x_59 < 1)) {
-          } else {
-            break;
-          }
-          i3 = 0;
-          while (true) {
-            int const x_66 = i3;
-            if ((x_66 < 1)) {
-            } else {
-              break;
-            }
-            i4 = 0;
-            while (true) {
-              int const x_73 = i4;
-              if ((x_73 < 1)) {
-              } else {
-                break;
-              }
-              i5 = 0;
-              while (true) {
-                int const x_80 = i5;
-                if ((x_80 < 1)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                while (true) {
-                  int const x_87 = i6;
-                  if ((x_87 < 1)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  while (true) {
-                    int const x_94 = i7;
-                    if ((x_94 < 1)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    while (true) {
-                      int const x_101 = i8_1;
-                      if ((x_101 < 17)) {
-                      } else {
-                        break;
-                      }
-                      int const x_104 = a;
-                      a = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-                      {
-                        int const x_106 = i8_1;
-                        i8_1 = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_108 = i7;
-                      i7 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_110 = i6;
-                    i6 = as_type<int>((as_type<uint>(x_110) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_112 = i5;
-                  i5 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_114 = i4;
-                i4 = as_type<int>((as_type<uint>(x_114) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_116 = i3;
-              i3 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_118 = i2;
-            i2 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_120 = i1;
-          i1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-        }
-      }
-      {
-        float const x_123 = (*(tint_symbol_3)).x;
-        if ((x_123 < -1.0f)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      float const x_126 = (*(tint_symbol_3)).y;
-      if ((x_126 < -1.0f)) {
-      } else {
-        break;
-      }
-    }
-  }
-  float4 const x_128 = c;
-  *(tint_symbol_4) = x_128;
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3cf4812..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,304 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 162
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %a "a"
-               OpName %i1 "i1"
-               OpName %i2 "i2"
-               OpName %i3 "i3"
-               OpName %i4 "i4"
-               OpName %i5 "i5"
-               OpName %i6 "i6"
-               OpName %i7 "i7"
-               OpName %i8_1 "i8_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-     %int_17 = OpConstant %int 17
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n1 = OpConstant %float -1
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-        %149 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %c = OpVariable %_ptr_Function_v4float Function %7
-          %a = OpVariable %_ptr_Function_int Function %20
-         %i1 = OpVariable %_ptr_Function_int Function %20
-         %i2 = OpVariable %_ptr_Function_int Function %20
-         %i3 = OpVariable %_ptr_Function_int Function %20
-         %i4 = OpVariable %_ptr_Function_int Function %20
-         %i5 = OpVariable %_ptr_Function_int Function %20
-         %i6 = OpVariable %_ptr_Function_int Function %20
-         %i7 = OpVariable %_ptr_Function_int Function %20
-       %i8_1 = OpVariable %_ptr_Function_int Function %20
-               OpStore %c %31
-               OpStore %a %int_0
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %41 = OpLoad %int %a
-         %43 = OpAccessChain %_ptr_Function_float %c %41
-               OpStore %43 %float_1
-               OpStore %i1 %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i1
-         %50 = OpSLessThan %bool %48 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %45
-         %52 = OpLabel
-               OpStore %i2 %int_0
-               OpBranch %55
-         %55 = OpLabel
-               OpLoopMerge %56 %57 None
-               OpBranch %58
-         %58 = OpLabel
-         %59 = OpLoad %int %i2
-         %60 = OpSLessThan %bool %59 %int_1
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %56
-         %61 = OpLabel
-               OpStore %i3 %int_0
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %i3
-         %69 = OpSLessThan %bool %68 %int_1
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %65
-         %70 = OpLabel
-               OpStore %i4 %int_0
-               OpBranch %73
-         %73 = OpLabel
-               OpLoopMerge %74 %75 None
-               OpBranch %76
-         %76 = OpLabel
-         %77 = OpLoad %int %i4
-         %78 = OpSLessThan %bool %77 %int_1
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %74
-         %79 = OpLabel
-               OpStore %i5 %int_0
-               OpBranch %82
-         %82 = OpLabel
-               OpLoopMerge %83 %84 None
-               OpBranch %85
-         %85 = OpLabel
-         %86 = OpLoad %int %i5
-         %87 = OpSLessThan %bool %86 %int_1
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-               OpBranch %88
-         %90 = OpLabel
-               OpBranch %83
-         %88 = OpLabel
-               OpStore %i6 %int_0
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %i6
-         %96 = OpSLessThan %bool %95 %int_1
-               OpSelectionMerge %97 None
-               OpBranchConditional %96 %98 %99
-         %98 = OpLabel
-               OpBranch %97
-         %99 = OpLabel
-               OpBranch %92
-         %97 = OpLabel
-               OpStore %i7 %int_0
-               OpBranch %100
-        %100 = OpLabel
-               OpLoopMerge %101 %102 None
-               OpBranch %103
-        %103 = OpLabel
-        %104 = OpLoad %int %i7
-        %105 = OpSLessThan %bool %104 %int_1
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %108
-        %107 = OpLabel
-               OpBranch %106
-        %108 = OpLabel
-               OpBranch %101
-        %106 = OpLabel
-               OpStore %i8_1 %int_0
-               OpBranch %109
-        %109 = OpLabel
-               OpLoopMerge %110 %111 None
-               OpBranch %112
-        %112 = OpLabel
-        %113 = OpLoad %int %i8_1
-        %115 = OpSLessThan %bool %113 %int_17
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-               OpBranch %116
-        %118 = OpLabel
-               OpBranch %110
-        %116 = OpLabel
-        %119 = OpLoad %int %a
-        %120 = OpIAdd %int %119 %int_1
-               OpStore %a %120
-               OpBranch %111
-        %111 = OpLabel
-        %121 = OpLoad %int %i8_1
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %i8_1 %122
-               OpBranch %109
-        %110 = OpLabel
-               OpBranch %102
-        %102 = OpLabel
-        %123 = OpLoad %int %i7
-        %124 = OpIAdd %int %123 %int_1
-               OpStore %i7 %124
-               OpBranch %100
-        %101 = OpLabel
-               OpBranch %93
-         %93 = OpLabel
-        %125 = OpLoad %int %i6
-        %126 = OpIAdd %int %125 %int_1
-               OpStore %i6 %126
-               OpBranch %91
-         %92 = OpLabel
-               OpBranch %84
-         %84 = OpLabel
-        %127 = OpLoad %int %i5
-        %128 = OpIAdd %int %127 %int_1
-               OpStore %i5 %128
-               OpBranch %82
-         %83 = OpLabel
-               OpBranch %75
-         %75 = OpLabel
-        %129 = OpLoad %int %i4
-        %130 = OpIAdd %int %129 %int_1
-               OpStore %i4 %130
-               OpBranch %73
-         %74 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-        %131 = OpLoad %int %i3
-        %132 = OpIAdd %int %131 %int_1
-               OpStore %i3 %132
-               OpBranch %64
-         %65 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-        %133 = OpLoad %int %i2
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %i2 %134
-               OpBranch %55
-         %56 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-        %135 = OpLoad %int %i1
-        %136 = OpIAdd %int %135 %int_1
-               OpStore %i1 %136
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-        %140 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %141 = OpLoad %float %140
-        %143 = OpFOrdLessThan %bool %141 %float_n1
-               OpBranchConditional %143 %37 %38
-         %38 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-        %145 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %146 = OpLoad %float %145
-        %147 = OpFOrdLessThan %bool %146 %float_n1
-               OpBranchConditional %147 %33 %34
-         %34 = OpLabel
-        %148 = OpLoad %v4float %c
-               OpStore %x_GLF_color %148
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %149
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %153 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %154 = OpFunctionCall %void %main_1
-        %155 = OpLoad %v4float %x_GLF_color
-        %156 = OpCompositeConstruct %main_out %155
-               OpReturnValue %156
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-        %158 = OpLabel
-        %160 = OpLoad %v4float %gl_FragCoord_param_1
-        %159 = OpFunctionCall %main_out %main_inner %160
-        %161 = OpCompositeExtract %v4float %159 0
-               OpStore %x_GLF_color_1_1 %161
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 73515b9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,161 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec4<f32>;
-  var a : i32;
-  var i1 : i32;
-  var i2 : i32;
-  var i3 : i32;
-  var i4 : i32;
-  var i5 : i32;
-  var i6 : i32;
-  var i7 : i32;
-  var i8_1 : i32;
-  c = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  a = 0;
-  loop {
-    loop {
-      let x_46 : i32 = a;
-      c[x_46] = 1.0;
-      i1 = 0;
-      loop {
-        let x_52 : i32 = i1;
-        if ((x_52 < 1)) {
-        } else {
-          break;
-        }
-        i2 = 0;
-        loop {
-          let x_59 : i32 = i2;
-          if ((x_59 < 1)) {
-          } else {
-            break;
-          }
-          i3 = 0;
-          loop {
-            let x_66 : i32 = i3;
-            if ((x_66 < 1)) {
-            } else {
-              break;
-            }
-            i4 = 0;
-            loop {
-              let x_73 : i32 = i4;
-              if ((x_73 < 1)) {
-              } else {
-                break;
-              }
-              i5 = 0;
-              loop {
-                let x_80 : i32 = i5;
-                if ((x_80 < 1)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                loop {
-                  let x_87 : i32 = i6;
-                  if ((x_87 < 1)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  loop {
-                    let x_94 : i32 = i7;
-                    if ((x_94 < 1)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    loop {
-                      let x_101 : i32 = i8_1;
-                      if ((x_101 < 17)) {
-                      } else {
-                        break;
-                      }
-                      let x_104 : i32 = a;
-                      a = (x_104 + 1);
-
-                      continuing {
-                        let x_106 : i32 = i8_1;
-                        i8_1 = (x_106 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_108 : i32 = i7;
-                      i7 = (x_108 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_110 : i32 = i6;
-                    i6 = (x_110 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_112 : i32 = i5;
-                  i5 = (x_112 + 1);
-                }
-              }
-
-              continuing {
-                let x_114 : i32 = i4;
-                i4 = (x_114 + 1);
-              }
-            }
-
-            continuing {
-              let x_116 : i32 = i3;
-              i3 = (x_116 + 1);
-            }
-          }
-
-          continuing {
-            let x_118 : i32 = i2;
-            i2 = (x_118 + 1);
-          }
-        }
-
-        continuing {
-          let x_120 : i32 = i1;
-          i1 = (x_120 + 1);
-        }
-      }
-
-      continuing {
-        let x_123 : f32 = gl_FragCoord.x;
-        if ((x_123 < -1.0)) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      let x_126 : f32 = gl_FragCoord.y;
-      if ((x_126 < -1.0)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_128 : vec4<f32> = c;
-  x_GLF_color = x_128;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 53ef080..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,107 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int a = 0;
-  int i1 = 0;
-  int i2 = 0;
-  int i3 = 0;
-  int i4 = 0;
-  int i5 = 0;
-  int i6 = 0;
-  int i7 = 0;
-  int i8_1 = 0;
-  c = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  a = 0;
-  while (true) {
-    while (true) {
-      set_float4(c, a, 1.0f);
-      i1 = 0;
-      {
-        for(; (i1 < 1); i1 = (i1 + 1)) {
-          i2 = 0;
-          {
-            for(; (i2 < 1); i2 = (i2 + 1)) {
-              i3 = 0;
-              {
-                for(; (i3 < 1); i3 = (i3 + 1)) {
-                  i4 = 0;
-                  {
-                    for(; (i4 < 1); i4 = (i4 + 1)) {
-                      i5 = 0;
-                      {
-                        for(; (i5 < 1); i5 = (i5 + 1)) {
-                          i6 = 0;
-                          {
-                            for(; (i6 < 1); i6 = (i6 + 1)) {
-                              i7 = 0;
-                              {
-                                for(; (i7 < 1); i7 = (i7 + 1)) {
-                                  i8_1 = 0;
-                                  {
-                                    for(; (i8_1 < 17); i8_1 = (i8_1 + 1)) {
-                                      a = (a + 1);
-                                    }
-                                  }
-                                }
-                              }
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-      {
-        const float x_123 = gl_FragCoord.x;
-        if ((x_123 < -1.0f)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      const float x_126 = gl_FragCoord.y;
-      if ((x_126 < -1.0f)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = c;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6f4d4bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4 c = 0.0f;
-  int a = 0;
-  int i1 = 0;
-  int i2 = 0;
-  int i3 = 0;
-  int i4 = 0;
-  int i5 = 0;
-  int i6 = 0;
-  int i7 = 0;
-  int i8_1 = 0;
-  c = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  a = 0;
-  while (true) {
-    while (true) {
-      int const x_46 = a;
-      c[x_46] = 1.0f;
-      i1 = 0;
-      while (true) {
-        int const x_52 = i1;
-        if ((x_52 < 1)) {
-        } else {
-          break;
-        }
-        i2 = 0;
-        while (true) {
-          int const x_59 = i2;
-          if ((x_59 < 1)) {
-          } else {
-            break;
-          }
-          i3 = 0;
-          while (true) {
-            int const x_66 = i3;
-            if ((x_66 < 1)) {
-            } else {
-              break;
-            }
-            i4 = 0;
-            while (true) {
-              int const x_73 = i4;
-              if ((x_73 < 1)) {
-              } else {
-                break;
-              }
-              i5 = 0;
-              while (true) {
-                int const x_80 = i5;
-                if ((x_80 < 1)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                while (true) {
-                  int const x_87 = i6;
-                  if ((x_87 < 1)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  while (true) {
-                    int const x_94 = i7;
-                    if ((x_94 < 1)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    while (true) {
-                      int const x_101 = i8_1;
-                      if ((x_101 < 17)) {
-                      } else {
-                        break;
-                      }
-                      int const x_104 = a;
-                      a = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-                      {
-                        int const x_106 = i8_1;
-                        i8_1 = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_108 = i7;
-                      i7 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_110 = i6;
-                    i6 = as_type<int>((as_type<uint>(x_110) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_112 = i5;
-                  i5 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_114 = i4;
-                i4 = as_type<int>((as_type<uint>(x_114) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_116 = i3;
-              i3 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_118 = i2;
-            i2 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_120 = i1;
-          i1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-        }
-      }
-      {
-        float const x_123 = (*(tint_symbol_3)).x;
-        if ((x_123 < -1.0f)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      float const x_126 = (*(tint_symbol_3)).y;
-      if ((x_126 < -1.0f)) {
-      } else {
-        break;
-      }
-    }
-  }
-  float4 const x_128 = c;
-  *(tint_symbol_4) = x_128;
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3cf4812..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,304 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 162
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %a "a"
-               OpName %i1 "i1"
-               OpName %i2 "i2"
-               OpName %i3 "i3"
-               OpName %i4 "i4"
-               OpName %i5 "i5"
-               OpName %i6 "i6"
-               OpName %i7 "i7"
-               OpName %i8_1 "i8_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-     %int_17 = OpConstant %int 17
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n1 = OpConstant %float -1
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-        %149 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %c = OpVariable %_ptr_Function_v4float Function %7
-          %a = OpVariable %_ptr_Function_int Function %20
-         %i1 = OpVariable %_ptr_Function_int Function %20
-         %i2 = OpVariable %_ptr_Function_int Function %20
-         %i3 = OpVariable %_ptr_Function_int Function %20
-         %i4 = OpVariable %_ptr_Function_int Function %20
-         %i5 = OpVariable %_ptr_Function_int Function %20
-         %i6 = OpVariable %_ptr_Function_int Function %20
-         %i7 = OpVariable %_ptr_Function_int Function %20
-       %i8_1 = OpVariable %_ptr_Function_int Function %20
-               OpStore %c %31
-               OpStore %a %int_0
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %41 = OpLoad %int %a
-         %43 = OpAccessChain %_ptr_Function_float %c %41
-               OpStore %43 %float_1
-               OpStore %i1 %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i1
-         %50 = OpSLessThan %bool %48 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %45
-         %52 = OpLabel
-               OpStore %i2 %int_0
-               OpBranch %55
-         %55 = OpLabel
-               OpLoopMerge %56 %57 None
-               OpBranch %58
-         %58 = OpLabel
-         %59 = OpLoad %int %i2
-         %60 = OpSLessThan %bool %59 %int_1
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %56
-         %61 = OpLabel
-               OpStore %i3 %int_0
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %i3
-         %69 = OpSLessThan %bool %68 %int_1
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %65
-         %70 = OpLabel
-               OpStore %i4 %int_0
-               OpBranch %73
-         %73 = OpLabel
-               OpLoopMerge %74 %75 None
-               OpBranch %76
-         %76 = OpLabel
-         %77 = OpLoad %int %i4
-         %78 = OpSLessThan %bool %77 %int_1
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %74
-         %79 = OpLabel
-               OpStore %i5 %int_0
-               OpBranch %82
-         %82 = OpLabel
-               OpLoopMerge %83 %84 None
-               OpBranch %85
-         %85 = OpLabel
-         %86 = OpLoad %int %i5
-         %87 = OpSLessThan %bool %86 %int_1
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-               OpBranch %88
-         %90 = OpLabel
-               OpBranch %83
-         %88 = OpLabel
-               OpStore %i6 %int_0
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %i6
-         %96 = OpSLessThan %bool %95 %int_1
-               OpSelectionMerge %97 None
-               OpBranchConditional %96 %98 %99
-         %98 = OpLabel
-               OpBranch %97
-         %99 = OpLabel
-               OpBranch %92
-         %97 = OpLabel
-               OpStore %i7 %int_0
-               OpBranch %100
-        %100 = OpLabel
-               OpLoopMerge %101 %102 None
-               OpBranch %103
-        %103 = OpLabel
-        %104 = OpLoad %int %i7
-        %105 = OpSLessThan %bool %104 %int_1
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %108
-        %107 = OpLabel
-               OpBranch %106
-        %108 = OpLabel
-               OpBranch %101
-        %106 = OpLabel
-               OpStore %i8_1 %int_0
-               OpBranch %109
-        %109 = OpLabel
-               OpLoopMerge %110 %111 None
-               OpBranch %112
-        %112 = OpLabel
-        %113 = OpLoad %int %i8_1
-        %115 = OpSLessThan %bool %113 %int_17
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-               OpBranch %116
-        %118 = OpLabel
-               OpBranch %110
-        %116 = OpLabel
-        %119 = OpLoad %int %a
-        %120 = OpIAdd %int %119 %int_1
-               OpStore %a %120
-               OpBranch %111
-        %111 = OpLabel
-        %121 = OpLoad %int %i8_1
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %i8_1 %122
-               OpBranch %109
-        %110 = OpLabel
-               OpBranch %102
-        %102 = OpLabel
-        %123 = OpLoad %int %i7
-        %124 = OpIAdd %int %123 %int_1
-               OpStore %i7 %124
-               OpBranch %100
-        %101 = OpLabel
-               OpBranch %93
-         %93 = OpLabel
-        %125 = OpLoad %int %i6
-        %126 = OpIAdd %int %125 %int_1
-               OpStore %i6 %126
-               OpBranch %91
-         %92 = OpLabel
-               OpBranch %84
-         %84 = OpLabel
-        %127 = OpLoad %int %i5
-        %128 = OpIAdd %int %127 %int_1
-               OpStore %i5 %128
-               OpBranch %82
-         %83 = OpLabel
-               OpBranch %75
-         %75 = OpLabel
-        %129 = OpLoad %int %i4
-        %130 = OpIAdd %int %129 %int_1
-               OpStore %i4 %130
-               OpBranch %73
-         %74 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-        %131 = OpLoad %int %i3
-        %132 = OpIAdd %int %131 %int_1
-               OpStore %i3 %132
-               OpBranch %64
-         %65 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-        %133 = OpLoad %int %i2
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %i2 %134
-               OpBranch %55
-         %56 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-        %135 = OpLoad %int %i1
-        %136 = OpIAdd %int %135 %int_1
-               OpStore %i1 %136
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-        %140 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %141 = OpLoad %float %140
-        %143 = OpFOrdLessThan %bool %141 %float_n1
-               OpBranchConditional %143 %37 %38
-         %38 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-        %145 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %146 = OpLoad %float %145
-        %147 = OpFOrdLessThan %bool %146 %float_n1
-               OpBranchConditional %147 %33 %34
-         %34 = OpLabel
-        %148 = OpLoad %v4float %c
-               OpStore %x_GLF_color %148
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %149
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %153 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %154 = OpFunctionCall %void %main_1
-        %155 = OpLoad %v4float %x_GLF_color
-        %156 = OpCompositeConstruct %main_out %155
-               OpReturnValue %156
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-        %158 = OpLabel
-        %160 = OpLoad %v4float %gl_FragCoord_param_1
-        %159 = OpFunctionCall %main_out %main_inner %160
-        %161 = OpCompositeExtract %v4float %159 0
-               OpStore %x_GLF_color_1_1 %161
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 73515b9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-blockfrequency-several-for-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,161 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec4<f32>;
-  var a : i32;
-  var i1 : i32;
-  var i2 : i32;
-  var i3 : i32;
-  var i4 : i32;
-  var i5 : i32;
-  var i6 : i32;
-  var i7 : i32;
-  var i8_1 : i32;
-  c = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  a = 0;
-  loop {
-    loop {
-      let x_46 : i32 = a;
-      c[x_46] = 1.0;
-      i1 = 0;
-      loop {
-        let x_52 : i32 = i1;
-        if ((x_52 < 1)) {
-        } else {
-          break;
-        }
-        i2 = 0;
-        loop {
-          let x_59 : i32 = i2;
-          if ((x_59 < 1)) {
-          } else {
-            break;
-          }
-          i3 = 0;
-          loop {
-            let x_66 : i32 = i3;
-            if ((x_66 < 1)) {
-            } else {
-              break;
-            }
-            i4 = 0;
-            loop {
-              let x_73 : i32 = i4;
-              if ((x_73 < 1)) {
-              } else {
-                break;
-              }
-              i5 = 0;
-              loop {
-                let x_80 : i32 = i5;
-                if ((x_80 < 1)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                loop {
-                  let x_87 : i32 = i6;
-                  if ((x_87 < 1)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  loop {
-                    let x_94 : i32 = i7;
-                    if ((x_94 < 1)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    loop {
-                      let x_101 : i32 = i8_1;
-                      if ((x_101 < 17)) {
-                      } else {
-                        break;
-                      }
-                      let x_104 : i32 = a;
-                      a = (x_104 + 1);
-
-                      continuing {
-                        let x_106 : i32 = i8_1;
-                        i8_1 = (x_106 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_108 : i32 = i7;
-                      i7 = (x_108 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_110 : i32 = i6;
-                    i6 = (x_110 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_112 : i32 = i5;
-                  i5 = (x_112 + 1);
-                }
-              }
-
-              continuing {
-                let x_114 : i32 = i4;
-                i4 = (x_114 + 1);
-              }
-            }
-
-            continuing {
-              let x_116 : i32 = i3;
-              i3 = (x_116 + 1);
-            }
-          }
-
-          continuing {
-            let x_118 : i32 = i2;
-            i2 = (x_118 + 1);
-          }
-        }
-
-        continuing {
-          let x_120 : i32 = i1;
-          i1 = (x_120 + 1);
-        }
-      }
-
-      continuing {
-        let x_123 : f32 = gl_FragCoord.x;
-        if ((x_123 < -1.0)) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      let x_126 : f32 = gl_FragCoord.y;
-      if ((x_126 < -1.0)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_128 : vec4<f32> = c;
-  x_GLF_color = x_128;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index dc1d29c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,134 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float sums[2] = (float[2])0;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int d = 0;
-  float2x2 indexable = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 indexable_1 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_158 = false;
-  bool x_159_phi = false;
-  const int x_16 = asint(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_85 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  sums[x_16] = -(x_85);
-  const int x_18 = asint(x_6[2].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_90 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  sums[x_18] = -(x_90);
-  const int x_19 = asint(x_6[1].x);
-  a = x_19;
-  while (true) {
-    const int x_20 = a;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_21 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_20 < x_21)) {
-    } else {
-      break;
-    }
-    const int x_22 = asint(x_6[1].x);
-    b = x_22;
-    while (true) {
-      const int x_23 = b;
-      const int x_24 = asint(x_6[3].x);
-      if ((x_23 < x_24)) {
-      } else {
-        break;
-      }
-      const int x_25 = asint(x_6[1].x);
-      c = x_25;
-      {
-        for(; (c <= a); c = (c + 1)) {
-          const int x_28 = asint(x_6[1].x);
-          d = x_28;
-          while (true) {
-            const int x_29 = d;
-            const int x_30 = asint(x_6[3].x);
-            if ((x_29 < x_30)) {
-            } else {
-              break;
-            }
-            const int x_31 = a;
-            const int x_32 = asint(x_6[2].x);
-            const float x_125 = float(x_32);
-            const int x_33 = c;
-            const int x_34 = asint(x_6[2].x);
-            indexable = float2x2(float2(x_125, 0.0f), float2(0.0f, x_125));
-            const float x_131 = indexable[x_33][x_34];
-            sums[x_31] = x_131;
-            const int x_35 = a;
-            const int x_36 = asint(x_6[2].x);
-            const float x_134 = float(x_36);
-            const int x_37 = c;
-            const int x_38 = asint(x_6[2].x);
-            indexable_1 = float2x2(float2(x_134, 0.0f), float2(0.0f, x_134));
-            const float x_140 = indexable_1[x_37][x_38];
-            const float x_142 = sums[x_35];
-            sums[x_35] = (x_142 + x_140);
-            {
-              d = (d + 1);
-            }
-          }
-        }
-      }
-      {
-        b = (b + 1);
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const int x_47 = asint(x_6[1].x);
-  const float x_147 = sums[x_47];
-  const float x_149 = asfloat(x_8[1].x);
-  const bool x_150 = (x_147 == x_149);
-  x_159_phi = x_150;
-  if (x_150) {
-    const int x_48 = asint(x_6[2].x);
-    const float x_155 = sums[x_48];
-    const float x_157 = asfloat(x_8[2].x);
-    x_158 = (x_155 == x_157);
-    x_159_phi = x_158;
-  }
-  if (x_159_phi) {
-    const int x_49 = asint(x_6[2].x);
-    const int x_50 = asint(x_6[1].x);
-    const int x_51 = asint(x_6[1].x);
-    const int x_52 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_49), float(x_50), float(x_51), float(x_52));
-  } else {
-    const int x_53 = asint(x_6[1].x);
-    const float x_173 = float(x_53);
-    x_GLF_color = float4(x_173, x_173, x_173, x_173);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.msl
deleted file mode 100644
index 29044a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,163 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 sums = {};
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int d = 0;
-  float2x2 indexable = float2x2(0.0f);
-  float2x2 indexable_1 = float2x2(0.0f);
-  bool x_158 = false;
-  bool x_159_phi = false;
-  int const x_16 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_85 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  sums.arr[x_16] = -(x_85);
-  int const x_18 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_90 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  sums.arr[x_18] = -(x_90);
-  int const x_19 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_19;
-  while (true) {
-    int const x_20 = a;
-    int const x_21 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_20 < x_21)) {
-    } else {
-      break;
-    }
-    int const x_22 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    b = x_22;
-    while (true) {
-      int const x_23 = b;
-      int const x_24 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      if ((x_23 < x_24)) {
-      } else {
-        break;
-      }
-      int const x_25 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      c = x_25;
-      while (true) {
-        int const x_26 = c;
-        int const x_27 = a;
-        if ((x_26 <= x_27)) {
-        } else {
-          break;
-        }
-        int const x_28 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        d = x_28;
-        while (true) {
-          int const x_29 = d;
-          int const x_30 = x_6.x_GLF_uniform_int_values.arr[3].el;
-          if ((x_29 < x_30)) {
-          } else {
-            break;
-          }
-          int const x_31 = a;
-          int const x_32 = x_6.x_GLF_uniform_int_values.arr[2].el;
-          float const x_125 = float(x_32);
-          int const x_33 = c;
-          int const x_34 = x_6.x_GLF_uniform_int_values.arr[2].el;
-          indexable = float2x2(float2(x_125, 0.0f), float2(0.0f, x_125));
-          float const x_131 = indexable[x_33][x_34];
-          sums.arr[x_31] = x_131;
-          int const x_35 = a;
-          int const x_36 = x_6.x_GLF_uniform_int_values.arr[2].el;
-          float const x_134 = float(x_36);
-          int const x_37 = c;
-          int const x_38 = x_6.x_GLF_uniform_int_values.arr[2].el;
-          indexable_1 = float2x2(float2(x_134, 0.0f), float2(0.0f, x_134));
-          float const x_140 = indexable_1[x_37][x_38];
-          float const x_142 = sums.arr[x_35];
-          sums.arr[x_35] = (x_142 + x_140);
-          {
-            int const x_39 = d;
-            d = as_type<int>((as_type<uint>(x_39) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_41 = c;
-          c = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_43 = b;
-        b = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_45 = a;
-      a = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    }
-  }
-  int const x_47 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_147 = sums.arr[x_47];
-  float const x_149 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  bool const x_150 = (x_147 == x_149);
-  x_159_phi = x_150;
-  if (x_150) {
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_155 = sums.arr[x_48];
-    float const x_157 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    x_158 = (x_155 == x_157);
-    x_159_phi = x_158;
-  }
-  bool const x_159 = x_159_phi;
-  if (x_159) {
-    int const x_49 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_52 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_49), float(x_50), float(x_51), float(x_52));
-  } else {
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_173 = float(x_53);
-    *(tint_symbol_3) = float4(x_173, x_173, x_173, x_173);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e8871b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,318 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 204
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %sums "sums"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %x_158 "x_158"
-               OpName %x_159_phi "x_159_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
-         %28 = OpConstantNull %_arr_float_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %39 = OpConstantNull %mat2v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %44 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-        %193 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-       %sums = OpVariable %_ptr_Function__arr_float_uint_2 Function %28
-          %a = OpVariable %_ptr_Function_int Function %31
-          %b = OpVariable %_ptr_Function_int Function %31
-          %c = OpVariable %_ptr_Function_int Function %31
-          %d = OpVariable %_ptr_Function_int Function %31
-  %indexable = OpVariable %_ptr_Function_mat2v2float Function %39
-%indexable_1 = OpVariable %_ptr_Function_mat2v2float Function %39
-      %x_158 = OpVariable %_ptr_Function_bool Function %44
-  %x_159_phi = OpVariable %_ptr_Function_bool Function %44
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %56 = OpAccessChain %_ptr_Function_float %sums %50
-         %57 = OpFNegate %float %54
-               OpStore %56 %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %62 = OpLoad %float %61
-         %63 = OpAccessChain %_ptr_Function_float %sums %60
-         %64 = OpFNegate %float %62
-               OpStore %63 %64
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-               OpStore %a %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %a
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %68
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %79 = OpLoad %int %78
-               OpStore %b %79
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %b
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %87 = OpLoad %int %86
-         %88 = OpSLessThan %bool %84 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-               OpBranch %89
-         %91 = OpLabel
-               OpBranch %81
-         %89 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %93 = OpLoad %int %92
-               OpStore %c %93
-               OpBranch %94
-         %94 = OpLabel
-               OpLoopMerge %95 %96 None
-               OpBranch %97
-         %97 = OpLabel
-         %98 = OpLoad %int %c
-         %99 = OpLoad %int %a
-        %100 = OpSLessThanEqual %bool %98 %99
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-               OpBranch %101
-        %103 = OpLabel
-               OpBranch %95
-        %101 = OpLabel
-        %104 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %105 = OpLoad %int %104
-               OpStore %d %105
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %d
-        %111 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %112 = OpLoad %int %111
-        %113 = OpSLessThan %bool %110 %112
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %116
-        %115 = OpLabel
-               OpBranch %114
-        %116 = OpLabel
-               OpBranch %107
-        %114 = OpLabel
-        %117 = OpLoad %int %a
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %119
-        %121 = OpLoad %int %c
-        %122 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %123 = OpLoad %int %122
-        %125 = OpCompositeConstruct %v2float %120 %float_0
-        %126 = OpCompositeConstruct %v2float %float_0 %120
-        %127 = OpCompositeConstruct %mat2v2float %125 %126
-               OpStore %indexable %127
-        %128 = OpAccessChain %_ptr_Function_float %indexable %121 %123
-        %129 = OpLoad %float %128
-        %130 = OpAccessChain %_ptr_Function_float %sums %117
-               OpStore %130 %129
-        %131 = OpLoad %int %a
-        %132 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %133 = OpLoad %int %132
-        %134 = OpConvertSToF %float %133
-        %135 = OpLoad %int %c
-        %136 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %137 = OpLoad %int %136
-        %138 = OpCompositeConstruct %v2float %134 %float_0
-        %139 = OpCompositeConstruct %v2float %float_0 %134
-        %140 = OpCompositeConstruct %mat2v2float %138 %139
-               OpStore %indexable_1 %140
-        %141 = OpAccessChain %_ptr_Function_float %indexable_1 %135 %137
-        %142 = OpLoad %float %141
-        %143 = OpAccessChain %_ptr_Function_float %sums %131
-        %144 = OpLoad %float %143
-        %145 = OpAccessChain %_ptr_Function_float %sums %131
-        %146 = OpFAdd %float %144 %142
-               OpStore %145 %146
-               OpBranch %108
-        %108 = OpLabel
-        %147 = OpLoad %int %d
-        %148 = OpIAdd %int %147 %int_1
-               OpStore %d %148
-               OpBranch %106
-        %107 = OpLabel
-               OpBranch %96
-         %96 = OpLabel
-        %149 = OpLoad %int %c
-        %150 = OpIAdd %int %149 %int_1
-               OpStore %c %150
-               OpBranch %94
-         %95 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-        %151 = OpLoad %int %b
-        %152 = OpIAdd %int %151 %int_1
-               OpStore %b %152
-               OpBranch %80
-         %81 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-        %153 = OpLoad %int %a
-        %154 = OpIAdd %int %153 %int_1
-               OpStore %a %154
-               OpBranch %67
-         %68 = OpLabel
-        %155 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %156 = OpLoad %int %155
-        %157 = OpAccessChain %_ptr_Function_float %sums %156
-        %158 = OpLoad %float %157
-        %159 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %160 = OpLoad %float %159
-        %161 = OpFOrdEqual %bool %158 %160
-               OpStore %x_159_phi %161
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %162
-        %163 = OpLabel
-        %164 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %165 = OpLoad %int %164
-        %166 = OpAccessChain %_ptr_Function_float %sums %165
-        %167 = OpLoad %float %166
-        %168 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %169 = OpLoad %float %168
-        %170 = OpFOrdEqual %bool %167 %169
-               OpStore %x_158 %170
-        %171 = OpLoad %bool %x_158
-               OpStore %x_159_phi %171
-               OpBranch %162
-        %162 = OpLabel
-        %172 = OpLoad %bool %x_159_phi
-               OpSelectionMerge %173 None
-               OpBranchConditional %172 %174 %175
-        %174 = OpLabel
-        %176 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %177 = OpLoad %int %176
-        %178 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %179 = OpLoad %int %178
-        %180 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %181 = OpLoad %int %180
-        %182 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %183 = OpLoad %int %182
-        %184 = OpConvertSToF %float %177
-        %185 = OpConvertSToF %float %179
-        %186 = OpConvertSToF %float %181
-        %187 = OpConvertSToF %float %183
-        %188 = OpCompositeConstruct %v4float %184 %185 %186 %187
-               OpStore %x_GLF_color %188
-               OpBranch %173
-        %175 = OpLabel
-        %189 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %190 = OpLoad %int %189
-        %191 = OpConvertSToF %float %190
-        %192 = OpCompositeConstruct %v4float %191 %191 %191 %191
-               OpStore %x_GLF_color %192
-               OpBranch %173
-        %173 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %193
-        %196 = OpLabel
-        %197 = OpFunctionCall %void %main_1
-        %198 = OpLoad %v4float %x_GLF_color
-        %199 = OpCompositeConstruct %main_out %198
-               OpReturnValue %199
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %201 = OpLabel
-        %202 = OpFunctionCall %main_out %main_inner
-        %203 = OpCompositeExtract %v4float %202 0
-               OpStore %x_GLF_color_1_1 %203
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 83081ec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,150 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var sums : array<f32, 2>;
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var d : i32;
-  var indexable : mat2x2<f32>;
-  var indexable_1 : mat2x2<f32>;
-  var x_158 : bool;
-  var x_159_phi : bool;
-  let x_16 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_85 : f32 = x_8.x_GLF_uniform_float_values[0];
-  sums[x_16] = -(x_85);
-  let x_18 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_90 : f32 = x_8.x_GLF_uniform_float_values[0];
-  sums[x_18] = -(x_90);
-  let x_19 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_19;
-  loop {
-    let x_20 : i32 = a;
-    let x_21 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_20 < x_21)) {
-    } else {
-      break;
-    }
-    let x_22 : i32 = x_6.x_GLF_uniform_int_values[1];
-    b = x_22;
-    loop {
-      let x_23 : i32 = b;
-      let x_24 : i32 = x_6.x_GLF_uniform_int_values[3];
-      if ((x_23 < x_24)) {
-      } else {
-        break;
-      }
-      let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
-      c = x_25;
-      loop {
-        let x_26 : i32 = c;
-        let x_27 : i32 = a;
-        if ((x_26 <= x_27)) {
-        } else {
-          break;
-        }
-        let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
-        d = x_28;
-        loop {
-          let x_29 : i32 = d;
-          let x_30 : i32 = x_6.x_GLF_uniform_int_values[3];
-          if ((x_29 < x_30)) {
-          } else {
-            break;
-          }
-          let x_31 : i32 = a;
-          let x_32 : i32 = x_6.x_GLF_uniform_int_values[2];
-          let x_125 : f32 = f32(x_32);
-          let x_33 : i32 = c;
-          let x_34 : i32 = x_6.x_GLF_uniform_int_values[2];
-          indexable = mat2x2<f32>(vec2<f32>(x_125, 0.0), vec2<f32>(0.0, x_125));
-          let x_131 : f32 = indexable[x_33][x_34];
-          sums[x_31] = x_131;
-          let x_35 : i32 = a;
-          let x_36 : i32 = x_6.x_GLF_uniform_int_values[2];
-          let x_134 : f32 = f32(x_36);
-          let x_37 : i32 = c;
-          let x_38 : i32 = x_6.x_GLF_uniform_int_values[2];
-          indexable_1 = mat2x2<f32>(vec2<f32>(x_134, 0.0), vec2<f32>(0.0, x_134));
-          let x_140 : f32 = indexable_1[x_37][x_38];
-          let x_142 : f32 = sums[x_35];
-          sums[x_35] = (x_142 + x_140);
-
-          continuing {
-            let x_39 : i32 = d;
-            d = (x_39 + 1);
-          }
-        }
-
-        continuing {
-          let x_41 : i32 = c;
-          c = (x_41 + 1);
-        }
-      }
-
-      continuing {
-        let x_43 : i32 = b;
-        b = (x_43 + 1);
-      }
-    }
-
-    continuing {
-      let x_45 : i32 = a;
-      a = (x_45 + 1);
-    }
-  }
-  let x_47 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_147 : f32 = sums[x_47];
-  let x_149 : f32 = x_8.x_GLF_uniform_float_values[1];
-  let x_150 : bool = (x_147 == x_149);
-  x_159_phi = x_150;
-  if (x_150) {
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_155 : f32 = sums[x_48];
-    let x_157 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_158 = (x_155 == x_157);
-    x_159_phi = x_158;
-  }
-  let x_159 : bool = x_159_phi;
-  if (x_159) {
-    let x_49 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_49), f32(x_50), f32(x_51), f32(x_52));
-  } else {
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_173 : f32 = f32(x_53);
-    x_GLF_color = vec4<f32>(x_173, x_173, x_173, x_173);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index dc1d29c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,134 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float sums[2] = (float[2])0;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int d = 0;
-  float2x2 indexable = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 indexable_1 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_158 = false;
-  bool x_159_phi = false;
-  const int x_16 = asint(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_85 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  sums[x_16] = -(x_85);
-  const int x_18 = asint(x_6[2].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_90 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  sums[x_18] = -(x_90);
-  const int x_19 = asint(x_6[1].x);
-  a = x_19;
-  while (true) {
-    const int x_20 = a;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_21 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_20 < x_21)) {
-    } else {
-      break;
-    }
-    const int x_22 = asint(x_6[1].x);
-    b = x_22;
-    while (true) {
-      const int x_23 = b;
-      const int x_24 = asint(x_6[3].x);
-      if ((x_23 < x_24)) {
-      } else {
-        break;
-      }
-      const int x_25 = asint(x_6[1].x);
-      c = x_25;
-      {
-        for(; (c <= a); c = (c + 1)) {
-          const int x_28 = asint(x_6[1].x);
-          d = x_28;
-          while (true) {
-            const int x_29 = d;
-            const int x_30 = asint(x_6[3].x);
-            if ((x_29 < x_30)) {
-            } else {
-              break;
-            }
-            const int x_31 = a;
-            const int x_32 = asint(x_6[2].x);
-            const float x_125 = float(x_32);
-            const int x_33 = c;
-            const int x_34 = asint(x_6[2].x);
-            indexable = float2x2(float2(x_125, 0.0f), float2(0.0f, x_125));
-            const float x_131 = indexable[x_33][x_34];
-            sums[x_31] = x_131;
-            const int x_35 = a;
-            const int x_36 = asint(x_6[2].x);
-            const float x_134 = float(x_36);
-            const int x_37 = c;
-            const int x_38 = asint(x_6[2].x);
-            indexable_1 = float2x2(float2(x_134, 0.0f), float2(0.0f, x_134));
-            const float x_140 = indexable_1[x_37][x_38];
-            const float x_142 = sums[x_35];
-            sums[x_35] = (x_142 + x_140);
-            {
-              d = (d + 1);
-            }
-          }
-        }
-      }
-      {
-        b = (b + 1);
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const int x_47 = asint(x_6[1].x);
-  const float x_147 = sums[x_47];
-  const float x_149 = asfloat(x_8[1].x);
-  const bool x_150 = (x_147 == x_149);
-  x_159_phi = x_150;
-  if (x_150) {
-    const int x_48 = asint(x_6[2].x);
-    const float x_155 = sums[x_48];
-    const float x_157 = asfloat(x_8[2].x);
-    x_158 = (x_155 == x_157);
-    x_159_phi = x_158;
-  }
-  if (x_159_phi) {
-    const int x_49 = asint(x_6[2].x);
-    const int x_50 = asint(x_6[1].x);
-    const int x_51 = asint(x_6[1].x);
-    const int x_52 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_49), float(x_50), float(x_51), float(x_52));
-  } else {
-    const int x_53 = asint(x_6[1].x);
-    const float x_173 = float(x_53);
-    x_GLF_color = float4(x_173, x_173, x_173, x_173);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.msl
deleted file mode 100644
index 29044a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,163 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 sums = {};
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int d = 0;
-  float2x2 indexable = float2x2(0.0f);
-  float2x2 indexable_1 = float2x2(0.0f);
-  bool x_158 = false;
-  bool x_159_phi = false;
-  int const x_16 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_85 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  sums.arr[x_16] = -(x_85);
-  int const x_18 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_90 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  sums.arr[x_18] = -(x_90);
-  int const x_19 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_19;
-  while (true) {
-    int const x_20 = a;
-    int const x_21 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_20 < x_21)) {
-    } else {
-      break;
-    }
-    int const x_22 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    b = x_22;
-    while (true) {
-      int const x_23 = b;
-      int const x_24 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      if ((x_23 < x_24)) {
-      } else {
-        break;
-      }
-      int const x_25 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      c = x_25;
-      while (true) {
-        int const x_26 = c;
-        int const x_27 = a;
-        if ((x_26 <= x_27)) {
-        } else {
-          break;
-        }
-        int const x_28 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        d = x_28;
-        while (true) {
-          int const x_29 = d;
-          int const x_30 = x_6.x_GLF_uniform_int_values.arr[3].el;
-          if ((x_29 < x_30)) {
-          } else {
-            break;
-          }
-          int const x_31 = a;
-          int const x_32 = x_6.x_GLF_uniform_int_values.arr[2].el;
-          float const x_125 = float(x_32);
-          int const x_33 = c;
-          int const x_34 = x_6.x_GLF_uniform_int_values.arr[2].el;
-          indexable = float2x2(float2(x_125, 0.0f), float2(0.0f, x_125));
-          float const x_131 = indexable[x_33][x_34];
-          sums.arr[x_31] = x_131;
-          int const x_35 = a;
-          int const x_36 = x_6.x_GLF_uniform_int_values.arr[2].el;
-          float const x_134 = float(x_36);
-          int const x_37 = c;
-          int const x_38 = x_6.x_GLF_uniform_int_values.arr[2].el;
-          indexable_1 = float2x2(float2(x_134, 0.0f), float2(0.0f, x_134));
-          float const x_140 = indexable_1[x_37][x_38];
-          float const x_142 = sums.arr[x_35];
-          sums.arr[x_35] = (x_142 + x_140);
-          {
-            int const x_39 = d;
-            d = as_type<int>((as_type<uint>(x_39) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_41 = c;
-          c = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_43 = b;
-        b = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_45 = a;
-      a = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    }
-  }
-  int const x_47 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_147 = sums.arr[x_47];
-  float const x_149 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  bool const x_150 = (x_147 == x_149);
-  x_159_phi = x_150;
-  if (x_150) {
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_155 = sums.arr[x_48];
-    float const x_157 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    x_158 = (x_155 == x_157);
-    x_159_phi = x_158;
-  }
-  bool const x_159 = x_159_phi;
-  if (x_159) {
-    int const x_49 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_52 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_49), float(x_50), float(x_51), float(x_52));
-  } else {
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_173 = float(x_53);
-    *(tint_symbol_3) = float4(x_173, x_173, x_173, x_173);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e8871b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,318 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 204
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %sums "sums"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %x_158 "x_158"
-               OpName %x_159_phi "x_159_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
-         %28 = OpConstantNull %_arr_float_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %39 = OpConstantNull %mat2v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %44 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-        %193 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-       %sums = OpVariable %_ptr_Function__arr_float_uint_2 Function %28
-          %a = OpVariable %_ptr_Function_int Function %31
-          %b = OpVariable %_ptr_Function_int Function %31
-          %c = OpVariable %_ptr_Function_int Function %31
-          %d = OpVariable %_ptr_Function_int Function %31
-  %indexable = OpVariable %_ptr_Function_mat2v2float Function %39
-%indexable_1 = OpVariable %_ptr_Function_mat2v2float Function %39
-      %x_158 = OpVariable %_ptr_Function_bool Function %44
-  %x_159_phi = OpVariable %_ptr_Function_bool Function %44
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %56 = OpAccessChain %_ptr_Function_float %sums %50
-         %57 = OpFNegate %float %54
-               OpStore %56 %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %62 = OpLoad %float %61
-         %63 = OpAccessChain %_ptr_Function_float %sums %60
-         %64 = OpFNegate %float %62
-               OpStore %63 %64
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-               OpStore %a %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %a
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %68
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %79 = OpLoad %int %78
-               OpStore %b %79
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %b
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %87 = OpLoad %int %86
-         %88 = OpSLessThan %bool %84 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-               OpBranch %89
-         %91 = OpLabel
-               OpBranch %81
-         %89 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %93 = OpLoad %int %92
-               OpStore %c %93
-               OpBranch %94
-         %94 = OpLabel
-               OpLoopMerge %95 %96 None
-               OpBranch %97
-         %97 = OpLabel
-         %98 = OpLoad %int %c
-         %99 = OpLoad %int %a
-        %100 = OpSLessThanEqual %bool %98 %99
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-               OpBranch %101
-        %103 = OpLabel
-               OpBranch %95
-        %101 = OpLabel
-        %104 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %105 = OpLoad %int %104
-               OpStore %d %105
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %d
-        %111 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %112 = OpLoad %int %111
-        %113 = OpSLessThan %bool %110 %112
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %116
-        %115 = OpLabel
-               OpBranch %114
-        %116 = OpLabel
-               OpBranch %107
-        %114 = OpLabel
-        %117 = OpLoad %int %a
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %119
-        %121 = OpLoad %int %c
-        %122 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %123 = OpLoad %int %122
-        %125 = OpCompositeConstruct %v2float %120 %float_0
-        %126 = OpCompositeConstruct %v2float %float_0 %120
-        %127 = OpCompositeConstruct %mat2v2float %125 %126
-               OpStore %indexable %127
-        %128 = OpAccessChain %_ptr_Function_float %indexable %121 %123
-        %129 = OpLoad %float %128
-        %130 = OpAccessChain %_ptr_Function_float %sums %117
-               OpStore %130 %129
-        %131 = OpLoad %int %a
-        %132 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %133 = OpLoad %int %132
-        %134 = OpConvertSToF %float %133
-        %135 = OpLoad %int %c
-        %136 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %137 = OpLoad %int %136
-        %138 = OpCompositeConstruct %v2float %134 %float_0
-        %139 = OpCompositeConstruct %v2float %float_0 %134
-        %140 = OpCompositeConstruct %mat2v2float %138 %139
-               OpStore %indexable_1 %140
-        %141 = OpAccessChain %_ptr_Function_float %indexable_1 %135 %137
-        %142 = OpLoad %float %141
-        %143 = OpAccessChain %_ptr_Function_float %sums %131
-        %144 = OpLoad %float %143
-        %145 = OpAccessChain %_ptr_Function_float %sums %131
-        %146 = OpFAdd %float %144 %142
-               OpStore %145 %146
-               OpBranch %108
-        %108 = OpLabel
-        %147 = OpLoad %int %d
-        %148 = OpIAdd %int %147 %int_1
-               OpStore %d %148
-               OpBranch %106
-        %107 = OpLabel
-               OpBranch %96
-         %96 = OpLabel
-        %149 = OpLoad %int %c
-        %150 = OpIAdd %int %149 %int_1
-               OpStore %c %150
-               OpBranch %94
-         %95 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-        %151 = OpLoad %int %b
-        %152 = OpIAdd %int %151 %int_1
-               OpStore %b %152
-               OpBranch %80
-         %81 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-        %153 = OpLoad %int %a
-        %154 = OpIAdd %int %153 %int_1
-               OpStore %a %154
-               OpBranch %67
-         %68 = OpLabel
-        %155 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %156 = OpLoad %int %155
-        %157 = OpAccessChain %_ptr_Function_float %sums %156
-        %158 = OpLoad %float %157
-        %159 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %160 = OpLoad %float %159
-        %161 = OpFOrdEqual %bool %158 %160
-               OpStore %x_159_phi %161
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %162
-        %163 = OpLabel
-        %164 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %165 = OpLoad %int %164
-        %166 = OpAccessChain %_ptr_Function_float %sums %165
-        %167 = OpLoad %float %166
-        %168 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %169 = OpLoad %float %168
-        %170 = OpFOrdEqual %bool %167 %169
-               OpStore %x_158 %170
-        %171 = OpLoad %bool %x_158
-               OpStore %x_159_phi %171
-               OpBranch %162
-        %162 = OpLabel
-        %172 = OpLoad %bool %x_159_phi
-               OpSelectionMerge %173 None
-               OpBranchConditional %172 %174 %175
-        %174 = OpLabel
-        %176 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %177 = OpLoad %int %176
-        %178 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %179 = OpLoad %int %178
-        %180 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %181 = OpLoad %int %180
-        %182 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %183 = OpLoad %int %182
-        %184 = OpConvertSToF %float %177
-        %185 = OpConvertSToF %float %179
-        %186 = OpConvertSToF %float %181
-        %187 = OpConvertSToF %float %183
-        %188 = OpCompositeConstruct %v4float %184 %185 %186 %187
-               OpStore %x_GLF_color %188
-               OpBranch %173
-        %175 = OpLabel
-        %189 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %190 = OpLoad %int %189
-        %191 = OpConvertSToF %float %190
-        %192 = OpCompositeConstruct %v4float %191 %191 %191 %191
-               OpStore %x_GLF_color %192
-               OpBranch %173
-        %173 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %193
-        %196 = OpLabel
-        %197 = OpFunctionCall %void %main_1
-        %198 = OpLoad %v4float %x_GLF_color
-        %199 = OpCompositeConstruct %main_out %198
-               OpReturnValue %199
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %201 = OpLabel
-        %202 = OpFunctionCall %main_out %main_inner
-        %203 = OpCompositeExtract %v4float %202 0
-               OpStore %x_GLF_color_1_1 %203
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 83081ec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-branch-probability-identity-matrix/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,150 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var sums : array<f32, 2>;
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var d : i32;
-  var indexable : mat2x2<f32>;
-  var indexable_1 : mat2x2<f32>;
-  var x_158 : bool;
-  var x_159_phi : bool;
-  let x_16 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_85 : f32 = x_8.x_GLF_uniform_float_values[0];
-  sums[x_16] = -(x_85);
-  let x_18 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_90 : f32 = x_8.x_GLF_uniform_float_values[0];
-  sums[x_18] = -(x_90);
-  let x_19 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_19;
-  loop {
-    let x_20 : i32 = a;
-    let x_21 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_20 < x_21)) {
-    } else {
-      break;
-    }
-    let x_22 : i32 = x_6.x_GLF_uniform_int_values[1];
-    b = x_22;
-    loop {
-      let x_23 : i32 = b;
-      let x_24 : i32 = x_6.x_GLF_uniform_int_values[3];
-      if ((x_23 < x_24)) {
-      } else {
-        break;
-      }
-      let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
-      c = x_25;
-      loop {
-        let x_26 : i32 = c;
-        let x_27 : i32 = a;
-        if ((x_26 <= x_27)) {
-        } else {
-          break;
-        }
-        let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
-        d = x_28;
-        loop {
-          let x_29 : i32 = d;
-          let x_30 : i32 = x_6.x_GLF_uniform_int_values[3];
-          if ((x_29 < x_30)) {
-          } else {
-            break;
-          }
-          let x_31 : i32 = a;
-          let x_32 : i32 = x_6.x_GLF_uniform_int_values[2];
-          let x_125 : f32 = f32(x_32);
-          let x_33 : i32 = c;
-          let x_34 : i32 = x_6.x_GLF_uniform_int_values[2];
-          indexable = mat2x2<f32>(vec2<f32>(x_125, 0.0), vec2<f32>(0.0, x_125));
-          let x_131 : f32 = indexable[x_33][x_34];
-          sums[x_31] = x_131;
-          let x_35 : i32 = a;
-          let x_36 : i32 = x_6.x_GLF_uniform_int_values[2];
-          let x_134 : f32 = f32(x_36);
-          let x_37 : i32 = c;
-          let x_38 : i32 = x_6.x_GLF_uniform_int_values[2];
-          indexable_1 = mat2x2<f32>(vec2<f32>(x_134, 0.0), vec2<f32>(0.0, x_134));
-          let x_140 : f32 = indexable_1[x_37][x_38];
-          let x_142 : f32 = sums[x_35];
-          sums[x_35] = (x_142 + x_140);
-
-          continuing {
-            let x_39 : i32 = d;
-            d = (x_39 + 1);
-          }
-        }
-
-        continuing {
-          let x_41 : i32 = c;
-          c = (x_41 + 1);
-        }
-      }
-
-      continuing {
-        let x_43 : i32 = b;
-        b = (x_43 + 1);
-      }
-    }
-
-    continuing {
-      let x_45 : i32 = a;
-      a = (x_45 + 1);
-    }
-  }
-  let x_47 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_147 : f32 = sums[x_47];
-  let x_149 : f32 = x_8.x_GLF_uniform_float_values[1];
-  let x_150 : bool = (x_147 == x_149);
-  x_159_phi = x_150;
-  if (x_150) {
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_155 : f32 = sums[x_48];
-    let x_157 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_158 = (x_155 == x_157);
-    x_159_phi = x_158;
-  }
-  let x_159 : bool = x_159_phi;
-  if (x_159) {
-    let x_49 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_49), f32(x_50), f32(x_51), f32(x_52));
-  } else {
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_173 : f32 = f32(x_53);
-    x_GLF_color = vec4<f32>(x_173, x_173, x_173, x_173);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d2b9503..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  f = 142.699996948f;
-  if ((float(int(f)) > 100.0f)) {
-    const int x_33 = asint(x_6[1].x);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_36 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_39 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_42 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_33), float(x_36), float(x_39), float(x_42));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_47 = float(x_46);
-    x_GLF_color = float4(x_47, x_47, x_47, x_47);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.msl
deleted file mode 100644
index c2932f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  f = 142.699996948f;
-  float const x_25 = f;
-  if ((float(int(x_25)) > 100.0f)) {
-    int const x_33 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_39 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_33), float(x_36), float(x_39), float(x_42));
-  } else {
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_47 = float(x_46);
-    *(tint_symbol_3) = float4(x_47, x_47, x_47, x_47);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index cbd0178..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-%float_142_699997 = OpConstant %float 142.699997
-  %float_100 = OpConstant %float 100
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %21
-               OpStore %f %float_142_699997
-         %23 = OpLoad %float %f
-         %25 = OpConvertFToS %int %23
-         %24 = OpConvertSToF %float %25
-         %27 = OpFOrdGreaterThan %bool %24 %float_100
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %36 = OpLoad %int %35
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpConvertSToF %float %36
-         %45 = OpConvertSToF %float %39
-         %46 = OpConvertSToF %float %41
-         %47 = OpConvertSToF %float %43
-         %48 = OpCompositeConstruct %v4float %44 %45 %46 %47
-               OpStore %x_GLF_color %48
-               OpBranch %29
-         %31 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpConvertSToF %float %50
-         %52 = OpCompositeConstruct %v4float %51 %51 %51 %51
-               OpStore %x_GLF_color %52
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f7217b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var f : f32;
-  f = 142.699996948;
-  let x_25 : f32 = f;
-  if ((f32(i32(x_25)) > 100.0)) {
-    let x_33 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_39 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_33), f32(x_36), f32(x_39), f32(x_42));
-  } else {
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_47 : f32 = f32(x_46);
-    x_GLF_color = vec4<f32>(x_47, x_47, x_47, x_47);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d2b9503..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  f = 142.699996948f;
-  if ((float(int(f)) > 100.0f)) {
-    const int x_33 = asint(x_6[1].x);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_36 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_39 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_42 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_33), float(x_36), float(x_39), float(x_42));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_47 = float(x_46);
-    x_GLF_color = float4(x_47, x_47, x_47, x_47);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.msl
deleted file mode 100644
index c2932f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  f = 142.699996948f;
-  float const x_25 = f;
-  if ((float(int(x_25)) > 100.0f)) {
-    int const x_33 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_39 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_33), float(x_36), float(x_39), float(x_42));
-  } else {
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_47 = float(x_46);
-    *(tint_symbol_3) = float4(x_47, x_47, x_47, x_47);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index cbd0178..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-%float_142_699997 = OpConstant %float 142.699997
-  %float_100 = OpConstant %float 100
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %21
-               OpStore %f %float_142_699997
-         %23 = OpLoad %float %f
-         %25 = OpConvertFToS %int %23
-         %24 = OpConvertSToF %float %25
-         %27 = OpFOrdGreaterThan %bool %24 %float_100
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %36 = OpLoad %int %35
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpConvertSToF %float %36
-         %45 = OpConvertSToF %float %39
-         %46 = OpConvertSToF %float %41
-         %47 = OpConvertSToF %float %43
-         %48 = OpCompositeConstruct %v4float %44 %45 %46 %47
-               OpStore %x_GLF_color %48
-               OpBranch %29
-         %31 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpConvertSToF %float %50
-         %52 = OpCompositeConstruct %v4float %51 %51 %51 %51
-               OpStore %x_GLF_color %52
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f7217b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cast-float-to-int-and-back/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var f : f32;
-  f = 142.699996948;
-  let x_25 : f32 = f;
-  if ((f32(i32(x_25)) > 100.0)) {
-    let x_33 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_39 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_33), f32(x_36), f32(x_39), f32(x_42));
-  } else {
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_47 : f32 = f32(x_46);
-    x_GLF_color = vec4<f32>(x_47, x_47, x_47, x_47);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6c104ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float sums[3] = (float[3])0;
-  int i = 0;
-  float2x4 indexable = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float tint_symbol_3[3] = {x_40, x_42, x_44};
-  sums = tint_symbol_3;
-  i = 0;
-  while (true) {
-    const int x_50 = i;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_9[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    if ((x_50 < clamp(x_52, x_54, 2))) {
-    } else {
-      break;
-    }
-    const int x_59 = asint(x_9[2].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_61 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_65 = i;
-    const int x_67 = asint(x_9[1].x);
-    indexable = float2x4(float4(x_61, 0.0f, 0.0f, 0.0f), float4(0.0f, x_61, 0.0f, 0.0f));
-    const float x_69 = indexable[x_65][x_67];
-    const float x_71 = sums[x_59];
-    sums[x_59] = (x_71 + x_69);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_77 = asint(x_9[2].x);
-  const float x_79 = sums[x_77];
-  const float x_81 = asfloat(x_6[1].x);
-  if ((x_79 == x_81)) {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_87 = asint(x_9[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const int x_90 = asint(x_9[1].x);
-    const int x_93 = asint(x_9[1].x);
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_96 = asint(x_9[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    x_GLF_color = float4(float(x_87), float(x_90), float(x_93), float(x_96));
-  } else {
-    const int x_100 = asint(x_9[1].x);
-    const float x_101 = float(x_100);
-    x_GLF_color = float4(x_101, x_101, x_101, x_101);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5c389b2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 sums = {};
-  int i = 0;
-  float2x4 indexable = float2x4(0.0f);
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_40, x_42, x_44}};
-  sums = tint_symbol_2;
-  i = 0;
-  while (true) {
-    int const x_50 = i;
-    int const x_52 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_54 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_50 < clamp(x_52, x_54, 2))) {
-    } else {
-      break;
-    }
-    int const x_59 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_61 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    int const x_65 = i;
-    int const x_67 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    indexable = float2x4(float4(x_61, 0.0f, 0.0f, 0.0f), float4(0.0f, x_61, 0.0f, 0.0f));
-    float const x_69 = indexable[x_65][x_67];
-    float const x_71 = sums.arr[x_59];
-    sums.arr[x_59] = (x_71 + x_69);
-    {
-      int const x_74 = i;
-      i = as_type<int>((as_type<uint>(x_74) + as_type<uint>(1)));
-    }
-  }
-  int const x_77 = x_9.x_GLF_uniform_int_values.arr[2].el;
-  float const x_79 = sums.arr[x_77];
-  float const x_81 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_79 == x_81)) {
-    int const x_87 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_90 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_93 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_96 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_87), float(x_90), float(x_93), float(x_96));
-  } else {
-    int const x_100 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_101 = float(x_100);
-    *(tint_symbol_4) = float4(x_101, x_101, x_101, x_101);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 46ff9ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,188 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 122
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %sums "sums"
-               OpName %i "i"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3 = OpTypePointer Function %_arr_float_uint_3
-         %27 = OpConstantNull %_arr_float_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-%mat2v4float = OpTypeMatrix %v4float 2
-%_ptr_Function_mat2v4float = OpTypePointer Function %mat2v4float
-         %34 = OpConstantNull %mat2v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-        %111 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-       %sums = OpVariable %_ptr_Function__arr_float_uint_3 Function %27
-          %i = OpVariable %_ptr_Function_int Function %30
-  %indexable = OpVariable %_ptr_Function_mat2v4float Function %34
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %44 = OpCompositeConstruct %_arr_float_uint_3 %39 %41 %43
-               OpStore %sums %44
-               OpStore %i %int_0
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpExtInst %int %56 SClamp %52 %54 %int_2
-         %58 = OpSLessThan %bool %49 %55
-               OpSelectionMerge %60 None
-               OpBranchConditional %58 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %46
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpLoad %int %i
-         %69 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %70 = OpLoad %int %69
-         %72 = OpCompositeConstruct %v4float %66 %float_0 %float_0 %float_0
-         %73 = OpCompositeConstruct %v4float %float_0 %66 %float_0 %float_0
-         %74 = OpCompositeConstruct %mat2v4float %72 %73
-               OpStore %indexable %74
-         %76 = OpAccessChain %_ptr_Function_float %indexable %67 %70
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Function_float %sums %64
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Function_float %sums %64
-         %81 = OpFAdd %float %79 %77
-               OpStore %80 %81
-               OpBranch %47
-         %47 = OpLabel
-         %82 = OpLoad %int %i
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %i %83
-               OpBranch %45
-         %46 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Function_float %sums %85
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %89 = OpLoad %float %88
-         %90 = OpFOrdEqual %bool %87 %89
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %93
-         %92 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %101 = OpLoad %int %100
-        %102 = OpConvertSToF %float %95
-        %103 = OpConvertSToF %float %97
-        %104 = OpConvertSToF %float %99
-        %105 = OpConvertSToF %float %101
-        %106 = OpCompositeConstruct %v4float %102 %103 %104 %105
-               OpStore %x_GLF_color %106
-               OpBranch %91
-         %93 = OpLabel
-        %107 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %108 = OpLoad %int %107
-        %109 = OpConvertSToF %float %108
-        %110 = OpCompositeConstruct %v4float %109 %109 %109 %109
-               OpStore %x_GLF_color %110
-               OpBranch %91
-         %91 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %111
-        %114 = OpLabel
-        %115 = OpFunctionCall %void %main_1
-        %116 = OpLoad %v4float %x_GLF_color
-        %117 = OpCompositeConstruct %main_out %116
-               OpReturnValue %117
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %119 = OpLabel
-        %120 = OpFunctionCall %main_out %main_inner
-        %121 = OpCompositeExtract %v4float %120 0
-               OpStore %x_GLF_color_1_1 %121
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 07d81cb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var sums : array<f32, 3>;
-  var i : i32;
-  var indexable : mat2x4<f32>;
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-  sums = array<f32, 3>(x_40, x_42, x_44);
-  i = 0;
-  loop {
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_54 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_50 < clamp(x_52, x_54, 2))) {
-    } else {
-      break;
-    }
-    let x_59 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_61 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_65 : i32 = i;
-    let x_67 : i32 = x_9.x_GLF_uniform_int_values[1];
-    indexable = mat2x4<f32>(vec4<f32>(x_61, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_61, 0.0, 0.0));
-    let x_69 : f32 = indexable[x_65][x_67];
-    let x_71 : f32 = sums[x_59];
-    sums[x_59] = (x_71 + x_69);
-
-    continuing {
-      let x_74 : i32 = i;
-      i = (x_74 + 1);
-    }
-  }
-  let x_77 : i32 = x_9.x_GLF_uniform_int_values[2];
-  let x_79 : f32 = sums[x_77];
-  let x_81 : f32 = x_6.x_GLF_uniform_float_values[1];
-  if ((x_79 == x_81)) {
-    let x_87 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_90 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_93 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_96 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_87), f32(x_90), f32(x_93), f32(x_96));
-  } else {
-    let x_100 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_101 : f32 = f32(x_100);
-    x_GLF_color = vec4<f32>(x_101, x_101, x_101, x_101);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6c104ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float sums[3] = (float[3])0;
-  int i = 0;
-  float2x4 indexable = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float tint_symbol_3[3] = {x_40, x_42, x_44};
-  sums = tint_symbol_3;
-  i = 0;
-  while (true) {
-    const int x_50 = i;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_9[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    if ((x_50 < clamp(x_52, x_54, 2))) {
-    } else {
-      break;
-    }
-    const int x_59 = asint(x_9[2].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_61 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_65 = i;
-    const int x_67 = asint(x_9[1].x);
-    indexable = float2x4(float4(x_61, 0.0f, 0.0f, 0.0f), float4(0.0f, x_61, 0.0f, 0.0f));
-    const float x_69 = indexable[x_65][x_67];
-    const float x_71 = sums[x_59];
-    sums[x_59] = (x_71 + x_69);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_77 = asint(x_9[2].x);
-  const float x_79 = sums[x_77];
-  const float x_81 = asfloat(x_6[1].x);
-  if ((x_79 == x_81)) {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_87 = asint(x_9[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const int x_90 = asint(x_9[1].x);
-    const int x_93 = asint(x_9[1].x);
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_96 = asint(x_9[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    x_GLF_color = float4(float(x_87), float(x_90), float(x_93), float(x_96));
-  } else {
-    const int x_100 = asint(x_9[1].x);
-    const float x_101 = float(x_100);
-    x_GLF_color = float4(x_101, x_101, x_101, x_101);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5c389b2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 sums = {};
-  int i = 0;
-  float2x4 indexable = float2x4(0.0f);
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_40, x_42, x_44}};
-  sums = tint_symbol_2;
-  i = 0;
-  while (true) {
-    int const x_50 = i;
-    int const x_52 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_54 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_50 < clamp(x_52, x_54, 2))) {
-    } else {
-      break;
-    }
-    int const x_59 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_61 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    int const x_65 = i;
-    int const x_67 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    indexable = float2x4(float4(x_61, 0.0f, 0.0f, 0.0f), float4(0.0f, x_61, 0.0f, 0.0f));
-    float const x_69 = indexable[x_65][x_67];
-    float const x_71 = sums.arr[x_59];
-    sums.arr[x_59] = (x_71 + x_69);
-    {
-      int const x_74 = i;
-      i = as_type<int>((as_type<uint>(x_74) + as_type<uint>(1)));
-    }
-  }
-  int const x_77 = x_9.x_GLF_uniform_int_values.arr[2].el;
-  float const x_79 = sums.arr[x_77];
-  float const x_81 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_79 == x_81)) {
-    int const x_87 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_90 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_93 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_96 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_87), float(x_90), float(x_93), float(x_96));
-  } else {
-    int const x_100 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_101 = float(x_100);
-    *(tint_symbol_4) = float4(x_101, x_101, x_101, x_101);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 46ff9ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,188 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 122
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %sums "sums"
-               OpName %i "i"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3 = OpTypePointer Function %_arr_float_uint_3
-         %27 = OpConstantNull %_arr_float_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-%mat2v4float = OpTypeMatrix %v4float 2
-%_ptr_Function_mat2v4float = OpTypePointer Function %mat2v4float
-         %34 = OpConstantNull %mat2v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-        %111 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-       %sums = OpVariable %_ptr_Function__arr_float_uint_3 Function %27
-          %i = OpVariable %_ptr_Function_int Function %30
-  %indexable = OpVariable %_ptr_Function_mat2v4float Function %34
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %44 = OpCompositeConstruct %_arr_float_uint_3 %39 %41 %43
-               OpStore %sums %44
-               OpStore %i %int_0
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpExtInst %int %56 SClamp %52 %54 %int_2
-         %58 = OpSLessThan %bool %49 %55
-               OpSelectionMerge %60 None
-               OpBranchConditional %58 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %46
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpLoad %int %i
-         %69 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %70 = OpLoad %int %69
-         %72 = OpCompositeConstruct %v4float %66 %float_0 %float_0 %float_0
-         %73 = OpCompositeConstruct %v4float %float_0 %66 %float_0 %float_0
-         %74 = OpCompositeConstruct %mat2v4float %72 %73
-               OpStore %indexable %74
-         %76 = OpAccessChain %_ptr_Function_float %indexable %67 %70
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Function_float %sums %64
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Function_float %sums %64
-         %81 = OpFAdd %float %79 %77
-               OpStore %80 %81
-               OpBranch %47
-         %47 = OpLabel
-         %82 = OpLoad %int %i
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %i %83
-               OpBranch %45
-         %46 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Function_float %sums %85
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %89 = OpLoad %float %88
-         %90 = OpFOrdEqual %bool %87 %89
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %93
-         %92 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %101 = OpLoad %int %100
-        %102 = OpConvertSToF %float %95
-        %103 = OpConvertSToF %float %97
-        %104 = OpConvertSToF %float %99
-        %105 = OpConvertSToF %float %101
-        %106 = OpCompositeConstruct %v4float %102 %103 %104 %105
-               OpStore %x_GLF_color %106
-               OpBranch %91
-         %93 = OpLabel
-        %107 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %108 = OpLoad %int %107
-        %109 = OpConvertSToF %float %108
-        %110 = OpCompositeConstruct %v4float %109 %109 %109 %109
-               OpStore %x_GLF_color %110
-               OpBranch %91
-         %91 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %111
-        %114 = OpLabel
-        %115 = OpFunctionCall %void %main_1
-        %116 = OpLoad %v4float %x_GLF_color
-        %117 = OpCompositeConstruct %main_out %116
-               OpReturnValue %117
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %119 = OpLabel
-        %120 = OpFunctionCall %main_out %main_inner
-        %121 = OpCompositeExtract %v4float %120 0
-               OpStore %x_GLF_color_1_1 %121
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 07d81cb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-loop-limit-increment-float-array/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var sums : array<f32, 3>;
-  var i : i32;
-  var indexable : mat2x4<f32>;
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-  sums = array<f32, 3>(x_40, x_42, x_44);
-  i = 0;
-  loop {
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_54 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_50 < clamp(x_52, x_54, 2))) {
-    } else {
-      break;
-    }
-    let x_59 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_61 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_65 : i32 = i;
-    let x_67 : i32 = x_9.x_GLF_uniform_int_values[1];
-    indexable = mat2x4<f32>(vec4<f32>(x_61, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_61, 0.0, 0.0));
-    let x_69 : f32 = indexable[x_65][x_67];
-    let x_71 : f32 = sums[x_59];
-    sums[x_59] = (x_71 + x_69);
-
-    continuing {
-      let x_74 : i32 = i;
-      i = (x_74 + 1);
-    }
-  }
-  let x_77 : i32 = x_9.x_GLF_uniform_int_values[2];
-  let x_79 : f32 = sums[x_77];
-  let x_81 : f32 = x_6.x_GLF_uniform_float_values[1];
-  if ((x_79 == x_81)) {
-    let x_87 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_90 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_93 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_96 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_87), f32(x_90), f32(x_93), f32(x_96));
-  } else {
-    let x_100 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_101 : f32 = f32(x_100);
-    x_GLF_color = vec4<f32>(x_101, x_101, x_101, x_101);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f9af10d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  a = 1.0f;
-  const float x_33 = asfloat(x_7[1].x);
-  b = clamp(x_33, (false ? a : 0.0f), 1.0f);
-  const float x_37 = b;
-  const float x_39 = asfloat(x_7[1].x);
-  if ((x_37 == x_39)) {
-    const float x_44 = b;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_46 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_55 = asint(x_9[1].x);
-    x_GLF_color = float4((x_44 * x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_60 = float(x_59);
-    x_GLF_color = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.msl
deleted file mode 100644
index 783e0a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float b = 0.0f;
-  a = 1.0f;
-  float const x_33 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_34 = a;
-  b = clamp(x_33, select(0.0f, x_34, false), 1.0f);
-  float const x_37 = b;
-  float const x_39 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_37 == x_39)) {
-    float const x_44 = b;
-    float const x_46 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    int const x_49 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_55 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4((x_44 * x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    int const x_59 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    float const x_60 = float(x_59);
-    *(tint_symbol_3) = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_7, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ebf3385..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,130 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %25
-          %b = OpVariable %_ptr_Function_float Function %25
-               OpStore %a %float_1
-         %31 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %32 = OpLoad %float %31
-         %33 = OpLoad %float %a
-         %36 = OpSelect %float %false %33 %float_0
-         %34 = OpExtInst %float %35 NClamp %32 %36 %float_1
-               OpStore %b %34
-         %40 = OpLoad %float %b
-         %41 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %42 = OpLoad %float %41
-         %43 = OpFOrdEqual %bool %40 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-         %47 = OpLoad %float %b
-         %49 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpFMul %float %47 %50
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %44
-         %46 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %64
-         %66 = OpCompositeConstruct %v4float %65 %65 %65 %65
-               OpStore %x_GLF_color %66
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 883179d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  a = 1.0;
-  let x_33 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_34 : f32 = a;
-  b = clamp(x_33, select(0.0, x_34, false), 1.0);
-  let x_37 : f32 = b;
-  let x_39 : f32 = x_7.x_GLF_uniform_float_values[1];
-  if ((x_37 == x_39)) {
-    let x_44 : f32 = b;
-    let x_46 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_49 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_55 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>((x_44 * x_46), f32(x_49), f32(x_52), f32(x_55));
-  } else {
-    let x_59 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_60 : f32 = f32(x_59);
-    x_GLF_color = vec4<f32>(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f9af10d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  a = 1.0f;
-  const float x_33 = asfloat(x_7[1].x);
-  b = clamp(x_33, (false ? a : 0.0f), 1.0f);
-  const float x_37 = b;
-  const float x_39 = asfloat(x_7[1].x);
-  if ((x_37 == x_39)) {
-    const float x_44 = b;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_46 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_55 = asint(x_9[1].x);
-    x_GLF_color = float4((x_44 * x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_60 = float(x_59);
-    x_GLF_color = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.msl
deleted file mode 100644
index 783e0a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float b = 0.0f;
-  a = 1.0f;
-  float const x_33 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_34 = a;
-  b = clamp(x_33, select(0.0f, x_34, false), 1.0f);
-  float const x_37 = b;
-  float const x_39 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_37 == x_39)) {
-    float const x_44 = b;
-    float const x_46 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    int const x_49 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_55 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4((x_44 * x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    int const x_59 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    float const x_60 = float(x_59);
-    *(tint_symbol_3) = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_7, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ebf3385..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,130 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %25
-          %b = OpVariable %_ptr_Function_float Function %25
-               OpStore %a %float_1
-         %31 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %32 = OpLoad %float %31
-         %33 = OpLoad %float %a
-         %36 = OpSelect %float %false %33 %float_0
-         %34 = OpExtInst %float %35 NClamp %32 %36 %float_1
-               OpStore %b %34
-         %40 = OpLoad %float %b
-         %41 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %42 = OpLoad %float %41
-         %43 = OpFOrdEqual %bool %40 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-         %47 = OpLoad %float %b
-         %49 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpFMul %float %47 %50
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %44
-         %46 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %64
-         %66 = OpCompositeConstruct %v4float %65 %65 %65 %65
-               OpStore %x_GLF_color %66
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 883179d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-lower-limit-from-always-false/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  a = 1.0;
-  let x_33 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_34 : f32 = a;
-  b = clamp(x_33, select(0.0, x_34, false), 1.0);
-  let x_37 : f32 = b;
-  let x_39 : f32 = x_7.x_GLF_uniform_float_values[1];
-  if ((x_37 == x_39)) {
-    let x_44 : f32 = b;
-    let x_46 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_49 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_55 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>((x_44 * x_46), f32(x_49), f32(x_52), f32(x_55));
-  } else {
-    let x_59 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_60 : f32 = f32(x_59);
-    x_GLF_color = vec4<f32>(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0354a8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[5];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  const int x_40 = asint(x_6[1].x);
-  const int x_43 = asint(x_6[2].x);
-  const int x_46 = asint(x_6[3].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_49 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-  const int x_53 = asint(x_6[4].x);
-  i = x_53;
-  while (true) {
-    const int x_58 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    const float4 x_63 = v;
-    const float4 x_64 = v;
-    const float4 x_65 = v;
-    const float4 x_66 = v;
-    const int x_88 = i;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_92 = asfloat(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((float4x4(float4(x_63.x, x_63.y, x_63.z, x_63.w), float4(x_64.x, x_64.y, x_64.z, x_64.w), float4(x_65.x, x_65.y, x_65.z, x_65.w), float4(x_66.x, x_66.y, x_66.z, x_66.w))[0u][x_88] > x_92)) {
-      const int x_96 = i;
-      const float4 x_97 = v;
-      const float x_99 = asfloat(x_9[1].x);
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const float x_102 = asfloat(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const int x_106 = asint(x_6[1].x);
-      set_float4(v, x_96, clamp(x_97, float4(x_99, x_99, x_99, x_99), float4(x_102, x_102, x_102, x_102))[x_106]);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const float4 x_111 = v;
-  const int x_113 = asint(x_6[1].x);
-  const float x_114 = float(x_113);
-  if (all((x_111 == float4(x_114, x_114, x_114, x_114)))) {
-    const int x_122 = asint(x_6[1].x);
-    const int x_125 = asint(x_6[4].x);
-    const int x_128 = asint(x_6[4].x);
-    const int x_131 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_122), float(x_125), float(x_128), float(x_131));
-  } else {
-    const int x_135 = asint(x_6[4].x);
-    const float x_136 = float(x_135);
-    x_GLF_color = float4(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.msl
deleted file mode 100644
index 47a08bb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  int i = 0;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_43 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_49 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  v = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  i = x_53;
-  while (true) {
-    int const x_58 = i;
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    float4 const x_63 = v;
-    float4 const x_64 = v;
-    float4 const x_65 = v;
-    float4 const x_66 = v;
-    int const x_88 = i;
-    float const x_92 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    if ((float4x4(float4(x_63.x, x_63.y, x_63.z, x_63.w), float4(x_64.x, x_64.y, x_64.z, x_64.w), float4(x_65.x, x_65.y, x_65.z, x_65.w), float4(x_66.x, x_66.y, x_66.z, x_66.w))[0u][x_88] > x_92)) {
-      int const x_96 = i;
-      float4 const x_97 = v;
-      float const x_99 = x_9.x_GLF_uniform_float_values.arr[1].el;
-      float const x_102 = x_9.x_GLF_uniform_float_values.arr[0].el;
-      int const x_106 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      v[x_96] = clamp(x_97, float4(x_99, x_99, x_99, x_99), float4(x_102, x_102, x_102, x_102))[x_106];
-    }
-    {
-      int const x_109 = i;
-      i = as_type<int>((as_type<uint>(x_109) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_111 = v;
-  int const x_113 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_114 = float(x_113);
-  if (all((x_111 == float4(x_114, x_114, x_114, x_114)))) {
-    int const x_122 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_125 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_128 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_131 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_122), float(x_125), float(x_128), float(x_131));
-  } else {
-    int const x_135 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    float const x_136 = float(x_135);
-    *(tint_symbol_3) = float4(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d98ac5c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,220 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 154
-; Schema: 0
-               OpCapability Shader
-        %109 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf1 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_float = OpTypePointer Function %float
-     %v4bool = OpTypeVector %bool 4
-   %main_out = OpTypeStruct %v4float
-        %143 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %i = OpVariable %_ptr_Function_int Function %28
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %36 = OpLoad %int %35
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %39 = OpLoad %int %38
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %42 = OpLoad %int %41
-         %43 = OpConvertSToF %float %33
-         %44 = OpConvertSToF %float %36
-         %45 = OpConvertSToF %float %39
-         %46 = OpConvertSToF %float %42
-         %47 = OpCompositeConstruct %v4float %43 %44 %45 %46
-               OpStore %v %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %50 = OpLoad %int %49
-               OpStore %i %50
-               OpBranch %51
-         %51 = OpLabel
-               OpLoopMerge %52 %53 None
-               OpBranch %54
-         %54 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpSLessThan %bool %55 %57
-               OpSelectionMerge %60 None
-               OpBranchConditional %58 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %52
-         %60 = OpLabel
-         %63 = OpLoad %v4float %v
-         %64 = OpLoad %v4float %v
-         %65 = OpLoad %v4float %v
-         %66 = OpLoad %v4float %v
-         %67 = OpLoad %int %i
-         %69 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %70 = OpLoad %float %69
-         %72 = OpCompositeExtract %float %63 0
-         %73 = OpCompositeExtract %float %63 1
-         %74 = OpCompositeExtract %float %63 2
-         %75 = OpCompositeExtract %float %63 3
-         %76 = OpCompositeConstruct %v4float %72 %73 %74 %75
-         %77 = OpCompositeExtract %float %64 0
-         %78 = OpCompositeExtract %float %64 1
-         %79 = OpCompositeExtract %float %64 2
-         %80 = OpCompositeExtract %float %64 3
-         %81 = OpCompositeConstruct %v4float %77 %78 %79 %80
-         %82 = OpCompositeExtract %float %65 0
-         %83 = OpCompositeExtract %float %65 1
-         %84 = OpCompositeExtract %float %65 2
-         %85 = OpCompositeExtract %float %65 3
-         %86 = OpCompositeConstruct %v4float %82 %83 %84 %85
-         %87 = OpCompositeExtract %float %66 0
-         %88 = OpCompositeExtract %float %66 1
-         %89 = OpCompositeExtract %float %66 2
-         %90 = OpCompositeExtract %float %66 3
-         %91 = OpCompositeConstruct %v4float %87 %88 %89 %90
-         %92 = OpCompositeConstruct %mat4v4float %76 %81 %86 %91
-         %93 = OpCompositeExtract %v4float %92 0
-         %94 = OpVectorExtractDynamic %float %93 %67
-         %95 = OpFOrdGreaterThan %bool %94 %70
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %96
-         %97 = OpLabel
-         %98 = OpLoad %int %i
-         %99 = OpLoad %v4float %v
-        %100 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-        %101 = OpLoad %float %100
-        %102 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %105 = OpLoad %int %104
-        %107 = OpAccessChain %_ptr_Function_float %v %98
-        %110 = OpCompositeConstruct %v4float %101 %101 %101 %101
-        %111 = OpCompositeConstruct %v4float %103 %103 %103 %103
-        %108 = OpExtInst %v4float %109 NClamp %99 %110 %111
-        %112 = OpVectorExtractDynamic %float %108 %105
-               OpStore %107 %112
-               OpBranch %96
-         %96 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-        %113 = OpLoad %int %i
-        %114 = OpIAdd %int %113 %int_1
-               OpStore %i %114
-               OpBranch %51
-         %52 = OpLabel
-        %115 = OpLoad %v4float %v
-        %116 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %117 = OpLoad %int %116
-        %118 = OpConvertSToF %float %117
-        %120 = OpCompositeConstruct %v4float %118 %118 %118 %118
-        %121 = OpFOrdEqual %v4bool %115 %120
-        %119 = OpAll %bool %121
-               OpSelectionMerge %123 None
-               OpBranchConditional %119 %124 %125
-        %124 = OpLabel
-        %126 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %127 = OpLoad %int %126
-        %128 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %129 = OpLoad %int %128
-        %130 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %131 = OpLoad %int %130
-        %132 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %133 = OpLoad %int %132
-        %134 = OpConvertSToF %float %127
-        %135 = OpConvertSToF %float %129
-        %136 = OpConvertSToF %float %131
-        %137 = OpConvertSToF %float %133
-        %138 = OpCompositeConstruct %v4float %134 %135 %136 %137
-               OpStore %x_GLF_color %138
-               OpBranch %123
-        %125 = OpLabel
-        %139 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %140 = OpLoad %int %139
-        %141 = OpConvertSToF %float %140
-        %142 = OpCompositeConstruct %v4float %141 %141 %141 %141
-               OpStore %x_GLF_color %142
-               OpBranch %123
-        %123 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %143
-        %146 = OpLabel
-        %147 = OpFunctionCall %void %main_1
-        %148 = OpLoad %v4float %x_GLF_color
-        %149 = OpCompositeConstruct %main_out %148
-               OpReturnValue %149
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %151 = OpLabel
-        %152 = OpFunctionCall %main_out %main_inner
-        %153 = OpCompositeExtract %v4float %152 0
-               OpStore %x_GLF_color_1_1 %153
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 667c5e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,84 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var i : i32;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_43 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
-  v = vec4<f32>(f32(x_40), f32(x_43), f32(x_46), f32(x_49));
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[4];
-  i = x_53;
-  loop {
-    let x_58 : i32 = i;
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    let x_63 : vec4<f32> = v;
-    let x_64 : vec4<f32> = v;
-    let x_65 : vec4<f32> = v;
-    let x_66 : vec4<f32> = v;
-    let x_88 : i32 = i;
-    let x_92 : f32 = x_9.x_GLF_uniform_float_values[0];
-    if ((mat4x4<f32>(vec4<f32>(x_63.x, x_63.y, x_63.z, x_63.w), vec4<f32>(x_64.x, x_64.y, x_64.z, x_64.w), vec4<f32>(x_65.x, x_65.y, x_65.z, x_65.w), vec4<f32>(x_66.x, x_66.y, x_66.z, x_66.w))[0u][x_88] > x_92)) {
-      let x_96 : i32 = i;
-      let x_97 : vec4<f32> = v;
-      let x_99 : f32 = x_9.x_GLF_uniform_float_values[1];
-      let x_102 : f32 = x_9.x_GLF_uniform_float_values[0];
-      let x_106 : i32 = x_6.x_GLF_uniform_int_values[1];
-      v[x_96] = clamp(x_97, vec4<f32>(x_99, x_99, x_99, x_99), vec4<f32>(x_102, x_102, x_102, x_102))[x_106];
-    }
-
-    continuing {
-      let x_109 : i32 = i;
-      i = (x_109 + 1);
-    }
-  }
-  let x_111 : vec4<f32> = v;
-  let x_113 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_114 : f32 = f32(x_113);
-  if (all((x_111 == vec4<f32>(x_114, x_114, x_114, x_114)))) {
-    let x_122 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_125 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_128 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_131 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_122), f32(x_125), f32(x_128), f32(x_131));
-  } else {
-    let x_135 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_136 : f32 = f32(x_135);
-    x_GLF_color = vec4<f32>(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0354a8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[5];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  const int x_40 = asint(x_6[1].x);
-  const int x_43 = asint(x_6[2].x);
-  const int x_46 = asint(x_6[3].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_49 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-  const int x_53 = asint(x_6[4].x);
-  i = x_53;
-  while (true) {
-    const int x_58 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    const float4 x_63 = v;
-    const float4 x_64 = v;
-    const float4 x_65 = v;
-    const float4 x_66 = v;
-    const int x_88 = i;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_92 = asfloat(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((float4x4(float4(x_63.x, x_63.y, x_63.z, x_63.w), float4(x_64.x, x_64.y, x_64.z, x_64.w), float4(x_65.x, x_65.y, x_65.z, x_65.w), float4(x_66.x, x_66.y, x_66.z, x_66.w))[0u][x_88] > x_92)) {
-      const int x_96 = i;
-      const float4 x_97 = v;
-      const float x_99 = asfloat(x_9[1].x);
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const float x_102 = asfloat(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const int x_106 = asint(x_6[1].x);
-      set_float4(v, x_96, clamp(x_97, float4(x_99, x_99, x_99, x_99), float4(x_102, x_102, x_102, x_102))[x_106]);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const float4 x_111 = v;
-  const int x_113 = asint(x_6[1].x);
-  const float x_114 = float(x_113);
-  if (all((x_111 == float4(x_114, x_114, x_114, x_114)))) {
-    const int x_122 = asint(x_6[1].x);
-    const int x_125 = asint(x_6[4].x);
-    const int x_128 = asint(x_6[4].x);
-    const int x_131 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_122), float(x_125), float(x_128), float(x_131));
-  } else {
-    const int x_135 = asint(x_6[4].x);
-    const float x_136 = float(x_135);
-    x_GLF_color = float4(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.msl
deleted file mode 100644
index 47a08bb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  int i = 0;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_43 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_49 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  v = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  i = x_53;
-  while (true) {
-    int const x_58 = i;
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    float4 const x_63 = v;
-    float4 const x_64 = v;
-    float4 const x_65 = v;
-    float4 const x_66 = v;
-    int const x_88 = i;
-    float const x_92 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    if ((float4x4(float4(x_63.x, x_63.y, x_63.z, x_63.w), float4(x_64.x, x_64.y, x_64.z, x_64.w), float4(x_65.x, x_65.y, x_65.z, x_65.w), float4(x_66.x, x_66.y, x_66.z, x_66.w))[0u][x_88] > x_92)) {
-      int const x_96 = i;
-      float4 const x_97 = v;
-      float const x_99 = x_9.x_GLF_uniform_float_values.arr[1].el;
-      float const x_102 = x_9.x_GLF_uniform_float_values.arr[0].el;
-      int const x_106 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      v[x_96] = clamp(x_97, float4(x_99, x_99, x_99, x_99), float4(x_102, x_102, x_102, x_102))[x_106];
-    }
-    {
-      int const x_109 = i;
-      i = as_type<int>((as_type<uint>(x_109) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_111 = v;
-  int const x_113 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_114 = float(x_113);
-  if (all((x_111 == float4(x_114, x_114, x_114, x_114)))) {
-    int const x_122 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_125 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_128 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_131 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_122), float(x_125), float(x_128), float(x_131));
-  } else {
-    int const x_135 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    float const x_136 = float(x_135);
-    *(tint_symbol_3) = float4(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d98ac5c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,220 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 154
-; Schema: 0
-               OpCapability Shader
-        %109 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf1 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_float = OpTypePointer Function %float
-     %v4bool = OpTypeVector %bool 4
-   %main_out = OpTypeStruct %v4float
-        %143 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %i = OpVariable %_ptr_Function_int Function %28
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %36 = OpLoad %int %35
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %39 = OpLoad %int %38
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %42 = OpLoad %int %41
-         %43 = OpConvertSToF %float %33
-         %44 = OpConvertSToF %float %36
-         %45 = OpConvertSToF %float %39
-         %46 = OpConvertSToF %float %42
-         %47 = OpCompositeConstruct %v4float %43 %44 %45 %46
-               OpStore %v %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %50 = OpLoad %int %49
-               OpStore %i %50
-               OpBranch %51
-         %51 = OpLabel
-               OpLoopMerge %52 %53 None
-               OpBranch %54
-         %54 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpSLessThan %bool %55 %57
-               OpSelectionMerge %60 None
-               OpBranchConditional %58 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %52
-         %60 = OpLabel
-         %63 = OpLoad %v4float %v
-         %64 = OpLoad %v4float %v
-         %65 = OpLoad %v4float %v
-         %66 = OpLoad %v4float %v
-         %67 = OpLoad %int %i
-         %69 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %70 = OpLoad %float %69
-         %72 = OpCompositeExtract %float %63 0
-         %73 = OpCompositeExtract %float %63 1
-         %74 = OpCompositeExtract %float %63 2
-         %75 = OpCompositeExtract %float %63 3
-         %76 = OpCompositeConstruct %v4float %72 %73 %74 %75
-         %77 = OpCompositeExtract %float %64 0
-         %78 = OpCompositeExtract %float %64 1
-         %79 = OpCompositeExtract %float %64 2
-         %80 = OpCompositeExtract %float %64 3
-         %81 = OpCompositeConstruct %v4float %77 %78 %79 %80
-         %82 = OpCompositeExtract %float %65 0
-         %83 = OpCompositeExtract %float %65 1
-         %84 = OpCompositeExtract %float %65 2
-         %85 = OpCompositeExtract %float %65 3
-         %86 = OpCompositeConstruct %v4float %82 %83 %84 %85
-         %87 = OpCompositeExtract %float %66 0
-         %88 = OpCompositeExtract %float %66 1
-         %89 = OpCompositeExtract %float %66 2
-         %90 = OpCompositeExtract %float %66 3
-         %91 = OpCompositeConstruct %v4float %87 %88 %89 %90
-         %92 = OpCompositeConstruct %mat4v4float %76 %81 %86 %91
-         %93 = OpCompositeExtract %v4float %92 0
-         %94 = OpVectorExtractDynamic %float %93 %67
-         %95 = OpFOrdGreaterThan %bool %94 %70
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %96
-         %97 = OpLabel
-         %98 = OpLoad %int %i
-         %99 = OpLoad %v4float %v
-        %100 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-        %101 = OpLoad %float %100
-        %102 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %105 = OpLoad %int %104
-        %107 = OpAccessChain %_ptr_Function_float %v %98
-        %110 = OpCompositeConstruct %v4float %101 %101 %101 %101
-        %111 = OpCompositeConstruct %v4float %103 %103 %103 %103
-        %108 = OpExtInst %v4float %109 NClamp %99 %110 %111
-        %112 = OpVectorExtractDynamic %float %108 %105
-               OpStore %107 %112
-               OpBranch %96
-         %96 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-        %113 = OpLoad %int %i
-        %114 = OpIAdd %int %113 %int_1
-               OpStore %i %114
-               OpBranch %51
-         %52 = OpLabel
-        %115 = OpLoad %v4float %v
-        %116 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %117 = OpLoad %int %116
-        %118 = OpConvertSToF %float %117
-        %120 = OpCompositeConstruct %v4float %118 %118 %118 %118
-        %121 = OpFOrdEqual %v4bool %115 %120
-        %119 = OpAll %bool %121
-               OpSelectionMerge %123 None
-               OpBranchConditional %119 %124 %125
-        %124 = OpLabel
-        %126 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %127 = OpLoad %int %126
-        %128 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %129 = OpLoad %int %128
-        %130 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %131 = OpLoad %int %130
-        %132 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %133 = OpLoad %int %132
-        %134 = OpConvertSToF %float %127
-        %135 = OpConvertSToF %float %129
-        %136 = OpConvertSToF %float %131
-        %137 = OpConvertSToF %float %133
-        %138 = OpCompositeConstruct %v4float %134 %135 %136 %137
-               OpStore %x_GLF_color %138
-               OpBranch %123
-        %125 = OpLabel
-        %139 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %140 = OpLoad %int %139
-        %141 = OpConvertSToF %float %140
-        %142 = OpCompositeConstruct %v4float %141 %141 %141 %141
-               OpStore %x_GLF_color %142
-               OpBranch %123
-        %123 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %143
-        %146 = OpLabel
-        %147 = OpFunctionCall %void %main_1
-        %148 = OpLoad %v4float %x_GLF_color
-        %149 = OpCompositeConstruct %main_out %148
-               OpReturnValue %149
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %151 = OpLabel
-        %152 = OpFunctionCall %main_out %main_inner
-        %153 = OpCompositeExtract %v4float %152 0
-               OpStore %x_GLF_color_1_1 %153
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 667c5e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-component-condition-using-matrix/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,84 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var i : i32;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_43 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
-  v = vec4<f32>(f32(x_40), f32(x_43), f32(x_46), f32(x_49));
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[4];
-  i = x_53;
-  loop {
-    let x_58 : i32 = i;
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    let x_63 : vec4<f32> = v;
-    let x_64 : vec4<f32> = v;
-    let x_65 : vec4<f32> = v;
-    let x_66 : vec4<f32> = v;
-    let x_88 : i32 = i;
-    let x_92 : f32 = x_9.x_GLF_uniform_float_values[0];
-    if ((mat4x4<f32>(vec4<f32>(x_63.x, x_63.y, x_63.z, x_63.w), vec4<f32>(x_64.x, x_64.y, x_64.z, x_64.w), vec4<f32>(x_65.x, x_65.y, x_65.z, x_65.w), vec4<f32>(x_66.x, x_66.y, x_66.z, x_66.w))[0u][x_88] > x_92)) {
-      let x_96 : i32 = i;
-      let x_97 : vec4<f32> = v;
-      let x_99 : f32 = x_9.x_GLF_uniform_float_values[1];
-      let x_102 : f32 = x_9.x_GLF_uniform_float_values[0];
-      let x_106 : i32 = x_6.x_GLF_uniform_int_values[1];
-      v[x_96] = clamp(x_97, vec4<f32>(x_99, x_99, x_99, x_99), vec4<f32>(x_102, x_102, x_102, x_102))[x_106];
-    }
-
-    continuing {
-      let x_109 : i32 = i;
-      i = (x_109 + 1);
-    }
-  }
-  let x_111 : vec4<f32> = v;
-  let x_113 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_114 : f32 = f32(x_113);
-  if (all((x_111 == vec4<f32>(x_114, x_114, x_114, x_114)))) {
-    let x_122 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_125 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_128 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_131 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_122), f32(x_125), f32(x_128), f32(x_131));
-  } else {
-    let x_135 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_136 : f32 = f32(x_135);
-    x_GLF_color = vec4<f32>(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7345f93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float2 v0 = float2(0.0f, 0.0f);
-  float2 v1 = float2(0.0f, 0.0f);
-  const float x_36 = asfloat(x_6[1].x);
-  v0 = float2(x_36, -580.015014648f);
-  const float2 x_38 = v0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_42 = -(x_41);
-  v1 = clamp(ceil(x_38), float2(x_42, x_42), float2(100.0f, 100.0f));
-  const float x_46 = v1.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_48 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_46 == -(x_48))) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_58 = asint(x_9[1].x);
-    const int x_61 = asint(x_9[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_64 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    const int x_68 = asint(x_9[1].x);
-    const float x_69 = float(x_68);
-    x_GLF_color = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.msl
deleted file mode 100644
index 323f746..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float2 v0 = 0.0f;
-  float2 v1 = 0.0f;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  v0 = float2(x_36, -580.015014648f);
-  float2 const x_38 = v0;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = -(x_41);
-  v1 = clamp(ceil(x_38), float2(x_42, x_42), float2(100.0f, 100.0f));
-  float const x_46 = v1.y;
-  float const x_48 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_46 == -(x_48))) {
-    int const x_55 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_58 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    int const x_68 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_69 = float(x_68);
-    *(tint_symbol_3) = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 111a318..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,139 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-         %41 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_n580_015015 = OpConstant %float -580.015015
-      %int_0 = OpConstant %int 0
-  %float_100 = OpConstant %float 100
-         %45 = OpConstantComposite %v2float %float_100 %float_100
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %v0 = OpVariable %_ptr_Function_v2float Function %26
-         %v1 = OpVariable %_ptr_Function_v2float Function %26
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %32 = OpLoad %float %31
-         %34 = OpCompositeConstruct %v2float %32 %float_n580_015015
-               OpStore %v0 %34
-         %35 = OpLoad %v2float %v0
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFNegate %float %38
-         %42 = OpExtInst %v2float %41 Ceil %35
-         %43 = OpCompositeConstruct %v2float %39 %39
-         %40 = OpExtInst %v2float %41 NClamp %42 %43 %45
-               OpStore %v1 %40
-         %48 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %49 = OpLoad %float %48
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpFNegate %float %51
-         %53 = OpFOrdEqual %bool %49 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %57
-         %56 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %60
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %55
-         %57 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %73
-         %75 = OpCompositeConstruct %v4float %74 %74 %74 %74
-               OpStore %x_GLF_color %75
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bc87bc8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var v0 : vec2<f32>;
-  var v1 : vec2<f32>;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[1];
-  v0 = vec2<f32>(x_36, -580.015014648);
-  let x_38 : vec2<f32> = v0;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = -(x_41);
-  v1 = clamp(ceil(x_38), vec2<f32>(x_42, x_42), vec2<f32>(100.0, 100.0));
-  let x_46 : f32 = v1.y;
-  let x_48 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_46 == -(x_48))) {
-    let x_55 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_58 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  } else {
-    let x_68 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_69 : f32 = f32(x_68);
-    x_GLF_color = vec4<f32>(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7345f93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float2 v0 = float2(0.0f, 0.0f);
-  float2 v1 = float2(0.0f, 0.0f);
-  const float x_36 = asfloat(x_6[1].x);
-  v0 = float2(x_36, -580.015014648f);
-  const float2 x_38 = v0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_42 = -(x_41);
-  v1 = clamp(ceil(x_38), float2(x_42, x_42), float2(100.0f, 100.0f));
-  const float x_46 = v1.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_48 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_46 == -(x_48))) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_58 = asint(x_9[1].x);
-    const int x_61 = asint(x_9[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_64 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    const int x_68 = asint(x_9[1].x);
-    const float x_69 = float(x_68);
-    x_GLF_color = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.msl
deleted file mode 100644
index 323f746..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float2 v0 = 0.0f;
-  float2 v1 = 0.0f;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  v0 = float2(x_36, -580.015014648f);
-  float2 const x_38 = v0;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = -(x_41);
-  v1 = clamp(ceil(x_38), float2(x_42, x_42), float2(100.0f, 100.0f));
-  float const x_46 = v1.y;
-  float const x_48 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_46 == -(x_48))) {
-    int const x_55 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_58 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    int const x_68 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_69 = float(x_68);
-    *(tint_symbol_3) = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 111a318..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,139 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-         %41 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_n580_015015 = OpConstant %float -580.015015
-      %int_0 = OpConstant %int 0
-  %float_100 = OpConstant %float 100
-         %45 = OpConstantComposite %v2float %float_100 %float_100
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %v0 = OpVariable %_ptr_Function_v2float Function %26
-         %v1 = OpVariable %_ptr_Function_v2float Function %26
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %32 = OpLoad %float %31
-         %34 = OpCompositeConstruct %v2float %32 %float_n580_015015
-               OpStore %v0 %34
-         %35 = OpLoad %v2float %v0
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFNegate %float %38
-         %42 = OpExtInst %v2float %41 Ceil %35
-         %43 = OpCompositeConstruct %v2float %39 %39
-         %40 = OpExtInst %v2float %41 NClamp %42 %43 %45
-               OpStore %v1 %40
-         %48 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %49 = OpLoad %float %48
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpFNegate %float %51
-         %53 = OpFOrdEqual %bool %49 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %57
-         %56 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %60
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %55
-         %57 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %73
-         %75 = OpCompositeConstruct %v4float %74 %74 %74 %74
-               OpStore %x_GLF_color %75
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index bc87bc8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-element-ceil-negative/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var v0 : vec2<f32>;
-  var v1 : vec2<f32>;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[1];
-  v0 = vec2<f32>(x_36, -580.015014648);
-  let x_38 : vec2<f32> = v0;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = -(x_41);
-  v1 = clamp(ceil(x_38), vec2<f32>(x_42, x_42), vec2<f32>(100.0, 100.0));
-  let x_46 : f32 = v1.y;
-  let x_48 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_46 == -(x_48))) {
-    let x_55 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_58 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  } else {
-    let x_68 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_69 : f32 = f32(x_68);
-    x_GLF_color = vec4<f32>(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 56606d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float2 v0 = float2(0.0f, 0.0f);
-  float2 v1 = float2(0.0f, 0.0f);
-  const float x_37 = asfloat(x_6[2].x);
-  v0 = float2(x_37, 3.799999952f);
-  const float2 x_39 = v0;
-  const float x_43 = asfloat(x_6[1].x);
-  v1 = clamp((x_39 - float2(1.0f, 1.0f)), float2(0.0f, 0.0f), float2(x_43, x_43));
-  const float2 x_47 = v1;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_51 = asfloat(x_6[1].x);
-  if (all((x_47 == float2(x_49, x_51)))) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_62 = asint(x_9[1].x);
-    const int x_65 = asint(x_9[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_68 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_59), float(x_62), float(x_65), float(x_68));
-  } else {
-    const int x_72 = asint(x_9[1].x);
-    const float x_73 = float(x_72);
-    x_GLF_color = float4(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.msl
deleted file mode 100644
index 769c582..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float2 v0 = 0.0f;
-  float2 v1 = 0.0f;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  v0 = float2(x_37, 3.799999952f);
-  float2 const x_39 = v0;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  v1 = clamp((x_39 - float2(1.0f, 1.0f)), float2(0.0f, 0.0f), float2(x_43, x_43));
-  float2 const x_47 = v1;
-  float const x_49 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_51 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  if (all((x_47 == float2(x_49, x_51)))) {
-    int const x_59 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_62 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_68 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_59), float(x_62), float(x_65), float(x_68));
-  } else {
-    int const x_72 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_73 = float(x_72);
-    *(tint_symbol_3) = float4(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6b231fb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-         %41 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %27 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_3_79999995 = OpConstant %float 3.79999995
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %43 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %46 = OpConstantComposite %v2float %float_0 %float_0
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %v0 = OpVariable %_ptr_Function_v2float Function %27
-         %v1 = OpVariable %_ptr_Function_v2float Function %27
-         %32 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %33 = OpLoad %float %32
-         %35 = OpCompositeConstruct %v2float %33 %float_3_79999995
-               OpStore %v0 %35
-         %36 = OpLoad %v2float %v0
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %39 = OpLoad %float %38
-         %44 = OpFSub %v2float %36 %43
-         %47 = OpCompositeConstruct %v2float %39 %39
-         %40 = OpExtInst %v2float %41 NClamp %44 %46 %47
-               OpStore %v1 %40
-         %48 = OpLoad %v2float %v1
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %56 = OpCompositeConstruct %v2float %51 %53
-         %57 = OpFOrdEqual %v2bool %48 %56
-         %54 = OpAll %bool %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %54 %60 %61
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %59
-         %61 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index fa52af1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var v0 : vec2<f32>;
-  var v1 : vec2<f32>;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[2];
-  v0 = vec2<f32>(x_37, 3.799999952);
-  let x_39 : vec2<f32> = v0;
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[1];
-  v1 = clamp((x_39 - vec2<f32>(1.0, 1.0)), vec2<f32>(0.0, 0.0), vec2<f32>(x_43, x_43));
-  let x_47 : vec2<f32> = v1;
-  let x_49 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_51 : f32 = x_6.x_GLF_uniform_float_values[1];
-  if (all((x_47 == vec2<f32>(x_49, x_51)))) {
-    let x_59 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_62 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_68 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_59), f32(x_62), f32(x_65), f32(x_68));
-  } else {
-    let x_72 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_73 : f32 = f32(x_72);
-    x_GLF_color = vec4<f32>(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 56606d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float2 v0 = float2(0.0f, 0.0f);
-  float2 v1 = float2(0.0f, 0.0f);
-  const float x_37 = asfloat(x_6[2].x);
-  v0 = float2(x_37, 3.799999952f);
-  const float2 x_39 = v0;
-  const float x_43 = asfloat(x_6[1].x);
-  v1 = clamp((x_39 - float2(1.0f, 1.0f)), float2(0.0f, 0.0f), float2(x_43, x_43));
-  const float2 x_47 = v1;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_51 = asfloat(x_6[1].x);
-  if (all((x_47 == float2(x_49, x_51)))) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_62 = asint(x_9[1].x);
-    const int x_65 = asint(x_9[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_68 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_59), float(x_62), float(x_65), float(x_68));
-  } else {
-    const int x_72 = asint(x_9[1].x);
-    const float x_73 = float(x_72);
-    x_GLF_color = float4(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.msl
deleted file mode 100644
index 769c582..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float2 v0 = 0.0f;
-  float2 v1 = 0.0f;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  v0 = float2(x_37, 3.799999952f);
-  float2 const x_39 = v0;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  v1 = clamp((x_39 - float2(1.0f, 1.0f)), float2(0.0f, 0.0f), float2(x_43, x_43));
-  float2 const x_47 = v1;
-  float const x_49 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_51 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  if (all((x_47 == float2(x_49, x_51)))) {
-    int const x_59 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_62 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_68 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_59), float(x_62), float(x_65), float(x_68));
-  } else {
-    int const x_72 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_73 = float(x_72);
-    *(tint_symbol_3) = float4(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6b231fb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-         %41 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %27 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_3_79999995 = OpConstant %float 3.79999995
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %43 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %46 = OpConstantComposite %v2float %float_0 %float_0
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %v0 = OpVariable %_ptr_Function_v2float Function %27
-         %v1 = OpVariable %_ptr_Function_v2float Function %27
-         %32 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %33 = OpLoad %float %32
-         %35 = OpCompositeConstruct %v2float %33 %float_3_79999995
-               OpStore %v0 %35
-         %36 = OpLoad %v2float %v0
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %39 = OpLoad %float %38
-         %44 = OpFSub %v2float %36 %43
-         %47 = OpCompositeConstruct %v2float %39 %39
-         %40 = OpExtInst %v2float %41 NClamp %44 %46 %47
-               OpStore %v1 %40
-         %48 = OpLoad %v2float %v1
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %56 = OpCompositeConstruct %v2float %51 %53
-         %57 = OpFOrdEqual %v2bool %48 %56
-         %54 = OpAll %bool %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %54 %60 %61
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %59
-         %61 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index fa52af1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clamp-vector-variable-negative-offset/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var v0 : vec2<f32>;
-  var v1 : vec2<f32>;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[2];
-  v0 = vec2<f32>(x_37, 3.799999952);
-  let x_39 : vec2<f32> = v0;
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[1];
-  v1 = clamp((x_39 - vec2<f32>(1.0, 1.0)), vec2<f32>(0.0, 0.0), vec2<f32>(x_43, x_43));
-  let x_47 : vec2<f32> = v1;
-  let x_49 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_51 : f32 = x_6.x_GLF_uniform_float_values[1];
-  if (all((x_47 == vec2<f32>(x_49, x_51)))) {
-    let x_59 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_62 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_68 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_59), f32(x_62), f32(x_65), f32(x_68));
-  } else {
-    let x_72 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_73 : f32 = f32(x_72);
-    x_GLF_color = vec4<f32>(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ed9d8cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v0 = float2(0.0f, 0.0f);
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_57 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_32 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v0 = float2(x_32, x_32);
-  const float x_35 = v0.x;
-  const float4 x_36 = float4(x_35, x_35, x_35, x_35);
-  v1 = x_36;
-  const float x_38 = asfloat(x_9[0].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if (!((x_38 == x_40))) {
-    const float x_46 = asfloat(x_9[0].x);
-    const float x_48 = asfloat(x_6[1].x);
-    if ((x_46 == x_48)) {
-      return;
-    }
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_53 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float2 x_56 = (float2(x_36.y, x_36.z) - float2(x_53, x_53));
-    x_57 = float4(x_36.x, x_56.x, x_56.y, x_36.w);
-    v1 = x_57;
-  } else {
-    discard;
-  }
-  x_GLF_color = x_57;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.msl
deleted file mode 100644
index f8c35f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf1 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float2 v0 = 0.0f;
-  float4 v1 = 0.0f;
-  float4 x_57 = 0.0f;
-  float const x_32 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v0 = float2(x_32, x_32);
-  float const x_35 = v0.x;
-  float4 const x_36 = float4(x_35, x_35, x_35, x_35);
-  v1 = x_36;
-  float const x_38 = x_9.zero;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if (!((x_38 == x_40))) {
-    float const x_46 = x_9.zero;
-    float const x_48 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    if ((x_46 == x_48)) {
-      return;
-    }
-    float const x_53 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float2 const x_56 = (float2(x_36.y, x_36.z) - float2(x_53, x_53));
-    x_57 = float4(x_36.x, x_56.x, x_56.y, x_36.w);
-    v1 = x_57;
-  } else {
-    discard_fragment();
-  }
-  *(tint_symbol_3) = x_57;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8d3b103..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,138 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 82
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "zero"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %x_57 "x_57"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf1 = OpTypeStruct %float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %24 = OpConstantNull %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %71 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %v0 = OpVariable %_ptr_Function_v2float Function %24
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-       %x_57 = OpVariable %_ptr_Function_v4float Function %5
-         %32 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %33 = OpLoad %float %32
-         %34 = OpCompositeConstruct %v2float %33 %33
-               OpStore %v0 %34
-         %36 = OpAccessChain %_ptr_Function_float %v0 %uint_0
-         %37 = OpLoad %float %36
-         %38 = OpCompositeConstruct %v4float %37 %37 %37 %37
-               OpStore %v1 %38
-         %39 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %44 = OpFOrdEqual %bool %40 %42
-         %43 = OpLogicalNot %bool %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %43 %47 %48
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpFOrdEqual %bool %50 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-               OpReturn
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %59 = OpCompositeExtract %float %38 1
-         %60 = OpCompositeExtract %float %38 2
-         %61 = OpCompositeConstruct %v2float %59 %60
-         %62 = OpCompositeConstruct %v2float %58 %58
-         %63 = OpFSub %v2float %61 %62
-         %64 = OpCompositeExtract %float %38 0
-         %65 = OpCompositeExtract %float %63 0
-         %66 = OpCompositeExtract %float %63 1
-         %67 = OpCompositeExtract %float %38 3
-         %68 = OpCompositeConstruct %v4float %64 %65 %66 %67
-               OpStore %x_57 %68
-         %69 = OpLoad %v4float %x_57
-               OpStore %v1 %69
-               OpBranch %46
-         %48 = OpLabel
-               OpKill
-         %46 = OpLabel
-         %70 = OpLoad %v4float %x_57
-               OpStore %x_GLF_color %70
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %71
-         %74 = OpLabel
-         %75 = OpFunctionCall %void %main_1
-         %76 = OpLoad %v4float %x_GLF_color
-         %77 = OpCompositeConstruct %main_out %76
-               OpReturnValue %77
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %79 = OpLabel
-         %80 = OpFunctionCall %main_out %main_inner
-         %81 = OpCompositeExtract %v4float %80 0
-               OpStore %x_GLF_color_1_1 %81
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index edebd91..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf1 {
-  zero : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v0 : vec2<f32>;
-  var v1 : vec4<f32>;
-  var x_57 : vec4<f32>;
-  let x_32 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v0 = vec2<f32>(x_32, x_32);
-  let x_35 : f32 = v0.x;
-  let x_36 : vec4<f32> = vec4<f32>(x_35, x_35, x_35, x_35);
-  v1 = x_36;
-  let x_38 : f32 = x_9.zero;
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if (!((x_38 == x_40))) {
-    let x_46 : f32 = x_9.zero;
-    let x_48 : f32 = x_6.x_GLF_uniform_float_values[1];
-    if ((x_46 == x_48)) {
-      return;
-    }
-    let x_53 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_56 : vec2<f32> = (vec2<f32>(x_36.y, x_36.z) - vec2<f32>(x_53, x_53));
-    x_57 = vec4<f32>(x_36.x, x_56.x, x_56.y, x_36.w);
-    v1 = x_57;
-  } else {
-    discard;
-  }
-  x_GLF_color = x_57;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index ed9d8cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v0 = float2(0.0f, 0.0f);
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_57 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_32 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v0 = float2(x_32, x_32);
-  const float x_35 = v0.x;
-  const float4 x_36 = float4(x_35, x_35, x_35, x_35);
-  v1 = x_36;
-  const float x_38 = asfloat(x_9[0].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if (!((x_38 == x_40))) {
-    const float x_46 = asfloat(x_9[0].x);
-    const float x_48 = asfloat(x_6[1].x);
-    if ((x_46 == x_48)) {
-      return;
-    }
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_53 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float2 x_56 = (float2(x_36.y, x_36.z) - float2(x_53, x_53));
-    x_57 = float4(x_36.x, x_56.x, x_56.y, x_36.w);
-    v1 = x_57;
-  } else {
-    discard;
-  }
-  x_GLF_color = x_57;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.msl
deleted file mode 100644
index f8c35f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf1 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float2 v0 = 0.0f;
-  float4 v1 = 0.0f;
-  float4 x_57 = 0.0f;
-  float const x_32 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v0 = float2(x_32, x_32);
-  float const x_35 = v0.x;
-  float4 const x_36 = float4(x_35, x_35, x_35, x_35);
-  v1 = x_36;
-  float const x_38 = x_9.zero;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if (!((x_38 == x_40))) {
-    float const x_46 = x_9.zero;
-    float const x_48 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    if ((x_46 == x_48)) {
-      return;
-    }
-    float const x_53 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float2 const x_56 = (float2(x_36.y, x_36.z) - float2(x_53, x_53));
-    x_57 = float4(x_36.x, x_56.x, x_56.y, x_36.w);
-    v1 = x_57;
-  } else {
-    discard_fragment();
-  }
-  *(tint_symbol_3) = x_57;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8d3b103..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,138 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 82
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "zero"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %x_57 "x_57"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf1 = OpTypeStruct %float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %24 = OpConstantNull %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %71 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %v0 = OpVariable %_ptr_Function_v2float Function %24
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-       %x_57 = OpVariable %_ptr_Function_v4float Function %5
-         %32 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %33 = OpLoad %float %32
-         %34 = OpCompositeConstruct %v2float %33 %33
-               OpStore %v0 %34
-         %36 = OpAccessChain %_ptr_Function_float %v0 %uint_0
-         %37 = OpLoad %float %36
-         %38 = OpCompositeConstruct %v4float %37 %37 %37 %37
-               OpStore %v1 %38
-         %39 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %44 = OpFOrdEqual %bool %40 %42
-         %43 = OpLogicalNot %bool %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %43 %47 %48
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpFOrdEqual %bool %50 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-               OpReturn
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %59 = OpCompositeExtract %float %38 1
-         %60 = OpCompositeExtract %float %38 2
-         %61 = OpCompositeConstruct %v2float %59 %60
-         %62 = OpCompositeConstruct %v2float %58 %58
-         %63 = OpFSub %v2float %61 %62
-         %64 = OpCompositeExtract %float %38 0
-         %65 = OpCompositeExtract %float %63 0
-         %66 = OpCompositeExtract %float %63 1
-         %67 = OpCompositeExtract %float %38 3
-         %68 = OpCompositeConstruct %v4float %64 %65 %66 %67
-               OpStore %x_57 %68
-         %69 = OpLoad %v4float %x_57
-               OpStore %v1 %69
-               OpBranch %46
-         %48 = OpLabel
-               OpKill
-         %46 = OpLabel
-         %70 = OpLoad %v4float %x_57
-               OpStore %x_GLF_color %70
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %71
-         %74 = OpLabel
-         %75 = OpFunctionCall %void %main_1
-         %76 = OpLoad %v4float %x_GLF_color
-         %77 = OpCompositeConstruct %main_out %76
-               OpReturnValue %77
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %79 = OpLabel
-         %80 = OpFunctionCall %main_out %main_inner
-         %81 = OpCompositeExtract %v4float %80 0
-               OpStore %x_GLF_color_1_1 %81
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index edebd91..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-clear-yz-inside-condition/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf1 {
-  zero : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v0 : vec2<f32>;
-  var v1 : vec4<f32>;
-  var x_57 : vec4<f32>;
-  let x_32 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v0 = vec2<f32>(x_32, x_32);
-  let x_35 : f32 = v0.x;
-  let x_36 : vec4<f32> = vec4<f32>(x_35, x_35, x_35, x_35);
-  v1 = x_36;
-  let x_38 : f32 = x_9.zero;
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if (!((x_38 == x_40))) {
-    let x_46 : f32 = x_9.zero;
-    let x_48 : f32 = x_6.x_GLF_uniform_float_values[1];
-    if ((x_46 == x_48)) {
-      return;
-    }
-    let x_53 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_56 : vec2<f32> = (vec2<f32>(x_36.y, x_36.z) - vec2<f32>(x_53, x_53));
-    x_57 = vec4<f32>(x_36.x, x_56.x, x_56.y, x_36.w);
-    v1 = x_57;
-  } else {
-    discard;
-  }
-  x_GLF_color = x_57;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4826bc2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,124 +0,0 @@
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_12 : register(b2, space0) {
-  uint4 x_12[4];
-};
-cbuffer cbuffer_x_14 : register(b3, space0) {
-  uint4 x_14[1];
-};
-cbuffer cbuffer_x_16 : register(b0, space0) {
-  uint4 x_16[1];
-};
-
-void func0_() {
-  float4 tmp = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_112 = gl_FragCoord.x;
-  const float x_114 = asfloat(x_8[1].x);
-  if ((x_112 > x_114)) {
-    tmp = x_GLF_color;
-  }
-  x_GLF_color = tmp;
-  return;
-}
-
-int func1_() {
-  int a = 0;
-  const int x_122 = asint(x_12[1].x);
-  a = x_122;
-  while (true) {
-    const int x_127 = a;
-    const int x_129 = asint(x_12[3].x);
-    if ((x_127 < x_129)) {
-    } else {
-      break;
-    }
-    const int x_133 = asint(x_14[0].x);
-    const int x_135 = asint(x_12[1].x);
-    if ((x_133 > x_135)) {
-      func0_();
-      const int x_142 = asint(x_12[3].x);
-      a = x_142;
-    } else {
-      func0_();
-    }
-  }
-  return a;
-}
-
-void main_1() {
-  int a_1 = 0;
-  int i = 0;
-  int j = 0;
-  const float x_56 = gl_FragCoord.x;
-  const float x_58 = asfloat(x_8[1].x);
-  if ((x_56 > x_58)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-    const float x_66 = asfloat(x_8[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_70 = asfloat(x_8[2].x);
-    x_GLF_color = float4(x_64, x_66, x_68, x_70);
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const uint x_73 = x_16[scalar_offset_2 / 4][scalar_offset_2 % 4];
-    x_GLF_color = tint_unpack4x8snorm(x_73);
-  }
-  const int x_76 = asint(x_12[2].x);
-  a_1 = x_76;
-  i = 0;
-  {
-    for(; (i < 5); i = (i + 1)) {
-      j = 0;
-      {
-        for(; (j < 2); j = (j + 1)) {
-          const int x_91 = func1_();
-          a_1 = (a_1 + x_91);
-        }
-      }
-    }
-  }
-  const int x_98 = a_1;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_100 = asint(x_12[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  if ((x_98 == x_100)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_105 = asfloat(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_107 = x_GLF_color.z;
-    x_GLF_color.z = (x_107 - x_105);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.msl
deleted file mode 100644
index 87589dc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,152 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct buf3 {
-  /* 0x0000 */ int three;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_uint_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func0_(constant buf1& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4 tmp = 0.0f;
-  float const x_112 = (*(tint_symbol_3)).x;
-  float const x_114 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_112 > x_114)) {
-    float4 const x_118 = *(tint_symbol_4);
-    tmp = x_118;
-  }
-  float4 const x_119 = tmp;
-  *(tint_symbol_4) = x_119;
-  return;
-}
-
-int func1_(constant buf2& x_12, constant buf3& x_14, constant buf1& x_8, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int a = 0;
-  int const x_122 = x_12.x_GLF_uniform_int_values.arr[1].el;
-  a = x_122;
-  while (true) {
-    int const x_127 = a;
-    int const x_129 = x_12.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_127 < x_129)) {
-    } else {
-      break;
-    }
-    int const x_133 = x_14.three;
-    int const x_135 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_133 > x_135)) {
-      func0_(x_8, tint_symbol_5, tint_symbol_6);
-      int const x_142 = x_12.x_GLF_uniform_int_values.arr[3].el;
-      a = x_142;
-    } else {
-      func0_(x_8, tint_symbol_5, tint_symbol_6);
-    }
-  }
-  int const x_144 = a;
-  return x_144;
-}
-
-void main_1(constant buf1& x_8, constant buf0& x_16, constant buf2& x_12, constant buf3& x_14, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int a_1 = 0;
-  int i = 0;
-  int j = 0;
-  float const x_56 = (*(tint_symbol_7)).x;
-  float const x_58 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_56 > x_58)) {
-    float const x_64 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_66 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    float const x_68 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_70 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    *(tint_symbol_8) = float4(x_64, x_66, x_68, x_70);
-  } else {
-    uint const x_73 = x_16.x_GLF_uniform_uint_values.arr[0].el;
-    *(tint_symbol_8) = unpack_snorm4x8_to_float(x_73);
-  }
-  int const x_76 = x_12.x_GLF_uniform_int_values.arr[2].el;
-  a_1 = x_76;
-  i = 0;
-  while (true) {
-    int const x_81 = i;
-    if ((x_81 < 5)) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      int const x_88 = j;
-      if ((x_88 < 2)) {
-      } else {
-        break;
-      }
-      int const x_91 = func1_(x_12, x_14, x_8, tint_symbol_7, tint_symbol_8);
-      int const x_92 = a_1;
-      a_1 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(x_91)));
-      {
-        int const x_94 = j;
-        j = as_type<int>((as_type<uint>(x_94) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_96 = i;
-      i = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-    }
-  }
-  int const x_98 = a_1;
-  int const x_100 = x_12.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_98 == x_100)) {
-    float const x_105 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_107 = (*(tint_symbol_8)).z;
-    (*(tint_symbol_8)).z = (x_107 - x_105);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_16, constant buf2& x_12, constant buf3& x_14, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_8, x_16, x_12, x_14, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_16 [[buffer(1)]], constant buf2& x_12 [[buffer(2)]], constant buf3& x_14 [[buffer(3)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_16, x_12, x_14, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d760fe4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,297 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 168
-; Schema: 0
-               OpCapability Shader
-        %113 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %buf3 "buf3"
-               OpMemberName %buf3 0 "three"
-               OpName %x_14 "x_14"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_uint_values"
-               OpName %x_16 "x_16"
-               OpName %func0_ "func0_"
-               OpName %tmp "tmp"
-               OpName %func1_ "func1_"
-               OpName %a "a"
-               OpName %main_1 "main_1"
-               OpName %a_1 "a_1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 2
-               OpDecorate %buf3 Block
-               OpMemberDecorate %buf3 0 Offset 0
-               OpDecorate %x_14 NonWritable
-               OpDecorate %x_14 DescriptorSet 0
-               OpDecorate %x_14 Binding 3
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_uint_uint_1 ArrayStride 16
-               OpDecorate %x_16 NonWritable
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf2 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_12 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %buf3 = OpTypeStruct %int
-%_ptr_Uniform_buf3 = OpTypePointer Uniform %buf3
-       %x_14 = OpVariable %_ptr_Uniform_buf3 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-       %buf0 = OpTypeStruct %_arr_uint_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_16 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %31 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-         %51 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %56 = OpConstantNull %int
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-      %int_5 = OpConstant %int 5
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-        %155 = OpTypeFunction %main_out %v4float
-     %func0_ = OpFunction %void None %31
-         %34 = OpLabel
-        %tmp = OpVariable %_ptr_Function_v4float Function %7
-         %39 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %40 = OpLoad %float %39
-         %43 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %44 = OpLoad %float %43
-         %45 = OpFOrdGreaterThan %bool %40 %44
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %v4float %x_GLF_color
-               OpStore %tmp %49
-               OpBranch %47
-         %47 = OpLabel
-         %50 = OpLoad %v4float %tmp
-               OpStore %x_GLF_color %50
-               OpReturn
-               OpFunctionEnd
-     %func1_ = OpFunction %int None %51
-         %53 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %56
-         %58 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %59 = OpLoad %int %58
-               OpStore %a %59
-               OpBranch %60
-         %60 = OpLabel
-               OpLoopMerge %61 %62 None
-               OpBranch %63
-         %63 = OpLabel
-         %64 = OpLoad %int %a
-         %66 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_3
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-               OpBranch %69
-         %71 = OpLabel
-               OpBranch %61
-         %69 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpSGreaterThan %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-         %80 = OpFunctionCall %void %func0_
-         %81 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_3
-         %82 = OpLoad %int %81
-               OpStore %a %82
-               OpBranch %77
-         %79 = OpLabel
-         %83 = OpFunctionCall %void %func0_
-               OpBranch %77
-         %77 = OpLabel
-               OpBranch %62
-         %62 = OpLabel
-               OpBranch %60
-         %61 = OpLabel
-         %84 = OpLoad %int %a
-               OpReturnValue %84
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %31
-         %86 = OpLabel
-        %a_1 = OpVariable %_ptr_Function_int Function %56
-          %i = OpVariable %_ptr_Function_int Function %56
-          %j = OpVariable %_ptr_Function_int Function %56
-         %90 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %91 = OpLoad %float %90
-         %92 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %93 = OpLoad %float %92
-         %94 = OpFOrdGreaterThan %bool %91 %93
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %97
-         %96 = OpLabel
-         %99 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-        %100 = OpLoad %float %99
-        %101 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %102 = OpLoad %float %101
-        %103 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %107 = OpLoad %float %106
-        %108 = OpCompositeConstruct %v4float %100 %102 %104 %107
-               OpStore %x_GLF_color %108
-               OpBranch %95
-         %97 = OpLabel
-        %110 = OpAccessChain %_ptr_Uniform_uint %x_16 %uint_0 %int_0
-        %111 = OpLoad %uint %110
-        %112 = OpExtInst %v4float %113 UnpackSnorm4x8 %111
-               OpStore %x_GLF_color %112
-               OpBranch %95
-         %95 = OpLabel
-        %114 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_2
-        %115 = OpLoad %int %114
-               OpStore %a_1 %115
-               OpStore %i %int_0
-               OpBranch %116
-        %116 = OpLabel
-               OpLoopMerge %117 %118 None
-               OpBranch %119
-        %119 = OpLabel
-        %120 = OpLoad %int %i
-        %122 = OpSLessThan %bool %120 %int_5
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %125
-        %124 = OpLabel
-               OpBranch %123
-        %125 = OpLabel
-               OpBranch %117
-        %123 = OpLabel
-               OpStore %j %int_0
-               OpBranch %126
-        %126 = OpLabel
-               OpLoopMerge %127 %128 None
-               OpBranch %129
-        %129 = OpLabel
-        %130 = OpLoad %int %j
-        %131 = OpSLessThan %bool %130 %int_2
-               OpSelectionMerge %132 None
-               OpBranchConditional %131 %133 %134
-        %133 = OpLabel
-               OpBranch %132
-        %134 = OpLabel
-               OpBranch %127
-        %132 = OpLabel
-        %135 = OpFunctionCall %int %func1_
-        %136 = OpLoad %int %a_1
-        %137 = OpIAdd %int %136 %135
-               OpStore %a_1 %137
-               OpBranch %128
-        %128 = OpLabel
-        %138 = OpLoad %int %j
-        %139 = OpIAdd %int %138 %int_1
-               OpStore %j %139
-               OpBranch %126
-        %127 = OpLabel
-               OpBranch %118
-        %118 = OpLabel
-        %140 = OpLoad %int %i
-        %141 = OpIAdd %int %140 %int_1
-               OpStore %i %141
-               OpBranch %116
-        %117 = OpLabel
-        %142 = OpLoad %int %a_1
-        %143 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %144 = OpLoad %int %143
-        %145 = OpIEqual %bool %142 %144
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %146
-        %147 = OpLabel
-        %148 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-        %149 = OpLoad %float %148
-        %151 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_2
-        %152 = OpLoad %float %151
-        %153 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_2
-        %154 = OpFSub %float %152 %149
-               OpStore %153 %154
-               OpBranch %146
-        %146 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %155
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %159 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %160 = OpFunctionCall %void %main_1
-        %161 = OpLoad %v4float %x_GLF_color
-        %162 = OpCompositeConstruct %main_out %161
-               OpReturnValue %162
-               OpFunctionEnd
-       %main = OpFunction %void None %31
-        %164 = OpLabel
-        %166 = OpLoad %v4float %gl_FragCoord_param_1
-        %165 = OpFunctionCall %main_out %main_inner %166
-        %167 = OpCompositeExtract %v4float %165 0
-               OpStore %x_GLF_color_1_1 %167
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 771813e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,144 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[block]]
-struct buf3 {
-  three : i32;
-};
-
-type Arr_2 = [[stride(16)]] array<u32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_uint_values : Arr_2;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(2)]] var<uniform> x_12 : buf2;
-
-[[group(0), binding(3)]] var<uniform> x_14 : buf3;
-
-[[group(0), binding(0)]] var<uniform> x_16 : buf0;
-
-fn func0_() {
-  var tmp : vec4<f32>;
-  let x_112 : f32 = gl_FragCoord.x;
-  let x_114 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_112 > x_114)) {
-    let x_118 : vec4<f32> = x_GLF_color;
-    tmp = x_118;
-  }
-  let x_119 : vec4<f32> = tmp;
-  x_GLF_color = x_119;
-  return;
-}
-
-fn func1_() -> i32 {
-  var a : i32;
-  let x_122 : i32 = x_12.x_GLF_uniform_int_values[1];
-  a = x_122;
-  loop {
-    let x_127 : i32 = a;
-    let x_129 : i32 = x_12.x_GLF_uniform_int_values[3];
-    if ((x_127 < x_129)) {
-    } else {
-      break;
-    }
-    let x_133 : i32 = x_14.three;
-    let x_135 : i32 = x_12.x_GLF_uniform_int_values[1];
-    if ((x_133 > x_135)) {
-      func0_();
-      let x_142 : i32 = x_12.x_GLF_uniform_int_values[3];
-      a = x_142;
-    } else {
-      func0_();
-    }
-  }
-  let x_144 : i32 = a;
-  return x_144;
-}
-
-fn main_1() {
-  var a_1 : i32;
-  var i : i32;
-  var j : i32;
-  let x_56 : f32 = gl_FragCoord.x;
-  let x_58 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_56 > x_58)) {
-    let x_64 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_66 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_68 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_70 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_GLF_color = vec4<f32>(x_64, x_66, x_68, x_70);
-  } else {
-    let x_73 : u32 = x_16.x_GLF_uniform_uint_values[0];
-    x_GLF_color = unpack4x8snorm(x_73);
-  }
-  let x_76 : i32 = x_12.x_GLF_uniform_int_values[2];
-  a_1 = x_76;
-  i = 0;
-  loop {
-    let x_81 : i32 = i;
-    if ((x_81 < 5)) {
-    } else {
-      break;
-    }
-    j = 0;
-    loop {
-      let x_88 : i32 = j;
-      if ((x_88 < 2)) {
-      } else {
-        break;
-      }
-      let x_91 : i32 = func1_();
-      let x_92 : i32 = a_1;
-      a_1 = (x_92 + x_91);
-
-      continuing {
-        let x_94 : i32 = j;
-        j = (x_94 + 1);
-      }
-    }
-
-    continuing {
-      let x_96 : i32 = i;
-      i = (x_96 + 1);
-    }
-  }
-  let x_98 : i32 = a_1;
-  let x_100 : i32 = x_12.x_GLF_uniform_int_values[0];
-  if ((x_98 == x_100)) {
-    let x_105 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_107 : f32 = x_GLF_color.z;
-    x_GLF_color.z = (x_107 - x_105);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4826bc2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,124 +0,0 @@
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_12 : register(b2, space0) {
-  uint4 x_12[4];
-};
-cbuffer cbuffer_x_14 : register(b3, space0) {
-  uint4 x_14[1];
-};
-cbuffer cbuffer_x_16 : register(b0, space0) {
-  uint4 x_16[1];
-};
-
-void func0_() {
-  float4 tmp = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_112 = gl_FragCoord.x;
-  const float x_114 = asfloat(x_8[1].x);
-  if ((x_112 > x_114)) {
-    tmp = x_GLF_color;
-  }
-  x_GLF_color = tmp;
-  return;
-}
-
-int func1_() {
-  int a = 0;
-  const int x_122 = asint(x_12[1].x);
-  a = x_122;
-  while (true) {
-    const int x_127 = a;
-    const int x_129 = asint(x_12[3].x);
-    if ((x_127 < x_129)) {
-    } else {
-      break;
-    }
-    const int x_133 = asint(x_14[0].x);
-    const int x_135 = asint(x_12[1].x);
-    if ((x_133 > x_135)) {
-      func0_();
-      const int x_142 = asint(x_12[3].x);
-      a = x_142;
-    } else {
-      func0_();
-    }
-  }
-  return a;
-}
-
-void main_1() {
-  int a_1 = 0;
-  int i = 0;
-  int j = 0;
-  const float x_56 = gl_FragCoord.x;
-  const float x_58 = asfloat(x_8[1].x);
-  if ((x_56 > x_58)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-    const float x_66 = asfloat(x_8[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_70 = asfloat(x_8[2].x);
-    x_GLF_color = float4(x_64, x_66, x_68, x_70);
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const uint x_73 = x_16[scalar_offset_2 / 4][scalar_offset_2 % 4];
-    x_GLF_color = tint_unpack4x8snorm(x_73);
-  }
-  const int x_76 = asint(x_12[2].x);
-  a_1 = x_76;
-  i = 0;
-  {
-    for(; (i < 5); i = (i + 1)) {
-      j = 0;
-      {
-        for(; (j < 2); j = (j + 1)) {
-          const int x_91 = func1_();
-          a_1 = (a_1 + x_91);
-        }
-      }
-    }
-  }
-  const int x_98 = a_1;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_100 = asint(x_12[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  if ((x_98 == x_100)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_105 = asfloat(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_107 = x_GLF_color.z;
-    x_GLF_color.z = (x_107 - x_105);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.msl
deleted file mode 100644
index 87589dc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,152 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct buf3 {
-  /* 0x0000 */ int three;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_uint_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func0_(constant buf1& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4 tmp = 0.0f;
-  float const x_112 = (*(tint_symbol_3)).x;
-  float const x_114 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_112 > x_114)) {
-    float4 const x_118 = *(tint_symbol_4);
-    tmp = x_118;
-  }
-  float4 const x_119 = tmp;
-  *(tint_symbol_4) = x_119;
-  return;
-}
-
-int func1_(constant buf2& x_12, constant buf3& x_14, constant buf1& x_8, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int a = 0;
-  int const x_122 = x_12.x_GLF_uniform_int_values.arr[1].el;
-  a = x_122;
-  while (true) {
-    int const x_127 = a;
-    int const x_129 = x_12.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_127 < x_129)) {
-    } else {
-      break;
-    }
-    int const x_133 = x_14.three;
-    int const x_135 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_133 > x_135)) {
-      func0_(x_8, tint_symbol_5, tint_symbol_6);
-      int const x_142 = x_12.x_GLF_uniform_int_values.arr[3].el;
-      a = x_142;
-    } else {
-      func0_(x_8, tint_symbol_5, tint_symbol_6);
-    }
-  }
-  int const x_144 = a;
-  return x_144;
-}
-
-void main_1(constant buf1& x_8, constant buf0& x_16, constant buf2& x_12, constant buf3& x_14, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int a_1 = 0;
-  int i = 0;
-  int j = 0;
-  float const x_56 = (*(tint_symbol_7)).x;
-  float const x_58 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_56 > x_58)) {
-    float const x_64 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_66 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    float const x_68 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_70 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    *(tint_symbol_8) = float4(x_64, x_66, x_68, x_70);
-  } else {
-    uint const x_73 = x_16.x_GLF_uniform_uint_values.arr[0].el;
-    *(tint_symbol_8) = unpack_snorm4x8_to_float(x_73);
-  }
-  int const x_76 = x_12.x_GLF_uniform_int_values.arr[2].el;
-  a_1 = x_76;
-  i = 0;
-  while (true) {
-    int const x_81 = i;
-    if ((x_81 < 5)) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      int const x_88 = j;
-      if ((x_88 < 2)) {
-      } else {
-        break;
-      }
-      int const x_91 = func1_(x_12, x_14, x_8, tint_symbol_7, tint_symbol_8);
-      int const x_92 = a_1;
-      a_1 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(x_91)));
-      {
-        int const x_94 = j;
-        j = as_type<int>((as_type<uint>(x_94) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_96 = i;
-      i = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-    }
-  }
-  int const x_98 = a_1;
-  int const x_100 = x_12.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_98 == x_100)) {
-    float const x_105 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_107 = (*(tint_symbol_8)).z;
-    (*(tint_symbol_8)).z = (x_107 - x_105);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_16, constant buf2& x_12, constant buf3& x_14, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_8, x_16, x_12, x_14, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_16 [[buffer(1)]], constant buf2& x_12 [[buffer(2)]], constant buf3& x_14 [[buffer(3)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_16, x_12, x_14, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d760fe4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,297 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 168
-; Schema: 0
-               OpCapability Shader
-        %113 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %buf3 "buf3"
-               OpMemberName %buf3 0 "three"
-               OpName %x_14 "x_14"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_uint_values"
-               OpName %x_16 "x_16"
-               OpName %func0_ "func0_"
-               OpName %tmp "tmp"
-               OpName %func1_ "func1_"
-               OpName %a "a"
-               OpName %main_1 "main_1"
-               OpName %a_1 "a_1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 2
-               OpDecorate %buf3 Block
-               OpMemberDecorate %buf3 0 Offset 0
-               OpDecorate %x_14 NonWritable
-               OpDecorate %x_14 DescriptorSet 0
-               OpDecorate %x_14 Binding 3
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_uint_uint_1 ArrayStride 16
-               OpDecorate %x_16 NonWritable
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf2 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_12 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %buf3 = OpTypeStruct %int
-%_ptr_Uniform_buf3 = OpTypePointer Uniform %buf3
-       %x_14 = OpVariable %_ptr_Uniform_buf3 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-       %buf0 = OpTypeStruct %_arr_uint_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_16 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %31 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-         %51 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %56 = OpConstantNull %int
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-      %int_5 = OpConstant %int 5
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-        %155 = OpTypeFunction %main_out %v4float
-     %func0_ = OpFunction %void None %31
-         %34 = OpLabel
-        %tmp = OpVariable %_ptr_Function_v4float Function %7
-         %39 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %40 = OpLoad %float %39
-         %43 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %44 = OpLoad %float %43
-         %45 = OpFOrdGreaterThan %bool %40 %44
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %v4float %x_GLF_color
-               OpStore %tmp %49
-               OpBranch %47
-         %47 = OpLabel
-         %50 = OpLoad %v4float %tmp
-               OpStore %x_GLF_color %50
-               OpReturn
-               OpFunctionEnd
-     %func1_ = OpFunction %int None %51
-         %53 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %56
-         %58 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %59 = OpLoad %int %58
-               OpStore %a %59
-               OpBranch %60
-         %60 = OpLabel
-               OpLoopMerge %61 %62 None
-               OpBranch %63
-         %63 = OpLabel
-         %64 = OpLoad %int %a
-         %66 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_3
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-               OpBranch %69
-         %71 = OpLabel
-               OpBranch %61
-         %69 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpSGreaterThan %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-         %80 = OpFunctionCall %void %func0_
-         %81 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_3
-         %82 = OpLoad %int %81
-               OpStore %a %82
-               OpBranch %77
-         %79 = OpLabel
-         %83 = OpFunctionCall %void %func0_
-               OpBranch %77
-         %77 = OpLabel
-               OpBranch %62
-         %62 = OpLabel
-               OpBranch %60
-         %61 = OpLabel
-         %84 = OpLoad %int %a
-               OpReturnValue %84
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %31
-         %86 = OpLabel
-        %a_1 = OpVariable %_ptr_Function_int Function %56
-          %i = OpVariable %_ptr_Function_int Function %56
-          %j = OpVariable %_ptr_Function_int Function %56
-         %90 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %91 = OpLoad %float %90
-         %92 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %93 = OpLoad %float %92
-         %94 = OpFOrdGreaterThan %bool %91 %93
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %97
-         %96 = OpLabel
-         %99 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-        %100 = OpLoad %float %99
-        %101 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %102 = OpLoad %float %101
-        %103 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %107 = OpLoad %float %106
-        %108 = OpCompositeConstruct %v4float %100 %102 %104 %107
-               OpStore %x_GLF_color %108
-               OpBranch %95
-         %97 = OpLabel
-        %110 = OpAccessChain %_ptr_Uniform_uint %x_16 %uint_0 %int_0
-        %111 = OpLoad %uint %110
-        %112 = OpExtInst %v4float %113 UnpackSnorm4x8 %111
-               OpStore %x_GLF_color %112
-               OpBranch %95
-         %95 = OpLabel
-        %114 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_2
-        %115 = OpLoad %int %114
-               OpStore %a_1 %115
-               OpStore %i %int_0
-               OpBranch %116
-        %116 = OpLabel
-               OpLoopMerge %117 %118 None
-               OpBranch %119
-        %119 = OpLabel
-        %120 = OpLoad %int %i
-        %122 = OpSLessThan %bool %120 %int_5
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %125
-        %124 = OpLabel
-               OpBranch %123
-        %125 = OpLabel
-               OpBranch %117
-        %123 = OpLabel
-               OpStore %j %int_0
-               OpBranch %126
-        %126 = OpLabel
-               OpLoopMerge %127 %128 None
-               OpBranch %129
-        %129 = OpLabel
-        %130 = OpLoad %int %j
-        %131 = OpSLessThan %bool %130 %int_2
-               OpSelectionMerge %132 None
-               OpBranchConditional %131 %133 %134
-        %133 = OpLabel
-               OpBranch %132
-        %134 = OpLabel
-               OpBranch %127
-        %132 = OpLabel
-        %135 = OpFunctionCall %int %func1_
-        %136 = OpLoad %int %a_1
-        %137 = OpIAdd %int %136 %135
-               OpStore %a_1 %137
-               OpBranch %128
-        %128 = OpLabel
-        %138 = OpLoad %int %j
-        %139 = OpIAdd %int %138 %int_1
-               OpStore %j %139
-               OpBranch %126
-        %127 = OpLabel
-               OpBranch %118
-        %118 = OpLabel
-        %140 = OpLoad %int %i
-        %141 = OpIAdd %int %140 %int_1
-               OpStore %i %141
-               OpBranch %116
-        %117 = OpLabel
-        %142 = OpLoad %int %a_1
-        %143 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %144 = OpLoad %int %143
-        %145 = OpIEqual %bool %142 %144
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %146
-        %147 = OpLabel
-        %148 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-        %149 = OpLoad %float %148
-        %151 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_2
-        %152 = OpLoad %float %151
-        %153 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_2
-        %154 = OpFSub %float %152 %149
-               OpStore %153 %154
-               OpBranch %146
-        %146 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %155
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %159 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %160 = OpFunctionCall %void %main_1
-        %161 = OpLoad %v4float %x_GLF_color
-        %162 = OpCompositeConstruct %main_out %161
-               OpReturnValue %162
-               OpFunctionEnd
-       %main = OpFunction %void None %31
-        %164 = OpLabel
-        %166 = OpLoad %v4float %gl_FragCoord_param_1
-        %165 = OpFunctionCall %main_out %main_inner %166
-        %167 = OpCompositeExtract %v4float %165 0
-               OpStore %x_GLF_color_1_1 %167
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 771813e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-output-undefined-in-unexecuted-branch/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,144 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[block]]
-struct buf3 {
-  three : i32;
-};
-
-type Arr_2 = [[stride(16)]] array<u32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_uint_values : Arr_2;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(2)]] var<uniform> x_12 : buf2;
-
-[[group(0), binding(3)]] var<uniform> x_14 : buf3;
-
-[[group(0), binding(0)]] var<uniform> x_16 : buf0;
-
-fn func0_() {
-  var tmp : vec4<f32>;
-  let x_112 : f32 = gl_FragCoord.x;
-  let x_114 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_112 > x_114)) {
-    let x_118 : vec4<f32> = x_GLF_color;
-    tmp = x_118;
-  }
-  let x_119 : vec4<f32> = tmp;
-  x_GLF_color = x_119;
-  return;
-}
-
-fn func1_() -> i32 {
-  var a : i32;
-  let x_122 : i32 = x_12.x_GLF_uniform_int_values[1];
-  a = x_122;
-  loop {
-    let x_127 : i32 = a;
-    let x_129 : i32 = x_12.x_GLF_uniform_int_values[3];
-    if ((x_127 < x_129)) {
-    } else {
-      break;
-    }
-    let x_133 : i32 = x_14.three;
-    let x_135 : i32 = x_12.x_GLF_uniform_int_values[1];
-    if ((x_133 > x_135)) {
-      func0_();
-      let x_142 : i32 = x_12.x_GLF_uniform_int_values[3];
-      a = x_142;
-    } else {
-      func0_();
-    }
-  }
-  let x_144 : i32 = a;
-  return x_144;
-}
-
-fn main_1() {
-  var a_1 : i32;
-  var i : i32;
-  var j : i32;
-  let x_56 : f32 = gl_FragCoord.x;
-  let x_58 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_56 > x_58)) {
-    let x_64 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_66 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_68 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_70 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_GLF_color = vec4<f32>(x_64, x_66, x_68, x_70);
-  } else {
-    let x_73 : u32 = x_16.x_GLF_uniform_uint_values[0];
-    x_GLF_color = unpack4x8snorm(x_73);
-  }
-  let x_76 : i32 = x_12.x_GLF_uniform_int_values[2];
-  a_1 = x_76;
-  i = 0;
-  loop {
-    let x_81 : i32 = i;
-    if ((x_81 < 5)) {
-    } else {
-      break;
-    }
-    j = 0;
-    loop {
-      let x_88 : i32 = j;
-      if ((x_88 < 2)) {
-      } else {
-        break;
-      }
-      let x_91 : i32 = func1_();
-      let x_92 : i32 = a_1;
-      a_1 = (x_92 + x_91);
-
-      continuing {
-        let x_94 : i32 = j;
-        j = (x_94 + 1);
-      }
-    }
-
-    continuing {
-      let x_96 : i32 = i;
-      i = (x_96 + 1);
-    }
-  }
-  let x_98 : i32 = a_1;
-  let x_100 : i32 = x_12.x_GLF_uniform_int_values[0];
-  if ((x_98 == x_100)) {
-    let x_105 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_107 : f32 = x_GLF_color.z;
-    x_GLF_color.z = (x_107 - x_105);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.hlsl
deleted file mode 100644
index 5e80c3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_33 = gl_FragCoord.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_35 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_33 > x_35)) {
-    const float x_40 = asfloat(x_6[2].x);
-    x_GLF_color = float4(x_40, x_40, x_40, x_40);
-    const float x_43 = gl_FragCoord.y;
-    if ((x_43 > x_35)) {
-      const float x_48 = asfloat(x_6[4].x);
-      x_GLF_color = float4(x_48, x_48, x_48, x_48);
-    }
-    const float x_51 = asfloat(x_6[3].x);
-    x_GLF_color = float4(x_51, x_51, x_51, x_51);
-  }
-  const float x_54 = asfloat(x_6[1].x);
-  x_GLF_color = float4(x_35, x_54, x_54, 10.0f);
-  x_GLF_color = mul(x_GLF_color, float4x4(float4(x_35, 0.0f, 0.0f, 0.0f), float4(0.0f, x_35, 0.0f, 0.0f), float4(0.0f, 0.0f, x_35, 0.0f), float4(0.0f, 0.0f, 0.0f, x_35)));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.msl
deleted file mode 100644
index 2846e5c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.msl
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_33 = (*(tint_symbol_3)).x;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_33 > x_35)) {
-    float const x_40 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    *(tint_symbol_4) = float4(x_40, x_40, x_40, x_40);
-    float const x_43 = (*(tint_symbol_3)).y;
-    if ((x_43 > x_35)) {
-      float const x_48 = x_6.x_GLF_uniform_float_values.arr[4].el;
-      *(tint_symbol_4) = float4(x_48, x_48, x_48, x_48);
-    }
-    float const x_51 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    *(tint_symbol_4) = float4(x_51, x_51, x_51, x_51);
-  }
-  float const x_54 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_4) = float4(x_35, x_54, x_54, 10.0f);
-  float4 const x_61 = *(tint_symbol_4);
-  *(tint_symbol_4) = (float4x4(float4(x_35, 0.0f, 0.0f, 0.0f), float4(0.0f, x_35, 0.0f, 0.0f), float4(0.0f, 0.0f, x_35, 0.0f), float4(0.0f, 0.0f, 0.0f, x_35)) * x_61);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.spvasm
deleted file mode 100644
index 23be372..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-       %buf0 = OpTypeStruct %_arr_float_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-   %float_10 = OpConstant %float 10
-%mat4v4float = OpTypeMatrix %v4float 4
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-         %66 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %23 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %24 = OpLoad %float %23
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %29 = OpLoad %float %28
-         %30 = OpFOrdGreaterThan %bool %24 %29
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %36 = OpLoad %float %35
-         %37 = OpCompositeConstruct %v4float %36 %36 %36 %36
-               OpStore %x_GLF_color %37
-         %39 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %40 = OpLoad %float %39
-         %41 = OpFOrdGreaterThan %bool %40 %29
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %46 = OpLoad %float %45
-         %47 = OpCompositeConstruct %v4float %46 %46 %46 %46
-               OpStore %x_GLF_color %47
-               OpBranch %42
-         %42 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %50 = OpLoad %float %49
-         %51 = OpCompositeConstruct %v4float %50 %50 %50 %50
-               OpStore %x_GLF_color %51
-               OpBranch %32
-         %32 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %54 = OpLoad %float %53
-         %56 = OpCompositeConstruct %v4float %29 %54 %54 %float_10
-               OpStore %x_GLF_color %56
-         %57 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %v4float %29 %float_0 %float_0 %float_0
-         %61 = OpCompositeConstruct %v4float %float_0 %29 %float_0 %float_0
-         %62 = OpCompositeConstruct %v4float %float_0 %float_0 %29 %float_0
-         %63 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %29
-         %64 = OpCompositeConstruct %mat4v4float %60 %61 %62 %63
-         %65 = OpMatrixTimesVector %v4float %64 %57
-               OpStore %x_GLF_color %65
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %66
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %70 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %75 = OpLabel
-         %77 = OpLoad %v4float %gl_FragCoord_param_1
-         %76 = OpFunctionCall %main_out %main_inner %77
-         %78 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.wgsl
deleted file mode 100644
index 4b6e9c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_33 : f32 = gl_FragCoord.x;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_33 > x_35)) {
-    let x_40 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_GLF_color = vec4<f32>(x_40, x_40, x_40, x_40);
-    let x_43 : f32 = gl_FragCoord.y;
-    if ((x_43 > x_35)) {
-      let x_48 : f32 = x_6.x_GLF_uniform_float_values[4];
-      x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
-    }
-    let x_51 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_GLF_color = vec4<f32>(x_51, x_51, x_51, x_51);
-  }
-  let x_54 : f32 = x_6.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_35, x_54, x_54, 10.0);
-  let x_61 : vec4<f32> = x_GLF_color;
-  x_GLF_color = (mat4x4<f32>(vec4<f32>(x_35, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_35, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_35, 0.0), vec4<f32>(0.0, 0.0, 0.0, x_35)) * x_61);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.hlsl
deleted file mode 100644
index 5e80c3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_33 = gl_FragCoord.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_35 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_33 > x_35)) {
-    const float x_40 = asfloat(x_6[2].x);
-    x_GLF_color = float4(x_40, x_40, x_40, x_40);
-    const float x_43 = gl_FragCoord.y;
-    if ((x_43 > x_35)) {
-      const float x_48 = asfloat(x_6[4].x);
-      x_GLF_color = float4(x_48, x_48, x_48, x_48);
-    }
-    const float x_51 = asfloat(x_6[3].x);
-    x_GLF_color = float4(x_51, x_51, x_51, x_51);
-  }
-  const float x_54 = asfloat(x_6[1].x);
-  x_GLF_color = float4(x_35, x_54, x_54, 10.0f);
-  x_GLF_color = mul(x_GLF_color, float4x4(float4(x_35, 0.0f, 0.0f, 0.0f), float4(0.0f, x_35, 0.0f, 0.0f), float4(0.0f, 0.0f, x_35, 0.0f), float4(0.0f, 0.0f, 0.0f, x_35)));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.msl
deleted file mode 100644
index 2846e5c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.msl
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_33 = (*(tint_symbol_3)).x;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_33 > x_35)) {
-    float const x_40 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    *(tint_symbol_4) = float4(x_40, x_40, x_40, x_40);
-    float const x_43 = (*(tint_symbol_3)).y;
-    if ((x_43 > x_35)) {
-      float const x_48 = x_6.x_GLF_uniform_float_values.arr[4].el;
-      *(tint_symbol_4) = float4(x_48, x_48, x_48, x_48);
-    }
-    float const x_51 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    *(tint_symbol_4) = float4(x_51, x_51, x_51, x_51);
-  }
-  float const x_54 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_4) = float4(x_35, x_54, x_54, 10.0f);
-  float4 const x_61 = *(tint_symbol_4);
-  *(tint_symbol_4) = (float4x4(float4(x_35, 0.0f, 0.0f, 0.0f), float4(0.0f, x_35, 0.0f, 0.0f), float4(0.0f, 0.0f, x_35, 0.0f), float4(0.0f, 0.0f, 0.0f, x_35)) * x_61);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.spvasm
deleted file mode 100644
index 23be372..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-       %buf0 = OpTypeStruct %_arr_float_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-   %float_10 = OpConstant %float 10
-%mat4v4float = OpTypeMatrix %v4float 4
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-         %66 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %23 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %24 = OpLoad %float %23
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %29 = OpLoad %float %28
-         %30 = OpFOrdGreaterThan %bool %24 %29
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %36 = OpLoad %float %35
-         %37 = OpCompositeConstruct %v4float %36 %36 %36 %36
-               OpStore %x_GLF_color %37
-         %39 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %40 = OpLoad %float %39
-         %41 = OpFOrdGreaterThan %bool %40 %29
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %46 = OpLoad %float %45
-         %47 = OpCompositeConstruct %v4float %46 %46 %46 %46
-               OpStore %x_GLF_color %47
-               OpBranch %42
-         %42 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %50 = OpLoad %float %49
-         %51 = OpCompositeConstruct %v4float %50 %50 %50 %50
-               OpStore %x_GLF_color %51
-               OpBranch %32
-         %32 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %54 = OpLoad %float %53
-         %56 = OpCompositeConstruct %v4float %29 %54 %54 %float_10
-               OpStore %x_GLF_color %56
-         %57 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %v4float %29 %float_0 %float_0 %float_0
-         %61 = OpCompositeConstruct %v4float %float_0 %29 %float_0 %float_0
-         %62 = OpCompositeConstruct %v4float %float_0 %float_0 %29 %float_0
-         %63 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %29
-         %64 = OpCompositeConstruct %mat4v4float %60 %61 %62 %63
-         %65 = OpMatrixTimesVector %v4float %64 %57
-               OpStore %x_GLF_color %65
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %66
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %70 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %75 = OpLabel
-         %77 = OpLoad %v4float %gl_FragCoord_param_1
-         %76 = OpFunctionCall %main_out %main_inner %77
-         %78 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.wgsl
deleted file mode 100644
index 4b6e9c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-color-overwrite-identity-matrix-multiply/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_33 : f32 = gl_FragCoord.x;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_33 > x_35)) {
-    let x_40 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_GLF_color = vec4<f32>(x_40, x_40, x_40, x_40);
-    let x_43 : f32 = gl_FragCoord.y;
-    if ((x_43 > x_35)) {
-      let x_48 : f32 = x_6.x_GLF_uniform_float_values[4];
-      x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
-    }
-    let x_51 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_GLF_color = vec4<f32>(x_51, x_51, x_51, x_51);
-  }
-  let x_54 : f32 = x_6.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_35, x_54, x_54, 10.0);
-  let x_61 : vec4<f32> = x_GLF_color;
-  x_GLF_color = (mat4x4<f32>(vec4<f32>(x_35, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_35, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_35, 0.0), vec4<f32>(0.0, 0.0, 0.0, x_35)) * x_61);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4038aef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  bool b = false;
-  b = true;
-  const float x_38 = asfloat(x_6[0].x);
-  const float x_40 = asfloat(x_6[0].y);
-  if ((x_38 > x_40)) {
-    const float x_45 = asfloat(x_6[0].x);
-    const float x_47 = asfloat(x_6[0].y);
-    if ((x_45 < x_47)) {
-      b = false;
-    }
-  }
-  if (b) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_10 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-    const int x_11 = asint(x_8[1].x);
-    const int x_12 = asint(x_8[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_13 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  } else {
-    const int x_14 = asint(x_8[1].x);
-    const float x_65 = float(x_14);
-    x_GLF_color = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6f4e504..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  bool b = false;
-  b = true;
-  float const x_38 = x_6.v1.x;
-  float const x_40 = x_6.v1.y;
-  if ((x_38 > x_40)) {
-    float const x_45 = x_6.v1.x;
-    float const x_47 = x_6.v1.y;
-    if ((x_45 < x_47)) {
-      b = false;
-    }
-  }
-  bool const x_51 = b;
-  if (x_51) {
-    int const x_10 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_11 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_12 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_13 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  } else {
-    int const x_14 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_65 = float(x_14);
-    *(tint_symbol_3) = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0242cbb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,137 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 81
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-       %true = OpConstantTrue %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %70 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %b = OpVariable %_ptr_Function_bool Function %26
-               OpStore %b %true
-         %30 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %31 = OpLoad %float %30
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %34 = OpLoad %float %33
-         %35 = OpFOrdGreaterThan %bool %31 %34
-               OpSelectionMerge %36 None
-               OpBranchConditional %35 %37 %36
-         %37 = OpLabel
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %41 = OpLoad %float %40
-         %42 = OpFOrdLessThan %bool %39 %41
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpStore %b %false
-               OpBranch %43
-         %43 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-         %46 = OpLoad %bool %b
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %55 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %60 = OpLoad %int %59
-         %61 = OpConvertSToF %float %53
-         %62 = OpConvertSToF %float %56
-         %63 = OpConvertSToF %float %58
-         %64 = OpConvertSToF %float %60
-         %65 = OpCompositeConstruct %v4float %61 %62 %63 %64
-               OpStore %x_GLF_color %65
-               OpBranch %47
-         %49 = OpLabel
-         %66 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %67
-         %69 = OpCompositeConstruct %v4float %68 %68 %68 %68
-               OpStore %x_GLF_color %69
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %70
-         %73 = OpLabel
-         %74 = OpFunctionCall %void %main_1
-         %75 = OpLoad %v4float %x_GLF_color
-         %76 = OpCompositeConstruct %main_out %75
-               OpReturnValue %76
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %78 = OpLabel
-         %79 = OpFunctionCall %main_out %main_inner
-         %80 = OpCompositeExtract %v4float %79 0
-               OpStore %x_GLF_color_1_1 %80
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5cf4af4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var b : bool;
-  b = true;
-  let x_38 : f32 = x_6.v1.x;
-  let x_40 : f32 = x_6.v1.y;
-  if ((x_38 > x_40)) {
-    let x_45 : f32 = x_6.v1.x;
-    let x_47 : f32 = x_6.v1.y;
-    if ((x_45 < x_47)) {
-      b = false;
-    }
-  }
-  let x_51 : bool = b;
-  if (x_51) {
-    let x_10 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_11 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_12 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_13 : i32 = x_8.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_10), f32(x_11), f32(x_12), f32(x_13));
-  } else {
-    let x_14 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_65 : f32 = f32(x_14);
-    x_GLF_color = vec4<f32>(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4038aef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  bool b = false;
-  b = true;
-  const float x_38 = asfloat(x_6[0].x);
-  const float x_40 = asfloat(x_6[0].y);
-  if ((x_38 > x_40)) {
-    const float x_45 = asfloat(x_6[0].x);
-    const float x_47 = asfloat(x_6[0].y);
-    if ((x_45 < x_47)) {
-      b = false;
-    }
-  }
-  if (b) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_10 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-    const int x_11 = asint(x_8[1].x);
-    const int x_12 = asint(x_8[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_13 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  } else {
-    const int x_14 = asint(x_8[1].x);
-    const float x_65 = float(x_14);
-    x_GLF_color = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6f4e504..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  bool b = false;
-  b = true;
-  float const x_38 = x_6.v1.x;
-  float const x_40 = x_6.v1.y;
-  if ((x_38 > x_40)) {
-    float const x_45 = x_6.v1.x;
-    float const x_47 = x_6.v1.y;
-    if ((x_45 < x_47)) {
-      b = false;
-    }
-  }
-  bool const x_51 = b;
-  if (x_51) {
-    int const x_10 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_11 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_12 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_13 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  } else {
-    int const x_14 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_65 = float(x_14);
-    *(tint_symbol_3) = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0242cbb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,137 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 81
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-       %true = OpConstantTrue %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %70 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %b = OpVariable %_ptr_Function_bool Function %26
-               OpStore %b %true
-         %30 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %31 = OpLoad %float %30
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %34 = OpLoad %float %33
-         %35 = OpFOrdGreaterThan %bool %31 %34
-               OpSelectionMerge %36 None
-               OpBranchConditional %35 %37 %36
-         %37 = OpLabel
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %41 = OpLoad %float %40
-         %42 = OpFOrdLessThan %bool %39 %41
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpStore %b %false
-               OpBranch %43
-         %43 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-         %46 = OpLoad %bool %b
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %55 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %60 = OpLoad %int %59
-         %61 = OpConvertSToF %float %53
-         %62 = OpConvertSToF %float %56
-         %63 = OpConvertSToF %float %58
-         %64 = OpConvertSToF %float %60
-         %65 = OpCompositeConstruct %v4float %61 %62 %63 %64
-               OpStore %x_GLF_color %65
-               OpBranch %47
-         %49 = OpLabel
-         %66 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %67
-         %69 = OpCompositeConstruct %v4float %68 %68 %68 %68
-               OpStore %x_GLF_color %69
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %70
-         %73 = OpLabel
-         %74 = OpFunctionCall %void %main_1
-         %75 = OpLoad %v4float %x_GLF_color
-         %76 = OpCompositeConstruct %main_out %75
-               OpReturnValue %76
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %78 = OpLabel
-         %79 = OpFunctionCall %main_out %main_inner
-         %80 = OpCompositeExtract %v4float %79 0
-               OpStore %x_GLF_color_1_1 %80
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5cf4af4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-combine-and-or-xor-gt-lt/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var b : bool;
-  b = true;
-  let x_38 : f32 = x_6.v1.x;
-  let x_40 : f32 = x_6.v1.y;
-  if ((x_38 > x_40)) {
-    let x_45 : f32 = x_6.v1.x;
-    let x_47 : f32 = x_6.v1.y;
-    if ((x_45 < x_47)) {
-      b = false;
-    }
-  }
-  let x_51 : bool = b;
-  if (x_51) {
-    let x_10 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_11 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_12 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_13 : i32 = x_8.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_10), f32(x_11), f32(x_12), f32(x_13));
-  } else {
-    let x_14 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_65 : f32 = f32(x_14);
-    x_GLF_color = vec4<f32>(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 55d825c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_26 = asint(x_6[1].x);
-  a = x_26;
-  const int x_28 = asint(x_6[1].x);
-  i = x_28;
-  while (true) {
-    const int x_33 = i;
-    const int x_35 = asint(x_6[2].x);
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    if ((~(i) != 0)) {
-      a = (a + 1);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_47 = a;
-  const int x_49 = asint(x_6[2].x);
-  if ((x_47 == x_49)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const int x_58 = asint(x_6[1].x);
-    const int x_61 = asint(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_64 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    const int x_68 = asint(x_6[1].x);
-    const float x_69 = float(x_68);
-    x_GLF_color = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.msl
deleted file mode 100644
index d38b081..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_26;
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_28;
-  while (true) {
-    int const x_33 = i;
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    int const x_38 = i;
-    if ((~(x_38) != 0)) {
-      int const x_43 = a;
-      a = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-    }
-    {
-      int const x_45 = i;
-      i = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    }
-  }
-  int const x_47 = a;
-  int const x_49 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_47 == x_49)) {
-    int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    int const x_68 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_69 = float(x_68);
-    *(tint_symbol_3) = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8a2add6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,145 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %29 = OpLoad %int %28
-               OpStore %i %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %37 = OpLoad %int %36
-         %38 = OpSLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %31
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %44 = OpNot %int %43
-         %46 = OpINotEqual %bool %44 %int_0
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %int %a
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %a %50
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %51 = OpLoad %int %i
-         %52 = OpIAdd %int %51 %int_1
-               OpStore %i %52
-               OpBranch %30
-         %31 = OpLabel
-         %53 = OpLoad %int %a
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %53 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpBranch %57
-         %59 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0900dc7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,62 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_26;
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_28;
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    let x_38 : i32 = i;
-    if ((~(x_38) != 0)) {
-      let x_43 : i32 = a;
-      a = (x_43 + 1);
-    }
-
-    continuing {
-      let x_45 : i32 = i;
-      i = (x_45 + 1);
-    }
-  }
-  let x_47 : i32 = a;
-  let x_49 : i32 = x_6.x_GLF_uniform_int_values[2];
-  if ((x_47 == x_49)) {
-    let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  } else {
-    let x_68 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_69 : f32 = f32(x_68);
-    x_GLF_color = vec4<f32>(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 55d825c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_26 = asint(x_6[1].x);
-  a = x_26;
-  const int x_28 = asint(x_6[1].x);
-  i = x_28;
-  while (true) {
-    const int x_33 = i;
-    const int x_35 = asint(x_6[2].x);
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    if ((~(i) != 0)) {
-      a = (a + 1);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_47 = a;
-  const int x_49 = asint(x_6[2].x);
-  if ((x_47 == x_49)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const int x_58 = asint(x_6[1].x);
-    const int x_61 = asint(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_64 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    const int x_68 = asint(x_6[1].x);
-    const float x_69 = float(x_68);
-    x_GLF_color = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.msl
deleted file mode 100644
index d38b081..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_26;
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_28;
-  while (true) {
-    int const x_33 = i;
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    int const x_38 = i;
-    if ((~(x_38) != 0)) {
-      int const x_43 = a;
-      a = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-    }
-    {
-      int const x_45 = i;
-      i = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    }
-  }
-  int const x_47 = a;
-  int const x_49 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_47 == x_49)) {
-    int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    int const x_68 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_69 = float(x_68);
-    *(tint_symbol_3) = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8a2add6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,145 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %29 = OpLoad %int %28
-               OpStore %i %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %37 = OpLoad %int %36
-         %38 = OpSLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %31
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %44 = OpNot %int %43
-         %46 = OpINotEqual %bool %44 %int_0
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %int %a
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %a %50
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %51 = OpLoad %int %i
-         %52 = OpIAdd %int %51 %int_1
-               OpStore %i %52
-               OpBranch %30
-         %31 = OpLabel
-         %53 = OpLoad %int %a
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %53 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpBranch %57
-         %59 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 0900dc7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-condition-loop-index-bitwise-not/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,62 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_26;
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_28;
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    let x_38 : i32 = i;
-    if ((~(x_38) != 0)) {
-      let x_43 : i32 = a;
-      a = (x_43 + 1);
-    }
-
-    continuing {
-      let x_45 : i32 = i;
-      i = (x_45 + 1);
-    }
-  }
-  let x_47 : i32 = a;
-  let x_49 : i32 = x_6.x_GLF_uniform_int_values[2];
-  if ((x_47 == x_49)) {
-    let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  } else {
-    let x_68 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_69 : f32 = f32(x_68);
-    x_GLF_color = vec4<f32>(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 873f73d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b2, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[1];
-};
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 1;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_41 = asint(x_6[1].x);
-  const int x_44 = asint(x_6[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_38), float(x_41), float(x_44), float(x_47));
-  const int x_51 = asint(x_6[1].x);
-  i = x_51;
-  while (true) {
-    const int x_56 = i;
-    const int x_58 = asint(x_6[2].x);
-    if ((x_56 < x_58)) {
-    } else {
-      break;
-    }
-    const int x_61 = a;
-    a = (x_61 + 1);
-    if ((x_61 > 3)) {
-      break;
-    }
-    const float x_67 = asfloat(x_9[0].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_69 = asfloat(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_67 > x_69)) {
-      discard;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index d72415c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,83 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf2& x_9, constant buf1& x_11, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 1;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_41 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_44 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_38), float(x_41), float(x_44), float(x_47));
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_51;
-  while (true) {
-    int const x_56 = i;
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_56 < x_58)) {
-    } else {
-      break;
-    }
-    int const x_61 = a;
-    a = as_type<int>((as_type<uint>(x_61) + as_type<uint>(1)));
-    if ((x_61 > 3)) {
-      break;
-    }
-    float const x_67 = x_9.injectionSwitch.x;
-    float const x_69 = x_11.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_67 > x_69)) {
-      discard_fragment();
-    }
-    {
-      int const x_73 = i;
-      i = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf2& x_9, constant buf1& x_11, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, x_11, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf2& x_9 [[buffer(1)]], constant buf1& x_11 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, x_11, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ca6049c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,163 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 2
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_9 = OpVariable %_ptr_Uniform_buf2 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %24 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %24
-         %27 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %30
-          %i = OpVariable %_ptr_Function_int Function %30
-               OpStore %a %int_1
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpConvertSToF %float %37
-         %45 = OpConvertSToF %float %39
-         %46 = OpConvertSToF %float %41
-         %47 = OpConvertSToF %float %43
-         %48 = OpCompositeConstruct %v4float %44 %45 %46 %47
-               OpStore %x_GLF_color %48
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-               OpStore %i %50
-               OpBranch %51
-         %51 = OpLabel
-               OpLoopMerge %52 %53 None
-               OpBranch %54
-         %54 = OpLabel
-         %55 = OpLoad %int %i
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %58 = OpLoad %int %57
-         %59 = OpSLessThan %bool %55 %58
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %52
-         %61 = OpLabel
-         %64 = OpLoad %int %a
-         %65 = OpIAdd %int %64 %int_1
-               OpStore %a %65
-         %67 = OpSGreaterThan %bool %64 %int_3
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpBranch %52
-         %68 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %74 = OpLoad %float %73
-         %75 = OpFOrdGreaterThan %bool %72 %74
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-               OpKill
-         %76 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-         %78 = OpLoad %int %i
-         %79 = OpIAdd %int %78 %int_1
-               OpStore %i %79
-               OpBranch %51
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %24
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index aa0d3ab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  injectionSwitch : vec2<f32>;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_9 : buf2;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 1;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_41 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_44 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_38), f32(x_41), f32(x_44), f32(x_47));
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_51;
-  loop {
-    let x_56 : i32 = i;
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_56 < x_58)) {
-    } else {
-      break;
-    }
-    let x_61 : i32 = a;
-    a = (x_61 + 1);
-    if ((x_61 > 3)) {
-      break;
-    }
-    let x_67 : f32 = x_9.injectionSwitch.x;
-    let x_69 : f32 = x_11.x_GLF_uniform_float_values[0];
-    if ((x_67 > x_69)) {
-      discard;
-    }
-
-    continuing {
-      let x_73 : i32 = i;
-      i = (x_73 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 873f73d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b2, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[1];
-};
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 1;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_41 = asint(x_6[1].x);
-  const int x_44 = asint(x_6[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_38), float(x_41), float(x_44), float(x_47));
-  const int x_51 = asint(x_6[1].x);
-  i = x_51;
-  while (true) {
-    const int x_56 = i;
-    const int x_58 = asint(x_6[2].x);
-    if ((x_56 < x_58)) {
-    } else {
-      break;
-    }
-    const int x_61 = a;
-    a = (x_61 + 1);
-    if ((x_61 > 3)) {
-      break;
-    }
-    const float x_67 = asfloat(x_9[0].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_69 = asfloat(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_67 > x_69)) {
-      discard;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index d72415c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,83 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf2& x_9, constant buf1& x_11, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 1;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_41 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_44 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_38), float(x_41), float(x_44), float(x_47));
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_51;
-  while (true) {
-    int const x_56 = i;
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_56 < x_58)) {
-    } else {
-      break;
-    }
-    int const x_61 = a;
-    a = as_type<int>((as_type<uint>(x_61) + as_type<uint>(1)));
-    if ((x_61 > 3)) {
-      break;
-    }
-    float const x_67 = x_9.injectionSwitch.x;
-    float const x_69 = x_11.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_67 > x_69)) {
-      discard_fragment();
-    }
-    {
-      int const x_73 = i;
-      i = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf2& x_9, constant buf1& x_11, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, x_11, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf2& x_9 [[buffer(1)]], constant buf1& x_11 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, x_11, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ca6049c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,163 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 2
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_9 = OpVariable %_ptr_Uniform_buf2 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %24 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %24
-         %27 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %30
-          %i = OpVariable %_ptr_Function_int Function %30
-               OpStore %a %int_1
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpConvertSToF %float %37
-         %45 = OpConvertSToF %float %39
-         %46 = OpConvertSToF %float %41
-         %47 = OpConvertSToF %float %43
-         %48 = OpCompositeConstruct %v4float %44 %45 %46 %47
-               OpStore %x_GLF_color %48
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-               OpStore %i %50
-               OpBranch %51
-         %51 = OpLabel
-               OpLoopMerge %52 %53 None
-               OpBranch %54
-         %54 = OpLabel
-         %55 = OpLoad %int %i
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %58 = OpLoad %int %57
-         %59 = OpSLessThan %bool %55 %58
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %52
-         %61 = OpLabel
-         %64 = OpLoad %int %a
-         %65 = OpIAdd %int %64 %int_1
-               OpStore %a %65
-         %67 = OpSGreaterThan %bool %64 %int_3
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpBranch %52
-         %68 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %74 = OpLoad %float %73
-         %75 = OpFOrdGreaterThan %bool %72 %74
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-               OpKill
-         %76 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-         %78 = OpLoad %int %i
-         %79 = OpIAdd %int %78 %int_1
-               OpStore %i %79
-               OpBranch %51
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %24
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index aa0d3ab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-conditional-discard-inside-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  injectionSwitch : vec2<f32>;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_9 : buf2;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 1;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_41 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_44 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_38), f32(x_41), f32(x_44), f32(x_47));
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_51;
-  loop {
-    let x_56 : i32 = i;
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_56 < x_58)) {
-    } else {
-      break;
-    }
-    let x_61 : i32 = a;
-    a = (x_61 + 1);
-    if ((x_61 > 3)) {
-      break;
-    }
-    let x_67 : f32 = x_9.injectionSwitch.x;
-    let x_69 : f32 = x_11.x_GLF_uniform_float_values[0];
-    if ((x_67 > x_69)) {
-      discard;
-    }
-
-    continuing {
-      let x_73 : i32 = i;
-      i = (x_73 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0e7ea3c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_32 = asfloat(x_6[0].x);
-  v = ceil(float4(424.113006592f, x_32, 1.299999952f, 19.620000839f));
-  if (all((v == float4(425.0f, 1.0f, 2.0f, 20.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.msl
deleted file mode 100644
index a11c17f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float quarter;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float const x_32 = x_6.quarter;
-  v = ceil(float4(424.113006592f, x_32, 1.299999952f, 19.620000839f));
-  float4 const x_35 = v;
-  if (all((x_35 == float4(425.0f, 1.0f, 2.0f, 20.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 65d9b95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-         %23 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "quarter"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_424_113007 = OpConstant %float 424.113007
-%float_1_29999995 = OpConstant %float 1.29999995
-%float_19_6200008 = OpConstant %float 19.6200008
-       %bool = OpTypeBool
-  %float_425 = OpConstant %float 425
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-   %float_20 = OpConstant %float 20
-         %35 = OpConstantComposite %v4float %float_425 %float_1 %float_2 %float_20
-     %v4bool = OpTypeVector %bool 4
-    %float_0 = OpConstant %float 0
-         %42 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %43 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %44 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %20 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %21 = OpLoad %float %20
-         %27 = OpCompositeConstruct %v4float %float_424_113007 %21 %float_1_29999995 %float_19_6200008
-         %22 = OpExtInst %v4float %23 Ceil %27
-               OpStore %v %22
-         %28 = OpLoad %v4float %v
-         %36 = OpFOrdEqual %v4bool %28 %35
-         %29 = OpAll %bool %36
-               OpSelectionMerge %38 None
-               OpBranchConditional %29 %39 %40
-         %39 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %38
-         %40 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %v4float %x_GLF_color
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %52 = OpLabel
-         %53 = OpFunctionCall %main_out %main_inner
-         %54 = OpCompositeExtract %v4float %53 0
-               OpStore %x_GLF_color_1_1 %54
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index cb4aa38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct buf0 {
-  quarter : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_32 : f32 = x_6.quarter;
-  v = ceil(vec4<f32>(424.113006592, x_32, 1.299999952, 19.620000839));
-  let x_35 : vec4<f32> = v;
-  if (all((x_35 == vec4<f32>(425.0, 1.0, 2.0, 20.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0e7ea3c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_32 = asfloat(x_6[0].x);
-  v = ceil(float4(424.113006592f, x_32, 1.299999952f, 19.620000839f));
-  if (all((v == float4(425.0f, 1.0f, 2.0f, 20.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.msl
deleted file mode 100644
index a11c17f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float quarter;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float const x_32 = x_6.quarter;
-  v = ceil(float4(424.113006592f, x_32, 1.299999952f, 19.620000839f));
-  float4 const x_35 = v;
-  if (all((x_35 == float4(425.0f, 1.0f, 2.0f, 20.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 65d9b95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-         %23 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "quarter"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_424_113007 = OpConstant %float 424.113007
-%float_1_29999995 = OpConstant %float 1.29999995
-%float_19_6200008 = OpConstant %float 19.6200008
-       %bool = OpTypeBool
-  %float_425 = OpConstant %float 425
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-   %float_20 = OpConstant %float 20
-         %35 = OpConstantComposite %v4float %float_425 %float_1 %float_2 %float_20
-     %v4bool = OpTypeVector %bool 4
-    %float_0 = OpConstant %float 0
-         %42 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %43 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %44 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %20 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %21 = OpLoad %float %20
-         %27 = OpCompositeConstruct %v4float %float_424_113007 %21 %float_1_29999995 %float_19_6200008
-         %22 = OpExtInst %v4float %23 Ceil %27
-               OpStore %v %22
-         %28 = OpLoad %v4float %v
-         %36 = OpFOrdEqual %v4bool %28 %35
-         %29 = OpAll %bool %36
-               OpSelectionMerge %38 None
-               OpBranchConditional %29 %39 %40
-         %39 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %38
-         %40 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %v4float %x_GLF_color
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %52 = OpLabel
-         %53 = OpFunctionCall %main_out %main_inner
-         %54 = OpCompositeExtract %v4float %53 0
-               OpStore %x_GLF_color_1_1 %54
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index cb4aa38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-ceil-vec4/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct buf0 {
-  quarter : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_32 : f32 = x_6.quarter;
-  v = ceil(vec4<f32>(424.113006592, x_32, 1.299999952, 19.620000839));
-  let x_35 : vec4<f32> = v;
-  if (all((x_35 == vec4<f32>(425.0, 1.0, 2.0, 20.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ddb1d03..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int j = 0;
-  i = 0;
-  j = 1;
-  while (true) {
-    if ((i < clamp(j, 5, 9))) {
-    } else {
-      break;
-    }
-    i = (i + 1);
-    j = (j + 1);
-  }
-  if (((i == 9) & (j == 10))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.msl
deleted file mode 100644
index 35277c7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  int j = 0;
-  i = 0;
-  j = 1;
-  while (true) {
-    int const x_28 = i;
-    int const x_29 = j;
-    if ((x_28 < clamp(x_29, 5, 9))) {
-    } else {
-      break;
-    }
-    int const x_33 = i;
-    i = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
-    int const x_35 = j;
-    j = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-  }
-  int const x_37 = i;
-  int const x_39 = j;
-  if (((x_37 == 9) & (x_39 == 10))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8d6489a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-         %26 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-      %int_9 = OpConstant %int 9
-       %bool = OpTypeBool
-     %int_10 = OpConstant %int 10
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %49 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %50 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %51 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-          %j = OpVariable %_ptr_Function_int Function %15
-               OpStore %i %int_0
-               OpStore %j %int_1
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %23 = OpLoad %int %i
-         %24 = OpLoad %int %j
-         %25 = OpExtInst %int %26 SClamp %24 %int_5 %int_9
-         %29 = OpSLessThan %bool %23 %25
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %20
-         %31 = OpLabel
-         %34 = OpLoad %int %i
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %i %35
-         %36 = OpLoad %int %j
-         %37 = OpIAdd %int %36 %int_1
-               OpStore %j %37
-               OpBranch %21
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-         %38 = OpLoad %int %i
-         %39 = OpLoad %int %j
-         %40 = OpIEqual %bool %38 %int_9
-         %42 = OpIEqual %bool %39 %int_10
-         %43 = OpLogicalAnd %bool %40 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-               OpStore %x_GLF_color %49
-               OpBranch %44
-         %46 = OpLabel
-               OpStore %x_GLF_color %50
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %51
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %v4float %x_GLF_color
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %59 = OpLabel
-         %60 = OpFunctionCall %main_out %main_inner
-         %61 = OpCompositeExtract %v4float %60 0
-               OpStore %x_GLF_color_1_1 %61
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 25c0dac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var j : i32;
-  i = 0;
-  j = 1;
-  loop {
-    let x_28 : i32 = i;
-    let x_29 : i32 = j;
-    if ((x_28 < clamp(x_29, 5, 9))) {
-    } else {
-      break;
-    }
-    let x_33 : i32 = i;
-    i = (x_33 + 1);
-    let x_35 : i32 = j;
-    j = (x_35 + 1);
-  }
-  let x_37 : i32 = i;
-  let x_39 : i32 = j;
-  if (((x_37 == 9) & (x_39 == 10))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 272d437..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int j = 0;
-  i = 0;
-  j = 1;
-  while (true) {
-    if ((i < clamp(j, 5, 9))) {
-    } else {
-      break;
-    }
-    i = (i + 1);
-    j = (j + 1);
-  }
-  bool tint_tmp = (i == 9);
-  if (tint_tmp) {
-    tint_tmp = (j == 10);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.msl
deleted file mode 100644
index c0a47ab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  int j = 0;
-  i = 0;
-  j = 1;
-  while (true) {
-    int const x_28 = i;
-    int const x_29 = j;
-    if ((x_28 < clamp(x_29, 5, 9))) {
-    } else {
-      break;
-    }
-    int const x_33 = i;
-    i = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
-    int const x_35 = j;
-    j = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-  }
-  int const x_37 = i;
-  int const x_39 = j;
-  if (((x_37 == 9) && (x_39 == 10))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index cafe27c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-         %26 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-      %int_9 = OpConstant %int 9
-       %bool = OpTypeBool
-     %int_10 = OpConstant %int 10
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %51 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %52 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-          %j = OpVariable %_ptr_Function_int Function %15
-               OpStore %i %int_0
-               OpStore %j %int_1
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %23 = OpLoad %int %i
-         %24 = OpLoad %int %j
-         %25 = OpExtInst %int %26 SClamp %24 %int_5 %int_9
-         %29 = OpSLessThan %bool %23 %25
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %20
-         %31 = OpLabel
-         %34 = OpLoad %int %i
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %i %35
-         %36 = OpLoad %int %j
-         %37 = OpIAdd %int %36 %int_1
-               OpStore %j %37
-               OpBranch %21
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-         %38 = OpLoad %int %i
-         %39 = OpLoad %int %j
-         %40 = OpIEqual %bool %38 %int_9
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-         %44 = OpIEqual %bool %39 %int_10
-               OpBranch %41
-         %41 = OpLabel
-         %45 = OpPhi %bool %40 %20 %44 %42
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %46
-         %48 = OpLabel
-               OpStore %x_GLF_color %52
-               OpBranch %46
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 367bf40..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-inside-while/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var j : i32;
-  i = 0;
-  j = 1;
-  loop {
-    let x_28 : i32 = i;
-    let x_29 : i32 = j;
-    if ((x_28 < clamp(x_29, 5, 9))) {
-    } else {
-      break;
-    }
-    let x_33 : i32 = i;
-    i = (x_33 + 1);
-    let x_35 : i32 = j;
-    j = (x_35 + 1);
-  }
-  let x_37 : i32 = i;
-  let x_39 : i32 = j;
-  if (((x_37 == 9) && (x_39 == 10))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d2b12a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_25 = asfloat(x_5[0].x);
-  const float x_28 = asfloat(x_5[0].x);
-  if (any((float4(clamp(2.0f, x_25, 1.0f), clamp(-1.0f, 0.0f, x_28), 0.0f, 1.0f) != float4(1.0f, 0.0f, 0.0f, 1.0f)))) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.msl
deleted file mode 100644
index dea3c08..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_25 = x_5.zero;
-  float const x_28 = x_5.zero;
-  if (any((float4(clamp(2.0f, x_25, 1.0f), clamp(-1.0f, 0.0f, x_28), 0.0f, 1.0f) != float4(1.0f, 0.0f, 0.0f, 1.0f)))) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b4e1fd1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-    %float_2 = OpConstant %float 2
-    %float_1 = OpConstant %float 1
-   %float_n1 = OpConstant %float -1
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-     %v4bool = OpTypeVector %bool 4
-         %38 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %39 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %19 = OpLoad %float %18
-         %20 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %21 = OpLoad %float %20
-         %24 = OpExtInst %float %25 NClamp %float_2 %19 %float_1
-         %28 = OpExtInst %float %25 NClamp %float_n1 %float_0 %21
-         %31 = OpCompositeConstruct %v4float %24 %28 %float_0 %float_1
-         %33 = OpFOrdNotEqual %v4bool %31 %32
-         %22 = OpAny %bool %33
-               OpSelectionMerge %35 None
-               OpBranchConditional %22 %36 %37
-         %36 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %39
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %v4float %x_GLF_color
-         %45 = OpCompositeConstruct %main_out %44
-               OpReturnValue %45
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %47 = OpLabel
-         %48 = OpFunctionCall %main_out %main_inner
-         %49 = OpCompositeExtract %v4float %48 0
-               OpStore %x_GLF_color_1_1 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ad25a06..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,30 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_25 : f32 = x_5.zero;
-  let x_28 : f32 = x_5.zero;
-  if (any((vec4<f32>(clamp(2.0, x_25, 1.0), clamp(-1.0, 0.0, x_28), 0.0, 1.0) != vec4<f32>(1.0, 0.0, 0.0, 1.0)))) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d2b12a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_25 = asfloat(x_5[0].x);
-  const float x_28 = asfloat(x_5[0].x);
-  if (any((float4(clamp(2.0f, x_25, 1.0f), clamp(-1.0f, 0.0f, x_28), 0.0f, 1.0f) != float4(1.0f, 0.0f, 0.0f, 1.0f)))) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.msl
deleted file mode 100644
index dea3c08..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_25 = x_5.zero;
-  float const x_28 = x_5.zero;
-  if (any((float4(clamp(2.0f, x_25, 1.0f), clamp(-1.0f, 0.0f, x_28), 0.0f, 1.0f) != float4(1.0f, 0.0f, 0.0f, 1.0f)))) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b4e1fd1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-    %float_2 = OpConstant %float 2
-    %float_1 = OpConstant %float 1
-   %float_n1 = OpConstant %float -1
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-     %v4bool = OpTypeVector %bool 4
-         %38 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %39 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %19 = OpLoad %float %18
-         %20 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %21 = OpLoad %float %20
-         %24 = OpExtInst %float %25 NClamp %float_2 %19 %float_1
-         %28 = OpExtInst %float %25 NClamp %float_n1 %float_0 %21
-         %31 = OpCompositeConstruct %v4float %24 %28 %float_0 %float_1
-         %33 = OpFOrdNotEqual %v4bool %31 %32
-         %22 = OpAny %bool %33
-               OpSelectionMerge %35 None
-               OpBranchConditional %22 %36 %37
-         %36 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %39
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %v4float %x_GLF_color
-         %45 = OpCompositeConstruct %main_out %44
-               OpReturnValue %45
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %47 = OpLabel
-         %48 = OpFunctionCall %main_out %main_inner
-         %49 = OpCompositeExtract %v4float %48 0
-               OpStore %x_GLF_color_1_1 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ad25a06..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-min/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,30 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_25 : f32 = x_5.zero;
-  let x_28 : f32 = x_5.zero;
-  if (any((vec4<f32>(clamp(2.0, x_25, 1.0), clamp(-1.0, 0.0, x_28), 0.0, 1.0) != vec4<f32>(1.0, 0.0, 0.0, 1.0)))) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 95eb595..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  float f = 0.0f;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_23 = asfloat(x_6[0].x);
-  f = clamp(x_23, 1.0f, 1.0f);
-  const float x_25 = f;
-  const float x_27 = asfloat(x_6[0].x);
-  if ((x_25 > x_27)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3528b01..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float const x_23 = x_6.one;
-  f = clamp(x_23, 1.0f, 1.0f);
-  float const x_25 = f;
-  float const x_27 = x_6.one;
-  if ((x_25 > x_27)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    float const x_32 = f;
-    *(tint_symbol_3) = float4(x_32, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a993c19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,90 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-         %26 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-               OpStore %x_GLF_color %19
-         %23 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %24 = OpLoad %float %23
-         %25 = OpExtInst %float %26 NClamp %24 %float_1 %float_1
-               OpStore %f %25
-         %28 = OpLoad %float %f
-         %29 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %30 = OpLoad %float %29
-         %31 = OpFOrdGreaterThan %bool %28 %30
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %35
-         %34 = OpLabel
-               OpStore %x_GLF_color %19
-               OpBranch %33
-         %35 = OpLabel
-         %36 = OpLoad %float %f
-         %37 = OpCompositeConstruct %v4float %36 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %37
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5b41038..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var f : f32;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_23 : f32 = x_6.one;
-  f = clamp(x_23, 1.0, 1.0);
-  let x_25 : f32 = f;
-  let x_27 : f32 = x_6.one;
-  if ((x_25 > x_27)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    let x_32 : f32 = f;
-    x_GLF_color = vec4<f32>(x_32, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 95eb595..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  float f = 0.0f;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_23 = asfloat(x_6[0].x);
-  f = clamp(x_23, 1.0f, 1.0f);
-  const float x_25 = f;
-  const float x_27 = asfloat(x_6[0].x);
-  if ((x_25 > x_27)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3528b01..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float const x_23 = x_6.one;
-  f = clamp(x_23, 1.0f, 1.0f);
-  float const x_25 = f;
-  float const x_27 = x_6.one;
-  if ((x_25 > x_27)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    float const x_32 = f;
-    *(tint_symbol_3) = float4(x_32, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a993c19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,90 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-         %26 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-               OpStore %x_GLF_color %19
-         %23 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %24 = OpLoad %float %23
-         %25 = OpExtInst %float %26 NClamp %24 %float_1 %float_1
-               OpStore %f %25
-         %28 = OpLoad %float %f
-         %29 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %30 = OpLoad %float %29
-         %31 = OpFOrdGreaterThan %bool %28 %30
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %35
-         %34 = OpLabel
-               OpStore %x_GLF_color %19
-               OpBranch %33
-         %35 = OpLabel
-         %36 = OpLoad %float %f
-         %37 = OpCompositeConstruct %v4float %36 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %37
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5b41038..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp-vs-original/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var f : f32;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_23 : f32 = x_6.one;
-  f = clamp(x_23, 1.0, 1.0);
-  let x_25 : f32 = f;
-  let x_27 : f32 = x_6.one;
-  if ((x_25 > x_27)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    let x_32 : f32 = f;
-    x_GLF_color = vec4<f32>(x_32, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 00db13a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_36 = false;
-  bool x_37_phi = false;
-  const float x_23 = asfloat(x_5[0].x);
-  const float x_25 = asfloat(x_5[0].x);
-  const bool x_27 = (clamp(1.0f, x_23, x_25) > 42.0f);
-  x_37_phi = x_27;
-  if (!(x_27)) {
-    const float x_32 = asfloat(x_5[0].x);
-    const float x_34 = asfloat(x_5[0].x);
-    x_36 = (clamp(1.0f, x_32, x_34) < 42.0f);
-    x_37_phi = x_36;
-  }
-  if (x_37_phi) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.msl
deleted file mode 100644
index f8619a4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float fourtytwo;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_36 = false;
-  bool x_37_phi = false;
-  float const x_23 = x_5.fourtytwo;
-  float const x_25 = x_5.fourtytwo;
-  bool const x_27 = (clamp(1.0f, x_23, x_25) > 42.0f);
-  x_37_phi = x_27;
-  if (!(x_27)) {
-    float const x_32 = x_5.fourtytwo;
-    float const x_34 = x_5.fourtytwo;
-    x_36 = (clamp(1.0f, x_32, x_34) < 42.0f);
-    x_37_phi = x_36;
-  }
-  bool const x_37 = x_37_phi;
-  if (x_37) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b5f5b13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "fourtytwo"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_37_phi "x_37_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %18 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-   %float_42 = OpConstant %float 42
-    %float_0 = OpConstant %float 0
-         %47 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_bool Function %18
-   %x_37_phi = OpVariable %_ptr_Function_bool Function %18
-         %23 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %24 = OpLoad %float %23
-         %25 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpExtInst %float %28 NClamp %float_1 %24 %26
-         %31 = OpFOrdGreaterThan %bool %27 %float_42
-               OpStore %x_37_phi %31
-         %32 = OpLogicalNot %bool %31
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %33
-         %34 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %36 = OpLoad %float %35
-         %37 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %38 = OpLoad %float %37
-         %39 = OpExtInst %float %28 NClamp %float_1 %36 %38
-         %40 = OpFOrdLessThan %bool %39 %float_42
-               OpStore %x_36 %40
-         %41 = OpLoad %bool %x_36
-               OpStore %x_37_phi %41
-               OpBranch %33
-         %33 = OpLabel
-         %42 = OpLoad %bool %x_37_phi
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %43
-         %45 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4969baa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-[[block]]
-struct buf0 {
-  fourtytwo : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : bool;
-  var x_37_phi : bool;
-  let x_23 : f32 = x_5.fourtytwo;
-  let x_25 : f32 = x_5.fourtytwo;
-  let x_27 : bool = (clamp(1.0, x_23, x_25) > 42.0);
-  x_37_phi = x_27;
-  if (!(x_27)) {
-    let x_32 : f32 = x_5.fourtytwo;
-    let x_34 : f32 = x_5.fourtytwo;
-    x_36 = (clamp(1.0, x_32, x_34) < 42.0);
-    x_37_phi = x_36;
-  }
-  let x_37 : bool = x_37_phi;
-  if (x_37) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 00db13a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_36 = false;
-  bool x_37_phi = false;
-  const float x_23 = asfloat(x_5[0].x);
-  const float x_25 = asfloat(x_5[0].x);
-  const bool x_27 = (clamp(1.0f, x_23, x_25) > 42.0f);
-  x_37_phi = x_27;
-  if (!(x_27)) {
-    const float x_32 = asfloat(x_5[0].x);
-    const float x_34 = asfloat(x_5[0].x);
-    x_36 = (clamp(1.0f, x_32, x_34) < 42.0f);
-    x_37_phi = x_36;
-  }
-  if (x_37_phi) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.msl
deleted file mode 100644
index f8619a4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float fourtytwo;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_36 = false;
-  bool x_37_phi = false;
-  float const x_23 = x_5.fourtytwo;
-  float const x_25 = x_5.fourtytwo;
-  bool const x_27 = (clamp(1.0f, x_23, x_25) > 42.0f);
-  x_37_phi = x_27;
-  if (!(x_27)) {
-    float const x_32 = x_5.fourtytwo;
-    float const x_34 = x_5.fourtytwo;
-    x_36 = (clamp(1.0f, x_32, x_34) < 42.0f);
-    x_37_phi = x_36;
-  }
-  bool const x_37 = x_37_phi;
-  if (x_37) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b5f5b13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "fourtytwo"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_37_phi "x_37_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %18 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-   %float_42 = OpConstant %float 42
-    %float_0 = OpConstant %float 0
-         %47 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_bool Function %18
-   %x_37_phi = OpVariable %_ptr_Function_bool Function %18
-         %23 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %24 = OpLoad %float %23
-         %25 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpExtInst %float %28 NClamp %float_1 %24 %26
-         %31 = OpFOrdGreaterThan %bool %27 %float_42
-               OpStore %x_37_phi %31
-         %32 = OpLogicalNot %bool %31
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %33
-         %34 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %36 = OpLoad %float %35
-         %37 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %38 = OpLoad %float %37
-         %39 = OpExtInst %float %28 NClamp %float_1 %36 %38
-         %40 = OpFOrdLessThan %bool %39 %float_42
-               OpStore %x_36 %40
-         %41 = OpLoad %bool %x_36
-               OpStore %x_37_phi %41
-               OpBranch %33
-         %33 = OpLabel
-         %42 = OpLoad %bool %x_37_phi
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %43
-         %45 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 4969baa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-clamp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-[[block]]
-struct buf0 {
-  fourtytwo : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : bool;
-  var x_37_phi : bool;
-  let x_23 : f32 = x_5.fourtytwo;
-  let x_25 : f32 = x_5.fourtytwo;
-  let x_27 : bool = (clamp(1.0, x_23, x_25) > 42.0);
-  x_37_phi = x_27;
-  if (!(x_27)) {
-    let x_32 : f32 = x_5.fourtytwo;
-    let x_34 : f32 = x_5.fourtytwo;
-    x_36 = (clamp(1.0, x_32, x_34) < 42.0);
-    x_37_phi = x_36;
-  }
-  let x_37 : bool = x_37_phi;
-  if (x_37) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b97f10b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float one = 0.0f;
-  one = 1.0f;
-  if ((dot(float2(2.0f, 1.0f), float2(1.0f, (true ? 0.0f : one))) != 2.0f)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.msl
deleted file mode 100644
index bbbab38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float one = 0.0f;
-  one = 1.0f;
-  float const x_21 = one;
-  if ((dot(float2(2.0f, 1.0f), float2(1.0f, select(x_21, 0.0f, true))) != 2.0f)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 794cc03..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %one "one"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %14 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %20 = OpConstantComposite %v2float %float_2 %float_1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %float_0 = OpConstant %float 0
-         %30 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-        %one = OpVariable %_ptr_Function_float Function %14
-               OpStore %one %float_1
-         %16 = OpLoad %float %one
-         %21 = OpSelect %float %true %float_0 %16
-         %25 = OpCompositeConstruct %v2float %float_1 %21
-         %17 = OpDot %float %20 %25
-         %26 = OpFOrdNotEqual %bool %17 %float_2
-               OpSelectionMerge %27 None
-               OpBranchConditional %26 %28 %29
-         %28 = OpLabel
-               OpStore %x_GLF_color %30
-               OpBranch %27
-         %29 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2617e9c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var one : f32;
-  one = 1.0;
-  let x_21 : f32 = one;
-  if ((dot(vec2<f32>(2.0, 1.0), vec2<f32>(1.0, select(x_21, 0.0, true))) != 2.0)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b97f10b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float one = 0.0f;
-  one = 1.0f;
-  if ((dot(float2(2.0f, 1.0f), float2(1.0f, (true ? 0.0f : one))) != 2.0f)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.msl
deleted file mode 100644
index bbbab38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float one = 0.0f;
-  one = 1.0f;
-  float const x_21 = one;
-  if ((dot(float2(2.0f, 1.0f), float2(1.0f, select(x_21, 0.0f, true))) != 2.0f)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 794cc03..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %one "one"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %14 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-         %20 = OpConstantComposite %v2float %float_2 %float_1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %float_0 = OpConstant %float 0
-         %30 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-        %one = OpVariable %_ptr_Function_float Function %14
-               OpStore %one %float_1
-         %16 = OpLoad %float %one
-         %21 = OpSelect %float %true %float_0 %16
-         %25 = OpCompositeConstruct %v2float %float_1 %21
-         %17 = OpDot %float %20 %25
-         %26 = OpFOrdNotEqual %bool %17 %float_2
-               OpSelectionMerge %27 None
-               OpBranchConditional %26 %28 %29
-         %28 = OpLabel
-               OpStore %x_GLF_color %30
-               OpBranch %27
-         %29 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2617e9c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-dot-condition-true/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var one : f32;
-  one = 1.0;
-  let x_21 : f32 = one;
-  if ((dot(vec2<f32>(2.0, 1.0), vec2<f32>(1.0, select(x_21, 0.0, true))) != 2.0)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.hlsl
deleted file mode 100644
index add5b55..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_29 = gl_FragCoord.x;
-  const float x_31 = asfloat(x_6[0].x);
-  if ((3.0f >= clamp(x_29, 1.0f, (2.0f + x_31)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.msl
deleted file mode 100644
index 956c54f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_29 = (*(tint_symbol_3)).x;
-  float const x_31 = x_6.one;
-  if ((3.0f >= clamp(x_29, 1.0f, (2.0f + x_31)))) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.spvasm
deleted file mode 100644
index 1c34f93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_3 = OpConstant %float 3
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %40 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %22 = OpLoad %float %21
-         %24 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %25 = OpLoad %float %24
-         %31 = OpFAdd %float %float_2 %25
-         %27 = OpExtInst %float %28 NClamp %22 %float_1 %31
-         %32 = OpFOrdGreaterThanEqual %bool %float_3 %27
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %34
-         %36 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %34
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %40
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %44 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %49 = OpLabel
-         %51 = OpLoad %v4float %gl_FragCoord_param_1
-         %50 = OpFunctionCall %main_out %main_inner %51
-         %52 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.wgsl
deleted file mode 100644
index 12d7ca4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_29 : f32 = gl_FragCoord.x;
-  let x_31 : f32 = x_6.one;
-  if ((3.0 >= clamp(x_29, 1.0, (2.0 + x_31)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.hlsl
deleted file mode 100644
index add5b55..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_29 = gl_FragCoord.x;
-  const float x_31 = asfloat(x_6[0].x);
-  if ((3.0f >= clamp(x_29, 1.0f, (2.0f + x_31)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.msl
deleted file mode 100644
index 956c54f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_29 = (*(tint_symbol_3)).x;
-  float const x_31 = x_6.one;
-  if ((3.0f >= clamp(x_29, 1.0f, (2.0f + x_31)))) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.spvasm
deleted file mode 100644
index 1c34f93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_3 = OpConstant %float 3
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %40 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %22 = OpLoad %float %21
-         %24 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %25 = OpLoad %float %24
-         %31 = OpFAdd %float %float_2 %25
-         %27 = OpExtInst %float %28 NClamp %22 %float_1 %31
-         %32 = OpFOrdGreaterThanEqual %bool %float_3 %27
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %34
-         %36 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %34
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %40
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %44 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %49 = OpLabel
-         %51 = OpLoad %v4float %gl_FragCoord_param_1
-         %50 = OpFunctionCall %main_out %main_inner %51
-         %52 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.wgsl
deleted file mode 100644
index 12d7ca4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-gte-const-first/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_29 : f32 = gl_FragCoord.x;
-  let x_31 : f32 = x_6.one;
-  if ((3.0 >= clamp(x_29, 1.0, (2.0 + x_31)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 18a3078..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,78 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int highSigned = 0;
-  uint highUnsigned = 0u;
-  int i = 0;
-  int data[2] = (int[2])0;
-  uint i_1 = 0u;
-  bool x_78 = false;
-  bool x_79_phi = false;
-  highSigned = 1;
-  highUnsigned = 2u;
-  i = 0;
-  while (true) {
-    const int x_42 = i;
-    const int x_43 = highSigned;
-    const int x_46 = asint(x_8[0].x);
-    if ((x_42 < (min(10, x_43) + x_46))) {
-    } else {
-      break;
-    }
-    data[i] = 5;
-    {
-      i = (i + 1);
-    }
-  }
-  i_1 = 1u;
-  while (true) {
-    const uint x_58 = i_1;
-    const uint x_59 = highUnsigned;
-    const int x_62 = asint(x_8[0].x);
-    if ((x_58 < (min(10u, x_59) + asuint(x_62)))) {
-    } else {
-      break;
-    }
-    data[i_1] = 6;
-    {
-      i_1 = (i_1 + asuint(1));
-    }
-  }
-  const int x_72 = data[0];
-  const bool x_73 = (x_72 == 5);
-  x_79_phi = x_73;
-  if (x_73) {
-    const int x_77 = data[1];
-    x_78 = (x_77 == 6);
-    x_79_phi = x_78;
-  }
-  if (x_79_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.msl
deleted file mode 100644
index f7730d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int highSigned = 0;
-  uint highUnsigned = 0u;
-  int i = 0;
-  tint_array_wrapper data = {};
-  uint i_1 = 0u;
-  bool x_78 = false;
-  bool x_79_phi = false;
-  highSigned = 1;
-  highUnsigned = 2u;
-  i = 0;
-  while (true) {
-    int const x_42 = i;
-    int const x_43 = highSigned;
-    int const x_46 = x_8.zero;
-    if ((x_42 < as_type<int>((as_type<uint>(min(10, x_43)) + as_type<uint>(x_46))))) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    data.arr[x_50] = 5;
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  i_1 = 1u;
-  while (true) {
-    uint const x_58 = i_1;
-    uint const x_59 = highUnsigned;
-    int const x_62 = x_8.zero;
-    if ((x_58 < (min(10u, x_59) + as_type<uint>(x_62)))) {
-    } else {
-      break;
-    }
-    uint const x_67 = i_1;
-    data.arr[x_67] = 6;
-    {
-      uint const x_69 = i_1;
-      i_1 = (x_69 + as_type<uint>(1));
-    }
-  }
-  int const x_72 = data.arr[0];
-  bool const x_73 = (x_72 == 5);
-  x_79_phi = x_73;
-  if (x_73) {
-    int const x_77 = data.arr[1];
-    x_78 = (x_77 == 6);
-    x_79_phi = x_78;
-  }
-  bool const x_79 = x_79_phi;
-  if (x_79) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2da9db9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,189 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 111
-; Schema: 0
-               OpCapability Shader
-         %48 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %highSigned "highSigned"
-               OpName %highUnsigned "highUnsigned"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %i_1 "i_1"
-               OpName %x_78 "x_78"
-               OpName %x_79_phi "x_79_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %22 = OpConstantNull %uint
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %28 = OpConstantNull %_arr_int_uint_2
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %int_10 = OpConstant %int 10
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-    %uint_10 = OpConstant %uint 10
-      %int_6 = OpConstant %int 6
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %98 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %99 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %100 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
- %highSigned = OpVariable %_ptr_Function_int Function %18
-%highUnsigned = OpVariable %_ptr_Function_uint Function %22
-          %i = OpVariable %_ptr_Function_int Function %18
-       %data = OpVariable %_ptr_Function__arr_int_uint_2 Function %28
-        %i_1 = OpVariable %_ptr_Function_uint Function %22
-       %x_78 = OpVariable %_ptr_Function_bool Function %33
-   %x_79_phi = OpVariable %_ptr_Function_bool Function %33
-               OpStore %highSigned %int_1
-               OpStore %highUnsigned %uint_2
-               OpStore %i %int_0
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %41 = OpLoad %int %i
-         %42 = OpLoad %int %highSigned
-         %45 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %46 = OpLoad %int %45
-         %47 = OpExtInst %int %48 SMin %int_10 %42
-         %50 = OpIAdd %int %47 %46
-         %51 = OpSLessThan %bool %41 %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %38
-         %52 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpAccessChain %_ptr_Function_int %data %55
-               OpStore %56 %int_5
-               OpBranch %39
-         %39 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %i %59
-               OpBranch %37
-         %38 = OpLabel
-               OpStore %i_1 %uint_1
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %65 = OpLoad %uint %i_1
-         %66 = OpLoad %uint %highUnsigned
-         %67 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %68 = OpLoad %int %67
-         %69 = OpExtInst %uint %48 UMin %uint_10 %66
-         %71 = OpBitcast %uint %68
-         %72 = OpIAdd %uint %69 %71
-         %73 = OpULessThan %bool %65 %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %62
-         %74 = OpLabel
-         %77 = OpLoad %uint %i_1
-         %78 = OpAccessChain %_ptr_Function_int %data %77
-               OpStore %78 %int_6
-               OpBranch %63
-         %63 = OpLabel
-         %80 = OpLoad %uint %i_1
-         %81 = OpBitcast %uint %int_1
-         %82 = OpIAdd %uint %80 %81
-               OpStore %i_1 %82
-               OpBranch %61
-         %62 = OpLabel
-         %83 = OpAccessChain %_ptr_Function_int %data %int_0
-         %84 = OpLoad %int %83
-         %85 = OpIEqual %bool %84 %int_5
-               OpStore %x_79_phi %85
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpAccessChain %_ptr_Function_int %data %int_1
-         %89 = OpLoad %int %88
-         %90 = OpIEqual %bool %89 %int_6
-               OpStore %x_78 %90
-         %91 = OpLoad %bool %x_78
-               OpStore %x_79_phi %91
-               OpBranch %86
-         %86 = OpLabel
-         %92 = OpLoad %bool %x_79_phi
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpStore %x_GLF_color %98
-               OpBranch %93
-         %95 = OpLabel
-               OpStore %x_GLF_color %99
-               OpBranch %93
-         %93 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %100
-        %103 = OpLabel
-        %104 = OpFunctionCall %void %main_1
-        %105 = OpLoad %v4float %x_GLF_color
-        %106 = OpCompositeConstruct %main_out %105
-               OpReturnValue %106
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %108 = OpLabel
-        %109 = OpFunctionCall %main_out %main_inner
-        %110 = OpCompositeExtract %v4float %109 0
-               OpStore %x_GLF_color_1_1 %110
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1ba10ec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,80 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var highSigned : i32;
-  var highUnsigned : u32;
-  var i : i32;
-  var data : array<i32, 2>;
-  var i_1 : u32;
-  var x_78 : bool;
-  var x_79_phi : bool;
-  highSigned = 1;
-  highUnsigned = 2u;
-  i = 0;
-  loop {
-    let x_42 : i32 = i;
-    let x_43 : i32 = highSigned;
-    let x_46 : i32 = x_8.zero;
-    if ((x_42 < (min(10, x_43) + x_46))) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    data[x_50] = 5;
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  i_1 = 1u;
-  loop {
-    let x_58 : u32 = i_1;
-    let x_59 : u32 = highUnsigned;
-    let x_62 : i32 = x_8.zero;
-    if ((x_58 < (min(10u, x_59) + bitcast<u32>(x_62)))) {
-    } else {
-      break;
-    }
-    let x_67 : u32 = i_1;
-    data[x_67] = 6;
-
-    continuing {
-      let x_69 : u32 = i_1;
-      i_1 = (x_69 + bitcast<u32>(1));
-    }
-  }
-  let x_72 : i32 = data[0];
-  let x_73 : bool = (x_72 == 5);
-  x_79_phi = x_73;
-  if (x_73) {
-    let x_77 : i32 = data[1];
-    x_78 = (x_77 == 6);
-    x_79_phi = x_78;
-  }
-  let x_79 : bool = x_79_phi;
-  if (x_79) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 18a3078..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,78 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int highSigned = 0;
-  uint highUnsigned = 0u;
-  int i = 0;
-  int data[2] = (int[2])0;
-  uint i_1 = 0u;
-  bool x_78 = false;
-  bool x_79_phi = false;
-  highSigned = 1;
-  highUnsigned = 2u;
-  i = 0;
-  while (true) {
-    const int x_42 = i;
-    const int x_43 = highSigned;
-    const int x_46 = asint(x_8[0].x);
-    if ((x_42 < (min(10, x_43) + x_46))) {
-    } else {
-      break;
-    }
-    data[i] = 5;
-    {
-      i = (i + 1);
-    }
-  }
-  i_1 = 1u;
-  while (true) {
-    const uint x_58 = i_1;
-    const uint x_59 = highUnsigned;
-    const int x_62 = asint(x_8[0].x);
-    if ((x_58 < (min(10u, x_59) + asuint(x_62)))) {
-    } else {
-      break;
-    }
-    data[i_1] = 6;
-    {
-      i_1 = (i_1 + asuint(1));
-    }
-  }
-  const int x_72 = data[0];
-  const bool x_73 = (x_72 == 5);
-  x_79_phi = x_73;
-  if (x_73) {
-    const int x_77 = data[1];
-    x_78 = (x_77 == 6);
-    x_79_phi = x_78;
-  }
-  if (x_79_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.msl
deleted file mode 100644
index f7730d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int highSigned = 0;
-  uint highUnsigned = 0u;
-  int i = 0;
-  tint_array_wrapper data = {};
-  uint i_1 = 0u;
-  bool x_78 = false;
-  bool x_79_phi = false;
-  highSigned = 1;
-  highUnsigned = 2u;
-  i = 0;
-  while (true) {
-    int const x_42 = i;
-    int const x_43 = highSigned;
-    int const x_46 = x_8.zero;
-    if ((x_42 < as_type<int>((as_type<uint>(min(10, x_43)) + as_type<uint>(x_46))))) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    data.arr[x_50] = 5;
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  i_1 = 1u;
-  while (true) {
-    uint const x_58 = i_1;
-    uint const x_59 = highUnsigned;
-    int const x_62 = x_8.zero;
-    if ((x_58 < (min(10u, x_59) + as_type<uint>(x_62)))) {
-    } else {
-      break;
-    }
-    uint const x_67 = i_1;
-    data.arr[x_67] = 6;
-    {
-      uint const x_69 = i_1;
-      i_1 = (x_69 + as_type<uint>(1));
-    }
-  }
-  int const x_72 = data.arr[0];
-  bool const x_73 = (x_72 == 5);
-  x_79_phi = x_73;
-  if (x_73) {
-    int const x_77 = data.arr[1];
-    x_78 = (x_77 == 6);
-    x_79_phi = x_78;
-  }
-  bool const x_79 = x_79_phi;
-  if (x_79) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2da9db9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,189 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 111
-; Schema: 0
-               OpCapability Shader
-         %48 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %highSigned "highSigned"
-               OpName %highUnsigned "highUnsigned"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %i_1 "i_1"
-               OpName %x_78 "x_78"
-               OpName %x_79_phi "x_79_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %22 = OpConstantNull %uint
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %28 = OpConstantNull %_arr_int_uint_2
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %int_10 = OpConstant %int 10
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-    %uint_10 = OpConstant %uint 10
-      %int_6 = OpConstant %int 6
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %98 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %99 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %100 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
- %highSigned = OpVariable %_ptr_Function_int Function %18
-%highUnsigned = OpVariable %_ptr_Function_uint Function %22
-          %i = OpVariable %_ptr_Function_int Function %18
-       %data = OpVariable %_ptr_Function__arr_int_uint_2 Function %28
-        %i_1 = OpVariable %_ptr_Function_uint Function %22
-       %x_78 = OpVariable %_ptr_Function_bool Function %33
-   %x_79_phi = OpVariable %_ptr_Function_bool Function %33
-               OpStore %highSigned %int_1
-               OpStore %highUnsigned %uint_2
-               OpStore %i %int_0
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %41 = OpLoad %int %i
-         %42 = OpLoad %int %highSigned
-         %45 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %46 = OpLoad %int %45
-         %47 = OpExtInst %int %48 SMin %int_10 %42
-         %50 = OpIAdd %int %47 %46
-         %51 = OpSLessThan %bool %41 %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %38
-         %52 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpAccessChain %_ptr_Function_int %data %55
-               OpStore %56 %int_5
-               OpBranch %39
-         %39 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %i %59
-               OpBranch %37
-         %38 = OpLabel
-               OpStore %i_1 %uint_1
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %65 = OpLoad %uint %i_1
-         %66 = OpLoad %uint %highUnsigned
-         %67 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %68 = OpLoad %int %67
-         %69 = OpExtInst %uint %48 UMin %uint_10 %66
-         %71 = OpBitcast %uint %68
-         %72 = OpIAdd %uint %69 %71
-         %73 = OpULessThan %bool %65 %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %62
-         %74 = OpLabel
-         %77 = OpLoad %uint %i_1
-         %78 = OpAccessChain %_ptr_Function_int %data %77
-               OpStore %78 %int_6
-               OpBranch %63
-         %63 = OpLabel
-         %80 = OpLoad %uint %i_1
-         %81 = OpBitcast %uint %int_1
-         %82 = OpIAdd %uint %80 %81
-               OpStore %i_1 %82
-               OpBranch %61
-         %62 = OpLabel
-         %83 = OpAccessChain %_ptr_Function_int %data %int_0
-         %84 = OpLoad %int %83
-         %85 = OpIEqual %bool %84 %int_5
-               OpStore %x_79_phi %85
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpAccessChain %_ptr_Function_int %data %int_1
-         %89 = OpLoad %int %88
-         %90 = OpIEqual %bool %89 %int_6
-               OpStore %x_78 %90
-         %91 = OpLoad %bool %x_78
-               OpStore %x_79_phi %91
-               OpBranch %86
-         %86 = OpLabel
-         %92 = OpLoad %bool %x_79_phi
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpStore %x_GLF_color %98
-               OpBranch %93
-         %95 = OpLabel
-               OpStore %x_GLF_color %99
-               OpBranch %93
-         %93 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %100
-        %103 = OpLabel
-        %104 = OpFunctionCall %void %main_1
-        %105 = OpLoad %v4float %x_GLF_color
-        %106 = OpCompositeConstruct %main_out %105
-               OpReturnValue %106
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %108 = OpLabel
-        %109 = OpFunctionCall %main_out %main_inner
-        %110 = OpCompositeExtract %v4float %109 0
-               OpStore %x_GLF_color_1_1 %110
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1ba10ec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-min-as-loop-range/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,80 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var highSigned : i32;
-  var highUnsigned : u32;
-  var i : i32;
-  var data : array<i32, 2>;
-  var i_1 : u32;
-  var x_78 : bool;
-  var x_79_phi : bool;
-  highSigned = 1;
-  highUnsigned = 2u;
-  i = 0;
-  loop {
-    let x_42 : i32 = i;
-    let x_43 : i32 = highSigned;
-    let x_46 : i32 = x_8.zero;
-    if ((x_42 < (min(10, x_43) + x_46))) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    data[x_50] = 5;
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  i_1 = 1u;
-  loop {
-    let x_58 : u32 = i_1;
-    let x_59 : u32 = highUnsigned;
-    let x_62 : i32 = x_8.zero;
-    if ((x_58 < (min(10u, x_59) + bitcast<u32>(x_62)))) {
-    } else {
-      break;
-    }
-    let x_67 : u32 = i_1;
-    data[x_67] = 6;
-
-    continuing {
-      let x_69 : u32 = i_1;
-      i_1 = (x_69 + bitcast<u32>(1));
-    }
-  }
-  let x_72 : i32 = data[0];
-  let x_73 : bool = (x_72 == 5);
-  x_79_phi = x_73;
-  if (x_73) {
-    let x_77 : i32 = data[1];
-    x_78 = (x_77 == 6);
-    x_79_phi = x_78;
-  }
-  let x_79 : bool = x_79_phi;
-  if (x_79) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 629e521..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-
-void main_1() {
-  if (((1.0f - (1.0f * floor((1.0f / 1.0f)))) <= 0.01f)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_29 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_32 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_35 = asint(x_5[1].x);
-    x_GLF_color = float4(1.0f, float(x_29), float(x_32), float(x_35));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_39 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_40 = float(x_39);
-    x_GLF_color = float4(x_40, x_40, x_40, x_40);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.msl
deleted file mode 100755
index 9e84444..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  if (((1.0f - (1.0f * floor((1.0f / 1.0f)))) <= 0.01f)) {
-    int const x_29 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    int const x_32 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    int const x_35 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(1.0f, float(x_29), float(x_32), float(x_35));
-  } else {
-    int const x_39 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    float const x_40 = float(x_39);
-    *(tint_symbol_3) = float4(x_40, x_40, x_40, x_40);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e806db8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %21 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-%float_0_00999999978 = OpConstant %float 0.00999999978
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %22 = OpFDiv %float %float_1 %float_1
-         %20 = OpExtInst %float %21 Floor %22
-         %23 = OpFMul %float %float_1 %20
-         %24 = OpFSub %float %float_1 %23
-         %26 = OpFOrdLessThanEqual %bool %24 %float_0_00999999978
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %39 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %40 = OpLoad %int %39
-         %41 = OpConvertSToF %float %35
-         %42 = OpConvertSToF %float %37
-         %43 = OpConvertSToF %float %40
-         %44 = OpCompositeConstruct %v4float %float_1 %41 %42 %43
-               OpStore %x_GLF_color %44
-               OpBranch %28
-         %30 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpConvertSToF %float %46
-         %48 = OpCompositeConstruct %v4float %47 %47 %47 %47
-               OpStore %x_GLF_color %48
-               OpBranch %28
-         %28 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index dbba7f3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  if (((1.0 - (1.0 * floor((1.0 / 1.0)))) <= 0.01)) {
-    let x_29 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_32 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_35 : i32 = x_5.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(1.0, f32(x_29), f32(x_32), f32(x_35));
-  } else {
-    let x_39 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_40 : f32 = f32(x_39);
-    x_GLF_color = vec4<f32>(x_40, x_40, x_40, x_40);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5c592bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-
-void main_1() {
-  if (((1.0f % 1.0f) <= 0.01f)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_29 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_32 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_35 = asint(x_5[1].x);
-    x_GLF_color = float4(1.0f, float(x_29), float(x_32), float(x_35));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_39 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_40 = float(x_39);
-    x_GLF_color = float4(x_40, x_40, x_40, x_40);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.msl
deleted file mode 100755
index a5fdea0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  if ((fmod(1.0f, 1.0f) <= 0.01f)) {
-    int const x_29 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    int const x_32 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    int const x_35 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(1.0f, float(x_29), float(x_32), float(x_35));
-  } else {
-    int const x_39 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    float const x_40 = float(x_39);
-    *(tint_symbol_3) = float4(x_40, x_40, x_40, x_40);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5cbad93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-%float_0_00999999978 = OpConstant %float 0.00999999978
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %20 = OpFRem %float %float_1 %float_1
-         %22 = OpFOrdLessThanEqual %bool %20 %float_0_00999999978
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %26
-         %25 = OpLabel
-         %30 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %33 = OpLoad %int %32
-         %35 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %36 = OpLoad %int %35
-         %37 = OpConvertSToF %float %31
-         %38 = OpConvertSToF %float %33
-         %39 = OpConvertSToF %float %36
-         %40 = OpCompositeConstruct %v4float %float_1 %37 %38 %39
-               OpStore %x_GLF_color %40
-               OpBranch %24
-         %26 = OpLabel
-         %41 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %42 = OpLoad %int %41
-         %43 = OpConvertSToF %float %42
-         %44 = OpCompositeConstruct %v4float %43 %43 %43 %43
-               OpStore %x_GLF_color %44
-               OpBranch %24
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 020e0e9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-mod-one-one-lte/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  if (((1.0 % 1.0) <= 0.01)) {
-    let x_29 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_32 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_35 : i32 = x_5.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(1.0, f32(x_29), f32(x_32), f32(x_35));
-  } else {
-    let x_39 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_40 : f32 = f32(x_39);
-    x_GLF_color = vec4<f32>(x_40, x_40, x_40, x_40);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 53fefd1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  bool x_48 = false;
-  bool x_49_phi = false;
-  f = pow(40.330001831f, ldexp(1.0f, 98980));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_35 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_39 = asint(x_6[1].x);
-  const bool x_41 = (x_35 == (x_37 + x_39));
-  x_49_phi = x_41;
-  if (!(x_41)) {
-    const float x_45 = f;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_47 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_48 = (x_45 > x_47);
-    x_49_phi = x_48;
-  }
-  if (x_49_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_57 = asint(x_6[1].x);
-    const int x_60 = asint(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_63 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    const int x_67 = asint(x_6[1].x);
-    const float x_68 = float(x_67);
-    x_GLF_color = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.msl
deleted file mode 100644
index cddd816..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  bool x_48 = false;
-  bool x_49_phi = false;
-  f = pow(40.330001831f, ldexp(1.0f, 98980));
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_39 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  bool const x_41 = (x_35 == as_type<int>((as_type<uint>(x_37) + as_type<uint>(x_39))));
-  x_49_phi = x_41;
-  if (!(x_41)) {
-    float const x_45 = f;
-    float const x_47 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    x_48 = (x_45 > x_47);
-    x_49_phi = x_48;
-  }
-  bool const x_49 = x_49_phi;
-  if (x_49) {
-    int const x_54 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_57 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_68 = float(x_67);
-    *(tint_symbol_3) = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 51013b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,149 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-         %33 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %x_48 "x_48"
-               OpName %x_49_phi "x_49_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-%float_40_3300018 = OpConstant %float 40.3300018
-    %float_1 = OpConstant %float 1
-  %int_98980 = OpConstant %int 98980
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %26
-       %x_48 = OpVariable %_ptr_Function_bool Function %30
-   %x_49_phi = OpVariable %_ptr_Function_bool Function %30
-         %35 = OpExtInst %float %33 Ldexp %float_1 %int_98980
-         %32 = OpExtInst %float %33 Pow %float_40_3300018 %35
-               OpStore %f %32
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpIAdd %int %44 %47
-         %49 = OpIEqual %bool %42 %48
-               OpStore %x_49_phi %49
-         %50 = OpLogicalNot %bool %49
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %53 = OpLoad %float %f
-         %55 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %56 = OpLoad %float %55
-         %57 = OpFOrdGreaterThan %bool %53 %56
-               OpStore %x_48 %57
-         %58 = OpLoad %bool %x_48
-               OpStore %x_49_phi %58
-               OpBranch %51
-         %51 = OpLabel
-         %59 = OpLoad %bool %x_49_phi
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %60
-         %62 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5f17cf5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,61 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var x_48 : bool;
-  var x_49_phi : bool;
-  f = pow(40.330001831, ldexp(1.0, 98980));
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_39 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_41 : bool = (x_35 == (x_37 + x_39));
-  x_49_phi = x_41;
-  if (!(x_41)) {
-    let x_45 : f32 = f;
-    let x_47 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_48 = (x_45 > x_47);
-    x_49_phi = x_48;
-  }
-  let x_49 : bool = x_49_phi;
-  if (x_49) {
-    let x_54 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_57 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_54), f32(x_57), f32(x_60), f32(x_63));
-  } else {
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_68 : f32 = f32(x_67);
-    x_GLF_color = vec4<f32>(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 53fefd1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  bool x_48 = false;
-  bool x_49_phi = false;
-  f = pow(40.330001831f, ldexp(1.0f, 98980));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_35 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_39 = asint(x_6[1].x);
-  const bool x_41 = (x_35 == (x_37 + x_39));
-  x_49_phi = x_41;
-  if (!(x_41)) {
-    const float x_45 = f;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_47 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_48 = (x_45 > x_47);
-    x_49_phi = x_48;
-  }
-  if (x_49_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_57 = asint(x_6[1].x);
-    const int x_60 = asint(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_63 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    const int x_67 = asint(x_6[1].x);
-    const float x_68 = float(x_67);
-    x_GLF_color = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.msl
deleted file mode 100644
index cddd816..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  bool x_48 = false;
-  bool x_49_phi = false;
-  f = pow(40.330001831f, ldexp(1.0f, 98980));
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_39 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  bool const x_41 = (x_35 == as_type<int>((as_type<uint>(x_37) + as_type<uint>(x_39))));
-  x_49_phi = x_41;
-  if (!(x_41)) {
-    float const x_45 = f;
-    float const x_47 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    x_48 = (x_45 > x_47);
-    x_49_phi = x_48;
-  }
-  bool const x_49 = x_49_phi;
-  if (x_49) {
-    int const x_54 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_57 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_68 = float(x_67);
-    *(tint_symbol_3) = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 51013b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,149 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-         %33 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %x_48 "x_48"
-               OpName %x_49_phi "x_49_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-%float_40_3300018 = OpConstant %float 40.3300018
-    %float_1 = OpConstant %float 1
-  %int_98980 = OpConstant %int 98980
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %26
-       %x_48 = OpVariable %_ptr_Function_bool Function %30
-   %x_49_phi = OpVariable %_ptr_Function_bool Function %30
-         %35 = OpExtInst %float %33 Ldexp %float_1 %int_98980
-         %32 = OpExtInst %float %33 Pow %float_40_3300018 %35
-               OpStore %f %32
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpIAdd %int %44 %47
-         %49 = OpIEqual %bool %42 %48
-               OpStore %x_49_phi %49
-         %50 = OpLogicalNot %bool %49
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %53 = OpLoad %float %f
-         %55 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %56 = OpLoad %float %55
-         %57 = OpFOrdGreaterThan %bool %53 %56
-               OpStore %x_48 %57
-         %58 = OpLoad %bool %x_48
-               OpStore %x_49_phi %58
-               OpBranch %51
-         %51 = OpLabel
-         %59 = OpLoad %bool %x_49_phi
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %60
-         %62 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5f17cf5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-pow-large-exp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,61 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var x_48 : bool;
-  var x_49_phi : bool;
-  f = pow(40.330001831, ldexp(1.0, 98980));
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_39 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_41 : bool = (x_35 == (x_37 + x_39));
-  x_49_phi = x_41;
-  if (!(x_41)) {
-    let x_45 : f32 = f;
-    let x_47 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_48 = (x_45 > x_47);
-    x_49_phi = x_48;
-  }
-  let x_49 : bool = x_49_phi;
-  if (x_49) {
-    let x_54 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_57 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_54), f32(x_57), f32(x_60), f32(x_63));
-  } else {
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_68 : f32 = f32(x_67);
-    x_GLF_color = vec4<f32>(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2d6e50f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  bool x_30 = false;
-  bool x_31_phi = false;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_23 = asfloat(x_5[0].x);
-  const bool x_24 = (x_23 < 0.0f);
-  x_31_phi = x_24;
-  if (!(x_24)) {
-    const float x_29 = asfloat(x_5[0].x);
-    x_30 = (x_29 < 1.0f);
-    x_31_phi = x_30;
-  }
-  if (x_31_phi) {
-    return;
-  }
-  const float x_35 = asfloat(x_5[0].x);
-  if ((x_35 < 0.0f)) {
-    while (true) {
-      const float x_45 = asfloat(x_5[0].x);
-      if ((x_45 < 0.0f)) {
-      } else {
-        break;
-      }
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      break;
-    }
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.msl
deleted file mode 100644
index c4559a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_30 = false;
-  bool x_31_phi = false;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float const x_23 = x_5.one;
-  bool const x_24 = (x_23 < 0.0f);
-  x_31_phi = x_24;
-  if (!(x_24)) {
-    float const x_29 = x_5.one;
-    x_30 = (x_29 < 1.0f);
-    x_31_phi = x_30;
-  }
-  bool const x_31 = x_31_phi;
-  if (x_31) {
-    return;
-  }
-  float const x_35 = x_5.one;
-  if ((x_35 < 0.0f)) {
-    while (true) {
-      float const x_45 = x_5.one;
-      if ((x_45 < 0.0f)) {
-      } else {
-        break;
-      }
-      *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      break;
-    }
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8a2cc65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,127 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %x_31_phi "x_31_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %18 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %55 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_bool Function %18
-   %x_31_phi = OpVariable %_ptr_Function_bool Function %18
-               OpStore %x_GLF_color %21
-         %25 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpFOrdLessThan %bool %26 %float_0
-               OpStore %x_31_phi %27
-         %28 = OpLogicalNot %bool %27
-               OpSelectionMerge %29 None
-               OpBranchConditional %28 %30 %29
-         %30 = OpLabel
-         %31 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %32 = OpLoad %float %31
-         %34 = OpFOrdLessThan %bool %32 %float_1
-               OpStore %x_30 %34
-         %35 = OpLoad %bool %x_30
-               OpStore %x_31_phi %35
-               OpBranch %29
-         %29 = OpLabel
-         %36 = OpLoad %bool %x_31_phi
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %37
-         %38 = OpLabel
-               OpReturn
-         %37 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %40 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %44
-         %43 = OpLabel
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %50 = OpLoad %float %49
-         %51 = OpFOrdLessThan %bool %50 %float_0
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %46
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %46
-         %47 = OpLabel
-               OpBranch %45
-         %46 = OpLabel
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c41a337..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_30 : bool;
-  var x_31_phi : bool;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_23 : f32 = x_5.one;
-  let x_24 : bool = (x_23 < 0.0);
-  x_31_phi = x_24;
-  if (!(x_24)) {
-    let x_29 : f32 = x_5.one;
-    x_30 = (x_29 < 1.0);
-    x_31_phi = x_30;
-  }
-  let x_31 : bool = x_31_phi;
-  if (x_31) {
-    return;
-  }
-  let x_35 : f32 = x_5.one;
-  if ((x_35 < 0.0)) {
-    loop {
-      let x_45 : f32 = x_5.one;
-      if ((x_45 < 0.0)) {
-      } else {
-        break;
-      }
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      break;
-    }
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 2d6e50f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  bool x_30 = false;
-  bool x_31_phi = false;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_23 = asfloat(x_5[0].x);
-  const bool x_24 = (x_23 < 0.0f);
-  x_31_phi = x_24;
-  if (!(x_24)) {
-    const float x_29 = asfloat(x_5[0].x);
-    x_30 = (x_29 < 1.0f);
-    x_31_phi = x_30;
-  }
-  if (x_31_phi) {
-    return;
-  }
-  const float x_35 = asfloat(x_5[0].x);
-  if ((x_35 < 0.0f)) {
-    while (true) {
-      const float x_45 = asfloat(x_5[0].x);
-      if ((x_45 < 0.0f)) {
-      } else {
-        break;
-      }
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      break;
-    }
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.msl
deleted file mode 100644
index c4559a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_30 = false;
-  bool x_31_phi = false;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float const x_23 = x_5.one;
-  bool const x_24 = (x_23 < 0.0f);
-  x_31_phi = x_24;
-  if (!(x_24)) {
-    float const x_29 = x_5.one;
-    x_30 = (x_29 < 1.0f);
-    x_31_phi = x_30;
-  }
-  bool const x_31 = x_31_phi;
-  if (x_31) {
-    return;
-  }
-  float const x_35 = x_5.one;
-  if ((x_35 < 0.0f)) {
-    while (true) {
-      float const x_45 = x_5.one;
-      if ((x_45 < 0.0f)) {
-      } else {
-        break;
-      }
-      *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      break;
-    }
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8a2cc65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,127 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %x_31_phi "x_31_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %18 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %55 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_bool Function %18
-   %x_31_phi = OpVariable %_ptr_Function_bool Function %18
-               OpStore %x_GLF_color %21
-         %25 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpFOrdLessThan %bool %26 %float_0
-               OpStore %x_31_phi %27
-         %28 = OpLogicalNot %bool %27
-               OpSelectionMerge %29 None
-               OpBranchConditional %28 %30 %29
-         %30 = OpLabel
-         %31 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %32 = OpLoad %float %31
-         %34 = OpFOrdLessThan %bool %32 %float_1
-               OpStore %x_30 %34
-         %35 = OpLoad %bool %x_30
-               OpStore %x_31_phi %35
-               OpBranch %29
-         %29 = OpLabel
-         %36 = OpLoad %bool %x_31_phi
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %37
-         %38 = OpLabel
-               OpReturn
-         %37 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %40 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %44
-         %43 = OpLabel
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %50 = OpLoad %float %49
-         %51 = OpFOrdLessThan %bool %50 %float_0
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %46
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %46
-         %47 = OpLabel
-               OpBranch %45
-         %46 = OpLabel
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c41a337..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-same-condition/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_30 : bool;
-  var x_31_phi : bool;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_23 : f32 = x_5.one;
-  let x_24 : bool = (x_23 < 0.0);
-  x_31_phi = x_24;
-  if (!(x_24)) {
-    let x_29 : f32 = x_5.one;
-    x_30 = (x_29 < 1.0);
-    x_31_phi = x_30;
-  }
-  let x_31 : bool = x_31_phi;
-  if (x_31) {
-    return;
-  }
-  let x_35 : f32 = x_5.one;
-  if ((x_35 < 0.0)) {
-    loop {
-      let x_45 : f32 = x_5.one;
-      if ((x_45 < 0.0)) {
-      } else {
-        break;
-      }
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      break;
-    }
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index dd5987c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  bool x_38 = false;
-  bool x_39_phi = false;
-  f = sinh(724.322021484f);
-  const bool x_30 = isinf(f);
-  x_39_phi = x_30;
-  if (!(x_30)) {
-    const float x_35 = asfloat(x_6[0].x);
-    const float x_37 = asfloat(x_6[0].y);
-    x_38 = (x_35 < x_37);
-    x_39_phi = x_38;
-  }
-  if (x_39_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.msl
deleted file mode 100644
index fe80104..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  bool x_38 = false;
-  bool x_39_phi = false;
-  f = sinh(724.322021484f);
-  float const x_29 = f;
-  bool const x_30 = isinf(x_29);
-  x_39_phi = x_30;
-  if (!(x_30)) {
-    float const x_35 = x_6.injectionSwitch.x;
-    float const x_37 = x_6.injectionSwitch.y;
-    x_38 = (x_35 < x_37);
-    x_39_phi = x_38;
-  }
-  bool const x_39 = x_39_phi;
-  if (x_39) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 09834ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,109 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %x_38 "x_38"
-               OpName %x_39_phi "x_39_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %22 = OpConstantNull %bool
-%float_724_322021 = OpConstant %float 724.322021
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %49 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %18
-       %x_38 = OpVariable %_ptr_Function_bool Function %22
-   %x_39_phi = OpVariable %_ptr_Function_bool Function %22
-         %24 = OpExtInst %float %25 Sinh %float_724_322021
-               OpStore %f %24
-         %27 = OpLoad %float %f
-         %28 = OpIsInf %bool %27
-               OpStore %x_39_phi %28
-         %29 = OpLogicalNot %bool %28
-               OpSelectionMerge %30 None
-               OpBranchConditional %29 %31 %30
-         %31 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %36 = OpLoad %float %35
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFOrdLessThan %bool %36 %39
-               OpStore %x_38 %40
-         %41 = OpLoad %bool %x_38
-               OpStore %x_39_phi %41
-               OpBranch %30
-         %30 = OpLabel
-         %42 = OpLoad %bool %x_39_phi
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %43
-         %45 = OpLabel
-               OpStore %x_GLF_color %49
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 39460bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var x_38 : bool;
-  var x_39_phi : bool;
-  f = sinh(724.322021484);
-  let x_29 : f32 = f;
-  let x_30 : bool = isInf(x_29);
-  x_39_phi = x_30;
-  if (!(x_30)) {
-    let x_35 : f32 = x_6.injectionSwitch.x;
-    let x_37 : f32 = x_6.injectionSwitch.y;
-    x_38 = (x_35 < x_37);
-    x_39_phi = x_38;
-  }
-  let x_39 : bool = x_39_phi;
-  if (x_39) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index dd5987c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  bool x_38 = false;
-  bool x_39_phi = false;
-  f = sinh(724.322021484f);
-  const bool x_30 = isinf(f);
-  x_39_phi = x_30;
-  if (!(x_30)) {
-    const float x_35 = asfloat(x_6[0].x);
-    const float x_37 = asfloat(x_6[0].y);
-    x_38 = (x_35 < x_37);
-    x_39_phi = x_38;
-  }
-  if (x_39_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.msl
deleted file mode 100644
index fe80104..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  bool x_38 = false;
-  bool x_39_phi = false;
-  f = sinh(724.322021484f);
-  float const x_29 = f;
-  bool const x_30 = isinf(x_29);
-  x_39_phi = x_30;
-  if (!(x_30)) {
-    float const x_35 = x_6.injectionSwitch.x;
-    float const x_37 = x_6.injectionSwitch.y;
-    x_38 = (x_35 < x_37);
-    x_39_phi = x_38;
-  }
-  bool const x_39 = x_39_phi;
-  if (x_39) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 09834ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,109 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %x_38 "x_38"
-               OpName %x_39_phi "x_39_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %22 = OpConstantNull %bool
-%float_724_322021 = OpConstant %float 724.322021
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %49 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %18
-       %x_38 = OpVariable %_ptr_Function_bool Function %22
-   %x_39_phi = OpVariable %_ptr_Function_bool Function %22
-         %24 = OpExtInst %float %25 Sinh %float_724_322021
-               OpStore %f %24
-         %27 = OpLoad %float %f
-         %28 = OpIsInf %bool %27
-               OpStore %x_39_phi %28
-         %29 = OpLogicalNot %bool %28
-               OpSelectionMerge %30 None
-               OpBranchConditional %29 %31 %30
-         %31 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %36 = OpLoad %float %35
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFOrdLessThan %bool %36 %39
-               OpStore %x_38 %40
-         %41 = OpLoad %bool %x_38
-               OpStore %x_39_phi %41
-               OpBranch %30
-         %30 = OpLabel
-         %42 = OpLoad %bool %x_39_phi
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %43
-         %45 = OpLabel
-               OpStore %x_GLF_color %49
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 39460bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-sinh-inf/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var x_38 : bool;
-  var x_39_phi : bool;
-  f = sinh(724.322021484);
-  let x_29 : f32 = f;
-  let x_30 : bool = isInf(x_29);
-  x_39_phi = x_30;
-  if (!(x_30)) {
-    let x_35 : f32 = x_6.injectionSwitch.x;
-    let x_37 : f32 = x_6.injectionSwitch.y;
-    x_38 = (x_35 < x_37);
-    x_39_phi = x_38;
-  }
-  let x_39 : bool = x_39_phi;
-  if (x_39) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.hlsl
deleted file mode 100644
index 429b614..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 x_26 = float2(0.0f, 0.0f);
-  bool x_39 = false;
-  float2 x_26_phi = float2(0.0f, 0.0f);
-  int x_5_phi = 0;
-  bool x_40_phi = false;
-  x_26_phi = float2(0.0f, 0.0f);
-  x_5_phi = 2;
-  while (true) {
-    float2 x_27 = float2(0.0f, 0.0f);
-    int x_4 = 0;
-    x_26 = x_26_phi;
-    const int x_5 = x_5_phi;
-    if ((x_5 < 3)) {
-    } else {
-      break;
-    }
-    {
-      const float2 x_32 = float2(1.0f, float(x_5));
-      x_27 = float2(x_32.x, x_32.y);
-      x_4 = (x_5 + 1);
-      x_26_phi = x_27;
-      x_5_phi = x_4;
-    }
-  }
-  const bool x_34 = (x_26.x != 1.0f);
-  x_40_phi = x_34;
-  if (!(x_34)) {
-    x_39 = (x_26.y != 2.0f);
-    x_40_phi = x_39;
-  }
-  if (x_40_phi) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.msl
deleted file mode 100644
index 4f21011..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 x_26 = 0.0f;
-  bool x_39 = false;
-  float2 x_26_phi = 0.0f;
-  int x_5_phi = 0;
-  bool x_40_phi = false;
-  x_26_phi = float2(0.0f, 0.0f);
-  x_5_phi = 2;
-  while (true) {
-    float2 x_27 = 0.0f;
-    int x_4 = 0;
-    x_26 = x_26_phi;
-    int const x_5 = x_5_phi;
-    if ((x_5 < 3)) {
-    } else {
-      break;
-    }
-    {
-      float2 const x_32 = float2(1.0f, float(x_5));
-      x_27 = float2(x_32.x, x_32.y);
-      x_4 = as_type<int>((as_type<uint>(x_5) + as_type<uint>(1)));
-      x_26_phi = x_27;
-      x_5_phi = x_4;
-    }
-  }
-  bool const x_34 = (x_26.x != 1.0f);
-  x_40_phi = x_34;
-  if (!(x_34)) {
-    x_39 = (x_26.y != 2.0f);
-    x_40_phi = x_39;
-  }
-  bool const x_40 = x_40_phi;
-  if (x_40) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.spvasm
deleted file mode 100644
index 1720bd1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 84
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_26 "x_26"
-               OpName %x_39 "x_39"
-               OpName %x_26_phi "x_26_phi"
-               OpName %x_5_phi "x_5_phi"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_27 "x_27"
-               OpName %x_4 "x_4"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %27 = OpConstantComposite %v2float %float_0 %float_0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-    %float_2 = OpConstant %float 2
-         %71 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %72 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %73 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %x_26 = OpVariable %_ptr_Function_v2float Function %15
-       %x_39 = OpVariable %_ptr_Function_bool Function %19
-   %x_26_phi = OpVariable %_ptr_Function_v2float Function %15
-    %x_5_phi = OpVariable %_ptr_Function_int Function %24
-   %x_40_phi = OpVariable %_ptr_Function_bool Function %19
-       %x_27 = OpVariable %_ptr_Function_v2float Function %15
-        %x_4 = OpVariable %_ptr_Function_int Function %24
-               OpStore %x_26_phi %27
-               OpStore %x_5_phi %int_2
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %35 = OpLoad %v2float %x_26_phi
-               OpStore %x_26 %35
-         %36 = OpLoad %int %x_5_phi
-         %38 = OpSLessThan %bool %36 %int_3
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %30
-         %39 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %43 = OpConvertSToF %float %36
-         %44 = OpCompositeConstruct %v2float %float_1 %43
-         %45 = OpCompositeExtract %float %44 0
-         %46 = OpCompositeExtract %float %44 1
-         %47 = OpCompositeConstruct %v2float %45 %46
-               OpStore %x_27 %47
-         %49 = OpIAdd %int %36 %int_1
-               OpStore %x_4 %49
-         %50 = OpLoad %v2float %x_27
-               OpStore %x_26_phi %50
-         %51 = OpLoad %int %x_4
-               OpStore %x_5_phi %51
-               OpBranch %29
-         %30 = OpLabel
-         %55 = OpAccessChain %_ptr_Function_float %x_26 %uint_0
-         %56 = OpLoad %float %55
-         %57 = OpFOrdNotEqual %bool %56 %float_1
-               OpStore %x_40_phi %57
-         %58 = OpLogicalNot %bool %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-         %62 = OpAccessChain %_ptr_Function_float %x_26 %uint_1
-         %63 = OpLoad %float %62
-         %65 = OpFOrdNotEqual %bool %63 %float_2
-               OpStore %x_39 %65
-         %66 = OpLoad %bool %x_39
-               OpStore %x_40_phi %66
-               OpBranch %59
-         %59 = OpLabel
-         %67 = OpLoad %bool %x_40_phi
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpStore %x_GLF_color %71
-               OpBranch %68
-         %70 = OpLabel
-               OpStore %x_GLF_color %72
-               OpBranch %68
-         %68 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %73
-         %76 = OpLabel
-         %77 = OpFunctionCall %void %main_1
-         %78 = OpLoad %v4float %x_GLF_color
-         %79 = OpCompositeConstruct %main_out %78
-               OpReturnValue %79
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %81 = OpLabel
-         %82 = OpFunctionCall %main_out %main_inner
-         %83 = OpCompositeExtract %v4float %82 0
-               OpStore %x_GLF_color_1_1 %83
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.wgsl
deleted file mode 100644
index 2d4b641..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,53 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_26 : vec2<f32>;
-  var x_39 : bool;
-  var x_26_phi : vec2<f32>;
-  var x_5_phi : i32;
-  var x_40_phi : bool;
-  x_26_phi = vec2<f32>(0.0, 0.0);
-  x_5_phi = 2;
-  loop {
-    var x_27 : vec2<f32>;
-    var x_4 : i32;
-    x_26 = x_26_phi;
-    let x_5 : i32 = x_5_phi;
-    if ((x_5 < 3)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_32 : vec2<f32> = vec2<f32>(1.0, f32(x_5));
-      x_27 = vec2<f32>(x_32.x, x_32.y);
-      x_4 = (x_5 + 1);
-      x_26_phi = x_27;
-      x_5_phi = x_4;
-    }
-  }
-  let x_34 : bool = (x_26.x != 1.0);
-  x_40_phi = x_34;
-  if (!(x_34)) {
-    x_39 = (x_26.y != 2.0);
-    x_40_phi = x_39;
-  }
-  let x_40 : bool = x_40_phi;
-  if (x_40) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.hlsl
deleted file mode 100644
index 429b614..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 x_26 = float2(0.0f, 0.0f);
-  bool x_39 = false;
-  float2 x_26_phi = float2(0.0f, 0.0f);
-  int x_5_phi = 0;
-  bool x_40_phi = false;
-  x_26_phi = float2(0.0f, 0.0f);
-  x_5_phi = 2;
-  while (true) {
-    float2 x_27 = float2(0.0f, 0.0f);
-    int x_4 = 0;
-    x_26 = x_26_phi;
-    const int x_5 = x_5_phi;
-    if ((x_5 < 3)) {
-    } else {
-      break;
-    }
-    {
-      const float2 x_32 = float2(1.0f, float(x_5));
-      x_27 = float2(x_32.x, x_32.y);
-      x_4 = (x_5 + 1);
-      x_26_phi = x_27;
-      x_5_phi = x_4;
-    }
-  }
-  const bool x_34 = (x_26.x != 1.0f);
-  x_40_phi = x_34;
-  if (!(x_34)) {
-    x_39 = (x_26.y != 2.0f);
-    x_40_phi = x_39;
-  }
-  if (x_40_phi) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.msl
deleted file mode 100644
index 4f21011..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 x_26 = 0.0f;
-  bool x_39 = false;
-  float2 x_26_phi = 0.0f;
-  int x_5_phi = 0;
-  bool x_40_phi = false;
-  x_26_phi = float2(0.0f, 0.0f);
-  x_5_phi = 2;
-  while (true) {
-    float2 x_27 = 0.0f;
-    int x_4 = 0;
-    x_26 = x_26_phi;
-    int const x_5 = x_5_phi;
-    if ((x_5 < 3)) {
-    } else {
-      break;
-    }
-    {
-      float2 const x_32 = float2(1.0f, float(x_5));
-      x_27 = float2(x_32.x, x_32.y);
-      x_4 = as_type<int>((as_type<uint>(x_5) + as_type<uint>(1)));
-      x_26_phi = x_27;
-      x_5_phi = x_4;
-    }
-  }
-  bool const x_34 = (x_26.x != 1.0f);
-  x_40_phi = x_34;
-  if (!(x_34)) {
-    x_39 = (x_26.y != 2.0f);
-    x_40_phi = x_39;
-  }
-  bool const x_40 = x_40_phi;
-  if (x_40) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.spvasm
deleted file mode 100644
index 1720bd1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 84
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_26 "x_26"
-               OpName %x_39 "x_39"
-               OpName %x_26_phi "x_26_phi"
-               OpName %x_5_phi "x_5_phi"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_27 "x_27"
-               OpName %x_4 "x_4"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %27 = OpConstantComposite %v2float %float_0 %float_0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-    %float_2 = OpConstant %float 2
-         %71 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %72 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %73 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %x_26 = OpVariable %_ptr_Function_v2float Function %15
-       %x_39 = OpVariable %_ptr_Function_bool Function %19
-   %x_26_phi = OpVariable %_ptr_Function_v2float Function %15
-    %x_5_phi = OpVariable %_ptr_Function_int Function %24
-   %x_40_phi = OpVariable %_ptr_Function_bool Function %19
-       %x_27 = OpVariable %_ptr_Function_v2float Function %15
-        %x_4 = OpVariable %_ptr_Function_int Function %24
-               OpStore %x_26_phi %27
-               OpStore %x_5_phi %int_2
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %35 = OpLoad %v2float %x_26_phi
-               OpStore %x_26 %35
-         %36 = OpLoad %int %x_5_phi
-         %38 = OpSLessThan %bool %36 %int_3
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %30
-         %39 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %43 = OpConvertSToF %float %36
-         %44 = OpCompositeConstruct %v2float %float_1 %43
-         %45 = OpCompositeExtract %float %44 0
-         %46 = OpCompositeExtract %float %44 1
-         %47 = OpCompositeConstruct %v2float %45 %46
-               OpStore %x_27 %47
-         %49 = OpIAdd %int %36 %int_1
-               OpStore %x_4 %49
-         %50 = OpLoad %v2float %x_27
-               OpStore %x_26_phi %50
-         %51 = OpLoad %int %x_4
-               OpStore %x_5_phi %51
-               OpBranch %29
-         %30 = OpLabel
-         %55 = OpAccessChain %_ptr_Function_float %x_26 %uint_0
-         %56 = OpLoad %float %55
-         %57 = OpFOrdNotEqual %bool %56 %float_1
-               OpStore %x_40_phi %57
-         %58 = OpLogicalNot %bool %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-         %62 = OpAccessChain %_ptr_Function_float %x_26 %uint_1
-         %63 = OpLoad %float %62
-         %65 = OpFOrdNotEqual %bool %63 %float_2
-               OpStore %x_39 %65
-         %66 = OpLoad %bool %x_39
-               OpStore %x_40_phi %66
-               OpBranch %59
-         %59 = OpLabel
-         %67 = OpLoad %bool %x_40_phi
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpStore %x_GLF_color %71
-               OpBranch %68
-         %70 = OpLabel
-               OpStore %x_GLF_color %72
-               OpBranch %68
-         %68 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %73
-         %76 = OpLabel
-         %77 = OpFunctionCall %void %main_1
-         %78 = OpLoad %v4float %x_GLF_color
-         %79 = OpCompositeConstruct %main_out %78
-               OpReturnValue %79
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %81 = OpLabel
-         %82 = OpFunctionCall %main_out %main_inner
-         %83 = OpCompositeExtract %v4float %82 0
-               OpStore %x_GLF_color_1_1 %83
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.wgsl
deleted file mode 100644
index 2d4b641..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-const-folding-vector-shuffle/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,53 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_26 : vec2<f32>;
-  var x_39 : bool;
-  var x_26_phi : vec2<f32>;
-  var x_5_phi : i32;
-  var x_40_phi : bool;
-  x_26_phi = vec2<f32>(0.0, 0.0);
-  x_5_phi = 2;
-  loop {
-    var x_27 : vec2<f32>;
-    var x_4 : i32;
-    x_26 = x_26_phi;
-    let x_5 : i32 = x_5_phi;
-    if ((x_5 < 3)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_32 : vec2<f32> = vec2<f32>(1.0, f32(x_5));
-      x_27 = vec2<f32>(x_32.x, x_32.y);
-      x_4 = (x_5 + 1);
-      x_26_phi = x_27;
-      x_5_phi = x_4;
-    }
-  }
-  let x_34 : bool = (x_26.x != 1.0);
-  x_40_phi = x_34;
-  if (!(x_34)) {
-    x_39 = (x_26.y != 2.0);
-    x_40_phi = x_39;
-  }
-  let x_40 : bool = x_40_phi;
-  if (x_40) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b66716a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  f = atan2(1.0f, tanh(1.0f));
-  if (((f > 0.910000026f) & (f < 0.930000007f))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.msl
deleted file mode 100644
index cee837a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  f = atan2(1.0f, tanh(1.0f));
-  float const x_21 = f;
-  float const x_23 = f;
-  if (((x_21 > 0.910000026f) & (x_23 < 0.930000007f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index df0ff83..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-         %16 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %14 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-%float_0_910000026 = OpConstant %float 0.910000026
-       %bool = OpTypeBool
-%float_0_930000007 = OpConstant %float 0.930000007
-    %float_0 = OpConstant %float 0
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %32 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %33 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %14
-         %18 = OpExtInst %float %16 Tanh %float_1
-         %15 = OpExtInst %float %16 Atan2 %float_1 %18
-               OpStore %f %15
-         %19 = OpLoad %float %f
-         %20 = OpLoad %float %f
-         %22 = OpFOrdGreaterThan %bool %19 %float_0_910000026
-         %25 = OpFOrdLessThan %bool %20 %float_0_930000007
-         %26 = OpLogicalAnd %bool %22 %25
-               OpSelectionMerge %27 None
-               OpBranchConditional %26 %28 %29
-         %28 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %27
-         %29 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %33
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %main_1
-         %38 = OpLoad %v4float %x_GLF_color
-         %39 = OpCompositeConstruct %main_out %38
-               OpReturnValue %39
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %41 = OpLabel
-         %42 = OpFunctionCall %main_out %main_inner
-         %43 = OpCompositeExtract %v4float %42 0
-               OpStore %x_GLF_color_1_1 %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 12ed859..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  f = atan2(1.0, tanh(1.0));
-  let x_21 : f32 = f;
-  let x_23 : f32 = f;
-  if (((x_21 > 0.910000026) & (x_23 < 0.930000007))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 51bc1bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  f = atan2(1.0f, tanh(1.0f));
-  bool tint_tmp = (f > 0.910000026f);
-  if (tint_tmp) {
-    tint_tmp = (f < 0.930000007f);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7e20a84..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  f = atan2(1.0f, tanh(1.0f));
-  float const x_21 = f;
-  float const x_23 = f;
-  if (((x_21 > 0.910000026f) && (x_23 < 0.930000007f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2063706..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-         %16 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %14 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-%float_0_910000026 = OpConstant %float 0.910000026
-       %bool = OpTypeBool
-%float_0_930000007 = OpConstant %float 0.930000007
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %34 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %35 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %14
-         %18 = OpExtInst %float %16 Tanh %float_1
-         %15 = OpExtInst %float %16 Atan2 %float_1 %18
-               OpStore %f %15
-         %19 = OpLoad %float %f
-         %20 = OpLoad %float %f
-         %22 = OpFOrdGreaterThan %bool %19 %float_0_910000026
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %24
-         %25 = OpLabel
-         %27 = OpFOrdLessThan %bool %20 %float_0_930000007
-               OpBranch %24
-         %24 = OpLabel
-         %28 = OpPhi %bool %22 %11 %27 %25
-               OpSelectionMerge %29 None
-               OpBranchConditional %28 %30 %31
-         %30 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %29
-         %31 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %35
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-         %40 = OpLoad %v4float %x_GLF_color
-         %41 = OpCompositeConstruct %main_out %40
-               OpReturnValue %41
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %43 = OpLabel
-         %44 = OpFunctionCall %main_out %main_inner
-         %45 = OpCompositeExtract %v4float %44 0
-               OpStore %x_GLF_color_1_1 %45
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index aa69903..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constant-folding-atan-over-tanh/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  f = atan2(1.0, tanh(1.0));
-  let x_21 : f32 = f;
-  let x_23 : f32 = f;
-  if (((x_21 > 0.910000026) && (x_23 < 0.930000007))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e0331b0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,86 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_f1_(inout float f) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  const int x_60 = asint(x_8[1].x);
-  a = x_60;
-  const int x_62 = asint(x_8[2].x);
-  b = x_62;
-  const int x_64 = asint(x_8[2].x);
-  i = x_64;
-  while (true) {
-    const int x_69 = i;
-    const int x_71 = asint(x_8[4].x);
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    const int x_74 = a;
-    const int x_76 = asint(x_8[3].x);
-    if ((x_74 > x_76)) {
-      break;
-    }
-    const float x_80 = f;
-    const int x_83 = asint(x_8[1].x);
-    a = ((int(x_80) - (x_83 / 2)) + i);
-    b = (b + 1);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_92 = b;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_94 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_92 == x_94)) {
-    const int x_100 = asint(x_8[1].x);
-    return x_100;
-  } else {
-    const int x_102 = asint(x_8[2].x);
-    return x_102;
-  }
-  return 0;
-}
-
-void main_1() {
-  float param = 0.0f;
-  param = 0.699999988f;
-  const int x_34 = func_f1_(param);
-  const int x_36 = asint(x_8[1].x);
-  if ((x_34 == x_36)) {
-    const int x_42 = asint(x_8[1].x);
-    const int x_45 = asint(x_8[2].x);
-    const int x_48 = asint(x_8[2].x);
-    const int x_51 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  } else {
-    const int x_55 = asint(x_8[2].x);
-    const float x_56 = float(x_55);
-    x_GLF_color = float4(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5383bb2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_f1_(constant buf0& x_8, thread float* const f) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int const x_60 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  a = x_60;
-  int const x_62 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  b = x_62;
-  int const x_64 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  i = x_64;
-  while (true) {
-    int const x_69 = i;
-    int const x_71 = x_8.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    int const x_74 = a;
-    int const x_76 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_74 > x_76)) {
-      break;
-    }
-    float const x_80 = *(f);
-    int const x_83 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_86 = i;
-    a = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_80)) - as_type<uint>((x_83 / 2))))) + as_type<uint>(x_86)));
-    int const x_88 = b;
-    b = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    {
-      int const x_90 = i;
-      i = as_type<int>((as_type<uint>(x_90) + as_type<uint>(1)));
-    }
-  }
-  int const x_92 = b;
-  int const x_94 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_92 == x_94)) {
-    int const x_100 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    return x_100;
-  } else {
-    int const x_102 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    return x_102;
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float param = 0.0f;
-  param = 0.699999988f;
-  int const x_34 = func_f1_(x_8, &(param));
-  int const x_36 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_34 == x_36)) {
-    int const x_42 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_45 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_48 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_51 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  } else {
-    int const x_55 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    float const x_56 = float(x_55);
-    *(tint_symbol_3) = float4(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 92f35f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 123
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_f1_ "func_f1_"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %int %_ptr_Function_float
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %80 = OpTypeFunction %void
-         %85 = OpConstantNull %float
-%float_0_699999988 = OpConstant %float 0.699999988
-   %main_out = OpTypeStruct %v4float
-        %112 = OpTypeFunction %main_out
-   %func_f1_ = OpFunction %int None %15
-          %f = OpFunctionParameter %_ptr_Function_float
-         %19 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %22
-          %b = OpVariable %_ptr_Function_int Function %22
-          %i = OpVariable %_ptr_Function_int Function %22
-         %28 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %29 = OpLoad %int %28
-               OpStore %a %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %32 = OpLoad %int %31
-               OpStore %b %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %34 = OpLoad %int %33
-               OpStore %i %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %42 = OpLoad %int %41
-         %43 = OpSLessThan %bool %39 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %36
-         %45 = OpLabel
-         %48 = OpLoad %int %a
-         %50 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %51 = OpLoad %int %50
-         %52 = OpSGreaterThan %bool %48 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpBranch %36
-         %53 = OpLabel
-         %56 = OpLoad %float %f
-         %57 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpLoad %int %i
-         %60 = OpConvertFToS %int %56
-         %61 = OpSDiv %int %58 %int_2
-         %62 = OpISub %int %60 %61
-         %63 = OpIAdd %int %62 %59
-               OpStore %a %63
-         %64 = OpLoad %int %b
-         %65 = OpIAdd %int %64 %int_1
-               OpStore %b %65
-               OpBranch %37
-         %37 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %i %67
-               OpBranch %35
-         %36 = OpLabel
-         %68 = OpLoad %int %b
-         %70 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpIEqual %bool %68 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %77 = OpLoad %int %76
-               OpReturnValue %77
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %79 = OpLoad %int %78
-               OpReturnValue %79
-         %73 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %80
-         %83 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %85
-               OpStore %param %float_0_699999988
-         %87 = OpFunctionCall %int %func_f1_ %param
-         %89 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpIEqual %bool %87 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %94
-         %93 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %103 = OpConvertSToF %float %96
-        %104 = OpConvertSToF %float %98
-        %105 = OpConvertSToF %float %100
-        %106 = OpConvertSToF %float %102
-        %107 = OpCompositeConstruct %v4float %103 %104 %105 %106
-               OpStore %x_GLF_color %107
-               OpBranch %92
-         %94 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %109
-        %111 = OpCompositeConstruct %v4float %110 %110 %110 %110
-               OpStore %x_GLF_color %111
-               OpBranch %92
-         %92 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %112
-        %115 = OpLabel
-        %116 = OpFunctionCall %void %main_1
-        %117 = OpLoad %v4float %x_GLF_color
-        %118 = OpCompositeConstruct %main_out %117
-               OpReturnValue %118
-               OpFunctionEnd
-       %main = OpFunction %void None %80
-        %120 = OpLabel
-        %121 = OpFunctionCall %main_out %main_inner
-        %122 = OpCompositeExtract %v4float %121 0
-               OpStore %x_GLF_color_1_1 %122
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e697708..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,86 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_f1_(f : ptr<function, f32>) -> i32 {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  let x_60 : i32 = x_8.x_GLF_uniform_int_values[1];
-  a = x_60;
-  let x_62 : i32 = x_8.x_GLF_uniform_int_values[2];
-  b = x_62;
-  let x_64 : i32 = x_8.x_GLF_uniform_int_values[2];
-  i = x_64;
-  loop {
-    let x_69 : i32 = i;
-    let x_71 : i32 = x_8.x_GLF_uniform_int_values[4];
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    let x_74 : i32 = a;
-    let x_76 : i32 = x_8.x_GLF_uniform_int_values[3];
-    if ((x_74 > x_76)) {
-      break;
-    }
-    let x_80 : f32 = *(f);
-    let x_83 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_86 : i32 = i;
-    a = ((i32(x_80) - (x_83 / 2)) + x_86);
-    let x_88 : i32 = b;
-    b = (x_88 + 1);
-
-    continuing {
-      let x_90 : i32 = i;
-      i = (x_90 + 1);
-    }
-  }
-  let x_92 : i32 = b;
-  let x_94 : i32 = x_8.x_GLF_uniform_int_values[0];
-  if ((x_92 == x_94)) {
-    let x_100 : i32 = x_8.x_GLF_uniform_int_values[1];
-    return x_100;
-  } else {
-    let x_102 : i32 = x_8.x_GLF_uniform_int_values[2];
-    return x_102;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var param : f32;
-  param = 0.699999988;
-  let x_34 : i32 = func_f1_(&(param));
-  let x_36 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_34 == x_36)) {
-    let x_42 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_45 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_48 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_51 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
-  } else {
-    let x_55 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_56 : f32 = f32(x_55);
-    x_GLF_color = vec4<f32>(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e0331b0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,86 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_f1_(inout float f) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  const int x_60 = asint(x_8[1].x);
-  a = x_60;
-  const int x_62 = asint(x_8[2].x);
-  b = x_62;
-  const int x_64 = asint(x_8[2].x);
-  i = x_64;
-  while (true) {
-    const int x_69 = i;
-    const int x_71 = asint(x_8[4].x);
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    const int x_74 = a;
-    const int x_76 = asint(x_8[3].x);
-    if ((x_74 > x_76)) {
-      break;
-    }
-    const float x_80 = f;
-    const int x_83 = asint(x_8[1].x);
-    a = ((int(x_80) - (x_83 / 2)) + i);
-    b = (b + 1);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_92 = b;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_94 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_92 == x_94)) {
-    const int x_100 = asint(x_8[1].x);
-    return x_100;
-  } else {
-    const int x_102 = asint(x_8[2].x);
-    return x_102;
-  }
-  return 0;
-}
-
-void main_1() {
-  float param = 0.0f;
-  param = 0.699999988f;
-  const int x_34 = func_f1_(param);
-  const int x_36 = asint(x_8[1].x);
-  if ((x_34 == x_36)) {
-    const int x_42 = asint(x_8[1].x);
-    const int x_45 = asint(x_8[2].x);
-    const int x_48 = asint(x_8[2].x);
-    const int x_51 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  } else {
-    const int x_55 = asint(x_8[2].x);
-    const float x_56 = float(x_55);
-    x_GLF_color = float4(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5383bb2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_f1_(constant buf0& x_8, thread float* const f) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int const x_60 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  a = x_60;
-  int const x_62 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  b = x_62;
-  int const x_64 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  i = x_64;
-  while (true) {
-    int const x_69 = i;
-    int const x_71 = x_8.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    int const x_74 = a;
-    int const x_76 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_74 > x_76)) {
-      break;
-    }
-    float const x_80 = *(f);
-    int const x_83 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_86 = i;
-    a = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_80)) - as_type<uint>((x_83 / 2))))) + as_type<uint>(x_86)));
-    int const x_88 = b;
-    b = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    {
-      int const x_90 = i;
-      i = as_type<int>((as_type<uint>(x_90) + as_type<uint>(1)));
-    }
-  }
-  int const x_92 = b;
-  int const x_94 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_92 == x_94)) {
-    int const x_100 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    return x_100;
-  } else {
-    int const x_102 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    return x_102;
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float param = 0.0f;
-  param = 0.699999988f;
-  int const x_34 = func_f1_(x_8, &(param));
-  int const x_36 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_34 == x_36)) {
-    int const x_42 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_45 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_48 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_51 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  } else {
-    int const x_55 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    float const x_56 = float(x_55);
-    *(tint_symbol_3) = float4(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 92f35f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 123
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_f1_ "func_f1_"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %int %_ptr_Function_float
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %80 = OpTypeFunction %void
-         %85 = OpConstantNull %float
-%float_0_699999988 = OpConstant %float 0.699999988
-   %main_out = OpTypeStruct %v4float
-        %112 = OpTypeFunction %main_out
-   %func_f1_ = OpFunction %int None %15
-          %f = OpFunctionParameter %_ptr_Function_float
-         %19 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %22
-          %b = OpVariable %_ptr_Function_int Function %22
-          %i = OpVariable %_ptr_Function_int Function %22
-         %28 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %29 = OpLoad %int %28
-               OpStore %a %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %32 = OpLoad %int %31
-               OpStore %b %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %34 = OpLoad %int %33
-               OpStore %i %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %42 = OpLoad %int %41
-         %43 = OpSLessThan %bool %39 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %36
-         %45 = OpLabel
-         %48 = OpLoad %int %a
-         %50 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %51 = OpLoad %int %50
-         %52 = OpSGreaterThan %bool %48 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpBranch %36
-         %53 = OpLabel
-         %56 = OpLoad %float %f
-         %57 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpLoad %int %i
-         %60 = OpConvertFToS %int %56
-         %61 = OpSDiv %int %58 %int_2
-         %62 = OpISub %int %60 %61
-         %63 = OpIAdd %int %62 %59
-               OpStore %a %63
-         %64 = OpLoad %int %b
-         %65 = OpIAdd %int %64 %int_1
-               OpStore %b %65
-               OpBranch %37
-         %37 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %i %67
-               OpBranch %35
-         %36 = OpLabel
-         %68 = OpLoad %int %b
-         %70 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpIEqual %bool %68 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %77 = OpLoad %int %76
-               OpReturnValue %77
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %79 = OpLoad %int %78
-               OpReturnValue %79
-         %73 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %80
-         %83 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %85
-               OpStore %param %float_0_699999988
-         %87 = OpFunctionCall %int %func_f1_ %param
-         %89 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpIEqual %bool %87 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %94
-         %93 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %103 = OpConvertSToF %float %96
-        %104 = OpConvertSToF %float %98
-        %105 = OpConvertSToF %float %100
-        %106 = OpConvertSToF %float %102
-        %107 = OpCompositeConstruct %v4float %103 %104 %105 %106
-               OpStore %x_GLF_color %107
-               OpBranch %92
-         %94 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %109
-        %111 = OpCompositeConstruct %v4float %110 %110 %110 %110
-               OpStore %x_GLF_color %111
-               OpBranch %92
-         %92 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %112
-        %115 = OpLabel
-        %116 = OpFunctionCall %void %main_1
-        %117 = OpLoad %v4float %x_GLF_color
-        %118 = OpCompositeConstruct %main_out %117
-               OpReturnValue %118
-               OpFunctionEnd
-       %main = OpFunction %void None %80
-        %120 = OpLabel
-        %121 = OpFunctionCall %main_out %main_inner
-        %122 = OpCompositeExtract %v4float %121 0
-               OpStore %x_GLF_color_1_1 %122
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e697708..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-combine-add-sub/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,86 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_f1_(f : ptr<function, f32>) -> i32 {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  let x_60 : i32 = x_8.x_GLF_uniform_int_values[1];
-  a = x_60;
-  let x_62 : i32 = x_8.x_GLF_uniform_int_values[2];
-  b = x_62;
-  let x_64 : i32 = x_8.x_GLF_uniform_int_values[2];
-  i = x_64;
-  loop {
-    let x_69 : i32 = i;
-    let x_71 : i32 = x_8.x_GLF_uniform_int_values[4];
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    let x_74 : i32 = a;
-    let x_76 : i32 = x_8.x_GLF_uniform_int_values[3];
-    if ((x_74 > x_76)) {
-      break;
-    }
-    let x_80 : f32 = *(f);
-    let x_83 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_86 : i32 = i;
-    a = ((i32(x_80) - (x_83 / 2)) + x_86);
-    let x_88 : i32 = b;
-    b = (x_88 + 1);
-
-    continuing {
-      let x_90 : i32 = i;
-      i = (x_90 + 1);
-    }
-  }
-  let x_92 : i32 = b;
-  let x_94 : i32 = x_8.x_GLF_uniform_int_values[0];
-  if ((x_92 == x_94)) {
-    let x_100 : i32 = x_8.x_GLF_uniform_int_values[1];
-    return x_100;
-  } else {
-    let x_102 : i32 = x_8.x_GLF_uniform_int_values[2];
-    return x_102;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var param : f32;
-  param = 0.699999988;
-  let x_34 : i32 = func_f1_(&(param));
-  let x_36 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_34 == x_36)) {
-    let x_42 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_45 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_48 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_51 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
-  } else {
-    let x_55 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_56 : f32 = f32(x_55);
-    x_GLF_color = vec4<f32>(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2a6bcdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 mixed = float2(0.0f, 0.0f);
-  const float2 x_30 = asfloat(x_6[0].xy);
-  mixed = lerp(float2(1.0f, 1.0f), x_30, float2(0.5f, 0.5f));
-  if (all((mixed == float2(1.0f, 1.0f)))) {
-    const float x_40 = mixed.x;
-    x_GLF_color = float4(x_40, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.msl
deleted file mode 100644
index 13d3cb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 mixed = 0.0f;
-  float2 const x_30 = x_6.one;
-  mixed = mix(float2(1.0f, 1.0f), x_30, float2(0.5f, 0.5f));
-  float2 const x_33 = mixed;
-  if (all((x_33 == float2(1.0f, 1.0f)))) {
-    float const x_40 = mixed.x;
-    *(tint_symbol_3) = float4(x_40, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index db3fe1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %mixed "mixed"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_1 = OpConstant %float 1
-         %27 = OpConstantComposite %v2float %float_1 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %29 = OpConstantComposite %v2float %float_0_5 %float_0_5
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_0 = OpConstant %float 0
-         %43 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %44 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-      %mixed = OpVariable %_ptr_Function_v2float Function %18
-         %22 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %23 = OpLoad %v2float %22
-         %24 = OpExtInst %v2float %25 FMix %27 %23 %29
-               OpStore %mixed %24
-         %30 = OpLoad %v2float %mixed
-         %33 = OpFOrdEqual %v2bool %30 %27
-         %31 = OpAll %bool %33
-               OpSelectionMerge %35 None
-               OpBranchConditional %31 %36 %37
-         %36 = OpLabel
-         %39 = OpAccessChain %_ptr_Function_float %mixed %uint_0
-         %40 = OpLoad %float %39
-         %42 = OpCompositeConstruct %v4float %40 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %42
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %v4float %x_GLF_color
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %52 = OpLabel
-         %53 = OpFunctionCall %main_out %main_inner
-         %54 = OpCompositeExtract %v4float %53 0
-               OpStore %x_GLF_color_1_1 %54
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 04be2cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  one : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var mixed : vec2<f32>;
-  let x_30 : vec2<f32> = x_6.one;
-  mixed = mix(vec2<f32>(1.0, 1.0), x_30, vec2<f32>(0.5, 0.5));
-  let x_33 : vec2<f32> = mixed;
-  if (all((x_33 == vec2<f32>(1.0, 1.0)))) {
-    let x_40 : f32 = mixed.x;
-    x_GLF_color = vec4<f32>(x_40, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 2a6bcdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 mixed = float2(0.0f, 0.0f);
-  const float2 x_30 = asfloat(x_6[0].xy);
-  mixed = lerp(float2(1.0f, 1.0f), x_30, float2(0.5f, 0.5f));
-  if (all((mixed == float2(1.0f, 1.0f)))) {
-    const float x_40 = mixed.x;
-    x_GLF_color = float4(x_40, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.msl
deleted file mode 100644
index 13d3cb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 mixed = 0.0f;
-  float2 const x_30 = x_6.one;
-  mixed = mix(float2(1.0f, 1.0f), x_30, float2(0.5f, 0.5f));
-  float2 const x_33 = mixed;
-  if (all((x_33 == float2(1.0f, 1.0f)))) {
-    float const x_40 = mixed.x;
-    *(tint_symbol_3) = float4(x_40, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index db3fe1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %mixed "mixed"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_1 = OpConstant %float 1
-         %27 = OpConstantComposite %v2float %float_1 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %29 = OpConstantComposite %v2float %float_0_5 %float_0_5
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_0 = OpConstant %float 0
-         %43 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %44 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-      %mixed = OpVariable %_ptr_Function_v2float Function %18
-         %22 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %23 = OpLoad %v2float %22
-         %24 = OpExtInst %v2float %25 FMix %27 %23 %29
-               OpStore %mixed %24
-         %30 = OpLoad %v2float %mixed
-         %33 = OpFOrdEqual %v2bool %30 %27
-         %31 = OpAll %bool %33
-               OpSelectionMerge %35 None
-               OpBranchConditional %31 %36 %37
-         %36 = OpLabel
-         %39 = OpAccessChain %_ptr_Function_float %mixed %uint_0
-         %40 = OpLoad %float %39
-         %42 = OpCompositeConstruct %v4float %40 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %42
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %v4float %x_GLF_color
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %52 = OpLabel
-         %53 = OpFunctionCall %main_out %main_inner
-         %54 = OpCompositeExtract %v4float %53 0
-               OpStore %x_GLF_color_1_1 %54
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 04be2cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-constants-mix-uniform/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  one : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var mixed : vec2<f32>;
-  let x_30 : vec2<f32> = x_6.one;
-  mixed = mix(vec2<f32>(1.0, 1.0), x_30, vec2<f32>(0.5, 0.5));
-  let x_33 : vec2<f32> = mixed;
-  if (all((x_33 == vec2<f32>(1.0, 1.0)))) {
-    let x_40 : f32 = mixed.x;
-    x_GLF_color = vec4<f32>(x_40, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index cf1b13a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[4];
-};
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[1];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_28 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_31 = asint(x_5[1].x);
-  const int x_34 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_28), float(x_31), float(x_34), float(x_37));
-  while (true) {
-    const int x_45 = asint(x_7[0].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_45 == x_47)) {
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    const int x_52 = asint(x_7[0].x);
-    const int x_54 = asint(x_5[2].x);
-    if ((x_52 == x_54)) {
-      break;
-    }
-    const int x_59 = asint(x_7[0].x);
-    const int x_61 = asint(x_5[3].x);
-    if ((x_59 == x_61)) {
-      discard;
-    }
-    return;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_66 = asint(x_5[1].x);
-  const float x_67 = float(x_66);
-  x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 97fc701..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct buf1 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_3) {
-  int const x_28 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_31 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_34 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_37 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_28), float(x_31), float(x_34), float(x_37));
-  while (true) {
-    int const x_45 = x_7.zero;
-    int const x_47 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_45 == x_47)) {
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    int const x_52 = x_7.zero;
-    int const x_54 = x_5.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_52 == x_54)) {
-      break;
-    }
-    int const x_59 = x_7.zero;
-    int const x_61 = x_5.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_59 == x_61)) {
-      discard_fragment();
-    }
-    return;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_66 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  float const x_67 = float(x_66);
-  *(tint_symbol_3) = float4(x_67, x_67, x_67, x_67);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_7 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 21f4619..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 83
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf1 = OpTypeStruct %int
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %25 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %26 = OpLoad %int %25
-         %28 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %29 = OpLoad %int %28
-         %30 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %31 = OpLoad %int %30
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %33 = OpLoad %int %32
-         %34 = OpConvertSToF %float %26
-         %35 = OpConvertSToF %float %29
-         %36 = OpConvertSToF %float %31
-         %37 = OpConvertSToF %float %33
-         %38 = OpCompositeConstruct %v4float %34 %35 %36 %37
-               OpStore %x_GLF_color %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpIEqual %bool %44 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %49
-         %50 = OpLabel
-               OpBranch %41
-         %49 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %52 = OpLoad %int %51
-         %54 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %52 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpBranch %40
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %60 = OpLoad %int %59
-         %62 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_3
-         %63 = OpLoad %int %62
-         %64 = OpIEqual %bool %60 %63
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-               OpKill
-         %65 = OpLabel
-               OpReturn
-         %41 = OpLabel
-               OpBranchConditional %false %39 %40
-         %40 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %69
-         %71 = OpCompositeConstruct %v4float %70 %70 %70 %70
-               OpStore %x_GLF_color %71
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8e2cdde..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[block]]
-struct buf1 {
-  zero : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-fn main_1() {
-  let x_28 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_31 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_34 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_37 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_28), f32(x_31), f32(x_34), f32(x_37));
-  loop {
-    let x_45 : i32 = x_7.zero;
-    let x_47 : i32 = x_5.x_GLF_uniform_int_values[0];
-    if ((x_45 == x_47)) {
-      continue;
-    }
-    let x_52 : i32 = x_7.zero;
-    let x_54 : i32 = x_5.x_GLF_uniform_int_values[2];
-    if ((x_52 == x_54)) {
-      break;
-    }
-    let x_59 : i32 = x_7.zero;
-    let x_61 : i32 = x_5.x_GLF_uniform_int_values[3];
-    if ((x_59 == x_61)) {
-      discard;
-    }
-    return;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_66 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_67 : f32 = f32(x_66);
-  x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index cf1b13a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[4];
-};
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[1];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_28 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_31 = asint(x_5[1].x);
-  const int x_34 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_28), float(x_31), float(x_34), float(x_37));
-  while (true) {
-    const int x_45 = asint(x_7[0].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_45 == x_47)) {
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    const int x_52 = asint(x_7[0].x);
-    const int x_54 = asint(x_5[2].x);
-    if ((x_52 == x_54)) {
-      break;
-    }
-    const int x_59 = asint(x_7[0].x);
-    const int x_61 = asint(x_5[3].x);
-    if ((x_59 == x_61)) {
-      discard;
-    }
-    return;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_66 = asint(x_5[1].x);
-  const float x_67 = float(x_66);
-  x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 97fc701..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct buf1 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_3) {
-  int const x_28 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_31 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_34 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_37 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_28), float(x_31), float(x_34), float(x_37));
-  while (true) {
-    int const x_45 = x_7.zero;
-    int const x_47 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_45 == x_47)) {
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    int const x_52 = x_7.zero;
-    int const x_54 = x_5.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_52 == x_54)) {
-      break;
-    }
-    int const x_59 = x_7.zero;
-    int const x_61 = x_5.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_59 == x_61)) {
-      discard_fragment();
-    }
-    return;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_66 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  float const x_67 = float(x_66);
-  *(tint_symbol_3) = float4(x_67, x_67, x_67, x_67);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_7 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 21f4619..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 83
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf1 = OpTypeStruct %int
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %25 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %26 = OpLoad %int %25
-         %28 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %29 = OpLoad %int %28
-         %30 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %31 = OpLoad %int %30
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %33 = OpLoad %int %32
-         %34 = OpConvertSToF %float %26
-         %35 = OpConvertSToF %float %29
-         %36 = OpConvertSToF %float %31
-         %37 = OpConvertSToF %float %33
-         %38 = OpCompositeConstruct %v4float %34 %35 %36 %37
-               OpStore %x_GLF_color %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpIEqual %bool %44 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %49
-         %50 = OpLabel
-               OpBranch %41
-         %49 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %52 = OpLoad %int %51
-         %54 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %52 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpBranch %40
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %60 = OpLoad %int %59
-         %62 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_3
-         %63 = OpLoad %int %62
-         %64 = OpIEqual %bool %60 %63
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-               OpKill
-         %65 = OpLabel
-               OpReturn
-         %41 = OpLabel
-               OpBranchConditional %false %39 %40
-         %40 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %69
-         %71 = OpCompositeConstruct %v4float %70 %70 %70 %70
-               OpStore %x_GLF_color %71
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8e2cdde..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-continue-break-discard-return-in-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[block]]
-struct buf1 {
-  zero : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-fn main_1() {
-  let x_28 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_31 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_34 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_37 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_28), f32(x_31), f32(x_34), f32(x_37));
-  loop {
-    let x_45 : i32 = x_7.zero;
-    let x_47 : i32 = x_5.x_GLF_uniform_int_values[0];
-    if ((x_45 == x_47)) {
-      continue;
-    }
-    let x_52 : i32 = x_7.zero;
-    let x_54 : i32 = x_5.x_GLF_uniform_int_values[2];
-    if ((x_52 == x_54)) {
-      break;
-    }
-    let x_59 : i32 = x_7.zero;
-    let x_61 : i32 = x_5.x_GLF_uniform_int_values[3];
-    if ((x_59 == x_61)) {
-      discard;
-    }
-    return;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_66 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_67 : f32 = f32(x_66);
-  x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index afcae45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,125 +0,0 @@
-struct Array {
-  int values[2];
-};
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_50 = false;
-  int x_15 = 0;
-  int x_16 = 0;
-  Array param = (Array)0;
-  int x_19 = 0;
-  int x_20_phi = 0;
-  const int tint_symbol_2[2] = {0, 0};
-  const Array tint_symbol_3 = {tint_symbol_2};
-  param = tint_symbol_3;
-  x_50 = false;
-  while (true) {
-    int x_19_phi = 0;
-    bool x_63_phi = false;
-    while (true) {
-      const int x_17 = asint(x_8[0].x);
-      const int x_18 = param.values[x_17];
-      if ((x_18 == 1)) {
-        x_50 = true;
-        x_15 = 1;
-        x_19_phi = 1;
-        x_63_phi = true;
-        break;
-      }
-      x_19_phi = 0;
-      x_63_phi = false;
-      break;
-    }
-    x_19 = x_19_phi;
-    const bool x_63 = x_63_phi;
-    x_20_phi = x_19;
-    if (x_63) {
-      break;
-    }
-    x_50 = true;
-    x_15 = 1;
-    x_20_phi = 1;
-    break;
-  }
-  const int x_20 = x_20_phi;
-  x_16 = x_20;
-  if ((x_20 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_Array_i1_2_1_(inout Array a) {
-  bool x_70 = false;
-  int x_12 = 0;
-  int x_13 = 0;
-  bool x_72_phi = false;
-  int x_14_phi = 0;
-  x_72_phi = false;
-  while (true) {
-    bool x_77 = false;
-    bool x_77_phi = false;
-    int x_13_phi = 0;
-    bool x_87_phi = false;
-    x_77_phi = x_72_phi;
-    while (true) {
-      x_77 = x_77_phi;
-      const int x_10 = asint(x_8[0].x);
-      const int x_11 = a.values[x_10];
-      if ((x_11 == 1)) {
-        x_70 = true;
-        x_12 = 1;
-        x_13_phi = 1;
-        x_87_phi = true;
-        break;
-      }
-      x_13_phi = 0;
-      x_87_phi = x_77;
-      break;
-      {
-        x_77_phi = false;
-      }
-    }
-    x_13 = x_13_phi;
-    const bool x_87 = x_87_phi;
-    x_14_phi = x_13;
-    if (x_87) {
-      break;
-    }
-    x_70 = true;
-    x_12 = 1;
-    x_14_phi = 1;
-    break;
-    {
-      x_72_phi = false;
-    }
-  }
-  return x_14_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.msl
deleted file mode 100644
index 976e76d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,132 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct Array {
-  tint_array_wrapper values;
-};
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_5) {
-  bool x_50 = false;
-  int x_15 = 0;
-  int x_16 = 0;
-  Array param = {};
-  int x_19 = 0;
-  int x_20_phi = 0;
-  tint_array_wrapper const tint_symbol_2 = {.arr={0, 0}};
-  Array const tint_symbol_3 = {.values=tint_symbol_2};
-  param = tint_symbol_3;
-  x_50 = false;
-  while (true) {
-    int x_19_phi = 0;
-    bool x_63_phi = false;
-    while (true) {
-      int const x_17 = x_8.zero;
-      int const x_18 = param.values.arr[x_17];
-      if ((x_18 == 1)) {
-        x_50 = true;
-        x_15 = 1;
-        x_19_phi = 1;
-        x_63_phi = true;
-        break;
-      }
-      x_19_phi = 0;
-      x_63_phi = false;
-      break;
-    }
-    x_19 = x_19_phi;
-    bool const x_63 = x_63_phi;
-    x_20_phi = x_19;
-    if (x_63) {
-      break;
-    }
-    x_50 = true;
-    x_15 = 1;
-    x_20_phi = 1;
-    break;
-  }
-  int const x_20 = x_20_phi;
-  x_16 = x_20;
-  if ((x_20 == 1)) {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_6) {
-  main_1(x_8, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_Array_i1_2_1_(constant buf0& x_8, thread Array* const a) {
-  bool x_70 = false;
-  int x_12 = 0;
-  int x_13 = 0;
-  bool x_72_phi = false;
-  int x_14_phi = 0;
-  x_72_phi = false;
-  while (true) {
-    bool x_77 = false;
-    bool x_77_phi = false;
-    int x_13_phi = 0;
-    bool x_87_phi = false;
-    bool const x_72 = x_72_phi;
-    x_77_phi = x_72;
-    while (true) {
-      x_77 = x_77_phi;
-      int const x_10 = x_8.zero;
-      int const x_11 = (*(a)).values.arr[x_10];
-      if ((x_11 == 1)) {
-        x_70 = true;
-        x_12 = 1;
-        x_13_phi = 1;
-        x_87_phi = true;
-        break;
-      }
-      x_13_phi = 0;
-      x_87_phi = x_77;
-      break;
-      {
-        x_77_phi = false;
-      }
-    }
-    x_13 = x_13_phi;
-    bool const x_87 = x_87_phi;
-    x_14_phi = x_13;
-    if (x_87) {
-      break;
-    }
-    x_70 = true;
-    x_12 = 1;
-    x_14_phi = 1;
-    break;
-    {
-      x_72_phi = false;
-    }
-  }
-  int const x_14 = x_14_phi;
-  return x_14;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c0c863c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,247 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_50 "x_50"
-               OpName %x_15 "x_15"
-               OpName %x_16 "x_16"
-               OpName %Array "Array"
-               OpMemberName %Array 0 "values"
-               OpName %param "param"
-               OpName %x_19 "x_19"
-               OpName %x_20_phi "x_20_phi"
-               OpName %x_19_phi "x_19_phi"
-               OpName %x_63_phi "x_63_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_struct_Array_i1_2_1_ "func_struct_Array_i1_2_1_"
-               OpName %a "a"
-               OpName %x_70 "x_70"
-               OpName %x_12 "x_12"
-               OpName %x_13 "x_13"
-               OpName %x_72_phi "x_72_phi"
-               OpName %x_14_phi "x_14_phi"
-               OpName %x_77 "x_77"
-               OpName %x_77_phi "x_77_phi"
-               OpName %x_13_phi "x_13_phi"
-               OpName %x_87_phi "x_87_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %Array 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %20 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-      %Array = OpTypeStruct %_arr_int_uint_2
-%_ptr_Function_Array = OpTypePointer Function %Array
-         %31 = OpConstantNull %Array
-      %int_0 = OpConstant %int 0
-         %35 = OpConstantComposite %_arr_int_uint_2 %int_0 %int_0
-         %36 = OpConstantComposite %Array %35
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %70 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %71 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-         %83 = OpTypeFunction %int %_ptr_Function_Array
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_50 = OpVariable %_ptr_Function_bool Function %20
-       %x_15 = OpVariable %_ptr_Function_int Function %23
-       %x_16 = OpVariable %_ptr_Function_int Function %23
-      %param = OpVariable %_ptr_Function_Array Function %31
-       %x_19 = OpVariable %_ptr_Function_int Function %23
-   %x_20_phi = OpVariable %_ptr_Function_int Function %23
-   %x_19_phi = OpVariable %_ptr_Function_int Function %23
-   %x_63_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_50 %false
-               OpStore %param %36
-               OpStore %x_50 %false
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpLoopMerge %44 %45 None
-               OpBranch %46
-         %46 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Function_int %param %uint_0 %50
-         %52 = OpLoad %int %51
-         %54 = OpIEqual %bool %52 %int_1
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-               OpStore %x_50 %true
-               OpStore %x_15 %int_1
-               OpStore %x_19_phi %int_1
-               OpStore %x_63_phi %true
-               OpBranch %44
-         %55 = OpLabel
-               OpStore %x_19_phi %int_0
-               OpStore %x_63_phi %false
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %43
-         %44 = OpLabel
-         %58 = OpLoad %int %x_19_phi
-               OpStore %x_19 %58
-         %59 = OpLoad %bool %x_63_phi
-         %60 = OpLoad %int %x_19
-               OpStore %x_20_phi %60
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %61
-         %62 = OpLabel
-               OpBranch %38
-         %61 = OpLabel
-               OpStore %x_50 %true
-               OpStore %x_15 %int_1
-               OpStore %x_20_phi %int_1
-               OpBranch %38
-         %39 = OpLabel
-               OpBranch %37
-         %38 = OpLabel
-         %63 = OpLoad %int %x_20_phi
-               OpStore %x_16 %63
-         %64 = OpIEqual %bool %63 %int_1
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %67
-         %66 = OpLabel
-               OpStore %x_GLF_color %70
-               OpBranch %65
-         %67 = OpLabel
-               OpStore %x_GLF_color %71
-               OpBranch %65
-         %65 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
-%func_struct_Array_i1_2_1_ = OpFunction %int None %83
-          %a = OpFunctionParameter %_ptr_Function_Array
-         %86 = OpLabel
-       %x_70 = OpVariable %_ptr_Function_bool Function %20
-       %x_12 = OpVariable %_ptr_Function_int Function %23
-       %x_13 = OpVariable %_ptr_Function_int Function %23
-   %x_72_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_14_phi = OpVariable %_ptr_Function_int Function %23
-       %x_77 = OpVariable %_ptr_Function_bool Function %20
-   %x_77_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_13_phi = OpVariable %_ptr_Function_int Function %23
-   %x_87_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_70 %false
-               OpStore %x_72_phi %false
-               OpBranch %92
-         %92 = OpLabel
-               OpLoopMerge %93 %94 None
-               OpBranch %95
-         %95 = OpLabel
-        %100 = OpLoad %bool %x_72_phi
-               OpStore %x_77_phi %100
-               OpBranch %101
-        %101 = OpLabel
-               OpLoopMerge %102 %103 None
-               OpBranch %104
-        %104 = OpLabel
-        %105 = OpLoad %bool %x_77_phi
-               OpStore %x_77 %105
-        %106 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-        %107 = OpLoad %int %106
-        %109 = OpAccessChain %_ptr_Function_int %a %uint_0 %107
-        %110 = OpLoad %int %109
-        %111 = OpIEqual %bool %110 %int_1
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %112
-        %113 = OpLabel
-               OpStore %x_70 %true
-               OpStore %x_12 %int_1
-               OpStore %x_13_phi %int_1
-               OpStore %x_87_phi %true
-               OpBranch %102
-        %112 = OpLabel
-               OpStore %x_13_phi %int_0
-        %114 = OpLoad %bool %x_77
-               OpStore %x_87_phi %114
-               OpBranch %102
-        %103 = OpLabel
-               OpStore %x_77_phi %false
-               OpBranch %101
-        %102 = OpLabel
-        %115 = OpLoad %int %x_13_phi
-               OpStore %x_13 %115
-        %116 = OpLoad %bool %x_87_phi
-        %117 = OpLoad %int %x_13
-               OpStore %x_14_phi %117
-               OpSelectionMerge %118 None
-               OpBranchConditional %116 %119 %118
-        %119 = OpLabel
-               OpBranch %93
-        %118 = OpLabel
-               OpStore %x_70 %true
-               OpStore %x_12 %int_1
-               OpStore %x_14_phi %int_1
-               OpBranch %93
-         %94 = OpLabel
-               OpStore %x_72_phi %false
-               OpBranch %92
-         %93 = OpLabel
-        %120 = OpLoad %int %x_14_phi
-               OpReturnValue %120
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c3fe68b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,122 +0,0 @@
-struct Array {
-  values : array<i32, 2>;
-};
-
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_50 : bool = false;
-  var x_15 : i32;
-  var x_16 : i32;
-  var param : Array;
-  var x_19 : i32;
-  var x_20_phi : i32;
-  param = Array(array<i32, 2>(0, 0));
-  x_50 = false;
-  loop {
-    var x_19_phi : i32;
-    var x_63_phi : bool;
-    loop {
-      let x_17 : i32 = x_8.zero;
-      let x_18 : i32 = param.values[x_17];
-      if ((x_18 == 1)) {
-        x_50 = true;
-        x_15 = 1;
-        x_19_phi = 1;
-        x_63_phi = true;
-        break;
-      }
-      x_19_phi = 0;
-      x_63_phi = false;
-      break;
-    }
-    x_19 = x_19_phi;
-    let x_63 : bool = x_63_phi;
-    x_20_phi = x_19;
-    if (x_63) {
-      break;
-    }
-    x_50 = true;
-    x_15 = 1;
-    x_20_phi = 1;
-    break;
-  }
-  let x_20 : i32 = x_20_phi;
-  x_16 = x_20;
-  if ((x_20 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_struct_Array_i1_2_1_(a : ptr<function, Array>) -> i32 {
-  var x_70 : bool = false;
-  var x_12 : i32;
-  var x_13 : i32;
-  var x_72_phi : bool;
-  var x_14_phi : i32;
-  x_72_phi = false;
-  loop {
-    var x_77 : bool;
-    var x_77_phi : bool;
-    var x_13_phi : i32;
-    var x_87_phi : bool;
-    let x_72 : bool = x_72_phi;
-    x_77_phi = x_72;
-    loop {
-      x_77 = x_77_phi;
-      let x_10 : i32 = x_8.zero;
-      let x_11 : i32 = (*(a)).values[x_10];
-      if ((x_11 == 1)) {
-        x_70 = true;
-        x_12 = 1;
-        x_13_phi = 1;
-        x_87_phi = true;
-        break;
-      }
-      x_13_phi = 0;
-      x_87_phi = x_77;
-      break;
-
-      continuing {
-        x_77_phi = false;
-      }
-    }
-    x_13 = x_13_phi;
-    let x_87 : bool = x_87_phi;
-    x_14_phi = x_13;
-    if (x_87) {
-      break;
-    }
-    x_70 = true;
-    x_12 = 1;
-    x_14_phi = 1;
-    break;
-
-    continuing {
-      x_72_phi = false;
-    }
-  }
-  let x_14 : i32 = x_14_phi;
-  return x_14;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index afcae45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,125 +0,0 @@
-struct Array {
-  int values[2];
-};
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_50 = false;
-  int x_15 = 0;
-  int x_16 = 0;
-  Array param = (Array)0;
-  int x_19 = 0;
-  int x_20_phi = 0;
-  const int tint_symbol_2[2] = {0, 0};
-  const Array tint_symbol_3 = {tint_symbol_2};
-  param = tint_symbol_3;
-  x_50 = false;
-  while (true) {
-    int x_19_phi = 0;
-    bool x_63_phi = false;
-    while (true) {
-      const int x_17 = asint(x_8[0].x);
-      const int x_18 = param.values[x_17];
-      if ((x_18 == 1)) {
-        x_50 = true;
-        x_15 = 1;
-        x_19_phi = 1;
-        x_63_phi = true;
-        break;
-      }
-      x_19_phi = 0;
-      x_63_phi = false;
-      break;
-    }
-    x_19 = x_19_phi;
-    const bool x_63 = x_63_phi;
-    x_20_phi = x_19;
-    if (x_63) {
-      break;
-    }
-    x_50 = true;
-    x_15 = 1;
-    x_20_phi = 1;
-    break;
-  }
-  const int x_20 = x_20_phi;
-  x_16 = x_20;
-  if ((x_20 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_Array_i1_2_1_(inout Array a) {
-  bool x_70 = false;
-  int x_12 = 0;
-  int x_13 = 0;
-  bool x_72_phi = false;
-  int x_14_phi = 0;
-  x_72_phi = false;
-  while (true) {
-    bool x_77 = false;
-    bool x_77_phi = false;
-    int x_13_phi = 0;
-    bool x_87_phi = false;
-    x_77_phi = x_72_phi;
-    while (true) {
-      x_77 = x_77_phi;
-      const int x_10 = asint(x_8[0].x);
-      const int x_11 = a.values[x_10];
-      if ((x_11 == 1)) {
-        x_70 = true;
-        x_12 = 1;
-        x_13_phi = 1;
-        x_87_phi = true;
-        break;
-      }
-      x_13_phi = 0;
-      x_87_phi = x_77;
-      break;
-      {
-        x_77_phi = false;
-      }
-    }
-    x_13 = x_13_phi;
-    const bool x_87 = x_87_phi;
-    x_14_phi = x_13;
-    if (x_87) {
-      break;
-    }
-    x_70 = true;
-    x_12 = 1;
-    x_14_phi = 1;
-    break;
-    {
-      x_72_phi = false;
-    }
-  }
-  return x_14_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.msl
deleted file mode 100644
index 976e76d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,132 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct Array {
-  tint_array_wrapper values;
-};
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_5) {
-  bool x_50 = false;
-  int x_15 = 0;
-  int x_16 = 0;
-  Array param = {};
-  int x_19 = 0;
-  int x_20_phi = 0;
-  tint_array_wrapper const tint_symbol_2 = {.arr={0, 0}};
-  Array const tint_symbol_3 = {.values=tint_symbol_2};
-  param = tint_symbol_3;
-  x_50 = false;
-  while (true) {
-    int x_19_phi = 0;
-    bool x_63_phi = false;
-    while (true) {
-      int const x_17 = x_8.zero;
-      int const x_18 = param.values.arr[x_17];
-      if ((x_18 == 1)) {
-        x_50 = true;
-        x_15 = 1;
-        x_19_phi = 1;
-        x_63_phi = true;
-        break;
-      }
-      x_19_phi = 0;
-      x_63_phi = false;
-      break;
-    }
-    x_19 = x_19_phi;
-    bool const x_63 = x_63_phi;
-    x_20_phi = x_19;
-    if (x_63) {
-      break;
-    }
-    x_50 = true;
-    x_15 = 1;
-    x_20_phi = 1;
-    break;
-  }
-  int const x_20 = x_20_phi;
-  x_16 = x_20;
-  if ((x_20 == 1)) {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_6) {
-  main_1(x_8, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_Array_i1_2_1_(constant buf0& x_8, thread Array* const a) {
-  bool x_70 = false;
-  int x_12 = 0;
-  int x_13 = 0;
-  bool x_72_phi = false;
-  int x_14_phi = 0;
-  x_72_phi = false;
-  while (true) {
-    bool x_77 = false;
-    bool x_77_phi = false;
-    int x_13_phi = 0;
-    bool x_87_phi = false;
-    bool const x_72 = x_72_phi;
-    x_77_phi = x_72;
-    while (true) {
-      x_77 = x_77_phi;
-      int const x_10 = x_8.zero;
-      int const x_11 = (*(a)).values.arr[x_10];
-      if ((x_11 == 1)) {
-        x_70 = true;
-        x_12 = 1;
-        x_13_phi = 1;
-        x_87_phi = true;
-        break;
-      }
-      x_13_phi = 0;
-      x_87_phi = x_77;
-      break;
-      {
-        x_77_phi = false;
-      }
-    }
-    x_13 = x_13_phi;
-    bool const x_87 = x_87_phi;
-    x_14_phi = x_13;
-    if (x_87) {
-      break;
-    }
-    x_70 = true;
-    x_12 = 1;
-    x_14_phi = 1;
-    break;
-    {
-      x_72_phi = false;
-    }
-  }
-  int const x_14 = x_14_phi;
-  return x_14;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c0c863c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,247 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_50 "x_50"
-               OpName %x_15 "x_15"
-               OpName %x_16 "x_16"
-               OpName %Array "Array"
-               OpMemberName %Array 0 "values"
-               OpName %param "param"
-               OpName %x_19 "x_19"
-               OpName %x_20_phi "x_20_phi"
-               OpName %x_19_phi "x_19_phi"
-               OpName %x_63_phi "x_63_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_struct_Array_i1_2_1_ "func_struct_Array_i1_2_1_"
-               OpName %a "a"
-               OpName %x_70 "x_70"
-               OpName %x_12 "x_12"
-               OpName %x_13 "x_13"
-               OpName %x_72_phi "x_72_phi"
-               OpName %x_14_phi "x_14_phi"
-               OpName %x_77 "x_77"
-               OpName %x_77_phi "x_77_phi"
-               OpName %x_13_phi "x_13_phi"
-               OpName %x_87_phi "x_87_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %Array 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %20 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-      %Array = OpTypeStruct %_arr_int_uint_2
-%_ptr_Function_Array = OpTypePointer Function %Array
-         %31 = OpConstantNull %Array
-      %int_0 = OpConstant %int 0
-         %35 = OpConstantComposite %_arr_int_uint_2 %int_0 %int_0
-         %36 = OpConstantComposite %Array %35
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %70 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %71 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-         %83 = OpTypeFunction %int %_ptr_Function_Array
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_50 = OpVariable %_ptr_Function_bool Function %20
-       %x_15 = OpVariable %_ptr_Function_int Function %23
-       %x_16 = OpVariable %_ptr_Function_int Function %23
-      %param = OpVariable %_ptr_Function_Array Function %31
-       %x_19 = OpVariable %_ptr_Function_int Function %23
-   %x_20_phi = OpVariable %_ptr_Function_int Function %23
-   %x_19_phi = OpVariable %_ptr_Function_int Function %23
-   %x_63_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_50 %false
-               OpStore %param %36
-               OpStore %x_50 %false
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpLoopMerge %44 %45 None
-               OpBranch %46
-         %46 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Function_int %param %uint_0 %50
-         %52 = OpLoad %int %51
-         %54 = OpIEqual %bool %52 %int_1
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-               OpStore %x_50 %true
-               OpStore %x_15 %int_1
-               OpStore %x_19_phi %int_1
-               OpStore %x_63_phi %true
-               OpBranch %44
-         %55 = OpLabel
-               OpStore %x_19_phi %int_0
-               OpStore %x_63_phi %false
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %43
-         %44 = OpLabel
-         %58 = OpLoad %int %x_19_phi
-               OpStore %x_19 %58
-         %59 = OpLoad %bool %x_63_phi
-         %60 = OpLoad %int %x_19
-               OpStore %x_20_phi %60
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %61
-         %62 = OpLabel
-               OpBranch %38
-         %61 = OpLabel
-               OpStore %x_50 %true
-               OpStore %x_15 %int_1
-               OpStore %x_20_phi %int_1
-               OpBranch %38
-         %39 = OpLabel
-               OpBranch %37
-         %38 = OpLabel
-         %63 = OpLoad %int %x_20_phi
-               OpStore %x_16 %63
-         %64 = OpIEqual %bool %63 %int_1
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %67
-         %66 = OpLabel
-               OpStore %x_GLF_color %70
-               OpBranch %65
-         %67 = OpLabel
-               OpStore %x_GLF_color %71
-               OpBranch %65
-         %65 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
-%func_struct_Array_i1_2_1_ = OpFunction %int None %83
-          %a = OpFunctionParameter %_ptr_Function_Array
-         %86 = OpLabel
-       %x_70 = OpVariable %_ptr_Function_bool Function %20
-       %x_12 = OpVariable %_ptr_Function_int Function %23
-       %x_13 = OpVariable %_ptr_Function_int Function %23
-   %x_72_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_14_phi = OpVariable %_ptr_Function_int Function %23
-       %x_77 = OpVariable %_ptr_Function_bool Function %20
-   %x_77_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_13_phi = OpVariable %_ptr_Function_int Function %23
-   %x_87_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_70 %false
-               OpStore %x_72_phi %false
-               OpBranch %92
-         %92 = OpLabel
-               OpLoopMerge %93 %94 None
-               OpBranch %95
-         %95 = OpLabel
-        %100 = OpLoad %bool %x_72_phi
-               OpStore %x_77_phi %100
-               OpBranch %101
-        %101 = OpLabel
-               OpLoopMerge %102 %103 None
-               OpBranch %104
-        %104 = OpLabel
-        %105 = OpLoad %bool %x_77_phi
-               OpStore %x_77 %105
-        %106 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-        %107 = OpLoad %int %106
-        %109 = OpAccessChain %_ptr_Function_int %a %uint_0 %107
-        %110 = OpLoad %int %109
-        %111 = OpIEqual %bool %110 %int_1
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %112
-        %113 = OpLabel
-               OpStore %x_70 %true
-               OpStore %x_12 %int_1
-               OpStore %x_13_phi %int_1
-               OpStore %x_87_phi %true
-               OpBranch %102
-        %112 = OpLabel
-               OpStore %x_13_phi %int_0
-        %114 = OpLoad %bool %x_77
-               OpStore %x_87_phi %114
-               OpBranch %102
-        %103 = OpLabel
-               OpStore %x_77_phi %false
-               OpBranch %101
-        %102 = OpLabel
-        %115 = OpLoad %int %x_13_phi
-               OpStore %x_13 %115
-        %116 = OpLoad %bool %x_87_phi
-        %117 = OpLoad %int %x_13
-               OpStore %x_14_phi %117
-               OpSelectionMerge %118 None
-               OpBranchConditional %116 %119 %118
-        %119 = OpLabel
-               OpBranch %93
-        %118 = OpLabel
-               OpStore %x_70 %true
-               OpStore %x_12 %int_1
-               OpStore %x_14_phi %int_1
-               OpBranch %93
-         %94 = OpLabel
-               OpStore %x_72_phi %false
-               OpBranch %92
-         %93 = OpLabel
-        %120 = OpLoad %int %x_14_phi
-               OpReturnValue %120
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c3fe68b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-func-argument/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,122 +0,0 @@
-struct Array {
-  values : array<i32, 2>;
-};
-
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_50 : bool = false;
-  var x_15 : i32;
-  var x_16 : i32;
-  var param : Array;
-  var x_19 : i32;
-  var x_20_phi : i32;
-  param = Array(array<i32, 2>(0, 0));
-  x_50 = false;
-  loop {
-    var x_19_phi : i32;
-    var x_63_phi : bool;
-    loop {
-      let x_17 : i32 = x_8.zero;
-      let x_18 : i32 = param.values[x_17];
-      if ((x_18 == 1)) {
-        x_50 = true;
-        x_15 = 1;
-        x_19_phi = 1;
-        x_63_phi = true;
-        break;
-      }
-      x_19_phi = 0;
-      x_63_phi = false;
-      break;
-    }
-    x_19 = x_19_phi;
-    let x_63 : bool = x_63_phi;
-    x_20_phi = x_19;
-    if (x_63) {
-      break;
-    }
-    x_50 = true;
-    x_15 = 1;
-    x_20_phi = 1;
-    break;
-  }
-  let x_20 : i32 = x_20_phi;
-  x_16 = x_20;
-  if ((x_20 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_struct_Array_i1_2_1_(a : ptr<function, Array>) -> i32 {
-  var x_70 : bool = false;
-  var x_12 : i32;
-  var x_13 : i32;
-  var x_72_phi : bool;
-  var x_14_phi : i32;
-  x_72_phi = false;
-  loop {
-    var x_77 : bool;
-    var x_77_phi : bool;
-    var x_13_phi : i32;
-    var x_87_phi : bool;
-    let x_72 : bool = x_72_phi;
-    x_77_phi = x_72;
-    loop {
-      x_77 = x_77_phi;
-      let x_10 : i32 = x_8.zero;
-      let x_11 : i32 = (*(a)).values[x_10];
-      if ((x_11 == 1)) {
-        x_70 = true;
-        x_12 = 1;
-        x_13_phi = 1;
-        x_87_phi = true;
-        break;
-      }
-      x_13_phi = 0;
-      x_87_phi = x_77;
-      break;
-
-      continuing {
-        x_77_phi = false;
-      }
-    }
-    x_13 = x_13_phi;
-    let x_87 : bool = x_87_phi;
-    x_14_phi = x_13;
-    if (x_87) {
-      break;
-    }
-    x_70 = true;
-    x_12 = 1;
-    x_14_phi = 1;
-    break;
-
-    continuing {
-      x_72_phi = false;
-    }
-  }
-  let x_14 : i32 = x_14_phi;
-  return x_14;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4e2320a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-SKIP: FAILED
-
-struct Array {
-  int values[2];
-};
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  Array a = (Array)0;
-  Array b = (Array)0;
-  float one = 0.0f;
-  const int x_10 = asint(x_7[0].x);
-  a.values[x_10] = 1;
-  b = a;
-  one = 0.0f;
-  const int x_11 = asint(x_7[0].x);
-  const int x_12 = b.values[x_11];
-  if ((x_12 == 1)) {
-    one = 1.0f;
-  }
-  x_GLF_color = float4(one, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x000001FD1871BC40(15,3-16): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1aae8b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct Array {
-  tint_array_wrapper values;
-};
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  Array a = {};
-  Array b = {};
-  float one = 0.0f;
-  int const x_10 = x_7.zero;
-  a.values.arr[x_10] = 1;
-  Array const x_35 = a;
-  b = x_35;
-  one = 0.0f;
-  int const x_11 = x_7.zero;
-  int const x_12 = b.values.arr[x_11];
-  if ((x_12 == 1)) {
-    one = 1.0f;
-  }
-  float const x_41 = one;
-  *(tint_symbol_3) = float4(x_41, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 32d53f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %Array "Array"
-               OpMemberName %Array 0 "values"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %one "one"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %Array 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-      %Array = OpTypeStruct %_arr_int_uint_2
-%_ptr_Function_Array = OpTypePointer Function %Array
-         %22 = OpConstantNull %Array
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %47 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_Array Function %22
-          %b = OpVariable %_ptr_Function_Array Function %22
-        %one = OpVariable %_ptr_Function_float Function %26
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Function_int %a %uint_0 %30
-               OpStore %32 %int_1
-         %34 = OpLoad %Array %a
-               OpStore %b %34
-               OpStore %one %float_0
-         %36 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Function_int %b %uint_0 %37
-         %39 = OpLoad %int %38
-         %40 = OpIEqual %bool %39 %int_1
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
-               OpStore %one %float_1
-               OpBranch %42
-         %42 = OpLabel
-         %45 = OpLoad %float %one
-         %46 = OpCompositeConstruct %v4float %45 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %46
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %47
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %x_GLF_color
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %55 = OpLabel
-         %56 = OpFunctionCall %main_out %main_inner
-         %57 = OpCompositeExtract %v4float %56 0
-               OpStore %x_GLF_color_1_1 %57
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6e13d32..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-struct Array {
-  values : array<i32, 2>;
-};
-
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : Array;
-  var b : Array;
-  var one : f32;
-  let x_10 : i32 = x_7.zero;
-  a.values[x_10] = 1;
-  let x_35 : Array = a;
-  b = x_35;
-  one = 0.0;
-  let x_11 : i32 = x_7.zero;
-  let x_12 : i32 = b.values[x_11];
-  if ((x_12 == 1)) {
-    one = 1.0;
-  }
-  let x_41 : f32 = one;
-  x_GLF_color = vec4<f32>(x_41, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0cdf29f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-SKIP: FAILED
-
-struct Array {
-  int values[2];
-};
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  Array a = (Array)0;
-  Array b = (Array)0;
-  float one = 0.0f;
-  const int x_10 = asint(x_7[0].x);
-  a.values[x_10] = 1;
-  b = a;
-  one = 0.0f;
-  const int x_11 = asint(x_7[0].x);
-  const int x_12 = b.values[x_11];
-  if ((x_12 == 1)) {
-    one = 1.0f;
-  }
-  x_GLF_color = float4(one, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x000002AA8074FF50(15,3-16): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1aae8b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct Array {
-  tint_array_wrapper values;
-};
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  Array a = {};
-  Array b = {};
-  float one = 0.0f;
-  int const x_10 = x_7.zero;
-  a.values.arr[x_10] = 1;
-  Array const x_35 = a;
-  b = x_35;
-  one = 0.0f;
-  int const x_11 = x_7.zero;
-  int const x_12 = b.values.arr[x_11];
-  if ((x_12 == 1)) {
-    one = 1.0f;
-  }
-  float const x_41 = one;
-  *(tint_symbol_3) = float4(x_41, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 32d53f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %Array "Array"
-               OpMemberName %Array 0 "values"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %one "one"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %Array 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-      %Array = OpTypeStruct %_arr_int_uint_2
-%_ptr_Function_Array = OpTypePointer Function %Array
-         %22 = OpConstantNull %Array
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %47 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_Array Function %22
-          %b = OpVariable %_ptr_Function_Array Function %22
-        %one = OpVariable %_ptr_Function_float Function %26
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Function_int %a %uint_0 %30
-               OpStore %32 %int_1
-         %34 = OpLoad %Array %a
-               OpStore %b %34
-               OpStore %one %float_0
-         %36 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Function_int %b %uint_0 %37
-         %39 = OpLoad %int %38
-         %40 = OpIEqual %bool %39 %int_1
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
-               OpStore %one %float_1
-               OpBranch %42
-         %42 = OpLabel
-         %45 = OpLoad %float %one
-         %46 = OpCompositeConstruct %v4float %45 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %46
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %47
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %x_GLF_color
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %55 = OpLabel
-         %56 = OpFunctionCall %main_out %main_inner
-         %57 = OpCompositeExtract %v4float %56 0
-               OpStore %x_GLF_color_1_1 %57
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6e13d32..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-struct Array {
-  values : array<i32, 2>;
-};
-
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : Array;
-  var b : Array;
-  var one : f32;
-  let x_10 : i32 = x_7.zero;
-  a.values[x_10] = 1;
-  let x_35 : Array = a;
-  b = x_35;
-  one = 0.0;
-  let x_11 : i32 = x_7.zero;
-  let x_12 : i32 = b.values[x_11];
-  if ((x_12 == 1)) {
-    one = 1.0;
-  }
-  let x_41 : f32 = one;
-  x_GLF_color = vec4<f32>(x_41, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2ba993e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,128 +0,0 @@
-struct Array {
-  int values[2];
-};
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_52 = false;
-  int x_17 = 0;
-  int x_18 = 0;
-  int x_16[2] = (int[2])0;
-  Array param = (Array)0;
-  int x_20 = 0;
-  int x_21_phi = 0;
-  const int x_12 = asint(x_8[0].x);
-  int x_23_1[2] = x_16;
-  x_23_1[0u] = x_12;
-  x_16 = x_23_1;
-  const Array tint_symbol_2 = {x_16};
-  param = tint_symbol_2;
-  x_52 = false;
-  while (true) {
-    int x_20_phi = 0;
-    bool x_67_phi = false;
-    while (true) {
-      const int x_19 = param.values[x_12];
-      if ((x_19 == 0)) {
-        x_52 = true;
-        x_17 = 42;
-        x_20_phi = 42;
-        x_67_phi = true;
-        break;
-      }
-      x_20_phi = 0;
-      x_67_phi = false;
-      break;
-    }
-    x_20 = x_20_phi;
-    const bool x_67 = x_67_phi;
-    x_21_phi = x_20;
-    if (x_67) {
-      break;
-    }
-    x_52 = true;
-    x_17 = 42;
-    x_21_phi = 42;
-    break;
-  }
-  const int x_21 = x_21_phi;
-  x_18 = x_21;
-  if ((x_21 == 42)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_Array_i1_2_1_(inout Array a) {
-  bool x_74 = false;
-  int x_13 = 0;
-  int x_14 = 0;
-  bool x_76_phi = false;
-  int x_15_phi = 0;
-  x_76_phi = false;
-  while (true) {
-    bool x_81 = false;
-    bool x_81_phi = false;
-    int x_14_phi = 0;
-    bool x_91_phi = false;
-    x_81_phi = x_76_phi;
-    while (true) {
-      x_81 = x_81_phi;
-      const int x_10 = asint(x_8[0].x);
-      const int x_11 = a.values[x_10];
-      if ((x_11 == 0)) {
-        x_74 = true;
-        x_13 = 42;
-        x_14_phi = 42;
-        x_91_phi = true;
-        break;
-      }
-      x_14_phi = 0;
-      x_91_phi = x_81;
-      break;
-      {
-        x_81_phi = false;
-      }
-    }
-    x_14 = x_14_phi;
-    const bool x_91 = x_91_phi;
-    x_15_phi = x_14;
-    if (x_91) {
-      break;
-    }
-    x_74 = true;
-    x_13 = 42;
-    x_15_phi = 42;
-    break;
-    {
-      x_76_phi = false;
-    }
-  }
-  return x_15_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9ad9d6e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,138 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct Array {
-  tint_array_wrapper values;
-};
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  bool x_52 = false;
-  int x_17 = 0;
-  int x_18 = 0;
-  tint_array_wrapper x_16 = {};
-  Array param = {};
-  int x_20 = 0;
-  int x_21_phi = 0;
-  int const x_12 = x_8.zero;
-  tint_array_wrapper const x_22 = x_16;
-  tint_array_wrapper x_23_1 = x_22;
-  x_23_1.arr[0u] = x_12;
-  tint_array_wrapper const x_23 = x_23_1;
-  x_16 = x_23;
-  tint_array_wrapper const x_54 = x_16;
-  Array const tint_symbol_2 = {.values=x_54};
-  param = tint_symbol_2;
-  x_52 = false;
-  while (true) {
-    int x_20_phi = 0;
-    bool x_67_phi = false;
-    while (true) {
-      int const x_19 = param.values.arr[x_12];
-      if ((x_19 == 0)) {
-        x_52 = true;
-        x_17 = 42;
-        x_20_phi = 42;
-        x_67_phi = true;
-        break;
-      }
-      x_20_phi = 0;
-      x_67_phi = false;
-      break;
-    }
-    x_20 = x_20_phi;
-    bool const x_67 = x_67_phi;
-    x_21_phi = x_20;
-    if (x_67) {
-      break;
-    }
-    x_52 = true;
-    x_17 = 42;
-    x_21_phi = 42;
-    break;
-  }
-  int const x_21 = x_21_phi;
-  x_18 = x_21;
-  if ((x_21 == 42)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_5) {
-  main_1(x_8, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_Array_i1_2_1_(constant buf0& x_8, thread Array* const a) {
-  bool x_74 = false;
-  int x_13 = 0;
-  int x_14 = 0;
-  bool x_76_phi = false;
-  int x_15_phi = 0;
-  x_76_phi = false;
-  while (true) {
-    bool x_81 = false;
-    bool x_81_phi = false;
-    int x_14_phi = 0;
-    bool x_91_phi = false;
-    bool const x_76 = x_76_phi;
-    x_81_phi = x_76;
-    while (true) {
-      x_81 = x_81_phi;
-      int const x_10 = x_8.zero;
-      int const x_11 = (*(a)).values.arr[x_10];
-      if ((x_11 == 0)) {
-        x_74 = true;
-        x_13 = 42;
-        x_14_phi = 42;
-        x_91_phi = true;
-        break;
-      }
-      x_14_phi = 0;
-      x_91_phi = x_81;
-      break;
-      {
-        x_81_phi = false;
-      }
-    }
-    x_14 = x_14_phi;
-    bool const x_91 = x_91_phi;
-    x_15_phi = x_14;
-    if (x_91) {
-      break;
-    }
-    x_74 = true;
-    x_13 = 42;
-    x_15_phi = 42;
-    break;
-    {
-      x_76_phi = false;
-    }
-  }
-  int const x_15 = x_15_phi;
-  return x_15;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2b1ddd8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,259 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 128
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_52 "x_52"
-               OpName %x_17 "x_17"
-               OpName %x_18 "x_18"
-               OpName %x_16 "x_16"
-               OpName %Array "Array"
-               OpMemberName %Array 0 "values"
-               OpName %param "param"
-               OpName %x_20 "x_20"
-               OpName %x_21_phi "x_21_phi"
-               OpName %x_23_1 "x_23_1"
-               OpName %x_20_phi "x_20_phi"
-               OpName %x_67_phi "x_67_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_struct_Array_i1_2_1_ "func_struct_Array_i1_2_1_"
-               OpName %a "a"
-               OpName %x_74 "x_74"
-               OpName %x_13 "x_13"
-               OpName %x_14 "x_14"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_15_phi "x_15_phi"
-               OpName %x_81 "x_81"
-               OpName %x_81_phi "x_81_phi"
-               OpName %x_14_phi "x_14_phi"
-               OpName %x_91_phi "x_91_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %Array 0 Offset 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %20 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %30 = OpConstantNull %_arr_int_uint_2
-      %Array = OpTypeStruct %_arr_int_uint_2
-%_ptr_Function_Array = OpTypePointer Function %Array
-         %34 = OpConstantNull %Array
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %true = OpConstantTrue %bool
-     %int_42 = OpConstant %int 42
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %77 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %78 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %79 = OpTypeFunction %main_out
-         %90 = OpTypeFunction %int %_ptr_Function_Array
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_52 = OpVariable %_ptr_Function_bool Function %20
-       %x_17 = OpVariable %_ptr_Function_int Function %23
-       %x_18 = OpVariable %_ptr_Function_int Function %23
-       %x_16 = OpVariable %_ptr_Function__arr_int_uint_2 Function %30
-      %param = OpVariable %_ptr_Function_Array Function %34
-       %x_20 = OpVariable %_ptr_Function_int Function %23
-   %x_21_phi = OpVariable %_ptr_Function_int Function %23
-     %x_23_1 = OpVariable %_ptr_Function__arr_int_uint_2 Function %30
-   %x_20_phi = OpVariable %_ptr_Function_int Function %23
-   %x_67_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_52 %false
-         %39 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %40 = OpLoad %int %39
-         %41 = OpLoad %_arr_int_uint_2 %x_16
-               OpStore %x_23_1 %41
-         %43 = OpAccessChain %_ptr_Function_int %x_23_1 %uint_0
-               OpStore %43 %40
-         %44 = OpLoad %_arr_int_uint_2 %x_23_1
-               OpStore %x_16 %44
-         %45 = OpLoad %_arr_int_uint_2 %x_16
-         %46 = OpCompositeConstruct %Array %45
-               OpStore %param %46
-               OpStore %x_52 %false
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Function_int %param %uint_0 %40
-         %58 = OpLoad %int %57
-         %60 = OpIEqual %bool %58 %int_0
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %61
-         %62 = OpLabel
-               OpStore %x_52 %true
-               OpStore %x_17 %int_42
-               OpStore %x_20_phi %int_42
-               OpStore %x_67_phi %true
-               OpBranch %54
-         %61 = OpLabel
-               OpStore %x_20_phi %int_0
-               OpStore %x_67_phi %false
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %53
-         %54 = OpLabel
-         %65 = OpLoad %int %x_20_phi
-               OpStore %x_20 %65
-         %66 = OpLoad %bool %x_67_phi
-         %67 = OpLoad %int %x_20
-               OpStore %x_21_phi %67
-               OpSelectionMerge %68 None
-               OpBranchConditional %66 %69 %68
-         %69 = OpLabel
-               OpBranch %48
-         %68 = OpLabel
-               OpStore %x_52 %true
-               OpStore %x_17 %int_42
-               OpStore %x_21_phi %int_42
-               OpBranch %48
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-         %70 = OpLoad %int %x_21_phi
-               OpStore %x_18 %70
-         %71 = OpIEqual %bool %70 %int_42
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-               OpStore %x_GLF_color %77
-               OpBranch %72
-         %74 = OpLabel
-               OpStore %x_GLF_color %78
-               OpBranch %72
-         %72 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %79
-         %82 = OpLabel
-         %83 = OpFunctionCall %void %main_1
-         %84 = OpLoad %v4float %x_GLF_color
-         %85 = OpCompositeConstruct %main_out %84
-               OpReturnValue %85
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %87 = OpLabel
-         %88 = OpFunctionCall %main_out %main_inner
-         %89 = OpCompositeExtract %v4float %88 0
-               OpStore %x_GLF_color_1_1 %89
-               OpReturn
-               OpFunctionEnd
-%func_struct_Array_i1_2_1_ = OpFunction %int None %90
-          %a = OpFunctionParameter %_ptr_Function_Array
-         %93 = OpLabel
-       %x_74 = OpVariable %_ptr_Function_bool Function %20
-       %x_13 = OpVariable %_ptr_Function_int Function %23
-       %x_14 = OpVariable %_ptr_Function_int Function %23
-   %x_76_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_15_phi = OpVariable %_ptr_Function_int Function %23
-       %x_81 = OpVariable %_ptr_Function_bool Function %20
-   %x_81_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_14_phi = OpVariable %_ptr_Function_int Function %23
-   %x_91_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_74 %false
-               OpStore %x_76_phi %false
-               OpBranch %99
-         %99 = OpLabel
-               OpLoopMerge %100 %101 None
-               OpBranch %102
-        %102 = OpLabel
-        %107 = OpLoad %bool %x_76_phi
-               OpStore %x_81_phi %107
-               OpBranch %108
-        %108 = OpLabel
-               OpLoopMerge %109 %110 None
-               OpBranch %111
-        %111 = OpLabel
-        %112 = OpLoad %bool %x_81_phi
-               OpStore %x_81 %112
-        %113 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-        %114 = OpLoad %int %113
-        %116 = OpAccessChain %_ptr_Function_int %a %uint_0 %114
-        %117 = OpLoad %int %116
-        %118 = OpIEqual %bool %117 %int_0
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpStore %x_74 %true
-               OpStore %x_13 %int_42
-               OpStore %x_14_phi %int_42
-               OpStore %x_91_phi %true
-               OpBranch %109
-        %119 = OpLabel
-               OpStore %x_14_phi %int_0
-        %121 = OpLoad %bool %x_81
-               OpStore %x_91_phi %121
-               OpBranch %109
-        %110 = OpLabel
-               OpStore %x_81_phi %false
-               OpBranch %108
-        %109 = OpLabel
-        %122 = OpLoad %int %x_14_phi
-               OpStore %x_14 %122
-        %123 = OpLoad %bool %x_91_phi
-        %124 = OpLoad %int %x_14
-               OpStore %x_15_phi %124
-               OpSelectionMerge %125 None
-               OpBranchConditional %123 %126 %125
-        %126 = OpLabel
-               OpBranch %100
-        %125 = OpLabel
-               OpStore %x_74 %true
-               OpStore %x_13 %int_42
-               OpStore %x_15_phi %int_42
-               OpBranch %100
-        %101 = OpLabel
-               OpStore %x_76_phi %false
-               OpBranch %99
-        %100 = OpLabel
-        %127 = OpLoad %int %x_15_phi
-               OpReturnValue %127
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 29debc5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,129 +0,0 @@
-struct Array {
-  values : array<i32, 2>;
-};
-
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_52 : bool = false;
-  var x_17 : i32;
-  var x_18 : i32;
-  var x_16 : array<i32, 2>;
-  var param : Array;
-  var x_20 : i32;
-  var x_21_phi : i32;
-  let x_12 : i32 = x_8.zero;
-  let x_22 : array<i32, 2> = x_16;
-  var x_23_1 : array<i32, 2> = x_22;
-  x_23_1[0u] = x_12;
-  let x_23 : array<i32, 2> = x_23_1;
-  x_16 = x_23;
-  let x_54 : array<i32, 2> = x_16;
-  param = Array(x_54);
-  x_52 = false;
-  loop {
-    var x_20_phi : i32;
-    var x_67_phi : bool;
-    loop {
-      let x_19 : i32 = param.values[x_12];
-      if ((x_19 == 0)) {
-        x_52 = true;
-        x_17 = 42;
-        x_20_phi = 42;
-        x_67_phi = true;
-        break;
-      }
-      x_20_phi = 0;
-      x_67_phi = false;
-      break;
-    }
-    x_20 = x_20_phi;
-    let x_67 : bool = x_67_phi;
-    x_21_phi = x_20;
-    if (x_67) {
-      break;
-    }
-    x_52 = true;
-    x_17 = 42;
-    x_21_phi = 42;
-    break;
-  }
-  let x_21 : i32 = x_21_phi;
-  x_18 = x_21;
-  if ((x_21 == 42)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_struct_Array_i1_2_1_(a : ptr<function, Array>) -> i32 {
-  var x_74 : bool = false;
-  var x_13 : i32;
-  var x_14 : i32;
-  var x_76_phi : bool;
-  var x_15_phi : i32;
-  x_76_phi = false;
-  loop {
-    var x_81 : bool;
-    var x_81_phi : bool;
-    var x_14_phi : i32;
-    var x_91_phi : bool;
-    let x_76 : bool = x_76_phi;
-    x_81_phi = x_76;
-    loop {
-      x_81 = x_81_phi;
-      let x_10 : i32 = x_8.zero;
-      let x_11 : i32 = (*(a)).values[x_10];
-      if ((x_11 == 0)) {
-        x_74 = true;
-        x_13 = 42;
-        x_14_phi = 42;
-        x_91_phi = true;
-        break;
-      }
-      x_14_phi = 0;
-      x_91_phi = x_81;
-      break;
-
-      continuing {
-        x_81_phi = false;
-      }
-    }
-    x_14 = x_14_phi;
-    let x_91 : bool = x_91_phi;
-    x_15_phi = x_14;
-    if (x_91) {
-      break;
-    }
-    x_74 = true;
-    x_13 = 42;
-    x_15_phi = 42;
-    break;
-
-    continuing {
-      x_76_phi = false;
-    }
-  }
-  let x_15 : i32 = x_15_phi;
-  return x_15;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 2ba993e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,128 +0,0 @@
-struct Array {
-  int values[2];
-};
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_52 = false;
-  int x_17 = 0;
-  int x_18 = 0;
-  int x_16[2] = (int[2])0;
-  Array param = (Array)0;
-  int x_20 = 0;
-  int x_21_phi = 0;
-  const int x_12 = asint(x_8[0].x);
-  int x_23_1[2] = x_16;
-  x_23_1[0u] = x_12;
-  x_16 = x_23_1;
-  const Array tint_symbol_2 = {x_16};
-  param = tint_symbol_2;
-  x_52 = false;
-  while (true) {
-    int x_20_phi = 0;
-    bool x_67_phi = false;
-    while (true) {
-      const int x_19 = param.values[x_12];
-      if ((x_19 == 0)) {
-        x_52 = true;
-        x_17 = 42;
-        x_20_phi = 42;
-        x_67_phi = true;
-        break;
-      }
-      x_20_phi = 0;
-      x_67_phi = false;
-      break;
-    }
-    x_20 = x_20_phi;
-    const bool x_67 = x_67_phi;
-    x_21_phi = x_20;
-    if (x_67) {
-      break;
-    }
-    x_52 = true;
-    x_17 = 42;
-    x_21_phi = 42;
-    break;
-  }
-  const int x_21 = x_21_phi;
-  x_18 = x_21;
-  if ((x_21 == 42)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_Array_i1_2_1_(inout Array a) {
-  bool x_74 = false;
-  int x_13 = 0;
-  int x_14 = 0;
-  bool x_76_phi = false;
-  int x_15_phi = 0;
-  x_76_phi = false;
-  while (true) {
-    bool x_81 = false;
-    bool x_81_phi = false;
-    int x_14_phi = 0;
-    bool x_91_phi = false;
-    x_81_phi = x_76_phi;
-    while (true) {
-      x_81 = x_81_phi;
-      const int x_10 = asint(x_8[0].x);
-      const int x_11 = a.values[x_10];
-      if ((x_11 == 0)) {
-        x_74 = true;
-        x_13 = 42;
-        x_14_phi = 42;
-        x_91_phi = true;
-        break;
-      }
-      x_14_phi = 0;
-      x_91_phi = x_81;
-      break;
-      {
-        x_81_phi = false;
-      }
-    }
-    x_14 = x_14_phi;
-    const bool x_91 = x_91_phi;
-    x_15_phi = x_14;
-    if (x_91) {
-      break;
-    }
-    x_74 = true;
-    x_13 = 42;
-    x_15_phi = 42;
-    break;
-    {
-      x_76_phi = false;
-    }
-  }
-  return x_15_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9ad9d6e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,138 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct Array {
-  tint_array_wrapper values;
-};
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  bool x_52 = false;
-  int x_17 = 0;
-  int x_18 = 0;
-  tint_array_wrapper x_16 = {};
-  Array param = {};
-  int x_20 = 0;
-  int x_21_phi = 0;
-  int const x_12 = x_8.zero;
-  tint_array_wrapper const x_22 = x_16;
-  tint_array_wrapper x_23_1 = x_22;
-  x_23_1.arr[0u] = x_12;
-  tint_array_wrapper const x_23 = x_23_1;
-  x_16 = x_23;
-  tint_array_wrapper const x_54 = x_16;
-  Array const tint_symbol_2 = {.values=x_54};
-  param = tint_symbol_2;
-  x_52 = false;
-  while (true) {
-    int x_20_phi = 0;
-    bool x_67_phi = false;
-    while (true) {
-      int const x_19 = param.values.arr[x_12];
-      if ((x_19 == 0)) {
-        x_52 = true;
-        x_17 = 42;
-        x_20_phi = 42;
-        x_67_phi = true;
-        break;
-      }
-      x_20_phi = 0;
-      x_67_phi = false;
-      break;
-    }
-    x_20 = x_20_phi;
-    bool const x_67 = x_67_phi;
-    x_21_phi = x_20;
-    if (x_67) {
-      break;
-    }
-    x_52 = true;
-    x_17 = 42;
-    x_21_phi = 42;
-    break;
-  }
-  int const x_21 = x_21_phi;
-  x_18 = x_21;
-  if ((x_21 == 42)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_5) {
-  main_1(x_8, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_Array_i1_2_1_(constant buf0& x_8, thread Array* const a) {
-  bool x_74 = false;
-  int x_13 = 0;
-  int x_14 = 0;
-  bool x_76_phi = false;
-  int x_15_phi = 0;
-  x_76_phi = false;
-  while (true) {
-    bool x_81 = false;
-    bool x_81_phi = false;
-    int x_14_phi = 0;
-    bool x_91_phi = false;
-    bool const x_76 = x_76_phi;
-    x_81_phi = x_76;
-    while (true) {
-      x_81 = x_81_phi;
-      int const x_10 = x_8.zero;
-      int const x_11 = (*(a)).values.arr[x_10];
-      if ((x_11 == 0)) {
-        x_74 = true;
-        x_13 = 42;
-        x_14_phi = 42;
-        x_91_phi = true;
-        break;
-      }
-      x_14_phi = 0;
-      x_91_phi = x_81;
-      break;
-      {
-        x_81_phi = false;
-      }
-    }
-    x_14 = x_14_phi;
-    bool const x_91 = x_91_phi;
-    x_15_phi = x_14;
-    if (x_91) {
-      break;
-    }
-    x_74 = true;
-    x_13 = 42;
-    x_15_phi = 42;
-    break;
-    {
-      x_76_phi = false;
-    }
-  }
-  int const x_15 = x_15_phi;
-  return x_15;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2b1ddd8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,259 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 128
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_52 "x_52"
-               OpName %x_17 "x_17"
-               OpName %x_18 "x_18"
-               OpName %x_16 "x_16"
-               OpName %Array "Array"
-               OpMemberName %Array 0 "values"
-               OpName %param "param"
-               OpName %x_20 "x_20"
-               OpName %x_21_phi "x_21_phi"
-               OpName %x_23_1 "x_23_1"
-               OpName %x_20_phi "x_20_phi"
-               OpName %x_67_phi "x_67_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_struct_Array_i1_2_1_ "func_struct_Array_i1_2_1_"
-               OpName %a "a"
-               OpName %x_74 "x_74"
-               OpName %x_13 "x_13"
-               OpName %x_14 "x_14"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_15_phi "x_15_phi"
-               OpName %x_81 "x_81"
-               OpName %x_81_phi "x_81_phi"
-               OpName %x_14_phi "x_14_phi"
-               OpName %x_91_phi "x_91_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %Array 0 Offset 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %20 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %30 = OpConstantNull %_arr_int_uint_2
-      %Array = OpTypeStruct %_arr_int_uint_2
-%_ptr_Function_Array = OpTypePointer Function %Array
-         %34 = OpConstantNull %Array
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %true = OpConstantTrue %bool
-     %int_42 = OpConstant %int 42
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %77 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %78 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %79 = OpTypeFunction %main_out
-         %90 = OpTypeFunction %int %_ptr_Function_Array
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_52 = OpVariable %_ptr_Function_bool Function %20
-       %x_17 = OpVariable %_ptr_Function_int Function %23
-       %x_18 = OpVariable %_ptr_Function_int Function %23
-       %x_16 = OpVariable %_ptr_Function__arr_int_uint_2 Function %30
-      %param = OpVariable %_ptr_Function_Array Function %34
-       %x_20 = OpVariable %_ptr_Function_int Function %23
-   %x_21_phi = OpVariable %_ptr_Function_int Function %23
-     %x_23_1 = OpVariable %_ptr_Function__arr_int_uint_2 Function %30
-   %x_20_phi = OpVariable %_ptr_Function_int Function %23
-   %x_67_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_52 %false
-         %39 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %40 = OpLoad %int %39
-         %41 = OpLoad %_arr_int_uint_2 %x_16
-               OpStore %x_23_1 %41
-         %43 = OpAccessChain %_ptr_Function_int %x_23_1 %uint_0
-               OpStore %43 %40
-         %44 = OpLoad %_arr_int_uint_2 %x_23_1
-               OpStore %x_16 %44
-         %45 = OpLoad %_arr_int_uint_2 %x_16
-         %46 = OpCompositeConstruct %Array %45
-               OpStore %param %46
-               OpStore %x_52 %false
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Function_int %param %uint_0 %40
-         %58 = OpLoad %int %57
-         %60 = OpIEqual %bool %58 %int_0
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %61
-         %62 = OpLabel
-               OpStore %x_52 %true
-               OpStore %x_17 %int_42
-               OpStore %x_20_phi %int_42
-               OpStore %x_67_phi %true
-               OpBranch %54
-         %61 = OpLabel
-               OpStore %x_20_phi %int_0
-               OpStore %x_67_phi %false
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %53
-         %54 = OpLabel
-         %65 = OpLoad %int %x_20_phi
-               OpStore %x_20 %65
-         %66 = OpLoad %bool %x_67_phi
-         %67 = OpLoad %int %x_20
-               OpStore %x_21_phi %67
-               OpSelectionMerge %68 None
-               OpBranchConditional %66 %69 %68
-         %69 = OpLabel
-               OpBranch %48
-         %68 = OpLabel
-               OpStore %x_52 %true
-               OpStore %x_17 %int_42
-               OpStore %x_21_phi %int_42
-               OpBranch %48
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-         %70 = OpLoad %int %x_21_phi
-               OpStore %x_18 %70
-         %71 = OpIEqual %bool %70 %int_42
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-               OpStore %x_GLF_color %77
-               OpBranch %72
-         %74 = OpLabel
-               OpStore %x_GLF_color %78
-               OpBranch %72
-         %72 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %79
-         %82 = OpLabel
-         %83 = OpFunctionCall %void %main_1
-         %84 = OpLoad %v4float %x_GLF_color
-         %85 = OpCompositeConstruct %main_out %84
-               OpReturnValue %85
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %87 = OpLabel
-         %88 = OpFunctionCall %main_out %main_inner
-         %89 = OpCompositeExtract %v4float %88 0
-               OpStore %x_GLF_color_1_1 %89
-               OpReturn
-               OpFunctionEnd
-%func_struct_Array_i1_2_1_ = OpFunction %int None %90
-          %a = OpFunctionParameter %_ptr_Function_Array
-         %93 = OpLabel
-       %x_74 = OpVariable %_ptr_Function_bool Function %20
-       %x_13 = OpVariable %_ptr_Function_int Function %23
-       %x_14 = OpVariable %_ptr_Function_int Function %23
-   %x_76_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_15_phi = OpVariable %_ptr_Function_int Function %23
-       %x_81 = OpVariable %_ptr_Function_bool Function %20
-   %x_81_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_14_phi = OpVariable %_ptr_Function_int Function %23
-   %x_91_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_74 %false
-               OpStore %x_76_phi %false
-               OpBranch %99
-         %99 = OpLabel
-               OpLoopMerge %100 %101 None
-               OpBranch %102
-        %102 = OpLabel
-        %107 = OpLoad %bool %x_76_phi
-               OpStore %x_81_phi %107
-               OpBranch %108
-        %108 = OpLabel
-               OpLoopMerge %109 %110 None
-               OpBranch %111
-        %111 = OpLabel
-        %112 = OpLoad %bool %x_81_phi
-               OpStore %x_81 %112
-        %113 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-        %114 = OpLoad %int %113
-        %116 = OpAccessChain %_ptr_Function_int %a %uint_0 %114
-        %117 = OpLoad %int %116
-        %118 = OpIEqual %bool %117 %int_0
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpStore %x_74 %true
-               OpStore %x_13 %int_42
-               OpStore %x_14_phi %int_42
-               OpStore %x_91_phi %true
-               OpBranch %109
-        %119 = OpLabel
-               OpStore %x_14_phi %int_0
-        %121 = OpLoad %bool %x_81
-               OpStore %x_91_phi %121
-               OpBranch %109
-        %110 = OpLabel
-               OpStore %x_81_phi %false
-               OpBranch %108
-        %109 = OpLabel
-        %122 = OpLoad %int %x_14_phi
-               OpStore %x_14 %122
-        %123 = OpLoad %bool %x_91_phi
-        %124 = OpLoad %int %x_14
-               OpStore %x_15_phi %124
-               OpSelectionMerge %125 None
-               OpBranchConditional %123 %126 %125
-        %126 = OpLabel
-               OpBranch %100
-        %125 = OpLabel
-               OpStore %x_74 %true
-               OpStore %x_13 %int_42
-               OpStore %x_15_phi %int_42
-               OpBranch %100
-        %101 = OpLabel
-               OpStore %x_76_phi %false
-               OpBranch %99
-        %100 = OpLabel
-        %127 = OpLoad %int %x_15_phi
-               OpReturnValue %127
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 29debc5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-param-uniform/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,129 +0,0 @@
-struct Array {
-  values : array<i32, 2>;
-};
-
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_52 : bool = false;
-  var x_17 : i32;
-  var x_18 : i32;
-  var x_16 : array<i32, 2>;
-  var param : Array;
-  var x_20 : i32;
-  var x_21_phi : i32;
-  let x_12 : i32 = x_8.zero;
-  let x_22 : array<i32, 2> = x_16;
-  var x_23_1 : array<i32, 2> = x_22;
-  x_23_1[0u] = x_12;
-  let x_23 : array<i32, 2> = x_23_1;
-  x_16 = x_23;
-  let x_54 : array<i32, 2> = x_16;
-  param = Array(x_54);
-  x_52 = false;
-  loop {
-    var x_20_phi : i32;
-    var x_67_phi : bool;
-    loop {
-      let x_19 : i32 = param.values[x_12];
-      if ((x_19 == 0)) {
-        x_52 = true;
-        x_17 = 42;
-        x_20_phi = 42;
-        x_67_phi = true;
-        break;
-      }
-      x_20_phi = 0;
-      x_67_phi = false;
-      break;
-    }
-    x_20 = x_20_phi;
-    let x_67 : bool = x_67_phi;
-    x_21_phi = x_20;
-    if (x_67) {
-      break;
-    }
-    x_52 = true;
-    x_17 = 42;
-    x_21_phi = 42;
-    break;
-  }
-  let x_21 : i32 = x_21_phi;
-  x_18 = x_21;
-  if ((x_21 == 42)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_struct_Array_i1_2_1_(a : ptr<function, Array>) -> i32 {
-  var x_74 : bool = false;
-  var x_13 : i32;
-  var x_14 : i32;
-  var x_76_phi : bool;
-  var x_15_phi : i32;
-  x_76_phi = false;
-  loop {
-    var x_81 : bool;
-    var x_81_phi : bool;
-    var x_14_phi : i32;
-    var x_91_phi : bool;
-    let x_76 : bool = x_76_phi;
-    x_81_phi = x_76;
-    loop {
-      x_81 = x_81_phi;
-      let x_10 : i32 = x_8.zero;
-      let x_11 : i32 = (*(a)).values[x_10];
-      if ((x_11 == 0)) {
-        x_74 = true;
-        x_13 = 42;
-        x_14_phi = 42;
-        x_91_phi = true;
-        break;
-      }
-      x_14_phi = 0;
-      x_91_phi = x_81;
-      break;
-
-      continuing {
-        x_81_phi = false;
-      }
-    }
-    x_14 = x_14_phi;
-    let x_91 : bool = x_91_phi;
-    x_15_phi = x_14;
-    if (x_91) {
-      break;
-    }
-    x_74 = true;
-    x_13 = 42;
-    x_15_phi = 42;
-    break;
-
-    continuing {
-      x_76_phi = false;
-    }
-  }
-  let x_15 : i32 = x_15_phi;
-  return x_15;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 420b07f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_33 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v = clamp(cosh(float4(1.0f, 1.0f, 1.0f, 1.0f)), float4(x_33, x_33, x_33, x_33), float4(1.0f, 1.0f, 1.0f, 1.0f));
-  const float x_38 = v.x;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_43 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_46 = v.z;
-  x_GLF_color = float4(x_38, float(x_40), float(x_43), x_46);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2accd6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float const x_33 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v = clamp(cosh(float4(1.0f, 1.0f, 1.0f, 1.0f)), float4(x_33, x_33, x_33, x_33), float4(1.0f, 1.0f, 1.0f, 1.0f));
-  float const x_38 = v.x;
-  int const x_40 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_43 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_46 = v.z;
-  *(tint_symbol_3) = float4(x_38, float(x_40), float(x_43), x_46);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ac15259..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-         %31 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-       %buf1 = OpTypeStruct %_arr_int_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %34 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %29 = OpLoad %float %28
-         %32 = OpExtInst %v4float %31 Cosh %34
-         %35 = OpCompositeConstruct %v4float %29 %29 %29 %29
-         %30 = OpExtInst %v4float %31 NClamp %32 %35 %34
-               OpStore %v %30
-         %37 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %38 = OpLoad %float %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %45 = OpAccessChain %_ptr_Function_float %v %uint_2
-         %46 = OpLoad %float %45
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpCompositeConstruct %v4float %38 %47 %48 %46
-               OpStore %x_GLF_color %49
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b0081f2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_33 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v = clamp(cosh(vec4<f32>(1.0, 1.0, 1.0, 1.0)), vec4<f32>(x_33, x_33, x_33, x_33), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_38 : f32 = v.x;
-  let x_40 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_43 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_46 : f32 = v.z;
-  x_GLF_color = vec4<f32>(x_38, f32(x_40), f32(x_43), x_46);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 420b07f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_33 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v = clamp(cosh(float4(1.0f, 1.0f, 1.0f, 1.0f)), float4(x_33, x_33, x_33, x_33), float4(1.0f, 1.0f, 1.0f, 1.0f));
-  const float x_38 = v.x;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_43 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_46 = v.z;
-  x_GLF_color = float4(x_38, float(x_40), float(x_43), x_46);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2accd6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float const x_33 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v = clamp(cosh(float4(1.0f, 1.0f, 1.0f, 1.0f)), float4(x_33, x_33, x_33, x_33), float4(1.0f, 1.0f, 1.0f, 1.0f));
-  float const x_38 = v.x;
-  int const x_40 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_43 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_46 = v.z;
-  *(tint_symbol_3) = float4(x_38, float(x_40), float(x_43), x_46);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ac15259..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-         %31 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-       %buf1 = OpTypeStruct %_arr_int_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %34 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %29 = OpLoad %float %28
-         %32 = OpExtInst %v4float %31 Cosh %34
-         %35 = OpCompositeConstruct %v4float %29 %29 %29 %29
-         %30 = OpExtInst %v4float %31 NClamp %32 %35 %34
-               OpStore %v %30
-         %37 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %38 = OpLoad %float %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %45 = OpAccessChain %_ptr_Function_float %v %uint_2
-         %46 = OpLoad %float %45
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpCompositeConstruct %v4float %38 %47 %48 %46
-               OpStore %x_GLF_color %49
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b0081f2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cosh-clamped-to-one/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_33 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v = clamp(cosh(vec4<f32>(1.0, 1.0, 1.0, 1.0)), vec4<f32>(x_33, x_33, x_33, x_33), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_38 : f32 = v.x;
-  let x_40 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_43 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_46 : f32 = v.z;
-  x_GLF_color = vec4<f32>(x_38, f32(x_40), f32(x_43), x_46);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index da96fe6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,104 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int indexable[2] = (int[2])0;
-  const int x_36 = asint(x_6[2].x);
-  a = x_36;
-  const int x_38 = asint(x_6[3].x);
-  b = x_38;
-  const int x_40 = asint(x_6[2].x);
-  const float x_41 = float(x_40);
-  x_GLF_color = float4(x_41, x_41, x_41, x_41);
-  const int x_44 = asint(x_6[2].x);
-  i = x_44;
-  while (true) {
-    const int x_49 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_51 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    const int x_54 = i;
-    const int x_56 = asint(x_6[3].x);
-    if ((x_54 > x_56)) {
-      a = (a + 1);
-      if (false) {
-        const int x_65 = asint(x_6[2].x);
-        i_1 = x_65;
-        while (true) {
-          const int x_70 = i_1;
-          const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-          const int x_72 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-          if ((x_70 < x_72)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_78 = asint(x_6[2].x);
-  i_2 = x_78;
-  while (true) {
-    const int x_83 = i_2;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_85 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_83 < x_85)) {
-    } else {
-      break;
-    }
-    const int x_89 = asint(x_6[3].x);
-    const int x_91 = asint(x_6[4].x);
-    const int x_93 = b;
-    const int tint_symbol_2[2] = {x_89, x_91};
-    indexable = tint_symbol_2;
-    const int x_95 = indexable[x_93];
-    a = (a + x_95);
-    {
-      i_2 = (i_2 + 1);
-    }
-  }
-  const int x_100 = a;
-  const int x_102 = asint(x_6[1].x);
-  if ((x_100 == x_102)) {
-    const int x_107 = asint(x_6[3].x);
-    const int x_110 = asint(x_6[2].x);
-    const int x_113 = asint(x_6[2].x);
-    const int x_116 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.msl
deleted file mode 100644
index a068caa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  tint_array_wrapper_1 indexable = {};
-  int const x_36 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_36;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  b = x_38;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_41 = float(x_40);
-  *(tint_symbol_4) = float4(x_41, x_41, x_41, x_41);
-  int const x_44 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_44;
-  while (true) {
-    int const x_49 = i;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    int const x_54 = i;
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_54 > x_56)) {
-      int const x_60 = a;
-      a = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-      if (false) {
-        int const x_65 = x_6.x_GLF_uniform_int_values.arr[2].el;
-        i_1 = x_65;
-        while (true) {
-          int const x_70 = i_1;
-          int const x_72 = x_6.x_GLF_uniform_int_values.arr[0].el;
-          if ((x_70 < x_72)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-    {
-      int const x_75 = i;
-      i = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-    }
-  }
-  int const x_78 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i_2 = x_78;
-  while (true) {
-    int const x_83 = i_2;
-    int const x_85 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_83 < x_85)) {
-    } else {
-      break;
-    }
-    int const x_89 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_91 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_93 = b;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_89, x_91}};
-    indexable = tint_symbol_2;
-    int const x_95 = indexable.arr[x_93];
-    int const x_96 = a;
-    a = as_type<int>((as_type<uint>(x_96) + as_type<uint>(x_95)));
-    {
-      int const x_98 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-    }
-  }
-  int const x_100 = a;
-  int const x_102 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_100 == x_102)) {
-    int const x_107 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_110 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_113 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_116 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_4) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 9328b25..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,229 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 141
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %30 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %130 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-        %i_1 = OpVariable %_ptr_Function_int Function %21
-        %i_2 = OpVariable %_ptr_Function_int Function %21
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_2 Function %30
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %35 = OpLoad %int %34
-               OpStore %a %35
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %38 = OpLoad %int %37
-               OpStore %b %38
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %40 = OpLoad %int %39
-         %41 = OpConvertSToF %float %40
-         %42 = OpCompositeConstruct %v4float %41 %41 %41 %41
-               OpStore %x_GLF_color %42
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %44 = OpLoad %int %43
-               OpStore %i %44
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpSLessThan %bool %49 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %46
-         %55 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %60 = OpLoad %int %59
-         %61 = OpSGreaterThan %bool %58 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpLoad %int %a
-         %66 = OpIAdd %int %64 %int_1
-               OpStore %a %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %false %69 %68
-         %69 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %71 = OpLoad %int %70
-               OpStore %i_1 %71
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %int %i_1
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %78 = OpLoad %int %77
-         %79 = OpSLessThan %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpBranch %80
-         %82 = OpLabel
-               OpBranch %73
-         %80 = OpLabel
-               OpReturn
-         %74 = OpLabel
-               OpBranch %72
-         %73 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %62
-         %62 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-         %83 = OpLoad %int %i
-         %84 = OpIAdd %int %83 %int_1
-               OpStore %i %84
-               OpBranch %45
-         %46 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %86 = OpLoad %int %85
-               OpStore %i_2 %86
-               OpBranch %87
-         %87 = OpLabel
-               OpLoopMerge %88 %89 None
-               OpBranch %90
-         %90 = OpLabel
-         %91 = OpLoad %int %i_2
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %94 = OpSLessThan %bool %91 %93
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %97
-         %96 = OpLabel
-               OpBranch %95
-         %97 = OpLabel
-               OpBranch %88
-         %95 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %99 = OpLoad %int %98
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %102 = OpLoad %int %101
-        %103 = OpLoad %int %b
-        %104 = OpCompositeConstruct %_arr_int_uint_2 %99 %102
-               OpStore %indexable %104
-        %105 = OpAccessChain %_ptr_Function_int %indexable %103
-        %106 = OpLoad %int %105
-        %107 = OpLoad %int %a
-        %108 = OpIAdd %int %107 %106
-               OpStore %a %108
-               OpBranch %89
-         %89 = OpLabel
-        %109 = OpLoad %int %i_2
-        %110 = OpIAdd %int %109 %int_1
-               OpStore %i_2 %110
-               OpBranch %87
-         %88 = OpLabel
-        %111 = OpLoad %int %a
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %113 = OpLoad %int %112
-        %114 = OpIEqual %bool %111 %113
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %115
-        %116 = OpLabel
-        %117 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %118 = OpLoad %int %117
-        %119 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %120 = OpLoad %int %119
-        %121 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %122 = OpLoad %int %121
-        %123 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %124 = OpLoad %int %123
-        %125 = OpConvertSToF %float %118
-        %126 = OpConvertSToF %float %120
-        %127 = OpConvertSToF %float %122
-        %128 = OpConvertSToF %float %124
-        %129 = OpCompositeConstruct %v4float %125 %126 %127 %128
-               OpStore %x_GLF_color %129
-               OpBranch %115
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %130
-        %133 = OpLabel
-        %134 = OpFunctionCall %void %main_1
-        %135 = OpLoad %v4float %x_GLF_color
-        %136 = OpCompositeConstruct %main_out %135
-               OpReturnValue %136
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %138 = OpLabel
-        %139 = OpFunctionCall %main_out %main_inner
-        %140 = OpCompositeExtract %v4float %139 0
-               OpStore %x_GLF_color_1_1 %140
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 723c264..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,103 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var indexable : array<i32, 2>;
-  let x_36 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_36;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[3];
-  b = x_38;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_41 : f32 = f32(x_40);
-  x_GLF_color = vec4<f32>(x_41, x_41, x_41, x_41);
-  let x_44 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_44;
-  loop {
-    let x_49 : i32 = i;
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    let x_54 : i32 = i;
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[3];
-    if ((x_54 > x_56)) {
-      let x_60 : i32 = a;
-      a = (x_60 + 1);
-      if (false) {
-        let x_65 : i32 = x_6.x_GLF_uniform_int_values[2];
-        i_1 = x_65;
-        loop {
-          let x_70 : i32 = i_1;
-          let x_72 : i32 = x_6.x_GLF_uniform_int_values[0];
-          if ((x_70 < x_72)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-
-    continuing {
-      let x_75 : i32 = i;
-      i = (x_75 + 1);
-    }
-  }
-  let x_78 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i_2 = x_78;
-  loop {
-    let x_83 : i32 = i_2;
-    let x_85 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_83 < x_85)) {
-    } else {
-      break;
-    }
-    let x_89 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_91 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_93 : i32 = b;
-    indexable = array<i32, 2>(x_89, x_91);
-    let x_95 : i32 = indexable[x_93];
-    let x_96 : i32 = a;
-    a = (x_96 + x_95);
-
-    continuing {
-      let x_98 : i32 = i_2;
-      i_2 = (x_98 + 1);
-    }
-  }
-  let x_100 : i32 = a;
-  let x_102 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_100 == x_102)) {
-    let x_107 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_110 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_113 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_116 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index da96fe6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,104 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int indexable[2] = (int[2])0;
-  const int x_36 = asint(x_6[2].x);
-  a = x_36;
-  const int x_38 = asint(x_6[3].x);
-  b = x_38;
-  const int x_40 = asint(x_6[2].x);
-  const float x_41 = float(x_40);
-  x_GLF_color = float4(x_41, x_41, x_41, x_41);
-  const int x_44 = asint(x_6[2].x);
-  i = x_44;
-  while (true) {
-    const int x_49 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_51 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    const int x_54 = i;
-    const int x_56 = asint(x_6[3].x);
-    if ((x_54 > x_56)) {
-      a = (a + 1);
-      if (false) {
-        const int x_65 = asint(x_6[2].x);
-        i_1 = x_65;
-        while (true) {
-          const int x_70 = i_1;
-          const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-          const int x_72 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-          if ((x_70 < x_72)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_78 = asint(x_6[2].x);
-  i_2 = x_78;
-  while (true) {
-    const int x_83 = i_2;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_85 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_83 < x_85)) {
-    } else {
-      break;
-    }
-    const int x_89 = asint(x_6[3].x);
-    const int x_91 = asint(x_6[4].x);
-    const int x_93 = b;
-    const int tint_symbol_2[2] = {x_89, x_91};
-    indexable = tint_symbol_2;
-    const int x_95 = indexable[x_93];
-    a = (a + x_95);
-    {
-      i_2 = (i_2 + 1);
-    }
-  }
-  const int x_100 = a;
-  const int x_102 = asint(x_6[1].x);
-  if ((x_100 == x_102)) {
-    const int x_107 = asint(x_6[3].x);
-    const int x_110 = asint(x_6[2].x);
-    const int x_113 = asint(x_6[2].x);
-    const int x_116 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.msl
deleted file mode 100644
index a068caa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  tint_array_wrapper_1 indexable = {};
-  int const x_36 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_36;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  b = x_38;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_41 = float(x_40);
-  *(tint_symbol_4) = float4(x_41, x_41, x_41, x_41);
-  int const x_44 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_44;
-  while (true) {
-    int const x_49 = i;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    int const x_54 = i;
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_54 > x_56)) {
-      int const x_60 = a;
-      a = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-      if (false) {
-        int const x_65 = x_6.x_GLF_uniform_int_values.arr[2].el;
-        i_1 = x_65;
-        while (true) {
-          int const x_70 = i_1;
-          int const x_72 = x_6.x_GLF_uniform_int_values.arr[0].el;
-          if ((x_70 < x_72)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-    {
-      int const x_75 = i;
-      i = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-    }
-  }
-  int const x_78 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i_2 = x_78;
-  while (true) {
-    int const x_83 = i_2;
-    int const x_85 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_83 < x_85)) {
-    } else {
-      break;
-    }
-    int const x_89 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_91 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_93 = b;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_89, x_91}};
-    indexable = tint_symbol_2;
-    int const x_95 = indexable.arr[x_93];
-    int const x_96 = a;
-    a = as_type<int>((as_type<uint>(x_96) + as_type<uint>(x_95)));
-    {
-      int const x_98 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-    }
-  }
-  int const x_100 = a;
-  int const x_102 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_100 == x_102)) {
-    int const x_107 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_110 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_113 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_116 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_4) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9328b25..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,229 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 141
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %30 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %130 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-        %i_1 = OpVariable %_ptr_Function_int Function %21
-        %i_2 = OpVariable %_ptr_Function_int Function %21
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_2 Function %30
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %35 = OpLoad %int %34
-               OpStore %a %35
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %38 = OpLoad %int %37
-               OpStore %b %38
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %40 = OpLoad %int %39
-         %41 = OpConvertSToF %float %40
-         %42 = OpCompositeConstruct %v4float %41 %41 %41 %41
-               OpStore %x_GLF_color %42
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %44 = OpLoad %int %43
-               OpStore %i %44
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpSLessThan %bool %49 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %46
-         %55 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %60 = OpLoad %int %59
-         %61 = OpSGreaterThan %bool %58 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpLoad %int %a
-         %66 = OpIAdd %int %64 %int_1
-               OpStore %a %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %false %69 %68
-         %69 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %71 = OpLoad %int %70
-               OpStore %i_1 %71
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %int %i_1
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %78 = OpLoad %int %77
-         %79 = OpSLessThan %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpBranch %80
-         %82 = OpLabel
-               OpBranch %73
-         %80 = OpLabel
-               OpReturn
-         %74 = OpLabel
-               OpBranch %72
-         %73 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %62
-         %62 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-         %83 = OpLoad %int %i
-         %84 = OpIAdd %int %83 %int_1
-               OpStore %i %84
-               OpBranch %45
-         %46 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %86 = OpLoad %int %85
-               OpStore %i_2 %86
-               OpBranch %87
-         %87 = OpLabel
-               OpLoopMerge %88 %89 None
-               OpBranch %90
-         %90 = OpLabel
-         %91 = OpLoad %int %i_2
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %94 = OpSLessThan %bool %91 %93
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %97
-         %96 = OpLabel
-               OpBranch %95
-         %97 = OpLabel
-               OpBranch %88
-         %95 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %99 = OpLoad %int %98
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %102 = OpLoad %int %101
-        %103 = OpLoad %int %b
-        %104 = OpCompositeConstruct %_arr_int_uint_2 %99 %102
-               OpStore %indexable %104
-        %105 = OpAccessChain %_ptr_Function_int %indexable %103
-        %106 = OpLoad %int %105
-        %107 = OpLoad %int %a
-        %108 = OpIAdd %int %107 %106
-               OpStore %a %108
-               OpBranch %89
-         %89 = OpLabel
-        %109 = OpLoad %int %i_2
-        %110 = OpIAdd %int %109 %int_1
-               OpStore %i_2 %110
-               OpBranch %87
-         %88 = OpLabel
-        %111 = OpLoad %int %a
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %113 = OpLoad %int %112
-        %114 = OpIEqual %bool %111 %113
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %115
-        %116 = OpLabel
-        %117 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %118 = OpLoad %int %117
-        %119 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %120 = OpLoad %int %119
-        %121 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %122 = OpLoad %int %121
-        %123 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %124 = OpLoad %int %123
-        %125 = OpConvertSToF %float %118
-        %126 = OpConvertSToF %float %120
-        %127 = OpConvertSToF %float %122
-        %128 = OpConvertSToF %float %124
-        %129 = OpCompositeConstruct %v4float %125 %126 %127 %128
-               OpStore %x_GLF_color %129
-               OpBranch %115
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %130
-        %133 = OpLabel
-        %134 = OpFunctionCall %void %main_1
-        %135 = OpLoad %v4float %x_GLF_color
-        %136 = OpCompositeConstruct %main_out %135
-               OpReturnValue %136
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %138 = OpLabel
-        %139 = OpFunctionCall %main_out %main_inner
-        %140 = OpCompositeExtract %v4float %139 0
-               OpStore %x_GLF_color_1_1 %140
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 723c264..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,103 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var indexable : array<i32, 2>;
-  let x_36 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_36;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[3];
-  b = x_38;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_41 : f32 = f32(x_40);
-  x_GLF_color = vec4<f32>(x_41, x_41, x_41, x_41);
-  let x_44 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_44;
-  loop {
-    let x_49 : i32 = i;
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    let x_54 : i32 = i;
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[3];
-    if ((x_54 > x_56)) {
-      let x_60 : i32 = a;
-      a = (x_60 + 1);
-      if (false) {
-        let x_65 : i32 = x_6.x_GLF_uniform_int_values[2];
-        i_1 = x_65;
-        loop {
-          let x_70 : i32 = i_1;
-          let x_72 : i32 = x_6.x_GLF_uniform_int_values[0];
-          if ((x_70 < x_72)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-
-    continuing {
-      let x_75 : i32 = i;
-      i = (x_75 + 1);
-    }
-  }
-  let x_78 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i_2 = x_78;
-  loop {
-    let x_83 : i32 = i_2;
-    let x_85 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_83 < x_85)) {
-    } else {
-      break;
-    }
-    let x_89 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_91 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_93 : i32 = b;
-    indexable = array<i32, 2>(x_89, x_91);
-    let x_95 : i32 = indexable[x_93];
-    let x_96 : i32 = a;
-    a = (x_96 + x_95);
-
-    continuing {
-      let x_98 : i32 = i_2;
-      i_2 = (x_98 + 1);
-    }
-  }
-  let x_100 : i32 = a;
-  let x_102 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_100 == x_102)) {
-    let x_107 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_110 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_113 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_116 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.hlsl
deleted file mode 100644
index 6b3aa78..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int indexable[2] = (int[2])0;
-  a = 0;
-  b = 1;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      if ((i > 1)) {
-        a = (a + 1);
-        if (false) {
-          i_1 = 0;
-          while (true) {
-            if ((i_1 < 10)) {
-            } else {
-              break;
-            }
-            return;
-          }
-        }
-      }
-    }
-  }
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      const int x_65 = b;
-      const int tint_symbol_1[2] = {1, 2};
-      indexable = tint_symbol_1;
-      const int x_67 = indexable[x_65];
-      a = (a + x_67);
-    }
-  }
-  if ((a == 28)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.msl
deleted file mode 100644
index 719e00b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.msl
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_4) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  tint_array_wrapper indexable = {};
-  a = 0;
-  b = 1;
-  *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    int const x_38 = i;
-    if ((x_38 < 10)) {
-    } else {
-      break;
-    }
-    int const x_41 = i;
-    if ((x_41 > 1)) {
-      int const x_45 = a;
-      a = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-      if (false) {
-        i_1 = 0;
-        while (true) {
-          int const x_53 = i_1;
-          if ((x_53 < 10)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-    {
-      int const x_56 = i;
-      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-    }
-  }
-  i_2 = 0;
-  while (true) {
-    int const x_62 = i_2;
-    if ((x_62 < 10)) {
-    } else {
-      break;
-    }
-    int const x_65 = b;
-    tint_array_wrapper const tint_symbol_2 = {.arr={1, 2}};
-    indexable = tint_symbol_2;
-    int const x_67 = indexable.arr[x_65];
-    int const x_68 = a;
-    a = as_type<int>((as_type<uint>(x_68) + as_type<uint>(x_67)));
-    {
-      int const x_70 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-    }
-  }
-  int const x_72 = a;
-  if ((x_72 == 28)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5) {
-  main_1(tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.spvasm
deleted file mode 100644
index ce1a451..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,176 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 97
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %25 = OpConstantNull %_arr_int_uint_2
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %int_2 = OpConstant %int 2
-         %72 = OpConstantComposite %_arr_int_uint_2 %int_1 %int_2
-     %int_28 = OpConstant %int 28
-    %float_1 = OpConstant %float 1
-         %85 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %86 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %15
-          %b = OpVariable %_ptr_Function_int Function %15
-          %i = OpVariable %_ptr_Function_int Function %15
-        %i_1 = OpVariable %_ptr_Function_int Function %15
-        %i_2 = OpVariable %_ptr_Function_int Function %15
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_2 Function %25
-               OpStore %a %int_0
-               OpStore %b %int_1
-               OpStore %x_GLF_color %29
-               OpStore %i %int_0
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpSLessThan %bool %34 %int_10
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpBranch %38
-         %40 = OpLabel
-               OpBranch %31
-         %38 = OpLabel
-         %41 = OpLoad %int %i
-         %42 = OpSGreaterThan %bool %41 %int_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-         %45 = OpLoad %int %a
-         %46 = OpIAdd %int %45 %int_1
-               OpStore %a %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %false %49 %48
-         %49 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %50
-         %50 = OpLabel
-               OpLoopMerge %51 %52 None
-               OpBranch %53
-         %53 = OpLabel
-         %54 = OpLoad %int %i_1
-         %55 = OpSLessThan %bool %54 %int_10
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpBranch %56
-         %58 = OpLabel
-               OpBranch %51
-         %56 = OpLabel
-               OpReturn
-         %52 = OpLabel
-               OpBranch %50
-         %51 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpIAdd %int %59 %int_1
-               OpStore %i %60
-               OpBranch %30
-         %31 = OpLabel
-               OpStore %i_2 %int_0
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %65 = OpLoad %int %i_2
-         %66 = OpSLessThan %bool %65 %int_10
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %62
-         %67 = OpLabel
-         %70 = OpLoad %int %b
-               OpStore %indexable %72
-         %73 = OpAccessChain %_ptr_Function_int %indexable %70
-         %74 = OpLoad %int %73
-         %75 = OpLoad %int %a
-         %76 = OpIAdd %int %75 %74
-               OpStore %a %76
-               OpBranch %63
-         %63 = OpLabel
-         %77 = OpLoad %int %i_2
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %i_2 %78
-               OpBranch %61
-         %62 = OpLabel
-         %79 = OpLoad %int %a
-         %81 = OpIEqual %bool %79 %int_28
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %82
-         %83 = OpLabel
-               OpStore %x_GLF_color %85
-               OpBranch %82
-         %82 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %86
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %94 = OpLabel
-         %95 = OpFunctionCall %main_out %main_inner
-         %96 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %96
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.wgsl
deleted file mode 100644
index c7c18d1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var indexable : array<i32, 2>;
-  a = 0;
-  b = 1;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  i = 0;
-  loop {
-    let x_38 : i32 = i;
-    if ((x_38 < 10)) {
-    } else {
-      break;
-    }
-    let x_41 : i32 = i;
-    if ((x_41 > 1)) {
-      let x_45 : i32 = a;
-      a = (x_45 + 1);
-      if (false) {
-        i_1 = 0;
-        loop {
-          let x_53 : i32 = i_1;
-          if ((x_53 < 10)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-
-    continuing {
-      let x_56 : i32 = i;
-      i = (x_56 + 1);
-    }
-  }
-  i_2 = 0;
-  loop {
-    let x_62 : i32 = i_2;
-    if ((x_62 < 10)) {
-    } else {
-      break;
-    }
-    let x_65 : i32 = b;
-    indexable = array<i32, 2>(1, 2);
-    let x_67 : i32 = indexable[x_65];
-    let x_68 : i32 = a;
-    a = (x_68 + x_67);
-
-    continuing {
-      let x_70 : i32 = i_2;
-      i_2 = (x_70 + 1);
-    }
-  }
-  let x_72 : i32 = a;
-  if ((x_72 == 28)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.hlsl
deleted file mode 100644
index 6b3aa78..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int indexable[2] = (int[2])0;
-  a = 0;
-  b = 1;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      if ((i > 1)) {
-        a = (a + 1);
-        if (false) {
-          i_1 = 0;
-          while (true) {
-            if ((i_1 < 10)) {
-            } else {
-              break;
-            }
-            return;
-          }
-        }
-      }
-    }
-  }
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      const int x_65 = b;
-      const int tint_symbol_1[2] = {1, 2};
-      indexable = tint_symbol_1;
-      const int x_67 = indexable[x_65];
-      a = (a + x_67);
-    }
-  }
-  if ((a == 28)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.msl
deleted file mode 100644
index 719e00b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.msl
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_4) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  tint_array_wrapper indexable = {};
-  a = 0;
-  b = 1;
-  *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    int const x_38 = i;
-    if ((x_38 < 10)) {
-    } else {
-      break;
-    }
-    int const x_41 = i;
-    if ((x_41 > 1)) {
-      int const x_45 = a;
-      a = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-      if (false) {
-        i_1 = 0;
-        while (true) {
-          int const x_53 = i_1;
-          if ((x_53 < 10)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-    {
-      int const x_56 = i;
-      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-    }
-  }
-  i_2 = 0;
-  while (true) {
-    int const x_62 = i_2;
-    if ((x_62 < 10)) {
-    } else {
-      break;
-    }
-    int const x_65 = b;
-    tint_array_wrapper const tint_symbol_2 = {.arr={1, 2}};
-    indexable = tint_symbol_2;
-    int const x_67 = indexable.arr[x_65];
-    int const x_68 = a;
-    a = as_type<int>((as_type<uint>(x_68) + as_type<uint>(x_67)));
-    {
-      int const x_70 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-    }
-  }
-  int const x_72 = a;
-  if ((x_72 == 28)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5) {
-  main_1(tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.spvasm
deleted file mode 100644
index ce1a451..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,176 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 97
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %25 = OpConstantNull %_arr_int_uint_2
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %int_2 = OpConstant %int 2
-         %72 = OpConstantComposite %_arr_int_uint_2 %int_1 %int_2
-     %int_28 = OpConstant %int 28
-    %float_1 = OpConstant %float 1
-         %85 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %86 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %15
-          %b = OpVariable %_ptr_Function_int Function %15
-          %i = OpVariable %_ptr_Function_int Function %15
-        %i_1 = OpVariable %_ptr_Function_int Function %15
-        %i_2 = OpVariable %_ptr_Function_int Function %15
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_2 Function %25
-               OpStore %a %int_0
-               OpStore %b %int_1
-               OpStore %x_GLF_color %29
-               OpStore %i %int_0
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpSLessThan %bool %34 %int_10
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpBranch %38
-         %40 = OpLabel
-               OpBranch %31
-         %38 = OpLabel
-         %41 = OpLoad %int %i
-         %42 = OpSGreaterThan %bool %41 %int_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-         %45 = OpLoad %int %a
-         %46 = OpIAdd %int %45 %int_1
-               OpStore %a %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %false %49 %48
-         %49 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %50
-         %50 = OpLabel
-               OpLoopMerge %51 %52 None
-               OpBranch %53
-         %53 = OpLabel
-         %54 = OpLoad %int %i_1
-         %55 = OpSLessThan %bool %54 %int_10
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpBranch %56
-         %58 = OpLabel
-               OpBranch %51
-         %56 = OpLabel
-               OpReturn
-         %52 = OpLabel
-               OpBranch %50
-         %51 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpIAdd %int %59 %int_1
-               OpStore %i %60
-               OpBranch %30
-         %31 = OpLabel
-               OpStore %i_2 %int_0
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %65 = OpLoad %int %i_2
-         %66 = OpSLessThan %bool %65 %int_10
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %62
-         %67 = OpLabel
-         %70 = OpLoad %int %b
-               OpStore %indexable %72
-         %73 = OpAccessChain %_ptr_Function_int %indexable %70
-         %74 = OpLoad %int %73
-         %75 = OpLoad %int %a
-         %76 = OpIAdd %int %75 %74
-               OpStore %a %76
-               OpBranch %63
-         %63 = OpLabel
-         %77 = OpLoad %int %i_2
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %i_2 %78
-               OpBranch %61
-         %62 = OpLabel
-         %79 = OpLoad %int %a
-         %81 = OpIEqual %bool %79 %int_28
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %82
-         %83 = OpLabel
-               OpStore %x_GLF_color %85
-               OpBranch %82
-         %82 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %86
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %94 = OpLabel
-         %95 = OpFunctionCall %main_out %main_inner
-         %96 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %96
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.wgsl
deleted file mode 100644
index c7c18d1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-cumulate-loops-unreachable/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var indexable : array<i32, 2>;
-  a = 0;
-  b = 1;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  i = 0;
-  loop {
-    let x_38 : i32 = i;
-    if ((x_38 < 10)) {
-    } else {
-      break;
-    }
-    let x_41 : i32 = i;
-    if ((x_41 > 1)) {
-      let x_45 : i32 = a;
-      a = (x_45 + 1);
-      if (false) {
-        i_1 = 0;
-        loop {
-          let x_53 : i32 = i_1;
-          if ((x_53 < 10)) {
-          } else {
-            break;
-          }
-          return;
-        }
-      }
-    }
-
-    continuing {
-      let x_56 : i32 = i;
-      i = (x_56 + 1);
-    }
-  }
-  i_2 = 0;
-  loop {
-    let x_62 : i32 = i_2;
-    if ((x_62 < 10)) {
-    } else {
-      break;
-    }
-    let x_65 : i32 = b;
-    indexable = array<i32, 2>(1, 2);
-    let x_67 : i32 = indexable[x_65];
-    let x_68 : i32 = a;
-    a = (x_68 + x_67);
-
-    continuing {
-      let x_70 : i32 = i_2;
-      i_2 = (x_70 + 1);
-    }
-  }
-  let x_72 : i32 = a;
-  if ((x_72 == 28)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7e814d5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float A1[3] = (float[3])0;
-  int a = 0;
-  float b = 0.0f;
-  bool c = false;
-  bool x_36 = false;
-  const float x_38 = asfloat(x_6[2].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_42 = asfloat(x_6[1].x);
-  const float tint_symbol_3[3] = {x_38, x_40, x_42};
-  A1 = tint_symbol_3;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_49 = asint(x_9[1].x);
-  a = clamp(x_45, x_47, x_49);
-  const int x_51 = a;
-  const int x_53 = asint(x_9[1].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_55 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_58 = A1[clamp(x_51, x_53, x_55)];
-  b = x_58;
-  const float x_59 = b;
-  const int x_61 = asint(x_9[1].x);
-  const float x_63 = A1[x_61];
-  if ((x_59 < x_63)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_69 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_71 = asfloat(x_6[2].x);
-    x_36 = (x_69 > x_71);
-  } else {
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_74 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_76 = asint(x_9[2].x);
-    const float x_78 = A1[x_76];
-    x_36 = (x_74 < x_78);
-  }
-  c = x_36;
-  if (c) {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_86 = asint(x_9[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const int x_89 = asint(x_9[1].x);
-    const int x_92 = asint(x_9[1].x);
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_95 = asint(x_9[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    x_GLF_color = float4(float(x_86), float(x_89), float(x_92), float(x_95));
-  } else {
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const float x_99 = asfloat(x_6[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    x_GLF_color = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0c324b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,96 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 A1 = {};
-  int a = 0;
-  float b = 0.0f;
-  bool c = false;
-  bool x_36 = false;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_38, x_40, x_42}};
-  A1 = tint_symbol_2;
-  int const x_45 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  int const x_47 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  int const x_49 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  a = clamp(x_45, x_47, x_49);
-  int const x_51 = a;
-  int const x_53 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  int const x_55 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  float const x_58 = A1.arr[clamp(x_51, x_53, x_55)];
-  b = x_58;
-  float const x_59 = b;
-  int const x_61 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  float const x_63 = A1.arr[x_61];
-  if ((x_59 < x_63)) {
-    float const x_69 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_71 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    x_36 = (x_69 > x_71);
-  } else {
-    float const x_74 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    int const x_76 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_78 = A1.arr[x_76];
-    x_36 = (x_74 < x_78);
-  }
-  bool const x_80 = x_36;
-  c = x_80;
-  bool const x_81 = c;
-  if (x_81) {
-    int const x_86 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_89 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_92 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_95 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_86), float(x_89), float(x_92), float(x_95));
-  } else {
-    float const x_99 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_4) = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 98f757a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,184 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 120
-; Schema: 0
-               OpCapability Shader
-         %58 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %A1 "A1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_36 "x_36"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_3_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_arr_float_uint_3_0 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3_0 = OpTypePointer Function %_arr_float_uint_3_0
-         %26 = OpConstantNull %_arr_float_uint_3_0
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %32 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %109 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %A1 = OpVariable %_ptr_Function__arr_float_uint_3_0 Function %26
-          %a = OpVariable %_ptr_Function_int Function %29
-          %b = OpVariable %_ptr_Function_float Function %32
-          %c = OpVariable %_ptr_Function_bool Function %36
-       %x_36 = OpVariable %_ptr_Function_bool Function %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %49 = OpCompositeConstruct %_arr_float_uint_3_0 %42 %45 %48
-               OpStore %A1 %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpExtInst %int %58 SClamp %52 %54 %56
-               OpStore %a %57
-         %59 = OpLoad %int %a
-         %60 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpExtInst %int %58 SClamp %59 %61 %63
-         %65 = OpAccessChain %_ptr_Function_float %A1 %64
-         %66 = OpLoad %float %65
-               OpStore %b %66
-         %67 = OpLoad %float %b
-         %68 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Function_float %A1 %69
-         %71 = OpLoad %float %70
-         %72 = OpFOrdLessThan %bool %67 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %79 = OpLoad %float %78
-         %80 = OpFOrdGreaterThan %bool %77 %79
-               OpStore %x_36 %80
-               OpBranch %73
-         %75 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %82 = OpLoad %float %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Function_float %A1 %84
-         %86 = OpLoad %float %85
-         %87 = OpFOrdLessThan %bool %82 %86
-               OpStore %x_36 %87
-               OpBranch %73
-         %73 = OpLabel
-         %88 = OpLoad %bool %x_36
-               OpStore %c %88
-         %89 = OpLoad %bool %c
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %100 = OpLoad %int %99
-        %101 = OpConvertSToF %float %94
-        %102 = OpConvertSToF %float %96
-        %103 = OpConvertSToF %float %98
-        %104 = OpConvertSToF %float %100
-        %105 = OpCompositeConstruct %v4float %101 %102 %103 %104
-               OpStore %x_GLF_color %105
-               OpBranch %90
-         %92 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %107 = OpLoad %float %106
-        %108 = OpCompositeConstruct %v4float %107 %107 %107 %107
-               OpStore %x_GLF_color %108
-               OpBranch %90
-         %90 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %109
-        %112 = OpLabel
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %117 = OpLabel
-        %118 = OpFunctionCall %main_out %main_inner
-        %119 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %119
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f6f65a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A1 : array<f32, 3>;
-  var a : i32;
-  var b : f32;
-  var c : bool;
-  var x_36 : bool;
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[1];
-  A1 = array<f32, 3>(x_38, x_40, x_42);
-  let x_45 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_47 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_49 : i32 = x_9.x_GLF_uniform_int_values[1];
-  a = clamp(x_45, x_47, x_49);
-  let x_51 : i32 = a;
-  let x_53 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_55 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_58 : f32 = A1[clamp(x_51, x_53, x_55)];
-  b = x_58;
-  let x_59 : f32 = b;
-  let x_61 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_63 : f32 = A1[x_61];
-  if ((x_59 < x_63)) {
-    let x_69 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_71 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_36 = (x_69 > x_71);
-  } else {
-    let x_74 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_76 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_78 : f32 = A1[x_76];
-    x_36 = (x_74 < x_78);
-  }
-  let x_80 : bool = x_36;
-  c = x_80;
-  let x_81 : bool = c;
-  if (x_81) {
-    let x_86 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_89 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_92 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_95 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_86), f32(x_89), f32(x_92), f32(x_95));
-  } else {
-    let x_99 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7e814d5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float A1[3] = (float[3])0;
-  int a = 0;
-  float b = 0.0f;
-  bool c = false;
-  bool x_36 = false;
-  const float x_38 = asfloat(x_6[2].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_42 = asfloat(x_6[1].x);
-  const float tint_symbol_3[3] = {x_38, x_40, x_42};
-  A1 = tint_symbol_3;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_49 = asint(x_9[1].x);
-  a = clamp(x_45, x_47, x_49);
-  const int x_51 = a;
-  const int x_53 = asint(x_9[1].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_55 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_58 = A1[clamp(x_51, x_53, x_55)];
-  b = x_58;
-  const float x_59 = b;
-  const int x_61 = asint(x_9[1].x);
-  const float x_63 = A1[x_61];
-  if ((x_59 < x_63)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_69 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_71 = asfloat(x_6[2].x);
-    x_36 = (x_69 > x_71);
-  } else {
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_74 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_76 = asint(x_9[2].x);
-    const float x_78 = A1[x_76];
-    x_36 = (x_74 < x_78);
-  }
-  c = x_36;
-  if (c) {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_86 = asint(x_9[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const int x_89 = asint(x_9[1].x);
-    const int x_92 = asint(x_9[1].x);
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_95 = asint(x_9[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    x_GLF_color = float4(float(x_86), float(x_89), float(x_92), float(x_95));
-  } else {
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const float x_99 = asfloat(x_6[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    x_GLF_color = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0c324b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,96 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 A1 = {};
-  int a = 0;
-  float b = 0.0f;
-  bool c = false;
-  bool x_36 = false;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_38, x_40, x_42}};
-  A1 = tint_symbol_2;
-  int const x_45 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  int const x_47 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  int const x_49 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  a = clamp(x_45, x_47, x_49);
-  int const x_51 = a;
-  int const x_53 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  int const x_55 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  float const x_58 = A1.arr[clamp(x_51, x_53, x_55)];
-  b = x_58;
-  float const x_59 = b;
-  int const x_61 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  float const x_63 = A1.arr[x_61];
-  if ((x_59 < x_63)) {
-    float const x_69 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_71 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    x_36 = (x_69 > x_71);
-  } else {
-    float const x_74 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    int const x_76 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_78 = A1.arr[x_76];
-    x_36 = (x_74 < x_78);
-  }
-  bool const x_80 = x_36;
-  c = x_80;
-  bool const x_81 = c;
-  if (x_81) {
-    int const x_86 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_89 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_92 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_95 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_86), float(x_89), float(x_92), float(x_95));
-  } else {
-    float const x_99 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_4) = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 98f757a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,184 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 120
-; Schema: 0
-               OpCapability Shader
-         %58 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %A1 "A1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_36 "x_36"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_3_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_arr_float_uint_3_0 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3_0 = OpTypePointer Function %_arr_float_uint_3_0
-         %26 = OpConstantNull %_arr_float_uint_3_0
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %32 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %109 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %A1 = OpVariable %_ptr_Function__arr_float_uint_3_0 Function %26
-          %a = OpVariable %_ptr_Function_int Function %29
-          %b = OpVariable %_ptr_Function_float Function %32
-          %c = OpVariable %_ptr_Function_bool Function %36
-       %x_36 = OpVariable %_ptr_Function_bool Function %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %49 = OpCompositeConstruct %_arr_float_uint_3_0 %42 %45 %48
-               OpStore %A1 %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpExtInst %int %58 SClamp %52 %54 %56
-               OpStore %a %57
-         %59 = OpLoad %int %a
-         %60 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpExtInst %int %58 SClamp %59 %61 %63
-         %65 = OpAccessChain %_ptr_Function_float %A1 %64
-         %66 = OpLoad %float %65
-               OpStore %b %66
-         %67 = OpLoad %float %b
-         %68 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Function_float %A1 %69
-         %71 = OpLoad %float %70
-         %72 = OpFOrdLessThan %bool %67 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %79 = OpLoad %float %78
-         %80 = OpFOrdGreaterThan %bool %77 %79
-               OpStore %x_36 %80
-               OpBranch %73
-         %75 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %82 = OpLoad %float %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Function_float %A1 %84
-         %86 = OpLoad %float %85
-         %87 = OpFOrdLessThan %bool %82 %86
-               OpStore %x_36 %87
-               OpBranch %73
-         %73 = OpLabel
-         %88 = OpLoad %bool %x_36
-               OpStore %c %88
-         %89 = OpLoad %bool %c
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %100 = OpLoad %int %99
-        %101 = OpConvertSToF %float %94
-        %102 = OpConvertSToF %float %96
-        %103 = OpConvertSToF %float %98
-        %104 = OpConvertSToF %float %100
-        %105 = OpCompositeConstruct %v4float %101 %102 %103 %104
-               OpStore %x_GLF_color %105
-               OpBranch %90
-         %92 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %107 = OpLoad %float %106
-        %108 = OpCompositeConstruct %v4float %107 %107 %107 %107
-               OpStore %x_GLF_color %108
-               OpBranch %90
-         %90 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %109
-        %112 = OpLabel
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %117 = OpLabel
-        %118 = OpFunctionCall %main_out %main_inner
-        %119 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %119
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f6f65a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-clamp-undefined-access-array/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A1 : array<f32, 3>;
-  var a : i32;
-  var b : f32;
-  var c : bool;
-  var x_36 : bool;
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[1];
-  A1 = array<f32, 3>(x_38, x_40, x_42);
-  let x_45 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_47 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_49 : i32 = x_9.x_GLF_uniform_int_values[1];
-  a = clamp(x_45, x_47, x_49);
-  let x_51 : i32 = a;
-  let x_53 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_55 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_58 : f32 = A1[clamp(x_51, x_53, x_55)];
-  b = x_58;
-  let x_59 : f32 = b;
-  let x_61 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_63 : f32 = A1[x_61];
-  if ((x_59 < x_63)) {
-    let x_69 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_71 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_36 = (x_69 > x_71);
-  } else {
-    let x_74 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_76 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_78 : f32 = A1[x_76];
-    x_36 = (x_74 < x_78);
-  }
-  let x_80 : bool = x_36;
-  c = x_80;
-  let x_81 : bool = c;
-  if (x_81) {
-    let x_86 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_89 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_92 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_95 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_86), f32(x_89), f32(x_92), f32(x_95));
-  } else {
-    let x_99 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8960e11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  const int x_36 = asint(x_6[3].x);
-  const float x_37 = float(x_36);
-  v = float4(x_37, x_37, x_37, x_37);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  i = x_40;
-  while (true) {
-    const int x_45 = i;
-    const int x_47 = asint(x_6[3].x);
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    set_float4(v, uint3(0u, 1u, 2u)[i], float(i));
-    {
-      i = (i + 1);
-    }
-  }
-  const float4 x_57 = v;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_59 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_62 = asint(x_6[1].x);
-  const int x_65 = asint(x_6[2].x);
-  const int x_68 = asint(x_6[3].x);
-  if (all((x_57 == float4(float(x_59), float(x_62), float(x_65), float(x_68))))) {
-    const int x_77 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_80 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_83 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_86 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_77), float(x_80), float(x_83), float(x_86));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_90 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_91 = float(x_90);
-    x_GLF_color = float4(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6511c45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  int i = 0;
-  int const x_36 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  float const x_37 = float(x_36);
-  v = float4(x_37, x_37, x_37, x_37);
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i = x_40;
-  while (true) {
-    int const x_45 = i;
-    int const x_47 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    int const x_51 = i;
-    v[uint3(0u, 1u, 2u)[x_50]] = float(x_51);
-    {
-      int const x_55 = i;
-      i = as_type<int>((as_type<uint>(x_55) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_57 = v;
-  int const x_59 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_65 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_68 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  if (all((x_57 == float4(float(x_59), float(x_62), float(x_65), float(x_68))))) {
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_80 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_83 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_86 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_77), float(x_80), float(x_83), float(x_86));
-  } else {
-    int const x_90 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_91 = float(x_90);
-    *(tint_symbol_3) = float4(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2d2245e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,162 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 108
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-     %v3uint = OpTypeVector %uint 3
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-         %51 = OpConstantComposite %v3uint %uint_0 %uint_1 %uint_2
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-     %v4bool = OpTypeVector %bool 4
-   %main_out = OpTypeStruct %v4float
-         %97 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %i = OpVariable %_ptr_Function_int Function %23
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %28 = OpLoad %int %27
-         %29 = OpConvertSToF %float %28
-         %30 = OpCompositeConstruct %v4float %29 %29 %29 %29
-               OpStore %v %30
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %33 = OpLoad %int %32
-               OpStore %i %33
-               OpBranch %34
-         %34 = OpLabel
-               OpLoopMerge %35 %36 None
-               OpBranch %37
-         %37 = OpLabel
-         %38 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %40 = OpLoad %int %39
-         %41 = OpSLessThan %bool %38 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %35
-         %43 = OpLabel
-         %46 = OpLoad %int %i
-         %47 = OpLoad %int %i
-         %52 = OpVectorExtractDynamic %uint %51 %46
-         %54 = OpAccessChain %_ptr_Function_float %v %52
-         %55 = OpConvertSToF %float %47
-               OpStore %54 %55
-               OpBranch %36
-         %36 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpIAdd %int %56 %int_1
-               OpStore %i %58
-               OpBranch %34
-         %35 = OpLabel
-         %59 = OpLoad %v4float %v
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %68 = OpLoad %int %67
-         %70 = OpConvertSToF %float %61
-         %71 = OpConvertSToF %float %63
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-         %75 = OpFOrdEqual %v4bool %59 %74
-         %69 = OpAll %bool %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %69 %78 %79
-         %78 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpConvertSToF %float %81
-         %89 = OpConvertSToF %float %83
-         %90 = OpConvertSToF %float %85
-         %91 = OpConvertSToF %float %87
-         %92 = OpCompositeConstruct %v4float %88 %89 %90 %91
-               OpStore %x_GLF_color %92
-               OpBranch %77
-         %79 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %94 = OpLoad %int %93
-         %95 = OpConvertSToF %float %94
-         %96 = OpCompositeConstruct %v4float %95 %95 %95 %95
-               OpStore %x_GLF_color %96
-               OpBranch %77
-         %77 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %97
-        %100 = OpLabel
-        %101 = OpFunctionCall %void %main_1
-        %102 = OpLoad %v4float %x_GLF_color
-        %103 = OpCompositeConstruct %main_out %102
-               OpReturnValue %103
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %105 = OpLabel
-        %106 = OpFunctionCall %main_out %main_inner
-        %107 = OpCompositeExtract %v4float %106 0
-               OpStore %x_GLF_color_1_1 %107
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f495ad7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var i : i32;
-  let x_36 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_37 : f32 = f32(x_36);
-  v = vec4<f32>(x_37, x_37, x_37, x_37);
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i = x_40;
-  loop {
-    let x_45 : i32 = i;
-    let x_47 : i32 = x_6.x_GLF_uniform_int_values[3];
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    let x_51 : i32 = i;
-    v[vec3<u32>(0u, 1u, 2u)[x_50]] = f32(x_51);
-
-    continuing {
-      let x_55 : i32 = i;
-      i = (x_55 + 1);
-    }
-  }
-  let x_57 : vec4<f32> = v;
-  let x_59 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_65 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_68 : i32 = x_6.x_GLF_uniform_int_values[3];
-  if (all((x_57 == vec4<f32>(f32(x_59), f32(x_62), f32(x_65), f32(x_68))))) {
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_80 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_83 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_86 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_77), f32(x_80), f32(x_83), f32(x_86));
-  } else {
-    let x_90 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_91 : f32 = f32(x_90);
-    x_GLF_color = vec4<f32>(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8960e11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  const int x_36 = asint(x_6[3].x);
-  const float x_37 = float(x_36);
-  v = float4(x_37, x_37, x_37, x_37);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  i = x_40;
-  while (true) {
-    const int x_45 = i;
-    const int x_47 = asint(x_6[3].x);
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    set_float4(v, uint3(0u, 1u, 2u)[i], float(i));
-    {
-      i = (i + 1);
-    }
-  }
-  const float4 x_57 = v;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_59 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_62 = asint(x_6[1].x);
-  const int x_65 = asint(x_6[2].x);
-  const int x_68 = asint(x_6[3].x);
-  if (all((x_57 == float4(float(x_59), float(x_62), float(x_65), float(x_68))))) {
-    const int x_77 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_80 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_83 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_86 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_77), float(x_80), float(x_83), float(x_86));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_90 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_91 = float(x_90);
-    x_GLF_color = float4(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6511c45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  int i = 0;
-  int const x_36 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  float const x_37 = float(x_36);
-  v = float4(x_37, x_37, x_37, x_37);
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i = x_40;
-  while (true) {
-    int const x_45 = i;
-    int const x_47 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    int const x_51 = i;
-    v[uint3(0u, 1u, 2u)[x_50]] = float(x_51);
-    {
-      int const x_55 = i;
-      i = as_type<int>((as_type<uint>(x_55) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_57 = v;
-  int const x_59 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_65 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_68 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  if (all((x_57 == float4(float(x_59), float(x_62), float(x_65), float(x_68))))) {
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_80 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_83 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_86 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_77), float(x_80), float(x_83), float(x_86));
-  } else {
-    int const x_90 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_91 = float(x_90);
-    *(tint_symbol_3) = float4(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2d2245e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,162 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 108
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-     %v3uint = OpTypeVector %uint 3
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-         %51 = OpConstantComposite %v3uint %uint_0 %uint_1 %uint_2
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-     %v4bool = OpTypeVector %bool 4
-   %main_out = OpTypeStruct %v4float
-         %97 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %i = OpVariable %_ptr_Function_int Function %23
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %28 = OpLoad %int %27
-         %29 = OpConvertSToF %float %28
-         %30 = OpCompositeConstruct %v4float %29 %29 %29 %29
-               OpStore %v %30
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %33 = OpLoad %int %32
-               OpStore %i %33
-               OpBranch %34
-         %34 = OpLabel
-               OpLoopMerge %35 %36 None
-               OpBranch %37
-         %37 = OpLabel
-         %38 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %40 = OpLoad %int %39
-         %41 = OpSLessThan %bool %38 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %35
-         %43 = OpLabel
-         %46 = OpLoad %int %i
-         %47 = OpLoad %int %i
-         %52 = OpVectorExtractDynamic %uint %51 %46
-         %54 = OpAccessChain %_ptr_Function_float %v %52
-         %55 = OpConvertSToF %float %47
-               OpStore %54 %55
-               OpBranch %36
-         %36 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpIAdd %int %56 %int_1
-               OpStore %i %58
-               OpBranch %34
-         %35 = OpLabel
-         %59 = OpLoad %v4float %v
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %68 = OpLoad %int %67
-         %70 = OpConvertSToF %float %61
-         %71 = OpConvertSToF %float %63
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-         %75 = OpFOrdEqual %v4bool %59 %74
-         %69 = OpAll %bool %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %69 %78 %79
-         %78 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpConvertSToF %float %81
-         %89 = OpConvertSToF %float %83
-         %90 = OpConvertSToF %float %85
-         %91 = OpConvertSToF %float %87
-         %92 = OpCompositeConstruct %v4float %88 %89 %90 %91
-               OpStore %x_GLF_color %92
-               OpBranch %77
-         %79 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %94 = OpLoad %int %93
-         %95 = OpConvertSToF %float %94
-         %96 = OpCompositeConstruct %v4float %95 %95 %95 %95
-               OpStore %x_GLF_color %96
-               OpBranch %77
-         %77 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %97
-        %100 = OpLabel
-        %101 = OpFunctionCall %void %main_1
-        %102 = OpLoad %v4float %x_GLF_color
-        %103 = OpCompositeConstruct %main_out %102
-               OpReturnValue %103
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %105 = OpLabel
-        %106 = OpFunctionCall %main_out %main_inner
-        %107 = OpCompositeExtract %v4float %106 0
-               OpStore %x_GLF_color_1_1 %107
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f495ad7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-combine-casts-legalize-vector-types-xyz-swizzle-for-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var i : i32;
-  let x_36 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_37 : f32 = f32(x_36);
-  v = vec4<f32>(x_37, x_37, x_37, x_37);
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i = x_40;
-  loop {
-    let x_45 : i32 = i;
-    let x_47 : i32 = x_6.x_GLF_uniform_int_values[3];
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    let x_51 : i32 = i;
-    v[vec3<u32>(0u, 1u, 2u)[x_50]] = f32(x_51);
-
-    continuing {
-      let x_55 : i32 = i;
-      i = (x_55 + 1);
-    }
-  }
-  let x_57 : vec4<f32> = v;
-  let x_59 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_65 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_68 : i32 = x_6.x_GLF_uniform_int_values[3];
-  if (all((x_57 == vec4<f32>(f32(x_59), f32(x_62), f32(x_65), f32(x_68))))) {
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_80 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_83 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_86 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_77), f32(x_80), f32(x_83), f32(x_86));
-  } else {
-    let x_90 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_91 : f32 = f32(x_90);
-    x_GLF_color = vec4<f32>(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e2cb540..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,97 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[4];
-};
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[2];
-};
-
-float func_f1_(inout float b) {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_90 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_92 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_94 = asfloat(x_7[1].x);
-  x_GLF_color = float4(x_90, x_92, x_94, 1.0f);
-  x_GLF_color = x_GLF_color;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_98 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_99 = b;
-  if ((x_98 >= x_99)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_104 = asfloat(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    return x_104;
-  }
-  const float x_106 = asfloat(x_7[2].x);
-  return x_106;
-}
-
-void main_1() {
-  float a = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  bool x_71 = false;
-  bool x_72_phi = false;
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  param = x_44;
-  const float x_45 = func_f1_(param);
-  a = x_45;
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_7[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  param_1 = (x_47 + x_49);
-  const float x_51 = func_f1_(param_1);
-  a = (a + x_51);
-  const float x_54 = a;
-  const float x_56 = asfloat(x_7[3].x);
-  const bool x_57 = (x_54 == x_56);
-  x_72_phi = x_57;
-  if (x_57) {
-    const float4 x_60 = x_GLF_color;
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const float x_62 = asfloat(x_7[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_7[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    const float x_66 = asfloat(x_7[1].x);
-    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_7[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-    x_71 = all((x_60 == float4(x_62, x_64, x_66, x_68)));
-    x_72_phi = x_71;
-  }
-  if (x_72_phi) {
-    const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-    const int x_15 = asint(x_12[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-    const int x_16 = asint(x_12[1].x);
-    const int x_17 = asint(x_12[1].x);
-    const uint scalar_offset_11 = ((16u * uint(0))) / 4;
-    const int x_18 = asint(x_12[scalar_offset_11 / 4][scalar_offset_11 % 4]);
-    x_GLF_color = float4(float(x_15), float(x_16), float(x_17), float(x_18));
-  } else {
-    const int x_19 = asint(x_12[1].x);
-    const float x_86 = float(x_19);
-    x_GLF_color = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.msl
deleted file mode 100644
index a3d7b68..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_f1_(constant buf1& x_7, thread float* const b, thread float4* const tint_symbol_3) {
-  float const x_90 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_92 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_94 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_3) = float4(x_90, x_92, x_94, 1.0f);
-  float4 const x_96 = *(tint_symbol_3);
-  *(tint_symbol_3) = x_96;
-  float const x_98 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_99 = *(b);
-  if ((x_98 >= x_99)) {
-    float const x_104 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    return x_104;
-  }
-  float const x_106 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  return x_106;
-}
-
-void main_1(constant buf1& x_7, constant buf0& x_12, thread float4* const tint_symbol_4) {
-  float a = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  bool x_71 = false;
-  bool x_72_phi = false;
-  float const x_44 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  param = x_44;
-  float const x_45 = func_f1_(x_7, &(param), tint_symbol_4);
-  a = x_45;
-  float const x_47 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_49 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  param_1 = (x_47 + x_49);
-  float const x_51 = func_f1_(x_7, &(param_1), tint_symbol_4);
-  float const x_52 = a;
-  a = (x_52 + x_51);
-  float const x_54 = a;
-  float const x_56 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  bool const x_57 = (x_54 == x_56);
-  x_72_phi = x_57;
-  if (x_57) {
-    float4 const x_60 = *(tint_symbol_4);
-    float const x_62 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_64 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_66 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    float const x_68 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    x_71 = all((x_60 == float4(x_62, x_64, x_66, x_68)));
-    x_72_phi = x_71;
-  }
-  bool const x_72 = x_72_phi;
-  if (x_72) {
-    int const x_15 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    int const x_16 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    int const x_17 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    int const x_18 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_15), float(x_16), float(x_17), float(x_18));
-  } else {
-    int const x_19 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    float const x_86 = float(x_19);
-    *(tint_symbol_4) = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_12, thread float4* const tint_symbol_5) {
-  main_1(x_7, x_12, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_12, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3a9d4d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,199 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %func_f1_ "func_f1_"
-               OpName %b "b"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %x_71 "x_71"
-               OpName %x_72_phi "x_72_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpTypeFunction %float %_ptr_Function_float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %51 = OpTypeFunction %void
-         %56 = OpConstantNull %float
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %61 = OpConstantNull %bool
-      %int_3 = OpConstant %int 3
-     %v4bool = OpTypeVector %bool 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-   %func_f1_ = OpFunction %float None %20
-          %b = OpFunctionParameter %_ptr_Function_float
-         %24 = OpLabel
-         %28 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %29 = OpLoad %float %28
-         %30 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %31 = OpLoad %float %30
-         %33 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %34 = OpLoad %float %33
-         %36 = OpCompositeConstruct %v4float %29 %31 %34 %float_1
-               OpStore %x_GLF_color %36
-         %37 = OpLoad %v4float %x_GLF_color
-               OpStore %x_GLF_color %37
-         %38 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %41 = OpLoad %float %b
-         %42 = OpFOrdGreaterThanEqual %bool %39 %41
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %44
-         %45 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %47 = OpLoad %float %46
-               OpReturnValue %47
-         %44 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %50 = OpLoad %float %49
-               OpReturnValue %50
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %51
-         %54 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %56
-      %param = OpVariable %_ptr_Function_float Function %56
-    %param_1 = OpVariable %_ptr_Function_float Function %56
-       %x_71 = OpVariable %_ptr_Function_bool Function %61
-   %x_72_phi = OpVariable %_ptr_Function_bool Function %61
-         %63 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %64 = OpLoad %float %63
-               OpStore %param %64
-         %65 = OpFunctionCall %float %func_f1_ %param
-               OpStore %a %65
-         %67 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %68 = OpLoad %float %67
-         %69 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %70 = OpLoad %float %69
-         %71 = OpFAdd %float %68 %70
-               OpStore %param_1 %71
-         %72 = OpFunctionCall %float %func_f1_ %param_1
-         %74 = OpLoad %float %a
-         %75 = OpFAdd %float %74 %72
-               OpStore %a %75
-         %76 = OpLoad %float %a
-         %78 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-         %79 = OpLoad %float %78
-         %80 = OpFOrdEqual %bool %76 %79
-               OpStore %x_72_phi %80
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %81
-         %82 = OpLabel
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %85 = OpLoad %float %84
-         %86 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %89 = OpLoad %float %88
-         %90 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %91 = OpLoad %float %90
-         %93 = OpCompositeConstruct %v4float %85 %87 %89 %91
-         %94 = OpFOrdEqual %v4bool %83 %93
-         %92 = OpAll %bool %94
-               OpStore %x_71 %92
-         %96 = OpLoad %bool %x_71
-               OpStore %x_72_phi %96
-               OpBranch %81
-         %81 = OpLabel
-         %97 = OpLoad %bool %x_72_phi
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %103
-        %111 = OpConvertSToF %float %105
-        %112 = OpConvertSToF %float %107
-        %113 = OpConvertSToF %float %109
-        %114 = OpCompositeConstruct %v4float %110 %111 %112 %113
-               OpStore %x_GLF_color %114
-               OpBranch %98
-        %100 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpCompositeConstruct %v4float %117 %117 %117 %117
-               OpStore %x_GLF_color %118
-               OpBranch %98
-         %98 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %51
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f0938fc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,91 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-fn func_f1_(b : ptr<function, f32>) -> f32 {
-  let x_90 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_92 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_94 : f32 = x_7.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_90, x_92, x_94, 1.0);
-  let x_96 : vec4<f32> = x_GLF_color;
-  x_GLF_color = x_96;
-  let x_98 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_99 : f32 = *(b);
-  if ((x_98 >= x_99)) {
-    let x_104 : f32 = x_7.x_GLF_uniform_float_values[0];
-    return x_104;
-  }
-  let x_106 : f32 = x_7.x_GLF_uniform_float_values[2];
-  return x_106;
-}
-
-fn main_1() {
-  var a : f32;
-  var param : f32;
-  var param_1 : f32;
-  var x_71 : bool;
-  var x_72_phi : bool;
-  let x_44 : f32 = x_7.x_GLF_uniform_float_values[0];
-  param = x_44;
-  let x_45 : f32 = func_f1_(&(param));
-  a = x_45;
-  let x_47 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_49 : f32 = x_7.x_GLF_uniform_float_values[0];
-  param_1 = (x_47 + x_49);
-  let x_51 : f32 = func_f1_(&(param_1));
-  let x_52 : f32 = a;
-  a = (x_52 + x_51);
-  let x_54 : f32 = a;
-  let x_56 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_57 : bool = (x_54 == x_56);
-  x_72_phi = x_57;
-  if (x_57) {
-    let x_60 : vec4<f32> = x_GLF_color;
-    let x_62 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_64 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_66 : f32 = x_7.x_GLF_uniform_float_values[1];
-    let x_68 : f32 = x_7.x_GLF_uniform_float_values[0];
-    x_71 = all((x_60 == vec4<f32>(x_62, x_64, x_66, x_68)));
-    x_72_phi = x_71;
-  }
-  let x_72 : bool = x_72_phi;
-  if (x_72) {
-    let x_15 : i32 = x_12.x_GLF_uniform_int_values[0];
-    let x_16 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_17 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_18 : i32 = x_12.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_15), f32(x_16), f32(x_17), f32(x_18));
-  } else {
-    let x_19 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_86 : f32 = f32(x_19);
-    x_GLF_color = vec4<f32>(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e2cb540..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,97 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[4];
-};
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[2];
-};
-
-float func_f1_(inout float b) {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_90 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_92 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_94 = asfloat(x_7[1].x);
-  x_GLF_color = float4(x_90, x_92, x_94, 1.0f);
-  x_GLF_color = x_GLF_color;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_98 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_99 = b;
-  if ((x_98 >= x_99)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_104 = asfloat(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    return x_104;
-  }
-  const float x_106 = asfloat(x_7[2].x);
-  return x_106;
-}
-
-void main_1() {
-  float a = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  bool x_71 = false;
-  bool x_72_phi = false;
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  param = x_44;
-  const float x_45 = func_f1_(param);
-  a = x_45;
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_7[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  param_1 = (x_47 + x_49);
-  const float x_51 = func_f1_(param_1);
-  a = (a + x_51);
-  const float x_54 = a;
-  const float x_56 = asfloat(x_7[3].x);
-  const bool x_57 = (x_54 == x_56);
-  x_72_phi = x_57;
-  if (x_57) {
-    const float4 x_60 = x_GLF_color;
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const float x_62 = asfloat(x_7[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_7[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    const float x_66 = asfloat(x_7[1].x);
-    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_7[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-    x_71 = all((x_60 == float4(x_62, x_64, x_66, x_68)));
-    x_72_phi = x_71;
-  }
-  if (x_72_phi) {
-    const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-    const int x_15 = asint(x_12[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-    const int x_16 = asint(x_12[1].x);
-    const int x_17 = asint(x_12[1].x);
-    const uint scalar_offset_11 = ((16u * uint(0))) / 4;
-    const int x_18 = asint(x_12[scalar_offset_11 / 4][scalar_offset_11 % 4]);
-    x_GLF_color = float4(float(x_15), float(x_16), float(x_17), float(x_18));
-  } else {
-    const int x_19 = asint(x_12[1].x);
-    const float x_86 = float(x_19);
-    x_GLF_color = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.msl
deleted file mode 100644
index a3d7b68..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_f1_(constant buf1& x_7, thread float* const b, thread float4* const tint_symbol_3) {
-  float const x_90 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_92 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_94 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_3) = float4(x_90, x_92, x_94, 1.0f);
-  float4 const x_96 = *(tint_symbol_3);
-  *(tint_symbol_3) = x_96;
-  float const x_98 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_99 = *(b);
-  if ((x_98 >= x_99)) {
-    float const x_104 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    return x_104;
-  }
-  float const x_106 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  return x_106;
-}
-
-void main_1(constant buf1& x_7, constant buf0& x_12, thread float4* const tint_symbol_4) {
-  float a = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  bool x_71 = false;
-  bool x_72_phi = false;
-  float const x_44 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  param = x_44;
-  float const x_45 = func_f1_(x_7, &(param), tint_symbol_4);
-  a = x_45;
-  float const x_47 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_49 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  param_1 = (x_47 + x_49);
-  float const x_51 = func_f1_(x_7, &(param_1), tint_symbol_4);
-  float const x_52 = a;
-  a = (x_52 + x_51);
-  float const x_54 = a;
-  float const x_56 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  bool const x_57 = (x_54 == x_56);
-  x_72_phi = x_57;
-  if (x_57) {
-    float4 const x_60 = *(tint_symbol_4);
-    float const x_62 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_64 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_66 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    float const x_68 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    x_71 = all((x_60 == float4(x_62, x_64, x_66, x_68)));
-    x_72_phi = x_71;
-  }
-  bool const x_72 = x_72_phi;
-  if (x_72) {
-    int const x_15 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    int const x_16 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    int const x_17 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    int const x_18 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_15), float(x_16), float(x_17), float(x_18));
-  } else {
-    int const x_19 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    float const x_86 = float(x_19);
-    *(tint_symbol_4) = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_12, thread float4* const tint_symbol_5) {
-  main_1(x_7, x_12, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_12, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3a9d4d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,199 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %func_f1_ "func_f1_"
-               OpName %b "b"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %x_71 "x_71"
-               OpName %x_72_phi "x_72_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpTypeFunction %float %_ptr_Function_float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %51 = OpTypeFunction %void
-         %56 = OpConstantNull %float
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %61 = OpConstantNull %bool
-      %int_3 = OpConstant %int 3
-     %v4bool = OpTypeVector %bool 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-   %func_f1_ = OpFunction %float None %20
-          %b = OpFunctionParameter %_ptr_Function_float
-         %24 = OpLabel
-         %28 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %29 = OpLoad %float %28
-         %30 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %31 = OpLoad %float %30
-         %33 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %34 = OpLoad %float %33
-         %36 = OpCompositeConstruct %v4float %29 %31 %34 %float_1
-               OpStore %x_GLF_color %36
-         %37 = OpLoad %v4float %x_GLF_color
-               OpStore %x_GLF_color %37
-         %38 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %41 = OpLoad %float %b
-         %42 = OpFOrdGreaterThanEqual %bool %39 %41
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %44
-         %45 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %47 = OpLoad %float %46
-               OpReturnValue %47
-         %44 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %50 = OpLoad %float %49
-               OpReturnValue %50
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %51
-         %54 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %56
-      %param = OpVariable %_ptr_Function_float Function %56
-    %param_1 = OpVariable %_ptr_Function_float Function %56
-       %x_71 = OpVariable %_ptr_Function_bool Function %61
-   %x_72_phi = OpVariable %_ptr_Function_bool Function %61
-         %63 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %64 = OpLoad %float %63
-               OpStore %param %64
-         %65 = OpFunctionCall %float %func_f1_ %param
-               OpStore %a %65
-         %67 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %68 = OpLoad %float %67
-         %69 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %70 = OpLoad %float %69
-         %71 = OpFAdd %float %68 %70
-               OpStore %param_1 %71
-         %72 = OpFunctionCall %float %func_f1_ %param_1
-         %74 = OpLoad %float %a
-         %75 = OpFAdd %float %74 %72
-               OpStore %a %75
-         %76 = OpLoad %float %a
-         %78 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-         %79 = OpLoad %float %78
-         %80 = OpFOrdEqual %bool %76 %79
-               OpStore %x_72_phi %80
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %81
-         %82 = OpLabel
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %85 = OpLoad %float %84
-         %86 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %89 = OpLoad %float %88
-         %90 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %91 = OpLoad %float %90
-         %93 = OpCompositeConstruct %v4float %85 %87 %89 %91
-         %94 = OpFOrdEqual %v4bool %83 %93
-         %92 = OpAll %bool %94
-               OpStore %x_71 %92
-         %96 = OpLoad %bool %x_71
-               OpStore %x_72_phi %96
-               OpBranch %81
-         %81 = OpLabel
-         %97 = OpLoad %bool %x_72_phi
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %103
-        %111 = OpConvertSToF %float %105
-        %112 = OpConvertSToF %float %107
-        %113 = OpConvertSToF %float %109
-        %114 = OpCompositeConstruct %v4float %110 %111 %112 %113
-               OpStore %x_GLF_color %114
-               OpBranch %98
-        %100 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpCompositeConstruct %v4float %117 %117 %117 %117
-               OpStore %x_GLF_color %118
-               OpBranch %98
-         %98 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %51
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f0938fc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-glf_color/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,91 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-fn func_f1_(b : ptr<function, f32>) -> f32 {
-  let x_90 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_92 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_94 : f32 = x_7.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_90, x_92, x_94, 1.0);
-  let x_96 : vec4<f32> = x_GLF_color;
-  x_GLF_color = x_96;
-  let x_98 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_99 : f32 = *(b);
-  if ((x_98 >= x_99)) {
-    let x_104 : f32 = x_7.x_GLF_uniform_float_values[0];
-    return x_104;
-  }
-  let x_106 : f32 = x_7.x_GLF_uniform_float_values[2];
-  return x_106;
-}
-
-fn main_1() {
-  var a : f32;
-  var param : f32;
-  var param_1 : f32;
-  var x_71 : bool;
-  var x_72_phi : bool;
-  let x_44 : f32 = x_7.x_GLF_uniform_float_values[0];
-  param = x_44;
-  let x_45 : f32 = func_f1_(&(param));
-  a = x_45;
-  let x_47 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_49 : f32 = x_7.x_GLF_uniform_float_values[0];
-  param_1 = (x_47 + x_49);
-  let x_51 : f32 = func_f1_(&(param_1));
-  let x_52 : f32 = a;
-  a = (x_52 + x_51);
-  let x_54 : f32 = a;
-  let x_56 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_57 : bool = (x_54 == x_56);
-  x_72_phi = x_57;
-  if (x_57) {
-    let x_60 : vec4<f32> = x_GLF_color;
-    let x_62 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_64 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_66 : f32 = x_7.x_GLF_uniform_float_values[1];
-    let x_68 : f32 = x_7.x_GLF_uniform_float_values[0];
-    x_71 = all((x_60 == vec4<f32>(x_62, x_64, x_66, x_68)));
-    x_72_phi = x_71;
-  }
-  let x_72 : bool = x_72_phi;
-  if (x_72) {
-    let x_15 : i32 = x_12.x_GLF_uniform_int_values[0];
-    let x_16 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_17 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_18 : i32 = x_12.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_15), f32(x_16), f32(x_17), f32(x_18));
-  } else {
-    let x_19 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_86 : f32 = f32(x_19);
-    x_GLF_color = vec4<f32>(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 9170371..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  const float x_30 = asfloat(x_6[1].x);
-  a = x_30;
-  const float x_32 = asfloat(x_6[3].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_32 > x_34)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_39 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    a = (a + x_39);
-    const float x_42 = a;
-    x_GLF_color = float4(x_42, x_42, x_42, x_42);
-    const float x_45 = asfloat(x_6[3].x);
-    const float x_47 = asfloat(x_6[1].x);
-    if ((x_45 > x_47)) {
-      const float x_52 = x_GLF_color.x;
-      a = (a + x_52);
-      const float x_56 = asfloat(x_6[2].x);
-      x_GLF_color = float4(x_56, x_56, x_56, x_56);
-    }
-  }
-  x_GLF_color = float4(a, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4a580c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float const x_30 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = x_30;
-  float const x_32 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_32 > x_34)) {
-    float const x_39 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_40 = a;
-    a = (x_40 + x_39);
-    float const x_42 = a;
-    *(tint_symbol_3) = float4(x_42, x_42, x_42, x_42);
-    float const x_45 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_47 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    if ((x_45 > x_47)) {
-      float const x_52 = (*(tint_symbol_3)).x;
-      float const x_53 = a;
-      a = (x_53 + x_52);
-      float const x_56 = x_6.x_GLF_uniform_float_values.arr[2].el;
-      *(tint_symbol_3) = float4(x_56, x_56, x_56, x_56);
-    }
-  }
-  float const x_58 = a;
-  *(tint_symbol_3) = float4(x_58, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 37dd032..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,120 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 74
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_2 = OpConstant %int 2
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %63 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-         %25 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %26 = OpLoad %float %25
-               OpStore %a %26
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %29 = OpLoad %float %28
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %32 = OpLoad %float %31
-         %33 = OpFOrdGreaterThan %bool %29 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpLoad %float %a
-         %40 = OpFAdd %float %39 %38
-               OpStore %a %40
-         %41 = OpLoad %float %a
-         %42 = OpCompositeConstruct %v4float %41 %41 %41 %41
-               OpStore %x_GLF_color %42
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %44 = OpLoad %float %43
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %46 = OpLoad %float %45
-         %47 = OpFOrdGreaterThan %bool %44 %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-         %51 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %52 = OpLoad %float %51
-         %53 = OpLoad %float %a
-         %54 = OpFAdd %float %53 %52
-               OpStore %a %54
-         %56 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %57 = OpLoad %float %56
-         %58 = OpCompositeConstruct %v4float %57 %57 %57 %57
-               OpStore %x_GLF_color %58
-               OpBranch %48
-         %48 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-         %59 = OpLoad %float %a
-         %62 = OpCompositeConstruct %v4float %59 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %62
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %71 = OpLabel
-         %72 = OpFunctionCall %main_out %main_inner
-         %73 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %73
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3598a77..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  let x_30 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = x_30;
-  let x_32 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_32 > x_34)) {
-    let x_39 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_40 : f32 = a;
-    a = (x_40 + x_39);
-    let x_42 : f32 = a;
-    x_GLF_color = vec4<f32>(x_42, x_42, x_42, x_42);
-    let x_45 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_47 : f32 = x_6.x_GLF_uniform_float_values[1];
-    if ((x_45 > x_47)) {
-      let x_52 : f32 = x_GLF_color.x;
-      let x_53 : f32 = a;
-      a = (x_53 + x_52);
-      let x_56 : f32 = x_6.x_GLF_uniform_float_values[2];
-      x_GLF_color = vec4<f32>(x_56, x_56, x_56, x_56);
-    }
-  }
-  let x_58 : f32 = a;
-  x_GLF_color = vec4<f32>(x_58, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 9170371..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  const float x_30 = asfloat(x_6[1].x);
-  a = x_30;
-  const float x_32 = asfloat(x_6[3].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_32 > x_34)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_39 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    a = (a + x_39);
-    const float x_42 = a;
-    x_GLF_color = float4(x_42, x_42, x_42, x_42);
-    const float x_45 = asfloat(x_6[3].x);
-    const float x_47 = asfloat(x_6[1].x);
-    if ((x_45 > x_47)) {
-      const float x_52 = x_GLF_color.x;
-      a = (a + x_52);
-      const float x_56 = asfloat(x_6[2].x);
-      x_GLF_color = float4(x_56, x_56, x_56, x_56);
-    }
-  }
-  x_GLF_color = float4(a, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4a580c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float const x_30 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = x_30;
-  float const x_32 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_32 > x_34)) {
-    float const x_39 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_40 = a;
-    a = (x_40 + x_39);
-    float const x_42 = a;
-    *(tint_symbol_3) = float4(x_42, x_42, x_42, x_42);
-    float const x_45 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_47 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    if ((x_45 > x_47)) {
-      float const x_52 = (*(tint_symbol_3)).x;
-      float const x_53 = a;
-      a = (x_53 + x_52);
-      float const x_56 = x_6.x_GLF_uniform_float_values.arr[2].el;
-      *(tint_symbol_3) = float4(x_56, x_56, x_56, x_56);
-    }
-  }
-  float const x_58 = a;
-  *(tint_symbol_3) = float4(x_58, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 37dd032..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,120 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 74
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_2 = OpConstant %int 2
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %63 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-         %25 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %26 = OpLoad %float %25
-               OpStore %a %26
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %29 = OpLoad %float %28
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %32 = OpLoad %float %31
-         %33 = OpFOrdGreaterThan %bool %29 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpLoad %float %a
-         %40 = OpFAdd %float %39 %38
-               OpStore %a %40
-         %41 = OpLoad %float %a
-         %42 = OpCompositeConstruct %v4float %41 %41 %41 %41
-               OpStore %x_GLF_color %42
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %44 = OpLoad %float %43
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %46 = OpLoad %float %45
-         %47 = OpFOrdGreaterThan %bool %44 %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-         %51 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %52 = OpLoad %float %51
-         %53 = OpLoad %float %a
-         %54 = OpFAdd %float %53 %52
-               OpStore %a %54
-         %56 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %57 = OpLoad %float %56
-         %58 = OpCompositeConstruct %v4float %57 %57 %57 %57
-               OpStore %x_GLF_color %58
-               OpBranch %48
-         %48 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-         %59 = OpLoad %float %a
-         %62 = OpCompositeConstruct %v4float %59 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %62
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %71 = OpLabel
-         %72 = OpFunctionCall %main_out %main_inner
-         %73 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %73
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3598a77..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-increment-color/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  let x_30 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = x_30;
-  let x_32 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_32 > x_34)) {
-    let x_39 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_40 : f32 = a;
-    a = (x_40 + x_39);
-    let x_42 : f32 = a;
-    x_GLF_color = vec4<f32>(x_42, x_42, x_42, x_42);
-    let x_45 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_47 : f32 = x_6.x_GLF_uniform_float_values[1];
-    if ((x_45 > x_47)) {
-      let x_52 : f32 = x_GLF_color.x;
-      let x_53 : f32 = a;
-      a = (x_53 + x_52);
-      let x_56 : f32 = x_6.x_GLF_uniform_float_values[2];
-      x_GLF_color = vec4<f32>(x_56, x_56, x_56, x_56);
-    }
-  }
-  let x_58 : f32 = a;
-  x_GLF_color = vec4<f32>(x_58, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 236ecb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[1].x);
-  a = x_27;
-  const int x_29 = asint(x_6[3].x);
-  i = -(x_29);
-  while (true) {
-    const int x_36 = (i + 1);
-    i = x_36;
-    const int x_39 = asint(x_6[2].x);
-    if ((reversebits(x_36) <= x_39)) {
-    } else {
-      break;
-    }
-    a = (a + 1);
-  }
-  const int x_44 = a;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_46 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_44 == x_46)) {
-    const int x_52 = asint(x_6[2].x);
-    const int x_55 = asint(x_6[1].x);
-    const int x_58 = asint(x_6[1].x);
-    const int x_61 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_52), float(x_55), float(x_58), float(x_61));
-  } else {
-    const int x_65 = asint(x_6[1].x);
-    const float x_66 = float(x_65);
-    x_GLF_color = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.msl
deleted file mode 100644
index 18385d0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_27;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  i = tint_unary_minus(x_29);
-  while (true) {
-    int const x_35 = i;
-    int const x_36 = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-    i = x_36;
-    int const x_39 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((reverse_bits(x_36) <= x_39)) {
-    } else {
-      break;
-    }
-    int const x_42 = a;
-    a = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-  }
-  int const x_44 = a;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_44 == x_46)) {
-    int const x_52 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_55 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_52), float(x_55), float(x_58), float(x_61));
-  } else {
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_66 = float(x_65);
-    *(tint_symbol_3) = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6c38087..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,139 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %30 = OpLoad %int %29
-         %31 = OpSNegate %int %30
-               OpStore %i %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %37 = OpIAdd %int %36 %int_1
-               OpStore %i %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %40 = OpLoad %int %39
-         %41 = OpBitReverse %int %37
-         %42 = OpSLessThanEqual %bool %41 %40
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %33
-         %44 = OpLabel
-         %47 = OpLoad %int %a
-         %48 = OpIAdd %int %47 %int_1
-               OpStore %a %48
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %32
-         %33 = OpLabel
-         %49 = OpLoad %int %a
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpIEqual %bool %49 %52
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %58
-         %66 = OpConvertSToF %float %60
-         %67 = OpConvertSToF %float %62
-         %68 = OpConvertSToF %float %64
-         %69 = OpCompositeConstruct %v4float %65 %66 %67 %68
-               OpStore %x_GLF_color %69
-               OpBranch %54
-         %56 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpConvertSToF %float %71
-         %73 = OpCompositeConstruct %v4float %72 %72 %72 %72
-               OpStore %x_GLF_color %73
-               OpBranch %54
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-         %77 = OpLabel
-         %78 = OpFunctionCall %void %main_1
-         %79 = OpLoad %v4float %x_GLF_color
-         %80 = OpCompositeConstruct %main_out %79
-               OpReturnValue %80
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %82 = OpLabel
-         %83 = OpFunctionCall %main_out %main_inner
-         %84 = OpCompositeExtract %v4float %83 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e594013..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_27;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[3];
-  i = -(x_29);
-  loop {
-    let x_35 : i32 = i;
-    let x_36 : i32 = (x_35 + 1);
-    i = x_36;
-    let x_39 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((reverseBits(x_36) <= x_39)) {
-    } else {
-      break;
-    }
-    let x_42 : i32 = a;
-    a = (x_42 + 1);
-  }
-  let x_44 : i32 = a;
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_44 == x_46)) {
-    let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_55 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_52), f32(x_55), f32(x_58), f32(x_61));
-  } else {
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_66 : f32 = f32(x_65);
-    x_GLF_color = vec4<f32>(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 236ecb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[1].x);
-  a = x_27;
-  const int x_29 = asint(x_6[3].x);
-  i = -(x_29);
-  while (true) {
-    const int x_36 = (i + 1);
-    i = x_36;
-    const int x_39 = asint(x_6[2].x);
-    if ((reversebits(x_36) <= x_39)) {
-    } else {
-      break;
-    }
-    a = (a + 1);
-  }
-  const int x_44 = a;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_46 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_44 == x_46)) {
-    const int x_52 = asint(x_6[2].x);
-    const int x_55 = asint(x_6[1].x);
-    const int x_58 = asint(x_6[1].x);
-    const int x_61 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_52), float(x_55), float(x_58), float(x_61));
-  } else {
-    const int x_65 = asint(x_6[1].x);
-    const float x_66 = float(x_65);
-    x_GLF_color = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.msl
deleted file mode 100644
index 18385d0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_27;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  i = tint_unary_minus(x_29);
-  while (true) {
-    int const x_35 = i;
-    int const x_36 = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-    i = x_36;
-    int const x_39 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((reverse_bits(x_36) <= x_39)) {
-    } else {
-      break;
-    }
-    int const x_42 = a;
-    a = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-  }
-  int const x_44 = a;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_44 == x_46)) {
-    int const x_52 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_55 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_52), float(x_55), float(x_58), float(x_61));
-  } else {
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_66 = float(x_65);
-    *(tint_symbol_3) = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6c38087..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,139 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %30 = OpLoad %int %29
-         %31 = OpSNegate %int %30
-               OpStore %i %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %37 = OpIAdd %int %36 %int_1
-               OpStore %i %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %40 = OpLoad %int %39
-         %41 = OpBitReverse %int %37
-         %42 = OpSLessThanEqual %bool %41 %40
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %33
-         %44 = OpLabel
-         %47 = OpLoad %int %a
-         %48 = OpIAdd %int %47 %int_1
-               OpStore %a %48
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %32
-         %33 = OpLabel
-         %49 = OpLoad %int %a
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpIEqual %bool %49 %52
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %58
-         %66 = OpConvertSToF %float %60
-         %67 = OpConvertSToF %float %62
-         %68 = OpConvertSToF %float %64
-         %69 = OpCompositeConstruct %v4float %65 %66 %67 %68
-               OpStore %x_GLF_color %69
-               OpBranch %54
-         %56 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpConvertSToF %float %71
-         %73 = OpCompositeConstruct %v4float %72 %72 %72 %72
-               OpStore %x_GLF_color %73
-               OpBranch %54
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-         %77 = OpLabel
-         %78 = OpFunctionCall %void %main_1
-         %79 = OpLoad %v4float %x_GLF_color
-         %80 = OpCompositeConstruct %main_out %79
-               OpReturnValue %80
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %82 = OpLabel
-         %83 = OpFunctionCall %main_out %main_inner
-         %84 = OpCompositeExtract %v4float %83 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e594013..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-loop-bitfieldreverse/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_27;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[3];
-  i = -(x_29);
-  loop {
-    let x_35 : i32 = i;
-    let x_36 : i32 = (x_35 + 1);
-    i = x_36;
-    let x_39 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((reverseBits(x_36) <= x_39)) {
-    } else {
-      break;
-    }
-    let x_42 : i32 = a;
-    a = (x_42 + 1);
-  }
-  let x_44 : i32 = a;
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_44 == x_46)) {
-    let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_55 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_52), f32(x_55), f32(x_58), f32(x_61));
-  } else {
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_66 : f32 = f32(x_65);
-    x_GLF_color = vec4<f32>(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f9cc633..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  a = 0;
-  b = 0;
-  i = 0;
-  while (true) {
-    const int x_36 = i;
-    const int x_38 = asint(x_8[0].x);
-    if ((x_36 < x_38)) {
-    } else {
-      break;
-    }
-    if ((a > 5)) {
-      break;
-    }
-    const int x_46 = asint(x_10[0].x);
-    a = (a + (x_46 / -4));
-    b = (b + 1);
-    {
-      i = (i + 1);
-    }
-  }
-  if ((b == 3)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.msl
deleted file mode 100644
index d3956b2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ int ten;
-};
-struct buf0 {
-  /* 0x0000 */ int minusEight;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  a = 0;
-  b = 0;
-  i = 0;
-  while (true) {
-    int const x_36 = i;
-    int const x_38 = x_8.ten;
-    if ((x_36 < x_38)) {
-    } else {
-      break;
-    }
-    int const x_41 = a;
-    if ((x_41 > 5)) {
-      break;
-    }
-    int const x_46 = x_10.minusEight;
-    int const x_48 = a;
-    a = as_type<int>((as_type<uint>(x_48) + as_type<uint>((x_46 / -4))));
-    int const x_50 = b;
-    b = as_type<int>((as_type<uint>(x_50) + as_type<uint>(1)));
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  int const x_54 = b;
-  if ((x_54 == 3)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_8 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5c987a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,144 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 77
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "ten"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "minusEight"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf1 = OpTypeStruct %int
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_5 = OpConstant %int 5
-     %int_n4 = OpConstant %int -4
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %64 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %65 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %66 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_0
-               OpStore %b %int_0
-               OpStore %i %int_0
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %29 = OpLoad %int %i
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %34 = OpLoad %int %33
-         %35 = OpSLessThan %bool %29 %34
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %26
-         %37 = OpLabel
-         %40 = OpLoad %int %a
-         %42 = OpSGreaterThan %bool %40 %int_5
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpBranch %26
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %46 = OpLoad %int %45
-         %47 = OpLoad %int %a
-         %49 = OpSDiv %int %46 %int_n4
-         %50 = OpIAdd %int %47 %49
-               OpStore %a %50
-         %51 = OpLoad %int %b
-         %53 = OpIAdd %int %51 %int_1
-               OpStore %b %53
-               OpBranch %27
-         %27 = OpLabel
-         %54 = OpLoad %int %i
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %i %55
-               OpBranch %25
-         %26 = OpLabel
-         %56 = OpLoad %int %b
-         %58 = OpIEqual %bool %56 %int_3
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpStore %x_GLF_color %64
-               OpBranch %59
-         %61 = OpLabel
-               OpStore %x_GLF_color %65
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %66
-         %69 = OpLabel
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %74 = OpLabel
-         %75 = OpFunctionCall %main_out %main_inner
-         %76 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %76
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 7a99cd9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-[[block]]
-struct buf1 {
-  ten : i32;
-};
-
-[[block]]
-struct buf0 {
-  minusEight : i32;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  a = 0;
-  b = 0;
-  i = 0;
-  loop {
-    let x_36 : i32 = i;
-    let x_38 : i32 = x_8.ten;
-    if ((x_36 < x_38)) {
-    } else {
-      break;
-    }
-    let x_41 : i32 = a;
-    if ((x_41 > 5)) {
-      break;
-    }
-    let x_46 : i32 = x_10.minusEight;
-    let x_48 : i32 = a;
-    a = (x_48 + (x_46 / -4));
-    let x_50 : i32 = b;
-    b = (x_50 + 1);
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_54 : i32 = b;
-  if ((x_54 == 3)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f9cc633..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  a = 0;
-  b = 0;
-  i = 0;
-  while (true) {
-    const int x_36 = i;
-    const int x_38 = asint(x_8[0].x);
-    if ((x_36 < x_38)) {
-    } else {
-      break;
-    }
-    if ((a > 5)) {
-      break;
-    }
-    const int x_46 = asint(x_10[0].x);
-    a = (a + (x_46 / -4));
-    b = (b + 1);
-    {
-      i = (i + 1);
-    }
-  }
-  if ((b == 3)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.msl
deleted file mode 100644
index d3956b2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ int ten;
-};
-struct buf0 {
-  /* 0x0000 */ int minusEight;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  a = 0;
-  b = 0;
-  i = 0;
-  while (true) {
-    int const x_36 = i;
-    int const x_38 = x_8.ten;
-    if ((x_36 < x_38)) {
-    } else {
-      break;
-    }
-    int const x_41 = a;
-    if ((x_41 > 5)) {
-      break;
-    }
-    int const x_46 = x_10.minusEight;
-    int const x_48 = a;
-    a = as_type<int>((as_type<uint>(x_48) + as_type<uint>((x_46 / -4))));
-    int const x_50 = b;
-    b = as_type<int>((as_type<uint>(x_50) + as_type<uint>(1)));
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  int const x_54 = b;
-  if ((x_54 == 3)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_8 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5c987a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,144 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 77
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "ten"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "minusEight"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf1 = OpTypeStruct %int
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_5 = OpConstant %int 5
-     %int_n4 = OpConstant %int -4
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %64 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %65 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %66 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_0
-               OpStore %b %int_0
-               OpStore %i %int_0
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %29 = OpLoad %int %i
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %34 = OpLoad %int %33
-         %35 = OpSLessThan %bool %29 %34
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %26
-         %37 = OpLabel
-         %40 = OpLoad %int %a
-         %42 = OpSGreaterThan %bool %40 %int_5
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpBranch %26
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %46 = OpLoad %int %45
-         %47 = OpLoad %int %a
-         %49 = OpSDiv %int %46 %int_n4
-         %50 = OpIAdd %int %47 %49
-               OpStore %a %50
-         %51 = OpLoad %int %b
-         %53 = OpIAdd %int %51 %int_1
-               OpStore %b %53
-               OpBranch %27
-         %27 = OpLabel
-         %54 = OpLoad %int %i
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %i %55
-               OpBranch %25
-         %26 = OpLabel
-         %56 = OpLoad %int %b
-         %58 = OpIEqual %bool %56 %int_3
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpStore %x_GLF_color %64
-               OpBranch %59
-         %61 = OpLabel
-               OpStore %x_GLF_color %65
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %66
-         %69 = OpLabel
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %74 = OpLabel
-         %75 = OpFunctionCall %main_out %main_inner
-         %76 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %76
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7a99cd9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-neg-div-pow2/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-[[block]]
-struct buf1 {
-  ten : i32;
-};
-
-[[block]]
-struct buf0 {
-  minusEight : i32;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  a = 0;
-  b = 0;
-  i = 0;
-  loop {
-    let x_36 : i32 = i;
-    let x_38 : i32 = x_8.ten;
-    if ((x_36 < x_38)) {
-    } else {
-      break;
-    }
-    let x_41 : i32 = a;
-    if ((x_41 > 5)) {
-      break;
-    }
-    let x_46 : i32 = x_10.minusEight;
-    let x_48 : i32 = a;
-    a = (x_48 + (x_46 / -4));
-    let x_50 : i32 = b;
-    b = (x_50 + 1);
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_54 : i32 = b;
-  if ((x_54 == 3)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 73e9ec8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int i = 0;
-  float3 v = float3(0.0f, 0.0f, 0.0f);
-  const float x_42 = asfloat(x_6[0].x);
-  f = x_42;
-  a = 1;
-  b = 0;
-  c = 1;
-  i = 0;
-  {
-    for(; (i < 3); i = (i + 1)) {
-      set_float3(v, i, (f + float(i)));
-    }
-  }
-  const float x_59 = asfloat(x_6[0].x);
-  if ((x_59 == 1.0f)) {
-    while (true) {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      {
-        if (((c & (a | b)) == 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    const float x_74 = asfloat(x_6[0].x);
-    if ((x_74 == 1.0f)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    }
-  }
-  const float x_79 = v.x;
-  const float x_83 = v.y;
-  const float x_87 = v.z;
-  const float3 x_90 = float3(((x_79 == 1.0f) ? 1.0f : 0.0f), ((x_83 == 2.0f) ? 0.0f : 1.0f), ((x_87 == 3.0f) ? 0.0f : 1.0f));
-  x_GLF_color = float4(x_90.x, x_90.y, x_90.z, x_GLF_color.w);
-  x_GLF_color.w = 1.0f;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1280adf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int i = 0;
-  float3 v = 0.0f;
-  float const x_42 = x_6.one;
-  f = x_42;
-  a = 1;
-  b = 0;
-  c = 1;
-  i = 0;
-  while (true) {
-    int const x_47 = i;
-    if ((x_47 < 3)) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    float const x_51 = f;
-    int const x_52 = i;
-    v[x_50] = (x_51 + float(x_52));
-    {
-      int const x_56 = i;
-      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-    }
-  }
-  float const x_59 = x_6.one;
-  if ((x_59 == 1.0f)) {
-    while (true) {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      {
-        int const x_67 = c;
-        int const x_68 = a;
-        int const x_69 = b;
-        if (((x_67 & (x_68 | x_69)) == 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    float const x_74 = x_6.one;
-    if ((x_74 == 1.0f)) {
-      *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    }
-  }
-  float const x_79 = v.x;
-  float const x_83 = v.y;
-  float const x_87 = v.z;
-  float3 const x_90 = float3(select(0.0f, 1.0f, (x_79 == 1.0f)), select(1.0f, 0.0f, (x_83 == 2.0f)), select(1.0f, 0.0f, (x_87 == 3.0f)));
-  float4 const x_91 = *(tint_symbol_3);
-  *(tint_symbol_3) = float4(x_90.x, x_90.y, x_90.z, x_91.w);
-  (*(tint_symbol_3)).w = 1.0f;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5827c5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,185 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 116
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %i "i"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %28 = OpConstantNull %v3float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %66 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %78 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-     %uint_3 = OpConstant %uint 3
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-        %105 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %c = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-          %v = OpVariable %_ptr_Function_v3float Function %28
-         %32 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %33 = OpLoad %float %32
-               OpStore %f %33
-               OpStore %a %int_1
-               OpStore %b %int_0
-               OpStore %c %int_1
-               OpStore %i %int_0
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpSLessThan %bool %40 %int_3
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %37
-         %44 = OpLabel
-         %47 = OpLoad %int %i
-         %48 = OpLoad %float %f
-         %49 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Function_float %v %47
-         %51 = OpConvertSToF %float %49
-         %52 = OpFAdd %float %48 %51
-               OpStore %50 %52
-               OpBranch %38
-         %38 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpIAdd %int %53 %int_1
-               OpStore %i %54
-               OpBranch %36
-         %37 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpFOrdEqual %bool %56 %float_1
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %x_GLF_color %66
-               OpBranch %63
-         %63 = OpLabel
-         %67 = OpLoad %int %c
-         %68 = OpLoad %int %a
-         %69 = OpLoad %int %b
-         %70 = OpBitwiseOr %int %68 %69
-         %71 = OpBitwiseAnd %int %67 %70
-         %72 = OpIEqual %bool %71 %int_0
-               OpBranchConditional %72 %61 %62
-         %62 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %74 = OpLoad %float %73
-         %75 = OpFOrdEqual %bool %74 %float_1
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-               OpStore %x_GLF_color %78
-               OpBranch %76
-         %76 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %80 = OpLoad %float %79
-         %82 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %83 = OpLoad %float %82
-         %85 = OpAccessChain %_ptr_Function_float %v %uint_2
-         %86 = OpLoad %float %85
-         %88 = OpFOrdEqual %bool %80 %float_1
-         %87 = OpSelect %float %88 %float_1 %float_0
-         %91 = OpFOrdEqual %bool %83 %float_2
-         %89 = OpSelect %float %91 %float_0 %float_1
-         %94 = OpFOrdEqual %bool %86 %float_3
-         %92 = OpSelect %float %94 %float_0 %float_1
-         %95 = OpCompositeConstruct %v3float %87 %89 %92
-         %96 = OpLoad %v4float %x_GLF_color
-         %97 = OpCompositeExtract %float %95 0
-         %98 = OpCompositeExtract %float %95 1
-         %99 = OpCompositeExtract %float %95 2
-        %100 = OpCompositeExtract %float %96 3
-        %101 = OpCompositeConstruct %v4float %97 %98 %99 %100
-               OpStore %x_GLF_color %101
-        %104 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_3
-               OpStore %104 %float_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %105
-        %108 = OpLabel
-        %109 = OpFunctionCall %void %main_1
-        %110 = OpLoad %v4float %x_GLF_color
-        %111 = OpCompositeConstruct %main_out %110
-               OpReturnValue %111
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-        %113 = OpLabel
-        %114 = OpFunctionCall %main_out %main_inner
-        %115 = OpCompositeExtract %v4float %114 0
-               OpStore %x_GLF_color_1_1 %115
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b06321e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var i : i32;
-  var v : vec3<f32>;
-  let x_42 : f32 = x_6.one;
-  f = x_42;
-  a = 1;
-  b = 0;
-  c = 1;
-  i = 0;
-  loop {
-    let x_47 : i32 = i;
-    if ((x_47 < 3)) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    let x_51 : f32 = f;
-    let x_52 : i32 = i;
-    v[x_50] = (x_51 + f32(x_52));
-
-    continuing {
-      let x_56 : i32 = i;
-      i = (x_56 + 1);
-    }
-  }
-  let x_59 : f32 = x_6.one;
-  if ((x_59 == 1.0)) {
-    loop {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-
-      continuing {
-        let x_67 : i32 = c;
-        let x_68 : i32 = a;
-        let x_69 : i32 = b;
-        if (((x_67 & (x_68 | x_69)) == 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    let x_74 : f32 = x_6.one;
-    if ((x_74 == 1.0)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    }
-  }
-  let x_79 : f32 = v.x;
-  let x_83 : f32 = v.y;
-  let x_87 : f32 = v.z;
-  let x_90 : vec3<f32> = vec3<f32>(select(0.0, 1.0, (x_79 == 1.0)), select(1.0, 0.0, (x_83 == 2.0)), select(1.0, 0.0, (x_87 == 3.0)));
-  let x_91 : vec4<f32> = x_GLF_color;
-  x_GLF_color = vec4<f32>(x_90.x, x_90.y, x_90.z, x_91.w);
-  x_GLF_color.w = 1.0;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 73e9ec8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int i = 0;
-  float3 v = float3(0.0f, 0.0f, 0.0f);
-  const float x_42 = asfloat(x_6[0].x);
-  f = x_42;
-  a = 1;
-  b = 0;
-  c = 1;
-  i = 0;
-  {
-    for(; (i < 3); i = (i + 1)) {
-      set_float3(v, i, (f + float(i)));
-    }
-  }
-  const float x_59 = asfloat(x_6[0].x);
-  if ((x_59 == 1.0f)) {
-    while (true) {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      {
-        if (((c & (a | b)) == 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    const float x_74 = asfloat(x_6[0].x);
-    if ((x_74 == 1.0f)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    }
-  }
-  const float x_79 = v.x;
-  const float x_83 = v.y;
-  const float x_87 = v.z;
-  const float3 x_90 = float3(((x_79 == 1.0f) ? 1.0f : 0.0f), ((x_83 == 2.0f) ? 0.0f : 1.0f), ((x_87 == 3.0f) ? 0.0f : 1.0f));
-  x_GLF_color = float4(x_90.x, x_90.y, x_90.z, x_GLF_color.w);
-  x_GLF_color.w = 1.0f;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1280adf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int i = 0;
-  float3 v = 0.0f;
-  float const x_42 = x_6.one;
-  f = x_42;
-  a = 1;
-  b = 0;
-  c = 1;
-  i = 0;
-  while (true) {
-    int const x_47 = i;
-    if ((x_47 < 3)) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    float const x_51 = f;
-    int const x_52 = i;
-    v[x_50] = (x_51 + float(x_52));
-    {
-      int const x_56 = i;
-      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-    }
-  }
-  float const x_59 = x_6.one;
-  if ((x_59 == 1.0f)) {
-    while (true) {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      {
-        int const x_67 = c;
-        int const x_68 = a;
-        int const x_69 = b;
-        if (((x_67 & (x_68 | x_69)) == 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    float const x_74 = x_6.one;
-    if ((x_74 == 1.0f)) {
-      *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    }
-  }
-  float const x_79 = v.x;
-  float const x_83 = v.y;
-  float const x_87 = v.z;
-  float3 const x_90 = float3(select(0.0f, 1.0f, (x_79 == 1.0f)), select(1.0f, 0.0f, (x_83 == 2.0f)), select(1.0f, 0.0f, (x_87 == 3.0f)));
-  float4 const x_91 = *(tint_symbol_3);
-  *(tint_symbol_3) = float4(x_90.x, x_90.y, x_90.z, x_91.w);
-  (*(tint_symbol_3)).w = 1.0f;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5827c5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,185 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 116
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %i "i"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %28 = OpConstantNull %v3float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %66 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %78 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-     %uint_3 = OpConstant %uint 3
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-        %105 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %c = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-          %v = OpVariable %_ptr_Function_v3float Function %28
-         %32 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %33 = OpLoad %float %32
-               OpStore %f %33
-               OpStore %a %int_1
-               OpStore %b %int_0
-               OpStore %c %int_1
-               OpStore %i %int_0
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpSLessThan %bool %40 %int_3
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %37
-         %44 = OpLabel
-         %47 = OpLoad %int %i
-         %48 = OpLoad %float %f
-         %49 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Function_float %v %47
-         %51 = OpConvertSToF %float %49
-         %52 = OpFAdd %float %48 %51
-               OpStore %50 %52
-               OpBranch %38
-         %38 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpIAdd %int %53 %int_1
-               OpStore %i %54
-               OpBranch %36
-         %37 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpFOrdEqual %bool %56 %float_1
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %x_GLF_color %66
-               OpBranch %63
-         %63 = OpLabel
-         %67 = OpLoad %int %c
-         %68 = OpLoad %int %a
-         %69 = OpLoad %int %b
-         %70 = OpBitwiseOr %int %68 %69
-         %71 = OpBitwiseAnd %int %67 %70
-         %72 = OpIEqual %bool %71 %int_0
-               OpBranchConditional %72 %61 %62
-         %62 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %74 = OpLoad %float %73
-         %75 = OpFOrdEqual %bool %74 %float_1
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-               OpStore %x_GLF_color %78
-               OpBranch %76
-         %76 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %80 = OpLoad %float %79
-         %82 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %83 = OpLoad %float %82
-         %85 = OpAccessChain %_ptr_Function_float %v %uint_2
-         %86 = OpLoad %float %85
-         %88 = OpFOrdEqual %bool %80 %float_1
-         %87 = OpSelect %float %88 %float_1 %float_0
-         %91 = OpFOrdEqual %bool %83 %float_2
-         %89 = OpSelect %float %91 %float_0 %float_1
-         %94 = OpFOrdEqual %bool %86 %float_3
-         %92 = OpSelect %float %94 %float_0 %float_1
-         %95 = OpCompositeConstruct %v3float %87 %89 %92
-         %96 = OpLoad %v4float %x_GLF_color
-         %97 = OpCompositeExtract %float %95 0
-         %98 = OpCompositeExtract %float %95 1
-         %99 = OpCompositeExtract %float %95 2
-        %100 = OpCompositeExtract %float %96 3
-        %101 = OpCompositeConstruct %v4float %97 %98 %99 %100
-               OpStore %x_GLF_color %101
-        %104 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_3
-               OpStore %104 %float_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %105
-        %108 = OpLabel
-        %109 = OpFunctionCall %void %main_1
-        %110 = OpLoad %v4float %x_GLF_color
-        %111 = OpCompositeConstruct %main_out %110
-               OpReturnValue %111
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-        %113 = OpLabel
-        %114 = OpFunctionCall %main_out %main_inner
-        %115 = OpCompositeExtract %v4float %114 0
-               OpStore %x_GLF_color_1_1 %115
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b06321e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dag-combiner-same-cond-nested/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var i : i32;
-  var v : vec3<f32>;
-  let x_42 : f32 = x_6.one;
-  f = x_42;
-  a = 1;
-  b = 0;
-  c = 1;
-  i = 0;
-  loop {
-    let x_47 : i32 = i;
-    if ((x_47 < 3)) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    let x_51 : f32 = f;
-    let x_52 : i32 = i;
-    v[x_50] = (x_51 + f32(x_52));
-
-    continuing {
-      let x_56 : i32 = i;
-      i = (x_56 + 1);
-    }
-  }
-  let x_59 : f32 = x_6.one;
-  if ((x_59 == 1.0)) {
-    loop {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-
-      continuing {
-        let x_67 : i32 = c;
-        let x_68 : i32 = a;
-        let x_69 : i32 = b;
-        if (((x_67 & (x_68 | x_69)) == 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    let x_74 : f32 = x_6.one;
-    if ((x_74 == 1.0)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    }
-  }
-  let x_79 : f32 = v.x;
-  let x_83 : f32 = v.y;
-  let x_87 : f32 = v.z;
-  let x_90 : vec3<f32> = vec3<f32>(select(0.0, 1.0, (x_79 == 1.0)), select(1.0, 0.0, (x_83 == 2.0)), select(1.0, 0.0, (x_87 == 3.0)));
-  let x_91 : vec4<f32> = x_GLF_color;
-  x_GLF_color = vec4<f32>(x_90.x, x_90.y, x_90.z, x_91.w);
-  x_GLF_color.w = 1.0;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e806c84..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,145 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_29 = false;
-  float x_30 = 0.0f;
-  float x_31 = 0.0f;
-  float x_32 = 0.0f;
-  bool x_33 = false;
-  float x_34 = 0.0f;
-  float x_35 = 0.0f;
-  float x_36 = 0.0f;
-  float f = 0.0f;
-  float i = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  f = 0.0f;
-  i = 0.0f;
-  while (true) {
-    param = i;
-    x_33 = false;
-    while (true) {
-      x_35 = param;
-      while (true) {
-        if ((x_35 == param)) {
-          const float x_53 = x_35;
-          x_33 = true;
-          x_34 = x_53;
-          break;
-        }
-        x_35 = (x_35 + 1.0f);
-        {
-          if ((x_35 < param)) {
-          } else {
-            break;
-          }
-        }
-      }
-      if (x_33) {
-        break;
-      }
-      x_33 = true;
-      x_34 = 0.0f;
-      break;
-    }
-    const float x_61 = x_34;
-    x_36 = x_61;
-    f = x_61;
-    param_1 = 1.0f;
-    x_29 = false;
-    while (true) {
-      x_31 = param_1;
-      while (true) {
-        if ((x_31 == param_1)) {
-          const float x_75 = x_31;
-          x_29 = true;
-          x_30 = x_75;
-          break;
-        }
-        x_31 = (x_31 + 1.0f);
-        {
-          if ((x_31 < param_1)) {
-          } else {
-            break;
-          }
-        }
-      }
-      if (x_29) {
-        break;
-      }
-      x_29 = true;
-      x_30 = 0.0f;
-      break;
-    }
-    const float x_83 = x_30;
-    x_32 = x_83;
-    const float x_85 = (i + x_83);
-    i = x_85;
-    if ((x_85 < 6.0f)) {
-    } else {
-      break;
-    }
-  }
-  if ((f == 5.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float func_f1_(inout float x) {
-  bool x_93 = false;
-  float x_94 = 0.0f;
-  float a = 0.0f;
-  while (true) {
-    const float x_96 = x;
-    a = x_96;
-    while (true) {
-      const float x_103 = a;
-      const float x_104 = x;
-      if ((x_103 == x_104)) {
-        const float x_108 = a;
-        x_93 = true;
-        x_94 = x_108;
-        break;
-      }
-      a = (a + 1.0f);
-      {
-        const float x_111 = a;
-        const float x_112 = x;
-        if ((x_111 < x_112)) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_93) {
-      break;
-    }
-    x_93 = true;
-    x_94 = 0.0f;
-    break;
-  }
-  return x_94;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6cad478..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,168 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool x_29 = false;
-  float x_30 = 0.0f;
-  float x_31 = 0.0f;
-  float x_32 = 0.0f;
-  bool x_33 = false;
-  float x_34 = 0.0f;
-  float x_35 = 0.0f;
-  float x_36 = 0.0f;
-  float f = 0.0f;
-  float i = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  f = 0.0f;
-  i = 0.0f;
-  while (true) {
-    float const x_38 = i;
-    param = x_38;
-    x_33 = false;
-    while (true) {
-      float const x_41 = param;
-      x_35 = x_41;
-      while (true) {
-        float const x_48 = x_35;
-        float const x_49 = param;
-        if ((x_48 == x_49)) {
-          float const x_53 = x_35;
-          x_33 = true;
-          x_34 = x_53;
-          break;
-        }
-        float const x_54 = x_35;
-        x_35 = (x_54 + 1.0f);
-        {
-          float const x_56 = x_35;
-          float const x_57 = param;
-          if ((x_56 < x_57)) {
-          } else {
-            break;
-          }
-        }
-      }
-      bool const x_59 = x_33;
-      if (x_59) {
-        break;
-      }
-      x_33 = true;
-      x_34 = 0.0f;
-      break;
-    }
-    float const x_61 = x_34;
-    x_36 = x_61;
-    f = x_61;
-    param_1 = 1.0f;
-    x_29 = false;
-    while (true) {
-      float const x_63 = param_1;
-      x_31 = x_63;
-      while (true) {
-        float const x_70 = x_31;
-        float const x_71 = param_1;
-        if ((x_70 == x_71)) {
-          float const x_75 = x_31;
-          x_29 = true;
-          x_30 = x_75;
-          break;
-        }
-        float const x_76 = x_31;
-        x_31 = (x_76 + 1.0f);
-        {
-          float const x_78 = x_31;
-          float const x_79 = param_1;
-          if ((x_78 < x_79)) {
-          } else {
-            break;
-          }
-        }
-      }
-      bool const x_81 = x_29;
-      if (x_81) {
-        break;
-      }
-      x_29 = true;
-      x_30 = 0.0f;
-      break;
-    }
-    float const x_83 = x_30;
-    x_32 = x_83;
-    float const x_84 = i;
-    float const x_85 = (x_84 + x_83);
-    i = x_85;
-    if ((x_85 < 6.0f)) {
-    } else {
-      break;
-    }
-  }
-  float const x_87 = f;
-  if ((x_87 == 5.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float func_f1_(thread float* const x) {
-  bool x_93 = false;
-  float x_94 = 0.0f;
-  float a = 0.0f;
-  while (true) {
-    float const x_96 = *(x);
-    a = x_96;
-    while (true) {
-      float const x_103 = a;
-      float const x_104 = *(x);
-      if ((x_103 == x_104)) {
-        float const x_108 = a;
-        x_93 = true;
-        x_94 = x_108;
-        break;
-      }
-      float const x_109 = a;
-      a = (x_109 + 1.0f);
-      {
-        float const x_111 = a;
-        float const x_112 = *(x);
-        if ((x_111 < x_112)) {
-        } else {
-          break;
-        }
-      }
-    }
-    bool const x_114 = x_93;
-    if (x_114) {
-      break;
-    }
-    x_93 = true;
-    x_94 = 0.0f;
-    break;
-  }
-  float const x_116 = x_94;
-  return x_116;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e3320fd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,280 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 146
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_29 "x_29"
-               OpName %x_30 "x_30"
-               OpName %x_31 "x_31"
-               OpName %x_32 "x_32"
-               OpName %x_33 "x_33"
-               OpName %x_34 "x_34"
-               OpName %x_35 "x_35"
-               OpName %x_36 "x_36"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_f1_ "func_f1_"
-               OpName %x "x"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %a "a"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %16 = OpConstantNull %bool
-%_ptr_Function_float = OpTypePointer Function %float
-         %19 = OpConstantNull %float
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-    %float_6 = OpConstant %float 6
-    %float_5 = OpConstant %float 5
-         %99 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %100 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %101 = OpTypeFunction %main_out
-        %112 = OpTypeFunction %float %_ptr_Function_float
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %x_29 = OpVariable %_ptr_Function_bool Function %16
-       %x_30 = OpVariable %_ptr_Function_float Function %19
-       %x_31 = OpVariable %_ptr_Function_float Function %19
-       %x_32 = OpVariable %_ptr_Function_float Function %19
-       %x_33 = OpVariable %_ptr_Function_bool Function %16
-       %x_34 = OpVariable %_ptr_Function_float Function %19
-       %x_35 = OpVariable %_ptr_Function_float Function %19
-       %x_36 = OpVariable %_ptr_Function_float Function %19
-          %f = OpVariable %_ptr_Function_float Function %19
-          %i = OpVariable %_ptr_Function_float Function %19
-      %param = OpVariable %_ptr_Function_float Function %19
-    %param_1 = OpVariable %_ptr_Function_float Function %19
-               OpStore %x_29 %false
-               OpStore %x_33 %false
-               OpStore %f %float_0
-               OpStore %i %float_0
-               OpBranch %31
-         %31 = OpLabel
-               OpLoopMerge %32 %33 None
-               OpBranch %34
-         %34 = OpLabel
-         %35 = OpLoad %float %i
-               OpStore %param %35
-               OpStore %x_33 %false
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %float %param
-               OpStore %x_35 %40
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpLoad %float %x_35
-         %46 = OpLoad %float %param
-         %47 = OpFOrdEqual %bool %45 %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-         %50 = OpLoad %float %x_35
-               OpStore %x_33 %true
-               OpStore %x_34 %50
-               OpBranch %42
-         %48 = OpLabel
-         %52 = OpLoad %float %x_35
-         %54 = OpFAdd %float %52 %float_1
-               OpStore %x_35 %54
-               OpBranch %43
-         %43 = OpLabel
-         %55 = OpLoad %float %x_35
-         %56 = OpLoad %float %param
-         %57 = OpFOrdLessThan %bool %55 %56
-               OpBranchConditional %57 %41 %42
-         %42 = OpLabel
-         %58 = OpLoad %bool %x_33
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpBranch %37
-         %59 = OpLabel
-               OpStore %x_33 %true
-               OpStore %x_34 %float_0
-               OpBranch %37
-         %38 = OpLabel
-               OpBranch %36
-         %37 = OpLabel
-         %61 = OpLoad %float %x_34
-               OpStore %x_36 %61
-               OpStore %f %61
-               OpStore %param_1 %float_1
-               OpStore %x_29 %false
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %66 = OpLoad %float %param_1
-               OpStore %x_31 %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %float %x_31
-         %72 = OpLoad %float %param_1
-         %73 = OpFOrdEqual %bool %71 %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %74
-         %75 = OpLabel
-         %76 = OpLoad %float %x_31
-               OpStore %x_29 %true
-               OpStore %x_30 %76
-               OpBranch %68
-         %74 = OpLabel
-         %77 = OpLoad %float %x_31
-         %78 = OpFAdd %float %77 %float_1
-               OpStore %x_31 %78
-               OpBranch %69
-         %69 = OpLabel
-         %79 = OpLoad %float %x_31
-         %80 = OpLoad %float %param_1
-         %81 = OpFOrdLessThan %bool %79 %80
-               OpBranchConditional %81 %67 %68
-         %68 = OpLabel
-         %82 = OpLoad %bool %x_29
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-               OpBranch %63
-         %83 = OpLabel
-               OpStore %x_29 %true
-               OpStore %x_30 %float_0
-               OpBranch %63
-         %64 = OpLabel
-               OpBranch %62
-         %63 = OpLabel
-         %85 = OpLoad %float %x_30
-               OpStore %x_32 %85
-         %86 = OpLoad %float %i
-         %87 = OpFAdd %float %86 %85
-               OpStore %i %87
-         %89 = OpFOrdLessThan %bool %87 %float_6
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %32
-         %90 = OpLabel
-               OpBranch %33
-         %33 = OpLabel
-               OpBranch %31
-         %32 = OpLabel
-         %93 = OpLoad %float %f
-         %95 = OpFOrdEqual %bool %93 %float_5
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %98
-         %97 = OpLabel
-               OpStore %x_GLF_color %99
-               OpBranch %96
-         %98 = OpLabel
-               OpStore %x_GLF_color %100
-               OpBranch %96
-         %96 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %101
-        %104 = OpLabel
-        %105 = OpFunctionCall %void %main_1
-        %106 = OpLoad %v4float %x_GLF_color
-        %107 = OpCompositeConstruct %main_out %106
-               OpReturnValue %107
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-        %109 = OpLabel
-        %110 = OpFunctionCall %main_out %main_inner
-        %111 = OpCompositeExtract %v4float %110 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
-   %func_f1_ = OpFunction %float None %112
-          %x = OpFunctionParameter %_ptr_Function_float
-        %115 = OpLabel
-       %x_93 = OpVariable %_ptr_Function_bool Function %16
-       %x_94 = OpVariable %_ptr_Function_float Function %19
-          %a = OpVariable %_ptr_Function_float Function %19
-               OpStore %x_93 %false
-               OpBranch %119
-        %119 = OpLabel
-               OpLoopMerge %120 %121 None
-               OpBranch %122
-        %122 = OpLabel
-        %124 = OpLoad %float %x
-               OpStore %a %124
-               OpBranch %125
-        %125 = OpLabel
-               OpLoopMerge %126 %127 None
-               OpBranch %128
-        %128 = OpLabel
-        %129 = OpLoad %float %a
-        %131 = OpLoad %float %x
-        %132 = OpFOrdEqual %bool %129 %131
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %133
-        %134 = OpLabel
-        %135 = OpLoad %float %a
-               OpStore %x_93 %true
-               OpStore %x_94 %135
-               OpBranch %126
-        %133 = OpLabel
-        %136 = OpLoad %float %a
-        %137 = OpFAdd %float %136 %float_1
-               OpStore %a %137
-               OpBranch %127
-        %127 = OpLabel
-        %138 = OpLoad %float %a
-        %140 = OpLoad %float %x
-        %141 = OpFOrdLessThan %bool %138 %140
-               OpBranchConditional %141 %125 %126
-        %126 = OpLabel
-        %142 = OpLoad %bool %x_93
-               OpSelectionMerge %143 None
-               OpBranchConditional %142 %144 %143
-        %144 = OpLabel
-               OpBranch %120
-        %143 = OpLabel
-               OpStore %x_93 %true
-               OpStore %x_94 %float_0
-               OpBranch %120
-        %121 = OpLabel
-               OpBranch %119
-        %120 = OpLabel
-        %145 = OpLoad %float %x_94
-               OpReturnValue %145
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 14ef8d3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,159 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_29 : bool = false;
-  var x_30 : f32;
-  var x_31 : f32;
-  var x_32 : f32;
-  var x_33 : bool = false;
-  var x_34 : f32;
-  var x_35 : f32;
-  var x_36 : f32;
-  var f : f32;
-  var i : f32;
-  var param : f32;
-  var param_1 : f32;
-  f = 0.0;
-  i = 0.0;
-  loop {
-    let x_38 : f32 = i;
-    param = x_38;
-    x_33 = false;
-    loop {
-      let x_41 : f32 = param;
-      x_35 = x_41;
-      loop {
-        let x_48 : f32 = x_35;
-        let x_49 : f32 = param;
-        if ((x_48 == x_49)) {
-          let x_53 : f32 = x_35;
-          x_33 = true;
-          x_34 = x_53;
-          break;
-        }
-        let x_54 : f32 = x_35;
-        x_35 = (x_54 + 1.0);
-
-        continuing {
-          let x_56 : f32 = x_35;
-          let x_57 : f32 = param;
-          if ((x_56 < x_57)) {
-          } else {
-            break;
-          }
-        }
-      }
-      let x_59 : bool = x_33;
-      if (x_59) {
-        break;
-      }
-      x_33 = true;
-      x_34 = 0.0;
-      break;
-    }
-    let x_61 : f32 = x_34;
-    x_36 = x_61;
-    f = x_61;
-    param_1 = 1.0;
-    x_29 = false;
-    loop {
-      let x_63 : f32 = param_1;
-      x_31 = x_63;
-      loop {
-        let x_70 : f32 = x_31;
-        let x_71 : f32 = param_1;
-        if ((x_70 == x_71)) {
-          let x_75 : f32 = x_31;
-          x_29 = true;
-          x_30 = x_75;
-          break;
-        }
-        let x_76 : f32 = x_31;
-        x_31 = (x_76 + 1.0);
-
-        continuing {
-          let x_78 : f32 = x_31;
-          let x_79 : f32 = param_1;
-          if ((x_78 < x_79)) {
-          } else {
-            break;
-          }
-        }
-      }
-      let x_81 : bool = x_29;
-      if (x_81) {
-        break;
-      }
-      x_29 = true;
-      x_30 = 0.0;
-      break;
-    }
-    let x_83 : f32 = x_30;
-    x_32 = x_83;
-    let x_84 : f32 = i;
-    let x_85 : f32 = (x_84 + x_83);
-    i = x_85;
-    if ((x_85 < 6.0)) {
-    } else {
-      break;
-    }
-  }
-  let x_87 : f32 = f;
-  if ((x_87 == 5.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_f1_(x : ptr<function, f32>) -> f32 {
-  var x_93 : bool = false;
-  var x_94 : f32;
-  var a : f32;
-  loop {
-    let x_96 : f32 = *(x);
-    a = x_96;
-    loop {
-      let x_103 : f32 = a;
-      let x_104 : f32 = *(x);
-      if ((x_103 == x_104)) {
-        let x_108 : f32 = a;
-        x_93 = true;
-        x_94 = x_108;
-        break;
-      }
-      let x_109 : f32 = a;
-      a = (x_109 + 1.0);
-
-      continuing {
-        let x_111 : f32 = a;
-        let x_112 : f32 = *(x);
-        if ((x_111 < x_112)) {
-        } else {
-          break;
-        }
-      }
-    }
-    let x_114 : bool = x_93;
-    if (x_114) {
-      break;
-    }
-    x_93 = true;
-    x_94 = 0.0;
-    break;
-  }
-  let x_116 : f32 = x_94;
-  return x_116;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e806c84..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,145 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_29 = false;
-  float x_30 = 0.0f;
-  float x_31 = 0.0f;
-  float x_32 = 0.0f;
-  bool x_33 = false;
-  float x_34 = 0.0f;
-  float x_35 = 0.0f;
-  float x_36 = 0.0f;
-  float f = 0.0f;
-  float i = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  f = 0.0f;
-  i = 0.0f;
-  while (true) {
-    param = i;
-    x_33 = false;
-    while (true) {
-      x_35 = param;
-      while (true) {
-        if ((x_35 == param)) {
-          const float x_53 = x_35;
-          x_33 = true;
-          x_34 = x_53;
-          break;
-        }
-        x_35 = (x_35 + 1.0f);
-        {
-          if ((x_35 < param)) {
-          } else {
-            break;
-          }
-        }
-      }
-      if (x_33) {
-        break;
-      }
-      x_33 = true;
-      x_34 = 0.0f;
-      break;
-    }
-    const float x_61 = x_34;
-    x_36 = x_61;
-    f = x_61;
-    param_1 = 1.0f;
-    x_29 = false;
-    while (true) {
-      x_31 = param_1;
-      while (true) {
-        if ((x_31 == param_1)) {
-          const float x_75 = x_31;
-          x_29 = true;
-          x_30 = x_75;
-          break;
-        }
-        x_31 = (x_31 + 1.0f);
-        {
-          if ((x_31 < param_1)) {
-          } else {
-            break;
-          }
-        }
-      }
-      if (x_29) {
-        break;
-      }
-      x_29 = true;
-      x_30 = 0.0f;
-      break;
-    }
-    const float x_83 = x_30;
-    x_32 = x_83;
-    const float x_85 = (i + x_83);
-    i = x_85;
-    if ((x_85 < 6.0f)) {
-    } else {
-      break;
-    }
-  }
-  if ((f == 5.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float func_f1_(inout float x) {
-  bool x_93 = false;
-  float x_94 = 0.0f;
-  float a = 0.0f;
-  while (true) {
-    const float x_96 = x;
-    a = x_96;
-    while (true) {
-      const float x_103 = a;
-      const float x_104 = x;
-      if ((x_103 == x_104)) {
-        const float x_108 = a;
-        x_93 = true;
-        x_94 = x_108;
-        break;
-      }
-      a = (a + 1.0f);
-      {
-        const float x_111 = a;
-        const float x_112 = x;
-        if ((x_111 < x_112)) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_93) {
-      break;
-    }
-    x_93 = true;
-    x_94 = 0.0f;
-    break;
-  }
-  return x_94;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6cad478..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,168 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool x_29 = false;
-  float x_30 = 0.0f;
-  float x_31 = 0.0f;
-  float x_32 = 0.0f;
-  bool x_33 = false;
-  float x_34 = 0.0f;
-  float x_35 = 0.0f;
-  float x_36 = 0.0f;
-  float f = 0.0f;
-  float i = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  f = 0.0f;
-  i = 0.0f;
-  while (true) {
-    float const x_38 = i;
-    param = x_38;
-    x_33 = false;
-    while (true) {
-      float const x_41 = param;
-      x_35 = x_41;
-      while (true) {
-        float const x_48 = x_35;
-        float const x_49 = param;
-        if ((x_48 == x_49)) {
-          float const x_53 = x_35;
-          x_33 = true;
-          x_34 = x_53;
-          break;
-        }
-        float const x_54 = x_35;
-        x_35 = (x_54 + 1.0f);
-        {
-          float const x_56 = x_35;
-          float const x_57 = param;
-          if ((x_56 < x_57)) {
-          } else {
-            break;
-          }
-        }
-      }
-      bool const x_59 = x_33;
-      if (x_59) {
-        break;
-      }
-      x_33 = true;
-      x_34 = 0.0f;
-      break;
-    }
-    float const x_61 = x_34;
-    x_36 = x_61;
-    f = x_61;
-    param_1 = 1.0f;
-    x_29 = false;
-    while (true) {
-      float const x_63 = param_1;
-      x_31 = x_63;
-      while (true) {
-        float const x_70 = x_31;
-        float const x_71 = param_1;
-        if ((x_70 == x_71)) {
-          float const x_75 = x_31;
-          x_29 = true;
-          x_30 = x_75;
-          break;
-        }
-        float const x_76 = x_31;
-        x_31 = (x_76 + 1.0f);
-        {
-          float const x_78 = x_31;
-          float const x_79 = param_1;
-          if ((x_78 < x_79)) {
-          } else {
-            break;
-          }
-        }
-      }
-      bool const x_81 = x_29;
-      if (x_81) {
-        break;
-      }
-      x_29 = true;
-      x_30 = 0.0f;
-      break;
-    }
-    float const x_83 = x_30;
-    x_32 = x_83;
-    float const x_84 = i;
-    float const x_85 = (x_84 + x_83);
-    i = x_85;
-    if ((x_85 < 6.0f)) {
-    } else {
-      break;
-    }
-  }
-  float const x_87 = f;
-  if ((x_87 == 5.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float func_f1_(thread float* const x) {
-  bool x_93 = false;
-  float x_94 = 0.0f;
-  float a = 0.0f;
-  while (true) {
-    float const x_96 = *(x);
-    a = x_96;
-    while (true) {
-      float const x_103 = a;
-      float const x_104 = *(x);
-      if ((x_103 == x_104)) {
-        float const x_108 = a;
-        x_93 = true;
-        x_94 = x_108;
-        break;
-      }
-      float const x_109 = a;
-      a = (x_109 + 1.0f);
-      {
-        float const x_111 = a;
-        float const x_112 = *(x);
-        if ((x_111 < x_112)) {
-        } else {
-          break;
-        }
-      }
-    }
-    bool const x_114 = x_93;
-    if (x_114) {
-      break;
-    }
-    x_93 = true;
-    x_94 = 0.0f;
-    break;
-  }
-  float const x_116 = x_94;
-  return x_116;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e3320fd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,280 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 146
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_29 "x_29"
-               OpName %x_30 "x_30"
-               OpName %x_31 "x_31"
-               OpName %x_32 "x_32"
-               OpName %x_33 "x_33"
-               OpName %x_34 "x_34"
-               OpName %x_35 "x_35"
-               OpName %x_36 "x_36"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_f1_ "func_f1_"
-               OpName %x "x"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %a "a"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %16 = OpConstantNull %bool
-%_ptr_Function_float = OpTypePointer Function %float
-         %19 = OpConstantNull %float
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-    %float_6 = OpConstant %float 6
-    %float_5 = OpConstant %float 5
-         %99 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %100 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %101 = OpTypeFunction %main_out
-        %112 = OpTypeFunction %float %_ptr_Function_float
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %x_29 = OpVariable %_ptr_Function_bool Function %16
-       %x_30 = OpVariable %_ptr_Function_float Function %19
-       %x_31 = OpVariable %_ptr_Function_float Function %19
-       %x_32 = OpVariable %_ptr_Function_float Function %19
-       %x_33 = OpVariable %_ptr_Function_bool Function %16
-       %x_34 = OpVariable %_ptr_Function_float Function %19
-       %x_35 = OpVariable %_ptr_Function_float Function %19
-       %x_36 = OpVariable %_ptr_Function_float Function %19
-          %f = OpVariable %_ptr_Function_float Function %19
-          %i = OpVariable %_ptr_Function_float Function %19
-      %param = OpVariable %_ptr_Function_float Function %19
-    %param_1 = OpVariable %_ptr_Function_float Function %19
-               OpStore %x_29 %false
-               OpStore %x_33 %false
-               OpStore %f %float_0
-               OpStore %i %float_0
-               OpBranch %31
-         %31 = OpLabel
-               OpLoopMerge %32 %33 None
-               OpBranch %34
-         %34 = OpLabel
-         %35 = OpLoad %float %i
-               OpStore %param %35
-               OpStore %x_33 %false
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %float %param
-               OpStore %x_35 %40
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpLoad %float %x_35
-         %46 = OpLoad %float %param
-         %47 = OpFOrdEqual %bool %45 %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-         %50 = OpLoad %float %x_35
-               OpStore %x_33 %true
-               OpStore %x_34 %50
-               OpBranch %42
-         %48 = OpLabel
-         %52 = OpLoad %float %x_35
-         %54 = OpFAdd %float %52 %float_1
-               OpStore %x_35 %54
-               OpBranch %43
-         %43 = OpLabel
-         %55 = OpLoad %float %x_35
-         %56 = OpLoad %float %param
-         %57 = OpFOrdLessThan %bool %55 %56
-               OpBranchConditional %57 %41 %42
-         %42 = OpLabel
-         %58 = OpLoad %bool %x_33
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpBranch %37
-         %59 = OpLabel
-               OpStore %x_33 %true
-               OpStore %x_34 %float_0
-               OpBranch %37
-         %38 = OpLabel
-               OpBranch %36
-         %37 = OpLabel
-         %61 = OpLoad %float %x_34
-               OpStore %x_36 %61
-               OpStore %f %61
-               OpStore %param_1 %float_1
-               OpStore %x_29 %false
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %66 = OpLoad %float %param_1
-               OpStore %x_31 %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %float %x_31
-         %72 = OpLoad %float %param_1
-         %73 = OpFOrdEqual %bool %71 %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %74
-         %75 = OpLabel
-         %76 = OpLoad %float %x_31
-               OpStore %x_29 %true
-               OpStore %x_30 %76
-               OpBranch %68
-         %74 = OpLabel
-         %77 = OpLoad %float %x_31
-         %78 = OpFAdd %float %77 %float_1
-               OpStore %x_31 %78
-               OpBranch %69
-         %69 = OpLabel
-         %79 = OpLoad %float %x_31
-         %80 = OpLoad %float %param_1
-         %81 = OpFOrdLessThan %bool %79 %80
-               OpBranchConditional %81 %67 %68
-         %68 = OpLabel
-         %82 = OpLoad %bool %x_29
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-               OpBranch %63
-         %83 = OpLabel
-               OpStore %x_29 %true
-               OpStore %x_30 %float_0
-               OpBranch %63
-         %64 = OpLabel
-               OpBranch %62
-         %63 = OpLabel
-         %85 = OpLoad %float %x_30
-               OpStore %x_32 %85
-         %86 = OpLoad %float %i
-         %87 = OpFAdd %float %86 %85
-               OpStore %i %87
-         %89 = OpFOrdLessThan %bool %87 %float_6
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %32
-         %90 = OpLabel
-               OpBranch %33
-         %33 = OpLabel
-               OpBranch %31
-         %32 = OpLabel
-         %93 = OpLoad %float %f
-         %95 = OpFOrdEqual %bool %93 %float_5
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %98
-         %97 = OpLabel
-               OpStore %x_GLF_color %99
-               OpBranch %96
-         %98 = OpLabel
-               OpStore %x_GLF_color %100
-               OpBranch %96
-         %96 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %101
-        %104 = OpLabel
-        %105 = OpFunctionCall %void %main_1
-        %106 = OpLoad %v4float %x_GLF_color
-        %107 = OpCompositeConstruct %main_out %106
-               OpReturnValue %107
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-        %109 = OpLabel
-        %110 = OpFunctionCall %main_out %main_inner
-        %111 = OpCompositeExtract %v4float %110 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
-   %func_f1_ = OpFunction %float None %112
-          %x = OpFunctionParameter %_ptr_Function_float
-        %115 = OpLabel
-       %x_93 = OpVariable %_ptr_Function_bool Function %16
-       %x_94 = OpVariable %_ptr_Function_float Function %19
-          %a = OpVariable %_ptr_Function_float Function %19
-               OpStore %x_93 %false
-               OpBranch %119
-        %119 = OpLabel
-               OpLoopMerge %120 %121 None
-               OpBranch %122
-        %122 = OpLabel
-        %124 = OpLoad %float %x
-               OpStore %a %124
-               OpBranch %125
-        %125 = OpLabel
-               OpLoopMerge %126 %127 None
-               OpBranch %128
-        %128 = OpLabel
-        %129 = OpLoad %float %a
-        %131 = OpLoad %float %x
-        %132 = OpFOrdEqual %bool %129 %131
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %133
-        %134 = OpLabel
-        %135 = OpLoad %float %a
-               OpStore %x_93 %true
-               OpStore %x_94 %135
-               OpBranch %126
-        %133 = OpLabel
-        %136 = OpLoad %float %a
-        %137 = OpFAdd %float %136 %float_1
-               OpStore %a %137
-               OpBranch %127
-        %127 = OpLabel
-        %138 = OpLoad %float %a
-        %140 = OpLoad %float %x
-        %141 = OpFOrdLessThan %bool %138 %140
-               OpBranchConditional %141 %125 %126
-        %126 = OpLabel
-        %142 = OpLoad %bool %x_93
-               OpSelectionMerge %143 None
-               OpBranchConditional %142 %144 %143
-        %144 = OpLabel
-               OpBranch %120
-        %143 = OpLabel
-               OpStore %x_93 %true
-               OpStore %x_94 %float_0
-               OpBranch %120
-        %121 = OpLabel
-               OpBranch %119
-        %120 = OpLabel
-        %145 = OpLoad %float %x_94
-               OpReturnValue %145
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 14ef8d3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-branch-func-return-arg/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,159 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_29 : bool = false;
-  var x_30 : f32;
-  var x_31 : f32;
-  var x_32 : f32;
-  var x_33 : bool = false;
-  var x_34 : f32;
-  var x_35 : f32;
-  var x_36 : f32;
-  var f : f32;
-  var i : f32;
-  var param : f32;
-  var param_1 : f32;
-  f = 0.0;
-  i = 0.0;
-  loop {
-    let x_38 : f32 = i;
-    param = x_38;
-    x_33 = false;
-    loop {
-      let x_41 : f32 = param;
-      x_35 = x_41;
-      loop {
-        let x_48 : f32 = x_35;
-        let x_49 : f32 = param;
-        if ((x_48 == x_49)) {
-          let x_53 : f32 = x_35;
-          x_33 = true;
-          x_34 = x_53;
-          break;
-        }
-        let x_54 : f32 = x_35;
-        x_35 = (x_54 + 1.0);
-
-        continuing {
-          let x_56 : f32 = x_35;
-          let x_57 : f32 = param;
-          if ((x_56 < x_57)) {
-          } else {
-            break;
-          }
-        }
-      }
-      let x_59 : bool = x_33;
-      if (x_59) {
-        break;
-      }
-      x_33 = true;
-      x_34 = 0.0;
-      break;
-    }
-    let x_61 : f32 = x_34;
-    x_36 = x_61;
-    f = x_61;
-    param_1 = 1.0;
-    x_29 = false;
-    loop {
-      let x_63 : f32 = param_1;
-      x_31 = x_63;
-      loop {
-        let x_70 : f32 = x_31;
-        let x_71 : f32 = param_1;
-        if ((x_70 == x_71)) {
-          let x_75 : f32 = x_31;
-          x_29 = true;
-          x_30 = x_75;
-          break;
-        }
-        let x_76 : f32 = x_31;
-        x_31 = (x_76 + 1.0);
-
-        continuing {
-          let x_78 : f32 = x_31;
-          let x_79 : f32 = param_1;
-          if ((x_78 < x_79)) {
-          } else {
-            break;
-          }
-        }
-      }
-      let x_81 : bool = x_29;
-      if (x_81) {
-        break;
-      }
-      x_29 = true;
-      x_30 = 0.0;
-      break;
-    }
-    let x_83 : f32 = x_30;
-    x_32 = x_83;
-    let x_84 : f32 = i;
-    let x_85 : f32 = (x_84 + x_83);
-    i = x_85;
-    if ((x_85 < 6.0)) {
-    } else {
-      break;
-    }
-  }
-  let x_87 : f32 = f;
-  if ((x_87 == 5.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_f1_(x : ptr<function, f32>) -> f32 {
-  var x_93 : bool = false;
-  var x_94 : f32;
-  var a : f32;
-  loop {
-    let x_96 : f32 = *(x);
-    a = x_96;
-    loop {
-      let x_103 : f32 = a;
-      let x_104 : f32 = *(x);
-      if ((x_103 == x_104)) {
-        let x_108 : f32 = a;
-        x_93 = true;
-        x_94 = x_108;
-        break;
-      }
-      let x_109 : f32 = a;
-      a = (x_109 + 1.0);
-
-      continuing {
-        let x_111 : f32 = a;
-        let x_112 : f32 = *(x);
-        if ((x_111 < x_112)) {
-        } else {
-          break;
-        }
-      }
-    }
-    let x_114 : bool = x_93;
-    if (x_114) {
-      break;
-    }
-    x_93 = true;
-    x_94 = 0.0;
-    break;
-  }
-  let x_116 : f32 = x_94;
-  return x_116;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9cab884..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_11, thread float4* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int q = 0;
-  int i = 0;
-  int c = 0;
-  q = 0;
-  float const x_55 = (*(tint_symbol_3)).x;
-  i = (int(x_55) % 3);
-  c = 0;
-  while (true) {
-    int const x_14 = c;
-    if ((x_14 < 3)) {
-    } else {
-      break;
-    }
-    int const x_15 = c;
-    (*(tint_symbol_4)).arr[x_15] = 0.0f;
-    int const x_16 = c;
-    (*(tint_symbol_5)).arr[x_16] = 0.0f;
-    float const x_65 = x_11.injectionSwitch.x;
-    int const x_18 = q;
-    switch(as_type<int>((as_type<uint>(int(x_65)) + as_type<uint>(x_18)))) {
-      case 51: {
-        while (true) {
-          if (true) {
-          } else {
-            break;
-          }
-        }
-        int const x_20 = c;
-        (*(tint_symbol_4)).arr[x_20] = 1.0f;
-        /* fallthrough */
-      }
-      case 61: {
-        (*(tint_symbol_5)).arr[0] = 1.0f;
-        int const x_21 = c;
-        (*(tint_symbol_5)).arr[x_21] = 1.0f;
-        break;
-      }
-      case 0: {
-        q = 61;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_22 = c;
-      c = as_type<int>((as_type<uint>(x_22) + as_type<uint>(1)));
-    }
-  }
-  int const x_24 = i;
-  float const x_79 = (*(tint_symbol_5)).arr[x_24];
-  int const x_25 = i;
-  float const x_81 = (*(tint_symbol_4)).arr[x_25];
-  int const x_26 = i;
-  float const x_83 = (*(tint_symbol_4)).arr[x_26];
-  *(tint_symbol_6) = float4(x_79, x_81, x_83, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_11, tint_symbol_7, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_11 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread tint_array_wrapper tint_symbol_12 = {};
-  thread tint_array_wrapper tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_11, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3e8979c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,185 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 107
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %array0 "array0"
-               OpName %array1 "array1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %q "q"
-               OpName %i "i"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Private__arr_float_uint_3 = OpTypePointer Private %_arr_float_uint_3
-         %15 = OpConstantNull %_arr_float_uint_3
-     %array0 = OpVariable %_ptr_Private__arr_float_uint_3 Private %15
-     %array1 = OpVariable %_ptr_Private__arr_float_uint_3 Private %15
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-     %int_61 = OpConstant %int 61
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %94 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %q = OpVariable %_ptr_Function_int Function %29
-          %i = OpVariable %_ptr_Function_int Function %29
-          %c = OpVariable %_ptr_Function_int Function %29
-               OpStore %q %int_0
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %36 = OpLoad %float %35
-         %37 = OpConvertFToS %int %36
-         %39 = OpSMod %int %37 %int_3
-               OpStore %i %39
-               OpStore %c %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %c
-         %45 = OpSLessThan %bool %44 %int_3
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %49
-         %48 = OpLabel
-               OpBranch %47
-         %49 = OpLabel
-               OpBranch %41
-         %47 = OpLabel
-         %50 = OpLoad %int %c
-         %51 = OpAccessChain %_ptr_Private_float %array0 %50
-               OpStore %51 %float_0
-         %53 = OpLoad %int %c
-         %54 = OpAccessChain %_ptr_Private_float %array1 %53
-               OpStore %54 %float_0
-         %56 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_0
-         %57 = OpLoad %float %56
-         %58 = OpLoad %int %q
-         %60 = OpConvertFToS %int %57
-         %61 = OpIAdd %int %60 %58
-               OpSelectionMerge %59 None
-               OpSwitch %61 %62 51 %63 61 %64 0 %65
-         %63 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-               OpSelectionMerge %71 None
-               OpBranchConditional %true %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %67
-         %71 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %66
-         %67 = OpLabel
-         %74 = OpLoad %int %c
-         %75 = OpAccessChain %_ptr_Private_float %array0 %74
-               OpStore %75 %float_1
-               OpBranch %64
-         %64 = OpLabel
-         %77 = OpAccessChain %_ptr_Private_float %array1 %int_0
-               OpStore %77 %float_1
-         %78 = OpLoad %int %c
-         %79 = OpAccessChain %_ptr_Private_float %array1 %78
-               OpStore %79 %float_1
-               OpBranch %59
-         %65 = OpLabel
-               OpStore %q %int_61
-               OpBranch %59
-         %62 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-         %81 = OpLoad %int %c
-         %83 = OpIAdd %int %81 %int_1
-               OpStore %c %83
-               OpBranch %40
-         %41 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpAccessChain %_ptr_Private_float %array1 %84
-         %86 = OpLoad %float %85
-         %87 = OpLoad %int %i
-         %88 = OpAccessChain %_ptr_Private_float %array0 %87
-         %89 = OpLoad %float %88
-         %90 = OpLoad %int %i
-         %91 = OpAccessChain %_ptr_Private_float %array0 %90
-         %92 = OpLoad %float %91
-         %93 = OpCompositeConstruct %v4float %86 %89 %92 %float_1
-               OpStore %x_GLF_color %93
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %94
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %98 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %99 = OpFunctionCall %void %main_1
-        %100 = OpLoad %v4float %x_GLF_color
-        %101 = OpCompositeConstruct %main_out %100
-               OpReturnValue %101
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %103 = OpLabel
-        %105 = OpLoad %v4float %gl_FragCoord_param_1
-        %104 = OpFunctionCall %main_out %main_inner %105
-        %106 = OpCompositeExtract %v4float %104 0
-               OpStore %x_GLF_color_1_1 %106
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f6836ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,85 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> array0 : array<f32, 3>;
-
-var<private> array1 : array<f32, 3>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var q : i32;
-  var i : i32;
-  var c : i32;
-  q = 0;
-  let x_55 : f32 = gl_FragCoord.x;
-  i = (i32(x_55) % 3);
-  c = 0;
-  loop {
-    let x_14 : i32 = c;
-    if ((x_14 < 3)) {
-    } else {
-      break;
-    }
-    let x_15 : i32 = c;
-    array0[x_15] = 0.0;
-    let x_16 : i32 = c;
-    array1[x_16] = 0.0;
-    let x_65 : f32 = x_11.injectionSwitch.x;
-    let x_18 : i32 = q;
-    switch((i32(x_65) + x_18)) {
-      case 51: {
-        loop {
-          if (true) {
-          } else {
-            break;
-          }
-        }
-        let x_20 : i32 = c;
-        array0[x_20] = 1.0;
-        fallthrough;
-      }
-      case 61: {
-        array1[0] = 1.0;
-        let x_21 : i32 = c;
-        array1[x_21] = 1.0;
-      }
-      case 0: {
-        q = 61;
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_22 : i32 = c;
-      c = (x_22 + 1);
-    }
-  }
-  let x_24 : i32 = i;
-  let x_79 : f32 = array1[x_24];
-  let x_25 : i32 = i;
-  let x_81 : f32 = array0[x_25];
-  let x_26 : i32 = i;
-  let x_83 : f32 = array0[x_26];
-  x_GLF_color = vec4<f32>(x_79, x_81, x_83, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9cab884..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_11, thread float4* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int q = 0;
-  int i = 0;
-  int c = 0;
-  q = 0;
-  float const x_55 = (*(tint_symbol_3)).x;
-  i = (int(x_55) % 3);
-  c = 0;
-  while (true) {
-    int const x_14 = c;
-    if ((x_14 < 3)) {
-    } else {
-      break;
-    }
-    int const x_15 = c;
-    (*(tint_symbol_4)).arr[x_15] = 0.0f;
-    int const x_16 = c;
-    (*(tint_symbol_5)).arr[x_16] = 0.0f;
-    float const x_65 = x_11.injectionSwitch.x;
-    int const x_18 = q;
-    switch(as_type<int>((as_type<uint>(int(x_65)) + as_type<uint>(x_18)))) {
-      case 51: {
-        while (true) {
-          if (true) {
-          } else {
-            break;
-          }
-        }
-        int const x_20 = c;
-        (*(tint_symbol_4)).arr[x_20] = 1.0f;
-        /* fallthrough */
-      }
-      case 61: {
-        (*(tint_symbol_5)).arr[0] = 1.0f;
-        int const x_21 = c;
-        (*(tint_symbol_5)).arr[x_21] = 1.0f;
-        break;
-      }
-      case 0: {
-        q = 61;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_22 = c;
-      c = as_type<int>((as_type<uint>(x_22) + as_type<uint>(1)));
-    }
-  }
-  int const x_24 = i;
-  float const x_79 = (*(tint_symbol_5)).arr[x_24];
-  int const x_25 = i;
-  float const x_81 = (*(tint_symbol_4)).arr[x_25];
-  int const x_26 = i;
-  float const x_83 = (*(tint_symbol_4)).arr[x_26];
-  *(tint_symbol_6) = float4(x_79, x_81, x_83, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_11, tint_symbol_7, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_11 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread tint_array_wrapper tint_symbol_12 = {};
-  thread tint_array_wrapper tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_11, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3e8979c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,185 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 107
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %array0 "array0"
-               OpName %array1 "array1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %q "q"
-               OpName %i "i"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Private__arr_float_uint_3 = OpTypePointer Private %_arr_float_uint_3
-         %15 = OpConstantNull %_arr_float_uint_3
-     %array0 = OpVariable %_ptr_Private__arr_float_uint_3 Private %15
-     %array1 = OpVariable %_ptr_Private__arr_float_uint_3 Private %15
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-     %int_61 = OpConstant %int 61
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %94 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %q = OpVariable %_ptr_Function_int Function %29
-          %i = OpVariable %_ptr_Function_int Function %29
-          %c = OpVariable %_ptr_Function_int Function %29
-               OpStore %q %int_0
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %36 = OpLoad %float %35
-         %37 = OpConvertFToS %int %36
-         %39 = OpSMod %int %37 %int_3
-               OpStore %i %39
-               OpStore %c %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %c
-         %45 = OpSLessThan %bool %44 %int_3
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %49
-         %48 = OpLabel
-               OpBranch %47
-         %49 = OpLabel
-               OpBranch %41
-         %47 = OpLabel
-         %50 = OpLoad %int %c
-         %51 = OpAccessChain %_ptr_Private_float %array0 %50
-               OpStore %51 %float_0
-         %53 = OpLoad %int %c
-         %54 = OpAccessChain %_ptr_Private_float %array1 %53
-               OpStore %54 %float_0
-         %56 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_0
-         %57 = OpLoad %float %56
-         %58 = OpLoad %int %q
-         %60 = OpConvertFToS %int %57
-         %61 = OpIAdd %int %60 %58
-               OpSelectionMerge %59 None
-               OpSwitch %61 %62 51 %63 61 %64 0 %65
-         %63 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-               OpSelectionMerge %71 None
-               OpBranchConditional %true %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %67
-         %71 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %66
-         %67 = OpLabel
-         %74 = OpLoad %int %c
-         %75 = OpAccessChain %_ptr_Private_float %array0 %74
-               OpStore %75 %float_1
-               OpBranch %64
-         %64 = OpLabel
-         %77 = OpAccessChain %_ptr_Private_float %array1 %int_0
-               OpStore %77 %float_1
-         %78 = OpLoad %int %c
-         %79 = OpAccessChain %_ptr_Private_float %array1 %78
-               OpStore %79 %float_1
-               OpBranch %59
-         %65 = OpLabel
-               OpStore %q %int_61
-               OpBranch %59
-         %62 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-         %81 = OpLoad %int %c
-         %83 = OpIAdd %int %81 %int_1
-               OpStore %c %83
-               OpBranch %40
-         %41 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpAccessChain %_ptr_Private_float %array1 %84
-         %86 = OpLoad %float %85
-         %87 = OpLoad %int %i
-         %88 = OpAccessChain %_ptr_Private_float %array0 %87
-         %89 = OpLoad %float %88
-         %90 = OpLoad %int %i
-         %91 = OpAccessChain %_ptr_Private_float %array0 %90
-         %92 = OpLoad %float %91
-         %93 = OpCompositeConstruct %v4float %86 %89 %92 %float_1
-               OpStore %x_GLF_color %93
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %94
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %98 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %99 = OpFunctionCall %void %main_1
-        %100 = OpLoad %v4float %x_GLF_color
-        %101 = OpCompositeConstruct %main_out %100
-               OpReturnValue %101
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %103 = OpLabel
-        %105 = OpLoad %v4float %gl_FragCoord_param_1
-        %104 = OpFunctionCall %main_out %main_inner %105
-        %106 = OpCompositeExtract %v4float %104 0
-               OpStore %x_GLF_color_1_1 %106
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f6836ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,85 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> array0 : array<f32, 3>;
-
-var<private> array1 : array<f32, 3>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var q : i32;
-  var i : i32;
-  var c : i32;
-  q = 0;
-  let x_55 : f32 = gl_FragCoord.x;
-  i = (i32(x_55) % 3);
-  c = 0;
-  loop {
-    let x_14 : i32 = c;
-    if ((x_14 < 3)) {
-    } else {
-      break;
-    }
-    let x_15 : i32 = c;
-    array0[x_15] = 0.0;
-    let x_16 : i32 = c;
-    array1[x_16] = 0.0;
-    let x_65 : f32 = x_11.injectionSwitch.x;
-    let x_18 : i32 = q;
-    switch((i32(x_65) + x_18)) {
-      case 51: {
-        loop {
-          if (true) {
-          } else {
-            break;
-          }
-        }
-        let x_20 : i32 = c;
-        array0[x_20] = 1.0;
-        fallthrough;
-      }
-      case 61: {
-        array1[0] = 1.0;
-        let x_21 : i32 = c;
-        array1[x_21] = 1.0;
-      }
-      case 0: {
-        q = 61;
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_22 : i32 = c;
-      c = (x_22 + 1);
-    }
-  }
-  let x_24 : i32 = i;
-  let x_79 : f32 = array1[x_24];
-  let x_25 : i32 = i;
-  let x_81 : f32 = array0[x_25];
-  let x_26 : i32 = i;
-  let x_83 : f32 = array0[x_26];
-  x_GLF_color = vec4<f32>(x_79, x_81, x_83, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0287889..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[3];
-};
-cbuffer cbuffer_x_12 : register(b2, space0) {
-  uint4 x_12[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int r = 0;
-  x_GLF_global_loop_count = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  f = x_42;
-  const int x_44 = asint(x_10[1].x);
-  r = x_44;
-  while (true) {
-    const int x_49 = r;
-    const int x_51 = asint(x_10[2].x);
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    const float2 x_57 = asfloat(x_12[0].xy);
-    f = (f + ddx(x_57).y);
-    {
-      r = (r + 1);
-    }
-  }
-  while (true) {
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_74 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    f = (f + x_74);
-  }
-  const float x_77 = f;
-  const float x_79 = asfloat(x_7[1].x);
-  if ((x_77 == x_79)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_85 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_88 = asint(x_10[1].x);
-    const int x_91 = asint(x_10[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_94 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_85), float(x_88), float(x_91), float(x_94));
-  } else {
-    const int x_98 = asint(x_10[1].x);
-    const float x_99 = float(x_98);
-    x_GLF_color = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.msl
deleted file mode 100644
index a409595..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,101 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_10, constant buf2& x_12, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  int r = 0;
-  *(tint_symbol_3) = 0;
-  float const x_42 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  f = x_42;
-  int const x_44 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  r = x_44;
-  while (true) {
-    int const x_49 = r;
-    int const x_51 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    int const x_54 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_54) + as_type<uint>(1)));
-    float2 const x_57 = x_12.injectionSwitch;
-    float const x_60 = f;
-    f = (x_60 + dfdx(x_57).y);
-    {
-      int const x_62 = r;
-      r = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  while (true) {
-    int const x_68 = *(tint_symbol_3);
-    if ((x_68 < 100)) {
-    } else {
-      break;
-    }
-    int const x_71 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-    float const x_74 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_75 = f;
-    f = (x_75 + x_74);
-  }
-  float const x_77 = f;
-  float const x_79 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_77 == x_79)) {
-    int const x_85 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_88 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_91 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_94 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_85), float(x_88), float(x_91), float(x_94));
-  } else {
-    int const x_98 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_99 = float(x_98);
-    *(tint_symbol_4) = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_10, constant buf2& x_12, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_10, x_12, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]], constant buf2& x_12 [[buffer(2)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, x_12, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ff79210..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,205 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 120
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "injectionSwitch"
-               OpName %x_12 "x_12"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %r "r"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 2
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_12 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %33 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %int_100 = OpConstant %int 100
-   %main_out = OpTypeStruct %v4float
-        %109 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %33
-          %r = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-         %39 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %40 = OpLoad %float %39
-               OpStore %f %40
-         %43 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %44 = OpLoad %int %43
-               OpStore %r %44
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %r
-         %51 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %52 = OpLoad %int %51
-         %53 = OpSLessThan %bool %49 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %46
-         %55 = OpLabel
-         %58 = OpLoad %int %x_GLF_global_loop_count
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %x_GLF_global_loop_count %59
-         %61 = OpAccessChain %_ptr_Uniform_v2float %x_12 %uint_0
-         %62 = OpLoad %v2float %61
-         %63 = OpLoad %float %f
-         %64 = OpDPdx %v2float %62
-         %65 = OpCompositeExtract %float %64 1
-         %66 = OpFAdd %float %63 %65
-               OpStore %f %66
-               OpBranch %47
-         %47 = OpLabel
-         %67 = OpLoad %int %r
-         %68 = OpIAdd %int %67 %int_1
-               OpStore %r %68
-               OpBranch %45
-         %46 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %x_GLF_global_loop_count
-         %75 = OpSLessThan %bool %73 %int_100
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-               OpBranch %76
-         %78 = OpLabel
-               OpBranch %70
-         %76 = OpLabel
-         %79 = OpLoad %int %x_GLF_global_loop_count
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %x_GLF_global_loop_count %80
-         %81 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %82 = OpLoad %float %81
-         %83 = OpLoad %float %f
-         %84 = OpFAdd %float %83 %82
-               OpStore %f %84
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %69
-         %70 = OpLabel
-         %85 = OpLoad %float %f
-         %86 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %87 = OpLoad %float %86
-         %88 = OpFOrdEqual %bool %85 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %94 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %99 = OpLoad %int %98
-        %100 = OpConvertSToF %float %93
-        %101 = OpConvertSToF %float %95
-        %102 = OpConvertSToF %float %97
-        %103 = OpConvertSToF %float %99
-        %104 = OpCompositeConstruct %v4float %100 %101 %102 %103
-               OpStore %x_GLF_color %104
-               OpBranch %89
-         %91 = OpLabel
-        %105 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %106 = OpLoad %int %105
-        %107 = OpConvertSToF %float %106
-        %108 = OpCompositeConstruct %v4float %107 %107 %107 %107
-               OpStore %x_GLF_color %108
-               OpBranch %89
-         %89 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %109
-        %112 = OpLabel
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-        %117 = OpLabel
-        %118 = OpFunctionCall %main_out %main_inner
-        %119 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %119
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d3e05f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[block]]
-struct buf2 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_12 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var r : i32;
-  x_GLF_global_loop_count = 0;
-  let x_42 : f32 = x_7.x_GLF_uniform_float_values[0];
-  f = x_42;
-  let x_44 : i32 = x_10.x_GLF_uniform_int_values[1];
-  r = x_44;
-  loop {
-    let x_49 : i32 = r;
-    let x_51 : i32 = x_10.x_GLF_uniform_int_values[2];
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    let x_54 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_54 + 1);
-    let x_57 : vec2<f32> = x_12.injectionSwitch;
-    let x_60 : f32 = f;
-    f = (x_60 + dpdx(x_57).y);
-
-    continuing {
-      let x_62 : i32 = r;
-      r = (x_62 + 1);
-    }
-  }
-  loop {
-    let x_68 : i32 = x_GLF_global_loop_count;
-    if ((x_68 < 100)) {
-    } else {
-      break;
-    }
-    let x_71 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_71 + 1);
-    let x_74 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_75 : f32 = f;
-    f = (x_75 + x_74);
-  }
-  let x_77 : f32 = f;
-  let x_79 : f32 = x_7.x_GLF_uniform_float_values[1];
-  if ((x_77 == x_79)) {
-    let x_85 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_88 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_91 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_94 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_85), f32(x_88), f32(x_91), f32(x_94));
-  } else {
-    let x_98 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_99 : f32 = f32(x_98);
-    x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0287889..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[3];
-};
-cbuffer cbuffer_x_12 : register(b2, space0) {
-  uint4 x_12[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int r = 0;
-  x_GLF_global_loop_count = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  f = x_42;
-  const int x_44 = asint(x_10[1].x);
-  r = x_44;
-  while (true) {
-    const int x_49 = r;
-    const int x_51 = asint(x_10[2].x);
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    const float2 x_57 = asfloat(x_12[0].xy);
-    f = (f + ddx(x_57).y);
-    {
-      r = (r + 1);
-    }
-  }
-  while (true) {
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_74 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    f = (f + x_74);
-  }
-  const float x_77 = f;
-  const float x_79 = asfloat(x_7[1].x);
-  if ((x_77 == x_79)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_85 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_88 = asint(x_10[1].x);
-    const int x_91 = asint(x_10[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_94 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_85), float(x_88), float(x_91), float(x_94));
-  } else {
-    const int x_98 = asint(x_10[1].x);
-    const float x_99 = float(x_98);
-    x_GLF_color = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.msl
deleted file mode 100644
index a409595..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,101 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_10, constant buf2& x_12, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  int r = 0;
-  *(tint_symbol_3) = 0;
-  float const x_42 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  f = x_42;
-  int const x_44 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  r = x_44;
-  while (true) {
-    int const x_49 = r;
-    int const x_51 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    int const x_54 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_54) + as_type<uint>(1)));
-    float2 const x_57 = x_12.injectionSwitch;
-    float const x_60 = f;
-    f = (x_60 + dfdx(x_57).y);
-    {
-      int const x_62 = r;
-      r = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  while (true) {
-    int const x_68 = *(tint_symbol_3);
-    if ((x_68 < 100)) {
-    } else {
-      break;
-    }
-    int const x_71 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-    float const x_74 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_75 = f;
-    f = (x_75 + x_74);
-  }
-  float const x_77 = f;
-  float const x_79 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_77 == x_79)) {
-    int const x_85 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_88 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_91 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_94 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_85), float(x_88), float(x_91), float(x_94));
-  } else {
-    int const x_98 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_99 = float(x_98);
-    *(tint_symbol_4) = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_10, constant buf2& x_12, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_10, x_12, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]], constant buf2& x_12 [[buffer(2)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, x_12, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ff79210..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,205 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 120
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "injectionSwitch"
-               OpName %x_12 "x_12"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %r "r"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 2
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_12 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %33 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %int_100 = OpConstant %int 100
-   %main_out = OpTypeStruct %v4float
-        %109 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %33
-          %r = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-         %39 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %40 = OpLoad %float %39
-               OpStore %f %40
-         %43 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %44 = OpLoad %int %43
-               OpStore %r %44
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %r
-         %51 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %52 = OpLoad %int %51
-         %53 = OpSLessThan %bool %49 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %46
-         %55 = OpLabel
-         %58 = OpLoad %int %x_GLF_global_loop_count
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %x_GLF_global_loop_count %59
-         %61 = OpAccessChain %_ptr_Uniform_v2float %x_12 %uint_0
-         %62 = OpLoad %v2float %61
-         %63 = OpLoad %float %f
-         %64 = OpDPdx %v2float %62
-         %65 = OpCompositeExtract %float %64 1
-         %66 = OpFAdd %float %63 %65
-               OpStore %f %66
-               OpBranch %47
-         %47 = OpLabel
-         %67 = OpLoad %int %r
-         %68 = OpIAdd %int %67 %int_1
-               OpStore %r %68
-               OpBranch %45
-         %46 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %x_GLF_global_loop_count
-         %75 = OpSLessThan %bool %73 %int_100
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-               OpBranch %76
-         %78 = OpLabel
-               OpBranch %70
-         %76 = OpLabel
-         %79 = OpLoad %int %x_GLF_global_loop_count
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %x_GLF_global_loop_count %80
-         %81 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %82 = OpLoad %float %81
-         %83 = OpLoad %float %f
-         %84 = OpFAdd %float %83 %82
-               OpStore %f %84
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %69
-         %70 = OpLabel
-         %85 = OpLoad %float %f
-         %86 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %87 = OpLoad %float %86
-         %88 = OpFOrdEqual %bool %85 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %94 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %99 = OpLoad %int %98
-        %100 = OpConvertSToF %float %93
-        %101 = OpConvertSToF %float %95
-        %102 = OpConvertSToF %float %97
-        %103 = OpConvertSToF %float %99
-        %104 = OpCompositeConstruct %v4float %100 %101 %102 %103
-               OpStore %x_GLF_color %104
-               OpBranch %89
-         %91 = OpLabel
-        %105 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %106 = OpLoad %int %105
-        %107 = OpConvertSToF %float %106
-        %108 = OpCompositeConstruct %v4float %107 %107 %107 %107
-               OpStore %x_GLF_color %108
-               OpBranch %89
-         %89 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %109
-        %112 = OpLabel
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-        %117 = OpLabel
-        %118 = OpFunctionCall %main_out %main_inner
-        %119 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %119
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d3e05f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[block]]
-struct buf2 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_12 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var r : i32;
-  x_GLF_global_loop_count = 0;
-  let x_42 : f32 = x_7.x_GLF_uniform_float_values[0];
-  f = x_42;
-  let x_44 : i32 = x_10.x_GLF_uniform_int_values[1];
-  r = x_44;
-  loop {
-    let x_49 : i32 = r;
-    let x_51 : i32 = x_10.x_GLF_uniform_int_values[2];
-    if ((x_49 < x_51)) {
-    } else {
-      break;
-    }
-    let x_54 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_54 + 1);
-    let x_57 : vec2<f32> = x_12.injectionSwitch;
-    let x_60 : f32 = f;
-    f = (x_60 + dpdx(x_57).y);
-
-    continuing {
-      let x_62 : i32 = r;
-      r = (x_62 + 1);
-    }
-  }
-  loop {
-    let x_68 : i32 = x_GLF_global_loop_count;
-    if ((x_68 < 100)) {
-    } else {
-      break;
-    }
-    let x_71 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_71 + 1);
-    let x_74 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_75 : f32 = f;
-    f = (x_75 + x_74);
-  }
-  let x_77 : f32 = f;
-  let x_79 : f32 = x_7.x_GLF_uniform_float_values[1];
-  if ((x_77 == x_79)) {
-    let x_85 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_88 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_91 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_94 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_85), f32(x_88), f32(x_91), f32(x_94));
-  } else {
-    let x_98 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_99 : f32 = f32(x_98);
-    x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d77706d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int i = 0;
-  float a = 0.0f;
-  const float x_37 = asfloat(x_6[1].x);
-  f = x_37;
-  const int x_39 = asint(x_9[1].x);
-  i = x_39;
-  while (true) {
-    const int x_44 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_9[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_44 > x_46)) {
-    } else {
-      break;
-    }
-    a = (1.0f - max(1.0f, float(i)));
-    f = min(max(a, 0.0f), 0.0f);
-    {
-      i = (i - 1);
-    }
-  }
-  const float x_58 = f;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_60 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_58 == x_60)) {
-    const int x_66 = asint(x_9[2].x);
-    const float x_68 = f;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_70 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_66), x_68, float(x_70), 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.msl
deleted file mode 100644
index f4adc34..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  int i = 0;
-  float a = 0.0f;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  f = x_37;
-  int const x_39 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_39;
-  while (true) {
-    int const x_44 = i;
-    int const x_46 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_44 > x_46)) {
-    } else {
-      break;
-    }
-    int const x_49 = i;
-    a = (1.0f - fmax(1.0f, float(x_49)));
-    float const x_53 = a;
-    f = fmin(fmax(x_53, 0.0f), 0.0f);
-    {
-      int const x_56 = i;
-      i = as_type<int>((as_type<uint>(x_56) - as_type<uint>(1)));
-    }
-  }
-  float const x_58 = f;
-  float const x_60 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_58 == x_60)) {
-    int const x_66 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_68 = f;
-    int const x_70 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_66), x_68, float(x_70), 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ef5d31b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,157 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 92
-; Schema: 0
-               OpCapability Shader
-         %55 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-         %80 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %81 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %29
-          %a = OpVariable %_ptr_Function_float Function %26
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %35 = OpLoad %float %34
-               OpStore %f %35
-         %37 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %38 = OpLoad %int %37
-               OpStore %i %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpSGreaterThan %bool %43 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %40
-         %49 = OpLabel
-         %52 = OpLoad %int %i
-         %56 = OpConvertSToF %float %52
-         %54 = OpExtInst %float %55 NMax %float_1 %56
-         %57 = OpFSub %float %float_1 %54
-               OpStore %a %57
-         %58 = OpLoad %float %a
-         %60 = OpExtInst %float %55 NMax %58 %float_0
-         %59 = OpExtInst %float %55 NMin %60 %float_0
-               OpStore %f %59
-               OpBranch %41
-         %41 = OpLabel
-         %62 = OpLoad %int %i
-         %63 = OpISub %int %62 %int_1
-               OpStore %i %63
-               OpBranch %39
-         %40 = OpLabel
-         %64 = OpLoad %float %f
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpFOrdEqual %bool %64 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %73 = OpLoad %int %72
-         %74 = OpLoad %float %f
-         %75 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %73
-         %78 = OpConvertSToF %float %76
-         %79 = OpCompositeConstruct %v4float %77 %74 %78 %float_1
-               OpStore %x_GLF_color %79
-               OpBranch %68
-         %70 = OpLabel
-               OpStore %x_GLF_color %80
-               OpBranch %68
-         %68 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %81
-         %84 = OpLabel
-         %85 = OpFunctionCall %void %main_1
-         %86 = OpLoad %v4float %x_GLF_color
-         %87 = OpCompositeConstruct %main_out %86
-               OpReturnValue %87
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %89 = OpLabel
-         %90 = OpFunctionCall %main_out %main_inner
-         %91 = OpCompositeExtract %v4float %90 0
-               OpStore %x_GLF_color_1_1 %91
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 973feb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,68 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  var a : f32;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[1];
-  f = x_37;
-  let x_39 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_39;
-  loop {
-    let x_44 : i32 = i;
-    let x_46 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_44 > x_46)) {
-    } else {
-      break;
-    }
-    let x_49 : i32 = i;
-    a = (1.0 - max(1.0, f32(x_49)));
-    let x_53 : f32 = a;
-    f = min(max(x_53, 0.0), 0.0);
-
-    continuing {
-      let x_56 : i32 = i;
-      i = (x_56 - 1);
-    }
-  }
-  let x_58 : f32 = f;
-  let x_60 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_58 == x_60)) {
-    let x_66 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_68 : f32 = f;
-    let x_70 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_66), x_68, f32(x_70), 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d77706d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int i = 0;
-  float a = 0.0f;
-  const float x_37 = asfloat(x_6[1].x);
-  f = x_37;
-  const int x_39 = asint(x_9[1].x);
-  i = x_39;
-  while (true) {
-    const int x_44 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_9[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_44 > x_46)) {
-    } else {
-      break;
-    }
-    a = (1.0f - max(1.0f, float(i)));
-    f = min(max(a, 0.0f), 0.0f);
-    {
-      i = (i - 1);
-    }
-  }
-  const float x_58 = f;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_60 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_58 == x_60)) {
-    const int x_66 = asint(x_9[2].x);
-    const float x_68 = f;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_70 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_66), x_68, float(x_70), 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.msl
deleted file mode 100644
index f4adc34..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  int i = 0;
-  float a = 0.0f;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  f = x_37;
-  int const x_39 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_39;
-  while (true) {
-    int const x_44 = i;
-    int const x_46 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_44 > x_46)) {
-    } else {
-      break;
-    }
-    int const x_49 = i;
-    a = (1.0f - fmax(1.0f, float(x_49)));
-    float const x_53 = a;
-    f = fmin(fmax(x_53, 0.0f), 0.0f);
-    {
-      int const x_56 = i;
-      i = as_type<int>((as_type<uint>(x_56) - as_type<uint>(1)));
-    }
-  }
-  float const x_58 = f;
-  float const x_60 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_58 == x_60)) {
-    int const x_66 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_68 = f;
-    int const x_70 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_66), x_68, float(x_70), 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ef5d31b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,157 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 92
-; Schema: 0
-               OpCapability Shader
-         %55 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-         %80 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %81 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %29
-          %a = OpVariable %_ptr_Function_float Function %26
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %35 = OpLoad %float %34
-               OpStore %f %35
-         %37 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %38 = OpLoad %int %37
-               OpStore %i %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpSGreaterThan %bool %43 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %40
-         %49 = OpLabel
-         %52 = OpLoad %int %i
-         %56 = OpConvertSToF %float %52
-         %54 = OpExtInst %float %55 NMax %float_1 %56
-         %57 = OpFSub %float %float_1 %54
-               OpStore %a %57
-         %58 = OpLoad %float %a
-         %60 = OpExtInst %float %55 NMax %58 %float_0
-         %59 = OpExtInst %float %55 NMin %60 %float_0
-               OpStore %f %59
-               OpBranch %41
-         %41 = OpLabel
-         %62 = OpLoad %int %i
-         %63 = OpISub %int %62 %int_1
-               OpStore %i %63
-               OpBranch %39
-         %40 = OpLabel
-         %64 = OpLoad %float %f
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpFOrdEqual %bool %64 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %73 = OpLoad %int %72
-         %74 = OpLoad %float %f
-         %75 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %73
-         %78 = OpConvertSToF %float %76
-         %79 = OpCompositeConstruct %v4float %77 %74 %78 %float_1
-               OpStore %x_GLF_color %79
-               OpBranch %68
-         %70 = OpLabel
-               OpStore %x_GLF_color %80
-               OpBranch %68
-         %68 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %81
-         %84 = OpLabel
-         %85 = OpFunctionCall %void %main_1
-         %86 = OpLoad %v4float %x_GLF_color
-         %87 = OpCompositeConstruct %main_out %86
-               OpReturnValue %87
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %89 = OpLabel
-         %90 = OpFunctionCall %main_out %main_inner
-         %91 = OpCompositeExtract %v4float %90 0
-               OpStore %x_GLF_color_1_1 %91
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 973feb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-descending-loop-min-max-always-zero/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,68 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  var a : f32;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[1];
-  f = x_37;
-  let x_39 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_39;
-  loop {
-    let x_44 : i32 = i;
-    let x_46 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_44 > x_46)) {
-    } else {
-      break;
-    }
-    let x_49 : i32 = i;
-    a = (1.0 - max(1.0, f32(x_49)));
-    let x_53 : f32 = a;
-    f = min(max(x_53, 0.0), 0.0);
-
-    continuing {
-      let x_56 : i32 = i;
-      i = (x_56 - 1);
-    }
-  }
-  let x_58 : f32 = f;
-  let x_60 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_58 == x_60)) {
-    let x_66 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_68 : f32 = f;
-    let x_70 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_66), x_68, f32(x_70), 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6003145..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  m = (transpose(float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f))) * (1.0f / 2.0f));
-  const float2x2 x_33 = m;
-  if ((all((x_33[0u] == float2x2(float2(0.5f, 1.5f), float2(1.0f, 2.0f))[0u])) & all((x_33[1u] == float2x2(float2(0.5f, 1.5f), float2(1.0f, 2.0f))[1u])))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5fdcb08..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2x2 m = float2x2(0.0f);
-  m = (transpose(float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f))) * (1.0f / 2.0f));
-  float2x2 const x_33 = m;
-  if ((all((x_33[0u] == float2x2(float2(0.5f, 1.5f), float2(1.0f, 2.0f))[0u])) & all((x_33[1u] == float2x2(float2(0.5f, 1.5f), float2(1.0f, 2.0f))[1u])))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4136d2d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %16 = OpConstantNull %mat2v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-         %20 = OpConstantComposite %v2float %float_1 %float_2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v2float %float_3 %float_4
-         %24 = OpConstantComposite %mat2v2float %20 %23
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-  %float_0_5 = OpConstant %float 0.5
-  %float_1_5 = OpConstant %float 1.5
-         %35 = OpConstantComposite %v2float %float_0_5 %float_1_5
-         %36 = OpConstantComposite %mat2v2float %35 %20
-     %v2bool = OpTypeVector %bool 2
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %50 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %51 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %52 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %m = OpVariable %_ptr_Function_mat2v2float Function %16
-         %17 = OpTranspose %mat2v2float %24
-         %25 = OpFDiv %float %float_1 %float_2
-         %26 = OpMatrixTimesScalar %mat2v2float %17 %25
-               OpStore %m %26
-         %27 = OpLoad %mat2v2float %m
-         %32 = OpCompositeExtract %v2float %27 0
-         %37 = OpCompositeExtract %v2float %36 0
-         %38 = OpFOrdEqual %v2bool %32 %37
-         %28 = OpAll %bool %38
-         %42 = OpCompositeExtract %v2float %27 1
-         %43 = OpCompositeExtract %v2float %36 1
-         %44 = OpFOrdEqual %v2bool %42 %43
-         %40 = OpAll %bool %44
-         %45 = OpLogicalAnd %bool %28 %40
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpStore %x_GLF_color %50
-               OpBranch %46
-         %48 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %46
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %52
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-         %57 = OpLoad %v4float %x_GLF_color
-         %58 = OpCompositeConstruct %main_out %57
-               OpReturnValue %58
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %60 = OpLabel
-         %61 = OpFunctionCall %main_out %main_inner
-         %62 = OpCompositeExtract %v4float %61 0
-               OpStore %x_GLF_color_1_1 %62
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1b73939..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat2x2<f32>;
-  m = (transpose(mat2x2<f32>(vec2<f32>(1.0, 2.0), vec2<f32>(3.0, 4.0))) * (1.0 / 2.0));
-  let x_33 : mat2x2<f32> = m;
-  if ((all((x_33[0u] == mat2x2<f32>(vec2<f32>(0.5, 1.5), vec2<f32>(1.0, 2.0))[0u])) & all((x_33[1u] == mat2x2<f32>(vec2<f32>(0.5, 1.5), vec2<f32>(1.0, 2.0))[1u])))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 605374b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  m = (transpose(float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f))) * (1.0f / 2.0f));
-  const float2x2 x_33 = m;
-  bool tint_tmp = all((x_33[0u] == float2x2(float2(0.5f, 1.5f), float2(1.0f, 2.0f))[0u]));
-  if (tint_tmp) {
-    tint_tmp = all((x_33[1u] == float2x2(float2(0.5f, 1.5f), float2(1.0f, 2.0f))[1u]));
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9322446..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2x2 m = float2x2(0.0f);
-  m = (transpose(float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f))) * (1.0f / 2.0f));
-  float2x2 const x_33 = m;
-  if ((all((x_33[0u] == float2x2(float2(0.5f, 1.5f), float2(1.0f, 2.0f))[0u])) && all((x_33[1u] == float2x2(float2(0.5f, 1.5f), float2(1.0f, 2.0f))[1u])))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index cb5859b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,100 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %16 = OpConstantNull %mat2v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-         %20 = OpConstantComposite %v2float %float_1 %float_2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %23 = OpConstantComposite %v2float %float_3 %float_4
-         %24 = OpConstantComposite %mat2v2float %20 %23
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-  %float_0_5 = OpConstant %float 0.5
-  %float_1_5 = OpConstant %float 1.5
-         %35 = OpConstantComposite %v2float %float_0_5 %float_1_5
-         %36 = OpConstantComposite %mat2v2float %35 %20
-     %v2bool = OpTypeVector %bool 2
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %53 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %54 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %m = OpVariable %_ptr_Function_mat2v2float Function %16
-         %17 = OpTranspose %mat2v2float %24
-         %25 = OpFDiv %float %float_1 %float_2
-         %26 = OpMatrixTimesScalar %mat2v2float %17 %25
-               OpStore %m %26
-         %27 = OpLoad %mat2v2float %m
-         %32 = OpCompositeExtract %v2float %27 0
-         %37 = OpCompositeExtract %v2float %36 0
-         %38 = OpFOrdEqual %v2bool %32 %37
-         %28 = OpAll %bool %38
-               OpSelectionMerge %40 None
-               OpBranchConditional %28 %41 %40
-         %41 = OpLabel
-         %44 = OpCompositeExtract %v2float %27 1
-         %45 = OpCompositeExtract %v2float %36 1
-         %46 = OpFOrdEqual %v2bool %44 %45
-         %42 = OpAll %bool %46
-               OpBranch %40
-         %40 = OpLabel
-         %47 = OpPhi %bool %28 %11 %42 %41
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-               OpStore %x_GLF_color %52
-               OpBranch %48
-         %50 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %48
-         %48 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %54
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %62 = OpLabel
-         %63 = OpFunctionCall %main_out %main_inner
-         %64 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index af5a1c1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-divide-matrix-transpose-by-constant/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat2x2<f32>;
-  m = (transpose(mat2x2<f32>(vec2<f32>(1.0, 2.0), vec2<f32>(3.0, 4.0))) * (1.0 / 2.0));
-  let x_33 : mat2x2<f32> = m;
-  if ((all((x_33[0u] == mat2x2<f32>(vec2<f32>(0.5, 1.5), vec2<f32>(1.0, 2.0))[0u])) && all((x_33[1u] == mat2x2<f32>(vec2<f32>(0.5, 1.5), vec2<f32>(1.0, 2.0))[1u])))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index dcad269..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  i = x_53;
-  while (true) {
-    i = (i + 1);
-    if (true) {
-      if (true) {
-        const int x_65 = asint(x_7[2].x);
-        return x_65;
-      }
-    }
-    {
-      const int x_66 = i;
-      const int x_68 = asint(x_7[1].x);
-      if ((x_66 < x_68)) {
-      } else {
-        break;
-      }
-    }
-  }
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_71 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  return x_71;
-}
-
-void main_1() {
-  const int x_27 = func_();
-  const int x_29 = asint(x_7[2].x);
-  if ((x_27 == x_29)) {
-    const int x_35 = asint(x_7[2].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_41 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_44 = asint(x_7[2].x);
-    x_GLF_color = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_49 = float(x_48);
-    x_GLF_color = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5b3f8d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_(constant buf0& x_7) {
-  int i = 0;
-  int const x_53 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  i = x_53;
-  while (true) {
-    int const x_58 = i;
-    i = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-    if (true) {
-      if (true) {
-        int const x_65 = x_7.x_GLF_uniform_int_values.arr[2].el;
-        return x_65;
-      }
-    }
-    {
-      int const x_66 = i;
-      int const x_68 = x_7.x_GLF_uniform_int_values.arr[1].el;
-      if ((x_66 < x_68)) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_71 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  return x_71;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int const x_27 = func_(x_7);
-  int const x_29 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_27 == x_29)) {
-    int const x_35 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_38 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_41 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_44 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    int const x_48 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_49 = float(x_48);
-    *(tint_symbol_3) = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c594e4b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %15 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %48 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %15
-         %17 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %20
-         %24 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %25 = OpLoad %int %24
-               OpStore %i %25
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %i
-         %32 = OpIAdd %int %30 %int_1
-               OpStore %i %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %true %36 %35
-         %36 = OpLabel
-               OpSelectionMerge %37 None
-               OpBranchConditional %true %38 %37
-         %38 = OpLabel
-         %40 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %41 = OpLoad %int %40
-               OpReturnValue %41
-         %37 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %42 = OpLoad %int %i
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpSLessThan %bool %42 %44
-               OpBranchConditional %45 %26 %27
-         %27 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %47 = OpLoad %int %46
-               OpReturnValue %47
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %48
-         %51 = OpLabel
-         %52 = OpFunctionCall %int %func_
-         %53 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %54 = OpLoad %int %53
-         %55 = OpIEqual %bool %52 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %60
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %56
-         %58 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %73
-         %75 = OpCompositeConstruct %v4float %74 %74 %74 %74
-               OpStore %x_GLF_color %75
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %48
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index cb4c4d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  var i : i32;
-  let x_53 : i32 = x_7.x_GLF_uniform_int_values[0];
-  i = x_53;
-  loop {
-    let x_58 : i32 = i;
-    i = (x_58 + 1);
-    if (true) {
-      if (true) {
-        let x_65 : i32 = x_7.x_GLF_uniform_int_values[2];
-        return x_65;
-      }
-    }
-
-    continuing {
-      let x_66 : i32 = i;
-      let x_68 : i32 = x_7.x_GLF_uniform_int_values[1];
-      if ((x_66 < x_68)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_71 : i32 = x_7.x_GLF_uniform_int_values[0];
-  return x_71;
-}
-
-fn main_1() {
-  let x_27 : i32 = func_();
-  let x_29 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if ((x_27 == x_29)) {
-    let x_35 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_38 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_41 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_44 : i32 = x_7.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_35), f32(x_38), f32(x_41), f32(x_44));
-  } else {
-    let x_48 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_49 : f32 = f32(x_48);
-    x_GLF_color = vec4<f32>(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index dcad269..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  i = x_53;
-  while (true) {
-    i = (i + 1);
-    if (true) {
-      if (true) {
-        const int x_65 = asint(x_7[2].x);
-        return x_65;
-      }
-    }
-    {
-      const int x_66 = i;
-      const int x_68 = asint(x_7[1].x);
-      if ((x_66 < x_68)) {
-      } else {
-        break;
-      }
-    }
-  }
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_71 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  return x_71;
-}
-
-void main_1() {
-  const int x_27 = func_();
-  const int x_29 = asint(x_7[2].x);
-  if ((x_27 == x_29)) {
-    const int x_35 = asint(x_7[2].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_41 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_44 = asint(x_7[2].x);
-    x_GLF_color = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_49 = float(x_48);
-    x_GLF_color = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5b3f8d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_(constant buf0& x_7) {
-  int i = 0;
-  int const x_53 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  i = x_53;
-  while (true) {
-    int const x_58 = i;
-    i = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-    if (true) {
-      if (true) {
-        int const x_65 = x_7.x_GLF_uniform_int_values.arr[2].el;
-        return x_65;
-      }
-    }
-    {
-      int const x_66 = i;
-      int const x_68 = x_7.x_GLF_uniform_int_values.arr[1].el;
-      if ((x_66 < x_68)) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_71 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  return x_71;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int const x_27 = func_(x_7);
-  int const x_29 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_27 == x_29)) {
-    int const x_35 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_38 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_41 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_44 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    int const x_48 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_49 = float(x_48);
-    *(tint_symbol_3) = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c594e4b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %15 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %48 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %15
-         %17 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %20
-         %24 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %25 = OpLoad %int %24
-               OpStore %i %25
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %i
-         %32 = OpIAdd %int %30 %int_1
-               OpStore %i %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %true %36 %35
-         %36 = OpLabel
-               OpSelectionMerge %37 None
-               OpBranchConditional %true %38 %37
-         %38 = OpLabel
-         %40 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %41 = OpLoad %int %40
-               OpReturnValue %41
-         %37 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %42 = OpLoad %int %i
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpSLessThan %bool %42 %44
-               OpBranchConditional %45 %26 %27
-         %27 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %47 = OpLoad %int %46
-               OpReturnValue %47
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %48
-         %51 = OpLabel
-         %52 = OpFunctionCall %int %func_
-         %53 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %54 = OpLoad %int %53
-         %55 = OpIEqual %bool %52 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %60
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %56
-         %58 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %73
-         %75 = OpCompositeConstruct %v4float %74 %74 %74 %74
-               OpStore %x_GLF_color %75
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %48
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index cb4c4d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-double-if-true-in-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  var i : i32;
-  let x_53 : i32 = x_7.x_GLF_uniform_int_values[0];
-  i = x_53;
-  loop {
-    let x_58 : i32 = i;
-    i = (x_58 + 1);
-    if (true) {
-      if (true) {
-        let x_65 : i32 = x_7.x_GLF_uniform_int_values[2];
-        return x_65;
-      }
-    }
-
-    continuing {
-      let x_66 : i32 = i;
-      let x_68 : i32 = x_7.x_GLF_uniform_int_values[1];
-      if ((x_66 < x_68)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_71 : i32 = x_7.x_GLF_uniform_int_values[0];
-  return x_71;
-}
-
-fn main_1() {
-  let x_27 : i32 = func_();
-  let x_29 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if ((x_27 == x_29)) {
-    let x_35 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_38 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_41 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_44 : i32 = x_7.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_35), f32(x_38), f32(x_41), f32(x_44));
-  } else {
-    let x_48 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_49 : f32 = f32(x_48);
-    x_GLF_color = vec4<f32>(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0907d3e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,74 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int arr[10] = (int[10])0;
-  int a = 0;
-  int i = 0;
-  const int tint_symbol_2[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  arr = tint_symbol_2;
-  a = 0;
-  const int x_42 = asint(x_7[1].x);
-  const int x_44 = arr[x_42];
-  if ((x_44 == 2)) {
-    const int x_49 = asint(x_7[2].x);
-    i = x_49;
-    while (true) {
-      const int x_54 = i;
-      const uint scalar_offset = ((16u * uint(0))) / 4;
-      const int x_56 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      {
-        i = (i + 1);
-      }
-    }
-    a = (a + 1);
-  }
-  const int x_63 = a;
-  const int x_66 = asint(x_7[2].x);
-  if (((-1 % x_63) == x_66)) {
-    const int x_71 = asint(x_7[1].x);
-    const int x_75 = asint(x_7[2].x);
-    arr[int2(x_71, x_71).y] = x_75;
-  }
-  const int x_78 = asint(x_7[1].x);
-  const int x_80 = arr[x_78];
-  const int x_82 = asint(x_7[2].x);
-  if ((x_80 == x_82)) {
-    const int x_88 = asint(x_7[1].x);
-    const int x_91 = asint(x_7[2].x);
-    const int x_94 = asint(x_7[2].x);
-    const int x_97 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_88), float(x_91), float(x_94), float(x_97));
-  } else {
-    const int x_101 = asint(x_7[2].x);
-    const float x_102 = float(x_101);
-    x_GLF_color = float4(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2b54d29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,88 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_1 arr = {};
-  int a = 0;
-  int i = 0;
-  tint_array_wrapper_1 const tint_symbol_2 = {.arr={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}};
-  arr = tint_symbol_2;
-  a = 0;
-  int const x_42 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_44 = arr.arr[x_42];
-  if ((x_44 == 2)) {
-    int const x_49 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    i = x_49;
-    while (true) {
-      int const x_54 = i;
-      int const x_56 = x_7.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      {
-        int const x_59 = i;
-        i = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-      }
-    }
-    int const x_61 = a;
-    a = as_type<int>((as_type<uint>(x_61) + as_type<uint>(1)));
-  }
-  int const x_63 = a;
-  int const x_66 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if (((-1 % x_63) == x_66)) {
-    int const x_71 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_75 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    arr.arr[int2(x_71, x_71).y] = x_75;
-  }
-  int const x_78 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_80 = arr.arr[x_78];
-  int const x_82 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_80 == x_82)) {
-    int const x_88 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_91 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_94 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_97 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_88), float(x_91), float(x_94), float(x_97));
-  } else {
-    int const x_101 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    float const x_102 = float(x_101);
-    *(tint_symbol_4) = float4(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  main_1(x_7, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4e4e547..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,185 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %23 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-         %38 = OpConstantComposite %_arr_int_uint_10 %int_1 %int_2 %int_3 %int_4 %int_5 %int_6 %int_7 %int_8 %int_9 %int_10
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-     %int_n1 = OpConstant %int -1
-      %v2int = OpTypeVector %int 2
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_int_uint_10 Function %23
-          %a = OpVariable %_ptr_Function_int Function %26
-          %i = OpVariable %_ptr_Function_int Function %26
-               OpStore %arr %38
-               OpStore %a %int_0
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Function_int %arr %43
-         %45 = OpLoad %int %44
-         %46 = OpIEqual %bool %45 %int_2
-               OpSelectionMerge %48 None
-               OpBranchConditional %46 %49 %48
-         %49 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %51 = OpLoad %int %50
-               OpStore %i %51
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %i
-         %57 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %58 = OpLoad %int %57
-         %59 = OpSLessThan %bool %56 %58
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %53
-         %60 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %63 = OpLoad %int %i
-         %64 = OpIAdd %int %63 %int_1
-               OpStore %i %64
-               OpBranch %52
-         %53 = OpLabel
-         %65 = OpLoad %int %a
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %a %66
-               OpBranch %48
-         %48 = OpLabel
-         %67 = OpLoad %int %a
-         %68 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %69 = OpLoad %int %68
-         %71 = OpSMod %int %int_n1 %67
-         %72 = OpIEqual %bool %71 %69
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %78 = OpLoad %int %77
-         %80 = OpCompositeConstruct %v2int %76 %76
-         %81 = OpCompositeExtract %int %80 1
-         %82 = OpAccessChain %_ptr_Function_int %arr %81
-               OpStore %82 %78
-               OpBranch %73
-         %73 = OpLabel
-         %83 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Function_int %arr %84
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpIEqual %bool %86 %88
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-        %100 = OpLoad %int %99
-        %101 = OpConvertSToF %float %94
-        %102 = OpConvertSToF %float %96
-        %103 = OpConvertSToF %float %98
-        %104 = OpConvertSToF %float %100
-        %105 = OpCompositeConstruct %v4float %101 %102 %103 %104
-               OpStore %x_GLF_color %105
-               OpBranch %90
-         %92 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-        %107 = OpLoad %int %106
-        %108 = OpConvertSToF %float %107
-        %109 = OpCompositeConstruct %v4float %108 %108 %108 %108
-               OpStore %x_GLF_color %109
-               OpBranch %90
-         %90 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-        %113 = OpLabel
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %118 = OpLabel
-        %119 = OpFunctionCall %main_out %main_inner
-        %120 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6a47f1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,72 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<i32, 10>;
-  var a : i32;
-  var i : i32;
-  arr = array<i32, 10>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
-  a = 0;
-  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_44 : i32 = arr[x_42];
-  if ((x_44 == 2)) {
-    let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
-    i = x_49;
-    loop {
-      let x_54 : i32 = i;
-      let x_56 : i32 = x_7.x_GLF_uniform_int_values[0];
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        let x_59 : i32 = i;
-        i = (x_59 + 1);
-      }
-    }
-    let x_61 : i32 = a;
-    a = (x_61 + 1);
-  }
-  let x_63 : i32 = a;
-  let x_66 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if (((-1 % x_63) == x_66)) {
-    let x_71 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_75 : i32 = x_7.x_GLF_uniform_int_values[2];
-    arr[vec2<i32>(x_71, x_71).y] = x_75;
-  }
-  let x_78 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_80 : i32 = arr[x_78];
-  let x_82 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if ((x_80 == x_82)) {
-    let x_88 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_91 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_94 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_97 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_88), f32(x_91), f32(x_94), f32(x_97));
-  } else {
-    let x_101 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_102 : f32 = f32(x_101);
-    x_GLF_color = vec4<f32>(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0907d3e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,74 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int arr[10] = (int[10])0;
-  int a = 0;
-  int i = 0;
-  const int tint_symbol_2[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-  arr = tint_symbol_2;
-  a = 0;
-  const int x_42 = asint(x_7[1].x);
-  const int x_44 = arr[x_42];
-  if ((x_44 == 2)) {
-    const int x_49 = asint(x_7[2].x);
-    i = x_49;
-    while (true) {
-      const int x_54 = i;
-      const uint scalar_offset = ((16u * uint(0))) / 4;
-      const int x_56 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      {
-        i = (i + 1);
-      }
-    }
-    a = (a + 1);
-  }
-  const int x_63 = a;
-  const int x_66 = asint(x_7[2].x);
-  if (((-1 % x_63) == x_66)) {
-    const int x_71 = asint(x_7[1].x);
-    const int x_75 = asint(x_7[2].x);
-    arr[int2(x_71, x_71).y] = x_75;
-  }
-  const int x_78 = asint(x_7[1].x);
-  const int x_80 = arr[x_78];
-  const int x_82 = asint(x_7[2].x);
-  if ((x_80 == x_82)) {
-    const int x_88 = asint(x_7[1].x);
-    const int x_91 = asint(x_7[2].x);
-    const int x_94 = asint(x_7[2].x);
-    const int x_97 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_88), float(x_91), float(x_94), float(x_97));
-  } else {
-    const int x_101 = asint(x_7[2].x);
-    const float x_102 = float(x_101);
-    x_GLF_color = float4(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2b54d29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,88 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_1 arr = {};
-  int a = 0;
-  int i = 0;
-  tint_array_wrapper_1 const tint_symbol_2 = {.arr={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}};
-  arr = tint_symbol_2;
-  a = 0;
-  int const x_42 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_44 = arr.arr[x_42];
-  if ((x_44 == 2)) {
-    int const x_49 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    i = x_49;
-    while (true) {
-      int const x_54 = i;
-      int const x_56 = x_7.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      {
-        int const x_59 = i;
-        i = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-      }
-    }
-    int const x_61 = a;
-    a = as_type<int>((as_type<uint>(x_61) + as_type<uint>(1)));
-  }
-  int const x_63 = a;
-  int const x_66 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if (((-1 % x_63) == x_66)) {
-    int const x_71 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_75 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    arr.arr[int2(x_71, x_71).y] = x_75;
-  }
-  int const x_78 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_80 = arr.arr[x_78];
-  int const x_82 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_80 == x_82)) {
-    int const x_88 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_91 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_94 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_97 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_88), float(x_91), float(x_94), float(x_97));
-  } else {
-    int const x_101 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    float const x_102 = float(x_101);
-    *(tint_symbol_4) = float4(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  main_1(x_7, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4e4e547..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,185 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %23 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-         %38 = OpConstantComposite %_arr_int_uint_10 %int_1 %int_2 %int_3 %int_4 %int_5 %int_6 %int_7 %int_8 %int_9 %int_10
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-     %int_n1 = OpConstant %int -1
-      %v2int = OpTypeVector %int 2
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_int_uint_10 Function %23
-          %a = OpVariable %_ptr_Function_int Function %26
-          %i = OpVariable %_ptr_Function_int Function %26
-               OpStore %arr %38
-               OpStore %a %int_0
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Function_int %arr %43
-         %45 = OpLoad %int %44
-         %46 = OpIEqual %bool %45 %int_2
-               OpSelectionMerge %48 None
-               OpBranchConditional %46 %49 %48
-         %49 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %51 = OpLoad %int %50
-               OpStore %i %51
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %i
-         %57 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %58 = OpLoad %int %57
-         %59 = OpSLessThan %bool %56 %58
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %53
-         %60 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %63 = OpLoad %int %i
-         %64 = OpIAdd %int %63 %int_1
-               OpStore %i %64
-               OpBranch %52
-         %53 = OpLabel
-         %65 = OpLoad %int %a
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %a %66
-               OpBranch %48
-         %48 = OpLabel
-         %67 = OpLoad %int %a
-         %68 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %69 = OpLoad %int %68
-         %71 = OpSMod %int %int_n1 %67
-         %72 = OpIEqual %bool %71 %69
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %78 = OpLoad %int %77
-         %80 = OpCompositeConstruct %v2int %76 %76
-         %81 = OpCompositeExtract %int %80 1
-         %82 = OpAccessChain %_ptr_Function_int %arr %81
-               OpStore %82 %78
-               OpBranch %73
-         %73 = OpLabel
-         %83 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Function_int %arr %84
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpIEqual %bool %86 %88
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-        %100 = OpLoad %int %99
-        %101 = OpConvertSToF %float %94
-        %102 = OpConvertSToF %float %96
-        %103 = OpConvertSToF %float %98
-        %104 = OpConvertSToF %float %100
-        %105 = OpCompositeConstruct %v4float %101 %102 %103 %104
-               OpStore %x_GLF_color %105
-               OpBranch %90
-         %92 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-        %107 = OpLoad %int %106
-        %108 = OpConvertSToF %float %107
-        %109 = OpCompositeConstruct %v4float %108 %108 %108 %108
-               OpStore %x_GLF_color %109
-               OpBranch %90
-         %90 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-        %113 = OpLabel
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %118 = OpLabel
-        %119 = OpFunctionCall %main_out %main_inner
-        %120 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6a47f1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-empty-loop-minus-one-modulo-variable-one/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,72 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<i32, 10>;
-  var a : i32;
-  var i : i32;
-  arr = array<i32, 10>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
-  a = 0;
-  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_44 : i32 = arr[x_42];
-  if ((x_44 == 2)) {
-    let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
-    i = x_49;
-    loop {
-      let x_54 : i32 = i;
-      let x_56 : i32 = x_7.x_GLF_uniform_int_values[0];
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        let x_59 : i32 = i;
-        i = (x_59 + 1);
-      }
-    }
-    let x_61 : i32 = a;
-    a = (x_61 + 1);
-  }
-  let x_63 : i32 = a;
-  let x_66 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if (((-1 % x_63) == x_66)) {
-    let x_71 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_75 : i32 = x_7.x_GLF_uniform_int_values[2];
-    arr[vec2<i32>(x_71, x_71).y] = x_75;
-  }
-  let x_78 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_80 : i32 = arr[x_78];
-  let x_82 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if ((x_80 == x_82)) {
-    let x_88 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_91 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_94 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_97 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_88), f32(x_91), f32(x_94), f32(x_97));
-  } else {
-    let x_101 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_102 : f32 = f32(x_101);
-    x_GLF_color = vec4<f32>(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6055ba4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  f = 2.0f;
-  if ((exp2(f) == 4.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6225446..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  f = 2.0f;
-  float const x_19 = f;
-  if ((exp2(x_19) == 4.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 7c8a87e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-         %18 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %14 = OpConstantNull %float
-    %float_2 = OpConstant %float 2
-    %float_4 = OpConstant %float 4
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %27 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %28 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %29 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %14
-               OpStore %f %float_2
-         %16 = OpLoad %float %f
-         %17 = OpExtInst %float %18 Exp2 %16
-         %20 = OpFOrdEqual %bool %17 %float_4
-               OpSelectionMerge %22 None
-               OpBranchConditional %20 %23 %24
-         %23 = OpLabel
-               OpStore %x_GLF_color %27
-               OpBranch %22
-         %24 = OpLabel
-               OpStore %x_GLF_color %28
-               OpBranch %22
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %29
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %x_GLF_color
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %37 = OpLabel
-         %38 = OpFunctionCall %main_out %main_inner
-         %39 = OpCompositeExtract %v4float %38 0
-               OpStore %x_GLF_color_1_1 %39
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 620e1b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  f = 2.0;
-  let x_19 : f32 = f;
-  if ((exp2(x_19) == 4.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6055ba4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  f = 2.0f;
-  if ((exp2(f) == 4.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6225446..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  f = 2.0f;
-  float const x_19 = f;
-  if ((exp2(x_19) == 4.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 7c8a87e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-         %18 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %14 = OpConstantNull %float
-    %float_2 = OpConstant %float 2
-    %float_4 = OpConstant %float 4
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %27 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %28 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %29 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %14
-               OpStore %f %float_2
-         %16 = OpLoad %float %f
-         %17 = OpExtInst %float %18 Exp2 %16
-         %20 = OpFOrdEqual %bool %17 %float_4
-               OpSelectionMerge %22 None
-               OpBranchConditional %20 %23 %24
-         %23 = OpLabel
-               OpStore %x_GLF_color %27
-               OpBranch %22
-         %24 = OpLabel
-               OpStore %x_GLF_color %28
-               OpBranch %22
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %29
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %x_GLF_color
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %37 = OpLabel
-         %38 = OpFunctionCall %main_out %main_inner
-         %39 = OpCompositeExtract %v4float %38 0
-               OpStore %x_GLF_color_1_1 %39
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 620e1b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-exp2-two/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  f = 2.0;
-  let x_19 : f32 = f;
-  if ((exp2(x_19) == 4.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index af3702f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  float arr[10] = (float[10])0;
-  f = 2.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_37 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_39 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_43 = asfloat(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_7[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  const float x_50 = f;
-  const float x_52 = asfloat(x_7[1].x);
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const float x_55 = asfloat(x_7[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-  const float x_57 = asfloat(x_7[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-  const float tint_symbol_3[10] = {x_37, x_39, x_41, x_43, x_45, x_47, x_49, pow(x_50, x_52), x_55, x_57};
-  arr = tint_symbol_3;
-  const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-  const int x_60 = asint(x_9[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-  const float x_62 = arr[x_60];
-  const int x_65 = asint(x_9[3].x);
-  if ((int(x_62) == x_65)) {
-    const int x_71 = asint(x_9[1].x);
-    const int x_74 = asint(x_9[2].x);
-    const int x_77 = asint(x_9[2].x);
-    const int x_80 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_71), float(x_74), float(x_77), float(x_80));
-  } else {
-    const int x_84 = asint(x_9[2].x);
-    const float x_85 = float(x_84);
-    x_GLF_color = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.msl
deleted file mode 100644
index 24f3615..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  tint_array_wrapper_2 arr = {};
-  f = 2.0f;
-  float const x_37 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_39 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_41 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_43 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_45 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_47 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_49 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_50 = f;
-  float const x_52 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_55 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_57 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_37, x_39, x_41, x_43, x_45, x_47, x_49, pow(x_50, x_52), x_55, x_57}};
-  arr = tint_symbol_2;
-  int const x_60 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  float const x_62 = arr.arr[x_60];
-  int const x_65 = x_9.x_GLF_uniform_int_values.arr[3].el;
-  if ((int(x_62) == x_65)) {
-    int const x_71 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_74 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    int const x_77 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    int const x_80 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_71), float(x_74), float(x_77), float(x_80));
-  } else {
-    int const x_84 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_85 = float(x_84);
-    *(tint_symbol_4) = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_7, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 00e2105..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,157 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 104
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %arr "arr"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %31 = OpConstantNull %_arr_float_uint_10
-    %float_2 = OpConstant %float 2
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %93 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %26
-        %arr = OpVariable %_ptr_Function__arr_float_uint_10 Function %31
-               OpStore %f %float_2
-         %36 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %37 = OpLoad %float %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %44 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %46 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %49 = OpLoad %float %48
-         %50 = OpLoad %float %f
-         %52 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %57 = OpLoad %float %56
-         %58 = OpExtInst %float %59 Pow %50 %53
-         %60 = OpCompositeConstruct %_arr_float_uint_10 %37 %39 %41 %43 %45 %47 %49 %58 %55 %57
-               OpStore %arr %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Function_float %arr %63
-         %65 = OpLoad %float %64
-         %67 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_3
-         %68 = OpLoad %int %67
-         %69 = OpConvertFToS %int %65
-         %70 = OpIEqual %bool %69 %68
-               OpSelectionMerge %72 None
-               OpBranchConditional %70 %73 %74
-         %73 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %76 = OpLoad %int %75
-         %78 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpConvertSToF %float %76
-         %85 = OpConvertSToF %float %79
-         %86 = OpConvertSToF %float %81
-         %87 = OpConvertSToF %float %83
-         %88 = OpCompositeConstruct %v4float %84 %85 %86 %87
-               OpStore %x_GLF_color %88
-               OpBranch %72
-         %74 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %90 = OpLoad %int %89
-         %91 = OpConvertSToF %float %90
-         %92 = OpCompositeConstruct %v4float %91 %91 %91 %91
-               OpStore %x_GLF_color %92
-               OpBranch %72
-         %72 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %93
-         %96 = OpLabel
-         %97 = OpFunctionCall %void %main_1
-         %98 = OpLoad %v4float %x_GLF_color
-         %99 = OpCompositeConstruct %main_out %98
-               OpReturnValue %99
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %101 = OpLabel
-        %102 = OpFunctionCall %main_out %main_inner
-        %103 = OpCompositeExtract %v4float %102 0
-               OpStore %x_GLF_color_1_1 %103
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0c41106..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var arr : array<f32, 10>;
-  f = 2.0;
-  let x_37 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_39 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_41 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_43 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_45 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_47 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_49 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_50 : f32 = f;
-  let x_52 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_55 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_57 : f32 = x_7.x_GLF_uniform_float_values[0];
-  arr = array<f32, 10>(x_37, x_39, x_41, x_43, x_45, x_47, x_49, pow(x_50, x_52), x_55, x_57);
-  let x_60 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_62 : f32 = arr[x_60];
-  let x_65 : i32 = x_9.x_GLF_uniform_int_values[3];
-  if ((i32(x_62) == x_65)) {
-    let x_71 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_74 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_77 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_80 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_71), f32(x_74), f32(x_77), f32(x_80));
-  } else {
-    let x_84 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_85 : f32 = f32(x_84);
-    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index af3702f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  float arr[10] = (float[10])0;
-  f = 2.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_37 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_39 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_43 = asfloat(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_7[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  const float x_50 = f;
-  const float x_52 = asfloat(x_7[1].x);
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const float x_55 = asfloat(x_7[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-  const float x_57 = asfloat(x_7[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-  const float tint_symbol_3[10] = {x_37, x_39, x_41, x_43, x_45, x_47, x_49, pow(x_50, x_52), x_55, x_57};
-  arr = tint_symbol_3;
-  const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-  const int x_60 = asint(x_9[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-  const float x_62 = arr[x_60];
-  const int x_65 = asint(x_9[3].x);
-  if ((int(x_62) == x_65)) {
-    const int x_71 = asint(x_9[1].x);
-    const int x_74 = asint(x_9[2].x);
-    const int x_77 = asint(x_9[2].x);
-    const int x_80 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_71), float(x_74), float(x_77), float(x_80));
-  } else {
-    const int x_84 = asint(x_9[2].x);
-    const float x_85 = float(x_84);
-    x_GLF_color = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.msl
deleted file mode 100644
index 24f3615..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  tint_array_wrapper_2 arr = {};
-  f = 2.0f;
-  float const x_37 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_39 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_41 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_43 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_45 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_47 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_49 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_50 = f;
-  float const x_52 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_55 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_57 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_37, x_39, x_41, x_43, x_45, x_47, x_49, pow(x_50, x_52), x_55, x_57}};
-  arr = tint_symbol_2;
-  int const x_60 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  float const x_62 = arr.arr[x_60];
-  int const x_65 = x_9.x_GLF_uniform_int_values.arr[3].el;
-  if ((int(x_62) == x_65)) {
-    int const x_71 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_74 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    int const x_77 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    int const x_80 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_71), float(x_74), float(x_77), float(x_80));
-  } else {
-    int const x_84 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_85 = float(x_84);
-    *(tint_symbol_4) = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_7, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 00e2105..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,157 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 104
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %arr "arr"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %31 = OpConstantNull %_arr_float_uint_10
-    %float_2 = OpConstant %float 2
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %93 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %26
-        %arr = OpVariable %_ptr_Function__arr_float_uint_10 Function %31
-               OpStore %f %float_2
-         %36 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %37 = OpLoad %float %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %44 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %46 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %49 = OpLoad %float %48
-         %50 = OpLoad %float %f
-         %52 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %57 = OpLoad %float %56
-         %58 = OpExtInst %float %59 Pow %50 %53
-         %60 = OpCompositeConstruct %_arr_float_uint_10 %37 %39 %41 %43 %45 %47 %49 %58 %55 %57
-               OpStore %arr %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Function_float %arr %63
-         %65 = OpLoad %float %64
-         %67 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_3
-         %68 = OpLoad %int %67
-         %69 = OpConvertFToS %int %65
-         %70 = OpIEqual %bool %69 %68
-               OpSelectionMerge %72 None
-               OpBranchConditional %70 %73 %74
-         %73 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %76 = OpLoad %int %75
-         %78 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpConvertSToF %float %76
-         %85 = OpConvertSToF %float %79
-         %86 = OpConvertSToF %float %81
-         %87 = OpConvertSToF %float %83
-         %88 = OpCompositeConstruct %v4float %84 %85 %86 %87
-               OpStore %x_GLF_color %88
-               OpBranch %72
-         %74 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %90 = OpLoad %int %89
-         %91 = OpConvertSToF %float %90
-         %92 = OpCompositeConstruct %v4float %91 %91 %91 %91
-               OpStore %x_GLF_color %92
-               OpBranch %72
-         %72 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %93
-         %96 = OpLabel
-         %97 = OpFunctionCall %void %main_1
-         %98 = OpLoad %v4float %x_GLF_color
-         %99 = OpCompositeConstruct %main_out %98
-               OpReturnValue %99
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %101 = OpLabel
-        %102 = OpFunctionCall %main_out %main_inner
-        %103 = OpCompositeExtract %v4float %102 0
-               OpStore %x_GLF_color_1_1 %103
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 0c41106..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-float-array-init-pow/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var arr : array<f32, 10>;
-  f = 2.0;
-  let x_37 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_39 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_41 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_43 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_45 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_47 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_49 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_50 : f32 = f;
-  let x_52 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_55 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_57 : f32 = x_7.x_GLF_uniform_float_values[0];
-  arr = array<f32, 10>(x_37, x_39, x_41, x_43, x_45, x_47, x_49, pow(x_50, x_52), x_55, x_57);
-  let x_60 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_62 : f32 = arr[x_60];
-  let x_65 : i32 = x_9.x_GLF_uniform_int_values[3];
-  if ((i32(x_62) == x_65)) {
-    let x_71 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_74 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_77 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_80 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_71), f32(x_74), f32(x_77), f32(x_80));
-  } else {
-    let x_84 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_85 : f32 = f32(x_84);
-    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0795796..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  int ret = 0;
-  int i = 0;
-  ret = 0;
-  i = 3;
-  while (true) {
-    if ((i > (i & 1))) {
-    } else {
-      break;
-    }
-    ret = (ret + 1);
-    {
-      const int x_47 = asint(x_8[0].x);
-      i = (i - x_47);
-    }
-  }
-  return ret;
-}
-
-void main_1() {
-  const int x_29 = func_();
-  if ((x_29 == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.msl
deleted file mode 100644
index 228de98..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_(constant buf0& x_8) {
-  int ret = 0;
-  int i = 0;
-  ret = 0;
-  i = 3;
-  while (true) {
-    int const x_39 = i;
-    int const x_40 = i;
-    if ((x_39 > (x_40 & 1))) {
-    } else {
-      break;
-    }
-    int const x_44 = ret;
-    ret = as_type<int>((as_type<uint>(x_44) + as_type<uint>(1)));
-    {
-      int const x_47 = x_8.one;
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) - as_type<uint>(x_47)));
-    }
-  }
-  int const x_50 = ret;
-  return x_50;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int const x_29 = func_(x_8);
-  if ((x_29 == 2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d941019..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,125 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %ret "ret"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %void = OpTypeVoid
-         %44 = OpTypeFunction %void
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %57 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %12
-         %14 = OpLabel
-        %ret = OpVariable %_ptr_Function_int Function %17
-          %i = OpVariable %_ptr_Function_int Function %17
-               OpStore %ret %int_0
-               OpStore %i %int_3
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %i
-         %26 = OpLoad %int %i
-         %28 = OpBitwiseAnd %int %26 %int_1
-         %29 = OpSGreaterThan %bool %25 %28
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %22
-         %31 = OpLabel
-         %34 = OpLoad %int %ret
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %ret %35
-               OpBranch %23
-         %23 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %40 = OpLoad %int %39
-         %41 = OpLoad %int %i
-         %42 = OpISub %int %41 %40
-               OpStore %i %42
-               OpBranch %21
-         %22 = OpLabel
-         %43 = OpLoad %int %ret
-               OpReturnValue %43
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %int %func_
-         %50 = OpIEqual %bool %48 %int_2
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %51
-         %53 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %51
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %44
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b8c3805..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  var ret : i32;
-  var i : i32;
-  ret = 0;
-  i = 3;
-  loop {
-    let x_39 : i32 = i;
-    let x_40 : i32 = i;
-    if ((x_39 > (x_40 & 1))) {
-    } else {
-      break;
-    }
-    let x_44 : i32 = ret;
-    ret = (x_44 + 1);
-
-    continuing {
-      let x_47 : i32 = x_8.one;
-      let x_48 : i32 = i;
-      i = (x_48 - x_47);
-    }
-  }
-  let x_50 : i32 = ret;
-  return x_50;
-}
-
-fn main_1() {
-  let x_29 : i32 = func_();
-  if ((x_29 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0795796..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  int ret = 0;
-  int i = 0;
-  ret = 0;
-  i = 3;
-  while (true) {
-    if ((i > (i & 1))) {
-    } else {
-      break;
-    }
-    ret = (ret + 1);
-    {
-      const int x_47 = asint(x_8[0].x);
-      i = (i - x_47);
-    }
-  }
-  return ret;
-}
-
-void main_1() {
-  const int x_29 = func_();
-  if ((x_29 == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.msl
deleted file mode 100644
index 228de98..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_(constant buf0& x_8) {
-  int ret = 0;
-  int i = 0;
-  ret = 0;
-  i = 3;
-  while (true) {
-    int const x_39 = i;
-    int const x_40 = i;
-    if ((x_39 > (x_40 & 1))) {
-    } else {
-      break;
-    }
-    int const x_44 = ret;
-    ret = as_type<int>((as_type<uint>(x_44) + as_type<uint>(1)));
-    {
-      int const x_47 = x_8.one;
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) - as_type<uint>(x_47)));
-    }
-  }
-  int const x_50 = ret;
-  return x_50;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int const x_29 = func_(x_8);
-  if ((x_29 == 2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d941019..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,125 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %ret "ret"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %void = OpTypeVoid
-         %44 = OpTypeFunction %void
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %57 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %12
-         %14 = OpLabel
-        %ret = OpVariable %_ptr_Function_int Function %17
-          %i = OpVariable %_ptr_Function_int Function %17
-               OpStore %ret %int_0
-               OpStore %i %int_3
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %i
-         %26 = OpLoad %int %i
-         %28 = OpBitwiseAnd %int %26 %int_1
-         %29 = OpSGreaterThan %bool %25 %28
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %22
-         %31 = OpLabel
-         %34 = OpLoad %int %ret
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %ret %35
-               OpBranch %23
-         %23 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %40 = OpLoad %int %39
-         %41 = OpLoad %int %i
-         %42 = OpISub %int %41 %40
-               OpStore %i %42
-               OpBranch %21
-         %22 = OpLabel
-         %43 = OpLoad %int %ret
-               OpReturnValue %43
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %int %func_
-         %50 = OpIEqual %bool %48 %int_2
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %51
-         %53 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %51
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %44
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b8c3805..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-and-in-for-loop-range/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  var ret : i32;
-  var i : i32;
-  ret = 0;
-  i = 3;
-  loop {
-    let x_39 : i32 = i;
-    let x_40 : i32 = i;
-    if ((x_39 > (x_40 & 1))) {
-    } else {
-      break;
-    }
-    let x_44 : i32 = ret;
-    ret = (x_44 + 1);
-
-    continuing {
-      let x_47 : i32 = x_8.one;
-      let x_48 : i32 = i;
-      i = (x_48 - x_47);
-    }
-  }
-  let x_50 : i32 = ret;
-  return x_50;
-}
-
-fn main_1() {
-  let x_29 : i32 = func_();
-  if ((x_29 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.hlsl
deleted file mode 100644
index 1fc3eb0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_22 = asint(x_5[0].x);
-  if (((x_22 & 0) == 0)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.msl
deleted file mode 100644
index df44d6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_22 = x_5.one;
-  if (((x_22 & 0) == 0)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.spvasm
deleted file mode 100644
index 38d493b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %30 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %31 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %22 = OpBitwiseAnd %int %20 %int_0
-         %23 = OpIEqual %bool %22 %int_0
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %30
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.wgsl
deleted file mode 100644
index f8191eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_22 : i32 = x_5.one;
-  if (((x_22 & 0) == 0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.hlsl
deleted file mode 100644
index 1fc3eb0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_22 = asint(x_5[0].x);
-  if (((x_22 & 0) == 0)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.msl
deleted file mode 100644
index df44d6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_22 = x_5.one;
-  if (((x_22 & 0) == 0)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.spvasm
deleted file mode 100644
index 38d493b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %30 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %31 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %22 = OpBitwiseAnd %int %20 %int_0
-         %23 = OpIEqual %bool %22 %int_0
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %30
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.wgsl
deleted file mode 100644
index f8191eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-and-zero/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_22 : i32 = x_5.one;
-  if (((x_22 & 0) == 0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.hlsl
deleted file mode 100644
index 47bc4f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_23 = asint(x_5[0].x);
-  if (((-1 | x_23) == -1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.msl
deleted file mode 100644
index ed5a502..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_23 = x_5.one;
-  if (((-1 | x_23) == -1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.spvasm
deleted file mode 100644
index d746610..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %int_n1 = OpConstant %int -1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %30 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %31 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %22 = OpBitwiseOr %int %int_n1 %20
-         %23 = OpIEqual %bool %22 %int_n1
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %30
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.wgsl
deleted file mode 100644
index 6af6f72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_23 : i32 = x_5.one;
-  if (((-1 | x_23) == -1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.hlsl
deleted file mode 100644
index 47bc4f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_23 = asint(x_5[0].x);
-  if (((-1 | x_23) == -1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.msl
deleted file mode 100644
index ed5a502..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_23 = x_5.one;
-  if (((-1 | x_23) == -1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.spvasm
deleted file mode 100644
index d746610..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %int_n1 = OpConstant %int -1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %30 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %31 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %22 = OpBitwiseOr %int %int_n1 %20
-         %23 = OpIEqual %bool %22 %int_n1
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %30
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.wgsl
deleted file mode 100644
index 6af6f72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-or-full-mask/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_23 : i32 = x_5.one;
-  if (((-1 | x_23) == -1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 561e506..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  a = 6;
-  b = 5;
-  if (((a ^ b) != 3)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.msl
deleted file mode 100644
index e9c31bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  a = 6;
-  b = 5;
-  int const x_6 = a;
-  int const x_7 = b;
-  if (((x_6 ^ x_7) != 3)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b4ab2df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,77 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_6 = OpConstant %int 6
-      %int_5 = OpConstant %int 5
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %15
-          %b = OpVariable %_ptr_Function_int Function %15
-               OpStore %a %int_6
-               OpStore %b %int_5
-         %19 = OpLoad %int %a
-         %20 = OpLoad %int %b
-         %21 = OpBitwiseXor %int %19 %20
-         %23 = OpINotEqual %bool %21 %int_3
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %29
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a475384..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  a = 6;
-  b = 5;
-  let x_6 : i32 = a;
-  let x_7 : i32 = b;
-  if (((x_6 ^ x_7) != 3)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 561e506..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  a = 6;
-  b = 5;
-  if (((a ^ b) != 3)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.msl
deleted file mode 100644
index e9c31bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  a = 6;
-  b = 5;
-  int const x_6 = a;
-  int const x_7 = b;
-  if (((x_6 ^ x_7) != 3)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b4ab2df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,77 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_6 = OpConstant %int 6
-      %int_5 = OpConstant %int 5
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %15
-          %b = OpVariable %_ptr_Function_int Function %15
-               OpStore %a %int_6
-               OpStore %b %int_5
-         %19 = OpLoad %int %a
-         %20 = OpLoad %int %b
-         %21 = OpBitwiseXor %int %19 %20
-         %23 = OpINotEqual %bool %21 %int_3
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %29
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a475384..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-bitwise-xor/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  a = 6;
-  b = 5;
-  let x_6 : i32 = a;
-  let x_7 : i32 = b;
-  if (((x_6 ^ x_7) != 3)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.hlsl
deleted file mode 100644
index e30c46a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool a = false;
-  a = false;
-  if ((true & a)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.msl
deleted file mode 100644
index 2879d83..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool a = false;
-  a = false;
-  bool const x_19 = a;
-  if ((true & x_19)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.spvasm
deleted file mode 100644
index 217f300..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,70 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-         %26 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %27 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_bool Function %15
-               OpStore %a %false
-         %17 = OpLoad %bool %a
-         %19 = OpLogicalAnd %bool %true %17
-               OpSelectionMerge %20 None
-               OpBranchConditional %19 %21 %22
-         %21 = OpLabel
-               OpStore %x_GLF_color %24
-               OpBranch %20
-         %22 = OpLabel
-               OpStore %x_GLF_color %26
-               OpBranch %20
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %27
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %main_1
-         %32 = OpLoad %v4float %x_GLF_color
-         %33 = OpCompositeConstruct %main_out %32
-               OpReturnValue %33
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %35 = OpLabel
-         %36 = OpFunctionCall %main_out %main_inner
-         %37 = OpCompositeExtract %v4float %36 0
-               OpStore %x_GLF_color_1_1 %37
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.wgsl
deleted file mode 100644
index bcb055a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : bool;
-  a = false;
-  let x_19 : bool = a;
-  if ((true & x_19)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.hlsl
deleted file mode 100644
index a3e7905..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool a = false;
-  a = false;
-  bool tint_tmp = true;
-  if (tint_tmp) {
-    tint_tmp = a;
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.msl
deleted file mode 100644
index e36ed72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool a = false;
-  a = false;
-  bool const x_19 = a;
-  if ((true && x_19)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.spvasm
deleted file mode 100644
index cf4e979..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-    %float_0 = OpConstant %float 0
-         %26 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-         %28 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %29 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_bool Function %15
-               OpStore %a %false
-         %17 = OpLoad %bool %a
-               OpSelectionMerge %19 None
-               OpBranchConditional %true %20 %19
-         %20 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-         %21 = OpPhi %bool %true %11 %17 %20
-               OpSelectionMerge %22 None
-               OpBranchConditional %21 %23 %24
-         %23 = OpLabel
-               OpStore %x_GLF_color %26
-               OpBranch %22
-         %24 = OpLabel
-               OpStore %x_GLF_color %28
-               OpBranch %22
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %29
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %x_GLF_color
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %37 = OpLabel
-         %38 = OpFunctionCall %main_out %main_inner
-         %39 = OpCompositeExtract %v4float %38 0
-               OpStore %x_GLF_color_1_1 %39
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.wgsl
deleted file mode 100644
index 3d02048..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-const-variable/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : bool;
-  a = false;
-  let x_19 : bool = a;
-  if ((true && x_19)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e4ad79e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  i = 2;
-  while (true) {
-    i = (i + 1);
-    {
-      const float x_35 = gl_FragCoord.x;
-      if (((x_35 >= 0.0f) & false)) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((i == 3)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.msl
deleted file mode 100644
index 86f3cc7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  i = 2;
-  while (true) {
-    int const x_6 = i;
-    i = as_type<int>((as_type<uint>(x_6) + as_type<uint>(1)));
-    {
-      float const x_35 = (*(tint_symbol_3)).x;
-      if (((x_35 >= 0.0f) & false)) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_8 = i;
-  if ((x_8 == 3)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 47743fc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-         %44 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %45 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %46 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %i %int_2
-               OpBranch %20
-         %20 = OpLabel
-               OpLoopMerge %21 %22 None
-               OpBranch %23
-         %23 = OpLabel
-         %24 = OpLoad %int %i
-         %26 = OpIAdd %int %24 %int_1
-               OpStore %i %26
-               OpBranch %22
-         %22 = OpLabel
-         %30 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %31 = OpLoad %float %30
-         %33 = OpFOrdGreaterThanEqual %bool %31 %float_0
-         %36 = OpLogicalAnd %bool %33 %false
-               OpBranchConditional %36 %20 %21
-         %21 = OpLabel
-         %37 = OpLoad %int %i
-         %39 = OpIEqual %bool %37 %int_3
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %42
-         %41 = OpLabel
-               OpStore %x_GLF_color %44
-               OpBranch %40
-         %42 = OpLabel
-               OpStore %x_GLF_color %45
-               OpBranch %40
-         %40 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %46
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %50 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %x_GLF_color
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %55 = OpLabel
-         %57 = OpLoad %v4float %gl_FragCoord_param_1
-         %56 = OpFunctionCall %main_out %main_inner %57
-         %58 = OpCompositeExtract %v4float %56 0
-               OpStore %x_GLF_color_1_1 %58
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index de1d092..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  i = 2;
-  loop {
-    let x_6 : i32 = i;
-    i = (x_6 + 1);
-
-    continuing {
-      let x_35 : f32 = gl_FragCoord.x;
-      if (((x_35 >= 0.0) & false)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_8 : i32 = i;
-  if ((x_8 == 3)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 467446e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,51 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  i = 2;
-  while (true) {
-    i = (i + 1);
-    {
-      const float x_35 = gl_FragCoord.x;
-      bool tint_tmp = (x_35 >= 0.0f);
-      if (tint_tmp) {
-        tint_tmp = false;
-      }
-      if ((tint_tmp)) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((i == 3)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3b13be0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  i = 2;
-  while (true) {
-    int const x_6 = i;
-    i = as_type<int>((as_type<uint>(x_6) + as_type<uint>(1)));
-    {
-      float const x_35 = (*(tint_symbol_3)).x;
-      if (((x_35 >= 0.0f) && false)) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_8 = i;
-  if ((x_8 == 3)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3b82365..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-         %46 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %47 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %48 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %i %int_2
-               OpBranch %20
-         %20 = OpLabel
-               OpLoopMerge %21 %22 None
-               OpBranch %23
-         %23 = OpLabel
-         %24 = OpLoad %int %i
-         %26 = OpIAdd %int %24 %int_1
-               OpStore %i %26
-               OpBranch %22
-         %22 = OpLabel
-         %30 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %31 = OpLoad %float %30
-         %33 = OpFOrdGreaterThanEqual %bool %31 %float_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-         %38 = OpPhi %bool %33 %22 %false %36
-               OpBranchConditional %38 %20 %21
-         %21 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpIEqual %bool %39 %int_3
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %44
-         %43 = OpLabel
-               OpStore %x_GLF_color %46
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %48
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %52 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %57 = OpLabel
-         %59 = OpLoad %v4float %gl_FragCoord_param_1
-         %58 = OpFunctionCall %main_out %main_inner %59
-         %60 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 4fa9901..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-and-constant/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  i = 2;
-  loop {
-    let x_6 : i32 = i;
-    i = (x_6 + 1);
-
-    continuing {
-      let x_35 : f32 = gl_FragCoord.x;
-      if (((x_35 >= 0.0) && false)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_8 : i32 = i;
-  if ((x_8 == 3)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.hlsl
deleted file mode 100644
index 206deb6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_22 = gl_FragCoord.x;
-  if (((x_22 < 0.0f) | true)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.msl
deleted file mode 100644
index b4d9101..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_22 = (*(tint_symbol_3)).x;
-  if (((x_22 < 0.0f) | true)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.spvasm
deleted file mode 100644
index 8e06c42..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %29 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %30 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %31 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %19 = OpLoad %float %18
-         %21 = OpFOrdLessThan %bool %19 %float_0
-         %24 = OpLogicalOr %bool %21 %true
-               OpSelectionMerge %25 None
-               OpBranchConditional %24 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %29
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %30
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %31
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %35 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %40 = OpLabel
-         %42 = OpLoad %v4float %gl_FragCoord_param_1
-         %41 = OpFunctionCall %main_out %main_inner %42
-         %43 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.wgsl
deleted file mode 100644
index c44609f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_22 : f32 = gl_FragCoord.x;
-  if (((x_22 < 0.0) | true)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.hlsl
deleted file mode 100644
index fb14b14..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_22 = gl_FragCoord.x;
-  bool tint_tmp = (x_22 < 0.0f);
-  if (!tint_tmp) {
-    tint_tmp = true;
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.msl
deleted file mode 100644
index 04c6407..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_22 = (*(tint_symbol_3)).x;
-  if (((x_22 < 0.0f) || true)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.spvasm
deleted file mode 100644
index e747b52..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %32 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %33 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %19 = OpLoad %float %18
-         %21 = OpFOrdLessThan %bool %19 %float_0
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %23 %24
-         %24 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-         %26 = OpPhi %bool %21 %14 %true %24
-               OpSelectionMerge %27 None
-               OpBranchConditional %26 %28 %29
-         %28 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %27
-         %29 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %33
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %37 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %42 = OpLabel
-         %44 = OpLoad %v4float %gl_FragCoord_param_1
-         %43 = OpFunctionCall %main_out %main_inner %44
-         %45 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %45
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.wgsl
deleted file mode 100644
index 56678ab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-logical-or-constant/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_22 : f32 = gl_FragCoord.x;
-  if (((x_22 < 0.0) || true)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e95f485..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int minValue = 0;
-  int negMinValue = 0;
-  minValue = -2147483648;
-  negMinValue = -(minValue);
-  const int x_27 = negMinValue;
-  const int x_28 = minValue;
-  const int x_30 = asint(x_7[0].x);
-  if ((x_27 == (x_28 * x_30))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4ebb8b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ int minusOne;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int minValue = 0;
-  int negMinValue = 0;
-  minValue = (-2147483647 - 1);
-  int const x_25 = minValue;
-  negMinValue = tint_unary_minus(x_25);
-  int const x_27 = negMinValue;
-  int const x_28 = minValue;
-  int const x_30 = x_7.minusOne;
-  if ((x_27 == as_type<int>((as_type<uint>(x_28) * as_type<uint>(x_30))))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ec16d2f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,93 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "minusOne"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %minValue "minValue"
-               OpName %negMinValue "negMinValue"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-%int_n2147483648 = OpConstant %int -2147483648
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %40 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-   %minValue = OpVariable %_ptr_Function_int Function %18
-%negMinValue = OpVariable %_ptr_Function_int Function %18
-               OpStore %minValue %int_n2147483648
-         %21 = OpLoad %int %minValue
-         %22 = OpSNegate %int %21
-               OpStore %negMinValue %22
-         %23 = OpLoad %int %negMinValue
-         %24 = OpLoad %int %minValue
-         %28 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %29 = OpLoad %int %28
-         %30 = OpIMul %int %24 %29
-         %31 = OpIEqual %bool %23 %30
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %35
-         %34 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %33
-         %35 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %40
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %main_1
-         %45 = OpLoad %v4float %x_GLF_color
-         %46 = OpCompositeConstruct %main_out %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %48 = OpLabel
-         %49 = OpFunctionCall %main_out %main_inner
-         %50 = OpCompositeExtract %v4float %49 0
-               OpStore %x_GLF_color_1_1 %50
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ae8dd8b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-[[block]]
-struct buf0 {
-  minusOne : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var minValue : i32;
-  var negMinValue : i32;
-  minValue = -2147483648;
-  let x_25 : i32 = minValue;
-  negMinValue = -(x_25);
-  let x_27 : i32 = negMinValue;
-  let x_28 : i32 = minValue;
-  let x_30 : i32 = x_7.minusOne;
-  if ((x_27 == (x_28 * x_30))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e95f485..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int minValue = 0;
-  int negMinValue = 0;
-  minValue = -2147483648;
-  negMinValue = -(minValue);
-  const int x_27 = negMinValue;
-  const int x_28 = minValue;
-  const int x_30 = asint(x_7[0].x);
-  if ((x_27 == (x_28 * x_30))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4ebb8b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ int minusOne;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int minValue = 0;
-  int negMinValue = 0;
-  minValue = (-2147483647 - 1);
-  int const x_25 = minValue;
-  negMinValue = tint_unary_minus(x_25);
-  int const x_27 = negMinValue;
-  int const x_28 = minValue;
-  int const x_30 = x_7.minusOne;
-  if ((x_27 == as_type<int>((as_type<uint>(x_28) * as_type<uint>(x_30))))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ec16d2f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,93 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "minusOne"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %minValue "minValue"
-               OpName %negMinValue "negMinValue"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-%int_n2147483648 = OpConstant %int -2147483648
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %40 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-   %minValue = OpVariable %_ptr_Function_int Function %18
-%negMinValue = OpVariable %_ptr_Function_int Function %18
-               OpStore %minValue %int_n2147483648
-         %21 = OpLoad %int %minValue
-         %22 = OpSNegate %int %21
-               OpStore %negMinValue %22
-         %23 = OpLoad %int %negMinValue
-         %24 = OpLoad %int %minValue
-         %28 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %29 = OpLoad %int %28
-         %30 = OpIMul %int %24 %29
-         %31 = OpIEqual %bool %23 %30
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %35
-         %34 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %33
-         %35 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %40
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %main_1
-         %45 = OpLoad %v4float %x_GLF_color
-         %46 = OpCompositeConstruct %main_out %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %48 = OpLabel
-         %49 = OpFunctionCall %main_out %main_inner
-         %50 = OpCompositeExtract %v4float %49 0
-               OpStore %x_GLF_color_1_1 %50
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ae8dd8b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-min-int-value/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-[[block]]
-struct buf0 {
-  minusOne : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var minValue : i32;
-  var negMinValue : i32;
-  minValue = -2147483648;
-  let x_25 : i32 = minValue;
-  negMinValue = -(x_25);
-  let x_27 : i32 = negMinValue;
-  let x_28 : i32 = minValue;
-  let x_30 : i32 = x_7.minusOne;
-  if ((x_27 == (x_28 * x_30))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.hlsl
deleted file mode 100644
index f249279..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  i = 3;
-  if ((~(i) == -4)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.msl
deleted file mode 100644
index 72dea6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  i = 3;
-  int const x_5 = i;
-  if ((~(x_5) == -4)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.spvasm
deleted file mode 100644
index f6420f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_3 = OpConstant %int 3
-     %int_n4 = OpConstant %int -4
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %27 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %28 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %29 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-               OpStore %i %int_3
-         %17 = OpLoad %int %i
-         %18 = OpNot %int %17
-         %20 = OpIEqual %bool %18 %int_n4
-               OpSelectionMerge %22 None
-               OpBranchConditional %20 %23 %24
-         %23 = OpLabel
-               OpStore %x_GLF_color %27
-               OpBranch %22
-         %24 = OpLabel
-               OpStore %x_GLF_color %28
-               OpBranch %22
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %29
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %x_GLF_color
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %37 = OpLabel
-         %38 = OpFunctionCall %main_out %main_inner
-         %39 = OpCompositeExtract %v4float %38 0
-               OpStore %x_GLF_color_1_1 %39
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.wgsl
deleted file mode 100644
index ec3893d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  i = 3;
-  let x_5 : i32 = i;
-  if ((~(x_5) == -4)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.hlsl
deleted file mode 100644
index f249279..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  i = 3;
-  if ((~(i) == -4)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.msl
deleted file mode 100644
index 72dea6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  i = 3;
-  int const x_5 = i;
-  if ((~(x_5) == -4)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.spvasm
deleted file mode 100644
index f6420f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_3 = OpConstant %int 3
-     %int_n4 = OpConstant %int -4
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %27 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %28 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %29 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-               OpStore %i %int_3
-         %17 = OpLoad %int %i
-         %18 = OpNot %int %17
-         %20 = OpIEqual %bool %18 %int_n4
-               OpSelectionMerge %22 None
-               OpBranchConditional %20 %23 %24
-         %23 = OpLabel
-               OpStore %x_GLF_color %27
-               OpBranch %22
-         %24 = OpLabel
-               OpStore %x_GLF_color %28
-               OpBranch %22
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %29
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %x_GLF_color
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %37 = OpLabel
-         %38 = OpFunctionCall %main_out %main_inner
-         %39 = OpCompositeExtract %v4float %38 0
-               OpStore %x_GLF_color_1_1 %39
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.wgsl
deleted file mode 100644
index ec3893d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-negate-variable/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  i = 3;
-  let x_5 : i32 = i;
-  if ((~(x_5) == -4)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.hlsl
deleted file mode 100644
index a7f0fbf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,69 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  uint b = 0u;
-  uint c = 0u;
-  uint d = 0u;
-  uint e = 0u;
-  uint f = 0u;
-  const uint x_41 = x_6[0].x;
-  a = ((77u + x_41) >> 32u);
-  const uint x_45 = x_6[0].x;
-  b = ((3243u + x_45) >> 33u);
-  const uint x_49 = x_6[0].x;
-  c = ((23u + x_49) >> 345u);
-  const uint x_53 = x_6[0].x;
-  d = ((2395u + x_53) << 32u);
-  const uint x_57 = x_6[0].x;
-  e = ((290485u + x_57) << 33u);
-  const uint x_61 = x_6[0].x;
-  f = ((44321u + x_61) << 345u);
-  if ((a != 1u)) {
-    a = 1u;
-  }
-  if ((b != 0u)) {
-    b = 0u;
-  }
-  if ((c != 1u)) {
-    c = 1u;
-  }
-  if ((d != 0u)) {
-    d = 0u;
-  }
-  if ((e != 1u)) {
-    e = 1u;
-  }
-  if ((f != 0u)) {
-    f = 0u;
-  }
-  if (((((((a == 1u) & (b == 0u)) & (c == 1u)) & (d == 0u)) & (e == 1u)) & (f == 0u))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.msl
deleted file mode 100644
index 619406e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ uint one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  uint b = 0u;
-  uint c = 0u;
-  uint d = 0u;
-  uint e = 0u;
-  uint f = 0u;
-  uint const x_41 = x_6.one;
-  a = ((77u + x_41) >> 32u);
-  uint const x_45 = x_6.one;
-  b = ((3243u + x_45) >> 33u);
-  uint const x_49 = x_6.one;
-  c = ((23u + x_49) >> 345u);
-  uint const x_53 = x_6.one;
-  d = ((2395u + x_53) << 32u);
-  uint const x_57 = x_6.one;
-  e = ((290485u + x_57) << 33u);
-  uint const x_61 = x_6.one;
-  f = ((44321u + x_61) << 345u);
-  uint const x_64 = a;
-  if ((x_64 != 1u)) {
-    a = 1u;
-  }
-  uint const x_68 = b;
-  if ((x_68 != 0u)) {
-    b = 0u;
-  }
-  uint const x_72 = c;
-  if ((x_72 != 1u)) {
-    c = 1u;
-  }
-  uint const x_76 = d;
-  if ((x_76 != 0u)) {
-    d = 0u;
-  }
-  uint const x_80 = e;
-  if ((x_80 != 1u)) {
-    e = 1u;
-  }
-  uint const x_84 = f;
-  if ((x_84 != 0u)) {
-    f = 0u;
-  }
-  uint const x_88 = a;
-  uint const x_90 = b;
-  uint const x_93 = c;
-  uint const x_96 = d;
-  uint const x_99 = e;
-  uint const x_102 = f;
-  if (((((((x_88 == 1u) & (x_90 == 0u)) & (x_93 == 1u)) & (x_96 == 0u)) & (x_99 == 1u)) & (x_102 == 0u))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.spvasm
deleted file mode 100644
index 65dd437..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,194 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 120
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %e "e"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-       %buf0 = OpTypeStruct %uint
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %18 = OpConstantNull %uint
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-    %uint_77 = OpConstant %uint 77
-    %uint_32 = OpConstant %uint 32
-  %uint_3243 = OpConstant %uint 3243
-    %uint_33 = OpConstant %uint 33
-    %uint_23 = OpConstant %uint 23
-   %uint_345 = OpConstant %uint 345
-  %uint_2395 = OpConstant %uint 2395
-%uint_290485 = OpConstant %uint 290485
- %uint_44321 = OpConstant %uint 44321
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %107 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %108 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %109 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %18
-          %b = OpVariable %_ptr_Function_uint Function %18
-          %c = OpVariable %_ptr_Function_uint Function %18
-          %d = OpVariable %_ptr_Function_uint Function %18
-          %e = OpVariable %_ptr_Function_uint Function %18
-          %f = OpVariable %_ptr_Function_uint Function %18
-         %26 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %27 = OpLoad %uint %26
-         %29 = OpIAdd %uint %uint_77 %27
-         %31 = OpShiftRightLogical %uint %29 %uint_32
-               OpStore %a %31
-         %32 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %33 = OpLoad %uint %32
-         %35 = OpIAdd %uint %uint_3243 %33
-         %37 = OpShiftRightLogical %uint %35 %uint_33
-               OpStore %b %37
-         %38 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %39 = OpLoad %uint %38
-         %41 = OpIAdd %uint %uint_23 %39
-         %43 = OpShiftRightLogical %uint %41 %uint_345
-               OpStore %c %43
-         %44 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %45 = OpLoad %uint %44
-         %47 = OpIAdd %uint %uint_2395 %45
-         %48 = OpShiftLeftLogical %uint %47 %uint_32
-               OpStore %d %48
-         %49 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %50 = OpLoad %uint %49
-         %52 = OpIAdd %uint %uint_290485 %50
-         %53 = OpShiftLeftLogical %uint %52 %uint_33
-               OpStore %e %53
-         %54 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %55 = OpLoad %uint %54
-         %57 = OpIAdd %uint %uint_44321 %55
-         %58 = OpShiftLeftLogical %uint %57 %uint_345
-               OpStore %f %58
-         %59 = OpLoad %uint %a
-         %61 = OpINotEqual %bool %59 %uint_1
-               OpSelectionMerge %63 None
-               OpBranchConditional %61 %64 %63
-         %64 = OpLabel
-               OpStore %a %uint_1
-               OpBranch %63
-         %63 = OpLabel
-         %65 = OpLoad %uint %b
-         %66 = OpINotEqual %bool %65 %uint_0
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-               OpStore %b %uint_0
-               OpBranch %67
-         %67 = OpLabel
-         %69 = OpLoad %uint %c
-         %70 = OpINotEqual %bool %69 %uint_1
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %71
-         %72 = OpLabel
-               OpStore %c %uint_1
-               OpBranch %71
-         %71 = OpLabel
-         %73 = OpLoad %uint %d
-         %74 = OpINotEqual %bool %73 %uint_0
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-               OpStore %d %uint_0
-               OpBranch %75
-         %75 = OpLabel
-         %77 = OpLoad %uint %e
-         %78 = OpINotEqual %bool %77 %uint_1
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %79
-         %80 = OpLabel
-               OpStore %e %uint_1
-               OpBranch %79
-         %79 = OpLabel
-         %81 = OpLoad %uint %f
-         %82 = OpINotEqual %bool %81 %uint_0
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-               OpStore %f %uint_0
-               OpBranch %83
-         %83 = OpLabel
-         %85 = OpLoad %uint %a
-         %86 = OpLoad %uint %b
-         %87 = OpLoad %uint %c
-         %88 = OpLoad %uint %d
-         %89 = OpLoad %uint %e
-         %90 = OpLoad %uint %f
-         %91 = OpIEqual %bool %85 %uint_1
-         %92 = OpIEqual %bool %86 %uint_0
-         %93 = OpLogicalAnd %bool %91 %92
-         %94 = OpIEqual %bool %87 %uint_1
-         %95 = OpLogicalAnd %bool %93 %94
-         %96 = OpIEqual %bool %88 %uint_0
-         %97 = OpLogicalAnd %bool %95 %96
-         %98 = OpIEqual %bool %89 %uint_1
-         %99 = OpLogicalAnd %bool %97 %98
-        %100 = OpIEqual %bool %90 %uint_0
-        %101 = OpLogicalAnd %bool %99 %100
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpStore %x_GLF_color %107
-               OpBranch %102
-        %104 = OpLabel
-               OpStore %x_GLF_color %108
-               OpBranch %102
-        %102 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %109
-        %112 = OpLabel
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %117 = OpLabel
-        %118 = OpFunctionCall %main_out %main_inner
-        %119 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %119
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.wgsl
deleted file mode 100644
index 02b3570..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-[[block]]
-struct buf0 {
-  one : u32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var b : u32;
-  var c : u32;
-  var d : u32;
-  var e : u32;
-  var f : u32;
-  let x_41 : u32 = x_6.one;
-  a = ((77u + x_41) >> 32u);
-  let x_45 : u32 = x_6.one;
-  b = ((3243u + x_45) >> 33u);
-  let x_49 : u32 = x_6.one;
-  c = ((23u + x_49) >> 345u);
-  let x_53 : u32 = x_6.one;
-  d = ((2395u + x_53) << 32u);
-  let x_57 : u32 = x_6.one;
-  e = ((290485u + x_57) << 33u);
-  let x_61 : u32 = x_6.one;
-  f = ((44321u + x_61) << 345u);
-  let x_64 : u32 = a;
-  if ((x_64 != 1u)) {
-    a = 1u;
-  }
-  let x_68 : u32 = b;
-  if ((x_68 != 0u)) {
-    b = 0u;
-  }
-  let x_72 : u32 = c;
-  if ((x_72 != 1u)) {
-    c = 1u;
-  }
-  let x_76 : u32 = d;
-  if ((x_76 != 0u)) {
-    d = 0u;
-  }
-  let x_80 : u32 = e;
-  if ((x_80 != 1u)) {
-    e = 1u;
-  }
-  let x_84 : u32 = f;
-  if ((x_84 != 0u)) {
-    f = 0u;
-  }
-  let x_88 : u32 = a;
-  let x_90 : u32 = b;
-  let x_93 : u32 = c;
-  let x_96 : u32 = d;
-  let x_99 : u32 = e;
-  let x_102 : u32 = f;
-  if (((((((x_88 == 1u) & (x_90 == 0u)) & (x_93 == 1u)) & (x_96 == 0u)) & (x_99 == 1u)) & (x_102 == 0u))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.hlsl
deleted file mode 100644
index e7757a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,89 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  uint b = 0u;
-  uint c = 0u;
-  uint d = 0u;
-  uint e = 0u;
-  uint f = 0u;
-  const uint x_41 = x_6[0].x;
-  a = ((77u + x_41) >> 32u);
-  const uint x_45 = x_6[0].x;
-  b = ((3243u + x_45) >> 33u);
-  const uint x_49 = x_6[0].x;
-  c = ((23u + x_49) >> 345u);
-  const uint x_53 = x_6[0].x;
-  d = ((2395u + x_53) << 32u);
-  const uint x_57 = x_6[0].x;
-  e = ((290485u + x_57) << 33u);
-  const uint x_61 = x_6[0].x;
-  f = ((44321u + x_61) << 345u);
-  if ((a != 1u)) {
-    a = 1u;
-  }
-  if ((b != 0u)) {
-    b = 0u;
-  }
-  if ((c != 1u)) {
-    c = 1u;
-  }
-  if ((d != 0u)) {
-    d = 0u;
-  }
-  if ((e != 1u)) {
-    e = 1u;
-  }
-  if ((f != 0u)) {
-    f = 0u;
-  }
-  bool tint_tmp_4 = (a == 1u);
-  if (tint_tmp_4) {
-    tint_tmp_4 = (b == 0u);
-  }
-  bool tint_tmp_3 = (tint_tmp_4);
-  if (tint_tmp_3) {
-    tint_tmp_3 = (c == 1u);
-  }
-  bool tint_tmp_2 = (tint_tmp_3);
-  if (tint_tmp_2) {
-    tint_tmp_2 = (d == 0u);
-  }
-  bool tint_tmp_1 = (tint_tmp_2);
-  if (tint_tmp_1) {
-    tint_tmp_1 = (e == 1u);
-  }
-  bool tint_tmp = (tint_tmp_1);
-  if (tint_tmp) {
-    tint_tmp = (f == 0u);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.msl
deleted file mode 100644
index e0dab88..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ uint one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  uint b = 0u;
-  uint c = 0u;
-  uint d = 0u;
-  uint e = 0u;
-  uint f = 0u;
-  uint const x_41 = x_6.one;
-  a = ((77u + x_41) >> 32u);
-  uint const x_45 = x_6.one;
-  b = ((3243u + x_45) >> 33u);
-  uint const x_49 = x_6.one;
-  c = ((23u + x_49) >> 345u);
-  uint const x_53 = x_6.one;
-  d = ((2395u + x_53) << 32u);
-  uint const x_57 = x_6.one;
-  e = ((290485u + x_57) << 33u);
-  uint const x_61 = x_6.one;
-  f = ((44321u + x_61) << 345u);
-  uint const x_64 = a;
-  if ((x_64 != 1u)) {
-    a = 1u;
-  }
-  uint const x_68 = b;
-  if ((x_68 != 0u)) {
-    b = 0u;
-  }
-  uint const x_72 = c;
-  if ((x_72 != 1u)) {
-    c = 1u;
-  }
-  uint const x_76 = d;
-  if ((x_76 != 0u)) {
-    d = 0u;
-  }
-  uint const x_80 = e;
-  if ((x_80 != 1u)) {
-    e = 1u;
-  }
-  uint const x_84 = f;
-  if ((x_84 != 0u)) {
-    f = 0u;
-  }
-  uint const x_88 = a;
-  uint const x_90 = b;
-  uint const x_93 = c;
-  uint const x_96 = d;
-  uint const x_99 = e;
-  uint const x_102 = f;
-  if (((((((x_88 == 1u) && (x_90 == 0u)) && (x_93 == 1u)) && (x_96 == 0u)) && (x_99 == 1u)) && (x_102 == 0u))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.spvasm
deleted file mode 100644
index a2b34a0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,219 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %e "e"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-       %buf0 = OpTypeStruct %uint
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %18 = OpConstantNull %uint
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-    %uint_77 = OpConstant %uint 77
-    %uint_32 = OpConstant %uint 32
-  %uint_3243 = OpConstant %uint 3243
-    %uint_33 = OpConstant %uint 33
-    %uint_23 = OpConstant %uint 23
-   %uint_345 = OpConstant %uint 345
-  %uint_2395 = OpConstant %uint 2395
-%uint_290485 = OpConstant %uint 290485
- %uint_44321 = OpConstant %uint 44321
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %117 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %118 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %18
-          %b = OpVariable %_ptr_Function_uint Function %18
-          %c = OpVariable %_ptr_Function_uint Function %18
-          %d = OpVariable %_ptr_Function_uint Function %18
-          %e = OpVariable %_ptr_Function_uint Function %18
-          %f = OpVariable %_ptr_Function_uint Function %18
-         %26 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %27 = OpLoad %uint %26
-         %29 = OpIAdd %uint %uint_77 %27
-         %31 = OpShiftRightLogical %uint %29 %uint_32
-               OpStore %a %31
-         %32 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %33 = OpLoad %uint %32
-         %35 = OpIAdd %uint %uint_3243 %33
-         %37 = OpShiftRightLogical %uint %35 %uint_33
-               OpStore %b %37
-         %38 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %39 = OpLoad %uint %38
-         %41 = OpIAdd %uint %uint_23 %39
-         %43 = OpShiftRightLogical %uint %41 %uint_345
-               OpStore %c %43
-         %44 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %45 = OpLoad %uint %44
-         %47 = OpIAdd %uint %uint_2395 %45
-         %48 = OpShiftLeftLogical %uint %47 %uint_32
-               OpStore %d %48
-         %49 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %50 = OpLoad %uint %49
-         %52 = OpIAdd %uint %uint_290485 %50
-         %53 = OpShiftLeftLogical %uint %52 %uint_33
-               OpStore %e %53
-         %54 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %55 = OpLoad %uint %54
-         %57 = OpIAdd %uint %uint_44321 %55
-         %58 = OpShiftLeftLogical %uint %57 %uint_345
-               OpStore %f %58
-         %59 = OpLoad %uint %a
-         %61 = OpINotEqual %bool %59 %uint_1
-               OpSelectionMerge %63 None
-               OpBranchConditional %61 %64 %63
-         %64 = OpLabel
-               OpStore %a %uint_1
-               OpBranch %63
-         %63 = OpLabel
-         %65 = OpLoad %uint %b
-         %66 = OpINotEqual %bool %65 %uint_0
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-               OpStore %b %uint_0
-               OpBranch %67
-         %67 = OpLabel
-         %69 = OpLoad %uint %c
-         %70 = OpINotEqual %bool %69 %uint_1
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %71
-         %72 = OpLabel
-               OpStore %c %uint_1
-               OpBranch %71
-         %71 = OpLabel
-         %73 = OpLoad %uint %d
-         %74 = OpINotEqual %bool %73 %uint_0
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-               OpStore %d %uint_0
-               OpBranch %75
-         %75 = OpLabel
-         %77 = OpLoad %uint %e
-         %78 = OpINotEqual %bool %77 %uint_1
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %79
-         %80 = OpLabel
-               OpStore %e %uint_1
-               OpBranch %79
-         %79 = OpLabel
-         %81 = OpLoad %uint %f
-         %82 = OpINotEqual %bool %81 %uint_0
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-               OpStore %f %uint_0
-               OpBranch %83
-         %83 = OpLabel
-         %85 = OpLoad %uint %a
-         %86 = OpLoad %uint %b
-         %87 = OpLoad %uint %c
-         %88 = OpLoad %uint %d
-         %89 = OpLoad %uint %e
-         %90 = OpLoad %uint %f
-         %91 = OpIEqual %bool %85 %uint_1
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %92
-         %93 = OpLabel
-         %94 = OpIEqual %bool %86 %uint_0
-               OpBranch %92
-         %92 = OpLabel
-         %95 = OpPhi %bool %91 %83 %94 %93
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %96
-         %97 = OpLabel
-         %98 = OpIEqual %bool %87 %uint_1
-               OpBranch %96
-         %96 = OpLabel
-         %99 = OpPhi %bool %95 %92 %98 %97
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %100
-        %101 = OpLabel
-        %102 = OpIEqual %bool %88 %uint_0
-               OpBranch %100
-        %100 = OpLabel
-        %103 = OpPhi %bool %99 %96 %102 %101
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %104
-        %105 = OpLabel
-        %106 = OpIEqual %bool %89 %uint_1
-               OpBranch %104
-        %104 = OpLabel
-        %107 = OpPhi %bool %103 %100 %106 %105
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %108
-        %109 = OpLabel
-        %110 = OpIEqual %bool %90 %uint_0
-               OpBranch %108
-        %108 = OpLabel
-        %111 = OpPhi %bool %107 %104 %110 %109
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %114
-        %113 = OpLabel
-               OpStore %x_GLF_color %117
-               OpBranch %112
-        %114 = OpLabel
-               OpStore %x_GLF_color %118
-               OpBranch %112
-        %112 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.wgsl
deleted file mode 100644
index ec6d634..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-gte32/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-[[block]]
-struct buf0 {
-  one : u32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var b : u32;
-  var c : u32;
-  var d : u32;
-  var e : u32;
-  var f : u32;
-  let x_41 : u32 = x_6.one;
-  a = ((77u + x_41) >> 32u);
-  let x_45 : u32 = x_6.one;
-  b = ((3243u + x_45) >> 33u);
-  let x_49 : u32 = x_6.one;
-  c = ((23u + x_49) >> 345u);
-  let x_53 : u32 = x_6.one;
-  d = ((2395u + x_53) << 32u);
-  let x_57 : u32 = x_6.one;
-  e = ((290485u + x_57) << 33u);
-  let x_61 : u32 = x_6.one;
-  f = ((44321u + x_61) << 345u);
-  let x_64 : u32 = a;
-  if ((x_64 != 1u)) {
-    a = 1u;
-  }
-  let x_68 : u32 = b;
-  if ((x_68 != 0u)) {
-    b = 0u;
-  }
-  let x_72 : u32 = c;
-  if ((x_72 != 1u)) {
-    c = 1u;
-  }
-  let x_76 : u32 = d;
-  if ((x_76 != 0u)) {
-    d = 0u;
-  }
-  let x_80 : u32 = e;
-  if ((x_80 != 1u)) {
-    e = 1u;
-  }
-  let x_84 : u32 = f;
-  if ((x_84 != 0u)) {
-    f = 0u;
-  }
-  let x_88 : u32 = a;
-  let x_90 : u32 = b;
-  let x_93 : u32 = c;
-  let x_96 : u32 = d;
-  let x_99 : u32 = e;
-  let x_102 : u32 = f;
-  if (((((((x_88 == 1u) && (x_90 == 0u)) && (x_93 == 1u)) && (x_96 == 0u)) && (x_99 == 1u)) && (x_102 == 0u))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.hlsl
deleted file mode 100644
index d834ffb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  i = 5;
-  if (((i >> asuint(1)) != 2)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.msl
deleted file mode 100644
index 5d0c7cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  i = 5;
-  int const x_5 = i;
-  if (((x_5 >> as_type<uint>(1)) != 2)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.spvasm
deleted file mode 100644
index 18dfe48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_5 = OpConstant %int 5
-       %uint = OpTypeInt 32 0
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-               OpStore %i %int_5
-         %17 = OpLoad %int %i
-         %18 = OpBitcast %uint %int_1
-         %21 = OpShiftRightArithmetic %int %17 %18
-         %23 = OpINotEqual %bool %21 %int_2
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %29
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.wgsl
deleted file mode 100644
index f04d8e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  i = 5;
-  let x_5 : i32 = i;
-  if (((x_5 >> bitcast<u32>(1)) != 2)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.hlsl
deleted file mode 100644
index d834ffb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  i = 5;
-  if (((i >> asuint(1)) != 2)) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.msl
deleted file mode 100644
index 5d0c7cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  i = 5;
-  int const x_5 = i;
-  if (((x_5 >> as_type<uint>(1)) != 2)) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.spvasm
deleted file mode 100644
index 18dfe48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,75 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_5 = OpConstant %int 5
-       %uint = OpTypeInt 32 0
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-               OpStore %i %int_5
-         %17 = OpLoad %int %i
-         %18 = OpBitcast %uint %int_1
-         %21 = OpShiftRightArithmetic %int %17 %18
-         %23 = OpINotEqual %bool %21 %int_2
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpStore %x_GLF_color %29
-               OpBranch %25
-         %27 = OpLabel
-               OpStore %x_GLF_color %31
-               OpBranch %25
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.wgsl
deleted file mode 100644
index f04d8e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-shift-right-arithmetic/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  i = 5;
-  let x_5 : i32 = i;
-  if (((x_5 >> bitcast<u32>(1)) != 2)) {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.hlsl
deleted file mode 100644
index 1bb0cbc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  a = 4u;
-  switch((a / 2u)) {
-    case 2u: {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-    default: {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.msl
deleted file mode 100644
index 554f9d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  a = 4u;
-  uint const x_5 = a;
-  switch((x_5 / 2u)) {
-    case 2u: {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-    default: {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.spvasm
deleted file mode 100644
index b08e603..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,70 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %15 = OpConstantNull %uint
-     %uint_4 = OpConstant %uint 4
-     %uint_2 = OpConstant %uint 2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %26 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %27 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %15
-               OpStore %a %uint_4
-         %17 = OpLoad %uint %a
-         %20 = OpUDiv %uint %17 %uint_2
-               OpSelectionMerge %18 None
-               OpSwitch %20 %21 2 %22
-         %22 = OpLabel
-               OpStore %x_GLF_color %25
-               OpBranch %18
-         %21 = OpLabel
-               OpStore %x_GLF_color %26
-               OpBranch %18
-         %18 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %27
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %main_1
-         %32 = OpLoad %v4float %x_GLF_color
-         %33 = OpCompositeConstruct %main_out %32
-               OpReturnValue %33
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %35 = OpLabel
-         %36 = OpFunctionCall %main_out %main_inner
-         %37 = OpCompositeExtract %v4float %36 0
-               OpStore %x_GLF_color_1_1 %37
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.wgsl
deleted file mode 100644
index be6fc47..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  a = 4u;
-  let x_5 : u32 = a;
-  switch((x_5 / 2u)) {
-    case 2u: {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-    default: {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.hlsl
deleted file mode 100644
index 1bb0cbc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  a = 4u;
-  switch((a / 2u)) {
-    case 2u: {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-    default: {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.msl
deleted file mode 100644
index 554f9d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  a = 4u;
-  uint const x_5 = a;
-  switch((x_5 / 2u)) {
-    case 2u: {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-    default: {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.spvasm
deleted file mode 100644
index b08e603..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,70 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %15 = OpConstantNull %uint
-     %uint_4 = OpConstant %uint 4
-     %uint_2 = OpConstant %uint 2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %26 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %27 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %15
-               OpStore %a %uint_4
-         %17 = OpLoad %uint %a
-         %20 = OpUDiv %uint %17 %uint_2
-               OpSelectionMerge %18 None
-               OpSwitch %20 %21 2 %22
-         %22 = OpLabel
-               OpStore %x_GLF_color %25
-               OpBranch %18
-         %21 = OpLabel
-               OpStore %x_GLF_color %26
-               OpBranch %18
-         %18 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %27
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %main_1
-         %32 = OpLoad %v4float %x_GLF_color
-         %33 = OpCompositeConstruct %main_out %32
-               OpReturnValue %33
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %35 = OpLabel
-         %36 = OpFunctionCall %main_out %main_inner
-         %37 = OpCompositeExtract %v4float %36 0
-               OpStore %x_GLF_color_1_1 %37
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.wgsl
deleted file mode 100644
index be6fc47..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fold-switch-udiv/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  a = 4u;
-  let x_5 : u32 = a;
-  switch((x_5 / 2u)) {
-    case 2u: {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-    default: {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e2cd955..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  f = 1.0f;
-  while (true) {
-    const float x_31 = asfloat(x_6[0].x);
-    f = (f + x_31);
-    {
-      const float x_34 = f;
-      const float x_36 = asfloat(x_6[0].x);
-      if ((10.0f > clamp(x_34, 8.0f, (9.0f + x_36)))) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((f == 10.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2ec6d4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  f = 1.0f;
-  while (true) {
-    float const x_31 = x_6.one;
-    float const x_32 = f;
-    f = (x_32 + x_31);
-    {
-      float const x_34 = f;
-      float const x_36 = x_6.one;
-      if ((10.0f > clamp(x_34, 8.0f, (9.0f + x_36)))) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_40 = f;
-  if ((x_40 == 10.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1cc4981..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_10 = OpConstant %float 10
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %48 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-               OpStore %f %float_1
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %26 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %27 = OpLoad %float %26
-         %28 = OpLoad %float %f
-         %29 = OpFAdd %float %28 %27
-               OpStore %f %29
-               OpBranch %21
-         %21 = OpLabel
-         %30 = OpLoad %float %f
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %32 = OpLoad %float %31
-         %38 = OpFAdd %float %float_9 %32
-         %34 = OpExtInst %float %35 NClamp %30 %float_8 %38
-         %39 = OpFOrdGreaterThan %bool %float_10 %34
-               OpBranchConditional %39 %19 %20
-         %20 = OpLabel
-         %41 = OpLoad %float %f
-         %42 = OpFOrdEqual %bool %41 %float_10
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %43
-         %45 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8478100..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  f = 1.0;
-  loop {
-    let x_31 : f32 = x_6.one;
-    let x_32 : f32 = f;
-    f = (x_32 + x_31);
-
-    continuing {
-      let x_34 : f32 = f;
-      let x_36 : f32 = x_6.one;
-      if ((10.0 > clamp(x_34, 8.0, (9.0 + x_36)))) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_40 : f32 = f;
-  if ((x_40 == 10.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e2cd955..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  f = 1.0f;
-  while (true) {
-    const float x_31 = asfloat(x_6[0].x);
-    f = (f + x_31);
-    {
-      const float x_34 = f;
-      const float x_36 = asfloat(x_6[0].x);
-      if ((10.0f > clamp(x_34, 8.0f, (9.0f + x_36)))) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((f == 10.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2ec6d4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  f = 1.0f;
-  while (true) {
-    float const x_31 = x_6.one;
-    float const x_32 = f;
-    f = (x_32 + x_31);
-    {
-      float const x_34 = f;
-      float const x_36 = x_6.one;
-      if ((10.0f > clamp(x_34, 8.0f, (9.0f + x_36)))) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_40 = f;
-  if ((x_40 == 10.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1cc4981..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_10 = OpConstant %float 10
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %48 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-               OpStore %f %float_1
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %26 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %27 = OpLoad %float %26
-         %28 = OpLoad %float %f
-         %29 = OpFAdd %float %28 %27
-               OpStore %f %29
-               OpBranch %21
-         %21 = OpLabel
-         %30 = OpLoad %float %f
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %32 = OpLoad %float %31
-         %38 = OpFAdd %float %float_9 %32
-         %34 = OpExtInst %float %35 NClamp %30 %float_8 %38
-         %39 = OpFOrdGreaterThan %bool %float_10 %34
-               OpBranchConditional %39 %19 %20
-         %20 = OpLabel
-         %41 = OpLoad %float %f
-         %42 = OpFOrdEqual %bool %41 %float_10
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %43
-         %45 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8478100..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-clamp-cmp-const-first/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  f = 1.0;
-  loop {
-    let x_31 : f32 = x_6.one;
-    let x_32 : f32 = f;
-    f = (x_32 + x_31);
-
-    continuing {
-      let x_34 : f32 = f;
-      let x_36 : f32 = x_6.one;
-      if ((10.0 > clamp(x_34, 8.0, (9.0 + x_36)))) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_40 : f32 = f;
-  if ((x_40 == 10.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index afc442c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_24 = asint(x_5[0].x);
-  if (((1 + (3 - x_24)) == 3)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7bab12f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_24 = x_5.one;
-  if ((as_type<int>((as_type<uint>(1) + as_type<uint>(as_type<int>((as_type<uint>(3) - as_type<uint>(x_24)))))) == 3)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a5d3ed4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %34 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %23 = OpISub %int %int_3 %20
-         %24 = OpIAdd %int %int_1 %23
-         %25 = OpIEqual %bool %24 %int_3
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %29
-         %28 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %27
-         %29 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %34
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %42 = OpLabel
-         %43 = OpFunctionCall %main_out %main_inner
-         %44 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %44
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ed61556..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_24 : i32 = x_5.one;
-  if (((1 + (3 - x_24)) == 3)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index afc442c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_24 = asint(x_5[0].x);
-  if (((1 + (3 - x_24)) == 3)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7bab12f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_24 = x_5.one;
-  if ((as_type<int>((as_type<uint>(1) + as_type<uint>(as_type<int>((as_type<uint>(3) - as_type<uint>(x_24)))))) == 3)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a5d3ed4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %34 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %23 = OpISub %int %int_3 %20
-         %24 = OpIAdd %int %int_1 %23
-         %25 = OpIEqual %bool %24 %int_3
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %29
-         %28 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %27
-         %29 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %34
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %42 = OpLabel
-         %43 = OpFunctionCall %main_out %main_inner
-         %44 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %44
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ed61556..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-merge-add-sub-uniform/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_24 : i32 = x_5.one;
-  if (((1 + (3 - x_24)) == 3)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4b3b566..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 a = float2(0.0f, 0.0f);
-  float2 b = float2(0.0f, 0.0f);
-  bool x_46 = false;
-  bool x_47_phi = false;
-  const float2 x_32 = asfloat(x_6[0].xy);
-  a = x_32;
-  const float x_34 = a.x;
-  b = float2(x_34, clamp(a, float2(1.0f, 1.0f), float2(1.0f, 1.0f)).y);
-  const float x_40 = b.x;
-  const bool x_41 = (x_40 == 2.0f);
-  x_47_phi = x_41;
-  if (x_41) {
-    const float x_45 = b.y;
-    x_46 = (x_45 == 1.0f);
-    x_47_phi = x_46;
-  }
-  if (x_47_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.msl
deleted file mode 100644
index 88f980b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 twoandthree;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 a = 0.0f;
-  float2 b = 0.0f;
-  bool x_46 = false;
-  bool x_47_phi = false;
-  float2 const x_32 = x_6.twoandthree;
-  a = x_32;
-  float const x_34 = a.x;
-  float2 const x_35 = a;
-  b = float2(x_34, clamp(x_35, float2(1.0f, 1.0f), float2(1.0f, 1.0f)).y);
-  float const x_40 = b.x;
-  bool const x_41 = (x_40 == 2.0f);
-  x_47_phi = x_41;
-  if (x_41) {
-    float const x_45 = b.y;
-    x_46 = (x_45 == 1.0f);
-    x_47_phi = x_46;
-  }
-  bool const x_47 = x_47_phi;
-  if (x_47) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2791bce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,119 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "twoandthree"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_46 "x_46"
-               OpName %x_47_phi "x_47_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %23 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-         %37 = OpConstantComposite %v2float %float_1 %float_1
-    %float_2 = OpConstant %float 2
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %57 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_v2float Function %18
-          %b = OpVariable %_ptr_Function_v2float Function %18
-       %x_46 = OpVariable %_ptr_Function_bool Function %23
-   %x_47_phi = OpVariable %_ptr_Function_bool Function %23
-         %28 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %29 = OpLoad %v2float %28
-               OpStore %a %29
-         %31 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %32 = OpLoad %float %31
-         %33 = OpLoad %v2float %a
-         %34 = OpExtInst %v2float %35 NClamp %33 %37 %37
-         %38 = OpCompositeExtract %float %34 1
-         %39 = OpCompositeConstruct %v2float %32 %38
-               OpStore %b %39
-         %40 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %41 = OpLoad %float %40
-         %43 = OpFOrdEqual %bool %41 %float_2
-               OpStore %x_47_phi %43
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %48 = OpLoad %float %47
-         %49 = OpFOrdEqual %bool %48 %float_1
-               OpStore %x_46 %49
-         %50 = OpLoad %bool %x_46
-               OpStore %x_47_phi %50
-               OpBranch %44
-         %44 = OpLabel
-         %51 = OpLoad %bool %x_47_phi
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %52
-         %54 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %52
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index dc6b0c4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-[[block]]
-struct buf0 {
-  twoandthree : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec2<f32>;
-  var b : vec2<f32>;
-  var x_46 : bool;
-  var x_47_phi : bool;
-  let x_32 : vec2<f32> = x_6.twoandthree;
-  a = x_32;
-  let x_34 : f32 = a.x;
-  let x_35 : vec2<f32> = a;
-  b = vec2<f32>(x_34, clamp(x_35, vec2<f32>(1.0, 1.0), vec2<f32>(1.0, 1.0)).y);
-  let x_40 : f32 = b.x;
-  let x_41 : bool = (x_40 == 2.0);
-  x_47_phi = x_41;
-  if (x_41) {
-    let x_45 : f32 = b.y;
-    x_46 = (x_45 == 1.0);
-    x_47_phi = x_46;
-  }
-  let x_47 : bool = x_47_phi;
-  if (x_47) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4b3b566..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 a = float2(0.0f, 0.0f);
-  float2 b = float2(0.0f, 0.0f);
-  bool x_46 = false;
-  bool x_47_phi = false;
-  const float2 x_32 = asfloat(x_6[0].xy);
-  a = x_32;
-  const float x_34 = a.x;
-  b = float2(x_34, clamp(a, float2(1.0f, 1.0f), float2(1.0f, 1.0f)).y);
-  const float x_40 = b.x;
-  const bool x_41 = (x_40 == 2.0f);
-  x_47_phi = x_41;
-  if (x_41) {
-    const float x_45 = b.y;
-    x_46 = (x_45 == 1.0f);
-    x_47_phi = x_46;
-  }
-  if (x_47_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.msl
deleted file mode 100644
index 88f980b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 twoandthree;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 a = 0.0f;
-  float2 b = 0.0f;
-  bool x_46 = false;
-  bool x_47_phi = false;
-  float2 const x_32 = x_6.twoandthree;
-  a = x_32;
-  float const x_34 = a.x;
-  float2 const x_35 = a;
-  b = float2(x_34, clamp(x_35, float2(1.0f, 1.0f), float2(1.0f, 1.0f)).y);
-  float const x_40 = b.x;
-  bool const x_41 = (x_40 == 2.0f);
-  x_47_phi = x_41;
-  if (x_41) {
-    float const x_45 = b.y;
-    x_46 = (x_45 == 1.0f);
-    x_47_phi = x_46;
-  }
-  bool const x_47 = x_47_phi;
-  if (x_47) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2791bce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,119 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-         %35 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "twoandthree"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_46 "x_46"
-               OpName %x_47_phi "x_47_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %23 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-         %37 = OpConstantComposite %v2float %float_1 %float_1
-    %float_2 = OpConstant %float 2
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %57 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_v2float Function %18
-          %b = OpVariable %_ptr_Function_v2float Function %18
-       %x_46 = OpVariable %_ptr_Function_bool Function %23
-   %x_47_phi = OpVariable %_ptr_Function_bool Function %23
-         %28 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %29 = OpLoad %v2float %28
-               OpStore %a %29
-         %31 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %32 = OpLoad %float %31
-         %33 = OpLoad %v2float %a
-         %34 = OpExtInst %v2float %35 NClamp %33 %37 %37
-         %38 = OpCompositeExtract %float %34 1
-         %39 = OpCompositeConstruct %v2float %32 %38
-               OpStore %b %39
-         %40 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %41 = OpLoad %float %40
-         %43 = OpFOrdEqual %bool %41 %float_2
-               OpStore %x_47_phi %43
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %48 = OpLoad %float %47
-         %49 = OpFOrdEqual %bool %48 %float_1
-               OpStore %x_46 %49
-         %50 = OpLoad %bool %x_46
-               OpStore %x_47_phi %50
-               OpBranch %44
-         %44 = OpLabel
-         %51 = OpLoad %bool %x_47_phi
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %52
-         %54 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %52
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index dc6b0c4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-construct-extract/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-[[block]]
-struct buf0 {
-  twoandthree : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec2<f32>;
-  var b : vec2<f32>;
-  var x_46 : bool;
-  var x_47_phi : bool;
-  let x_32 : vec2<f32> = x_6.twoandthree;
-  a = x_32;
-  let x_34 : f32 = a.x;
-  let x_35 : vec2<f32> = a;
-  b = vec2<f32>(x_34, clamp(x_35, vec2<f32>(1.0, 1.0), vec2<f32>(1.0, 1.0)).y);
-  let x_40 : f32 = b.x;
-  let x_41 : bool = (x_40 == 2.0);
-  x_47_phi = x_41;
-  if (x_41) {
-    let x_45 : f32 = b.y;
-    x_46 = (x_45 == 1.0);
-    x_47_phi = x_46;
-  }
-  let x_47 : bool = x_47_phi;
-  if (x_47) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0764c7e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_25 = asfloat(x_5[0].x);
-  if ((dot(float4(1.0f, 2.0f, x_25, 4.0f), float4(0.0f, 1.0f, 0.0f, 0.0f)) == 2.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0b7f9cc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_25 = x_5.three;
-  if ((dot(float4(1.0f, 2.0f, x_25, 4.0f), float4(0.0f, 1.0f, 0.0f, 0.0f)) == 2.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 89884c7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_4 = OpConstant %float 4
-    %float_0 = OpConstant %float 0
-         %26 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_0
-       %bool = OpTypeBool
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %34 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %19 = OpLoad %float %18
-         %24 = OpCompositeConstruct %v4float %float_1 %float_2 %19 %float_4
-         %20 = OpDot %float %24 %26
-         %27 = OpFOrdEqual %bool %20 %float_2
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %29
-         %31 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %34
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %42 = OpLabel
-         %43 = OpFunctionCall %main_out %main_inner
-         %44 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %44
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index da33dc4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  three : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_25 : f32 = x_5.three;
-  if ((dot(vec4<f32>(1.0, 2.0, x_25, 4.0), vec4<f32>(0.0, 1.0, 0.0, 0.0)) == 2.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0764c7e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_25 = asfloat(x_5[0].x);
-  if ((dot(float4(1.0f, 2.0f, x_25, 4.0f), float4(0.0f, 1.0f, 0.0f, 0.0f)) == 2.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0b7f9cc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_25 = x_5.three;
-  if ((dot(float4(1.0f, 2.0f, x_25, 4.0f), float4(0.0f, 1.0f, 0.0f, 0.0f)) == 2.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 89884c7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_4 = OpConstant %float 4
-    %float_0 = OpConstant %float 0
-         %26 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_0
-       %bool = OpTypeBool
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %34 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %19 = OpLoad %float %18
-         %24 = OpCompositeConstruct %v4float %float_1 %float_2 %19 %float_4
-         %20 = OpDot %float %24 %26
-         %27 = OpFOrdEqual %bool %20 %float_2
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %29
-         %31 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %34
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %42 = OpLabel
-         %43 = OpFunctionCall %main_out %main_inner
-         %44 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %44
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index da33dc4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-extract/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  three : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_25 : f32 = x_5.three;
-  if ((dot(vec4<f32>(1.0, 2.0, x_25, 4.0), vec4<f32>(0.0, 1.0, 0.0, 0.0)) == 2.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.hlsl
deleted file mode 100644
index e55072b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_26 = asfloat(x_5[0].x);
-  if ((dot(float2(2.0f, x_26), float2(0.0f, 2.0f)) == 6.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.msl
deleted file mode 100644
index 5b5062d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_26 = x_5.three;
-  if ((dot(float2(2.0f, x_26), float2(0.0f, 2.0f)) == 6.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.spvasm
deleted file mode 100644
index 4bb2e2f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v2float %float_0 %float_2
-    %float_6 = OpConstant %float 6
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %34 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %35 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %19 = OpLoad %float %18
-         %23 = OpCompositeConstruct %v2float %float_2 %19
-         %20 = OpDot %float %23 %25
-         %27 = OpFOrdEqual %bool %20 %float_6
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %29
-         %31 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %35
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-         %40 = OpLoad %v4float %x_GLF_color
-         %41 = OpCompositeConstruct %main_out %40
-               OpReturnValue %41
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %43 = OpLabel
-         %44 = OpFunctionCall %main_out %main_inner
-         %45 = OpCompositeExtract %v4float %44 0
-               OpStore %x_GLF_color_1_1 %45
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.wgsl
deleted file mode 100644
index b9c222e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  three : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_26 : f32 = x_5.three;
-  if ((dot(vec2<f32>(2.0, x_26), vec2<f32>(0.0, 2.0)) == 6.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.hlsl
deleted file mode 100644
index e55072b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_26 = asfloat(x_5[0].x);
-  if ((dot(float2(2.0f, x_26), float2(0.0f, 2.0f)) == 6.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.msl
deleted file mode 100644
index 5b5062d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_26 = x_5.three;
-  if ((dot(float2(2.0f, x_26), float2(0.0f, 2.0f)) == 6.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.spvasm
deleted file mode 100644
index 4bb2e2f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %v2float = OpTypeVector %float 2
-    %float_2 = OpConstant %float 2
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v2float %float_0 %float_2
-    %float_6 = OpConstant %float 6
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %34 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %35 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %19 = OpLoad %float %18
-         %23 = OpCompositeConstruct %v2float %float_2 %19
-         %20 = OpDot %float %23 %25
-         %27 = OpFOrdEqual %bool %20 %float_6
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %29
-         %31 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %35
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-         %40 = OpLoad %v4float %x_GLF_color
-         %41 = OpCompositeConstruct %main_out %40
-               OpReturnValue %41
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %43 = OpLabel
-         %44 = OpFunctionCall %main_out %main_inner
-         %45 = OpCompositeExtract %v4float %44 0
-               OpStore %x_GLF_color_1_1 %45
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.wgsl
deleted file mode 100644
index b9c222e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-dot-no-extract/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  three : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_26 : f32 = x_5.three;
-  if ((dot(vec2<f32>(2.0, x_26), vec2<f32>(0.0, 2.0)) == 6.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0bc576c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  i = 5;
-  while (true) {
-    if ((i >= 0)) {
-    } else {
-      break;
-    }
-    i = (i - 3);
-    i = (i + 1);
-  }
-  if ((i == -1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1e79d7e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  i = 5;
-  while (true) {
-    int const x_5 = i;
-    if ((x_5 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_6 = i;
-    i = as_type<int>((as_type<uint>(x_6) - as_type<uint>(3)));
-    int const x_8 = i;
-    i = as_type<int>((as_type<uint>(x_8) + as_type<uint>(1)));
-  }
-  int const x_10 = i;
-  if ((x_10 == -1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6996dcd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,98 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_5 = OpConstant %int 5
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %42 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %43 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %44 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-               OpStore %i %int_5
-               OpBranch %17
-         %17 = OpLabel
-               OpLoopMerge %18 %19 None
-               OpBranch %20
-         %20 = OpLabel
-         %21 = OpLoad %int %i
-         %23 = OpSGreaterThanEqual %bool %21 %int_0
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpBranch %25
-         %27 = OpLabel
-               OpBranch %18
-         %25 = OpLabel
-         %28 = OpLoad %int %i
-         %30 = OpISub %int %28 %int_3
-               OpStore %i %30
-         %31 = OpLoad %int %i
-         %33 = OpIAdd %int %31 %int_1
-               OpStore %i %33
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %17
-         %18 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpIEqual %bool %34 %int_n1
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %39
-         %38 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %37
-         %39 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %v4float %x_GLF_color
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %52 = OpLabel
-         %53 = OpFunctionCall %main_out %main_inner
-         %54 = OpCompositeExtract %v4float %53 0
-               OpStore %x_GLF_color_1_1 %54
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 7c7b28a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  i = 5;
-  loop {
-    let x_5 : i32 = i;
-    if ((x_5 >= 0)) {
-    } else {
-      break;
-    }
-    let x_6 : i32 = i;
-    i = (x_6 - 3);
-    let x_8 : i32 = i;
-    i = (x_8 + 1);
-  }
-  let x_10 : i32 = i;
-  if ((x_10 == -1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0bc576c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  i = 5;
-  while (true) {
-    if ((i >= 0)) {
-    } else {
-      break;
-    }
-    i = (i - 3);
-    i = (i + 1);
-  }
-  if ((i == -1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1e79d7e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  i = 5;
-  while (true) {
-    int const x_5 = i;
-    if ((x_5 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_6 = i;
-    i = as_type<int>((as_type<uint>(x_6) - as_type<uint>(3)));
-    int const x_8 = i;
-    i = as_type<int>((as_type<uint>(x_8) + as_type<uint>(1)));
-  }
-  int const x_10 = i;
-  if ((x_10 == -1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6996dcd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,98 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_5 = OpConstant %int 5
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %42 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %43 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %44 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-               OpStore %i %int_5
-               OpBranch %17
-         %17 = OpLabel
-               OpLoopMerge %18 %19 None
-               OpBranch %20
-         %20 = OpLabel
-         %21 = OpLoad %int %i
-         %23 = OpSGreaterThanEqual %bool %21 %int_0
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %27
-         %26 = OpLabel
-               OpBranch %25
-         %27 = OpLabel
-               OpBranch %18
-         %25 = OpLabel
-         %28 = OpLoad %int %i
-         %30 = OpISub %int %28 %int_3
-               OpStore %i %30
-         %31 = OpLoad %int %i
-         %33 = OpIAdd %int %31 %int_1
-               OpStore %i %33
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %17
-         %18 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpIEqual %bool %34 %int_n1
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %39
-         %38 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %37
-         %39 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %v4float %x_GLF_color
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %52 = OpLabel
-         %53 = OpFunctionCall %main_out %main_inner
-         %54 = OpCompositeExtract %v4float %53 0
-               OpStore %x_GLF_color_1_1 %54
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7c7b28a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-add-sub/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  i = 5;
-  loop {
-    let x_5 : i32 = i;
-    if ((x_5 >= 0)) {
-    } else {
-      break;
-    }
-    let x_6 : i32 = i;
-    i = (x_6 - 3);
-    let x_8 : i32 = i;
-    i = (x_8 + 1);
-  }
-  let x_10 : i32 = i;
-  if ((x_10 == -1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f75ea26..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  const float x_28 = asfloat(x_6[0].x);
-  f = (4.0f / (2.0f * x_28));
-  if (((f > 1.899999976f) & (f < 2.099999905f))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5ff149d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float const x_28 = x_6.one;
-  f = (4.0f / (2.0f * x_28));
-  float const x_31 = f;
-  float const x_33 = f;
-  if (((x_31 > 1.899999976f) & (x_33 < 2.099999905f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4be3bd8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,93 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_4 = OpConstant %float 4
-    %float_2 = OpConstant %float 2
-%float_1_89999998 = OpConstant %float 1.89999998
-       %bool = OpTypeBool
-%float_2_0999999 = OpConstant %float 2.0999999
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %40 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %41 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %42 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-         %21 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %22 = OpLoad %float %21
-         %25 = OpFMul %float %float_2 %22
-         %26 = OpFDiv %float %float_4 %25
-               OpStore %f %26
-         %27 = OpLoad %float %f
-         %28 = OpLoad %float %f
-         %30 = OpFOrdGreaterThan %bool %27 %float_1_89999998
-         %33 = OpFOrdLessThan %bool %28 %float_2_0999999
-         %34 = OpLogicalAnd %bool %30 %33
-               OpSelectionMerge %35 None
-               OpBranchConditional %34 %36 %37
-         %36 = OpLabel
-               OpStore %x_GLF_color %40
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %41
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %42
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-         %47 = OpLoad %v4float %x_GLF_color
-         %48 = OpCompositeConstruct %main_out %47
-               OpReturnValue %48
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %50 = OpLabel
-         %51 = OpFunctionCall %main_out %main_inner
-         %52 = OpCompositeExtract %v4float %51 0
-               OpStore %x_GLF_color_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 59a8d67..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  let x_28 : f32 = x_6.one;
-  f = (4.0 / (2.0 * x_28));
-  let x_31 : f32 = f;
-  let x_33 : f32 = f;
-  if (((x_31 > 1.899999976) & (x_33 < 2.099999905))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index be8a7c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  const float x_28 = asfloat(x_6[0].x);
-  f = (4.0f / (2.0f * x_28));
-  bool tint_tmp = (f > 1.899999976f);
-  if (tint_tmp) {
-    tint_tmp = (f < 2.099999905f);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5dd96d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float const x_28 = x_6.one;
-  f = (4.0f / (2.0f * x_28));
-  float const x_31 = f;
-  float const x_33 = f;
-  if (((x_31 > 1.899999976f) && (x_33 < 2.099999905f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index cbf22d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,98 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_4 = OpConstant %float 4
-    %float_2 = OpConstant %float 2
-%float_1_89999998 = OpConstant %float 1.89999998
-       %bool = OpTypeBool
-%float_2_0999999 = OpConstant %float 2.0999999
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %42 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %43 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %44 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-         %21 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %22 = OpLoad %float %21
-         %25 = OpFMul %float %float_2 %22
-         %26 = OpFDiv %float %float_4 %25
-               OpStore %f %26
-         %27 = OpLoad %float %f
-         %28 = OpLoad %float %f
-         %30 = OpFOrdGreaterThan %bool %27 %float_1_89999998
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-         %35 = OpFOrdLessThan %bool %28 %float_2_0999999
-               OpBranch %32
-         %32 = OpLabel
-         %36 = OpPhi %bool %30 %14 %35 %33
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %39
-         %38 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %37
-         %39 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %v4float %x_GLF_color
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %52 = OpLabel
-         %53 = OpFunctionCall %main_out %main_inner
-         %54 = OpCompositeExtract %v4float %53 0
-               OpStore %x_GLF_color_1_1 %54
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5b77b48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-div-mul/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  let x_28 : f32 = x_6.one;
-  f = (4.0 / (2.0 * x_28));
-  let x_31 : f32 = f;
-  let x_33 : f32 = f;
-  if (((x_31 > 1.899999976) && (x_33 < 2.099999905))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 77d565c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  const float x_27 = asfloat(x_6[0].x);
-  a = (2.0f / (1.0f / x_27));
-  if (((a > 7.900000095f) & (a < 8.100000381f))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.msl
deleted file mode 100644
index e1fc734..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float four;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float const x_27 = x_6.four;
-  a = (2.0f / (1.0f / x_27));
-  float const x_30 = a;
-  float const x_32 = a;
-  if (((x_30 > 7.900000095f) & (x_32 < 8.100000381f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0a0d2b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "four"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-    %float_1 = OpConstant %float 1
-%float_7_9000001 = OpConstant %float 7.9000001
-       %bool = OpTypeBool
-%float_8_10000038 = OpConstant %float 8.10000038
-    %float_0 = OpConstant %float 0
-         %39 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %40 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %17
-         %21 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %22 = OpLoad %float %21
-         %25 = OpFDiv %float %float_1 %22
-         %26 = OpFDiv %float %float_2 %25
-               OpStore %a %26
-         %27 = OpLoad %float %a
-         %28 = OpLoad %float %a
-         %30 = OpFOrdGreaterThan %bool %27 %float_7_9000001
-         %33 = OpFOrdLessThan %bool %28 %float_8_10000038
-         %34 = OpLogicalAnd %bool %30 %33
-               OpSelectionMerge %35 None
-               OpBranchConditional %34 %36 %37
-         %36 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %40
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4d638ec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  four : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  let x_27 : f32 = x_6.four;
-  a = (2.0 / (1.0 / x_27));
-  let x_30 : f32 = a;
-  let x_32 : f32 = a;
-  if (((x_30 > 7.900000095) & (x_32 < 8.100000381))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3073223..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  const float x_27 = asfloat(x_6[0].x);
-  a = (2.0f / (1.0f / x_27));
-  bool tint_tmp = (a > 7.900000095f);
-  if (tint_tmp) {
-    tint_tmp = (a < 8.100000381f);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.msl
deleted file mode 100644
index 135239f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float four;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float const x_27 = x_6.four;
-  a = (2.0f / (1.0f / x_27));
-  float const x_30 = a;
-  float const x_32 = a;
-  if (((x_30 > 7.900000095f) && (x_32 < 8.100000381f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 63aee27..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,97 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "four"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-    %float_1 = OpConstant %float 1
-%float_7_9000001 = OpConstant %float 7.9000001
-       %bool = OpTypeBool
-%float_8_10000038 = OpConstant %float 8.10000038
-    %float_0 = OpConstant %float 0
-         %41 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %42 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %43 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %17
-         %21 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %22 = OpLoad %float %21
-         %25 = OpFDiv %float %float_1 %22
-         %26 = OpFDiv %float %float_2 %25
-               OpStore %a %26
-         %27 = OpLoad %float %a
-         %28 = OpLoad %float %a
-         %30 = OpFOrdGreaterThan %bool %27 %float_7_9000001
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-         %35 = OpFOrdLessThan %bool %28 %float_8_10000038
-               OpBranch %32
-         %32 = OpLabel
-         %36 = OpPhi %bool %30 %14 %35 %33
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %39
-         %38 = OpLabel
-               OpStore %x_GLF_color %41
-               OpBranch %37
-         %39 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %43
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %main_1
-         %48 = OpLoad %v4float %x_GLF_color
-         %49 = OpCompositeConstruct %main_out %48
-               OpReturnValue %49
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %51 = OpLabel
-         %52 = OpFunctionCall %main_out %main_inner
-         %53 = OpCompositeExtract %v4float %52 0
-               OpStore %x_GLF_color_1_1 %53
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8900821..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-divs/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  four : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  let x_27 : f32 = x_6.four;
-  a = (2.0 / (1.0 / x_27));
-  let x_30 : f32 = a;
-  let x_32 : f32 = a;
-  if (((x_30 > 7.900000095) && (x_32 < 8.100000381))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1474170..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  const float x_28 = asfloat(x_6[0].x);
-  f = (4.0f * (2.0f / x_28));
-  if (((f > 7.900000095f) & (f < 8.100000381f))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3fc585d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float const x_28 = x_6.one;
-  f = (4.0f * (2.0f / x_28));
-  float const x_31 = f;
-  float const x_33 = f;
-  if (((x_31 > 7.900000095f) & (x_33 < 8.100000381f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 637a850..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,93 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_4 = OpConstant %float 4
-    %float_2 = OpConstant %float 2
-%float_7_9000001 = OpConstant %float 7.9000001
-       %bool = OpTypeBool
-%float_8_10000038 = OpConstant %float 8.10000038
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %40 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %41 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %42 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-         %21 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %22 = OpLoad %float %21
-         %25 = OpFDiv %float %float_2 %22
-         %26 = OpFMul %float %float_4 %25
-               OpStore %f %26
-         %27 = OpLoad %float %f
-         %28 = OpLoad %float %f
-         %30 = OpFOrdGreaterThan %bool %27 %float_7_9000001
-         %33 = OpFOrdLessThan %bool %28 %float_8_10000038
-         %34 = OpLogicalAnd %bool %30 %33
-               OpSelectionMerge %35 None
-               OpBranchConditional %34 %36 %37
-         %36 = OpLabel
-               OpStore %x_GLF_color %40
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %41
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %42
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-         %47 = OpLoad %v4float %x_GLF_color
-         %48 = OpCompositeConstruct %main_out %47
-               OpReturnValue %48
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %50 = OpLabel
-         %51 = OpFunctionCall %main_out %main_inner
-         %52 = OpCompositeExtract %v4float %51 0
-               OpStore %x_GLF_color_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4fce1b0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  let x_28 : f32 = x_6.one;
-  f = (4.0 * (2.0 / x_28));
-  let x_31 : f32 = f;
-  let x_33 : f32 = f;
-  if (((x_31 > 7.900000095) & (x_33 < 8.100000381))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a85b474..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  const float x_28 = asfloat(x_6[0].x);
-  f = (4.0f * (2.0f / x_28));
-  bool tint_tmp = (f > 7.900000095f);
-  if (tint_tmp) {
-    tint_tmp = (f < 8.100000381f);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.msl
deleted file mode 100644
index fad2b8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float const x_28 = x_6.one;
-  f = (4.0f * (2.0f / x_28));
-  float const x_31 = f;
-  float const x_33 = f;
-  if (((x_31 > 7.900000095f) && (x_33 < 8.100000381f))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9a491a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,98 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 55
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_4 = OpConstant %float 4
-    %float_2 = OpConstant %float 2
-%float_7_9000001 = OpConstant %float 7.9000001
-       %bool = OpTypeBool
-%float_8_10000038 = OpConstant %float 8.10000038
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %42 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %43 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %44 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-         %21 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %22 = OpLoad %float %21
-         %25 = OpFDiv %float %float_2 %22
-         %26 = OpFMul %float %float_4 %25
-               OpStore %f %26
-         %27 = OpLoad %float %f
-         %28 = OpLoad %float %f
-         %30 = OpFOrdGreaterThan %bool %27 %float_7_9000001
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-         %35 = OpFOrdLessThan %bool %28 %float_8_10000038
-               OpBranch %32
-         %32 = OpLabel
-         %36 = OpPhi %bool %30 %14 %35 %33
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %39
-         %38 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %37
-         %39 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-         %47 = OpLabel
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %v4float %x_GLF_color
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %52 = OpLabel
-         %53 = OpFunctionCall %main_out %main_inner
-         %54 = OpCompositeExtract %v4float %53 0
-               OpStore %x_GLF_color_1_1 %54
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index fd79096..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-mul-div/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,33 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  let x_28 : f32 = x_6.one;
-  f = (4.0 * (2.0 / x_28));
-  let x_31 : f32 = f;
-  let x_33 : f32 = f;
-  if (((x_31 > 7.900000095) && (x_33 < 8.100000381))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 042c40f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool b = false;
-  int i = 0;
-  float a = 0.0f;
-  b = false;
-  i = 1;
-  {
-    for(; (i > 0); i = (i - 1)) {
-      a = (1.0f + float(i));
-      if (((2.0f - a) == 0.0f)) {
-        b = true;
-      }
-    }
-  }
-  if (b) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.msl
deleted file mode 100644
index f16cb10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool b = false;
-  int i = 0;
-  float a = 0.0f;
-  b = false;
-  i = 1;
-  while (true) {
-    int const x_7 = i;
-    if ((x_7 > 0)) {
-    } else {
-      break;
-    }
-    int const x_8 = i;
-    a = (1.0f + float(x_8));
-    float const x_39 = a;
-    if (((2.0f - x_39) == 0.0f)) {
-      b = true;
-    }
-    {
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) - as_type<uint>(1)));
-    }
-  }
-  bool const x_44 = b;
-  if (x_44) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 9eb7c82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,116 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpConstantNull %float
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-         %53 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %54 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %b = OpVariable %_ptr_Function_bool Function %15
-          %i = OpVariable %_ptr_Function_int Function %19
-          %a = OpVariable %_ptr_Function_float Function %22
-               OpStore %b %false
-               OpStore %i %int_1
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %29 = OpLoad %int %i
-         %31 = OpSGreaterThan %bool %29 %int_0
-               OpSelectionMerge %32 None
-               OpBranchConditional %31 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %26
-         %32 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpConvertSToF %float %35
-         %38 = OpFAdd %float %float_1 %37
-               OpStore %a %38
-         %39 = OpLoad %float %a
-         %41 = OpFSub %float %float_2 %39
-         %43 = OpFOrdEqual %bool %41 %float_0
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpStore %b %true
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-         %47 = OpLoad %int %i
-         %48 = OpISub %int %47 %int_1
-               OpStore %i %48
-               OpBranch %25
-         %26 = OpLabel
-         %49 = OpLoad %bool %b
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %50
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 99ec59a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var b : bool;
-  var i : i32;
-  var a : f32;
-  b = false;
-  i = 1;
-  loop {
-    let x_7 : i32 = i;
-    if ((x_7 > 0)) {
-    } else {
-      break;
-    }
-    let x_8 : i32 = i;
-    a = (1.0 + f32(x_8));
-    let x_39 : f32 = a;
-    if (((2.0 - x_39) == 0.0)) {
-      b = true;
-    }
-
-    continuing {
-      let x_9 : i32 = i;
-      i = (x_9 - 1);
-    }
-  }
-  let x_44 : bool = b;
-  if (x_44) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 042c40f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool b = false;
-  int i = 0;
-  float a = 0.0f;
-  b = false;
-  i = 1;
-  {
-    for(; (i > 0); i = (i - 1)) {
-      a = (1.0f + float(i));
-      if (((2.0f - a) == 0.0f)) {
-        b = true;
-      }
-    }
-  }
-  if (b) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.msl
deleted file mode 100644
index f16cb10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool b = false;
-  int i = 0;
-  float a = 0.0f;
-  b = false;
-  i = 1;
-  while (true) {
-    int const x_7 = i;
-    if ((x_7 > 0)) {
-    } else {
-      break;
-    }
-    int const x_8 = i;
-    a = (1.0f + float(x_8));
-    float const x_39 = a;
-    if (((2.0f - x_39) == 0.0f)) {
-      b = true;
-    }
-    {
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) - as_type<uint>(1)));
-    }
-  }
-  bool const x_44 = b;
-  if (x_44) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9eb7c82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,116 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpConstantNull %float
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-         %53 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %54 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %b = OpVariable %_ptr_Function_bool Function %15
-          %i = OpVariable %_ptr_Function_int Function %19
-          %a = OpVariable %_ptr_Function_float Function %22
-               OpStore %b %false
-               OpStore %i %int_1
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %29 = OpLoad %int %i
-         %31 = OpSGreaterThan %bool %29 %int_0
-               OpSelectionMerge %32 None
-               OpBranchConditional %31 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %26
-         %32 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpConvertSToF %float %35
-         %38 = OpFAdd %float %float_1 %37
-               OpStore %a %38
-         %39 = OpLoad %float %a
-         %41 = OpFSub %float %float_2 %39
-         %43 = OpFOrdEqual %bool %41 %float_0
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpStore %b %true
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-         %47 = OpLoad %int %i
-         %48 = OpISub %int %47 %int_1
-               OpStore %i %48
-               OpBranch %25
-         %26 = OpLabel
-         %49 = OpLoad %bool %b
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %50
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 99ec59a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-add/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var b : bool;
-  var i : i32;
-  var a : f32;
-  b = false;
-  i = 1;
-  loop {
-    let x_7 : i32 = i;
-    if ((x_7 > 0)) {
-    } else {
-      break;
-    }
-    let x_8 : i32 = i;
-    a = (1.0 + f32(x_8));
-    let x_39 : f32 = a;
-    if (((2.0 - x_39) == 0.0)) {
-      b = true;
-    }
-
-    continuing {
-      let x_9 : i32 = i;
-      i = (x_9 - 1);
-    }
-  }
-  let x_44 : bool = b;
-  if (x_44) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index bf8cf30..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool b = false;
-  int i = 0;
-  float a = 0.0f;
-  b = false;
-  i = 1;
-  {
-    for(; (i > 0); i = (i - 1)) {
-      a = (3.0f - float(i));
-      if (((2.0f - a) == 0.0f)) {
-        b = true;
-      }
-    }
-  }
-  if (b) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.msl
deleted file mode 100644
index 824cb46..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool b = false;
-  int i = 0;
-  float a = 0.0f;
-  b = false;
-  i = 1;
-  while (true) {
-    int const x_7 = i;
-    if ((x_7 > 0)) {
-    } else {
-      break;
-    }
-    int const x_8 = i;
-    a = (3.0f - float(x_8));
-    float const x_40 = a;
-    if (((2.0f - x_40) == 0.0f)) {
-      b = true;
-    }
-    {
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) - as_type<uint>(1)));
-    }
-  }
-  bool const x_45 = b;
-  if (x_45) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index de0f5f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpConstantNull %float
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-    %float_3 = OpConstant %float 3
-    %float_2 = OpConstant %float 2
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %b = OpVariable %_ptr_Function_bool Function %15
-          %i = OpVariable %_ptr_Function_int Function %19
-          %a = OpVariable %_ptr_Function_float Function %22
-               OpStore %b %false
-               OpStore %i %int_1
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %29 = OpLoad %int %i
-         %31 = OpSGreaterThan %bool %29 %int_0
-               OpSelectionMerge %32 None
-               OpBranchConditional %31 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %26
-         %32 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpConvertSToF %float %35
-         %38 = OpFSub %float %float_3 %37
-               OpStore %a %38
-         %39 = OpLoad %float %a
-         %41 = OpFSub %float %float_2 %39
-         %43 = OpFOrdEqual %bool %41 %float_0
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpStore %b %true
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-         %47 = OpLoad %int %i
-         %48 = OpISub %int %47 %int_1
-               OpStore %i %48
-               OpBranch %25
-         %26 = OpLabel
-         %49 = OpLoad %bool %b
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %50
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 44ac190..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var b : bool;
-  var i : i32;
-  var a : f32;
-  b = false;
-  i = 1;
-  loop {
-    let x_7 : i32 = i;
-    if ((x_7 > 0)) {
-    } else {
-      break;
-    }
-    let x_8 : i32 = i;
-    a = (3.0 - f32(x_8));
-    let x_40 : f32 = a;
-    if (((2.0 - x_40) == 0.0)) {
-      b = true;
-    }
-
-    continuing {
-      let x_9 : i32 = i;
-      i = (x_9 - 1);
-    }
-  }
-  let x_45 : bool = b;
-  if (x_45) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index bf8cf30..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool b = false;
-  int i = 0;
-  float a = 0.0f;
-  b = false;
-  i = 1;
-  {
-    for(; (i > 0); i = (i - 1)) {
-      a = (3.0f - float(i));
-      if (((2.0f - a) == 0.0f)) {
-        b = true;
-      }
-    }
-  }
-  if (b) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.msl
deleted file mode 100644
index 824cb46..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool b = false;
-  int i = 0;
-  float a = 0.0f;
-  b = false;
-  i = 1;
-  while (true) {
-    int const x_7 = i;
-    if ((x_7 > 0)) {
-    } else {
-      break;
-    }
-    int const x_8 = i;
-    a = (3.0f - float(x_8));
-    float const x_40 = a;
-    if (((2.0f - x_40) == 0.0f)) {
-      b = true;
-    }
-    {
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) - as_type<uint>(1)));
-    }
-  }
-  bool const x_45 = b;
-  if (x_45) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index de0f5f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpConstantNull %float
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-    %float_3 = OpConstant %float 3
-    %float_2 = OpConstant %float 2
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %b = OpVariable %_ptr_Function_bool Function %15
-          %i = OpVariable %_ptr_Function_int Function %19
-          %a = OpVariable %_ptr_Function_float Function %22
-               OpStore %b %false
-               OpStore %i %int_1
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %29 = OpLoad %int %i
-         %31 = OpSGreaterThan %bool %29 %int_0
-               OpSelectionMerge %32 None
-               OpBranchConditional %31 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %26
-         %32 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpConvertSToF %float %35
-         %38 = OpFSub %float %float_3 %37
-               OpStore %a %38
-         %39 = OpLoad %float %a
-         %41 = OpFSub %float %float_2 %39
-         %43 = OpFOrdEqual %bool %41 %float_0
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpStore %b %true
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-         %47 = OpLoad %int %i
-         %48 = OpISub %int %47 %int_1
-               OpStore %i %48
-               OpBranch %25
-         %26 = OpLabel
-         %49 = OpLoad %bool %b
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %50
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 44ac190..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-sub-sub/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var b : bool;
-  var i : i32;
-  var a : f32;
-  b = false;
-  i = 1;
-  loop {
-    let x_7 : i32 = i;
-    if ((x_7 > 0)) {
-    } else {
-      break;
-    }
-    let x_8 : i32 = i;
-    a = (3.0 - f32(x_8));
-    let x_40 : f32 = a;
-    if (((2.0 - x_40) == 0.0)) {
-      b = true;
-    }
-
-    continuing {
-      let x_9 : i32 = i;
-      i = (x_9 - 1);
-    }
-  }
-  let x_45 : bool = b;
-  if (x_45) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8572db8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  const int x_26 = asint(x_6[0].x);
-  i = x_26;
-  while (true) {
-    if ((i > 0)) {
-    } else {
-      break;
-    }
-    i = (i - 1);
-    i = (i - 1);
-  }
-  if ((i == -1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0adf33a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int five;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int const x_26 = x_6.five;
-  i = x_26;
-  while (true) {
-    int const x_31 = i;
-    if ((x_31 > 0)) {
-    } else {
-      break;
-    }
-    int const x_34 = i;
-    i = as_type<int>((as_type<uint>(x_34) - as_type<uint>(1)));
-    int const x_36 = i;
-    i = as_type<int>((as_type<uint>(x_36) - as_type<uint>(1)));
-  }
-  int const x_38 = i;
-  if ((x_38 == -1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 088d06c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "five"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %49 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %18
-         %22 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %23 = OpLoad %int %22
-               OpStore %i %23
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %i
-         %30 = OpSGreaterThan %bool %28 %int_0
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpISub %int %35 %int_1
-               OpStore %i %37
-         %38 = OpLoad %int %i
-         %39 = OpISub %int %38 %int_1
-               OpStore %i %39
-               OpBranch %26
-         %26 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpIEqual %bool %40 %int_n1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %43
-         %45 = OpLabel
-               OpStore %x_GLF_color %49
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b7d98c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-[[block]]
-struct buf0 {
-  five : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  let x_26 : i32 = x_6.five;
-  i = x_26;
-  loop {
-    let x_31 : i32 = i;
-    if ((x_31 > 0)) {
-    } else {
-      break;
-    }
-    let x_34 : i32 = i;
-    i = (x_34 - 1);
-    let x_36 : i32 = i;
-    i = (x_36 - 1);
-  }
-  let x_38 : i32 = i;
-  if ((x_38 == -1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8572db8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  const int x_26 = asint(x_6[0].x);
-  i = x_26;
-  while (true) {
-    if ((i > 0)) {
-    } else {
-      break;
-    }
-    i = (i - 1);
-    i = (i - 1);
-  }
-  if ((i == -1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0adf33a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int five;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int const x_26 = x_6.five;
-  i = x_26;
-  while (true) {
-    int const x_31 = i;
-    if ((x_31 > 0)) {
-    } else {
-      break;
-    }
-    int const x_34 = i;
-    i = as_type<int>((as_type<uint>(x_34) - as_type<uint>(1)));
-    int const x_36 = i;
-    i = as_type<int>((as_type<uint>(x_36) - as_type<uint>(1)));
-  }
-  int const x_38 = i;
-  if ((x_38 == -1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 088d06c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "five"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %49 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %18
-         %22 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %23 = OpLoad %int %22
-               OpStore %i %23
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %i
-         %30 = OpSGreaterThan %bool %28 %int_0
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpISub %int %35 %int_1
-               OpStore %i %37
-         %38 = OpLoad %int %i
-         %39 = OpISub %int %38 %int_1
-               OpStore %i %39
-               OpBranch %26
-         %26 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpIEqual %bool %40 %int_n1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %43
-         %45 = OpLabel
-               OpStore %x_GLF_color %49
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b7d98c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-merge-var-sub/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-[[block]]
-struct buf0 {
-  five : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  let x_26 : i32 = x_6.five;
-  i = x_26;
-  loop {
-    let x_31 : i32 = i;
-    if ((x_31 > 0)) {
-    } else {
-      break;
-    }
-    let x_34 : i32 = i;
-    i = (x_34 - 1);
-    let x_36 : i32 = i;
-    i = (x_36 - 1);
-  }
-  let x_38 : i32 = i;
-  if ((x_38 == -1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 52b9055..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 v = float3(0.0f, 0.0f, 0.0f);
-  float d = 0.0f;
-  const float x_36 = asfloat(x_6[0].x);
-  v = lerp(float3(5.0f, 8.0f, -12.199999809f), float3(1.0f, 4.900000095f, -2.099999905f), float3(x_36, x_36, x_36));
-  d = distance(v, float3(1.0f, 4.900000095f, -2.099999905f));
-  if ((d < 0.100000001f)) {
-    const float x_47 = v.x;
-    x_GLF_color = float4(x_47, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.msl
deleted file mode 100644
index ab61a04..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float3 v = 0.0f;
-  float d = 0.0f;
-  float const x_36 = x_6.one;
-  v = mix(float3(5.0f, 8.0f, -12.199999809f), float3(1.0f, 4.900000095f, -2.099999905f), float3(x_36, x_36, x_36));
-  float3 const x_39 = v;
-  d = distance(x_39, float3(1.0f, 4.900000095f, -2.099999905f));
-  float const x_41 = d;
-  if ((x_41 < 0.100000001f)) {
-    float const x_47 = v.x;
-    *(tint_symbol_3) = float4(x_47, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8129be1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %d "d"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_5 = OpConstant %float 5
-    %float_8 = OpConstant %float 8
-%float_n12_1999998 = OpConstant %float -12.1999998
-         %32 = OpConstantComposite %v3float %float_5 %float_8 %float_n12_1999998
-    %float_1 = OpConstant %float 1
-%float_4_9000001 = OpConstant %float 4.9000001
-%float_n2_0999999 = OpConstant %float -2.0999999
-         %36 = OpConstantComposite %v3float %float_1 %float_4_9000001 %float_n2_0999999
-%float_0_100000001 = OpConstant %float 0.100000001
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %51 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %52 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %v = OpVariable %_ptr_Function_v3float Function %18
-          %d = OpVariable %_ptr_Function_float Function %21
-         %25 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %26 = OpLoad %float %25
-         %37 = OpCompositeConstruct %v3float %26 %26 %26
-         %27 = OpExtInst %v3float %28 FMix %32 %36 %37
-               OpStore %v %27
-         %38 = OpLoad %v3float %v
-         %39 = OpExtInst %float %28 Distance %38 %36
-               OpStore %d %39
-         %40 = OpLoad %float %d
-         %42 = OpFOrdLessThan %bool %40 %float_0_100000001
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %48 = OpLoad %float %47
-         %50 = OpCompositeConstruct %v4float %48 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %50
-               OpBranch %44
-         %46 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %52
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-         %57 = OpLoad %v4float %x_GLF_color
-         %58 = OpCompositeConstruct %main_out %57
-               OpReturnValue %58
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %60 = OpLabel
-         %61 = OpFunctionCall %main_out %main_inner
-         %62 = OpCompositeExtract %v4float %61 0
-               OpStore %x_GLF_color_1_1 %62
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 39b846d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec3<f32>;
-  var d : f32;
-  let x_36 : f32 = x_6.one;
-  v = mix(vec3<f32>(5.0, 8.0, -12.199999809), vec3<f32>(1.0, 4.900000095, -2.099999905), vec3<f32>(x_36, x_36, x_36));
-  let x_39 : vec3<f32> = v;
-  d = distance(x_39, vec3<f32>(1.0, 4.900000095, -2.099999905));
-  let x_41 : f32 = d;
-  if ((x_41 < 0.100000001)) {
-    let x_47 : f32 = v.x;
-    x_GLF_color = vec4<f32>(x_47, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 52b9055..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 v = float3(0.0f, 0.0f, 0.0f);
-  float d = 0.0f;
-  const float x_36 = asfloat(x_6[0].x);
-  v = lerp(float3(5.0f, 8.0f, -12.199999809f), float3(1.0f, 4.900000095f, -2.099999905f), float3(x_36, x_36, x_36));
-  d = distance(v, float3(1.0f, 4.900000095f, -2.099999905f));
-  if ((d < 0.100000001f)) {
-    const float x_47 = v.x;
-    x_GLF_color = float4(x_47, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.msl
deleted file mode 100644
index ab61a04..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float3 v = 0.0f;
-  float d = 0.0f;
-  float const x_36 = x_6.one;
-  v = mix(float3(5.0f, 8.0f, -12.199999809f), float3(1.0f, 4.900000095f, -2.099999905f), float3(x_36, x_36, x_36));
-  float3 const x_39 = v;
-  d = distance(x_39, float3(1.0f, 4.900000095f, -2.099999905f));
-  float const x_41 = d;
-  if ((x_41 < 0.100000001f)) {
-    float const x_47 = v.x;
-    *(tint_symbol_3) = float4(x_47, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8129be1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %d "d"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_5 = OpConstant %float 5
-    %float_8 = OpConstant %float 8
-%float_n12_1999998 = OpConstant %float -12.1999998
-         %32 = OpConstantComposite %v3float %float_5 %float_8 %float_n12_1999998
-    %float_1 = OpConstant %float 1
-%float_4_9000001 = OpConstant %float 4.9000001
-%float_n2_0999999 = OpConstant %float -2.0999999
-         %36 = OpConstantComposite %v3float %float_1 %float_4_9000001 %float_n2_0999999
-%float_0_100000001 = OpConstant %float 0.100000001
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %51 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %52 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %v = OpVariable %_ptr_Function_v3float Function %18
-          %d = OpVariable %_ptr_Function_float Function %21
-         %25 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %26 = OpLoad %float %25
-         %37 = OpCompositeConstruct %v3float %26 %26 %26
-         %27 = OpExtInst %v3float %28 FMix %32 %36 %37
-               OpStore %v %27
-         %38 = OpLoad %v3float %v
-         %39 = OpExtInst %float %28 Distance %38 %36
-               OpStore %d %39
-         %40 = OpLoad %float %d
-         %42 = OpFOrdLessThan %bool %40 %float_0_100000001
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %48 = OpLoad %float %47
-         %50 = OpCompositeConstruct %v4float %48 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %50
-               OpBranch %44
-         %46 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %52
-         %55 = OpLabel
-         %56 = OpFunctionCall %void %main_1
-         %57 = OpLoad %v4float %x_GLF_color
-         %58 = OpCompositeConstruct %main_out %57
-               OpReturnValue %58
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %60 = OpLabel
-         %61 = OpFunctionCall %main_out %main_inner
-         %62 = OpCompositeExtract %v4float %61 0
-               OpStore %x_GLF_color_1_1 %62
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 39b846d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-mix-uniform-weight/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec3<f32>;
-  var d : f32;
-  let x_36 : f32 = x_6.one;
-  v = mix(vec3<f32>(5.0, 8.0, -12.199999809), vec3<f32>(1.0, 4.900000095, -2.099999905), vec3<f32>(x_36, x_36, x_36));
-  let x_39 : vec3<f32> = v;
-  d = distance(x_39, vec3<f32>(1.0, 4.900000095, -2.099999905));
-  let x_41 : f32 = d;
-  if ((x_41 < 0.100000001)) {
-    let x_47 : f32 = v.x;
-    x_GLF_color = vec4<f32>(x_47, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 9bf1a3b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_6 = asint(x_5[0].x);
-  if ((-((x_6 / 2)) == -2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.msl
deleted file mode 100644
index f2c6210..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ int four;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_6 = x_5.four;
-  if ((tint_unary_minus((x_6 / 2)) == -2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f0b5fc9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "four"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-     %int_n2 = OpConstant %int -2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %34 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %23 = OpSDiv %int %20 %int_2
-         %21 = OpSNegate %int %23
-         %25 = OpIEqual %bool %21 %int_n2
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %29
-         %28 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %27
-         %29 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %34
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %42 = OpLabel
-         %43 = OpFunctionCall %main_out %main_inner
-         %44 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %44
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 31222ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  four : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_6 : i32 = x_5.four;
-  if ((-((x_6 / 2)) == -2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 9bf1a3b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_6 = asint(x_5[0].x);
-  if ((-((x_6 / 2)) == -2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.msl
deleted file mode 100644
index f2c6210..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ int four;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_6 = x_5.four;
-  if ((tint_unary_minus((x_6 / 2)) == -2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f0b5fc9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,83 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "four"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-     %int_n2 = OpConstant %int -2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %34 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %23 = OpSDiv %int %20 %int_2
-         %21 = OpSNegate %int %23
-         %25 = OpIEqual %bool %21 %int_n2
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %29
-         %28 = OpLabel
-               OpStore %x_GLF_color %32
-               OpBranch %27
-         %29 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %34
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %42 = OpLabel
-         %43 = OpFunctionCall %main_out %main_inner
-         %44 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %44
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 31222ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-div/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  four : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_6 : i32 = x_5.four;
-  if ((-((x_6 / 2)) == -2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 154e2f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x = 0;
-  const int x_26 = asint(x_6[0].x);
-  x = -((5 - x_26));
-  if ((x == -4)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.msl
deleted file mode 100644
index 218bda2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int x = 0;
-  int const x_26 = x_6.one;
-  x = tint_unary_minus(as_type<int>((as_type<uint>(5) - as_type<uint>(x_26))));
-  int const x_29 = x;
-  if ((x_29 == -4)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 34c5d52..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,89 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x "x"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-     %int_n4 = OpConstant %int -4
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %37 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %18
-         %22 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %23 = OpLoad %int %22
-         %26 = OpISub %int %int_5 %23
-         %24 = OpSNegate %int %26
-               OpStore %x %24
-         %27 = OpLoad %int %x
-         %29 = OpIEqual %bool %27 %int_n4
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %x_GLF_color %37
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 73f36ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x : i32;
-  let x_26 : i32 = x_6.one;
-  x = -((5 - x_26));
-  let x_29 : i32 = x;
-  if ((x_29 == -4)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 154e2f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x = 0;
-  const int x_26 = asint(x_6[0].x);
-  x = -((5 - x_26));
-  if ((x == -4)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.msl
deleted file mode 100644
index 218bda2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int x = 0;
-  int const x_26 = x_6.one;
-  x = tint_unary_minus(as_type<int>((as_type<uint>(5) - as_type<uint>(x_26))));
-  int const x_29 = x;
-  if ((x_29 == -4)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 34c5d52..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,89 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x "x"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-     %int_n4 = OpConstant %int -4
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %37 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %18
-         %22 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %23 = OpLoad %int %22
-         %26 = OpISub %int %int_5 %23
-         %24 = OpSNegate %int %26
-               OpStore %x %24
-         %27 = OpLoad %int %x
-         %29 = OpIEqual %bool %27 %int_n4
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %x_GLF_color %37
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 73f36ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-negate-sub/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x : i32;
-  let x_26 : i32 = x_6.one;
-  x = -((5 - x_26));
-  let x_29 : i32 = x;
-  if ((x_29 == -4)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a4ba052..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float2 x_27 = asfloat(x_5[0].xy);
-  if (all((lerp(x_27, float2(1.0f, 1.0f), float2(0.0f, 0.0f)) == float2(0.0f, 1.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9d0c9f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float2 const x_27 = x_5.injectionSwitch;
-  if (all((mix(x_27, float2(1.0f, 1.0f), float2(0.0f, 0.0f)) == float2(0.0f, 1.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 97e91e4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 48
-; Schema: 0
-               OpCapability Shader
-         %24 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %26 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %28 = OpConstantComposite %v2float %float_0 %float_0
-         %29 = OpConstantComposite %v2float %float_0 %float_1
-     %v2bool = OpTypeVector %bool 2
-         %35 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %36 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %37 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_v2float %x_5 %uint_0
-         %20 = OpLoad %v2float %19
-         %23 = OpExtInst %v2float %24 FMix %20 %26 %28
-         %30 = OpFOrdEqual %v2bool %23 %29
-         %21 = OpAll %bool %30
-               OpSelectionMerge %32 None
-               OpBranchConditional %21 %33 %34
-         %33 = OpLabel
-               OpStore %x_GLF_color %35
-               OpBranch %32
-         %34 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %32
-         %32 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %37
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %main_1
-         %42 = OpLoad %v4float %x_GLF_color
-         %43 = OpCompositeConstruct %main_out %42
-               OpReturnValue %43
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %45 = OpLabel
-         %46 = OpFunctionCall %main_out %main_inner
-         %47 = OpCompositeExtract %v4float %46 0
-               OpStore %x_GLF_color_1_1 %47
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index fcf7c4a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_27 : vec2<f32> = x_5.injectionSwitch;
-  if (all((mix(x_27, vec2<f32>(1.0, 1.0), vec2<f32>(0.0, 0.0)) == vec2<f32>(0.0, 1.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a4ba052..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float2 x_27 = asfloat(x_5[0].xy);
-  if (all((lerp(x_27, float2(1.0f, 1.0f), float2(0.0f, 0.0f)) == float2(0.0f, 1.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9d0c9f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float2 const x_27 = x_5.injectionSwitch;
-  if (all((mix(x_27, float2(1.0f, 1.0f), float2(0.0f, 0.0f)) == float2(0.0f, 1.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 97e91e4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 48
-; Schema: 0
-               OpCapability Shader
-         %24 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %26 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %28 = OpConstantComposite %v2float %float_0 %float_0
-         %29 = OpConstantComposite %v2float %float_0 %float_1
-     %v2bool = OpTypeVector %bool 2
-         %35 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %36 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %37 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_v2float %x_5 %uint_0
-         %20 = OpLoad %v2float %19
-         %23 = OpExtInst %v2float %24 FMix %20 %26 %28
-         %30 = OpFOrdEqual %v2bool %23 %29
-         %21 = OpAll %bool %30
-               OpSelectionMerge %32 None
-               OpBranchConditional %21 %33 %34
-         %33 = OpLabel
-               OpStore %x_GLF_color %35
-               OpBranch %32
-         %34 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %32
-         %32 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %37
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %main_1
-         %42 = OpLoad %v4float %x_GLF_color
-         %43 = OpCompositeConstruct %main_out %42
-               OpReturnValue %43
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %45 = OpLabel
-         %46 = OpFunctionCall %main_out %main_inner
-         %47 = OpCompositeExtract %v4float %46 0
-               OpStore %x_GLF_color_1_1 %47
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index fcf7c4a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-redundant-mix/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_27 : vec2<f32> = x_5.injectionSwitch;
-  if (all((mix(x_27, vec2<f32>(1.0, 1.0), vec2<f32>(0.0, 0.0)) == vec2<f32>(0.0, 1.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d43ef40..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float2 x_29 = asfloat(x_5[0].xy);
-  if (((bool2(false, false) ? float2(1.0f, 1.0f) : x_29).x == 0.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.msl
deleted file mode 100644
index 574c1ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float2 const x_29 = x_5.injectionSwitch;
-  if ((select(x_29, float2(1.0f, 1.0f), bool2(false, false)).x == 0.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e6eac5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-      %false = OpConstantFalse %bool
-         %25 = OpConstantComposite %v2bool %false %false
-    %float_1 = OpConstant %float 1
-         %27 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %34 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %35 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %36 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_v2float %x_5 %uint_0
-         %20 = OpLoad %v2float %19
-         %21 = OpSelect %v2float %25 %27 %20
-         %28 = OpCompositeExtract %float %21 0
-         %30 = OpFOrdEqual %bool %28 %float_0
-               OpSelectionMerge %31 None
-               OpBranchConditional %30 %32 %33
-         %32 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %x_GLF_color %35
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %36
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %main_1
-         %41 = OpLoad %v4float %x_GLF_color
-         %42 = OpCompositeConstruct %main_out %41
-               OpReturnValue %42
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpFunctionCall %main_out %main_inner
-         %46 = OpCompositeExtract %v4float %45 0
-               OpStore %x_GLF_color_1_1 %46
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 790f1a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_29 : vec2<f32> = x_5.injectionSwitch;
-  if ((select(x_29, vec2<f32>(1.0, 1.0), vec2<bool>(false, false)).x == 0.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d43ef40..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float2 x_29 = asfloat(x_5[0].xy);
-  if (((bool2(false, false) ? float2(1.0f, 1.0f) : x_29).x == 0.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.msl
deleted file mode 100644
index 574c1ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float2 const x_29 = x_5.injectionSwitch;
-  if ((select(x_29, float2(1.0f, 1.0f), bool2(false, false)).x == 0.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e6eac5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,85 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-      %false = OpConstantFalse %bool
-         %25 = OpConstantComposite %v2bool %false %false
-    %float_1 = OpConstant %float 1
-         %27 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %34 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %35 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %36 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_v2float %x_5 %uint_0
-         %20 = OpLoad %v2float %19
-         %21 = OpSelect %v2float %25 %27 %20
-         %28 = OpCompositeExtract %float %21 0
-         %30 = OpFOrdEqual %bool %28 %float_0
-               OpSelectionMerge %31 None
-               OpBranchConditional %30 %32 %33
-         %32 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %x_GLF_color %35
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %36
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %main_1
-         %41 = OpLoad %v4float %x_GLF_color
-         %42 = OpCompositeConstruct %main_out %41
-               OpReturnValue %42
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpFunctionCall %main_out %main_inner
-         %46 = OpCompositeExtract %v4float %45 0
-               OpStore %x_GLF_color_1_1 %46
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 790f1a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-extract/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_29 : vec2<f32> = x_5.injectionSwitch;
-  if ((select(x_29, vec2<f32>(1.0, 1.0), vec2<bool>(false, false)).x == 0.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 5e90d3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  v = float4(2.0f, 3.0f, 4.0f, 5.0f);
-  const float x_40 = asfloat(x_6[0].y);
-  const float2 x_42 = (bool2(true, false) ? float2(1.0f, x_40) : float2(2.0f, 6.0f));
-  const float4 x_43 = v;
-  v = float4(x_42.x, x_42.y, x_43.z, x_43.w);
-  if (all((v == float4(1.0f, 6.0f, 4.0f, 5.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4f65e53..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 threeandfour;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  v = float4(2.0f, 3.0f, 4.0f, 5.0f);
-  float const x_40 = x_6.threeandfour.y;
-  float2 const x_42 = select(float2(2.0f, 6.0f), float2(1.0f, x_40), bool2(true, false));
-  float4 const x_43 = v;
-  v = float4(x_42.x, x_42.y, x_43.z, x_43.w);
-  float4 const x_45 = v;
-  if (all((x_45 == float4(1.0f, 6.0f, 4.0f, 5.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 958e74b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,108 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "threeandfour"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-    %float_5 = OpConstant %float 5
-         %22 = OpConstantComposite %v4float %float_2 %float_3 %float_4 %float_5
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-         %34 = OpConstantComposite %v2bool %true %false
-    %float_1 = OpConstant %float 1
-    %float_6 = OpConstant %float 6
-         %38 = OpConstantComposite %v2float %float_2 %float_6
-         %47 = OpConstantComposite %v4float %float_1 %float_6 %float_4 %float_5
-     %v4bool = OpTypeVector %bool 4
-    %float_0 = OpConstant %float 0
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %v %22
-         %27 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %28 = OpLoad %float %27
-         %36 = OpCompositeConstruct %v2float %float_1 %28
-         %29 = OpSelect %v2float %34 %36 %38
-         %39 = OpLoad %v4float %v
-         %40 = OpCompositeExtract %float %29 0
-         %41 = OpCompositeExtract %float %29 1
-         %42 = OpCompositeExtract %float %39 2
-         %43 = OpCompositeExtract %float %39 3
-         %44 = OpCompositeConstruct %v4float %40 %41 %42 %43
-               OpStore %v %44
-         %45 = OpLoad %v4float %v
-         %48 = OpFOrdEqual %v4bool %45 %47
-         %46 = OpAll %bool %48
-               OpSelectionMerge %50 None
-               OpBranchConditional %46 %51 %52
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %50
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8168671..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-[[block]]
-struct buf0 {
-  threeandfour : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  v = vec4<f32>(2.0, 3.0, 4.0, 5.0);
-  let x_40 : f32 = x_6.threeandfour.y;
-  let x_42 : vec2<f32> = select(vec2<f32>(2.0, 6.0), vec2<f32>(1.0, x_40), vec2<bool>(true, false));
-  let x_43 : vec4<f32> = v;
-  v = vec4<f32>(x_42.x, x_42.y, x_43.z, x_43.w);
-  let x_45 : vec4<f32> = v;
-  if (all((x_45 == vec4<f32>(1.0, 6.0, 4.0, 5.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5e90d3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  v = float4(2.0f, 3.0f, 4.0f, 5.0f);
-  const float x_40 = asfloat(x_6[0].y);
-  const float2 x_42 = (bool2(true, false) ? float2(1.0f, x_40) : float2(2.0f, 6.0f));
-  const float4 x_43 = v;
-  v = float4(x_42.x, x_42.y, x_43.z, x_43.w);
-  if (all((v == float4(1.0f, 6.0f, 4.0f, 5.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4f65e53..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 threeandfour;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  v = float4(2.0f, 3.0f, 4.0f, 5.0f);
-  float const x_40 = x_6.threeandfour.y;
-  float2 const x_42 = select(float2(2.0f, 6.0f), float2(1.0f, x_40), bool2(true, false));
-  float4 const x_43 = v;
-  v = float4(x_42.x, x_42.y, x_43.z, x_43.w);
-  float4 const x_45 = v;
-  if (all((x_45 == float4(1.0f, 6.0f, 4.0f, 5.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 958e74b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,108 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "threeandfour"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-    %float_5 = OpConstant %float 5
-         %22 = OpConstantComposite %v4float %float_2 %float_3 %float_4 %float_5
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-         %34 = OpConstantComposite %v2bool %true %false
-    %float_1 = OpConstant %float 1
-    %float_6 = OpConstant %float 6
-         %38 = OpConstantComposite %v2float %float_2 %float_6
-         %47 = OpConstantComposite %v4float %float_1 %float_6 %float_4 %float_5
-     %v4bool = OpTypeVector %bool 4
-    %float_0 = OpConstant %float 0
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %v %22
-         %27 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %28 = OpLoad %float %27
-         %36 = OpCompositeConstruct %v2float %float_1 %28
-         %29 = OpSelect %v2float %34 %36 %38
-         %39 = OpLoad %v4float %v
-         %40 = OpCompositeExtract %float %29 0
-         %41 = OpCompositeExtract %float %29 1
-         %42 = OpCompositeExtract %float %39 2
-         %43 = OpCompositeExtract %float %39 3
-         %44 = OpCompositeConstruct %v4float %40 %41 %42 %43
-               OpStore %v %44
-         %45 = OpLoad %v4float %v
-         %48 = OpFOrdEqual %v4bool %45 %47
-         %46 = OpAll %bool %48
-               OpSelectionMerge %50 None
-               OpBranchConditional %46 %51 %52
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %50
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8168671..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-shuffle-mix/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-[[block]]
-struct buf0 {
-  threeandfour : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  v = vec4<f32>(2.0, 3.0, 4.0, 5.0);
-  let x_40 : f32 = x_6.threeandfour.y;
-  let x_42 : vec2<f32> = select(vec2<f32>(2.0, 6.0), vec2<f32>(1.0, x_40), vec2<bool>(true, false));
-  let x_43 : vec4<f32> = v;
-  v = vec4<f32>(x_42.x, x_42.y, x_43.z, x_43.w);
-  let x_45 : vec4<f32> = v;
-  if (all((x_45 == vec4<f32>(1.0, 6.0, 4.0, 5.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index cd08b9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_23 = v;
-  v = float4(float2(1.0f, 1.0f).x, float2(1.0f, 1.0f).y, x_23.z, x_23.w);
-  const float4 x_25 = v;
-  v = float4(x_25.x, x_25.y, float2(2.0f, 2.0f).x, float2(2.0f, 2.0f).y);
-  if (all((v == float4(1.0f, 1.0f, 2.0f, 2.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.msl
deleted file mode 100644
index a2ec26a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float4 const x_23 = v;
-  v = float4(float2(1.0f, 1.0f).x, float2(1.0f, 1.0f).y, x_23.z, x_23.w);
-  float4 const x_25 = v;
-  v = float4(x_25.x, x_25.y, float2(2.0f, 2.0f).x, float2(2.0f, 2.0f).y);
-  float4 const x_27 = v;
-  if (all((x_27 == float4(1.0f, 1.0f, 2.0f, 2.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0f90304..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %17 = OpConstantComposite %v2float %float_1 %float_1
-    %float_2 = OpConstant %float 2
-         %27 = OpConstantComposite %v2float %float_2 %float_2
-       %bool = OpTypeBool
-         %34 = OpConstantComposite %v4float %float_1 %float_1 %float_2 %float_2
-     %v4bool = OpTypeVector %bool 4
-    %float_0 = OpConstant %float 0
-         %41 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %42 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %43 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %14 = OpLoad %v4float %v
-         %18 = OpCompositeExtract %float %17 0
-         %19 = OpCompositeExtract %float %17 1
-         %20 = OpCompositeExtract %float %14 2
-         %21 = OpCompositeExtract %float %14 3
-         %22 = OpCompositeConstruct %v4float %18 %19 %20 %21
-               OpStore %v %22
-         %23 = OpLoad %v4float %v
-         %24 = OpCompositeExtract %float %23 0
-         %25 = OpCompositeExtract %float %23 1
-         %28 = OpCompositeExtract %float %27 0
-         %29 = OpCompositeExtract %float %27 1
-         %30 = OpCompositeConstruct %v4float %24 %25 %28 %29
-               OpStore %v %30
-         %31 = OpLoad %v4float %v
-         %35 = OpFOrdEqual %v4bool %31 %34
-         %32 = OpAll %bool %35
-               OpSelectionMerge %37 None
-               OpBranchConditional %32 %38 %39
-         %38 = OpLabel
-               OpStore %x_GLF_color %41
-               OpBranch %37
-         %39 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %43
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %main_1
-         %48 = OpLoad %v4float %x_GLF_color
-         %49 = OpCompositeConstruct %main_out %48
-               OpReturnValue %49
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %51 = OpLabel
-         %52 = OpFunctionCall %main_out %main_inner
-         %53 = OpCompositeExtract %v4float %52 0
-               OpStore %x_GLF_color_1_1 %53
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 13ebbb0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_23 : vec4<f32> = v;
-  v = vec4<f32>(vec2<f32>(1.0, 1.0).x, vec2<f32>(1.0, 1.0).y, x_23.z, x_23.w);
-  let x_25 : vec4<f32> = v;
-  v = vec4<f32>(x_25.x, x_25.y, vec2<f32>(2.0, 2.0).x, vec2<f32>(2.0, 2.0).y);
-  let x_27 : vec4<f32> = v;
-  if (all((x_27 == vec4<f32>(1.0, 1.0, 2.0, 2.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index cd08b9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_23 = v;
-  v = float4(float2(1.0f, 1.0f).x, float2(1.0f, 1.0f).y, x_23.z, x_23.w);
-  const float4 x_25 = v;
-  v = float4(x_25.x, x_25.y, float2(2.0f, 2.0f).x, float2(2.0f, 2.0f).y);
-  if (all((v == float4(1.0f, 1.0f, 2.0f, 2.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.msl
deleted file mode 100644
index a2ec26a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float4 const x_23 = v;
-  v = float4(float2(1.0f, 1.0f).x, float2(1.0f, 1.0f).y, x_23.z, x_23.w);
-  float4 const x_25 = v;
-  v = float4(x_25.x, x_25.y, float2(2.0f, 2.0f).x, float2(2.0f, 2.0f).y);
-  float4 const x_27 = v;
-  if (all((x_27 == float4(1.0f, 1.0f, 2.0f, 2.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0f90304..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %17 = OpConstantComposite %v2float %float_1 %float_1
-    %float_2 = OpConstant %float 2
-         %27 = OpConstantComposite %v2float %float_2 %float_2
-       %bool = OpTypeBool
-         %34 = OpConstantComposite %v4float %float_1 %float_1 %float_2 %float_2
-     %v4bool = OpTypeVector %bool 4
-    %float_0 = OpConstant %float 0
-         %41 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %42 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %43 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %14 = OpLoad %v4float %v
-         %18 = OpCompositeExtract %float %17 0
-         %19 = OpCompositeExtract %float %17 1
-         %20 = OpCompositeExtract %float %14 2
-         %21 = OpCompositeExtract %float %14 3
-         %22 = OpCompositeConstruct %v4float %18 %19 %20 %21
-               OpStore %v %22
-         %23 = OpLoad %v4float %v
-         %24 = OpCompositeExtract %float %23 0
-         %25 = OpCompositeExtract %float %23 1
-         %28 = OpCompositeExtract %float %27 0
-         %29 = OpCompositeExtract %float %27 1
-         %30 = OpCompositeConstruct %v4float %24 %25 %28 %29
-               OpStore %v %30
-         %31 = OpLoad %v4float %v
-         %35 = OpFOrdEqual %v4bool %31 %34
-         %32 = OpAll %bool %35
-               OpSelectionMerge %37 None
-               OpBranchConditional %32 %38 %39
-         %38 = OpLabel
-               OpStore %x_GLF_color %41
-               OpBranch %37
-         %39 = OpLabel
-               OpStore %x_GLF_color %42
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %43
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %main_1
-         %48 = OpLoad %v4float %x_GLF_color
-         %49 = OpCompositeConstruct %main_out %48
-               OpReturnValue %49
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %51 = OpLabel
-         %52 = OpFunctionCall %main_out %main_inner
-         %53 = OpCompositeExtract %v4float %52 0
-               OpStore %x_GLF_color_1_1 %53
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 13ebbb0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-split-vector-init/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_23 : vec4<f32> = v;
-  v = vec4<f32>(vec2<f32>(1.0, 1.0).x, vec2<f32>(1.0, 1.0).y, x_23.z, x_23.w);
-  let x_25 : vec4<f32> = v;
-  v = vec4<f32>(x_25.x, x_25.y, vec2<f32>(2.0, 2.0).x, vec2<f32>(2.0, 2.0).y);
-  let x_27 : vec4<f32> = v;
-  if (all((x_27 == vec4<f32>(1.0, 1.0, 2.0, 2.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b144af7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v = float2(0.0f, 0.0f);
-  float d = 0.0f;
-  const float2 x_37 = asfloat(x_6[0].xy);
-  v = lerp(float2(2.0f, 3.0f), float2(4.0f, 5.0f), x_37);
-  d = distance(v, float2(2.0f, 5.0f));
-  if ((d < 0.100000001f)) {
-    const float x_47 = v.x;
-    const float x_50 = v.y;
-    x_GLF_color = float4((x_47 - 1.0f), (x_50 - 5.0f), 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6535247..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 zeroOne;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 v = 0.0f;
-  float d = 0.0f;
-  float2 const x_37 = x_6.zeroOne;
-  v = mix(float2(2.0f, 3.0f), float2(4.0f, 5.0f), x_37);
-  float2 const x_39 = v;
-  d = distance(x_39, float2(2.0f, 5.0f));
-  float const x_41 = d;
-  if ((x_41 < 0.100000001f)) {
-    float const x_47 = v.x;
-    float const x_50 = v.y;
-    *(tint_symbol_3) = float4((x_47 - 1.0f), (x_50 - 5.0f), 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 09b93ac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,109 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zeroOne"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %d "d"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-         %31 = OpConstantComposite %v2float %float_2 %float_3
-    %float_4 = OpConstant %float 4
-    %float_5 = OpConstant %float 5
-         %34 = OpConstantComposite %v2float %float_4 %float_5
-         %37 = OpConstantComposite %v2float %float_2 %float_5
-%float_0_100000001 = OpConstant %float 0.100000001
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %18
-          %d = OpVariable %_ptr_Function_float Function %21
-         %25 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %26 = OpLoad %v2float %25
-         %27 = OpExtInst %v2float %28 FMix %31 %34 %26
-               OpStore %v %27
-         %35 = OpLoad %v2float %v
-         %36 = OpExtInst %float %28 Distance %35 %37
-               OpStore %d %36
-         %38 = OpLoad %float %d
-         %40 = OpFOrdLessThan %bool %38 %float_0_100000001
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %46 = OpLoad %float %45
-         %48 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %49 = OpLoad %float %48
-         %51 = OpFSub %float %46 %float_1
-         %52 = OpFSub %float %49 %float_5
-         %54 = OpCompositeConstruct %v4float %51 %52 %float_0 %float_1
-               OpStore %x_GLF_color %54
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d0d096b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,37 +0,0 @@
-[[block]]
-struct buf0 {
-  zeroOne : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec2<f32>;
-  var d : f32;
-  let x_37 : vec2<f32> = x_6.zeroOne;
-  v = mix(vec2<f32>(2.0, 3.0), vec2<f32>(4.0, 5.0), x_37);
-  let x_39 : vec2<f32> = v;
-  d = distance(x_39, vec2<f32>(2.0, 5.0));
-  let x_41 : f32 = d;
-  if ((x_41 < 0.100000001)) {
-    let x_47 : f32 = v.x;
-    let x_50 : f32 = v.y;
-    x_GLF_color = vec4<f32>((x_47 - 1.0), (x_50 - 5.0), 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b144af7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v = float2(0.0f, 0.0f);
-  float d = 0.0f;
-  const float2 x_37 = asfloat(x_6[0].xy);
-  v = lerp(float2(2.0f, 3.0f), float2(4.0f, 5.0f), x_37);
-  d = distance(v, float2(2.0f, 5.0f));
-  if ((d < 0.100000001f)) {
-    const float x_47 = v.x;
-    const float x_50 = v.y;
-    x_GLF_color = float4((x_47 - 1.0f), (x_50 - 5.0f), 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6535247..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 zeroOne;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 v = 0.0f;
-  float d = 0.0f;
-  float2 const x_37 = x_6.zeroOne;
-  v = mix(float2(2.0f, 3.0f), float2(4.0f, 5.0f), x_37);
-  float2 const x_39 = v;
-  d = distance(x_39, float2(2.0f, 5.0f));
-  float const x_41 = d;
-  if ((x_41 < 0.100000001f)) {
-    float const x_47 = v.x;
-    float const x_50 = v.y;
-    *(tint_symbol_3) = float4((x_47 - 1.0f), (x_50 - 5.0f), 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 09b93ac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,109 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zeroOne"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %d "d"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-         %31 = OpConstantComposite %v2float %float_2 %float_3
-    %float_4 = OpConstant %float 4
-    %float_5 = OpConstant %float 5
-         %34 = OpConstantComposite %v2float %float_4 %float_5
-         %37 = OpConstantComposite %v2float %float_2 %float_5
-%float_0_100000001 = OpConstant %float 0.100000001
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %18
-          %d = OpVariable %_ptr_Function_float Function %21
-         %25 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %26 = OpLoad %v2float %25
-         %27 = OpExtInst %v2float %28 FMix %31 %34 %26
-               OpStore %v %27
-         %35 = OpLoad %v2float %v
-         %36 = OpExtInst %float %28 Distance %35 %37
-               OpStore %d %36
-         %38 = OpLoad %float %d
-         %40 = OpFOrdLessThan %bool %38 %float_0_100000001
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %46 = OpLoad %float %45
-         %48 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %49 = OpLoad %float %48
-         %51 = OpFSub %float %46 %float_1
-         %52 = OpFSub %float %49 %float_5
-         %54 = OpCompositeConstruct %v4float %51 %52 %float_0 %float_1
-               OpStore %x_GLF_color %54
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d0d096b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-folding-rules-vec-mix-uniform/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,37 +0,0 @@
-[[block]]
-struct buf0 {
-  zeroOne : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec2<f32>;
-  var d : f32;
-  let x_37 : vec2<f32> = x_6.zeroOne;
-  v = mix(vec2<f32>(2.0, 3.0), vec2<f32>(4.0, 5.0), x_37);
-  let x_39 : vec2<f32> = v;
-  d = distance(x_39, vec2<f32>(2.0, 5.0));
-  let x_41 : f32 = d;
-  if ((x_41 < 0.100000001)) {
-    let x_47 : f32 = v.x;
-    let x_50 : f32 = v.y;
-    x_GLF_color = vec4<f32>((x_47 - 1.0), (x_50 - 5.0), 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d963e3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int a[2] = (int[2])0;
-  const int x_32 = asint(x_6[2].x);
-  i = x_32;
-  while (true) {
-    const int x_37 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_39 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_37 < x_39)) {
-    } else {
-      break;
-    }
-    const int x_43 = asint(x_6[1].x);
-    const int x_44 = i;
-    const int x_46 = asint(x_6[3].x);
-    const int tint_symbol_2[2] = {x_43, (int2(x_44, x_44) % int2(3, x_46)).y};
-    a = tint_symbol_2;
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_55 = asint(x_6[2].x);
-  const int x_57 = a[x_55];
-  const int x_60 = asint(x_6[1].x);
-  const int x_63 = asint(x_6[1].x);
-  const int x_66 = asint(x_6[2].x);
-  const int x_68 = a[x_66];
-  x_GLF_color = float4(float(x_57), float(x_60), float(x_63), float(x_68));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.msl
deleted file mode 100644
index ac80a8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  int i = 0;
-  tint_array_wrapper_1 a = {};
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_32;
-  while (true) {
-    int const x_37 = i;
-    int const x_39 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_37 < x_39)) {
-    } else {
-      break;
-    }
-    int const x_43 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_44 = i;
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_43, ((int2(x_44, x_44) % int2(3, x_46))).y}};
-    a = tint_symbol_2;
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  int const x_55 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_57 = a.arr[x_55];
-  int const x_60 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_63 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_68 = a.arr[x_66];
-  *(tint_symbol_4) = float4(float(x_57), float(x_60), float(x_63), float(x_68));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2841f82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,137 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %26 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-      %v2int = OpTypeVector %int 2
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %a = OpVariable %_ptr_Function__arr_int_uint_2 Function %26
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %31 = OpLoad %int %30
-               OpStore %i %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpSLessThan %bool %36 %39
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-               OpBranch %42
-         %44 = OpLabel
-               OpBranch %33
-         %42 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %51 = OpLoad %int %50
-         %53 = OpCompositeConstruct %v2int %48 %48
-         %54 = OpCompositeConstruct %v2int %int_3 %51
-         %55 = OpSMod %v2int %53 %54
-         %56 = OpCompositeExtract %int %55 1
-         %57 = OpCompositeConstruct %_arr_int_uint_2 %47 %56
-               OpStore %a %57
-               OpBranch %34
-         %34 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %i %59
-               OpBranch %32
-         %33 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Function_int %a %61
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Function_int %a %69
-         %71 = OpLoad %int %70
-         %72 = OpConvertSToF %float %63
-         %73 = OpConvertSToF %float %65
-         %74 = OpConvertSToF %float %67
-         %75 = OpConvertSToF %float %71
-         %76 = OpCompositeConstruct %v4float %72 %73 %74 %75
-               OpStore %x_GLF_color %76
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d60c969..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,53 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var a : array<i32, 2>;
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_32;
-  loop {
-    let x_37 : i32 = i;
-    let x_39 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_37 < x_39)) {
-    } else {
-      break;
-    }
-    let x_43 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_44 : i32 = i;
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[3];
-    a = array<i32, 2>(x_43, ((vec2<i32>(x_44, x_44) % vec2<i32>(3, x_46))).y);
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_55 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_57 : i32 = a[x_55];
-  let x_60 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_63 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_68 : i32 = a[x_66];
-  x_GLF_color = vec4<f32>(f32(x_57), f32(x_60), f32(x_63), f32(x_68));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d963e3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int a[2] = (int[2])0;
-  const int x_32 = asint(x_6[2].x);
-  i = x_32;
-  while (true) {
-    const int x_37 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_39 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_37 < x_39)) {
-    } else {
-      break;
-    }
-    const int x_43 = asint(x_6[1].x);
-    const int x_44 = i;
-    const int x_46 = asint(x_6[3].x);
-    const int tint_symbol_2[2] = {x_43, (int2(x_44, x_44) % int2(3, x_46)).y};
-    a = tint_symbol_2;
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_55 = asint(x_6[2].x);
-  const int x_57 = a[x_55];
-  const int x_60 = asint(x_6[1].x);
-  const int x_63 = asint(x_6[1].x);
-  const int x_66 = asint(x_6[2].x);
-  const int x_68 = a[x_66];
-  x_GLF_color = float4(float(x_57), float(x_60), float(x_63), float(x_68));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.msl
deleted file mode 100644
index ac80a8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  int i = 0;
-  tint_array_wrapper_1 a = {};
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_32;
-  while (true) {
-    int const x_37 = i;
-    int const x_39 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_37 < x_39)) {
-    } else {
-      break;
-    }
-    int const x_43 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_44 = i;
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_43, ((int2(x_44, x_44) % int2(3, x_46))).y}};
-    a = tint_symbol_2;
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  int const x_55 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_57 = a.arr[x_55];
-  int const x_60 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_63 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_68 = a.arr[x_66];
-  *(tint_symbol_4) = float4(float(x_57), float(x_60), float(x_63), float(x_68));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2841f82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,137 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %26 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-      %v2int = OpTypeVector %int 2
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %a = OpVariable %_ptr_Function__arr_int_uint_2 Function %26
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %31 = OpLoad %int %30
-               OpStore %i %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpSLessThan %bool %36 %39
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-               OpBranch %42
-         %44 = OpLabel
-               OpBranch %33
-         %42 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %51 = OpLoad %int %50
-         %53 = OpCompositeConstruct %v2int %48 %48
-         %54 = OpCompositeConstruct %v2int %int_3 %51
-         %55 = OpSMod %v2int %53 %54
-         %56 = OpCompositeExtract %int %55 1
-         %57 = OpCompositeConstruct %_arr_int_uint_2 %47 %56
-               OpStore %a %57
-               OpBranch %34
-         %34 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %i %59
-               OpBranch %32
-         %33 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Function_int %a %61
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Function_int %a %69
-         %71 = OpLoad %int %70
-         %72 = OpConvertSToF %float %63
-         %73 = OpConvertSToF %float %65
-         %74 = OpConvertSToF %float %67
-         %75 = OpConvertSToF %float %71
-         %76 = OpCompositeConstruct %v4float %72 %73 %74 %75
-               OpStore %x_GLF_color %76
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d60c969..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-array-initializing-modulo/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,53 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var a : array<i32, 2>;
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_32;
-  loop {
-    let x_37 : i32 = i;
-    let x_39 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_37 < x_39)) {
-    } else {
-      break;
-    }
-    let x_43 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_44 : i32 = i;
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[3];
-    a = array<i32, 2>(x_43, ((vec2<i32>(x_44, x_44) % vec2<i32>(3, x_46))).y);
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_55 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_57 : i32 = a[x_55];
-  let x_60 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_63 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_68 : i32 = a[x_66];
-  x_GLF_color = vec4<f32>(f32(x_57), f32(x_60), f32(x_63), f32(x_68));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 9ee21a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float arr[3] = (float[3])0;
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_38 = asfloat(x_6[1].x);
-  const float x_40 = asfloat(x_6[2].x);
-  const float tint_symbol_3[3] = {x_36, x_38, x_40};
-  arr = tint_symbol_3;
-  i = 1;
-  while (true) {
-    const int x_46 = i;
-    const int x_48 = asint(x_9[2].x);
-    if ((x_46 < min(x_48, 3))) {
-    } else {
-      break;
-    }
-    const int x_53 = asint(x_9[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_55 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_57 = arr[x_53];
-    arr[x_53] = (x_57 + x_55);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_63 = asint(x_9[2].x);
-  const float x_65 = arr[x_63];
-  const float x_67 = asfloat(x_6[3].x);
-  if ((x_65 == x_67)) {
-    const int x_73 = asint(x_9[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_76 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_79 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_82 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_73), float(x_76), float(x_79), float(x_82));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_86 = asint(x_9[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_87 = float(x_86);
-    x_GLF_color = float4(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6e2c18c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 arr = {};
-  int i = 0;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_36, x_38, x_40}};
-  arr = tint_symbol_2;
-  i = 1;
-  while (true) {
-    int const x_46 = i;
-    int const x_48 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_46 < min(x_48, 3))) {
-    } else {
-      break;
-    }
-    int const x_53 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_55 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_57 = arr.arr[x_53];
-    arr.arr[x_53] = (x_57 + x_55);
-    {
-      int const x_60 = i;
-      i = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-    }
-  }
-  int const x_63 = x_9.x_GLF_uniform_int_values.arr[2].el;
-  float const x_65 = arr.arr[x_63];
-  float const x_67 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  if ((x_65 == x_67)) {
-    int const x_73 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_76 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_79 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_82 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_73), float(x_76), float(x_79), float(x_82));
-  } else {
-    int const x_86 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    float const x_87 = float(x_86);
-    *(tint_symbol_4) = float4(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4055cd4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,172 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 108
-; Schema: 0
-               OpCapability Shader
-         %52 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3 = OpTypePointer Function %_arr_float_uint_3
-         %27 = OpConstantNull %_arr_float_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-         %97 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_float_uint_3 Function %27
-          %i = OpVariable %_ptr_Function_int Function %30
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %35 = OpLoad %float %34
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %38 = OpLoad %float %37
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %41 = OpLoad %float %40
-         %42 = OpCompositeConstruct %_arr_float_uint_3 %35 %38 %41
-               OpStore %arr %42
-               OpStore %i %int_1
-               OpBranch %43
-         %43 = OpLabel
-               OpLoopMerge %44 %45 None
-               OpBranch %46
-         %46 = OpLabel
-         %47 = OpLoad %int %i
-         %49 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %50 = OpLoad %int %49
-         %51 = OpExtInst %int %52 SMin %50 %int_3
-         %54 = OpSLessThan %bool %47 %51
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %58
-         %57 = OpLabel
-               OpBranch %56
-         %58 = OpLabel
-               OpBranch %44
-         %56 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %62 = OpLoad %float %61
-         %64 = OpAccessChain %_ptr_Function_float %arr %60
-         %65 = OpLoad %float %64
-         %66 = OpAccessChain %_ptr_Function_float %arr %60
-         %67 = OpFAdd %float %65 %62
-               OpStore %66 %67
-               OpBranch %45
-         %45 = OpLabel
-         %68 = OpLoad %int %i
-         %69 = OpIAdd %int %68 %int_1
-               OpStore %i %69
-               OpBranch %43
-         %44 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Function_float %arr %71
-         %73 = OpLoad %float %72
-         %74 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %75 = OpLoad %float %74
-         %76 = OpFOrdEqual %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpConvertSToF %float %81
-         %89 = OpConvertSToF %float %83
-         %90 = OpConvertSToF %float %85
-         %91 = OpConvertSToF %float %87
-         %92 = OpCompositeConstruct %v4float %88 %89 %90 %91
-               OpStore %x_GLF_color %92
-               OpBranch %77
-         %79 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %94 = OpLoad %int %93
-         %95 = OpConvertSToF %float %94
-         %96 = OpCompositeConstruct %v4float %95 %95 %95 %95
-               OpStore %x_GLF_color %96
-               OpBranch %77
-         %77 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %97
-        %100 = OpLabel
-        %101 = OpFunctionCall %void %main_1
-        %102 = OpLoad %v4float %x_GLF_color
-        %103 = OpCompositeConstruct %main_out %102
-               OpReturnValue %103
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %105 = OpLabel
-        %106 = OpFunctionCall %main_out %main_inner
-        %107 = OpCompositeExtract %v4float %106 0
-               OpStore %x_GLF_color_1_1 %107
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index acc05e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,72 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<f32, 3>;
-  var i : i32;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[2];
-  arr = array<f32, 3>(x_36, x_38, x_40);
-  i = 1;
-  loop {
-    let x_46 : i32 = i;
-    let x_48 : i32 = x_9.x_GLF_uniform_int_values[2];
-    if ((x_46 < min(x_48, 3))) {
-    } else {
-      break;
-    }
-    let x_53 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_55 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_57 : f32 = arr[x_53];
-    arr[x_53] = (x_57 + x_55);
-
-    continuing {
-      let x_60 : i32 = i;
-      i = (x_60 + 1);
-    }
-  }
-  let x_63 : i32 = x_9.x_GLF_uniform_int_values[2];
-  let x_65 : f32 = arr[x_63];
-  let x_67 : f32 = x_6.x_GLF_uniform_float_values[3];
-  if ((x_65 == x_67)) {
-    let x_73 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_76 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_79 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_82 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_73), f32(x_76), f32(x_79), f32(x_82));
-  } else {
-    let x_86 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_87 : f32 = f32(x_86);
-    x_GLF_color = vec4<f32>(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 9ee21a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float arr[3] = (float[3])0;
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_38 = asfloat(x_6[1].x);
-  const float x_40 = asfloat(x_6[2].x);
-  const float tint_symbol_3[3] = {x_36, x_38, x_40};
-  arr = tint_symbol_3;
-  i = 1;
-  while (true) {
-    const int x_46 = i;
-    const int x_48 = asint(x_9[2].x);
-    if ((x_46 < min(x_48, 3))) {
-    } else {
-      break;
-    }
-    const int x_53 = asint(x_9[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_55 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_57 = arr[x_53];
-    arr[x_53] = (x_57 + x_55);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_63 = asint(x_9[2].x);
-  const float x_65 = arr[x_63];
-  const float x_67 = asfloat(x_6[3].x);
-  if ((x_65 == x_67)) {
-    const int x_73 = asint(x_9[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_76 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_79 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_82 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_73), float(x_76), float(x_79), float(x_82));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_86 = asint(x_9[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_87 = float(x_86);
-    x_GLF_color = float4(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6e2c18c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 arr = {};
-  int i = 0;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_36, x_38, x_40}};
-  arr = tint_symbol_2;
-  i = 1;
-  while (true) {
-    int const x_46 = i;
-    int const x_48 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_46 < min(x_48, 3))) {
-    } else {
-      break;
-    }
-    int const x_53 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_55 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_57 = arr.arr[x_53];
-    arr.arr[x_53] = (x_57 + x_55);
-    {
-      int const x_60 = i;
-      i = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-    }
-  }
-  int const x_63 = x_9.x_GLF_uniform_int_values.arr[2].el;
-  float const x_65 = arr.arr[x_63];
-  float const x_67 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  if ((x_65 == x_67)) {
-    int const x_73 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_76 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_79 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_82 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_73), float(x_76), float(x_79), float(x_82));
-  } else {
-    int const x_86 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    float const x_87 = float(x_86);
-    *(tint_symbol_4) = float4(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4055cd4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,172 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 108
-; Schema: 0
-               OpCapability Shader
-         %52 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3 = OpTypePointer Function %_arr_float_uint_3
-         %27 = OpConstantNull %_arr_float_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-         %97 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_float_uint_3 Function %27
-          %i = OpVariable %_ptr_Function_int Function %30
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %35 = OpLoad %float %34
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %38 = OpLoad %float %37
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %41 = OpLoad %float %40
-         %42 = OpCompositeConstruct %_arr_float_uint_3 %35 %38 %41
-               OpStore %arr %42
-               OpStore %i %int_1
-               OpBranch %43
-         %43 = OpLabel
-               OpLoopMerge %44 %45 None
-               OpBranch %46
-         %46 = OpLabel
-         %47 = OpLoad %int %i
-         %49 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %50 = OpLoad %int %49
-         %51 = OpExtInst %int %52 SMin %50 %int_3
-         %54 = OpSLessThan %bool %47 %51
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %58
-         %57 = OpLabel
-               OpBranch %56
-         %58 = OpLabel
-               OpBranch %44
-         %56 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %62 = OpLoad %float %61
-         %64 = OpAccessChain %_ptr_Function_float %arr %60
-         %65 = OpLoad %float %64
-         %66 = OpAccessChain %_ptr_Function_float %arr %60
-         %67 = OpFAdd %float %65 %62
-               OpStore %66 %67
-               OpBranch %45
-         %45 = OpLabel
-         %68 = OpLoad %int %i
-         %69 = OpIAdd %int %68 %int_1
-               OpStore %i %69
-               OpBranch %43
-         %44 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Function_float %arr %71
-         %73 = OpLoad %float %72
-         %74 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %75 = OpLoad %float %74
-         %76 = OpFOrdEqual %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpConvertSToF %float %81
-         %89 = OpConvertSToF %float %83
-         %90 = OpConvertSToF %float %85
-         %91 = OpConvertSToF %float %87
-         %92 = OpCompositeConstruct %v4float %88 %89 %90 %91
-               OpStore %x_GLF_color %92
-               OpBranch %77
-         %79 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %94 = OpLoad %int %93
-         %95 = OpConvertSToF %float %94
-         %96 = OpCompositeConstruct %v4float %95 %95 %95 %95
-               OpStore %x_GLF_color %96
-               OpBranch %77
-         %77 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %97
-        %100 = OpLabel
-        %101 = OpFunctionCall %void %main_1
-        %102 = OpLoad %v4float %x_GLF_color
-        %103 = OpCompositeConstruct %main_out %102
-               OpReturnValue %103
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %105 = OpLabel
-        %106 = OpFunctionCall %main_out %main_inner
-        %107 = OpCompositeExtract %v4float %106 0
-               OpStore %x_GLF_color_1_1 %107
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index acc05e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-loop-min-increment-array-element/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,72 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<f32, 3>;
-  var i : i32;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[2];
-  arr = array<f32, 3>(x_36, x_38, x_40);
-  i = 1;
-  loop {
-    let x_46 : i32 = i;
-    let x_48 : i32 = x_9.x_GLF_uniform_int_values[2];
-    if ((x_46 < min(x_48, 3))) {
-    } else {
-      break;
-    }
-    let x_53 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_55 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_57 : f32 = arr[x_53];
-    arr[x_53] = (x_57 + x_55);
-
-    continuing {
-      let x_60 : i32 = i;
-      i = (x_60 + 1);
-    }
-  }
-  let x_63 : i32 = x_9.x_GLF_uniform_int_values[2];
-  let x_65 : f32 = arr[x_63];
-  let x_67 : f32 = x_6.x_GLF_uniform_float_values[3];
-  if ((x_65 == x_67)) {
-    let x_73 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_76 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_79 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_82 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_73), f32(x_76), f32(x_79), f32(x_82));
-  } else {
-    let x_86 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_87 : f32 = f32(x_86);
-    x_GLF_color = vec4<f32>(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 5c9b0a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,70 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_26 = asint(x_6[2].x);
-  a = x_26;
-  const int x_28 = asint(x_6[2].x);
-  i = x_28;
-  while (true) {
-    const int x_33 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_35 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 0:
-      case -1: {
-        const int x_42 = asint(x_6[1].x);
-        a = x_42;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_45 = a;
-  const int x_47 = asint(x_6[1].x);
-  if ((x_45 == x_47)) {
-    const int x_53 = asint(x_6[1].x);
-    const int x_56 = asint(x_6[2].x);
-    const int x_59 = asint(x_6[2].x);
-    const int x_62 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_53), float(x_56), float(x_59), float(x_62));
-  } else {
-    const int x_66 = asint(x_6[2].x);
-    const float x_67 = float(x_66);
-    x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.msl
deleted file mode 100644
index c737d36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_26;
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_28;
-  while (true) {
-    int const x_33 = i;
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    int const x_38 = i;
-    switch(x_38) {
-      case 0:
-      case -1: {
-        int const x_42 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        a = x_42;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_43 = i;
-      i = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-    }
-  }
-  int const x_45 = a;
-  int const x_47 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_45 == x_47)) {
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_59 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_53), float(x_56), float(x_59), float(x_62));
-  } else {
-    int const x_66 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_67 = float(x_66);
-    *(tint_symbol_3) = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b10aa66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,145 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %29 = OpLoad %int %28
-               OpStore %i %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpSLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %31
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-               OpSelectionMerge %44 None
-               OpSwitch %43 %45 0 %46 -1 %46
-         %46 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %49 = OpLoad %int %48
-               OpStore %a %49
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %50 = OpLoad %int %i
-         %51 = OpIAdd %int %50 %int_1
-               OpStore %i %51
-               OpBranch %30
-         %31 = OpLabel
-         %52 = OpLoad %int %a
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %54 = OpLoad %int %53
-         %55 = OpIEqual %bool %52 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %60
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %56
-         %58 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %73
-         %75 = OpCompositeConstruct %v4float %74 %74 %74 %74
-               OpStore %x_GLF_color %75
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5bce8a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,66 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_26;
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_28;
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    let x_38 : i32 = i;
-    switch(x_38) {
-      case 0, -1: {
-        let x_42 : i32 = x_6.x_GLF_uniform_int_values[1];
-        a = x_42;
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_43 : i32 = i;
-      i = (x_43 + 1);
-    }
-  }
-  let x_45 : i32 = a;
-  let x_47 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_45 == x_47)) {
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_59 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_53), f32(x_56), f32(x_59), f32(x_62));
-  } else {
-    let x_66 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_67 : f32 = f32(x_66);
-    x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5c9b0a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,70 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_26 = asint(x_6[2].x);
-  a = x_26;
-  const int x_28 = asint(x_6[2].x);
-  i = x_28;
-  while (true) {
-    const int x_33 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_35 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 0:
-      case -1: {
-        const int x_42 = asint(x_6[1].x);
-        a = x_42;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_45 = a;
-  const int x_47 = asint(x_6[1].x);
-  if ((x_45 == x_47)) {
-    const int x_53 = asint(x_6[1].x);
-    const int x_56 = asint(x_6[2].x);
-    const int x_59 = asint(x_6[2].x);
-    const int x_62 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_53), float(x_56), float(x_59), float(x_62));
-  } else {
-    const int x_66 = asint(x_6[2].x);
-    const float x_67 = float(x_66);
-    x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.msl
deleted file mode 100644
index c737d36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_26;
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_28;
-  while (true) {
-    int const x_33 = i;
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    int const x_38 = i;
-    switch(x_38) {
-      case 0:
-      case -1: {
-        int const x_42 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        a = x_42;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_43 = i;
-      i = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-    }
-  }
-  int const x_45 = a;
-  int const x_47 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_45 == x_47)) {
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_59 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_53), float(x_56), float(x_59), float(x_62));
-  } else {
-    int const x_66 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_67 = float(x_66);
-    *(tint_symbol_3) = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b10aa66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,145 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %29 = OpLoad %int %28
-               OpStore %i %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpSLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %31
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-               OpSelectionMerge %44 None
-               OpSwitch %43 %45 0 %46 -1 %46
-         %46 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %49 = OpLoad %int %48
-               OpStore %a %49
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %50 = OpLoad %int %i
-         %51 = OpIAdd %int %50 %int_1
-               OpStore %i %51
-               OpBranch %30
-         %31 = OpLabel
-         %52 = OpLoad %int %a
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %54 = OpLoad %int %53
-         %55 = OpIEqual %bool %52 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %60
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %56
-         %58 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %73
-         %75 = OpCompositeConstruct %v4float %74 %74 %74 %74
-               OpStore %x_GLF_color %75
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5bce8a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-for-switch-fallthrough/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,66 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_26;
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_28;
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_33 < x_35)) {
-    } else {
-      break;
-    }
-    let x_38 : i32 = i;
-    switch(x_38) {
-      case 0, -1: {
-        let x_42 : i32 = x_6.x_GLF_uniform_int_values[1];
-        a = x_42;
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_43 : i32 = i;
-      i = (x_43 + 1);
-    }
-  }
-  let x_45 : i32 = a;
-  let x_47 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_45 == x_47)) {
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_59 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_53), f32(x_56), f32(x_59), f32(x_62));
-  } else {
-    let x_66 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_67 : f32 = f32(x_66);
-    x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6c9405f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[2];
-};
-
-void main_1() {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  f0 = asfloat(0x7fc00000u);
-  f1 = frac(f0);
-  const float x_38 = gl_FragCoord.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_38 > x_40)) {
-    const int x_46 = asint(x_10[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_55 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    const float x_58 = f1;
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.msl
deleted file mode 100644
index d866d07..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  f0 = NAN;
-  float const x_35 = f0;
-  f1 = fract(x_35);
-  float const x_38 = (*(tint_symbol_3)).x;
-  float const x_40 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_38 > x_40)) {
-    int const x_46 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_49 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_55 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    float const x_58 = f1;
-    *(tint_symbol_4) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, constant buf1& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index cc72c64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %f0 "f0"
-               OpName %f1 "f1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%float_0x1_8p_128 = OpConstant %float 0x1.8p+128
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-         %f0 = OpVariable %_ptr_Function_float Function %29
-         %f1 = OpVariable %_ptr_Function_float Function %29
-               OpStore %f0 %float_0x1_8p_128
-         %32 = OpLoad %float %f0
-         %33 = OpExtInst %float %34 Fract %32
-               OpStore %f1 %33
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %41 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpFOrdGreaterThan %bool %38 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpConvertSToF %float %51
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %45
-         %47 = OpLabel
-         %63 = OpLoad %float %f1
-         %64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-               OpStore %x_GLF_color %64
-               OpBranch %45
-         %45 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4f8be8c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-fn main_1() {
-  var f0 : f32;
-  var f1 : f32;
-  f0 = 0x1.8p+128;
-  let x_35 : f32 = f0;
-  f1 = fract(x_35);
-  let x_38 : f32 = gl_FragCoord.x;
-  let x_40 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_38 > x_40)) {
-    let x_46 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_49 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_55 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_46), f32(x_49), f32(x_52), f32(x_55));
-  } else {
-    let x_58 : f32 = f1;
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d1f4736..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[2];
-};
-
-void main_1() {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  f0 = asfloat(0x7f800000u);
-  f1 = frac(f0);
-  const float x_38 = gl_FragCoord.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_38 > x_40)) {
-    const int x_46 = asint(x_10[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_55 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    const float x_58 = f1;
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.msl
deleted file mode 100644
index 94a4148..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  f0 = INFINITY;
-  float const x_35 = f0;
-  f1 = fract(x_35);
-  float const x_38 = (*(tint_symbol_3)).x;
-  float const x_40 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_38 > x_40)) {
-    int const x_46 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_49 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_55 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    float const x_58 = f1;
-    *(tint_symbol_4) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, constant buf1& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2e63fe9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %f0 "f0"
-               OpName %f1 "f1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%float_0x1p_128 = OpConstant %float 0x1p+128
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-         %f0 = OpVariable %_ptr_Function_float Function %29
-         %f1 = OpVariable %_ptr_Function_float Function %29
-               OpStore %f0 %float_0x1p_128
-         %32 = OpLoad %float %f0
-         %33 = OpExtInst %float %34 Fract %32
-               OpStore %f1 %33
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %41 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpFOrdGreaterThan %bool %38 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpConvertSToF %float %51
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %45
-         %47 = OpLabel
-         %63 = OpLoad %float %f1
-         %64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-               OpStore %x_GLF_color %64
-               OpBranch %45
-         %45 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 70239e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-asin-undefined-never-used/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-fn main_1() {
-  var f0 : f32;
-  var f1 : f32;
-  f0 = 0x1p+128;
-  let x_35 : f32 = f0;
-  f1 = fract(x_35);
-  let x_38 : f32 = gl_FragCoord.x;
-  let x_40 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_38 > x_40)) {
-    let x_46 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_49 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_55 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_46), f32(x_49), f32(x_52), f32(x_55));
-  } else {
-    let x_58 : f32 = f1;
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index c012937..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,66 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  float2 b = float2(0.0f, 0.0f);
-  float a = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_30 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float2(x_30, x_30);
-  b = frac(v1);
-  a = smoothstep(float2(1.0f, 1.0f), float2(1.0f, 1.0f), b).x;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_38 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_39 = a;
-  const float x_40 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  x_GLF_color = float4(x_38, x_39, x_40, x_42);
-  const float x_45 = b.x;
-  const bool x_46 = (x_45 < 1.0f);
-  x_52_phi = x_46;
-  if (x_46) {
-    const float x_50 = b.y;
-    x_51 = (x_50 < 1.0f);
-    x_52_phi = x_51;
-  }
-  if (x_52_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_57 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_59 = b.x;
-    const float x_61 = b.y;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_63 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(x_57, x_59, x_61, x_63);
-  } else {
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_66 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.msl
deleted file mode 100644
index e721dc3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  float2 b = 0.0f;
-  float a = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  float const x_30 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float2(x_30, x_30);
-  float2 const x_32 = v1;
-  b = fract(x_32);
-  float2 const x_34 = b;
-  a = smoothstep(float2(1.0f, 1.0f), float2(1.0f, 1.0f), x_34).x;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_39 = a;
-  float const x_40 = a;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  *(tint_symbol_3) = float4(x_38, x_39, x_40, x_42);
-  float const x_45 = b.x;
-  bool const x_46 = (x_45 < 1.0f);
-  x_52_phi = x_46;
-  if (x_46) {
-    float const x_50 = b.y;
-    x_51 = (x_50 < 1.0f);
-    x_52_phi = x_51;
-  }
-  bool const x_52 = x_52_phi;
-  if (x_52) {
-    float const x_57 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_59 = b.x;
-    float const x_61 = b.y;
-    float const x_63 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_57, x_59, x_61, x_63);
-  } else {
-    float const x_66 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 26e9f23..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 89
-; Schema: 0
-               OpCapability Shader
-         %40 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %b "b"
-               OpName %a "a"
-               OpName %x_51 "x_51"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %21 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %29 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %44 = OpConstantComposite %v2float %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %78 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %21
-          %b = OpVariable %_ptr_Function_v2float Function %21
-          %a = OpVariable %_ptr_Function_float Function %25
-       %x_51 = OpVariable %_ptr_Function_bool Function %29
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %29
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %36 = OpLoad %float %35
-         %37 = OpCompositeConstruct %v2float %36 %36
-               OpStore %v1 %37
-         %38 = OpLoad %v2float %v1
-         %39 = OpExtInst %v2float %40 Fract %38
-               OpStore %b %39
-         %41 = OpLoad %v2float %b
-         %42 = OpExtInst %v2float %40 SmoothStep %44 %44 %41
-         %45 = OpCompositeExtract %float %42 0
-               OpStore %a %45
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpLoad %float %a
-         %49 = OpLoad %float %a
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpCompositeConstruct %v4float %47 %48 %49 %51
-               OpStore %x_GLF_color %52
-         %53 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %54 = OpLoad %float %53
-         %55 = OpFOrdLessThan %bool %54 %float_1
-               OpStore %x_52_phi %55
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-         %58 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %59 = OpLoad %float %58
-         %60 = OpFOrdLessThan %bool %59 %float_1
-               OpStore %x_51 %60
-         %61 = OpLoad %bool %x_51
-               OpStore %x_52_phi %61
-               OpBranch %56
-         %56 = OpLabel
-         %62 = OpLoad %bool %x_52_phi
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-         %66 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %67 = OpLoad %float %66
-         %68 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %69 = OpLoad %float %68
-         %70 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %73 = OpLoad %float %72
-         %74 = OpCompositeConstruct %v4float %67 %69 %71 %73
-               OpStore %x_GLF_color %74
-               OpBranch %63
-         %65 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %76 = OpLoad %float %75
-         %77 = OpCompositeConstruct %v4float %76 %76 %76 %76
-               OpStore %x_GLF_color %77
-               OpBranch %63
-         %63 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %78
-         %81 = OpLabel
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %86 = OpLabel
-         %87 = OpFunctionCall %main_out %main_inner
-         %88 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %88
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 14326d3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  var b : vec2<f32>;
-  var a : f32;
-  var x_51 : bool;
-  var x_52_phi : bool;
-  let x_30 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v1 = vec2<f32>(x_30, x_30);
-  let x_32 : vec2<f32> = v1;
-  b = fract(x_32);
-  let x_34 : vec2<f32> = b;
-  a = smoothStep(vec2<f32>(1.0, 1.0), vec2<f32>(1.0, 1.0), x_34).x;
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_39 : f32 = a;
-  let x_40 : f32 = a;
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  x_GLF_color = vec4<f32>(x_38, x_39, x_40, x_42);
-  let x_45 : f32 = b.x;
-  let x_46 : bool = (x_45 < 1.0);
-  x_52_phi = x_46;
-  if (x_46) {
-    let x_50 : f32 = b.y;
-    x_51 = (x_50 < 1.0);
-    x_52_phi = x_51;
-  }
-  let x_52 : bool = x_52_phi;
-  if (x_52) {
-    let x_57 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_59 : f32 = b.x;
-    let x_61 : f32 = b.y;
-    let x_63 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_57, x_59, x_61, x_63);
-  } else {
-    let x_66 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c012937..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,66 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  float2 b = float2(0.0f, 0.0f);
-  float a = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_30 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float2(x_30, x_30);
-  b = frac(v1);
-  a = smoothstep(float2(1.0f, 1.0f), float2(1.0f, 1.0f), b).x;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_38 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_39 = a;
-  const float x_40 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  x_GLF_color = float4(x_38, x_39, x_40, x_42);
-  const float x_45 = b.x;
-  const bool x_46 = (x_45 < 1.0f);
-  x_52_phi = x_46;
-  if (x_46) {
-    const float x_50 = b.y;
-    x_51 = (x_50 < 1.0f);
-    x_52_phi = x_51;
-  }
-  if (x_52_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_57 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_59 = b.x;
-    const float x_61 = b.y;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_63 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(x_57, x_59, x_61, x_63);
-  } else {
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_66 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.msl
deleted file mode 100644
index e721dc3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  float2 b = 0.0f;
-  float a = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  float const x_30 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float2(x_30, x_30);
-  float2 const x_32 = v1;
-  b = fract(x_32);
-  float2 const x_34 = b;
-  a = smoothstep(float2(1.0f, 1.0f), float2(1.0f, 1.0f), x_34).x;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_39 = a;
-  float const x_40 = a;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  *(tint_symbol_3) = float4(x_38, x_39, x_40, x_42);
-  float const x_45 = b.x;
-  bool const x_46 = (x_45 < 1.0f);
-  x_52_phi = x_46;
-  if (x_46) {
-    float const x_50 = b.y;
-    x_51 = (x_50 < 1.0f);
-    x_52_phi = x_51;
-  }
-  bool const x_52 = x_52_phi;
-  if (x_52) {
-    float const x_57 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_59 = b.x;
-    float const x_61 = b.y;
-    float const x_63 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_57, x_59, x_61, x_63);
-  } else {
-    float const x_66 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 26e9f23..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 89
-; Schema: 0
-               OpCapability Shader
-         %40 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %b "b"
-               OpName %a "a"
-               OpName %x_51 "x_51"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %21 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %29 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %44 = OpConstantComposite %v2float %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %78 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %21
-          %b = OpVariable %_ptr_Function_v2float Function %21
-          %a = OpVariable %_ptr_Function_float Function %25
-       %x_51 = OpVariable %_ptr_Function_bool Function %29
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %29
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %36 = OpLoad %float %35
-         %37 = OpCompositeConstruct %v2float %36 %36
-               OpStore %v1 %37
-         %38 = OpLoad %v2float %v1
-         %39 = OpExtInst %v2float %40 Fract %38
-               OpStore %b %39
-         %41 = OpLoad %v2float %b
-         %42 = OpExtInst %v2float %40 SmoothStep %44 %44 %41
-         %45 = OpCompositeExtract %float %42 0
-               OpStore %a %45
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpLoad %float %a
-         %49 = OpLoad %float %a
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpCompositeConstruct %v4float %47 %48 %49 %51
-               OpStore %x_GLF_color %52
-         %53 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %54 = OpLoad %float %53
-         %55 = OpFOrdLessThan %bool %54 %float_1
-               OpStore %x_52_phi %55
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-         %58 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %59 = OpLoad %float %58
-         %60 = OpFOrdLessThan %bool %59 %float_1
-               OpStore %x_51 %60
-         %61 = OpLoad %bool %x_51
-               OpStore %x_52_phi %61
-               OpBranch %56
-         %56 = OpLabel
-         %62 = OpLoad %bool %x_52_phi
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-         %66 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %67 = OpLoad %float %66
-         %68 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %69 = OpLoad %float %68
-         %70 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %73 = OpLoad %float %72
-         %74 = OpCompositeConstruct %v4float %67 %69 %71 %73
-               OpStore %x_GLF_color %74
-               OpBranch %63
-         %65 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %76 = OpLoad %float %75
-         %77 = OpCompositeConstruct %v4float %76 %76 %76 %76
-               OpStore %x_GLF_color %77
-               OpBranch %63
-         %63 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %78
-         %81 = OpLabel
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %86 = OpLabel
-         %87 = OpFunctionCall %main_out %main_inner
-         %88 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %88
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 14326d3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fract-smoothstep-undefined/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  var b : vec2<f32>;
-  var a : f32;
-  var x_51 : bool;
-  var x_52_phi : bool;
-  let x_30 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v1 = vec2<f32>(x_30, x_30);
-  let x_32 : vec2<f32> = v1;
-  b = fract(x_32);
-  let x_34 : vec2<f32> = b;
-  a = smoothStep(vec2<f32>(1.0, 1.0), vec2<f32>(1.0, 1.0), x_34).x;
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_39 : f32 = a;
-  let x_40 : f32 = a;
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  x_GLF_color = vec4<f32>(x_38, x_39, x_40, x_42);
-  let x_45 : f32 = b.x;
-  let x_46 : bool = (x_45 < 1.0);
-  x_52_phi = x_46;
-  if (x_46) {
-    let x_50 : f32 = b.y;
-    x_51 = (x_50 < 1.0);
-    x_52_phi = x_51;
-  }
-  let x_52 : bool = x_52_phi;
-  if (x_52) {
-    let x_57 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_59 : f32 = b.x;
-    let x_61 : f32 = b.y;
-    let x_63 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_57, x_59, x_61, x_63);
-  } else {
-    let x_66 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_66, x_66, x_66, x_66);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 16724bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const float x_28 = gl_FragCoord.x;
-  a = int(x_28);
-  if ((~(a) < 0)) {
-    const int x_36 = asint(x_7[1].x);
-    a = x_36;
-  }
-  const int x_37 = a;
-  const int x_39 = asint(x_7[1].x);
-  if ((x_37 == x_39)) {
-    const int x_45 = asint(x_7[1].x);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_51 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_54 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_58 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_59 = float(x_58);
-    x_GLF_color = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.msl
deleted file mode 100644
index a05be67..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  float const x_28 = (*(tint_symbol_3)).x;
-  a = int(x_28);
-  int const x_30 = a;
-  if ((~(x_30) < 0)) {
-    int const x_36 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    a = x_36;
-  }
-  int const x_37 = a;
-  int const x_39 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_37 == x_39)) {
-    int const x_45 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_48 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_51 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    int const x_58 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_59 = float(x_58);
-    *(tint_symbol_4) = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index bfd9935..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %24
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %28 = OpLoad %float %27
-         %29 = OpConvertFToS %int %28
-               OpStore %a %29
-         %30 = OpLoad %int %a
-         %31 = OpNot %int %30
-         %33 = OpSLessThan %bool %31 %int_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %40 = OpLoad %int %39
-               OpStore %a %40
-               OpBranch %35
-         %35 = OpLabel
-         %41 = OpLoad %int %a
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpIEqual %bool %41 %43
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %47
-         %46 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpConvertSToF %float %49
-         %57 = OpConvertSToF %float %51
-         %58 = OpConvertSToF %float %53
-         %59 = OpConvertSToF %float %55
-         %60 = OpCompositeConstruct %v4float %56 %57 %58 %59
-               OpStore %x_GLF_color %60
-               OpBranch %45
-         %47 = OpLabel
-         %61 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpConvertSToF %float %62
-         %64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-               OpStore %x_GLF_color %64
-               OpBranch %45
-         %45 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b258d3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_28 : f32 = gl_FragCoord.x;
-  a = i32(x_28);
-  let x_30 : i32 = a;
-  if ((~(x_30) < 0)) {
-    let x_36 : i32 = x_7.x_GLF_uniform_int_values[1];
-    a = x_36;
-  }
-  let x_37 : i32 = a;
-  let x_39 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_37 == x_39)) {
-    let x_45 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_48 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_51 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_45), f32(x_48), f32(x_51), f32(x_54));
-  } else {
-    let x_58 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_59 : f32 = f32(x_58);
-    x_GLF_color = vec4<f32>(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 16724bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const float x_28 = gl_FragCoord.x;
-  a = int(x_28);
-  if ((~(a) < 0)) {
-    const int x_36 = asint(x_7[1].x);
-    a = x_36;
-  }
-  const int x_37 = a;
-  const int x_39 = asint(x_7[1].x);
-  if ((x_37 == x_39)) {
-    const int x_45 = asint(x_7[1].x);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_51 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_54 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_58 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_59 = float(x_58);
-    x_GLF_color = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.msl
deleted file mode 100644
index a05be67..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  float const x_28 = (*(tint_symbol_3)).x;
-  a = int(x_28);
-  int const x_30 = a;
-  if ((~(x_30) < 0)) {
-    int const x_36 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    a = x_36;
-  }
-  int const x_37 = a;
-  int const x_39 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_37 == x_39)) {
-    int const x_45 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_48 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_51 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    int const x_58 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_59 = float(x_58);
-    *(tint_symbol_4) = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index bfd9935..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %24
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %28 = OpLoad %float %27
-         %29 = OpConvertFToS %int %28
-               OpStore %a %29
-         %30 = OpLoad %int %a
-         %31 = OpNot %int %30
-         %33 = OpSLessThan %bool %31 %int_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %40 = OpLoad %int %39
-               OpStore %a %40
-               OpBranch %35
-         %35 = OpLabel
-         %41 = OpLoad %int %a
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpIEqual %bool %41 %43
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %47
-         %46 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpConvertSToF %float %49
-         %57 = OpConvertSToF %float %51
-         %58 = OpConvertSToF %float %53
-         %59 = OpConvertSToF %float %55
-         %60 = OpCompositeConstruct %v4float %56 %57 %58 %59
-               OpStore %x_GLF_color %60
-               OpBranch %45
-         %47 = OpLabel
-         %61 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpConvertSToF %float %62
-         %64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-               OpStore %x_GLF_color %64
-               OpBranch %45
-         %45 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b258d3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-bitwise-not/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_28 : f32 = gl_FragCoord.x;
-  a = i32(x_28);
-  let x_30 : i32 = a;
-  if ((~(x_30) < 0)) {
-    let x_36 : i32 = x_7.x_GLF_uniform_int_values[1];
-    a = x_36;
-  }
-  let x_37 : i32 = a;
-  let x_39 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_37 == x_39)) {
-    let x_45 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_48 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_51 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_45), f32(x_48), f32(x_51), f32(x_54));
-  } else {
-    let x_58 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_59 : f32 = f32(x_58);
-    x_GLF_color = vec4<f32>(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7587b70..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,3 +0,0 @@
-SKIP: FAILED
-
-exit status 3221225725
\ No newline at end of file
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.msl
deleted file mode 100644
index 65126f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float4 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_10, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_2 data = {};
-  int b = 0;
-  int y = 0;
-  int i = 0;
-  float const x_42 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_45 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={float4(x_42, x_42, x_42, x_42), float4(x_45, x_45, x_45, x_45)}};
-  data = tint_symbol_2;
-  int const x_49 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  b = x_49;
-  float const x_51 = (*(tint_symbol_4)).y;
-  int const x_54 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  float const x_56 = (*(tint_symbol_4)).y;
-  int const x_60 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  y = clamp(int(x_51), (x_54 | int(x_56)), x_60);
-  int const x_63 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  i = x_63;
-  while (true) {
-    bool x_82 = false;
-    bool x_83_phi = false;
-    int const x_68 = i;
-    int const x_70 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_68 < x_70)) {
-    } else {
-      break;
-    }
-    int const x_73 = b;
-    int const x_75 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    bool const x_76 = (x_73 > x_75);
-    x_83_phi = x_76;
-    if (x_76) {
-      int const x_79 = y;
-      int const x_81 = x_10.x_GLF_uniform_int_values.arr[1].el;
-      x_82 = (x_79 > x_81);
-      x_83_phi = x_82;
-    }
-    bool const x_83 = x_83_phi;
-    if (x_83) {
-      break;
-    }
-    int const x_86 = b;
-    b = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-    {
-      int const x_88 = i;
-      i = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    }
-  }
-  int const x_90 = b;
-  int const x_92 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_90 == x_92)) {
-    int const x_97 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_99 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_101 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_104 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_107 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_110 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_113 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    data.arr[clamp(x_97, x_99, x_101)] = float4(float(x_104), float(x_107), float(x_110), float(x_113));
-  }
-  int const x_118 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  float4 const x_120 = data.arr[x_118];
-  *(tint_symbol_5) = float4(x_120.x, x_120.y, x_120.z, x_120.w);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, x_10, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 04622ad..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,236 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 153
-; Schema: 0
-               OpCapability Shader
-         %61 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %b "b"
-               OpName %y "y"
-               OpName %i "i"
-               OpName %x_82 "x_82"
-               OpName %x_83_phi "x_83_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpDecorate %_arr_v4float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_v4float_uint_2 = OpTypeArray %v4float %uint_2
-%_ptr_Function__arr_v4float_uint_2 = OpTypePointer Function %_arr_v4float_uint_2
-         %31 = OpConstantNull %_arr_v4float_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Private_float = OpTypePointer Private %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %74 = OpConstantNull %bool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_v4float_uint_2 Function %31
-          %b = OpVariable %_ptr_Function_int Function %34
-          %y = OpVariable %_ptr_Function_int Function %34
-          %i = OpVariable %_ptr_Function_int Function %34
-       %x_82 = OpVariable %_ptr_Function_bool Function %74
-   %x_83_phi = OpVariable %_ptr_Function_bool Function %74
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %44 = OpCompositeConstruct %v4float %41 %41 %41 %41
-         %45 = OpCompositeConstruct %v4float %43 %43 %43 %43
-         %46 = OpCompositeConstruct %_arr_v4float_uint_2 %44 %45
-               OpStore %data %46
-         %49 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %50 = OpLoad %int %49
-               OpStore %b %50
-         %52 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %53 = OpLoad %float %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %57 = OpLoad %float %56
-         %58 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %59 = OpLoad %int %58
-         %62 = OpConvertFToS %int %53
-         %63 = OpConvertFToS %int %57
-         %64 = OpBitwiseOr %int %55 %63
-         %60 = OpExtInst %int %61 SClamp %62 %64 %59
-               OpStore %y %60
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %66 = OpLoad %int %65
-               OpStore %i %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %int %i
-         %77 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %78 = OpLoad %int %77
-         %79 = OpSLessThan %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpBranch %80
-         %82 = OpLabel
-               OpBranch %68
-         %80 = OpLabel
-         %83 = OpLoad %int %b
-         %84 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpSGreaterThan %bool %83 %85
-               OpStore %x_83_phi %86
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %87
-         %88 = OpLabel
-         %89 = OpLoad %int %y
-         %90 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %91 = OpLoad %int %90
-         %92 = OpSGreaterThan %bool %89 %91
-               OpStore %x_82 %92
-         %93 = OpLoad %bool %x_82
-               OpStore %x_83_phi %93
-               OpBranch %87
-         %87 = OpLabel
-         %94 = OpLoad %bool %x_83_phi
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-               OpBranch %68
-         %95 = OpLabel
-         %97 = OpLoad %int %b
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %b %98
-               OpBranch %69
-         %69 = OpLabel
-         %99 = OpLoad %int %i
-        %100 = OpIAdd %int %99 %int_1
-               OpStore %i %100
-               OpBranch %67
-         %68 = OpLabel
-        %101 = OpLoad %int %b
-        %102 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %103 = OpLoad %int %102
-        %104 = OpIEqual %bool %101 %103
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %105
-        %106 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %111 = OpLoad %int %110
-        %113 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %118 = OpLoad %int %117
-        %119 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %120 = OpLoad %int %119
-        %121 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %122 = OpLoad %int %121
-        %123 = OpExtInst %int %61 SClamp %109 %111 %114
-        %125 = OpAccessChain %_ptr_Function_v4float %data %123
-        %126 = OpConvertSToF %float %116
-        %127 = OpConvertSToF %float %118
-        %128 = OpConvertSToF %float %120
-        %129 = OpConvertSToF %float %122
-        %130 = OpCompositeConstruct %v4float %126 %127 %128 %129
-               OpStore %125 %130
-               OpBranch %105
-        %105 = OpLabel
-        %131 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %132 = OpLoad %int %131
-        %133 = OpAccessChain %_ptr_Function_v4float %data %132
-        %134 = OpLoad %v4float %133
-        %135 = OpCompositeExtract %float %134 0
-        %136 = OpCompositeExtract %float %134 1
-        %137 = OpCompositeExtract %float %134 2
-        %138 = OpCompositeExtract %float %134 3
-        %139 = OpCompositeConstruct %v4float %135 %136 %137 %138
-               OpStore %x_GLF_color %139
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %144 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %145 = OpFunctionCall %void %main_1
-        %146 = OpLoad %v4float %x_GLF_color
-        %147 = OpCompositeConstruct %main_out %146
-               OpReturnValue %147
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %149 = OpLabel
-        %151 = OpLoad %v4float %gl_FragCoord_param_1
-        %150 = OpFunctionCall %main_out %main_inner %151
-        %152 = OpCompositeExtract %v4float %150 0
-               OpStore %x_GLF_color_1_1 %152
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5e2efc9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<vec4<f32>, 2>;
-  var b : i32;
-  var y : i32;
-  var i : i32;
-  let x_42 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_45 : f32 = x_7.x_GLF_uniform_float_values[0];
-  data = array<vec4<f32>, 2>(vec4<f32>(x_42, x_42, x_42, x_42), vec4<f32>(x_45, x_45, x_45, x_45));
-  let x_49 : i32 = x_10.x_GLF_uniform_int_values[1];
-  b = x_49;
-  let x_51 : f32 = gl_FragCoord.y;
-  let x_54 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_56 : f32 = gl_FragCoord.y;
-  let x_60 : i32 = x_10.x_GLF_uniform_int_values[1];
-  y = clamp(i32(x_51), (x_54 | i32(x_56)), x_60);
-  let x_63 : i32 = x_10.x_GLF_uniform_int_values[1];
-  i = x_63;
-  loop {
-    var x_82 : bool;
-    var x_83_phi : bool;
-    let x_68 : i32 = i;
-    let x_70 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_68 < x_70)) {
-    } else {
-      break;
-    }
-    let x_73 : i32 = b;
-    let x_75 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_76 : bool = (x_73 > x_75);
-    x_83_phi = x_76;
-    if (x_76) {
-      let x_79 : i32 = y;
-      let x_81 : i32 = x_10.x_GLF_uniform_int_values[1];
-      x_82 = (x_79 > x_81);
-      x_83_phi = x_82;
-    }
-    let x_83 : bool = x_83_phi;
-    if (x_83) {
-      break;
-    }
-    let x_86 : i32 = b;
-    b = (x_86 + 1);
-
-    continuing {
-      let x_88 : i32 = i;
-      i = (x_88 + 1);
-    }
-  }
-  let x_90 : i32 = b;
-  let x_92 : i32 = x_10.x_GLF_uniform_int_values[0];
-  if ((x_90 == x_92)) {
-    let x_97 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_99 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_101 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_104 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_107 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_110 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_113 : i32 = x_10.x_GLF_uniform_int_values[1];
-    data[clamp(x_97, x_99, x_101)] = vec4<f32>(f32(x_104), f32(x_107), f32(x_110), f32(x_113));
-  }
-  let x_118 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_120 : vec4<f32> = data[x_118];
-  x_GLF_color = vec4<f32>(x_120.x, x_120.y, x_120.z, x_120.w);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7587b70..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,3 +0,0 @@
-SKIP: FAILED
-
-exit status 3221225725
\ No newline at end of file
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.msl
deleted file mode 100644
index 65126f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float4 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_10, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_2 data = {};
-  int b = 0;
-  int y = 0;
-  int i = 0;
-  float const x_42 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_45 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={float4(x_42, x_42, x_42, x_42), float4(x_45, x_45, x_45, x_45)}};
-  data = tint_symbol_2;
-  int const x_49 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  b = x_49;
-  float const x_51 = (*(tint_symbol_4)).y;
-  int const x_54 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  float const x_56 = (*(tint_symbol_4)).y;
-  int const x_60 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  y = clamp(int(x_51), (x_54 | int(x_56)), x_60);
-  int const x_63 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  i = x_63;
-  while (true) {
-    bool x_82 = false;
-    bool x_83_phi = false;
-    int const x_68 = i;
-    int const x_70 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_68 < x_70)) {
-    } else {
-      break;
-    }
-    int const x_73 = b;
-    int const x_75 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    bool const x_76 = (x_73 > x_75);
-    x_83_phi = x_76;
-    if (x_76) {
-      int const x_79 = y;
-      int const x_81 = x_10.x_GLF_uniform_int_values.arr[1].el;
-      x_82 = (x_79 > x_81);
-      x_83_phi = x_82;
-    }
-    bool const x_83 = x_83_phi;
-    if (x_83) {
-      break;
-    }
-    int const x_86 = b;
-    b = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-    {
-      int const x_88 = i;
-      i = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    }
-  }
-  int const x_90 = b;
-  int const x_92 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_90 == x_92)) {
-    int const x_97 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_99 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_101 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_104 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_107 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_110 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_113 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    data.arr[clamp(x_97, x_99, x_101)] = float4(float(x_104), float(x_107), float(x_110), float(x_113));
-  }
-  int const x_118 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  float4 const x_120 = data.arr[x_118];
-  *(tint_symbol_5) = float4(x_120.x, x_120.y, x_120.z, x_120.w);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, x_10, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 04622ad..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,236 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 153
-; Schema: 0
-               OpCapability Shader
-         %61 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %b "b"
-               OpName %y "y"
-               OpName %i "i"
-               OpName %x_82 "x_82"
-               OpName %x_83_phi "x_83_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpDecorate %_arr_v4float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_v4float_uint_2 = OpTypeArray %v4float %uint_2
-%_ptr_Function__arr_v4float_uint_2 = OpTypePointer Function %_arr_v4float_uint_2
-         %31 = OpConstantNull %_arr_v4float_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Private_float = OpTypePointer Private %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %74 = OpConstantNull %bool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_v4float_uint_2 Function %31
-          %b = OpVariable %_ptr_Function_int Function %34
-          %y = OpVariable %_ptr_Function_int Function %34
-          %i = OpVariable %_ptr_Function_int Function %34
-       %x_82 = OpVariable %_ptr_Function_bool Function %74
-   %x_83_phi = OpVariable %_ptr_Function_bool Function %74
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %44 = OpCompositeConstruct %v4float %41 %41 %41 %41
-         %45 = OpCompositeConstruct %v4float %43 %43 %43 %43
-         %46 = OpCompositeConstruct %_arr_v4float_uint_2 %44 %45
-               OpStore %data %46
-         %49 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %50 = OpLoad %int %49
-               OpStore %b %50
-         %52 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %53 = OpLoad %float %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %57 = OpLoad %float %56
-         %58 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %59 = OpLoad %int %58
-         %62 = OpConvertFToS %int %53
-         %63 = OpConvertFToS %int %57
-         %64 = OpBitwiseOr %int %55 %63
-         %60 = OpExtInst %int %61 SClamp %62 %64 %59
-               OpStore %y %60
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %66 = OpLoad %int %65
-               OpStore %i %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %int %i
-         %77 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %78 = OpLoad %int %77
-         %79 = OpSLessThan %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpBranch %80
-         %82 = OpLabel
-               OpBranch %68
-         %80 = OpLabel
-         %83 = OpLoad %int %b
-         %84 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpSGreaterThan %bool %83 %85
-               OpStore %x_83_phi %86
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %87
-         %88 = OpLabel
-         %89 = OpLoad %int %y
-         %90 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %91 = OpLoad %int %90
-         %92 = OpSGreaterThan %bool %89 %91
-               OpStore %x_82 %92
-         %93 = OpLoad %bool %x_82
-               OpStore %x_83_phi %93
-               OpBranch %87
-         %87 = OpLabel
-         %94 = OpLoad %bool %x_83_phi
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-               OpBranch %68
-         %95 = OpLabel
-         %97 = OpLoad %int %b
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %b %98
-               OpBranch %69
-         %69 = OpLabel
-         %99 = OpLoad %int %i
-        %100 = OpIAdd %int %99 %int_1
-               OpStore %i %100
-               OpBranch %67
-         %68 = OpLabel
-        %101 = OpLoad %int %b
-        %102 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %103 = OpLoad %int %102
-        %104 = OpIEqual %bool %101 %103
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %105
-        %106 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %111 = OpLoad %int %110
-        %113 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %118 = OpLoad %int %117
-        %119 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %120 = OpLoad %int %119
-        %121 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %122 = OpLoad %int %121
-        %123 = OpExtInst %int %61 SClamp %109 %111 %114
-        %125 = OpAccessChain %_ptr_Function_v4float %data %123
-        %126 = OpConvertSToF %float %116
-        %127 = OpConvertSToF %float %118
-        %128 = OpConvertSToF %float %120
-        %129 = OpConvertSToF %float %122
-        %130 = OpCompositeConstruct %v4float %126 %127 %128 %129
-               OpStore %125 %130
-               OpBranch %105
-        %105 = OpLabel
-        %131 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %132 = OpLoad %int %131
-        %133 = OpAccessChain %_ptr_Function_v4float %data %132
-        %134 = OpLoad %v4float %133
-        %135 = OpCompositeExtract %float %134 0
-        %136 = OpCompositeExtract %float %134 1
-        %137 = OpCompositeExtract %float %134 2
-        %138 = OpCompositeExtract %float %134 3
-        %139 = OpCompositeConstruct %v4float %135 %136 %137 %138
-               OpStore %x_GLF_color %139
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %144 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %145 = OpFunctionCall %void %main_1
-        %146 = OpLoad %v4float %x_GLF_color
-        %147 = OpCompositeConstruct %main_out %146
-               OpReturnValue %147
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %149 = OpLabel
-        %151 = OpLoad %v4float %gl_FragCoord_param_1
-        %150 = OpFunctionCall %main_out %main_inner %151
-        %152 = OpCompositeExtract %v4float %150 0
-               OpStore %x_GLF_color_1_1 %152
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5e2efc9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<vec4<f32>, 2>;
-  var b : i32;
-  var y : i32;
-  var i : i32;
-  let x_42 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_45 : f32 = x_7.x_GLF_uniform_float_values[0];
-  data = array<vec4<f32>, 2>(vec4<f32>(x_42, x_42, x_42, x_42), vec4<f32>(x_45, x_45, x_45, x_45));
-  let x_49 : i32 = x_10.x_GLF_uniform_int_values[1];
-  b = x_49;
-  let x_51 : f32 = gl_FragCoord.y;
-  let x_54 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_56 : f32 = gl_FragCoord.y;
-  let x_60 : i32 = x_10.x_GLF_uniform_int_values[1];
-  y = clamp(i32(x_51), (x_54 | i32(x_56)), x_60);
-  let x_63 : i32 = x_10.x_GLF_uniform_int_values[1];
-  i = x_63;
-  loop {
-    var x_82 : bool;
-    var x_83_phi : bool;
-    let x_68 : i32 = i;
-    let x_70 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_68 < x_70)) {
-    } else {
-      break;
-    }
-    let x_73 : i32 = b;
-    let x_75 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_76 : bool = (x_73 > x_75);
-    x_83_phi = x_76;
-    if (x_76) {
-      let x_79 : i32 = y;
-      let x_81 : i32 = x_10.x_GLF_uniform_int_values[1];
-      x_82 = (x_79 > x_81);
-      x_83_phi = x_82;
-    }
-    let x_83 : bool = x_83_phi;
-    if (x_83) {
-      break;
-    }
-    let x_86 : i32 = b;
-    b = (x_86 + 1);
-
-    continuing {
-      let x_88 : i32 = i;
-      i = (x_88 + 1);
-    }
-  }
-  let x_90 : i32 = b;
-  let x_92 : i32 = x_10.x_GLF_uniform_int_values[0];
-  if ((x_90 == x_92)) {
-    let x_97 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_99 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_101 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_104 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_107 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_110 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_113 : i32 = x_10.x_GLF_uniform_int_values[1];
-    data[clamp(x_97, x_99, x_101)] = vec4<f32>(f32(x_104), f32(x_107), f32(x_110), f32(x_113));
-  }
-  let x_118 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_120 : vec4<f32> = data[x_118];
-  x_GLF_color = vec4<f32>(x_120.x, x_120.y, x_120.z, x_120.w);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 5e99870..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,80 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-
-void main_1() {
-  int2 icoord = int2(0, 0);
-  float x_40 = 0.0f;
-  int2 icoord_1 = int2(0, 0);
-  const float x_42 = gl_FragCoord.x;
-  const float x_44 = asfloat(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if (((x_42 * x_44) > x_47)) {
-    const float4 x_52 = gl_FragCoord;
-    const float x_55 = asfloat(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_58 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_60 = asfloat(x_6[2].x);
-    icoord = int2(((float2(x_52.x, x_52.y) * x_55) - float2(x_58, x_60)));
-    const float x_65 = asfloat(x_6[2].x);
-    const float x_67 = asfloat(x_6[3].x);
-    const int x_69 = icoord.x;
-    const int x_71 = icoord.y;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if (((x_69 * x_71) != x_74)) {
-      const float x_80 = asfloat(x_6[3].x);
-      x_40 = x_80;
-    } else {
-      const float x_82 = asfloat(x_6[2].x);
-      x_40 = x_82;
-    }
-    const float x_83 = x_40;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_85 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(x_65, x_67, x_83, float(x_85));
-  } else {
-    const float4 x_88 = gl_FragCoord;
-    const float x_91 = asfloat(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_94 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_96 = asfloat(x_6[2].x);
-    icoord_1 = int2(((float2(x_88.x, x_88.y) * x_91) - float2(x_94, x_96)));
-    const float x_101 = asfloat(x_6[3].x);
-    const float x_103 = asfloat(x_6[3].x);
-    const int x_105 = icoord_1.x;
-    const float x_108 = asfloat(x_6[3].x);
-    x_GLF_color = float4(x_101, x_103, float(x_105), x_108);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.msl
deleted file mode 100644
index f849bf4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int2 icoord = 0;
-  float x_40 = 0.0f;
-  int2 icoord_1 = 0;
-  float const x_42 = (*(tint_symbol_3)).x;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if (((x_42 * x_44) > x_47)) {
-    float4 const x_52 = *(tint_symbol_3);
-    float const x_55 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_60 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    icoord = int2(((float2(x_52.x, x_52.y) * x_55) - float2(x_58, x_60)));
-    float const x_65 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    float const x_67 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    int const x_69 = icoord.x;
-    int const x_71 = icoord.y;
-    int const x_74 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((as_type<int>((as_type<uint>(x_69) * as_type<uint>(x_71))) != x_74)) {
-      float const x_80 = x_6.x_GLF_uniform_float_values.arr[3].el;
-      x_40 = x_80;
-    } else {
-      float const x_82 = x_6.x_GLF_uniform_float_values.arr[2].el;
-      x_40 = x_82;
-    }
-    float const x_83 = x_40;
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(x_65, x_67, x_83, float(x_85));
-  } else {
-    float4 const x_88 = *(tint_symbol_3);
-    float const x_91 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_94 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_96 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    icoord_1 = int2(((float2(x_88.x, x_88.y) * x_91) - float2(x_94, x_96)));
-    float const x_101 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_103 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    int const x_105 = icoord_1.x;
-    float const x_108 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    *(tint_symbol_4) = float4(x_101, x_103, float(x_105), x_108);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2aadd56..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,196 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 132
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %icoord "icoord"
-               OpName %x_40 "x_40"
-               OpName %icoord_1 "icoord_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-       %buf0 = OpTypeStruct %_arr_int_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %30 = OpConstantNull %v2int
-%_ptr_Function_float = OpTypePointer Function %float
-         %33 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-    %v2float = OpTypeVector %float 2
-      %int_3 = OpConstant %int 3
-%_ptr_Function_int = OpTypePointer Function %int
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-     %icoord = OpVariable %_ptr_Function_v2int Function %30
-       %x_40 = OpVariable %_ptr_Function_float Function %33
-   %icoord_1 = OpVariable %_ptr_Function_v2int Function %30
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %46 = OpFMul %float %38 %42
-         %47 = OpFOrdGreaterThan %bool %46 %45
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-         %52 = OpLoad %v4float %gl_FragCoord
-         %53 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %54 = OpLoad %float %53
-         %55 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %59 = OpLoad %float %58
-         %62 = OpCompositeExtract %float %52 0
-         %63 = OpCompositeExtract %float %52 1
-         %64 = OpCompositeConstruct %v2float %62 %63
-         %65 = OpVectorTimesScalar %v2float %64 %54
-         %66 = OpCompositeConstruct %v2float %56 %59
-         %67 = OpFSub %v2float %65 %66
-         %60 = OpConvertFToS %v2int %67
-               OpStore %icoord %60
-         %68 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %72 = OpLoad %float %71
-         %74 = OpAccessChain %_ptr_Function_int %icoord %uint_0
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_int %icoord %uint_1
-         %77 = OpLoad %int %76
-         %79 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpIMul %int %75 %77
-         %82 = OpINotEqual %bool %81 %80
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-         %86 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %87 = OpLoad %float %86
-               OpStore %x_40 %87
-               OpBranch %83
-         %85 = OpLabel
-         %88 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %89 = OpLoad %float %88
-               OpStore %x_40 %89
-               OpBranch %83
-         %83 = OpLabel
-         %90 = OpLoad %float %x_40
-         %91 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %92
-         %94 = OpCompositeConstruct %v4float %69 %72 %90 %93
-               OpStore %x_GLF_color %94
-               OpBranch %49
-         %51 = OpLabel
-         %95 = OpLoad %v4float %gl_FragCoord
-         %96 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %97 = OpLoad %float %96
-         %98 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %99 = OpLoad %float %98
-        %100 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-        %101 = OpLoad %float %100
-        %103 = OpCompositeExtract %float %95 0
-        %104 = OpCompositeExtract %float %95 1
-        %105 = OpCompositeConstruct %v2float %103 %104
-        %106 = OpVectorTimesScalar %v2float %105 %97
-        %107 = OpCompositeConstruct %v2float %99 %101
-        %108 = OpFSub %v2float %106 %107
-        %102 = OpConvertFToS %v2int %108
-               OpStore %icoord_1 %102
-        %109 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %110 = OpLoad %float %109
-        %111 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %112 = OpLoad %float %111
-        %113 = OpAccessChain %_ptr_Function_int %icoord_1 %uint_0
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %116 = OpLoad %float %115
-        %117 = OpConvertSToF %float %114
-        %118 = OpCompositeConstruct %v4float %110 %112 %117 %116
-               OpStore %x_GLF_color %118
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %123 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %124 = OpFunctionCall %void %main_1
-        %125 = OpLoad %v4float %x_GLF_color
-        %126 = OpCompositeConstruct %main_out %125
-               OpReturnValue %126
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %128 = OpLabel
-        %130 = OpLoad %v4float %gl_FragCoord_param_1
-        %129 = OpFunctionCall %main_out %main_inner %130
-        %131 = OpCompositeExtract %v4float %129 0
-               OpStore %x_GLF_color_1_1 %131
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8306f38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var icoord : vec2<i32>;
-  var x_40 : f32;
-  var icoord_1 : vec2<i32>;
-  let x_42 : f32 = gl_FragCoord.x;
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if (((x_42 * x_44) > x_47)) {
-    let x_52 : vec4<f32> = gl_FragCoord;
-    let x_55 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_60 : f32 = x_6.x_GLF_uniform_float_values[2];
-    icoord = vec2<i32>(((vec2<f32>(x_52.x, x_52.y) * x_55) - vec2<f32>(x_58, x_60)));
-    let x_65 : f32 = x_6.x_GLF_uniform_float_values[2];
-    let x_67 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_69 : i32 = icoord.x;
-    let x_71 : i32 = icoord.y;
-    let x_74 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if (((x_69 * x_71) != x_74)) {
-      let x_80 : f32 = x_6.x_GLF_uniform_float_values[3];
-      x_40 = x_80;
-    } else {
-      let x_82 : f32 = x_6.x_GLF_uniform_float_values[2];
-      x_40 = x_82;
-    }
-    let x_83 : f32 = x_40;
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(x_65, x_67, x_83, f32(x_85));
-  } else {
-    let x_88 : vec4<f32> = gl_FragCoord;
-    let x_91 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_94 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_96 : f32 = x_6.x_GLF_uniform_float_values[2];
-    icoord_1 = vec2<i32>(((vec2<f32>(x_88.x, x_88.y) * x_91) - vec2<f32>(x_94, x_96)));
-    let x_101 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_103 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_105 : i32 = icoord_1.x;
-    let x_108 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_GLF_color = vec4<f32>(x_101, x_103, f32(x_105), x_108);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5e99870..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,80 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-
-void main_1() {
-  int2 icoord = int2(0, 0);
-  float x_40 = 0.0f;
-  int2 icoord_1 = int2(0, 0);
-  const float x_42 = gl_FragCoord.x;
-  const float x_44 = asfloat(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if (((x_42 * x_44) > x_47)) {
-    const float4 x_52 = gl_FragCoord;
-    const float x_55 = asfloat(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_58 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_60 = asfloat(x_6[2].x);
-    icoord = int2(((float2(x_52.x, x_52.y) * x_55) - float2(x_58, x_60)));
-    const float x_65 = asfloat(x_6[2].x);
-    const float x_67 = asfloat(x_6[3].x);
-    const int x_69 = icoord.x;
-    const int x_71 = icoord.y;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if (((x_69 * x_71) != x_74)) {
-      const float x_80 = asfloat(x_6[3].x);
-      x_40 = x_80;
-    } else {
-      const float x_82 = asfloat(x_6[2].x);
-      x_40 = x_82;
-    }
-    const float x_83 = x_40;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_85 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(x_65, x_67, x_83, float(x_85));
-  } else {
-    const float4 x_88 = gl_FragCoord;
-    const float x_91 = asfloat(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_94 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_96 = asfloat(x_6[2].x);
-    icoord_1 = int2(((float2(x_88.x, x_88.y) * x_91) - float2(x_94, x_96)));
-    const float x_101 = asfloat(x_6[3].x);
-    const float x_103 = asfloat(x_6[3].x);
-    const int x_105 = icoord_1.x;
-    const float x_108 = asfloat(x_6[3].x);
-    x_GLF_color = float4(x_101, x_103, float(x_105), x_108);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.msl
deleted file mode 100644
index f849bf4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int2 icoord = 0;
-  float x_40 = 0.0f;
-  int2 icoord_1 = 0;
-  float const x_42 = (*(tint_symbol_3)).x;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if (((x_42 * x_44) > x_47)) {
-    float4 const x_52 = *(tint_symbol_3);
-    float const x_55 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_60 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    icoord = int2(((float2(x_52.x, x_52.y) * x_55) - float2(x_58, x_60)));
-    float const x_65 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    float const x_67 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    int const x_69 = icoord.x;
-    int const x_71 = icoord.y;
-    int const x_74 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((as_type<int>((as_type<uint>(x_69) * as_type<uint>(x_71))) != x_74)) {
-      float const x_80 = x_6.x_GLF_uniform_float_values.arr[3].el;
-      x_40 = x_80;
-    } else {
-      float const x_82 = x_6.x_GLF_uniform_float_values.arr[2].el;
-      x_40 = x_82;
-    }
-    float const x_83 = x_40;
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(x_65, x_67, x_83, float(x_85));
-  } else {
-    float4 const x_88 = *(tint_symbol_3);
-    float const x_91 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_94 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_96 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    icoord_1 = int2(((float2(x_88.x, x_88.y) * x_91) - float2(x_94, x_96)));
-    float const x_101 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_103 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    int const x_105 = icoord_1.x;
-    float const x_108 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    *(tint_symbol_4) = float4(x_101, x_103, float(x_105), x_108);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2aadd56..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,196 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 132
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %icoord "icoord"
-               OpName %x_40 "x_40"
-               OpName %icoord_1 "icoord_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-       %buf0 = OpTypeStruct %_arr_int_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %30 = OpConstantNull %v2int
-%_ptr_Function_float = OpTypePointer Function %float
-         %33 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-    %v2float = OpTypeVector %float 2
-      %int_3 = OpConstant %int 3
-%_ptr_Function_int = OpTypePointer Function %int
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-     %icoord = OpVariable %_ptr_Function_v2int Function %30
-       %x_40 = OpVariable %_ptr_Function_float Function %33
-   %icoord_1 = OpVariable %_ptr_Function_v2int Function %30
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %46 = OpFMul %float %38 %42
-         %47 = OpFOrdGreaterThan %bool %46 %45
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-         %52 = OpLoad %v4float %gl_FragCoord
-         %53 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %54 = OpLoad %float %53
-         %55 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %59 = OpLoad %float %58
-         %62 = OpCompositeExtract %float %52 0
-         %63 = OpCompositeExtract %float %52 1
-         %64 = OpCompositeConstruct %v2float %62 %63
-         %65 = OpVectorTimesScalar %v2float %64 %54
-         %66 = OpCompositeConstruct %v2float %56 %59
-         %67 = OpFSub %v2float %65 %66
-         %60 = OpConvertFToS %v2int %67
-               OpStore %icoord %60
-         %68 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %72 = OpLoad %float %71
-         %74 = OpAccessChain %_ptr_Function_int %icoord %uint_0
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_int %icoord %uint_1
-         %77 = OpLoad %int %76
-         %79 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpIMul %int %75 %77
-         %82 = OpINotEqual %bool %81 %80
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-         %86 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %87 = OpLoad %float %86
-               OpStore %x_40 %87
-               OpBranch %83
-         %85 = OpLabel
-         %88 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %89 = OpLoad %float %88
-               OpStore %x_40 %89
-               OpBranch %83
-         %83 = OpLabel
-         %90 = OpLoad %float %x_40
-         %91 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %92
-         %94 = OpCompositeConstruct %v4float %69 %72 %90 %93
-               OpStore %x_GLF_color %94
-               OpBranch %49
-         %51 = OpLabel
-         %95 = OpLoad %v4float %gl_FragCoord
-         %96 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %97 = OpLoad %float %96
-         %98 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %99 = OpLoad %float %98
-        %100 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-        %101 = OpLoad %float %100
-        %103 = OpCompositeExtract %float %95 0
-        %104 = OpCompositeExtract %float %95 1
-        %105 = OpCompositeConstruct %v2float %103 %104
-        %106 = OpVectorTimesScalar %v2float %105 %97
-        %107 = OpCompositeConstruct %v2float %99 %101
-        %108 = OpFSub %v2float %106 %107
-        %102 = OpConvertFToS %v2int %108
-               OpStore %icoord_1 %102
-        %109 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %110 = OpLoad %float %109
-        %111 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %112 = OpLoad %float %111
-        %113 = OpAccessChain %_ptr_Function_int %icoord_1 %uint_0
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %116 = OpLoad %float %115
-        %117 = OpConvertSToF %float %114
-        %118 = OpCompositeConstruct %v4float %110 %112 %117 %116
-               OpStore %x_GLF_color %118
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %123 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %124 = OpFunctionCall %void %main_1
-        %125 = OpLoad %v4float %x_GLF_color
-        %126 = OpCompositeConstruct %main_out %125
-               OpReturnValue %126
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %128 = OpLabel
-        %130 = OpLoad %v4float %gl_FragCoord_param_1
-        %129 = OpFunctionCall %main_out %main_inner %130
-        %131 = OpCompositeExtract %v4float %129 0
-               OpStore %x_GLF_color_1_1 %131
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8306f38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var icoord : vec2<i32>;
-  var x_40 : f32;
-  var icoord_1 : vec2<i32>;
-  let x_42 : f32 = gl_FragCoord.x;
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if (((x_42 * x_44) > x_47)) {
-    let x_52 : vec4<f32> = gl_FragCoord;
-    let x_55 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_60 : f32 = x_6.x_GLF_uniform_float_values[2];
-    icoord = vec2<i32>(((vec2<f32>(x_52.x, x_52.y) * x_55) - vec2<f32>(x_58, x_60)));
-    let x_65 : f32 = x_6.x_GLF_uniform_float_values[2];
-    let x_67 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_69 : i32 = icoord.x;
-    let x_71 : i32 = icoord.y;
-    let x_74 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if (((x_69 * x_71) != x_74)) {
-      let x_80 : f32 = x_6.x_GLF_uniform_float_values[3];
-      x_40 = x_80;
-    } else {
-      let x_82 : f32 = x_6.x_GLF_uniform_float_values[2];
-      x_40 = x_82;
-    }
-    let x_83 : f32 = x_40;
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(x_65, x_67, x_83, f32(x_85));
-  } else {
-    let x_88 : vec4<f32> = gl_FragCoord;
-    let x_91 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_94 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_96 : f32 = x_6.x_GLF_uniform_float_values[2];
-    icoord_1 = vec2<i32>(((vec2<f32>(x_88.x, x_88.y) * x_91) - vec2<f32>(x_94, x_96)));
-    let x_101 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_103 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_105 : i32 = icoord_1.x;
-    let x_108 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_GLF_color = vec4<f32>(x_101, x_103, f32(x_105), x_108);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 9fffe99..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,96 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[2];
-};
-
-float func_f1_(inout float x) {
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    while (true) {
-      const float x_77 = gl_FragCoord.y;
-      const float x_79 = asfloat(x_8[2].x);
-      if ((x_77 < x_79)) {
-        while (true) {
-          {
-            const float x_88 = gl_FragCoord.x;
-            const float x_90 = asfloat(x_8[2].x);
-            if ((x_88 < x_90)) {
-            } else {
-              break;
-            }
-          }
-        }
-      }
-      const float x_92 = x;
-      const float x_94 = asfloat(x_8[3].x);
-      if ((x_92 < x_94)) {
-        const float x_99 = asfloat(x_8[1].x);
-        return x_99;
-      }
-      {
-        const float x_101 = gl_FragCoord.y;
-        const float x_103 = asfloat(x_8[2].x);
-        if ((x_101 < x_103)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_106 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  return x_106;
-}
-
-void main_1() {
-  float param = 0.0f;
-  const float x_41 = gl_FragCoord.x;
-  param = x_41;
-  const float x_42 = func_f1_(param);
-  const float x_44 = asfloat(x_8[1].x);
-  if ((x_42 == x_44)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_53 = asint(x_11[1].x);
-    const int x_56 = asint(x_11[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_50), float(x_53), float(x_56), float(x_59));
-  } else {
-    const int x_63 = asint(x_11[1].x);
-    const float x_64 = float(x_63);
-    x_GLF_color = float4(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.msl
deleted file mode 100644
index c79bb78..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_f1_(constant buf1& x_8, thread float* const x, thread float4* const tint_symbol_3) {
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    while (true) {
-      float const x_77 = (*(tint_symbol_3)).y;
-      float const x_79 = x_8.x_GLF_uniform_float_values.arr[2].el;
-      if ((x_77 < x_79)) {
-        while (true) {
-          {
-            float const x_88 = (*(tint_symbol_3)).x;
-            float const x_90 = x_8.x_GLF_uniform_float_values.arr[2].el;
-            if ((x_88 < x_90)) {
-            } else {
-              break;
-            }
-          }
-        }
-      }
-      float const x_92 = *(x);
-      float const x_94 = x_8.x_GLF_uniform_float_values.arr[3].el;
-      if ((x_92 < x_94)) {
-        float const x_99 = x_8.x_GLF_uniform_float_values.arr[1].el;
-        return x_99;
-      }
-      {
-        float const x_101 = (*(tint_symbol_3)).y;
-        float const x_103 = x_8.x_GLF_uniform_float_values.arr[2].el;
-        if ((x_101 < x_103)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  float const x_106 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  return x_106;
-}
-
-void main_1(constant buf1& x_8, constant buf0& x_11, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float param = 0.0f;
-  float const x_41 = (*(tint_symbol_4)).x;
-  param = x_41;
-  float const x_42 = func_f1_(x_8, &(param), tint_symbol_4);
-  float const x_44 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_42 == x_44)) {
-    int const x_50 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    int const x_53 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_59 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_50), float(x_53), float(x_56), float(x_59));
-  } else {
-    int const x_63 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    float const x_64 = float(x_63);
-    *(tint_symbol_5) = float4(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_8, x_11, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_11, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 53467bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,210 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 128
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %func_f1_ "func_f1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %23 = OpTypeFunction %float %_ptr_Function_float
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %81 = OpTypeFunction %void
-         %86 = OpConstantNull %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %115 = OpTypeFunction %main_out %v4float
-   %func_f1_ = OpFunction %float None %23
-          %x = OpFunctionParameter %_ptr_Function_float
-         %27 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-               OpSelectionMerge %34 None
-               OpBranchConditional %true %35 %36
-         %35 = OpLabel
-               OpBranch %34
-         %36 = OpLabel
-               OpBranch %29
-         %34 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %43 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %44 = OpLoad %float %43
-         %48 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %49 = OpLoad %float %48
-         %50 = OpFOrdLessThan %bool %44 %49
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %58 = OpLoad %float %57
-         %59 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %60 = OpLoad %float %59
-         %61 = OpFOrdLessThan %bool %58 %60
-               OpBranchConditional %61 %53 %54
-         %54 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-         %63 = OpLoad %float %x
-         %65 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_3
-         %66 = OpLoad %float %65
-         %67 = OpFOrdLessThan %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %72 = OpLoad %float %71
-               OpReturnValue %72
-         %68 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-         %73 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %74 = OpLoad %float %73
-         %75 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %76 = OpLoad %float %75
-         %77 = OpFOrdLessThan %bool %74 %76
-               OpBranchConditional %77 %37 %38
-         %38 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-               OpBranch %28
-         %29 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %80 = OpLoad %float %79
-               OpReturnValue %80
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %81
-         %84 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %86
-         %87 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %88 = OpLoad %float %87
-               OpStore %param %88
-         %89 = OpFunctionCall %float %func_f1_ %param
-         %91 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %92 = OpLoad %float %91
-         %93 = OpFOrdEqual %bool %89 %92
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %105 = OpLoad %int %104
-        %106 = OpConvertSToF %float %99
-        %107 = OpConvertSToF %float %101
-        %108 = OpConvertSToF %float %103
-        %109 = OpConvertSToF %float %105
-        %110 = OpCompositeConstruct %v4float %106 %107 %108 %109
-               OpStore %x_GLF_color %110
-               OpBranch %94
-         %96 = OpLabel
-        %111 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %112 = OpLoad %int %111
-        %113 = OpConvertSToF %float %112
-        %114 = OpCompositeConstruct %v4float %113 %113 %113 %113
-               OpStore %x_GLF_color %114
-               OpBranch %94
-         %94 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %115
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %119 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %120 = OpFunctionCall %void %main_1
-        %121 = OpLoad %v4float %x_GLF_color
-        %122 = OpCompositeConstruct %main_out %121
-               OpReturnValue %122
-               OpFunctionEnd
-       %main = OpFunction %void None %81
-        %124 = OpLabel
-        %126 = OpLoad %v4float %gl_FragCoord_param_1
-        %125 = OpFunctionCall %main_out %main_inner %126
-        %127 = OpCompositeExtract %v4float %125 0
-               OpStore %x_GLF_color_1_1 %127
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 36f0a6f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,96 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-fn func_f1_(x : ptr<function, f32>) -> f32 {
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    loop {
-      let x_77 : f32 = gl_FragCoord.y;
-      let x_79 : f32 = x_8.x_GLF_uniform_float_values[2];
-      if ((x_77 < x_79)) {
-        loop {
-
-          continuing {
-            let x_88 : f32 = gl_FragCoord.x;
-            let x_90 : f32 = x_8.x_GLF_uniform_float_values[2];
-            if ((x_88 < x_90)) {
-            } else {
-              break;
-            }
-          }
-        }
-      }
-      let x_92 : f32 = *(x);
-      let x_94 : f32 = x_8.x_GLF_uniform_float_values[3];
-      if ((x_92 < x_94)) {
-        let x_99 : f32 = x_8.x_GLF_uniform_float_values[1];
-        return x_99;
-      }
-
-      continuing {
-        let x_101 : f32 = gl_FragCoord.y;
-        let x_103 : f32 = x_8.x_GLF_uniform_float_values[2];
-        if ((x_101 < x_103)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  let x_106 : f32 = x_8.x_GLF_uniform_float_values[0];
-  return x_106;
-}
-
-fn main_1() {
-  var param : f32;
-  let x_41 : f32 = gl_FragCoord.x;
-  param = x_41;
-  let x_42 : f32 = func_f1_(&(param));
-  let x_44 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_42 == x_44)) {
-    let x_50 : i32 = x_11.x_GLF_uniform_int_values[0];
-    let x_53 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_59 : i32 = x_11.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_50), f32(x_53), f32(x_56), f32(x_59));
-  } else {
-    let x_63 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_64 : f32 = f32(x_63);
-    x_GLF_color = vec4<f32>(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 9fffe99..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,96 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[2];
-};
-
-float func_f1_(inout float x) {
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    while (true) {
-      const float x_77 = gl_FragCoord.y;
-      const float x_79 = asfloat(x_8[2].x);
-      if ((x_77 < x_79)) {
-        while (true) {
-          {
-            const float x_88 = gl_FragCoord.x;
-            const float x_90 = asfloat(x_8[2].x);
-            if ((x_88 < x_90)) {
-            } else {
-              break;
-            }
-          }
-        }
-      }
-      const float x_92 = x;
-      const float x_94 = asfloat(x_8[3].x);
-      if ((x_92 < x_94)) {
-        const float x_99 = asfloat(x_8[1].x);
-        return x_99;
-      }
-      {
-        const float x_101 = gl_FragCoord.y;
-        const float x_103 = asfloat(x_8[2].x);
-        if ((x_101 < x_103)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_106 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  return x_106;
-}
-
-void main_1() {
-  float param = 0.0f;
-  const float x_41 = gl_FragCoord.x;
-  param = x_41;
-  const float x_42 = func_f1_(param);
-  const float x_44 = asfloat(x_8[1].x);
-  if ((x_42 == x_44)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_53 = asint(x_11[1].x);
-    const int x_56 = asint(x_11[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_50), float(x_53), float(x_56), float(x_59));
-  } else {
-    const int x_63 = asint(x_11[1].x);
-    const float x_64 = float(x_63);
-    x_GLF_color = float4(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.msl
deleted file mode 100644
index c79bb78..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_f1_(constant buf1& x_8, thread float* const x, thread float4* const tint_symbol_3) {
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    while (true) {
-      float const x_77 = (*(tint_symbol_3)).y;
-      float const x_79 = x_8.x_GLF_uniform_float_values.arr[2].el;
-      if ((x_77 < x_79)) {
-        while (true) {
-          {
-            float const x_88 = (*(tint_symbol_3)).x;
-            float const x_90 = x_8.x_GLF_uniform_float_values.arr[2].el;
-            if ((x_88 < x_90)) {
-            } else {
-              break;
-            }
-          }
-        }
-      }
-      float const x_92 = *(x);
-      float const x_94 = x_8.x_GLF_uniform_float_values.arr[3].el;
-      if ((x_92 < x_94)) {
-        float const x_99 = x_8.x_GLF_uniform_float_values.arr[1].el;
-        return x_99;
-      }
-      {
-        float const x_101 = (*(tint_symbol_3)).y;
-        float const x_103 = x_8.x_GLF_uniform_float_values.arr[2].el;
-        if ((x_101 < x_103)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  float const x_106 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  return x_106;
-}
-
-void main_1(constant buf1& x_8, constant buf0& x_11, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float param = 0.0f;
-  float const x_41 = (*(tint_symbol_4)).x;
-  param = x_41;
-  float const x_42 = func_f1_(x_8, &(param), tint_symbol_4);
-  float const x_44 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_42 == x_44)) {
-    int const x_50 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    int const x_53 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_59 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_50), float(x_53), float(x_56), float(x_59));
-  } else {
-    int const x_63 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    float const x_64 = float(x_63);
-    *(tint_symbol_5) = float4(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_8, x_11, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_11, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 53467bd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,210 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 128
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %func_f1_ "func_f1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %23 = OpTypeFunction %float %_ptr_Function_float
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %81 = OpTypeFunction %void
-         %86 = OpConstantNull %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %115 = OpTypeFunction %main_out %v4float
-   %func_f1_ = OpFunction %float None %23
-          %x = OpFunctionParameter %_ptr_Function_float
-         %27 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-               OpSelectionMerge %34 None
-               OpBranchConditional %true %35 %36
-         %35 = OpLabel
-               OpBranch %34
-         %36 = OpLabel
-               OpBranch %29
-         %34 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %43 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %44 = OpLoad %float %43
-         %48 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %49 = OpLoad %float %48
-         %50 = OpFOrdLessThan %bool %44 %49
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %58 = OpLoad %float %57
-         %59 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %60 = OpLoad %float %59
-         %61 = OpFOrdLessThan %bool %58 %60
-               OpBranchConditional %61 %53 %54
-         %54 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-         %63 = OpLoad %float %x
-         %65 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_3
-         %66 = OpLoad %float %65
-         %67 = OpFOrdLessThan %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %72 = OpLoad %float %71
-               OpReturnValue %72
-         %68 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-         %73 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %74 = OpLoad %float %73
-         %75 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %76 = OpLoad %float %75
-         %77 = OpFOrdLessThan %bool %74 %76
-               OpBranchConditional %77 %37 %38
-         %38 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-               OpBranch %28
-         %29 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %80 = OpLoad %float %79
-               OpReturnValue %80
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %81
-         %84 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %86
-         %87 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %88 = OpLoad %float %87
-               OpStore %param %88
-         %89 = OpFunctionCall %float %func_f1_ %param
-         %91 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %92 = OpLoad %float %91
-         %93 = OpFOrdEqual %bool %89 %92
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %105 = OpLoad %int %104
-        %106 = OpConvertSToF %float %99
-        %107 = OpConvertSToF %float %101
-        %108 = OpConvertSToF %float %103
-        %109 = OpConvertSToF %float %105
-        %110 = OpCompositeConstruct %v4float %106 %107 %108 %109
-               OpStore %x_GLF_color %110
-               OpBranch %94
-         %96 = OpLabel
-        %111 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %112 = OpLoad %int %111
-        %113 = OpConvertSToF %float %112
-        %114 = OpCompositeConstruct %v4float %113 %113 %113 %113
-               OpStore %x_GLF_color %114
-               OpBranch %94
-         %94 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %115
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %119 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %120 = OpFunctionCall %void %main_1
-        %121 = OpLoad %v4float %x_GLF_color
-        %122 = OpCompositeConstruct %main_out %121
-               OpReturnValue %122
-               OpFunctionEnd
-       %main = OpFunction %void None %81
-        %124 = OpLabel
-        %126 = OpLoad %v4float %gl_FragCoord_param_1
-        %125 = OpFunctionCall %main_out %main_inner %126
-        %127 = OpCompositeExtract %v4float %125 0
-               OpStore %x_GLF_color_1_1 %127
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 36f0a6f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-fragcoord-condition-always-return/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,96 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-fn func_f1_(x : ptr<function, f32>) -> f32 {
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    loop {
-      let x_77 : f32 = gl_FragCoord.y;
-      let x_79 : f32 = x_8.x_GLF_uniform_float_values[2];
-      if ((x_77 < x_79)) {
-        loop {
-
-          continuing {
-            let x_88 : f32 = gl_FragCoord.x;
-            let x_90 : f32 = x_8.x_GLF_uniform_float_values[2];
-            if ((x_88 < x_90)) {
-            } else {
-              break;
-            }
-          }
-        }
-      }
-      let x_92 : f32 = *(x);
-      let x_94 : f32 = x_8.x_GLF_uniform_float_values[3];
-      if ((x_92 < x_94)) {
-        let x_99 : f32 = x_8.x_GLF_uniform_float_values[1];
-        return x_99;
-      }
-
-      continuing {
-        let x_101 : f32 = gl_FragCoord.y;
-        let x_103 : f32 = x_8.x_GLF_uniform_float_values[2];
-        if ((x_101 < x_103)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  let x_106 : f32 = x_8.x_GLF_uniform_float_values[0];
-  return x_106;
-}
-
-fn main_1() {
-  var param : f32;
-  let x_41 : f32 = gl_FragCoord.x;
-  param = x_41;
-  let x_42 : f32 = func_f1_(&(param));
-  let x_44 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_42 == x_44)) {
-    let x_50 : i32 = x_11.x_GLF_uniform_int_values[0];
-    let x_53 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_59 : i32 = x_11.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_50), f32(x_53), f32(x_56), f32(x_59));
-  } else {
-    let x_63 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_64 : f32 = f32(x_63);
-    x_GLF_color = vec4<f32>(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6f574e3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,74 +0,0 @@
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-cbuffer cbuffer_x_10 : register(b2, space0) {
-  uint4 x_10[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[2];
-};
-
-bool func_vf2_(inout float2 pos) {
-  const float x_62 = pos.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_64 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_62 < x_64)) {
-    return true;
-  }
-  const float x_69 = pos.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_71 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_69 > x_71)) {
-    return false;
-  }
-  const float x_76 = asfloat(x_10[0].x);
-  const float x_78 = asfloat(x_8[1].x);
-  if ((x_76 > x_78)) {
-    return true;
-  }
-  return true;
-}
-
-void main_1() {
-  float2 param = float2(0.0f, 0.0f);
-  const float4 x_42 = gl_FragCoord;
-  param = float2(x_42.x, x_42.y);
-  const bool x_44 = func_vf2_(param);
-  if (x_44) {
-    discard;
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_48 = asint(x_13[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_51 = asint(x_13[1].x);
-  const int x_54 = asint(x_13[1].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_57 = asint(x_13[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  x_GLF_color = float4(float(x_48), float(x_51), float(x_54), float(x_57));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6f6cbd7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float zero;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool func_vf2_(constant buf1& x_8, constant buf2& x_10, thread float2* const pos) {
-  float const x_62 = (*(pos)).x;
-  float const x_64 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_62 < x_64)) {
-    return true;
-  }
-  float const x_69 = (*(pos)).y;
-  float const x_71 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_69 > x_71)) {
-    return false;
-  }
-  float const x_76 = x_10.zero;
-  float const x_78 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_76 > x_78)) {
-    return true;
-  }
-  return true;
-}
-
-void main_1(constant buf1& x_8, constant buf2& x_10, constant buf0& x_13, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 param = 0.0f;
-  float4 const x_42 = *(tint_symbol_3);
-  param = float2(x_42.x, x_42.y);
-  bool const x_44 = func_vf2_(x_8, x_10, &(param));
-  if (x_44) {
-    discard_fragment();
-  }
-  int const x_48 = x_13.x_GLF_uniform_int_values.arr[0].el;
-  int const x_51 = x_13.x_GLF_uniform_int_values.arr[1].el;
-  int const x_54 = x_13.x_GLF_uniform_int_values.arr[1].el;
-  int const x_57 = x_13.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_4) = float4(float(x_48), float(x_51), float(x_54), float(x_57));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf2& x_10, constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, x_13, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf2& x_10 [[buffer(1)]], constant buf0& x_13 [[buffer(2)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, x_13, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3ccba4e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,175 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 104
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zero"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_13 "x_13"
-               OpName %func_vf2_ "func_vf2_"
-               OpName %pos "pos"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_10 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %bool = OpTypeBool
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %25 = OpTypeFunction %bool %_ptr_Function_v2float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %63 = OpTypeFunction %void
-         %68 = OpConstantNull %v2float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %91 = OpTypeFunction %main_out %v4float
-  %func_vf2_ = OpFunction %bool None %25
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-         %31 = OpLabel
-         %35 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %36 = OpLoad %float %35
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %36 %40
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpReturnValue %true
-         %42 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %48 = OpLoad %float %47
-         %49 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %51 = OpFOrdGreaterThan %bool %48 %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-               OpReturnValue %false
-         %52 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %59 = OpLoad %float %58
-         %60 = OpFOrdGreaterThan %bool %56 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %61
-         %62 = OpLabel
-               OpReturnValue %true
-         %61 = OpLabel
-               OpReturnValue %true
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %63
-         %66 = OpLabel
-      %param = OpVariable %_ptr_Function_v2float Function %68
-         %69 = OpLoad %v4float %gl_FragCoord
-         %70 = OpCompositeExtract %float %69 0
-         %71 = OpCompositeExtract %float %69 1
-         %72 = OpCompositeConstruct %v2float %70 %71
-               OpStore %param %72
-         %73 = OpFunctionCall %bool %func_vf2_ %param
-               OpSelectionMerge %75 None
-               OpBranchConditional %73 %76 %75
-         %76 = OpLabel
-               OpKill
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpConvertSToF %float %79
-         %87 = OpConvertSToF %float %81
-         %88 = OpConvertSToF %float %83
-         %89 = OpConvertSToF %float %85
-         %90 = OpCompositeConstruct %v4float %86 %87 %88 %89
-               OpStore %x_GLF_color %90
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %91
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %95 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %96 = OpFunctionCall %void %main_1
-         %97 = OpLoad %v4float %x_GLF_color
-         %98 = OpCompositeConstruct %main_out %97
-               OpReturnValue %98
-               OpFunctionEnd
-       %main = OpFunction %void None %63
-        %100 = OpLabel
-        %102 = OpLoad %v4float %gl_FragCoord_param_1
-        %101 = OpFunctionCall %main_out %main_inner %102
-        %103 = OpCompositeExtract %v4float %101 0
-               OpStore %x_GLF_color_1_1 %103
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d352923..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  zero : f32;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-fn func_vf2_(pos : ptr<function, vec2<f32>>) -> bool {
-  let x_62 : f32 = (*(pos)).x;
-  let x_64 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_62 < x_64)) {
-    return true;
-  }
-  let x_69 : f32 = (*(pos)).y;
-  let x_71 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_69 > x_71)) {
-    return false;
-  }
-  let x_76 : f32 = x_10.zero;
-  let x_78 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_76 > x_78)) {
-    return true;
-  }
-  return true;
-}
-
-fn main_1() {
-  var param : vec2<f32>;
-  let x_42 : vec4<f32> = gl_FragCoord;
-  param = vec2<f32>(x_42.x, x_42.y);
-  let x_44 : bool = func_vf2_(&(param));
-  if (x_44) {
-    discard;
-  }
-  let x_48 : i32 = x_13.x_GLF_uniform_int_values[0];
-  let x_51 : i32 = x_13.x_GLF_uniform_int_values[1];
-  let x_54 : i32 = x_13.x_GLF_uniform_int_values[1];
-  let x_57 : i32 = x_13.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_48), f32(x_51), f32(x_54), f32(x_57));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6f574e3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,74 +0,0 @@
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-cbuffer cbuffer_x_10 : register(b2, space0) {
-  uint4 x_10[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[2];
-};
-
-bool func_vf2_(inout float2 pos) {
-  const float x_62 = pos.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_64 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_62 < x_64)) {
-    return true;
-  }
-  const float x_69 = pos.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_71 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_69 > x_71)) {
-    return false;
-  }
-  const float x_76 = asfloat(x_10[0].x);
-  const float x_78 = asfloat(x_8[1].x);
-  if ((x_76 > x_78)) {
-    return true;
-  }
-  return true;
-}
-
-void main_1() {
-  float2 param = float2(0.0f, 0.0f);
-  const float4 x_42 = gl_FragCoord;
-  param = float2(x_42.x, x_42.y);
-  const bool x_44 = func_vf2_(param);
-  if (x_44) {
-    discard;
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_48 = asint(x_13[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_51 = asint(x_13[1].x);
-  const int x_54 = asint(x_13[1].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_57 = asint(x_13[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  x_GLF_color = float4(float(x_48), float(x_51), float(x_54), float(x_57));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6f6cbd7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float zero;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool func_vf2_(constant buf1& x_8, constant buf2& x_10, thread float2* const pos) {
-  float const x_62 = (*(pos)).x;
-  float const x_64 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_62 < x_64)) {
-    return true;
-  }
-  float const x_69 = (*(pos)).y;
-  float const x_71 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_69 > x_71)) {
-    return false;
-  }
-  float const x_76 = x_10.zero;
-  float const x_78 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_76 > x_78)) {
-    return true;
-  }
-  return true;
-}
-
-void main_1(constant buf1& x_8, constant buf2& x_10, constant buf0& x_13, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 param = 0.0f;
-  float4 const x_42 = *(tint_symbol_3);
-  param = float2(x_42.x, x_42.y);
-  bool const x_44 = func_vf2_(x_8, x_10, &(param));
-  if (x_44) {
-    discard_fragment();
-  }
-  int const x_48 = x_13.x_GLF_uniform_int_values.arr[0].el;
-  int const x_51 = x_13.x_GLF_uniform_int_values.arr[1].el;
-  int const x_54 = x_13.x_GLF_uniform_int_values.arr[1].el;
-  int const x_57 = x_13.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_4) = float4(float(x_48), float(x_51), float(x_54), float(x_57));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf2& x_10, constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, x_13, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf2& x_10 [[buffer(1)]], constant buf0& x_13 [[buffer(2)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, x_13, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3ccba4e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,175 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 104
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zero"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_13 "x_13"
-               OpName %func_vf2_ "func_vf2_"
-               OpName %pos "pos"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_10 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %bool = OpTypeBool
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %25 = OpTypeFunction %bool %_ptr_Function_v2float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %63 = OpTypeFunction %void
-         %68 = OpConstantNull %v2float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %91 = OpTypeFunction %main_out %v4float
-  %func_vf2_ = OpFunction %bool None %25
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-         %31 = OpLabel
-         %35 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %36 = OpLoad %float %35
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %36 %40
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpReturnValue %true
-         %42 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %48 = OpLoad %float %47
-         %49 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %51 = OpFOrdGreaterThan %bool %48 %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-               OpReturnValue %false
-         %52 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %59 = OpLoad %float %58
-         %60 = OpFOrdGreaterThan %bool %56 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %61
-         %62 = OpLabel
-               OpReturnValue %true
-         %61 = OpLabel
-               OpReturnValue %true
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %63
-         %66 = OpLabel
-      %param = OpVariable %_ptr_Function_v2float Function %68
-         %69 = OpLoad %v4float %gl_FragCoord
-         %70 = OpCompositeExtract %float %69 0
-         %71 = OpCompositeExtract %float %69 1
-         %72 = OpCompositeConstruct %v2float %70 %71
-               OpStore %param %72
-         %73 = OpFunctionCall %bool %func_vf2_ %param
-               OpSelectionMerge %75 None
-               OpBranchConditional %73 %76 %75
-         %76 = OpLabel
-               OpKill
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpConvertSToF %float %79
-         %87 = OpConvertSToF %float %81
-         %88 = OpConvertSToF %float %83
-         %89 = OpConvertSToF %float %85
-         %90 = OpCompositeConstruct %v4float %86 %87 %88 %89
-               OpStore %x_GLF_color %90
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %91
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %95 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %96 = OpFunctionCall %void %main_1
-         %97 = OpLoad %v4float %x_GLF_color
-         %98 = OpCompositeConstruct %main_out %97
-               OpReturnValue %98
-               OpFunctionEnd
-       %main = OpFunction %void None %63
-        %100 = OpLabel
-        %102 = OpLoad %v4float %gl_FragCoord_param_1
-        %101 = OpFunctionCall %main_out %main_inner %102
-        %103 = OpCompositeExtract %v4float %101 0
-               OpStore %x_GLF_color_1_1 %103
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d352923..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-function-vec2-never-discard/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  zero : f32;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-fn func_vf2_(pos : ptr<function, vec2<f32>>) -> bool {
-  let x_62 : f32 = (*(pos)).x;
-  let x_64 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_62 < x_64)) {
-    return true;
-  }
-  let x_69 : f32 = (*(pos)).y;
-  let x_71 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_69 > x_71)) {
-    return false;
-  }
-  let x_76 : f32 = x_10.zero;
-  let x_78 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_76 > x_78)) {
-    return true;
-  }
-  return true;
-}
-
-fn main_1() {
-  var param : vec2<f32>;
-  let x_42 : vec4<f32> = gl_FragCoord;
-  param = vec2<f32>(x_42.x, x_42.y);
-  let x_44 : bool = func_vf2_(&(param));
-  if (x_44) {
-    discard;
-  }
-  let x_48 : i32 = x_13.x_GLF_uniform_int_values[0];
-  let x_51 : i32 = x_13.x_GLF_uniform_int_values[1];
-  let x_54 : i32 = x_13.x_GLF_uniform_int_values[1];
-  let x_57 : i32 = x_13.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_48), f32(x_51), f32(x_54), f32(x_57));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6fc292f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-
-void main_1() {
-  x_GLF_global_loop_count = 0;
-  const int x_26 = asint(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_32 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_35 = asint(x_6[1].x);
-  x_GLF_color = float4(float(x_26), float(x_29), float(x_32), float(x_35));
-  while (true) {
-    bool x_54 = false;
-    bool x_55_phi = false;
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    x_55_phi = true;
-    if (!(true)) {
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_51 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      const int x_53 = asint(x_6[1].x);
-      x_54 = (x_51 == x_53);
-      x_55_phi = x_54;
-    }
-    if (!(x_55_phi)) {
-      break;
-    }
-  }
-  while (true) {
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_69 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_70 = float(x_69);
-    x_GLF_color = float4(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.msl
deleted file mode 100644
index d2b35f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = 0;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  *(tint_symbol_4) = float4(float(x_26), float(x_29), float(x_32), float(x_35));
-  while (true) {
-    bool x_54 = false;
-    bool x_55_phi = false;
-    int const x_42 = *(tint_symbol_3);
-    if ((x_42 < 100)) {
-    } else {
-      break;
-    }
-    int const x_45 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    x_55_phi = true;
-    if (!(true)) {
-      int const x_51 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      x_54 = (x_51 == x_53);
-      x_55_phi = x_54;
-    }
-    bool const x_55 = x_55_phi;
-    if (!(x_55)) {
-      break;
-    }
-  }
-  while (true) {
-    int const x_63 = *(tint_symbol_3);
-    if ((x_63 < 100)) {
-    } else {
-      break;
-    }
-    int const x_66 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-    int const x_69 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_70 = float(x_69);
-    *(tint_symbol_4) = float4(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ea2c15e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,164 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %x_54 "x_54"
-               OpName %x_55_phi "x_55_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %46 = OpConstantNull %bool
-    %int_100 = OpConstant %int 100
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %85 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-       %x_54 = OpVariable %_ptr_Function_bool Function %46
-   %x_55_phi = OpVariable %_ptr_Function_bool Function %46
-               OpStore %x_GLF_global_loop_count %int_0
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %29 = OpLoad %int %28
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %34 = OpConvertSToF %float %27
-         %35 = OpConvertSToF %float %29
-         %36 = OpConvertSToF %float %31
-         %37 = OpConvertSToF %float %33
-         %38 = OpCompositeConstruct %v4float %34 %35 %36 %37
-               OpStore %x_GLF_color %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %48 = OpLoad %int %x_GLF_global_loop_count
-         %50 = OpSLessThan %bool %48 %int_100
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpBranch %51
-         %53 = OpLabel
-               OpBranch %40
-         %51 = OpLabel
-         %54 = OpLoad %int %x_GLF_global_loop_count
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %x_GLF_global_loop_count %55
-               OpStore %x_55_phi %true
-         %57 = OpLogicalNot %bool %true
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpIEqual %bool %61 %63
-               OpStore %x_54 %64
-         %65 = OpLoad %bool %x_54
-               OpStore %x_55_phi %65
-               OpBranch %58
-         %58 = OpLabel
-         %66 = OpLoad %bool %x_55_phi
-         %67 = OpLogicalNot %bool %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpBranch %40
-         %68 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpBranch %39
-         %40 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %74 = OpLoad %int %x_GLF_global_loop_count
-         %75 = OpSLessThan %bool %74 %int_100
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-               OpBranch %76
-         %78 = OpLabel
-               OpBranch %71
-         %76 = OpLabel
-         %79 = OpLoad %int %x_GLF_global_loop_count
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %x_GLF_global_loop_count %80
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %82 = OpLoad %int %81
-         %83 = OpConvertSToF %float %82
-         %84 = OpCompositeConstruct %v4float %83 %83 %83 %83
-               OpStore %x_GLF_color %84
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %70
-         %71 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %85
-         %88 = OpLabel
-         %89 = OpFunctionCall %void %main_1
-         %90 = OpLoad %v4float %x_GLF_color
-         %91 = OpCompositeConstruct %main_out %90
-               OpReturnValue %91
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %93 = OpLabel
-         %94 = OpFunctionCall %main_out %main_inner
-         %95 = OpCompositeExtract %v4float %94 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1beed3d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  x_GLF_global_loop_count = 0;
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[1];
-  x_GLF_color = vec4<f32>(f32(x_26), f32(x_29), f32(x_32), f32(x_35));
-  loop {
-    var x_54 : bool;
-    var x_55_phi : bool;
-    let x_42 : i32 = x_GLF_global_loop_count;
-    if ((x_42 < 100)) {
-    } else {
-      break;
-    }
-    let x_45 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_45 + 1);
-    x_55_phi = true;
-    if (!(true)) {
-      let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-      x_54 = (x_51 == x_53);
-      x_55_phi = x_54;
-    }
-    let x_55 : bool = x_55_phi;
-    if (!(x_55)) {
-      break;
-    }
-  }
-  loop {
-    let x_63 : i32 = x_GLF_global_loop_count;
-    if ((x_63 < 100)) {
-    } else {
-      break;
-    }
-    let x_66 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_66 + 1);
-    let x_69 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_70 : f32 = f32(x_69);
-    x_GLF_color = vec4<f32>(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6fc292f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-
-void main_1() {
-  x_GLF_global_loop_count = 0;
-  const int x_26 = asint(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_32 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_35 = asint(x_6[1].x);
-  x_GLF_color = float4(float(x_26), float(x_29), float(x_32), float(x_35));
-  while (true) {
-    bool x_54 = false;
-    bool x_55_phi = false;
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    x_55_phi = true;
-    if (!(true)) {
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_51 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      const int x_53 = asint(x_6[1].x);
-      x_54 = (x_51 == x_53);
-      x_55_phi = x_54;
-    }
-    if (!(x_55_phi)) {
-      break;
-    }
-  }
-  while (true) {
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_69 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_70 = float(x_69);
-    x_GLF_color = float4(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.msl
deleted file mode 100644
index d2b35f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = 0;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  *(tint_symbol_4) = float4(float(x_26), float(x_29), float(x_32), float(x_35));
-  while (true) {
-    bool x_54 = false;
-    bool x_55_phi = false;
-    int const x_42 = *(tint_symbol_3);
-    if ((x_42 < 100)) {
-    } else {
-      break;
-    }
-    int const x_45 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    x_55_phi = true;
-    if (!(true)) {
-      int const x_51 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      x_54 = (x_51 == x_53);
-      x_55_phi = x_54;
-    }
-    bool const x_55 = x_55_phi;
-    if (!(x_55)) {
-      break;
-    }
-  }
-  while (true) {
-    int const x_63 = *(tint_symbol_3);
-    if ((x_63 < 100)) {
-    } else {
-      break;
-    }
-    int const x_66 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-    int const x_69 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_70 = float(x_69);
-    *(tint_symbol_4) = float4(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ea2c15e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,164 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %x_54 "x_54"
-               OpName %x_55_phi "x_55_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %46 = OpConstantNull %bool
-    %int_100 = OpConstant %int 100
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %85 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-       %x_54 = OpVariable %_ptr_Function_bool Function %46
-   %x_55_phi = OpVariable %_ptr_Function_bool Function %46
-               OpStore %x_GLF_global_loop_count %int_0
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %29 = OpLoad %int %28
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %34 = OpConvertSToF %float %27
-         %35 = OpConvertSToF %float %29
-         %36 = OpConvertSToF %float %31
-         %37 = OpConvertSToF %float %33
-         %38 = OpCompositeConstruct %v4float %34 %35 %36 %37
-               OpStore %x_GLF_color %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %48 = OpLoad %int %x_GLF_global_loop_count
-         %50 = OpSLessThan %bool %48 %int_100
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpBranch %51
-         %53 = OpLabel
-               OpBranch %40
-         %51 = OpLabel
-         %54 = OpLoad %int %x_GLF_global_loop_count
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %x_GLF_global_loop_count %55
-               OpStore %x_55_phi %true
-         %57 = OpLogicalNot %bool %true
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpIEqual %bool %61 %63
-               OpStore %x_54 %64
-         %65 = OpLoad %bool %x_54
-               OpStore %x_55_phi %65
-               OpBranch %58
-         %58 = OpLabel
-         %66 = OpLoad %bool %x_55_phi
-         %67 = OpLogicalNot %bool %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpBranch %40
-         %68 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpBranch %39
-         %40 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %74 = OpLoad %int %x_GLF_global_loop_count
-         %75 = OpSLessThan %bool %74 %int_100
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-               OpBranch %76
-         %78 = OpLabel
-               OpBranch %71
-         %76 = OpLabel
-         %79 = OpLoad %int %x_GLF_global_loop_count
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %x_GLF_global_loop_count %80
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %82 = OpLoad %int %81
-         %83 = OpConvertSToF %float %82
-         %84 = OpCompositeConstruct %v4float %83 %83 %83 %83
-               OpStore %x_GLF_color %84
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %70
-         %71 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %85
-         %88 = OpLabel
-         %89 = OpFunctionCall %void %main_1
-         %90 = OpLoad %v4float %x_GLF_color
-         %91 = OpCompositeConstruct %main_out %90
-               OpReturnValue %91
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %93 = OpLabel
-         %94 = OpFunctionCall %main_out %main_inner
-         %95 = OpCompositeExtract %v4float %94 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1beed3d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-bound-true-logical-or/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  x_GLF_global_loop_count = 0;
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[1];
-  x_GLF_color = vec4<f32>(f32(x_26), f32(x_29), f32(x_32), f32(x_35));
-  loop {
-    var x_54 : bool;
-    var x_55_phi : bool;
-    let x_42 : i32 = x_GLF_global_loop_count;
-    if ((x_42 < 100)) {
-    } else {
-      break;
-    }
-    let x_45 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_45 + 1);
-    x_55_phi = true;
-    if (!(true)) {
-      let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-      x_54 = (x_51 == x_53);
-      x_55_phi = x_54;
-    }
-    let x_55 : bool = x_55_phi;
-    if (!(x_55)) {
-      break;
-    }
-  }
-  loop {
-    let x_63 : i32 = x_GLF_global_loop_count;
-    if ((x_63 < 100)) {
-    } else {
-      break;
-    }
-    let x_66 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_66 + 1);
-    let x_69 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_70 : f32 = f32(x_69);
-    x_GLF_color = vec4<f32>(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 198f3b0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,120 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[18];
-};
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[4];
-};
-cbuffer cbuffer_x_15 : register(b2, space0) {
-  uint4 x_15[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x4 m = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float f = 0.0f;
-  int a = 0;
-  int b = 0;
-  float zero = 0.0f;
-  x_GLF_global_loop_count = 0;
-  const float x_62 = asfloat(x_7[1].x);
-  const float x_64 = asfloat(x_7[2].x);
-  const float x_66 = asfloat(x_7[3].x);
-  const float x_68 = asfloat(x_7[4].x);
-  const float x_70 = asfloat(x_7[5].x);
-  const float x_72 = asfloat(x_7[6].x);
-  const float x_74 = asfloat(x_7[7].x);
-  const float x_76 = asfloat(x_7[8].x);
-  const float x_78 = asfloat(x_7[9].x);
-  const float x_80 = asfloat(x_7[10].x);
-  const float x_82 = asfloat(x_7[11].x);
-  const float x_84 = asfloat(x_7[12].x);
-  const float x_86 = asfloat(x_7[13].x);
-  const float x_88 = asfloat(x_7[14].x);
-  const float x_90 = asfloat(x_7[15].x);
-  const float x_92 = asfloat(x_7[16].x);
-  m = float4x4(float4(x_62, x_64, x_66, x_68), float4(x_70, x_72, x_74, x_76), float4(x_78, x_80, x_82, x_84), float4(x_86, x_88, x_90, x_92));
-  const float x_99 = asfloat(x_7[1].x);
-  const float x_101 = asfloat(x_7[2].x);
-  const float x_103 = asfloat(x_7[3].x);
-  const float x_105 = asfloat(x_7[4].x);
-  v = float4(x_99, x_101, x_103, x_105);
-  const float x_108 = asfloat(x_7[1].x);
-  f = x_108;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_110 = asint(x_12[scalar_offset / 4][scalar_offset % 4]);
-  a = x_110;
-  {
-    for(; (x_GLF_global_loop_count < 10); a = (a + 1)) {
-      x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-      const int x_121 = clamp(a, 0, 3);
-      const float x_123 = asfloat(x_7[1].x);
-      const float x_125 = v[x_121];
-      set_float4(v, x_121, (x_125 + x_123));
-      const int x_129 = asint(x_12[2].x);
-      b = x_129;
-      {
-        for(; (x_GLF_global_loop_count < 10); b = (b - 1)) {
-          x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-          const float x_142 = v[clamp(b, 0, 3)];
-          const float x_147 = m[clamp(b, 0, 3)][a];
-          f = (f + (x_142 * x_147));
-        }
-      }
-      const int x_153 = a;
-      const float x_156 = asfloat(x_7[1].x);
-      set_float4(m[1], clamp(x_153, 0, 3), x_156);
-      const int x_159 = asint(x_15[0].x);
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const int x_161 = asint(x_12[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      if ((x_159 == x_161)) {
-        discard;
-      }
-      const int x_166 = asint(x_15[0].x);
-      const int x_168 = asint(x_12[1].x);
-      if ((x_166 == x_168)) {
-        discard;
-      }
-    }
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_175 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  zero = x_175;
-  const float x_176 = f;
-  const float x_178 = asfloat(x_7[17].x);
-  if (!((x_176 == x_178))) {
-    const float x_183 = asfloat(x_7[1].x);
-    zero = x_183;
-  }
-  const float x_184 = f;
-  const float x_185 = zero;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_187 = asint(x_12[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  x_GLF_color = float4(x_184, x_185, float(x_187), f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.msl
deleted file mode 100644
index cf1dea6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,151 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[18];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct buf2 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_12, constant buf2& x_15, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4x4 m = float4x4(0.0f);
-  float4 v = 0.0f;
-  float f = 0.0f;
-  int a = 0;
-  int b = 0;
-  float zero = 0.0f;
-  *(tint_symbol_3) = 0;
-  float const x_62 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_64 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_66 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  float const x_68 = x_7.x_GLF_uniform_float_values.arr[4].el;
-  float const x_70 = x_7.x_GLF_uniform_float_values.arr[5].el;
-  float const x_72 = x_7.x_GLF_uniform_float_values.arr[6].el;
-  float const x_74 = x_7.x_GLF_uniform_float_values.arr[7].el;
-  float const x_76 = x_7.x_GLF_uniform_float_values.arr[8].el;
-  float const x_78 = x_7.x_GLF_uniform_float_values.arr[9].el;
-  float const x_80 = x_7.x_GLF_uniform_float_values.arr[10].el;
-  float const x_82 = x_7.x_GLF_uniform_float_values.arr[11].el;
-  float const x_84 = x_7.x_GLF_uniform_float_values.arr[12].el;
-  float const x_86 = x_7.x_GLF_uniform_float_values.arr[13].el;
-  float const x_88 = x_7.x_GLF_uniform_float_values.arr[14].el;
-  float const x_90 = x_7.x_GLF_uniform_float_values.arr[15].el;
-  float const x_92 = x_7.x_GLF_uniform_float_values.arr[16].el;
-  m = float4x4(float4(x_62, x_64, x_66, x_68), float4(x_70, x_72, x_74, x_76), float4(x_78, x_80, x_82, x_84), float4(x_86, x_88, x_90, x_92));
-  float const x_99 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_101 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_103 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  float const x_105 = x_7.x_GLF_uniform_float_values.arr[4].el;
-  v = float4(x_99, x_101, x_103, x_105);
-  float const x_108 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  f = x_108;
-  int const x_110 = x_12.x_GLF_uniform_int_values.arr[0].el;
-  a = x_110;
-  while (true) {
-    int const x_115 = *(tint_symbol_3);
-    if ((x_115 < 10)) {
-    } else {
-      break;
-    }
-    int const x_118 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_118) + as_type<uint>(1)));
-    int const x_120 = a;
-    int const x_121 = clamp(x_120, 0, 3);
-    float const x_123 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    float const x_125 = v[x_121];
-    v[x_121] = (x_125 + x_123);
-    int const x_129 = x_12.x_GLF_uniform_int_values.arr[2].el;
-    b = x_129;
-    while (true) {
-      int const x_134 = *(tint_symbol_3);
-      if ((x_134 < 10)) {
-      } else {
-        break;
-      }
-      int const x_137 = *(tint_symbol_3);
-      *(tint_symbol_3) = as_type<int>((as_type<uint>(x_137) + as_type<uint>(1)));
-      int const x_139 = b;
-      float const x_142 = v[clamp(x_139, 0, 3)];
-      int const x_143 = b;
-      int const x_145 = a;
-      float const x_147 = m[clamp(x_143, 0, 3)][x_145];
-      float const x_149 = f;
-      f = (x_149 + (x_142 * x_147));
-      {
-        int const x_151 = b;
-        b = as_type<int>((as_type<uint>(x_151) - as_type<uint>(1)));
-      }
-    }
-    int const x_153 = a;
-    float const x_156 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    m[1][clamp(x_153, 0, 3)] = x_156;
-    int const x_159 = x_15.one;
-    int const x_161 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_159 == x_161)) {
-      discard_fragment();
-    }
-    int const x_166 = x_15.one;
-    int const x_168 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_166 == x_168)) {
-      discard_fragment();
-    }
-    {
-      int const x_172 = a;
-      a = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
-    }
-  }
-  float const x_175 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  zero = x_175;
-  float const x_176 = f;
-  float const x_178 = x_7.x_GLF_uniform_float_values.arr[17].el;
-  if (!((x_176 == x_178))) {
-    float const x_183 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    zero = x_183;
-  }
-  float const x_184 = f;
-  float const x_185 = zero;
-  int const x_187 = x_12.x_GLF_uniform_int_values.arr[0].el;
-  float const x_189 = f;
-  *(tint_symbol_4) = float4(x_184, x_185, float(x_187), x_189);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_12, constant buf2& x_15, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_12, x_15, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]], constant buf2& x_15 [[buffer(2)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_12, x_15, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6308fc5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,312 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 212
-; Schema: 0
-               OpCapability Shader
-        %127 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "one"
-               OpName %x_15 "x_15"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %v "v"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %zero "zero"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_18 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_15 NonWritable
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 2
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-    %uint_18 = OpConstant %uint 18
-%_arr_float_uint_18 = OpTypeArray %float %uint_18
-       %buf1 = OpTypeStruct %_arr_float_uint_18
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf2 = OpTypeStruct %int
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_15 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %26 = OpTypeFunction %void
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %33 = OpConstantNull %mat4v4float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %38 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-     %int_11 = OpConstant %int 11
-     %int_12 = OpConstant %int 12
-     %int_13 = OpConstant %int 13
-     %int_14 = OpConstant %int 14
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-     %int_17 = OpConstant %int 17
-   %main_out = OpTypeStruct %v4float
-        %201 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %26
-         %29 = OpLabel
-          %m = OpVariable %_ptr_Function_mat4v4float Function %33
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %f = OpVariable %_ptr_Function_float Function %38
-          %a = OpVariable %_ptr_Function_int Function %9
-          %b = OpVariable %_ptr_Function_int Function %9
-       %zero = OpVariable %_ptr_Function_float Function %38
-               OpStore %x_GLF_global_loop_count %int_0
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %50 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %51 = OpLoad %float %50
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-         %54 = OpLoad %float %53
-         %56 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_4
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_5
-         %60 = OpLoad %float %59
-         %62 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_6
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_7
-         %66 = OpLoad %float %65
-         %68 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_8
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_9
-         %72 = OpLoad %float %71
-         %74 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_10
-         %75 = OpLoad %float %74
-         %77 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_11
-         %78 = OpLoad %float %77
-         %80 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_12
-         %81 = OpLoad %float %80
-         %83 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_13
-         %84 = OpLoad %float %83
-         %86 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_14
-         %87 = OpLoad %float %86
-         %89 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_15
-         %90 = OpLoad %float %89
-         %92 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_16
-         %93 = OpLoad %float %92
-         %94 = OpCompositeConstruct %v4float %48 %51 %54 %57
-         %95 = OpCompositeConstruct %v4float %60 %63 %66 %69
-         %96 = OpCompositeConstruct %v4float %72 %75 %78 %81
-         %97 = OpCompositeConstruct %v4float %84 %87 %90 %93
-         %98 = OpCompositeConstruct %mat4v4float %94 %95 %96 %97
-               OpStore %m %98
-         %99 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %100 = OpLoad %float %99
-        %101 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-        %102 = OpLoad %float %101
-        %103 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-        %104 = OpLoad %float %103
-        %105 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_4
-        %106 = OpLoad %float %105
-        %107 = OpCompositeConstruct %v4float %100 %102 %104 %106
-               OpStore %v %107
-        %108 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %109 = OpLoad %float %108
-               OpStore %f %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %112 = OpLoad %int %111
-               OpStore %a %112
-               OpBranch %113
-        %113 = OpLabel
-               OpLoopMerge %114 %115 None
-               OpBranch %116
-        %116 = OpLabel
-        %117 = OpLoad %int %x_GLF_global_loop_count
-        %118 = OpSLessThan %bool %117 %int_10
-               OpSelectionMerge %120 None
-               OpBranchConditional %118 %121 %122
-        %121 = OpLabel
-               OpBranch %120
-        %122 = OpLabel
-               OpBranch %114
-        %120 = OpLabel
-        %123 = OpLoad %int %x_GLF_global_loop_count
-        %124 = OpIAdd %int %123 %int_1
-               OpStore %x_GLF_global_loop_count %124
-        %125 = OpLoad %int %a
-        %126 = OpExtInst %int %127 SClamp %125 %int_0 %int_3
-        %128 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %129 = OpLoad %float %128
-        %130 = OpAccessChain %_ptr_Function_float %v %126
-        %131 = OpLoad %float %130
-        %132 = OpAccessChain %_ptr_Function_float %v %126
-        %133 = OpFAdd %float %131 %129
-               OpStore %132 %133
-        %134 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_2
-        %135 = OpLoad %int %134
-               OpStore %b %135
-               OpBranch %136
-        %136 = OpLabel
-               OpLoopMerge %137 %138 None
-               OpBranch %139
-        %139 = OpLabel
-        %140 = OpLoad %int %x_GLF_global_loop_count
-        %141 = OpSLessThan %bool %140 %int_10
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %144
-        %143 = OpLabel
-               OpBranch %142
-        %144 = OpLabel
-               OpBranch %137
-        %142 = OpLabel
-        %145 = OpLoad %int %x_GLF_global_loop_count
-        %146 = OpIAdd %int %145 %int_1
-               OpStore %x_GLF_global_loop_count %146
-        %147 = OpLoad %int %b
-        %148 = OpExtInst %int %127 SClamp %147 %int_0 %int_3
-        %149 = OpAccessChain %_ptr_Function_float %v %148
-        %150 = OpLoad %float %149
-        %151 = OpLoad %int %b
-        %152 = OpLoad %int %a
-        %153 = OpExtInst %int %127 SClamp %151 %int_0 %int_3
-        %154 = OpAccessChain %_ptr_Function_float %m %153 %152
-        %155 = OpLoad %float %154
-        %156 = OpLoad %float %f
-        %157 = OpFMul %float %150 %155
-        %158 = OpFAdd %float %156 %157
-               OpStore %f %158
-               OpBranch %138
-        %138 = OpLabel
-        %159 = OpLoad %int %b
-        %160 = OpISub %int %159 %int_1
-               OpStore %b %160
-               OpBranch %136
-        %137 = OpLabel
-        %161 = OpLoad %int %a
-        %162 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %163 = OpLoad %float %162
-        %164 = OpExtInst %int %127 SClamp %161 %int_0 %int_3
-        %165 = OpAccessChain %_ptr_Function_float %m %int_1 %164
-               OpStore %165 %163
-        %166 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0
-        %167 = OpLoad %int %166
-        %168 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %169 = OpLoad %int %168
-        %170 = OpIEqual %bool %167 %169
-               OpSelectionMerge %171 None
-               OpBranchConditional %170 %172 %171
-        %172 = OpLabel
-               OpKill
-        %171 = OpLabel
-        %173 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0
-        %174 = OpLoad %int %173
-        %175 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %176 = OpLoad %int %175
-        %177 = OpIEqual %bool %174 %176
-               OpSelectionMerge %178 None
-               OpBranchConditional %177 %179 %178
-        %179 = OpLabel
-               OpKill
-        %178 = OpLabel
-               OpBranch %115
-        %115 = OpLabel
-        %180 = OpLoad %int %a
-        %181 = OpIAdd %int %180 %int_1
-               OpStore %a %181
-               OpBranch %113
-        %114 = OpLabel
-        %182 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-        %183 = OpLoad %float %182
-               OpStore %zero %183
-        %184 = OpLoad %float %f
-        %186 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_17
-        %187 = OpLoad %float %186
-        %189 = OpFOrdEqual %bool %184 %187
-        %188 = OpLogicalNot %bool %189
-               OpSelectionMerge %190 None
-               OpBranchConditional %188 %191 %190
-        %191 = OpLabel
-        %192 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %193 = OpLoad %float %192
-               OpStore %zero %193
-               OpBranch %190
-        %190 = OpLabel
-        %194 = OpLoad %float %f
-        %195 = OpLoad %float %zero
-        %196 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %197 = OpLoad %int %196
-        %198 = OpLoad %float %f
-        %199 = OpConvertSToF %float %197
-        %200 = OpCompositeConstruct %v4float %194 %195 %199 %198
-               OpStore %x_GLF_color %200
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %201
-        %204 = OpLabel
-        %205 = OpFunctionCall %void %main_1
-        %206 = OpLoad %v4float %x_GLF_color
-        %207 = OpCompositeConstruct %main_out %206
-               OpReturnValue %207
-               OpFunctionEnd
-       %main = OpFunction %void None %26
-        %209 = OpLabel
-        %210 = OpFunctionCall %main_out %main_inner
-        %211 = OpCompositeExtract %v4float %210 0
-               OpStore %x_GLF_color_1_1 %211
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 40aaeca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,144 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 18>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[block]]
-struct buf2 {
-  one : i32;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_15 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat4x4<f32>;
-  var v : vec4<f32>;
-  var f : f32;
-  var a : i32;
-  var b : i32;
-  var zero : f32;
-  x_GLF_global_loop_count = 0;
-  let x_62 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_64 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_66 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_68 : f32 = x_7.x_GLF_uniform_float_values[4];
-  let x_70 : f32 = x_7.x_GLF_uniform_float_values[5];
-  let x_72 : f32 = x_7.x_GLF_uniform_float_values[6];
-  let x_74 : f32 = x_7.x_GLF_uniform_float_values[7];
-  let x_76 : f32 = x_7.x_GLF_uniform_float_values[8];
-  let x_78 : f32 = x_7.x_GLF_uniform_float_values[9];
-  let x_80 : f32 = x_7.x_GLF_uniform_float_values[10];
-  let x_82 : f32 = x_7.x_GLF_uniform_float_values[11];
-  let x_84 : f32 = x_7.x_GLF_uniform_float_values[12];
-  let x_86 : f32 = x_7.x_GLF_uniform_float_values[13];
-  let x_88 : f32 = x_7.x_GLF_uniform_float_values[14];
-  let x_90 : f32 = x_7.x_GLF_uniform_float_values[15];
-  let x_92 : f32 = x_7.x_GLF_uniform_float_values[16];
-  m = mat4x4<f32>(vec4<f32>(x_62, x_64, x_66, x_68), vec4<f32>(x_70, x_72, x_74, x_76), vec4<f32>(x_78, x_80, x_82, x_84), vec4<f32>(x_86, x_88, x_90, x_92));
-  let x_99 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_101 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_103 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_105 : f32 = x_7.x_GLF_uniform_float_values[4];
-  v = vec4<f32>(x_99, x_101, x_103, x_105);
-  let x_108 : f32 = x_7.x_GLF_uniform_float_values[1];
-  f = x_108;
-  let x_110 : i32 = x_12.x_GLF_uniform_int_values[0];
-  a = x_110;
-  loop {
-    let x_115 : i32 = x_GLF_global_loop_count;
-    if ((x_115 < 10)) {
-    } else {
-      break;
-    }
-    let x_118 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_118 + 1);
-    let x_120 : i32 = a;
-    let x_121 : i32 = clamp(x_120, 0, 3);
-    let x_123 : f32 = x_7.x_GLF_uniform_float_values[1];
-    let x_125 : f32 = v[x_121];
-    v[x_121] = (x_125 + x_123);
-    let x_129 : i32 = x_12.x_GLF_uniform_int_values[2];
-    b = x_129;
-    loop {
-      let x_134 : i32 = x_GLF_global_loop_count;
-      if ((x_134 < 10)) {
-      } else {
-        break;
-      }
-      let x_137 : i32 = x_GLF_global_loop_count;
-      x_GLF_global_loop_count = (x_137 + 1);
-      let x_139 : i32 = b;
-      let x_142 : f32 = v[clamp(x_139, 0, 3)];
-      let x_143 : i32 = b;
-      let x_145 : i32 = a;
-      let x_147 : f32 = m[clamp(x_143, 0, 3)][x_145];
-      let x_149 : f32 = f;
-      f = (x_149 + (x_142 * x_147));
-
-      continuing {
-        let x_151 : i32 = b;
-        b = (x_151 - 1);
-      }
-    }
-    let x_153 : i32 = a;
-    let x_156 : f32 = x_7.x_GLF_uniform_float_values[1];
-    m[1][clamp(x_153, 0, 3)] = x_156;
-    let x_159 : i32 = x_15.one;
-    let x_161 : i32 = x_12.x_GLF_uniform_int_values[0];
-    if ((x_159 == x_161)) {
-      discard;
-    }
-    let x_166 : i32 = x_15.one;
-    let x_168 : i32 = x_12.x_GLF_uniform_int_values[1];
-    if ((x_166 == x_168)) {
-      discard;
-    }
-
-    continuing {
-      let x_172 : i32 = a;
-      a = (x_172 + 1);
-    }
-  }
-  let x_175 : f32 = x_7.x_GLF_uniform_float_values[0];
-  zero = x_175;
-  let x_176 : f32 = f;
-  let x_178 : f32 = x_7.x_GLF_uniform_float_values[17];
-  if (!((x_176 == x_178))) {
-    let x_183 : f32 = x_7.x_GLF_uniform_float_values[1];
-    zero = x_183;
-  }
-  let x_184 : f32 = f;
-  let x_185 : f32 = zero;
-  let x_187 : i32 = x_12.x_GLF_uniform_int_values[0];
-  let x_189 : f32 = f;
-  x_GLF_color = vec4<f32>(x_184, x_185, f32(x_187), x_189);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 198f3b0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,120 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[18];
-};
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[4];
-};
-cbuffer cbuffer_x_15 : register(b2, space0) {
-  uint4 x_15[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x4 m = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float f = 0.0f;
-  int a = 0;
-  int b = 0;
-  float zero = 0.0f;
-  x_GLF_global_loop_count = 0;
-  const float x_62 = asfloat(x_7[1].x);
-  const float x_64 = asfloat(x_7[2].x);
-  const float x_66 = asfloat(x_7[3].x);
-  const float x_68 = asfloat(x_7[4].x);
-  const float x_70 = asfloat(x_7[5].x);
-  const float x_72 = asfloat(x_7[6].x);
-  const float x_74 = asfloat(x_7[7].x);
-  const float x_76 = asfloat(x_7[8].x);
-  const float x_78 = asfloat(x_7[9].x);
-  const float x_80 = asfloat(x_7[10].x);
-  const float x_82 = asfloat(x_7[11].x);
-  const float x_84 = asfloat(x_7[12].x);
-  const float x_86 = asfloat(x_7[13].x);
-  const float x_88 = asfloat(x_7[14].x);
-  const float x_90 = asfloat(x_7[15].x);
-  const float x_92 = asfloat(x_7[16].x);
-  m = float4x4(float4(x_62, x_64, x_66, x_68), float4(x_70, x_72, x_74, x_76), float4(x_78, x_80, x_82, x_84), float4(x_86, x_88, x_90, x_92));
-  const float x_99 = asfloat(x_7[1].x);
-  const float x_101 = asfloat(x_7[2].x);
-  const float x_103 = asfloat(x_7[3].x);
-  const float x_105 = asfloat(x_7[4].x);
-  v = float4(x_99, x_101, x_103, x_105);
-  const float x_108 = asfloat(x_7[1].x);
-  f = x_108;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_110 = asint(x_12[scalar_offset / 4][scalar_offset % 4]);
-  a = x_110;
-  {
-    for(; (x_GLF_global_loop_count < 10); a = (a + 1)) {
-      x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-      const int x_121 = clamp(a, 0, 3);
-      const float x_123 = asfloat(x_7[1].x);
-      const float x_125 = v[x_121];
-      set_float4(v, x_121, (x_125 + x_123));
-      const int x_129 = asint(x_12[2].x);
-      b = x_129;
-      {
-        for(; (x_GLF_global_loop_count < 10); b = (b - 1)) {
-          x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-          const float x_142 = v[clamp(b, 0, 3)];
-          const float x_147 = m[clamp(b, 0, 3)][a];
-          f = (f + (x_142 * x_147));
-        }
-      }
-      const int x_153 = a;
-      const float x_156 = asfloat(x_7[1].x);
-      set_float4(m[1], clamp(x_153, 0, 3), x_156);
-      const int x_159 = asint(x_15[0].x);
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const int x_161 = asint(x_12[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      if ((x_159 == x_161)) {
-        discard;
-      }
-      const int x_166 = asint(x_15[0].x);
-      const int x_168 = asint(x_12[1].x);
-      if ((x_166 == x_168)) {
-        discard;
-      }
-    }
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_175 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  zero = x_175;
-  const float x_176 = f;
-  const float x_178 = asfloat(x_7[17].x);
-  if (!((x_176 == x_178))) {
-    const float x_183 = asfloat(x_7[1].x);
-    zero = x_183;
-  }
-  const float x_184 = f;
-  const float x_185 = zero;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_187 = asint(x_12[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  x_GLF_color = float4(x_184, x_185, float(x_187), f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.msl
deleted file mode 100644
index cf1dea6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,151 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[18];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct buf2 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_12, constant buf2& x_15, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4x4 m = float4x4(0.0f);
-  float4 v = 0.0f;
-  float f = 0.0f;
-  int a = 0;
-  int b = 0;
-  float zero = 0.0f;
-  *(tint_symbol_3) = 0;
-  float const x_62 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_64 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_66 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  float const x_68 = x_7.x_GLF_uniform_float_values.arr[4].el;
-  float const x_70 = x_7.x_GLF_uniform_float_values.arr[5].el;
-  float const x_72 = x_7.x_GLF_uniform_float_values.arr[6].el;
-  float const x_74 = x_7.x_GLF_uniform_float_values.arr[7].el;
-  float const x_76 = x_7.x_GLF_uniform_float_values.arr[8].el;
-  float const x_78 = x_7.x_GLF_uniform_float_values.arr[9].el;
-  float const x_80 = x_7.x_GLF_uniform_float_values.arr[10].el;
-  float const x_82 = x_7.x_GLF_uniform_float_values.arr[11].el;
-  float const x_84 = x_7.x_GLF_uniform_float_values.arr[12].el;
-  float const x_86 = x_7.x_GLF_uniform_float_values.arr[13].el;
-  float const x_88 = x_7.x_GLF_uniform_float_values.arr[14].el;
-  float const x_90 = x_7.x_GLF_uniform_float_values.arr[15].el;
-  float const x_92 = x_7.x_GLF_uniform_float_values.arr[16].el;
-  m = float4x4(float4(x_62, x_64, x_66, x_68), float4(x_70, x_72, x_74, x_76), float4(x_78, x_80, x_82, x_84), float4(x_86, x_88, x_90, x_92));
-  float const x_99 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_101 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_103 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  float const x_105 = x_7.x_GLF_uniform_float_values.arr[4].el;
-  v = float4(x_99, x_101, x_103, x_105);
-  float const x_108 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  f = x_108;
-  int const x_110 = x_12.x_GLF_uniform_int_values.arr[0].el;
-  a = x_110;
-  while (true) {
-    int const x_115 = *(tint_symbol_3);
-    if ((x_115 < 10)) {
-    } else {
-      break;
-    }
-    int const x_118 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_118) + as_type<uint>(1)));
-    int const x_120 = a;
-    int const x_121 = clamp(x_120, 0, 3);
-    float const x_123 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    float const x_125 = v[x_121];
-    v[x_121] = (x_125 + x_123);
-    int const x_129 = x_12.x_GLF_uniform_int_values.arr[2].el;
-    b = x_129;
-    while (true) {
-      int const x_134 = *(tint_symbol_3);
-      if ((x_134 < 10)) {
-      } else {
-        break;
-      }
-      int const x_137 = *(tint_symbol_3);
-      *(tint_symbol_3) = as_type<int>((as_type<uint>(x_137) + as_type<uint>(1)));
-      int const x_139 = b;
-      float const x_142 = v[clamp(x_139, 0, 3)];
-      int const x_143 = b;
-      int const x_145 = a;
-      float const x_147 = m[clamp(x_143, 0, 3)][x_145];
-      float const x_149 = f;
-      f = (x_149 + (x_142 * x_147));
-      {
-        int const x_151 = b;
-        b = as_type<int>((as_type<uint>(x_151) - as_type<uint>(1)));
-      }
-    }
-    int const x_153 = a;
-    float const x_156 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    m[1][clamp(x_153, 0, 3)] = x_156;
-    int const x_159 = x_15.one;
-    int const x_161 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_159 == x_161)) {
-      discard_fragment();
-    }
-    int const x_166 = x_15.one;
-    int const x_168 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_166 == x_168)) {
-      discard_fragment();
-    }
-    {
-      int const x_172 = a;
-      a = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
-    }
-  }
-  float const x_175 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  zero = x_175;
-  float const x_176 = f;
-  float const x_178 = x_7.x_GLF_uniform_float_values.arr[17].el;
-  if (!((x_176 == x_178))) {
-    float const x_183 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    zero = x_183;
-  }
-  float const x_184 = f;
-  float const x_185 = zero;
-  int const x_187 = x_12.x_GLF_uniform_int_values.arr[0].el;
-  float const x_189 = f;
-  *(tint_symbol_4) = float4(x_184, x_185, float(x_187), x_189);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_12, constant buf2& x_15, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_12, x_15, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]], constant buf2& x_15 [[buffer(2)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_12, x_15, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6308fc5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,312 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 212
-; Schema: 0
-               OpCapability Shader
-        %127 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "one"
-               OpName %x_15 "x_15"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %v "v"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %zero "zero"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_18 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_15 NonWritable
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 2
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-    %uint_18 = OpConstant %uint 18
-%_arr_float_uint_18 = OpTypeArray %float %uint_18
-       %buf1 = OpTypeStruct %_arr_float_uint_18
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf2 = OpTypeStruct %int
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_15 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %26 = OpTypeFunction %void
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %33 = OpConstantNull %mat4v4float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %38 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-     %int_11 = OpConstant %int 11
-     %int_12 = OpConstant %int 12
-     %int_13 = OpConstant %int 13
-     %int_14 = OpConstant %int 14
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-     %int_17 = OpConstant %int 17
-   %main_out = OpTypeStruct %v4float
-        %201 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %26
-         %29 = OpLabel
-          %m = OpVariable %_ptr_Function_mat4v4float Function %33
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %f = OpVariable %_ptr_Function_float Function %38
-          %a = OpVariable %_ptr_Function_int Function %9
-          %b = OpVariable %_ptr_Function_int Function %9
-       %zero = OpVariable %_ptr_Function_float Function %38
-               OpStore %x_GLF_global_loop_count %int_0
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %50 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %51 = OpLoad %float %50
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-         %54 = OpLoad %float %53
-         %56 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_4
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_5
-         %60 = OpLoad %float %59
-         %62 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_6
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_7
-         %66 = OpLoad %float %65
-         %68 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_8
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_9
-         %72 = OpLoad %float %71
-         %74 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_10
-         %75 = OpLoad %float %74
-         %77 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_11
-         %78 = OpLoad %float %77
-         %80 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_12
-         %81 = OpLoad %float %80
-         %83 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_13
-         %84 = OpLoad %float %83
-         %86 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_14
-         %87 = OpLoad %float %86
-         %89 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_15
-         %90 = OpLoad %float %89
-         %92 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_16
-         %93 = OpLoad %float %92
-         %94 = OpCompositeConstruct %v4float %48 %51 %54 %57
-         %95 = OpCompositeConstruct %v4float %60 %63 %66 %69
-         %96 = OpCompositeConstruct %v4float %72 %75 %78 %81
-         %97 = OpCompositeConstruct %v4float %84 %87 %90 %93
-         %98 = OpCompositeConstruct %mat4v4float %94 %95 %96 %97
-               OpStore %m %98
-         %99 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %100 = OpLoad %float %99
-        %101 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-        %102 = OpLoad %float %101
-        %103 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-        %104 = OpLoad %float %103
-        %105 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_4
-        %106 = OpLoad %float %105
-        %107 = OpCompositeConstruct %v4float %100 %102 %104 %106
-               OpStore %v %107
-        %108 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %109 = OpLoad %float %108
-               OpStore %f %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %112 = OpLoad %int %111
-               OpStore %a %112
-               OpBranch %113
-        %113 = OpLabel
-               OpLoopMerge %114 %115 None
-               OpBranch %116
-        %116 = OpLabel
-        %117 = OpLoad %int %x_GLF_global_loop_count
-        %118 = OpSLessThan %bool %117 %int_10
-               OpSelectionMerge %120 None
-               OpBranchConditional %118 %121 %122
-        %121 = OpLabel
-               OpBranch %120
-        %122 = OpLabel
-               OpBranch %114
-        %120 = OpLabel
-        %123 = OpLoad %int %x_GLF_global_loop_count
-        %124 = OpIAdd %int %123 %int_1
-               OpStore %x_GLF_global_loop_count %124
-        %125 = OpLoad %int %a
-        %126 = OpExtInst %int %127 SClamp %125 %int_0 %int_3
-        %128 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %129 = OpLoad %float %128
-        %130 = OpAccessChain %_ptr_Function_float %v %126
-        %131 = OpLoad %float %130
-        %132 = OpAccessChain %_ptr_Function_float %v %126
-        %133 = OpFAdd %float %131 %129
-               OpStore %132 %133
-        %134 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_2
-        %135 = OpLoad %int %134
-               OpStore %b %135
-               OpBranch %136
-        %136 = OpLabel
-               OpLoopMerge %137 %138 None
-               OpBranch %139
-        %139 = OpLabel
-        %140 = OpLoad %int %x_GLF_global_loop_count
-        %141 = OpSLessThan %bool %140 %int_10
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %144
-        %143 = OpLabel
-               OpBranch %142
-        %144 = OpLabel
-               OpBranch %137
-        %142 = OpLabel
-        %145 = OpLoad %int %x_GLF_global_loop_count
-        %146 = OpIAdd %int %145 %int_1
-               OpStore %x_GLF_global_loop_count %146
-        %147 = OpLoad %int %b
-        %148 = OpExtInst %int %127 SClamp %147 %int_0 %int_3
-        %149 = OpAccessChain %_ptr_Function_float %v %148
-        %150 = OpLoad %float %149
-        %151 = OpLoad %int %b
-        %152 = OpLoad %int %a
-        %153 = OpExtInst %int %127 SClamp %151 %int_0 %int_3
-        %154 = OpAccessChain %_ptr_Function_float %m %153 %152
-        %155 = OpLoad %float %154
-        %156 = OpLoad %float %f
-        %157 = OpFMul %float %150 %155
-        %158 = OpFAdd %float %156 %157
-               OpStore %f %158
-               OpBranch %138
-        %138 = OpLabel
-        %159 = OpLoad %int %b
-        %160 = OpISub %int %159 %int_1
-               OpStore %b %160
-               OpBranch %136
-        %137 = OpLabel
-        %161 = OpLoad %int %a
-        %162 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %163 = OpLoad %float %162
-        %164 = OpExtInst %int %127 SClamp %161 %int_0 %int_3
-        %165 = OpAccessChain %_ptr_Function_float %m %int_1 %164
-               OpStore %165 %163
-        %166 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0
-        %167 = OpLoad %int %166
-        %168 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %169 = OpLoad %int %168
-        %170 = OpIEqual %bool %167 %169
-               OpSelectionMerge %171 None
-               OpBranchConditional %170 %172 %171
-        %172 = OpLabel
-               OpKill
-        %171 = OpLabel
-        %173 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0
-        %174 = OpLoad %int %173
-        %175 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %176 = OpLoad %int %175
-        %177 = OpIEqual %bool %174 %176
-               OpSelectionMerge %178 None
-               OpBranchConditional %177 %179 %178
-        %179 = OpLabel
-               OpKill
-        %178 = OpLabel
-               OpBranch %115
-        %115 = OpLabel
-        %180 = OpLoad %int %a
-        %181 = OpIAdd %int %180 %int_1
-               OpStore %a %181
-               OpBranch %113
-        %114 = OpLabel
-        %182 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-        %183 = OpLoad %float %182
-               OpStore %zero %183
-        %184 = OpLoad %float %f
-        %186 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_17
-        %187 = OpLoad %float %186
-        %189 = OpFOrdEqual %bool %184 %187
-        %188 = OpLogicalNot %bool %189
-               OpSelectionMerge %190 None
-               OpBranchConditional %188 %191 %190
-        %191 = OpLabel
-        %192 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %193 = OpLoad %float %192
-               OpStore %zero %193
-               OpBranch %190
-        %190 = OpLabel
-        %194 = OpLoad %float %f
-        %195 = OpLoad %float %zero
-        %196 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-        %197 = OpLoad %int %196
-        %198 = OpLoad %float %f
-        %199 = OpConvertSToF %float %197
-        %200 = OpCompositeConstruct %v4float %194 %195 %199 %198
-               OpStore %x_GLF_color %200
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %201
-        %204 = OpLabel
-        %205 = OpFunctionCall %void %main_1
-        %206 = OpLoad %v4float %x_GLF_color
-        %207 = OpCompositeConstruct %main_out %206
-               OpReturnValue %207
-               OpFunctionEnd
-       %main = OpFunction %void None %26
-        %209 = OpLabel
-        %210 = OpFunctionCall %main_out %main_inner
-        %211 = OpCompositeExtract %v4float %210 0
-               OpStore %x_GLF_color_1_1 %211
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 40aaeca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-float-accumulate-matrix/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,144 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 18>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[block]]
-struct buf2 {
-  one : i32;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_15 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat4x4<f32>;
-  var v : vec4<f32>;
-  var f : f32;
-  var a : i32;
-  var b : i32;
-  var zero : f32;
-  x_GLF_global_loop_count = 0;
-  let x_62 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_64 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_66 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_68 : f32 = x_7.x_GLF_uniform_float_values[4];
-  let x_70 : f32 = x_7.x_GLF_uniform_float_values[5];
-  let x_72 : f32 = x_7.x_GLF_uniform_float_values[6];
-  let x_74 : f32 = x_7.x_GLF_uniform_float_values[7];
-  let x_76 : f32 = x_7.x_GLF_uniform_float_values[8];
-  let x_78 : f32 = x_7.x_GLF_uniform_float_values[9];
-  let x_80 : f32 = x_7.x_GLF_uniform_float_values[10];
-  let x_82 : f32 = x_7.x_GLF_uniform_float_values[11];
-  let x_84 : f32 = x_7.x_GLF_uniform_float_values[12];
-  let x_86 : f32 = x_7.x_GLF_uniform_float_values[13];
-  let x_88 : f32 = x_7.x_GLF_uniform_float_values[14];
-  let x_90 : f32 = x_7.x_GLF_uniform_float_values[15];
-  let x_92 : f32 = x_7.x_GLF_uniform_float_values[16];
-  m = mat4x4<f32>(vec4<f32>(x_62, x_64, x_66, x_68), vec4<f32>(x_70, x_72, x_74, x_76), vec4<f32>(x_78, x_80, x_82, x_84), vec4<f32>(x_86, x_88, x_90, x_92));
-  let x_99 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_101 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_103 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_105 : f32 = x_7.x_GLF_uniform_float_values[4];
-  v = vec4<f32>(x_99, x_101, x_103, x_105);
-  let x_108 : f32 = x_7.x_GLF_uniform_float_values[1];
-  f = x_108;
-  let x_110 : i32 = x_12.x_GLF_uniform_int_values[0];
-  a = x_110;
-  loop {
-    let x_115 : i32 = x_GLF_global_loop_count;
-    if ((x_115 < 10)) {
-    } else {
-      break;
-    }
-    let x_118 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_118 + 1);
-    let x_120 : i32 = a;
-    let x_121 : i32 = clamp(x_120, 0, 3);
-    let x_123 : f32 = x_7.x_GLF_uniform_float_values[1];
-    let x_125 : f32 = v[x_121];
-    v[x_121] = (x_125 + x_123);
-    let x_129 : i32 = x_12.x_GLF_uniform_int_values[2];
-    b = x_129;
-    loop {
-      let x_134 : i32 = x_GLF_global_loop_count;
-      if ((x_134 < 10)) {
-      } else {
-        break;
-      }
-      let x_137 : i32 = x_GLF_global_loop_count;
-      x_GLF_global_loop_count = (x_137 + 1);
-      let x_139 : i32 = b;
-      let x_142 : f32 = v[clamp(x_139, 0, 3)];
-      let x_143 : i32 = b;
-      let x_145 : i32 = a;
-      let x_147 : f32 = m[clamp(x_143, 0, 3)][x_145];
-      let x_149 : f32 = f;
-      f = (x_149 + (x_142 * x_147));
-
-      continuing {
-        let x_151 : i32 = b;
-        b = (x_151 - 1);
-      }
-    }
-    let x_153 : i32 = a;
-    let x_156 : f32 = x_7.x_GLF_uniform_float_values[1];
-    m[1][clamp(x_153, 0, 3)] = x_156;
-    let x_159 : i32 = x_15.one;
-    let x_161 : i32 = x_12.x_GLF_uniform_int_values[0];
-    if ((x_159 == x_161)) {
-      discard;
-    }
-    let x_166 : i32 = x_15.one;
-    let x_168 : i32 = x_12.x_GLF_uniform_int_values[1];
-    if ((x_166 == x_168)) {
-      discard;
-    }
-
-    continuing {
-      let x_172 : i32 = a;
-      a = (x_172 + 1);
-    }
-  }
-  let x_175 : f32 = x_7.x_GLF_uniform_float_values[0];
-  zero = x_175;
-  let x_176 : f32 = f;
-  let x_178 : f32 = x_7.x_GLF_uniform_float_values[17];
-  if (!((x_176 == x_178))) {
-    let x_183 : f32 = x_7.x_GLF_uniform_float_values[1];
-    zero = x_183;
-  }
-  let x_184 : f32 = f;
-  let x_185 : f32 = zero;
-  let x_187 : i32 = x_12.x_GLF_uniform_int_values[0];
-  let x_189 : f32 = f;
-  x_GLF_color = vec4<f32>(x_184, x_185, f32(x_187), x_189);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 02e93be..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,75 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  while (true) {
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_78 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    return x_78;
-  }
-  const int x_80 = asint(x_7[2].x);
-  return x_80;
-}
-
-void main_1() {
-  int a = 0;
-  x_GLF_global_loop_count = 0;
-  while (true) {
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    if (false) {
-      return;
-    }
-    {
-      if ((true & (x_GLF_global_loop_count < 100))) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_42 = func_();
-  a = x_42;
-  const int x_43 = a;
-  const int x_45 = asint(x_7[2].x);
-  if ((x_43 == x_45)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_51 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_54 = asint(x_7[1].x);
-    const int x_57 = asint(x_7[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_51), float(x_54), float(x_57), float(x_60));
-  } else {
-    const int x_64 = asint(x_7[1].x);
-    const float x_65 = float(x_64);
-    x_GLF_color = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1b0dd05..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_(constant buf0& x_7, thread int* const tint_symbol_3) {
-  while (true) {
-    int const x_72 = *(tint_symbol_3);
-    if ((x_72 < 100)) {
-    } else {
-      break;
-    }
-    int const x_75 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-    int const x_78 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    return x_78;
-  }
-  int const x_80 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  return x_80;
-}
-
-void main_1(constant buf0& x_7, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int a = 0;
-  *(tint_symbol_4) = 0;
-  while (true) {
-    int const x_35 = *(tint_symbol_4);
-    *(tint_symbol_4) = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-    if (false) {
-      return;
-    }
-    {
-      int const x_39 = *(tint_symbol_4);
-      if ((true & (x_39 < 100))) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_42 = func_(x_7, tint_symbol_4);
-  a = x_42;
-  int const x_43 = a;
-  int const x_45 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_43 == x_45)) {
-    int const x_51 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_57 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_60 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_51), float(x_54), float(x_57), float(x_60));
-  } else {
-    int const x_64 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_65 = float(x_64);
-    *(tint_symbol_5) = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread int* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  main_1(x_7, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread int tint_symbol_8 = 0;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3a19101..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,163 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 98
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %18 = OpTypeFunction %int
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %43 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %87 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %18
-         %20 = OpLabel
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %x_GLF_global_loop_count
-         %27 = OpSLessThan %bool %25 %int_100
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpBranch %29
-         %31 = OpLabel
-               OpBranch %22
-         %29 = OpLabel
-         %32 = OpLoad %int %x_GLF_global_loop_count
-         %34 = OpIAdd %int %32 %int_1
-               OpStore %x_GLF_global_loop_count %34
-         %38 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %39 = OpLoad %int %38
-               OpReturnValue %39
-         %23 = OpLabel
-               OpBranch %21
-         %22 = OpLabel
-         %41 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %42 = OpLoad %int %41
-               OpReturnValue %42
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %43
-         %46 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpLoad %int %x_GLF_global_loop_count
-         %54 = OpIAdd %int %53 %int_1
-               OpStore %x_GLF_global_loop_count %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %false %57 %56
-         %57 = OpLabel
-               OpReturn
-         %56 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-         %58 = OpLoad %int %x_GLF_global_loop_count
-         %60 = OpSLessThan %bool %58 %int_100
-         %61 = OpLogicalAnd %bool %true %60
-               OpBranchConditional %61 %49 %50
-         %50 = OpLabel
-         %62 = OpFunctionCall %int %func_
-               OpStore %a %62
-         %63 = OpLoad %int %a
-         %64 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %65 = OpLoad %int %64
-         %66 = OpIEqual %bool %63 %65
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %69
-         %68 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %71
-         %79 = OpConvertSToF %float %73
-         %80 = OpConvertSToF %float %75
-         %81 = OpConvertSToF %float %77
-         %82 = OpCompositeConstruct %v4float %78 %79 %80 %81
-               OpStore %x_GLF_color %82
-               OpBranch %67
-         %69 = OpLabel
-         %83 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpConvertSToF %float %84
-         %86 = OpCompositeConstruct %v4float %85 %85 %85 %85
-               OpStore %x_GLF_color %86
-               OpBranch %67
-         %67 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %87
-         %90 = OpLabel
-         %91 = OpFunctionCall %void %main_1
-         %92 = OpLoad %v4float %x_GLF_color
-         %93 = OpCompositeConstruct %main_out %92
-               OpReturnValue %93
-               OpFunctionEnd
-       %main = OpFunction %void None %43
-         %95 = OpLabel
-         %96 = OpFunctionCall %main_out %main_inner
-         %97 = OpCompositeExtract %v4float %96 0
-               OpStore %x_GLF_color_1_1 %97
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 15ffb7c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  loop {
-    let x_72 : i32 = x_GLF_global_loop_count;
-    if ((x_72 < 100)) {
-    } else {
-      break;
-    }
-    let x_75 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_75 + 1);
-    let x_78 : i32 = x_7.x_GLF_uniform_int_values[0];
-    return x_78;
-  }
-  let x_80 : i32 = x_7.x_GLF_uniform_int_values[2];
-  return x_80;
-}
-
-fn main_1() {
-  var a : i32;
-  x_GLF_global_loop_count = 0;
-  loop {
-    let x_35 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_35 + 1);
-    if (false) {
-      return;
-    }
-
-    continuing {
-      let x_39 : i32 = x_GLF_global_loop_count;
-      if ((true & (x_39 < 100))) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_42 : i32 = func_();
-  a = x_42;
-  let x_43 : i32 = a;
-  let x_45 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if ((x_43 == x_45)) {
-    let x_51 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_57 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_60 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_51), f32(x_54), f32(x_57), f32(x_60));
-  } else {
-    let x_64 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_65 : f32 = f32(x_64);
-    x_GLF_color = vec4<f32>(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6400032..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  while (true) {
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_78 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    return x_78;
-  }
-  const int x_80 = asint(x_7[2].x);
-  return x_80;
-}
-
-void main_1() {
-  int a = 0;
-  x_GLF_global_loop_count = 0;
-  while (true) {
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    if (false) {
-      return;
-    }
-    {
-      bool tint_tmp = true;
-      if (tint_tmp) {
-        tint_tmp = (x_GLF_global_loop_count < 100);
-      }
-      if ((tint_tmp)) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_42 = func_();
-  a = x_42;
-  const int x_43 = a;
-  const int x_45 = asint(x_7[2].x);
-  if ((x_43 == x_45)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_51 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_54 = asint(x_7[1].x);
-    const int x_57 = asint(x_7[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_51), float(x_54), float(x_57), float(x_60));
-  } else {
-    const int x_64 = asint(x_7[1].x);
-    const float x_65 = float(x_64);
-    x_GLF_color = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.msl
deleted file mode 100644
index 20d17ae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_(constant buf0& x_7, thread int* const tint_symbol_3) {
-  while (true) {
-    int const x_72 = *(tint_symbol_3);
-    if ((x_72 < 100)) {
-    } else {
-      break;
-    }
-    int const x_75 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-    int const x_78 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    return x_78;
-  }
-  int const x_80 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  return x_80;
-}
-
-void main_1(constant buf0& x_7, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int a = 0;
-  *(tint_symbol_4) = 0;
-  while (true) {
-    int const x_35 = *(tint_symbol_4);
-    *(tint_symbol_4) = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-    if (false) {
-      return;
-    }
-    {
-      int const x_39 = *(tint_symbol_4);
-      if ((true && (x_39 < 100))) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_42 = func_(x_7, tint_symbol_4);
-  a = x_42;
-  int const x_43 = a;
-  int const x_45 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_43 == x_45)) {
-    int const x_51 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_57 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_60 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_51), float(x_54), float(x_57), float(x_60));
-  } else {
-    int const x_64 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_65 = float(x_64);
-    *(tint_symbol_5) = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread int* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  main_1(x_7, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread int tint_symbol_8 = 0;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 534cc39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,168 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 100
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %18 = OpTypeFunction %int
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %43 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %89 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %18
-         %20 = OpLabel
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %x_GLF_global_loop_count
-         %27 = OpSLessThan %bool %25 %int_100
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpBranch %29
-         %31 = OpLabel
-               OpBranch %22
-         %29 = OpLabel
-         %32 = OpLoad %int %x_GLF_global_loop_count
-         %34 = OpIAdd %int %32 %int_1
-               OpStore %x_GLF_global_loop_count %34
-         %38 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %39 = OpLoad %int %38
-               OpReturnValue %39
-         %23 = OpLabel
-               OpBranch %21
-         %22 = OpLabel
-         %41 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %42 = OpLoad %int %41
-               OpReturnValue %42
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %43
-         %46 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpLoad %int %x_GLF_global_loop_count
-         %54 = OpIAdd %int %53 %int_1
-               OpStore %x_GLF_global_loop_count %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %false %57 %56
-         %57 = OpLabel
-               OpReturn
-         %56 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-         %58 = OpLoad %int %x_GLF_global_loop_count
-               OpSelectionMerge %60 None
-               OpBranchConditional %true %61 %60
-         %61 = OpLabel
-         %62 = OpSLessThan %bool %58 %int_100
-               OpBranch %60
-         %60 = OpLabel
-         %63 = OpPhi %bool %true %51 %62 %61
-               OpBranchConditional %63 %49 %50
-         %50 = OpLabel
-         %64 = OpFunctionCall %int %func_
-               OpStore %a %64
-         %65 = OpLoad %int %a
-         %66 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %67 = OpLoad %int %66
-         %68 = OpIEqual %bool %65 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %73
-         %81 = OpConvertSToF %float %75
-         %82 = OpConvertSToF %float %77
-         %83 = OpConvertSToF %float %79
-         %84 = OpCompositeConstruct %v4float %80 %81 %82 %83
-               OpStore %x_GLF_color %84
-               OpBranch %69
-         %71 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %86
-         %88 = OpCompositeConstruct %v4float %87 %87 %87 %87
-               OpStore %x_GLF_color %88
-               OpBranch %69
-         %69 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %89
-         %92 = OpLabel
-         %93 = OpFunctionCall %void %main_1
-         %94 = OpLoad %v4float %x_GLF_color
-         %95 = OpCompositeConstruct %main_out %94
-               OpReturnValue %95
-               OpFunctionEnd
-       %main = OpFunction %void None %43
-         %97 = OpLabel
-         %98 = OpFunctionCall %main_out %main_inner
-         %99 = OpCompositeExtract %v4float %98 0
-               OpStore %x_GLF_color_1_1 %99
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 96fb7f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-main-function-call/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  loop {
-    let x_72 : i32 = x_GLF_global_loop_count;
-    if ((x_72 < 100)) {
-    } else {
-      break;
-    }
-    let x_75 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_75 + 1);
-    let x_78 : i32 = x_7.x_GLF_uniform_int_values[0];
-    return x_78;
-  }
-  let x_80 : i32 = x_7.x_GLF_uniform_int_values[2];
-  return x_80;
-}
-
-fn main_1() {
-  var a : i32;
-  x_GLF_global_loop_count = 0;
-  loop {
-    let x_35 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_35 + 1);
-    if (false) {
-      return;
-    }
-
-    continuing {
-      let x_39 : i32 = x_GLF_global_loop_count;
-      if ((true && (x_39 < 100))) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_42 : i32 = func_();
-  a = x_42;
-  let x_43 : i32 = a;
-  let x_45 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if ((x_43 == x_45)) {
-    let x_51 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_57 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_60 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_51), f32(x_54), f32(x_57), f32(x_60));
-  } else {
-    let x_64 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_65 : f32 = f32(x_64);
-    x_GLF_color = vec4<f32>(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.hlsl
deleted file mode 100644
index 40a6b45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,81 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_23 = 0;
-  int x_27 = 0;
-  int x_37 = 0;
-  int x_23_phi = 0;
-  int x_45_phi = 0;
-  x_23_phi = 0;
-  while (true) {
-    int x_24 = 0;
-    x_23 = x_23_phi;
-    x_27 = asint(x_5[1].x);
-    if ((x_23 < (100 - asint(x_27)))) {
-    } else {
-      break;
-    }
-    {
-      x_24 = asint((x_23 + asint(1)));
-      x_23_phi = x_24;
-    }
-  }
-  int x_37_phi = 0;
-  int x_40_phi = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_32 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  x_45_phi = 1;
-  if ((x_32 == 0)) {
-    x_37_phi = 1;
-    x_40_phi = x_23;
-    while (true) {
-      int x_41 = 0;
-      int x_38 = 0;
-      x_37 = x_37_phi;
-      const int x_40 = x_40_phi;
-      if ((x_40 < 100)) {
-      } else {
-        break;
-      }
-      {
-        x_41 = (x_40 + 1);
-        x_38 = asint((x_37 * asint((1 - asint(x_37)))));
-        x_37_phi = x_38;
-        x_40_phi = x_41;
-      }
-    }
-    x_45_phi = x_37;
-  }
-  if ((x_45_phi == x_32)) {
-    const float x_50 = float(x_27);
-    const float x_51 = float(x_32);
-    x_GLF_color = float4(x_50, x_51, x_51, x_50);
-  } else {
-    const float x_53 = float(x_32);
-    x_GLF_color = float4(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.msl
deleted file mode 100644
index 657e844..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.msl
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int x_23 = 0;
-  int x_27 = 0;
-  int x_37 = 0;
-  int x_23_phi = 0;
-  int x_45_phi = 0;
-  x_23_phi = 0;
-  while (true) {
-    int x_24 = 0;
-    x_23 = x_23_phi;
-    x_27 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_23 < as_type<int>((as_type<uint>(100) - as_type<uint>(as_type<int>(x_27)))))) {
-    } else {
-      break;
-    }
-    {
-      x_24 = as_type<int>(as_type<int>((as_type<uint>(x_23) + as_type<uint>(as_type<int>(1)))));
-      x_23_phi = x_24;
-    }
-  }
-  int x_37_phi = 0;
-  int x_40_phi = 0;
-  int const x_32 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  x_45_phi = 1;
-  if ((x_32 == 0)) {
-    x_37_phi = 1;
-    x_40_phi = x_23;
-    while (true) {
-      int x_41 = 0;
-      int x_38 = 0;
-      x_37 = x_37_phi;
-      int const x_40 = x_40_phi;
-      if ((x_40 < 100)) {
-      } else {
-        break;
-      }
-      {
-        x_41 = as_type<int>((as_type<uint>(x_40) + as_type<uint>(1)));
-        x_38 = as_type<int>(as_type<int>((as_type<uint>(x_37) * as_type<uint>(as_type<int>(as_type<int>((as_type<uint>(1) - as_type<uint>(as_type<int>(x_37)))))))));
-        x_37_phi = x_38;
-        x_40_phi = x_41;
-      }
-    }
-    x_45_phi = x_37;
-  }
-  int const x_45 = x_45_phi;
-  if ((x_45 == x_32)) {
-    float const x_50 = float(x_27);
-    float const x_51 = float(x_32);
-    *(tint_symbol_3) = float4(x_50, x_51, x_51, x_50);
-  } else {
-    float const x_53 = float(x_32);
-    *(tint_symbol_3) = float4(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.spvasm
deleted file mode 100644
index 1a4e770..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,190 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 106
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_23 "x_23"
-               OpName %x_27 "x_27"
-               OpName %x_37 "x_37"
-               OpName %x_23_phi "x_23_phi"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_24 "x_24"
-               OpName %x_37_phi "x_37_phi"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_41 "x_41"
-               OpName %x_38 "x_38"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %95 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_23 = OpVariable %_ptr_Function_int Function %21
-       %x_27 = OpVariable %_ptr_Function_int Function %21
-       %x_37 = OpVariable %_ptr_Function_int Function %21
-   %x_23_phi = OpVariable %_ptr_Function_int Function %21
-   %x_45_phi = OpVariable %_ptr_Function_int Function %21
-       %x_24 = OpVariable %_ptr_Function_int Function %21
-   %x_37_phi = OpVariable %_ptr_Function_int Function %21
-   %x_40_phi = OpVariable %_ptr_Function_int Function %21
-       %x_41 = OpVariable %_ptr_Function_int Function %21
-       %x_38 = OpVariable %_ptr_Function_int Function %21
-               OpStore %x_23_phi %int_0
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %32 = OpLoad %int %x_23_phi
-               OpStore %x_23 %32
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %37 = OpLoad %int %36
-               OpStore %x_27 %37
-         %38 = OpLoad %int %x_23
-         %41 = OpLoad %int %x_27
-         %40 = OpCopyObject %int %41
-         %42 = OpISub %int %int_100 %40
-         %43 = OpSLessThan %bool %38 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %28
-         %45 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-         %49 = OpLoad %int %x_23
-         %50 = OpCopyObject %int %int_1
-         %51 = OpIAdd %int %49 %50
-         %48 = OpCopyObject %int %51
-               OpStore %x_24 %48
-         %52 = OpLoad %int %x_24
-               OpStore %x_23_phi %52
-               OpBranch %27
-         %28 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %56 = OpLoad %int %55
-               OpStore %x_45_phi %int_1
-         %57 = OpIEqual %bool %56 %int_0
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpStore %x_37_phi %int_1
-         %60 = OpLoad %int %x_23
-               OpStore %x_40_phi %60
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %67 = OpLoad %int %x_37_phi
-               OpStore %x_37 %67
-         %68 = OpLoad %int %x_40_phi
-         %69 = OpSLessThan %bool %68 %int_100
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %62
-         %70 = OpLabel
-               OpBranch %63
-         %63 = OpLabel
-         %73 = OpIAdd %int %68 %int_1
-               OpStore %x_41 %73
-         %75 = OpLoad %int %x_37
-         %78 = OpLoad %int %x_37
-         %77 = OpCopyObject %int %78
-         %79 = OpISub %int %int_1 %77
-         %76 = OpCopyObject %int %79
-         %80 = OpIMul %int %75 %76
-         %74 = OpCopyObject %int %80
-               OpStore %x_38 %74
-         %81 = OpLoad %int %x_38
-               OpStore %x_37_phi %81
-         %82 = OpLoad %int %x_41
-               OpStore %x_40_phi %82
-               OpBranch %61
-         %62 = OpLabel
-         %83 = OpLoad %int %x_37
-               OpStore %x_45_phi %83
-               OpBranch %58
-         %58 = OpLabel
-         %84 = OpLoad %int %x_45_phi
-         %85 = OpIEqual %bool %84 %56
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-         %90 = OpLoad %int %x_27
-         %89 = OpConvertSToF %float %90
-         %91 = OpConvertSToF %float %56
-         %92 = OpCompositeConstruct %v4float %89 %91 %91 %89
-               OpStore %x_GLF_color %92
-               OpBranch %86
-         %88 = OpLabel
-         %93 = OpConvertSToF %float %56
-         %94 = OpCompositeConstruct %v4float %93 %93 %93 %93
-               OpStore %x_GLF_color %94
-               OpBranch %86
-         %86 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %95
-         %98 = OpLabel
-         %99 = OpFunctionCall %void %main_1
-        %100 = OpLoad %v4float %x_GLF_color
-        %101 = OpCompositeConstruct %main_out %100
-               OpReturnValue %101
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %103 = OpLabel
-        %104 = OpFunctionCall %main_out %main_inner
-        %105 = OpCompositeExtract %v4float %104 0
-               OpStore %x_GLF_color_1_1 %105
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.wgsl
deleted file mode 100644
index 038864a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,80 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_23 : i32;
-  var x_27 : i32;
-  var x_37 : i32;
-  var x_23_phi : i32;
-  var x_45_phi : i32;
-  x_23_phi = 0;
-  loop {
-    var x_24 : i32;
-    x_23 = x_23_phi;
-    x_27 = x_5.x_GLF_uniform_int_values[1];
-    if ((x_23 < (100 - bitcast<i32>(x_27)))) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_24 = bitcast<i32>((x_23 + bitcast<i32>(1)));
-      x_23_phi = x_24;
-    }
-  }
-  var x_37_phi : i32;
-  var x_40_phi : i32;
-  let x_32 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_45_phi = 1;
-  if ((x_32 == 0)) {
-    x_37_phi = 1;
-    x_40_phi = x_23;
-    loop {
-      var x_41 : i32;
-      var x_38 : i32;
-      x_37 = x_37_phi;
-      let x_40 : i32 = x_40_phi;
-      if ((x_40 < 100)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        x_41 = (x_40 + 1);
-        x_38 = bitcast<i32>((x_37 * bitcast<i32>((1 - bitcast<i32>(x_37)))));
-        x_37_phi = x_38;
-        x_40_phi = x_41;
-      }
-    }
-    x_45_phi = x_37;
-  }
-  let x_45 : i32 = x_45_phi;
-  if ((x_45 == x_32)) {
-    let x_50 : f32 = f32(x_27);
-    let x_51 : f32 = f32(x_32);
-    x_GLF_color = vec4<f32>(x_50, x_51, x_51, x_50);
-  } else {
-    let x_53 : f32 = f32(x_32);
-    x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.hlsl
deleted file mode 100644
index 40a6b45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,81 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_23 = 0;
-  int x_27 = 0;
-  int x_37 = 0;
-  int x_23_phi = 0;
-  int x_45_phi = 0;
-  x_23_phi = 0;
-  while (true) {
-    int x_24 = 0;
-    x_23 = x_23_phi;
-    x_27 = asint(x_5[1].x);
-    if ((x_23 < (100 - asint(x_27)))) {
-    } else {
-      break;
-    }
-    {
-      x_24 = asint((x_23 + asint(1)));
-      x_23_phi = x_24;
-    }
-  }
-  int x_37_phi = 0;
-  int x_40_phi = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_32 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  x_45_phi = 1;
-  if ((x_32 == 0)) {
-    x_37_phi = 1;
-    x_40_phi = x_23;
-    while (true) {
-      int x_41 = 0;
-      int x_38 = 0;
-      x_37 = x_37_phi;
-      const int x_40 = x_40_phi;
-      if ((x_40 < 100)) {
-      } else {
-        break;
-      }
-      {
-        x_41 = (x_40 + 1);
-        x_38 = asint((x_37 * asint((1 - asint(x_37)))));
-        x_37_phi = x_38;
-        x_40_phi = x_41;
-      }
-    }
-    x_45_phi = x_37;
-  }
-  if ((x_45_phi == x_32)) {
-    const float x_50 = float(x_27);
-    const float x_51 = float(x_32);
-    x_GLF_color = float4(x_50, x_51, x_51, x_50);
-  } else {
-    const float x_53 = float(x_32);
-    x_GLF_color = float4(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.msl
deleted file mode 100644
index 657e844..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.msl
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int x_23 = 0;
-  int x_27 = 0;
-  int x_37 = 0;
-  int x_23_phi = 0;
-  int x_45_phi = 0;
-  x_23_phi = 0;
-  while (true) {
-    int x_24 = 0;
-    x_23 = x_23_phi;
-    x_27 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_23 < as_type<int>((as_type<uint>(100) - as_type<uint>(as_type<int>(x_27)))))) {
-    } else {
-      break;
-    }
-    {
-      x_24 = as_type<int>(as_type<int>((as_type<uint>(x_23) + as_type<uint>(as_type<int>(1)))));
-      x_23_phi = x_24;
-    }
-  }
-  int x_37_phi = 0;
-  int x_40_phi = 0;
-  int const x_32 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  x_45_phi = 1;
-  if ((x_32 == 0)) {
-    x_37_phi = 1;
-    x_40_phi = x_23;
-    while (true) {
-      int x_41 = 0;
-      int x_38 = 0;
-      x_37 = x_37_phi;
-      int const x_40 = x_40_phi;
-      if ((x_40 < 100)) {
-      } else {
-        break;
-      }
-      {
-        x_41 = as_type<int>((as_type<uint>(x_40) + as_type<uint>(1)));
-        x_38 = as_type<int>(as_type<int>((as_type<uint>(x_37) * as_type<uint>(as_type<int>(as_type<int>((as_type<uint>(1) - as_type<uint>(as_type<int>(x_37)))))))));
-        x_37_phi = x_38;
-        x_40_phi = x_41;
-      }
-    }
-    x_45_phi = x_37;
-  }
-  int const x_45 = x_45_phi;
-  if ((x_45 == x_32)) {
-    float const x_50 = float(x_27);
-    float const x_51 = float(x_32);
-    *(tint_symbol_3) = float4(x_50, x_51, x_51, x_50);
-  } else {
-    float const x_53 = float(x_32);
-    *(tint_symbol_3) = float4(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.spvasm
deleted file mode 100644
index 1a4e770..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,190 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 106
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_23 "x_23"
-               OpName %x_27 "x_27"
-               OpName %x_37 "x_37"
-               OpName %x_23_phi "x_23_phi"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_24 "x_24"
-               OpName %x_37_phi "x_37_phi"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_41 "x_41"
-               OpName %x_38 "x_38"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %95 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_23 = OpVariable %_ptr_Function_int Function %21
-       %x_27 = OpVariable %_ptr_Function_int Function %21
-       %x_37 = OpVariable %_ptr_Function_int Function %21
-   %x_23_phi = OpVariable %_ptr_Function_int Function %21
-   %x_45_phi = OpVariable %_ptr_Function_int Function %21
-       %x_24 = OpVariable %_ptr_Function_int Function %21
-   %x_37_phi = OpVariable %_ptr_Function_int Function %21
-   %x_40_phi = OpVariable %_ptr_Function_int Function %21
-       %x_41 = OpVariable %_ptr_Function_int Function %21
-       %x_38 = OpVariable %_ptr_Function_int Function %21
-               OpStore %x_23_phi %int_0
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %32 = OpLoad %int %x_23_phi
-               OpStore %x_23 %32
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %37 = OpLoad %int %36
-               OpStore %x_27 %37
-         %38 = OpLoad %int %x_23
-         %41 = OpLoad %int %x_27
-         %40 = OpCopyObject %int %41
-         %42 = OpISub %int %int_100 %40
-         %43 = OpSLessThan %bool %38 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %28
-         %45 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-         %49 = OpLoad %int %x_23
-         %50 = OpCopyObject %int %int_1
-         %51 = OpIAdd %int %49 %50
-         %48 = OpCopyObject %int %51
-               OpStore %x_24 %48
-         %52 = OpLoad %int %x_24
-               OpStore %x_23_phi %52
-               OpBranch %27
-         %28 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %56 = OpLoad %int %55
-               OpStore %x_45_phi %int_1
-         %57 = OpIEqual %bool %56 %int_0
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpStore %x_37_phi %int_1
-         %60 = OpLoad %int %x_23
-               OpStore %x_40_phi %60
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %67 = OpLoad %int %x_37_phi
-               OpStore %x_37 %67
-         %68 = OpLoad %int %x_40_phi
-         %69 = OpSLessThan %bool %68 %int_100
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %62
-         %70 = OpLabel
-               OpBranch %63
-         %63 = OpLabel
-         %73 = OpIAdd %int %68 %int_1
-               OpStore %x_41 %73
-         %75 = OpLoad %int %x_37
-         %78 = OpLoad %int %x_37
-         %77 = OpCopyObject %int %78
-         %79 = OpISub %int %int_1 %77
-         %76 = OpCopyObject %int %79
-         %80 = OpIMul %int %75 %76
-         %74 = OpCopyObject %int %80
-               OpStore %x_38 %74
-         %81 = OpLoad %int %x_38
-               OpStore %x_37_phi %81
-         %82 = OpLoad %int %x_41
-               OpStore %x_40_phi %82
-               OpBranch %61
-         %62 = OpLabel
-         %83 = OpLoad %int %x_37
-               OpStore %x_45_phi %83
-               OpBranch %58
-         %58 = OpLabel
-         %84 = OpLoad %int %x_45_phi
-         %85 = OpIEqual %bool %84 %56
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-         %90 = OpLoad %int %x_27
-         %89 = OpConvertSToF %float %90
-         %91 = OpConvertSToF %float %56
-         %92 = OpCompositeConstruct %v4float %89 %91 %91 %89
-               OpStore %x_GLF_color %92
-               OpBranch %86
-         %88 = OpLabel
-         %93 = OpConvertSToF %float %56
-         %94 = OpCompositeConstruct %v4float %93 %93 %93 %93
-               OpStore %x_GLF_color %94
-               OpBranch %86
-         %86 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %95
-         %98 = OpLabel
-         %99 = OpFunctionCall %void %main_1
-        %100 = OpLoad %v4float %x_GLF_color
-        %101 = OpCompositeConstruct %main_out %100
-               OpReturnValue %101
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %103 = OpLabel
-        %104 = OpFunctionCall %main_out %main_inner
-        %105 = OpCompositeExtract %v4float %104 0
-               OpStore %x_GLF_color_1_1 %105
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.wgsl
deleted file mode 100644
index 038864a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-multiply-one-minus/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,80 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_23 : i32;
-  var x_27 : i32;
-  var x_37 : i32;
-  var x_23_phi : i32;
-  var x_45_phi : i32;
-  x_23_phi = 0;
-  loop {
-    var x_24 : i32;
-    x_23 = x_23_phi;
-    x_27 = x_5.x_GLF_uniform_int_values[1];
-    if ((x_23 < (100 - bitcast<i32>(x_27)))) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_24 = bitcast<i32>((x_23 + bitcast<i32>(1)));
-      x_23_phi = x_24;
-    }
-  }
-  var x_37_phi : i32;
-  var x_40_phi : i32;
-  let x_32 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_45_phi = 1;
-  if ((x_32 == 0)) {
-    x_37_phi = 1;
-    x_40_phi = x_23;
-    loop {
-      var x_41 : i32;
-      var x_38 : i32;
-      x_37 = x_37_phi;
-      let x_40 : i32 = x_40_phi;
-      if ((x_40 < 100)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        x_41 = (x_40 + 1);
-        x_38 = bitcast<i32>((x_37 * bitcast<i32>((1 - bitcast<i32>(x_37)))));
-        x_37_phi = x_38;
-        x_40_phi = x_41;
-      }
-    }
-    x_45_phi = x_37;
-  }
-  let x_45 : i32 = x_45_phi;
-  if ((x_45 == x_32)) {
-    let x_50 : f32 = f32(x_27);
-    let x_51 : f32 = f32(x_32);
-    x_GLF_color = vec4<f32>(x_50, x_51, x_51, x_50);
-  } else {
-    let x_53 : f32 = f32(x_32);
-    x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index cb25c1f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-
-void main_1() {
-  x_GLF_global_loop_count = 0;
-  while (true) {
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    if (((x_GLF_global_loop_count * x_GLF_global_loop_count) > 10)) {
-      break;
-    }
-  }
-  if ((x_GLF_global_loop_count == 4)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const int x_50 = asint(x_6[1].x);
-    const int x_53 = asint(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    const int x_60 = asint(x_6[1].x);
-    const float x_61 = float(x_60);
-    x_GLF_color = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.msl
deleted file mode 100644
index 29a482d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = 0;
-  while (true) {
-    int const x_30 = *(tint_symbol_3);
-    if ((x_30 < 100)) {
-    } else {
-      break;
-    }
-    int const x_33 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
-    int const x_35 = *(tint_symbol_3);
-    int const x_36 = *(tint_symbol_3);
-    if ((as_type<int>((as_type<uint>(x_35) * as_type<uint>(x_36))) > 10)) {
-      break;
-    }
-  }
-  int const x_41 = *(tint_symbol_3);
-  if ((x_41 == 4)) {
-    int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_61 = float(x_60);
-    *(tint_symbol_4) = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 72bea40..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,134 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 80
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-      %int_4 = OpConstant %int 4
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %69 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-               OpStore %x_GLF_global_loop_count %int_0
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %x_GLF_global_loop_count
-         %29 = OpSLessThan %bool %27 %int_100
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %24
-         %31 = OpLabel
-         %34 = OpLoad %int %x_GLF_global_loop_count
-         %36 = OpIAdd %int %34 %int_1
-               OpStore %x_GLF_global_loop_count %36
-         %37 = OpLoad %int %x_GLF_global_loop_count
-         %38 = OpLoad %int %x_GLF_global_loop_count
-         %39 = OpIMul %int %37 %38
-         %41 = OpSGreaterThan %bool %39 %int_10
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpBranch %24
-         %42 = OpLabel
-               OpBranch %25
-         %25 = OpLabel
-               OpBranch %23
-         %24 = OpLabel
-         %44 = OpLoad %int %x_GLF_global_loop_count
-         %46 = OpIEqual %bool %44 %int_4
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpConvertSToF %float %53
-         %61 = OpConvertSToF %float %55
-         %62 = OpConvertSToF %float %57
-         %63 = OpConvertSToF %float %59
-         %64 = OpCompositeConstruct %v4float %60 %61 %62 %63
-               OpStore %x_GLF_color %64
-               OpBranch %47
-         %49 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %66
-         %68 = OpCompositeConstruct %v4float %67 %67 %67 %67
-               OpStore %x_GLF_color %68
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %69
-         %72 = OpLabel
-         %73 = OpFunctionCall %void %main_1
-         %74 = OpLoad %v4float %x_GLF_color
-         %75 = OpCompositeConstruct %main_out %74
-               OpReturnValue %75
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %77 = OpLabel
-         %78 = OpFunctionCall %main_out %main_inner
-         %79 = OpCompositeExtract %v4float %78 0
-               OpStore %x_GLF_color_1_1 %79
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 27cfa37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  x_GLF_global_loop_count = 0;
-  loop {
-    let x_30 : i32 = x_GLF_global_loop_count;
-    if ((x_30 < 100)) {
-    } else {
-      break;
-    }
-    let x_33 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_33 + 1);
-    let x_35 : i32 = x_GLF_global_loop_count;
-    let x_36 : i32 = x_GLF_global_loop_count;
-    if (((x_35 * x_36) > 10)) {
-      break;
-    }
-  }
-  let x_41 : i32 = x_GLF_global_loop_count;
-  if ((x_41 == 4)) {
-    let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_47), f32(x_50), f32(x_53), f32(x_56));
-  } else {
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_61 : f32 = f32(x_60);
-    x_GLF_color = vec4<f32>(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index cb25c1f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-
-void main_1() {
-  x_GLF_global_loop_count = 0;
-  while (true) {
-    if ((x_GLF_global_loop_count < 100)) {
-    } else {
-      break;
-    }
-    x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-    if (((x_GLF_global_loop_count * x_GLF_global_loop_count) > 10)) {
-      break;
-    }
-  }
-  if ((x_GLF_global_loop_count == 4)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const int x_50 = asint(x_6[1].x);
-    const int x_53 = asint(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    const int x_60 = asint(x_6[1].x);
-    const float x_61 = float(x_60);
-    x_GLF_color = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.msl
deleted file mode 100644
index 29a482d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = 0;
-  while (true) {
-    int const x_30 = *(tint_symbol_3);
-    if ((x_30 < 100)) {
-    } else {
-      break;
-    }
-    int const x_33 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
-    int const x_35 = *(tint_symbol_3);
-    int const x_36 = *(tint_symbol_3);
-    if ((as_type<int>((as_type<uint>(x_35) * as_type<uint>(x_36))) > 10)) {
-      break;
-    }
-  }
-  int const x_41 = *(tint_symbol_3);
-  if ((x_41 == 4)) {
-    int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_61 = float(x_60);
-    *(tint_symbol_4) = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 72bea40..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,134 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 80
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-      %int_4 = OpConstant %int 4
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %69 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-               OpStore %x_GLF_global_loop_count %int_0
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %x_GLF_global_loop_count
-         %29 = OpSLessThan %bool %27 %int_100
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %24
-         %31 = OpLabel
-         %34 = OpLoad %int %x_GLF_global_loop_count
-         %36 = OpIAdd %int %34 %int_1
-               OpStore %x_GLF_global_loop_count %36
-         %37 = OpLoad %int %x_GLF_global_loop_count
-         %38 = OpLoad %int %x_GLF_global_loop_count
-         %39 = OpIMul %int %37 %38
-         %41 = OpSGreaterThan %bool %39 %int_10
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpBranch %24
-         %42 = OpLabel
-               OpBranch %25
-         %25 = OpLabel
-               OpBranch %23
-         %24 = OpLabel
-         %44 = OpLoad %int %x_GLF_global_loop_count
-         %46 = OpIEqual %bool %44 %int_4
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpConvertSToF %float %53
-         %61 = OpConvertSToF %float %55
-         %62 = OpConvertSToF %float %57
-         %63 = OpConvertSToF %float %59
-         %64 = OpCompositeConstruct %v4float %60 %61 %62 %63
-               OpStore %x_GLF_color %64
-               OpBranch %47
-         %49 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %66
-         %68 = OpCompositeConstruct %v4float %67 %67 %67 %67
-               OpStore %x_GLF_color %68
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %69
-         %72 = OpLabel
-         %73 = OpFunctionCall %void %main_1
-         %74 = OpLoad %v4float %x_GLF_color
-         %75 = OpCompositeConstruct %main_out %74
-               OpReturnValue %75
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %77 = OpLabel
-         %78 = OpFunctionCall %main_out %main_inner
-         %79 = OpCompositeExtract %v4float %78 0
-               OpStore %x_GLF_color_1_1 %79
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 27cfa37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-global-loop-counter-squared-comparison/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  x_GLF_global_loop_count = 0;
-  loop {
-    let x_30 : i32 = x_GLF_global_loop_count;
-    if ((x_30 < 100)) {
-    } else {
-      break;
-    }
-    let x_33 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_33 + 1);
-    let x_35 : i32 = x_GLF_global_loop_count;
-    let x_36 : i32 = x_GLF_global_loop_count;
-    if (((x_35 * x_36) > 10)) {
-      break;
-    }
-  }
-  let x_41 : i32 = x_GLF_global_loop_count;
-  if ((x_41 == 4)) {
-    let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_47), f32(x_50), f32(x_53), f32(x_56));
-  } else {
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_61 : f32 = f32(x_60);
-    x_GLF_color = vec4<f32>(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index bab5e31..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const int x_25 = asint(x_6[0].x);
-  a = x_25;
-  if ((a == 0)) {
-    a = (a + 1);
-  } else {
-    a = (a + 1);
-  }
-  if ((a == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.msl
deleted file mode 100644
index 440886f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_25 = x_6.zero;
-  a = x_25;
-  int const x_26 = a;
-  if ((x_26 == 0)) {
-    int const x_31 = a;
-    a = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-  } else {
-    int const x_33 = a;
-    a = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
-  }
-  int const x_35 = a;
-  if ((x_35 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f2d2876..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %43 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %44 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-         %22 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %23 = OpLoad %int %22
-               OpStore %a %23
-         %24 = OpLoad %int %a
-         %26 = OpIEqual %bool %24 %int_0
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-         %31 = OpLoad %int %a
-         %33 = OpIAdd %int %31 %int_1
-               OpStore %a %33
-               OpBranch %28
-         %30 = OpLabel
-         %34 = OpLoad %int %a
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %a %35
-               OpBranch %28
-         %28 = OpLabel
-         %36 = OpLoad %int %a
-         %37 = OpIEqual %bool %36 %int_1
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %40
-         %39 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %38
-         %40 = OpLabel
-               OpStore %x_GLF_color %44
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a2c8423..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_25 : i32 = x_6.zero;
-  a = x_25;
-  let x_26 : i32 = a;
-  if ((x_26 == 0)) {
-    let x_31 : i32 = a;
-    a = (x_31 + 1);
-  } else {
-    let x_33 : i32 = a;
-    a = (x_33 + 1);
-  }
-  let x_35 : i32 = a;
-  if ((x_35 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index bab5e31..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const int x_25 = asint(x_6[0].x);
-  a = x_25;
-  if ((a == 0)) {
-    a = (a + 1);
-  } else {
-    a = (a + 1);
-  }
-  if ((a == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.msl
deleted file mode 100644
index 440886f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_25 = x_6.zero;
-  a = x_25;
-  int const x_26 = a;
-  if ((x_26 == 0)) {
-    int const x_31 = a;
-    a = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-  } else {
-    int const x_33 = a;
-    a = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
-  }
-  int const x_35 = a;
-  if ((x_35 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f2d2876..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %43 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %44 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-         %22 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %23 = OpLoad %int %22
-               OpStore %a %23
-         %24 = OpLoad %int %a
-         %26 = OpIEqual %bool %24 %int_0
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-         %31 = OpLoad %int %a
-         %33 = OpIAdd %int %31 %int_1
-               OpStore %a %33
-               OpBranch %28
-         %30 = OpLabel
-         %34 = OpLoad %int %a
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %a %35
-               OpBranch %28
-         %28 = OpLabel
-         %36 = OpLoad %int %a
-         %37 = OpIEqual %bool %36 %int_1
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %40
-         %39 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %38
-         %40 = OpLabel
-               OpStore %x_GLF_color %44
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a2c8423..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-conversion-identical-branches/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_25 : i32 = x_6.zero;
-  a = x_25;
-  let x_26 : i32 = a;
-  if ((x_26 == 0)) {
-    let x_31 : i32 = a;
-    a = (x_31 + 1);
-  } else {
-    let x_33 : i32 = a;
-    a = (x_33 + 1);
-  }
-  let x_35 : i32 = a;
-  if ((x_35 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.hlsl
deleted file mode 100644
index 6470de0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  const float x_31 = asfloat(x_6[1].x);
-  x_GLF_color = float4(x_31, x_31, x_31, x_31);
-  const float x_34 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_34 >= x_36)) {
-    const int x_41 = asint(x_8[1].x);
-    switch(x_41) {
-      case 0:
-      case 16: {
-        const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-        const int x_45 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-        const float x_46 = float(x_45);
-        const float x_47 = float(x_41);
-        x_GLF_color = float4(x_46, x_47, x_47, x_46);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  const int x_50 = asint(x_8[1].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_52 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_50 == x_52)) {
-    x_GLF_color = float4(x_36, x_36, x_36, x_36);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.msl
deleted file mode 100644
index 921a389..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_31 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_3) = float4(x_31, x_31, x_31, x_31);
-  float const x_34 = (*(tint_symbol_4)).y;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_34 >= x_36)) {
-    int const x_41 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    switch(x_41) {
-      case 0:
-      case 16: {
-        int const x_45 = x_8.x_GLF_uniform_int_values.arr[0].el;
-        float const x_46 = float(x_45);
-        float const x_47 = float(x_41);
-        *(tint_symbol_3) = float4(x_46, x_47, x_47, x_46);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  int const x_50 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_52 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_50 == x_52)) {
-    *(tint_symbol_3) = float4(x_36, x_36, x_36, x_36);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_8, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.spvasm
deleted file mode 100644
index b378849..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %62 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-         %29 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %30 = OpLoad %float %29
-         %31 = OpCompositeConstruct %v4float %30 %30 %30 %30
-               OpStore %x_GLF_color %31
-         %34 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %35 = OpLoad %float %34
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThanEqual %bool %35 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %41
-         %42 = OpLabel
-         %44 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %45 = OpLoad %int %44
-               OpSelectionMerge %46 None
-               OpSwitch %45 %47 0 %48 16 %48
-         %48 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpConvertSToF %float %50
-         %52 = OpConvertSToF %float %45
-         %53 = OpCompositeConstruct %v4float %51 %52 %52 %51
-               OpStore %x_GLF_color %53
-               OpBranch %46
-         %47 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpIEqual %bool %55 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-         %61 = OpCompositeConstruct %v4float %38 %38 %38 %38
-               OpStore %x_GLF_color %61
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %62
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %66 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %71 = OpLabel
-         %73 = OpLoad %v4float %gl_FragCoord_param_1
-         %72 = OpFunctionCall %main_out %main_inner %73
-         %74 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %74
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.wgsl
deleted file mode 100644
index 8f12c6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  let x_31 : f32 = x_6.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_31, x_31, x_31, x_31);
-  let x_34 : f32 = gl_FragCoord.y;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_34 >= x_36)) {
-    let x_41 : i32 = x_8.x_GLF_uniform_int_values[1];
-    switch(x_41) {
-      case 0, 16: {
-        let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
-        let x_46 : f32 = f32(x_45);
-        let x_47 : f32 = f32(x_41);
-        x_GLF_color = vec4<f32>(x_46, x_47, x_47, x_46);
-      }
-      default: {
-      }
-    }
-  }
-  let x_50 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_52 : i32 = x_8.x_GLF_uniform_int_values[0];
-  if ((x_50 == x_52)) {
-    x_GLF_color = vec4<f32>(x_36, x_36, x_36, x_36);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.hlsl
deleted file mode 100644
index 6470de0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  const float x_31 = asfloat(x_6[1].x);
-  x_GLF_color = float4(x_31, x_31, x_31, x_31);
-  const float x_34 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_34 >= x_36)) {
-    const int x_41 = asint(x_8[1].x);
-    switch(x_41) {
-      case 0:
-      case 16: {
-        const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-        const int x_45 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-        const float x_46 = float(x_45);
-        const float x_47 = float(x_41);
-        x_GLF_color = float4(x_46, x_47, x_47, x_46);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  const int x_50 = asint(x_8[1].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_52 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_50 == x_52)) {
-    x_GLF_color = float4(x_36, x_36, x_36, x_36);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.msl
deleted file mode 100644
index 921a389..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_31 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_3) = float4(x_31, x_31, x_31, x_31);
-  float const x_34 = (*(tint_symbol_4)).y;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_34 >= x_36)) {
-    int const x_41 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    switch(x_41) {
-      case 0:
-      case 16: {
-        int const x_45 = x_8.x_GLF_uniform_int_values.arr[0].el;
-        float const x_46 = float(x_45);
-        float const x_47 = float(x_41);
-        *(tint_symbol_3) = float4(x_46, x_47, x_47, x_46);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  int const x_50 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_52 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_50 == x_52)) {
-    *(tint_symbol_3) = float4(x_36, x_36, x_36, x_36);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_8, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.spvasm
deleted file mode 100644
index b378849..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %62 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-         %29 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %30 = OpLoad %float %29
-         %31 = OpCompositeConstruct %v4float %30 %30 %30 %30
-               OpStore %x_GLF_color %31
-         %34 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %35 = OpLoad %float %34
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThanEqual %bool %35 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %41
-         %42 = OpLabel
-         %44 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %45 = OpLoad %int %44
-               OpSelectionMerge %46 None
-               OpSwitch %45 %47 0 %48 16 %48
-         %48 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpConvertSToF %float %50
-         %52 = OpConvertSToF %float %45
-         %53 = OpCompositeConstruct %v4float %51 %52 %52 %51
-               OpStore %x_GLF_color %53
-               OpBranch %46
-         %47 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpIEqual %bool %55 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-         %61 = OpCompositeConstruct %v4float %38 %38 %38 %38
-               OpStore %x_GLF_color %61
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %62
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %66 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %71 = OpLabel
-         %73 = OpLoad %v4float %gl_FragCoord_param_1
-         %72 = OpFunctionCall %main_out %main_inner %73
-         %74 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %74
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.wgsl
deleted file mode 100644
index 8f12c6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-switch-fallthrough/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  let x_31 : f32 = x_6.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_31, x_31, x_31, x_31);
-  let x_34 : f32 = gl_FragCoord.y;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_34 >= x_36)) {
-    let x_41 : i32 = x_8.x_GLF_uniform_int_values[1];
-    switch(x_41) {
-      case 0, 16: {
-        let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
-        let x_46 : f32 = f32(x_45);
-        let x_47 : f32 = f32(x_41);
-        x_GLF_color = vec4<f32>(x_46, x_47, x_47, x_46);
-      }
-      default: {
-      }
-    }
-  }
-  let x_50 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_52 : i32 = x_8.x_GLF_uniform_int_values[0];
-  if ((x_50 == x_52)) {
-    x_GLF_color = vec4<f32>(x_36, x_36, x_36, x_36);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 18391f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  bool x_65 = false;
-  bool x_66_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_29;
-  const int x_31 = asint(x_6[1].x);
-  b = x_31;
-  const int x_33 = asint(x_6[2].x);
-  c = x_33;
-  while (true) {
-    if ((a < b)) {
-    } else {
-      break;
-    }
-    a = (a + 1);
-    const int x_44 = c;
-    const int x_46 = asint(x_6[2].x);
-    if ((x_44 == x_46)) {
-      const int x_52 = asint(x_6[3].x);
-      c = (c * x_52);
-    } else {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  const bool x_59 = (a == b);
-  x_66_phi = x_59;
-  if (x_59) {
-    const int x_62 = c;
-    const int x_64 = asint(x_6[3].x);
-    x_65 = (x_62 == x_64);
-    x_66_phi = x_65;
-  }
-  if (x_66_phi) {
-    const int x_71 = asint(x_6[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_77 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_80 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_71), float(x_74), float(x_77), float(x_80));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_84 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_85 = float(x_84);
-    x_GLF_color = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5bbab88..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,92 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  bool x_65 = false;
-  bool x_66_phi = false;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_29;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  b = x_31;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  c = x_33;
-  while (true) {
-    int const x_38 = a;
-    int const x_39 = b;
-    if ((x_38 < x_39)) {
-    } else {
-      break;
-    }
-    int const x_42 = a;
-    a = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-    int const x_44 = c;
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_44 == x_46)) {
-      int const x_52 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      int const x_53 = c;
-      c = as_type<int>((as_type<uint>(x_53) * as_type<uint>(x_52)));
-    } else {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  int const x_57 = a;
-  int const x_58 = b;
-  bool const x_59 = (x_57 == x_58);
-  x_66_phi = x_59;
-  if (x_59) {
-    int const x_62 = c;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    x_65 = (x_62 == x_64);
-    x_66_phi = x_65;
-  }
-  bool const x_66 = x_66_phi;
-  if (x_66) {
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_74 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_80 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_71), float(x_74), float(x_77), float(x_80));
-  } else {
-    int const x_84 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_85 = float(x_84);
-    *(tint_symbol_3) = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c78c5a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,180 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_65 "x_65"
-               OpName %x_66_phi "x_66_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %c = OpVariable %_ptr_Function_int Function %21
-       %x_65 = OpVariable %_ptr_Function_bool Function %27
-   %x_66_phi = OpVariable %_ptr_Function_bool Function %27
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %33 = OpLoad %int %32
-               OpStore %a %33
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %36 = OpLoad %int %35
-               OpStore %b %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %39 = OpLoad %int %38
-               OpStore %c %39
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %a
-         %45 = OpLoad %int %b
-         %46 = OpSLessThan %bool %44 %45
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-               OpBranch %47
-         %49 = OpLabel
-               OpBranch %41
-         %47 = OpLabel
-         %50 = OpLoad %int %a
-         %51 = OpIAdd %int %50 %int_1
-               OpStore %a %51
-         %52 = OpLoad %int %c
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %54 = OpLoad %int %53
-         %55 = OpIEqual %bool %52 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %61 = OpLoad %int %60
-         %62 = OpLoad %int %c
-         %63 = OpIMul %int %62 %61
-               OpStore %c %63
-               OpBranch %56
-         %58 = OpLabel
-               OpSelectionMerge %65 None
-               OpBranchConditional %true %66 %65
-         %66 = OpLabel
-               OpBranch %42
-         %65 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-               OpBranch %40
-         %41 = OpLabel
-         %67 = OpLoad %int %a
-         %68 = OpLoad %int %b
-         %69 = OpIEqual %bool %67 %68
-               OpStore %x_66_phi %69
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %int %c
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %74 = OpLoad %int %73
-         %75 = OpIEqual %bool %72 %74
-               OpStore %x_65 %75
-         %76 = OpLoad %bool %x_65
-               OpStore %x_66_phi %76
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %bool %x_66_phi
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %82
-         %90 = OpConvertSToF %float %84
-         %91 = OpConvertSToF %float %86
-         %92 = OpConvertSToF %float %88
-         %93 = OpCompositeConstruct %v4float %89 %90 %91 %92
-               OpStore %x_GLF_color %93
-               OpBranch %78
-         %80 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %95 = OpLoad %int %94
-         %96 = OpConvertSToF %float %95
-         %97 = OpCompositeConstruct %v4float %96 %96 %96 %96
-               OpStore %x_GLF_color %97
-               OpBranch %78
-         %78 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-        %101 = OpLabel
-        %102 = OpFunctionCall %void %main_1
-        %103 = OpLoad %v4float %x_GLF_color
-        %104 = OpCompositeConstruct %main_out %103
-               OpReturnValue %104
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %106 = OpLabel
-        %107 = OpFunctionCall %main_out %main_inner
-        %108 = OpCompositeExtract %v4float %107 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 73577eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,79 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var x_65 : bool;
-  var x_66_phi : bool;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_29;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[1];
-  b = x_31;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[2];
-  c = x_33;
-  loop {
-    let x_38 : i32 = a;
-    let x_39 : i32 = b;
-    if ((x_38 < x_39)) {
-    } else {
-      break;
-    }
-    let x_42 : i32 = a;
-    a = (x_42 + 1);
-    let x_44 : i32 = c;
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_44 == x_46)) {
-      let x_52 : i32 = x_6.x_GLF_uniform_int_values[3];
-      let x_53 : i32 = c;
-      c = (x_53 * x_52);
-    } else {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  let x_57 : i32 = a;
-  let x_58 : i32 = b;
-  let x_59 : bool = (x_57 == x_58);
-  x_66_phi = x_59;
-  if (x_59) {
-    let x_62 : i32 = c;
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_65 = (x_62 == x_64);
-    x_66_phi = x_65;
-  }
-  let x_66 : bool = x_66_phi;
-  if (x_66) {
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_74 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_80 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_71), f32(x_74), f32(x_77), f32(x_80));
-  } else {
-    let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_85 : f32 = f32(x_84);
-    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 18391f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  bool x_65 = false;
-  bool x_66_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_29;
-  const int x_31 = asint(x_6[1].x);
-  b = x_31;
-  const int x_33 = asint(x_6[2].x);
-  c = x_33;
-  while (true) {
-    if ((a < b)) {
-    } else {
-      break;
-    }
-    a = (a + 1);
-    const int x_44 = c;
-    const int x_46 = asint(x_6[2].x);
-    if ((x_44 == x_46)) {
-      const int x_52 = asint(x_6[3].x);
-      c = (c * x_52);
-    } else {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  const bool x_59 = (a == b);
-  x_66_phi = x_59;
-  if (x_59) {
-    const int x_62 = c;
-    const int x_64 = asint(x_6[3].x);
-    x_65 = (x_62 == x_64);
-    x_66_phi = x_65;
-  }
-  if (x_66_phi) {
-    const int x_71 = asint(x_6[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_77 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_80 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_71), float(x_74), float(x_77), float(x_80));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_84 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_85 = float(x_84);
-    x_GLF_color = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5bbab88..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,92 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  bool x_65 = false;
-  bool x_66_phi = false;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_29;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  b = x_31;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  c = x_33;
-  while (true) {
-    int const x_38 = a;
-    int const x_39 = b;
-    if ((x_38 < x_39)) {
-    } else {
-      break;
-    }
-    int const x_42 = a;
-    a = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-    int const x_44 = c;
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_44 == x_46)) {
-      int const x_52 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      int const x_53 = c;
-      c = as_type<int>((as_type<uint>(x_53) * as_type<uint>(x_52)));
-    } else {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  int const x_57 = a;
-  int const x_58 = b;
-  bool const x_59 = (x_57 == x_58);
-  x_66_phi = x_59;
-  if (x_59) {
-    int const x_62 = c;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    x_65 = (x_62 == x_64);
-    x_66_phi = x_65;
-  }
-  bool const x_66 = x_66_phi;
-  if (x_66) {
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_74 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_80 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_71), float(x_74), float(x_77), float(x_80));
-  } else {
-    int const x_84 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_85 = float(x_84);
-    *(tint_symbol_3) = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c78c5a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,180 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_65 "x_65"
-               OpName %x_66_phi "x_66_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %c = OpVariable %_ptr_Function_int Function %21
-       %x_65 = OpVariable %_ptr_Function_bool Function %27
-   %x_66_phi = OpVariable %_ptr_Function_bool Function %27
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %33 = OpLoad %int %32
-               OpStore %a %33
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %36 = OpLoad %int %35
-               OpStore %b %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %39 = OpLoad %int %38
-               OpStore %c %39
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %a
-         %45 = OpLoad %int %b
-         %46 = OpSLessThan %bool %44 %45
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-               OpBranch %47
-         %49 = OpLabel
-               OpBranch %41
-         %47 = OpLabel
-         %50 = OpLoad %int %a
-         %51 = OpIAdd %int %50 %int_1
-               OpStore %a %51
-         %52 = OpLoad %int %c
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %54 = OpLoad %int %53
-         %55 = OpIEqual %bool %52 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %61 = OpLoad %int %60
-         %62 = OpLoad %int %c
-         %63 = OpIMul %int %62 %61
-               OpStore %c %63
-               OpBranch %56
-         %58 = OpLabel
-               OpSelectionMerge %65 None
-               OpBranchConditional %true %66 %65
-         %66 = OpLabel
-               OpBranch %42
-         %65 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-               OpBranch %40
-         %41 = OpLabel
-         %67 = OpLoad %int %a
-         %68 = OpLoad %int %b
-         %69 = OpIEqual %bool %67 %68
-               OpStore %x_66_phi %69
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %int %c
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %74 = OpLoad %int %73
-         %75 = OpIEqual %bool %72 %74
-               OpStore %x_65 %75
-         %76 = OpLoad %bool %x_65
-               OpStore %x_66_phi %76
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %bool %x_66_phi
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %82
-         %90 = OpConvertSToF %float %84
-         %91 = OpConvertSToF %float %86
-         %92 = OpConvertSToF %float %88
-         %93 = OpCompositeConstruct %v4float %89 %90 %91 %92
-               OpStore %x_GLF_color %93
-               OpBranch %78
-         %80 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %95 = OpLoad %int %94
-         %96 = OpConvertSToF %float %95
-         %97 = OpCompositeConstruct %v4float %96 %96 %96 %96
-               OpStore %x_GLF_color %97
-               OpBranch %78
-         %78 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-        %101 = OpLabel
-        %102 = OpFunctionCall %void %main_1
-        %103 = OpLoad %v4float %x_GLF_color
-        %104 = OpCompositeConstruct %main_out %103
-               OpReturnValue %104
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %106 = OpLabel
-        %107 = OpFunctionCall %main_out %main_inner
-        %108 = OpCompositeExtract %v4float %107 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 73577eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-continue/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,79 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var x_65 : bool;
-  var x_66_phi : bool;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_29;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[1];
-  b = x_31;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[2];
-  c = x_33;
-  loop {
-    let x_38 : i32 = a;
-    let x_39 : i32 = b;
-    if ((x_38 < x_39)) {
-    } else {
-      break;
-    }
-    let x_42 : i32 = a;
-    a = (x_42 + 1);
-    let x_44 : i32 = c;
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_44 == x_46)) {
-      let x_52 : i32 = x_6.x_GLF_uniform_int_values[3];
-      let x_53 : i32 = c;
-      c = (x_53 * x_52);
-    } else {
-      if (true) {
-        continue;
-      }
-    }
-  }
-  let x_57 : i32 = a;
-  let x_58 : i32 = b;
-  let x_59 : bool = (x_57 == x_58);
-  x_66_phi = x_59;
-  if (x_59) {
-    let x_62 : i32 = c;
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_65 = (x_62 == x_64);
-    x_66_phi = x_65;
-  }
-  let x_66 : bool = x_66_phi;
-  if (x_66) {
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_74 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_80 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_71), f32(x_74), f32(x_77), f32(x_80));
-  } else {
-    let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_85 : f32 = f32(x_84);
-    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 98a05e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  a = 1;
-  while (true) {
-    const int x_29 = a;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_31 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_29 >= x_31)) {
-      break;
-    }
-    if (true) {
-      discard;
-    }
-    a = (a + 1);
-    {
-      if ((a != 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((a == 1)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_53 = asint(x_6[1].x);
-    x_GLF_color = float4(1.0f, float(x_47), float(x_50), float(x_53));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_58 = float(x_57);
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.msl
deleted file mode 100644
index 48dc9ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  a = 1;
-  while (true) {
-    int const x_29 = a;
-    int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_29 >= x_31)) {
-      break;
-    }
-    if (true) {
-      discard_fragment();
-    }
-    int const x_37 = a;
-    a = as_type<int>((as_type<uint>(x_37) + as_type<uint>(1)));
-    {
-      int const x_39 = a;
-      if ((x_39 != 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_41 = a;
-  if ((x_41 == 1)) {
-    int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(1.0f, float(x_47), float(x_50), float(x_53));
-  } else {
-    int const x_57 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_58 = float(x_57);
-    *(tint_symbol_3) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b46675e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %64 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_1
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %a
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %32 = OpLoad %int %31
-         %33 = OpSGreaterThanEqual %bool %27 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-               OpBranch %24
-         %35 = OpLabel
-               OpSelectionMerge %38 None
-               OpBranchConditional %true %39 %38
-         %39 = OpLabel
-               OpKill
-         %38 = OpLabel
-         %40 = OpLoad %int %a
-         %41 = OpIAdd %int %40 %int_1
-               OpStore %a %41
-               OpBranch %25
-         %25 = OpLabel
-         %42 = OpLoad %int %a
-         %43 = OpINotEqual %bool %42 %int_1
-               OpBranchConditional %43 %23 %24
-         %24 = OpLabel
-         %44 = OpLoad %int %a
-         %45 = OpIEqual %bool %44 %int_1
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %54 = OpLoad %int %53
-         %56 = OpConvertSToF %float %50
-         %57 = OpConvertSToF %float %52
-         %58 = OpConvertSToF %float %54
-         %59 = OpCompositeConstruct %v4float %float_1 %56 %57 %58
-               OpStore %x_GLF_color %59
-               OpBranch %46
-         %48 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpConvertSToF %float %61
-         %63 = OpCompositeConstruct %v4float %62 %62 %62 %62
-               OpStore %x_GLF_color %63
-               OpBranch %46
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %64
-         %67 = OpLabel
-         %68 = OpFunctionCall %void %main_1
-         %69 = OpLoad %v4float %x_GLF_color
-         %70 = OpCompositeConstruct %main_out %69
-               OpReturnValue %70
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %72 = OpLabel
-         %73 = OpFunctionCall %main_out %main_inner
-         %74 = OpCompositeExtract %v4float %73 0
-               OpStore %x_GLF_color_1_1 %74
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 80683f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,58 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  a = 1;
-  loop {
-    let x_29 : i32 = a;
-    let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_29 >= x_31)) {
-      break;
-    }
-    if (true) {
-      discard;
-    }
-    let x_37 : i32 = a;
-    a = (x_37 + 1);
-
-    continuing {
-      let x_39 : i32 = a;
-      if ((x_39 != 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_41 : i32 = a;
-  if ((x_41 == 1)) {
-    let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(1.0, f32(x_47), f32(x_50), f32(x_53));
-  } else {
-    let x_57 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_58 : f32 = f32(x_57);
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 98a05e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  a = 1;
-  while (true) {
-    const int x_29 = a;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_31 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_29 >= x_31)) {
-      break;
-    }
-    if (true) {
-      discard;
-    }
-    a = (a + 1);
-    {
-      if ((a != 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((a == 1)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_53 = asint(x_6[1].x);
-    x_GLF_color = float4(1.0f, float(x_47), float(x_50), float(x_53));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_58 = float(x_57);
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.msl
deleted file mode 100644
index 48dc9ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  a = 1;
-  while (true) {
-    int const x_29 = a;
-    int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_29 >= x_31)) {
-      break;
-    }
-    if (true) {
-      discard_fragment();
-    }
-    int const x_37 = a;
-    a = as_type<int>((as_type<uint>(x_37) + as_type<uint>(1)));
-    {
-      int const x_39 = a;
-      if ((x_39 != 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_41 = a;
-  if ((x_41 == 1)) {
-    int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(1.0f, float(x_47), float(x_50), float(x_53));
-  } else {
-    int const x_57 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_58 = float(x_57);
-    *(tint_symbol_3) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b46675e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %64 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_1
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %a
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %32 = OpLoad %int %31
-         %33 = OpSGreaterThanEqual %bool %27 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-               OpBranch %24
-         %35 = OpLabel
-               OpSelectionMerge %38 None
-               OpBranchConditional %true %39 %38
-         %39 = OpLabel
-               OpKill
-         %38 = OpLabel
-         %40 = OpLoad %int %a
-         %41 = OpIAdd %int %40 %int_1
-               OpStore %a %41
-               OpBranch %25
-         %25 = OpLabel
-         %42 = OpLoad %int %a
-         %43 = OpINotEqual %bool %42 %int_1
-               OpBranchConditional %43 %23 %24
-         %24 = OpLabel
-         %44 = OpLoad %int %a
-         %45 = OpIEqual %bool %44 %int_1
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %54 = OpLoad %int %53
-         %56 = OpConvertSToF %float %50
-         %57 = OpConvertSToF %float %52
-         %58 = OpConvertSToF %float %54
-         %59 = OpCompositeConstruct %v4float %float_1 %56 %57 %58
-               OpStore %x_GLF_color %59
-               OpBranch %46
-         %48 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpConvertSToF %float %61
-         %63 = OpCompositeConstruct %v4float %62 %62 %62 %62
-               OpStore %x_GLF_color %63
-               OpBranch %46
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %64
-         %67 = OpLabel
-         %68 = OpFunctionCall %void %main_1
-         %69 = OpLoad %v4float %x_GLF_color
-         %70 = OpCompositeConstruct %main_out %69
-               OpReturnValue %70
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %72 = OpLabel
-         %73 = OpFunctionCall %main_out %main_inner
-         %74 = OpCompositeExtract %v4float %73 0
-               OpStore %x_GLF_color_1_1 %74
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 80683f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-if-true-discard-in-do-while-never-reached/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,58 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  a = 1;
-  loop {
-    let x_29 : i32 = a;
-    let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_29 >= x_31)) {
-      break;
-    }
-    if (true) {
-      discard;
-    }
-    let x_37 : i32 = a;
-    a = (x_37 + 1);
-
-    continuing {
-      let x_39 : i32 = a;
-      if ((x_39 != 1)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_41 : i32 = a;
-  if ((x_41 == 1)) {
-    let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(1.0, f32(x_47), f32(x_50), f32(x_53));
-  } else {
-    let x_57 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_58 : f32 = f32(x_57);
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index bcaa7b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    const int x_31 = i;
-    const int x_33 = asint(x_7[0].x);
-    if ((x_31 < (7 + x_33))) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 7:
-      case 8: {
-        a = (a + 1);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  if ((a == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.msl
deleted file mode 100644
index c35cc8c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_31 = i;
-    int const x_33 = x_7.three;
-    if ((x_31 < as_type<int>((as_type<uint>(7) + as_type<uint>(x_33))))) {
-    } else {
-      break;
-    }
-    int const x_37 = i;
-    switch(x_37) {
-      case 7:
-      case 8: {
-        int const x_40 = a;
-        a = as_type<int>((as_type<uint>(x_40) + as_type<uint>(1)));
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_42 = i;
-      i = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-    }
-  }
-  int const x_44 = a;
-  if ((x_44 == 2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 16fd48a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,125 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_7 = OpConstant %int 7
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %55 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %56 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %i
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpIAdd %int %int_7 %30
-         %33 = OpSLessThan %bool %25 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %22
-         %35 = OpLabel
-         %38 = OpLoad %int %i
-               OpSelectionMerge %39 None
-               OpSwitch %38 %40 7 %41 8 %41
-         %41 = OpLabel
-         %42 = OpLoad %int %a
-         %44 = OpIAdd %int %42 %int_1
-               OpStore %a %44
-               OpBranch %39
-         %40 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-         %45 = OpLoad %int %i
-         %46 = OpIAdd %int %45 %int_1
-               OpStore %i %46
-               OpBranch %21
-         %22 = OpLabel
-         %47 = OpLoad %int %a
-         %49 = OpIEqual %bool %47 %int_2
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %50
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1a774f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-[[block]]
-struct buf0 {
-  three : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_31 : i32 = i;
-    let x_33 : i32 = x_7.three;
-    if ((x_31 < (7 + x_33))) {
-    } else {
-      break;
-    }
-    let x_37 : i32 = i;
-    switch(x_37) {
-      case 7, 8: {
-        let x_40 : i32 = a;
-        a = (x_40 + 1);
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_42 : i32 = i;
-      i = (x_42 + 1);
-    }
-  }
-  let x_44 : i32 = a;
-  if ((x_44 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index bcaa7b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    const int x_31 = i;
-    const int x_33 = asint(x_7[0].x);
-    if ((x_31 < (7 + x_33))) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 7:
-      case 8: {
-        a = (a + 1);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  if ((a == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.msl
deleted file mode 100644
index c35cc8c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_31 = i;
-    int const x_33 = x_7.three;
-    if ((x_31 < as_type<int>((as_type<uint>(7) + as_type<uint>(x_33))))) {
-    } else {
-      break;
-    }
-    int const x_37 = i;
-    switch(x_37) {
-      case 7:
-      case 8: {
-        int const x_40 = a;
-        a = as_type<int>((as_type<uint>(x_40) + as_type<uint>(1)));
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_42 = i;
-      i = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-    }
-  }
-  int const x_44 = a;
-  if ((x_44 == 2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 16fd48a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,125 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_7 = OpConstant %int 7
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %55 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %56 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %i
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpIAdd %int %int_7 %30
-         %33 = OpSLessThan %bool %25 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %22
-         %35 = OpLabel
-         %38 = OpLoad %int %i
-               OpSelectionMerge %39 None
-               OpSwitch %38 %40 7 %41 8 %41
-         %41 = OpLabel
-         %42 = OpLoad %int %a
-         %44 = OpIAdd %int %42 %int_1
-               OpStore %a %44
-               OpBranch %39
-         %40 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-         %45 = OpLoad %int %i
-         %46 = OpIAdd %int %45 %int_1
-               OpStore %i %46
-               OpBranch %21
-         %22 = OpLabel
-         %47 = OpLoad %int %a
-         %49 = OpIEqual %bool %47 %int_2
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %50
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1a774f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inc-inside-switch-and-for/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-[[block]]
-struct buf0 {
-  three : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_31 : i32 = i;
-    let x_33 : i32 = x_7.three;
-    if ((x_31 < (7 + x_33))) {
-    } else {
-      break;
-    }
-    let x_37 : i32 = i;
-    switch(x_37) {
-      case 7, 8: {
-        let x_40 : i32 = a;
-        a = (x_40 + 1);
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_42 : i32 = i;
-      i = (x_42 + 1);
-    }
-  }
-  let x_44 : i32 = a;
-  if ((x_44 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 33c8f79..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,93 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float arr[3] = (float[3])0;
-  int a = 0;
-  bool x_69 = false;
-  bool x_79 = false;
-  bool x_70_phi = false;
-  bool x_80_phi = false;
-  const float x_34 = asfloat(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_38 = asfloat(x_6[2].x);
-  const float tint_symbol_3[3] = {x_34, x_36, x_38};
-  arr = tint_symbol_3;
-  a = 0;
-  while (true) {
-    const int x_44 = a;
-    const int x_46 = asint(x_9[1].x);
-    if ((x_44 <= x_46)) {
-    } else {
-      break;
-    }
-    const int x_49 = a;
-    a = (x_49 + 1);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_52 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    arr[x_49] = x_52;
-  }
-  const int x_55 = asint(x_9[1].x);
-  const float x_57 = arr[x_55];
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_59 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const bool x_60 = (x_57 == x_59);
-  x_70_phi = x_60;
-  if (x_60) {
-    const int x_64 = asint(x_9[2].x);
-    const float x_66 = arr[x_64];
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_69 = (x_66 == x_68);
-    x_70_phi = x_69;
-  }
-  const bool x_70 = x_70_phi;
-  x_80_phi = x_70;
-  if (x_70) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_9[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_76 = arr[x_74];
-    const float x_78 = asfloat(x_6[2].x);
-    x_79 = (x_76 == x_78);
-    x_80_phi = x_79;
-  }
-  if (x_80_phi) {
-    const int x_85 = asint(x_9[1].x);
-    const float x_87 = arr[x_85];
-    const float x_89 = asfloat(x_6[1].x);
-    const float x_91 = asfloat(x_6[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_93 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(x_87, x_89, x_91, x_93);
-  } else {
-    const float x_96 = asfloat(x_6[1].x);
-    x_GLF_color = float4(x_96, x_96, x_96, x_96);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index d59f92c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 arr = {};
-  int a = 0;
-  bool x_69 = false;
-  bool x_79 = false;
-  bool x_70_phi = false;
-  bool x_80_phi = false;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_34, x_36, x_38}};
-  arr = tint_symbol_2;
-  a = 0;
-  while (true) {
-    int const x_44 = a;
-    int const x_46 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_44 <= x_46)) {
-    } else {
-      break;
-    }
-    int const x_49 = a;
-    a = as_type<int>((as_type<uint>(x_49) + as_type<uint>(1)));
-    float const x_52 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    arr.arr[x_49] = x_52;
-  }
-  int const x_55 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  float const x_57 = arr.arr[x_55];
-  float const x_59 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_60 = (x_57 == x_59);
-  x_70_phi = x_60;
-  if (x_60) {
-    int const x_64 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_66 = arr.arr[x_64];
-    float const x_68 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    x_69 = (x_66 == x_68);
-    x_70_phi = x_69;
-  }
-  bool const x_70 = x_70_phi;
-  x_80_phi = x_70;
-  if (x_70) {
-    int const x_74 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    float const x_76 = arr.arr[x_74];
-    float const x_78 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    x_79 = (x_76 == x_78);
-    x_80_phi = x_79;
-  }
-  bool const x_80 = x_80_phi;
-  if (x_80) {
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_87 = arr.arr[x_85];
-    float const x_89 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_91 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_93 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_4) = float4(x_87, x_89, x_91, x_93);
-  } else {
-    float const x_96 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_4) = float4(x_96, x_96, x_96, x_96);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a28e313..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,204 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 124
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %a "a"
-               OpName %x_69 "x_69"
-               OpName %x_79 "x_79"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_80_phi "x_80_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_3_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_arr_float_uint_3_0 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3_0 = OpTypePointer Function %_arr_float_uint_3_0
-         %26 = OpConstantNull %_arr_float_uint_3_0
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-        %113 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_float_uint_3_0 Function %26
-          %a = OpVariable %_ptr_Function_int Function %29
-       %x_69 = OpVariable %_ptr_Function_bool Function %33
-       %x_79 = OpVariable %_ptr_Function_bool Function %33
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %33
-   %x_80_phi = OpVariable %_ptr_Function_bool Function %33
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %41 = OpLoad %float %40
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %47 = OpLoad %float %46
-         %48 = OpCompositeConstruct %_arr_float_uint_3_0 %41 %44 %47
-               OpStore %arr %48
-               OpStore %a %int_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpLoad %int %a
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpSLessThanEqual %bool %53 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %50
-         %58 = OpLabel
-         %61 = OpLoad %int %a
-         %62 = OpIAdd %int %61 %int_1
-               OpStore %a %62
-         %63 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %64 = OpLoad %float %63
-         %66 = OpAccessChain %_ptr_Function_float %arr %61
-               OpStore %66 %64
-               OpBranch %51
-         %51 = OpLabel
-               OpBranch %49
-         %50 = OpLabel
-         %67 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Function_float %arr %68
-         %70 = OpLoad %float %69
-         %71 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %72 = OpLoad %float %71
-         %73 = OpFOrdEqual %bool %70 %72
-               OpStore %x_70_phi %73
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %74
-         %75 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Function_float %arr %77
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %81 = OpLoad %float %80
-         %82 = OpFOrdEqual %bool %79 %81
-               OpStore %x_69 %82
-         %83 = OpLoad %bool %x_69
-               OpStore %x_70_phi %83
-               OpBranch %74
-         %74 = OpLabel
-         %84 = OpLoad %bool %x_70_phi
-               OpStore %x_80_phi %84
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Function_float %arr %88
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %92 = OpLoad %float %91
-         %93 = OpFOrdEqual %bool %90 %92
-               OpStore %x_79 %93
-         %94 = OpLoad %bool %x_79
-               OpStore %x_80_phi %94
-               OpBranch %85
-         %85 = OpLabel
-         %95 = OpLoad %bool %x_80_phi
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %98
-         %97 = OpLabel
-         %99 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Function_float %arr %100
-        %102 = OpLoad %float %101
-        %103 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %104 = OpLoad %float %103
-        %105 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %106 = OpLoad %float %105
-        %107 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %108 = OpLoad %float %107
-        %109 = OpCompositeConstruct %v4float %102 %104 %106 %108
-               OpStore %x_GLF_color %109
-               OpBranch %96
-         %98 = OpLabel
-        %110 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %111 = OpLoad %float %110
-        %112 = OpCompositeConstruct %v4float %111 %111 %111 %111
-               OpStore %x_GLF_color %112
-               OpBranch %96
-         %96 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %113
-        %116 = OpLabel
-        %117 = OpFunctionCall %void %main_1
-        %118 = OpLoad %v4float %x_GLF_color
-        %119 = OpCompositeConstruct %main_out %118
-               OpReturnValue %119
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %121 = OpLabel
-        %122 = OpFunctionCall %main_out %main_inner
-        %123 = OpCompositeExtract %v4float %122 0
-               OpStore %x_GLF_color_1_1 %123
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index dff82e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,90 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<f32, 3>;
-  var a : i32;
-  var x_69 : bool;
-  var x_79 : bool;
-  var x_70_phi : bool;
-  var x_80_phi : bool;
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[2];
-  arr = array<f32, 3>(x_34, x_36, x_38);
-  a = 0;
-  loop {
-    let x_44 : i32 = a;
-    let x_46 : i32 = x_9.x_GLF_uniform_int_values[1];
-    if ((x_44 <= x_46)) {
-    } else {
-      break;
-    }
-    let x_49 : i32 = a;
-    a = (x_49 + 1);
-    let x_52 : f32 = x_6.x_GLF_uniform_float_values[0];
-    arr[x_49] = x_52;
-  }
-  let x_55 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_57 : f32 = arr[x_55];
-  let x_59 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_60 : bool = (x_57 == x_59);
-  x_70_phi = x_60;
-  if (x_60) {
-    let x_64 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_66 : f32 = arr[x_64];
-    let x_68 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_69 = (x_66 == x_68);
-    x_70_phi = x_69;
-  }
-  let x_70 : bool = x_70_phi;
-  x_80_phi = x_70;
-  if (x_70) {
-    let x_74 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_76 : f32 = arr[x_74];
-    let x_78 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_79 = (x_76 == x_78);
-    x_80_phi = x_79;
-  }
-  let x_80 : bool = x_80_phi;
-  if (x_80) {
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_87 : f32 = arr[x_85];
-    let x_89 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_91 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_93 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_87, x_89, x_91, x_93);
-  } else {
-    let x_96 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_96, x_96, x_96, x_96);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 33c8f79..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,93 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float arr[3] = (float[3])0;
-  int a = 0;
-  bool x_69 = false;
-  bool x_79 = false;
-  bool x_70_phi = false;
-  bool x_80_phi = false;
-  const float x_34 = asfloat(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_38 = asfloat(x_6[2].x);
-  const float tint_symbol_3[3] = {x_34, x_36, x_38};
-  arr = tint_symbol_3;
-  a = 0;
-  while (true) {
-    const int x_44 = a;
-    const int x_46 = asint(x_9[1].x);
-    if ((x_44 <= x_46)) {
-    } else {
-      break;
-    }
-    const int x_49 = a;
-    a = (x_49 + 1);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_52 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    arr[x_49] = x_52;
-  }
-  const int x_55 = asint(x_9[1].x);
-  const float x_57 = arr[x_55];
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_59 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const bool x_60 = (x_57 == x_59);
-  x_70_phi = x_60;
-  if (x_60) {
-    const int x_64 = asint(x_9[2].x);
-    const float x_66 = arr[x_64];
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_69 = (x_66 == x_68);
-    x_70_phi = x_69;
-  }
-  const bool x_70 = x_70_phi;
-  x_80_phi = x_70;
-  if (x_70) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_9[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_76 = arr[x_74];
-    const float x_78 = asfloat(x_6[2].x);
-    x_79 = (x_76 == x_78);
-    x_80_phi = x_79;
-  }
-  if (x_80_phi) {
-    const int x_85 = asint(x_9[1].x);
-    const float x_87 = arr[x_85];
-    const float x_89 = asfloat(x_6[1].x);
-    const float x_91 = asfloat(x_6[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_93 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(x_87, x_89, x_91, x_93);
-  } else {
-    const float x_96 = asfloat(x_6[1].x);
-    x_GLF_color = float4(x_96, x_96, x_96, x_96);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index d59f92c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 arr = {};
-  int a = 0;
-  bool x_69 = false;
-  bool x_79 = false;
-  bool x_70_phi = false;
-  bool x_80_phi = false;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_34, x_36, x_38}};
-  arr = tint_symbol_2;
-  a = 0;
-  while (true) {
-    int const x_44 = a;
-    int const x_46 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_44 <= x_46)) {
-    } else {
-      break;
-    }
-    int const x_49 = a;
-    a = as_type<int>((as_type<uint>(x_49) + as_type<uint>(1)));
-    float const x_52 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    arr.arr[x_49] = x_52;
-  }
-  int const x_55 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  float const x_57 = arr.arr[x_55];
-  float const x_59 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_60 = (x_57 == x_59);
-  x_70_phi = x_60;
-  if (x_60) {
-    int const x_64 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    float const x_66 = arr.arr[x_64];
-    float const x_68 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    x_69 = (x_66 == x_68);
-    x_70_phi = x_69;
-  }
-  bool const x_70 = x_70_phi;
-  x_80_phi = x_70;
-  if (x_70) {
-    int const x_74 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    float const x_76 = arr.arr[x_74];
-    float const x_78 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    x_79 = (x_76 == x_78);
-    x_80_phi = x_79;
-  }
-  bool const x_80 = x_80_phi;
-  if (x_80) {
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_87 = arr.arr[x_85];
-    float const x_89 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_91 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_93 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_4) = float4(x_87, x_89, x_91, x_93);
-  } else {
-    float const x_96 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_4) = float4(x_96, x_96, x_96, x_96);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a28e313..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,204 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 124
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %a "a"
-               OpName %x_69 "x_69"
-               OpName %x_79 "x_79"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_80_phi "x_80_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_3_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_arr_float_uint_3_0 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3_0 = OpTypePointer Function %_arr_float_uint_3_0
-         %26 = OpConstantNull %_arr_float_uint_3_0
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-        %113 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_float_uint_3_0 Function %26
-          %a = OpVariable %_ptr_Function_int Function %29
-       %x_69 = OpVariable %_ptr_Function_bool Function %33
-       %x_79 = OpVariable %_ptr_Function_bool Function %33
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %33
-   %x_80_phi = OpVariable %_ptr_Function_bool Function %33
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %41 = OpLoad %float %40
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %47 = OpLoad %float %46
-         %48 = OpCompositeConstruct %_arr_float_uint_3_0 %41 %44 %47
-               OpStore %arr %48
-               OpStore %a %int_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpLoad %int %a
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpSLessThanEqual %bool %53 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %50
-         %58 = OpLabel
-         %61 = OpLoad %int %a
-         %62 = OpIAdd %int %61 %int_1
-               OpStore %a %62
-         %63 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %64 = OpLoad %float %63
-         %66 = OpAccessChain %_ptr_Function_float %arr %61
-               OpStore %66 %64
-               OpBranch %51
-         %51 = OpLabel
-               OpBranch %49
-         %50 = OpLabel
-         %67 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Function_float %arr %68
-         %70 = OpLoad %float %69
-         %71 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %72 = OpLoad %float %71
-         %73 = OpFOrdEqual %bool %70 %72
-               OpStore %x_70_phi %73
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %74
-         %75 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Function_float %arr %77
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %81 = OpLoad %float %80
-         %82 = OpFOrdEqual %bool %79 %81
-               OpStore %x_69 %82
-         %83 = OpLoad %bool %x_69
-               OpStore %x_70_phi %83
-               OpBranch %74
-         %74 = OpLabel
-         %84 = OpLoad %bool %x_70_phi
-               OpStore %x_80_phi %84
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Function_float %arr %88
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %92 = OpLoad %float %91
-         %93 = OpFOrdEqual %bool %90 %92
-               OpStore %x_79 %93
-         %94 = OpLoad %bool %x_79
-               OpStore %x_80_phi %94
-               OpBranch %85
-         %85 = OpLabel
-         %95 = OpLoad %bool %x_80_phi
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %98
-         %97 = OpLabel
-         %99 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Function_float %arr %100
-        %102 = OpLoad %float %101
-        %103 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %104 = OpLoad %float %103
-        %105 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %106 = OpLoad %float %105
-        %107 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %108 = OpLoad %float %107
-        %109 = OpCompositeConstruct %v4float %102 %104 %106 %108
-               OpStore %x_GLF_color %109
-               OpBranch %96
-         %98 = OpLabel
-        %110 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %111 = OpLoad %float %110
-        %112 = OpCompositeConstruct %v4float %111 %111 %111 %111
-               OpStore %x_GLF_color %112
-               OpBranch %96
-         %96 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %113
-        %116 = OpLabel
-        %117 = OpFunctionCall %void %main_1
-        %118 = OpLoad %v4float %x_GLF_color
-        %119 = OpCompositeConstruct %main_out %118
-               OpReturnValue %119
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %121 = OpLabel
-        %122 = OpFunctionCall %main_out %main_inner
-        %123 = OpCompositeExtract %v4float %122 0
-               OpStore %x_GLF_color_1_1 %123
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index dff82e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-array-element-in-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,90 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<f32, 3>;
-  var a : i32;
-  var x_69 : bool;
-  var x_79 : bool;
-  var x_70_phi : bool;
-  var x_80_phi : bool;
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[2];
-  arr = array<f32, 3>(x_34, x_36, x_38);
-  a = 0;
-  loop {
-    let x_44 : i32 = a;
-    let x_46 : i32 = x_9.x_GLF_uniform_int_values[1];
-    if ((x_44 <= x_46)) {
-    } else {
-      break;
-    }
-    let x_49 : i32 = a;
-    a = (x_49 + 1);
-    let x_52 : f32 = x_6.x_GLF_uniform_float_values[0];
-    arr[x_49] = x_52;
-  }
-  let x_55 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_57 : f32 = arr[x_55];
-  let x_59 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_60 : bool = (x_57 == x_59);
-  x_70_phi = x_60;
-  if (x_60) {
-    let x_64 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_66 : f32 = arr[x_64];
-    let x_68 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_69 = (x_66 == x_68);
-    x_70_phi = x_69;
-  }
-  let x_70 : bool = x_70_phi;
-  x_80_phi = x_70;
-  if (x_70) {
-    let x_74 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_76 : f32 = arr[x_74];
-    let x_78 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_79 = (x_76 == x_78);
-    x_80_phi = x_79;
-  }
-  let x_80 : bool = x_80_phi;
-  if (x_80) {
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_87 : f32 = arr[x_85];
-    let x_89 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_91 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_93 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_87, x_89, x_91, x_93);
-  } else {
-    let x_96 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_96, x_96, x_96, x_96);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f581244..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  int i = 0;
-  bool x_63 = false;
-  bool x_64_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  f0 = x_34;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  f1 = x_36;
-  const int x_38 = asint(x_10[1].x);
-  i = x_38;
-  while (true) {
-    const int x_43 = i;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    f0 = abs((1.100000024f * f0));
-    f1 = f0;
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_54 = f1;
-  const float x_56 = asfloat(x_6[1].x);
-  const bool x_57 = (x_54 > x_56);
-  x_64_phi = x_57;
-  if (x_57) {
-    const float x_60 = f1;
-    const float x_62 = asfloat(x_6[2].x);
-    x_63 = (x_60 < x_62);
-    x_64_phi = x_63;
-  }
-  if (x_64_phi) {
-    const int x_69 = asint(x_10[2].x);
-    const int x_72 = asint(x_10[1].x);
-    const int x_75 = asint(x_10[1].x);
-    const int x_78 = asint(x_10[2].x);
-    x_GLF_color = float4(float(x_69), float(x_72), float(x_75), float(x_78));
-  } else {
-    const int x_82 = asint(x_10[1].x);
-    const float x_83 = float(x_82);
-    x_GLF_color = float4(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.msl
deleted file mode 100644
index f0d8a33..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  int i = 0;
-  bool x_63 = false;
-  bool x_64_phi = false;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  f0 = x_34;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  f1 = x_36;
-  int const x_38 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  i = x_38;
-  while (true) {
-    int const x_43 = i;
-    int const x_45 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    float const x_48 = f0;
-    f0 = fabs((1.100000024f * x_48));
-    float const x_51 = f0;
-    f1 = x_51;
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  float const x_54 = f1;
-  float const x_56 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  bool const x_57 = (x_54 > x_56);
-  x_64_phi = x_57;
-  if (x_57) {
-    float const x_60 = f1;
-    float const x_62 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    x_63 = (x_60 < x_62);
-    x_64_phi = x_63;
-  }
-  bool const x_64 = x_64_phi;
-  if (x_64) {
-    int const x_69 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_72 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_75 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_69), float(x_72), float(x_75), float(x_78));
-  } else {
-    int const x_82 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_83 = float(x_82);
-    *(tint_symbol_3) = float4(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a563269..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,183 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f0 "f0"
-               OpName %f1 "f1"
-               OpName %i "i"
-               OpName %x_63 "x_63"
-               OpName %x_64_phi "x_64_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%float_1_10000002 = OpConstant %float 1.10000002
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %f0 = OpVariable %_ptr_Function_float Function %25
-         %f1 = OpVariable %_ptr_Function_float Function %25
-          %i = OpVariable %_ptr_Function_int Function %29
-       %x_63 = OpVariable %_ptr_Function_bool Function %33
-   %x_64_phi = OpVariable %_ptr_Function_bool Function %33
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-               OpStore %f0 %39
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %41 = OpLoad %float %40
-               OpStore %f1 %41
-         %44 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %45 = OpLoad %int %44
-               OpStore %i %45
-               OpBranch %46
-         %46 = OpLabel
-               OpLoopMerge %47 %48 None
-               OpBranch %49
-         %49 = OpLabel
-         %50 = OpLoad %int %i
-         %51 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpSLessThan %bool %50 %52
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpBranch %54
-         %56 = OpLabel
-               OpBranch %47
-         %54 = OpLabel
-         %57 = OpLoad %float %f0
-         %61 = OpFMul %float %float_1_10000002 %57
-         %58 = OpExtInst %float %59 FAbs %61
-               OpStore %f0 %58
-         %62 = OpLoad %float %f0
-               OpStore %f1 %62
-               OpBranch %48
-         %48 = OpLabel
-         %63 = OpLoad %int %i
-         %64 = OpIAdd %int %63 %int_1
-               OpStore %i %64
-               OpBranch %46
-         %47 = OpLabel
-         %65 = OpLoad %float %f1
-         %66 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %67 = OpLoad %float %66
-         %68 = OpFOrdGreaterThan %bool %65 %67
-               OpStore %x_64_phi %68
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpLoad %float %f1
-         %73 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %74 = OpLoad %float %73
-         %75 = OpFOrdLessThan %bool %71 %74
-               OpStore %x_63 %75
-         %76 = OpLoad %bool %x_63
-               OpStore %x_64_phi %76
-               OpBranch %69
-         %69 = OpLabel
-         %77 = OpLoad %bool %x_64_phi
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %82
-         %90 = OpConvertSToF %float %84
-         %91 = OpConvertSToF %float %86
-         %92 = OpConvertSToF %float %88
-         %93 = OpCompositeConstruct %v4float %89 %90 %91 %92
-               OpStore %x_GLF_color %93
-               OpBranch %78
-         %80 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %95 = OpLoad %int %94
-         %96 = OpConvertSToF %float %95
-         %97 = OpCompositeConstruct %v4float %96 %96 %96 %96
-               OpStore %x_GLF_color %97
-               OpBranch %78
-         %78 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-        %101 = OpLabel
-        %102 = OpFunctionCall %void %main_1
-        %103 = OpLoad %v4float %x_GLF_color
-        %104 = OpCompositeConstruct %main_out %103
-               OpReturnValue %104
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %106 = OpLabel
-        %107 = OpFunctionCall %main_out %main_inner
-        %108 = OpCompositeExtract %v4float %107 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0fc1914..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,84 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f0 : f32;
-  var f1 : f32;
-  var i : i32;
-  var x_63 : bool;
-  var x_64_phi : bool;
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[0];
-  f0 = x_34;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  f1 = x_36;
-  let x_38 : i32 = x_10.x_GLF_uniform_int_values[1];
-  i = x_38;
-  loop {
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    let x_48 : f32 = f0;
-    f0 = abs((1.100000024 * x_48));
-    let x_51 : f32 = f0;
-    f1 = x_51;
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_54 : f32 = f1;
-  let x_56 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_57 : bool = (x_54 > x_56);
-  x_64_phi = x_57;
-  if (x_57) {
-    let x_60 : f32 = f1;
-    let x_62 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_63 = (x_60 < x_62);
-    x_64_phi = x_63;
-  }
-  let x_64 : bool = x_64_phi;
-  if (x_64) {
-    let x_69 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_72 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_75 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_10.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_69), f32(x_72), f32(x_75), f32(x_78));
-  } else {
-    let x_82 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_83 : f32 = f32(x_82);
-    x_GLF_color = vec4<f32>(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f581244..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  int i = 0;
-  bool x_63 = false;
-  bool x_64_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  f0 = x_34;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  f1 = x_36;
-  const int x_38 = asint(x_10[1].x);
-  i = x_38;
-  while (true) {
-    const int x_43 = i;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    f0 = abs((1.100000024f * f0));
-    f1 = f0;
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_54 = f1;
-  const float x_56 = asfloat(x_6[1].x);
-  const bool x_57 = (x_54 > x_56);
-  x_64_phi = x_57;
-  if (x_57) {
-    const float x_60 = f1;
-    const float x_62 = asfloat(x_6[2].x);
-    x_63 = (x_60 < x_62);
-    x_64_phi = x_63;
-  }
-  if (x_64_phi) {
-    const int x_69 = asint(x_10[2].x);
-    const int x_72 = asint(x_10[1].x);
-    const int x_75 = asint(x_10[1].x);
-    const int x_78 = asint(x_10[2].x);
-    x_GLF_color = float4(float(x_69), float(x_72), float(x_75), float(x_78));
-  } else {
-    const int x_82 = asint(x_10[1].x);
-    const float x_83 = float(x_82);
-    x_GLF_color = float4(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.msl
deleted file mode 100644
index f0d8a33..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  int i = 0;
-  bool x_63 = false;
-  bool x_64_phi = false;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  f0 = x_34;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  f1 = x_36;
-  int const x_38 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  i = x_38;
-  while (true) {
-    int const x_43 = i;
-    int const x_45 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    float const x_48 = f0;
-    f0 = fabs((1.100000024f * x_48));
-    float const x_51 = f0;
-    f1 = x_51;
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  float const x_54 = f1;
-  float const x_56 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  bool const x_57 = (x_54 > x_56);
-  x_64_phi = x_57;
-  if (x_57) {
-    float const x_60 = f1;
-    float const x_62 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    x_63 = (x_60 < x_62);
-    x_64_phi = x_63;
-  }
-  bool const x_64 = x_64_phi;
-  if (x_64) {
-    int const x_69 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_72 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_75 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_69), float(x_72), float(x_75), float(x_78));
-  } else {
-    int const x_82 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_83 = float(x_82);
-    *(tint_symbol_3) = float4(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a563269..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,183 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f0 "f0"
-               OpName %f1 "f1"
-               OpName %i "i"
-               OpName %x_63 "x_63"
-               OpName %x_64_phi "x_64_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%float_1_10000002 = OpConstant %float 1.10000002
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %f0 = OpVariable %_ptr_Function_float Function %25
-         %f1 = OpVariable %_ptr_Function_float Function %25
-          %i = OpVariable %_ptr_Function_int Function %29
-       %x_63 = OpVariable %_ptr_Function_bool Function %33
-   %x_64_phi = OpVariable %_ptr_Function_bool Function %33
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-               OpStore %f0 %39
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %41 = OpLoad %float %40
-               OpStore %f1 %41
-         %44 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %45 = OpLoad %int %44
-               OpStore %i %45
-               OpBranch %46
-         %46 = OpLabel
-               OpLoopMerge %47 %48 None
-               OpBranch %49
-         %49 = OpLabel
-         %50 = OpLoad %int %i
-         %51 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpSLessThan %bool %50 %52
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpBranch %54
-         %56 = OpLabel
-               OpBranch %47
-         %54 = OpLabel
-         %57 = OpLoad %float %f0
-         %61 = OpFMul %float %float_1_10000002 %57
-         %58 = OpExtInst %float %59 FAbs %61
-               OpStore %f0 %58
-         %62 = OpLoad %float %f0
-               OpStore %f1 %62
-               OpBranch %48
-         %48 = OpLabel
-         %63 = OpLoad %int %i
-         %64 = OpIAdd %int %63 %int_1
-               OpStore %i %64
-               OpBranch %46
-         %47 = OpLabel
-         %65 = OpLoad %float %f1
-         %66 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %67 = OpLoad %float %66
-         %68 = OpFOrdGreaterThan %bool %65 %67
-               OpStore %x_64_phi %68
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpLoad %float %f1
-         %73 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %74 = OpLoad %float %73
-         %75 = OpFOrdLessThan %bool %71 %74
-               OpStore %x_63 %75
-         %76 = OpLoad %bool %x_63
-               OpStore %x_64_phi %76
-               OpBranch %69
-         %69 = OpLabel
-         %77 = OpLoad %bool %x_64_phi
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %82
-         %90 = OpConvertSToF %float %84
-         %91 = OpConvertSToF %float %86
-         %92 = OpConvertSToF %float %88
-         %93 = OpCompositeConstruct %v4float %89 %90 %91 %92
-               OpStore %x_GLF_color %93
-               OpBranch %78
-         %80 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %95 = OpLoad %int %94
-         %96 = OpConvertSToF %float %95
-         %97 = OpCompositeConstruct %v4float %96 %96 %96 %96
-               OpStore %x_GLF_color %97
-               OpBranch %78
-         %78 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-        %101 = OpLabel
-        %102 = OpFunctionCall %void %main_1
-        %103 = OpLoad %v4float %x_GLF_color
-        %104 = OpCompositeConstruct %main_out %103
-               OpReturnValue %104
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %106 = OpLabel
-        %107 = OpFunctionCall %main_out %main_inner
-        %108 = OpCompositeExtract %v4float %107 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 0fc1914..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-float-in-loop-abs/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,84 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f0 : f32;
-  var f1 : f32;
-  var i : i32;
-  var x_63 : bool;
-  var x_64_phi : bool;
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[0];
-  f0 = x_34;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  f1 = x_36;
-  let x_38 : i32 = x_10.x_GLF_uniform_int_values[1];
-  i = x_38;
-  loop {
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    let x_48 : f32 = f0;
-    f0 = abs((1.100000024 * x_48));
-    let x_51 : f32 = f0;
-    f1 = x_51;
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_54 : f32 = f1;
-  let x_56 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_57 : bool = (x_54 > x_56);
-  x_64_phi = x_57;
-  if (x_57) {
-    let x_60 : f32 = f1;
-    let x_62 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_63 = (x_60 < x_62);
-    x_64_phi = x_63;
-  }
-  let x_64 : bool = x_64_phi;
-  if (x_64) {
-    let x_69 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_72 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_75 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_10.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_69), f32(x_72), f32(x_75), f32(x_78));
-  } else {
-    let x_82 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_83 : f32 = f32(x_82);
-    x_GLF_color = vec4<f32>(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a51dc8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,85 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_() {
-  int x_66_phi = 0;
-  const int x_62 = asint(x_7[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_64 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  x_66_phi = x_64;
-  while (true) {
-    int x_67 = 0;
-    const int x_66 = x_66_phi;
-    const int x_70 = asint(x_7[3].x);
-    if ((x_66 < x_70)) {
-    } else {
-      break;
-    }
-    {
-      x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-      x_67 = (x_66 + 1);
-      x_66_phi = x_67;
-    }
-  }
-  if ((x_62 < x_62)) {
-    return;
-  }
-  return;
-}
-
-void main_1() {
-  x_GLF_global_loop_count = 0;
-  while (true) {
-    if ((x_GLF_global_loop_count < 10)) {
-    } else {
-      break;
-    }
-    {
-      x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-      func_();
-    }
-  }
-  {
-    for(; (x_GLF_global_loop_count < 10); x_GLF_global_loop_count = (x_GLF_global_loop_count + 1)) {
-    }
-  }
-  const int x_42 = x_GLF_global_loop_count;
-  const int x_44 = asint(x_7[2].x);
-  if ((x_42 == x_44)) {
-    const int x_50 = asint(x_7[1].x);
-    const float x_51 = float(x_50);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_53 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_54 = float(x_53);
-    x_GLF_color = float4(x_51, x_54, x_54, x_51);
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_58 = float(x_57);
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2d05e09..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_(constant buf0& x_7, thread int* const tint_symbol_3) {
-  int x_66_phi = 0;
-  int const x_62 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_64 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  x_66_phi = x_64;
-  while (true) {
-    int x_67 = 0;
-    int const x_66 = x_66_phi;
-    int const x_70 = x_7.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_66 < x_70)) {
-    } else {
-      break;
-    }
-    {
-      int const x_73 = *(tint_symbol_3);
-      *(tint_symbol_3) = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-      x_67 = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-      x_66_phi = x_67;
-    }
-  }
-  if ((x_62 < x_62)) {
-    return;
-  }
-  return;
-}
-
-void main_1(constant buf0& x_7, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = 0;
-  while (true) {
-    int const x_28 = *(tint_symbol_4);
-    if ((x_28 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_32 = *(tint_symbol_4);
-      *(tint_symbol_4) = as_type<int>((as_type<uint>(x_32) + as_type<uint>(1)));
-      func_(x_7, tint_symbol_4);
-    }
-  }
-  while (true) {
-    int const x_36 = *(tint_symbol_4);
-    if ((x_36 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_40 = *(tint_symbol_4);
-      *(tint_symbol_4) = as_type<int>((as_type<uint>(x_40) + as_type<uint>(1)));
-    }
-  }
-  int const x_42 = *(tint_symbol_4);
-  int const x_44 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_42 == x_44)) {
-    int const x_50 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_51 = float(x_50);
-    int const x_53 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_54 = float(x_53);
-    *(tint_symbol_5) = float4(x_51, x_54, x_54, x_51);
-  } else {
-    int const x_57 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_58 = float(x_57);
-    *(tint_symbol_5) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread int* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  main_1(x_7, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread int tint_symbol_8 = 0;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 9036139..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %x_66_phi "x_66_phi"
-               OpName %x_67 "x_67"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-     %int_10 = OpConstant %int 10
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out
-      %func_ = OpFunction %void None %18
-         %21 = OpLabel
-   %x_66_phi = OpVariable %_ptr_Function_int Function %9
-       %x_67 = OpVariable %_ptr_Function_int Function %9
-         %27 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %30 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %31 = OpLoad %int %30
-               OpStore %x_66_phi %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %37 = OpLoad %int %x_66_phi
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_3
-         %40 = OpLoad %int %39
-         %41 = OpSLessThan %bool %37 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %33
-         %43 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-         %46 = OpLoad %int %x_GLF_global_loop_count
-         %47 = OpIAdd %int %46 %int_1
-               OpStore %x_GLF_global_loop_count %47
-         %48 = OpIAdd %int %37 %int_1
-               OpStore %x_67 %48
-         %49 = OpLoad %int %x_67
-               OpStore %x_66_phi %49
-               OpBranch %32
-         %33 = OpLabel
-         %50 = OpSLessThan %bool %28 %28
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-               OpReturn
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %18
-         %54 = OpLabel
-               OpStore %x_GLF_global_loop_count %int_0
-               OpBranch %55
-         %55 = OpLabel
-               OpLoopMerge %56 %57 None
-               OpBranch %58
-         %58 = OpLabel
-         %59 = OpLoad %int %x_GLF_global_loop_count
-         %61 = OpSLessThan %bool %59 %int_10
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %56
-         %62 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-         %65 = OpLoad %int %x_GLF_global_loop_count
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %x_GLF_global_loop_count %66
-         %67 = OpFunctionCall %void %func_
-               OpBranch %55
-         %56 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %72 = OpLoad %int %x_GLF_global_loop_count
-         %73 = OpSLessThan %bool %72 %int_10
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %69
-         %74 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %int %x_GLF_global_loop_count
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %x_GLF_global_loop_count %78
-               OpBranch %68
-         %69 = OpLabel
-         %79 = OpLoad %int %x_GLF_global_loop_count
-         %81 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %82 = OpLoad %int %81
-         %83 = OpIEqual %bool %79 %82
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %88
-         %90 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %91 = OpLoad %int %90
-         %92 = OpConvertSToF %float %91
-         %93 = OpCompositeConstruct %v4float %89 %92 %92 %89
-               OpStore %x_GLF_color %93
-               OpBranch %84
-         %86 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %95 = OpLoad %int %94
-         %96 = OpConvertSToF %float %95
-         %97 = OpCompositeConstruct %v4float %96 %96 %96 %96
-               OpStore %x_GLF_color %97
-               OpBranch %84
-         %84 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-        %101 = OpLabel
-        %102 = OpFunctionCall %void %main_1
-        %103 = OpLoad %v4float %x_GLF_color
-        %104 = OpCompositeConstruct %main_out %103
-               OpReturnValue %104
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %106 = OpLabel
-        %107 = OpFunctionCall %main_out %main_inner
-        %108 = OpCompositeExtract %v4float %107 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bb1a4df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() {
-  var x_66_phi : i32;
-  let x_62 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_64 : i32 = x_7.x_GLF_uniform_int_values[0];
-  x_66_phi = x_64;
-  loop {
-    var x_67 : i32;
-    let x_66 : i32 = x_66_phi;
-    let x_70 : i32 = x_7.x_GLF_uniform_int_values[3];
-    if ((x_66 < x_70)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_73 : i32 = x_GLF_global_loop_count;
-      x_GLF_global_loop_count = (x_73 + 1);
-      x_67 = (x_66 + 1);
-      x_66_phi = x_67;
-    }
-  }
-  if ((x_62 < x_62)) {
-    return;
-  }
-  return;
-}
-
-fn main_1() {
-  x_GLF_global_loop_count = 0;
-  loop {
-    let x_28 : i32 = x_GLF_global_loop_count;
-    if ((x_28 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_32 : i32 = x_GLF_global_loop_count;
-      x_GLF_global_loop_count = (x_32 + 1);
-      func_();
-    }
-  }
-  loop {
-    let x_36 : i32 = x_GLF_global_loop_count;
-    if ((x_36 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_40 : i32 = x_GLF_global_loop_count;
-      x_GLF_global_loop_count = (x_40 + 1);
-    }
-  }
-  let x_42 : i32 = x_GLF_global_loop_count;
-  let x_44 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if ((x_42 == x_44)) {
-    let x_50 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_51 : f32 = f32(x_50);
-    let x_53 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_54 : f32 = f32(x_53);
-    x_GLF_color = vec4<f32>(x_51, x_54, x_54, x_51);
-  } else {
-    let x_57 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_58 : f32 = f32(x_57);
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a51dc8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,85 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_() {
-  int x_66_phi = 0;
-  const int x_62 = asint(x_7[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_64 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  x_66_phi = x_64;
-  while (true) {
-    int x_67 = 0;
-    const int x_66 = x_66_phi;
-    const int x_70 = asint(x_7[3].x);
-    if ((x_66 < x_70)) {
-    } else {
-      break;
-    }
-    {
-      x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-      x_67 = (x_66 + 1);
-      x_66_phi = x_67;
-    }
-  }
-  if ((x_62 < x_62)) {
-    return;
-  }
-  return;
-}
-
-void main_1() {
-  x_GLF_global_loop_count = 0;
-  while (true) {
-    if ((x_GLF_global_loop_count < 10)) {
-    } else {
-      break;
-    }
-    {
-      x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-      func_();
-    }
-  }
-  {
-    for(; (x_GLF_global_loop_count < 10); x_GLF_global_loop_count = (x_GLF_global_loop_count + 1)) {
-    }
-  }
-  const int x_42 = x_GLF_global_loop_count;
-  const int x_44 = asint(x_7[2].x);
-  if ((x_42 == x_44)) {
-    const int x_50 = asint(x_7[1].x);
-    const float x_51 = float(x_50);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_53 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_54 = float(x_53);
-    x_GLF_color = float4(x_51, x_54, x_54, x_51);
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_58 = float(x_57);
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2d05e09..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_(constant buf0& x_7, thread int* const tint_symbol_3) {
-  int x_66_phi = 0;
-  int const x_62 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_64 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  x_66_phi = x_64;
-  while (true) {
-    int x_67 = 0;
-    int const x_66 = x_66_phi;
-    int const x_70 = x_7.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_66 < x_70)) {
-    } else {
-      break;
-    }
-    {
-      int const x_73 = *(tint_symbol_3);
-      *(tint_symbol_3) = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-      x_67 = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-      x_66_phi = x_67;
-    }
-  }
-  if ((x_62 < x_62)) {
-    return;
-  }
-  return;
-}
-
-void main_1(constant buf0& x_7, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = 0;
-  while (true) {
-    int const x_28 = *(tint_symbol_4);
-    if ((x_28 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_32 = *(tint_symbol_4);
-      *(tint_symbol_4) = as_type<int>((as_type<uint>(x_32) + as_type<uint>(1)));
-      func_(x_7, tint_symbol_4);
-    }
-  }
-  while (true) {
-    int const x_36 = *(tint_symbol_4);
-    if ((x_36 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_40 = *(tint_symbol_4);
-      *(tint_symbol_4) = as_type<int>((as_type<uint>(x_40) + as_type<uint>(1)));
-    }
-  }
-  int const x_42 = *(tint_symbol_4);
-  int const x_44 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_42 == x_44)) {
-    int const x_50 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_51 = float(x_50);
-    int const x_53 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_54 = float(x_53);
-    *(tint_symbol_5) = float4(x_51, x_54, x_54, x_51);
-  } else {
-    int const x_57 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_58 = float(x_57);
-    *(tint_symbol_5) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread int* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  main_1(x_7, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread int tint_symbol_8 = 0;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9036139..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %x_66_phi "x_66_phi"
-               OpName %x_67 "x_67"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-     %int_10 = OpConstant %int 10
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out
-      %func_ = OpFunction %void None %18
-         %21 = OpLabel
-   %x_66_phi = OpVariable %_ptr_Function_int Function %9
-       %x_67 = OpVariable %_ptr_Function_int Function %9
-         %27 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %30 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %31 = OpLoad %int %30
-               OpStore %x_66_phi %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %37 = OpLoad %int %x_66_phi
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_3
-         %40 = OpLoad %int %39
-         %41 = OpSLessThan %bool %37 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %33
-         %43 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-         %46 = OpLoad %int %x_GLF_global_loop_count
-         %47 = OpIAdd %int %46 %int_1
-               OpStore %x_GLF_global_loop_count %47
-         %48 = OpIAdd %int %37 %int_1
-               OpStore %x_67 %48
-         %49 = OpLoad %int %x_67
-               OpStore %x_66_phi %49
-               OpBranch %32
-         %33 = OpLabel
-         %50 = OpSLessThan %bool %28 %28
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-               OpReturn
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %18
-         %54 = OpLabel
-               OpStore %x_GLF_global_loop_count %int_0
-               OpBranch %55
-         %55 = OpLabel
-               OpLoopMerge %56 %57 None
-               OpBranch %58
-         %58 = OpLabel
-         %59 = OpLoad %int %x_GLF_global_loop_count
-         %61 = OpSLessThan %bool %59 %int_10
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %56
-         %62 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-         %65 = OpLoad %int %x_GLF_global_loop_count
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %x_GLF_global_loop_count %66
-         %67 = OpFunctionCall %void %func_
-               OpBranch %55
-         %56 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %72 = OpLoad %int %x_GLF_global_loop_count
-         %73 = OpSLessThan %bool %72 %int_10
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %69
-         %74 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %int %x_GLF_global_loop_count
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %x_GLF_global_loop_count %78
-               OpBranch %68
-         %69 = OpLabel
-         %79 = OpLoad %int %x_GLF_global_loop_count
-         %81 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %82 = OpLoad %int %81
-         %83 = OpIEqual %bool %79 %82
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %88
-         %90 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %91 = OpLoad %int %90
-         %92 = OpConvertSToF %float %91
-         %93 = OpCompositeConstruct %v4float %89 %92 %92 %89
-               OpStore %x_GLF_color %93
-               OpBranch %84
-         %86 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %95 = OpLoad %int %94
-         %96 = OpConvertSToF %float %95
-         %97 = OpCompositeConstruct %v4float %96 %96 %96 %96
-               OpStore %x_GLF_color %97
-               OpBranch %84
-         %84 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-        %101 = OpLabel
-        %102 = OpFunctionCall %void %main_1
-        %103 = OpLoad %v4float %x_GLF_color
-        %104 = OpCompositeConstruct %main_out %103
-               OpReturnValue %104
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %106 = OpLabel
-        %107 = OpFunctionCall %main_out %main_inner
-        %108 = OpCompositeExtract %v4float %107 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index bb1a4df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-global-counter-loop-function/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() {
-  var x_66_phi : i32;
-  let x_62 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_64 : i32 = x_7.x_GLF_uniform_int_values[0];
-  x_66_phi = x_64;
-  loop {
-    var x_67 : i32;
-    let x_66 : i32 = x_66_phi;
-    let x_70 : i32 = x_7.x_GLF_uniform_int_values[3];
-    if ((x_66 < x_70)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_73 : i32 = x_GLF_global_loop_count;
-      x_GLF_global_loop_count = (x_73 + 1);
-      x_67 = (x_66 + 1);
-      x_66_phi = x_67;
-    }
-  }
-  if ((x_62 < x_62)) {
-    return;
-  }
-  return;
-}
-
-fn main_1() {
-  x_GLF_global_loop_count = 0;
-  loop {
-    let x_28 : i32 = x_GLF_global_loop_count;
-    if ((x_28 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_32 : i32 = x_GLF_global_loop_count;
-      x_GLF_global_loop_count = (x_32 + 1);
-      func_();
-    }
-  }
-  loop {
-    let x_36 : i32 = x_GLF_global_loop_count;
-    if ((x_36 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_40 : i32 = x_GLF_global_loop_count;
-      x_GLF_global_loop_count = (x_40 + 1);
-    }
-  }
-  let x_42 : i32 = x_GLF_global_loop_count;
-  let x_44 : i32 = x_7.x_GLF_uniform_int_values[2];
-  if ((x_42 == x_44)) {
-    let x_50 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_51 : f32 = f32(x_50);
-    let x_53 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_54 : f32 = f32(x_53);
-    x_GLF_color = vec4<f32>(x_51, x_54, x_54, x_51);
-  } else {
-    let x_57 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_58 : f32 = f32(x_57);
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 724836b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a[3] = (int[3])0;
-  int b = 0;
-  int c = 0;
-  a[0] = 1;
-  a[1] = 2;
-  a[2] = 3;
-  b = 0;
-  const int x_38 = asint(x_8[0].x);
-  const int x_40 = a[x_38];
-  c = x_40;
-  if ((c > 1)) {
-    x_GLF_color = float4(0.0f, 1.0f, 1.0f, 0.0f);
-    b = (b + 1);
-  }
-  const int x_48 = (b + 1);
-  b = x_48;
-  const int x_50_save = clamp(x_48, 0, 2);
-  const int x_51 = a[x_50_save];
-  a[x_50_save] = (x_51 + 1);
-  const int x_54 = a[2];
-  if ((x_54 == 4)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9358cfe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper {
-  int arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper a = {};
-  int b = 0;
-  int c = 0;
-  a.arr[0] = 1;
-  a.arr[1] = 2;
-  a.arr[2] = 3;
-  b = 0;
-  int const x_38 = x_8.one;
-  int const x_40 = a.arr[x_38];
-  c = x_40;
-  int const x_41 = c;
-  if ((x_41 > 1)) {
-    *(tint_symbol_3) = float4(0.0f, 1.0f, 1.0f, 0.0f);
-    int const x_45 = b;
-    b = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-  }
-  int const x_47 = b;
-  int const x_48 = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-  b = x_48;
-  int const x_50_save = clamp(x_48, 0, 2);
-  int const x_51 = a.arr[x_50_save];
-  a.arr[x_50_save] = as_type<int>((as_type<uint>(x_51) + as_type<uint>(1)));
-  int const x_54 = a.arr[2];
-  if ((x_54 == 4)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 823ca34..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,131 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 77
-; Schema: 0
-               OpCapability Shader
-         %52 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-%_ptr_Function__arr_int_uint_3 = OpTypePointer Function %_arr_int_uint_3
-         %21 = OpConstantNull %_arr_int_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %46 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_0
-      %int_4 = OpConstant %int 4
-         %64 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %65 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %66 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function__arr_int_uint_3 Function %21
-          %b = OpVariable %_ptr_Function_int Function %24
-          %c = OpVariable %_ptr_Function_int Function %24
-         %27 = OpAccessChain %_ptr_Function_int %a %int_0
-               OpStore %27 %int_1
-         %29 = OpAccessChain %_ptr_Function_int %a %int_1
-               OpStore %29 %int_2
-         %31 = OpAccessChain %_ptr_Function_int %a %int_2
-               OpStore %31 %int_3
-               OpStore %b %int_0
-         %35 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %36 = OpLoad %int %35
-         %37 = OpAccessChain %_ptr_Function_int %a %36
-         %38 = OpLoad %int %37
-               OpStore %c %38
-         %39 = OpLoad %int %c
-         %40 = OpSGreaterThan %bool %39 %int_1
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
-               OpStore %x_GLF_color %46
-         %47 = OpLoad %int %b
-         %48 = OpIAdd %int %47 %int_1
-               OpStore %b %48
-               OpBranch %42
-         %42 = OpLabel
-         %49 = OpLoad %int %b
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %b %50
-         %51 = OpExtInst %int %52 SClamp %50 %int_0 %int_2
-         %53 = OpAccessChain %_ptr_Function_int %a %51
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Function_int %a %51
-         %56 = OpIAdd %int %54 %int_1
-               OpStore %55 %56
-         %57 = OpAccessChain %_ptr_Function_int %a %int_2
-         %58 = OpLoad %int %57
-         %60 = OpIEqual %bool %58 %int_4
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpStore %x_GLF_color %64
-               OpBranch %61
-         %63 = OpLabel
-               OpStore %x_GLF_color %65
-               OpBranch %61
-         %61 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %66
-         %69 = OpLabel
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %74 = OpLabel
-         %75 = OpFunctionCall %main_out %main_inner
-         %76 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %76
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f70aa97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : array<i32, 3>;
-  var b : i32;
-  var c : i32;
-  a[0] = 1;
-  a[1] = 2;
-  a[2] = 3;
-  b = 0;
-  let x_38 : i32 = x_8.one;
-  let x_40 : i32 = a[x_38];
-  c = x_40;
-  let x_41 : i32 = c;
-  if ((x_41 > 1)) {
-    x_GLF_color = vec4<f32>(0.0, 1.0, 1.0, 0.0);
-    let x_45 : i32 = b;
-    b = (x_45 + 1);
-  }
-  let x_47 : i32 = b;
-  let x_48 : i32 = (x_47 + 1);
-  b = x_48;
-  let x_50 : ptr<function, i32> = &(a[clamp(x_48, 0, 2)]);
-  let x_51 : i32 = *(x_50);
-  *(x_50) = (x_51 + 1);
-  let x_54 : i32 = a[2];
-  if ((x_54 == 4)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 724836b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a[3] = (int[3])0;
-  int b = 0;
-  int c = 0;
-  a[0] = 1;
-  a[1] = 2;
-  a[2] = 3;
-  b = 0;
-  const int x_38 = asint(x_8[0].x);
-  const int x_40 = a[x_38];
-  c = x_40;
-  if ((c > 1)) {
-    x_GLF_color = float4(0.0f, 1.0f, 1.0f, 0.0f);
-    b = (b + 1);
-  }
-  const int x_48 = (b + 1);
-  b = x_48;
-  const int x_50_save = clamp(x_48, 0, 2);
-  const int x_51 = a[x_50_save];
-  a[x_50_save] = (x_51 + 1);
-  const int x_54 = a[2];
-  if ((x_54 == 4)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9358cfe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper {
-  int arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper a = {};
-  int b = 0;
-  int c = 0;
-  a.arr[0] = 1;
-  a.arr[1] = 2;
-  a.arr[2] = 3;
-  b = 0;
-  int const x_38 = x_8.one;
-  int const x_40 = a.arr[x_38];
-  c = x_40;
-  int const x_41 = c;
-  if ((x_41 > 1)) {
-    *(tint_symbol_3) = float4(0.0f, 1.0f, 1.0f, 0.0f);
-    int const x_45 = b;
-    b = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-  }
-  int const x_47 = b;
-  int const x_48 = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-  b = x_48;
-  int const x_50_save = clamp(x_48, 0, 2);
-  int const x_51 = a.arr[x_50_save];
-  a.arr[x_50_save] = as_type<int>((as_type<uint>(x_51) + as_type<uint>(1)));
-  int const x_54 = a.arr[2];
-  if ((x_54 == 4)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 823ca34..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,131 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 77
-; Schema: 0
-               OpCapability Shader
-         %52 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-%_ptr_Function__arr_int_uint_3 = OpTypePointer Function %_arr_int_uint_3
-         %21 = OpConstantNull %_arr_int_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %46 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_0
-      %int_4 = OpConstant %int 4
-         %64 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %65 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %66 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function__arr_int_uint_3 Function %21
-          %b = OpVariable %_ptr_Function_int Function %24
-          %c = OpVariable %_ptr_Function_int Function %24
-         %27 = OpAccessChain %_ptr_Function_int %a %int_0
-               OpStore %27 %int_1
-         %29 = OpAccessChain %_ptr_Function_int %a %int_1
-               OpStore %29 %int_2
-         %31 = OpAccessChain %_ptr_Function_int %a %int_2
-               OpStore %31 %int_3
-               OpStore %b %int_0
-         %35 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %36 = OpLoad %int %35
-         %37 = OpAccessChain %_ptr_Function_int %a %36
-         %38 = OpLoad %int %37
-               OpStore %c %38
-         %39 = OpLoad %int %c
-         %40 = OpSGreaterThan %bool %39 %int_1
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
-               OpStore %x_GLF_color %46
-         %47 = OpLoad %int %b
-         %48 = OpIAdd %int %47 %int_1
-               OpStore %b %48
-               OpBranch %42
-         %42 = OpLabel
-         %49 = OpLoad %int %b
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %b %50
-         %51 = OpExtInst %int %52 SClamp %50 %int_0 %int_2
-         %53 = OpAccessChain %_ptr_Function_int %a %51
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Function_int %a %51
-         %56 = OpIAdd %int %54 %int_1
-               OpStore %55 %56
-         %57 = OpAccessChain %_ptr_Function_int %a %int_2
-         %58 = OpLoad %int %57
-         %60 = OpIEqual %bool %58 %int_4
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpStore %x_GLF_color %64
-               OpBranch %61
-         %63 = OpLabel
-               OpStore %x_GLF_color %65
-               OpBranch %61
-         %61 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %66
-         %69 = OpLabel
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %74 = OpLabel
-         %75 = OpFunctionCall %main_out %main_inner
-         %76 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %76
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f70aa97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-inside-clamp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : array<i32, 3>;
-  var b : i32;
-  var c : i32;
-  a[0] = 1;
-  a[1] = 2;
-  a[2] = 3;
-  b = 0;
-  let x_38 : i32 = x_8.one;
-  let x_40 : i32 = a[x_38];
-  c = x_40;
-  let x_41 : i32 = c;
-  if ((x_41 > 1)) {
-    x_GLF_color = vec4<f32>(0.0, 1.0, 1.0, 0.0);
-    let x_45 : i32 = b;
-    b = (x_45 + 1);
-  }
-  let x_47 : i32 = b;
-  let x_48 : i32 = (x_47 + 1);
-  b = x_48;
-  let x_50 : ptr<function, i32> = &(a[clamp(x_48, 0, 2)]);
-  let x_51 : i32 = *(x_50);
-  *(x_50) = (x_51 + 1);
-  let x_54 : i32 = a[2];
-  if ((x_54 == 4)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ae9dea0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,66 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  int indexable[9] = (int[9])0;
-  const int x_38 = asint(x_6[2].x);
-  a = x_38;
-  const int x_40 = asint(x_6[3].x);
-  i = x_40;
-  while (true) {
-    const int x_45 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    const int x_50 = i;
-    const int x_52 = asint(x_6[4].x);
-    const int tint_symbol_2[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
-    indexable = tint_symbol_2;
-    const int x_55 = indexable[(x_50 % x_52)];
-    a = (a + x_55);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_60 = a;
-  const int x_62 = asint(x_6[1].x);
-  if ((x_60 == x_62)) {
-    const int x_68 = asint(x_6[2].x);
-    const int x_71 = asint(x_6[3].x);
-    const int x_74 = asint(x_6[3].x);
-    const int x_77 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_68), float(x_71), float(x_74), float(x_77));
-  } else {
-    const int x_81 = asint(x_6[3].x);
-    const float x_82 = float(x_81);
-    x_GLF_color = float4(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.msl
deleted file mode 100644
index 09f1285..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  int a = 0;
-  int i = 0;
-  tint_array_wrapper_1 indexable = {};
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_38;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  i = x_40;
-  while (true) {
-    int const x_45 = i;
-    int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    int const x_52 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={1, 2, 3, 4, 5, 6, 7, 8, 9}};
-    indexable = tint_symbol_2;
-    int const x_55 = indexable.arr[(x_50 % x_52)];
-    int const x_56 = a;
-    a = as_type<int>((as_type<uint>(x_56) + as_type<uint>(x_55)));
-    {
-      int const x_58 = i;
-      i = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-    }
-  }
-  int const x_60 = a;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_60 == x_62)) {
-    int const x_68 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_74 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_4) = float4(float(x_68), float(x_71), float(x_74), float(x_77));
-  } else {
-    int const x_81 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    float const x_82 = float(x_81);
-    *(tint_symbol_4) = float4(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 181a7a2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,159 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 102
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_9 = OpConstant %uint 9
-%_arr_int_uint_9 = OpTypeArray %int %uint_9
-%_ptr_Function__arr_int_uint_9 = OpTypePointer Function %_arr_int_uint_9
-         %27 = OpConstantNull %_arr_int_uint_9
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-         %59 = OpConstantComposite %_arr_int_uint_9 %int_1 %int_2 %int_3 %int_4 %int_5 %int_6 %int_7 %int_8 %int_9
-   %main_out = OpTypeStruct %v4float
-         %91 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_9 Function %27
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %32 = OpLoad %int %31
-               OpStore %a %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %35 = OpLoad %int %34
-               OpStore %i %35
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpSLessThan %bool %40 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %37
-         %46 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %52 = OpLoad %int %51
-               OpStore %indexable %59
-         %60 = OpSMod %int %49 %52
-         %61 = OpAccessChain %_ptr_Function_int %indexable %60
-         %62 = OpLoad %int %61
-         %63 = OpLoad %int %a
-         %64 = OpIAdd %int %63 %62
-               OpStore %a %64
-               OpBranch %38
-         %38 = OpLabel
-         %65 = OpLoad %int %i
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %i %66
-               OpBranch %36
-         %37 = OpLabel
-         %67 = OpLoad %int %a
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpIEqual %bool %67 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %81 = OpLoad %int %80
-         %82 = OpConvertSToF %float %75
-         %83 = OpConvertSToF %float %77
-         %84 = OpConvertSToF %float %79
-         %85 = OpConvertSToF %float %81
-         %86 = OpCompositeConstruct %v4float %82 %83 %84 %85
-               OpStore %x_GLF_color %86
-               OpBranch %71
-         %73 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %88
-         %90 = OpCompositeConstruct %v4float %89 %89 %89 %89
-               OpStore %x_GLF_color %90
-               OpBranch %71
-         %71 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %91
-         %94 = OpLabel
-         %95 = OpFunctionCall %void %main_1
-         %96 = OpLoad %v4float %x_GLF_color
-         %97 = OpCompositeConstruct %main_out %96
-               OpReturnValue %97
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %99 = OpLabel
-        %100 = OpFunctionCall %main_out %main_inner
-        %101 = OpCompositeExtract %v4float %100 0
-               OpStore %x_GLF_color_1_1 %101
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 486246c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  var indexable : array<i32, 9>;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_38;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[3];
-  i = x_40;
-  loop {
-    let x_45 : i32 = i;
-    let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_6.x_GLF_uniform_int_values[4];
-    indexable = array<i32, 9>(1, 2, 3, 4, 5, 6, 7, 8, 9);
-    let x_55 : i32 = indexable[(x_50 % x_52)];
-    let x_56 : i32 = a;
-    a = (x_56 + x_55);
-
-    continuing {
-      let x_58 : i32 = i;
-      i = (x_58 + 1);
-    }
-  }
-  let x_60 : i32 = a;
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_60 == x_62)) {
-    let x_68 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_74 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_68), f32(x_71), f32(x_74), f32(x_77));
-  } else {
-    let x_81 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_82 : f32 = f32(x_81);
-    x_GLF_color = vec4<f32>(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index ae9dea0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,66 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  int indexable[9] = (int[9])0;
-  const int x_38 = asint(x_6[2].x);
-  a = x_38;
-  const int x_40 = asint(x_6[3].x);
-  i = x_40;
-  while (true) {
-    const int x_45 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    const int x_50 = i;
-    const int x_52 = asint(x_6[4].x);
-    const int tint_symbol_2[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
-    indexable = tint_symbol_2;
-    const int x_55 = indexable[(x_50 % x_52)];
-    a = (a + x_55);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_60 = a;
-  const int x_62 = asint(x_6[1].x);
-  if ((x_60 == x_62)) {
-    const int x_68 = asint(x_6[2].x);
-    const int x_71 = asint(x_6[3].x);
-    const int x_74 = asint(x_6[3].x);
-    const int x_77 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_68), float(x_71), float(x_74), float(x_77));
-  } else {
-    const int x_81 = asint(x_6[3].x);
-    const float x_82 = float(x_81);
-    x_GLF_color = float4(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.msl
deleted file mode 100644
index 09f1285..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  int a = 0;
-  int i = 0;
-  tint_array_wrapper_1 indexable = {};
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_38;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  i = x_40;
-  while (true) {
-    int const x_45 = i;
-    int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    int const x_52 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={1, 2, 3, 4, 5, 6, 7, 8, 9}};
-    indexable = tint_symbol_2;
-    int const x_55 = indexable.arr[(x_50 % x_52)];
-    int const x_56 = a;
-    a = as_type<int>((as_type<uint>(x_56) + as_type<uint>(x_55)));
-    {
-      int const x_58 = i;
-      i = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-    }
-  }
-  int const x_60 = a;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_60 == x_62)) {
-    int const x_68 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_74 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_4) = float4(float(x_68), float(x_71), float(x_74), float(x_77));
-  } else {
-    int const x_81 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    float const x_82 = float(x_81);
-    *(tint_symbol_4) = float4(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 181a7a2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,159 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 102
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_9 = OpConstant %uint 9
-%_arr_int_uint_9 = OpTypeArray %int %uint_9
-%_ptr_Function__arr_int_uint_9 = OpTypePointer Function %_arr_int_uint_9
-         %27 = OpConstantNull %_arr_int_uint_9
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-         %59 = OpConstantComposite %_arr_int_uint_9 %int_1 %int_2 %int_3 %int_4 %int_5 %int_6 %int_7 %int_8 %int_9
-   %main_out = OpTypeStruct %v4float
-         %91 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_9 Function %27
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %32 = OpLoad %int %31
-               OpStore %a %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %35 = OpLoad %int %34
-               OpStore %i %35
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpSLessThan %bool %40 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %37
-         %46 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %52 = OpLoad %int %51
-               OpStore %indexable %59
-         %60 = OpSMod %int %49 %52
-         %61 = OpAccessChain %_ptr_Function_int %indexable %60
-         %62 = OpLoad %int %61
-         %63 = OpLoad %int %a
-         %64 = OpIAdd %int %63 %62
-               OpStore %a %64
-               OpBranch %38
-         %38 = OpLabel
-         %65 = OpLoad %int %i
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %i %66
-               OpBranch %36
-         %37 = OpLabel
-         %67 = OpLoad %int %a
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpIEqual %bool %67 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %81 = OpLoad %int %80
-         %82 = OpConvertSToF %float %75
-         %83 = OpConvertSToF %float %77
-         %84 = OpConvertSToF %float %79
-         %85 = OpConvertSToF %float %81
-         %86 = OpCompositeConstruct %v4float %82 %83 %84 %85
-               OpStore %x_GLF_color %86
-               OpBranch %71
-         %73 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %88
-         %90 = OpCompositeConstruct %v4float %89 %89 %89 %89
-               OpStore %x_GLF_color %90
-               OpBranch %71
-         %71 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %91
-         %94 = OpLabel
-         %95 = OpFunctionCall %void %main_1
-         %96 = OpLoad %v4float %x_GLF_color
-         %97 = OpCompositeConstruct %main_out %96
-               OpReturnValue %97
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %99 = OpLabel
-        %100 = OpFunctionCall %main_out %main_inner
-        %101 = OpCompositeExtract %v4float %100 0
-               OpStore %x_GLF_color_1_1 %101
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 486246c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-int-loop-counter-mod-array/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  var indexable : array<i32, 9>;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_38;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[3];
-  i = x_40;
-  loop {
-    let x_45 : i32 = i;
-    let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_6.x_GLF_uniform_int_values[4];
-    indexable = array<i32, 9>(1, 2, 3, 4, 5, 6, 7, 8, 9);
-    let x_55 : i32 = indexable[(x_50 % x_52)];
-    let x_56 : i32 = a;
-    a = (x_56 + x_55);
-
-    continuing {
-      let x_58 : i32 = i;
-      i = (x_58 + 1);
-    }
-  }
-  let x_60 : i32 = a;
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_60 == x_62)) {
-    let x_68 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_74 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_68), f32(x_71), f32(x_74), f32(x_77));
-  } else {
-    let x_81 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_82 : f32 = f32(x_81);
-    x_GLF_color = vec4<f32>(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 23abc3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,98 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  bool x_76 = false;
-  bool x_83 = false;
-  bool x_77_phi = false;
-  bool x_84_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_31;
-  const int x_33 = asint(x_6[2].x);
-  b = x_33;
-  c = 1;
-  while (true) {
-    const int x_38 = b;
-    const int x_40 = asint(x_6[4].x);
-    if (((x_38 < x_40) & (a < 10))) {
-    } else {
-      break;
-    }
-    if ((c > 5)) {
-      break;
-    }
-    a = (a + 1);
-    c = (c + 1);
-    b = (b + 1);
-  }
-  while (true) {
-    const int x_60 = a;
-    const int x_62 = asint(x_6[1].x);
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const int x_67 = a;
-  const int x_69 = asint(x_6[1].x);
-  const bool x_70 = (x_67 == x_69);
-  x_77_phi = x_70;
-  if (x_70) {
-    const int x_73 = b;
-    const int x_75 = asint(x_6[3].x);
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  const bool x_77 = x_77_phi;
-  x_84_phi = x_77;
-  if (x_77) {
-    const int x_80 = c;
-    const int x_82 = asint(x_6[3].x);
-    x_83 = (x_80 == x_82);
-    x_84_phi = x_83;
-  }
-  if (x_84_phi) {
-    const int x_89 = asint(x_6[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_92 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_95 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_98 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_89), float(x_92), float(x_95), float(x_98));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_102 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_103 = float(x_102);
-    x_GLF_color = float4(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.msl
deleted file mode 100644
index 513a3b0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  bool x_76 = false;
-  bool x_83 = false;
-  bool x_77_phi = false;
-  bool x_84_phi = false;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_31;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  b = x_33;
-  c = 1;
-  while (true) {
-    int const x_38 = b;
-    int const x_40 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_42 = a;
-    if (((x_38 < x_40) & (x_42 < 10))) {
-    } else {
-      break;
-    }
-    int const x_46 = c;
-    if ((x_46 > 5)) {
-      break;
-    }
-    int const x_50 = a;
-    a = as_type<int>((as_type<uint>(x_50) + as_type<uint>(1)));
-    int const x_52 = c;
-    c = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    int const x_54 = b;
-    b = as_type<int>((as_type<uint>(x_54) + as_type<uint>(1)));
-  }
-  while (true) {
-    int const x_60 = a;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-    {
-      int const x_65 = a;
-      a = as_type<int>((as_type<uint>(x_65) + as_type<uint>(1)));
-    }
-  }
-  int const x_67 = a;
-  int const x_69 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  bool const x_70 = (x_67 == x_69);
-  x_77_phi = x_70;
-  if (x_70) {
-    int const x_73 = b;
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  bool const x_77 = x_77_phi;
-  x_84_phi = x_77;
-  if (x_77) {
-    int const x_80 = c;
-    int const x_82 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    x_83 = (x_80 == x_82);
-    x_84_phi = x_83;
-  }
-  bool const x_84 = x_84_phi;
-  if (x_84) {
-    int const x_89 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_92 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_95 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_98 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_89), float(x_92), float(x_95), float(x_98));
-  } else {
-    int const x_102 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_103 = float(x_102);
-    *(tint_symbol_3) = float4(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d0e8ea0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,218 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 132
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_76 "x_76"
-               OpName %x_83 "x_83"
-               OpName %x_77_phi "x_77_phi"
-               OpName %x_84_phi "x_84_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_4 = OpConstant %int 4
-     %int_10 = OpConstant %int 10
-      %int_5 = OpConstant %int 5
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %121 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %c = OpVariable %_ptr_Function_int Function %21
-       %x_76 = OpVariable %_ptr_Function_bool Function %27
-       %x_83 = OpVariable %_ptr_Function_bool Function %27
-   %x_77_phi = OpVariable %_ptr_Function_bool Function %27
-   %x_84_phi = OpVariable %_ptr_Function_bool Function %27
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %35 = OpLoad %int %34
-               OpStore %a %35
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %38 = OpLoad %int %37
-               OpStore %b %38
-               OpStore %c %int_1
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %b
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %47 = OpLoad %int %46
-         %48 = OpLoad %int %a
-         %49 = OpSLessThan %bool %44 %47
-         %51 = OpSLessThan %bool %48 %int_10
-         %52 = OpLogicalAnd %bool %49 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %41
-         %53 = OpLabel
-         %56 = OpLoad %int %c
-         %58 = OpSGreaterThan %bool %56 %int_5
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpBranch %41
-         %59 = OpLabel
-         %61 = OpLoad %int %a
-         %62 = OpIAdd %int %61 %int_1
-               OpStore %a %62
-         %63 = OpLoad %int %c
-         %64 = OpIAdd %int %63 %int_1
-               OpStore %c %64
-         %65 = OpLoad %int %b
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %b %66
-               OpBranch %42
-         %42 = OpLabel
-               OpBranch %40
-         %41 = OpLabel
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %a
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %68
-         %75 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-         %78 = OpLoad %int %a
-         %79 = OpIAdd %int %78 %int_1
-               OpStore %a %79
-               OpBranch %67
-         %68 = OpLabel
-         %80 = OpLoad %int %a
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpIEqual %bool %80 %82
-               OpStore %x_77_phi %83
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %84
-         %85 = OpLabel
-         %86 = OpLoad %int %b
-         %88 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %89 = OpLoad %int %88
-         %90 = OpIEqual %bool %86 %89
-               OpStore %x_76 %90
-         %91 = OpLoad %bool %x_76
-               OpStore %x_77_phi %91
-               OpBranch %84
-         %84 = OpLabel
-         %92 = OpLoad %bool %x_77_phi
-               OpStore %x_84_phi %92
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-         %95 = OpLoad %int %c
-         %96 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %97 = OpLoad %int %96
-         %98 = OpIEqual %bool %95 %97
-               OpStore %x_83 %98
-         %99 = OpLoad %bool %x_83
-               OpStore %x_84_phi %99
-               OpBranch %93
-         %93 = OpLabel
-        %100 = OpLoad %bool %x_84_phi
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-        %104 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %111 = OpLoad %int %110
-        %112 = OpConvertSToF %float %105
-        %113 = OpConvertSToF %float %107
-        %114 = OpConvertSToF %float %109
-        %115 = OpConvertSToF %float %111
-        %116 = OpCompositeConstruct %v4float %112 %113 %114 %115
-               OpStore %x_GLF_color %116
-               OpBranch %101
-        %103 = OpLabel
-        %117 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %118 = OpLoad %int %117
-        %119 = OpConvertSToF %float %118
-        %120 = OpCompositeConstruct %v4float %119 %119 %119 %119
-               OpStore %x_GLF_color %120
-               OpBranch %101
-        %101 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %121
-        %124 = OpLabel
-        %125 = OpFunctionCall %void %main_1
-        %126 = OpLoad %v4float %x_GLF_color
-        %127 = OpCompositeConstruct %main_out %126
-               OpReturnValue %127
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %129 = OpLabel
-        %130 = OpFunctionCall %main_out %main_inner
-        %131 = OpCompositeExtract %v4float %130 0
-               OpStore %x_GLF_color_1_1 %131
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5501dd7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var x_76 : bool;
-  var x_83 : bool;
-  var x_77_phi : bool;
-  var x_84_phi : bool;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_31;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[2];
-  b = x_33;
-  c = 1;
-  loop {
-    let x_38 : i32 = b;
-    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_42 : i32 = a;
-    if (((x_38 < x_40) & (x_42 < 10))) {
-    } else {
-      break;
-    }
-    let x_46 : i32 = c;
-    if ((x_46 > 5)) {
-      break;
-    }
-    let x_50 : i32 = a;
-    a = (x_50 + 1);
-    let x_52 : i32 = c;
-    c = (x_52 + 1);
-    let x_54 : i32 = b;
-    b = (x_54 + 1);
-  }
-  loop {
-    let x_60 : i32 = a;
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_65 : i32 = a;
-      a = (x_65 + 1);
-    }
-  }
-  let x_67 : i32 = a;
-  let x_69 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_70 : bool = (x_67 == x_69);
-  x_77_phi = x_70;
-  if (x_70) {
-    let x_73 : i32 = b;
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  let x_77 : bool = x_77_phi;
-  x_84_phi = x_77;
-  if (x_77) {
-    let x_80 : i32 = c;
-    let x_82 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_83 = (x_80 == x_82);
-    x_84_phi = x_83;
-  }
-  let x_84 : bool = x_84_phi;
-  if (x_84) {
-    let x_89 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_92 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_95 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_98 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_89), f32(x_92), f32(x_95), f32(x_98));
-  } else {
-    let x_102 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_103 : f32 = f32(x_102);
-    x_GLF_color = vec4<f32>(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index bd85b49..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,102 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  bool x_76 = false;
-  bool x_83 = false;
-  bool x_77_phi = false;
-  bool x_84_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_31;
-  const int x_33 = asint(x_6[2].x);
-  b = x_33;
-  c = 1;
-  while (true) {
-    const int x_38 = b;
-    const int x_40 = asint(x_6[4].x);
-    bool tint_tmp = (x_38 < x_40);
-    if (tint_tmp) {
-      tint_tmp = (a < 10);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    if ((c > 5)) {
-      break;
-    }
-    a = (a + 1);
-    c = (c + 1);
-    b = (b + 1);
-  }
-  while (true) {
-    const int x_60 = a;
-    const int x_62 = asint(x_6[1].x);
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const int x_67 = a;
-  const int x_69 = asint(x_6[1].x);
-  const bool x_70 = (x_67 == x_69);
-  x_77_phi = x_70;
-  if (x_70) {
-    const int x_73 = b;
-    const int x_75 = asint(x_6[3].x);
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  const bool x_77 = x_77_phi;
-  x_84_phi = x_77;
-  if (x_77) {
-    const int x_80 = c;
-    const int x_82 = asint(x_6[3].x);
-    x_83 = (x_80 == x_82);
-    x_84_phi = x_83;
-  }
-  if (x_84_phi) {
-    const int x_89 = asint(x_6[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_92 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_95 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_98 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_89), float(x_92), float(x_95), float(x_98));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_102 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_103 = float(x_102);
-    x_GLF_color = float4(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0b75bf9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  bool x_76 = false;
-  bool x_83 = false;
-  bool x_77_phi = false;
-  bool x_84_phi = false;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_31;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  b = x_33;
-  c = 1;
-  while (true) {
-    int const x_38 = b;
-    int const x_40 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    int const x_42 = a;
-    if (((x_38 < x_40) && (x_42 < 10))) {
-    } else {
-      break;
-    }
-    int const x_46 = c;
-    if ((x_46 > 5)) {
-      break;
-    }
-    int const x_50 = a;
-    a = as_type<int>((as_type<uint>(x_50) + as_type<uint>(1)));
-    int const x_52 = c;
-    c = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    int const x_54 = b;
-    b = as_type<int>((as_type<uint>(x_54) + as_type<uint>(1)));
-  }
-  while (true) {
-    int const x_60 = a;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-    {
-      int const x_65 = a;
-      a = as_type<int>((as_type<uint>(x_65) + as_type<uint>(1)));
-    }
-  }
-  int const x_67 = a;
-  int const x_69 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  bool const x_70 = (x_67 == x_69);
-  x_77_phi = x_70;
-  if (x_70) {
-    int const x_73 = b;
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  bool const x_77 = x_77_phi;
-  x_84_phi = x_77;
-  if (x_77) {
-    int const x_80 = c;
-    int const x_82 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    x_83 = (x_80 == x_82);
-    x_84_phi = x_83;
-  }
-  bool const x_84 = x_84_phi;
-  if (x_84) {
-    int const x_89 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_92 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_95 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_98 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_89), float(x_92), float(x_95), float(x_98));
-  } else {
-    int const x_102 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_103 = float(x_102);
-    *(tint_symbol_3) = float4(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index dd6dbe2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,223 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 134
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_76 "x_76"
-               OpName %x_83 "x_83"
-               OpName %x_77_phi "x_77_phi"
-               OpName %x_84_phi "x_84_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_4 = OpConstant %int 4
-     %int_10 = OpConstant %int 10
-      %int_5 = OpConstant %int 5
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %123 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %b = OpVariable %_ptr_Function_int Function %21
-          %c = OpVariable %_ptr_Function_int Function %21
-       %x_76 = OpVariable %_ptr_Function_bool Function %27
-       %x_83 = OpVariable %_ptr_Function_bool Function %27
-   %x_77_phi = OpVariable %_ptr_Function_bool Function %27
-   %x_84_phi = OpVariable %_ptr_Function_bool Function %27
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %35 = OpLoad %int %34
-               OpStore %a %35
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %38 = OpLoad %int %37
-               OpStore %b %38
-               OpStore %c %int_1
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %b
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %47 = OpLoad %int %46
-         %48 = OpLoad %int %a
-         %49 = OpSLessThan %bool %44 %47
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-         %53 = OpSLessThan %bool %48 %int_10
-               OpBranch %50
-         %50 = OpLabel
-         %54 = OpPhi %bool %49 %43 %53 %51
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %41
-         %55 = OpLabel
-         %58 = OpLoad %int %c
-         %60 = OpSGreaterThan %bool %58 %int_5
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %61
-         %62 = OpLabel
-               OpBranch %41
-         %61 = OpLabel
-         %63 = OpLoad %int %a
-         %64 = OpIAdd %int %63 %int_1
-               OpStore %a %64
-         %65 = OpLoad %int %c
-         %66 = OpIAdd %int %65 %int_1
-               OpStore %c %66
-         %67 = OpLoad %int %b
-         %68 = OpIAdd %int %67 %int_1
-               OpStore %b %68
-               OpBranch %42
-         %42 = OpLabel
-               OpBranch %40
-         %41 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %a
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpSLessThan %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %70
-         %77 = OpLabel
-               OpBranch %71
-         %71 = OpLabel
-         %80 = OpLoad %int %a
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %a %81
-               OpBranch %69
-         %70 = OpLabel
-         %82 = OpLoad %int %a
-         %83 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpIEqual %bool %82 %84
-               OpStore %x_77_phi %85
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpLoad %int %b
-         %90 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %91 = OpLoad %int %90
-         %92 = OpIEqual %bool %88 %91
-               OpStore %x_76 %92
-         %93 = OpLoad %bool %x_76
-               OpStore %x_77_phi %93
-               OpBranch %86
-         %86 = OpLabel
-         %94 = OpLoad %bool %x_77_phi
-               OpStore %x_84_phi %94
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-         %97 = OpLoad %int %c
-         %98 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %99 = OpLoad %int %98
-        %100 = OpIEqual %bool %97 %99
-               OpStore %x_83 %100
-        %101 = OpLoad %bool %x_83
-               OpStore %x_84_phi %101
-               OpBranch %95
-         %95 = OpLabel
-        %102 = OpLoad %bool %x_84_phi
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %111 = OpLoad %int %110
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %113 = OpLoad %int %112
-        %114 = OpConvertSToF %float %107
-        %115 = OpConvertSToF %float %109
-        %116 = OpConvertSToF %float %111
-        %117 = OpConvertSToF %float %113
-        %118 = OpCompositeConstruct %v4float %114 %115 %116 %117
-               OpStore %x_GLF_color %118
-               OpBranch %103
-        %105 = OpLabel
-        %119 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %120 = OpLoad %int %119
-        %121 = OpConvertSToF %float %120
-        %122 = OpCompositeConstruct %v4float %121 %121 %121 %121
-               OpStore %x_GLF_color %122
-               OpBranch %103
-        %103 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %123
-        %126 = OpLabel
-        %127 = OpFunctionCall %void %main_1
-        %128 = OpLoad %v4float %x_GLF_color
-        %129 = OpCompositeConstruct %main_out %128
-               OpReturnValue %129
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %131 = OpLabel
-        %132 = OpFunctionCall %main_out %main_inner
-        %133 = OpCompositeExtract %v4float %132 0
-               OpStore %x_GLF_color_1_1 %133
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5a769f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-multiple-integers/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var x_76 : bool;
-  var x_83 : bool;
-  var x_77_phi : bool;
-  var x_84_phi : bool;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_31;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[2];
-  b = x_33;
-  c = 1;
-  loop {
-    let x_38 : i32 = b;
-    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
-    let x_42 : i32 = a;
-    if (((x_38 < x_40) && (x_42 < 10))) {
-    } else {
-      break;
-    }
-    let x_46 : i32 = c;
-    if ((x_46 > 5)) {
-      break;
-    }
-    let x_50 : i32 = a;
-    a = (x_50 + 1);
-    let x_52 : i32 = c;
-    c = (x_52 + 1);
-    let x_54 : i32 = b;
-    b = (x_54 + 1);
-  }
-  loop {
-    let x_60 : i32 = a;
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_65 : i32 = a;
-      a = (x_65 + 1);
-    }
-  }
-  let x_67 : i32 = a;
-  let x_69 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_70 : bool = (x_67 == x_69);
-  x_77_phi = x_70;
-  if (x_70) {
-    let x_73 : i32 = b;
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  let x_77 : bool = x_77_phi;
-  x_84_phi = x_77;
-  if (x_77) {
-    let x_80 : i32 = c;
-    let x_82 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_83 = (x_80 == x_82);
-    x_84_phi = x_83;
-  }
-  let x_84 : bool = x_84_phi;
-  if (x_84) {
-    let x_89 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_92 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_95 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_98 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_89), f32(x_92), f32(x_95), f32(x_98));
-  } else {
-    let x_102 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_103 : f32 = f32(x_102);
-    x_GLF_color = vec4<f32>(x_103, x_103, x_103, x_103);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e6a3560..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,74 +0,0 @@
-SKIP: FAILED
-
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3x3 m = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int a = 0;
-  float3 arr[2] = (float3[2])0;
-  float3 v = float3(0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_46 = float(x_45);
-  m = float3x3(float3(x_46, 0.0f, 0.0f), float3(0.0f, x_46, 0.0f), float3(0.0f, 0.0f, x_46));
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_52 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = x_52;
-  const int x_53 = a;
-  const int x_54 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_56 = asfloat(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  set_float3(m[x_53], x_54, x_56);
-  const float3 x_59 = m[1];
-  const float3 x_61 = m[1];
-  const float3 tint_symbol_4[2] = {x_59, x_61};
-  arr = tint_symbol_4;
-  const float x_64 = asfloat(x_9[1].x);
-  v = float3(x_64, x_64, x_64);
-  const float3 x_68 = arr[a];
-  v = (v + x_68);
-  const float3 x_71 = v;
-  const int x_73 = asint(x_6[1].x);
-  const int x_76 = asint(x_6[2].x);
-  const int x_79 = asint(x_6[1].x);
-  if (all((x_71 == float3(float(x_73), float(x_76), float(x_79))))) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_88 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_91 = asint(x_6[3].x);
-    const int x_94 = asint(x_6[3].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_97 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_88), float(x_91), float(x_94), float(x_97));
-  } else {
-    const int x_101 = asint(x_6[3].x);
-    const float x_102 = float(x_101);
-    x_GLF_color = float4(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_5 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000001C5FF133840(29,14-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.msl
deleted file mode 100644
index ee2987f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  float3 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  float3x3 m = float3x3(0.0f);
-  int a = 0;
-  tint_array_wrapper_2 arr = {};
-  float3 v = 0.0f;
-  int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_46 = float(x_45);
-  m = float3x3(float3(x_46, 0.0f, 0.0f), float3(0.0f, x_46, 0.0f), float3(0.0f, 0.0f, x_46));
-  int const x_52 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_52;
-  int const x_53 = a;
-  int const x_54 = a;
-  float const x_56 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  m[x_53][x_54] = x_56;
-  float3 const x_59 = m[1];
-  float3 const x_61 = m[1];
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_59, x_61}};
-  arr = tint_symbol_2;
-  float const x_64 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  v = float3(x_64, x_64, x_64);
-  int const x_66 = a;
-  float3 const x_68 = arr.arr[x_66];
-  float3 const x_69 = v;
-  v = (x_69 + x_68);
-  float3 const x_71 = v;
-  int const x_73 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_76 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_79 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if (all((x_71 == float3(float(x_73), float(x_76), float(x_79))))) {
-    int const x_88 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_91 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_94 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_97 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_88), float(x_91), float(x_94), float(x_97));
-  } else {
-    int const x_101 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    float const x_102 = float(x_101);
-    *(tint_symbol_4) = float4(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 27ab1ca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,180 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %a "a"
-               OpName %arr "arr"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_v3float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat3v3float = OpTypeMatrix %v3float 3
-%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
-         %28 = OpConstantNull %mat3v3float
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-%_arr_v3float_uint_2 = OpTypeArray %v3float %uint_2
-%_ptr_Function__arr_v3float_uint_2 = OpTypePointer Function %_arr_v3float_uint_2
-         %35 = OpConstantNull %_arr_v3float_uint_2
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %38 = OpConstantNull %v3float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %float_0 = OpConstant %float 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %v3bool = OpTypeVector %bool 3
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %m = OpVariable %_ptr_Function_mat3v3float Function %28
-          %a = OpVariable %_ptr_Function_int Function %31
-        %arr = OpVariable %_ptr_Function__arr_v3float_uint_2 Function %35
-          %v = OpVariable %_ptr_Function_v3float Function %38
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpConvertSToF %float %43
-         %46 = OpCompositeConstruct %v3float %44 %float_0 %float_0
-         %47 = OpCompositeConstruct %v3float %float_0 %44 %float_0
-         %48 = OpCompositeConstruct %v3float %float_0 %float_0 %44
-         %49 = OpCompositeConstruct %mat3v3float %46 %47 %48
-               OpStore %m %49
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %51 = OpLoad %int %50
-               OpStore %a %51
-         %52 = OpLoad %int %a
-         %53 = OpLoad %int %a
-         %55 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Function_float %m %52 %53
-               OpStore %58 %56
-         %60 = OpAccessChain %_ptr_Function_v3float %m %int_1
-         %61 = OpLoad %v3float %60
-         %62 = OpAccessChain %_ptr_Function_v3float %m %int_1
-         %63 = OpLoad %v3float %62
-         %64 = OpCompositeConstruct %_arr_v3float_uint_2 %61 %63
-               OpStore %arr %64
-         %65 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %66 = OpLoad %float %65
-         %67 = OpCompositeConstruct %v3float %66 %66 %66
-               OpStore %v %67
-         %68 = OpLoad %int %a
-         %69 = OpAccessChain %_ptr_Function_v3float %arr %68
-         %70 = OpLoad %v3float %69
-         %71 = OpLoad %v3float %v
-         %72 = OpFAdd %v3float %71 %70
-               OpStore %v %72
-         %73 = OpLoad %v3float %v
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %83 = OpConvertSToF %float %75
-         %84 = OpConvertSToF %float %78
-         %85 = OpConvertSToF %float %80
-         %86 = OpCompositeConstruct %v3float %83 %84 %85
-         %87 = OpFOrdEqual %v3bool %73 %86
-         %81 = OpAll %bool %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %81 %90 %91
-         %90 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %95 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %100 = OpLoad %int %99
-        %101 = OpConvertSToF %float %93
-        %102 = OpConvertSToF %float %96
-        %103 = OpConvertSToF %float %98
-        %104 = OpConvertSToF %float %100
-        %105 = OpCompositeConstruct %v4float %101 %102 %103 %104
-               OpStore %x_GLF_color %105
-               OpBranch %89
-         %91 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %107 = OpLoad %int %106
-        %108 = OpConvertSToF %float %107
-        %109 = OpCompositeConstruct %v4float %108 %108 %108 %108
-               OpStore %x_GLF_color %109
-               OpBranch %89
-         %89 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-        %113 = OpLabel
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %118 = OpLabel
-        %119 = OpFunctionCall %main_out %main_inner
-        %120 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 302eb53..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat3x3<f32>;
-  var a : i32;
-  var arr : array<vec3<f32>, 2>;
-  var v : vec3<f32>;
-  let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_46 : f32 = f32(x_45);
-  m = mat3x3<f32>(vec3<f32>(x_46, 0.0, 0.0), vec3<f32>(0.0, x_46, 0.0), vec3<f32>(0.0, 0.0, x_46));
-  let x_52 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_52;
-  let x_53 : i32 = a;
-  let x_54 : i32 = a;
-  let x_56 : f32 = x_9.x_GLF_uniform_float_values[0];
-  m[x_53][x_54] = x_56;
-  let x_59 : vec3<f32> = m[1];
-  let x_61 : vec3<f32> = m[1];
-  arr = array<vec3<f32>, 2>(x_59, x_61);
-  let x_64 : f32 = x_9.x_GLF_uniform_float_values[1];
-  v = vec3<f32>(x_64, x_64, x_64);
-  let x_66 : i32 = a;
-  let x_68 : vec3<f32> = arr[x_66];
-  let x_69 : vec3<f32> = v;
-  v = (x_69 + x_68);
-  let x_71 : vec3<f32> = v;
-  let x_73 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_76 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_79 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if (all((x_71 == vec3<f32>(f32(x_73), f32(x_76), f32(x_79))))) {
-    let x_88 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_91 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_94 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_97 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_88), f32(x_91), f32(x_94), f32(x_97));
-  } else {
-    let x_101 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_102 : f32 = f32(x_101);
-    x_GLF_color = vec4<f32>(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 07402c4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,74 +0,0 @@
-SKIP: FAILED
-
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3x3 m = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int a = 0;
-  float3 arr[2] = (float3[2])0;
-  float3 v = float3(0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_46 = float(x_45);
-  m = float3x3(float3(x_46, 0.0f, 0.0f), float3(0.0f, x_46, 0.0f), float3(0.0f, 0.0f, x_46));
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_52 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = x_52;
-  const int x_53 = a;
-  const int x_54 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_56 = asfloat(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  set_float3(m[x_53], x_54, x_56);
-  const float3 x_59 = m[1];
-  const float3 x_61 = m[1];
-  const float3 tint_symbol_4[2] = {x_59, x_61};
-  arr = tint_symbol_4;
-  const float x_64 = asfloat(x_9[1].x);
-  v = float3(x_64, x_64, x_64);
-  const float3 x_68 = arr[a];
-  v = (v + x_68);
-  const float3 x_71 = v;
-  const int x_73 = asint(x_6[1].x);
-  const int x_76 = asint(x_6[2].x);
-  const int x_79 = asint(x_6[1].x);
-  if (all((x_71 == float3(float(x_73), float(x_76), float(x_79))))) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_88 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_91 = asint(x_6[3].x);
-    const int x_94 = asint(x_6[3].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_97 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_88), float(x_91), float(x_94), float(x_97));
-  } else {
-    const int x_101 = asint(x_6[3].x);
-    const float x_102 = float(x_101);
-    x_GLF_color = float4(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_5 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000001D041DE1330(29,14-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.msl
deleted file mode 100644
index ee2987f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  float3 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  float3x3 m = float3x3(0.0f);
-  int a = 0;
-  tint_array_wrapper_2 arr = {};
-  float3 v = 0.0f;
-  int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_46 = float(x_45);
-  m = float3x3(float3(x_46, 0.0f, 0.0f), float3(0.0f, x_46, 0.0f), float3(0.0f, 0.0f, x_46));
-  int const x_52 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_52;
-  int const x_53 = a;
-  int const x_54 = a;
-  float const x_56 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  m[x_53][x_54] = x_56;
-  float3 const x_59 = m[1];
-  float3 const x_61 = m[1];
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_59, x_61}};
-  arr = tint_symbol_2;
-  float const x_64 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  v = float3(x_64, x_64, x_64);
-  int const x_66 = a;
-  float3 const x_68 = arr.arr[x_66];
-  float3 const x_69 = v;
-  v = (x_69 + x_68);
-  float3 const x_71 = v;
-  int const x_73 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_76 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_79 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if (all((x_71 == float3(float(x_73), float(x_76), float(x_79))))) {
-    int const x_88 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_91 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_94 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_97 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_88), float(x_91), float(x_94), float(x_97));
-  } else {
-    int const x_101 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    float const x_102 = float(x_101);
-    *(tint_symbol_4) = float4(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 27ab1ca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,180 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %a "a"
-               OpName %arr "arr"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_v3float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat3v3float = OpTypeMatrix %v3float 3
-%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
-         %28 = OpConstantNull %mat3v3float
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-%_arr_v3float_uint_2 = OpTypeArray %v3float %uint_2
-%_ptr_Function__arr_v3float_uint_2 = OpTypePointer Function %_arr_v3float_uint_2
-         %35 = OpConstantNull %_arr_v3float_uint_2
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %38 = OpConstantNull %v3float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %float_0 = OpConstant %float 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %v3bool = OpTypeVector %bool 3
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %m = OpVariable %_ptr_Function_mat3v3float Function %28
-          %a = OpVariable %_ptr_Function_int Function %31
-        %arr = OpVariable %_ptr_Function__arr_v3float_uint_2 Function %35
-          %v = OpVariable %_ptr_Function_v3float Function %38
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpConvertSToF %float %43
-         %46 = OpCompositeConstruct %v3float %44 %float_0 %float_0
-         %47 = OpCompositeConstruct %v3float %float_0 %44 %float_0
-         %48 = OpCompositeConstruct %v3float %float_0 %float_0 %44
-         %49 = OpCompositeConstruct %mat3v3float %46 %47 %48
-               OpStore %m %49
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %51 = OpLoad %int %50
-               OpStore %a %51
-         %52 = OpLoad %int %a
-         %53 = OpLoad %int %a
-         %55 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Function_float %m %52 %53
-               OpStore %58 %56
-         %60 = OpAccessChain %_ptr_Function_v3float %m %int_1
-         %61 = OpLoad %v3float %60
-         %62 = OpAccessChain %_ptr_Function_v3float %m %int_1
-         %63 = OpLoad %v3float %62
-         %64 = OpCompositeConstruct %_arr_v3float_uint_2 %61 %63
-               OpStore %arr %64
-         %65 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %66 = OpLoad %float %65
-         %67 = OpCompositeConstruct %v3float %66 %66 %66
-               OpStore %v %67
-         %68 = OpLoad %int %a
-         %69 = OpAccessChain %_ptr_Function_v3float %arr %68
-         %70 = OpLoad %v3float %69
-         %71 = OpLoad %v3float %v
-         %72 = OpFAdd %v3float %71 %70
-               OpStore %v %72
-         %73 = OpLoad %v3float %v
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %83 = OpConvertSToF %float %75
-         %84 = OpConvertSToF %float %78
-         %85 = OpConvertSToF %float %80
-         %86 = OpCompositeConstruct %v3float %83 %84 %85
-         %87 = OpFOrdEqual %v3bool %73 %86
-         %81 = OpAll %bool %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %81 %90 %91
-         %90 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %95 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %100 = OpLoad %int %99
-        %101 = OpConvertSToF %float %93
-        %102 = OpConvertSToF %float %96
-        %103 = OpConvertSToF %float %98
-        %104 = OpConvertSToF %float %100
-        %105 = OpCompositeConstruct %v4float %101 %102 %103 %104
-               OpStore %x_GLF_color %105
-               OpBranch %89
-         %91 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %107 = OpLoad %int %106
-        %108 = OpConvertSToF %float %107
-        %109 = OpCompositeConstruct %v4float %108 %108 %108 %108
-               OpStore %x_GLF_color %109
-               OpBranch %89
-         %89 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-        %113 = OpLabel
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %118 = OpLabel
-        %119 = OpFunctionCall %main_out %main_inner
-        %120 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 302eb53..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-array-matrix-element/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat3x3<f32>;
-  var a : i32;
-  var arr : array<vec3<f32>, 2>;
-  var v : vec3<f32>;
-  let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_46 : f32 = f32(x_45);
-  m = mat3x3<f32>(vec3<f32>(x_46, 0.0, 0.0), vec3<f32>(0.0, x_46, 0.0), vec3<f32>(0.0, 0.0, x_46));
-  let x_52 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_52;
-  let x_53 : i32 = a;
-  let x_54 : i32 = a;
-  let x_56 : f32 = x_9.x_GLF_uniform_float_values[0];
-  m[x_53][x_54] = x_56;
-  let x_59 : vec3<f32> = m[1];
-  let x_61 : vec3<f32> = m[1];
-  arr = array<vec3<f32>, 2>(x_59, x_61);
-  let x_64 : f32 = x_9.x_GLF_uniform_float_values[1];
-  v = vec3<f32>(x_64, x_64, x_64);
-  let x_66 : i32 = a;
-  let x_68 : vec3<f32> = arr[x_66];
-  let x_69 : vec3<f32> = v;
-  v = (x_69 + x_68);
-  let x_71 : vec3<f32> = v;
-  let x_73 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_76 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_79 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if (all((x_71 == vec3<f32>(f32(x_73), f32(x_76), f32(x_79))))) {
-    let x_88 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_91 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_94 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_97 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_88), f32(x_91), f32(x_94), f32(x_97));
-  } else {
-    let x_101 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_102 : f32 = f32(x_101);
-    x_GLF_color = vec4<f32>(x_102, x_102, x_102, x_102);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1425e4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-SKIP: FAILED
-
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float3x4 m = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float4x4 indexable = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_44 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_44;
-  const float x_46 = asfloat(x_9[2].x);
-  v = float4(x_46, x_46, x_46, x_46);
-  const float x_49 = asfloat(x_9[3].x);
-  m = float3x4(float4(x_49, 0.0f, 0.0f, 0.0f), float4(0.0f, x_49, 0.0f, 0.0f), float4(0.0f, 0.0f, x_49, 0.0f));
-  const int x_54 = a;
-  const int x_55 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_57 = asfloat(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  set_float4(m[x_54], x_55, x_57);
-  const int x_59 = a;
-  const float3x4 x_60 = m;
-  const int x_78 = a;
-  const int x_79 = a;
-  indexable = float4x4(float4(x_60[0u].x, x_60[0u].y, x_60[0u].z, x_60[0u].w), float4(x_60[1u].x, x_60[1u].y, x_60[1u].z, x_60[1u].w), float4(x_60[2u].x, x_60[2u].y, x_60[2u].z, x_60[2u].w), float4(0.0f, 0.0f, 0.0f, 1.0f));
-  const float x_81 = indexable[x_78][x_79];
-  const float x_83 = v[x_59];
-  set_float4(v, x_59, (x_83 + x_81));
-  const float x_87 = v.y;
-  const float x_89 = asfloat(x_9[1].x);
-  if ((x_87 == x_89)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_95 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_98 = asint(x_6[1].x);
-    const int x_101 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_104 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_95), float(x_98), float(x_101), float(x_104));
-  } else {
-    const int x_108 = asint(x_6[1].x);
-    const float x_109 = float(x_108);
-    x_GLF_color = float4(x_109, x_109, x_109, x_109);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_4 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_4;
-}
-C:\src\tint\test\Shader@0x000001FE2E0FB130(29,14-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.msl
deleted file mode 100644
index 09d684e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,83 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  int a = 0;
-  float4 v = 0.0f;
-  float3x4 m = float3x4(0.0f);
-  float4x4 indexable = float4x4(0.0f);
-  int const x_44 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_44;
-  float const x_46 = x_9.x_GLF_uniform_float_values.arr[2].el;
-  v = float4(x_46, x_46, x_46, x_46);
-  float const x_49 = x_9.x_GLF_uniform_float_values.arr[3].el;
-  m = float3x4(float4(x_49, 0.0f, 0.0f, 0.0f), float4(0.0f, x_49, 0.0f, 0.0f), float4(0.0f, 0.0f, x_49, 0.0f));
-  int const x_54 = a;
-  int const x_55 = a;
-  float const x_57 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  m[x_54][x_55] = x_57;
-  int const x_59 = a;
-  float3x4 const x_60 = m;
-  int const x_78 = a;
-  int const x_79 = a;
-  indexable = float4x4(float4(x_60[0u].x, x_60[0u].y, x_60[0u].z, x_60[0u].w), float4(x_60[1u].x, x_60[1u].y, x_60[1u].z, x_60[1u].w), float4(x_60[2u].x, x_60[2u].y, x_60[2u].z, x_60[2u].w), float4(0.0f, 0.0f, 0.0f, 1.0f));
-  float const x_81 = indexable[x_78][x_79];
-  float const x_83 = v[x_59];
-  v[x_59] = (x_83 + x_81);
-  float const x_87 = v.y;
-  float const x_89 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_87 == x_89)) {
-    int const x_95 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_98 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_101 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_104 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_95), float(x_98), float(x_101), float(x_104));
-  } else {
-    int const x_108 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_109 = float(x_108);
-    *(tint_symbol_3) = float4(x_109, x_109, x_109, x_109);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 38c5268..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,198 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 140
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v "v"
-               OpName %m "m"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float
-         %32 = OpConstantNull %mat3v4float
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %36 = OpConstantNull %mat4v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-    %float_0 = OpConstant %float 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-         %94 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-        %129 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %26
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %m = OpVariable %_ptr_Function_mat3v4float Function %32
-  %indexable = OpVariable %_ptr_Function_mat4v4float Function %36
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-               OpStore %a %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_2
-         %45 = OpLoad %float %44
-         %46 = OpCompositeConstruct %v4float %45 %45 %45 %45
-               OpStore %v %46
-         %48 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_3
-         %49 = OpLoad %float %48
-         %51 = OpCompositeConstruct %v4float %49 %float_0 %float_0 %float_0
-         %52 = OpCompositeConstruct %v4float %float_0 %49 %float_0 %float_0
-         %53 = OpCompositeConstruct %v4float %float_0 %float_0 %49 %float_0
-         %54 = OpCompositeConstruct %mat3v4float %51 %52 %53
-               OpStore %m %54
-         %55 = OpLoad %int %a
-         %56 = OpLoad %int %a
-         %57 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %60 = OpAccessChain %_ptr_Function_float %m %55 %56
-               OpStore %60 %58
-         %61 = OpLoad %int %a
-         %62 = OpLoad %mat3v4float %m
-         %63 = OpLoad %int %a
-         %64 = OpLoad %int %a
-         %65 = OpCompositeExtract %v4float %62 0
-         %66 = OpCompositeExtract %float %65 0
-         %67 = OpCompositeExtract %v4float %62 0
-         %68 = OpCompositeExtract %float %67 1
-         %69 = OpCompositeExtract %v4float %62 0
-         %70 = OpCompositeExtract %float %69 2
-         %71 = OpCompositeExtract %v4float %62 0
-         %72 = OpCompositeExtract %float %71 3
-         %73 = OpCompositeConstruct %v4float %66 %68 %70 %72
-         %75 = OpCompositeExtract %v4float %62 1
-         %76 = OpCompositeExtract %float %75 0
-         %77 = OpCompositeExtract %v4float %62 1
-         %78 = OpCompositeExtract %float %77 1
-         %79 = OpCompositeExtract %v4float %62 1
-         %80 = OpCompositeExtract %float %79 2
-         %81 = OpCompositeExtract %v4float %62 1
-         %82 = OpCompositeExtract %float %81 3
-         %83 = OpCompositeConstruct %v4float %76 %78 %80 %82
-         %84 = OpCompositeExtract %v4float %62 2
-         %85 = OpCompositeExtract %float %84 0
-         %86 = OpCompositeExtract %v4float %62 2
-         %87 = OpCompositeExtract %float %86 1
-         %88 = OpCompositeExtract %v4float %62 2
-         %89 = OpCompositeExtract %float %88 2
-         %90 = OpCompositeExtract %v4float %62 2
-         %91 = OpCompositeExtract %float %90 3
-         %92 = OpCompositeConstruct %v4float %85 %87 %89 %91
-         %95 = OpCompositeConstruct %mat4v4float %73 %83 %92 %94
-               OpStore %indexable %95
-         %96 = OpAccessChain %_ptr_Function_float %indexable %63 %64
-         %97 = OpLoad %float %96
-         %98 = OpAccessChain %_ptr_Function_float %v %61
-         %99 = OpLoad %float %98
-        %100 = OpAccessChain %_ptr_Function_float %v %61
-        %101 = OpFAdd %float %99 %97
-               OpStore %100 %101
-        %102 = OpAccessChain %_ptr_Function_float %v %uint_1
-        %103 = OpLoad %float %102
-        %105 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-        %106 = OpLoad %float %105
-        %107 = OpFOrdEqual %bool %103 %106
-               OpSelectionMerge %109 None
-               OpBranchConditional %107 %110 %111
-        %110 = OpLabel
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %115 = OpLoad %int %114
-        %116 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %117 = OpLoad %int %116
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %113
-        %121 = OpConvertSToF %float %115
-        %122 = OpConvertSToF %float %117
-        %123 = OpConvertSToF %float %119
-        %124 = OpCompositeConstruct %v4float %120 %121 %122 %123
-               OpStore %x_GLF_color %124
-               OpBranch %109
-        %111 = OpLabel
-        %125 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpConvertSToF %float %126
-        %128 = OpCompositeConstruct %v4float %127 %127 %127 %127
-               OpStore %x_GLF_color %128
-               OpBranch %109
-        %109 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %129
-        %132 = OpLabel
-        %133 = OpFunctionCall %void %main_1
-        %134 = OpLoad %v4float %x_GLF_color
-        %135 = OpCompositeConstruct %main_out %134
-               OpReturnValue %135
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %137 = OpLabel
-        %138 = OpFunctionCall %main_out %main_inner
-        %139 = OpCompositeExtract %v4float %138 0
-               OpStore %x_GLF_color_1_1 %139
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ff8e0f0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,69 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var v : vec4<f32>;
-  var m : mat3x4<f32>;
-  var indexable : mat4x4<f32>;
-  let x_44 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_44;
-  let x_46 : f32 = x_9.x_GLF_uniform_float_values[2];
-  v = vec4<f32>(x_46, x_46, x_46, x_46);
-  let x_49 : f32 = x_9.x_GLF_uniform_float_values[3];
-  m = mat3x4<f32>(vec4<f32>(x_49, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_49, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_49, 0.0));
-  let x_54 : i32 = a;
-  let x_55 : i32 = a;
-  let x_57 : f32 = x_9.x_GLF_uniform_float_values[0];
-  m[x_54][x_55] = x_57;
-  let x_59 : i32 = a;
-  let x_60 : mat3x4<f32> = m;
-  let x_78 : i32 = a;
-  let x_79 : i32 = a;
-  indexable = mat4x4<f32>(vec4<f32>(x_60[0u].x, x_60[0u].y, x_60[0u].z, x_60[0u].w), vec4<f32>(x_60[1u].x, x_60[1u].y, x_60[1u].z, x_60[1u].w), vec4<f32>(x_60[2u].x, x_60[2u].y, x_60[2u].z, x_60[2u].w), vec4<f32>(0.0, 0.0, 0.0, 1.0));
-  let x_81 : f32 = indexable[x_78][x_79];
-  let x_83 : f32 = v[x_59];
-  v[x_59] = (x_83 + x_81);
-  let x_87 : f32 = v.y;
-  let x_89 : f32 = x_9.x_GLF_uniform_float_values[1];
-  if ((x_87 == x_89)) {
-    let x_95 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_98 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_101 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_104 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_95), f32(x_98), f32(x_101), f32(x_104));
-  } else {
-    let x_108 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_109 : f32 = f32(x_108);
-    x_GLF_color = vec4<f32>(x_109, x_109, x_109, x_109);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 397d79d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-SKIP: FAILED
-
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float3x4 m = float3x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float4x4 indexable = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_44 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_44;
-  const float x_46 = asfloat(x_9[2].x);
-  v = float4(x_46, x_46, x_46, x_46);
-  const float x_49 = asfloat(x_9[3].x);
-  m = float3x4(float4(x_49, 0.0f, 0.0f, 0.0f), float4(0.0f, x_49, 0.0f, 0.0f), float4(0.0f, 0.0f, x_49, 0.0f));
-  const int x_54 = a;
-  const int x_55 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_57 = asfloat(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  set_float4(m[x_54], x_55, x_57);
-  const int x_59 = a;
-  const float3x4 x_60 = m;
-  const int x_78 = a;
-  const int x_79 = a;
-  indexable = float4x4(float4(x_60[0u].x, x_60[0u].y, x_60[0u].z, x_60[0u].w), float4(x_60[1u].x, x_60[1u].y, x_60[1u].z, x_60[1u].w), float4(x_60[2u].x, x_60[2u].y, x_60[2u].z, x_60[2u].w), float4(0.0f, 0.0f, 0.0f, 1.0f));
-  const float x_81 = indexable[x_78][x_79];
-  const float x_83 = v[x_59];
-  set_float4(v, x_59, (x_83 + x_81));
-  const float x_87 = v.y;
-  const float x_89 = asfloat(x_9[1].x);
-  if ((x_87 == x_89)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_95 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_98 = asint(x_6[1].x);
-    const int x_101 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_104 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_95), float(x_98), float(x_101), float(x_104));
-  } else {
-    const int x_108 = asint(x_6[1].x);
-    const float x_109 = float(x_108);
-    x_GLF_color = float4(x_109, x_109, x_109, x_109);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_4 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_4;
-}
-C:\src\tint\test\Shader@0x000001C458C00310(29,14-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.msl
deleted file mode 100644
index 09d684e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,83 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  int a = 0;
-  float4 v = 0.0f;
-  float3x4 m = float3x4(0.0f);
-  float4x4 indexable = float4x4(0.0f);
-  int const x_44 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_44;
-  float const x_46 = x_9.x_GLF_uniform_float_values.arr[2].el;
-  v = float4(x_46, x_46, x_46, x_46);
-  float const x_49 = x_9.x_GLF_uniform_float_values.arr[3].el;
-  m = float3x4(float4(x_49, 0.0f, 0.0f, 0.0f), float4(0.0f, x_49, 0.0f, 0.0f), float4(0.0f, 0.0f, x_49, 0.0f));
-  int const x_54 = a;
-  int const x_55 = a;
-  float const x_57 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  m[x_54][x_55] = x_57;
-  int const x_59 = a;
-  float3x4 const x_60 = m;
-  int const x_78 = a;
-  int const x_79 = a;
-  indexable = float4x4(float4(x_60[0u].x, x_60[0u].y, x_60[0u].z, x_60[0u].w), float4(x_60[1u].x, x_60[1u].y, x_60[1u].z, x_60[1u].w), float4(x_60[2u].x, x_60[2u].y, x_60[2u].z, x_60[2u].w), float4(0.0f, 0.0f, 0.0f, 1.0f));
-  float const x_81 = indexable[x_78][x_79];
-  float const x_83 = v[x_59];
-  v[x_59] = (x_83 + x_81);
-  float const x_87 = v.y;
-  float const x_89 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_87 == x_89)) {
-    int const x_95 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_98 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_101 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_104 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_95), float(x_98), float(x_101), float(x_104));
-  } else {
-    int const x_108 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_109 = float(x_108);
-    *(tint_symbol_3) = float4(x_109, x_109, x_109, x_109);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 38c5268..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,198 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 140
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v "v"
-               OpName %m "m"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float
-         %32 = OpConstantNull %mat3v4float
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %36 = OpConstantNull %mat4v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-    %float_0 = OpConstant %float 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-         %94 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-        %129 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %26
-          %v = OpVariable %_ptr_Function_v4float Function %5
-          %m = OpVariable %_ptr_Function_mat3v4float Function %32
-  %indexable = OpVariable %_ptr_Function_mat4v4float Function %36
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-               OpStore %a %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_2
-         %45 = OpLoad %float %44
-         %46 = OpCompositeConstruct %v4float %45 %45 %45 %45
-               OpStore %v %46
-         %48 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_3
-         %49 = OpLoad %float %48
-         %51 = OpCompositeConstruct %v4float %49 %float_0 %float_0 %float_0
-         %52 = OpCompositeConstruct %v4float %float_0 %49 %float_0 %float_0
-         %53 = OpCompositeConstruct %v4float %float_0 %float_0 %49 %float_0
-         %54 = OpCompositeConstruct %mat3v4float %51 %52 %53
-               OpStore %m %54
-         %55 = OpLoad %int %a
-         %56 = OpLoad %int %a
-         %57 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %60 = OpAccessChain %_ptr_Function_float %m %55 %56
-               OpStore %60 %58
-         %61 = OpLoad %int %a
-         %62 = OpLoad %mat3v4float %m
-         %63 = OpLoad %int %a
-         %64 = OpLoad %int %a
-         %65 = OpCompositeExtract %v4float %62 0
-         %66 = OpCompositeExtract %float %65 0
-         %67 = OpCompositeExtract %v4float %62 0
-         %68 = OpCompositeExtract %float %67 1
-         %69 = OpCompositeExtract %v4float %62 0
-         %70 = OpCompositeExtract %float %69 2
-         %71 = OpCompositeExtract %v4float %62 0
-         %72 = OpCompositeExtract %float %71 3
-         %73 = OpCompositeConstruct %v4float %66 %68 %70 %72
-         %75 = OpCompositeExtract %v4float %62 1
-         %76 = OpCompositeExtract %float %75 0
-         %77 = OpCompositeExtract %v4float %62 1
-         %78 = OpCompositeExtract %float %77 1
-         %79 = OpCompositeExtract %v4float %62 1
-         %80 = OpCompositeExtract %float %79 2
-         %81 = OpCompositeExtract %v4float %62 1
-         %82 = OpCompositeExtract %float %81 3
-         %83 = OpCompositeConstruct %v4float %76 %78 %80 %82
-         %84 = OpCompositeExtract %v4float %62 2
-         %85 = OpCompositeExtract %float %84 0
-         %86 = OpCompositeExtract %v4float %62 2
-         %87 = OpCompositeExtract %float %86 1
-         %88 = OpCompositeExtract %v4float %62 2
-         %89 = OpCompositeExtract %float %88 2
-         %90 = OpCompositeExtract %v4float %62 2
-         %91 = OpCompositeExtract %float %90 3
-         %92 = OpCompositeConstruct %v4float %85 %87 %89 %91
-         %95 = OpCompositeConstruct %mat4v4float %73 %83 %92 %94
-               OpStore %indexable %95
-         %96 = OpAccessChain %_ptr_Function_float %indexable %63 %64
-         %97 = OpLoad %float %96
-         %98 = OpAccessChain %_ptr_Function_float %v %61
-         %99 = OpLoad %float %98
-        %100 = OpAccessChain %_ptr_Function_float %v %61
-        %101 = OpFAdd %float %99 %97
-               OpStore %100 %101
-        %102 = OpAccessChain %_ptr_Function_float %v %uint_1
-        %103 = OpLoad %float %102
-        %105 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-        %106 = OpLoad %float %105
-        %107 = OpFOrdEqual %bool %103 %106
-               OpSelectionMerge %109 None
-               OpBranchConditional %107 %110 %111
-        %110 = OpLabel
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %115 = OpLoad %int %114
-        %116 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %117 = OpLoad %int %116
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %113
-        %121 = OpConvertSToF %float %115
-        %122 = OpConvertSToF %float %117
-        %123 = OpConvertSToF %float %119
-        %124 = OpCompositeConstruct %v4float %120 %121 %122 %123
-               OpStore %x_GLF_color %124
-               OpBranch %109
-        %111 = OpLabel
-        %125 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpConvertSToF %float %126
-        %128 = OpCompositeConstruct %v4float %127 %127 %127 %127
-               OpStore %x_GLF_color %128
-               OpBranch %109
-        %109 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %129
-        %132 = OpLabel
-        %133 = OpFunctionCall %void %main_1
-        %134 = OpLoad %v4float %x_GLF_color
-        %135 = OpCompositeConstruct %main_out %134
-               OpReturnValue %135
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %137 = OpLabel
-        %138 = OpFunctionCall %main_out %main_inner
-        %139 = OpCompositeExtract %v4float %138 0
-               OpStore %x_GLF_color_1_1 %139
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ff8e0f0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-increment-vector-component-with-matrix-copy/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,69 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var v : vec4<f32>;
-  var m : mat3x4<f32>;
-  var indexable : mat4x4<f32>;
-  let x_44 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_44;
-  let x_46 : f32 = x_9.x_GLF_uniform_float_values[2];
-  v = vec4<f32>(x_46, x_46, x_46, x_46);
-  let x_49 : f32 = x_9.x_GLF_uniform_float_values[3];
-  m = mat3x4<f32>(vec4<f32>(x_49, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_49, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_49, 0.0));
-  let x_54 : i32 = a;
-  let x_55 : i32 = a;
-  let x_57 : f32 = x_9.x_GLF_uniform_float_values[0];
-  m[x_54][x_55] = x_57;
-  let x_59 : i32 = a;
-  let x_60 : mat3x4<f32> = m;
-  let x_78 : i32 = a;
-  let x_79 : i32 = a;
-  indexable = mat4x4<f32>(vec4<f32>(x_60[0u].x, x_60[0u].y, x_60[0u].z, x_60[0u].w), vec4<f32>(x_60[1u].x, x_60[1u].y, x_60[1u].z, x_60[1u].w), vec4<f32>(x_60[2u].x, x_60[2u].y, x_60[2u].z, x_60[2u].w), vec4<f32>(0.0, 0.0, 0.0, 1.0));
-  let x_81 : f32 = indexable[x_78][x_79];
-  let x_83 : f32 = v[x_59];
-  v[x_59] = (x_83 + x_81);
-  let x_87 : f32 = v.y;
-  let x_89 : f32 = x_9.x_GLF_uniform_float_values[1];
-  if ((x_87 == x_89)) {
-    let x_95 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_98 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_101 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_104 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_95), f32(x_98), f32(x_101), f32(x_104));
-  } else {
-    let x_108 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_109 : f32 = f32(x_108);
-    x_GLF_color = vec4<f32>(x_109, x_109, x_109, x_109);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4f97f3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 func_() {
-  float x = 0.0f;
-  x = 1.0f;
-  const float x_30 = gl_FragCoord.x;
-  if ((x_30 < 0.0f)) {
-    x = 0.5f;
-  }
-  return float4(x, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1() {
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  while (true) {
-    const float4 x_26 = func_();
-    x_GLF_color = x_26;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.msl
deleted file mode 100644
index 13d527f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 func_(thread float4* const tint_symbol_3) {
-  float x = 0.0f;
-  x = 1.0f;
-  float const x_30 = (*(tint_symbol_3)).x;
-  if ((x_30 < 0.0f)) {
-    x = 0.5f;
-  }
-  float const x_34 = x;
-  return float4(x_34, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1(thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  while (true) {
-    float4 const x_26 = func_(tint_symbol_5);
-    *(tint_symbol_4) = x_26;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_7, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index db453f3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %11 = OpTypeFunction %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-  %float_0_5 = OpConstant %float 0.5
-       %void = OpTypeVoid
-         %31 = OpTypeFunction %void
-         %35 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %v4float None %11
-         %13 = OpLabel
-          %x = OpVariable %_ptr_Function_float Function %16
-               OpStore %x %float_1
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %22 = OpLoad %float %21
-         %24 = OpFOrdLessThan %bool %22 %float_0
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-               OpStore %x %float_0_5
-               OpBranch %26
-         %26 = OpLabel
-         %29 = OpLoad %float %x
-         %30 = OpCompositeConstruct %v4float %29 %float_0 %float_0 %float_1
-               OpReturnValue %30
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %31
-         %34 = OpLabel
-               OpStore %x_GLF_color %35
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpFunctionCall %v4float %func_
-               OpStore %x_GLF_color %40
-               OpSelectionMerge %42 None
-               OpBranchConditional %false %43 %44
-         %43 = OpLabel
-               OpBranch %42
-         %44 = OpLabel
-               OpBranch %37
-         %42 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-               OpBranch %36
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %49 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %50 = OpFunctionCall %void %main_1
-         %51 = OpLoad %v4float %x_GLF_color
-         %52 = OpCompositeConstruct %main_out %51
-               OpReturnValue %52
-               OpFunctionEnd
-       %main = OpFunction %void None %31
-         %54 = OpLabel
-         %56 = OpLoad %v4float %gl_FragCoord_param_1
-         %55 = OpFunctionCall %main_out %main_inner %56
-         %57 = OpCompositeExtract %v4float %55 0
-               OpStore %x_GLF_color_1_1 %57
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 7d42f20..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> vec4<f32> {
-  var x : f32;
-  x = 1.0;
-  let x_30 : f32 = gl_FragCoord.x;
-  if ((x_30 < 0.0)) {
-    x = 0.5;
-  }
-  let x_34 : f32 = x;
-  return vec4<f32>(x_34, 0.0, 0.0, 1.0);
-}
-
-fn main_1() {
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  loop {
-    let x_26 : vec4<f32> = func_();
-    x_GLF_color = x_26;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4f97f3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 func_() {
-  float x = 0.0f;
-  x = 1.0f;
-  const float x_30 = gl_FragCoord.x;
-  if ((x_30 < 0.0f)) {
-    x = 0.5f;
-  }
-  return float4(x, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1() {
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  while (true) {
-    const float4 x_26 = func_();
-    x_GLF_color = x_26;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.msl
deleted file mode 100644
index 13d527f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 func_(thread float4* const tint_symbol_3) {
-  float x = 0.0f;
-  x = 1.0f;
-  float const x_30 = (*(tint_symbol_3)).x;
-  if ((x_30 < 0.0f)) {
-    x = 0.5f;
-  }
-  float const x_34 = x;
-  return float4(x_34, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1(thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  while (true) {
-    float4 const x_26 = func_(tint_symbol_5);
-    *(tint_symbol_4) = x_26;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_7, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index db453f3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %11 = OpTypeFunction %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-  %float_0_5 = OpConstant %float 0.5
-       %void = OpTypeVoid
-         %31 = OpTypeFunction %void
-         %35 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %v4float None %11
-         %13 = OpLabel
-          %x = OpVariable %_ptr_Function_float Function %16
-               OpStore %x %float_1
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %22 = OpLoad %float %21
-         %24 = OpFOrdLessThan %bool %22 %float_0
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-               OpStore %x %float_0_5
-               OpBranch %26
-         %26 = OpLabel
-         %29 = OpLoad %float %x
-         %30 = OpCompositeConstruct %v4float %29 %float_0 %float_0 %float_1
-               OpReturnValue %30
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %31
-         %34 = OpLabel
-               OpStore %x_GLF_color %35
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpFunctionCall %v4float %func_
-               OpStore %x_GLF_color %40
-               OpSelectionMerge %42 None
-               OpBranchConditional %false %43 %44
-         %43 = OpLabel
-               OpBranch %42
-         %44 = OpLabel
-               OpBranch %37
-         %42 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-               OpBranch %36
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %49 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %50 = OpFunctionCall %void %main_1
-         %51 = OpLoad %v4float %x_GLF_color
-         %52 = OpCompositeConstruct %main_out %51
-               OpReturnValue %52
-               OpFunctionEnd
-       %main = OpFunction %void None %31
-         %54 = OpLabel
-         %56 = OpLoad %v4float %gl_FragCoord_param_1
-         %55 = OpFunctionCall %main_out %main_inner %56
-         %57 = OpCompositeExtract %v4float %55 0
-               OpStore %x_GLF_color_1_1 %57
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7d42f20..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-empty-block/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> vec4<f32> {
-  var x : f32;
-  x = 1.0;
-  let x_30 : f32 = gl_FragCoord.x;
-  if ((x_30 < 0.0)) {
-    x = 0.5;
-  }
-  let x_34 : f32 = x;
-  return vec4<f32>(x_34, 0.0, 0.0, 1.0);
-}
-
-fn main_1() {
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  loop {
-    let x_26 : vec4<f32> = func_();
-    x_GLF_color = x_26;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index dc586b3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 returnRed_() {
-  bool x_33 = false;
-  float4 x_34 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_48 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_36_phi = false;
-  float4 x_51_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_36_phi = false;
-  while (true) {
-    float4 x_48_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    bool x_49_phi = false;
-    const bool x_36 = x_36_phi;
-    while (true) {
-      const int x_44 = asint(x_6[0].x);
-      if ((x_44 == 1)) {
-        x_33 = true;
-        x_34 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        x_48_phi = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        x_49_phi = true;
-        break;
-      }
-      {
-        x_48_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_49_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    x_48 = x_48_phi;
-    const bool x_49 = x_49_phi;
-    x_51_phi = x_48;
-    if (x_49) {
-      break;
-    }
-    x_33 = true;
-    x_34 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    x_51_phi = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-    {
-      x_36_phi = false;
-    }
-  }
-  return x_51_phi;
-}
-
-void main_1() {
-  while (true) {
-    const float4 x_30 = returnRed_();
-    x_GLF_color = x_30;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index b982212..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 returnRed_(constant buf0& x_6) {
-  bool x_33 = false;
-  float4 x_34 = 0.0f;
-  float4 x_48 = 0.0f;
-  bool x_36_phi = false;
-  float4 x_51_phi = 0.0f;
-  x_36_phi = false;
-  while (true) {
-    float4 x_48_phi = 0.0f;
-    bool x_49_phi = false;
-    bool const x_36 = x_36_phi;
-    while (true) {
-      int const x_44 = x_6.zero;
-      if ((x_44 == 1)) {
-        x_33 = true;
-        x_34 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        x_48_phi = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        x_49_phi = true;
-        break;
-      }
-      {
-        x_48_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_49_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    x_48 = x_48_phi;
-    bool const x_49 = x_49_phi;
-    x_51_phi = x_48;
-    if (x_49) {
-      break;
-    }
-    x_33 = true;
-    x_34 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    x_51_phi = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-    {
-      x_36_phi = false;
-    }
-  }
-  float4 const x_51 = x_51_phi;
-  return x_51;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  while (true) {
-    float4 const x_30 = returnRed_(x_6);
-    *(tint_symbol_3) = x_30;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6265fa8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,161 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %returnRed_ "returnRed_"
-               OpName %x_33 "x_33"
-               OpName %x_34 "x_34"
-               OpName %x_48 "x_48"
-               OpName %x_36_phi "x_36_phi"
-               OpName %x_51_phi "x_51_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %x_49_phi "x_49_phi"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %v4float
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %49 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %56 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out
- %returnRed_ = OpFunction %v4float None %12
-         %14 = OpLabel
-       %x_33 = OpVariable %_ptr_Function_bool Function %19
-       %x_34 = OpVariable %_ptr_Function_v4float Function %5
-       %x_48 = OpVariable %_ptr_Function_v4float Function %5
-   %x_36_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_51_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_48_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_49_phi = OpVariable %_ptr_Function_bool Function %19
-               OpStore %x_33 %false
-               OpStore %x_36_phi %false
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %31 = OpLoad %bool %x_36_phi
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %40 = OpLoad %int %39
-         %42 = OpIEqual %bool %40 %int_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpStore %x_33 %true
-               OpStore %x_34 %48
-               OpStore %x_48_phi %48
-               OpStore %x_49_phi %true
-               OpBranch %33
-         %43 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-               OpStore %x_48_phi %49
-               OpStore %x_49_phi %false
-               OpBranchConditional %false %32 %33
-         %33 = OpLabel
-         %50 = OpLoad %v4float %x_48_phi
-               OpStore %x_48 %50
-         %51 = OpLoad %bool %x_49_phi
-         %52 = OpLoad %v4float %x_48
-               OpStore %x_51_phi %52
-               OpSelectionMerge %53 None
-               OpBranchConditional %51 %54 %53
-         %54 = OpLabel
-               OpBranch %26
-         %53 = OpLabel
-               OpStore %x_33 %true
-               OpStore %x_34 %48
-               OpStore %x_51_phi %48
-               OpBranch %26
-         %27 = OpLabel
-               OpStore %x_36_phi %false
-               OpBranch %25
-         %26 = OpLabel
-         %55 = OpLoad %v4float %x_51_phi
-               OpReturnValue %55
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %56
-         %59 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-               OpLoopMerge %61 %62 None
-               OpBranch %63
-         %63 = OpLabel
-         %64 = OpFunctionCall %v4float %returnRed_
-               OpStore %x_GLF_color %64
-               OpSelectionMerge %65 None
-               OpBranchConditional %false %66 %67
-         %66 = OpLabel
-               OpBranch %65
-         %67 = OpLabel
-               OpBranch %61
-         %65 = OpLabel
-               OpBranch %62
-         %62 = OpLabel
-               OpBranch %60
-         %61 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-         %71 = OpLabel
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %56
-         %76 = OpLabel
-         %77 = OpFunctionCall %main_out %main_inner
-         %78 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c24e92c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,80 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn returnRed_() -> vec4<f32> {
-  var x_33 : bool = false;
-  var x_34 : vec4<f32>;
-  var x_48 : vec4<f32>;
-  var x_36_phi : bool;
-  var x_51_phi : vec4<f32>;
-  x_36_phi = false;
-  loop {
-    var x_48_phi : vec4<f32>;
-    var x_49_phi : bool;
-    let x_36 : bool = x_36_phi;
-    loop {
-      let x_44 : i32 = x_6.zero;
-      if ((x_44 == 1)) {
-        x_33 = true;
-        x_34 = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-        x_48_phi = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-        x_49_phi = true;
-        break;
-      }
-
-      continuing {
-        x_48_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_49_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    x_48 = x_48_phi;
-    let x_49 : bool = x_49_phi;
-    x_51_phi = x_48;
-    if (x_49) {
-      break;
-    }
-    x_33 = true;
-    x_34 = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    x_51_phi = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    break;
-
-    continuing {
-      x_36_phi = false;
-    }
-  }
-  let x_51 : vec4<f32> = x_51_phi;
-  return x_51;
-}
-
-fn main_1() {
-  loop {
-    let x_30 : vec4<f32> = returnRed_();
-    x_GLF_color = x_30;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index dc586b3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 returnRed_() {
-  bool x_33 = false;
-  float4 x_34 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_48 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_36_phi = false;
-  float4 x_51_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_36_phi = false;
-  while (true) {
-    float4 x_48_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    bool x_49_phi = false;
-    const bool x_36 = x_36_phi;
-    while (true) {
-      const int x_44 = asint(x_6[0].x);
-      if ((x_44 == 1)) {
-        x_33 = true;
-        x_34 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        x_48_phi = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        x_49_phi = true;
-        break;
-      }
-      {
-        x_48_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_49_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    x_48 = x_48_phi;
-    const bool x_49 = x_49_phi;
-    x_51_phi = x_48;
-    if (x_49) {
-      break;
-    }
-    x_33 = true;
-    x_34 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    x_51_phi = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-    {
-      x_36_phi = false;
-    }
-  }
-  return x_51_phi;
-}
-
-void main_1() {
-  while (true) {
-    const float4 x_30 = returnRed_();
-    x_GLF_color = x_30;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index b982212..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 returnRed_(constant buf0& x_6) {
-  bool x_33 = false;
-  float4 x_34 = 0.0f;
-  float4 x_48 = 0.0f;
-  bool x_36_phi = false;
-  float4 x_51_phi = 0.0f;
-  x_36_phi = false;
-  while (true) {
-    float4 x_48_phi = 0.0f;
-    bool x_49_phi = false;
-    bool const x_36 = x_36_phi;
-    while (true) {
-      int const x_44 = x_6.zero;
-      if ((x_44 == 1)) {
-        x_33 = true;
-        x_34 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        x_48_phi = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        x_49_phi = true;
-        break;
-      }
-      {
-        x_48_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_49_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    x_48 = x_48_phi;
-    bool const x_49 = x_49_phi;
-    x_51_phi = x_48;
-    if (x_49) {
-      break;
-    }
-    x_33 = true;
-    x_34 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    x_51_phi = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-    {
-      x_36_phi = false;
-    }
-  }
-  float4 const x_51 = x_51_phi;
-  return x_51;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  while (true) {
-    float4 const x_30 = returnRed_(x_6);
-    *(tint_symbol_3) = x_30;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6265fa8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,161 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %returnRed_ "returnRed_"
-               OpName %x_33 "x_33"
-               OpName %x_34 "x_34"
-               OpName %x_48 "x_48"
-               OpName %x_36_phi "x_36_phi"
-               OpName %x_51_phi "x_51_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %x_49_phi "x_49_phi"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %v4float
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %49 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %56 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out
- %returnRed_ = OpFunction %v4float None %12
-         %14 = OpLabel
-       %x_33 = OpVariable %_ptr_Function_bool Function %19
-       %x_34 = OpVariable %_ptr_Function_v4float Function %5
-       %x_48 = OpVariable %_ptr_Function_v4float Function %5
-   %x_36_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_51_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_48_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_49_phi = OpVariable %_ptr_Function_bool Function %19
-               OpStore %x_33 %false
-               OpStore %x_36_phi %false
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %31 = OpLoad %bool %x_36_phi
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %40 = OpLoad %int %39
-         %42 = OpIEqual %bool %40 %int_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpStore %x_33 %true
-               OpStore %x_34 %48
-               OpStore %x_48_phi %48
-               OpStore %x_49_phi %true
-               OpBranch %33
-         %43 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-               OpStore %x_48_phi %49
-               OpStore %x_49_phi %false
-               OpBranchConditional %false %32 %33
-         %33 = OpLabel
-         %50 = OpLoad %v4float %x_48_phi
-               OpStore %x_48 %50
-         %51 = OpLoad %bool %x_49_phi
-         %52 = OpLoad %v4float %x_48
-               OpStore %x_51_phi %52
-               OpSelectionMerge %53 None
-               OpBranchConditional %51 %54 %53
-         %54 = OpLabel
-               OpBranch %26
-         %53 = OpLabel
-               OpStore %x_33 %true
-               OpStore %x_34 %48
-               OpStore %x_51_phi %48
-               OpBranch %26
-         %27 = OpLabel
-               OpStore %x_36_phi %false
-               OpBranch %25
-         %26 = OpLabel
-         %55 = OpLoad %v4float %x_51_phi
-               OpReturnValue %55
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %56
-         %59 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-               OpLoopMerge %61 %62 None
-               OpBranch %63
-         %63 = OpLabel
-         %64 = OpFunctionCall %v4float %returnRed_
-               OpStore %x_GLF_color %64
-               OpSelectionMerge %65 None
-               OpBranchConditional %false %66 %67
-         %66 = OpLabel
-               OpBranch %65
-         %67 = OpLabel
-               OpBranch %61
-         %65 = OpLabel
-               OpBranch %62
-         %62 = OpLabel
-               OpBranch %60
-         %61 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-         %71 = OpLabel
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %56
-         %76 = OpLabel
-         %77 = OpFunctionCall %main_out %main_inner
-         %78 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c24e92c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-nested-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,80 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn returnRed_() -> vec4<f32> {
-  var x_33 : bool = false;
-  var x_34 : vec4<f32>;
-  var x_48 : vec4<f32>;
-  var x_36_phi : bool;
-  var x_51_phi : vec4<f32>;
-  x_36_phi = false;
-  loop {
-    var x_48_phi : vec4<f32>;
-    var x_49_phi : bool;
-    let x_36 : bool = x_36_phi;
-    loop {
-      let x_44 : i32 = x_6.zero;
-      if ((x_44 == 1)) {
-        x_33 = true;
-        x_34 = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-        x_48_phi = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-        x_49_phi = true;
-        break;
-      }
-
-      continuing {
-        x_48_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_49_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    x_48 = x_48_phi;
-    let x_49 : bool = x_49_phi;
-    x_51_phi = x_48;
-    if (x_49) {
-      break;
-    }
-    x_33 = true;
-    x_34 = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    x_51_phi = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    break;
-
-    continuing {
-      x_36_phi = false;
-    }
-  }
-  let x_51 : vec4<f32> = x_51_phi;
-  return x_51;
-}
-
-fn main_1() {
-  loop {
-    let x_30 : vec4<f32> = returnRed_();
-    x_GLF_color = x_30;
-    if (false) {
-    } else {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a2053a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  int i = 0;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      if ((i > 5)) {
-        i = (i + 1);
-      }
-      if ((i > 8)) {
-        return 0.0f;
-      }
-    }
-  }
-  return 1.0f;
-}
-
-void main_1() {
-  if (false) {
-    const float x_28 = func_();
-    x_GLF_color = float4(x_28, x_28, x_28, x_28);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 117d43e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_() {
-  int i = 0;
-  i = 0;
-  while (true) {
-    int const x_35 = i;
-    if ((x_35 < 10)) {
-    } else {
-      break;
-    }
-    int const x_38 = i;
-    if ((x_38 > 5)) {
-      int const x_42 = i;
-      i = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-    }
-    int const x_44 = i;
-    if ((x_44 > 8)) {
-      return 0.0f;
-    }
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  return 1.0f;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  if (false) {
-    float const x_28 = func_();
-    *(tint_symbol_3) = float4(x_28, x_28, x_28, x_28);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f0cbfb3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,118 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-          %8 = OpTypeFunction %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %14 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_5 = OpConstant %int 5
-      %int_1 = OpConstant %int 1
-      %int_8 = OpConstant %int 8
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-         %44 = OpTypeFunction %void
-      %false = OpConstantFalse %bool
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-      %func_ = OpFunction %float None %8
-         %10 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %14
-               OpStore %i %int_0
-               OpBranch %16
-         %16 = OpLabel
-               OpLoopMerge %17 %18 None
-               OpBranch %19
-         %19 = OpLabel
-         %20 = OpLoad %int %i
-         %22 = OpSLessThan %bool %20 %int_10
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %26
-         %25 = OpLabel
-               OpBranch %24
-         %26 = OpLabel
-               OpBranch %17
-         %24 = OpLabel
-         %27 = OpLoad %int %i
-         %29 = OpSGreaterThan %bool %27 %int_5
-               OpSelectionMerge %30 None
-               OpBranchConditional %29 %31 %30
-         %31 = OpLabel
-         %32 = OpLoad %int %i
-         %34 = OpIAdd %int %32 %int_1
-               OpStore %i %34
-               OpBranch %30
-         %30 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpSGreaterThan %bool %35 %int_8
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %38
-         %39 = OpLabel
-               OpReturnValue %float_0
-         %38 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-         %41 = OpLoad %int %i
-         %42 = OpIAdd %int %41 %int_1
-               OpStore %i %42
-               OpBranch %16
-         %17 = OpLabel
-               OpReturnValue %float_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %44
-         %47 = OpLabel
-               OpSelectionMerge %49 None
-               OpBranchConditional %false %50 %51
-         %50 = OpLabel
-         %52 = OpFunctionCall %float %func_
-         %53 = OpCompositeConstruct %v4float %52 %52 %52 %52
-               OpStore %x_GLF_color %53
-               OpBranch %49
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %44
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c5a9a86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var i : i32;
-  i = 0;
-  loop {
-    let x_35 : i32 = i;
-    if ((x_35 < 10)) {
-    } else {
-      break;
-    }
-    let x_38 : i32 = i;
-    if ((x_38 > 5)) {
-      let x_42 : i32 = i;
-      i = (x_42 + 1);
-    }
-    let x_44 : i32 = i;
-    if ((x_44 > 8)) {
-      return 0.0;
-    }
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  return 1.0;
-}
-
-fn main_1() {
-  if (false) {
-    let x_28 : f32 = func_();
-    x_GLF_color = vec4<f32>(x_28, x_28, x_28, x_28);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a2053a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  int i = 0;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      if ((i > 5)) {
-        i = (i + 1);
-      }
-      if ((i > 8)) {
-        return 0.0f;
-      }
-    }
-  }
-  return 1.0f;
-}
-
-void main_1() {
-  if (false) {
-    const float x_28 = func_();
-    x_GLF_color = float4(x_28, x_28, x_28, x_28);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 117d43e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_() {
-  int i = 0;
-  i = 0;
-  while (true) {
-    int const x_35 = i;
-    if ((x_35 < 10)) {
-    } else {
-      break;
-    }
-    int const x_38 = i;
-    if ((x_38 > 5)) {
-      int const x_42 = i;
-      i = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-    }
-    int const x_44 = i;
-    if ((x_44 > 8)) {
-      return 0.0f;
-    }
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  return 1.0f;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  if (false) {
-    float const x_28 = func_();
-    *(tint_symbol_3) = float4(x_28, x_28, x_28, x_28);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f0cbfb3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,118 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-          %8 = OpTypeFunction %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %14 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_5 = OpConstant %int 5
-      %int_1 = OpConstant %int 1
-      %int_8 = OpConstant %int 8
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-         %44 = OpTypeFunction %void
-      %false = OpConstantFalse %bool
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-      %func_ = OpFunction %float None %8
-         %10 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %14
-               OpStore %i %int_0
-               OpBranch %16
-         %16 = OpLabel
-               OpLoopMerge %17 %18 None
-               OpBranch %19
-         %19 = OpLabel
-         %20 = OpLoad %int %i
-         %22 = OpSLessThan %bool %20 %int_10
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %26
-         %25 = OpLabel
-               OpBranch %24
-         %26 = OpLabel
-               OpBranch %17
-         %24 = OpLabel
-         %27 = OpLoad %int %i
-         %29 = OpSGreaterThan %bool %27 %int_5
-               OpSelectionMerge %30 None
-               OpBranchConditional %29 %31 %30
-         %31 = OpLabel
-         %32 = OpLoad %int %i
-         %34 = OpIAdd %int %32 %int_1
-               OpStore %i %34
-               OpBranch %30
-         %30 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpSGreaterThan %bool %35 %int_8
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %38
-         %39 = OpLabel
-               OpReturnValue %float_0
-         %38 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-         %41 = OpLoad %int %i
-         %42 = OpIAdd %int %41 %int_1
-               OpStore %i %42
-               OpBranch %16
-         %17 = OpLabel
-               OpReturnValue %float_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %44
-         %47 = OpLabel
-               OpSelectionMerge %49 None
-               OpBranchConditional %false %50 %51
-         %50 = OpLabel
-         %52 = OpFunctionCall %float %func_
-         %53 = OpCompositeConstruct %v4float %52 %52 %52 %52
-               OpStore %x_GLF_color %53
-               OpBranch %49
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %44
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c5a9a86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-return-in-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var i : i32;
-  i = 0;
-  loop {
-    let x_35 : i32 = i;
-    if ((x_35 < 10)) {
-    } else {
-      break;
-    }
-    let x_38 : i32 = i;
-    if ((x_38 > 5)) {
-      let x_42 : i32 = i;
-      i = (x_42 + 1);
-    }
-    let x_44 : i32 = i;
-    if ((x_44 > 8)) {
-      return 0.0;
-    }
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  return 1.0;
-}
-
-fn main_1() {
-  if (false) {
-    let x_28 : f32 = func_();
-    x_GLF_color = vec4<f32>(x_28, x_28, x_28, x_28);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 530e5b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  float x = 0.0f;
-  x = 2.0f;
-  const float x_35 = gl_FragCoord.x;
-  if ((x_35 == 12.0f)) {
-    const float x_40 = gl_FragCoord.y;
-    if ((x_40 == 13.0f)) {
-      x = (x + 1.0f);
-    }
-    return x;
-  }
-  return 1.0f;
-}
-
-void main_1() {
-  if (false) {
-    const float x_31 = func_();
-    x_GLF_color = float4(x_31, x_31, x_31, x_31);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.msl
deleted file mode 100644
index d992865..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(thread float4* const tint_symbol_3) {
-  float x = 0.0f;
-  x = 2.0f;
-  float const x_35 = (*(tint_symbol_3)).x;
-  if ((x_35 == 12.0f)) {
-    float const x_40 = (*(tint_symbol_3)).y;
-    if ((x_40 == 13.0f)) {
-      float const x_44 = x;
-      x = (x_44 + 1.0f);
-    }
-    float const x_46 = x;
-    return x_46;
-  }
-  return 1.0f;
-}
-
-void main_1(thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  if (false) {
-    float const x_31 = func_(tint_symbol_4);
-    *(tint_symbol_5) = float4(x_31, x_31, x_31, x_31);
-  } else {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 782abec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %11 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-    %float_2 = OpConstant %float 2
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_12 = OpConstant %float 12
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-   %float_13 = OpConstant %float 13
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-         %39 = OpTypeFunction %void
-      %false = OpConstantFalse %bool
-    %float_0 = OpConstant %float 0
-         %50 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %51 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %float None %11
-         %13 = OpLabel
-          %x = OpVariable %_ptr_Function_float Function %16
-               OpStore %x %float_2
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %22 = OpLoad %float %21
-         %24 = OpFOrdEqual %bool %22 %float_12
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-         %29 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpFOrdEqual %bool %30 %float_13
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %33
-         %34 = OpLabel
-         %35 = OpLoad %float %x
-         %37 = OpFAdd %float %35 %float_1
-               OpStore %x %37
-               OpBranch %33
-         %33 = OpLabel
-         %38 = OpLoad %float %x
-               OpReturnValue %38
-         %26 = OpLabel
-               OpReturnValue %float_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %39
-         %42 = OpLabel
-               OpSelectionMerge %44 None
-               OpBranchConditional %false %45 %46
-         %45 = OpLabel
-         %47 = OpFunctionCall %float %func_
-         %48 = OpCompositeConstruct %v4float %47 %47 %47 %47
-               OpStore %x_GLF_color %48
-               OpBranch %44
-         %46 = OpLabel
-               OpStore %x_GLF_color %50
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %51
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %55 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %56 = OpFunctionCall %void %main_1
-         %57 = OpLoad %v4float %x_GLF_color
-         %58 = OpCompositeConstruct %main_out %57
-               OpReturnValue %58
-               OpFunctionEnd
-       %main = OpFunction %void None %39
-         %60 = OpLabel
-         %62 = OpLoad %v4float %gl_FragCoord_param_1
-         %61 = OpFunctionCall %main_out %main_inner %62
-         %63 = OpCompositeExtract %v4float %61 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index cf1481a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var x : f32;
-  x = 2.0;
-  let x_35 : f32 = gl_FragCoord.x;
-  if ((x_35 == 12.0)) {
-    let x_40 : f32 = gl_FragCoord.y;
-    if ((x_40 == 13.0)) {
-      let x_44 : f32 = x;
-      x = (x_44 + 1.0);
-    }
-    let x_46 : f32 = x;
-    return x_46;
-  }
-  return 1.0;
-}
-
-fn main_1() {
-  if (false) {
-    let x_31 : f32 = func_();
-    x_GLF_color = vec4<f32>(x_31, x_31, x_31, x_31);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 530e5b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  float x = 0.0f;
-  x = 2.0f;
-  const float x_35 = gl_FragCoord.x;
-  if ((x_35 == 12.0f)) {
-    const float x_40 = gl_FragCoord.y;
-    if ((x_40 == 13.0f)) {
-      x = (x + 1.0f);
-    }
-    return x;
-  }
-  return 1.0f;
-}
-
-void main_1() {
-  if (false) {
-    const float x_31 = func_();
-    x_GLF_color = float4(x_31, x_31, x_31, x_31);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.msl
deleted file mode 100644
index d992865..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(thread float4* const tint_symbol_3) {
-  float x = 0.0f;
-  x = 2.0f;
-  float const x_35 = (*(tint_symbol_3)).x;
-  if ((x_35 == 12.0f)) {
-    float const x_40 = (*(tint_symbol_3)).y;
-    if ((x_40 == 13.0f)) {
-      float const x_44 = x;
-      x = (x_44 + 1.0f);
-    }
-    float const x_46 = x;
-    return x_46;
-  }
-  return 1.0f;
-}
-
-void main_1(thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  if (false) {
-    float const x_31 = func_(tint_symbol_4);
-    *(tint_symbol_5) = float4(x_31, x_31, x_31, x_31);
-  } else {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 782abec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %11 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-    %float_2 = OpConstant %float 2
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_12 = OpConstant %float 12
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-   %float_13 = OpConstant %float 13
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-         %39 = OpTypeFunction %void
-      %false = OpConstantFalse %bool
-    %float_0 = OpConstant %float 0
-         %50 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %51 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %float None %11
-         %13 = OpLabel
-          %x = OpVariable %_ptr_Function_float Function %16
-               OpStore %x %float_2
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %22 = OpLoad %float %21
-         %24 = OpFOrdEqual %bool %22 %float_12
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-         %29 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpFOrdEqual %bool %30 %float_13
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %33
-         %34 = OpLabel
-         %35 = OpLoad %float %x
-         %37 = OpFAdd %float %35 %float_1
-               OpStore %x %37
-               OpBranch %33
-         %33 = OpLabel
-         %38 = OpLoad %float %x
-               OpReturnValue %38
-         %26 = OpLabel
-               OpReturnValue %float_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %39
-         %42 = OpLabel
-               OpSelectionMerge %44 None
-               OpBranchConditional %false %45 %46
-         %45 = OpLabel
-         %47 = OpFunctionCall %float %func_
-         %48 = OpCompositeConstruct %v4float %47 %47 %47 %47
-               OpStore %x_GLF_color %48
-               OpBranch %44
-         %46 = OpLabel
-               OpStore %x_GLF_color %50
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %51
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %55 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %56 = OpFunctionCall %void %main_1
-         %57 = OpLoad %v4float %x_GLF_color
-         %58 = OpCompositeConstruct %main_out %57
-               OpReturnValue %58
-               OpFunctionEnd
-       %main = OpFunction %void None %39
-         %60 = OpLabel
-         %62 = OpLoad %v4float %gl_FragCoord_param_1
-         %61 = OpFunctionCall %main_out %main_inner %62
-         %63 = OpCompositeExtract %v4float %61 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index cf1481a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inline-pass-unreachable-func/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var x : f32;
-  x = 2.0;
-  let x_35 : f32 = gl_FragCoord.x;
-  if ((x_35 == 12.0)) {
-    let x_40 : f32 = gl_FragCoord.y;
-    if ((x_40 == 13.0)) {
-      let x_44 : f32 = x;
-      x = (x_44 + 1.0);
-    }
-    let x_46 : f32 = x;
-    return x_46;
-  }
-  return 1.0;
-}
-
-fn main_1() {
-  if (false) {
-    let x_31 : f32 = func_();
-    x_GLF_color = vec4<f32>(x_31, x_31, x_31, x_31);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index dd5b54a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int arr[2] = (int[2])0;
-  int a = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  i = x_40;
-  while (true) {
-    const int x_45 = i;
-    const int x_47 = asint(x_7[2].x);
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    const int x_50 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    arr[x_50] = x_52;
-    {
-      i = (i + 1);
-    }
-  }
-  a = -1;
-  const float x_57 = gl_FragCoord.y;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_59 = asfloat(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if (!((x_57 < x_59))) {
-    const int x_65 = (a + 1);
-    a = x_65;
-    const int x_67 = asint(x_7[1].x);
-    arr[x_65] = x_67;
-  }
-  const int x_70 = (a + 1);
-  a = x_70;
-  const int x_72 = asint(x_7[2].x);
-  arr[x_70] = x_72;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_75 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_77 = arr[x_75];
-  const int x_79 = asint(x_7[1].x);
-  if ((x_77 == x_79)) {
-    const int x_84 = a;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_87 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_90 = asint(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_84), float(x_87), float(x_90), float(a));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_96 = asint(x_7[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_97 = float(x_96);
-    x_GLF_color = float4(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.msl
deleted file mode 100644
index bf26d93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_11, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  tint_array_wrapper_2 arr = {};
-  int a = 0;
-  int const x_40 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  i = x_40;
-  while (true) {
-    int const x_45 = i;
-    int const x_47 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    int const x_52 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    arr.arr[x_50] = x_52;
-    {
-      int const x_54 = i;
-      i = as_type<int>((as_type<uint>(x_54) + as_type<uint>(1)));
-    }
-  }
-  a = -1;
-  float const x_57 = (*(tint_symbol_3)).y;
-  float const x_59 = x_11.x_GLF_uniform_float_values.arr[0].el;
-  if (!((x_57 < x_59))) {
-    int const x_64 = a;
-    int const x_65 = as_type<int>((as_type<uint>(x_64) + as_type<uint>(1)));
-    a = x_65;
-    int const x_67 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    arr.arr[x_65] = x_67;
-  }
-  int const x_69 = a;
-  int const x_70 = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-  a = x_70;
-  int const x_72 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  arr.arr[x_70] = x_72;
-  int const x_75 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_77 = arr.arr[x_75];
-  int const x_79 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_77 == x_79)) {
-    int const x_84 = a;
-    int const x_87 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_90 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_92 = a;
-    *(tint_symbol_4) = float4(float(x_84), float(x_87), float(x_90), float(x_92));
-  } else {
-    int const x_96 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_97 = float(x_96);
-    *(tint_symbol_4) = float4(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_11, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 65424da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,197 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 120
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %arr "arr"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %34 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-        %107 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %29
-        %arr = OpVariable %_ptr_Function__arr_int_uint_2 Function %34
-          %a = OpVariable %_ptr_Function_int Function %29
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %40 = OpLoad %int %39
-               OpStore %i %40
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpLoad %int %i
-         %47 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %48 = OpLoad %int %47
-         %49 = OpSLessThan %bool %45 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %49 %52 %53
-         %52 = OpLabel
-               OpBranch %51
-         %53 = OpLabel
-               OpBranch %42
-         %51 = OpLabel
-         %54 = OpLoad %int %i
-         %55 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Function_int %arr %54
-               OpStore %57 %56
-               OpBranch %43
-         %43 = OpLabel
-         %58 = OpLoad %int %i
-         %60 = OpIAdd %int %58 %int_1
-               OpStore %i %60
-               OpBranch %41
-         %42 = OpLabel
-               OpStore %a %int_n1
-         %63 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %64 = OpLoad %float %63
-         %66 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %67 = OpLoad %float %66
-         %69 = OpFOrdLessThan %bool %64 %67
-         %68 = OpLogicalNot %bool %69
-               OpSelectionMerge %70 None
-               OpBranchConditional %68 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %int %a
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %a %73
-         %74 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_int %arr %73
-               OpStore %76 %75
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %int %a
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %a %78
-         %79 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Function_int %arr %78
-               OpStore %81 %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Function_int %arr %83
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpIEqual %bool %85 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-         %92 = OpLoad %int %a
-         %93 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %96 = OpLoad %int %95
-         %97 = OpLoad %int %a
-         %98 = OpConvertSToF %float %92
-         %99 = OpConvertSToF %float %94
-        %100 = OpConvertSToF %float %96
-        %101 = OpConvertSToF %float %97
-        %102 = OpCompositeConstruct %v4float %98 %99 %100 %101
-               OpStore %x_GLF_color %102
-               OpBranch %89
-         %91 = OpLabel
-        %103 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-        %104 = OpLoad %int %103
-        %105 = OpConvertSToF %float %104
-        %106 = OpCompositeConstruct %v4float %105 %105 %105 %105
-               OpStore %x_GLF_color %106
-               OpBranch %89
-         %89 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %107
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %111 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %112 = OpFunctionCall %void %main_1
-        %113 = OpLoad %v4float %x_GLF_color
-        %114 = OpCompositeConstruct %main_out %113
-               OpReturnValue %114
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %116 = OpLabel
-        %118 = OpLoad %v4float %gl_FragCoord_param_1
-        %117 = OpFunctionCall %main_out %main_inner %118
-        %119 = OpCompositeExtract %v4float %117 0
-               OpStore %x_GLF_color_1_1 %119
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index afe4b0e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,87 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var arr : array<i32, 2>;
-  var a : i32;
-  let x_40 : i32 = x_7.x_GLF_uniform_int_values[0];
-  i = x_40;
-  loop {
-    let x_45 : i32 = i;
-    let x_47 : i32 = x_7.x_GLF_uniform_int_values[2];
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_7.x_GLF_uniform_int_values[0];
-    arr[x_50] = x_52;
-
-    continuing {
-      let x_54 : i32 = i;
-      i = (x_54 + 1);
-    }
-  }
-  a = -1;
-  let x_57 : f32 = gl_FragCoord.y;
-  let x_59 : f32 = x_11.x_GLF_uniform_float_values[0];
-  if (!((x_57 < x_59))) {
-    let x_64 : i32 = a;
-    let x_65 : i32 = (x_64 + 1);
-    a = x_65;
-    let x_67 : i32 = x_7.x_GLF_uniform_int_values[1];
-    arr[x_65] = x_67;
-  }
-  let x_69 : i32 = a;
-  let x_70 : i32 = (x_69 + 1);
-  a = x_70;
-  let x_72 : i32 = x_7.x_GLF_uniform_int_values[2];
-  arr[x_70] = x_72;
-  let x_75 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_77 : i32 = arr[x_75];
-  let x_79 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_77 == x_79)) {
-    let x_84 : i32 = a;
-    let x_87 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_90 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_92 : i32 = a;
-    x_GLF_color = vec4<f32>(f32(x_84), f32(x_87), f32(x_90), f32(x_92));
-  } else {
-    let x_96 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_97 : f32 = f32(x_96);
-    x_GLF_color = vec4<f32>(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index dd5b54a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int arr[2] = (int[2])0;
-  int a = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  i = x_40;
-  while (true) {
-    const int x_45 = i;
-    const int x_47 = asint(x_7[2].x);
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    const int x_50 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    arr[x_50] = x_52;
-    {
-      i = (i + 1);
-    }
-  }
-  a = -1;
-  const float x_57 = gl_FragCoord.y;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_59 = asfloat(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if (!((x_57 < x_59))) {
-    const int x_65 = (a + 1);
-    a = x_65;
-    const int x_67 = asint(x_7[1].x);
-    arr[x_65] = x_67;
-  }
-  const int x_70 = (a + 1);
-  a = x_70;
-  const int x_72 = asint(x_7[2].x);
-  arr[x_70] = x_72;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_75 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_77 = arr[x_75];
-  const int x_79 = asint(x_7[1].x);
-  if ((x_77 == x_79)) {
-    const int x_84 = a;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_87 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_90 = asint(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_84), float(x_87), float(x_90), float(a));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_96 = asint(x_7[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_97 = float(x_96);
-    x_GLF_color = float4(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.msl
deleted file mode 100644
index bf26d93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_11, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  tint_array_wrapper_2 arr = {};
-  int a = 0;
-  int const x_40 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  i = x_40;
-  while (true) {
-    int const x_45 = i;
-    int const x_47 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    int const x_50 = i;
-    int const x_52 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    arr.arr[x_50] = x_52;
-    {
-      int const x_54 = i;
-      i = as_type<int>((as_type<uint>(x_54) + as_type<uint>(1)));
-    }
-  }
-  a = -1;
-  float const x_57 = (*(tint_symbol_3)).y;
-  float const x_59 = x_11.x_GLF_uniform_float_values.arr[0].el;
-  if (!((x_57 < x_59))) {
-    int const x_64 = a;
-    int const x_65 = as_type<int>((as_type<uint>(x_64) + as_type<uint>(1)));
-    a = x_65;
-    int const x_67 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    arr.arr[x_65] = x_67;
-  }
-  int const x_69 = a;
-  int const x_70 = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-  a = x_70;
-  int const x_72 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  arr.arr[x_70] = x_72;
-  int const x_75 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_77 = arr.arr[x_75];
-  int const x_79 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_77 == x_79)) {
-    int const x_84 = a;
-    int const x_87 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_90 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_92 = a;
-    *(tint_symbol_4) = float4(float(x_84), float(x_87), float(x_90), float(x_92));
-  } else {
-    int const x_96 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_97 = float(x_96);
-    *(tint_symbol_4) = float4(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_11, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 65424da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,197 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 120
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %arr "arr"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %34 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-        %107 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %29
-        %arr = OpVariable %_ptr_Function__arr_int_uint_2 Function %34
-          %a = OpVariable %_ptr_Function_int Function %29
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %40 = OpLoad %int %39
-               OpStore %i %40
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpLoad %int %i
-         %47 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %48 = OpLoad %int %47
-         %49 = OpSLessThan %bool %45 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %49 %52 %53
-         %52 = OpLabel
-               OpBranch %51
-         %53 = OpLabel
-               OpBranch %42
-         %51 = OpLabel
-         %54 = OpLoad %int %i
-         %55 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Function_int %arr %54
-               OpStore %57 %56
-               OpBranch %43
-         %43 = OpLabel
-         %58 = OpLoad %int %i
-         %60 = OpIAdd %int %58 %int_1
-               OpStore %i %60
-               OpBranch %41
-         %42 = OpLabel
-               OpStore %a %int_n1
-         %63 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %64 = OpLoad %float %63
-         %66 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %67 = OpLoad %float %66
-         %69 = OpFOrdLessThan %bool %64 %67
-         %68 = OpLogicalNot %bool %69
-               OpSelectionMerge %70 None
-               OpBranchConditional %68 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %int %a
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %a %73
-         %74 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_int %arr %73
-               OpStore %76 %75
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %int %a
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %a %78
-         %79 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Function_int %arr %78
-               OpStore %81 %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Function_int %arr %83
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpIEqual %bool %85 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-         %92 = OpLoad %int %a
-         %93 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %96 = OpLoad %int %95
-         %97 = OpLoad %int %a
-         %98 = OpConvertSToF %float %92
-         %99 = OpConvertSToF %float %94
-        %100 = OpConvertSToF %float %96
-        %101 = OpConvertSToF %float %97
-        %102 = OpCompositeConstruct %v4float %98 %99 %100 %101
-               OpStore %x_GLF_color %102
-               OpBranch %89
-         %91 = OpLabel
-        %103 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-        %104 = OpLoad %int %103
-        %105 = OpConvertSToF %float %104
-        %106 = OpCompositeConstruct %v4float %105 %105 %105 %105
-               OpStore %x_GLF_color %106
-               OpBranch %89
-         %89 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %107
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %111 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %112 = OpFunctionCall %void %main_1
-        %113 = OpLoad %v4float %x_GLF_color
-        %114 = OpCompositeConstruct %main_out %113
-               OpReturnValue %114
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %116 = OpLabel
-        %118 = OpLoad %v4float %gl_FragCoord_param_1
-        %117 = OpFunctionCall %main_out %main_inner %118
-        %119 = OpCompositeExtract %v4float %117 0
-               OpStore %x_GLF_color_1_1 %119
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index afe4b0e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-increase-negative/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,87 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var arr : array<i32, 2>;
-  var a : i32;
-  let x_40 : i32 = x_7.x_GLF_uniform_int_values[0];
-  i = x_40;
-  loop {
-    let x_45 : i32 = i;
-    let x_47 : i32 = x_7.x_GLF_uniform_int_values[2];
-    if ((x_45 < x_47)) {
-    } else {
-      break;
-    }
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_7.x_GLF_uniform_int_values[0];
-    arr[x_50] = x_52;
-
-    continuing {
-      let x_54 : i32 = i;
-      i = (x_54 + 1);
-    }
-  }
-  a = -1;
-  let x_57 : f32 = gl_FragCoord.y;
-  let x_59 : f32 = x_11.x_GLF_uniform_float_values[0];
-  if (!((x_57 < x_59))) {
-    let x_64 : i32 = a;
-    let x_65 : i32 = (x_64 + 1);
-    a = x_65;
-    let x_67 : i32 = x_7.x_GLF_uniform_int_values[1];
-    arr[x_65] = x_67;
-  }
-  let x_69 : i32 = a;
-  let x_70 : i32 = (x_69 + 1);
-  a = x_70;
-  let x_72 : i32 = x_7.x_GLF_uniform_int_values[2];
-  arr[x_70] = x_72;
-  let x_75 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_77 : i32 = arr[x_75];
-  let x_79 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_77 == x_79)) {
-    let x_84 : i32 = a;
-    let x_87 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_90 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_92 : i32 = a;
-    x_GLF_color = vec4<f32>(f32(x_84), f32(x_87), f32(x_90), f32(x_92));
-  } else {
-    let x_96 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_97 : f32 = f32(x_96);
-    x_GLF_color = vec4<f32>(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a3d6d58..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  float b = 0.0f;
-  const int x_34 = asint(x_6[1].x);
-  a = x_34;
-  a = (a + 1);
-  const int x_38 = asint(x_6[1].x);
-  i = x_38;
-  while (true) {
-    const int x_43 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    b = ldexp(float(i), -(a));
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_55 = b;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_57 = asfloat(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_55 == x_57)) {
-    const int x_63 = asint(x_6[2].x);
-    const int x_66 = asint(x_6[1].x);
-    const int x_69 = asint(x_6[1].x);
-    const int x_72 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_63), float(x_66), float(x_69), float(x_72));
-  } else {
-    const float x_75 = b;
-    x_GLF_color = float4(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.msl
deleted file mode 100644
index d1326de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  float b = 0.0f;
-  int const x_34 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_34;
-  int const x_35 = a;
-  a = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_38;
-  while (true) {
-    int const x_43 = i;
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    int const x_48 = i;
-    int const x_50 = a;
-    b = ldexp(float(x_48), tint_unary_minus(x_50));
-    {
-      int const x_53 = i;
-      i = as_type<int>((as_type<uint>(x_53) + as_type<uint>(1)));
-    }
-  }
-  float const x_55 = b;
-  float const x_57 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_55 == x_57)) {
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_66 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_69 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_72 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_63), float(x_66), float(x_69), float(x_72));
-  } else {
-    float const x_75 = b;
-    *(tint_symbol_3) = float4(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index cab9df1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,161 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %85 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %26
-          %i = OpVariable %_ptr_Function_int Function %26
-          %b = OpVariable %_ptr_Function_float Function %30
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %35 = OpLoad %int %34
-               OpStore %a %35
-         %36 = OpLoad %int %a
-         %37 = OpIAdd %int %36 %int_1
-               OpStore %a %37
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %39 = OpLoad %int %38
-               OpStore %i %39
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %i
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %47 = OpLoad %int %46
-         %48 = OpSLessThan %bool %44 %47
-               OpSelectionMerge %50 None
-               OpBranchConditional %48 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %41
-         %50 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpLoad %int %a
-         %57 = OpConvertSToF %float %53
-         %58 = OpSNegate %int %54
-         %55 = OpExtInst %float %56 Ldexp %57 %58
-               OpStore %b %55
-               OpBranch %42
-         %42 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpIAdd %int %59 %int_1
-               OpStore %i %60
-               OpBranch %40
-         %41 = OpLabel
-         %61 = OpLoad %float %b
-         %63 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %64 = OpLoad %float %63
-         %65 = OpFOrdEqual %bool %61 %64
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %71
-         %79 = OpConvertSToF %float %73
-         %80 = OpConvertSToF %float %75
-         %81 = OpConvertSToF %float %77
-         %82 = OpCompositeConstruct %v4float %78 %79 %80 %81
-               OpStore %x_GLF_color %82
-               OpBranch %66
-         %68 = OpLabel
-         %83 = OpLoad %float %b
-         %84 = OpCompositeConstruct %v4float %83 %83 %83 %83
-               OpStore %x_GLF_color %84
-               OpBranch %66
-         %66 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %85
-         %88 = OpLabel
-         %89 = OpFunctionCall %void %main_1
-         %90 = OpLoad %v4float %x_GLF_color
-         %91 = OpCompositeConstruct %main_out %90
-               OpReturnValue %91
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %93 = OpLabel
-         %94 = OpFunctionCall %main_out %main_inner
-         %95 = OpCompositeExtract %v4float %94 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bb8ec9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  var b : f32;
-  let x_34 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_34;
-  let x_35 : i32 = a;
-  a = (x_35 + 1);
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_38;
-  loop {
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    let x_48 : i32 = i;
-    let x_50 : i32 = a;
-    b = ldexp(f32(x_48), -(x_50));
-
-    continuing {
-      let x_53 : i32 = i;
-      i = (x_53 + 1);
-    }
-  }
-  let x_55 : f32 = b;
-  let x_57 : f32 = x_10.x_GLF_uniform_float_values[0];
-  if ((x_55 == x_57)) {
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_66 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_69 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_72 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_63), f32(x_66), f32(x_69), f32(x_72));
-  } else {
-    let x_75 : f32 = b;
-    x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a3d6d58..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  float b = 0.0f;
-  const int x_34 = asint(x_6[1].x);
-  a = x_34;
-  a = (a + 1);
-  const int x_38 = asint(x_6[1].x);
-  i = x_38;
-  while (true) {
-    const int x_43 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    b = ldexp(float(i), -(a));
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_55 = b;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_57 = asfloat(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_55 == x_57)) {
-    const int x_63 = asint(x_6[2].x);
-    const int x_66 = asint(x_6[1].x);
-    const int x_69 = asint(x_6[1].x);
-    const int x_72 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_63), float(x_66), float(x_69), float(x_72));
-  } else {
-    const float x_75 = b;
-    x_GLF_color = float4(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.msl
deleted file mode 100644
index d1326de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  float b = 0.0f;
-  int const x_34 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_34;
-  int const x_35 = a;
-  a = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_38;
-  while (true) {
-    int const x_43 = i;
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    int const x_48 = i;
-    int const x_50 = a;
-    b = ldexp(float(x_48), tint_unary_minus(x_50));
-    {
-      int const x_53 = i;
-      i = as_type<int>((as_type<uint>(x_53) + as_type<uint>(1)));
-    }
-  }
-  float const x_55 = b;
-  float const x_57 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_55 == x_57)) {
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_66 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_69 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_72 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_63), float(x_66), float(x_69), float(x_72));
-  } else {
-    float const x_75 = b;
-    *(tint_symbol_3) = float4(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index cab9df1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,161 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %85 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %26
-          %i = OpVariable %_ptr_Function_int Function %26
-          %b = OpVariable %_ptr_Function_float Function %30
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %35 = OpLoad %int %34
-               OpStore %a %35
-         %36 = OpLoad %int %a
-         %37 = OpIAdd %int %36 %int_1
-               OpStore %a %37
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %39 = OpLoad %int %38
-               OpStore %i %39
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %i
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %47 = OpLoad %int %46
-         %48 = OpSLessThan %bool %44 %47
-               OpSelectionMerge %50 None
-               OpBranchConditional %48 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %41
-         %50 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpLoad %int %a
-         %57 = OpConvertSToF %float %53
-         %58 = OpSNegate %int %54
-         %55 = OpExtInst %float %56 Ldexp %57 %58
-               OpStore %b %55
-               OpBranch %42
-         %42 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpIAdd %int %59 %int_1
-               OpStore %i %60
-               OpBranch %40
-         %41 = OpLabel
-         %61 = OpLoad %float %b
-         %63 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %64 = OpLoad %float %63
-         %65 = OpFOrdEqual %bool %61 %64
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %71
-         %79 = OpConvertSToF %float %73
-         %80 = OpConvertSToF %float %75
-         %81 = OpConvertSToF %float %77
-         %82 = OpCompositeConstruct %v4float %78 %79 %80 %81
-               OpStore %x_GLF_color %82
-               OpBranch %66
-         %68 = OpLabel
-         %83 = OpLoad %float %b
-         %84 = OpCompositeConstruct %v4float %83 %83 %83 %83
-               OpStore %x_GLF_color %84
-               OpBranch %66
-         %66 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %85
-         %88 = OpLabel
-         %89 = OpFunctionCall %void %main_1
-         %90 = OpLoad %v4float %x_GLF_color
-         %91 = OpCompositeConstruct %main_out %90
-               OpReturnValue %91
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %93 = OpLabel
-         %94 = OpFunctionCall %main_out %main_inner
-         %95 = OpCompositeExtract %v4float %94 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index bb8ec9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-ldexp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  var b : f32;
-  let x_34 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_34;
-  let x_35 : i32 = a;
-  a = (x_35 + 1);
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_38;
-  loop {
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    let x_48 : i32 = i;
-    let x_50 : i32 = a;
-    b = ldexp(f32(x_48), -(x_50));
-
-    continuing {
-      let x_53 : i32 = i;
-      i = (x_53 + 1);
-    }
-  }
-  let x_55 : f32 = b;
-  let x_57 : f32 = x_10.x_GLF_uniform_float_values[0];
-  if ((x_55 == x_57)) {
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_66 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_69 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_72 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_63), f32(x_66), f32(x_69), f32(x_72));
-  } else {
-    let x_75 : f32 = b;
-    x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4122d2b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,86 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_f1_(inout float f) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  const int x_60 = asint(x_8[1].x);
-  a = x_60;
-  const int x_62 = asint(x_8[2].x);
-  b = x_62;
-  const int x_64 = asint(x_8[2].x);
-  i = x_64;
-  while (true) {
-    const int x_69 = i;
-    const int x_71 = asint(x_8[4].x);
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    const int x_74 = a;
-    const int x_76 = asint(x_8[3].x);
-    if ((x_74 > x_76)) {
-      break;
-    }
-    const float x_80 = f;
-    const int x_84 = asint(x_8[1].x);
-    a = (((int(x_80) - 1) - x_84) + i);
-    b = (b + 1);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_92 = b;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_94 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_92 == x_94)) {
-    const int x_100 = asint(x_8[1].x);
-    return x_100;
-  } else {
-    const int x_102 = asint(x_8[2].x);
-    return x_102;
-  }
-  return 0;
-}
-
-void main_1() {
-  float param = 0.0f;
-  param = 0.699999988f;
-  const int x_34 = func_f1_(param);
-  const int x_36 = asint(x_8[1].x);
-  if ((x_34 == x_36)) {
-    const int x_42 = asint(x_8[1].x);
-    const int x_45 = asint(x_8[2].x);
-    const int x_48 = asint(x_8[2].x);
-    const int x_51 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  } else {
-    const int x_55 = asint(x_8[2].x);
-    const float x_56 = float(x_55);
-    x_GLF_color = float4(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.msl
deleted file mode 100644
index 05b50ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_f1_(constant buf0& x_8, thread float* const f) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int const x_60 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  a = x_60;
-  int const x_62 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  b = x_62;
-  int const x_64 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  i = x_64;
-  while (true) {
-    int const x_69 = i;
-    int const x_71 = x_8.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    int const x_74 = a;
-    int const x_76 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_74 > x_76)) {
-      break;
-    }
-    float const x_80 = *(f);
-    int const x_84 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_86 = i;
-    a = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_80)) - as_type<uint>(1)))) - as_type<uint>(x_84)))) + as_type<uint>(x_86)));
-    int const x_88 = b;
-    b = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    {
-      int const x_90 = i;
-      i = as_type<int>((as_type<uint>(x_90) + as_type<uint>(1)));
-    }
-  }
-  int const x_92 = b;
-  int const x_94 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_92 == x_94)) {
-    int const x_100 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    return x_100;
-  } else {
-    int const x_102 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    return x_102;
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float param = 0.0f;
-  param = 0.699999988f;
-  int const x_34 = func_f1_(x_8, &(param));
-  int const x_36 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_34 == x_36)) {
-    int const x_42 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_45 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_48 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_51 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  } else {
-    int const x_55 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    float const x_56 = float(x_55);
-    *(tint_symbol_3) = float4(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index fdd607e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 123
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_f1_ "func_f1_"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %int %_ptr_Function_float
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %80 = OpTypeFunction %void
-         %85 = OpConstantNull %float
-%float_0_699999988 = OpConstant %float 0.699999988
-   %main_out = OpTypeStruct %v4float
-        %112 = OpTypeFunction %main_out
-   %func_f1_ = OpFunction %int None %15
-          %f = OpFunctionParameter %_ptr_Function_float
-         %19 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %22
-          %b = OpVariable %_ptr_Function_int Function %22
-          %i = OpVariable %_ptr_Function_int Function %22
-         %28 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %29 = OpLoad %int %28
-               OpStore %a %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %32 = OpLoad %int %31
-               OpStore %b %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %34 = OpLoad %int %33
-               OpStore %i %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %42 = OpLoad %int %41
-         %43 = OpSLessThan %bool %39 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %36
-         %45 = OpLabel
-         %48 = OpLoad %int %a
-         %50 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %51 = OpLoad %int %50
-         %52 = OpSGreaterThan %bool %48 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpBranch %36
-         %53 = OpLabel
-         %56 = OpLoad %float %f
-         %57 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpLoad %int %i
-         %60 = OpConvertFToS %int %56
-         %61 = OpISub %int %60 %int_1
-         %62 = OpISub %int %61 %58
-         %63 = OpIAdd %int %62 %59
-               OpStore %a %63
-         %64 = OpLoad %int %b
-         %65 = OpIAdd %int %64 %int_1
-               OpStore %b %65
-               OpBranch %37
-         %37 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %i %67
-               OpBranch %35
-         %36 = OpLabel
-         %68 = OpLoad %int %b
-         %70 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpIEqual %bool %68 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %77 = OpLoad %int %76
-               OpReturnValue %77
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %79 = OpLoad %int %78
-               OpReturnValue %79
-         %73 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %80
-         %83 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %85
-               OpStore %param %float_0_699999988
-         %87 = OpFunctionCall %int %func_f1_ %param
-         %89 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpIEqual %bool %87 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %94
-         %93 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %103 = OpConvertSToF %float %96
-        %104 = OpConvertSToF %float %98
-        %105 = OpConvertSToF %float %100
-        %106 = OpConvertSToF %float %102
-        %107 = OpCompositeConstruct %v4float %103 %104 %105 %106
-               OpStore %x_GLF_color %107
-               OpBranch %92
-         %94 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %109
-        %111 = OpCompositeConstruct %v4float %110 %110 %110 %110
-               OpStore %x_GLF_color %111
-               OpBranch %92
-         %92 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %112
-        %115 = OpLabel
-        %116 = OpFunctionCall %void %main_1
-        %117 = OpLoad %v4float %x_GLF_color
-        %118 = OpCompositeConstruct %main_out %117
-               OpReturnValue %118
-               OpFunctionEnd
-       %main = OpFunction %void None %80
-        %120 = OpLabel
-        %121 = OpFunctionCall %main_out %main_inner
-        %122 = OpCompositeExtract %v4float %121 0
-               OpStore %x_GLF_color_1_1 %122
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a15e3bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,86 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_f1_(f : ptr<function, f32>) -> i32 {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  let x_60 : i32 = x_8.x_GLF_uniform_int_values[1];
-  a = x_60;
-  let x_62 : i32 = x_8.x_GLF_uniform_int_values[2];
-  b = x_62;
-  let x_64 : i32 = x_8.x_GLF_uniform_int_values[2];
-  i = x_64;
-  loop {
-    let x_69 : i32 = i;
-    let x_71 : i32 = x_8.x_GLF_uniform_int_values[4];
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    let x_74 : i32 = a;
-    let x_76 : i32 = x_8.x_GLF_uniform_int_values[3];
-    if ((x_74 > x_76)) {
-      break;
-    }
-    let x_80 : f32 = *(f);
-    let x_84 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_86 : i32 = i;
-    a = (((i32(x_80) - 1) - x_84) + x_86);
-    let x_88 : i32 = b;
-    b = (x_88 + 1);
-
-    continuing {
-      let x_90 : i32 = i;
-      i = (x_90 + 1);
-    }
-  }
-  let x_92 : i32 = b;
-  let x_94 : i32 = x_8.x_GLF_uniform_int_values[0];
-  if ((x_92 == x_94)) {
-    let x_100 : i32 = x_8.x_GLF_uniform_int_values[1];
-    return x_100;
-  } else {
-    let x_102 : i32 = x_8.x_GLF_uniform_int_values[2];
-    return x_102;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var param : f32;
-  param = 0.699999988;
-  let x_34 : i32 = func_f1_(&(param));
-  let x_36 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_34 == x_36)) {
-    let x_42 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_45 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_48 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_51 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
-  } else {
-    let x_55 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_56 : f32 = f32(x_55);
-    x_GLF_color = vec4<f32>(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4122d2b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,86 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_f1_(inout float f) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  const int x_60 = asint(x_8[1].x);
-  a = x_60;
-  const int x_62 = asint(x_8[2].x);
-  b = x_62;
-  const int x_64 = asint(x_8[2].x);
-  i = x_64;
-  while (true) {
-    const int x_69 = i;
-    const int x_71 = asint(x_8[4].x);
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    const int x_74 = a;
-    const int x_76 = asint(x_8[3].x);
-    if ((x_74 > x_76)) {
-      break;
-    }
-    const float x_80 = f;
-    const int x_84 = asint(x_8[1].x);
-    a = (((int(x_80) - 1) - x_84) + i);
-    b = (b + 1);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_92 = b;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_94 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_92 == x_94)) {
-    const int x_100 = asint(x_8[1].x);
-    return x_100;
-  } else {
-    const int x_102 = asint(x_8[2].x);
-    return x_102;
-  }
-  return 0;
-}
-
-void main_1() {
-  float param = 0.0f;
-  param = 0.699999988f;
-  const int x_34 = func_f1_(param);
-  const int x_36 = asint(x_8[1].x);
-  if ((x_34 == x_36)) {
-    const int x_42 = asint(x_8[1].x);
-    const int x_45 = asint(x_8[2].x);
-    const int x_48 = asint(x_8[2].x);
-    const int x_51 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  } else {
-    const int x_55 = asint(x_8[2].x);
-    const float x_56 = float(x_55);
-    x_GLF_color = float4(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.msl
deleted file mode 100644
index 05b50ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_f1_(constant buf0& x_8, thread float* const f) {
-  int a = 0;
-  int b = 0;
-  int i = 0;
-  int const x_60 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  a = x_60;
-  int const x_62 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  b = x_62;
-  int const x_64 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  i = x_64;
-  while (true) {
-    int const x_69 = i;
-    int const x_71 = x_8.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    int const x_74 = a;
-    int const x_76 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_74 > x_76)) {
-      break;
-    }
-    float const x_80 = *(f);
-    int const x_84 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_86 = i;
-    a = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_80)) - as_type<uint>(1)))) - as_type<uint>(x_84)))) + as_type<uint>(x_86)));
-    int const x_88 = b;
-    b = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    {
-      int const x_90 = i;
-      i = as_type<int>((as_type<uint>(x_90) + as_type<uint>(1)));
-    }
-  }
-  int const x_92 = b;
-  int const x_94 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_92 == x_94)) {
-    int const x_100 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    return x_100;
-  } else {
-    int const x_102 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    return x_102;
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float param = 0.0f;
-  param = 0.699999988f;
-  int const x_34 = func_f1_(x_8, &(param));
-  int const x_36 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_34 == x_36)) {
-    int const x_42 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_45 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_48 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_51 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  } else {
-    int const x_55 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    float const x_56 = float(x_55);
-    *(tint_symbol_3) = float4(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index fdd607e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 123
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_f1_ "func_f1_"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %int %_ptr_Function_float
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %80 = OpTypeFunction %void
-         %85 = OpConstantNull %float
-%float_0_699999988 = OpConstant %float 0.699999988
-   %main_out = OpTypeStruct %v4float
-        %112 = OpTypeFunction %main_out
-   %func_f1_ = OpFunction %int None %15
-          %f = OpFunctionParameter %_ptr_Function_float
-         %19 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %22
-          %b = OpVariable %_ptr_Function_int Function %22
-          %i = OpVariable %_ptr_Function_int Function %22
-         %28 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %29 = OpLoad %int %28
-               OpStore %a %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %32 = OpLoad %int %31
-               OpStore %b %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %34 = OpLoad %int %33
-               OpStore %i %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %42 = OpLoad %int %41
-         %43 = OpSLessThan %bool %39 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %36
-         %45 = OpLabel
-         %48 = OpLoad %int %a
-         %50 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %51 = OpLoad %int %50
-         %52 = OpSGreaterThan %bool %48 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpBranch %36
-         %53 = OpLabel
-         %56 = OpLoad %float %f
-         %57 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpLoad %int %i
-         %60 = OpConvertFToS %int %56
-         %61 = OpISub %int %60 %int_1
-         %62 = OpISub %int %61 %58
-         %63 = OpIAdd %int %62 %59
-               OpStore %a %63
-         %64 = OpLoad %int %b
-         %65 = OpIAdd %int %64 %int_1
-               OpStore %b %65
-               OpBranch %37
-         %37 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %i %67
-               OpBranch %35
-         %36 = OpLabel
-         %68 = OpLoad %int %b
-         %70 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpIEqual %bool %68 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %77 = OpLoad %int %76
-               OpReturnValue %77
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %79 = OpLoad %int %78
-               OpReturnValue %79
-         %73 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %80
-         %83 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %85
-               OpStore %param %float_0_699999988
-         %87 = OpFunctionCall %int %func_f1_ %param
-         %89 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpIEqual %bool %87 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %94
-         %93 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %103 = OpConvertSToF %float %96
-        %104 = OpConvertSToF %float %98
-        %105 = OpConvertSToF %float %100
-        %106 = OpConvertSToF %float %102
-        %107 = OpCompositeConstruct %v4float %103 %104 %105 %106
-               OpStore %x_GLF_color %107
-               OpBranch %92
-         %94 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %109
-        %111 = OpCompositeConstruct %v4float %110 %110 %110 %110
-               OpStore %x_GLF_color %111
-               OpBranch %92
-         %92 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %112
-        %115 = OpLabel
-        %116 = OpFunctionCall %void %main_1
-        %117 = OpLoad %v4float %x_GLF_color
-        %118 = OpCompositeConstruct %main_out %117
-               OpReturnValue %118
-               OpFunctionEnd
-       %main = OpFunction %void None %80
-        %120 = OpLabel
-        %121 = OpFunctionCall %main_out %main_inner
-        %122 = OpCompositeExtract %v4float %121 0
-               OpStore %x_GLF_color_1_1 %122
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a15e3bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-neg-func-arg/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,86 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_f1_(f : ptr<function, f32>) -> i32 {
-  var a : i32;
-  var b : i32;
-  var i : i32;
-  let x_60 : i32 = x_8.x_GLF_uniform_int_values[1];
-  a = x_60;
-  let x_62 : i32 = x_8.x_GLF_uniform_int_values[2];
-  b = x_62;
-  let x_64 : i32 = x_8.x_GLF_uniform_int_values[2];
-  i = x_64;
-  loop {
-    let x_69 : i32 = i;
-    let x_71 : i32 = x_8.x_GLF_uniform_int_values[4];
-    if ((x_69 < x_71)) {
-    } else {
-      break;
-    }
-    let x_74 : i32 = a;
-    let x_76 : i32 = x_8.x_GLF_uniform_int_values[3];
-    if ((x_74 > x_76)) {
-      break;
-    }
-    let x_80 : f32 = *(f);
-    let x_84 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_86 : i32 = i;
-    a = (((i32(x_80) - 1) - x_84) + x_86);
-    let x_88 : i32 = b;
-    b = (x_88 + 1);
-
-    continuing {
-      let x_90 : i32 = i;
-      i = (x_90 + 1);
-    }
-  }
-  let x_92 : i32 = b;
-  let x_94 : i32 = x_8.x_GLF_uniform_int_values[0];
-  if ((x_92 == x_94)) {
-    let x_100 : i32 = x_8.x_GLF_uniform_int_values[1];
-    return x_100;
-  } else {
-    let x_102 : i32 = x_8.x_GLF_uniform_int_values[2];
-    return x_102;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var param : f32;
-  param = 0.699999988;
-  let x_34 : i32 = func_f1_(&(param));
-  let x_36 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_34 == x_36)) {
-    let x_42 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_45 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_48 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_51 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
-  } else {
-    let x_55 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_56 : f32 = f32(x_55);
-    x_GLF_color = vec4<f32>(x_56, x_56, x_56, x_56);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ca2b4ae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,90 +0,0 @@
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int f1_() {
-  int i = 0;
-  int A[10] = (int[10])0;
-  int a = 0;
-  const int x_56 = asint(x_8[2].x);
-  i = x_56;
-  while (true) {
-    const int x_61 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_63 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_61 < x_63)) {
-    } else {
-      break;
-    }
-    const int x_66 = i;
-    const int x_68 = asint(x_8[2].x);
-    A[x_66] = x_68;
-    {
-      i = (i + 1);
-    }
-  }
-  a = -1;
-  const float x_73 = gl_FragCoord.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_75 = asfloat(x_12[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_73 >= x_75)) {
-    const int x_80 = (a + 1);
-    a = x_80;
-    const int x_82 = asint(x_8[1].x);
-    A[x_80] = x_82;
-  }
-  const int x_85 = asint(x_8[2].x);
-  const int x_87 = A[x_85];
-  const int x_89 = asint(x_8[1].x);
-  if ((x_87 == x_89)) {
-    const int x_95 = (a + 1);
-    a = x_95;
-    const int x_97 = A[x_95];
-    return x_97;
-  } else {
-    const int x_99 = asint(x_8[1].x);
-    return x_99;
-  }
-  return 0;
-}
-
-void main_1() {
-  int i_1 = 0;
-  const int x_42 = f1_();
-  i_1 = x_42;
-  const int x_44 = asint(x_8[1].x);
-  const int x_46 = i_1;
-  const int x_48 = i_1;
-  const int x_51 = asint(x_8[1].x);
-  x_GLF_color = float4(float(x_44), float(x_46), float(x_48), float(x_51));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.msl
deleted file mode 100644
index 60534a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int f1_(constant buf1& x_8, constant buf0& x_12, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_2 A = {};
-  int a = 0;
-  int const x_56 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  i = x_56;
-  while (true) {
-    int const x_61 = i;
-    int const x_63 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_61 < x_63)) {
-    } else {
-      break;
-    }
-    int const x_66 = i;
-    int const x_68 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    A.arr[x_66] = x_68;
-    {
-      int const x_70 = i;
-      i = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-    }
-  }
-  a = -1;
-  float const x_73 = (*(tint_symbol_3)).y;
-  float const x_75 = x_12.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_73 >= x_75)) {
-    int const x_79 = a;
-    int const x_80 = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-    a = x_80;
-    int const x_82 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    A.arr[x_80] = x_82;
-  }
-  int const x_85 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  int const x_87 = A.arr[x_85];
-  int const x_89 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_87 == x_89)) {
-    int const x_94 = a;
-    int const x_95 = as_type<int>((as_type<uint>(x_94) + as_type<uint>(1)));
-    a = x_95;
-    int const x_97 = A.arr[x_95];
-    return x_97;
-  } else {
-    int const x_99 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    return x_99;
-  }
-  return 0;
-}
-
-void main_1(constant buf1& x_8, constant buf0& x_12, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int i_1 = 0;
-  int const x_42 = f1_(x_8, x_12, tint_symbol_4);
-  i_1 = x_42;
-  int const x_44 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_46 = i_1;
-  int const x_48 = i_1;
-  int const x_51 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  *(tint_symbol_5) = float4(float(x_44), float(x_46), float(x_48), float(x_51));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_12, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_8, x_12, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_12, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4cdf233..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,201 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_12 "x_12"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f1_ "f1_"
-               OpName %i "i"
-               OpName %A "A"
-               OpName %a "a"
-               OpName %main_1 "main_1"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %23 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %33 = OpConstantNull %_arr_int_uint_10
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %void = OpTypeVoid
-         %91 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-        %108 = OpTypeFunction %main_out %v4float
-        %f1_ = OpFunction %int None %23
-         %25 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %28
-          %A = OpVariable %_ptr_Function__arr_int_uint_10 Function %33
-          %a = OpVariable %_ptr_Function_int Function %28
-         %38 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %39 = OpLoad %int %38
-               OpStore %i %39
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %i
-         %46 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %47 = OpLoad %int %46
-         %48 = OpSLessThan %bool %44 %47
-               OpSelectionMerge %50 None
-               OpBranchConditional %48 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %41
-         %50 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Function_int %A %53
-               OpStore %56 %55
-               OpBranch %42
-         %42 = OpLabel
-         %57 = OpLoad %int %i
-         %59 = OpIAdd %int %57 %int_1
-               OpStore %i %59
-               OpBranch %40
-         %41 = OpLabel
-               OpStore %a %int_n1
-         %62 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpFOrdGreaterThanEqual %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %70 = OpLoad %int %a
-         %71 = OpIAdd %int %70 %int_1
-               OpStore %a %71
-         %72 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Function_int %A %71
-               OpStore %74 %73
-               OpBranch %68
-         %68 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Function_int %A %76
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpIEqual %bool %78 %80
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-         %85 = OpLoad %int %a
-         %86 = OpIAdd %int %85 %int_1
-               OpStore %a %86
-         %87 = OpAccessChain %_ptr_Function_int %A %86
-         %88 = OpLoad %int %87
-               OpReturnValue %88
-         %84 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %90 = OpLoad %int %89
-               OpReturnValue %90
-         %82 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %91
-         %94 = OpLabel
-        %i_1 = OpVariable %_ptr_Function_int Function %28
-         %96 = OpFunctionCall %int %f1_
-               OpStore %i_1 %96
-         %97 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpLoad %int %i_1
-        %100 = OpLoad %int %i_1
-        %101 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %103 = OpConvertSToF %float %98
-        %104 = OpConvertSToF %float %99
-        %105 = OpConvertSToF %float %100
-        %106 = OpConvertSToF %float %102
-        %107 = OpCompositeConstruct %v4float %103 %104 %105 %106
-               OpStore %x_GLF_color %107
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %108
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %112 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %91
-        %117 = OpLabel
-        %119 = OpLoad %v4float %gl_FragCoord_param_1
-        %118 = OpFunctionCall %main_out %main_inner %119
-        %120 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4135af8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f1_() -> i32 {
-  var i : i32;
-  var A : array<i32, 10>;
-  var a : i32;
-  let x_56 : i32 = x_8.x_GLF_uniform_int_values[2];
-  i = x_56;
-  loop {
-    let x_61 : i32 = i;
-    let x_63 : i32 = x_8.x_GLF_uniform_int_values[0];
-    if ((x_61 < x_63)) {
-    } else {
-      break;
-    }
-    let x_66 : i32 = i;
-    let x_68 : i32 = x_8.x_GLF_uniform_int_values[2];
-    A[x_66] = x_68;
-
-    continuing {
-      let x_70 : i32 = i;
-      i = (x_70 + 1);
-    }
-  }
-  a = -1;
-  let x_73 : f32 = gl_FragCoord.y;
-  let x_75 : f32 = x_12.x_GLF_uniform_float_values[0];
-  if ((x_73 >= x_75)) {
-    let x_79 : i32 = a;
-    let x_80 : i32 = (x_79 + 1);
-    a = x_80;
-    let x_82 : i32 = x_8.x_GLF_uniform_int_values[1];
-    A[x_80] = x_82;
-  }
-  let x_85 : i32 = x_8.x_GLF_uniform_int_values[2];
-  let x_87 : i32 = A[x_85];
-  let x_89 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_87 == x_89)) {
-    let x_94 : i32 = a;
-    let x_95 : i32 = (x_94 + 1);
-    a = x_95;
-    let x_97 : i32 = A[x_95];
-    return x_97;
-  } else {
-    let x_99 : i32 = x_8.x_GLF_uniform_int_values[1];
-    return x_99;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var i_1 : i32;
-  let x_42 : i32 = f1_();
-  i_1 = x_42;
-  let x_44 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_46 : i32 = i_1;
-  let x_48 : i32 = i_1;
-  let x_51 : i32 = x_8.x_GLF_uniform_int_values[1];
-  x_GLF_color = vec4<f32>(f32(x_44), f32(x_46), f32(x_48), f32(x_51));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index ca2b4ae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,90 +0,0 @@
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int f1_() {
-  int i = 0;
-  int A[10] = (int[10])0;
-  int a = 0;
-  const int x_56 = asint(x_8[2].x);
-  i = x_56;
-  while (true) {
-    const int x_61 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_63 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_61 < x_63)) {
-    } else {
-      break;
-    }
-    const int x_66 = i;
-    const int x_68 = asint(x_8[2].x);
-    A[x_66] = x_68;
-    {
-      i = (i + 1);
-    }
-  }
-  a = -1;
-  const float x_73 = gl_FragCoord.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_75 = asfloat(x_12[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_73 >= x_75)) {
-    const int x_80 = (a + 1);
-    a = x_80;
-    const int x_82 = asint(x_8[1].x);
-    A[x_80] = x_82;
-  }
-  const int x_85 = asint(x_8[2].x);
-  const int x_87 = A[x_85];
-  const int x_89 = asint(x_8[1].x);
-  if ((x_87 == x_89)) {
-    const int x_95 = (a + 1);
-    a = x_95;
-    const int x_97 = A[x_95];
-    return x_97;
-  } else {
-    const int x_99 = asint(x_8[1].x);
-    return x_99;
-  }
-  return 0;
-}
-
-void main_1() {
-  int i_1 = 0;
-  const int x_42 = f1_();
-  i_1 = x_42;
-  const int x_44 = asint(x_8[1].x);
-  const int x_46 = i_1;
-  const int x_48 = i_1;
-  const int x_51 = asint(x_8[1].x);
-  x_GLF_color = float4(float(x_44), float(x_46), float(x_48), float(x_51));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.msl
deleted file mode 100644
index 60534a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int f1_(constant buf1& x_8, constant buf0& x_12, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_2 A = {};
-  int a = 0;
-  int const x_56 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  i = x_56;
-  while (true) {
-    int const x_61 = i;
-    int const x_63 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_61 < x_63)) {
-    } else {
-      break;
-    }
-    int const x_66 = i;
-    int const x_68 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    A.arr[x_66] = x_68;
-    {
-      int const x_70 = i;
-      i = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-    }
-  }
-  a = -1;
-  float const x_73 = (*(tint_symbol_3)).y;
-  float const x_75 = x_12.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_73 >= x_75)) {
-    int const x_79 = a;
-    int const x_80 = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-    a = x_80;
-    int const x_82 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    A.arr[x_80] = x_82;
-  }
-  int const x_85 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  int const x_87 = A.arr[x_85];
-  int const x_89 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_87 == x_89)) {
-    int const x_94 = a;
-    int const x_95 = as_type<int>((as_type<uint>(x_94) + as_type<uint>(1)));
-    a = x_95;
-    int const x_97 = A.arr[x_95];
-    return x_97;
-  } else {
-    int const x_99 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    return x_99;
-  }
-  return 0;
-}
-
-void main_1(constant buf1& x_8, constant buf0& x_12, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int i_1 = 0;
-  int const x_42 = f1_(x_8, x_12, tint_symbol_4);
-  i_1 = x_42;
-  int const x_44 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_46 = i_1;
-  int const x_48 = i_1;
-  int const x_51 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  *(tint_symbol_5) = float4(float(x_44), float(x_46), float(x_48), float(x_51));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_12, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_8, x_12, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_12, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4cdf233..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,201 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_12 "x_12"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f1_ "f1_"
-               OpName %i "i"
-               OpName %A "A"
-               OpName %a "a"
-               OpName %main_1 "main_1"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %23 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %33 = OpConstantNull %_arr_int_uint_10
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %void = OpTypeVoid
-         %91 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-        %108 = OpTypeFunction %main_out %v4float
-        %f1_ = OpFunction %int None %23
-         %25 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %28
-          %A = OpVariable %_ptr_Function__arr_int_uint_10 Function %33
-          %a = OpVariable %_ptr_Function_int Function %28
-         %38 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %39 = OpLoad %int %38
-               OpStore %i %39
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %i
-         %46 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %47 = OpLoad %int %46
-         %48 = OpSLessThan %bool %44 %47
-               OpSelectionMerge %50 None
-               OpBranchConditional %48 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %41
-         %50 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Function_int %A %53
-               OpStore %56 %55
-               OpBranch %42
-         %42 = OpLabel
-         %57 = OpLoad %int %i
-         %59 = OpIAdd %int %57 %int_1
-               OpStore %i %59
-               OpBranch %40
-         %41 = OpLabel
-               OpStore %a %int_n1
-         %62 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpFOrdGreaterThanEqual %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %70 = OpLoad %int %a
-         %71 = OpIAdd %int %70 %int_1
-               OpStore %a %71
-         %72 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Function_int %A %71
-               OpStore %74 %73
-               OpBranch %68
-         %68 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Function_int %A %76
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpIEqual %bool %78 %80
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-         %85 = OpLoad %int %a
-         %86 = OpIAdd %int %85 %int_1
-               OpStore %a %86
-         %87 = OpAccessChain %_ptr_Function_int %A %86
-         %88 = OpLoad %int %87
-               OpReturnValue %88
-         %84 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %90 = OpLoad %int %89
-               OpReturnValue %90
-         %82 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %91
-         %94 = OpLabel
-        %i_1 = OpVariable %_ptr_Function_int Function %28
-         %96 = OpFunctionCall %int %f1_
-               OpStore %i_1 %96
-         %97 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpLoad %int %i_1
-        %100 = OpLoad %int %i_1
-        %101 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %103 = OpConvertSToF %float %98
-        %104 = OpConvertSToF %float %99
-        %105 = OpConvertSToF %float %100
-        %106 = OpConvertSToF %float %102
-        %107 = OpCompositeConstruct %v4float %103 %104 %105 %106
-               OpStore %x_GLF_color %107
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %108
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %112 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %91
-        %117 = OpLabel
-        %119 = OpLoad %v4float %gl_FragCoord_param_1
-        %118 = OpFunctionCall %main_out %main_inner %119
-        %120 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 4135af8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-add-sub-pre-increase/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f1_() -> i32 {
-  var i : i32;
-  var A : array<i32, 10>;
-  var a : i32;
-  let x_56 : i32 = x_8.x_GLF_uniform_int_values[2];
-  i = x_56;
-  loop {
-    let x_61 : i32 = i;
-    let x_63 : i32 = x_8.x_GLF_uniform_int_values[0];
-    if ((x_61 < x_63)) {
-    } else {
-      break;
-    }
-    let x_66 : i32 = i;
-    let x_68 : i32 = x_8.x_GLF_uniform_int_values[2];
-    A[x_66] = x_68;
-
-    continuing {
-      let x_70 : i32 = i;
-      i = (x_70 + 1);
-    }
-  }
-  a = -1;
-  let x_73 : f32 = gl_FragCoord.y;
-  let x_75 : f32 = x_12.x_GLF_uniform_float_values[0];
-  if ((x_73 >= x_75)) {
-    let x_79 : i32 = a;
-    let x_80 : i32 = (x_79 + 1);
-    a = x_80;
-    let x_82 : i32 = x_8.x_GLF_uniform_int_values[1];
-    A[x_80] = x_82;
-  }
-  let x_85 : i32 = x_8.x_GLF_uniform_int_values[2];
-  let x_87 : i32 = A[x_85];
-  let x_89 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_87 == x_89)) {
-    let x_94 : i32 = a;
-    let x_95 : i32 = (x_94 + 1);
-    a = x_95;
-    let x_97 : i32 = A[x_95];
-    return x_97;
-  } else {
-    let x_99 : i32 = x_8.x_GLF_uniform_int_values[1];
-    return x_99;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var i_1 : i32;
-  let x_42 : i32 = f1_();
-  i_1 = x_42;
-  let x_44 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_46 : i32 = i_1;
-  let x_48 : i32 = i_1;
-  let x_51 : i32 = x_8.x_GLF_uniform_int_values[1];
-  x_GLF_color = vec4<f32>(f32(x_44), f32(x_46), f32(x_48), f32(x_51));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 9ce823c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,115 +0,0 @@
-uint tint_pack4x8unorm(float4 param_0) {
-  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
-  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 ref = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_85 = false;
-  bool x_97 = false;
-  bool x_109 = false;
-  bool x_86_phi = false;
-  bool x_98_phi = false;
-  bool x_110_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = tint_pack4x8unorm(float4(x_36, x_36, x_36, x_36));
-  v1 = tint_unpack4x8snorm(a);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_45 = asfloat(x_6[1].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_48 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_51 = asfloat(x_6[1].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_54 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_57 = asfloat(x_6[1].x);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_60 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const float x_63 = asfloat(x_6[1].x);
-  ref = float4((-(x_42) / x_45), (-(x_48) / x_51), (-(x_54) / x_57), (-(x_60) / x_63));
-  const int x_67 = asint(x_10[1].x);
-  const float x_69 = v1[x_67];
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const int x_71 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const float x_73 = ref[x_71];
-  const bool x_74 = (x_69 == x_73);
-  x_86_phi = x_74;
-  if (x_74) {
-    const int x_78 = asint(x_10[3].x);
-    const float x_80 = v1[x_78];
-    const int x_82 = asint(x_10[2].x);
-    const float x_84 = ref[x_82];
-    x_85 = (x_80 == x_84);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_98_phi = x_86;
-  if (x_86) {
-    const int x_90 = asint(x_10[2].x);
-    const float x_92 = v1[x_90];
-    const int x_94 = asint(x_10[3].x);
-    const float x_96 = ref[x_94];
-    x_97 = (x_92 == x_96);
-    x_98_phi = x_97;
-  }
-  const bool x_98 = x_98_phi;
-  x_110_phi = x_98;
-  if (x_98) {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_102 = asint(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_104 = v1[x_102];
-    const int x_106 = asint(x_10[1].x);
-    const float x_108 = ref[x_106];
-    x_109 = (x_104 == x_108);
-    x_110_phi = x_109;
-  }
-  if (x_110_phi) {
-    const int x_115 = asint(x_10[3].x);
-    const int x_118 = asint(x_10[1].x);
-    const int x_121 = asint(x_10[1].x);
-    const int x_124 = asint(x_10[3].x);
-    x_GLF_color = float4(float(x_115), float(x_118), float(x_121), float(x_124));
-  } else {
-    const int x_128 = asint(x_10[1].x);
-    const float x_130 = v1[x_128];
-    x_GLF_color = float4(x_130, x_130, x_130, x_130);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0134af1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,116 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 v1 = 0.0f;
-  float4 ref = 0.0f;
-  bool x_85 = false;
-  bool x_97 = false;
-  bool x_109 = false;
-  bool x_86_phi = false;
-  bool x_98_phi = false;
-  bool x_110_phi = false;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  a = pack_float_to_unorm4x8(float4(x_36, x_36, x_36, x_36));
-  uint const x_39 = a;
-  v1 = unpack_snorm4x8_to_float(x_39);
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_48 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_51 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_54 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_57 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_60 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_63 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  ref = float4((-(x_42) / x_45), (-(x_48) / x_51), (-(x_54) / x_57), (-(x_60) / x_63));
-  int const x_67 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  float const x_69 = v1[x_67];
-  int const x_71 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  float const x_73 = ref[x_71];
-  bool const x_74 = (x_69 == x_73);
-  x_86_phi = x_74;
-  if (x_74) {
-    int const x_78 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_80 = v1[x_78];
-    int const x_82 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_84 = ref[x_82];
-    x_85 = (x_80 == x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_98_phi = x_86;
-  if (x_86) {
-    int const x_90 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_92 = v1[x_90];
-    int const x_94 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_96 = ref[x_94];
-    x_97 = (x_92 == x_96);
-    x_98_phi = x_97;
-  }
-  bool const x_98 = x_98_phi;
-  x_110_phi = x_98;
-  if (x_98) {
-    int const x_102 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_104 = v1[x_102];
-    int const x_106 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_108 = ref[x_106];
-    x_109 = (x_104 == x_108);
-    x_110_phi = x_109;
-  }
-  bool const x_110 = x_110_phi;
-  if (x_110) {
-    int const x_115 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_118 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_121 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_124 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_115), float(x_118), float(x_121), float(x_124));
-  } else {
-    int const x_128 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_130 = v1[x_128];
-    *(tint_symbol_3) = float4(x_130, x_130, x_130, x_130);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0bc2fa4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,237 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 159
-; Schema: 0
-               OpCapability Shader
-         %45 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %ref "ref"
-               OpName %x_85 "x_85"
-               OpName %x_97 "x_97"
-               OpName %x_109 "x_109"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_110_phi "x_110_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %26 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %148 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %26
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-        %ref = OpVariable %_ptr_Function_v4float Function %5
-       %x_85 = OpVariable %_ptr_Function_bool Function %33
-       %x_97 = OpVariable %_ptr_Function_bool Function %33
-      %x_109 = OpVariable %_ptr_Function_bool Function %33
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %33
-   %x_98_phi = OpVariable %_ptr_Function_bool Function %33
-  %x_110_phi = OpVariable %_ptr_Function_bool Function %33
-         %42 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %46 = OpCompositeConstruct %v4float %43 %43 %43 %43
-         %44 = OpExtInst %uint %45 PackUnorm4x8 %46
-               OpStore %a %44
-         %47 = OpLoad %uint %a
-         %48 = OpExtInst %v4float %45 UnpackSnorm4x8 %47
-               OpStore %v1 %48
-         %49 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %57 = OpLoad %float %56
-         %58 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %65 = OpLoad %float %64
-         %66 = OpFNegate %float %50
-         %67 = OpFDiv %float %66 %53
-         %68 = OpFNegate %float %55
-         %69 = OpFDiv %float %68 %57
-         %70 = OpFNegate %float %59
-         %71 = OpFDiv %float %70 %61
-         %72 = OpFNegate %float %63
-         %73 = OpFDiv %float %72 %65
-         %74 = OpCompositeConstruct %v4float %67 %69 %71 %73
-               OpStore %ref %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %79 = OpAccessChain %_ptr_Function_float %v1 %77
-         %80 = OpLoad %float %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Function_float %ref %82
-         %84 = OpLoad %float %83
-         %85 = OpFOrdEqual %bool %80 %84
-               OpStore %x_86_phi %85
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Function_float %v1 %90
-         %92 = OpLoad %float %91
-         %94 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Function_float %ref %95
-         %97 = OpLoad %float %96
-         %98 = OpFOrdEqual %bool %92 %97
-               OpStore %x_85 %98
-         %99 = OpLoad %bool %x_85
-               OpStore %x_86_phi %99
-               OpBranch %86
-         %86 = OpLabel
-        %100 = OpLoad %bool %x_86_phi
-               OpStore %x_98_phi %100
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-        %103 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %104 = OpLoad %int %103
-        %105 = OpAccessChain %_ptr_Function_float %v1 %104
-        %106 = OpLoad %float %105
-        %107 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Function_float %ref %108
-        %110 = OpLoad %float %109
-        %111 = OpFOrdEqual %bool %106 %110
-               OpStore %x_97 %111
-        %112 = OpLoad %bool %x_97
-               OpStore %x_98_phi %112
-               OpBranch %101
-        %101 = OpLabel
-        %113 = OpLoad %bool %x_98_phi
-               OpStore %x_110_phi %113
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-        %116 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %117 = OpLoad %int %116
-        %118 = OpAccessChain %_ptr_Function_float %v1 %117
-        %119 = OpLoad %float %118
-        %120 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Function_float %ref %121
-        %123 = OpLoad %float %122
-        %124 = OpFOrdEqual %bool %119 %123
-               OpStore %x_109 %124
-        %125 = OpLoad %bool %x_109
-               OpStore %x_110_phi %125
-               OpBranch %114
-        %114 = OpLabel
-        %126 = OpLoad %bool %x_110_phi
-               OpSelectionMerge %127 None
-               OpBranchConditional %126 %128 %129
-        %128 = OpLabel
-        %130 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %131 = OpLoad %int %130
-        %132 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %133 = OpLoad %int %132
-        %134 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %135 = OpLoad %int %134
-        %136 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %137 = OpLoad %int %136
-        %138 = OpConvertSToF %float %131
-        %139 = OpConvertSToF %float %133
-        %140 = OpConvertSToF %float %135
-        %141 = OpConvertSToF %float %137
-        %142 = OpCompositeConstruct %v4float %138 %139 %140 %141
-               OpStore %x_GLF_color %142
-               OpBranch %127
-        %129 = OpLabel
-        %143 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %144 = OpLoad %int %143
-        %145 = OpAccessChain %_ptr_Function_float %v1 %144
-        %146 = OpLoad %float %145
-        %147 = OpCompositeConstruct %v4float %146 %146 %146 %146
-               OpStore %x_GLF_color %147
-               OpBranch %127
-        %127 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %148
-        %151 = OpLabel
-        %152 = OpFunctionCall %void %main_1
-        %153 = OpLoad %v4float %x_GLF_color
-        %154 = OpCompositeConstruct %main_out %153
-               OpReturnValue %154
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %156 = OpLabel
-        %157 = OpFunctionCall %main_out %main_inner
-        %158 = OpCompositeExtract %v4float %157 0
-               OpStore %x_GLF_color_1_1 %158
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 281628c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,102 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var v1 : vec4<f32>;
-  var ref : vec4<f32>;
-  var x_85 : bool;
-  var x_97 : bool;
-  var x_109 : bool;
-  var x_86_phi : bool;
-  var x_98_phi : bool;
-  var x_110_phi : bool;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  a = pack4x8unorm(vec4<f32>(x_36, x_36, x_36, x_36));
-  let x_39 : u32 = a;
-  v1 = unpack4x8snorm(x_39);
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_48 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_51 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_54 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_57 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_60 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_63 : f32 = x_6.x_GLF_uniform_float_values[1];
-  ref = vec4<f32>((-(x_42) / x_45), (-(x_48) / x_51), (-(x_54) / x_57), (-(x_60) / x_63));
-  let x_67 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_69 : f32 = v1[x_67];
-  let x_71 : i32 = x_10.x_GLF_uniform_int_values[0];
-  let x_73 : f32 = ref[x_71];
-  let x_74 : bool = (x_69 == x_73);
-  x_86_phi = x_74;
-  if (x_74) {
-    let x_78 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_80 : f32 = v1[x_78];
-    let x_82 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_84 : f32 = ref[x_82];
-    x_85 = (x_80 == x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_98_phi = x_86;
-  if (x_86) {
-    let x_90 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_92 : f32 = v1[x_90];
-    let x_94 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_96 : f32 = ref[x_94];
-    x_97 = (x_92 == x_96);
-    x_98_phi = x_97;
-  }
-  let x_98 : bool = x_98_phi;
-  x_110_phi = x_98;
-  if (x_98) {
-    let x_102 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_104 : f32 = v1[x_102];
-    let x_106 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_108 : f32 = ref[x_106];
-    x_109 = (x_104 == x_108);
-    x_110_phi = x_109;
-  }
-  let x_110 : bool = x_110_phi;
-  if (x_110) {
-    let x_115 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_118 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_121 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_124 : i32 = x_10.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_115), f32(x_118), f32(x_121), f32(x_124));
-  } else {
-    let x_128 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_130 : f32 = v1[x_128];
-    x_GLF_color = vec4<f32>(x_130, x_130, x_130, x_130);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 9ce823c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,115 +0,0 @@
-uint tint_pack4x8unorm(float4 param_0) {
-  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
-  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 ref = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_85 = false;
-  bool x_97 = false;
-  bool x_109 = false;
-  bool x_86_phi = false;
-  bool x_98_phi = false;
-  bool x_110_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = tint_pack4x8unorm(float4(x_36, x_36, x_36, x_36));
-  v1 = tint_unpack4x8snorm(a);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_45 = asfloat(x_6[1].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_48 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_51 = asfloat(x_6[1].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_54 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_57 = asfloat(x_6[1].x);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_60 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const float x_63 = asfloat(x_6[1].x);
-  ref = float4((-(x_42) / x_45), (-(x_48) / x_51), (-(x_54) / x_57), (-(x_60) / x_63));
-  const int x_67 = asint(x_10[1].x);
-  const float x_69 = v1[x_67];
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const int x_71 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const float x_73 = ref[x_71];
-  const bool x_74 = (x_69 == x_73);
-  x_86_phi = x_74;
-  if (x_74) {
-    const int x_78 = asint(x_10[3].x);
-    const float x_80 = v1[x_78];
-    const int x_82 = asint(x_10[2].x);
-    const float x_84 = ref[x_82];
-    x_85 = (x_80 == x_84);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_98_phi = x_86;
-  if (x_86) {
-    const int x_90 = asint(x_10[2].x);
-    const float x_92 = v1[x_90];
-    const int x_94 = asint(x_10[3].x);
-    const float x_96 = ref[x_94];
-    x_97 = (x_92 == x_96);
-    x_98_phi = x_97;
-  }
-  const bool x_98 = x_98_phi;
-  x_110_phi = x_98;
-  if (x_98) {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_102 = asint(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_104 = v1[x_102];
-    const int x_106 = asint(x_10[1].x);
-    const float x_108 = ref[x_106];
-    x_109 = (x_104 == x_108);
-    x_110_phi = x_109;
-  }
-  if (x_110_phi) {
-    const int x_115 = asint(x_10[3].x);
-    const int x_118 = asint(x_10[1].x);
-    const int x_121 = asint(x_10[1].x);
-    const int x_124 = asint(x_10[3].x);
-    x_GLF_color = float4(float(x_115), float(x_118), float(x_121), float(x_124));
-  } else {
-    const int x_128 = asint(x_10[1].x);
-    const float x_130 = v1[x_128];
-    x_GLF_color = float4(x_130, x_130, x_130, x_130);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0134af1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,116 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 v1 = 0.0f;
-  float4 ref = 0.0f;
-  bool x_85 = false;
-  bool x_97 = false;
-  bool x_109 = false;
-  bool x_86_phi = false;
-  bool x_98_phi = false;
-  bool x_110_phi = false;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  a = pack_float_to_unorm4x8(float4(x_36, x_36, x_36, x_36));
-  uint const x_39 = a;
-  v1 = unpack_snorm4x8_to_float(x_39);
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_48 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_51 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_54 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_57 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_60 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_63 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  ref = float4((-(x_42) / x_45), (-(x_48) / x_51), (-(x_54) / x_57), (-(x_60) / x_63));
-  int const x_67 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  float const x_69 = v1[x_67];
-  int const x_71 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  float const x_73 = ref[x_71];
-  bool const x_74 = (x_69 == x_73);
-  x_86_phi = x_74;
-  if (x_74) {
-    int const x_78 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_80 = v1[x_78];
-    int const x_82 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_84 = ref[x_82];
-    x_85 = (x_80 == x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_98_phi = x_86;
-  if (x_86) {
-    int const x_90 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_92 = v1[x_90];
-    int const x_94 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_96 = ref[x_94];
-    x_97 = (x_92 == x_96);
-    x_98_phi = x_97;
-  }
-  bool const x_98 = x_98_phi;
-  x_110_phi = x_98;
-  if (x_98) {
-    int const x_102 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_104 = v1[x_102];
-    int const x_106 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_108 = ref[x_106];
-    x_109 = (x_104 == x_108);
-    x_110_phi = x_109;
-  }
-  bool const x_110 = x_110_phi;
-  if (x_110) {
-    int const x_115 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_118 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_121 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_124 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_115), float(x_118), float(x_121), float(x_124));
-  } else {
-    int const x_128 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_130 = v1[x_128];
-    *(tint_symbol_3) = float4(x_130, x_130, x_130, x_130);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0bc2fa4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,237 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 159
-; Schema: 0
-               OpCapability Shader
-         %45 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %ref "ref"
-               OpName %x_85 "x_85"
-               OpName %x_97 "x_97"
-               OpName %x_109 "x_109"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_110_phi "x_110_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %26 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %148 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %26
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-        %ref = OpVariable %_ptr_Function_v4float Function %5
-       %x_85 = OpVariable %_ptr_Function_bool Function %33
-       %x_97 = OpVariable %_ptr_Function_bool Function %33
-      %x_109 = OpVariable %_ptr_Function_bool Function %33
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %33
-   %x_98_phi = OpVariable %_ptr_Function_bool Function %33
-  %x_110_phi = OpVariable %_ptr_Function_bool Function %33
-         %42 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %46 = OpCompositeConstruct %v4float %43 %43 %43 %43
-         %44 = OpExtInst %uint %45 PackUnorm4x8 %46
-               OpStore %a %44
-         %47 = OpLoad %uint %a
-         %48 = OpExtInst %v4float %45 UnpackSnorm4x8 %47
-               OpStore %v1 %48
-         %49 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %57 = OpLoad %float %56
-         %58 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %65 = OpLoad %float %64
-         %66 = OpFNegate %float %50
-         %67 = OpFDiv %float %66 %53
-         %68 = OpFNegate %float %55
-         %69 = OpFDiv %float %68 %57
-         %70 = OpFNegate %float %59
-         %71 = OpFDiv %float %70 %61
-         %72 = OpFNegate %float %63
-         %73 = OpFDiv %float %72 %65
-         %74 = OpCompositeConstruct %v4float %67 %69 %71 %73
-               OpStore %ref %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %79 = OpAccessChain %_ptr_Function_float %v1 %77
-         %80 = OpLoad %float %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Function_float %ref %82
-         %84 = OpLoad %float %83
-         %85 = OpFOrdEqual %bool %80 %84
-               OpStore %x_86_phi %85
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Function_float %v1 %90
-         %92 = OpLoad %float %91
-         %94 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Function_float %ref %95
-         %97 = OpLoad %float %96
-         %98 = OpFOrdEqual %bool %92 %97
-               OpStore %x_85 %98
-         %99 = OpLoad %bool %x_85
-               OpStore %x_86_phi %99
-               OpBranch %86
-         %86 = OpLabel
-        %100 = OpLoad %bool %x_86_phi
-               OpStore %x_98_phi %100
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-        %103 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %104 = OpLoad %int %103
-        %105 = OpAccessChain %_ptr_Function_float %v1 %104
-        %106 = OpLoad %float %105
-        %107 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Function_float %ref %108
-        %110 = OpLoad %float %109
-        %111 = OpFOrdEqual %bool %106 %110
-               OpStore %x_97 %111
-        %112 = OpLoad %bool %x_97
-               OpStore %x_98_phi %112
-               OpBranch %101
-        %101 = OpLabel
-        %113 = OpLoad %bool %x_98_phi
-               OpStore %x_110_phi %113
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-        %116 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %117 = OpLoad %int %116
-        %118 = OpAccessChain %_ptr_Function_float %v1 %117
-        %119 = OpLoad %float %118
-        %120 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Function_float %ref %121
-        %123 = OpLoad %float %122
-        %124 = OpFOrdEqual %bool %119 %123
-               OpStore %x_109 %124
-        %125 = OpLoad %bool %x_109
-               OpStore %x_110_phi %125
-               OpBranch %114
-        %114 = OpLabel
-        %126 = OpLoad %bool %x_110_phi
-               OpSelectionMerge %127 None
-               OpBranchConditional %126 %128 %129
-        %128 = OpLabel
-        %130 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %131 = OpLoad %int %130
-        %132 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %133 = OpLoad %int %132
-        %134 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %135 = OpLoad %int %134
-        %136 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %137 = OpLoad %int %136
-        %138 = OpConvertSToF %float %131
-        %139 = OpConvertSToF %float %133
-        %140 = OpConvertSToF %float %135
-        %141 = OpConvertSToF %float %137
-        %142 = OpCompositeConstruct %v4float %138 %139 %140 %141
-               OpStore %x_GLF_color %142
-               OpBranch %127
-        %129 = OpLabel
-        %143 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %144 = OpLoad %int %143
-        %145 = OpAccessChain %_ptr_Function_float %v1 %144
-        %146 = OpLoad %float %145
-        %147 = OpCompositeConstruct %v4float %146 %146 %146 %146
-               OpStore %x_GLF_color %147
-               OpBranch %127
-        %127 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %148
-        %151 = OpLabel
-        %152 = OpFunctionCall %void %main_1
-        %153 = OpLoad %v4float %x_GLF_color
-        %154 = OpCompositeConstruct %main_out %153
-               OpReturnValue %154
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %156 = OpLabel
-        %157 = OpFunctionCall %main_out %main_inner
-        %158 = OpCompositeExtract %v4float %157 0
-               OpStore %x_GLF_color_1_1 %158
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 281628c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-pack-unpack/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,102 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var v1 : vec4<f32>;
-  var ref : vec4<f32>;
-  var x_85 : bool;
-  var x_97 : bool;
-  var x_109 : bool;
-  var x_86_phi : bool;
-  var x_98_phi : bool;
-  var x_110_phi : bool;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  a = pack4x8unorm(vec4<f32>(x_36, x_36, x_36, x_36));
-  let x_39 : u32 = a;
-  v1 = unpack4x8snorm(x_39);
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_48 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_51 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_54 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_57 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_60 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_63 : f32 = x_6.x_GLF_uniform_float_values[1];
-  ref = vec4<f32>((-(x_42) / x_45), (-(x_48) / x_51), (-(x_54) / x_57), (-(x_60) / x_63));
-  let x_67 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_69 : f32 = v1[x_67];
-  let x_71 : i32 = x_10.x_GLF_uniform_int_values[0];
-  let x_73 : f32 = ref[x_71];
-  let x_74 : bool = (x_69 == x_73);
-  x_86_phi = x_74;
-  if (x_74) {
-    let x_78 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_80 : f32 = v1[x_78];
-    let x_82 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_84 : f32 = ref[x_82];
-    x_85 = (x_80 == x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_98_phi = x_86;
-  if (x_86) {
-    let x_90 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_92 : f32 = v1[x_90];
-    let x_94 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_96 : f32 = ref[x_94];
-    x_97 = (x_92 == x_96);
-    x_98_phi = x_97;
-  }
-  let x_98 : bool = x_98_phi;
-  x_110_phi = x_98;
-  if (x_98) {
-    let x_102 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_104 : f32 = v1[x_102];
-    let x_106 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_108 : f32 = ref[x_106];
-    x_109 = (x_104 == x_108);
-    x_110_phi = x_109;
-  }
-  let x_110 : bool = x_110_phi;
-  if (x_110) {
-    let x_115 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_118 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_121 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_124 : i32 = x_10.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_115), f32(x_118), f32(x_121), f32(x_124));
-  } else {
-    let x_128 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_130 : f32 = v1[x_128];
-    x_GLF_color = vec4<f32>(x_130, x_130, x_130, x_130);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1990256..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int count0 = 0;
-  int count1 = 0;
-  int i = 0;
-  const int x_29 = asint(x_6[2].x);
-  count0 = x_29;
-  const int x_31 = asint(x_6[2].x);
-  count1 = x_31;
-  const int x_33 = asint(x_6[2].x);
-  i = x_33;
-  while (true) {
-    const int x_38 = i;
-    const int x_40 = asint(x_6[4].x);
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 0:
-      case 1: {
-        count0 = (count0 + 1);
-        /* fallthrough */
-        {
-          count1 = (count1 + 1);
-        }
-        break;
-      }
-      case 2:
-      case 3: {
-        count1 = (count1 + 1);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_53 = count1;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_53 == x_55)) {
-    const int x_61 = asint(x_6[3].x);
-    const int x_64 = asint(x_6[2].x);
-    const int x_67 = asint(x_6[2].x);
-    const int x_70 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-  } else {
-    const int x_74 = asint(x_6[2].x);
-    const float x_75 = float(x_74);
-    x_GLF_color = float4(x_75, x_75, x_75, x_75);
-  }
-  const int x_77 = count0;
-  const int x_79 = asint(x_6[1].x);
-  if ((x_77 != x_79)) {
-    const int x_84 = asint(x_6[2].x);
-    const float x_85 = float(x_84);
-    x_GLF_color = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.msl
deleted file mode 100644
index 253011e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int count0 = 0;
-  int count1 = 0;
-  int i = 0;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  count0 = x_29;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  count1 = x_31;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_33;
-  while (true) {
-    int const x_38 = i;
-    int const x_40 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    int const x_43 = i;
-    switch(x_43) {
-      case 0:
-      case 1: {
-        int const x_47 = count0;
-        count0 = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-        /* fallthrough */
-      }
-      case 2:
-      case 3: {
-        int const x_49 = count1;
-        count1 = as_type<int>((as_type<uint>(x_49) + as_type<uint>(1)));
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_51 = i;
-      i = as_type<int>((as_type<uint>(x_51) + as_type<uint>(1)));
-    }
-  }
-  int const x_53 = count1;
-  int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_53 == x_55)) {
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_70 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-  } else {
-    int const x_74 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_75 = float(x_74);
-    *(tint_symbol_3) = float4(x_75, x_75, x_75, x_75);
-  }
-  int const x_77 = count0;
-  int const x_79 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_77 != x_79)) {
-    int const x_84 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_85 = float(x_84);
-    *(tint_symbol_3) = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 130904a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,171 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 105
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %count0 "count0"
-               OpName %count1 "count1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-         %94 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-     %count0 = OpVariable %_ptr_Function_int Function %21
-     %count1 = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %28 = OpLoad %int %27
-               OpStore %count0 %28
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %30 = OpLoad %int %29
-               OpStore %count1 %30
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %32 = OpLoad %int %31
-               OpStore %i %32
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %37 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %40 = OpLoad %int %39
-         %41 = OpSLessThan %bool %37 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %34
-         %43 = OpLabel
-         %46 = OpLoad %int %i
-               OpSelectionMerge %47 None
-               OpSwitch %46 %48 0 %49 1 %49 2 %50 3 %50
-         %49 = OpLabel
-         %51 = OpLoad %int %count0
-         %53 = OpIAdd %int %51 %int_1
-               OpStore %count0 %53
-               OpBranch %50
-         %50 = OpLabel
-         %54 = OpLoad %int %count1
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %count1 %55
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-         %56 = OpLoad %int %i
-         %57 = OpIAdd %int %56 %int_1
-               OpStore %i %57
-               OpBranch %33
-         %34 = OpLabel
-         %58 = OpLoad %int %count1
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpIEqual %bool %58 %61
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %68
-         %76 = OpConvertSToF %float %70
-         %77 = OpConvertSToF %float %72
-         %78 = OpConvertSToF %float %74
-         %79 = OpCompositeConstruct %v4float %75 %76 %77 %78
-               OpStore %x_GLF_color %79
-               OpBranch %63
-         %65 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %81 = OpLoad %int %80
-         %82 = OpConvertSToF %float %81
-         %83 = OpCompositeConstruct %v4float %82 %82 %82 %82
-               OpStore %x_GLF_color %83
-               OpBranch %63
-         %63 = OpLabel
-         %84 = OpLoad %int %count0
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpINotEqual %bool %84 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %91 = OpLoad %int %90
-         %92 = OpConvertSToF %float %91
-         %93 = OpCompositeConstruct %v4float %92 %92 %92 %92
-               OpStore %x_GLF_color %93
-               OpBranch %88
-         %88 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %94
-         %97 = OpLabel
-         %98 = OpFunctionCall %void %main_1
-         %99 = OpLoad %v4float %x_GLF_color
-        %100 = OpCompositeConstruct %main_out %99
-               OpReturnValue %100
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %102 = OpLabel
-        %103 = OpFunctionCall %main_out %main_inner
-        %104 = OpCompositeExtract %v4float %103 0
-               OpStore %x_GLF_color_1_1 %104
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c70fd11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,81 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var count0 : i32;
-  var count1 : i32;
-  var i : i32;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[2];
-  count0 = x_29;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[2];
-  count1 = x_31;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_33;
-  loop {
-    let x_38 : i32 = i;
-    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    let x_43 : i32 = i;
-    switch(x_43) {
-      case 0, 1: {
-        let x_47 : i32 = count0;
-        count0 = (x_47 + 1);
-        fallthrough;
-      }
-      case 2, 3: {
-        let x_49 : i32 = count1;
-        count1 = (x_49 + 1);
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_51 : i32 = i;
-      i = (x_51 + 1);
-    }
-  }
-  let x_53 : i32 = count1;
-  let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_53 == x_55)) {
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_70 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_61), f32(x_64), f32(x_67), f32(x_70));
-  } else {
-    let x_74 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_75 : f32 = f32(x_74);
-    x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
-  }
-  let x_77 : i32 = count0;
-  let x_79 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_77 != x_79)) {
-    let x_84 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_85 : f32 = f32(x_84);
-    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1990256..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int count0 = 0;
-  int count1 = 0;
-  int i = 0;
-  const int x_29 = asint(x_6[2].x);
-  count0 = x_29;
-  const int x_31 = asint(x_6[2].x);
-  count1 = x_31;
-  const int x_33 = asint(x_6[2].x);
-  i = x_33;
-  while (true) {
-    const int x_38 = i;
-    const int x_40 = asint(x_6[4].x);
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 0:
-      case 1: {
-        count0 = (count0 + 1);
-        /* fallthrough */
-        {
-          count1 = (count1 + 1);
-        }
-        break;
-      }
-      case 2:
-      case 3: {
-        count1 = (count1 + 1);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_53 = count1;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_53 == x_55)) {
-    const int x_61 = asint(x_6[3].x);
-    const int x_64 = asint(x_6[2].x);
-    const int x_67 = asint(x_6[2].x);
-    const int x_70 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-  } else {
-    const int x_74 = asint(x_6[2].x);
-    const float x_75 = float(x_74);
-    x_GLF_color = float4(x_75, x_75, x_75, x_75);
-  }
-  const int x_77 = count0;
-  const int x_79 = asint(x_6[1].x);
-  if ((x_77 != x_79)) {
-    const int x_84 = asint(x_6[2].x);
-    const float x_85 = float(x_84);
-    x_GLF_color = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.msl
deleted file mode 100644
index 253011e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int count0 = 0;
-  int count1 = 0;
-  int i = 0;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  count0 = x_29;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  count1 = x_31;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_33;
-  while (true) {
-    int const x_38 = i;
-    int const x_40 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    int const x_43 = i;
-    switch(x_43) {
-      case 0:
-      case 1: {
-        int const x_47 = count0;
-        count0 = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-        /* fallthrough */
-      }
-      case 2:
-      case 3: {
-        int const x_49 = count1;
-        count1 = as_type<int>((as_type<uint>(x_49) + as_type<uint>(1)));
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_51 = i;
-      i = as_type<int>((as_type<uint>(x_51) + as_type<uint>(1)));
-    }
-  }
-  int const x_53 = count1;
-  int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_53 == x_55)) {
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_70 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-  } else {
-    int const x_74 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_75 = float(x_74);
-    *(tint_symbol_3) = float4(x_75, x_75, x_75, x_75);
-  }
-  int const x_77 = count0;
-  int const x_79 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_77 != x_79)) {
-    int const x_84 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_85 = float(x_84);
-    *(tint_symbol_3) = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 130904a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,171 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 105
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %count0 "count0"
-               OpName %count1 "count1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-         %94 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-     %count0 = OpVariable %_ptr_Function_int Function %21
-     %count1 = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %28 = OpLoad %int %27
-               OpStore %count0 %28
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %30 = OpLoad %int %29
-               OpStore %count1 %30
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %32 = OpLoad %int %31
-               OpStore %i %32
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %37 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %40 = OpLoad %int %39
-         %41 = OpSLessThan %bool %37 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %34
-         %43 = OpLabel
-         %46 = OpLoad %int %i
-               OpSelectionMerge %47 None
-               OpSwitch %46 %48 0 %49 1 %49 2 %50 3 %50
-         %49 = OpLabel
-         %51 = OpLoad %int %count0
-         %53 = OpIAdd %int %51 %int_1
-               OpStore %count0 %53
-               OpBranch %50
-         %50 = OpLabel
-         %54 = OpLoad %int %count1
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %count1 %55
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-         %56 = OpLoad %int %i
-         %57 = OpIAdd %int %56 %int_1
-               OpStore %i %57
-               OpBranch %33
-         %34 = OpLabel
-         %58 = OpLoad %int %count1
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpIEqual %bool %58 %61
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %68
-         %76 = OpConvertSToF %float %70
-         %77 = OpConvertSToF %float %72
-         %78 = OpConvertSToF %float %74
-         %79 = OpCompositeConstruct %v4float %75 %76 %77 %78
-               OpStore %x_GLF_color %79
-               OpBranch %63
-         %65 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %81 = OpLoad %int %80
-         %82 = OpConvertSToF %float %81
-         %83 = OpCompositeConstruct %v4float %82 %82 %82 %82
-               OpStore %x_GLF_color %83
-               OpBranch %63
-         %63 = OpLabel
-         %84 = OpLoad %int %count0
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpINotEqual %bool %84 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %91 = OpLoad %int %90
-         %92 = OpConvertSToF %float %91
-         %93 = OpCompositeConstruct %v4float %92 %92 %92 %92
-               OpStore %x_GLF_color %93
-               OpBranch %88
-         %88 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %94
-         %97 = OpLabel
-         %98 = OpFunctionCall %void %main_1
-         %99 = OpLoad %v4float %x_GLF_color
-        %100 = OpCompositeConstruct %main_out %99
-               OpReturnValue %100
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %102 = OpLabel
-        %103 = OpFunctionCall %main_out %main_inner
-        %104 = OpCompositeExtract %v4float %103 0
-               OpStore %x_GLF_color_1_1 %104
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c70fd11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-switch/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,81 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var count0 : i32;
-  var count1 : i32;
-  var i : i32;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[2];
-  count0 = x_29;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[2];
-  count1 = x_31;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_33;
-  loop {
-    let x_38 : i32 = i;
-    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    let x_43 : i32 = i;
-    switch(x_43) {
-      case 0, 1: {
-        let x_47 : i32 = count0;
-        count0 = (x_47 + 1);
-        fallthrough;
-      }
-      case 2, 3: {
-        let x_49 : i32 = count1;
-        count1 = (x_49 + 1);
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_51 : i32 = i;
-      i = (x_51 + 1);
-    }
-  }
-  let x_53 : i32 = count1;
-  let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_53 == x_55)) {
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_70 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_61), f32(x_64), f32(x_67), f32(x_70));
-  } else {
-    let x_74 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_75 : f32 = f32(x_74);
-    x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
-  }
-  let x_77 : i32 = count0;
-  let x_79 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_77 != x_79)) {
-    let x_84 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_85 : f32 = f32(x_84);
-    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6dae70a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[2] = (float[2])0;
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_33 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_35 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  data[x_33] = x_35;
-  const int x_38 = asint(x_6[1].x);
-  const float x_40 = asfloat(x_8[1].x);
-  data[x_38] = x_40;
-  const int x_43 = asint(x_6[1].x);
-  const float x_47 = data[(1 ^ (x_43 & 2))];
-  a = x_47;
-  const float x_48 = a;
-  const float x_50 = asfloat(x_8[1].x);
-  if ((x_48 == x_50)) {
-    const float x_56 = asfloat(x_8[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_58 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_60 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_62 = asfloat(x_8[1].x);
-    x_GLF_color = float4(x_56, x_58, x_60, x_62);
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_65 = asfloat(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.msl
deleted file mode 100644
index 36c85d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 data = {};
-  float a = 0.0f;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_35 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  data.arr[x_33] = x_35;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_40 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  data.arr[x_38] = x_40;
-  int const x_43 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_47 = data.arr[(1 ^ (x_43 & 2))];
-  a = x_47;
-  float const x_48 = a;
-  float const x_50 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_48 == x_50)) {
-    float const x_56 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    float const x_58 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_60 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_62 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_3) = float4(x_56, x_58, x_60, x_62);
-  } else {
-    float const x_65 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3a60029..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,137 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 83
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %_arr_float_uint_2_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_arr_float_uint_2_0 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2_0 = OpTypePointer Function %_arr_float_uint_2_0
-         %26 = OpConstantNull %_arr_float_uint_2_0
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_2_0 Function %26
-          %a = OpVariable %_ptr_Function_float Function %29
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %34 = OpLoad %int %33
-         %36 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %37 = OpLoad %float %36
-         %38 = OpAccessChain %_ptr_Function_float %data %34
-               OpStore %38 %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %43 = OpLoad %float %42
-         %44 = OpAccessChain %_ptr_Function_float %data %41
-               OpStore %44 %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %46 = OpLoad %int %45
-         %48 = OpBitwiseAnd %int %46 %int_2
-         %49 = OpBitwiseXor %int %int_1 %48
-         %50 = OpAccessChain %_ptr_Function_float %data %49
-         %51 = OpLoad %float %50
-               OpStore %a %51
-         %52 = OpLoad %float %a
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %54 = OpLoad %float %53
-         %55 = OpFOrdEqual %bool %52 %54
-               OpSelectionMerge %57 None
-               OpBranchConditional %55 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %65 = OpLoad %float %64
-         %66 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %67 = OpLoad %float %66
-         %68 = OpCompositeConstruct %v4float %61 %63 %65 %67
-               OpStore %x_GLF_color %68
-               OpBranch %57
-         %59 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %70 = OpLoad %float %69
-         %71 = OpCompositeConstruct %v4float %70 %70 %70 %70
-               OpStore %x_GLF_color %71
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e5869f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 2>;
-  var a : f32;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_35 : f32 = x_8.x_GLF_uniform_float_values[0];
-  data[x_33] = x_35;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_40 : f32 = x_8.x_GLF_uniform_float_values[1];
-  data[x_38] = x_40;
-  let x_43 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_47 : f32 = data[(1 ^ (x_43 & 2))];
-  a = x_47;
-  let x_48 : f32 = a;
-  let x_50 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_48 == x_50)) {
-    let x_56 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_58 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_60 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_62 : f32 = x_8.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_56, x_58, x_60, x_62);
-  } else {
-    let x_65 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6dae70a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[2] = (float[2])0;
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_33 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_35 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  data[x_33] = x_35;
-  const int x_38 = asint(x_6[1].x);
-  const float x_40 = asfloat(x_8[1].x);
-  data[x_38] = x_40;
-  const int x_43 = asint(x_6[1].x);
-  const float x_47 = data[(1 ^ (x_43 & 2))];
-  a = x_47;
-  const float x_48 = a;
-  const float x_50 = asfloat(x_8[1].x);
-  if ((x_48 == x_50)) {
-    const float x_56 = asfloat(x_8[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_58 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_60 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_62 = asfloat(x_8[1].x);
-    x_GLF_color = float4(x_56, x_58, x_60, x_62);
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_65 = asfloat(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.msl
deleted file mode 100644
index 36c85d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 data = {};
-  float a = 0.0f;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_35 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  data.arr[x_33] = x_35;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_40 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  data.arr[x_38] = x_40;
-  int const x_43 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_47 = data.arr[(1 ^ (x_43 & 2))];
-  a = x_47;
-  float const x_48 = a;
-  float const x_50 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_48 == x_50)) {
-    float const x_56 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    float const x_58 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_60 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_62 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_3) = float4(x_56, x_58, x_60, x_62);
-  } else {
-    float const x_65 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3a60029..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,137 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 83
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %_arr_float_uint_2_0 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_arr_float_uint_2_0 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2_0 = OpTypePointer Function %_arr_float_uint_2_0
-         %26 = OpConstantNull %_arr_float_uint_2_0
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_2_0 Function %26
-          %a = OpVariable %_ptr_Function_float Function %29
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %34 = OpLoad %int %33
-         %36 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %37 = OpLoad %float %36
-         %38 = OpAccessChain %_ptr_Function_float %data %34
-               OpStore %38 %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %43 = OpLoad %float %42
-         %44 = OpAccessChain %_ptr_Function_float %data %41
-               OpStore %44 %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %46 = OpLoad %int %45
-         %48 = OpBitwiseAnd %int %46 %int_2
-         %49 = OpBitwiseXor %int %int_1 %48
-         %50 = OpAccessChain %_ptr_Function_float %data %49
-         %51 = OpLoad %float %50
-               OpStore %a %51
-         %52 = OpLoad %float %a
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %54 = OpLoad %float %53
-         %55 = OpFOrdEqual %bool %52 %54
-               OpSelectionMerge %57 None
-               OpBranchConditional %55 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %65 = OpLoad %float %64
-         %66 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %67 = OpLoad %float %66
-         %68 = OpCompositeConstruct %v4float %61 %63 %65 %67
-               OpStore %x_GLF_color %68
-               OpBranch %57
-         %59 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %70 = OpLoad %float %69
-         %71 = OpCompositeConstruct %v4float %70 %70 %70 %70
-               OpStore %x_GLF_color %71
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e5869f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-and-or-xor-xor-add/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 2>;
-  var a : f32;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_35 : f32 = x_8.x_GLF_uniform_float_values[0];
-  data[x_33] = x_35;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_40 : f32 = x_8.x_GLF_uniform_float_values[1];
-  data[x_38] = x_40;
-  let x_43 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_47 : f32 = data[(1 ^ (x_43 & 2))];
-  a = x_47;
-  let x_48 : f32 = a;
-  let x_50 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_48 == x_50)) {
-    let x_56 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_58 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_60 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_62 : f32 = x_8.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_56, x_58, x_60, x_62);
-  } else {
-    let x_65 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_65, x_65, x_65, x_65);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 83f8e35..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_7 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_8 = asint(x_5[1].x);
-  const int x_9 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_7), float(x_8), float(x_9), float(x_10));
-  if (isnan(-(x_GLF_color).x)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_11 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_43 = float(x_11);
-    x_GLF_color = float4(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3a7031c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_7 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_8 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_9 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_10 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_7), float(x_8), float(x_9), float(x_10));
-  float4 const x_36 = *(tint_symbol_3);
-  if (isnan((-(x_36)).x)) {
-    int const x_11 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    float const x_43 = float(x_11);
-    *(tint_symbol_3) = float4(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1a3d162..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %47 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %23 = OpLoad %int %22
-         %25 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %31 = OpConvertSToF %float %23
-         %32 = OpConvertSToF %float %26
-         %33 = OpConvertSToF %float %28
-         %34 = OpConvertSToF %float %30
-         %35 = OpCompositeConstruct %v4float %31 %32 %33 %34
-               OpStore %x_GLF_color %35
-         %36 = OpLoad %v4float %x_GLF_color
-         %39 = OpFNegate %v4float %36
-         %40 = OpCompositeExtract %float %39 0
-         %37 = OpIsNan %bool %40
-               OpSelectionMerge %41 None
-               OpBranchConditional %37 %42 %41
-         %42 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpConvertSToF %float %44
-         %46 = OpCompositeConstruct %v4float %45 %45 %45 %45
-               OpStore %x_GLF_color %46
-               OpBranch %41
-         %41 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %47
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %x_GLF_color
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %55 = OpLabel
-         %56 = OpFunctionCall %main_out %main_inner
-         %57 = OpCompositeExtract %v4float %56 0
-               OpStore %x_GLF_color_1_1 %57
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9ee635e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  let x_7 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_8 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_9 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_10 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_7), f32(x_8), f32(x_9), f32(x_10));
-  let x_36 : vec4<f32> = x_GLF_color;
-  if (isNan((-(x_36)).x)) {
-    let x_11 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_43 : f32 = f32(x_11);
-    x_GLF_color = vec4<f32>(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 83f8e35..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_7 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_8 = asint(x_5[1].x);
-  const int x_9 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_7), float(x_8), float(x_9), float(x_10));
-  if (isnan(-(x_GLF_color).x)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_11 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_43 = float(x_11);
-    x_GLF_color = float4(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3a7031c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_7 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_8 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_9 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_10 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_7), float(x_8), float(x_9), float(x_10));
-  float4 const x_36 = *(tint_symbol_3);
-  if (isnan((-(x_36)).x)) {
-    int const x_11 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    float const x_43 = float(x_11);
-    *(tint_symbol_3) = float4(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1a3d162..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %47 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %23 = OpLoad %int %22
-         %25 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %31 = OpConvertSToF %float %23
-         %32 = OpConvertSToF %float %26
-         %33 = OpConvertSToF %float %28
-         %34 = OpConvertSToF %float %30
-         %35 = OpCompositeConstruct %v4float %31 %32 %33 %34
-               OpStore %x_GLF_color %35
-         %36 = OpLoad %v4float %x_GLF_color
-         %39 = OpFNegate %v4float %36
-         %40 = OpCompositeExtract %float %39 0
-         %37 = OpIsNan %bool %40
-               OpSelectionMerge %41 None
-               OpBranchConditional %37 %42 %41
-         %42 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpConvertSToF %float %44
-         %46 = OpCompositeConstruct %v4float %45 %45 %45 %45
-               OpStore %x_GLF_color %46
-               OpBranch %41
-         %41 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %47
-         %50 = OpLabel
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %x_GLF_color
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %55 = OpLabel
-         %56 = OpFunctionCall %main_out %main_inner
-         %57 = OpCompositeExtract %v4float %56 0
-               OpStore %x_GLF_color_1_1 %57
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9ee635e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-isnan/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  let x_7 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_8 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_9 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_10 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_7), f32(x_8), f32(x_9), f32(x_10));
-  let x_36 : vec4<f32> = x_GLF_color;
-  if (isNan((-(x_36)).x)) {
-    let x_11 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_43 : f32 = f32(x_11);
-    x_GLF_color = vec4<f32>(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 606fbdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,52 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_29 = asfloat(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_32 = asfloat(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((ldexp(x_29, 10000) == x_32)) {
-    const int x_38 = asint(x_7[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_41 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_44 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_47 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_38), float(x_41), float(x_44), float(x_47));
-  } else {
-    const int x_51 = asint(x_7[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_60 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_51), float(x_54), float(x_57), float(x_60));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4545d49..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_3) {
-  float const x_29 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  float const x_32 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  if ((ldexp(x_29, 10000) == x_32)) {
-    int const x_38 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_41 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_44 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_47 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_38), float(x_41), float(x_44), float(x_47));
-  } else {
-    int const x_51 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_57 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_51), float(x_54), float(x_57), float(x_60));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_7 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6001a9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,126 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %32 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-  %int_10000 = OpConstant %int 10000
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %27 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %28 = OpLoad %float %27
-         %29 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %30 = OpLoad %float %29
-         %31 = OpExtInst %float %32 Ldexp %28 %int_10000
-         %34 = OpFOrdEqual %bool %31 %30
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-         %41 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %48 = OpLoad %int %47
-         %49 = OpConvertSToF %float %42
-         %50 = OpConvertSToF %float %44
-         %51 = OpConvertSToF %float %46
-         %52 = OpConvertSToF %float %48
-         %53 = OpCompositeConstruct %v4float %49 %50 %51 %52
-               OpStore %x_GLF_color %53
-               OpBranch %36
-         %38 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %61 = OpLoad %int %60
-         %62 = OpConvertSToF %float %55
-         %63 = OpConvertSToF %float %57
-         %64 = OpConvertSToF %float %59
-         %65 = OpConvertSToF %float %61
-         %66 = OpCompositeConstruct %v4float %62 %63 %64 %65
-               OpStore %x_GLF_color %66
-               OpBranch %36
-         %36 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e029395..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-fn main_1() {
-  let x_29 : f32 = x_5.x_GLF_uniform_float_values[0];
-  let x_32 : f32 = x_5.x_GLF_uniform_float_values[0];
-  if ((ldexp(x_29, 10000) == x_32)) {
-    let x_38 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_41 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_44 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_47 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_38), f32(x_41), f32(x_44), f32(x_47));
-  } else {
-    let x_51 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_57 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_51), f32(x_54), f32(x_57), f32(x_60));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 606fbdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,52 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_29 = asfloat(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_32 = asfloat(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((ldexp(x_29, 10000) == x_32)) {
-    const int x_38 = asint(x_7[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_41 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_44 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_47 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_38), float(x_41), float(x_44), float(x_47));
-  } else {
-    const int x_51 = asint(x_7[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_60 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_51), float(x_54), float(x_57), float(x_60));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4545d49..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_3) {
-  float const x_29 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  float const x_32 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  if ((ldexp(x_29, 10000) == x_32)) {
-    int const x_38 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_41 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_44 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_47 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_38), float(x_41), float(x_44), float(x_47));
-  } else {
-    int const x_51 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_57 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_51), float(x_54), float(x_57), float(x_60));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_7 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6001a9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,126 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %32 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-  %int_10000 = OpConstant %int 10000
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %27 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %28 = OpLoad %float %27
-         %29 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %30 = OpLoad %float %29
-         %31 = OpExtInst %float %32 Ldexp %28 %int_10000
-         %34 = OpFOrdEqual %bool %31 %30
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-         %41 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %48 = OpLoad %int %47
-         %49 = OpConvertSToF %float %42
-         %50 = OpConvertSToF %float %44
-         %51 = OpConvertSToF %float %46
-         %52 = OpConvertSToF %float %48
-         %53 = OpCompositeConstruct %v4float %49 %50 %51 %52
-               OpStore %x_GLF_color %53
-               OpBranch %36
-         %38 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %61 = OpLoad %int %60
-         %62 = OpConvertSToF %float %55
-         %63 = OpConvertSToF %float %57
-         %64 = OpConvertSToF %float %59
-         %65 = OpConvertSToF %float %61
-         %66 = OpCompositeConstruct %v4float %62 %63 %64 %65
-               OpStore %x_GLF_color %66
-               OpBranch %36
-         %36 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e029395..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ldexp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-fn main_1() {
-  let x_29 : f32 = x_5.x_GLF_uniform_float_values[0];
-  let x_32 : f32 = x_5.x_GLF_uniform_float_values[0];
-  if ((ldexp(x_29, 10000) == x_32)) {
-    let x_38 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_41 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_44 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_47 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_38), f32(x_41), f32(x_44), f32(x_47));
-  } else {
-    let x_51 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_57 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_51), f32(x_54), f32(x_57), f32(x_60));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7f503be..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_14 : register(b1, space0) {
-  uint4 x_14[2];
-};
-
-float f1_f1_(inout float a) {
-  int b = 0;
-  float c = 0.0f;
-  b = 8;
-  const float x_71 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_73 = asfloat(x_9[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_71 >= x_73)) {
-    b = (b + 1);
-    b = (b + 1);
-  }
-  const float x_81 = a;
-  const float x_83 = asfloat(x_9[1].x);
-  if ((x_81 < x_83)) {
-    const float x_88 = asfloat(x_9[1].x);
-    return x_88;
-  }
-  c = float(clamp(b, 0, 2));
-  return c;
-}
-
-void main_1() {
-  float a_1 = 0.0f;
-  float param = 0.0f;
-  const float x_43 = asfloat(x_9[1].x);
-  param = x_43;
-  const float x_44 = f1_f1_(param);
-  a_1 = x_44;
-  const float x_45 = a_1;
-  const float x_47 = asfloat(x_9[2].x);
-  if ((x_45 == x_47)) {
-    const int x_53 = asint(x_14[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_14[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_14[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_62 = asint(x_14[1].x);
-    x_GLF_color = float4(float(x_53), float(x_56), float(x_59), float(x_62));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_14[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_67 = float(x_66);
-    x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1713d3c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,93 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float f1_f1_(constant buf0& x_9, thread float* const a, thread float4* const tint_symbol_3) {
-  int b = 0;
-  float c = 0.0f;
-  b = 8;
-  float const x_71 = (*(tint_symbol_3)).y;
-  float const x_73 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_71 >= x_73)) {
-    int const x_77 = b;
-    b = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-    int const x_79 = b;
-    b = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-  }
-  float const x_81 = *(a);
-  float const x_83 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_81 < x_83)) {
-    float const x_88 = x_9.x_GLF_uniform_float_values.arr[1].el;
-    return x_88;
-  }
-  int const x_89 = b;
-  c = float(clamp(x_89, 0, 2));
-  float const x_92 = c;
-  return x_92;
-}
-
-void main_1(constant buf0& x_9, constant buf1& x_14, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float a_1 = 0.0f;
-  float param = 0.0f;
-  float const x_43 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  param = x_43;
-  float const x_44 = f1_f1_(x_9, &(param), tint_symbol_4);
-  a_1 = x_44;
-  float const x_45 = a_1;
-  float const x_47 = x_9.x_GLF_uniform_float_values.arr[2].el;
-  if ((x_45 == x_47)) {
-    int const x_53 = x_14.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_14.x_GLF_uniform_int_values.arr[0].el;
-    int const x_59 = x_14.x_GLF_uniform_int_values.arr[0].el;
-    int const x_62 = x_14.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_5) = float4(float(x_53), float(x_56), float(x_59), float(x_62));
-  } else {
-    int const x_66 = x_14.x_GLF_uniform_int_values.arr[0].el;
-    float const x_67 = float(x_66);
-    *(tint_symbol_5) = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, constant buf1& x_14, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_9, x_14, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]], constant buf1& x_14 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, x_14, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e2d9db9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,186 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 115
-; Schema: 0
-               OpCapability Shader
-         %64 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_14 "x_14"
-               OpName %f1_f1_ "f1_f1_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_1 "main_1"
-               OpName %a_1 "a_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_14 NonWritable
-               OpDecorate %x_14 DescriptorSet 0
-               OpDecorate %x_14 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_14 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %23 = OpTypeFunction %float %_ptr_Function_float
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-         %32 = OpConstantNull %float
-      %int_8 = OpConstant %int 8
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %67 = OpTypeFunction %void
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %102 = OpTypeFunction %main_out %v4float
-     %f1_f1_ = OpFunction %float None %23
-          %a = OpFunctionParameter %_ptr_Function_float
-         %27 = OpLabel
-          %b = OpVariable %_ptr_Function_int Function %30
-          %c = OpVariable %_ptr_Function_float Function %32
-               OpStore %b %int_8
-         %36 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %37 = OpLoad %float %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpFOrdGreaterThanEqual %bool %37 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %45
-         %46 = OpLabel
-         %47 = OpLoad %int %b
-         %49 = OpIAdd %int %47 %int_1
-               OpStore %b %49
-         %50 = OpLoad %int %b
-         %51 = OpIAdd %int %50 %int_1
-               OpStore %b %51
-               OpBranch %45
-         %45 = OpLabel
-         %53 = OpLoad %float %a
-         %54 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %55 = OpLoad %float %54
-         %56 = OpFOrdLessThan %bool %53 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %60 = OpLoad %float %59
-               OpReturnValue %60
-         %57 = OpLabel
-         %61 = OpLoad %int %b
-         %63 = OpExtInst %int %64 SClamp %61 %int_0 %int_2
-         %62 = OpConvertSToF %float %63
-               OpStore %c %62
-         %66 = OpLoad %float %c
-               OpReturnValue %66
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %67
-         %70 = OpLabel
-        %a_1 = OpVariable %_ptr_Function_float Function %32
-      %param = OpVariable %_ptr_Function_float Function %32
-         %73 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %74 = OpLoad %float %73
-               OpStore %param %74
-         %75 = OpFunctionCall %float %f1_f1_ %param
-               OpStore %a_1 %75
-         %77 = OpLoad %float %a_1
-         %78 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_2
-         %79 = OpLoad %float %78
-         %80 = OpFOrdEqual %bool %77 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_0
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %86
-         %94 = OpConvertSToF %float %88
-         %95 = OpConvertSToF %float %90
-         %96 = OpConvertSToF %float %92
-         %97 = OpCompositeConstruct %v4float %93 %94 %95 %96
-               OpStore %x_GLF_color %97
-               OpBranch %81
-         %83 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_0
-         %99 = OpLoad %int %98
-        %100 = OpConvertSToF %float %99
-        %101 = OpCompositeConstruct %v4float %100 %100 %100 %100
-               OpStore %x_GLF_color %101
-               OpBranch %81
-         %81 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %102
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %106 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %107 = OpFunctionCall %void %main_1
-        %108 = OpLoad %v4float %x_GLF_color
-        %109 = OpCompositeConstruct %main_out %108
-               OpReturnValue %109
-               OpFunctionEnd
-       %main = OpFunction %void None %67
-        %111 = OpLabel
-        %113 = OpLoad %v4float %gl_FragCoord_param_1
-        %112 = OpFunctionCall %main_out %main_inner %113
-        %114 = OpCompositeExtract %v4float %112 0
-               OpStore %x_GLF_color_1_1 %114
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1a497da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,80 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_14 : buf1;
-
-fn f1_f1_(a : ptr<function, f32>) -> f32 {
-  var b : i32;
-  var c : f32;
-  b = 8;
-  let x_71 : f32 = gl_FragCoord.y;
-  let x_73 : f32 = x_9.x_GLF_uniform_float_values[0];
-  if ((x_71 >= x_73)) {
-    let x_77 : i32 = b;
-    b = (x_77 + 1);
-    let x_79 : i32 = b;
-    b = (x_79 + 1);
-  }
-  let x_81 : f32 = *(a);
-  let x_83 : f32 = x_9.x_GLF_uniform_float_values[1];
-  if ((x_81 < x_83)) {
-    let x_88 : f32 = x_9.x_GLF_uniform_float_values[1];
-    return x_88;
-  }
-  let x_89 : i32 = b;
-  c = f32(clamp(x_89, 0, 2));
-  let x_92 : f32 = c;
-  return x_92;
-}
-
-fn main_1() {
-  var a_1 : f32;
-  var param : f32;
-  let x_43 : f32 = x_9.x_GLF_uniform_float_values[1];
-  param = x_43;
-  let x_44 : f32 = f1_f1_(&(param));
-  a_1 = x_44;
-  let x_45 : f32 = a_1;
-  let x_47 : f32 = x_9.x_GLF_uniform_float_values[2];
-  if ((x_45 == x_47)) {
-    let x_53 : i32 = x_14.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_14.x_GLF_uniform_int_values[0];
-    let x_59 : i32 = x_14.x_GLF_uniform_int_values[0];
-    let x_62 : i32 = x_14.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_53), f32(x_56), f32(x_59), f32(x_62));
-  } else {
-    let x_66 : i32 = x_14.x_GLF_uniform_int_values[0];
-    let x_67 : f32 = f32(x_66);
-    x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7f503be..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_14 : register(b1, space0) {
-  uint4 x_14[2];
-};
-
-float f1_f1_(inout float a) {
-  int b = 0;
-  float c = 0.0f;
-  b = 8;
-  const float x_71 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_73 = asfloat(x_9[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_71 >= x_73)) {
-    b = (b + 1);
-    b = (b + 1);
-  }
-  const float x_81 = a;
-  const float x_83 = asfloat(x_9[1].x);
-  if ((x_81 < x_83)) {
-    const float x_88 = asfloat(x_9[1].x);
-    return x_88;
-  }
-  c = float(clamp(b, 0, 2));
-  return c;
-}
-
-void main_1() {
-  float a_1 = 0.0f;
-  float param = 0.0f;
-  const float x_43 = asfloat(x_9[1].x);
-  param = x_43;
-  const float x_44 = f1_f1_(param);
-  a_1 = x_44;
-  const float x_45 = a_1;
-  const float x_47 = asfloat(x_9[2].x);
-  if ((x_45 == x_47)) {
-    const int x_53 = asint(x_14[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_14[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_14[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_62 = asint(x_14[1].x);
-    x_GLF_color = float4(float(x_53), float(x_56), float(x_59), float(x_62));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_14[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_67 = float(x_66);
-    x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1713d3c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,93 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float f1_f1_(constant buf0& x_9, thread float* const a, thread float4* const tint_symbol_3) {
-  int b = 0;
-  float c = 0.0f;
-  b = 8;
-  float const x_71 = (*(tint_symbol_3)).y;
-  float const x_73 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_71 >= x_73)) {
-    int const x_77 = b;
-    b = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-    int const x_79 = b;
-    b = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-  }
-  float const x_81 = *(a);
-  float const x_83 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_81 < x_83)) {
-    float const x_88 = x_9.x_GLF_uniform_float_values.arr[1].el;
-    return x_88;
-  }
-  int const x_89 = b;
-  c = float(clamp(x_89, 0, 2));
-  float const x_92 = c;
-  return x_92;
-}
-
-void main_1(constant buf0& x_9, constant buf1& x_14, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float a_1 = 0.0f;
-  float param = 0.0f;
-  float const x_43 = x_9.x_GLF_uniform_float_values.arr[1].el;
-  param = x_43;
-  float const x_44 = f1_f1_(x_9, &(param), tint_symbol_4);
-  a_1 = x_44;
-  float const x_45 = a_1;
-  float const x_47 = x_9.x_GLF_uniform_float_values.arr[2].el;
-  if ((x_45 == x_47)) {
-    int const x_53 = x_14.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_14.x_GLF_uniform_int_values.arr[0].el;
-    int const x_59 = x_14.x_GLF_uniform_int_values.arr[0].el;
-    int const x_62 = x_14.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_5) = float4(float(x_53), float(x_56), float(x_59), float(x_62));
-  } else {
-    int const x_66 = x_14.x_GLF_uniform_int_values.arr[0].el;
-    float const x_67 = float(x_66);
-    *(tint_symbol_5) = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, constant buf1& x_14, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_9, x_14, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]], constant buf1& x_14 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, x_14, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e2d9db9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,186 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 115
-; Schema: 0
-               OpCapability Shader
-         %64 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_14 "x_14"
-               OpName %f1_f1_ "f1_f1_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_1 "main_1"
-               OpName %a_1 "a_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_14 NonWritable
-               OpDecorate %x_14 DescriptorSet 0
-               OpDecorate %x_14 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_14 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %23 = OpTypeFunction %float %_ptr_Function_float
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-         %32 = OpConstantNull %float
-      %int_8 = OpConstant %int 8
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %67 = OpTypeFunction %void
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-        %102 = OpTypeFunction %main_out %v4float
-     %f1_f1_ = OpFunction %float None %23
-          %a = OpFunctionParameter %_ptr_Function_float
-         %27 = OpLabel
-          %b = OpVariable %_ptr_Function_int Function %30
-          %c = OpVariable %_ptr_Function_float Function %32
-               OpStore %b %int_8
-         %36 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %37 = OpLoad %float %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpFOrdGreaterThanEqual %bool %37 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %45
-         %46 = OpLabel
-         %47 = OpLoad %int %b
-         %49 = OpIAdd %int %47 %int_1
-               OpStore %b %49
-         %50 = OpLoad %int %b
-         %51 = OpIAdd %int %50 %int_1
-               OpStore %b %51
-               OpBranch %45
-         %45 = OpLabel
-         %53 = OpLoad %float %a
-         %54 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %55 = OpLoad %float %54
-         %56 = OpFOrdLessThan %bool %53 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %60 = OpLoad %float %59
-               OpReturnValue %60
-         %57 = OpLabel
-         %61 = OpLoad %int %b
-         %63 = OpExtInst %int %64 SClamp %61 %int_0 %int_2
-         %62 = OpConvertSToF %float %63
-               OpStore %c %62
-         %66 = OpLoad %float %c
-               OpReturnValue %66
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %67
-         %70 = OpLabel
-        %a_1 = OpVariable %_ptr_Function_float Function %32
-      %param = OpVariable %_ptr_Function_float Function %32
-         %73 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %74 = OpLoad %float %73
-               OpStore %param %74
-         %75 = OpFunctionCall %float %f1_f1_ %param
-               OpStore %a_1 %75
-         %77 = OpLoad %float %a_1
-         %78 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_2
-         %79 = OpLoad %float %78
-         %80 = OpFOrdEqual %bool %77 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_0
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %86
-         %94 = OpConvertSToF %float %88
-         %95 = OpConvertSToF %float %90
-         %96 = OpConvertSToF %float %92
-         %97 = OpCompositeConstruct %v4float %93 %94 %95 %96
-               OpStore %x_GLF_color %97
-               OpBranch %81
-         %83 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_14 %uint_0 %int_0
-         %99 = OpLoad %int %98
-        %100 = OpConvertSToF %float %99
-        %101 = OpCompositeConstruct %v4float %100 %100 %100 %100
-               OpStore %x_GLF_color %101
-               OpBranch %81
-         %81 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %102
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %106 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %107 = OpFunctionCall %void %main_1
-        %108 = OpLoad %v4float %x_GLF_color
-        %109 = OpCompositeConstruct %main_out %108
-               OpReturnValue %109
-               OpFunctionEnd
-       %main = OpFunction %void None %67
-        %111 = OpLabel
-        %113 = OpLoad %v4float %gl_FragCoord_param_1
-        %112 = OpFunctionCall %main_out %main_inner %113
-        %114 = OpCompositeExtract %v4float %112 0
-               OpStore %x_GLF_color_1_1 %114
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1a497da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-pre-increment-clamp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,80 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_14 : buf1;
-
-fn f1_f1_(a : ptr<function, f32>) -> f32 {
-  var b : i32;
-  var c : f32;
-  b = 8;
-  let x_71 : f32 = gl_FragCoord.y;
-  let x_73 : f32 = x_9.x_GLF_uniform_float_values[0];
-  if ((x_71 >= x_73)) {
-    let x_77 : i32 = b;
-    b = (x_77 + 1);
-    let x_79 : i32 = b;
-    b = (x_79 + 1);
-  }
-  let x_81 : f32 = *(a);
-  let x_83 : f32 = x_9.x_GLF_uniform_float_values[1];
-  if ((x_81 < x_83)) {
-    let x_88 : f32 = x_9.x_GLF_uniform_float_values[1];
-    return x_88;
-  }
-  let x_89 : i32 = b;
-  c = f32(clamp(x_89, 0, 2));
-  let x_92 : f32 = c;
-  return x_92;
-}
-
-fn main_1() {
-  var a_1 : f32;
-  var param : f32;
-  let x_43 : f32 = x_9.x_GLF_uniform_float_values[1];
-  param = x_43;
-  let x_44 : f32 = f1_f1_(&(param));
-  a_1 = x_44;
-  let x_45 : f32 = a_1;
-  let x_47 : f32 = x_9.x_GLF_uniform_float_values[2];
-  if ((x_45 == x_47)) {
-    let x_53 : i32 = x_14.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_14.x_GLF_uniform_int_values[0];
-    let x_59 : i32 = x_14.x_GLF_uniform_int_values[0];
-    let x_62 : i32 = x_14.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_53), f32(x_56), f32(x_59), f32(x_62));
-  } else {
-    let x_66 : i32 = x_14.x_GLF_uniform_int_values[0];
-    let x_67 : f32 = f32(x_66);
-    x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index cb30bc3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[2];
-};
-
-void main_1() {
-  int a = 0;
-  float b = 0.0f;
-  const float x_39 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  a = ((x_39 >= x_41) ? 0 : 2);
-  const float x_45 = asfloat(x_7[1].x);
-  const float x_47 = asfloat(x_7[2].x);
-  const float x_49 = asfloat(x_7[3].x);
-  b = float3(x_45, x_47, x_49)[a];
-  const float x_53 = b;
-  const float x_55 = asfloat(x_7[1].x);
-  if ((x_53 == x_55)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_61 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_64 = asint(x_10[1].x);
-    const int x_67 = asint(x_10[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_70 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_75 = float(x_74);
-    x_GLF_color = float4(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.msl
deleted file mode 100644
index c2eb764..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  float b = 0.0f;
-  float const x_39 = (*(tint_symbol_3)).y;
-  float const x_41 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  a = select(2, 0, (x_39 >= x_41));
-  float const x_45 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_47 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_49 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  int const x_51 = a;
-  b = float3(x_45, x_47, x_49)[x_51];
-  float const x_53 = b;
-  float const x_55 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_53 == x_55)) {
-    int const x_61 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_64 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_67 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_70 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-  } else {
-    int const x_74 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_75 = float(x_74);
-    *(tint_symbol_4) = float4(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index cb59323..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %32 = OpConstantNull %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-    %v3float = OpTypeVector %float 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %83 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %29
-          %b = OpVariable %_ptr_Function_float Function %32
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %36 = OpLoad %float %35
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %43 = OpFOrdGreaterThanEqual %bool %36 %41
-         %42 = OpSelect %int %43 %int_0 %int_2
-               OpStore %a %42
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %49 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-         %53 = OpLoad %float %52
-         %54 = OpLoad %int %a
-         %56 = OpCompositeConstruct %v3float %48 %50 %53
-         %57 = OpVectorExtractDynamic %float %56 %54
-               OpStore %b %57
-         %58 = OpLoad %float %b
-         %59 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %60 = OpLoad %float %59
-         %61 = OpFOrdEqual %bool %58 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %64
-         %63 = OpLabel
-         %66 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %67
-         %75 = OpConvertSToF %float %69
-         %76 = OpConvertSToF %float %71
-         %77 = OpConvertSToF %float %73
-         %78 = OpCompositeConstruct %v4float %74 %75 %76 %77
-               OpStore %x_GLF_color %78
-               OpBranch %62
-         %64 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpConvertSToF %float %80
-         %82 = OpCompositeConstruct %v4float %81 %81 %81 %81
-               OpStore %x_GLF_color %82
-               OpBranch %62
-         %62 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %83
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %87 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %88 = OpFunctionCall %void %main_1
-         %89 = OpLoad %v4float %x_GLF_color
-         %90 = OpCompositeConstruct %main_out %89
-               OpReturnValue %90
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %92 = OpLabel
-         %94 = OpLoad %v4float %gl_FragCoord_param_1
-         %93 = OpFunctionCall %main_out %main_inner %94
-         %95 = OpCompositeExtract %v4float %93 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2e2a9f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-fn main_1() {
-  var a : i32;
-  var b : f32;
-  let x_39 : f32 = gl_FragCoord.y;
-  let x_41 : f32 = x_7.x_GLF_uniform_float_values[0];
-  a = select(2, 0, (x_39 >= x_41));
-  let x_45 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_47 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_49 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_51 : i32 = a;
-  b = vec3<f32>(x_45, x_47, x_49)[x_51];
-  let x_53 : f32 = b;
-  let x_55 : f32 = x_7.x_GLF_uniform_float_values[1];
-  if ((x_53 == x_55)) {
-    let x_61 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_64 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_67 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_70 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_61), f32(x_64), f32(x_67), f32(x_70));
-  } else {
-    let x_74 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_75 : f32 = f32(x_74);
-    x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index cb30bc3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[2];
-};
-
-void main_1() {
-  int a = 0;
-  float b = 0.0f;
-  const float x_39 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  a = ((x_39 >= x_41) ? 0 : 2);
-  const float x_45 = asfloat(x_7[1].x);
-  const float x_47 = asfloat(x_7[2].x);
-  const float x_49 = asfloat(x_7[3].x);
-  b = float3(x_45, x_47, x_49)[a];
-  const float x_53 = b;
-  const float x_55 = asfloat(x_7[1].x);
-  if ((x_53 == x_55)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_61 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_64 = asint(x_10[1].x);
-    const int x_67 = asint(x_10[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_70 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_75 = float(x_74);
-    x_GLF_color = float4(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.msl
deleted file mode 100644
index c2eb764..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  float b = 0.0f;
-  float const x_39 = (*(tint_symbol_3)).y;
-  float const x_41 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  a = select(2, 0, (x_39 >= x_41));
-  float const x_45 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_47 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_49 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  int const x_51 = a;
-  b = float3(x_45, x_47, x_49)[x_51];
-  float const x_53 = b;
-  float const x_55 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_53 == x_55)) {
-    int const x_61 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_64 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_67 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_70 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-  } else {
-    int const x_74 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_75 = float(x_74);
-    *(tint_symbol_4) = float4(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index cb59323..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %32 = OpConstantNull %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-    %v3float = OpTypeVector %float 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %83 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %29
-          %b = OpVariable %_ptr_Function_float Function %32
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %36 = OpLoad %float %35
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %43 = OpFOrdGreaterThanEqual %bool %36 %41
-         %42 = OpSelect %int %43 %int_0 %int_2
-               OpStore %a %42
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %49 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-         %53 = OpLoad %float %52
-         %54 = OpLoad %int %a
-         %56 = OpCompositeConstruct %v3float %48 %50 %53
-         %57 = OpVectorExtractDynamic %float %56 %54
-               OpStore %b %57
-         %58 = OpLoad %float %b
-         %59 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %60 = OpLoad %float %59
-         %61 = OpFOrdEqual %bool %58 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %64
-         %63 = OpLabel
-         %66 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %67
-         %75 = OpConvertSToF %float %69
-         %76 = OpConvertSToF %float %71
-         %77 = OpConvertSToF %float %73
-         %78 = OpCompositeConstruct %v4float %74 %75 %76 %77
-               OpStore %x_GLF_color %78
-               OpBranch %62
-         %64 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpConvertSToF %float %80
-         %82 = OpCompositeConstruct %v4float %81 %81 %81 %81
-               OpStore %x_GLF_color %82
-               OpBranch %62
-         %62 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %83
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %87 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %88 = OpFunctionCall %void %main_1
-         %89 = OpLoad %v4float %x_GLF_color
-         %90 = OpCompositeConstruct %main_out %89
-               OpReturnValue %90
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %92 = OpLabel
-         %94 = OpLoad %v4float %gl_FragCoord_param_1
-         %93 = OpFunctionCall %main_out %main_inner %94
-         %95 = OpCompositeExtract %v4float %93 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2e2a9f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-ternary-vector-access/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-fn main_1() {
-  var a : i32;
-  var b : f32;
-  let x_39 : f32 = gl_FragCoord.y;
-  let x_41 : f32 = x_7.x_GLF_uniform_float_values[0];
-  a = select(2, 0, (x_39 >= x_41));
-  let x_45 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_47 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_49 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_51 : i32 = a;
-  b = vec3<f32>(x_45, x_47, x_49)[x_51];
-  let x_53 : f32 = b;
-  let x_55 : f32 = x_7.x_GLF_uniform_float_values[1];
-  if ((x_53 == x_55)) {
-    let x_61 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_64 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_67 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_70 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_61), f32(x_64), f32(x_67), f32(x_70));
-  } else {
-    let x_74 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_75 : f32 = f32(x_74);
-    x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 32d03f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-
-void main_1() {
-  int i = 0;
-  const int x_32 = asint(x_6[2].x);
-  i = x_32;
-  while (true) {
-    if ((i >= 0)) {
-    } else {
-      break;
-    }
-    if (((i % 2) == 0)) {
-      const uint scalar_offset = ((16u * uint(0))) / 4;
-      const int x_47 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const int x_50 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      const int x_53 = asint(x_6[1].x);
-      x_GLF_color = float4(1.0f, float(x_47), float(x_50), float(x_53));
-    } else {
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const float x_57 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      x_GLF_color = float4(x_57, x_57, x_57, x_57);
-    }
-    i = (i - 1);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1625529..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_32;
-  while (true) {
-    int const x_37 = i;
-    if ((x_37 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_40 = i;
-    if (((x_40 % 2) == 0)) {
-      int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      *(tint_symbol_3) = float4(1.0f, float(x_47), float(x_50), float(x_53));
-    } else {
-      float const x_57 = x_8.x_GLF_uniform_float_values.arr[0].el;
-      *(tint_symbol_3) = float4(x_57, x_57, x_57, x_57);
-    }
-    int const x_59 = i;
-    i = as_type<int>((as_type<uint>(x_59) - as_type<uint>(1)));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 57dc194..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,138 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %26
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %31 = OpLoad %int %30
-               OpStore %i %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %38 = OpSGreaterThanEqual %bool %36 %int_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %33
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %44 = OpSMod %int %43 %int_2
-         %45 = OpIEqual %bool %44 %int_0
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %57 = OpConvertSToF %float %50
-         %58 = OpConvertSToF %float %52
-         %59 = OpConvertSToF %float %55
-         %60 = OpCompositeConstruct %v4float %float_1 %57 %58 %59
-               OpStore %x_GLF_color %60
-               OpBranch %46
-         %48 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-               OpStore %x_GLF_color %64
-               OpBranch %46
-         %46 = OpLabel
-         %65 = OpLoad %int %i
-         %66 = OpISub %int %65 %int_1
-               OpStore %i %66
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %32
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 7198d38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var i : i32;
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_32;
-  loop {
-    let x_37 : i32 = i;
-    if ((x_37 >= 0)) {
-    } else {
-      break;
-    }
-    let x_40 : i32 = i;
-    if (((x_40 % 2) == 0)) {
-      let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-      x_GLF_color = vec4<f32>(1.0, f32(x_47), f32(x_50), f32(x_53));
-    } else {
-      let x_57 : f32 = x_8.x_GLF_uniform_float_values[0];
-      x_GLF_color = vec4<f32>(x_57, x_57, x_57, x_57);
-    }
-    let x_59 : i32 = i;
-    i = (x_59 - 1);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 32d03f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-
-void main_1() {
-  int i = 0;
-  const int x_32 = asint(x_6[2].x);
-  i = x_32;
-  while (true) {
-    if ((i >= 0)) {
-    } else {
-      break;
-    }
-    if (((i % 2) == 0)) {
-      const uint scalar_offset = ((16u * uint(0))) / 4;
-      const int x_47 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const int x_50 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      const int x_53 = asint(x_6[1].x);
-      x_GLF_color = float4(1.0f, float(x_47), float(x_50), float(x_53));
-    } else {
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const float x_57 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      x_GLF_color = float4(x_57, x_57, x_57, x_57);
-    }
-    i = (i - 1);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1625529..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_32;
-  while (true) {
-    int const x_37 = i;
-    if ((x_37 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_40 = i;
-    if (((x_40 % 2) == 0)) {
-      int const x_47 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      *(tint_symbol_3) = float4(1.0f, float(x_47), float(x_50), float(x_53));
-    } else {
-      float const x_57 = x_8.x_GLF_uniform_float_values.arr[0].el;
-      *(tint_symbol_3) = float4(x_57, x_57, x_57, x_57);
-    }
-    int const x_59 = i;
-    i = as_type<int>((as_type<uint>(x_59) - as_type<uint>(1)));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 57dc194..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,138 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %26
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %31 = OpLoad %int %30
-               OpStore %i %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %38 = OpSGreaterThanEqual %bool %36 %int_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %33
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %44 = OpSMod %int %43 %int_2
-         %45 = OpIEqual %bool %44 %int_0
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %57 = OpConvertSToF %float %50
-         %58 = OpConvertSToF %float %52
-         %59 = OpConvertSToF %float %55
-         %60 = OpCompositeConstruct %v4float %float_1 %57 %58 %59
-               OpStore %x_GLF_color %60
-               OpBranch %46
-         %48 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-               OpStore %x_GLF_color %64
-               OpBranch %46
-         %46 = OpLabel
-         %65 = OpLoad %int %i
-         %66 = OpISub %int %65 %int_1
-               OpStore %i %66
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %32
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7198d38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-compares-while-modulo/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var i : i32;
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_32;
-  loop {
-    let x_37 : i32 = i;
-    if ((x_37 >= 0)) {
-    } else {
-      break;
-    }
-    let x_40 : i32 = i;
-    if (((x_40 % 2) == 0)) {
-      let x_47 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-      x_GLF_color = vec4<f32>(1.0, f32(x_47), f32(x_50), f32(x_53));
-    } else {
-      let x_57 : f32 = x_8.x_GLF_uniform_float_values[0];
-      x_GLF_color = vec4<f32>(x_57, x_57, x_57, x_57);
-    }
-    let x_59 : i32 = i;
-    i = (x_59 - 1);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 94e3fa1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[2];
-};
-
-float f1_f1_(inout float a) {
-  const float x_100 = a;
-  return ddx(x_100);
-}
-
-void main_1() {
-  float4 v2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float a_1 = 0.0f;
-  float x_40 = 0.0f;
-  float param = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_42 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  const int x_45 = asint(x_8[1].x);
-  const int x_48 = asint(x_8[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_51 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  const float x_55 = gl_FragCoord.x;
-  const float x_57 = asfloat(x_10[1].x);
-  if ((x_55 < x_57)) {
-    const float x_62 = v2.x;
-    if (!((x_62 < 1.0f))) {
-      const float x_68 = asfloat(x_10[1].x);
-      const float x_70 = asfloat(x_10[1].x);
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const float x_72 = asfloat(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      if ((x_70 > x_72)) {
-        const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-        const float x_78 = asfloat(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-        param = x_78;
-        const float x_79 = f1_f1_(param);
-        x_40 = x_79;
-      } else {
-        const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-        const float x_81 = asfloat(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-        x_40 = x_81;
-      }
-      a_1 = (x_68 / x_40);
-      const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-      const float x_85 = asfloat(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-      const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-      const float x_88 = asfloat(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-      const float x_90 = a_1;
-      const float3 x_92 = lerp(float3(x_85, x_85, x_85), float3(x_88, x_88, x_88), float3(x_90, x_90, x_90));
-      const float x_94 = asfloat(x_10[1].x);
-      x_GLF_color = float4(x_92.x, x_92.y, x_92.z, x_94);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6001d57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float f1_f1_(thread float* const a) {
-  float const x_100 = *(a);
-  return dfdx(x_100);
-}
-
-void main_1(constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4 v2 = 0.0f;
-  float a_1 = 0.0f;
-  float x_40 = 0.0f;
-  float param = 0.0f;
-  int const x_42 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_45 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_48 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_51 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  float const x_55 = (*(tint_symbol_4)).x;
-  float const x_57 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_55 < x_57)) {
-    float const x_62 = v2.x;
-    if (!((x_62 < 1.0f))) {
-      float const x_68 = x_10.x_GLF_uniform_float_values.arr[1].el;
-      float const x_70 = x_10.x_GLF_uniform_float_values.arr[1].el;
-      float const x_72 = x_10.x_GLF_uniform_float_values.arr[0].el;
-      if ((x_70 > x_72)) {
-        float const x_78 = x_10.x_GLF_uniform_float_values.arr[0].el;
-        param = x_78;
-        float const x_79 = f1_f1_(&(param));
-        x_40 = x_79;
-      } else {
-        float const x_81 = x_10.x_GLF_uniform_float_values.arr[0].el;
-        x_40 = x_81;
-      }
-      float const x_82 = x_40;
-      a_1 = (x_68 / x_82);
-      float const x_85 = x_10.x_GLF_uniform_float_values.arr[0].el;
-      float const x_88 = x_10.x_GLF_uniform_float_values.arr[0].el;
-      float const x_90 = a_1;
-      float3 const x_92 = mix(float3(x_85, x_85, x_85), float3(x_88, x_88, x_88), float3(x_90, x_90, x_90));
-      float const x_94 = x_10.x_GLF_uniform_float_values.arr[1].el;
-      *(tint_symbol_3) = float4(x_92.x, x_92.y, x_92.z, x_94);
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, constant buf1& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1370642..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 122
-; Schema: 0
-               OpCapability Shader
-         %99 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %f1_f1_ "f1_f1_"
-               OpName %a "a"
-               OpName %main_1 "main_1"
-               OpName %v2 "v2"
-               OpName %a_1 "a_1"
-               OpName %x_40 "x_40"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpTypeFunction %float %_ptr_Function_float
-       %void = OpTypeVoid
-         %30 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %37 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %109 = OpTypeFunction %main_out %v4float
-     %f1_f1_ = OpFunction %float None %22
-          %a = OpFunctionParameter %_ptr_Function_float
-         %26 = OpLabel
-         %28 = OpLoad %float %a
-         %29 = OpDPdx %float %28
-               OpReturnValue %29
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %30
-         %33 = OpLabel
-         %v2 = OpVariable %_ptr_Function_v4float Function %7
-        %a_1 = OpVariable %_ptr_Function_float Function %37
-       %x_40 = OpVariable %_ptr_Function_float Function %37
-      %param = OpVariable %_ptr_Function_float Function %37
-         %43 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %46 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpConvertSToF %float %44
-         %53 = OpConvertSToF %float %47
-         %54 = OpConvertSToF %float %49
-         %55 = OpConvertSToF %float %51
-         %56 = OpCompositeConstruct %v4float %52 %53 %54 %55
-               OpStore %x_GLF_color %56
-         %58 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %59 = OpLoad %float %58
-         %61 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %62 = OpLoad %float %61
-         %63 = OpFOrdLessThan %bool %59 %62
-               OpSelectionMerge %65 None
-               OpBranchConditional %63 %66 %65
-         %66 = OpLabel
-         %67 = OpAccessChain %_ptr_Function_float %v2 %uint_0
-         %68 = OpLoad %float %67
-         %71 = OpFOrdLessThan %bool %68 %float_1
-         %69 = OpLogicalNot %bool %71
-               OpSelectionMerge %72 None
-               OpBranchConditional %69 %73 %72
-         %73 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %75 = OpLoad %float %74
-         %76 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %79 = OpLoad %float %78
-         %80 = OpFOrdGreaterThan %bool %77 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %85 = OpLoad %float %84
-               OpStore %param %85
-         %86 = OpFunctionCall %float %f1_f1_ %param
-               OpStore %x_40 %86
-               OpBranch %81
-         %83 = OpLabel
-         %88 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %89 = OpLoad %float %88
-               OpStore %x_40 %89
-               OpBranch %81
-         %81 = OpLabel
-         %90 = OpLoad %float %x_40
-         %91 = OpFDiv %float %75 %90
-               OpStore %a_1 %91
-         %92 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %93 = OpLoad %float %92
-         %94 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %95 = OpLoad %float %94
-         %96 = OpLoad %float %a_1
-        %100 = OpCompositeConstruct %v3float %93 %93 %93
-        %101 = OpCompositeConstruct %v3float %95 %95 %95
-        %102 = OpCompositeConstruct %v3float %96 %96 %96
-         %97 = OpExtInst %v3float %99 FMix %100 %101 %102
-        %103 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-        %104 = OpLoad %float %103
-        %105 = OpCompositeExtract %float %97 0
-        %106 = OpCompositeExtract %float %97 1
-        %107 = OpCompositeExtract %float %97 2
-        %108 = OpCompositeConstruct %v4float %105 %106 %107 %104
-               OpStore %x_GLF_color %108
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %109
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %113 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %30
-        %118 = OpLabel
-        %120 = OpLoad %v4float %gl_FragCoord_param_1
-        %119 = OpFunctionCall %main_out %main_inner %120
-        %121 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %121
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a6defc7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-fn f1_f1_(a : ptr<function, f32>) -> f32 {
-  let x_100 : f32 = *(a);
-  return dpdx(x_100);
-}
-
-fn main_1() {
-  var v2 : vec4<f32>;
-  var a_1 : f32;
-  var x_40 : f32;
-  var param : f32;
-  let x_42 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_45 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_48 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_51 : i32 = x_8.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
-  let x_55 : f32 = gl_FragCoord.x;
-  let x_57 : f32 = x_10.x_GLF_uniform_float_values[1];
-  if ((x_55 < x_57)) {
-    let x_62 : f32 = v2.x;
-    if (!((x_62 < 1.0))) {
-      let x_68 : f32 = x_10.x_GLF_uniform_float_values[1];
-      let x_70 : f32 = x_10.x_GLF_uniform_float_values[1];
-      let x_72 : f32 = x_10.x_GLF_uniform_float_values[0];
-      if ((x_70 > x_72)) {
-        let x_78 : f32 = x_10.x_GLF_uniform_float_values[0];
-        param = x_78;
-        let x_79 : f32 = f1_f1_(&(param));
-        x_40 = x_79;
-      } else {
-        let x_81 : f32 = x_10.x_GLF_uniform_float_values[0];
-        x_40 = x_81;
-      }
-      let x_82 : f32 = x_40;
-      a_1 = (x_68 / x_82);
-      let x_85 : f32 = x_10.x_GLF_uniform_float_values[0];
-      let x_88 : f32 = x_10.x_GLF_uniform_float_values[0];
-      let x_90 : f32 = a_1;
-      let x_92 : vec3<f32> = mix(vec3<f32>(x_85, x_85, x_85), vec3<f32>(x_88, x_88, x_88), vec3<f32>(x_90, x_90, x_90));
-      let x_94 : f32 = x_10.x_GLF_uniform_float_values[1];
-      x_GLF_color = vec4<f32>(x_92.x, x_92.y, x_92.z, x_94);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 94e3fa1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[2];
-};
-
-float f1_f1_(inout float a) {
-  const float x_100 = a;
-  return ddx(x_100);
-}
-
-void main_1() {
-  float4 v2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float a_1 = 0.0f;
-  float x_40 = 0.0f;
-  float param = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_42 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  const int x_45 = asint(x_8[1].x);
-  const int x_48 = asint(x_8[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_51 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  const float x_55 = gl_FragCoord.x;
-  const float x_57 = asfloat(x_10[1].x);
-  if ((x_55 < x_57)) {
-    const float x_62 = v2.x;
-    if (!((x_62 < 1.0f))) {
-      const float x_68 = asfloat(x_10[1].x);
-      const float x_70 = asfloat(x_10[1].x);
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const float x_72 = asfloat(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      if ((x_70 > x_72)) {
-        const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-        const float x_78 = asfloat(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-        param = x_78;
-        const float x_79 = f1_f1_(param);
-        x_40 = x_79;
-      } else {
-        const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-        const float x_81 = asfloat(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-        x_40 = x_81;
-      }
-      a_1 = (x_68 / x_40);
-      const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-      const float x_85 = asfloat(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-      const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-      const float x_88 = asfloat(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-      const float x_90 = a_1;
-      const float3 x_92 = lerp(float3(x_85, x_85, x_85), float3(x_88, x_88, x_88), float3(x_90, x_90, x_90));
-      const float x_94 = asfloat(x_10[1].x);
-      x_GLF_color = float4(x_92.x, x_92.y, x_92.z, x_94);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6001d57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float f1_f1_(thread float* const a) {
-  float const x_100 = *(a);
-  return dfdx(x_100);
-}
-
-void main_1(constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4 v2 = 0.0f;
-  float a_1 = 0.0f;
-  float x_40 = 0.0f;
-  float param = 0.0f;
-  int const x_42 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_45 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_48 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_51 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-  float const x_55 = (*(tint_symbol_4)).x;
-  float const x_57 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_55 < x_57)) {
-    float const x_62 = v2.x;
-    if (!((x_62 < 1.0f))) {
-      float const x_68 = x_10.x_GLF_uniform_float_values.arr[1].el;
-      float const x_70 = x_10.x_GLF_uniform_float_values.arr[1].el;
-      float const x_72 = x_10.x_GLF_uniform_float_values.arr[0].el;
-      if ((x_70 > x_72)) {
-        float const x_78 = x_10.x_GLF_uniform_float_values.arr[0].el;
-        param = x_78;
-        float const x_79 = f1_f1_(&(param));
-        x_40 = x_79;
-      } else {
-        float const x_81 = x_10.x_GLF_uniform_float_values.arr[0].el;
-        x_40 = x_81;
-      }
-      float const x_82 = x_40;
-      a_1 = (x_68 / x_82);
-      float const x_85 = x_10.x_GLF_uniform_float_values.arr[0].el;
-      float const x_88 = x_10.x_GLF_uniform_float_values.arr[0].el;
-      float const x_90 = a_1;
-      float3 const x_92 = mix(float3(x_85, x_85, x_85), float3(x_88, x_88, x_88), float3(x_90, x_90, x_90));
-      float const x_94 = x_10.x_GLF_uniform_float_values.arr[1].el;
-      *(tint_symbol_3) = float4(x_92.x, x_92.y, x_92.z, x_94);
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, constant buf1& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1370642..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 122
-; Schema: 0
-               OpCapability Shader
-         %99 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %f1_f1_ "f1_f1_"
-               OpName %a "a"
-               OpName %main_1 "main_1"
-               OpName %v2 "v2"
-               OpName %a_1 "a_1"
-               OpName %x_40 "x_40"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpTypeFunction %float %_ptr_Function_float
-       %void = OpTypeVoid
-         %30 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %37 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %109 = OpTypeFunction %main_out %v4float
-     %f1_f1_ = OpFunction %float None %22
-          %a = OpFunctionParameter %_ptr_Function_float
-         %26 = OpLabel
-         %28 = OpLoad %float %a
-         %29 = OpDPdx %float %28
-               OpReturnValue %29
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %30
-         %33 = OpLabel
-         %v2 = OpVariable %_ptr_Function_v4float Function %7
-        %a_1 = OpVariable %_ptr_Function_float Function %37
-       %x_40 = OpVariable %_ptr_Function_float Function %37
-      %param = OpVariable %_ptr_Function_float Function %37
-         %43 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %46 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpConvertSToF %float %44
-         %53 = OpConvertSToF %float %47
-         %54 = OpConvertSToF %float %49
-         %55 = OpConvertSToF %float %51
-         %56 = OpCompositeConstruct %v4float %52 %53 %54 %55
-               OpStore %x_GLF_color %56
-         %58 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %59 = OpLoad %float %58
-         %61 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %62 = OpLoad %float %61
-         %63 = OpFOrdLessThan %bool %59 %62
-               OpSelectionMerge %65 None
-               OpBranchConditional %63 %66 %65
-         %66 = OpLabel
-         %67 = OpAccessChain %_ptr_Function_float %v2 %uint_0
-         %68 = OpLoad %float %67
-         %71 = OpFOrdLessThan %bool %68 %float_1
-         %69 = OpLogicalNot %bool %71
-               OpSelectionMerge %72 None
-               OpBranchConditional %69 %73 %72
-         %73 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %75 = OpLoad %float %74
-         %76 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %79 = OpLoad %float %78
-         %80 = OpFOrdGreaterThan %bool %77 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %85 = OpLoad %float %84
-               OpStore %param %85
-         %86 = OpFunctionCall %float %f1_f1_ %param
-               OpStore %x_40 %86
-               OpBranch %81
-         %83 = OpLabel
-         %88 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %89 = OpLoad %float %88
-               OpStore %x_40 %89
-               OpBranch %81
-         %81 = OpLabel
-         %90 = OpLoad %float %x_40
-         %91 = OpFDiv %float %75 %90
-               OpStore %a_1 %91
-         %92 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %93 = OpLoad %float %92
-         %94 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %95 = OpLoad %float %94
-         %96 = OpLoad %float %a_1
-        %100 = OpCompositeConstruct %v3float %93 %93 %93
-        %101 = OpCompositeConstruct %v3float %95 %95 %95
-        %102 = OpCompositeConstruct %v3float %96 %96 %96
-         %97 = OpExtInst %v3float %99 FMix %100 %101 %102
-        %103 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-        %104 = OpLoad %float %103
-        %105 = OpCompositeExtract %float %97 0
-        %106 = OpCompositeExtract %float %97 1
-        %107 = OpCompositeExtract %float %97 2
-        %108 = OpCompositeConstruct %v4float %105 %106 %107 %104
-               OpStore %x_GLF_color %108
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %109
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %113 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %30
-        %118 = OpLabel
-        %120 = OpLoad %v4float %gl_FragCoord_param_1
-        %119 = OpFunctionCall %main_out %main_inner %120
-        %121 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %121
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a6defc7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-fn f1_f1_(a : ptr<function, f32>) -> f32 {
-  let x_100 : f32 = *(a);
-  return dpdx(x_100);
-}
-
-fn main_1() {
-  var v2 : vec4<f32>;
-  var a_1 : f32;
-  var x_40 : f32;
-  var param : f32;
-  let x_42 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_45 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_48 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_51 : i32 = x_8.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
-  let x_55 : f32 = gl_FragCoord.x;
-  let x_57 : f32 = x_10.x_GLF_uniform_float_values[1];
-  if ((x_55 < x_57)) {
-    let x_62 : f32 = v2.x;
-    if (!((x_62 < 1.0))) {
-      let x_68 : f32 = x_10.x_GLF_uniform_float_values[1];
-      let x_70 : f32 = x_10.x_GLF_uniform_float_values[1];
-      let x_72 : f32 = x_10.x_GLF_uniform_float_values[0];
-      if ((x_70 > x_72)) {
-        let x_78 : f32 = x_10.x_GLF_uniform_float_values[0];
-        param = x_78;
-        let x_79 : f32 = f1_f1_(&(param));
-        x_40 = x_79;
-      } else {
-        let x_81 : f32 = x_10.x_GLF_uniform_float_values[0];
-        x_40 = x_81;
-      }
-      let x_82 : f32 = x_40;
-      a_1 = (x_68 / x_82);
-      let x_85 : f32 = x_10.x_GLF_uniform_float_values[0];
-      let x_88 : f32 = x_10.x_GLF_uniform_float_values[0];
-      let x_90 : f32 = a_1;
-      let x_92 : vec3<f32> = mix(vec3<f32>(x_85, x_85, x_85), vec3<f32>(x_88, x_88, x_88), vec3<f32>(x_90, x_90, x_90));
-      let x_94 : f32 = x_10.x_GLF_uniform_float_values[1];
-      x_GLF_color = vec4<f32>(x_92.x, x_92.y, x_92.z, x_94);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 03bab36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,102 +0,0 @@
-uint tint_pack2x16unorm(float2 param_0) {
-  uint2 i = uint2(round(clamp(param_0, 0.0, 1.0) * 65535.0));
-  return (i.x | i.y << 16);
-}
-
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[7];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float E = 0.0f;
-  bool x_75 = false;
-  bool x_92 = false;
-  bool x_109 = false;
-  bool x_76_phi = false;
-  bool x_93_phi = false;
-  bool x_110_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_43 = asfloat(x_6[1].x);
-  a = tint_pack2x16unorm(float2(x_41, x_43));
-  v1 = tint_unpack4x8snorm(a);
-  E = 0.01f;
-  const int x_49 = asint(x_10[2].x);
-  const float x_51 = v1[x_49];
-  const float x_53 = asfloat(x_6[2].x);
-  const float x_55 = asfloat(x_6[3].x);
-  const bool x_60 = (abs((x_51 - (x_53 / x_55))) < E);
-  x_76_phi = x_60;
-  if (x_60) {
-    const int x_64 = asint(x_10[1].x);
-    const float x_66 = v1[x_64];
-    const float x_68 = asfloat(x_6[4].x);
-    const float x_70 = asfloat(x_6[3].x);
-    x_75 = (abs((x_66 - (x_68 / x_70))) < E);
-    x_76_phi = x_75;
-  }
-  const bool x_76 = x_76_phi;
-  x_93_phi = x_76;
-  if (x_76) {
-    const int x_80 = asint(x_10[3].x);
-    const float x_82 = v1[x_80];
-    const float x_84 = asfloat(x_6[5].x);
-    const float x_87 = asfloat(x_6[3].x);
-    x_92 = (abs((x_82 - (-(x_84) / x_87))) < E);
-    x_93_phi = x_92;
-  }
-  const bool x_93 = x_93_phi;
-  x_110_phi = x_93;
-  if (x_93) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_97 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_99 = v1[x_97];
-    const float x_101 = asfloat(x_6[6].x);
-    const float x_104 = asfloat(x_6[3].x);
-    x_109 = (abs((x_99 - (-(x_101) / x_104))) < E);
-    x_110_phi = x_109;
-  }
-  if (x_110_phi) {
-    const int x_115 = asint(x_10[1].x);
-    const int x_118 = asint(x_10[2].x);
-    const int x_121 = asint(x_10[2].x);
-    const int x_124 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_115), float(x_118), float(x_121), float(x_124));
-  } else {
-    const float x_128 = asfloat(x_6[5].x);
-    x_GLF_color = float4(x_128, x_128, x_128, x_128);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1f130ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[7];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 v1 = 0.0f;
-  float E = 0.0f;
-  bool x_75 = false;
-  bool x_92 = false;
-  bool x_109 = false;
-  bool x_76_phi = false;
-  bool x_93_phi = false;
-  bool x_110_phi = false;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = pack_float_to_unorm2x16(float2(x_41, x_43));
-  uint const x_46 = a;
-  v1 = unpack_snorm4x8_to_float(x_46);
-  E = 0.01f;
-  int const x_49 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  float const x_51 = v1[x_49];
-  float const x_53 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_55 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_59 = E;
-  bool const x_60 = (fabs((x_51 - (x_53 / x_55))) < x_59);
-  x_76_phi = x_60;
-  if (x_60) {
-    int const x_64 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_66 = v1[x_64];
-    float const x_68 = x_6.x_GLF_uniform_float_values.arr[4].el;
-    float const x_70 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_74 = E;
-    x_75 = (fabs((x_66 - (x_68 / x_70))) < x_74);
-    x_76_phi = x_75;
-  }
-  bool const x_76 = x_76_phi;
-  x_93_phi = x_76;
-  if (x_76) {
-    int const x_80 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_82 = v1[x_80];
-    float const x_84 = x_6.x_GLF_uniform_float_values.arr[5].el;
-    float const x_87 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_91 = E;
-    x_92 = (fabs((x_82 - (-(x_84) / x_87))) < x_91);
-    x_93_phi = x_92;
-  }
-  bool const x_93 = x_93_phi;
-  x_110_phi = x_93;
-  if (x_93) {
-    int const x_97 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_99 = v1[x_97];
-    float const x_101 = x_6.x_GLF_uniform_float_values.arr[6].el;
-    float const x_104 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_108 = E;
-    x_109 = (fabs((x_99 - (-(x_101) / x_104))) < x_108);
-    x_110_phi = x_109;
-  }
-  bool const x_110 = x_110_phi;
-  if (x_110) {
-    int const x_115 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_118 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_121 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_124 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_115), float(x_118), float(x_121), float(x_124));
-  } else {
-    float const x_128 = x_6.x_GLF_uniform_float_values.arr[5].el;
-    *(tint_symbol_3) = float4(x_128, x_128, x_128, x_128);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 7997003..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,236 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 158
-; Schema: 0
-               OpCapability Shader
-         %50 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %E "E"
-               OpName %x_75 "x_75"
-               OpName %x_92 "x_92"
-               OpName %x_109 "x_109"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_110_phi "x_110_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_7 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_7 = OpConstant %uint 7
-%_arr_float_uint_7 = OpTypeArray %float %uint_7
-       %buf1 = OpTypeStruct %_arr_float_uint_7
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %26 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %35 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-    %v2float = OpTypeVector %float 2
-%float_0_00999999978 = OpConstant %float 0.00999999978
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-   %main_out = OpTypeStruct %v4float
-        %147 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %26
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %E = OpVariable %_ptr_Function_float Function %31
-       %x_75 = OpVariable %_ptr_Function_bool Function %35
-       %x_92 = OpVariable %_ptr_Function_bool Function %35
-      %x_109 = OpVariable %_ptr_Function_bool Function %35
-   %x_76_phi = OpVariable %_ptr_Function_bool Function %35
-   %x_93_phi = OpVariable %_ptr_Function_bool Function %35
-  %x_110_phi = OpVariable %_ptr_Function_bool Function %35
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %52 = OpCompositeConstruct %v2float %45 %48
-         %49 = OpExtInst %uint %50 PackUnorm2x16 %52
-               OpStore %a %49
-         %53 = OpLoad %uint %a
-         %54 = OpExtInst %v4float %50 UnpackSnorm4x8 %53
-               OpStore %v1 %54
-               OpStore %E %float_0_00999999978
-         %58 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Function_float %v1 %59
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %66 = OpLoad %float %65
-         %67 = OpLoad %float %E
-         %69 = OpFDiv %float %63 %66
-         %70 = OpFSub %float %61 %69
-         %68 = OpExtInst %float %50 FAbs %70
-         %71 = OpFOrdLessThan %bool %68 %67
-               OpStore %x_76_phi %71
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_float %v1 %75
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %80 = OpLoad %float %79
-         %81 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %82 = OpLoad %float %81
-         %83 = OpLoad %float %E
-         %85 = OpFDiv %float %80 %82
-         %86 = OpFSub %float %77 %85
-         %84 = OpExtInst %float %50 FAbs %86
-         %87 = OpFOrdLessThan %bool %84 %83
-               OpStore %x_75 %87
-         %88 = OpLoad %bool %x_75
-               OpStore %x_76_phi %88
-               OpBranch %72
-         %72 = OpLabel
-         %89 = OpLoad %bool %x_76_phi
-               OpStore %x_93_phi %89
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %93 = OpLoad %int %92
-         %94 = OpAccessChain %_ptr_Function_float %v1 %93
-         %95 = OpLoad %float %94
-         %97 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_5
-         %98 = OpLoad %float %97
-         %99 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %100 = OpLoad %float %99
-        %101 = OpLoad %float %E
-        %103 = OpFNegate %float %98
-        %104 = OpFDiv %float %103 %100
-        %105 = OpFSub %float %95 %104
-        %102 = OpExtInst %float %50 FAbs %105
-        %106 = OpFOrdLessThan %bool %102 %101
-               OpStore %x_92 %106
-        %107 = OpLoad %bool %x_92
-               OpStore %x_93_phi %107
-               OpBranch %90
-         %90 = OpLabel
-        %108 = OpLoad %bool %x_93_phi
-               OpStore %x_110_phi %108
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %109
-        %110 = OpLabel
-        %111 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %112 = OpLoad %int %111
-        %113 = OpAccessChain %_ptr_Function_float %v1 %112
-        %114 = OpLoad %float %113
-        %116 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_6
-        %117 = OpLoad %float %116
-        %118 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %119 = OpLoad %float %118
-        %120 = OpLoad %float %E
-        %122 = OpFNegate %float %117
-        %123 = OpFDiv %float %122 %119
-        %124 = OpFSub %float %114 %123
-        %121 = OpExtInst %float %50 FAbs %124
-        %125 = OpFOrdLessThan %bool %121 %120
-               OpStore %x_109 %125
-        %126 = OpLoad %bool %x_109
-               OpStore %x_110_phi %126
-               OpBranch %109
-        %109 = OpLabel
-        %127 = OpLoad %bool %x_110_phi
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-        %131 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %132 = OpLoad %int %131
-        %133 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %134 = OpLoad %int %133
-        %135 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %136 = OpLoad %int %135
-        %137 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %138 = OpLoad %int %137
-        %139 = OpConvertSToF %float %132
-        %140 = OpConvertSToF %float %134
-        %141 = OpConvertSToF %float %136
-        %142 = OpConvertSToF %float %138
-        %143 = OpCompositeConstruct %v4float %139 %140 %141 %142
-               OpStore %x_GLF_color %143
-               OpBranch %128
-        %130 = OpLabel
-        %144 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_5
-        %145 = OpLoad %float %144
-        %146 = OpCompositeConstruct %v4float %145 %145 %145 %145
-               OpStore %x_GLF_color %146
-               OpBranch %128
-        %128 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %147
-        %150 = OpLabel
-        %151 = OpFunctionCall %void %main_1
-        %152 = OpLoad %v4float %x_GLF_color
-        %153 = OpCompositeConstruct %main_out %152
-               OpReturnValue %153
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %155 = OpLabel
-        %156 = OpFunctionCall %main_out %main_inner
-        %157 = OpCompositeExtract %v4float %156 0
-               OpStore %x_GLF_color_1_1 %157
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 47774e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,98 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 7>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var v1 : vec4<f32>;
-  var E : f32;
-  var x_75 : bool;
-  var x_92 : bool;
-  var x_109 : bool;
-  var x_76_phi : bool;
-  var x_93_phi : bool;
-  var x_110_phi : bool;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = pack2x16unorm(vec2<f32>(x_41, x_43));
-  let x_46 : u32 = a;
-  v1 = unpack4x8snorm(x_46);
-  E = 0.01;
-  let x_49 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_51 : f32 = v1[x_49];
-  let x_53 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_55 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_59 : f32 = E;
-  let x_60 : bool = (abs((x_51 - (x_53 / x_55))) < x_59);
-  x_76_phi = x_60;
-  if (x_60) {
-    let x_64 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_66 : f32 = v1[x_64];
-    let x_68 : f32 = x_6.x_GLF_uniform_float_values[4];
-    let x_70 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_74 : f32 = E;
-    x_75 = (abs((x_66 - (x_68 / x_70))) < x_74);
-    x_76_phi = x_75;
-  }
-  let x_76 : bool = x_76_phi;
-  x_93_phi = x_76;
-  if (x_76) {
-    let x_80 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_82 : f32 = v1[x_80];
-    let x_84 : f32 = x_6.x_GLF_uniform_float_values[5];
-    let x_87 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_91 : f32 = E;
-    x_92 = (abs((x_82 - (-(x_84) / x_87))) < x_91);
-    x_93_phi = x_92;
-  }
-  let x_93 : bool = x_93_phi;
-  x_110_phi = x_93;
-  if (x_93) {
-    let x_97 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_99 : f32 = v1[x_97];
-    let x_101 : f32 = x_6.x_GLF_uniform_float_values[6];
-    let x_104 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_108 : f32 = E;
-    x_109 = (abs((x_99 - (-(x_101) / x_104))) < x_108);
-    x_110_phi = x_109;
-  }
-  let x_110 : bool = x_110_phi;
-  if (x_110) {
-    let x_115 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_118 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_121 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_124 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_115), f32(x_118), f32(x_121), f32(x_124));
-  } else {
-    let x_128 : f32 = x_6.x_GLF_uniform_float_values[5];
-    x_GLF_color = vec4<f32>(x_128, x_128, x_128, x_128);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 03bab36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,102 +0,0 @@
-uint tint_pack2x16unorm(float2 param_0) {
-  uint2 i = uint2(round(clamp(param_0, 0.0, 1.0) * 65535.0));
-  return (i.x | i.y << 16);
-}
-
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[7];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float E = 0.0f;
-  bool x_75 = false;
-  bool x_92 = false;
-  bool x_109 = false;
-  bool x_76_phi = false;
-  bool x_93_phi = false;
-  bool x_110_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_43 = asfloat(x_6[1].x);
-  a = tint_pack2x16unorm(float2(x_41, x_43));
-  v1 = tint_unpack4x8snorm(a);
-  E = 0.01f;
-  const int x_49 = asint(x_10[2].x);
-  const float x_51 = v1[x_49];
-  const float x_53 = asfloat(x_6[2].x);
-  const float x_55 = asfloat(x_6[3].x);
-  const bool x_60 = (abs((x_51 - (x_53 / x_55))) < E);
-  x_76_phi = x_60;
-  if (x_60) {
-    const int x_64 = asint(x_10[1].x);
-    const float x_66 = v1[x_64];
-    const float x_68 = asfloat(x_6[4].x);
-    const float x_70 = asfloat(x_6[3].x);
-    x_75 = (abs((x_66 - (x_68 / x_70))) < E);
-    x_76_phi = x_75;
-  }
-  const bool x_76 = x_76_phi;
-  x_93_phi = x_76;
-  if (x_76) {
-    const int x_80 = asint(x_10[3].x);
-    const float x_82 = v1[x_80];
-    const float x_84 = asfloat(x_6[5].x);
-    const float x_87 = asfloat(x_6[3].x);
-    x_92 = (abs((x_82 - (-(x_84) / x_87))) < E);
-    x_93_phi = x_92;
-  }
-  const bool x_93 = x_93_phi;
-  x_110_phi = x_93;
-  if (x_93) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_97 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_99 = v1[x_97];
-    const float x_101 = asfloat(x_6[6].x);
-    const float x_104 = asfloat(x_6[3].x);
-    x_109 = (abs((x_99 - (-(x_101) / x_104))) < E);
-    x_110_phi = x_109;
-  }
-  if (x_110_phi) {
-    const int x_115 = asint(x_10[1].x);
-    const int x_118 = asint(x_10[2].x);
-    const int x_121 = asint(x_10[2].x);
-    const int x_124 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_115), float(x_118), float(x_121), float(x_124));
-  } else {
-    const float x_128 = asfloat(x_6[5].x);
-    x_GLF_color = float4(x_128, x_128, x_128, x_128);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1f130ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[7];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 v1 = 0.0f;
-  float E = 0.0f;
-  bool x_75 = false;
-  bool x_92 = false;
-  bool x_109 = false;
-  bool x_76_phi = false;
-  bool x_93_phi = false;
-  bool x_110_phi = false;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = pack_float_to_unorm2x16(float2(x_41, x_43));
-  uint const x_46 = a;
-  v1 = unpack_snorm4x8_to_float(x_46);
-  E = 0.01f;
-  int const x_49 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  float const x_51 = v1[x_49];
-  float const x_53 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_55 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_59 = E;
-  bool const x_60 = (fabs((x_51 - (x_53 / x_55))) < x_59);
-  x_76_phi = x_60;
-  if (x_60) {
-    int const x_64 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_66 = v1[x_64];
-    float const x_68 = x_6.x_GLF_uniform_float_values.arr[4].el;
-    float const x_70 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_74 = E;
-    x_75 = (fabs((x_66 - (x_68 / x_70))) < x_74);
-    x_76_phi = x_75;
-  }
-  bool const x_76 = x_76_phi;
-  x_93_phi = x_76;
-  if (x_76) {
-    int const x_80 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_82 = v1[x_80];
-    float const x_84 = x_6.x_GLF_uniform_float_values.arr[5].el;
-    float const x_87 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_91 = E;
-    x_92 = (fabs((x_82 - (-(x_84) / x_87))) < x_91);
-    x_93_phi = x_92;
-  }
-  bool const x_93 = x_93_phi;
-  x_110_phi = x_93;
-  if (x_93) {
-    int const x_97 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_99 = v1[x_97];
-    float const x_101 = x_6.x_GLF_uniform_float_values.arr[6].el;
-    float const x_104 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_108 = E;
-    x_109 = (fabs((x_99 - (-(x_101) / x_104))) < x_108);
-    x_110_phi = x_109;
-  }
-  bool const x_110 = x_110_phi;
-  if (x_110) {
-    int const x_115 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_118 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_121 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_124 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_115), float(x_118), float(x_121), float(x_124));
-  } else {
-    float const x_128 = x_6.x_GLF_uniform_float_values.arr[5].el;
-    *(tint_symbol_3) = float4(x_128, x_128, x_128, x_128);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 7997003..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,236 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 158
-; Schema: 0
-               OpCapability Shader
-         %50 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %E "E"
-               OpName %x_75 "x_75"
-               OpName %x_92 "x_92"
-               OpName %x_109 "x_109"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_110_phi "x_110_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_7 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_7 = OpConstant %uint 7
-%_arr_float_uint_7 = OpTypeArray %float %uint_7
-       %buf1 = OpTypeStruct %_arr_float_uint_7
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %26 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %35 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-    %v2float = OpTypeVector %float 2
-%float_0_00999999978 = OpConstant %float 0.00999999978
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-   %main_out = OpTypeStruct %v4float
-        %147 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %26
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %E = OpVariable %_ptr_Function_float Function %31
-       %x_75 = OpVariable %_ptr_Function_bool Function %35
-       %x_92 = OpVariable %_ptr_Function_bool Function %35
-      %x_109 = OpVariable %_ptr_Function_bool Function %35
-   %x_76_phi = OpVariable %_ptr_Function_bool Function %35
-   %x_93_phi = OpVariable %_ptr_Function_bool Function %35
-  %x_110_phi = OpVariable %_ptr_Function_bool Function %35
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %52 = OpCompositeConstruct %v2float %45 %48
-         %49 = OpExtInst %uint %50 PackUnorm2x16 %52
-               OpStore %a %49
-         %53 = OpLoad %uint %a
-         %54 = OpExtInst %v4float %50 UnpackSnorm4x8 %53
-               OpStore %v1 %54
-               OpStore %E %float_0_00999999978
-         %58 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Function_float %v1 %59
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %66 = OpLoad %float %65
-         %67 = OpLoad %float %E
-         %69 = OpFDiv %float %63 %66
-         %70 = OpFSub %float %61 %69
-         %68 = OpExtInst %float %50 FAbs %70
-         %71 = OpFOrdLessThan %bool %68 %67
-               OpStore %x_76_phi %71
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_float %v1 %75
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %80 = OpLoad %float %79
-         %81 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %82 = OpLoad %float %81
-         %83 = OpLoad %float %E
-         %85 = OpFDiv %float %80 %82
-         %86 = OpFSub %float %77 %85
-         %84 = OpExtInst %float %50 FAbs %86
-         %87 = OpFOrdLessThan %bool %84 %83
-               OpStore %x_75 %87
-         %88 = OpLoad %bool %x_75
-               OpStore %x_76_phi %88
-               OpBranch %72
-         %72 = OpLabel
-         %89 = OpLoad %bool %x_76_phi
-               OpStore %x_93_phi %89
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %93 = OpLoad %int %92
-         %94 = OpAccessChain %_ptr_Function_float %v1 %93
-         %95 = OpLoad %float %94
-         %97 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_5
-         %98 = OpLoad %float %97
-         %99 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %100 = OpLoad %float %99
-        %101 = OpLoad %float %E
-        %103 = OpFNegate %float %98
-        %104 = OpFDiv %float %103 %100
-        %105 = OpFSub %float %95 %104
-        %102 = OpExtInst %float %50 FAbs %105
-        %106 = OpFOrdLessThan %bool %102 %101
-               OpStore %x_92 %106
-        %107 = OpLoad %bool %x_92
-               OpStore %x_93_phi %107
-               OpBranch %90
-         %90 = OpLabel
-        %108 = OpLoad %bool %x_93_phi
-               OpStore %x_110_phi %108
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %109
-        %110 = OpLabel
-        %111 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %112 = OpLoad %int %111
-        %113 = OpAccessChain %_ptr_Function_float %v1 %112
-        %114 = OpLoad %float %113
-        %116 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_6
-        %117 = OpLoad %float %116
-        %118 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %119 = OpLoad %float %118
-        %120 = OpLoad %float %E
-        %122 = OpFNegate %float %117
-        %123 = OpFDiv %float %122 %119
-        %124 = OpFSub %float %114 %123
-        %121 = OpExtInst %float %50 FAbs %124
-        %125 = OpFOrdLessThan %bool %121 %120
-               OpStore %x_109 %125
-        %126 = OpLoad %bool %x_109
-               OpStore %x_110_phi %126
-               OpBranch %109
-        %109 = OpLabel
-        %127 = OpLoad %bool %x_110_phi
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-        %131 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %132 = OpLoad %int %131
-        %133 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %134 = OpLoad %int %133
-        %135 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %136 = OpLoad %int %135
-        %137 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %138 = OpLoad %int %137
-        %139 = OpConvertSToF %float %132
-        %140 = OpConvertSToF %float %134
-        %141 = OpConvertSToF %float %136
-        %142 = OpConvertSToF %float %138
-        %143 = OpCompositeConstruct %v4float %139 %140 %141 %142
-               OpStore %x_GLF_color %143
-               OpBranch %128
-        %130 = OpLabel
-        %144 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_5
-        %145 = OpLoad %float %144
-        %146 = OpCompositeConstruct %v4float %145 %145 %145 %145
-               OpStore %x_GLF_color %146
-               OpBranch %128
-        %128 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %147
-        %150 = OpLabel
-        %151 = OpFunctionCall %void %main_1
-        %152 = OpLoad %v4float %x_GLF_color
-        %153 = OpCompositeConstruct %main_out %152
-               OpReturnValue %153
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %155 = OpLabel
-        %156 = OpFunctionCall %main_out %main_inner
-        %157 = OpCompositeExtract %v4float %156 0
-               OpStore %x_GLF_color_1_1 %157
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 47774e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-pack-unpack/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,98 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 7>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var v1 : vec4<f32>;
-  var E : f32;
-  var x_75 : bool;
-  var x_92 : bool;
-  var x_109 : bool;
-  var x_76_phi : bool;
-  var x_93_phi : bool;
-  var x_110_phi : bool;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = pack2x16unorm(vec2<f32>(x_41, x_43));
-  let x_46 : u32 = a;
-  v1 = unpack4x8snorm(x_46);
-  E = 0.01;
-  let x_49 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_51 : f32 = v1[x_49];
-  let x_53 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_55 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_59 : f32 = E;
-  let x_60 : bool = (abs((x_51 - (x_53 / x_55))) < x_59);
-  x_76_phi = x_60;
-  if (x_60) {
-    let x_64 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_66 : f32 = v1[x_64];
-    let x_68 : f32 = x_6.x_GLF_uniform_float_values[4];
-    let x_70 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_74 : f32 = E;
-    x_75 = (abs((x_66 - (x_68 / x_70))) < x_74);
-    x_76_phi = x_75;
-  }
-  let x_76 : bool = x_76_phi;
-  x_93_phi = x_76;
-  if (x_76) {
-    let x_80 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_82 : f32 = v1[x_80];
-    let x_84 : f32 = x_6.x_GLF_uniform_float_values[5];
-    let x_87 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_91 : f32 = E;
-    x_92 = (abs((x_82 - (-(x_84) / x_87))) < x_91);
-    x_93_phi = x_92;
-  }
-  let x_93 : bool = x_93_phi;
-  x_110_phi = x_93;
-  if (x_93) {
-    let x_97 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_99 : f32 = v1[x_97];
-    let x_101 : f32 = x_6.x_GLF_uniform_float_values[6];
-    let x_104 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_108 : f32 = E;
-    x_109 = (abs((x_99 - (-(x_101) / x_104))) < x_108);
-    x_110_phi = x_109;
-  }
-  let x_110 : bool = x_110_phi;
-  if (x_110) {
-    let x_115 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_118 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_121 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_124 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_115), f32(x_118), f32(x_121), f32(x_124));
-  } else {
-    let x_128 : f32 = x_6.x_GLF_uniform_float_values[5];
-    x_GLF_color = vec4<f32>(x_128, x_128, x_128, x_128);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 44a81c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-
-void main_1() {
-  int i = 0;
-  const int x_34 = asint(x_6[2].x);
-  const float x_35 = float(x_34);
-  x_GLF_color = float4(x_35, x_35, x_35, x_35);
-  const float x_38 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_9[scalar_offset / 4][scalar_offset % 4]);
-  i = (1 << asuint(((x_38 >= x_40) ? 2 : 1)));
-  while (true) {
-    bool x_57 = false;
-    bool x_58_phi = false;
-    const int x_48 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const bool x_51 = (x_48 != x_50);
-    x_58_phi = x_51;
-    if (x_51) {
-      const int x_54 = i;
-      const int x_56 = asint(x_6[1].x);
-      x_57 = (x_54 < x_56);
-      x_58_phi = x_57;
-    }
-    if (x_58_phi) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_61 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_64 = asint(x_6[2].x);
-    const int x_67 = asint(x_6[2].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_70 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.msl
deleted file mode 100644
index bf79c4e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int const x_34 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_35 = float(x_34);
-  *(tint_symbol_3) = float4(x_35, x_35, x_35, x_35);
-  float const x_38 = (*(tint_symbol_4)).y;
-  float const x_40 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  i = as_type<int>((as_type<uint>(1) << as_type<uint>(select(1, 2, (x_38 >= x_40)))));
-  while (true) {
-    bool x_57 = false;
-    bool x_58_phi = false;
-    int const x_48 = i;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    bool const x_51 = (x_48 != x_50);
-    x_58_phi = x_51;
-    if (x_51) {
-      int const x_54 = i;
-      int const x_56 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      x_57 = (x_54 < x_56);
-      x_58_phi = x_57;
-    }
-    bool const x_58 = x_58_phi;
-    if (x_58) {
-    } else {
-      break;
-    }
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_70 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-    {
-      int const x_73 = i;
-      i = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_9, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 01257e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,170 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 101
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %x_57 "x_57"
-               OpName %x_58_phi "x_58_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %56 = OpConstantNull %bool
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %29
-       %x_57 = OpVariable %_ptr_Function_bool Function %56
-   %x_58_phi = OpVariable %_ptr_Function_bool Function %56
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %34 = OpLoad %int %33
-         %35 = OpConvertSToF %float %34
-         %36 = OpCompositeConstruct %v4float %35 %35 %35 %35
-               OpStore %x_GLF_color %36
-         %38 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %39 = OpLoad %float %38
-         %42 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %47 = OpFOrdGreaterThanEqual %bool %39 %43
-         %46 = OpSelect %int %47 %int_2 %int_1
-         %45 = OpBitcast %uint %46
-         %49 = OpShiftLeftLogical %int %int_1 %45
-               OpStore %i %49
-               OpBranch %50
-         %50 = OpLabel
-               OpLoopMerge %51 %52 None
-               OpBranch %53
-         %53 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %60 = OpLoad %int %59
-         %61 = OpINotEqual %bool %58 %60
-               OpStore %x_58_phi %61
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpSLessThan %bool %64 %66
-               OpStore %x_57 %67
-         %68 = OpLoad %bool %x_57
-               OpStore %x_58_phi %68
-               OpBranch %62
-         %62 = OpLabel
-         %69 = OpLoad %bool %x_58_phi
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %51
-         %70 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpConvertSToF %float %74
-         %82 = OpConvertSToF %float %76
-         %83 = OpConvertSToF %float %78
-         %84 = OpConvertSToF %float %80
-         %85 = OpCompositeConstruct %v4float %81 %82 %83 %84
-               OpStore %x_GLF_color %85
-               OpBranch %52
-         %52 = OpLabel
-         %86 = OpLoad %int %i
-         %87 = OpIAdd %int %86 %int_1
-               OpStore %i %87
-               OpBranch %50
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %92 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %93 = OpFunctionCall %void %main_1
-         %94 = OpLoad %v4float %x_GLF_color
-         %95 = OpCompositeConstruct %main_out %94
-               OpReturnValue %95
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %97 = OpLabel
-         %99 = OpLoad %v4float %gl_FragCoord_param_1
-         %98 = OpFunctionCall %main_out %main_inner %99
-        %100 = OpCompositeExtract %v4float %98 0
-               OpStore %x_GLF_color_1_1 %100
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ad9faee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,73 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-fn main_1() {
-  var i : i32;
-  let x_34 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_35 : f32 = f32(x_34);
-  x_GLF_color = vec4<f32>(x_35, x_35, x_35, x_35);
-  let x_38 : f32 = gl_FragCoord.y;
-  let x_40 : f32 = x_9.x_GLF_uniform_float_values[0];
-  i = (1 << bitcast<u32>(select(1, 2, (x_38 >= x_40))));
-  loop {
-    var x_57 : bool;
-    var x_58_phi : bool;
-    let x_48 : i32 = i;
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_51 : bool = (x_48 != x_50);
-    x_58_phi = x_51;
-    if (x_51) {
-      let x_54 : i32 = i;
-      let x_56 : i32 = x_6.x_GLF_uniform_int_values[1];
-      x_57 = (x_54 < x_56);
-      x_58_phi = x_57;
-    }
-    let x_58 : bool = x_58_phi;
-    if (x_58) {
-    } else {
-      break;
-    }
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_70 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_61), f32(x_64), f32(x_67), f32(x_70));
-
-    continuing {
-      let x_73 : i32 = i;
-      i = (x_73 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 44a81c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-
-void main_1() {
-  int i = 0;
-  const int x_34 = asint(x_6[2].x);
-  const float x_35 = float(x_34);
-  x_GLF_color = float4(x_35, x_35, x_35, x_35);
-  const float x_38 = gl_FragCoord.y;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_9[scalar_offset / 4][scalar_offset % 4]);
-  i = (1 << asuint(((x_38 >= x_40) ? 2 : 1)));
-  while (true) {
-    bool x_57 = false;
-    bool x_58_phi = false;
-    const int x_48 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const bool x_51 = (x_48 != x_50);
-    x_58_phi = x_51;
-    if (x_51) {
-      const int x_54 = i;
-      const int x_56 = asint(x_6[1].x);
-      x_57 = (x_54 < x_56);
-      x_58_phi = x_57;
-    }
-    if (x_58_phi) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_61 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_64 = asint(x_6[2].x);
-    const int x_67 = asint(x_6[2].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_70 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.msl
deleted file mode 100644
index bf79c4e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int const x_34 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_35 = float(x_34);
-  *(tint_symbol_3) = float4(x_35, x_35, x_35, x_35);
-  float const x_38 = (*(tint_symbol_4)).y;
-  float const x_40 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  i = as_type<int>((as_type<uint>(1) << as_type<uint>(select(1, 2, (x_38 >= x_40)))));
-  while (true) {
-    bool x_57 = false;
-    bool x_58_phi = false;
-    int const x_48 = i;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    bool const x_51 = (x_48 != x_50);
-    x_58_phi = x_51;
-    if (x_51) {
-      int const x_54 = i;
-      int const x_56 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      x_57 = (x_54 < x_56);
-      x_58_phi = x_57;
-    }
-    bool const x_58 = x_58_phi;
-    if (x_58) {
-    } else {
-      break;
-    }
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_70 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_61), float(x_64), float(x_67), float(x_70));
-    {
-      int const x_73 = i;
-      i = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_9, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 01257e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,170 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 101
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %x_57 "x_57"
-               OpName %x_58_phi "x_58_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %56 = OpConstantNull %bool
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %29
-       %x_57 = OpVariable %_ptr_Function_bool Function %56
-   %x_58_phi = OpVariable %_ptr_Function_bool Function %56
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %34 = OpLoad %int %33
-         %35 = OpConvertSToF %float %34
-         %36 = OpCompositeConstruct %v4float %35 %35 %35 %35
-               OpStore %x_GLF_color %36
-         %38 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %39 = OpLoad %float %38
-         %42 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %47 = OpFOrdGreaterThanEqual %bool %39 %43
-         %46 = OpSelect %int %47 %int_2 %int_1
-         %45 = OpBitcast %uint %46
-         %49 = OpShiftLeftLogical %int %int_1 %45
-               OpStore %i %49
-               OpBranch %50
-         %50 = OpLabel
-               OpLoopMerge %51 %52 None
-               OpBranch %53
-         %53 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %60 = OpLoad %int %59
-         %61 = OpINotEqual %bool %58 %60
-               OpStore %x_58_phi %61
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpSLessThan %bool %64 %66
-               OpStore %x_57 %67
-         %68 = OpLoad %bool %x_57
-               OpStore %x_58_phi %68
-               OpBranch %62
-         %62 = OpLabel
-         %69 = OpLoad %bool %x_58_phi
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %51
-         %70 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpConvertSToF %float %74
-         %82 = OpConvertSToF %float %76
-         %83 = OpConvertSToF %float %78
-         %84 = OpConvertSToF %float %80
-         %85 = OpCompositeConstruct %v4float %81 %82 %83 %84
-               OpStore %x_GLF_color %85
-               OpBranch %52
-         %52 = OpLabel
-         %86 = OpLoad %int %i
-         %87 = OpIAdd %int %86 %int_1
-               OpStore %i %87
-               OpBranch %50
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %92 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %93 = OpFunctionCall %void %main_1
-         %94 = OpLoad %v4float %x_GLF_color
-         %95 = OpCompositeConstruct %main_out %94
-               OpReturnValue %95
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %97 = OpLabel
-         %99 = OpLoad %v4float %gl_FragCoord_param_1
-         %98 = OpFunctionCall %main_out %main_inner %99
-        %100 = OpCompositeExtract %v4float %98 0
-               OpStore %x_GLF_color_1_1 %100
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ad9faee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-left-shift-for/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,73 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-fn main_1() {
-  var i : i32;
-  let x_34 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_35 : f32 = f32(x_34);
-  x_GLF_color = vec4<f32>(x_35, x_35, x_35, x_35);
-  let x_38 : f32 = gl_FragCoord.y;
-  let x_40 : f32 = x_9.x_GLF_uniform_float_values[0];
-  i = (1 << bitcast<u32>(select(1, 2, (x_38 >= x_40))));
-  loop {
-    var x_57 : bool;
-    var x_58_phi : bool;
-    let x_48 : i32 = i;
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_51 : bool = (x_48 != x_50);
-    x_58_phi = x_51;
-    if (x_51) {
-      let x_54 : i32 = i;
-      let x_56 : i32 = x_6.x_GLF_uniform_int_values[1];
-      x_57 = (x_54 < x_56);
-      x_58_phi = x_57;
-    }
-    let x_58 : bool = x_58_phi;
-    if (x_58) {
-    } else {
-      break;
-    }
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_70 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_61), f32(x_64), f32(x_67), f32(x_70));
-
-    continuing {
-      let x_73 : i32 = i;
-      i = (x_73 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2529a97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,100 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int A[2] = (int[2])0;
-  int i = 0;
-  int a = 0;
-  float2 v1 = float2(0.0f, 0.0f);
-  float2 v2 = float2(0.0f, 0.0f);
-  int b = 0;
-  const int x_46 = asint(x_6[2].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_48 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  A[x_46] = x_48;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_51 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_53 = asint(x_6[1].x);
-  A[x_51] = x_53;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_56 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  i = x_56;
-  while (true) {
-    const int x_61 = i;
-    const int x_63 = asint(x_6[2].x);
-    if ((x_61 > x_63)) {
-    } else {
-      break;
-    }
-    i = (i - 1);
-  }
-  const float x_69 = asfloat(x_10[1].x);
-  const float x_71 = asfloat(x_10[1].x);
-  const int x_76 = A[((x_69 >= x_71) ? 1 : i)];
-  a = x_76;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_78 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_80 = a;
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_84 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const int x_87 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const float x_91 = asfloat(x_10[1].x);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const float x_93 = asfloat(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  v1 = (bool2((x_91 < x_93), true) ? float2(float(x_84), float(x_87)) : float2(float(x_78), float(x_80)));
-  const int x_98 = asint(x_6[2].x);
-  const float x_100 = v1[x_98];
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const int x_103 = asint(x_6[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  const float x_105 = v1[x_103];
-  v2 = (bool2(false, false) ? float2(x_105, x_105) : float2(x_100, x_100));
-  const int x_109 = asint(x_6[1].x);
-  const float x_110 = float(x_109);
-  const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-  const int x_113 = asint(x_6[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-  const float x_114 = float(x_113);
-  const int x_121 = A[int(clamp(float2(x_110, x_110), float2(x_114, x_114), v2).x)];
-  b = x_121;
-  const int x_122 = b;
-  const int x_124 = asint(x_6[1].x);
-  if ((x_122 == x_124)) {
-    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-    const int x_130 = asint(x_6[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-    const int x_133 = asint(x_6[2].x);
-    const int x_136 = asint(x_6[2].x);
-    const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-    const int x_139 = asint(x_6[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-    x_GLF_color = float4(float(x_130), float(x_133), float(x_136), float(x_139));
-  } else {
-    const int x_143 = asint(x_6[2].x);
-    const float x_144 = float(x_143);
-    x_GLF_color = float4(x_144, x_144, x_144, x_144);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.msl
deleted file mode 100644
index 30dd489..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 A = {};
-  int i = 0;
-  int a = 0;
-  float2 v1 = 0.0f;
-  float2 v2 = 0.0f;
-  int b = 0;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  A.arr[x_46] = x_48;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  A.arr[x_51] = x_53;
-  int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i = x_56;
-  while (true) {
-    int const x_61 = i;
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_61 > x_63)) {
-    } else {
-      break;
-    }
-    int const x_66 = i;
-    i = as_type<int>((as_type<uint>(x_66) - as_type<uint>(1)));
-  }
-  float const x_69 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  float const x_71 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  int const x_73 = i;
-  int const x_76 = A.arr[select(x_73, 1, (x_69 >= x_71))];
-  a = x_76;
-  int const x_78 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_80 = a;
-  int const x_84 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_87 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_91 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  float const x_93 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  v1 = select(float2(float(x_78), float(x_80)), float2(float(x_84), float(x_87)), bool2((x_91 < x_93), true));
-  int const x_98 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_100 = v1[x_98];
-  int const x_103 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_105 = v1[x_103];
-  v2 = select(float2(x_100, x_100), float2(x_105, x_105), bool2(false, false));
-  int const x_109 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_110 = float(x_109);
-  int const x_113 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_114 = float(x_113);
-  float2 const x_116 = v2;
-  int const x_121 = A.arr[int(clamp(float2(x_110, x_110), float2(x_114, x_114), x_116).x)];
-  b = x_121;
-  int const x_122 = b;
-  int const x_124 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_122 == x_124)) {
-    int const x_130 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_133 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_136 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_139 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_130), float(x_133), float(x_136), float(x_139));
-  } else {
-    int const x_143 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_144 = float(x_143);
-    *(tint_symbol_3) = float4(x_144, x_144, x_144, x_144);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index bb68672..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,237 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 165
-; Schema: 0
-               OpCapability Shader
-        %124 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %A "A"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %27 = OpConstantNull %_arr_int_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %35 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-        %112 = OpConstantComposite %v2bool %false %false
-   %main_out = OpTypeStruct %v4float
-        %154 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_int_uint_2 Function %27
-          %i = OpVariable %_ptr_Function_int Function %30
-          %a = OpVariable %_ptr_Function_int Function %30
-         %v1 = OpVariable %_ptr_Function_v2float Function %35
-         %v2 = OpVariable %_ptr_Function_v2float Function %35
-          %b = OpVariable %_ptr_Function_int Function %30
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %42 = OpLoad %int %41
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Function_int %A %42
-               OpStore %46 %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Function_int %A %48
-               OpStore %52 %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %54 = OpLoad %int %53
-               OpStore %i %54
-               OpBranch %55
-         %55 = OpLabel
-               OpLoopMerge %56 %57 None
-               OpBranch %58
-         %58 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %61 = OpLoad %int %60
-         %62 = OpSGreaterThan %bool %59 %61
-               OpSelectionMerge %64 None
-               OpBranchConditional %62 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %56
-         %64 = OpLabel
-         %67 = OpLoad %int %i
-         %68 = OpISub %int %67 %int_1
-               OpStore %i %68
-               OpBranch %57
-         %57 = OpLabel
-               OpBranch %55
-         %56 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %73 = OpLoad %float %72
-         %74 = OpLoad %int %i
-         %76 = OpFOrdGreaterThanEqual %bool %71 %73
-         %75 = OpSelect %int %76 %int_1 %74
-         %77 = OpAccessChain %_ptr_Function_int %A %75
-         %78 = OpLoad %int %77
-               OpStore %a %78
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpLoad %int %a
-         %82 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %89 = OpLoad %float %88
-         %92 = OpFOrdLessThan %bool %87 %89
-         %94 = OpCompositeConstruct %v2bool %92 %true
-         %95 = OpConvertSToF %float %83
-         %96 = OpConvertSToF %float %85
-         %97 = OpCompositeConstruct %v2float %95 %96
-         %98 = OpConvertSToF %float %80
-         %99 = OpConvertSToF %float %81
-        %100 = OpCompositeConstruct %v2float %98 %99
-         %90 = OpSelect %v2float %94 %97 %100
-               OpStore %v1 %90
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %102 = OpLoad %int %101
-        %104 = OpAccessChain %_ptr_Function_float %v1 %102
-        %105 = OpLoad %float %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Function_float %v1 %107
-        %109 = OpLoad %float %108
-        %113 = OpCompositeConstruct %v2float %109 %109
-        %114 = OpCompositeConstruct %v2float %105 %105
-        %110 = OpSelect %v2float %112 %113 %114
-               OpStore %v2 %110
-        %115 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %119
-        %121 = OpLoad %v2float %v2
-        %125 = OpCompositeConstruct %v2float %117 %117
-        %126 = OpCompositeConstruct %v2float %120 %120
-        %123 = OpExtInst %v2float %124 NClamp %125 %126 %121
-        %127 = OpCompositeExtract %float %123 0
-        %122 = OpConvertFToS %int %127
-        %128 = OpAccessChain %_ptr_Function_int %A %122
-        %129 = OpLoad %int %128
-               OpStore %b %129
-        %130 = OpLoad %int %b
-        %131 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %132 = OpLoad %int %131
-        %133 = OpIEqual %bool %130 %132
-               OpSelectionMerge %134 None
-               OpBranchConditional %133 %135 %136
-        %135 = OpLabel
-        %137 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %138 = OpLoad %int %137
-        %139 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %140 = OpLoad %int %139
-        %141 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %142 = OpLoad %int %141
-        %143 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %144 = OpLoad %int %143
-        %145 = OpConvertSToF %float %138
-        %146 = OpConvertSToF %float %140
-        %147 = OpConvertSToF %float %142
-        %148 = OpConvertSToF %float %144
-        %149 = OpCompositeConstruct %v4float %145 %146 %147 %148
-               OpStore %x_GLF_color %149
-               OpBranch %134
-        %136 = OpLabel
-        %150 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %151 = OpLoad %int %150
-        %152 = OpConvertSToF %float %151
-        %153 = OpCompositeConstruct %v4float %152 %152 %152 %152
-               OpStore %x_GLF_color %153
-               OpBranch %134
-        %134 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %154
-        %157 = OpLabel
-        %158 = OpFunctionCall %void %main_1
-        %159 = OpLoad %v4float %x_GLF_color
-        %160 = OpCompositeConstruct %main_out %159
-               OpReturnValue %160
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %162 = OpLabel
-        %163 = OpFunctionCall %main_out %main_inner
-        %164 = OpCompositeExtract %v4float %163 0
-               OpStore %x_GLF_color_1_1 %164
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 591926d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,95 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A : array<i32, 2>;
-  var i : i32;
-  var a : i32;
-  var v1 : vec2<f32>;
-  var v2 : vec2<f32>;
-  var b : i32;
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[0];
-  A[x_46] = x_48;
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-  A[x_51] = x_53;
-  let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i = x_56;
-  loop {
-    let x_61 : i32 = i;
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_61 > x_63)) {
-    } else {
-      break;
-    }
-    let x_66 : i32 = i;
-    i = (x_66 - 1);
-  }
-  let x_69 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_71 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_73 : i32 = i;
-  let x_76 : i32 = A[select(x_73, 1, (x_69 >= x_71))];
-  a = x_76;
-  let x_78 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_80 : i32 = a;
-  let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_87 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_91 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_93 : f32 = x_10.x_GLF_uniform_float_values[0];
-  v1 = select(vec2<f32>(f32(x_78), f32(x_80)), vec2<f32>(f32(x_84), f32(x_87)), vec2<bool>((x_91 < x_93), true));
-  let x_98 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_100 : f32 = v1[x_98];
-  let x_103 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_105 : f32 = v1[x_103];
-  v2 = select(vec2<f32>(x_100, x_100), vec2<f32>(x_105, x_105), vec2<bool>(false, false));
-  let x_109 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_110 : f32 = f32(x_109);
-  let x_113 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_114 : f32 = f32(x_113);
-  let x_116 : vec2<f32> = v2;
-  let x_121 : i32 = A[i32(clamp(vec2<f32>(x_110, x_110), vec2<f32>(x_114, x_114), x_116).x)];
-  b = x_121;
-  let x_122 : i32 = b;
-  let x_124 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_122 == x_124)) {
-    let x_130 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_133 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_136 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_139 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_130), f32(x_133), f32(x_136), f32(x_139));
-  } else {
-    let x_143 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_144 : f32 = f32(x_143);
-    x_GLF_color = vec4<f32>(x_144, x_144, x_144, x_144);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 2529a97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,100 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int A[2] = (int[2])0;
-  int i = 0;
-  int a = 0;
-  float2 v1 = float2(0.0f, 0.0f);
-  float2 v2 = float2(0.0f, 0.0f);
-  int b = 0;
-  const int x_46 = asint(x_6[2].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_48 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  A[x_46] = x_48;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_51 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const int x_53 = asint(x_6[1].x);
-  A[x_51] = x_53;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_56 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  i = x_56;
-  while (true) {
-    const int x_61 = i;
-    const int x_63 = asint(x_6[2].x);
-    if ((x_61 > x_63)) {
-    } else {
-      break;
-    }
-    i = (i - 1);
-  }
-  const float x_69 = asfloat(x_10[1].x);
-  const float x_71 = asfloat(x_10[1].x);
-  const int x_76 = A[((x_69 >= x_71) ? 1 : i)];
-  a = x_76;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_78 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_80 = a;
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_84 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const int x_87 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const float x_91 = asfloat(x_10[1].x);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const float x_93 = asfloat(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  v1 = (bool2((x_91 < x_93), true) ? float2(float(x_84), float(x_87)) : float2(float(x_78), float(x_80)));
-  const int x_98 = asint(x_6[2].x);
-  const float x_100 = v1[x_98];
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const int x_103 = asint(x_6[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  const float x_105 = v1[x_103];
-  v2 = (bool2(false, false) ? float2(x_105, x_105) : float2(x_100, x_100));
-  const int x_109 = asint(x_6[1].x);
-  const float x_110 = float(x_109);
-  const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-  const int x_113 = asint(x_6[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-  const float x_114 = float(x_113);
-  const int x_121 = A[int(clamp(float2(x_110, x_110), float2(x_114, x_114), v2).x)];
-  b = x_121;
-  const int x_122 = b;
-  const int x_124 = asint(x_6[1].x);
-  if ((x_122 == x_124)) {
-    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-    const int x_130 = asint(x_6[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-    const int x_133 = asint(x_6[2].x);
-    const int x_136 = asint(x_6[2].x);
-    const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-    const int x_139 = asint(x_6[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-    x_GLF_color = float4(float(x_130), float(x_133), float(x_136), float(x_139));
-  } else {
-    const int x_143 = asint(x_6[2].x);
-    const float x_144 = float(x_143);
-    x_GLF_color = float4(x_144, x_144, x_144, x_144);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.msl
deleted file mode 100644
index 30dd489..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 A = {};
-  int i = 0;
-  int a = 0;
-  float2 v1 = 0.0f;
-  float2 v2 = 0.0f;
-  int b = 0;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  A.arr[x_46] = x_48;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  A.arr[x_51] = x_53;
-  int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i = x_56;
-  while (true) {
-    int const x_61 = i;
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_61 > x_63)) {
-    } else {
-      break;
-    }
-    int const x_66 = i;
-    i = as_type<int>((as_type<uint>(x_66) - as_type<uint>(1)));
-  }
-  float const x_69 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  float const x_71 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  int const x_73 = i;
-  int const x_76 = A.arr[select(x_73, 1, (x_69 >= x_71))];
-  a = x_76;
-  int const x_78 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_80 = a;
-  int const x_84 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_87 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_91 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  float const x_93 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  v1 = select(float2(float(x_78), float(x_80)), float2(float(x_84), float(x_87)), bool2((x_91 < x_93), true));
-  int const x_98 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_100 = v1[x_98];
-  int const x_103 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_105 = v1[x_103];
-  v2 = select(float2(x_100, x_100), float2(x_105, x_105), bool2(false, false));
-  int const x_109 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_110 = float(x_109);
-  int const x_113 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_114 = float(x_113);
-  float2 const x_116 = v2;
-  int const x_121 = A.arr[int(clamp(float2(x_110, x_110), float2(x_114, x_114), x_116).x)];
-  b = x_121;
-  int const x_122 = b;
-  int const x_124 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_122 == x_124)) {
-    int const x_130 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_133 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_136 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_139 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_130), float(x_133), float(x_136), float(x_139));
-  } else {
-    int const x_143 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_144 = float(x_143);
-    *(tint_symbol_3) = float4(x_144, x_144, x_144, x_144);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index bb68672..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,237 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 165
-; Schema: 0
-               OpCapability Shader
-        %124 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %A "A"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %27 = OpConstantNull %_arr_int_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %35 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %v2bool = OpTypeVector %bool 2
-       %true = OpConstantTrue %bool
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-        %112 = OpConstantComposite %v2bool %false %false
-   %main_out = OpTypeStruct %v4float
-        %154 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_int_uint_2 Function %27
-          %i = OpVariable %_ptr_Function_int Function %30
-          %a = OpVariable %_ptr_Function_int Function %30
-         %v1 = OpVariable %_ptr_Function_v2float Function %35
-         %v2 = OpVariable %_ptr_Function_v2float Function %35
-          %b = OpVariable %_ptr_Function_int Function %30
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %42 = OpLoad %int %41
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Function_int %A %42
-               OpStore %46 %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Function_int %A %48
-               OpStore %52 %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %54 = OpLoad %int %53
-               OpStore %i %54
-               OpBranch %55
-         %55 = OpLabel
-               OpLoopMerge %56 %57 None
-               OpBranch %58
-         %58 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %61 = OpLoad %int %60
-         %62 = OpSGreaterThan %bool %59 %61
-               OpSelectionMerge %64 None
-               OpBranchConditional %62 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %56
-         %64 = OpLabel
-         %67 = OpLoad %int %i
-         %68 = OpISub %int %67 %int_1
-               OpStore %i %68
-               OpBranch %57
-         %57 = OpLabel
-               OpBranch %55
-         %56 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %73 = OpLoad %float %72
-         %74 = OpLoad %int %i
-         %76 = OpFOrdGreaterThanEqual %bool %71 %73
-         %75 = OpSelect %int %76 %int_1 %74
-         %77 = OpAccessChain %_ptr_Function_int %A %75
-         %78 = OpLoad %int %77
-               OpStore %a %78
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpLoad %int %a
-         %82 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %89 = OpLoad %float %88
-         %92 = OpFOrdLessThan %bool %87 %89
-         %94 = OpCompositeConstruct %v2bool %92 %true
-         %95 = OpConvertSToF %float %83
-         %96 = OpConvertSToF %float %85
-         %97 = OpCompositeConstruct %v2float %95 %96
-         %98 = OpConvertSToF %float %80
-         %99 = OpConvertSToF %float %81
-        %100 = OpCompositeConstruct %v2float %98 %99
-         %90 = OpSelect %v2float %94 %97 %100
-               OpStore %v1 %90
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %102 = OpLoad %int %101
-        %104 = OpAccessChain %_ptr_Function_float %v1 %102
-        %105 = OpLoad %float %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Function_float %v1 %107
-        %109 = OpLoad %float %108
-        %113 = OpCompositeConstruct %v2float %109 %109
-        %114 = OpCompositeConstruct %v2float %105 %105
-        %110 = OpSelect %v2float %112 %113 %114
-               OpStore %v2 %110
-        %115 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %119
-        %121 = OpLoad %v2float %v2
-        %125 = OpCompositeConstruct %v2float %117 %117
-        %126 = OpCompositeConstruct %v2float %120 %120
-        %123 = OpExtInst %v2float %124 NClamp %125 %126 %121
-        %127 = OpCompositeExtract %float %123 0
-        %122 = OpConvertFToS %int %127
-        %128 = OpAccessChain %_ptr_Function_int %A %122
-        %129 = OpLoad %int %128
-               OpStore %b %129
-        %130 = OpLoad %int %b
-        %131 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %132 = OpLoad %int %131
-        %133 = OpIEqual %bool %130 %132
-               OpSelectionMerge %134 None
-               OpBranchConditional %133 %135 %136
-        %135 = OpLabel
-        %137 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %138 = OpLoad %int %137
-        %139 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %140 = OpLoad %int %139
-        %141 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %142 = OpLoad %int %141
-        %143 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %144 = OpLoad %int %143
-        %145 = OpConvertSToF %float %138
-        %146 = OpConvertSToF %float %140
-        %147 = OpConvertSToF %float %142
-        %148 = OpConvertSToF %float %144
-        %149 = OpCompositeConstruct %v4float %145 %146 %147 %148
-               OpStore %x_GLF_color %149
-               OpBranch %134
-        %136 = OpLabel
-        %150 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %151 = OpLoad %int %150
-        %152 = OpConvertSToF %float %151
-        %153 = OpCompositeConstruct %v4float %152 %152 %152 %152
-               OpStore %x_GLF_color %153
-               OpBranch %134
-        %134 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %154
-        %157 = OpLabel
-        %158 = OpFunctionCall %void %main_1
-        %159 = OpLoad %v4float %x_GLF_color
-        %160 = OpCompositeConstruct %main_out %159
-               OpReturnValue %160
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %162 = OpLabel
-        %163 = OpFunctionCall %main_out %main_inner
-        %164 = OpCompositeExtract %v4float %163 0
-               OpStore %x_GLF_color_1_1 %164
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 591926d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-shifts-mix-mix-clamp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,95 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A : array<i32, 2>;
-  var i : i32;
-  var a : i32;
-  var v1 : vec2<f32>;
-  var v2 : vec2<f32>;
-  var b : i32;
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[0];
-  A[x_46] = x_48;
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-  A[x_51] = x_53;
-  let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i = x_56;
-  loop {
-    let x_61 : i32 = i;
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_61 > x_63)) {
-    } else {
-      break;
-    }
-    let x_66 : i32 = i;
-    i = (x_66 - 1);
-  }
-  let x_69 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_71 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_73 : i32 = i;
-  let x_76 : i32 = A[select(x_73, 1, (x_69 >= x_71))];
-  a = x_76;
-  let x_78 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_80 : i32 = a;
-  let x_84 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_87 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_91 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_93 : f32 = x_10.x_GLF_uniform_float_values[0];
-  v1 = select(vec2<f32>(f32(x_78), f32(x_80)), vec2<f32>(f32(x_84), f32(x_87)), vec2<bool>((x_91 < x_93), true));
-  let x_98 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_100 : f32 = v1[x_98];
-  let x_103 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_105 : f32 = v1[x_103];
-  v2 = select(vec2<f32>(x_100, x_100), vec2<f32>(x_105, x_105), vec2<bool>(false, false));
-  let x_109 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_110 : f32 = f32(x_109);
-  let x_113 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_114 : f32 = f32(x_113);
-  let x_116 : vec2<f32> = v2;
-  let x_121 : i32 = A[i32(clamp(vec2<f32>(x_110, x_110), vec2<f32>(x_114, x_114), x_116).x)];
-  b = x_121;
-  let x_122 : i32 = b;
-  let x_124 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_122 == x_124)) {
-    let x_130 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_133 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_136 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_139 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_130), f32(x_133), f32(x_136), f32(x_139));
-  } else {
-    let x_143 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_144 : f32 = f32(x_143);
-    x_GLF_color = vec4<f32>(x_144, x_144, x_144, x_144);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index da81e9c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,104 +0,0 @@
-uint tint_pack2x16float(float2 param_0) {
-  uint2 i = f32tof16(param_0);
-  return i.x | (i.y << 16);
-}
-
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[4];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float E = 0.0f;
-  bool x_69 = false;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_70_phi = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  a = tint_pack2x16float(float2(1.0f, 1.0f));
-  v1 = tint_unpack4x8snorm(a);
-  E = 0.01f;
-  const int x_43 = asint(x_8[1].x);
-  const float x_45 = v1[x_43];
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_10[scalar_offset / 4][scalar_offset % 4]);
-  const float x_49 = asfloat(x_10[1].x);
-  const bool x_54 = (abs((x_45 - (x_47 / x_49))) < E);
-  x_70_phi = x_54;
-  if (x_54) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_58 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_60 = v1[x_58];
-    const float x_62 = asfloat(x_10[2].x);
-    const float x_64 = asfloat(x_10[1].x);
-    x_69 = (abs((x_60 - (x_62 / x_64))) < E);
-    x_70_phi = x_69;
-  }
-  const bool x_70 = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    const int x_74 = asint(x_8[2].x);
-    const float x_76 = v1[x_74];
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_78 = asfloat(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_80 = asfloat(x_10[1].x);
-    x_85 = (abs((x_76 - (x_78 / x_80))) < E);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    const int x_90 = asint(x_8[3].x);
-    const float x_92 = v1[x_90];
-    const float x_94 = asfloat(x_10[2].x);
-    const float x_96 = asfloat(x_10[1].x);
-    x_101 = (abs((x_92 - (x_94 / x_96))) < E);
-    x_102_phi = x_101;
-  }
-  if (x_102_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_107 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_110 = asint(x_8[1].x);
-    const int x_113 = asint(x_8[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_116 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    const int x_120 = asint(x_8[1].x);
-    const float x_122 = v1[x_120];
-    x_GLF_color = float4(x_122, x_122, x_122, x_122);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1e87c9e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 v1 = 0.0f;
-  float E = 0.0f;
-  bool x_69 = false;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_70_phi = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  a = as_type<uint>(half2(float2(1.0f, 1.0f)));
-  uint const x_40 = a;
-  v1 = unpack_snorm4x8_to_float(x_40);
-  E = 0.01f;
-  int const x_43 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  float const x_45 = v1[x_43];
-  float const x_47 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  float const x_49 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  float const x_53 = E;
-  bool const x_54 = (fabs((x_45 - (x_47 / x_49))) < x_53);
-  x_70_phi = x_54;
-  if (x_54) {
-    int const x_58 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_60 = v1[x_58];
-    float const x_62 = x_10.x_GLF_uniform_float_values.arr[2].el;
-    float const x_64 = x_10.x_GLF_uniform_float_values.arr[1].el;
-    float const x_68 = E;
-    x_69 = (fabs((x_60 - (x_62 / x_64))) < x_68);
-    x_70_phi = x_69;
-  }
-  bool const x_70 = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    int const x_74 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    float const x_76 = v1[x_74];
-    float const x_78 = x_10.x_GLF_uniform_float_values.arr[0].el;
-    float const x_80 = x_10.x_GLF_uniform_float_values.arr[1].el;
-    float const x_84 = E;
-    x_85 = (fabs((x_76 - (x_78 / x_80))) < x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    int const x_90 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    float const x_92 = v1[x_90];
-    float const x_94 = x_10.x_GLF_uniform_float_values.arr[2].el;
-    float const x_96 = x_10.x_GLF_uniform_float_values.arr[1].el;
-    float const x_100 = E;
-    x_101 = (fabs((x_92 - (x_94 / x_96))) < x_100);
-    x_102_phi = x_101;
-  }
-  bool const x_102 = x_102_phi;
-  if (x_102) {
-    int const x_107 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_110 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_113 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_116 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    int const x_120 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_122 = v1[x_120];
-    *(tint_symbol_3) = float4(x_122, x_122, x_122, x_122);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_8 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5512b0d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,230 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 152
-; Schema: 0
-               OpCapability Shader
-         %42 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %E "E"
-               OpName %x_69 "x_69"
-               OpName %x_85 "x_85"
-               OpName %x_101 "x_101"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %26 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %35 = OpConstantNull %bool
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %45 = OpConstantComposite %v2float %float_1 %float_1
-%float_0_00999999978 = OpConstant %float 0.00999999978
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %141 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %26
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %E = OpVariable %_ptr_Function_float Function %31
-       %x_69 = OpVariable %_ptr_Function_bool Function %35
-       %x_85 = OpVariable %_ptr_Function_bool Function %35
-      %x_101 = OpVariable %_ptr_Function_bool Function %35
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %35
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %35
-  %x_102_phi = OpVariable %_ptr_Function_bool Function %35
-         %41 = OpExtInst %uint %42 PackHalf2x16 %45
-               OpStore %a %41
-         %46 = OpLoad %uint %a
-         %47 = OpExtInst %v4float %42 UnpackSnorm4x8 %46
-               OpStore %v1 %47
-               OpStore %E %float_0_00999999978
-         %52 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Function_float %v1 %53
-         %55 = OpLoad %float %54
-         %58 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpLoad %float %E
-         %64 = OpFDiv %float %59 %61
-         %65 = OpFSub %float %55 %64
-         %63 = OpExtInst %float %42 FAbs %65
-         %66 = OpFOrdLessThan %bool %63 %62
-               OpStore %x_70_phi %66
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Function_float %v1 %70
-         %72 = OpLoad %float %71
-         %74 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_2
-         %75 = OpLoad %float %74
-         %76 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %77 = OpLoad %float %76
-         %78 = OpLoad %float %E
-         %80 = OpFDiv %float %75 %77
-         %81 = OpFSub %float %72 %80
-         %79 = OpExtInst %float %42 FAbs %81
-         %82 = OpFOrdLessThan %bool %79 %78
-               OpStore %x_69 %82
-         %83 = OpLoad %bool %x_69
-               OpStore %x_70_phi %83
-               OpBranch %67
-         %67 = OpLabel
-         %84 = OpLoad %bool %x_70_phi
-               OpStore %x_86_phi %84
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Function_float %v1 %88
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %92 = OpLoad %float %91
-         %93 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %94 = OpLoad %float %93
-         %95 = OpLoad %float %E
-         %97 = OpFDiv %float %92 %94
-         %98 = OpFSub %float %90 %97
-         %96 = OpExtInst %float %42 FAbs %98
-         %99 = OpFOrdLessThan %bool %96 %95
-               OpStore %x_85 %99
-        %100 = OpLoad %bool %x_85
-               OpStore %x_86_phi %100
-               OpBranch %85
-         %85 = OpLabel
-        %101 = OpLoad %bool %x_86_phi
-               OpStore %x_102_phi %101
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %105 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Function_float %v1 %106
-        %108 = OpLoad %float %107
-        %109 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_2
-        %110 = OpLoad %float %109
-        %111 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-        %112 = OpLoad %float %111
-        %113 = OpLoad %float %E
-        %115 = OpFDiv %float %110 %112
-        %116 = OpFSub %float %108 %115
-        %114 = OpExtInst %float %42 FAbs %116
-        %117 = OpFOrdLessThan %bool %114 %113
-               OpStore %x_101 %117
-        %118 = OpLoad %bool %x_101
-               OpStore %x_102_phi %118
-               OpBranch %102
-        %102 = OpLabel
-        %119 = OpLoad %bool %x_102_phi
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %130 = OpLoad %int %129
-        %131 = OpConvertSToF %float %124
-        %132 = OpConvertSToF %float %126
-        %133 = OpConvertSToF %float %128
-        %134 = OpConvertSToF %float %130
-        %135 = OpCompositeConstruct %v4float %131 %132 %133 %134
-               OpStore %x_GLF_color %135
-               OpBranch %120
-        %122 = OpLabel
-        %136 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Function_float %v1 %137
-        %139 = OpLoad %float %138
-        %140 = OpCompositeConstruct %v4float %139 %139 %139 %139
-               OpStore %x_GLF_color %140
-               OpBranch %120
-        %120 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %141
-        %144 = OpLabel
-        %145 = OpFunctionCall %void %main_1
-        %146 = OpLoad %v4float %x_GLF_color
-        %147 = OpCompositeConstruct %main_out %146
-               OpReturnValue %147
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %149 = OpLabel
-        %150 = OpFunctionCall %main_out %main_inner
-        %151 = OpCompositeExtract %v4float %150 0
-               OpStore %x_GLF_color_1_1 %151
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c893e13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var v1 : vec4<f32>;
-  var E : f32;
-  var x_69 : bool;
-  var x_85 : bool;
-  var x_101 : bool;
-  var x_70_phi : bool;
-  var x_86_phi : bool;
-  var x_102_phi : bool;
-  a = pack2x16float(vec2<f32>(1.0, 1.0));
-  let x_40 : u32 = a;
-  v1 = unpack4x8snorm(x_40);
-  E = 0.01;
-  let x_43 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_45 : f32 = v1[x_43];
-  let x_47 : f32 = x_10.x_GLF_uniform_float_values[0];
-  let x_49 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_53 : f32 = E;
-  let x_54 : bool = (abs((x_45 - (x_47 / x_49))) < x_53);
-  x_70_phi = x_54;
-  if (x_54) {
-    let x_58 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_60 : f32 = v1[x_58];
-    let x_62 : f32 = x_10.x_GLF_uniform_float_values[2];
-    let x_64 : f32 = x_10.x_GLF_uniform_float_values[1];
-    let x_68 : f32 = E;
-    x_69 = (abs((x_60 - (x_62 / x_64))) < x_68);
-    x_70_phi = x_69;
-  }
-  let x_70 : bool = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    let x_74 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_76 : f32 = v1[x_74];
-    let x_78 : f32 = x_10.x_GLF_uniform_float_values[0];
-    let x_80 : f32 = x_10.x_GLF_uniform_float_values[1];
-    let x_84 : f32 = E;
-    x_85 = (abs((x_76 - (x_78 / x_80))) < x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    let x_90 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_92 : f32 = v1[x_90];
-    let x_94 : f32 = x_10.x_GLF_uniform_float_values[2];
-    let x_96 : f32 = x_10.x_GLF_uniform_float_values[1];
-    let x_100 : f32 = E;
-    x_101 = (abs((x_92 - (x_94 / x_96))) < x_100);
-    x_102_phi = x_101;
-  }
-  let x_102 : bool = x_102_phi;
-  if (x_102) {
-    let x_107 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_110 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_113 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_116 : i32 = x_8.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  } else {
-    let x_120 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_122 : f32 = v1[x_120];
-    x_GLF_color = vec4<f32>(x_122, x_122, x_122, x_122);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index da81e9c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,104 +0,0 @@
-uint tint_pack2x16float(float2 param_0) {
-  uint2 i = f32tof16(param_0);
-  return i.x | (i.y << 16);
-}
-
-float4 tint_unpack4x8snorm(uint param_0) {
-  int j = int(param_0);
-  int4 i = int4(j << 24, j << 16, j << 8, j) >> 24;
-  return clamp(float4(i) / 127.0, -1.0, 1.0);
-}
-
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[4];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float E = 0.0f;
-  bool x_69 = false;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_70_phi = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  a = tint_pack2x16float(float2(1.0f, 1.0f));
-  v1 = tint_unpack4x8snorm(a);
-  E = 0.01f;
-  const int x_43 = asint(x_8[1].x);
-  const float x_45 = v1[x_43];
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_10[scalar_offset / 4][scalar_offset % 4]);
-  const float x_49 = asfloat(x_10[1].x);
-  const bool x_54 = (abs((x_45 - (x_47 / x_49))) < E);
-  x_70_phi = x_54;
-  if (x_54) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_58 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_60 = v1[x_58];
-    const float x_62 = asfloat(x_10[2].x);
-    const float x_64 = asfloat(x_10[1].x);
-    x_69 = (abs((x_60 - (x_62 / x_64))) < E);
-    x_70_phi = x_69;
-  }
-  const bool x_70 = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    const int x_74 = asint(x_8[2].x);
-    const float x_76 = v1[x_74];
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_78 = asfloat(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_80 = asfloat(x_10[1].x);
-    x_85 = (abs((x_76 - (x_78 / x_80))) < E);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    const int x_90 = asint(x_8[3].x);
-    const float x_92 = v1[x_90];
-    const float x_94 = asfloat(x_10[2].x);
-    const float x_96 = asfloat(x_10[1].x);
-    x_101 = (abs((x_92 - (x_94 / x_96))) < E);
-    x_102_phi = x_101;
-  }
-  if (x_102_phi) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_107 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_110 = asint(x_8[1].x);
-    const int x_113 = asint(x_8[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_116 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    const int x_120 = asint(x_8[1].x);
-    const float x_122 = v1[x_120];
-    x_GLF_color = float4(x_122, x_122, x_122, x_122);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1e87c9e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 v1 = 0.0f;
-  float E = 0.0f;
-  bool x_69 = false;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_70_phi = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  a = as_type<uint>(half2(float2(1.0f, 1.0f)));
-  uint const x_40 = a;
-  v1 = unpack_snorm4x8_to_float(x_40);
-  E = 0.01f;
-  int const x_43 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  float const x_45 = v1[x_43];
-  float const x_47 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  float const x_49 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  float const x_53 = E;
-  bool const x_54 = (fabs((x_45 - (x_47 / x_49))) < x_53);
-  x_70_phi = x_54;
-  if (x_54) {
-    int const x_58 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_60 = v1[x_58];
-    float const x_62 = x_10.x_GLF_uniform_float_values.arr[2].el;
-    float const x_64 = x_10.x_GLF_uniform_float_values.arr[1].el;
-    float const x_68 = E;
-    x_69 = (fabs((x_60 - (x_62 / x_64))) < x_68);
-    x_70_phi = x_69;
-  }
-  bool const x_70 = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    int const x_74 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    float const x_76 = v1[x_74];
-    float const x_78 = x_10.x_GLF_uniform_float_values.arr[0].el;
-    float const x_80 = x_10.x_GLF_uniform_float_values.arr[1].el;
-    float const x_84 = E;
-    x_85 = (fabs((x_76 - (x_78 / x_80))) < x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    int const x_90 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    float const x_92 = v1[x_90];
-    float const x_94 = x_10.x_GLF_uniform_float_values.arr[2].el;
-    float const x_96 = x_10.x_GLF_uniform_float_values.arr[1].el;
-    float const x_100 = E;
-    x_101 = (fabs((x_92 - (x_94 / x_96))) < x_100);
-    x_102_phi = x_101;
-  }
-  bool const x_102 = x_102_phi;
-  if (x_102) {
-    int const x_107 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_110 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_113 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_116 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    int const x_120 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_122 = v1[x_120];
-    *(tint_symbol_3) = float4(x_122, x_122, x_122, x_122);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_8 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5512b0d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,230 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 152
-; Schema: 0
-               OpCapability Shader
-         %42 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %E "E"
-               OpName %x_69 "x_69"
-               OpName %x_85 "x_85"
-               OpName %x_101 "x_101"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %26 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %35 = OpConstantNull %bool
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %45 = OpConstantComposite %v2float %float_1 %float_1
-%float_0_00999999978 = OpConstant %float 0.00999999978
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %141 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %26
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %E = OpVariable %_ptr_Function_float Function %31
-       %x_69 = OpVariable %_ptr_Function_bool Function %35
-       %x_85 = OpVariable %_ptr_Function_bool Function %35
-      %x_101 = OpVariable %_ptr_Function_bool Function %35
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %35
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %35
-  %x_102_phi = OpVariable %_ptr_Function_bool Function %35
-         %41 = OpExtInst %uint %42 PackHalf2x16 %45
-               OpStore %a %41
-         %46 = OpLoad %uint %a
-         %47 = OpExtInst %v4float %42 UnpackSnorm4x8 %46
-               OpStore %v1 %47
-               OpStore %E %float_0_00999999978
-         %52 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Function_float %v1 %53
-         %55 = OpLoad %float %54
-         %58 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpLoad %float %E
-         %64 = OpFDiv %float %59 %61
-         %65 = OpFSub %float %55 %64
-         %63 = OpExtInst %float %42 FAbs %65
-         %66 = OpFOrdLessThan %bool %63 %62
-               OpStore %x_70_phi %66
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Function_float %v1 %70
-         %72 = OpLoad %float %71
-         %74 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_2
-         %75 = OpLoad %float %74
-         %76 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %77 = OpLoad %float %76
-         %78 = OpLoad %float %E
-         %80 = OpFDiv %float %75 %77
-         %81 = OpFSub %float %72 %80
-         %79 = OpExtInst %float %42 FAbs %81
-         %82 = OpFOrdLessThan %bool %79 %78
-               OpStore %x_69 %82
-         %83 = OpLoad %bool %x_69
-               OpStore %x_70_phi %83
-               OpBranch %67
-         %67 = OpLabel
-         %84 = OpLoad %bool %x_70_phi
-               OpStore %x_86_phi %84
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Function_float %v1 %88
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %92 = OpLoad %float %91
-         %93 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %94 = OpLoad %float %93
-         %95 = OpLoad %float %E
-         %97 = OpFDiv %float %92 %94
-         %98 = OpFSub %float %90 %97
-         %96 = OpExtInst %float %42 FAbs %98
-         %99 = OpFOrdLessThan %bool %96 %95
-               OpStore %x_85 %99
-        %100 = OpLoad %bool %x_85
-               OpStore %x_86_phi %100
-               OpBranch %85
-         %85 = OpLabel
-        %101 = OpLoad %bool %x_86_phi
-               OpStore %x_102_phi %101
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %105 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Function_float %v1 %106
-        %108 = OpLoad %float %107
-        %109 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_2
-        %110 = OpLoad %float %109
-        %111 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-        %112 = OpLoad %float %111
-        %113 = OpLoad %float %E
-        %115 = OpFDiv %float %110 %112
-        %116 = OpFSub %float %108 %115
-        %114 = OpExtInst %float %42 FAbs %116
-        %117 = OpFOrdLessThan %bool %114 %113
-               OpStore %x_101 %117
-        %118 = OpLoad %bool %x_101
-               OpStore %x_102_phi %118
-               OpBranch %102
-        %102 = OpLabel
-        %119 = OpLoad %bool %x_102_phi
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %130 = OpLoad %int %129
-        %131 = OpConvertSToF %float %124
-        %132 = OpConvertSToF %float %126
-        %133 = OpConvertSToF %float %128
-        %134 = OpConvertSToF %float %130
-        %135 = OpCompositeConstruct %v4float %131 %132 %133 %134
-               OpStore %x_GLF_color %135
-               OpBranch %120
-        %122 = OpLabel
-        %136 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Function_float %v1 %137
-        %139 = OpLoad %float %138
-        %140 = OpCompositeConstruct %v4float %139 %139 %139 %139
-               OpStore %x_GLF_color %140
-               OpBranch %120
-        %120 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %141
-        %144 = OpLabel
-        %145 = OpFunctionCall %void %main_1
-        %146 = OpLoad %v4float %x_GLF_color
-        %147 = OpCompositeConstruct %main_out %146
-               OpReturnValue %147
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %149 = OpLabel
-        %150 = OpFunctionCall %main_out %main_inner
-        %151 = OpCompositeExtract %v4float %150 0
-               OpStore %x_GLF_color_1_1 %151
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c893e13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-pack-unpack/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var v1 : vec4<f32>;
-  var E : f32;
-  var x_69 : bool;
-  var x_85 : bool;
-  var x_101 : bool;
-  var x_70_phi : bool;
-  var x_86_phi : bool;
-  var x_102_phi : bool;
-  a = pack2x16float(vec2<f32>(1.0, 1.0));
-  let x_40 : u32 = a;
-  v1 = unpack4x8snorm(x_40);
-  E = 0.01;
-  let x_43 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_45 : f32 = v1[x_43];
-  let x_47 : f32 = x_10.x_GLF_uniform_float_values[0];
-  let x_49 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_53 : f32 = E;
-  let x_54 : bool = (abs((x_45 - (x_47 / x_49))) < x_53);
-  x_70_phi = x_54;
-  if (x_54) {
-    let x_58 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_60 : f32 = v1[x_58];
-    let x_62 : f32 = x_10.x_GLF_uniform_float_values[2];
-    let x_64 : f32 = x_10.x_GLF_uniform_float_values[1];
-    let x_68 : f32 = E;
-    x_69 = (abs((x_60 - (x_62 / x_64))) < x_68);
-    x_70_phi = x_69;
-  }
-  let x_70 : bool = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    let x_74 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_76 : f32 = v1[x_74];
-    let x_78 : f32 = x_10.x_GLF_uniform_float_values[0];
-    let x_80 : f32 = x_10.x_GLF_uniform_float_values[1];
-    let x_84 : f32 = E;
-    x_85 = (abs((x_76 - (x_78 / x_80))) < x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    let x_90 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_92 : f32 = v1[x_90];
-    let x_94 : f32 = x_10.x_GLF_uniform_float_values[2];
-    let x_96 : f32 = x_10.x_GLF_uniform_float_values[1];
-    let x_100 : f32 = E;
-    x_101 = (abs((x_92 - (x_94 / x_96))) < x_100);
-    x_102_phi = x_101;
-  }
-  let x_102 : bool = x_102_phi;
-  if (x_102) {
-    let x_107 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_110 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_113 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_116 : i32 = x_8.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  } else {
-    let x_120 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_122 : f32 = v1[x_120];
-    x_GLF_color = vec4<f32>(x_122, x_122, x_122, x_122);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 66f07af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-uint tint_pack4x8snorm(float4 param_0) {
-  int4 i = int4(round(clamp(param_0, -1.0, 1.0) * 127.0)) & 0xff;
-  return asuint(i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float E = 0.0f;
-  bool x_69 = false;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_70_phi = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  const float x_35 = asfloat(x_6[1].x);
-  a = tint_pack4x8snorm(float4(x_35, x_35, x_35, x_35));
-  v1 = tint_unpack4x8unorm(a);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  E = x_41;
-  const int x_43 = asint(x_10[1].x);
-  const float x_45 = v1[x_43];
-  const float x_47 = asfloat(x_6[2].x);
-  const float x_49 = asfloat(x_6[3].x);
-  const bool x_54 = (abs((x_45 - (x_47 / x_49))) < E);
-  x_70_phi = x_54;
-  if (x_54) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_58 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_60 = v1[x_58];
-    const float x_62 = asfloat(x_6[2].x);
-    const float x_64 = asfloat(x_6[3].x);
-    x_69 = (abs((x_60 - (x_62 / x_64))) < E);
-    x_70_phi = x_69;
-  }
-  const bool x_70 = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    const int x_74 = asint(x_10[3].x);
-    const float x_76 = v1[x_74];
-    const float x_78 = asfloat(x_6[2].x);
-    const float x_80 = asfloat(x_6[3].x);
-    x_85 = (abs((x_76 - (x_78 / x_80))) < E);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    const int x_90 = asint(x_10[2].x);
-    const float x_92 = v1[x_90];
-    const float x_94 = asfloat(x_6[2].x);
-    const float x_96 = asfloat(x_6[3].x);
-    x_101 = (abs((x_92 - (x_94 / x_96))) < E);
-    x_102_phi = x_101;
-  }
-  if (x_102_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_107 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_110 = asint(x_10[1].x);
-    const int x_113 = asint(x_10[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_116 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    const int x_120 = asint(x_10[1].x);
-    const float x_121 = float(x_120);
-    x_GLF_color = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9819165..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 v1 = 0.0f;
-  float E = 0.0f;
-  bool x_69 = false;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_70_phi = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = pack_float_to_snorm4x8(float4(x_35, x_35, x_35, x_35));
-  uint const x_38 = a;
-  v1 = unpack_unorm4x8_to_float(x_38);
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  E = x_41;
-  int const x_43 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  float const x_45 = v1[x_43];
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_49 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_53 = E;
-  bool const x_54 = (fabs((x_45 - (x_47 / x_49))) < x_53);
-  x_70_phi = x_54;
-  if (x_54) {
-    int const x_58 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_60 = v1[x_58];
-    float const x_62 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    float const x_64 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_68 = E;
-    x_69 = (fabs((x_60 - (x_62 / x_64))) < x_68);
-    x_70_phi = x_69;
-  }
-  bool const x_70 = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    int const x_74 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_76 = v1[x_74];
-    float const x_78 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    float const x_80 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_84 = E;
-    x_85 = (fabs((x_76 - (x_78 / x_80))) < x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    int const x_90 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_92 = v1[x_90];
-    float const x_94 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    float const x_96 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_100 = E;
-    x_101 = (fabs((x_92 - (x_94 / x_96))) < x_100);
-    x_102_phi = x_101;
-  }
-  bool const x_102 = x_102_phi;
-  if (x_102) {
-    int const x_107 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_110 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_113 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_116 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    int const x_120 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_121 = float(x_120);
-    *(tint_symbol_3) = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4155669..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,229 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-         %46 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %E "E"
-               OpName %x_69 "x_69"
-               OpName %x_85 "x_85"
-               OpName %x_101 "x_101"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %25 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %34 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %25
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %E = OpVariable %_ptr_Function_float Function %30
-       %x_69 = OpVariable %_ptr_Function_bool Function %34
-       %x_85 = OpVariable %_ptr_Function_bool Function %34
-      %x_101 = OpVariable %_ptr_Function_bool Function %34
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %34
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %34
-  %x_102_phi = OpVariable %_ptr_Function_bool Function %34
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %44 = OpLoad %float %43
-         %47 = OpCompositeConstruct %v4float %44 %44 %44 %44
-         %45 = OpExtInst %uint %46 PackSnorm4x8 %47
-               OpStore %a %45
-         %48 = OpLoad %uint %a
-         %49 = OpExtInst %v4float %46 UnpackUnorm4x8 %48
-               OpStore %v1 %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %52 = OpLoad %float %51
-               OpStore %E %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Function_float %v1 %55
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %60 = OpLoad %float %59
-         %62 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %63 = OpLoad %float %62
-         %64 = OpLoad %float %E
-         %66 = OpFDiv %float %60 %63
-         %67 = OpFSub %float %57 %66
-         %65 = OpExtInst %float %46 FAbs %67
-         %68 = OpFOrdLessThan %bool %65 %64
-               OpStore %x_70_phi %68
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Function_float %v1 %72
-         %74 = OpLoad %float %73
-         %75 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %76 = OpLoad %float %75
-         %77 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %78 = OpLoad %float %77
-         %79 = OpLoad %float %E
-         %81 = OpFDiv %float %76 %78
-         %82 = OpFSub %float %74 %81
-         %80 = OpExtInst %float %46 FAbs %82
-         %83 = OpFOrdLessThan %bool %80 %79
-               OpStore %x_69 %83
-         %84 = OpLoad %bool %x_69
-               OpStore %x_70_phi %84
-               OpBranch %69
-         %69 = OpLabel
-         %85 = OpLoad %bool %x_70_phi
-               OpStore %x_86_phi %85
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Function_float %v1 %89
-         %91 = OpLoad %float %90
-         %92 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %93 = OpLoad %float %92
-         %94 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %95 = OpLoad %float %94
-         %96 = OpLoad %float %E
-         %98 = OpFDiv %float %93 %95
-         %99 = OpFSub %float %91 %98
-         %97 = OpExtInst %float %46 FAbs %99
-        %100 = OpFOrdLessThan %bool %97 %96
-               OpStore %x_85 %100
-        %101 = OpLoad %bool %x_85
-               OpStore %x_86_phi %101
-               OpBranch %86
-         %86 = OpLabel
-        %102 = OpLoad %bool %x_86_phi
-               OpStore %x_102_phi %102
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %103
-        %104 = OpLabel
-        %105 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Function_float %v1 %106
-        %108 = OpLoad %float %107
-        %109 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-        %110 = OpLoad %float %109
-        %111 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %112 = OpLoad %float %111
-        %113 = OpLoad %float %E
-        %115 = OpFDiv %float %110 %112
-        %116 = OpFSub %float %108 %115
-        %114 = OpExtInst %float %46 FAbs %116
-        %117 = OpFOrdLessThan %bool %114 %113
-               OpStore %x_101 %117
-        %118 = OpLoad %bool %x_101
-               OpStore %x_102_phi %118
-               OpBranch %103
-        %103 = OpLabel
-        %119 = OpLoad %bool %x_102_phi
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %130 = OpLoad %int %129
-        %131 = OpConvertSToF %float %124
-        %132 = OpConvertSToF %float %126
-        %133 = OpConvertSToF %float %128
-        %134 = OpConvertSToF %float %130
-        %135 = OpCompositeConstruct %v4float %131 %132 %133 %134
-               OpStore %x_GLF_color %135
-               OpBranch %120
-        %122 = OpLabel
-        %136 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %137 = OpLoad %int %136
-        %138 = OpConvertSToF %float %137
-        %139 = OpCompositeConstruct %v4float %138 %138 %138 %138
-               OpStore %x_GLF_color %139
-               OpBranch %120
-        %120 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-        %143 = OpLabel
-        %144 = OpFunctionCall %void %main_1
-        %145 = OpLoad %v4float %x_GLF_color
-        %146 = OpCompositeConstruct %main_out %145
-               OpReturnValue %146
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %148 = OpLabel
-        %149 = OpFunctionCall %main_out %main_inner
-        %150 = OpCompositeExtract %v4float %149 0
-               OpStore %x_GLF_color_1_1 %150
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ebc5637..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var v1 : vec4<f32>;
-  var E : f32;
-  var x_69 : bool;
-  var x_85 : bool;
-  var x_101 : bool;
-  var x_70_phi : bool;
-  var x_86_phi : bool;
-  var x_102_phi : bool;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = pack4x8snorm(vec4<f32>(x_35, x_35, x_35, x_35));
-  let x_38 : u32 = a;
-  v1 = unpack4x8unorm(x_38);
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
-  E = x_41;
-  let x_43 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_45 : f32 = v1[x_43];
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_49 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_53 : f32 = E;
-  let x_54 : bool = (abs((x_45 - (x_47 / x_49))) < x_53);
-  x_70_phi = x_54;
-  if (x_54) {
-    let x_58 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_60 : f32 = v1[x_58];
-    let x_62 : f32 = x_6.x_GLF_uniform_float_values[2];
-    let x_64 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_68 : f32 = E;
-    x_69 = (abs((x_60 - (x_62 / x_64))) < x_68);
-    x_70_phi = x_69;
-  }
-  let x_70 : bool = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    let x_74 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_76 : f32 = v1[x_74];
-    let x_78 : f32 = x_6.x_GLF_uniform_float_values[2];
-    let x_80 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_84 : f32 = E;
-    x_85 = (abs((x_76 - (x_78 / x_80))) < x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    let x_90 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_92 : f32 = v1[x_90];
-    let x_94 : f32 = x_6.x_GLF_uniform_float_values[2];
-    let x_96 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_100 : f32 = E;
-    x_101 = (abs((x_92 - (x_94 / x_96))) < x_100);
-    x_102_phi = x_101;
-  }
-  let x_102 : bool = x_102_phi;
-  if (x_102) {
-    let x_107 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_110 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_113 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_116 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  } else {
-    let x_120 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_121 : f32 = f32(x_120);
-    x_GLF_color = vec4<f32>(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 66f07af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-uint tint_pack4x8snorm(float4 param_0) {
-  int4 i = int4(round(clamp(param_0, -1.0, 1.0) * 127.0)) & 0xff;
-  return asuint(i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float E = 0.0f;
-  bool x_69 = false;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_70_phi = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  const float x_35 = asfloat(x_6[1].x);
-  a = tint_pack4x8snorm(float4(x_35, x_35, x_35, x_35));
-  v1 = tint_unpack4x8unorm(a);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  E = x_41;
-  const int x_43 = asint(x_10[1].x);
-  const float x_45 = v1[x_43];
-  const float x_47 = asfloat(x_6[2].x);
-  const float x_49 = asfloat(x_6[3].x);
-  const bool x_54 = (abs((x_45 - (x_47 / x_49))) < E);
-  x_70_phi = x_54;
-  if (x_54) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_58 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_60 = v1[x_58];
-    const float x_62 = asfloat(x_6[2].x);
-    const float x_64 = asfloat(x_6[3].x);
-    x_69 = (abs((x_60 - (x_62 / x_64))) < E);
-    x_70_phi = x_69;
-  }
-  const bool x_70 = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    const int x_74 = asint(x_10[3].x);
-    const float x_76 = v1[x_74];
-    const float x_78 = asfloat(x_6[2].x);
-    const float x_80 = asfloat(x_6[3].x);
-    x_85 = (abs((x_76 - (x_78 / x_80))) < E);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    const int x_90 = asint(x_10[2].x);
-    const float x_92 = v1[x_90];
-    const float x_94 = asfloat(x_6[2].x);
-    const float x_96 = asfloat(x_6[3].x);
-    x_101 = (abs((x_92 - (x_94 / x_96))) < E);
-    x_102_phi = x_101;
-  }
-  if (x_102_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_107 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_110 = asint(x_10[1].x);
-    const int x_113 = asint(x_10[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_116 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    const int x_120 = asint(x_10[1].x);
-    const float x_121 = float(x_120);
-    x_GLF_color = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9819165..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 v1 = 0.0f;
-  float E = 0.0f;
-  bool x_69 = false;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_70_phi = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = pack_float_to_snorm4x8(float4(x_35, x_35, x_35, x_35));
-  uint const x_38 = a;
-  v1 = unpack_unorm4x8_to_float(x_38);
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  E = x_41;
-  int const x_43 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  float const x_45 = v1[x_43];
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_49 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_53 = E;
-  bool const x_54 = (fabs((x_45 - (x_47 / x_49))) < x_53);
-  x_70_phi = x_54;
-  if (x_54) {
-    int const x_58 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_60 = v1[x_58];
-    float const x_62 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    float const x_64 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_68 = E;
-    x_69 = (fabs((x_60 - (x_62 / x_64))) < x_68);
-    x_70_phi = x_69;
-  }
-  bool const x_70 = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    int const x_74 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_76 = v1[x_74];
-    float const x_78 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    float const x_80 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_84 = E;
-    x_85 = (fabs((x_76 - (x_78 / x_80))) < x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    int const x_90 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_92 = v1[x_90];
-    float const x_94 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    float const x_96 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_100 = E;
-    x_101 = (fabs((x_92 - (x_94 / x_96))) < x_100);
-    x_102_phi = x_101;
-  }
-  bool const x_102 = x_102_phi;
-  if (x_102) {
-    int const x_107 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_110 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_113 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_116 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    int const x_120 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_121 = float(x_120);
-    *(tint_symbol_3) = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4155669..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,229 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-         %46 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %v1 "v1"
-               OpName %E "E"
-               OpName %x_69 "x_69"
-               OpName %x_85 "x_85"
-               OpName %x_101 "x_101"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %25 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %34 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %25
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %E = OpVariable %_ptr_Function_float Function %30
-       %x_69 = OpVariable %_ptr_Function_bool Function %34
-       %x_85 = OpVariable %_ptr_Function_bool Function %34
-      %x_101 = OpVariable %_ptr_Function_bool Function %34
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %34
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %34
-  %x_102_phi = OpVariable %_ptr_Function_bool Function %34
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %44 = OpLoad %float %43
-         %47 = OpCompositeConstruct %v4float %44 %44 %44 %44
-         %45 = OpExtInst %uint %46 PackSnorm4x8 %47
-               OpStore %a %45
-         %48 = OpLoad %uint %a
-         %49 = OpExtInst %v4float %46 UnpackUnorm4x8 %48
-               OpStore %v1 %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %52 = OpLoad %float %51
-               OpStore %E %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Function_float %v1 %55
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %60 = OpLoad %float %59
-         %62 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %63 = OpLoad %float %62
-         %64 = OpLoad %float %E
-         %66 = OpFDiv %float %60 %63
-         %67 = OpFSub %float %57 %66
-         %65 = OpExtInst %float %46 FAbs %67
-         %68 = OpFOrdLessThan %bool %65 %64
-               OpStore %x_70_phi %68
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Function_float %v1 %72
-         %74 = OpLoad %float %73
-         %75 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %76 = OpLoad %float %75
-         %77 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %78 = OpLoad %float %77
-         %79 = OpLoad %float %E
-         %81 = OpFDiv %float %76 %78
-         %82 = OpFSub %float %74 %81
-         %80 = OpExtInst %float %46 FAbs %82
-         %83 = OpFOrdLessThan %bool %80 %79
-               OpStore %x_69 %83
-         %84 = OpLoad %bool %x_69
-               OpStore %x_70_phi %84
-               OpBranch %69
-         %69 = OpLabel
-         %85 = OpLoad %bool %x_70_phi
-               OpStore %x_86_phi %85
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Function_float %v1 %89
-         %91 = OpLoad %float %90
-         %92 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %93 = OpLoad %float %92
-         %94 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %95 = OpLoad %float %94
-         %96 = OpLoad %float %E
-         %98 = OpFDiv %float %93 %95
-         %99 = OpFSub %float %91 %98
-         %97 = OpExtInst %float %46 FAbs %99
-        %100 = OpFOrdLessThan %bool %97 %96
-               OpStore %x_85 %100
-        %101 = OpLoad %bool %x_85
-               OpStore %x_86_phi %101
-               OpBranch %86
-         %86 = OpLabel
-        %102 = OpLoad %bool %x_86_phi
-               OpStore %x_102_phi %102
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %103
-        %104 = OpLabel
-        %105 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Function_float %v1 %106
-        %108 = OpLoad %float %107
-        %109 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-        %110 = OpLoad %float %109
-        %111 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-        %112 = OpLoad %float %111
-        %113 = OpLoad %float %E
-        %115 = OpFDiv %float %110 %112
-        %116 = OpFSub %float %108 %115
-        %114 = OpExtInst %float %46 FAbs %116
-        %117 = OpFOrdLessThan %bool %114 %113
-               OpStore %x_101 %117
-        %118 = OpLoad %bool %x_101
-               OpStore %x_102_phi %118
-               OpBranch %103
-        %103 = OpLabel
-        %119 = OpLoad %bool %x_102_phi
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %130 = OpLoad %int %129
-        %131 = OpConvertSToF %float %124
-        %132 = OpConvertSToF %float %126
-        %133 = OpConvertSToF %float %128
-        %134 = OpConvertSToF %float %130
-        %135 = OpCompositeConstruct %v4float %131 %132 %133 %134
-               OpStore %x_GLF_color %135
-               OpBranch %120
-        %122 = OpLabel
-        %136 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %137 = OpLoad %int %136
-        %138 = OpConvertSToF %float %137
-        %139 = OpCompositeConstruct %v4float %138 %138 %138 %138
-               OpStore %x_GLF_color %139
-               OpBranch %120
-        %120 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-        %143 = OpLabel
-        %144 = OpFunctionCall %void %main_1
-        %145 = OpLoad %v4float %x_GLF_color
-        %146 = OpCompositeConstruct %main_out %145
-               OpReturnValue %146
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %148 = OpLabel
-        %149 = OpFunctionCall %main_out %main_inner
-        %150 = OpCompositeExtract %v4float %149 0
-               OpStore %x_GLF_color_1_1 %150
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ebc5637..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-packsnorm-unpackunorm/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var v1 : vec4<f32>;
-  var E : f32;
-  var x_69 : bool;
-  var x_85 : bool;
-  var x_101 : bool;
-  var x_70_phi : bool;
-  var x_86_phi : bool;
-  var x_102_phi : bool;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = pack4x8snorm(vec4<f32>(x_35, x_35, x_35, x_35));
-  let x_38 : u32 = a;
-  v1 = unpack4x8unorm(x_38);
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
-  E = x_41;
-  let x_43 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_45 : f32 = v1[x_43];
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_49 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_53 : f32 = E;
-  let x_54 : bool = (abs((x_45 - (x_47 / x_49))) < x_53);
-  x_70_phi = x_54;
-  if (x_54) {
-    let x_58 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_60 : f32 = v1[x_58];
-    let x_62 : f32 = x_6.x_GLF_uniform_float_values[2];
-    let x_64 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_68 : f32 = E;
-    x_69 = (abs((x_60 - (x_62 / x_64))) < x_68);
-    x_70_phi = x_69;
-  }
-  let x_70 : bool = x_70_phi;
-  x_86_phi = x_70;
-  if (x_70) {
-    let x_74 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_76 : f32 = v1[x_74];
-    let x_78 : f32 = x_6.x_GLF_uniform_float_values[2];
-    let x_80 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_84 : f32 = E;
-    x_85 = (abs((x_76 - (x_78 / x_80))) < x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    let x_90 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_92 : f32 = v1[x_90];
-    let x_94 : f32 = x_6.x_GLF_uniform_float_values[2];
-    let x_96 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_100 : f32 = E;
-    x_101 = (abs((x_92 - (x_94 / x_96))) < x_100);
-    x_102_phi = x_101;
-  }
-  let x_102 : bool = x_102_phi;
-  if (x_102) {
-    let x_107 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_110 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_113 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_116 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  } else {
-    let x_120 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_121 : f32 = f32(x_120);
-    x_GLF_color = vec4<f32>(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ab5204d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_29 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_31 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_33 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_35 = asfloat(x_6[1].x);
-  color = float4(x_29, x_31, x_33, x_35);
-  const int x_38 = asint(x_8[1].x);
-  switch(((1 | x_38) ^ 1)) {
-    case 0: {
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const int x_44 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const float x_46 = asfloat(x_6[1].x);
-      set_float4(color, x_44, x_46);
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  x_GLF_color = color;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.msl
deleted file mode 100644
index baa0074..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float4 color = 0.0f;
-  float const x_29 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_31 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_33 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  color = float4(x_29, x_31, x_33, x_35);
-  int const x_38 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  switch(((1 | x_38) ^ 1)) {
-    case 0: {
-      int const x_44 = x_8.x_GLF_uniform_int_values.arr[0].el;
-      float const x_46 = x_6.x_GLF_uniform_float_values.arr[1].el;
-      color[x_44] = x_46;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  float4 const x_48 = color;
-  *(tint_symbol_3) = x_48;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f9314fe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-      %color = OpVariable %_ptr_Function_v4float Function %5
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %29 = OpLoad %float %28
-         %30 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %31 = OpLoad %float %30
-         %32 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %36 = OpLoad %float %35
-         %37 = OpCompositeConstruct %v4float %29 %31 %33 %36
-               OpStore %color %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %40 = OpLoad %int %39
-         %42 = OpBitwiseOr %int %int_1 %40
-         %43 = OpBitwiseXor %int %42 %int_1
-               OpSelectionMerge %41 None
-               OpSwitch %43 %44 0 %45
-         %45 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %49 = OpLoad %float %48
-         %51 = OpAccessChain %_ptr_Function_float %color %47
-               OpStore %51 %49
-               OpBranch %41
-         %44 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-         %52 = OpLoad %v4float %color
-               OpStore %x_GLF_color %52
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 22c3ac0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var color : vec4<f32>;
-  let x_29 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_31 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_33 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[1];
-  color = vec4<f32>(x_29, x_31, x_33, x_35);
-  let x_38 : i32 = x_8.x_GLF_uniform_int_values[1];
-  switch(((1 | x_38) ^ 1)) {
-    case 0: {
-      let x_44 : i32 = x_8.x_GLF_uniform_int_values[0];
-      let x_46 : f32 = x_6.x_GLF_uniform_float_values[1];
-      color[x_44] = x_46;
-    }
-    default: {
-    }
-  }
-  let x_48 : vec4<f32> = color;
-  x_GLF_color = x_48;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index ab5204d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_29 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_31 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_33 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_35 = asfloat(x_6[1].x);
-  color = float4(x_29, x_31, x_33, x_35);
-  const int x_38 = asint(x_8[1].x);
-  switch(((1 | x_38) ^ 1)) {
-    case 0: {
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const int x_44 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const float x_46 = asfloat(x_6[1].x);
-      set_float4(color, x_44, x_46);
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  x_GLF_color = color;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.msl
deleted file mode 100644
index baa0074..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float4 color = 0.0f;
-  float const x_29 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_31 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_33 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  color = float4(x_29, x_31, x_33, x_35);
-  int const x_38 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  switch(((1 | x_38) ^ 1)) {
-    case 0: {
-      int const x_44 = x_8.x_GLF_uniform_int_values.arr[0].el;
-      float const x_46 = x_6.x_GLF_uniform_float_values.arr[1].el;
-      color[x_44] = x_46;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  float4 const x_48 = color;
-  *(tint_symbol_3) = x_48;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f9314fe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-      %color = OpVariable %_ptr_Function_v4float Function %5
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %29 = OpLoad %float %28
-         %30 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %31 = OpLoad %float %30
-         %32 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %36 = OpLoad %float %35
-         %37 = OpCompositeConstruct %v4float %29 %31 %33 %36
-               OpStore %color %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %40 = OpLoad %int %39
-         %42 = OpBitwiseOr %int %int_1 %40
-         %43 = OpBitwiseXor %int %42 %int_1
-               OpSelectionMerge %41 None
-               OpSwitch %43 %44 0 %45
-         %45 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %49 = OpLoad %float %48
-         %51 = OpAccessChain %_ptr_Function_float %color %47
-               OpStore %51 %49
-               OpBranch %41
-         %44 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-         %52 = OpLoad %v4float %color
-               OpStore %x_GLF_color %52
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 22c3ac0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-simplify-demanded-switch-or-xor/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var color : vec4<f32>;
-  let x_29 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_31 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_33 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[1];
-  color = vec4<f32>(x_29, x_31, x_33, x_35);
-  let x_38 : i32 = x_8.x_GLF_uniform_int_values[1];
-  switch(((1 | x_38) ^ 1)) {
-    case 0: {
-      let x_44 : i32 = x_8.x_GLF_uniform_int_values[0];
-      let x_46 : f32 = x_6.x_GLF_uniform_float_values[1];
-      color[x_44] = x_46;
-    }
-    default: {
-    }
-  }
-  let x_48 : vec4<f32> = color;
-  x_GLF_color = x_48;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f5f6825..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,81 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  int i = 0;
-  float b = 0.0f;
-  float c = 0.0f;
-  float d = 0.0f;
-  bool x_67 = false;
-  bool x_68_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_37 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_37;
-  const int x_39 = asint(x_9[1].x);
-  i = x_39;
-  while (true) {
-    const int x_44 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_44 < x_46)) {
-    } else {
-      break;
-    }
-    b = a;
-    c = b;
-    d = asin(c);
-    const float x_54 = asfloat(x_6[1].x);
-    c = x_54;
-    a = d;
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_59 = asfloat(x_6[2].x);
-  const bool x_61 = (x_59 < a);
-  x_68_phi = x_61;
-  if (x_61) {
-    const float x_64 = a;
-    const float x_66 = asfloat(x_6[3].x);
-    x_67 = (x_64 < x_66);
-    x_68_phi = x_67;
-  }
-  if (x_68_phi) {
-    const int x_73 = asint(x_9[2].x);
-    const int x_76 = asint(x_9[1].x);
-    const int x_79 = asint(x_9[1].x);
-    const int x_82 = asint(x_9[2].x);
-    x_GLF_color = float4(float(x_73), float(x_76), float(x_79), float(x_82));
-  } else {
-    const int x_86 = asint(x_9[1].x);
-    const float x_87 = float(x_86);
-    x_GLF_color = float4(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.msl
deleted file mode 100644
index d3884b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  int i = 0;
-  float b = 0.0f;
-  float c = 0.0f;
-  float d = 0.0f;
-  bool x_67 = false;
-  bool x_68_phi = false;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  a = x_37;
-  int const x_39 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_39;
-  while (true) {
-    int const x_44 = i;
-    int const x_46 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_44 < x_46)) {
-    } else {
-      break;
-    }
-    float const x_49 = a;
-    b = x_49;
-    float const x_50 = b;
-    c = x_50;
-    float const x_51 = c;
-    d = asin(x_51);
-    float const x_54 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    c = x_54;
-    float const x_55 = d;
-    a = x_55;
-    {
-      int const x_56 = i;
-      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-    }
-  }
-  float const x_59 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_60 = a;
-  bool const x_61 = (x_59 < x_60);
-  x_68_phi = x_61;
-  if (x_61) {
-    float const x_64 = a;
-    float const x_66 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    x_67 = (x_64 < x_66);
-    x_68_phi = x_67;
-  }
-  bool const x_68 = x_68_phi;
-  if (x_68) {
-    int const x_73 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    int const x_76 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_79 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_82 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_73), float(x_76), float(x_79), float(x_82));
-  } else {
-    int const x_86 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_87 = float(x_86);
-    *(tint_symbol_3) = float4(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 946dce4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 113
-; Schema: 0
-               OpCapability Shader
-         %62 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %x_67 "x_67"
-               OpName %x_68_phi "x_68_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %102 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %29
-          %b = OpVariable %_ptr_Function_float Function %26
-          %c = OpVariable %_ptr_Function_float Function %26
-          %d = OpVariable %_ptr_Function_float Function %26
-       %x_67 = OpVariable %_ptr_Function_bool Function %36
-   %x_68_phi = OpVariable %_ptr_Function_bool Function %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %42 = OpLoad %float %41
-               OpStore %a %42
-         %45 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %46 = OpLoad %int %45
-               OpStore %i %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %52 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpSLessThan %bool %51 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %48
-         %55 = OpLabel
-         %58 = OpLoad %float %a
-               OpStore %b %58
-         %59 = OpLoad %float %b
-               OpStore %c %59
-         %60 = OpLoad %float %c
-         %61 = OpExtInst %float %62 Asin %60
-               OpStore %d %61
-         %63 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %64 = OpLoad %float %63
-               OpStore %c %64
-         %65 = OpLoad %float %d
-               OpStore %a %65
-               OpBranch %49
-         %49 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %i %67
-               OpBranch %47
-         %48 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %70 = OpLoad %float %69
-         %71 = OpLoad %float %a
-         %72 = OpFOrdLessThan %bool %70 %71
-               OpStore %x_68_phi %72
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpLoad %float %a
-         %77 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %78 = OpLoad %float %77
-         %79 = OpFOrdLessThan %bool %75 %78
-               OpStore %x_67 %79
-         %80 = OpLoad %bool %x_67
-               OpStore %x_68_phi %80
-               OpBranch %73
-         %73 = OpLabel
-         %81 = OpLoad %bool %x_68_phi
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %86
-         %94 = OpConvertSToF %float %88
-         %95 = OpConvertSToF %float %90
-         %96 = OpConvertSToF %float %92
-         %97 = OpCompositeConstruct %v4float %93 %94 %95 %96
-               OpStore %x_GLF_color %97
-               OpBranch %82
-         %84 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %99 = OpLoad %int %98
-        %100 = OpConvertSToF %float %99
-        %101 = OpCompositeConstruct %v4float %100 %100 %100 %100
-               OpStore %x_GLF_color %101
-               OpBranch %82
-         %82 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %102
-        %105 = OpLabel
-        %106 = OpFunctionCall %void %main_1
-        %107 = OpLoad %v4float %x_GLF_color
-        %108 = OpCompositeConstruct %main_out %107
-               OpReturnValue %108
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %110 = OpLabel
-        %111 = OpFunctionCall %main_out %main_inner
-        %112 = OpCompositeExtract %v4float %111 0
-               OpStore %x_GLF_color_1_1 %112
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d9201c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,90 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var i : i32;
-  var b : f32;
-  var c : f32;
-  var d : f32;
-  var x_67 : bool;
-  var x_68_phi : bool;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[0];
-  a = x_37;
-  let x_39 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_39;
-  loop {
-    let x_44 : i32 = i;
-    let x_46 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_44 < x_46)) {
-    } else {
-      break;
-    }
-    let x_49 : f32 = a;
-    b = x_49;
-    let x_50 : f32 = b;
-    c = x_50;
-    let x_51 : f32 = c;
-    d = asin(x_51);
-    let x_54 : f32 = x_6.x_GLF_uniform_float_values[1];
-    c = x_54;
-    let x_55 : f32 = d;
-    a = x_55;
-
-    continuing {
-      let x_56 : i32 = i;
-      i = (x_56 + 1);
-    }
-  }
-  let x_59 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_60 : f32 = a;
-  let x_61 : bool = (x_59 < x_60);
-  x_68_phi = x_61;
-  if (x_61) {
-    let x_64 : f32 = a;
-    let x_66 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_67 = (x_64 < x_66);
-    x_68_phi = x_67;
-  }
-  let x_68 : bool = x_68_phi;
-  if (x_68) {
-    let x_73 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_76 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_79 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_82 : i32 = x_9.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_73), f32(x_76), f32(x_79), f32(x_82));
-  } else {
-    let x_86 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_87 : f32 = f32(x_86);
-    x_GLF_color = vec4<f32>(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f5f6825..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,81 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  int i = 0;
-  float b = 0.0f;
-  float c = 0.0f;
-  float d = 0.0f;
-  bool x_67 = false;
-  bool x_68_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_37 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_37;
-  const int x_39 = asint(x_9[1].x);
-  i = x_39;
-  while (true) {
-    const int x_44 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_44 < x_46)) {
-    } else {
-      break;
-    }
-    b = a;
-    c = b;
-    d = asin(c);
-    const float x_54 = asfloat(x_6[1].x);
-    c = x_54;
-    a = d;
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_59 = asfloat(x_6[2].x);
-  const bool x_61 = (x_59 < a);
-  x_68_phi = x_61;
-  if (x_61) {
-    const float x_64 = a;
-    const float x_66 = asfloat(x_6[3].x);
-    x_67 = (x_64 < x_66);
-    x_68_phi = x_67;
-  }
-  if (x_68_phi) {
-    const int x_73 = asint(x_9[2].x);
-    const int x_76 = asint(x_9[1].x);
-    const int x_79 = asint(x_9[1].x);
-    const int x_82 = asint(x_9[2].x);
-    x_GLF_color = float4(float(x_73), float(x_76), float(x_79), float(x_82));
-  } else {
-    const int x_86 = asint(x_9[1].x);
-    const float x_87 = float(x_86);
-    x_GLF_color = float4(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.msl
deleted file mode 100644
index d3884b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  int i = 0;
-  float b = 0.0f;
-  float c = 0.0f;
-  float d = 0.0f;
-  bool x_67 = false;
-  bool x_68_phi = false;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  a = x_37;
-  int const x_39 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_39;
-  while (true) {
-    int const x_44 = i;
-    int const x_46 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_44 < x_46)) {
-    } else {
-      break;
-    }
-    float const x_49 = a;
-    b = x_49;
-    float const x_50 = b;
-    c = x_50;
-    float const x_51 = c;
-    d = asin(x_51);
-    float const x_54 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    c = x_54;
-    float const x_55 = d;
-    a = x_55;
-    {
-      int const x_56 = i;
-      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-    }
-  }
-  float const x_59 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_60 = a;
-  bool const x_61 = (x_59 < x_60);
-  x_68_phi = x_61;
-  if (x_61) {
-    float const x_64 = a;
-    float const x_66 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    x_67 = (x_64 < x_66);
-    x_68_phi = x_67;
-  }
-  bool const x_68 = x_68_phi;
-  if (x_68) {
-    int const x_73 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    int const x_76 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_79 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_82 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_73), float(x_76), float(x_79), float(x_82));
-  } else {
-    int const x_86 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_87 = float(x_86);
-    *(tint_symbol_3) = float4(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 946dce4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 113
-; Schema: 0
-               OpCapability Shader
-         %62 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %x_67 "x_67"
-               OpName %x_68_phi "x_68_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %102 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %29
-          %b = OpVariable %_ptr_Function_float Function %26
-          %c = OpVariable %_ptr_Function_float Function %26
-          %d = OpVariable %_ptr_Function_float Function %26
-       %x_67 = OpVariable %_ptr_Function_bool Function %36
-   %x_68_phi = OpVariable %_ptr_Function_bool Function %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %42 = OpLoad %float %41
-               OpStore %a %42
-         %45 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %46 = OpLoad %int %45
-               OpStore %i %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %52 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpSLessThan %bool %51 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %48
-         %55 = OpLabel
-         %58 = OpLoad %float %a
-               OpStore %b %58
-         %59 = OpLoad %float %b
-               OpStore %c %59
-         %60 = OpLoad %float %c
-         %61 = OpExtInst %float %62 Asin %60
-               OpStore %d %61
-         %63 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %64 = OpLoad %float %63
-               OpStore %c %64
-         %65 = OpLoad %float %d
-               OpStore %a %65
-               OpBranch %49
-         %49 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %i %67
-               OpBranch %47
-         %48 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %70 = OpLoad %float %69
-         %71 = OpLoad %float %a
-         %72 = OpFOrdLessThan %bool %70 %71
-               OpStore %x_68_phi %72
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpLoad %float %a
-         %77 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %78 = OpLoad %float %77
-         %79 = OpFOrdLessThan %bool %75 %78
-               OpStore %x_67 %79
-         %80 = OpLoad %bool %x_67
-               OpStore %x_68_phi %80
-               OpBranch %73
-         %73 = OpLabel
-         %81 = OpLoad %bool %x_68_phi
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %86
-         %94 = OpConvertSToF %float %88
-         %95 = OpConvertSToF %float %90
-         %96 = OpConvertSToF %float %92
-         %97 = OpCompositeConstruct %v4float %93 %94 %95 %96
-               OpStore %x_GLF_color %97
-               OpBranch %82
-         %84 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %99 = OpLoad %int %98
-        %100 = OpConvertSToF %float %99
-        %101 = OpCompositeConstruct %v4float %100 %100 %100 %100
-               OpStore %x_GLF_color %101
-               OpBranch %82
-         %82 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %102
-        %105 = OpLabel
-        %106 = OpFunctionCall %void %main_1
-        %107 = OpLoad %v4float %x_GLF_color
-        %108 = OpCompositeConstruct %main_out %107
-               OpReturnValue %108
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %110 = OpLabel
-        %111 = OpFunctionCall %main_out %main_inner
-        %112 = OpCompositeExtract %v4float %111 0
-               OpStore %x_GLF_color_1_1 %112
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d9201c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-combine-vector-ops-asin/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,90 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var i : i32;
-  var b : f32;
-  var c : f32;
-  var d : f32;
-  var x_67 : bool;
-  var x_68_phi : bool;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[0];
-  a = x_37;
-  let x_39 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_39;
-  loop {
-    let x_44 : i32 = i;
-    let x_46 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_44 < x_46)) {
-    } else {
-      break;
-    }
-    let x_49 : f32 = a;
-    b = x_49;
-    let x_50 : f32 = b;
-    c = x_50;
-    let x_51 : f32 = c;
-    d = asin(x_51);
-    let x_54 : f32 = x_6.x_GLF_uniform_float_values[1];
-    c = x_54;
-    let x_55 : f32 = d;
-    a = x_55;
-
-    continuing {
-      let x_56 : i32 = i;
-      i = (x_56 + 1);
-    }
-  }
-  let x_59 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_60 : f32 = a;
-  let x_61 : bool = (x_59 < x_60);
-  x_68_phi = x_61;
-  if (x_61) {
-    let x_64 : f32 = a;
-    let x_66 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_67 = (x_64 < x_66);
-    x_68_phi = x_67;
-  }
-  let x_68 : bool = x_68_phi;
-  if (x_68) {
-    let x_73 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_76 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_79 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_82 : i32 = x_9.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_73), f32(x_76), f32(x_79), f32(x_82));
-  } else {
-    let x_86 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_87 : f32 = f32(x_86);
-    x_GLF_color = vec4<f32>(x_87, x_87, x_87, x_87);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 706a957..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_23 = asfloat(x_5[1].x);
-  if ((rsqrt(x_23) < -1.0f)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_30 = asfloat(x_5[scalar_offset / 4][scalar_offset % 4]);
-    x_GLF_color = float4(x_30, x_30, x_30, x_30);
-  } else {
-    const float x_33 = asfloat(x_5[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_35 = asfloat(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_37 = asfloat(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_39 = asfloat(x_5[1].x);
-    x_GLF_color = float4(x_33, x_35, x_37, x_39);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6662e67..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_23 = x_5.x_GLF_uniform_float_values.arr[1].el;
-  if ((rsqrt(x_23) < -1.0f)) {
-    float const x_30 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_30, x_30, x_30, x_30);
-  } else {
-    float const x_33 = x_5.x_GLF_uniform_float_values.arr[1].el;
-    float const x_35 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_37 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_39 = x_5.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_3) = float4(x_33, x_35, x_37, x_39);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5907280..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_n1 = OpConstant %float -1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %23 = OpLoad %float %22
-         %24 = OpExtInst %float %25 InverseSqrt %23
-         %27 = OpFOrdLessThan %bool %24 %float_n1
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-         %33 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %34 = OpLoad %float %33
-         %35 = OpCompositeConstruct %v4float %34 %34 %34 %34
-               OpStore %x_GLF_color %35
-               OpBranch %29
-         %31 = OpLabel
-         %36 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %37 = OpLoad %float %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %43 = OpLoad %float %42
-         %44 = OpCompositeConstruct %v4float %37 %39 %41 %43
-               OpStore %x_GLF_color %44
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 239caf2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_23 : f32 = x_5.x_GLF_uniform_float_values[1];
-  if ((inverseSqrt(x_23) < -1.0)) {
-    let x_30 : f32 = x_5.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_30, x_30, x_30, x_30);
-  } else {
-    let x_33 : f32 = x_5.x_GLF_uniform_float_values[1];
-    let x_35 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_37 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_39 : f32 = x_5.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_33, x_35, x_37, x_39);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 706a957..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_23 = asfloat(x_5[1].x);
-  if ((rsqrt(x_23) < -1.0f)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_30 = asfloat(x_5[scalar_offset / 4][scalar_offset % 4]);
-    x_GLF_color = float4(x_30, x_30, x_30, x_30);
-  } else {
-    const float x_33 = asfloat(x_5[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_35 = asfloat(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_37 = asfloat(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_39 = asfloat(x_5[1].x);
-    x_GLF_color = float4(x_33, x_35, x_37, x_39);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6662e67..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_23 = x_5.x_GLF_uniform_float_values.arr[1].el;
-  if ((rsqrt(x_23) < -1.0f)) {
-    float const x_30 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_30, x_30, x_30, x_30);
-  } else {
-    float const x_33 = x_5.x_GLF_uniform_float_values.arr[1].el;
-    float const x_35 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_37 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_39 = x_5.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_3) = float4(x_33, x_35, x_37, x_39);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5907280..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_n1 = OpConstant %float -1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %23 = OpLoad %float %22
-         %24 = OpExtInst %float %25 InverseSqrt %23
-         %27 = OpFOrdLessThan %bool %24 %float_n1
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-         %33 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %34 = OpLoad %float %33
-         %35 = OpCompositeConstruct %v4float %34 %34 %34 %34
-               OpStore %x_GLF_color %35
-               OpBranch %29
-         %31 = OpLabel
-         %36 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %37 = OpLoad %float %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %43 = OpLoad %float %42
-         %44 = OpCompositeConstruct %v4float %37 %39 %41 %43
-               OpStore %x_GLF_color %44
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 239caf2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-inst-value-tracking-inversesqrt/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_23 : f32 = x_5.x_GLF_uniform_float_values[1];
-  if ((inverseSqrt(x_23) < -1.0)) {
-    let x_30 : f32 = x_5.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_30, x_30, x_30, x_30);
-  } else {
-    let x_33 : f32 = x_5.x_GLF_uniform_float_values[1];
-    let x_35 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_37 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_39 : f32 = x_5.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_33, x_35, x_37, x_39);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 377667e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_25 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = ((1 >> asuint((x_25 << asuint(5)))) >> asuint(x_29));
-  if ((a == 1)) {
-    const int x_37 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_40 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_46 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_37), float(x_40), float(x_43), float(x_46));
-  } else {
-    const float x_50 = float(a);
-    x_GLF_color = float4(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.msl
deleted file mode 100644
index e364fa0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = ((1 >> as_type<uint>(as_type<int>((as_type<uint>(x_25) << as_type<uint>(5))))) >> as_type<uint>(x_29));
-  int const x_31 = a;
-  if ((x_31 == 1)) {
-    int const x_37 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_43 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_37), float(x_40), float(x_43), float(x_46));
-  } else {
-    int const x_49 = a;
-    float const x_50 = float(x_49);
-    *(tint_symbol_3) = float4(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 885e4b4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 70
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %59 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %28 = OpLoad %int %27
-         %31 = OpBitcast %uint %int_5
-         %33 = OpShiftLeftLogical %int %26 %31
-         %30 = OpBitcast %uint %33
-         %34 = OpShiftRightArithmetic %int %int_1 %30
-         %35 = OpBitcast %uint %28
-         %36 = OpShiftRightArithmetic %int %34 %35
-               OpStore %a %36
-         %37 = OpLoad %int %a
-         %38 = OpIEqual %bool %37 %int_1
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %51 = OpConvertSToF %float %44
-         %52 = OpConvertSToF %float %46
-         %53 = OpConvertSToF %float %48
-         %54 = OpConvertSToF %float %50
-         %55 = OpCompositeConstruct %v4float %51 %52 %53 %54
-               OpStore %x_GLF_color %55
-               OpBranch %40
-         %42 = OpLabel
-         %56 = OpLoad %int %a
-         %57 = OpConvertSToF %float %56
-         %58 = OpCompositeConstruct %v4float %57 %57 %57 %57
-               OpStore %x_GLF_color %58
-               OpBranch %40
-         %40 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %59
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %67 = OpLabel
-         %68 = OpFunctionCall %main_out %main_inner
-         %69 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %69
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 32e102d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = ((1 >> bitcast<u32>((x_25 << bitcast<u32>(5)))) >> bitcast<u32>(x_29));
-  let x_31 : i32 = a;
-  if ((x_31 == 1)) {
-    let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_43 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_37), f32(x_40), f32(x_43), f32(x_46));
-  } else {
-    let x_49 : i32 = a;
-    let x_50 : f32 = f32(x_49);
-    x_GLF_color = vec4<f32>(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 377667e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_25 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = ((1 >> asuint((x_25 << asuint(5)))) >> asuint(x_29));
-  if ((a == 1)) {
-    const int x_37 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_40 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_46 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_37), float(x_40), float(x_43), float(x_46));
-  } else {
-    const float x_50 = float(a);
-    x_GLF_color = float4(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.msl
deleted file mode 100644
index e364fa0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = ((1 >> as_type<uint>(as_type<int>((as_type<uint>(x_25) << as_type<uint>(5))))) >> as_type<uint>(x_29));
-  int const x_31 = a;
-  if ((x_31 == 1)) {
-    int const x_37 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_43 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_37), float(x_40), float(x_43), float(x_46));
-  } else {
-    int const x_49 = a;
-    float const x_50 = float(x_49);
-    *(tint_symbol_3) = float4(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 885e4b4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 70
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %59 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %28 = OpLoad %int %27
-         %31 = OpBitcast %uint %int_5
-         %33 = OpShiftLeftLogical %int %26 %31
-         %30 = OpBitcast %uint %33
-         %34 = OpShiftRightArithmetic %int %int_1 %30
-         %35 = OpBitcast %uint %28
-         %36 = OpShiftRightArithmetic %int %34 %35
-               OpStore %a %36
-         %37 = OpLoad %int %a
-         %38 = OpIEqual %bool %37 %int_1
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %51 = OpConvertSToF %float %44
-         %52 = OpConvertSToF %float %46
-         %53 = OpConvertSToF %float %48
-         %54 = OpConvertSToF %float %50
-         %55 = OpCompositeConstruct %v4float %51 %52 %53 %54
-               OpStore %x_GLF_color %55
-               OpBranch %40
-         %42 = OpLabel
-         %56 = OpLoad %int %a
-         %57 = OpConvertSToF %float %56
-         %58 = OpCompositeConstruct %v4float %57 %57 %57 %57
-               OpStore %x_GLF_color %58
-               OpBranch %40
-         %40 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %59
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %67 = OpLabel
-         %68 = OpFunctionCall %main_out %main_inner
-         %69 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %69
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 32e102d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-bit-shifting/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = ((1 >> bitcast<u32>((x_25 << bitcast<u32>(5)))) >> bitcast<u32>(x_29));
-  let x_31 : i32 = a;
-  if ((x_31 == 1)) {
-    let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_43 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_37), f32(x_40), f32(x_43), f32(x_46));
-  } else {
-    let x_49 : i32 = a;
-    let x_50 : f32 = f32(x_49);
-    x_GLF_color = vec4<f32>(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b808035..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,52 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_34 = asint(x_6[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = float2(float(x_31), float(x_34))[(x_38 | 1)];
-  const float x_41 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_43 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_41 == x_43)) {
-    const float x_48 = a;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_53 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(x_48, float(x_50), float(x_53), a);
-  } else {
-    const float x_57 = a;
-    x_GLF_color = float4(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.msl
deleted file mode 100644
index 19b0bfa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_34 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = float2(float(x_31), float(x_34))[(x_38 | 1)];
-  float const x_41 = a;
-  float const x_43 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_41 == x_43)) {
-    float const x_48 = a;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_55 = a;
-    *(tint_symbol_3) = float4(x_48, float(x_50), float(x_53), x_55);
-  } else {
-    float const x_57 = a;
-    *(tint_symbol_3) = float4(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0afcff1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,124 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 74
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-    %v2float = OpTypeVector %float 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %63 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %26
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %36 = OpLoad %int %35
-         %38 = OpConvertSToF %float %31
-         %39 = OpConvertSToF %float %34
-         %40 = OpCompositeConstruct %v2float %38 %39
-         %41 = OpBitwiseOr %int %36 %int_1
-         %42 = OpVectorExtractDynamic %float %40 %41
-               OpStore %a %42
-         %43 = OpLoad %float %a
-         %45 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %46 = OpLoad %float %45
-         %47 = OpFOrdEqual %bool %43 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-         %52 = OpLoad %float %a
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpLoad %float %a
-         %58 = OpConvertSToF %float %54
-         %59 = OpConvertSToF %float %56
-         %60 = OpCompositeConstruct %v4float %52 %58 %59 %57
-               OpStore %x_GLF_color %60
-               OpBranch %49
-         %51 = OpLabel
-         %61 = OpLoad %float %a
-         %62 = OpCompositeConstruct %v4float %61 %61 %61 %61
-               OpStore %x_GLF_color %62
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %71 = OpLabel
-         %72 = OpFunctionCall %main_out %main_inner
-         %73 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %73
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1210250..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_34 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = vec2<f32>(f32(x_31), f32(x_34))[(x_38 | 1)];
-  let x_41 : f32 = a;
-  let x_43 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_41 == x_43)) {
-    let x_48 : f32 = a;
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_55 : f32 = a;
-    x_GLF_color = vec4<f32>(x_48, f32(x_50), f32(x_53), x_55);
-  } else {
-    let x_57 : f32 = a;
-    x_GLF_color = vec4<f32>(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b808035..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,52 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_34 = asint(x_6[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = float2(float(x_31), float(x_34))[(x_38 | 1)];
-  const float x_41 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_43 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_41 == x_43)) {
-    const float x_48 = a;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_53 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(x_48, float(x_50), float(x_53), a);
-  } else {
-    const float x_57 = a;
-    x_GLF_color = float4(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.msl
deleted file mode 100644
index 19b0bfa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_34 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = float2(float(x_31), float(x_34))[(x_38 | 1)];
-  float const x_41 = a;
-  float const x_43 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_41 == x_43)) {
-    float const x_48 = a;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_53 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_55 = a;
-    *(tint_symbol_3) = float4(x_48, float(x_50), float(x_53), x_55);
-  } else {
-    float const x_57 = a;
-    *(tint_symbol_3) = float4(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0afcff1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,124 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 74
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-    %v2float = OpTypeVector %float 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %63 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %26
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %36 = OpLoad %int %35
-         %38 = OpConvertSToF %float %31
-         %39 = OpConvertSToF %float %34
-         %40 = OpCompositeConstruct %v2float %38 %39
-         %41 = OpBitwiseOr %int %36 %int_1
-         %42 = OpVectorExtractDynamic %float %40 %41
-               OpStore %a %42
-         %43 = OpLoad %float %a
-         %45 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %46 = OpLoad %float %45
-         %47 = OpFOrdEqual %bool %43 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-         %52 = OpLoad %float %a
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpLoad %float %a
-         %58 = OpConvertSToF %float %54
-         %59 = OpConvertSToF %float %56
-         %60 = OpCompositeConstruct %v4float %52 %58 %59 %57
-               OpStore %x_GLF_color %60
-               OpBranch %49
-         %51 = OpLabel
-         %61 = OpLoad %float %a
-         %62 = OpCompositeConstruct %v4float %61 %61 %61 %61
-               OpStore %x_GLF_color %62
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %71 = OpLabel
-         %72 = OpFunctionCall %main_out %main_inner
-         %73 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %73
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1210250..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inclusive-or/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_34 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = vec2<f32>(f32(x_31), f32(x_34))[(x_38 | 1)];
-  let x_41 : f32 = a;
-  let x_43 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_41 == x_43)) {
-    let x_48 : f32 = a;
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_53 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_55 : f32 = a;
-    x_GLF_color = vec4<f32>(x_48, f32(x_50), f32(x_53), x_55);
-  } else {
-    let x_57 : f32 = a;
-    x_GLF_color = vec4<f32>(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 16a804b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,178 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[12];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int f_i1_(inout int a) {
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_16 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  i = x_16;
-  while (true) {
-    const int x_17 = i;
-    const int x_18 = asint(x_8[6].x);
-    if ((x_17 < x_18)) {
-    } else {
-      break;
-    }
-    const int x_19 = i;
-    const int x_20 = asint(x_8[2].x);
-    if ((x_19 > x_20)) {
-      const int x_21 = a;
-      return x_21;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_24 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  return x_24;
-}
-
-void main_1() {
-  int ref[10] = (int[10])0;
-  int i_1 = 0;
-  int a_1[10] = (int[10])0;
-  int param = 0;
-  int param_1 = 0;
-  int i_2 = 0;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_25 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_26 = asint(x_8[1].x);
-  ref[x_25] = x_26;
-  const int x_27 = asint(x_8[11].x);
-  const int x_28 = asint(x_8[2].x);
-  ref[x_27] = x_28;
-  const int x_29 = asint(x_8[1].x);
-  const int x_30 = asint(x_8[3].x);
-  ref[x_29] = x_30;
-  const int x_31 = asint(x_8[2].x);
-  const int x_32 = asint(x_8[4].x);
-  ref[x_31] = x_32;
-  const int x_33 = asint(x_8[3].x);
-  const int x_34 = asint(x_8[5].x);
-  ref[x_33] = x_34;
-  const int x_35 = asint(x_8[4].x);
-  const int x_36 = asint(x_8[6].x);
-  ref[x_35] = x_36;
-  const int x_37 = asint(x_8[5].x);
-  const int x_38 = asint(x_8[7].x);
-  ref[x_37] = x_38;
-  const int x_39 = asint(x_8[8].x);
-  const int x_40 = asint(x_8[8].x);
-  ref[x_39] = x_40;
-  const int x_41 = asint(x_8[9].x);
-  const int x_42 = asint(x_8[9].x);
-  ref[x_41] = x_42;
-  const int x_43 = asint(x_8[10].x);
-  const int x_44 = asint(x_8[10].x);
-  ref[x_43] = x_44;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  i_1 = x_45;
-  while (true) {
-    const int x_46 = i_1;
-    const int x_47 = asint(x_8[6].x);
-    if ((x_46 < x_47)) {
-    } else {
-      break;
-    }
-    a_1[i_1] = i_1;
-    const int x_50 = i_1;
-    const int x_51 = asint(x_8[6].x);
-    const int x_52 = asint(x_8[1].x);
-    if ((x_50 < (x_51 / x_52))) {
-      const int x_54 = i_1;
-      const int x_55 = i_1;
-      const int x_56 = asint(x_8[1].x);
-      a_1[x_54] = (x_55 + x_56);
-      const int x_58 = i_1;
-      const int x_59 = asint(x_8[6].x);
-      if ((x_58 < x_59)) {
-        {
-          i_1 = (i_1 + 1);
-        }
-        continue;
-      }
-      const int x_60 = i_1;
-      const int x_61 = i_1;
-      const int x_62 = asint(x_8[8].x);
-      a_1[x_60] = (x_61 + x_62);
-      const int x_65 = a_1[i_1];
-      param = x_65;
-      const int x_66 = f_i1_(param);
-      const int x_67 = asint(x_8[8].x);
-      if ((x_66 < x_67)) {
-        const int x_182_save = i_1;
-        const int x_69 = a_1[x_182_save];
-        a_1[x_182_save] = (x_69 - 1);
-      }
-    } else {
-      const int x_72 = a_1[i_1];
-      param_1 = x_72;
-      const int x_73 = f_i1_(param_1);
-      const int x_74 = asint(x_8[8].x);
-      if ((x_73 < x_74)) {
-        const int x_75 = i_1;
-        const int x_76 = asint(x_8[4].x);
-        const int x_77 = a_1[x_75];
-        a_1[x_75] = (x_77 + x_76);
-      }
-    }
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_81 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  i_2 = x_81;
-  while (true) {
-    const int x_82 = i_2;
-    const int x_83 = asint(x_8[6].x);
-    if ((x_82 < x_83)) {
-    } else {
-      break;
-    }
-    const int x_85 = a_1[i_2];
-    const int x_87 = ref[i_2];
-    if ((x_85 != x_87)) {
-      const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-      const int x_88 = asint(x_8[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-      const float x_205 = float(x_88);
-      x_GLF_color = float4(x_205, x_205, x_205, x_205);
-      return;
-    }
-    {
-      i_2 = (i_2 + 1);
-    }
-  }
-  const int x_91 = asint(x_8[11].x);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const int x_92 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const int x_93 = asint(x_8[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  const int x_94 = asint(x_8[11].x);
-  x_GLF_color = float4(float(x_91), float(x_92), float(x_93), float(x_94));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.msl
deleted file mode 100644
index e7f0fdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,194 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[12];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int f_i1_(constant buf0& x_8, thread int* const a) {
-  int i = 0;
-  int const x_16 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i = x_16;
-  while (true) {
-    int const x_17 = i;
-    int const x_18 = x_8.x_GLF_uniform_int_values.arr[6].el;
-    if ((x_17 < x_18)) {
-    } else {
-      break;
-    }
-    int const x_19 = i;
-    int const x_20 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_19 > x_20)) {
-      int const x_21 = *(a);
-      return x_21;
-    }
-    {
-      int const x_22 = i;
-      i = as_type<int>((as_type<uint>(x_22) + as_type<uint>(1)));
-    }
-  }
-  int const x_24 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  return x_24;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_1 ref = {};
-  int i_1 = 0;
-  tint_array_wrapper_1 a_1 = {};
-  int param = 0;
-  int param_1 = 0;
-  int i_2 = 0;
-  int const x_25 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_26 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_25] = x_26;
-  int const x_27 = x_8.x_GLF_uniform_int_values.arr[11].el;
-  int const x_28 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_27] = x_28;
-  int const x_29 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_30 = x_8.x_GLF_uniform_int_values.arr[3].el;
-  ref.arr[x_29] = x_30;
-  int const x_31 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  int const x_32 = x_8.x_GLF_uniform_int_values.arr[4].el;
-  ref.arr[x_31] = x_32;
-  int const x_33 = x_8.x_GLF_uniform_int_values.arr[3].el;
-  int const x_34 = x_8.x_GLF_uniform_int_values.arr[5].el;
-  ref.arr[x_33] = x_34;
-  int const x_35 = x_8.x_GLF_uniform_int_values.arr[4].el;
-  int const x_36 = x_8.x_GLF_uniform_int_values.arr[6].el;
-  ref.arr[x_35] = x_36;
-  int const x_37 = x_8.x_GLF_uniform_int_values.arr[5].el;
-  int const x_38 = x_8.x_GLF_uniform_int_values.arr[7].el;
-  ref.arr[x_37] = x_38;
-  int const x_39 = x_8.x_GLF_uniform_int_values.arr[8].el;
-  int const x_40 = x_8.x_GLF_uniform_int_values.arr[8].el;
-  ref.arr[x_39] = x_40;
-  int const x_41 = x_8.x_GLF_uniform_int_values.arr[9].el;
-  int const x_42 = x_8.x_GLF_uniform_int_values.arr[9].el;
-  ref.arr[x_41] = x_42;
-  int const x_43 = x_8.x_GLF_uniform_int_values.arr[10].el;
-  int const x_44 = x_8.x_GLF_uniform_int_values.arr[10].el;
-  ref.arr[x_43] = x_44;
-  int const x_45 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i_1 = x_45;
-  while (true) {
-    int const x_46 = i_1;
-    int const x_47 = x_8.x_GLF_uniform_int_values.arr[6].el;
-    if ((x_46 < x_47)) {
-    } else {
-      break;
-    }
-    int const x_48 = i_1;
-    int const x_49 = i_1;
-    a_1.arr[x_48] = x_49;
-    int const x_50 = i_1;
-    int const x_51 = x_8.x_GLF_uniform_int_values.arr[6].el;
-    int const x_52 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_50 < (x_51 / x_52))) {
-      int const x_54 = i_1;
-      int const x_55 = i_1;
-      int const x_56 = x_8.x_GLF_uniform_int_values.arr[1].el;
-      a_1.arr[x_54] = as_type<int>((as_type<uint>(x_55) + as_type<uint>(x_56)));
-      int const x_58 = i_1;
-      int const x_59 = x_8.x_GLF_uniform_int_values.arr[6].el;
-      if ((x_58 < x_59)) {
-        {
-          int const x_79 = i_1;
-          i_1 = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-        }
-        continue;
-      }
-      int const x_60 = i_1;
-      int const x_61 = i_1;
-      int const x_62 = x_8.x_GLF_uniform_int_values.arr[8].el;
-      a_1.arr[x_60] = as_type<int>((as_type<uint>(x_61) + as_type<uint>(x_62)));
-      int const x_64 = i_1;
-      int const x_65 = a_1.arr[x_64];
-      param = x_65;
-      int const x_66 = f_i1_(x_8, &(param));
-      int const x_67 = x_8.x_GLF_uniform_int_values.arr[8].el;
-      if ((x_66 < x_67)) {
-        int const x_68 = i_1;
-        int const x_182_save = x_68;
-        int const x_69 = a_1.arr[x_182_save];
-        a_1.arr[x_182_save] = as_type<int>((as_type<uint>(x_69) - as_type<uint>(1)));
-      }
-    } else {
-      int const x_71 = i_1;
-      int const x_72 = a_1.arr[x_71];
-      param_1 = x_72;
-      int const x_73 = f_i1_(x_8, &(param_1));
-      int const x_74 = x_8.x_GLF_uniform_int_values.arr[8].el;
-      if ((x_73 < x_74)) {
-        int const x_75 = i_1;
-        int const x_76 = x_8.x_GLF_uniform_int_values.arr[4].el;
-        int const x_77 = a_1.arr[x_75];
-        a_1.arr[x_75] = as_type<int>((as_type<uint>(x_77) + as_type<uint>(x_76)));
-      }
-    }
-    {
-      int const x_79 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-    }
-  }
-  int const x_81 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i_2 = x_81;
-  while (true) {
-    int const x_82 = i_2;
-    int const x_83 = x_8.x_GLF_uniform_int_values.arr[6].el;
-    if ((x_82 < x_83)) {
-    } else {
-      break;
-    }
-    int const x_84 = i_2;
-    int const x_85 = a_1.arr[x_84];
-    int const x_86 = i_2;
-    int const x_87 = ref.arr[x_86];
-    if ((x_85 != x_87)) {
-      int const x_88 = x_8.x_GLF_uniform_int_values.arr[0].el;
-      float const x_205 = float(x_88);
-      *(tint_symbol_3) = float4(x_205, x_205, x_205, x_205);
-      return;
-    }
-    {
-      int const x_89 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_89) + as_type<uint>(1)));
-    }
-  }
-  int const x_91 = x_8.x_GLF_uniform_int_values.arr[11].el;
-  int const x_92 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_93 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_94 = x_8.x_GLF_uniform_int_values.arr[11].el;
-  *(tint_symbol_3) = float4(float(x_91), float(x_92), float(x_93), float(x_94));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b07c299..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,369 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 256
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_i1_ "f_i1_"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %ref "ref"
-               OpName %i_1 "i_1"
-               OpName %a_1 "a_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %i_2 "i_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_12 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_12 = OpConstant %uint 12
-%_arr_int_uint_12 = OpTypeArray %int %uint_12
-       %buf0 = OpTypeStruct %_arr_int_uint_12
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpTypeFunction %int %_ptr_Function_int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_6 = OpConstant %int 6
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %54 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %62 = OpConstantNull %_arr_int_uint_10
-     %int_11 = OpConstant %int 11
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-   %main_out = OpTypeStruct %v4float
-        %245 = OpTypeFunction %main_out
-      %f_i1_ = OpFunction %int None %15
-          %a = OpFunctionParameter %_ptr_Function_int
-         %19 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %26 = OpLoad %int %25
-               OpStore %i %26
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %31 = OpLoad %int %i
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-         %34 = OpLoad %int %33
-         %35 = OpSLessThan %bool %31 %34
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %28
-         %37 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %43 = OpLoad %int %42
-         %44 = OpSGreaterThan %bool %40 %43
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-         %48 = OpLoad %int %a
-               OpReturnValue %48
-         %45 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %i %51
-               OpBranch %27
-         %28 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %53 = OpLoad %int %52
-               OpReturnValue %53
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %54
-         %57 = OpLabel
-        %ref = OpVariable %_ptr_Function__arr_int_uint_10 Function %62
-        %i_1 = OpVariable %_ptr_Function_int Function %21
-        %a_1 = OpVariable %_ptr_Function__arr_int_uint_10 Function %62
-      %param = OpVariable %_ptr_Function_int Function %21
-    %param_1 = OpVariable %_ptr_Function_int Function %21
-        %i_2 = OpVariable %_ptr_Function_int Function %21
-         %68 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Function_int %ref %69
-               OpStore %72 %71
-         %74 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_11
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Function_int %ref %75
-               OpStore %78 %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %82 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Function_int %ref %80
-               OpStore %84 %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %86 = OpLoad %int %85
-         %88 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Function_int %ref %86
-               OpStore %90 %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %92 = OpLoad %int %91
-         %94 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_5
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Function_int %ref %92
-               OpStore %96 %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Function_int %ref %98
-               OpStore %101 %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_5
-        %103 = OpLoad %int %102
-        %105 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_7
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Function_int %ref %103
-               OpStore %107 %106
-        %109 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %112 = OpLoad %int %111
-        %113 = OpAccessChain %_ptr_Function_int %ref %110
-               OpStore %113 %112
-        %115 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_9
-        %116 = OpLoad %int %115
-        %117 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_9
-        %118 = OpLoad %int %117
-        %119 = OpAccessChain %_ptr_Function_int %ref %116
-               OpStore %119 %118
-        %121 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_10
-        %122 = OpLoad %int %121
-        %123 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_10
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Function_int %ref %122
-               OpStore %125 %124
-        %126 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %127 = OpLoad %int %126
-               OpStore %i_1 %127
-               OpBranch %128
-        %128 = OpLabel
-               OpLoopMerge %129 %130 None
-               OpBranch %131
-        %131 = OpLabel
-        %132 = OpLoad %int %i_1
-        %133 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %134 = OpLoad %int %133
-        %135 = OpSLessThan %bool %132 %134
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %138
-        %137 = OpLabel
-               OpBranch %136
-        %138 = OpLabel
-               OpBranch %129
-        %136 = OpLabel
-        %139 = OpLoad %int %i_1
-        %140 = OpLoad %int %i_1
-        %141 = OpAccessChain %_ptr_Function_int %a_1 %139
-               OpStore %141 %140
-        %142 = OpLoad %int %i_1
-        %143 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %144 = OpLoad %int %143
-        %145 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %146 = OpLoad %int %145
-        %147 = OpSDiv %int %144 %146
-        %148 = OpSLessThan %bool %142 %147
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %151
-        %150 = OpLabel
-        %152 = OpLoad %int %i_1
-        %153 = OpLoad %int %i_1
-        %154 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %155 = OpLoad %int %154
-        %156 = OpAccessChain %_ptr_Function_int %a_1 %152
-        %157 = OpIAdd %int %153 %155
-               OpStore %156 %157
-        %158 = OpLoad %int %i_1
-        %159 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %160 = OpLoad %int %159
-        %161 = OpSLessThan %bool %158 %160
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %162
-        %163 = OpLabel
-               OpBranch %130
-        %162 = OpLabel
-        %164 = OpLoad %int %i_1
-        %165 = OpLoad %int %i_1
-        %166 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %167 = OpLoad %int %166
-        %168 = OpAccessChain %_ptr_Function_int %a_1 %164
-        %169 = OpIAdd %int %165 %167
-               OpStore %168 %169
-        %170 = OpLoad %int %i_1
-        %171 = OpAccessChain %_ptr_Function_int %a_1 %170
-        %172 = OpLoad %int %171
-               OpStore %param %172
-        %173 = OpFunctionCall %int %f_i1_ %param
-        %175 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %176 = OpLoad %int %175
-        %177 = OpSLessThan %bool %173 %176
-               OpSelectionMerge %178 None
-               OpBranchConditional %177 %179 %178
-        %179 = OpLabel
-        %180 = OpLoad %int %i_1
-        %181 = OpAccessChain %_ptr_Function_int %a_1 %180
-        %182 = OpLoad %int %181
-        %183 = OpAccessChain %_ptr_Function_int %a_1 %180
-        %184 = OpISub %int %182 %int_1
-               OpStore %183 %184
-               OpBranch %178
-        %178 = OpLabel
-               OpBranch %149
-        %151 = OpLabel
-        %185 = OpLoad %int %i_1
-        %186 = OpAccessChain %_ptr_Function_int %a_1 %185
-        %187 = OpLoad %int %186
-               OpStore %param_1 %187
-        %188 = OpFunctionCall %int %f_i1_ %param_1
-        %190 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %191 = OpLoad %int %190
-        %192 = OpSLessThan %bool %188 %191
-               OpSelectionMerge %193 None
-               OpBranchConditional %192 %194 %193
-        %194 = OpLabel
-        %195 = OpLoad %int %i_1
-        %196 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-        %197 = OpLoad %int %196
-        %198 = OpAccessChain %_ptr_Function_int %a_1 %195
-        %199 = OpLoad %int %198
-        %200 = OpAccessChain %_ptr_Function_int %a_1 %195
-        %201 = OpIAdd %int %199 %197
-               OpStore %200 %201
-               OpBranch %193
-        %193 = OpLabel
-               OpBranch %149
-        %149 = OpLabel
-               OpBranch %130
-        %130 = OpLabel
-        %202 = OpLoad %int %i_1
-        %203 = OpIAdd %int %202 %int_1
-               OpStore %i_1 %203
-               OpBranch %128
-        %129 = OpLabel
-        %204 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %205 = OpLoad %int %204
-               OpStore %i_2 %205
-               OpBranch %206
-        %206 = OpLabel
-               OpLoopMerge %207 %208 None
-               OpBranch %209
-        %209 = OpLabel
-        %210 = OpLoad %int %i_2
-        %211 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %212 = OpLoad %int %211
-        %213 = OpSLessThan %bool %210 %212
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-               OpBranch %207
-        %214 = OpLabel
-        %217 = OpLoad %int %i_2
-        %218 = OpAccessChain %_ptr_Function_int %a_1 %217
-        %219 = OpLoad %int %218
-        %220 = OpLoad %int %i_2
-        %221 = OpAccessChain %_ptr_Function_int %ref %220
-        %222 = OpLoad %int %221
-        %223 = OpINotEqual %bool %219 %222
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %224
-        %225 = OpLabel
-        %226 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %227 = OpLoad %int %226
-        %228 = OpConvertSToF %float %227
-        %229 = OpCompositeConstruct %v4float %228 %228 %228 %228
-               OpStore %x_GLF_color %229
-               OpReturn
-        %224 = OpLabel
-               OpBranch %208
-        %208 = OpLabel
-        %230 = OpLoad %int %i_2
-        %231 = OpIAdd %int %230 %int_1
-               OpStore %i_2 %231
-               OpBranch %206
-        %207 = OpLabel
-        %232 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_11
-        %233 = OpLoad %int %232
-        %234 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %235 = OpLoad %int %234
-        %236 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %237 = OpLoad %int %236
-        %238 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_11
-        %239 = OpLoad %int %238
-        %240 = OpConvertSToF %float %233
-        %241 = OpConvertSToF %float %235
-        %242 = OpConvertSToF %float %237
-        %243 = OpConvertSToF %float %239
-        %244 = OpCompositeConstruct %v4float %240 %241 %242 %243
-               OpStore %x_GLF_color %244
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %245
-        %248 = OpLabel
-        %249 = OpFunctionCall %void %main_1
-        %250 = OpLoad %v4float %x_GLF_color
-        %251 = OpCompositeConstruct %main_out %250
-               OpReturnValue %251
-               OpFunctionEnd
-       %main = OpFunction %void None %54
-        %253 = OpLabel
-        %254 = OpFunctionCall %main_out %main_inner
-        %255 = OpCompositeExtract %v4float %254 0
-               OpStore %x_GLF_color_1_1 %255
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 37cab95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,177 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 12>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_i1_(a : ptr<function, i32>) -> i32 {
-  var i : i32;
-  let x_16 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i = x_16;
-  loop {
-    let x_17 : i32 = i;
-    let x_18 : i32 = x_8.x_GLF_uniform_int_values[6];
-    if ((x_17 < x_18)) {
-    } else {
-      break;
-    }
-    let x_19 : i32 = i;
-    let x_20 : i32 = x_8.x_GLF_uniform_int_values[2];
-    if ((x_19 > x_20)) {
-      let x_21 : i32 = *(a);
-      return x_21;
-    }
-
-    continuing {
-      let x_22 : i32 = i;
-      i = (x_22 + 1);
-    }
-  }
-  let x_24 : i32 = x_8.x_GLF_uniform_int_values[0];
-  return x_24;
-}
-
-fn main_1() {
-  var ref : array<i32, 10>;
-  var i_1 : i32;
-  var a_1 : array<i32, 10>;
-  var param : i32;
-  var param_1 : i32;
-  var i_2 : i32;
-  let x_25 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_26 : i32 = x_8.x_GLF_uniform_int_values[1];
-  ref[x_25] = x_26;
-  let x_27 : i32 = x_8.x_GLF_uniform_int_values[11];
-  let x_28 : i32 = x_8.x_GLF_uniform_int_values[2];
-  ref[x_27] = x_28;
-  let x_29 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_30 : i32 = x_8.x_GLF_uniform_int_values[3];
-  ref[x_29] = x_30;
-  let x_31 : i32 = x_8.x_GLF_uniform_int_values[2];
-  let x_32 : i32 = x_8.x_GLF_uniform_int_values[4];
-  ref[x_31] = x_32;
-  let x_33 : i32 = x_8.x_GLF_uniform_int_values[3];
-  let x_34 : i32 = x_8.x_GLF_uniform_int_values[5];
-  ref[x_33] = x_34;
-  let x_35 : i32 = x_8.x_GLF_uniform_int_values[4];
-  let x_36 : i32 = x_8.x_GLF_uniform_int_values[6];
-  ref[x_35] = x_36;
-  let x_37 : i32 = x_8.x_GLF_uniform_int_values[5];
-  let x_38 : i32 = x_8.x_GLF_uniform_int_values[7];
-  ref[x_37] = x_38;
-  let x_39 : i32 = x_8.x_GLF_uniform_int_values[8];
-  let x_40 : i32 = x_8.x_GLF_uniform_int_values[8];
-  ref[x_39] = x_40;
-  let x_41 : i32 = x_8.x_GLF_uniform_int_values[9];
-  let x_42 : i32 = x_8.x_GLF_uniform_int_values[9];
-  ref[x_41] = x_42;
-  let x_43 : i32 = x_8.x_GLF_uniform_int_values[10];
-  let x_44 : i32 = x_8.x_GLF_uniform_int_values[10];
-  ref[x_43] = x_44;
-  let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i_1 = x_45;
-  loop {
-    let x_46 : i32 = i_1;
-    let x_47 : i32 = x_8.x_GLF_uniform_int_values[6];
-    if ((x_46 < x_47)) {
-    } else {
-      break;
-    }
-    let x_48 : i32 = i_1;
-    let x_49 : i32 = i_1;
-    a_1[x_48] = x_49;
-    let x_50 : i32 = i_1;
-    let x_51 : i32 = x_8.x_GLF_uniform_int_values[6];
-    let x_52 : i32 = x_8.x_GLF_uniform_int_values[1];
-    if ((x_50 < (x_51 / x_52))) {
-      let x_54 : i32 = i_1;
-      let x_55 : i32 = i_1;
-      let x_56 : i32 = x_8.x_GLF_uniform_int_values[1];
-      a_1[x_54] = (x_55 + x_56);
-      let x_58 : i32 = i_1;
-      let x_59 : i32 = x_8.x_GLF_uniform_int_values[6];
-      if ((x_58 < x_59)) {
-        continue;
-      }
-      let x_60 : i32 = i_1;
-      let x_61 : i32 = i_1;
-      let x_62 : i32 = x_8.x_GLF_uniform_int_values[8];
-      a_1[x_60] = (x_61 + x_62);
-      let x_64 : i32 = i_1;
-      let x_65 : i32 = a_1[x_64];
-      param = x_65;
-      let x_66 : i32 = f_i1_(&(param));
-      let x_67 : i32 = x_8.x_GLF_uniform_int_values[8];
-      if ((x_66 < x_67)) {
-        let x_68 : i32 = i_1;
-        let x_182 : ptr<function, i32> = &(a_1[x_68]);
-        let x_69 : i32 = *(x_182);
-        *(x_182) = (x_69 - 1);
-      }
-    } else {
-      let x_71 : i32 = i_1;
-      let x_72 : i32 = a_1[x_71];
-      param_1 = x_72;
-      let x_73 : i32 = f_i1_(&(param_1));
-      let x_74 : i32 = x_8.x_GLF_uniform_int_values[8];
-      if ((x_73 < x_74)) {
-        let x_75 : i32 = i_1;
-        let x_76 : i32 = x_8.x_GLF_uniform_int_values[4];
-        let x_77 : i32 = a_1[x_75];
-        a_1[x_75] = (x_77 + x_76);
-      }
-    }
-
-    continuing {
-      let x_79 : i32 = i_1;
-      i_1 = (x_79 + 1);
-    }
-  }
-  let x_81 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i_2 = x_81;
-  loop {
-    let x_82 : i32 = i_2;
-    let x_83 : i32 = x_8.x_GLF_uniform_int_values[6];
-    if ((x_82 < x_83)) {
-    } else {
-      break;
-    }
-    let x_84 : i32 = i_2;
-    let x_85 : i32 = a_1[x_84];
-    let x_86 : i32 = i_2;
-    let x_87 : i32 = ref[x_86];
-    if ((x_85 != x_87)) {
-      let x_88 : i32 = x_8.x_GLF_uniform_int_values[0];
-      let x_205 : f32 = f32(x_88);
-      x_GLF_color = vec4<f32>(x_205, x_205, x_205, x_205);
-      return;
-    }
-
-    continuing {
-      let x_89 : i32 = i_2;
-      i_2 = (x_89 + 1);
-    }
-  }
-  let x_91 : i32 = x_8.x_GLF_uniform_int_values[11];
-  let x_92 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_93 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_94 : i32 = x_8.x_GLF_uniform_int_values[11];
-  x_GLF_color = vec4<f32>(f32(x_91), f32(x_92), f32(x_93), f32(x_94));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 16a804b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,178 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[12];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int f_i1_(inout int a) {
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_16 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  i = x_16;
-  while (true) {
-    const int x_17 = i;
-    const int x_18 = asint(x_8[6].x);
-    if ((x_17 < x_18)) {
-    } else {
-      break;
-    }
-    const int x_19 = i;
-    const int x_20 = asint(x_8[2].x);
-    if ((x_19 > x_20)) {
-      const int x_21 = a;
-      return x_21;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_24 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  return x_24;
-}
-
-void main_1() {
-  int ref[10] = (int[10])0;
-  int i_1 = 0;
-  int a_1[10] = (int[10])0;
-  int param = 0;
-  int param_1 = 0;
-  int i_2 = 0;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_25 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_26 = asint(x_8[1].x);
-  ref[x_25] = x_26;
-  const int x_27 = asint(x_8[11].x);
-  const int x_28 = asint(x_8[2].x);
-  ref[x_27] = x_28;
-  const int x_29 = asint(x_8[1].x);
-  const int x_30 = asint(x_8[3].x);
-  ref[x_29] = x_30;
-  const int x_31 = asint(x_8[2].x);
-  const int x_32 = asint(x_8[4].x);
-  ref[x_31] = x_32;
-  const int x_33 = asint(x_8[3].x);
-  const int x_34 = asint(x_8[5].x);
-  ref[x_33] = x_34;
-  const int x_35 = asint(x_8[4].x);
-  const int x_36 = asint(x_8[6].x);
-  ref[x_35] = x_36;
-  const int x_37 = asint(x_8[5].x);
-  const int x_38 = asint(x_8[7].x);
-  ref[x_37] = x_38;
-  const int x_39 = asint(x_8[8].x);
-  const int x_40 = asint(x_8[8].x);
-  ref[x_39] = x_40;
-  const int x_41 = asint(x_8[9].x);
-  const int x_42 = asint(x_8[9].x);
-  ref[x_41] = x_42;
-  const int x_43 = asint(x_8[10].x);
-  const int x_44 = asint(x_8[10].x);
-  ref[x_43] = x_44;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  i_1 = x_45;
-  while (true) {
-    const int x_46 = i_1;
-    const int x_47 = asint(x_8[6].x);
-    if ((x_46 < x_47)) {
-    } else {
-      break;
-    }
-    a_1[i_1] = i_1;
-    const int x_50 = i_1;
-    const int x_51 = asint(x_8[6].x);
-    const int x_52 = asint(x_8[1].x);
-    if ((x_50 < (x_51 / x_52))) {
-      const int x_54 = i_1;
-      const int x_55 = i_1;
-      const int x_56 = asint(x_8[1].x);
-      a_1[x_54] = (x_55 + x_56);
-      const int x_58 = i_1;
-      const int x_59 = asint(x_8[6].x);
-      if ((x_58 < x_59)) {
-        {
-          i_1 = (i_1 + 1);
-        }
-        continue;
-      }
-      const int x_60 = i_1;
-      const int x_61 = i_1;
-      const int x_62 = asint(x_8[8].x);
-      a_1[x_60] = (x_61 + x_62);
-      const int x_65 = a_1[i_1];
-      param = x_65;
-      const int x_66 = f_i1_(param);
-      const int x_67 = asint(x_8[8].x);
-      if ((x_66 < x_67)) {
-        const int x_182_save = i_1;
-        const int x_69 = a_1[x_182_save];
-        a_1[x_182_save] = (x_69 - 1);
-      }
-    } else {
-      const int x_72 = a_1[i_1];
-      param_1 = x_72;
-      const int x_73 = f_i1_(param_1);
-      const int x_74 = asint(x_8[8].x);
-      if ((x_73 < x_74)) {
-        const int x_75 = i_1;
-        const int x_76 = asint(x_8[4].x);
-        const int x_77 = a_1[x_75];
-        a_1[x_75] = (x_77 + x_76);
-      }
-    }
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_81 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  i_2 = x_81;
-  while (true) {
-    const int x_82 = i_2;
-    const int x_83 = asint(x_8[6].x);
-    if ((x_82 < x_83)) {
-    } else {
-      break;
-    }
-    const int x_85 = a_1[i_2];
-    const int x_87 = ref[i_2];
-    if ((x_85 != x_87)) {
-      const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-      const int x_88 = asint(x_8[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-      const float x_205 = float(x_88);
-      x_GLF_color = float4(x_205, x_205, x_205, x_205);
-      return;
-    }
-    {
-      i_2 = (i_2 + 1);
-    }
-  }
-  const int x_91 = asint(x_8[11].x);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const int x_92 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const int x_93 = asint(x_8[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  const int x_94 = asint(x_8[11].x);
-  x_GLF_color = float4(float(x_91), float(x_92), float(x_93), float(x_94));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.msl
deleted file mode 100644
index e7f0fdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,194 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[12];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int f_i1_(constant buf0& x_8, thread int* const a) {
-  int i = 0;
-  int const x_16 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i = x_16;
-  while (true) {
-    int const x_17 = i;
-    int const x_18 = x_8.x_GLF_uniform_int_values.arr[6].el;
-    if ((x_17 < x_18)) {
-    } else {
-      break;
-    }
-    int const x_19 = i;
-    int const x_20 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_19 > x_20)) {
-      int const x_21 = *(a);
-      return x_21;
-    }
-    {
-      int const x_22 = i;
-      i = as_type<int>((as_type<uint>(x_22) + as_type<uint>(1)));
-    }
-  }
-  int const x_24 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  return x_24;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_1 ref = {};
-  int i_1 = 0;
-  tint_array_wrapper_1 a_1 = {};
-  int param = 0;
-  int param_1 = 0;
-  int i_2 = 0;
-  int const x_25 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_26 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_25] = x_26;
-  int const x_27 = x_8.x_GLF_uniform_int_values.arr[11].el;
-  int const x_28 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_27] = x_28;
-  int const x_29 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_30 = x_8.x_GLF_uniform_int_values.arr[3].el;
-  ref.arr[x_29] = x_30;
-  int const x_31 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  int const x_32 = x_8.x_GLF_uniform_int_values.arr[4].el;
-  ref.arr[x_31] = x_32;
-  int const x_33 = x_8.x_GLF_uniform_int_values.arr[3].el;
-  int const x_34 = x_8.x_GLF_uniform_int_values.arr[5].el;
-  ref.arr[x_33] = x_34;
-  int const x_35 = x_8.x_GLF_uniform_int_values.arr[4].el;
-  int const x_36 = x_8.x_GLF_uniform_int_values.arr[6].el;
-  ref.arr[x_35] = x_36;
-  int const x_37 = x_8.x_GLF_uniform_int_values.arr[5].el;
-  int const x_38 = x_8.x_GLF_uniform_int_values.arr[7].el;
-  ref.arr[x_37] = x_38;
-  int const x_39 = x_8.x_GLF_uniform_int_values.arr[8].el;
-  int const x_40 = x_8.x_GLF_uniform_int_values.arr[8].el;
-  ref.arr[x_39] = x_40;
-  int const x_41 = x_8.x_GLF_uniform_int_values.arr[9].el;
-  int const x_42 = x_8.x_GLF_uniform_int_values.arr[9].el;
-  ref.arr[x_41] = x_42;
-  int const x_43 = x_8.x_GLF_uniform_int_values.arr[10].el;
-  int const x_44 = x_8.x_GLF_uniform_int_values.arr[10].el;
-  ref.arr[x_43] = x_44;
-  int const x_45 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i_1 = x_45;
-  while (true) {
-    int const x_46 = i_1;
-    int const x_47 = x_8.x_GLF_uniform_int_values.arr[6].el;
-    if ((x_46 < x_47)) {
-    } else {
-      break;
-    }
-    int const x_48 = i_1;
-    int const x_49 = i_1;
-    a_1.arr[x_48] = x_49;
-    int const x_50 = i_1;
-    int const x_51 = x_8.x_GLF_uniform_int_values.arr[6].el;
-    int const x_52 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_50 < (x_51 / x_52))) {
-      int const x_54 = i_1;
-      int const x_55 = i_1;
-      int const x_56 = x_8.x_GLF_uniform_int_values.arr[1].el;
-      a_1.arr[x_54] = as_type<int>((as_type<uint>(x_55) + as_type<uint>(x_56)));
-      int const x_58 = i_1;
-      int const x_59 = x_8.x_GLF_uniform_int_values.arr[6].el;
-      if ((x_58 < x_59)) {
-        {
-          int const x_79 = i_1;
-          i_1 = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-        }
-        continue;
-      }
-      int const x_60 = i_1;
-      int const x_61 = i_1;
-      int const x_62 = x_8.x_GLF_uniform_int_values.arr[8].el;
-      a_1.arr[x_60] = as_type<int>((as_type<uint>(x_61) + as_type<uint>(x_62)));
-      int const x_64 = i_1;
-      int const x_65 = a_1.arr[x_64];
-      param = x_65;
-      int const x_66 = f_i1_(x_8, &(param));
-      int const x_67 = x_8.x_GLF_uniform_int_values.arr[8].el;
-      if ((x_66 < x_67)) {
-        int const x_68 = i_1;
-        int const x_182_save = x_68;
-        int const x_69 = a_1.arr[x_182_save];
-        a_1.arr[x_182_save] = as_type<int>((as_type<uint>(x_69) - as_type<uint>(1)));
-      }
-    } else {
-      int const x_71 = i_1;
-      int const x_72 = a_1.arr[x_71];
-      param_1 = x_72;
-      int const x_73 = f_i1_(x_8, &(param_1));
-      int const x_74 = x_8.x_GLF_uniform_int_values.arr[8].el;
-      if ((x_73 < x_74)) {
-        int const x_75 = i_1;
-        int const x_76 = x_8.x_GLF_uniform_int_values.arr[4].el;
-        int const x_77 = a_1.arr[x_75];
-        a_1.arr[x_75] = as_type<int>((as_type<uint>(x_77) + as_type<uint>(x_76)));
-      }
-    }
-    {
-      int const x_79 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-    }
-  }
-  int const x_81 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i_2 = x_81;
-  while (true) {
-    int const x_82 = i_2;
-    int const x_83 = x_8.x_GLF_uniform_int_values.arr[6].el;
-    if ((x_82 < x_83)) {
-    } else {
-      break;
-    }
-    int const x_84 = i_2;
-    int const x_85 = a_1.arr[x_84];
-    int const x_86 = i_2;
-    int const x_87 = ref.arr[x_86];
-    if ((x_85 != x_87)) {
-      int const x_88 = x_8.x_GLF_uniform_int_values.arr[0].el;
-      float const x_205 = float(x_88);
-      *(tint_symbol_3) = float4(x_205, x_205, x_205, x_205);
-      return;
-    }
-    {
-      int const x_89 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_89) + as_type<uint>(1)));
-    }
-  }
-  int const x_91 = x_8.x_GLF_uniform_int_values.arr[11].el;
-  int const x_92 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_93 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_94 = x_8.x_GLF_uniform_int_values.arr[11].el;
-  *(tint_symbol_3) = float4(float(x_91), float(x_92), float(x_93), float(x_94));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b07c299..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,369 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 256
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_i1_ "f_i1_"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %ref "ref"
-               OpName %i_1 "i_1"
-               OpName %a_1 "a_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %i_2 "i_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_12 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_12 = OpConstant %uint 12
-%_arr_int_uint_12 = OpTypeArray %int %uint_12
-       %buf0 = OpTypeStruct %_arr_int_uint_12
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpTypeFunction %int %_ptr_Function_int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_6 = OpConstant %int 6
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %54 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %62 = OpConstantNull %_arr_int_uint_10
-     %int_11 = OpConstant %int 11
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-   %main_out = OpTypeStruct %v4float
-        %245 = OpTypeFunction %main_out
-      %f_i1_ = OpFunction %int None %15
-          %a = OpFunctionParameter %_ptr_Function_int
-         %19 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %26 = OpLoad %int %25
-               OpStore %i %26
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %31 = OpLoad %int %i
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-         %34 = OpLoad %int %33
-         %35 = OpSLessThan %bool %31 %34
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %28
-         %37 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %43 = OpLoad %int %42
-         %44 = OpSGreaterThan %bool %40 %43
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-         %48 = OpLoad %int %a
-               OpReturnValue %48
-         %45 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %i %51
-               OpBranch %27
-         %28 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %53 = OpLoad %int %52
-               OpReturnValue %53
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %54
-         %57 = OpLabel
-        %ref = OpVariable %_ptr_Function__arr_int_uint_10 Function %62
-        %i_1 = OpVariable %_ptr_Function_int Function %21
-        %a_1 = OpVariable %_ptr_Function__arr_int_uint_10 Function %62
-      %param = OpVariable %_ptr_Function_int Function %21
-    %param_1 = OpVariable %_ptr_Function_int Function %21
-        %i_2 = OpVariable %_ptr_Function_int Function %21
-         %68 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Function_int %ref %69
-               OpStore %72 %71
-         %74 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_11
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Function_int %ref %75
-               OpStore %78 %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %82 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Function_int %ref %80
-               OpStore %84 %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %86 = OpLoad %int %85
-         %88 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Function_int %ref %86
-               OpStore %90 %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %92 = OpLoad %int %91
-         %94 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_5
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Function_int %ref %92
-               OpStore %96 %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Function_int %ref %98
-               OpStore %101 %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_5
-        %103 = OpLoad %int %102
-        %105 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_7
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Function_int %ref %103
-               OpStore %107 %106
-        %109 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %112 = OpLoad %int %111
-        %113 = OpAccessChain %_ptr_Function_int %ref %110
-               OpStore %113 %112
-        %115 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_9
-        %116 = OpLoad %int %115
-        %117 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_9
-        %118 = OpLoad %int %117
-        %119 = OpAccessChain %_ptr_Function_int %ref %116
-               OpStore %119 %118
-        %121 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_10
-        %122 = OpLoad %int %121
-        %123 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_10
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Function_int %ref %122
-               OpStore %125 %124
-        %126 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %127 = OpLoad %int %126
-               OpStore %i_1 %127
-               OpBranch %128
-        %128 = OpLabel
-               OpLoopMerge %129 %130 None
-               OpBranch %131
-        %131 = OpLabel
-        %132 = OpLoad %int %i_1
-        %133 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %134 = OpLoad %int %133
-        %135 = OpSLessThan %bool %132 %134
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %138
-        %137 = OpLabel
-               OpBranch %136
-        %138 = OpLabel
-               OpBranch %129
-        %136 = OpLabel
-        %139 = OpLoad %int %i_1
-        %140 = OpLoad %int %i_1
-        %141 = OpAccessChain %_ptr_Function_int %a_1 %139
-               OpStore %141 %140
-        %142 = OpLoad %int %i_1
-        %143 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %144 = OpLoad %int %143
-        %145 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %146 = OpLoad %int %145
-        %147 = OpSDiv %int %144 %146
-        %148 = OpSLessThan %bool %142 %147
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %151
-        %150 = OpLabel
-        %152 = OpLoad %int %i_1
-        %153 = OpLoad %int %i_1
-        %154 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %155 = OpLoad %int %154
-        %156 = OpAccessChain %_ptr_Function_int %a_1 %152
-        %157 = OpIAdd %int %153 %155
-               OpStore %156 %157
-        %158 = OpLoad %int %i_1
-        %159 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %160 = OpLoad %int %159
-        %161 = OpSLessThan %bool %158 %160
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %162
-        %163 = OpLabel
-               OpBranch %130
-        %162 = OpLabel
-        %164 = OpLoad %int %i_1
-        %165 = OpLoad %int %i_1
-        %166 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %167 = OpLoad %int %166
-        %168 = OpAccessChain %_ptr_Function_int %a_1 %164
-        %169 = OpIAdd %int %165 %167
-               OpStore %168 %169
-        %170 = OpLoad %int %i_1
-        %171 = OpAccessChain %_ptr_Function_int %a_1 %170
-        %172 = OpLoad %int %171
-               OpStore %param %172
-        %173 = OpFunctionCall %int %f_i1_ %param
-        %175 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %176 = OpLoad %int %175
-        %177 = OpSLessThan %bool %173 %176
-               OpSelectionMerge %178 None
-               OpBranchConditional %177 %179 %178
-        %179 = OpLabel
-        %180 = OpLoad %int %i_1
-        %181 = OpAccessChain %_ptr_Function_int %a_1 %180
-        %182 = OpLoad %int %181
-        %183 = OpAccessChain %_ptr_Function_int %a_1 %180
-        %184 = OpISub %int %182 %int_1
-               OpStore %183 %184
-               OpBranch %178
-        %178 = OpLabel
-               OpBranch %149
-        %151 = OpLabel
-        %185 = OpLoad %int %i_1
-        %186 = OpAccessChain %_ptr_Function_int %a_1 %185
-        %187 = OpLoad %int %186
-               OpStore %param_1 %187
-        %188 = OpFunctionCall %int %f_i1_ %param_1
-        %190 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_8
-        %191 = OpLoad %int %190
-        %192 = OpSLessThan %bool %188 %191
-               OpSelectionMerge %193 None
-               OpBranchConditional %192 %194 %193
-        %194 = OpLabel
-        %195 = OpLoad %int %i_1
-        %196 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-        %197 = OpLoad %int %196
-        %198 = OpAccessChain %_ptr_Function_int %a_1 %195
-        %199 = OpLoad %int %198
-        %200 = OpAccessChain %_ptr_Function_int %a_1 %195
-        %201 = OpIAdd %int %199 %197
-               OpStore %200 %201
-               OpBranch %193
-        %193 = OpLabel
-               OpBranch %149
-        %149 = OpLabel
-               OpBranch %130
-        %130 = OpLabel
-        %202 = OpLoad %int %i_1
-        %203 = OpIAdd %int %202 %int_1
-               OpStore %i_1 %203
-               OpBranch %128
-        %129 = OpLabel
-        %204 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %205 = OpLoad %int %204
-               OpStore %i_2 %205
-               OpBranch %206
-        %206 = OpLabel
-               OpLoopMerge %207 %208 None
-               OpBranch %209
-        %209 = OpLabel
-        %210 = OpLoad %int %i_2
-        %211 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_6
-        %212 = OpLoad %int %211
-        %213 = OpSLessThan %bool %210 %212
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-               OpBranch %207
-        %214 = OpLabel
-        %217 = OpLoad %int %i_2
-        %218 = OpAccessChain %_ptr_Function_int %a_1 %217
-        %219 = OpLoad %int %218
-        %220 = OpLoad %int %i_2
-        %221 = OpAccessChain %_ptr_Function_int %ref %220
-        %222 = OpLoad %int %221
-        %223 = OpINotEqual %bool %219 %222
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %224
-        %225 = OpLabel
-        %226 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %227 = OpLoad %int %226
-        %228 = OpConvertSToF %float %227
-        %229 = OpCompositeConstruct %v4float %228 %228 %228 %228
-               OpStore %x_GLF_color %229
-               OpReturn
-        %224 = OpLabel
-               OpBranch %208
-        %208 = OpLabel
-        %230 = OpLoad %int %i_2
-        %231 = OpIAdd %int %230 %int_1
-               OpStore %i_2 %231
-               OpBranch %206
-        %207 = OpLabel
-        %232 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_11
-        %233 = OpLoad %int %232
-        %234 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %235 = OpLoad %int %234
-        %236 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %237 = OpLoad %int %236
-        %238 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_11
-        %239 = OpLoad %int %238
-        %240 = OpConvertSToF %float %233
-        %241 = OpConvertSToF %float %235
-        %242 = OpConvertSToF %float %237
-        %243 = OpConvertSToF %float %239
-        %244 = OpCompositeConstruct %v4float %240 %241 %242 %243
-               OpStore %x_GLF_color %244
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %245
-        %248 = OpLabel
-        %249 = OpFunctionCall %void %main_1
-        %250 = OpLoad %v4float %x_GLF_color
-        %251 = OpCompositeConstruct %main_out %250
-               OpReturnValue %251
-               OpFunctionEnd
-       %main = OpFunction %void None %54
-        %253 = OpLabel
-        %254 = OpFunctionCall %main_out %main_inner
-        %255 = OpCompositeExtract %v4float %254 0
-               OpStore %x_GLF_color_1_1 %255
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 37cab95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-inst-combine-calls-for-compare-function-call-result/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,177 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 12>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_i1_(a : ptr<function, i32>) -> i32 {
-  var i : i32;
-  let x_16 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i = x_16;
-  loop {
-    let x_17 : i32 = i;
-    let x_18 : i32 = x_8.x_GLF_uniform_int_values[6];
-    if ((x_17 < x_18)) {
-    } else {
-      break;
-    }
-    let x_19 : i32 = i;
-    let x_20 : i32 = x_8.x_GLF_uniform_int_values[2];
-    if ((x_19 > x_20)) {
-      let x_21 : i32 = *(a);
-      return x_21;
-    }
-
-    continuing {
-      let x_22 : i32 = i;
-      i = (x_22 + 1);
-    }
-  }
-  let x_24 : i32 = x_8.x_GLF_uniform_int_values[0];
-  return x_24;
-}
-
-fn main_1() {
-  var ref : array<i32, 10>;
-  var i_1 : i32;
-  var a_1 : array<i32, 10>;
-  var param : i32;
-  var param_1 : i32;
-  var i_2 : i32;
-  let x_25 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_26 : i32 = x_8.x_GLF_uniform_int_values[1];
-  ref[x_25] = x_26;
-  let x_27 : i32 = x_8.x_GLF_uniform_int_values[11];
-  let x_28 : i32 = x_8.x_GLF_uniform_int_values[2];
-  ref[x_27] = x_28;
-  let x_29 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_30 : i32 = x_8.x_GLF_uniform_int_values[3];
-  ref[x_29] = x_30;
-  let x_31 : i32 = x_8.x_GLF_uniform_int_values[2];
-  let x_32 : i32 = x_8.x_GLF_uniform_int_values[4];
-  ref[x_31] = x_32;
-  let x_33 : i32 = x_8.x_GLF_uniform_int_values[3];
-  let x_34 : i32 = x_8.x_GLF_uniform_int_values[5];
-  ref[x_33] = x_34;
-  let x_35 : i32 = x_8.x_GLF_uniform_int_values[4];
-  let x_36 : i32 = x_8.x_GLF_uniform_int_values[6];
-  ref[x_35] = x_36;
-  let x_37 : i32 = x_8.x_GLF_uniform_int_values[5];
-  let x_38 : i32 = x_8.x_GLF_uniform_int_values[7];
-  ref[x_37] = x_38;
-  let x_39 : i32 = x_8.x_GLF_uniform_int_values[8];
-  let x_40 : i32 = x_8.x_GLF_uniform_int_values[8];
-  ref[x_39] = x_40;
-  let x_41 : i32 = x_8.x_GLF_uniform_int_values[9];
-  let x_42 : i32 = x_8.x_GLF_uniform_int_values[9];
-  ref[x_41] = x_42;
-  let x_43 : i32 = x_8.x_GLF_uniform_int_values[10];
-  let x_44 : i32 = x_8.x_GLF_uniform_int_values[10];
-  ref[x_43] = x_44;
-  let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i_1 = x_45;
-  loop {
-    let x_46 : i32 = i_1;
-    let x_47 : i32 = x_8.x_GLF_uniform_int_values[6];
-    if ((x_46 < x_47)) {
-    } else {
-      break;
-    }
-    let x_48 : i32 = i_1;
-    let x_49 : i32 = i_1;
-    a_1[x_48] = x_49;
-    let x_50 : i32 = i_1;
-    let x_51 : i32 = x_8.x_GLF_uniform_int_values[6];
-    let x_52 : i32 = x_8.x_GLF_uniform_int_values[1];
-    if ((x_50 < (x_51 / x_52))) {
-      let x_54 : i32 = i_1;
-      let x_55 : i32 = i_1;
-      let x_56 : i32 = x_8.x_GLF_uniform_int_values[1];
-      a_1[x_54] = (x_55 + x_56);
-      let x_58 : i32 = i_1;
-      let x_59 : i32 = x_8.x_GLF_uniform_int_values[6];
-      if ((x_58 < x_59)) {
-        continue;
-      }
-      let x_60 : i32 = i_1;
-      let x_61 : i32 = i_1;
-      let x_62 : i32 = x_8.x_GLF_uniform_int_values[8];
-      a_1[x_60] = (x_61 + x_62);
-      let x_64 : i32 = i_1;
-      let x_65 : i32 = a_1[x_64];
-      param = x_65;
-      let x_66 : i32 = f_i1_(&(param));
-      let x_67 : i32 = x_8.x_GLF_uniform_int_values[8];
-      if ((x_66 < x_67)) {
-        let x_68 : i32 = i_1;
-        let x_182 : ptr<function, i32> = &(a_1[x_68]);
-        let x_69 : i32 = *(x_182);
-        *(x_182) = (x_69 - 1);
-      }
-    } else {
-      let x_71 : i32 = i_1;
-      let x_72 : i32 = a_1[x_71];
-      param_1 = x_72;
-      let x_73 : i32 = f_i1_(&(param_1));
-      let x_74 : i32 = x_8.x_GLF_uniform_int_values[8];
-      if ((x_73 < x_74)) {
-        let x_75 : i32 = i_1;
-        let x_76 : i32 = x_8.x_GLF_uniform_int_values[4];
-        let x_77 : i32 = a_1[x_75];
-        a_1[x_75] = (x_77 + x_76);
-      }
-    }
-
-    continuing {
-      let x_79 : i32 = i_1;
-      i_1 = (x_79 + 1);
-    }
-  }
-  let x_81 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i_2 = x_81;
-  loop {
-    let x_82 : i32 = i_2;
-    let x_83 : i32 = x_8.x_GLF_uniform_int_values[6];
-    if ((x_82 < x_83)) {
-    } else {
-      break;
-    }
-    let x_84 : i32 = i_2;
-    let x_85 : i32 = a_1[x_84];
-    let x_86 : i32 = i_2;
-    let x_87 : i32 = ref[x_86];
-    if ((x_85 != x_87)) {
-      let x_88 : i32 = x_8.x_GLF_uniform_int_values[0];
-      let x_205 : f32 = f32(x_88);
-      x_GLF_color = vec4<f32>(x_205, x_205, x_205, x_205);
-      return;
-    }
-
-    continuing {
-      let x_89 : i32 = i_2;
-      i_2 = (x_89 + 1);
-    }
-  }
-  let x_91 : i32 = x_8.x_GLF_uniform_int_values[11];
-  let x_92 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_93 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_94 : i32 = x_8.x_GLF_uniform_int_values[11];
-  x_GLF_color = vec4<f32>(f32(x_91), f32(x_92), f32(x_93), f32(x_94));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1a7f4c4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_11 = asint(x_5[1].x);
-  const int x_12 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_13 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  const float x_45 = asfloat(x_8[1].x);
-  a = (x_45 - (asfloat(0x7fc00000u) * floor((x_45 / asfloat(0x7fc00000u)))));
-  const float x_47 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_47 != x_49)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_54 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color.y = x_54;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.msl
deleted file mode 100755
index 73ce3e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  int const x_10 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_11 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_12 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_13 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  float const x_45 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  a = (x_45 - (NAN * floor((x_45 / NAN))));
-  float const x_47 = a;
-  float const x_49 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_47 != x_49)) {
-    float const x_54 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    (*(tint_symbol_3)).y = x_54;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 39246e9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,124 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-         %48 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0x1_8p_128 = OpConstant %float 0x1.8p+128
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %64 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpConvertSToF %float %30
-         %39 = OpConvertSToF %float %33
-         %40 = OpConvertSToF %float %35
-         %41 = OpConvertSToF %float %37
-         %42 = OpCompositeConstruct %v4float %38 %39 %40 %41
-               OpStore %x_GLF_color %42
-         %44 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %45 = OpLoad %float %44
-         %49 = OpFDiv %float %45 %float_0x1_8p_128
-         %47 = OpExtInst %float %48 Floor %49
-         %50 = OpFMul %float %float_0x1_8p_128 %47
-         %51 = OpFSub %float %45 %50
-               OpStore %a %51
-         %52 = OpLoad %float %a
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %55 = OpFOrdNotEqual %bool %52 %54
-               OpSelectionMerge %57 None
-               OpBranchConditional %55 %58 %57
-         %58 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %60 = OpLoad %float %59
-         %63 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %63 %60
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %64
-         %67 = OpLabel
-         %68 = OpFunctionCall %void %main_1
-         %69 = OpLoad %v4float %x_GLF_color
-         %70 = OpCompositeConstruct %main_out %69
-               OpReturnValue %70
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %72 = OpLabel
-         %73 = OpFunctionCall %main_out %main_inner
-         %74 = OpCompositeExtract %v4float %73 0
-               OpStore %x_GLF_color_1_1 %74
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index eb7bb53..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var a : f32;
-  let x_10 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_11 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_12 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_13 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_10), f32(x_11), f32(x_12), f32(x_13));
-  let x_45 : f32 = x_8.x_GLF_uniform_float_values[1];
-  a = (x_45 - (0x1.8p+128 * floor((x_45 / 0x1.8p+128))));
-  let x_47 : f32 = a;
-  let x_49 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_47 != x_49)) {
-    let x_54 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color.y = x_54;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 801f890..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_11 = asint(x_5[1].x);
-  const int x_12 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_13 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  const float x_45 = asfloat(x_8[1].x);
-  a = (x_45 % asfloat(0x7f800000u));
-  const float x_47 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_47 != x_49)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_54 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color.y = x_54;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9f81578..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  int const x_10 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_11 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_12 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_13 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  float const x_45 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  a = fmod(x_45, INFINITY);
-  float const x_47 = a;
-  float const x_49 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_47 != x_49)) {
-    float const x_54 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    (*(tint_symbol_3)).y = x_54;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 132ad8a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,120 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0x1p_128 = OpConstant %float 0x1p+128
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpConvertSToF %float %30
-         %39 = OpConvertSToF %float %33
-         %40 = OpConvertSToF %float %35
-         %41 = OpConvertSToF %float %37
-         %42 = OpCompositeConstruct %v4float %38 %39 %40 %41
-               OpStore %x_GLF_color %42
-         %44 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %45 = OpLoad %float %44
-         %47 = OpFRem %float %45 %float_0x1p_128
-               OpStore %a %47
-         %48 = OpLoad %float %a
-         %49 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %51 = OpFOrdNotEqual %bool %48 %50
-               OpSelectionMerge %53 None
-               OpBranchConditional %51 %54 %53
-         %54 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %56 = OpLoad %float %55
-         %59 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %59 %56
-               OpBranch %53
-         %53 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 56a3b5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-acos-undefined/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var a : f32;
-  let x_10 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_11 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_12 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_13 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_10), f32(x_11), f32(x_12), f32(x_13));
-  let x_45 : f32 = x_8.x_GLF_uniform_float_values[1];
-  a = (x_45 % 0x1p+128);
-  let x_47 : f32 = a;
-  let x_49 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_47 != x_49)) {
-    let x_54 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color.y = x_54;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 9bd866b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_11 = asint(x_5[1].x);
-  const int x_12 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_13 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  const float x_45 = asfloat(x_8[1].x);
-  a = (asfloat(0x7fc00000u) - (x_45 * floor((asfloat(0x7fc00000u) / x_45))));
-  const float x_47 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_47 != x_49)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_54 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color.y = x_54;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.msl
deleted file mode 100755
index 74ad660..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  int const x_10 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_11 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_12 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_13 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  float const x_45 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  a = (NAN - (x_45 * floor((NAN / x_45))));
-  float const x_47 = a;
-  float const x_49 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_47 != x_49)) {
-    float const x_54 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    (*(tint_symbol_3)).y = x_54;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4c20517..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,124 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-         %48 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_n0x1_8p_128 = OpConstant %float -0x1.8p+128
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %64 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpConvertSToF %float %30
-         %39 = OpConvertSToF %float %33
-         %40 = OpConvertSToF %float %35
-         %41 = OpConvertSToF %float %37
-         %42 = OpCompositeConstruct %v4float %38 %39 %40 %41
-               OpStore %x_GLF_color %42
-         %44 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %45 = OpLoad %float %44
-         %49 = OpFDiv %float %float_n0x1_8p_128 %45
-         %47 = OpExtInst %float %48 Floor %49
-         %50 = OpFMul %float %45 %47
-         %51 = OpFSub %float %float_n0x1_8p_128 %50
-               OpStore %a %51
-         %52 = OpLoad %float %a
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %55 = OpFOrdNotEqual %bool %52 %54
-               OpSelectionMerge %57 None
-               OpBranchConditional %55 %58 %57
-         %58 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %60 = OpLoad %float %59
-         %63 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %63 %60
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %64
-         %67 = OpLabel
-         %68 = OpFunctionCall %void %main_1
-         %69 = OpLoad %v4float %x_GLF_color
-         %70 = OpCompositeConstruct %main_out %69
-               OpReturnValue %70
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %72 = OpLabel
-         %73 = OpFunctionCall %main_out %main_inner
-         %74 = OpCompositeExtract %v4float %73 0
-               OpStore %x_GLF_color_1_1 %74
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4d64cae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var a : f32;
-  let x_10 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_11 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_12 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_13 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_10), f32(x_11), f32(x_12), f32(x_13));
-  let x_45 : f32 = x_8.x_GLF_uniform_float_values[1];
-  a = (-0x1.8p+128 - (x_45 * floor((-0x1.8p+128 / x_45))));
-  let x_47 : f32 = a;
-  let x_49 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_47 != x_49)) {
-    let x_54 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color.y = x_54;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3d164f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_10 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_11 = asint(x_5[1].x);
-  const int x_12 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_13 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  const float x_45 = asfloat(x_8[1].x);
-  a = (asfloat(0xff800000u) % x_45);
-  const float x_47 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_49 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_47 != x_49)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_54 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color.y = x_54;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.msl
deleted file mode 100644
index fcac993..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  int const x_10 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_11 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_12 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_13 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_10), float(x_11), float(x_12), float(x_13));
-  float const x_45 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  a = fmod(-INFINITY, x_45);
-  float const x_47 = a;
-  float const x_49 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_47 != x_49)) {
-    float const x_54 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    (*(tint_symbol_3)).y = x_54;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c42ab11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,120 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_n0x1p_128 = OpConstant %float -0x1p+128
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpConvertSToF %float %30
-         %39 = OpConvertSToF %float %33
-         %40 = OpConvertSToF %float %35
-         %41 = OpConvertSToF %float %37
-         %42 = OpCompositeConstruct %v4float %38 %39 %40 %41
-               OpStore %x_GLF_color %42
-         %44 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %45 = OpLoad %float %44
-         %47 = OpFRem %float %float_n0x1p_128 %45
-               OpStore %a %47
-         %48 = OpLoad %float %a
-         %49 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %51 = OpFOrdNotEqual %bool %48 %50
-               OpSelectionMerge %53 None
-               OpBranchConditional %51 %54 %53
-         %54 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %56 = OpLoad %float %55
-         %59 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %59 %56
-               OpBranch %53
-         %53 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 04fcb1e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-mod-sqrt-undefined/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var a : f32;
-  let x_10 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_11 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_12 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_13 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_10), f32(x_11), f32(x_12), f32(x_13));
-  let x_45 : f32 = x_8.x_GLF_uniform_float_values[1];
-  a = (-0x1p+128 % x_45);
-  let x_47 : f32 = a;
-  let x_49 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_47 != x_49)) {
-    let x_54 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color.y = x_54;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.hlsl
deleted file mode 100644
index ce8790c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_31 = asfloat(x_5[scalar_offset / 4][scalar_offset % 4]);
-  if ((sqrt(x_31) < -1.0f)) {
-    const int x_10 = asint(x_7[1].x);
-    const float x_38 = float(x_10);
-    x_GLF_color = float4(x_38, x_38, x_38, x_38);
-  } else {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_11 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_41 = float(x_11);
-    const int x_12 = asint(x_7[1].x);
-    const float x_43 = float(x_12);
-    x_GLF_color = float4(x_41, x_43, x_43, x_41);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.msl
deleted file mode 100644
index 4ba5a96..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_3) {
-  float const x_31 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  if ((sqrt(x_31) < -1.0f)) {
-    int const x_10 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_38 = float(x_10);
-    *(tint_symbol_3) = float4(x_38, x_38, x_38, x_38);
-  } else {
-    int const x_11 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_41 = float(x_11);
-    int const x_12 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_43 = float(x_12);
-    *(tint_symbol_3) = float4(x_41, x_43, x_43, x_41);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_7 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.spvasm
deleted file mode 100644
index 52c4730..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,108 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %29 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_n1 = OpConstant %float -1
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %26 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %27 = OpLoad %float %26
-         %28 = OpExtInst %float %29 Sqrt %27
-         %31 = OpFOrdLessThan %bool %28 %float_n1
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %35
-         %34 = OpLabel
-         %38 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %39 = OpLoad %int %38
-         %40 = OpConvertSToF %float %39
-         %41 = OpCompositeConstruct %v4float %40 %40 %40 %40
-               OpStore %x_GLF_color %41
-               OpBranch %33
-         %35 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpConvertSToF %float %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %46 = OpLoad %int %45
-         %47 = OpConvertSToF %float %46
-         %48 = OpCompositeConstruct %v4float %44 %47 %47 %44
-               OpStore %x_GLF_color %48
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.wgsl
deleted file mode 100644
index 0deb2a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-fn main_1() {
-  let x_31 : f32 = x_5.x_GLF_uniform_float_values[0];
-  if ((sqrt(x_31) < -1.0)) {
-    let x_10 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_38 : f32 = f32(x_10);
-    x_GLF_color = vec4<f32>(x_38, x_38, x_38, x_38);
-  } else {
-    let x_11 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_41 : f32 = f32(x_11);
-    let x_12 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_43 : f32 = f32(x_12);
-    x_GLF_color = vec4<f32>(x_41, x_43, x_43, x_41);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.hlsl
deleted file mode 100644
index ce8790c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_31 = asfloat(x_5[scalar_offset / 4][scalar_offset % 4]);
-  if ((sqrt(x_31) < -1.0f)) {
-    const int x_10 = asint(x_7[1].x);
-    const float x_38 = float(x_10);
-    x_GLF_color = float4(x_38, x_38, x_38, x_38);
-  } else {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_11 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_41 = float(x_11);
-    const int x_12 = asint(x_7[1].x);
-    const float x_43 = float(x_12);
-    x_GLF_color = float4(x_41, x_43, x_43, x_41);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.msl
deleted file mode 100644
index 4ba5a96..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_3) {
-  float const x_31 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  if ((sqrt(x_31) < -1.0f)) {
-    int const x_10 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_38 = float(x_10);
-    *(tint_symbol_3) = float4(x_38, x_38, x_38, x_38);
-  } else {
-    int const x_11 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_41 = float(x_11);
-    int const x_12 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_43 = float(x_12);
-    *(tint_symbol_3) = float4(x_41, x_43, x_43, x_41);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_7 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.spvasm
deleted file mode 100644
index 52c4730..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,108 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %29 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_n1 = OpConstant %float -1
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %26 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %27 = OpLoad %float %26
-         %28 = OpExtInst %float %29 Sqrt %27
-         %31 = OpFOrdLessThan %bool %28 %float_n1
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %35
-         %34 = OpLabel
-         %38 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %39 = OpLoad %int %38
-         %40 = OpConvertSToF %float %39
-         %41 = OpCompositeConstruct %v4float %40 %40 %40 %40
-               OpStore %x_GLF_color %41
-               OpBranch %33
-         %35 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpConvertSToF %float %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %46 = OpLoad %int %45
-         %47 = OpConvertSToF %float %46
-         %48 = OpCompositeConstruct %v4float %44 %47 %47 %44
-               OpStore %x_GLF_color %48
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.wgsl
deleted file mode 100644
index 0deb2a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instruction-simplify-sqrt/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-fn main_1() {
-  let x_31 : f32 = x_5.x_GLF_uniform_float_values[0];
-  if ((sqrt(x_31) < -1.0)) {
-    let x_10 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_38 : f32 = f32(x_10);
-    x_GLF_color = vec4<f32>(x_38, x_38, x_38, x_38);
-  } else {
-    let x_11 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_41 : f32 = f32(x_11);
-    let x_12 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_43 : f32 = f32(x_12);
-    x_GLF_color = vec4<f32>(x_41, x_43, x_43, x_41);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 707aead..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,152 +0,0 @@
-struct S {
-  int data;
-};
-
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_struct_S_i11_(inout S s) {
-  const float x_166 = asfloat(x_8[0].x);
-  const float x_168 = asfloat(x_8[0].y);
-  if ((x_166 > x_168)) {
-    return;
-  }
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_173 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-  s.data = x_173;
-  return;
-}
-
-void main_1() {
-  int i = 0;
-  S arr[3] = (S[3])0;
-  int i_1 = 0;
-  S param = (S)0;
-  int j = 0;
-  bool x_132 = false;
-  bool x_142 = false;
-  bool x_133_phi = false;
-  bool x_143_phi = false;
-  const int x_46 = asint(x_10[2].x);
-  i = x_46;
-  while (true) {
-    const int x_51 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_53 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    arr[i].data = i;
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_62 = asint(x_10[2].x);
-  i_1 = x_62;
-  while (true) {
-    const int x_67 = i_1;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_69 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    const float x_73 = asfloat(x_8[0].x);
-    const float x_75 = asfloat(x_8[0].y);
-    if ((x_73 > x_75)) {
-      break;
-    }
-    const int x_81 = arr[i_1].data;
-    const int x_83 = asint(x_10[3].x);
-    if ((x_81 == x_83)) {
-      const int x_88 = i_1;
-      const S x_90 = arr[x_88];
-      param = x_90;
-      func_struct_S_i11_(param);
-      arr[x_88] = param;
-    } else {
-      const int x_95 = asint(x_10[2].x);
-      j = x_95;
-      while (true) {
-        const int x_100 = j;
-        const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-        const int x_102 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-        if ((x_100 < x_102)) {
-        } else {
-          break;
-        }
-        const int x_107 = arr[j].data;
-        const int x_109 = asint(x_10[4].x);
-        if ((x_107 > x_109)) {
-          discard;
-        }
-        {
-          j = (j + 1);
-        }
-      }
-    }
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const int x_118 = asint(x_10[2].x);
-  const int x_120 = arr[x_118].data;
-  const int x_122 = asint(x_10[2].x);
-  const bool x_123 = (x_120 == x_122);
-  x_133_phi = x_123;
-  if (x_123) {
-    const int x_127 = asint(x_10[3].x);
-    const int x_129 = arr[x_127].data;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_131 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_132 = (x_129 == x_131);
-    x_133_phi = x_132;
-  }
-  const bool x_133 = x_133_phi;
-  x_143_phi = x_133;
-  if (x_133) {
-    const int x_137 = asint(x_10[1].x);
-    const int x_139 = arr[x_137].data;
-    const int x_141 = asint(x_10[1].x);
-    x_142 = (x_139 == x_141);
-    x_143_phi = x_142;
-  }
-  if (x_143_phi) {
-    const int x_148 = asint(x_10[3].x);
-    const int x_151 = asint(x_10[2].x);
-    const int x_154 = asint(x_10[2].x);
-    const int x_157 = asint(x_10[3].x);
-    x_GLF_color = float4(float(x_148), float(x_151), float(x_154), float(x_157));
-  } else {
-    const int x_161 = asint(x_10[2].x);
-    const float x_162 = float(x_161);
-    x_GLF_color = float4(x_162, x_162, x_162, x_162);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.msl
deleted file mode 100644
index a2e6bbe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,168 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int data;
-};
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  S arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_struct_S_i11_(constant buf1& x_8, constant buf0& x_10, thread S* const s) {
-  float const x_166 = x_8.v1.x;
-  float const x_168 = x_8.v1.y;
-  if ((x_166 > x_168)) {
-    return;
-  }
-  int const x_173 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  (*(s)).data = x_173;
-  return;
-}
-
-void main_1(constant buf0& x_10, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 arr = {};
-  int i_1 = 0;
-  S param = {};
-  int j = 0;
-  bool x_132 = false;
-  bool x_142 = false;
-  bool x_133_phi = false;
-  bool x_143_phi = false;
-  int const x_46 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  i = x_46;
-  while (true) {
-    int const x_51 = i;
-    int const x_53 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    int const x_56 = i;
-    int const x_57 = i;
-    arr.arr[x_56].data = x_57;
-    {
-      int const x_59 = i;
-      i = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-    }
-  }
-  int const x_62 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  i_1 = x_62;
-  while (true) {
-    int const x_67 = i_1;
-    int const x_69 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    float const x_73 = x_8.v1.x;
-    float const x_75 = x_8.v1.y;
-    if ((x_73 > x_75)) {
-      break;
-    }
-    int const x_79 = i_1;
-    int const x_81 = arr.arr[x_79].data;
-    int const x_83 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_81 == x_83)) {
-      int const x_88 = i_1;
-      S const x_90 = arr.arr[x_88];
-      param = x_90;
-      func_struct_S_i11_(x_8, x_10, &(param));
-      S const x_92 = param;
-      arr.arr[x_88] = x_92;
-    } else {
-      int const x_95 = x_10.x_GLF_uniform_int_values.arr[2].el;
-      j = x_95;
-      while (true) {
-        int const x_100 = j;
-        int const x_102 = x_10.x_GLF_uniform_int_values.arr[0].el;
-        if ((x_100 < x_102)) {
-        } else {
-          break;
-        }
-        int const x_105 = j;
-        int const x_107 = arr.arr[x_105].data;
-        int const x_109 = x_10.x_GLF_uniform_int_values.arr[4].el;
-        if ((x_107 > x_109)) {
-          discard_fragment();
-        }
-        {
-          int const x_113 = j;
-          j = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_115 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
-    }
-  }
-  int const x_118 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  int const x_120 = arr.arr[x_118].data;
-  int const x_122 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  bool const x_123 = (x_120 == x_122);
-  x_133_phi = x_123;
-  if (x_123) {
-    int const x_127 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_129 = arr.arr[x_127].data;
-    int const x_131 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    x_132 = (x_129 == x_131);
-    x_133_phi = x_132;
-  }
-  bool const x_133 = x_133_phi;
-  x_143_phi = x_133;
-  if (x_133) {
-    int const x_137 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_139 = arr.arr[x_137].data;
-    int const x_141 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    x_142 = (x_139 == x_141);
-    x_143_phi = x_142;
-  }
-  bool const x_143 = x_143_phi;
-  if (x_143) {
-    int const x_148 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_151 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_154 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_157 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_148), float(x_151), float(x_154), float(x_157));
-  } else {
-    int const x_161 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_162 = float(x_161);
-    *(tint_symbol_3) = float4(x_162, x_162, x_162, x_162);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_10, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_10 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 05fbcd6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,331 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 207
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "data"
-               OpName %func_struct_S_i11_ "func_struct_S_i11_"
-               OpName %s "s"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %arr "arr"
-               OpName %i_1 "i_1"
-               OpName %param "param"
-               OpName %j "j"
-               OpName %x_132 "x_132"
-               OpName %x_142 "x_142"
-               OpName %x_133_phi "x_133_phi"
-               OpName %x_143_phi "x_143_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_S_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %S = OpTypeStruct %int
-%_ptr_Function_S = OpTypePointer Function %S
-         %19 = OpTypeFunction %void %_ptr_Function_S
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %44 = OpTypeFunction %void
-         %48 = OpConstantNull %int
-     %uint_3 = OpConstant %uint 3
-%_arr_S_uint_3 = OpTypeArray %S %uint_3
-%_ptr_Function__arr_S_uint_3 = OpTypePointer Function %_arr_S_uint_3
-         %53 = OpConstantNull %_arr_S_uint_3
-         %56 = OpConstantNull %S
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %60 = OpConstantNull %bool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %196 = OpTypeFunction %main_out
-%func_struct_S_i11_ = OpFunction %void None %19
-          %s = OpFunctionParameter %_ptr_Function_S
-         %25 = OpLabel
-         %28 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %29 = OpLoad %float %28
-         %31 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %32 = OpLoad %float %31
-         %33 = OpFOrdGreaterThan %bool %29 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-               OpReturn
-         %35 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %43 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %43 %40
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %44
-         %46 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %48
-        %arr = OpVariable %_ptr_Function__arr_S_uint_3 Function %53
-        %i_1 = OpVariable %_ptr_Function_int Function %48
-      %param = OpVariable %_ptr_Function_S Function %56
-          %j = OpVariable %_ptr_Function_int Function %48
-      %x_132 = OpVariable %_ptr_Function_bool Function %60
-      %x_142 = OpVariable %_ptr_Function_bool Function %60
-  %x_133_phi = OpVariable %_ptr_Function_bool Function %60
-  %x_143_phi = OpVariable %_ptr_Function_bool Function %60
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %66 = OpLoad %int %65
-               OpStore %i %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %72 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %68
-         %75 = OpLabel
-         %78 = OpLoad %int %i
-         %79 = OpLoad %int %i
-         %80 = OpAccessChain %_ptr_Function_int %arr %78 %uint_0
-               OpStore %80 %79
-               OpBranch %69
-         %69 = OpLabel
-         %81 = OpLoad %int %i
-         %83 = OpIAdd %int %81 %int_1
-               OpStore %i %83
-               OpBranch %67
-         %68 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %85 = OpLoad %int %84
-               OpStore %i_1 %85
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i_1
-         %91 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %92 = OpLoad %int %91
-         %93 = OpSLessThan %bool %90 %92
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-               OpBranch %94
-         %96 = OpLabel
-               OpBranch %87
-         %94 = OpLabel
-         %97 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %98 = OpLoad %float %97
-         %99 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %100 = OpLoad %float %99
-        %101 = OpFOrdGreaterThan %bool %98 %100
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-               OpBranch %87
-        %102 = OpLabel
-        %104 = OpLoad %int %i_1
-        %105 = OpAccessChain %_ptr_Function_int %arr %104 %uint_0
-        %106 = OpLoad %int %105
-        %108 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %109 = OpLoad %int %108
-        %110 = OpIEqual %bool %106 %109
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %113
-        %112 = OpLabel
-        %114 = OpLoad %int %i_1
-        %115 = OpAccessChain %_ptr_Function_S %arr %114
-        %116 = OpLoad %S %115
-               OpStore %param %116
-        %117 = OpFunctionCall %void %func_struct_S_i11_ %param
-        %119 = OpLoad %S %param
-        %120 = OpAccessChain %_ptr_Function_S %arr %114
-               OpStore %120 %119
-               OpBranch %111
-        %113 = OpLabel
-        %121 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %122 = OpLoad %int %121
-               OpStore %j %122
-               OpBranch %123
-        %123 = OpLabel
-               OpLoopMerge %124 %125 None
-               OpBranch %126
-        %126 = OpLabel
-        %127 = OpLoad %int %j
-        %128 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %129 = OpLoad %int %128
-        %130 = OpSLessThan %bool %127 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %133
-        %132 = OpLabel
-               OpBranch %131
-        %133 = OpLabel
-               OpBranch %124
-        %131 = OpLabel
-        %134 = OpLoad %int %j
-        %135 = OpAccessChain %_ptr_Function_int %arr %134 %uint_0
-        %136 = OpLoad %int %135
-        %138 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_4
-        %139 = OpLoad %int %138
-        %140 = OpSGreaterThan %bool %136 %139
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %141
-        %142 = OpLabel
-               OpKill
-        %141 = OpLabel
-               OpBranch %125
-        %125 = OpLabel
-        %143 = OpLoad %int %j
-        %144 = OpIAdd %int %143 %int_1
-               OpStore %j %144
-               OpBranch %123
-        %124 = OpLabel
-               OpBranch %111
-        %111 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-        %145 = OpLoad %int %i_1
-        %146 = OpIAdd %int %145 %int_1
-               OpStore %i_1 %146
-               OpBranch %86
-         %87 = OpLabel
-        %147 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %148 = OpLoad %int %147
-        %149 = OpAccessChain %_ptr_Function_int %arr %148 %uint_0
-        %150 = OpLoad %int %149
-        %151 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %152 = OpLoad %int %151
-        %153 = OpIEqual %bool %150 %152
-               OpStore %x_133_phi %153
-               OpSelectionMerge %154 None
-               OpBranchConditional %153 %155 %154
-        %155 = OpLabel
-        %156 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %157 = OpLoad %int %156
-        %158 = OpAccessChain %_ptr_Function_int %arr %157 %uint_0
-        %159 = OpLoad %int %158
-        %160 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %161 = OpLoad %int %160
-        %162 = OpIEqual %bool %159 %161
-               OpStore %x_132 %162
-        %163 = OpLoad %bool %x_132
-               OpStore %x_133_phi %163
-               OpBranch %154
-        %154 = OpLabel
-        %164 = OpLoad %bool %x_133_phi
-               OpStore %x_143_phi %164
-               OpSelectionMerge %165 None
-               OpBranchConditional %164 %166 %165
-        %166 = OpLabel
-        %167 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %168 = OpLoad %int %167
-        %169 = OpAccessChain %_ptr_Function_int %arr %168 %uint_0
-        %170 = OpLoad %int %169
-        %171 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %172 = OpLoad %int %171
-        %173 = OpIEqual %bool %170 %172
-               OpStore %x_142 %173
-        %174 = OpLoad %bool %x_142
-               OpStore %x_143_phi %174
-               OpBranch %165
-        %165 = OpLabel
-        %175 = OpLoad %bool %x_143_phi
-               OpSelectionMerge %176 None
-               OpBranchConditional %175 %177 %178
-        %177 = OpLabel
-        %179 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %180 = OpLoad %int %179
-        %181 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %182 = OpLoad %int %181
-        %183 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %184 = OpLoad %int %183
-        %185 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %186 = OpLoad %int %185
-        %187 = OpConvertSToF %float %180
-        %188 = OpConvertSToF %float %182
-        %189 = OpConvertSToF %float %184
-        %190 = OpConvertSToF %float %186
-        %191 = OpCompositeConstruct %v4float %187 %188 %189 %190
-               OpStore %x_GLF_color %191
-               OpBranch %176
-        %178 = OpLabel
-        %192 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %193 = OpLoad %int %192
-        %194 = OpConvertSToF %float %193
-        %195 = OpCompositeConstruct %v4float %194 %194 %194 %194
-               OpStore %x_GLF_color %195
-               OpBranch %176
-        %176 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %196
-        %199 = OpLabel
-        %200 = OpFunctionCall %void %main_1
-        %201 = OpLoad %v4float %x_GLF_color
-        %202 = OpCompositeConstruct %main_out %201
-               OpReturnValue %202
-               OpFunctionEnd
-       %main = OpFunction %void None %44
-        %204 = OpLabel
-        %205 = OpFunctionCall %main_out %main_inner
-        %206 = OpCompositeExtract %v4float %205 0
-               OpStore %x_GLF_color_1_1 %206
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index dedf3c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,160 +0,0 @@
-struct S {
-  data : i32;
-};
-
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i11_(s : ptr<function, S>) {
-  let x_166 : f32 = x_8.v1.x;
-  let x_168 : f32 = x_8.v1.y;
-  if ((x_166 > x_168)) {
-    return;
-  }
-  let x_173 : i32 = x_10.x_GLF_uniform_int_values[0];
-  (*(s)).data = x_173;
-  return;
-}
-
-fn main_1() {
-  var i : i32;
-  var arr : array<S, 3>;
-  var i_1 : i32;
-  var param : S;
-  var j : i32;
-  var x_132 : bool;
-  var x_142 : bool;
-  var x_133_phi : bool;
-  var x_143_phi : bool;
-  let x_46 : i32 = x_10.x_GLF_uniform_int_values[2];
-  i = x_46;
-  loop {
-    let x_51 : i32 = i;
-    let x_53 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    let x_56 : i32 = i;
-    let x_57 : i32 = i;
-    arr[x_56].data = x_57;
-
-    continuing {
-      let x_59 : i32 = i;
-      i = (x_59 + 1);
-    }
-  }
-  let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
-  i_1 = x_62;
-  loop {
-    let x_67 : i32 = i_1;
-    let x_69 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    let x_73 : f32 = x_8.v1.x;
-    let x_75 : f32 = x_8.v1.y;
-    if ((x_73 > x_75)) {
-      break;
-    }
-    let x_79 : i32 = i_1;
-    let x_81 : i32 = arr[x_79].data;
-    let x_83 : i32 = x_10.x_GLF_uniform_int_values[3];
-    if ((x_81 == x_83)) {
-      let x_88 : i32 = i_1;
-      let x_90 : S = arr[x_88];
-      param = x_90;
-      func_struct_S_i11_(&(param));
-      let x_92 : S = param;
-      arr[x_88] = x_92;
-    } else {
-      let x_95 : i32 = x_10.x_GLF_uniform_int_values[2];
-      j = x_95;
-      loop {
-        let x_100 : i32 = j;
-        let x_102 : i32 = x_10.x_GLF_uniform_int_values[0];
-        if ((x_100 < x_102)) {
-        } else {
-          break;
-        }
-        let x_105 : i32 = j;
-        let x_107 : i32 = arr[x_105].data;
-        let x_109 : i32 = x_10.x_GLF_uniform_int_values[4];
-        if ((x_107 > x_109)) {
-          discard;
-        }
-
-        continuing {
-          let x_113 : i32 = j;
-          j = (x_113 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_115 : i32 = i_1;
-      i_1 = (x_115 + 1);
-    }
-  }
-  let x_118 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_120 : i32 = arr[x_118].data;
-  let x_122 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_123 : bool = (x_120 == x_122);
-  x_133_phi = x_123;
-  if (x_123) {
-    let x_127 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_129 : i32 = arr[x_127].data;
-    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_132 = (x_129 == x_131);
-    x_133_phi = x_132;
-  }
-  let x_133 : bool = x_133_phi;
-  x_143_phi = x_133;
-  if (x_133) {
-    let x_137 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_139 : i32 = arr[x_137].data;
-    let x_141 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_142 = (x_139 == x_141);
-    x_143_phi = x_142;
-  }
-  let x_143 : bool = x_143_phi;
-  if (x_143) {
-    let x_148 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_151 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_154 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_157 : i32 = x_10.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_148), f32(x_151), f32(x_154), f32(x_157));
-  } else {
-    let x_161 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_162 : f32 = f32(x_161);
-    x_GLF_color = vec4<f32>(x_162, x_162, x_162, x_162);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 707aead..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,152 +0,0 @@
-struct S {
-  int data;
-};
-
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_struct_S_i11_(inout S s) {
-  const float x_166 = asfloat(x_8[0].x);
-  const float x_168 = asfloat(x_8[0].y);
-  if ((x_166 > x_168)) {
-    return;
-  }
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_173 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-  s.data = x_173;
-  return;
-}
-
-void main_1() {
-  int i = 0;
-  S arr[3] = (S[3])0;
-  int i_1 = 0;
-  S param = (S)0;
-  int j = 0;
-  bool x_132 = false;
-  bool x_142 = false;
-  bool x_133_phi = false;
-  bool x_143_phi = false;
-  const int x_46 = asint(x_10[2].x);
-  i = x_46;
-  while (true) {
-    const int x_51 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_53 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    arr[i].data = i;
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_62 = asint(x_10[2].x);
-  i_1 = x_62;
-  while (true) {
-    const int x_67 = i_1;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_69 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    const float x_73 = asfloat(x_8[0].x);
-    const float x_75 = asfloat(x_8[0].y);
-    if ((x_73 > x_75)) {
-      break;
-    }
-    const int x_81 = arr[i_1].data;
-    const int x_83 = asint(x_10[3].x);
-    if ((x_81 == x_83)) {
-      const int x_88 = i_1;
-      const S x_90 = arr[x_88];
-      param = x_90;
-      func_struct_S_i11_(param);
-      arr[x_88] = param;
-    } else {
-      const int x_95 = asint(x_10[2].x);
-      j = x_95;
-      while (true) {
-        const int x_100 = j;
-        const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-        const int x_102 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-        if ((x_100 < x_102)) {
-        } else {
-          break;
-        }
-        const int x_107 = arr[j].data;
-        const int x_109 = asint(x_10[4].x);
-        if ((x_107 > x_109)) {
-          discard;
-        }
-        {
-          j = (j + 1);
-        }
-      }
-    }
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const int x_118 = asint(x_10[2].x);
-  const int x_120 = arr[x_118].data;
-  const int x_122 = asint(x_10[2].x);
-  const bool x_123 = (x_120 == x_122);
-  x_133_phi = x_123;
-  if (x_123) {
-    const int x_127 = asint(x_10[3].x);
-    const int x_129 = arr[x_127].data;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_131 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_132 = (x_129 == x_131);
-    x_133_phi = x_132;
-  }
-  const bool x_133 = x_133_phi;
-  x_143_phi = x_133;
-  if (x_133) {
-    const int x_137 = asint(x_10[1].x);
-    const int x_139 = arr[x_137].data;
-    const int x_141 = asint(x_10[1].x);
-    x_142 = (x_139 == x_141);
-    x_143_phi = x_142;
-  }
-  if (x_143_phi) {
-    const int x_148 = asint(x_10[3].x);
-    const int x_151 = asint(x_10[2].x);
-    const int x_154 = asint(x_10[2].x);
-    const int x_157 = asint(x_10[3].x);
-    x_GLF_color = float4(float(x_148), float(x_151), float(x_154), float(x_157));
-  } else {
-    const int x_161 = asint(x_10[2].x);
-    const float x_162 = float(x_161);
-    x_GLF_color = float4(x_162, x_162, x_162, x_162);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.msl
deleted file mode 100644
index a2e6bbe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,168 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int data;
-};
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  S arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_struct_S_i11_(constant buf1& x_8, constant buf0& x_10, thread S* const s) {
-  float const x_166 = x_8.v1.x;
-  float const x_168 = x_8.v1.y;
-  if ((x_166 > x_168)) {
-    return;
-  }
-  int const x_173 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  (*(s)).data = x_173;
-  return;
-}
-
-void main_1(constant buf0& x_10, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 arr = {};
-  int i_1 = 0;
-  S param = {};
-  int j = 0;
-  bool x_132 = false;
-  bool x_142 = false;
-  bool x_133_phi = false;
-  bool x_143_phi = false;
-  int const x_46 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  i = x_46;
-  while (true) {
-    int const x_51 = i;
-    int const x_53 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    int const x_56 = i;
-    int const x_57 = i;
-    arr.arr[x_56].data = x_57;
-    {
-      int const x_59 = i;
-      i = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-    }
-  }
-  int const x_62 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  i_1 = x_62;
-  while (true) {
-    int const x_67 = i_1;
-    int const x_69 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    float const x_73 = x_8.v1.x;
-    float const x_75 = x_8.v1.y;
-    if ((x_73 > x_75)) {
-      break;
-    }
-    int const x_79 = i_1;
-    int const x_81 = arr.arr[x_79].data;
-    int const x_83 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_81 == x_83)) {
-      int const x_88 = i_1;
-      S const x_90 = arr.arr[x_88];
-      param = x_90;
-      func_struct_S_i11_(x_8, x_10, &(param));
-      S const x_92 = param;
-      arr.arr[x_88] = x_92;
-    } else {
-      int const x_95 = x_10.x_GLF_uniform_int_values.arr[2].el;
-      j = x_95;
-      while (true) {
-        int const x_100 = j;
-        int const x_102 = x_10.x_GLF_uniform_int_values.arr[0].el;
-        if ((x_100 < x_102)) {
-        } else {
-          break;
-        }
-        int const x_105 = j;
-        int const x_107 = arr.arr[x_105].data;
-        int const x_109 = x_10.x_GLF_uniform_int_values.arr[4].el;
-        if ((x_107 > x_109)) {
-          discard_fragment();
-        }
-        {
-          int const x_113 = j;
-          j = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_115 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
-    }
-  }
-  int const x_118 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  int const x_120 = arr.arr[x_118].data;
-  int const x_122 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  bool const x_123 = (x_120 == x_122);
-  x_133_phi = x_123;
-  if (x_123) {
-    int const x_127 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_129 = arr.arr[x_127].data;
-    int const x_131 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    x_132 = (x_129 == x_131);
-    x_133_phi = x_132;
-  }
-  bool const x_133 = x_133_phi;
-  x_143_phi = x_133;
-  if (x_133) {
-    int const x_137 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_139 = arr.arr[x_137].data;
-    int const x_141 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    x_142 = (x_139 == x_141);
-    x_143_phi = x_142;
-  }
-  bool const x_143 = x_143_phi;
-  if (x_143) {
-    int const x_148 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_151 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_154 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_157 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_148), float(x_151), float(x_154), float(x_157));
-  } else {
-    int const x_161 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_162 = float(x_161);
-    *(tint_symbol_3) = float4(x_162, x_162, x_162, x_162);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_10, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_10 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 05fbcd6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,331 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 207
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "data"
-               OpName %func_struct_S_i11_ "func_struct_S_i11_"
-               OpName %s "s"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %arr "arr"
-               OpName %i_1 "i_1"
-               OpName %param "param"
-               OpName %j "j"
-               OpName %x_132 "x_132"
-               OpName %x_142 "x_142"
-               OpName %x_133_phi "x_133_phi"
-               OpName %x_143_phi "x_143_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_S_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %S = OpTypeStruct %int
-%_ptr_Function_S = OpTypePointer Function %S
-         %19 = OpTypeFunction %void %_ptr_Function_S
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %44 = OpTypeFunction %void
-         %48 = OpConstantNull %int
-     %uint_3 = OpConstant %uint 3
-%_arr_S_uint_3 = OpTypeArray %S %uint_3
-%_ptr_Function__arr_S_uint_3 = OpTypePointer Function %_arr_S_uint_3
-         %53 = OpConstantNull %_arr_S_uint_3
-         %56 = OpConstantNull %S
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %60 = OpConstantNull %bool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %196 = OpTypeFunction %main_out
-%func_struct_S_i11_ = OpFunction %void None %19
-          %s = OpFunctionParameter %_ptr_Function_S
-         %25 = OpLabel
-         %28 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %29 = OpLoad %float %28
-         %31 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %32 = OpLoad %float %31
-         %33 = OpFOrdGreaterThan %bool %29 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-               OpReturn
-         %35 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %43 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %43 %40
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %44
-         %46 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %48
-        %arr = OpVariable %_ptr_Function__arr_S_uint_3 Function %53
-        %i_1 = OpVariable %_ptr_Function_int Function %48
-      %param = OpVariable %_ptr_Function_S Function %56
-          %j = OpVariable %_ptr_Function_int Function %48
-      %x_132 = OpVariable %_ptr_Function_bool Function %60
-      %x_142 = OpVariable %_ptr_Function_bool Function %60
-  %x_133_phi = OpVariable %_ptr_Function_bool Function %60
-  %x_143_phi = OpVariable %_ptr_Function_bool Function %60
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %66 = OpLoad %int %65
-               OpStore %i %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %72 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %68
-         %75 = OpLabel
-         %78 = OpLoad %int %i
-         %79 = OpLoad %int %i
-         %80 = OpAccessChain %_ptr_Function_int %arr %78 %uint_0
-               OpStore %80 %79
-               OpBranch %69
-         %69 = OpLabel
-         %81 = OpLoad %int %i
-         %83 = OpIAdd %int %81 %int_1
-               OpStore %i %83
-               OpBranch %67
-         %68 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %85 = OpLoad %int %84
-               OpStore %i_1 %85
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i_1
-         %91 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %92 = OpLoad %int %91
-         %93 = OpSLessThan %bool %90 %92
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-               OpBranch %94
-         %96 = OpLabel
-               OpBranch %87
-         %94 = OpLabel
-         %97 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %98 = OpLoad %float %97
-         %99 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %100 = OpLoad %float %99
-        %101 = OpFOrdGreaterThan %bool %98 %100
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-               OpBranch %87
-        %102 = OpLabel
-        %104 = OpLoad %int %i_1
-        %105 = OpAccessChain %_ptr_Function_int %arr %104 %uint_0
-        %106 = OpLoad %int %105
-        %108 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %109 = OpLoad %int %108
-        %110 = OpIEqual %bool %106 %109
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %113
-        %112 = OpLabel
-        %114 = OpLoad %int %i_1
-        %115 = OpAccessChain %_ptr_Function_S %arr %114
-        %116 = OpLoad %S %115
-               OpStore %param %116
-        %117 = OpFunctionCall %void %func_struct_S_i11_ %param
-        %119 = OpLoad %S %param
-        %120 = OpAccessChain %_ptr_Function_S %arr %114
-               OpStore %120 %119
-               OpBranch %111
-        %113 = OpLabel
-        %121 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %122 = OpLoad %int %121
-               OpStore %j %122
-               OpBranch %123
-        %123 = OpLabel
-               OpLoopMerge %124 %125 None
-               OpBranch %126
-        %126 = OpLabel
-        %127 = OpLoad %int %j
-        %128 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %129 = OpLoad %int %128
-        %130 = OpSLessThan %bool %127 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %133
-        %132 = OpLabel
-               OpBranch %131
-        %133 = OpLabel
-               OpBranch %124
-        %131 = OpLabel
-        %134 = OpLoad %int %j
-        %135 = OpAccessChain %_ptr_Function_int %arr %134 %uint_0
-        %136 = OpLoad %int %135
-        %138 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_4
-        %139 = OpLoad %int %138
-        %140 = OpSGreaterThan %bool %136 %139
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %141
-        %142 = OpLabel
-               OpKill
-        %141 = OpLabel
-               OpBranch %125
-        %125 = OpLabel
-        %143 = OpLoad %int %j
-        %144 = OpIAdd %int %143 %int_1
-               OpStore %j %144
-               OpBranch %123
-        %124 = OpLabel
-               OpBranch %111
-        %111 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-        %145 = OpLoad %int %i_1
-        %146 = OpIAdd %int %145 %int_1
-               OpStore %i_1 %146
-               OpBranch %86
-         %87 = OpLabel
-        %147 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %148 = OpLoad %int %147
-        %149 = OpAccessChain %_ptr_Function_int %arr %148 %uint_0
-        %150 = OpLoad %int %149
-        %151 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %152 = OpLoad %int %151
-        %153 = OpIEqual %bool %150 %152
-               OpStore %x_133_phi %153
-               OpSelectionMerge %154 None
-               OpBranchConditional %153 %155 %154
-        %155 = OpLabel
-        %156 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %157 = OpLoad %int %156
-        %158 = OpAccessChain %_ptr_Function_int %arr %157 %uint_0
-        %159 = OpLoad %int %158
-        %160 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %161 = OpLoad %int %160
-        %162 = OpIEqual %bool %159 %161
-               OpStore %x_132 %162
-        %163 = OpLoad %bool %x_132
-               OpStore %x_133_phi %163
-               OpBranch %154
-        %154 = OpLabel
-        %164 = OpLoad %bool %x_133_phi
-               OpStore %x_143_phi %164
-               OpSelectionMerge %165 None
-               OpBranchConditional %164 %166 %165
-        %166 = OpLabel
-        %167 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %168 = OpLoad %int %167
-        %169 = OpAccessChain %_ptr_Function_int %arr %168 %uint_0
-        %170 = OpLoad %int %169
-        %171 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %172 = OpLoad %int %171
-        %173 = OpIEqual %bool %170 %172
-               OpStore %x_142 %173
-        %174 = OpLoad %bool %x_142
-               OpStore %x_143_phi %174
-               OpBranch %165
-        %165 = OpLabel
-        %175 = OpLoad %bool %x_143_phi
-               OpSelectionMerge %176 None
-               OpBranchConditional %175 %177 %178
-        %177 = OpLabel
-        %179 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %180 = OpLoad %int %179
-        %181 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %182 = OpLoad %int %181
-        %183 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %184 = OpLoad %int %183
-        %185 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %186 = OpLoad %int %185
-        %187 = OpConvertSToF %float %180
-        %188 = OpConvertSToF %float %182
-        %189 = OpConvertSToF %float %184
-        %190 = OpConvertSToF %float %186
-        %191 = OpCompositeConstruct %v4float %187 %188 %189 %190
-               OpStore %x_GLF_color %191
-               OpBranch %176
-        %178 = OpLabel
-        %192 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %193 = OpLoad %int %192
-        %194 = OpConvertSToF %float %193
-        %195 = OpCompositeConstruct %v4float %194 %194 %194 %194
-               OpStore %x_GLF_color %195
-               OpBranch %176
-        %176 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %196
-        %199 = OpLabel
-        %200 = OpFunctionCall %void %main_1
-        %201 = OpLoad %v4float %x_GLF_color
-        %202 = OpCompositeConstruct %main_out %201
-               OpReturnValue %202
-               OpFunctionEnd
-       %main = OpFunction %void None %44
-        %204 = OpLabel
-        %205 = OpFunctionCall %main_out %main_inner
-        %206 = OpCompositeExtract %v4float %205 0
-               OpStore %x_GLF_color_1_1 %206
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index dedf3c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-first-value-phi/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,160 +0,0 @@
-struct S {
-  data : i32;
-};
-
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i11_(s : ptr<function, S>) {
-  let x_166 : f32 = x_8.v1.x;
-  let x_168 : f32 = x_8.v1.y;
-  if ((x_166 > x_168)) {
-    return;
-  }
-  let x_173 : i32 = x_10.x_GLF_uniform_int_values[0];
-  (*(s)).data = x_173;
-  return;
-}
-
-fn main_1() {
-  var i : i32;
-  var arr : array<S, 3>;
-  var i_1 : i32;
-  var param : S;
-  var j : i32;
-  var x_132 : bool;
-  var x_142 : bool;
-  var x_133_phi : bool;
-  var x_143_phi : bool;
-  let x_46 : i32 = x_10.x_GLF_uniform_int_values[2];
-  i = x_46;
-  loop {
-    let x_51 : i32 = i;
-    let x_53 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    let x_56 : i32 = i;
-    let x_57 : i32 = i;
-    arr[x_56].data = x_57;
-
-    continuing {
-      let x_59 : i32 = i;
-      i = (x_59 + 1);
-    }
-  }
-  let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
-  i_1 = x_62;
-  loop {
-    let x_67 : i32 = i_1;
-    let x_69 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    let x_73 : f32 = x_8.v1.x;
-    let x_75 : f32 = x_8.v1.y;
-    if ((x_73 > x_75)) {
-      break;
-    }
-    let x_79 : i32 = i_1;
-    let x_81 : i32 = arr[x_79].data;
-    let x_83 : i32 = x_10.x_GLF_uniform_int_values[3];
-    if ((x_81 == x_83)) {
-      let x_88 : i32 = i_1;
-      let x_90 : S = arr[x_88];
-      param = x_90;
-      func_struct_S_i11_(&(param));
-      let x_92 : S = param;
-      arr[x_88] = x_92;
-    } else {
-      let x_95 : i32 = x_10.x_GLF_uniform_int_values[2];
-      j = x_95;
-      loop {
-        let x_100 : i32 = j;
-        let x_102 : i32 = x_10.x_GLF_uniform_int_values[0];
-        if ((x_100 < x_102)) {
-        } else {
-          break;
-        }
-        let x_105 : i32 = j;
-        let x_107 : i32 = arr[x_105].data;
-        let x_109 : i32 = x_10.x_GLF_uniform_int_values[4];
-        if ((x_107 > x_109)) {
-          discard;
-        }
-
-        continuing {
-          let x_113 : i32 = j;
-          j = (x_113 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_115 : i32 = i_1;
-      i_1 = (x_115 + 1);
-    }
-  }
-  let x_118 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_120 : i32 = arr[x_118].data;
-  let x_122 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_123 : bool = (x_120 == x_122);
-  x_133_phi = x_123;
-  if (x_123) {
-    let x_127 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_129 : i32 = arr[x_127].data;
-    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_132 = (x_129 == x_131);
-    x_133_phi = x_132;
-  }
-  let x_133 : bool = x_133_phi;
-  x_143_phi = x_133;
-  if (x_133) {
-    let x_137 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_139 : i32 = arr[x_137].data;
-    let x_141 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_142 = (x_139 == x_141);
-    x_143_phi = x_142;
-  }
-  let x_143 : bool = x_143_phi;
-  if (x_143) {
-    let x_148 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_151 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_154 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_157 : i32 = x_10.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_148), f32(x_151), f32(x_154), f32(x_157));
-  } else {
-    let x_161 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_162 : f32 = f32(x_161);
-    x_GLF_color = vec4<f32>(x_162, x_162, x_162, x_162);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 5f34521..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b1, space0) {
-  uint4 x_5[2];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const float x_30 = float(x_29);
-  x_GLF_color = float4(x_30, x_30, x_30, x_30);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_33 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  i = x_33;
-  while (true) {
-    const int x_38 = i;
-    const int x_40 = asint(x_5[1].x);
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    const float x_44 = asfloat(x_8[1].x);
-    if (!((x_44 <= float(i)))) {
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const float x_52 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      const int x_53 = i;
-      const int x_55 = i;
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const float x_58 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      x_GLF_color = (x_GLF_color + float4(x_52, float(x_53), float(x_55), x_58));
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.msl
deleted file mode 100644
index 58d8ed5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_5, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int const x_29 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  float const x_30 = float(x_29);
-  *(tint_symbol_3) = float4(x_30, x_30, x_30, x_30);
-  int const x_33 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  i = x_33;
-  while (true) {
-    int const x_38 = i;
-    int const x_40 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    float const x_44 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    int const x_45 = i;
-    if (!((x_44 <= float(x_45)))) {
-      float const x_52 = x_8.x_GLF_uniform_float_values.arr[0].el;
-      int const x_53 = i;
-      int const x_55 = i;
-      float const x_58 = x_8.x_GLF_uniform_float_values.arr[0].el;
-      float4 const x_60 = *(tint_symbol_3);
-      *(tint_symbol_3) = (x_60 + float4(x_52, float(x_53), float(x_55), x_58));
-    }
-    {
-      int const x_62 = i;
-      i = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_5, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_5 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 076cd83..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 81
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_5 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %70 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %31 = OpConvertSToF %float %30
-         %32 = OpCompositeConstruct %v4float %31 %31 %31 %31
-               OpStore %x_GLF_color %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %34 = OpLoad %int %33
-               OpStore %i %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpSLessThan %bool %39 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %36
-         %45 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %50 = OpLoad %float %49
-         %51 = OpLoad %int %i
-         %53 = OpConvertSToF %float %51
-         %54 = OpFOrdLessThanEqual %bool %50 %53
-         %52 = OpLogicalNot %bool %54
-               OpSelectionMerge %55 None
-               OpBranchConditional %52 %56 %55
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %59 = OpLoad %int %i
-         %60 = OpLoad %int %i
-         %61 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %62 = OpLoad %float %61
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpConvertSToF %float %59
-         %65 = OpConvertSToF %float %60
-         %66 = OpCompositeConstruct %v4float %58 %64 %65 %62
-         %67 = OpFAdd %v4float %63 %66
-               OpStore %x_GLF_color %67
-               OpBranch %55
-         %55 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %68 = OpLoad %int %i
-         %69 = OpIAdd %int %68 %int_1
-               OpStore %i %69
-               OpBranch %35
-         %36 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %70
-         %73 = OpLabel
-         %74 = OpFunctionCall %void %main_1
-         %75 = OpLoad %v4float %x_GLF_color
-         %76 = OpCompositeConstruct %main_out %75
-               OpReturnValue %76
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %78 = OpLabel
-         %79 = OpFunctionCall %main_out %main_inner
-         %80 = OpCompositeExtract %v4float %79 0
-               OpStore %x_GLF_color_1_1 %80
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5aa01a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var i : i32;
-  let x_29 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_30 : f32 = f32(x_29);
-  x_GLF_color = vec4<f32>(x_30, x_30, x_30, x_30);
-  let x_33 : i32 = x_5.x_GLF_uniform_int_values[0];
-  i = x_33;
-  loop {
-    let x_38 : i32 = i;
-    let x_40 : i32 = x_5.x_GLF_uniform_int_values[1];
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    let x_44 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_45 : i32 = i;
-    if (!((x_44 <= f32(x_45)))) {
-      let x_52 : f32 = x_8.x_GLF_uniform_float_values[0];
-      let x_53 : i32 = i;
-      let x_55 : i32 = i;
-      let x_58 : f32 = x_8.x_GLF_uniform_float_values[0];
-      let x_60 : vec4<f32> = x_GLF_color;
-      x_GLF_color = (x_60 + vec4<f32>(x_52, f32(x_53), f32(x_55), x_58));
-    }
-
-    continuing {
-      let x_62 : i32 = i;
-      i = (x_62 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5f34521..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b1, space0) {
-  uint4 x_5[2];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const float x_30 = float(x_29);
-  x_GLF_color = float4(x_30, x_30, x_30, x_30);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_33 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  i = x_33;
-  while (true) {
-    const int x_38 = i;
-    const int x_40 = asint(x_5[1].x);
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    const float x_44 = asfloat(x_8[1].x);
-    if (!((x_44 <= float(i)))) {
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const float x_52 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      const int x_53 = i;
-      const int x_55 = i;
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const float x_58 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      x_GLF_color = (x_GLF_color + float4(x_52, float(x_53), float(x_55), x_58));
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.msl
deleted file mode 100644
index 58d8ed5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_5, constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int const x_29 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  float const x_30 = float(x_29);
-  *(tint_symbol_3) = float4(x_30, x_30, x_30, x_30);
-  int const x_33 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  i = x_33;
-  while (true) {
-    int const x_38 = i;
-    int const x_40 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    float const x_44 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    int const x_45 = i;
-    if (!((x_44 <= float(x_45)))) {
-      float const x_52 = x_8.x_GLF_uniform_float_values.arr[0].el;
-      int const x_53 = i;
-      int const x_55 = i;
-      float const x_58 = x_8.x_GLF_uniform_float_values.arr[0].el;
-      float4 const x_60 = *(tint_symbol_3);
-      *(tint_symbol_3) = (x_60 + float4(x_52, float(x_53), float(x_55), x_58));
-    }
-    {
-      int const x_62 = i;
-      i = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_5, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_5 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 076cd83..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 81
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_5 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-         %70 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %31 = OpConvertSToF %float %30
-         %32 = OpCompositeConstruct %v4float %31 %31 %31 %31
-               OpStore %x_GLF_color %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %34 = OpLoad %int %33
-               OpStore %i %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpSLessThan %bool %39 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %36
-         %45 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %50 = OpLoad %float %49
-         %51 = OpLoad %int %i
-         %53 = OpConvertSToF %float %51
-         %54 = OpFOrdLessThanEqual %bool %50 %53
-         %52 = OpLogicalNot %bool %54
-               OpSelectionMerge %55 None
-               OpBranchConditional %52 %56 %55
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %59 = OpLoad %int %i
-         %60 = OpLoad %int %i
-         %61 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %62 = OpLoad %float %61
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpConvertSToF %float %59
-         %65 = OpConvertSToF %float %60
-         %66 = OpCompositeConstruct %v4float %58 %64 %65 %62
-         %67 = OpFAdd %v4float %63 %66
-               OpStore %x_GLF_color %67
-               OpBranch %55
-         %55 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %68 = OpLoad %int %i
-         %69 = OpIAdd %int %68 %int_1
-               OpStore %i %69
-               OpBranch %35
-         %36 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %70
-         %73 = OpLabel
-         %74 = OpFunctionCall %void %main_1
-         %75 = OpLoad %v4float %x_GLF_color
-         %76 = OpCompositeConstruct %main_out %75
-               OpReturnValue %76
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %78 = OpLabel
-         %79 = OpFunctionCall %main_out %main_inner
-         %80 = OpCompositeExtract %v4float %79 0
-               OpStore %x_GLF_color_1_1 %80
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5aa01a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-instructions-for-if-less-than-equal/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var i : i32;
-  let x_29 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_30 : f32 = f32(x_29);
-  x_GLF_color = vec4<f32>(x_30, x_30, x_30, x_30);
-  let x_33 : i32 = x_5.x_GLF_uniform_int_values[0];
-  i = x_33;
-  loop {
-    let x_38 : i32 = i;
-    let x_40 : i32 = x_5.x_GLF_uniform_int_values[1];
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    let x_44 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_45 : i32 = i;
-    if (!((x_44 <= f32(x_45)))) {
-      let x_52 : f32 = x_8.x_GLF_uniform_float_values[0];
-      let x_53 : i32 = i;
-      let x_55 : i32 = i;
-      let x_58 : f32 = x_8.x_GLF_uniform_float_values[0];
-      let x_60 : vec4<f32> = x_GLF_color;
-      x_GLF_color = (x_60 + vec4<f32>(x_52, f32(x_53), f32(x_55), x_58));
-    }
-
-    continuing {
-      let x_62 : i32 = i;
-      i = (x_62 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2d59334..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const int x_28 = asint(x_6[1].x);
-  a = x_28;
-  const int x_29 = a;
-  const int x_31 = asint(x_6[2].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if (((int2(x_29, x_29) / int2(x_31, 63677)).y == x_37)) {
-    const int x_43 = asint(x_6[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_52 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_43), float(x_46), float(x_49), float(x_52));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_57 = float(x_56);
-    x_GLF_color = float4(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.msl
deleted file mode 100644
index ee8a0d1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_28;
-  int const x_29 = a;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((((int2(x_29, x_29) / int2(x_31, 63677))).y == x_37)) {
-    int const x_43 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_49 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_43), float(x_46), float(x_49), float(x_52));
-  } else {
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_57 = float(x_56);
-    *(tint_symbol_3) = float4(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6f850d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 73
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %v2int = OpTypeVector %int 2
-  %int_63677 = OpConstant %int 63677
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %62 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %26 = OpLoad %int %25
-               OpStore %a %26
-         %27 = OpLoad %int %a
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %33 = OpLoad %int %32
-         %35 = OpCompositeConstruct %v2int %27 %27
-         %37 = OpCompositeConstruct %v2int %30 %int_63677
-         %38 = OpSDiv %v2int %35 %37
-         %39 = OpCompositeExtract %int %38 1
-         %40 = OpIEqual %bool %39 %33
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %46
-         %54 = OpConvertSToF %float %48
-         %55 = OpConvertSToF %float %50
-         %56 = OpConvertSToF %float %52
-         %57 = OpCompositeConstruct %v4float %53 %54 %55 %56
-               OpStore %x_GLF_color %57
-               OpBranch %42
-         %44 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpConvertSToF %float %59
-         %61 = OpCompositeConstruct %v4float %60 %60 %60 %60
-               OpStore %x_GLF_color %61
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %62
-         %65 = OpLabel
-         %66 = OpFunctionCall %void %main_1
-         %67 = OpLoad %v4float %x_GLF_color
-         %68 = OpCompositeConstruct %main_out %67
-               OpReturnValue %68
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %70 = OpLabel
-         %71 = OpFunctionCall %main_out %main_inner
-         %72 = OpCompositeExtract %v4float %71 0
-               OpStore %x_GLF_color_1_1 %72
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c5c24bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_28;
-  let x_29 : i32 = a;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((((vec2<i32>(x_29, x_29) / vec2<i32>(x_31, 63677))).y == x_37)) {
-    let x_43 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_43), f32(x_46), f32(x_49), f32(x_52));
-  } else {
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_57 : f32 = f32(x_56);
-    x_GLF_color = vec4<f32>(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 2d59334..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const int x_28 = asint(x_6[1].x);
-  a = x_28;
-  const int x_29 = a;
-  const int x_31 = asint(x_6[2].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if (((int2(x_29, x_29) / int2(x_31, 63677)).y == x_37)) {
-    const int x_43 = asint(x_6[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_52 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_43), float(x_46), float(x_49), float(x_52));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_57 = float(x_56);
-    x_GLF_color = float4(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.msl
deleted file mode 100644
index ee8a0d1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_28;
-  int const x_29 = a;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((((int2(x_29, x_29) / int2(x_31, 63677))).y == x_37)) {
-    int const x_43 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_49 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_43), float(x_46), float(x_49), float(x_52));
-  } else {
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_57 = float(x_56);
-    *(tint_symbol_3) = float4(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6f850d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 73
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %v2int = OpTypeVector %int 2
-  %int_63677 = OpConstant %int 63677
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %62 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %26 = OpLoad %int %25
-               OpStore %a %26
-         %27 = OpLoad %int %a
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %33 = OpLoad %int %32
-         %35 = OpCompositeConstruct %v2int %27 %27
-         %37 = OpCompositeConstruct %v2int %30 %int_63677
-         %38 = OpSDiv %v2int %35 %37
-         %39 = OpCompositeExtract %int %38 1
-         %40 = OpIEqual %bool %39 %33
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %46
-         %54 = OpConvertSToF %float %48
-         %55 = OpConvertSToF %float %50
-         %56 = OpConvertSToF %float %52
-         %57 = OpCompositeConstruct %v4float %53 %54 %55 %56
-               OpStore %x_GLF_color %57
-               OpBranch %42
-         %44 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpConvertSToF %float %59
-         %61 = OpCompositeConstruct %v4float %60 %60 %60 %60
-               OpStore %x_GLF_color %61
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %62
-         %65 = OpLabel
-         %66 = OpFunctionCall %void %main_1
-         %67 = OpLoad %v4float %x_GLF_color
-         %68 = OpCompositeConstruct %main_out %67
-               OpReturnValue %68
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %70 = OpLabel
-         %71 = OpFunctionCall %main_out %main_inner
-         %72 = OpCompositeExtract %v4float %71 0
-               OpStore %x_GLF_color_1_1 %72
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c5c24bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-div-round-to-zero/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_28;
-  let x_29 : i32 = a;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((((vec2<i32>(x_29, x_29) / vec2<i32>(x_31, 63677))).y == x_37)) {
-    let x_43 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_43), f32(x_46), f32(x_49), f32(x_52));
-  } else {
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_57 : f32 = f32(x_56);
-    x_GLF_color = vec4<f32>(x_57, x_57, x_57, x_57);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8801f2f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,57 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const float x_32 = gl_FragCoord.x;
-  const int x_35 = asint(x_7[1].x);
-  a = ((int(x_32) < x_35) ? 0 : -1);
-  i = 0;
-  {
-    for(; (i < 5); i = (i + 1)) {
-      a = (a / 2);
-    }
-  }
-  if ((a == 0)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const int x_58 = asint(x_7[1].x);
-    const int x_61 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_64 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    const int x_68 = asint(x_7[1].x);
-    const float x_69 = float(x_68);
-    x_GLF_color = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index b787f8f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  int i = 0;
-  float const x_32 = (*(tint_symbol_3)).x;
-  int const x_35 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  a = select(-1, 0, (int(x_32) < x_35));
-  i = 0;
-  while (true) {
-    int const x_42 = i;
-    if ((x_42 < 5)) {
-    } else {
-      break;
-    }
-    int const x_45 = a;
-    a = (x_45 / 2);
-    {
-      int const x_47 = i;
-      i = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-    }
-  }
-  int const x_49 = a;
-  if ((x_49 == 0)) {
-    int const x_55 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_58 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    int const x_68 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_69 = float(x_68);
-    *(tint_symbol_4) = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c0e67e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,149 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 90
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-     %int_n1 = OpConstant %int -1
-      %int_5 = OpConstant %int 5
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %24
-          %i = OpVariable %_ptr_Function_int Function %24
-         %28 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %29 = OpLoad %float %28
-         %32 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %35 = OpConvertFToS %int %29
-         %36 = OpSLessThan %bool %35 %33
-         %34 = OpSelect %int %36 %int_0 %int_n1
-               OpStore %a %34
-               OpStore %i %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %i
-         %46 = OpSLessThan %bool %44 %int_5
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-               OpBranch %47
-         %49 = OpLabel
-               OpBranch %41
-         %47 = OpLabel
-         %50 = OpLoad %int %a
-         %52 = OpSDiv %int %50 %int_2
-               OpStore %a %52
-               OpBranch %42
-         %42 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpIAdd %int %53 %int_1
-               OpStore %i %54
-               OpBranch %40
-         %41 = OpLabel
-         %55 = OpLoad %int %a
-         %56 = OpIEqual %bool %55 %int_0
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpBranch %57
-         %59 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %81 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %86 = OpLabel
-         %88 = OpLoad %v4float %gl_FragCoord_param_1
-         %87 = OpFunctionCall %main_out %main_inner %88
-         %89 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %89
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 15a377c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_32 : f32 = gl_FragCoord.x;
-  let x_35 : i32 = x_7.x_GLF_uniform_int_values[1];
-  a = select(-1, 0, (i32(x_32) < x_35));
-  i = 0;
-  loop {
-    let x_42 : i32 = i;
-    if ((x_42 < 5)) {
-    } else {
-      break;
-    }
-    let x_45 : i32 = a;
-    a = (x_45 / 2);
-
-    continuing {
-      let x_47 : i32 = i;
-      i = (x_47 + 1);
-    }
-  }
-  let x_49 : i32 = a;
-  if ((x_49 == 0)) {
-    let x_55 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_58 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  } else {
-    let x_68 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_69 : f32 = f32(x_68);
-    x_GLF_color = vec4<f32>(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8801f2f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,57 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const float x_32 = gl_FragCoord.x;
-  const int x_35 = asint(x_7[1].x);
-  a = ((int(x_32) < x_35) ? 0 : -1);
-  i = 0;
-  {
-    for(; (i < 5); i = (i + 1)) {
-      a = (a / 2);
-    }
-  }
-  if ((a == 0)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const int x_58 = asint(x_7[1].x);
-    const int x_61 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_64 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    const int x_68 = asint(x_7[1].x);
-    const float x_69 = float(x_68);
-    x_GLF_color = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index b787f8f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  int i = 0;
-  float const x_32 = (*(tint_symbol_3)).x;
-  int const x_35 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  a = select(-1, 0, (int(x_32) < x_35));
-  i = 0;
-  while (true) {
-    int const x_42 = i;
-    if ((x_42 < 5)) {
-    } else {
-      break;
-    }
-    int const x_45 = a;
-    a = (x_45 / 2);
-    {
-      int const x_47 = i;
-      i = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-    }
-  }
-  int const x_49 = a;
-  if ((x_49 == 0)) {
-    int const x_55 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_58 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    int const x_68 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_69 = float(x_68);
-    *(tint_symbol_4) = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c0e67e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,149 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 90
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-     %int_n1 = OpConstant %int -1
-      %int_5 = OpConstant %int 5
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %24
-          %i = OpVariable %_ptr_Function_int Function %24
-         %28 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %29 = OpLoad %float %28
-         %32 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %35 = OpConvertFToS %int %29
-         %36 = OpSLessThan %bool %35 %33
-         %34 = OpSelect %int %36 %int_0 %int_n1
-               OpStore %a %34
-               OpStore %i %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %i
-         %46 = OpSLessThan %bool %44 %int_5
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-               OpBranch %47
-         %49 = OpLabel
-               OpBranch %41
-         %47 = OpLabel
-         %50 = OpLoad %int %a
-         %52 = OpSDiv %int %50 %int_2
-               OpStore %a %52
-               OpBranch %42
-         %42 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpIAdd %int %53 %int_1
-               OpStore %i %54
-               OpBranch %40
-         %41 = OpLabel
-         %55 = OpLoad %int %a
-         %56 = OpIEqual %bool %55 %int_0
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpConvertSToF %float %61
-         %69 = OpConvertSToF %float %63
-         %70 = OpConvertSToF %float %65
-         %71 = OpConvertSToF %float %67
-         %72 = OpCompositeConstruct %v4float %68 %69 %70 %71
-               OpStore %x_GLF_color %72
-               OpBranch %57
-         %59 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %81 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %86 = OpLabel
-         %88 = OpLoad %v4float %gl_FragCoord_param_1
-         %87 = OpFunctionCall %main_out %main_inner %88
-         %89 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %89
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 15a377c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-int-full-bits-divide-by-two-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_32 : f32 = gl_FragCoord.x;
-  let x_35 : i32 = x_7.x_GLF_uniform_int_values[1];
-  a = select(-1, 0, (i32(x_32) < x_35));
-  i = 0;
-  loop {
-    let x_42 : i32 = i;
-    if ((x_42 < 5)) {
-    } else {
-      break;
-    }
-    let x_45 : i32 = a;
-    a = (x_45 / 2);
-
-    continuing {
-      let x_47 : i32 = i;
-      i = (x_47 + 1);
-    }
-  }
-  let x_49 : i32 = a;
-  if ((x_49 == 0)) {
-    let x_55 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_58 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  } else {
-    let x_68 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_69 : f32 = f32(x_68);
-    x_GLF_color = vec4<f32>(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8ede670..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int count = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[1].x);
-  count = x_27;
-  const int x_29 = asint(x_6[1].x);
-  i = x_29;
-  while (true) {
-    const int x_34 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_36 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    const int x_39 = count;
-    const int x_42 = asint(x_6[1].x);
-    if (((x_39 % -93448) > x_42)) {
-      count = (count + 1);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_50 = count;
-  const int x_52 = asint(x_6[1].x);
-  if ((x_50 == x_52)) {
-    const int x_58 = asint(x_6[2].x);
-    const int x_61 = asint(x_6[1].x);
-    const int x_64 = asint(x_6[1].x);
-    const int x_67 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_58), float(x_61), float(x_64), float(x_67));
-  } else {
-    const int x_71 = asint(x_6[1].x);
-    const float x_72 = float(x_71);
-    x_GLF_color = float4(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.msl
deleted file mode 100644
index 781dfbb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int count = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  count = x_27;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_29;
-  while (true) {
-    int const x_34 = i;
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    int const x_39 = count;
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if (((x_39 % -93448) > x_42)) {
-      int const x_46 = count;
-      count = as_type<int>((as_type<uint>(x_46) + as_type<uint>(1)));
-    }
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  int const x_50 = count;
-  int const x_52 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_50 == x_52)) {
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_58), float(x_61), float(x_64), float(x_67));
-  } else {
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_72 = float(x_71);
-    *(tint_symbol_3) = float4(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 7be6d8a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,148 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
- %int_n93448 = OpConstant %int -93448
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %count = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-               OpStore %count %27
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %29 = OpLoad %int %28
-               OpStore %i %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpSLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %31
-         %40 = OpLabel
-         %43 = OpLoad %int %count
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %47 = OpSMod %int %43 %int_n93448
-         %48 = OpSGreaterThan %bool %47 %45
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-         %51 = OpLoad %int %count
-         %52 = OpIAdd %int %51 %int_1
-               OpStore %count %52
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpIAdd %int %53 %int_1
-               OpStore %i %54
-               OpBranch %30
-         %31 = OpLabel
-         %55 = OpLoad %int %count
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpIEqual %bool %55 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %59
-         %61 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c94e6de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var count : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[1];
-  count = x_27;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_29;
-  loop {
-    let x_34 : i32 = i;
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    let x_39 : i32 = count;
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if (((x_39 % -93448) > x_42)) {
-      let x_46 : i32 = count;
-      count = (x_46 + 1);
-    }
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_50 : i32 = count;
-  let x_52 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_50 == x_52)) {
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_58), f32(x_61), f32(x_64), f32(x_67));
-  } else {
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_72 : f32 = f32(x_71);
-    x_GLF_color = vec4<f32>(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8ede670..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int count = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[1].x);
-  count = x_27;
-  const int x_29 = asint(x_6[1].x);
-  i = x_29;
-  while (true) {
-    const int x_34 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_36 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    const int x_39 = count;
-    const int x_42 = asint(x_6[1].x);
-    if (((x_39 % -93448) > x_42)) {
-      count = (count + 1);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_50 = count;
-  const int x_52 = asint(x_6[1].x);
-  if ((x_50 == x_52)) {
-    const int x_58 = asint(x_6[2].x);
-    const int x_61 = asint(x_6[1].x);
-    const int x_64 = asint(x_6[1].x);
-    const int x_67 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_58), float(x_61), float(x_64), float(x_67));
-  } else {
-    const int x_71 = asint(x_6[1].x);
-    const float x_72 = float(x_71);
-    x_GLF_color = float4(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.msl
deleted file mode 100644
index 781dfbb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int count = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  count = x_27;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_29;
-  while (true) {
-    int const x_34 = i;
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    int const x_39 = count;
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if (((x_39 % -93448) > x_42)) {
-      int const x_46 = count;
-      count = as_type<int>((as_type<uint>(x_46) + as_type<uint>(1)));
-    }
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  int const x_50 = count;
-  int const x_52 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_50 == x_52)) {
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_58), float(x_61), float(x_64), float(x_67));
-  } else {
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_72 = float(x_71);
-    *(tint_symbol_3) = float4(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 7be6d8a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,148 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
- %int_n93448 = OpConstant %int -93448
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %count = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-               OpStore %count %27
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %29 = OpLoad %int %28
-               OpStore %i %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpSLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %31
-         %40 = OpLabel
-         %43 = OpLoad %int %count
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %47 = OpSMod %int %43 %int_n93448
-         %48 = OpSGreaterThan %bool %47 %45
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-         %51 = OpLoad %int %count
-         %52 = OpIAdd %int %51 %int_1
-               OpStore %count %52
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpIAdd %int %53 %int_1
-               OpStore %i %54
-               OpBranch %30
-         %31 = OpLabel
-         %55 = OpLoad %int %count
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpIEqual %bool %55 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %59
-         %61 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c94e6de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-integer-modulo-negative/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var count : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[1];
-  count = x_27;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_29;
-  loop {
-    let x_34 : i32 = i;
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    let x_39 : i32 = count;
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if (((x_39 % -93448) > x_42)) {
-      let x_46 : i32 = count;
-      count = (x_46 + 1);
-    }
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_50 : i32 = count;
-  let x_52 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_50 == x_52)) {
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_58), f32(x_61), f32(x_64), f32(x_67));
-  } else {
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_72 : f32 = f32(x_71);
-    x_GLF_color = vec4<f32>(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index c2aee32..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,84 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 func_() {
-  float2 v = float2(0.0f, 0.0f);
-  int i = 0;
-  int k = 0;
-  v = float2(1.0f, 1.0f);
-  i = 0;
-  k = 0;
-  {
-    for(; (k < 2); k = (k + 1)) {
-      const float x_94 = v.y;
-      if (((x_94 + 1.0f) > 4.0f)) {
-        break;
-      }
-      v.y = 1.0f;
-      i = (i + 1);
-    }
-  }
-  if ((i < 10)) {
-    return float3(1.0f, 0.0f, 0.0f);
-  } else {
-    return float3(0.0f, 0.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  int j = 0;
-  float3 data[2] = (float3[2])0;
-  int j_1 = 0;
-  bool x_80 = false;
-  bool x_81_phi = false;
-  j = 0;
-  {
-    for(; (j < 1); j = (j + 1)) {
-      const int x_52 = j;
-      const float3 x_53 = func_();
-      data[x_52] = x_53;
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 1); j_1 = (j_1 + 1)) {
-      const int x_64 = j_1;
-      const float3 x_67 = func_();
-      data[((4 * x_64) + 1)] = x_67;
-    }
-  }
-  const float3 x_72 = data[0];
-  const bool x_74 = all((x_72 == float3(1.0f, 0.0f, 0.0f)));
-  x_81_phi = x_74;
-  if (x_74) {
-    const float3 x_78 = data[1];
-    x_80 = all((x_78 == float3(1.0f, 0.0f, 0.0f)));
-    x_81_phi = x_80;
-  }
-  if (x_81_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0451a90..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float3 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 func_() {
-  float2 v = 0.0f;
-  int i = 0;
-  int k = 0;
-  v = float2(1.0f, 1.0f);
-  i = 0;
-  k = 0;
-  while (true) {
-    int const x_90 = k;
-    if ((x_90 < 2)) {
-    } else {
-      break;
-    }
-    float const x_94 = v.y;
-    if (((x_94 + 1.0f) > 4.0f)) {
-      break;
-    }
-    v.y = 1.0f;
-    int const x_100 = i;
-    i = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-    {
-      int const x_102 = k;
-      k = as_type<int>((as_type<uint>(x_102) + as_type<uint>(1)));
-    }
-  }
-  int const x_104 = i;
-  if ((x_104 < 10)) {
-    return float3(1.0f, 0.0f, 0.0f);
-  } else {
-    return float3(0.0f, 0.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  int j = 0;
-  tint_array_wrapper data = {};
-  int j_1 = 0;
-  bool x_80 = false;
-  bool x_81_phi = false;
-  j = 0;
-  while (true) {
-    int const x_49 = j;
-    if ((x_49 < 1)) {
-    } else {
-      break;
-    }
-    int const x_52 = j;
-    float3 const x_53 = func_();
-    data.arr[x_52] = x_53;
-    {
-      int const x_55 = j;
-      j = as_type<int>((as_type<uint>(x_55) + as_type<uint>(1)));
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_61 = j_1;
-    if ((x_61 < 1)) {
-    } else {
-      break;
-    }
-    int const x_64 = j_1;
-    float3 const x_67 = func_();
-    data.arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(x_64)))) + as_type<uint>(1)))] = x_67;
-    {
-      int const x_69 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_72 = data.arr[0];
-  bool const x_74 = all((x_72 == float3(1.0f, 0.0f, 0.0f)));
-  x_81_phi = x_74;
-  if (x_74) {
-    float3 const x_78 = data.arr[1];
-    x_80 = all((x_78 == float3(1.0f, 0.0f, 0.0f)));
-    x_81_phi = x_80;
-  }
-  bool const x_81 = x_81_phi;
-  if (x_81) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d89fab8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,231 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 137
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %v "v"
-               OpName %i "i"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %data "data"
-               OpName %j_1 "j_1"
-               OpName %x_80 "x_80"
-               OpName %x_81_phi "x_81_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_v3float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v2float %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_4 = OpConstant %float 4
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-    %float_0 = OpConstant %float 0
-         %58 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %59 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %60 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %61 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_v3float_uint_2 = OpTypeArray %v3float %uint_2
-%_ptr_Function__arr_v3float_uint_2 = OpTypePointer Function %_arr_v3float_uint_2
-         %70 = OpConstantNull %_arr_v3float_uint_2
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %74 = OpConstantNull %bool
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-      %int_4 = OpConstant %int 4
-     %v3bool = OpTypeVector %bool 3
-        %124 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %125 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %126 = OpTypeFunction %main_out
-      %func_ = OpFunction %v3float None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %15
-          %i = OpVariable %_ptr_Function_int Function %19
-          %k = OpVariable %_ptr_Function_int Function %19
-               OpStore %v %22
-               OpStore %i %int_0
-               OpStore %k %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %k
-         %30 = OpSLessThan %bool %28 %int_2
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-         %38 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFAdd %float %39 %float_1
-         %42 = OpFOrdGreaterThan %bool %40 %float_4
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpBranch %25
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_float %v %uint_1
-               OpStore %45 %float_1
-         %46 = OpLoad %int %i
-         %48 = OpIAdd %int %46 %int_1
-               OpStore %i %48
-               OpBranch %26
-         %26 = OpLabel
-         %49 = OpLoad %int %k
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %k %50
-               OpBranch %24
-         %25 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpSLessThan %bool %51 %int_10
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpReturnValue %58
-         %56 = OpLabel
-               OpReturnValue %59
-         %54 = OpLabel
-               OpReturnValue %60
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %61
-         %64 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %19
-       %data = OpVariable %_ptr_Function__arr_v3float_uint_2 Function %70
-        %j_1 = OpVariable %_ptr_Function_int Function %19
-       %x_80 = OpVariable %_ptr_Function_bool Function %74
-   %x_81_phi = OpVariable %_ptr_Function_bool Function %74
-               OpStore %j %int_0
-               OpBranch %76
-         %76 = OpLabel
-               OpLoopMerge %77 %78 None
-               OpBranch %79
-         %79 = OpLabel
-         %80 = OpLoad %int %j
-         %81 = OpSLessThan %bool %80 %int_1
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-               OpBranch %77
-         %82 = OpLabel
-         %85 = OpLoad %int %j
-         %86 = OpFunctionCall %v3float %func_
-         %88 = OpAccessChain %_ptr_Function_v3float %data %85
-               OpStore %88 %86
-               OpBranch %78
-         %78 = OpLabel
-         %89 = OpLoad %int %j
-         %90 = OpIAdd %int %89 %int_1
-               OpStore %j %90
-               OpBranch %76
-         %77 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %j_1
-         %96 = OpSLessThan %bool %95 %int_1
-               OpSelectionMerge %97 None
-               OpBranchConditional %96 %98 %99
-         %98 = OpLabel
-               OpBranch %97
-         %99 = OpLabel
-               OpBranch %92
-         %97 = OpLabel
-        %100 = OpLoad %int %j_1
-        %101 = OpFunctionCall %v3float %func_
-        %103 = OpIMul %int %int_4 %100
-        %104 = OpIAdd %int %103 %int_1
-        %105 = OpAccessChain %_ptr_Function_v3float %data %104
-               OpStore %105 %101
-               OpBranch %93
-         %93 = OpLabel
-        %106 = OpLoad %int %j_1
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %j_1 %107
-               OpBranch %91
-         %92 = OpLabel
-        %108 = OpAccessChain %_ptr_Function_v3float %data %int_0
-        %109 = OpLoad %v3float %108
-        %111 = OpFOrdEqual %v3bool %109 %58
-        %110 = OpAll %bool %111
-               OpStore %x_81_phi %110
-               OpSelectionMerge %113 None
-               OpBranchConditional %110 %114 %113
-        %114 = OpLabel
-        %115 = OpAccessChain %_ptr_Function_v3float %data %int_1
-        %116 = OpLoad %v3float %115
-        %118 = OpFOrdEqual %v3bool %116 %58
-        %117 = OpAll %bool %118
-               OpStore %x_80 %117
-        %119 = OpLoad %bool %x_80
-               OpStore %x_81_phi %119
-               OpBranch %113
-        %113 = OpLabel
-        %120 = OpLoad %bool %x_81_phi
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpStore %x_GLF_color %124
-               OpBranch %121
-        %123 = OpLabel
-               OpStore %x_GLF_color %125
-               OpBranch %121
-        %121 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %126
-        %129 = OpLabel
-        %130 = OpFunctionCall %void %main_1
-        %131 = OpLoad %v4float %x_GLF_color
-        %132 = OpCompositeConstruct %main_out %131
-               OpReturnValue %132
-               OpFunctionEnd
-       %main = OpFunction %void None %61
-        %134 = OpLabel
-        %135 = OpFunctionCall %main_out %main_inner
-        %136 = OpCompositeExtract %v4float %135 0
-               OpStore %x_GLF_color_1_1 %136
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a0443e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,102 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> vec3<f32> {
-  var v : vec2<f32>;
-  var i : i32;
-  var k : i32;
-  v = vec2<f32>(1.0, 1.0);
-  i = 0;
-  k = 0;
-  loop {
-    let x_90 : i32 = k;
-    if ((x_90 < 2)) {
-    } else {
-      break;
-    }
-    let x_94 : f32 = v.y;
-    if (((x_94 + 1.0) > 4.0)) {
-      break;
-    }
-    v.y = 1.0;
-    let x_100 : i32 = i;
-    i = (x_100 + 1);
-
-    continuing {
-      let x_102 : i32 = k;
-      k = (x_102 + 1);
-    }
-  }
-  let x_104 : i32 = i;
-  if ((x_104 < 10)) {
-    return vec3<f32>(1.0, 0.0, 0.0);
-  } else {
-    return vec3<f32>(0.0, 0.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var j : i32;
-  var data : array<vec3<f32>, 2>;
-  var j_1 : i32;
-  var x_80 : bool;
-  var x_81_phi : bool;
-  j = 0;
-  loop {
-    let x_49 : i32 = j;
-    if ((x_49 < 1)) {
-    } else {
-      break;
-    }
-    let x_52 : i32 = j;
-    let x_53 : vec3<f32> = func_();
-    data[x_52] = x_53;
-
-    continuing {
-      let x_55 : i32 = j;
-      j = (x_55 + 1);
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_61 : i32 = j_1;
-    if ((x_61 < 1)) {
-    } else {
-      break;
-    }
-    let x_64 : i32 = j_1;
-    let x_67 : vec3<f32> = func_();
-    data[((4 * x_64) + 1)] = x_67;
-
-    continuing {
-      let x_69 : i32 = j_1;
-      j_1 = (x_69 + 1);
-    }
-  }
-  let x_72 : vec3<f32> = data[0];
-  let x_74 : bool = all((x_72 == vec3<f32>(1.0, 0.0, 0.0)));
-  x_81_phi = x_74;
-  if (x_74) {
-    let x_78 : vec3<f32> = data[1];
-    x_80 = all((x_78 == vec3<f32>(1.0, 0.0, 0.0)));
-    x_81_phi = x_80;
-  }
-  let x_81 : bool = x_81_phi;
-  if (x_81) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c2aee32..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,84 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 func_() {
-  float2 v = float2(0.0f, 0.0f);
-  int i = 0;
-  int k = 0;
-  v = float2(1.0f, 1.0f);
-  i = 0;
-  k = 0;
-  {
-    for(; (k < 2); k = (k + 1)) {
-      const float x_94 = v.y;
-      if (((x_94 + 1.0f) > 4.0f)) {
-        break;
-      }
-      v.y = 1.0f;
-      i = (i + 1);
-    }
-  }
-  if ((i < 10)) {
-    return float3(1.0f, 0.0f, 0.0f);
-  } else {
-    return float3(0.0f, 0.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  int j = 0;
-  float3 data[2] = (float3[2])0;
-  int j_1 = 0;
-  bool x_80 = false;
-  bool x_81_phi = false;
-  j = 0;
-  {
-    for(; (j < 1); j = (j + 1)) {
-      const int x_52 = j;
-      const float3 x_53 = func_();
-      data[x_52] = x_53;
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 1); j_1 = (j_1 + 1)) {
-      const int x_64 = j_1;
-      const float3 x_67 = func_();
-      data[((4 * x_64) + 1)] = x_67;
-    }
-  }
-  const float3 x_72 = data[0];
-  const bool x_74 = all((x_72 == float3(1.0f, 0.0f, 0.0f)));
-  x_81_phi = x_74;
-  if (x_74) {
-    const float3 x_78 = data[1];
-    x_80 = all((x_78 == float3(1.0f, 0.0f, 0.0f)));
-    x_81_phi = x_80;
-  }
-  if (x_81_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0451a90..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float3 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 func_() {
-  float2 v = 0.0f;
-  int i = 0;
-  int k = 0;
-  v = float2(1.0f, 1.0f);
-  i = 0;
-  k = 0;
-  while (true) {
-    int const x_90 = k;
-    if ((x_90 < 2)) {
-    } else {
-      break;
-    }
-    float const x_94 = v.y;
-    if (((x_94 + 1.0f) > 4.0f)) {
-      break;
-    }
-    v.y = 1.0f;
-    int const x_100 = i;
-    i = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-    {
-      int const x_102 = k;
-      k = as_type<int>((as_type<uint>(x_102) + as_type<uint>(1)));
-    }
-  }
-  int const x_104 = i;
-  if ((x_104 < 10)) {
-    return float3(1.0f, 0.0f, 0.0f);
-  } else {
-    return float3(0.0f, 0.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  int j = 0;
-  tint_array_wrapper data = {};
-  int j_1 = 0;
-  bool x_80 = false;
-  bool x_81_phi = false;
-  j = 0;
-  while (true) {
-    int const x_49 = j;
-    if ((x_49 < 1)) {
-    } else {
-      break;
-    }
-    int const x_52 = j;
-    float3 const x_53 = func_();
-    data.arr[x_52] = x_53;
-    {
-      int const x_55 = j;
-      j = as_type<int>((as_type<uint>(x_55) + as_type<uint>(1)));
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_61 = j_1;
-    if ((x_61 < 1)) {
-    } else {
-      break;
-    }
-    int const x_64 = j_1;
-    float3 const x_67 = func_();
-    data.arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(x_64)))) + as_type<uint>(1)))] = x_67;
-    {
-      int const x_69 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_72 = data.arr[0];
-  bool const x_74 = all((x_72 == float3(1.0f, 0.0f, 0.0f)));
-  x_81_phi = x_74;
-  if (x_74) {
-    float3 const x_78 = data.arr[1];
-    x_80 = all((x_78 == float3(1.0f, 0.0f, 0.0f)));
-    x_81_phi = x_80;
-  }
-  bool const x_81 = x_81_phi;
-  if (x_81) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d89fab8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,231 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 137
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %v "v"
-               OpName %i "i"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %data "data"
-               OpName %j_1 "j_1"
-               OpName %x_80 "x_80"
-               OpName %x_81_phi "x_81_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_v3float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v2float %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_4 = OpConstant %float 4
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-    %float_0 = OpConstant %float 0
-         %58 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %59 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %60 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %61 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_v3float_uint_2 = OpTypeArray %v3float %uint_2
-%_ptr_Function__arr_v3float_uint_2 = OpTypePointer Function %_arr_v3float_uint_2
-         %70 = OpConstantNull %_arr_v3float_uint_2
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %74 = OpConstantNull %bool
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-      %int_4 = OpConstant %int 4
-     %v3bool = OpTypeVector %bool 3
-        %124 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %125 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %126 = OpTypeFunction %main_out
-      %func_ = OpFunction %v3float None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %15
-          %i = OpVariable %_ptr_Function_int Function %19
-          %k = OpVariable %_ptr_Function_int Function %19
-               OpStore %v %22
-               OpStore %i %int_0
-               OpStore %k %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %k
-         %30 = OpSLessThan %bool %28 %int_2
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-         %38 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFAdd %float %39 %float_1
-         %42 = OpFOrdGreaterThan %bool %40 %float_4
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpBranch %25
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_float %v %uint_1
-               OpStore %45 %float_1
-         %46 = OpLoad %int %i
-         %48 = OpIAdd %int %46 %int_1
-               OpStore %i %48
-               OpBranch %26
-         %26 = OpLabel
-         %49 = OpLoad %int %k
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %k %50
-               OpBranch %24
-         %25 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpSLessThan %bool %51 %int_10
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpReturnValue %58
-         %56 = OpLabel
-               OpReturnValue %59
-         %54 = OpLabel
-               OpReturnValue %60
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %61
-         %64 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %19
-       %data = OpVariable %_ptr_Function__arr_v3float_uint_2 Function %70
-        %j_1 = OpVariable %_ptr_Function_int Function %19
-       %x_80 = OpVariable %_ptr_Function_bool Function %74
-   %x_81_phi = OpVariable %_ptr_Function_bool Function %74
-               OpStore %j %int_0
-               OpBranch %76
-         %76 = OpLabel
-               OpLoopMerge %77 %78 None
-               OpBranch %79
-         %79 = OpLabel
-         %80 = OpLoad %int %j
-         %81 = OpSLessThan %bool %80 %int_1
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-               OpBranch %77
-         %82 = OpLabel
-         %85 = OpLoad %int %j
-         %86 = OpFunctionCall %v3float %func_
-         %88 = OpAccessChain %_ptr_Function_v3float %data %85
-               OpStore %88 %86
-               OpBranch %78
-         %78 = OpLabel
-         %89 = OpLoad %int %j
-         %90 = OpIAdd %int %89 %int_1
-               OpStore %j %90
-               OpBranch %76
-         %77 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %j_1
-         %96 = OpSLessThan %bool %95 %int_1
-               OpSelectionMerge %97 None
-               OpBranchConditional %96 %98 %99
-         %98 = OpLabel
-               OpBranch %97
-         %99 = OpLabel
-               OpBranch %92
-         %97 = OpLabel
-        %100 = OpLoad %int %j_1
-        %101 = OpFunctionCall %v3float %func_
-        %103 = OpIMul %int %int_4 %100
-        %104 = OpIAdd %int %103 %int_1
-        %105 = OpAccessChain %_ptr_Function_v3float %data %104
-               OpStore %105 %101
-               OpBranch %93
-         %93 = OpLabel
-        %106 = OpLoad %int %j_1
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %j_1 %107
-               OpBranch %91
-         %92 = OpLabel
-        %108 = OpAccessChain %_ptr_Function_v3float %data %int_0
-        %109 = OpLoad %v3float %108
-        %111 = OpFOrdEqual %v3bool %109 %58
-        %110 = OpAll %bool %111
-               OpStore %x_81_phi %110
-               OpSelectionMerge %113 None
-               OpBranchConditional %110 %114 %113
-        %114 = OpLabel
-        %115 = OpAccessChain %_ptr_Function_v3float %data %int_1
-        %116 = OpLoad %v3float %115
-        %118 = OpFOrdEqual %v3bool %116 %58
-        %117 = OpAll %bool %118
-               OpStore %x_80 %117
-        %119 = OpLoad %bool %x_80
-               OpStore %x_81_phi %119
-               OpBranch %113
-        %113 = OpLabel
-        %120 = OpLoad %bool %x_81_phi
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpStore %x_GLF_color %124
-               OpBranch %121
-        %123 = OpLabel
-               OpStore %x_GLF_color %125
-               OpBranch %121
-        %121 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %126
-        %129 = OpLabel
-        %130 = OpFunctionCall %void %main_1
-        %131 = OpLoad %v4float %x_GLF_color
-        %132 = OpCompositeConstruct %main_out %131
-               OpReturnValue %132
-               OpFunctionEnd
-       %main = OpFunction %void None %61
-        %134 = OpLabel
-        %135 = OpFunctionCall %main_out %main_inner
-        %136 = OpCompositeExtract %v4float %135 0
-               OpStore %x_GLF_color_1_1 %136
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a0443e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-intervalmap-set-stop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,102 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> vec3<f32> {
-  var v : vec2<f32>;
-  var i : i32;
-  var k : i32;
-  v = vec2<f32>(1.0, 1.0);
-  i = 0;
-  k = 0;
-  loop {
-    let x_90 : i32 = k;
-    if ((x_90 < 2)) {
-    } else {
-      break;
-    }
-    let x_94 : f32 = v.y;
-    if (((x_94 + 1.0) > 4.0)) {
-      break;
-    }
-    v.y = 1.0;
-    let x_100 : i32 = i;
-    i = (x_100 + 1);
-
-    continuing {
-      let x_102 : i32 = k;
-      k = (x_102 + 1);
-    }
-  }
-  let x_104 : i32 = i;
-  if ((x_104 < 10)) {
-    return vec3<f32>(1.0, 0.0, 0.0);
-  } else {
-    return vec3<f32>(0.0, 0.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var j : i32;
-  var data : array<vec3<f32>, 2>;
-  var j_1 : i32;
-  var x_80 : bool;
-  var x_81_phi : bool;
-  j = 0;
-  loop {
-    let x_49 : i32 = j;
-    if ((x_49 < 1)) {
-    } else {
-      break;
-    }
-    let x_52 : i32 = j;
-    let x_53 : vec3<f32> = func_();
-    data[x_52] = x_53;
-
-    continuing {
-      let x_55 : i32 = j;
-      j = (x_55 + 1);
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_61 : i32 = j_1;
-    if ((x_61 < 1)) {
-    } else {
-      break;
-    }
-    let x_64 : i32 = j_1;
-    let x_67 : vec3<f32> = func_();
-    data[((4 * x_64) + 1)] = x_67;
-
-    continuing {
-      let x_69 : i32 = j_1;
-      j_1 = (x_69 + 1);
-    }
-  }
-  let x_72 : vec3<f32> = data[0];
-  let x_74 : bool = all((x_72 == vec3<f32>(1.0, 0.0, 0.0)));
-  x_81_phi = x_74;
-  if (x_74) {
-    let x_78 : vec3<f32> = data[1];
-    x_80 = all((x_78 == vec3<f32>(1.0, 0.0, 0.0)));
-    x_81_phi = x_80;
-  }
-  let x_81 : bool = x_81_phi;
-  if (x_81) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.hlsl
deleted file mode 100644
index 36755d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_35 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float2(x_35, x_35);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_40 = v1.y;
-  set_float2(v1, x_38, ldexp(x_40, -256));
-  if ((mul(float2x2(float2(x_35, 0.0f), float2(0.0f, x_35)), v1).x == x_35)) {
-    const float x_53 = float(x_38);
-    const int x_55 = asint(x_8[1].x);
-    const float x_56 = float(x_55);
-    x_GLF_color = float4(x_53, x_56, x_56, x_53);
-  } else {
-    const int x_59 = asint(x_8[1].x);
-    const float x_60 = float(x_59);
-    x_GLF_color = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.msl
deleted file mode 100644
index 9da2ee9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float2(x_35, x_35);
-  int const x_38 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_40 = v1.y;
-  v1[x_38] = ldexp(x_40, -256);
-  float2 const x_43 = v1;
-  if ((((x_43 * float2x2(float2(x_35, 0.0f), float2(0.0f, x_35)))).x == x_35)) {
-    float const x_53 = float(x_38);
-    int const x_55 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_56 = float(x_55);
-    *(tint_symbol_3) = float4(x_53, x_56, x_56, x_53);
-  } else {
-    int const x_59 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_60 = float(x_59);
-    *(tint_symbol_3) = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.spvasm
deleted file mode 100644
index 3709673..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %42 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-   %int_n256 = OpConstant %int -256
-%mat2v2float = OpTypeMatrix %v2float 2
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %26
-         %30 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %31 = OpLoad %float %30
-         %32 = OpCompositeConstruct %v2float %31 %31
-               OpStore %v1 %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %38 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Function_float %v1 %35
-         %41 = OpExtInst %float %42 Ldexp %39 %int_n256
-               OpStore %40 %41
-         %44 = OpLoad %v2float %v1
-         %47 = OpCompositeConstruct %v2float %31 %float_0
-         %48 = OpCompositeConstruct %v2float %float_0 %31
-         %49 = OpCompositeConstruct %mat2v2float %47 %48
-         %50 = OpVectorTimesMatrix %v2float %44 %49
-         %51 = OpCompositeExtract %float %50 0
-         %52 = OpFOrdEqual %bool %51 %31
-               OpSelectionMerge %54 None
-               OpBranchConditional %52 %55 %56
-         %55 = OpLabel
-         %57 = OpConvertSToF %float %35
-         %59 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpConvertSToF %float %60
-         %62 = OpCompositeConstruct %v4float %57 %61 %61 %57
-               OpStore %x_GLF_color %62
-               OpBranch %54
-         %56 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %64
-         %66 = OpCompositeConstruct %v4float %65 %65 %65 %65
-               OpStore %x_GLF_color %66
-               OpBranch %54
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.wgsl
deleted file mode 100644
index 83090a7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v1 = vec2<f32>(x_35, x_35);
-  let x_38 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_40 : f32 = v1.y;
-  v1[x_38] = ldexp(x_40, -256);
-  let x_43 : vec2<f32> = v1;
-  if ((((x_43 * mat2x2<f32>(vec2<f32>(x_35, 0.0), vec2<f32>(0.0, x_35)))).x == x_35)) {
-    let x_53 : f32 = f32(x_38);
-    let x_55 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_56 : f32 = f32(x_55);
-    x_GLF_color = vec4<f32>(x_53, x_56, x_56, x_53);
-  } else {
-    let x_59 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_60 : f32 = f32(x_59);
-    x_GLF_color = vec4<f32>(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.hlsl
deleted file mode 100644
index 36755d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_35 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float2(x_35, x_35);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_40 = v1.y;
-  set_float2(v1, x_38, ldexp(x_40, -256));
-  if ((mul(float2x2(float2(x_35, 0.0f), float2(0.0f, x_35)), v1).x == x_35)) {
-    const float x_53 = float(x_38);
-    const int x_55 = asint(x_8[1].x);
-    const float x_56 = float(x_55);
-    x_GLF_color = float4(x_53, x_56, x_56, x_53);
-  } else {
-    const int x_59 = asint(x_8[1].x);
-    const float x_60 = float(x_59);
-    x_GLF_color = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.msl
deleted file mode 100644
index 9da2ee9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float2(x_35, x_35);
-  int const x_38 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_40 = v1.y;
-  v1[x_38] = ldexp(x_40, -256);
-  float2 const x_43 = v1;
-  if ((((x_43 * float2x2(float2(x_35, 0.0f), float2(0.0f, x_35)))).x == x_35)) {
-    float const x_53 = float(x_38);
-    int const x_55 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_56 = float(x_55);
-    *(tint_symbol_3) = float4(x_53, x_56, x_56, x_53);
-  } else {
-    int const x_59 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_60 = float(x_59);
-    *(tint_symbol_3) = float4(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.spvasm
deleted file mode 100644
index 3709673..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %42 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-   %int_n256 = OpConstant %int -256
-%mat2v2float = OpTypeMatrix %v2float 2
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %26
-         %30 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %31 = OpLoad %float %30
-         %32 = OpCompositeConstruct %v2float %31 %31
-               OpStore %v1 %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %38 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpAccessChain %_ptr_Function_float %v1 %35
-         %41 = OpExtInst %float %42 Ldexp %39 %int_n256
-               OpStore %40 %41
-         %44 = OpLoad %v2float %v1
-         %47 = OpCompositeConstruct %v2float %31 %float_0
-         %48 = OpCompositeConstruct %v2float %float_0 %31
-         %49 = OpCompositeConstruct %mat2v2float %47 %48
-         %50 = OpVectorTimesMatrix %v2float %44 %49
-         %51 = OpCompositeExtract %float %50 0
-         %52 = OpFOrdEqual %bool %51 %31
-               OpSelectionMerge %54 None
-               OpBranchConditional %52 %55 %56
-         %55 = OpLabel
-         %57 = OpConvertSToF %float %35
-         %59 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpConvertSToF %float %60
-         %62 = OpCompositeConstruct %v4float %57 %61 %61 %57
-               OpStore %x_GLF_color %62
-               OpBranch %54
-         %56 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %64
-         %66 = OpCompositeConstruct %v4float %65 %65 %65 %65
-               OpStore %x_GLF_color %66
-               OpBranch %54
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.wgsl
deleted file mode 100644
index 83090a7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ldexp-undefined-mat-vec-multiply/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v1 = vec2<f32>(x_35, x_35);
-  let x_38 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_40 : f32 = v1.y;
-  v1[x_38] = ldexp(x_40, -256);
-  let x_43 : vec2<f32> = v1;
-  if ((((x_43 * mat2x2<f32>(vec2<f32>(x_35, 0.0), vec2<f32>(0.0, x_35)))).x == x_35)) {
-    let x_53 : f32 = f32(x_38);
-    let x_55 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_56 : f32 = f32(x_55);
-    x_GLF_color = vec4<f32>(x_53, x_56, x_56, x_53);
-  } else {
-    let x_59 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_60 : f32 = f32(x_59);
-    x_GLF_color = vec4<f32>(x_60, x_60, x_60, x_60);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f6be289..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-struct tint_padded_array_element {
-  int el;
-};
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int idx = 0;
-  int a = 0;
-  tint_padded_array_element indexable[2] = (tint_padded_array_element[2])0;
-  const int x_27 = asint(x_6[1].x);
-  idx = (1 << asuint(x_27));
-  const int x_30 = asint(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_32 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_34 = idx;
-  const tint_padded_array_element tint_symbol_2[2] = {{x_30}, {x_32}};
-  indexable = tint_symbol_2;
-  const int x_36 = indexable[x_34].el;
-  a = x_36;
-  const int x_37 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_39 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_37 == x_39)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_48 = asint(x_6[1].x);
-    const int x_51 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    const int x_58 = asint(x_6[1].x);
-    const float x_59 = float(x_58);
-    x_GLF_color = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.msl
deleted file mode 100644
index a52b3c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, thread float4* const tint_symbol_4) {
-  int idx = 0;
-  int a = 0;
-  tint_array_wrapper indexable = {};
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  idx = as_type<int>((as_type<uint>(1) << as_type<uint>(x_27)));
-  int const x_30 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_34 = idx;
-  tint_array_wrapper const tint_symbol_2 = {.arr={{.el=x_30}, {.el=x_32}}};
-  indexable = tint_symbol_2;
-  int const x_36 = indexable.arr[x_34].el;
-  a = x_36;
-  int const x_37 = a;
-  int const x_39 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_37 == x_39)) {
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_54 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_59 = float(x_58);
-    *(tint_symbol_4) = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 535a1a2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %idx "idx"
-               OpName %a "a"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %25 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-        %idx = OpVariable %_ptr_Function_int Function %21
-          %a = OpVariable %_ptr_Function_int Function %21
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_2 Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %30 = OpLoad %int %29
-         %31 = OpBitcast %uint %30
-         %32 = OpShiftLeftLogical %int %int_1 %31
-               OpStore %idx %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpLoad %int %idx
-         %39 = OpCompositeConstruct %_arr_int_uint_2 %34 %37
-               OpStore %indexable %39
-         %40 = OpAccessChain %_ptr_Function_int %indexable %38
-         %41 = OpLoad %int %40
-               OpStore %a %41
-         %42 = OpLoad %int %a
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpIEqual %bool %42 %44
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %49
-         %48 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpConvertSToF %float %51
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %47
-         %49 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %64
-         %66 = OpCompositeConstruct %v4float %65 %65 %65 %65
-               OpStore %x_GLF_color %66
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a39da82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var idx : i32;
-  var a : i32;
-  var indexable : Arr;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[1];
-  idx = (1 << bitcast<u32>(x_27));
-  let x_30 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_34 : i32 = idx;
-  indexable = Arr(x_30, x_32);
-  let x_36 : i32 = indexable[x_34];
-  a = x_36;
-  let x_37 : i32 = a;
-  let x_39 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_37 == x_39)) {
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_54 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_45), f32(x_48), f32(x_51), f32(x_54));
-  } else {
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_59 : f32 = f32(x_58);
-    x_GLF_color = vec4<f32>(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f6be289..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-struct tint_padded_array_element {
-  int el;
-};
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int idx = 0;
-  int a = 0;
-  tint_padded_array_element indexable[2] = (tint_padded_array_element[2])0;
-  const int x_27 = asint(x_6[1].x);
-  idx = (1 << asuint(x_27));
-  const int x_30 = asint(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_32 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_34 = idx;
-  const tint_padded_array_element tint_symbol_2[2] = {{x_30}, {x_32}};
-  indexable = tint_symbol_2;
-  const int x_36 = indexable[x_34].el;
-  a = x_36;
-  const int x_37 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_39 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_37 == x_39)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_48 = asint(x_6[1].x);
-    const int x_51 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    const int x_58 = asint(x_6[1].x);
-    const float x_59 = float(x_58);
-    x_GLF_color = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.msl
deleted file mode 100644
index a52b3c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, thread float4* const tint_symbol_4) {
-  int idx = 0;
-  int a = 0;
-  tint_array_wrapper indexable = {};
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  idx = as_type<int>((as_type<uint>(1) << as_type<uint>(x_27)));
-  int const x_30 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_32 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_34 = idx;
-  tint_array_wrapper const tint_symbol_2 = {.arr={{.el=x_30}, {.el=x_32}}};
-  indexable = tint_symbol_2;
-  int const x_36 = indexable.arr[x_34].el;
-  a = x_36;
-  int const x_37 = a;
-  int const x_39 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_37 == x_39)) {
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_54 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_59 = float(x_58);
-    *(tint_symbol_4) = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 535a1a2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %idx "idx"
-               OpName %a "a"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %25 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-        %idx = OpVariable %_ptr_Function_int Function %21
-          %a = OpVariable %_ptr_Function_int Function %21
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_2 Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %30 = OpLoad %int %29
-         %31 = OpBitcast %uint %30
-         %32 = OpShiftLeftLogical %int %int_1 %31
-               OpStore %idx %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpLoad %int %idx
-         %39 = OpCompositeConstruct %_arr_int_uint_2 %34 %37
-               OpStore %indexable %39
-         %40 = OpAccessChain %_ptr_Function_int %indexable %38
-         %41 = OpLoad %int %40
-               OpStore %a %41
-         %42 = OpLoad %int %a
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpIEqual %bool %42 %44
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %49
-         %48 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpConvertSToF %float %51
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %47
-         %49 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %64
-         %66 = OpCompositeConstruct %v4float %65 %65 %65 %65
-               OpStore %x_GLF_color %66
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a39da82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-array-access/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var idx : i32;
-  var a : i32;
-  var indexable : Arr;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[1];
-  idx = (1 << bitcast<u32>(x_27));
-  let x_30 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_32 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_34 : i32 = idx;
-  indexable = Arr(x_30, x_32);
-  let x_36 : i32 = indexable[x_34];
-  a = x_36;
-  let x_37 : i32 = a;
-  let x_39 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_37 == x_39)) {
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_54 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_45), f32(x_48), f32(x_51), f32(x_54));
-  } else {
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_59 : f32 = f32(x_58);
-    x_GLF_color = vec4<f32>(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.hlsl
deleted file mode 100644
index 9b58178..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[3];
-};
-
-void main_1() {
-  int x_32_phi = 0;
-  const int x_24 = asint(x_5[1].x);
-  const float x_25 = float(x_24);
-  x_GLF_color = float4(x_25, x_25, x_25, x_25);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_28 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_30 = ((x_28 << asuint(x_28)) >> asuint(1));
-  x_32_phi = x_24;
-  while (true) {
-    const int x_32 = x_32_phi;
-    if ((x_30 < 10)) {
-    } else {
-      break;
-    }
-    int x_33 = 0;
-    x_33 = (x_32 + 1);
-    const int x_39 = asint(x_5[2].x);
-    if ((x_33 == asint(x_39))) {
-      const float x_43 = float(x_28);
-      x_GLF_color = float4(x_43, x_25, x_25, x_43);
-      break;
-    }
-    {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.msl
deleted file mode 100644
index a75fb20..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int x_32_phi = 0;
-  int const x_24 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  float const x_25 = float(x_24);
-  *(tint_symbol_3) = float4(x_25, x_25, x_25, x_25);
-  int const x_28 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_30 = (as_type<int>((as_type<uint>(x_28) << as_type<uint>(x_28))) >> as_type<uint>(1));
-  x_32_phi = x_24;
-  while (true) {
-    int const x_32 = x_32_phi;
-    if ((x_30 < 10)) {
-    } else {
-      break;
-    }
-    int x_33 = 0;
-    x_33 = as_type<int>((as_type<uint>(x_32) + as_type<uint>(1)));
-    int const x_39 = x_5.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_33 == as_type<int>(x_39))) {
-      float const x_43 = float(x_28);
-      *(tint_symbol_3) = float4(x_43, x_25, x_25, x_43);
-      break;
-    }
-    {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.spvasm
deleted file mode 100644
index f5f58ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_32_phi "x_32_phi"
-               OpName %x_33 "x_33"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-   %x_32_phi = OpVariable %_ptr_Function_int Function %21
-       %x_33 = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %26 = OpLoad %int %25
-         %27 = OpConvertSToF %float %26
-         %28 = OpCompositeConstruct %v4float %27 %27 %27 %27
-               OpStore %x_GLF_color %28
-         %30 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpBitcast %uint %31
-         %33 = OpShiftLeftLogical %int %31 %32
-         %34 = OpBitcast %uint %int_1
-         %35 = OpShiftRightArithmetic %int %33 %34
-               OpStore %x_32_phi %26
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %x_32_phi
-         %42 = OpSLessThan %bool %35 %int_10
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %37
-         %44 = OpLabel
-         %48 = OpIAdd %int %40 %int_1
-               OpStore %x_33 %48
-         %50 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-         %51 = OpLoad %int %50
-         %52 = OpLoad %int %x_33
-         %53 = OpCopyObject %int %51
-         %54 = OpIEqual %bool %52 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-         %57 = OpConvertSToF %float %31
-         %58 = OpCompositeConstruct %v4float %57 %27 %27 %57
-               OpStore %x_GLF_color %58
-               OpBranch %37
-         %55 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-         %59 = OpLoad %int %x_33
-               OpStore %x_32_phi %59
-               OpBranch %36
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.wgsl
deleted file mode 100644
index 7ccdb81..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_32_phi : i32;
-  let x_24 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_25 : f32 = f32(x_24);
-  x_GLF_color = vec4<f32>(x_25, x_25, x_25, x_25);
-  let x_28 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_30 : i32 = ((x_28 << bitcast<u32>(x_28)) >> bitcast<u32>(1));
-  x_32_phi = x_24;
-  loop {
-    let x_32 : i32 = x_32_phi;
-    if ((x_30 < 10)) {
-    } else {
-      break;
-    }
-    var x_33 : i32;
-    x_33 = (x_32 + 1);
-    let x_39 : i32 = x_5.x_GLF_uniform_int_values[2];
-    if ((x_33 == bitcast<i32>(x_39))) {
-      let x_43 : f32 = f32(x_28);
-      x_GLF_color = vec4<f32>(x_43, x_25, x_25, x_43);
-      break;
-    }
-
-    continuing {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.hlsl
deleted file mode 100644
index 9b58178..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[3];
-};
-
-void main_1() {
-  int x_32_phi = 0;
-  const int x_24 = asint(x_5[1].x);
-  const float x_25 = float(x_24);
-  x_GLF_color = float4(x_25, x_25, x_25, x_25);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_28 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_30 = ((x_28 << asuint(x_28)) >> asuint(1));
-  x_32_phi = x_24;
-  while (true) {
-    const int x_32 = x_32_phi;
-    if ((x_30 < 10)) {
-    } else {
-      break;
-    }
-    int x_33 = 0;
-    x_33 = (x_32 + 1);
-    const int x_39 = asint(x_5[2].x);
-    if ((x_33 == asint(x_39))) {
-      const float x_43 = float(x_28);
-      x_GLF_color = float4(x_43, x_25, x_25, x_43);
-      break;
-    }
-    {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.msl
deleted file mode 100644
index a75fb20..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int x_32_phi = 0;
-  int const x_24 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  float const x_25 = float(x_24);
-  *(tint_symbol_3) = float4(x_25, x_25, x_25, x_25);
-  int const x_28 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_30 = (as_type<int>((as_type<uint>(x_28) << as_type<uint>(x_28))) >> as_type<uint>(1));
-  x_32_phi = x_24;
-  while (true) {
-    int const x_32 = x_32_phi;
-    if ((x_30 < 10)) {
-    } else {
-      break;
-    }
-    int x_33 = 0;
-    x_33 = as_type<int>((as_type<uint>(x_32) + as_type<uint>(1)));
-    int const x_39 = x_5.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_33 == as_type<int>(x_39))) {
-      float const x_43 = float(x_28);
-      *(tint_symbol_3) = float4(x_43, x_25, x_25, x_43);
-      break;
-    }
-    {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.spvasm
deleted file mode 100644
index f5f58ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_32_phi "x_32_phi"
-               OpName %x_33 "x_33"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-   %x_32_phi = OpVariable %_ptr_Function_int Function %21
-       %x_33 = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %26 = OpLoad %int %25
-         %27 = OpConvertSToF %float %26
-         %28 = OpCompositeConstruct %v4float %27 %27 %27 %27
-               OpStore %x_GLF_color %28
-         %30 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpBitcast %uint %31
-         %33 = OpShiftLeftLogical %int %31 %32
-         %34 = OpBitcast %uint %int_1
-         %35 = OpShiftRightArithmetic %int %33 %34
-               OpStore %x_32_phi %26
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %x_32_phi
-         %42 = OpSLessThan %bool %35 %int_10
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %37
-         %44 = OpLabel
-         %48 = OpIAdd %int %40 %int_1
-               OpStore %x_33 %48
-         %50 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-         %51 = OpLoad %int %50
-         %52 = OpLoad %int %x_33
-         %53 = OpCopyObject %int %51
-         %54 = OpIEqual %bool %52 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-         %57 = OpConvertSToF %float %31
-         %58 = OpCompositeConstruct %v4float %57 %27 %27 %57
-               OpStore %x_GLF_color %58
-               OpBranch %37
-         %55 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-         %59 = OpLoad %int %x_33
-               OpStore %x_32_phi %59
-               OpBranch %36
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.wgsl
deleted file mode 100644
index 7ccdb81..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-left-shift-right-shift-compare/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_32_phi : i32;
-  let x_24 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_25 : f32 = f32(x_24);
-  x_GLF_color = vec4<f32>(x_25, x_25, x_25, x_25);
-  let x_28 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_30 : i32 = ((x_28 << bitcast<u32>(x_28)) >> bitcast<u32>(1));
-  x_32_phi = x_24;
-  loop {
-    let x_32 : i32 = x_32_phi;
-    if ((x_30 < 10)) {
-    } else {
-      break;
-    }
-    var x_33 : i32;
-    x_33 = (x_32 + 1);
-    let x_39 : i32 = x_5.x_GLF_uniform_int_values[2];
-    if ((x_33 == bitcast<i32>(x_39))) {
-      let x_43 : f32 = f32(x_28);
-      x_GLF_color = vec4<f32>(x_43, x_25, x_25, x_43);
-      break;
-    }
-
-    continuing {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3df8b25..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 func_() {
-  float2 v = float2(0.0f, 0.0f);
-  int i = 0;
-  int k = 0;
-  v = float2(1.0f, 1.0f);
-  i = 0;
-  k = 0;
-  {
-    for(; (k < 2); k = (k + 1)) {
-      const float x_83 = v.y;
-      if (((x_83 + 1.0f) > 4.0f)) {
-        break;
-      }
-      v.y = 1.0f;
-      i = (i + 1);
-    }
-  }
-  if ((i < 10)) {
-    return float3(1.0f, 0.0f, 0.0f);
-  } else {
-    return float3(0.0f, 0.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  int j = 0;
-  float3 data[2] = (float3[2])0;
-  int j_1 = 0;
-  j = 0;
-  {
-    for(; (j < 1); j = (j + 1)) {
-      const int x_49 = j;
-      const float3 x_50 = func_();
-      data[x_49] = x_50;
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 1); j_1 = (j_1 + 1)) {
-      const int x_61 = j_1;
-      const float3 x_64 = func_();
-      data[((4 * x_61) + 1)] = x_64;
-    }
-  }
-  const float3 x_69 = data[0];
-  x_GLF_color = float4(x_69.x, x_69.y, x_69.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9126868..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,100 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float3 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 func_() {
-  float2 v = 0.0f;
-  int i = 0;
-  int k = 0;
-  v = float2(1.0f, 1.0f);
-  i = 0;
-  k = 0;
-  while (true) {
-    int const x_79 = k;
-    if ((x_79 < 2)) {
-    } else {
-      break;
-    }
-    float const x_83 = v.y;
-    if (((x_83 + 1.0f) > 4.0f)) {
-      break;
-    }
-    v.y = 1.0f;
-    int const x_89 = i;
-    i = as_type<int>((as_type<uint>(x_89) + as_type<uint>(1)));
-    {
-      int const x_91 = k;
-      k = as_type<int>((as_type<uint>(x_91) + as_type<uint>(1)));
-    }
-  }
-  int const x_93 = i;
-  if ((x_93 < 10)) {
-    return float3(1.0f, 0.0f, 0.0f);
-  } else {
-    return float3(0.0f, 0.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  int j = 0;
-  tint_array_wrapper data = {};
-  int j_1 = 0;
-  j = 0;
-  while (true) {
-    int const x_46 = j;
-    if ((x_46 < 1)) {
-    } else {
-      break;
-    }
-    int const x_49 = j;
-    float3 const x_50 = func_();
-    data.arr[x_49] = x_50;
-    {
-      int const x_52 = j;
-      j = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_58 = j_1;
-    if ((x_58 < 1)) {
-    } else {
-      break;
-    }
-    int const x_61 = j_1;
-    float3 const x_64 = func_();
-    data.arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(x_61)))) + as_type<uint>(1)))] = x_64;
-    {
-      int const x_66 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_69 = data.arr[0];
-  *(tint_symbol_3) = float4(x_69.x, x_69.y, x_69.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3a4b4f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,202 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %v "v"
-               OpName %i "i"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %data "data"
-               OpName %j_1 "j_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_v3float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v2float %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_4 = OpConstant %float 4
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-    %float_0 = OpConstant %float 0
-         %58 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %59 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %60 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %61 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_v3float_uint_2 = OpTypeArray %v3float %uint_2
-%_ptr_Function__arr_v3float_uint_2 = OpTypePointer Function %_arr_v3float_uint_2
-         %70 = OpConstantNull %_arr_v3float_uint_2
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out
-      %func_ = OpFunction %v3float None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %15
-          %i = OpVariable %_ptr_Function_int Function %19
-          %k = OpVariable %_ptr_Function_int Function %19
-               OpStore %v %22
-               OpStore %i %int_0
-               OpStore %k %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %k
-         %30 = OpSLessThan %bool %28 %int_2
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-         %38 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFAdd %float %39 %float_1
-         %42 = OpFOrdGreaterThan %bool %40 %float_4
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpBranch %25
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_float %v %uint_1
-               OpStore %45 %float_1
-         %46 = OpLoad %int %i
-         %48 = OpIAdd %int %46 %int_1
-               OpStore %i %48
-               OpBranch %26
-         %26 = OpLabel
-         %49 = OpLoad %int %k
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %k %50
-               OpBranch %24
-         %25 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpSLessThan %bool %51 %int_10
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpReturnValue %58
-         %56 = OpLabel
-               OpReturnValue %59
-         %54 = OpLabel
-               OpReturnValue %60
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %61
-         %64 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %19
-       %data = OpVariable %_ptr_Function__arr_v3float_uint_2 Function %70
-        %j_1 = OpVariable %_ptr_Function_int Function %19
-               OpStore %j %int_0
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %int %j
-         %77 = OpSLessThan %bool %76 %int_1
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-               OpBranch %73
-         %78 = OpLabel
-         %81 = OpLoad %int %j
-         %82 = OpFunctionCall %v3float %func_
-         %84 = OpAccessChain %_ptr_Function_v3float %data %81
-               OpStore %84 %82
-               OpBranch %74
-         %74 = OpLabel
-         %85 = OpLoad %int %j
-         %86 = OpIAdd %int %85 %int_1
-               OpStore %j %86
-               OpBranch %72
-         %73 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %87
-         %87 = OpLabel
-               OpLoopMerge %88 %89 None
-               OpBranch %90
-         %90 = OpLabel
-         %91 = OpLoad %int %j_1
-         %92 = OpSLessThan %bool %91 %int_1
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpBranch %93
-         %95 = OpLabel
-               OpBranch %88
-         %93 = OpLabel
-         %96 = OpLoad %int %j_1
-         %97 = OpFunctionCall %v3float %func_
-         %99 = OpIMul %int %int_4 %96
-        %100 = OpIAdd %int %99 %int_1
-        %101 = OpAccessChain %_ptr_Function_v3float %data %100
-               OpStore %101 %97
-               OpBranch %89
-         %89 = OpLabel
-        %102 = OpLoad %int %j_1
-        %103 = OpIAdd %int %102 %int_1
-               OpStore %j_1 %103
-               OpBranch %87
-         %88 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_v3float %data %int_0
-        %105 = OpLoad %v3float %104
-        %106 = OpCompositeExtract %float %105 0
-        %107 = OpCompositeExtract %float %105 1
-        %108 = OpCompositeExtract %float %105 2
-        %109 = OpCompositeConstruct %v4float %106 %107 %108 %float_1
-               OpStore %x_GLF_color %109
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-        %113 = OpLabel
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %61
-        %118 = OpLabel
-        %119 = OpFunctionCall %main_out %main_inner
-        %120 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0a12739..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,88 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> vec3<f32> {
-  var v : vec2<f32>;
-  var i : i32;
-  var k : i32;
-  v = vec2<f32>(1.0, 1.0);
-  i = 0;
-  k = 0;
-  loop {
-    let x_79 : i32 = k;
-    if ((x_79 < 2)) {
-    } else {
-      break;
-    }
-    let x_83 : f32 = v.y;
-    if (((x_83 + 1.0) > 4.0)) {
-      break;
-    }
-    v.y = 1.0;
-    let x_89 : i32 = i;
-    i = (x_89 + 1);
-
-    continuing {
-      let x_91 : i32 = k;
-      k = (x_91 + 1);
-    }
-  }
-  let x_93 : i32 = i;
-  if ((x_93 < 10)) {
-    return vec3<f32>(1.0, 0.0, 0.0);
-  } else {
-    return vec3<f32>(0.0, 0.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var j : i32;
-  var data : array<vec3<f32>, 2>;
-  var j_1 : i32;
-  j = 0;
-  loop {
-    let x_46 : i32 = j;
-    if ((x_46 < 1)) {
-    } else {
-      break;
-    }
-    let x_49 : i32 = j;
-    let x_50 : vec3<f32> = func_();
-    data[x_49] = x_50;
-
-    continuing {
-      let x_52 : i32 = j;
-      j = (x_52 + 1);
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_58 : i32 = j_1;
-    if ((x_58 < 1)) {
-    } else {
-      break;
-    }
-    let x_61 : i32 = j_1;
-    let x_64 : vec3<f32> = func_();
-    data[((4 * x_61) + 1)] = x_64;
-
-    continuing {
-      let x_66 : i32 = j_1;
-      j_1 = (x_66 + 1);
-    }
-  }
-  let x_69 : vec3<f32> = data[0];
-  x_GLF_color = vec4<f32>(x_69.x, x_69.y, x_69.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3df8b25..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 func_() {
-  float2 v = float2(0.0f, 0.0f);
-  int i = 0;
-  int k = 0;
-  v = float2(1.0f, 1.0f);
-  i = 0;
-  k = 0;
-  {
-    for(; (k < 2); k = (k + 1)) {
-      const float x_83 = v.y;
-      if (((x_83 + 1.0f) > 4.0f)) {
-        break;
-      }
-      v.y = 1.0f;
-      i = (i + 1);
-    }
-  }
-  if ((i < 10)) {
-    return float3(1.0f, 0.0f, 0.0f);
-  } else {
-    return float3(0.0f, 0.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  int j = 0;
-  float3 data[2] = (float3[2])0;
-  int j_1 = 0;
-  j = 0;
-  {
-    for(; (j < 1); j = (j + 1)) {
-      const int x_49 = j;
-      const float3 x_50 = func_();
-      data[x_49] = x_50;
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 1); j_1 = (j_1 + 1)) {
-      const int x_61 = j_1;
-      const float3 x_64 = func_();
-      data[((4 * x_61) + 1)] = x_64;
-    }
-  }
-  const float3 x_69 = data[0];
-  x_GLF_color = float4(x_69.x, x_69.y, x_69.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9126868..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,100 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float3 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 func_() {
-  float2 v = 0.0f;
-  int i = 0;
-  int k = 0;
-  v = float2(1.0f, 1.0f);
-  i = 0;
-  k = 0;
-  while (true) {
-    int const x_79 = k;
-    if ((x_79 < 2)) {
-    } else {
-      break;
-    }
-    float const x_83 = v.y;
-    if (((x_83 + 1.0f) > 4.0f)) {
-      break;
-    }
-    v.y = 1.0f;
-    int const x_89 = i;
-    i = as_type<int>((as_type<uint>(x_89) + as_type<uint>(1)));
-    {
-      int const x_91 = k;
-      k = as_type<int>((as_type<uint>(x_91) + as_type<uint>(1)));
-    }
-  }
-  int const x_93 = i;
-  if ((x_93 < 10)) {
-    return float3(1.0f, 0.0f, 0.0f);
-  } else {
-    return float3(0.0f, 0.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  int j = 0;
-  tint_array_wrapper data = {};
-  int j_1 = 0;
-  j = 0;
-  while (true) {
-    int const x_46 = j;
-    if ((x_46 < 1)) {
-    } else {
-      break;
-    }
-    int const x_49 = j;
-    float3 const x_50 = func_();
-    data.arr[x_49] = x_50;
-    {
-      int const x_52 = j;
-      j = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_58 = j_1;
-    if ((x_58 < 1)) {
-    } else {
-      break;
-    }
-    int const x_61 = j_1;
-    float3 const x_64 = func_();
-    data.arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(x_61)))) + as_type<uint>(1)))] = x_64;
-    {
-      int const x_66 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_69 = data.arr[0];
-  *(tint_symbol_3) = float4(x_69.x, x_69.y, x_69.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3a4b4f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,202 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %v "v"
-               OpName %i "i"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %data "data"
-               OpName %j_1 "j_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_v3float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v2float %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_4 = OpConstant %float 4
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-    %float_0 = OpConstant %float 0
-         %58 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %59 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %60 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %61 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_v3float_uint_2 = OpTypeArray %v3float %uint_2
-%_ptr_Function__arr_v3float_uint_2 = OpTypePointer Function %_arr_v3float_uint_2
-         %70 = OpConstantNull %_arr_v3float_uint_2
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out
-      %func_ = OpFunction %v3float None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %15
-          %i = OpVariable %_ptr_Function_int Function %19
-          %k = OpVariable %_ptr_Function_int Function %19
-               OpStore %v %22
-               OpStore %i %int_0
-               OpStore %k %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %k
-         %30 = OpSLessThan %bool %28 %int_2
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-         %38 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFAdd %float %39 %float_1
-         %42 = OpFOrdGreaterThan %bool %40 %float_4
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpBranch %25
-         %43 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_float %v %uint_1
-               OpStore %45 %float_1
-         %46 = OpLoad %int %i
-         %48 = OpIAdd %int %46 %int_1
-               OpStore %i %48
-               OpBranch %26
-         %26 = OpLabel
-         %49 = OpLoad %int %k
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %k %50
-               OpBranch %24
-         %25 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpSLessThan %bool %51 %int_10
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpReturnValue %58
-         %56 = OpLabel
-               OpReturnValue %59
-         %54 = OpLabel
-               OpReturnValue %60
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %61
-         %64 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %19
-       %data = OpVariable %_ptr_Function__arr_v3float_uint_2 Function %70
-        %j_1 = OpVariable %_ptr_Function_int Function %19
-               OpStore %j %int_0
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %int %j
-         %77 = OpSLessThan %bool %76 %int_1
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-               OpBranch %73
-         %78 = OpLabel
-         %81 = OpLoad %int %j
-         %82 = OpFunctionCall %v3float %func_
-         %84 = OpAccessChain %_ptr_Function_v3float %data %81
-               OpStore %84 %82
-               OpBranch %74
-         %74 = OpLabel
-         %85 = OpLoad %int %j
-         %86 = OpIAdd %int %85 %int_1
-               OpStore %j %86
-               OpBranch %72
-         %73 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %87
-         %87 = OpLabel
-               OpLoopMerge %88 %89 None
-               OpBranch %90
-         %90 = OpLabel
-         %91 = OpLoad %int %j_1
-         %92 = OpSLessThan %bool %91 %int_1
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpBranch %93
-         %95 = OpLabel
-               OpBranch %88
-         %93 = OpLabel
-         %96 = OpLoad %int %j_1
-         %97 = OpFunctionCall %v3float %func_
-         %99 = OpIMul %int %int_4 %96
-        %100 = OpIAdd %int %99 %int_1
-        %101 = OpAccessChain %_ptr_Function_v3float %data %100
-               OpStore %101 %97
-               OpBranch %89
-         %89 = OpLabel
-        %102 = OpLoad %int %j_1
-        %103 = OpIAdd %int %102 %int_1
-               OpStore %j_1 %103
-               OpBranch %87
-         %88 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_v3float %data %int_0
-        %105 = OpLoad %v3float %104
-        %106 = OpCompositeExtract %float %105 0
-        %107 = OpCompositeExtract %float %105 1
-        %108 = OpCompositeExtract %float %105 2
-        %109 = OpCompositeConstruct %v4float %106 %107 %108 %float_1
-               OpStore %x_GLF_color %109
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-        %113 = OpLabel
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %61
-        %118 = OpLabel
-        %119 = OpFunctionCall %main_out %main_inner
-        %120 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 0a12739..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-liveinterval-different-dest/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,88 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> vec3<f32> {
-  var v : vec2<f32>;
-  var i : i32;
-  var k : i32;
-  v = vec2<f32>(1.0, 1.0);
-  i = 0;
-  k = 0;
-  loop {
-    let x_79 : i32 = k;
-    if ((x_79 < 2)) {
-    } else {
-      break;
-    }
-    let x_83 : f32 = v.y;
-    if (((x_83 + 1.0) > 4.0)) {
-      break;
-    }
-    v.y = 1.0;
-    let x_89 : i32 = i;
-    i = (x_89 + 1);
-
-    continuing {
-      let x_91 : i32 = k;
-      k = (x_91 + 1);
-    }
-  }
-  let x_93 : i32 = i;
-  if ((x_93 < 10)) {
-    return vec3<f32>(1.0, 0.0, 0.0);
-  } else {
-    return vec3<f32>(0.0, 0.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var j : i32;
-  var data : array<vec3<f32>, 2>;
-  var j_1 : i32;
-  j = 0;
-  loop {
-    let x_46 : i32 = j;
-    if ((x_46 < 1)) {
-    } else {
-      break;
-    }
-    let x_49 : i32 = j;
-    let x_50 : vec3<f32> = func_();
-    data[x_49] = x_50;
-
-    continuing {
-      let x_52 : i32 = j;
-      j = (x_52 + 1);
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_58 : i32 = j_1;
-    if ((x_58 < 1)) {
-    } else {
-      break;
-    }
-    let x_61 : i32 = j_1;
-    let x_64 : vec3<f32> = func_();
-    data[((4 * x_61) + 1)] = x_64;
-
-    continuing {
-      let x_66 : i32 = j_1;
-      j_1 = (x_66 + 1);
-    }
-  }
-  let x_69 : vec3<f32> = data[0];
-  x_GLF_color = vec4<f32>(x_69.x, x_69.y, x_69.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d3f2cf5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,78 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int i = 0;
-  bool x_66 = false;
-  bool x_67_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  f = x_34;
-  const int x_36 = asint(x_9[1].x);
-  i = x_36;
-  while (true) {
-    const int x_41 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    const float x_47 = asfloat(x_6[3].x);
-    const float x_49 = f;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_53 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    f = (abs((-(x_47) * x_49)) + x_53);
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_57 = f;
-  const float x_59 = asfloat(x_6[1].x);
-  const bool x_60 = (x_57 > x_59);
-  x_67_phi = x_60;
-  if (x_60) {
-    const float x_63 = f;
-    const float x_65 = asfloat(x_6[2].x);
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  if (x_67_phi) {
-    const int x_72 = asint(x_9[2].x);
-    const int x_75 = asint(x_9[1].x);
-    const int x_78 = asint(x_9[1].x);
-    const int x_81 = asint(x_9[2].x);
-    x_GLF_color = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    const int x_85 = asint(x_9[1].x);
-    const float x_86 = float(x_85);
-    x_GLF_color = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.msl
deleted file mode 100644
index adb9724..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  int i = 0;
-  bool x_66 = false;
-  bool x_67_phi = false;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  f = x_34;
-  int const x_36 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_36;
-  while (true) {
-    int const x_41 = i;
-    int const x_43 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    float const x_47 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_49 = f;
-    float const x_53 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    f = (fabs((-(x_47) * x_49)) + x_53);
-    {
-      int const x_55 = i;
-      i = as_type<int>((as_type<uint>(x_55) + as_type<uint>(1)));
-    }
-  }
-  float const x_57 = f;
-  float const x_59 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  bool const x_60 = (x_57 > x_59);
-  x_67_phi = x_60;
-  if (x_60) {
-    float const x_63 = f;
-    float const x_65 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  bool const x_67 = x_67_phi;
-  if (x_67) {
-    int const x_72 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    int const x_75 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_86 = float(x_85);
-    *(tint_symbol_3) = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1a54bf5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,183 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 112
-; Schema: 0
-               OpCapability Shader
-         %62 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %x_66 "x_66"
-               OpName %x_67_phi "x_67_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %101 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %29
-       %x_66 = OpVariable %_ptr_Function_bool Function %33
-   %x_67_phi = OpVariable %_ptr_Function_bool Function %33
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-               OpStore %f %39
-         %42 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %43 = OpLoad %int %42
-               OpStore %i %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %49 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpSLessThan %bool %48 %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %45
-         %52 = OpLabel
-         %56 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %57 = OpLoad %float %56
-         %58 = OpLoad %float %f
-         %59 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %60 = OpLoad %float %59
-         %63 = OpFNegate %float %57
-         %64 = OpFMul %float %63 %58
-         %61 = OpExtInst %float %62 FAbs %64
-         %65 = OpFAdd %float %61 %60
-               OpStore %f %65
-               OpBranch %46
-         %46 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %i %67
-               OpBranch %44
-         %45 = OpLabel
-         %68 = OpLoad %float %f
-         %69 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %70 = OpLoad %float %69
-         %71 = OpFOrdGreaterThan %bool %68 %70
-               OpStore %x_67_phi %71
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-         %74 = OpLoad %float %f
-         %76 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %77 = OpLoad %float %76
-         %78 = OpFOrdLessThan %bool %74 %77
-               OpStore %x_66 %78
-         %79 = OpLoad %bool %x_66
-               OpStore %x_67_phi %79
-               OpBranch %72
-         %72 = OpLabel
-         %80 = OpLoad %bool %x_67_phi
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %91 = OpLoad %int %90
-         %92 = OpConvertSToF %float %85
-         %93 = OpConvertSToF %float %87
-         %94 = OpConvertSToF %float %89
-         %95 = OpConvertSToF %float %91
-         %96 = OpCompositeConstruct %v4float %92 %93 %94 %95
-               OpStore %x_GLF_color %96
-               OpBranch %81
-         %83 = OpLabel
-         %97 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpConvertSToF %float %98
-        %100 = OpCompositeConstruct %v4float %99 %99 %99 %99
-               OpStore %x_GLF_color %100
-               OpBranch %81
-         %81 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %101
-        %104 = OpLabel
-        %105 = OpFunctionCall %void %main_1
-        %106 = OpLoad %v4float %x_GLF_color
-        %107 = OpCompositeConstruct %main_out %106
-               OpReturnValue %107
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %109 = OpLabel
-        %110 = OpFunctionCall %main_out %main_inner
-        %111 = OpCompositeExtract %v4float %110 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 098a4c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,81 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  var x_66 : bool;
-  var x_67_phi : bool;
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[0];
-  f = x_34;
-  let x_36 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_36;
-  loop {
-    let x_41 : i32 = i;
-    let x_43 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    let x_47 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_49 : f32 = f;
-    let x_53 : f32 = x_6.x_GLF_uniform_float_values[0];
-    f = (abs((-(x_47) * x_49)) + x_53);
-
-    continuing {
-      let x_55 : i32 = i;
-      i = (x_55 + 1);
-    }
-  }
-  let x_57 : f32 = f;
-  let x_59 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_60 : bool = (x_57 > x_59);
-  x_67_phi = x_60;
-  if (x_60) {
-    let x_63 : f32 = f;
-    let x_65 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  let x_67 : bool = x_67_phi;
-  if (x_67) {
-    let x_72 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_75 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_9.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_72), f32(x_75), f32(x_78), f32(x_81));
-  } else {
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_86 : f32 = f32(x_85);
-    x_GLF_color = vec4<f32>(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d3f2cf5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,78 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int i = 0;
-  bool x_66 = false;
-  bool x_67_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  f = x_34;
-  const int x_36 = asint(x_9[1].x);
-  i = x_36;
-  while (true) {
-    const int x_41 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    const float x_47 = asfloat(x_6[3].x);
-    const float x_49 = f;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_53 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    f = (abs((-(x_47) * x_49)) + x_53);
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_57 = f;
-  const float x_59 = asfloat(x_6[1].x);
-  const bool x_60 = (x_57 > x_59);
-  x_67_phi = x_60;
-  if (x_60) {
-    const float x_63 = f;
-    const float x_65 = asfloat(x_6[2].x);
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  if (x_67_phi) {
-    const int x_72 = asint(x_9[2].x);
-    const int x_75 = asint(x_9[1].x);
-    const int x_78 = asint(x_9[1].x);
-    const int x_81 = asint(x_9[2].x);
-    x_GLF_color = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    const int x_85 = asint(x_9[1].x);
-    const float x_86 = float(x_85);
-    x_GLF_color = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.msl
deleted file mode 100644
index adb9724..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  int i = 0;
-  bool x_66 = false;
-  bool x_67_phi = false;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  f = x_34;
-  int const x_36 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_36;
-  while (true) {
-    int const x_41 = i;
-    int const x_43 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    float const x_47 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_49 = f;
-    float const x_53 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    f = (fabs((-(x_47) * x_49)) + x_53);
-    {
-      int const x_55 = i;
-      i = as_type<int>((as_type<uint>(x_55) + as_type<uint>(1)));
-    }
-  }
-  float const x_57 = f;
-  float const x_59 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  bool const x_60 = (x_57 > x_59);
-  x_67_phi = x_60;
-  if (x_60) {
-    float const x_63 = f;
-    float const x_65 = x_6.x_GLF_uniform_float_values.arr[2].el;
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  bool const x_67 = x_67_phi;
-  if (x_67) {
-    int const x_72 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    int const x_75 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_86 = float(x_85);
-    *(tint_symbol_3) = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1a54bf5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,183 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 112
-; Schema: 0
-               OpCapability Shader
-         %62 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %x_66 "x_66"
-               OpName %x_67_phi "x_67_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %33 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %101 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %29
-       %x_66 = OpVariable %_ptr_Function_bool Function %33
-   %x_67_phi = OpVariable %_ptr_Function_bool Function %33
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-               OpStore %f %39
-         %42 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %43 = OpLoad %int %42
-               OpStore %i %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %49 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpSLessThan %bool %48 %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %45
-         %52 = OpLabel
-         %56 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %57 = OpLoad %float %56
-         %58 = OpLoad %float %f
-         %59 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %60 = OpLoad %float %59
-         %63 = OpFNegate %float %57
-         %64 = OpFMul %float %63 %58
-         %61 = OpExtInst %float %62 FAbs %64
-         %65 = OpFAdd %float %61 %60
-               OpStore %f %65
-               OpBranch %46
-         %46 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %i %67
-               OpBranch %44
-         %45 = OpLabel
-         %68 = OpLoad %float %f
-         %69 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %70 = OpLoad %float %69
-         %71 = OpFOrdGreaterThan %bool %68 %70
-               OpStore %x_67_phi %71
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-         %74 = OpLoad %float %f
-         %76 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %77 = OpLoad %float %76
-         %78 = OpFOrdLessThan %bool %74 %77
-               OpStore %x_66 %78
-         %79 = OpLoad %bool %x_66
-               OpStore %x_67_phi %79
-               OpBranch %72
-         %72 = OpLabel
-         %80 = OpLoad %bool %x_67_phi
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %91 = OpLoad %int %90
-         %92 = OpConvertSToF %float %85
-         %93 = OpConvertSToF %float %87
-         %94 = OpConvertSToF %float %89
-         %95 = OpConvertSToF %float %91
-         %96 = OpCompositeConstruct %v4float %92 %93 %94 %95
-               OpStore %x_GLF_color %96
-               OpBranch %81
-         %83 = OpLabel
-         %97 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpConvertSToF %float %98
-        %100 = OpCompositeConstruct %v4float %99 %99 %99 %99
-               OpStore %x_GLF_color %100
-               OpBranch %81
-         %81 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %101
-        %104 = OpLabel
-        %105 = OpFunctionCall %void %main_1
-        %106 = OpLoad %v4float %x_GLF_color
-        %107 = OpCompositeConstruct %main_out %106
-               OpReturnValue %107
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %109 = OpLabel
-        %110 = OpFunctionCall %main_out %main_inner
-        %111 = OpCompositeExtract %v4float %110 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 098a4c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-abs-multiply-offset/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,81 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  var x_66 : bool;
-  var x_67_phi : bool;
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[0];
-  f = x_34;
-  let x_36 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_36;
-  loop {
-    let x_41 : i32 = i;
-    let x_43 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    let x_47 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_49 : f32 = f;
-    let x_53 : f32 = x_6.x_GLF_uniform_float_values[0];
-    f = (abs((-(x_47) * x_49)) + x_53);
-
-    continuing {
-      let x_55 : i32 = i;
-      i = (x_55 + 1);
-    }
-  }
-  let x_57 : f32 = f;
-  let x_59 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_60 : bool = (x_57 > x_59);
-  x_67_phi = x_60;
-  if (x_60) {
-    let x_63 : f32 = f;
-    let x_65 : f32 = x_6.x_GLF_uniform_float_values[2];
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  let x_67 : bool = x_67_phi;
-  if (x_67) {
-    let x_72 : i32 = x_9.x_GLF_uniform_int_values[2];
-    let x_75 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_9.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_72), f32(x_75), f32(x_78), f32(x_81));
-  } else {
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_86 : f32 = f32(x_85);
-    x_GLF_color = vec4<f32>(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7437ab3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  {
-    for(; (i < 5); i = (i + 1)) {
-      const int x_36 = asint(x_7[0].x);
-      if ((x_36 == 0)) {
-        if ((floor(asfloat(-4194304)) > 0.0f)) {
-          a = -1;
-          break;
-        }
-      }
-      a = (a + 1);
-    }
-  }
-  if ((a == 5)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6af8723..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_32 = i;
-    if ((x_32 < 5)) {
-    } else {
-      break;
-    }
-    int const x_36 = x_7.one;
-    if ((x_36 == 0)) {
-      if ((floor(as_type<float>(-4194304)) > 0.0f)) {
-        a = -1;
-        break;
-      }
-    }
-    int const x_45 = a;
-    a = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    {
-      int const x_47 = i;
-      i = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-    }
-  }
-  int const x_49 = a;
-  if ((x_49 == 5)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ba91db6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,133 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 73
-; Schema: 0
-               OpCapability Shader
-         %41 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_5 = OpConstant %int 5
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%int_n4194304 = OpConstant %int -4194304
-    %float_0 = OpConstant %float 0
-     %int_n1 = OpConstant %int -1
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %60 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %61 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %62 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %i
-         %27 = OpSLessThan %bool %25 %int_5
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpBranch %29
-         %31 = OpLabel
-               OpBranch %22
-         %29 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %36 = OpLoad %int %35
-         %37 = OpIEqual %bool %36 %int_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %38
-         %39 = OpLabel
-         %42 = OpBitcast %float %int_n4194304
-         %40 = OpExtInst %float %41 Floor %42
-         %45 = OpFOrdGreaterThan %bool %40 %float_0
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
-               OpStore %a %int_n1
-               OpBranch %22
-         %46 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-         %49 = OpLoad %int %a
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %a %51
-               OpBranch %23
-         %23 = OpLabel
-         %52 = OpLoad %int %i
-         %53 = OpIAdd %int %52 %int_1
-               OpStore %i %53
-               OpBranch %21
-         %22 = OpLabel
-         %54 = OpLoad %int %a
-         %55 = OpIEqual %bool %54 %int_5
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpStore %x_GLF_color %60
-               OpBranch %56
-         %58 = OpLabel
-               OpStore %x_GLF_color %61
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %62
-         %65 = OpLabel
-         %66 = OpFunctionCall %void %main_1
-         %67 = OpLoad %v4float %x_GLF_color
-         %68 = OpCompositeConstruct %main_out %67
-               OpReturnValue %68
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %70 = OpLabel
-         %71 = OpFunctionCall %main_out %main_inner
-         %72 = OpCompositeExtract %v4float %71 0
-               OpStore %x_GLF_color_1_1 %72
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8de51a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_32 : i32 = i;
-    if ((x_32 < 5)) {
-    } else {
-      break;
-    }
-    let x_36 : i32 = x_7.one;
-    if ((x_36 == 0)) {
-      if ((floor(bitcast<f32>(-4194304)) > 0.0)) {
-        a = -1;
-        break;
-      }
-    }
-    let x_45 : i32 = a;
-    a = (x_45 + 1);
-
-    continuing {
-      let x_47 : i32 = i;
-      i = (x_47 + 1);
-    }
-  }
-  let x_49 : i32 = a;
-  if ((x_49 == 5)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7437ab3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  {
-    for(; (i < 5); i = (i + 1)) {
-      const int x_36 = asint(x_7[0].x);
-      if ((x_36 == 0)) {
-        if ((floor(asfloat(-4194304)) > 0.0f)) {
-          a = -1;
-          break;
-        }
-      }
-      a = (a + 1);
-    }
-  }
-  if ((a == 5)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6af8723..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_32 = i;
-    if ((x_32 < 5)) {
-    } else {
-      break;
-    }
-    int const x_36 = x_7.one;
-    if ((x_36 == 0)) {
-      if ((floor(as_type<float>(-4194304)) > 0.0f)) {
-        a = -1;
-        break;
-      }
-    }
-    int const x_45 = a;
-    a = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    {
-      int const x_47 = i;
-      i = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-    }
-  }
-  int const x_49 = a;
-  if ((x_49 == 5)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ba91db6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,133 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 73
-; Schema: 0
-               OpCapability Shader
-         %41 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_5 = OpConstant %int 5
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%int_n4194304 = OpConstant %int -4194304
-    %float_0 = OpConstant %float 0
-     %int_n1 = OpConstant %int -1
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %60 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %61 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %62 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %i
-         %27 = OpSLessThan %bool %25 %int_5
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpBranch %29
-         %31 = OpLabel
-               OpBranch %22
-         %29 = OpLabel
-         %35 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %36 = OpLoad %int %35
-         %37 = OpIEqual %bool %36 %int_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %38
-         %39 = OpLabel
-         %42 = OpBitcast %float %int_n4194304
-         %40 = OpExtInst %float %41 Floor %42
-         %45 = OpFOrdGreaterThan %bool %40 %float_0
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
-               OpStore %a %int_n1
-               OpBranch %22
-         %46 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-         %49 = OpLoad %int %a
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %a %51
-               OpBranch %23
-         %23 = OpLabel
-         %52 = OpLoad %int %i
-         %53 = OpIAdd %int %52 %int_1
-               OpStore %i %53
-               OpBranch %21
-         %22 = OpLabel
-         %54 = OpLoad %int %a
-         %55 = OpIEqual %bool %54 %int_5
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpStore %x_GLF_color %60
-               OpBranch %56
-         %58 = OpLabel
-               OpStore %x_GLF_color %61
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %62
-         %65 = OpLabel
-         %66 = OpFunctionCall %void %main_1
-         %67 = OpLoad %v4float %x_GLF_color
-         %68 = OpCompositeConstruct %main_out %67
-               OpReturnValue %68
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %70 = OpLabel
-         %71 = OpFunctionCall %main_out %main_inner
-         %72 = OpCompositeExtract %v4float %71 0
-               OpStore %x_GLF_color_1_1 %72
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8de51a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-break-floor-nan-never-executed/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_32 : i32 = i;
-    if ((x_32 < 5)) {
-    } else {
-      break;
-    }
-    let x_36 : i32 = x_7.one;
-    if ((x_36 == 0)) {
-      if ((floor(bitcast<f32>(-4194304)) > 0.0)) {
-        a = -1;
-        break;
-      }
-    }
-    let x_45 : i32 = a;
-    a = (x_45 + 1);
-
-    continuing {
-      let x_47 : i32 = i;
-      i = (x_47 + 1);
-    }
-  }
-  let x_49 : i32 = a;
-  if ((x_49 == 5)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ee7e98d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int i = 0;
-  x_GLF_global_loop_count = 0;
-  const float x_36 = asfloat(x_7[1].x);
-  f = x_36;
-  const int x_38 = asint(x_10[1].x);
-  i = x_38;
-  while (true) {
-    const int x_43 = i;
-    const int x_45 = asint(x_10[2].x);
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    const float x_48 = f;
-    const float x_50 = asfloat(x_7[1].x);
-    if ((x_48 > x_50)) {
-    }
-    f = 1.0f;
-    const float x_55 = asfloat(x_7[2].x);
-    f = ((1.0f - clamp(x_55, 1.0f, f)) + float(i));
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_64 = f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_66 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_64 == x_66)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_72 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_75 = asint(x_10[1].x);
-    const int x_78 = asint(x_10[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_81 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    const int x_85 = asint(x_10[1].x);
-    const float x_86 = float(x_85);
-    x_GLF_color = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.msl
deleted file mode 100644
index ef14022..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  int i = 0;
-  *(tint_symbol_3) = 0;
-  float const x_36 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  f = x_36;
-  int const x_38 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  i = x_38;
-  while (true) {
-    int const x_43 = i;
-    int const x_45 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    float const x_48 = f;
-    float const x_50 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    if ((x_48 > x_50)) {
-    }
-    f = 1.0f;
-    float const x_55 = x_7.x_GLF_uniform_float_values.arr[2].el;
-    float const x_56 = f;
-    int const x_59 = i;
-    f = ((1.0f - clamp(x_55, 1.0f, x_56)) + float(x_59));
-    {
-      int const x_62 = i;
-      i = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  float const x_64 = f;
-  float const x_66 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_64 == x_66)) {
-    int const x_72 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_75 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    int const x_85 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_86 = float(x_85);
-    *(tint_symbol_4) = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index db6d08b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,175 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 106
-; Schema: 0
-               OpCapability Shader
-         %65 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %95 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %28
-          %i = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-         %35 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %36 = OpLoad %float %35
-               OpStore %f %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %39 = OpLoad %int %38
-               OpStore %i %39
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %i
-         %46 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %47 = OpLoad %int %46
-         %48 = OpSLessThan %bool %44 %47
-               OpSelectionMerge %50 None
-               OpBranchConditional %48 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %41
-         %50 = OpLabel
-         %53 = OpLoad %float %f
-         %54 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %55 = OpLoad %float %54
-         %56 = OpFOrdGreaterThan %bool %53 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-               OpStore %f %float_1
-         %60 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %61 = OpLoad %float %60
-         %62 = OpLoad %float %f
-         %63 = OpLoad %int %i
-         %64 = OpExtInst %float %65 NClamp %61 %float_1 %62
-         %66 = OpFSub %float %float_1 %64
-         %67 = OpConvertSToF %float %63
-         %68 = OpFAdd %float %66 %67
-               OpStore %f %68
-               OpBranch %42
-         %42 = OpLabel
-         %69 = OpLoad %int %i
-         %70 = OpIAdd %int %69 %int_1
-               OpStore %i %70
-               OpBranch %40
-         %41 = OpLabel
-         %71 = OpLoad %float %f
-         %72 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %73 = OpLoad %float %72
-         %74 = OpFOrdEqual %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpConvertSToF %float %79
-         %87 = OpConvertSToF %float %81
-         %88 = OpConvertSToF %float %83
-         %89 = OpConvertSToF %float %85
-         %90 = OpCompositeConstruct %v4float %86 %87 %88 %89
-               OpStore %x_GLF_color %90
-               OpBranch %75
-         %77 = OpLabel
-         %91 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %92
-         %94 = OpCompositeConstruct %v4float %93 %93 %93 %93
-               OpStore %x_GLF_color %94
-               OpBranch %75
-         %75 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %95
-         %98 = OpLabel
-         %99 = OpFunctionCall %void %main_1
-        %100 = OpLoad %v4float %x_GLF_color
-        %101 = OpCompositeConstruct %main_out %100
-               OpReturnValue %101
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %103 = OpLabel
-        %104 = OpFunctionCall %main_out %main_inner
-        %105 = OpCompositeExtract %v4float %104 0
-               OpStore %x_GLF_color_1_1 %105
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f074ac2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  x_GLF_global_loop_count = 0;
-  let x_36 : f32 = x_7.x_GLF_uniform_float_values[1];
-  f = x_36;
-  let x_38 : i32 = x_10.x_GLF_uniform_int_values[1];
-  i = x_38;
-  loop {
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_10.x_GLF_uniform_int_values[2];
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    let x_48 : f32 = f;
-    let x_50 : f32 = x_7.x_GLF_uniform_float_values[1];
-    if ((x_48 > x_50)) {
-    }
-    f = 1.0;
-    let x_55 : f32 = x_7.x_GLF_uniform_float_values[2];
-    let x_56 : f32 = f;
-    let x_59 : i32 = i;
-    f = ((1.0 - clamp(x_55, 1.0, x_56)) + f32(x_59));
-
-    continuing {
-      let x_62 : i32 = i;
-      i = (x_62 + 1);
-    }
-  }
-  let x_64 : f32 = f;
-  let x_66 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_64 == x_66)) {
-    let x_72 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_75 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_72), f32(x_75), f32(x_78), f32(x_81));
-  } else {
-    let x_85 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_86 : f32 = f32(x_85);
-    x_GLF_color = vec4<f32>(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index ee7e98d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[3];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int i = 0;
-  x_GLF_global_loop_count = 0;
-  const float x_36 = asfloat(x_7[1].x);
-  f = x_36;
-  const int x_38 = asint(x_10[1].x);
-  i = x_38;
-  while (true) {
-    const int x_43 = i;
-    const int x_45 = asint(x_10[2].x);
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    const float x_48 = f;
-    const float x_50 = asfloat(x_7[1].x);
-    if ((x_48 > x_50)) {
-    }
-    f = 1.0f;
-    const float x_55 = asfloat(x_7[2].x);
-    f = ((1.0f - clamp(x_55, 1.0f, f)) + float(i));
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_64 = f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_66 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_64 == x_66)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_72 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_75 = asint(x_10[1].x);
-    const int x_78 = asint(x_10[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_81 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    const int x_85 = asint(x_10[1].x);
-    const float x_86 = float(x_85);
-    x_GLF_color = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.msl
deleted file mode 100644
index ef14022..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  int i = 0;
-  *(tint_symbol_3) = 0;
-  float const x_36 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  f = x_36;
-  int const x_38 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  i = x_38;
-  while (true) {
-    int const x_43 = i;
-    int const x_45 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    float const x_48 = f;
-    float const x_50 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    if ((x_48 > x_50)) {
-    }
-    f = 1.0f;
-    float const x_55 = x_7.x_GLF_uniform_float_values.arr[2].el;
-    float const x_56 = f;
-    int const x_59 = i;
-    f = ((1.0f - clamp(x_55, 1.0f, x_56)) + float(x_59));
-    {
-      int const x_62 = i;
-      i = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  float const x_64 = f;
-  float const x_66 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_64 == x_66)) {
-    int const x_72 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_75 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    int const x_85 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_86 = float(x_85);
-    *(tint_symbol_4) = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index db6d08b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,175 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 106
-; Schema: 0
-               OpCapability Shader
-         %65 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %95 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %28
-          %i = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-         %35 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %36 = OpLoad %float %35
-               OpStore %f %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %39 = OpLoad %int %38
-               OpStore %i %39
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %44 = OpLoad %int %i
-         %46 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %47 = OpLoad %int %46
-         %48 = OpSLessThan %bool %44 %47
-               OpSelectionMerge %50 None
-               OpBranchConditional %48 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %41
-         %50 = OpLabel
-         %53 = OpLoad %float %f
-         %54 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %55 = OpLoad %float %54
-         %56 = OpFOrdGreaterThan %bool %53 %55
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-               OpStore %f %float_1
-         %60 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %61 = OpLoad %float %60
-         %62 = OpLoad %float %f
-         %63 = OpLoad %int %i
-         %64 = OpExtInst %float %65 NClamp %61 %float_1 %62
-         %66 = OpFSub %float %float_1 %64
-         %67 = OpConvertSToF %float %63
-         %68 = OpFAdd %float %66 %67
-               OpStore %f %68
-               OpBranch %42
-         %42 = OpLabel
-         %69 = OpLoad %int %i
-         %70 = OpIAdd %int %69 %int_1
-               OpStore %i %70
-               OpBranch %40
-         %41 = OpLabel
-         %71 = OpLoad %float %f
-         %72 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %73 = OpLoad %float %72
-         %74 = OpFOrdEqual %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpConvertSToF %float %79
-         %87 = OpConvertSToF %float %81
-         %88 = OpConvertSToF %float %83
-         %89 = OpConvertSToF %float %85
-         %90 = OpCompositeConstruct %v4float %86 %87 %88 %89
-               OpStore %x_GLF_color %90
-               OpBranch %75
-         %77 = OpLabel
-         %91 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpConvertSToF %float %92
-         %94 = OpCompositeConstruct %v4float %93 %93 %93 %93
-               OpStore %x_GLF_color %94
-               OpBranch %75
-         %75 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %95
-         %98 = OpLabel
-         %99 = OpFunctionCall %void %main_1
-        %100 = OpLoad %v4float %x_GLF_color
-        %101 = OpCompositeConstruct %main_out %100
-               OpReturnValue %101
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %103 = OpLabel
-        %104 = OpFunctionCall %main_out %main_inner
-        %105 = OpCompositeExtract %v4float %104 0
-               OpStore %x_GLF_color_1_1 %105
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f074ac2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-clamp-to-one-empty-condition/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,78 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  x_GLF_global_loop_count = 0;
-  let x_36 : f32 = x_7.x_GLF_uniform_float_values[1];
-  f = x_36;
-  let x_38 : i32 = x_10.x_GLF_uniform_int_values[1];
-  i = x_38;
-  loop {
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_10.x_GLF_uniform_int_values[2];
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    let x_48 : f32 = f;
-    let x_50 : f32 = x_7.x_GLF_uniform_float_values[1];
-    if ((x_48 > x_50)) {
-    }
-    f = 1.0;
-    let x_55 : f32 = x_7.x_GLF_uniform_float_values[2];
-    let x_56 : f32 = f;
-    let x_59 : i32 = i;
-    f = ((1.0 - clamp(x_55, 1.0, x_56)) + f32(x_59));
-
-    continuing {
-      let x_62 : i32 = i;
-      i = (x_62 + 1);
-    }
-  }
-  let x_64 : f32 = f;
-  let x_66 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_64 == x_66)) {
-    let x_72 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_75 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_72), f32(x_75), f32(x_78), f32(x_81));
-  } else {
-    let x_85 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_86 : f32 = f32(x_85);
-    x_GLF_color = vec4<f32>(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 143f2cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,94 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[6];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int arr[3] = (int[3])0;
-  int index = 0;
-  bool x_76 = false;
-  bool x_86 = false;
-  bool x_77_phi = false;
-  bool x_87_phi = false;
-  const int x_33 = asint(x_6[3].x);
-  const int x_35 = asint(x_6[5].x);
-  const int x_37 = asint(x_6[2].x);
-  const int tint_symbol_2[3] = {x_33, x_35, x_37};
-  arr = tint_symbol_2;
-  index = 1;
-  while (true) {
-    bool x_51 = false;
-    bool x_52_phi = false;
-    x_52_phi = true;
-    if (true) {
-      const uint scalar_offset = ((16u * uint(0))) / 4;
-      const int x_46 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-      x_51 = !(((x_46 == 1) & (index <= 1)));
-      x_52_phi = x_51;
-    }
-    if (!(x_52_phi)) {
-    } else {
-      break;
-    }
-    const int x_56_save = index;
-    const int x_57 = arr[x_56_save];
-    arr[x_56_save] = (x_57 + 1);
-    index = (index + 1);
-  }
-  const int x_62 = asint(x_6[1].x);
-  const int x_64 = arr[x_62];
-  const int x_66 = asint(x_6[3].x);
-  const bool x_67 = (x_64 == x_66);
-  x_77_phi = x_67;
-  if (x_67) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_71 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_73 = arr[x_71];
-    const int x_75 = asint(x_6[4].x);
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  const bool x_77 = x_77_phi;
-  x_87_phi = x_77;
-  if (x_77) {
-    const int x_81 = asint(x_6[3].x);
-    const int x_83 = arr[x_81];
-    const int x_85 = asint(x_6[2].x);
-    x_86 = (x_83 == x_85);
-    x_87_phi = x_86;
-  }
-  if (x_87_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_92 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_95 = asint(x_6[1].x);
-    const int x_98 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_101 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_92), float(x_95), float(x_98), float(x_101));
-  } else {
-    const int x_105 = asint(x_6[1].x);
-    const float x_106 = float(x_105);
-    x_GLF_color = float4(x_106, x_106, x_106, x_106);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4a50161..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[6];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_1 arr = {};
-  int index = 0;
-  bool x_76 = false;
-  bool x_86 = false;
-  bool x_77_phi = false;
-  bool x_87_phi = false;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_33, x_35, x_37}};
-  arr = tint_symbol_2;
-  index = 1;
-  while (true) {
-    bool x_51 = false;
-    bool x_52_phi = false;
-    x_52_phi = true;
-    if (true) {
-      int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_48 = index;
-      x_51 = !(((x_46 == 1) & (x_48 <= 1)));
-      x_52_phi = x_51;
-    }
-    bool const x_52 = x_52_phi;
-    if (!(x_52)) {
-    } else {
-      break;
-    }
-    int const x_55 = index;
-    int const x_56_save = x_55;
-    int const x_57 = arr.arr[x_56_save];
-    arr.arr[x_56_save] = as_type<int>((as_type<uint>(x_57) + as_type<uint>(1)));
-    int const x_59 = index;
-    index = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-  }
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_64 = arr.arr[x_62];
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  bool const x_67 = (x_64 == x_66);
-  x_77_phi = x_67;
-  if (x_67) {
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_73 = arr.arr[x_71];
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  bool const x_77 = x_77_phi;
-  x_87_phi = x_77;
-  if (x_77) {
-    int const x_81 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_83 = arr.arr[x_81];
-    int const x_85 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    x_86 = (x_83 == x_85);
-    x_87_phi = x_86;
-  }
-  bool const x_87 = x_87_phi;
-  if (x_87) {
-    int const x_92 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_95 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_98 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_101 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_92), float(x_95), float(x_98), float(x_101));
-  } else {
-    int const x_105 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_106 = float(x_105);
-    *(tint_symbol_4) = float4(x_106, x_106, x_106, x_106);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4964574..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,217 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 138
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %index "index"
-               OpName %x_76 "x_76"
-               OpName %x_86 "x_86"
-               OpName %x_77_phi "x_77_phi"
-               OpName %x_87_phi "x_87_phi"
-               OpName %x_51 "x_51"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_6 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_6 = OpConstant %uint 6
-%_arr_int_uint_6 = OpTypeArray %int %uint_6
-       %buf0 = OpTypeStruct %_arr_int_uint_6
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-%_ptr_Function__arr_int_uint_3 = OpTypePointer Function %_arr_int_uint_3
-         %23 = OpConstantNull %_arr_int_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %127 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_int_uint_3 Function %23
-      %index = OpVariable %_ptr_Function_int Function %26
-       %x_76 = OpVariable %_ptr_Function_bool Function %30
-       %x_86 = OpVariable %_ptr_Function_bool Function %30
-   %x_77_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_87_phi = OpVariable %_ptr_Function_bool Function %30
-       %x_51 = OpVariable %_ptr_Function_bool Function %30
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %30
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %38 = OpLoad %int %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %41 = OpLoad %int %40
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %44 = OpLoad %int %43
-         %45 = OpCompositeConstruct %_arr_int_uint_3 %38 %41 %44
-               OpStore %arr %45
-               OpStore %index %int_1
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-               OpStore %x_52_phi %true
-               OpSelectionMerge %54 None
-               OpBranchConditional %true %55 %54
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %58 = OpLoad %int %57
-         %59 = OpLoad %int %index
-         %61 = OpIEqual %bool %58 %int_1
-         %62 = OpSLessThanEqual %bool %59 %int_1
-         %63 = OpLogicalAnd %bool %61 %62
-         %60 = OpLogicalNot %bool %63
-               OpStore %x_51 %60
-         %64 = OpLoad %bool %x_51
-               OpStore %x_52_phi %64
-               OpBranch %54
-         %54 = OpLabel
-         %65 = OpLoad %bool %x_52_phi
-         %66 = OpLogicalNot %bool %65
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %48
-         %67 = OpLabel
-         %70 = OpLoad %int %index
-         %71 = OpAccessChain %_ptr_Function_int %arr %70
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Function_int %arr %70
-         %74 = OpIAdd %int %72 %int_1
-               OpStore %73 %74
-         %75 = OpLoad %int %index
-         %76 = OpIAdd %int %75 %int_1
-               OpStore %index %76
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Function_int %arr %78
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %82 = OpLoad %int %81
-         %83 = OpIEqual %bool %80 %82
-               OpStore %x_77_phi %83
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %84
-         %85 = OpLabel
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Function_int %arr %87
-         %89 = OpLoad %int %88
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %92 = OpLoad %int %91
-         %93 = OpIEqual %bool %89 %92
-               OpStore %x_76 %93
-         %94 = OpLoad %bool %x_76
-               OpStore %x_77_phi %94
-               OpBranch %84
-         %84 = OpLabel
-         %95 = OpLoad %bool %x_77_phi
-               OpStore %x_87_phi %95
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %96
-         %97 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Function_int %arr %99
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %103 = OpLoad %int %102
-        %104 = OpIEqual %bool %101 %103
-               OpStore %x_86 %104
-        %105 = OpLoad %bool %x_86
-               OpStore %x_87_phi %105
-               OpBranch %96
-         %96 = OpLabel
-        %106 = OpLoad %bool %x_87_phi
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %109
-        %108 = OpLabel
-        %110 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %111 = OpLoad %int %110
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %115 = OpLoad %int %114
-        %116 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %117 = OpLoad %int %116
-        %118 = OpConvertSToF %float %111
-        %119 = OpConvertSToF %float %113
-        %120 = OpConvertSToF %float %115
-        %121 = OpConvertSToF %float %117
-        %122 = OpCompositeConstruct %v4float %118 %119 %120 %121
-               OpStore %x_GLF_color %122
-               OpBranch %107
-        %109 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %124 = OpLoad %int %123
-        %125 = OpConvertSToF %float %124
-        %126 = OpCompositeConstruct %v4float %125 %125 %125 %125
-               OpStore %x_GLF_color %126
-               OpBranch %107
-        %107 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %127
-        %130 = OpLabel
-        %131 = OpFunctionCall %void %main_1
-        %132 = OpLoad %v4float %x_GLF_color
-        %133 = OpCompositeConstruct %main_out %132
-               OpReturnValue %133
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %135 = OpLabel
-        %136 = OpFunctionCall %main_out %main_inner
-        %137 = OpCompositeExtract %v4float %136 0
-               OpStore %x_GLF_color_1_1 %137
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 68b192c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,91 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 6>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<i32, 3>;
-  var index : i32;
-  var x_76 : bool;
-  var x_86 : bool;
-  var x_77_phi : bool;
-  var x_87_phi : bool;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[2];
-  arr = array<i32, 3>(x_33, x_35, x_37);
-  index = 1;
-  loop {
-    var x_51 : bool;
-    var x_52_phi : bool;
-    x_52_phi = true;
-    if (true) {
-      let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_48 : i32 = index;
-      x_51 = !(((x_46 == 1) & (x_48 <= 1)));
-      x_52_phi = x_51;
-    }
-    let x_52 : bool = x_52_phi;
-    if (!(x_52)) {
-    } else {
-      break;
-    }
-    let x_55 : i32 = index;
-    let x_56 : ptr<function, i32> = &(arr[x_55]);
-    let x_57 : i32 = *(x_56);
-    *(x_56) = (x_57 + 1);
-    let x_59 : i32 = index;
-    index = (x_59 + 1);
-  }
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_64 : i32 = arr[x_62];
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_67 : bool = (x_64 == x_66);
-  x_77_phi = x_67;
-  if (x_67) {
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_73 : i32 = arr[x_71];
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[4];
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  let x_77 : bool = x_77_phi;
-  x_87_phi = x_77;
-  if (x_77) {
-    let x_81 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_83 : i32 = arr[x_81];
-    let x_85 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_86 = (x_83 == x_85);
-    x_87_phi = x_86;
-  }
-  let x_87 : bool = x_87_phi;
-  if (x_87) {
-    let x_92 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_95 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_98 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_101 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_92), f32(x_95), f32(x_98), f32(x_101));
-  } else {
-    let x_105 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_106 : f32 = f32(x_105);
-    x_GLF_color = vec4<f32>(x_106, x_106, x_106, x_106);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5b410ac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,98 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[6];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int arr[3] = (int[3])0;
-  int index = 0;
-  bool x_76 = false;
-  bool x_86 = false;
-  bool x_77_phi = false;
-  bool x_87_phi = false;
-  const int x_33 = asint(x_6[3].x);
-  const int x_35 = asint(x_6[5].x);
-  const int x_37 = asint(x_6[2].x);
-  const int tint_symbol_2[3] = {x_33, x_35, x_37};
-  arr = tint_symbol_2;
-  index = 1;
-  while (true) {
-    bool x_51 = false;
-    bool x_52_phi = false;
-    x_52_phi = true;
-    if (true) {
-      const uint scalar_offset = ((16u * uint(0))) / 4;
-      const int x_46 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-      bool tint_tmp = (x_46 == 1);
-      if (tint_tmp) {
-        tint_tmp = (index <= 1);
-      }
-      x_51 = !((tint_tmp));
-      x_52_phi = x_51;
-    }
-    if (!(x_52_phi)) {
-    } else {
-      break;
-    }
-    const int x_56_save = index;
-    const int x_57 = arr[x_56_save];
-    arr[x_56_save] = (x_57 + 1);
-    index = (index + 1);
-  }
-  const int x_62 = asint(x_6[1].x);
-  const int x_64 = arr[x_62];
-  const int x_66 = asint(x_6[3].x);
-  const bool x_67 = (x_64 == x_66);
-  x_77_phi = x_67;
-  if (x_67) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_71 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_73 = arr[x_71];
-    const int x_75 = asint(x_6[4].x);
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  const bool x_77 = x_77_phi;
-  x_87_phi = x_77;
-  if (x_77) {
-    const int x_81 = asint(x_6[3].x);
-    const int x_83 = arr[x_81];
-    const int x_85 = asint(x_6[2].x);
-    x_86 = (x_83 == x_85);
-    x_87_phi = x_86;
-  }
-  if (x_87_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_92 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_95 = asint(x_6[1].x);
-    const int x_98 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_101 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_92), float(x_95), float(x_98), float(x_101));
-  } else {
-    const int x_105 = asint(x_6[1].x);
-    const float x_106 = float(x_105);
-    x_GLF_color = float4(x_106, x_106, x_106, x_106);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.msl
deleted file mode 100644
index e73edfa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[6];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_1 arr = {};
-  int index = 0;
-  bool x_76 = false;
-  bool x_86 = false;
-  bool x_77_phi = false;
-  bool x_87_phi = false;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_33, x_35, x_37}};
-  arr = tint_symbol_2;
-  index = 1;
-  while (true) {
-    bool x_51 = false;
-    bool x_52_phi = false;
-    x_52_phi = true;
-    if (true) {
-      int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_48 = index;
-      x_51 = !(((x_46 == 1) && (x_48 <= 1)));
-      x_52_phi = x_51;
-    }
-    bool const x_52 = x_52_phi;
-    if (!(x_52)) {
-    } else {
-      break;
-    }
-    int const x_55 = index;
-    int const x_56_save = x_55;
-    int const x_57 = arr.arr[x_56_save];
-    arr.arr[x_56_save] = as_type<int>((as_type<uint>(x_57) + as_type<uint>(1)));
-    int const x_59 = index;
-    index = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-  }
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_64 = arr.arr[x_62];
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  bool const x_67 = (x_64 == x_66);
-  x_77_phi = x_67;
-  if (x_67) {
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_73 = arr.arr[x_71];
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  bool const x_77 = x_77_phi;
-  x_87_phi = x_77;
-  if (x_77) {
-    int const x_81 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_83 = arr.arr[x_81];
-    int const x_85 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    x_86 = (x_83 == x_85);
-    x_87_phi = x_86;
-  }
-  bool const x_87 = x_87_phi;
-  if (x_87) {
-    int const x_92 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_95 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_98 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_101 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_92), float(x_95), float(x_98), float(x_101));
-  } else {
-    int const x_105 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_106 = float(x_105);
-    *(tint_symbol_4) = float4(x_106, x_106, x_106, x_106);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 09f6f31..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,222 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 140
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %index "index"
-               OpName %x_76 "x_76"
-               OpName %x_86 "x_86"
-               OpName %x_77_phi "x_77_phi"
-               OpName %x_87_phi "x_87_phi"
-               OpName %x_51 "x_51"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_6 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_6 = OpConstant %uint 6
-%_arr_int_uint_6 = OpTypeArray %int %uint_6
-       %buf0 = OpTypeStruct %_arr_int_uint_6
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-%_ptr_Function__arr_int_uint_3 = OpTypePointer Function %_arr_int_uint_3
-         %23 = OpConstantNull %_arr_int_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %129 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_int_uint_3 Function %23
-      %index = OpVariable %_ptr_Function_int Function %26
-       %x_76 = OpVariable %_ptr_Function_bool Function %30
-       %x_86 = OpVariable %_ptr_Function_bool Function %30
-   %x_77_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_87_phi = OpVariable %_ptr_Function_bool Function %30
-       %x_51 = OpVariable %_ptr_Function_bool Function %30
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %30
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %38 = OpLoad %int %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %41 = OpLoad %int %40
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %44 = OpLoad %int %43
-         %45 = OpCompositeConstruct %_arr_int_uint_3 %38 %41 %44
-               OpStore %arr %45
-               OpStore %index %int_1
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-               OpStore %x_52_phi %true
-               OpSelectionMerge %54 None
-               OpBranchConditional %true %55 %54
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %58 = OpLoad %int %57
-         %59 = OpLoad %int %index
-         %61 = OpIEqual %bool %58 %int_1
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpSLessThanEqual %bool %59 %int_1
-               OpBranch %62
-         %62 = OpLabel
-         %65 = OpPhi %bool %61 %55 %64 %63
-         %60 = OpLogicalNot %bool %65
-               OpStore %x_51 %60
-         %66 = OpLoad %bool %x_51
-               OpStore %x_52_phi %66
-               OpBranch %54
-         %54 = OpLabel
-         %67 = OpLoad %bool %x_52_phi
-         %68 = OpLogicalNot %bool %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-               OpBranch %69
-         %71 = OpLabel
-               OpBranch %48
-         %69 = OpLabel
-         %72 = OpLoad %int %index
-         %73 = OpAccessChain %_ptr_Function_int %arr %72
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Function_int %arr %72
-         %76 = OpIAdd %int %74 %int_1
-               OpStore %75 %76
-         %77 = OpLoad %int %index
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %index %78
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Function_int %arr %80
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %84 = OpLoad %int %83
-         %85 = OpIEqual %bool %82 %84
-               OpStore %x_77_phi %85
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Function_int %arr %89
-         %91 = OpLoad %int %90
-         %93 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %94 = OpLoad %int %93
-         %95 = OpIEqual %bool %91 %94
-               OpStore %x_76 %95
-         %96 = OpLoad %bool %x_76
-               OpStore %x_77_phi %96
-               OpBranch %86
-         %86 = OpLabel
-         %97 = OpLoad %bool %x_77_phi
-               OpStore %x_87_phi %97
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Function_int %arr %101
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %105 = OpLoad %int %104
-        %106 = OpIEqual %bool %103 %105
-               OpStore %x_86 %106
-        %107 = OpLoad %bool %x_86
-               OpStore %x_87_phi %107
-               OpBranch %98
-         %98 = OpLabel
-        %108 = OpLoad %bool %x_87_phi
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %111
-        %110 = OpLabel
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %115 = OpLoad %int %114
-        %116 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %117 = OpLoad %int %116
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %113
-        %121 = OpConvertSToF %float %115
-        %122 = OpConvertSToF %float %117
-        %123 = OpConvertSToF %float %119
-        %124 = OpCompositeConstruct %v4float %120 %121 %122 %123
-               OpStore %x_GLF_color %124
-               OpBranch %109
-        %111 = OpLabel
-        %125 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpConvertSToF %float %126
-        %128 = OpCompositeConstruct %v4float %127 %127 %127 %127
-               OpStore %x_GLF_color %128
-               OpBranch %109
-        %109 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %129
-        %132 = OpLabel
-        %133 = OpFunctionCall %void %main_1
-        %134 = OpLoad %v4float %x_GLF_color
-        %135 = OpCompositeConstruct %main_out %134
-               OpReturnValue %135
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %137 = OpLabel
-        %138 = OpFunctionCall %main_out %main_inner
-        %139 = OpCompositeExtract %v4float %138 0
-               OpStore %x_GLF_color_1_1 %139
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3e3cb21..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-condition-double-negate/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,91 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 6>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<i32, 3>;
-  var index : i32;
-  var x_76 : bool;
-  var x_86 : bool;
-  var x_77_phi : bool;
-  var x_87_phi : bool;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[2];
-  arr = array<i32, 3>(x_33, x_35, x_37);
-  index = 1;
-  loop {
-    var x_51 : bool;
-    var x_52_phi : bool;
-    x_52_phi = true;
-    if (true) {
-      let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_48 : i32 = index;
-      x_51 = !(((x_46 == 1) && (x_48 <= 1)));
-      x_52_phi = x_51;
-    }
-    let x_52 : bool = x_52_phi;
-    if (!(x_52)) {
-    } else {
-      break;
-    }
-    let x_55 : i32 = index;
-    let x_56 : ptr<function, i32> = &(arr[x_55]);
-    let x_57 : i32 = *(x_56);
-    *(x_56) = (x_57 + 1);
-    let x_59 : i32 = index;
-    index = (x_59 + 1);
-  }
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_64 : i32 = arr[x_62];
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_67 : bool = (x_64 == x_66);
-  x_77_phi = x_67;
-  if (x_67) {
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_73 : i32 = arr[x_71];
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[4];
-    x_76 = (x_73 == x_75);
-    x_77_phi = x_76;
-  }
-  let x_77 : bool = x_77_phi;
-  x_87_phi = x_77;
-  if (x_77) {
-    let x_81 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_83 : i32 = arr[x_81];
-    let x_85 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_86 = (x_83 == x_85);
-    x_87_phi = x_86;
-  }
-  let x_87 : bool = x_87_phi;
-  if (x_87) {
-    let x_92 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_95 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_98 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_101 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_92), f32(x_95), f32(x_98), f32(x_101));
-  } else {
-    let x_105 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_106 : f32 = f32(x_105);
-    x_GLF_color = vec4<f32>(x_106, x_106, x_106, x_106);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index de3dd10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,78 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  float c = 0.0f;
-  int i = 0;
-  const float x_35 = asfloat(x_6[1].x);
-  a = x_35;
-  const float x_37 = asfloat(x_6[1].x);
-  b = x_37;
-  const float x_39 = asfloat(x_6[1].x);
-  c = x_39;
-  const int x_41 = asint(x_11[1].x);
-  i = x_41;
-  while (true) {
-    const int x_46 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_11[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    const int x_51 = i;
-    const int x_53 = asint(x_11[2].x);
-    if ((x_51 == x_53)) {
-      const float x_57 = a;
-      const float x_60 = asfloat(x_6[1].x);
-      b = (ddx(x_57) + x_60);
-    }
-    c = ddx(a);
-    a = (c / b);
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_69 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_71 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_69 == x_71)) {
-    const int x_77 = asint(x_11[2].x);
-    const int x_80 = asint(x_11[1].x);
-    const int x_83 = asint(x_11[1].x);
-    const int x_86 = asint(x_11[2].x);
-    x_GLF_color = float4(float(x_77), float(x_80), float(x_83), float(x_86));
-  } else {
-    const int x_90 = asint(x_11[1].x);
-    const float x_91 = float(x_90);
-    x_GLF_color = float4(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.msl
deleted file mode 100644
index 8a69fc9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_11, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float b = 0.0f;
-  float c = 0.0f;
-  int i = 0;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = x_35;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  b = x_37;
-  float const x_39 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  c = x_39;
-  int const x_41 = x_11.x_GLF_uniform_int_values.arr[1].el;
-  i = x_41;
-  while (true) {
-    int const x_46 = i;
-    int const x_48 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    int const x_51 = i;
-    int const x_53 = x_11.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_51 == x_53)) {
-      float const x_57 = a;
-      float const x_60 = x_6.x_GLF_uniform_float_values.arr[1].el;
-      b = (dfdx(x_57) + x_60);
-    }
-    float const x_62 = a;
-    c = dfdx(x_62);
-    float const x_64 = c;
-    float const x_65 = b;
-    a = (x_64 / x_65);
-    {
-      int const x_67 = i;
-      i = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-    }
-  }
-  float const x_69 = a;
-  float const x_71 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_69 == x_71)) {
-    int const x_77 = x_11.x_GLF_uniform_int_values.arr[2].el;
-    int const x_80 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_83 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_86 = x_11.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_77), float(x_80), float(x_83), float(x_86));
-  } else {
-    int const x_90 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    float const x_91 = float(x_90);
-    *(tint_symbol_3) = float4(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_11, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_11, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_11, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 67eba1f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,183 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 111
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %100 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %26
-          %b = OpVariable %_ptr_Function_float Function %26
-          %c = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %31
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %36 = OpLoad %float %35
-               OpStore %a %36
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %38 = OpLoad %float %37
-               OpStore %b %38
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %40 = OpLoad %float %39
-               OpStore %c %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %43 = OpLoad %int %42
-               OpStore %i %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpSLessThan %bool %48 %51
-               OpSelectionMerge %54 None
-               OpBranchConditional %52 %55 %56
-         %55 = OpLabel
-               OpBranch %54
-         %56 = OpLabel
-               OpBranch %45
-         %54 = OpLabel
-         %57 = OpLoad %int %i
-         %59 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpIEqual %bool %57 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpLoad %float %a
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %66 = OpLoad %float %65
-         %67 = OpDPdx %float %64
-         %68 = OpFAdd %float %67 %66
-               OpStore %b %68
-               OpBranch %62
-         %62 = OpLabel
-         %69 = OpLoad %float %a
-         %70 = OpDPdx %float %69
-               OpStore %c %70
-         %71 = OpLoad %float %c
-         %72 = OpLoad %float %b
-         %73 = OpFDiv %float %71 %72
-               OpStore %a %73
-               OpBranch %46
-         %46 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-               OpBranch %44
-         %45 = OpLabel
-         %76 = OpLoad %float %a
-         %77 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %78 = OpLoad %float %77
-         %79 = OpFOrdEqual %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %90 = OpLoad %int %89
-         %91 = OpConvertSToF %float %84
-         %92 = OpConvertSToF %float %86
-         %93 = OpConvertSToF %float %88
-         %94 = OpConvertSToF %float %90
-         %95 = OpCompositeConstruct %v4float %91 %92 %93 %94
-               OpStore %x_GLF_color %95
-               OpBranch %80
-         %82 = OpLabel
-         %96 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpConvertSToF %float %97
-         %99 = OpCompositeConstruct %v4float %98 %98 %98 %98
-               OpStore %x_GLF_color %99
-               OpBranch %80
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %100
-        %103 = OpLabel
-        %104 = OpFunctionCall %void %main_1
-        %105 = OpLoad %v4float %x_GLF_color
-        %106 = OpCompositeConstruct %main_out %105
-               OpReturnValue %106
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %108 = OpLabel
-        %109 = OpFunctionCall %main_out %main_inner
-        %110 = OpCompositeExtract %v4float %109 0
-               OpStore %x_GLF_color_1_1 %110
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 52eb93c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,84 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  var c : f32;
-  var i : i32;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = x_35;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[1];
-  b = x_37;
-  let x_39 : f32 = x_6.x_GLF_uniform_float_values[1];
-  c = x_39;
-  let x_41 : i32 = x_11.x_GLF_uniform_int_values[1];
-  i = x_41;
-  loop {
-    let x_46 : i32 = i;
-    let x_48 : i32 = x_11.x_GLF_uniform_int_values[0];
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    let x_51 : i32 = i;
-    let x_53 : i32 = x_11.x_GLF_uniform_int_values[2];
-    if ((x_51 == x_53)) {
-      let x_57 : f32 = a;
-      let x_60 : f32 = x_6.x_GLF_uniform_float_values[1];
-      b = (dpdx(x_57) + x_60);
-    }
-    let x_62 : f32 = a;
-    c = dpdx(x_62);
-    let x_64 : f32 = c;
-    let x_65 : f32 = b;
-    a = (x_64 / x_65);
-
-    continuing {
-      let x_67 : i32 = i;
-      i = (x_67 + 1);
-    }
-  }
-  let x_69 : f32 = a;
-  let x_71 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_69 == x_71)) {
-    let x_77 : i32 = x_11.x_GLF_uniform_int_values[2];
-    let x_80 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_83 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_86 : i32 = x_11.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_77), f32(x_80), f32(x_83), f32(x_86));
-  } else {
-    let x_90 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_91 : f32 = f32(x_90);
-    x_GLF_color = vec4<f32>(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index de3dd10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,78 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  float c = 0.0f;
-  int i = 0;
-  const float x_35 = asfloat(x_6[1].x);
-  a = x_35;
-  const float x_37 = asfloat(x_6[1].x);
-  b = x_37;
-  const float x_39 = asfloat(x_6[1].x);
-  c = x_39;
-  const int x_41 = asint(x_11[1].x);
-  i = x_41;
-  while (true) {
-    const int x_46 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_11[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    const int x_51 = i;
-    const int x_53 = asint(x_11[2].x);
-    if ((x_51 == x_53)) {
-      const float x_57 = a;
-      const float x_60 = asfloat(x_6[1].x);
-      b = (ddx(x_57) + x_60);
-    }
-    c = ddx(a);
-    a = (c / b);
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_69 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_71 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_69 == x_71)) {
-    const int x_77 = asint(x_11[2].x);
-    const int x_80 = asint(x_11[1].x);
-    const int x_83 = asint(x_11[1].x);
-    const int x_86 = asint(x_11[2].x);
-    x_GLF_color = float4(float(x_77), float(x_80), float(x_83), float(x_86));
-  } else {
-    const int x_90 = asint(x_11[1].x);
-    const float x_91 = float(x_90);
-    x_GLF_color = float4(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.msl
deleted file mode 100644
index 8a69fc9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_11, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float b = 0.0f;
-  float c = 0.0f;
-  int i = 0;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = x_35;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  b = x_37;
-  float const x_39 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  c = x_39;
-  int const x_41 = x_11.x_GLF_uniform_int_values.arr[1].el;
-  i = x_41;
-  while (true) {
-    int const x_46 = i;
-    int const x_48 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    int const x_51 = i;
-    int const x_53 = x_11.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_51 == x_53)) {
-      float const x_57 = a;
-      float const x_60 = x_6.x_GLF_uniform_float_values.arr[1].el;
-      b = (dfdx(x_57) + x_60);
-    }
-    float const x_62 = a;
-    c = dfdx(x_62);
-    float const x_64 = c;
-    float const x_65 = b;
-    a = (x_64 / x_65);
-    {
-      int const x_67 = i;
-      i = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-    }
-  }
-  float const x_69 = a;
-  float const x_71 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_69 == x_71)) {
-    int const x_77 = x_11.x_GLF_uniform_int_values.arr[2].el;
-    int const x_80 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_83 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_86 = x_11.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_77), float(x_80), float(x_83), float(x_86));
-  } else {
-    int const x_90 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    float const x_91 = float(x_90);
-    *(tint_symbol_3) = float4(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_11, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_11, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_11, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 67eba1f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,183 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 111
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %100 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %26
-          %b = OpVariable %_ptr_Function_float Function %26
-          %c = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %31
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %36 = OpLoad %float %35
-               OpStore %a %36
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %38 = OpLoad %float %37
-               OpStore %b %38
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %40 = OpLoad %float %39
-               OpStore %c %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %43 = OpLoad %int %42
-               OpStore %i %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpSLessThan %bool %48 %51
-               OpSelectionMerge %54 None
-               OpBranchConditional %52 %55 %56
-         %55 = OpLabel
-               OpBranch %54
-         %56 = OpLabel
-               OpBranch %45
-         %54 = OpLabel
-         %57 = OpLoad %int %i
-         %59 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpIEqual %bool %57 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpLoad %float %a
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %66 = OpLoad %float %65
-         %67 = OpDPdx %float %64
-         %68 = OpFAdd %float %67 %66
-               OpStore %b %68
-               OpBranch %62
-         %62 = OpLabel
-         %69 = OpLoad %float %a
-         %70 = OpDPdx %float %69
-               OpStore %c %70
-         %71 = OpLoad %float %c
-         %72 = OpLoad %float %b
-         %73 = OpFDiv %float %71 %72
-               OpStore %a %73
-               OpBranch %46
-         %46 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-               OpBranch %44
-         %45 = OpLabel
-         %76 = OpLoad %float %a
-         %77 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %78 = OpLoad %float %77
-         %79 = OpFOrdEqual %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %90 = OpLoad %int %89
-         %91 = OpConvertSToF %float %84
-         %92 = OpConvertSToF %float %86
-         %93 = OpConvertSToF %float %88
-         %94 = OpConvertSToF %float %90
-         %95 = OpCompositeConstruct %v4float %91 %92 %93 %94
-               OpStore %x_GLF_color %95
-               OpBranch %80
-         %82 = OpLabel
-         %96 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpConvertSToF %float %97
-         %99 = OpCompositeConstruct %v4float %98 %98 %98 %98
-               OpStore %x_GLF_color %99
-               OpBranch %80
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %100
-        %103 = OpLabel
-        %104 = OpFunctionCall %void %main_1
-        %105 = OpLoad %v4float %x_GLF_color
-        %106 = OpCompositeConstruct %main_out %105
-               OpReturnValue %106
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %108 = OpLabel
-        %109 = OpFunctionCall %main_out %main_inner
-        %110 = OpCompositeExtract %v4float %109 0
-               OpStore %x_GLF_color_1_1 %110
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 52eb93c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,84 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  var c : f32;
-  var i : i32;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = x_35;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[1];
-  b = x_37;
-  let x_39 : f32 = x_6.x_GLF_uniform_float_values[1];
-  c = x_39;
-  let x_41 : i32 = x_11.x_GLF_uniform_int_values[1];
-  i = x_41;
-  loop {
-    let x_46 : i32 = i;
-    let x_48 : i32 = x_11.x_GLF_uniform_int_values[0];
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    let x_51 : i32 = i;
-    let x_53 : i32 = x_11.x_GLF_uniform_int_values[2];
-    if ((x_51 == x_53)) {
-      let x_57 : f32 = a;
-      let x_60 : f32 = x_6.x_GLF_uniform_float_values[1];
-      b = (dpdx(x_57) + x_60);
-    }
-    let x_62 : f32 = a;
-    c = dpdx(x_62);
-    let x_64 : f32 = c;
-    let x_65 : f32 = b;
-    a = (x_64 / x_65);
-
-    continuing {
-      let x_67 : i32 = i;
-      i = (x_67 + 1);
-    }
-  }
-  let x_69 : f32 = a;
-  let x_71 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_69 == x_71)) {
-    let x_77 : i32 = x_11.x_GLF_uniform_int_values[2];
-    let x_80 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_83 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_86 : i32 = x_11.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_77), f32(x_80), f32(x_83), f32(x_86));
-  } else {
-    let x_90 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_91 : f32 = f32(x_90);
-    x_GLF_color = vec4<f32>(x_91, x_91, x_91, x_91);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f916986..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,101 +0,0 @@
-SKIP: FAILED
-
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[4];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x3 m23 = float2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  const float x_46 = asfloat(x_7[1].x);
-  m23 = float2x3(float3(x_46, 0.0f, 0.0f), float3(0.0f, x_46, 0.0f));
-  i = 1;
-  while (true) {
-    bool x_80 = false;
-    bool x_81_phi = false;
-    const int x_54 = i;
-    const int x_56 = asint(x_10[3].x);
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-    const int x_62 = asint(x_10[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_66 = m23[x_60][x_62];
-    set_float3(m23[x_60], x_62, (x_66 + x_64));
-    const float x_70 = gl_FragCoord.y;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_72 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_70 < x_72)) {
-    }
-    x_81_phi = true;
-    if (true) {
-      const float x_79 = gl_FragCoord.x;
-      x_80 = (x_79 < 0.0f);
-      x_81_phi = x_80;
-    }
-    if (!(x_81_phi)) {
-      break;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const float2x3 x_87 = m23;
-  const int x_89 = asint(x_10[1].x);
-  const int x_92 = asint(x_10[1].x);
-  const int x_95 = asint(x_10[1].x);
-  const int x_98 = asint(x_10[1].x);
-  const int x_101 = asint(x_10[1].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_104 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float2x3 x_108 = float2x3(float3(float(x_89), float(x_92), float(x_95)), float3(float(x_98), float(x_101), float(x_104)));
-  if ((all((x_87[0u] == x_108[0u])) & all((x_87[1u] == x_108[1u])))) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_122 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const int x_125 = asint(x_10[1].x);
-    const int x_128 = asint(x_10[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_131 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_122), float(x_125), float(x_128), float(x_131));
-  } else {
-    const int x_135 = asint(x_10[1].x);
-    const float x_136 = float(x_135);
-    x_GLF_color = float4(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_6 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_6;
-}
-C:\src\tint\test\Shader@0x00000219080386E0(35,16-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x00000219080386E0(20,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.msl
deleted file mode 100644
index 02f2756..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2x3 m23 = float2x3(0.0f);
-  int i = 0;
-  float const x_46 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  m23 = float2x3(float3(x_46, 0.0f, 0.0f), float3(0.0f, x_46, 0.0f));
-  i = 1;
-  while (true) {
-    bool x_80 = false;
-    bool x_81_phi = false;
-    int const x_54 = i;
-    int const x_56 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    int const x_60 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_62 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_64 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_66 = m23[x_60][x_62];
-    m23[x_60][x_62] = (x_66 + x_64);
-    float const x_70 = (*(tint_symbol_3)).y;
-    float const x_72 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_70 < x_72)) {
-    }
-    x_81_phi = true;
-    if (true) {
-      float const x_79 = (*(tint_symbol_3)).x;
-      x_80 = (x_79 < 0.0f);
-      x_81_phi = x_80;
-    }
-    bool const x_81 = x_81_phi;
-    if (!(x_81)) {
-      break;
-    }
-    {
-      int const x_85 = i;
-      i = as_type<int>((as_type<uint>(x_85) + as_type<uint>(1)));
-    }
-  }
-  float2x3 const x_87 = m23;
-  int const x_89 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_92 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_95 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_98 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_101 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_104 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  float2x3 const x_108 = float2x3(float3(float(x_89), float(x_92), float(x_95)), float3(float(x_98), float(x_101), float(x_104)));
-  if ((all((x_87[0u] == x_108[0u])) & all((x_87[1u] == x_108[1u])))) {
-    int const x_122 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_125 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_128 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_131 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_122), float(x_125), float(x_128), float(x_131));
-  } else {
-    int const x_135 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_136 = float(x_135);
-    *(tint_symbol_4) = float4(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d1d7b39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,244 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 162
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m23 "m23"
-               OpName %i "i"
-               OpName %x_80 "x_80"
-               OpName %x_81_phi "x_81_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat2v3float = OpTypeMatrix %v3float 2
-%_ptr_Function_mat2v3float = OpTypePointer Function %mat2v3float
-         %31 = OpConstantNull %mat2v3float
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %51 = OpConstantNull %bool
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-       %true = OpConstantTrue %bool
-     %v3bool = OpTypeVector %bool 3
-   %main_out = OpTypeStruct %v4float
-        %149 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-        %m23 = OpVariable %_ptr_Function_mat2v3float Function %31
-          %i = OpVariable %_ptr_Function_int Function %34
-       %x_80 = OpVariable %_ptr_Function_bool Function %51
-   %x_81_phi = OpVariable %_ptr_Function_bool Function %51
-         %38 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %39 = OpLoad %float %38
-         %41 = OpCompositeConstruct %v3float %39 %float_0 %float_0
-         %42 = OpCompositeConstruct %v3float %float_0 %39 %float_0
-         %43 = OpCompositeConstruct %mat2v3float %41 %42
-               OpStore %m23 %43
-               OpStore %i %int_1
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %53 = OpLoad %int %i
-         %56 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %57 = OpLoad %int %56
-         %58 = OpSLessThan %bool %53 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpBranch %59
-         %61 = OpLabel
-               OpBranch %45
-         %59 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %66 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Function_float %m23 %64 %67
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Function_float %m23 %64 %67
-         %74 = OpFAdd %float %72 %69
-               OpStore %73 %74
-         %77 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %78 = OpLoad %float %77
-         %79 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %80 = OpLoad %float %79
-         %81 = OpFOrdLessThan %bool %78 %80
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %82
-         %83 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-               OpStore %x_81_phi %true
-               OpSelectionMerge %85 None
-               OpBranchConditional %true %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %88 = OpLoad %float %87
-         %89 = OpFOrdLessThan %bool %88 %float_0
-               OpStore %x_80 %89
-         %90 = OpLoad %bool %x_80
-               OpStore %x_81_phi %90
-               OpBranch %85
-         %85 = OpLabel
-         %91 = OpLoad %bool %x_81_phi
-         %92 = OpLogicalNot %bool %91
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-               OpBranch %45
-         %93 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-         %95 = OpLoad %int %i
-         %96 = OpIAdd %int %95 %int_1
-               OpStore %i %96
-               OpBranch %44
-         %45 = OpLabel
-         %97 = OpLoad %mat2v3float %m23
-         %98 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %99
-        %111 = OpConvertSToF %float %101
-        %112 = OpConvertSToF %float %103
-        %113 = OpCompositeConstruct %v3float %110 %111 %112
-        %114 = OpConvertSToF %float %105
-        %115 = OpConvertSToF %float %107
-        %116 = OpConvertSToF %float %109
-        %117 = OpCompositeConstruct %v3float %114 %115 %116
-        %118 = OpCompositeConstruct %mat2v3float %113 %117
-        %120 = OpCompositeExtract %v3float %97 0
-        %121 = OpCompositeExtract %v3float %118 0
-        %122 = OpFOrdEqual %v3bool %120 %121
-        %119 = OpAll %bool %122
-        %125 = OpCompositeExtract %v3float %97 1
-        %126 = OpCompositeExtract %v3float %118 1
-        %127 = OpFOrdEqual %v3bool %125 %126
-        %124 = OpAll %bool %127
-        %128 = OpLogicalAnd %bool %119 %124
-               OpSelectionMerge %129 None
-               OpBranchConditional %128 %130 %131
-        %130 = OpLabel
-        %132 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %133 = OpLoad %int %132
-        %134 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %135 = OpLoad %int %134
-        %136 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %139 = OpLoad %int %138
-        %140 = OpConvertSToF %float %133
-        %141 = OpConvertSToF %float %135
-        %142 = OpConvertSToF %float %137
-        %143 = OpConvertSToF %float %139
-        %144 = OpCompositeConstruct %v4float %140 %141 %142 %143
-               OpStore %x_GLF_color %144
-               OpBranch %129
-        %131 = OpLabel
-        %145 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %146 = OpLoad %int %145
-        %147 = OpConvertSToF %float %146
-        %148 = OpCompositeConstruct %v4float %147 %147 %147 %147
-               OpStore %x_GLF_color %148
-               OpBranch %129
-        %129 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %149
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %153 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %154 = OpFunctionCall %void %main_1
-        %155 = OpLoad %v4float %x_GLF_color
-        %156 = OpCompositeConstruct %main_out %155
-               OpReturnValue %156
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %158 = OpLabel
-        %160 = OpLoad %v4float %gl_FragCoord_param_1
-        %159 = OpFunctionCall %main_out %main_inner %160
-        %161 = OpCompositeExtract %v4float %159 0
-               OpStore %x_GLF_color_1_1 %161
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 73908f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,95 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m23 : mat2x3<f32>;
-  var i : i32;
-  let x_46 : f32 = x_7.x_GLF_uniform_float_values[1];
-  m23 = mat2x3<f32>(vec3<f32>(x_46, 0.0, 0.0), vec3<f32>(0.0, x_46, 0.0));
-  i = 1;
-  loop {
-    var x_80 : bool;
-    var x_81_phi : bool;
-    let x_54 : i32 = i;
-    let x_56 : i32 = x_10.x_GLF_uniform_int_values[3];
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    let x_60 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_64 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_66 : f32 = m23[x_60][x_62];
-    m23[x_60][x_62] = (x_66 + x_64);
-    let x_70 : f32 = gl_FragCoord.y;
-    let x_72 : f32 = x_7.x_GLF_uniform_float_values[0];
-    if ((x_70 < x_72)) {
-    }
-    x_81_phi = true;
-    if (true) {
-      let x_79 : f32 = gl_FragCoord.x;
-      x_80 = (x_79 < 0.0);
-      x_81_phi = x_80;
-    }
-    let x_81 : bool = x_81_phi;
-    if (!(x_81)) {
-      break;
-    }
-
-    continuing {
-      let x_85 : i32 = i;
-      i = (x_85 + 1);
-    }
-  }
-  let x_87 : mat2x3<f32> = m23;
-  let x_89 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_92 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_95 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_98 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_101 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_104 : i32 = x_10.x_GLF_uniform_int_values[0];
-  let x_108 : mat2x3<f32> = mat2x3<f32>(vec3<f32>(f32(x_89), f32(x_92), f32(x_95)), vec3<f32>(f32(x_98), f32(x_101), f32(x_104)));
-  if ((all((x_87[0u] == x_108[0u])) & all((x_87[1u] == x_108[1u])))) {
-    let x_122 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_125 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_128 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_122), f32(x_125), f32(x_128), f32(x_131));
-  } else {
-    let x_135 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_136 : f32 = f32(x_135);
-    x_GLF_color = vec4<f32>(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d4c253c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-SKIP: FAILED
-
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[4];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x3 m23 = float2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  const float x_46 = asfloat(x_7[1].x);
-  m23 = float2x3(float3(x_46, 0.0f, 0.0f), float3(0.0f, x_46, 0.0f));
-  i = 1;
-  while (true) {
-    bool x_80 = false;
-    bool x_81_phi = false;
-    const int x_54 = i;
-    const int x_56 = asint(x_10[3].x);
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-    const int x_62 = asint(x_10[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_66 = m23[x_60][x_62];
-    set_float3(m23[x_60], x_62, (x_66 + x_64));
-    const float x_70 = gl_FragCoord.y;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_72 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_70 < x_72)) {
-    }
-    x_81_phi = true;
-    if (true) {
-      const float x_79 = gl_FragCoord.x;
-      x_80 = (x_79 < 0.0f);
-      x_81_phi = x_80;
-    }
-    if (!(x_81_phi)) {
-      break;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const float2x3 x_87 = m23;
-  const int x_89 = asint(x_10[1].x);
-  const int x_92 = asint(x_10[1].x);
-  const int x_95 = asint(x_10[1].x);
-  const int x_98 = asint(x_10[1].x);
-  const int x_101 = asint(x_10[1].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_104 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float2x3 x_108 = float2x3(float3(float(x_89), float(x_92), float(x_95)), float3(float(x_98), float(x_101), float(x_104)));
-  bool tint_tmp = all((x_87[0u] == x_108[0u]));
-  if (tint_tmp) {
-    tint_tmp = all((x_87[1u] == x_108[1u]));
-  }
-  if ((tint_tmp)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_122 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const int x_125 = asint(x_10[1].x);
-    const int x_128 = asint(x_10[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_131 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_122), float(x_125), float(x_128), float(x_131));
-  } else {
-    const int x_135 = asint(x_10[1].x);
-    const float x_136 = float(x_135);
-    x_GLF_color = float4(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_6 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_6;
-}
-C:\src\tint\test\Shader@0x000001FE6250D010(35,16-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x000001FE6250D010(20,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7a1ba57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2x3 m23 = float2x3(0.0f);
-  int i = 0;
-  float const x_46 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  m23 = float2x3(float3(x_46, 0.0f, 0.0f), float3(0.0f, x_46, 0.0f));
-  i = 1;
-  while (true) {
-    bool x_80 = false;
-    bool x_81_phi = false;
-    int const x_54 = i;
-    int const x_56 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    int const x_60 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_62 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_64 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_66 = m23[x_60][x_62];
-    m23[x_60][x_62] = (x_66 + x_64);
-    float const x_70 = (*(tint_symbol_3)).y;
-    float const x_72 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_70 < x_72)) {
-    }
-    x_81_phi = true;
-    if (true) {
-      float const x_79 = (*(tint_symbol_3)).x;
-      x_80 = (x_79 < 0.0f);
-      x_81_phi = x_80;
-    }
-    bool const x_81 = x_81_phi;
-    if (!(x_81)) {
-      break;
-    }
-    {
-      int const x_85 = i;
-      i = as_type<int>((as_type<uint>(x_85) + as_type<uint>(1)));
-    }
-  }
-  float2x3 const x_87 = m23;
-  int const x_89 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_92 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_95 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_98 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_101 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  int const x_104 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  float2x3 const x_108 = float2x3(float3(float(x_89), float(x_92), float(x_95)), float3(float(x_98), float(x_101), float(x_104)));
-  if ((all((x_87[0u] == x_108[0u])) && all((x_87[1u] == x_108[1u])))) {
-    int const x_122 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_125 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_128 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_131 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_122), float(x_125), float(x_128), float(x_131));
-  } else {
-    int const x_135 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_136 = float(x_135);
-    *(tint_symbol_4) = float4(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a2549fe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,249 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 164
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m23 "m23"
-               OpName %i "i"
-               OpName %x_80 "x_80"
-               OpName %x_81_phi "x_81_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat2v3float = OpTypeMatrix %v3float 2
-%_ptr_Function_mat2v3float = OpTypePointer Function %mat2v3float
-         %31 = OpConstantNull %mat2v3float
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %51 = OpConstantNull %bool
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-       %true = OpConstantTrue %bool
-     %v3bool = OpTypeVector %bool 3
-   %main_out = OpTypeStruct %v4float
-        %151 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-        %m23 = OpVariable %_ptr_Function_mat2v3float Function %31
-          %i = OpVariable %_ptr_Function_int Function %34
-       %x_80 = OpVariable %_ptr_Function_bool Function %51
-   %x_81_phi = OpVariable %_ptr_Function_bool Function %51
-         %38 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %39 = OpLoad %float %38
-         %41 = OpCompositeConstruct %v3float %39 %float_0 %float_0
-         %42 = OpCompositeConstruct %v3float %float_0 %39 %float_0
-         %43 = OpCompositeConstruct %mat2v3float %41 %42
-               OpStore %m23 %43
-               OpStore %i %int_1
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %53 = OpLoad %int %i
-         %56 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %57 = OpLoad %int %56
-         %58 = OpSLessThan %bool %53 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpBranch %59
-         %61 = OpLabel
-               OpBranch %45
-         %59 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %66 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Function_float %m23 %64 %67
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Function_float %m23 %64 %67
-         %74 = OpFAdd %float %72 %69
-               OpStore %73 %74
-         %77 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %78 = OpLoad %float %77
-         %79 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %80 = OpLoad %float %79
-         %81 = OpFOrdLessThan %bool %78 %80
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %82
-         %83 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-               OpStore %x_81_phi %true
-               OpSelectionMerge %85 None
-               OpBranchConditional %true %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %88 = OpLoad %float %87
-         %89 = OpFOrdLessThan %bool %88 %float_0
-               OpStore %x_80 %89
-         %90 = OpLoad %bool %x_80
-               OpStore %x_81_phi %90
-               OpBranch %85
-         %85 = OpLabel
-         %91 = OpLoad %bool %x_81_phi
-         %92 = OpLogicalNot %bool %91
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-               OpBranch %45
-         %93 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-         %95 = OpLoad %int %i
-         %96 = OpIAdd %int %95 %int_1
-               OpStore %i %96
-               OpBranch %44
-         %45 = OpLabel
-         %97 = OpLoad %mat2v3float %m23
-         %98 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %99
-        %111 = OpConvertSToF %float %101
-        %112 = OpConvertSToF %float %103
-        %113 = OpCompositeConstruct %v3float %110 %111 %112
-        %114 = OpConvertSToF %float %105
-        %115 = OpConvertSToF %float %107
-        %116 = OpConvertSToF %float %109
-        %117 = OpCompositeConstruct %v3float %114 %115 %116
-        %118 = OpCompositeConstruct %mat2v3float %113 %117
-        %120 = OpCompositeExtract %v3float %97 0
-        %121 = OpCompositeExtract %v3float %118 0
-        %122 = OpFOrdEqual %v3bool %120 %121
-        %119 = OpAll %bool %122
-               OpSelectionMerge %124 None
-               OpBranchConditional %119 %125 %124
-        %125 = OpLabel
-        %127 = OpCompositeExtract %v3float %97 1
-        %128 = OpCompositeExtract %v3float %118 1
-        %129 = OpFOrdEqual %v3bool %127 %128
-        %126 = OpAll %bool %129
-               OpBranch %124
-        %124 = OpLabel
-        %130 = OpPhi %bool %119 %45 %126 %125
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %133
-        %132 = OpLabel
-        %134 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %135 = OpLoad %int %134
-        %136 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %139 = OpLoad %int %138
-        %140 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %141 = OpLoad %int %140
-        %142 = OpConvertSToF %float %135
-        %143 = OpConvertSToF %float %137
-        %144 = OpConvertSToF %float %139
-        %145 = OpConvertSToF %float %141
-        %146 = OpCompositeConstruct %v4float %142 %143 %144 %145
-               OpStore %x_GLF_color %146
-               OpBranch %131
-        %133 = OpLabel
-        %147 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %148 = OpLoad %int %147
-        %149 = OpConvertSToF %float %148
-        %150 = OpCompositeConstruct %v4float %149 %149 %149 %149
-               OpStore %x_GLF_color %150
-               OpBranch %131
-        %131 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %151
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %155 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %156 = OpFunctionCall %void %main_1
-        %157 = OpLoad %v4float %x_GLF_color
-        %158 = OpCompositeConstruct %main_out %157
-               OpReturnValue %158
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %160 = OpLabel
-        %162 = OpLoad %v4float %gl_FragCoord_param_1
-        %161 = OpFunctionCall %main_out %main_inner %162
-        %163 = OpCompositeExtract %v4float %161 0
-               OpStore %x_GLF_color_1_1 %163
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b9b8a36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-matrix-element-break-after-first-iteration/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,95 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m23 : mat2x3<f32>;
-  var i : i32;
-  let x_46 : f32 = x_7.x_GLF_uniform_float_values[1];
-  m23 = mat2x3<f32>(vec3<f32>(x_46, 0.0, 0.0), vec3<f32>(0.0, x_46, 0.0));
-  i = 1;
-  loop {
-    var x_80 : bool;
-    var x_81_phi : bool;
-    let x_54 : i32 = i;
-    let x_56 : i32 = x_10.x_GLF_uniform_int_values[3];
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    let x_60 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_64 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_66 : f32 = m23[x_60][x_62];
-    m23[x_60][x_62] = (x_66 + x_64);
-    let x_70 : f32 = gl_FragCoord.y;
-    let x_72 : f32 = x_7.x_GLF_uniform_float_values[0];
-    if ((x_70 < x_72)) {
-    }
-    x_81_phi = true;
-    if (true) {
-      let x_79 : f32 = gl_FragCoord.x;
-      x_80 = (x_79 < 0.0);
-      x_81_phi = x_80;
-    }
-    let x_81 : bool = x_81_phi;
-    if (!(x_81)) {
-      break;
-    }
-
-    continuing {
-      let x_85 : i32 = i;
-      i = (x_85 + 1);
-    }
-  }
-  let x_87 : mat2x3<f32> = m23;
-  let x_89 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_92 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_95 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_98 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_101 : i32 = x_10.x_GLF_uniform_int_values[1];
-  let x_104 : i32 = x_10.x_GLF_uniform_int_values[0];
-  let x_108 : mat2x3<f32> = mat2x3<f32>(vec3<f32>(f32(x_89), f32(x_92), f32(x_95)), vec3<f32>(f32(x_98), f32(x_101), f32(x_104)));
-  if ((all((x_87[0u] == x_108[0u])) && all((x_87[1u] == x_108[1u])))) {
-    let x_122 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_125 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_128 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_122), f32(x_125), f32(x_128), f32(x_131));
-  } else {
-    let x_135 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_136 : f32 = f32(x_135);
-    x_GLF_color = vec4<f32>(x_136, x_136, x_136, x_136);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b82d8ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[3].x);
-  a = x_27;
-  i = 0;
-  {
-    for(; (i < 3); i = (i + 1)) {
-      const int x_35 = i;
-      const int x_37 = asint(x_6[1].x);
-      if ((x_35 == x_37)) {
-        a = (a + 1);
-      } else {
-        a = (a / i);
-      }
-    }
-  }
-  const int x_49 = a;
-  const int x_51 = asint(x_6[2].x);
-  if ((x_49 == x_51)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const int x_60 = asint(x_6[1].x);
-    const int x_63 = asint(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_57), float(x_60), float(x_63), float(x_66));
-  } else {
-    const int x_70 = asint(x_6[1].x);
-    const float x_71 = float(x_70);
-    x_GLF_color = float4(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-O:\src\chrome\src\third_party\dawn\third_party\tint\test\Shader@0x000001481B9B0CA0(19,14-18): error X4010: Unsigned integer divide by zero
-O:\src\chrome\src\third_party\dawn\third_party\tint\test\Shader@0x000001481B9B0CA0(19,14-18): warning X3556: integer divides may be much slower, try using uints if possible.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.msl
deleted file mode 100644
index b3f557f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  a = x_27;
-  i = 0;
-  while (true) {
-    int const x_32 = i;
-    if ((x_32 < 3)) {
-    } else {
-      break;
-    }
-    int const x_35 = i;
-    int const x_37 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_35 == x_37)) {
-      int const x_42 = a;
-      a = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-    } else {
-      int const x_44 = a;
-      int const x_45 = i;
-      a = (x_44 / x_45);
-    }
-    {
-      int const x_47 = i;
-      i = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-    }
-  }
-  int const x_49 = a;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_49 == x_51)) {
-    int const x_57 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_66 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_57), float(x_60), float(x_63), float(x_66));
-  } else {
-    int const x_70 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_71 = float(x_70);
-    *(tint_symbol_3) = float4(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 92b4a68..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,149 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 90
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %79 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %27 = OpLoad %int %26
-               OpStore %a %27
-               OpStore %i %int_0
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %i
-         %34 = OpSLessThan %bool %33 %int_3
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-               OpBranch %36
-         %38 = OpLabel
-               OpBranch %30
-         %36 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpIEqual %bool %39 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-         %47 = OpLoad %int %a
-         %48 = OpIAdd %int %47 %int_1
-               OpStore %a %48
-               OpBranch %44
-         %46 = OpLabel
-         %49 = OpLoad %int %a
-         %50 = OpLoad %int %i
-         %51 = OpSDiv %int %49 %50
-               OpStore %a %51
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %52 = OpLoad %int %i
-         %53 = OpIAdd %int %52 %int_1
-               OpStore %i %53
-               OpBranch %29
-         %30 = OpLabel
-         %54 = OpLoad %int %a
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %57 = OpLoad %int %56
-         %58 = OpIEqual %bool %54 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %63
-         %71 = OpConvertSToF %float %65
-         %72 = OpConvertSToF %float %67
-         %73 = OpConvertSToF %float %69
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-               OpStore %x_GLF_color %74
-               OpBranch %59
-         %61 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %76
-         %78 = OpCompositeConstruct %v4float %77 %77 %77 %77
-               OpStore %x_GLF_color %78
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %79
-         %82 = OpLabel
-         %83 = OpFunctionCall %void %main_1
-         %84 = OpLoad %v4float %x_GLF_color
-         %85 = OpCompositeConstruct %main_out %84
-               OpReturnValue %85
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %87 = OpLabel
-         %88 = OpFunctionCall %main_out %main_inner
-         %89 = OpCompositeExtract %v4float %88 0
-               OpStore %x_GLF_color_1_1 %89
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5615de9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[3];
-  a = x_27;
-  i = 0;
-  loop {
-    let x_32 : i32 = i;
-    if ((x_32 < 3)) {
-    } else {
-      break;
-    }
-    let x_35 : i32 = i;
-    let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_35 == x_37)) {
-      let x_42 : i32 = a;
-      a = (x_42 + 1);
-    } else {
-      let x_44 : i32 = a;
-      let x_45 : i32 = i;
-      a = (x_44 / x_45);
-    }
-
-    continuing {
-      let x_47 : i32 = i;
-      i = (x_47 + 1);
-    }
-  }
-  let x_49 : i32 = a;
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[2];
-  if ((x_49 == x_51)) {
-    let x_57 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_66 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_57), f32(x_60), f32(x_63), f32(x_66));
-  } else {
-    let x_70 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_71 : f32 = f32(x_70);
-    x_GLF_color = vec4<f32>(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c98ef25..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[3].x);
-  a = x_27;
-  i = 0;
-  {
-    for(; (i < 3); i = (i + 1)) {
-      const int x_35 = i;
-      const int x_37 = asint(x_6[1].x);
-      if ((x_35 == x_37)) {
-        a = (a + 1);
-      } else {
-        a = (a / i);
-      }
-    }
-  }
-  const int x_49 = a;
-  const int x_51 = asint(x_6[2].x);
-  if ((x_49 == x_51)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const int x_60 = asint(x_6[1].x);
-    const int x_63 = asint(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_57), float(x_60), float(x_63), float(x_66));
-  } else {
-    const int x_70 = asint(x_6[1].x);
-    const float x_71 = float(x_70);
-    x_GLF_color = float4(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-O:\src\chrome\src\third_party\dawn\third_party\tint\test\Shader@0x0000029A80398B60(19,14-18): error X4010: Unsigned integer divide by zero
-O:\src\chrome\src\third_party\dawn\third_party\tint\test\Shader@0x0000029A80398B60(19,14-18): warning X3556: integer divides may be much slower, try using uints if possible.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.msl
deleted file mode 100644
index b3f557f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  a = x_27;
-  i = 0;
-  while (true) {
-    int const x_32 = i;
-    if ((x_32 < 3)) {
-    } else {
-      break;
-    }
-    int const x_35 = i;
-    int const x_37 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_35 == x_37)) {
-      int const x_42 = a;
-      a = as_type<int>((as_type<uint>(x_42) + as_type<uint>(1)));
-    } else {
-      int const x_44 = a;
-      int const x_45 = i;
-      a = (x_44 / x_45);
-    }
-    {
-      int const x_47 = i;
-      i = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-    }
-  }
-  int const x_49 = a;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_49 == x_51)) {
-    int const x_57 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_66 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_57), float(x_60), float(x_63), float(x_66));
-  } else {
-    int const x_70 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_71 = float(x_70);
-    *(tint_symbol_3) = float4(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 92b4a68..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,149 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 90
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %79 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %27 = OpLoad %int %26
-               OpStore %a %27
-               OpStore %i %int_0
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %i
-         %34 = OpSLessThan %bool %33 %int_3
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-               OpBranch %36
-         %38 = OpLabel
-               OpBranch %30
-         %36 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpIEqual %bool %39 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-         %47 = OpLoad %int %a
-         %48 = OpIAdd %int %47 %int_1
-               OpStore %a %48
-               OpBranch %44
-         %46 = OpLabel
-         %49 = OpLoad %int %a
-         %50 = OpLoad %int %i
-         %51 = OpSDiv %int %49 %50
-               OpStore %a %51
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %52 = OpLoad %int %i
-         %53 = OpIAdd %int %52 %int_1
-               OpStore %i %53
-               OpBranch %29
-         %30 = OpLabel
-         %54 = OpLoad %int %a
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %57 = OpLoad %int %56
-         %58 = OpIEqual %bool %54 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %63
-         %71 = OpConvertSToF %float %65
-         %72 = OpConvertSToF %float %67
-         %73 = OpConvertSToF %float %69
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-               OpStore %x_GLF_color %74
-               OpBranch %59
-         %61 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %76
-         %78 = OpCompositeConstruct %v4float %77 %77 %77 %77
-               OpStore %x_GLF_color %78
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %79
-         %82 = OpLabel
-         %83 = OpFunctionCall %void %main_1
-         %84 = OpLoad %v4float %x_GLF_color
-         %85 = OpCompositeConstruct %main_out %84
-               OpReturnValue %85
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %87 = OpLabel
-         %88 = OpFunctionCall %main_out %main_inner
-         %89 = OpCompositeExtract %v4float %88 0
-               OpStore %x_GLF_color_1_1 %89
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5615de9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-increment-or-divide-by-loop-index/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[3];
-  a = x_27;
-  i = 0;
-  loop {
-    let x_32 : i32 = i;
-    if ((x_32 < 3)) {
-    } else {
-      break;
-    }
-    let x_35 : i32 = i;
-    let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_35 == x_37)) {
-      let x_42 : i32 = a;
-      a = (x_42 + 1);
-    } else {
-      let x_44 : i32 = a;
-      let x_45 : i32 = i;
-      a = (x_44 / x_45);
-    }
-
-    continuing {
-      let x_47 : i32 = i;
-      i = (x_47 + 1);
-    }
-  }
-  let x_49 : i32 = a;
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[2];
-  if ((x_49 == x_51)) {
-    let x_57 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_66 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_57), f32(x_60), f32(x_63), f32(x_66));
-  } else {
-    let x_70 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_71 : f32 = f32(x_70);
-    x_GLF_color = vec4<f32>(x_71, x_71, x_71, x_71);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f962523..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const int x_25 = asint(x_6[2].x);
-  a = x_25;
-  while (true) {
-    if ((a >= 0)) {
-    } else {
-      break;
-    }
-    a = ((a / 2) - 1);
-  }
-  const int x_36 = a;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_36 == -(x_38))) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_48 = asint(x_6[1].x);
-    const int x_51 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    const int x_58 = asint(x_6[1].x);
-    const float x_59 = float(x_58);
-    x_GLF_color = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.msl
deleted file mode 100644
index a3c7978..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_25;
-  while (true) {
-    int const x_30 = a;
-    if ((x_30 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_33 = a;
-    a = as_type<int>((as_type<uint>((x_33 / 2)) - as_type<uint>(1)));
-  }
-  int const x_36 = a;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_36 == tint_unary_minus(x_38))) {
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_54 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_59 = float(x_58);
-    *(tint_symbol_3) = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8bab8ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %26 = OpLoad %int %25
-               OpStore %a %26
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %31 = OpLoad %int %a
-         %33 = OpSGreaterThanEqual %bool %31 %int_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %28
-         %35 = OpLabel
-         %38 = OpLoad %int %a
-         %39 = OpSDiv %int %38 %int_2
-         %41 = OpISub %int %39 %int_1
-               OpStore %a %41
-               OpBranch %29
-         %29 = OpLabel
-               OpBranch %27
-         %28 = OpLabel
-         %42 = OpLoad %int %a
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpSNegate %int %44
-         %46 = OpIEqual %bool %42 %45
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpConvertSToF %float %51
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %47
-         %49 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %64
-         %66 = OpCompositeConstruct %v4float %65 %65 %65 %65
-               OpStore %x_GLF_color %66
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5a6c993..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,50 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_25;
-  loop {
-    let x_30 : i32 = a;
-    if ((x_30 >= 0)) {
-    } else {
-      break;
-    }
-    let x_33 : i32 = a;
-    a = ((x_33 / 2) - 1);
-  }
-  let x_36 : i32 = a;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_36 == -(x_38))) {
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_54 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_45), f32(x_48), f32(x_51), f32(x_54));
-  } else {
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_59 : f32 = f32(x_58);
-    x_GLF_color = vec4<f32>(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f962523..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const int x_25 = asint(x_6[2].x);
-  a = x_25;
-  while (true) {
-    if ((a >= 0)) {
-    } else {
-      break;
-    }
-    a = ((a / 2) - 1);
-  }
-  const int x_36 = a;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_36 == -(x_38))) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_48 = asint(x_6[1].x);
-    const int x_51 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    const int x_58 = asint(x_6[1].x);
-    const float x_59 = float(x_58);
-    x_GLF_color = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.msl
deleted file mode 100644
index a3c7978..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_25;
-  while (true) {
-    int const x_30 = a;
-    if ((x_30 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_33 = a;
-    a = as_type<int>((as_type<uint>((x_33 / 2)) - as_type<uint>(1)));
-  }
-  int const x_36 = a;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_36 == tint_unary_minus(x_38))) {
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_54 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  } else {
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_59 = float(x_58);
-    *(tint_symbol_3) = float4(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8bab8ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %26 = OpLoad %int %25
-               OpStore %a %26
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %31 = OpLoad %int %a
-         %33 = OpSGreaterThanEqual %bool %31 %int_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %28
-         %35 = OpLabel
-         %38 = OpLoad %int %a
-         %39 = OpSDiv %int %38 %int_2
-         %41 = OpISub %int %39 %int_1
-               OpStore %a %41
-               OpBranch %29
-         %29 = OpLabel
-               OpBranch %27
-         %28 = OpLabel
-         %42 = OpLoad %int %a
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpSNegate %int %44
-         %46 = OpIEqual %bool %42 %45
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %57 = OpLoad %int %56
-         %58 = OpConvertSToF %float %51
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %47
-         %49 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpConvertSToF %float %64
-         %66 = OpCompositeConstruct %v4float %65 %65 %65 %65
-               OpStore %x_GLF_color %66
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5a6c993..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-integer-half-minus-one/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,50 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_25;
-  loop {
-    let x_30 : i32 = a;
-    if ((x_30 >= 0)) {
-    } else {
-      break;
-    }
-    let x_33 : i32 = a;
-    a = ((x_33 / 2) - 1);
-  }
-  let x_36 : i32 = a;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_36 == -(x_38))) {
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_54 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_45), f32(x_48), f32(x_51), f32(x_54));
-  } else {
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_59 : f32 = f32(x_58);
-    x_GLF_color = vec4<f32>(x_59, x_59, x_59, x_59);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3986674..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_26 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_26;
-  const int x_28 = asint(x_6[1].x);
-  const float x_29 = float(x_28);
-  x_GLF_color = float4(x_29, x_29, x_29, x_29);
-  while (true) {
-    const int x_36 = asint(x_6[2].x);
-    if (((x_36 == a) != true)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_42 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_45 = asint(x_6[1].x);
-    const int x_48 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_51 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.msl
deleted file mode 100644
index 76563fc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_26;
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_29 = float(x_28);
-  *(tint_symbol_3) = float4(x_29, x_29, x_29, x_29);
-  while (true) {
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_37 = a;
-    if (((x_36 == x_37) != true)) {
-    } else {
-      break;
-    }
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2f91910..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %26 = OpLoad %int %25
-               OpStore %a %26
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %29 = OpLoad %int %28
-         %30 = OpConvertSToF %float %29
-         %31 = OpCompositeConstruct %v4float %30 %30 %30 %30
-               OpStore %x_GLF_color %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %38 = OpLoad %int %37
-         %39 = OpLoad %int %a
-         %40 = OpIEqual %bool %38 %39
-         %43 = OpLogicalNotEqual %bool %40 %true
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %33
-         %44 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpConvertSToF %float %48
-         %56 = OpConvertSToF %float %50
-         %57 = OpConvertSToF %float %52
-         %58 = OpConvertSToF %float %54
-         %59 = OpCompositeConstruct %v4float %55 %56 %57 %58
-               OpStore %x_GLF_color %59
-               OpBranch %33
-         %34 = OpLabel
-               OpBranch %32
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a11c846..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_26;
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_29 : f32 = f32(x_28);
-  x_GLF_color = vec4<f32>(x_29, x_29, x_29, x_29);
-  loop {
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_37 : i32 = a;
-    if (((x_36 == x_37) != true)) {
-    } else {
-      break;
-    }
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3986674..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_26 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = x_26;
-  const int x_28 = asint(x_6[1].x);
-  const float x_29 = float(x_28);
-  x_GLF_color = float4(x_29, x_29, x_29, x_29);
-  while (true) {
-    const int x_36 = asint(x_6[2].x);
-    if (((x_36 == a) != true)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_42 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_45 = asint(x_6[1].x);
-    const int x_48 = asint(x_6[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_51 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.msl
deleted file mode 100644
index 76563fc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = x_26;
-  int const x_28 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_29 = float(x_28);
-  *(tint_symbol_3) = float4(x_29, x_29, x_29, x_29);
-  while (true) {
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_37 = a;
-    if (((x_36 == x_37) != true)) {
-    } else {
-      break;
-    }
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_51 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_42), float(x_45), float(x_48), float(x_51));
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2f91910..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %26 = OpLoad %int %25
-               OpStore %a %26
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %29 = OpLoad %int %28
-         %30 = OpConvertSToF %float %29
-         %31 = OpCompositeConstruct %v4float %30 %30 %30 %30
-               OpStore %x_GLF_color %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %38 = OpLoad %int %37
-         %39 = OpLoad %int %a
-         %40 = OpIEqual %bool %38 %39
-         %43 = OpLogicalNotEqual %bool %40 %true
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %33
-         %44 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpConvertSToF %float %48
-         %56 = OpConvertSToF %float %50
-         %57 = OpConvertSToF %float %52
-         %58 = OpConvertSToF %float %54
-         %59 = OpCompositeConstruct %v4float %55 %56 %57 %58
-               OpStore %x_GLF_color %59
-               OpBranch %33
-         %34 = OpLabel
-               OpBranch %32
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a11c846..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-logical-xor/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = x_26;
-  let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_29 : f32 = f32(x_28);
-  x_GLF_color = vec4<f32>(x_29, x_29, x_29, x_29);
-  loop {
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_37 : i32 = a;
-    if (((x_36 == x_37) != true)) {
-    } else {
-      break;
-    }
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_42), f32(x_45), f32(x_48), f32(x_51));
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3455e1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,112 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_GLF_global_loop_count = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_27 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  switch(x_27) {
-    case 0: {
-      if (true) {
-        const int x_34 = asint(x_6[1].x);
-        const float x_35 = float(x_34);
-        x_GLF_color = float4(x_35, x_35, x_35, x_35);
-        return;
-      }
-      /* fallthrough */
-      {
-        if (true) {
-          const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-          const int x_40 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-          const int x_43 = asint(x_6[1].x);
-          const int x_46 = asint(x_6[1].x);
-          const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-          const int x_49 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-          x_GLF_color = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-          if (false) {
-            const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-            const int x_55 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-            const float x_56 = float(x_55);
-            x_GLF_color = float4(x_56, x_56, x_56, x_56);
-            while (true) {
-              x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-              if (false) {
-                return;
-              }
-              if (true) {
-                return;
-              }
-              {
-                if ((x_GLF_global_loop_count < 100)) {
-                } else {
-                  break;
-                }
-              }
-            }
-          }
-        }
-      }
-      break;
-    }
-    case 1: {
-      if (true) {
-        const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-        const int x_40 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-        const int x_43 = asint(x_6[1].x);
-        const int x_46 = asint(x_6[1].x);
-        const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-        const int x_49 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-        x_GLF_color = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-        if (false) {
-          const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-          const int x_55 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-          const float x_56 = float(x_55);
-          x_GLF_color = float4(x_56, x_56, x_56, x_56);
-          while (true) {
-            x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-            if (false) {
-              return;
-            }
-            if (true) {
-              return;
-            }
-            {
-              if ((x_GLF_global_loop_count < 100)) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.msl
deleted file mode 100644
index 210ab97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,87 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  switch(x_27) {
-    case 0: {
-      if (true) {
-        int const x_34 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        float const x_35 = float(x_34);
-        *(tint_symbol_4) = float4(x_35, x_35, x_35, x_35);
-        return;
-      }
-      /* fallthrough */
-    }
-    case 1: {
-      if (true) {
-        int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-        int const x_43 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        int const x_46 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        int const x_49 = x_6.x_GLF_uniform_int_values.arr[0].el;
-        *(tint_symbol_4) = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-        if (false) {
-          int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-          float const x_56 = float(x_55);
-          *(tint_symbol_4) = float4(x_56, x_56, x_56, x_56);
-          while (true) {
-            int const x_62 = *(tint_symbol_3);
-            *(tint_symbol_3) = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-            if (false) {
-              return;
-            }
-            if (true) {
-              return;
-            }
-            {
-              int const x_68 = *(tint_symbol_3);
-              if ((x_68 < 100)) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 102efd2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,150 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 86
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-    %int_100 = OpConstant %int 100
-   %main_out = OpTypeStruct %v4float
-         %75 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-               OpStore %x_GLF_global_loop_count %int_0
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %26 = OpLoad %int %25
-               OpSelectionMerge %27 None
-               OpSwitch %26 %28 0 %29 1 %30
-         %29 = OpLabel
-               OpSelectionMerge %33 None
-               OpBranchConditional %true %34 %33
-         %34 = OpLabel
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %37 = OpLoad %int %36
-         %38 = OpConvertSToF %float %37
-         %39 = OpCompositeConstruct %v4float %38 %38 %38 %38
-               OpStore %x_GLF_color %39
-               OpReturn
-         %33 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-               OpSelectionMerge %40 None
-               OpBranchConditional %true %41 %40
-         %41 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpConvertSToF %float %43
-         %51 = OpConvertSToF %float %45
-         %52 = OpConvertSToF %float %47
-         %53 = OpConvertSToF %float %49
-         %54 = OpCompositeConstruct %v4float %50 %51 %52 %53
-               OpStore %x_GLF_color %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %false %57 %56
-         %57 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpConvertSToF %float %59
-         %61 = OpCompositeConstruct %v4float %60 %60 %60 %60
-               OpStore %x_GLF_color %61
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %66 = OpLoad %int %x_GLF_global_loop_count
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %x_GLF_global_loop_count %67
-               OpSelectionMerge %68 None
-               OpBranchConditional %false %69 %68
-         %69 = OpLabel
-               OpReturn
-         %68 = OpLabel
-               OpSelectionMerge %70 None
-               OpBranchConditional %true %71 %70
-         %71 = OpLabel
-               OpReturn
-         %70 = OpLabel
-               OpBranch %64
-         %64 = OpLabel
-         %72 = OpLoad %int %x_GLF_global_loop_count
-         %74 = OpSLessThan %bool %72 %int_100
-               OpBranchConditional %74 %62 %63
-         %63 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-               OpBranch %27
-         %28 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %75
-         %78 = OpLabel
-         %79 = OpFunctionCall %void %main_1
-         %80 = OpLoad %v4float %x_GLF_color
-         %81 = OpCompositeConstruct %main_out %80
-               OpReturnValue %81
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %83 = OpLabel
-         %84 = OpFunctionCall %main_out %main_inner
-         %85 = OpCompositeExtract %v4float %84 0
-               OpStore %x_GLF_color_1_1 %85
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 7b901c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  x_GLF_global_loop_count = 0;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[0];
-  switch(x_27) {
-    case 0: {
-      if (true) {
-        let x_34 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_35 : f32 = f32(x_34);
-        x_GLF_color = vec4<f32>(x_35, x_35, x_35, x_35);
-        return;
-      }
-      fallthrough;
-    }
-    case 1: {
-      if (true) {
-        let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-        let x_43 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_46 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
-        x_GLF_color = vec4<f32>(f32(x_40), f32(x_43), f32(x_46), f32(x_49));
-        if (false) {
-          let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-          let x_56 : f32 = f32(x_55);
-          x_GLF_color = vec4<f32>(x_56, x_56, x_56, x_56);
-          loop {
-            let x_62 : i32 = x_GLF_global_loop_count;
-            x_GLF_global_loop_count = (x_62 + 1);
-            if (false) {
-              return;
-            }
-            if (true) {
-              return;
-            }
-
-            continuing {
-              let x_68 : i32 = x_GLF_global_loop_count;
-              if ((x_68 < 100)) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3455e1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,112 +0,0 @@
-static int x_GLF_global_loop_count = 0;
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_GLF_global_loop_count = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_27 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  switch(x_27) {
-    case 0: {
-      if (true) {
-        const int x_34 = asint(x_6[1].x);
-        const float x_35 = float(x_34);
-        x_GLF_color = float4(x_35, x_35, x_35, x_35);
-        return;
-      }
-      /* fallthrough */
-      {
-        if (true) {
-          const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-          const int x_40 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-          const int x_43 = asint(x_6[1].x);
-          const int x_46 = asint(x_6[1].x);
-          const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-          const int x_49 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-          x_GLF_color = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-          if (false) {
-            const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-            const int x_55 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-            const float x_56 = float(x_55);
-            x_GLF_color = float4(x_56, x_56, x_56, x_56);
-            while (true) {
-              x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-              if (false) {
-                return;
-              }
-              if (true) {
-                return;
-              }
-              {
-                if ((x_GLF_global_loop_count < 100)) {
-                } else {
-                  break;
-                }
-              }
-            }
-          }
-        }
-      }
-      break;
-    }
-    case 1: {
-      if (true) {
-        const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-        const int x_40 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-        const int x_43 = asint(x_6[1].x);
-        const int x_46 = asint(x_6[1].x);
-        const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-        const int x_49 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-        x_GLF_color = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-        if (false) {
-          const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-          const int x_55 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-          const float x_56 = float(x_55);
-          x_GLF_color = float4(x_56, x_56, x_56, x_56);
-          while (true) {
-            x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
-            if (false) {
-              return;
-            }
-            if (true) {
-              return;
-            }
-            {
-              if ((x_GLF_global_loop_count < 100)) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.msl
deleted file mode 100644
index 210ab97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,87 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  switch(x_27) {
-    case 0: {
-      if (true) {
-        int const x_34 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        float const x_35 = float(x_34);
-        *(tint_symbol_4) = float4(x_35, x_35, x_35, x_35);
-        return;
-      }
-      /* fallthrough */
-    }
-    case 1: {
-      if (true) {
-        int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-        int const x_43 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        int const x_46 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        int const x_49 = x_6.x_GLF_uniform_int_values.arr[0].el;
-        *(tint_symbol_4) = float4(float(x_40), float(x_43), float(x_46), float(x_49));
-        if (false) {
-          int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-          float const x_56 = float(x_55);
-          *(tint_symbol_4) = float4(x_56, x_56, x_56, x_56);
-          while (true) {
-            int const x_62 = *(tint_symbol_3);
-            *(tint_symbol_3) = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-            if (false) {
-              return;
-            }
-            if (true) {
-              return;
-            }
-            {
-              int const x_68 = *(tint_symbol_3);
-              if ((x_68 < 100)) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 102efd2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,150 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 86
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-    %int_100 = OpConstant %int 100
-   %main_out = OpTypeStruct %v4float
-         %75 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-               OpStore %x_GLF_global_loop_count %int_0
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %26 = OpLoad %int %25
-               OpSelectionMerge %27 None
-               OpSwitch %26 %28 0 %29 1 %30
-         %29 = OpLabel
-               OpSelectionMerge %33 None
-               OpBranchConditional %true %34 %33
-         %34 = OpLabel
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %37 = OpLoad %int %36
-         %38 = OpConvertSToF %float %37
-         %39 = OpCompositeConstruct %v4float %38 %38 %38 %38
-               OpStore %x_GLF_color %39
-               OpReturn
-         %33 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-               OpSelectionMerge %40 None
-               OpBranchConditional %true %41 %40
-         %41 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpConvertSToF %float %43
-         %51 = OpConvertSToF %float %45
-         %52 = OpConvertSToF %float %47
-         %53 = OpConvertSToF %float %49
-         %54 = OpCompositeConstruct %v4float %50 %51 %52 %53
-               OpStore %x_GLF_color %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %false %57 %56
-         %57 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpConvertSToF %float %59
-         %61 = OpCompositeConstruct %v4float %60 %60 %60 %60
-               OpStore %x_GLF_color %61
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %66 = OpLoad %int %x_GLF_global_loop_count
-         %67 = OpIAdd %int %66 %int_1
-               OpStore %x_GLF_global_loop_count %67
-               OpSelectionMerge %68 None
-               OpBranchConditional %false %69 %68
-         %69 = OpLabel
-               OpReturn
-         %68 = OpLabel
-               OpSelectionMerge %70 None
-               OpBranchConditional %true %71 %70
-         %71 = OpLabel
-               OpReturn
-         %70 = OpLabel
-               OpBranch %64
-         %64 = OpLabel
-         %72 = OpLoad %int %x_GLF_global_loop_count
-         %74 = OpSLessThan %bool %72 %int_100
-               OpBranchConditional %74 %62 %63
-         %63 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-               OpBranch %27
-         %28 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %75
-         %78 = OpLabel
-         %79 = OpFunctionCall %void %main_1
-         %80 = OpLoad %v4float %x_GLF_color
-         %81 = OpCompositeConstruct %main_out %80
-               OpReturnValue %81
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %83 = OpLabel
-         %84 = OpFunctionCall %main_out %main_inner
-         %85 = OpCompositeExtract %v4float %84 0
-               OpStore %x_GLF_color_1_1 %85
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7b901c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-returns-behind-true-and-false/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  x_GLF_global_loop_count = 0;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[0];
-  switch(x_27) {
-    case 0: {
-      if (true) {
-        let x_34 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_35 : f32 = f32(x_34);
-        x_GLF_color = vec4<f32>(x_35, x_35, x_35, x_35);
-        return;
-      }
-      fallthrough;
-    }
-    case 1: {
-      if (true) {
-        let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-        let x_43 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_46 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
-        x_GLF_color = vec4<f32>(f32(x_40), f32(x_43), f32(x_46), f32(x_49));
-        if (false) {
-          let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-          let x_56 : f32 = f32(x_55);
-          x_GLF_color = vec4<f32>(x_56, x_56, x_56, x_56);
-          loop {
-            let x_62 : i32 = x_GLF_global_loop_count;
-            x_GLF_global_loop_count = (x_62 + 1);
-            if (false) {
-              return;
-            }
-            if (true) {
-              return;
-            }
-
-            continuing {
-              let x_68 : i32 = x_GLF_global_loop_count;
-              if ((x_68 < 100)) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-      }
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3188e95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,94 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float arr[5] = (float[5])0;
-  int i = 0;
-  int j = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_38 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_46 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const float tint_symbol_3[5] = {x_38, x_40, x_42, x_44, x_46};
-  arr = tint_symbol_3;
-  const int x_49 = asint(x_9[1].x);
-  i = x_49;
-  j = 0;
-  while (true) {
-    const int x_54 = i;
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_9[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    if ((j < -1)) {
-      break;
-    }
-    const int x_63 = j;
-    const float x_65 = arr[x_63];
-    arr[x_63] = (x_65 + 1.0f);
-    {
-      i = (i + 1);
-      j = (j + 1);
-    }
-  }
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const float x_73 = asfloat(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  const float x_75 = asfloat(x_6[1].x);
-  const float x_77 = asfloat(x_6[1].x);
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const float x_79 = asfloat(x_6[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  x_GLF_color = float4(x_73, x_75, x_77, x_79);
-  const int x_82 = asint(x_9[1].x);
-  i = x_82;
-  while (true) {
-    const int x_87 = i;
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const int x_89 = asint(x_9[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    if ((x_87 < x_89)) {
-    } else {
-      break;
-    }
-    const float x_94 = arr[i];
-    if (!((x_94 == 2.0f))) {
-      const float x_99 = asfloat(x_6[1].x);
-      x_GLF_color = float4(x_99, x_99, x_99, x_99);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.msl
deleted file mode 100644
index cd368d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,110 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[5];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 arr = {};
-  int i = 0;
-  int j = 0;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_46 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_38, x_40, x_42, x_44, x_46}};
-  arr = tint_symbol_2;
-  int const x_49 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_49;
-  j = 0;
-  while (true) {
-    int const x_54 = i;
-    int const x_56 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    int const x_59 = j;
-    if ((x_59 < -1)) {
-      break;
-    }
-    int const x_63 = j;
-    float const x_65 = arr.arr[x_63];
-    arr.arr[x_63] = (x_65 + 1.0f);
-    {
-      int const x_68 = i;
-      i = as_type<int>((as_type<uint>(x_68) + as_type<uint>(1)));
-      int const x_70 = j;
-      j = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-    }
-  }
-  float const x_73 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_75 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_77 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_79 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  *(tint_symbol_4) = float4(x_73, x_75, x_77, x_79);
-  int const x_82 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_82;
-  while (true) {
-    int const x_87 = i;
-    int const x_89 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_87 < x_89)) {
-    } else {
-      break;
-    }
-    int const x_92 = i;
-    float const x_94 = arr.arr[x_92];
-    if (!((x_94 == 2.0f))) {
-      float const x_99 = x_6.x_GLF_uniform_float_values.arr[1].el;
-      *(tint_symbol_4) = float4(x_99, x_99, x_99, x_99);
-    }
-    {
-      int const x_101 = i;
-      i = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1d8dbcd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,204 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 124
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_float_uint_5 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-%_ptr_Function__arr_float_uint_5 = OpTypePointer Function %_arr_float_uint_5
-         %27 = OpConstantNull %_arr_float_uint_5
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-   %main_out = OpTypeStruct %v4float
-        %113 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_float_uint_5 Function %27
-          %i = OpVariable %_ptr_Function_int Function %30
-          %j = OpVariable %_ptr_Function_int Function %30
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %36 = OpLoad %float %35
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %45 = OpCompositeConstruct %_arr_float_uint_5 %36 %38 %40 %42 %44
-               OpStore %arr %45
-         %48 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %49 = OpLoad %int %48
-               OpStore %i %49
-               OpStore %j %int_0
-               OpBranch %50
-         %50 = OpLabel
-               OpLoopMerge %51 %52 None
-               OpBranch %53
-         %53 = OpLabel
-         %54 = OpLoad %int %i
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpSLessThan %bool %54 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %61
-         %60 = OpLabel
-               OpBranch %59
-         %61 = OpLabel
-               OpBranch %51
-         %59 = OpLabel
-         %62 = OpLoad %int %j
-         %64 = OpSLessThan %bool %62 %int_n1
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-               OpBranch %51
-         %65 = OpLabel
-         %67 = OpLoad %int %j
-         %69 = OpAccessChain %_ptr_Function_float %arr %67
-         %70 = OpLoad %float %69
-         %71 = OpAccessChain %_ptr_Function_float %arr %67
-         %73 = OpFAdd %float %70 %float_1
-               OpStore %71 %73
-               OpBranch %52
-         %52 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-         %76 = OpLoad %int %j
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %j %77
-               OpBranch %50
-         %51 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %81 = OpLoad %float %80
-         %82 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %83 = OpLoad %float %82
-         %84 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %85 = OpLoad %float %84
-         %86 = OpCompositeConstruct %v4float %79 %81 %83 %85
-               OpStore %x_GLF_color %86
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %88 = OpLoad %int %87
-               OpStore %i %88
-               OpBranch %89
-         %89 = OpLabel
-               OpLoopMerge %90 %91 None
-               OpBranch %92
-         %92 = OpLabel
-         %93 = OpLoad %int %i
-         %94 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %95 = OpLoad %int %94
-         %96 = OpSLessThan %bool %93 %95
-               OpSelectionMerge %97 None
-               OpBranchConditional %96 %98 %99
-         %98 = OpLabel
-               OpBranch %97
-         %99 = OpLabel
-               OpBranch %90
-         %97 = OpLabel
-        %100 = OpLoad %int %i
-        %101 = OpAccessChain %_ptr_Function_float %arr %100
-        %102 = OpLoad %float %101
-        %105 = OpFOrdEqual %bool %102 %float_2
-        %103 = OpLogicalNot %bool %105
-               OpSelectionMerge %106 None
-               OpBranchConditional %103 %107 %106
-        %107 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %109 = OpLoad %float %108
-        %110 = OpCompositeConstruct %v4float %109 %109 %109 %109
-               OpStore %x_GLF_color %110
-               OpBranch %106
-        %106 = OpLabel
-               OpBranch %91
-         %91 = OpLabel
-        %111 = OpLoad %int %i
-        %112 = OpIAdd %int %111 %int_1
-               OpStore %i %112
-               OpBranch %89
-         %90 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %113
-        %116 = OpLabel
-        %117 = OpFunctionCall %void %main_1
-        %118 = OpLoad %v4float %x_GLF_color
-        %119 = OpCompositeConstruct %main_out %118
-               OpReturnValue %119
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %121 = OpLabel
-        %122 = OpFunctionCall %main_out %main_inner
-        %123 = OpCompositeExtract %v4float %122 0
-               OpStore %x_GLF_color_1_1 %123
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9bd8ed5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,94 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<f32, 5>;
-  var i : i32;
-  var j : i32;
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_46 : f32 = x_6.x_GLF_uniform_float_values[0];
-  arr = array<f32, 5>(x_38, x_40, x_42, x_44, x_46);
-  let x_49 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_49;
-  j = 0;
-  loop {
-    let x_54 : i32 = i;
-    let x_56 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    let x_59 : i32 = j;
-    if ((x_59 < -1)) {
-      break;
-    }
-    let x_63 : i32 = j;
-    let x_65 : f32 = arr[x_63];
-    arr[x_63] = (x_65 + 1.0);
-
-    continuing {
-      let x_68 : i32 = i;
-      i = (x_68 + 1);
-      let x_70 : i32 = j;
-      j = (x_70 + 1);
-    }
-  }
-  let x_73 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_75 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_77 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_79 : f32 = x_6.x_GLF_uniform_float_values[0];
-  x_GLF_color = vec4<f32>(x_73, x_75, x_77, x_79);
-  let x_82 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_82;
-  loop {
-    let x_87 : i32 = i;
-    let x_89 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_87 < x_89)) {
-    } else {
-      break;
-    }
-    let x_92 : i32 = i;
-    let x_94 : f32 = arr[x_92];
-    if (!((x_94 == 2.0))) {
-      let x_99 : f32 = x_6.x_GLF_uniform_float_values[1];
-      x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
-    }
-
-    continuing {
-      let x_101 : i32 = i;
-      i = (x_101 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3188e95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,94 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float arr[5] = (float[5])0;
-  int i = 0;
-  int j = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_38 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_46 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const float tint_symbol_3[5] = {x_38, x_40, x_42, x_44, x_46};
-  arr = tint_symbol_3;
-  const int x_49 = asint(x_9[1].x);
-  i = x_49;
-  j = 0;
-  while (true) {
-    const int x_54 = i;
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_9[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    if ((j < -1)) {
-      break;
-    }
-    const int x_63 = j;
-    const float x_65 = arr[x_63];
-    arr[x_63] = (x_65 + 1.0f);
-    {
-      i = (i + 1);
-      j = (j + 1);
-    }
-  }
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const float x_73 = asfloat(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  const float x_75 = asfloat(x_6[1].x);
-  const float x_77 = asfloat(x_6[1].x);
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const float x_79 = asfloat(x_6[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  x_GLF_color = float4(x_73, x_75, x_77, x_79);
-  const int x_82 = asint(x_9[1].x);
-  i = x_82;
-  while (true) {
-    const int x_87 = i;
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const int x_89 = asint(x_9[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    if ((x_87 < x_89)) {
-    } else {
-      break;
-    }
-    const float x_94 = arr[i];
-    if (!((x_94 == 2.0f))) {
-      const float x_99 = asfloat(x_6[1].x);
-      x_GLF_color = float4(x_99, x_99, x_99, x_99);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.msl
deleted file mode 100644
index cd368d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,110 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[5];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  tint_array_wrapper_2 arr = {};
-  int i = 0;
-  int j = 0;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_46 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_38, x_40, x_42, x_44, x_46}};
-  arr = tint_symbol_2;
-  int const x_49 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_49;
-  j = 0;
-  while (true) {
-    int const x_54 = i;
-    int const x_56 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    int const x_59 = j;
-    if ((x_59 < -1)) {
-      break;
-    }
-    int const x_63 = j;
-    float const x_65 = arr.arr[x_63];
-    arr.arr[x_63] = (x_65 + 1.0f);
-    {
-      int const x_68 = i;
-      i = as_type<int>((as_type<uint>(x_68) + as_type<uint>(1)));
-      int const x_70 = j;
-      j = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-    }
-  }
-  float const x_73 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_75 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_77 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_79 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  *(tint_symbol_4) = float4(x_73, x_75, x_77, x_79);
-  int const x_82 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_82;
-  while (true) {
-    int const x_87 = i;
-    int const x_89 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_87 < x_89)) {
-    } else {
-      break;
-    }
-    int const x_92 = i;
-    float const x_94 = arr.arr[x_92];
-    if (!((x_94 == 2.0f))) {
-      float const x_99 = x_6.x_GLF_uniform_float_values.arr[1].el;
-      *(tint_symbol_4) = float4(x_99, x_99, x_99, x_99);
-    }
-    {
-      int const x_101 = i;
-      i = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_9, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1d8dbcd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,204 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 124
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %arr "arr"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_float_uint_5 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-%_ptr_Function__arr_float_uint_5 = OpTypePointer Function %_arr_float_uint_5
-         %27 = OpConstantNull %_arr_float_uint_5
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-   %main_out = OpTypeStruct %v4float
-        %113 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-        %arr = OpVariable %_ptr_Function__arr_float_uint_5 Function %27
-          %i = OpVariable %_ptr_Function_int Function %30
-          %j = OpVariable %_ptr_Function_int Function %30
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %36 = OpLoad %float %35
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %45 = OpCompositeConstruct %_arr_float_uint_5 %36 %38 %40 %42 %44
-               OpStore %arr %45
-         %48 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %49 = OpLoad %int %48
-               OpStore %i %49
-               OpStore %j %int_0
-               OpBranch %50
-         %50 = OpLabel
-               OpLoopMerge %51 %52 None
-               OpBranch %53
-         %53 = OpLabel
-         %54 = OpLoad %int %i
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpSLessThan %bool %54 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %61
-         %60 = OpLabel
-               OpBranch %59
-         %61 = OpLabel
-               OpBranch %51
-         %59 = OpLabel
-         %62 = OpLoad %int %j
-         %64 = OpSLessThan %bool %62 %int_n1
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-               OpBranch %51
-         %65 = OpLabel
-         %67 = OpLoad %int %j
-         %69 = OpAccessChain %_ptr_Function_float %arr %67
-         %70 = OpLoad %float %69
-         %71 = OpAccessChain %_ptr_Function_float %arr %67
-         %73 = OpFAdd %float %70 %float_1
-               OpStore %71 %73
-               OpBranch %52
-         %52 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-         %76 = OpLoad %int %j
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %j %77
-               OpBranch %50
-         %51 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %81 = OpLoad %float %80
-         %82 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %83 = OpLoad %float %82
-         %84 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %85 = OpLoad %float %84
-         %86 = OpCompositeConstruct %v4float %79 %81 %83 %85
-               OpStore %x_GLF_color %86
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %88 = OpLoad %int %87
-               OpStore %i %88
-               OpBranch %89
-         %89 = OpLabel
-               OpLoopMerge %90 %91 None
-               OpBranch %92
-         %92 = OpLabel
-         %93 = OpLoad %int %i
-         %94 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %95 = OpLoad %int %94
-         %96 = OpSLessThan %bool %93 %95
-               OpSelectionMerge %97 None
-               OpBranchConditional %96 %98 %99
-         %98 = OpLabel
-               OpBranch %97
-         %99 = OpLabel
-               OpBranch %90
-         %97 = OpLabel
-        %100 = OpLoad %int %i
-        %101 = OpAccessChain %_ptr_Function_float %arr %100
-        %102 = OpLoad %float %101
-        %105 = OpFOrdEqual %bool %102 %float_2
-        %103 = OpLogicalNot %bool %105
-               OpSelectionMerge %106 None
-               OpBranchConditional %103 %107 %106
-        %107 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-        %109 = OpLoad %float %108
-        %110 = OpCompositeConstruct %v4float %109 %109 %109 %109
-               OpStore %x_GLF_color %110
-               OpBranch %106
-        %106 = OpLabel
-               OpBranch %91
-         %91 = OpLabel
-        %111 = OpLoad %int %i
-        %112 = OpIAdd %int %111 %int_1
-               OpStore %i %112
-               OpBranch %89
-         %90 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %113
-        %116 = OpLabel
-        %117 = OpFunctionCall %void %main_1
-        %118 = OpLoad %v4float %x_GLF_color
-        %119 = OpCompositeConstruct %main_out %118
-               OpReturnValue %119
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %121 = OpLabel
-        %122 = OpFunctionCall %main_out %main_inner
-        %123 = OpCompositeExtract %v4float %122 0
-               OpStore %x_GLF_color_1_1 %123
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9bd8ed5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-loop-with-two-integers/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,94 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var arr : array<f32, 5>;
-  var i : i32;
-  var j : i32;
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_46 : f32 = x_6.x_GLF_uniform_float_values[0];
-  arr = array<f32, 5>(x_38, x_40, x_42, x_44, x_46);
-  let x_49 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_49;
-  j = 0;
-  loop {
-    let x_54 : i32 = i;
-    let x_56 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_54 < x_56)) {
-    } else {
-      break;
-    }
-    let x_59 : i32 = j;
-    if ((x_59 < -1)) {
-      break;
-    }
-    let x_63 : i32 = j;
-    let x_65 : f32 = arr[x_63];
-    arr[x_63] = (x_65 + 1.0);
-
-    continuing {
-      let x_68 : i32 = i;
-      i = (x_68 + 1);
-      let x_70 : i32 = j;
-      j = (x_70 + 1);
-    }
-  }
-  let x_73 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_75 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_77 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_79 : f32 = x_6.x_GLF_uniform_float_values[0];
-  x_GLF_color = vec4<f32>(x_73, x_75, x_77, x_79);
-  let x_82 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_82;
-  loop {
-    let x_87 : i32 = i;
-    let x_89 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_87 < x_89)) {
-    } else {
-      break;
-    }
-    let x_92 : i32 = i;
-    let x_94 : f32 = arr[x_92];
-    if (!((x_94 == 2.0))) {
-      let x_99 : f32 = x_6.x_GLF_uniform_float_values[1];
-      x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
-    }
-
-    continuing {
-      let x_101 : i32 = i;
-      i = (x_101 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 97bb65a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,128 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[6];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[1];
-};
-
-void main_1() {
-  int data[5] = (int[5])0;
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_48 = asint(x_6[5].x);
-  const int x_51 = asint(x_6[5].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_54 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  const int x_58 = asint(x_6[1].x);
-  const int x_60 = asint(x_6[2].x);
-  const int x_62 = asint(x_6[3].x);
-  const int x_64 = asint(x_6[4].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_66 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int tint_symbol_5[5] = {x_58, x_60, x_62, x_64, x_66};
-  data = tint_symbol_5;
-  const int x_69 = asint(x_6[5].x);
-  a = x_69;
-  while (true) {
-    const int x_74 = a;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_76 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    if ((x_74 < x_76)) {
-    } else {
-      break;
-    }
-    const int x_80 = asint(x_6[5].x);
-    i = x_80;
-    while (true) {
-      const int x_85 = i;
-      const int x_87 = asint(x_6[1].x);
-      if ((x_85 < x_87)) {
-      } else {
-        break;
-      }
-      j = i;
-      while (true) {
-        const int x_95 = j;
-        const int x_97 = asint(x_6[1].x);
-        if ((x_95 < x_97)) {
-        } else {
-          break;
-        }
-        const int x_102 = data[i];
-        const int x_105 = data[j];
-        if ((x_102 < x_105)) {
-          const int x_110 = asint(x_6[5].x);
-          const float x_111 = float(x_110);
-          x_GLF_color = float4(x_111, x_111, x_111, x_111);
-        }
-        {
-          j = (j + 1);
-        }
-      }
-      {
-        i = (i + 1);
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  while (true) {
-    const float x_124 = gl_FragCoord.x;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_126 = asfloat(x_12[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    if ((x_124 < x_126)) {
-    } else {
-      break;
-    }
-    const int x_130 = asint(x_6[5].x);
-    i_1 = x_130;
-    while (true) {
-      const int x_135 = i_1;
-      const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-      const int x_137 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-      if ((x_135 < x_137)) {
-      } else {
-        break;
-      }
-      const int x_141 = asint(x_6[5].x);
-      const float x_142 = float(x_141);
-      x_GLF_color = float4(x_142, x_142, x_142, x_142);
-      {
-        i_1 = (i_1 + 1);
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.msl
deleted file mode 100644
index f544c71..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,146 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[6];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[5];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_12, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_2 data = {};
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_54 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_4) = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_60 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_64 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_58, x_60, x_62, x_64, x_66}};
-  data = tint_symbol_2;
-  int const x_69 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  a = x_69;
-  while (true) {
-    int const x_74 = a;
-    int const x_76 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_74 < x_76)) {
-    } else {
-      break;
-    }
-    int const x_80 = x_6.x_GLF_uniform_int_values.arr[5].el;
-    i = x_80;
-    while (true) {
-      int const x_85 = i;
-      int const x_87 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      if ((x_85 < x_87)) {
-      } else {
-        break;
-      }
-      int const x_90 = i;
-      j = x_90;
-      while (true) {
-        int const x_95 = j;
-        int const x_97 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        if ((x_95 < x_97)) {
-        } else {
-          break;
-        }
-        int const x_100 = i;
-        int const x_102 = data.arr[x_100];
-        int const x_103 = j;
-        int const x_105 = data.arr[x_103];
-        if ((x_102 < x_105)) {
-          int const x_110 = x_6.x_GLF_uniform_int_values.arr[5].el;
-          float const x_111 = float(x_110);
-          *(tint_symbol_4) = float4(x_111, x_111, x_111, x_111);
-        }
-        {
-          int const x_113 = j;
-          j = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_115 = i;
-        i = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_117 = a;
-      a = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-    }
-  }
-  while (true) {
-    float const x_124 = (*(tint_symbol_5)).x;
-    float const x_126 = x_12.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_124 < x_126)) {
-    } else {
-      break;
-    }
-    int const x_130 = x_6.x_GLF_uniform_int_values.arr[5].el;
-    i_1 = x_130;
-    while (true) {
-      int const x_135 = i_1;
-      int const x_137 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_135 < x_137)) {
-      } else {
-        break;
-      }
-      int const x_141 = x_6.x_GLF_uniform_int_values.arr[5].el;
-      float const x_142 = float(x_141);
-      *(tint_symbol_4) = float4(x_142, x_142, x_142, x_142);
-      {
-        int const x_144 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_144) + as_type<uint>(1)));
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_12, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, x_12, tint_symbol_7, tint_symbol_6);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_6 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_12, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6358d60..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,287 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 174
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_12 "x_12"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_6 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_6 = OpConstant %uint 6
-%_arr_int_uint_6 = OpTypeArray %int %uint_6
-       %buf1 = OpTypeStruct %_arr_int_uint_6
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-%_ptr_Function__arr_int_uint_5 = OpTypePointer Function %_arr_int_uint_5
-         %31 = OpConstantNull %_arr_int_uint_5
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-        %161 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_int_uint_5 Function %31
-          %a = OpVariable %_ptr_Function_int Function %34
-          %i = OpVariable %_ptr_Function_int Function %34
-          %j = OpVariable %_ptr_Function_int Function %34
-        %i_1 = OpVariable %_ptr_Function_int Function %34
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %42 = OpLoad %int %41
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpConvertSToF %float %42
-         %51 = OpConvertSToF %float %45
-         %52 = OpConvertSToF %float %47
-         %53 = OpConvertSToF %float %49
-         %54 = OpCompositeConstruct %v4float %50 %51 %52 %53
-               OpStore %x_GLF_color %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %63 = OpLoad %int %62
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpCompositeConstruct %_arr_int_uint_5 %57 %60 %63 %66 %68
-               OpStore %data %69
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %71 = OpLoad %int %70
-               OpStore %a %71
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %int %a
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %78 = OpLoad %int %77
-         %79 = OpSLessThan %bool %76 %78
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %73
-         %81 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %85 = OpLoad %int %84
-               OpStore %i %85
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpSLessThan %bool %90 %92
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-               OpBranch %94
-         %96 = OpLabel
-               OpBranch %87
-         %94 = OpLabel
-         %97 = OpLoad %int %i
-               OpStore %j %97
-               OpBranch %98
-         %98 = OpLabel
-               OpLoopMerge %99 %100 None
-               OpBranch %101
-        %101 = OpLabel
-        %102 = OpLoad %int %j
-        %103 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %104 = OpLoad %int %103
-        %105 = OpSLessThan %bool %102 %104
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %108
-        %107 = OpLabel
-               OpBranch %106
-        %108 = OpLabel
-               OpBranch %99
-        %106 = OpLabel
-        %109 = OpLoad %int %i
-        %110 = OpAccessChain %_ptr_Function_int %data %109
-        %111 = OpLoad %int %110
-        %112 = OpLoad %int %j
-        %113 = OpAccessChain %_ptr_Function_int %data %112
-        %114 = OpLoad %int %113
-        %115 = OpSLessThan %bool %111 %114
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %119
-        %121 = OpCompositeConstruct %v4float %120 %120 %120 %120
-               OpStore %x_GLF_color %121
-               OpBranch %116
-        %116 = OpLabel
-               OpBranch %100
-        %100 = OpLabel
-        %122 = OpLoad %int %j
-        %123 = OpIAdd %int %122 %int_1
-               OpStore %j %123
-               OpBranch %98
-         %99 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-        %124 = OpLoad %int %i
-        %125 = OpIAdd %int %124 %int_1
-               OpStore %i %125
-               OpBranch %86
-         %87 = OpLabel
-               OpBranch %74
-         %74 = OpLabel
-        %126 = OpLoad %int %a
-        %127 = OpIAdd %int %126 %int_1
-               OpStore %a %127
-               OpBranch %72
-         %73 = OpLabel
-               OpBranch %128
-        %128 = OpLabel
-               OpLoopMerge %129 %130 None
-               OpBranch %131
-        %131 = OpLabel
-        %133 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %134 = OpLoad %float %133
-        %136 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-        %137 = OpLoad %float %136
-        %138 = OpFOrdLessThan %bool %134 %137
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %129
-        %139 = OpLabel
-        %142 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %143 = OpLoad %int %142
-               OpStore %i_1 %143
-               OpBranch %144
-        %144 = OpLabel
-               OpLoopMerge %145 %146 None
-               OpBranch %147
-        %147 = OpLabel
-        %148 = OpLoad %int %i_1
-        %149 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %150 = OpLoad %int %149
-        %151 = OpSLessThan %bool %148 %150
-               OpSelectionMerge %152 None
-               OpBranchConditional %151 %153 %154
-        %153 = OpLabel
-               OpBranch %152
-        %154 = OpLabel
-               OpBranch %145
-        %152 = OpLabel
-        %155 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %156 = OpLoad %int %155
-        %157 = OpConvertSToF %float %156
-        %158 = OpCompositeConstruct %v4float %157 %157 %157 %157
-               OpStore %x_GLF_color %158
-               OpBranch %146
-        %146 = OpLabel
-        %159 = OpLoad %int %i_1
-        %160 = OpIAdd %int %159 %int_1
-               OpStore %i_1 %160
-               OpBranch %144
-        %145 = OpLabel
-               OpBranch %130
-        %130 = OpLabel
-               OpBranch %128
-        %129 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %161
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %165 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %166 = OpFunctionCall %void %main_1
-        %167 = OpLoad %v4float %x_GLF_color
-        %168 = OpCompositeConstruct %main_out %167
-               OpReturnValue %168
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %170 = OpLabel
-        %172 = OpLoad %v4float %gl_FragCoord_param_1
-        %171 = OpFunctionCall %main_out %main_inner %172
-        %173 = OpCompositeExtract %v4float %171 0
-               OpStore %x_GLF_color_1_1 %173
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b603ec3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,133 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 6>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-fn main_1() {
-  var data : array<i32, 5>;
-  var a : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_54 : i32 = x_6.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_45), f32(x_48), f32(x_51), f32(x_54));
-  let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_60 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_64 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[0];
-  data = array<i32, 5>(x_58, x_60, x_62, x_64, x_66);
-  let x_69 : i32 = x_6.x_GLF_uniform_int_values[5];
-  a = x_69;
-  loop {
-    let x_74 : i32 = a;
-    let x_76 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_74 < x_76)) {
-    } else {
-      break;
-    }
-    let x_80 : i32 = x_6.x_GLF_uniform_int_values[5];
-    i = x_80;
-    loop {
-      let x_85 : i32 = i;
-      let x_87 : i32 = x_6.x_GLF_uniform_int_values[1];
-      if ((x_85 < x_87)) {
-      } else {
-        break;
-      }
-      let x_90 : i32 = i;
-      j = x_90;
-      loop {
-        let x_95 : i32 = j;
-        let x_97 : i32 = x_6.x_GLF_uniform_int_values[1];
-        if ((x_95 < x_97)) {
-        } else {
-          break;
-        }
-        let x_100 : i32 = i;
-        let x_102 : i32 = data[x_100];
-        let x_103 : i32 = j;
-        let x_105 : i32 = data[x_103];
-        if ((x_102 < x_105)) {
-          let x_110 : i32 = x_6.x_GLF_uniform_int_values[5];
-          let x_111 : f32 = f32(x_110);
-          x_GLF_color = vec4<f32>(x_111, x_111, x_111, x_111);
-        }
-
-        continuing {
-          let x_113 : i32 = j;
-          j = (x_113 + 1);
-        }
-      }
-
-      continuing {
-        let x_115 : i32 = i;
-        i = (x_115 + 1);
-      }
-    }
-
-    continuing {
-      let x_117 : i32 = a;
-      a = (x_117 + 1);
-    }
-  }
-  loop {
-    let x_124 : f32 = gl_FragCoord.x;
-    let x_126 : f32 = x_12.x_GLF_uniform_float_values[0];
-    if ((x_124 < x_126)) {
-    } else {
-      break;
-    }
-    let x_130 : i32 = x_6.x_GLF_uniform_int_values[5];
-    i_1 = x_130;
-    loop {
-      let x_135 : i32 = i_1;
-      let x_137 : i32 = x_6.x_GLF_uniform_int_values[0];
-      if ((x_135 < x_137)) {
-      } else {
-        break;
-      }
-      let x_141 : i32 = x_6.x_GLF_uniform_int_values[5];
-      let x_142 : f32 = f32(x_141);
-      x_GLF_color = vec4<f32>(x_142, x_142, x_142, x_142);
-
-      continuing {
-        let x_144 : i32 = i_1;
-        i_1 = (x_144 + 1);
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 97bb65a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,128 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[6];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[1];
-};
-
-void main_1() {
-  int data[5] = (int[5])0;
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_48 = asint(x_6[5].x);
-  const int x_51 = asint(x_6[5].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_54 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  const int x_58 = asint(x_6[1].x);
-  const int x_60 = asint(x_6[2].x);
-  const int x_62 = asint(x_6[3].x);
-  const int x_64 = asint(x_6[4].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_66 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int tint_symbol_5[5] = {x_58, x_60, x_62, x_64, x_66};
-  data = tint_symbol_5;
-  const int x_69 = asint(x_6[5].x);
-  a = x_69;
-  while (true) {
-    const int x_74 = a;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_76 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    if ((x_74 < x_76)) {
-    } else {
-      break;
-    }
-    const int x_80 = asint(x_6[5].x);
-    i = x_80;
-    while (true) {
-      const int x_85 = i;
-      const int x_87 = asint(x_6[1].x);
-      if ((x_85 < x_87)) {
-      } else {
-        break;
-      }
-      j = i;
-      while (true) {
-        const int x_95 = j;
-        const int x_97 = asint(x_6[1].x);
-        if ((x_95 < x_97)) {
-        } else {
-          break;
-        }
-        const int x_102 = data[i];
-        const int x_105 = data[j];
-        if ((x_102 < x_105)) {
-          const int x_110 = asint(x_6[5].x);
-          const float x_111 = float(x_110);
-          x_GLF_color = float4(x_111, x_111, x_111, x_111);
-        }
-        {
-          j = (j + 1);
-        }
-      }
-      {
-        i = (i + 1);
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  while (true) {
-    const float x_124 = gl_FragCoord.x;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_126 = asfloat(x_12[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    if ((x_124 < x_126)) {
-    } else {
-      break;
-    }
-    const int x_130 = asint(x_6[5].x);
-    i_1 = x_130;
-    while (true) {
-      const int x_135 = i_1;
-      const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-      const int x_137 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-      if ((x_135 < x_137)) {
-      } else {
-        break;
-      }
-      const int x_141 = asint(x_6[5].x);
-      const float x_142 = float(x_141);
-      x_GLF_color = float4(x_142, x_142, x_142, x_142);
-      {
-        i_1 = (i_1 + 1);
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.msl
deleted file mode 100644
index f544c71..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,146 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[6];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  int arr[5];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_12, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_2 data = {};
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_54 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_4) = float4(float(x_45), float(x_48), float(x_51), float(x_54));
-  int const x_58 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_60 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_64 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_58, x_60, x_62, x_64, x_66}};
-  data = tint_symbol_2;
-  int const x_69 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  a = x_69;
-  while (true) {
-    int const x_74 = a;
-    int const x_76 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_74 < x_76)) {
-    } else {
-      break;
-    }
-    int const x_80 = x_6.x_GLF_uniform_int_values.arr[5].el;
-    i = x_80;
-    while (true) {
-      int const x_85 = i;
-      int const x_87 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      if ((x_85 < x_87)) {
-      } else {
-        break;
-      }
-      int const x_90 = i;
-      j = x_90;
-      while (true) {
-        int const x_95 = j;
-        int const x_97 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        if ((x_95 < x_97)) {
-        } else {
-          break;
-        }
-        int const x_100 = i;
-        int const x_102 = data.arr[x_100];
-        int const x_103 = j;
-        int const x_105 = data.arr[x_103];
-        if ((x_102 < x_105)) {
-          int const x_110 = x_6.x_GLF_uniform_int_values.arr[5].el;
-          float const x_111 = float(x_110);
-          *(tint_symbol_4) = float4(x_111, x_111, x_111, x_111);
-        }
-        {
-          int const x_113 = j;
-          j = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_115 = i;
-        i = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_117 = a;
-      a = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-    }
-  }
-  while (true) {
-    float const x_124 = (*(tint_symbol_5)).x;
-    float const x_126 = x_12.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_124 < x_126)) {
-    } else {
-      break;
-    }
-    int const x_130 = x_6.x_GLF_uniform_int_values.arr[5].el;
-    i_1 = x_130;
-    while (true) {
-      int const x_135 = i_1;
-      int const x_137 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_135 < x_137)) {
-      } else {
-        break;
-      }
-      int const x_141 = x_6.x_GLF_uniform_int_values.arr[5].el;
-      float const x_142 = float(x_141);
-      *(tint_symbol_4) = float4(x_142, x_142, x_142, x_142);
-      {
-        int const x_144 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_144) + as_type<uint>(1)));
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_12, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, x_12, tint_symbol_7, tint_symbol_6);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_6 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_12, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6358d60..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,287 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 174
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_12 "x_12"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_6 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_6 = OpConstant %uint 6
-%_arr_int_uint_6 = OpTypeArray %int %uint_6
-       %buf1 = OpTypeStruct %_arr_int_uint_6
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-%_ptr_Function__arr_int_uint_5 = OpTypePointer Function %_arr_int_uint_5
-         %31 = OpConstantNull %_arr_int_uint_5
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-        %161 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_int_uint_5 Function %31
-          %a = OpVariable %_ptr_Function_int Function %34
-          %i = OpVariable %_ptr_Function_int Function %34
-          %j = OpVariable %_ptr_Function_int Function %34
-        %i_1 = OpVariable %_ptr_Function_int Function %34
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %42 = OpLoad %int %41
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpConvertSToF %float %42
-         %51 = OpConvertSToF %float %45
-         %52 = OpConvertSToF %float %47
-         %53 = OpConvertSToF %float %49
-         %54 = OpCompositeConstruct %v4float %50 %51 %52 %53
-               OpStore %x_GLF_color %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %63 = OpLoad %int %62
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpCompositeConstruct %_arr_int_uint_5 %57 %60 %63 %66 %68
-               OpStore %data %69
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %71 = OpLoad %int %70
-               OpStore %a %71
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %int %a
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %78 = OpLoad %int %77
-         %79 = OpSLessThan %bool %76 %78
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %73
-         %81 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %85 = OpLoad %int %84
-               OpStore %i %85
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpSLessThan %bool %90 %92
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-               OpBranch %94
-         %96 = OpLabel
-               OpBranch %87
-         %94 = OpLabel
-         %97 = OpLoad %int %i
-               OpStore %j %97
-               OpBranch %98
-         %98 = OpLabel
-               OpLoopMerge %99 %100 None
-               OpBranch %101
-        %101 = OpLabel
-        %102 = OpLoad %int %j
-        %103 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %104 = OpLoad %int %103
-        %105 = OpSLessThan %bool %102 %104
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %108
-        %107 = OpLabel
-               OpBranch %106
-        %108 = OpLabel
-               OpBranch %99
-        %106 = OpLabel
-        %109 = OpLoad %int %i
-        %110 = OpAccessChain %_ptr_Function_int %data %109
-        %111 = OpLoad %int %110
-        %112 = OpLoad %int %j
-        %113 = OpAccessChain %_ptr_Function_int %data %112
-        %114 = OpLoad %int %113
-        %115 = OpSLessThan %bool %111 %114
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %119 = OpLoad %int %118
-        %120 = OpConvertSToF %float %119
-        %121 = OpCompositeConstruct %v4float %120 %120 %120 %120
-               OpStore %x_GLF_color %121
-               OpBranch %116
-        %116 = OpLabel
-               OpBranch %100
-        %100 = OpLabel
-        %122 = OpLoad %int %j
-        %123 = OpIAdd %int %122 %int_1
-               OpStore %j %123
-               OpBranch %98
-         %99 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-        %124 = OpLoad %int %i
-        %125 = OpIAdd %int %124 %int_1
-               OpStore %i %125
-               OpBranch %86
-         %87 = OpLabel
-               OpBranch %74
-         %74 = OpLabel
-        %126 = OpLoad %int %a
-        %127 = OpIAdd %int %126 %int_1
-               OpStore %a %127
-               OpBranch %72
-         %73 = OpLabel
-               OpBranch %128
-        %128 = OpLabel
-               OpLoopMerge %129 %130 None
-               OpBranch %131
-        %131 = OpLabel
-        %133 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %134 = OpLoad %float %133
-        %136 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-        %137 = OpLoad %float %136
-        %138 = OpFOrdLessThan %bool %134 %137
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %129
-        %139 = OpLabel
-        %142 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %143 = OpLoad %int %142
-               OpStore %i_1 %143
-               OpBranch %144
-        %144 = OpLabel
-               OpLoopMerge %145 %146 None
-               OpBranch %147
-        %147 = OpLabel
-        %148 = OpLoad %int %i_1
-        %149 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %150 = OpLoad %int %149
-        %151 = OpSLessThan %bool %148 %150
-               OpSelectionMerge %152 None
-               OpBranchConditional %151 %153 %154
-        %153 = OpLabel
-               OpBranch %152
-        %154 = OpLabel
-               OpBranch %145
-        %152 = OpLabel
-        %155 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %156 = OpLoad %int %155
-        %157 = OpConvertSToF %float %156
-        %158 = OpCompositeConstruct %v4float %157 %157 %157 %157
-               OpStore %x_GLF_color %158
-               OpBranch %146
-        %146 = OpLabel
-        %159 = OpLoad %int %i_1
-        %160 = OpIAdd %int %159 %int_1
-               OpStore %i_1 %160
-               OpBranch %144
-        %145 = OpLabel
-               OpBranch %130
-        %130 = OpLabel
-               OpBranch %128
-        %129 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %161
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %165 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %166 = OpFunctionCall %void %main_1
-        %167 = OpLoad %v4float %x_GLF_color
-        %168 = OpCompositeConstruct %main_out %167
-               OpReturnValue %168
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %170 = OpLabel
-        %172 = OpLoad %v4float %gl_FragCoord_param_1
-        %171 = OpFunctionCall %main_out %main_inner %172
-        %173 = OpCompositeExtract %v4float %171 0
-               OpStore %x_GLF_color_1_1 %173
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b603ec3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-basic-block-for-for-for-less-than/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,133 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 6>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-fn main_1() {
-  var data : array<i32, 5>;
-  var a : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_54 : i32 = x_6.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_45), f32(x_48), f32(x_51), f32(x_54));
-  let x_58 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_60 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_64 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[0];
-  data = array<i32, 5>(x_58, x_60, x_62, x_64, x_66);
-  let x_69 : i32 = x_6.x_GLF_uniform_int_values[5];
-  a = x_69;
-  loop {
-    let x_74 : i32 = a;
-    let x_76 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_74 < x_76)) {
-    } else {
-      break;
-    }
-    let x_80 : i32 = x_6.x_GLF_uniform_int_values[5];
-    i = x_80;
-    loop {
-      let x_85 : i32 = i;
-      let x_87 : i32 = x_6.x_GLF_uniform_int_values[1];
-      if ((x_85 < x_87)) {
-      } else {
-        break;
-      }
-      let x_90 : i32 = i;
-      j = x_90;
-      loop {
-        let x_95 : i32 = j;
-        let x_97 : i32 = x_6.x_GLF_uniform_int_values[1];
-        if ((x_95 < x_97)) {
-        } else {
-          break;
-        }
-        let x_100 : i32 = i;
-        let x_102 : i32 = data[x_100];
-        let x_103 : i32 = j;
-        let x_105 : i32 = data[x_103];
-        if ((x_102 < x_105)) {
-          let x_110 : i32 = x_6.x_GLF_uniform_int_values[5];
-          let x_111 : f32 = f32(x_110);
-          x_GLF_color = vec4<f32>(x_111, x_111, x_111, x_111);
-        }
-
-        continuing {
-          let x_113 : i32 = j;
-          j = (x_113 + 1);
-        }
-      }
-
-      continuing {
-        let x_115 : i32 = i;
-        i = (x_115 + 1);
-      }
-    }
-
-    continuing {
-      let x_117 : i32 = a;
-      a = (x_117 + 1);
-    }
-  }
-  loop {
-    let x_124 : f32 = gl_FragCoord.x;
-    let x_126 : f32 = x_12.x_GLF_uniform_float_values[0];
-    if ((x_124 < x_126)) {
-    } else {
-      break;
-    }
-    let x_130 : i32 = x_6.x_GLF_uniform_int_values[5];
-    i_1 = x_130;
-    loop {
-      let x_135 : i32 = i_1;
-      let x_137 : i32 = x_6.x_GLF_uniform_int_values[0];
-      if ((x_135 < x_137)) {
-      } else {
-        break;
-      }
-      let x_141 : i32 = x_6.x_GLF_uniform_int_values[5];
-      let x_142 : f32 = f32(x_141);
-      x_GLF_color = vec4<f32>(x_142, x_142, x_142, x_142);
-
-      continuing {
-        let x_144 : i32 = i_1;
-        i_1 = (x_144 + 1);
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1cc7fe8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,97 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[4];
-};
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[2];
-};
-static float4 x_GLF_v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 uv = float2(0.0f, 0.0f);
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float a = 0.0f;
-  int i = 0;
-  const float4 x_49 = gl_FragCoord;
-  uv = float2(x_49.x, x_49.y);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_52 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float4(x_52, x_52, x_52, x_52);
-  const float x_55 = uv.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_57 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_55 >= x_57)) {
-    const float x_62 = asfloat(x_8[2].x);
-    v1.x = x_62;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_65 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    v1.y = x_65;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    v1.z = x_68;
-    const float x_71 = asfloat(x_8[2].x);
-    v1.w = x_71;
-  }
-  const float x_74 = asfloat(x_8[2].x);
-  a = x_74;
-  const int x_15 = asint(x_12[1].x);
-  i = x_15;
-  while (true) {
-    const int x_16 = i;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_17 = asint(x_12[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    if ((x_16 < x_17)) {
-    } else {
-      break;
-    }
-    const float x_84 = asfloat(x_8[2].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_86 = asfloat(x_8[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    if ((x_84 < x_86)) {
-      discard;
-    }
-    const float x_91 = v1.x;
-    const float x_93 = v1.y;
-    const float x_96 = v1.z;
-    const float x_99 = v1.w;
-    const float x_102 = asfloat(x_8[3].x);
-    a = pow((((x_91 + x_93) + x_96) + x_99), x_102);
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_104 = a;
-  const float x_106 = asfloat(x_8[1].x);
-  if ((x_104 == x_106)) {
-    x_GLF_v1 = v1;
-  } else {
-    const int x_20 = asint(x_12[1].x);
-    const float x_113 = float(x_20);
-    x_GLF_v1 = float4(x_113, x_113, x_113, x_113);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_v1_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_v1_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_v1};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_v1_1 = inner_result.x_GLF_v1_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.msl
deleted file mode 100644
index cb5189b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_v1_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_v1_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_8, constant buf0& x_12, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 uv = 0.0f;
-  float4 v1 = 0.0f;
-  float a = 0.0f;
-  int i = 0;
-  float4 const x_49 = *(tint_symbol_3);
-  uv = float2(x_49.x, x_49.y);
-  float const x_52 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float4(x_52, x_52, x_52, x_52);
-  float const x_55 = uv.y;
-  float const x_57 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_55 >= x_57)) {
-    float const x_62 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    v1.x = x_62;
-    float const x_65 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    v1.y = x_65;
-    float const x_68 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    v1.z = x_68;
-    float const x_71 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    v1.w = x_71;
-  }
-  float const x_74 = x_8.x_GLF_uniform_float_values.arr[2].el;
-  a = x_74;
-  int const x_15 = x_12.x_GLF_uniform_int_values.arr[1].el;
-  i = x_15;
-  while (true) {
-    int const x_16 = i;
-    int const x_17 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_16 < x_17)) {
-    } else {
-      break;
-    }
-    float const x_84 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    float const x_86 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_84 < x_86)) {
-      discard_fragment();
-    }
-    float const x_91 = v1.x;
-    float const x_93 = v1.y;
-    float const x_96 = v1.z;
-    float const x_99 = v1.w;
-    float const x_102 = x_8.x_GLF_uniform_float_values.arr[3].el;
-    a = pow((((x_91 + x_93) + x_96) + x_99), x_102);
-    {
-      int const x_18 = i;
-      i = as_type<int>((as_type<uint>(x_18) + as_type<uint>(1)));
-    }
-  }
-  float const x_104 = a;
-  float const x_106 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_104 == x_106)) {
-    float4 const x_111 = v1;
-    *(tint_symbol_4) = x_111;
-  } else {
-    int const x_20 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    float const x_113 = float(x_20);
-    *(tint_symbol_4) = float4(x_113, x_113, x_113, x_113);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_12, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_12, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_v1_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_12, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_v1_1 = inner_result.x_GLF_v1_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 583b944..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,221 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 139
-; Schema: 0
-               OpCapability Shader
-        %108 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_v1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_v1_1_1 "x_GLF_v1_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %x_GLF_v1 "x_GLF_v1"
-               OpName %main_1 "main_1"
-               OpName %uv "uv"
-               OpName %v1 "v1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_v1_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_v1_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_v1_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-   %x_GLF_v1 = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %30 = OpConstantNull %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %35 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %38 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-     %uint_3 = OpConstant %uint 3
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %126 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-         %uv = OpVariable %_ptr_Function_v2float Function %30
-         %v1 = OpVariable %_ptr_Function_v4float Function %7
-          %a = OpVariable %_ptr_Function_float Function %35
-          %i = OpVariable %_ptr_Function_int Function %38
-         %39 = OpLoad %v4float %gl_FragCoord
-         %40 = OpCompositeExtract %float %39 0
-         %41 = OpCompositeExtract %float %39 1
-         %42 = OpCompositeConstruct %v2float %40 %41
-               OpStore %uv %42
-         %46 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpCompositeConstruct %v4float %47 %47 %47 %47
-               OpStore %v1 %48
-         %50 = OpAccessChain %_ptr_Function_float %uv %uint_1
-         %51 = OpLoad %float %50
-         %52 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %53 = OpLoad %float %52
-         %54 = OpFOrdGreaterThanEqual %bool %51 %53
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %56
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %60 = OpLoad %float %59
-         %61 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-               OpStore %61 %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-               OpStore %64 %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpAccessChain %_ptr_Function_float %v1 %uint_2
-               OpStore %67 %66
-         %68 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Function_float %v1 %uint_3
-               OpStore %71 %69
-               OpBranch %56
-         %56 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %73 = OpLoad %float %72
-               OpStore %a %73
-         %76 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %77 = OpLoad %int %76
-               OpStore %i %77
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %82 = OpLoad %int %i
-         %83 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-         %84 = OpLoad %int %83
-         %85 = OpSLessThan %bool %82 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-               OpBranch %86
-         %88 = OpLabel
-               OpBranch %79
-         %86 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %92 = OpLoad %float %91
-         %93 = OpFOrdLessThan %bool %90 %92
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %94
-         %95 = OpLabel
-               OpKill
-         %94 = OpLabel
-         %96 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-         %97 = OpLoad %float %96
-         %98 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %99 = OpLoad %float %98
-        %100 = OpAccessChain %_ptr_Function_float %v1 %uint_2
-        %101 = OpLoad %float %100
-        %102 = OpAccessChain %_ptr_Function_float %v1 %uint_3
-        %103 = OpLoad %float %102
-        %105 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_3
-        %106 = OpLoad %float %105
-        %109 = OpFAdd %float %97 %99
-        %110 = OpFAdd %float %109 %101
-        %111 = OpFAdd %float %110 %103
-        %107 = OpExtInst %float %108 Pow %111 %106
-               OpStore %a %107
-               OpBranch %80
-         %80 = OpLabel
-        %112 = OpLoad %int %i
-        %113 = OpIAdd %int %112 %int_1
-               OpStore %i %113
-               OpBranch %78
-         %79 = OpLabel
-        %114 = OpLoad %float %a
-        %115 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %116 = OpLoad %float %115
-        %117 = OpFOrdEqual %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-        %121 = OpLoad %v4float %v1
-               OpStore %x_GLF_v1 %121
-               OpBranch %118
-        %120 = OpLabel
-        %122 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %123 = OpLoad %int %122
-        %124 = OpConvertSToF %float %123
-        %125 = OpCompositeConstruct %v4float %124 %124 %124 %124
-               OpStore %x_GLF_v1 %125
-               OpBranch %118
-        %118 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %126
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %130 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %131 = OpFunctionCall %void %main_1
-        %132 = OpLoad %v4float %x_GLF_v1
-        %133 = OpCompositeConstruct %main_out %132
-               OpReturnValue %133
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %135 = OpLabel
-        %137 = OpLoad %v4float %gl_FragCoord_param_1
-        %136 = OpFunctionCall %main_out %main_inner %137
-        %138 = OpCompositeExtract %v4float %136 0
-               OpStore %x_GLF_v1_1_1 %138
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c2a6296..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,95 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-var<private> x_GLF_v1 : vec4<f32>;
-
-fn main_1() {
-  var uv : vec2<f32>;
-  var v1 : vec4<f32>;
-  var a : f32;
-  var i : i32;
-  let x_49 : vec4<f32> = gl_FragCoord;
-  uv = vec2<f32>(x_49.x, x_49.y);
-  let x_52 : f32 = x_8.x_GLF_uniform_float_values[0];
-  v1 = vec4<f32>(x_52, x_52, x_52, x_52);
-  let x_55 : f32 = uv.y;
-  let x_57 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_55 >= x_57)) {
-    let x_62 : f32 = x_8.x_GLF_uniform_float_values[2];
-    v1.x = x_62;
-    let x_65 : f32 = x_8.x_GLF_uniform_float_values[0];
-    v1.y = x_65;
-    let x_68 : f32 = x_8.x_GLF_uniform_float_values[0];
-    v1.z = x_68;
-    let x_71 : f32 = x_8.x_GLF_uniform_float_values[2];
-    v1.w = x_71;
-  }
-  let x_74 : f32 = x_8.x_GLF_uniform_float_values[2];
-  a = x_74;
-  let x_15 : i32 = x_12.x_GLF_uniform_int_values[1];
-  i = x_15;
-  loop {
-    let x_16 : i32 = i;
-    let x_17 : i32 = x_12.x_GLF_uniform_int_values[0];
-    if ((x_16 < x_17)) {
-    } else {
-      break;
-    }
-    let x_84 : f32 = x_8.x_GLF_uniform_float_values[2];
-    let x_86 : f32 = x_8.x_GLF_uniform_float_values[0];
-    if ((x_84 < x_86)) {
-      discard;
-    }
-    let x_91 : f32 = v1.x;
-    let x_93 : f32 = v1.y;
-    let x_96 : f32 = v1.z;
-    let x_99 : f32 = v1.w;
-    let x_102 : f32 = x_8.x_GLF_uniform_float_values[3];
-    a = pow((((x_91 + x_93) + x_96) + x_99), x_102);
-
-    continuing {
-      let x_18 : i32 = i;
-      i = (x_18 + 1);
-    }
-  }
-  let x_104 : f32 = a;
-  let x_106 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_104 == x_106)) {
-    let x_111 : vec4<f32> = v1;
-    x_GLF_v1 = x_111;
-  } else {
-    let x_20 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_113 : f32 = f32(x_20);
-    x_GLF_v1 = vec4<f32>(x_113, x_113, x_113, x_113);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_v1_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_v1);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1cc7fe8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,97 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[4];
-};
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[2];
-};
-static float4 x_GLF_v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 uv = float2(0.0f, 0.0f);
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float a = 0.0f;
-  int i = 0;
-  const float4 x_49 = gl_FragCoord;
-  uv = float2(x_49.x, x_49.y);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_52 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float4(x_52, x_52, x_52, x_52);
-  const float x_55 = uv.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_57 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_55 >= x_57)) {
-    const float x_62 = asfloat(x_8[2].x);
-    v1.x = x_62;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_65 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    v1.y = x_65;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    v1.z = x_68;
-    const float x_71 = asfloat(x_8[2].x);
-    v1.w = x_71;
-  }
-  const float x_74 = asfloat(x_8[2].x);
-  a = x_74;
-  const int x_15 = asint(x_12[1].x);
-  i = x_15;
-  while (true) {
-    const int x_16 = i;
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_17 = asint(x_12[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    if ((x_16 < x_17)) {
-    } else {
-      break;
-    }
-    const float x_84 = asfloat(x_8[2].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_86 = asfloat(x_8[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    if ((x_84 < x_86)) {
-      discard;
-    }
-    const float x_91 = v1.x;
-    const float x_93 = v1.y;
-    const float x_96 = v1.z;
-    const float x_99 = v1.w;
-    const float x_102 = asfloat(x_8[3].x);
-    a = pow((((x_91 + x_93) + x_96) + x_99), x_102);
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_104 = a;
-  const float x_106 = asfloat(x_8[1].x);
-  if ((x_104 == x_106)) {
-    x_GLF_v1 = v1;
-  } else {
-    const int x_20 = asint(x_12[1].x);
-    const float x_113 = float(x_20);
-    x_GLF_v1 = float4(x_113, x_113, x_113, x_113);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_v1_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_v1_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_v1};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_v1_1 = inner_result.x_GLF_v1_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.msl
deleted file mode 100644
index cb5189b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_v1_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_v1_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_8, constant buf0& x_12, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 uv = 0.0f;
-  float4 v1 = 0.0f;
-  float a = 0.0f;
-  int i = 0;
-  float4 const x_49 = *(tint_symbol_3);
-  uv = float2(x_49.x, x_49.y);
-  float const x_52 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float4(x_52, x_52, x_52, x_52);
-  float const x_55 = uv.y;
-  float const x_57 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_55 >= x_57)) {
-    float const x_62 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    v1.x = x_62;
-    float const x_65 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    v1.y = x_65;
-    float const x_68 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    v1.z = x_68;
-    float const x_71 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    v1.w = x_71;
-  }
-  float const x_74 = x_8.x_GLF_uniform_float_values.arr[2].el;
-  a = x_74;
-  int const x_15 = x_12.x_GLF_uniform_int_values.arr[1].el;
-  i = x_15;
-  while (true) {
-    int const x_16 = i;
-    int const x_17 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_16 < x_17)) {
-    } else {
-      break;
-    }
-    float const x_84 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    float const x_86 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_84 < x_86)) {
-      discard_fragment();
-    }
-    float const x_91 = v1.x;
-    float const x_93 = v1.y;
-    float const x_96 = v1.z;
-    float const x_99 = v1.w;
-    float const x_102 = x_8.x_GLF_uniform_float_values.arr[3].el;
-    a = pow((((x_91 + x_93) + x_96) + x_99), x_102);
-    {
-      int const x_18 = i;
-      i = as_type<int>((as_type<uint>(x_18) + as_type<uint>(1)));
-    }
-  }
-  float const x_104 = a;
-  float const x_106 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  if ((x_104 == x_106)) {
-    float4 const x_111 = v1;
-    *(tint_symbol_4) = x_111;
-  } else {
-    int const x_20 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    float const x_113 = float(x_20);
-    *(tint_symbol_4) = float4(x_113, x_113, x_113, x_113);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_12, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_12, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_v1_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_12, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_v1_1 = inner_result.x_GLF_v1_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 583b944..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,221 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 139
-; Schema: 0
-               OpCapability Shader
-        %108 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_v1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_v1_1_1 "x_GLF_v1_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %x_GLF_v1 "x_GLF_v1"
-               OpName %main_1 "main_1"
-               OpName %uv "uv"
-               OpName %v1 "v1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_v1_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_v1_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_v1_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-   %x_GLF_v1 = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %30 = OpConstantNull %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_float = OpTypePointer Function %float
-         %35 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %38 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-     %uint_3 = OpConstant %uint 3
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %126 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-         %uv = OpVariable %_ptr_Function_v2float Function %30
-         %v1 = OpVariable %_ptr_Function_v4float Function %7
-          %a = OpVariable %_ptr_Function_float Function %35
-          %i = OpVariable %_ptr_Function_int Function %38
-         %39 = OpLoad %v4float %gl_FragCoord
-         %40 = OpCompositeExtract %float %39 0
-         %41 = OpCompositeExtract %float %39 1
-         %42 = OpCompositeConstruct %v2float %40 %41
-               OpStore %uv %42
-         %46 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpCompositeConstruct %v4float %47 %47 %47 %47
-               OpStore %v1 %48
-         %50 = OpAccessChain %_ptr_Function_float %uv %uint_1
-         %51 = OpLoad %float %50
-         %52 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %53 = OpLoad %float %52
-         %54 = OpFOrdGreaterThanEqual %bool %51 %53
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %56
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %60 = OpLoad %float %59
-         %61 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-               OpStore %61 %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-               OpStore %64 %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpAccessChain %_ptr_Function_float %v1 %uint_2
-               OpStore %67 %66
-         %68 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Function_float %v1 %uint_3
-               OpStore %71 %69
-               OpBranch %56
-         %56 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %73 = OpLoad %float %72
-               OpStore %a %73
-         %76 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %77 = OpLoad %int %76
-               OpStore %i %77
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %82 = OpLoad %int %i
-         %83 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-         %84 = OpLoad %int %83
-         %85 = OpSLessThan %bool %82 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-               OpBranch %86
-         %88 = OpLabel
-               OpBranch %79
-         %86 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %92 = OpLoad %float %91
-         %93 = OpFOrdLessThan %bool %90 %92
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %94
-         %95 = OpLabel
-               OpKill
-         %94 = OpLabel
-         %96 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-         %97 = OpLoad %float %96
-         %98 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %99 = OpLoad %float %98
-        %100 = OpAccessChain %_ptr_Function_float %v1 %uint_2
-        %101 = OpLoad %float %100
-        %102 = OpAccessChain %_ptr_Function_float %v1 %uint_3
-        %103 = OpLoad %float %102
-        %105 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_3
-        %106 = OpLoad %float %105
-        %109 = OpFAdd %float %97 %99
-        %110 = OpFAdd %float %109 %101
-        %111 = OpFAdd %float %110 %103
-        %107 = OpExtInst %float %108 Pow %111 %106
-               OpStore %a %107
-               OpBranch %80
-         %80 = OpLabel
-        %112 = OpLoad %int %i
-        %113 = OpIAdd %int %112 %int_1
-               OpStore %i %113
-               OpBranch %78
-         %79 = OpLabel
-        %114 = OpLoad %float %a
-        %115 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %116 = OpLoad %float %115
-        %117 = OpFOrdEqual %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-        %121 = OpLoad %v4float %v1
-               OpStore %x_GLF_v1 %121
-               OpBranch %118
-        %120 = OpLabel
-        %122 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-        %123 = OpLoad %int %122
-        %124 = OpConvertSToF %float %123
-        %125 = OpCompositeConstruct %v4float %124 %124 %124 %124
-               OpStore %x_GLF_v1 %125
-               OpBranch %118
-        %118 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %126
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %130 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %131 = OpFunctionCall %void %main_1
-        %132 = OpLoad %v4float %x_GLF_v1
-        %133 = OpCompositeConstruct %main_out %132
-               OpReturnValue %133
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %135 = OpLabel
-        %137 = OpLoad %v4float %gl_FragCoord_param_1
-        %136 = OpFunctionCall %main_out %main_inner %137
-        %138 = OpCompositeExtract %v4float %136 0
-               OpStore %x_GLF_v1_1_1 %138
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c2a6296..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machine-scheduler-for-if-pow/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,95 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-var<private> x_GLF_v1 : vec4<f32>;
-
-fn main_1() {
-  var uv : vec2<f32>;
-  var v1 : vec4<f32>;
-  var a : f32;
-  var i : i32;
-  let x_49 : vec4<f32> = gl_FragCoord;
-  uv = vec2<f32>(x_49.x, x_49.y);
-  let x_52 : f32 = x_8.x_GLF_uniform_float_values[0];
-  v1 = vec4<f32>(x_52, x_52, x_52, x_52);
-  let x_55 : f32 = uv.y;
-  let x_57 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_55 >= x_57)) {
-    let x_62 : f32 = x_8.x_GLF_uniform_float_values[2];
-    v1.x = x_62;
-    let x_65 : f32 = x_8.x_GLF_uniform_float_values[0];
-    v1.y = x_65;
-    let x_68 : f32 = x_8.x_GLF_uniform_float_values[0];
-    v1.z = x_68;
-    let x_71 : f32 = x_8.x_GLF_uniform_float_values[2];
-    v1.w = x_71;
-  }
-  let x_74 : f32 = x_8.x_GLF_uniform_float_values[2];
-  a = x_74;
-  let x_15 : i32 = x_12.x_GLF_uniform_int_values[1];
-  i = x_15;
-  loop {
-    let x_16 : i32 = i;
-    let x_17 : i32 = x_12.x_GLF_uniform_int_values[0];
-    if ((x_16 < x_17)) {
-    } else {
-      break;
-    }
-    let x_84 : f32 = x_8.x_GLF_uniform_float_values[2];
-    let x_86 : f32 = x_8.x_GLF_uniform_float_values[0];
-    if ((x_84 < x_86)) {
-      discard;
-    }
-    let x_91 : f32 = v1.x;
-    let x_93 : f32 = v1.y;
-    let x_96 : f32 = v1.z;
-    let x_99 : f32 = v1.w;
-    let x_102 : f32 = x_8.x_GLF_uniform_float_values[3];
-    a = pow((((x_91 + x_93) + x_96) + x_99), x_102);
-
-    continuing {
-      let x_18 : i32 = i;
-      i = (x_18 + 1);
-    }
-  }
-  let x_104 : f32 = a;
-  let x_106 : f32 = x_8.x_GLF_uniform_float_values[1];
-  if ((x_104 == x_106)) {
-    let x_111 : vec4<f32> = v1;
-    x_GLF_v1 = x_111;
-  } else {
-    let x_20 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_113 : f32 = f32(x_20);
-    x_GLF_v1 = vec4<f32>(x_113, x_113, x_113, x_113);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_v1_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_v1);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3a47377..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    const int x_33 = i;
-    const float x_35 = asfloat(x_7[0].y);
-    if ((x_33 < int(x_35))) {
-    } else {
-      break;
-    }
-    if ((a > 0)) {
-      break;
-    }
-    const float x_44 = asfloat(x_7[0].y);
-    a = ((int(x_44) * 2) / 2);
-    {
-      i = (i + 1);
-    }
-  }
-  if ((a == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index a821844..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_33 = i;
-    float const x_35 = x_7.injectionSwitch.y;
-    if ((x_33 < int(x_35))) {
-    } else {
-      break;
-    }
-    int const x_39 = a;
-    if ((x_39 > 0)) {
-      break;
-    }
-    float const x_44 = x_7.injectionSwitch.y;
-    a = (as_type<int>((as_type<uint>(int(x_44)) * as_type<uint>(2))) / 2);
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  int const x_50 = a;
-  if ((x_50 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0d506da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %59 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %60 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %61 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %19
-          %i = OpVariable %_ptr_Function_int Function %19
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %22
-         %22 = OpLabel
-               OpLoopMerge %23 %24 None
-               OpBranch %25
-         %25 = OpLabel
-         %26 = OpLoad %int %i
-         %31 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %32 = OpLoad %float %31
-         %33 = OpConvertFToS %int %32
-         %34 = OpSLessThan %bool %26 %33
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-               OpBranch %36
-         %38 = OpLabel
-               OpBranch %23
-         %36 = OpLabel
-         %39 = OpLoad %int %a
-         %40 = OpSGreaterThan %bool %39 %int_0
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-               OpBranch %23
-         %41 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %44 = OpLoad %float %43
-         %45 = OpConvertFToS %int %44
-         %47 = OpIMul %int %45 %int_2
-         %48 = OpSDiv %int %47 %int_2
-               OpStore %a %48
-               OpBranch %24
-         %24 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %i %51
-               OpBranch %22
-         %23 = OpLabel
-         %52 = OpLoad %int %a
-         %53 = OpIEqual %bool %52 %int_1
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpStore %x_GLF_color %59
-               OpBranch %54
-         %56 = OpLabel
-               OpStore %x_GLF_color %60
-               OpBranch %54
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %61
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-         %66 = OpLoad %v4float %x_GLF_color
-         %67 = OpCompositeConstruct %main_out %66
-               OpReturnValue %67
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %69 = OpLabel
-         %70 = OpFunctionCall %main_out %main_inner
-         %71 = OpCompositeExtract %v4float %70 0
-               OpStore %x_GLF_color_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 238c476..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : f32 = x_7.injectionSwitch.y;
-    if ((x_33 < i32(x_35))) {
-    } else {
-      break;
-    }
-    let x_39 : i32 = a;
-    if ((x_39 > 0)) {
-      break;
-    }
-    let x_44 : f32 = x_7.injectionSwitch.y;
-    a = ((i32(x_44) * 2) / 2);
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_50 : i32 = a;
-  if ((x_50 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3a47377..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    const int x_33 = i;
-    const float x_35 = asfloat(x_7[0].y);
-    if ((x_33 < int(x_35))) {
-    } else {
-      break;
-    }
-    if ((a > 0)) {
-      break;
-    }
-    const float x_44 = asfloat(x_7[0].y);
-    a = ((int(x_44) * 2) / 2);
-    {
-      i = (i + 1);
-    }
-  }
-  if ((a == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index a821844..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_33 = i;
-    float const x_35 = x_7.injectionSwitch.y;
-    if ((x_33 < int(x_35))) {
-    } else {
-      break;
-    }
-    int const x_39 = a;
-    if ((x_39 > 0)) {
-      break;
-    }
-    float const x_44 = x_7.injectionSwitch.y;
-    a = (as_type<int>((as_type<uint>(int(x_44)) * as_type<uint>(2))) / 2);
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  int const x_50 = a;
-  if ((x_50 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0d506da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %59 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %60 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %61 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %19
-          %i = OpVariable %_ptr_Function_int Function %19
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %22
-         %22 = OpLabel
-               OpLoopMerge %23 %24 None
-               OpBranch %25
-         %25 = OpLabel
-         %26 = OpLoad %int %i
-         %31 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %32 = OpLoad %float %31
-         %33 = OpConvertFToS %int %32
-         %34 = OpSLessThan %bool %26 %33
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-               OpBranch %36
-         %38 = OpLabel
-               OpBranch %23
-         %36 = OpLabel
-         %39 = OpLoad %int %a
-         %40 = OpSGreaterThan %bool %39 %int_0
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-               OpBranch %23
-         %41 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %44 = OpLoad %float %43
-         %45 = OpConvertFToS %int %44
-         %47 = OpIMul %int %45 %int_2
-         %48 = OpSDiv %int %47 %int_2
-               OpStore %a %48
-               OpBranch %24
-         %24 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %i %51
-               OpBranch %22
-         %23 = OpLabel
-         %52 = OpLoad %int %a
-         %53 = OpIEqual %bool %52 %int_1
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %56
-         %55 = OpLabel
-               OpStore %x_GLF_color %59
-               OpBranch %54
-         %56 = OpLabel
-               OpStore %x_GLF_color %60
-               OpBranch %54
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %61
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-         %66 = OpLoad %v4float %x_GLF_color
-         %67 = OpCompositeConstruct %main_out %66
-               OpReturnValue %67
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %69 = OpLabel
-         %70 = OpFunctionCall %main_out %main_inner
-         %71 = OpCompositeExtract %v4float %70 0
-               OpStore %x_GLF_color_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 238c476..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : f32 = x_7.injectionSwitch.y;
-    if ((x_33 < i32(x_35))) {
-    } else {
-      break;
-    }
-    let x_39 : i32 = a;
-    if ((x_39 > 0)) {
-      break;
-    }
-    let x_44 : f32 = x_7.injectionSwitch.y;
-    a = ((i32(x_44) * 2) / 2);
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_50 : i32 = a;
-  if ((x_50 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e86627e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_34 = asint(x_6[1].x);
-  const int x_37 = asint(x_6[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_31), float(x_34), float(x_37), float(x_40));
-  const float x_44 = gl_FragCoord.y;
-  if ((x_44 < 0.0f)) {
-    const int x_49 = asint(x_6[1].x);
-    const float x_50 = float(x_49);
-    x_GLF_color = float4(x_50, x_50, x_50, x_50);
-  }
-  const int x_53 = asint(x_6[1].x);
-  i = x_53;
-  while (true) {
-    const int x_58 = i;
-    const int x_60 = asint(x_6[2].x);
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    const float x_64 = gl_FragCoord.x;
-    if ((x_64 > 0.0f)) {
-      const float x_69 = gl_FragCoord.y;
-      if ((x_69 < 0.0f)) {
-        const int x_74 = asint(x_6[1].x);
-        const float x_75 = float(x_74);
-        x_GLF_color = float4(x_75, x_75, x_75, x_75);
-        break;
-      }
-    }
-    const float x_78 = gl_FragCoord.x;
-    if ((x_78 > 0.0f)) {
-      const float x_83 = gl_FragCoord.y;
-      if ((x_83 < 0.0f)) {
-        const int x_88 = asint(x_6[1].x);
-        const float x_89 = float(x_88);
-        x_GLF_color = float4(x_89, x_89, x_89, x_89);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.msl
deleted file mode 100644
index 270bbce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_34 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_31), float(x_34), float(x_37), float(x_40));
-  float const x_44 = (*(tint_symbol_4)).y;
-  if ((x_44 < 0.0f)) {
-    int const x_49 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_50 = float(x_49);
-    *(tint_symbol_3) = float4(x_50, x_50, x_50, x_50);
-  }
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_53;
-  while (true) {
-    int const x_58 = i;
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    float const x_64 = (*(tint_symbol_4)).x;
-    if ((x_64 > 0.0f)) {
-      float const x_69 = (*(tint_symbol_4)).y;
-      if ((x_69 < 0.0f)) {
-        int const x_74 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        float const x_75 = float(x_74);
-        *(tint_symbol_3) = float4(x_75, x_75, x_75, x_75);
-        break;
-      }
-    }
-    float const x_78 = (*(tint_symbol_4)).x;
-    if ((x_78 > 0.0f)) {
-      float const x_83 = (*(tint_symbol_4)).y;
-      if ((x_83 < 0.0f)) {
-        int const x_88 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        float const x_89 = float(x_88);
-        *(tint_symbol_3) = float4(x_89, x_89, x_89, x_89);
-      }
-    }
-    {
-      int const x_91 = i;
-      i = as_type<int>((as_type<uint>(x_91) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6cb11ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,181 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 112
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %99 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %24
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %29 = OpLoad %int %28
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %32 = OpLoad %int %31
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %36 = OpLoad %int %35
-         %37 = OpConvertSToF %float %29
-         %38 = OpConvertSToF %float %32
-         %39 = OpConvertSToF %float %34
-         %40 = OpConvertSToF %float %36
-         %41 = OpCompositeConstruct %v4float %37 %38 %39 %40
-               OpStore %x_GLF_color %41
-         %44 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %45 = OpLoad %float %44
-         %47 = OpFOrdLessThan %bool %45 %float_0
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %49
-         %50 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %52
-         %54 = OpCompositeConstruct %v4float %53 %53 %53 %53
-               OpStore %x_GLF_color %54
-               OpBranch %49
-         %49 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %56 = OpLoad %int %55
-               OpStore %i %56
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpSLessThan %bool %61 %64
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-               OpBranch %66
-         %68 = OpLabel
-               OpBranch %58
-         %66 = OpLabel
-         %69 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %70 = OpLoad %float %69
-         %71 = OpFOrdGreaterThan %bool %70 %float_0
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-         %74 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %75 = OpLoad %float %74
-         %76 = OpFOrdLessThan %bool %75 %float_0
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %77
-         %78 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpConvertSToF %float %80
-         %82 = OpCompositeConstruct %v4float %81 %81 %81 %81
-               OpStore %x_GLF_color %82
-               OpBranch %58
-         %77 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-         %83 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %84 = OpLoad %float %83
-         %85 = OpFOrdGreaterThan %bool %84 %float_0
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %89 = OpLoad %float %88
-         %90 = OpFOrdLessThan %bool %89 %float_0
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %91
-         %92 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %94 = OpLoad %int %93
-         %95 = OpConvertSToF %float %94
-         %96 = OpCompositeConstruct %v4float %95 %95 %95 %95
-               OpStore %x_GLF_color %96
-               OpBranch %91
-         %91 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-         %97 = OpLoad %int %i
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %i %98
-               OpBranch %57
-         %58 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %99
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %103 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %104 = OpFunctionCall %void %main_1
-        %105 = OpLoad %v4float %x_GLF_color
-        %106 = OpCompositeConstruct %main_out %105
-               OpReturnValue %106
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %108 = OpLabel
-        %110 = OpLoad %v4float %gl_FragCoord_param_1
-        %109 = OpFunctionCall %main_out %main_inner %110
-        %111 = OpCompositeExtract %v4float %109 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1eebdd9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_34 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_31), f32(x_34), f32(x_37), f32(x_40));
-  let x_44 : f32 = gl_FragCoord.y;
-  if ((x_44 < 0.0)) {
-    let x_49 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_50 : f32 = f32(x_49);
-    x_GLF_color = vec4<f32>(x_50, x_50, x_50, x_50);
-  }
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_53;
-  loop {
-    let x_58 : i32 = i;
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    let x_64 : f32 = gl_FragCoord.x;
-    if ((x_64 > 0.0)) {
-      let x_69 : f32 = gl_FragCoord.y;
-      if ((x_69 < 0.0)) {
-        let x_74 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_75 : f32 = f32(x_74);
-        x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
-        break;
-      }
-    }
-    let x_78 : f32 = gl_FragCoord.x;
-    if ((x_78 > 0.0)) {
-      let x_83 : f32 = gl_FragCoord.y;
-      if ((x_83 < 0.0)) {
-        let x_88 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_89 : f32 = f32(x_88);
-        x_GLF_color = vec4<f32>(x_89, x_89, x_89, x_89);
-      }
-    }
-
-    continuing {
-      let x_91 : i32 = i;
-      i = (x_91 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e86627e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const int x_34 = asint(x_6[1].x);
-  const int x_37 = asint(x_6[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_40 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_31), float(x_34), float(x_37), float(x_40));
-  const float x_44 = gl_FragCoord.y;
-  if ((x_44 < 0.0f)) {
-    const int x_49 = asint(x_6[1].x);
-    const float x_50 = float(x_49);
-    x_GLF_color = float4(x_50, x_50, x_50, x_50);
-  }
-  const int x_53 = asint(x_6[1].x);
-  i = x_53;
-  while (true) {
-    const int x_58 = i;
-    const int x_60 = asint(x_6[2].x);
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    const float x_64 = gl_FragCoord.x;
-    if ((x_64 > 0.0f)) {
-      const float x_69 = gl_FragCoord.y;
-      if ((x_69 < 0.0f)) {
-        const int x_74 = asint(x_6[1].x);
-        const float x_75 = float(x_74);
-        x_GLF_color = float4(x_75, x_75, x_75, x_75);
-        break;
-      }
-    }
-    const float x_78 = gl_FragCoord.x;
-    if ((x_78 > 0.0f)) {
-      const float x_83 = gl_FragCoord.y;
-      if ((x_83 < 0.0f)) {
-        const int x_88 = asint(x_6[1].x);
-        const float x_89 = float(x_88);
-        x_GLF_color = float4(x_89, x_89, x_89, x_89);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.msl
deleted file mode 100644
index 270bbce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_34 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_31), float(x_34), float(x_37), float(x_40));
-  float const x_44 = (*(tint_symbol_4)).y;
-  if ((x_44 < 0.0f)) {
-    int const x_49 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_50 = float(x_49);
-    *(tint_symbol_3) = float4(x_50, x_50, x_50, x_50);
-  }
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_53;
-  while (true) {
-    int const x_58 = i;
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    float const x_64 = (*(tint_symbol_4)).x;
-    if ((x_64 > 0.0f)) {
-      float const x_69 = (*(tint_symbol_4)).y;
-      if ((x_69 < 0.0f)) {
-        int const x_74 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        float const x_75 = float(x_74);
-        *(tint_symbol_3) = float4(x_75, x_75, x_75, x_75);
-        break;
-      }
-    }
-    float const x_78 = (*(tint_symbol_4)).x;
-    if ((x_78 > 0.0f)) {
-      float const x_83 = (*(tint_symbol_4)).y;
-      if ((x_83 < 0.0f)) {
-        int const x_88 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        float const x_89 = float(x_88);
-        *(tint_symbol_3) = float4(x_89, x_89, x_89, x_89);
-      }
-    }
-    {
-      int const x_91 = i;
-      i = as_type<int>((as_type<uint>(x_91) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6cb11ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,181 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 112
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %99 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %24
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %29 = OpLoad %int %28
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %32 = OpLoad %int %31
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %36 = OpLoad %int %35
-         %37 = OpConvertSToF %float %29
-         %38 = OpConvertSToF %float %32
-         %39 = OpConvertSToF %float %34
-         %40 = OpConvertSToF %float %36
-         %41 = OpCompositeConstruct %v4float %37 %38 %39 %40
-               OpStore %x_GLF_color %41
-         %44 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %45 = OpLoad %float %44
-         %47 = OpFOrdLessThan %bool %45 %float_0
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %49
-         %50 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %52
-         %54 = OpCompositeConstruct %v4float %53 %53 %53 %53
-               OpStore %x_GLF_color %54
-               OpBranch %49
-         %49 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %56 = OpLoad %int %55
-               OpStore %i %56
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpSLessThan %bool %61 %64
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-               OpBranch %66
-         %68 = OpLabel
-               OpBranch %58
-         %66 = OpLabel
-         %69 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %70 = OpLoad %float %69
-         %71 = OpFOrdGreaterThan %bool %70 %float_0
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-         %74 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %75 = OpLoad %float %74
-         %76 = OpFOrdLessThan %bool %75 %float_0
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %77
-         %78 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpConvertSToF %float %80
-         %82 = OpCompositeConstruct %v4float %81 %81 %81 %81
-               OpStore %x_GLF_color %82
-               OpBranch %58
-         %77 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-         %83 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %84 = OpLoad %float %83
-         %85 = OpFOrdGreaterThan %bool %84 %float_0
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %89 = OpLoad %float %88
-         %90 = OpFOrdLessThan %bool %89 %float_0
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %91
-         %92 = OpLabel
-         %93 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %94 = OpLoad %int %93
-         %95 = OpConvertSToF %float %94
-         %96 = OpCompositeConstruct %v4float %95 %95 %95 %95
-               OpStore %x_GLF_color %96
-               OpBranch %91
-         %91 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-         %97 = OpLoad %int %i
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %i %98
-               OpBranch %57
-         %58 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %99
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %103 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %104 = OpFunctionCall %void %main_1
-        %105 = OpLoad %v4float %x_GLF_color
-        %106 = OpCompositeConstruct %main_out %105
-               OpReturnValue %106
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %108 = OpLabel
-        %110 = OpLoad %v4float %gl_FragCoord_param_1
-        %109 = OpFunctionCall %main_out %main_inner %110
-        %111 = OpCompositeExtract %v4float %109 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1eebdd9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-conditions-break/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_34 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_31), f32(x_34), f32(x_37), f32(x_40));
-  let x_44 : f32 = gl_FragCoord.y;
-  if ((x_44 < 0.0)) {
-    let x_49 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_50 : f32 = f32(x_49);
-    x_GLF_color = vec4<f32>(x_50, x_50, x_50, x_50);
-  }
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_53;
-  loop {
-    let x_58 : i32 = i;
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_58 < x_60)) {
-    } else {
-      break;
-    }
-    let x_64 : f32 = gl_FragCoord.x;
-    if ((x_64 > 0.0)) {
-      let x_69 : f32 = gl_FragCoord.y;
-      if ((x_69 < 0.0)) {
-        let x_74 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_75 : f32 = f32(x_74);
-        x_GLF_color = vec4<f32>(x_75, x_75, x_75, x_75);
-        break;
-      }
-    }
-    let x_78 : f32 = gl_FragCoord.x;
-    if ((x_78 > 0.0)) {
-      let x_83 : f32 = gl_FragCoord.y;
-      if ((x_83 < 0.0)) {
-        let x_88 : i32 = x_6.x_GLF_uniform_int_values[1];
-        let x_89 : f32 = f32(x_88);
-        x_GLF_color = vec4<f32>(x_89, x_89, x_89, x_89);
-      }
-    }
-
-    continuing {
-      let x_91 : i32 = i;
-      i = (x_91 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7a53104..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_i1_(inout int x) {
-  int a = 0;
-  int i = 0;
-  int indexable[4] = (int[4])0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_72 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  a = x_72;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_74 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  i = x_74;
-  while (true) {
-    const int x_79 = i;
-    const int x_81 = asint(x_8[1].x);
-    if ((x_79 < x_81)) {
-    } else {
-      break;
-    }
-    const int x_85 = asint(x_8[3].x);
-    const int x_87 = asint(x_8[3].x);
-    const int x_89 = asint(x_8[3].x);
-    const int x_91 = asint(x_8[3].x);
-    const int x_93 = a;
-    const int tint_symbol_2[4] = {x_85, x_87, x_89, x_91};
-    indexable = tint_symbol_2;
-    const int x_95 = indexable[x_93];
-    const int x_96 = x;
-    if ((x_95 > x_96)) {
-      if (true) {
-        const int x_105 = asint(x_8[3].x);
-        return x_105;
-      } else {
-        const int x_107 = asint(x_8[3].x);
-        a = x_107;
-      }
-    } else {
-      if (true) {
-        const int x_111 = asint(x_8[4].x);
-        return x_111;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_115 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  return x_115;
-}
-
-void main_1() {
-  int a_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_39 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  param = x_39;
-  const int x_40 = func_i1_(param);
-  a_1 = x_40;
-  const int x_42 = asint(x_8[3].x);
-  param_1 = x_42;
-  const int x_43 = func_i1_(param_1);
-  a_1 = (a_1 + x_43);
-  const int x_46 = a_1;
-  const int x_48 = asint(x_8[2].x);
-  if ((x_46 == x_48)) {
-    const int x_54 = asint(x_8[3].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_8[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_63 = asint(x_8[3].x);
-    x_GLF_color = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_67 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_68 = float(x_67);
-    x_GLF_color = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9902d16..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[4];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_i1_(constant buf0& x_8, thread int* const x) {
-  int a = 0;
-  int i = 0;
-  tint_array_wrapper_1 indexable = {};
-  int const x_72 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  a = x_72;
-  int const x_74 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i = x_74;
-  while (true) {
-    int const x_79 = i;
-    int const x_81 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_79 < x_81)) {
-    } else {
-      break;
-    }
-    int const x_85 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_87 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_89 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_91 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_93 = a;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_85, x_87, x_89, x_91}};
-    indexable = tint_symbol_2;
-    int const x_95 = indexable.arr[x_93];
-    int const x_96 = *(x);
-    if ((x_95 > x_96)) {
-      if (true) {
-        int const x_105 = x_8.x_GLF_uniform_int_values.arr[3].el;
-        return x_105;
-      } else {
-        int const x_107 = x_8.x_GLF_uniform_int_values.arr[3].el;
-        a = x_107;
-      }
-    } else {
-      if (true) {
-        int const x_111 = x_8.x_GLF_uniform_int_values.arr[4].el;
-        return x_111;
-      }
-    }
-    {
-      int const x_112 = i;
-      i = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-    }
-  }
-  int const x_115 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  return x_115;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  int a_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int const x_39 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  param = x_39;
-  int const x_40 = func_i1_(x_8, &(param));
-  a_1 = x_40;
-  int const x_42 = x_8.x_GLF_uniform_int_values.arr[3].el;
-  param_1 = x_42;
-  int const x_43 = func_i1_(x_8, &(param_1));
-  int const x_44 = a_1;
-  a_1 = as_type<int>((as_type<uint>(x_44) + as_type<uint>(x_43)));
-  int const x_46 = a_1;
-  int const x_48 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_46 == x_48)) {
-    int const x_54 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_57 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_63 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_4) = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    int const x_67 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_68 = float(x_67);
-    *(tint_symbol_4) = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_5) {
-  main_1(x_8, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 59ab268..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,213 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 137
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %indexable "indexable"
-               OpName %main_1 "main_1"
-               OpName %a_1 "a_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpTypeFunction %int %_ptr_Function_int
-         %21 = OpConstantNull %int
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-%_ptr_Function__arr_int_uint_4 = OpTypePointer Function %_arr_int_uint_4
-         %27 = OpConstantNull %_arr_int_uint_4
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-       %true = OpConstantTrue %bool
-      %int_4 = OpConstant %int 4
-       %void = OpTypeVoid
-         %84 = OpTypeFunction %void
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %126 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %int None %15
-          %x = OpFunctionParameter %_ptr_Function_int
-         %19 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_4 Function %27
-         %31 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %32 = OpLoad %int %31
-               OpStore %a %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %34 = OpLoad %int %33
-               OpStore %i %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpSLessThan %bool %39 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %36
-         %45 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %56 = OpLoad %int %55
-         %57 = OpLoad %int %a
-         %58 = OpCompositeConstruct %_arr_int_uint_4 %50 %52 %54 %56
-               OpStore %indexable %58
-         %59 = OpAccessChain %_ptr_Function_int %indexable %57
-         %60 = OpLoad %int %59
-         %62 = OpLoad %int %x
-         %63 = OpSGreaterThan %bool %60 %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %66
-         %65 = OpLabel
-               OpSelectionMerge %68 None
-               OpBranchConditional %true %69 %70
-         %69 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %72 = OpLoad %int %71
-               OpReturnValue %72
-         %70 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %74 = OpLoad %int %73
-               OpStore %a %74
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpSelectionMerge %75 None
-               OpBranchConditional %true %76 %75
-         %76 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %79 = OpLoad %int %78
-               OpReturnValue %79
-         %75 = OpLabel
-               OpBranch %64
-         %64 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %80 = OpLoad %int %i
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %i %81
-               OpBranch %35
-         %36 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %83 = OpLoad %int %82
-               OpReturnValue %83
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %84
-         %87 = OpLabel
-        %a_1 = OpVariable %_ptr_Function_int Function %21
-      %param = OpVariable %_ptr_Function_int Function %21
-    %param_1 = OpVariable %_ptr_Function_int Function %21
-         %91 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %92 = OpLoad %int %91
-               OpStore %param %92
-         %93 = OpFunctionCall %int %func_i1_ %param
-               OpStore %a_1 %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %96 = OpLoad %int %95
-               OpStore %param_1 %96
-         %97 = OpFunctionCall %int %func_i1_ %param_1
-         %99 = OpLoad %int %a_1
-        %100 = OpIAdd %int %99 %97
-               OpStore %a_1 %100
-        %101 = OpLoad %int %a_1
-        %103 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %104 = OpLoad %int %103
-        %105 = OpIEqual %bool %101 %104
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %108
-        %107 = OpLabel
-        %109 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %112 = OpLoad %int %111
-        %113 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %110
-        %118 = OpConvertSToF %float %112
-        %119 = OpConvertSToF %float %114
-        %120 = OpConvertSToF %float %116
-        %121 = OpCompositeConstruct %v4float %117 %118 %119 %120
-               OpStore %x_GLF_color %121
-               OpBranch %106
-        %108 = OpLabel
-        %122 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %123 = OpLoad %int %122
-        %124 = OpConvertSToF %float %123
-        %125 = OpCompositeConstruct %v4float %124 %124 %124 %124
-               OpStore %x_GLF_color %125
-               OpBranch %106
-        %106 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %126
-        %129 = OpLabel
-        %130 = OpFunctionCall %void %main_1
-        %131 = OpLoad %v4float %x_GLF_color
-        %132 = OpCompositeConstruct %main_out %131
-               OpReturnValue %132
-               OpFunctionEnd
-       %main = OpFunction %void None %84
-        %134 = OpLabel
-        %135 = OpFunctionCall %main_out %main_inner
-        %136 = OpCompositeExtract %v4float %135 0
-               OpStore %x_GLF_color_1_1 %136
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9e7764a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) -> i32 {
-  var a : i32;
-  var i : i32;
-  var indexable : array<i32, 4>;
-  let x_72 : i32 = x_8.x_GLF_uniform_int_values[0];
-  a = x_72;
-  let x_74 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i = x_74;
-  loop {
-    let x_79 : i32 = i;
-    let x_81 : i32 = x_8.x_GLF_uniform_int_values[1];
-    if ((x_79 < x_81)) {
-    } else {
-      break;
-    }
-    let x_85 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_87 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_89 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_91 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_93 : i32 = a;
-    indexable = array<i32, 4>(x_85, x_87, x_89, x_91);
-    let x_95 : i32 = indexable[x_93];
-    let x_96 : i32 = *(x);
-    if ((x_95 > x_96)) {
-      if (true) {
-        let x_105 : i32 = x_8.x_GLF_uniform_int_values[3];
-        return x_105;
-      } else {
-        let x_107 : i32 = x_8.x_GLF_uniform_int_values[3];
-        a = x_107;
-      }
-    } else {
-      if (true) {
-        let x_111 : i32 = x_8.x_GLF_uniform_int_values[4];
-        return x_111;
-      }
-    }
-
-    continuing {
-      let x_112 : i32 = i;
-      i = (x_112 + 1);
-    }
-  }
-  let x_115 : i32 = x_8.x_GLF_uniform_int_values[0];
-  return x_115;
-}
-
-fn main_1() {
-  var a_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  let x_39 : i32 = x_8.x_GLF_uniform_int_values[0];
-  param = x_39;
-  let x_40 : i32 = func_i1_(&(param));
-  a_1 = x_40;
-  let x_42 : i32 = x_8.x_GLF_uniform_int_values[3];
-  param_1 = x_42;
-  let x_43 : i32 = func_i1_(&(param_1));
-  let x_44 : i32 = a_1;
-  a_1 = (x_44 + x_43);
-  let x_46 : i32 = a_1;
-  let x_48 : i32 = x_8.x_GLF_uniform_int_values[2];
-  if ((x_46 == x_48)) {
-    let x_54 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_57 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_63 : i32 = x_8.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_54), f32(x_57), f32(x_60), f32(x_63));
-  } else {
-    let x_67 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_68 : f32 = f32(x_67);
-    x_GLF_color = vec4<f32>(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7a53104..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_i1_(inout int x) {
-  int a = 0;
-  int i = 0;
-  int indexable[4] = (int[4])0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_72 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  a = x_72;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_74 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  i = x_74;
-  while (true) {
-    const int x_79 = i;
-    const int x_81 = asint(x_8[1].x);
-    if ((x_79 < x_81)) {
-    } else {
-      break;
-    }
-    const int x_85 = asint(x_8[3].x);
-    const int x_87 = asint(x_8[3].x);
-    const int x_89 = asint(x_8[3].x);
-    const int x_91 = asint(x_8[3].x);
-    const int x_93 = a;
-    const int tint_symbol_2[4] = {x_85, x_87, x_89, x_91};
-    indexable = tint_symbol_2;
-    const int x_95 = indexable[x_93];
-    const int x_96 = x;
-    if ((x_95 > x_96)) {
-      if (true) {
-        const int x_105 = asint(x_8[3].x);
-        return x_105;
-      } else {
-        const int x_107 = asint(x_8[3].x);
-        a = x_107;
-      }
-    } else {
-      if (true) {
-        const int x_111 = asint(x_8[4].x);
-        return x_111;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_115 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  return x_115;
-}
-
-void main_1() {
-  int a_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_39 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  param = x_39;
-  const int x_40 = func_i1_(param);
-  a_1 = x_40;
-  const int x_42 = asint(x_8[3].x);
-  param_1 = x_42;
-  const int x_43 = func_i1_(param_1);
-  a_1 = (a_1 + x_43);
-  const int x_46 = a_1;
-  const int x_48 = asint(x_8[2].x);
-  if ((x_46 == x_48)) {
-    const int x_54 = asint(x_8[3].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_8[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_63 = asint(x_8[3].x);
-    x_GLF_color = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_67 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_68 = float(x_67);
-    x_GLF_color = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9902d16..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[4];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_i1_(constant buf0& x_8, thread int* const x) {
-  int a = 0;
-  int i = 0;
-  tint_array_wrapper_1 indexable = {};
-  int const x_72 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  a = x_72;
-  int const x_74 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i = x_74;
-  while (true) {
-    int const x_79 = i;
-    int const x_81 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_79 < x_81)) {
-    } else {
-      break;
-    }
-    int const x_85 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_87 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_89 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_91 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_93 = a;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_85, x_87, x_89, x_91}};
-    indexable = tint_symbol_2;
-    int const x_95 = indexable.arr[x_93];
-    int const x_96 = *(x);
-    if ((x_95 > x_96)) {
-      if (true) {
-        int const x_105 = x_8.x_GLF_uniform_int_values.arr[3].el;
-        return x_105;
-      } else {
-        int const x_107 = x_8.x_GLF_uniform_int_values.arr[3].el;
-        a = x_107;
-      }
-    } else {
-      if (true) {
-        int const x_111 = x_8.x_GLF_uniform_int_values.arr[4].el;
-        return x_111;
-      }
-    }
-    {
-      int const x_112 = i;
-      i = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-    }
-  }
-  int const x_115 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  return x_115;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  int a_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int const x_39 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  param = x_39;
-  int const x_40 = func_i1_(x_8, &(param));
-  a_1 = x_40;
-  int const x_42 = x_8.x_GLF_uniform_int_values.arr[3].el;
-  param_1 = x_42;
-  int const x_43 = func_i1_(x_8, &(param_1));
-  int const x_44 = a_1;
-  a_1 = as_type<int>((as_type<uint>(x_44) + as_type<uint>(x_43)));
-  int const x_46 = a_1;
-  int const x_48 = x_8.x_GLF_uniform_int_values.arr[2].el;
-  if ((x_46 == x_48)) {
-    int const x_54 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    int const x_57 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_63 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_4) = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    int const x_67 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_68 = float(x_67);
-    *(tint_symbol_4) = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_5) {
-  main_1(x_8, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 59ab268..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,213 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 137
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %indexable "indexable"
-               OpName %main_1 "main_1"
-               OpName %a_1 "a_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpTypeFunction %int %_ptr_Function_int
-         %21 = OpConstantNull %int
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-%_ptr_Function__arr_int_uint_4 = OpTypePointer Function %_arr_int_uint_4
-         %27 = OpConstantNull %_arr_int_uint_4
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-       %true = OpConstantTrue %bool
-      %int_4 = OpConstant %int 4
-       %void = OpTypeVoid
-         %84 = OpTypeFunction %void
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %126 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %int None %15
-          %x = OpFunctionParameter %_ptr_Function_int
-         %19 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_4 Function %27
-         %31 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %32 = OpLoad %int %31
-               OpStore %a %32
-         %33 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %34 = OpLoad %int %33
-               OpStore %i %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %int %i
-         %41 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpSLessThan %bool %39 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %36
-         %45 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %56 = OpLoad %int %55
-         %57 = OpLoad %int %a
-         %58 = OpCompositeConstruct %_arr_int_uint_4 %50 %52 %54 %56
-               OpStore %indexable %58
-         %59 = OpAccessChain %_ptr_Function_int %indexable %57
-         %60 = OpLoad %int %59
-         %62 = OpLoad %int %x
-         %63 = OpSGreaterThan %bool %60 %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %66
-         %65 = OpLabel
-               OpSelectionMerge %68 None
-               OpBranchConditional %true %69 %70
-         %69 = OpLabel
-         %71 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %72 = OpLoad %int %71
-               OpReturnValue %72
-         %70 = OpLabel
-         %73 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %74 = OpLoad %int %73
-               OpStore %a %74
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpSelectionMerge %75 None
-               OpBranchConditional %true %76 %75
-         %76 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_4
-         %79 = OpLoad %int %78
-               OpReturnValue %79
-         %75 = OpLabel
-               OpBranch %64
-         %64 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %80 = OpLoad %int %i
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %i %81
-               OpBranch %35
-         %36 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %83 = OpLoad %int %82
-               OpReturnValue %83
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %84
-         %87 = OpLabel
-        %a_1 = OpVariable %_ptr_Function_int Function %21
-      %param = OpVariable %_ptr_Function_int Function %21
-    %param_1 = OpVariable %_ptr_Function_int Function %21
-         %91 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %92 = OpLoad %int %91
-               OpStore %param %92
-         %93 = OpFunctionCall %int %func_i1_ %param
-               OpStore %a_1 %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %96 = OpLoad %int %95
-               OpStore %param_1 %96
-         %97 = OpFunctionCall %int %func_i1_ %param_1
-         %99 = OpLoad %int %a_1
-        %100 = OpIAdd %int %99 %97
-               OpStore %a_1 %100
-        %101 = OpLoad %int %a_1
-        %103 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-        %104 = OpLoad %int %103
-        %105 = OpIEqual %bool %101 %104
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %108
-        %107 = OpLabel
-        %109 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %112 = OpLoad %int %111
-        %113 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %110
-        %118 = OpConvertSToF %float %112
-        %119 = OpConvertSToF %float %114
-        %120 = OpConvertSToF %float %116
-        %121 = OpCompositeConstruct %v4float %117 %118 %119 %120
-               OpStore %x_GLF_color %121
-               OpBranch %106
-        %108 = OpLabel
-        %122 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %123 = OpLoad %int %122
-        %124 = OpConvertSToF %float %123
-        %125 = OpCompositeConstruct %v4float %124 %124 %124 %124
-               OpStore %x_GLF_color %125
-               OpBranch %106
-        %106 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %126
-        %129 = OpLabel
-        %130 = OpFunctionCall %void %main_1
-        %131 = OpLoad %v4float %x_GLF_color
-        %132 = OpCompositeConstruct %main_out %131
-               OpReturnValue %132
-               OpFunctionEnd
-       %main = OpFunction %void None %84
-        %134 = OpLabel
-        %135 = OpFunctionCall %main_out %main_inner
-        %136 = OpCompositeExtract %v4float %135 0
-               OpStore %x_GLF_color_1_1 %136
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9e7764a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matching-if-always-true-inside-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) -> i32 {
-  var a : i32;
-  var i : i32;
-  var indexable : array<i32, 4>;
-  let x_72 : i32 = x_8.x_GLF_uniform_int_values[0];
-  a = x_72;
-  let x_74 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i = x_74;
-  loop {
-    let x_79 : i32 = i;
-    let x_81 : i32 = x_8.x_GLF_uniform_int_values[1];
-    if ((x_79 < x_81)) {
-    } else {
-      break;
-    }
-    let x_85 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_87 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_89 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_91 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_93 : i32 = a;
-    indexable = array<i32, 4>(x_85, x_87, x_89, x_91);
-    let x_95 : i32 = indexable[x_93];
-    let x_96 : i32 = *(x);
-    if ((x_95 > x_96)) {
-      if (true) {
-        let x_105 : i32 = x_8.x_GLF_uniform_int_values[3];
-        return x_105;
-      } else {
-        let x_107 : i32 = x_8.x_GLF_uniform_int_values[3];
-        a = x_107;
-      }
-    } else {
-      if (true) {
-        let x_111 : i32 = x_8.x_GLF_uniform_int_values[4];
-        return x_111;
-      }
-    }
-
-    continuing {
-      let x_112 : i32 = i;
-      i = (x_112 + 1);
-    }
-  }
-  let x_115 : i32 = x_8.x_GLF_uniform_int_values[0];
-  return x_115;
-}
-
-fn main_1() {
-  var a_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  let x_39 : i32 = x_8.x_GLF_uniform_int_values[0];
-  param = x_39;
-  let x_40 : i32 = func_i1_(&(param));
-  a_1 = x_40;
-  let x_42 : i32 = x_8.x_GLF_uniform_int_values[3];
-  param_1 = x_42;
-  let x_43 : i32 = func_i1_(&(param_1));
-  let x_44 : i32 = a_1;
-  a_1 = (x_44 + x_43);
-  let x_46 : i32 = a_1;
-  let x_48 : i32 = x_8.x_GLF_uniform_int_values[2];
-  if ((x_46 == x_48)) {
-    let x_54 : i32 = x_8.x_GLF_uniform_int_values[3];
-    let x_57 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_63 : i32 = x_8.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_54), f32(x_57), f32(x_60), f32(x_63));
-  } else {
-    let x_67 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_68 : f32 = f32(x_67);
-    x_GLF_color = vec4<f32>(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 43e11b0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,51 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_30 = float(x_29);
-  m = transpose(transpose(float2x2(float2(x_30, 0.0f), float2(0.0f, x_30))));
-  const float2x2 x_36 = m;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_39 = float(x_38);
-  const float2x2 x_42 = float2x2(float2(x_39, 0.0f), float2(0.0f, x_39));
-  if ((all((x_36[0u] == x_42[0u])) & all((x_36[1u] == x_42[1u])))) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_59 = asint(x_6[1].x);
-    const int x_62 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  } else {
-    const int x_69 = asint(x_6[1].x);
-    const float x_70 = float(x_69);
-    x_GLF_color = float4(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2b1c62c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2x2 m = float2x2(0.0f);
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_30 = float(x_29);
-  m = transpose(transpose(float2x2(float2(x_30, 0.0f), float2(0.0f, x_30))));
-  float2x2 const x_36 = m;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_39 = float(x_38);
-  float2x2 const x_42 = float2x2(float2(x_39, 0.0f), float2(0.0f, x_39));
-  if ((all((x_36[0u] == x_42[0u])) & all((x_36[1u] == x_42[1u])))) {
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_59 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  } else {
-    int const x_69 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_70 = float(x_69);
-    *(tint_symbol_3) = float4(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1dfb495..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %23 = OpConstantNull %mat2v2float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %m = OpVariable %_ptr_Function_mat2v2float Function %23
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %28 = OpLoad %int %27
-         %29 = OpConvertSToF %float %28
-         %33 = OpCompositeConstruct %v2float %29 %float_0
-         %34 = OpCompositeConstruct %v2float %float_0 %29
-         %35 = OpCompositeConstruct %mat2v2float %33 %34
-         %31 = OpTranspose %mat2v2float %35
-         %30 = OpTranspose %mat2v2float %31
-               OpStore %m %30
-         %36 = OpLoad %mat2v2float %m
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %39 = OpConvertSToF %float %38
-         %40 = OpCompositeConstruct %v2float %39 %float_0
-         %41 = OpCompositeConstruct %v2float %float_0 %39
-         %42 = OpCompositeConstruct %mat2v2float %40 %41
-         %45 = OpCompositeExtract %v2float %36 0
-         %46 = OpCompositeExtract %v2float %42 0
-         %47 = OpFOrdEqual %v2bool %45 %46
-         %43 = OpAll %bool %47
-         %51 = OpCompositeExtract %v2float %36 1
-         %52 = OpCompositeExtract %v2float %42 1
-         %53 = OpFOrdEqual %v2bool %51 %52
-         %49 = OpAll %bool %53
-         %54 = OpLogicalAnd %bool %43 %49
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %59
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %55
-         %57 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %73
-         %75 = OpCompositeConstruct %v4float %74 %74 %74 %74
-               OpStore %x_GLF_color %75
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0eeddbc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat2x2<f32>;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_30 : f32 = f32(x_29);
-  m = transpose(transpose(mat2x2<f32>(vec2<f32>(x_30, 0.0), vec2<f32>(0.0, x_30))));
-  let x_36 : mat2x2<f32> = m;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_39 : f32 = f32(x_38);
-  let x_42 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(x_39, 0.0), vec2<f32>(0.0, x_39));
-  if ((all((x_36[0u] == x_42[0u])) & all((x_36[1u] == x_42[1u])))) {
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_59 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65));
-  } else {
-    let x_69 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_70 : f32 = f32(x_69);
-    x_GLF_color = vec4<f32>(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index ea6ee9a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const float x_30 = float(x_29);
-  m = transpose(transpose(float2x2(float2(x_30, 0.0f), float2(0.0f, x_30))));
-  const float2x2 x_36 = m;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_38 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_39 = float(x_38);
-  const float2x2 x_42 = float2x2(float2(x_39, 0.0f), float2(0.0f, x_39));
-  bool tint_tmp = all((x_36[0u] == x_42[0u]));
-  if (tint_tmp) {
-    tint_tmp = all((x_36[1u] == x_42[1u]));
-  }
-  if ((tint_tmp)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_59 = asint(x_6[1].x);
-    const int x_62 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  } else {
-    const int x_69 = asint(x_6[1].x);
-    const float x_70 = float(x_69);
-    x_GLF_color = float4(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.msl
deleted file mode 100644
index 11f6276..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2x2 m = float2x2(0.0f);
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_30 = float(x_29);
-  m = transpose(transpose(float2x2(float2(x_30, 0.0f), float2(0.0f, x_30))));
-  float2x2 const x_36 = m;
-  int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  float const x_39 = float(x_38);
-  float2x2 const x_42 = float2x2(float2(x_39, 0.0f), float2(0.0f, x_39));
-  if ((all((x_36[0u] == x_42[0u])) && all((x_36[1u] == x_42[1u])))) {
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_59 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  } else {
-    int const x_69 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_70 = float(x_69);
-    *(tint_symbol_3) = float4(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4975569..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,133 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 89
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %23 = OpConstantNull %mat2v2float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-     %v2bool = OpTypeVector %bool 2
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %78 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %m = OpVariable %_ptr_Function_mat2v2float Function %23
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %28 = OpLoad %int %27
-         %29 = OpConvertSToF %float %28
-         %33 = OpCompositeConstruct %v2float %29 %float_0
-         %34 = OpCompositeConstruct %v2float %float_0 %29
-         %35 = OpCompositeConstruct %mat2v2float %33 %34
-         %31 = OpTranspose %mat2v2float %35
-         %30 = OpTranspose %mat2v2float %31
-               OpStore %m %30
-         %36 = OpLoad %mat2v2float %m
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %39 = OpConvertSToF %float %38
-         %40 = OpCompositeConstruct %v2float %39 %float_0
-         %41 = OpCompositeConstruct %v2float %float_0 %39
-         %42 = OpCompositeConstruct %mat2v2float %40 %41
-         %45 = OpCompositeExtract %v2float %36 0
-         %46 = OpCompositeExtract %v2float %42 0
-         %47 = OpFOrdEqual %v2bool %45 %46
-         %43 = OpAll %bool %47
-               OpSelectionMerge %49 None
-               OpBranchConditional %43 %50 %49
-         %50 = OpLabel
-         %53 = OpCompositeExtract %v2float %36 1
-         %54 = OpCompositeExtract %v2float %42 1
-         %55 = OpFOrdEqual %v2bool %53 %54
-         %51 = OpAll %bool %55
-               OpBranch %49
-         %49 = OpLabel
-         %56 = OpPhi %bool %43 %18 %51 %50
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpConvertSToF %float %61
-         %70 = OpConvertSToF %float %64
-         %71 = OpConvertSToF %float %66
-         %72 = OpConvertSToF %float %68
-         %73 = OpCompositeConstruct %v4float %69 %70 %71 %72
-               OpStore %x_GLF_color %73
-               OpBranch %57
-         %59 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %75 = OpLoad %int %74
-         %76 = OpConvertSToF %float %75
-         %77 = OpCompositeConstruct %v4float %76 %76 %76 %76
-               OpStore %x_GLF_color %77
-               OpBranch %57
-         %57 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %78
-         %81 = OpLabel
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %86 = OpLabel
-         %87 = OpFunctionCall %main_out %main_inner
-         %88 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %88
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 510e118..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-double-transpose/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat2x2<f32>;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_30 : f32 = f32(x_29);
-  m = transpose(transpose(mat2x2<f32>(vec2<f32>(x_30, 0.0), vec2<f32>(0.0, x_30))));
-  let x_36 : mat2x2<f32> = m;
-  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_39 : f32 = f32(x_38);
-  let x_42 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(x_39, 0.0), vec2<f32>(0.0, x_39));
-  if ((all((x_36[0u] == x_42[0u])) && all((x_36[1u] == x_42[1u])))) {
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_59 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65));
-  } else {
-    let x_69 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_70 : f32 = f32(x_69);
-    x_GLF_color = vec4<f32>(x_70, x_70, x_70, x_70);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3078d86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m0 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 m1 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2 v = float2(0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_35 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_37 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  m0 = float2x2(float2(x_35, -0.540302277f), float2(0.540302277f, x_37));
-  m1 = mul(m0, m0);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  v = mul(m1, float2(x_45, x_45));
-  const float x_50 = v.x;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_52 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  if ((x_50 < x_52)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_58 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_60 = asfloat(x_6[1].x);
-    const float x_62 = asfloat(x_6[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(x_58, x_60, x_62, x_64);
-  } else {
-    const float x_67 = asfloat(x_6[1].x);
-    x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7c47c29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2x2 m0 = float2x2(0.0f);
-  float2x2 m1 = float2x2(0.0f);
-  float2 v = 0.0f;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  m0 = float2x2(float2(x_35, -0.540302277f), float2(0.540302277f, x_37));
-  float2x2 const x_41 = m0;
-  float2x2 const x_42 = m0;
-  m1 = (x_41 * x_42);
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float2x2 const x_47 = m1;
-  v = (float2(x_45, x_45) * x_47);
-  float const x_50 = v.x;
-  float const x_52 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_50 < x_52)) {
-    float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_60 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_62 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_64 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_58, x_60, x_62, x_64);
-  } else {
-    float const x_67 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_3) = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 053f61f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,127 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 82
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m0 "m0"
-               OpName %m1 "m1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %22 = OpConstantNull %mat2v2float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_n0_540302277 = OpConstant %float -0.540302277
-%float_0_540302277 = OpConstant %float 0.540302277
-%_ptr_Function_float = OpTypePointer Function %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %71 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %m0 = OpVariable %_ptr_Function_mat2v2float Function %22
-         %m1 = OpVariable %_ptr_Function_mat2v2float Function %22
-          %v = OpVariable %_ptr_Function_v2float Function %26
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %32 = OpLoad %float %31
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %34 = OpLoad %float %33
-         %36 = OpCompositeConstruct %v2float %32 %float_n0_540302277
-         %38 = OpCompositeConstruct %v2float %float_0_540302277 %34
-         %39 = OpCompositeConstruct %mat2v2float %36 %38
-               OpStore %m0 %39
-         %40 = OpLoad %mat2v2float %m0
-         %41 = OpLoad %mat2v2float %m0
-         %42 = OpMatrixTimesMatrix %mat2v2float %40 %41
-               OpStore %m1 %42
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %45 = OpLoad %mat2v2float %m1
-         %46 = OpCompositeConstruct %v2float %44 %44
-         %47 = OpVectorTimesMatrix %v2float %46 %45
-               OpStore %v %47
-         %49 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %50 = OpLoad %float %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %52 = OpLoad %float %51
-         %53 = OpFOrdLessThan %bool %50 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %57
-         %56 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %61 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %62 = OpLoad %float %61
-         %63 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %64 = OpLoad %float %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpCompositeConstruct %v4float %59 %62 %64 %66
-               OpStore %x_GLF_color %67
-               OpBranch %55
-         %57 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %69 = OpLoad %float %68
-         %70 = OpCompositeConstruct %v4float %69 %69 %69 %69
-               OpStore %x_GLF_color %70
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %71
-         %74 = OpLabel
-         %75 = OpFunctionCall %void %main_1
-         %76 = OpLoad %v4float %x_GLF_color
-         %77 = OpCompositeConstruct %main_out %76
-               OpReturnValue %77
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %79 = OpLabel
-         %80 = OpFunctionCall %main_out %main_inner
-         %81 = OpCompositeExtract %v4float %80 0
-               OpStore %x_GLF_color_1_1 %81
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index eff2ddf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m0 : mat2x2<f32>;
-  var m1 : mat2x2<f32>;
-  var v : vec2<f32>;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[0];
-  m0 = mat2x2<f32>(vec2<f32>(x_35, -0.540302277), vec2<f32>(0.540302277, x_37));
-  let x_41 : mat2x2<f32> = m0;
-  let x_42 : mat2x2<f32> = m0;
-  m1 = (x_41 * x_42);
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_47 : mat2x2<f32> = m1;
-  v = (vec2<f32>(x_45, x_45) * x_47);
-  let x_50 : f32 = v.x;
-  let x_52 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_50 < x_52)) {
-    let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_60 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_62 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_64 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_58, x_60, x_62, x_64);
-  } else {
-    let x_67 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3078d86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m0 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 m1 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2 v = float2(0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_35 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_37 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  m0 = float2x2(float2(x_35, -0.540302277f), float2(0.540302277f, x_37));
-  m1 = mul(m0, m0);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  v = mul(m1, float2(x_45, x_45));
-  const float x_50 = v.x;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_52 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  if ((x_50 < x_52)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_58 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_60 = asfloat(x_6[1].x);
-    const float x_62 = asfloat(x_6[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(x_58, x_60, x_62, x_64);
-  } else {
-    const float x_67 = asfloat(x_6[1].x);
-    x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7c47c29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2x2 m0 = float2x2(0.0f);
-  float2x2 m1 = float2x2(0.0f);
-  float2 v = 0.0f;
-  float const x_35 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  m0 = float2x2(float2(x_35, -0.540302277f), float2(0.540302277f, x_37));
-  float2x2 const x_41 = m0;
-  float2x2 const x_42 = m0;
-  m1 = (x_41 * x_42);
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float2x2 const x_47 = m1;
-  v = (float2(x_45, x_45) * x_47);
-  float const x_50 = v.x;
-  float const x_52 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_50 < x_52)) {
-    float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_60 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_62 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_64 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_58, x_60, x_62, x_64);
-  } else {
-    float const x_67 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    *(tint_symbol_3) = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 053f61f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,127 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 82
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m0 "m0"
-               OpName %m1 "m1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %22 = OpConstantNull %mat2v2float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_n0_540302277 = OpConstant %float -0.540302277
-%float_0_540302277 = OpConstant %float 0.540302277
-%_ptr_Function_float = OpTypePointer Function %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %71 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %m0 = OpVariable %_ptr_Function_mat2v2float Function %22
-         %m1 = OpVariable %_ptr_Function_mat2v2float Function %22
-          %v = OpVariable %_ptr_Function_v2float Function %26
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %32 = OpLoad %float %31
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %34 = OpLoad %float %33
-         %36 = OpCompositeConstruct %v2float %32 %float_n0_540302277
-         %38 = OpCompositeConstruct %v2float %float_0_540302277 %34
-         %39 = OpCompositeConstruct %mat2v2float %36 %38
-               OpStore %m0 %39
-         %40 = OpLoad %mat2v2float %m0
-         %41 = OpLoad %mat2v2float %m0
-         %42 = OpMatrixTimesMatrix %mat2v2float %40 %41
-               OpStore %m1 %42
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %45 = OpLoad %mat2v2float %m1
-         %46 = OpCompositeConstruct %v2float %44 %44
-         %47 = OpVectorTimesMatrix %v2float %46 %45
-               OpStore %v %47
-         %49 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %50 = OpLoad %float %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %52 = OpLoad %float %51
-         %53 = OpFOrdLessThan %bool %50 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %53 %56 %57
-         %56 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %61 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %62 = OpLoad %float %61
-         %63 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %64 = OpLoad %float %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpCompositeConstruct %v4float %59 %62 %64 %66
-               OpStore %x_GLF_color %67
-               OpBranch %55
-         %57 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %69 = OpLoad %float %68
-         %70 = OpCompositeConstruct %v4float %69 %69 %69 %69
-               OpStore %x_GLF_color %70
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %71
-         %74 = OpLabel
-         %75 = OpFunctionCall %void %main_1
-         %76 = OpLoad %v4float %x_GLF_color
-         %77 = OpCompositeConstruct %main_out %76
-               OpReturnValue %77
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %79 = OpLabel
-         %80 = OpFunctionCall %main_out %main_inner
-         %81 = OpCompositeExtract %v4float %80 0
-               OpStore %x_GLF_color_1_1 %81
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index eff2ddf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-matrix-square-mul-with-vector/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m0 : mat2x2<f32>;
-  var m1 : mat2x2<f32>;
-  var v : vec2<f32>;
-  let x_35 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[0];
-  m0 = mat2x2<f32>(vec2<f32>(x_35, -0.540302277), vec2<f32>(0.540302277, x_37));
-  let x_41 : mat2x2<f32> = m0;
-  let x_42 : mat2x2<f32> = m0;
-  m1 = (x_41 * x_42);
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_47 : mat2x2<f32> = m1;
-  v = (vec2<f32>(x_45, x_45) * x_47);
-  let x_50 : f32 = v.x;
-  let x_52 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_50 < x_52)) {
-    let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_60 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_62 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_64 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_58, x_60, x_62, x_64);
-  } else {
-    let x_67 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3c12051..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_23 = asint(x_5[0].x);
-  const int x_25 = asint(x_5[0].x);
-  const int x_27 = asint(x_5[0].x);
-  if ((max(x_23, clamp(x_25, x_27, 1)) == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.msl
deleted file mode 100644
index b0d9eb3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_23 = x_5.one;
-  int const x_25 = x_5.one;
-  int const x_27 = x_5.one;
-  if ((max(x_23, clamp(x_25, x_27, 1)) == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 07268c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-         %26 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %37 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %21 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %22 = OpLoad %int %21
-         %23 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %24 = OpLoad %int %23
-         %27 = OpExtInst %int %26 SClamp %22 %24 %int_1
-         %25 = OpExtInst %int %26 SMax %20 %27
-         %29 = OpIEqual %bool %25 %int_1
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %x_GLF_color %37
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ae45234..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_23 : i32 = x_5.one;
-  let x_25 : i32 = x_5.one;
-  let x_27 : i32 = x_5.one;
-  if ((max(x_23, clamp(x_25, x_27, 1)) == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3c12051..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_23 = asint(x_5[0].x);
-  const int x_25 = asint(x_5[0].x);
-  const int x_27 = asint(x_5[0].x);
-  if ((max(x_23, clamp(x_25, x_27, 1)) == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.msl
deleted file mode 100644
index b0d9eb3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_23 = x_5.one;
-  int const x_25 = x_5.one;
-  int const x_27 = x_5.one;
-  if ((max(x_23, clamp(x_25, x_27, 1)) == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 07268c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-         %26 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %37 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %21 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %22 = OpLoad %int %21
-         %23 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %24 = OpLoad %int %23
-         %27 = OpExtInst %int %26 SClamp %22 %24 %int_1
-         %25 = OpExtInst %int %26 SMax %20 %27
-         %29 = OpIEqual %bool %25 %int_1
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %x_GLF_color %37
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ae45234..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-clamp-same-minval/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_23 : i32 = x_5.one;
-  let x_25 : i32 = x_5.one;
-  let x_27 : i32 = x_5.one;
-  if ((max(x_23, clamp(x_25, x_27, 1)) == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 430302e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-
-void main_1() {
-  int a = 0;
-  const float x_30 = gl_FragCoord.x;
-  a = max(1, min(1, int(x_30)));
-  if ((a < 2)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_40 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_46 = asint(x_7[1].x);
-    x_GLF_color = float4(1.0f, float(x_40), float(x_43), float(x_46));
-  } else {
-    const int x_50 = asint(x_7[1].x);
-    const float x_51 = float(x_50);
-    x_GLF_color = float4(x_51, x_51, x_51, x_51);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9cfc85c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  float const x_30 = (*(tint_symbol_3)).x;
-  a = max(1, min(1, int(x_30)));
-  int const x_34 = a;
-  if ((x_34 < 2)) {
-    int const x_40 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_43 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_46 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(1.0f, float(x_40), float(x_43), float(x_46));
-  } else {
-    int const x_50 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_51 = float(x_50);
-    *(tint_symbol_4) = float4(x_51, x_51, x_51, x_51);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 83047dc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-         %30 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %24
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %28 = OpLoad %float %27
-         %33 = OpConvertFToS %int %28
-         %32 = OpExtInst %int %30 SMin %int_1 %33
-         %29 = OpExtInst %int %30 SMax %int_1 %32
-               OpStore %a %29
-         %34 = OpLoad %int %a
-         %36 = OpSLessThan %bool %34 %int_2
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %48 = OpLoad %int %47
-         %50 = OpConvertSToF %float %44
-         %51 = OpConvertSToF %float %46
-         %52 = OpConvertSToF %float %48
-         %53 = OpCompositeConstruct %v4float %float_1 %50 %51 %52
-               OpStore %x_GLF_color %53
-               OpBranch %38
-         %40 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v4float %56 %56 %56 %56
-               OpStore %x_GLF_color %57
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %62 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %67 = OpLabel
-         %69 = OpLoad %v4float %gl_FragCoord_param_1
-         %68 = OpFunctionCall %main_out %main_inner %69
-         %70 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 24c7553..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-fn main_1() {
-  var a : i32;
-  let x_30 : f32 = gl_FragCoord.x;
-  a = max(1, min(1, i32(x_30)));
-  let x_34 : i32 = a;
-  if ((x_34 < 2)) {
-    let x_40 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_43 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_46 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(1.0, f32(x_40), f32(x_43), f32(x_46));
-  } else {
-    let x_50 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_51 : f32 = f32(x_50);
-    x_GLF_color = vec4<f32>(x_51, x_51, x_51, x_51);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 430302e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-
-void main_1() {
-  int a = 0;
-  const float x_30 = gl_FragCoord.x;
-  a = max(1, min(1, int(x_30)));
-  if ((a < 2)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_40 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_46 = asint(x_7[1].x);
-    x_GLF_color = float4(1.0f, float(x_40), float(x_43), float(x_46));
-  } else {
-    const int x_50 = asint(x_7[1].x);
-    const float x_51 = float(x_50);
-    x_GLF_color = float4(x_51, x_51, x_51, x_51);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9cfc85c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  float const x_30 = (*(tint_symbol_3)).x;
-  a = max(1, min(1, int(x_30)));
-  int const x_34 = a;
-  if ((x_34 < 2)) {
-    int const x_40 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_43 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_46 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(1.0f, float(x_40), float(x_43), float(x_46));
-  } else {
-    int const x_50 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_51 = float(x_50);
-    *(tint_symbol_4) = float4(x_51, x_51, x_51, x_51);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 83047dc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-         %30 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %24
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %28 = OpLoad %float %27
-         %33 = OpConvertFToS %int %28
-         %32 = OpExtInst %int %30 SMin %int_1 %33
-         %29 = OpExtInst %int %30 SMax %int_1 %32
-               OpStore %a %29
-         %34 = OpLoad %int %a
-         %36 = OpSLessThan %bool %34 %int_2
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %48 = OpLoad %int %47
-         %50 = OpConvertSToF %float %44
-         %51 = OpConvertSToF %float %46
-         %52 = OpConvertSToF %float %48
-         %53 = OpCompositeConstruct %v4float %float_1 %50 %51 %52
-               OpStore %x_GLF_color %53
-               OpBranch %38
-         %40 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %55 = OpLoad %int %54
-         %56 = OpConvertSToF %float %55
-         %57 = OpCompositeConstruct %v4float %56 %56 %56 %56
-               OpStore %x_GLF_color %57
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %62 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %67 = OpLabel
-         %69 = OpLoad %v4float %gl_FragCoord_param_1
-         %68 = OpFunctionCall %main_out %main_inner %69
-         %70 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 24c7553..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-max-min-less-than/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-fn main_1() {
-  var a : i32;
-  let x_30 : f32 = gl_FragCoord.x;
-  a = max(1, min(1, i32(x_30)));
-  let x_34 : i32 = a;
-  if ((x_34 < 2)) {
-    let x_40 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_43 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_46 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(1.0, f32(x_40), f32(x_43), f32(x_46));
-  } else {
-    let x_50 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_51 : f32 = f32(x_50);
-    x_GLF_color = vec4<f32>(x_51, x_51, x_51, x_51);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0014608..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-struct S {
-  int a;
-  int b;
-  int c;
-};
-
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_43 = 0;
-  bool x_44 = false;
-  S arr[2] = (S[2])0;
-  S param = (S)0;
-  int param_1 = 0;
-  while (true) {
-    int x_50 = 0;
-    x_50 = asint(x_10[0].x);
-    arr[x_50].a = 2;
-    const int x_53 = arr[1].a;
-    if ((x_53 < 1)) {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      x_44 = true;
-      break;
-    } else {
-      const S x_60 = arr[1];
-      param = x_60;
-      param_1 = (2 + asint(x_50));
-      const int x_61 = param_1;
-      S x_64_1 = param;
-      x_64_1.a = x_61;
-      param = x_64_1;
-      if ((param.a == 2)) {
-        S x_71_1 = param;
-        x_71_1.a = 9;
-        param = x_71_1;
-      }
-      const int x_72 = param_1;
-      S x_76_1 = param;
-      x_76_1.b = (x_72 + 1);
-      param = x_76_1;
-      const int x_77 = param_1;
-      S x_81_1 = param;
-      x_81_1.c = (x_77 + 2);
-      param = x_81_1;
-      if ((param.b == 2)) {
-        S x_88_1 = param;
-        x_88_1.b = 7;
-        param = x_88_1;
-      }
-      x_43 = ((param.a + param.b) + param.c);
-      if ((x_43 == 12)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      } else {
-        x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      }
-    }
-    x_44 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_S_i1_i1_i11_i1_(inout S s, inout int x) {
-  const int x_103 = x;
-  s.a = x_103;
-  const int x_105 = s.a;
-  if ((x_105 == 2)) {
-    s.a = 9;
-  }
-  const int x_109 = x;
-  s.b = (x_109 + 1);
-  const int x_112 = x;
-  s.c = (x_112 + 2);
-  const int x_115 = s.b;
-  if ((x_115 == 2)) {
-    s.b = 7;
-  }
-  const int x_119 = s.a;
-  const int x_120 = s.b;
-  const int x_122 = s.c;
-  return ((x_119 + x_120) + x_122);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.msl
deleted file mode 100644
index 238c405..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,126 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int a;
-  int b;
-  int c;
-};
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper {
-  S arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_3) {
-  int x_43 = 0;
-  bool x_44 = false;
-  tint_array_wrapper arr = {};
-  S param = {};
-  int param_1 = 0;
-  while (true) {
-    int x_50 = 0;
-    x_50 = x_10.one;
-    arr.arr[x_50].a = 2;
-    int const x_53 = arr.arr[1].a;
-    if ((x_53 < 1)) {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      x_44 = true;
-      break;
-    } else {
-      S const x_60 = arr.arr[1];
-      param = x_60;
-      param_1 = as_type<int>((as_type<uint>(2) + as_type<uint>(as_type<int>(x_50))));
-      int const x_61 = param_1;
-      S const x_63 = param;
-      S x_64_1 = x_63;
-      x_64_1.a = x_61;
-      S const x_64 = x_64_1;
-      param = x_64;
-      S const x_65 = param;
-      if ((x_65.a == 2)) {
-        S const x_70 = param;
-        S x_71_1 = x_70;
-        x_71_1.a = 9;
-        S const x_71 = x_71_1;
-        param = x_71;
-      }
-      int const x_72 = param_1;
-      S const x_75 = param;
-      S x_76_1 = x_75;
-      x_76_1.b = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-      S const x_76 = x_76_1;
-      param = x_76;
-      int const x_77 = param_1;
-      S const x_80 = param;
-      S x_81_1 = x_80;
-      x_81_1.c = as_type<int>((as_type<uint>(x_77) + as_type<uint>(2)));
-      S const x_81 = x_81_1;
-      param = x_81;
-      S const x_82 = param;
-      if ((x_82.b == 2)) {
-        S const x_87 = param;
-        S x_88_1 = x_87;
-        x_88_1.b = 7;
-        S const x_88 = x_88_1;
-        param = x_88;
-      }
-      S const x_89 = param;
-      S const x_91 = param;
-      S const x_94 = param;
-      x_43 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_89.a) + as_type<uint>(x_91.b)))) + as_type<uint>(x_94.c)));
-      int const x_97 = x_43;
-      if ((x_97 == 12)) {
-        *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      } else {
-        *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      }
-    }
-    x_44 = true;
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_S_i1_i1_i11_i1_(thread S* const s, thread int* const x) {
-  int const x_103 = *(x);
-  (*(s)).a = x_103;
-  int const x_105 = (*(s)).a;
-  if ((x_105 == 2)) {
-    (*(s)).a = 9;
-  }
-  int const x_109 = *(x);
-  (*(s)).b = as_type<int>((as_type<uint>(x_109) + as_type<uint>(1)));
-  int const x_112 = *(x);
-  (*(s)).c = as_type<int>((as_type<uint>(x_112) + as_type<uint>(2)));
-  int const x_115 = (*(s)).b;
-  if ((x_115 == 2)) {
-    (*(s)).b = 7;
-  }
-  int const x_119 = (*(s)).a;
-  int const x_120 = (*(s)).b;
-  int const x_122 = (*(s)).c;
-  return as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_119) + as_type<uint>(x_120)))) + as_type<uint>(x_122)));
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ecbadf6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,272 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 173
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_43 "x_43"
-               OpName %x_44 "x_44"
-               OpName %S "S"
-               OpMemberName %S 0 "a"
-               OpMemberName %S 1 "b"
-               OpMemberName %S 2 "c"
-               OpName %arr "arr"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %x_50 "x_50"
-               OpName %x_64_1 "x_64_1"
-               OpName %x_71_1 "x_71_1"
-               OpName %x_76_1 "x_76_1"
-               OpName %x_81_1 "x_81_1"
-               OpName %x_88_1 "x_88_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_struct_S_i1_i1_i11_i1_ "func_struct_S_i1_i1_i11_i1_"
-               OpName %s "s"
-               OpName %x "x"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_S_uint_2 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %23 = OpConstantNull %bool
-          %S = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_S_uint_2 = OpTypeArray %S %uint_2
-%_ptr_Function__arr_S_uint_2 = OpTypePointer Function %_arr_S_uint_2
-         %30 = OpConstantNull %_arr_S_uint_2
-%_ptr_Function_S = OpTypePointer Function %S
-         %33 = OpConstantNull %S
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %true = OpConstantTrue %bool
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-      %int_7 = OpConstant %int 7
-     %int_12 = OpConstant %int 12
-    %float_1 = OpConstant %float 1
-        %115 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %116 = OpTypeFunction %main_out
-        %127 = OpTypeFunction %int %_ptr_Function_S %_ptr_Function_int
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_43 = OpVariable %_ptr_Function_int Function %18
-       %x_44 = OpVariable %_ptr_Function_bool Function %23
-        %arr = OpVariable %_ptr_Function__arr_S_uint_2 Function %30
-      %param = OpVariable %_ptr_Function_S Function %33
-    %param_1 = OpVariable %_ptr_Function_int Function %18
-       %x_50 = OpVariable %_ptr_Function_int Function %18
-     %x_64_1 = OpVariable %_ptr_Function_S Function %33
-     %x_71_1 = OpVariable %_ptr_Function_S Function %33
-     %x_76_1 = OpVariable %_ptr_Function_S Function %33
-     %x_81_1 = OpVariable %_ptr_Function_S Function %33
-     %x_88_1 = OpVariable %_ptr_Function_S Function %33
-               OpStore %x_44 %false
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %43 = OpLoad %int %42
-               OpStore %x_50 %43
-         %44 = OpLoad %int %x_50
-         %45 = OpAccessChain %_ptr_Function_int %arr %44 %uint_0
-               OpStore %45 %int_2
-         %48 = OpAccessChain %_ptr_Function_int %arr %int_1 %uint_0
-         %49 = OpLoad %int %48
-         %50 = OpSLessThan %bool %49 %int_1
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpStore %x_44 %true
-               OpBranch %36
-         %53 = OpLabel
-         %57 = OpAccessChain %_ptr_Function_S %arr %int_1
-         %58 = OpLoad %S %57
-               OpStore %param %58
-         %60 = OpLoad %int %x_50
-         %59 = OpCopyObject %int %60
-         %61 = OpIAdd %int %int_2 %59
-               OpStore %param_1 %61
-         %62 = OpLoad %int %param_1
-         %63 = OpLoad %S %param
-               OpStore %x_64_1 %63
-         %65 = OpAccessChain %_ptr_Function_int %x_64_1 %uint_0
-               OpStore %65 %62
-         %66 = OpLoad %S %x_64_1
-               OpStore %param %66
-         %67 = OpLoad %S %param
-         %68 = OpCompositeExtract %int %67 0
-         %69 = OpIEqual %bool %68 %int_2
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %S %param
-               OpStore %x_71_1 %72
-         %74 = OpAccessChain %_ptr_Function_int %x_71_1 %uint_0
-               OpStore %74 %int_9
-         %76 = OpLoad %S %x_71_1
-               OpStore %param %76
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %int %param_1
-         %78 = OpLoad %S %param
-               OpStore %x_76_1 %78
-         %81 = OpAccessChain %_ptr_Function_int %x_76_1 %uint_1
-         %82 = OpIAdd %int %77 %int_1
-               OpStore %81 %82
-         %83 = OpLoad %S %x_76_1
-               OpStore %param %83
-         %84 = OpLoad %int %param_1
-         %85 = OpLoad %S %param
-               OpStore %x_81_1 %85
-         %87 = OpAccessChain %_ptr_Function_int %x_81_1 %uint_2
-         %88 = OpIAdd %int %84 %int_2
-               OpStore %87 %88
-         %89 = OpLoad %S %x_81_1
-               OpStore %param %89
-         %90 = OpLoad %S %param
-         %91 = OpCompositeExtract %int %90 1
-         %92 = OpIEqual %bool %91 %int_2
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-         %95 = OpLoad %S %param
-               OpStore %x_88_1 %95
-         %97 = OpAccessChain %_ptr_Function_int %x_88_1 %uint_1
-               OpStore %97 %int_7
-         %99 = OpLoad %S %x_88_1
-               OpStore %param %99
-               OpBranch %93
-         %93 = OpLabel
-        %100 = OpLoad %S %param
-        %101 = OpLoad %S %param
-        %102 = OpLoad %S %param
-        %103 = OpCompositeExtract %int %100 0
-        %104 = OpCompositeExtract %int %101 1
-        %105 = OpIAdd %int %103 %104
-        %106 = OpCompositeExtract %int %102 2
-        %107 = OpIAdd %int %105 %106
-               OpStore %x_43 %107
-        %108 = OpLoad %int %x_43
-        %110 = OpIEqual %bool %108 %int_12
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %113
-        %112 = OpLabel
-               OpStore %x_GLF_color %115
-               OpBranch %111
-        %113 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %111
-        %111 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-               OpStore %x_44 %true
-               OpBranch %36
-         %37 = OpLabel
-               OpBranch %35
-         %36 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %116
-        %119 = OpLabel
-        %120 = OpFunctionCall %void %main_1
-        %121 = OpLoad %v4float %x_GLF_color
-        %122 = OpCompositeConstruct %main_out %121
-               OpReturnValue %122
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %124 = OpLabel
-        %125 = OpFunctionCall %main_out %main_inner
-        %126 = OpCompositeExtract %v4float %125 0
-               OpStore %x_GLF_color_1_1 %126
-               OpReturn
-               OpFunctionEnd
-%func_struct_S_i1_i1_i11_i1_ = OpFunction %int None %127
-          %s = OpFunctionParameter %_ptr_Function_S
-          %x = OpFunctionParameter %_ptr_Function_int
-        %131 = OpLabel
-        %133 = OpLoad %int %x
-        %135 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %135 %133
-        %137 = OpAccessChain %_ptr_Function_int %s %uint_0
-        %138 = OpLoad %int %137
-        %139 = OpIEqual %bool %138 %int_2
-               OpSelectionMerge %140 None
-               OpBranchConditional %139 %141 %140
-        %141 = OpLabel
-        %143 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %143 %int_9
-               OpBranch %140
-        %140 = OpLabel
-        %145 = OpLoad %int %x
-        %147 = OpAccessChain %_ptr_Function_int %s %uint_1
-        %148 = OpIAdd %int %145 %int_1
-               OpStore %147 %148
-        %150 = OpLoad %int %x
-        %152 = OpAccessChain %_ptr_Function_int %s %uint_2
-        %153 = OpIAdd %int %150 %int_2
-               OpStore %152 %153
-        %155 = OpAccessChain %_ptr_Function_int %s %uint_1
-        %156 = OpLoad %int %155
-        %157 = OpIEqual %bool %156 %int_2
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %158
-        %159 = OpLabel
-        %161 = OpAccessChain %_ptr_Function_int %s %uint_1
-               OpStore %161 %int_7
-               OpBranch %158
-        %158 = OpLabel
-        %163 = OpAccessChain %_ptr_Function_int %s %uint_0
-        %164 = OpLoad %int %163
-        %166 = OpAccessChain %_ptr_Function_int %s %uint_1
-        %167 = OpLoad %int %166
-        %169 = OpAccessChain %_ptr_Function_int %s %uint_2
-        %170 = OpLoad %int %169
-        %171 = OpIAdd %int %164 %167
-        %172 = OpIAdd %int %171 %170
-               OpReturnValue %172
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d664615..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,122 +0,0 @@
-struct S {
-  a : i32;
-  b : i32;
-  c : i32;
-};
-
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_43 : i32;
-  var x_44 : bool = false;
-  var arr : array<S, 2>;
-  var param : S;
-  var param_1 : i32;
-  loop {
-    var x_50 : i32;
-    x_50 = x_10.one;
-    arr[x_50].a = 2;
-    let x_53 : i32 = arr[1].a;
-    if ((x_53 < 1)) {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      x_44 = true;
-      break;
-    } else {
-      let x_60 : S = arr[1];
-      param = x_60;
-      param_1 = (2 + bitcast<i32>(x_50));
-      let x_61 : i32 = param_1;
-      let x_62 : ptr<function, i32> = &(param.a);
-      let x_63 : S = param;
-      var x_64_1 : S = x_63;
-      x_64_1.a = x_61;
-      let x_64 : S = x_64_1;
-      param = x_64;
-      let x_65 : S = param;
-      if ((x_65.a == 2)) {
-        let x_70 : S = param;
-        var x_71_1 : S = x_70;
-        x_71_1.a = 9;
-        let x_71 : S = x_71_1;
-        param = x_71;
-      }
-      let x_72 : i32 = param_1;
-      let x_74 : ptr<function, i32> = &(param.b);
-      let x_75 : S = param;
-      var x_76_1 : S = x_75;
-      x_76_1.b = (x_72 + 1);
-      let x_76 : S = x_76_1;
-      param = x_76;
-      let x_77 : i32 = param_1;
-      let x_79 : ptr<function, i32> = &(param.c);
-      let x_80 : S = param;
-      var x_81_1 : S = x_80;
-      x_81_1.c = (x_77 + 2);
-      let x_81 : S = x_81_1;
-      param = x_81;
-      let x_82 : S = param;
-      if ((x_82.b == 2)) {
-        let x_87 : S = param;
-        var x_88_1 : S = x_87;
-        x_88_1.b = 7;
-        let x_88 : S = x_88_1;
-        param = x_88;
-      }
-      let x_89 : S = param;
-      let x_91 : S = param;
-      let x_94 : S = param;
-      x_43 = ((x_89.a + x_91.b) + x_94.c);
-      let x_97 : i32 = x_43;
-      if ((x_97 == 12)) {
-        x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      } else {
-        x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      }
-    }
-    x_44 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_struct_S_i1_i1_i11_i1_(s : ptr<function, S>, x : ptr<function, i32>) -> i32 {
-  let x_103 : i32 = *(x);
-  let x_104 : ptr<function, i32> = &((*(s)).a);
-  *(x_104) = x_103;
-  let x_105 : i32 = *(x_104);
-  if ((x_105 == 2)) {
-    *(x_104) = 9;
-  }
-  let x_109 : i32 = *(x);
-  let x_111 : ptr<function, i32> = &((*(s)).b);
-  *(x_111) = (x_109 + 1);
-  let x_112 : i32 = *(x);
-  let x_114 : ptr<function, i32> = &((*(s)).c);
-  *(x_114) = (x_112 + 2);
-  let x_115 : i32 = *(x_111);
-  if ((x_115 == 2)) {
-    *(x_111) = 7;
-  }
-  let x_119 : i32 = *(x_104);
-  let x_120 : i32 = *(x_111);
-  let x_122 : i32 = *(x_114);
-  return ((x_119 + x_120) + x_122);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0014608..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-struct S {
-  int a;
-  int b;
-  int c;
-};
-
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_43 = 0;
-  bool x_44 = false;
-  S arr[2] = (S[2])0;
-  S param = (S)0;
-  int param_1 = 0;
-  while (true) {
-    int x_50 = 0;
-    x_50 = asint(x_10[0].x);
-    arr[x_50].a = 2;
-    const int x_53 = arr[1].a;
-    if ((x_53 < 1)) {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      x_44 = true;
-      break;
-    } else {
-      const S x_60 = arr[1];
-      param = x_60;
-      param_1 = (2 + asint(x_50));
-      const int x_61 = param_1;
-      S x_64_1 = param;
-      x_64_1.a = x_61;
-      param = x_64_1;
-      if ((param.a == 2)) {
-        S x_71_1 = param;
-        x_71_1.a = 9;
-        param = x_71_1;
-      }
-      const int x_72 = param_1;
-      S x_76_1 = param;
-      x_76_1.b = (x_72 + 1);
-      param = x_76_1;
-      const int x_77 = param_1;
-      S x_81_1 = param;
-      x_81_1.c = (x_77 + 2);
-      param = x_81_1;
-      if ((param.b == 2)) {
-        S x_88_1 = param;
-        x_88_1.b = 7;
-        param = x_88_1;
-      }
-      x_43 = ((param.a + param.b) + param.c);
-      if ((x_43 == 12)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      } else {
-        x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      }
-    }
-    x_44 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_S_i1_i1_i11_i1_(inout S s, inout int x) {
-  const int x_103 = x;
-  s.a = x_103;
-  const int x_105 = s.a;
-  if ((x_105 == 2)) {
-    s.a = 9;
-  }
-  const int x_109 = x;
-  s.b = (x_109 + 1);
-  const int x_112 = x;
-  s.c = (x_112 + 2);
-  const int x_115 = s.b;
-  if ((x_115 == 2)) {
-    s.b = 7;
-  }
-  const int x_119 = s.a;
-  const int x_120 = s.b;
-  const int x_122 = s.c;
-  return ((x_119 + x_120) + x_122);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.msl
deleted file mode 100644
index 238c405..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,126 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int a;
-  int b;
-  int c;
-};
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper {
-  S arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_3) {
-  int x_43 = 0;
-  bool x_44 = false;
-  tint_array_wrapper arr = {};
-  S param = {};
-  int param_1 = 0;
-  while (true) {
-    int x_50 = 0;
-    x_50 = x_10.one;
-    arr.arr[x_50].a = 2;
-    int const x_53 = arr.arr[1].a;
-    if ((x_53 < 1)) {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      x_44 = true;
-      break;
-    } else {
-      S const x_60 = arr.arr[1];
-      param = x_60;
-      param_1 = as_type<int>((as_type<uint>(2) + as_type<uint>(as_type<int>(x_50))));
-      int const x_61 = param_1;
-      S const x_63 = param;
-      S x_64_1 = x_63;
-      x_64_1.a = x_61;
-      S const x_64 = x_64_1;
-      param = x_64;
-      S const x_65 = param;
-      if ((x_65.a == 2)) {
-        S const x_70 = param;
-        S x_71_1 = x_70;
-        x_71_1.a = 9;
-        S const x_71 = x_71_1;
-        param = x_71;
-      }
-      int const x_72 = param_1;
-      S const x_75 = param;
-      S x_76_1 = x_75;
-      x_76_1.b = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-      S const x_76 = x_76_1;
-      param = x_76;
-      int const x_77 = param_1;
-      S const x_80 = param;
-      S x_81_1 = x_80;
-      x_81_1.c = as_type<int>((as_type<uint>(x_77) + as_type<uint>(2)));
-      S const x_81 = x_81_1;
-      param = x_81;
-      S const x_82 = param;
-      if ((x_82.b == 2)) {
-        S const x_87 = param;
-        S x_88_1 = x_87;
-        x_88_1.b = 7;
-        S const x_88 = x_88_1;
-        param = x_88;
-      }
-      S const x_89 = param;
-      S const x_91 = param;
-      S const x_94 = param;
-      x_43 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_89.a) + as_type<uint>(x_91.b)))) + as_type<uint>(x_94.c)));
-      int const x_97 = x_43;
-      if ((x_97 == 12)) {
-        *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      } else {
-        *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      }
-    }
-    x_44 = true;
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int func_struct_S_i1_i1_i11_i1_(thread S* const s, thread int* const x) {
-  int const x_103 = *(x);
-  (*(s)).a = x_103;
-  int const x_105 = (*(s)).a;
-  if ((x_105 == 2)) {
-    (*(s)).a = 9;
-  }
-  int const x_109 = *(x);
-  (*(s)).b = as_type<int>((as_type<uint>(x_109) + as_type<uint>(1)));
-  int const x_112 = *(x);
-  (*(s)).c = as_type<int>((as_type<uint>(x_112) + as_type<uint>(2)));
-  int const x_115 = (*(s)).b;
-  if ((x_115 == 2)) {
-    (*(s)).b = 7;
-  }
-  int const x_119 = (*(s)).a;
-  int const x_120 = (*(s)).b;
-  int const x_122 = (*(s)).c;
-  return as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_119) + as_type<uint>(x_120)))) + as_type<uint>(x_122)));
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ecbadf6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,272 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 173
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_43 "x_43"
-               OpName %x_44 "x_44"
-               OpName %S "S"
-               OpMemberName %S 0 "a"
-               OpMemberName %S 1 "b"
-               OpMemberName %S 2 "c"
-               OpName %arr "arr"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %x_50 "x_50"
-               OpName %x_64_1 "x_64_1"
-               OpName %x_71_1 "x_71_1"
-               OpName %x_76_1 "x_76_1"
-               OpName %x_81_1 "x_81_1"
-               OpName %x_88_1 "x_88_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_struct_S_i1_i1_i11_i1_ "func_struct_S_i1_i1_i11_i1_"
-               OpName %s "s"
-               OpName %x "x"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_S_uint_2 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %23 = OpConstantNull %bool
-          %S = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_S_uint_2 = OpTypeArray %S %uint_2
-%_ptr_Function__arr_S_uint_2 = OpTypePointer Function %_arr_S_uint_2
-         %30 = OpConstantNull %_arr_S_uint_2
-%_ptr_Function_S = OpTypePointer Function %S
-         %33 = OpConstantNull %S
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %true = OpConstantTrue %bool
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-      %int_7 = OpConstant %int 7
-     %int_12 = OpConstant %int 12
-    %float_1 = OpConstant %float 1
-        %115 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %116 = OpTypeFunction %main_out
-        %127 = OpTypeFunction %int %_ptr_Function_S %_ptr_Function_int
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_43 = OpVariable %_ptr_Function_int Function %18
-       %x_44 = OpVariable %_ptr_Function_bool Function %23
-        %arr = OpVariable %_ptr_Function__arr_S_uint_2 Function %30
-      %param = OpVariable %_ptr_Function_S Function %33
-    %param_1 = OpVariable %_ptr_Function_int Function %18
-       %x_50 = OpVariable %_ptr_Function_int Function %18
-     %x_64_1 = OpVariable %_ptr_Function_S Function %33
-     %x_71_1 = OpVariable %_ptr_Function_S Function %33
-     %x_76_1 = OpVariable %_ptr_Function_S Function %33
-     %x_81_1 = OpVariable %_ptr_Function_S Function %33
-     %x_88_1 = OpVariable %_ptr_Function_S Function %33
-               OpStore %x_44 %false
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %43 = OpLoad %int %42
-               OpStore %x_50 %43
-         %44 = OpLoad %int %x_50
-         %45 = OpAccessChain %_ptr_Function_int %arr %44 %uint_0
-               OpStore %45 %int_2
-         %48 = OpAccessChain %_ptr_Function_int %arr %int_1 %uint_0
-         %49 = OpLoad %int %48
-         %50 = OpSLessThan %bool %49 %int_1
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpStore %x_44 %true
-               OpBranch %36
-         %53 = OpLabel
-         %57 = OpAccessChain %_ptr_Function_S %arr %int_1
-         %58 = OpLoad %S %57
-               OpStore %param %58
-         %60 = OpLoad %int %x_50
-         %59 = OpCopyObject %int %60
-         %61 = OpIAdd %int %int_2 %59
-               OpStore %param_1 %61
-         %62 = OpLoad %int %param_1
-         %63 = OpLoad %S %param
-               OpStore %x_64_1 %63
-         %65 = OpAccessChain %_ptr_Function_int %x_64_1 %uint_0
-               OpStore %65 %62
-         %66 = OpLoad %S %x_64_1
-               OpStore %param %66
-         %67 = OpLoad %S %param
-         %68 = OpCompositeExtract %int %67 0
-         %69 = OpIEqual %bool %68 %int_2
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %S %param
-               OpStore %x_71_1 %72
-         %74 = OpAccessChain %_ptr_Function_int %x_71_1 %uint_0
-               OpStore %74 %int_9
-         %76 = OpLoad %S %x_71_1
-               OpStore %param %76
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %int %param_1
-         %78 = OpLoad %S %param
-               OpStore %x_76_1 %78
-         %81 = OpAccessChain %_ptr_Function_int %x_76_1 %uint_1
-         %82 = OpIAdd %int %77 %int_1
-               OpStore %81 %82
-         %83 = OpLoad %S %x_76_1
-               OpStore %param %83
-         %84 = OpLoad %int %param_1
-         %85 = OpLoad %S %param
-               OpStore %x_81_1 %85
-         %87 = OpAccessChain %_ptr_Function_int %x_81_1 %uint_2
-         %88 = OpIAdd %int %84 %int_2
-               OpStore %87 %88
-         %89 = OpLoad %S %x_81_1
-               OpStore %param %89
-         %90 = OpLoad %S %param
-         %91 = OpCompositeExtract %int %90 1
-         %92 = OpIEqual %bool %91 %int_2
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-         %95 = OpLoad %S %param
-               OpStore %x_88_1 %95
-         %97 = OpAccessChain %_ptr_Function_int %x_88_1 %uint_1
-               OpStore %97 %int_7
-         %99 = OpLoad %S %x_88_1
-               OpStore %param %99
-               OpBranch %93
-         %93 = OpLabel
-        %100 = OpLoad %S %param
-        %101 = OpLoad %S %param
-        %102 = OpLoad %S %param
-        %103 = OpCompositeExtract %int %100 0
-        %104 = OpCompositeExtract %int %101 1
-        %105 = OpIAdd %int %103 %104
-        %106 = OpCompositeExtract %int %102 2
-        %107 = OpIAdd %int %105 %106
-               OpStore %x_43 %107
-        %108 = OpLoad %int %x_43
-        %110 = OpIEqual %bool %108 %int_12
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %113
-        %112 = OpLabel
-               OpStore %x_GLF_color %115
-               OpBranch %111
-        %113 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %111
-        %111 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-               OpStore %x_44 %true
-               OpBranch %36
-         %37 = OpLabel
-               OpBranch %35
-         %36 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %116
-        %119 = OpLabel
-        %120 = OpFunctionCall %void %main_1
-        %121 = OpLoad %v4float %x_GLF_color
-        %122 = OpCompositeConstruct %main_out %121
-               OpReturnValue %122
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %124 = OpLabel
-        %125 = OpFunctionCall %main_out %main_inner
-        %126 = OpCompositeExtract %v4float %125 0
-               OpStore %x_GLF_color_1_1 %126
-               OpReturn
-               OpFunctionEnd
-%func_struct_S_i1_i1_i11_i1_ = OpFunction %int None %127
-          %s = OpFunctionParameter %_ptr_Function_S
-          %x = OpFunctionParameter %_ptr_Function_int
-        %131 = OpLabel
-        %133 = OpLoad %int %x
-        %135 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %135 %133
-        %137 = OpAccessChain %_ptr_Function_int %s %uint_0
-        %138 = OpLoad %int %137
-        %139 = OpIEqual %bool %138 %int_2
-               OpSelectionMerge %140 None
-               OpBranchConditional %139 %141 %140
-        %141 = OpLabel
-        %143 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %143 %int_9
-               OpBranch %140
-        %140 = OpLabel
-        %145 = OpLoad %int %x
-        %147 = OpAccessChain %_ptr_Function_int %s %uint_1
-        %148 = OpIAdd %int %145 %int_1
-               OpStore %147 %148
-        %150 = OpLoad %int %x
-        %152 = OpAccessChain %_ptr_Function_int %s %uint_2
-        %153 = OpIAdd %int %150 %int_2
-               OpStore %152 %153
-        %155 = OpAccessChain %_ptr_Function_int %s %uint_1
-        %156 = OpLoad %int %155
-        %157 = OpIEqual %bool %156 %int_2
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %158
-        %159 = OpLabel
-        %161 = OpAccessChain %_ptr_Function_int %s %uint_1
-               OpStore %161 %int_7
-               OpBranch %158
-        %158 = OpLabel
-        %163 = OpAccessChain %_ptr_Function_int %s %uint_0
-        %164 = OpLoad %int %163
-        %166 = OpAccessChain %_ptr_Function_int %s %uint_1
-        %167 = OpLoad %int %166
-        %169 = OpAccessChain %_ptr_Function_int %s %uint_2
-        %170 = OpLoad %int %169
-        %171 = OpIAdd %int %164 %167
-        %172 = OpIAdd %int %171 %170
-               OpReturnValue %172
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d664615..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-sum-struct-members/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,122 +0,0 @@
-struct S {
-  a : i32;
-  b : i32;
-  c : i32;
-};
-
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_43 : i32;
-  var x_44 : bool = false;
-  var arr : array<S, 2>;
-  var param : S;
-  var param_1 : i32;
-  loop {
-    var x_50 : i32;
-    x_50 = x_10.one;
-    arr[x_50].a = 2;
-    let x_53 : i32 = arr[1].a;
-    if ((x_53 < 1)) {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      x_44 = true;
-      break;
-    } else {
-      let x_60 : S = arr[1];
-      param = x_60;
-      param_1 = (2 + bitcast<i32>(x_50));
-      let x_61 : i32 = param_1;
-      let x_62 : ptr<function, i32> = &(param.a);
-      let x_63 : S = param;
-      var x_64_1 : S = x_63;
-      x_64_1.a = x_61;
-      let x_64 : S = x_64_1;
-      param = x_64;
-      let x_65 : S = param;
-      if ((x_65.a == 2)) {
-        let x_70 : S = param;
-        var x_71_1 : S = x_70;
-        x_71_1.a = 9;
-        let x_71 : S = x_71_1;
-        param = x_71;
-      }
-      let x_72 : i32 = param_1;
-      let x_74 : ptr<function, i32> = &(param.b);
-      let x_75 : S = param;
-      var x_76_1 : S = x_75;
-      x_76_1.b = (x_72 + 1);
-      let x_76 : S = x_76_1;
-      param = x_76;
-      let x_77 : i32 = param_1;
-      let x_79 : ptr<function, i32> = &(param.c);
-      let x_80 : S = param;
-      var x_81_1 : S = x_80;
-      x_81_1.c = (x_77 + 2);
-      let x_81 : S = x_81_1;
-      param = x_81;
-      let x_82 : S = param;
-      if ((x_82.b == 2)) {
-        let x_87 : S = param;
-        var x_88_1 : S = x_87;
-        x_88_1.b = 7;
-        let x_88 : S = x_88_1;
-        param = x_88;
-      }
-      let x_89 : S = param;
-      let x_91 : S = param;
-      let x_94 : S = param;
-      x_43 = ((x_89.a + x_91.b) + x_94.c);
-      let x_97 : i32 = x_43;
-      if ((x_97 == 12)) {
-        x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      } else {
-        x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      }
-    }
-    x_44 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_struct_S_i1_i1_i11_i1_(s : ptr<function, S>, x : ptr<function, i32>) -> i32 {
-  let x_103 : i32 = *(x);
-  let x_104 : ptr<function, i32> = &((*(s)).a);
-  *(x_104) = x_103;
-  let x_105 : i32 = *(x_104);
-  if ((x_105 == 2)) {
-    *(x_104) = 9;
-  }
-  let x_109 : i32 = *(x);
-  let x_111 : ptr<function, i32> = &((*(s)).b);
-  *(x_111) = (x_109 + 1);
-  let x_112 : i32 = *(x);
-  let x_114 : ptr<function, i32> = &((*(s)).c);
-  *(x_114) = (x_112 + 2);
-  let x_115 : i32 = *(x_111);
-  if ((x_115 == 2)) {
-    *(x_111) = 7;
-  }
-  let x_119 : i32 = *(x_104);
-  let x_120 : i32 = *(x_111);
-  let x_122 : i32 = *(x_114);
-  return ((x_119 + x_120) + x_122);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 109823c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_vf2_(inout float2 v) {
-  const float x_42 = asfloat(x_7[0].x);
-  v.x = x_42;
-  const float x_45 = v.y;
-  if ((x_45 < 1.0f)) {
-    return 1.0f;
-  }
-  return 5.0f;
-}
-
-void main_1() {
-  float f = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  param = float2(1.0f, 1.0f);
-  const float x_34 = func_vf2_(param);
-  f = x_34;
-  if ((f == 5.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.msl
deleted file mode 100644
index bdcbf97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_vf2_(constant buf0& x_7, thread float2* const v) {
-  float const x_42 = x_7.two;
-  (*(v)).x = x_42;
-  float const x_45 = (*(v)).y;
-  if ((x_45 < 1.0f)) {
-    return 1.0f;
-  }
-  return 5.0f;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float2 param = 0.0f;
-  param = float2(1.0f, 1.0f);
-  float const x_34 = func_vf2_(x_7, &(param));
-  f = x_34;
-  float const x_35 = f;
-  if ((x_35 == 5.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 82bb00f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_vf2_ "func_vf2_"
-               OpName %v "v"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %11 = OpTypeFunction %float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_5 = OpConstant %float 5
-       %void = OpTypeVoid
-         %35 = OpTypeFunction %void
-         %40 = OpConstantNull %float
-         %42 = OpConstantNull %v2float
-         %43 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %53 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %54 = OpTypeFunction %main_out
-  %func_vf2_ = OpFunction %float None %11
-          %v = OpFunctionParameter %_ptr_Function_v2float
-         %16 = OpLabel
-         %20 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %21 = OpLoad %float %20
-         %24 = OpAccessChain %_ptr_Function_float %v %uint_0
-               OpStore %24 %21
-         %27 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %28 = OpLoad %float %27
-         %30 = OpFOrdLessThan %bool %28 %float_1
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-               OpReturnValue %float_1
-         %32 = OpLabel
-               OpReturnValue %float_5
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %35
-         %38 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %40
-      %param = OpVariable %_ptr_Function_v2float Function %42
-               OpStore %param %43
-         %44 = OpFunctionCall %float %func_vf2_ %param
-               OpStore %f %44
-         %46 = OpLoad %float %f
-         %47 = OpFOrdEqual %bool %46 %float_5
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-               OpStore %x_GLF_color %52
-               OpBranch %48
-         %50 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %48
-         %48 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %54
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %35
-         %62 = OpLabel
-         %63 = OpFunctionCall %main_out %main_inner
-         %64 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f09a1ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct buf0 {
-  two : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_vf2_(v : ptr<function, vec2<f32>>) -> f32 {
-  let x_42 : f32 = x_7.two;
-  (*(v)).x = x_42;
-  let x_45 : f32 = (*(v)).y;
-  if ((x_45 < 1.0)) {
-    return 1.0;
-  }
-  return 5.0;
-}
-
-fn main_1() {
-  var f : f32;
-  var param : vec2<f32>;
-  param = vec2<f32>(1.0, 1.0);
-  let x_34 : f32 = func_vf2_(&(param));
-  f = x_34;
-  let x_35 : f32 = f;
-  if ((x_35 == 5.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 109823c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_vf2_(inout float2 v) {
-  const float x_42 = asfloat(x_7[0].x);
-  v.x = x_42;
-  const float x_45 = v.y;
-  if ((x_45 < 1.0f)) {
-    return 1.0f;
-  }
-  return 5.0f;
-}
-
-void main_1() {
-  float f = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  param = float2(1.0f, 1.0f);
-  const float x_34 = func_vf2_(param);
-  f = x_34;
-  if ((f == 5.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.msl
deleted file mode 100644
index bdcbf97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_vf2_(constant buf0& x_7, thread float2* const v) {
-  float const x_42 = x_7.two;
-  (*(v)).x = x_42;
-  float const x_45 = (*(v)).y;
-  if ((x_45 < 1.0f)) {
-    return 1.0f;
-  }
-  return 5.0f;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float2 param = 0.0f;
-  param = float2(1.0f, 1.0f);
-  float const x_34 = func_vf2_(x_7, &(param));
-  f = x_34;
-  float const x_35 = f;
-  if ((x_35 == 5.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 82bb00f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_vf2_ "func_vf2_"
-               OpName %v "v"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %11 = OpTypeFunction %float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_5 = OpConstant %float 5
-       %void = OpTypeVoid
-         %35 = OpTypeFunction %void
-         %40 = OpConstantNull %float
-         %42 = OpConstantNull %v2float
-         %43 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %53 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %54 = OpTypeFunction %main_out
-  %func_vf2_ = OpFunction %float None %11
-          %v = OpFunctionParameter %_ptr_Function_v2float
-         %16 = OpLabel
-         %20 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %21 = OpLoad %float %20
-         %24 = OpAccessChain %_ptr_Function_float %v %uint_0
-               OpStore %24 %21
-         %27 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %28 = OpLoad %float %27
-         %30 = OpFOrdLessThan %bool %28 %float_1
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-               OpReturnValue %float_1
-         %32 = OpLabel
-               OpReturnValue %float_5
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %35
-         %38 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %40
-      %param = OpVariable %_ptr_Function_v2float Function %42
-               OpStore %param %43
-         %44 = OpFunctionCall %float %func_vf2_ %param
-               OpStore %f %44
-         %46 = OpLoad %float %f
-         %47 = OpFOrdEqual %bool %46 %float_5
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-               OpStore %x_GLF_color %52
-               OpBranch %48
-         %50 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %48
-         %48 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %54
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %35
-         %62 = OpLabel
-         %63 = OpFunctionCall %main_out %main_inner
-         %64 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f09a1ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mem-pass-unused-component/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct buf0 {
-  two : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_vf2_(v : ptr<function, vec2<f32>>) -> f32 {
-  let x_42 : f32 = x_7.two;
-  (*(v)).x = x_42;
-  let x_45 : f32 = (*(v)).y;
-  if ((x_45 < 1.0)) {
-    return 1.0;
-  }
-  return 5.0;
-}
-
-fn main_1() {
-  var f : f32;
-  var param : vec2<f32>;
-  param = vec2<f32>(1.0, 1.0);
-  let x_34 : f32 = func_vf2_(&(param));
-  f = x_34;
-  let x_35 : f32 = f;
-  if ((x_35 == 5.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 454f25d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  float b = 0.0f;
-  float x_34 = 0.0f;
-  float x_34_phi = 0.0f;
-  float x_48_phi = 0.0f;
-  b = 2.0f;
-  x_34_phi = 2.0f;
-  while (true) {
-    x_34 = x_34_phi;
-    const float x_39 = asfloat(x_7[0].x);
-    if ((x_39 == 0.0f)) {
-      x_48_phi = x_34;
-      break;
-    }
-    const float x_44 = asfloat(x_7[0].x);
-    if ((x_44 == 0.0f)) {
-      return 1.0f;
-    }
-    b = 1.0f;
-    {
-      x_34_phi = 1.0f;
-      x_48_phi = 1.0f;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return x_48_phi;
-}
-
-void main_1() {
-  const float x_27 = func_();
-  if ((x_27 == 1.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.msl
deleted file mode 100644
index 213388a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(constant buf0& x_7) {
-  float b = 0.0f;
-  float x_34 = 0.0f;
-  float x_34_phi = 0.0f;
-  float x_48_phi = 0.0f;
-  b = 2.0f;
-  x_34_phi = 2.0f;
-  while (true) {
-    x_34 = x_34_phi;
-    float const x_39 = x_7.three;
-    if ((x_39 == 0.0f)) {
-      x_48_phi = x_34;
-      break;
-    }
-    float const x_44 = x_7.three;
-    if ((x_44 == 0.0f)) {
-      return 1.0f;
-    }
-    b = 1.0f;
-    {
-      x_34_phi = 1.0f;
-      x_48_phi = 1.0f;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_48 = x_48_phi;
-  return x_48;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float const x_27 = func_(x_7);
-  if ((x_27 == 1.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 9a52195..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,130 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %b "b"
-               OpName %x_34 "x_34"
-               OpName %x_34_phi "x_34_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %11 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-    %float_2 = OpConstant %float 2
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-      %false = OpConstantFalse %bool
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-      %func_ = OpFunction %float None %11
-         %13 = OpLabel
-          %b = OpVariable %_ptr_Function_float Function %16
-       %x_34 = OpVariable %_ptr_Function_float Function %16
-   %x_34_phi = OpVariable %_ptr_Function_float Function %16
-   %x_48_phi = OpVariable %_ptr_Function_float Function %16
-               OpStore %b %float_2
-               OpStore %x_34_phi %float_2
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %float %x_34_phi
-               OpStore %x_34 %25
-         %29 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpFOrdEqual %bool %30 %float_0
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %34
-         %35 = OpLabel
-         %36 = OpLoad %float %x_34
-               OpStore %x_48_phi %36
-               OpBranch %22
-         %34 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdEqual %bool %38 %float_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-               OpReturnValue %float_1
-         %40 = OpLabel
-               OpStore %b %float_1
-               OpBranch %23
-         %23 = OpLabel
-               OpStore %x_34_phi %float_1
-               OpStore %x_48_phi %float_1
-               OpBranchConditional %false %21 %22
-         %22 = OpLabel
-         %44 = OpLoad %float %x_48_phi
-               OpReturnValue %44
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %float %func_
-         %50 = OpFOrdEqual %bool %49 %float_1
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %51
-         %53 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %51
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6a9c3b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,62 +0,0 @@
-[[block]]
-struct buf0 {
-  three : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var b : f32;
-  var x_34 : f32;
-  var x_34_phi : f32;
-  var x_48_phi : f32;
-  b = 2.0;
-  x_34_phi = 2.0;
-  loop {
-    x_34 = x_34_phi;
-    let x_39 : f32 = x_7.three;
-    if ((x_39 == 0.0)) {
-      x_48_phi = x_34;
-      break;
-    }
-    let x_44 : f32 = x_7.three;
-    if ((x_44 == 0.0)) {
-      return 1.0;
-    }
-    b = 1.0;
-
-    continuing {
-      x_34_phi = 1.0;
-      x_48_phi = 1.0;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_48 : f32 = x_48_phi;
-  return x_48;
-}
-
-fn main_1() {
-  let x_27 : f32 = func_();
-  if ((x_27 == 1.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 454f25d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  float b = 0.0f;
-  float x_34 = 0.0f;
-  float x_34_phi = 0.0f;
-  float x_48_phi = 0.0f;
-  b = 2.0f;
-  x_34_phi = 2.0f;
-  while (true) {
-    x_34 = x_34_phi;
-    const float x_39 = asfloat(x_7[0].x);
-    if ((x_39 == 0.0f)) {
-      x_48_phi = x_34;
-      break;
-    }
-    const float x_44 = asfloat(x_7[0].x);
-    if ((x_44 == 0.0f)) {
-      return 1.0f;
-    }
-    b = 1.0f;
-    {
-      x_34_phi = 1.0f;
-      x_48_phi = 1.0f;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return x_48_phi;
-}
-
-void main_1() {
-  const float x_27 = func_();
-  if ((x_27 == 1.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.msl
deleted file mode 100644
index 213388a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(constant buf0& x_7) {
-  float b = 0.0f;
-  float x_34 = 0.0f;
-  float x_34_phi = 0.0f;
-  float x_48_phi = 0.0f;
-  b = 2.0f;
-  x_34_phi = 2.0f;
-  while (true) {
-    x_34 = x_34_phi;
-    float const x_39 = x_7.three;
-    if ((x_39 == 0.0f)) {
-      x_48_phi = x_34;
-      break;
-    }
-    float const x_44 = x_7.three;
-    if ((x_44 == 0.0f)) {
-      return 1.0f;
-    }
-    b = 1.0f;
-    {
-      x_34_phi = 1.0f;
-      x_48_phi = 1.0f;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_48 = x_48_phi;
-  return x_48;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float const x_27 = func_(x_7);
-  if ((x_27 == 1.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9a52195..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,130 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %b "b"
-               OpName %x_34 "x_34"
-               OpName %x_34_phi "x_34_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %11 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpConstantNull %float
-    %float_2 = OpConstant %float 2
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-      %false = OpConstantFalse %bool
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %55 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-      %func_ = OpFunction %float None %11
-         %13 = OpLabel
-          %b = OpVariable %_ptr_Function_float Function %16
-       %x_34 = OpVariable %_ptr_Function_float Function %16
-   %x_34_phi = OpVariable %_ptr_Function_float Function %16
-   %x_48_phi = OpVariable %_ptr_Function_float Function %16
-               OpStore %b %float_2
-               OpStore %x_34_phi %float_2
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %float %x_34_phi
-               OpStore %x_34 %25
-         %29 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpFOrdEqual %bool %30 %float_0
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %34
-         %35 = OpLabel
-         %36 = OpLoad %float %x_34
-               OpStore %x_48_phi %36
-               OpBranch %22
-         %34 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdEqual %bool %38 %float_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-               OpReturnValue %float_1
-         %40 = OpLabel
-               OpStore %b %float_1
-               OpBranch %23
-         %23 = OpLabel
-               OpStore %x_34_phi %float_1
-               OpStore %x_48_phi %float_1
-               OpBranchConditional %false %21 %22
-         %22 = OpLabel
-         %44 = OpLoad %float %x_48_phi
-               OpReturnValue %44
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %float %func_
-         %50 = OpFOrdEqual %bool %49 %float_1
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %51
-         %53 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %51
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6a9c3b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-merge-return-condition-twice/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,62 +0,0 @@
-[[block]]
-struct buf0 {
-  three : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var b : f32;
-  var x_34 : f32;
-  var x_34_phi : f32;
-  var x_48_phi : f32;
-  b = 2.0;
-  x_34_phi = 2.0;
-  loop {
-    x_34 = x_34_phi;
-    let x_39 : f32 = x_7.three;
-    if ((x_39 == 0.0)) {
-      x_48_phi = x_34;
-      break;
-    }
-    let x_44 : f32 = x_7.three;
-    if ((x_44 == 0.0)) {
-      return 1.0;
-    }
-    b = 1.0;
-
-    continuing {
-      x_34_phi = 1.0;
-      x_48_phi = 1.0;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_48 : f32 = x_48_phi;
-  return x_48;
-}
-
-fn main_1() {
-  let x_27 : f32 = func_();
-  if ((x_27 == 1.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 07db7a7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  f = min(asfloat(-1), 1.0f);
-  const float x_38 = gl_FragCoord.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_38 > x_40)) {
-    const int x_46 = asint(x_9[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_55 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    const float x_58 = f;
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.msl
deleted file mode 100644
index 97da9e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  f = fmin(as_type<float>(-1), 1.0f);
-  float const x_38 = (*(tint_symbol_3)).x;
-  float const x_40 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_38 > x_40)) {
-    int const x_46 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_49 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_55 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    float const x_58 = f;
-    *(tint_symbol_4) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1c74ef4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,133 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %31 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-     %int_n1 = OpConstant %int -1
-    %float_1 = OpConstant %float 1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %29
-         %32 = OpBitcast %float %int_n1
-         %30 = OpExtInst %float %31 NMin %32 %float_1
-               OpStore %f %30
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %41 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpFOrdGreaterThan %bool %38 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpConvertSToF %float %51
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %45
-         %47 = OpLabel
-         %63 = OpLoad %float %f
-         %64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-               OpStore %x_GLF_color %64
-               OpBranch %45
-         %45 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 089465d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-fn main_1() {
-  var f : f32;
-  f = min(bitcast<f32>(-1), 1.0);
-  let x_38 : f32 = gl_FragCoord.x;
-  let x_40 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_38 > x_40)) {
-    let x_46 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_49 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_55 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_46), f32(x_49), f32(x_52), f32(x_55));
-  } else {
-    let x_58 : f32 = f;
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 07db7a7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  f = min(asfloat(-1), 1.0f);
-  const float x_38 = gl_FragCoord.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_38 > x_40)) {
-    const int x_46 = asint(x_9[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_55 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    const float x_58 = f;
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.msl
deleted file mode 100644
index 97da9e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  f = fmin(as_type<float>(-1), 1.0f);
-  float const x_38 = (*(tint_symbol_3)).x;
-  float const x_40 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_38 > x_40)) {
-    int const x_46 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_49 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_55 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_46), float(x_49), float(x_52), float(x_55));
-  } else {
-    float const x_58 = f;
-    *(tint_symbol_4) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1c74ef4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,133 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %31 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-     %int_n1 = OpConstant %int -1
-    %float_1 = OpConstant %float 1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %29
-         %32 = OpBitcast %float %int_n1
-         %30 = OpExtInst %float %31 NMin %32 %float_1
-               OpStore %f %30
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %41 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpFOrdGreaterThan %bool %38 %42
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpConvertSToF %float %51
-         %59 = OpConvertSToF %float %53
-         %60 = OpConvertSToF %float %55
-         %61 = OpConvertSToF %float %57
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %x_GLF_color %62
-               OpBranch %45
-         %47 = OpLabel
-         %63 = OpLoad %float %f
-         %64 = OpCompositeConstruct %v4float %63 %63 %63 %63
-               OpStore %x_GLF_color %64
-               OpBranch %45
-         %45 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 089465d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-intbitstofloat-undefined-never-used/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-fn main_1() {
-  var f : f32;
-  f = min(bitcast<f32>(-1), 1.0);
-  let x_38 : f32 = gl_FragCoord.x;
-  let x_40 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_38 > x_40)) {
-    let x_46 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_49 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_55 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_46), f32(x_49), f32(x_52), f32(x_55));
-  } else {
-    let x_58 : f32 = f;
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index fdf819f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_20 = gl_FragCoord.x;
-  const float x_23 = gl_FragCoord.x;
-  const float x_26 = gl_FragCoord.y;
-  const float x_32 = gl_FragCoord.y;
-  x_GLF_color = float4((x_20 * 0.00390625f), (float((int(x_23) ^ int(x_26))) * 0.00390625f), (x_32 * 0.00390625f), 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.msl
deleted file mode 100644
index da3439b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_20 = (*(tint_symbol_3)).x;
-  float const x_23 = (*(tint_symbol_3)).x;
-  float const x_26 = (*(tint_symbol_3)).y;
-  float const x_32 = (*(tint_symbol_3)).y;
-  *(tint_symbol_4) = float4((x_20 * 0.00390625f), (float((int(x_23) ^ int(x_26))) * 0.00390625f), (x_32 * 0.00390625f), 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b01bf9e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-%float_0_00390625 = OpConstant %float 0.00390625
-        %int = OpTypeInt 32 1
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %19 = OpLoad %float %18
-         %20 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %21 = OpLoad %float %20
-         %23 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %24 = OpLoad %float %23
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %26 = OpLoad %float %25
-         %28 = OpFMul %float %19 %float_0_00390625
-         %30 = OpConvertFToS %int %21
-         %32 = OpConvertFToS %int %24
-         %33 = OpBitwiseXor %int %30 %32
-         %29 = OpConvertSToF %float %33
-         %34 = OpFMul %float %29 %float_0_00390625
-         %35 = OpFMul %float %26 %float_0_00390625
-         %37 = OpCompositeConstruct %v4float %28 %34 %35 %float_1
-               OpStore %x_GLF_color %37
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %42 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %v4float %x_GLF_color
-         %45 = OpCompositeConstruct %main_out %44
-               OpReturnValue %45
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %47 = OpLabel
-         %49 = OpLoad %v4float %gl_FragCoord_param_1
-         %48 = OpFunctionCall %main_out %main_inner %49
-         %50 = OpCompositeExtract %v4float %48 0
-               OpStore %x_GLF_color_1_1 %50
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6c6f442..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  let x_20 : f32 = gl_FragCoord.x;
-  let x_23 : f32 = gl_FragCoord.x;
-  let x_26 : f32 = gl_FragCoord.y;
-  let x_32 : f32 = gl_FragCoord.y;
-  x_GLF_color = vec4<f32>((x_20 * 0.00390625), (f32((i32(x_23) ^ i32(x_26))) * 0.00390625), (x_32 * 0.00390625), 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index fdf819f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_20 = gl_FragCoord.x;
-  const float x_23 = gl_FragCoord.x;
-  const float x_26 = gl_FragCoord.y;
-  const float x_32 = gl_FragCoord.y;
-  x_GLF_color = float4((x_20 * 0.00390625f), (float((int(x_23) ^ int(x_26))) * 0.00390625f), (x_32 * 0.00390625f), 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.msl
deleted file mode 100644
index da3439b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_20 = (*(tint_symbol_3)).x;
-  float const x_23 = (*(tint_symbol_3)).x;
-  float const x_26 = (*(tint_symbol_3)).y;
-  float const x_32 = (*(tint_symbol_3)).y;
-  *(tint_symbol_4) = float4((x_20 * 0.00390625f), (float((int(x_23) ^ int(x_26))) * 0.00390625f), (x_32 * 0.00390625f), 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b01bf9e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-%float_0_00390625 = OpConstant %float 0.00390625
-        %int = OpTypeInt 32 1
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %19 = OpLoad %float %18
-         %20 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %21 = OpLoad %float %20
-         %23 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %24 = OpLoad %float %23
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %26 = OpLoad %float %25
-         %28 = OpFMul %float %19 %float_0_00390625
-         %30 = OpConvertFToS %int %21
-         %32 = OpConvertFToS %int %24
-         %33 = OpBitwiseXor %int %30 %32
-         %29 = OpConvertSToF %float %33
-         %34 = OpFMul %float %29 %float_0_00390625
-         %35 = OpFMul %float %26 %float_0_00390625
-         %37 = OpCompositeConstruct %v4float %28 %34 %35 %float_1
-               OpStore %x_GLF_color %37
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %42 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %v4float %x_GLF_color
-         %45 = OpCompositeConstruct %main_out %44
-               OpReturnValue %45
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %47 = OpLabel
-         %49 = OpLoad %v4float %gl_FragCoord_param_1
-         %48 = OpFunctionCall %main_out %main_inner %49
-         %50 = OpCompositeExtract %v4float %48 0
-               OpStore %x_GLF_color_1_1 %50
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6c6f442..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,24 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  let x_20 : f32 = gl_FragCoord.x;
-  let x_23 : f32 = gl_FragCoord.x;
-  let x_26 : f32 = gl_FragCoord.y;
-  let x_32 : f32 = gl_FragCoord.y;
-  x_GLF_color = vec4<f32>((x_20 * 0.00390625), (f32((i32(x_23) ^ i32(x_26))) * 0.00390625), (x_32 * 0.00390625), 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 371971b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-uint tint_pack4x8unorm(float4 param_0) {
-  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
-  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-
-float func_() {
-  switch(1) {
-    case 0: {
-      return 1.0f;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return 0.0f;
-}
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  v = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  const float x_38 = gl_FragCoord.y;
-  if ((x_38 < 0.0f)) {
-    const float x_42 = func_();
-    v = float4(x_42, x_42, x_42, x_42);
-  }
-  if ((tint_pack4x8unorm(v) == 1u)) {
-    return;
-  }
-  const uint x_50 = x_8[0].x;
-  if (((1u << x_50) == 2u)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-    const float x_58 = float(x_57);
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.msl
deleted file mode 100644
index abc3289..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ uint one;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_() {
-  switch(1) {
-    case 0: {
-      return 1.0f;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return 0.0f;
-}
-
-void main_1(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4 v = 0.0f;
-  v = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  float const x_38 = (*(tint_symbol_3)).y;
-  if ((x_38 < 0.0f)) {
-    float const x_42 = func_();
-    v = float4(x_42, x_42, x_42, x_42);
-  }
-  float4 const x_44 = v;
-  if ((pack_float_to_unorm4x8(x_44) == 1u)) {
-    return;
-  }
-  uint const x_50 = x_8.one;
-  if (((1u << x_50) == 2u)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    int const x_57 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_58 = float(x_57);
-    *(tint_symbol_4) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 67f9420..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,150 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 82
-; Schema: 0
-               OpCapability Shader
-         %48 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %func_ "func_"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-       %buf1 = OpTypeStruct %uint
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-       %buf0 = OpTypeStruct %_arr_int_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-         %21 = OpTypeFunction %float
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-       %void = OpTypeVoid
-         %30 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %36 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Private_float = OpTypePointer Private %float
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-     %uint_2 = OpConstant %uint 2
-         %62 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %69 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %float None %21
-         %23 = OpLabel
-               OpSelectionMerge %24 None
-               OpSwitch %int_1 %26 0 %27
-         %27 = OpLabel
-               OpReturnValue %float_1
-         %26 = OpLabel
-               OpBranch %24
-         %24 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %30
-         %33 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %7
-               OpStore %v %36
-         %38 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFOrdLessThan %bool %39 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
-         %44 = OpFunctionCall %float %func_
-         %45 = OpCompositeConstruct %v4float %44 %44 %44 %44
-               OpStore %v %45
-               OpBranch %42
-         %42 = OpLabel
-         %46 = OpLoad %v4float %v
-         %47 = OpExtInst %uint %48 PackUnorm4x8 %46
-         %49 = OpIEqual %bool %47 %uint_1
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-               OpReturn
-         %50 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_uint %x_8 %uint_0
-         %55 = OpLoad %uint %54
-         %56 = OpShiftLeftLogical %uint %uint_1 %55
-         %58 = OpIEqual %bool %56 %uint_2
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpStore %x_GLF_color %62
-               OpBranch %59
-         %61 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %66
-         %68 = OpCompositeConstruct %v4float %67 %67 %67 %67
-               OpStore %x_GLF_color %68
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %69
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %73 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %74 = OpFunctionCall %void %main_1
-         %75 = OpLoad %v4float %x_GLF_color
-         %76 = OpCompositeConstruct %main_out %75
-               OpReturnValue %76
-               OpFunctionEnd
-       %main = OpFunction %void None %30
-         %78 = OpLabel
-         %80 = OpLoad %v4float %gl_FragCoord_param_1
-         %79 = OpFunctionCall %main_out %main_inner %80
-         %81 = OpCompositeExtract %v4float %79 0
-               OpStore %x_GLF_color_1_1 %81
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3db210a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-[[block]]
-struct buf1 {
-  one : u32;
-};
-
-type Arr = [[stride(16)]] array<i32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn func_() -> f32 {
-  switch(1) {
-    case 0: {
-      return 1.0;
-    }
-    default: {
-    }
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var v : vec4<f32>;
-  v = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  let x_38 : f32 = gl_FragCoord.y;
-  if ((x_38 < 0.0)) {
-    let x_42 : f32 = func_();
-    v = vec4<f32>(x_42, x_42, x_42, x_42);
-  }
-  let x_44 : vec4<f32> = v;
-  if ((pack4x8unorm(x_44) == 1u)) {
-    return;
-  }
-  let x_50 : u32 = x_8.one;
-  if (((1u << x_50) == 2u)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    let x_57 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_58 : f32 = f32(x_57);
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 371971b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-uint tint_pack4x8unorm(float4 param_0) {
-  uint4 i = uint4(round(clamp(param_0, 0.0, 1.0) * 255.0));
-  return (i.x | i.y << 8 | i.z << 16 | i.w << 24);
-}
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-
-float func_() {
-  switch(1) {
-    case 0: {
-      return 1.0f;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return 0.0f;
-}
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  v = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  const float x_38 = gl_FragCoord.y;
-  if ((x_38 < 0.0f)) {
-    const float x_42 = func_();
-    v = float4(x_42, x_42, x_42, x_42);
-  }
-  if ((tint_pack4x8unorm(v) == 1u)) {
-    return;
-  }
-  const uint x_50 = x_8[0].x;
-  if (((1u << x_50) == 2u)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-    const float x_58 = float(x_57);
-    x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.msl
deleted file mode 100644
index abc3289..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ uint one;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_() {
-  switch(1) {
-    case 0: {
-      return 1.0f;
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return 0.0f;
-}
-
-void main_1(constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4 v = 0.0f;
-  v = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  float const x_38 = (*(tint_symbol_3)).y;
-  if ((x_38 < 0.0f)) {
-    float const x_42 = func_();
-    v = float4(x_42, x_42, x_42, x_42);
-  }
-  float4 const x_44 = v;
-  if ((pack_float_to_unorm4x8(x_44) == 1u)) {
-    return;
-  }
-  uint const x_50 = x_8.one;
-  if (((1u << x_50) == 2u)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    int const x_57 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_58 = float(x_57);
-    *(tint_symbol_4) = float4(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_8, constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_8 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 67f9420..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,150 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 82
-; Schema: 0
-               OpCapability Shader
-         %48 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %func_ "func_"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-       %buf1 = OpTypeStruct %uint
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-       %buf0 = OpTypeStruct %_arr_int_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-         %21 = OpTypeFunction %float
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-       %void = OpTypeVoid
-         %30 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %36 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Private_float = OpTypePointer Private %float
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-     %uint_2 = OpConstant %uint 2
-         %62 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %69 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %float None %21
-         %23 = OpLabel
-               OpSelectionMerge %24 None
-               OpSwitch %int_1 %26 0 %27
-         %27 = OpLabel
-               OpReturnValue %float_1
-         %26 = OpLabel
-               OpBranch %24
-         %24 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %30
-         %33 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %7
-               OpStore %v %36
-         %38 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFOrdLessThan %bool %39 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
-         %44 = OpFunctionCall %float %func_
-         %45 = OpCompositeConstruct %v4float %44 %44 %44 %44
-               OpStore %v %45
-               OpBranch %42
-         %42 = OpLabel
-         %46 = OpLoad %v4float %v
-         %47 = OpExtInst %uint %48 PackUnorm4x8 %46
-         %49 = OpIEqual %bool %47 %uint_1
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-               OpReturn
-         %50 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_uint %x_8 %uint_0
-         %55 = OpLoad %uint %54
-         %56 = OpShiftLeftLogical %uint %uint_1 %55
-         %58 = OpIEqual %bool %56 %uint_2
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpStore %x_GLF_color %62
-               OpBranch %59
-         %61 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %66
-         %68 = OpCompositeConstruct %v4float %67 %67 %67 %67
-               OpStore %x_GLF_color %68
-               OpBranch %59
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %69
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %73 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %74 = OpFunctionCall %void %main_1
-         %75 = OpLoad %v4float %x_GLF_color
-         %76 = OpCompositeConstruct %main_out %75
-               OpReturnValue %76
-               OpFunctionEnd
-       %main = OpFunction %void None %30
-         %78 = OpLabel
-         %80 = OpLoad %v4float %gl_FragCoord_param_1
-         %79 = OpFunctionCall %main_out %main_inner %80
-         %81 = OpCompositeExtract %v4float %79 0
-               OpStore %x_GLF_color_1_1 %81
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3db210a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-missing-return-value-function-never-called/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-[[block]]
-struct buf1 {
-  one : u32;
-};
-
-type Arr = [[stride(16)]] array<i32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn func_() -> f32 {
-  switch(1) {
-    case 0: {
-      return 1.0;
-    }
-    default: {
-    }
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var v : vec4<f32>;
-  v = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  let x_38 : f32 = gl_FragCoord.y;
-  if ((x_38 < 0.0)) {
-    let x_42 : f32 = func_();
-    v = vec4<f32>(x_42, x_42, x_42, x_42);
-  }
-  let x_44 : vec4<f32> = v;
-  if ((pack4x8unorm(x_44) == 1u)) {
-    return;
-  }
-  let x_50 : u32 = x_8.one;
-  if (((1u << x_50) == 2u)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    let x_57 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_58 : f32 = f32(x_57);
-    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d11a25c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-
-void main_1() {
-  float a = 0.0f;
-  a = (asfloat(1u) - (1.0f * floor((asfloat(1u) / 1.0f))));
-  const float x_29 = asfloat(x_6[1].x);
-  x_GLF_color = float4(x_29, x_29, x_29, x_29);
-  const float x_31 = a;
-  const float x_33 = asfloat(x_6[2].x);
-  if ((x_31 < x_33)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_38 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const float x_40 = asfloat(x_6[1].x);
-    const float x_42 = asfloat(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_44 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(x_38, x_40, x_42, x_44);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.msl
deleted file mode 100755
index dc64841..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  a = (as_type<float>(1u) - (1.0f * floor((as_type<float>(1u) / 1.0f))));
-  float const x_29 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_3) = float4(x_29, x_29, x_29, x_29);
-  float const x_31 = a;
-  float const x_33 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  if ((x_31 < x_33)) {
-    float const x_38 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_40 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_42 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_38, x_40, x_42, x_44);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4b6b857..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-         %25 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-         %21 = OpBitcast %float %uint_1
-         %26 = OpBitcast %float %uint_1
-         %27 = OpFDiv %float %26 %float_1
-         %24 = OpExtInst %float %25 Floor %27
-         %28 = OpFMul %float %float_1 %24
-         %29 = OpFSub %float %21 %28
-               OpStore %a %29
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %35 = OpLoad %float %34
-         %36 = OpCompositeConstruct %v4float %35 %35 %35 %35
-               OpStore %x_GLF_color %36
-         %37 = OpLoad %float %a
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %37 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %43
-         %44 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %49 = OpLoad %float %48
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %51 = OpLoad %float %50
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %53 = OpLoad %float %52
-         %54 = OpCompositeConstruct %v4float %47 %49 %51 %53
-               OpStore %x_GLF_color %54
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ca60286..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,38 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var a : f32;
-  a = (bitcast<f32>(1u) - (1.0 * floor((bitcast<f32>(1u) / 1.0))));
-  let x_29 : f32 = x_6.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_29, x_29, x_29, x_29);
-  let x_31 : f32 = a;
-  let x_33 : f32 = x_6.x_GLF_uniform_float_values[2];
-  if ((x_31 < x_33)) {
-    let x_38 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_40 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_42 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_38, x_40, x_42, x_44);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6fea881..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-
-void main_1() {
-  float a = 0.0f;
-  a = (asfloat(1u) % 1.0f);
-  const float x_29 = asfloat(x_6[1].x);
-  x_GLF_color = float4(x_29, x_29, x_29, x_29);
-  const float x_31 = a;
-  const float x_33 = asfloat(x_6[2].x);
-  if ((x_31 < x_33)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_38 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const float x_40 = asfloat(x_6[1].x);
-    const float x_42 = asfloat(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_44 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(x_38, x_40, x_42, x_44);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.msl
deleted file mode 100755
index c60e6c1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  a = fmod(as_type<float>(1u), 1.0f);
-  float const x_29 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_3) = float4(x_29, x_29, x_29, x_29);
-  float const x_31 = a;
-  float const x_33 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  if ((x_31 < x_33)) {
-    float const x_38 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_40 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_42 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_38, x_40, x_42, x_44);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 205d90a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,101 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-         %21 = OpBitcast %float %uint_1
-         %24 = OpFRem %float %21 %float_1
-               OpStore %a %24
-         %29 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %30 = OpLoad %float %29
-         %31 = OpCompositeConstruct %v4float %30 %30 %30 %30
-               OpStore %x_GLF_color %31
-         %32 = OpLoad %float %a
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %35 = OpLoad %float %34
-         %36 = OpFOrdLessThan %bool %32 %35
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %44 = OpLoad %float %43
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %46 = OpLoad %float %45
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %48 = OpLoad %float %47
-         %49 = OpCompositeConstruct %v4float %42 %44 %46 %48
-               OpStore %x_GLF_color %49
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8f1d936..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-mod-uint-bits-float/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,38 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var a : f32;
-  a = (bitcast<f32>(1u) % 1.0);
-  let x_29 : f32 = x_6.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_29, x_29, x_29, x_29);
-  let x_31 : f32 = a;
-  let x_33 : f32 = x_6.x_GLF_uniform_float_values[2];
-  if ((x_31 < x_33)) {
-    let x_38 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_40 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_42 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_38, x_40, x_42, x_44);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0109ec6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_8 : register(b2, space0) {
-  uint4 x_8[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-cbuffer cbuffer_x_12 : register(b1, space0) {
-  uint4 x_12[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  int b = 0;
-  a = 0u;
-  const int x_41 = asint(x_8[1].x);
-  b = x_41;
-  const float x_43 = gl_FragCoord.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_10[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_43 < x_45)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const uint x_50 = x_12[scalar_offset_1 / 4][scalar_offset_1 % 4];
-    b = asint((x_50 % a));
-  }
-  const int x_54 = b;
-  const int x_56 = asint(x_8[1].x);
-  if ((x_54 == x_56)) {
-    const int x_62 = asint(x_8[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_68 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_71 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_62), float(x_65), float(x_68), float(x_71));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_75 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_76 = float(x_75);
-    x_GLF_color = float4(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_7 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_7;
-}
-O:\src\chrome\src\third_party\dawn\third_party\tint\test\Shader@0x0000028809903F10(25,16-23): error X4010: Unsigned integer divide by zero
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.msl
deleted file mode 100644
index 399547d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_uint_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf2& x_8, constant buf0& x_10, constant buf1& x_12, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  uint a = 0u;
-  int b = 0;
-  a = 0u;
-  int const x_41 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  b = x_41;
-  float const x_43 = (*(tint_symbol_3)).x;
-  float const x_45 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_43 < x_45)) {
-    uint const x_50 = x_12.x_GLF_uniform_uint_values.arr[0].el;
-    uint const x_51 = a;
-    b = as_type<int>((x_50 % x_51));
-  }
-  int const x_54 = b;
-  int const x_56 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_54 == x_56)) {
-    int const x_62 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_68 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_71 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_62), float(x_65), float(x_68), float(x_71));
-  } else {
-    int const x_75 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_76 = float(x_75);
-    *(tint_symbol_4) = float4(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf2& x_8, constant buf0& x_10, constant buf1& x_12, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, x_12, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf2& x_8 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]], constant buf1& x_12 [[buffer(2)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, x_12, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 250ca06..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,166 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_uint_values"
-               OpName %x_12 "x_12"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_uint_uint_1 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf2 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_8 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-       %buf1 = OpTypeStruct %_arr_uint_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_12 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %33 = OpConstantNull %uint
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-   %main_out = OpTypeStruct %v4float
-         %83 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %33
-          %b = OpVariable %_ptr_Function_int Function %36
-               OpStore %a %uint_0
-         %40 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %41 = OpLoad %int %40
-               OpStore %b %41
-         %43 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %44 = OpLoad %float %43
-         %47 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %48 = OpLoad %float %47
-         %49 = OpFOrdLessThan %bool %44 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %49 %52 %51
-         %52 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_uint %x_12 %uint_0 %int_0
-         %55 = OpLoad %uint %54
-         %56 = OpLoad %uint %a
-         %58 = OpUMod %uint %55 %56
-         %57 = OpBitcast %int %58
-               OpStore %b %57
-               OpBranch %51
-         %51 = OpLabel
-         %59 = OpLoad %int %b
-         %60 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %61 = OpLoad %int %60
-         %62 = OpIEqual %bool %59 %61
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-         %66 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %67
-         %75 = OpConvertSToF %float %69
-         %76 = OpConvertSToF %float %71
-         %77 = OpConvertSToF %float %73
-         %78 = OpCompositeConstruct %v4float %74 %75 %76 %77
-               OpStore %x_GLF_color %78
-               OpBranch %63
-         %65 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpConvertSToF %float %80
-         %82 = OpCompositeConstruct %v4float %81 %81 %81 %81
-               OpStore %x_GLF_color %82
-               OpBranch %63
-         %63 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %83
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %87 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %88 = OpFunctionCall %void %main_1
-         %89 = OpLoad %v4float %x_GLF_color
-         %90 = OpCompositeConstruct %main_out %89
-               OpReturnValue %90
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-         %92 = OpLabel
-         %94 = OpLoad %v4float %gl_FragCoord_param_1
-         %93 = OpFunctionCall %main_out %main_inner %94
-         %95 = OpCompositeExtract %v4float %93 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5204e88..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-type Arr_2 = [[stride(16)]] array<u32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_uint_values : Arr_2;
-};
-
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_12 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var b : i32;
-  a = 0u;
-  let x_41 : i32 = x_8.x_GLF_uniform_int_values[1];
-  b = x_41;
-  let x_43 : f32 = gl_FragCoord.x;
-  let x_45 : f32 = x_10.x_GLF_uniform_float_values[0];
-  if ((x_43 < x_45)) {
-    let x_50 : u32 = x_12.x_GLF_uniform_uint_values[0];
-    let x_51 : u32 = a;
-    b = bitcast<i32>((x_50 % x_51));
-  }
-  let x_54 : i32 = b;
-  let x_56 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_54 == x_56)) {
-    let x_62 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_68 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_71 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_62), f32(x_65), f32(x_68), f32(x_71));
-  } else {
-    let x_75 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_76 : f32 = f32(x_75);
-    x_GLF_color = vec4<f32>(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3d86b59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_8 : register(b2, space0) {
-  uint4 x_8[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-cbuffer cbuffer_x_12 : register(b1, space0) {
-  uint4 x_12[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  int b = 0;
-  a = 0u;
-  const int x_41 = asint(x_8[1].x);
-  b = x_41;
-  const float x_43 = gl_FragCoord.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_10[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_43 < x_45)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const uint x_50 = x_12[scalar_offset_1 / 4][scalar_offset_1 % 4];
-    b = asint((x_50 % a));
-  }
-  const int x_54 = b;
-  const int x_56 = asint(x_8[1].x);
-  if ((x_54 == x_56)) {
-    const int x_62 = asint(x_8[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_68 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_71 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_62), float(x_65), float(x_68), float(x_71));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_75 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_76 = float(x_75);
-    x_GLF_color = float4(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_7 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_7;
-}
-O:\src\chrome\src\third_party\dawn\third_party\tint\test\Shader@0x000001EB404C9FC0(25,16-23): error X4010: Unsigned integer divide by zero
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.msl
deleted file mode 100644
index 399547d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_uint_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf2& x_8, constant buf0& x_10, constant buf1& x_12, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  uint a = 0u;
-  int b = 0;
-  a = 0u;
-  int const x_41 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  b = x_41;
-  float const x_43 = (*(tint_symbol_3)).x;
-  float const x_45 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_43 < x_45)) {
-    uint const x_50 = x_12.x_GLF_uniform_uint_values.arr[0].el;
-    uint const x_51 = a;
-    b = as_type<int>((x_50 % x_51));
-  }
-  int const x_54 = b;
-  int const x_56 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_54 == x_56)) {
-    int const x_62 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_68 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_71 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_4) = float4(float(x_62), float(x_65), float(x_68), float(x_71));
-  } else {
-    int const x_75 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_76 = float(x_75);
-    *(tint_symbol_4) = float4(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf2& x_8, constant buf0& x_10, constant buf1& x_12, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, x_10, x_12, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf2& x_8 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]], constant buf1& x_12 [[buffer(2)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, x_12, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 250ca06..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,166 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_uint_values"
-               OpName %x_12 "x_12"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_uint_uint_1 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf2 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_8 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-       %buf1 = OpTypeStruct %_arr_uint_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_12 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %33 = OpConstantNull %uint
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-   %main_out = OpTypeStruct %v4float
-         %83 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %33
-          %b = OpVariable %_ptr_Function_int Function %36
-               OpStore %a %uint_0
-         %40 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %41 = OpLoad %int %40
-               OpStore %b %41
-         %43 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %44 = OpLoad %float %43
-         %47 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %48 = OpLoad %float %47
-         %49 = OpFOrdLessThan %bool %44 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %49 %52 %51
-         %52 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_uint %x_12 %uint_0 %int_0
-         %55 = OpLoad %uint %54
-         %56 = OpLoad %uint %a
-         %58 = OpUMod %uint %55 %56
-         %57 = OpBitcast %int %58
-               OpStore %b %57
-               OpBranch %51
-         %51 = OpLabel
-         %59 = OpLoad %int %b
-         %60 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %61 = OpLoad %int %60
-         %62 = OpIEqual %bool %59 %61
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-         %66 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpConvertSToF %float %67
-         %75 = OpConvertSToF %float %69
-         %76 = OpConvertSToF %float %71
-         %77 = OpConvertSToF %float %73
-         %78 = OpCompositeConstruct %v4float %74 %75 %76 %77
-               OpStore %x_GLF_color %78
-               OpBranch %63
-         %65 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpConvertSToF %float %80
-         %82 = OpCompositeConstruct %v4float %81 %81 %81 %81
-               OpStore %x_GLF_color %82
-               OpBranch %63
-         %63 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %83
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %87 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %88 = OpFunctionCall %void %main_1
-         %89 = OpLoad %v4float %x_GLF_color
-         %90 = OpCompositeConstruct %main_out %89
-               OpReturnValue %90
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-         %92 = OpLabel
-         %94 = OpLoad %v4float %gl_FragCoord_param_1
-         %93 = OpFunctionCall %main_out %main_inner %94
-         %95 = OpCompositeExtract %v4float %93 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5204e88..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-modulo-zero-never-executed/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-type Arr_2 = [[stride(16)]] array<u32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_uint_values : Arr_2;
-};
-
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_12 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var b : i32;
-  a = 0u;
-  let x_41 : i32 = x_8.x_GLF_uniform_int_values[1];
-  b = x_41;
-  let x_43 : f32 = gl_FragCoord.x;
-  let x_45 : f32 = x_10.x_GLF_uniform_float_values[0];
-  if ((x_43 < x_45)) {
-    let x_50 : u32 = x_12.x_GLF_uniform_uint_values[0];
-    let x_51 : u32 = a;
-    b = bitcast<i32>((x_50 % x_51));
-  }
-  let x_54 : i32 = b;
-  let x_56 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_54 == x_56)) {
-    let x_62 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_68 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_71 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_62), f32(x_65), f32(x_68), f32(x_71));
-  } else {
-    let x_75 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_76 : f32 = f32(x_75);
-    x_GLF_color = vec4<f32>(x_76, x_76, x_76, x_76);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 20ec5cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,3 +0,0 @@
-SKIP: FAILED
-
-test timed out after 30s
\ No newline at end of file
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.msl
deleted file mode 100644
index 93f927e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,630 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2x3 m23 = float2x3(0.0f);
-  float2x4 m24 = float2x4(0.0f);
-  float3x2 m32 = float3x2(0.0f);
-  float3x3 m33 = float3x3(0.0f);
-  float3x4 m34 = float3x4(0.0f);
-  float4x2 m42 = float4x2(0.0f);
-  float4x3 m43 = float4x3(0.0f);
-  float4x4 m44 = float4x4(0.0f);
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int i_4 = 0;
-  int i_5 = 0;
-  int i_6 = 0;
-  int i_7 = 0;
-  int i_8 = 0;
-  int i_9 = 0;
-  int i_10 = 0;
-  int i_11 = 0;
-  int i_12 = 0;
-  int i_13 = 0;
-  int i_14 = 0;
-  int i_15 = 0;
-  int i_16 = 0;
-  int i_17 = 0;
-  int i_18 = 0;
-  int i_19 = 0;
-  int i_20 = 0;
-  int i_21 = 0;
-  int i_22 = 0;
-  int i_23 = 0;
-  int i_24 = 0;
-  int i_25 = 0;
-  int i_26 = 0;
-  int i_27 = 0;
-  int i_28 = 0;
-  int i_29 = 0;
-  int i_30 = 0;
-  int i_31 = 0;
-  int i_32 = 0;
-  int i_33 = 0;
-  int i_34 = 0;
-  int i_35 = 0;
-  int i_36 = 0;
-  int i_37 = 0;
-  float sum = 0.0f;
-  int r = 0;
-  *(tint_symbol_3) = 0;
-  m23 = float2x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
-  m24 = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-  m32 = float3x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  m33 = float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
-  m34 = float3x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-  m42 = float4x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  m43 = float4x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
-  m44 = float4x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-  i = 0;
-  while (true) {
-    int const x_105 = i;
-    if ((x_105 < 1)) {
-    } else {
-      break;
-    }
-    i_1 = 0;
-    while (true) {
-      int const x_112 = i_1;
-      if ((x_112 < 1)) {
-      } else {
-        break;
-      }
-      i_2 = 0;
-      while (true) {
-        int const x_119 = i_2;
-        if ((x_119 < 1)) {
-        } else {
-          break;
-        }
-        i_3 = 0;
-        while (true) {
-          int const x_126 = i_3;
-          if ((x_126 < 1)) {
-          } else {
-            break;
-          }
-          i_4 = 0;
-          while (true) {
-            int const x_133 = i_4;
-            if ((x_133 < 1)) {
-            } else {
-              break;
-            }
-            i_5 = 0;
-            while (true) {
-              int const x_140 = i_5;
-              if ((x_140 < 1)) {
-              } else {
-                break;
-              }
-              i_6 = 0;
-              while (true) {
-                int const x_147 = i_6;
-                if ((x_147 < 1)) {
-                } else {
-                  break;
-                }
-                i_7 = 0;
-                while (true) {
-                  int const x_154 = i_7;
-                  if ((x_154 < 1)) {
-                  } else {
-                    break;
-                  }
-                  i_8 = 0;
-                  while (true) {
-                    int const x_161 = i_8;
-                    if ((x_161 < 1)) {
-                    } else {
-                      break;
-                    }
-                    i_9 = 0;
-                    while (true) {
-                      int const x_168 = i_9;
-                      if ((x_168 < 1)) {
-                      } else {
-                        break;
-                      }
-                      i_10 = 0;
-                      while (true) {
-                        int const x_175 = i_10;
-                        if ((x_175 < 1)) {
-                        } else {
-                          break;
-                        }
-                        i_11 = 0;
-                        while (true) {
-                          int const x_182 = i_11;
-                          if ((x_182 < 1)) {
-                          } else {
-                            break;
-                          }
-                          i_12 = 0;
-                          while (true) {
-                            int const x_189 = i_12;
-                            if ((x_189 < 1)) {
-                            } else {
-                              break;
-                            }
-                            i_13 = 0;
-                            while (true) {
-                              int const x_196 = i_13;
-                              if ((x_196 < 1)) {
-                              } else {
-                                break;
-                              }
-                              i_14 = 0;
-                              while (true) {
-                                int const x_203 = i_14;
-                                if ((x_203 < 1)) {
-                                } else {
-                                  break;
-                                }
-                                i_15 = 0;
-                                while (true) {
-                                  int const x_210 = i_15;
-                                  if ((x_210 < 1)) {
-                                  } else {
-                                    break;
-                                  }
-                                  i_16 = 0;
-                                  while (true) {
-                                    int const x_217 = i_16;
-                                    if ((x_217 < 1)) {
-                                    } else {
-                                      break;
-                                    }
-                                    i_17 = 0;
-                                    while (true) {
-                                      int const x_224 = i_17;
-                                      if ((x_224 < 1)) {
-                                      } else {
-                                        break;
-                                      }
-                                      i_18 = 0;
-                                      while (true) {
-                                        int const x_231 = i_18;
-                                        if ((x_231 < 1)) {
-                                        } else {
-                                          break;
-                                        }
-                                        i_19 = 0;
-                                        while (true) {
-                                          int const x_238 = i_19;
-                                          if ((x_238 < 1)) {
-                                          } else {
-                                            break;
-                                          }
-                                          i_20 = 0;
-                                          while (true) {
-                                            int const x_245 = i_20;
-                                            if ((x_245 < 1)) {
-                                            } else {
-                                              break;
-                                            }
-                                            i_21 = 0;
-                                            while (true) {
-                                              int const x_252 = i_21;
-                                              if ((x_252 < 1)) {
-                                              } else {
-                                                break;
-                                              }
-                                              i_22 = 0;
-                                              while (true) {
-                                                int const x_259 = i_22;
-                                                if ((x_259 < 1)) {
-                                                } else {
-                                                  break;
-                                                }
-                                                i_23 = 0;
-                                                while (true) {
-                                                  int const x_266 = i_23;
-                                                  if ((x_266 < 1)) {
-                                                  } else {
-                                                    break;
-                                                  }
-                                                  i_24 = 0;
-                                                  while (true) {
-                                                    int const x_273 = i_24;
-                                                    if ((x_273 < 1)) {
-                                                    } else {
-                                                      break;
-                                                    }
-                                                    i_25 = 0;
-                                                    while (true) {
-                                                      int const x_280 = i_25;
-                                                      if ((x_280 < 1)) {
-                                                      } else {
-                                                        break;
-                                                      }
-                                                      i_26 = 0;
-                                                      while (true) {
-                                                        int const x_287 = i_26;
-                                                        if ((x_287 < 1)) {
-                                                        } else {
-                                                          break;
-                                                        }
-                                                        i_27 = 0;
-                                                        while (true) {
-                                                          int const x_294 = i_27;
-                                                          if ((x_294 < 1)) {
-                                                          } else {
-                                                            break;
-                                                          }
-                                                          i_28 = 0;
-                                                          while (true) {
-                                                            int const x_301 = i_28;
-                                                            if ((x_301 < 1)) {
-                                                            } else {
-                                                              break;
-                                                            }
-                                                            i_29 = 0;
-                                                            while (true) {
-                                                              int const x_308 = i_29;
-                                                              if ((x_308 < 1)) {
-                                                              } else {
-                                                                break;
-                                                              }
-                                                              i_30 = 0;
-                                                              while (true) {
-                                                                int const x_315 = i_30;
-                                                                if ((x_315 < 1)) {
-                                                                } else {
-                                                                  break;
-                                                                }
-                                                                i_31 = 0;
-                                                                while (true) {
-                                                                  int const x_322 = i_31;
-                                                                  if ((x_322 < 1)) {
-                                                                  } else {
-                                                                    break;
-                                                                  }
-                                                                  i_32 = 0;
-                                                                  while (true) {
-                                                                    int const x_329 = i_32;
-                                                                    if ((x_329 < 1)) {
-                                                                    } else {
-                                                                      break;
-                                                                    }
-                                                                    i_33 = 0;
-                                                                    while (true) {
-                                                                      int const x_336 = i_33;
-                                                                      if ((x_336 < 1)) {
-                                                                      } else {
-                                                                        break;
-                                                                      }
-                                                                      i_34 = 0;
-                                                                      while (true) {
-                                                                        int const x_343 = i_34;
-                                                                        if ((x_343 < 1)) {
-                                                                        } else {
-                                                                          break;
-                                                                        }
-                                                                        i_35 = 0;
-                                                                        while (true) {
-                                                                          int const x_350 = i_35;
-                                                                          if ((x_350 < 1)) {
-                                                                          } else {
-                                                                            break;
-                                                                          }
-                                                                          i_36 = 0;
-                                                                          while (true) {
-                                                                            int const x_357 = i_36;
-                                                                            if ((x_357 < 1)) {
-                                                                            } else {
-                                                                              break;
-                                                                            }
-                                                                            i_37 = 0;
-                                                                            while (true) {
-                                                                              int const x_364 = i_37;
-                                                                              if ((x_364 < 1)) {
-                                                                              } else {
-                                                                                break;
-                                                                              }
-                                                                              while (true) {
-                                                                                int const x_371 = *(tint_symbol_3);
-                                                                                *(tint_symbol_3) = as_type<int>((as_type<uint>(x_371) + as_type<uint>(1)));
-                                                                                {
-                                                                                  int const x_373 = *(tint_symbol_3);
-                                                                                  if ((x_373 < 98)) {
-                                                                                  } else {
-                                                                                    break;
-                                                                                  }
-                                                                                }
-                                                                              }
-                                                                              int const x_375 = i_37;
-                                                                              int const x_376 = i_37;
-                                                                              m23[x_375][x_376] = 1.0f;
-                                                                              int const x_378 = i_37;
-                                                                              int const x_379 = i_37;
-                                                                              m24[x_378][x_379] = 1.0f;
-                                                                              int const x_381 = i_37;
-                                                                              int const x_382 = i_37;
-                                                                              m32[x_381][x_382] = 1.0f;
-                                                                              int const x_384 = i_37;
-                                                                              int const x_385 = i_37;
-                                                                              m33[x_384][x_385] = 1.0f;
-                                                                              int const x_387 = i_37;
-                                                                              int const x_388 = i_37;
-                                                                              m34[x_387][x_388] = 1.0f;
-                                                                              int const x_390 = i_37;
-                                                                              int const x_391 = i_37;
-                                                                              m42[x_390][x_391] = 1.0f;
-                                                                              int const x_393 = i_37;
-                                                                              int const x_394 = i_37;
-                                                                              m43[x_393][x_394] = 1.0f;
-                                                                              int const x_396 = i_37;
-                                                                              int const x_397 = i_37;
-                                                                              m44[x_396][x_397] = 1.0f;
-                                                                              {
-                                                                                int const x_399 = i_37;
-                                                                                i_37 = as_type<int>((as_type<uint>(x_399) + as_type<uint>(1)));
-                                                                              }
-                                                                            }
-                                                                            {
-                                                                              int const x_401 = i_36;
-                                                                              i_36 = as_type<int>((as_type<uint>(x_401) + as_type<uint>(1)));
-                                                                            }
-                                                                          }
-                                                                          {
-                                                                            int const x_403 = i_35;
-                                                                            i_35 = as_type<int>((as_type<uint>(x_403) + as_type<uint>(1)));
-                                                                          }
-                                                                        }
-                                                                        {
-                                                                          int const x_405 = i_34;
-                                                                          i_34 = as_type<int>((as_type<uint>(x_405) + as_type<uint>(1)));
-                                                                        }
-                                                                      }
-                                                                      {
-                                                                        int const x_407 = i_33;
-                                                                        i_33 = as_type<int>((as_type<uint>(x_407) + as_type<uint>(1)));
-                                                                      }
-                                                                    }
-                                                                    {
-                                                                      int const x_409 = i_32;
-                                                                      i_32 = as_type<int>((as_type<uint>(x_409) + as_type<uint>(1)));
-                                                                    }
-                                                                  }
-                                                                  {
-                                                                    int const x_411 = i_31;
-                                                                    i_31 = as_type<int>((as_type<uint>(x_411) + as_type<uint>(1)));
-                                                                  }
-                                                                }
-                                                                {
-                                                                  int const x_413 = i_30;
-                                                                  i_30 = as_type<int>((as_type<uint>(x_413) + as_type<uint>(1)));
-                                                                }
-                                                              }
-                                                              {
-                                                                int const x_415 = i_29;
-                                                                i_29 = as_type<int>((as_type<uint>(x_415) + as_type<uint>(1)));
-                                                              }
-                                                            }
-                                                            {
-                                                              int const x_417 = i_28;
-                                                              i_28 = as_type<int>((as_type<uint>(x_417) + as_type<uint>(1)));
-                                                            }
-                                                          }
-                                                          {
-                                                            int const x_419 = i_27;
-                                                            i_27 = as_type<int>((as_type<uint>(x_419) + as_type<uint>(1)));
-                                                          }
-                                                        }
-                                                        {
-                                                          int const x_421 = i_26;
-                                                          i_26 = as_type<int>((as_type<uint>(x_421) + as_type<uint>(1)));
-                                                        }
-                                                      }
-                                                      {
-                                                        int const x_423 = i_25;
-                                                        i_25 = as_type<int>((as_type<uint>(x_423) + as_type<uint>(1)));
-                                                      }
-                                                    }
-                                                    {
-                                                      int const x_425 = i_24;
-                                                      i_24 = as_type<int>((as_type<uint>(x_425) + as_type<uint>(1)));
-                                                    }
-                                                  }
-                                                  {
-                                                    int const x_427 = i_23;
-                                                    i_23 = as_type<int>((as_type<uint>(x_427) + as_type<uint>(1)));
-                                                  }
-                                                }
-                                                {
-                                                  int const x_429 = i_22;
-                                                  i_22 = as_type<int>((as_type<uint>(x_429) + as_type<uint>(1)));
-                                                }
-                                              }
-                                              {
-                                                int const x_431 = i_21;
-                                                i_21 = as_type<int>((as_type<uint>(x_431) + as_type<uint>(1)));
-                                              }
-                                            }
-                                            {
-                                              int const x_433 = i_20;
-                                              i_20 = as_type<int>((as_type<uint>(x_433) + as_type<uint>(1)));
-                                            }
-                                          }
-                                          {
-                                            int const x_435 = i_19;
-                                            i_19 = as_type<int>((as_type<uint>(x_435) + as_type<uint>(1)));
-                                          }
-                                        }
-                                        {
-                                          int const x_437 = i_18;
-                                          i_18 = as_type<int>((as_type<uint>(x_437) + as_type<uint>(1)));
-                                        }
-                                      }
-                                      {
-                                        int const x_439 = i_17;
-                                        i_17 = as_type<int>((as_type<uint>(x_439) + as_type<uint>(1)));
-                                      }
-                                    }
-                                    {
-                                      int const x_441 = i_16;
-                                      i_16 = as_type<int>((as_type<uint>(x_441) + as_type<uint>(1)));
-                                    }
-                                  }
-                                  {
-                                    int const x_443 = i_15;
-                                    i_15 = as_type<int>((as_type<uint>(x_443) + as_type<uint>(1)));
-                                  }
-                                }
-                                {
-                                  int const x_445 = i_14;
-                                  i_14 = as_type<int>((as_type<uint>(x_445) + as_type<uint>(1)));
-                                }
-                              }
-                              {
-                                int const x_447 = i_13;
-                                i_13 = as_type<int>((as_type<uint>(x_447) + as_type<uint>(1)));
-                              }
-                            }
-                            {
-                              int const x_449 = i_12;
-                              i_12 = as_type<int>((as_type<uint>(x_449) + as_type<uint>(1)));
-                            }
-                          }
-                          {
-                            int const x_451 = i_11;
-                            i_11 = as_type<int>((as_type<uint>(x_451) + as_type<uint>(1)));
-                          }
-                        }
-                        {
-                          int const x_453 = i_10;
-                          i_10 = as_type<int>((as_type<uint>(x_453) + as_type<uint>(1)));
-                        }
-                      }
-                      {
-                        int const x_455 = i_9;
-                        i_9 = as_type<int>((as_type<uint>(x_455) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_457 = i_8;
-                      i_8 = as_type<int>((as_type<uint>(x_457) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_459 = i_7;
-                    i_7 = as_type<int>((as_type<uint>(x_459) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_461 = i_6;
-                  i_6 = as_type<int>((as_type<uint>(x_461) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_463 = i_5;
-                i_5 = as_type<int>((as_type<uint>(x_463) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_465 = i_4;
-              i_4 = as_type<int>((as_type<uint>(x_465) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_467 = i_3;
-            i_3 = as_type<int>((as_type<uint>(x_467) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_469 = i_2;
-          i_2 = as_type<int>((as_type<uint>(x_469) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_471 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_471) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_473 = i;
-      i = as_type<int>((as_type<uint>(x_473) + as_type<uint>(1)));
-    }
-  }
-  sum = 0.0f;
-  r = 0;
-  while (true) {
-    int const x_479 = *(tint_symbol_3);
-    if ((x_479 < 100)) {
-    } else {
-      break;
-    }
-    int const x_482 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_482) + as_type<uint>(1)));
-    int const x_484 = r;
-    float const x_486 = m23[0][x_484];
-    float const x_487 = sum;
-    sum = (x_487 + x_486);
-    int const x_489 = r;
-    float const x_491 = m24[0][x_489];
-    float const x_492 = sum;
-    sum = (x_492 + x_491);
-    int const x_494 = r;
-    float const x_496 = m32[0][x_494];
-    float const x_497 = sum;
-    sum = (x_497 + x_496);
-    int const x_499 = r;
-    float const x_501 = m33[0][x_499];
-    float const x_502 = sum;
-    sum = (x_502 + x_501);
-    int const x_504 = r;
-    float const x_506 = m34[0][x_504];
-    float const x_507 = sum;
-    sum = (x_507 + x_506);
-    int const x_509 = r;
-    float const x_511 = m42[0][x_509];
-    float const x_512 = sum;
-    sum = (x_512 + x_511);
-    int const x_514 = r;
-    float const x_516 = m43[0][x_514];
-    float const x_517 = sum;
-    sum = (x_517 + x_516);
-    int const x_519 = r;
-    float const x_521 = m44[0][x_519];
-    float const x_522 = sum;
-    sum = (x_522 + x_521);
-    {
-      int const x_524 = r;
-      r = as_type<int>((as_type<uint>(x_524) + as_type<uint>(1)));
-    }
-  }
-  float const x_526 = sum;
-  if ((x_526 == 8.0f)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5959b0f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,1173 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 632
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m23 "m23"
-               OpName %m24 "m24"
-               OpName %m32 "m32"
-               OpName %m33 "m33"
-               OpName %m34 "m34"
-               OpName %m42 "m42"
-               OpName %m43 "m43"
-               OpName %m44 "m44"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %i_3 "i_3"
-               OpName %i_4 "i_4"
-               OpName %i_5 "i_5"
-               OpName %i_6 "i_6"
-               OpName %i_7 "i_7"
-               OpName %i_8 "i_8"
-               OpName %i_9 "i_9"
-               OpName %i_10 "i_10"
-               OpName %i_11 "i_11"
-               OpName %i_12 "i_12"
-               OpName %i_13 "i_13"
-               OpName %i_14 "i_14"
-               OpName %i_15 "i_15"
-               OpName %i_16 "i_16"
-               OpName %i_17 "i_17"
-               OpName %i_18 "i_18"
-               OpName %i_19 "i_19"
-               OpName %i_20 "i_20"
-               OpName %i_21 "i_21"
-               OpName %i_22 "i_22"
-               OpName %i_23 "i_23"
-               OpName %i_24 "i_24"
-               OpName %i_25 "i_25"
-               OpName %i_26 "i_26"
-               OpName %i_27 "i_27"
-               OpName %i_28 "i_28"
-               OpName %i_29 "i_29"
-               OpName %i_30 "i_30"
-               OpName %i_31 "i_31"
-               OpName %i_32 "i_32"
-               OpName %i_33 "i_33"
-               OpName %i_34 "i_34"
-               OpName %i_35 "i_35"
-               OpName %i_36 "i_36"
-               OpName %i_37 "i_37"
-               OpName %sum "sum"
-               OpName %r "r"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat2v3float = OpTypeMatrix %v3float 2
-%_ptr_Function_mat2v3float = OpTypePointer Function %mat2v3float
-         %20 = OpConstantNull %mat2v3float
-%mat2v4float = OpTypeMatrix %v4float 2
-%_ptr_Function_mat2v4float = OpTypePointer Function %mat2v4float
-         %24 = OpConstantNull %mat2v4float
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %29 = OpConstantNull %mat3v2float
-%mat3v3float = OpTypeMatrix %v3float 3
-%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
-         %33 = OpConstantNull %mat3v3float
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float
-         %37 = OpConstantNull %mat3v4float
-%mat4v2float = OpTypeMatrix %v2float 4
-%_ptr_Function_mat4v2float = OpTypePointer Function %mat4v2float
-         %41 = OpConstantNull %mat4v2float
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %45 = OpConstantNull %mat4v3float
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %49 = OpConstantNull %mat4v4float
-%_ptr_Function_int = OpTypePointer Function %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %91 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-         %95 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %96 = OpConstantComposite %mat2v3float %95 %95
-         %97 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %98 = OpConstantComposite %mat2v4float %97 %97
-         %99 = OpConstantComposite %v2float %float_0 %float_0
-        %100 = OpConstantComposite %mat3v2float %99 %99 %99
-        %101 = OpConstantComposite %mat3v3float %95 %95 %95
-        %102 = OpConstantComposite %mat3v4float %97 %97 %97
-        %103 = OpConstantComposite %mat4v2float %99 %99 %99 %99
-        %104 = OpConstantComposite %mat4v3float %95 %95 %95 %95
-        %105 = OpConstantComposite %mat4v4float %97 %97 %97 %97
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-     %int_98 = OpConstant %int 98
-    %float_1 = OpConstant %float 1
-    %int_100 = OpConstant %int 100
-    %float_8 = OpConstant %float 8
-        %620 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %621 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-        %m23 = OpVariable %_ptr_Function_mat2v3float Function %20
-        %m24 = OpVariable %_ptr_Function_mat2v4float Function %24
-        %m32 = OpVariable %_ptr_Function_mat3v2float Function %29
-        %m33 = OpVariable %_ptr_Function_mat3v3float Function %33
-        %m34 = OpVariable %_ptr_Function_mat3v4float Function %37
-        %m42 = OpVariable %_ptr_Function_mat4v2float Function %41
-        %m43 = OpVariable %_ptr_Function_mat4v3float Function %45
-        %m44 = OpVariable %_ptr_Function_mat4v4float Function %49
-          %i = OpVariable %_ptr_Function_int Function %9
-        %i_1 = OpVariable %_ptr_Function_int Function %9
-        %i_2 = OpVariable %_ptr_Function_int Function %9
-        %i_3 = OpVariable %_ptr_Function_int Function %9
-        %i_4 = OpVariable %_ptr_Function_int Function %9
-        %i_5 = OpVariable %_ptr_Function_int Function %9
-        %i_6 = OpVariable %_ptr_Function_int Function %9
-        %i_7 = OpVariable %_ptr_Function_int Function %9
-        %i_8 = OpVariable %_ptr_Function_int Function %9
-        %i_9 = OpVariable %_ptr_Function_int Function %9
-       %i_10 = OpVariable %_ptr_Function_int Function %9
-       %i_11 = OpVariable %_ptr_Function_int Function %9
-       %i_12 = OpVariable %_ptr_Function_int Function %9
-       %i_13 = OpVariable %_ptr_Function_int Function %9
-       %i_14 = OpVariable %_ptr_Function_int Function %9
-       %i_15 = OpVariable %_ptr_Function_int Function %9
-       %i_16 = OpVariable %_ptr_Function_int Function %9
-       %i_17 = OpVariable %_ptr_Function_int Function %9
-       %i_18 = OpVariable %_ptr_Function_int Function %9
-       %i_19 = OpVariable %_ptr_Function_int Function %9
-       %i_20 = OpVariable %_ptr_Function_int Function %9
-       %i_21 = OpVariable %_ptr_Function_int Function %9
-       %i_22 = OpVariable %_ptr_Function_int Function %9
-       %i_23 = OpVariable %_ptr_Function_int Function %9
-       %i_24 = OpVariable %_ptr_Function_int Function %9
-       %i_25 = OpVariable %_ptr_Function_int Function %9
-       %i_26 = OpVariable %_ptr_Function_int Function %9
-       %i_27 = OpVariable %_ptr_Function_int Function %9
-       %i_28 = OpVariable %_ptr_Function_int Function %9
-       %i_29 = OpVariable %_ptr_Function_int Function %9
-       %i_30 = OpVariable %_ptr_Function_int Function %9
-       %i_31 = OpVariable %_ptr_Function_int Function %9
-       %i_32 = OpVariable %_ptr_Function_int Function %9
-       %i_33 = OpVariable %_ptr_Function_int Function %9
-       %i_34 = OpVariable %_ptr_Function_int Function %9
-       %i_35 = OpVariable %_ptr_Function_int Function %9
-       %i_36 = OpVariable %_ptr_Function_int Function %9
-       %i_37 = OpVariable %_ptr_Function_int Function %9
-        %sum = OpVariable %_ptr_Function_float Function %91
-          %r = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-               OpStore %m23 %96
-               OpStore %m24 %98
-               OpStore %m32 %100
-               OpStore %m33 %101
-               OpStore %m34 %102
-               OpStore %m42 %103
-               OpStore %m43 %104
-               OpStore %m44 %105
-               OpStore %i %int_0
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %i
-        %112 = OpSLessThan %bool %110 %int_1
-               OpSelectionMerge %114 None
-               OpBranchConditional %112 %115 %116
-        %115 = OpLabel
-               OpBranch %114
-        %116 = OpLabel
-               OpBranch %107
-        %114 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %117
-        %117 = OpLabel
-               OpLoopMerge %118 %119 None
-               OpBranch %120
-        %120 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpSLessThan %bool %121 %int_1
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %125
-        %124 = OpLabel
-               OpBranch %123
-        %125 = OpLabel
-               OpBranch %118
-        %123 = OpLabel
-               OpStore %i_2 %int_0
-               OpBranch %126
-        %126 = OpLabel
-               OpLoopMerge %127 %128 None
-               OpBranch %129
-        %129 = OpLabel
-        %130 = OpLoad %int %i_2
-        %131 = OpSLessThan %bool %130 %int_1
-               OpSelectionMerge %132 None
-               OpBranchConditional %131 %133 %134
-        %133 = OpLabel
-               OpBranch %132
-        %134 = OpLabel
-               OpBranch %127
-        %132 = OpLabel
-               OpStore %i_3 %int_0
-               OpBranch %135
-        %135 = OpLabel
-               OpLoopMerge %136 %137 None
-               OpBranch %138
-        %138 = OpLabel
-        %139 = OpLoad %int %i_3
-        %140 = OpSLessThan %bool %139 %int_1
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %143
-        %142 = OpLabel
-               OpBranch %141
-        %143 = OpLabel
-               OpBranch %136
-        %141 = OpLabel
-               OpStore %i_4 %int_0
-               OpBranch %144
-        %144 = OpLabel
-               OpLoopMerge %145 %146 None
-               OpBranch %147
-        %147 = OpLabel
-        %148 = OpLoad %int %i_4
-        %149 = OpSLessThan %bool %148 %int_1
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %152
-        %151 = OpLabel
-               OpBranch %150
-        %152 = OpLabel
-               OpBranch %145
-        %150 = OpLabel
-               OpStore %i_5 %int_0
-               OpBranch %153
-        %153 = OpLabel
-               OpLoopMerge %154 %155 None
-               OpBranch %156
-        %156 = OpLabel
-        %157 = OpLoad %int %i_5
-        %158 = OpSLessThan %bool %157 %int_1
-               OpSelectionMerge %159 None
-               OpBranchConditional %158 %160 %161
-        %160 = OpLabel
-               OpBranch %159
-        %161 = OpLabel
-               OpBranch %154
-        %159 = OpLabel
-               OpStore %i_6 %int_0
-               OpBranch %162
-        %162 = OpLabel
-               OpLoopMerge %163 %164 None
-               OpBranch %165
-        %165 = OpLabel
-        %166 = OpLoad %int %i_6
-        %167 = OpSLessThan %bool %166 %int_1
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %163
-        %168 = OpLabel
-               OpStore %i_7 %int_0
-               OpBranch %171
-        %171 = OpLabel
-               OpLoopMerge %172 %173 None
-               OpBranch %174
-        %174 = OpLabel
-        %175 = OpLoad %int %i_7
-        %176 = OpSLessThan %bool %175 %int_1
-               OpSelectionMerge %177 None
-               OpBranchConditional %176 %178 %179
-        %178 = OpLabel
-               OpBranch %177
-        %179 = OpLabel
-               OpBranch %172
-        %177 = OpLabel
-               OpStore %i_8 %int_0
-               OpBranch %180
-        %180 = OpLabel
-               OpLoopMerge %181 %182 None
-               OpBranch %183
-        %183 = OpLabel
-        %184 = OpLoad %int %i_8
-        %185 = OpSLessThan %bool %184 %int_1
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-               OpBranch %186
-        %188 = OpLabel
-               OpBranch %181
-        %186 = OpLabel
-               OpStore %i_9 %int_0
-               OpBranch %189
-        %189 = OpLabel
-               OpLoopMerge %190 %191 None
-               OpBranch %192
-        %192 = OpLabel
-        %193 = OpLoad %int %i_9
-        %194 = OpSLessThan %bool %193 %int_1
-               OpSelectionMerge %195 None
-               OpBranchConditional %194 %196 %197
-        %196 = OpLabel
-               OpBranch %195
-        %197 = OpLabel
-               OpBranch %190
-        %195 = OpLabel
-               OpStore %i_10 %int_0
-               OpBranch %198
-        %198 = OpLabel
-               OpLoopMerge %199 %200 None
-               OpBranch %201
-        %201 = OpLabel
-        %202 = OpLoad %int %i_10
-        %203 = OpSLessThan %bool %202 %int_1
-               OpSelectionMerge %204 None
-               OpBranchConditional %203 %205 %206
-        %205 = OpLabel
-               OpBranch %204
-        %206 = OpLabel
-               OpBranch %199
-        %204 = OpLabel
-               OpStore %i_11 %int_0
-               OpBranch %207
-        %207 = OpLabel
-               OpLoopMerge %208 %209 None
-               OpBranch %210
-        %210 = OpLabel
-        %211 = OpLoad %int %i_11
-        %212 = OpSLessThan %bool %211 %int_1
-               OpSelectionMerge %213 None
-               OpBranchConditional %212 %214 %215
-        %214 = OpLabel
-               OpBranch %213
-        %215 = OpLabel
-               OpBranch %208
-        %213 = OpLabel
-               OpStore %i_12 %int_0
-               OpBranch %216
-        %216 = OpLabel
-               OpLoopMerge %217 %218 None
-               OpBranch %219
-        %219 = OpLabel
-        %220 = OpLoad %int %i_12
-        %221 = OpSLessThan %bool %220 %int_1
-               OpSelectionMerge %222 None
-               OpBranchConditional %221 %223 %224
-        %223 = OpLabel
-               OpBranch %222
-        %224 = OpLabel
-               OpBranch %217
-        %222 = OpLabel
-               OpStore %i_13 %int_0
-               OpBranch %225
-        %225 = OpLabel
-               OpLoopMerge %226 %227 None
-               OpBranch %228
-        %228 = OpLabel
-        %229 = OpLoad %int %i_13
-        %230 = OpSLessThan %bool %229 %int_1
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %233
-        %232 = OpLabel
-               OpBranch %231
-        %233 = OpLabel
-               OpBranch %226
-        %231 = OpLabel
-               OpStore %i_14 %int_0
-               OpBranch %234
-        %234 = OpLabel
-               OpLoopMerge %235 %236 None
-               OpBranch %237
-        %237 = OpLabel
-        %238 = OpLoad %int %i_14
-        %239 = OpSLessThan %bool %238 %int_1
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %242
-        %241 = OpLabel
-               OpBranch %240
-        %242 = OpLabel
-               OpBranch %235
-        %240 = OpLabel
-               OpStore %i_15 %int_0
-               OpBranch %243
-        %243 = OpLabel
-               OpLoopMerge %244 %245 None
-               OpBranch %246
-        %246 = OpLabel
-        %247 = OpLoad %int %i_15
-        %248 = OpSLessThan %bool %247 %int_1
-               OpSelectionMerge %249 None
-               OpBranchConditional %248 %250 %251
-        %250 = OpLabel
-               OpBranch %249
-        %251 = OpLabel
-               OpBranch %244
-        %249 = OpLabel
-               OpStore %i_16 %int_0
-               OpBranch %252
-        %252 = OpLabel
-               OpLoopMerge %253 %254 None
-               OpBranch %255
-        %255 = OpLabel
-        %256 = OpLoad %int %i_16
-        %257 = OpSLessThan %bool %256 %int_1
-               OpSelectionMerge %258 None
-               OpBranchConditional %257 %259 %260
-        %259 = OpLabel
-               OpBranch %258
-        %260 = OpLabel
-               OpBranch %253
-        %258 = OpLabel
-               OpStore %i_17 %int_0
-               OpBranch %261
-        %261 = OpLabel
-               OpLoopMerge %262 %263 None
-               OpBranch %264
-        %264 = OpLabel
-        %265 = OpLoad %int %i_17
-        %266 = OpSLessThan %bool %265 %int_1
-               OpSelectionMerge %267 None
-               OpBranchConditional %266 %268 %269
-        %268 = OpLabel
-               OpBranch %267
-        %269 = OpLabel
-               OpBranch %262
-        %267 = OpLabel
-               OpStore %i_18 %int_0
-               OpBranch %270
-        %270 = OpLabel
-               OpLoopMerge %271 %272 None
-               OpBranch %273
-        %273 = OpLabel
-        %274 = OpLoad %int %i_18
-        %275 = OpSLessThan %bool %274 %int_1
-               OpSelectionMerge %276 None
-               OpBranchConditional %275 %277 %278
-        %277 = OpLabel
-               OpBranch %276
-        %278 = OpLabel
-               OpBranch %271
-        %276 = OpLabel
-               OpStore %i_19 %int_0
-               OpBranch %279
-        %279 = OpLabel
-               OpLoopMerge %280 %281 None
-               OpBranch %282
-        %282 = OpLabel
-        %283 = OpLoad %int %i_19
-        %284 = OpSLessThan %bool %283 %int_1
-               OpSelectionMerge %285 None
-               OpBranchConditional %284 %286 %287
-        %286 = OpLabel
-               OpBranch %285
-        %287 = OpLabel
-               OpBranch %280
-        %285 = OpLabel
-               OpStore %i_20 %int_0
-               OpBranch %288
-        %288 = OpLabel
-               OpLoopMerge %289 %290 None
-               OpBranch %291
-        %291 = OpLabel
-        %292 = OpLoad %int %i_20
-        %293 = OpSLessThan %bool %292 %int_1
-               OpSelectionMerge %294 None
-               OpBranchConditional %293 %295 %296
-        %295 = OpLabel
-               OpBranch %294
-        %296 = OpLabel
-               OpBranch %289
-        %294 = OpLabel
-               OpStore %i_21 %int_0
-               OpBranch %297
-        %297 = OpLabel
-               OpLoopMerge %298 %299 None
-               OpBranch %300
-        %300 = OpLabel
-        %301 = OpLoad %int %i_21
-        %302 = OpSLessThan %bool %301 %int_1
-               OpSelectionMerge %303 None
-               OpBranchConditional %302 %304 %305
-        %304 = OpLabel
-               OpBranch %303
-        %305 = OpLabel
-               OpBranch %298
-        %303 = OpLabel
-               OpStore %i_22 %int_0
-               OpBranch %306
-        %306 = OpLabel
-               OpLoopMerge %307 %308 None
-               OpBranch %309
-        %309 = OpLabel
-        %310 = OpLoad %int %i_22
-        %311 = OpSLessThan %bool %310 %int_1
-               OpSelectionMerge %312 None
-               OpBranchConditional %311 %313 %314
-        %313 = OpLabel
-               OpBranch %312
-        %314 = OpLabel
-               OpBranch %307
-        %312 = OpLabel
-               OpStore %i_23 %int_0
-               OpBranch %315
-        %315 = OpLabel
-               OpLoopMerge %316 %317 None
-               OpBranch %318
-        %318 = OpLabel
-        %319 = OpLoad %int %i_23
-        %320 = OpSLessThan %bool %319 %int_1
-               OpSelectionMerge %321 None
-               OpBranchConditional %320 %322 %323
-        %322 = OpLabel
-               OpBranch %321
-        %323 = OpLabel
-               OpBranch %316
-        %321 = OpLabel
-               OpStore %i_24 %int_0
-               OpBranch %324
-        %324 = OpLabel
-               OpLoopMerge %325 %326 None
-               OpBranch %327
-        %327 = OpLabel
-        %328 = OpLoad %int %i_24
-        %329 = OpSLessThan %bool %328 %int_1
-               OpSelectionMerge %330 None
-               OpBranchConditional %329 %331 %332
-        %331 = OpLabel
-               OpBranch %330
-        %332 = OpLabel
-               OpBranch %325
-        %330 = OpLabel
-               OpStore %i_25 %int_0
-               OpBranch %333
-        %333 = OpLabel
-               OpLoopMerge %334 %335 None
-               OpBranch %336
-        %336 = OpLabel
-        %337 = OpLoad %int %i_25
-        %338 = OpSLessThan %bool %337 %int_1
-               OpSelectionMerge %339 None
-               OpBranchConditional %338 %340 %341
-        %340 = OpLabel
-               OpBranch %339
-        %341 = OpLabel
-               OpBranch %334
-        %339 = OpLabel
-               OpStore %i_26 %int_0
-               OpBranch %342
-        %342 = OpLabel
-               OpLoopMerge %343 %344 None
-               OpBranch %345
-        %345 = OpLabel
-        %346 = OpLoad %int %i_26
-        %347 = OpSLessThan %bool %346 %int_1
-               OpSelectionMerge %348 None
-               OpBranchConditional %347 %349 %350
-        %349 = OpLabel
-               OpBranch %348
-        %350 = OpLabel
-               OpBranch %343
-        %348 = OpLabel
-               OpStore %i_27 %int_0
-               OpBranch %351
-        %351 = OpLabel
-               OpLoopMerge %352 %353 None
-               OpBranch %354
-        %354 = OpLabel
-        %355 = OpLoad %int %i_27
-        %356 = OpSLessThan %bool %355 %int_1
-               OpSelectionMerge %357 None
-               OpBranchConditional %356 %358 %359
-        %358 = OpLabel
-               OpBranch %357
-        %359 = OpLabel
-               OpBranch %352
-        %357 = OpLabel
-               OpStore %i_28 %int_0
-               OpBranch %360
-        %360 = OpLabel
-               OpLoopMerge %361 %362 None
-               OpBranch %363
-        %363 = OpLabel
-        %364 = OpLoad %int %i_28
-        %365 = OpSLessThan %bool %364 %int_1
-               OpSelectionMerge %366 None
-               OpBranchConditional %365 %367 %368
-        %367 = OpLabel
-               OpBranch %366
-        %368 = OpLabel
-               OpBranch %361
-        %366 = OpLabel
-               OpStore %i_29 %int_0
-               OpBranch %369
-        %369 = OpLabel
-               OpLoopMerge %370 %371 None
-               OpBranch %372
-        %372 = OpLabel
-        %373 = OpLoad %int %i_29
-        %374 = OpSLessThan %bool %373 %int_1
-               OpSelectionMerge %375 None
-               OpBranchConditional %374 %376 %377
-        %376 = OpLabel
-               OpBranch %375
-        %377 = OpLabel
-               OpBranch %370
-        %375 = OpLabel
-               OpStore %i_30 %int_0
-               OpBranch %378
-        %378 = OpLabel
-               OpLoopMerge %379 %380 None
-               OpBranch %381
-        %381 = OpLabel
-        %382 = OpLoad %int %i_30
-        %383 = OpSLessThan %bool %382 %int_1
-               OpSelectionMerge %384 None
-               OpBranchConditional %383 %385 %386
-        %385 = OpLabel
-               OpBranch %384
-        %386 = OpLabel
-               OpBranch %379
-        %384 = OpLabel
-               OpStore %i_31 %int_0
-               OpBranch %387
-        %387 = OpLabel
-               OpLoopMerge %388 %389 None
-               OpBranch %390
-        %390 = OpLabel
-        %391 = OpLoad %int %i_31
-        %392 = OpSLessThan %bool %391 %int_1
-               OpSelectionMerge %393 None
-               OpBranchConditional %392 %394 %395
-        %394 = OpLabel
-               OpBranch %393
-        %395 = OpLabel
-               OpBranch %388
-        %393 = OpLabel
-               OpStore %i_32 %int_0
-               OpBranch %396
-        %396 = OpLabel
-               OpLoopMerge %397 %398 None
-               OpBranch %399
-        %399 = OpLabel
-        %400 = OpLoad %int %i_32
-        %401 = OpSLessThan %bool %400 %int_1
-               OpSelectionMerge %402 None
-               OpBranchConditional %401 %403 %404
-        %403 = OpLabel
-               OpBranch %402
-        %404 = OpLabel
-               OpBranch %397
-        %402 = OpLabel
-               OpStore %i_33 %int_0
-               OpBranch %405
-        %405 = OpLabel
-               OpLoopMerge %406 %407 None
-               OpBranch %408
-        %408 = OpLabel
-        %409 = OpLoad %int %i_33
-        %410 = OpSLessThan %bool %409 %int_1
-               OpSelectionMerge %411 None
-               OpBranchConditional %410 %412 %413
-        %412 = OpLabel
-               OpBranch %411
-        %413 = OpLabel
-               OpBranch %406
-        %411 = OpLabel
-               OpStore %i_34 %int_0
-               OpBranch %414
-        %414 = OpLabel
-               OpLoopMerge %415 %416 None
-               OpBranch %417
-        %417 = OpLabel
-        %418 = OpLoad %int %i_34
-        %419 = OpSLessThan %bool %418 %int_1
-               OpSelectionMerge %420 None
-               OpBranchConditional %419 %421 %422
-        %421 = OpLabel
-               OpBranch %420
-        %422 = OpLabel
-               OpBranch %415
-        %420 = OpLabel
-               OpStore %i_35 %int_0
-               OpBranch %423
-        %423 = OpLabel
-               OpLoopMerge %424 %425 None
-               OpBranch %426
-        %426 = OpLabel
-        %427 = OpLoad %int %i_35
-        %428 = OpSLessThan %bool %427 %int_1
-               OpSelectionMerge %429 None
-               OpBranchConditional %428 %430 %431
-        %430 = OpLabel
-               OpBranch %429
-        %431 = OpLabel
-               OpBranch %424
-        %429 = OpLabel
-               OpStore %i_36 %int_0
-               OpBranch %432
-        %432 = OpLabel
-               OpLoopMerge %433 %434 None
-               OpBranch %435
-        %435 = OpLabel
-        %436 = OpLoad %int %i_36
-        %437 = OpSLessThan %bool %436 %int_1
-               OpSelectionMerge %438 None
-               OpBranchConditional %437 %439 %440
-        %439 = OpLabel
-               OpBranch %438
-        %440 = OpLabel
-               OpBranch %433
-        %438 = OpLabel
-               OpStore %i_37 %int_0
-               OpBranch %441
-        %441 = OpLabel
-               OpLoopMerge %442 %443 None
-               OpBranch %444
-        %444 = OpLabel
-        %445 = OpLoad %int %i_37
-        %446 = OpSLessThan %bool %445 %int_1
-               OpSelectionMerge %447 None
-               OpBranchConditional %446 %448 %449
-        %448 = OpLabel
-               OpBranch %447
-        %449 = OpLabel
-               OpBranch %442
-        %447 = OpLabel
-               OpBranch %450
-        %450 = OpLabel
-               OpLoopMerge %451 %452 None
-               OpBranch %453
-        %453 = OpLabel
-        %454 = OpLoad %int %x_GLF_global_loop_count
-        %455 = OpIAdd %int %454 %int_1
-               OpStore %x_GLF_global_loop_count %455
-               OpBranch %452
-        %452 = OpLabel
-        %456 = OpLoad %int %x_GLF_global_loop_count
-        %458 = OpSLessThan %bool %456 %int_98
-               OpBranchConditional %458 %450 %451
-        %451 = OpLabel
-        %459 = OpLoad %int %i_37
-        %460 = OpLoad %int %i_37
-        %461 = OpAccessChain %_ptr_Function_float %m23 %459 %460
-               OpStore %461 %float_1
-        %463 = OpLoad %int %i_37
-        %464 = OpLoad %int %i_37
-        %465 = OpAccessChain %_ptr_Function_float %m24 %463 %464
-               OpStore %465 %float_1
-        %466 = OpLoad %int %i_37
-        %467 = OpLoad %int %i_37
-        %468 = OpAccessChain %_ptr_Function_float %m32 %466 %467
-               OpStore %468 %float_1
-        %469 = OpLoad %int %i_37
-        %470 = OpLoad %int %i_37
-        %471 = OpAccessChain %_ptr_Function_float %m33 %469 %470
-               OpStore %471 %float_1
-        %472 = OpLoad %int %i_37
-        %473 = OpLoad %int %i_37
-        %474 = OpAccessChain %_ptr_Function_float %m34 %472 %473
-               OpStore %474 %float_1
-        %475 = OpLoad %int %i_37
-        %476 = OpLoad %int %i_37
-        %477 = OpAccessChain %_ptr_Function_float %m42 %475 %476
-               OpStore %477 %float_1
-        %478 = OpLoad %int %i_37
-        %479 = OpLoad %int %i_37
-        %480 = OpAccessChain %_ptr_Function_float %m43 %478 %479
-               OpStore %480 %float_1
-        %481 = OpLoad %int %i_37
-        %482 = OpLoad %int %i_37
-        %483 = OpAccessChain %_ptr_Function_float %m44 %481 %482
-               OpStore %483 %float_1
-               OpBranch %443
-        %443 = OpLabel
-        %484 = OpLoad %int %i_37
-        %485 = OpIAdd %int %484 %int_1
-               OpStore %i_37 %485
-               OpBranch %441
-        %442 = OpLabel
-               OpBranch %434
-        %434 = OpLabel
-        %486 = OpLoad %int %i_36
-        %487 = OpIAdd %int %486 %int_1
-               OpStore %i_36 %487
-               OpBranch %432
-        %433 = OpLabel
-               OpBranch %425
-        %425 = OpLabel
-        %488 = OpLoad %int %i_35
-        %489 = OpIAdd %int %488 %int_1
-               OpStore %i_35 %489
-               OpBranch %423
-        %424 = OpLabel
-               OpBranch %416
-        %416 = OpLabel
-        %490 = OpLoad %int %i_34
-        %491 = OpIAdd %int %490 %int_1
-               OpStore %i_34 %491
-               OpBranch %414
-        %415 = OpLabel
-               OpBranch %407
-        %407 = OpLabel
-        %492 = OpLoad %int %i_33
-        %493 = OpIAdd %int %492 %int_1
-               OpStore %i_33 %493
-               OpBranch %405
-        %406 = OpLabel
-               OpBranch %398
-        %398 = OpLabel
-        %494 = OpLoad %int %i_32
-        %495 = OpIAdd %int %494 %int_1
-               OpStore %i_32 %495
-               OpBranch %396
-        %397 = OpLabel
-               OpBranch %389
-        %389 = OpLabel
-        %496 = OpLoad %int %i_31
-        %497 = OpIAdd %int %496 %int_1
-               OpStore %i_31 %497
-               OpBranch %387
-        %388 = OpLabel
-               OpBranch %380
-        %380 = OpLabel
-        %498 = OpLoad %int %i_30
-        %499 = OpIAdd %int %498 %int_1
-               OpStore %i_30 %499
-               OpBranch %378
-        %379 = OpLabel
-               OpBranch %371
-        %371 = OpLabel
-        %500 = OpLoad %int %i_29
-        %501 = OpIAdd %int %500 %int_1
-               OpStore %i_29 %501
-               OpBranch %369
-        %370 = OpLabel
-               OpBranch %362
-        %362 = OpLabel
-        %502 = OpLoad %int %i_28
-        %503 = OpIAdd %int %502 %int_1
-               OpStore %i_28 %503
-               OpBranch %360
-        %361 = OpLabel
-               OpBranch %353
-        %353 = OpLabel
-        %504 = OpLoad %int %i_27
-        %505 = OpIAdd %int %504 %int_1
-               OpStore %i_27 %505
-               OpBranch %351
-        %352 = OpLabel
-               OpBranch %344
-        %344 = OpLabel
-        %506 = OpLoad %int %i_26
-        %507 = OpIAdd %int %506 %int_1
-               OpStore %i_26 %507
-               OpBranch %342
-        %343 = OpLabel
-               OpBranch %335
-        %335 = OpLabel
-        %508 = OpLoad %int %i_25
-        %509 = OpIAdd %int %508 %int_1
-               OpStore %i_25 %509
-               OpBranch %333
-        %334 = OpLabel
-               OpBranch %326
-        %326 = OpLabel
-        %510 = OpLoad %int %i_24
-        %511 = OpIAdd %int %510 %int_1
-               OpStore %i_24 %511
-               OpBranch %324
-        %325 = OpLabel
-               OpBranch %317
-        %317 = OpLabel
-        %512 = OpLoad %int %i_23
-        %513 = OpIAdd %int %512 %int_1
-               OpStore %i_23 %513
-               OpBranch %315
-        %316 = OpLabel
-               OpBranch %308
-        %308 = OpLabel
-        %514 = OpLoad %int %i_22
-        %515 = OpIAdd %int %514 %int_1
-               OpStore %i_22 %515
-               OpBranch %306
-        %307 = OpLabel
-               OpBranch %299
-        %299 = OpLabel
-        %516 = OpLoad %int %i_21
-        %517 = OpIAdd %int %516 %int_1
-               OpStore %i_21 %517
-               OpBranch %297
-        %298 = OpLabel
-               OpBranch %290
-        %290 = OpLabel
-        %518 = OpLoad %int %i_20
-        %519 = OpIAdd %int %518 %int_1
-               OpStore %i_20 %519
-               OpBranch %288
-        %289 = OpLabel
-               OpBranch %281
-        %281 = OpLabel
-        %520 = OpLoad %int %i_19
-        %521 = OpIAdd %int %520 %int_1
-               OpStore %i_19 %521
-               OpBranch %279
-        %280 = OpLabel
-               OpBranch %272
-        %272 = OpLabel
-        %522 = OpLoad %int %i_18
-        %523 = OpIAdd %int %522 %int_1
-               OpStore %i_18 %523
-               OpBranch %270
-        %271 = OpLabel
-               OpBranch %263
-        %263 = OpLabel
-        %524 = OpLoad %int %i_17
-        %525 = OpIAdd %int %524 %int_1
-               OpStore %i_17 %525
-               OpBranch %261
-        %262 = OpLabel
-               OpBranch %254
-        %254 = OpLabel
-        %526 = OpLoad %int %i_16
-        %527 = OpIAdd %int %526 %int_1
-               OpStore %i_16 %527
-               OpBranch %252
-        %253 = OpLabel
-               OpBranch %245
-        %245 = OpLabel
-        %528 = OpLoad %int %i_15
-        %529 = OpIAdd %int %528 %int_1
-               OpStore %i_15 %529
-               OpBranch %243
-        %244 = OpLabel
-               OpBranch %236
-        %236 = OpLabel
-        %530 = OpLoad %int %i_14
-        %531 = OpIAdd %int %530 %int_1
-               OpStore %i_14 %531
-               OpBranch %234
-        %235 = OpLabel
-               OpBranch %227
-        %227 = OpLabel
-        %532 = OpLoad %int %i_13
-        %533 = OpIAdd %int %532 %int_1
-               OpStore %i_13 %533
-               OpBranch %225
-        %226 = OpLabel
-               OpBranch %218
-        %218 = OpLabel
-        %534 = OpLoad %int %i_12
-        %535 = OpIAdd %int %534 %int_1
-               OpStore %i_12 %535
-               OpBranch %216
-        %217 = OpLabel
-               OpBranch %209
-        %209 = OpLabel
-        %536 = OpLoad %int %i_11
-        %537 = OpIAdd %int %536 %int_1
-               OpStore %i_11 %537
-               OpBranch %207
-        %208 = OpLabel
-               OpBranch %200
-        %200 = OpLabel
-        %538 = OpLoad %int %i_10
-        %539 = OpIAdd %int %538 %int_1
-               OpStore %i_10 %539
-               OpBranch %198
-        %199 = OpLabel
-               OpBranch %191
-        %191 = OpLabel
-        %540 = OpLoad %int %i_9
-        %541 = OpIAdd %int %540 %int_1
-               OpStore %i_9 %541
-               OpBranch %189
-        %190 = OpLabel
-               OpBranch %182
-        %182 = OpLabel
-        %542 = OpLoad %int %i_8
-        %543 = OpIAdd %int %542 %int_1
-               OpStore %i_8 %543
-               OpBranch %180
-        %181 = OpLabel
-               OpBranch %173
-        %173 = OpLabel
-        %544 = OpLoad %int %i_7
-        %545 = OpIAdd %int %544 %int_1
-               OpStore %i_7 %545
-               OpBranch %171
-        %172 = OpLabel
-               OpBranch %164
-        %164 = OpLabel
-        %546 = OpLoad %int %i_6
-        %547 = OpIAdd %int %546 %int_1
-               OpStore %i_6 %547
-               OpBranch %162
-        %163 = OpLabel
-               OpBranch %155
-        %155 = OpLabel
-        %548 = OpLoad %int %i_5
-        %549 = OpIAdd %int %548 %int_1
-               OpStore %i_5 %549
-               OpBranch %153
-        %154 = OpLabel
-               OpBranch %146
-        %146 = OpLabel
-        %550 = OpLoad %int %i_4
-        %551 = OpIAdd %int %550 %int_1
-               OpStore %i_4 %551
-               OpBranch %144
-        %145 = OpLabel
-               OpBranch %137
-        %137 = OpLabel
-        %552 = OpLoad %int %i_3
-        %553 = OpIAdd %int %552 %int_1
-               OpStore %i_3 %553
-               OpBranch %135
-        %136 = OpLabel
-               OpBranch %128
-        %128 = OpLabel
-        %554 = OpLoad %int %i_2
-        %555 = OpIAdd %int %554 %int_1
-               OpStore %i_2 %555
-               OpBranch %126
-        %127 = OpLabel
-               OpBranch %119
-        %119 = OpLabel
-        %556 = OpLoad %int %i_1
-        %557 = OpIAdd %int %556 %int_1
-               OpStore %i_1 %557
-               OpBranch %117
-        %118 = OpLabel
-               OpBranch %108
-        %108 = OpLabel
-        %558 = OpLoad %int %i
-        %559 = OpIAdd %int %558 %int_1
-               OpStore %i %559
-               OpBranch %106
-        %107 = OpLabel
-               OpStore %sum %float_0
-               OpStore %r %int_0
-               OpBranch %560
-        %560 = OpLabel
-               OpLoopMerge %561 %562 None
-               OpBranch %563
-        %563 = OpLabel
-        %564 = OpLoad %int %x_GLF_global_loop_count
-        %566 = OpSLessThan %bool %564 %int_100
-               OpSelectionMerge %567 None
-               OpBranchConditional %566 %568 %569
-        %568 = OpLabel
-               OpBranch %567
-        %569 = OpLabel
-               OpBranch %561
-        %567 = OpLabel
-        %570 = OpLoad %int %x_GLF_global_loop_count
-        %571 = OpIAdd %int %570 %int_1
-               OpStore %x_GLF_global_loop_count %571
-        %572 = OpLoad %int %r
-        %573 = OpAccessChain %_ptr_Function_float %m23 %int_0 %572
-        %574 = OpLoad %float %573
-        %575 = OpLoad %float %sum
-        %576 = OpFAdd %float %575 %574
-               OpStore %sum %576
-        %577 = OpLoad %int %r
-        %578 = OpAccessChain %_ptr_Function_float %m24 %int_0 %577
-        %579 = OpLoad %float %578
-        %580 = OpLoad %float %sum
-        %581 = OpFAdd %float %580 %579
-               OpStore %sum %581
-        %582 = OpLoad %int %r
-        %583 = OpAccessChain %_ptr_Function_float %m32 %int_0 %582
-        %584 = OpLoad %float %583
-        %585 = OpLoad %float %sum
-        %586 = OpFAdd %float %585 %584
-               OpStore %sum %586
-        %587 = OpLoad %int %r
-        %588 = OpAccessChain %_ptr_Function_float %m33 %int_0 %587
-        %589 = OpLoad %float %588
-        %590 = OpLoad %float %sum
-        %591 = OpFAdd %float %590 %589
-               OpStore %sum %591
-        %592 = OpLoad %int %r
-        %593 = OpAccessChain %_ptr_Function_float %m34 %int_0 %592
-        %594 = OpLoad %float %593
-        %595 = OpLoad %float %sum
-        %596 = OpFAdd %float %595 %594
-               OpStore %sum %596
-        %597 = OpLoad %int %r
-        %598 = OpAccessChain %_ptr_Function_float %m42 %int_0 %597
-        %599 = OpLoad %float %598
-        %600 = OpLoad %float %sum
-        %601 = OpFAdd %float %600 %599
-               OpStore %sum %601
-        %602 = OpLoad %int %r
-        %603 = OpAccessChain %_ptr_Function_float %m43 %int_0 %602
-        %604 = OpLoad %float %603
-        %605 = OpLoad %float %sum
-        %606 = OpFAdd %float %605 %604
-               OpStore %sum %606
-        %607 = OpLoad %int %r
-        %608 = OpAccessChain %_ptr_Function_float %m44 %int_0 %607
-        %609 = OpLoad %float %608
-        %610 = OpLoad %float %sum
-        %611 = OpFAdd %float %610 %609
-               OpStore %sum %611
-               OpBranch %562
-        %562 = OpLabel
-        %612 = OpLoad %int %r
-        %613 = OpIAdd %int %612 %int_1
-               OpStore %r %613
-               OpBranch %560
-        %561 = OpLabel
-        %614 = OpLoad %float %sum
-        %616 = OpFOrdEqual %bool %614 %float_8
-               OpSelectionMerge %617 None
-               OpBranchConditional %616 %618 %619
-        %618 = OpLabel
-               OpStore %x_GLF_color %620
-               OpBranch %617
-        %619 = OpLabel
-               OpStore %x_GLF_color %97
-               OpBranch %617
-        %617 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %621
-        %624 = OpLabel
-        %625 = OpFunctionCall %void %main_1
-        %626 = OpLoad %v4float %x_GLF_color
-        %627 = OpCompositeConstruct %main_out %626
-               OpReturnValue %627
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %629 = OpLabel
-        %630 = OpFunctionCall %main_out %main_inner
-        %631 = OpCompositeExtract %v4float %630 0
-               OpStore %x_GLF_color_1_1 %631
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6dbe667..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,659 +0,0 @@
-var<private> x_GLF_global_loop_count : i32;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m23 : mat2x3<f32>;
-  var m24 : mat2x4<f32>;
-  var m32 : mat3x2<f32>;
-  var m33 : mat3x3<f32>;
-  var m34 : mat3x4<f32>;
-  var m42 : mat4x2<f32>;
-  var m43 : mat4x3<f32>;
-  var m44 : mat4x4<f32>;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var i_3 : i32;
-  var i_4 : i32;
-  var i_5 : i32;
-  var i_6 : i32;
-  var i_7 : i32;
-  var i_8 : i32;
-  var i_9 : i32;
-  var i_10 : i32;
-  var i_11 : i32;
-  var i_12 : i32;
-  var i_13 : i32;
-  var i_14 : i32;
-  var i_15 : i32;
-  var i_16 : i32;
-  var i_17 : i32;
-  var i_18 : i32;
-  var i_19 : i32;
-  var i_20 : i32;
-  var i_21 : i32;
-  var i_22 : i32;
-  var i_23 : i32;
-  var i_24 : i32;
-  var i_25 : i32;
-  var i_26 : i32;
-  var i_27 : i32;
-  var i_28 : i32;
-  var i_29 : i32;
-  var i_30 : i32;
-  var i_31 : i32;
-  var i_32 : i32;
-  var i_33 : i32;
-  var i_34 : i32;
-  var i_35 : i32;
-  var i_36 : i32;
-  var i_37 : i32;
-  var sum : f32;
-  var r : i32;
-  x_GLF_global_loop_count = 0;
-  m23 = mat2x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0));
-  m24 = mat2x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  m32 = mat3x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  m33 = mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0));
-  m34 = mat3x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  m42 = mat4x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  m43 = mat4x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0));
-  m44 = mat4x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  i = 0;
-  loop {
-    let x_105 : i32 = i;
-    if ((x_105 < 1)) {
-    } else {
-      break;
-    }
-    i_1 = 0;
-    loop {
-      let x_112 : i32 = i_1;
-      if ((x_112 < 1)) {
-      } else {
-        break;
-      }
-      i_2 = 0;
-      loop {
-        let x_119 : i32 = i_2;
-        if ((x_119 < 1)) {
-        } else {
-          break;
-        }
-        i_3 = 0;
-        loop {
-          let x_126 : i32 = i_3;
-          if ((x_126 < 1)) {
-          } else {
-            break;
-          }
-          i_4 = 0;
-          loop {
-            let x_133 : i32 = i_4;
-            if ((x_133 < 1)) {
-            } else {
-              break;
-            }
-            i_5 = 0;
-            loop {
-              let x_140 : i32 = i_5;
-              if ((x_140 < 1)) {
-              } else {
-                break;
-              }
-              i_6 = 0;
-              loop {
-                let x_147 : i32 = i_6;
-                if ((x_147 < 1)) {
-                } else {
-                  break;
-                }
-                i_7 = 0;
-                loop {
-                  let x_154 : i32 = i_7;
-                  if ((x_154 < 1)) {
-                  } else {
-                    break;
-                  }
-                  i_8 = 0;
-                  loop {
-                    let x_161 : i32 = i_8;
-                    if ((x_161 < 1)) {
-                    } else {
-                      break;
-                    }
-                    i_9 = 0;
-                    loop {
-                      let x_168 : i32 = i_9;
-                      if ((x_168 < 1)) {
-                      } else {
-                        break;
-                      }
-                      i_10 = 0;
-                      loop {
-                        let x_175 : i32 = i_10;
-                        if ((x_175 < 1)) {
-                        } else {
-                          break;
-                        }
-                        i_11 = 0;
-                        loop {
-                          let x_182 : i32 = i_11;
-                          if ((x_182 < 1)) {
-                          } else {
-                            break;
-                          }
-                          i_12 = 0;
-                          loop {
-                            let x_189 : i32 = i_12;
-                            if ((x_189 < 1)) {
-                            } else {
-                              break;
-                            }
-                            i_13 = 0;
-                            loop {
-                              let x_196 : i32 = i_13;
-                              if ((x_196 < 1)) {
-                              } else {
-                                break;
-                              }
-                              i_14 = 0;
-                              loop {
-                                let x_203 : i32 = i_14;
-                                if ((x_203 < 1)) {
-                                } else {
-                                  break;
-                                }
-                                i_15 = 0;
-                                loop {
-                                  let x_210 : i32 = i_15;
-                                  if ((x_210 < 1)) {
-                                  } else {
-                                    break;
-                                  }
-                                  i_16 = 0;
-                                  loop {
-                                    let x_217 : i32 = i_16;
-                                    if ((x_217 < 1)) {
-                                    } else {
-                                      break;
-                                    }
-                                    i_17 = 0;
-                                    loop {
-                                      let x_224 : i32 = i_17;
-                                      if ((x_224 < 1)) {
-                                      } else {
-                                        break;
-                                      }
-                                      i_18 = 0;
-                                      loop {
-                                        let x_231 : i32 = i_18;
-                                        if ((x_231 < 1)) {
-                                        } else {
-                                          break;
-                                        }
-                                        i_19 = 0;
-                                        loop {
-                                          let x_238 : i32 = i_19;
-                                          if ((x_238 < 1)) {
-                                          } else {
-                                            break;
-                                          }
-                                          i_20 = 0;
-                                          loop {
-                                            let x_245 : i32 = i_20;
-                                            if ((x_245 < 1)) {
-                                            } else {
-                                              break;
-                                            }
-                                            i_21 = 0;
-                                            loop {
-                                              let x_252 : i32 = i_21;
-                                              if ((x_252 < 1)) {
-                                              } else {
-                                                break;
-                                              }
-                                              i_22 = 0;
-                                              loop {
-                                                let x_259 : i32 = i_22;
-                                                if ((x_259 < 1)) {
-                                                } else {
-                                                  break;
-                                                }
-                                                i_23 = 0;
-                                                loop {
-                                                  let x_266 : i32 = i_23;
-                                                  if ((x_266 < 1)) {
-                                                  } else {
-                                                    break;
-                                                  }
-                                                  i_24 = 0;
-                                                  loop {
-                                                    let x_273 : i32 = i_24;
-                                                    if ((x_273 < 1)) {
-                                                    } else {
-                                                      break;
-                                                    }
-                                                    i_25 = 0;
-                                                    loop {
-                                                      let x_280 : i32 = i_25;
-                                                      if ((x_280 < 1)) {
-                                                      } else {
-                                                        break;
-                                                      }
-                                                      i_26 = 0;
-                                                      loop {
-                                                        let x_287 : i32 = i_26;
-                                                        if ((x_287 < 1)) {
-                                                        } else {
-                                                          break;
-                                                        }
-                                                        i_27 = 0;
-                                                        loop {
-                                                          let x_294 : i32 = i_27;
-                                                          if ((x_294 < 1)) {
-                                                          } else {
-                                                            break;
-                                                          }
-                                                          i_28 = 0;
-                                                          loop {
-                                                            let x_301 : i32 = i_28;
-                                                            if ((x_301 < 1)) {
-                                                            } else {
-                                                              break;
-                                                            }
-                                                            i_29 = 0;
-                                                            loop {
-                                                              let x_308 : i32 = i_29;
-                                                              if ((x_308 < 1)) {
-                                                              } else {
-                                                                break;
-                                                              }
-                                                              i_30 = 0;
-                                                              loop {
-                                                                let x_315 : i32 = i_30;
-                                                                if ((x_315 < 1)) {
-                                                                } else {
-                                                                  break;
-                                                                }
-                                                                i_31 = 0;
-                                                                loop {
-                                                                  let x_322 : i32 = i_31;
-                                                                  if ((x_322 < 1)) {
-                                                                  } else {
-                                                                    break;
-                                                                  }
-                                                                  i_32 = 0;
-                                                                  loop {
-                                                                    let x_329 : i32 = i_32;
-                                                                    if ((x_329 < 1)) {
-                                                                    } else {
-                                                                      break;
-                                                                    }
-                                                                    i_33 = 0;
-                                                                    loop {
-                                                                      let x_336 : i32 = i_33;
-                                                                      if ((x_336 < 1)) {
-                                                                      } else {
-                                                                        break;
-                                                                      }
-                                                                      i_34 = 0;
-                                                                      loop {
-                                                                        let x_343 : i32 = i_34;
-                                                                        if ((x_343 < 1)) {
-                                                                        } else {
-                                                                          break;
-                                                                        }
-                                                                        i_35 = 0;
-                                                                        loop {
-                                                                          let x_350 : i32 = i_35;
-                                                                          if ((x_350 < 1)) {
-                                                                          } else {
-                                                                            break;
-                                                                          }
-                                                                          i_36 = 0;
-                                                                          loop {
-                                                                            let x_357 : i32 = i_36;
-                                                                            if ((x_357 < 1)) {
-                                                                            } else {
-                                                                              break;
-                                                                            }
-                                                                            i_37 = 0;
-                                                                            loop {
-                                                                              let x_364 : i32 = i_37;
-                                                                              if ((x_364 < 1)) {
-                                                                              } else {
-                                                                                break;
-                                                                              }
-                                                                              loop {
-                                                                                let x_371 : i32 = x_GLF_global_loop_count;
-                                                                                x_GLF_global_loop_count = (x_371 + 1);
-
-                                                                                continuing {
-                                                                                  let x_373 : i32 = x_GLF_global_loop_count;
-                                                                                  if ((x_373 < 98)) {
-                                                                                  } else {
-                                                                                    break;
-                                                                                  }
-                                                                                }
-                                                                              }
-                                                                              let x_375 : i32 = i_37;
-                                                                              let x_376 : i32 = i_37;
-                                                                              m23[x_375][x_376] = 1.0;
-                                                                              let x_378 : i32 = i_37;
-                                                                              let x_379 : i32 = i_37;
-                                                                              m24[x_378][x_379] = 1.0;
-                                                                              let x_381 : i32 = i_37;
-                                                                              let x_382 : i32 = i_37;
-                                                                              m32[x_381][x_382] = 1.0;
-                                                                              let x_384 : i32 = i_37;
-                                                                              let x_385 : i32 = i_37;
-                                                                              m33[x_384][x_385] = 1.0;
-                                                                              let x_387 : i32 = i_37;
-                                                                              let x_388 : i32 = i_37;
-                                                                              m34[x_387][x_388] = 1.0;
-                                                                              let x_390 : i32 = i_37;
-                                                                              let x_391 : i32 = i_37;
-                                                                              m42[x_390][x_391] = 1.0;
-                                                                              let x_393 : i32 = i_37;
-                                                                              let x_394 : i32 = i_37;
-                                                                              m43[x_393][x_394] = 1.0;
-                                                                              let x_396 : i32 = i_37;
-                                                                              let x_397 : i32 = i_37;
-                                                                              m44[x_396][x_397] = 1.0;
-
-                                                                              continuing {
-                                                                                let x_399 : i32 = i_37;
-                                                                                i_37 = (x_399 + 1);
-                                                                              }
-                                                                            }
-
-                                                                            continuing {
-                                                                              let x_401 : i32 = i_36;
-                                                                              i_36 = (x_401 + 1);
-                                                                            }
-                                                                          }
-
-                                                                          continuing {
-                                                                            let x_403 : i32 = i_35;
-                                                                            i_35 = (x_403 + 1);
-                                                                          }
-                                                                        }
-
-                                                                        continuing {
-                                                                          let x_405 : i32 = i_34;
-                                                                          i_34 = (x_405 + 1);
-                                                                        }
-                                                                      }
-
-                                                                      continuing {
-                                                                        let x_407 : i32 = i_33;
-                                                                        i_33 = (x_407 + 1);
-                                                                      }
-                                                                    }
-
-                                                                    continuing {
-                                                                      let x_409 : i32 = i_32;
-                                                                      i_32 = (x_409 + 1);
-                                                                    }
-                                                                  }
-
-                                                                  continuing {
-                                                                    let x_411 : i32 = i_31;
-                                                                    i_31 = (x_411 + 1);
-                                                                  }
-                                                                }
-
-                                                                continuing {
-                                                                  let x_413 : i32 = i_30;
-                                                                  i_30 = (x_413 + 1);
-                                                                }
-                                                              }
-
-                                                              continuing {
-                                                                let x_415 : i32 = i_29;
-                                                                i_29 = (x_415 + 1);
-                                                              }
-                                                            }
-
-                                                            continuing {
-                                                              let x_417 : i32 = i_28;
-                                                              i_28 = (x_417 + 1);
-                                                            }
-                                                          }
-
-                                                          continuing {
-                                                            let x_419 : i32 = i_27;
-                                                            i_27 = (x_419 + 1);
-                                                          }
-                                                        }
-
-                                                        continuing {
-                                                          let x_421 : i32 = i_26;
-                                                          i_26 = (x_421 + 1);
-                                                        }
-                                                      }
-
-                                                      continuing {
-                                                        let x_423 : i32 = i_25;
-                                                        i_25 = (x_423 + 1);
-                                                      }
-                                                    }
-
-                                                    continuing {
-                                                      let x_425 : i32 = i_24;
-                                                      i_24 = (x_425 + 1);
-                                                    }
-                                                  }
-
-                                                  continuing {
-                                                    let x_427 : i32 = i_23;
-                                                    i_23 = (x_427 + 1);
-                                                  }
-                                                }
-
-                                                continuing {
-                                                  let x_429 : i32 = i_22;
-                                                  i_22 = (x_429 + 1);
-                                                }
-                                              }
-
-                                              continuing {
-                                                let x_431 : i32 = i_21;
-                                                i_21 = (x_431 + 1);
-                                              }
-                                            }
-
-                                            continuing {
-                                              let x_433 : i32 = i_20;
-                                              i_20 = (x_433 + 1);
-                                            }
-                                          }
-
-                                          continuing {
-                                            let x_435 : i32 = i_19;
-                                            i_19 = (x_435 + 1);
-                                          }
-                                        }
-
-                                        continuing {
-                                          let x_437 : i32 = i_18;
-                                          i_18 = (x_437 + 1);
-                                        }
-                                      }
-
-                                      continuing {
-                                        let x_439 : i32 = i_17;
-                                        i_17 = (x_439 + 1);
-                                      }
-                                    }
-
-                                    continuing {
-                                      let x_441 : i32 = i_16;
-                                      i_16 = (x_441 + 1);
-                                    }
-                                  }
-
-                                  continuing {
-                                    let x_443 : i32 = i_15;
-                                    i_15 = (x_443 + 1);
-                                  }
-                                }
-
-                                continuing {
-                                  let x_445 : i32 = i_14;
-                                  i_14 = (x_445 + 1);
-                                }
-                              }
-
-                              continuing {
-                                let x_447 : i32 = i_13;
-                                i_13 = (x_447 + 1);
-                              }
-                            }
-
-                            continuing {
-                              let x_449 : i32 = i_12;
-                              i_12 = (x_449 + 1);
-                            }
-                          }
-
-                          continuing {
-                            let x_451 : i32 = i_11;
-                            i_11 = (x_451 + 1);
-                          }
-                        }
-
-                        continuing {
-                          let x_453 : i32 = i_10;
-                          i_10 = (x_453 + 1);
-                        }
-                      }
-
-                      continuing {
-                        let x_455 : i32 = i_9;
-                        i_9 = (x_455 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_457 : i32 = i_8;
-                      i_8 = (x_457 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_459 : i32 = i_7;
-                    i_7 = (x_459 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_461 : i32 = i_6;
-                  i_6 = (x_461 + 1);
-                }
-              }
-
-              continuing {
-                let x_463 : i32 = i_5;
-                i_5 = (x_463 + 1);
-              }
-            }
-
-            continuing {
-              let x_465 : i32 = i_4;
-              i_4 = (x_465 + 1);
-            }
-          }
-
-          continuing {
-            let x_467 : i32 = i_3;
-            i_3 = (x_467 + 1);
-          }
-        }
-
-        continuing {
-          let x_469 : i32 = i_2;
-          i_2 = (x_469 + 1);
-        }
-      }
-
-      continuing {
-        let x_471 : i32 = i_1;
-        i_1 = (x_471 + 1);
-      }
-    }
-
-    continuing {
-      let x_473 : i32 = i;
-      i = (x_473 + 1);
-    }
-  }
-  sum = 0.0;
-  r = 0;
-  loop {
-    let x_479 : i32 = x_GLF_global_loop_count;
-    if ((x_479 < 100)) {
-    } else {
-      break;
-    }
-    let x_482 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_482 + 1);
-    let x_484 : i32 = r;
-    let x_486 : f32 = m23[0][x_484];
-    let x_487 : f32 = sum;
-    sum = (x_487 + x_486);
-    let x_489 : i32 = r;
-    let x_491 : f32 = m24[0][x_489];
-    let x_492 : f32 = sum;
-    sum = (x_492 + x_491);
-    let x_494 : i32 = r;
-    let x_496 : f32 = m32[0][x_494];
-    let x_497 : f32 = sum;
-    sum = (x_497 + x_496);
-    let x_499 : i32 = r;
-    let x_501 : f32 = m33[0][x_499];
-    let x_502 : f32 = sum;
-    sum = (x_502 + x_501);
-    let x_504 : i32 = r;
-    let x_506 : f32 = m34[0][x_504];
-    let x_507 : f32 = sum;
-    sum = (x_507 + x_506);
-    let x_509 : i32 = r;
-    let x_511 : f32 = m42[0][x_509];
-    let x_512 : f32 = sum;
-    sum = (x_512 + x_511);
-    let x_514 : i32 = r;
-    let x_516 : f32 = m43[0][x_514];
-    let x_517 : f32 = sum;
-    sum = (x_517 + x_516);
-    let x_519 : i32 = r;
-    let x_521 : f32 = m44[0][x_519];
-    let x_522 : f32 = sum;
-    sum = (x_522 + x_521);
-
-    continuing {
-      let x_524 : i32 = r;
-      r = (x_524 + 1);
-    }
-  }
-  let x_526 : f32 = sum;
-  if ((x_526 == 8.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 20ec5cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,3 +0,0 @@
-SKIP: FAILED
-
-test timed out after 30s
\ No newline at end of file
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.msl
deleted file mode 100644
index 93f927e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,630 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2x3 m23 = float2x3(0.0f);
-  float2x4 m24 = float2x4(0.0f);
-  float3x2 m32 = float3x2(0.0f);
-  float3x3 m33 = float3x3(0.0f);
-  float3x4 m34 = float3x4(0.0f);
-  float4x2 m42 = float4x2(0.0f);
-  float4x3 m43 = float4x3(0.0f);
-  float4x4 m44 = float4x4(0.0f);
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int i_4 = 0;
-  int i_5 = 0;
-  int i_6 = 0;
-  int i_7 = 0;
-  int i_8 = 0;
-  int i_9 = 0;
-  int i_10 = 0;
-  int i_11 = 0;
-  int i_12 = 0;
-  int i_13 = 0;
-  int i_14 = 0;
-  int i_15 = 0;
-  int i_16 = 0;
-  int i_17 = 0;
-  int i_18 = 0;
-  int i_19 = 0;
-  int i_20 = 0;
-  int i_21 = 0;
-  int i_22 = 0;
-  int i_23 = 0;
-  int i_24 = 0;
-  int i_25 = 0;
-  int i_26 = 0;
-  int i_27 = 0;
-  int i_28 = 0;
-  int i_29 = 0;
-  int i_30 = 0;
-  int i_31 = 0;
-  int i_32 = 0;
-  int i_33 = 0;
-  int i_34 = 0;
-  int i_35 = 0;
-  int i_36 = 0;
-  int i_37 = 0;
-  float sum = 0.0f;
-  int r = 0;
-  *(tint_symbol_3) = 0;
-  m23 = float2x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
-  m24 = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-  m32 = float3x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  m33 = float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
-  m34 = float3x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-  m42 = float4x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  m43 = float4x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
-  m44 = float4x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-  i = 0;
-  while (true) {
-    int const x_105 = i;
-    if ((x_105 < 1)) {
-    } else {
-      break;
-    }
-    i_1 = 0;
-    while (true) {
-      int const x_112 = i_1;
-      if ((x_112 < 1)) {
-      } else {
-        break;
-      }
-      i_2 = 0;
-      while (true) {
-        int const x_119 = i_2;
-        if ((x_119 < 1)) {
-        } else {
-          break;
-        }
-        i_3 = 0;
-        while (true) {
-          int const x_126 = i_3;
-          if ((x_126 < 1)) {
-          } else {
-            break;
-          }
-          i_4 = 0;
-          while (true) {
-            int const x_133 = i_4;
-            if ((x_133 < 1)) {
-            } else {
-              break;
-            }
-            i_5 = 0;
-            while (true) {
-              int const x_140 = i_5;
-              if ((x_140 < 1)) {
-              } else {
-                break;
-              }
-              i_6 = 0;
-              while (true) {
-                int const x_147 = i_6;
-                if ((x_147 < 1)) {
-                } else {
-                  break;
-                }
-                i_7 = 0;
-                while (true) {
-                  int const x_154 = i_7;
-                  if ((x_154 < 1)) {
-                  } else {
-                    break;
-                  }
-                  i_8 = 0;
-                  while (true) {
-                    int const x_161 = i_8;
-                    if ((x_161 < 1)) {
-                    } else {
-                      break;
-                    }
-                    i_9 = 0;
-                    while (true) {
-                      int const x_168 = i_9;
-                      if ((x_168 < 1)) {
-                      } else {
-                        break;
-                      }
-                      i_10 = 0;
-                      while (true) {
-                        int const x_175 = i_10;
-                        if ((x_175 < 1)) {
-                        } else {
-                          break;
-                        }
-                        i_11 = 0;
-                        while (true) {
-                          int const x_182 = i_11;
-                          if ((x_182 < 1)) {
-                          } else {
-                            break;
-                          }
-                          i_12 = 0;
-                          while (true) {
-                            int const x_189 = i_12;
-                            if ((x_189 < 1)) {
-                            } else {
-                              break;
-                            }
-                            i_13 = 0;
-                            while (true) {
-                              int const x_196 = i_13;
-                              if ((x_196 < 1)) {
-                              } else {
-                                break;
-                              }
-                              i_14 = 0;
-                              while (true) {
-                                int const x_203 = i_14;
-                                if ((x_203 < 1)) {
-                                } else {
-                                  break;
-                                }
-                                i_15 = 0;
-                                while (true) {
-                                  int const x_210 = i_15;
-                                  if ((x_210 < 1)) {
-                                  } else {
-                                    break;
-                                  }
-                                  i_16 = 0;
-                                  while (true) {
-                                    int const x_217 = i_16;
-                                    if ((x_217 < 1)) {
-                                    } else {
-                                      break;
-                                    }
-                                    i_17 = 0;
-                                    while (true) {
-                                      int const x_224 = i_17;
-                                      if ((x_224 < 1)) {
-                                      } else {
-                                        break;
-                                      }
-                                      i_18 = 0;
-                                      while (true) {
-                                        int const x_231 = i_18;
-                                        if ((x_231 < 1)) {
-                                        } else {
-                                          break;
-                                        }
-                                        i_19 = 0;
-                                        while (true) {
-                                          int const x_238 = i_19;
-                                          if ((x_238 < 1)) {
-                                          } else {
-                                            break;
-                                          }
-                                          i_20 = 0;
-                                          while (true) {
-                                            int const x_245 = i_20;
-                                            if ((x_245 < 1)) {
-                                            } else {
-                                              break;
-                                            }
-                                            i_21 = 0;
-                                            while (true) {
-                                              int const x_252 = i_21;
-                                              if ((x_252 < 1)) {
-                                              } else {
-                                                break;
-                                              }
-                                              i_22 = 0;
-                                              while (true) {
-                                                int const x_259 = i_22;
-                                                if ((x_259 < 1)) {
-                                                } else {
-                                                  break;
-                                                }
-                                                i_23 = 0;
-                                                while (true) {
-                                                  int const x_266 = i_23;
-                                                  if ((x_266 < 1)) {
-                                                  } else {
-                                                    break;
-                                                  }
-                                                  i_24 = 0;
-                                                  while (true) {
-                                                    int const x_273 = i_24;
-                                                    if ((x_273 < 1)) {
-                                                    } else {
-                                                      break;
-                                                    }
-                                                    i_25 = 0;
-                                                    while (true) {
-                                                      int const x_280 = i_25;
-                                                      if ((x_280 < 1)) {
-                                                      } else {
-                                                        break;
-                                                      }
-                                                      i_26 = 0;
-                                                      while (true) {
-                                                        int const x_287 = i_26;
-                                                        if ((x_287 < 1)) {
-                                                        } else {
-                                                          break;
-                                                        }
-                                                        i_27 = 0;
-                                                        while (true) {
-                                                          int const x_294 = i_27;
-                                                          if ((x_294 < 1)) {
-                                                          } else {
-                                                            break;
-                                                          }
-                                                          i_28 = 0;
-                                                          while (true) {
-                                                            int const x_301 = i_28;
-                                                            if ((x_301 < 1)) {
-                                                            } else {
-                                                              break;
-                                                            }
-                                                            i_29 = 0;
-                                                            while (true) {
-                                                              int const x_308 = i_29;
-                                                              if ((x_308 < 1)) {
-                                                              } else {
-                                                                break;
-                                                              }
-                                                              i_30 = 0;
-                                                              while (true) {
-                                                                int const x_315 = i_30;
-                                                                if ((x_315 < 1)) {
-                                                                } else {
-                                                                  break;
-                                                                }
-                                                                i_31 = 0;
-                                                                while (true) {
-                                                                  int const x_322 = i_31;
-                                                                  if ((x_322 < 1)) {
-                                                                  } else {
-                                                                    break;
-                                                                  }
-                                                                  i_32 = 0;
-                                                                  while (true) {
-                                                                    int const x_329 = i_32;
-                                                                    if ((x_329 < 1)) {
-                                                                    } else {
-                                                                      break;
-                                                                    }
-                                                                    i_33 = 0;
-                                                                    while (true) {
-                                                                      int const x_336 = i_33;
-                                                                      if ((x_336 < 1)) {
-                                                                      } else {
-                                                                        break;
-                                                                      }
-                                                                      i_34 = 0;
-                                                                      while (true) {
-                                                                        int const x_343 = i_34;
-                                                                        if ((x_343 < 1)) {
-                                                                        } else {
-                                                                          break;
-                                                                        }
-                                                                        i_35 = 0;
-                                                                        while (true) {
-                                                                          int const x_350 = i_35;
-                                                                          if ((x_350 < 1)) {
-                                                                          } else {
-                                                                            break;
-                                                                          }
-                                                                          i_36 = 0;
-                                                                          while (true) {
-                                                                            int const x_357 = i_36;
-                                                                            if ((x_357 < 1)) {
-                                                                            } else {
-                                                                              break;
-                                                                            }
-                                                                            i_37 = 0;
-                                                                            while (true) {
-                                                                              int const x_364 = i_37;
-                                                                              if ((x_364 < 1)) {
-                                                                              } else {
-                                                                                break;
-                                                                              }
-                                                                              while (true) {
-                                                                                int const x_371 = *(tint_symbol_3);
-                                                                                *(tint_symbol_3) = as_type<int>((as_type<uint>(x_371) + as_type<uint>(1)));
-                                                                                {
-                                                                                  int const x_373 = *(tint_symbol_3);
-                                                                                  if ((x_373 < 98)) {
-                                                                                  } else {
-                                                                                    break;
-                                                                                  }
-                                                                                }
-                                                                              }
-                                                                              int const x_375 = i_37;
-                                                                              int const x_376 = i_37;
-                                                                              m23[x_375][x_376] = 1.0f;
-                                                                              int const x_378 = i_37;
-                                                                              int const x_379 = i_37;
-                                                                              m24[x_378][x_379] = 1.0f;
-                                                                              int const x_381 = i_37;
-                                                                              int const x_382 = i_37;
-                                                                              m32[x_381][x_382] = 1.0f;
-                                                                              int const x_384 = i_37;
-                                                                              int const x_385 = i_37;
-                                                                              m33[x_384][x_385] = 1.0f;
-                                                                              int const x_387 = i_37;
-                                                                              int const x_388 = i_37;
-                                                                              m34[x_387][x_388] = 1.0f;
-                                                                              int const x_390 = i_37;
-                                                                              int const x_391 = i_37;
-                                                                              m42[x_390][x_391] = 1.0f;
-                                                                              int const x_393 = i_37;
-                                                                              int const x_394 = i_37;
-                                                                              m43[x_393][x_394] = 1.0f;
-                                                                              int const x_396 = i_37;
-                                                                              int const x_397 = i_37;
-                                                                              m44[x_396][x_397] = 1.0f;
-                                                                              {
-                                                                                int const x_399 = i_37;
-                                                                                i_37 = as_type<int>((as_type<uint>(x_399) + as_type<uint>(1)));
-                                                                              }
-                                                                            }
-                                                                            {
-                                                                              int const x_401 = i_36;
-                                                                              i_36 = as_type<int>((as_type<uint>(x_401) + as_type<uint>(1)));
-                                                                            }
-                                                                          }
-                                                                          {
-                                                                            int const x_403 = i_35;
-                                                                            i_35 = as_type<int>((as_type<uint>(x_403) + as_type<uint>(1)));
-                                                                          }
-                                                                        }
-                                                                        {
-                                                                          int const x_405 = i_34;
-                                                                          i_34 = as_type<int>((as_type<uint>(x_405) + as_type<uint>(1)));
-                                                                        }
-                                                                      }
-                                                                      {
-                                                                        int const x_407 = i_33;
-                                                                        i_33 = as_type<int>((as_type<uint>(x_407) + as_type<uint>(1)));
-                                                                      }
-                                                                    }
-                                                                    {
-                                                                      int const x_409 = i_32;
-                                                                      i_32 = as_type<int>((as_type<uint>(x_409) + as_type<uint>(1)));
-                                                                    }
-                                                                  }
-                                                                  {
-                                                                    int const x_411 = i_31;
-                                                                    i_31 = as_type<int>((as_type<uint>(x_411) + as_type<uint>(1)));
-                                                                  }
-                                                                }
-                                                                {
-                                                                  int const x_413 = i_30;
-                                                                  i_30 = as_type<int>((as_type<uint>(x_413) + as_type<uint>(1)));
-                                                                }
-                                                              }
-                                                              {
-                                                                int const x_415 = i_29;
-                                                                i_29 = as_type<int>((as_type<uint>(x_415) + as_type<uint>(1)));
-                                                              }
-                                                            }
-                                                            {
-                                                              int const x_417 = i_28;
-                                                              i_28 = as_type<int>((as_type<uint>(x_417) + as_type<uint>(1)));
-                                                            }
-                                                          }
-                                                          {
-                                                            int const x_419 = i_27;
-                                                            i_27 = as_type<int>((as_type<uint>(x_419) + as_type<uint>(1)));
-                                                          }
-                                                        }
-                                                        {
-                                                          int const x_421 = i_26;
-                                                          i_26 = as_type<int>((as_type<uint>(x_421) + as_type<uint>(1)));
-                                                        }
-                                                      }
-                                                      {
-                                                        int const x_423 = i_25;
-                                                        i_25 = as_type<int>((as_type<uint>(x_423) + as_type<uint>(1)));
-                                                      }
-                                                    }
-                                                    {
-                                                      int const x_425 = i_24;
-                                                      i_24 = as_type<int>((as_type<uint>(x_425) + as_type<uint>(1)));
-                                                    }
-                                                  }
-                                                  {
-                                                    int const x_427 = i_23;
-                                                    i_23 = as_type<int>((as_type<uint>(x_427) + as_type<uint>(1)));
-                                                  }
-                                                }
-                                                {
-                                                  int const x_429 = i_22;
-                                                  i_22 = as_type<int>((as_type<uint>(x_429) + as_type<uint>(1)));
-                                                }
-                                              }
-                                              {
-                                                int const x_431 = i_21;
-                                                i_21 = as_type<int>((as_type<uint>(x_431) + as_type<uint>(1)));
-                                              }
-                                            }
-                                            {
-                                              int const x_433 = i_20;
-                                              i_20 = as_type<int>((as_type<uint>(x_433) + as_type<uint>(1)));
-                                            }
-                                          }
-                                          {
-                                            int const x_435 = i_19;
-                                            i_19 = as_type<int>((as_type<uint>(x_435) + as_type<uint>(1)));
-                                          }
-                                        }
-                                        {
-                                          int const x_437 = i_18;
-                                          i_18 = as_type<int>((as_type<uint>(x_437) + as_type<uint>(1)));
-                                        }
-                                      }
-                                      {
-                                        int const x_439 = i_17;
-                                        i_17 = as_type<int>((as_type<uint>(x_439) + as_type<uint>(1)));
-                                      }
-                                    }
-                                    {
-                                      int const x_441 = i_16;
-                                      i_16 = as_type<int>((as_type<uint>(x_441) + as_type<uint>(1)));
-                                    }
-                                  }
-                                  {
-                                    int const x_443 = i_15;
-                                    i_15 = as_type<int>((as_type<uint>(x_443) + as_type<uint>(1)));
-                                  }
-                                }
-                                {
-                                  int const x_445 = i_14;
-                                  i_14 = as_type<int>((as_type<uint>(x_445) + as_type<uint>(1)));
-                                }
-                              }
-                              {
-                                int const x_447 = i_13;
-                                i_13 = as_type<int>((as_type<uint>(x_447) + as_type<uint>(1)));
-                              }
-                            }
-                            {
-                              int const x_449 = i_12;
-                              i_12 = as_type<int>((as_type<uint>(x_449) + as_type<uint>(1)));
-                            }
-                          }
-                          {
-                            int const x_451 = i_11;
-                            i_11 = as_type<int>((as_type<uint>(x_451) + as_type<uint>(1)));
-                          }
-                        }
-                        {
-                          int const x_453 = i_10;
-                          i_10 = as_type<int>((as_type<uint>(x_453) + as_type<uint>(1)));
-                        }
-                      }
-                      {
-                        int const x_455 = i_9;
-                        i_9 = as_type<int>((as_type<uint>(x_455) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_457 = i_8;
-                      i_8 = as_type<int>((as_type<uint>(x_457) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_459 = i_7;
-                    i_7 = as_type<int>((as_type<uint>(x_459) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_461 = i_6;
-                  i_6 = as_type<int>((as_type<uint>(x_461) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_463 = i_5;
-                i_5 = as_type<int>((as_type<uint>(x_463) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_465 = i_4;
-              i_4 = as_type<int>((as_type<uint>(x_465) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_467 = i_3;
-            i_3 = as_type<int>((as_type<uint>(x_467) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_469 = i_2;
-          i_2 = as_type<int>((as_type<uint>(x_469) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_471 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_471) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_473 = i;
-      i = as_type<int>((as_type<uint>(x_473) + as_type<uint>(1)));
-    }
-  }
-  sum = 0.0f;
-  r = 0;
-  while (true) {
-    int const x_479 = *(tint_symbol_3);
-    if ((x_479 < 100)) {
-    } else {
-      break;
-    }
-    int const x_482 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_482) + as_type<uint>(1)));
-    int const x_484 = r;
-    float const x_486 = m23[0][x_484];
-    float const x_487 = sum;
-    sum = (x_487 + x_486);
-    int const x_489 = r;
-    float const x_491 = m24[0][x_489];
-    float const x_492 = sum;
-    sum = (x_492 + x_491);
-    int const x_494 = r;
-    float const x_496 = m32[0][x_494];
-    float const x_497 = sum;
-    sum = (x_497 + x_496);
-    int const x_499 = r;
-    float const x_501 = m33[0][x_499];
-    float const x_502 = sum;
-    sum = (x_502 + x_501);
-    int const x_504 = r;
-    float const x_506 = m34[0][x_504];
-    float const x_507 = sum;
-    sum = (x_507 + x_506);
-    int const x_509 = r;
-    float const x_511 = m42[0][x_509];
-    float const x_512 = sum;
-    sum = (x_512 + x_511);
-    int const x_514 = r;
-    float const x_516 = m43[0][x_514];
-    float const x_517 = sum;
-    sum = (x_517 + x_516);
-    int const x_519 = r;
-    float const x_521 = m44[0][x_519];
-    float const x_522 = sum;
-    sum = (x_522 + x_521);
-    {
-      int const x_524 = r;
-      r = as_type<int>((as_type<uint>(x_524) + as_type<uint>(1)));
-    }
-  }
-  float const x_526 = sum;
-  if ((x_526 == 8.0f)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5959b0f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,1173 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 632
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m23 "m23"
-               OpName %m24 "m24"
-               OpName %m32 "m32"
-               OpName %m33 "m33"
-               OpName %m34 "m34"
-               OpName %m42 "m42"
-               OpName %m43 "m43"
-               OpName %m44 "m44"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %i_3 "i_3"
-               OpName %i_4 "i_4"
-               OpName %i_5 "i_5"
-               OpName %i_6 "i_6"
-               OpName %i_7 "i_7"
-               OpName %i_8 "i_8"
-               OpName %i_9 "i_9"
-               OpName %i_10 "i_10"
-               OpName %i_11 "i_11"
-               OpName %i_12 "i_12"
-               OpName %i_13 "i_13"
-               OpName %i_14 "i_14"
-               OpName %i_15 "i_15"
-               OpName %i_16 "i_16"
-               OpName %i_17 "i_17"
-               OpName %i_18 "i_18"
-               OpName %i_19 "i_19"
-               OpName %i_20 "i_20"
-               OpName %i_21 "i_21"
-               OpName %i_22 "i_22"
-               OpName %i_23 "i_23"
-               OpName %i_24 "i_24"
-               OpName %i_25 "i_25"
-               OpName %i_26 "i_26"
-               OpName %i_27 "i_27"
-               OpName %i_28 "i_28"
-               OpName %i_29 "i_29"
-               OpName %i_30 "i_30"
-               OpName %i_31 "i_31"
-               OpName %i_32 "i_32"
-               OpName %i_33 "i_33"
-               OpName %i_34 "i_34"
-               OpName %i_35 "i_35"
-               OpName %i_36 "i_36"
-               OpName %i_37 "i_37"
-               OpName %sum "sum"
-               OpName %r "r"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat2v3float = OpTypeMatrix %v3float 2
-%_ptr_Function_mat2v3float = OpTypePointer Function %mat2v3float
-         %20 = OpConstantNull %mat2v3float
-%mat2v4float = OpTypeMatrix %v4float 2
-%_ptr_Function_mat2v4float = OpTypePointer Function %mat2v4float
-         %24 = OpConstantNull %mat2v4float
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %29 = OpConstantNull %mat3v2float
-%mat3v3float = OpTypeMatrix %v3float 3
-%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
-         %33 = OpConstantNull %mat3v3float
-%mat3v4float = OpTypeMatrix %v4float 3
-%_ptr_Function_mat3v4float = OpTypePointer Function %mat3v4float
-         %37 = OpConstantNull %mat3v4float
-%mat4v2float = OpTypeMatrix %v2float 4
-%_ptr_Function_mat4v2float = OpTypePointer Function %mat4v2float
-         %41 = OpConstantNull %mat4v2float
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %45 = OpConstantNull %mat4v3float
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %49 = OpConstantNull %mat4v4float
-%_ptr_Function_int = OpTypePointer Function %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %91 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-         %95 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %96 = OpConstantComposite %mat2v3float %95 %95
-         %97 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %98 = OpConstantComposite %mat2v4float %97 %97
-         %99 = OpConstantComposite %v2float %float_0 %float_0
-        %100 = OpConstantComposite %mat3v2float %99 %99 %99
-        %101 = OpConstantComposite %mat3v3float %95 %95 %95
-        %102 = OpConstantComposite %mat3v4float %97 %97 %97
-        %103 = OpConstantComposite %mat4v2float %99 %99 %99 %99
-        %104 = OpConstantComposite %mat4v3float %95 %95 %95 %95
-        %105 = OpConstantComposite %mat4v4float %97 %97 %97 %97
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-     %int_98 = OpConstant %int 98
-    %float_1 = OpConstant %float 1
-    %int_100 = OpConstant %int 100
-    %float_8 = OpConstant %float 8
-        %620 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %621 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-        %m23 = OpVariable %_ptr_Function_mat2v3float Function %20
-        %m24 = OpVariable %_ptr_Function_mat2v4float Function %24
-        %m32 = OpVariable %_ptr_Function_mat3v2float Function %29
-        %m33 = OpVariable %_ptr_Function_mat3v3float Function %33
-        %m34 = OpVariable %_ptr_Function_mat3v4float Function %37
-        %m42 = OpVariable %_ptr_Function_mat4v2float Function %41
-        %m43 = OpVariable %_ptr_Function_mat4v3float Function %45
-        %m44 = OpVariable %_ptr_Function_mat4v4float Function %49
-          %i = OpVariable %_ptr_Function_int Function %9
-        %i_1 = OpVariable %_ptr_Function_int Function %9
-        %i_2 = OpVariable %_ptr_Function_int Function %9
-        %i_3 = OpVariable %_ptr_Function_int Function %9
-        %i_4 = OpVariable %_ptr_Function_int Function %9
-        %i_5 = OpVariable %_ptr_Function_int Function %9
-        %i_6 = OpVariable %_ptr_Function_int Function %9
-        %i_7 = OpVariable %_ptr_Function_int Function %9
-        %i_8 = OpVariable %_ptr_Function_int Function %9
-        %i_9 = OpVariable %_ptr_Function_int Function %9
-       %i_10 = OpVariable %_ptr_Function_int Function %9
-       %i_11 = OpVariable %_ptr_Function_int Function %9
-       %i_12 = OpVariable %_ptr_Function_int Function %9
-       %i_13 = OpVariable %_ptr_Function_int Function %9
-       %i_14 = OpVariable %_ptr_Function_int Function %9
-       %i_15 = OpVariable %_ptr_Function_int Function %9
-       %i_16 = OpVariable %_ptr_Function_int Function %9
-       %i_17 = OpVariable %_ptr_Function_int Function %9
-       %i_18 = OpVariable %_ptr_Function_int Function %9
-       %i_19 = OpVariable %_ptr_Function_int Function %9
-       %i_20 = OpVariable %_ptr_Function_int Function %9
-       %i_21 = OpVariable %_ptr_Function_int Function %9
-       %i_22 = OpVariable %_ptr_Function_int Function %9
-       %i_23 = OpVariable %_ptr_Function_int Function %9
-       %i_24 = OpVariable %_ptr_Function_int Function %9
-       %i_25 = OpVariable %_ptr_Function_int Function %9
-       %i_26 = OpVariable %_ptr_Function_int Function %9
-       %i_27 = OpVariable %_ptr_Function_int Function %9
-       %i_28 = OpVariable %_ptr_Function_int Function %9
-       %i_29 = OpVariable %_ptr_Function_int Function %9
-       %i_30 = OpVariable %_ptr_Function_int Function %9
-       %i_31 = OpVariable %_ptr_Function_int Function %9
-       %i_32 = OpVariable %_ptr_Function_int Function %9
-       %i_33 = OpVariable %_ptr_Function_int Function %9
-       %i_34 = OpVariable %_ptr_Function_int Function %9
-       %i_35 = OpVariable %_ptr_Function_int Function %9
-       %i_36 = OpVariable %_ptr_Function_int Function %9
-       %i_37 = OpVariable %_ptr_Function_int Function %9
-        %sum = OpVariable %_ptr_Function_float Function %91
-          %r = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-               OpStore %m23 %96
-               OpStore %m24 %98
-               OpStore %m32 %100
-               OpStore %m33 %101
-               OpStore %m34 %102
-               OpStore %m42 %103
-               OpStore %m43 %104
-               OpStore %m44 %105
-               OpStore %i %int_0
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %i
-        %112 = OpSLessThan %bool %110 %int_1
-               OpSelectionMerge %114 None
-               OpBranchConditional %112 %115 %116
-        %115 = OpLabel
-               OpBranch %114
-        %116 = OpLabel
-               OpBranch %107
-        %114 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %117
-        %117 = OpLabel
-               OpLoopMerge %118 %119 None
-               OpBranch %120
-        %120 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpSLessThan %bool %121 %int_1
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %125
-        %124 = OpLabel
-               OpBranch %123
-        %125 = OpLabel
-               OpBranch %118
-        %123 = OpLabel
-               OpStore %i_2 %int_0
-               OpBranch %126
-        %126 = OpLabel
-               OpLoopMerge %127 %128 None
-               OpBranch %129
-        %129 = OpLabel
-        %130 = OpLoad %int %i_2
-        %131 = OpSLessThan %bool %130 %int_1
-               OpSelectionMerge %132 None
-               OpBranchConditional %131 %133 %134
-        %133 = OpLabel
-               OpBranch %132
-        %134 = OpLabel
-               OpBranch %127
-        %132 = OpLabel
-               OpStore %i_3 %int_0
-               OpBranch %135
-        %135 = OpLabel
-               OpLoopMerge %136 %137 None
-               OpBranch %138
-        %138 = OpLabel
-        %139 = OpLoad %int %i_3
-        %140 = OpSLessThan %bool %139 %int_1
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %143
-        %142 = OpLabel
-               OpBranch %141
-        %143 = OpLabel
-               OpBranch %136
-        %141 = OpLabel
-               OpStore %i_4 %int_0
-               OpBranch %144
-        %144 = OpLabel
-               OpLoopMerge %145 %146 None
-               OpBranch %147
-        %147 = OpLabel
-        %148 = OpLoad %int %i_4
-        %149 = OpSLessThan %bool %148 %int_1
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %152
-        %151 = OpLabel
-               OpBranch %150
-        %152 = OpLabel
-               OpBranch %145
-        %150 = OpLabel
-               OpStore %i_5 %int_0
-               OpBranch %153
-        %153 = OpLabel
-               OpLoopMerge %154 %155 None
-               OpBranch %156
-        %156 = OpLabel
-        %157 = OpLoad %int %i_5
-        %158 = OpSLessThan %bool %157 %int_1
-               OpSelectionMerge %159 None
-               OpBranchConditional %158 %160 %161
-        %160 = OpLabel
-               OpBranch %159
-        %161 = OpLabel
-               OpBranch %154
-        %159 = OpLabel
-               OpStore %i_6 %int_0
-               OpBranch %162
-        %162 = OpLabel
-               OpLoopMerge %163 %164 None
-               OpBranch %165
-        %165 = OpLabel
-        %166 = OpLoad %int %i_6
-        %167 = OpSLessThan %bool %166 %int_1
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %163
-        %168 = OpLabel
-               OpStore %i_7 %int_0
-               OpBranch %171
-        %171 = OpLabel
-               OpLoopMerge %172 %173 None
-               OpBranch %174
-        %174 = OpLabel
-        %175 = OpLoad %int %i_7
-        %176 = OpSLessThan %bool %175 %int_1
-               OpSelectionMerge %177 None
-               OpBranchConditional %176 %178 %179
-        %178 = OpLabel
-               OpBranch %177
-        %179 = OpLabel
-               OpBranch %172
-        %177 = OpLabel
-               OpStore %i_8 %int_0
-               OpBranch %180
-        %180 = OpLabel
-               OpLoopMerge %181 %182 None
-               OpBranch %183
-        %183 = OpLabel
-        %184 = OpLoad %int %i_8
-        %185 = OpSLessThan %bool %184 %int_1
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-               OpBranch %186
-        %188 = OpLabel
-               OpBranch %181
-        %186 = OpLabel
-               OpStore %i_9 %int_0
-               OpBranch %189
-        %189 = OpLabel
-               OpLoopMerge %190 %191 None
-               OpBranch %192
-        %192 = OpLabel
-        %193 = OpLoad %int %i_9
-        %194 = OpSLessThan %bool %193 %int_1
-               OpSelectionMerge %195 None
-               OpBranchConditional %194 %196 %197
-        %196 = OpLabel
-               OpBranch %195
-        %197 = OpLabel
-               OpBranch %190
-        %195 = OpLabel
-               OpStore %i_10 %int_0
-               OpBranch %198
-        %198 = OpLabel
-               OpLoopMerge %199 %200 None
-               OpBranch %201
-        %201 = OpLabel
-        %202 = OpLoad %int %i_10
-        %203 = OpSLessThan %bool %202 %int_1
-               OpSelectionMerge %204 None
-               OpBranchConditional %203 %205 %206
-        %205 = OpLabel
-               OpBranch %204
-        %206 = OpLabel
-               OpBranch %199
-        %204 = OpLabel
-               OpStore %i_11 %int_0
-               OpBranch %207
-        %207 = OpLabel
-               OpLoopMerge %208 %209 None
-               OpBranch %210
-        %210 = OpLabel
-        %211 = OpLoad %int %i_11
-        %212 = OpSLessThan %bool %211 %int_1
-               OpSelectionMerge %213 None
-               OpBranchConditional %212 %214 %215
-        %214 = OpLabel
-               OpBranch %213
-        %215 = OpLabel
-               OpBranch %208
-        %213 = OpLabel
-               OpStore %i_12 %int_0
-               OpBranch %216
-        %216 = OpLabel
-               OpLoopMerge %217 %218 None
-               OpBranch %219
-        %219 = OpLabel
-        %220 = OpLoad %int %i_12
-        %221 = OpSLessThan %bool %220 %int_1
-               OpSelectionMerge %222 None
-               OpBranchConditional %221 %223 %224
-        %223 = OpLabel
-               OpBranch %222
-        %224 = OpLabel
-               OpBranch %217
-        %222 = OpLabel
-               OpStore %i_13 %int_0
-               OpBranch %225
-        %225 = OpLabel
-               OpLoopMerge %226 %227 None
-               OpBranch %228
-        %228 = OpLabel
-        %229 = OpLoad %int %i_13
-        %230 = OpSLessThan %bool %229 %int_1
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %233
-        %232 = OpLabel
-               OpBranch %231
-        %233 = OpLabel
-               OpBranch %226
-        %231 = OpLabel
-               OpStore %i_14 %int_0
-               OpBranch %234
-        %234 = OpLabel
-               OpLoopMerge %235 %236 None
-               OpBranch %237
-        %237 = OpLabel
-        %238 = OpLoad %int %i_14
-        %239 = OpSLessThan %bool %238 %int_1
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %242
-        %241 = OpLabel
-               OpBranch %240
-        %242 = OpLabel
-               OpBranch %235
-        %240 = OpLabel
-               OpStore %i_15 %int_0
-               OpBranch %243
-        %243 = OpLabel
-               OpLoopMerge %244 %245 None
-               OpBranch %246
-        %246 = OpLabel
-        %247 = OpLoad %int %i_15
-        %248 = OpSLessThan %bool %247 %int_1
-               OpSelectionMerge %249 None
-               OpBranchConditional %248 %250 %251
-        %250 = OpLabel
-               OpBranch %249
-        %251 = OpLabel
-               OpBranch %244
-        %249 = OpLabel
-               OpStore %i_16 %int_0
-               OpBranch %252
-        %252 = OpLabel
-               OpLoopMerge %253 %254 None
-               OpBranch %255
-        %255 = OpLabel
-        %256 = OpLoad %int %i_16
-        %257 = OpSLessThan %bool %256 %int_1
-               OpSelectionMerge %258 None
-               OpBranchConditional %257 %259 %260
-        %259 = OpLabel
-               OpBranch %258
-        %260 = OpLabel
-               OpBranch %253
-        %258 = OpLabel
-               OpStore %i_17 %int_0
-               OpBranch %261
-        %261 = OpLabel
-               OpLoopMerge %262 %263 None
-               OpBranch %264
-        %264 = OpLabel
-        %265 = OpLoad %int %i_17
-        %266 = OpSLessThan %bool %265 %int_1
-               OpSelectionMerge %267 None
-               OpBranchConditional %266 %268 %269
-        %268 = OpLabel
-               OpBranch %267
-        %269 = OpLabel
-               OpBranch %262
-        %267 = OpLabel
-               OpStore %i_18 %int_0
-               OpBranch %270
-        %270 = OpLabel
-               OpLoopMerge %271 %272 None
-               OpBranch %273
-        %273 = OpLabel
-        %274 = OpLoad %int %i_18
-        %275 = OpSLessThan %bool %274 %int_1
-               OpSelectionMerge %276 None
-               OpBranchConditional %275 %277 %278
-        %277 = OpLabel
-               OpBranch %276
-        %278 = OpLabel
-               OpBranch %271
-        %276 = OpLabel
-               OpStore %i_19 %int_0
-               OpBranch %279
-        %279 = OpLabel
-               OpLoopMerge %280 %281 None
-               OpBranch %282
-        %282 = OpLabel
-        %283 = OpLoad %int %i_19
-        %284 = OpSLessThan %bool %283 %int_1
-               OpSelectionMerge %285 None
-               OpBranchConditional %284 %286 %287
-        %286 = OpLabel
-               OpBranch %285
-        %287 = OpLabel
-               OpBranch %280
-        %285 = OpLabel
-               OpStore %i_20 %int_0
-               OpBranch %288
-        %288 = OpLabel
-               OpLoopMerge %289 %290 None
-               OpBranch %291
-        %291 = OpLabel
-        %292 = OpLoad %int %i_20
-        %293 = OpSLessThan %bool %292 %int_1
-               OpSelectionMerge %294 None
-               OpBranchConditional %293 %295 %296
-        %295 = OpLabel
-               OpBranch %294
-        %296 = OpLabel
-               OpBranch %289
-        %294 = OpLabel
-               OpStore %i_21 %int_0
-               OpBranch %297
-        %297 = OpLabel
-               OpLoopMerge %298 %299 None
-               OpBranch %300
-        %300 = OpLabel
-        %301 = OpLoad %int %i_21
-        %302 = OpSLessThan %bool %301 %int_1
-               OpSelectionMerge %303 None
-               OpBranchConditional %302 %304 %305
-        %304 = OpLabel
-               OpBranch %303
-        %305 = OpLabel
-               OpBranch %298
-        %303 = OpLabel
-               OpStore %i_22 %int_0
-               OpBranch %306
-        %306 = OpLabel
-               OpLoopMerge %307 %308 None
-               OpBranch %309
-        %309 = OpLabel
-        %310 = OpLoad %int %i_22
-        %311 = OpSLessThan %bool %310 %int_1
-               OpSelectionMerge %312 None
-               OpBranchConditional %311 %313 %314
-        %313 = OpLabel
-               OpBranch %312
-        %314 = OpLabel
-               OpBranch %307
-        %312 = OpLabel
-               OpStore %i_23 %int_0
-               OpBranch %315
-        %315 = OpLabel
-               OpLoopMerge %316 %317 None
-               OpBranch %318
-        %318 = OpLabel
-        %319 = OpLoad %int %i_23
-        %320 = OpSLessThan %bool %319 %int_1
-               OpSelectionMerge %321 None
-               OpBranchConditional %320 %322 %323
-        %322 = OpLabel
-               OpBranch %321
-        %323 = OpLabel
-               OpBranch %316
-        %321 = OpLabel
-               OpStore %i_24 %int_0
-               OpBranch %324
-        %324 = OpLabel
-               OpLoopMerge %325 %326 None
-               OpBranch %327
-        %327 = OpLabel
-        %328 = OpLoad %int %i_24
-        %329 = OpSLessThan %bool %328 %int_1
-               OpSelectionMerge %330 None
-               OpBranchConditional %329 %331 %332
-        %331 = OpLabel
-               OpBranch %330
-        %332 = OpLabel
-               OpBranch %325
-        %330 = OpLabel
-               OpStore %i_25 %int_0
-               OpBranch %333
-        %333 = OpLabel
-               OpLoopMerge %334 %335 None
-               OpBranch %336
-        %336 = OpLabel
-        %337 = OpLoad %int %i_25
-        %338 = OpSLessThan %bool %337 %int_1
-               OpSelectionMerge %339 None
-               OpBranchConditional %338 %340 %341
-        %340 = OpLabel
-               OpBranch %339
-        %341 = OpLabel
-               OpBranch %334
-        %339 = OpLabel
-               OpStore %i_26 %int_0
-               OpBranch %342
-        %342 = OpLabel
-               OpLoopMerge %343 %344 None
-               OpBranch %345
-        %345 = OpLabel
-        %346 = OpLoad %int %i_26
-        %347 = OpSLessThan %bool %346 %int_1
-               OpSelectionMerge %348 None
-               OpBranchConditional %347 %349 %350
-        %349 = OpLabel
-               OpBranch %348
-        %350 = OpLabel
-               OpBranch %343
-        %348 = OpLabel
-               OpStore %i_27 %int_0
-               OpBranch %351
-        %351 = OpLabel
-               OpLoopMerge %352 %353 None
-               OpBranch %354
-        %354 = OpLabel
-        %355 = OpLoad %int %i_27
-        %356 = OpSLessThan %bool %355 %int_1
-               OpSelectionMerge %357 None
-               OpBranchConditional %356 %358 %359
-        %358 = OpLabel
-               OpBranch %357
-        %359 = OpLabel
-               OpBranch %352
-        %357 = OpLabel
-               OpStore %i_28 %int_0
-               OpBranch %360
-        %360 = OpLabel
-               OpLoopMerge %361 %362 None
-               OpBranch %363
-        %363 = OpLabel
-        %364 = OpLoad %int %i_28
-        %365 = OpSLessThan %bool %364 %int_1
-               OpSelectionMerge %366 None
-               OpBranchConditional %365 %367 %368
-        %367 = OpLabel
-               OpBranch %366
-        %368 = OpLabel
-               OpBranch %361
-        %366 = OpLabel
-               OpStore %i_29 %int_0
-               OpBranch %369
-        %369 = OpLabel
-               OpLoopMerge %370 %371 None
-               OpBranch %372
-        %372 = OpLabel
-        %373 = OpLoad %int %i_29
-        %374 = OpSLessThan %bool %373 %int_1
-               OpSelectionMerge %375 None
-               OpBranchConditional %374 %376 %377
-        %376 = OpLabel
-               OpBranch %375
-        %377 = OpLabel
-               OpBranch %370
-        %375 = OpLabel
-               OpStore %i_30 %int_0
-               OpBranch %378
-        %378 = OpLabel
-               OpLoopMerge %379 %380 None
-               OpBranch %381
-        %381 = OpLabel
-        %382 = OpLoad %int %i_30
-        %383 = OpSLessThan %bool %382 %int_1
-               OpSelectionMerge %384 None
-               OpBranchConditional %383 %385 %386
-        %385 = OpLabel
-               OpBranch %384
-        %386 = OpLabel
-               OpBranch %379
-        %384 = OpLabel
-               OpStore %i_31 %int_0
-               OpBranch %387
-        %387 = OpLabel
-               OpLoopMerge %388 %389 None
-               OpBranch %390
-        %390 = OpLabel
-        %391 = OpLoad %int %i_31
-        %392 = OpSLessThan %bool %391 %int_1
-               OpSelectionMerge %393 None
-               OpBranchConditional %392 %394 %395
-        %394 = OpLabel
-               OpBranch %393
-        %395 = OpLabel
-               OpBranch %388
-        %393 = OpLabel
-               OpStore %i_32 %int_0
-               OpBranch %396
-        %396 = OpLabel
-               OpLoopMerge %397 %398 None
-               OpBranch %399
-        %399 = OpLabel
-        %400 = OpLoad %int %i_32
-        %401 = OpSLessThan %bool %400 %int_1
-               OpSelectionMerge %402 None
-               OpBranchConditional %401 %403 %404
-        %403 = OpLabel
-               OpBranch %402
-        %404 = OpLabel
-               OpBranch %397
-        %402 = OpLabel
-               OpStore %i_33 %int_0
-               OpBranch %405
-        %405 = OpLabel
-               OpLoopMerge %406 %407 None
-               OpBranch %408
-        %408 = OpLabel
-        %409 = OpLoad %int %i_33
-        %410 = OpSLessThan %bool %409 %int_1
-               OpSelectionMerge %411 None
-               OpBranchConditional %410 %412 %413
-        %412 = OpLabel
-               OpBranch %411
-        %413 = OpLabel
-               OpBranch %406
-        %411 = OpLabel
-               OpStore %i_34 %int_0
-               OpBranch %414
-        %414 = OpLabel
-               OpLoopMerge %415 %416 None
-               OpBranch %417
-        %417 = OpLabel
-        %418 = OpLoad %int %i_34
-        %419 = OpSLessThan %bool %418 %int_1
-               OpSelectionMerge %420 None
-               OpBranchConditional %419 %421 %422
-        %421 = OpLabel
-               OpBranch %420
-        %422 = OpLabel
-               OpBranch %415
-        %420 = OpLabel
-               OpStore %i_35 %int_0
-               OpBranch %423
-        %423 = OpLabel
-               OpLoopMerge %424 %425 None
-               OpBranch %426
-        %426 = OpLabel
-        %427 = OpLoad %int %i_35
-        %428 = OpSLessThan %bool %427 %int_1
-               OpSelectionMerge %429 None
-               OpBranchConditional %428 %430 %431
-        %430 = OpLabel
-               OpBranch %429
-        %431 = OpLabel
-               OpBranch %424
-        %429 = OpLabel
-               OpStore %i_36 %int_0
-               OpBranch %432
-        %432 = OpLabel
-               OpLoopMerge %433 %434 None
-               OpBranch %435
-        %435 = OpLabel
-        %436 = OpLoad %int %i_36
-        %437 = OpSLessThan %bool %436 %int_1
-               OpSelectionMerge %438 None
-               OpBranchConditional %437 %439 %440
-        %439 = OpLabel
-               OpBranch %438
-        %440 = OpLabel
-               OpBranch %433
-        %438 = OpLabel
-               OpStore %i_37 %int_0
-               OpBranch %441
-        %441 = OpLabel
-               OpLoopMerge %442 %443 None
-               OpBranch %444
-        %444 = OpLabel
-        %445 = OpLoad %int %i_37
-        %446 = OpSLessThan %bool %445 %int_1
-               OpSelectionMerge %447 None
-               OpBranchConditional %446 %448 %449
-        %448 = OpLabel
-               OpBranch %447
-        %449 = OpLabel
-               OpBranch %442
-        %447 = OpLabel
-               OpBranch %450
-        %450 = OpLabel
-               OpLoopMerge %451 %452 None
-               OpBranch %453
-        %453 = OpLabel
-        %454 = OpLoad %int %x_GLF_global_loop_count
-        %455 = OpIAdd %int %454 %int_1
-               OpStore %x_GLF_global_loop_count %455
-               OpBranch %452
-        %452 = OpLabel
-        %456 = OpLoad %int %x_GLF_global_loop_count
-        %458 = OpSLessThan %bool %456 %int_98
-               OpBranchConditional %458 %450 %451
-        %451 = OpLabel
-        %459 = OpLoad %int %i_37
-        %460 = OpLoad %int %i_37
-        %461 = OpAccessChain %_ptr_Function_float %m23 %459 %460
-               OpStore %461 %float_1
-        %463 = OpLoad %int %i_37
-        %464 = OpLoad %int %i_37
-        %465 = OpAccessChain %_ptr_Function_float %m24 %463 %464
-               OpStore %465 %float_1
-        %466 = OpLoad %int %i_37
-        %467 = OpLoad %int %i_37
-        %468 = OpAccessChain %_ptr_Function_float %m32 %466 %467
-               OpStore %468 %float_1
-        %469 = OpLoad %int %i_37
-        %470 = OpLoad %int %i_37
-        %471 = OpAccessChain %_ptr_Function_float %m33 %469 %470
-               OpStore %471 %float_1
-        %472 = OpLoad %int %i_37
-        %473 = OpLoad %int %i_37
-        %474 = OpAccessChain %_ptr_Function_float %m34 %472 %473
-               OpStore %474 %float_1
-        %475 = OpLoad %int %i_37
-        %476 = OpLoad %int %i_37
-        %477 = OpAccessChain %_ptr_Function_float %m42 %475 %476
-               OpStore %477 %float_1
-        %478 = OpLoad %int %i_37
-        %479 = OpLoad %int %i_37
-        %480 = OpAccessChain %_ptr_Function_float %m43 %478 %479
-               OpStore %480 %float_1
-        %481 = OpLoad %int %i_37
-        %482 = OpLoad %int %i_37
-        %483 = OpAccessChain %_ptr_Function_float %m44 %481 %482
-               OpStore %483 %float_1
-               OpBranch %443
-        %443 = OpLabel
-        %484 = OpLoad %int %i_37
-        %485 = OpIAdd %int %484 %int_1
-               OpStore %i_37 %485
-               OpBranch %441
-        %442 = OpLabel
-               OpBranch %434
-        %434 = OpLabel
-        %486 = OpLoad %int %i_36
-        %487 = OpIAdd %int %486 %int_1
-               OpStore %i_36 %487
-               OpBranch %432
-        %433 = OpLabel
-               OpBranch %425
-        %425 = OpLabel
-        %488 = OpLoad %int %i_35
-        %489 = OpIAdd %int %488 %int_1
-               OpStore %i_35 %489
-               OpBranch %423
-        %424 = OpLabel
-               OpBranch %416
-        %416 = OpLabel
-        %490 = OpLoad %int %i_34
-        %491 = OpIAdd %int %490 %int_1
-               OpStore %i_34 %491
-               OpBranch %414
-        %415 = OpLabel
-               OpBranch %407
-        %407 = OpLabel
-        %492 = OpLoad %int %i_33
-        %493 = OpIAdd %int %492 %int_1
-               OpStore %i_33 %493
-               OpBranch %405
-        %406 = OpLabel
-               OpBranch %398
-        %398 = OpLabel
-        %494 = OpLoad %int %i_32
-        %495 = OpIAdd %int %494 %int_1
-               OpStore %i_32 %495
-               OpBranch %396
-        %397 = OpLabel
-               OpBranch %389
-        %389 = OpLabel
-        %496 = OpLoad %int %i_31
-        %497 = OpIAdd %int %496 %int_1
-               OpStore %i_31 %497
-               OpBranch %387
-        %388 = OpLabel
-               OpBranch %380
-        %380 = OpLabel
-        %498 = OpLoad %int %i_30
-        %499 = OpIAdd %int %498 %int_1
-               OpStore %i_30 %499
-               OpBranch %378
-        %379 = OpLabel
-               OpBranch %371
-        %371 = OpLabel
-        %500 = OpLoad %int %i_29
-        %501 = OpIAdd %int %500 %int_1
-               OpStore %i_29 %501
-               OpBranch %369
-        %370 = OpLabel
-               OpBranch %362
-        %362 = OpLabel
-        %502 = OpLoad %int %i_28
-        %503 = OpIAdd %int %502 %int_1
-               OpStore %i_28 %503
-               OpBranch %360
-        %361 = OpLabel
-               OpBranch %353
-        %353 = OpLabel
-        %504 = OpLoad %int %i_27
-        %505 = OpIAdd %int %504 %int_1
-               OpStore %i_27 %505
-               OpBranch %351
-        %352 = OpLabel
-               OpBranch %344
-        %344 = OpLabel
-        %506 = OpLoad %int %i_26
-        %507 = OpIAdd %int %506 %int_1
-               OpStore %i_26 %507
-               OpBranch %342
-        %343 = OpLabel
-               OpBranch %335
-        %335 = OpLabel
-        %508 = OpLoad %int %i_25
-        %509 = OpIAdd %int %508 %int_1
-               OpStore %i_25 %509
-               OpBranch %333
-        %334 = OpLabel
-               OpBranch %326
-        %326 = OpLabel
-        %510 = OpLoad %int %i_24
-        %511 = OpIAdd %int %510 %int_1
-               OpStore %i_24 %511
-               OpBranch %324
-        %325 = OpLabel
-               OpBranch %317
-        %317 = OpLabel
-        %512 = OpLoad %int %i_23
-        %513 = OpIAdd %int %512 %int_1
-               OpStore %i_23 %513
-               OpBranch %315
-        %316 = OpLabel
-               OpBranch %308
-        %308 = OpLabel
-        %514 = OpLoad %int %i_22
-        %515 = OpIAdd %int %514 %int_1
-               OpStore %i_22 %515
-               OpBranch %306
-        %307 = OpLabel
-               OpBranch %299
-        %299 = OpLabel
-        %516 = OpLoad %int %i_21
-        %517 = OpIAdd %int %516 %int_1
-               OpStore %i_21 %517
-               OpBranch %297
-        %298 = OpLabel
-               OpBranch %290
-        %290 = OpLabel
-        %518 = OpLoad %int %i_20
-        %519 = OpIAdd %int %518 %int_1
-               OpStore %i_20 %519
-               OpBranch %288
-        %289 = OpLabel
-               OpBranch %281
-        %281 = OpLabel
-        %520 = OpLoad %int %i_19
-        %521 = OpIAdd %int %520 %int_1
-               OpStore %i_19 %521
-               OpBranch %279
-        %280 = OpLabel
-               OpBranch %272
-        %272 = OpLabel
-        %522 = OpLoad %int %i_18
-        %523 = OpIAdd %int %522 %int_1
-               OpStore %i_18 %523
-               OpBranch %270
-        %271 = OpLabel
-               OpBranch %263
-        %263 = OpLabel
-        %524 = OpLoad %int %i_17
-        %525 = OpIAdd %int %524 %int_1
-               OpStore %i_17 %525
-               OpBranch %261
-        %262 = OpLabel
-               OpBranch %254
-        %254 = OpLabel
-        %526 = OpLoad %int %i_16
-        %527 = OpIAdd %int %526 %int_1
-               OpStore %i_16 %527
-               OpBranch %252
-        %253 = OpLabel
-               OpBranch %245
-        %245 = OpLabel
-        %528 = OpLoad %int %i_15
-        %529 = OpIAdd %int %528 %int_1
-               OpStore %i_15 %529
-               OpBranch %243
-        %244 = OpLabel
-               OpBranch %236
-        %236 = OpLabel
-        %530 = OpLoad %int %i_14
-        %531 = OpIAdd %int %530 %int_1
-               OpStore %i_14 %531
-               OpBranch %234
-        %235 = OpLabel
-               OpBranch %227
-        %227 = OpLabel
-        %532 = OpLoad %int %i_13
-        %533 = OpIAdd %int %532 %int_1
-               OpStore %i_13 %533
-               OpBranch %225
-        %226 = OpLabel
-               OpBranch %218
-        %218 = OpLabel
-        %534 = OpLoad %int %i_12
-        %535 = OpIAdd %int %534 %int_1
-               OpStore %i_12 %535
-               OpBranch %216
-        %217 = OpLabel
-               OpBranch %209
-        %209 = OpLabel
-        %536 = OpLoad %int %i_11
-        %537 = OpIAdd %int %536 %int_1
-               OpStore %i_11 %537
-               OpBranch %207
-        %208 = OpLabel
-               OpBranch %200
-        %200 = OpLabel
-        %538 = OpLoad %int %i_10
-        %539 = OpIAdd %int %538 %int_1
-               OpStore %i_10 %539
-               OpBranch %198
-        %199 = OpLabel
-               OpBranch %191
-        %191 = OpLabel
-        %540 = OpLoad %int %i_9
-        %541 = OpIAdd %int %540 %int_1
-               OpStore %i_9 %541
-               OpBranch %189
-        %190 = OpLabel
-               OpBranch %182
-        %182 = OpLabel
-        %542 = OpLoad %int %i_8
-        %543 = OpIAdd %int %542 %int_1
-               OpStore %i_8 %543
-               OpBranch %180
-        %181 = OpLabel
-               OpBranch %173
-        %173 = OpLabel
-        %544 = OpLoad %int %i_7
-        %545 = OpIAdd %int %544 %int_1
-               OpStore %i_7 %545
-               OpBranch %171
-        %172 = OpLabel
-               OpBranch %164
-        %164 = OpLabel
-        %546 = OpLoad %int %i_6
-        %547 = OpIAdd %int %546 %int_1
-               OpStore %i_6 %547
-               OpBranch %162
-        %163 = OpLabel
-               OpBranch %155
-        %155 = OpLabel
-        %548 = OpLoad %int %i_5
-        %549 = OpIAdd %int %548 %int_1
-               OpStore %i_5 %549
-               OpBranch %153
-        %154 = OpLabel
-               OpBranch %146
-        %146 = OpLabel
-        %550 = OpLoad %int %i_4
-        %551 = OpIAdd %int %550 %int_1
-               OpStore %i_4 %551
-               OpBranch %144
-        %145 = OpLabel
-               OpBranch %137
-        %137 = OpLabel
-        %552 = OpLoad %int %i_3
-        %553 = OpIAdd %int %552 %int_1
-               OpStore %i_3 %553
-               OpBranch %135
-        %136 = OpLabel
-               OpBranch %128
-        %128 = OpLabel
-        %554 = OpLoad %int %i_2
-        %555 = OpIAdd %int %554 %int_1
-               OpStore %i_2 %555
-               OpBranch %126
-        %127 = OpLabel
-               OpBranch %119
-        %119 = OpLabel
-        %556 = OpLoad %int %i_1
-        %557 = OpIAdd %int %556 %int_1
-               OpStore %i_1 %557
-               OpBranch %117
-        %118 = OpLabel
-               OpBranch %108
-        %108 = OpLabel
-        %558 = OpLoad %int %i
-        %559 = OpIAdd %int %558 %int_1
-               OpStore %i %559
-               OpBranch %106
-        %107 = OpLabel
-               OpStore %sum %float_0
-               OpStore %r %int_0
-               OpBranch %560
-        %560 = OpLabel
-               OpLoopMerge %561 %562 None
-               OpBranch %563
-        %563 = OpLabel
-        %564 = OpLoad %int %x_GLF_global_loop_count
-        %566 = OpSLessThan %bool %564 %int_100
-               OpSelectionMerge %567 None
-               OpBranchConditional %566 %568 %569
-        %568 = OpLabel
-               OpBranch %567
-        %569 = OpLabel
-               OpBranch %561
-        %567 = OpLabel
-        %570 = OpLoad %int %x_GLF_global_loop_count
-        %571 = OpIAdd %int %570 %int_1
-               OpStore %x_GLF_global_loop_count %571
-        %572 = OpLoad %int %r
-        %573 = OpAccessChain %_ptr_Function_float %m23 %int_0 %572
-        %574 = OpLoad %float %573
-        %575 = OpLoad %float %sum
-        %576 = OpFAdd %float %575 %574
-               OpStore %sum %576
-        %577 = OpLoad %int %r
-        %578 = OpAccessChain %_ptr_Function_float %m24 %int_0 %577
-        %579 = OpLoad %float %578
-        %580 = OpLoad %float %sum
-        %581 = OpFAdd %float %580 %579
-               OpStore %sum %581
-        %582 = OpLoad %int %r
-        %583 = OpAccessChain %_ptr_Function_float %m32 %int_0 %582
-        %584 = OpLoad %float %583
-        %585 = OpLoad %float %sum
-        %586 = OpFAdd %float %585 %584
-               OpStore %sum %586
-        %587 = OpLoad %int %r
-        %588 = OpAccessChain %_ptr_Function_float %m33 %int_0 %587
-        %589 = OpLoad %float %588
-        %590 = OpLoad %float %sum
-        %591 = OpFAdd %float %590 %589
-               OpStore %sum %591
-        %592 = OpLoad %int %r
-        %593 = OpAccessChain %_ptr_Function_float %m34 %int_0 %592
-        %594 = OpLoad %float %593
-        %595 = OpLoad %float %sum
-        %596 = OpFAdd %float %595 %594
-               OpStore %sum %596
-        %597 = OpLoad %int %r
-        %598 = OpAccessChain %_ptr_Function_float %m42 %int_0 %597
-        %599 = OpLoad %float %598
-        %600 = OpLoad %float %sum
-        %601 = OpFAdd %float %600 %599
-               OpStore %sum %601
-        %602 = OpLoad %int %r
-        %603 = OpAccessChain %_ptr_Function_float %m43 %int_0 %602
-        %604 = OpLoad %float %603
-        %605 = OpLoad %float %sum
-        %606 = OpFAdd %float %605 %604
-               OpStore %sum %606
-        %607 = OpLoad %int %r
-        %608 = OpAccessChain %_ptr_Function_float %m44 %int_0 %607
-        %609 = OpLoad %float %608
-        %610 = OpLoad %float %sum
-        %611 = OpFAdd %float %610 %609
-               OpStore %sum %611
-               OpBranch %562
-        %562 = OpLabel
-        %612 = OpLoad %int %r
-        %613 = OpIAdd %int %612 %int_1
-               OpStore %r %613
-               OpBranch %560
-        %561 = OpLabel
-        %614 = OpLoad %float %sum
-        %616 = OpFOrdEqual %bool %614 %float_8
-               OpSelectionMerge %617 None
-               OpBranchConditional %616 %618 %619
-        %618 = OpLabel
-               OpStore %x_GLF_color %620
-               OpBranch %617
-        %619 = OpLabel
-               OpStore %x_GLF_color %97
-               OpBranch %617
-        %617 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %621
-        %624 = OpLabel
-        %625 = OpFunctionCall %void %main_1
-        %626 = OpLoad %v4float %x_GLF_color
-        %627 = OpCompositeConstruct %main_out %626
-               OpReturnValue %627
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %629 = OpLabel
-        %630 = OpFunctionCall %main_out %main_inner
-        %631 = OpCompositeExtract %v4float %630 0
-               OpStore %x_GLF_color_1_1 %631
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6dbe667..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-multiple-one-iteration-loops-global-counter-write-matrices/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,659 +0,0 @@
-var<private> x_GLF_global_loop_count : i32;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m23 : mat2x3<f32>;
-  var m24 : mat2x4<f32>;
-  var m32 : mat3x2<f32>;
-  var m33 : mat3x3<f32>;
-  var m34 : mat3x4<f32>;
-  var m42 : mat4x2<f32>;
-  var m43 : mat4x3<f32>;
-  var m44 : mat4x4<f32>;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var i_3 : i32;
-  var i_4 : i32;
-  var i_5 : i32;
-  var i_6 : i32;
-  var i_7 : i32;
-  var i_8 : i32;
-  var i_9 : i32;
-  var i_10 : i32;
-  var i_11 : i32;
-  var i_12 : i32;
-  var i_13 : i32;
-  var i_14 : i32;
-  var i_15 : i32;
-  var i_16 : i32;
-  var i_17 : i32;
-  var i_18 : i32;
-  var i_19 : i32;
-  var i_20 : i32;
-  var i_21 : i32;
-  var i_22 : i32;
-  var i_23 : i32;
-  var i_24 : i32;
-  var i_25 : i32;
-  var i_26 : i32;
-  var i_27 : i32;
-  var i_28 : i32;
-  var i_29 : i32;
-  var i_30 : i32;
-  var i_31 : i32;
-  var i_32 : i32;
-  var i_33 : i32;
-  var i_34 : i32;
-  var i_35 : i32;
-  var i_36 : i32;
-  var i_37 : i32;
-  var sum : f32;
-  var r : i32;
-  x_GLF_global_loop_count = 0;
-  m23 = mat2x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0));
-  m24 = mat2x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  m32 = mat3x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  m33 = mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0));
-  m34 = mat3x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  m42 = mat4x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  m43 = mat4x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0));
-  m44 = mat4x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  i = 0;
-  loop {
-    let x_105 : i32 = i;
-    if ((x_105 < 1)) {
-    } else {
-      break;
-    }
-    i_1 = 0;
-    loop {
-      let x_112 : i32 = i_1;
-      if ((x_112 < 1)) {
-      } else {
-        break;
-      }
-      i_2 = 0;
-      loop {
-        let x_119 : i32 = i_2;
-        if ((x_119 < 1)) {
-        } else {
-          break;
-        }
-        i_3 = 0;
-        loop {
-          let x_126 : i32 = i_3;
-          if ((x_126 < 1)) {
-          } else {
-            break;
-          }
-          i_4 = 0;
-          loop {
-            let x_133 : i32 = i_4;
-            if ((x_133 < 1)) {
-            } else {
-              break;
-            }
-            i_5 = 0;
-            loop {
-              let x_140 : i32 = i_5;
-              if ((x_140 < 1)) {
-              } else {
-                break;
-              }
-              i_6 = 0;
-              loop {
-                let x_147 : i32 = i_6;
-                if ((x_147 < 1)) {
-                } else {
-                  break;
-                }
-                i_7 = 0;
-                loop {
-                  let x_154 : i32 = i_7;
-                  if ((x_154 < 1)) {
-                  } else {
-                    break;
-                  }
-                  i_8 = 0;
-                  loop {
-                    let x_161 : i32 = i_8;
-                    if ((x_161 < 1)) {
-                    } else {
-                      break;
-                    }
-                    i_9 = 0;
-                    loop {
-                      let x_168 : i32 = i_9;
-                      if ((x_168 < 1)) {
-                      } else {
-                        break;
-                      }
-                      i_10 = 0;
-                      loop {
-                        let x_175 : i32 = i_10;
-                        if ((x_175 < 1)) {
-                        } else {
-                          break;
-                        }
-                        i_11 = 0;
-                        loop {
-                          let x_182 : i32 = i_11;
-                          if ((x_182 < 1)) {
-                          } else {
-                            break;
-                          }
-                          i_12 = 0;
-                          loop {
-                            let x_189 : i32 = i_12;
-                            if ((x_189 < 1)) {
-                            } else {
-                              break;
-                            }
-                            i_13 = 0;
-                            loop {
-                              let x_196 : i32 = i_13;
-                              if ((x_196 < 1)) {
-                              } else {
-                                break;
-                              }
-                              i_14 = 0;
-                              loop {
-                                let x_203 : i32 = i_14;
-                                if ((x_203 < 1)) {
-                                } else {
-                                  break;
-                                }
-                                i_15 = 0;
-                                loop {
-                                  let x_210 : i32 = i_15;
-                                  if ((x_210 < 1)) {
-                                  } else {
-                                    break;
-                                  }
-                                  i_16 = 0;
-                                  loop {
-                                    let x_217 : i32 = i_16;
-                                    if ((x_217 < 1)) {
-                                    } else {
-                                      break;
-                                    }
-                                    i_17 = 0;
-                                    loop {
-                                      let x_224 : i32 = i_17;
-                                      if ((x_224 < 1)) {
-                                      } else {
-                                        break;
-                                      }
-                                      i_18 = 0;
-                                      loop {
-                                        let x_231 : i32 = i_18;
-                                        if ((x_231 < 1)) {
-                                        } else {
-                                          break;
-                                        }
-                                        i_19 = 0;
-                                        loop {
-                                          let x_238 : i32 = i_19;
-                                          if ((x_238 < 1)) {
-                                          } else {
-                                            break;
-                                          }
-                                          i_20 = 0;
-                                          loop {
-                                            let x_245 : i32 = i_20;
-                                            if ((x_245 < 1)) {
-                                            } else {
-                                              break;
-                                            }
-                                            i_21 = 0;
-                                            loop {
-                                              let x_252 : i32 = i_21;
-                                              if ((x_252 < 1)) {
-                                              } else {
-                                                break;
-                                              }
-                                              i_22 = 0;
-                                              loop {
-                                                let x_259 : i32 = i_22;
-                                                if ((x_259 < 1)) {
-                                                } else {
-                                                  break;
-                                                }
-                                                i_23 = 0;
-                                                loop {
-                                                  let x_266 : i32 = i_23;
-                                                  if ((x_266 < 1)) {
-                                                  } else {
-                                                    break;
-                                                  }
-                                                  i_24 = 0;
-                                                  loop {
-                                                    let x_273 : i32 = i_24;
-                                                    if ((x_273 < 1)) {
-                                                    } else {
-                                                      break;
-                                                    }
-                                                    i_25 = 0;
-                                                    loop {
-                                                      let x_280 : i32 = i_25;
-                                                      if ((x_280 < 1)) {
-                                                      } else {
-                                                        break;
-                                                      }
-                                                      i_26 = 0;
-                                                      loop {
-                                                        let x_287 : i32 = i_26;
-                                                        if ((x_287 < 1)) {
-                                                        } else {
-                                                          break;
-                                                        }
-                                                        i_27 = 0;
-                                                        loop {
-                                                          let x_294 : i32 = i_27;
-                                                          if ((x_294 < 1)) {
-                                                          } else {
-                                                            break;
-                                                          }
-                                                          i_28 = 0;
-                                                          loop {
-                                                            let x_301 : i32 = i_28;
-                                                            if ((x_301 < 1)) {
-                                                            } else {
-                                                              break;
-                                                            }
-                                                            i_29 = 0;
-                                                            loop {
-                                                              let x_308 : i32 = i_29;
-                                                              if ((x_308 < 1)) {
-                                                              } else {
-                                                                break;
-                                                              }
-                                                              i_30 = 0;
-                                                              loop {
-                                                                let x_315 : i32 = i_30;
-                                                                if ((x_315 < 1)) {
-                                                                } else {
-                                                                  break;
-                                                                }
-                                                                i_31 = 0;
-                                                                loop {
-                                                                  let x_322 : i32 = i_31;
-                                                                  if ((x_322 < 1)) {
-                                                                  } else {
-                                                                    break;
-                                                                  }
-                                                                  i_32 = 0;
-                                                                  loop {
-                                                                    let x_329 : i32 = i_32;
-                                                                    if ((x_329 < 1)) {
-                                                                    } else {
-                                                                      break;
-                                                                    }
-                                                                    i_33 = 0;
-                                                                    loop {
-                                                                      let x_336 : i32 = i_33;
-                                                                      if ((x_336 < 1)) {
-                                                                      } else {
-                                                                        break;
-                                                                      }
-                                                                      i_34 = 0;
-                                                                      loop {
-                                                                        let x_343 : i32 = i_34;
-                                                                        if ((x_343 < 1)) {
-                                                                        } else {
-                                                                          break;
-                                                                        }
-                                                                        i_35 = 0;
-                                                                        loop {
-                                                                          let x_350 : i32 = i_35;
-                                                                          if ((x_350 < 1)) {
-                                                                          } else {
-                                                                            break;
-                                                                          }
-                                                                          i_36 = 0;
-                                                                          loop {
-                                                                            let x_357 : i32 = i_36;
-                                                                            if ((x_357 < 1)) {
-                                                                            } else {
-                                                                              break;
-                                                                            }
-                                                                            i_37 = 0;
-                                                                            loop {
-                                                                              let x_364 : i32 = i_37;
-                                                                              if ((x_364 < 1)) {
-                                                                              } else {
-                                                                                break;
-                                                                              }
-                                                                              loop {
-                                                                                let x_371 : i32 = x_GLF_global_loop_count;
-                                                                                x_GLF_global_loop_count = (x_371 + 1);
-
-                                                                                continuing {
-                                                                                  let x_373 : i32 = x_GLF_global_loop_count;
-                                                                                  if ((x_373 < 98)) {
-                                                                                  } else {
-                                                                                    break;
-                                                                                  }
-                                                                                }
-                                                                              }
-                                                                              let x_375 : i32 = i_37;
-                                                                              let x_376 : i32 = i_37;
-                                                                              m23[x_375][x_376] = 1.0;
-                                                                              let x_378 : i32 = i_37;
-                                                                              let x_379 : i32 = i_37;
-                                                                              m24[x_378][x_379] = 1.0;
-                                                                              let x_381 : i32 = i_37;
-                                                                              let x_382 : i32 = i_37;
-                                                                              m32[x_381][x_382] = 1.0;
-                                                                              let x_384 : i32 = i_37;
-                                                                              let x_385 : i32 = i_37;
-                                                                              m33[x_384][x_385] = 1.0;
-                                                                              let x_387 : i32 = i_37;
-                                                                              let x_388 : i32 = i_37;
-                                                                              m34[x_387][x_388] = 1.0;
-                                                                              let x_390 : i32 = i_37;
-                                                                              let x_391 : i32 = i_37;
-                                                                              m42[x_390][x_391] = 1.0;
-                                                                              let x_393 : i32 = i_37;
-                                                                              let x_394 : i32 = i_37;
-                                                                              m43[x_393][x_394] = 1.0;
-                                                                              let x_396 : i32 = i_37;
-                                                                              let x_397 : i32 = i_37;
-                                                                              m44[x_396][x_397] = 1.0;
-
-                                                                              continuing {
-                                                                                let x_399 : i32 = i_37;
-                                                                                i_37 = (x_399 + 1);
-                                                                              }
-                                                                            }
-
-                                                                            continuing {
-                                                                              let x_401 : i32 = i_36;
-                                                                              i_36 = (x_401 + 1);
-                                                                            }
-                                                                          }
-
-                                                                          continuing {
-                                                                            let x_403 : i32 = i_35;
-                                                                            i_35 = (x_403 + 1);
-                                                                          }
-                                                                        }
-
-                                                                        continuing {
-                                                                          let x_405 : i32 = i_34;
-                                                                          i_34 = (x_405 + 1);
-                                                                        }
-                                                                      }
-
-                                                                      continuing {
-                                                                        let x_407 : i32 = i_33;
-                                                                        i_33 = (x_407 + 1);
-                                                                      }
-                                                                    }
-
-                                                                    continuing {
-                                                                      let x_409 : i32 = i_32;
-                                                                      i_32 = (x_409 + 1);
-                                                                    }
-                                                                  }
-
-                                                                  continuing {
-                                                                    let x_411 : i32 = i_31;
-                                                                    i_31 = (x_411 + 1);
-                                                                  }
-                                                                }
-
-                                                                continuing {
-                                                                  let x_413 : i32 = i_30;
-                                                                  i_30 = (x_413 + 1);
-                                                                }
-                                                              }
-
-                                                              continuing {
-                                                                let x_415 : i32 = i_29;
-                                                                i_29 = (x_415 + 1);
-                                                              }
-                                                            }
-
-                                                            continuing {
-                                                              let x_417 : i32 = i_28;
-                                                              i_28 = (x_417 + 1);
-                                                            }
-                                                          }
-
-                                                          continuing {
-                                                            let x_419 : i32 = i_27;
-                                                            i_27 = (x_419 + 1);
-                                                          }
-                                                        }
-
-                                                        continuing {
-                                                          let x_421 : i32 = i_26;
-                                                          i_26 = (x_421 + 1);
-                                                        }
-                                                      }
-
-                                                      continuing {
-                                                        let x_423 : i32 = i_25;
-                                                        i_25 = (x_423 + 1);
-                                                      }
-                                                    }
-
-                                                    continuing {
-                                                      let x_425 : i32 = i_24;
-                                                      i_24 = (x_425 + 1);
-                                                    }
-                                                  }
-
-                                                  continuing {
-                                                    let x_427 : i32 = i_23;
-                                                    i_23 = (x_427 + 1);
-                                                  }
-                                                }
-
-                                                continuing {
-                                                  let x_429 : i32 = i_22;
-                                                  i_22 = (x_429 + 1);
-                                                }
-                                              }
-
-                                              continuing {
-                                                let x_431 : i32 = i_21;
-                                                i_21 = (x_431 + 1);
-                                              }
-                                            }
-
-                                            continuing {
-                                              let x_433 : i32 = i_20;
-                                              i_20 = (x_433 + 1);
-                                            }
-                                          }
-
-                                          continuing {
-                                            let x_435 : i32 = i_19;
-                                            i_19 = (x_435 + 1);
-                                          }
-                                        }
-
-                                        continuing {
-                                          let x_437 : i32 = i_18;
-                                          i_18 = (x_437 + 1);
-                                        }
-                                      }
-
-                                      continuing {
-                                        let x_439 : i32 = i_17;
-                                        i_17 = (x_439 + 1);
-                                      }
-                                    }
-
-                                    continuing {
-                                      let x_441 : i32 = i_16;
-                                      i_16 = (x_441 + 1);
-                                    }
-                                  }
-
-                                  continuing {
-                                    let x_443 : i32 = i_15;
-                                    i_15 = (x_443 + 1);
-                                  }
-                                }
-
-                                continuing {
-                                  let x_445 : i32 = i_14;
-                                  i_14 = (x_445 + 1);
-                                }
-                              }
-
-                              continuing {
-                                let x_447 : i32 = i_13;
-                                i_13 = (x_447 + 1);
-                              }
-                            }
-
-                            continuing {
-                              let x_449 : i32 = i_12;
-                              i_12 = (x_449 + 1);
-                            }
-                          }
-
-                          continuing {
-                            let x_451 : i32 = i_11;
-                            i_11 = (x_451 + 1);
-                          }
-                        }
-
-                        continuing {
-                          let x_453 : i32 = i_10;
-                          i_10 = (x_453 + 1);
-                        }
-                      }
-
-                      continuing {
-                        let x_455 : i32 = i_9;
-                        i_9 = (x_455 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_457 : i32 = i_8;
-                      i_8 = (x_457 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_459 : i32 = i_7;
-                    i_7 = (x_459 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_461 : i32 = i_6;
-                  i_6 = (x_461 + 1);
-                }
-              }
-
-              continuing {
-                let x_463 : i32 = i_5;
-                i_5 = (x_463 + 1);
-              }
-            }
-
-            continuing {
-              let x_465 : i32 = i_4;
-              i_4 = (x_465 + 1);
-            }
-          }
-
-          continuing {
-            let x_467 : i32 = i_3;
-            i_3 = (x_467 + 1);
-          }
-        }
-
-        continuing {
-          let x_469 : i32 = i_2;
-          i_2 = (x_469 + 1);
-        }
-      }
-
-      continuing {
-        let x_471 : i32 = i_1;
-        i_1 = (x_471 + 1);
-      }
-    }
-
-    continuing {
-      let x_473 : i32 = i;
-      i = (x_473 + 1);
-    }
-  }
-  sum = 0.0;
-  r = 0;
-  loop {
-    let x_479 : i32 = x_GLF_global_loop_count;
-    if ((x_479 < 100)) {
-    } else {
-      break;
-    }
-    let x_482 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_482 + 1);
-    let x_484 : i32 = r;
-    let x_486 : f32 = m23[0][x_484];
-    let x_487 : f32 = sum;
-    sum = (x_487 + x_486);
-    let x_489 : i32 = r;
-    let x_491 : f32 = m24[0][x_489];
-    let x_492 : f32 = sum;
-    sum = (x_492 + x_491);
-    let x_494 : i32 = r;
-    let x_496 : f32 = m32[0][x_494];
-    let x_497 : f32 = sum;
-    sum = (x_497 + x_496);
-    let x_499 : i32 = r;
-    let x_501 : f32 = m33[0][x_499];
-    let x_502 : f32 = sum;
-    sum = (x_502 + x_501);
-    let x_504 : i32 = r;
-    let x_506 : f32 = m34[0][x_504];
-    let x_507 : f32 = sum;
-    sum = (x_507 + x_506);
-    let x_509 : i32 = r;
-    let x_511 : f32 = m42[0][x_509];
-    let x_512 : f32 = sum;
-    sum = (x_512 + x_511);
-    let x_514 : i32 = r;
-    let x_516 : f32 = m43[0][x_514];
-    let x_517 : f32 = sum;
-    sum = (x_517 + x_516);
-    let x_519 : i32 = r;
-    let x_521 : f32 = m44[0][x_519];
-    let x_522 : f32 = sum;
-    sum = (x_522 + x_521);
-
-    continuing {
-      let x_524 : i32 = r;
-      r = (x_524 + 1);
-    }
-  }
-  let x_526 : f32 = sum;
-  if ((x_526 == 8.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2f02d27..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,139 +0,0 @@
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-static float4x2 m = float4x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b2, space0) {
-  uint4 x_10[1];
-};
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_16 : register(b1, space0) {
-  uint4 x_16[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func0_i1_(inout int x) {
-  int i = 0;
-  bool x_137 = false;
-  bool x_138 = false;
-  bool x_138_phi = false;
-  bool x_139_phi = false;
-  const int x_124 = x;
-  const bool x_125 = (x_124 < 1);
-  x_139_phi = x_125;
-  if (!(x_125)) {
-    const int x_129 = x;
-    const bool x_130 = (x_129 > 1);
-    x_138_phi = x_130;
-    if (x_130) {
-      const float x_134 = asfloat(x_10[0].x);
-      const uint scalar_offset = ((16u * uint(0))) / 4;
-      const float x_136 = asfloat(x_12[scalar_offset / 4][scalar_offset % 4]);
-      x_137 = (x_134 > x_136);
-      x_138_phi = x_137;
-    }
-    x_138 = x_138_phi;
-    x_139_phi = x_138;
-  }
-  if (x_139_phi) {
-    return;
-  }
-  const float x_143 = asfloat(x_10[0].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_145 = asfloat(x_12[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_143 == x_145)) {
-    i = 0;
-    while (true) {
-      if ((i < 2)) {
-      } else {
-        break;
-      }
-      {
-        const int x_154 = x;
-        const int x_155 = clamp(x_154, 0, 3);
-        const int x_156 = i;
-        const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-        const float x_158 = asfloat(x_12[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-        const float x_160 = m[x_155][x_156];
-        set_float2(m[x_155], x_156, (x_160 + x_158));
-        i = (i + 1);
-      }
-    }
-  }
-  return;
-}
-
-void func1_() {
-  int param = 0;
-  const float x_167 = gl_FragCoord.y;
-  if ((x_167 < 0.0f)) {
-    return;
-  }
-  param = 1;
-  func0_i1_(param);
-  return;
-}
-
-void main_1() {
-  m = float4x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  func1_();
-  func1_();
-  const float4x2 x_54 = m;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_56 = asint(x_16[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_59 = asint(x_16[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const int x_62 = asint(x_16[1].x);
-  const int x_65 = asint(x_16[1].x);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const int x_68 = asint(x_16[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const int x_71 = asint(x_16[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const int x_74 = asint(x_16[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-  const int x_77 = asint(x_16[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-  const float4x2 x_83 = float4x2(float2(float(x_56), float(x_59)), float2(float(x_62), float(x_65)), float2(float(x_68), float(x_71)), float2(float(x_74), float(x_77)));
-  if ((((all((x_54[0u] == x_83[0u])) & all((x_54[1u] == x_83[1u]))) & all((x_54[2u] == x_83[2u]))) & all((x_54[3u] == x_83[3u])))) {
-    const int x_107 = asint(x_16[3].x);
-    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-    const int x_110 = asint(x_16[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-    const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-    const int x_113 = asint(x_16[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-    const int x_116 = asint(x_16[3].x);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    const uint scalar_offset_11 = ((16u * uint(0))) / 4;
-    const int x_120 = asint(x_16[scalar_offset_11 / 4][scalar_offset_11 % 4]);
-    const float x_121 = float(x_120);
-    x_GLF_color = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.msl
deleted file mode 100644
index 22e1683..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,140 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf2 {
-  /* 0x0000 */ float one;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func0_i1_(constant buf2& x_10, constant buf0& x_12, thread int* const x, thread float4x2* const tint_symbol_3) {
-  int i = 0;
-  bool x_137 = false;
-  bool x_138 = false;
-  bool x_138_phi = false;
-  bool x_139_phi = false;
-  int const x_124 = *(x);
-  bool const x_125 = (x_124 < 1);
-  x_139_phi = x_125;
-  if (!(x_125)) {
-    int const x_129 = *(x);
-    bool const x_130 = (x_129 > 1);
-    x_138_phi = x_130;
-    if (x_130) {
-      float const x_134 = x_10.one;
-      float const x_136 = x_12.x_GLF_uniform_float_values.arr[0].el;
-      x_137 = (x_134 > x_136);
-      x_138_phi = x_137;
-    }
-    x_138 = x_138_phi;
-    x_139_phi = x_138;
-  }
-  bool const x_139 = x_139_phi;
-  if (x_139) {
-    return;
-  }
-  float const x_143 = x_10.one;
-  float const x_145 = x_12.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_143 == x_145)) {
-    i = 0;
-    while (true) {
-      int const x_150 = i;
-      if ((x_150 < 2)) {
-      } else {
-        break;
-      }
-      {
-        int const x_154 = *(x);
-        int const x_155 = clamp(x_154, 0, 3);
-        int const x_156 = i;
-        float const x_158 = x_12.x_GLF_uniform_float_values.arr[0].el;
-        float const x_160 = (*(tint_symbol_3))[x_155][x_156];
-        (*(tint_symbol_3))[x_155][x_156] = (x_160 + x_158);
-        int const x_163 = i;
-        i = as_type<int>((as_type<uint>(x_163) + as_type<uint>(1)));
-      }
-    }
-  }
-  return;
-}
-
-void func1_(constant buf2& x_10, constant buf0& x_12, thread float4* const tint_symbol_4, thread float4x2* const tint_symbol_5) {
-  int param = 0;
-  float const x_167 = (*(tint_symbol_4)).y;
-  if ((x_167 < 0.0f)) {
-    return;
-  }
-  param = 1;
-  func0_i1_(x_10, x_12, &(param), tint_symbol_5);
-  return;
-}
-
-void main_1(constant buf2& x_10, constant buf0& x_12, constant buf1& x_16, thread float4x2* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_6) = float4x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  func1_(x_10, x_12, tint_symbol_7, tint_symbol_6);
-  func1_(x_10, x_12, tint_symbol_7, tint_symbol_6);
-  float4x2 const x_54 = *(tint_symbol_6);
-  int const x_56 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_59 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_62 = x_16.x_GLF_uniform_int_values.arr[1].el;
-  int const x_65 = x_16.x_GLF_uniform_int_values.arr[1].el;
-  int const x_68 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_71 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_74 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_77 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  float4x2 const x_83 = float4x2(float2(float(x_56), float(x_59)), float2(float(x_62), float(x_65)), float2(float(x_68), float(x_71)), float2(float(x_74), float(x_77)));
-  if ((((all((x_54[0u] == x_83[0u])) & all((x_54[1u] == x_83[1u]))) & all((x_54[2u] == x_83[2u]))) & all((x_54[3u] == x_83[3u])))) {
-    int const x_107 = x_16.x_GLF_uniform_int_values.arr[3].el;
-    int const x_110 = x_16.x_GLF_uniform_int_values.arr[0].el;
-    int const x_113 = x_16.x_GLF_uniform_int_values.arr[0].el;
-    int const x_116 = x_16.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_8) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    int const x_120 = x_16.x_GLF_uniform_int_values.arr[0].el;
-    float const x_121 = float(x_120);
-    *(tint_symbol_8) = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf2& x_10, constant buf0& x_12, constant buf1& x_16, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4x2* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_10, x_12, x_16, tint_symbol_10, tint_symbol_9, tint_symbol_11);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf2& x_10 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]], constant buf1& x_16 [[buffer(2)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4x2 tint_symbol_13 = float4x2(0.0f);
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, x_12, x_16, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c4dc3e3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,314 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 208
-; Schema: 0
-               OpCapability Shader
-         %92 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %m "m"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "one"
-               OpName %x_10 "x_10"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_12 "x_12"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_16 "x_16"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func0_i1_ "func0_i1_"
-               OpName %x "x"
-               OpName %i "i"
-               OpName %x_137 "x_137"
-               OpName %x_138 "x_138"
-               OpName %x_138_phi "x_138_phi"
-               OpName %x_139_phi "x_139_phi"
-               OpName %func1_ "func1_"
-               OpName %param "param"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_16 NonWritable
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-%mat4v2float = OpTypeMatrix %v2float 4
-%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
-         %12 = OpConstantNull %mat4v2float
-          %m = OpVariable %_ptr_Private_mat4v2float Private %12
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_10 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_16 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpTypeFunction %void %_ptr_Function_int
-         %38 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-%_ptr_Private_float = OpTypePointer Private %float
-        %104 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-        %118 = OpConstantComposite %v2float %float_0 %float_0
-        %119 = OpConstantComposite %mat4v2float %118 %118 %118 %118
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %v2bool = OpTypeVector %bool 2
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-   %main_out = OpTypeStruct %v4float
-        %195 = OpTypeFunction %main_out %v4float
-  %func0_i1_ = OpFunction %void None %31
-          %x = OpFunctionParameter %_ptr_Function_int
-         %36 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %38
-      %x_137 = OpVariable %_ptr_Function_bool Function %42
-      %x_138 = OpVariable %_ptr_Function_bool Function %42
-  %x_138_phi = OpVariable %_ptr_Function_bool Function %42
-  %x_139_phi = OpVariable %_ptr_Function_bool Function %42
-         %47 = OpLoad %int %x
-         %49 = OpSLessThan %bool %47 %int_1
-               OpStore %x_139_phi %49
-         %50 = OpLogicalNot %bool %49
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %54 = OpLoad %int %x
-         %55 = OpSGreaterThan %bool %54 %int_1
-               OpStore %x_138_phi %55
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0
-         %61 = OpLoad %float %60
-         %63 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-         %64 = OpLoad %float %63
-         %65 = OpFOrdGreaterThan %bool %61 %64
-               OpStore %x_137 %65
-         %66 = OpLoad %bool %x_137
-               OpStore %x_138_phi %66
-               OpBranch %56
-         %56 = OpLabel
-         %67 = OpLoad %bool %x_138_phi
-               OpStore %x_138 %67
-         %68 = OpLoad %bool %x_138
-               OpStore %x_139_phi %68
-               OpBranch %51
-         %51 = OpLabel
-         %69 = OpLoad %bool %x_139_phi
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-               OpReturn
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0
-         %73 = OpLoad %float %72
-         %74 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-         %75 = OpLoad %float %74
-         %76 = OpFOrdEqual %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %77
-         %78 = OpLabel
-               OpStore %i %int_0
-               OpBranch %79
-         %79 = OpLabel
-               OpLoopMerge %80 %81 None
-               OpBranch %82
-         %82 = OpLabel
-         %83 = OpLoad %int %i
-         %85 = OpSLessThan %bool %83 %int_2
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-               OpBranch %86
-         %88 = OpLabel
-               OpBranch %80
-         %86 = OpLabel
-               OpBranch %81
-         %81 = OpLabel
-         %90 = OpLoad %int %x
-         %91 = OpExtInst %int %92 SClamp %90 %int_0 %int_3
-         %94 = OpLoad %int %i
-         %95 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-         %96 = OpLoad %float %95
-         %98 = OpAccessChain %_ptr_Private_float %m %91 %94
-         %99 = OpLoad %float %98
-        %100 = OpAccessChain %_ptr_Private_float %m %91 %94
-        %101 = OpFAdd %float %99 %96
-               OpStore %100 %101
-        %102 = OpLoad %int %i
-        %103 = OpIAdd %int %102 %int_1
-               OpStore %i %103
-               OpBranch %79
-         %80 = OpLabel
-               OpBranch %77
-         %77 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %func1_ = OpFunction %void None %104
-        %106 = OpLabel
-      %param = OpVariable %_ptr_Function_int Function %38
-        %108 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %109 = OpLoad %float %108
-        %111 = OpFOrdLessThan %bool %109 %float_0
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %112
-        %113 = OpLabel
-               OpReturn
-        %112 = OpLabel
-               OpStore %param %int_1
-        %114 = OpFunctionCall %void %func0_i1_ %param
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %104
-        %117 = OpLabel
-               OpStore %m %119
-        %120 = OpFunctionCall %void %func1_
-        %121 = OpFunctionCall %void %func1_
-        %122 = OpLoad %mat4v2float %m
-        %124 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %125 = OpLoad %int %124
-        %126 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %127 = OpLoad %int %126
-        %128 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_1
-        %129 = OpLoad %int %128
-        %130 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_1
-        %131 = OpLoad %int %130
-        %132 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %133 = OpLoad %int %132
-        %134 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %135 = OpLoad %int %134
-        %136 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %139 = OpLoad %int %138
-        %140 = OpConvertSToF %float %125
-        %141 = OpConvertSToF %float %127
-        %142 = OpCompositeConstruct %v2float %140 %141
-        %143 = OpConvertSToF %float %129
-        %144 = OpConvertSToF %float %131
-        %145 = OpCompositeConstruct %v2float %143 %144
-        %146 = OpConvertSToF %float %133
-        %147 = OpConvertSToF %float %135
-        %148 = OpCompositeConstruct %v2float %146 %147
-        %149 = OpConvertSToF %float %137
-        %150 = OpConvertSToF %float %139
-        %151 = OpCompositeConstruct %v2float %149 %150
-        %152 = OpCompositeConstruct %mat4v2float %142 %145 %148 %151
-        %154 = OpCompositeExtract %v2float %122 0
-        %155 = OpCompositeExtract %v2float %152 0
-        %156 = OpFOrdEqual %v2bool %154 %155
-        %153 = OpAll %bool %156
-        %159 = OpCompositeExtract %v2float %122 1
-        %160 = OpCompositeExtract %v2float %152 1
-        %161 = OpFOrdEqual %v2bool %159 %160
-        %158 = OpAll %bool %161
-        %162 = OpLogicalAnd %bool %153 %158
-        %165 = OpCompositeExtract %v2float %122 2
-        %166 = OpCompositeExtract %v2float %152 2
-        %167 = OpFOrdEqual %v2bool %165 %166
-        %163 = OpAll %bool %167
-        %168 = OpLogicalAnd %bool %162 %163
-        %171 = OpCompositeExtract %v2float %122 3
-        %172 = OpCompositeExtract %v2float %152 3
-        %173 = OpFOrdEqual %v2bool %171 %172
-        %169 = OpAll %bool %173
-        %174 = OpLogicalAnd %bool %168 %169
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %177
-        %176 = OpLabel
-        %178 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_3
-        %179 = OpLoad %int %178
-        %180 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %181 = OpLoad %int %180
-        %182 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %183 = OpLoad %int %182
-        %184 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_3
-        %185 = OpLoad %int %184
-        %186 = OpConvertSToF %float %179
-        %187 = OpConvertSToF %float %181
-        %188 = OpConvertSToF %float %183
-        %189 = OpConvertSToF %float %185
-        %190 = OpCompositeConstruct %v4float %186 %187 %188 %189
-               OpStore %x_GLF_color %190
-               OpBranch %175
-        %177 = OpLabel
-        %191 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %192 = OpLoad %int %191
-        %193 = OpConvertSToF %float %192
-        %194 = OpCompositeConstruct %v4float %193 %193 %193 %193
-               OpStore %x_GLF_color %194
-               OpBranch %175
-        %175 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %195
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %199 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %200 = OpFunctionCall %void %main_1
-        %201 = OpLoad %v4float %x_GLF_color
-        %202 = OpCompositeConstruct %main_out %201
-               OpReturnValue %202
-               OpFunctionEnd
-       %main = OpFunction %void None %104
-        %204 = OpLabel
-        %206 = OpLoad %v4float %gl_FragCoord_param_1
-        %205 = OpFunctionCall %main_out %main_inner %206
-        %207 = OpCompositeExtract %v4float %205 0
-               OpStore %x_GLF_color_1_1 %207
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a847c9a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,133 +0,0 @@
-[[block]]
-struct buf2 {
-  one : f32;
-};
-
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> m : mat4x2<f32>;
-
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_16 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func0_i1_(x : ptr<function, i32>) {
-  var i : i32;
-  var x_137 : bool;
-  var x_138 : bool;
-  var x_138_phi : bool;
-  var x_139_phi : bool;
-  let x_124 : i32 = *(x);
-  let x_125 : bool = (x_124 < 1);
-  x_139_phi = x_125;
-  if (!(x_125)) {
-    let x_129 : i32 = *(x);
-    let x_130 : bool = (x_129 > 1);
-    x_138_phi = x_130;
-    if (x_130) {
-      let x_134 : f32 = x_10.one;
-      let x_136 : f32 = x_12.x_GLF_uniform_float_values[0];
-      x_137 = (x_134 > x_136);
-      x_138_phi = x_137;
-    }
-    x_138 = x_138_phi;
-    x_139_phi = x_138;
-  }
-  let x_139 : bool = x_139_phi;
-  if (x_139) {
-    return;
-  }
-  let x_143 : f32 = x_10.one;
-  let x_145 : f32 = x_12.x_GLF_uniform_float_values[0];
-  if ((x_143 == x_145)) {
-    i = 0;
-    loop {
-      let x_150 : i32 = i;
-      if ((x_150 < 2)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        let x_154 : i32 = *(x);
-        let x_155 : i32 = clamp(x_154, 0, 3);
-        let x_156 : i32 = i;
-        let x_158 : f32 = x_12.x_GLF_uniform_float_values[0];
-        let x_160 : f32 = m[x_155][x_156];
-        m[x_155][x_156] = (x_160 + x_158);
-        let x_163 : i32 = i;
-        i = (x_163 + 1);
-      }
-    }
-  }
-  return;
-}
-
-fn func1_() {
-  var param : i32;
-  let x_167 : f32 = gl_FragCoord.y;
-  if ((x_167 < 0.0)) {
-    return;
-  }
-  param = 1;
-  func0_i1_(&(param));
-  return;
-}
-
-fn main_1() {
-  m = mat4x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  func1_();
-  func1_();
-  let x_54 : mat4x2<f32> = m;
-  let x_56 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_59 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_62 : i32 = x_16.x_GLF_uniform_int_values[1];
-  let x_65 : i32 = x_16.x_GLF_uniform_int_values[1];
-  let x_68 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_71 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_74 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_77 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_83 : mat4x2<f32> = mat4x2<f32>(vec2<f32>(f32(x_56), f32(x_59)), vec2<f32>(f32(x_62), f32(x_65)), vec2<f32>(f32(x_68), f32(x_71)), vec2<f32>(f32(x_74), f32(x_77)));
-  if ((((all((x_54[0u] == x_83[0u])) & all((x_54[1u] == x_83[1u]))) & all((x_54[2u] == x_83[2u]))) & all((x_54[3u] == x_83[3u])))) {
-    let x_107 : i32 = x_16.x_GLF_uniform_int_values[3];
-    let x_110 : i32 = x_16.x_GLF_uniform_int_values[0];
-    let x_113 : i32 = x_16.x_GLF_uniform_int_values[0];
-    let x_116 : i32 = x_16.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  } else {
-    let x_120 : i32 = x_16.x_GLF_uniform_int_values[0];
-    let x_121 : f32 = f32(x_120);
-    x_GLF_color = vec4<f32>(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3818584..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,151 +0,0 @@
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-static float4x2 m = float4x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b2, space0) {
-  uint4 x_10[1];
-};
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_16 : register(b1, space0) {
-  uint4 x_16[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func0_i1_(inout int x) {
-  int i = 0;
-  bool x_137 = false;
-  bool x_138 = false;
-  bool x_138_phi = false;
-  bool x_139_phi = false;
-  const int x_124 = x;
-  const bool x_125 = (x_124 < 1);
-  x_139_phi = x_125;
-  if (!(x_125)) {
-    const int x_129 = x;
-    const bool x_130 = (x_129 > 1);
-    x_138_phi = x_130;
-    if (x_130) {
-      const float x_134 = asfloat(x_10[0].x);
-      const uint scalar_offset = ((16u * uint(0))) / 4;
-      const float x_136 = asfloat(x_12[scalar_offset / 4][scalar_offset % 4]);
-      x_137 = (x_134 > x_136);
-      x_138_phi = x_137;
-    }
-    x_138 = x_138_phi;
-    x_139_phi = x_138;
-  }
-  if (x_139_phi) {
-    return;
-  }
-  const float x_143 = asfloat(x_10[0].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_145 = asfloat(x_12[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_143 == x_145)) {
-    i = 0;
-    while (true) {
-      if ((i < 2)) {
-      } else {
-        break;
-      }
-      {
-        const int x_154 = x;
-        const int x_155 = clamp(x_154, 0, 3);
-        const int x_156 = i;
-        const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-        const float x_158 = asfloat(x_12[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-        const float x_160 = m[x_155][x_156];
-        set_float2(m[x_155], x_156, (x_160 + x_158));
-        i = (i + 1);
-      }
-    }
-  }
-  return;
-}
-
-void func1_() {
-  int param = 0;
-  const float x_167 = gl_FragCoord.y;
-  if ((x_167 < 0.0f)) {
-    return;
-  }
-  param = 1;
-  func0_i1_(param);
-  return;
-}
-
-void main_1() {
-  m = float4x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  func1_();
-  func1_();
-  const float4x2 x_54 = m;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_56 = asint(x_16[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_59 = asint(x_16[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const int x_62 = asint(x_16[1].x);
-  const int x_65 = asint(x_16[1].x);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const int x_68 = asint(x_16[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const int x_71 = asint(x_16[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-  const int x_74 = asint(x_16[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-  const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-  const int x_77 = asint(x_16[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-  const float4x2 x_83 = float4x2(float2(float(x_56), float(x_59)), float2(float(x_62), float(x_65)), float2(float(x_68), float(x_71)), float2(float(x_74), float(x_77)));
-  bool tint_tmp_2 = all((x_54[0u] == x_83[0u]));
-  if (tint_tmp_2) {
-    tint_tmp_2 = all((x_54[1u] == x_83[1u]));
-  }
-  bool tint_tmp_1 = (tint_tmp_2);
-  if (tint_tmp_1) {
-    tint_tmp_1 = all((x_54[2u] == x_83[2u]));
-  }
-  bool tint_tmp = (tint_tmp_1);
-  if (tint_tmp) {
-    tint_tmp = all((x_54[3u] == x_83[3u]));
-  }
-  if ((tint_tmp)) {
-    const int x_107 = asint(x_16[3].x);
-    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-    const int x_110 = asint(x_16[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-    const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-    const int x_113 = asint(x_16[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-    const int x_116 = asint(x_16[3].x);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    const uint scalar_offset_11 = ((16u * uint(0))) / 4;
-    const int x_120 = asint(x_16[scalar_offset_11 / 4][scalar_offset_11 % 4]);
-    const float x_121 = float(x_120);
-    x_GLF_color = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.msl
deleted file mode 100644
index cc1e66d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,140 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf2 {
-  /* 0x0000 */ float one;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func0_i1_(constant buf2& x_10, constant buf0& x_12, thread int* const x, thread float4x2* const tint_symbol_3) {
-  int i = 0;
-  bool x_137 = false;
-  bool x_138 = false;
-  bool x_138_phi = false;
-  bool x_139_phi = false;
-  int const x_124 = *(x);
-  bool const x_125 = (x_124 < 1);
-  x_139_phi = x_125;
-  if (!(x_125)) {
-    int const x_129 = *(x);
-    bool const x_130 = (x_129 > 1);
-    x_138_phi = x_130;
-    if (x_130) {
-      float const x_134 = x_10.one;
-      float const x_136 = x_12.x_GLF_uniform_float_values.arr[0].el;
-      x_137 = (x_134 > x_136);
-      x_138_phi = x_137;
-    }
-    x_138 = x_138_phi;
-    x_139_phi = x_138;
-  }
-  bool const x_139 = x_139_phi;
-  if (x_139) {
-    return;
-  }
-  float const x_143 = x_10.one;
-  float const x_145 = x_12.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_143 == x_145)) {
-    i = 0;
-    while (true) {
-      int const x_150 = i;
-      if ((x_150 < 2)) {
-      } else {
-        break;
-      }
-      {
-        int const x_154 = *(x);
-        int const x_155 = clamp(x_154, 0, 3);
-        int const x_156 = i;
-        float const x_158 = x_12.x_GLF_uniform_float_values.arr[0].el;
-        float const x_160 = (*(tint_symbol_3))[x_155][x_156];
-        (*(tint_symbol_3))[x_155][x_156] = (x_160 + x_158);
-        int const x_163 = i;
-        i = as_type<int>((as_type<uint>(x_163) + as_type<uint>(1)));
-      }
-    }
-  }
-  return;
-}
-
-void func1_(constant buf2& x_10, constant buf0& x_12, thread float4* const tint_symbol_4, thread float4x2* const tint_symbol_5) {
-  int param = 0;
-  float const x_167 = (*(tint_symbol_4)).y;
-  if ((x_167 < 0.0f)) {
-    return;
-  }
-  param = 1;
-  func0_i1_(x_10, x_12, &(param), tint_symbol_5);
-  return;
-}
-
-void main_1(constant buf2& x_10, constant buf0& x_12, constant buf1& x_16, thread float4x2* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_6) = float4x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  func1_(x_10, x_12, tint_symbol_7, tint_symbol_6);
-  func1_(x_10, x_12, tint_symbol_7, tint_symbol_6);
-  float4x2 const x_54 = *(tint_symbol_6);
-  int const x_56 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_59 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_62 = x_16.x_GLF_uniform_int_values.arr[1].el;
-  int const x_65 = x_16.x_GLF_uniform_int_values.arr[1].el;
-  int const x_68 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_71 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_74 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  int const x_77 = x_16.x_GLF_uniform_int_values.arr[0].el;
-  float4x2 const x_83 = float4x2(float2(float(x_56), float(x_59)), float2(float(x_62), float(x_65)), float2(float(x_68), float(x_71)), float2(float(x_74), float(x_77)));
-  if ((((all((x_54[0u] == x_83[0u])) && all((x_54[1u] == x_83[1u]))) && all((x_54[2u] == x_83[2u]))) && all((x_54[3u] == x_83[3u])))) {
-    int const x_107 = x_16.x_GLF_uniform_int_values.arr[3].el;
-    int const x_110 = x_16.x_GLF_uniform_int_values.arr[0].el;
-    int const x_113 = x_16.x_GLF_uniform_int_values.arr[0].el;
-    int const x_116 = x_16.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_8) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    int const x_120 = x_16.x_GLF_uniform_int_values.arr[0].el;
-    float const x_121 = float(x_120);
-    *(tint_symbol_8) = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf2& x_10, constant buf0& x_12, constant buf1& x_16, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4x2* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_10, x_12, x_16, tint_symbol_10, tint_symbol_9, tint_symbol_11);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf2& x_10 [[buffer(0)]], constant buf0& x_12 [[buffer(1)]], constant buf1& x_16 [[buffer(2)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4x2 tint_symbol_13 = float4x2(0.0f);
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, x_12, x_16, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 238d971..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,329 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 214
-; Schema: 0
-               OpCapability Shader
-         %92 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %m "m"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "one"
-               OpName %x_10 "x_10"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_12 "x_12"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_16 "x_16"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func0_i1_ "func0_i1_"
-               OpName %x "x"
-               OpName %i "i"
-               OpName %x_137 "x_137"
-               OpName %x_138 "x_138"
-               OpName %x_138_phi "x_138_phi"
-               OpName %x_139_phi "x_139_phi"
-               OpName %func1_ "func1_"
-               OpName %param "param"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_16 NonWritable
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-%mat4v2float = OpTypeMatrix %v2float 4
-%_ptr_Private_mat4v2float = OpTypePointer Private %mat4v2float
-         %12 = OpConstantNull %mat4v2float
-          %m = OpVariable %_ptr_Private_mat4v2float Private %12
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_10 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_16 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpTypeFunction %void %_ptr_Function_int
-         %38 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-%_ptr_Private_float = OpTypePointer Private %float
-        %104 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-        %118 = OpConstantComposite %v2float %float_0 %float_0
-        %119 = OpConstantComposite %mat4v2float %118 %118 %118 %118
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %v2bool = OpTypeVector %bool 2
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-   %main_out = OpTypeStruct %v4float
-        %201 = OpTypeFunction %main_out %v4float
-  %func0_i1_ = OpFunction %void None %31
-          %x = OpFunctionParameter %_ptr_Function_int
-         %36 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %38
-      %x_137 = OpVariable %_ptr_Function_bool Function %42
-      %x_138 = OpVariable %_ptr_Function_bool Function %42
-  %x_138_phi = OpVariable %_ptr_Function_bool Function %42
-  %x_139_phi = OpVariable %_ptr_Function_bool Function %42
-         %47 = OpLoad %int %x
-         %49 = OpSLessThan %bool %47 %int_1
-               OpStore %x_139_phi %49
-         %50 = OpLogicalNot %bool %49
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %54 = OpLoad %int %x
-         %55 = OpSGreaterThan %bool %54 %int_1
-               OpStore %x_138_phi %55
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-         %60 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0
-         %61 = OpLoad %float %60
-         %63 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-         %64 = OpLoad %float %63
-         %65 = OpFOrdGreaterThan %bool %61 %64
-               OpStore %x_137 %65
-         %66 = OpLoad %bool %x_137
-               OpStore %x_138_phi %66
-               OpBranch %56
-         %56 = OpLabel
-         %67 = OpLoad %bool %x_138_phi
-               OpStore %x_138 %67
-         %68 = OpLoad %bool %x_138
-               OpStore %x_139_phi %68
-               OpBranch %51
-         %51 = OpLabel
-         %69 = OpLoad %bool %x_139_phi
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-               OpReturn
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0
-         %73 = OpLoad %float %72
-         %74 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-         %75 = OpLoad %float %74
-         %76 = OpFOrdEqual %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %77
-         %78 = OpLabel
-               OpStore %i %int_0
-               OpBranch %79
-         %79 = OpLabel
-               OpLoopMerge %80 %81 None
-               OpBranch %82
-         %82 = OpLabel
-         %83 = OpLoad %int %i
-         %85 = OpSLessThan %bool %83 %int_2
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-               OpBranch %86
-         %88 = OpLabel
-               OpBranch %80
-         %86 = OpLabel
-               OpBranch %81
-         %81 = OpLabel
-         %90 = OpLoad %int %x
-         %91 = OpExtInst %int %92 SClamp %90 %int_0 %int_3
-         %94 = OpLoad %int %i
-         %95 = OpAccessChain %_ptr_Uniform_float %x_12 %uint_0 %int_0
-         %96 = OpLoad %float %95
-         %98 = OpAccessChain %_ptr_Private_float %m %91 %94
-         %99 = OpLoad %float %98
-        %100 = OpAccessChain %_ptr_Private_float %m %91 %94
-        %101 = OpFAdd %float %99 %96
-               OpStore %100 %101
-        %102 = OpLoad %int %i
-        %103 = OpIAdd %int %102 %int_1
-               OpStore %i %103
-               OpBranch %79
-         %80 = OpLabel
-               OpBranch %77
-         %77 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %func1_ = OpFunction %void None %104
-        %106 = OpLabel
-      %param = OpVariable %_ptr_Function_int Function %38
-        %108 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %109 = OpLoad %float %108
-        %111 = OpFOrdLessThan %bool %109 %float_0
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %112
-        %113 = OpLabel
-               OpReturn
-        %112 = OpLabel
-               OpStore %param %int_1
-        %114 = OpFunctionCall %void %func0_i1_ %param
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %104
-        %117 = OpLabel
-               OpStore %m %119
-        %120 = OpFunctionCall %void %func1_
-        %121 = OpFunctionCall %void %func1_
-        %122 = OpLoad %mat4v2float %m
-        %124 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %125 = OpLoad %int %124
-        %126 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %127 = OpLoad %int %126
-        %128 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_1
-        %129 = OpLoad %int %128
-        %130 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_1
-        %131 = OpLoad %int %130
-        %132 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %133 = OpLoad %int %132
-        %134 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %135 = OpLoad %int %134
-        %136 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %139 = OpLoad %int %138
-        %140 = OpConvertSToF %float %125
-        %141 = OpConvertSToF %float %127
-        %142 = OpCompositeConstruct %v2float %140 %141
-        %143 = OpConvertSToF %float %129
-        %144 = OpConvertSToF %float %131
-        %145 = OpCompositeConstruct %v2float %143 %144
-        %146 = OpConvertSToF %float %133
-        %147 = OpConvertSToF %float %135
-        %148 = OpCompositeConstruct %v2float %146 %147
-        %149 = OpConvertSToF %float %137
-        %150 = OpConvertSToF %float %139
-        %151 = OpCompositeConstruct %v2float %149 %150
-        %152 = OpCompositeConstruct %mat4v2float %142 %145 %148 %151
-        %154 = OpCompositeExtract %v2float %122 0
-        %155 = OpCompositeExtract %v2float %152 0
-        %156 = OpFOrdEqual %v2bool %154 %155
-        %153 = OpAll %bool %156
-               OpSelectionMerge %158 None
-               OpBranchConditional %153 %159 %158
-        %159 = OpLabel
-        %161 = OpCompositeExtract %v2float %122 1
-        %162 = OpCompositeExtract %v2float %152 1
-        %163 = OpFOrdEqual %v2bool %161 %162
-        %160 = OpAll %bool %163
-               OpBranch %158
-        %158 = OpLabel
-        %164 = OpPhi %bool %153 %117 %160 %159
-               OpSelectionMerge %165 None
-               OpBranchConditional %164 %166 %165
-        %166 = OpLabel
-        %169 = OpCompositeExtract %v2float %122 2
-        %170 = OpCompositeExtract %v2float %152 2
-        %171 = OpFOrdEqual %v2bool %169 %170
-        %167 = OpAll %bool %171
-               OpBranch %165
-        %165 = OpLabel
-        %172 = OpPhi %bool %164 %158 %167 %166
-               OpSelectionMerge %173 None
-               OpBranchConditional %172 %174 %173
-        %174 = OpLabel
-        %177 = OpCompositeExtract %v2float %122 3
-        %178 = OpCompositeExtract %v2float %152 3
-        %179 = OpFOrdEqual %v2bool %177 %178
-        %175 = OpAll %bool %179
-               OpBranch %173
-        %173 = OpLabel
-        %180 = OpPhi %bool %172 %165 %175 %174
-               OpSelectionMerge %181 None
-               OpBranchConditional %180 %182 %183
-        %182 = OpLabel
-        %184 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_3
-        %185 = OpLoad %int %184
-        %186 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %187 = OpLoad %int %186
-        %188 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %189 = OpLoad %int %188
-        %190 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_3
-        %191 = OpLoad %int %190
-        %192 = OpConvertSToF %float %185
-        %193 = OpConvertSToF %float %187
-        %194 = OpConvertSToF %float %189
-        %195 = OpConvertSToF %float %191
-        %196 = OpCompositeConstruct %v4float %192 %193 %194 %195
-               OpStore %x_GLF_color %196
-               OpBranch %181
-        %183 = OpLabel
-        %197 = OpAccessChain %_ptr_Uniform_int %x_16 %uint_0 %int_0
-        %198 = OpLoad %int %197
-        %199 = OpConvertSToF %float %198
-        %200 = OpCompositeConstruct %v4float %199 %199 %199 %199
-               OpStore %x_GLF_color %200
-               OpBranch %181
-        %181 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %201
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %205 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %206 = OpFunctionCall %void %main_1
-        %207 = OpLoad %v4float %x_GLF_color
-        %208 = OpCompositeConstruct %main_out %207
-               OpReturnValue %208
-               OpFunctionEnd
-       %main = OpFunction %void None %104
-        %210 = OpLabel
-        %212 = OpLoad %v4float %gl_FragCoord_param_1
-        %211 = OpFunctionCall %main_out %main_inner %212
-        %213 = OpCompositeExtract %v4float %211 0
-               OpStore %x_GLF_color_1_1 %213
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7e9de86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-functions-accumulate-global-matrix/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,133 +0,0 @@
-[[block]]
-struct buf2 {
-  one : f32;
-};
-
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> m : mat4x2<f32>;
-
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_16 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func0_i1_(x : ptr<function, i32>) {
-  var i : i32;
-  var x_137 : bool;
-  var x_138 : bool;
-  var x_138_phi : bool;
-  var x_139_phi : bool;
-  let x_124 : i32 = *(x);
-  let x_125 : bool = (x_124 < 1);
-  x_139_phi = x_125;
-  if (!(x_125)) {
-    let x_129 : i32 = *(x);
-    let x_130 : bool = (x_129 > 1);
-    x_138_phi = x_130;
-    if (x_130) {
-      let x_134 : f32 = x_10.one;
-      let x_136 : f32 = x_12.x_GLF_uniform_float_values[0];
-      x_137 = (x_134 > x_136);
-      x_138_phi = x_137;
-    }
-    x_138 = x_138_phi;
-    x_139_phi = x_138;
-  }
-  let x_139 : bool = x_139_phi;
-  if (x_139) {
-    return;
-  }
-  let x_143 : f32 = x_10.one;
-  let x_145 : f32 = x_12.x_GLF_uniform_float_values[0];
-  if ((x_143 == x_145)) {
-    i = 0;
-    loop {
-      let x_150 : i32 = i;
-      if ((x_150 < 2)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        let x_154 : i32 = *(x);
-        let x_155 : i32 = clamp(x_154, 0, 3);
-        let x_156 : i32 = i;
-        let x_158 : f32 = x_12.x_GLF_uniform_float_values[0];
-        let x_160 : f32 = m[x_155][x_156];
-        m[x_155][x_156] = (x_160 + x_158);
-        let x_163 : i32 = i;
-        i = (x_163 + 1);
-      }
-    }
-  }
-  return;
-}
-
-fn func1_() {
-  var param : i32;
-  let x_167 : f32 = gl_FragCoord.y;
-  if ((x_167 < 0.0)) {
-    return;
-  }
-  param = 1;
-  func0_i1_(&(param));
-  return;
-}
-
-fn main_1() {
-  m = mat4x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  func1_();
-  func1_();
-  let x_54 : mat4x2<f32> = m;
-  let x_56 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_59 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_62 : i32 = x_16.x_GLF_uniform_int_values[1];
-  let x_65 : i32 = x_16.x_GLF_uniform_int_values[1];
-  let x_68 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_71 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_74 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_77 : i32 = x_16.x_GLF_uniform_int_values[0];
-  let x_83 : mat4x2<f32> = mat4x2<f32>(vec2<f32>(f32(x_56), f32(x_59)), vec2<f32>(f32(x_62), f32(x_65)), vec2<f32>(f32(x_68), f32(x_71)), vec2<f32>(f32(x_74), f32(x_77)));
-  if ((((all((x_54[0u] == x_83[0u])) && all((x_54[1u] == x_83[1u]))) && all((x_54[2u] == x_83[2u]))) && all((x_54[3u] == x_83[3u])))) {
-    let x_107 : i32 = x_16.x_GLF_uniform_int_values[3];
-    let x_110 : i32 = x_16.x_GLF_uniform_int_values[0];
-    let x_113 : i32 = x_16.x_GLF_uniform_int_values[0];
-    let x_116 : i32 = x_16.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  } else {
-    let x_120 : i32 = x_16.x_GLF_uniform_int_values[0];
-    let x_121 : f32 = f32(x_120);
-    x_GLF_color = vec4<f32>(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8ab73a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,98 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v0 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int a = 0;
-  int c = 0;
-  const float x_41 = asfloat(x_6[1].x);
-  v0 = float4(x_41, x_41, x_41, x_41);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float4(x_44, x_44, x_44, x_44);
-  const int x_47 = asint(x_10[1].x);
-  a = x_47;
-  while (true) {
-    const int x_52 = a;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_52 < x_54)) {
-    } else {
-      break;
-    }
-    const int x_58 = asint(x_10[3].x);
-    c = x_58;
-    while (true) {
-      const int x_63 = c;
-      const int x_65 = asint(x_10[2].x);
-      if ((x_63 < x_65)) {
-      } else {
-        break;
-      }
-      const int x_69 = clamp(c, 0, 3);
-      const float x_71 = asfloat(x_6[1].x);
-      const float x_73 = v0[x_69];
-      set_float4(v0, x_69, (x_73 - x_71));
-      const int x_77 = asint(x_10[1].x);
-      const int x_79 = asint(x_10[3].x);
-      if ((x_77 == x_79)) {
-        const int x_83 = a;
-        const float x_85 = asfloat(x_6[1].x);
-        const float x_87 = asfloat(x_6[1].x);
-        const float x_89 = asfloat(x_6[1].x);
-        set_float4(v1, x_83, smoothstep(float4(x_85, x_87, x_89, 3.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), v0)[a]);
-      }
-      {
-        c = (c + 1);
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const float x_101 = v1.x;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_103 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_101 == x_103)) {
-    const int x_109 = asint(x_10[1].x);
-    const int x_112 = asint(x_10[3].x);
-    const int x_115 = asint(x_10[3].x);
-    const int x_118 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_109), float(x_112), float(x_115), float(x_118));
-  } else {
-    const int x_122 = asint(x_10[3].x);
-    const float x_123 = float(x_122);
-    x_GLF_color = float4(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.msl
deleted file mode 100644
index 643912a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  float4 v0 = 0.0f;
-  float4 v1 = 0.0f;
-  int a = 0;
-  int c = 0;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  v0 = float4(x_41, x_41, x_41, x_41);
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float4(x_44, x_44, x_44, x_44);
-  int const x_47 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  a = x_47;
-  while (true) {
-    int const x_52 = a;
-    int const x_54 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_52 < x_54)) {
-    } else {
-      break;
-    }
-    int const x_58 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    c = x_58;
-    while (true) {
-      int const x_63 = c;
-      int const x_65 = x_10.x_GLF_uniform_int_values.arr[2].el;
-      if ((x_63 < x_65)) {
-      } else {
-        break;
-      }
-      int const x_68 = c;
-      int const x_69 = clamp(x_68, 0, 3);
-      float const x_71 = x_6.x_GLF_uniform_float_values.arr[1].el;
-      float const x_73 = v0[x_69];
-      v0[x_69] = (x_73 - x_71);
-      int const x_77 = x_10.x_GLF_uniform_int_values.arr[1].el;
-      int const x_79 = x_10.x_GLF_uniform_int_values.arr[3].el;
-      if ((x_77 == x_79)) {
-        int const x_83 = a;
-        float const x_85 = x_6.x_GLF_uniform_float_values.arr[1].el;
-        float const x_87 = x_6.x_GLF_uniform_float_values.arr[1].el;
-        float const x_89 = x_6.x_GLF_uniform_float_values.arr[1].el;
-        float4 const x_91 = v0;
-        int const x_93 = a;
-        v1[x_83] = smoothstep(float4(x_85, x_87, x_89, 3.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), x_91)[x_93];
-      }
-      {
-        int const x_96 = c;
-        c = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_98 = a;
-      a = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-    }
-  }
-  float const x_101 = v1.x;
-  float const x_103 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_101 == x_103)) {
-    int const x_109 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_112 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_115 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_118 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_109), float(x_112), float(x_115), float(x_118));
-  } else {
-    int const x_122 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_123 = float(x_122);
-    *(tint_symbol_3) = float4(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5c3b9c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,225 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 144
-; Schema: 0
-               OpCapability Shader
-         %73 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %a "a"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_3 = OpConstant %float 3
-    %float_1 = OpConstant %float 1
-        %102 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %133 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %v0 = OpVariable %_ptr_Function_v4float Function %5
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %a = OpVariable %_ptr_Function_int Function %29
-          %c = OpVariable %_ptr_Function_int Function %29
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %35 = OpLoad %float %34
-         %36 = OpCompositeConstruct %v4float %35 %35 %35 %35
-               OpStore %v0 %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpCompositeConstruct %v4float %39 %39 %39 %39
-               OpStore %v1 %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %43 = OpLoad %int %42
-               OpStore %a %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %a
-         %49 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpSLessThan %bool %48 %50
-               OpSelectionMerge %53 None
-               OpBranchConditional %51 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %45
-         %53 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %58 = OpLoad %int %57
-               OpStore %c %58
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %c
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpSLessThan %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %60
-         %68 = OpLabel
-         %71 = OpLoad %int %c
-         %72 = OpExtInst %int %73 SClamp %71 %int_0 %int_3
-         %74 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %75 = OpLoad %float %74
-         %77 = OpAccessChain %_ptr_Function_float %v0 %72
-         %78 = OpLoad %float %77
-         %79 = OpAccessChain %_ptr_Function_float %v0 %72
-         %80 = OpFSub %float %78 %75
-               OpStore %79 %80
-         %81 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %84 = OpLoad %int %83
-         %85 = OpIEqual %bool %82 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpLoad %int %a
-         %89 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %92 = OpLoad %float %91
-         %93 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %94 = OpLoad %float %93
-         %95 = OpLoad %v4float %v0
-         %96 = OpLoad %int %a
-         %97 = OpAccessChain %_ptr_Function_float %v1 %88
-        %100 = OpCompositeConstruct %v4float %90 %92 %94 %float_3
-         %98 = OpExtInst %v4float %73 SmoothStep %100 %102 %95
-        %103 = OpVectorExtractDynamic %float %98 %96
-               OpStore %97 %103
-               OpBranch %86
-         %86 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-        %104 = OpLoad %int %c
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %c %105
-               OpBranch %59
-         %60 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-        %106 = OpLoad %int %a
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %a %107
-               OpBranch %44
-         %45 = OpLabel
-        %108 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-        %109 = OpLoad %float %108
-        %110 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %111 = OpLoad %float %110
-        %112 = OpFOrdEqual %bool %109 %111
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %115
-        %114 = OpLabel
-        %116 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %117 = OpLoad %int %116
-        %118 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %119 = OpLoad %int %118
-        %120 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %123 = OpLoad %int %122
-        %124 = OpConvertSToF %float %117
-        %125 = OpConvertSToF %float %119
-        %126 = OpConvertSToF %float %121
-        %127 = OpConvertSToF %float %123
-        %128 = OpCompositeConstruct %v4float %124 %125 %126 %127
-               OpStore %x_GLF_color %128
-               OpBranch %113
-        %115 = OpLabel
-        %129 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %130 = OpLoad %int %129
-        %131 = OpConvertSToF %float %130
-        %132 = OpCompositeConstruct %v4float %131 %131 %131 %131
-               OpStore %x_GLF_color %132
-               OpBranch %113
-        %113 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %133
-        %136 = OpLabel
-        %137 = OpFunctionCall %void %main_1
-        %138 = OpLoad %v4float %x_GLF_color
-        %139 = OpCompositeConstruct %main_out %138
-               OpReturnValue %139
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %141 = OpLabel
-        %142 = OpFunctionCall %main_out %main_inner
-        %143 = OpCompositeExtract %v4float %142 0
-               OpStore %x_GLF_color_1_1 %143
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e3aa195..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,101 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v0 : vec4<f32>;
-  var v1 : vec4<f32>;
-  var a : i32;
-  var c : i32;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[1];
-  v0 = vec4<f32>(x_41, x_41, x_41, x_41);
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v1 = vec4<f32>(x_44, x_44, x_44, x_44);
-  let x_47 : i32 = x_10.x_GLF_uniform_int_values[1];
-  a = x_47;
-  loop {
-    let x_52 : i32 = a;
-    let x_54 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_52 < x_54)) {
-    } else {
-      break;
-    }
-    let x_58 : i32 = x_10.x_GLF_uniform_int_values[3];
-    c = x_58;
-    loop {
-      let x_63 : i32 = c;
-      let x_65 : i32 = x_10.x_GLF_uniform_int_values[2];
-      if ((x_63 < x_65)) {
-      } else {
-        break;
-      }
-      let x_68 : i32 = c;
-      let x_69 : i32 = clamp(x_68, 0, 3);
-      let x_71 : f32 = x_6.x_GLF_uniform_float_values[1];
-      let x_73 : f32 = v0[x_69];
-      v0[x_69] = (x_73 - x_71);
-      let x_77 : i32 = x_10.x_GLF_uniform_int_values[1];
-      let x_79 : i32 = x_10.x_GLF_uniform_int_values[3];
-      if ((x_77 == x_79)) {
-        let x_83 : i32 = a;
-        let x_85 : f32 = x_6.x_GLF_uniform_float_values[1];
-        let x_87 : f32 = x_6.x_GLF_uniform_float_values[1];
-        let x_89 : f32 = x_6.x_GLF_uniform_float_values[1];
-        let x_91 : vec4<f32> = v0;
-        let x_93 : i32 = a;
-        v1[x_83] = smoothStep(vec4<f32>(x_85, x_87, x_89, 3.0), vec4<f32>(1.0, 1.0, 1.0, 1.0), x_91)[x_93];
-      }
-
-      continuing {
-        let x_96 : i32 = c;
-        c = (x_96 + 1);
-      }
-    }
-
-    continuing {
-      let x_98 : i32 = a;
-      a = (x_98 + 1);
-    }
-  }
-  let x_101 : f32 = v1.x;
-  let x_103 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_101 == x_103)) {
-    let x_109 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_112 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_115 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_118 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_109), f32(x_112), f32(x_115), f32(x_118));
-  } else {
-    let x_122 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_123 : f32 = f32(x_122);
-    x_GLF_color = vec4<f32>(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8ab73a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,98 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v0 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int a = 0;
-  int c = 0;
-  const float x_41 = asfloat(x_6[1].x);
-  v0 = float4(x_41, x_41, x_41, x_41);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float4(x_44, x_44, x_44, x_44);
-  const int x_47 = asint(x_10[1].x);
-  a = x_47;
-  while (true) {
-    const int x_52 = a;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_54 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_52 < x_54)) {
-    } else {
-      break;
-    }
-    const int x_58 = asint(x_10[3].x);
-    c = x_58;
-    while (true) {
-      const int x_63 = c;
-      const int x_65 = asint(x_10[2].x);
-      if ((x_63 < x_65)) {
-      } else {
-        break;
-      }
-      const int x_69 = clamp(c, 0, 3);
-      const float x_71 = asfloat(x_6[1].x);
-      const float x_73 = v0[x_69];
-      set_float4(v0, x_69, (x_73 - x_71));
-      const int x_77 = asint(x_10[1].x);
-      const int x_79 = asint(x_10[3].x);
-      if ((x_77 == x_79)) {
-        const int x_83 = a;
-        const float x_85 = asfloat(x_6[1].x);
-        const float x_87 = asfloat(x_6[1].x);
-        const float x_89 = asfloat(x_6[1].x);
-        set_float4(v1, x_83, smoothstep(float4(x_85, x_87, x_89, 3.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), v0)[a]);
-      }
-      {
-        c = (c + 1);
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const float x_101 = v1.x;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_103 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_101 == x_103)) {
-    const int x_109 = asint(x_10[1].x);
-    const int x_112 = asint(x_10[3].x);
-    const int x_115 = asint(x_10[3].x);
-    const int x_118 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_109), float(x_112), float(x_115), float(x_118));
-  } else {
-    const int x_122 = asint(x_10[3].x);
-    const float x_123 = float(x_122);
-    x_GLF_color = float4(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.msl
deleted file mode 100644
index 643912a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  float4 v0 = 0.0f;
-  float4 v1 = 0.0f;
-  int a = 0;
-  int c = 0;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  v0 = float4(x_41, x_41, x_41, x_41);
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float4(x_44, x_44, x_44, x_44);
-  int const x_47 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  a = x_47;
-  while (true) {
-    int const x_52 = a;
-    int const x_54 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_52 < x_54)) {
-    } else {
-      break;
-    }
-    int const x_58 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    c = x_58;
-    while (true) {
-      int const x_63 = c;
-      int const x_65 = x_10.x_GLF_uniform_int_values.arr[2].el;
-      if ((x_63 < x_65)) {
-      } else {
-        break;
-      }
-      int const x_68 = c;
-      int const x_69 = clamp(x_68, 0, 3);
-      float const x_71 = x_6.x_GLF_uniform_float_values.arr[1].el;
-      float const x_73 = v0[x_69];
-      v0[x_69] = (x_73 - x_71);
-      int const x_77 = x_10.x_GLF_uniform_int_values.arr[1].el;
-      int const x_79 = x_10.x_GLF_uniform_int_values.arr[3].el;
-      if ((x_77 == x_79)) {
-        int const x_83 = a;
-        float const x_85 = x_6.x_GLF_uniform_float_values.arr[1].el;
-        float const x_87 = x_6.x_GLF_uniform_float_values.arr[1].el;
-        float const x_89 = x_6.x_GLF_uniform_float_values.arr[1].el;
-        float4 const x_91 = v0;
-        int const x_93 = a;
-        v1[x_83] = smoothstep(float4(x_85, x_87, x_89, 3.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), x_91)[x_93];
-      }
-      {
-        int const x_96 = c;
-        c = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_98 = a;
-      a = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-    }
-  }
-  float const x_101 = v1.x;
-  float const x_103 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_101 == x_103)) {
-    int const x_109 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_112 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_115 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_118 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_109), float(x_112), float(x_115), float(x_118));
-  } else {
-    int const x_122 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_123 = float(x_122);
-    *(tint_symbol_3) = float4(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5c3b9c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,225 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 144
-; Schema: 0
-               OpCapability Shader
-         %73 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v0 "v0"
-               OpName %v1 "v1"
-               OpName %a "a"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_3 = OpConstant %float 3
-    %float_1 = OpConstant %float 1
-        %102 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %133 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %v0 = OpVariable %_ptr_Function_v4float Function %5
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %a = OpVariable %_ptr_Function_int Function %29
-          %c = OpVariable %_ptr_Function_int Function %29
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %35 = OpLoad %float %34
-         %36 = OpCompositeConstruct %v4float %35 %35 %35 %35
-               OpStore %v0 %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpCompositeConstruct %v4float %39 %39 %39 %39
-               OpStore %v1 %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %43 = OpLoad %int %42
-               OpStore %a %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %a
-         %49 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpSLessThan %bool %48 %50
-               OpSelectionMerge %53 None
-               OpBranchConditional %51 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %45
-         %53 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %58 = OpLoad %int %57
-               OpStore %c %58
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %c
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpSLessThan %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %60
-         %68 = OpLabel
-         %71 = OpLoad %int %c
-         %72 = OpExtInst %int %73 SClamp %71 %int_0 %int_3
-         %74 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %75 = OpLoad %float %74
-         %77 = OpAccessChain %_ptr_Function_float %v0 %72
-         %78 = OpLoad %float %77
-         %79 = OpAccessChain %_ptr_Function_float %v0 %72
-         %80 = OpFSub %float %78 %75
-               OpStore %79 %80
-         %81 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-         %84 = OpLoad %int %83
-         %85 = OpIEqual %bool %82 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-         %88 = OpLoad %int %a
-         %89 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %92 = OpLoad %float %91
-         %93 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %94 = OpLoad %float %93
-         %95 = OpLoad %v4float %v0
-         %96 = OpLoad %int %a
-         %97 = OpAccessChain %_ptr_Function_float %v1 %88
-        %100 = OpCompositeConstruct %v4float %90 %92 %94 %float_3
-         %98 = OpExtInst %v4float %73 SmoothStep %100 %102 %95
-        %103 = OpVectorExtractDynamic %float %98 %96
-               OpStore %97 %103
-               OpBranch %86
-         %86 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-        %104 = OpLoad %int %c
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %c %105
-               OpBranch %59
-         %60 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-        %106 = OpLoad %int %a
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %a %107
-               OpBranch %44
-         %45 = OpLabel
-        %108 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-        %109 = OpLoad %float %108
-        %110 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %111 = OpLoad %float %110
-        %112 = OpFOrdEqual %bool %109 %111
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %115
-        %114 = OpLabel
-        %116 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %117 = OpLoad %int %116
-        %118 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %119 = OpLoad %int %118
-        %120 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %123 = OpLoad %int %122
-        %124 = OpConvertSToF %float %117
-        %125 = OpConvertSToF %float %119
-        %126 = OpConvertSToF %float %121
-        %127 = OpConvertSToF %float %123
-        %128 = OpCompositeConstruct %v4float %124 %125 %126 %127
-               OpStore %x_GLF_color %128
-               OpBranch %113
-        %115 = OpLabel
-        %129 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %130 = OpLoad %int %129
-        %131 = OpConvertSToF %float %130
-        %132 = OpCompositeConstruct %v4float %131 %131 %131 %131
-               OpStore %x_GLF_color %132
-               OpBranch %113
-        %113 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %133
-        %136 = OpLabel
-        %137 = OpFunctionCall %void %main_1
-        %138 = OpLoad %v4float %x_GLF_color
-        %139 = OpCompositeConstruct %main_out %138
-               OpReturnValue %139
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %141 = OpLabel
-        %142 = OpFunctionCall %main_out %main_inner
-        %143 = OpCompositeExtract %v4float %142 0
-               OpStore %x_GLF_color_1_1 %143
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e3aa195..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loop-undefined-smoothstep-never-executed/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,101 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v0 : vec4<f32>;
-  var v1 : vec4<f32>;
-  var a : i32;
-  var c : i32;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[1];
-  v0 = vec4<f32>(x_41, x_41, x_41, x_41);
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v1 = vec4<f32>(x_44, x_44, x_44, x_44);
-  let x_47 : i32 = x_10.x_GLF_uniform_int_values[1];
-  a = x_47;
-  loop {
-    let x_52 : i32 = a;
-    let x_54 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_52 < x_54)) {
-    } else {
-      break;
-    }
-    let x_58 : i32 = x_10.x_GLF_uniform_int_values[3];
-    c = x_58;
-    loop {
-      let x_63 : i32 = c;
-      let x_65 : i32 = x_10.x_GLF_uniform_int_values[2];
-      if ((x_63 < x_65)) {
-      } else {
-        break;
-      }
-      let x_68 : i32 = c;
-      let x_69 : i32 = clamp(x_68, 0, 3);
-      let x_71 : f32 = x_6.x_GLF_uniform_float_values[1];
-      let x_73 : f32 = v0[x_69];
-      v0[x_69] = (x_73 - x_71);
-      let x_77 : i32 = x_10.x_GLF_uniform_int_values[1];
-      let x_79 : i32 = x_10.x_GLF_uniform_int_values[3];
-      if ((x_77 == x_79)) {
-        let x_83 : i32 = a;
-        let x_85 : f32 = x_6.x_GLF_uniform_float_values[1];
-        let x_87 : f32 = x_6.x_GLF_uniform_float_values[1];
-        let x_89 : f32 = x_6.x_GLF_uniform_float_values[1];
-        let x_91 : vec4<f32> = v0;
-        let x_93 : i32 = a;
-        v1[x_83] = smoothStep(vec4<f32>(x_85, x_87, x_89, 3.0), vec4<f32>(1.0, 1.0, 1.0, 1.0), x_91)[x_93];
-      }
-
-      continuing {
-        let x_96 : i32 = c;
-        c = (x_96 + 1);
-      }
-    }
-
-    continuing {
-      let x_98 : i32 = a;
-      a = (x_98 + 1);
-    }
-  }
-  let x_101 : f32 = v1.x;
-  let x_103 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_101 == x_103)) {
-    let x_109 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_112 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_115 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_118 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_109), f32(x_112), f32(x_115), f32(x_118));
-  } else {
-    let x_122 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_123 : f32 = f32(x_122);
-    x_GLF_color = vec4<f32>(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 20ec5cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,3 +0,0 @@
-SKIP: FAILED
-
-test timed out after 30s
\ No newline at end of file
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.msl
deleted file mode 100644
index af64e54..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,328 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int i_4 = 0;
-  int i_5 = 0;
-  int i_6 = 0;
-  int i_7 = 0;
-  int i_8 = 0;
-  int i_9 = 0;
-  int i_10 = 0;
-  int i_11 = 0;
-  int i_12 = 0;
-  int i_13 = 0;
-  int i_14 = 0;
-  float sum = 0.0f;
-  int r = 0;
-  *(tint_symbol_3) = 0;
-  float const x_53 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  f = x_53;
-  int const x_55 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  i = x_55;
-  while (true) {
-    int const x_60 = i;
-    int const x_62 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-    int const x_66 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    i_1 = x_66;
-    while (true) {
-      int const x_71 = i_1;
-      int const x_73 = x_10.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_71 < x_73)) {
-      } else {
-        break;
-      }
-      int const x_77 = x_10.x_GLF_uniform_int_values.arr[1].el;
-      i_2 = x_77;
-      while (true) {
-        int const x_82 = i_2;
-        int const x_84 = x_10.x_GLF_uniform_int_values.arr[0].el;
-        if ((x_82 < x_84)) {
-        } else {
-          break;
-        }
-        int const x_88 = x_10.x_GLF_uniform_int_values.arr[1].el;
-        i_3 = x_88;
-        while (true) {
-          int const x_93 = i_3;
-          int const x_95 = x_10.x_GLF_uniform_int_values.arr[0].el;
-          if ((x_93 < x_95)) {
-          } else {
-            break;
-          }
-          int const x_99 = x_10.x_GLF_uniform_int_values.arr[1].el;
-          i_4 = x_99;
-          while (true) {
-            int const x_104 = i_4;
-            int const x_106 = x_10.x_GLF_uniform_int_values.arr[0].el;
-            if ((x_104 < x_106)) {
-            } else {
-              break;
-            }
-            int const x_110 = x_10.x_GLF_uniform_int_values.arr[1].el;
-            i_5 = x_110;
-            while (true) {
-              int const x_115 = i_5;
-              int const x_117 = x_10.x_GLF_uniform_int_values.arr[0].el;
-              if ((x_115 < x_117)) {
-              } else {
-                break;
-              }
-              int const x_121 = x_10.x_GLF_uniform_int_values.arr[1].el;
-              i_6 = x_121;
-              while (true) {
-                int const x_126 = i_6;
-                int const x_128 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                if ((x_126 < x_128)) {
-                } else {
-                  break;
-                }
-                int const x_132 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                i_7 = x_132;
-                while (true) {
-                  int const x_137 = i_7;
-                  int const x_139 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                  if ((x_137 < x_139)) {
-                  } else {
-                    break;
-                  }
-                  int const x_143 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                  i_8 = x_143;
-                  while (true) {
-                    int const x_148 = i_8;
-                    int const x_150 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                    if ((x_148 < x_150)) {
-                    } else {
-                      break;
-                    }
-                    int const x_154 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                    i_9 = x_154;
-                    while (true) {
-                      int const x_159 = i_9;
-                      int const x_161 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                      if ((x_159 < x_161)) {
-                      } else {
-                        break;
-                      }
-                      int const x_165 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                      i_10 = x_165;
-                      while (true) {
-                        int const x_170 = i_10;
-                        int const x_172 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                        if ((x_170 < x_172)) {
-                        } else {
-                          break;
-                        }
-                        int const x_176 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                        i_11 = x_176;
-                        while (true) {
-                          int const x_181 = i_11;
-                          int const x_183 = x_10.x_GLF_uniform_int_values.arr[2].el;
-                          if ((x_181 < x_183)) {
-                          } else {
-                            break;
-                          }
-                          int const x_187 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                          i_12 = x_187;
-                          while (true) {
-                            int const x_192 = i_12;
-                            int const x_194 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                            if ((x_192 < x_194)) {
-                            } else {
-                              break;
-                            }
-                            int const x_198 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                            i_13 = x_198;
-                            while (true) {
-                              int const x_203 = i_13;
-                              int const x_205 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                              if ((x_203 < x_205)) {
-                              } else {
-                                break;
-                              }
-                              int const x_209 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                              i_14 = x_209;
-                              while (true) {
-                                int const x_214 = i_14;
-                                int const x_216 = x_10.x_GLF_uniform_int_values.arr[2].el;
-                                if ((x_214 < x_216)) {
-                                } else {
-                                  break;
-                                }
-                                while (true) {
-                                  int const x_223 = *(tint_symbol_3);
-                                  *(tint_symbol_3) = as_type<int>((as_type<uint>(x_223) + as_type<uint>(1)));
-                                  {
-                                    int const x_225 = *(tint_symbol_3);
-                                    int const x_227 = x_10.x_GLF_uniform_int_values.arr[3].el;
-                                    if ((x_225 < as_type<int>((as_type<uint>(100) - as_type<uint>(x_227))))) {
-                                    } else {
-                                      break;
-                                    }
-                                  }
-                                }
-                                float const x_231 = x_7.x_GLF_uniform_float_values.arr[0].el;
-                                float const x_232 = f;
-                                f = (x_232 + x_231);
-                                {
-                                  int const x_234 = i_14;
-                                  i_14 = as_type<int>((as_type<uint>(x_234) + as_type<uint>(1)));
-                                }
-                              }
-                              {
-                                int const x_236 = i_13;
-                                i_13 = as_type<int>((as_type<uint>(x_236) + as_type<uint>(1)));
-                              }
-                            }
-                            {
-                              int const x_238 = i_12;
-                              i_12 = as_type<int>((as_type<uint>(x_238) + as_type<uint>(1)));
-                            }
-                          }
-                          {
-                            int const x_240 = i_11;
-                            i_11 = as_type<int>((as_type<uint>(x_240) + as_type<uint>(1)));
-                          }
-                        }
-                        {
-                          int const x_242 = i_10;
-                          i_10 = as_type<int>((as_type<uint>(x_242) + as_type<uint>(1)));
-                        }
-                      }
-                      {
-                        int const x_244 = i_9;
-                        i_9 = as_type<int>((as_type<uint>(x_244) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_246 = i_8;
-                      i_8 = as_type<int>((as_type<uint>(x_246) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_248 = i_7;
-                    i_7 = as_type<int>((as_type<uint>(x_248) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_250 = i_6;
-                  i_6 = as_type<int>((as_type<uint>(x_250) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_252 = i_5;
-                i_5 = as_type<int>((as_type<uint>(x_252) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_254 = i_4;
-              i_4 = as_type<int>((as_type<uint>(x_254) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_256 = i_3;
-            i_3 = as_type<int>((as_type<uint>(x_256) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_258 = i_2;
-          i_2 = as_type<int>((as_type<uint>(x_258) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_260 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_260) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_262 = i;
-      i = as_type<int>((as_type<uint>(x_262) + as_type<uint>(1)));
-    }
-  }
-  float const x_265 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  sum = x_265;
-  int const x_267 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  r = x_267;
-  while (true) {
-    int const x_272 = *(tint_symbol_3);
-    if ((x_272 < 100)) {
-    } else {
-      break;
-    }
-    int const x_275 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_275) + as_type<uint>(1)));
-    float const x_277 = f;
-    float const x_278 = sum;
-    sum = (x_278 + x_277);
-    {
-      int const x_280 = r;
-      r = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
-    }
-  }
-  float const x_282 = sum;
-  float const x_284 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  if ((x_282 == x_284)) {
-    int const x_290 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_293 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_296 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_299 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_290), float(x_293), float(x_296), float(x_299));
-  } else {
-    int const x_303 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_304 = float(x_303);
-    *(tint_symbol_4) = float4(x_304, x_304, x_304, x_304);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 90751e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,609 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 354
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %i_3 "i_3"
-               OpName %i_4 "i_4"
-               OpName %i_5 "i_5"
-               OpName %i_6 "i_6"
-               OpName %i_7 "i_7"
-               OpName %i_8 "i_8"
-               OpName %i_9 "i_9"
-               OpName %i_10 "i_10"
-               OpName %i_11 "i_11"
-               OpName %i_12 "i_12"
-               OpName %i_13 "i_13"
-               OpName %i_14 "i_14"
-               OpName %sum "sum"
-               OpName %r "r"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-    %int_100 = OpConstant %int 100
-   %main_out = OpTypeStruct %v4float
-        %343 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %29
-          %i = OpVariable %_ptr_Function_int Function %9
-        %i_1 = OpVariable %_ptr_Function_int Function %9
-        %i_2 = OpVariable %_ptr_Function_int Function %9
-        %i_3 = OpVariable %_ptr_Function_int Function %9
-        %i_4 = OpVariable %_ptr_Function_int Function %9
-        %i_5 = OpVariable %_ptr_Function_int Function %9
-        %i_6 = OpVariable %_ptr_Function_int Function %9
-        %i_7 = OpVariable %_ptr_Function_int Function %9
-        %i_8 = OpVariable %_ptr_Function_int Function %9
-        %i_9 = OpVariable %_ptr_Function_int Function %9
-       %i_10 = OpVariable %_ptr_Function_int Function %9
-       %i_11 = OpVariable %_ptr_Function_int Function %9
-       %i_12 = OpVariable %_ptr_Function_int Function %9
-       %i_13 = OpVariable %_ptr_Function_int Function %9
-       %i_14 = OpVariable %_ptr_Function_int Function %9
-        %sum = OpVariable %_ptr_Function_float Function %29
-          %r = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-         %52 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %53 = OpLoad %float %52
-               OpStore %f %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %56 = OpLoad %int %55
-               OpStore %i %56
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %i
-         %62 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpSLessThan %bool %61 %63
-               OpSelectionMerge %66 None
-               OpBranchConditional %64 %67 %68
-         %67 = OpLabel
-               OpBranch %66
-         %68 = OpLabel
-               OpBranch %58
-         %66 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %70 = OpLoad %int %69
-               OpStore %i_1 %70
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %i_1
-         %76 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpSLessThan %bool %75 %77
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %72
-         %79 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %83 = OpLoad %int %82
-               OpStore %i_2 %83
-               OpBranch %84
-         %84 = OpLabel
-               OpLoopMerge %85 %86 None
-               OpBranch %87
-         %87 = OpLabel
-         %88 = OpLoad %int %i_2
-         %89 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %90 = OpLoad %int %89
-         %91 = OpSLessThan %bool %88 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %94
-         %93 = OpLabel
-               OpBranch %92
-         %94 = OpLabel
-               OpBranch %85
-         %92 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %96 = OpLoad %int %95
-               OpStore %i_3 %96
-               OpBranch %97
-         %97 = OpLabel
-               OpLoopMerge %98 %99 None
-               OpBranch %100
-        %100 = OpLabel
-        %101 = OpLoad %int %i_3
-        %102 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %103 = OpLoad %int %102
-        %104 = OpSLessThan %bool %101 %103
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %107
-        %106 = OpLabel
-               OpBranch %105
-        %107 = OpLabel
-               OpBranch %98
-        %105 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %109 = OpLoad %int %108
-               OpStore %i_4 %109
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %i_4
-        %115 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %116 = OpLoad %int %115
-        %117 = OpSLessThan %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-               OpBranch %118
-        %120 = OpLabel
-               OpBranch %111
-        %118 = OpLabel
-        %121 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %122 = OpLoad %int %121
-               OpStore %i_5 %122
-               OpBranch %123
-        %123 = OpLabel
-               OpLoopMerge %124 %125 None
-               OpBranch %126
-        %126 = OpLabel
-        %127 = OpLoad %int %i_5
-        %128 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %129 = OpLoad %int %128
-        %130 = OpSLessThan %bool %127 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %133
-        %132 = OpLabel
-               OpBranch %131
-        %133 = OpLabel
-               OpBranch %124
-        %131 = OpLabel
-        %134 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %135 = OpLoad %int %134
-               OpStore %i_6 %135
-               OpBranch %136
-        %136 = OpLabel
-               OpLoopMerge %137 %138 None
-               OpBranch %139
-        %139 = OpLabel
-        %140 = OpLoad %int %i_6
-        %141 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %142 = OpLoad %int %141
-        %143 = OpSLessThan %bool %140 %142
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %146
-        %145 = OpLabel
-               OpBranch %144
-        %146 = OpLabel
-               OpBranch %137
-        %144 = OpLabel
-        %147 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %148 = OpLoad %int %147
-               OpStore %i_7 %148
-               OpBranch %149
-        %149 = OpLabel
-               OpLoopMerge %150 %151 None
-               OpBranch %152
-        %152 = OpLabel
-        %153 = OpLoad %int %i_7
-        %154 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %155 = OpLoad %int %154
-        %156 = OpSLessThan %bool %153 %155
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %159
-        %158 = OpLabel
-               OpBranch %157
-        %159 = OpLabel
-               OpBranch %150
-        %157 = OpLabel
-        %160 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %161 = OpLoad %int %160
-               OpStore %i_8 %161
-               OpBranch %162
-        %162 = OpLabel
-               OpLoopMerge %163 %164 None
-               OpBranch %165
-        %165 = OpLabel
-        %166 = OpLoad %int %i_8
-        %167 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %168 = OpLoad %int %167
-        %169 = OpSLessThan %bool %166 %168
-               OpSelectionMerge %170 None
-               OpBranchConditional %169 %171 %172
-        %171 = OpLabel
-               OpBranch %170
-        %172 = OpLabel
-               OpBranch %163
-        %170 = OpLabel
-        %173 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %174 = OpLoad %int %173
-               OpStore %i_9 %174
-               OpBranch %175
-        %175 = OpLabel
-               OpLoopMerge %176 %177 None
-               OpBranch %178
-        %178 = OpLabel
-        %179 = OpLoad %int %i_9
-        %180 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %181 = OpLoad %int %180
-        %182 = OpSLessThan %bool %179 %181
-               OpSelectionMerge %183 None
-               OpBranchConditional %182 %184 %185
-        %184 = OpLabel
-               OpBranch %183
-        %185 = OpLabel
-               OpBranch %176
-        %183 = OpLabel
-        %186 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %187 = OpLoad %int %186
-               OpStore %i_10 %187
-               OpBranch %188
-        %188 = OpLabel
-               OpLoopMerge %189 %190 None
-               OpBranch %191
-        %191 = OpLabel
-        %192 = OpLoad %int %i_10
-        %193 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %194 = OpLoad %int %193
-        %195 = OpSLessThan %bool %192 %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %198
-        %197 = OpLabel
-               OpBranch %196
-        %198 = OpLabel
-               OpBranch %189
-        %196 = OpLabel
-        %199 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %200 = OpLoad %int %199
-               OpStore %i_11 %200
-               OpBranch %201
-        %201 = OpLabel
-               OpLoopMerge %202 %203 None
-               OpBranch %204
-        %204 = OpLabel
-        %205 = OpLoad %int %i_11
-        %207 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %208 = OpLoad %int %207
-        %209 = OpSLessThan %bool %205 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %212
-        %211 = OpLabel
-               OpBranch %210
-        %212 = OpLabel
-               OpBranch %202
-        %210 = OpLabel
-        %213 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %214 = OpLoad %int %213
-               OpStore %i_12 %214
-               OpBranch %215
-        %215 = OpLabel
-               OpLoopMerge %216 %217 None
-               OpBranch %218
-        %218 = OpLabel
-        %219 = OpLoad %int %i_12
-        %220 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %221 = OpLoad %int %220
-        %222 = OpSLessThan %bool %219 %221
-               OpSelectionMerge %223 None
-               OpBranchConditional %222 %224 %225
-        %224 = OpLabel
-               OpBranch %223
-        %225 = OpLabel
-               OpBranch %216
-        %223 = OpLabel
-        %226 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %227 = OpLoad %int %226
-               OpStore %i_13 %227
-               OpBranch %228
-        %228 = OpLabel
-               OpLoopMerge %229 %230 None
-               OpBranch %231
-        %231 = OpLabel
-        %232 = OpLoad %int %i_13
-        %233 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %234 = OpLoad %int %233
-        %235 = OpSLessThan %bool %232 %234
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %238
-        %237 = OpLabel
-               OpBranch %236
-        %238 = OpLabel
-               OpBranch %229
-        %236 = OpLabel
-        %239 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %240 = OpLoad %int %239
-               OpStore %i_14 %240
-               OpBranch %241
-        %241 = OpLabel
-               OpLoopMerge %242 %243 None
-               OpBranch %244
-        %244 = OpLabel
-        %245 = OpLoad %int %i_14
-        %246 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %247 = OpLoad %int %246
-        %248 = OpSLessThan %bool %245 %247
-               OpSelectionMerge %249 None
-               OpBranchConditional %248 %250 %251
-        %250 = OpLabel
-               OpBranch %249
-        %251 = OpLabel
-               OpBranch %242
-        %249 = OpLabel
-               OpBranch %252
-        %252 = OpLabel
-               OpLoopMerge %253 %254 None
-               OpBranch %255
-        %255 = OpLabel
-        %256 = OpLoad %int %x_GLF_global_loop_count
-        %257 = OpIAdd %int %256 %int_1
-               OpStore %x_GLF_global_loop_count %257
-               OpBranch %254
-        %254 = OpLabel
-        %258 = OpLoad %int %x_GLF_global_loop_count
-        %260 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %261 = OpLoad %int %260
-        %263 = OpISub %int %int_100 %261
-        %264 = OpSLessThan %bool %258 %263
-               OpBranchConditional %264 %252 %253
-        %253 = OpLabel
-        %265 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-        %266 = OpLoad %float %265
-        %267 = OpLoad %float %f
-        %268 = OpFAdd %float %267 %266
-               OpStore %f %268
-               OpBranch %243
-        %243 = OpLabel
-        %269 = OpLoad %int %i_14
-        %270 = OpIAdd %int %269 %int_1
-               OpStore %i_14 %270
-               OpBranch %241
-        %242 = OpLabel
-               OpBranch %230
-        %230 = OpLabel
-        %271 = OpLoad %int %i_13
-        %272 = OpIAdd %int %271 %int_1
-               OpStore %i_13 %272
-               OpBranch %228
-        %229 = OpLabel
-               OpBranch %217
-        %217 = OpLabel
-        %273 = OpLoad %int %i_12
-        %274 = OpIAdd %int %273 %int_1
-               OpStore %i_12 %274
-               OpBranch %215
-        %216 = OpLabel
-               OpBranch %203
-        %203 = OpLabel
-        %275 = OpLoad %int %i_11
-        %276 = OpIAdd %int %275 %int_1
-               OpStore %i_11 %276
-               OpBranch %201
-        %202 = OpLabel
-               OpBranch %190
-        %190 = OpLabel
-        %277 = OpLoad %int %i_10
-        %278 = OpIAdd %int %277 %int_1
-               OpStore %i_10 %278
-               OpBranch %188
-        %189 = OpLabel
-               OpBranch %177
-        %177 = OpLabel
-        %279 = OpLoad %int %i_9
-        %280 = OpIAdd %int %279 %int_1
-               OpStore %i_9 %280
-               OpBranch %175
-        %176 = OpLabel
-               OpBranch %164
-        %164 = OpLabel
-        %281 = OpLoad %int %i_8
-        %282 = OpIAdd %int %281 %int_1
-               OpStore %i_8 %282
-               OpBranch %162
-        %163 = OpLabel
-               OpBranch %151
-        %151 = OpLabel
-        %283 = OpLoad %int %i_7
-        %284 = OpIAdd %int %283 %int_1
-               OpStore %i_7 %284
-               OpBranch %149
-        %150 = OpLabel
-               OpBranch %138
-        %138 = OpLabel
-        %285 = OpLoad %int %i_6
-        %286 = OpIAdd %int %285 %int_1
-               OpStore %i_6 %286
-               OpBranch %136
-        %137 = OpLabel
-               OpBranch %125
-        %125 = OpLabel
-        %287 = OpLoad %int %i_5
-        %288 = OpIAdd %int %287 %int_1
-               OpStore %i_5 %288
-               OpBranch %123
-        %124 = OpLabel
-               OpBranch %112
-        %112 = OpLabel
-        %289 = OpLoad %int %i_4
-        %290 = OpIAdd %int %289 %int_1
-               OpStore %i_4 %290
-               OpBranch %110
-        %111 = OpLabel
-               OpBranch %99
-         %99 = OpLabel
-        %291 = OpLoad %int %i_3
-        %292 = OpIAdd %int %291 %int_1
-               OpStore %i_3 %292
-               OpBranch %97
-         %98 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-        %293 = OpLoad %int %i_2
-        %294 = OpIAdd %int %293 %int_1
-               OpStore %i_2 %294
-               OpBranch %84
-         %85 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-        %295 = OpLoad %int %i_1
-        %296 = OpIAdd %int %295 %int_1
-               OpStore %i_1 %296
-               OpBranch %71
-         %72 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-        %297 = OpLoad %int %i
-        %298 = OpIAdd %int %297 %int_1
-               OpStore %i %298
-               OpBranch %57
-         %58 = OpLabel
-        %299 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %300 = OpLoad %float %299
-               OpStore %sum %300
-        %301 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %302 = OpLoad %int %301
-               OpStore %r %302
-               OpBranch %303
-        %303 = OpLabel
-               OpLoopMerge %304 %305 None
-               OpBranch %306
-        %306 = OpLabel
-        %307 = OpLoad %int %x_GLF_global_loop_count
-        %308 = OpSLessThan %bool %307 %int_100
-               OpSelectionMerge %309 None
-               OpBranchConditional %308 %310 %311
-        %310 = OpLabel
-               OpBranch %309
-        %311 = OpLabel
-               OpBranch %304
-        %309 = OpLabel
-        %312 = OpLoad %int %x_GLF_global_loop_count
-        %313 = OpIAdd %int %312 %int_1
-               OpStore %x_GLF_global_loop_count %313
-        %314 = OpLoad %float %f
-        %315 = OpLoad %float %sum
-        %316 = OpFAdd %float %315 %314
-               OpStore %sum %316
-               OpBranch %305
-        %305 = OpLabel
-        %317 = OpLoad %int %r
-        %318 = OpIAdd %int %317 %int_1
-               OpStore %r %318
-               OpBranch %303
-        %304 = OpLabel
-        %319 = OpLoad %float %sum
-        %320 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-        %321 = OpLoad %float %320
-        %322 = OpFOrdEqual %bool %319 %321
-               OpSelectionMerge %323 None
-               OpBranchConditional %322 %324 %325
-        %324 = OpLabel
-        %326 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %327 = OpLoad %int %326
-        %328 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %329 = OpLoad %int %328
-        %330 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %331 = OpLoad %int %330
-        %332 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %333 = OpLoad %int %332
-        %334 = OpConvertSToF %float %327
-        %335 = OpConvertSToF %float %329
-        %336 = OpConvertSToF %float %331
-        %337 = OpConvertSToF %float %333
-        %338 = OpCompositeConstruct %v4float %334 %335 %336 %337
-               OpStore %x_GLF_color %338
-               OpBranch %323
-        %325 = OpLabel
-        %339 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %340 = OpLoad %int %339
-        %341 = OpConvertSToF %float %340
-        %342 = OpCompositeConstruct %v4float %341 %341 %341 %341
-               OpStore %x_GLF_color %342
-               OpBranch %323
-        %323 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %343
-        %346 = OpLabel
-        %347 = OpFunctionCall %void %main_1
-        %348 = OpLoad %v4float %x_GLF_color
-        %349 = OpCompositeConstruct %main_out %348
-               OpReturnValue %349
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %351 = OpLabel
-        %352 = OpFunctionCall %main_out %main_inner
-        %353 = OpCompositeExtract %v4float %352 0
-               OpStore %x_GLF_color_1_1 %353
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ed88017..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,332 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var i_3 : i32;
-  var i_4 : i32;
-  var i_5 : i32;
-  var i_6 : i32;
-  var i_7 : i32;
-  var i_8 : i32;
-  var i_9 : i32;
-  var i_10 : i32;
-  var i_11 : i32;
-  var i_12 : i32;
-  var i_13 : i32;
-  var i_14 : i32;
-  var sum : f32;
-  var r : i32;
-  x_GLF_global_loop_count = 0;
-  let x_53 : f32 = x_7.x_GLF_uniform_float_values[1];
-  f = x_53;
-  let x_55 : i32 = x_10.x_GLF_uniform_int_values[1];
-  i = x_55;
-  loop {
-    let x_60 : i32 = i;
-    let x_62 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-    let x_66 : i32 = x_10.x_GLF_uniform_int_values[1];
-    i_1 = x_66;
-    loop {
-      let x_71 : i32 = i_1;
-      let x_73 : i32 = x_10.x_GLF_uniform_int_values[0];
-      if ((x_71 < x_73)) {
-      } else {
-        break;
-      }
-      let x_77 : i32 = x_10.x_GLF_uniform_int_values[1];
-      i_2 = x_77;
-      loop {
-        let x_82 : i32 = i_2;
-        let x_84 : i32 = x_10.x_GLF_uniform_int_values[0];
-        if ((x_82 < x_84)) {
-        } else {
-          break;
-        }
-        let x_88 : i32 = x_10.x_GLF_uniform_int_values[1];
-        i_3 = x_88;
-        loop {
-          let x_93 : i32 = i_3;
-          let x_95 : i32 = x_10.x_GLF_uniform_int_values[0];
-          if ((x_93 < x_95)) {
-          } else {
-            break;
-          }
-          let x_99 : i32 = x_10.x_GLF_uniform_int_values[1];
-          i_4 = x_99;
-          loop {
-            let x_104 : i32 = i_4;
-            let x_106 : i32 = x_10.x_GLF_uniform_int_values[0];
-            if ((x_104 < x_106)) {
-            } else {
-              break;
-            }
-            let x_110 : i32 = x_10.x_GLF_uniform_int_values[1];
-            i_5 = x_110;
-            loop {
-              let x_115 : i32 = i_5;
-              let x_117 : i32 = x_10.x_GLF_uniform_int_values[0];
-              if ((x_115 < x_117)) {
-              } else {
-                break;
-              }
-              let x_121 : i32 = x_10.x_GLF_uniform_int_values[1];
-              i_6 = x_121;
-              loop {
-                let x_126 : i32 = i_6;
-                let x_128 : i32 = x_10.x_GLF_uniform_int_values[0];
-                if ((x_126 < x_128)) {
-                } else {
-                  break;
-                }
-                let x_132 : i32 = x_10.x_GLF_uniform_int_values[1];
-                i_7 = x_132;
-                loop {
-                  let x_137 : i32 = i_7;
-                  let x_139 : i32 = x_10.x_GLF_uniform_int_values[0];
-                  if ((x_137 < x_139)) {
-                  } else {
-                    break;
-                  }
-                  let x_143 : i32 = x_10.x_GLF_uniform_int_values[1];
-                  i_8 = x_143;
-                  loop {
-                    let x_148 : i32 = i_8;
-                    let x_150 : i32 = x_10.x_GLF_uniform_int_values[0];
-                    if ((x_148 < x_150)) {
-                    } else {
-                      break;
-                    }
-                    let x_154 : i32 = x_10.x_GLF_uniform_int_values[1];
-                    i_9 = x_154;
-                    loop {
-                      let x_159 : i32 = i_9;
-                      let x_161 : i32 = x_10.x_GLF_uniform_int_values[0];
-                      if ((x_159 < x_161)) {
-                      } else {
-                        break;
-                      }
-                      let x_165 : i32 = x_10.x_GLF_uniform_int_values[1];
-                      i_10 = x_165;
-                      loop {
-                        let x_170 : i32 = i_10;
-                        let x_172 : i32 = x_10.x_GLF_uniform_int_values[0];
-                        if ((x_170 < x_172)) {
-                        } else {
-                          break;
-                        }
-                        let x_176 : i32 = x_10.x_GLF_uniform_int_values[1];
-                        i_11 = x_176;
-                        loop {
-                          let x_181 : i32 = i_11;
-                          let x_183 : i32 = x_10.x_GLF_uniform_int_values[2];
-                          if ((x_181 < x_183)) {
-                          } else {
-                            break;
-                          }
-                          let x_187 : i32 = x_10.x_GLF_uniform_int_values[1];
-                          i_12 = x_187;
-                          loop {
-                            let x_192 : i32 = i_12;
-                            let x_194 : i32 = x_10.x_GLF_uniform_int_values[0];
-                            if ((x_192 < x_194)) {
-                            } else {
-                              break;
-                            }
-                            let x_198 : i32 = x_10.x_GLF_uniform_int_values[1];
-                            i_13 = x_198;
-                            loop {
-                              let x_203 : i32 = i_13;
-                              let x_205 : i32 = x_10.x_GLF_uniform_int_values[0];
-                              if ((x_203 < x_205)) {
-                              } else {
-                                break;
-                              }
-                              let x_209 : i32 = x_10.x_GLF_uniform_int_values[1];
-                              i_14 = x_209;
-                              loop {
-                                let x_214 : i32 = i_14;
-                                let x_216 : i32 = x_10.x_GLF_uniform_int_values[2];
-                                if ((x_214 < x_216)) {
-                                } else {
-                                  break;
-                                }
-                                loop {
-                                  let x_223 : i32 = x_GLF_global_loop_count;
-                                  x_GLF_global_loop_count = (x_223 + 1);
-
-                                  continuing {
-                                    let x_225 : i32 = x_GLF_global_loop_count;
-                                    let x_227 : i32 = x_10.x_GLF_uniform_int_values[3];
-                                    if ((x_225 < (100 - x_227))) {
-                                    } else {
-                                      break;
-                                    }
-                                  }
-                                }
-                                let x_231 : f32 = x_7.x_GLF_uniform_float_values[0];
-                                let x_232 : f32 = f;
-                                f = (x_232 + x_231);
-
-                                continuing {
-                                  let x_234 : i32 = i_14;
-                                  i_14 = (x_234 + 1);
-                                }
-                              }
-
-                              continuing {
-                                let x_236 : i32 = i_13;
-                                i_13 = (x_236 + 1);
-                              }
-                            }
-
-                            continuing {
-                              let x_238 : i32 = i_12;
-                              i_12 = (x_238 + 1);
-                            }
-                          }
-
-                          continuing {
-                            let x_240 : i32 = i_11;
-                            i_11 = (x_240 + 1);
-                          }
-                        }
-
-                        continuing {
-                          let x_242 : i32 = i_10;
-                          i_10 = (x_242 + 1);
-                        }
-                      }
-
-                      continuing {
-                        let x_244 : i32 = i_9;
-                        i_9 = (x_244 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_246 : i32 = i_8;
-                      i_8 = (x_246 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_248 : i32 = i_7;
-                    i_7 = (x_248 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_250 : i32 = i_6;
-                  i_6 = (x_250 + 1);
-                }
-              }
-
-              continuing {
-                let x_252 : i32 = i_5;
-                i_5 = (x_252 + 1);
-              }
-            }
-
-            continuing {
-              let x_254 : i32 = i_4;
-              i_4 = (x_254 + 1);
-            }
-          }
-
-          continuing {
-            let x_256 : i32 = i_3;
-            i_3 = (x_256 + 1);
-          }
-        }
-
-        continuing {
-          let x_258 : i32 = i_2;
-          i_2 = (x_258 + 1);
-        }
-      }
-
-      continuing {
-        let x_260 : i32 = i_1;
-        i_1 = (x_260 + 1);
-      }
-    }
-
-    continuing {
-      let x_262 : i32 = i;
-      i = (x_262 + 1);
-    }
-  }
-  let x_265 : f32 = x_7.x_GLF_uniform_float_values[1];
-  sum = x_265;
-  let x_267 : i32 = x_10.x_GLF_uniform_int_values[1];
-  r = x_267;
-  loop {
-    let x_272 : i32 = x_GLF_global_loop_count;
-    if ((x_272 < 100)) {
-    } else {
-      break;
-    }
-    let x_275 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_275 + 1);
-    let x_277 : f32 = f;
-    let x_278 : f32 = sum;
-    sum = (x_278 + x_277);
-
-    continuing {
-      let x_280 : i32 = r;
-      r = (x_280 + 1);
-    }
-  }
-  let x_282 : f32 = sum;
-  let x_284 : f32 = x_7.x_GLF_uniform_float_values[2];
-  if ((x_282 == x_284)) {
-    let x_290 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_293 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_296 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_299 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_290), f32(x_293), f32(x_296), f32(x_299));
-  } else {
-    let x_303 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_304 : f32 = f32(x_303);
-    x_GLF_color = vec4<f32>(x_304, x_304, x_304, x_304);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 20ec5cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,3 +0,0 @@
-SKIP: FAILED
-
-test timed out after 30s
\ No newline at end of file
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.msl
deleted file mode 100644
index af64e54..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,328 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int i_4 = 0;
-  int i_5 = 0;
-  int i_6 = 0;
-  int i_7 = 0;
-  int i_8 = 0;
-  int i_9 = 0;
-  int i_10 = 0;
-  int i_11 = 0;
-  int i_12 = 0;
-  int i_13 = 0;
-  int i_14 = 0;
-  float sum = 0.0f;
-  int r = 0;
-  *(tint_symbol_3) = 0;
-  float const x_53 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  f = x_53;
-  int const x_55 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  i = x_55;
-  while (true) {
-    int const x_60 = i;
-    int const x_62 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-    int const x_66 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    i_1 = x_66;
-    while (true) {
-      int const x_71 = i_1;
-      int const x_73 = x_10.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_71 < x_73)) {
-      } else {
-        break;
-      }
-      int const x_77 = x_10.x_GLF_uniform_int_values.arr[1].el;
-      i_2 = x_77;
-      while (true) {
-        int const x_82 = i_2;
-        int const x_84 = x_10.x_GLF_uniform_int_values.arr[0].el;
-        if ((x_82 < x_84)) {
-        } else {
-          break;
-        }
-        int const x_88 = x_10.x_GLF_uniform_int_values.arr[1].el;
-        i_3 = x_88;
-        while (true) {
-          int const x_93 = i_3;
-          int const x_95 = x_10.x_GLF_uniform_int_values.arr[0].el;
-          if ((x_93 < x_95)) {
-          } else {
-            break;
-          }
-          int const x_99 = x_10.x_GLF_uniform_int_values.arr[1].el;
-          i_4 = x_99;
-          while (true) {
-            int const x_104 = i_4;
-            int const x_106 = x_10.x_GLF_uniform_int_values.arr[0].el;
-            if ((x_104 < x_106)) {
-            } else {
-              break;
-            }
-            int const x_110 = x_10.x_GLF_uniform_int_values.arr[1].el;
-            i_5 = x_110;
-            while (true) {
-              int const x_115 = i_5;
-              int const x_117 = x_10.x_GLF_uniform_int_values.arr[0].el;
-              if ((x_115 < x_117)) {
-              } else {
-                break;
-              }
-              int const x_121 = x_10.x_GLF_uniform_int_values.arr[1].el;
-              i_6 = x_121;
-              while (true) {
-                int const x_126 = i_6;
-                int const x_128 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                if ((x_126 < x_128)) {
-                } else {
-                  break;
-                }
-                int const x_132 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                i_7 = x_132;
-                while (true) {
-                  int const x_137 = i_7;
-                  int const x_139 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                  if ((x_137 < x_139)) {
-                  } else {
-                    break;
-                  }
-                  int const x_143 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                  i_8 = x_143;
-                  while (true) {
-                    int const x_148 = i_8;
-                    int const x_150 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                    if ((x_148 < x_150)) {
-                    } else {
-                      break;
-                    }
-                    int const x_154 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                    i_9 = x_154;
-                    while (true) {
-                      int const x_159 = i_9;
-                      int const x_161 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                      if ((x_159 < x_161)) {
-                      } else {
-                        break;
-                      }
-                      int const x_165 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                      i_10 = x_165;
-                      while (true) {
-                        int const x_170 = i_10;
-                        int const x_172 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                        if ((x_170 < x_172)) {
-                        } else {
-                          break;
-                        }
-                        int const x_176 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                        i_11 = x_176;
-                        while (true) {
-                          int const x_181 = i_11;
-                          int const x_183 = x_10.x_GLF_uniform_int_values.arr[2].el;
-                          if ((x_181 < x_183)) {
-                          } else {
-                            break;
-                          }
-                          int const x_187 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                          i_12 = x_187;
-                          while (true) {
-                            int const x_192 = i_12;
-                            int const x_194 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                            if ((x_192 < x_194)) {
-                            } else {
-                              break;
-                            }
-                            int const x_198 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                            i_13 = x_198;
-                            while (true) {
-                              int const x_203 = i_13;
-                              int const x_205 = x_10.x_GLF_uniform_int_values.arr[0].el;
-                              if ((x_203 < x_205)) {
-                              } else {
-                                break;
-                              }
-                              int const x_209 = x_10.x_GLF_uniform_int_values.arr[1].el;
-                              i_14 = x_209;
-                              while (true) {
-                                int const x_214 = i_14;
-                                int const x_216 = x_10.x_GLF_uniform_int_values.arr[2].el;
-                                if ((x_214 < x_216)) {
-                                } else {
-                                  break;
-                                }
-                                while (true) {
-                                  int const x_223 = *(tint_symbol_3);
-                                  *(tint_symbol_3) = as_type<int>((as_type<uint>(x_223) + as_type<uint>(1)));
-                                  {
-                                    int const x_225 = *(tint_symbol_3);
-                                    int const x_227 = x_10.x_GLF_uniform_int_values.arr[3].el;
-                                    if ((x_225 < as_type<int>((as_type<uint>(100) - as_type<uint>(x_227))))) {
-                                    } else {
-                                      break;
-                                    }
-                                  }
-                                }
-                                float const x_231 = x_7.x_GLF_uniform_float_values.arr[0].el;
-                                float const x_232 = f;
-                                f = (x_232 + x_231);
-                                {
-                                  int const x_234 = i_14;
-                                  i_14 = as_type<int>((as_type<uint>(x_234) + as_type<uint>(1)));
-                                }
-                              }
-                              {
-                                int const x_236 = i_13;
-                                i_13 = as_type<int>((as_type<uint>(x_236) + as_type<uint>(1)));
-                              }
-                            }
-                            {
-                              int const x_238 = i_12;
-                              i_12 = as_type<int>((as_type<uint>(x_238) + as_type<uint>(1)));
-                            }
-                          }
-                          {
-                            int const x_240 = i_11;
-                            i_11 = as_type<int>((as_type<uint>(x_240) + as_type<uint>(1)));
-                          }
-                        }
-                        {
-                          int const x_242 = i_10;
-                          i_10 = as_type<int>((as_type<uint>(x_242) + as_type<uint>(1)));
-                        }
-                      }
-                      {
-                        int const x_244 = i_9;
-                        i_9 = as_type<int>((as_type<uint>(x_244) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_246 = i_8;
-                      i_8 = as_type<int>((as_type<uint>(x_246) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_248 = i_7;
-                    i_7 = as_type<int>((as_type<uint>(x_248) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_250 = i_6;
-                  i_6 = as_type<int>((as_type<uint>(x_250) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_252 = i_5;
-                i_5 = as_type<int>((as_type<uint>(x_252) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_254 = i_4;
-              i_4 = as_type<int>((as_type<uint>(x_254) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_256 = i_3;
-            i_3 = as_type<int>((as_type<uint>(x_256) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_258 = i_2;
-          i_2 = as_type<int>((as_type<uint>(x_258) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_260 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_260) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_262 = i;
-      i = as_type<int>((as_type<uint>(x_262) + as_type<uint>(1)));
-    }
-  }
-  float const x_265 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  sum = x_265;
-  int const x_267 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  r = x_267;
-  while (true) {
-    int const x_272 = *(tint_symbol_3);
-    if ((x_272 < 100)) {
-    } else {
-      break;
-    }
-    int const x_275 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_275) + as_type<uint>(1)));
-    float const x_277 = f;
-    float const x_278 = sum;
-    sum = (x_278 + x_277);
-    {
-      int const x_280 = r;
-      r = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
-    }
-  }
-  float const x_282 = sum;
-  float const x_284 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  if ((x_282 == x_284)) {
-    int const x_290 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_293 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_296 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_299 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_290), float(x_293), float(x_296), float(x_299));
-  } else {
-    int const x_303 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_304 = float(x_303);
-    *(tint_symbol_4) = float4(x_304, x_304, x_304, x_304);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_10, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_10, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 90751e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,609 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 354
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_global_loop_count "x_GLF_global_loop_count"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %i_3 "i_3"
-               OpName %i_4 "i_4"
-               OpName %i_5 "i_5"
-               OpName %i_6 "i_6"
-               OpName %i_7 "i_7"
-               OpName %i_8 "i_8"
-               OpName %i_9 "i_9"
-               OpName %i_10 "i_10"
-               OpName %i_11 "i_11"
-               OpName %i_12 "i_12"
-               OpName %i_13 "i_13"
-               OpName %i_14 "i_14"
-               OpName %sum "sum"
-               OpName %r "r"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-%x_GLF_global_loop_count = OpVariable %_ptr_Private_int Private %9
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf0 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-    %int_100 = OpConstant %int 100
-   %main_out = OpTypeStruct %v4float
-        %343 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %29
-          %i = OpVariable %_ptr_Function_int Function %9
-        %i_1 = OpVariable %_ptr_Function_int Function %9
-        %i_2 = OpVariable %_ptr_Function_int Function %9
-        %i_3 = OpVariable %_ptr_Function_int Function %9
-        %i_4 = OpVariable %_ptr_Function_int Function %9
-        %i_5 = OpVariable %_ptr_Function_int Function %9
-        %i_6 = OpVariable %_ptr_Function_int Function %9
-        %i_7 = OpVariable %_ptr_Function_int Function %9
-        %i_8 = OpVariable %_ptr_Function_int Function %9
-        %i_9 = OpVariable %_ptr_Function_int Function %9
-       %i_10 = OpVariable %_ptr_Function_int Function %9
-       %i_11 = OpVariable %_ptr_Function_int Function %9
-       %i_12 = OpVariable %_ptr_Function_int Function %9
-       %i_13 = OpVariable %_ptr_Function_int Function %9
-       %i_14 = OpVariable %_ptr_Function_int Function %9
-        %sum = OpVariable %_ptr_Function_float Function %29
-          %r = OpVariable %_ptr_Function_int Function %9
-               OpStore %x_GLF_global_loop_count %int_0
-         %52 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %53 = OpLoad %float %52
-               OpStore %f %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %56 = OpLoad %int %55
-               OpStore %i %56
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %i
-         %62 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpSLessThan %bool %61 %63
-               OpSelectionMerge %66 None
-               OpBranchConditional %64 %67 %68
-         %67 = OpLabel
-               OpBranch %66
-         %68 = OpLabel
-               OpBranch %58
-         %66 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %70 = OpLoad %int %69
-               OpStore %i_1 %70
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %i_1
-         %76 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpSLessThan %bool %75 %77
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %72
-         %79 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %83 = OpLoad %int %82
-               OpStore %i_2 %83
-               OpBranch %84
-         %84 = OpLabel
-               OpLoopMerge %85 %86 None
-               OpBranch %87
-         %87 = OpLabel
-         %88 = OpLoad %int %i_2
-         %89 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %90 = OpLoad %int %89
-         %91 = OpSLessThan %bool %88 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %94
-         %93 = OpLabel
-               OpBranch %92
-         %94 = OpLabel
-               OpBranch %85
-         %92 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %96 = OpLoad %int %95
-               OpStore %i_3 %96
-               OpBranch %97
-         %97 = OpLabel
-               OpLoopMerge %98 %99 None
-               OpBranch %100
-        %100 = OpLabel
-        %101 = OpLoad %int %i_3
-        %102 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %103 = OpLoad %int %102
-        %104 = OpSLessThan %bool %101 %103
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %107
-        %106 = OpLabel
-               OpBranch %105
-        %107 = OpLabel
-               OpBranch %98
-        %105 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %109 = OpLoad %int %108
-               OpStore %i_4 %109
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %i_4
-        %115 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %116 = OpLoad %int %115
-        %117 = OpSLessThan %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-               OpBranch %118
-        %120 = OpLabel
-               OpBranch %111
-        %118 = OpLabel
-        %121 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %122 = OpLoad %int %121
-               OpStore %i_5 %122
-               OpBranch %123
-        %123 = OpLabel
-               OpLoopMerge %124 %125 None
-               OpBranch %126
-        %126 = OpLabel
-        %127 = OpLoad %int %i_5
-        %128 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %129 = OpLoad %int %128
-        %130 = OpSLessThan %bool %127 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %133
-        %132 = OpLabel
-               OpBranch %131
-        %133 = OpLabel
-               OpBranch %124
-        %131 = OpLabel
-        %134 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %135 = OpLoad %int %134
-               OpStore %i_6 %135
-               OpBranch %136
-        %136 = OpLabel
-               OpLoopMerge %137 %138 None
-               OpBranch %139
-        %139 = OpLabel
-        %140 = OpLoad %int %i_6
-        %141 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %142 = OpLoad %int %141
-        %143 = OpSLessThan %bool %140 %142
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %146
-        %145 = OpLabel
-               OpBranch %144
-        %146 = OpLabel
-               OpBranch %137
-        %144 = OpLabel
-        %147 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %148 = OpLoad %int %147
-               OpStore %i_7 %148
-               OpBranch %149
-        %149 = OpLabel
-               OpLoopMerge %150 %151 None
-               OpBranch %152
-        %152 = OpLabel
-        %153 = OpLoad %int %i_7
-        %154 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %155 = OpLoad %int %154
-        %156 = OpSLessThan %bool %153 %155
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %159
-        %158 = OpLabel
-               OpBranch %157
-        %159 = OpLabel
-               OpBranch %150
-        %157 = OpLabel
-        %160 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %161 = OpLoad %int %160
-               OpStore %i_8 %161
-               OpBranch %162
-        %162 = OpLabel
-               OpLoopMerge %163 %164 None
-               OpBranch %165
-        %165 = OpLabel
-        %166 = OpLoad %int %i_8
-        %167 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %168 = OpLoad %int %167
-        %169 = OpSLessThan %bool %166 %168
-               OpSelectionMerge %170 None
-               OpBranchConditional %169 %171 %172
-        %171 = OpLabel
-               OpBranch %170
-        %172 = OpLabel
-               OpBranch %163
-        %170 = OpLabel
-        %173 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %174 = OpLoad %int %173
-               OpStore %i_9 %174
-               OpBranch %175
-        %175 = OpLabel
-               OpLoopMerge %176 %177 None
-               OpBranch %178
-        %178 = OpLabel
-        %179 = OpLoad %int %i_9
-        %180 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %181 = OpLoad %int %180
-        %182 = OpSLessThan %bool %179 %181
-               OpSelectionMerge %183 None
-               OpBranchConditional %182 %184 %185
-        %184 = OpLabel
-               OpBranch %183
-        %185 = OpLabel
-               OpBranch %176
-        %183 = OpLabel
-        %186 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %187 = OpLoad %int %186
-               OpStore %i_10 %187
-               OpBranch %188
-        %188 = OpLabel
-               OpLoopMerge %189 %190 None
-               OpBranch %191
-        %191 = OpLabel
-        %192 = OpLoad %int %i_10
-        %193 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %194 = OpLoad %int %193
-        %195 = OpSLessThan %bool %192 %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %198
-        %197 = OpLabel
-               OpBranch %196
-        %198 = OpLabel
-               OpBranch %189
-        %196 = OpLabel
-        %199 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %200 = OpLoad %int %199
-               OpStore %i_11 %200
-               OpBranch %201
-        %201 = OpLabel
-               OpLoopMerge %202 %203 None
-               OpBranch %204
-        %204 = OpLabel
-        %205 = OpLoad %int %i_11
-        %207 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %208 = OpLoad %int %207
-        %209 = OpSLessThan %bool %205 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %212
-        %211 = OpLabel
-               OpBranch %210
-        %212 = OpLabel
-               OpBranch %202
-        %210 = OpLabel
-        %213 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %214 = OpLoad %int %213
-               OpStore %i_12 %214
-               OpBranch %215
-        %215 = OpLabel
-               OpLoopMerge %216 %217 None
-               OpBranch %218
-        %218 = OpLabel
-        %219 = OpLoad %int %i_12
-        %220 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %221 = OpLoad %int %220
-        %222 = OpSLessThan %bool %219 %221
-               OpSelectionMerge %223 None
-               OpBranchConditional %222 %224 %225
-        %224 = OpLabel
-               OpBranch %223
-        %225 = OpLabel
-               OpBranch %216
-        %223 = OpLabel
-        %226 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %227 = OpLoad %int %226
-               OpStore %i_13 %227
-               OpBranch %228
-        %228 = OpLabel
-               OpLoopMerge %229 %230 None
-               OpBranch %231
-        %231 = OpLabel
-        %232 = OpLoad %int %i_13
-        %233 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %234 = OpLoad %int %233
-        %235 = OpSLessThan %bool %232 %234
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %238
-        %237 = OpLabel
-               OpBranch %236
-        %238 = OpLabel
-               OpBranch %229
-        %236 = OpLabel
-        %239 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %240 = OpLoad %int %239
-               OpStore %i_14 %240
-               OpBranch %241
-        %241 = OpLabel
-               OpLoopMerge %242 %243 None
-               OpBranch %244
-        %244 = OpLabel
-        %245 = OpLoad %int %i_14
-        %246 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %247 = OpLoad %int %246
-        %248 = OpSLessThan %bool %245 %247
-               OpSelectionMerge %249 None
-               OpBranchConditional %248 %250 %251
-        %250 = OpLabel
-               OpBranch %249
-        %251 = OpLabel
-               OpBranch %242
-        %249 = OpLabel
-               OpBranch %252
-        %252 = OpLabel
-               OpLoopMerge %253 %254 None
-               OpBranch %255
-        %255 = OpLabel
-        %256 = OpLoad %int %x_GLF_global_loop_count
-        %257 = OpIAdd %int %256 %int_1
-               OpStore %x_GLF_global_loop_count %257
-               OpBranch %254
-        %254 = OpLabel
-        %258 = OpLoad %int %x_GLF_global_loop_count
-        %260 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %261 = OpLoad %int %260
-        %263 = OpISub %int %int_100 %261
-        %264 = OpSLessThan %bool %258 %263
-               OpBranchConditional %264 %252 %253
-        %253 = OpLabel
-        %265 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-        %266 = OpLoad %float %265
-        %267 = OpLoad %float %f
-        %268 = OpFAdd %float %267 %266
-               OpStore %f %268
-               OpBranch %243
-        %243 = OpLabel
-        %269 = OpLoad %int %i_14
-        %270 = OpIAdd %int %269 %int_1
-               OpStore %i_14 %270
-               OpBranch %241
-        %242 = OpLabel
-               OpBranch %230
-        %230 = OpLabel
-        %271 = OpLoad %int %i_13
-        %272 = OpIAdd %int %271 %int_1
-               OpStore %i_13 %272
-               OpBranch %228
-        %229 = OpLabel
-               OpBranch %217
-        %217 = OpLabel
-        %273 = OpLoad %int %i_12
-        %274 = OpIAdd %int %273 %int_1
-               OpStore %i_12 %274
-               OpBranch %215
-        %216 = OpLabel
-               OpBranch %203
-        %203 = OpLabel
-        %275 = OpLoad %int %i_11
-        %276 = OpIAdd %int %275 %int_1
-               OpStore %i_11 %276
-               OpBranch %201
-        %202 = OpLabel
-               OpBranch %190
-        %190 = OpLabel
-        %277 = OpLoad %int %i_10
-        %278 = OpIAdd %int %277 %int_1
-               OpStore %i_10 %278
-               OpBranch %188
-        %189 = OpLabel
-               OpBranch %177
-        %177 = OpLabel
-        %279 = OpLoad %int %i_9
-        %280 = OpIAdd %int %279 %int_1
-               OpStore %i_9 %280
-               OpBranch %175
-        %176 = OpLabel
-               OpBranch %164
-        %164 = OpLabel
-        %281 = OpLoad %int %i_8
-        %282 = OpIAdd %int %281 %int_1
-               OpStore %i_8 %282
-               OpBranch %162
-        %163 = OpLabel
-               OpBranch %151
-        %151 = OpLabel
-        %283 = OpLoad %int %i_7
-        %284 = OpIAdd %int %283 %int_1
-               OpStore %i_7 %284
-               OpBranch %149
-        %150 = OpLabel
-               OpBranch %138
-        %138 = OpLabel
-        %285 = OpLoad %int %i_6
-        %286 = OpIAdd %int %285 %int_1
-               OpStore %i_6 %286
-               OpBranch %136
-        %137 = OpLabel
-               OpBranch %125
-        %125 = OpLabel
-        %287 = OpLoad %int %i_5
-        %288 = OpIAdd %int %287 %int_1
-               OpStore %i_5 %288
-               OpBranch %123
-        %124 = OpLabel
-               OpBranch %112
-        %112 = OpLabel
-        %289 = OpLoad %int %i_4
-        %290 = OpIAdd %int %289 %int_1
-               OpStore %i_4 %290
-               OpBranch %110
-        %111 = OpLabel
-               OpBranch %99
-         %99 = OpLabel
-        %291 = OpLoad %int %i_3
-        %292 = OpIAdd %int %291 %int_1
-               OpStore %i_3 %292
-               OpBranch %97
-         %98 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-        %293 = OpLoad %int %i_2
-        %294 = OpIAdd %int %293 %int_1
-               OpStore %i_2 %294
-               OpBranch %84
-         %85 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-        %295 = OpLoad %int %i_1
-        %296 = OpIAdd %int %295 %int_1
-               OpStore %i_1 %296
-               OpBranch %71
-         %72 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-        %297 = OpLoad %int %i
-        %298 = OpIAdd %int %297 %int_1
-               OpStore %i %298
-               OpBranch %57
-         %58 = OpLabel
-        %299 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %300 = OpLoad %float %299
-               OpStore %sum %300
-        %301 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %302 = OpLoad %int %301
-               OpStore %r %302
-               OpBranch %303
-        %303 = OpLabel
-               OpLoopMerge %304 %305 None
-               OpBranch %306
-        %306 = OpLabel
-        %307 = OpLoad %int %x_GLF_global_loop_count
-        %308 = OpSLessThan %bool %307 %int_100
-               OpSelectionMerge %309 None
-               OpBranchConditional %308 %310 %311
-        %310 = OpLabel
-               OpBranch %309
-        %311 = OpLabel
-               OpBranch %304
-        %309 = OpLabel
-        %312 = OpLoad %int %x_GLF_global_loop_count
-        %313 = OpIAdd %int %312 %int_1
-               OpStore %x_GLF_global_loop_count %313
-        %314 = OpLoad %float %f
-        %315 = OpLoad %float %sum
-        %316 = OpFAdd %float %315 %314
-               OpStore %sum %316
-               OpBranch %305
-        %305 = OpLabel
-        %317 = OpLoad %int %r
-        %318 = OpIAdd %int %317 %int_1
-               OpStore %r %318
-               OpBranch %303
-        %304 = OpLabel
-        %319 = OpLoad %float %sum
-        %320 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-        %321 = OpLoad %float %320
-        %322 = OpFOrdEqual %bool %319 %321
-               OpSelectionMerge %323 None
-               OpBranchConditional %322 %324 %325
-        %324 = OpLabel
-        %326 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %327 = OpLoad %int %326
-        %328 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %329 = OpLoad %int %328
-        %330 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %331 = OpLoad %int %330
-        %332 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %333 = OpLoad %int %332
-        %334 = OpConvertSToF %float %327
-        %335 = OpConvertSToF %float %329
-        %336 = OpConvertSToF %float %331
-        %337 = OpConvertSToF %float %333
-        %338 = OpCompositeConstruct %v4float %334 %335 %336 %337
-               OpStore %x_GLF_color %338
-               OpBranch %323
-        %325 = OpLabel
-        %339 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %340 = OpLoad %int %339
-        %341 = OpConvertSToF %float %340
-        %342 = OpCompositeConstruct %v4float %341 %341 %341 %341
-               OpStore %x_GLF_color %342
-               OpBranch %323
-        %323 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %343
-        %346 = OpLabel
-        %347 = OpFunctionCall %void %main_1
-        %348 = OpLoad %v4float %x_GLF_color
-        %349 = OpCompositeConstruct %main_out %348
-               OpReturnValue %349
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %351 = OpLabel
-        %352 = OpFunctionCall %main_out %main_inner
-        %353 = OpCompositeExtract %v4float %352 0
-               OpStore %x_GLF_color_1_1 %353
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ed88017..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nested-loops-global-loop-counter-do-while-accumulate-float/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,332 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_global_loop_count : i32;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var i_3 : i32;
-  var i_4 : i32;
-  var i_5 : i32;
-  var i_6 : i32;
-  var i_7 : i32;
-  var i_8 : i32;
-  var i_9 : i32;
-  var i_10 : i32;
-  var i_11 : i32;
-  var i_12 : i32;
-  var i_13 : i32;
-  var i_14 : i32;
-  var sum : f32;
-  var r : i32;
-  x_GLF_global_loop_count = 0;
-  let x_53 : f32 = x_7.x_GLF_uniform_float_values[1];
-  f = x_53;
-  let x_55 : i32 = x_10.x_GLF_uniform_int_values[1];
-  i = x_55;
-  loop {
-    let x_60 : i32 = i;
-    let x_62 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_60 < x_62)) {
-    } else {
-      break;
-    }
-    let x_66 : i32 = x_10.x_GLF_uniform_int_values[1];
-    i_1 = x_66;
-    loop {
-      let x_71 : i32 = i_1;
-      let x_73 : i32 = x_10.x_GLF_uniform_int_values[0];
-      if ((x_71 < x_73)) {
-      } else {
-        break;
-      }
-      let x_77 : i32 = x_10.x_GLF_uniform_int_values[1];
-      i_2 = x_77;
-      loop {
-        let x_82 : i32 = i_2;
-        let x_84 : i32 = x_10.x_GLF_uniform_int_values[0];
-        if ((x_82 < x_84)) {
-        } else {
-          break;
-        }
-        let x_88 : i32 = x_10.x_GLF_uniform_int_values[1];
-        i_3 = x_88;
-        loop {
-          let x_93 : i32 = i_3;
-          let x_95 : i32 = x_10.x_GLF_uniform_int_values[0];
-          if ((x_93 < x_95)) {
-          } else {
-            break;
-          }
-          let x_99 : i32 = x_10.x_GLF_uniform_int_values[1];
-          i_4 = x_99;
-          loop {
-            let x_104 : i32 = i_4;
-            let x_106 : i32 = x_10.x_GLF_uniform_int_values[0];
-            if ((x_104 < x_106)) {
-            } else {
-              break;
-            }
-            let x_110 : i32 = x_10.x_GLF_uniform_int_values[1];
-            i_5 = x_110;
-            loop {
-              let x_115 : i32 = i_5;
-              let x_117 : i32 = x_10.x_GLF_uniform_int_values[0];
-              if ((x_115 < x_117)) {
-              } else {
-                break;
-              }
-              let x_121 : i32 = x_10.x_GLF_uniform_int_values[1];
-              i_6 = x_121;
-              loop {
-                let x_126 : i32 = i_6;
-                let x_128 : i32 = x_10.x_GLF_uniform_int_values[0];
-                if ((x_126 < x_128)) {
-                } else {
-                  break;
-                }
-                let x_132 : i32 = x_10.x_GLF_uniform_int_values[1];
-                i_7 = x_132;
-                loop {
-                  let x_137 : i32 = i_7;
-                  let x_139 : i32 = x_10.x_GLF_uniform_int_values[0];
-                  if ((x_137 < x_139)) {
-                  } else {
-                    break;
-                  }
-                  let x_143 : i32 = x_10.x_GLF_uniform_int_values[1];
-                  i_8 = x_143;
-                  loop {
-                    let x_148 : i32 = i_8;
-                    let x_150 : i32 = x_10.x_GLF_uniform_int_values[0];
-                    if ((x_148 < x_150)) {
-                    } else {
-                      break;
-                    }
-                    let x_154 : i32 = x_10.x_GLF_uniform_int_values[1];
-                    i_9 = x_154;
-                    loop {
-                      let x_159 : i32 = i_9;
-                      let x_161 : i32 = x_10.x_GLF_uniform_int_values[0];
-                      if ((x_159 < x_161)) {
-                      } else {
-                        break;
-                      }
-                      let x_165 : i32 = x_10.x_GLF_uniform_int_values[1];
-                      i_10 = x_165;
-                      loop {
-                        let x_170 : i32 = i_10;
-                        let x_172 : i32 = x_10.x_GLF_uniform_int_values[0];
-                        if ((x_170 < x_172)) {
-                        } else {
-                          break;
-                        }
-                        let x_176 : i32 = x_10.x_GLF_uniform_int_values[1];
-                        i_11 = x_176;
-                        loop {
-                          let x_181 : i32 = i_11;
-                          let x_183 : i32 = x_10.x_GLF_uniform_int_values[2];
-                          if ((x_181 < x_183)) {
-                          } else {
-                            break;
-                          }
-                          let x_187 : i32 = x_10.x_GLF_uniform_int_values[1];
-                          i_12 = x_187;
-                          loop {
-                            let x_192 : i32 = i_12;
-                            let x_194 : i32 = x_10.x_GLF_uniform_int_values[0];
-                            if ((x_192 < x_194)) {
-                            } else {
-                              break;
-                            }
-                            let x_198 : i32 = x_10.x_GLF_uniform_int_values[1];
-                            i_13 = x_198;
-                            loop {
-                              let x_203 : i32 = i_13;
-                              let x_205 : i32 = x_10.x_GLF_uniform_int_values[0];
-                              if ((x_203 < x_205)) {
-                              } else {
-                                break;
-                              }
-                              let x_209 : i32 = x_10.x_GLF_uniform_int_values[1];
-                              i_14 = x_209;
-                              loop {
-                                let x_214 : i32 = i_14;
-                                let x_216 : i32 = x_10.x_GLF_uniform_int_values[2];
-                                if ((x_214 < x_216)) {
-                                } else {
-                                  break;
-                                }
-                                loop {
-                                  let x_223 : i32 = x_GLF_global_loop_count;
-                                  x_GLF_global_loop_count = (x_223 + 1);
-
-                                  continuing {
-                                    let x_225 : i32 = x_GLF_global_loop_count;
-                                    let x_227 : i32 = x_10.x_GLF_uniform_int_values[3];
-                                    if ((x_225 < (100 - x_227))) {
-                                    } else {
-                                      break;
-                                    }
-                                  }
-                                }
-                                let x_231 : f32 = x_7.x_GLF_uniform_float_values[0];
-                                let x_232 : f32 = f;
-                                f = (x_232 + x_231);
-
-                                continuing {
-                                  let x_234 : i32 = i_14;
-                                  i_14 = (x_234 + 1);
-                                }
-                              }
-
-                              continuing {
-                                let x_236 : i32 = i_13;
-                                i_13 = (x_236 + 1);
-                              }
-                            }
-
-                            continuing {
-                              let x_238 : i32 = i_12;
-                              i_12 = (x_238 + 1);
-                            }
-                          }
-
-                          continuing {
-                            let x_240 : i32 = i_11;
-                            i_11 = (x_240 + 1);
-                          }
-                        }
-
-                        continuing {
-                          let x_242 : i32 = i_10;
-                          i_10 = (x_242 + 1);
-                        }
-                      }
-
-                      continuing {
-                        let x_244 : i32 = i_9;
-                        i_9 = (x_244 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_246 : i32 = i_8;
-                      i_8 = (x_246 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_248 : i32 = i_7;
-                    i_7 = (x_248 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_250 : i32 = i_6;
-                  i_6 = (x_250 + 1);
-                }
-              }
-
-              continuing {
-                let x_252 : i32 = i_5;
-                i_5 = (x_252 + 1);
-              }
-            }
-
-            continuing {
-              let x_254 : i32 = i_4;
-              i_4 = (x_254 + 1);
-            }
-          }
-
-          continuing {
-            let x_256 : i32 = i_3;
-            i_3 = (x_256 + 1);
-          }
-        }
-
-        continuing {
-          let x_258 : i32 = i_2;
-          i_2 = (x_258 + 1);
-        }
-      }
-
-      continuing {
-        let x_260 : i32 = i_1;
-        i_1 = (x_260 + 1);
-      }
-    }
-
-    continuing {
-      let x_262 : i32 = i;
-      i = (x_262 + 1);
-    }
-  }
-  let x_265 : f32 = x_7.x_GLF_uniform_float_values[1];
-  sum = x_265;
-  let x_267 : i32 = x_10.x_GLF_uniform_int_values[1];
-  r = x_267;
-  loop {
-    let x_272 : i32 = x_GLF_global_loop_count;
-    if ((x_272 < 100)) {
-    } else {
-      break;
-    }
-    let x_275 : i32 = x_GLF_global_loop_count;
-    x_GLF_global_loop_count = (x_275 + 1);
-    let x_277 : f32 = f;
-    let x_278 : f32 = sum;
-    sum = (x_278 + x_277);
-
-    continuing {
-      let x_280 : i32 = r;
-      r = (x_280 + 1);
-    }
-  }
-  let x_282 : f32 = sum;
-  let x_284 : f32 = x_7.x_GLF_uniform_float_values[2];
-  if ((x_282 == x_284)) {
-    let x_290 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_293 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_296 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_299 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_290), f32(x_293), f32(x_296), f32(x_299));
-  } else {
-    let x_303 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_304 : f32 = f32(x_303);
-    x_GLF_color = vec4<f32>(x_304, x_304, x_304, x_304);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 59ce8f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,126 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[19];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int A[17] = (int[17])0;
-  int ref[17] = (int[17])0;
-  int a = 0;
-  int i = 0;
-  bool ok = false;
-  int i_1 = 0;
-  const int x_52 = asint(x_6[2].x);
-  const int x_54 = asint(x_6[2].x);
-  const int x_56 = asint(x_6[2].x);
-  const int x_58 = asint(x_6[2].x);
-  const int x_60 = asint(x_6[2].x);
-  const int x_62 = asint(x_6[2].x);
-  const int x_64 = asint(x_6[2].x);
-  const int x_66 = asint(x_6[2].x);
-  const int x_68 = asint(x_6[2].x);
-  const int x_70 = asint(x_6[2].x);
-  const int x_72 = asint(x_6[2].x);
-  const int x_74 = asint(x_6[2].x);
-  const int x_76 = asint(x_6[2].x);
-  const int x_78 = asint(x_6[2].x);
-  const int x_80 = asint(x_6[2].x);
-  const int x_82 = asint(x_6[2].x);
-  const int x_84 = asint(x_6[2].x);
-  const int tint_symbol_2[17] = {x_52, x_54, x_56, x_58, x_60, x_62, x_64, x_66, x_68, x_70, x_72, x_74, x_76, x_78, x_80, x_82, x_84};
-  A = tint_symbol_2;
-  const int x_87 = asint(x_6[3].x);
-  const int x_89 = asint(x_6[4].x);
-  const int x_91 = asint(x_6[5].x);
-  const int x_93 = asint(x_6[6].x);
-  const int x_95 = asint(x_6[7].x);
-  const int x_97 = asint(x_6[8].x);
-  const int x_99 = asint(x_6[9].x);
-  const int x_101 = asint(x_6[10].x);
-  const int x_103 = asint(x_6[11].x);
-  const int x_105 = asint(x_6[12].x);
-  const int x_107 = asint(x_6[13].x);
-  const int x_109 = asint(x_6[14].x);
-  const int x_111 = asint(x_6[15].x);
-  const int x_113 = asint(x_6[16].x);
-  const int x_115 = asint(x_6[17].x);
-  const int x_117 = asint(x_6[18].x);
-  const int x_119 = asint(x_6[1].x);
-  const int tint_symbol_3[17] = {x_87, x_89, x_91, x_93, x_95, x_97, x_99, x_101, x_103, x_105, x_107, x_109, x_111, x_113, x_115, x_117, x_119};
-  ref = tint_symbol_3;
-  const int x_122 = asint(x_6[2].x);
-  a = x_122;
-  const int x_124 = asint(x_6[2].x);
-  i = x_124;
-  while (true) {
-    const int x_129 = i;
-    const int x_131 = asint(x_6[1].x);
-    if ((x_129 < x_131)) {
-    } else {
-      break;
-    }
-    const int x_134 = i;
-    const int x_135 = a;
-    a = (x_135 - 1);
-    A[x_134] = x_135;
-    const int x_138 = i;
-    const int x_140 = asint(x_6[2].x);
-    const int x_142 = asint(x_6[18].x);
-    const int x_144 = i;
-    const int x_146 = asint(x_6[3].x);
-    A[clamp(x_138, x_140, x_142)] = (x_144 + x_146);
-    {
-      i = (i + 1);
-    }
-  }
-  ok = true;
-  const int x_152 = asint(x_6[2].x);
-  i_1 = x_152;
-  while (true) {
-    const int x_157 = i_1;
-    const int x_159 = asint(x_6[1].x);
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    const int x_164 = A[i_1];
-    const int x_167 = ref[i_1];
-    if ((x_164 != x_167)) {
-      ok = false;
-    }
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const int x_174 = asint(x_6[2].x);
-  const float x_175 = float(x_174);
-  x_GLF_color = float4(x_175, x_175, x_175, x_175);
-  if (ok) {
-    const int x_181 = asint(x_6[3].x);
-    const int x_184 = asint(x_6[2].x);
-    const int x_187 = asint(x_6[2].x);
-    const int x_190 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_181), float(x_184), float(x_187), float(x_190));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7449600..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,144 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[19];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[17];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_1 A = {};
-  tint_array_wrapper_1 ref = {};
-  int a = 0;
-  int i = 0;
-  bool ok = false;
-  int i_1 = 0;
-  int const x_52 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_54 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_56 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_58 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_60 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_68 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_70 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_72 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_74 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_76 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_78 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_80 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_82 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_84 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_52, x_54, x_56, x_58, x_60, x_62, x_64, x_66, x_68, x_70, x_72, x_74, x_76, x_78, x_80, x_82, x_84}};
-  A = tint_symbol_2;
-  int const x_87 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_89 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_91 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_93 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_95 = x_6.x_GLF_uniform_int_values.arr[7].el;
-  int const x_97 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_99 = x_6.x_GLF_uniform_int_values.arr[9].el;
-  int const x_101 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  int const x_103 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_105 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_107 = x_6.x_GLF_uniform_int_values.arr[13].el;
-  int const x_109 = x_6.x_GLF_uniform_int_values.arr[14].el;
-  int const x_111 = x_6.x_GLF_uniform_int_values.arr[15].el;
-  int const x_113 = x_6.x_GLF_uniform_int_values.arr[16].el;
-  int const x_115 = x_6.x_GLF_uniform_int_values.arr[17].el;
-  int const x_117 = x_6.x_GLF_uniform_int_values.arr[18].el;
-  int const x_119 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  tint_array_wrapper_1 const tint_symbol_3 = {.arr={x_87, x_89, x_91, x_93, x_95, x_97, x_99, x_101, x_103, x_105, x_107, x_109, x_111, x_113, x_115, x_117, x_119}};
-  ref = tint_symbol_3;
-  int const x_122 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_122;
-  int const x_124 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_124;
-  while (true) {
-    int const x_129 = i;
-    int const x_131 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_129 < x_131)) {
-    } else {
-      break;
-    }
-    int const x_134 = i;
-    int const x_135 = a;
-    a = as_type<int>((as_type<uint>(x_135) - as_type<uint>(1)));
-    A.arr[x_134] = x_135;
-    int const x_138 = i;
-    int const x_140 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_142 = x_6.x_GLF_uniform_int_values.arr[18].el;
-    int const x_144 = i;
-    int const x_146 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    A.arr[clamp(x_138, x_140, x_142)] = as_type<int>((as_type<uint>(x_144) + as_type<uint>(x_146)));
-    {
-      int const x_149 = i;
-      i = as_type<int>((as_type<uint>(x_149) + as_type<uint>(1)));
-    }
-  }
-  ok = true;
-  int const x_152 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i_1 = x_152;
-  while (true) {
-    int const x_157 = i_1;
-    int const x_159 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    int const x_162 = i_1;
-    int const x_164 = A.arr[x_162];
-    int const x_165 = i_1;
-    int const x_167 = ref.arr[x_165];
-    if ((x_164 != x_167)) {
-      ok = false;
-    }
-    {
-      int const x_171 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_171) + as_type<uint>(1)));
-    }
-  }
-  int const x_174 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_175 = float(x_174);
-  *(tint_symbol_5) = float4(x_175, x_175, x_175, x_175);
-  bool const x_177 = ok;
-  if (x_177) {
-    int const x_181 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_184 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_187 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_190 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_5) = float4(float(x_181), float(x_184), float(x_187), float(x_190));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 40085c0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,292 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 214
-; Schema: 0
-               OpCapability Shader
-        %152 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %A "A"
-               OpName %ref "ref"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %ok "ok"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_19 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_17 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_19 = OpConstant %uint 19
-%_arr_int_uint_19 = OpTypeArray %int %uint_19
-       %buf0 = OpTypeStruct %_arr_int_uint_19
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %uint_17 = OpConstant %uint 17
-%_arr_int_uint_17 = OpTypeArray %int %uint_17
-%_ptr_Function__arr_int_uint_17 = OpTypePointer Function %_arr_int_uint_17
-         %23 = OpConstantNull %_arr_int_uint_17
-%_ptr_Function_int = OpTypePointer Function %int
-         %27 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-     %int_11 = OpConstant %int 11
-     %int_12 = OpConstant %int 12
-     %int_13 = OpConstant %int 13
-     %int_14 = OpConstant %int 14
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-     %int_17 = OpConstant %int 17
-     %int_18 = OpConstant %int 18
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-        %203 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_int_uint_17 Function %23
-        %ref = OpVariable %_ptr_Function__arr_int_uint_17 Function %23
-          %a = OpVariable %_ptr_Function_int Function %27
-          %i = OpVariable %_ptr_Function_int Function %27
-         %ok = OpVariable %_ptr_Function_bool Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %27
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %38 = OpLoad %int %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %40 = OpLoad %int %39
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %70 = OpLoad %int %69
-         %71 = OpCompositeConstruct %_arr_int_uint_17 %38 %40 %42 %44 %46 %48 %50 %52 %54 %56 %58 %60 %62 %64 %66 %68 %70
-               OpStore %A %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %74 = OpLoad %int %73
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %77 = OpLoad %int %76
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %80 = OpLoad %int %79
-         %82 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-         %83 = OpLoad %int %82
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-         %86 = OpLoad %int %85
-         %88 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-         %89 = OpLoad %int %88
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-         %92 = OpLoad %int %91
-         %94 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-         %95 = OpLoad %int %94
-         %97 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-         %98 = OpLoad %int %97
-        %100 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-        %101 = OpLoad %int %100
-        %103 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_13
-        %104 = OpLoad %int %103
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_14
-        %107 = OpLoad %int %106
-        %109 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_15
-        %110 = OpLoad %int %109
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_16
-        %113 = OpLoad %int %112
-        %115 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_17
-        %116 = OpLoad %int %115
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_18
-        %119 = OpLoad %int %118
-        %121 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %122 = OpLoad %int %121
-        %123 = OpCompositeConstruct %_arr_int_uint_17 %74 %77 %80 %83 %86 %89 %92 %95 %98 %101 %104 %107 %110 %113 %116 %119 %122
-               OpStore %ref %123
-        %124 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %125 = OpLoad %int %124
-               OpStore %a %125
-        %126 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %127 = OpLoad %int %126
-               OpStore %i %127
-               OpBranch %128
-        %128 = OpLabel
-               OpLoopMerge %129 %130 None
-               OpBranch %131
-        %131 = OpLabel
-        %132 = OpLoad %int %i
-        %133 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %134 = OpLoad %int %133
-        %135 = OpSLessThan %bool %132 %134
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %138
-        %137 = OpLabel
-               OpBranch %136
-        %138 = OpLabel
-               OpBranch %129
-        %136 = OpLabel
-        %139 = OpLoad %int %i
-        %140 = OpLoad %int %a
-        %141 = OpISub %int %140 %int_1
-               OpStore %a %141
-        %142 = OpAccessChain %_ptr_Function_int %A %139
-               OpStore %142 %140
-        %143 = OpLoad %int %i
-        %144 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %145 = OpLoad %int %144
-        %146 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_18
-        %147 = OpLoad %int %146
-        %148 = OpLoad %int %i
-        %149 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %150 = OpLoad %int %149
-        %151 = OpExtInst %int %152 SClamp %143 %145 %147
-        %153 = OpAccessChain %_ptr_Function_int %A %151
-        %154 = OpIAdd %int %148 %150
-               OpStore %153 %154
-               OpBranch %130
-        %130 = OpLabel
-        %155 = OpLoad %int %i
-        %156 = OpIAdd %int %155 %int_1
-               OpStore %i %156
-               OpBranch %128
-        %129 = OpLabel
-               OpStore %ok %true
-        %158 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %159 = OpLoad %int %158
-               OpStore %i_1 %159
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %164 = OpLoad %int %i_1
-        %165 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %164 %166
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %161
-        %168 = OpLabel
-        %171 = OpLoad %int %i_1
-        %172 = OpAccessChain %_ptr_Function_int %A %171
-        %173 = OpLoad %int %172
-        %174 = OpLoad %int %i_1
-        %175 = OpAccessChain %_ptr_Function_int %ref %174
-        %176 = OpLoad %int %175
-        %177 = OpINotEqual %bool %173 %176
-               OpSelectionMerge %178 None
-               OpBranchConditional %177 %179 %178
-        %179 = OpLabel
-               OpStore %ok %false
-               OpBranch %178
-        %178 = OpLabel
-               OpBranch %162
-        %162 = OpLabel
-        %181 = OpLoad %int %i_1
-        %182 = OpIAdd %int %181 %int_1
-               OpStore %i_1 %182
-               OpBranch %160
-        %161 = OpLabel
-        %183 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %184 = OpLoad %int %183
-        %185 = OpConvertSToF %float %184
-        %186 = OpCompositeConstruct %v4float %185 %185 %185 %185
-               OpStore %x_GLF_color %186
-        %187 = OpLoad %bool %ok
-               OpSelectionMerge %188 None
-               OpBranchConditional %187 %189 %188
-        %189 = OpLabel
-        %190 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %191 = OpLoad %int %190
-        %192 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %193 = OpLoad %int %192
-        %194 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %195 = OpLoad %int %194
-        %196 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %197 = OpLoad %int %196
-        %198 = OpConvertSToF %float %191
-        %199 = OpConvertSToF %float %193
-        %200 = OpConvertSToF %float %195
-        %201 = OpConvertSToF %float %197
-        %202 = OpCompositeConstruct %v4float %198 %199 %200 %201
-               OpStore %x_GLF_color %202
-               OpBranch %188
-        %188 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %203
-        %206 = OpLabel
-        %207 = OpFunctionCall %void %main_1
-        %208 = OpLoad %v4float %x_GLF_color
-        %209 = OpCompositeConstruct %main_out %208
-               OpReturnValue %209
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %211 = OpLabel
-        %212 = OpFunctionCall %main_out %main_inner
-        %213 = OpCompositeExtract %v4float %212 0
-               OpStore %x_GLF_color_1_1 %213
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 464bdec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,128 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 19>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A : array<i32, 17>;
-  var ref : array<i32, 17>;
-  var a : i32;
-  var i : i32;
-  var ok : bool;
-  var i_1 : i32;
-  let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_54 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_56 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_58 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_60 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_68 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_70 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_72 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_74 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_76 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_78 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_80 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_82 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_84 : i32 = x_6.x_GLF_uniform_int_values[2];
-  A = array<i32, 17>(x_52, x_54, x_56, x_58, x_60, x_62, x_64, x_66, x_68, x_70, x_72, x_74, x_76, x_78, x_80, x_82, x_84);
-  let x_87 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_89 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_91 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_93 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_95 : i32 = x_6.x_GLF_uniform_int_values[7];
-  let x_97 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_99 : i32 = x_6.x_GLF_uniform_int_values[9];
-  let x_101 : i32 = x_6.x_GLF_uniform_int_values[10];
-  let x_103 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_105 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_107 : i32 = x_6.x_GLF_uniform_int_values[13];
-  let x_109 : i32 = x_6.x_GLF_uniform_int_values[14];
-  let x_111 : i32 = x_6.x_GLF_uniform_int_values[15];
-  let x_113 : i32 = x_6.x_GLF_uniform_int_values[16];
-  let x_115 : i32 = x_6.x_GLF_uniform_int_values[17];
-  let x_117 : i32 = x_6.x_GLF_uniform_int_values[18];
-  let x_119 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref = array<i32, 17>(x_87, x_89, x_91, x_93, x_95, x_97, x_99, x_101, x_103, x_105, x_107, x_109, x_111, x_113, x_115, x_117, x_119);
-  let x_122 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_122;
-  let x_124 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_124;
-  loop {
-    let x_129 : i32 = i;
-    let x_131 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_129 < x_131)) {
-    } else {
-      break;
-    }
-    let x_134 : i32 = i;
-    let x_135 : i32 = a;
-    a = (x_135 - 1);
-    A[x_134] = x_135;
-    let x_138 : i32 = i;
-    let x_140 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_142 : i32 = x_6.x_GLF_uniform_int_values[18];
-    let x_144 : i32 = i;
-    let x_146 : i32 = x_6.x_GLF_uniform_int_values[3];
-    A[clamp(x_138, x_140, x_142)] = (x_144 + x_146);
-
-    continuing {
-      let x_149 : i32 = i;
-      i = (x_149 + 1);
-    }
-  }
-  ok = true;
-  let x_152 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i_1 = x_152;
-  loop {
-    let x_157 : i32 = i_1;
-    let x_159 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    let x_162 : i32 = i_1;
-    let x_164 : i32 = A[x_162];
-    let x_165 : i32 = i_1;
-    let x_167 : i32 = ref[x_165];
-    if ((x_164 != x_167)) {
-      ok = false;
-    }
-
-    continuing {
-      let x_171 : i32 = i_1;
-      i_1 = (x_171 + 1);
-    }
-  }
-  let x_174 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_175 : f32 = f32(x_174);
-  x_GLF_color = vec4<f32>(x_175, x_175, x_175, x_175);
-  let x_177 : bool = ok;
-  if (x_177) {
-    let x_181 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_184 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_187 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_190 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_181), f32(x_184), f32(x_187), f32(x_190));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 59ce8f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,126 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[19];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int A[17] = (int[17])0;
-  int ref[17] = (int[17])0;
-  int a = 0;
-  int i = 0;
-  bool ok = false;
-  int i_1 = 0;
-  const int x_52 = asint(x_6[2].x);
-  const int x_54 = asint(x_6[2].x);
-  const int x_56 = asint(x_6[2].x);
-  const int x_58 = asint(x_6[2].x);
-  const int x_60 = asint(x_6[2].x);
-  const int x_62 = asint(x_6[2].x);
-  const int x_64 = asint(x_6[2].x);
-  const int x_66 = asint(x_6[2].x);
-  const int x_68 = asint(x_6[2].x);
-  const int x_70 = asint(x_6[2].x);
-  const int x_72 = asint(x_6[2].x);
-  const int x_74 = asint(x_6[2].x);
-  const int x_76 = asint(x_6[2].x);
-  const int x_78 = asint(x_6[2].x);
-  const int x_80 = asint(x_6[2].x);
-  const int x_82 = asint(x_6[2].x);
-  const int x_84 = asint(x_6[2].x);
-  const int tint_symbol_2[17] = {x_52, x_54, x_56, x_58, x_60, x_62, x_64, x_66, x_68, x_70, x_72, x_74, x_76, x_78, x_80, x_82, x_84};
-  A = tint_symbol_2;
-  const int x_87 = asint(x_6[3].x);
-  const int x_89 = asint(x_6[4].x);
-  const int x_91 = asint(x_6[5].x);
-  const int x_93 = asint(x_6[6].x);
-  const int x_95 = asint(x_6[7].x);
-  const int x_97 = asint(x_6[8].x);
-  const int x_99 = asint(x_6[9].x);
-  const int x_101 = asint(x_6[10].x);
-  const int x_103 = asint(x_6[11].x);
-  const int x_105 = asint(x_6[12].x);
-  const int x_107 = asint(x_6[13].x);
-  const int x_109 = asint(x_6[14].x);
-  const int x_111 = asint(x_6[15].x);
-  const int x_113 = asint(x_6[16].x);
-  const int x_115 = asint(x_6[17].x);
-  const int x_117 = asint(x_6[18].x);
-  const int x_119 = asint(x_6[1].x);
-  const int tint_symbol_3[17] = {x_87, x_89, x_91, x_93, x_95, x_97, x_99, x_101, x_103, x_105, x_107, x_109, x_111, x_113, x_115, x_117, x_119};
-  ref = tint_symbol_3;
-  const int x_122 = asint(x_6[2].x);
-  a = x_122;
-  const int x_124 = asint(x_6[2].x);
-  i = x_124;
-  while (true) {
-    const int x_129 = i;
-    const int x_131 = asint(x_6[1].x);
-    if ((x_129 < x_131)) {
-    } else {
-      break;
-    }
-    const int x_134 = i;
-    const int x_135 = a;
-    a = (x_135 - 1);
-    A[x_134] = x_135;
-    const int x_138 = i;
-    const int x_140 = asint(x_6[2].x);
-    const int x_142 = asint(x_6[18].x);
-    const int x_144 = i;
-    const int x_146 = asint(x_6[3].x);
-    A[clamp(x_138, x_140, x_142)] = (x_144 + x_146);
-    {
-      i = (i + 1);
-    }
-  }
-  ok = true;
-  const int x_152 = asint(x_6[2].x);
-  i_1 = x_152;
-  while (true) {
-    const int x_157 = i_1;
-    const int x_159 = asint(x_6[1].x);
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    const int x_164 = A[i_1];
-    const int x_167 = ref[i_1];
-    if ((x_164 != x_167)) {
-      ok = false;
-    }
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const int x_174 = asint(x_6[2].x);
-  const float x_175 = float(x_174);
-  x_GLF_color = float4(x_175, x_175, x_175, x_175);
-  if (ok) {
-    const int x_181 = asint(x_6[3].x);
-    const int x_184 = asint(x_6[2].x);
-    const int x_187 = asint(x_6[2].x);
-    const int x_190 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_181), float(x_184), float(x_187), float(x_190));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7449600..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,144 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[19];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[17];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_1 A = {};
-  tint_array_wrapper_1 ref = {};
-  int a = 0;
-  int i = 0;
-  bool ok = false;
-  int i_1 = 0;
-  int const x_52 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_54 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_56 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_58 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_60 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_68 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_70 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_72 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_74 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_76 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_78 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_80 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_82 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_84 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  tint_array_wrapper_1 const tint_symbol_2 = {.arr={x_52, x_54, x_56, x_58, x_60, x_62, x_64, x_66, x_68, x_70, x_72, x_74, x_76, x_78, x_80, x_82, x_84}};
-  A = tint_symbol_2;
-  int const x_87 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_89 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_91 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_93 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_95 = x_6.x_GLF_uniform_int_values.arr[7].el;
-  int const x_97 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_99 = x_6.x_GLF_uniform_int_values.arr[9].el;
-  int const x_101 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  int const x_103 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_105 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_107 = x_6.x_GLF_uniform_int_values.arr[13].el;
-  int const x_109 = x_6.x_GLF_uniform_int_values.arr[14].el;
-  int const x_111 = x_6.x_GLF_uniform_int_values.arr[15].el;
-  int const x_113 = x_6.x_GLF_uniform_int_values.arr[16].el;
-  int const x_115 = x_6.x_GLF_uniform_int_values.arr[17].el;
-  int const x_117 = x_6.x_GLF_uniform_int_values.arr[18].el;
-  int const x_119 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  tint_array_wrapper_1 const tint_symbol_3 = {.arr={x_87, x_89, x_91, x_93, x_95, x_97, x_99, x_101, x_103, x_105, x_107, x_109, x_111, x_113, x_115, x_117, x_119}};
-  ref = tint_symbol_3;
-  int const x_122 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_122;
-  int const x_124 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_124;
-  while (true) {
-    int const x_129 = i;
-    int const x_131 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_129 < x_131)) {
-    } else {
-      break;
-    }
-    int const x_134 = i;
-    int const x_135 = a;
-    a = as_type<int>((as_type<uint>(x_135) - as_type<uint>(1)));
-    A.arr[x_134] = x_135;
-    int const x_138 = i;
-    int const x_140 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_142 = x_6.x_GLF_uniform_int_values.arr[18].el;
-    int const x_144 = i;
-    int const x_146 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    A.arr[clamp(x_138, x_140, x_142)] = as_type<int>((as_type<uint>(x_144) + as_type<uint>(x_146)));
-    {
-      int const x_149 = i;
-      i = as_type<int>((as_type<uint>(x_149) + as_type<uint>(1)));
-    }
-  }
-  ok = true;
-  int const x_152 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i_1 = x_152;
-  while (true) {
-    int const x_157 = i_1;
-    int const x_159 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    int const x_162 = i_1;
-    int const x_164 = A.arr[x_162];
-    int const x_165 = i_1;
-    int const x_167 = ref.arr[x_165];
-    if ((x_164 != x_167)) {
-      ok = false;
-    }
-    {
-      int const x_171 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_171) + as_type<uint>(1)));
-    }
-  }
-  int const x_174 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_175 = float(x_174);
-  *(tint_symbol_5) = float4(x_175, x_175, x_175, x_175);
-  bool const x_177 = ok;
-  if (x_177) {
-    int const x_181 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_184 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_187 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_190 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_5) = float4(float(x_181), float(x_184), float(x_187), float(x_190));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 40085c0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,292 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 214
-; Schema: 0
-               OpCapability Shader
-        %152 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %A "A"
-               OpName %ref "ref"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %ok "ok"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_19 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_17 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_19 = OpConstant %uint 19
-%_arr_int_uint_19 = OpTypeArray %int %uint_19
-       %buf0 = OpTypeStruct %_arr_int_uint_19
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %uint_17 = OpConstant %uint 17
-%_arr_int_uint_17 = OpTypeArray %int %uint_17
-%_ptr_Function__arr_int_uint_17 = OpTypePointer Function %_arr_int_uint_17
-         %23 = OpConstantNull %_arr_int_uint_17
-%_ptr_Function_int = OpTypePointer Function %int
-         %27 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-     %int_11 = OpConstant %int 11
-     %int_12 = OpConstant %int 12
-     %int_13 = OpConstant %int 13
-     %int_14 = OpConstant %int 14
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-     %int_17 = OpConstant %int 17
-     %int_18 = OpConstant %int 18
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-        %203 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_int_uint_17 Function %23
-        %ref = OpVariable %_ptr_Function__arr_int_uint_17 Function %23
-          %a = OpVariable %_ptr_Function_int Function %27
-          %i = OpVariable %_ptr_Function_int Function %27
-         %ok = OpVariable %_ptr_Function_bool Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %27
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %38 = OpLoad %int %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %40 = OpLoad %int %39
-         %41 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %70 = OpLoad %int %69
-         %71 = OpCompositeConstruct %_arr_int_uint_17 %38 %40 %42 %44 %46 %48 %50 %52 %54 %56 %58 %60 %62 %64 %66 %68 %70
-               OpStore %A %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %74 = OpLoad %int %73
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %77 = OpLoad %int %76
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %80 = OpLoad %int %79
-         %82 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-         %83 = OpLoad %int %82
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-         %86 = OpLoad %int %85
-         %88 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-         %89 = OpLoad %int %88
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-         %92 = OpLoad %int %91
-         %94 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-         %95 = OpLoad %int %94
-         %97 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-         %98 = OpLoad %int %97
-        %100 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-        %101 = OpLoad %int %100
-        %103 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_13
-        %104 = OpLoad %int %103
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_14
-        %107 = OpLoad %int %106
-        %109 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_15
-        %110 = OpLoad %int %109
-        %112 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_16
-        %113 = OpLoad %int %112
-        %115 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_17
-        %116 = OpLoad %int %115
-        %118 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_18
-        %119 = OpLoad %int %118
-        %121 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %122 = OpLoad %int %121
-        %123 = OpCompositeConstruct %_arr_int_uint_17 %74 %77 %80 %83 %86 %89 %92 %95 %98 %101 %104 %107 %110 %113 %116 %119 %122
-               OpStore %ref %123
-        %124 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %125 = OpLoad %int %124
-               OpStore %a %125
-        %126 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %127 = OpLoad %int %126
-               OpStore %i %127
-               OpBranch %128
-        %128 = OpLabel
-               OpLoopMerge %129 %130 None
-               OpBranch %131
-        %131 = OpLabel
-        %132 = OpLoad %int %i
-        %133 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %134 = OpLoad %int %133
-        %135 = OpSLessThan %bool %132 %134
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %138
-        %137 = OpLabel
-               OpBranch %136
-        %138 = OpLabel
-               OpBranch %129
-        %136 = OpLabel
-        %139 = OpLoad %int %i
-        %140 = OpLoad %int %a
-        %141 = OpISub %int %140 %int_1
-               OpStore %a %141
-        %142 = OpAccessChain %_ptr_Function_int %A %139
-               OpStore %142 %140
-        %143 = OpLoad %int %i
-        %144 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %145 = OpLoad %int %144
-        %146 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_18
-        %147 = OpLoad %int %146
-        %148 = OpLoad %int %i
-        %149 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %150 = OpLoad %int %149
-        %151 = OpExtInst %int %152 SClamp %143 %145 %147
-        %153 = OpAccessChain %_ptr_Function_int %A %151
-        %154 = OpIAdd %int %148 %150
-               OpStore %153 %154
-               OpBranch %130
-        %130 = OpLabel
-        %155 = OpLoad %int %i
-        %156 = OpIAdd %int %155 %int_1
-               OpStore %i %156
-               OpBranch %128
-        %129 = OpLabel
-               OpStore %ok %true
-        %158 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %159 = OpLoad %int %158
-               OpStore %i_1 %159
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %164 = OpLoad %int %i_1
-        %165 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %164 %166
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %161
-        %168 = OpLabel
-        %171 = OpLoad %int %i_1
-        %172 = OpAccessChain %_ptr_Function_int %A %171
-        %173 = OpLoad %int %172
-        %174 = OpLoad %int %i_1
-        %175 = OpAccessChain %_ptr_Function_int %ref %174
-        %176 = OpLoad %int %175
-        %177 = OpINotEqual %bool %173 %176
-               OpSelectionMerge %178 None
-               OpBranchConditional %177 %179 %178
-        %179 = OpLabel
-               OpStore %ok %false
-               OpBranch %178
-        %178 = OpLabel
-               OpBranch %162
-        %162 = OpLabel
-        %181 = OpLoad %int %i_1
-        %182 = OpIAdd %int %181 %int_1
-               OpStore %i_1 %182
-               OpBranch %160
-        %161 = OpLabel
-        %183 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %184 = OpLoad %int %183
-        %185 = OpConvertSToF %float %184
-        %186 = OpCompositeConstruct %v4float %185 %185 %185 %185
-               OpStore %x_GLF_color %186
-        %187 = OpLoad %bool %ok
-               OpSelectionMerge %188 None
-               OpBranchConditional %187 %189 %188
-        %189 = OpLabel
-        %190 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %191 = OpLoad %int %190
-        %192 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %193 = OpLoad %int %192
-        %194 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %195 = OpLoad %int %194
-        %196 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %197 = OpLoad %int %196
-        %198 = OpConvertSToF %float %191
-        %199 = OpConvertSToF %float %193
-        %200 = OpConvertSToF %float %195
-        %201 = OpConvertSToF %float %197
-        %202 = OpCompositeConstruct %v4float %198 %199 %200 %201
-               OpStore %x_GLF_color %202
-               OpBranch %188
-        %188 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %203
-        %206 = OpLabel
-        %207 = OpFunctionCall %void %main_1
-        %208 = OpLoad %v4float %x_GLF_color
-        %209 = OpCompositeConstruct %main_out %208
-               OpReturnValue %209
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %211 = OpLabel
-        %212 = OpFunctionCall %main_out %main_inner
-        %213 = OpCompositeExtract %v4float %212 0
-               OpStore %x_GLF_color_1_1 %213
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 464bdec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-array-access/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,128 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 19>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A : array<i32, 17>;
-  var ref : array<i32, 17>;
-  var a : i32;
-  var i : i32;
-  var ok : bool;
-  var i_1 : i32;
-  let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_54 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_56 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_58 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_60 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_68 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_70 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_72 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_74 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_76 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_78 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_80 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_82 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_84 : i32 = x_6.x_GLF_uniform_int_values[2];
-  A = array<i32, 17>(x_52, x_54, x_56, x_58, x_60, x_62, x_64, x_66, x_68, x_70, x_72, x_74, x_76, x_78, x_80, x_82, x_84);
-  let x_87 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_89 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_91 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_93 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_95 : i32 = x_6.x_GLF_uniform_int_values[7];
-  let x_97 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_99 : i32 = x_6.x_GLF_uniform_int_values[9];
-  let x_101 : i32 = x_6.x_GLF_uniform_int_values[10];
-  let x_103 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_105 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_107 : i32 = x_6.x_GLF_uniform_int_values[13];
-  let x_109 : i32 = x_6.x_GLF_uniform_int_values[14];
-  let x_111 : i32 = x_6.x_GLF_uniform_int_values[15];
-  let x_113 : i32 = x_6.x_GLF_uniform_int_values[16];
-  let x_115 : i32 = x_6.x_GLF_uniform_int_values[17];
-  let x_117 : i32 = x_6.x_GLF_uniform_int_values[18];
-  let x_119 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref = array<i32, 17>(x_87, x_89, x_91, x_93, x_95, x_97, x_99, x_101, x_103, x_105, x_107, x_109, x_111, x_113, x_115, x_117, x_119);
-  let x_122 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_122;
-  let x_124 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_124;
-  loop {
-    let x_129 : i32 = i;
-    let x_131 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_129 < x_131)) {
-    } else {
-      break;
-    }
-    let x_134 : i32 = i;
-    let x_135 : i32 = a;
-    a = (x_135 - 1);
-    A[x_134] = x_135;
-    let x_138 : i32 = i;
-    let x_140 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_142 : i32 = x_6.x_GLF_uniform_int_values[18];
-    let x_144 : i32 = i;
-    let x_146 : i32 = x_6.x_GLF_uniform_int_values[3];
-    A[clamp(x_138, x_140, x_142)] = (x_144 + x_146);
-
-    continuing {
-      let x_149 : i32 = i;
-      i = (x_149 + 1);
-    }
-  }
-  ok = true;
-  let x_152 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i_1 = x_152;
-  loop {
-    let x_157 : i32 = i_1;
-    let x_159 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    let x_162 : i32 = i_1;
-    let x_164 : i32 = A[x_162];
-    let x_165 : i32 = i_1;
-    let x_167 : i32 = ref[x_165];
-    if ((x_164 != x_167)) {
-      ok = false;
-    }
-
-    continuing {
-      let x_171 : i32 = i_1;
-      i_1 = (x_171 + 1);
-    }
-  }
-  let x_174 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_175 : f32 = f32(x_174);
-  x_GLF_color = vec4<f32>(x_175, x_175, x_175, x_175);
-  let x_177 : bool = ok;
-  if (x_177) {
-    let x_181 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_184 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_187 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_190 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_181), f32(x_184), f32(x_187), f32(x_190));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8b616d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,78 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  int a = 0;
-  float4 indexable[2] = (float4[2])0;
-  float4 indexable_1[2] = (float4[2])0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float4(x_45, x_45, x_45, x_45);
-  const int x_48 = asint(x_9[1].x);
-  i = x_48;
-  while (true) {
-    const int x_53 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    const int x_58 = i;
-    const int x_60 = asint(x_9[1].x);
-    const int x_62 = asint(x_9[2].x);
-    const float4 tint_symbol_3[2] = {float4(1.0f, 1.0f, 1.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-    indexable = tint_symbol_3;
-    const float x_65 = indexable[clamp(x_58, x_60, x_62)].x;
-    a = int(x_65);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_70 = asfloat(x_6[1].x);
-    const float x_72 = asfloat(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_74 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_77 = asfloat(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_79 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_81 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const float x_83 = asfloat(x_6[1].x);
-    const int x_86 = a;
-    const float4 tint_symbol_4[2] = {float4(x_68, x_70, x_72, x_74), float4(x_77, x_79, x_81, x_83)};
-    indexable_1 = tint_symbol_4;
-    const float4 x_88 = indexable_1[x_86];
-    v1 = x_88;
-    {
-      i = (i + 1);
-    }
-  }
-  x_GLF_color = v1;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.msl
deleted file mode 100644
index 77ab09b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float4 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  float4 v1 = 0.0f;
-  int i = 0;
-  int a = 0;
-  tint_array_wrapper_2 indexable = {};
-  tint_array_wrapper_2 indexable_1 = {};
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float4(x_45, x_45, x_45, x_45);
-  int const x_48 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_48;
-  while (true) {
-    int const x_53 = i;
-    int const x_55 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    int const x_58 = i;
-    int const x_60 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_62 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    tint_array_wrapper_2 const tint_symbol_2 = {.arr={float4(1.0f, 1.0f, 1.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-    indexable = tint_symbol_2;
-    float const x_65 = indexable.arr[clamp(x_58, x_60, x_62)].x;
-    a = int(x_65);
-    float const x_68 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_70 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_72 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_74 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_77 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_79 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_81 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_83 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    int const x_86 = a;
-    tint_array_wrapper_2 const tint_symbol_3 = {.arr={float4(x_68, x_70, x_72, x_74), float4(x_77, x_79, x_81, x_83)}};
-    indexable_1 = tint_symbol_3;
-    float4 const x_88 = indexable_1.arr[x_86];
-    v1 = x_88;
-    {
-      int const x_89 = i;
-      i = as_type<int>((as_type<uint>(x_89) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_91 = v1;
-  *(tint_symbol_5) = x_91;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_6) {
-  main_1(x_6, x_9, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index fc1d811..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,175 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 110
-; Schema: 0
-               OpCapability Shader
-         %69 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_v4float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-%_arr_v4float_uint_2 = OpTypeArray %v4float %uint_2
-%_ptr_Function__arr_v4float_uint_2 = OpTypePointer Function %_arr_v4float_uint_2
-         %33 = OpConstantNull %_arr_v4float_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-         %64 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %66 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %67 = OpConstantComposite %_arr_v4float_uint_2 %64 %66
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-         %99 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %i = OpVariable %_ptr_Function_int Function %28
-          %a = OpVariable %_ptr_Function_int Function %28
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_2 Function %33
-%indexable_1 = OpVariable %_ptr_Function__arr_v4float_uint_2 Function %33
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpCompositeConstruct %v4float %39 %39 %39 %39
-               OpStore %v1 %40
-         %43 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %44 = OpLoad %int %43
-               OpStore %i %44
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpSLessThan %bool %49 %51
-               OpSelectionMerge %54 None
-               OpBranchConditional %52 %55 %56
-         %55 = OpLabel
-               OpBranch %54
-         %56 = OpLabel
-               OpBranch %46
-         %54 = OpLabel
-         %57 = OpLoad %int %i
-         %58 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %59 = OpLoad %int %58
-         %61 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %62 = OpLoad %int %61
-               OpStore %indexable %67
-         %68 = OpExtInst %int %69 SClamp %57 %59 %62
-         %71 = OpAccessChain %_ptr_Function_float %indexable %68 %uint_0
-         %72 = OpLoad %float %71
-         %73 = OpConvertFToS %int %72
-               OpStore %a %73
-         %74 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %75 = OpLoad %float %74
-         %76 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %81 = OpLoad %float %80
-         %82 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %83 = OpLoad %float %82
-         %84 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %85 = OpLoad %float %84
-         %86 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %89 = OpLoad %float %88
-         %90 = OpLoad %int %a
-         %91 = OpCompositeConstruct %v4float %75 %77 %79 %81
-         %92 = OpCompositeConstruct %v4float %83 %85 %87 %89
-         %93 = OpCompositeConstruct %_arr_v4float_uint_2 %91 %92
-               OpStore %indexable_1 %93
-         %94 = OpAccessChain %_ptr_Function_v4float %indexable_1 %90
-         %95 = OpLoad %v4float %94
-               OpStore %v1 %95
-               OpBranch %47
-         %47 = OpLabel
-         %96 = OpLoad %int %i
-         %97 = OpIAdd %int %96 %int_1
-               OpStore %i %97
-               OpBranch %45
-         %46 = OpLabel
-         %98 = OpLoad %v4float %v1
-               OpStore %x_GLF_color %98
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %99
-        %102 = OpLabel
-        %103 = OpFunctionCall %void %main_1
-        %104 = OpLoad %v4float %x_GLF_color
-        %105 = OpCompositeConstruct %main_out %104
-               OpReturnValue %105
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %107 = OpLabel
-        %108 = OpFunctionCall %main_out %main_inner
-        %109 = OpCompositeExtract %v4float %108 0
-               OpStore %x_GLF_color_1_1 %109
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 856399f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec4<f32>;
-  var i : i32;
-  var a : i32;
-  var indexable : array<vec4<f32>, 2>;
-  var indexable_1 : array<vec4<f32>, 2>;
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v1 = vec4<f32>(x_45, x_45, x_45, x_45);
-  let x_48 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_48;
-  loop {
-    let x_53 : i32 = i;
-    let x_55 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    let x_58 : i32 = i;
-    let x_60 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_62 : i32 = x_9.x_GLF_uniform_int_values[2];
-    indexable = array<vec4<f32>, 2>(vec4<f32>(1.0, 1.0, 1.0, 1.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-    let x_65 : f32 = indexable[clamp(x_58, x_60, x_62)].x;
-    a = i32(x_65);
-    let x_68 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_70 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_72 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_74 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_77 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_79 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_81 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_83 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_86 : i32 = a;
-    indexable_1 = array<vec4<f32>, 2>(vec4<f32>(x_68, x_70, x_72, x_74), vec4<f32>(x_77, x_79, x_81, x_83));
-    let x_88 : vec4<f32> = indexable_1[x_86];
-    v1 = x_88;
-
-    continuing {
-      let x_89 : i32 = i;
-      i = (x_89 + 1);
-    }
-  }
-  let x_91 : vec4<f32> = v1;
-  x_GLF_color = x_91;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8b616d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,78 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  int a = 0;
-  float4 indexable[2] = (float4[2])0;
-  float4 indexable_1[2] = (float4[2])0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = float4(x_45, x_45, x_45, x_45);
-  const int x_48 = asint(x_9[1].x);
-  i = x_48;
-  while (true) {
-    const int x_53 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    const int x_58 = i;
-    const int x_60 = asint(x_9[1].x);
-    const int x_62 = asint(x_9[2].x);
-    const float4 tint_symbol_3[2] = {float4(1.0f, 1.0f, 1.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-    indexable = tint_symbol_3;
-    const float x_65 = indexable[clamp(x_58, x_60, x_62)].x;
-    a = int(x_65);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_68 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_70 = asfloat(x_6[1].x);
-    const float x_72 = asfloat(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_74 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_77 = asfloat(x_6[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_79 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_81 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const float x_83 = asfloat(x_6[1].x);
-    const int x_86 = a;
-    const float4 tint_symbol_4[2] = {float4(x_68, x_70, x_72, x_74), float4(x_77, x_79, x_81, x_83)};
-    indexable_1 = tint_symbol_4;
-    const float4 x_88 = indexable_1[x_86];
-    v1 = x_88;
-    {
-      i = (i + 1);
-    }
-  }
-  x_GLF_color = v1;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.msl
deleted file mode 100644
index 77ab09b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float4 arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_5) {
-  float4 v1 = 0.0f;
-  int i = 0;
-  int a = 0;
-  tint_array_wrapper_2 indexable = {};
-  tint_array_wrapper_2 indexable_1 = {};
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  v1 = float4(x_45, x_45, x_45, x_45);
-  int const x_48 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  i = x_48;
-  while (true) {
-    int const x_53 = i;
-    int const x_55 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    int const x_58 = i;
-    int const x_60 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_62 = x_9.x_GLF_uniform_int_values.arr[2].el;
-    tint_array_wrapper_2 const tint_symbol_2 = {.arr={float4(1.0f, 1.0f, 1.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-    indexable = tint_symbol_2;
-    float const x_65 = indexable.arr[clamp(x_58, x_60, x_62)].x;
-    a = int(x_65);
-    float const x_68 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_70 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_72 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_74 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_77 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    float const x_79 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_81 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    float const x_83 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    int const x_86 = a;
-    tint_array_wrapper_2 const tint_symbol_3 = {.arr={float4(x_68, x_70, x_72, x_74), float4(x_77, x_79, x_81, x_83)}};
-    indexable_1 = tint_symbol_3;
-    float4 const x_88 = indexable_1.arr[x_86];
-    v1 = x_88;
-    {
-      int const x_89 = i;
-      i = as_type<int>((as_type<uint>(x_89) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_91 = v1;
-  *(tint_symbol_5) = x_91;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_6) {
-  main_1(x_6, x_9, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index fc1d811..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,175 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 110
-; Schema: 0
-               OpCapability Shader
-         %69 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %_arr_v4float_uint_2 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-%_arr_v4float_uint_2 = OpTypeArray %v4float %uint_2
-%_ptr_Function__arr_v4float_uint_2 = OpTypePointer Function %_arr_v4float_uint_2
-         %33 = OpConstantNull %_arr_v4float_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-         %64 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %66 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %67 = OpConstantComposite %_arr_v4float_uint_2 %64 %66
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-         %99 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v4float Function %5
-          %i = OpVariable %_ptr_Function_int Function %28
-          %a = OpVariable %_ptr_Function_int Function %28
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_2 Function %33
-%indexable_1 = OpVariable %_ptr_Function__arr_v4float_uint_2 Function %33
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %39 = OpLoad %float %38
-         %40 = OpCompositeConstruct %v4float %39 %39 %39 %39
-               OpStore %v1 %40
-         %43 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %44 = OpLoad %int %43
-               OpStore %i %44
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpSLessThan %bool %49 %51
-               OpSelectionMerge %54 None
-               OpBranchConditional %52 %55 %56
-         %55 = OpLabel
-               OpBranch %54
-         %56 = OpLabel
-               OpBranch %46
-         %54 = OpLabel
-         %57 = OpLoad %int %i
-         %58 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %59 = OpLoad %int %58
-         %61 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %62 = OpLoad %int %61
-               OpStore %indexable %67
-         %68 = OpExtInst %int %69 SClamp %57 %59 %62
-         %71 = OpAccessChain %_ptr_Function_float %indexable %68 %uint_0
-         %72 = OpLoad %float %71
-         %73 = OpConvertFToS %int %72
-               OpStore %a %73
-         %74 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %75 = OpLoad %float %74
-         %76 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %81 = OpLoad %float %80
-         %82 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %83 = OpLoad %float %82
-         %84 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %85 = OpLoad %float %84
-         %86 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %89 = OpLoad %float %88
-         %90 = OpLoad %int %a
-         %91 = OpCompositeConstruct %v4float %75 %77 %79 %81
-         %92 = OpCompositeConstruct %v4float %83 %85 %87 %89
-         %93 = OpCompositeConstruct %_arr_v4float_uint_2 %91 %92
-               OpStore %indexable_1 %93
-         %94 = OpAccessChain %_ptr_Function_v4float %indexable_1 %90
-         %95 = OpLoad %v4float %94
-               OpStore %v1 %95
-               OpBranch %47
-         %47 = OpLabel
-         %96 = OpLoad %int %i
-         %97 = OpIAdd %int %96 %int_1
-               OpStore %i %97
-               OpBranch %45
-         %46 = OpLabel
-         %98 = OpLoad %v4float %v1
-               OpStore %x_GLF_color %98
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %99
-        %102 = OpLabel
-        %103 = OpFunctionCall %void %main_1
-        %104 = OpLoad %v4float %x_GLF_color
-        %105 = OpCompositeConstruct %main_out %104
-               OpReturnValue %105
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %107 = OpLabel
-        %108 = OpFunctionCall %main_out %main_inner
-        %109 = OpCompositeExtract %v4float %108 0
-               OpStore %x_GLF_color_1_1 %109
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 856399f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-large-constants-for-clamp-vector-access/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec4<f32>;
-  var i : i32;
-  var a : i32;
-  var indexable : array<vec4<f32>, 2>;
-  var indexable_1 : array<vec4<f32>, 2>;
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[0];
-  v1 = vec4<f32>(x_45, x_45, x_45, x_45);
-  let x_48 : i32 = x_9.x_GLF_uniform_int_values[1];
-  i = x_48;
-  loop {
-    let x_53 : i32 = i;
-    let x_55 : i32 = x_9.x_GLF_uniform_int_values[0];
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    let x_58 : i32 = i;
-    let x_60 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_62 : i32 = x_9.x_GLF_uniform_int_values[2];
-    indexable = array<vec4<f32>, 2>(vec4<f32>(1.0, 1.0, 1.0, 1.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-    let x_65 : f32 = indexable[clamp(x_58, x_60, x_62)].x;
-    a = i32(x_65);
-    let x_68 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_70 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_72 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_74 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_77 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_79 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_81 : f32 = x_6.x_GLF_uniform_float_values[0];
-    let x_83 : f32 = x_6.x_GLF_uniform_float_values[1];
-    let x_86 : i32 = a;
-    indexable_1 = array<vec4<f32>, 2>(vec4<f32>(x_68, x_70, x_72, x_74), vec4<f32>(x_77, x_79, x_81, x_83));
-    let x_88 : vec4<f32> = indexable_1[x_86];
-    v1 = x_88;
-
-    continuing {
-      let x_89 : i32 = i;
-      i = (x_89 + 1);
-    }
-  }
-  let x_91 : vec4<f32> = v1;
-  x_GLF_color = x_91;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d21a8d6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  const float x_31 = asfloat(x_5[1].x);
-  x_GLF_color = float4(x_31, x_31, x_31, x_31);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_5[scalar_offset / 4][scalar_offset % 4]);
-  a = x_34;
-  while (true) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_40 = asfloat(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_43 = asfloat(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if (((x_40 / 0.200000003f) < x_43)) {
-      return;
-    }
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_48 = asfloat(x_5[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_51 = asfloat(x_5[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    if (((x_48 / 0.200000003f) < x_51)) {
-      return;
-    }
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_56 = asfloat(x_5[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const float x_59 = asfloat(x_5[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    if (((x_56 / 0.200000003f) < x_59)) {
-      return;
-    }
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_5[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const float x_67 = asfloat(x_5[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    if (((x_64 / 0.200000003f) < x_67)) {
-      return;
-    } else {
-      a = 0.0f;
-    }
-    {
-      if (!((a == 0.0f))) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_75 = asint(x_8[1].x);
-  const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-  const int x_78 = asint(x_8[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-  const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-  const int x_81 = asint(x_8[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-  const int x_84 = asint(x_8[1].x);
-  x_GLF_color = float4(float(x_75), float(x_78), float(x_81), float(x_84));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.msl
deleted file mode 100644
index d8d6827..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float const x_31 = x_5.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_3) = float4(x_31, x_31, x_31, x_31);
-  float const x_34 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  a = x_34;
-  while (true) {
-    float const x_40 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_43 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    if (((x_40 / 0.200000003f) < x_43)) {
-      return;
-    }
-    float const x_48 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_51 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    if (((x_48 / 0.200000003f) < x_51)) {
-      return;
-    }
-    float const x_56 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_59 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    if (((x_56 / 0.200000003f) < x_59)) {
-      return;
-    }
-    float const x_64 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_67 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    if (((x_64 / 0.200000003f) < x_67)) {
-      return;
-    } else {
-      a = 0.0f;
-    }
-    {
-      float const x_72 = a;
-      if (!((x_72 == 0.0f))) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_75 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_78 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_81 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_84 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  *(tint_symbol_3) = float4(float(x_75), float(x_78), float(x_81), float(x_84));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1636891..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,168 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 103
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%float_0_200000003 = OpConstant %float 0.200000003
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %92 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %25
-         %29 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %30 = OpLoad %float %29
-         %31 = OpCompositeConstruct %v4float %30 %30 %30 %30
-               OpStore %x_GLF_color %31
-         %33 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %34 = OpLoad %float %33
-               OpStore %a %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %44 = OpFDiv %float %40 %float_0_200000003
-         %45 = OpFOrdLessThan %bool %44 %42
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %47
-         %48 = OpLabel
-               OpReturn
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %52 = OpLoad %float %51
-         %53 = OpFDiv %float %50 %float_0_200000003
-         %54 = OpFOrdLessThan %bool %53 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-               OpReturn
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %59 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %60 = OpLoad %float %59
-         %61 = OpFDiv %float %58 %float_0_200000003
-         %62 = OpFOrdLessThan %bool %61 %60
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %63
-         %64 = OpLabel
-               OpReturn
-         %63 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %68 = OpLoad %float %67
-         %69 = OpFDiv %float %66 %float_0_200000003
-         %70 = OpFOrdLessThan %bool %69 %68
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpReturn
-         %73 = OpLabel
-               OpStore %a %float_0
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %75 = OpLoad %float %a
-         %77 = OpFOrdEqual %bool %75 %float_0
-         %76 = OpLogicalNot %bool %77
-               OpBranchConditional %76 %35 %36
-         %36 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %80
-         %88 = OpConvertSToF %float %82
-         %89 = OpConvertSToF %float %84
-         %90 = OpConvertSToF %float %86
-         %91 = OpCompositeConstruct %v4float %87 %88 %89 %90
-               OpStore %x_GLF_color %91
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %92
-         %95 = OpLabel
-         %96 = OpFunctionCall %void %main_1
-         %97 = OpLoad %v4float %x_GLF_color
-         %98 = OpCompositeConstruct %main_out %97
-               OpReturnValue %98
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %100 = OpLabel
-        %101 = OpFunctionCall %main_out %main_inner
-        %102 = OpCompositeExtract %v4float %101 0
-               OpStore %x_GLF_color_1_1 %102
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 84258b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var a : f32;
-  let x_31 : f32 = x_5.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_31, x_31, x_31, x_31);
-  let x_34 : f32 = x_5.x_GLF_uniform_float_values[0];
-  a = x_34;
-  loop {
-    let x_40 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_43 : f32 = x_5.x_GLF_uniform_float_values[0];
-    if (((x_40 / 0.200000003) < x_43)) {
-      return;
-    }
-    let x_48 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_51 : f32 = x_5.x_GLF_uniform_float_values[0];
-    if (((x_48 / 0.200000003) < x_51)) {
-      return;
-    }
-    let x_56 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_59 : f32 = x_5.x_GLF_uniform_float_values[0];
-    if (((x_56 / 0.200000003) < x_59)) {
-      return;
-    }
-    let x_64 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_67 : f32 = x_5.x_GLF_uniform_float_values[0];
-    if (((x_64 / 0.200000003) < x_67)) {
-      return;
-    } else {
-      a = 0.0;
-    }
-
-    continuing {
-      let x_72 : f32 = a;
-      if (!((x_72 == 0.0))) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_75 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_78 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_81 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_84 : i32 = x_8.x_GLF_uniform_int_values[1];
-  x_GLF_color = vec4<f32>(f32(x_75), f32(x_78), f32(x_81), f32(x_84));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d21a8d6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  const float x_31 = asfloat(x_5[1].x);
-  x_GLF_color = float4(x_31, x_31, x_31, x_31);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_5[scalar_offset / 4][scalar_offset % 4]);
-  a = x_34;
-  while (true) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_40 = asfloat(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_43 = asfloat(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if (((x_40 / 0.200000003f) < x_43)) {
-      return;
-    }
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const float x_48 = asfloat(x_5[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_51 = asfloat(x_5[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    if (((x_48 / 0.200000003f) < x_51)) {
-      return;
-    }
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_56 = asfloat(x_5[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const float x_59 = asfloat(x_5[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    if (((x_56 / 0.200000003f) < x_59)) {
-      return;
-    }
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const float x_64 = asfloat(x_5[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const float x_67 = asfloat(x_5[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    if (((x_64 / 0.200000003f) < x_67)) {
-      return;
-    } else {
-      a = 0.0f;
-    }
-    {
-      if (!((a == 0.0f))) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_75 = asint(x_8[1].x);
-  const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-  const int x_78 = asint(x_8[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-  const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-  const int x_81 = asint(x_8[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-  const int x_84 = asint(x_8[1].x);
-  x_GLF_color = float4(float(x_75), float(x_78), float(x_81), float(x_84));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.msl
deleted file mode 100644
index d8d6827..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float const x_31 = x_5.x_GLF_uniform_float_values.arr[1].el;
-  *(tint_symbol_3) = float4(x_31, x_31, x_31, x_31);
-  float const x_34 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  a = x_34;
-  while (true) {
-    float const x_40 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_43 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    if (((x_40 / 0.200000003f) < x_43)) {
-      return;
-    }
-    float const x_48 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_51 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    if (((x_48 / 0.200000003f) < x_51)) {
-      return;
-    }
-    float const x_56 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_59 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    if (((x_56 / 0.200000003f) < x_59)) {
-      return;
-    }
-    float const x_64 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    float const x_67 = x_5.x_GLF_uniform_float_values.arr[0].el;
-    if (((x_64 / 0.200000003f) < x_67)) {
-      return;
-    } else {
-      a = 0.0f;
-    }
-    {
-      float const x_72 = a;
-      if (!((x_72 == 0.0f))) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_75 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  int const x_78 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_81 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_84 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  *(tint_symbol_3) = float4(float(x_75), float(x_78), float(x_81), float(x_84));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1636891..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,168 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 103
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%float_0_200000003 = OpConstant %float 0.200000003
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %92 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %25
-         %29 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %30 = OpLoad %float %29
-         %31 = OpCompositeConstruct %v4float %30 %30 %30 %30
-               OpStore %x_GLF_color %31
-         %33 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %34 = OpLoad %float %33
-               OpStore %a %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %44 = OpFDiv %float %40 %float_0_200000003
-         %45 = OpFOrdLessThan %bool %44 %42
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %47
-         %48 = OpLabel
-               OpReturn
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %50 = OpLoad %float %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %52 = OpLoad %float %51
-         %53 = OpFDiv %float %50 %float_0_200000003
-         %54 = OpFOrdLessThan %bool %53 %52
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-               OpReturn
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %58 = OpLoad %float %57
-         %59 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %60 = OpLoad %float %59
-         %61 = OpFDiv %float %58 %float_0_200000003
-         %62 = OpFOrdLessThan %bool %61 %60
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %63
-         %64 = OpLabel
-               OpReturn
-         %63 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %68 = OpLoad %float %67
-         %69 = OpFDiv %float %66 %float_0_200000003
-         %70 = OpFOrdLessThan %bool %69 %68
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpReturn
-         %73 = OpLabel
-               OpStore %a %float_0
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %75 = OpLoad %float %a
-         %77 = OpFOrdEqual %bool %75 %float_0
-         %76 = OpLogicalNot %bool %77
-               OpBranchConditional %76 %35 %36
-         %36 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %80
-         %88 = OpConvertSToF %float %82
-         %89 = OpConvertSToF %float %84
-         %90 = OpConvertSToF %float %86
-         %91 = OpCompositeConstruct %v4float %87 %88 %89 %90
-               OpStore %x_GLF_color %91
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %92
-         %95 = OpLabel
-         %96 = OpFunctionCall %void %main_1
-         %97 = OpLoad %v4float %x_GLF_color
-         %98 = OpCompositeConstruct %main_out %97
-               OpReturnValue %98
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %100 = OpLabel
-        %101 = OpFunctionCall %main_out %main_inner
-        %102 = OpCompositeExtract %v4float %101 0
-               OpStore %x_GLF_color_1_1 %102
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 84258b8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-nir-opt-loop-unroll-if-if-if-if-do-while/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var a : f32;
-  let x_31 : f32 = x_5.x_GLF_uniform_float_values[1];
-  x_GLF_color = vec4<f32>(x_31, x_31, x_31, x_31);
-  let x_34 : f32 = x_5.x_GLF_uniform_float_values[0];
-  a = x_34;
-  loop {
-    let x_40 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_43 : f32 = x_5.x_GLF_uniform_float_values[0];
-    if (((x_40 / 0.200000003) < x_43)) {
-      return;
-    }
-    let x_48 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_51 : f32 = x_5.x_GLF_uniform_float_values[0];
-    if (((x_48 / 0.200000003) < x_51)) {
-      return;
-    }
-    let x_56 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_59 : f32 = x_5.x_GLF_uniform_float_values[0];
-    if (((x_56 / 0.200000003) < x_59)) {
-      return;
-    }
-    let x_64 : f32 = x_5.x_GLF_uniform_float_values[0];
-    let x_67 : f32 = x_5.x_GLF_uniform_float_values[0];
-    if (((x_64 / 0.200000003) < x_67)) {
-      return;
-    } else {
-      a = 0.0;
-    }
-
-    continuing {
-      let x_72 : f32 = a;
-      if (!((x_72 == 0.0))) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_75 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_78 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_81 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_84 : i32 = x_8.x_GLF_uniform_int_values[1];
-  x_GLF_color = vec4<f32>(f32(x_75), f32(x_78), f32(x_81), f32(x_84));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8737c6c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 M1 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float a = 0.0f;
-  int c = 0;
-  const float x_41 = asfloat(x_6[1].x);
-  const float x_43 = asfloat(x_6[2].x);
-  const float x_45 = asfloat(x_6[3].x);
-  const float x_47 = asfloat(x_6[4].x);
-  M1 = float2x2(float2(x_41, x_43), float2(x_45, x_47));
-  const float x_52 = asfloat(x_6[1].x);
-  a = x_52;
-  const int x_54 = asint(x_10[1].x);
-  c = x_54;
-  while (true) {
-    const int x_59 = c;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_61 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_59 < x_61)) {
-    } else {
-      break;
-    }
-    const int x_65 = asint(x_10[2].x);
-    const float x_70 = M1[x_65][clamp(~(c), 0, 1)];
-    a = (a + x_70);
-    {
-      c = (c + 1);
-    }
-  }
-  const float x_75 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_77 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_75 == x_77)) {
-    const int x_83 = asint(x_10[2].x);
-    const int x_86 = asint(x_10[1].x);
-    const int x_89 = asint(x_10[1].x);
-    const int x_92 = asint(x_10[2].x);
-    x_GLF_color = float4(float(x_83), float(x_86), float(x_89), float(x_92));
-  } else {
-    const int x_96 = asint(x_10[2].x);
-    const float x_97 = float(x_96);
-    x_GLF_color = float4(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.msl
deleted file mode 100644
index f0c07b4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  float2x2 M1 = float2x2(0.0f);
-  float a = 0.0f;
-  int c = 0;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[4].el;
-  M1 = float2x2(float2(x_41, x_43), float2(x_45, x_47));
-  float const x_52 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = x_52;
-  int const x_54 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  c = x_54;
-  while (true) {
-    int const x_59 = c;
-    int const x_61 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_59 < x_61)) {
-    } else {
-      break;
-    }
-    int const x_65 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_66 = c;
-    float const x_70 = M1[x_65][clamp(~(x_66), 0, 1)];
-    float const x_71 = a;
-    a = (x_71 + x_70);
-    {
-      int const x_73 = c;
-      c = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-    }
-  }
-  float const x_75 = a;
-  float const x_77 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_75 == x_77)) {
-    int const x_83 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_86 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_89 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_92 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_83), float(x_86), float(x_89), float(x_92));
-  } else {
-    int const x_96 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_97 = float(x_96);
-    *(tint_symbol_3) = float4(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 379bc64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,182 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 117
-; Schema: 0
-               OpCapability Shader
-         %74 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %M1 "M1"
-               OpName %a "a"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-       %buf0 = OpTypeStruct %_arr_float_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %28 = OpConstantNull %mat2v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-        %106 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %M1 = OpVariable %_ptr_Function_mat2v2float Function %28
-          %a = OpVariable %_ptr_Function_float Function %31
-          %c = OpVariable %_ptr_Function_int Function %34
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %39 = OpLoad %float %38
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %48 = OpLoad %float %47
-         %49 = OpCompositeConstruct %v2float %39 %42
-         %50 = OpCompositeConstruct %v2float %45 %48
-         %51 = OpCompositeConstruct %mat2v2float %49 %50
-               OpStore %M1 %51
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-               OpStore %a %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %56 = OpLoad %int %55
-               OpStore %c %56
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %c
-         %63 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpSLessThan %bool %61 %64
-               OpSelectionMerge %67 None
-               OpBranchConditional %65 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %58
-         %67 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %71 = OpLoad %int %70
-         %72 = OpLoad %int %c
-         %75 = OpNot %int %72
-         %73 = OpExtInst %int %74 SClamp %75 %int_0 %int_1
-         %76 = OpAccessChain %_ptr_Function_float %M1 %71 %73
-         %77 = OpLoad %float %76
-         %78 = OpLoad %float %a
-         %79 = OpFAdd %float %78 %77
-               OpStore %a %79
-               OpBranch %59
-         %59 = OpLabel
-         %80 = OpLoad %int %c
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %c %81
-               OpBranch %57
-         %58 = OpLabel
-         %82 = OpLoad %float %a
-         %83 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %84 = OpLoad %float %83
-         %85 = OpFOrdEqual %bool %82 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %96 = OpLoad %int %95
-         %97 = OpConvertSToF %float %90
-         %98 = OpConvertSToF %float %92
-         %99 = OpConvertSToF %float %94
-        %100 = OpConvertSToF %float %96
-        %101 = OpCompositeConstruct %v4float %97 %98 %99 %100
-               OpStore %x_GLF_color %101
-               OpBranch %86
-         %88 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %103 = OpLoad %int %102
-        %104 = OpConvertSToF %float %103
-        %105 = OpCompositeConstruct %v4float %104 %104 %104 %104
-               OpStore %x_GLF_color %105
-               OpBranch %86
-         %86 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %106
-        %109 = OpLabel
-        %110 = OpFunctionCall %void %main_1
-        %111 = OpLoad %v4float %x_GLF_color
-        %112 = OpCompositeConstruct %main_out %111
-               OpReturnValue %112
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %114 = OpLabel
-        %115 = OpFunctionCall %main_out %main_inner
-        %116 = OpCompositeExtract %v4float %115 0
-               OpStore %x_GLF_color_1_1 %116
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a1de151..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,77 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var M1 : mat2x2<f32>;
-  var a : f32;
-  var c : i32;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[4];
-  M1 = mat2x2<f32>(vec2<f32>(x_41, x_43), vec2<f32>(x_45, x_47));
-  let x_52 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = x_52;
-  let x_54 : i32 = x_10.x_GLF_uniform_int_values[1];
-  c = x_54;
-  loop {
-    let x_59 : i32 = c;
-    let x_61 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_59 < x_61)) {
-    } else {
-      break;
-    }
-    let x_65 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_66 : i32 = c;
-    let x_70 : f32 = M1[x_65][clamp(~(x_66), 0, 1)];
-    let x_71 : f32 = a;
-    a = (x_71 + x_70);
-
-    continuing {
-      let x_73 : i32 = c;
-      c = (x_73 + 1);
-    }
-  }
-  let x_75 : f32 = a;
-  let x_77 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_75 == x_77)) {
-    let x_83 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_86 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_89 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_92 : i32 = x_10.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_83), f32(x_86), f32(x_89), f32(x_92));
-  } else {
-    let x_96 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_97 : f32 = f32(x_96);
-    x_GLF_color = vec4<f32>(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8737c6c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 M1 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float a = 0.0f;
-  int c = 0;
-  const float x_41 = asfloat(x_6[1].x);
-  const float x_43 = asfloat(x_6[2].x);
-  const float x_45 = asfloat(x_6[3].x);
-  const float x_47 = asfloat(x_6[4].x);
-  M1 = float2x2(float2(x_41, x_43), float2(x_45, x_47));
-  const float x_52 = asfloat(x_6[1].x);
-  a = x_52;
-  const int x_54 = asint(x_10[1].x);
-  c = x_54;
-  while (true) {
-    const int x_59 = c;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_61 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_59 < x_61)) {
-    } else {
-      break;
-    }
-    const int x_65 = asint(x_10[2].x);
-    const float x_70 = M1[x_65][clamp(~(c), 0, 1)];
-    a = (a + x_70);
-    {
-      c = (c + 1);
-    }
-  }
-  const float x_75 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_77 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_75 == x_77)) {
-    const int x_83 = asint(x_10[2].x);
-    const int x_86 = asint(x_10[1].x);
-    const int x_89 = asint(x_10[1].x);
-    const int x_92 = asint(x_10[2].x);
-    x_GLF_color = float4(float(x_83), float(x_86), float(x_89), float(x_92));
-  } else {
-    const int x_96 = asint(x_10[2].x);
-    const float x_97 = float(x_96);
-    x_GLF_color = float4(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.msl
deleted file mode 100644
index f0c07b4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  float2x2 M1 = float2x2(0.0f);
-  float a = 0.0f;
-  int c = 0;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_45 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[4].el;
-  M1 = float2x2(float2(x_41, x_43), float2(x_45, x_47));
-  float const x_52 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  a = x_52;
-  int const x_54 = x_10.x_GLF_uniform_int_values.arr[1].el;
-  c = x_54;
-  while (true) {
-    int const x_59 = c;
-    int const x_61 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_59 < x_61)) {
-    } else {
-      break;
-    }
-    int const x_65 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_66 = c;
-    float const x_70 = M1[x_65][clamp(~(x_66), 0, 1)];
-    float const x_71 = a;
-    a = (x_71 + x_70);
-    {
-      int const x_73 = c;
-      c = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-    }
-  }
-  float const x_75 = a;
-  float const x_77 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_75 == x_77)) {
-    int const x_83 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_86 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_89 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_92 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_83), float(x_86), float(x_89), float(x_92));
-  } else {
-    int const x_96 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_97 = float(x_96);
-    *(tint_symbol_3) = float4(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 379bc64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,182 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 117
-; Schema: 0
-               OpCapability Shader
-         %74 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %M1 "M1"
-               OpName %a "a"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-       %buf0 = OpTypeStruct %_arr_float_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %28 = OpConstantNull %mat2v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-        %106 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %M1 = OpVariable %_ptr_Function_mat2v2float Function %28
-          %a = OpVariable %_ptr_Function_float Function %31
-          %c = OpVariable %_ptr_Function_int Function %34
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %39 = OpLoad %float %38
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %48 = OpLoad %float %47
-         %49 = OpCompositeConstruct %v2float %39 %42
-         %50 = OpCompositeConstruct %v2float %45 %48
-         %51 = OpCompositeConstruct %mat2v2float %49 %50
-               OpStore %M1 %51
-         %52 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %53 = OpLoad %float %52
-               OpStore %a %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %56 = OpLoad %int %55
-               OpStore %c %56
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %c
-         %63 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpSLessThan %bool %61 %64
-               OpSelectionMerge %67 None
-               OpBranchConditional %65 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %58
-         %67 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %71 = OpLoad %int %70
-         %72 = OpLoad %int %c
-         %75 = OpNot %int %72
-         %73 = OpExtInst %int %74 SClamp %75 %int_0 %int_1
-         %76 = OpAccessChain %_ptr_Function_float %M1 %71 %73
-         %77 = OpLoad %float %76
-         %78 = OpLoad %float %a
-         %79 = OpFAdd %float %78 %77
-               OpStore %a %79
-               OpBranch %59
-         %59 = OpLabel
-         %80 = OpLoad %int %c
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %c %81
-               OpBranch %57
-         %58 = OpLabel
-         %82 = OpLoad %float %a
-         %83 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %84 = OpLoad %float %83
-         %85 = OpFOrdEqual %bool %82 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %96 = OpLoad %int %95
-         %97 = OpConvertSToF %float %90
-         %98 = OpConvertSToF %float %92
-         %99 = OpConvertSToF %float %94
-        %100 = OpConvertSToF %float %96
-        %101 = OpCompositeConstruct %v4float %97 %98 %99 %100
-               OpStore %x_GLF_color %101
-               OpBranch %86
-         %88 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %103 = OpLoad %int %102
-        %104 = OpConvertSToF %float %103
-        %105 = OpCompositeConstruct %v4float %104 %104 %104 %104
-               OpStore %x_GLF_color %105
-               OpBranch %86
-         %86 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %106
-        %109 = OpLabel
-        %110 = OpFunctionCall %void %main_1
-        %111 = OpLoad %v4float %x_GLF_color
-        %112 = OpCompositeConstruct %main_out %111
-               OpReturnValue %112
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %114 = OpLabel
-        %115 = OpFunctionCall %main_out %main_inner
-        %116 = OpCompositeExtract %v4float %115 0
-               OpStore %x_GLF_color_1_1 %116
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a1de151..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-not-clamp-matrix-access/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,77 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var M1 : mat2x2<f32>;
-  var a : f32;
-  var c : i32;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_45 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[4];
-  M1 = mat2x2<f32>(vec2<f32>(x_41, x_43), vec2<f32>(x_45, x_47));
-  let x_52 : f32 = x_6.x_GLF_uniform_float_values[1];
-  a = x_52;
-  let x_54 : i32 = x_10.x_GLF_uniform_int_values[1];
-  c = x_54;
-  loop {
-    let x_59 : i32 = c;
-    let x_61 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_59 < x_61)) {
-    } else {
-      break;
-    }
-    let x_65 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_66 : i32 = c;
-    let x_70 : f32 = M1[x_65][clamp(~(x_66), 0, 1)];
-    let x_71 : f32 = a;
-    a = (x_71 + x_70);
-
-    continuing {
-      let x_73 : i32 = c;
-      c = (x_73 + 1);
-    }
-  }
-  let x_75 : f32 = a;
-  let x_77 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_75 == x_77)) {
-    let x_83 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_86 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_89 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_92 : i32 = x_10.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_83), f32(x_86), f32(x_89), f32(x_92));
-  } else {
-    let x_96 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_97 : f32 = f32(x_96);
-    x_GLF_color = vec4<f32>(x_97, x_97, x_97, x_97);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4815ef5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int a = 0;
-  f = 2.0f;
-  a = int((1.0f - clamp(1.0f, 1.0f, f)));
-  const int x_31 = a;
-  const int x_33 = asint(x_7[1].x);
-  if ((x_31 == x_33)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_39 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const int x_42 = asint(x_7[1].x);
-    const int x_45 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_39), float(x_42), float(x_45), float(x_48));
-  } else {
-    const int x_52 = asint(x_7[1].x);
-    const float x_53 = float(x_52);
-    x_GLF_color = float4(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.msl
deleted file mode 100644
index f54d84e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  int a = 0;
-  f = 2.0f;
-  float const x_27 = f;
-  a = int((1.0f - clamp(1.0f, 1.0f, x_27)));
-  int const x_31 = a;
-  int const x_33 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_31 == x_33)) {
-    int const x_39 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_42 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_45 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_48 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_39), float(x_42), float(x_45), float(x_48));
-  } else {
-    int const x_52 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_53 = float(x_52);
-    *(tint_symbol_3) = float4(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f9c4a95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,115 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-         %30 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-    %float_2 = OpConstant %float 2
-    %float_1 = OpConstant %float 1
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %61 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %21
-          %a = OpVariable %_ptr_Function_int Function %24
-               OpStore %f %float_2
-         %26 = OpLoad %float %f
-         %29 = OpExtInst %float %30 NClamp %float_1 %float_1 %26
-         %31 = OpFSub %float %float_1 %29
-         %27 = OpConvertFToS %int %31
-               OpStore %a %27
-         %32 = OpLoad %int %a
-         %36 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %37 = OpLoad %int %36
-         %38 = OpIEqual %bool %32 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-         %44 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpConvertSToF %float %45
-         %53 = OpConvertSToF %float %47
-         %54 = OpConvertSToF %float %49
-         %55 = OpConvertSToF %float %51
-         %56 = OpCompositeConstruct %v4float %52 %53 %54 %55
-               OpStore %x_GLF_color %56
-               OpBranch %40
-         %42 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpConvertSToF %float %58
-         %60 = OpCompositeConstruct %v4float %59 %59 %59 %59
-               OpStore %x_GLF_color %60
-               OpBranch %40
-         %40 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %61
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-         %66 = OpLoad %v4float %x_GLF_color
-         %67 = OpCompositeConstruct %main_out %66
-               OpReturnValue %67
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %69 = OpLabel
-         %70 = OpFunctionCall %main_out %main_inner
-         %71 = OpCompositeExtract %v4float %70 0
-               OpStore %x_GLF_color_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index fd31b1f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var a : i32;
-  f = 2.0;
-  let x_27 : f32 = f;
-  a = i32((1.0 - clamp(1.0, 1.0, x_27)));
-  let x_31 : i32 = a;
-  let x_33 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_31 == x_33)) {
-    let x_39 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_45 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_48 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_39), f32(x_42), f32(x_45), f32(x_48));
-  } else {
-    let x_52 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_53 : f32 = f32(x_52);
-    x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4815ef5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  int a = 0;
-  f = 2.0f;
-  a = int((1.0f - clamp(1.0f, 1.0f, f)));
-  const int x_31 = a;
-  const int x_33 = asint(x_7[1].x);
-  if ((x_31 == x_33)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_39 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const int x_42 = asint(x_7[1].x);
-    const int x_45 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_39), float(x_42), float(x_45), float(x_48));
-  } else {
-    const int x_52 = asint(x_7[1].x);
-    const float x_53 = float(x_52);
-    x_GLF_color = float4(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.msl
deleted file mode 100644
index f54d84e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  int a = 0;
-  f = 2.0f;
-  float const x_27 = f;
-  a = int((1.0f - clamp(1.0f, 1.0f, x_27)));
-  int const x_31 = a;
-  int const x_33 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_31 == x_33)) {
-    int const x_39 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_42 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_45 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_48 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_39), float(x_42), float(x_45), float(x_48));
-  } else {
-    int const x_52 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_53 = float(x_52);
-    *(tint_symbol_3) = float4(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f9c4a95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,115 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-         %30 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-    %float_2 = OpConstant %float 2
-    %float_1 = OpConstant %float 1
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %61 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %21
-          %a = OpVariable %_ptr_Function_int Function %24
-               OpStore %f %float_2
-         %26 = OpLoad %float %f
-         %29 = OpExtInst %float %30 NClamp %float_1 %float_1 %26
-         %31 = OpFSub %float %float_1 %29
-         %27 = OpConvertFToS %int %31
-               OpStore %a %27
-         %32 = OpLoad %int %a
-         %36 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %37 = OpLoad %int %36
-         %38 = OpIEqual %bool %32 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-         %44 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %46 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpConvertSToF %float %45
-         %53 = OpConvertSToF %float %47
-         %54 = OpConvertSToF %float %49
-         %55 = OpConvertSToF %float %51
-         %56 = OpCompositeConstruct %v4float %52 %53 %54 %55
-               OpStore %x_GLF_color %56
-               OpBranch %40
-         %42 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpConvertSToF %float %58
-         %60 = OpCompositeConstruct %v4float %59 %59 %59 %59
-               OpStore %x_GLF_color %60
-               OpBranch %40
-         %40 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %61
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-         %66 = OpLoad %v4float %x_GLF_color
-         %67 = OpCompositeConstruct %main_out %66
-               OpReturnValue %67
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %69 = OpLabel
-         %70 = OpFunctionCall %main_out %main_inner
-         %71 = OpCompositeExtract %v4float %70 0
-               OpStore %x_GLF_color_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index fd31b1f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-one-minus-clamp-always-one-cast-to-int/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var a : i32;
-  f = 2.0;
-  let x_27 : f32 = f;
-  a = i32((1.0 - clamp(1.0, 1.0, x_27)));
-  let x_31 : i32 = a;
-  let x_33 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_31 == x_33)) {
-    let x_39 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_45 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_48 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_39), f32(x_42), f32(x_45), f32(x_48));
-  } else {
-    let x_52 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_53 : f32 = f32(x_52);
-    x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8062a6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  const int x_36 = asint(x_7[2].x);
-  a = x_36;
-  const int x_38 = asint(x_7[2].x);
-  i = x_38;
-  while (true) {
-    const int x_43 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    const int x_49 = asint(x_7[2].x);
-    j = x_49;
-    while (true) {
-      const int x_54 = j;
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const int x_56 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      while (true) {
-        const int x_64 = asint(x_7[1].x);
-        a = x_64;
-        const float x_66 = gl_FragCoord.y;
-        const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-        const float x_68 = asfloat(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-        if ((x_66 < x_68)) {
-          discard;
-        }
-        {
-          const int x_72 = a;
-          const int x_74 = asint(x_7[1].x);
-          if ((x_72 < x_74)) {
-          } else {
-            break;
-          }
-        }
-      }
-      const float x_77 = gl_FragCoord.y;
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const float x_79 = asfloat(x_11[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      if ((x_77 < x_79)) {
-        break;
-      }
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_87 = a;
-  const int x_89 = asint(x_7[1].x);
-  if ((x_87 == x_89)) {
-    const int x_94 = a;
-    const int x_97 = asint(x_7[2].x);
-    const int x_100 = asint(x_7[2].x);
-    x_GLF_color = float4(float(x_94), float(x_97), float(x_100), float(a));
-  } else {
-    const int x_106 = asint(x_7[2].x);
-    const float x_107 = float(x_106);
-    x_GLF_color = float4(x_107, x_107, x_107, x_107);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.msl
deleted file mode 100644
index cd94878..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_11, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  int const x_36 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  a = x_36;
-  int const x_38 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  i = x_38;
-  while (true) {
-    int const x_43 = i;
-    int const x_45 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    int const x_49 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    j = x_49;
-    while (true) {
-      int const x_54 = j;
-      int const x_56 = x_7.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      while (true) {
-        int const x_64 = x_7.x_GLF_uniform_int_values.arr[1].el;
-        a = x_64;
-        float const x_66 = (*(tint_symbol_3)).y;
-        float const x_68 = x_11.x_GLF_uniform_float_values.arr[0].el;
-        if ((x_66 < x_68)) {
-          discard_fragment();
-        }
-        {
-          int const x_72 = a;
-          int const x_74 = x_7.x_GLF_uniform_int_values.arr[1].el;
-          if ((x_72 < x_74)) {
-          } else {
-            break;
-          }
-        }
-      }
-      float const x_77 = (*(tint_symbol_3)).y;
-      float const x_79 = x_11.x_GLF_uniform_float_values.arr[0].el;
-      if ((x_77 < x_79)) {
-        break;
-      }
-      {
-        int const x_83 = j;
-        j = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_85 = i;
-      i = as_type<int>((as_type<uint>(x_85) + as_type<uint>(1)));
-    }
-  }
-  int const x_87 = a;
-  int const x_89 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_87 == x_89)) {
-    int const x_94 = a;
-    int const x_97 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_100 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_102 = a;
-    *(tint_symbol_4) = float4(float(x_94), float(x_97), float(x_100), float(x_102));
-  } else {
-    int const x_106 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    float const x_107 = float(x_106);
-    *(tint_symbol_4) = float4(x_107, x_107, x_107, x_107);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_11, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 50325cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,222 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 131
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-        %118 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %29
-          %i = OpVariable %_ptr_Function_int Function %29
-          %j = OpVariable %_ptr_Function_int Function %29
-         %35 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %36 = OpLoad %int %35
-               OpStore %a %36
-         %37 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %38 = OpLoad %int %37
-               OpStore %i %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpSLessThan %bool %43 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %40
-         %49 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %53 = OpLoad %int %52
-               OpStore %j %53
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %58 = OpLoad %int %j
-         %59 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %60 = OpLoad %int %59
-         %61 = OpSLessThan %bool %58 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %55
-         %62 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpLoopMerge %66 %67 None
-               OpBranch %68
-         %68 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %71 = OpLoad %int %70
-               OpStore %a %71
-         %73 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %74 = OpLoad %float %73
-         %76 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %77 = OpLoad %float %76
-         %78 = OpFOrdLessThan %bool %74 %77
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %79
-         %80 = OpLabel
-               OpKill
-         %79 = OpLabel
-               OpBranch %67
-         %67 = OpLabel
-         %81 = OpLoad %int %a
-         %82 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpSLessThan %bool %81 %83
-               OpBranchConditional %84 %65 %66
-         %66 = OpLabel
-         %85 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %86 = OpLoad %float %85
-         %87 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %88 = OpLoad %float %87
-         %89 = OpFOrdLessThan %bool %86 %88
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-               OpBranch %55
-         %90 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-         %92 = OpLoad %int %j
-         %93 = OpIAdd %int %92 %int_1
-               OpStore %j %93
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-         %94 = OpLoad %int %i
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %i %95
-               OpBranch %39
-         %40 = OpLabel
-         %96 = OpLoad %int %a
-         %97 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpIEqual %bool %96 %98
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %102
-        %101 = OpLabel
-        %103 = OpLoad %int %a
-        %104 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-        %107 = OpLoad %int %106
-        %108 = OpLoad %int %a
-        %109 = OpConvertSToF %float %103
-        %110 = OpConvertSToF %float %105
-        %111 = OpConvertSToF %float %107
-        %112 = OpConvertSToF %float %108
-        %113 = OpCompositeConstruct %v4float %109 %110 %111 %112
-               OpStore %x_GLF_color %113
-               OpBranch %100
-        %102 = OpLabel
-        %114 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-        %115 = OpLoad %int %114
-        %116 = OpConvertSToF %float %115
-        %117 = OpCompositeConstruct %v4float %116 %116 %116 %116
-               OpStore %x_GLF_color %117
-               OpBranch %100
-        %100 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %118
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %122 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %127 = OpLabel
-        %129 = OpLoad %v4float %gl_FragCoord_param_1
-        %128 = OpFunctionCall %main_out %main_inner %129
-        %130 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %130
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9373467..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,108 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  var j : i32;
-  let x_36 : i32 = x_7.x_GLF_uniform_int_values[2];
-  a = x_36;
-  let x_38 : i32 = x_7.x_GLF_uniform_int_values[2];
-  i = x_38;
-  loop {
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_7.x_GLF_uniform_int_values[0];
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
-    j = x_49;
-    loop {
-      let x_54 : i32 = j;
-      let x_56 : i32 = x_7.x_GLF_uniform_int_values[0];
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      loop {
-        let x_64 : i32 = x_7.x_GLF_uniform_int_values[1];
-        a = x_64;
-        let x_66 : f32 = gl_FragCoord.y;
-        let x_68 : f32 = x_11.x_GLF_uniform_float_values[0];
-        if ((x_66 < x_68)) {
-          discard;
-        }
-
-        continuing {
-          let x_72 : i32 = a;
-          let x_74 : i32 = x_7.x_GLF_uniform_int_values[1];
-          if ((x_72 < x_74)) {
-          } else {
-            break;
-          }
-        }
-      }
-      let x_77 : f32 = gl_FragCoord.y;
-      let x_79 : f32 = x_11.x_GLF_uniform_float_values[0];
-      if ((x_77 < x_79)) {
-        break;
-      }
-
-      continuing {
-        let x_83 : i32 = j;
-        j = (x_83 + 1);
-      }
-    }
-
-    continuing {
-      let x_85 : i32 = i;
-      i = (x_85 + 1);
-    }
-  }
-  let x_87 : i32 = a;
-  let x_89 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_87 == x_89)) {
-    let x_94 : i32 = a;
-    let x_97 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_100 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_102 : i32 = a;
-    x_GLF_color = vec4<f32>(f32(x_94), f32(x_97), f32(x_100), f32(x_102));
-  } else {
-    let x_106 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_107 : f32 = f32(x_106);
-    x_GLF_color = vec4<f32>(x_107, x_107, x_107, x_107);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8062a6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  const int x_36 = asint(x_7[2].x);
-  a = x_36;
-  const int x_38 = asint(x_7[2].x);
-  i = x_38;
-  while (true) {
-    const int x_43 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    const int x_49 = asint(x_7[2].x);
-    j = x_49;
-    while (true) {
-      const int x_54 = j;
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const int x_56 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      while (true) {
-        const int x_64 = asint(x_7[1].x);
-        a = x_64;
-        const float x_66 = gl_FragCoord.y;
-        const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-        const float x_68 = asfloat(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-        if ((x_66 < x_68)) {
-          discard;
-        }
-        {
-          const int x_72 = a;
-          const int x_74 = asint(x_7[1].x);
-          if ((x_72 < x_74)) {
-          } else {
-            break;
-          }
-        }
-      }
-      const float x_77 = gl_FragCoord.y;
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const float x_79 = asfloat(x_11[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      if ((x_77 < x_79)) {
-        break;
-      }
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_87 = a;
-  const int x_89 = asint(x_7[1].x);
-  if ((x_87 == x_89)) {
-    const int x_94 = a;
-    const int x_97 = asint(x_7[2].x);
-    const int x_100 = asint(x_7[2].x);
-    x_GLF_color = float4(float(x_94), float(x_97), float(x_100), float(a));
-  } else {
-    const int x_106 = asint(x_7[2].x);
-    const float x_107 = float(x_106);
-    x_GLF_color = float4(x_107, x_107, x_107, x_107);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.msl
deleted file mode 100644
index cd94878..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_11, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  int const x_36 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  a = x_36;
-  int const x_38 = x_7.x_GLF_uniform_int_values.arr[2].el;
-  i = x_38;
-  while (true) {
-    int const x_43 = i;
-    int const x_45 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    int const x_49 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    j = x_49;
-    while (true) {
-      int const x_54 = j;
-      int const x_56 = x_7.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      while (true) {
-        int const x_64 = x_7.x_GLF_uniform_int_values.arr[1].el;
-        a = x_64;
-        float const x_66 = (*(tint_symbol_3)).y;
-        float const x_68 = x_11.x_GLF_uniform_float_values.arr[0].el;
-        if ((x_66 < x_68)) {
-          discard_fragment();
-        }
-        {
-          int const x_72 = a;
-          int const x_74 = x_7.x_GLF_uniform_int_values.arr[1].el;
-          if ((x_72 < x_74)) {
-          } else {
-            break;
-          }
-        }
-      }
-      float const x_77 = (*(tint_symbol_3)).y;
-      float const x_79 = x_11.x_GLF_uniform_float_values.arr[0].el;
-      if ((x_77 < x_79)) {
-        break;
-      }
-      {
-        int const x_83 = j;
-        j = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_85 = i;
-      i = as_type<int>((as_type<uint>(x_85) + as_type<uint>(1)));
-    }
-  }
-  int const x_87 = a;
-  int const x_89 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_87 == x_89)) {
-    int const x_94 = a;
-    int const x_97 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_100 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    int const x_102 = a;
-    *(tint_symbol_4) = float4(float(x_94), float(x_97), float(x_100), float(x_102));
-  } else {
-    int const x_106 = x_7.x_GLF_uniform_int_values.arr[2].el;
-    float const x_107 = float(x_106);
-    *(tint_symbol_4) = float4(x_107, x_107, x_107, x_107);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_11, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 50325cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,222 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 131
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %main_out = OpTypeStruct %v4float
-        %118 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %29
-          %i = OpVariable %_ptr_Function_int Function %29
-          %j = OpVariable %_ptr_Function_int Function %29
-         %35 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %36 = OpLoad %int %35
-               OpStore %a %36
-         %37 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %38 = OpLoad %int %37
-               OpStore %i %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpSLessThan %bool %43 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %40
-         %49 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %53 = OpLoad %int %52
-               OpStore %j %53
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %58 = OpLoad %int %j
-         %59 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %60 = OpLoad %int %59
-         %61 = OpSLessThan %bool %58 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %55
-         %62 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpLoopMerge %66 %67 None
-               OpBranch %68
-         %68 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %71 = OpLoad %int %70
-               OpStore %a %71
-         %73 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %74 = OpLoad %float %73
-         %76 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %77 = OpLoad %float %76
-         %78 = OpFOrdLessThan %bool %74 %77
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %79
-         %80 = OpLabel
-               OpKill
-         %79 = OpLabel
-               OpBranch %67
-         %67 = OpLabel
-         %81 = OpLoad %int %a
-         %82 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpSLessThan %bool %81 %83
-               OpBranchConditional %84 %65 %66
-         %66 = OpLabel
-         %85 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %86 = OpLoad %float %85
-         %87 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %88 = OpLoad %float %87
-         %89 = OpFOrdLessThan %bool %86 %88
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-               OpBranch %55
-         %90 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-         %92 = OpLoad %int %j
-         %93 = OpIAdd %int %92 %int_1
-               OpStore %j %93
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-         %94 = OpLoad %int %i
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %i %95
-               OpBranch %39
-         %40 = OpLabel
-         %96 = OpLoad %int %a
-         %97 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpIEqual %bool %96 %98
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %102
-        %101 = OpLabel
-        %103 = OpLoad %int %a
-        %104 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-        %107 = OpLoad %int %106
-        %108 = OpLoad %int %a
-        %109 = OpConvertSToF %float %103
-        %110 = OpConvertSToF %float %105
-        %111 = OpConvertSToF %float %107
-        %112 = OpConvertSToF %float %108
-        %113 = OpCompositeConstruct %v4float %109 %110 %111 %112
-               OpStore %x_GLF_color %113
-               OpBranch %100
-        %102 = OpLabel
-        %114 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-        %115 = OpLoad %int %114
-        %116 = OpConvertSToF %float %115
-        %117 = OpCompositeConstruct %v4float %116 %116 %116 %116
-               OpStore %x_GLF_color %117
-               OpBranch %100
-        %100 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %118
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %122 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %127 = OpLabel
-        %129 = OpLoad %v4float %gl_FragCoord_param_1
-        %128 = OpFunctionCall %main_out %main_inner %129
-        %130 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %130
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9373467..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for-for-do-while-if-if/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,108 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  var j : i32;
-  let x_36 : i32 = x_7.x_GLF_uniform_int_values[2];
-  a = x_36;
-  let x_38 : i32 = x_7.x_GLF_uniform_int_values[2];
-  i = x_38;
-  loop {
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_7.x_GLF_uniform_int_values[0];
-    if ((x_43 < x_45)) {
-    } else {
-      break;
-    }
-    let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
-    j = x_49;
-    loop {
-      let x_54 : i32 = j;
-      let x_56 : i32 = x_7.x_GLF_uniform_int_values[0];
-      if ((x_54 < x_56)) {
-      } else {
-        break;
-      }
-      loop {
-        let x_64 : i32 = x_7.x_GLF_uniform_int_values[1];
-        a = x_64;
-        let x_66 : f32 = gl_FragCoord.y;
-        let x_68 : f32 = x_11.x_GLF_uniform_float_values[0];
-        if ((x_66 < x_68)) {
-          discard;
-        }
-
-        continuing {
-          let x_72 : i32 = a;
-          let x_74 : i32 = x_7.x_GLF_uniform_int_values[1];
-          if ((x_72 < x_74)) {
-          } else {
-            break;
-          }
-        }
-      }
-      let x_77 : f32 = gl_FragCoord.y;
-      let x_79 : f32 = x_11.x_GLF_uniform_float_values[0];
-      if ((x_77 < x_79)) {
-        break;
-      }
-
-      continuing {
-        let x_83 : i32 = j;
-        j = (x_83 + 1);
-      }
-    }
-
-    continuing {
-      let x_85 : i32 = i;
-      i = (x_85 + 1);
-    }
-  }
-  let x_87 : i32 = a;
-  let x_89 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_87 == x_89)) {
-    let x_94 : i32 = a;
-    let x_97 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_100 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_102 : i32 = a;
-    x_GLF_color = vec4<f32>(f32(x_94), f32(x_97), f32(x_100), f32(x_102));
-  } else {
-    let x_106 : i32 = x_7.x_GLF_uniform_int_values[2];
-    let x_107 : f32 = f32(x_106);
-    x_GLF_color = vec4<f32>(x_107, x_107, x_107, x_107);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e04095d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,217 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int i_4 = 0;
-  int i_5 = 0;
-  int i_6 = 0;
-  int i_7 = 0;
-  int i_8 = 0;
-  int i_9 = 0;
-  int i_10 = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_104 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  a = x_104;
-  const float x_106 = asfloat(x_7[1].x);
-  b = x_106;
-  const int x_24 = asint(x_11[1].x);
-  i = x_24;
-  while (true) {
-    const int x_25 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_26 = asint(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_25 < x_26)) {
-    } else {
-      break;
-    }
-    const int x_27 = asint(x_11[1].x);
-    i_1 = x_27;
-    while (true) {
-      const int x_28 = i_1;
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_29 = asint(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      if ((x_28 < x_29)) {
-      } else {
-        break;
-      }
-      const int x_30 = asint(x_11[1].x);
-      i_2 = x_30;
-      while (true) {
-        const int x_31 = i_2;
-        const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-        const int x_32 = asint(x_11[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-        if ((x_31 < x_32)) {
-        } else {
-          break;
-        }
-        const int x_33 = asint(x_11[2].x);
-        i_3 = x_33;
-        while (true) {
-          const int x_34 = i_3;
-          const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-          const int x_35 = asint(x_11[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-          if ((x_34 < x_35)) {
-          } else {
-            break;
-          }
-          const int x_36 = asint(x_11[2].x);
-          i_4 = x_36;
-          while (true) {
-            const int x_37 = i_4;
-            const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-            const int x_38 = asint(x_11[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-            if ((x_37 < x_38)) {
-            } else {
-              break;
-            }
-            const int x_39 = asint(x_11[1].x);
-            i_5 = x_39;
-            while (true) {
-              const int x_40 = i_5;
-              const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-              const int x_41 = asint(x_11[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-              if ((x_40 < x_41)) {
-              } else {
-                break;
-              }
-              const int x_42 = asint(x_11[1].x);
-              i_6 = x_42;
-              while (true) {
-                const int x_43 = i_6;
-                const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-                const int x_44 = asint(x_11[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-                if ((x_43 < x_44)) {
-                } else {
-                  break;
-                }
-                const int x_45 = asint(x_11[1].x);
-                i_7 = x_45;
-                while (true) {
-                  const int x_46 = i_7;
-                  const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-                  const int x_47 = asint(x_11[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-                  if ((x_46 < x_47)) {
-                  } else {
-                    break;
-                  }
-                  const int x_48 = asint(x_11[1].x);
-                  i_8 = x_48;
-                  while (true) {
-                    const int x_49 = i_8;
-                    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-                    const int x_50 = asint(x_11[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-                    if ((x_49 < x_50)) {
-                    } else {
-                      break;
-                    }
-                    const int x_51 = asint(x_11[1].x);
-                    i_9 = x_51;
-                    while (true) {
-                      const int x_52 = i_9;
-                      const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-                      const int x_53 = asint(x_11[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-                      if ((x_52 < x_53)) {
-                      } else {
-                        break;
-                      }
-                      const int x_54 = asint(x_11[1].x);
-                      i_10 = x_54;
-                      while (true) {
-                        const int x_55 = i_10;
-                        const uint scalar_offset_11 = ((16u * uint(0))) / 4;
-                        const int x_56 = asint(x_11[scalar_offset_11 / 4][scalar_offset_11 % 4]);
-                        if ((x_55 < x_56)) {
-                        } else {
-                          break;
-                        }
-                        const float x_196 = asfloat(x_7[1].x);
-                        a = x_196;
-                        const float x_198 = gl_FragCoord.y;
-                        const float x_200 = asfloat(x_7[1].x);
-                        if ((x_198 > x_200)) {
-                          break;
-                        }
-                        {
-                          i_10 = (i_10 + 1);
-                        }
-                      }
-                      {
-                        i_9 = (i_9 + 1);
-                      }
-                    }
-                    {
-                      i_8 = (i_8 + 1);
-                    }
-                  }
-                  {
-                    i_7 = (i_7 + 1);
-                  }
-                }
-                {
-                  i_6 = (i_6 + 1);
-                }
-              }
-              {
-                i_5 = (i_5 + 1);
-              }
-            }
-            {
-              i_4 = (i_4 + 1);
-            }
-          }
-          {
-            i_3 = (i_3 + 1);
-          }
-        }
-        {
-          i_2 = (i_2 + 1);
-        }
-      }
-      {
-        i_1 = (i_1 + 1);
-      }
-    }
-    b = (b + 1.0f);
-    {
-      i = (i + 1);
-    }
-  }
-  x_GLF_color = float4(b, a, a, b);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.msl
deleted file mode 100644
index 669df37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,235 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float a = 0.0f;
-  float b = 0.0f;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int i_4 = 0;
-  int i_5 = 0;
-  int i_6 = 0;
-  int i_7 = 0;
-  int i_8 = 0;
-  int i_9 = 0;
-  int i_10 = 0;
-  float const x_104 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  a = x_104;
-  float const x_106 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  b = x_106;
-  int const x_24 = x_11.x_GLF_uniform_int_values.arr[1].el;
-  i = x_24;
-  while (true) {
-    int const x_25 = i;
-    int const x_26 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_25 < x_26)) {
-    } else {
-      break;
-    }
-    int const x_27 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    i_1 = x_27;
-    while (true) {
-      int const x_28 = i_1;
-      int const x_29 = x_11.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_28 < x_29)) {
-      } else {
-        break;
-      }
-      int const x_30 = x_11.x_GLF_uniform_int_values.arr[1].el;
-      i_2 = x_30;
-      while (true) {
-        int const x_31 = i_2;
-        int const x_32 = x_11.x_GLF_uniform_int_values.arr[0].el;
-        if ((x_31 < x_32)) {
-        } else {
-          break;
-        }
-        int const x_33 = x_11.x_GLF_uniform_int_values.arr[2].el;
-        i_3 = x_33;
-        while (true) {
-          int const x_34 = i_3;
-          int const x_35 = x_11.x_GLF_uniform_int_values.arr[0].el;
-          if ((x_34 < x_35)) {
-          } else {
-            break;
-          }
-          int const x_36 = x_11.x_GLF_uniform_int_values.arr[2].el;
-          i_4 = x_36;
-          while (true) {
-            int const x_37 = i_4;
-            int const x_38 = x_11.x_GLF_uniform_int_values.arr[0].el;
-            if ((x_37 < x_38)) {
-            } else {
-              break;
-            }
-            int const x_39 = x_11.x_GLF_uniform_int_values.arr[1].el;
-            i_5 = x_39;
-            while (true) {
-              int const x_40 = i_5;
-              int const x_41 = x_11.x_GLF_uniform_int_values.arr[0].el;
-              if ((x_40 < x_41)) {
-              } else {
-                break;
-              }
-              int const x_42 = x_11.x_GLF_uniform_int_values.arr[1].el;
-              i_6 = x_42;
-              while (true) {
-                int const x_43 = i_6;
-                int const x_44 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                if ((x_43 < x_44)) {
-                } else {
-                  break;
-                }
-                int const x_45 = x_11.x_GLF_uniform_int_values.arr[1].el;
-                i_7 = x_45;
-                while (true) {
-                  int const x_46 = i_7;
-                  int const x_47 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                  if ((x_46 < x_47)) {
-                  } else {
-                    break;
-                  }
-                  int const x_48 = x_11.x_GLF_uniform_int_values.arr[1].el;
-                  i_8 = x_48;
-                  while (true) {
-                    int const x_49 = i_8;
-                    int const x_50 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                    if ((x_49 < x_50)) {
-                    } else {
-                      break;
-                    }
-                    int const x_51 = x_11.x_GLF_uniform_int_values.arr[1].el;
-                    i_9 = x_51;
-                    while (true) {
-                      int const x_52 = i_9;
-                      int const x_53 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                      if ((x_52 < x_53)) {
-                      } else {
-                        break;
-                      }
-                      int const x_54 = x_11.x_GLF_uniform_int_values.arr[1].el;
-                      i_10 = x_54;
-                      while (true) {
-                        int const x_55 = i_10;
-                        int const x_56 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                        if ((x_55 < x_56)) {
-                        } else {
-                          break;
-                        }
-                        float const x_196 = x_7.x_GLF_uniform_float_values.arr[1].el;
-                        a = x_196;
-                        float const x_198 = (*(tint_symbol_3)).y;
-                        float const x_200 = x_7.x_GLF_uniform_float_values.arr[1].el;
-                        if ((x_198 > x_200)) {
-                          break;
-                        }
-                        {
-                          int const x_57 = i_10;
-                          i_10 = as_type<int>((as_type<uint>(x_57) + as_type<uint>(1)));
-                        }
-                      }
-                      {
-                        int const x_59 = i_9;
-                        i_9 = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_61 = i_8;
-                      i_8 = as_type<int>((as_type<uint>(x_61) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_63 = i_7;
-                    i_7 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_65 = i_6;
-                  i_6 = as_type<int>((as_type<uint>(x_65) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_67 = i_5;
-                i_5 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_69 = i_4;
-              i_4 = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_71 = i_3;
-            i_3 = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_73 = i_2;
-          i_2 = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_75 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-      }
-    }
-    float const x_204 = b;
-    b = (x_204 + 1.0f);
-    {
-      int const x_77 = i;
-      i = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-    }
-  }
-  float const x_206 = b;
-  float const x_207 = a;
-  float const x_208 = a;
-  float const x_209 = b;
-  *(tint_symbol_4) = float4(x_206, x_207, x_208, x_209);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_11, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index eccc08e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,441 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 252
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %i_3 "i_3"
-               OpName %i_4 "i_4"
-               OpName %i_5 "i_5"
-               OpName %i_6 "i_6"
-               OpName %i_7 "i_7"
-               OpName %i_8 "i_8"
-               OpName %i_9 "i_9"
-               OpName %i_10 "i_10"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %239 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %29
-          %b = OpVariable %_ptr_Function_float Function %29
-          %i = OpVariable %_ptr_Function_int Function %33
-        %i_1 = OpVariable %_ptr_Function_int Function %33
-        %i_2 = OpVariable %_ptr_Function_int Function %33
-        %i_3 = OpVariable %_ptr_Function_int Function %33
-        %i_4 = OpVariable %_ptr_Function_int Function %33
-        %i_5 = OpVariable %_ptr_Function_int Function %33
-        %i_6 = OpVariable %_ptr_Function_int Function %33
-        %i_7 = OpVariable %_ptr_Function_int Function %33
-        %i_8 = OpVariable %_ptr_Function_int Function %33
-        %i_9 = OpVariable %_ptr_Function_int Function %33
-       %i_10 = OpVariable %_ptr_Function_int Function %33
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %48 = OpLoad %float %47
-               OpStore %a %48
-         %50 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %51 = OpLoad %float %50
-               OpStore %b %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %54 = OpLoad %int %53
-               OpStore %i %54
-               OpBranch %55
-         %55 = OpLabel
-               OpLoopMerge %56 %57 None
-               OpBranch %58
-         %58 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpSLessThan %bool %59 %61
-               OpSelectionMerge %64 None
-               OpBranchConditional %62 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %56
-         %64 = OpLabel
-         %67 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %68 = OpLoad %int %67
-               OpStore %i_1 %68
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %i_1
-         %74 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %75 = OpLoad %int %74
-         %76 = OpSLessThan %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %70
-         %77 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %81 = OpLoad %int %80
-               OpStore %i_2 %81
-               OpBranch %82
-         %82 = OpLabel
-               OpLoopMerge %83 %84 None
-               OpBranch %85
-         %85 = OpLabel
-         %86 = OpLoad %int %i_2
-         %87 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpSLessThan %bool %86 %88
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %83
-         %90 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %95 = OpLoad %int %94
-               OpStore %i_3 %95
-               OpBranch %96
-         %96 = OpLabel
-               OpLoopMerge %97 %98 None
-               OpBranch %99
-         %99 = OpLabel
-        %100 = OpLoad %int %i_3
-        %101 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %102 = OpLoad %int %101
-        %103 = OpSLessThan %bool %100 %102
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %106
-        %105 = OpLabel
-               OpBranch %104
-        %106 = OpLabel
-               OpBranch %97
-        %104 = OpLabel
-        %107 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-        %108 = OpLoad %int %107
-               OpStore %i_4 %108
-               OpBranch %109
-        %109 = OpLabel
-               OpLoopMerge %110 %111 None
-               OpBranch %112
-        %112 = OpLabel
-        %113 = OpLoad %int %i_4
-        %114 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %115 = OpLoad %int %114
-        %116 = OpSLessThan %bool %113 %115
-               OpSelectionMerge %117 None
-               OpBranchConditional %116 %118 %119
-        %118 = OpLabel
-               OpBranch %117
-        %119 = OpLabel
-               OpBranch %110
-        %117 = OpLabel
-        %120 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %121 = OpLoad %int %120
-               OpStore %i_5 %121
-               OpBranch %122
-        %122 = OpLabel
-               OpLoopMerge %123 %124 None
-               OpBranch %125
-        %125 = OpLabel
-        %126 = OpLoad %int %i_5
-        %127 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %128 = OpLoad %int %127
-        %129 = OpSLessThan %bool %126 %128
-               OpSelectionMerge %130 None
-               OpBranchConditional %129 %131 %132
-        %131 = OpLabel
-               OpBranch %130
-        %132 = OpLabel
-               OpBranch %123
-        %130 = OpLabel
-        %133 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %134 = OpLoad %int %133
-               OpStore %i_6 %134
-               OpBranch %135
-        %135 = OpLabel
-               OpLoopMerge %136 %137 None
-               OpBranch %138
-        %138 = OpLabel
-        %139 = OpLoad %int %i_6
-        %140 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %141 = OpLoad %int %140
-        %142 = OpSLessThan %bool %139 %141
-               OpSelectionMerge %143 None
-               OpBranchConditional %142 %144 %145
-        %144 = OpLabel
-               OpBranch %143
-        %145 = OpLabel
-               OpBranch %136
-        %143 = OpLabel
-        %146 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %147 = OpLoad %int %146
-               OpStore %i_7 %147
-               OpBranch %148
-        %148 = OpLabel
-               OpLoopMerge %149 %150 None
-               OpBranch %151
-        %151 = OpLabel
-        %152 = OpLoad %int %i_7
-        %153 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %154 = OpLoad %int %153
-        %155 = OpSLessThan %bool %152 %154
-               OpSelectionMerge %156 None
-               OpBranchConditional %155 %157 %158
-        %157 = OpLabel
-               OpBranch %156
-        %158 = OpLabel
-               OpBranch %149
-        %156 = OpLabel
-        %159 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %160 = OpLoad %int %159
-               OpStore %i_8 %160
-               OpBranch %161
-        %161 = OpLabel
-               OpLoopMerge %162 %163 None
-               OpBranch %164
-        %164 = OpLabel
-        %165 = OpLoad %int %i_8
-        %166 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %167 = OpLoad %int %166
-        %168 = OpSLessThan %bool %165 %167
-               OpSelectionMerge %169 None
-               OpBranchConditional %168 %170 %171
-        %170 = OpLabel
-               OpBranch %169
-        %171 = OpLabel
-               OpBranch %162
-        %169 = OpLabel
-        %172 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %173 = OpLoad %int %172
-               OpStore %i_9 %173
-               OpBranch %174
-        %174 = OpLabel
-               OpLoopMerge %175 %176 None
-               OpBranch %177
-        %177 = OpLabel
-        %178 = OpLoad %int %i_9
-        %179 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %180 = OpLoad %int %179
-        %181 = OpSLessThan %bool %178 %180
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %184
-        %183 = OpLabel
-               OpBranch %182
-        %184 = OpLabel
-               OpBranch %175
-        %182 = OpLabel
-        %185 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %186 = OpLoad %int %185
-               OpStore %i_10 %186
-               OpBranch %187
-        %187 = OpLabel
-               OpLoopMerge %188 %189 None
-               OpBranch %190
-        %190 = OpLabel
-        %191 = OpLoad %int %i_10
-        %192 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %193 = OpLoad %int %192
-        %194 = OpSLessThan %bool %191 %193
-               OpSelectionMerge %195 None
-               OpBranchConditional %194 %196 %197
-        %196 = OpLabel
-               OpBranch %195
-        %197 = OpLabel
-               OpBranch %188
-        %195 = OpLabel
-        %198 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %199 = OpLoad %float %198
-               OpStore %a %199
-        %202 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %203 = OpLoad %float %202
-        %204 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %205 = OpLoad %float %204
-        %206 = OpFOrdGreaterThan %bool %203 %205
-               OpSelectionMerge %207 None
-               OpBranchConditional %206 %208 %207
-        %208 = OpLabel
-               OpBranch %188
-        %207 = OpLabel
-               OpBranch %189
-        %189 = OpLabel
-        %209 = OpLoad %int %i_10
-        %210 = OpIAdd %int %209 %int_1
-               OpStore %i_10 %210
-               OpBranch %187
-        %188 = OpLabel
-               OpBranch %176
-        %176 = OpLabel
-        %211 = OpLoad %int %i_9
-        %212 = OpIAdd %int %211 %int_1
-               OpStore %i_9 %212
-               OpBranch %174
-        %175 = OpLabel
-               OpBranch %163
-        %163 = OpLabel
-        %213 = OpLoad %int %i_8
-        %214 = OpIAdd %int %213 %int_1
-               OpStore %i_8 %214
-               OpBranch %161
-        %162 = OpLabel
-               OpBranch %150
-        %150 = OpLabel
-        %215 = OpLoad %int %i_7
-        %216 = OpIAdd %int %215 %int_1
-               OpStore %i_7 %216
-               OpBranch %148
-        %149 = OpLabel
-               OpBranch %137
-        %137 = OpLabel
-        %217 = OpLoad %int %i_6
-        %218 = OpIAdd %int %217 %int_1
-               OpStore %i_6 %218
-               OpBranch %135
-        %136 = OpLabel
-               OpBranch %124
-        %124 = OpLabel
-        %219 = OpLoad %int %i_5
-        %220 = OpIAdd %int %219 %int_1
-               OpStore %i_5 %220
-               OpBranch %122
-        %123 = OpLabel
-               OpBranch %111
-        %111 = OpLabel
-        %221 = OpLoad %int %i_4
-        %222 = OpIAdd %int %221 %int_1
-               OpStore %i_4 %222
-               OpBranch %109
-        %110 = OpLabel
-               OpBranch %98
-         %98 = OpLabel
-        %223 = OpLoad %int %i_3
-        %224 = OpIAdd %int %223 %int_1
-               OpStore %i_3 %224
-               OpBranch %96
-         %97 = OpLabel
-               OpBranch %84
-         %84 = OpLabel
-        %225 = OpLoad %int %i_2
-        %226 = OpIAdd %int %225 %int_1
-               OpStore %i_2 %226
-               OpBranch %82
-         %83 = OpLabel
-               OpBranch %71
-         %71 = OpLabel
-        %227 = OpLoad %int %i_1
-        %228 = OpIAdd %int %227 %int_1
-               OpStore %i_1 %228
-               OpBranch %69
-         %70 = OpLabel
-        %229 = OpLoad %float %b
-        %231 = OpFAdd %float %229 %float_1
-               OpStore %b %231
-               OpBranch %57
-         %57 = OpLabel
-        %232 = OpLoad %int %i
-        %233 = OpIAdd %int %232 %int_1
-               OpStore %i %233
-               OpBranch %55
-         %56 = OpLabel
-        %234 = OpLoad %float %b
-        %235 = OpLoad %float %a
-        %236 = OpLoad %float %a
-        %237 = OpLoad %float %b
-        %238 = OpCompositeConstruct %v4float %234 %235 %236 %237
-               OpStore %x_GLF_color %238
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %239
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %243 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %244 = OpFunctionCall %void %main_1
-        %245 = OpLoad %v4float %x_GLF_color
-        %246 = OpCompositeConstruct %main_out %245
-               OpReturnValue %246
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %248 = OpLabel
-        %250 = OpLoad %v4float %gl_FragCoord_param_1
-        %249 = OpFunctionCall %main_out %main_inner %250
-        %251 = OpCompositeExtract %v4float %249 0
-               OpStore %x_GLF_color_1_1 %251
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6a32b2d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,233 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var i_3 : i32;
-  var i_4 : i32;
-  var i_5 : i32;
-  var i_6 : i32;
-  var i_7 : i32;
-  var i_8 : i32;
-  var i_9 : i32;
-  var i_10 : i32;
-  let x_104 : f32 = x_7.x_GLF_uniform_float_values[0];
-  a = x_104;
-  let x_106 : f32 = x_7.x_GLF_uniform_float_values[1];
-  b = x_106;
-  let x_24 : i32 = x_11.x_GLF_uniform_int_values[1];
-  i = x_24;
-  loop {
-    let x_25 : i32 = i;
-    let x_26 : i32 = x_11.x_GLF_uniform_int_values[0];
-    if ((x_25 < x_26)) {
-    } else {
-      break;
-    }
-    let x_27 : i32 = x_11.x_GLF_uniform_int_values[1];
-    i_1 = x_27;
-    loop {
-      let x_28 : i32 = i_1;
-      let x_29 : i32 = x_11.x_GLF_uniform_int_values[0];
-      if ((x_28 < x_29)) {
-      } else {
-        break;
-      }
-      let x_30 : i32 = x_11.x_GLF_uniform_int_values[1];
-      i_2 = x_30;
-      loop {
-        let x_31 : i32 = i_2;
-        let x_32 : i32 = x_11.x_GLF_uniform_int_values[0];
-        if ((x_31 < x_32)) {
-        } else {
-          break;
-        }
-        let x_33 : i32 = x_11.x_GLF_uniform_int_values[2];
-        i_3 = x_33;
-        loop {
-          let x_34 : i32 = i_3;
-          let x_35 : i32 = x_11.x_GLF_uniform_int_values[0];
-          if ((x_34 < x_35)) {
-          } else {
-            break;
-          }
-          let x_36 : i32 = x_11.x_GLF_uniform_int_values[2];
-          i_4 = x_36;
-          loop {
-            let x_37 : i32 = i_4;
-            let x_38 : i32 = x_11.x_GLF_uniform_int_values[0];
-            if ((x_37 < x_38)) {
-            } else {
-              break;
-            }
-            let x_39 : i32 = x_11.x_GLF_uniform_int_values[1];
-            i_5 = x_39;
-            loop {
-              let x_40 : i32 = i_5;
-              let x_41 : i32 = x_11.x_GLF_uniform_int_values[0];
-              if ((x_40 < x_41)) {
-              } else {
-                break;
-              }
-              let x_42 : i32 = x_11.x_GLF_uniform_int_values[1];
-              i_6 = x_42;
-              loop {
-                let x_43 : i32 = i_6;
-                let x_44 : i32 = x_11.x_GLF_uniform_int_values[0];
-                if ((x_43 < x_44)) {
-                } else {
-                  break;
-                }
-                let x_45 : i32 = x_11.x_GLF_uniform_int_values[1];
-                i_7 = x_45;
-                loop {
-                  let x_46 : i32 = i_7;
-                  let x_47 : i32 = x_11.x_GLF_uniform_int_values[0];
-                  if ((x_46 < x_47)) {
-                  } else {
-                    break;
-                  }
-                  let x_48 : i32 = x_11.x_GLF_uniform_int_values[1];
-                  i_8 = x_48;
-                  loop {
-                    let x_49 : i32 = i_8;
-                    let x_50 : i32 = x_11.x_GLF_uniform_int_values[0];
-                    if ((x_49 < x_50)) {
-                    } else {
-                      break;
-                    }
-                    let x_51 : i32 = x_11.x_GLF_uniform_int_values[1];
-                    i_9 = x_51;
-                    loop {
-                      let x_52 : i32 = i_9;
-                      let x_53 : i32 = x_11.x_GLF_uniform_int_values[0];
-                      if ((x_52 < x_53)) {
-                      } else {
-                        break;
-                      }
-                      let x_54 : i32 = x_11.x_GLF_uniform_int_values[1];
-                      i_10 = x_54;
-                      loop {
-                        let x_55 : i32 = i_10;
-                        let x_56 : i32 = x_11.x_GLF_uniform_int_values[0];
-                        if ((x_55 < x_56)) {
-                        } else {
-                          break;
-                        }
-                        let x_196 : f32 = x_7.x_GLF_uniform_float_values[1];
-                        a = x_196;
-                        let x_198 : f32 = gl_FragCoord.y;
-                        let x_200 : f32 = x_7.x_GLF_uniform_float_values[1];
-                        if ((x_198 > x_200)) {
-                          break;
-                        }
-
-                        continuing {
-                          let x_57 : i32 = i_10;
-                          i_10 = (x_57 + 1);
-                        }
-                      }
-
-                      continuing {
-                        let x_59 : i32 = i_9;
-                        i_9 = (x_59 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_61 : i32 = i_8;
-                      i_8 = (x_61 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_63 : i32 = i_7;
-                    i_7 = (x_63 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_65 : i32 = i_6;
-                  i_6 = (x_65 + 1);
-                }
-              }
-
-              continuing {
-                let x_67 : i32 = i_5;
-                i_5 = (x_67 + 1);
-              }
-            }
-
-            continuing {
-              let x_69 : i32 = i_4;
-              i_4 = (x_69 + 1);
-            }
-          }
-
-          continuing {
-            let x_71 : i32 = i_3;
-            i_3 = (x_71 + 1);
-          }
-        }
-
-        continuing {
-          let x_73 : i32 = i_2;
-          i_2 = (x_73 + 1);
-        }
-      }
-
-      continuing {
-        let x_75 : i32 = i_1;
-        i_1 = (x_75 + 1);
-      }
-    }
-    let x_204 : f32 = b;
-    b = (x_204 + 1.0);
-
-    continuing {
-      let x_77 : i32 = i;
-      i = (x_77 + 1);
-    }
-  }
-  let x_206 : f32 = b;
-  let x_207 : f32 = a;
-  let x_208 : f32 = a;
-  let x_209 : f32 = b;
-  x_GLF_color = vec4<f32>(x_206, x_207, x_208, x_209);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e04095d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,217 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int i_4 = 0;
-  int i_5 = 0;
-  int i_6 = 0;
-  int i_7 = 0;
-  int i_8 = 0;
-  int i_9 = 0;
-  int i_10 = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_104 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  a = x_104;
-  const float x_106 = asfloat(x_7[1].x);
-  b = x_106;
-  const int x_24 = asint(x_11[1].x);
-  i = x_24;
-  while (true) {
-    const int x_25 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_26 = asint(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_25 < x_26)) {
-    } else {
-      break;
-    }
-    const int x_27 = asint(x_11[1].x);
-    i_1 = x_27;
-    while (true) {
-      const int x_28 = i_1;
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_29 = asint(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      if ((x_28 < x_29)) {
-      } else {
-        break;
-      }
-      const int x_30 = asint(x_11[1].x);
-      i_2 = x_30;
-      while (true) {
-        const int x_31 = i_2;
-        const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-        const int x_32 = asint(x_11[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-        if ((x_31 < x_32)) {
-        } else {
-          break;
-        }
-        const int x_33 = asint(x_11[2].x);
-        i_3 = x_33;
-        while (true) {
-          const int x_34 = i_3;
-          const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-          const int x_35 = asint(x_11[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-          if ((x_34 < x_35)) {
-          } else {
-            break;
-          }
-          const int x_36 = asint(x_11[2].x);
-          i_4 = x_36;
-          while (true) {
-            const int x_37 = i_4;
-            const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-            const int x_38 = asint(x_11[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-            if ((x_37 < x_38)) {
-            } else {
-              break;
-            }
-            const int x_39 = asint(x_11[1].x);
-            i_5 = x_39;
-            while (true) {
-              const int x_40 = i_5;
-              const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-              const int x_41 = asint(x_11[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-              if ((x_40 < x_41)) {
-              } else {
-                break;
-              }
-              const int x_42 = asint(x_11[1].x);
-              i_6 = x_42;
-              while (true) {
-                const int x_43 = i_6;
-                const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-                const int x_44 = asint(x_11[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-                if ((x_43 < x_44)) {
-                } else {
-                  break;
-                }
-                const int x_45 = asint(x_11[1].x);
-                i_7 = x_45;
-                while (true) {
-                  const int x_46 = i_7;
-                  const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-                  const int x_47 = asint(x_11[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-                  if ((x_46 < x_47)) {
-                  } else {
-                    break;
-                  }
-                  const int x_48 = asint(x_11[1].x);
-                  i_8 = x_48;
-                  while (true) {
-                    const int x_49 = i_8;
-                    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-                    const int x_50 = asint(x_11[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-                    if ((x_49 < x_50)) {
-                    } else {
-                      break;
-                    }
-                    const int x_51 = asint(x_11[1].x);
-                    i_9 = x_51;
-                    while (true) {
-                      const int x_52 = i_9;
-                      const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-                      const int x_53 = asint(x_11[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-                      if ((x_52 < x_53)) {
-                      } else {
-                        break;
-                      }
-                      const int x_54 = asint(x_11[1].x);
-                      i_10 = x_54;
-                      while (true) {
-                        const int x_55 = i_10;
-                        const uint scalar_offset_11 = ((16u * uint(0))) / 4;
-                        const int x_56 = asint(x_11[scalar_offset_11 / 4][scalar_offset_11 % 4]);
-                        if ((x_55 < x_56)) {
-                        } else {
-                          break;
-                        }
-                        const float x_196 = asfloat(x_7[1].x);
-                        a = x_196;
-                        const float x_198 = gl_FragCoord.y;
-                        const float x_200 = asfloat(x_7[1].x);
-                        if ((x_198 > x_200)) {
-                          break;
-                        }
-                        {
-                          i_10 = (i_10 + 1);
-                        }
-                      }
-                      {
-                        i_9 = (i_9 + 1);
-                      }
-                    }
-                    {
-                      i_8 = (i_8 + 1);
-                    }
-                  }
-                  {
-                    i_7 = (i_7 + 1);
-                  }
-                }
-                {
-                  i_6 = (i_6 + 1);
-                }
-              }
-              {
-                i_5 = (i_5 + 1);
-              }
-            }
-            {
-              i_4 = (i_4 + 1);
-            }
-          }
-          {
-            i_3 = (i_3 + 1);
-          }
-        }
-        {
-          i_2 = (i_2 + 1);
-        }
-      }
-      {
-        i_1 = (i_1 + 1);
-      }
-    }
-    b = (b + 1.0f);
-    {
-      i = (i + 1);
-    }
-  }
-  x_GLF_color = float4(b, a, a, b);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.msl
deleted file mode 100644
index 669df37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,235 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float a = 0.0f;
-  float b = 0.0f;
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int i_4 = 0;
-  int i_5 = 0;
-  int i_6 = 0;
-  int i_7 = 0;
-  int i_8 = 0;
-  int i_9 = 0;
-  int i_10 = 0;
-  float const x_104 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  a = x_104;
-  float const x_106 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  b = x_106;
-  int const x_24 = x_11.x_GLF_uniform_int_values.arr[1].el;
-  i = x_24;
-  while (true) {
-    int const x_25 = i;
-    int const x_26 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_25 < x_26)) {
-    } else {
-      break;
-    }
-    int const x_27 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    i_1 = x_27;
-    while (true) {
-      int const x_28 = i_1;
-      int const x_29 = x_11.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_28 < x_29)) {
-      } else {
-        break;
-      }
-      int const x_30 = x_11.x_GLF_uniform_int_values.arr[1].el;
-      i_2 = x_30;
-      while (true) {
-        int const x_31 = i_2;
-        int const x_32 = x_11.x_GLF_uniform_int_values.arr[0].el;
-        if ((x_31 < x_32)) {
-        } else {
-          break;
-        }
-        int const x_33 = x_11.x_GLF_uniform_int_values.arr[2].el;
-        i_3 = x_33;
-        while (true) {
-          int const x_34 = i_3;
-          int const x_35 = x_11.x_GLF_uniform_int_values.arr[0].el;
-          if ((x_34 < x_35)) {
-          } else {
-            break;
-          }
-          int const x_36 = x_11.x_GLF_uniform_int_values.arr[2].el;
-          i_4 = x_36;
-          while (true) {
-            int const x_37 = i_4;
-            int const x_38 = x_11.x_GLF_uniform_int_values.arr[0].el;
-            if ((x_37 < x_38)) {
-            } else {
-              break;
-            }
-            int const x_39 = x_11.x_GLF_uniform_int_values.arr[1].el;
-            i_5 = x_39;
-            while (true) {
-              int const x_40 = i_5;
-              int const x_41 = x_11.x_GLF_uniform_int_values.arr[0].el;
-              if ((x_40 < x_41)) {
-              } else {
-                break;
-              }
-              int const x_42 = x_11.x_GLF_uniform_int_values.arr[1].el;
-              i_6 = x_42;
-              while (true) {
-                int const x_43 = i_6;
-                int const x_44 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                if ((x_43 < x_44)) {
-                } else {
-                  break;
-                }
-                int const x_45 = x_11.x_GLF_uniform_int_values.arr[1].el;
-                i_7 = x_45;
-                while (true) {
-                  int const x_46 = i_7;
-                  int const x_47 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                  if ((x_46 < x_47)) {
-                  } else {
-                    break;
-                  }
-                  int const x_48 = x_11.x_GLF_uniform_int_values.arr[1].el;
-                  i_8 = x_48;
-                  while (true) {
-                    int const x_49 = i_8;
-                    int const x_50 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                    if ((x_49 < x_50)) {
-                    } else {
-                      break;
-                    }
-                    int const x_51 = x_11.x_GLF_uniform_int_values.arr[1].el;
-                    i_9 = x_51;
-                    while (true) {
-                      int const x_52 = i_9;
-                      int const x_53 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                      if ((x_52 < x_53)) {
-                      } else {
-                        break;
-                      }
-                      int const x_54 = x_11.x_GLF_uniform_int_values.arr[1].el;
-                      i_10 = x_54;
-                      while (true) {
-                        int const x_55 = i_10;
-                        int const x_56 = x_11.x_GLF_uniform_int_values.arr[0].el;
-                        if ((x_55 < x_56)) {
-                        } else {
-                          break;
-                        }
-                        float const x_196 = x_7.x_GLF_uniform_float_values.arr[1].el;
-                        a = x_196;
-                        float const x_198 = (*(tint_symbol_3)).y;
-                        float const x_200 = x_7.x_GLF_uniform_float_values.arr[1].el;
-                        if ((x_198 > x_200)) {
-                          break;
-                        }
-                        {
-                          int const x_57 = i_10;
-                          i_10 = as_type<int>((as_type<uint>(x_57) + as_type<uint>(1)));
-                        }
-                      }
-                      {
-                        int const x_59 = i_9;
-                        i_9 = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_61 = i_8;
-                      i_8 = as_type<int>((as_type<uint>(x_61) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_63 = i_7;
-                    i_7 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_65 = i_6;
-                  i_6 = as_type<int>((as_type<uint>(x_65) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_67 = i_5;
-                i_5 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_69 = i_4;
-              i_4 = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_71 = i_3;
-            i_3 = as_type<int>((as_type<uint>(x_71) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_73 = i_2;
-          i_2 = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_75 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-      }
-    }
-    float const x_204 = b;
-    b = (x_204 + 1.0f);
-    {
-      int const x_77 = i;
-      i = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-    }
-  }
-  float const x_206 = b;
-  float const x_207 = a;
-  float const x_208 = a;
-  float const x_209 = b;
-  *(tint_symbol_4) = float4(x_206, x_207, x_208, x_209);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_11, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index eccc08e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,441 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 252
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %i_3 "i_3"
-               OpName %i_4 "i_4"
-               OpName %i_5 "i_5"
-               OpName %i_6 "i_6"
-               OpName %i_7 "i_7"
-               OpName %i_8 "i_8"
-               OpName %i_9 "i_9"
-               OpName %i_10 "i_10"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %239 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %29
-          %b = OpVariable %_ptr_Function_float Function %29
-          %i = OpVariable %_ptr_Function_int Function %33
-        %i_1 = OpVariable %_ptr_Function_int Function %33
-        %i_2 = OpVariable %_ptr_Function_int Function %33
-        %i_3 = OpVariable %_ptr_Function_int Function %33
-        %i_4 = OpVariable %_ptr_Function_int Function %33
-        %i_5 = OpVariable %_ptr_Function_int Function %33
-        %i_6 = OpVariable %_ptr_Function_int Function %33
-        %i_7 = OpVariable %_ptr_Function_int Function %33
-        %i_8 = OpVariable %_ptr_Function_int Function %33
-        %i_9 = OpVariable %_ptr_Function_int Function %33
-       %i_10 = OpVariable %_ptr_Function_int Function %33
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %48 = OpLoad %float %47
-               OpStore %a %48
-         %50 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %51 = OpLoad %float %50
-               OpStore %b %51
-         %53 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %54 = OpLoad %int %53
-               OpStore %i %54
-               OpBranch %55
-         %55 = OpLabel
-               OpLoopMerge %56 %57 None
-               OpBranch %58
-         %58 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %61 = OpLoad %int %60
-         %62 = OpSLessThan %bool %59 %61
-               OpSelectionMerge %64 None
-               OpBranchConditional %62 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %56
-         %64 = OpLabel
-         %67 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %68 = OpLoad %int %67
-               OpStore %i_1 %68
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %i_1
-         %74 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %75 = OpLoad %int %74
-         %76 = OpSLessThan %bool %73 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %70
-         %77 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %81 = OpLoad %int %80
-               OpStore %i_2 %81
-               OpBranch %82
-         %82 = OpLabel
-               OpLoopMerge %83 %84 None
-               OpBranch %85
-         %85 = OpLabel
-         %86 = OpLoad %int %i_2
-         %87 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpSLessThan %bool %86 %88
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %83
-         %90 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-         %95 = OpLoad %int %94
-               OpStore %i_3 %95
-               OpBranch %96
-         %96 = OpLabel
-               OpLoopMerge %97 %98 None
-               OpBranch %99
-         %99 = OpLabel
-        %100 = OpLoad %int %i_3
-        %101 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %102 = OpLoad %int %101
-        %103 = OpSLessThan %bool %100 %102
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %106
-        %105 = OpLabel
-               OpBranch %104
-        %106 = OpLabel
-               OpBranch %97
-        %104 = OpLabel
-        %107 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_2
-        %108 = OpLoad %int %107
-               OpStore %i_4 %108
-               OpBranch %109
-        %109 = OpLabel
-               OpLoopMerge %110 %111 None
-               OpBranch %112
-        %112 = OpLabel
-        %113 = OpLoad %int %i_4
-        %114 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %115 = OpLoad %int %114
-        %116 = OpSLessThan %bool %113 %115
-               OpSelectionMerge %117 None
-               OpBranchConditional %116 %118 %119
-        %118 = OpLabel
-               OpBranch %117
-        %119 = OpLabel
-               OpBranch %110
-        %117 = OpLabel
-        %120 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %121 = OpLoad %int %120
-               OpStore %i_5 %121
-               OpBranch %122
-        %122 = OpLabel
-               OpLoopMerge %123 %124 None
-               OpBranch %125
-        %125 = OpLabel
-        %126 = OpLoad %int %i_5
-        %127 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %128 = OpLoad %int %127
-        %129 = OpSLessThan %bool %126 %128
-               OpSelectionMerge %130 None
-               OpBranchConditional %129 %131 %132
-        %131 = OpLabel
-               OpBranch %130
-        %132 = OpLabel
-               OpBranch %123
-        %130 = OpLabel
-        %133 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %134 = OpLoad %int %133
-               OpStore %i_6 %134
-               OpBranch %135
-        %135 = OpLabel
-               OpLoopMerge %136 %137 None
-               OpBranch %138
-        %138 = OpLabel
-        %139 = OpLoad %int %i_6
-        %140 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %141 = OpLoad %int %140
-        %142 = OpSLessThan %bool %139 %141
-               OpSelectionMerge %143 None
-               OpBranchConditional %142 %144 %145
-        %144 = OpLabel
-               OpBranch %143
-        %145 = OpLabel
-               OpBranch %136
-        %143 = OpLabel
-        %146 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %147 = OpLoad %int %146
-               OpStore %i_7 %147
-               OpBranch %148
-        %148 = OpLabel
-               OpLoopMerge %149 %150 None
-               OpBranch %151
-        %151 = OpLabel
-        %152 = OpLoad %int %i_7
-        %153 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %154 = OpLoad %int %153
-        %155 = OpSLessThan %bool %152 %154
-               OpSelectionMerge %156 None
-               OpBranchConditional %155 %157 %158
-        %157 = OpLabel
-               OpBranch %156
-        %158 = OpLabel
-               OpBranch %149
-        %156 = OpLabel
-        %159 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %160 = OpLoad %int %159
-               OpStore %i_8 %160
-               OpBranch %161
-        %161 = OpLabel
-               OpLoopMerge %162 %163 None
-               OpBranch %164
-        %164 = OpLabel
-        %165 = OpLoad %int %i_8
-        %166 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %167 = OpLoad %int %166
-        %168 = OpSLessThan %bool %165 %167
-               OpSelectionMerge %169 None
-               OpBranchConditional %168 %170 %171
-        %170 = OpLabel
-               OpBranch %169
-        %171 = OpLabel
-               OpBranch %162
-        %169 = OpLabel
-        %172 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %173 = OpLoad %int %172
-               OpStore %i_9 %173
-               OpBranch %174
-        %174 = OpLabel
-               OpLoopMerge %175 %176 None
-               OpBranch %177
-        %177 = OpLabel
-        %178 = OpLoad %int %i_9
-        %179 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %180 = OpLoad %int %179
-        %181 = OpSLessThan %bool %178 %180
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %184
-        %183 = OpLabel
-               OpBranch %182
-        %184 = OpLabel
-               OpBranch %175
-        %182 = OpLabel
-        %185 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-        %186 = OpLoad %int %185
-               OpStore %i_10 %186
-               OpBranch %187
-        %187 = OpLabel
-               OpLoopMerge %188 %189 None
-               OpBranch %190
-        %190 = OpLabel
-        %191 = OpLoad %int %i_10
-        %192 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-        %193 = OpLoad %int %192
-        %194 = OpSLessThan %bool %191 %193
-               OpSelectionMerge %195 None
-               OpBranchConditional %194 %196 %197
-        %196 = OpLabel
-               OpBranch %195
-        %197 = OpLabel
-               OpBranch %188
-        %195 = OpLabel
-        %198 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %199 = OpLoad %float %198
-               OpStore %a %199
-        %202 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %203 = OpLoad %float %202
-        %204 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %205 = OpLoad %float %204
-        %206 = OpFOrdGreaterThan %bool %203 %205
-               OpSelectionMerge %207 None
-               OpBranchConditional %206 %208 %207
-        %208 = OpLabel
-               OpBranch %188
-        %207 = OpLabel
-               OpBranch %189
-        %189 = OpLabel
-        %209 = OpLoad %int %i_10
-        %210 = OpIAdd %int %209 %int_1
-               OpStore %i_10 %210
-               OpBranch %187
-        %188 = OpLabel
-               OpBranch %176
-        %176 = OpLabel
-        %211 = OpLoad %int %i_9
-        %212 = OpIAdd %int %211 %int_1
-               OpStore %i_9 %212
-               OpBranch %174
-        %175 = OpLabel
-               OpBranch %163
-        %163 = OpLabel
-        %213 = OpLoad %int %i_8
-        %214 = OpIAdd %int %213 %int_1
-               OpStore %i_8 %214
-               OpBranch %161
-        %162 = OpLabel
-               OpBranch %150
-        %150 = OpLabel
-        %215 = OpLoad %int %i_7
-        %216 = OpIAdd %int %215 %int_1
-               OpStore %i_7 %216
-               OpBranch %148
-        %149 = OpLabel
-               OpBranch %137
-        %137 = OpLabel
-        %217 = OpLoad %int %i_6
-        %218 = OpIAdd %int %217 %int_1
-               OpStore %i_6 %218
-               OpBranch %135
-        %136 = OpLabel
-               OpBranch %124
-        %124 = OpLabel
-        %219 = OpLoad %int %i_5
-        %220 = OpIAdd %int %219 %int_1
-               OpStore %i_5 %220
-               OpBranch %122
-        %123 = OpLabel
-               OpBranch %111
-        %111 = OpLabel
-        %221 = OpLoad %int %i_4
-        %222 = OpIAdd %int %221 %int_1
-               OpStore %i_4 %222
-               OpBranch %109
-        %110 = OpLabel
-               OpBranch %98
-         %98 = OpLabel
-        %223 = OpLoad %int %i_3
-        %224 = OpIAdd %int %223 %int_1
-               OpStore %i_3 %224
-               OpBranch %96
-         %97 = OpLabel
-               OpBranch %84
-         %84 = OpLabel
-        %225 = OpLoad %int %i_2
-        %226 = OpIAdd %int %225 %int_1
-               OpStore %i_2 %226
-               OpBranch %82
-         %83 = OpLabel
-               OpBranch %71
-         %71 = OpLabel
-        %227 = OpLoad %int %i_1
-        %228 = OpIAdd %int %227 %int_1
-               OpStore %i_1 %228
-               OpBranch %69
-         %70 = OpLabel
-        %229 = OpLoad %float %b
-        %231 = OpFAdd %float %229 %float_1
-               OpStore %b %231
-               OpBranch %57
-         %57 = OpLabel
-        %232 = OpLoad %int %i
-        %233 = OpIAdd %int %232 %int_1
-               OpStore %i %233
-               OpBranch %55
-         %56 = OpLabel
-        %234 = OpLoad %float %b
-        %235 = OpLoad %float %a
-        %236 = OpLoad %float %a
-        %237 = OpLoad %float %b
-        %238 = OpCompositeConstruct %v4float %234 %235 %236 %237
-               OpStore %x_GLF_color %238
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %239
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %243 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %244 = OpFunctionCall %void %main_1
-        %245 = OpLoad %v4float %x_GLF_color
-        %246 = OpCompositeConstruct %main_out %245
-               OpReturnValue %246
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %248 = OpLabel
-        %250 = OpLoad %v4float %gl_FragCoord_param_1
-        %249 = OpFunctionCall %main_out %main_inner %250
-        %251 = OpCompositeExtract %v4float %249 0
-               OpStore %x_GLF_color_1_1 %251
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6a32b2d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-optimize-phis-for/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,233 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  var i_3 : i32;
-  var i_4 : i32;
-  var i_5 : i32;
-  var i_6 : i32;
-  var i_7 : i32;
-  var i_8 : i32;
-  var i_9 : i32;
-  var i_10 : i32;
-  let x_104 : f32 = x_7.x_GLF_uniform_float_values[0];
-  a = x_104;
-  let x_106 : f32 = x_7.x_GLF_uniform_float_values[1];
-  b = x_106;
-  let x_24 : i32 = x_11.x_GLF_uniform_int_values[1];
-  i = x_24;
-  loop {
-    let x_25 : i32 = i;
-    let x_26 : i32 = x_11.x_GLF_uniform_int_values[0];
-    if ((x_25 < x_26)) {
-    } else {
-      break;
-    }
-    let x_27 : i32 = x_11.x_GLF_uniform_int_values[1];
-    i_1 = x_27;
-    loop {
-      let x_28 : i32 = i_1;
-      let x_29 : i32 = x_11.x_GLF_uniform_int_values[0];
-      if ((x_28 < x_29)) {
-      } else {
-        break;
-      }
-      let x_30 : i32 = x_11.x_GLF_uniform_int_values[1];
-      i_2 = x_30;
-      loop {
-        let x_31 : i32 = i_2;
-        let x_32 : i32 = x_11.x_GLF_uniform_int_values[0];
-        if ((x_31 < x_32)) {
-        } else {
-          break;
-        }
-        let x_33 : i32 = x_11.x_GLF_uniform_int_values[2];
-        i_3 = x_33;
-        loop {
-          let x_34 : i32 = i_3;
-          let x_35 : i32 = x_11.x_GLF_uniform_int_values[0];
-          if ((x_34 < x_35)) {
-          } else {
-            break;
-          }
-          let x_36 : i32 = x_11.x_GLF_uniform_int_values[2];
-          i_4 = x_36;
-          loop {
-            let x_37 : i32 = i_4;
-            let x_38 : i32 = x_11.x_GLF_uniform_int_values[0];
-            if ((x_37 < x_38)) {
-            } else {
-              break;
-            }
-            let x_39 : i32 = x_11.x_GLF_uniform_int_values[1];
-            i_5 = x_39;
-            loop {
-              let x_40 : i32 = i_5;
-              let x_41 : i32 = x_11.x_GLF_uniform_int_values[0];
-              if ((x_40 < x_41)) {
-              } else {
-                break;
-              }
-              let x_42 : i32 = x_11.x_GLF_uniform_int_values[1];
-              i_6 = x_42;
-              loop {
-                let x_43 : i32 = i_6;
-                let x_44 : i32 = x_11.x_GLF_uniform_int_values[0];
-                if ((x_43 < x_44)) {
-                } else {
-                  break;
-                }
-                let x_45 : i32 = x_11.x_GLF_uniform_int_values[1];
-                i_7 = x_45;
-                loop {
-                  let x_46 : i32 = i_7;
-                  let x_47 : i32 = x_11.x_GLF_uniform_int_values[0];
-                  if ((x_46 < x_47)) {
-                  } else {
-                    break;
-                  }
-                  let x_48 : i32 = x_11.x_GLF_uniform_int_values[1];
-                  i_8 = x_48;
-                  loop {
-                    let x_49 : i32 = i_8;
-                    let x_50 : i32 = x_11.x_GLF_uniform_int_values[0];
-                    if ((x_49 < x_50)) {
-                    } else {
-                      break;
-                    }
-                    let x_51 : i32 = x_11.x_GLF_uniform_int_values[1];
-                    i_9 = x_51;
-                    loop {
-                      let x_52 : i32 = i_9;
-                      let x_53 : i32 = x_11.x_GLF_uniform_int_values[0];
-                      if ((x_52 < x_53)) {
-                      } else {
-                        break;
-                      }
-                      let x_54 : i32 = x_11.x_GLF_uniform_int_values[1];
-                      i_10 = x_54;
-                      loop {
-                        let x_55 : i32 = i_10;
-                        let x_56 : i32 = x_11.x_GLF_uniform_int_values[0];
-                        if ((x_55 < x_56)) {
-                        } else {
-                          break;
-                        }
-                        let x_196 : f32 = x_7.x_GLF_uniform_float_values[1];
-                        a = x_196;
-                        let x_198 : f32 = gl_FragCoord.y;
-                        let x_200 : f32 = x_7.x_GLF_uniform_float_values[1];
-                        if ((x_198 > x_200)) {
-                          break;
-                        }
-
-                        continuing {
-                          let x_57 : i32 = i_10;
-                          i_10 = (x_57 + 1);
-                        }
-                      }
-
-                      continuing {
-                        let x_59 : i32 = i_9;
-                        i_9 = (x_59 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_61 : i32 = i_8;
-                      i_8 = (x_61 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_63 : i32 = i_7;
-                    i_7 = (x_63 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_65 : i32 = i_6;
-                  i_6 = (x_65 + 1);
-                }
-              }
-
-              continuing {
-                let x_67 : i32 = i_5;
-                i_5 = (x_67 + 1);
-              }
-            }
-
-            continuing {
-              let x_69 : i32 = i_4;
-              i_4 = (x_69 + 1);
-            }
-          }
-
-          continuing {
-            let x_71 : i32 = i_3;
-            i_3 = (x_71 + 1);
-          }
-        }
-
-        continuing {
-          let x_73 : i32 = i_2;
-          i_2 = (x_73 + 1);
-        }
-      }
-
-      continuing {
-        let x_75 : i32 = i_1;
-        i_1 = (x_75 + 1);
-      }
-    }
-    let x_204 : f32 = b;
-    b = (x_204 + 1.0);
-
-    continuing {
-      let x_77 : i32 = i;
-      i = (x_77 + 1);
-    }
-  }
-  let x_206 : f32 = b;
-  let x_207 : f32 = a;
-  let x_208 : f32 = a;
-  let x_209 : f32 = b;
-  x_GLF_color = vec4<f32>(x_206, x_207, x_208, x_209);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7b19951..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,118 +0,0 @@
-uint tint_pack2x16float(float2 param_0) {
-  uint2 i = f32tof16(param_0);
-  return i.x | (i.y << 16);
-}
-
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[4];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 values = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 ref = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_117 = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  bool x_118_phi = false;
-  a = tint_pack2x16float(float2(1.0f, 1.0f));
-  values = tint_unpack4x8unorm(a);
-  const float x_41 = asfloat(x_8[3].x);
-  const float x_43 = asfloat(x_8[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  const float x_48 = asfloat(x_8[3].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_50 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_53 = asfloat(x_8[1].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_55 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  ref = float4(x_41, (x_43 / x_45), (x_48 / x_50), (x_53 / x_55));
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_59 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_61 = values[x_59];
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_63 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const float x_65 = ref[x_63];
-  const float x_69 = asfloat(x_8[2].x);
-  const bool x_70 = (abs((x_61 - x_65)) < x_69);
-  x_86_phi = x_70;
-  if (x_70) {
-    const int x_74 = asint(x_10[1].x);
-    const float x_76 = values[x_74];
-    const int x_78 = asint(x_10[1].x);
-    const float x_80 = ref[x_78];
-    const float x_84 = asfloat(x_8[2].x);
-    x_85 = (abs((x_76 - x_80)) < x_84);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    const int x_90 = asint(x_10[3].x);
-    const float x_92 = values[x_90];
-    const int x_94 = asint(x_10[3].x);
-    const float x_96 = ref[x_94];
-    const float x_100 = asfloat(x_8[2].x);
-    x_101 = (abs((x_92 - x_96)) < x_100);
-    x_102_phi = x_101;
-  }
-  const bool x_102 = x_102_phi;
-  x_118_phi = x_102;
-  if (x_102) {
-    const int x_106 = asint(x_10[2].x);
-    const float x_108 = values[x_106];
-    const int x_110 = asint(x_10[2].x);
-    const float x_112 = ref[x_110];
-    const float x_116 = asfloat(x_8[2].x);
-    x_117 = (abs((x_108 - x_112)) < x_116);
-    x_118_phi = x_117;
-  }
-  if (x_118_phi) {
-    const int x_123 = asint(x_10[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_126 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_129 = asint(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const int x_132 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_123), float(x_126), float(x_129), float(x_132));
-  } else {
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_136 = asint(x_10[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const float x_137 = float(x_136);
-    x_GLF_color = float4(x_137, x_137, x_137, x_137);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5e039e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 values = 0.0f;
-  float4 ref = 0.0f;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_117 = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  bool x_118_phi = false;
-  a = as_type<uint>(half2(float2(1.0f, 1.0f)));
-  uint const x_38 = a;
-  values = unpack_unorm4x8_to_float(x_38);
-  float const x_41 = x_8.x_GLF_uniform_float_values.arr[3].el;
-  float const x_43 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  float const x_45 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  float const x_48 = x_8.x_GLF_uniform_float_values.arr[3].el;
-  float const x_50 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  float const x_53 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  float const x_55 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  ref = float4(x_41, (x_43 / x_45), (x_48 / x_50), (x_53 / x_55));
-  int const x_59 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  float const x_61 = values[x_59];
-  int const x_63 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  float const x_65 = ref[x_63];
-  float const x_69 = x_8.x_GLF_uniform_float_values.arr[2].el;
-  bool const x_70 = (fabs((x_61 - x_65)) < x_69);
-  x_86_phi = x_70;
-  if (x_70) {
-    int const x_74 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_76 = values[x_74];
-    int const x_78 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_80 = ref[x_78];
-    float const x_84 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    x_85 = (fabs((x_76 - x_80)) < x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    int const x_90 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_92 = values[x_90];
-    int const x_94 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_96 = ref[x_94];
-    float const x_100 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    x_101 = (fabs((x_92 - x_96)) < x_100);
-    x_102_phi = x_101;
-  }
-  bool const x_102 = x_102_phi;
-  x_118_phi = x_102;
-  if (x_102) {
-    int const x_106 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_108 = values[x_106];
-    int const x_110 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_112 = ref[x_110];
-    float const x_116 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    x_117 = (fabs((x_108 - x_112)) < x_116);
-    x_118_phi = x_117;
-  }
-  bool const x_118 = x_118_phi;
-  if (x_118) {
-    int const x_123 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_126 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_129 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_132 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_123), float(x_126), float(x_129), float(x_132));
-  } else {
-    int const x_136 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_137 = float(x_136);
-    *(tint_symbol_3) = float4(x_137, x_137, x_137, x_137);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c06418f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,244 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 166
-; Schema: 0
-               OpCapability Shader
-         %39 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %values "values"
-               OpName %ref "ref"
-               OpName %x_85 "x_85"
-               OpName %x_101 "x_101"
-               OpName %x_117 "x_117"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %x_118_phi "x_118_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %25 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %42 = OpConstantComposite %v2float %float_1 %float_1
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %155 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %25
-     %values = OpVariable %_ptr_Function_v4float Function %5
-        %ref = OpVariable %_ptr_Function_v4float Function %5
-       %x_85 = OpVariable %_ptr_Function_bool Function %32
-      %x_101 = OpVariable %_ptr_Function_bool Function %32
-      %x_117 = OpVariable %_ptr_Function_bool Function %32
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %32
-  %x_102_phi = OpVariable %_ptr_Function_bool Function %32
-  %x_118_phi = OpVariable %_ptr_Function_bool Function %32
-         %38 = OpExtInst %uint %39 PackHalf2x16 %42
-               OpStore %a %38
-         %43 = OpLoad %uint %a
-         %44 = OpExtInst %v4float %39 UnpackUnorm4x8 %43
-               OpStore %values %44
-         %48 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_3
-         %49 = OpLoad %float %48
-         %51 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %52 = OpLoad %float %51
-         %54 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_3
-         %57 = OpLoad %float %56
-         %58 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpFDiv %float %52 %55
-         %65 = OpFDiv %float %57 %59
-         %66 = OpFDiv %float %61 %63
-         %67 = OpCompositeConstruct %v4float %49 %64 %65 %66
-               OpStore %ref %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %72 = OpAccessChain %_ptr_Function_float %values %70
-         %73 = OpLoad %float %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_float %ref %75
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %80 = OpLoad %float %79
-         %82 = OpFSub %float %73 %77
-         %81 = OpExtInst %float %39 FAbs %82
-         %83 = OpFOrdLessThan %bool %81 %80
-               OpStore %x_86_phi %83
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %84
-         %85 = OpLabel
-         %86 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Function_float %values %87
-         %89 = OpLoad %float %88
-         %90 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %91 = OpLoad %int %90
-         %92 = OpAccessChain %_ptr_Function_float %ref %91
-         %93 = OpLoad %float %92
-         %94 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %95 = OpLoad %float %94
-         %97 = OpFSub %float %89 %93
-         %96 = OpExtInst %float %39 FAbs %97
-         %98 = OpFOrdLessThan %bool %96 %95
-               OpStore %x_85 %98
-         %99 = OpLoad %bool %x_85
-               OpStore %x_86_phi %99
-               OpBranch %84
-         %84 = OpLabel
-        %100 = OpLoad %bool %x_86_phi
-               OpStore %x_102_phi %100
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-        %103 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %104 = OpLoad %int %103
-        %105 = OpAccessChain %_ptr_Function_float %values %104
-        %106 = OpLoad %float %105
-        %107 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Function_float %ref %108
-        %110 = OpLoad %float %109
-        %111 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %112 = OpLoad %float %111
-        %114 = OpFSub %float %106 %110
-        %113 = OpExtInst %float %39 FAbs %114
-        %115 = OpFOrdLessThan %bool %113 %112
-               OpStore %x_101 %115
-        %116 = OpLoad %bool %x_101
-               OpStore %x_102_phi %116
-               OpBranch %101
-        %101 = OpLabel
-        %117 = OpLoad %bool %x_102_phi
-               OpStore %x_118_phi %117
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Function_float %values %121
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %125 = OpLoad %int %124
-        %126 = OpAccessChain %_ptr_Function_float %ref %125
-        %127 = OpLoad %float %126
-        %128 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %129 = OpLoad %float %128
-        %131 = OpFSub %float %123 %127
-        %130 = OpExtInst %float %39 FAbs %131
-        %132 = OpFOrdLessThan %bool %130 %129
-               OpStore %x_117 %132
-        %133 = OpLoad %bool %x_117
-               OpStore %x_118_phi %133
-               OpBranch %118
-        %118 = OpLabel
-        %134 = OpLoad %bool %x_118_phi
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-        %138 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %139 = OpLoad %int %138
-        %140 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %141 = OpLoad %int %140
-        %142 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %143 = OpLoad %int %142
-        %144 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %145 = OpLoad %int %144
-        %146 = OpConvertSToF %float %139
-        %147 = OpConvertSToF %float %141
-        %148 = OpConvertSToF %float %143
-        %149 = OpConvertSToF %float %145
-        %150 = OpCompositeConstruct %v4float %146 %147 %148 %149
-               OpStore %x_GLF_color %150
-               OpBranch %135
-        %137 = OpLabel
-        %151 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %152 = OpLoad %int %151
-        %153 = OpConvertSToF %float %152
-        %154 = OpCompositeConstruct %v4float %153 %153 %153 %153
-               OpStore %x_GLF_color %154
-               OpBranch %135
-        %135 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %155
-        %158 = OpLabel
-        %159 = OpFunctionCall %void %main_1
-        %160 = OpLoad %v4float %x_GLF_color
-        %161 = OpCompositeConstruct %main_out %160
-               OpReturnValue %161
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %163 = OpLabel
-        %164 = OpFunctionCall %main_out %main_inner
-        %165 = OpCompositeExtract %v4float %164 0
-               OpStore %x_GLF_color_1_1 %165
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5220a98..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,104 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var values : vec4<f32>;
-  var ref : vec4<f32>;
-  var x_85 : bool;
-  var x_101 : bool;
-  var x_117 : bool;
-  var x_86_phi : bool;
-  var x_102_phi : bool;
-  var x_118_phi : bool;
-  a = pack2x16float(vec2<f32>(1.0, 1.0));
-  let x_38 : u32 = a;
-  values = unpack4x8unorm(x_38);
-  let x_41 : f32 = x_8.x_GLF_uniform_float_values[3];
-  let x_43 : f32 = x_8.x_GLF_uniform_float_values[1];
-  let x_45 : f32 = x_8.x_GLF_uniform_float_values[0];
-  let x_48 : f32 = x_8.x_GLF_uniform_float_values[3];
-  let x_50 : f32 = x_8.x_GLF_uniform_float_values[0];
-  let x_53 : f32 = x_8.x_GLF_uniform_float_values[1];
-  let x_55 : f32 = x_8.x_GLF_uniform_float_values[0];
-  ref = vec4<f32>(x_41, (x_43 / x_45), (x_48 / x_50), (x_53 / x_55));
-  let x_59 : i32 = x_10.x_GLF_uniform_int_values[0];
-  let x_61 : f32 = values[x_59];
-  let x_63 : i32 = x_10.x_GLF_uniform_int_values[0];
-  let x_65 : f32 = ref[x_63];
-  let x_69 : f32 = x_8.x_GLF_uniform_float_values[2];
-  let x_70 : bool = (abs((x_61 - x_65)) < x_69);
-  x_86_phi = x_70;
-  if (x_70) {
-    let x_74 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_76 : f32 = values[x_74];
-    let x_78 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_80 : f32 = ref[x_78];
-    let x_84 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_85 = (abs((x_76 - x_80)) < x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    let x_90 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_92 : f32 = values[x_90];
-    let x_94 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_96 : f32 = ref[x_94];
-    let x_100 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_101 = (abs((x_92 - x_96)) < x_100);
-    x_102_phi = x_101;
-  }
-  let x_102 : bool = x_102_phi;
-  x_118_phi = x_102;
-  if (x_102) {
-    let x_106 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_108 : f32 = values[x_106];
-    let x_110 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_112 : f32 = ref[x_110];
-    let x_116 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_117 = (abs((x_108 - x_112)) < x_116);
-    x_118_phi = x_117;
-  }
-  let x_118 : bool = x_118_phi;
-  if (x_118) {
-    let x_123 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_126 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_129 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_132 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_123), f32(x_126), f32(x_129), f32(x_132));
-  } else {
-    let x_136 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_137 : f32 = f32(x_136);
-    x_GLF_color = vec4<f32>(x_137, x_137, x_137, x_137);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7b19951..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,118 +0,0 @@
-uint tint_pack2x16float(float2 param_0) {
-  uint2 i = f32tof16(param_0);
-  return i.x | (i.y << 16);
-}
-
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[4];
-};
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  float4 values = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 ref = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_117 = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  bool x_118_phi = false;
-  a = tint_pack2x16float(float2(1.0f, 1.0f));
-  values = tint_unpack4x8unorm(a);
-  const float x_41 = asfloat(x_8[3].x);
-  const float x_43 = asfloat(x_8[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  const float x_48 = asfloat(x_8[3].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_50 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_53 = asfloat(x_8[1].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_55 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  ref = float4(x_41, (x_43 / x_45), (x_48 / x_50), (x_53 / x_55));
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_59 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_61 = values[x_59];
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_63 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const float x_65 = ref[x_63];
-  const float x_69 = asfloat(x_8[2].x);
-  const bool x_70 = (abs((x_61 - x_65)) < x_69);
-  x_86_phi = x_70;
-  if (x_70) {
-    const int x_74 = asint(x_10[1].x);
-    const float x_76 = values[x_74];
-    const int x_78 = asint(x_10[1].x);
-    const float x_80 = ref[x_78];
-    const float x_84 = asfloat(x_8[2].x);
-    x_85 = (abs((x_76 - x_80)) < x_84);
-    x_86_phi = x_85;
-  }
-  const bool x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    const int x_90 = asint(x_10[3].x);
-    const float x_92 = values[x_90];
-    const int x_94 = asint(x_10[3].x);
-    const float x_96 = ref[x_94];
-    const float x_100 = asfloat(x_8[2].x);
-    x_101 = (abs((x_92 - x_96)) < x_100);
-    x_102_phi = x_101;
-  }
-  const bool x_102 = x_102_phi;
-  x_118_phi = x_102;
-  if (x_102) {
-    const int x_106 = asint(x_10[2].x);
-    const float x_108 = values[x_106];
-    const int x_110 = asint(x_10[2].x);
-    const float x_112 = ref[x_110];
-    const float x_116 = asfloat(x_8[2].x);
-    x_117 = (abs((x_108 - x_112)) < x_116);
-    x_118_phi = x_117;
-  }
-  if (x_118_phi) {
-    const int x_123 = asint(x_10[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_126 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_129 = asint(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const int x_132 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_123), float(x_126), float(x_129), float(x_132));
-  } else {
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_136 = asint(x_10[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const float x_137 = float(x_136);
-    x_GLF_color = float4(x_137, x_137, x_137, x_137);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5e039e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float4 values = 0.0f;
-  float4 ref = 0.0f;
-  bool x_85 = false;
-  bool x_101 = false;
-  bool x_117 = false;
-  bool x_86_phi = false;
-  bool x_102_phi = false;
-  bool x_118_phi = false;
-  a = as_type<uint>(half2(float2(1.0f, 1.0f)));
-  uint const x_38 = a;
-  values = unpack_unorm4x8_to_float(x_38);
-  float const x_41 = x_8.x_GLF_uniform_float_values.arr[3].el;
-  float const x_43 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  float const x_45 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  float const x_48 = x_8.x_GLF_uniform_float_values.arr[3].el;
-  float const x_50 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  float const x_53 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  float const x_55 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  ref = float4(x_41, (x_43 / x_45), (x_48 / x_50), (x_53 / x_55));
-  int const x_59 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  float const x_61 = values[x_59];
-  int const x_63 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  float const x_65 = ref[x_63];
-  float const x_69 = x_8.x_GLF_uniform_float_values.arr[2].el;
-  bool const x_70 = (fabs((x_61 - x_65)) < x_69);
-  x_86_phi = x_70;
-  if (x_70) {
-    int const x_74 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_76 = values[x_74];
-    int const x_78 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_80 = ref[x_78];
-    float const x_84 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    x_85 = (fabs((x_76 - x_80)) < x_84);
-    x_86_phi = x_85;
-  }
-  bool const x_86 = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    int const x_90 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_92 = values[x_90];
-    int const x_94 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    float const x_96 = ref[x_94];
-    float const x_100 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    x_101 = (fabs((x_92 - x_96)) < x_100);
-    x_102_phi = x_101;
-  }
-  bool const x_102 = x_102_phi;
-  x_118_phi = x_102;
-  if (x_102) {
-    int const x_106 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_108 = values[x_106];
-    int const x_110 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_112 = ref[x_110];
-    float const x_116 = x_8.x_GLF_uniform_float_values.arr[2].el;
-    x_117 = (fabs((x_108 - x_112)) < x_116);
-    x_118_phi = x_117;
-  }
-  bool const x_118 = x_118_phi;
-  if (x_118) {
-    int const x_123 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_126 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_129 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_132 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_123), float(x_126), float(x_129), float(x_132));
-  } else {
-    int const x_136 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_137 = float(x_136);
-    *(tint_symbol_3) = float4(x_137, x_137, x_137, x_137);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, constant buf1& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c06418f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,244 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 166
-; Schema: 0
-               OpCapability Shader
-         %39 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %values "values"
-               OpName %ref "ref"
-               OpName %x_85 "x_85"
-               OpName %x_101 "x_101"
-               OpName %x_117 "x_117"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %x_118_phi "x_118_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf0 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %25 = OpConstantNull %uint
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %42 = OpConstantComposite %v2float %float_1 %float_1
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %155 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %25
-     %values = OpVariable %_ptr_Function_v4float Function %5
-        %ref = OpVariable %_ptr_Function_v4float Function %5
-       %x_85 = OpVariable %_ptr_Function_bool Function %32
-      %x_101 = OpVariable %_ptr_Function_bool Function %32
-      %x_117 = OpVariable %_ptr_Function_bool Function %32
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %32
-  %x_102_phi = OpVariable %_ptr_Function_bool Function %32
-  %x_118_phi = OpVariable %_ptr_Function_bool Function %32
-         %38 = OpExtInst %uint %39 PackHalf2x16 %42
-               OpStore %a %38
-         %43 = OpLoad %uint %a
-         %44 = OpExtInst %v4float %39 UnpackUnorm4x8 %43
-               OpStore %values %44
-         %48 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_3
-         %49 = OpLoad %float %48
-         %51 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %52 = OpLoad %float %51
-         %54 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_3
-         %57 = OpLoad %float %56
-         %58 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpFDiv %float %52 %55
-         %65 = OpFDiv %float %57 %59
-         %66 = OpFDiv %float %61 %63
-         %67 = OpCompositeConstruct %v4float %49 %64 %65 %66
-               OpStore %ref %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %72 = OpAccessChain %_ptr_Function_float %values %70
-         %73 = OpLoad %float %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Function_float %ref %75
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %80 = OpLoad %float %79
-         %82 = OpFSub %float %73 %77
-         %81 = OpExtInst %float %39 FAbs %82
-         %83 = OpFOrdLessThan %bool %81 %80
-               OpStore %x_86_phi %83
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %84
-         %85 = OpLabel
-         %86 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Function_float %values %87
-         %89 = OpLoad %float %88
-         %90 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %91 = OpLoad %int %90
-         %92 = OpAccessChain %_ptr_Function_float %ref %91
-         %93 = OpLoad %float %92
-         %94 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-         %95 = OpLoad %float %94
-         %97 = OpFSub %float %89 %93
-         %96 = OpExtInst %float %39 FAbs %97
-         %98 = OpFOrdLessThan %bool %96 %95
-               OpStore %x_85 %98
-         %99 = OpLoad %bool %x_85
-               OpStore %x_86_phi %99
-               OpBranch %84
-         %84 = OpLabel
-        %100 = OpLoad %bool %x_86_phi
-               OpStore %x_102_phi %100
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-        %103 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %104 = OpLoad %int %103
-        %105 = OpAccessChain %_ptr_Function_float %values %104
-        %106 = OpLoad %float %105
-        %107 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Function_float %ref %108
-        %110 = OpLoad %float %109
-        %111 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %112 = OpLoad %float %111
-        %114 = OpFSub %float %106 %110
-        %113 = OpExtInst %float %39 FAbs %114
-        %115 = OpFOrdLessThan %bool %113 %112
-               OpStore %x_101 %115
-        %116 = OpLoad %bool %x_101
-               OpStore %x_102_phi %116
-               OpBranch %101
-        %101 = OpLabel
-        %117 = OpLoad %bool %x_102_phi
-               OpStore %x_118_phi %117
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Function_float %values %121
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %125 = OpLoad %int %124
-        %126 = OpAccessChain %_ptr_Function_float %ref %125
-        %127 = OpLoad %float %126
-        %128 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %129 = OpLoad %float %128
-        %131 = OpFSub %float %123 %127
-        %130 = OpExtInst %float %39 FAbs %131
-        %132 = OpFOrdLessThan %bool %130 %129
-               OpStore %x_117 %132
-        %133 = OpLoad %bool %x_117
-               OpStore %x_118_phi %133
-               OpBranch %118
-        %118 = OpLabel
-        %134 = OpLoad %bool %x_118_phi
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-        %138 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %139 = OpLoad %int %138
-        %140 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %141 = OpLoad %int %140
-        %142 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %143 = OpLoad %int %142
-        %144 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %145 = OpLoad %int %144
-        %146 = OpConvertSToF %float %139
-        %147 = OpConvertSToF %float %141
-        %148 = OpConvertSToF %float %143
-        %149 = OpConvertSToF %float %145
-        %150 = OpCompositeConstruct %v4float %146 %147 %148 %149
-               OpStore %x_GLF_color %150
-               OpBranch %135
-        %137 = OpLabel
-        %151 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %152 = OpLoad %int %151
-        %153 = OpConvertSToF %float %152
-        %154 = OpCompositeConstruct %v4float %153 %153 %153 %153
-               OpStore %x_GLF_color %154
-               OpBranch %135
-        %135 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %155
-        %158 = OpLabel
-        %159 = OpFunctionCall %void %main_1
-        %160 = OpLoad %v4float %x_GLF_color
-        %161 = OpCompositeConstruct %main_out %160
-               OpReturnValue %161
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-        %163 = OpLabel
-        %164 = OpFunctionCall %main_out %main_inner
-        %165 = OpCompositeExtract %v4float %164 0
-               OpStore %x_GLF_color_1_1 %165
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5220a98..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-packhalf-unpackunorm/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,104 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  var values : vec4<f32>;
-  var ref : vec4<f32>;
-  var x_85 : bool;
-  var x_101 : bool;
-  var x_117 : bool;
-  var x_86_phi : bool;
-  var x_102_phi : bool;
-  var x_118_phi : bool;
-  a = pack2x16float(vec2<f32>(1.0, 1.0));
-  let x_38 : u32 = a;
-  values = unpack4x8unorm(x_38);
-  let x_41 : f32 = x_8.x_GLF_uniform_float_values[3];
-  let x_43 : f32 = x_8.x_GLF_uniform_float_values[1];
-  let x_45 : f32 = x_8.x_GLF_uniform_float_values[0];
-  let x_48 : f32 = x_8.x_GLF_uniform_float_values[3];
-  let x_50 : f32 = x_8.x_GLF_uniform_float_values[0];
-  let x_53 : f32 = x_8.x_GLF_uniform_float_values[1];
-  let x_55 : f32 = x_8.x_GLF_uniform_float_values[0];
-  ref = vec4<f32>(x_41, (x_43 / x_45), (x_48 / x_50), (x_53 / x_55));
-  let x_59 : i32 = x_10.x_GLF_uniform_int_values[0];
-  let x_61 : f32 = values[x_59];
-  let x_63 : i32 = x_10.x_GLF_uniform_int_values[0];
-  let x_65 : f32 = ref[x_63];
-  let x_69 : f32 = x_8.x_GLF_uniform_float_values[2];
-  let x_70 : bool = (abs((x_61 - x_65)) < x_69);
-  x_86_phi = x_70;
-  if (x_70) {
-    let x_74 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_76 : f32 = values[x_74];
-    let x_78 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_80 : f32 = ref[x_78];
-    let x_84 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_85 = (abs((x_76 - x_80)) < x_84);
-    x_86_phi = x_85;
-  }
-  let x_86 : bool = x_86_phi;
-  x_102_phi = x_86;
-  if (x_86) {
-    let x_90 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_92 : f32 = values[x_90];
-    let x_94 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_96 : f32 = ref[x_94];
-    let x_100 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_101 = (abs((x_92 - x_96)) < x_100);
-    x_102_phi = x_101;
-  }
-  let x_102 : bool = x_102_phi;
-  x_118_phi = x_102;
-  if (x_102) {
-    let x_106 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_108 : f32 = values[x_106];
-    let x_110 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_112 : f32 = ref[x_110];
-    let x_116 : f32 = x_8.x_GLF_uniform_float_values[2];
-    x_117 = (abs((x_108 - x_112)) < x_116);
-    x_118_phi = x_117;
-  }
-  let x_118 : bool = x_118_phi;
-  if (x_118) {
-    let x_123 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_126 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_129 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_132 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_123), f32(x_126), f32(x_129), f32(x_132));
-  } else {
-    let x_136 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_137 : f32 = f32(x_136);
-    x_GLF_color = vec4<f32>(x_137, x_137, x_137, x_137);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6938693..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_i1_(inout int x) {
-  const int x_35 = asint(x_7[0].x);
-  if ((x_35 == 1)) {
-    const int x_39 = x;
-    return x_39;
-  }
-  const int x_41 = asint(x_7[0].x);
-  return x_41;
-}
-
-void main_1() {
-  int param = 0;
-  param = -1;
-  const int x_28 = func_i1_(param);
-  if ((x_28 <= 0)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6df2bc2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_i1_(constant buf0& x_7, thread int* const x) {
-  int const x_35 = x_7.one;
-  if ((x_35 == 1)) {
-    int const x_39 = *(x);
-    return x_39;
-  }
-  int const x_41 = x_7.one;
-  return x_41;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int param = 0;
-  param = -1;
-  int const x_28 = func_i1_(x_7, &(param));
-  if ((x_28 <= 0)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 542b71a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %int %_ptr_Function_int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %void = OpTypeVoid
-         %31 = OpTypeFunction %void
-         %36 = OpConstantNull %int
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %48 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %int None %12
-          %x = OpFunctionParameter %_ptr_Function_int
-         %16 = OpLabel
-         %20 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %21 = OpLoad %int %20
-         %23 = OpIEqual %bool %21 %int_1
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %25
-         %26 = OpLabel
-         %28 = OpLoad %int %x
-               OpReturnValue %28
-         %25 = OpLabel
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %30 = OpLoad %int %29
-               OpReturnValue %30
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %31
-         %34 = OpLabel
-      %param = OpVariable %_ptr_Function_int Function %36
-               OpStore %param %int_n1
-         %38 = OpFunctionCall %int %func_i1_ %param
-         %41 = OpSLessThanEqual %bool %38 %int_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %44
-         %43 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %31
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 06c350a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) -> i32 {
-  let x_35 : i32 = x_7.one;
-  if ((x_35 == 1)) {
-    let x_39 : i32 = *(x);
-    return x_39;
-  }
-  let x_41 : i32 = x_7.one;
-  return x_41;
-}
-
-fn main_1() {
-  var param : i32;
-  param = -1;
-  let x_28 : i32 = func_i1_(&(param));
-  if ((x_28 <= 0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6938693..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_i1_(inout int x) {
-  const int x_35 = asint(x_7[0].x);
-  if ((x_35 == 1)) {
-    const int x_39 = x;
-    return x_39;
-  }
-  const int x_41 = asint(x_7[0].x);
-  return x_41;
-}
-
-void main_1() {
-  int param = 0;
-  param = -1;
-  const int x_28 = func_i1_(param);
-  if ((x_28 <= 0)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6df2bc2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_i1_(constant buf0& x_7, thread int* const x) {
-  int const x_35 = x_7.one;
-  if ((x_35 == 1)) {
-    int const x_39 = *(x);
-    return x_39;
-  }
-  int const x_41 = x_7.one;
-  return x_41;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int param = 0;
-  param = -1;
-  int const x_28 = func_i1_(x_7, &(param));
-  if ((x_28 <= 0)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 542b71a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,105 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %int %_ptr_Function_int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %void = OpTypeVoid
-         %31 = OpTypeFunction %void
-         %36 = OpConstantNull %int
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %48 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %int None %12
-          %x = OpFunctionParameter %_ptr_Function_int
-         %16 = OpLabel
-         %20 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %21 = OpLoad %int %20
-         %23 = OpIEqual %bool %21 %int_1
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %25
-         %26 = OpLabel
-         %28 = OpLoad %int %x
-               OpReturnValue %28
-         %25 = OpLabel
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %30 = OpLoad %int %29
-               OpReturnValue %30
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %31
-         %34 = OpLabel
-      %param = OpVariable %_ptr_Function_int Function %36
-               OpStore %param %int_n1
-         %38 = OpFunctionCall %int %func_i1_ %param
-         %41 = OpSLessThanEqual %bool %38 %int_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %44
-         %43 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %31
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 06c350a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-signum/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) -> i32 {
-  let x_35 : i32 = x_7.one;
-  if ((x_35 == 1)) {
-    let x_39 : i32 = *(x);
-    return x_39;
-  }
-  let x_41 : i32 = x_7.one;
-  return x_41;
-}
-
-fn main_1() {
-  var param : i32;
-  param = -1;
-  let x_28 : i32 = func_i1_(&(param));
-  if ((x_28 <= 0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.hlsl
deleted file mode 100644
index 36a8a86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_25 = asint(x_5[0].x);
-  if (((10 / (2 & x_25)) == 5)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.msl
deleted file mode 100644
index c3651d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_25 = x_5.three;
-  if (((10 / (2 & x_25)) == 5)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.spvasm
deleted file mode 100644
index 7691107..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %int_10 = OpConstant %int 10
-      %int_2 = OpConstant %int 2
-      %int_5 = OpConstant %int 5
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %34 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %35 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %23 = OpBitwiseAnd %int %int_2 %20
-         %24 = OpSDiv %int %int_10 %23
-         %26 = OpIEqual %bool %24 %int_5
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %28
-         %30 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %28
-         %28 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %35
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-         %40 = OpLoad %v4float %x_GLF_color
-         %41 = OpCompositeConstruct %main_out %40
-               OpReturnValue %41
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %43 = OpLabel
-         %44 = OpFunctionCall %main_out %main_inner
-         %45 = OpCompositeExtract %v4float %44 0
-               OpStore %x_GLF_color_1_1 %45
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.wgsl
deleted file mode 100644
index 5354413..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  three : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_25 : i32 = x_5.three;
-  if (((10 / (2 & x_25)) == 5)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.hlsl
deleted file mode 100644
index 36a8a86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const int x_25 = asint(x_5[0].x);
-  if (((10 / (2 & x_25)) == 5)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.msl
deleted file mode 100644
index c3651d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_25 = x_5.three;
-  if (((10 / (2 & x_25)) == 5)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.spvasm
deleted file mode 100644
index 7691107..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,84 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-     %int_10 = OpConstant %int 10
-      %int_2 = OpConstant %int 2
-      %int_5 = OpConstant %int 5
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %34 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %35 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %19 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %20 = OpLoad %int %19
-         %23 = OpBitwiseAnd %int %int_2 %20
-         %24 = OpSDiv %int %int_10 %23
-         %26 = OpIEqual %bool %24 %int_5
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %28
-         %30 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %28
-         %28 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %35
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %main_1
-         %40 = OpLoad %v4float %x_GLF_color
-         %41 = OpCompositeConstruct %main_out %40
-               OpReturnValue %41
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %43 = OpLabel
-         %44 = OpFunctionCall %main_out %main_inner
-         %45 = OpCompositeExtract %v4float %44 0
-               OpStore %x_GLF_color_1_1 %45
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.wgsl
deleted file mode 100644
index 5354413..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pattern-match-single-bit/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-[[block]]
-struct buf0 {
-  three : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_25 : i32 = x_5.three;
-  if (((10 / (2 & x_25)) == 5)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 5a59ebd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  int i = 0;
-  const int x_37 = asint(x_6[1].x);
-  const float x_38 = float(x_37);
-  x_GLF_color = float4(x_38, x_38, x_38, x_38);
-  const int x_41 = asint(x_6[1].x);
-  i = x_41;
-  while (true) {
-    const int x_46 = i;
-    const int x_48 = asint(x_6[2].x);
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    const float x_52 = gl_FragCoord.y;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_54 = asfloat(x_9[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_52 < x_54)) {
-      const float x_59 = gl_FragCoord.x;
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const float x_61 = asfloat(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      if ((x_59 < x_61)) {
-        return;
-      }
-      const float x_66 = asfloat(x_9[1].x);
-      const float x_68 = asfloat(x_9[1].x);
-      if ((x_66 > x_68)) {
-        return;
-      }
-      discard;
-    }
-    const float x_73 = asfloat(x_9[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_75 = asfloat(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_73 > x_75)) {
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const int x_80 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const int x_83 = asint(x_6[1].x);
-      const int x_86 = asint(x_6[1].x);
-      const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-      const int x_89 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-      x_GLF_color = float4(float(x_80), float(x_83), float(x_86), float(x_89));
-      break;
-    }
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_93 = asfloat(x_9[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    if ((x_93 < 0.0f)) {
-      discard;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.msl
deleted file mode 100644
index fbc7140..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_38 = float(x_37);
-  *(tint_symbol_3) = float4(x_38, x_38, x_38, x_38);
-  int const x_41 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_41;
-  while (true) {
-    int const x_46 = i;
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    float const x_52 = (*(tint_symbol_4)).y;
-    float const x_54 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_52 < x_54)) {
-      float const x_59 = (*(tint_symbol_4)).x;
-      float const x_61 = x_9.x_GLF_uniform_float_values.arr[0].el;
-      if ((x_59 < x_61)) {
-        return;
-      }
-      float const x_66 = x_9.x_GLF_uniform_float_values.arr[1].el;
-      float const x_68 = x_9.x_GLF_uniform_float_values.arr[1].el;
-      if ((x_66 > x_68)) {
-        return;
-      }
-      discard_fragment();
-    }
-    float const x_73 = x_9.x_GLF_uniform_float_values.arr[1].el;
-    float const x_75 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_73 > x_75)) {
-      int const x_80 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_83 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      int const x_86 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      int const x_89 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      *(tint_symbol_3) = float4(float(x_80), float(x_83), float(x_86), float(x_89));
-      break;
-    }
-    float const x_93 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_93 < 0.0f)) {
-      discard_fragment();
-    }
-    {
-      int const x_97 = i;
-      i = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_9, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 50bbfc1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,194 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 118
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-        %105 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %29
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %35 = OpConvertSToF %float %34
-         %36 = OpCompositeConstruct %v4float %35 %35 %35 %35
-               OpStore %x_GLF_color %36
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %38 = OpLoad %int %37
-               OpStore %i %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %47 = OpSLessThan %bool %43 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %40
-         %49 = OpLabel
-         %54 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %55 = OpLoad %float %54
-         %58 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpFOrdLessThan %bool %55 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %61
-         %62 = OpLabel
-         %63 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %64 = OpLoad %float %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpFOrdLessThan %bool %64 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpReturn
-         %68 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %73 = OpLoad %float %72
-         %74 = OpFOrdGreaterThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-               OpReturn
-         %75 = OpLabel
-               OpKill
-         %61 = OpLabel
-         %77 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %78 = OpLoad %float %77
-         %79 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %80 = OpLoad %float %79
-         %81 = OpFOrdGreaterThan %bool %78 %80
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %82
-         %83 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %91 = OpLoad %int %90
-         %92 = OpConvertSToF %float %85
-         %93 = OpConvertSToF %float %87
-         %94 = OpConvertSToF %float %89
-         %95 = OpConvertSToF %float %91
-         %96 = OpCompositeConstruct %v4float %92 %93 %94 %95
-               OpStore %x_GLF_color %96
-               OpBranch %40
-         %82 = OpLabel
-         %97 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %98 = OpLoad %float %97
-        %100 = OpFOrdLessThan %bool %98 %float_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpKill
-        %101 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-        %103 = OpLoad %int %i
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %i %104
-               OpBranch %39
-         %40 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %105
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %109 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %110 = OpFunctionCall %void %main_1
-        %111 = OpLoad %v4float %x_GLF_color
-        %112 = OpCompositeConstruct %main_out %111
-               OpReturnValue %112
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %114 = OpLabel
-        %116 = OpLoad %v4float %gl_FragCoord_param_1
-        %115 = OpFunctionCall %main_out %main_inner %116
-        %117 = OpCompositeExtract %v4float %115 0
-               OpStore %x_GLF_color_1_1 %117
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 70772f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,85 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-fn main_1() {
-  var i : i32;
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_38 : f32 = f32(x_37);
-  x_GLF_color = vec4<f32>(x_38, x_38, x_38, x_38);
-  let x_41 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_41;
-  loop {
-    let x_46 : i32 = i;
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    let x_52 : f32 = gl_FragCoord.y;
-    let x_54 : f32 = x_9.x_GLF_uniform_float_values[0];
-    if ((x_52 < x_54)) {
-      let x_59 : f32 = gl_FragCoord.x;
-      let x_61 : f32 = x_9.x_GLF_uniform_float_values[0];
-      if ((x_59 < x_61)) {
-        return;
-      }
-      let x_66 : f32 = x_9.x_GLF_uniform_float_values[1];
-      let x_68 : f32 = x_9.x_GLF_uniform_float_values[1];
-      if ((x_66 > x_68)) {
-        return;
-      }
-      discard;
-    }
-    let x_73 : f32 = x_9.x_GLF_uniform_float_values[1];
-    let x_75 : f32 = x_9.x_GLF_uniform_float_values[0];
-    if ((x_73 > x_75)) {
-      let x_80 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_83 : i32 = x_6.x_GLF_uniform_int_values[1];
-      let x_86 : i32 = x_6.x_GLF_uniform_int_values[1];
-      let x_89 : i32 = x_6.x_GLF_uniform_int_values[0];
-      x_GLF_color = vec4<f32>(f32(x_80), f32(x_83), f32(x_86), f32(x_89));
-      break;
-    }
-    let x_93 : f32 = x_9.x_GLF_uniform_float_values[0];
-    if ((x_93 < 0.0)) {
-      discard;
-    }
-
-    continuing {
-      let x_97 : i32 = i;
-      i = (x_97 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5a59ebd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  int i = 0;
-  const int x_37 = asint(x_6[1].x);
-  const float x_38 = float(x_37);
-  x_GLF_color = float4(x_38, x_38, x_38, x_38);
-  const int x_41 = asint(x_6[1].x);
-  i = x_41;
-  while (true) {
-    const int x_46 = i;
-    const int x_48 = asint(x_6[2].x);
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    const float x_52 = gl_FragCoord.y;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_54 = asfloat(x_9[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_52 < x_54)) {
-      const float x_59 = gl_FragCoord.x;
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const float x_61 = asfloat(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      if ((x_59 < x_61)) {
-        return;
-      }
-      const float x_66 = asfloat(x_9[1].x);
-      const float x_68 = asfloat(x_9[1].x);
-      if ((x_66 > x_68)) {
-        return;
-      }
-      discard;
-    }
-    const float x_73 = asfloat(x_9[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_75 = asfloat(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_73 > x_75)) {
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const int x_80 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const int x_83 = asint(x_6[1].x);
-      const int x_86 = asint(x_6[1].x);
-      const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-      const int x_89 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-      x_GLF_color = float4(float(x_80), float(x_83), float(x_86), float(x_89));
-      break;
-    }
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_93 = asfloat(x_9[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    if ((x_93 < 0.0f)) {
-      discard;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.msl
deleted file mode 100644
index fbc7140..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int const x_37 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_38 = float(x_37);
-  *(tint_symbol_3) = float4(x_38, x_38, x_38, x_38);
-  int const x_41 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_41;
-  while (true) {
-    int const x_46 = i;
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    float const x_52 = (*(tint_symbol_4)).y;
-    float const x_54 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_52 < x_54)) {
-      float const x_59 = (*(tint_symbol_4)).x;
-      float const x_61 = x_9.x_GLF_uniform_float_values.arr[0].el;
-      if ((x_59 < x_61)) {
-        return;
-      }
-      float const x_66 = x_9.x_GLF_uniform_float_values.arr[1].el;
-      float const x_68 = x_9.x_GLF_uniform_float_values.arr[1].el;
-      if ((x_66 > x_68)) {
-        return;
-      }
-      discard_fragment();
-    }
-    float const x_73 = x_9.x_GLF_uniform_float_values.arr[1].el;
-    float const x_75 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_73 > x_75)) {
-      int const x_80 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      int const x_83 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      int const x_86 = x_6.x_GLF_uniform_int_values.arr[1].el;
-      int const x_89 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      *(tint_symbol_3) = float4(float(x_80), float(x_83), float(x_86), float(x_89));
-      break;
-    }
-    float const x_93 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    if ((x_93 < 0.0f)) {
-      discard_fragment();
-    }
-    {
-      int const x_97 = i;
-      i = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, x_9, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 50bbfc1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,194 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 118
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-        %105 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %29
-         %33 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %35 = OpConvertSToF %float %34
-         %36 = OpCompositeConstruct %v4float %35 %35 %35 %35
-               OpStore %x_GLF_color %36
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %38 = OpLoad %int %37
-               OpStore %i %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %47 = OpSLessThan %bool %43 %46
-               OpSelectionMerge %49 None
-               OpBranchConditional %47 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %40
-         %49 = OpLabel
-         %54 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %55 = OpLoad %float %54
-         %58 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpFOrdLessThan %bool %55 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %61
-         %62 = OpLabel
-         %63 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %64 = OpLoad %float %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpFOrdLessThan %bool %64 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpReturn
-         %68 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %73 = OpLoad %float %72
-         %74 = OpFOrdGreaterThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-               OpReturn
-         %75 = OpLabel
-               OpKill
-         %61 = OpLabel
-         %77 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %78 = OpLoad %float %77
-         %79 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %80 = OpLoad %float %79
-         %81 = OpFOrdGreaterThan %bool %78 %80
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %82
-         %83 = OpLabel
-         %84 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %85 = OpLoad %int %84
-         %86 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %91 = OpLoad %int %90
-         %92 = OpConvertSToF %float %85
-         %93 = OpConvertSToF %float %87
-         %94 = OpConvertSToF %float %89
-         %95 = OpConvertSToF %float %91
-         %96 = OpCompositeConstruct %v4float %92 %93 %94 %95
-               OpStore %x_GLF_color %96
-               OpBranch %40
-         %82 = OpLabel
-         %97 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %98 = OpLoad %float %97
-        %100 = OpFOrdLessThan %bool %98 %float_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpKill
-        %101 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-        %103 = OpLoad %int %i
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %i %104
-               OpBranch %39
-         %40 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %105
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %109 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %110 = OpFunctionCall %void %main_1
-        %111 = OpLoad %v4float %x_GLF_color
-        %112 = OpCompositeConstruct %main_out %111
-               OpReturnValue %112
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %114 = OpLabel
-        %116 = OpLoad %v4float %gl_FragCoord_param_1
-        %115 = OpFunctionCall %main_out %main_inner %116
-        %117 = OpCompositeExtract %v4float %115 0
-               OpStore %x_GLF_color_1_1 %117
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 70772f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-peephole-optimizer-target-instr-info-for-if-if-if/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,85 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-fn main_1() {
-  var i : i32;
-  let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_38 : f32 = f32(x_37);
-  x_GLF_color = vec4<f32>(x_38, x_38, x_38, x_38);
-  let x_41 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_41;
-  loop {
-    let x_46 : i32 = i;
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if ((x_46 < x_48)) {
-    } else {
-      break;
-    }
-    let x_52 : f32 = gl_FragCoord.y;
-    let x_54 : f32 = x_9.x_GLF_uniform_float_values[0];
-    if ((x_52 < x_54)) {
-      let x_59 : f32 = gl_FragCoord.x;
-      let x_61 : f32 = x_9.x_GLF_uniform_float_values[0];
-      if ((x_59 < x_61)) {
-        return;
-      }
-      let x_66 : f32 = x_9.x_GLF_uniform_float_values[1];
-      let x_68 : f32 = x_9.x_GLF_uniform_float_values[1];
-      if ((x_66 > x_68)) {
-        return;
-      }
-      discard;
-    }
-    let x_73 : f32 = x_9.x_GLF_uniform_float_values[1];
-    let x_75 : f32 = x_9.x_GLF_uniform_float_values[0];
-    if ((x_73 > x_75)) {
-      let x_80 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_83 : i32 = x_6.x_GLF_uniform_int_values[1];
-      let x_86 : i32 = x_6.x_GLF_uniform_int_values[1];
-      let x_89 : i32 = x_6.x_GLF_uniform_int_values[0];
-      x_GLF_color = vec4<f32>(f32(x_80), f32(x_83), f32(x_86), f32(x_89));
-      break;
-    }
-    let x_93 : f32 = x_9.x_GLF_uniform_float_values[0];
-    if ((x_93 < 0.0)) {
-      discard;
-    }
-
-    continuing {
-      let x_97 : i32 = i;
-      i = (x_97 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7102617..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_11 : register(b2, space0) {
-  uint4 x_11[1];
-};
-cbuffer cbuffer_x_13 : register(b1, space0) {
-  uint4 x_13[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  float f2 = 0.0f;
-  float f3 = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  f0 = x_36;
-  const float x_38 = asfloat(x_6[1].x);
-  f1 = (x_38 * pow(f0, 4.0f));
-  const float x_43 = asfloat(x_6[1].x);
-  f2 = (x_43 * pow(f0, 4.0f));
-  const float x_47 = f1;
-  const float x_48 = f2;
-  const float x_51 = asfloat(x_11[0].x);
-  f3 = sqrt((((x_47 - x_48) - x_51) + f0));
-  const float x_56 = f3;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_59 = asint(x_13[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((int(x_56) == x_59)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_13[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_68 = asint(x_13[1].x);
-    const int x_71 = asint(x_13[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_13[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_65), float(x_68), float(x_71), float(x_74));
-  } else {
-    const int x_78 = asint(x_13[1].x);
-    const float x_79 = float(x_78);
-    x_GLF_color = float4(x_79, x_79, x_79, x_79);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.msl
deleted file mode 100644
index dd67596..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float one;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf2& x_11, constant buf1& x_13, thread float4* const tint_symbol_3) {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  float f2 = 0.0f;
-  float f3 = 0.0f;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  f0 = x_36;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_39 = f0;
-  f1 = (x_38 * pow(x_39, 4.0f));
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_44 = f0;
-  f2 = (x_43 * pow(x_44, 4.0f));
-  float const x_47 = f1;
-  float const x_48 = f2;
-  float const x_51 = x_11.one;
-  float const x_53 = f0;
-  f3 = sqrt((((x_47 - x_48) - x_51) + x_53));
-  float const x_56 = f3;
-  int const x_59 = x_13.x_GLF_uniform_int_values.arr[0].el;
-  if ((int(x_56) == x_59)) {
-    int const x_65 = x_13.x_GLF_uniform_int_values.arr[0].el;
-    int const x_68 = x_13.x_GLF_uniform_int_values.arr[1].el;
-    int const x_71 = x_13.x_GLF_uniform_int_values.arr[1].el;
-    int const x_74 = x_13.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_65), float(x_68), float(x_71), float(x_74));
-  } else {
-    int const x_78 = x_13.x_GLF_uniform_int_values.arr[1].el;
-    float const x_79 = float(x_78);
-    *(tint_symbol_3) = float4(x_79, x_79, x_79, x_79);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf2& x_11, constant buf1& x_13, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_11, x_13, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf2& x_11 [[buffer(1)]], constant buf1& x_13 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_11, x_13, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e49d71a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,161 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 97
-; Schema: 0
-               OpCapability Shader
-         %42 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "one"
-               OpName %x_11 "x_11"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f0 "f0"
-               OpName %f1 "f1"
-               OpName %f2 "f2"
-               OpName %f3 "f3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 2
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_11 = OpVariable %_ptr_Uniform_buf2 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_13 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-    %float_4 = OpConstant %float 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %86 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-         %f0 = OpVariable %_ptr_Function_float Function %28
-         %f1 = OpVariable %_ptr_Function_float Function %28
-         %f2 = OpVariable %_ptr_Function_float Function %28
-         %f3 = OpVariable %_ptr_Function_float Function %28
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %36 = OpLoad %float %35
-               OpStore %f0 %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %39 = OpLoad %float %38
-         %40 = OpLoad %float %f0
-         %41 = OpExtInst %float %42 Pow %40 %float_4
-         %44 = OpFMul %float %39 %41
-               OpStore %f1 %44
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %46 = OpLoad %float %45
-         %47 = OpLoad %float %f0
-         %48 = OpExtInst %float %42 Pow %47 %float_4
-         %49 = OpFMul %float %46 %48
-               OpStore %f2 %49
-         %50 = OpLoad %float %f1
-         %51 = OpLoad %float %f2
-         %52 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0
-         %53 = OpLoad %float %52
-         %54 = OpLoad %float %f0
-         %56 = OpFSub %float %50 %51
-         %57 = OpFSub %float %56 %53
-         %58 = OpFAdd %float %57 %54
-         %55 = OpExtInst %float %42 Sqrt %58
-               OpStore %f3 %55
-         %59 = OpLoad %float %f3
-         %61 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpConvertFToS %int %59
-         %64 = OpIEqual %bool %63 %62
-               OpSelectionMerge %66 None
-               OpBranchConditional %64 %67 %68
-         %67 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %70
-         %78 = OpConvertSToF %float %72
-         %79 = OpConvertSToF %float %74
-         %80 = OpConvertSToF %float %76
-         %81 = OpCompositeConstruct %v4float %77 %78 %79 %80
-               OpStore %x_GLF_color %81
-               OpBranch %66
-         %68 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpConvertSToF %float %83
-         %85 = OpCompositeConstruct %v4float %84 %84 %84 %84
-               OpStore %x_GLF_color %85
-               OpBranch %66
-         %66 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %86
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %94 = OpLabel
-         %95 = OpFunctionCall %main_out %main_inner
-         %96 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %96
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 39bc587..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  one : f32;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_11 : buf2;
-
-[[group(0), binding(1)]] var<uniform> x_13 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f0 : f32;
-  var f1 : f32;
-  var f2 : f32;
-  var f3 : f32;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  f0 = x_36;
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_39 : f32 = f0;
-  f1 = (x_38 * pow(x_39, 4.0));
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_44 : f32 = f0;
-  f2 = (x_43 * pow(x_44, 4.0));
-  let x_47 : f32 = f1;
-  let x_48 : f32 = f2;
-  let x_51 : f32 = x_11.one;
-  let x_53 : f32 = f0;
-  f3 = sqrt((((x_47 - x_48) - x_51) + x_53));
-  let x_56 : f32 = f3;
-  let x_59 : i32 = x_13.x_GLF_uniform_int_values[0];
-  if ((i32(x_56) == x_59)) {
-    let x_65 : i32 = x_13.x_GLF_uniform_int_values[0];
-    let x_68 : i32 = x_13.x_GLF_uniform_int_values[1];
-    let x_71 : i32 = x_13.x_GLF_uniform_int_values[1];
-    let x_74 : i32 = x_13.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_65), f32(x_68), f32(x_71), f32(x_74));
-  } else {
-    let x_78 : i32 = x_13.x_GLF_uniform_int_values[1];
-    let x_79 : f32 = f32(x_78);
-    x_GLF_color = vec4<f32>(x_79, x_79, x_79, x_79);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7102617..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_11 : register(b2, space0) {
-  uint4 x_11[1];
-};
-cbuffer cbuffer_x_13 : register(b1, space0) {
-  uint4 x_13[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  float f2 = 0.0f;
-  float f3 = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_36 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  f0 = x_36;
-  const float x_38 = asfloat(x_6[1].x);
-  f1 = (x_38 * pow(f0, 4.0f));
-  const float x_43 = asfloat(x_6[1].x);
-  f2 = (x_43 * pow(f0, 4.0f));
-  const float x_47 = f1;
-  const float x_48 = f2;
-  const float x_51 = asfloat(x_11[0].x);
-  f3 = sqrt((((x_47 - x_48) - x_51) + f0));
-  const float x_56 = f3;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_59 = asint(x_13[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((int(x_56) == x_59)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_13[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_68 = asint(x_13[1].x);
-    const int x_71 = asint(x_13[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_13[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_65), float(x_68), float(x_71), float(x_74));
-  } else {
-    const int x_78 = asint(x_13[1].x);
-    const float x_79 = float(x_78);
-    x_GLF_color = float4(x_79, x_79, x_79, x_79);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.msl
deleted file mode 100644
index dd67596..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float one;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf2& x_11, constant buf1& x_13, thread float4* const tint_symbol_3) {
-  float f0 = 0.0f;
-  float f1 = 0.0f;
-  float f2 = 0.0f;
-  float f3 = 0.0f;
-  float const x_36 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  f0 = x_36;
-  float const x_38 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_39 = f0;
-  f1 = (x_38 * pow(x_39, 4.0f));
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_44 = f0;
-  f2 = (x_43 * pow(x_44, 4.0f));
-  float const x_47 = f1;
-  float const x_48 = f2;
-  float const x_51 = x_11.one;
-  float const x_53 = f0;
-  f3 = sqrt((((x_47 - x_48) - x_51) + x_53));
-  float const x_56 = f3;
-  int const x_59 = x_13.x_GLF_uniform_int_values.arr[0].el;
-  if ((int(x_56) == x_59)) {
-    int const x_65 = x_13.x_GLF_uniform_int_values.arr[0].el;
-    int const x_68 = x_13.x_GLF_uniform_int_values.arr[1].el;
-    int const x_71 = x_13.x_GLF_uniform_int_values.arr[1].el;
-    int const x_74 = x_13.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_65), float(x_68), float(x_71), float(x_74));
-  } else {
-    int const x_78 = x_13.x_GLF_uniform_int_values.arr[1].el;
-    float const x_79 = float(x_78);
-    *(tint_symbol_3) = float4(x_79, x_79, x_79, x_79);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf2& x_11, constant buf1& x_13, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_11, x_13, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf2& x_11 [[buffer(1)]], constant buf1& x_13 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_11, x_13, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e49d71a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,161 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 97
-; Schema: 0
-               OpCapability Shader
-         %42 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "one"
-               OpName %x_11 "x_11"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f0 "f0"
-               OpName %f1 "f1"
-               OpName %f2 "f2"
-               OpName %f3 "f3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 2
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_11 = OpVariable %_ptr_Uniform_buf2 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_13 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-    %float_4 = OpConstant %float 4
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %86 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-         %f0 = OpVariable %_ptr_Function_float Function %28
-         %f1 = OpVariable %_ptr_Function_float Function %28
-         %f2 = OpVariable %_ptr_Function_float Function %28
-         %f3 = OpVariable %_ptr_Function_float Function %28
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %36 = OpLoad %float %35
-               OpStore %f0 %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %39 = OpLoad %float %38
-         %40 = OpLoad %float %f0
-         %41 = OpExtInst %float %42 Pow %40 %float_4
-         %44 = OpFMul %float %39 %41
-               OpStore %f1 %44
-         %45 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %46 = OpLoad %float %45
-         %47 = OpLoad %float %f0
-         %48 = OpExtInst %float %42 Pow %47 %float_4
-         %49 = OpFMul %float %46 %48
-               OpStore %f2 %49
-         %50 = OpLoad %float %f1
-         %51 = OpLoad %float %f2
-         %52 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0
-         %53 = OpLoad %float %52
-         %54 = OpLoad %float %f0
-         %56 = OpFSub %float %50 %51
-         %57 = OpFSub %float %56 %53
-         %58 = OpFAdd %float %57 %54
-         %55 = OpExtInst %float %42 Sqrt %58
-               OpStore %f3 %55
-         %59 = OpLoad %float %f3
-         %61 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpConvertFToS %int %59
-         %64 = OpIEqual %bool %63 %62
-               OpSelectionMerge %66 None
-               OpBranchConditional %64 %67 %68
-         %67 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %70
-         %78 = OpConvertSToF %float %72
-         %79 = OpConvertSToF %float %74
-         %80 = OpConvertSToF %float %76
-         %81 = OpCompositeConstruct %v4float %77 %78 %79 %80
-               OpStore %x_GLF_color %81
-               OpBranch %66
-         %68 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_int %x_13 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpConvertSToF %float %83
-         %85 = OpCompositeConstruct %v4float %84 %84 %84 %84
-               OpStore %x_GLF_color %85
-               OpBranch %66
-         %66 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %86
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %94 = OpLabel
-         %95 = OpFunctionCall %main_out %main_inner
-         %96 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %96
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 39bc587..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-identical-value-sqrt/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  one : f32;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_11 : buf2;
-
-[[group(0), binding(1)]] var<uniform> x_13 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f0 : f32;
-  var f1 : f32;
-  var f2 : f32;
-  var f3 : f32;
-  let x_36 : f32 = x_6.x_GLF_uniform_float_values[0];
-  f0 = x_36;
-  let x_38 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_39 : f32 = f0;
-  f1 = (x_38 * pow(x_39, 4.0));
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_44 : f32 = f0;
-  f2 = (x_43 * pow(x_44, 4.0));
-  let x_47 : f32 = f1;
-  let x_48 : f32 = f2;
-  let x_51 : f32 = x_11.one;
-  let x_53 : f32 = f0;
-  f3 = sqrt((((x_47 - x_48) - x_51) + x_53));
-  let x_56 : f32 = f3;
-  let x_59 : i32 = x_13.x_GLF_uniform_int_values[0];
-  if ((i32(x_56) == x_59)) {
-    let x_65 : i32 = x_13.x_GLF_uniform_int_values[0];
-    let x_68 : i32 = x_13.x_GLF_uniform_int_values[1];
-    let x_71 : i32 = x_13.x_GLF_uniform_int_values[1];
-    let x_74 : i32 = x_13.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_65), f32(x_68), f32(x_71), f32(x_74));
-  } else {
-    let x_78 : i32 = x_13.x_GLF_uniform_int_values[1];
-    let x_79 : f32 = f32(x_78);
-    x_GLF_color = vec4<f32>(x_79, x_79, x_79, x_79);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 038f2c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b2, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  bool x_48 = false;
-  bool x_49_phi = false;
-  const float x_33 = asfloat(x_6[1].x);
-  f = pow(-(x_33), sinh(1.0f));
-  const float x_37 = f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_39 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const bool x_40 = (x_37 == x_39);
-  x_49_phi = x_40;
-  if (!(x_40)) {
-    const int x_45 = asint(x_8[0].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_48 = (x_45 == x_47);
-    x_49_phi = x_48;
-  }
-  if (x_49_phi) {
-    const int x_54 = asint(x_10[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_63 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_67 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_68 = float(x_67);
-    x_GLF_color = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.msl
deleted file mode 100644
index bfabb10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,78 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ int zero;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf2& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  bool x_48 = false;
-  bool x_49_phi = false;
-  float const x_33 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  f = pow(-(x_33), sinh(1.0f));
-  float const x_37 = f;
-  float const x_39 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_40 = (x_37 == x_39);
-  x_49_phi = x_40;
-  if (!(x_40)) {
-    int const x_45 = x_8.zero;
-    int const x_47 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    x_48 = (x_45 == x_47);
-    x_49_phi = x_48;
-  }
-  bool const x_49 = x_49_phi;
-  if (x_49) {
-    int const x_54 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_57 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_63 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    int const x_67 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_68 = float(x_67);
-    *(tint_symbol_3) = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf2& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf2& x_8 [[buffer(1)]], constant buf0& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8fccec2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,157 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-         %40 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %x_48 "x_48"
-               OpName %x_49_phi "x_49_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-       %buf2 = OpTypeStruct %int
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_8 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %28
-       %x_48 = OpVariable %_ptr_Function_bool Function %32
-   %x_49_phi = OpVariable %_ptr_Function_bool Function %32
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %38 = OpLoad %float %37
-         %41 = OpFNegate %float %38
-         %42 = OpExtInst %float %40 Sinh %float_1
-         %39 = OpExtInst %float %40 Pow %41 %42
-               OpStore %f %39
-         %44 = OpLoad %float %f
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpFOrdEqual %bool %44 %47
-               OpStore %x_49_phi %48
-         %49 = OpLogicalNot %bool %48
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpIEqual %bool %54 %56
-               OpStore %x_48 %57
-         %58 = OpLoad %bool %x_48
-               OpStore %x_49_phi %58
-               OpBranch %50
-         %50 = OpLabel
-         %59 = OpLoad %bool %x_49_phi
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %60
-         %62 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b378e4c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,68 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  zero : i32;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var x_48 : bool;
-  var x_49_phi : bool;
-  let x_33 : f32 = x_6.x_GLF_uniform_float_values[1];
-  f = pow(-(x_33), sinh(1.0));
-  let x_37 : f32 = f;
-  let x_39 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_40 : bool = (x_37 == x_39);
-  x_49_phi = x_40;
-  if (!(x_40)) {
-    let x_45 : i32 = x_8.zero;
-    let x_47 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_48 = (x_45 == x_47);
-    x_49_phi = x_48;
-  }
-  let x_49 : bool = x_49_phi;
-  if (x_49) {
-    let x_54 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_57 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_63 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_54), f32(x_57), f32(x_60), f32(x_63));
-  } else {
-    let x_67 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_68 : f32 = f32(x_67);
-    x_GLF_color = vec4<f32>(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 038f2c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b2, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  bool x_48 = false;
-  bool x_49_phi = false;
-  const float x_33 = asfloat(x_6[1].x);
-  f = pow(-(x_33), sinh(1.0f));
-  const float x_37 = f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_39 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const bool x_40 = (x_37 == x_39);
-  x_49_phi = x_40;
-  if (!(x_40)) {
-    const int x_45 = asint(x_8[0].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_48 = (x_45 == x_47);
-    x_49_phi = x_48;
-  }
-  if (x_49_phi) {
-    const int x_54 = asint(x_10[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_57 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_63 = asint(x_10[1].x);
-    x_GLF_color = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_67 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_68 = float(x_67);
-    x_GLF_color = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.msl
deleted file mode 100644
index bfabb10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,78 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ int zero;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf2& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  bool x_48 = false;
-  bool x_49_phi = false;
-  float const x_33 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  f = pow(-(x_33), sinh(1.0f));
-  float const x_37 = f;
-  float const x_39 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_40 = (x_37 == x_39);
-  x_49_phi = x_40;
-  if (!(x_40)) {
-    int const x_45 = x_8.zero;
-    int const x_47 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    x_48 = (x_45 == x_47);
-    x_49_phi = x_48;
-  }
-  bool const x_49 = x_49_phi;
-  if (x_49) {
-    int const x_54 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_57 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_60 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_63 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_54), float(x_57), float(x_60), float(x_63));
-  } else {
-    int const x_67 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    float const x_68 = float(x_67);
-    *(tint_symbol_3) = float4(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf2& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf2& x_8 [[buffer(1)]], constant buf0& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8fccec2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,157 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-         %40 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zero"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %x_48 "x_48"
-               OpName %x_49_phi "x_49_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-       %buf2 = OpTypeStruct %int
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_8 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %32 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %28
-       %x_48 = OpVariable %_ptr_Function_bool Function %32
-   %x_49_phi = OpVariable %_ptr_Function_bool Function %32
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %38 = OpLoad %float %37
-         %41 = OpFNegate %float %38
-         %42 = OpExtInst %float %40 Sinh %float_1
-         %39 = OpExtInst %float %40 Pow %41 %42
-               OpStore %f %39
-         %44 = OpLoad %float %f
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %48 = OpFOrdEqual %bool %44 %47
-               OpStore %x_49_phi %48
-         %49 = OpLogicalNot %bool %48
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpIEqual %bool %54 %56
-               OpStore %x_48 %57
-         %58 = OpLoad %bool %x_48
-               OpStore %x_49_phi %58
-               OpBranch %50
-         %50 = OpLabel
-         %59 = OpLoad %bool %x_49_phi
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %60
-         %62 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b378e4c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined-result-condition-with-always-true/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,68 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  zero : i32;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var x_48 : bool;
-  var x_49_phi : bool;
-  let x_33 : f32 = x_6.x_GLF_uniform_float_values[1];
-  f = pow(-(x_33), sinh(1.0));
-  let x_37 : f32 = f;
-  let x_39 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_40 : bool = (x_37 == x_39);
-  x_49_phi = x_40;
-  if (!(x_40)) {
-    let x_45 : i32 = x_8.zero;
-    let x_47 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_48 = (x_45 == x_47);
-    x_49_phi = x_48;
-  }
-  let x_49 : bool = x_49_phi;
-  if (x_49) {
-    let x_54 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_57 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_60 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_63 : i32 = x_10.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_54), f32(x_57), f32(x_60), f32(x_63));
-  } else {
-    let x_67 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_68 : f32 = f32(x_67);
-    x_GLF_color = vec4<f32>(x_68, x_68, x_68, x_68);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 5ec6e57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  float c = 0.0f;
-  a = -1.0f;
-  b = 1.700000048f;
-  c = pow(a, b);
-  const float x_30 = c;
-  x_GLF_color = float4(x_30, x_30, x_30, x_30);
-  if (((a == -1.0f) & (b == 1.700000048f))) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_41 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-    const float x_43 = asfloat(x_8[1].x);
-    const float x_45 = asfloat(x_8[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_47 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(x_41, x_43, x_45, x_47);
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_50 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.msl
deleted file mode 100644
index 24ac7ae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float b = 0.0f;
-  float c = 0.0f;
-  a = -1.0f;
-  b = 1.700000048f;
-  float const x_27 = a;
-  float const x_28 = b;
-  c = pow(x_27, x_28);
-  float const x_30 = c;
-  *(tint_symbol_3) = float4(x_30, x_30, x_30, x_30);
-  float const x_32 = a;
-  float const x_34 = b;
-  if (((x_32 == -1.0f) & (x_34 == 1.700000048f))) {
-    float const x_41 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_43 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    float const x_45 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    float const x_47 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_41, x_43, x_45, x_47);
-  } else {
-    float const x_50 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f2e01df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-   %float_n1 = OpConstant %float -1
-%float_1_70000005 = OpConstant %float 1.70000005
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-          %b = OpVariable %_ptr_Function_float Function %20
-          %c = OpVariable %_ptr_Function_float Function %20
-               OpStore %a %float_n1
-               OpStore %b %float_1_70000005
-         %25 = OpLoad %float %a
-         %26 = OpLoad %float %b
-         %27 = OpExtInst %float %28 Pow %25 %26
-               OpStore %c %27
-         %29 = OpLoad %float %c
-         %30 = OpCompositeConstruct %v4float %29 %29 %29 %29
-               OpStore %x_GLF_color %30
-         %31 = OpLoad %float %a
-         %32 = OpLoad %float %b
-         %33 = OpFOrdEqual %bool %31 %float_n1
-         %35 = OpFOrdEqual %bool %32 %float_1_70000005
-         %36 = OpLogicalAnd %bool %33 %35
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %39
-         %38 = OpLabel
-         %44 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %49 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %50 = OpLoad %float %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %52 = OpLoad %float %51
-         %53 = OpCompositeConstruct %v4float %45 %48 %50 %52
-               OpStore %x_GLF_color %53
-               OpBranch %37
-         %39 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpCompositeConstruct %v4float %55 %55 %55 %55
-               OpStore %x_GLF_color %56
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b62bb38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,47 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  var c : f32;
-  a = -1.0;
-  b = 1.700000048;
-  let x_27 : f32 = a;
-  let x_28 : f32 = b;
-  c = pow(x_27, x_28);
-  let x_30 : f32 = c;
-  x_GLF_color = vec4<f32>(x_30, x_30, x_30, x_30);
-  let x_32 : f32 = a;
-  let x_34 : f32 = b;
-  if (((x_32 == -1.0) & (x_34 == 1.700000048))) {
-    let x_41 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_43 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_45 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_47 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_41, x_43, x_45, x_47);
-  } else {
-    let x_50 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f5dc7e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  float c = 0.0f;
-  a = -1.0f;
-  b = 1.700000048f;
-  c = pow(a, b);
-  const float x_30 = c;
-  x_GLF_color = float4(x_30, x_30, x_30, x_30);
-  bool tint_tmp = (a == -1.0f);
-  if (tint_tmp) {
-    tint_tmp = (b == 1.700000048f);
-  }
-  if ((tint_tmp)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_41 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-    const float x_43 = asfloat(x_8[1].x);
-    const float x_45 = asfloat(x_8[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_47 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(x_41, x_43, x_45, x_47);
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_50 = asfloat(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.msl
deleted file mode 100644
index c102f6c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float b = 0.0f;
-  float c = 0.0f;
-  a = -1.0f;
-  b = 1.700000048f;
-  float const x_27 = a;
-  float const x_28 = b;
-  c = pow(x_27, x_28);
-  float const x_30 = c;
-  *(tint_symbol_3) = float4(x_30, x_30, x_30, x_30);
-  float const x_32 = a;
-  float const x_34 = b;
-  if (((x_32 == -1.0f) && (x_34 == 1.700000048f))) {
-    float const x_41 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    float const x_43 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    float const x_45 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    float const x_47 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_41, x_43, x_45, x_47);
-  } else {
-    float const x_50 = x_8.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d4abc98..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,119 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 70
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-   %float_n1 = OpConstant %float -1
-%float_1_70000005 = OpConstant %float 1.70000005
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %59 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-          %b = OpVariable %_ptr_Function_float Function %20
-          %c = OpVariable %_ptr_Function_float Function %20
-               OpStore %a %float_n1
-               OpStore %b %float_1_70000005
-         %25 = OpLoad %float %a
-         %26 = OpLoad %float %b
-         %27 = OpExtInst %float %28 Pow %25 %26
-               OpStore %c %27
-         %29 = OpLoad %float %c
-         %30 = OpCompositeConstruct %v4float %29 %29 %29 %29
-               OpStore %x_GLF_color %30
-         %31 = OpLoad %float %a
-         %32 = OpLoad %float %b
-         %33 = OpFOrdEqual %bool %31 %float_n1
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %37 = OpFOrdEqual %bool %32 %float_1_70000005
-               OpBranch %35
-         %35 = OpLabel
-         %38 = OpPhi %bool %33 %17 %37 %36
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %47 = OpLoad %float %46
-         %49 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %50 = OpLoad %float %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %52 = OpLoad %float %51
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %55 = OpCompositeConstruct %v4float %47 %50 %52 %54
-               OpStore %x_GLF_color %55
-               OpBranch %39
-         %41 = OpLabel
-         %56 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %57 = OpLoad %float %56
-         %58 = OpCompositeConstruct %v4float %57 %57 %57 %57
-               OpStore %x_GLF_color %58
-               OpBranch %39
-         %39 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %59
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %67 = OpLabel
-         %68 = OpFunctionCall %main_out %main_inner
-         %69 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %69
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 4be05e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-pow-undefined/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,47 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  var c : f32;
-  a = -1.0;
-  b = 1.700000048;
-  let x_27 : f32 = a;
-  let x_28 : f32 = b;
-  c = pow(x_27, x_28);
-  let x_30 : f32 = c;
-  x_GLF_color = vec4<f32>(x_30, x_30, x_30, x_30);
-  let x_32 : f32 = a;
-  let x_34 : f32 = b;
-  if (((x_32 == -1.0) && (x_34 == 1.700000048))) {
-    let x_41 : f32 = x_8.x_GLF_uniform_float_values[0];
-    let x_43 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_45 : f32 = x_8.x_GLF_uniform_float_values[1];
-    let x_47 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_41, x_43, x_45, x_47);
-  } else {
-    let x_50 : f32 = x_8.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_50, x_50, x_50, x_50);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 53c03fc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  a = -7563;
-  const int x_25 = asint(x_6[1].x);
-  const int x_26 = a;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if (((x_25 / x_26) == x_29)) {
-    const int x_35 = asint(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_41 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_44 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_49 = float(x_48);
-    x_GLF_color = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.msl
deleted file mode 100644
index 260e4cb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  a = -7563;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_26 = a;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if (((x_25 / x_26) == x_29)) {
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_41 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_44 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_49 = float(x_48);
-    *(tint_symbol_3) = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0af5f16..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-  %int_n7563 = OpConstant %int -7563
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_n7563
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-         %28 = OpLoad %int %a
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpSDiv %int %27 %28
-         %33 = OpIEqual %bool %32 %31
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %37
-         %36 = OpLabel
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpConvertSToF %float %39
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpConvertSToF %float %45
-         %50 = OpCompositeConstruct %v4float %46 %47 %48 %49
-               OpStore %x_GLF_color %50
-               OpBranch %35
-         %37 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %52
-         %54 = OpCompositeConstruct %v4float %53 %53 %53 %53
-               OpStore %x_GLF_color %54
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 39a800e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  a = -7563;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_26 : i32 = a;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if (((x_25 / x_26) == x_29)) {
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_41 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_44 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_35), f32(x_38), f32(x_41), f32(x_44));
-  } else {
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_49 : f32 = f32(x_48);
-    x_GLF_color = vec4<f32>(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 53c03fc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  a = -7563;
-  const int x_25 = asint(x_6[1].x);
-  const int x_26 = a;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if (((x_25 / x_26) == x_29)) {
-    const int x_35 = asint(x_6[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_41 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_44 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_49 = float(x_48);
-    x_GLF_color = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.msl
deleted file mode 100644
index 260e4cb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  a = -7563;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_26 = a;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if (((x_25 / x_26) == x_29)) {
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_41 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_44 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_49 = float(x_48);
-    *(tint_symbol_3) = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0af5f16..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-  %int_n7563 = OpConstant %int -7563
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_n7563
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-         %28 = OpLoad %int %a
-         %30 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpSDiv %int %27 %28
-         %33 = OpIEqual %bool %32 %31
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %37
-         %36 = OpLabel
-         %38 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %39 = OpLoad %int %38
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpConvertSToF %float %39
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpConvertSToF %float %45
-         %50 = OpCompositeConstruct %v4float %46 %47 %48 %49
-               OpStore %x_GLF_color %50
-               OpBranch %35
-         %37 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %52
-         %54 = OpCompositeConstruct %v4float %53 %53 %53 %53
-               OpStore %x_GLF_color %54
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 39a800e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-rcp-negative-int/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  a = -7563;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_26 : i32 = a;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if (((x_25 / x_26) == x_29)) {
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_41 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_44 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_35), f32(x_38), f32(x_41), f32(x_44));
-  } else {
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_49 : f32 = f32(x_48);
-    x_GLF_color = vec4<f32>(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4120e3c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  a = -1;
-  const int x_25 = asint(x_6[1].x);
-  const int x_26 = a;
-  const int x_29 = asint(x_6[1].x);
-  if (((x_25 / x_26) < x_29)) {
-    const int x_35 = asint(x_6[1].x);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_41 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_44 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_49 = float(x_48);
-    x_GLF_color = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5dad71d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  a = -1;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_26 = a;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if (((x_25 / x_26) < x_29)) {
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_41 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_44 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_49 = float(x_48);
-    *(tint_symbol_3) = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b524821..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %int_n1 = OpConstant %int -1
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_n1
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-         %28 = OpLoad %int %a
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %30 = OpLoad %int %29
-         %31 = OpSDiv %int %27 %28
-         %32 = OpSLessThan %bool %31 %30
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %38 = OpLoad %int %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpConvertSToF %float %38
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpConvertSToF %float %45
-         %50 = OpCompositeConstruct %v4float %46 %47 %48 %49
-               OpStore %x_GLF_color %50
-               OpBranch %34
-         %36 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %52
-         %54 = OpCompositeConstruct %v4float %53 %53 %53 %53
-               OpStore %x_GLF_color %54
-               OpBranch %34
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6c4550f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  a = -1;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_26 : i32 = a;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if (((x_25 / x_26) < x_29)) {
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_41 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_44 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_35), f32(x_38), f32(x_41), f32(x_44));
-  } else {
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_49 : f32 = f32(x_48);
-    x_GLF_color = vec4<f32>(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4120e3c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  a = -1;
-  const int x_25 = asint(x_6[1].x);
-  const int x_26 = a;
-  const int x_29 = asint(x_6[1].x);
-  if (((x_25 / x_26) < x_29)) {
-    const int x_35 = asint(x_6[1].x);
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_41 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_44 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_48 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_49 = float(x_48);
-    x_GLF_color = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5dad71d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  a = -1;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_26 = a;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if (((x_25 / x_26) < x_29)) {
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_41 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_44 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_35), float(x_38), float(x_41), float(x_44));
-  } else {
-    int const x_48 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    float const x_49 = float(x_48);
-    *(tint_symbol_3) = float4(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b524821..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %int_n1 = OpConstant %int -1
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_n1
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-         %28 = OpLoad %int %a
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %30 = OpLoad %int %29
-         %31 = OpSDiv %int %27 %28
-         %32 = OpSLessThan %bool %31 %30
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %38 = OpLoad %int %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpConvertSToF %float %38
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpConvertSToF %float %45
-         %50 = OpCompositeConstruct %v4float %46 %47 %48 %49
-               OpStore %x_GLF_color %50
-               OpBranch %34
-         %36 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %52
-         %54 = OpCompositeConstruct %v4float %53 %53 %53 %53
-               OpStore %x_GLF_color %54
-               OpBranch %34
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6c4550f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reciprocal-var-minus-one/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  a = -1;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_26 : i32 = a;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if (((x_25 / x_26) < x_29)) {
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_41 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_44 : i32 = x_6.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_35), f32(x_38), f32(x_41), f32(x_44));
-  } else {
-    let x_48 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_49 : f32 = f32(x_48);
-    x_GLF_color = vec4<f32>(x_49, x_49, x_49, x_49);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.hlsl
deleted file mode 100644
index 9ef8ef4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  int x_9[1] = (int[1])0;
-  int x_10_phi = 0;
-  const int x_6 = x_9[0u];
-  while (true) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    const int x_7 = asint(x_5[0].x);
-    const int x_8 = x_9[x_7];
-    if ((x_8 == x_6)) {
-      x_10_phi = 1;
-      break;
-    }
-    x_10_phi = 2;
-    break;
-  }
-  const int x_10 = x_10_phi;
-  if (((x_10 == 1) | (x_10 == 2))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.msl
deleted file mode 100644
index 81cec69..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  tint_array_wrapper x_9 = {};
-  int x_10_phi = 0;
-  tint_array_wrapper const x_33 = x_9;
-  int const x_6 = x_33.arr[0u];
-  while (true) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int const x_7 = x_5.zero;
-    int const x_8 = x_9.arr[x_7];
-    if ((x_8 == x_6)) {
-      x_10_phi = 1;
-      break;
-    }
-    x_10_phi = 2;
-    break;
-  }
-  int const x_10 = x_10_phi;
-  if (((x_10 == 1) | (x_10 == 2))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.spvasm
deleted file mode 100644
index 6162334..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_9 "x_9"
-               OpName %x_10_phi "x_10_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Function__arr_int_uint_1 = OpTypePointer Function %_arr_int_uint_1
-         %21 = OpConstantNull %_arr_int_uint_1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-         %53 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %54 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-        %x_9 = OpVariable %_ptr_Function__arr_int_uint_1 Function %21
-   %x_10_phi = OpVariable %_ptr_Function_int Function %24
-         %25 = OpLoad %_arr_int_uint_1 %x_9
-         %27 = OpCompositeExtract %int %25 0
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-               OpStore %x_GLF_color %33
-         %35 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %36 = OpLoad %int %35
-         %37 = OpAccessChain %_ptr_Function_int %x_9 %36
-         %38 = OpLoad %int %37
-         %39 = OpIEqual %bool %38 %27
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %41
-         %42 = OpLabel
-               OpStore %x_10_phi %int_1
-               OpBranch %29
-         %41 = OpLabel
-               OpStore %x_10_phi %int_2
-               OpBranch %29
-         %30 = OpLabel
-               OpBranch %28
-         %29 = OpLabel
-         %45 = OpLoad %int %x_10_phi
-         %46 = OpIEqual %bool %45 %int_1
-         %47 = OpIEqual %bool %45 %int_2
-         %48 = OpLogicalOr %bool %46 %47
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %49
-         %51 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %54
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %62 = OpLabel
-         %63 = OpFunctionCall %main_out %main_inner
-         %64 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.wgsl
deleted file mode 100644
index d8229f2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_9 : array<i32, 1>;
-  var x_10_phi : i32;
-  let x_33 : array<i32, 1> = x_9;
-  let x_6 : i32 = x_33[0u];
-  loop {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    let x_7 : i32 = x_5.zero;
-    let x_8 : i32 = x_9[x_7];
-    if ((x_8 == x_6)) {
-      x_10_phi = 1;
-      break;
-    }
-    x_10_phi = 2;
-    break;
-  }
-  let x_10 : i32 = x_10_phi;
-  if (((x_10 == 1) | (x_10 == 2))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.hlsl
deleted file mode 100644
index 76eb097..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,52 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  int x_9[1] = (int[1])0;
-  int x_10_phi = 0;
-  const int x_6 = x_9[0u];
-  while (true) {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    const int x_7 = asint(x_5[0].x);
-    const int x_8 = x_9[x_7];
-    if ((x_8 == x_6)) {
-      x_10_phi = 1;
-      break;
-    }
-    x_10_phi = 2;
-    break;
-  }
-  const int x_10 = x_10_phi;
-  bool tint_tmp = (x_10 == 1);
-  if (!tint_tmp) {
-    tint_tmp = (x_10 == 2);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.msl
deleted file mode 100644
index cb7da37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  tint_array_wrapper x_9 = {};
-  int x_10_phi = 0;
-  tint_array_wrapper const x_33 = x_9;
-  int const x_6 = x_33.arr[0u];
-  while (true) {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int const x_7 = x_5.zero;
-    int const x_8 = x_9.arr[x_7];
-    if ((x_8 == x_6)) {
-      x_10_phi = 1;
-      break;
-    }
-    x_10_phi = 2;
-    break;
-  }
-  int const x_10 = x_10_phi;
-  if (((x_10 == 1) || (x_10 == 2))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.spvasm
deleted file mode 100644
index ea49963..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,122 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 67
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_9 "x_9"
-               OpName %x_10_phi "x_10_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Function__arr_int_uint_1 = OpTypePointer Function %_arr_int_uint_1
-         %21 = OpConstantNull %_arr_int_uint_1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-         %55 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-        %x_9 = OpVariable %_ptr_Function__arr_int_uint_1 Function %21
-   %x_10_phi = OpVariable %_ptr_Function_int Function %24
-         %25 = OpLoad %_arr_int_uint_1 %x_9
-         %27 = OpCompositeExtract %int %25 0
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-               OpStore %x_GLF_color %33
-         %35 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %36 = OpLoad %int %35
-         %37 = OpAccessChain %_ptr_Function_int %x_9 %36
-         %38 = OpLoad %int %37
-         %39 = OpIEqual %bool %38 %27
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %41
-         %42 = OpLabel
-               OpStore %x_10_phi %int_1
-               OpBranch %29
-         %41 = OpLabel
-               OpStore %x_10_phi %int_2
-               OpBranch %29
-         %30 = OpLabel
-               OpBranch %28
-         %29 = OpLabel
-         %45 = OpLoad %int %x_10_phi
-         %46 = OpIEqual %bool %45 %int_1
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %47 %48
-         %48 = OpLabel
-         %49 = OpIEqual %bool %45 %int_2
-               OpBranch %47
-         %47 = OpLabel
-         %50 = OpPhi %bool %46 %29 %49 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-               OpStore %x_GLF_color %55
-               OpBranch %51
-         %53 = OpLabel
-               OpStore %x_GLF_color %33
-               OpBranch %51
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-         %59 = OpLabel
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %64 = OpLabel
-         %65 = OpFunctionCall %main_out %main_inner
-         %66 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %66
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.wgsl
deleted file mode 100644
index d5ebd09..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-array-replace-extract/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_9 : array<i32, 1>;
-  var x_10_phi : i32;
-  let x_33 : array<i32, 1> = x_9;
-  let x_6 : i32 = x_33[0u];
-  loop {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    let x_7 : i32 = x_5.zero;
-    let x_8 : i32 = x_9[x_7];
-    if ((x_8 == x_6)) {
-      x_10_phi = 1;
-      break;
-    }
-    x_10_phi = 2;
-    break;
-  }
-  let x_10 : i32 = x_10_phi;
-  if (((x_10 == 1) || (x_10 == 2))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 32622e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-struct S {
-  int x;
-  int y;
-};
-
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_struct_S_i1_i11_(inout S arg) {
-  arg.y = 1;
-  return;
-}
-
-void main_1() {
-  float a = 0.0f;
-  S b[2] = (S[2])0;
-  S param = (S)0;
-  a = 5.0f;
-  while (true) {
-    const int x_43 = asint(x_10[0].x);
-    b[x_43].x = 1;
-    const int x_46 = b[1].x;
-    if ((x_46 == 1)) {
-      const int x_51 = asint(x_10[0].x);
-      if ((x_51 == 1)) {
-        break;
-      }
-      const S x_56 = b[1];
-      param = x_56;
-      func_struct_S_i1_i11_(param);
-      b[1] = param;
-      const int x_61 = b[1].y;
-      a = float(x_61);
-    }
-    a = 0.0f;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((a == 5.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.msl
deleted file mode 100644
index acdf2d5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,78 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int x;
-  int y;
-};
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper {
-  S arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_struct_S_i1_i11_(thread S* const arg) {
-  (*(arg)).y = 1;
-  return;
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  tint_array_wrapper b = {};
-  S param = {};
-  a = 5.0f;
-  while (true) {
-    int const x_43 = x_10.one;
-    b.arr[x_43].x = 1;
-    int const x_46 = b.arr[1].x;
-    if ((x_46 == 1)) {
-      int const x_51 = x_10.one;
-      if ((x_51 == 1)) {
-        break;
-      }
-      S const x_56 = b.arr[1];
-      param = x_56;
-      func_struct_S_i1_i11_(&(param));
-      S const x_58 = param;
-      b.arr[1] = x_58;
-      int const x_61 = b.arr[1].y;
-      a = float(x_61);
-    }
-    a = 0.0f;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_63 = a;
-  if ((x_63 == 5.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 34219e4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,156 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 89
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "x"
-               OpMemberName %S 1 "y"
-               OpName %func_struct_S_i1_i11_ "func_struct_S_i1_i11_"
-               OpName %arg "arg"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_arr_S_uint_2 ArrayStride 8
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %S = OpTypeStruct %int %int
-%_ptr_Function_S = OpTypePointer Function %S
-         %12 = OpTypeFunction %void %_ptr_Function_S
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-         %25 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-     %uint_2 = OpConstant %uint 2
-%_arr_S_uint_2 = OpTypeArray %S %uint_2
-%_ptr_Function__arr_S_uint_2 = OpTypePointer Function %_arr_S_uint_2
-         %35 = OpConstantNull %_arr_S_uint_2
-         %37 = OpConstantNull %S
-    %float_5 = OpConstant %float 5
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-    %float_1 = OpConstant %float 1
-         %76 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %77 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %78 = OpTypeFunction %main_out
-%func_struct_S_i1_i11_ = OpFunction %void None %12
-        %arg = OpFunctionParameter %_ptr_Function_S
-         %18 = OpLabel
-         %23 = OpAccessChain %_ptr_Function_int %arg %uint_1
-               OpStore %23 %int_1
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %25
-         %27 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %30
-          %b = OpVariable %_ptr_Function__arr_S_uint_2 Function %35
-      %param = OpVariable %_ptr_Function_S Function %37
-               OpStore %a %float_5
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Function_int %b %46 %uint_0
-               OpStore %47 %int_1
-         %48 = OpAccessChain %_ptr_Function_int %b %int_1 %uint_0
-         %49 = OpLoad %int %48
-         %50 = OpIEqual %bool %49 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %52
-         %53 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %55 %int_1
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpBranch %40
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Function_S %b %int_1
-         %60 = OpLoad %S %59
-               OpStore %param %60
-         %61 = OpFunctionCall %void %func_struct_S_i1_i11_ %param
-         %63 = OpLoad %S %param
-         %64 = OpAccessChain %_ptr_Function_S %b %int_1
-               OpStore %64 %63
-         %65 = OpAccessChain %_ptr_Function_int %b %int_1 %uint_1
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %66
-               OpStore %a %67
-               OpBranch %52
-         %52 = OpLabel
-               OpStore %a %float_0
-               OpBranch %41
-         %41 = OpLabel
-               OpBranchConditional %false %39 %40
-         %40 = OpLabel
-         %70 = OpLoad %float %a
-         %71 = OpFOrdEqual %bool %70 %float_5
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-               OpStore %x_GLF_color %76
-               OpBranch %72
-         %74 = OpLabel
-               OpStore %x_GLF_color %77
-               OpBranch %72
-         %72 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %78
-         %81 = OpLabel
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %25
-         %86 = OpLabel
-         %87 = OpFunctionCall %main_out %main_inner
-         %88 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %88
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 779fafc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,69 +0,0 @@
-struct S {
-  x : i32;
-  y : i32;
-};
-
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i1_i11_(arg : ptr<function, S>) {
-  (*(arg)).y = 1;
-  return;
-}
-
-fn main_1() {
-  var a : f32;
-  var b : array<S, 2>;
-  var param : S;
-  a = 5.0;
-  loop {
-    let x_43 : i32 = x_10.one;
-    b[x_43].x = 1;
-    let x_46 : i32 = b[1].x;
-    if ((x_46 == 1)) {
-      let x_51 : i32 = x_10.one;
-      if ((x_51 == 1)) {
-        break;
-      }
-      let x_56 : S = b[1];
-      param = x_56;
-      func_struct_S_i1_i11_(&(param));
-      let x_58 : S = param;
-      b[1] = x_58;
-      let x_61 : i32 = b[1].y;
-      a = f32(x_61);
-    }
-    a = 0.0;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_63 : f32 = a;
-  if ((x_63 == 5.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 32622e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-struct S {
-  int x;
-  int y;
-};
-
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_struct_S_i1_i11_(inout S arg) {
-  arg.y = 1;
-  return;
-}
-
-void main_1() {
-  float a = 0.0f;
-  S b[2] = (S[2])0;
-  S param = (S)0;
-  a = 5.0f;
-  while (true) {
-    const int x_43 = asint(x_10[0].x);
-    b[x_43].x = 1;
-    const int x_46 = b[1].x;
-    if ((x_46 == 1)) {
-      const int x_51 = asint(x_10[0].x);
-      if ((x_51 == 1)) {
-        break;
-      }
-      const S x_56 = b[1];
-      param = x_56;
-      func_struct_S_i1_i11_(param);
-      b[1] = param;
-      const int x_61 = b[1].y;
-      a = float(x_61);
-    }
-    a = 0.0f;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  if ((a == 5.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.msl
deleted file mode 100644
index acdf2d5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,78 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int x;
-  int y;
-};
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper {
-  S arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_struct_S_i1_i11_(thread S* const arg) {
-  (*(arg)).y = 1;
-  return;
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  tint_array_wrapper b = {};
-  S param = {};
-  a = 5.0f;
-  while (true) {
-    int const x_43 = x_10.one;
-    b.arr[x_43].x = 1;
-    int const x_46 = b.arr[1].x;
-    if ((x_46 == 1)) {
-      int const x_51 = x_10.one;
-      if ((x_51 == 1)) {
-        break;
-      }
-      S const x_56 = b.arr[1];
-      param = x_56;
-      func_struct_S_i1_i11_(&(param));
-      S const x_58 = param;
-      b.arr[1] = x_58;
-      int const x_61 = b.arr[1].y;
-      a = float(x_61);
-    }
-    a = 0.0f;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_63 = a;
-  if ((x_63 == 5.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 34219e4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,156 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 89
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "x"
-               OpMemberName %S 1 "y"
-               OpName %func_struct_S_i1_i11_ "func_struct_S_i1_i11_"
-               OpName %arg "arg"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpDecorate %_arr_S_uint_2 ArrayStride 8
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %S = OpTypeStruct %int %int
-%_ptr_Function_S = OpTypePointer Function %S
-         %12 = OpTypeFunction %void %_ptr_Function_S
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-         %25 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-     %uint_2 = OpConstant %uint 2
-%_arr_S_uint_2 = OpTypeArray %S %uint_2
-%_ptr_Function__arr_S_uint_2 = OpTypePointer Function %_arr_S_uint_2
-         %35 = OpConstantNull %_arr_S_uint_2
-         %37 = OpConstantNull %S
-    %float_5 = OpConstant %float 5
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-    %float_1 = OpConstant %float 1
-         %76 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %77 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %78 = OpTypeFunction %main_out
-%func_struct_S_i1_i11_ = OpFunction %void None %12
-        %arg = OpFunctionParameter %_ptr_Function_S
-         %18 = OpLabel
-         %23 = OpAccessChain %_ptr_Function_int %arg %uint_1
-               OpStore %23 %int_1
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %25
-         %27 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %30
-          %b = OpVariable %_ptr_Function__arr_S_uint_2 Function %35
-      %param = OpVariable %_ptr_Function_S Function %37
-               OpStore %a %float_5
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Function_int %b %46 %uint_0
-               OpStore %47 %int_1
-         %48 = OpAccessChain %_ptr_Function_int %b %int_1 %uint_0
-         %49 = OpLoad %int %48
-         %50 = OpIEqual %bool %49 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %52
-         %53 = OpLabel
-         %54 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %55 = OpLoad %int %54
-         %56 = OpIEqual %bool %55 %int_1
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpBranch %40
-         %57 = OpLabel
-         %59 = OpAccessChain %_ptr_Function_S %b %int_1
-         %60 = OpLoad %S %59
-               OpStore %param %60
-         %61 = OpFunctionCall %void %func_struct_S_i1_i11_ %param
-         %63 = OpLoad %S %param
-         %64 = OpAccessChain %_ptr_Function_S %b %int_1
-               OpStore %64 %63
-         %65 = OpAccessChain %_ptr_Function_int %b %int_1 %uint_1
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %66
-               OpStore %a %67
-               OpBranch %52
-         %52 = OpLabel
-               OpStore %a %float_0
-               OpBranch %41
-         %41 = OpLabel
-               OpBranchConditional %false %39 %40
-         %40 = OpLabel
-         %70 = OpLoad %float %a
-         %71 = OpFOrdEqual %bool %70 %float_5
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-               OpStore %x_GLF_color %76
-               OpBranch %72
-         %74 = OpLabel
-               OpStore %x_GLF_color %77
-               OpBranch %72
-         %72 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %78
-         %81 = OpLabel
-         %82 = OpFunctionCall %void %main_1
-         %83 = OpLoad %v4float %x_GLF_color
-         %84 = OpCompositeConstruct %main_out %83
-               OpReturnValue %84
-               OpFunctionEnd
-       %main = OpFunction %void None %25
-         %86 = OpLabel
-         %87 = OpFunctionCall %main_out %main_inner
-         %88 = OpCompositeExtract %v4float %87 0
-               OpStore %x_GLF_color_1_1 %88
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 779fafc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reduce-load-replace-extract/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,69 +0,0 @@
-struct S {
-  x : i32;
-  y : i32;
-};
-
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i1_i11_(arg : ptr<function, S>) {
-  (*(arg)).y = 1;
-  return;
-}
-
-fn main_1() {
-  var a : f32;
-  var b : array<S, 2>;
-  var param : S;
-  a = 5.0;
-  loop {
-    let x_43 : i32 = x_10.one;
-    b[x_43].x = 1;
-    let x_46 : i32 = b[1].x;
-    if ((x_46 == 1)) {
-      let x_51 : i32 = x_10.one;
-      if ((x_51 == 1)) {
-        break;
-      }
-      let x_56 : S = b[1];
-      param = x_56;
-      func_struct_S_i1_i11_(&(param));
-      let x_58 : S = param;
-      b[1] = x_58;
-      let x_61 : i32 = b[1].y;
-      a = f32(x_61);
-    }
-    a = 0.0;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_63 : f32 = a;
-  if ((x_63 == 5.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 26431be..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int j = 0;
-  const int x_36 = asint(x_7[1].x);
-  i = x_36;
-  while (true) {
-    const int x_41 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_47 = asfloat(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_49 = asfloat(x_9[1].x);
-    if ((x_47 > x_49)) {
-      discard;
-    }
-    const int x_54 = asint(x_7[1].x);
-    j = x_54;
-    while (true) {
-      const int x_59 = j;
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_61 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      if ((x_59 < x_61)) {
-      } else {
-        break;
-      }
-      const float x_65 = gl_FragCoord.x;
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const float x_67 = asfloat(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      if ((x_65 < x_67)) {
-        discard;
-      }
-      const int x_72 = asint(x_7[2].x);
-      const int x_75 = asint(x_7[1].x);
-      const int x_78 = asint(x_7[1].x);
-      const int x_81 = asint(x_7[2].x);
-      x_GLF_v1 = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_v1_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_v1_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_v1};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_v1_1 = inner_result.x_GLF_v1_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.msl
deleted file mode 100644
index 853853a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_v1_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_v1_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int j = 0;
-  int const x_36 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  i = x_36;
-  while (true) {
-    int const x_41 = i;
-    int const x_43 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    float const x_47 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    float const x_49 = x_9.x_GLF_uniform_float_values.arr[1].el;
-    if ((x_47 > x_49)) {
-      discard_fragment();
-    }
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    j = x_54;
-    while (true) {
-      int const x_59 = j;
-      int const x_61 = x_7.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_59 < x_61)) {
-      } else {
-        break;
-      }
-      float const x_65 = (*(tint_symbol_3)).x;
-      float const x_67 = x_9.x_GLF_uniform_float_values.arr[0].el;
-      if ((x_65 < x_67)) {
-        discard_fragment();
-      }
-      int const x_72 = x_7.x_GLF_uniform_int_values.arr[2].el;
-      int const x_75 = x_7.x_GLF_uniform_int_values.arr[1].el;
-      int const x_78 = x_7.x_GLF_uniform_int_values.arr[1].el;
-      int const x_81 = x_7.x_GLF_uniform_int_values.arr[2].el;
-      *(tint_symbol_4) = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-      {
-        int const x_84 = j;
-        j = as_type<int>((as_type<uint>(x_84) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_86 = i;
-      i = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_v1_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_v1_1 = inner_result.x_GLF_v1_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5387682..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,187 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_v1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_v1_1_1 "x_GLF_v1_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_v1 "x_GLF_v1"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_v1_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_v1_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_v1_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-   %x_GLF_v1 = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %96 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %29
-          %j = OpVariable %_ptr_Function_int Function %29
-         %34 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %35 = OpLoad %int %34
-               OpStore %i %35
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpSLessThan %bool %40 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %37
-         %46 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpFOrdGreaterThan %bool %51 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-               OpKill
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %58 = OpLoad %int %57
-               OpStore %j %58
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %j
-         %64 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %65 = OpLoad %int %64
-         %66 = OpSLessThan %bool %63 %65
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %60
-         %67 = OpLabel
-         %71 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %74 = OpLoad %float %73
-         %75 = OpFOrdLessThan %bool %72 %74
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-               OpKill
-         %76 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %80
-         %88 = OpConvertSToF %float %82
-         %89 = OpConvertSToF %float %84
-         %90 = OpConvertSToF %float %86
-         %91 = OpCompositeConstruct %v4float %87 %88 %89 %90
-               OpStore %x_GLF_v1 %91
-               OpBranch %61
-         %61 = OpLabel
-         %92 = OpLoad %int %j
-         %93 = OpIAdd %int %92 %int_1
-               OpStore %j %93
-               OpBranch %59
-         %60 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-         %94 = OpLoad %int %i
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %i %95
-               OpBranch %36
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %96
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %100 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %101 = OpFunctionCall %void %main_1
-        %102 = OpLoad %v4float %x_GLF_v1
-        %103 = OpCompositeConstruct %main_out %102
-               OpReturnValue %103
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %105 = OpLabel
-        %107 = OpLoad %v4float %gl_FragCoord_param_1
-        %106 = OpFunctionCall %main_out %main_inner %107
-        %108 = OpCompositeExtract %v4float %106 0
-               OpStore %x_GLF_v1_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a5fd0d0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,84 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_v1 : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var j : i32;
-  let x_36 : i32 = x_7.x_GLF_uniform_int_values[1];
-  i = x_36;
-  loop {
-    let x_41 : i32 = i;
-    let x_43 : i32 = x_7.x_GLF_uniform_int_values[0];
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    let x_47 : f32 = x_9.x_GLF_uniform_float_values[0];
-    let x_49 : f32 = x_9.x_GLF_uniform_float_values[1];
-    if ((x_47 > x_49)) {
-      discard;
-    }
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
-    j = x_54;
-    loop {
-      let x_59 : i32 = j;
-      let x_61 : i32 = x_7.x_GLF_uniform_int_values[0];
-      if ((x_59 < x_61)) {
-      } else {
-        break;
-      }
-      let x_65 : f32 = gl_FragCoord.x;
-      let x_67 : f32 = x_9.x_GLF_uniform_float_values[0];
-      if ((x_65 < x_67)) {
-        discard;
-      }
-      let x_72 : i32 = x_7.x_GLF_uniform_int_values[2];
-      let x_75 : i32 = x_7.x_GLF_uniform_int_values[1];
-      let x_78 : i32 = x_7.x_GLF_uniform_int_values[1];
-      let x_81 : i32 = x_7.x_GLF_uniform_int_values[2];
-      x_GLF_v1 = vec4<f32>(f32(x_72), f32(x_75), f32(x_78), f32(x_81));
-
-      continuing {
-        let x_84 : i32 = j;
-        j = (x_84 + 1);
-      }
-    }
-
-    continuing {
-      let x_86 : i32 = i;
-      i = (x_86 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_v1_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_v1);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 26431be..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_v1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int j = 0;
-  const int x_36 = asint(x_7[1].x);
-  i = x_36;
-  while (true) {
-    const int x_41 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_47 = asfloat(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const float x_49 = asfloat(x_9[1].x);
-    if ((x_47 > x_49)) {
-      discard;
-    }
-    const int x_54 = asint(x_7[1].x);
-    j = x_54;
-    while (true) {
-      const int x_59 = j;
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_61 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      if ((x_59 < x_61)) {
-      } else {
-        break;
-      }
-      const float x_65 = gl_FragCoord.x;
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const float x_67 = asfloat(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      if ((x_65 < x_67)) {
-        discard;
-      }
-      const int x_72 = asint(x_7[2].x);
-      const int x_75 = asint(x_7[1].x);
-      const int x_78 = asint(x_7[1].x);
-      const int x_81 = asint(x_7[2].x);
-      x_GLF_v1 = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_v1_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_v1_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_v1};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_v1_1 = inner_result.x_GLF_v1_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.msl
deleted file mode 100644
index 853853a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_v1_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_v1_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int j = 0;
-  int const x_36 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  i = x_36;
-  while (true) {
-    int const x_41 = i;
-    int const x_43 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    float const x_47 = x_9.x_GLF_uniform_float_values.arr[0].el;
-    float const x_49 = x_9.x_GLF_uniform_float_values.arr[1].el;
-    if ((x_47 > x_49)) {
-      discard_fragment();
-    }
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    j = x_54;
-    while (true) {
-      int const x_59 = j;
-      int const x_61 = x_7.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_59 < x_61)) {
-      } else {
-        break;
-      }
-      float const x_65 = (*(tint_symbol_3)).x;
-      float const x_67 = x_9.x_GLF_uniform_float_values.arr[0].el;
-      if ((x_65 < x_67)) {
-        discard_fragment();
-      }
-      int const x_72 = x_7.x_GLF_uniform_int_values.arr[2].el;
-      int const x_75 = x_7.x_GLF_uniform_int_values.arr[1].el;
-      int const x_78 = x_7.x_GLF_uniform_int_values.arr[1].el;
-      int const x_81 = x_7.x_GLF_uniform_int_values.arr[2].el;
-      *(tint_symbol_4) = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-      {
-        int const x_84 = j;
-        j = as_type<int>((as_type<uint>(x_84) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_86 = i;
-      i = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_v1_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_v1_1 = inner_result.x_GLF_v1_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5387682..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,187 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_v1_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_v1_1_1 "x_GLF_v1_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_v1 "x_GLF_v1"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_v1_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_v1_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_v1_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf1 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-   %x_GLF_v1 = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %96 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %29
-          %j = OpVariable %_ptr_Function_int Function %29
-         %34 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %35 = OpLoad %int %34
-               OpStore %i %35
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %43 = OpLoad %int %42
-         %44 = OpSLessThan %bool %40 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %37
-         %46 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_1
-         %53 = OpLoad %float %52
-         %54 = OpFOrdGreaterThan %bool %51 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-               OpKill
-         %55 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %58 = OpLoad %int %57
-               OpStore %j %58
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %j
-         %64 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %65 = OpLoad %int %64
-         %66 = OpSLessThan %bool %63 %65
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %60
-         %67 = OpLabel
-         %71 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %74 = OpLoad %float %73
-         %75 = OpFOrdLessThan %bool %72 %74
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-               OpKill
-         %76 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %80
-         %88 = OpConvertSToF %float %82
-         %89 = OpConvertSToF %float %84
-         %90 = OpConvertSToF %float %86
-         %91 = OpCompositeConstruct %v4float %87 %88 %89 %90
-               OpStore %x_GLF_v1 %91
-               OpBranch %61
-         %61 = OpLabel
-         %92 = OpLoad %int %j
-         %93 = OpIAdd %int %92 %int_1
-               OpStore %j %93
-               OpBranch %59
-         %60 = OpLabel
-               OpBranch %38
-         %38 = OpLabel
-         %94 = OpLoad %int %i
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %i %95
-               OpBranch %36
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %96
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %100 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %101 = OpFunctionCall %void %main_1
-        %102 = OpLoad %v4float %x_GLF_v1
-        %103 = OpCompositeConstruct %main_out %102
-               OpReturnValue %103
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-        %105 = OpLabel
-        %107 = OpLoad %v4float %gl_FragCoord_param_1
-        %106 = OpFunctionCall %main_out %main_inner %107
-        %108 = OpCompositeExtract %v4float %106 0
-               OpStore %x_GLF_v1_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a5fd0d0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-register-coalescer-live-intervals-target-instr-info-for-discard-for-discard/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,84 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_v1 : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var j : i32;
-  let x_36 : i32 = x_7.x_GLF_uniform_int_values[1];
-  i = x_36;
-  loop {
-    let x_41 : i32 = i;
-    let x_43 : i32 = x_7.x_GLF_uniform_int_values[0];
-    if ((x_41 < x_43)) {
-    } else {
-      break;
-    }
-    let x_47 : f32 = x_9.x_GLF_uniform_float_values[0];
-    let x_49 : f32 = x_9.x_GLF_uniform_float_values[1];
-    if ((x_47 > x_49)) {
-      discard;
-    }
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
-    j = x_54;
-    loop {
-      let x_59 : i32 = j;
-      let x_61 : i32 = x_7.x_GLF_uniform_int_values[0];
-      if ((x_59 < x_61)) {
-      } else {
-        break;
-      }
-      let x_65 : f32 = gl_FragCoord.x;
-      let x_67 : f32 = x_9.x_GLF_uniform_float_values[0];
-      if ((x_65 < x_67)) {
-        discard;
-      }
-      let x_72 : i32 = x_7.x_GLF_uniform_int_values[2];
-      let x_75 : i32 = x_7.x_GLF_uniform_int_values[1];
-      let x_78 : i32 = x_7.x_GLF_uniform_int_values[1];
-      let x_81 : i32 = x_7.x_GLF_uniform_int_values[2];
-      x_GLF_v1 = vec4<f32>(f32(x_72), f32(x_75), f32(x_78), f32(x_81));
-
-      continuing {
-        let x_84 : i32 = j;
-        j = (x_84 + 1);
-      }
-    }
-
-    continuing {
-      let x_86 : i32 = i;
-      i = (x_86 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_v1_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_v1);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2ac4c9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,93 +0,0 @@
-SKIP: FAILED
-
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float f = 0.0f;
-  int i = 0;
-  int j = 0;
-  const int x_36 = asint(x_5[1].x);
-  if ((x_36 == 1)) {
-    const float x_40 = f;
-    m = float2x2(float2(x_40, 0.0f), float2(0.0f, x_40));
-  }
-  const int x_45 = asint(x_5[1].x);
-  i = x_45;
-  while (true) {
-    const int x_50 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    const int x_56 = asint(x_5[1].x);
-    j = x_56;
-    while (true) {
-      const int x_61 = j;
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const int x_63 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      const int x_66 = i;
-      const int x_67 = j;
-      const int x_68 = i;
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_70 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      set_float2(m[x_66], x_67, float(((x_68 * x_70) + j)));
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const float2x2 x_80 = m;
-  const int x_82 = asint(x_5[1].x);
-  const int x_85 = asint(x_5[2].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_88 = asint(x_5[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_91 = asint(x_5[3].x);
-  const float2x2 x_95 = float2x2(float2(float(x_82), float(x_85)), float2(float(x_88), float(x_91)));
-  if ((all((x_80[0u] == x_95[0u])) & all((x_80[1u] == x_95[1u])))) {
-    const int x_109 = asint(x_5[2].x);
-    const int x_112 = asint(x_5[1].x);
-    const int x_115 = asint(x_5[1].x);
-    const int x_118 = asint(x_5[2].x);
-    x_GLF_color = float4(float(x_109), float(x_112), float(x_115), float(x_118));
-  } else {
-    const int x_122 = asint(x_5[1].x);
-    const float x_123 = float(x_122);
-    x_GLF_color = float4(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x000001C6DCCB8180(45,18-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x000001C6DCCB8180(32,5-16): error X3511: forced to unroll loop, but unrolling failed.
-C:\src\tint\test\Shader@0x000001C6DCCB8180(22,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.msl
deleted file mode 100644
index dee41a7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float2x2 m = float2x2(0.0f);
-  float f = 0.0f;
-  int i = 0;
-  int j = 0;
-  int const x_36 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_36 == 1)) {
-    float const x_40 = f;
-    m = float2x2(float2(x_40, 0.0f), float2(0.0f, x_40));
-  }
-  int const x_45 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  i = x_45;
-  while (true) {
-    int const x_50 = i;
-    int const x_52 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    int const x_56 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    j = x_56;
-    while (true) {
-      int const x_61 = j;
-      int const x_63 = x_5.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      int const x_66 = i;
-      int const x_67 = j;
-      int const x_68 = i;
-      int const x_70 = x_5.x_GLF_uniform_int_values.arr[0].el;
-      int const x_72 = j;
-      m[x_66][x_67] = float(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_68) * as_type<uint>(x_70)))) + as_type<uint>(x_72))));
-      {
-        int const x_76 = j;
-        j = as_type<int>((as_type<uint>(x_76) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_78 = i;
-      i = as_type<int>((as_type<uint>(x_78) + as_type<uint>(1)));
-    }
-  }
-  float2x2 const x_80 = m;
-  int const x_82 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_85 = x_5.x_GLF_uniform_int_values.arr[2].el;
-  int const x_88 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_91 = x_5.x_GLF_uniform_int_values.arr[3].el;
-  float2x2 const x_95 = float2x2(float2(float(x_82), float(x_85)), float2(float(x_88), float(x_91)));
-  if ((all((x_80[0u] == x_95[0u])) & all((x_80[1u] == x_95[1u])))) {
-    int const x_109 = x_5.x_GLF_uniform_int_values.arr[2].el;
-    int const x_112 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    int const x_115 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    int const x_118 = x_5.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_109), float(x_112), float(x_115), float(x_118));
-  } else {
-    int const x_122 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    float const x_123 = float(x_122);
-    *(tint_symbol_3) = float4(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 74936e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,216 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 146
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %23 = OpConstantNull %mat2v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %v2bool = OpTypeVector %bool 2
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-        %135 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %m = OpVariable %_ptr_Function_mat2v2float Function %23
-          %f = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %29
-          %j = OpVariable %_ptr_Function_int Function %29
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %35 = OpLoad %int %34
-         %36 = OpIEqual %bool %35 %int_1
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
-         %40 = OpLoad %float %f
-         %42 = OpCompositeConstruct %v2float %40 %float_0
-         %43 = OpCompositeConstruct %v2float %float_0 %40
-         %44 = OpCompositeConstruct %mat2v2float %42 %43
-               OpStore %m %44
-               OpBranch %38
-         %38 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %46 = OpLoad %int %45
-               OpStore %i %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpSLessThan %bool %51 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpBranch %56
-         %58 = OpLabel
-               OpBranch %48
-         %56 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %60 = OpLoad %int %59
-               OpStore %j %60
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %65 = OpLoad %int %j
-         %66 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %65 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-               OpBranch %69
-         %71 = OpLabel
-               OpBranch %62
-         %69 = OpLabel
-         %72 = OpLoad %int %i
-         %73 = OpLoad %int %j
-         %74 = OpLoad %int %i
-         %75 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpLoad %int %j
-         %78 = OpAccessChain %_ptr_Function_float %m %72 %73
-         %80 = OpIMul %int %74 %76
-         %81 = OpIAdd %int %80 %77
-         %79 = OpConvertSToF %float %81
-               OpStore %78 %79
-               OpBranch %63
-         %63 = OpLabel
-         %82 = OpLoad %int %j
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %j %83
-               OpBranch %61
-         %62 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %i %85
-               OpBranch %47
-         %48 = OpLabel
-         %86 = OpLoad %mat2v2float %m
-         %87 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %90 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-         %91 = OpLoad %int %90
-         %92 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %95 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_3
-         %96 = OpLoad %int %95
-         %97 = OpConvertSToF %float %88
-         %98 = OpConvertSToF %float %91
-         %99 = OpCompositeConstruct %v2float %97 %98
-        %100 = OpConvertSToF %float %93
-        %101 = OpConvertSToF %float %96
-        %102 = OpCompositeConstruct %v2float %100 %101
-        %103 = OpCompositeConstruct %mat2v2float %99 %102
-        %105 = OpCompositeExtract %v2float %86 0
-        %106 = OpCompositeExtract %v2float %103 0
-        %107 = OpFOrdEqual %v2bool %105 %106
-        %104 = OpAll %bool %107
-        %111 = OpCompositeExtract %v2float %86 1
-        %112 = OpCompositeExtract %v2float %103 1
-        %113 = OpFOrdEqual %v2bool %111 %112
-        %109 = OpAll %bool %113
-        %114 = OpLogicalAnd %bool %104 %109
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-        %119 = OpLoad %int %118
-        %120 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-        %123 = OpLoad %int %122
-        %124 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-        %125 = OpLoad %int %124
-        %126 = OpConvertSToF %float %119
-        %127 = OpConvertSToF %float %121
-        %128 = OpConvertSToF %float %123
-        %129 = OpConvertSToF %float %125
-        %130 = OpCompositeConstruct %v4float %126 %127 %128 %129
-               OpStore %x_GLF_color %130
-               OpBranch %115
-        %117 = OpLabel
-        %131 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-        %132 = OpLoad %int %131
-        %133 = OpConvertSToF %float %132
-        %134 = OpCompositeConstruct %v4float %133 %133 %133 %133
-               OpStore %x_GLF_color %134
-               OpBranch %115
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %135
-        %138 = OpLabel
-        %139 = OpFunctionCall %void %main_1
-        %140 = OpLoad %v4float %x_GLF_color
-        %141 = OpCompositeConstruct %main_out %140
-               OpReturnValue %141
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %143 = OpLabel
-        %144 = OpFunctionCall %main_out %main_inner
-        %145 = OpCompositeExtract %v4float %144 0
-               OpStore %x_GLF_color_1_1 %145
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 90bc862..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,87 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat2x2<f32>;
-  var f : f32;
-  var i : i32;
-  var j : i32;
-  let x_36 : i32 = x_5.x_GLF_uniform_int_values[1];
-  if ((x_36 == 1)) {
-    let x_40 : f32 = f;
-    m = mat2x2<f32>(vec2<f32>(x_40, 0.0), vec2<f32>(0.0, x_40));
-  }
-  let x_45 : i32 = x_5.x_GLF_uniform_int_values[1];
-  i = x_45;
-  loop {
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_5.x_GLF_uniform_int_values[0];
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    let x_56 : i32 = x_5.x_GLF_uniform_int_values[1];
-    j = x_56;
-    loop {
-      let x_61 : i32 = j;
-      let x_63 : i32 = x_5.x_GLF_uniform_int_values[0];
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      let x_66 : i32 = i;
-      let x_67 : i32 = j;
-      let x_68 : i32 = i;
-      let x_70 : i32 = x_5.x_GLF_uniform_int_values[0];
-      let x_72 : i32 = j;
-      m[x_66][x_67] = f32(((x_68 * x_70) + x_72));
-
-      continuing {
-        let x_76 : i32 = j;
-        j = (x_76 + 1);
-      }
-    }
-
-    continuing {
-      let x_78 : i32 = i;
-      i = (x_78 + 1);
-    }
-  }
-  let x_80 : mat2x2<f32> = m;
-  let x_82 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_85 : i32 = x_5.x_GLF_uniform_int_values[2];
-  let x_88 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_91 : i32 = x_5.x_GLF_uniform_int_values[3];
-  let x_95 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(f32(x_82), f32(x_85)), vec2<f32>(f32(x_88), f32(x_91)));
-  if ((all((x_80[0u] == x_95[0u])) & all((x_80[1u] == x_95[1u])))) {
-    let x_109 : i32 = x_5.x_GLF_uniform_int_values[2];
-    let x_112 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_115 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_118 : i32 = x_5.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_109), f32(x_112), f32(x_115), f32(x_118));
-  } else {
-    let x_122 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_123 : f32 = f32(x_122);
-    x_GLF_color = vec4<f32>(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 756e3f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,97 +0,0 @@
-SKIP: FAILED
-
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float f = 0.0f;
-  int i = 0;
-  int j = 0;
-  const int x_36 = asint(x_5[1].x);
-  if ((x_36 == 1)) {
-    const float x_40 = f;
-    m = float2x2(float2(x_40, 0.0f), float2(0.0f, x_40));
-  }
-  const int x_45 = asint(x_5[1].x);
-  i = x_45;
-  while (true) {
-    const int x_50 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_52 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    const int x_56 = asint(x_5[1].x);
-    j = x_56;
-    while (true) {
-      const int x_61 = j;
-      const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-      const int x_63 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      const int x_66 = i;
-      const int x_67 = j;
-      const int x_68 = i;
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_70 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      set_float2(m[x_66], x_67, float(((x_68 * x_70) + j)));
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const float2x2 x_80 = m;
-  const int x_82 = asint(x_5[1].x);
-  const int x_85 = asint(x_5[2].x);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_88 = asint(x_5[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_91 = asint(x_5[3].x);
-  const float2x2 x_95 = float2x2(float2(float(x_82), float(x_85)), float2(float(x_88), float(x_91)));
-  bool tint_tmp = all((x_80[0u] == x_95[0u]));
-  if (tint_tmp) {
-    tint_tmp = all((x_80[1u] == x_95[1u]));
-  }
-  if ((tint_tmp)) {
-    const int x_109 = asint(x_5[2].x);
-    const int x_112 = asint(x_5[1].x);
-    const int x_115 = asint(x_5[1].x);
-    const int x_118 = asint(x_5[2].x);
-    x_GLF_color = float4(float(x_109), float(x_112), float(x_115), float(x_118));
-  } else {
-    const int x_122 = asint(x_5[1].x);
-    const float x_123 = float(x_122);
-    x_GLF_color = float4(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x000001B29A7B25C0(45,18-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x000001B29A7B25C0(32,5-16): error X3511: forced to unroll loop, but unrolling failed.
-C:\src\tint\test\Shader@0x000001B29A7B25C0(22,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.msl
deleted file mode 100644
index 81fa027..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float2x2 m = float2x2(0.0f);
-  float f = 0.0f;
-  int i = 0;
-  int j = 0;
-  int const x_36 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_36 == 1)) {
-    float const x_40 = f;
-    m = float2x2(float2(x_40, 0.0f), float2(0.0f, x_40));
-  }
-  int const x_45 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  i = x_45;
-  while (true) {
-    int const x_50 = i;
-    int const x_52 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    int const x_56 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    j = x_56;
-    while (true) {
-      int const x_61 = j;
-      int const x_63 = x_5.x_GLF_uniform_int_values.arr[0].el;
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      int const x_66 = i;
-      int const x_67 = j;
-      int const x_68 = i;
-      int const x_70 = x_5.x_GLF_uniform_int_values.arr[0].el;
-      int const x_72 = j;
-      m[x_66][x_67] = float(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_68) * as_type<uint>(x_70)))) + as_type<uint>(x_72))));
-      {
-        int const x_76 = j;
-        j = as_type<int>((as_type<uint>(x_76) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_78 = i;
-      i = as_type<int>((as_type<uint>(x_78) + as_type<uint>(1)));
-    }
-  }
-  float2x2 const x_80 = m;
-  int const x_82 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_85 = x_5.x_GLF_uniform_int_values.arr[2].el;
-  int const x_88 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_91 = x_5.x_GLF_uniform_int_values.arr[3].el;
-  float2x2 const x_95 = float2x2(float2(float(x_82), float(x_85)), float2(float(x_88), float(x_91)));
-  if ((all((x_80[0u] == x_95[0u])) && all((x_80[1u] == x_95[1u])))) {
-    int const x_109 = x_5.x_GLF_uniform_int_values.arr[2].el;
-    int const x_112 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    int const x_115 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    int const x_118 = x_5.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_109), float(x_112), float(x_115), float(x_118));
-  } else {
-    int const x_122 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    float const x_123 = float(x_122);
-    *(tint_symbol_3) = float4(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e6793bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,221 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 148
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %23 = OpConstantNull %mat2v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %v2bool = OpTypeVector %bool 2
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-        %137 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %m = OpVariable %_ptr_Function_mat2v2float Function %23
-          %f = OpVariable %_ptr_Function_float Function %26
-          %i = OpVariable %_ptr_Function_int Function %29
-          %j = OpVariable %_ptr_Function_int Function %29
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %35 = OpLoad %int %34
-         %36 = OpIEqual %bool %35 %int_1
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %38
-         %39 = OpLabel
-         %40 = OpLoad %float %f
-         %42 = OpCompositeConstruct %v2float %40 %float_0
-         %43 = OpCompositeConstruct %v2float %float_0 %40
-         %44 = OpCompositeConstruct %mat2v2float %42 %43
-               OpStore %m %44
-               OpBranch %38
-         %38 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %46 = OpLoad %int %45
-               OpStore %i %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpSLessThan %bool %51 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpBranch %56
-         %58 = OpLabel
-               OpBranch %48
-         %56 = OpLabel
-         %59 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %60 = OpLoad %int %59
-               OpStore %j %60
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %65 = OpLoad %int %j
-         %66 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %65 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-               OpBranch %69
-         %71 = OpLabel
-               OpBranch %62
-         %69 = OpLabel
-         %72 = OpLoad %int %i
-         %73 = OpLoad %int %j
-         %74 = OpLoad %int %i
-         %75 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpLoad %int %j
-         %78 = OpAccessChain %_ptr_Function_float %m %72 %73
-         %80 = OpIMul %int %74 %76
-         %81 = OpIAdd %int %80 %77
-         %79 = OpConvertSToF %float %81
-               OpStore %78 %79
-               OpBranch %63
-         %63 = OpLabel
-         %82 = OpLoad %int %j
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %j %83
-               OpBranch %61
-         %62 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %i %85
-               OpBranch %47
-         %48 = OpLabel
-         %86 = OpLoad %mat2v2float %m
-         %87 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %90 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-         %91 = OpLoad %int %90
-         %92 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %95 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_3
-         %96 = OpLoad %int %95
-         %97 = OpConvertSToF %float %88
-         %98 = OpConvertSToF %float %91
-         %99 = OpCompositeConstruct %v2float %97 %98
-        %100 = OpConvertSToF %float %93
-        %101 = OpConvertSToF %float %96
-        %102 = OpCompositeConstruct %v2float %100 %101
-        %103 = OpCompositeConstruct %mat2v2float %99 %102
-        %105 = OpCompositeExtract %v2float %86 0
-        %106 = OpCompositeExtract %v2float %103 0
-        %107 = OpFOrdEqual %v2bool %105 %106
-        %104 = OpAll %bool %107
-               OpSelectionMerge %109 None
-               OpBranchConditional %104 %110 %109
-        %110 = OpLabel
-        %113 = OpCompositeExtract %v2float %86 1
-        %114 = OpCompositeExtract %v2float %103 1
-        %115 = OpFOrdEqual %v2bool %113 %114
-        %111 = OpAll %bool %115
-               OpBranch %109
-        %109 = OpLabel
-        %116 = OpPhi %bool %104 %48 %111 %110
-               OpSelectionMerge %117 None
-               OpBranchConditional %116 %118 %119
-        %118 = OpLabel
-        %120 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-        %123 = OpLoad %int %122
-        %124 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-        %125 = OpLoad %int %124
-        %126 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-        %127 = OpLoad %int %126
-        %128 = OpConvertSToF %float %121
-        %129 = OpConvertSToF %float %123
-        %130 = OpConvertSToF %float %125
-        %131 = OpConvertSToF %float %127
-        %132 = OpCompositeConstruct %v4float %128 %129 %130 %131
-               OpStore %x_GLF_color %132
-               OpBranch %117
-        %119 = OpLabel
-        %133 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-        %134 = OpLoad %int %133
-        %135 = OpConvertSToF %float %134
-        %136 = OpCompositeConstruct %v4float %135 %135 %135 %135
-               OpStore %x_GLF_color %136
-               OpBranch %117
-        %117 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %137
-        %140 = OpLabel
-        %141 = OpFunctionCall %void %main_1
-        %142 = OpLoad %v4float %x_GLF_color
-        %143 = OpCompositeConstruct %main_out %142
-               OpReturnValue %143
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %145 = OpLabel
-        %146 = OpFunctionCall %main_out %main_inner
-        %147 = OpCompositeExtract %v4float %146 0
-               OpStore %x_GLF_color_1_1 %147
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3ad4f9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-reinitialize-matrix-after-undefined-value/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,87 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat2x2<f32>;
-  var f : f32;
-  var i : i32;
-  var j : i32;
-  let x_36 : i32 = x_5.x_GLF_uniform_int_values[1];
-  if ((x_36 == 1)) {
-    let x_40 : f32 = f;
-    m = mat2x2<f32>(vec2<f32>(x_40, 0.0), vec2<f32>(0.0, x_40));
-  }
-  let x_45 : i32 = x_5.x_GLF_uniform_int_values[1];
-  i = x_45;
-  loop {
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_5.x_GLF_uniform_int_values[0];
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    let x_56 : i32 = x_5.x_GLF_uniform_int_values[1];
-    j = x_56;
-    loop {
-      let x_61 : i32 = j;
-      let x_63 : i32 = x_5.x_GLF_uniform_int_values[0];
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      let x_66 : i32 = i;
-      let x_67 : i32 = j;
-      let x_68 : i32 = i;
-      let x_70 : i32 = x_5.x_GLF_uniform_int_values[0];
-      let x_72 : i32 = j;
-      m[x_66][x_67] = f32(((x_68 * x_70) + x_72));
-
-      continuing {
-        let x_76 : i32 = j;
-        j = (x_76 + 1);
-      }
-    }
-
-    continuing {
-      let x_78 : i32 = i;
-      i = (x_78 + 1);
-    }
-  }
-  let x_80 : mat2x2<f32> = m;
-  let x_82 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_85 : i32 = x_5.x_GLF_uniform_int_values[2];
-  let x_88 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_91 : i32 = x_5.x_GLF_uniform_int_values[3];
-  let x_95 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(f32(x_82), f32(x_85)), vec2<f32>(f32(x_88), f32(x_91)));
-  if ((all((x_80[0u] == x_95[0u])) && all((x_80[1u] == x_95[1u])))) {
-    let x_109 : i32 = x_5.x_GLF_uniform_int_values[2];
-    let x_112 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_115 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_118 : i32 = x_5.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_109), f32(x_112), f32(x_115), f32(x_118));
-  } else {
-    let x_122 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_123 : f32 = f32(x_122);
-    x_GLF_color = vec4<f32>(x_123, x_123, x_123, x_123);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e3bbf2a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-struct S {
-  int data;
-};
-
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_struct_S_i11_i1_(inout S s, inout int x) {
-  const int x_17 = s.data;
-  if ((x_17 == 1)) {
-    const int x_18 = x;
-    const int x_19 = s.data;
-    return (x_18 + x_19);
-  } else {
-    const int x_21 = x;
-    return x_21;
-  }
-  return 0;
-}
-
-void main_1() {
-  int a = 0;
-  S arr[1] = (S[1])0;
-  int i = 0;
-  S param = (S)0;
-  int param_1 = 0;
-  S param_2 = (S)0;
-  int param_3 = 0;
-  a = 0;
-  const int x_22 = asint(x_11[0].x);
-  arr[0].data = x_22;
-  i = 0;
-  while (true) {
-    const int x_23 = i;
-    const int x_24 = asint(x_11[0].x);
-    if ((x_23 < (5 + x_24))) {
-    } else {
-      break;
-    }
-    if (((i % 2) != 0)) {
-      const S x_74 = arr[0];
-      param = x_74;
-      param_1 = i;
-      const int x_29 = func_struct_S_i11_i1_(param, param_1);
-      arr[0] = param;
-      a = x_29;
-    } else {
-      const S x_78 = arr[0];
-      param_2 = x_78;
-      param_3 = 1;
-      const int x_30 = func_struct_S_i11_i1_(param_2, param_3);
-      arr[0] = param_2;
-      a = x_30;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  if ((a == 6)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0376e59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int data;
-};
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper {
-  S arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_struct_S_i11_i1_(thread S* const s, thread int* const x) {
-  int const x_17 = (*(s)).data;
-  if ((x_17 == 1)) {
-    int const x_18 = *(x);
-    int const x_19 = (*(s)).data;
-    return as_type<int>((as_type<uint>(x_18) + as_type<uint>(x_19)));
-  } else {
-    int const x_21 = *(x);
-    return x_21;
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_11, thread float4* const tint_symbol_3) {
-  int a = 0;
-  tint_array_wrapper arr = {};
-  int i = 0;
-  S param = {};
-  int param_1 = 0;
-  S param_2 = {};
-  int param_3 = 0;
-  a = 0;
-  int const x_22 = x_11.one;
-  arr.arr[0].data = x_22;
-  i = 0;
-  while (true) {
-    int const x_23 = i;
-    int const x_24 = x_11.one;
-    if ((x_23 < as_type<int>((as_type<uint>(5) + as_type<uint>(x_24))))) {
-    } else {
-      break;
-    }
-    int const x_26 = i;
-    if (((x_26 % 2) != 0)) {
-      S const x_74 = arr.arr[0];
-      param = x_74;
-      int const x_28 = i;
-      param_1 = x_28;
-      int const x_29 = func_struct_S_i11_i1_(&(param), &(param_1));
-      S const x_75 = param;
-      arr.arr[0] = x_75;
-      a = x_29;
-    } else {
-      S const x_78 = arr.arr[0];
-      param_2 = x_78;
-      param_3 = 1;
-      int const x_30 = func_struct_S_i11_i1_(&(param_2), &(param_3));
-      S const x_79 = param_2;
-      arr.arr[0] = x_79;
-      a = x_30;
-    }
-    {
-      int const x_31 = i;
-      i = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-    }
-  }
-  int const x_33 = a;
-  if ((x_33 == 6)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_11, thread float4* const tint_symbol_4) {
-  main_1(x_11, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_11 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_11, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 07421fe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,194 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 119
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "data"
-               OpName %func_struct_S_i11_i1_ "func_struct_S_i11_i1_"
-               OpName %s "s"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %arr "arr"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_S_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-          %S = OpTypeStruct %int
-%_ptr_Function_S = OpTypePointer Function %S
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %int %_ptr_Function_S %_ptr_Function_int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %40 = OpTypeFunction %void
-         %45 = OpConstantNull %int
-     %uint_1 = OpConstant %uint 1
-%_arr_S_uint_1 = OpTypeArray %S %uint_1
-%_ptr_Function__arr_S_uint_1 = OpTypePointer Function %_arr_S_uint_1
-         %50 = OpConstantNull %_arr_S_uint_1
-         %53 = OpConstantNull %S
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %106 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %107 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %108 = OpTypeFunction %main_out
-%func_struct_S_i11_i1_ = OpFunction %int None %12
-          %s = OpFunctionParameter %_ptr_Function_S
-          %x = OpFunctionParameter %_ptr_Function_int
-         %19 = OpLabel
-         %23 = OpAccessChain %_ptr_Function_int %s %uint_0
-         %24 = OpLoad %int %23
-         %26 = OpIEqual %bool %24 %int_1
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-         %32 = OpLoad %int %x
-         %34 = OpAccessChain %_ptr_Function_int %s %uint_0
-         %35 = OpLoad %int %34
-         %36 = OpIAdd %int %32 %35
-               OpReturnValue %36
-         %30 = OpLabel
-         %38 = OpLoad %int %x
-               OpReturnValue %38
-         %28 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %40
-         %43 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %45
-        %arr = OpVariable %_ptr_Function__arr_S_uint_1 Function %50
-          %i = OpVariable %_ptr_Function_int Function %45
-      %param = OpVariable %_ptr_Function_S Function %53
-    %param_1 = OpVariable %_ptr_Function_int Function %45
-    %param_2 = OpVariable %_ptr_Function_S Function %53
-    %param_3 = OpVariable %_ptr_Function_int Function %45
-               OpStore %a %int_0
-         %58 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Function_int %arr %int_0 %uint_0
-               OpStore %60 %59
-               OpStore %i %int_0
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %65 = OpLoad %int %i
-         %66 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0
-         %67 = OpLoad %int %66
-         %69 = OpIAdd %int %int_5 %67
-         %70 = OpSLessThan %bool %65 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %62
-         %71 = OpLabel
-         %74 = OpLoad %int %i
-         %76 = OpSMod %int %74 %int_2
-         %77 = OpINotEqual %bool %76 %int_0
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpAccessChain %_ptr_Function_S %arr %int_0
-         %82 = OpLoad %S %81
-               OpStore %param %82
-         %83 = OpLoad %int %i
-               OpStore %param_1 %83
-         %84 = OpFunctionCall %int %func_struct_S_i11_i1_ %param %param_1
-         %87 = OpLoad %S %param
-         %88 = OpAccessChain %_ptr_Function_S %arr %int_0
-               OpStore %88 %87
-               OpStore %a %84
-               OpBranch %78
-         %80 = OpLabel
-         %89 = OpAccessChain %_ptr_Function_S %arr %int_0
-         %90 = OpLoad %S %89
-               OpStore %param_2 %90
-               OpStore %param_3 %int_1
-         %91 = OpFunctionCall %int %func_struct_S_i11_i1_ %param_2 %param_3
-         %94 = OpLoad %S %param_2
-         %95 = OpAccessChain %_ptr_Function_S %arr %int_0
-               OpStore %95 %94
-               OpStore %a %91
-               OpBranch %78
-         %78 = OpLabel
-               OpBranch %63
-         %63 = OpLabel
-         %96 = OpLoad %int %i
-         %97 = OpIAdd %int %96 %int_1
-               OpStore %i %97
-               OpBranch %61
-         %62 = OpLabel
-         %98 = OpLoad %int %a
-        %100 = OpIEqual %bool %98 %int_6
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-               OpStore %x_GLF_color %106
-               OpBranch %101
-        %103 = OpLabel
-               OpStore %x_GLF_color %107
-               OpBranch %101
-        %101 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %108
-        %111 = OpLabel
-        %112 = OpFunctionCall %void %main_1
-        %113 = OpLoad %v4float %x_GLF_color
-        %114 = OpCompositeConstruct %main_out %113
-               OpReturnValue %114
-               OpFunctionEnd
-       %main = OpFunction %void None %40
-        %116 = OpLabel
-        %117 = OpFunctionCall %main_out %main_inner
-        %118 = OpCompositeExtract %v4float %117 0
-               OpStore %x_GLF_color_1_1 %118
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3eef414..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,89 +0,0 @@
-struct S {
-  data : i32;
-};
-
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i11_i1_(s : ptr<function, S>, x : ptr<function, i32>) -> i32 {
-  let x_17 : i32 = (*(s)).data;
-  if ((x_17 == 1)) {
-    let x_18 : i32 = *(x);
-    let x_19 : i32 = (*(s)).data;
-    return (x_18 + x_19);
-  } else {
-    let x_21 : i32 = *(x);
-    return x_21;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var a : i32;
-  var arr : array<S, 1>;
-  var i : i32;
-  var param : S;
-  var param_1 : i32;
-  var param_2 : S;
-  var param_3 : i32;
-  a = 0;
-  let x_22 : i32 = x_11.one;
-  arr[0].data = x_22;
-  i = 0;
-  loop {
-    let x_23 : i32 = i;
-    let x_24 : i32 = x_11.one;
-    if ((x_23 < (5 + x_24))) {
-    } else {
-      break;
-    }
-    let x_26 : i32 = i;
-    if (((x_26 % 2) != 0)) {
-      let x_74 : S = arr[0];
-      param = x_74;
-      let x_28 : i32 = i;
-      param_1 = x_28;
-      let x_29 : i32 = func_struct_S_i11_i1_(&(param), &(param_1));
-      let x_75 : S = param;
-      arr[0] = x_75;
-      a = x_29;
-    } else {
-      let x_78 : S = arr[0];
-      param_2 = x_78;
-      param_3 = 1;
-      let x_30 : i32 = func_struct_S_i11_i1_(&(param_2), &(param_3));
-      let x_79 : S = param_2;
-      arr[0] = x_79;
-      a = x_30;
-    }
-
-    continuing {
-      let x_31 : i32 = i;
-      i = (x_31 + 1);
-    }
-  }
-  let x_33 : i32 = a;
-  if ((x_33 == 6)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e3bbf2a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-struct S {
-  int data;
-};
-
-cbuffer cbuffer_x_11 : register(b0, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_struct_S_i11_i1_(inout S s, inout int x) {
-  const int x_17 = s.data;
-  if ((x_17 == 1)) {
-    const int x_18 = x;
-    const int x_19 = s.data;
-    return (x_18 + x_19);
-  } else {
-    const int x_21 = x;
-    return x_21;
-  }
-  return 0;
-}
-
-void main_1() {
-  int a = 0;
-  S arr[1] = (S[1])0;
-  int i = 0;
-  S param = (S)0;
-  int param_1 = 0;
-  S param_2 = (S)0;
-  int param_3 = 0;
-  a = 0;
-  const int x_22 = asint(x_11[0].x);
-  arr[0].data = x_22;
-  i = 0;
-  while (true) {
-    const int x_23 = i;
-    const int x_24 = asint(x_11[0].x);
-    if ((x_23 < (5 + x_24))) {
-    } else {
-      break;
-    }
-    if (((i % 2) != 0)) {
-      const S x_74 = arr[0];
-      param = x_74;
-      param_1 = i;
-      const int x_29 = func_struct_S_i11_i1_(param, param_1);
-      arr[0] = param;
-      a = x_29;
-    } else {
-      const S x_78 = arr[0];
-      param_2 = x_78;
-      param_3 = 1;
-      const int x_30 = func_struct_S_i11_i1_(param_2, param_3);
-      arr[0] = param_2;
-      a = x_30;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  if ((a == 6)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0376e59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int data;
-};
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct tint_array_wrapper {
-  S arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_struct_S_i11_i1_(thread S* const s, thread int* const x) {
-  int const x_17 = (*(s)).data;
-  if ((x_17 == 1)) {
-    int const x_18 = *(x);
-    int const x_19 = (*(s)).data;
-    return as_type<int>((as_type<uint>(x_18) + as_type<uint>(x_19)));
-  } else {
-    int const x_21 = *(x);
-    return x_21;
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_11, thread float4* const tint_symbol_3) {
-  int a = 0;
-  tint_array_wrapper arr = {};
-  int i = 0;
-  S param = {};
-  int param_1 = 0;
-  S param_2 = {};
-  int param_3 = 0;
-  a = 0;
-  int const x_22 = x_11.one;
-  arr.arr[0].data = x_22;
-  i = 0;
-  while (true) {
-    int const x_23 = i;
-    int const x_24 = x_11.one;
-    if ((x_23 < as_type<int>((as_type<uint>(5) + as_type<uint>(x_24))))) {
-    } else {
-      break;
-    }
-    int const x_26 = i;
-    if (((x_26 % 2) != 0)) {
-      S const x_74 = arr.arr[0];
-      param = x_74;
-      int const x_28 = i;
-      param_1 = x_28;
-      int const x_29 = func_struct_S_i11_i1_(&(param), &(param_1));
-      S const x_75 = param;
-      arr.arr[0] = x_75;
-      a = x_29;
-    } else {
-      S const x_78 = arr.arr[0];
-      param_2 = x_78;
-      param_3 = 1;
-      int const x_30 = func_struct_S_i11_i1_(&(param_2), &(param_3));
-      S const x_79 = param_2;
-      arr.arr[0] = x_79;
-      a = x_30;
-    }
-    {
-      int const x_31 = i;
-      i = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-    }
-  }
-  int const x_33 = a;
-  if ((x_33 == 6)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_11, thread float4* const tint_symbol_4) {
-  main_1(x_11, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_11 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_11, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 07421fe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,194 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 119
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "data"
-               OpName %func_struct_S_i11_i1_ "func_struct_S_i11_i1_"
-               OpName %s "s"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %arr "arr"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_S_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_11 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-          %S = OpTypeStruct %int
-%_ptr_Function_S = OpTypePointer Function %S
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %int %_ptr_Function_S %_ptr_Function_int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %40 = OpTypeFunction %void
-         %45 = OpConstantNull %int
-     %uint_1 = OpConstant %uint 1
-%_arr_S_uint_1 = OpTypeArray %S %uint_1
-%_ptr_Function__arr_S_uint_1 = OpTypePointer Function %_arr_S_uint_1
-         %50 = OpConstantNull %_arr_S_uint_1
-         %53 = OpConstantNull %S
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_5 = OpConstant %int 5
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %106 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %107 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %108 = OpTypeFunction %main_out
-%func_struct_S_i11_i1_ = OpFunction %int None %12
-          %s = OpFunctionParameter %_ptr_Function_S
-          %x = OpFunctionParameter %_ptr_Function_int
-         %19 = OpLabel
-         %23 = OpAccessChain %_ptr_Function_int %s %uint_0
-         %24 = OpLoad %int %23
-         %26 = OpIEqual %bool %24 %int_1
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-         %32 = OpLoad %int %x
-         %34 = OpAccessChain %_ptr_Function_int %s %uint_0
-         %35 = OpLoad %int %34
-         %36 = OpIAdd %int %32 %35
-               OpReturnValue %36
-         %30 = OpLabel
-         %38 = OpLoad %int %x
-               OpReturnValue %38
-         %28 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %40
-         %43 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %45
-        %arr = OpVariable %_ptr_Function__arr_S_uint_1 Function %50
-          %i = OpVariable %_ptr_Function_int Function %45
-      %param = OpVariable %_ptr_Function_S Function %53
-    %param_1 = OpVariable %_ptr_Function_int Function %45
-    %param_2 = OpVariable %_ptr_Function_S Function %53
-    %param_3 = OpVariable %_ptr_Function_int Function %45
-               OpStore %a %int_0
-         %58 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Function_int %arr %int_0 %uint_0
-               OpStore %60 %59
-               OpStore %i %int_0
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %65 = OpLoad %int %i
-         %66 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0
-         %67 = OpLoad %int %66
-         %69 = OpIAdd %int %int_5 %67
-         %70 = OpSLessThan %bool %65 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %62
-         %71 = OpLabel
-         %74 = OpLoad %int %i
-         %76 = OpSMod %int %74 %int_2
-         %77 = OpINotEqual %bool %76 %int_0
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpAccessChain %_ptr_Function_S %arr %int_0
-         %82 = OpLoad %S %81
-               OpStore %param %82
-         %83 = OpLoad %int %i
-               OpStore %param_1 %83
-         %84 = OpFunctionCall %int %func_struct_S_i11_i1_ %param %param_1
-         %87 = OpLoad %S %param
-         %88 = OpAccessChain %_ptr_Function_S %arr %int_0
-               OpStore %88 %87
-               OpStore %a %84
-               OpBranch %78
-         %80 = OpLabel
-         %89 = OpAccessChain %_ptr_Function_S %arr %int_0
-         %90 = OpLoad %S %89
-               OpStore %param_2 %90
-               OpStore %param_3 %int_1
-         %91 = OpFunctionCall %int %func_struct_S_i11_i1_ %param_2 %param_3
-         %94 = OpLoad %S %param_2
-         %95 = OpAccessChain %_ptr_Function_S %arr %int_0
-               OpStore %95 %94
-               OpStore %a %91
-               OpBranch %78
-         %78 = OpLabel
-               OpBranch %63
-         %63 = OpLabel
-         %96 = OpLoad %int %i
-         %97 = OpIAdd %int %96 %int_1
-               OpStore %i %97
-               OpBranch %61
-         %62 = OpLabel
-         %98 = OpLoad %int %a
-        %100 = OpIEqual %bool %98 %int_6
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-               OpStore %x_GLF_color %106
-               OpBranch %101
-        %103 = OpLabel
-               OpStore %x_GLF_color %107
-               OpBranch %101
-        %101 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %108
-        %111 = OpLabel
-        %112 = OpFunctionCall %void %main_1
-        %113 = OpLoad %v4float %x_GLF_color
-        %114 = OpCompositeConstruct %main_out %113
-               OpReturnValue %114
-               OpFunctionEnd
-       %main = OpFunction %void None %40
-        %116 = OpLabel
-        %117 = OpFunctionCall %main_out %main_inner
-        %118 = OpCompositeExtract %v4float %117 0
-               OpStore %x_GLF_color_1_1 %118
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3eef414..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-replace-copy-object/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,89 +0,0 @@
-struct S {
-  data : i32;
-};
-
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_11 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i11_i1_(s : ptr<function, S>, x : ptr<function, i32>) -> i32 {
-  let x_17 : i32 = (*(s)).data;
-  if ((x_17 == 1)) {
-    let x_18 : i32 = *(x);
-    let x_19 : i32 = (*(s)).data;
-    return (x_18 + x_19);
-  } else {
-    let x_21 : i32 = *(x);
-    return x_21;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var a : i32;
-  var arr : array<S, 1>;
-  var i : i32;
-  var param : S;
-  var param_1 : i32;
-  var param_2 : S;
-  var param_3 : i32;
-  a = 0;
-  let x_22 : i32 = x_11.one;
-  arr[0].data = x_22;
-  i = 0;
-  loop {
-    let x_23 : i32 = i;
-    let x_24 : i32 = x_11.one;
-    if ((x_23 < (5 + x_24))) {
-    } else {
-      break;
-    }
-    let x_26 : i32 = i;
-    if (((x_26 % 2) != 0)) {
-      let x_74 : S = arr[0];
-      param = x_74;
-      let x_28 : i32 = i;
-      param_1 = x_28;
-      let x_29 : i32 = func_struct_S_i11_i1_(&(param), &(param_1));
-      let x_75 : S = param;
-      arr[0] = x_75;
-      a = x_29;
-    } else {
-      let x_78 : S = arr[0];
-      param_2 = x_78;
-      param_3 = 1;
-      let x_30 : i32 = func_struct_S_i11_i1_(&(param_2), &(param_3));
-      let x_79 : S = param_2;
-      arr[0] = x_79;
-      a = x_30;
-    }
-
-    continuing {
-      let x_31 : i32 = i;
-      i = (x_31 + 1);
-    }
-  }
-  let x_33 : i32 = a;
-  if ((x_33 == 6)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 39916ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-SKIP: FAILED
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_22 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_25 = asint(x_5[1].x);
-  const int x_28 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_22), float(x_25), float(x_28), float(x_31));
-  const int x_35 = asint(x_5[1].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_35 > x_37)) {
-    while (true) {
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const int x_46 = asint(x_5[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const float x_47 = float(x_46);
-      x_GLF_color = float4(x_47, x_47, x_47, x_47);
-      {
-        const int x_50 = asint(x_5[1].x);
-        const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-        const int x_52 = asint(x_5[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-        if ((x_50 > x_52)) {
-        } else {
-          break;
-        }
-      }
-    }
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x000001F1857EF790(18,12-15): error X3696: infinite loop detected - loop never exits
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.msl
deleted file mode 100644
index e4be6c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_5, thread float4* const tint_symbol_3) {
-  int const x_22 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_25 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_28 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_31 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_22), float(x_25), float(x_28), float(x_31));
-  int const x_35 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_37 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_35 > x_37)) {
-    while (true) {
-      int const x_46 = x_5.x_GLF_uniform_int_values.arr[0].el;
-      float const x_47 = float(x_46);
-      *(tint_symbol_3) = float4(x_47, x_47, x_47, x_47);
-      {
-        int const x_50 = x_5.x_GLF_uniform_int_values.arr[1].el;
-        int const x_52 = x_5.x_GLF_uniform_int_values.arr[0].el;
-        if ((x_50 > x_52)) {
-        } else {
-          break;
-        }
-      }
-    }
-    return;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8694f3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_5 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %23 = OpLoad %int %22
-         %25 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %31 = OpConvertSToF %float %23
-         %32 = OpConvertSToF %float %26
-         %33 = OpConvertSToF %float %28
-         %34 = OpConvertSToF %float %30
-         %35 = OpCompositeConstruct %v4float %31 %32 %33 %34
-               OpStore %x_GLF_color %35
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpSGreaterThan %bool %37 %39
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpConvertSToF %float %49
-         %51 = OpCompositeConstruct %v4float %50 %50 %50 %50
-               OpStore %x_GLF_color %51
-               OpBranch %46
-         %46 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpSGreaterThan %bool %53 %55
-               OpBranchConditional %56 %44 %45
-         %45 = OpLabel
-               OpReturn
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3471958..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf1;
-
-fn main_1() {
-  let x_22 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_25 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_28 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_31 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_22), f32(x_25), f32(x_28), f32(x_31));
-  let x_35 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_37 : i32 = x_5.x_GLF_uniform_int_values[0];
-  if ((x_35 > x_37)) {
-    loop {
-      let x_46 : i32 = x_5.x_GLF_uniform_int_values[0];
-      let x_47 : f32 = f32(x_46);
-      x_GLF_color = vec4<f32>(x_47, x_47, x_47, x_47);
-
-      continuing {
-        let x_50 : i32 = x_5.x_GLF_uniform_int_values[1];
-        let x_52 : i32 = x_5.x_GLF_uniform_int_values[0];
-        if ((x_50 > x_52)) {
-        } else {
-          break;
-        }
-      }
-    }
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f277b37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-SKIP: FAILED
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_22 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_25 = asint(x_5[1].x);
-  const int x_28 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_22), float(x_25), float(x_28), float(x_31));
-  const int x_35 = asint(x_5[1].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_35 > x_37)) {
-    while (true) {
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const int x_46 = asint(x_5[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const float x_47 = float(x_46);
-      x_GLF_color = float4(x_47, x_47, x_47, x_47);
-      {
-        const int x_50 = asint(x_5[1].x);
-        const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-        const int x_52 = asint(x_5[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-        if ((x_50 > x_52)) {
-        } else {
-          break;
-        }
-      }
-    }
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x00000185C45B3230(18,12-15): error X3696: infinite loop detected - loop never exits
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.msl
deleted file mode 100644
index e4be6c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_5, thread float4* const tint_symbol_3) {
-  int const x_22 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_25 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_28 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_31 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_22), float(x_25), float(x_28), float(x_31));
-  int const x_35 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_37 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_35 > x_37)) {
-    while (true) {
-      int const x_46 = x_5.x_GLF_uniform_int_values.arr[0].el;
-      float const x_47 = float(x_46);
-      *(tint_symbol_3) = float4(x_47, x_47, x_47, x_47);
-      {
-        int const x_50 = x_5.x_GLF_uniform_int_values.arr[1].el;
-        int const x_52 = x_5.x_GLF_uniform_int_values.arr[0].el;
-        if ((x_50 > x_52)) {
-        } else {
-          break;
-        }
-      }
-    }
-    return;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8694f3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_5 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %23 = OpLoad %int %22
-         %25 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %31 = OpConvertSToF %float %23
-         %32 = OpConvertSToF %float %26
-         %33 = OpConvertSToF %float %28
-         %34 = OpConvertSToF %float %30
-         %35 = OpCompositeConstruct %v4float %31 %32 %33 %34
-               OpStore %x_GLF_color %35
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %39 = OpLoad %int %38
-         %40 = OpSGreaterThan %bool %37 %39
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %42
-         %43 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpConvertSToF %float %49
-         %51 = OpCompositeConstruct %v4float %50 %50 %50 %50
-               OpStore %x_GLF_color %51
-               OpBranch %46
-         %46 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpSGreaterThan %bool %53 %55
-               OpBranchConditional %56 %44 %45
-         %45 = OpLabel
-               OpReturn
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3471958..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-do-while/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf1;
-
-fn main_1() {
-  let x_22 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_25 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_28 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_31 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_22), f32(x_25), f32(x_28), f32(x_31));
-  let x_35 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_37 : i32 = x_5.x_GLF_uniform_int_values[0];
-  if ((x_35 > x_37)) {
-    loop {
-      let x_46 : i32 = x_5.x_GLF_uniform_int_values[0];
-      let x_47 : f32 = f32(x_46);
-      x_GLF_color = vec4<f32>(x_47, x_47, x_47, x_47);
-
-      continuing {
-        let x_50 : i32 = x_5.x_GLF_uniform_int_values[1];
-        let x_52 : i32 = x_5.x_GLF_uniform_int_values[0];
-        if ((x_50 > x_52)) {
-        } else {
-          break;
-        }
-      }
-    }
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 552bf5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_11 : register(b2, space0) {
-  uint4 x_11[1];
-};
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const int x_42 = asint(x_7[1].x);
-  i = x_42;
-  while (true) {
-    const int x_47 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_47 < x_49)) {
-    } else {
-      break;
-    }
-    const int x_52 = i;
-    const int x_54 = asint(x_7[1].x);
-    if ((x_52 != x_54)) {
-      return;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_61 = gl_FragCoord.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_63 = asfloat(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_61 < x_63)) {
-    return;
-  }
-  const float x_68 = asfloat(x_11[0].y);
-  x_GLF_color = float4(float3(1.0f, 1.0f, 1.0f).x, float3(1.0f, 1.0f, 1.0f).y, float3(1.0f, 1.0f, 1.0f).z, x_68);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.msl
deleted file mode 100644
index 86dcd7f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, constant buf2& x_11, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  int const x_42 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  i = x_42;
-  while (true) {
-    int const x_47 = i;
-    int const x_49 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_47 < x_49)) {
-    } else {
-      break;
-    }
-    int const x_52 = i;
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_52 != x_54)) {
-      return;
-    }
-    {
-      int const x_58 = i;
-      i = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-    }
-  }
-  float const x_61 = (*(tint_symbol_4)).y;
-  float const x_63 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_61 < x_63)) {
-    return;
-  }
-  float const x_68 = x_11.injectionSwitch.y;
-  *(tint_symbol_3) = float4(float3(1.0f, 1.0f, 1.0f).x, float3(1.0f, 1.0f, 1.0f).y, float3(1.0f, 1.0f, 1.0f).z, x_68);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, constant buf2& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_9, x_11, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]], constant buf2& x_11 [[buffer(2)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, x_11, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 76d5a1d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,168 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 93
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "injectionSwitch"
-               OpName %x_11 "x_11"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 2
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_11 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %v3float = OpTypeVector %float 3
-         %75 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %33
-               OpStore %x_GLF_color %36
-         %40 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %41 = OpLoad %int %40
-               OpStore %i %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %46 = OpLoad %int %i
-         %48 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpSLessThan %bool %46 %49
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %43
-         %52 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpINotEqual %bool %55 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpReturn
-         %59 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-         %61 = OpLoad %int %i
-         %62 = OpIAdd %int %61 %int_1
-               OpStore %i %62
-               OpBranch %42
-         %43 = OpLabel
-         %64 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %65 = OpLoad %float %64
-         %67 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %68 = OpLoad %float %67
-         %69 = OpFOrdLessThan %bool %65 %68
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-               OpReturn
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_1
-         %73 = OpLoad %float %72
-         %76 = OpCompositeExtract %float %75 0
-         %77 = OpCompositeExtract %float %75 1
-         %78 = OpCompositeExtract %float %75 2
-         %79 = OpCompositeConstruct %v4float %76 %77 %78 %73
-               OpStore %x_GLF_color %79
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %84 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %85 = OpFunctionCall %void %main_1
-         %86 = OpLoad %v4float %x_GLF_color
-         %87 = OpCompositeConstruct %main_out %86
-               OpReturnValue %87
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-         %89 = OpLabel
-         %91 = OpLoad %v4float %gl_FragCoord_param_1
-         %90 = OpFunctionCall %main_out %main_inner %91
-         %92 = OpCompositeExtract %v4float %90 0
-               OpStore %x_GLF_color_1_1 %92
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 444e50a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,73 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[block]]
-struct buf2 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_11 : buf2;
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
-  i = x_42;
-  loop {
-    let x_47 : i32 = i;
-    let x_49 : i32 = x_7.x_GLF_uniform_int_values[0];
-    if ((x_47 < x_49)) {
-    } else {
-      break;
-    }
-    let x_52 : i32 = i;
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
-    if ((x_52 != x_54)) {
-      return;
-    }
-
-    continuing {
-      let x_58 : i32 = i;
-      i = (x_58 + 1);
-    }
-  }
-  let x_61 : f32 = gl_FragCoord.y;
-  let x_63 : f32 = x_9.x_GLF_uniform_float_values[0];
-  if ((x_61 < x_63)) {
-    return;
-  }
-  let x_68 : f32 = x_11.injectionSwitch.y;
-  x_GLF_color = vec4<f32>(vec3<f32>(1.0, 1.0, 1.0).x, vec3<f32>(1.0, 1.0, 1.0).y, vec3<f32>(1.0, 1.0, 1.0).z, x_68);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 552bf5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_11 : register(b2, space0) {
-  uint4 x_11[1];
-};
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const int x_42 = asint(x_7[1].x);
-  i = x_42;
-  while (true) {
-    const int x_47 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_47 < x_49)) {
-    } else {
-      break;
-    }
-    const int x_52 = i;
-    const int x_54 = asint(x_7[1].x);
-    if ((x_52 != x_54)) {
-      return;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_61 = gl_FragCoord.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_63 = asfloat(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_61 < x_63)) {
-    return;
-  }
-  const float x_68 = asfloat(x_11[0].y);
-  x_GLF_color = float4(float3(1.0f, 1.0f, 1.0f).x, float3(1.0f, 1.0f, 1.0f).y, float3(1.0f, 1.0f, 1.0f).z, x_68);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.msl
deleted file mode 100644
index 86dcd7f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, constant buf2& x_11, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  int const x_42 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  i = x_42;
-  while (true) {
-    int const x_47 = i;
-    int const x_49 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_47 < x_49)) {
-    } else {
-      break;
-    }
-    int const x_52 = i;
-    int const x_54 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_52 != x_54)) {
-      return;
-    }
-    {
-      int const x_58 = i;
-      i = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-    }
-  }
-  float const x_61 = (*(tint_symbol_4)).y;
-  float const x_63 = x_9.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_61 < x_63)) {
-    return;
-  }
-  float const x_68 = x_11.injectionSwitch.y;
-  *(tint_symbol_3) = float4(float3(1.0f, 1.0f, 1.0f).x, float3(1.0f, 1.0f, 1.0f).y, float3(1.0f, 1.0f, 1.0f).z, x_68);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, constant buf2& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_9, x_11, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]], constant buf2& x_11 [[buffer(2)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, x_11, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 76d5a1d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,168 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 93
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_9 "x_9"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "injectionSwitch"
-               OpName %x_11 "x_11"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 2
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_11 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %v3float = OpTypeVector %float 3
-         %75 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %33
-               OpStore %x_GLF_color %36
-         %40 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %41 = OpLoad %int %40
-               OpStore %i %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %46 = OpLoad %int %i
-         %48 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpSLessThan %bool %46 %49
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %43
-         %52 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %57 = OpLoad %int %56
-         %58 = OpINotEqual %bool %55 %57
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpReturn
-         %59 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-         %61 = OpLoad %int %i
-         %62 = OpIAdd %int %61 %int_1
-               OpStore %i %62
-               OpBranch %42
-         %43 = OpLabel
-         %64 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %65 = OpLoad %float %64
-         %67 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %int_0
-         %68 = OpLoad %float %67
-         %69 = OpFOrdLessThan %bool %65 %68
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-               OpReturn
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_1
-         %73 = OpLoad %float %72
-         %76 = OpCompositeExtract %float %75 0
-         %77 = OpCompositeExtract %float %75 1
-         %78 = OpCompositeExtract %float %75 2
-         %79 = OpCompositeConstruct %v4float %76 %77 %78 %73
-               OpStore %x_GLF_color %79
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %84 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %85 = OpFunctionCall %void %main_1
-         %86 = OpLoad %v4float %x_GLF_color
-         %87 = OpCompositeConstruct %main_out %86
-               OpReturnValue %87
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-         %89 = OpLabel
-         %91 = OpLoad %v4float %gl_FragCoord_param_1
-         %90 = OpFunctionCall %main_out %main_inner %91
-         %92 = OpCompositeExtract %v4float %90 0
-               OpStore %x_GLF_color_1_1 %92
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 444e50a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-after-first-iteration/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,73 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[block]]
-struct buf2 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-[[group(0), binding(2)]] var<uniform> x_11 : buf2;
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
-  i = x_42;
-  loop {
-    let x_47 : i32 = i;
-    let x_49 : i32 = x_7.x_GLF_uniform_int_values[0];
-    if ((x_47 < x_49)) {
-    } else {
-      break;
-    }
-    let x_52 : i32 = i;
-    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
-    if ((x_52 != x_54)) {
-      return;
-    }
-
-    continuing {
-      let x_58 : i32 = i;
-      i = (x_58 + 1);
-    }
-  }
-  let x_61 : f32 = gl_FragCoord.y;
-  let x_63 : f32 = x_9.x_GLF_uniform_float_values[0];
-  if ((x_61 < x_63)) {
-    return;
-  }
-  let x_68 : f32 = x_11.injectionSwitch.y;
-  x_GLF_color = vec4<f32>(vec3<f32>(1.0, 1.0, 1.0).x, vec3<f32>(1.0, 1.0, 1.0).y, vec3<f32>(1.0, 1.0, 1.0).z, x_68);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index aac269b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[2];
-};
-
-float2 func_() {
-  float2 v = float2(0.0f, 0.0f);
-  int a = 0;
-  float2 indexable[3] = (float2[3])0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_67 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  v.y = x_67;
-  a = 2;
-  const float x_70 = asfloat(x_7[1].x);
-  const float x_73 = asfloat(x_7[1].x);
-  const int x_77 = a;
-  const float2 tint_symbol_3[3] = {float2(x_70, x_70), float2(x_73, x_73), v};
-  indexable = tint_symbol_3;
-  const float2 x_79 = indexable[x_77];
-  return x_79;
-}
-
-void main_1() {
-  const float2 x_40 = func_();
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_43 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_40.y == x_43)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_52 = asint(x_11[1].x);
-    const int x_55 = asint(x_11[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_58 = asint(x_11[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_49), float(x_52), float(x_55), float(x_58));
-  } else {
-    const int x_62 = asint(x_11[1].x);
-    const float x_63 = float(x_62);
-    x_GLF_color = float4(x_63, x_63, x_63, x_63);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.msl
deleted file mode 100644
index e36fd59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float2 arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float2 func_(constant buf0& x_7) {
-  float2 v = 0.0f;
-  int a = 0;
-  tint_array_wrapper_2 indexable = {};
-  float const x_67 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  v.y = x_67;
-  a = 2;
-  float const x_70 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_73 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float2 const x_75 = v;
-  int const x_77 = a;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={float2(x_70, x_70), float2(x_73, x_73), x_75}};
-  indexable = tint_symbol_2;
-  float2 const x_79 = indexable.arr[x_77];
-  return x_79;
-}
-
-void main_1(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_4) {
-  float2 const x_40 = func_(x_7);
-  float const x_43 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_40.y == x_43)) {
-    int const x_49 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_55 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_58 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_49), float(x_52), float(x_55), float(x_58));
-  } else {
-    int const x_62 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    float const x_63 = float(x_62);
-    *(tint_symbol_4) = float4(x_63, x_63, x_63, x_63);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_5) {
-  main_1(x_7, x_11, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 41c408c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,155 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 97
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %func_ "func_"
-               OpName %v "v"
-               OpName %a "a"
-               OpName %indexable "indexable"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpDecorate %_arr_v2float_uint_3 ArrayStride 8
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-    %v2float = OpTypeVector %float 2
-         %19 = OpTypeFunction %v2float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %25 = OpConstantNull %v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_3 = OpConstant %uint 3
-%_arr_v2float_uint_3 = OpTypeArray %v2float %uint_3
-%_ptr_Function__arr_v2float_uint_3 = OpTypePointer Function %_arr_v2float_uint_3
-         %33 = OpConstantNull %_arr_v2float_uint_3
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %55 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %86 = OpTypeFunction %main_out
-      %func_ = OpFunction %v2float None %19
-         %22 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %25
-          %a = OpVariable %_ptr_Function_int Function %28
-  %indexable = OpVariable %_ptr_Function__arr_v2float_uint_3 Function %33
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %41 = OpAccessChain %_ptr_Function_float %v %uint_1
-               OpStore %41 %38
-               OpStore %a %int_2
-         %44 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %45 = OpLoad %float %44
-         %46 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %47 = OpLoad %float %46
-         %48 = OpLoad %v2float %v
-         %49 = OpLoad %int %a
-         %50 = OpCompositeConstruct %v2float %45 %45
-         %51 = OpCompositeConstruct %v2float %47 %47
-         %52 = OpCompositeConstruct %_arr_v2float_uint_3 %50 %51 %48
-               OpStore %indexable %52
-         %53 = OpAccessChain %_ptr_Function_v2float %indexable %49
-         %54 = OpLoad %v2float %53
-               OpReturnValue %54
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %v2float %func_
-         %60 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpCompositeExtract %float %59 1
-         %63 = OpFOrdEqual %bool %62 %61
-               OpSelectionMerge %65 None
-               OpBranchConditional %63 %66 %67
-         %66 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %70
-         %78 = OpConvertSToF %float %72
-         %79 = OpConvertSToF %float %74
-         %80 = OpConvertSToF %float %76
-         %81 = OpCompositeConstruct %v4float %77 %78 %79 %80
-               OpStore %x_GLF_color %81
-               OpBranch %65
-         %67 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpConvertSToF %float %83
-         %85 = OpCompositeConstruct %v4float %84 %84 %84 %84
-               OpStore %x_GLF_color %85
-               OpBranch %65
-         %65 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %86
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %55
-         %94 = OpLabel
-         %95 = OpFunctionCall %main_out %main_inner
-         %96 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %96
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6a66f39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-fn func_() -> vec2<f32> {
-  var v : vec2<f32>;
-  var a : i32;
-  var indexable : array<vec2<f32>, 3>;
-  let x_67 : f32 = x_7.x_GLF_uniform_float_values[0];
-  v.y = x_67;
-  a = 2;
-  let x_70 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_73 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_75 : vec2<f32> = v;
-  let x_77 : i32 = a;
-  indexable = array<vec2<f32>, 3>(vec2<f32>(x_70, x_70), vec2<f32>(x_73, x_73), x_75);
-  let x_79 : vec2<f32> = indexable[x_77];
-  return x_79;
-}
-
-fn main_1() {
-  let x_40 : vec2<f32> = func_();
-  let x_43 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_40.y == x_43)) {
-    let x_49 : i32 = x_11.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_55 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_58 : i32 = x_11.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_49), f32(x_52), f32(x_55), f32(x_58));
-  } else {
-    let x_62 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_63 : f32 = f32(x_62);
-    x_GLF_color = vec4<f32>(x_63, x_63, x_63, x_63);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index aac269b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[2];
-};
-
-float2 func_() {
-  float2 v = float2(0.0f, 0.0f);
-  int a = 0;
-  float2 indexable[3] = (float2[3])0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_67 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  v.y = x_67;
-  a = 2;
-  const float x_70 = asfloat(x_7[1].x);
-  const float x_73 = asfloat(x_7[1].x);
-  const int x_77 = a;
-  const float2 tint_symbol_3[3] = {float2(x_70, x_70), float2(x_73, x_73), v};
-  indexable = tint_symbol_3;
-  const float2 x_79 = indexable[x_77];
-  return x_79;
-}
-
-void main_1() {
-  const float2 x_40 = func_();
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_43 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_40.y == x_43)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_49 = asint(x_11[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_52 = asint(x_11[1].x);
-    const int x_55 = asint(x_11[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_58 = asint(x_11[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_49), float(x_52), float(x_55), float(x_58));
-  } else {
-    const int x_62 = asint(x_11[1].x);
-    const float x_63 = float(x_62);
-    x_GLF_color = float4(x_63, x_63, x_63, x_63);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.msl
deleted file mode 100644
index e36fd59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float2 arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float2 func_(constant buf0& x_7) {
-  float2 v = 0.0f;
-  int a = 0;
-  tint_array_wrapper_2 indexable = {};
-  float const x_67 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  v.y = x_67;
-  a = 2;
-  float const x_70 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_73 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float2 const x_75 = v;
-  int const x_77 = a;
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={float2(x_70, x_70), float2(x_73, x_73), x_75}};
-  indexable = tint_symbol_2;
-  float2 const x_79 = indexable.arr[x_77];
-  return x_79;
-}
-
-void main_1(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_4) {
-  float2 const x_40 = func_(x_7);
-  float const x_43 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_40.y == x_43)) {
-    int const x_49 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    int const x_52 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_55 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    int const x_58 = x_11.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_49), float(x_52), float(x_55), float(x_58));
-  } else {
-    int const x_62 = x_11.x_GLF_uniform_int_values.arr[1].el;
-    float const x_63 = float(x_62);
-    *(tint_symbol_4) = float4(x_63, x_63, x_63, x_63);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_5) {
-  main_1(x_7, x_11, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 41c408c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,155 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 97
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_11 "x_11"
-               OpName %func_ "func_"
-               OpName %v "v"
-               OpName %a "a"
-               OpName %indexable "indexable"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpDecorate %_arr_v2float_uint_3 ArrayStride 8
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-    %v2float = OpTypeVector %float 2
-         %19 = OpTypeFunction %v2float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %25 = OpConstantNull %v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_3 = OpConstant %uint 3
-%_arr_v2float_uint_3 = OpTypeArray %v2float %uint_3
-%_ptr_Function__arr_v2float_uint_3 = OpTypePointer Function %_arr_v2float_uint_3
-         %33 = OpConstantNull %_arr_v2float_uint_3
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %55 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %86 = OpTypeFunction %main_out
-      %func_ = OpFunction %v2float None %19
-         %22 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %25
-          %a = OpVariable %_ptr_Function_int Function %28
-  %indexable = OpVariable %_ptr_Function__arr_v2float_uint_3 Function %33
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %41 = OpAccessChain %_ptr_Function_float %v %uint_1
-               OpStore %41 %38
-               OpStore %a %int_2
-         %44 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %45 = OpLoad %float %44
-         %46 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %47 = OpLoad %float %46
-         %48 = OpLoad %v2float %v
-         %49 = OpLoad %int %a
-         %50 = OpCompositeConstruct %v2float %45 %45
-         %51 = OpCompositeConstruct %v2float %47 %47
-         %52 = OpCompositeConstruct %_arr_v2float_uint_3 %50 %51 %48
-               OpStore %indexable %52
-         %53 = OpAccessChain %_ptr_Function_v2float %indexable %49
-         %54 = OpLoad %v2float %53
-               OpReturnValue %54
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %v2float %func_
-         %60 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpCompositeExtract %float %59 1
-         %63 = OpFOrdEqual %bool %62 %61
-               OpSelectionMerge %65 None
-               OpBranchConditional %63 %66 %67
-         %66 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_0
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %70
-         %78 = OpConvertSToF %float %72
-         %79 = OpConvertSToF %float %74
-         %80 = OpConvertSToF %float %76
-         %81 = OpCompositeConstruct %v4float %77 %78 %79 %80
-               OpStore %x_GLF_color %81
-               OpBranch %65
-         %67 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_int %x_11 %uint_0 %int_1
-         %83 = OpLoad %int %82
-         %84 = OpConvertSToF %float %83
-         %85 = OpCompositeConstruct %v4float %84 %84 %84 %84
-               OpStore %x_GLF_color %85
-               OpBranch %65
-         %65 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %86
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %55
-         %94 = OpLabel
-         %95 = OpFunctionCall %main_out %main_inner
-         %96 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %96
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6a66f39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-return-partly-undefined-vector-from-array/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-fn func_() -> vec2<f32> {
-  var v : vec2<f32>;
-  var a : i32;
-  var indexable : array<vec2<f32>, 3>;
-  let x_67 : f32 = x_7.x_GLF_uniform_float_values[0];
-  v.y = x_67;
-  a = 2;
-  let x_70 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_73 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_75 : vec2<f32> = v;
-  let x_77 : i32 = a;
-  indexable = array<vec2<f32>, 3>(vec2<f32>(x_70, x_70), vec2<f32>(x_73, x_73), x_75);
-  let x_79 : vec2<f32> = indexable[x_77];
-  return x_79;
-}
-
-fn main_1() {
-  let x_40 : vec2<f32> = func_();
-  let x_43 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_40.y == x_43)) {
-    let x_49 : i32 = x_11.x_GLF_uniform_int_values[0];
-    let x_52 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_55 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_58 : i32 = x_11.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_49), f32(x_52), f32(x_55), f32(x_58));
-  } else {
-    let x_62 : i32 = x_11.x_GLF_uniform_int_values[1];
-    let x_63 : f32 = f32(x_62);
-    x_GLF_color = vec4<f32>(x_63, x_63, x_63, x_63);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 027b703..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,214 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[7];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float sums[2] = (float[2])0;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int d = 0;
-  int e = 0;
-  int f = 0;
-  int g = 0;
-  int h = 0;
-  int i = 0;
-  int j = 0;
-  bool x_215 = false;
-  bool x_216_phi = false;
-  const int x_20 = asint(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_110 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  sums[x_20] = x_110;
-  const int x_22 = asint(x_6[2].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_114 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  sums[x_22] = x_114;
-  const int x_23 = asint(x_6[1].x);
-  a = x_23;
-  while (true) {
-    const int x_24 = a;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_25 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_24 < x_25)) {
-    } else {
-      break;
-    }
-    const int x_26 = asint(x_6[5].x);
-    b = x_26;
-    while (true) {
-      const int x_27 = b;
-      const int x_28 = asint(x_6[3].x);
-      if ((x_27 < x_28)) {
-      } else {
-        break;
-      }
-      const int x_29 = asint(x_6[6].x);
-      c = x_29;
-      while (true) {
-        const int x_30 = c;
-        const int x_31 = asint(x_6[4].x);
-        if ((x_30 <= x_31)) {
-        } else {
-          break;
-        }
-        const int x_32 = asint(x_6[1].x);
-        d = x_32;
-        while (true) {
-          const int x_33 = d;
-          const int x_34 = asint(x_6[6].x);
-          if ((x_33 < x_34)) {
-          } else {
-            break;
-          }
-          const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-          const int x_35 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-          e = x_35;
-          while (true) {
-            const int x_36 = e;
-            const int x_37 = asint(x_6[4].x);
-            if ((x_36 <= x_37)) {
-            } else {
-              break;
-            }
-            const int x_38 = asint(x_6[1].x);
-            f = x_38;
-            while (true) {
-              const int x_39 = f;
-              const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-              const int x_40 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-              if ((x_39 < x_40)) {
-              } else {
-                break;
-              }
-              const int x_41 = asint(x_6[1].x);
-              g = x_41;
-              while (true) {
-                const int x_42 = g;
-                const int x_43 = asint(x_6[6].x);
-                if ((x_42 < x_43)) {
-                } else {
-                  break;
-                }
-                const int x_44 = asint(x_6[1].x);
-                h = x_44;
-                while (true) {
-                  const int x_45 = h;
-                  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-                  const int x_46 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-                  if ((x_45 < x_46)) {
-                  } else {
-                    break;
-                  }
-                  const int x_47 = asint(x_6[1].x);
-                  i = x_47;
-                  while (true) {
-                    const int x_48 = i;
-                    const int x_49 = asint(x_6[4].x);
-                    if ((x_48 < x_49)) {
-                    } else {
-                      break;
-                    }
-                    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-                    const int x_50 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-                    j = x_50;
-                    while (true) {
-                      const int x_51 = j;
-                      const int x_52 = asint(x_6[1].x);
-                      if ((x_51 > x_52)) {
-                      } else {
-                        break;
-                      }
-                      const int x_53 = a;
-                      const float x_197 = asfloat(x_8[2].x);
-                      const float x_199 = sums[x_53];
-                      sums[x_53] = (x_199 + x_197);
-                      {
-                        j = (j - 1);
-                      }
-                    }
-                    {
-                      i = (i + 1);
-                    }
-                  }
-                  {
-                    h = (h + 1);
-                  }
-                }
-                {
-                  g = (g + 1);
-                }
-              }
-              {
-                f = (f + 1);
-              }
-            }
-            {
-              e = (e + 1);
-            }
-          }
-          {
-            d = (d + 1);
-          }
-        }
-        {
-          c = (c + 1);
-        }
-      }
-      {
-        b = (b + 1);
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const int x_74 = asint(x_6[1].x);
-  const float x_204 = sums[x_74];
-  const float x_206 = asfloat(x_8[1].x);
-  const bool x_207 = (x_204 == x_206);
-  x_216_phi = x_207;
-  if (x_207) {
-    const int x_75 = asint(x_6[2].x);
-    const float x_212 = sums[x_75];
-    const float x_214 = asfloat(x_8[1].x);
-    x_215 = (x_212 == x_214);
-    x_216_phi = x_215;
-  }
-  if (x_216_phi) {
-    const int x_76 = asint(x_6[2].x);
-    const int x_77 = asint(x_6[1].x);
-    const int x_78 = asint(x_6[1].x);
-    const int x_79 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_76), float(x_77), float(x_78), float(x_79));
-  } else {
-    const int x_80 = asint(x_6[1].x);
-    const float x_230 = float(x_80);
-    x_GLF_color = float4(x_230, x_230, x_230, x_230);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.msl
deleted file mode 100644
index a2b94a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,238 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[7];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 sums = {};
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int d = 0;
-  int e = 0;
-  int f = 0;
-  int g = 0;
-  int h = 0;
-  int i = 0;
-  int j = 0;
-  bool x_215 = false;
-  bool x_216_phi = false;
-  int const x_20 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_110 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  sums.arr[x_20] = x_110;
-  int const x_22 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_114 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  sums.arr[x_22] = x_114;
-  int const x_23 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_23;
-  while (true) {
-    int const x_24 = a;
-    int const x_25 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_24 < x_25)) {
-    } else {
-      break;
-    }
-    int const x_26 = x_6.x_GLF_uniform_int_values.arr[5].el;
-    b = x_26;
-    while (true) {
-      int const x_27 = b;
-      int const x_28 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      if ((x_27 < x_28)) {
-      } else {
-        break;
-      }
-      int const x_29 = x_6.x_GLF_uniform_int_values.arr[6].el;
-      c = x_29;
-      while (true) {
-        int const x_30 = c;
-        int const x_31 = x_6.x_GLF_uniform_int_values.arr[4].el;
-        if ((x_30 <= x_31)) {
-        } else {
-          break;
-        }
-        int const x_32 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        d = x_32;
-        while (true) {
-          int const x_33 = d;
-          int const x_34 = x_6.x_GLF_uniform_int_values.arr[6].el;
-          if ((x_33 < x_34)) {
-          } else {
-            break;
-          }
-          int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-          e = x_35;
-          while (true) {
-            int const x_36 = e;
-            int const x_37 = x_6.x_GLF_uniform_int_values.arr[4].el;
-            if ((x_36 <= x_37)) {
-            } else {
-              break;
-            }
-            int const x_38 = x_6.x_GLF_uniform_int_values.arr[1].el;
-            f = x_38;
-            while (true) {
-              int const x_39 = f;
-              int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-              if ((x_39 < x_40)) {
-              } else {
-                break;
-              }
-              int const x_41 = x_6.x_GLF_uniform_int_values.arr[1].el;
-              g = x_41;
-              while (true) {
-                int const x_42 = g;
-                int const x_43 = x_6.x_GLF_uniform_int_values.arr[6].el;
-                if ((x_42 < x_43)) {
-                } else {
-                  break;
-                }
-                int const x_44 = x_6.x_GLF_uniform_int_values.arr[1].el;
-                h = x_44;
-                while (true) {
-                  int const x_45 = h;
-                  int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-                  if ((x_45 < x_46)) {
-                  } else {
-                    break;
-                  }
-                  int const x_47 = x_6.x_GLF_uniform_int_values.arr[1].el;
-                  i = x_47;
-                  while (true) {
-                    int const x_48 = i;
-                    int const x_49 = x_6.x_GLF_uniform_int_values.arr[4].el;
-                    if ((x_48 < x_49)) {
-                    } else {
-                      break;
-                    }
-                    int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-                    j = x_50;
-                    while (true) {
-                      int const x_51 = j;
-                      int const x_52 = x_6.x_GLF_uniform_int_values.arr[1].el;
-                      if ((x_51 > x_52)) {
-                      } else {
-                        break;
-                      }
-                      int const x_53 = a;
-                      float const x_197 = x_8.x_GLF_uniform_float_values.arr[2].el;
-                      float const x_199 = sums.arr[x_53];
-                      sums.arr[x_53] = (x_199 + x_197);
-                      {
-                        int const x_54 = j;
-                        j = as_type<int>((as_type<uint>(x_54) - as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_56 = i;
-                      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_58 = h;
-                    h = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_60 = g;
-                  g = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_62 = f;
-                f = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_64 = e;
-              e = as_type<int>((as_type<uint>(x_64) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_66 = d;
-            d = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_68 = c;
-          c = as_type<int>((as_type<uint>(x_68) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_70 = b;
-        b = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_72 = a;
-      a = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-    }
-  }
-  int const x_74 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_204 = sums.arr[x_74];
-  float const x_206 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  bool const x_207 = (x_204 == x_206);
-  x_216_phi = x_207;
-  if (x_207) {
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_212 = sums.arr[x_75];
-    float const x_214 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    x_215 = (x_212 == x_214);
-    x_216_phi = x_215;
-  }
-  bool const x_216 = x_216_phi;
-  if (x_216) {
-    int const x_76 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_79 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_76), float(x_77), float(x_78), float(x_79));
-  } else {
-    int const x_80 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_230 = float(x_80);
-    *(tint_symbol_3) = float4(x_230, x_230, x_230, x_230);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1a14698..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,454 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 273
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %sums "sums"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %e "e"
-               OpName %f "f"
-               OpName %g "g"
-               OpName %h "h"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %x_215 "x_215"
-               OpName %x_216_phi "x_216_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_7 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_7 = OpConstant %uint 7
-%_arr_int_uint_7 = OpTypeArray %int %uint_7
-       %buf0 = OpTypeStruct %_arr_int_uint_7
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
-         %28 = OpConstantNull %_arr_float_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %44 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-      %int_5 = OpConstant %int 5
-      %int_3 = OpConstant %int 3
-      %int_6 = OpConstant %int 6
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %262 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-       %sums = OpVariable %_ptr_Function__arr_float_uint_2 Function %28
-          %a = OpVariable %_ptr_Function_int Function %31
-          %b = OpVariable %_ptr_Function_int Function %31
-          %c = OpVariable %_ptr_Function_int Function %31
-          %d = OpVariable %_ptr_Function_int Function %31
-          %e = OpVariable %_ptr_Function_int Function %31
-          %f = OpVariable %_ptr_Function_int Function %31
-          %g = OpVariable %_ptr_Function_int Function %31
-          %h = OpVariable %_ptr_Function_int Function %31
-          %i = OpVariable %_ptr_Function_int Function %31
-          %j = OpVariable %_ptr_Function_int Function %31
-      %x_215 = OpVariable %_ptr_Function_bool Function %44
-  %x_216_phi = OpVariable %_ptr_Function_bool Function %44
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %56 = OpAccessChain %_ptr_Function_float %sums %50
-               OpStore %56 %54
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Function_float %sums %59
-               OpStore %62 %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-               OpStore %a %64
-               OpBranch %65
-         %65 = OpLabel
-               OpLoopMerge %66 %67 None
-               OpBranch %68
-         %68 = OpLabel
-         %69 = OpLoad %int %a
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpSLessThan %bool %69 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-               OpBranch %66
-         %73 = OpLabel
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %78 = OpLoad %int %77
-               OpStore %b %78
-               OpBranch %79
-         %79 = OpLabel
-               OpLoopMerge %80 %81 None
-               OpBranch %82
-         %82 = OpLabel
-         %83 = OpLoad %int %b
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %86 = OpLoad %int %85
-         %87 = OpSLessThan %bool %83 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-               OpBranch %88
-         %90 = OpLabel
-               OpBranch %80
-         %88 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-         %93 = OpLoad %int %92
-               OpStore %c %93
-               OpBranch %94
-         %94 = OpLabel
-               OpLoopMerge %95 %96 None
-               OpBranch %97
-         %97 = OpLabel
-         %98 = OpLoad %int %c
-        %100 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %101 = OpLoad %int %100
-        %102 = OpSLessThanEqual %bool %98 %101
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-               OpBranch %103
-        %105 = OpLabel
-               OpBranch %95
-        %103 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %107 = OpLoad %int %106
-               OpStore %d %107
-               OpBranch %108
-        %108 = OpLabel
-               OpLoopMerge %109 %110 None
-               OpBranch %111
-        %111 = OpLabel
-        %112 = OpLoad %int %d
-        %113 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %114 = OpLoad %int %113
-        %115 = OpSLessThan %bool %112 %114
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-               OpBranch %116
-        %118 = OpLabel
-               OpBranch %109
-        %116 = OpLabel
-        %119 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %120 = OpLoad %int %119
-               OpStore %e %120
-               OpBranch %121
-        %121 = OpLabel
-               OpLoopMerge %122 %123 None
-               OpBranch %124
-        %124 = OpLabel
-        %125 = OpLoad %int %e
-        %126 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %127 = OpLoad %int %126
-        %128 = OpSLessThanEqual %bool %125 %127
-               OpSelectionMerge %129 None
-               OpBranchConditional %128 %130 %131
-        %130 = OpLabel
-               OpBranch %129
-        %131 = OpLabel
-               OpBranch %122
-        %129 = OpLabel
-        %132 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %133 = OpLoad %int %132
-               OpStore %f %133
-               OpBranch %134
-        %134 = OpLabel
-               OpLoopMerge %135 %136 None
-               OpBranch %137
-        %137 = OpLabel
-        %138 = OpLoad %int %f
-        %139 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %140 = OpLoad %int %139
-        %141 = OpSLessThan %bool %138 %140
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %144
-        %143 = OpLabel
-               OpBranch %142
-        %144 = OpLabel
-               OpBranch %135
-        %142 = OpLabel
-        %145 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %146 = OpLoad %int %145
-               OpStore %g %146
-               OpBranch %147
-        %147 = OpLabel
-               OpLoopMerge %148 %149 None
-               OpBranch %150
-        %150 = OpLabel
-        %151 = OpLoad %int %g
-        %152 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %153 = OpLoad %int %152
-        %154 = OpSLessThan %bool %151 %153
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-               OpBranch %155
-        %157 = OpLabel
-               OpBranch %148
-        %155 = OpLabel
-        %158 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %159 = OpLoad %int %158
-               OpStore %h %159
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %164 = OpLoad %int %h
-        %165 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %164 %166
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %161
-        %168 = OpLabel
-        %171 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %172 = OpLoad %int %171
-               OpStore %i %172
-               OpBranch %173
-        %173 = OpLabel
-               OpLoopMerge %174 %175 None
-               OpBranch %176
-        %176 = OpLabel
-        %177 = OpLoad %int %i
-        %178 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %179 = OpLoad %int %178
-        %180 = OpSLessThan %bool %177 %179
-               OpSelectionMerge %181 None
-               OpBranchConditional %180 %182 %183
-        %182 = OpLabel
-               OpBranch %181
-        %183 = OpLabel
-               OpBranch %174
-        %181 = OpLabel
-        %184 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %185 = OpLoad %int %184
-               OpStore %j %185
-               OpBranch %186
-        %186 = OpLabel
-               OpLoopMerge %187 %188 None
-               OpBranch %189
-        %189 = OpLabel
-        %190 = OpLoad %int %j
-        %191 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %192 = OpLoad %int %191
-        %193 = OpSGreaterThan %bool %190 %192
-               OpSelectionMerge %194 None
-               OpBranchConditional %193 %195 %196
-        %195 = OpLabel
-               OpBranch %194
-        %196 = OpLabel
-               OpBranch %187
-        %194 = OpLabel
-        %197 = OpLoad %int %a
-        %198 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %199 = OpLoad %float %198
-        %200 = OpAccessChain %_ptr_Function_float %sums %197
-        %201 = OpLoad %float %200
-        %202 = OpAccessChain %_ptr_Function_float %sums %197
-        %203 = OpFAdd %float %201 %199
-               OpStore %202 %203
-               OpBranch %188
-        %188 = OpLabel
-        %204 = OpLoad %int %j
-        %205 = OpISub %int %204 %int_1
-               OpStore %j %205
-               OpBranch %186
-        %187 = OpLabel
-               OpBranch %175
-        %175 = OpLabel
-        %206 = OpLoad %int %i
-        %207 = OpIAdd %int %206 %int_1
-               OpStore %i %207
-               OpBranch %173
-        %174 = OpLabel
-               OpBranch %162
-        %162 = OpLabel
-        %208 = OpLoad %int %h
-        %209 = OpIAdd %int %208 %int_1
-               OpStore %h %209
-               OpBranch %160
-        %161 = OpLabel
-               OpBranch %149
-        %149 = OpLabel
-        %210 = OpLoad %int %g
-        %211 = OpIAdd %int %210 %int_1
-               OpStore %g %211
-               OpBranch %147
-        %148 = OpLabel
-               OpBranch %136
-        %136 = OpLabel
-        %212 = OpLoad %int %f
-        %213 = OpIAdd %int %212 %int_1
-               OpStore %f %213
-               OpBranch %134
-        %135 = OpLabel
-               OpBranch %123
-        %123 = OpLabel
-        %214 = OpLoad %int %e
-        %215 = OpIAdd %int %214 %int_1
-               OpStore %e %215
-               OpBranch %121
-        %122 = OpLabel
-               OpBranch %110
-        %110 = OpLabel
-        %216 = OpLoad %int %d
-        %217 = OpIAdd %int %216 %int_1
-               OpStore %d %217
-               OpBranch %108
-        %109 = OpLabel
-               OpBranch %96
-         %96 = OpLabel
-        %218 = OpLoad %int %c
-        %219 = OpIAdd %int %218 %int_1
-               OpStore %c %219
-               OpBranch %94
-         %95 = OpLabel
-               OpBranch %81
-         %81 = OpLabel
-        %220 = OpLoad %int %b
-        %221 = OpIAdd %int %220 %int_1
-               OpStore %b %221
-               OpBranch %79
-         %80 = OpLabel
-               OpBranch %67
-         %67 = OpLabel
-        %222 = OpLoad %int %a
-        %223 = OpIAdd %int %222 %int_1
-               OpStore %a %223
-               OpBranch %65
-         %66 = OpLabel
-        %224 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %225 = OpLoad %int %224
-        %226 = OpAccessChain %_ptr_Function_float %sums %225
-        %227 = OpLoad %float %226
-        %228 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %229 = OpLoad %float %228
-        %230 = OpFOrdEqual %bool %227 %229
-               OpStore %x_216_phi %230
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %231
-        %232 = OpLabel
-        %233 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %234 = OpLoad %int %233
-        %235 = OpAccessChain %_ptr_Function_float %sums %234
-        %236 = OpLoad %float %235
-        %237 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %238 = OpLoad %float %237
-        %239 = OpFOrdEqual %bool %236 %238
-               OpStore %x_215 %239
-        %240 = OpLoad %bool %x_215
-               OpStore %x_216_phi %240
-               OpBranch %231
-        %231 = OpLabel
-        %241 = OpLoad %bool %x_216_phi
-               OpSelectionMerge %242 None
-               OpBranchConditional %241 %243 %244
-        %243 = OpLabel
-        %245 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %246 = OpLoad %int %245
-        %247 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %248 = OpLoad %int %247
-        %249 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %250 = OpLoad %int %249
-        %251 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %252 = OpLoad %int %251
-        %253 = OpConvertSToF %float %246
-        %254 = OpConvertSToF %float %248
-        %255 = OpConvertSToF %float %250
-        %256 = OpConvertSToF %float %252
-        %257 = OpCompositeConstruct %v4float %253 %254 %255 %256
-               OpStore %x_GLF_color %257
-               OpBranch %242
-        %244 = OpLabel
-        %258 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %259 = OpLoad %int %258
-        %260 = OpConvertSToF %float %259
-        %261 = OpCompositeConstruct %v4float %260 %260 %260 %260
-               OpStore %x_GLF_color %261
-               OpBranch %242
-        %242 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %262
-        %265 = OpLabel
-        %266 = OpFunctionCall %void %main_1
-        %267 = OpLoad %v4float %x_GLF_color
-        %268 = OpCompositeConstruct %main_out %267
-               OpReturnValue %268
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %270 = OpLabel
-        %271 = OpFunctionCall %main_out %main_inner
-        %272 = OpCompositeExtract %v4float %271 0
-               OpStore %x_GLF_color_1_1 %272
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3235625..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,231 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 7>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var sums : array<f32, 2>;
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var d : i32;
-  var e : i32;
-  var f : i32;
-  var g : i32;
-  var h : i32;
-  var i : i32;
-  var j : i32;
-  var x_215 : bool;
-  var x_216_phi : bool;
-  let x_20 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_110 : f32 = x_8.x_GLF_uniform_float_values[0];
-  sums[x_20] = x_110;
-  let x_22 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_114 : f32 = x_8.x_GLF_uniform_float_values[0];
-  sums[x_22] = x_114;
-  let x_23 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_23;
-  loop {
-    let x_24 : i32 = a;
-    let x_25 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_24 < x_25)) {
-    } else {
-      break;
-    }
-    let x_26 : i32 = x_6.x_GLF_uniform_int_values[5];
-    b = x_26;
-    loop {
-      let x_27 : i32 = b;
-      let x_28 : i32 = x_6.x_GLF_uniform_int_values[3];
-      if ((x_27 < x_28)) {
-      } else {
-        break;
-      }
-      let x_29 : i32 = x_6.x_GLF_uniform_int_values[6];
-      c = x_29;
-      loop {
-        let x_30 : i32 = c;
-        let x_31 : i32 = x_6.x_GLF_uniform_int_values[4];
-        if ((x_30 <= x_31)) {
-        } else {
-          break;
-        }
-        let x_32 : i32 = x_6.x_GLF_uniform_int_values[1];
-        d = x_32;
-        loop {
-          let x_33 : i32 = d;
-          let x_34 : i32 = x_6.x_GLF_uniform_int_values[6];
-          if ((x_33 < x_34)) {
-          } else {
-            break;
-          }
-          let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-          e = x_35;
-          loop {
-            let x_36 : i32 = e;
-            let x_37 : i32 = x_6.x_GLF_uniform_int_values[4];
-            if ((x_36 <= x_37)) {
-            } else {
-              break;
-            }
-            let x_38 : i32 = x_6.x_GLF_uniform_int_values[1];
-            f = x_38;
-            loop {
-              let x_39 : i32 = f;
-              let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-              if ((x_39 < x_40)) {
-              } else {
-                break;
-              }
-              let x_41 : i32 = x_6.x_GLF_uniform_int_values[1];
-              g = x_41;
-              loop {
-                let x_42 : i32 = g;
-                let x_43 : i32 = x_6.x_GLF_uniform_int_values[6];
-                if ((x_42 < x_43)) {
-                } else {
-                  break;
-                }
-                let x_44 : i32 = x_6.x_GLF_uniform_int_values[1];
-                h = x_44;
-                loop {
-                  let x_45 : i32 = h;
-                  let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-                  if ((x_45 < x_46)) {
-                  } else {
-                    break;
-                  }
-                  let x_47 : i32 = x_6.x_GLF_uniform_int_values[1];
-                  i = x_47;
-                  loop {
-                    let x_48 : i32 = i;
-                    let x_49 : i32 = x_6.x_GLF_uniform_int_values[4];
-                    if ((x_48 < x_49)) {
-                    } else {
-                      break;
-                    }
-                    let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-                    j = x_50;
-                    loop {
-                      let x_51 : i32 = j;
-                      let x_52 : i32 = x_6.x_GLF_uniform_int_values[1];
-                      if ((x_51 > x_52)) {
-                      } else {
-                        break;
-                      }
-                      let x_53 : i32 = a;
-                      let x_197 : f32 = x_8.x_GLF_uniform_float_values[2];
-                      let x_199 : f32 = sums[x_53];
-                      sums[x_53] = (x_199 + x_197);
-
-                      continuing {
-                        let x_54 : i32 = j;
-                        j = (x_54 - 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_56 : i32 = i;
-                      i = (x_56 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_58 : i32 = h;
-                    h = (x_58 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_60 : i32 = g;
-                  g = (x_60 + 1);
-                }
-              }
-
-              continuing {
-                let x_62 : i32 = f;
-                f = (x_62 + 1);
-              }
-            }
-
-            continuing {
-              let x_64 : i32 = e;
-              e = (x_64 + 1);
-            }
-          }
-
-          continuing {
-            let x_66 : i32 = d;
-            d = (x_66 + 1);
-          }
-        }
-
-        continuing {
-          let x_68 : i32 = c;
-          c = (x_68 + 1);
-        }
-      }
-
-      continuing {
-        let x_70 : i32 = b;
-        b = (x_70 + 1);
-      }
-    }
-
-    continuing {
-      let x_72 : i32 = a;
-      a = (x_72 + 1);
-    }
-  }
-  let x_74 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_204 : f32 = sums[x_74];
-  let x_206 : f32 = x_8.x_GLF_uniform_float_values[1];
-  let x_207 : bool = (x_204 == x_206);
-  x_216_phi = x_207;
-  if (x_207) {
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_212 : f32 = sums[x_75];
-    let x_214 : f32 = x_8.x_GLF_uniform_float_values[1];
-    x_215 = (x_212 == x_214);
-    x_216_phi = x_215;
-  }
-  let x_216 : bool = x_216_phi;
-  if (x_216) {
-    let x_76 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_79 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_76), f32(x_77), f32(x_78), f32(x_79));
-  } else {
-    let x_80 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_230 : f32 = f32(x_80);
-    x_GLF_color = vec4<f32>(x_230, x_230, x_230, x_230);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 027b703..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,214 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[7];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float sums[2] = (float[2])0;
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int d = 0;
-  int e = 0;
-  int f = 0;
-  int g = 0;
-  int h = 0;
-  int i = 0;
-  int j = 0;
-  bool x_215 = false;
-  bool x_216_phi = false;
-  const int x_20 = asint(x_6[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_110 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-  sums[x_20] = x_110;
-  const int x_22 = asint(x_6[2].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_114 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  sums[x_22] = x_114;
-  const int x_23 = asint(x_6[1].x);
-  a = x_23;
-  while (true) {
-    const int x_24 = a;
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_25 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if ((x_24 < x_25)) {
-    } else {
-      break;
-    }
-    const int x_26 = asint(x_6[5].x);
-    b = x_26;
-    while (true) {
-      const int x_27 = b;
-      const int x_28 = asint(x_6[3].x);
-      if ((x_27 < x_28)) {
-      } else {
-        break;
-      }
-      const int x_29 = asint(x_6[6].x);
-      c = x_29;
-      while (true) {
-        const int x_30 = c;
-        const int x_31 = asint(x_6[4].x);
-        if ((x_30 <= x_31)) {
-        } else {
-          break;
-        }
-        const int x_32 = asint(x_6[1].x);
-        d = x_32;
-        while (true) {
-          const int x_33 = d;
-          const int x_34 = asint(x_6[6].x);
-          if ((x_33 < x_34)) {
-          } else {
-            break;
-          }
-          const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-          const int x_35 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-          e = x_35;
-          while (true) {
-            const int x_36 = e;
-            const int x_37 = asint(x_6[4].x);
-            if ((x_36 <= x_37)) {
-            } else {
-              break;
-            }
-            const int x_38 = asint(x_6[1].x);
-            f = x_38;
-            while (true) {
-              const int x_39 = f;
-              const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-              const int x_40 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-              if ((x_39 < x_40)) {
-              } else {
-                break;
-              }
-              const int x_41 = asint(x_6[1].x);
-              g = x_41;
-              while (true) {
-                const int x_42 = g;
-                const int x_43 = asint(x_6[6].x);
-                if ((x_42 < x_43)) {
-                } else {
-                  break;
-                }
-                const int x_44 = asint(x_6[1].x);
-                h = x_44;
-                while (true) {
-                  const int x_45 = h;
-                  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-                  const int x_46 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-                  if ((x_45 < x_46)) {
-                  } else {
-                    break;
-                  }
-                  const int x_47 = asint(x_6[1].x);
-                  i = x_47;
-                  while (true) {
-                    const int x_48 = i;
-                    const int x_49 = asint(x_6[4].x);
-                    if ((x_48 < x_49)) {
-                    } else {
-                      break;
-                    }
-                    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-                    const int x_50 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-                    j = x_50;
-                    while (true) {
-                      const int x_51 = j;
-                      const int x_52 = asint(x_6[1].x);
-                      if ((x_51 > x_52)) {
-                      } else {
-                        break;
-                      }
-                      const int x_53 = a;
-                      const float x_197 = asfloat(x_8[2].x);
-                      const float x_199 = sums[x_53];
-                      sums[x_53] = (x_199 + x_197);
-                      {
-                        j = (j - 1);
-                      }
-                    }
-                    {
-                      i = (i + 1);
-                    }
-                  }
-                  {
-                    h = (h + 1);
-                  }
-                }
-                {
-                  g = (g + 1);
-                }
-              }
-              {
-                f = (f + 1);
-              }
-            }
-            {
-              e = (e + 1);
-            }
-          }
-          {
-            d = (d + 1);
-          }
-        }
-        {
-          c = (c + 1);
-        }
-      }
-      {
-        b = (b + 1);
-      }
-    }
-    {
-      a = (a + 1);
-    }
-  }
-  const int x_74 = asint(x_6[1].x);
-  const float x_204 = sums[x_74];
-  const float x_206 = asfloat(x_8[1].x);
-  const bool x_207 = (x_204 == x_206);
-  x_216_phi = x_207;
-  if (x_207) {
-    const int x_75 = asint(x_6[2].x);
-    const float x_212 = sums[x_75];
-    const float x_214 = asfloat(x_8[1].x);
-    x_215 = (x_212 == x_214);
-    x_216_phi = x_215;
-  }
-  if (x_216_phi) {
-    const int x_76 = asint(x_6[2].x);
-    const int x_77 = asint(x_6[1].x);
-    const int x_78 = asint(x_6[1].x);
-    const int x_79 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_76), float(x_77), float(x_78), float(x_79));
-  } else {
-    const int x_80 = asint(x_6[1].x);
-    const float x_230 = float(x_80);
-    x_GLF_color = float4(x_230, x_230, x_230, x_230);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.msl
deleted file mode 100644
index a2b94a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,238 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[7];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 sums = {};
-  int a = 0;
-  int b = 0;
-  int c = 0;
-  int d = 0;
-  int e = 0;
-  int f = 0;
-  int g = 0;
-  int h = 0;
-  int i = 0;
-  int j = 0;
-  bool x_215 = false;
-  bool x_216_phi = false;
-  int const x_20 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_110 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  sums.arr[x_20] = x_110;
-  int const x_22 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  float const x_114 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  sums.arr[x_22] = x_114;
-  int const x_23 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_23;
-  while (true) {
-    int const x_24 = a;
-    int const x_25 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_24 < x_25)) {
-    } else {
-      break;
-    }
-    int const x_26 = x_6.x_GLF_uniform_int_values.arr[5].el;
-    b = x_26;
-    while (true) {
-      int const x_27 = b;
-      int const x_28 = x_6.x_GLF_uniform_int_values.arr[3].el;
-      if ((x_27 < x_28)) {
-      } else {
-        break;
-      }
-      int const x_29 = x_6.x_GLF_uniform_int_values.arr[6].el;
-      c = x_29;
-      while (true) {
-        int const x_30 = c;
-        int const x_31 = x_6.x_GLF_uniform_int_values.arr[4].el;
-        if ((x_30 <= x_31)) {
-        } else {
-          break;
-        }
-        int const x_32 = x_6.x_GLF_uniform_int_values.arr[1].el;
-        d = x_32;
-        while (true) {
-          int const x_33 = d;
-          int const x_34 = x_6.x_GLF_uniform_int_values.arr[6].el;
-          if ((x_33 < x_34)) {
-          } else {
-            break;
-          }
-          int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-          e = x_35;
-          while (true) {
-            int const x_36 = e;
-            int const x_37 = x_6.x_GLF_uniform_int_values.arr[4].el;
-            if ((x_36 <= x_37)) {
-            } else {
-              break;
-            }
-            int const x_38 = x_6.x_GLF_uniform_int_values.arr[1].el;
-            f = x_38;
-            while (true) {
-              int const x_39 = f;
-              int const x_40 = x_6.x_GLF_uniform_int_values.arr[0].el;
-              if ((x_39 < x_40)) {
-              } else {
-                break;
-              }
-              int const x_41 = x_6.x_GLF_uniform_int_values.arr[1].el;
-              g = x_41;
-              while (true) {
-                int const x_42 = g;
-                int const x_43 = x_6.x_GLF_uniform_int_values.arr[6].el;
-                if ((x_42 < x_43)) {
-                } else {
-                  break;
-                }
-                int const x_44 = x_6.x_GLF_uniform_int_values.arr[1].el;
-                h = x_44;
-                while (true) {
-                  int const x_45 = h;
-                  int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-                  if ((x_45 < x_46)) {
-                  } else {
-                    break;
-                  }
-                  int const x_47 = x_6.x_GLF_uniform_int_values.arr[1].el;
-                  i = x_47;
-                  while (true) {
-                    int const x_48 = i;
-                    int const x_49 = x_6.x_GLF_uniform_int_values.arr[4].el;
-                    if ((x_48 < x_49)) {
-                    } else {
-                      break;
-                    }
-                    int const x_50 = x_6.x_GLF_uniform_int_values.arr[0].el;
-                    j = x_50;
-                    while (true) {
-                      int const x_51 = j;
-                      int const x_52 = x_6.x_GLF_uniform_int_values.arr[1].el;
-                      if ((x_51 > x_52)) {
-                      } else {
-                        break;
-                      }
-                      int const x_53 = a;
-                      float const x_197 = x_8.x_GLF_uniform_float_values.arr[2].el;
-                      float const x_199 = sums.arr[x_53];
-                      sums.arr[x_53] = (x_199 + x_197);
-                      {
-                        int const x_54 = j;
-                        j = as_type<int>((as_type<uint>(x_54) - as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_56 = i;
-                      i = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_58 = h;
-                    h = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-                  }
-                }
-                {
-                  int const x_60 = g;
-                  g = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_62 = f;
-                f = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_64 = e;
-              e = as_type<int>((as_type<uint>(x_64) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_66 = d;
-            d = as_type<int>((as_type<uint>(x_66) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_68 = c;
-          c = as_type<int>((as_type<uint>(x_68) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_70 = b;
-        b = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_72 = a;
-      a = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-    }
-  }
-  int const x_74 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_204 = sums.arr[x_74];
-  float const x_206 = x_8.x_GLF_uniform_float_values.arr[1].el;
-  bool const x_207 = (x_204 == x_206);
-  x_216_phi = x_207;
-  if (x_207) {
-    int const x_75 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_212 = sums.arr[x_75];
-    float const x_214 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    x_215 = (x_212 == x_214);
-    x_216_phi = x_215;
-  }
-  bool const x_216 = x_216_phi;
-  if (x_216) {
-    int const x_76 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_79 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_76), float(x_77), float(x_78), float(x_79));
-  } else {
-    int const x_80 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_230 = float(x_80);
-    *(tint_symbol_3) = float4(x_230, x_230, x_230, x_230);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1a14698..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,454 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 273
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %sums "sums"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %e "e"
-               OpName %f "f"
-               OpName %g "g"
-               OpName %h "h"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %x_215 "x_215"
-               OpName %x_216_phi "x_216_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_7 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_7 = OpConstant %uint 7
-%_arr_int_uint_7 = OpTypeArray %int %uint_7
-       %buf0 = OpTypeStruct %_arr_int_uint_7
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
-         %28 = OpConstantNull %_arr_float_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %44 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-      %int_5 = OpConstant %int 5
-      %int_3 = OpConstant %int 3
-      %int_6 = OpConstant %int 6
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %262 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-       %sums = OpVariable %_ptr_Function__arr_float_uint_2 Function %28
-          %a = OpVariable %_ptr_Function_int Function %31
-          %b = OpVariable %_ptr_Function_int Function %31
-          %c = OpVariable %_ptr_Function_int Function %31
-          %d = OpVariable %_ptr_Function_int Function %31
-          %e = OpVariable %_ptr_Function_int Function %31
-          %f = OpVariable %_ptr_Function_int Function %31
-          %g = OpVariable %_ptr_Function_int Function %31
-          %h = OpVariable %_ptr_Function_int Function %31
-          %i = OpVariable %_ptr_Function_int Function %31
-          %j = OpVariable %_ptr_Function_int Function %31
-      %x_215 = OpVariable %_ptr_Function_bool Function %44
-  %x_216_phi = OpVariable %_ptr_Function_bool Function %44
-         %49 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %54 = OpLoad %float %53
-         %56 = OpAccessChain %_ptr_Function_float %sums %50
-               OpStore %56 %54
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Function_float %sums %59
-               OpStore %62 %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-               OpStore %a %64
-               OpBranch %65
-         %65 = OpLabel
-               OpLoopMerge %66 %67 None
-               OpBranch %68
-         %68 = OpLabel
-         %69 = OpLoad %int %a
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %71 = OpLoad %int %70
-         %72 = OpSLessThan %bool %69 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-               OpBranch %66
-         %73 = OpLabel
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %78 = OpLoad %int %77
-               OpStore %b %78
-               OpBranch %79
-         %79 = OpLabel
-               OpLoopMerge %80 %81 None
-               OpBranch %82
-         %82 = OpLabel
-         %83 = OpLoad %int %b
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %86 = OpLoad %int %85
-         %87 = OpSLessThan %bool %83 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-               OpBranch %88
-         %90 = OpLabel
-               OpBranch %80
-         %88 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-         %93 = OpLoad %int %92
-               OpStore %c %93
-               OpBranch %94
-         %94 = OpLabel
-               OpLoopMerge %95 %96 None
-               OpBranch %97
-         %97 = OpLabel
-         %98 = OpLoad %int %c
-        %100 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %101 = OpLoad %int %100
-        %102 = OpSLessThanEqual %bool %98 %101
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-               OpBranch %103
-        %105 = OpLabel
-               OpBranch %95
-        %103 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %107 = OpLoad %int %106
-               OpStore %d %107
-               OpBranch %108
-        %108 = OpLabel
-               OpLoopMerge %109 %110 None
-               OpBranch %111
-        %111 = OpLabel
-        %112 = OpLoad %int %d
-        %113 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %114 = OpLoad %int %113
-        %115 = OpSLessThan %bool %112 %114
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-               OpBranch %116
-        %118 = OpLabel
-               OpBranch %109
-        %116 = OpLabel
-        %119 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %120 = OpLoad %int %119
-               OpStore %e %120
-               OpBranch %121
-        %121 = OpLabel
-               OpLoopMerge %122 %123 None
-               OpBranch %124
-        %124 = OpLabel
-        %125 = OpLoad %int %e
-        %126 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %127 = OpLoad %int %126
-        %128 = OpSLessThanEqual %bool %125 %127
-               OpSelectionMerge %129 None
-               OpBranchConditional %128 %130 %131
-        %130 = OpLabel
-               OpBranch %129
-        %131 = OpLabel
-               OpBranch %122
-        %129 = OpLabel
-        %132 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %133 = OpLoad %int %132
-               OpStore %f %133
-               OpBranch %134
-        %134 = OpLabel
-               OpLoopMerge %135 %136 None
-               OpBranch %137
-        %137 = OpLabel
-        %138 = OpLoad %int %f
-        %139 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %140 = OpLoad %int %139
-        %141 = OpSLessThan %bool %138 %140
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %144
-        %143 = OpLabel
-               OpBranch %142
-        %144 = OpLabel
-               OpBranch %135
-        %142 = OpLabel
-        %145 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %146 = OpLoad %int %145
-               OpStore %g %146
-               OpBranch %147
-        %147 = OpLabel
-               OpLoopMerge %148 %149 None
-               OpBranch %150
-        %150 = OpLabel
-        %151 = OpLoad %int %g
-        %152 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %153 = OpLoad %int %152
-        %154 = OpSLessThan %bool %151 %153
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-               OpBranch %155
-        %157 = OpLabel
-               OpBranch %148
-        %155 = OpLabel
-        %158 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %159 = OpLoad %int %158
-               OpStore %h %159
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %164 = OpLoad %int %h
-        %165 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %164 %166
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %161
-        %168 = OpLabel
-        %171 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %172 = OpLoad %int %171
-               OpStore %i %172
-               OpBranch %173
-        %173 = OpLabel
-               OpLoopMerge %174 %175 None
-               OpBranch %176
-        %176 = OpLabel
-        %177 = OpLoad %int %i
-        %178 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-        %179 = OpLoad %int %178
-        %180 = OpSLessThan %bool %177 %179
-               OpSelectionMerge %181 None
-               OpBranchConditional %180 %182 %183
-        %182 = OpLabel
-               OpBranch %181
-        %183 = OpLabel
-               OpBranch %174
-        %181 = OpLabel
-        %184 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %185 = OpLoad %int %184
-               OpStore %j %185
-               OpBranch %186
-        %186 = OpLabel
-               OpLoopMerge %187 %188 None
-               OpBranch %189
-        %189 = OpLabel
-        %190 = OpLoad %int %j
-        %191 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %192 = OpLoad %int %191
-        %193 = OpSGreaterThan %bool %190 %192
-               OpSelectionMerge %194 None
-               OpBranchConditional %193 %195 %196
-        %195 = OpLabel
-               OpBranch %194
-        %196 = OpLabel
-               OpBranch %187
-        %194 = OpLabel
-        %197 = OpLoad %int %a
-        %198 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_2
-        %199 = OpLoad %float %198
-        %200 = OpAccessChain %_ptr_Function_float %sums %197
-        %201 = OpLoad %float %200
-        %202 = OpAccessChain %_ptr_Function_float %sums %197
-        %203 = OpFAdd %float %201 %199
-               OpStore %202 %203
-               OpBranch %188
-        %188 = OpLabel
-        %204 = OpLoad %int %j
-        %205 = OpISub %int %204 %int_1
-               OpStore %j %205
-               OpBranch %186
-        %187 = OpLabel
-               OpBranch %175
-        %175 = OpLabel
-        %206 = OpLoad %int %i
-        %207 = OpIAdd %int %206 %int_1
-               OpStore %i %207
-               OpBranch %173
-        %174 = OpLabel
-               OpBranch %162
-        %162 = OpLabel
-        %208 = OpLoad %int %h
-        %209 = OpIAdd %int %208 %int_1
-               OpStore %h %209
-               OpBranch %160
-        %161 = OpLabel
-               OpBranch %149
-        %149 = OpLabel
-        %210 = OpLoad %int %g
-        %211 = OpIAdd %int %210 %int_1
-               OpStore %g %211
-               OpBranch %147
-        %148 = OpLabel
-               OpBranch %136
-        %136 = OpLabel
-        %212 = OpLoad %int %f
-        %213 = OpIAdd %int %212 %int_1
-               OpStore %f %213
-               OpBranch %134
-        %135 = OpLabel
-               OpBranch %123
-        %123 = OpLabel
-        %214 = OpLoad %int %e
-        %215 = OpIAdd %int %214 %int_1
-               OpStore %e %215
-               OpBranch %121
-        %122 = OpLabel
-               OpBranch %110
-        %110 = OpLabel
-        %216 = OpLoad %int %d
-        %217 = OpIAdd %int %216 %int_1
-               OpStore %d %217
-               OpBranch %108
-        %109 = OpLabel
-               OpBranch %96
-         %96 = OpLabel
-        %218 = OpLoad %int %c
-        %219 = OpIAdd %int %218 %int_1
-               OpStore %c %219
-               OpBranch %94
-         %95 = OpLabel
-               OpBranch %81
-         %81 = OpLabel
-        %220 = OpLoad %int %b
-        %221 = OpIAdd %int %220 %int_1
-               OpStore %b %221
-               OpBranch %79
-         %80 = OpLabel
-               OpBranch %67
-         %67 = OpLabel
-        %222 = OpLoad %int %a
-        %223 = OpIAdd %int %222 %int_1
-               OpStore %a %223
-               OpBranch %65
-         %66 = OpLabel
-        %224 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %225 = OpLoad %int %224
-        %226 = OpAccessChain %_ptr_Function_float %sums %225
-        %227 = OpLoad %float %226
-        %228 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %229 = OpLoad %float %228
-        %230 = OpFOrdEqual %bool %227 %229
-               OpStore %x_216_phi %230
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %231
-        %232 = OpLabel
-        %233 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %234 = OpLoad %int %233
-        %235 = OpAccessChain %_ptr_Function_float %sums %234
-        %236 = OpLoad %float %235
-        %237 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-        %238 = OpLoad %float %237
-        %239 = OpFOrdEqual %bool %236 %238
-               OpStore %x_215 %239
-        %240 = OpLoad %bool %x_215
-               OpStore %x_216_phi %240
-               OpBranch %231
-        %231 = OpLabel
-        %241 = OpLoad %bool %x_216_phi
-               OpSelectionMerge %242 None
-               OpBranchConditional %241 %243 %244
-        %243 = OpLabel
-        %245 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %246 = OpLoad %int %245
-        %247 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %248 = OpLoad %int %247
-        %249 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %250 = OpLoad %int %249
-        %251 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %252 = OpLoad %int %251
-        %253 = OpConvertSToF %float %246
-        %254 = OpConvertSToF %float %248
-        %255 = OpConvertSToF %float %250
-        %256 = OpConvertSToF %float %252
-        %257 = OpCompositeConstruct %v4float %253 %254 %255 %256
-               OpStore %x_GLF_color %257
-               OpBranch %242
-        %244 = OpLabel
-        %258 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %259 = OpLoad %int %258
-        %260 = OpConvertSToF %float %259
-        %261 = OpCompositeConstruct %v4float %260 %260 %260 %260
-               OpStore %x_GLF_color %261
-               OpBranch %242
-        %242 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %262
-        %265 = OpLabel
-        %266 = OpFunctionCall %void %main_1
-        %267 = OpLoad %v4float %x_GLF_color
-        %268 = OpCompositeConstruct %main_out %267
-               OpReturnValue %268
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %270 = OpLabel
-        %271 = OpFunctionCall %main_out %main_inner
-        %272 = OpCompositeExtract %v4float %271 0
-               OpStore %x_GLF_color_1_1 %272
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3235625..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops-array-access/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,231 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 7>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var sums : array<f32, 2>;
-  var a : i32;
-  var b : i32;
-  var c : i32;
-  var d : i32;
-  var e : i32;
-  var f : i32;
-  var g : i32;
-  var h : i32;
-  var i : i32;
-  var j : i32;
-  var x_215 : bool;
-  var x_216_phi : bool;
-  let x_20 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_110 : f32 = x_8.x_GLF_uniform_float_values[0];
-  sums[x_20] = x_110;
-  let x_22 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_114 : f32 = x_8.x_GLF_uniform_float_values[0];
-  sums[x_22] = x_114;
-  let x_23 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_23;
-  loop {
-    let x_24 : i32 = a;
-    let x_25 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_24 < x_25)) {
-    } else {
-      break;
-    }
-    let x_26 : i32 = x_6.x_GLF_uniform_int_values[5];
-    b = x_26;
-    loop {
-      let x_27 : i32 = b;
-      let x_28 : i32 = x_6.x_GLF_uniform_int_values[3];
-      if ((x_27 < x_28)) {
-      } else {
-        break;
-      }
-      let x_29 : i32 = x_6.x_GLF_uniform_int_values[6];
-      c = x_29;
-      loop {
-        let x_30 : i32 = c;
-        let x_31 : i32 = x_6.x_GLF_uniform_int_values[4];
-        if ((x_30 <= x_31)) {
-        } else {
-          break;
-        }
-        let x_32 : i32 = x_6.x_GLF_uniform_int_values[1];
-        d = x_32;
-        loop {
-          let x_33 : i32 = d;
-          let x_34 : i32 = x_6.x_GLF_uniform_int_values[6];
-          if ((x_33 < x_34)) {
-          } else {
-            break;
-          }
-          let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-          e = x_35;
-          loop {
-            let x_36 : i32 = e;
-            let x_37 : i32 = x_6.x_GLF_uniform_int_values[4];
-            if ((x_36 <= x_37)) {
-            } else {
-              break;
-            }
-            let x_38 : i32 = x_6.x_GLF_uniform_int_values[1];
-            f = x_38;
-            loop {
-              let x_39 : i32 = f;
-              let x_40 : i32 = x_6.x_GLF_uniform_int_values[0];
-              if ((x_39 < x_40)) {
-              } else {
-                break;
-              }
-              let x_41 : i32 = x_6.x_GLF_uniform_int_values[1];
-              g = x_41;
-              loop {
-                let x_42 : i32 = g;
-                let x_43 : i32 = x_6.x_GLF_uniform_int_values[6];
-                if ((x_42 < x_43)) {
-                } else {
-                  break;
-                }
-                let x_44 : i32 = x_6.x_GLF_uniform_int_values[1];
-                h = x_44;
-                loop {
-                  let x_45 : i32 = h;
-                  let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-                  if ((x_45 < x_46)) {
-                  } else {
-                    break;
-                  }
-                  let x_47 : i32 = x_6.x_GLF_uniform_int_values[1];
-                  i = x_47;
-                  loop {
-                    let x_48 : i32 = i;
-                    let x_49 : i32 = x_6.x_GLF_uniform_int_values[4];
-                    if ((x_48 < x_49)) {
-                    } else {
-                      break;
-                    }
-                    let x_50 : i32 = x_6.x_GLF_uniform_int_values[0];
-                    j = x_50;
-                    loop {
-                      let x_51 : i32 = j;
-                      let x_52 : i32 = x_6.x_GLF_uniform_int_values[1];
-                      if ((x_51 > x_52)) {
-                      } else {
-                        break;
-                      }
-                      let x_53 : i32 = a;
-                      let x_197 : f32 = x_8.x_GLF_uniform_float_values[2];
-                      let x_199 : f32 = sums[x_53];
-                      sums[x_53] = (x_199 + x_197);
-
-                      continuing {
-                        let x_54 : i32 = j;
-                        j = (x_54 - 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_56 : i32 = i;
-                      i = (x_56 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_58 : i32 = h;
-                    h = (x_58 + 1);
-                  }
-                }
-
-                continuing {
-                  let x_60 : i32 = g;
-                  g = (x_60 + 1);
-                }
-              }
-
-              continuing {
-                let x_62 : i32 = f;
-                f = (x_62 + 1);
-              }
-            }
-
-            continuing {
-              let x_64 : i32 = e;
-              e = (x_64 + 1);
-            }
-          }
-
-          continuing {
-            let x_66 : i32 = d;
-            d = (x_66 + 1);
-          }
-        }
-
-        continuing {
-          let x_68 : i32 = c;
-          c = (x_68 + 1);
-        }
-      }
-
-      continuing {
-        let x_70 : i32 = b;
-        b = (x_70 + 1);
-      }
-    }
-
-    continuing {
-      let x_72 : i32 = a;
-      a = (x_72 + 1);
-    }
-  }
-  let x_74 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_204 : f32 = sums[x_74];
-  let x_206 : f32 = x_8.x_GLF_uniform_float_values[1];
-  let x_207 : bool = (x_204 == x_206);
-  x_216_phi = x_207;
-  if (x_207) {
-    let x_75 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_212 : f32 = sums[x_75];
-    let x_214 : f32 = x_8.x_GLF_uniform_float_values[1];
-    x_215 = (x_212 == x_214);
-    x_216_phi = x_215;
-  }
-  let x_216 : bool = x_216_phi;
-  if (x_216) {
-    let x_76 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_79 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_76), f32(x_77), f32(x_78), f32(x_79));
-  } else {
-    let x_80 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_230 : f32 = f32(x_80);
-    x_GLF_color = vec4<f32>(x_230, x_230, x_230, x_230);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 794e852..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,174 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i0 = 0;
-  int i1 = 0;
-  int i2 = 0;
-  int i3 = 0;
-  int i4 = 0;
-  int i5 = 0;
-  int i6 = 0;
-  int i7 = 0;
-  int i8_1 = 0;
-  int i9 = 0;
-  a = 0;
-  i0 = 0;
-  while (true) {
-    const int x_40 = i0;
-    const int x_42 = asint(x_7[0].x);
-    if ((x_40 < x_42)) {
-    } else {
-      break;
-    }
-    i1 = 0;
-    while (true) {
-      const int x_49 = i1;
-      const int x_51 = asint(x_7[0].x);
-      if ((x_49 < x_51)) {
-      } else {
-        break;
-      }
-      i2 = 0;
-      while (true) {
-        const int x_58 = i2;
-        const int x_60 = asint(x_7[0].x);
-        if ((x_58 < x_60)) {
-        } else {
-          break;
-        }
-        i3 = 0;
-        while (true) {
-          const int x_67 = i3;
-          const int x_69 = asint(x_7[0].x);
-          if ((x_67 < (x_69 + 2))) {
-          } else {
-            break;
-          }
-          i4 = 0;
-          while (true) {
-            const int x_77 = i4;
-            const int x_79 = asint(x_7[0].x);
-            if ((x_77 < x_79)) {
-            } else {
-              break;
-            }
-            i5 = 0;
-            while (true) {
-              const int x_86 = i5;
-              const int x_88 = asint(x_7[0].x);
-              if ((x_86 < x_88)) {
-              } else {
-                break;
-              }
-              while (true) {
-                const int x_96 = asint(x_7[0].x);
-                if ((x_96 > 0)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                while (true) {
-                  const int x_103 = i6;
-                  const int x_105 = asint(x_7[0].x);
-                  if ((x_103 < x_105)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  while (true) {
-                    const int x_112 = i7;
-                    const int x_114 = asint(x_7[0].x);
-                    if ((x_112 < x_114)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    while (true) {
-                      const int x_121 = i8_1;
-                      const int x_123 = asint(x_7[0].x);
-                      if ((x_121 < x_123)) {
-                      } else {
-                        break;
-                      }
-                      i9 = 0;
-                      while (true) {
-                        const int x_130 = i9;
-                        const int x_132 = asint(x_7[0].x);
-                        if ((x_130 < x_132)) {
-                        } else {
-                          break;
-                        }
-                        a = (a + 1);
-                        {
-                          i9 = (i9 + 1);
-                        }
-                      }
-                      {
-                        i8_1 = (i8_1 + 1);
-                      }
-                    }
-                    {
-                      i7 = (i7 + 1);
-                    }
-                  }
-                  {
-                    i6 = (i6 + 1);
-                  }
-                }
-                break;
-              }
-              {
-                i5 = (i5 + 1);
-              }
-            }
-            {
-              i4 = (i4 + 1);
-            }
-          }
-          {
-            i3 = (i3 + 1);
-          }
-        }
-        {
-          i2 = (i2 + 1);
-        }
-      }
-      {
-        i1 = (i1 + 1);
-      }
-    }
-    {
-      i0 = (i0 + 1);
-    }
-  }
-  if ((a == 3)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index 527bad1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,189 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i0 = 0;
-  int i1 = 0;
-  int i2 = 0;
-  int i3 = 0;
-  int i4 = 0;
-  int i5 = 0;
-  int i6 = 0;
-  int i7 = 0;
-  int i8_1 = 0;
-  int i9 = 0;
-  a = 0;
-  i0 = 0;
-  while (true) {
-    int const x_40 = i0;
-    int const x_42 = x_7.one;
-    if ((x_40 < x_42)) {
-    } else {
-      break;
-    }
-    i1 = 0;
-    while (true) {
-      int const x_49 = i1;
-      int const x_51 = x_7.one;
-      if ((x_49 < x_51)) {
-      } else {
-        break;
-      }
-      i2 = 0;
-      while (true) {
-        int const x_58 = i2;
-        int const x_60 = x_7.one;
-        if ((x_58 < x_60)) {
-        } else {
-          break;
-        }
-        i3 = 0;
-        while (true) {
-          int const x_67 = i3;
-          int const x_69 = x_7.one;
-          if ((x_67 < as_type<int>((as_type<uint>(x_69) + as_type<uint>(2))))) {
-          } else {
-            break;
-          }
-          i4 = 0;
-          while (true) {
-            int const x_77 = i4;
-            int const x_79 = x_7.one;
-            if ((x_77 < x_79)) {
-            } else {
-              break;
-            }
-            i5 = 0;
-            while (true) {
-              int const x_86 = i5;
-              int const x_88 = x_7.one;
-              if ((x_86 < x_88)) {
-              } else {
-                break;
-              }
-              while (true) {
-                int const x_96 = x_7.one;
-                if ((x_96 > 0)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                while (true) {
-                  int const x_103 = i6;
-                  int const x_105 = x_7.one;
-                  if ((x_103 < x_105)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  while (true) {
-                    int const x_112 = i7;
-                    int const x_114 = x_7.one;
-                    if ((x_112 < x_114)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    while (true) {
-                      int const x_121 = i8_1;
-                      int const x_123 = x_7.one;
-                      if ((x_121 < x_123)) {
-                      } else {
-                        break;
-                      }
-                      i9 = 0;
-                      while (true) {
-                        int const x_130 = i9;
-                        int const x_132 = x_7.one;
-                        if ((x_130 < x_132)) {
-                        } else {
-                          break;
-                        }
-                        int const x_135 = a;
-                        a = as_type<int>((as_type<uint>(x_135) + as_type<uint>(1)));
-                        {
-                          int const x_137 = i9;
-                          i9 = as_type<int>((as_type<uint>(x_137) + as_type<uint>(1)));
-                        }
-                      }
-                      {
-                        int const x_139 = i8_1;
-                        i8_1 = as_type<int>((as_type<uint>(x_139) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_141 = i7;
-                      i7 = as_type<int>((as_type<uint>(x_141) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_143 = i6;
-                    i6 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-                  }
-                }
-                break;
-              }
-              {
-                int const x_145 = i5;
-                i5 = as_type<int>((as_type<uint>(x_145) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_147 = i4;
-              i4 = as_type<int>((as_type<uint>(x_147) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_149 = i3;
-            i3 = as_type<int>((as_type<uint>(x_149) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_151 = i2;
-          i2 = as_type<int>((as_type<uint>(x_151) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_153 = i1;
-        i1 = as_type<int>((as_type<uint>(x_153) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_155 = i0;
-      i0 = as_type<int>((as_type<uint>(x_155) + as_type<uint>(1)));
-    }
-  }
-  int const x_157 = a;
-  if ((x_157 == 3)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2d3e9ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,370 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 200
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i0 "i0"
-               OpName %i1 "i1"
-               OpName %i2 "i2"
-               OpName %i3 "i3"
-               OpName %i4 "i4"
-               OpName %i5 "i5"
-               OpName %i6 "i6"
-               OpName %i7 "i7"
-               OpName %i8_1 "i8_1"
-               OpName %i9 "i9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %187 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %188 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %189 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-         %i0 = OpVariable %_ptr_Function_int Function %18
-         %i1 = OpVariable %_ptr_Function_int Function %18
-         %i2 = OpVariable %_ptr_Function_int Function %18
-         %i3 = OpVariable %_ptr_Function_int Function %18
-         %i4 = OpVariable %_ptr_Function_int Function %18
-         %i5 = OpVariable %_ptr_Function_int Function %18
-         %i6 = OpVariable %_ptr_Function_int Function %18
-         %i7 = OpVariable %_ptr_Function_int Function %18
-       %i8_1 = OpVariable %_ptr_Function_int Function %18
-         %i9 = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-               OpStore %i0 %int_0
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i0
-         %38 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %39 = OpLoad %int %38
-         %40 = OpSLessThan %bool %34 %39
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-               OpBranch %42
-         %44 = OpLabel
-               OpBranch %31
-         %42 = OpLabel
-               OpStore %i1 %int_0
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %i1
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %51 = OpLoad %int %50
-         %52 = OpSLessThan %bool %49 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %46
-         %53 = OpLabel
-               OpStore %i2 %int_0
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %60 = OpLoad %int %i2
-         %61 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %62 = OpLoad %int %61
-         %63 = OpSLessThan %bool %60 %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %57
-         %64 = OpLabel
-               OpStore %i3 %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i3
-         %72 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %73 = OpLoad %int %72
-         %75 = OpIAdd %int %73 %int_2
-         %76 = OpSLessThan %bool %71 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %68
-         %77 = OpLabel
-               OpStore %i4 %int_0
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %i4
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSLessThan %bool %84 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-               OpBranch %88
-         %90 = OpLabel
-               OpBranch %81
-         %88 = OpLabel
-               OpStore %i5 %int_0
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %i5
-         %96 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %97 = OpLoad %int %96
-         %98 = OpSLessThan %bool %95 %97
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %92
-         %99 = OpLabel
-               OpBranch %102
-        %102 = OpLabel
-               OpLoopMerge %103 %104 None
-               OpBranch %105
-        %105 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %107 = OpLoad %int %106
-        %108 = OpSGreaterThan %bool %107 %int_0
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %111
-        %110 = OpLabel
-               OpBranch %109
-        %111 = OpLabel
-               OpBranch %103
-        %109 = OpLabel
-               OpStore %i6 %int_0
-               OpBranch %112
-        %112 = OpLabel
-               OpLoopMerge %113 %114 None
-               OpBranch %115
-        %115 = OpLabel
-        %116 = OpLoad %int %i6
-        %117 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %118 = OpLoad %int %117
-        %119 = OpSLessThan %bool %116 %118
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-               OpBranch %120
-        %122 = OpLabel
-               OpBranch %113
-        %120 = OpLabel
-               OpStore %i7 %int_0
-               OpBranch %123
-        %123 = OpLabel
-               OpLoopMerge %124 %125 None
-               OpBranch %126
-        %126 = OpLabel
-        %127 = OpLoad %int %i7
-        %128 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %129 = OpLoad %int %128
-        %130 = OpSLessThan %bool %127 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %133
-        %132 = OpLabel
-               OpBranch %131
-        %133 = OpLabel
-               OpBranch %124
-        %131 = OpLabel
-               OpStore %i8_1 %int_0
-               OpBranch %134
-        %134 = OpLabel
-               OpLoopMerge %135 %136 None
-               OpBranch %137
-        %137 = OpLabel
-        %138 = OpLoad %int %i8_1
-        %139 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %140 = OpLoad %int %139
-        %141 = OpSLessThan %bool %138 %140
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %144
-        %143 = OpLabel
-               OpBranch %142
-        %144 = OpLabel
-               OpBranch %135
-        %142 = OpLabel
-               OpStore %i9 %int_0
-               OpBranch %145
-        %145 = OpLabel
-               OpLoopMerge %146 %147 None
-               OpBranch %148
-        %148 = OpLabel
-        %149 = OpLoad %int %i9
-        %150 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %151 = OpLoad %int %150
-        %152 = OpSLessThan %bool %149 %151
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %155
-        %154 = OpLabel
-               OpBranch %153
-        %155 = OpLabel
-               OpBranch %146
-        %153 = OpLabel
-        %156 = OpLoad %int %a
-        %158 = OpIAdd %int %156 %int_1
-               OpStore %a %158
-               OpBranch %147
-        %147 = OpLabel
-        %159 = OpLoad %int %i9
-        %160 = OpIAdd %int %159 %int_1
-               OpStore %i9 %160
-               OpBranch %145
-        %146 = OpLabel
-               OpBranch %136
-        %136 = OpLabel
-        %161 = OpLoad %int %i8_1
-        %162 = OpIAdd %int %161 %int_1
-               OpStore %i8_1 %162
-               OpBranch %134
-        %135 = OpLabel
-               OpBranch %125
-        %125 = OpLabel
-        %163 = OpLoad %int %i7
-        %164 = OpIAdd %int %163 %int_1
-               OpStore %i7 %164
-               OpBranch %123
-        %124 = OpLabel
-               OpBranch %114
-        %114 = OpLabel
-        %165 = OpLoad %int %i6
-        %166 = OpIAdd %int %165 %int_1
-               OpStore %i6 %166
-               OpBranch %112
-        %113 = OpLabel
-               OpBranch %103
-        %104 = OpLabel
-               OpBranch %102
-        %103 = OpLabel
-               OpBranch %93
-         %93 = OpLabel
-        %167 = OpLoad %int %i5
-        %168 = OpIAdd %int %167 %int_1
-               OpStore %i5 %168
-               OpBranch %91
-         %92 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-        %169 = OpLoad %int %i4
-        %170 = OpIAdd %int %169 %int_1
-               OpStore %i4 %170
-               OpBranch %80
-         %81 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-        %171 = OpLoad %int %i3
-        %172 = OpIAdd %int %171 %int_1
-               OpStore %i3 %172
-               OpBranch %67
-         %68 = OpLabel
-               OpBranch %58
-         %58 = OpLabel
-        %173 = OpLoad %int %i2
-        %174 = OpIAdd %int %173 %int_1
-               OpStore %i2 %174
-               OpBranch %56
-         %57 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-        %175 = OpLoad %int %i1
-        %176 = OpIAdd %int %175 %int_1
-               OpStore %i1 %176
-               OpBranch %45
-         %46 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-        %177 = OpLoad %int %i0
-        %178 = OpIAdd %int %177 %int_1
-               OpStore %i0 %178
-               OpBranch %30
-         %31 = OpLabel
-        %179 = OpLoad %int %a
-        %181 = OpIEqual %bool %179 %int_3
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %184
-        %183 = OpLabel
-               OpStore %x_GLF_color %187
-               OpBranch %182
-        %184 = OpLabel
-               OpStore %x_GLF_color %188
-               OpBranch %182
-        %182 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %189
-        %192 = OpLabel
-        %193 = OpFunctionCall %void %main_1
-        %194 = OpLoad %v4float %x_GLF_color
-        %195 = OpCompositeConstruct %main_out %194
-               OpReturnValue %195
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %197 = OpLabel
-        %198 = OpFunctionCall %main_out %main_inner
-        %199 = OpCompositeExtract %v4float %198 0
-               OpStore %x_GLF_color_1_1 %199
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 66f0852..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,191 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i0 : i32;
-  var i1 : i32;
-  var i2 : i32;
-  var i3 : i32;
-  var i4 : i32;
-  var i5 : i32;
-  var i6 : i32;
-  var i7 : i32;
-  var i8_1 : i32;
-  var i9 : i32;
-  a = 0;
-  i0 = 0;
-  loop {
-    let x_40 : i32 = i0;
-    let x_42 : i32 = x_7.one;
-    if ((x_40 < x_42)) {
-    } else {
-      break;
-    }
-    i1 = 0;
-    loop {
-      let x_49 : i32 = i1;
-      let x_51 : i32 = x_7.one;
-      if ((x_49 < x_51)) {
-      } else {
-        break;
-      }
-      i2 = 0;
-      loop {
-        let x_58 : i32 = i2;
-        let x_60 : i32 = x_7.one;
-        if ((x_58 < x_60)) {
-        } else {
-          break;
-        }
-        i3 = 0;
-        loop {
-          let x_67 : i32 = i3;
-          let x_69 : i32 = x_7.one;
-          if ((x_67 < (x_69 + 2))) {
-          } else {
-            break;
-          }
-          i4 = 0;
-          loop {
-            let x_77 : i32 = i4;
-            let x_79 : i32 = x_7.one;
-            if ((x_77 < x_79)) {
-            } else {
-              break;
-            }
-            i5 = 0;
-            loop {
-              let x_86 : i32 = i5;
-              let x_88 : i32 = x_7.one;
-              if ((x_86 < x_88)) {
-              } else {
-                break;
-              }
-              loop {
-                let x_96 : i32 = x_7.one;
-                if ((x_96 > 0)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                loop {
-                  let x_103 : i32 = i6;
-                  let x_105 : i32 = x_7.one;
-                  if ((x_103 < x_105)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  loop {
-                    let x_112 : i32 = i7;
-                    let x_114 : i32 = x_7.one;
-                    if ((x_112 < x_114)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    loop {
-                      let x_121 : i32 = i8_1;
-                      let x_123 : i32 = x_7.one;
-                      if ((x_121 < x_123)) {
-                      } else {
-                        break;
-                      }
-                      i9 = 0;
-                      loop {
-                        let x_130 : i32 = i9;
-                        let x_132 : i32 = x_7.one;
-                        if ((x_130 < x_132)) {
-                        } else {
-                          break;
-                        }
-                        let x_135 : i32 = a;
-                        a = (x_135 + 1);
-
-                        continuing {
-                          let x_137 : i32 = i9;
-                          i9 = (x_137 + 1);
-                        }
-                      }
-
-                      continuing {
-                        let x_139 : i32 = i8_1;
-                        i8_1 = (x_139 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_141 : i32 = i7;
-                      i7 = (x_141 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_143 : i32 = i6;
-                    i6 = (x_143 + 1);
-                  }
-                }
-                break;
-              }
-
-              continuing {
-                let x_145 : i32 = i5;
-                i5 = (x_145 + 1);
-              }
-            }
-
-            continuing {
-              let x_147 : i32 = i4;
-              i4 = (x_147 + 1);
-            }
-          }
-
-          continuing {
-            let x_149 : i32 = i3;
-            i3 = (x_149 + 1);
-          }
-        }
-
-        continuing {
-          let x_151 : i32 = i2;
-          i2 = (x_151 + 1);
-        }
-      }
-
-      continuing {
-        let x_153 : i32 = i1;
-        i1 = (x_153 + 1);
-      }
-    }
-
-    continuing {
-      let x_155 : i32 = i0;
-      i0 = (x_155 + 1);
-    }
-  }
-  let x_157 : i32 = a;
-  if ((x_157 == 3)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 794e852..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,174 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i0 = 0;
-  int i1 = 0;
-  int i2 = 0;
-  int i3 = 0;
-  int i4 = 0;
-  int i5 = 0;
-  int i6 = 0;
-  int i7 = 0;
-  int i8_1 = 0;
-  int i9 = 0;
-  a = 0;
-  i0 = 0;
-  while (true) {
-    const int x_40 = i0;
-    const int x_42 = asint(x_7[0].x);
-    if ((x_40 < x_42)) {
-    } else {
-      break;
-    }
-    i1 = 0;
-    while (true) {
-      const int x_49 = i1;
-      const int x_51 = asint(x_7[0].x);
-      if ((x_49 < x_51)) {
-      } else {
-        break;
-      }
-      i2 = 0;
-      while (true) {
-        const int x_58 = i2;
-        const int x_60 = asint(x_7[0].x);
-        if ((x_58 < x_60)) {
-        } else {
-          break;
-        }
-        i3 = 0;
-        while (true) {
-          const int x_67 = i3;
-          const int x_69 = asint(x_7[0].x);
-          if ((x_67 < (x_69 + 2))) {
-          } else {
-            break;
-          }
-          i4 = 0;
-          while (true) {
-            const int x_77 = i4;
-            const int x_79 = asint(x_7[0].x);
-            if ((x_77 < x_79)) {
-            } else {
-              break;
-            }
-            i5 = 0;
-            while (true) {
-              const int x_86 = i5;
-              const int x_88 = asint(x_7[0].x);
-              if ((x_86 < x_88)) {
-              } else {
-                break;
-              }
-              while (true) {
-                const int x_96 = asint(x_7[0].x);
-                if ((x_96 > 0)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                while (true) {
-                  const int x_103 = i6;
-                  const int x_105 = asint(x_7[0].x);
-                  if ((x_103 < x_105)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  while (true) {
-                    const int x_112 = i7;
-                    const int x_114 = asint(x_7[0].x);
-                    if ((x_112 < x_114)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    while (true) {
-                      const int x_121 = i8_1;
-                      const int x_123 = asint(x_7[0].x);
-                      if ((x_121 < x_123)) {
-                      } else {
-                        break;
-                      }
-                      i9 = 0;
-                      while (true) {
-                        const int x_130 = i9;
-                        const int x_132 = asint(x_7[0].x);
-                        if ((x_130 < x_132)) {
-                        } else {
-                          break;
-                        }
-                        a = (a + 1);
-                        {
-                          i9 = (i9 + 1);
-                        }
-                      }
-                      {
-                        i8_1 = (i8_1 + 1);
-                      }
-                    }
-                    {
-                      i7 = (i7 + 1);
-                    }
-                  }
-                  {
-                    i6 = (i6 + 1);
-                  }
-                }
-                break;
-              }
-              {
-                i5 = (i5 + 1);
-              }
-            }
-            {
-              i4 = (i4 + 1);
-            }
-          }
-          {
-            i3 = (i3 + 1);
-          }
-        }
-        {
-          i2 = (i2 + 1);
-        }
-      }
-      {
-        i1 = (i1 + 1);
-      }
-    }
-    {
-      i0 = (i0 + 1);
-    }
-  }
-  if ((a == 3)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index 527bad1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,189 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i0 = 0;
-  int i1 = 0;
-  int i2 = 0;
-  int i3 = 0;
-  int i4 = 0;
-  int i5 = 0;
-  int i6 = 0;
-  int i7 = 0;
-  int i8_1 = 0;
-  int i9 = 0;
-  a = 0;
-  i0 = 0;
-  while (true) {
-    int const x_40 = i0;
-    int const x_42 = x_7.one;
-    if ((x_40 < x_42)) {
-    } else {
-      break;
-    }
-    i1 = 0;
-    while (true) {
-      int const x_49 = i1;
-      int const x_51 = x_7.one;
-      if ((x_49 < x_51)) {
-      } else {
-        break;
-      }
-      i2 = 0;
-      while (true) {
-        int const x_58 = i2;
-        int const x_60 = x_7.one;
-        if ((x_58 < x_60)) {
-        } else {
-          break;
-        }
-        i3 = 0;
-        while (true) {
-          int const x_67 = i3;
-          int const x_69 = x_7.one;
-          if ((x_67 < as_type<int>((as_type<uint>(x_69) + as_type<uint>(2))))) {
-          } else {
-            break;
-          }
-          i4 = 0;
-          while (true) {
-            int const x_77 = i4;
-            int const x_79 = x_7.one;
-            if ((x_77 < x_79)) {
-            } else {
-              break;
-            }
-            i5 = 0;
-            while (true) {
-              int const x_86 = i5;
-              int const x_88 = x_7.one;
-              if ((x_86 < x_88)) {
-              } else {
-                break;
-              }
-              while (true) {
-                int const x_96 = x_7.one;
-                if ((x_96 > 0)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                while (true) {
-                  int const x_103 = i6;
-                  int const x_105 = x_7.one;
-                  if ((x_103 < x_105)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  while (true) {
-                    int const x_112 = i7;
-                    int const x_114 = x_7.one;
-                    if ((x_112 < x_114)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    while (true) {
-                      int const x_121 = i8_1;
-                      int const x_123 = x_7.one;
-                      if ((x_121 < x_123)) {
-                      } else {
-                        break;
-                      }
-                      i9 = 0;
-                      while (true) {
-                        int const x_130 = i9;
-                        int const x_132 = x_7.one;
-                        if ((x_130 < x_132)) {
-                        } else {
-                          break;
-                        }
-                        int const x_135 = a;
-                        a = as_type<int>((as_type<uint>(x_135) + as_type<uint>(1)));
-                        {
-                          int const x_137 = i9;
-                          i9 = as_type<int>((as_type<uint>(x_137) + as_type<uint>(1)));
-                        }
-                      }
-                      {
-                        int const x_139 = i8_1;
-                        i8_1 = as_type<int>((as_type<uint>(x_139) + as_type<uint>(1)));
-                      }
-                    }
-                    {
-                      int const x_141 = i7;
-                      i7 = as_type<int>((as_type<uint>(x_141) + as_type<uint>(1)));
-                    }
-                  }
-                  {
-                    int const x_143 = i6;
-                    i6 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-                  }
-                }
-                break;
-              }
-              {
-                int const x_145 = i5;
-                i5 = as_type<int>((as_type<uint>(x_145) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_147 = i4;
-              i4 = as_type<int>((as_type<uint>(x_147) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_149 = i3;
-            i3 = as_type<int>((as_type<uint>(x_149) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_151 = i2;
-          i2 = as_type<int>((as_type<uint>(x_151) + as_type<uint>(1)));
-        }
-      }
-      {
-        int const x_153 = i1;
-        i1 = as_type<int>((as_type<uint>(x_153) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_155 = i0;
-      i0 = as_type<int>((as_type<uint>(x_155) + as_type<uint>(1)));
-    }
-  }
-  int const x_157 = a;
-  if ((x_157 == 3)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2d3e9ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,370 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 200
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i0 "i0"
-               OpName %i1 "i1"
-               OpName %i2 "i2"
-               OpName %i3 "i3"
-               OpName %i4 "i4"
-               OpName %i5 "i5"
-               OpName %i6 "i6"
-               OpName %i7 "i7"
-               OpName %i8_1 "i8_1"
-               OpName %i9 "i9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %187 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %188 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %189 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-         %i0 = OpVariable %_ptr_Function_int Function %18
-         %i1 = OpVariable %_ptr_Function_int Function %18
-         %i2 = OpVariable %_ptr_Function_int Function %18
-         %i3 = OpVariable %_ptr_Function_int Function %18
-         %i4 = OpVariable %_ptr_Function_int Function %18
-         %i5 = OpVariable %_ptr_Function_int Function %18
-         %i6 = OpVariable %_ptr_Function_int Function %18
-         %i7 = OpVariable %_ptr_Function_int Function %18
-       %i8_1 = OpVariable %_ptr_Function_int Function %18
-         %i9 = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-               OpStore %i0 %int_0
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i0
-         %38 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %39 = OpLoad %int %38
-         %40 = OpSLessThan %bool %34 %39
-               OpSelectionMerge %42 None
-               OpBranchConditional %40 %43 %44
-         %43 = OpLabel
-               OpBranch %42
-         %44 = OpLabel
-               OpBranch %31
-         %42 = OpLabel
-               OpStore %i1 %int_0
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %i1
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %51 = OpLoad %int %50
-         %52 = OpSLessThan %bool %49 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %46
-         %53 = OpLabel
-               OpStore %i2 %int_0
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %60 = OpLoad %int %i2
-         %61 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %62 = OpLoad %int %61
-         %63 = OpSLessThan %bool %60 %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %57
-         %64 = OpLabel
-               OpStore %i3 %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i3
-         %72 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %73 = OpLoad %int %72
-         %75 = OpIAdd %int %73 %int_2
-         %76 = OpSLessThan %bool %71 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %68
-         %77 = OpLabel
-               OpStore %i4 %int_0
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %i4
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSLessThan %bool %84 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-               OpBranch %88
-         %90 = OpLabel
-               OpBranch %81
-         %88 = OpLabel
-               OpStore %i5 %int_0
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %i5
-         %96 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %97 = OpLoad %int %96
-         %98 = OpSLessThan %bool %95 %97
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %92
-         %99 = OpLabel
-               OpBranch %102
-        %102 = OpLabel
-               OpLoopMerge %103 %104 None
-               OpBranch %105
-        %105 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %107 = OpLoad %int %106
-        %108 = OpSGreaterThan %bool %107 %int_0
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %111
-        %110 = OpLabel
-               OpBranch %109
-        %111 = OpLabel
-               OpBranch %103
-        %109 = OpLabel
-               OpStore %i6 %int_0
-               OpBranch %112
-        %112 = OpLabel
-               OpLoopMerge %113 %114 None
-               OpBranch %115
-        %115 = OpLabel
-        %116 = OpLoad %int %i6
-        %117 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %118 = OpLoad %int %117
-        %119 = OpSLessThan %bool %116 %118
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-               OpBranch %120
-        %122 = OpLabel
-               OpBranch %113
-        %120 = OpLabel
-               OpStore %i7 %int_0
-               OpBranch %123
-        %123 = OpLabel
-               OpLoopMerge %124 %125 None
-               OpBranch %126
-        %126 = OpLabel
-        %127 = OpLoad %int %i7
-        %128 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %129 = OpLoad %int %128
-        %130 = OpSLessThan %bool %127 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %133
-        %132 = OpLabel
-               OpBranch %131
-        %133 = OpLabel
-               OpBranch %124
-        %131 = OpLabel
-               OpStore %i8_1 %int_0
-               OpBranch %134
-        %134 = OpLabel
-               OpLoopMerge %135 %136 None
-               OpBranch %137
-        %137 = OpLabel
-        %138 = OpLoad %int %i8_1
-        %139 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %140 = OpLoad %int %139
-        %141 = OpSLessThan %bool %138 %140
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %144
-        %143 = OpLabel
-               OpBranch %142
-        %144 = OpLabel
-               OpBranch %135
-        %142 = OpLabel
-               OpStore %i9 %int_0
-               OpBranch %145
-        %145 = OpLabel
-               OpLoopMerge %146 %147 None
-               OpBranch %148
-        %148 = OpLabel
-        %149 = OpLoad %int %i9
-        %150 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-        %151 = OpLoad %int %150
-        %152 = OpSLessThan %bool %149 %151
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %155
-        %154 = OpLabel
-               OpBranch %153
-        %155 = OpLabel
-               OpBranch %146
-        %153 = OpLabel
-        %156 = OpLoad %int %a
-        %158 = OpIAdd %int %156 %int_1
-               OpStore %a %158
-               OpBranch %147
-        %147 = OpLabel
-        %159 = OpLoad %int %i9
-        %160 = OpIAdd %int %159 %int_1
-               OpStore %i9 %160
-               OpBranch %145
-        %146 = OpLabel
-               OpBranch %136
-        %136 = OpLabel
-        %161 = OpLoad %int %i8_1
-        %162 = OpIAdd %int %161 %int_1
-               OpStore %i8_1 %162
-               OpBranch %134
-        %135 = OpLabel
-               OpBranch %125
-        %125 = OpLabel
-        %163 = OpLoad %int %i7
-        %164 = OpIAdd %int %163 %int_1
-               OpStore %i7 %164
-               OpBranch %123
-        %124 = OpLabel
-               OpBranch %114
-        %114 = OpLabel
-        %165 = OpLoad %int %i6
-        %166 = OpIAdd %int %165 %int_1
-               OpStore %i6 %166
-               OpBranch %112
-        %113 = OpLabel
-               OpBranch %103
-        %104 = OpLabel
-               OpBranch %102
-        %103 = OpLabel
-               OpBranch %93
-         %93 = OpLabel
-        %167 = OpLoad %int %i5
-        %168 = OpIAdd %int %167 %int_1
-               OpStore %i5 %168
-               OpBranch %91
-         %92 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-        %169 = OpLoad %int %i4
-        %170 = OpIAdd %int %169 %int_1
-               OpStore %i4 %170
-               OpBranch %80
-         %81 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-        %171 = OpLoad %int %i3
-        %172 = OpIAdd %int %171 %int_1
-               OpStore %i3 %172
-               OpBranch %67
-         %68 = OpLabel
-               OpBranch %58
-         %58 = OpLabel
-        %173 = OpLoad %int %i2
-        %174 = OpIAdd %int %173 %int_1
-               OpStore %i2 %174
-               OpBranch %56
-         %57 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-        %175 = OpLoad %int %i1
-        %176 = OpIAdd %int %175 %int_1
-               OpStore %i1 %176
-               OpBranch %45
-         %46 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-        %177 = OpLoad %int %i0
-        %178 = OpIAdd %int %177 %int_1
-               OpStore %i0 %178
-               OpBranch %30
-         %31 = OpLabel
-        %179 = OpLoad %int %a
-        %181 = OpIEqual %bool %179 %int_3
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %184
-        %183 = OpLabel
-               OpStore %x_GLF_color %187
-               OpBranch %182
-        %184 = OpLabel
-               OpStore %x_GLF_color %188
-               OpBranch %182
-        %182 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %189
-        %192 = OpLabel
-        %193 = OpFunctionCall %void %main_1
-        %194 = OpLoad %v4float %x_GLF_color
-        %195 = OpCompositeConstruct %main_out %194
-               OpReturnValue %195
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %197 = OpLabel
-        %198 = OpFunctionCall %main_out %main_inner
-        %199 = OpCompositeExtract %v4float %198 0
-               OpStore %x_GLF_color_1_1 %199
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 66f0852..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-scaled-number-nested-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,191 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i0 : i32;
-  var i1 : i32;
-  var i2 : i32;
-  var i3 : i32;
-  var i4 : i32;
-  var i5 : i32;
-  var i6 : i32;
-  var i7 : i32;
-  var i8_1 : i32;
-  var i9 : i32;
-  a = 0;
-  i0 = 0;
-  loop {
-    let x_40 : i32 = i0;
-    let x_42 : i32 = x_7.one;
-    if ((x_40 < x_42)) {
-    } else {
-      break;
-    }
-    i1 = 0;
-    loop {
-      let x_49 : i32 = i1;
-      let x_51 : i32 = x_7.one;
-      if ((x_49 < x_51)) {
-      } else {
-        break;
-      }
-      i2 = 0;
-      loop {
-        let x_58 : i32 = i2;
-        let x_60 : i32 = x_7.one;
-        if ((x_58 < x_60)) {
-        } else {
-          break;
-        }
-        i3 = 0;
-        loop {
-          let x_67 : i32 = i3;
-          let x_69 : i32 = x_7.one;
-          if ((x_67 < (x_69 + 2))) {
-          } else {
-            break;
-          }
-          i4 = 0;
-          loop {
-            let x_77 : i32 = i4;
-            let x_79 : i32 = x_7.one;
-            if ((x_77 < x_79)) {
-            } else {
-              break;
-            }
-            i5 = 0;
-            loop {
-              let x_86 : i32 = i5;
-              let x_88 : i32 = x_7.one;
-              if ((x_86 < x_88)) {
-              } else {
-                break;
-              }
-              loop {
-                let x_96 : i32 = x_7.one;
-                if ((x_96 > 0)) {
-                } else {
-                  break;
-                }
-                i6 = 0;
-                loop {
-                  let x_103 : i32 = i6;
-                  let x_105 : i32 = x_7.one;
-                  if ((x_103 < x_105)) {
-                  } else {
-                    break;
-                  }
-                  i7 = 0;
-                  loop {
-                    let x_112 : i32 = i7;
-                    let x_114 : i32 = x_7.one;
-                    if ((x_112 < x_114)) {
-                    } else {
-                      break;
-                    }
-                    i8_1 = 0;
-                    loop {
-                      let x_121 : i32 = i8_1;
-                      let x_123 : i32 = x_7.one;
-                      if ((x_121 < x_123)) {
-                      } else {
-                        break;
-                      }
-                      i9 = 0;
-                      loop {
-                        let x_130 : i32 = i9;
-                        let x_132 : i32 = x_7.one;
-                        if ((x_130 < x_132)) {
-                        } else {
-                          break;
-                        }
-                        let x_135 : i32 = a;
-                        a = (x_135 + 1);
-
-                        continuing {
-                          let x_137 : i32 = i9;
-                          i9 = (x_137 + 1);
-                        }
-                      }
-
-                      continuing {
-                        let x_139 : i32 = i8_1;
-                        i8_1 = (x_139 + 1);
-                      }
-                    }
-
-                    continuing {
-                      let x_141 : i32 = i7;
-                      i7 = (x_141 + 1);
-                    }
-                  }
-
-                  continuing {
-                    let x_143 : i32 = i6;
-                    i6 = (x_143 + 1);
-                  }
-                }
-                break;
-              }
-
-              continuing {
-                let x_145 : i32 = i5;
-                i5 = (x_145 + 1);
-              }
-            }
-
-            continuing {
-              let x_147 : i32 = i4;
-              i4 = (x_147 + 1);
-            }
-          }
-
-          continuing {
-            let x_149 : i32 = i3;
-            i3 = (x_149 + 1);
-          }
-        }
-
-        continuing {
-          let x_151 : i32 = i2;
-          i2 = (x_151 + 1);
-        }
-      }
-
-      continuing {
-        let x_153 : i32 = i1;
-        i1 = (x_153 + 1);
-      }
-    }
-
-    continuing {
-      let x_155 : i32 = i0;
-      i0 = (x_155 + 1);
-    }
-  }
-  let x_157 : i32 = a;
-  if ((x_157 == 3)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 291cdde..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  const float x_28 = asfloat(x_6[2].x);
-  const float x_30 = asfloat(x_6[3].x);
-  const float x_32 = asfloat(x_6[3].x);
-  const float x_34 = asfloat(x_6[2].x);
-  a = ((x_32 > x_34) ? x_30 : x_28);
-  b = cos(log(a));
-  const float x_40 = b;
-  x_GLF_color = float4(x_40, x_40, x_40, x_40);
-  const float x_42 = b;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const bool x_45 = (x_42 > x_44);
-  x_52_phi = x_45;
-  if (x_45) {
-    const float x_48 = b;
-    const float x_50 = asfloat(x_6[1].x);
-    x_51 = (x_48 < x_50);
-    x_52_phi = x_51;
-  }
-  if (x_52_phi) {
-    const float x_56 = asfloat(x_6[3].x);
-    const float x_58 = asfloat(x_6[4].x);
-    const float x_60 = asfloat(x_6[4].x);
-    const float x_62 = asfloat(x_6[3].x);
-    x_GLF_color = float4(x_56, x_58, x_60, x_62);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.msl
deleted file mode 100644
index 58f4554..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float b = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  float const x_28 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_30 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_32 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  a = select(x_28, x_30, (x_32 > x_34));
-  float const x_37 = a;
-  b = cos(log(x_37));
-  float const x_40 = b;
-  *(tint_symbol_3) = float4(x_40, x_40, x_40, x_40);
-  float const x_42 = b;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_45 = (x_42 > x_44);
-  x_52_phi = x_45;
-  if (x_45) {
-    float const x_48 = b;
-    float const x_50 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    x_51 = (x_48 < x_50);
-    x_52_phi = x_51;
-  }
-  bool const x_52 = x_52_phi;
-  if (x_52) {
-    float const x_56 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_58 = x_6.x_GLF_uniform_float_values.arr[4].el;
-    float const x_60 = x_6.x_GLF_uniform_float_values.arr[4].el;
-    float const x_62 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    *(tint_symbol_3) = float4(x_56, x_58, x_60, x_62);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 9b76f3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-         %44 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_51 "x_51"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-       %buf0 = OpTypeStruct %_arr_float_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %25 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-          %b = OpVariable %_ptr_Function_float Function %20
-       %x_51 = OpVariable %_ptr_Function_bool Function %25
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %25
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %32 = OpLoad %float %31
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %35 = OpLoad %float %34
-         %36 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %37 = OpLoad %float %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %39 = OpLoad %float %38
-         %41 = OpFOrdGreaterThan %bool %37 %39
-         %40 = OpSelect %float %41 %35 %32
-               OpStore %a %40
-         %42 = OpLoad %float %a
-         %45 = OpExtInst %float %44 Log %42
-         %43 = OpExtInst %float %44 Cos %45
-               OpStore %b %43
-         %46 = OpLoad %float %b
-         %47 = OpCompositeConstruct %v4float %46 %46 %46 %46
-               OpStore %x_GLF_color %47
-         %48 = OpLoad %float %b
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpFOrdGreaterThan %bool %48 %51
-               OpStore %x_52_phi %52
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-         %55 = OpLoad %float %b
-         %57 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %58 = OpLoad %float %57
-         %59 = OpFOrdLessThan %bool %55 %58
-               OpStore %x_51 %59
-         %60 = OpLoad %bool %x_51
-               OpStore %x_52_phi %60
-               OpBranch %53
-         %53 = OpLabel
-         %61 = OpLoad %bool %x_52_phi
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %65 = OpLoad %float %64
-         %67 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %68 = OpLoad %float %67
-         %69 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %70 = OpLoad %float %69
-         %71 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %72 = OpLoad %float %71
-         %73 = OpCompositeConstruct %v4float %65 %68 %70 %72
-               OpStore %x_GLF_color %73
-               OpBranch %62
-         %62 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-         %77 = OpLabel
-         %78 = OpFunctionCall %void %main_1
-         %79 = OpLoad %v4float %x_GLF_color
-         %80 = OpCompositeConstruct %main_out %79
-               OpReturnValue %80
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %82 = OpLabel
-         %83 = OpFunctionCall %main_out %main_inner
-         %84 = OpCompositeExtract %v4float %83 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b6b2e8d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  var x_51 : bool;
-  var x_52_phi : bool;
-  let x_28 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_30 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_32 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[2];
-  a = select(x_28, x_30, (x_32 > x_34));
-  let x_37 : f32 = a;
-  b = cos(log(x_37));
-  let x_40 : f32 = b;
-  x_GLF_color = vec4<f32>(x_40, x_40, x_40, x_40);
-  let x_42 : f32 = b;
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_45 : bool = (x_42 > x_44);
-  x_52_phi = x_45;
-  if (x_45) {
-    let x_48 : f32 = b;
-    let x_50 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_51 = (x_48 < x_50);
-    x_52_phi = x_51;
-  }
-  let x_52 : bool = x_52_phi;
-  if (x_52) {
-    let x_56 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_58 : f32 = x_6.x_GLF_uniform_float_values[4];
-    let x_60 : f32 = x_6.x_GLF_uniform_float_values[4];
-    let x_62 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_GLF_color = vec4<f32>(x_56, x_58, x_60, x_62);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 291cdde..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  const float x_28 = asfloat(x_6[2].x);
-  const float x_30 = asfloat(x_6[3].x);
-  const float x_32 = asfloat(x_6[3].x);
-  const float x_34 = asfloat(x_6[2].x);
-  a = ((x_32 > x_34) ? x_30 : x_28);
-  b = cos(log(a));
-  const float x_40 = b;
-  x_GLF_color = float4(x_40, x_40, x_40, x_40);
-  const float x_42 = b;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const bool x_45 = (x_42 > x_44);
-  x_52_phi = x_45;
-  if (x_45) {
-    const float x_48 = b;
-    const float x_50 = asfloat(x_6[1].x);
-    x_51 = (x_48 < x_50);
-    x_52_phi = x_51;
-  }
-  if (x_52_phi) {
-    const float x_56 = asfloat(x_6[3].x);
-    const float x_58 = asfloat(x_6[4].x);
-    const float x_60 = asfloat(x_6[4].x);
-    const float x_62 = asfloat(x_6[3].x);
-    x_GLF_color = float4(x_56, x_58, x_60, x_62);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.msl
deleted file mode 100644
index 58f4554..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float b = 0.0f;
-  bool x_51 = false;
-  bool x_52_phi = false;
-  float const x_28 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_30 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_32 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  a = select(x_28, x_30, (x_32 > x_34));
-  float const x_37 = a;
-  b = cos(log(x_37));
-  float const x_40 = b;
-  *(tint_symbol_3) = float4(x_40, x_40, x_40, x_40);
-  float const x_42 = b;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_45 = (x_42 > x_44);
-  x_52_phi = x_45;
-  if (x_45) {
-    float const x_48 = b;
-    float const x_50 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    x_51 = (x_48 < x_50);
-    x_52_phi = x_51;
-  }
-  bool const x_52 = x_52_phi;
-  if (x_52) {
-    float const x_56 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    float const x_58 = x_6.x_GLF_uniform_float_values.arr[4].el;
-    float const x_60 = x_6.x_GLF_uniform_float_values.arr[4].el;
-    float const x_62 = x_6.x_GLF_uniform_float_values.arr[3].el;
-    *(tint_symbol_3) = float4(x_56, x_58, x_60, x_62);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9b76f3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-         %44 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_51 "x_51"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-       %buf0 = OpTypeStruct %_arr_float_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %25 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-          %b = OpVariable %_ptr_Function_float Function %20
-       %x_51 = OpVariable %_ptr_Function_bool Function %25
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %25
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %32 = OpLoad %float %31
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %35 = OpLoad %float %34
-         %36 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %37 = OpLoad %float %36
-         %38 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %39 = OpLoad %float %38
-         %41 = OpFOrdGreaterThan %bool %37 %39
-         %40 = OpSelect %float %41 %35 %32
-               OpStore %a %40
-         %42 = OpLoad %float %a
-         %45 = OpExtInst %float %44 Log %42
-         %43 = OpExtInst %float %44 Cos %45
-               OpStore %b %43
-         %46 = OpLoad %float %b
-         %47 = OpCompositeConstruct %v4float %46 %46 %46 %46
-               OpStore %x_GLF_color %47
-         %48 = OpLoad %float %b
-         %50 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %51 = OpLoad %float %50
-         %52 = OpFOrdGreaterThan %bool %48 %51
-               OpStore %x_52_phi %52
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-         %55 = OpLoad %float %b
-         %57 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %58 = OpLoad %float %57
-         %59 = OpFOrdLessThan %bool %55 %58
-               OpStore %x_51 %59
-         %60 = OpLoad %bool %x_51
-               OpStore %x_52_phi %60
-               OpBranch %53
-         %53 = OpLabel
-         %61 = OpLoad %bool %x_52_phi
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %62
-         %63 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %65 = OpLoad %float %64
-         %67 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %68 = OpLoad %float %67
-         %69 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_4
-         %70 = OpLoad %float %69
-         %71 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %72 = OpLoad %float %71
-         %73 = OpCompositeConstruct %v4float %65 %68 %70 %72
-               OpStore %x_GLF_color %73
-               OpBranch %62
-         %62 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-         %77 = OpLabel
-         %78 = OpFunctionCall %void %main_1
-         %79 = OpLoad %v4float %x_GLF_color
-         %80 = OpCompositeConstruct %main_out %79
-               OpReturnValue %80
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %82 = OpLabel
-         %83 = OpFunctionCall %main_out %main_inner
-         %84 = OpCompositeExtract %v4float %83 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b6b2e8d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-schedule-dag-rrlist-mix-log-cos/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  var x_51 : bool;
-  var x_52_phi : bool;
-  let x_28 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_30 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_32 : f32 = x_6.x_GLF_uniform_float_values[3];
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[2];
-  a = select(x_28, x_30, (x_32 > x_34));
-  let x_37 : f32 = a;
-  b = cos(log(x_37));
-  let x_40 : f32 = b;
-  x_GLF_color = vec4<f32>(x_40, x_40, x_40, x_40);
-  let x_42 : f32 = b;
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_45 : bool = (x_42 > x_44);
-  x_52_phi = x_45;
-  if (x_45) {
-    let x_48 : f32 = b;
-    let x_50 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_51 = (x_48 < x_50);
-    x_52_phi = x_51;
-  }
-  let x_52 : bool = x_52_phi;
-  if (x_52) {
-    let x_56 : f32 = x_6.x_GLF_uniform_float_values[3];
-    let x_58 : f32 = x_6.x_GLF_uniform_float_values[4];
-    let x_60 : f32 = x_6.x_GLF_uniform_float_values[4];
-    let x_62 : f32 = x_6.x_GLF_uniform_float_values[3];
-    x_GLF_color = vec4<f32>(x_56, x_58, x_60, x_62);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ef42aea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_25 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_28 = asint(x_5[1].x);
-  const int x_31 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_34 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_25), float(x_28), float(x_31), float(x_34));
-  v = x_GLF_color;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_GLF_color = v;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.msl
deleted file mode 100644
index 19c1772..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  int const x_25 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_28 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_31 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_34 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_25), float(x_28), float(x_31), float(x_34));
-  float4 const x_37 = *(tint_symbol_3);
-  v = x_37;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 const x_38 = v;
-  *(tint_symbol_3) = x_38;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 87a8b88..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,91 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %40 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %42 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %24 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %25 = OpLoad %int %24
-         %27 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %30 = OpLoad %int %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %32 = OpLoad %int %31
-         %33 = OpConvertSToF %float %25
-         %34 = OpConvertSToF %float %28
-         %35 = OpConvertSToF %float %30
-         %36 = OpConvertSToF %float %32
-         %37 = OpCompositeConstruct %v4float %33 %34 %35 %36
-               OpStore %x_GLF_color %37
-         %38 = OpLoad %v4float %x_GLF_color
-               OpStore %v %38
-               OpStore %x_GLF_color %40
-         %41 = OpLoad %v4float %v
-               OpStore %x_GLF_color %41
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %42
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-         %47 = OpLoad %v4float %x_GLF_color
-         %48 = OpCompositeConstruct %main_out %47
-               OpReturnValue %48
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %50 = OpLabel
-         %51 = OpFunctionCall %main_out %main_inner
-         %52 = OpCompositeExtract %v4float %51 0
-               OpStore %x_GLF_color_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 501fd60..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_25 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_28 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_31 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_34 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_25), f32(x_28), f32(x_31), f32(x_34));
-  let x_37 : vec4<f32> = x_GLF_color;
-  v = x_37;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_38 : vec4<f32> = v;
-  x_GLF_color = x_38;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index ef42aea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_25 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_28 = asint(x_5[1].x);
-  const int x_31 = asint(x_5[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_34 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  x_GLF_color = float4(float(x_25), float(x_28), float(x_31), float(x_34));
-  v = x_GLF_color;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_GLF_color = v;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.msl
deleted file mode 100644
index 19c1772..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  int const x_25 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_28 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_31 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  int const x_34 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  *(tint_symbol_3) = float4(float(x_25), float(x_28), float(x_31), float(x_34));
-  float4 const x_37 = *(tint_symbol_3);
-  v = x_37;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 const x_38 = v;
-  *(tint_symbol_3) = x_38;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 87a8b88..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,91 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %40 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %42 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %24 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %25 = OpLoad %int %24
-         %27 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %30 = OpLoad %int %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %32 = OpLoad %int %31
-         %33 = OpConvertSToF %float %25
-         %34 = OpConvertSToF %float %28
-         %35 = OpConvertSToF %float %30
-         %36 = OpConvertSToF %float %32
-         %37 = OpCompositeConstruct %v4float %33 %34 %35 %36
-               OpStore %x_GLF_color %37
-         %38 = OpLoad %v4float %x_GLF_color
-               OpStore %v %38
-               OpStore %x_GLF_color %40
-         %41 = OpLoad %v4float %v
-               OpStore %x_GLF_color %41
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %42
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %main_1
-         %47 = OpLoad %v4float %x_GLF_color
-         %48 = OpCompositeConstruct %main_out %47
-               OpReturnValue %48
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %50 = OpLabel
-         %51 = OpFunctionCall %main_out %main_inner
-         %52 = OpCompositeExtract %v4float %51 0
-               OpStore %x_GLF_color_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 501fd60..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-assign-back-and-forth/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_25 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_28 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_31 : i32 = x_5.x_GLF_uniform_int_values[1];
-  let x_34 : i32 = x_5.x_GLF_uniform_int_values[0];
-  x_GLF_color = vec4<f32>(f32(x_25), f32(x_28), f32(x_31), f32(x_34));
-  let x_37 : vec4<f32> = x_GLF_color;
-  v = x_37;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_38 : vec4<f32> = v;
-  x_GLF_color = x_38;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b3334f3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int c = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[2].x);
-  c = x_27;
-  const int x_29 = asint(x_6[2].x);
-  i = x_29;
-  while (true) {
-    const int x_34 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_36 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    c = ~(i);
-    c = clamp(c, 0, 3);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_46 = asint(x_6[1].x);
-  const float x_47 = float(x_46);
-  x_GLF_color = float4(x_47, x_47, x_47, x_47);
-  const int x_49 = c;
-  const int x_51 = asint(x_6[1].x);
-  if ((x_49 == x_51)) {
-    const int x_56 = asint(x_6[2].x);
-    const int x_59 = asint(x_6[1].x);
-    const int x_62 = asint(x_6[1].x);
-    const int x_65 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2d3d142..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int c = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  c = x_27;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_29;
-  while (true) {
-    int const x_34 = i;
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    int const x_39 = i;
-    c = ~(x_39);
-    int const x_41 = c;
-    c = clamp(x_41, 0, 3);
-    {
-      int const x_43 = i;
-      i = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-    }
-  }
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_47 = float(x_46);
-  *(tint_symbol_3) = float4(x_47, x_47, x_47, x_47);
-  int const x_49 = c;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_49 == x_51)) {
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_59 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3b81250..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 86
-; Schema: 0
-               OpCapability Shader
-         %47 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %75 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %c = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %27 = OpLoad %int %26
-               OpStore %c %27
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %29 = OpLoad %int %28
-               OpStore %i %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpSLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %31
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %44 = OpNot %int %43
-               OpStore %c %44
-         %45 = OpLoad %int %c
-         %46 = OpExtInst %int %47 SClamp %45 %int_0 %int_3
-               OpStore %c %46
-               OpBranch %32
-         %32 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %i %51
-               OpBranch %30
-         %31 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpConvertSToF %float %53
-         %55 = OpCompositeConstruct %v4float %54 %54 %54 %54
-               OpStore %x_GLF_color %55
-         %56 = OpLoad %int %c
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpIEqual %bool %56 %58
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %60
-         %61 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %63
-         %71 = OpConvertSToF %float %65
-         %72 = OpConvertSToF %float %67
-         %73 = OpConvertSToF %float %69
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-               OpStore %x_GLF_color %74
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %75
-         %78 = OpLabel
-         %79 = OpFunctionCall %void %main_1
-         %80 = OpLoad %v4float %x_GLF_color
-         %81 = OpCompositeConstruct %main_out %80
-               OpReturnValue %81
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %83 = OpLabel
-         %84 = OpFunctionCall %main_out %main_inner
-         %85 = OpCompositeExtract %v4float %84 0
-               OpStore %x_GLF_color_1_1 %85
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 97a2a50..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[2];
-  c = x_27;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_29;
-  loop {
-    let x_34 : i32 = i;
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    let x_39 : i32 = i;
-    c = ~(x_39);
-    let x_41 : i32 = c;
-    c = clamp(x_41, 0, 3);
-
-    continuing {
-      let x_43 : i32 = i;
-      i = (x_43 + 1);
-    }
-  }
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_47 : f32 = f32(x_46);
-  x_GLF_color = vec4<f32>(x_47, x_47, x_47, x_47);
-  let x_49 : i32 = c;
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_49 == x_51)) {
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_59 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b3334f3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int c = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[2].x);
-  c = x_27;
-  const int x_29 = asint(x_6[2].x);
-  i = x_29;
-  while (true) {
-    const int x_34 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_36 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    c = ~(i);
-    c = clamp(c, 0, 3);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_46 = asint(x_6[1].x);
-  const float x_47 = float(x_46);
-  x_GLF_color = float4(x_47, x_47, x_47, x_47);
-  const int x_49 = c;
-  const int x_51 = asint(x_6[1].x);
-  if ((x_49 == x_51)) {
-    const int x_56 = asint(x_6[2].x);
-    const int x_59 = asint(x_6[1].x);
-    const int x_62 = asint(x_6[1].x);
-    const int x_65 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2d3d142..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int c = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  c = x_27;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  i = x_29;
-  while (true) {
-    int const x_34 = i;
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    int const x_39 = i;
-    c = ~(x_39);
-    int const x_41 = c;
-    c = clamp(x_41, 0, 3);
-    {
-      int const x_43 = i;
-      i = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-    }
-  }
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_47 = float(x_46);
-  *(tint_symbol_3) = float4(x_47, x_47, x_47, x_47);
-  int const x_49 = c;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_49 == x_51)) {
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_59 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3b81250..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 86
-; Schema: 0
-               OpCapability Shader
-         %47 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %75 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %c = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %27 = OpLoad %int %26
-               OpStore %c %27
-         %28 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %29 = OpLoad %int %28
-               OpStore %i %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpSLessThan %bool %34 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %31
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %44 = OpNot %int %43
-               OpStore %c %44
-         %45 = OpLoad %int %c
-         %46 = OpExtInst %int %47 SClamp %45 %int_0 %int_3
-               OpStore %c %46
-               OpBranch %32
-         %32 = OpLabel
-         %49 = OpLoad %int %i
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %i %51
-               OpBranch %30
-         %31 = OpLabel
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %53 = OpLoad %int %52
-         %54 = OpConvertSToF %float %53
-         %55 = OpCompositeConstruct %v4float %54 %54 %54 %54
-               OpStore %x_GLF_color %55
-         %56 = OpLoad %int %c
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpIEqual %bool %56 %58
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %60
-         %61 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %63
-         %71 = OpConvertSToF %float %65
-         %72 = OpConvertSToF %float %67
-         %73 = OpConvertSToF %float %69
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-               OpStore %x_GLF_color %74
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %75
-         %78 = OpLabel
-         %79 = OpFunctionCall %void %main_1
-         %80 = OpLoad %v4float %x_GLF_color
-         %81 = OpCompositeConstruct %main_out %80
-               OpReturnValue %81
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %83 = OpLabel
-         %84 = OpFunctionCall %main_out %main_inner
-         %85 = OpCompositeExtract %v4float %84 0
-               OpStore %x_GLF_color_1_1 %85
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 97a2a50..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-inverse-clamp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[2];
-  c = x_27;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[2];
-  i = x_29;
-  loop {
-    let x_34 : i32 = i;
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    let x_39 : i32 = i;
-    c = ~(x_39);
-    let x_41 : i32 = c;
-    c = clamp(x_41, 0, 3);
-
-    continuing {
-      let x_43 : i32 = i;
-      i = (x_43 + 1);
-    }
-  }
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_47 : f32 = f32(x_46);
-  x_GLF_color = vec4<f32>(x_47, x_47, x_47, x_47);
-  let x_49 : i32 = c;
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_49 == x_51)) {
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_59 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 89e0d81..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_5 : register(b1, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-
-void main_1() {
-  const float x_29 = asfloat(x_5[0].x);
-  const float x_31 = asfloat(x_5[0].y);
-  if ((x_29 < x_31)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_37 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const int x_40 = asint(x_7[1].x);
-    const int x_43 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_37), float(x_40), float(x_43), float(x_46));
-    const float x_50 = asfloat(x_5[0].x);
-    const float x_52 = asfloat(x_5[0].y);
-    if ((x_50 > x_52)) {
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_57 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      const float x_58 = float(x_57);
-      x_GLF_color = float4(x_58, x_58, x_58, x_58);
-    }
-    return;
-  } else {
-    const int x_61 = asint(x_7[1].x);
-    const float x_62 = float(x_61);
-    x_GLF_color = float4(x_62, x_62, x_62, x_62);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.msl
deleted file mode 100644
index f9b353c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_5, constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float const x_29 = x_5.v1.x;
-  float const x_31 = x_5.v1.y;
-  if ((x_29 < x_31)) {
-    int const x_37 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_40 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_43 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_46 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_37), float(x_40), float(x_43), float(x_46));
-    float const x_50 = x_5.v1.x;
-    float const x_52 = x_5.v1.y;
-    if ((x_50 > x_52)) {
-      int const x_57 = x_7.x_GLF_uniform_int_values.arr[0].el;
-      float const x_58 = float(x_57);
-      *(tint_symbol_3) = float4(x_58, x_58, x_58, x_58);
-    }
-    return;
-  } else {
-    int const x_61 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_62 = float(x_61);
-    *(tint_symbol_3) = float4(x_62, x_62, x_62, x_62);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_5, constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_5 [[buffer(0)]], constant buf0& x_7 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 142fdab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 77
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_5 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %66 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %25 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %29 = OpLoad %float %28
-         %30 = OpFOrdLessThan %bool %26 %29
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %46 = OpConvertSToF %float %38
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpConvertSToF %float %45
-         %50 = OpCompositeConstruct %v4float %46 %47 %48 %49
-               OpStore %x_GLF_color %50
-         %51 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %52 = OpLoad %float %51
-         %53 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %54 = OpLoad %float %53
-         %55 = OpFOrdGreaterThan %bool %52 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpConvertSToF %float %59
-         %61 = OpCompositeConstruct %v4float %60 %60 %60 %60
-               OpStore %x_GLF_color %61
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-         %34 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpConvertSToF %float %63
-         %65 = OpCompositeConstruct %v4float %64 %64 %64 %64
-               OpStore %x_GLF_color %65
-               OpBranch %32
-         %32 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %66
-         %69 = OpLabel
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %74 = OpLabel
-         %75 = OpFunctionCall %main_out %main_inner
-         %76 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %76
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 61503b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,53 +0,0 @@
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-fn main_1() {
-  let x_29 : f32 = x_5.v1.x;
-  let x_31 : f32 = x_5.v1.y;
-  if ((x_29 < x_31)) {
-    let x_37 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_40 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_43 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_46 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_37), f32(x_40), f32(x_43), f32(x_46));
-    let x_50 : f32 = x_5.v1.x;
-    let x_52 : f32 = x_5.v1.y;
-    if ((x_50 > x_52)) {
-      let x_57 : i32 = x_7.x_GLF_uniform_int_values[0];
-      let x_58 : f32 = f32(x_57);
-      x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-    }
-    return;
-  } else {
-    let x_61 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_62 : f32 = f32(x_61);
-    x_GLF_color = vec4<f32>(x_62, x_62, x_62, x_62);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 89e0d81..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_5 : register(b1, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-
-void main_1() {
-  const float x_29 = asfloat(x_5[0].x);
-  const float x_31 = asfloat(x_5[0].y);
-  if ((x_29 < x_31)) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_37 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    const int x_40 = asint(x_7[1].x);
-    const int x_43 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_46 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    x_GLF_color = float4(float(x_37), float(x_40), float(x_43), float(x_46));
-    const float x_50 = asfloat(x_5[0].x);
-    const float x_52 = asfloat(x_5[0].y);
-    if ((x_50 > x_52)) {
-      const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-      const int x_57 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-      const float x_58 = float(x_57);
-      x_GLF_color = float4(x_58, x_58, x_58, x_58);
-    }
-    return;
-  } else {
-    const int x_61 = asint(x_7[1].x);
-    const float x_62 = float(x_61);
-    x_GLF_color = float4(x_62, x_62, x_62, x_62);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.msl
deleted file mode 100644
index f9b353c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_5, constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float const x_29 = x_5.v1.x;
-  float const x_31 = x_5.v1.y;
-  if ((x_29 < x_31)) {
-    int const x_37 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_40 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_43 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_46 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_37), float(x_40), float(x_43), float(x_46));
-    float const x_50 = x_5.v1.x;
-    float const x_52 = x_5.v1.y;
-    if ((x_50 > x_52)) {
-      int const x_57 = x_7.x_GLF_uniform_int_values.arr[0].el;
-      float const x_58 = float(x_57);
-      *(tint_symbol_3) = float4(x_58, x_58, x_58, x_58);
-    }
-    return;
-  } else {
-    int const x_61 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    float const x_62 = float(x_61);
-    *(tint_symbol_3) = float4(x_62, x_62, x_62, x_62);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_5, constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_5 [[buffer(0)]], constant buf0& x_7 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 142fdab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 77
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_5 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %66 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %25 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %29 = OpLoad %float %28
-         %30 = OpFOrdLessThan %bool %26 %29
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %46 = OpConvertSToF %float %38
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpConvertSToF %float %45
-         %50 = OpCompositeConstruct %v4float %46 %47 %48 %49
-               OpStore %x_GLF_color %50
-         %51 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %52 = OpLoad %float %51
-         %53 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %54 = OpLoad %float %53
-         %55 = OpFOrdGreaterThan %bool %52 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %60 = OpConvertSToF %float %59
-         %61 = OpCompositeConstruct %v4float %60 %60 %60 %60
-               OpStore %x_GLF_color %61
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-         %34 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %64 = OpConvertSToF %float %63
-         %65 = OpCompositeConstruct %v4float %64 %64 %64 %64
-               OpStore %x_GLF_color %65
-               OpBranch %32
-         %32 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %66
-         %69 = OpLabel
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %74 = OpLabel
-         %75 = OpFunctionCall %main_out %main_inner
-         %76 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %76
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 61503b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-lt-gt/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,53 +0,0 @@
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-fn main_1() {
-  let x_29 : f32 = x_5.v1.x;
-  let x_31 : f32 = x_5.v1.y;
-  if ((x_29 < x_31)) {
-    let x_37 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_40 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_43 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_46 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_37), f32(x_40), f32(x_43), f32(x_46));
-    let x_50 : f32 = x_5.v1.x;
-    let x_52 : f32 = x_5.v1.y;
-    if ((x_50 > x_52)) {
-      let x_57 : i32 = x_7.x_GLF_uniform_int_values[0];
-      let x_58 : f32 = f32(x_57);
-      x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-    }
-    return;
-  } else {
-    let x_61 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_62 : f32 = f32(x_61);
-    x_GLF_color = vec4<f32>(x_62, x_62, x_62, x_62);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index fb3d5a7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  bool x_29 = false;
-  bool x_30_phi = false;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_23 = asfloat(x_5[0].x);
-  const bool x_24 = (x_23 < 0.0f);
-  x_30_phi = x_24;
-  if (x_24) {
-    const float x_28 = asfloat(x_5[0].x);
-    x_29 = (x_28 < 0.0f);
-    x_30_phi = x_29;
-  }
-  if (x_30_phi) {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3586605..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_29 = false;
-  bool x_30_phi = false;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float const x_23 = x_5.one;
-  bool const x_24 = (x_23 < 0.0f);
-  x_30_phi = x_24;
-  if (x_24) {
-    float const x_28 = x_5.one;
-    x_29 = (x_28 < 0.0f);
-    x_30_phi = x_29;
-  }
-  bool const x_30 = x_30_phi;
-  if (x_30) {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index da3ef5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_29 "x_29"
-               OpName %x_30_phi "x_30_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %18 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %39 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %40 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_29 = OpVariable %_ptr_Function_bool Function %18
-   %x_30_phi = OpVariable %_ptr_Function_bool Function %18
-               OpStore %x_GLF_color %21
-         %25 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpFOrdLessThan %bool %26 %float_0
-               OpStore %x_30_phi %27
-               OpSelectionMerge %28 None
-               OpBranchConditional %27 %29 %28
-         %29 = OpLabel
-         %30 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %31 = OpLoad %float %30
-         %32 = OpFOrdLessThan %bool %31 %float_0
-               OpStore %x_29 %32
-         %33 = OpLoad %bool %x_29
-               OpStore %x_30_phi %33
-               OpBranch %28
-         %28 = OpLabel
-         %34 = OpLoad %bool %x_30_phi
-               OpSelectionMerge %35 None
-               OpBranchConditional %34 %36 %37
-         %36 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %40
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index cc257f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_29 : bool;
-  var x_30_phi : bool;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_23 : f32 = x_5.one;
-  let x_24 : bool = (x_23 < 0.0);
-  x_30_phi = x_24;
-  if (x_24) {
-    let x_28 : f32 = x_5.one;
-    x_29 = (x_28 < 0.0);
-    x_30_phi = x_29;
-  }
-  let x_30 : bool = x_30_phi;
-  if (x_30) {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index fb3d5a7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  bool x_29 = false;
-  bool x_30_phi = false;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_23 = asfloat(x_5[0].x);
-  const bool x_24 = (x_23 < 0.0f);
-  x_30_phi = x_24;
-  if (x_24) {
-    const float x_28 = asfloat(x_5[0].x);
-    x_29 = (x_28 < 0.0f);
-    x_30_phi = x_29;
-  }
-  if (x_30_phi) {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3586605..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_29 = false;
-  bool x_30_phi = false;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float const x_23 = x_5.one;
-  bool const x_24 = (x_23 < 0.0f);
-  x_30_phi = x_24;
-  if (x_24) {
-    float const x_28 = x_5.one;
-    x_29 = (x_28 < 0.0f);
-    x_30_phi = x_29;
-  }
-  bool const x_30 = x_30_phi;
-  if (x_30) {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index da3ef5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_29 "x_29"
-               OpName %x_30_phi "x_30_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %18 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %39 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %40 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_29 = OpVariable %_ptr_Function_bool Function %18
-   %x_30_phi = OpVariable %_ptr_Function_bool Function %18
-               OpStore %x_GLF_color %21
-         %25 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpFOrdLessThan %bool %26 %float_0
-               OpStore %x_30_phi %27
-               OpSelectionMerge %28 None
-               OpBranchConditional %27 %29 %28
-         %29 = OpLabel
-         %30 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0
-         %31 = OpLoad %float %30
-         %32 = OpFOrdLessThan %bool %31 %float_0
-               OpStore %x_29 %32
-         %33 = OpLoad %bool %x_29
-               OpStore %x_30_phi %33
-               OpBranch %28
-         %28 = OpLabel
-         %34 = OpLoad %bool %x_30_phi
-               OpSelectionMerge %35 None
-               OpBranchConditional %34 %36 %37
-         %36 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %35
-         %37 = OpLabel
-               OpStore %x_GLF_color %40
-               OpBranch %35
-         %35 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index cc257f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-selection-dag-same-cond-twice/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_29 : bool;
-  var x_30_phi : bool;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_23 : f32 = x_5.one;
-  let x_24 : bool = (x_23 < 0.0);
-  x_30_phi = x_24;
-  if (x_24) {
-    let x_28 : f32 = x_5.one;
-    x_29 = (x_28 < 0.0);
-    x_30_phi = x_29;
-  }
-  let x_30 : bool = x_30_phi;
-  if (x_30) {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.hlsl
deleted file mode 100644
index a5f3b7a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,115 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[6];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_36 = 0;
-  bool x_74 = false;
-  float4 x_33_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_36_phi = 0;
-  int x_38_phi = 0;
-  bool x_75_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_31 = asint(x_5[1].x);
-  x_33_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_36_phi = x_29;
-  x_38_phi = x_31;
-  while (true) {
-    float4 x_53 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_39 = 0;
-    float4 x_34_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_62_phi = 0;
-    const float4 x_33 = x_33_phi;
-    x_36 = x_36_phi;
-    const int x_38 = x_38_phi;
-    const int x_41 = asint(x_5[4].x);
-    if ((x_38 < x_41)) {
-    } else {
-      break;
-    }
-    float4 x_53_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_56_phi = 0;
-    switch(0u) {
-      default: {
-        const int x_48 = asint(x_5[3].x);
-        if ((x_38 > x_48)) {
-          x_34_phi = x_33;
-          x_62_phi = 2;
-          break;
-        }
-        x_53_phi = x_33;
-        x_56_phi = x_29;
-        while (true) {
-          float4 x_54 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-          int x_57 = 0;
-          x_53 = x_53_phi;
-          const int x_56 = x_56_phi;
-          if ((x_56 < x_41)) {
-          } else {
-            break;
-          }
-          {
-            const float x_61 = float((x_38 + x_56));
-            x_54 = float4(x_61, x_61, x_61, x_61);
-            x_57 = (x_56 + 1);
-            x_53_phi = x_54;
-            x_56_phi = x_57;
-          }
-        }
-        x_GLF_color = x_53;
-        x_34_phi = x_53;
-        x_62_phi = x_31;
-        break;
-      }
-    }
-    const float4 x_34 = x_34_phi;
-    const int x_62 = x_62_phi;
-    {
-      x_39 = (x_38 + 1);
-      x_33_phi = x_34;
-      x_36_phi = asint((x_36 + asint(x_62)));
-      x_38_phi = x_39;
-    }
-  }
-  const float4 x_63 = x_GLF_color;
-  const int x_65 = asint(x_5[2].x);
-  const float x_66 = float(x_65);
-  const bool x_69 = all((x_63 == float4(x_66, x_66, x_66, x_66)));
-  x_75_phi = x_69;
-  if (x_69) {
-    const int x_73 = asint(x_5[5].x);
-    x_74 = (x_36 == asint(x_73));
-    x_75_phi = x_74;
-  }
-  if (x_75_phi) {
-    const float x_79 = float(x_31);
-    const float x_80 = float(x_29);
-    x_GLF_color = float4(x_79, x_80, x_80, x_79);
-  } else {
-    const float x_82 = float(x_29);
-    x_GLF_color = float4(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.msl
deleted file mode 100644
index ad2ebaf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,125 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[6];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int x_36 = 0;
-  bool x_74 = false;
-  float4 x_33_phi = 0.0f;
-  int x_36_phi = 0;
-  int x_38_phi = 0;
-  bool x_75_phi = false;
-  int const x_29 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_31 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  x_33_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_36_phi = x_29;
-  x_38_phi = x_31;
-  while (true) {
-    float4 x_53 = 0.0f;
-    int x_39 = 0;
-    float4 x_34_phi = 0.0f;
-    int x_62_phi = 0;
-    float4 const x_33 = x_33_phi;
-    x_36 = x_36_phi;
-    int const x_38 = x_38_phi;
-    int const x_41 = x_5.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_38 < x_41)) {
-    } else {
-      break;
-    }
-    float4 x_53_phi = 0.0f;
-    int x_56_phi = 0;
-    switch(0u) {
-      default: {
-        int const x_48 = x_5.x_GLF_uniform_int_values.arr[3].el;
-        if ((x_38 > x_48)) {
-          x_34_phi = x_33;
-          x_62_phi = 2;
-          break;
-        }
-        x_53_phi = x_33;
-        x_56_phi = x_29;
-        while (true) {
-          float4 x_54 = 0.0f;
-          int x_57 = 0;
-          x_53 = x_53_phi;
-          int const x_56 = x_56_phi;
-          if ((x_56 < x_41)) {
-          } else {
-            break;
-          }
-          {
-            float const x_61 = float(as_type<int>((as_type<uint>(x_38) + as_type<uint>(x_56))));
-            x_54 = float4(x_61, x_61, x_61, x_61);
-            x_57 = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-            x_53_phi = x_54;
-            x_56_phi = x_57;
-          }
-        }
-        *(tint_symbol_3) = x_53;
-        x_34_phi = x_53;
-        x_62_phi = x_31;
-        break;
-      }
-    }
-    float4 const x_34 = x_34_phi;
-    int const x_62 = x_62_phi;
-    {
-      x_39 = as_type<int>((as_type<uint>(x_38) + as_type<uint>(1)));
-      x_33_phi = x_34;
-      x_36_phi = as_type<int>(as_type<int>((as_type<uint>(x_36) + as_type<uint>(as_type<int>(x_62)))));
-      x_38_phi = x_39;
-    }
-  }
-  float4 const x_63 = *(tint_symbol_3);
-  int const x_65 = x_5.x_GLF_uniform_int_values.arr[2].el;
-  float const x_66 = float(x_65);
-  bool const x_69 = all((x_63 == float4(x_66, x_66, x_66, x_66)));
-  x_75_phi = x_69;
-  if (x_69) {
-    int const x_73 = x_5.x_GLF_uniform_int_values.arr[5].el;
-    x_74 = (x_36 == as_type<int>(x_73));
-    x_75_phi = x_74;
-  }
-  bool const x_75 = x_75_phi;
-  if (x_75) {
-    float const x_79 = float(x_31);
-    float const x_80 = float(x_29);
-    *(tint_symbol_3) = float4(x_79, x_80, x_80, x_79);
-  } else {
-    float const x_82 = float(x_29);
-    *(tint_symbol_3) = float4(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index 51bbad6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,238 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 135
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_74 "x_74"
-               OpName %x_33_phi "x_33_phi"
-               OpName %x_36_phi "x_36_phi"
-               OpName %x_38_phi "x_38_phi"
-               OpName %x_75_phi "x_75_phi"
-               OpName %x_53 "x_53"
-               OpName %x_39 "x_39"
-               OpName %x_34_phi "x_34_phi"
-               OpName %x_62_phi "x_62_phi"
-               OpName %x_53_phi "x_53_phi"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_54 "x_54"
-               OpName %x_57 "x_57"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_6 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_6 = OpConstant %uint 6
-%_arr_int_uint_6 = OpTypeArray %int %uint_6
-       %buf0 = OpTypeStruct %_arr_int_uint_6
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %25 = OpConstantNull %bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %40 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-     %v4bool = OpTypeVector %bool 4
-      %int_5 = OpConstant %int 5
-   %main_out = OpTypeStruct %v4float
-        %124 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_int Function %21
-       %x_74 = OpVariable %_ptr_Function_bool Function %25
-   %x_33_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_36_phi = OpVariable %_ptr_Function_int Function %21
-   %x_38_phi = OpVariable %_ptr_Function_int Function %21
-   %x_75_phi = OpVariable %_ptr_Function_bool Function %25
-       %x_53 = OpVariable %_ptr_Function_v4float Function %5
-       %x_39 = OpVariable %_ptr_Function_int Function %21
-   %x_34_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_62_phi = OpVariable %_ptr_Function_int Function %21
-   %x_53_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_56_phi = OpVariable %_ptr_Function_int Function %21
-       %x_54 = OpVariable %_ptr_Function_v4float Function %5
-       %x_57 = OpVariable %_ptr_Function_int Function %21
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %37 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %38 = OpLoad %int %37
-               OpStore %x_33_phi %40
-               OpStore %x_36_phi %35
-               OpStore %x_38_phi %38
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %49 = OpLoad %v4float %x_33_phi
-         %50 = OpLoad %int %x_36_phi
-               OpStore %x_36 %50
-         %51 = OpLoad %int %x_38_phi
-         %53 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_4
-         %54 = OpLoad %int %53
-         %55 = OpSLessThan %bool %51 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpBranch %56
-         %58 = OpLabel
-               OpBranch %42
-         %56 = OpLabel
-               OpSelectionMerge %61 None
-               OpSwitch %uint_0 %62
-         %62 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_3
-         %65 = OpLoad %int %64
-         %66 = OpSGreaterThan %bool %51 %65
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-               OpStore %x_34_phi %49
-               OpStore %x_62_phi %int_2
-               OpBranch %61
-         %67 = OpLabel
-               OpStore %x_53_phi %49
-               OpStore %x_56_phi %35
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %76 = OpLoad %v4float %x_53_phi
-               OpStore %x_53 %76
-         %77 = OpLoad %int %x_56_phi
-         %78 = OpSLessThan %bool %77 %54
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %71
-         %79 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-         %83 = OpIAdd %int %51 %77
-         %82 = OpConvertSToF %float %83
-         %84 = OpCompositeConstruct %v4float %82 %82 %82 %82
-               OpStore %x_54 %84
-         %85 = OpIAdd %int %77 %int_1
-               OpStore %x_57 %85
-         %86 = OpLoad %v4float %x_54
-               OpStore %x_53_phi %86
-         %87 = OpLoad %int %x_57
-               OpStore %x_56_phi %87
-               OpBranch %70
-         %71 = OpLabel
-         %88 = OpLoad %v4float %x_53
-               OpStore %x_GLF_color %88
-         %89 = OpLoad %v4float %x_53
-               OpStore %x_34_phi %89
-               OpStore %x_62_phi %38
-               OpBranch %61
-         %61 = OpLabel
-         %90 = OpLoad %v4float %x_34_phi
-         %91 = OpLoad %int %x_62_phi
-               OpBranch %43
-         %43 = OpLabel
-         %92 = OpIAdd %int %51 %int_1
-               OpStore %x_39 %92
-               OpStore %x_33_phi %90
-         %94 = OpLoad %int %x_36
-         %95 = OpCopyObject %int %91
-         %96 = OpIAdd %int %94 %95
-         %93 = OpCopyObject %int %96
-               OpStore %x_36_phi %93
-         %97 = OpLoad %int %x_39
-               OpStore %x_38_phi %97
-               OpBranch %41
-         %42 = OpLabel
-         %98 = OpLoad %v4float %x_GLF_color
-         %99 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-        %100 = OpLoad %int %99
-        %101 = OpConvertSToF %float %100
-        %103 = OpCompositeConstruct %v4float %101 %101 %101 %101
-        %104 = OpFOrdEqual %v4bool %98 %103
-        %102 = OpAll %bool %104
-               OpStore %x_75_phi %102
-               OpSelectionMerge %106 None
-               OpBranchConditional %102 %107 %106
-        %107 = OpLabel
-        %109 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_5
-        %110 = OpLoad %int %109
-        %111 = OpLoad %int %x_36
-        %112 = OpCopyObject %int %110
-        %113 = OpIEqual %bool %111 %112
-               OpStore %x_74 %113
-        %114 = OpLoad %bool %x_74
-               OpStore %x_75_phi %114
-               OpBranch %106
-        %106 = OpLabel
-        %115 = OpLoad %bool %x_75_phi
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-        %119 = OpConvertSToF %float %38
-        %120 = OpConvertSToF %float %35
-        %121 = OpCompositeConstruct %v4float %119 %120 %120 %119
-               OpStore %x_GLF_color %121
-               OpBranch %116
-        %118 = OpLabel
-        %122 = OpConvertSToF %float %35
-        %123 = OpCompositeConstruct %v4float %122 %122 %122 %122
-               OpStore %x_GLF_color %123
-               OpBranch %116
-        %116 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %124
-        %127 = OpLabel
-        %128 = OpFunctionCall %void %main_1
-        %129 = OpLoad %v4float %x_GLF_color
-        %130 = OpCompositeConstruct %main_out %129
-               OpReturnValue %130
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %132 = OpLabel
-        %133 = OpFunctionCall %main_out %main_inner
-        %134 = OpCompositeExtract %v4float %133 0
-               OpStore %x_GLF_color_1_1 %134
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index 295609c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,113 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 6>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : i32;
-  var x_74 : bool;
-  var x_33_phi : vec4<f32>;
-  var x_36_phi : i32;
-  var x_38_phi : i32;
-  var x_75_phi : bool;
-  let x_29 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_31 : i32 = x_5.x_GLF_uniform_int_values[1];
-  x_33_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  x_36_phi = x_29;
-  x_38_phi = x_31;
-  loop {
-    var x_53 : vec4<f32>;
-    var x_39 : i32;
-    var x_34_phi : vec4<f32>;
-    var x_62_phi : i32;
-    let x_33 : vec4<f32> = x_33_phi;
-    x_36 = x_36_phi;
-    let x_38 : i32 = x_38_phi;
-    let x_41 : i32 = x_5.x_GLF_uniform_int_values[4];
-    if ((x_38 < x_41)) {
-    } else {
-      break;
-    }
-    var x_53_phi : vec4<f32>;
-    var x_56_phi : i32;
-    switch(0u) {
-      default: {
-        let x_48 : i32 = x_5.x_GLF_uniform_int_values[3];
-        if ((x_38 > x_48)) {
-          x_34_phi = x_33;
-          x_62_phi = 2;
-          break;
-        }
-        x_53_phi = x_33;
-        x_56_phi = x_29;
-        loop {
-          var x_54 : vec4<f32>;
-          var x_57 : i32;
-          x_53 = x_53_phi;
-          let x_56 : i32 = x_56_phi;
-          if ((x_56 < x_41)) {
-          } else {
-            break;
-          }
-
-          continuing {
-            let x_61 : f32 = f32((x_38 + x_56));
-            x_54 = vec4<f32>(x_61, x_61, x_61, x_61);
-            x_57 = (x_56 + 1);
-            x_53_phi = x_54;
-            x_56_phi = x_57;
-          }
-        }
-        x_GLF_color = x_53;
-        x_34_phi = x_53;
-        x_62_phi = x_31;
-      }
-    }
-    let x_34 : vec4<f32> = x_34_phi;
-    let x_62 : i32 = x_62_phi;
-
-    continuing {
-      x_39 = (x_38 + 1);
-      x_33_phi = x_34;
-      x_36_phi = bitcast<i32>((x_36 + bitcast<i32>(x_62)));
-      x_38_phi = x_39;
-    }
-  }
-  let x_63 : vec4<f32> = x_GLF_color;
-  let x_65 : i32 = x_5.x_GLF_uniform_int_values[2];
-  let x_66 : f32 = f32(x_65);
-  let x_69 : bool = all((x_63 == vec4<f32>(x_66, x_66, x_66, x_66)));
-  x_75_phi = x_69;
-  if (x_69) {
-    let x_73 : i32 = x_5.x_GLF_uniform_int_values[5];
-    x_74 = (x_36 == bitcast<i32>(x_73));
-    x_75_phi = x_74;
-  }
-  let x_75 : bool = x_75_phi;
-  if (x_75) {
-    let x_79 : f32 = f32(x_31);
-    let x_80 : f32 = f32(x_29);
-    x_GLF_color = vec4<f32>(x_79, x_80, x_80, x_79);
-  } else {
-    let x_82 : f32 = f32(x_29);
-    x_GLF_color = vec4<f32>(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.hlsl
deleted file mode 100644
index a5f3b7a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,115 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[6];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_36 = 0;
-  bool x_74 = false;
-  float4 x_33_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_36_phi = 0;
-  int x_38_phi = 0;
-  bool x_75_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  const int x_31 = asint(x_5[1].x);
-  x_33_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_36_phi = x_29;
-  x_38_phi = x_31;
-  while (true) {
-    float4 x_53 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_39 = 0;
-    float4 x_34_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_62_phi = 0;
-    const float4 x_33 = x_33_phi;
-    x_36 = x_36_phi;
-    const int x_38 = x_38_phi;
-    const int x_41 = asint(x_5[4].x);
-    if ((x_38 < x_41)) {
-    } else {
-      break;
-    }
-    float4 x_53_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_56_phi = 0;
-    switch(0u) {
-      default: {
-        const int x_48 = asint(x_5[3].x);
-        if ((x_38 > x_48)) {
-          x_34_phi = x_33;
-          x_62_phi = 2;
-          break;
-        }
-        x_53_phi = x_33;
-        x_56_phi = x_29;
-        while (true) {
-          float4 x_54 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-          int x_57 = 0;
-          x_53 = x_53_phi;
-          const int x_56 = x_56_phi;
-          if ((x_56 < x_41)) {
-          } else {
-            break;
-          }
-          {
-            const float x_61 = float((x_38 + x_56));
-            x_54 = float4(x_61, x_61, x_61, x_61);
-            x_57 = (x_56 + 1);
-            x_53_phi = x_54;
-            x_56_phi = x_57;
-          }
-        }
-        x_GLF_color = x_53;
-        x_34_phi = x_53;
-        x_62_phi = x_31;
-        break;
-      }
-    }
-    const float4 x_34 = x_34_phi;
-    const int x_62 = x_62_phi;
-    {
-      x_39 = (x_38 + 1);
-      x_33_phi = x_34;
-      x_36_phi = asint((x_36 + asint(x_62)));
-      x_38_phi = x_39;
-    }
-  }
-  const float4 x_63 = x_GLF_color;
-  const int x_65 = asint(x_5[2].x);
-  const float x_66 = float(x_65);
-  const bool x_69 = all((x_63 == float4(x_66, x_66, x_66, x_66)));
-  x_75_phi = x_69;
-  if (x_69) {
-    const int x_73 = asint(x_5[5].x);
-    x_74 = (x_36 == asint(x_73));
-    x_75_phi = x_74;
-  }
-  if (x_75_phi) {
-    const float x_79 = float(x_31);
-    const float x_80 = float(x_29);
-    x_GLF_color = float4(x_79, x_80, x_80, x_79);
-  } else {
-    const float x_82 = float(x_29);
-    x_GLF_color = float4(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.msl
deleted file mode 100644
index ad2ebaf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,125 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[6];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int x_36 = 0;
-  bool x_74 = false;
-  float4 x_33_phi = 0.0f;
-  int x_36_phi = 0;
-  int x_38_phi = 0;
-  bool x_75_phi = false;
-  int const x_29 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  int const x_31 = x_5.x_GLF_uniform_int_values.arr[1].el;
-  x_33_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_36_phi = x_29;
-  x_38_phi = x_31;
-  while (true) {
-    float4 x_53 = 0.0f;
-    int x_39 = 0;
-    float4 x_34_phi = 0.0f;
-    int x_62_phi = 0;
-    float4 const x_33 = x_33_phi;
-    x_36 = x_36_phi;
-    int const x_38 = x_38_phi;
-    int const x_41 = x_5.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_38 < x_41)) {
-    } else {
-      break;
-    }
-    float4 x_53_phi = 0.0f;
-    int x_56_phi = 0;
-    switch(0u) {
-      default: {
-        int const x_48 = x_5.x_GLF_uniform_int_values.arr[3].el;
-        if ((x_38 > x_48)) {
-          x_34_phi = x_33;
-          x_62_phi = 2;
-          break;
-        }
-        x_53_phi = x_33;
-        x_56_phi = x_29;
-        while (true) {
-          float4 x_54 = 0.0f;
-          int x_57 = 0;
-          x_53 = x_53_phi;
-          int const x_56 = x_56_phi;
-          if ((x_56 < x_41)) {
-          } else {
-            break;
-          }
-          {
-            float const x_61 = float(as_type<int>((as_type<uint>(x_38) + as_type<uint>(x_56))));
-            x_54 = float4(x_61, x_61, x_61, x_61);
-            x_57 = as_type<int>((as_type<uint>(x_56) + as_type<uint>(1)));
-            x_53_phi = x_54;
-            x_56_phi = x_57;
-          }
-        }
-        *(tint_symbol_3) = x_53;
-        x_34_phi = x_53;
-        x_62_phi = x_31;
-        break;
-      }
-    }
-    float4 const x_34 = x_34_phi;
-    int const x_62 = x_62_phi;
-    {
-      x_39 = as_type<int>((as_type<uint>(x_38) + as_type<uint>(1)));
-      x_33_phi = x_34;
-      x_36_phi = as_type<int>(as_type<int>((as_type<uint>(x_36) + as_type<uint>(as_type<int>(x_62)))));
-      x_38_phi = x_39;
-    }
-  }
-  float4 const x_63 = *(tint_symbol_3);
-  int const x_65 = x_5.x_GLF_uniform_int_values.arr[2].el;
-  float const x_66 = float(x_65);
-  bool const x_69 = all((x_63 == float4(x_66, x_66, x_66, x_66)));
-  x_75_phi = x_69;
-  if (x_69) {
-    int const x_73 = x_5.x_GLF_uniform_int_values.arr[5].el;
-    x_74 = (x_36 == as_type<int>(x_73));
-    x_75_phi = x_74;
-  }
-  bool const x_75 = x_75_phi;
-  if (x_75) {
-    float const x_79 = float(x_31);
-    float const x_80 = float(x_29);
-    *(tint_symbol_3) = float4(x_79, x_80, x_80, x_79);
-  } else {
-    float const x_82 = float(x_29);
-    *(tint_symbol_3) = float4(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index 51bbad6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,238 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 135
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_74 "x_74"
-               OpName %x_33_phi "x_33_phi"
-               OpName %x_36_phi "x_36_phi"
-               OpName %x_38_phi "x_38_phi"
-               OpName %x_75_phi "x_75_phi"
-               OpName %x_53 "x_53"
-               OpName %x_39 "x_39"
-               OpName %x_34_phi "x_34_phi"
-               OpName %x_62_phi "x_62_phi"
-               OpName %x_53_phi "x_53_phi"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_54 "x_54"
-               OpName %x_57 "x_57"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_6 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_6 = OpConstant %uint 6
-%_arr_int_uint_6 = OpTypeArray %int %uint_6
-       %buf0 = OpTypeStruct %_arr_int_uint_6
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %25 = OpConstantNull %bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %40 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-     %v4bool = OpTypeVector %bool 4
-      %int_5 = OpConstant %int 5
-   %main_out = OpTypeStruct %v4float
-        %124 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_int Function %21
-       %x_74 = OpVariable %_ptr_Function_bool Function %25
-   %x_33_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_36_phi = OpVariable %_ptr_Function_int Function %21
-   %x_38_phi = OpVariable %_ptr_Function_int Function %21
-   %x_75_phi = OpVariable %_ptr_Function_bool Function %25
-       %x_53 = OpVariable %_ptr_Function_v4float Function %5
-       %x_39 = OpVariable %_ptr_Function_int Function %21
-   %x_34_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_62_phi = OpVariable %_ptr_Function_int Function %21
-   %x_53_phi = OpVariable %_ptr_Function_v4float Function %5
-   %x_56_phi = OpVariable %_ptr_Function_int Function %21
-       %x_54 = OpVariable %_ptr_Function_v4float Function %5
-       %x_57 = OpVariable %_ptr_Function_int Function %21
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %37 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %38 = OpLoad %int %37
-               OpStore %x_33_phi %40
-               OpStore %x_36_phi %35
-               OpStore %x_38_phi %38
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %49 = OpLoad %v4float %x_33_phi
-         %50 = OpLoad %int %x_36_phi
-               OpStore %x_36 %50
-         %51 = OpLoad %int %x_38_phi
-         %53 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_4
-         %54 = OpLoad %int %53
-         %55 = OpSLessThan %bool %51 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpBranch %56
-         %58 = OpLabel
-               OpBranch %42
-         %56 = OpLabel
-               OpSelectionMerge %61 None
-               OpSwitch %uint_0 %62
-         %62 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_3
-         %65 = OpLoad %int %64
-         %66 = OpSGreaterThan %bool %51 %65
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-               OpStore %x_34_phi %49
-               OpStore %x_62_phi %int_2
-               OpBranch %61
-         %67 = OpLabel
-               OpStore %x_53_phi %49
-               OpStore %x_56_phi %35
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %76 = OpLoad %v4float %x_53_phi
-               OpStore %x_53 %76
-         %77 = OpLoad %int %x_56_phi
-         %78 = OpSLessThan %bool %77 %54
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %71
-         %79 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-         %83 = OpIAdd %int %51 %77
-         %82 = OpConvertSToF %float %83
-         %84 = OpCompositeConstruct %v4float %82 %82 %82 %82
-               OpStore %x_54 %84
-         %85 = OpIAdd %int %77 %int_1
-               OpStore %x_57 %85
-         %86 = OpLoad %v4float %x_54
-               OpStore %x_53_phi %86
-         %87 = OpLoad %int %x_57
-               OpStore %x_56_phi %87
-               OpBranch %70
-         %71 = OpLabel
-         %88 = OpLoad %v4float %x_53
-               OpStore %x_GLF_color %88
-         %89 = OpLoad %v4float %x_53
-               OpStore %x_34_phi %89
-               OpStore %x_62_phi %38
-               OpBranch %61
-         %61 = OpLabel
-         %90 = OpLoad %v4float %x_34_phi
-         %91 = OpLoad %int %x_62_phi
-               OpBranch %43
-         %43 = OpLabel
-         %92 = OpIAdd %int %51 %int_1
-               OpStore %x_39 %92
-               OpStore %x_33_phi %90
-         %94 = OpLoad %int %x_36
-         %95 = OpCopyObject %int %91
-         %96 = OpIAdd %int %94 %95
-         %93 = OpCopyObject %int %96
-               OpStore %x_36_phi %93
-         %97 = OpLoad %int %x_39
-               OpStore %x_38_phi %97
-               OpBranch %41
-         %42 = OpLabel
-         %98 = OpLoad %v4float %x_GLF_color
-         %99 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_2
-        %100 = OpLoad %int %99
-        %101 = OpConvertSToF %float %100
-        %103 = OpCompositeConstruct %v4float %101 %101 %101 %101
-        %104 = OpFOrdEqual %v4bool %98 %103
-        %102 = OpAll %bool %104
-               OpStore %x_75_phi %102
-               OpSelectionMerge %106 None
-               OpBranchConditional %102 %107 %106
-        %107 = OpLabel
-        %109 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_5
-        %110 = OpLoad %int %109
-        %111 = OpLoad %int %x_36
-        %112 = OpCopyObject %int %110
-        %113 = OpIEqual %bool %111 %112
-               OpStore %x_74 %113
-        %114 = OpLoad %bool %x_74
-               OpStore %x_75_phi %114
-               OpBranch %106
-        %106 = OpLabel
-        %115 = OpLoad %bool %x_75_phi
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-        %119 = OpConvertSToF %float %38
-        %120 = OpConvertSToF %float %35
-        %121 = OpCompositeConstruct %v4float %119 %120 %120 %119
-               OpStore %x_GLF_color %121
-               OpBranch %116
-        %118 = OpLabel
-        %122 = OpConvertSToF %float %35
-        %123 = OpCompositeConstruct %v4float %122 %122 %122 %122
-               OpStore %x_GLF_color %123
-               OpBranch %116
-        %116 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %124
-        %127 = OpLabel
-        %128 = OpFunctionCall %void %main_1
-        %129 = OpLoad %v4float %x_GLF_color
-        %130 = OpCompositeConstruct %main_out %129
-               OpReturnValue %130
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %132 = OpLabel
-        %133 = OpFunctionCall %main_out %main_inner
-        %134 = OpCompositeExtract %v4float %133 0
-               OpStore %x_GLF_color_1_1 %134
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index 295609c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-output-color-function-call-nested-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,113 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 6>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : i32;
-  var x_74 : bool;
-  var x_33_phi : vec4<f32>;
-  var x_36_phi : i32;
-  var x_38_phi : i32;
-  var x_75_phi : bool;
-  let x_29 : i32 = x_5.x_GLF_uniform_int_values[0];
-  let x_31 : i32 = x_5.x_GLF_uniform_int_values[1];
-  x_33_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  x_36_phi = x_29;
-  x_38_phi = x_31;
-  loop {
-    var x_53 : vec4<f32>;
-    var x_39 : i32;
-    var x_34_phi : vec4<f32>;
-    var x_62_phi : i32;
-    let x_33 : vec4<f32> = x_33_phi;
-    x_36 = x_36_phi;
-    let x_38 : i32 = x_38_phi;
-    let x_41 : i32 = x_5.x_GLF_uniform_int_values[4];
-    if ((x_38 < x_41)) {
-    } else {
-      break;
-    }
-    var x_53_phi : vec4<f32>;
-    var x_56_phi : i32;
-    switch(0u) {
-      default: {
-        let x_48 : i32 = x_5.x_GLF_uniform_int_values[3];
-        if ((x_38 > x_48)) {
-          x_34_phi = x_33;
-          x_62_phi = 2;
-          break;
-        }
-        x_53_phi = x_33;
-        x_56_phi = x_29;
-        loop {
-          var x_54 : vec4<f32>;
-          var x_57 : i32;
-          x_53 = x_53_phi;
-          let x_56 : i32 = x_56_phi;
-          if ((x_56 < x_41)) {
-          } else {
-            break;
-          }
-
-          continuing {
-            let x_61 : f32 = f32((x_38 + x_56));
-            x_54 = vec4<f32>(x_61, x_61, x_61, x_61);
-            x_57 = (x_56 + 1);
-            x_53_phi = x_54;
-            x_56_phi = x_57;
-          }
-        }
-        x_GLF_color = x_53;
-        x_34_phi = x_53;
-        x_62_phi = x_31;
-      }
-    }
-    let x_34 : vec4<f32> = x_34_phi;
-    let x_62 : i32 = x_62_phi;
-
-    continuing {
-      x_39 = (x_38 + 1);
-      x_33_phi = x_34;
-      x_36_phi = bitcast<i32>((x_36 + bitcast<i32>(x_62)));
-      x_38_phi = x_39;
-    }
-  }
-  let x_63 : vec4<f32> = x_GLF_color;
-  let x_65 : i32 = x_5.x_GLF_uniform_int_values[2];
-  let x_66 : f32 = f32(x_65);
-  let x_69 : bool = all((x_63 == vec4<f32>(x_66, x_66, x_66, x_66)));
-  x_75_phi = x_69;
-  if (x_69) {
-    let x_73 : i32 = x_5.x_GLF_uniform_int_values[5];
-    x_74 = (x_36 == bitcast<i32>(x_73));
-    x_75_phi = x_74;
-  }
-  let x_75 : bool = x_75_phi;
-  if (x_75) {
-    let x_79 : f32 = f32(x_31);
-    let x_80 : f32 = f32(x_29);
-    x_GLF_color = vec4<f32>(x_79, x_80, x_80, x_79);
-  } else {
-    let x_82 : f32 = f32(x_29);
-    x_GLF_color = vec4<f32>(x_82, x_82, x_82, x_82);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index aa307b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 a = float2(0.0f, 0.0f);
-  float3 b = float3(0.0f, 0.0f, 0.0f);
-  bool x_105 = false;
-  bool x_111 = false;
-  bool x_106_phi = false;
-  bool x_112_phi = false;
-  a = float2(1.0f, 1.0f);
-  b = float3(0.0f, 0.0f, 0.0f);
-  const float x_52 = gl_FragCoord.y;
-  if ((int(x_52) < 40)) {
-    b = float3(0.100000001f, 0.100000001f, 0.100000001f);
-  } else {
-    const float x_59 = gl_FragCoord.y;
-    if ((int(x_59) < 60)) {
-      b = float3(0.200000003f, 0.200000003f, 0.200000003f);
-    } else {
-      const float x_66 = gl_FragCoord.y;
-      if ((x_66 < 80.0f)) {
-        const float x_72 = a.x;
-        const float x_74 = asfloat(x_8[0].x);
-        b = (cos((float3(x_72, x_72, x_72) + float3(x_74, x_74, x_74))) + float3(0.01f, 0.01f, 0.01f));
-      } else {
-        const float x_82 = gl_FragCoord.y;
-        if ((int(x_82) < 100)) {
-          const float x_89 = asfloat(x_8[0].x);
-          b = cos(float3(x_89, x_89, x_89));
-        } else {
-          const float x_93 = gl_FragCoord.y;
-          if ((int(x_93) < 500)) {
-            b = float3(0.540302277f, 0.540302277f, -0.99996084f);
-          }
-        }
-      }
-    }
-  }
-  const float x_99 = b.x;
-  const bool x_100 = (x_99 < 1.019999981f);
-  x_106_phi = x_100;
-  if (x_100) {
-    const float x_104 = b.y;
-    x_105 = (x_104 < 1.019999981f);
-    x_106_phi = x_105;
-  }
-  const bool x_106 = x_106_phi;
-  x_112_phi = x_106;
-  if (x_106) {
-    const float x_110 = b.z;
-    x_111 = (x_110 < 1.019999981f);
-    x_112_phi = x_111;
-  }
-  if (x_112_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7a4ba5a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 a = 0.0f;
-  float3 b = 0.0f;
-  bool x_105 = false;
-  bool x_111 = false;
-  bool x_106_phi = false;
-  bool x_112_phi = false;
-  a = float2(1.0f, 1.0f);
-  b = float3(0.0f, 0.0f, 0.0f);
-  float const x_52 = (*(tint_symbol_3)).y;
-  if ((int(x_52) < 40)) {
-    b = float3(0.100000001f, 0.100000001f, 0.100000001f);
-  } else {
-    float const x_59 = (*(tint_symbol_3)).y;
-    if ((int(x_59) < 60)) {
-      b = float3(0.200000003f, 0.200000003f, 0.200000003f);
-    } else {
-      float const x_66 = (*(tint_symbol_3)).y;
-      if ((x_66 < 80.0f)) {
-        float const x_72 = a.x;
-        float const x_74 = x_8.one;
-        b = (cos((float3(x_72, x_72, x_72) + float3(x_74, x_74, x_74))) + float3(0.01f, 0.01f, 0.01f));
-      } else {
-        float const x_82 = (*(tint_symbol_3)).y;
-        if ((int(x_82) < 100)) {
-          float const x_89 = x_8.one;
-          b = cos(float3(x_89, x_89, x_89));
-        } else {
-          float const x_93 = (*(tint_symbol_3)).y;
-          if ((int(x_93) < 500)) {
-            b = float3(0.540302277f, 0.540302277f, -0.99996084f);
-          }
-        }
-      }
-    }
-  }
-  float const x_99 = b.x;
-  bool const x_100 = (x_99 < 1.019999981f);
-  x_106_phi = x_100;
-  if (x_100) {
-    float const x_104 = b.y;
-    x_105 = (x_104 < 1.019999981f);
-    x_106_phi = x_105;
-  }
-  bool const x_106 = x_106_phi;
-  x_112_phi = x_106;
-  if (x_106) {
-    float const x_110 = b.z;
-    x_111 = (x_110 < 1.019999981f);
-    x_112_phi = x_111;
-  }
-  bool const x_112 = x_112_phi;
-  if (x_112) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 33703b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,229 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 142
-; Schema: 0
-               OpCapability Shader
-         %76 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_105 "x_105"
-               OpName %x_111 "x_111"
-               OpName %x_106_phi "x_106_phi"
-               OpName %x_112_phi "x_112_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %21 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %25 = OpConstantNull %v3float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %29 = OpConstantNull %bool
-    %float_1 = OpConstant %float 1
-         %34 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-%float_0_100000001 = OpConstant %float 0.100000001
-         %50 = OpConstantComposite %v3float %float_0_100000001 %float_0_100000001 %float_0_100000001
-     %int_60 = OpConstant %int 60
-%float_0_200000003 = OpConstant %float 0.200000003
-         %60 = OpConstantComposite %v3float %float_0_200000003 %float_0_200000003 %float_0_200000003
-   %float_80 = OpConstant %float 80
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_00999999978 = OpConstant %float 0.00999999978
-         %81 = OpConstantComposite %v3float %float_0_00999999978 %float_0_00999999978 %float_0_00999999978
-    %int_100 = OpConstant %int 100
-    %int_500 = OpConstant %int 500
-%float_0_540302277 = OpConstant %float 0.540302277
-%float_n0_99996084 = OpConstant %float -0.99996084
-        %104 = OpConstantComposite %v3float %float_0_540302277 %float_0_540302277 %float_n0_99996084
-%float_1_01999998 = OpConstant %float 1.01999998
-     %uint_2 = OpConstant %uint 2
-        %127 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %128 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %129 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_v2float Function %21
-          %b = OpVariable %_ptr_Function_v3float Function %25
-      %x_105 = OpVariable %_ptr_Function_bool Function %29
-      %x_111 = OpVariable %_ptr_Function_bool Function %29
-  %x_106_phi = OpVariable %_ptr_Function_bool Function %29
-  %x_112_phi = OpVariable %_ptr_Function_bool Function %29
-               OpStore %a %34
-               OpStore %b %36
-         %40 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %41 = OpLoad %float %40
-         %42 = OpConvertFToS %int %41
-         %45 = OpSLessThan %bool %42 %int_40
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpStore %b %50
-               OpBranch %46
-         %48 = OpLabel
-         %51 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %52 = OpLoad %float %51
-         %53 = OpConvertFToS %int %52
-         %55 = OpSLessThan %bool %53 %int_60
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpStore %b %60
-               OpBranch %56
-         %58 = OpLabel
-         %61 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %62 = OpLoad %float %61
-         %64 = OpFOrdLessThan %bool %62 %float_80
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %67
-         %66 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-         %74 = OpLoad %float %73
-         %77 = OpCompositeConstruct %v3float %71 %71 %71
-         %78 = OpCompositeConstruct %v3float %74 %74 %74
-         %79 = OpFAdd %v3float %77 %78
-         %75 = OpExtInst %v3float %76 Cos %79
-         %82 = OpFAdd %v3float %75 %81
-               OpStore %b %82
-               OpBranch %65
-         %67 = OpLabel
-         %83 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %84 = OpLoad %float %83
-         %85 = OpConvertFToS %int %84
-         %87 = OpSLessThan %bool %85 %int_100
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-         %91 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-         %92 = OpLoad %float %91
-         %94 = OpCompositeConstruct %v3float %92 %92 %92
-         %93 = OpExtInst %v3float %76 Cos %94
-               OpStore %b %93
-               OpBranch %88
-         %90 = OpLabel
-         %95 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %96 = OpLoad %float %95
-         %97 = OpConvertFToS %int %96
-         %99 = OpSLessThan %bool %97 %int_500
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %100
-        %101 = OpLabel
-               OpStore %b %104
-               OpBranch %100
-        %100 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-        %105 = OpAccessChain %_ptr_Function_float %b %uint_0
-        %106 = OpLoad %float %105
-        %108 = OpFOrdLessThan %bool %106 %float_1_01999998
-               OpStore %x_106_phi %108
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %109
-        %110 = OpLabel
-        %111 = OpAccessChain %_ptr_Function_float %b %uint_1
-        %112 = OpLoad %float %111
-        %113 = OpFOrdLessThan %bool %112 %float_1_01999998
-               OpStore %x_105 %113
-        %114 = OpLoad %bool %x_105
-               OpStore %x_106_phi %114
-               OpBranch %109
-        %109 = OpLabel
-        %115 = OpLoad %bool %x_106_phi
-               OpStore %x_112_phi %115
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-        %119 = OpAccessChain %_ptr_Function_float %b %uint_2
-        %120 = OpLoad %float %119
-        %121 = OpFOrdLessThan %bool %120 %float_1_01999998
-               OpStore %x_111 %121
-        %122 = OpLoad %bool %x_111
-               OpStore %x_112_phi %122
-               OpBranch %116
-        %116 = OpLabel
-        %123 = OpLoad %bool %x_112_phi
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %126
-        %125 = OpLabel
-               OpStore %x_GLF_color %127
-               OpBranch %124
-        %126 = OpLabel
-               OpStore %x_GLF_color %128
-               OpBranch %124
-        %124 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %129
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %133 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %134 = OpFunctionCall %void %main_1
-        %135 = OpLoad %v4float %x_GLF_color
-        %136 = OpCompositeConstruct %main_out %135
-               OpReturnValue %136
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-        %138 = OpLabel
-        %140 = OpLoad %v4float %gl_FragCoord_param_1
-        %139 = OpFunctionCall %main_out %main_inner %140
-        %141 = OpCompositeExtract %v4float %139 0
-               OpStore %x_GLF_color_1_1 %141
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 017a1d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,82 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec2<f32>;
-  var b : vec3<f32>;
-  var x_105 : bool;
-  var x_111 : bool;
-  var x_106_phi : bool;
-  var x_112_phi : bool;
-  a = vec2<f32>(1.0, 1.0);
-  b = vec3<f32>(0.0, 0.0, 0.0);
-  let x_52 : f32 = gl_FragCoord.y;
-  if ((i32(x_52) < 40)) {
-    b = vec3<f32>(0.100000001, 0.100000001, 0.100000001);
-  } else {
-    let x_59 : f32 = gl_FragCoord.y;
-    if ((i32(x_59) < 60)) {
-      b = vec3<f32>(0.200000003, 0.200000003, 0.200000003);
-    } else {
-      let x_66 : f32 = gl_FragCoord.y;
-      if ((x_66 < 80.0)) {
-        let x_72 : f32 = a.x;
-        let x_74 : f32 = x_8.one;
-        b = (cos((vec3<f32>(x_72, x_72, x_72) + vec3<f32>(x_74, x_74, x_74))) + vec3<f32>(0.01, 0.01, 0.01));
-      } else {
-        let x_82 : f32 = gl_FragCoord.y;
-        if ((i32(x_82) < 100)) {
-          let x_89 : f32 = x_8.one;
-          b = cos(vec3<f32>(x_89, x_89, x_89));
-        } else {
-          let x_93 : f32 = gl_FragCoord.y;
-          if ((i32(x_93) < 500)) {
-            b = vec3<f32>(0.540302277, 0.540302277, -0.99996084);
-          }
-        }
-      }
-    }
-  }
-  let x_99 : f32 = b.x;
-  let x_100 : bool = (x_99 < 1.019999981);
-  x_106_phi = x_100;
-  if (x_100) {
-    let x_104 : f32 = b.y;
-    x_105 = (x_104 < 1.019999981);
-    x_106_phi = x_105;
-  }
-  let x_106 : bool = x_106_phi;
-  x_112_phi = x_106;
-  if (x_106) {
-    let x_110 : f32 = b.z;
-    x_111 = (x_110 < 1.019999981);
-    x_112_phi = x_111;
-  }
-  let x_112 : bool = x_112_phi;
-  if (x_112) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index aa307b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 a = float2(0.0f, 0.0f);
-  float3 b = float3(0.0f, 0.0f, 0.0f);
-  bool x_105 = false;
-  bool x_111 = false;
-  bool x_106_phi = false;
-  bool x_112_phi = false;
-  a = float2(1.0f, 1.0f);
-  b = float3(0.0f, 0.0f, 0.0f);
-  const float x_52 = gl_FragCoord.y;
-  if ((int(x_52) < 40)) {
-    b = float3(0.100000001f, 0.100000001f, 0.100000001f);
-  } else {
-    const float x_59 = gl_FragCoord.y;
-    if ((int(x_59) < 60)) {
-      b = float3(0.200000003f, 0.200000003f, 0.200000003f);
-    } else {
-      const float x_66 = gl_FragCoord.y;
-      if ((x_66 < 80.0f)) {
-        const float x_72 = a.x;
-        const float x_74 = asfloat(x_8[0].x);
-        b = (cos((float3(x_72, x_72, x_72) + float3(x_74, x_74, x_74))) + float3(0.01f, 0.01f, 0.01f));
-      } else {
-        const float x_82 = gl_FragCoord.y;
-        if ((int(x_82) < 100)) {
-          const float x_89 = asfloat(x_8[0].x);
-          b = cos(float3(x_89, x_89, x_89));
-        } else {
-          const float x_93 = gl_FragCoord.y;
-          if ((int(x_93) < 500)) {
-            b = float3(0.540302277f, 0.540302277f, -0.99996084f);
-          }
-        }
-      }
-    }
-  }
-  const float x_99 = b.x;
-  const bool x_100 = (x_99 < 1.019999981f);
-  x_106_phi = x_100;
-  if (x_100) {
-    const float x_104 = b.y;
-    x_105 = (x_104 < 1.019999981f);
-    x_106_phi = x_105;
-  }
-  const bool x_106 = x_106_phi;
-  x_112_phi = x_106;
-  if (x_106) {
-    const float x_110 = b.z;
-    x_111 = (x_110 < 1.019999981f);
-    x_112_phi = x_111;
-  }
-  if (x_112_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7a4ba5a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 a = 0.0f;
-  float3 b = 0.0f;
-  bool x_105 = false;
-  bool x_111 = false;
-  bool x_106_phi = false;
-  bool x_112_phi = false;
-  a = float2(1.0f, 1.0f);
-  b = float3(0.0f, 0.0f, 0.0f);
-  float const x_52 = (*(tint_symbol_3)).y;
-  if ((int(x_52) < 40)) {
-    b = float3(0.100000001f, 0.100000001f, 0.100000001f);
-  } else {
-    float const x_59 = (*(tint_symbol_3)).y;
-    if ((int(x_59) < 60)) {
-      b = float3(0.200000003f, 0.200000003f, 0.200000003f);
-    } else {
-      float const x_66 = (*(tint_symbol_3)).y;
-      if ((x_66 < 80.0f)) {
-        float const x_72 = a.x;
-        float const x_74 = x_8.one;
-        b = (cos((float3(x_72, x_72, x_72) + float3(x_74, x_74, x_74))) + float3(0.01f, 0.01f, 0.01f));
-      } else {
-        float const x_82 = (*(tint_symbol_3)).y;
-        if ((int(x_82) < 100)) {
-          float const x_89 = x_8.one;
-          b = cos(float3(x_89, x_89, x_89));
-        } else {
-          float const x_93 = (*(tint_symbol_3)).y;
-          if ((int(x_93) < 500)) {
-            b = float3(0.540302277f, 0.540302277f, -0.99996084f);
-          }
-        }
-      }
-    }
-  }
-  float const x_99 = b.x;
-  bool const x_100 = (x_99 < 1.019999981f);
-  x_106_phi = x_100;
-  if (x_100) {
-    float const x_104 = b.y;
-    x_105 = (x_104 < 1.019999981f);
-    x_106_phi = x_105;
-  }
-  bool const x_106 = x_106_phi;
-  x_112_phi = x_106;
-  if (x_106) {
-    float const x_110 = b.z;
-    x_111 = (x_110 < 1.019999981f);
-    x_112_phi = x_111;
-  }
-  bool const x_112 = x_112_phi;
-  if (x_112) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 33703b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,229 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 142
-; Schema: 0
-               OpCapability Shader
-         %76 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_105 "x_105"
-               OpName %x_111 "x_111"
-               OpName %x_106_phi "x_106_phi"
-               OpName %x_112_phi "x_112_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %21 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %25 = OpConstantNull %v3float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %29 = OpConstantNull %bool
-    %float_1 = OpConstant %float 1
-         %34 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-        %int = OpTypeInt 32 1
-     %int_40 = OpConstant %int 40
-%float_0_100000001 = OpConstant %float 0.100000001
-         %50 = OpConstantComposite %v3float %float_0_100000001 %float_0_100000001 %float_0_100000001
-     %int_60 = OpConstant %int 60
-%float_0_200000003 = OpConstant %float 0.200000003
-         %60 = OpConstantComposite %v3float %float_0_200000003 %float_0_200000003 %float_0_200000003
-   %float_80 = OpConstant %float 80
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_00999999978 = OpConstant %float 0.00999999978
-         %81 = OpConstantComposite %v3float %float_0_00999999978 %float_0_00999999978 %float_0_00999999978
-    %int_100 = OpConstant %int 100
-    %int_500 = OpConstant %int 500
-%float_0_540302277 = OpConstant %float 0.540302277
-%float_n0_99996084 = OpConstant %float -0.99996084
-        %104 = OpConstantComposite %v3float %float_0_540302277 %float_0_540302277 %float_n0_99996084
-%float_1_01999998 = OpConstant %float 1.01999998
-     %uint_2 = OpConstant %uint 2
-        %127 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %128 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %129 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_v2float Function %21
-          %b = OpVariable %_ptr_Function_v3float Function %25
-      %x_105 = OpVariable %_ptr_Function_bool Function %29
-      %x_111 = OpVariable %_ptr_Function_bool Function %29
-  %x_106_phi = OpVariable %_ptr_Function_bool Function %29
-  %x_112_phi = OpVariable %_ptr_Function_bool Function %29
-               OpStore %a %34
-               OpStore %b %36
-         %40 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %41 = OpLoad %float %40
-         %42 = OpConvertFToS %int %41
-         %45 = OpSLessThan %bool %42 %int_40
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpStore %b %50
-               OpBranch %46
-         %48 = OpLabel
-         %51 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %52 = OpLoad %float %51
-         %53 = OpConvertFToS %int %52
-         %55 = OpSLessThan %bool %53 %int_60
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpStore %b %60
-               OpBranch %56
-         %58 = OpLabel
-         %61 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %62 = OpLoad %float %61
-         %64 = OpFOrdLessThan %bool %62 %float_80
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %67
-         %66 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-         %74 = OpLoad %float %73
-         %77 = OpCompositeConstruct %v3float %71 %71 %71
-         %78 = OpCompositeConstruct %v3float %74 %74 %74
-         %79 = OpFAdd %v3float %77 %78
-         %75 = OpExtInst %v3float %76 Cos %79
-         %82 = OpFAdd %v3float %75 %81
-               OpStore %b %82
-               OpBranch %65
-         %67 = OpLabel
-         %83 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %84 = OpLoad %float %83
-         %85 = OpConvertFToS %int %84
-         %87 = OpSLessThan %bool %85 %int_100
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-         %91 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-         %92 = OpLoad %float %91
-         %94 = OpCompositeConstruct %v3float %92 %92 %92
-         %93 = OpExtInst %v3float %76 Cos %94
-               OpStore %b %93
-               OpBranch %88
-         %90 = OpLabel
-         %95 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %96 = OpLoad %float %95
-         %97 = OpConvertFToS %int %96
-         %99 = OpSLessThan %bool %97 %int_500
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %100
-        %101 = OpLabel
-               OpStore %b %104
-               OpBranch %100
-        %100 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-        %105 = OpAccessChain %_ptr_Function_float %b %uint_0
-        %106 = OpLoad %float %105
-        %108 = OpFOrdLessThan %bool %106 %float_1_01999998
-               OpStore %x_106_phi %108
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %109
-        %110 = OpLabel
-        %111 = OpAccessChain %_ptr_Function_float %b %uint_1
-        %112 = OpLoad %float %111
-        %113 = OpFOrdLessThan %bool %112 %float_1_01999998
-               OpStore %x_105 %113
-        %114 = OpLoad %bool %x_105
-               OpStore %x_106_phi %114
-               OpBranch %109
-        %109 = OpLabel
-        %115 = OpLoad %bool %x_106_phi
-               OpStore %x_112_phi %115
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-        %119 = OpAccessChain %_ptr_Function_float %b %uint_2
-        %120 = OpLoad %float %119
-        %121 = OpFOrdLessThan %bool %120 %float_1_01999998
-               OpStore %x_111 %121
-        %122 = OpLoad %bool %x_111
-               OpStore %x_112_phi %122
-               OpBranch %116
-        %116 = OpLabel
-        %123 = OpLoad %bool %x_112_phi
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %126
-        %125 = OpLabel
-               OpStore %x_GLF_color %127
-               OpBranch %124
-        %126 = OpLabel
-               OpStore %x_GLF_color %128
-               OpBranch %124
-        %124 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %129
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %133 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %134 = OpFunctionCall %void %main_1
-        %135 = OpLoad %v4float %x_GLF_color
-        %136 = OpCompositeConstruct %main_out %135
-               OpReturnValue %136
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-        %138 = OpLabel
-        %140 = OpLoad %v4float %gl_FragCoord_param_1
-        %139 = OpFunctionCall %main_out %main_inner %140
-        %141 = OpCompositeExtract %v4float %139 0
-               OpStore %x_GLF_color_1_1 %141
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 017a1d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,82 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec2<f32>;
-  var b : vec3<f32>;
-  var x_105 : bool;
-  var x_111 : bool;
-  var x_106_phi : bool;
-  var x_112_phi : bool;
-  a = vec2<f32>(1.0, 1.0);
-  b = vec3<f32>(0.0, 0.0, 0.0);
-  let x_52 : f32 = gl_FragCoord.y;
-  if ((i32(x_52) < 40)) {
-    b = vec3<f32>(0.100000001, 0.100000001, 0.100000001);
-  } else {
-    let x_59 : f32 = gl_FragCoord.y;
-    if ((i32(x_59) < 60)) {
-      b = vec3<f32>(0.200000003, 0.200000003, 0.200000003);
-    } else {
-      let x_66 : f32 = gl_FragCoord.y;
-      if ((x_66 < 80.0)) {
-        let x_72 : f32 = a.x;
-        let x_74 : f32 = x_8.one;
-        b = (cos((vec3<f32>(x_72, x_72, x_72) + vec3<f32>(x_74, x_74, x_74))) + vec3<f32>(0.01, 0.01, 0.01));
-      } else {
-        let x_82 : f32 = gl_FragCoord.y;
-        if ((i32(x_82) < 100)) {
-          let x_89 : f32 = x_8.one;
-          b = cos(vec3<f32>(x_89, x_89, x_89));
-        } else {
-          let x_93 : f32 = gl_FragCoord.y;
-          if ((i32(x_93) < 500)) {
-            b = vec3<f32>(0.540302277, 0.540302277, -0.99996084);
-          }
-        }
-      }
-    }
-  }
-  let x_99 : f32 = b.x;
-  let x_100 : bool = (x_99 < 1.019999981);
-  x_106_phi = x_100;
-  if (x_100) {
-    let x_104 : f32 = b.y;
-    x_105 = (x_104 < 1.019999981);
-    x_106_phi = x_105;
-  }
-  let x_106 : bool = x_106_phi;
-  x_112_phi = x_106;
-  if (x_106) {
-    let x_110 : f32 = b.z;
-    x_111 = (x_110 < 1.019999981);
-    x_112_phi = x_111;
-  }
-  let x_112 : bool = x_112_phi;
-  if (x_112) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7832372..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-struct S {
-  int arr[2];
-};
-
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_struct_S_i1_2_1_i1_(inout S s, inout int x) {
-  const int x_16 = x;
-  s.arr[1] = (x_16 + 1);
-  const int x_18 = asint(x_9[0].x);
-  const int x_19 = s.arr[x_18];
-  const int x_20 = x;
-  if ((x_19 == x_20)) {
-    return -1;
-  }
-  const int x_21 = x;
-  return x_21;
-}
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  S s_1 = (S)0;
-  S param = (S)0;
-  int param_1 = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    const int x_22 = i;
-    const int x_23 = asint(x_9[0].x);
-    if ((x_22 < (2 + x_23))) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      const int x_25 = j;
-      const int x_26 = asint(x_9[0].x);
-      if ((x_25 < (3 + x_26))) {
-      } else {
-        break;
-      }
-      const int x_28 = i;
-      const int x_29 = j;
-      param = s_1;
-      param_1 = (x_28 + x_29);
-      const int x_31 = func_struct_S_i1_2_1_i1_(param, param_1);
-      a = (a + x_31);
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  if ((a == 30)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.msl
deleted file mode 100644
index a35525e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct S {
-  tint_array_wrapper arr;
-};
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_struct_S_i1_2_1_i1_(constant buf0& x_9, thread S* const s, thread int* const x) {
-  int const x_16 = *(x);
-  (*(s)).arr.arr[1] = as_type<int>((as_type<uint>(x_16) + as_type<uint>(1)));
-  int const x_18 = x_9.one;
-  int const x_19 = (*(s)).arr.arr[x_18];
-  int const x_20 = *(x);
-  if ((x_19 == x_20)) {
-    return -1;
-  }
-  int const x_21 = *(x);
-  return x_21;
-}
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  S s_1 = {};
-  S param = {};
-  int param_1 = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_22 = i;
-    int const x_23 = x_9.one;
-    if ((x_22 < as_type<int>((as_type<uint>(2) + as_type<uint>(x_23))))) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      int const x_25 = j;
-      int const x_26 = x_9.one;
-      if ((x_25 < as_type<int>((as_type<uint>(3) + as_type<uint>(x_26))))) {
-      } else {
-        break;
-      }
-      int const x_28 = i;
-      int const x_29 = j;
-      S const x_79 = s_1;
-      param = x_79;
-      param_1 = as_type<int>((as_type<uint>(x_28) + as_type<uint>(x_29)));
-      int const x_31 = func_struct_S_i1_2_1_i1_(x_9, &(param), &(param_1));
-      int const x_32 = a;
-      a = as_type<int>((as_type<uint>(x_32) + as_type<uint>(x_31)));
-      {
-        int const x_34 = j;
-        j = as_type<int>((as_type<uint>(x_34) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_36 = i;
-      i = as_type<int>((as_type<uint>(x_36) + as_type<uint>(1)));
-    }
-  }
-  int const x_38 = a;
-  if ((x_38 == 30)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 03e981e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,194 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 118
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "arr"
-               OpName %func_struct_S_i1_2_1_i1_ "func_struct_S_i1_2_1_i1_"
-               OpName %s "s"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %s_1 "s_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-          %S = OpTypeStruct %_arr_int_uint_2
-%_ptr_Function_S = OpTypePointer Function %S
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %int %_ptr_Function_S %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-     %int_n1 = OpConstant %int -1
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-         %50 = OpConstantNull %int
-         %54 = OpConstantNull %S
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %int_30 = OpConstant %int 30
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %105 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %106 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %107 = OpTypeFunction %main_out
-%func_struct_S_i1_2_1_i1_ = OpFunction %int None %12
-          %s = OpFunctionParameter %_ptr_Function_S
-          %x = OpFunctionParameter %_ptr_Function_int
-         %22 = OpLabel
-         %24 = OpLoad %int %x
-         %28 = OpAccessChain %_ptr_Function_int %s %uint_0 %int_1
-         %29 = OpIAdd %int %24 %int_1
-               OpStore %28 %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %32 = OpLoad %int %31
-         %34 = OpAccessChain %_ptr_Function_int %s %uint_0 %32
-         %35 = OpLoad %int %34
-         %37 = OpLoad %int %x
-         %38 = OpIEqual %bool %35 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
-               OpReturnValue %int_n1
-         %40 = OpLabel
-         %44 = OpLoad %int %x
-               OpReturnValue %44
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %50
-          %i = OpVariable %_ptr_Function_int Function %50
-          %j = OpVariable %_ptr_Function_int Function %50
-        %s_1 = OpVariable %_ptr_Function_S Function %54
-      %param = OpVariable %_ptr_Function_S Function %54
-    %param_1 = OpVariable %_ptr_Function_int Function %50
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-         %62 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %64 = OpLoad %int %63
-         %66 = OpIAdd %int %int_2 %64
-         %67 = OpSLessThan %bool %62 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %59
-         %68 = OpLabel
-               OpStore %j %int_0
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %j
-         %76 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %77 = OpLoad %int %76
-         %79 = OpIAdd %int %int_3 %77
-         %80 = OpSLessThan %bool %75 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %72
-         %81 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpLoad %int %j
-         %86 = OpLoad %S %s_1
-               OpStore %param %86
-         %87 = OpIAdd %int %84 %85
-               OpStore %param_1 %87
-         %88 = OpFunctionCall %int %func_struct_S_i1_2_1_i1_ %param %param_1
-         %91 = OpLoad %int %a
-         %92 = OpIAdd %int %91 %88
-               OpStore %a %92
-               OpBranch %73
-         %73 = OpLabel
-         %93 = OpLoad %int %j
-         %94 = OpIAdd %int %93 %int_1
-               OpStore %j %94
-               OpBranch %71
-         %72 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-         %95 = OpLoad %int %i
-         %96 = OpIAdd %int %95 %int_1
-               OpStore %i %96
-               OpBranch %58
-         %59 = OpLabel
-         %97 = OpLoad %int %a
-         %99 = OpIEqual %bool %97 %int_30
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %102
-        %101 = OpLabel
-               OpStore %x_GLF_color %105
-               OpBranch %100
-        %102 = OpLabel
-               OpStore %x_GLF_color %106
-               OpBranch %100
-        %100 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %107
-        %110 = OpLabel
-        %111 = OpFunctionCall %void %main_1
-        %112 = OpLoad %v4float %x_GLF_color
-        %113 = OpCompositeConstruct %main_out %112
-               OpReturnValue %113
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-        %115 = OpLabel
-        %116 = OpFunctionCall %main_out %main_inner
-        %117 = OpCompositeExtract %v4float %116 0
-               OpStore %x_GLF_color_1_1 %117
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ddc01d1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,89 +0,0 @@
-struct S {
-  arr : array<i32, 2>;
-};
-
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i1_2_1_i1_(s : ptr<function, S>, x : ptr<function, i32>) -> i32 {
-  let x_16 : i32 = *(x);
-  (*(s)).arr[1] = (x_16 + 1);
-  let x_18 : i32 = x_9.one;
-  let x_19 : i32 = (*(s)).arr[x_18];
-  let x_20 : i32 = *(x);
-  if ((x_19 == x_20)) {
-    return -1;
-  }
-  let x_21 : i32 = *(x);
-  return x_21;
-}
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  var j : i32;
-  var s_1 : S;
-  var param : S;
-  var param_1 : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_22 : i32 = i;
-    let x_23 : i32 = x_9.one;
-    if ((x_22 < (2 + x_23))) {
-    } else {
-      break;
-    }
-    j = 0;
-    loop {
-      let x_25 : i32 = j;
-      let x_26 : i32 = x_9.one;
-      if ((x_25 < (3 + x_26))) {
-      } else {
-        break;
-      }
-      let x_28 : i32 = i;
-      let x_29 : i32 = j;
-      let x_79 : S = s_1;
-      param = x_79;
-      param_1 = (x_28 + x_29);
-      let x_31 : i32 = func_struct_S_i1_2_1_i1_(&(param), &(param_1));
-      let x_32 : i32 = a;
-      a = (x_32 + x_31);
-
-      continuing {
-        let x_34 : i32 = j;
-        j = (x_34 + 1);
-      }
-    }
-
-    continuing {
-      let x_36 : i32 = i;
-      i = (x_36 + 1);
-    }
-  }
-  let x_38 : i32 = a;
-  if ((x_38 == 30)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7832372..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-struct S {
-  int arr[2];
-};
-
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_struct_S_i1_2_1_i1_(inout S s, inout int x) {
-  const int x_16 = x;
-  s.arr[1] = (x_16 + 1);
-  const int x_18 = asint(x_9[0].x);
-  const int x_19 = s.arr[x_18];
-  const int x_20 = x;
-  if ((x_19 == x_20)) {
-    return -1;
-  }
-  const int x_21 = x;
-  return x_21;
-}
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  S s_1 = (S)0;
-  S param = (S)0;
-  int param_1 = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    const int x_22 = i;
-    const int x_23 = asint(x_9[0].x);
-    if ((x_22 < (2 + x_23))) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      const int x_25 = j;
-      const int x_26 = asint(x_9[0].x);
-      if ((x_25 < (3 + x_26))) {
-      } else {
-        break;
-      }
-      const int x_28 = i;
-      const int x_29 = j;
-      param = s_1;
-      param_1 = (x_28 + x_29);
-      const int x_31 = func_struct_S_i1_2_1_i1_(param, param_1);
-      a = (a + x_31);
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  if ((a == 30)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.msl
deleted file mode 100644
index a35525e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[2];
-};
-struct S {
-  tint_array_wrapper arr;
-};
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_struct_S_i1_2_1_i1_(constant buf0& x_9, thread S* const s, thread int* const x) {
-  int const x_16 = *(x);
-  (*(s)).arr.arr[1] = as_type<int>((as_type<uint>(x_16) + as_type<uint>(1)));
-  int const x_18 = x_9.one;
-  int const x_19 = (*(s)).arr.arr[x_18];
-  int const x_20 = *(x);
-  if ((x_19 == x_20)) {
-    return -1;
-  }
-  int const x_21 = *(x);
-  return x_21;
-}
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int j = 0;
-  S s_1 = {};
-  S param = {};
-  int param_1 = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_22 = i;
-    int const x_23 = x_9.one;
-    if ((x_22 < as_type<int>((as_type<uint>(2) + as_type<uint>(x_23))))) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      int const x_25 = j;
-      int const x_26 = x_9.one;
-      if ((x_25 < as_type<int>((as_type<uint>(3) + as_type<uint>(x_26))))) {
-      } else {
-        break;
-      }
-      int const x_28 = i;
-      int const x_29 = j;
-      S const x_79 = s_1;
-      param = x_79;
-      param_1 = as_type<int>((as_type<uint>(x_28) + as_type<uint>(x_29)));
-      int const x_31 = func_struct_S_i1_2_1_i1_(x_9, &(param), &(param_1));
-      int const x_32 = a;
-      a = as_type<int>((as_type<uint>(x_32) + as_type<uint>(x_31)));
-      {
-        int const x_34 = j;
-        j = as_type<int>((as_type<uint>(x_34) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_36 = i;
-      i = as_type<int>((as_type<uint>(x_36) + as_type<uint>(1)));
-    }
-  }
-  int const x_38 = a;
-  if ((x_38 == 30)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 03e981e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,194 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 118
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "arr"
-               OpName %func_struct_S_i1_2_1_i1_ "func_struct_S_i1_2_1_i1_"
-               OpName %s "s"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %s_1 "s_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-          %S = OpTypeStruct %_arr_int_uint_2
-%_ptr_Function_S = OpTypePointer Function %S
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %int %_ptr_Function_S %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-     %int_n1 = OpConstant %int -1
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-         %50 = OpConstantNull %int
-         %54 = OpConstantNull %S
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %int_30 = OpConstant %int 30
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %105 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %106 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %107 = OpTypeFunction %main_out
-%func_struct_S_i1_2_1_i1_ = OpFunction %int None %12
-          %s = OpFunctionParameter %_ptr_Function_S
-          %x = OpFunctionParameter %_ptr_Function_int
-         %22 = OpLabel
-         %24 = OpLoad %int %x
-         %28 = OpAccessChain %_ptr_Function_int %s %uint_0 %int_1
-         %29 = OpIAdd %int %24 %int_1
-               OpStore %28 %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %32 = OpLoad %int %31
-         %34 = OpAccessChain %_ptr_Function_int %s %uint_0 %32
-         %35 = OpLoad %int %34
-         %37 = OpLoad %int %x
-         %38 = OpIEqual %bool %35 %37
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
-               OpReturnValue %int_n1
-         %40 = OpLabel
-         %44 = OpLoad %int %x
-               OpReturnValue %44
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %50
-          %i = OpVariable %_ptr_Function_int Function %50
-          %j = OpVariable %_ptr_Function_int Function %50
-        %s_1 = OpVariable %_ptr_Function_S Function %54
-      %param = OpVariable %_ptr_Function_S Function %54
-    %param_1 = OpVariable %_ptr_Function_int Function %50
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-         %62 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %64 = OpLoad %int %63
-         %66 = OpIAdd %int %int_2 %64
-         %67 = OpSLessThan %bool %62 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %59
-         %68 = OpLabel
-               OpStore %j %int_0
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %j
-         %76 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %77 = OpLoad %int %76
-         %79 = OpIAdd %int %int_3 %77
-         %80 = OpSLessThan %bool %75 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %72
-         %81 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpLoad %int %j
-         %86 = OpLoad %S %s_1
-               OpStore %param %86
-         %87 = OpIAdd %int %84 %85
-               OpStore %param_1 %87
-         %88 = OpFunctionCall %int %func_struct_S_i1_2_1_i1_ %param %param_1
-         %91 = OpLoad %int %a
-         %92 = OpIAdd %int %91 %88
-               OpStore %a %92
-               OpBranch %73
-         %73 = OpLabel
-         %93 = OpLoad %int %j
-         %94 = OpIAdd %int %93 %int_1
-               OpStore %j %94
-               OpBranch %71
-         %72 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-         %95 = OpLoad %int %i
-         %96 = OpIAdd %int %95 %int_1
-               OpStore %i %96
-               OpBranch %58
-         %59 = OpLabel
-         %97 = OpLoad %int %a
-         %99 = OpIEqual %bool %97 %int_30
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %102
-        %101 = OpLabel
-               OpStore %x_GLF_color %105
-               OpBranch %100
-        %102 = OpLabel
-               OpStore %x_GLF_color %106
-               OpBranch %100
-        %100 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %107
-        %110 = OpLabel
-        %111 = OpFunctionCall %void %main_1
-        %112 = OpLoad %v4float %x_GLF_color
-        %113 = OpCompositeConstruct %main_out %112
-               OpReturnValue %113
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-        %115 = OpLabel
-        %116 = OpFunctionCall %main_out %main_inner
-        %117 = OpCompositeExtract %v4float %116 0
-               OpStore %x_GLF_color_1_1 %117
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ddc01d1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-unused-struct/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,89 +0,0 @@
-struct S {
-  arr : array<i32, 2>;
-};
-
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i1_2_1_i1_(s : ptr<function, S>, x : ptr<function, i32>) -> i32 {
-  let x_16 : i32 = *(x);
-  (*(s)).arr[1] = (x_16 + 1);
-  let x_18 : i32 = x_9.one;
-  let x_19 : i32 = (*(s)).arr[x_18];
-  let x_20 : i32 = *(x);
-  if ((x_19 == x_20)) {
-    return -1;
-  }
-  let x_21 : i32 = *(x);
-  return x_21;
-}
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  var j : i32;
-  var s_1 : S;
-  var param : S;
-  var param_1 : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_22 : i32 = i;
-    let x_23 : i32 = x_9.one;
-    if ((x_22 < (2 + x_23))) {
-    } else {
-      break;
-    }
-    j = 0;
-    loop {
-      let x_25 : i32 = j;
-      let x_26 : i32 = x_9.one;
-      if ((x_25 < (3 + x_26))) {
-      } else {
-        break;
-      }
-      let x_28 : i32 = i;
-      let x_29 : i32 = j;
-      let x_79 : S = s_1;
-      param = x_79;
-      param_1 = (x_28 + x_29);
-      let x_31 : i32 = func_struct_S_i1_2_1_i1_(&(param), &(param_1));
-      let x_32 : i32 = a;
-      a = (x_32 + x_31);
-
-      continuing {
-        let x_34 : i32 = j;
-        j = (x_34 + 1);
-      }
-    }
-
-    continuing {
-      let x_36 : i32 = i;
-      i = (x_36 + 1);
-    }
-  }
-  let x_38 : i32 = a;
-  if ((x_38 == 30)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4dbce1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-
-void main_1() {
-  int i = 0;
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    const int x_38 = i;
-    const int x_40 = asint(x_6[0].x);
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    while (true) {
-      const int x_48 = asint(x_6[0].x);
-      if ((x_48 == 1)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_55 = asint(x_9[0].x);
-  v.y = float(x_55);
-  const float x_59 = v.y;
-  x_GLF_color.y = x_59;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.msl
deleted file mode 100644
index a9d7c8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct buf1 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  int i = 0;
-  float4 v = 0.0f;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    int const x_38 = i;
-    int const x_40 = x_6.one;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    while (true) {
-      int const x_48 = x_6.one;
-      if ((x_48 == 1)) {
-        *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  int const x_55 = x_9.zero;
-  v.y = float(x_55);
-  float const x_59 = v.y;
-  (*(tint_symbol_3)).y = x_59;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f089588..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "zero"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf1 = OpTypeStruct %int
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %53 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %v = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %x_GLF_color %25
-               OpStore %i %int_0
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %31 = OpLoad %int %i
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %36 = OpLoad %int %35
-         %37 = OpSLessThan %bool %31 %36
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %28
-         %39 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %47 = OpLoad %int %46
-         %49 = OpIEqual %bool %47 %int_1
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpBranchConditional %false %42 %43
-         %43 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpIAdd %int %55 %int_1
-               OpStore %i %56
-               OpBranch %27
-         %28 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %58 = OpLoad %int %57
-         %61 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %62 = OpConvertSToF %float %58
-               OpStore %61 %62
-         %63 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %64 = OpLoad %float %63
-         %66 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %66 %64
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 19c0780..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[block]]
-struct buf1 {
-  zero : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-fn main_1() {
-  var i : i32;
-  var v : vec4<f32>;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  i = 0;
-  loop {
-    let x_38 : i32 = i;
-    let x_40 : i32 = x_6.one;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    loop {
-      let x_48 : i32 = x_6.one;
-      if ((x_48 == 1)) {
-        x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      }
-
-      continuing {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_55 : i32 = x_9.zero;
-  v.y = f32(x_55);
-  let x_59 : f32 = v.y;
-  x_GLF_color.y = x_59;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4dbce1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-
-void main_1() {
-  int i = 0;
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    const int x_38 = i;
-    const int x_40 = asint(x_6[0].x);
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    while (true) {
-      const int x_48 = asint(x_6[0].x);
-      if ((x_48 == 1)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_55 = asint(x_9[0].x);
-  v.y = float(x_55);
-  const float x_59 = v.y;
-  x_GLF_color.y = x_59;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.msl
deleted file mode 100644
index a9d7c8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct buf1 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  int i = 0;
-  float4 v = 0.0f;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    int const x_38 = i;
-    int const x_40 = x_6.one;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    while (true) {
-      int const x_48 = x_6.one;
-      if ((x_48 == 1)) {
-        *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      int const x_52 = i;
-      i = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-    }
-  }
-  int const x_55 = x_9.zero;
-  v.y = float(x_55);
-  float const x_59 = v.y;
-  (*(tint_symbol_3)).y = x_59;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f089588..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,143 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "zero"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf1 = OpTypeStruct %int
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %53 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %v = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %x_GLF_color %25
-               OpStore %i %int_0
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %31 = OpLoad %int %i
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %36 = OpLoad %int %35
-         %37 = OpSLessThan %bool %31 %36
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %28
-         %39 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %47 = OpLoad %int %46
-         %49 = OpIEqual %bool %47 %int_1
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpBranchConditional %false %42 %43
-         %43 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpIAdd %int %55 %int_1
-               OpStore %i %56
-               OpBranch %27
-         %28 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %58 = OpLoad %int %57
-         %61 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %62 = OpConvertSToF %float %58
-               OpStore %61 %62
-         %63 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %64 = OpLoad %float %63
-         %66 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %66 %64
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 19c0780..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplification-while-inside-for/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[block]]
-struct buf1 {
-  zero : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-fn main_1() {
-  var i : i32;
-  var v : vec4<f32>;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  i = 0;
-  loop {
-    let x_38 : i32 = i;
-    let x_40 : i32 = x_6.one;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    loop {
-      let x_48 : i32 = x_6.one;
-      if ((x_48 == 1)) {
-        x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      }
-
-      continuing {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      let x_52 : i32 = i;
-      i = (x_52 + 1);
-    }
-  }
-  let x_55 : i32 = x_9.zero;
-  v.y = f32(x_55);
-  let x_59 : f32 = v.y;
-  x_GLF_color.y = x_59;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 973b5de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-void set_int4(inout int4 vec, int idx, int val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int4 a = int4(0, 0, 0, 0);
-  int i = 0;
-  int sum = 0;
-  a = int4(0, 0, 0, 0);
-  i = 0;
-  while (true) {
-    const int x_40 = i;
-    const int x_42 = asint(x_7[0].w);
-    if ((x_40 < (x_42 + 1))) {
-    } else {
-      break;
-    }
-    const int x_46 = i;
-    const int x_48 = asint(x_7[0].x);
-    const uint scalar_offset = ((4u * uint(clamp(x_46, x_48, i)))) / 4;
-    const int x_52 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_52 == 1)) {
-      set_int4(a, i, 5);
-    } else {
-      set_int4(a, i, i);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_65 = a.x;
-  const int x_67 = a.y;
-  const int x_70 = a.z;
-  const int x_73 = a.w;
-  sum = (((x_65 + x_67) + x_70) + x_73);
-  if ((sum == 10)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.msl
deleted file mode 100644
index e03ded2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int4 sequence;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int4 a = 0;
-  int i = 0;
-  int sum = 0;
-  a = int4(0, 0, 0, 0);
-  i = 0;
-  while (true) {
-    int const x_40 = i;
-    int const x_42 = x_7.sequence.w;
-    if ((x_40 < as_type<int>((as_type<uint>(x_42) + as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_46 = i;
-    int const x_48 = x_7.sequence.x;
-    int const x_49 = i;
-    int const x_52 = x_7.sequence[clamp(x_46, x_48, x_49)];
-    if ((x_52 == 1)) {
-      int const x_57 = i;
-      a[x_57] = 5;
-    } else {
-      int const x_59 = i;
-      int const x_60 = i;
-      a[x_59] = x_60;
-    }
-    {
-      int const x_62 = i;
-      i = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  int const x_65 = a.x;
-  int const x_67 = a.y;
-  int const x_70 = a.z;
-  int const x_73 = a.w;
-  sum = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_65) + as_type<uint>(x_67)))) + as_type<uint>(x_70)))) + as_type<uint>(x_73)));
-  int const x_75 = sum;
-  if ((x_75 == 10)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 34db9d1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,158 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 98
-; Schema: 0
-               OpCapability Shader
-         %49 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "sequence"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %sum "sum"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-       %buf0 = OpTypeStruct %v4int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %19 = OpConstantNull %v4int
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-         %25 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_3 = OpConstant %uint 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %int_10 = OpConstant %int 10
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %85 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %87 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-          %a = OpVariable %_ptr_Function_v4int Function %19
-          %i = OpVariable %_ptr_Function_int Function %22
-        %sum = OpVariable %_ptr_Function_int Function %22
-               OpStore %a %25
-               OpStore %i %int_0
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %i
-         %35 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %uint_3
-         %36 = OpLoad %int %35
-         %38 = OpIAdd %int %36 %int_1
-         %39 = OpSLessThan %bool %30 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %27
-         %41 = OpLabel
-         %44 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %uint_0
-         %46 = OpLoad %int %45
-         %47 = OpLoad %int %i
-         %48 = OpExtInst %int %49 SClamp %44 %46 %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %48
-         %51 = OpLoad %int %50
-         %52 = OpIEqual %bool %51 %int_1
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-         %56 = OpLoad %int %i
-         %57 = OpAccessChain %_ptr_Function_int %a %56
-               OpStore %57 %int_5
-               OpBranch %53
-         %55 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpLoad %int %i
-         %61 = OpAccessChain %_ptr_Function_int %a %59
-               OpStore %61 %60
-               OpBranch %53
-         %53 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %62 = OpLoad %int %i
-         %63 = OpIAdd %int %62 %int_1
-               OpStore %i %63
-               OpBranch %26
-         %27 = OpLabel
-         %64 = OpAccessChain %_ptr_Function_int %a %uint_0
-         %65 = OpLoad %int %64
-         %67 = OpAccessChain %_ptr_Function_int %a %uint_1
-         %68 = OpLoad %int %67
-         %70 = OpAccessChain %_ptr_Function_int %a %uint_2
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Function_int %a %uint_3
-         %73 = OpLoad %int %72
-         %74 = OpIAdd %int %65 %68
-         %75 = OpIAdd %int %74 %71
-         %76 = OpIAdd %int %75 %73
-               OpStore %sum %76
-         %77 = OpLoad %int %sum
-         %79 = OpIEqual %bool %77 %int_10
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpStore %x_GLF_color %85
-               OpBranch %80
-         %82 = OpLabel
-               OpStore %x_GLF_color %86
-               OpBranch %80
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %87
-         %90 = OpLabel
-         %91 = OpFunctionCall %void %main_1
-         %92 = OpLoad %v4float %x_GLF_color
-         %93 = OpCompositeConstruct %main_out %92
-               OpReturnValue %93
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %95 = OpLabel
-         %96 = OpFunctionCall %main_out %main_inner
-         %97 = OpCompositeExtract %v4float %96 0
-               OpStore %x_GLF_color_1_1 %97
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 7e6bd6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-[[block]]
-struct buf0 {
-  sequence : vec4<i32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec4<i32>;
-  var i : i32;
-  var sum : i32;
-  a = vec4<i32>(0, 0, 0, 0);
-  i = 0;
-  loop {
-    let x_40 : i32 = i;
-    let x_42 : i32 = x_7.sequence.w;
-    if ((x_40 < (x_42 + 1))) {
-    } else {
-      break;
-    }
-    let x_46 : i32 = i;
-    let x_48 : i32 = x_7.sequence.x;
-    let x_49 : i32 = i;
-    let x_52 : i32 = x_7.sequence[clamp(x_46, x_48, x_49)];
-    if ((x_52 == 1)) {
-      let x_57 : i32 = i;
-      a[x_57] = 5;
-    } else {
-      let x_59 : i32 = i;
-      let x_60 : i32 = i;
-      a[x_59] = x_60;
-    }
-
-    continuing {
-      let x_62 : i32 = i;
-      i = (x_62 + 1);
-    }
-  }
-  let x_65 : i32 = a.x;
-  let x_67 : i32 = a.y;
-  let x_70 : i32 = a.z;
-  let x_73 : i32 = a.w;
-  sum = (((x_65 + x_67) + x_70) + x_73);
-  let x_75 : i32 = sum;
-  if ((x_75 == 10)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 973b5de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-void set_int4(inout int4 vec, int idx, int val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int4 a = int4(0, 0, 0, 0);
-  int i = 0;
-  int sum = 0;
-  a = int4(0, 0, 0, 0);
-  i = 0;
-  while (true) {
-    const int x_40 = i;
-    const int x_42 = asint(x_7[0].w);
-    if ((x_40 < (x_42 + 1))) {
-    } else {
-      break;
-    }
-    const int x_46 = i;
-    const int x_48 = asint(x_7[0].x);
-    const uint scalar_offset = ((4u * uint(clamp(x_46, x_48, i)))) / 4;
-    const int x_52 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_52 == 1)) {
-      set_int4(a, i, 5);
-    } else {
-      set_int4(a, i, i);
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_65 = a.x;
-  const int x_67 = a.y;
-  const int x_70 = a.z;
-  const int x_73 = a.w;
-  sum = (((x_65 + x_67) + x_70) + x_73);
-  if ((sum == 10)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.msl
deleted file mode 100644
index e03ded2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int4 sequence;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int4 a = 0;
-  int i = 0;
-  int sum = 0;
-  a = int4(0, 0, 0, 0);
-  i = 0;
-  while (true) {
-    int const x_40 = i;
-    int const x_42 = x_7.sequence.w;
-    if ((x_40 < as_type<int>((as_type<uint>(x_42) + as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_46 = i;
-    int const x_48 = x_7.sequence.x;
-    int const x_49 = i;
-    int const x_52 = x_7.sequence[clamp(x_46, x_48, x_49)];
-    if ((x_52 == 1)) {
-      int const x_57 = i;
-      a[x_57] = 5;
-    } else {
-      int const x_59 = i;
-      int const x_60 = i;
-      a[x_59] = x_60;
-    }
-    {
-      int const x_62 = i;
-      i = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  int const x_65 = a.x;
-  int const x_67 = a.y;
-  int const x_70 = a.z;
-  int const x_73 = a.w;
-  sum = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_65) + as_type<uint>(x_67)))) + as_type<uint>(x_70)))) + as_type<uint>(x_73)));
-  int const x_75 = sum;
-  if ((x_75 == 10)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 34db9d1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,158 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 98
-; Schema: 0
-               OpCapability Shader
-         %49 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "sequence"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %sum "sum"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-       %buf0 = OpTypeStruct %v4int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %19 = OpConstantNull %v4int
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-         %25 = OpConstantComposite %v4int %int_0 %int_0 %int_0 %int_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_3 = OpConstant %uint 3
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %int_10 = OpConstant %int 10
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %85 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %87 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-          %a = OpVariable %_ptr_Function_v4int Function %19
-          %i = OpVariable %_ptr_Function_int Function %22
-        %sum = OpVariable %_ptr_Function_int Function %22
-               OpStore %a %25
-               OpStore %i %int_0
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %i
-         %35 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %uint_3
-         %36 = OpLoad %int %35
-         %38 = OpIAdd %int %36 %int_1
-         %39 = OpSLessThan %bool %30 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %27
-         %41 = OpLabel
-         %44 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %uint_0
-         %46 = OpLoad %int %45
-         %47 = OpLoad %int %i
-         %48 = OpExtInst %int %49 SClamp %44 %46 %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %48
-         %51 = OpLoad %int %50
-         %52 = OpIEqual %bool %51 %int_1
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-         %56 = OpLoad %int %i
-         %57 = OpAccessChain %_ptr_Function_int %a %56
-               OpStore %57 %int_5
-               OpBranch %53
-         %55 = OpLabel
-         %59 = OpLoad %int %i
-         %60 = OpLoad %int %i
-         %61 = OpAccessChain %_ptr_Function_int %a %59
-               OpStore %61 %60
-               OpBranch %53
-         %53 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %62 = OpLoad %int %i
-         %63 = OpIAdd %int %62 %int_1
-               OpStore %i %63
-               OpBranch %26
-         %27 = OpLabel
-         %64 = OpAccessChain %_ptr_Function_int %a %uint_0
-         %65 = OpLoad %int %64
-         %67 = OpAccessChain %_ptr_Function_int %a %uint_1
-         %68 = OpLoad %int %67
-         %70 = OpAccessChain %_ptr_Function_int %a %uint_2
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Function_int %a %uint_3
-         %73 = OpLoad %int %72
-         %74 = OpIAdd %int %65 %68
-         %75 = OpIAdd %int %74 %71
-         %76 = OpIAdd %int %75 %73
-               OpStore %sum %76
-         %77 = OpLoad %int %sum
-         %79 = OpIEqual %bool %77 %int_10
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpStore %x_GLF_color %85
-               OpBranch %80
-         %82 = OpLabel
-               OpStore %x_GLF_color %86
-               OpBranch %80
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %87
-         %90 = OpLabel
-         %91 = OpFunctionCall %void %main_1
-         %92 = OpLoad %v4float %x_GLF_color
-         %93 = OpCompositeConstruct %main_out %92
-               OpReturnValue %93
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %95 = OpLabel
-         %96 = OpFunctionCall %main_out %main_inner
-         %97 = OpCompositeExtract %v4float %96 0
-               OpStore %x_GLF_color_1_1 %97
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7e6bd6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-clamp-max-itself/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-[[block]]
-struct buf0 {
-  sequence : vec4<i32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec4<i32>;
-  var i : i32;
-  var sum : i32;
-  a = vec4<i32>(0, 0, 0, 0);
-  i = 0;
-  loop {
-    let x_40 : i32 = i;
-    let x_42 : i32 = x_7.sequence.w;
-    if ((x_40 < (x_42 + 1))) {
-    } else {
-      break;
-    }
-    let x_46 : i32 = i;
-    let x_48 : i32 = x_7.sequence.x;
-    let x_49 : i32 = i;
-    let x_52 : i32 = x_7.sequence[clamp(x_46, x_48, x_49)];
-    if ((x_52 == 1)) {
-      let x_57 : i32 = i;
-      a[x_57] = 5;
-    } else {
-      let x_59 : i32 = i;
-      let x_60 : i32 = i;
-      a[x_59] = x_60;
-    }
-
-    continuing {
-      let x_62 : i32 = i;
-      i = (x_62 + 1);
-    }
-  }
-  let x_65 : i32 = a.x;
-  let x_67 : i32 = a.y;
-  let x_70 : i32 = a.z;
-  let x_73 : i32 = a.w;
-  sum = (((x_65 + x_67) + x_70) + x_73);
-  let x_75 : i32 = sum;
-  if ((x_75 == 10)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f8b9b38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_24 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_26 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = max(x_24, max(x_26, 1));
-  const int x_29 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_29 == x_31)) {
-    const int x_36 = a;
-    const int x_39 = asint(x_6[1].x);
-    const int x_42 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_36), float(x_39), float(x_42), float(a));
-  } else {
-    const float x_48 = float(a);
-    x_GLF_color = float4(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.msl
deleted file mode 100644
index de6f3d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_24 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = max(x_24, max(x_26, 1));
-  int const x_29 = a;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_29 == x_31)) {
-    int const x_36 = a;
-    int const x_39 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_44 = a;
-    *(tint_symbol_3) = float4(float(x_36), float(x_39), float(x_42), float(x_44));
-  } else {
-    int const x_47 = a;
-    float const x_48 = float(x_47);
-    *(tint_symbol_3) = float4(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 72aee85..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-         %30 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %28 = OpLoad %int %27
-         %31 = OpExtInst %int %30 SMax %28 %int_1
-         %29 = OpExtInst %int %30 SMax %26 %31
-               OpStore %a %29
-         %33 = OpLoad %int %a
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %36 = OpIEqual %bool %33 %35
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-         %41 = OpLoad %int %a
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpLoad %int %a
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpConvertSToF %float %45
-         %50 = OpConvertSToF %float %46
-         %51 = OpCompositeConstruct %v4float %47 %48 %49 %50
-               OpStore %x_GLF_color %51
-               OpBranch %38
-         %40 = OpLabel
-         %52 = OpLoad %int %a
-         %53 = OpConvertSToF %float %52
-         %54 = OpCompositeConstruct %v4float %53 %53 %53 %53
-               OpStore %x_GLF_color %54
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c54d32c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_24 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = max(x_24, max(x_26, 1));
-  let x_29 : i32 = a;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_29 == x_31)) {
-    let x_36 : i32 = a;
-    let x_39 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_44 : i32 = a;
-    x_GLF_color = vec4<f32>(f32(x_36), f32(x_39), f32(x_42), f32(x_44));
-  } else {
-    let x_47 : i32 = a;
-    let x_48 : f32 = f32(x_47);
-    x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f8b9b38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_24 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_26 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = max(x_24, max(x_26, 1));
-  const int x_29 = a;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_31 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  if ((x_29 == x_31)) {
-    const int x_36 = a;
-    const int x_39 = asint(x_6[1].x);
-    const int x_42 = asint(x_6[1].x);
-    x_GLF_color = float4(float(x_36), float(x_39), float(x_42), float(a));
-  } else {
-    const float x_48 = float(a);
-    x_GLF_color = float4(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.msl
deleted file mode 100644
index de6f3d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int const x_24 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_26 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  a = max(x_24, max(x_26, 1));
-  int const x_29 = a;
-  int const x_31 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_29 == x_31)) {
-    int const x_36 = a;
-    int const x_39 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_44 = a;
-    *(tint_symbol_3) = float4(float(x_36), float(x_39), float(x_42), float(x_44));
-  } else {
-    int const x_47 = a;
-    float const x_48 = float(x_47);
-    *(tint_symbol_3) = float4(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 72aee85..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,107 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-         %30 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-         %25 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %28 = OpLoad %int %27
-         %31 = OpExtInst %int %30 SMax %28 %int_1
-         %29 = OpExtInst %int %30 SMax %26 %31
-               OpStore %a %29
-         %33 = OpLoad %int %a
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %36 = OpIEqual %bool %33 %35
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-         %41 = OpLoad %int %a
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpLoad %int %a
-         %47 = OpConvertSToF %float %41
-         %48 = OpConvertSToF %float %43
-         %49 = OpConvertSToF %float %45
-         %50 = OpConvertSToF %float %46
-         %51 = OpCompositeConstruct %v4float %47 %48 %49 %50
-               OpStore %x_GLF_color %51
-               OpBranch %38
-         %40 = OpLabel
-         %52 = OpLoad %int %a
-         %53 = OpConvertSToF %float %52
-         %54 = OpCompositeConstruct %v4float %53 %53 %53 %53
-               OpStore %x_GLF_color %54
-               OpBranch %38
-         %38 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c54d32c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-combine-compares-max-max-one/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  let x_24 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_26 : i32 = x_6.x_GLF_uniform_int_values[0];
-  a = max(x_24, max(x_26, 1));
-  let x_29 : i32 = a;
-  let x_31 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_29 == x_31)) {
-    let x_36 : i32 = a;
-    let x_39 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_44 : i32 = a;
-    x_GLF_color = vec4<f32>(f32(x_36), f32(x_39), f32(x_42), f32(x_44));
-  } else {
-    let x_47 : i32 = a;
-    let x_48 : f32 = f32(x_47);
-    x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4343e59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,51 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int r = 0;
-  i = 0;
-  r = 0;
-  while (true) {
-    const int x_35 = r;
-    const int x_37 = asint(x_7[0].x);
-    if ((x_35 < (x_37 * 4))) {
-    } else {
-      break;
-    }
-    const int x_41 = r;
-    const int x_43 = asint(x_7[0].x);
-    i = (i + int4(1, 2, 3, 4)[(x_41 / x_43)]);
-    {
-      r = (r + 2);
-    }
-  }
-  if ((i == 10)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.msl
deleted file mode 100644
index 11a33b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int r = 0;
-  i = 0;
-  r = 0;
-  while (true) {
-    int const x_35 = r;
-    int const x_37 = x_7.two;
-    if ((x_35 < as_type<int>((as_type<uint>(x_37) * as_type<uint>(4))))) {
-    } else {
-      break;
-    }
-    int const x_41 = r;
-    int const x_43 = x_7.two;
-    int const x_46 = i;
-    i = as_type<int>((as_type<uint>(x_46) + as_type<uint>(int4(1, 2, 3, 4)[(x_41 / x_43)])));
-    {
-      int const x_48 = r;
-      r = as_type<int>((as_type<uint>(x_48) + as_type<uint>(2)));
-    }
-  }
-  int const x_50 = i;
-  if ((x_50 == 10)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d4230f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,126 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 73
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %r "r"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-         %46 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-     %int_10 = OpConstant %int 10
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %60 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %61 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %62 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %18
-          %r = OpVariable %_ptr_Function_int Function %18
-               OpStore %i %int_0
-               OpStore %r %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %r
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpIMul %int %30 %int_4
-         %33 = OpSLessThan %bool %25 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %22
-         %35 = OpLabel
-         %38 = OpLoad %int %r
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %40 = OpLoad %int %39
-         %41 = OpLoad %int %i
-         %47 = OpSDiv %int %38 %40
-         %48 = OpVectorExtractDynamic %int %46 %47
-         %49 = OpIAdd %int %41 %48
-               OpStore %i %49
-               OpBranch %23
-         %23 = OpLabel
-         %50 = OpLoad %int %r
-         %51 = OpIAdd %int %50 %int_2
-               OpStore %r %51
-               OpBranch %21
-         %22 = OpLabel
-         %52 = OpLoad %int %i
-         %54 = OpIEqual %bool %52 %int_10
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpStore %x_GLF_color %60
-               OpBranch %55
-         %57 = OpLabel
-               OpStore %x_GLF_color %61
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %62
-         %65 = OpLabel
-         %66 = OpFunctionCall %void %main_1
-         %67 = OpLoad %v4float %x_GLF_color
-         %68 = OpCompositeConstruct %main_out %67
-               OpReturnValue %68
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %70 = OpLabel
-         %71 = OpFunctionCall %main_out %main_inner
-         %72 = OpCompositeExtract %v4float %71 0
-               OpStore %x_GLF_color_1_1 %72
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a3a1f46..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,50 +0,0 @@
-[[block]]
-struct buf0 {
-  two : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var r : i32;
-  i = 0;
-  r = 0;
-  loop {
-    let x_35 : i32 = r;
-    let x_37 : i32 = x_7.two;
-    if ((x_35 < (x_37 * 4))) {
-    } else {
-      break;
-    }
-    let x_41 : i32 = r;
-    let x_43 : i32 = x_7.two;
-    let x_46 : i32 = i;
-    i = (x_46 + vec4<i32>(1, 2, 3, 4)[(x_41 / x_43)]);
-
-    continuing {
-      let x_48 : i32 = r;
-      r = (x_48 + 2);
-    }
-  }
-  let x_50 : i32 = i;
-  if ((x_50 == 10)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4343e59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,51 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int r = 0;
-  i = 0;
-  r = 0;
-  while (true) {
-    const int x_35 = r;
-    const int x_37 = asint(x_7[0].x);
-    if ((x_35 < (x_37 * 4))) {
-    } else {
-      break;
-    }
-    const int x_41 = r;
-    const int x_43 = asint(x_7[0].x);
-    i = (i + int4(1, 2, 3, 4)[(x_41 / x_43)]);
-    {
-      r = (r + 2);
-    }
-  }
-  if ((i == 10)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.msl
deleted file mode 100644
index 11a33b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int r = 0;
-  i = 0;
-  r = 0;
-  while (true) {
-    int const x_35 = r;
-    int const x_37 = x_7.two;
-    if ((x_35 < as_type<int>((as_type<uint>(x_37) * as_type<uint>(4))))) {
-    } else {
-      break;
-    }
-    int const x_41 = r;
-    int const x_43 = x_7.two;
-    int const x_46 = i;
-    i = as_type<int>((as_type<uint>(x_46) + as_type<uint>(int4(1, 2, 3, 4)[(x_41 / x_43)])));
-    {
-      int const x_48 = r;
-      r = as_type<int>((as_type<uint>(x_48) + as_type<uint>(2)));
-    }
-  }
-  int const x_50 = i;
-  if ((x_50 == 10)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d4230f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,126 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 73
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %r "r"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-         %46 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
-     %int_10 = OpConstant %int 10
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %60 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %61 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %62 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %18
-          %r = OpVariable %_ptr_Function_int Function %18
-               OpStore %i %int_0
-               OpStore %r %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %r
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpIMul %int %30 %int_4
-         %33 = OpSLessThan %bool %25 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %22
-         %35 = OpLabel
-         %38 = OpLoad %int %r
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %40 = OpLoad %int %39
-         %41 = OpLoad %int %i
-         %47 = OpSDiv %int %38 %40
-         %48 = OpVectorExtractDynamic %int %46 %47
-         %49 = OpIAdd %int %41 %48
-               OpStore %i %49
-               OpBranch %23
-         %23 = OpLabel
-         %50 = OpLoad %int %r
-         %51 = OpIAdd %int %50 %int_2
-               OpStore %r %51
-               OpBranch %21
-         %22 = OpLabel
-         %52 = OpLoad %int %i
-         %54 = OpIEqual %bool %52 %int_10
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpStore %x_GLF_color %60
-               OpBranch %55
-         %57 = OpLabel
-               OpStore %x_GLF_color %61
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %62
-         %65 = OpLabel
-         %66 = OpFunctionCall %void %main_1
-         %67 = OpLoad %v4float %x_GLF_color
-         %68 = OpCompositeConstruct %main_out %67
-               OpReturnValue %68
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %70 = OpLabel
-         %71 = OpFunctionCall %main_out %main_inner
-         %72 = OpCompositeExtract %v4float %71 0
-               OpStore %x_GLF_color_1_1 %72
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a3a1f46..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-component-uniform-idx/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,50 +0,0 @@
-[[block]]
-struct buf0 {
-  two : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var r : i32;
-  i = 0;
-  r = 0;
-  loop {
-    let x_35 : i32 = r;
-    let x_37 : i32 = x_7.two;
-    if ((x_35 < (x_37 * 4))) {
-    } else {
-      break;
-    }
-    let x_41 : i32 = r;
-    let x_43 : i32 = x_7.two;
-    let x_46 : i32 = i;
-    i = (x_46 + vec4<i32>(1, 2, 3, 4)[(x_41 / x_43)]);
-
-    continuing {
-      let x_48 : i32 = r;
-      r = (x_48 + 2);
-    }
-  }
-  let x_50 : i32 = i;
-  if ((x_50 == 10)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d719788..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  const uint x_27 = x_6[0].x;
-  a = (x_27 / 1u);
-  if ((a == 2u)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.msl
deleted file mode 100644
index bd21fbd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ uint two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  uint const x_27 = x_6.two;
-  a = (x_27 / 1u);
-  uint const x_29 = a;
-  if ((x_29 == 2u)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 63344c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-       %buf0 = OpTypeStruct %uint
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %18 = OpConstantNull %uint
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %34 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %35 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %36 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %18
-         %21 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %22 = OpLoad %uint %21
-         %24 = OpUDiv %uint %22 %uint_1
-               OpStore %a %24
-         %25 = OpLoad %uint %a
-         %27 = OpIEqual %bool %25 %uint_2
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %29
-         %31 = OpLabel
-               OpStore %x_GLF_color %35
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %36
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %main_1
-         %41 = OpLoad %v4float %x_GLF_color
-         %42 = OpCompositeConstruct %main_out %41
-               OpReturnValue %42
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpFunctionCall %main_out %main_inner
-         %46 = OpCompositeExtract %v4float %45 0
-               OpStore %x_GLF_color_1_1 %46
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 50c6355..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct buf0 {
-  two : u32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  let x_27 : u32 = x_6.two;
-  a = (x_27 / 1u);
-  let x_29 : u32 = a;
-  if ((x_29 == 2u)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d719788..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  uint a = 0u;
-  const uint x_27 = x_6[0].x;
-  a = (x_27 / 1u);
-  if ((a == 2u)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.msl
deleted file mode 100644
index bd21fbd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ uint two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  uint const x_27 = x_6.two;
-  a = (x_27 / 1u);
-  uint const x_29 = a;
-  if ((x_29 == 2u)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 63344c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-       %buf0 = OpTypeStruct %uint
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %18 = OpConstantNull %uint
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %34 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %35 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %36 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %18
-         %21 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0
-         %22 = OpLoad %uint %21
-         %24 = OpUDiv %uint %22 %uint_1
-               OpStore %a %24
-         %25 = OpLoad %uint %a
-         %27 = OpIEqual %bool %25 %uint_2
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpStore %x_GLF_color %34
-               OpBranch %29
-         %31 = OpLabel
-               OpStore %x_GLF_color %35
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %36
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %main_1
-         %41 = OpLoad %v4float %x_GLF_color
-         %42 = OpCompositeConstruct %main_out %41
-               OpReturnValue %42
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %44 = OpLabel
-         %45 = OpFunctionCall %main_out %main_inner
-         %46 = OpCompositeExtract %v4float %45 0
-               OpStore %x_GLF_color_1_1 %46
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 50c6355..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-div-by-uint-one/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct buf0 {
-  two : u32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : u32;
-  let x_27 : u32 = x_6.two;
-  a = (x_27 / 1u);
-  let x_29 : u32 = a;
-  if ((x_29 == 2u)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 53970fa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_25 = asint(x_6[1].x);
-  a = x_25;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_27 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  i = -(x_27);
-  while (true) {
-    const int x_33 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_35 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if (((x_33 | x_35) < x_38)) {
-    } else {
-      break;
-    }
-    const int x_41 = i;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    a = (x_41 * x_43);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_47 = a;
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_49 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  if ((x_47 == -(x_49))) {
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_59 = asint(x_6[1].x);
-    const int x_62 = asint(x_6[1].x);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    x_GLF_color = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  } else {
-    const float x_69 = float(a);
-    x_GLF_color = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5a048cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,78 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_25;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i = tint_unary_minus(x_27);
-  while (true) {
-    int const x_33 = i;
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if (((x_33 | x_35) < x_38)) {
-    } else {
-      break;
-    }
-    int const x_41 = i;
-    int const x_43 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    a = as_type<int>((as_type<uint>(x_41) * as_type<uint>(x_43)));
-    {
-      int const x_45 = i;
-      i = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    }
-  }
-  int const x_47 = a;
-  int const x_49 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_47 == tint_unary_minus(x_49))) {
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_59 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  } else {
-    int const x_68 = a;
-    float const x_69 = float(x_68);
-    *(tint_symbol_3) = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 442a5a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,142 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %31 = OpSNegate %int %30
-               OpStore %i %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %41 = OpBitwiseOr %int %36 %38
-         %42 = OpSLessThan %bool %41 %40
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %33
-         %44 = OpLabel
-         %47 = OpLoad %int %i
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpIMul %int %47 %49
-               OpStore %a %50
-               OpBranch %34
-         %34 = OpLabel
-         %51 = OpLoad %int %i
-         %52 = OpIAdd %int %51 %int_1
-               OpStore %i %52
-               OpBranch %32
-         %33 = OpLabel
-         %53 = OpLoad %int %a
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpSNegate %int %55
-         %57 = OpIEqual %bool %53 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpConvertSToF %float %62
-         %70 = OpConvertSToF %float %64
-         %71 = OpConvertSToF %float %66
-         %72 = OpConvertSToF %float %68
-         %73 = OpCompositeConstruct %v4float %69 %70 %71 %72
-               OpStore %x_GLF_color %73
-               OpBranch %58
-         %60 = OpLabel
-         %74 = OpLoad %int %a
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %58
-         %58 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0f3c2eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,61 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_25;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i = -(x_27);
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if (((x_33 | x_35) < x_38)) {
-    } else {
-      break;
-    }
-    let x_41 : i32 = i;
-    let x_43 : i32 = x_6.x_GLF_uniform_int_values[0];
-    a = (x_41 * x_43);
-
-    continuing {
-      let x_45 : i32 = i;
-      i = (x_45 + 1);
-    }
-  }
-  let x_47 : i32 = a;
-  let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_47 == -(x_49))) {
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_59 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65));
-  } else {
-    let x_68 : i32 = a;
-    let x_69 : f32 = f32(x_68);
-    x_GLF_color = vec4<f32>(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 53970fa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_25 = asint(x_6[1].x);
-  a = x_25;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_27 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  i = -(x_27);
-  while (true) {
-    const int x_33 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_35 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_38 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    if (((x_33 | x_35) < x_38)) {
-    } else {
-      break;
-    }
-    const int x_41 = i;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_43 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    a = (x_41 * x_43);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_47 = a;
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_49 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  if ((x_47 == -(x_49))) {
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_59 = asint(x_6[1].x);
-    const int x_62 = asint(x_6[1].x);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_65 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    x_GLF_color = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  } else {
-    const float x_69 = float(a);
-    x_GLF_color = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5a048cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,78 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_25 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  a = x_25;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i = tint_unary_minus(x_27);
-  while (true) {
-    int const x_33 = i;
-    int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_38 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if (((x_33 | x_35) < x_38)) {
-    } else {
-      break;
-    }
-    int const x_41 = i;
-    int const x_43 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    a = as_type<int>((as_type<uint>(x_41) * as_type<uint>(x_43)));
-    {
-      int const x_45 = i;
-      i = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-    }
-  }
-  int const x_47 = a;
-  int const x_49 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_47 == tint_unary_minus(x_49))) {
-    int const x_56 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_59 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_62 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_56), float(x_59), float(x_62), float(x_65));
-  } else {
-    int const x_68 = a;
-    float const x_69 = float(x_68);
-    *(tint_symbol_3) = float4(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 442a5a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,142 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %30 = OpLoad %int %29
-         %31 = OpSNegate %int %30
-               OpStore %i %31
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %41 = OpBitwiseOr %int %36 %38
-         %42 = OpSLessThan %bool %41 %40
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %33
-         %44 = OpLabel
-         %47 = OpLoad %int %i
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %49 = OpLoad %int %48
-         %50 = OpIMul %int %47 %49
-               OpStore %a %50
-               OpBranch %34
-         %34 = OpLabel
-         %51 = OpLoad %int %i
-         %52 = OpIAdd %int %51 %int_1
-               OpStore %i %52
-               OpBranch %32
-         %33 = OpLabel
-         %53 = OpLoad %int %a
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpSNegate %int %55
-         %57 = OpIEqual %bool %53 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-         %61 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpConvertSToF %float %62
-         %70 = OpConvertSToF %float %64
-         %71 = OpConvertSToF %float %66
-         %72 = OpConvertSToF %float %68
-         %73 = OpCompositeConstruct %v4float %69 %70 %71 %72
-               OpStore %x_GLF_color %73
-               OpBranch %58
-         %60 = OpLabel
-         %74 = OpLoad %int %a
-         %75 = OpConvertSToF %float %74
-         %76 = OpCompositeConstruct %v4float %75 %75 %75 %75
-               OpStore %x_GLF_color %76
-               OpBranch %58
-         %58 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 0f3c2eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-for-bitwise-condition/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,61 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
-  a = x_25;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i = -(x_27);
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if (((x_33 | x_35) < x_38)) {
-    } else {
-      break;
-    }
-    let x_41 : i32 = i;
-    let x_43 : i32 = x_6.x_GLF_uniform_int_values[0];
-    a = (x_41 * x_43);
-
-    continuing {
-      let x_45 : i32 = i;
-      i = (x_45 + 1);
-    }
-  }
-  let x_47 : i32 = a;
-  let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_47 == -(x_49))) {
-    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_59 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65));
-  } else {
-    let x_68 : i32 = a;
-    let x_69 : f32 = f32(x_68);
-    x_GLF_color = vec4<f32>(x_69, x_69, x_69, x_69);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 283e0bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  const float x_25 = asfloat(x_6[0].x);
-  f = ldexp(x_25, 0);
-  if ((f == 3.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.msl
deleted file mode 100644
index d84266e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float const x_25 = x_6.three;
-  f = ldexp(x_25, 0);
-  float const x_27 = f;
-  if ((x_27 == 3.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 9387060..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,89 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-         %24 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-    %float_3 = OpConstant %float 3
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %37 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-         %21 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %22 = OpLoad %float %21
-         %23 = OpExtInst %float %24 Ldexp %22 %int_0
-               OpStore %f %23
-         %27 = OpLoad %float %f
-         %29 = OpFOrdEqual %bool %27 %float_3
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %x_GLF_color %37
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b5a9b3b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct buf0 {
-  three : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  let x_25 : f32 = x_6.three;
-  f = ldexp(x_25, 0);
-  let x_27 : f32 = f;
-  if ((x_27 == 3.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 283e0bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  const float x_25 = asfloat(x_6[0].x);
-  f = ldexp(x_25, 0);
-  if ((f == 3.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.msl
deleted file mode 100644
index d84266e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float const x_25 = x_6.three;
-  f = ldexp(x_25, 0);
-  float const x_27 = f;
-  if ((x_27 == 3.0f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9387060..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,89 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-         %24 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-    %float_3 = OpConstant %float 3
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %37 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %17
-         %21 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %22 = OpLoad %float %21
-         %23 = OpExtInst %float %24 Ldexp %22 %int_0
-               OpStore %f %23
-         %27 = OpLoad %float %f
-         %29 = OpFOrdEqual %bool %27 %float_3
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %x_GLF_color %37
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b5a9b3b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-ldexp-exponent-zero/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct buf0 {
-  three : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  let x_25 : f32 = x_6.three;
-  f = ldexp(x_25, 0);
-  let x_27 : f32 = f;
-  if ((x_27 == 3.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f1ff6f3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,104 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int A[4] = (int[4])0;
-  bool x_77 = false;
-  bool x_87 = false;
-  bool x_97 = false;
-  bool x_78_phi = false;
-  bool x_88_phi = false;
-  bool x_98_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_33 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  i = x_33;
-  while (true) {
-    const int x_38 = i;
-    const int x_40 = asint(x_6[4].x);
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    const int x_43 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    A[x_43] = x_45;
-    const int x_47 = i;
-    const int x_50 = asint(x_6[3].x);
-    const int x_54 = asint(x_6[1].x);
-    if ((max((2 * x_47), (2 * x_50)) == x_54)) {
-      A[i] = 1;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_63 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_65 = A[x_63];
-  const int x_67 = asint(x_6[3].x);
-  const bool x_68 = (x_65 == x_67);
-  x_78_phi = x_68;
-  if (x_68) {
-    const int x_72 = asint(x_6[3].x);
-    const int x_74 = A[x_72];
-    const int x_76 = asint(x_6[3].x);
-    x_77 = (x_74 == x_76);
-    x_78_phi = x_77;
-  }
-  const bool x_78 = x_78_phi;
-  x_88_phi = x_78;
-  if (x_78) {
-    const int x_82 = asint(x_6[1].x);
-    const int x_84 = A[x_82];
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_86 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_87 = (x_84 == x_86);
-    x_88_phi = x_87;
-  }
-  const bool x_88 = x_88_phi;
-  x_98_phi = x_88;
-  if (x_88) {
-    const int x_92 = asint(x_6[2].x);
-    const int x_94 = A[x_92];
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_96 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_97 = (x_94 == x_96);
-    x_98_phi = x_97;
-  }
-  if (x_98_phi) {
-    const int x_103 = asint(x_6[3].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_106 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_109 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const int x_112 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_103), float(x_106), float(x_109), float(x_112));
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.msl
deleted file mode 100644
index 89bc2bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[4];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 A = {};
-  bool x_77 = false;
-  bool x_87 = false;
-  bool x_97 = false;
-  bool x_78_phi = false;
-  bool x_88_phi = false;
-  bool x_98_phi = false;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i = x_33;
-  while (true) {
-    int const x_38 = i;
-    int const x_40 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    int const x_43 = i;
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    A.arr[x_43] = x_45;
-    int const x_47 = i;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_54 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((max(as_type<int>((as_type<uint>(2) * as_type<uint>(x_47))), as_type<int>((as_type<uint>(2) * as_type<uint>(x_50)))) == x_54)) {
-      int const x_58 = i;
-      A.arr[x_58] = 1;
-    }
-    {
-      int const x_60 = i;
-      i = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-    }
-  }
-  int const x_63 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_65 = A.arr[x_63];
-  int const x_67 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  bool const x_68 = (x_65 == x_67);
-  x_78_phi = x_68;
-  if (x_68) {
-    int const x_72 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_74 = A.arr[x_72];
-    int const x_76 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    x_77 = (x_74 == x_76);
-    x_78_phi = x_77;
-  }
-  bool const x_78 = x_78_phi;
-  x_88_phi = x_78;
-  if (x_78) {
-    int const x_82 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_84 = A.arr[x_82];
-    int const x_86 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    x_87 = (x_84 == x_86);
-    x_88_phi = x_87;
-  }
-  bool const x_88 = x_88_phi;
-  x_98_phi = x_88;
-  if (x_88) {
-    int const x_92 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_94 = A.arr[x_92];
-    int const x_96 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    x_97 = (x_94 == x_96);
-    x_98_phi = x_97;
-  }
-  bool const x_98 = x_98_phi;
-  if (x_98) {
-    int const x_103 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_106 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_109 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_112 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_103), float(x_106), float(x_109), float(x_112));
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 545f9e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,227 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 145
-; Schema: 0
-               OpCapability Shader
-         %65 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %A "A"
-               OpName %x_77 "x_77"
-               OpName %x_87 "x_87"
-               OpName %x_97 "x_97"
-               OpName %x_78_phi "x_78_phi"
-               OpName %x_88_phi "x_88_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-%_ptr_Function__arr_int_uint_4 = OpTypePointer Function %_arr_int_uint_4
-         %26 = OpConstantNull %_arr_int_uint_4
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-        %133 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %134 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %A = OpVariable %_ptr_Function__arr_int_uint_4 Function %26
-       %x_77 = OpVariable %_ptr_Function_bool Function %30
-       %x_87 = OpVariable %_ptr_Function_bool Function %30
-       %x_97 = OpVariable %_ptr_Function_bool Function %30
-   %x_78_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_88_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_98_phi = OpVariable %_ptr_Function_bool Function %30
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %40 = OpLoad %int %39
-               OpStore %i %40
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpLoad %int %i
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %48 = OpLoad %int %47
-         %49 = OpSLessThan %bool %45 %48
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %42
-         %50 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Function_int %A %53
-               OpStore %56 %55
-         %57 = OpLoad %int %i
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %60 = OpLoad %int %59
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %67 = OpIMul %int %int_2 %57
-         %68 = OpIMul %int %int_2 %60
-         %64 = OpExtInst %int %65 SMax %67 %68
-         %69 = OpIEqual %bool %64 %63
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %int %i
-         %73 = OpAccessChain %_ptr_Function_int %A %72
-               OpStore %73 %int_1
-               OpBranch %70
-         %70 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-               OpBranch %41
-         %42 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Function_int %A %77
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %81 = OpLoad %int %80
-         %82 = OpIEqual %bool %79 %81
-               OpStore %x_78_phi %82
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Function_int %A %86
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %90 = OpLoad %int %89
-         %91 = OpIEqual %bool %88 %90
-               OpStore %x_77 %91
-         %92 = OpLoad %bool %x_77
-               OpStore %x_78_phi %92
-               OpBranch %83
-         %83 = OpLabel
-         %93 = OpLoad %bool %x_78_phi
-               OpStore %x_88_phi %93
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %94
-         %95 = OpLabel
-         %96 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpAccessChain %_ptr_Function_int %A %97
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %101 = OpLoad %int %100
-        %102 = OpIEqual %bool %99 %101
-               OpStore %x_87 %102
-        %103 = OpLoad %bool %x_87
-               OpStore %x_88_phi %103
-               OpBranch %94
-         %94 = OpLabel
-        %104 = OpLoad %bool %x_88_phi
-               OpStore %x_98_phi %104
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %105
-        %106 = OpLabel
-        %107 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Function_int %A %108
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %112 = OpLoad %int %111
-        %113 = OpIEqual %bool %110 %112
-               OpStore %x_97 %113
-        %114 = OpLoad %bool %x_97
-               OpStore %x_98_phi %114
-               OpBranch %105
-        %105 = OpLabel
-        %115 = OpLoad %bool %x_98_phi
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-        %119 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %120 = OpLoad %int %119
-        %121 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %122 = OpLoad %int %121
-        %123 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %126 = OpLoad %int %125
-        %127 = OpConvertSToF %float %120
-        %128 = OpConvertSToF %float %122
-        %129 = OpConvertSToF %float %124
-        %130 = OpConvertSToF %float %126
-        %131 = OpCompositeConstruct %v4float %127 %128 %129 %130
-               OpStore %x_GLF_color %131
-               OpBranch %116
-        %118 = OpLabel
-               OpStore %x_GLF_color %133
-               OpBranch %116
-        %116 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %134
-        %137 = OpLabel
-        %138 = OpFunctionCall %void %main_1
-        %139 = OpLoad %v4float %x_GLF_color
-        %140 = OpCompositeConstruct %main_out %139
-               OpReturnValue %140
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %142 = OpLabel
-        %143 = OpFunctionCall %main_out %main_inner
-        %144 = OpCompositeExtract %v4float %143 0
-               OpStore %x_GLF_color_1_1 %144
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f4af7a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,98 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var A : array<i32, 4>;
-  var x_77 : bool;
-  var x_87 : bool;
-  var x_97 : bool;
-  var x_78_phi : bool;
-  var x_88_phi : bool;
-  var x_98_phi : bool;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i = x_33;
-  loop {
-    let x_38 : i32 = i;
-    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-    A[x_43] = x_45;
-    let x_47 : i32 = i;
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_54 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((max((2 * x_47), (2 * x_50)) == x_54)) {
-      let x_58 : i32 = i;
-      A[x_58] = 1;
-    }
-
-    continuing {
-      let x_60 : i32 = i;
-      i = (x_60 + 1);
-    }
-  }
-  let x_63 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_65 : i32 = A[x_63];
-  let x_67 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_68 : bool = (x_65 == x_67);
-  x_78_phi = x_68;
-  if (x_68) {
-    let x_72 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_74 : i32 = A[x_72];
-    let x_76 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_77 = (x_74 == x_76);
-    x_78_phi = x_77;
-  }
-  let x_78 : bool = x_78_phi;
-  x_88_phi = x_78;
-  if (x_78) {
-    let x_82 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_84 : i32 = A[x_82];
-    let x_86 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_87 = (x_84 == x_86);
-    x_88_phi = x_87;
-  }
-  let x_88 : bool = x_88_phi;
-  x_98_phi = x_88;
-  if (x_88) {
-    let x_92 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_94 : i32 = A[x_92];
-    let x_96 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_97 = (x_94 == x_96);
-    x_98_phi = x_97;
-  }
-  let x_98 : bool = x_98_phi;
-  if (x_98) {
-    let x_103 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_106 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_109 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_112 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_103), f32(x_106), f32(x_109), f32(x_112));
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f1ff6f3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,104 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int A[4] = (int[4])0;
-  bool x_77 = false;
-  bool x_87 = false;
-  bool x_97 = false;
-  bool x_78_phi = false;
-  bool x_88_phi = false;
-  bool x_98_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_33 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  i = x_33;
-  while (true) {
-    const int x_38 = i;
-    const int x_40 = asint(x_6[4].x);
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    const int x_43 = i;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    A[x_43] = x_45;
-    const int x_47 = i;
-    const int x_50 = asint(x_6[3].x);
-    const int x_54 = asint(x_6[1].x);
-    if ((max((2 * x_47), (2 * x_50)) == x_54)) {
-      A[i] = 1;
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_63 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_65 = A[x_63];
-  const int x_67 = asint(x_6[3].x);
-  const bool x_68 = (x_65 == x_67);
-  x_78_phi = x_68;
-  if (x_68) {
-    const int x_72 = asint(x_6[3].x);
-    const int x_74 = A[x_72];
-    const int x_76 = asint(x_6[3].x);
-    x_77 = (x_74 == x_76);
-    x_78_phi = x_77;
-  }
-  const bool x_78 = x_78_phi;
-  x_88_phi = x_78;
-  if (x_78) {
-    const int x_82 = asint(x_6[1].x);
-    const int x_84 = A[x_82];
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_86 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_87 = (x_84 == x_86);
-    x_88_phi = x_87;
-  }
-  const bool x_88 = x_88_phi;
-  x_98_phi = x_88;
-  if (x_88) {
-    const int x_92 = asint(x_6[2].x);
-    const int x_94 = A[x_92];
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_96 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_97 = (x_94 == x_96);
-    x_98_phi = x_97;
-  }
-  if (x_98_phi) {
-    const int x_103 = asint(x_6[3].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_106 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_109 = asint(x_6[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const int x_112 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_103), float(x_106), float(x_109), float(x_112));
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.msl
deleted file mode 100644
index 89bc2bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[4];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 A = {};
-  bool x_77 = false;
-  bool x_87 = false;
-  bool x_97 = false;
-  bool x_78_phi = false;
-  bool x_88_phi = false;
-  bool x_98_phi = false;
-  int const x_33 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i = x_33;
-  while (true) {
-    int const x_38 = i;
-    int const x_40 = x_6.x_GLF_uniform_int_values.arr[4].el;
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    int const x_43 = i;
-    int const x_45 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    A.arr[x_43] = x_45;
-    int const x_47 = i;
-    int const x_50 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_54 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    if ((max(as_type<int>((as_type<uint>(2) * as_type<uint>(x_47))), as_type<int>((as_type<uint>(2) * as_type<uint>(x_50)))) == x_54)) {
-      int const x_58 = i;
-      A.arr[x_58] = 1;
-    }
-    {
-      int const x_60 = i;
-      i = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-    }
-  }
-  int const x_63 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_65 = A.arr[x_63];
-  int const x_67 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  bool const x_68 = (x_65 == x_67);
-  x_78_phi = x_68;
-  if (x_68) {
-    int const x_72 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_74 = A.arr[x_72];
-    int const x_76 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    x_77 = (x_74 == x_76);
-    x_78_phi = x_77;
-  }
-  bool const x_78 = x_78_phi;
-  x_88_phi = x_78;
-  if (x_78) {
-    int const x_82 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_84 = A.arr[x_82];
-    int const x_86 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    x_87 = (x_84 == x_86);
-    x_88_phi = x_87;
-  }
-  bool const x_88 = x_88_phi;
-  x_98_phi = x_88;
-  if (x_88) {
-    int const x_92 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_94 = A.arr[x_92];
-    int const x_96 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    x_97 = (x_94 == x_96);
-    x_98_phi = x_97;
-  }
-  bool const x_98 = x_98_phi;
-  if (x_98) {
-    int const x_103 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_106 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_109 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_112 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_103), float(x_106), float(x_109), float(x_112));
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 545f9e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,227 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 145
-; Schema: 0
-               OpCapability Shader
-         %65 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %A "A"
-               OpName %x_77 "x_77"
-               OpName %x_87 "x_87"
-               OpName %x_97 "x_97"
-               OpName %x_78_phi "x_78_phi"
-               OpName %x_88_phi "x_88_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-%_ptr_Function__arr_int_uint_4 = OpTypePointer Function %_arr_int_uint_4
-         %26 = OpConstantNull %_arr_int_uint_4
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-        %133 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %134 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %A = OpVariable %_ptr_Function__arr_int_uint_4 Function %26
-       %x_77 = OpVariable %_ptr_Function_bool Function %30
-       %x_87 = OpVariable %_ptr_Function_bool Function %30
-       %x_97 = OpVariable %_ptr_Function_bool Function %30
-   %x_78_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_88_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_98_phi = OpVariable %_ptr_Function_bool Function %30
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %40 = OpLoad %int %39
-               OpStore %i %40
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpLoad %int %i
-         %47 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %48 = OpLoad %int %47
-         %49 = OpSLessThan %bool %45 %48
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %42
-         %50 = OpLabel
-         %53 = OpLoad %int %i
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Function_int %A %53
-               OpStore %56 %55
-         %57 = OpLoad %int %i
-         %59 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %60 = OpLoad %int %59
-         %62 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %63 = OpLoad %int %62
-         %67 = OpIMul %int %int_2 %57
-         %68 = OpIMul %int %int_2 %60
-         %64 = OpExtInst %int %65 SMax %67 %68
-         %69 = OpIEqual %bool %64 %63
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %int %i
-         %73 = OpAccessChain %_ptr_Function_int %A %72
-               OpStore %73 %int_1
-               OpBranch %70
-         %70 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-               OpBranch %41
-         %42 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Function_int %A %77
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %81 = OpLoad %int %80
-         %82 = OpIEqual %bool %79 %81
-               OpStore %x_78_phi %82
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Function_int %A %86
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %90 = OpLoad %int %89
-         %91 = OpIEqual %bool %88 %90
-               OpStore %x_77 %91
-         %92 = OpLoad %bool %x_77
-               OpStore %x_78_phi %92
-               OpBranch %83
-         %83 = OpLabel
-         %93 = OpLoad %bool %x_78_phi
-               OpStore %x_88_phi %93
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %94
-         %95 = OpLabel
-         %96 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpAccessChain %_ptr_Function_int %A %97
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %101 = OpLoad %int %100
-        %102 = OpIEqual %bool %99 %101
-               OpStore %x_87 %102
-        %103 = OpLoad %bool %x_87
-               OpStore %x_88_phi %103
-               OpBranch %94
-         %94 = OpLabel
-        %104 = OpLoad %bool %x_88_phi
-               OpStore %x_98_phi %104
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %105
-        %106 = OpLabel
-        %107 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Function_int %A %108
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %112 = OpLoad %int %111
-        %113 = OpIEqual %bool %110 %112
-               OpStore %x_97 %113
-        %114 = OpLoad %bool %x_97
-               OpStore %x_98_phi %114
-               OpBranch %105
-        %105 = OpLabel
-        %115 = OpLoad %bool %x_98_phi
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-        %119 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %120 = OpLoad %int %119
-        %121 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %122 = OpLoad %int %121
-        %123 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-        %126 = OpLoad %int %125
-        %127 = OpConvertSToF %float %120
-        %128 = OpConvertSToF %float %122
-        %129 = OpConvertSToF %float %124
-        %130 = OpConvertSToF %float %126
-        %131 = OpCompositeConstruct %v4float %127 %128 %129 %130
-               OpStore %x_GLF_color %131
-               OpBranch %116
-        %118 = OpLabel
-               OpStore %x_GLF_color %133
-               OpBranch %116
-        %116 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %134
-        %137 = OpLabel
-        %138 = OpFunctionCall %void %main_1
-        %139 = OpLoad %v4float %x_GLF_color
-        %140 = OpCompositeConstruct %main_out %139
-               OpReturnValue %140
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %142 = OpLabel
-        %143 = OpFunctionCall %main_out %main_inner
-        %144 = OpCompositeExtract %v4float %143 0
-               OpStore %x_GLF_color_1_1 %144
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f4af7a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-max-multiplied-values/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,98 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var A : array<i32, 4>;
-  var x_77 : bool;
-  var x_87 : bool;
-  var x_97 : bool;
-  var x_78_phi : bool;
-  var x_88_phi : bool;
-  var x_98_phi : bool;
-  let x_33 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i = x_33;
-  loop {
-    let x_38 : i32 = i;
-    let x_40 : i32 = x_6.x_GLF_uniform_int_values[4];
-    if ((x_38 < x_40)) {
-    } else {
-      break;
-    }
-    let x_43 : i32 = i;
-    let x_45 : i32 = x_6.x_GLF_uniform_int_values[0];
-    A[x_43] = x_45;
-    let x_47 : i32 = i;
-    let x_50 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_54 : i32 = x_6.x_GLF_uniform_int_values[1];
-    if ((max((2 * x_47), (2 * x_50)) == x_54)) {
-      let x_58 : i32 = i;
-      A[x_58] = 1;
-    }
-
-    continuing {
-      let x_60 : i32 = i;
-      i = (x_60 + 1);
-    }
-  }
-  let x_63 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_65 : i32 = A[x_63];
-  let x_67 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_68 : bool = (x_65 == x_67);
-  x_78_phi = x_68;
-  if (x_68) {
-    let x_72 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_74 : i32 = A[x_72];
-    let x_76 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_77 = (x_74 == x_76);
-    x_78_phi = x_77;
-  }
-  let x_78 : bool = x_78_phi;
-  x_88_phi = x_78;
-  if (x_78) {
-    let x_82 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_84 : i32 = A[x_82];
-    let x_86 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_87 = (x_84 == x_86);
-    x_88_phi = x_87;
-  }
-  let x_88 : bool = x_88_phi;
-  x_98_phi = x_88;
-  if (x_88) {
-    let x_92 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_94 : i32 = A[x_92];
-    let x_96 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_97 = (x_94 == x_96);
-    x_98_phi = x_97;
-  }
-  let x_98 : bool = x_98_phi;
-  if (x_98) {
-    let x_103 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_106 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_109 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_112 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_103), f32(x_106), f32(x_109), f32(x_112));
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 40f49b4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-
-void main_1() {
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_30 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = (x_30 - (1.0f * floor((x_30 / 1.0f))));
-  const float x_32 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_32 == x_34)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_40 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_42 = a;
-    const float x_43 = a;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_40), x_42, x_43, float(x_45));
-  } else {
-    const float x_48 = a;
-    x_GLF_color = float4(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.msl
deleted file mode 100755
index 2abdef2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float const x_30 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  a = (x_30 - (1.0f * floor((x_30 / 1.0f))));
-  float const x_32 = a;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_32 == x_34)) {
-    int const x_40 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_42 = a;
-    float const x_43 = a;
-    int const x_45 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_40), x_42, x_43, float(x_45));
-  } else {
-    float const x_48 = a;
-    *(tint_symbol_3) = float4(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 672cc23..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,119 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-       %buf1 = OpTypeStruct %_arr_int_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %26
-         %30 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %31 = OpLoad %float %30
-         %35 = OpFDiv %float %31 %float_1
-         %33 = OpExtInst %float %34 Floor %35
-         %36 = OpFMul %float %float_1 %33
-         %37 = OpFSub %float %31 %36
-               OpStore %a %37
-         %38 = OpLoad %float %a
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdEqual %bool %38 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpLoad %float %a
-         %50 = OpLoad %float %a
-         %51 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %53 = OpConvertSToF %float %48
-         %54 = OpConvertSToF %float %52
-         %55 = OpCompositeConstruct %v4float %53 %49 %50 %54
-               OpStore %x_GLF_color %55
-               OpBranch %43
-         %45 = OpLabel
-         %56 = OpLoad %float %a
-         %57 = OpCompositeConstruct %v4float %56 %56 %56 %56
-               OpStore %x_GLF_color %57
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2c3c99e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var a : f32;
-  let x_30 : f32 = x_6.x_GLF_uniform_float_values[0];
-  a = (x_30 - (1.0 * floor((x_30 / 1.0))));
-  let x_32 : f32 = a;
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_32 == x_34)) {
-    let x_40 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_42 : f32 = a;
-    let x_43 : f32 = a;
-    let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_40), x_42, x_43, f32(x_45));
-  } else {
-    let x_48 : f32 = a;
-    x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 9a99d68..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-
-void main_1() {
-  float a = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_30 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  a = (x_30 % 1.0f);
-  const float x_32 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_34 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_32 == x_34)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_40 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const float x_42 = a;
-    const float x_43 = a;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_45 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_40), x_42, x_43, float(x_45));
-  } else {
-    const float x_48 = a;
-    x_GLF_color = float4(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.msl
deleted file mode 100755
index e9fc53b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float a = 0.0f;
-  float const x_30 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  a = fmod(x_30, 1.0f);
-  float const x_32 = a;
-  float const x_34 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_32 == x_34)) {
-    int const x_40 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_42 = a;
-    float const x_43 = a;
-    int const x_45 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_40), x_42, x_43, float(x_45));
-  } else {
-    float const x_48 = a;
-    *(tint_symbol_3) = float4(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 84c77ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,115 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-       %buf1 = OpTypeStruct %_arr_int_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %54 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %26
-         %30 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %31 = OpLoad %float %30
-         %33 = OpFRem %float %31 %float_1
-               OpStore %a %33
-         %34 = OpLoad %float %a
-         %35 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %36 = OpLoad %float %35
-         %37 = OpFOrdEqual %bool %34 %36
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %44 = OpLoad %int %43
-         %45 = OpLoad %float %a
-         %46 = OpLoad %float %a
-         %47 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpConvertSToF %float %44
-         %50 = OpConvertSToF %float %48
-         %51 = OpCompositeConstruct %v4float %49 %45 %46 %50
-               OpStore %x_GLF_color %51
-               OpBranch %39
-         %41 = OpLabel
-         %52 = OpLoad %float %a
-         %53 = OpCompositeConstruct %v4float %52 %52 %52 %52
-               OpStore %x_GLF_color %53
-               OpBranch %39
-         %39 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %54
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %62 = OpLabel
-         %63 = OpFunctionCall %main_out %main_inner
-         %64 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2690c8d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-modulo-1/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var a : f32;
-  let x_30 : f32 = x_6.x_GLF_uniform_float_values[0];
-  a = (x_30 % 1.0);
-  let x_32 : f32 = a;
-  let x_34 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_32 == x_34)) {
-    let x_40 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_42 : f32 = a;
-    let x_43 : f32 = a;
-    let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_40), x_42, x_43, f32(x_45));
-  } else {
-    let x_48 : f32 = a;
-    x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1fc8aac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 res = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  v = float4(8.399999619f, -864.664978027f, 945.41998291f, 1.0f);
-  const float x_31 = asfloat(x_7[0].x);
-  res = mul(v, float4x4(float4(x_31, 0.0f, 0.0f, 0.0f), float4(0.0f, x_31, 0.0f, 0.0f), float4(0.0f, 0.0f, x_31, 0.0f), float4(0.0f, 0.0f, 0.0f, x_31)));
-  if ((distance(v, res) < 0.01f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.msl
deleted file mode 100644
index a496e4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float4 res = 0.0f;
-  v = float4(8.399999619f, -864.664978027f, 945.41998291f, 1.0f);
-  float const x_31 = x_7.one;
-  float4 const x_37 = v;
-  res = (float4x4(float4(x_31, 0.0f, 0.0f, 0.0f), float4(0.0f, x_31, 0.0f, 0.0f), float4(0.0f, 0.0f, x_31, 0.0f), float4(0.0f, 0.0f, 0.0f, x_31)) * x_37);
-  float4 const x_39 = v;
-  float4 const x_40 = res;
-  if ((distance(x_39, x_40) < 0.01f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 144e579..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %40 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %res "res"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%float_8_39999962 = OpConstant %float 8.39999962
-%float_n864_664978 = OpConstant %float -864.664978
-%float_945_419983 = OpConstant %float 945.419983
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v4float %float_8_39999962 %float_n864_664978 %float_945_419983 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%mat4v4float = OpTypeMatrix %v4float 4
-    %float_0 = OpConstant %float 0
-%float_0_00999999978 = OpConstant %float 0.00999999978
-       %bool = OpTypeBool
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %48 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-        %res = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %v %22
-         %26 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %27 = OpLoad %float %26
-         %28 = OpLoad %v4float %v
-         %31 = OpCompositeConstruct %v4float %27 %float_0 %float_0 %float_0
-         %32 = OpCompositeConstruct %v4float %float_0 %27 %float_0 %float_0
-         %33 = OpCompositeConstruct %v4float %float_0 %float_0 %27 %float_0
-         %34 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %27
-         %35 = OpCompositeConstruct %mat4v4float %31 %32 %33 %34
-         %36 = OpMatrixTimesVector %v4float %35 %28
-               OpStore %res %36
-         %37 = OpLoad %v4float %v
-         %38 = OpLoad %v4float %res
-         %39 = OpExtInst %float %40 Distance %37 %38
-         %42 = OpFOrdLessThan %bool %39 %float_0_00999999978
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %44
-         %46 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index acefefb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var res : vec4<f32>;
-  v = vec4<f32>(8.399999619, -864.664978027, 945.41998291, 1.0);
-  let x_31 : f32 = x_7.one;
-  let x_37 : vec4<f32> = v;
-  res = (mat4x4<f32>(vec4<f32>(x_31, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_31, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_31, 0.0), vec4<f32>(0.0, 0.0, 0.0, x_31)) * x_37);
-  let x_39 : vec4<f32> = v;
-  let x_40 : vec4<f32> = res;
-  if ((distance(x_39, x_40) < 0.01)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1fc8aac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 res = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  v = float4(8.399999619f, -864.664978027f, 945.41998291f, 1.0f);
-  const float x_31 = asfloat(x_7[0].x);
-  res = mul(v, float4x4(float4(x_31, 0.0f, 0.0f, 0.0f), float4(0.0f, x_31, 0.0f, 0.0f), float4(0.0f, 0.0f, x_31, 0.0f), float4(0.0f, 0.0f, 0.0f, x_31)));
-  if ((distance(v, res) < 0.01f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.msl
deleted file mode 100644
index a496e4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  float4 res = 0.0f;
-  v = float4(8.399999619f, -864.664978027f, 945.41998291f, 1.0f);
-  float const x_31 = x_7.one;
-  float4 const x_37 = v;
-  res = (float4x4(float4(x_31, 0.0f, 0.0f, 0.0f), float4(0.0f, x_31, 0.0f, 0.0f), float4(0.0f, 0.0f, x_31, 0.0f), float4(0.0f, 0.0f, 0.0f, x_31)) * x_37);
-  float4 const x_39 = v;
-  float4 const x_40 = res;
-  if ((distance(x_39, x_40) < 0.01f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 144e579..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-         %40 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %res "res"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%float_8_39999962 = OpConstant %float 8.39999962
-%float_n864_664978 = OpConstant %float -864.664978
-%float_945_419983 = OpConstant %float 945.419983
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v4float %float_8_39999962 %float_n864_664978 %float_945_419983 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%mat4v4float = OpTypeMatrix %v4float 4
-    %float_0 = OpConstant %float 0
-%float_0_00999999978 = OpConstant %float 0.00999999978
-       %bool = OpTypeBool
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %48 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-        %res = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %v %22
-         %26 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %27 = OpLoad %float %26
-         %28 = OpLoad %v4float %v
-         %31 = OpCompositeConstruct %v4float %27 %float_0 %float_0 %float_0
-         %32 = OpCompositeConstruct %v4float %float_0 %27 %float_0 %float_0
-         %33 = OpCompositeConstruct %v4float %float_0 %float_0 %27 %float_0
-         %34 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %27
-         %35 = OpCompositeConstruct %mat4v4float %31 %32 %33 %34
-         %36 = OpMatrixTimesVector %v4float %35 %28
-               OpStore %res %36
-         %37 = OpLoad %v4float %v
-         %38 = OpLoad %v4float %res
-         %39 = OpExtInst %float %40 Distance %37 %38
-         %42 = OpFOrdLessThan %bool %39 %float_0_00999999978
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %44
-         %46 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index acefefb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-mul-identity/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  var res : vec4<f32>;
-  v = vec4<f32>(8.399999619, -864.664978027, 945.41998291, 1.0);
-  let x_31 : f32 = x_7.one;
-  let x_37 : vec4<f32> = v;
-  res = (mat4x4<f32>(vec4<f32>(x_31, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_31, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_31, 0.0), vec4<f32>(0.0, 0.0, 0.0, x_31)) * x_37);
-  let x_39 : vec4<f32> = v;
-  let x_40 : vec4<f32> = res;
-  if ((distance(x_39, x_40) < 0.01)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.hlsl
deleted file mode 100644
index 7393f85..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_36 = false;
-  bool x_37_phi = false;
-  const int x_29 = asint(x_6[0].x);
-  const bool x_30 = (x_29 > 1);
-  x_37_phi = x_30;
-  if (x_30) {
-    const float x_34 = gl_FragCoord.y;
-    x_36 = !((x_34 < -5.0f));
-    x_37_phi = x_36;
-  }
-  if (x_37_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.msl
deleted file mode 100644
index 0b085d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  bool x_36 = false;
-  bool x_37_phi = false;
-  int const x_29 = x_6.three;
-  bool const x_30 = (x_29 > 1);
-  x_37_phi = x_30;
-  if (x_30) {
-    float const x_34 = (*(tint_symbol_3)).y;
-    x_36 = !((x_34 < -5.0f));
-    x_37_phi = x_36;
-  }
-  bool const x_37 = x_37_phi;
-  if (x_37) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.spvasm
deleted file mode 100644
index 569ffc6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,113 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_37_phi "x_37_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %22 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n5 = OpConstant %float -5
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %48 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_bool Function %22
-   %x_37_phi = OpVariable %_ptr_Function_bool Function %22
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %28 = OpLoad %int %27
-         %30 = OpSGreaterThan %bool %28 %int_1
-               OpStore %x_37_phi %30
-               OpSelectionMerge %31 None
-               OpBranchConditional %30 %32 %31
-         %32 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %36 = OpLoad %float %35
-         %39 = OpFOrdLessThan %bool %36 %float_n5
-         %37 = OpLogicalNot %bool %39
-               OpStore %x_36 %37
-         %40 = OpLoad %bool %x_36
-               OpStore %x_37_phi %40
-               OpBranch %31
-         %31 = OpLabel
-         %41 = OpLoad %bool %x_37_phi
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %44
-         %43 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %53 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %58 = OpLabel
-         %60 = OpLoad %v4float %gl_FragCoord_param_1
-         %59 = OpFunctionCall %main_out %main_inner %60
-         %61 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %61
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.wgsl
deleted file mode 100644
index 6bdc812..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-[[block]]
-struct buf0 {
-  three : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : bool;
-  var x_37_phi : bool;
-  let x_29 : i32 = x_6.three;
-  let x_30 : bool = (x_29 > 1);
-  x_37_phi = x_30;
-  if (x_30) {
-    let x_34 : f32 = gl_FragCoord.y;
-    x_36 = !((x_34 < -5.0));
-    x_37_phi = x_36;
-  }
-  let x_37 : bool = x_37_phi;
-  if (x_37) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.hlsl
deleted file mode 100644
index 7393f85..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_36 = false;
-  bool x_37_phi = false;
-  const int x_29 = asint(x_6[0].x);
-  const bool x_30 = (x_29 > 1);
-  x_37_phi = x_30;
-  if (x_30) {
-    const float x_34 = gl_FragCoord.y;
-    x_36 = !((x_34 < -5.0f));
-    x_37_phi = x_36;
-  }
-  if (x_37_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.msl
deleted file mode 100644
index 0b085d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int three;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  bool x_36 = false;
-  bool x_37_phi = false;
-  int const x_29 = x_6.three;
-  bool const x_30 = (x_29 > 1);
-  x_37_phi = x_30;
-  if (x_30) {
-    float const x_34 = (*(tint_symbol_3)).y;
-    x_36 = !((x_34 < -5.0f));
-    x_37_phi = x_36;
-  }
-  bool const x_37 = x_37_phi;
-  if (x_37) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.spvasm
deleted file mode 100644
index 569ffc6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,113 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "three"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_37_phi "x_37_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %22 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n5 = OpConstant %float -5
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %47 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %48 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_bool Function %22
-   %x_37_phi = OpVariable %_ptr_Function_bool Function %22
-         %27 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %28 = OpLoad %int %27
-         %30 = OpSGreaterThan %bool %28 %int_1
-               OpStore %x_37_phi %30
-               OpSelectionMerge %31 None
-               OpBranchConditional %30 %32 %31
-         %32 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %36 = OpLoad %float %35
-         %39 = OpFOrdLessThan %bool %36 %float_n5
-         %37 = OpLogicalNot %bool %39
-               OpStore %x_36 %37
-         %40 = OpLoad %bool %x_36
-               OpStore %x_37_phi %40
-               OpBranch %31
-         %31 = OpLabel
-         %41 = OpLoad %bool %x_37_phi
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %44
-         %43 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %42
-         %44 = OpLabel
-               OpStore %x_GLF_color %48
-               OpBranch %42
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %53 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %58 = OpLabel
-         %60 = OpLoad %v4float %gl_FragCoord_param_1
-         %59 = OpFunctionCall %main_out %main_inner %60
-         %61 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %61
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.wgsl
deleted file mode 100644
index 6bdc812..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-not-less-than-neg/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-[[block]]
-struct buf0 {
-  three : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : bool;
-  var x_37_phi : bool;
-  let x_29 : i32 = x_6.three;
-  let x_30 : bool = (x_29 > 1);
-  x_37_phi = x_30;
-  if (x_30) {
-    let x_34 : f32 = gl_FragCoord.y;
-    x_36 = !((x_34 < -5.0));
-    x_37_phi = x_36;
-  }
-  let x_37 : bool = x_37_phi;
-  if (x_37) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4b3a28e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_22 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  if (((1 >> asuint(x_22)) > 0)) {
-    const int x_29 = asint(x_5[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_32 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_35 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_38 = asint(x_5[1].x);
-    x_GLF_color = float4(float(x_29), float(x_32), float(x_35), float(x_38));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_42 = asint(x_5[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_43 = float(x_42);
-    x_GLF_color = float4(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3268ea1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_22 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  if (((1 >> as_type<uint>(x_22)) > 0)) {
-    int const x_29 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    int const x_32 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    int const x_35 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    int const x_38 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_29), float(x_32), float(x_35), float(x_38));
-  } else {
-    int const x_42 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    float const x_43 = float(x_42);
-    *(tint_symbol_3) = float4(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c892aaa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %23 = OpLoad %int %22
-         %25 = OpBitcast %uint %23
-         %26 = OpShiftRightArithmetic %int %int_1 %25
-         %27 = OpSGreaterThan %bool %26 %int_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %39 = OpLoad %int %38
-         %40 = OpConvertSToF %float %33
-         %41 = OpConvertSToF %float %35
-         %42 = OpConvertSToF %float %37
-         %43 = OpConvertSToF %float %39
-         %44 = OpCompositeConstruct %v4float %40 %41 %42 %43
-               OpStore %x_GLF_color %44
-               OpBranch %29
-         %31 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpConvertSToF %float %46
-         %48 = OpCompositeConstruct %v4float %47 %47 %47 %47
-               OpStore %x_GLF_color %48
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 24991ca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,37 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_22 : i32 = x_5.x_GLF_uniform_int_values[0];
-  if (((1 >> bitcast<u32>(x_22)) > 0)) {
-    let x_29 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_32 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_35 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_38 : i32 = x_5.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_29), f32(x_32), f32(x_35), f32(x_38));
-  } else {
-    let x_42 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_43 : f32 = f32(x_42);
-    x_GLF_color = vec4<f32>(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4b3a28e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_22 = asint(x_5[scalar_offset / 4][scalar_offset % 4]);
-  if (((1 >> asuint(x_22)) > 0)) {
-    const int x_29 = asint(x_5[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_32 = asint(x_5[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_35 = asint(x_5[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_38 = asint(x_5[1].x);
-    x_GLF_color = float4(float(x_29), float(x_32), float(x_35), float(x_38));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_42 = asint(x_5[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_43 = float(x_42);
-    x_GLF_color = float4(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3268ea1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int const x_22 = x_5.x_GLF_uniform_int_values.arr[0].el;
-  if (((1 >> as_type<uint>(x_22)) > 0)) {
-    int const x_29 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    int const x_32 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    int const x_35 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    int const x_38 = x_5.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_29), float(x_32), float(x_35), float(x_38));
-  } else {
-    int const x_42 = x_5.x_GLF_uniform_int_values.arr[0].el;
-    float const x_43 = float(x_42);
-    *(tint_symbol_3) = float4(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c892aaa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %23 = OpLoad %int %22
-         %25 = OpBitcast %uint %23
-         %26 = OpShiftRightArithmetic %int %int_1 %25
-         %27 = OpSGreaterThan %bool %26 %int_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-         %32 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %33 = OpLoad %int %32
-         %34 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_1
-         %39 = OpLoad %int %38
-         %40 = OpConvertSToF %float %33
-         %41 = OpConvertSToF %float %35
-         %42 = OpConvertSToF %float %37
-         %43 = OpConvertSToF %float %39
-         %44 = OpCompositeConstruct %v4float %40 %41 %42 %43
-               OpStore %x_GLF_color %44
-               OpBranch %29
-         %31 = OpLabel
-         %45 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0 %int_0
-         %46 = OpLoad %int %45
-         %47 = OpConvertSToF %float %46
-         %48 = OpCompositeConstruct %v4float %47 %47 %47 %47
-               OpStore %x_GLF_color %48
-               OpBranch %29
-         %29 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 24991ca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-right-shift-greater-than-zero/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,37 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_22 : i32 = x_5.x_GLF_uniform_int_values[0];
-  if (((1 >> bitcast<u32>(x_22)) > 0)) {
-    let x_29 : i32 = x_5.x_GLF_uniform_int_values[1];
-    let x_32 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_35 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_38 : i32 = x_5.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_29), f32(x_32), f32(x_35), f32(x_38));
-  } else {
-    let x_42 : i32 = x_5.x_GLF_uniform_int_values[0];
-    let x_43 : f32 = f32(x_42);
-    x_GLF_color = vec4<f32>(x_43, x_43, x_43, x_43);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.hlsl
deleted file mode 100644
index 4722a0c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_31 = false;
-  bool x_32_phi = false;
-  const bool x_26 = (sign(cosh(709.0f)) == 1.0f);
-  x_32_phi = x_26;
-  if (!(x_26)) {
-    const int x_6 = asint(x_5[0].x);
-    x_31 = (x_6 == 1);
-    x_32_phi = x_31;
-  }
-  if (x_32_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.msl
deleted file mode 100644
index 2f5f445..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_31 = false;
-  bool x_32_phi = false;
-  bool const x_26 = (sign(cosh(709.0f)) == 1.0f);
-  x_32_phi = x_26;
-  if (!(x_26)) {
-    int const x_6 = x_5.one;
-    x_31 = (x_6 == 1);
-    x_32_phi = x_31;
-  }
-  bool const x_32 = x_32_phi;
-  if (x_32) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.spvasm
deleted file mode 100644
index de4a4bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-         %22 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_31 "x_31"
-               OpName %x_32_phi "x_32_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-  %float_709 = OpConstant %float 709
-    %float_1 = OpConstant %float 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %43 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %44 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_31 = OpVariable %_ptr_Function_bool Function %19
-   %x_32_phi = OpVariable %_ptr_Function_bool Function %19
-         %23 = OpExtInst %float %22 Cosh %float_709
-         %21 = OpExtInst %float %22 FSign %23
-         %26 = OpFOrdEqual %bool %21 %float_1
-               OpStore %x_32_phi %26
-         %27 = OpLogicalNot %bool %26
-               OpSelectionMerge %28 None
-               OpBranchConditional %27 %29 %28
-         %29 = OpLabel
-         %33 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %34 = OpLoad %int %33
-         %36 = OpIEqual %bool %34 %int_1
-               OpStore %x_31 %36
-         %37 = OpLoad %bool %x_31
-               OpStore %x_32_phi %37
-               OpBranch %28
-         %28 = OpLabel
-         %38 = OpLoad %bool %x_32_phi
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %39
-         %41 = OpLabel
-               OpStore %x_GLF_color %44
-               OpBranch %39
-         %39 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.wgsl
deleted file mode 100644
index b37e8cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,38 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_31 : bool;
-  var x_32_phi : bool;
-  let x_26 : bool = (sign(cosh(709.0)) == 1.0);
-  x_32_phi = x_26;
-  if (!(x_26)) {
-    let x_6 : i32 = x_5.one;
-    x_31 = (x_6 == 1);
-    x_32_phi = x_31;
-  }
-  let x_32 : bool = x_32_phi;
-  if (x_32) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.hlsl
deleted file mode 100644
index 4722a0c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_31 = false;
-  bool x_32_phi = false;
-  const bool x_26 = (sign(cosh(709.0f)) == 1.0f);
-  x_32_phi = x_26;
-  if (!(x_26)) {
-    const int x_6 = asint(x_5[0].x);
-    x_31 = (x_6 == 1);
-    x_32_phi = x_31;
-  }
-  if (x_32_phi) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.msl
deleted file mode 100644
index 2f5f445..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_31 = false;
-  bool x_32_phi = false;
-  bool const x_26 = (sign(cosh(709.0f)) == 1.0f);
-  x_32_phi = x_26;
-  if (!(x_26)) {
-    int const x_6 = x_5.one;
-    x_31 = (x_6 == 1);
-    x_32_phi = x_31;
-  }
-  bool const x_32 = x_32_phi;
-  if (x_32) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.spvasm
deleted file mode 100644
index de4a4bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-         %22 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_31 "x_31"
-               OpName %x_32_phi "x_32_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-  %float_709 = OpConstant %float 709
-    %float_1 = OpConstant %float 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-         %43 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %44 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_31 = OpVariable %_ptr_Function_bool Function %19
-   %x_32_phi = OpVariable %_ptr_Function_bool Function %19
-         %23 = OpExtInst %float %22 Cosh %float_709
-         %21 = OpExtInst %float %22 FSign %23
-         %26 = OpFOrdEqual %bool %21 %float_1
-               OpStore %x_32_phi %26
-         %27 = OpLogicalNot %bool %26
-               OpSelectionMerge %28 None
-               OpBranchConditional %27 %29 %28
-         %29 = OpLabel
-         %33 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %34 = OpLoad %int %33
-         %36 = OpIEqual %bool %34 %int_1
-               OpStore %x_31 %36
-         %37 = OpLoad %bool %x_31
-               OpStore %x_32_phi %37
-               OpBranch %28
-         %28 = OpLabel
-         %38 = OpLoad %bool %x_32_phi
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-               OpStore %x_GLF_color %43
-               OpBranch %39
-         %41 = OpLabel
-               OpStore %x_GLF_color %44
-               OpBranch %39
-         %39 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.wgsl
deleted file mode 100644
index b37e8cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-sign-cosh/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,38 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_31 : bool;
-  var x_32_phi : bool;
-  let x_26 : bool = (sign(cosh(709.0)) == 1.0);
-  x_32_phi = x_26;
-  if (!(x_26)) {
-    let x_6 : i32 = x_5.one;
-    x_31 = (x_6 == 1);
-    x_32_phi = x_31;
-  }
-  let x_32 : bool = x_32_phi;
-  if (x_32) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8eb8559..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  bool x_49 = false;
-  bool x_50_phi = false;
-  const float x_31 = gl_FragCoord.x;
-  f = x_31;
-  f = (f + asfloat(0x7fc00000u));
-  if (((5.0f / f) == 0.0f)) {
-    f = (f + 1.0f);
-  }
-  const bool x_42 = isnan(f);
-  x_50_phi = x_42;
-  if (!(x_42)) {
-    const float x_46 = f;
-    const float x_48 = asfloat(x_7[0].x);
-    x_49 = (x_46 != x_48);
-    x_50_phi = x_49;
-  }
-  if (x_50_phi) {
-    f = 0.0f;
-  }
-  if ((f == 0.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.msl
deleted file mode 100644
index 58e6224..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  bool x_49 = false;
-  bool x_50_phi = false;
-  float const x_31 = (*(tint_symbol_3)).x;
-  f = x_31;
-  float const x_32 = f;
-  f = (x_32 + NAN);
-  float const x_34 = f;
-  if (((5.0f / x_34) == 0.0f)) {
-    float const x_39 = f;
-    f = (x_39 + 1.0f);
-  }
-  float const x_41 = f;
-  bool const x_42 = isnan(x_41);
-  x_50_phi = x_42;
-  if (!(x_42)) {
-    float const x_46 = f;
-    float const x_48 = x_7.zero;
-    x_49 = (x_46 != x_48);
-    x_50_phi = x_49;
-  }
-  bool const x_50 = x_50_phi;
-  if (x_50) {
-    f = 0.0f;
-  }
-  float const x_53 = f;
-  if ((x_53 == 0.0f)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 225383a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %x_49 "x_49"
-               OpName %x_50_phi "x_50_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %24 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-%float_n0x1_8p_128 = OpConstant %float -0x1.8p+128
-    %float_5 = OpConstant %float 5
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-         %63 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %64 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %20
-       %x_49 = OpVariable %_ptr_Function_bool Function %24
-   %x_50_phi = OpVariable %_ptr_Function_bool Function %24
-         %29 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %30 = OpLoad %float %29
-               OpStore %f %30
-         %31 = OpLoad %float %f
-         %33 = OpFAdd %float %31 %float_n0x1_8p_128
-               OpStore %f %33
-         %34 = OpLoad %float %f
-         %36 = OpFDiv %float %float_5 %34
-         %38 = OpFOrdEqual %bool %36 %float_0
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %39
-         %40 = OpLabel
-         %41 = OpLoad %float %f
-         %43 = OpFAdd %float %41 %float_1
-               OpStore %f %43
-               OpBranch %39
-         %39 = OpLabel
-         %44 = OpLoad %float %f
-         %45 = OpIsNan %bool %44
-               OpStore %x_50_phi %45
-         %46 = OpLogicalNot %bool %45
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %float %f
-         %51 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %52 = OpLoad %float %51
-         %53 = OpFOrdNotEqual %bool %49 %52
-               OpStore %x_49 %53
-         %54 = OpLoad %bool %x_49
-               OpStore %x_50_phi %54
-               OpBranch %47
-         %47 = OpLabel
-         %55 = OpLoad %bool %x_50_phi
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-               OpStore %f %float_0
-               OpBranch %56
-         %56 = OpLabel
-         %58 = OpLoad %float %f
-         %59 = OpFOrdEqual %bool %58 %float_0
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpStore %x_GLF_color %63
-               OpBranch %60
-         %62 = OpLabel
-               OpStore %x_GLF_color %64
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6638485..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var x_49 : bool;
-  var x_50_phi : bool;
-  let x_31 : f32 = gl_FragCoord.x;
-  f = x_31;
-  let x_32 : f32 = f;
-  f = (x_32 + -0x1.8p+128);
-  let x_34 : f32 = f;
-  if (((5.0 / x_34) == 0.0)) {
-    let x_39 : f32 = f;
-    f = (x_39 + 1.0);
-  }
-  let x_41 : f32 = f;
-  let x_42 : bool = isNan(x_41);
-  x_50_phi = x_42;
-  if (!(x_42)) {
-    let x_46 : f32 = f;
-    let x_48 : f32 = x_7.zero;
-    x_49 = (x_46 != x_48);
-    x_50_phi = x_49;
-  }
-  let x_50 : bool = x_50_phi;
-  if (x_50) {
-    f = 0.0;
-  }
-  let x_53 : f32 = f;
-  if ((x_53 == 0.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7731160..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,58 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float f = 0.0f;
-  bool x_49 = false;
-  bool x_50_phi = false;
-  const float x_31 = gl_FragCoord.x;
-  f = x_31;
-  f = (f + asfloat(0xff800000u));
-  if (((5.0f / f) == 0.0f)) {
-    f = (f + 1.0f);
-  }
-  const bool x_42 = isnan(f);
-  x_50_phi = x_42;
-  if (!(x_42)) {
-    const float x_46 = f;
-    const float x_48 = asfloat(x_7[0].x);
-    x_49 = (x_46 != x_48);
-    x_50_phi = x_49;
-  }
-  if (x_50_phi) {
-    f = 0.0f;
-  }
-  if ((f == 0.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.msl
deleted file mode 100644
index c93b522..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  bool x_49 = false;
-  bool x_50_phi = false;
-  float const x_31 = (*(tint_symbol_3)).x;
-  f = x_31;
-  float const x_32 = f;
-  f = (x_32 + -INFINITY);
-  float const x_34 = f;
-  if (((5.0f / x_34) == 0.0f)) {
-    float const x_39 = f;
-    f = (x_39 + 1.0f);
-  }
-  float const x_41 = f;
-  bool const x_42 = isnan(x_41);
-  x_50_phi = x_42;
-  if (!(x_42)) {
-    float const x_46 = f;
-    float const x_48 = x_7.zero;
-    x_49 = (x_46 != x_48);
-    x_50_phi = x_49;
-  }
-  bool const x_50 = x_50_phi;
-  if (x_50) {
-    f = 0.0f;
-  }
-  float const x_53 = f;
-  if ((x_53 == 0.0f)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5e2138f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %x_49 "x_49"
-               OpName %x_50_phi "x_50_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %24 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-%float_n0x1p_128 = OpConstant %float -0x1p+128
-    %float_5 = OpConstant %float 5
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-         %63 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %64 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %20
-       %x_49 = OpVariable %_ptr_Function_bool Function %24
-   %x_50_phi = OpVariable %_ptr_Function_bool Function %24
-         %29 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %30 = OpLoad %float %29
-               OpStore %f %30
-         %31 = OpLoad %float %f
-         %33 = OpFAdd %float %31 %float_n0x1p_128
-               OpStore %f %33
-         %34 = OpLoad %float %f
-         %36 = OpFDiv %float %float_5 %34
-         %38 = OpFOrdEqual %bool %36 %float_0
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %39
-         %40 = OpLabel
-         %41 = OpLoad %float %f
-         %43 = OpFAdd %float %41 %float_1
-               OpStore %f %43
-               OpBranch %39
-         %39 = OpLabel
-         %44 = OpLoad %float %f
-         %45 = OpIsNan %bool %44
-               OpStore %x_50_phi %45
-         %46 = OpLogicalNot %bool %45
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %float %f
-         %51 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %52 = OpLoad %float %51
-         %53 = OpFOrdNotEqual %bool %49 %52
-               OpStore %x_49 %53
-         %54 = OpLoad %bool %x_49
-               OpStore %x_50_phi %54
-               OpBranch %47
-         %47 = OpLabel
-         %55 = OpLoad %bool %x_50_phi
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-               OpStore %f %float_0
-               OpBranch %56
-         %56 = OpLabel
-         %58 = OpLoad %float %f
-         %59 = OpFOrdEqual %bool %58 %float_0
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpStore %x_GLF_color %63
-               OpBranch %60
-         %62 = OpLabel
-               OpStore %x_GLF_color %64
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6ed7216..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-simplify-smoothstep-undef/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var f : f32;
-  var x_49 : bool;
-  var x_50_phi : bool;
-  let x_31 : f32 = gl_FragCoord.x;
-  f = x_31;
-  let x_32 : f32 = f;
-  f = (x_32 + -0x1p+128);
-  let x_34 : f32 = f;
-  if (((5.0 / x_34) == 0.0)) {
-    let x_39 : f32 = f;
-    f = (x_39 + 1.0);
-  }
-  let x_41 : f32 = f;
-  let x_42 : bool = isNan(x_41);
-  x_50_phi = x_42;
-  if (!(x_42)) {
-    let x_46 : f32 = f;
-    let x_48 : f32 = x_7.zero;
-    x_49 = (x_46 != x_48);
-    x_50_phi = x_49;
-  }
-  let x_50 : bool = x_50_phi;
-  if (x_50) {
-    f = 0.0;
-  }
-  let x_53 : f32 = f;
-  if ((x_53 == 0.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7eb174d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int f1_vf2_(inout float2 v1) {
-  bool x_99 = false;
-  bool x_100_phi = false;
-  const float x_89 = v1.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_91 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const bool x_92 = (x_89 == x_91);
-  x_100_phi = x_92;
-  if (x_92) {
-    const float x_96 = v1.y;
-    const float x_98 = asfloat(x_7[1].x);
-    x_99 = (x_96 == x_98);
-    x_100_phi = x_99;
-  }
-  if (x_100_phi) {
-    const int x_104 = asint(x_9[1].x);
-    return x_104;
-  }
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_106 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  return x_106;
-}
-
-void main_1() {
-  float2x2 m1 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 m2 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2 v1_1 = float2(0.0f, 0.0f);
-  int a = 0;
-  float2 param = float2(0.0f, 0.0f);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_47 = asfloat(x_7[1].x);
-  const float x_50 = asfloat(x_7[1].x);
-  const float x_52 = asfloat(x_7[1].x);
-  m1 = float2x2(float2(x_45, -(x_47)), float2(x_50, sin(x_52)));
-  m2 = mul(m1, m1);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_61 = asfloat(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  v1_1 = mul(m2, float2(x_61, x_61));
-  param = v1_1;
-  const int x_66 = f1_vf2_(param);
-  a = x_66;
-  const int x_67 = a;
-  const int x_69 = asint(x_9[1].x);
-  if ((x_67 == x_69)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_75 = asfloat(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_77 = asfloat(x_7[1].x);
-    const float x_79 = asfloat(x_7[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_81 = asfloat(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(x_75, x_77, x_79, x_81);
-  } else {
-    const int x_84 = asint(x_9[1].x);
-    const float x_85 = float(x_84);
-    x_GLF_color = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6be68ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int f1_vf2_(constant buf0& x_7, constant buf1& x_9, thread float2* const v1) {
-  bool x_99 = false;
-  bool x_100_phi = false;
-  float const x_89 = (*(v1)).x;
-  float const x_91 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_92 = (x_89 == x_91);
-  x_100_phi = x_92;
-  if (x_92) {
-    float const x_96 = (*(v1)).y;
-    float const x_98 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    x_99 = (x_96 == x_98);
-    x_100_phi = x_99;
-  }
-  bool const x_100 = x_100_phi;
-  if (x_100) {
-    int const x_104 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    return x_104;
-  }
-  int const x_106 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  return x_106;
-}
-
-void main_1(constant buf0& x_7, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float2x2 m1 = float2x2(0.0f);
-  float2x2 m2 = float2x2(0.0f);
-  float2 v1_1 = 0.0f;
-  int a = 0;
-  float2 param = 0.0f;
-  float const x_45 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_47 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_50 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_52 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  m1 = float2x2(float2(x_45, -(x_47)), float2(x_50, sin(x_52)));
-  float2x2 const x_57 = m1;
-  float2x2 const x_58 = m1;
-  m2 = (x_57 * x_58);
-  float const x_61 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float2x2 const x_63 = m2;
-  v1_1 = (float2(x_61, x_61) * x_63);
-  float2 const x_65 = v1_1;
-  param = x_65;
-  int const x_66 = f1_vf2_(x_7, x_9, &(param));
-  a = x_66;
-  int const x_67 = a;
-  int const x_69 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_67 == x_69)) {
-    float const x_75 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_77 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    float const x_79 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    float const x_81 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_75, x_77, x_79, x_81);
-  } else {
-    int const x_84 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_85 = float(x_84);
-    *(tint_symbol_3) = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_7, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5665b3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,200 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-         %85 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f1_vf2_ "f1_vf2_"
-               OpName %v1 "v1"
-               OpName %x_99 "x_99"
-               OpName %x_100_phi "x_100_phi"
-               OpName %main_1 "main_1"
-               OpName %m1 "m1"
-               OpName %m2 "m2"
-               OpName %v1_1 "v1_1"
-               OpName %a "a"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %19 = OpTypeFunction %int %_ptr_Function_v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %28 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %void = OpTypeVoid
-         %59 = OpTypeFunction %void
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %66 = OpConstantNull %mat2v2float
-         %69 = OpConstantNull %v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %72 = OpConstantNull %int
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-    %f1_vf2_ = OpFunction %int None %19
-         %v1 = OpFunctionParameter %_ptr_Function_v2float
-         %24 = OpLabel
-       %x_99 = OpVariable %_ptr_Function_bool Function %28
-  %x_100_phi = OpVariable %_ptr_Function_bool Function %28
-         %33 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-         %34 = OpLoad %float %33
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdEqual %bool %34 %38
-               OpStore %x_100_phi %39
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-         %44 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %49 = OpFOrdEqual %bool %45 %48
-               OpStore %x_99 %49
-         %50 = OpLoad %bool %x_99
-               OpStore %x_100_phi %50
-               OpBranch %40
-         %40 = OpLabel
-         %51 = OpLoad %bool %x_100_phi
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %56 = OpLoad %int %55
-               OpReturnValue %56
-         %52 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %58 = OpLoad %int %57
-               OpReturnValue %58
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %59
-         %62 = OpLabel
-         %m1 = OpVariable %_ptr_Function_mat2v2float Function %66
-         %m2 = OpVariable %_ptr_Function_mat2v2float Function %66
-       %v1_1 = OpVariable %_ptr_Function_v2float Function %69
-          %a = OpVariable %_ptr_Function_int Function %72
-      %param = OpVariable %_ptr_Function_v2float Function %69
-         %74 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %75 = OpLoad %float %74
-         %76 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %81 = OpLoad %float %80
-         %82 = OpFNegate %float %77
-         %83 = OpCompositeConstruct %v2float %75 %82
-         %84 = OpExtInst %float %85 Sin %81
-         %86 = OpCompositeConstruct %v2float %79 %84
-         %87 = OpCompositeConstruct %mat2v2float %83 %86
-               OpStore %m1 %87
-         %88 = OpLoad %mat2v2float %m1
-         %89 = OpLoad %mat2v2float %m1
-         %90 = OpMatrixTimesMatrix %mat2v2float %88 %89
-               OpStore %m2 %90
-         %91 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %92 = OpLoad %float %91
-         %93 = OpLoad %mat2v2float %m2
-         %94 = OpCompositeConstruct %v2float %92 %92
-         %95 = OpVectorTimesMatrix %v2float %94 %93
-               OpStore %v1_1 %95
-         %96 = OpLoad %v2float %v1_1
-               OpStore %param %96
-         %97 = OpFunctionCall %int %f1_vf2_ %param
-               OpStore %a %97
-         %99 = OpLoad %int %a
-        %100 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %101 = OpLoad %int %100
-        %102 = OpIEqual %bool %99 %101
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-        %107 = OpLoad %float %106
-        %108 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %109 = OpLoad %float %108
-        %110 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %111 = OpLoad %float %110
-        %112 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-        %113 = OpLoad %float %112
-        %114 = OpCompositeConstruct %v4float %107 %109 %111 %113
-               OpStore %x_GLF_color %114
-               OpBranch %103
-        %105 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpCompositeConstruct %v4float %117 %117 %117 %117
-               OpStore %x_GLF_color %118
-               OpBranch %103
-        %103 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %59
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c0a7f76..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,89 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f1_vf2_(v1 : ptr<function, vec2<f32>>) -> i32 {
-  var x_99 : bool;
-  var x_100_phi : bool;
-  let x_89 : f32 = (*(v1)).x;
-  let x_91 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_92 : bool = (x_89 == x_91);
-  x_100_phi = x_92;
-  if (x_92) {
-    let x_96 : f32 = (*(v1)).y;
-    let x_98 : f32 = x_7.x_GLF_uniform_float_values[1];
-    x_99 = (x_96 == x_98);
-    x_100_phi = x_99;
-  }
-  let x_100 : bool = x_100_phi;
-  if (x_100) {
-    let x_104 : i32 = x_9.x_GLF_uniform_int_values[1];
-    return x_104;
-  }
-  let x_106 : i32 = x_9.x_GLF_uniform_int_values[0];
-  return x_106;
-}
-
-fn main_1() {
-  var m1 : mat2x2<f32>;
-  var m2 : mat2x2<f32>;
-  var v1_1 : vec2<f32>;
-  var a : i32;
-  var param : vec2<f32>;
-  let x_45 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_47 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_50 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_52 : f32 = x_7.x_GLF_uniform_float_values[1];
-  m1 = mat2x2<f32>(vec2<f32>(x_45, -(x_47)), vec2<f32>(x_50, sin(x_52)));
-  let x_57 : mat2x2<f32> = m1;
-  let x_58 : mat2x2<f32> = m1;
-  m2 = (x_57 * x_58);
-  let x_61 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_63 : mat2x2<f32> = m2;
-  v1_1 = (vec2<f32>(x_61, x_61) * x_63);
-  let x_65 : vec2<f32> = v1_1;
-  param = x_65;
-  let x_66 : i32 = f1_vf2_(&(param));
-  a = x_66;
-  let x_67 : i32 = a;
-  let x_69 : i32 = x_9.x_GLF_uniform_int_values[1];
-  if ((x_67 == x_69)) {
-    let x_75 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_77 : f32 = x_7.x_GLF_uniform_float_values[1];
-    let x_79 : f32 = x_7.x_GLF_uniform_float_values[1];
-    let x_81 : f32 = x_7.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_75, x_77, x_79, x_81);
-  } else {
-    let x_84 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_85 : f32 = f32(x_84);
-    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7eb174d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int f1_vf2_(inout float2 v1) {
-  bool x_99 = false;
-  bool x_100_phi = false;
-  const float x_89 = v1.x;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_91 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const bool x_92 = (x_89 == x_91);
-  x_100_phi = x_92;
-  if (x_92) {
-    const float x_96 = v1.y;
-    const float x_98 = asfloat(x_7[1].x);
-    x_99 = (x_96 == x_98);
-    x_100_phi = x_99;
-  }
-  if (x_100_phi) {
-    const int x_104 = asint(x_9[1].x);
-    return x_104;
-  }
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_106 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  return x_106;
-}
-
-void main_1() {
-  float2x2 m1 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 m2 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2 v1_1 = float2(0.0f, 0.0f);
-  int a = 0;
-  float2 param = float2(0.0f, 0.0f);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_45 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_47 = asfloat(x_7[1].x);
-  const float x_50 = asfloat(x_7[1].x);
-  const float x_52 = asfloat(x_7[1].x);
-  m1 = float2x2(float2(x_45, -(x_47)), float2(x_50, sin(x_52)));
-  m2 = mul(m1, m1);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_61 = asfloat(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  v1_1 = mul(m2, float2(x_61, x_61));
-  param = v1_1;
-  const int x_66 = f1_vf2_(param);
-  a = x_66;
-  const int x_67 = a;
-  const int x_69 = asint(x_9[1].x);
-  if ((x_67 == x_69)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const float x_75 = asfloat(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const float x_77 = asfloat(x_7[1].x);
-    const float x_79 = asfloat(x_7[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_81 = asfloat(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(x_75, x_77, x_79, x_81);
-  } else {
-    const int x_84 = asint(x_9[1].x);
-    const float x_85 = float(x_84);
-    x_GLF_color = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6be68ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int f1_vf2_(constant buf0& x_7, constant buf1& x_9, thread float2* const v1) {
-  bool x_99 = false;
-  bool x_100_phi = false;
-  float const x_89 = (*(v1)).x;
-  float const x_91 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_92 = (x_89 == x_91);
-  x_100_phi = x_92;
-  if (x_92) {
-    float const x_96 = (*(v1)).y;
-    float const x_98 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    x_99 = (x_96 == x_98);
-    x_100_phi = x_99;
-  }
-  bool const x_100 = x_100_phi;
-  if (x_100) {
-    int const x_104 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    return x_104;
-  }
-  int const x_106 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  return x_106;
-}
-
-void main_1(constant buf0& x_7, constant buf1& x_9, thread float4* const tint_symbol_3) {
-  float2x2 m1 = float2x2(0.0f);
-  float2x2 m2 = float2x2(0.0f);
-  float2 v1_1 = 0.0f;
-  int a = 0;
-  float2 param = 0.0f;
-  float const x_45 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_47 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_50 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  float const x_52 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  m1 = float2x2(float2(x_45, -(x_47)), float2(x_50, sin(x_52)));
-  float2x2 const x_57 = m1;
-  float2x2 const x_58 = m1;
-  m2 = (x_57 * x_58);
-  float const x_61 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float2x2 const x_63 = m2;
-  v1_1 = (float2(x_61, x_61) * x_63);
-  float2 const x_65 = v1_1;
-  param = x_65;
-  int const x_66 = f1_vf2_(x_7, x_9, &(param));
-  a = x_66;
-  int const x_67 = a;
-  int const x_69 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_67 == x_69)) {
-    float const x_75 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    float const x_77 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    float const x_79 = x_7.x_GLF_uniform_float_values.arr[1].el;
-    float const x_81 = x_7.x_GLF_uniform_float_values.arr[0].el;
-    *(tint_symbol_3) = float4(x_75, x_77, x_79, x_81);
-  } else {
-    int const x_84 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_85 = float(x_84);
-    *(tint_symbol_3) = float4(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_7, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5665b3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,200 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-         %85 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f1_vf2_ "f1_vf2_"
-               OpName %v1 "v1"
-               OpName %x_99 "x_99"
-               OpName %x_100_phi "x_100_phi"
-               OpName %main_1 "main_1"
-               OpName %m1 "m1"
-               OpName %m2 "m2"
-               OpName %v1_1 "v1_1"
-               OpName %a "a"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf0 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %19 = OpTypeFunction %int %_ptr_Function_v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %28 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %void = OpTypeVoid
-         %59 = OpTypeFunction %void
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %66 = OpConstantNull %mat2v2float
-         %69 = OpConstantNull %v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %72 = OpConstantNull %int
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-    %f1_vf2_ = OpFunction %int None %19
-         %v1 = OpFunctionParameter %_ptr_Function_v2float
-         %24 = OpLabel
-       %x_99 = OpVariable %_ptr_Function_bool Function %28
-  %x_100_phi = OpVariable %_ptr_Function_bool Function %28
-         %33 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-         %34 = OpLoad %float %33
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdEqual %bool %34 %38
-               OpStore %x_100_phi %39
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-         %44 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %45 = OpLoad %float %44
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %48 = OpLoad %float %47
-         %49 = OpFOrdEqual %bool %45 %48
-               OpStore %x_99 %49
-         %50 = OpLoad %bool %x_99
-               OpStore %x_100_phi %50
-               OpBranch %40
-         %40 = OpLabel
-         %51 = OpLoad %bool %x_100_phi
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %56 = OpLoad %int %55
-               OpReturnValue %56
-         %52 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %58 = OpLoad %int %57
-               OpReturnValue %58
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %59
-         %62 = OpLabel
-         %m1 = OpVariable %_ptr_Function_mat2v2float Function %66
-         %m2 = OpVariable %_ptr_Function_mat2v2float Function %66
-       %v1_1 = OpVariable %_ptr_Function_v2float Function %69
-          %a = OpVariable %_ptr_Function_int Function %72
-      %param = OpVariable %_ptr_Function_v2float Function %69
-         %74 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %75 = OpLoad %float %74
-         %76 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %81 = OpLoad %float %80
-         %82 = OpFNegate %float %77
-         %83 = OpCompositeConstruct %v2float %75 %82
-         %84 = OpExtInst %float %85 Sin %81
-         %86 = OpCompositeConstruct %v2float %79 %84
-         %87 = OpCompositeConstruct %mat2v2float %83 %86
-               OpStore %m1 %87
-         %88 = OpLoad %mat2v2float %m1
-         %89 = OpLoad %mat2v2float %m1
-         %90 = OpMatrixTimesMatrix %mat2v2float %88 %89
-               OpStore %m2 %90
-         %91 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %92 = OpLoad %float %91
-         %93 = OpLoad %mat2v2float %m2
-         %94 = OpCompositeConstruct %v2float %92 %92
-         %95 = OpVectorTimesMatrix %v2float %94 %93
-               OpStore %v1_1 %95
-         %96 = OpLoad %v2float %v1_1
-               OpStore %param %96
-         %97 = OpFunctionCall %int %f1_vf2_ %param
-               OpStore %a %97
-         %99 = OpLoad %int %a
-        %100 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %101 = OpLoad %int %100
-        %102 = OpIEqual %bool %99 %101
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-        %106 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-        %107 = OpLoad %float %106
-        %108 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %109 = OpLoad %float %108
-        %110 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-        %111 = OpLoad %float %110
-        %112 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-        %113 = OpLoad %float %112
-        %114 = OpCompositeConstruct %v4float %107 %109 %111 %113
-               OpStore %x_GLF_color %114
-               OpBranch %103
-        %105 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpCompositeConstruct %v4float %117 %117 %117 %117
-               OpStore %x_GLF_color %118
-               OpBranch %103
-        %103 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %59
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c0a7f76..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sin-mul-mat-mat-mul-vec-mat/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,89 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f1_vf2_(v1 : ptr<function, vec2<f32>>) -> i32 {
-  var x_99 : bool;
-  var x_100_phi : bool;
-  let x_89 : f32 = (*(v1)).x;
-  let x_91 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_92 : bool = (x_89 == x_91);
-  x_100_phi = x_92;
-  if (x_92) {
-    let x_96 : f32 = (*(v1)).y;
-    let x_98 : f32 = x_7.x_GLF_uniform_float_values[1];
-    x_99 = (x_96 == x_98);
-    x_100_phi = x_99;
-  }
-  let x_100 : bool = x_100_phi;
-  if (x_100) {
-    let x_104 : i32 = x_9.x_GLF_uniform_int_values[1];
-    return x_104;
-  }
-  let x_106 : i32 = x_9.x_GLF_uniform_int_values[0];
-  return x_106;
-}
-
-fn main_1() {
-  var m1 : mat2x2<f32>;
-  var m2 : mat2x2<f32>;
-  var v1_1 : vec2<f32>;
-  var a : i32;
-  var param : vec2<f32>;
-  let x_45 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_47 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_50 : f32 = x_7.x_GLF_uniform_float_values[1];
-  let x_52 : f32 = x_7.x_GLF_uniform_float_values[1];
-  m1 = mat2x2<f32>(vec2<f32>(x_45, -(x_47)), vec2<f32>(x_50, sin(x_52)));
-  let x_57 : mat2x2<f32> = m1;
-  let x_58 : mat2x2<f32> = m1;
-  m2 = (x_57 * x_58);
-  let x_61 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_63 : mat2x2<f32> = m2;
-  v1_1 = (vec2<f32>(x_61, x_61) * x_63);
-  let x_65 : vec2<f32> = v1_1;
-  param = x_65;
-  let x_66 : i32 = f1_vf2_(&(param));
-  a = x_66;
-  let x_67 : i32 = a;
-  let x_69 : i32 = x_9.x_GLF_uniform_int_values[1];
-  if ((x_67 == x_69)) {
-    let x_75 : f32 = x_7.x_GLF_uniform_float_values[0];
-    let x_77 : f32 = x_7.x_GLF_uniform_float_values[1];
-    let x_79 : f32 = x_7.x_GLF_uniform_float_values[1];
-    let x_81 : f32 = x_7.x_GLF_uniform_float_values[0];
-    x_GLF_color = vec4<f32>(x_75, x_77, x_79, x_81);
-  } else {
-    let x_84 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_85 : f32 = f32(x_84);
-    x_GLF_color = vec4<f32>(x_85, x_85, x_85, x_85);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b0682f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static int g = 0;
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  g = 0;
-  while (true) {
-    const int x_8 = g;
-    const float x_46 = asfloat(x_6[0].x);
-    if ((x_8 < int((x_46 + 2.0f)))) {
-    } else {
-      break;
-    }
-    g = (g + 1);
-  }
-  a = g;
-  while (true) {
-    const int x_12 = g;
-    const float x_56 = asfloat(x_6[0].y);
-    if ((x_12 < int(x_56))) {
-    } else {
-      break;
-    }
-    g = (g + 1);
-  }
-  a = a;
-  if ((a == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4685042..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  *(tint_symbol_3) = 0;
-  while (true) {
-    int const x_8 = *(tint_symbol_3);
-    float const x_46 = x_6.injectionSwitch.x;
-    if ((x_8 < int((x_46 + 2.0f)))) {
-    } else {
-      break;
-    }
-    int const x_9 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-  }
-  int const x_11 = *(tint_symbol_3);
-  a = x_11;
-  while (true) {
-    int const x_12 = *(tint_symbol_3);
-    float const x_56 = x_6.injectionSwitch.y;
-    if ((x_12 < int(x_56))) {
-    } else {
-      break;
-    }
-    int const x_13 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_13) + as_type<uint>(1)));
-  }
-  int const x_15 = a;
-  a = x_15;
-  int const x_16 = a;
-  if ((x_16 == 2)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b68b113..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,145 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 82
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %g "g"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-          %g = OpVariable %_ptr_Private_int Private %9
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %69 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %70 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %71 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %9
-               OpStore %g %int_0
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %g
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %32 = OpLoad %float %31
-         %35 = OpFAdd %float %32 %float_2
-         %33 = OpConvertFToS %int %35
-         %36 = OpSLessThan %bool %27 %33
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpBranch %38
-         %40 = OpLabel
-               OpBranch %24
-         %38 = OpLabel
-         %41 = OpLoad %int %g
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %g %43
-               OpBranch %25
-         %25 = OpLabel
-               OpBranch %23
-         %24 = OpLabel
-         %44 = OpLoad %int %g
-               OpStore %a %44
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %g
-         %51 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %52 = OpLoad %float %51
-         %53 = OpConvertFToS %int %52
-         %54 = OpSLessThan %bool %49 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %46
-         %55 = OpLabel
-         %58 = OpLoad %int %g
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %g %59
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %45
-         %46 = OpLabel
-         %60 = OpLoad %int %a
-               OpStore %a %60
-         %61 = OpLoad %int %a
-         %63 = OpIEqual %bool %61 %int_2
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %66
-         %65 = OpLabel
-               OpStore %x_GLF_color %69
-               OpBranch %64
-         %66 = OpLabel
-               OpStore %x_GLF_color %70
-               OpBranch %64
-         %64 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %71
-         %74 = OpLabel
-         %75 = OpFunctionCall %void %main_1
-         %76 = OpLoad %v4float %x_GLF_color
-         %77 = OpCompositeConstruct %main_out %76
-               OpReturnValue %77
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %79 = OpLabel
-         %80 = OpFunctionCall %main_out %main_inner
-         %81 = OpCompositeExtract %v4float %80 0
-               OpStore %x_GLF_color_1_1 %81
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8a01eaa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> g : i32;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  g = 0;
-  loop {
-    let x_8 : i32 = g;
-    let x_46 : f32 = x_6.injectionSwitch.x;
-    if ((x_8 < i32((x_46 + 2.0)))) {
-    } else {
-      break;
-    }
-    let x_9 : i32 = g;
-    g = (x_9 + 1);
-  }
-  let x_11 : i32 = g;
-  a = x_11;
-  loop {
-    let x_12 : i32 = g;
-    let x_56 : f32 = x_6.injectionSwitch.y;
-    if ((x_12 < i32(x_56))) {
-    } else {
-      break;
-    }
-    let x_13 : i32 = g;
-    g = (x_13 + 1);
-  }
-  let x_15 : i32 = a;
-  a = x_15;
-  let x_16 : i32 = a;
-  if ((x_16 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b0682f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static int g = 0;
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  g = 0;
-  while (true) {
-    const int x_8 = g;
-    const float x_46 = asfloat(x_6[0].x);
-    if ((x_8 < int((x_46 + 2.0f)))) {
-    } else {
-      break;
-    }
-    g = (g + 1);
-  }
-  a = g;
-  while (true) {
-    const int x_12 = g;
-    const float x_56 = asfloat(x_6[0].y);
-    if ((x_12 < int(x_56))) {
-    } else {
-      break;
-    }
-    g = (g + 1);
-  }
-  a = a;
-  if ((a == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4685042..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread int* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int a = 0;
-  *(tint_symbol_3) = 0;
-  while (true) {
-    int const x_8 = *(tint_symbol_3);
-    float const x_46 = x_6.injectionSwitch.x;
-    if ((x_8 < int((x_46 + 2.0f)))) {
-    } else {
-      break;
-    }
-    int const x_9 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-  }
-  int const x_11 = *(tint_symbol_3);
-  a = x_11;
-  while (true) {
-    int const x_12 = *(tint_symbol_3);
-    float const x_56 = x_6.injectionSwitch.y;
-    if ((x_12 < int(x_56))) {
-    } else {
-      break;
-    }
-    int const x_13 = *(tint_symbol_3);
-    *(tint_symbol_3) = as_type<int>((as_type<uint>(x_13) + as_type<uint>(1)));
-  }
-  int const x_15 = a;
-  a = x_15;
-  int const x_16 = a;
-  if ((x_16 == 2)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread int* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread int tint_symbol_7 = 0;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b68b113..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,145 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 82
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %g "g"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-          %9 = OpConstantNull %int
-          %g = OpVariable %_ptr_Private_int Private %9
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %69 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %70 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %71 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %9
-               OpStore %g %int_0
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %g
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %32 = OpLoad %float %31
-         %35 = OpFAdd %float %32 %float_2
-         %33 = OpConvertFToS %int %35
-         %36 = OpSLessThan %bool %27 %33
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpBranch %38
-         %40 = OpLabel
-               OpBranch %24
-         %38 = OpLabel
-         %41 = OpLoad %int %g
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %g %43
-               OpBranch %25
-         %25 = OpLabel
-               OpBranch %23
-         %24 = OpLabel
-         %44 = OpLoad %int %g
-               OpStore %a %44
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %49 = OpLoad %int %g
-         %51 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %52 = OpLoad %float %51
-         %53 = OpConvertFToS %int %52
-         %54 = OpSLessThan %bool %49 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %46
-         %55 = OpLabel
-         %58 = OpLoad %int %g
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %g %59
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %45
-         %46 = OpLabel
-         %60 = OpLoad %int %a
-               OpStore %a %60
-         %61 = OpLoad %int %a
-         %63 = OpIEqual %bool %61 %int_2
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %66
-         %65 = OpLabel
-               OpStore %x_GLF_color %69
-               OpBranch %64
-         %66 = OpLabel
-               OpStore %x_GLF_color %70
-               OpBranch %64
-         %64 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %71
-         %74 = OpLabel
-         %75 = OpFunctionCall %void %main_1
-         %76 = OpLoad %v4float %x_GLF_color
-         %77 = OpCompositeConstruct %main_out %76
-               OpReturnValue %77
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %79 = OpLabel
-         %80 = OpFunctionCall %main_out %main_inner
-         %81 = OpCompositeExtract %v4float %80 0
-               OpStore %x_GLF_color_1_1 %81
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8a01eaa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> g : i32;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  g = 0;
-  loop {
-    let x_8 : i32 = g;
-    let x_46 : f32 = x_6.injectionSwitch.x;
-    if ((x_8 < i32((x_46 + 2.0)))) {
-    } else {
-      break;
-    }
-    let x_9 : i32 = g;
-    g = (x_9 + 1);
-  }
-  let x_11 : i32 = g;
-  a = x_11;
-  loop {
-    let x_12 : i32 = g;
-    let x_56 : f32 = x_6.injectionSwitch.y;
-    if ((x_12 < i32(x_56))) {
-    } else {
-      break;
-    }
-    let x_13 : i32 = g;
-    g = (x_13 + 1);
-  }
-  let x_15 : i32 = a;
-  a = x_15;
-  let x_16 : i32 = a;
-  if ((x_16 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1b89527..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,69 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  int2 v2 = int2(0, 0);
-  float2 v3 = float2(0.0f, 0.0f);
-  bool x_66 = false;
-  bool x_67_phi = false;
-  const float x_41 = asfloat(x_6[2].x);
-  const float x_43 = asfloat(x_6[3].x);
-  v1 = sinh(float2(x_41, x_43));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_9[scalar_offset / 4][scalar_offset % 4]);
-  v2 = int2(x_47, -3000);
-  v3 = ldexp(v1, v2);
-  const float x_53 = v3.y;
-  x_GLF_color = float4(x_53, x_53, x_53, x_53);
-  const float x_56 = v3.x;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_58 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const bool x_59 = (x_56 > x_58);
-  x_67_phi = x_59;
-  if (x_59) {
-    const float x_63 = v3.x;
-    const float x_65 = asfloat(x_6[1].x);
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  if (x_67_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_72 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_75 = asint(x_9[1].x);
-    const int x_78 = asint(x_9[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_81 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    const int x_85 = asint(x_9[1].x);
-    const float x_86 = float(x_85);
-    x_GLF_color = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.msl
deleted file mode 100644
index f66c766..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  int2 v2 = 0;
-  float2 v3 = 0.0f;
-  bool x_66 = false;
-  bool x_67_phi = false;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  v1 = sinh(float2(x_41, x_43));
-  int const x_47 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  v2 = int2(x_47, -3000);
-  float2 const x_49 = v1;
-  int2 const x_50 = v2;
-  v3 = ldexp(x_49, x_50);
-  float const x_53 = v3.y;
-  *(tint_symbol_3) = float4(x_53, x_53, x_53, x_53);
-  float const x_56 = v3.x;
-  float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_59 = (x_56 > x_58);
-  x_67_phi = x_59;
-  if (x_59) {
-    float const x_63 = v3.x;
-    float const x_65 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  bool const x_67 = x_67_phi;
-  if (x_67) {
-    int const x_72 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_75 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_86 = float(x_85);
-    *(tint_symbol_3) = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0bb051b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,172 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-         %47 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %v3 "v3"
-               OpName %x_66 "x_66"
-               OpName %x_67_phi "x_67_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %27 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-  %int_n3000 = OpConstant %int -3000
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %27
-         %v2 = OpVariable %_ptr_Function_v2int Function %31
-         %v3 = OpVariable %_ptr_Function_v2float Function %27
-       %x_66 = OpVariable %_ptr_Function_bool Function %36
-   %x_67_phi = OpVariable %_ptr_Function_bool Function %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %45 = OpLoad %float %44
-         %48 = OpCompositeConstruct %v2float %42 %45
-         %46 = OpExtInst %v2float %47 Sinh %48
-               OpStore %v1 %46
-         %51 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %54 = OpCompositeConstruct %v2int %52 %int_n3000
-               OpStore %v2 %54
-         %55 = OpLoad %v2float %v1
-         %56 = OpLoad %v2int %v2
-         %57 = OpExtInst %v2float %47 Ldexp %55 %56
-               OpStore %v3 %57
-         %60 = OpAccessChain %_ptr_Function_float %v3 %uint_1
-         %61 = OpLoad %float %60
-         %62 = OpCompositeConstruct %v4float %61 %61 %61 %61
-               OpStore %x_GLF_color %62
-         %63 = OpAccessChain %_ptr_Function_float %v3 %uint_0
-         %64 = OpLoad %float %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpFOrdGreaterThan %bool %64 %66
-               OpStore %x_67_phi %67
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %v3 %uint_0
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %74 = OpLoad %float %73
-         %75 = OpFOrdLessThan %bool %71 %74
-               OpStore %x_66 %75
-         %76 = OpLoad %bool %x_66
-               OpStore %x_67_phi %76
-               OpBranch %68
-         %68 = OpLabel
-         %77 = OpLoad %bool %x_67_phi
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %82
-         %90 = OpConvertSToF %float %84
-         %91 = OpConvertSToF %float %86
-         %92 = OpConvertSToF %float %88
-         %93 = OpCompositeConstruct %v4float %89 %90 %91 %92
-               OpStore %x_GLF_color %93
-               OpBranch %78
-         %80 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %95 = OpLoad %int %94
-         %96 = OpConvertSToF %float %95
-         %97 = OpCompositeConstruct %v4float %96 %96 %96 %96
-               OpStore %x_GLF_color %97
-               OpBranch %78
-         %78 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-        %101 = OpLabel
-        %102 = OpFunctionCall %void %main_1
-        %103 = OpLoad %v4float %x_GLF_color
-        %104 = OpCompositeConstruct %main_out %103
-               OpReturnValue %104
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %106 = OpLabel
-        %107 = OpFunctionCall %main_out %main_inner
-        %108 = OpCompositeExtract %v4float %107 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6c083f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  var v2 : vec2<i32>;
-  var v3 : vec2<f32>;
-  var x_66 : bool;
-  var x_67_phi : bool;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[3];
-  v1 = sinh(vec2<f32>(x_41, x_43));
-  let x_47 : i32 = x_9.x_GLF_uniform_int_values[0];
-  v2 = vec2<i32>(x_47, -3000);
-  let x_49 : vec2<f32> = v1;
-  let x_50 : vec2<i32> = v2;
-  v3 = ldexp(x_49, x_50);
-  let x_53 : f32 = v3.y;
-  x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
-  let x_56 : f32 = v3.x;
-  let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_59 : bool = (x_56 > x_58);
-  x_67_phi = x_59;
-  if (x_59) {
-    let x_63 : f32 = v3.x;
-    let x_65 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  let x_67 : bool = x_67_phi;
-  if (x_67) {
-    let x_72 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_75 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_72), f32(x_75), f32(x_78), f32(x_81));
-  } else {
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_86 : f32 = f32(x_85);
-    x_GLF_color = vec4<f32>(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1b89527..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,69 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  int2 v2 = int2(0, 0);
-  float2 v3 = float2(0.0f, 0.0f);
-  bool x_66 = false;
-  bool x_67_phi = false;
-  const float x_41 = asfloat(x_6[2].x);
-  const float x_43 = asfloat(x_6[3].x);
-  v1 = sinh(float2(x_41, x_43));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_9[scalar_offset / 4][scalar_offset % 4]);
-  v2 = int2(x_47, -3000);
-  v3 = ldexp(v1, v2);
-  const float x_53 = v3.y;
-  x_GLF_color = float4(x_53, x_53, x_53, x_53);
-  const float x_56 = v3.x;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_58 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const bool x_59 = (x_56 > x_58);
-  x_67_phi = x_59;
-  if (x_59) {
-    const float x_63 = v3.x;
-    const float x_65 = asfloat(x_6[1].x);
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  if (x_67_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_72 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_75 = asint(x_9[1].x);
-    const int x_78 = asint(x_9[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_81 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    const int x_85 = asint(x_9[1].x);
-    const float x_86 = float(x_85);
-    x_GLF_color = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.msl
deleted file mode 100644
index f66c766..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  int2 v2 = 0;
-  float2 v3 = 0.0f;
-  bool x_66 = false;
-  bool x_67_phi = false;
-  float const x_41 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_43 = x_6.x_GLF_uniform_float_values.arr[3].el;
-  v1 = sinh(float2(x_41, x_43));
-  int const x_47 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  v2 = int2(x_47, -3000);
-  float2 const x_49 = v1;
-  int2 const x_50 = v2;
-  v3 = ldexp(x_49, x_50);
-  float const x_53 = v3.y;
-  *(tint_symbol_3) = float4(x_53, x_53, x_53, x_53);
-  float const x_56 = v3.x;
-  float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_59 = (x_56 > x_58);
-  x_67_phi = x_59;
-  if (x_59) {
-    float const x_63 = v3.x;
-    float const x_65 = x_6.x_GLF_uniform_float_values.arr[1].el;
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  bool const x_67 = x_67_phi;
-  if (x_67) {
-    int const x_72 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_75 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_78 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_81 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_72), float(x_75), float(x_78), float(x_81));
-  } else {
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_86 = float(x_85);
-    *(tint_symbol_3) = float4(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0bb051b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,172 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-         %47 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %v3 "v3"
-               OpName %x_66 "x_66"
-               OpName %x_67_phi "x_67_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_float_uint_4 = OpTypeArray %float %uint_4
-       %buf1 = OpTypeStruct %_arr_float_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %27 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-  %int_n3000 = OpConstant %int -3000
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %98 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %27
-         %v2 = OpVariable %_ptr_Function_v2int Function %31
-         %v3 = OpVariable %_ptr_Function_v2float Function %27
-       %x_66 = OpVariable %_ptr_Function_bool Function %36
-   %x_67_phi = OpVariable %_ptr_Function_bool Function %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_3
-         %45 = OpLoad %float %44
-         %48 = OpCompositeConstruct %v2float %42 %45
-         %46 = OpExtInst %v2float %47 Sinh %48
-               OpStore %v1 %46
-         %51 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %54 = OpCompositeConstruct %v2int %52 %int_n3000
-               OpStore %v2 %54
-         %55 = OpLoad %v2float %v1
-         %56 = OpLoad %v2int %v2
-         %57 = OpExtInst %v2float %47 Ldexp %55 %56
-               OpStore %v3 %57
-         %60 = OpAccessChain %_ptr_Function_float %v3 %uint_1
-         %61 = OpLoad %float %60
-         %62 = OpCompositeConstruct %v4float %61 %61 %61 %61
-               OpStore %x_GLF_color %62
-         %63 = OpAccessChain %_ptr_Function_float %v3 %uint_0
-         %64 = OpLoad %float %63
-         %65 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %66 = OpLoad %float %65
-         %67 = OpFOrdGreaterThan %bool %64 %66
-               OpStore %x_67_phi %67
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %v3 %uint_0
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %74 = OpLoad %float %73
-         %75 = OpFOrdLessThan %bool %71 %74
-               OpStore %x_66 %75
-         %76 = OpLoad %bool %x_66
-               OpStore %x_67_phi %76
-               OpBranch %68
-         %68 = OpLabel
-         %77 = OpLoad %bool %x_67_phi
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpConvertSToF %float %82
-         %90 = OpConvertSToF %float %84
-         %91 = OpConvertSToF %float %86
-         %92 = OpConvertSToF %float %88
-         %93 = OpCompositeConstruct %v4float %89 %90 %91 %92
-               OpStore %x_GLF_color %93
-               OpBranch %78
-         %80 = OpLabel
-         %94 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %95 = OpLoad %int %94
-         %96 = OpConvertSToF %float %95
-         %97 = OpCompositeConstruct %v4float %96 %96 %96 %96
-               OpStore %x_GLF_color %97
-               OpBranch %78
-         %78 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %98
-        %101 = OpLabel
-        %102 = OpFunctionCall %void %main_1
-        %103 = OpLoad %v4float %x_GLF_color
-        %104 = OpCompositeConstruct %main_out %103
-               OpReturnValue %104
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %106 = OpLabel
-        %107 = OpFunctionCall %main_out %main_inner
-        %108 = OpCompositeExtract %v4float %107 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6c083f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sinh-ldexp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  var v2 : vec2<i32>;
-  var v3 : vec2<f32>;
-  var x_66 : bool;
-  var x_67_phi : bool;
-  let x_41 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_43 : f32 = x_6.x_GLF_uniform_float_values[3];
-  v1 = sinh(vec2<f32>(x_41, x_43));
-  let x_47 : i32 = x_9.x_GLF_uniform_int_values[0];
-  v2 = vec2<i32>(x_47, -3000);
-  let x_49 : vec2<f32> = v1;
-  let x_50 : vec2<i32> = v2;
-  v3 = ldexp(x_49, x_50);
-  let x_53 : f32 = v3.y;
-  x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
-  let x_56 : f32 = v3.x;
-  let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_59 : bool = (x_56 > x_58);
-  x_67_phi = x_59;
-  if (x_59) {
-    let x_63 : f32 = v3.x;
-    let x_65 : f32 = x_6.x_GLF_uniform_float_values[1];
-    x_66 = (x_63 < x_65);
-    x_67_phi = x_66;
-  }
-  let x_67 : bool = x_67_phi;
-  if (x_67) {
-    let x_72 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_75 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_78 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_81 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_72), f32(x_75), f32(x_78), f32(x_81));
-  } else {
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_86 : f32 = f32(x_85);
-    x_GLF_color = vec4<f32>(x_86, x_86, x_86, x_86);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 85ee4ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,77 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 func_() {
-  const int x_48 = asint(x_6[0].x);
-  if ((x_48 == 1)) {
-    return float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    return float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return float4(0.0f, 0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    const int x_33 = i;
-    const int x_35 = asint(x_6[0].x);
-    if ((x_33 <= x_35)) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 1: {
-        const float4 x_43 = func_();
-        x_GLF_color = x_43;
-        /* fallthrough */
-        {
-          /* fallthrough */
-        }
-        {
-          x_GLF_color.y = 0.0f;
-        }
-        break;
-      }
-      default: {
-        /* fallthrough */
-        {
-          x_GLF_color.y = 0.0f;
-        }
-        break;
-      }
-      case 0: {
-        x_GLF_color.y = 0.0f;
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.msl
deleted file mode 100644
index 94aea4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 func_(constant buf0& x_6) {
-  int const x_48 = x_6.one;
-  if ((x_48 == 1)) {
-    return float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    return float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return float4(0.0f, 0.0f, 0.0f, 0.0f);
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    int const x_33 = i;
-    int const x_35 = x_6.one;
-    if ((x_33 <= x_35)) {
-    } else {
-      break;
-    }
-    int const x_38 = i;
-    switch(x_38) {
-      case 1: {
-        float4 const x_43 = func_(x_6);
-        *(tint_symbol_3) = x_43;
-        /* fallthrough */
-      }
-      default: {
-        /* fallthrough */
-      }
-      case 0: {
-        (*(tint_symbol_3)).y = 0.0f;
-        break;
-      }
-    }
-    {
-      int const x_44 = i;
-      i = as_type<int>((as_type<uint>(x_44) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 16c3575..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,130 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %28 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %29 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %30 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-      %func_ = OpFunction %v4float None %12
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %19 = OpLoad %int %18
-         %21 = OpIEqual %bool %19 %int_1
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %24 %25
-         %24 = OpLabel
-               OpReturnValue %28
-         %25 = OpLabel
-               OpReturnValue %29
-         %23 = OpLabel
-               OpReturnValue %29
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %30
-         %33 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %36
-               OpStore %x_GLF_color %29
-               OpStore %i %int_0
-               OpBranch %38
-         %38 = OpLabel
-               OpLoopMerge %39 %40 None
-               OpBranch %41
-         %41 = OpLabel
-         %42 = OpLoad %int %i
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %44 = OpLoad %int %43
-         %45 = OpSLessThanEqual %bool %42 %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %39
-         %46 = OpLabel
-         %49 = OpLoad %int %i
-               OpSelectionMerge %50 None
-               OpSwitch %49 %51 1 %52 0 %53
-         %52 = OpLabel
-         %54 = OpFunctionCall %v4float %func_
-               OpStore %x_GLF_color %54
-               OpBranch %51
-         %51 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-         %57 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %57 %float_0
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %i %59
-               OpBranch %38
-         %39 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %30
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1f005a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> vec4<f32> {
-  let x_48 : i32 = x_6.one;
-  if ((x_48 == 1)) {
-    return vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    return vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return vec4<f32>(0.0, 0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  i = 0;
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : i32 = x_6.one;
-    if ((x_33 <= x_35)) {
-    } else {
-      break;
-    }
-    let x_38 : i32 = i;
-    switch(x_38) {
-      case 1: {
-        let x_43 : vec4<f32> = func_();
-        x_GLF_color = x_43;
-        fallthrough;
-      }
-      default: {
-        fallthrough;
-      }
-      case 0: {
-        x_GLF_color.y = 0.0;
-      }
-    }
-
-    continuing {
-      let x_44 : i32 = i;
-      i = (x_44 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 85ee4ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,77 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 func_() {
-  const int x_48 = asint(x_6[0].x);
-  if ((x_48 == 1)) {
-    return float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    return float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return float4(0.0f, 0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    const int x_33 = i;
-    const int x_35 = asint(x_6[0].x);
-    if ((x_33 <= x_35)) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 1: {
-        const float4 x_43 = func_();
-        x_GLF_color = x_43;
-        /* fallthrough */
-        {
-          /* fallthrough */
-        }
-        {
-          x_GLF_color.y = 0.0f;
-        }
-        break;
-      }
-      default: {
-        /* fallthrough */
-        {
-          x_GLF_color.y = 0.0f;
-        }
-        break;
-      }
-      case 0: {
-        x_GLF_color.y = 0.0f;
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.msl
deleted file mode 100644
index 94aea4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 func_(constant buf0& x_6) {
-  int const x_48 = x_6.one;
-  if ((x_48 == 1)) {
-    return float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    return float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return float4(0.0f, 0.0f, 0.0f, 0.0f);
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  while (true) {
-    int const x_33 = i;
-    int const x_35 = x_6.one;
-    if ((x_33 <= x_35)) {
-    } else {
-      break;
-    }
-    int const x_38 = i;
-    switch(x_38) {
-      case 1: {
-        float4 const x_43 = func_(x_6);
-        *(tint_symbol_3) = x_43;
-        /* fallthrough */
-      }
-      default: {
-        /* fallthrough */
-      }
-      case 0: {
-        (*(tint_symbol_3)).y = 0.0f;
-        break;
-      }
-    }
-    {
-      int const x_44 = i;
-      i = as_type<int>((as_type<uint>(x_44) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 16c3575..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,130 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %28 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %29 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %30 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %60 = OpTypeFunction %main_out
-      %func_ = OpFunction %v4float None %12
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %19 = OpLoad %int %18
-         %21 = OpIEqual %bool %19 %int_1
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %24 %25
-         %24 = OpLabel
-               OpReturnValue %28
-         %25 = OpLabel
-               OpReturnValue %29
-         %23 = OpLabel
-               OpReturnValue %29
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %30
-         %33 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %36
-               OpStore %x_GLF_color %29
-               OpStore %i %int_0
-               OpBranch %38
-         %38 = OpLabel
-               OpLoopMerge %39 %40 None
-               OpBranch %41
-         %41 = OpLabel
-         %42 = OpLoad %int %i
-         %43 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %44 = OpLoad %int %43
-         %45 = OpSLessThanEqual %bool %42 %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %39
-         %46 = OpLabel
-         %49 = OpLoad %int %i
-               OpSelectionMerge %50 None
-               OpSwitch %49 %51 1 %52 0 %53
-         %52 = OpLabel
-         %54 = OpFunctionCall %v4float %func_
-               OpStore %x_GLF_color %54
-               OpBranch %51
-         %51 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-         %57 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %57 %float_0
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-         %58 = OpLoad %int %i
-         %59 = OpIAdd %int %58 %int_1
-               OpStore %i %59
-               OpBranch %38
-         %39 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %void %main_1
-         %65 = OpLoad %v4float %x_GLF_color
-         %66 = OpCompositeConstruct %main_out %65
-               OpReturnValue %66
-               OpFunctionEnd
-       %main = OpFunction %void None %30
-         %68 = OpLabel
-         %69 = OpFunctionCall %main_out %main_inner
-         %70 = OpCompositeExtract %v4float %69 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1f005a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-ssa-rewrite-case-with-default/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> vec4<f32> {
-  let x_48 : i32 = x_6.one;
-  if ((x_48 == 1)) {
-    return vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    return vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return vec4<f32>(0.0, 0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  i = 0;
-  loop {
-    let x_33 : i32 = i;
-    let x_35 : i32 = x_6.one;
-    if ((x_33 <= x_35)) {
-    } else {
-      break;
-    }
-    let x_38 : i32 = i;
-    switch(x_38) {
-      case 1: {
-        let x_43 : vec4<f32> = func_();
-        x_GLF_color = x_43;
-        fallthrough;
-      }
-      default: {
-        fallthrough;
-      }
-      case 0: {
-        x_GLF_color.y = 0.0;
-      }
-    }
-
-    continuing {
-      let x_44 : i32 = i;
-      i = (x_44 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 56c09e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  float2 v2 = float2(0.0f, 0.0f);
-  v1 = float2(1.0f, -1.0f);
-  v2 = step(float2(0.400000006f, 0.400000006f), sinh(v1));
-  const float x_27 = v2.x;
-  const float x_29 = v2.y;
-  const float x_31 = v2.y;
-  const float x_33 = v2.x;
-  x_GLF_color = float4(x_27, x_29, x_31, x_33);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.msl
deleted file mode 100644
index c006b50..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  float2 v2 = 0.0f;
-  v1 = float2(1.0f, -1.0f);
-  float2 const x_22 = v1;
-  v2 = step(float2(0.400000006f, 0.400000006f), sinh(x_22));
-  float const x_27 = v2.x;
-  float const x_29 = v2.y;
-  float const x_31 = v2.y;
-  float const x_33 = v2.x;
-  *(tint_symbol_3) = float4(x_27, x_29, x_31, x_33);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 99576b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-         %22 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-    %float_1 = OpConstant %float 1
-   %float_n1 = OpConstant %float -1
-         %19 = OpConstantComposite %v2float %float_1 %float_n1
-%float_0_400000006 = OpConstant %float 0.400000006
-         %24 = OpConstantComposite %v2float %float_0_400000006 %float_0_400000006
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-         %39 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %15
-         %v2 = OpVariable %_ptr_Function_v2float Function %15
-               OpStore %v1 %19
-         %20 = OpLoad %v2float %v1
-         %25 = OpExtInst %v2float %22 Sinh %20
-         %21 = OpExtInst %v2float %22 Step %24 %25
-               OpStore %v2 %21
-         %29 = OpAccessChain %_ptr_Function_float %v2 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %v2 %uint_1
-         %33 = OpLoad %float %32
-         %34 = OpAccessChain %_ptr_Function_float %v2 %uint_1
-         %35 = OpLoad %float %34
-         %36 = OpAccessChain %_ptr_Function_float %v2 %uint_0
-         %37 = OpLoad %float %36
-         %38 = OpCompositeConstruct %v4float %30 %33 %35 %37
-               OpStore %x_GLF_color %38
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %39
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %v4float %x_GLF_color
-         %45 = OpCompositeConstruct %main_out %44
-               OpReturnValue %45
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %47 = OpLabel
-         %48 = OpFunctionCall %main_out %main_inner
-         %49 = OpCompositeExtract %v4float %48 0
-               OpStore %x_GLF_color_1_1 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a52a30a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  var v2 : vec2<f32>;
-  v1 = vec2<f32>(1.0, -1.0);
-  let x_22 : vec2<f32> = v1;
-  v2 = step(vec2<f32>(0.400000006, 0.400000006), sinh(x_22));
-  let x_27 : f32 = v2.x;
-  let x_29 : f32 = v2.y;
-  let x_31 : f32 = v2.y;
-  let x_33 : f32 = v2.x;
-  x_GLF_color = vec4<f32>(x_27, x_29, x_31, x_33);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 56c09e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  float2 v2 = float2(0.0f, 0.0f);
-  v1 = float2(1.0f, -1.0f);
-  v2 = step(float2(0.400000006f, 0.400000006f), sinh(v1));
-  const float x_27 = v2.x;
-  const float x_29 = v2.y;
-  const float x_31 = v2.y;
-  const float x_33 = v2.x;
-  x_GLF_color = float4(x_27, x_29, x_31, x_33);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.msl
deleted file mode 100644
index c006b50..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  float2 v2 = 0.0f;
-  v1 = float2(1.0f, -1.0f);
-  float2 const x_22 = v1;
-  v2 = step(float2(0.400000006f, 0.400000006f), sinh(x_22));
-  float const x_27 = v2.x;
-  float const x_29 = v2.y;
-  float const x_31 = v2.y;
-  float const x_33 = v2.x;
-  *(tint_symbol_3) = float4(x_27, x_29, x_31, x_33);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 99576b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-         %22 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %v2 "v2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-    %float_1 = OpConstant %float 1
-   %float_n1 = OpConstant %float -1
-         %19 = OpConstantComposite %v2float %float_1 %float_n1
-%float_0_400000006 = OpConstant %float 0.400000006
-         %24 = OpConstantComposite %v2float %float_0_400000006 %float_0_400000006
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-         %39 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %15
-         %v2 = OpVariable %_ptr_Function_v2float Function %15
-               OpStore %v1 %19
-         %20 = OpLoad %v2float %v1
-         %25 = OpExtInst %v2float %22 Sinh %20
-         %21 = OpExtInst %v2float %22 Step %24 %25
-               OpStore %v2 %21
-         %29 = OpAccessChain %_ptr_Function_float %v2 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %v2 %uint_1
-         %33 = OpLoad %float %32
-         %34 = OpAccessChain %_ptr_Function_float %v2 %uint_1
-         %35 = OpLoad %float %34
-         %36 = OpAccessChain %_ptr_Function_float %v2 %uint_0
-         %37 = OpLoad %float %36
-         %38 = OpCompositeConstruct %v4float %30 %33 %35 %37
-               OpStore %x_GLF_color %38
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %39
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %v4float %x_GLF_color
-         %45 = OpCompositeConstruct %main_out %44
-               OpReturnValue %45
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %47 = OpLabel
-         %48 = OpFunctionCall %main_out %main_inner
-         %49 = OpCompositeExtract %v4float %48 0
-               OpStore %x_GLF_color_1_1 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a52a30a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-step-sinh/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  var v2 : vec2<f32>;
-  v1 = vec2<f32>(1.0, -1.0);
-  let x_22 : vec2<f32> = v1;
-  v2 = step(vec2<f32>(0.400000006, 0.400000006), sinh(x_22));
-  let x_27 : f32 = v2.x;
-  let x_29 : f32 = v2.y;
-  let x_31 : f32 = v2.y;
-  let x_33 : f32 = v2.x;
-  x_GLF_color = vec4<f32>(x_27, x_29, x_31, x_33);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 58c4da7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-SKIP: FAILED
-
-struct S {
-  float numbers[3];
-};
-
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[5];
-};
-cbuffer cbuffer_x_9 : register(b2, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_12 : register(b3, space0) {
-  uint4 x_12[1];
-};
-cbuffer cbuffer_x_15 : register(b0, space0) {
-  uint4 x_15[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  S obj = (S)0;
-  float a = 0.0f;
-  float2 x_49 = float2(0.0f, 0.0f);
-  float b = 0.0f;
-  const float x_51 = asfloat(x_7[3].x);
-  const float x_53 = asfloat(x_7[2].x);
-  const float x_55 = asfloat(x_7[4].x);
-  const float tint_symbol_7[3] = {x_51, x_53, x_55};
-  const S tint_symbol_8 = {tint_symbol_7};
-  obj = tint_symbol_8;
-  const float x_59 = asfloat(x_9[0].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_62 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  obj.numbers[int(x_59)] = x_62;
-  const float x_65 = asfloat(x_9[0].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_67 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_65 > x_67)) {
-    const float2 x_73 = asfloat(x_9[0].xy);
-    x_49 = x_73;
-  } else {
-    const float2 x_75 = asfloat(x_12[0].xy);
-    x_49 = x_75;
-  }
-  const float x_77 = x_49.y;
-  a = x_77;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_79 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_80 = a;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_82 = asint(x_15[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_84 = obj.numbers[x_82];
-  b = lerp(x_79, x_80, x_84);
-  const float x_86 = b;
-  const float x_88 = asfloat(x_7[2].x);
-  const float x_91 = asfloat(x_7[1].x);
-  if ((distance(x_86, x_88) < x_91)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_97 = asint(x_15[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const int x_100 = asint(x_15[1].x);
-    const int x_103 = asint(x_15[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_106 = asint(x_15[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_97), float(x_100), float(x_103), float(x_106));
-  } else {
-    const int x_110 = asint(x_15[1].x);
-    const float x_111 = float(x_110);
-    x_GLF_color = float4(x_111, x_111, x_111, x_111);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_9 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_9;
-}
-C:\src\tint\test\Shader@0x0000022951B91F60(33,3-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.msl
deleted file mode 100755
index dc70a33..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[3];
-};
-struct S {
-  tint_array_wrapper numbers;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 zeroVec;
-};
-struct buf3 {
-  /* 0x0000 */ float2 oneVec;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf2& x_9, constant buf3& x_12, constant buf0& x_15, thread float4* const tint_symbol_5) {
-  S obj = {};
-  float a = 0.0f;
-  float2 x_49 = 0.0f;
-  float b = 0.0f;
-  float const x_51 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  float const x_53 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_55 = x_7.x_GLF_uniform_float_values.arr[4].el;
-  tint_array_wrapper const tint_symbol_2 = {.arr={x_51, x_53, x_55}};
-  S const tint_symbol_3 = {.numbers=tint_symbol_2};
-  obj = tint_symbol_3;
-  float const x_59 = x_9.zeroVec.x;
-  float const x_62 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  obj.numbers.arr[int(x_59)] = x_62;
-  float const x_65 = x_9.zeroVec.x;
-  float const x_67 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_65 > x_67)) {
-    float2 const x_73 = x_9.zeroVec;
-    x_49 = x_73;
-  } else {
-    float2 const x_75 = x_12.oneVec;
-    x_49 = x_75;
-  }
-  float const x_77 = x_49.y;
-  a = x_77;
-  float const x_79 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_80 = a;
-  int const x_82 = x_15.x_GLF_uniform_int_values.arr[0].el;
-  float const x_84 = obj.numbers.arr[x_82];
-  b = mix(x_79, x_80, x_84);
-  float const x_86 = b;
-  float const x_88 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_91 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  if ((fabs(x_86 - x_88) < x_91)) {
-    int const x_97 = x_15.x_GLF_uniform_int_values.arr[0].el;
-    int const x_100 = x_15.x_GLF_uniform_int_values.arr[1].el;
-    int const x_103 = x_15.x_GLF_uniform_int_values.arr[1].el;
-    int const x_106 = x_15.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_97), float(x_100), float(x_103), float(x_106));
-  } else {
-    int const x_110 = x_15.x_GLF_uniform_int_values.arr[1].el;
-    float const x_111 = float(x_110);
-    *(tint_symbol_5) = float4(x_111, x_111, x_111, x_111);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf2& x_9, constant buf3& x_12, constant buf0& x_15, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_9, x_12, x_15, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf2& x_9 [[buffer(1)]], constant buf3& x_12 [[buffer(2)]], constant buf0& x_15 [[buffer(3)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, x_12, x_15, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index db5b36e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,212 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-         %90 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zeroVec"
-               OpName %x_9 "x_9"
-               OpName %buf3 "buf3"
-               OpMemberName %buf3 0 "oneVec"
-               OpName %x_12 "x_12"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_15 "x_15"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "numbers"
-               OpName %obj "obj"
-               OpName %a "a"
-               OpName %x_49 "x_49"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_5 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 2
-               OpDecorate %buf3 Block
-               OpMemberDecorate %buf3 0 Offset 0
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 3
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_15 NonWritable
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-       %buf1 = OpTypeStruct %_arr_float_uint_5
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_9 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %buf3 = OpTypeStruct %v2float
-%_ptr_Uniform_buf3 = OpTypePointer Uniform %buf3
-       %x_12 = OpVariable %_ptr_Uniform_buf3 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_15 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-          %S = OpTypeStruct %_arr_float_uint_3
-%_ptr_Function_S = OpTypePointer Function %S
-         %36 = OpConstantNull %S
-%_ptr_Function_float = OpTypePointer Function %float
-         %39 = OpConstantNull %float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %42 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-        %obj = OpVariable %_ptr_Function_S Function %36
-          %a = OpVariable %_ptr_Function_float Function %39
-       %x_49 = OpVariable %_ptr_Function_v2float Function %42
-          %b = OpVariable %_ptr_Function_float Function %39
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-         %48 = OpLoad %float %47
-         %50 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %51 = OpLoad %float %50
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_4
-         %54 = OpLoad %float %53
-         %55 = OpCompositeConstruct %_arr_float_uint_3 %48 %51 %54
-         %56 = OpCompositeConstruct %S %55
-               OpStore %obj %56
-         %57 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %58 = OpLoad %float %57
-         %60 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpConvertFToS %int %58
-         %63 = OpAccessChain %_ptr_Function_float %obj %uint_0 %62
-               OpStore %63 %61
-         %64 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %65 = OpLoad %float %64
-         %66 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %67 = OpLoad %float %66
-         %68 = OpFOrdGreaterThan %bool %65 %67
-               OpSelectionMerge %70 None
-               OpBranchConditional %68 %71 %72
-         %71 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_v2float %x_9 %uint_0
-         %75 = OpLoad %v2float %74
-               OpStore %x_49 %75
-               OpBranch %70
-         %72 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_v2float %x_12 %uint_0
-         %77 = OpLoad %v2float %76
-               OpStore %x_49 %77
-               OpBranch %70
-         %70 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_float %x_49 %uint_1
-         %80 = OpLoad %float %79
-               OpStore %a %80
-         %81 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %82 = OpLoad %float %81
-         %83 = OpLoad %float %a
-         %85 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Function_float %obj %uint_0 %86
-         %88 = OpLoad %float %87
-         %89 = OpExtInst %float %90 FMix %82 %83 %88
-               OpStore %b %89
-         %91 = OpLoad %float %b
-         %92 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %93 = OpLoad %float %92
-         %95 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %96 = OpLoad %float %95
-         %97 = OpExtInst %float %90 Distance %91 %93
-         %98 = OpFOrdLessThan %bool %97 %96
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %101
-        %100 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_0
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_1
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_1
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_0
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %103
-        %111 = OpConvertSToF %float %105
-        %112 = OpConvertSToF %float %107
-        %113 = OpConvertSToF %float %109
-        %114 = OpCompositeConstruct %v4float %110 %111 %112 %113
-               OpStore %x_GLF_color %114
-               OpBranch %99
-        %101 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpCompositeConstruct %v4float %117 %117 %117 %117
-               OpStore %x_GLF_color %118
-               OpBranch %99
-         %99 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 57db954..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-struct S {
-  numbers : array<f32, 3>;
-};
-
-type Arr = [[stride(16)]] array<f32, 5>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  zeroVec : vec2<f32>;
-};
-
-[[block]]
-struct buf3 {
-  oneVec : vec2<f32>;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_9 : buf2;
-
-[[group(0), binding(3)]] var<uniform> x_12 : buf3;
-
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var obj : S;
-  var a : f32;
-  var x_49 : vec2<f32>;
-  var b : f32;
-  let x_51 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_53 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_55 : f32 = x_7.x_GLF_uniform_float_values[4];
-  obj = S(array<f32, 3>(x_51, x_53, x_55));
-  let x_59 : f32 = x_9.zeroVec.x;
-  let x_62 : f32 = x_7.x_GLF_uniform_float_values[0];
-  obj.numbers[i32(x_59)] = x_62;
-  let x_65 : f32 = x_9.zeroVec.x;
-  let x_67 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_65 > x_67)) {
-    let x_73 : vec2<f32> = x_9.zeroVec;
-    x_49 = x_73;
-  } else {
-    let x_75 : vec2<f32> = x_12.oneVec;
-    x_49 = x_75;
-  }
-  let x_77 : f32 = x_49.y;
-  a = x_77;
-  let x_79 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_80 : f32 = a;
-  let x_82 : i32 = x_15.x_GLF_uniform_int_values[0];
-  let x_84 : f32 = obj.numbers[x_82];
-  b = mix(x_79, x_80, x_84);
-  let x_86 : f32 = b;
-  let x_88 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_91 : f32 = x_7.x_GLF_uniform_float_values[1];
-  if ((distance(x_86, x_88) < x_91)) {
-    let x_97 : i32 = x_15.x_GLF_uniform_int_values[0];
-    let x_100 : i32 = x_15.x_GLF_uniform_int_values[1];
-    let x_103 : i32 = x_15.x_GLF_uniform_int_values[1];
-    let x_106 : i32 = x_15.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_97), f32(x_100), f32(x_103), f32(x_106));
-  } else {
-    let x_110 : i32 = x_15.x_GLF_uniform_int_values[1];
-    let x_111 : f32 = f32(x_110);
-    x_GLF_color = vec4<f32>(x_111, x_111, x_111, x_111);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f5f76a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,88 +0,0 @@
-SKIP: FAILED
-
-struct S {
-  float numbers[3];
-};
-
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[5];
-};
-cbuffer cbuffer_x_9 : register(b2, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_12 : register(b3, space0) {
-  uint4 x_12[1];
-};
-cbuffer cbuffer_x_15 : register(b0, space0) {
-  uint4 x_15[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  S obj = (S)0;
-  float a = 0.0f;
-  float2 x_49 = float2(0.0f, 0.0f);
-  float b = 0.0f;
-  const float x_51 = asfloat(x_7[3].x);
-  const float x_53 = asfloat(x_7[2].x);
-  const float x_55 = asfloat(x_7[4].x);
-  const float tint_symbol_7[3] = {x_51, x_53, x_55};
-  const S tint_symbol_8 = {tint_symbol_7};
-  obj = tint_symbol_8;
-  const float x_59 = asfloat(x_9[0].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_62 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  obj.numbers[int(x_59)] = x_62;
-  const float x_65 = asfloat(x_9[0].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_67 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_65 > x_67)) {
-    const float2 x_73 = asfloat(x_9[0].xy);
-    x_49 = x_73;
-  } else {
-    const float2 x_75 = asfloat(x_12[0].xy);
-    x_49 = x_75;
-  }
-  const float x_77 = x_49.y;
-  a = x_77;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_79 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const float x_80 = a;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_82 = asint(x_15[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_84 = obj.numbers[x_82];
-  b = lerp(x_79, x_80, x_84);
-  const float x_86 = b;
-  const float x_88 = asfloat(x_7[2].x);
-  const float x_91 = asfloat(x_7[1].x);
-  if ((distance(x_86, x_88) < x_91)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_97 = asint(x_15[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const int x_100 = asint(x_15[1].x);
-    const int x_103 = asint(x_15[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_106 = asint(x_15[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_97), float(x_100), float(x_103), float(x_106));
-  } else {
-    const int x_110 = asint(x_15[1].x);
-    const float x_111 = float(x_110);
-    x_GLF_color = float4(x_111, x_111, x_111, x_111);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_9 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_9;
-}
-C:\src\tint\test\Shader@0x000002E12CF56890(33,3-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.msl
deleted file mode 100755
index dc70a33..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[3];
-};
-struct S {
-  tint_array_wrapper numbers;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 zeroVec;
-};
-struct buf3 {
-  /* 0x0000 */ float2 oneVec;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf2& x_9, constant buf3& x_12, constant buf0& x_15, thread float4* const tint_symbol_5) {
-  S obj = {};
-  float a = 0.0f;
-  float2 x_49 = 0.0f;
-  float b = 0.0f;
-  float const x_51 = x_7.x_GLF_uniform_float_values.arr[3].el;
-  float const x_53 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_55 = x_7.x_GLF_uniform_float_values.arr[4].el;
-  tint_array_wrapper const tint_symbol_2 = {.arr={x_51, x_53, x_55}};
-  S const tint_symbol_3 = {.numbers=tint_symbol_2};
-  obj = tint_symbol_3;
-  float const x_59 = x_9.zeroVec.x;
-  float const x_62 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  obj.numbers.arr[int(x_59)] = x_62;
-  float const x_65 = x_9.zeroVec.x;
-  float const x_67 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_65 > x_67)) {
-    float2 const x_73 = x_9.zeroVec;
-    x_49 = x_73;
-  } else {
-    float2 const x_75 = x_12.oneVec;
-    x_49 = x_75;
-  }
-  float const x_77 = x_49.y;
-  a = x_77;
-  float const x_79 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  float const x_80 = a;
-  int const x_82 = x_15.x_GLF_uniform_int_values.arr[0].el;
-  float const x_84 = obj.numbers.arr[x_82];
-  b = mix(x_79, x_80, x_84);
-  float const x_86 = b;
-  float const x_88 = x_7.x_GLF_uniform_float_values.arr[2].el;
-  float const x_91 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  if ((fabs(x_86 - x_88) < x_91)) {
-    int const x_97 = x_15.x_GLF_uniform_int_values.arr[0].el;
-    int const x_100 = x_15.x_GLF_uniform_int_values.arr[1].el;
-    int const x_103 = x_15.x_GLF_uniform_int_values.arr[1].el;
-    int const x_106 = x_15.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_97), float(x_100), float(x_103), float(x_106));
-  } else {
-    int const x_110 = x_15.x_GLF_uniform_int_values.arr[1].el;
-    float const x_111 = float(x_110);
-    *(tint_symbol_5) = float4(x_111, x_111, x_111, x_111);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf2& x_9, constant buf3& x_12, constant buf0& x_15, thread float4* const tint_symbol_6) {
-  main_1(x_7, x_9, x_12, x_15, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(0)]], constant buf2& x_9 [[buffer(1)]], constant buf3& x_12 [[buffer(2)]], constant buf0& x_15 [[buffer(3)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, x_12, x_15, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index db5b36e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,212 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-         %90 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zeroVec"
-               OpName %x_9 "x_9"
-               OpName %buf3 "buf3"
-               OpMemberName %buf3 0 "oneVec"
-               OpName %x_12 "x_12"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_15 "x_15"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "numbers"
-               OpName %obj "obj"
-               OpName %a "a"
-               OpName %x_49 "x_49"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_5 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 2
-               OpDecorate %buf3 Block
-               OpMemberDecorate %buf3 0 Offset 0
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 3
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_15 NonWritable
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_float_uint_5 = OpTypeArray %float %uint_5
-       %buf1 = OpTypeStruct %_arr_float_uint_5
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_9 = OpVariable %_ptr_Uniform_buf2 Uniform
-       %buf3 = OpTypeStruct %v2float
-%_ptr_Uniform_buf3 = OpTypePointer Uniform %buf3
-       %x_12 = OpVariable %_ptr_Uniform_buf3 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_15 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-          %S = OpTypeStruct %_arr_float_uint_3
-%_ptr_Function_S = OpTypePointer Function %S
-         %36 = OpConstantNull %S
-%_ptr_Function_float = OpTypePointer Function %float
-         %39 = OpConstantNull %float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %42 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %119 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-        %obj = OpVariable %_ptr_Function_S Function %36
-          %a = OpVariable %_ptr_Function_float Function %39
-       %x_49 = OpVariable %_ptr_Function_v2float Function %42
-          %b = OpVariable %_ptr_Function_float Function %39
-         %47 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_3
-         %48 = OpLoad %float %47
-         %50 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %51 = OpLoad %float %50
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_4
-         %54 = OpLoad %float %53
-         %55 = OpCompositeConstruct %_arr_float_uint_3 %48 %51 %54
-         %56 = OpCompositeConstruct %S %55
-               OpStore %obj %56
-         %57 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %58 = OpLoad %float %57
-         %60 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpConvertFToS %int %58
-         %63 = OpAccessChain %_ptr_Function_float %obj %uint_0 %62
-               OpStore %63 %61
-         %64 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %65 = OpLoad %float %64
-         %66 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %67 = OpLoad %float %66
-         %68 = OpFOrdGreaterThan %bool %65 %67
-               OpSelectionMerge %70 None
-               OpBranchConditional %68 %71 %72
-         %71 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_v2float %x_9 %uint_0
-         %75 = OpLoad %v2float %74
-               OpStore %x_49 %75
-               OpBranch %70
-         %72 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_v2float %x_12 %uint_0
-         %77 = OpLoad %v2float %76
-               OpStore %x_49 %77
-               OpBranch %70
-         %70 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_float %x_49 %uint_1
-         %80 = OpLoad %float %79
-               OpStore %a %80
-         %81 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %82 = OpLoad %float %81
-         %83 = OpLoad %float %a
-         %85 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Function_float %obj %uint_0 %86
-         %88 = OpLoad %float %87
-         %89 = OpExtInst %float %90 FMix %82 %83 %88
-               OpStore %b %89
-         %91 = OpLoad %float %b
-         %92 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_2
-         %93 = OpLoad %float %92
-         %95 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %96 = OpLoad %float %95
-         %97 = OpExtInst %float %90 Distance %91 %93
-         %98 = OpFOrdLessThan %bool %97 %96
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %101
-        %100 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_0
-        %103 = OpLoad %int %102
-        %104 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_1
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_1
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_0
-        %109 = OpLoad %int %108
-        %110 = OpConvertSToF %float %103
-        %111 = OpConvertSToF %float %105
-        %112 = OpConvertSToF %float %107
-        %113 = OpConvertSToF %float %109
-        %114 = OpCompositeConstruct %v4float %110 %111 %112 %113
-               OpStore %x_GLF_color %114
-               OpBranch %99
-        %101 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_int %x_15 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %116
-        %118 = OpCompositeConstruct %v4float %117 %117 %117 %117
-               OpStore %x_GLF_color %118
-               OpBranch %99
-         %99 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %119
-        %122 = OpLabel
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-        %127 = OpLabel
-        %128 = OpFunctionCall %main_out %main_inner
-        %129 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 57db954..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-struct S {
-  numbers : array<f32, 3>;
-};
-
-type Arr = [[stride(16)]] array<f32, 5>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  zeroVec : vec2<f32>;
-};
-
-[[block]]
-struct buf3 {
-  oneVec : vec2<f32>;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_9 : buf2;
-
-[[group(0), binding(3)]] var<uniform> x_12 : buf3;
-
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var obj : S;
-  var a : f32;
-  var x_49 : vec2<f32>;
-  var b : f32;
-  let x_51 : f32 = x_7.x_GLF_uniform_float_values[3];
-  let x_53 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_55 : f32 = x_7.x_GLF_uniform_float_values[4];
-  obj = S(array<f32, 3>(x_51, x_53, x_55));
-  let x_59 : f32 = x_9.zeroVec.x;
-  let x_62 : f32 = x_7.x_GLF_uniform_float_values[0];
-  obj.numbers[i32(x_59)] = x_62;
-  let x_65 : f32 = x_9.zeroVec.x;
-  let x_67 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_65 > x_67)) {
-    let x_73 : vec2<f32> = x_9.zeroVec;
-    x_49 = x_73;
-  } else {
-    let x_75 : vec2<f32> = x_12.oneVec;
-    x_49 = x_75;
-  }
-  let x_77 : f32 = x_49.y;
-  a = x_77;
-  let x_79 : f32 = x_7.x_GLF_uniform_float_values[0];
-  let x_80 : f32 = a;
-  let x_82 : i32 = x_15.x_GLF_uniform_int_values[0];
-  let x_84 : f32 = obj.numbers[x_82];
-  b = mix(x_79, x_80, x_84);
-  let x_86 : f32 = b;
-  let x_88 : f32 = x_7.x_GLF_uniform_float_values[2];
-  let x_91 : f32 = x_7.x_GLF_uniform_float_values[1];
-  if ((distance(x_86, x_88) < x_91)) {
-    let x_97 : i32 = x_15.x_GLF_uniform_int_values[0];
-    let x_100 : i32 = x_15.x_GLF_uniform_int_values[1];
-    let x_103 : i32 = x_15.x_GLF_uniform_int_values[1];
-    let x_106 : i32 = x_15.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_97), f32(x_100), f32(x_103), f32(x_106));
-  } else {
-    let x_110 : i32 = x_15.x_GLF_uniform_int_values[1];
-    let x_111 : f32 = f32(x_110);
-    x_GLF_color = vec4<f32>(x_111, x_111, x_111, x_111);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 16a9fa4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,57 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_8 : register(b2, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  const float x_37 = asfloat(x_6[1].x);
-  const float x_39 = asfloat(x_8[0].x);
-  const float x_42 = asfloat(x_6[2].x);
-  const float x_44 = asfloat(x_8[0].x);
-  const float x_49 = asfloat(x_8[0].y);
-  f = (((x_37 * x_39) + (x_42 * round(x_44))) + x_49);
-  const float x_51 = f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_53 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_51 == x_53)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_62 = asint(x_10[1].x);
-    const int x_65 = asint(x_10[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_68 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_59), float(x_62), float(x_65), float(x_68));
-  } else {
-    const int x_72 = asint(x_10[1].x);
-    const float x_73 = float(x_72);
-    x_GLF_color = float4(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.msl
deleted file mode 100644
index 84beec0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf2& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_39 = x_8.resolution.x;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_44 = x_8.resolution.x;
-  float const x_49 = x_8.resolution.y;
-  f = (((x_37 * x_39) + (x_42 * rint(x_44))) + x_49);
-  float const x_51 = f;
-  float const x_53 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_51 == x_53)) {
-    int const x_59 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_62 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_68 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_59), float(x_62), float(x_65), float(x_68));
-  } else {
-    int const x_72 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_73 = float(x_72);
-    *(tint_symbol_3) = float4(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf2& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf2& x_8 [[buffer(1)]], constant buf0& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ba2f7a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,148 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 90
-; Schema: 0
-               OpCapability Shader
-         %48 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "resolution"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_8 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %24 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %79 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %24
-         %27 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %30
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %35 = OpLoad %float %34
-         %36 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %37 = OpLoad %float %36
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %45 = OpLoad %float %44
-         %46 = OpFMul %float %35 %37
-         %47 = OpExtInst %float %48 RoundEven %42
-         %49 = OpFMul %float %40 %47
-         %50 = OpFAdd %float %46 %49
-         %51 = OpFAdd %float %50 %45
-               OpStore %f %51
-         %52 = OpLoad %float %f
-         %54 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpFOrdEqual %bool %52 %55
-               OpSelectionMerge %58 None
-               OpBranchConditional %56 %59 %60
-         %59 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %63
-         %71 = OpConvertSToF %float %65
-         %72 = OpConvertSToF %float %67
-         %73 = OpConvertSToF %float %69
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-               OpStore %x_GLF_color %74
-               OpBranch %58
-         %60 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %76
-         %78 = OpCompositeConstruct %v4float %77 %77 %77 %77
-               OpStore %x_GLF_color %78
-               OpBranch %58
-         %58 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %79
-         %82 = OpLabel
-         %83 = OpFunctionCall %void %main_1
-         %84 = OpLoad %v4float %x_GLF_color
-         %85 = OpCompositeConstruct %main_out %84
-               OpReturnValue %85
-               OpFunctionEnd
-       %main = OpFunction %void None %24
-         %87 = OpLabel
-         %88 = OpFunctionCall %main_out %main_inner
-         %89 = OpCompositeExtract %v4float %88 0
-               OpStore %x_GLF_color_1_1 %89
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9b46e47..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,61 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  resolution : vec2<f32>;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn main_1() {
-  var f : f32;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_39 : f32 = x_8.resolution.x;
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_44 : f32 = x_8.resolution.x;
-  let x_49 : f32 = x_8.resolution.y;
-  f = (((x_37 * x_39) + (x_42 * round(x_44))) + x_49);
-  let x_51 : f32 = f;
-  let x_53 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_51 == x_53)) {
-    let x_59 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_62 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_68 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_59), f32(x_62), f32(x_65), f32(x_68));
-  } else {
-    let x_72 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_73 : f32 = f32(x_72);
-    x_GLF_color = vec4<f32>(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 16a9fa4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,57 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_8 : register(b2, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  const float x_37 = asfloat(x_6[1].x);
-  const float x_39 = asfloat(x_8[0].x);
-  const float x_42 = asfloat(x_6[2].x);
-  const float x_44 = asfloat(x_8[0].x);
-  const float x_49 = asfloat(x_8[0].y);
-  f = (((x_37 * x_39) + (x_42 * round(x_44))) + x_49);
-  const float x_51 = f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_53 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_51 == x_53)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_62 = asint(x_10[1].x);
-    const int x_65 = asint(x_10[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_68 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_59), float(x_62), float(x_65), float(x_68));
-  } else {
-    const int x_72 = asint(x_10[1].x);
-    const float x_73 = float(x_72);
-    x_GLF_color = float4(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.msl
deleted file mode 100644
index 84beec0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf2& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  float const x_37 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float const x_39 = x_8.resolution.x;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  float const x_44 = x_8.resolution.x;
-  float const x_49 = x_8.resolution.y;
-  f = (((x_37 * x_39) + (x_42 * rint(x_44))) + x_49);
-  float const x_51 = f;
-  float const x_53 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_51 == x_53)) {
-    int const x_59 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_62 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_65 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_68 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_59), float(x_62), float(x_65), float(x_68));
-  } else {
-    int const x_72 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_73 = float(x_72);
-    *(tint_symbol_3) = float4(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf2& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf2& x_8 [[buffer(1)]], constant buf0& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ba2f7a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,148 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 90
-; Schema: 0
-               OpCapability Shader
-         %48 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "resolution"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_8 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %24 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %79 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %24
-         %27 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %30
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %35 = OpLoad %float %34
-         %36 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %37 = OpLoad %float %36
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %42 = OpLoad %float %41
-         %44 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %45 = OpLoad %float %44
-         %46 = OpFMul %float %35 %37
-         %47 = OpExtInst %float %48 RoundEven %42
-         %49 = OpFMul %float %40 %47
-         %50 = OpFAdd %float %46 %49
-         %51 = OpFAdd %float %50 %45
-               OpStore %f %51
-         %52 = OpLoad %float %f
-         %54 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %56 = OpFOrdEqual %bool %52 %55
-               OpSelectionMerge %58 None
-               OpBranchConditional %56 %59 %60
-         %59 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %63 = OpLoad %int %62
-         %64 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %63
-         %71 = OpConvertSToF %float %65
-         %72 = OpConvertSToF %float %67
-         %73 = OpConvertSToF %float %69
-         %74 = OpCompositeConstruct %v4float %70 %71 %72 %73
-               OpStore %x_GLF_color %74
-               OpBranch %58
-         %60 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %76 = OpLoad %int %75
-         %77 = OpConvertSToF %float %76
-         %78 = OpCompositeConstruct %v4float %77 %77 %77 %77
-               OpStore %x_GLF_color %78
-               OpBranch %58
-         %58 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %79
-         %82 = OpLabel
-         %83 = OpFunctionCall %void %main_1
-         %84 = OpLoad %v4float %x_GLF_color
-         %85 = OpCompositeConstruct %main_out %84
-               OpReturnValue %85
-               OpFunctionEnd
-       %main = OpFunction %void None %24
-         %87 = OpLabel
-         %88 = OpFunctionCall %main_out %main_inner
-         %89 = OpCompositeExtract %v4float %88 0
-               OpStore %x_GLF_color_1_1 %89
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9b46e47..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-sum-uniform-vector-components-round/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,61 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  resolution : vec2<f32>;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn main_1() {
-  var f : f32;
-  let x_37 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_39 : f32 = x_8.resolution.x;
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[2];
-  let x_44 : f32 = x_8.resolution.x;
-  let x_49 : f32 = x_8.resolution.y;
-  f = (((x_37 * x_39) + (x_42 * round(x_44))) + x_49);
-  let x_51 : f32 = f;
-  let x_53 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_51 == x_53)) {
-    let x_59 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_62 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_65 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_68 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_59), f32(x_62), f32(x_65), f32(x_68));
-  } else {
-    let x_72 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_73 : f32 = f32(x_72);
-    x_GLF_color = vec4<f32>(x_73, x_73, x_73, x_73);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3a56778..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,92 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  int j = 0;
-  int k = 0;
-  color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  i = x_37;
-  while (true) {
-    const int x_42 = i;
-    const int x_44 = asint(x_7[1].x);
-    if ((x_42 < x_44)) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 2: {
-        const int x_83 = i;
-        const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-        const float x_85 = asfloat(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-        set_float4(color, x_83, x_85);
-        break;
-      }
-      case 1: {
-        const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-        const int x_52 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-        j = x_52;
-        {
-          for(; (i > i); j = (j + 1)) {
-            const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-            const int x_62 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-            k = x_62;
-            {
-              for(; (k < i); k = (k + 1)) {
-                const int x_71 = k;
-                const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-                const float x_73 = asfloat(x_11[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-                set_float4(color, x_71, x_73);
-              }
-            }
-          }
-        }
-        const int x_79 = i;
-        const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-        const float x_81 = asfloat(x_11[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-        set_float4(color, x_79, x_81);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  x_GLF_color = color;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9ba7250..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_3) {
-  float4 color = 0.0f;
-  int i = 0;
-  int j = 0;
-  int k = 0;
-  color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  int const x_37 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  i = x_37;
-  while (true) {
-    int const x_42 = i;
-    int const x_44 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_42 < x_44)) {
-    } else {
-      break;
-    }
-    int const x_47 = i;
-    switch(x_47) {
-      case 2: {
-        int const x_83 = i;
-        float const x_85 = x_11.x_GLF_uniform_float_values.arr[0].el;
-        color[x_83] = x_85;
-        break;
-      }
-      case 1: {
-        int const x_52 = x_7.x_GLF_uniform_int_values.arr[0].el;
-        j = x_52;
-        while (true) {
-          int const x_57 = i;
-          int const x_58 = i;
-          if ((x_57 > x_58)) {
-          } else {
-            break;
-          }
-          int const x_62 = x_7.x_GLF_uniform_int_values.arr[0].el;
-          k = x_62;
-          while (true) {
-            int const x_67 = k;
-            int const x_68 = i;
-            if ((x_67 < x_68)) {
-            } else {
-              break;
-            }
-            int const x_71 = k;
-            float const x_73 = x_11.x_GLF_uniform_float_values.arr[0].el;
-            color[x_71] = x_73;
-            {
-              int const x_75 = k;
-              k = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_77 = j;
-            j = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-          }
-        }
-        int const x_79 = i;
-        float const x_81 = x_11.x_GLF_uniform_float_values.arr[0].el;
-        color[x_79] = x_81;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_87 = i;
-      i = as_type<int>((as_type<uint>(x_87) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_89 = color;
-  *(tint_symbol_3) = x_89;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_4) {
-  main_1(x_7, x_11, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b267fc8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,201 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 112
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %color "color"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %k "k"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-         %32 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-        %101 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-      %color = OpVariable %_ptr_Function_v4float Function %5
-          %i = OpVariable %_ptr_Function_int Function %28
-          %j = OpVariable %_ptr_Function_int Function %28
-          %k = OpVariable %_ptr_Function_int Function %28
-               OpStore %color %32
-         %36 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %37 = OpLoad %int %36
-               OpStore %i %37
-               OpBranch %38
-         %38 = OpLabel
-               OpLoopMerge %39 %40 None
-               OpBranch %41
-         %41 = OpLabel
-         %42 = OpLoad %int %i
-         %44 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpSLessThan %bool %42 %45
-               OpSelectionMerge %48 None
-               OpBranchConditional %46 %49 %50
-         %49 = OpLabel
-               OpBranch %48
-         %50 = OpLabel
-               OpBranch %39
-         %48 = OpLabel
-         %51 = OpLoad %int %i
-               OpSelectionMerge %52 None
-               OpSwitch %51 %53 2 %54 1 %55
-         %54 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %61 = OpAccessChain %_ptr_Function_float %color %56
-               OpStore %61 %59
-               OpBranch %52
-         %55 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %63 = OpLoad %int %62
-               OpStore %j %63
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %i
-         %69 = OpLoad %int %i
-         %70 = OpSGreaterThan %bool %68 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %65
-         %71 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %75 = OpLoad %int %74
-               OpStore %k %75
-               OpBranch %76
-         %76 = OpLabel
-               OpLoopMerge %77 %78 None
-               OpBranch %79
-         %79 = OpLabel
-         %80 = OpLoad %int %k
-         %81 = OpLoad %int %i
-         %82 = OpSLessThan %bool %80 %81
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %77
-         %83 = OpLabel
-         %86 = OpLoad %int %k
-         %87 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %88 = OpLoad %float %87
-         %89 = OpAccessChain %_ptr_Function_float %color %86
-               OpStore %89 %88
-               OpBranch %78
-         %78 = OpLabel
-         %90 = OpLoad %int %k
-         %91 = OpIAdd %int %90 %int_1
-               OpStore %k %91
-               OpBranch %76
-         %77 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-         %92 = OpLoad %int %j
-         %93 = OpIAdd %int %92 %int_1
-               OpStore %j %93
-               OpBranch %64
-         %65 = OpLabel
-         %94 = OpLoad %int %i
-         %95 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %96 = OpLoad %float %95
-         %97 = OpAccessChain %_ptr_Function_float %color %94
-               OpStore %97 %96
-               OpBranch %52
-         %53 = OpLabel
-               OpBranch %52
-         %52 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-         %98 = OpLoad %int %i
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %i %99
-               OpBranch %38
-         %39 = OpLabel
-        %100 = OpLoad %v4float %color
-               OpStore %x_GLF_color %100
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %101
-        %104 = OpLabel
-        %105 = OpFunctionCall %void %main_1
-        %106 = OpLoad %v4float %x_GLF_color
-        %107 = OpCompositeConstruct %main_out %106
-               OpReturnValue %107
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %109 = OpLabel
-        %110 = OpFunctionCall %main_out %main_inner
-        %111 = OpCompositeExtract %v4float %110 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 69896d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,104 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var color : vec4<f32>;
-  var i : i32;
-  var j : i32;
-  var k : i32;
-  color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  let x_37 : i32 = x_7.x_GLF_uniform_int_values[0];
-  i = x_37;
-  loop {
-    let x_42 : i32 = i;
-    let x_44 : i32 = x_7.x_GLF_uniform_int_values[1];
-    if ((x_42 < x_44)) {
-    } else {
-      break;
-    }
-    let x_47 : i32 = i;
-    switch(x_47) {
-      case 2: {
-        let x_83 : i32 = i;
-        let x_85 : f32 = x_11.x_GLF_uniform_float_values[0];
-        color[x_83] = x_85;
-      }
-      case 1: {
-        let x_52 : i32 = x_7.x_GLF_uniform_int_values[0];
-        j = x_52;
-        loop {
-          let x_57 : i32 = i;
-          let x_58 : i32 = i;
-          if ((x_57 > x_58)) {
-          } else {
-            break;
-          }
-          let x_62 : i32 = x_7.x_GLF_uniform_int_values[0];
-          k = x_62;
-          loop {
-            let x_67 : i32 = k;
-            let x_68 : i32 = i;
-            if ((x_67 < x_68)) {
-            } else {
-              break;
-            }
-            let x_71 : i32 = k;
-            let x_73 : f32 = x_11.x_GLF_uniform_float_values[0];
-            color[x_71] = x_73;
-
-            continuing {
-              let x_75 : i32 = k;
-              k = (x_75 + 1);
-            }
-          }
-
-          continuing {
-            let x_77 : i32 = j;
-            j = (x_77 + 1);
-          }
-        }
-        let x_79 : i32 = i;
-        let x_81 : f32 = x_11.x_GLF_uniform_float_values[0];
-        color[x_79] = x_81;
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_87 : i32 = i;
-      i = (x_87 + 1);
-    }
-  }
-  let x_89 : vec4<f32> = color;
-  x_GLF_color = x_89;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3a56778..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,92 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  int j = 0;
-  int k = 0;
-  color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_37 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  i = x_37;
-  while (true) {
-    const int x_42 = i;
-    const int x_44 = asint(x_7[1].x);
-    if ((x_42 < x_44)) {
-    } else {
-      break;
-    }
-    switch(i) {
-      case 2: {
-        const int x_83 = i;
-        const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-        const float x_85 = asfloat(x_11[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-        set_float4(color, x_83, x_85);
-        break;
-      }
-      case 1: {
-        const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-        const int x_52 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-        j = x_52;
-        {
-          for(; (i > i); j = (j + 1)) {
-            const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-            const int x_62 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-            k = x_62;
-            {
-              for(; (k < i); k = (k + 1)) {
-                const int x_71 = k;
-                const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-                const float x_73 = asfloat(x_11[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-                set_float4(color, x_71, x_73);
-              }
-            }
-          }
-        }
-        const int x_79 = i;
-        const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-        const float x_81 = asfloat(x_11[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-        set_float4(color, x_79, x_81);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  x_GLF_color = color;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9ba7250..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_3) {
-  float4 color = 0.0f;
-  int i = 0;
-  int j = 0;
-  int k = 0;
-  color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  int const x_37 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  i = x_37;
-  while (true) {
-    int const x_42 = i;
-    int const x_44 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_42 < x_44)) {
-    } else {
-      break;
-    }
-    int const x_47 = i;
-    switch(x_47) {
-      case 2: {
-        int const x_83 = i;
-        float const x_85 = x_11.x_GLF_uniform_float_values.arr[0].el;
-        color[x_83] = x_85;
-        break;
-      }
-      case 1: {
-        int const x_52 = x_7.x_GLF_uniform_int_values.arr[0].el;
-        j = x_52;
-        while (true) {
-          int const x_57 = i;
-          int const x_58 = i;
-          if ((x_57 > x_58)) {
-          } else {
-            break;
-          }
-          int const x_62 = x_7.x_GLF_uniform_int_values.arr[0].el;
-          k = x_62;
-          while (true) {
-            int const x_67 = k;
-            int const x_68 = i;
-            if ((x_67 < x_68)) {
-            } else {
-              break;
-            }
-            int const x_71 = k;
-            float const x_73 = x_11.x_GLF_uniform_float_values.arr[0].el;
-            color[x_71] = x_73;
-            {
-              int const x_75 = k;
-              k = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-            }
-          }
-          {
-            int const x_77 = j;
-            j = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-          }
-        }
-        int const x_79 = i;
-        float const x_81 = x_11.x_GLF_uniform_float_values.arr[0].el;
-        color[x_79] = x_81;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      int const x_87 = i;
-      i = as_type<int>((as_type<uint>(x_87) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_89 = color;
-  *(tint_symbol_3) = x_89;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, constant buf1& x_11, thread float4* const tint_symbol_4) {
-  main_1(x_7, x_11, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_11, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b267fc8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,201 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 112
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %color "color"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %k "k"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-         %32 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-        %101 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-      %color = OpVariable %_ptr_Function_v4float Function %5
-          %i = OpVariable %_ptr_Function_int Function %28
-          %j = OpVariable %_ptr_Function_int Function %28
-          %k = OpVariable %_ptr_Function_int Function %28
-               OpStore %color %32
-         %36 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %37 = OpLoad %int %36
-               OpStore %i %37
-               OpBranch %38
-         %38 = OpLabel
-               OpLoopMerge %39 %40 None
-               OpBranch %41
-         %41 = OpLabel
-         %42 = OpLoad %int %i
-         %44 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %45 = OpLoad %int %44
-         %46 = OpSLessThan %bool %42 %45
-               OpSelectionMerge %48 None
-               OpBranchConditional %46 %49 %50
-         %49 = OpLabel
-               OpBranch %48
-         %50 = OpLabel
-               OpBranch %39
-         %48 = OpLabel
-         %51 = OpLoad %int %i
-               OpSelectionMerge %52 None
-               OpSwitch %51 %53 2 %54 1 %55
-         %54 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %61 = OpAccessChain %_ptr_Function_float %color %56
-               OpStore %61 %59
-               OpBranch %52
-         %55 = OpLabel
-         %62 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %63 = OpLoad %int %62
-               OpStore %j %63
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %i
-         %69 = OpLoad %int %i
-         %70 = OpSGreaterThan %bool %68 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %65
-         %71 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %75 = OpLoad %int %74
-               OpStore %k %75
-               OpBranch %76
-         %76 = OpLabel
-               OpLoopMerge %77 %78 None
-               OpBranch %79
-         %79 = OpLabel
-         %80 = OpLoad %int %k
-         %81 = OpLoad %int %i
-         %82 = OpSLessThan %bool %80 %81
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %77
-         %83 = OpLabel
-         %86 = OpLoad %int %k
-         %87 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %88 = OpLoad %float %87
-         %89 = OpAccessChain %_ptr_Function_float %color %86
-               OpStore %89 %88
-               OpBranch %78
-         %78 = OpLabel
-         %90 = OpLoad %int %k
-         %91 = OpIAdd %int %90 %int_1
-               OpStore %k %91
-               OpBranch %76
-         %77 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-         %92 = OpLoad %int %j
-         %93 = OpIAdd %int %92 %int_1
-               OpStore %j %93
-               OpBranch %64
-         %65 = OpLabel
-         %94 = OpLoad %int %i
-         %95 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %int_0
-         %96 = OpLoad %float %95
-         %97 = OpAccessChain %_ptr_Function_float %color %94
-               OpStore %97 %96
-               OpBranch %52
-         %53 = OpLabel
-               OpBranch %52
-         %52 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-         %98 = OpLoad %int %i
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %i %99
-               OpBranch %38
-         %39 = OpLabel
-        %100 = OpLoad %v4float %color
-               OpStore %x_GLF_color %100
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %101
-        %104 = OpLabel
-        %105 = OpFunctionCall %void %main_1
-        %106 = OpLoad %v4float %x_GLF_color
-        %107 = OpCompositeConstruct %main_out %106
-               OpReturnValue %107
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %109 = OpLabel
-        %110 = OpFunctionCall %main_out %main_inner
-        %111 = OpCompositeExtract %v4float %110 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 69896d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-for-for-for/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,104 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var color : vec4<f32>;
-  var i : i32;
-  var j : i32;
-  var k : i32;
-  color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  let x_37 : i32 = x_7.x_GLF_uniform_int_values[0];
-  i = x_37;
-  loop {
-    let x_42 : i32 = i;
-    let x_44 : i32 = x_7.x_GLF_uniform_int_values[1];
-    if ((x_42 < x_44)) {
-    } else {
-      break;
-    }
-    let x_47 : i32 = i;
-    switch(x_47) {
-      case 2: {
-        let x_83 : i32 = i;
-        let x_85 : f32 = x_11.x_GLF_uniform_float_values[0];
-        color[x_83] = x_85;
-      }
-      case 1: {
-        let x_52 : i32 = x_7.x_GLF_uniform_int_values[0];
-        j = x_52;
-        loop {
-          let x_57 : i32 = i;
-          let x_58 : i32 = i;
-          if ((x_57 > x_58)) {
-          } else {
-            break;
-          }
-          let x_62 : i32 = x_7.x_GLF_uniform_int_values[0];
-          k = x_62;
-          loop {
-            let x_67 : i32 = k;
-            let x_68 : i32 = i;
-            if ((x_67 < x_68)) {
-            } else {
-              break;
-            }
-            let x_71 : i32 = k;
-            let x_73 : f32 = x_11.x_GLF_uniform_float_values[0];
-            color[x_71] = x_73;
-
-            continuing {
-              let x_75 : i32 = k;
-              k = (x_75 + 1);
-            }
-          }
-
-          continuing {
-            let x_77 : i32 = j;
-            j = (x_77 + 1);
-          }
-        }
-        let x_79 : i32 = i;
-        let x_81 : f32 = x_11.x_GLF_uniform_float_values[0];
-        color[x_79] = x_81;
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      let x_87 : i32 = i;
-      i = (x_87 + 1);
-    }
-  }
-  let x_89 : vec4<f32> = color;
-  x_GLF_color = x_89;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index a753a22..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float zero;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_5, constant buf2& x_7, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  int i = 0;
-  float const x_38 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  *(tint_symbol_3) = float4(x_38, x_38, x_38, x_38);
-  float const x_41 = x_7.zero;
-  float const x_43 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_41 > x_43)) {
-    while (true) {
-      float const x_53 = x_5.x_GLF_uniform_float_values.arr[1].el;
-      *(tint_symbol_3) = float4(x_53, x_53, x_53, x_53);
-      {
-        if (true) {
-        } else {
-          break;
-        }
-      }
-    }
-  } else {
-    while (true) {
-      while (true) {
-        if (true) {
-        } else {
-          break;
-        }
-        int const x_13 = x_10.x_GLF_uniform_int_values.arr[1].el;
-        i = x_13;
-        while (true) {
-          int const x_14 = i;
-          int const x_15 = x_10.x_GLF_uniform_int_values.arr[0].el;
-          if ((x_14 < x_15)) {
-          } else {
-            break;
-          }
-          float const x_73 = x_5.x_GLF_uniform_float_values.arr[1].el;
-          float const x_75 = x_5.x_GLF_uniform_float_values.arr[0].el;
-          float const x_77 = x_5.x_GLF_uniform_float_values.arr[0].el;
-          float const x_79 = x_5.x_GLF_uniform_float_values.arr[1].el;
-          *(tint_symbol_3) = float4(x_73, x_75, x_77, x_79);
-          {
-            int const x_16 = i;
-            i = as_type<int>((as_type<uint>(x_16) + as_type<uint>(1)));
-          }
-        }
-        break;
-      }
-      {
-        float const x_82 = x_7.zero;
-        float const x_84 = x_5.x_GLF_uniform_float_values.arr[0].el;
-        if ((x_82 > x_84)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_5, constant buf2& x_7, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_5 [[buffer(0)]], constant buf2& x_7 [[buffer(1)]], constant buf0& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6834d27..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,193 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 105
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_5 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_7 = OpVariable %_ptr_Uniform_buf2 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %94 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %28
-         %32 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %33 = OpLoad %float %32
-         %34 = OpCompositeConstruct %v4float %33 %33 %33 %33
-               OpStore %x_GLF_color %34
-         %35 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %36 = OpLoad %float %35
-         %37 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThan %bool %36 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %50 = OpLoad %float %49
-         %51 = OpCompositeConstruct %v4float %50 %50 %50 %50
-               OpStore %x_GLF_color %51
-               OpBranch %46
-         %46 = OpLabel
-               OpBranchConditional %true %44 %45
-         %45 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-               OpSelectionMerge %61 None
-               OpBranchConditional %true %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %58
-         %61 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %66 = OpLoad %int %65
-               OpStore %i %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %72 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %68
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %81 = OpLoad %float %80
-         %82 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %83 = OpLoad %float %82
-         %84 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %85 = OpLoad %float %84
-         %86 = OpCompositeConstruct %v4float %79 %81 %83 %85
-               OpStore %x_GLF_color %86
-               OpBranch %69
-         %69 = OpLabel
-         %87 = OpLoad %int %i
-         %88 = OpIAdd %int %87 %int_1
-               OpStore %i %88
-               OpBranch %67
-         %68 = OpLabel
-               OpBranch %58
-         %59 = OpLabel
-               OpBranch %57
-         %58 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %92 = OpLoad %float %91
-         %93 = OpFOrdGreaterThan %bool %90 %92
-               OpBranchConditional %93 %53 %54
-         %54 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %94
-         %97 = OpLabel
-         %98 = OpFunctionCall %void %main_1
-         %99 = OpLoad %v4float %x_GLF_color
-        %100 = OpCompositeConstruct %main_out %99
-               OpReturnValue %100
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %102 = OpLabel
-        %103 = OpFunctionCall %main_out %main_inner
-        %104 = OpCompositeExtract %v4float %103 0
-               OpStore %x_GLF_color_1_1 %104
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4b28ce8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,98 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  zero : f32;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_7 : buf2;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn main_1() {
-  var i : i32;
-  let x_38 : f32 = x_5.x_GLF_uniform_float_values[0];
-  x_GLF_color = vec4<f32>(x_38, x_38, x_38, x_38);
-  let x_41 : f32 = x_7.zero;
-  let x_43 : f32 = x_5.x_GLF_uniform_float_values[0];
-  if ((x_41 > x_43)) {
-    loop {
-      let x_53 : f32 = x_5.x_GLF_uniform_float_values[1];
-      x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
-
-      continuing {
-        if (true) {
-        } else {
-          break;
-        }
-      }
-    }
-  } else {
-    loop {
-      loop {
-        if (true) {
-        } else {
-          break;
-        }
-        let x_13 : i32 = x_10.x_GLF_uniform_int_values[1];
-        i = x_13;
-        loop {
-          let x_14 : i32 = i;
-          let x_15 : i32 = x_10.x_GLF_uniform_int_values[0];
-          if ((x_14 < x_15)) {
-          } else {
-            break;
-          }
-          let x_73 : f32 = x_5.x_GLF_uniform_float_values[1];
-          let x_75 : f32 = x_5.x_GLF_uniform_float_values[0];
-          let x_77 : f32 = x_5.x_GLF_uniform_float_values[0];
-          let x_79 : f32 = x_5.x_GLF_uniform_float_values[1];
-          x_GLF_color = vec4<f32>(x_73, x_75, x_77, x_79);
-
-          continuing {
-            let x_16 : i32 = i;
-            i = (x_16 + 1);
-          }
-        }
-        break;
-      }
-
-      continuing {
-        let x_82 : f32 = x_7.zero;
-        let x_84 : f32 = x_5.x_GLF_uniform_float_values[0];
-        if ((x_82 > x_84)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index a753a22..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf2 {
-  /* 0x0000 */ float zero;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_5, constant buf2& x_7, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  int i = 0;
-  float const x_38 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  *(tint_symbol_3) = float4(x_38, x_38, x_38, x_38);
-  float const x_41 = x_7.zero;
-  float const x_43 = x_5.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_41 > x_43)) {
-    while (true) {
-      float const x_53 = x_5.x_GLF_uniform_float_values.arr[1].el;
-      *(tint_symbol_3) = float4(x_53, x_53, x_53, x_53);
-      {
-        if (true) {
-        } else {
-          break;
-        }
-      }
-    }
-  } else {
-    while (true) {
-      while (true) {
-        if (true) {
-        } else {
-          break;
-        }
-        int const x_13 = x_10.x_GLF_uniform_int_values.arr[1].el;
-        i = x_13;
-        while (true) {
-          int const x_14 = i;
-          int const x_15 = x_10.x_GLF_uniform_int_values.arr[0].el;
-          if ((x_14 < x_15)) {
-          } else {
-            break;
-          }
-          float const x_73 = x_5.x_GLF_uniform_float_values.arr[1].el;
-          float const x_75 = x_5.x_GLF_uniform_float_values.arr[0].el;
-          float const x_77 = x_5.x_GLF_uniform_float_values.arr[0].el;
-          float const x_79 = x_5.x_GLF_uniform_float_values.arr[1].el;
-          *(tint_symbol_3) = float4(x_73, x_75, x_77, x_79);
-          {
-            int const x_16 = i;
-            i = as_type<int>((as_type<uint>(x_16) + as_type<uint>(1)));
-          }
-        }
-        break;
-      }
-      {
-        float const x_82 = x_7.zero;
-        float const x_84 = x_5.x_GLF_uniform_float_values.arr[0].el;
-        if ((x_82 > x_84)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_5, constant buf2& x_7, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_5, x_7, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_5 [[buffer(0)]], constant buf2& x_7 [[buffer(1)]], constant buf0& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, x_7, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6834d27..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,193 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 105
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_5 "x_5"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_5 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf2 = OpTypeStruct %float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_7 = OpVariable %_ptr_Uniform_buf2 Uniform
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %94 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %28
-         %32 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %33 = OpLoad %float %32
-         %34 = OpCompositeConstruct %v4float %33 %33 %33 %33
-               OpStore %x_GLF_color %34
-         %35 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %36 = OpLoad %float %35
-         %37 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThan %bool %36 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %50 = OpLoad %float %49
-         %51 = OpCompositeConstruct %v4float %50 %50 %50 %50
-               OpStore %x_GLF_color %51
-               OpBranch %46
-         %46 = OpLabel
-               OpBranchConditional %true %44 %45
-         %45 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-               OpSelectionMerge %61 None
-               OpBranchConditional %true %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %58
-         %61 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %66 = OpLoad %int %65
-               OpStore %i %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %72 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %68
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %81 = OpLoad %float %80
-         %82 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %83 = OpLoad %float %82
-         %84 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_1
-         %85 = OpLoad %float %84
-         %86 = OpCompositeConstruct %v4float %79 %81 %83 %85
-               OpStore %x_GLF_color %86
-               OpBranch %69
-         %69 = OpLabel
-         %87 = OpLoad %int %i
-         %88 = OpIAdd %int %87 %int_1
-               OpStore %i %88
-               OpBranch %67
-         %68 = OpLabel
-               OpBranch %58
-         %59 = OpLabel
-               OpBranch %57
-         %58 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %90 = OpLoad %float %89
-         %91 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %int_0
-         %92 = OpLoad %float %91
-         %93 = OpFOrdGreaterThan %bool %90 %92
-               OpBranchConditional %93 %53 %54
-         %54 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %94
-         %97 = OpLabel
-         %98 = OpFunctionCall %void %main_1
-         %99 = OpLoad %v4float %x_GLF_color
-        %100 = OpCompositeConstruct %main_out %99
-               OpReturnValue %100
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %102 = OpLabel
-        %103 = OpFunctionCall %main_out %main_inner
-        %104 = OpCompositeExtract %v4float %103 0
-               OpStore %x_GLF_color_1_1 %104
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 4b28ce8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,98 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf2 {
-  zero : f32;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_5 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_7 : buf2;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn main_1() {
-  var i : i32;
-  let x_38 : f32 = x_5.x_GLF_uniform_float_values[0];
-  x_GLF_color = vec4<f32>(x_38, x_38, x_38, x_38);
-  let x_41 : f32 = x_7.zero;
-  let x_43 : f32 = x_5.x_GLF_uniform_float_values[0];
-  if ((x_41 > x_43)) {
-    loop {
-      let x_53 : f32 = x_5.x_GLF_uniform_float_values[1];
-      x_GLF_color = vec4<f32>(x_53, x_53, x_53, x_53);
-
-      continuing {
-        if (true) {
-        } else {
-          break;
-        }
-      }
-    }
-  } else {
-    loop {
-      loop {
-        if (true) {
-        } else {
-          break;
-        }
-        let x_13 : i32 = x_10.x_GLF_uniform_int_values[1];
-        i = x_13;
-        loop {
-          let x_14 : i32 = i;
-          let x_15 : i32 = x_10.x_GLF_uniform_int_values[0];
-          if ((x_14 < x_15)) {
-          } else {
-            break;
-          }
-          let x_73 : f32 = x_5.x_GLF_uniform_float_values[1];
-          let x_75 : f32 = x_5.x_GLF_uniform_float_values[0];
-          let x_77 : f32 = x_5.x_GLF_uniform_float_values[0];
-          let x_79 : f32 = x_5.x_GLF_uniform_float_values[1];
-          x_GLF_color = vec4<f32>(x_73, x_75, x_77, x_79);
-
-          continuing {
-            let x_16 : i32 = i;
-            i = (x_16 + 1);
-          }
-        }
-        break;
-      }
-
-      continuing {
-        let x_82 : f32 = x_7.zero;
-        let x_84 : f32 = x_5.x_GLF_uniform_float_values[0];
-        if ((x_82 > x_84)) {
-        } else {
-          break;
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7854e84..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  const float x_33 = gl_FragCoord.x;
-  a = ddx(cos(x_33));
-  const float x_37 = asfloat(x_8[0].x);
-  b = lerp(2.0f, x_37, a);
-  if (((b >= 1.899999976f) & (b <= 2.099999905f))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.msl
deleted file mode 100644
index 59beca6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float a = 0.0f;
-  float b = 0.0f;
-  float const x_33 = (*(tint_symbol_3)).x;
-  a = dfdx(cos(x_33));
-  float const x_37 = x_8.two;
-  float const x_38 = a;
-  b = mix(2.0f, x_37, x_38);
-  float const x_40 = b;
-  float const x_42 = b;
-  if (((x_40 >= 1.899999976f) & (x_42 <= 2.099999905f))) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 00edf7a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-         %29 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-%float_1_89999998 = OpConstant %float 1.89999998
-       %bool = OpTypeBool
-%float_2_0999999 = OpConstant %float 2.0999999
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %49 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %50 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %51 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-          %b = OpVariable %_ptr_Function_float Function %20
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpExtInst %float %29 Cos %26
-         %27 = OpDPdx %float %28
-               OpStore %a %27
-         %31 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-         %32 = OpLoad %float %31
-         %33 = OpLoad %float %a
-         %34 = OpExtInst %float %29 FMix %float_2 %32 %33
-               OpStore %b %34
-         %36 = OpLoad %float %b
-         %37 = OpLoad %float %b
-         %39 = OpFOrdGreaterThanEqual %bool %36 %float_1_89999998
-         %42 = OpFOrdLessThanEqual %bool %37 %float_2_0999999
-         %43 = OpLogicalAnd %bool %39 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-               OpStore %x_GLF_color %49
-               OpBranch %44
-         %46 = OpLabel
-               OpStore %x_GLF_color %50
-               OpBranch %44
-         %44 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %51
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %55 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %56 = OpFunctionCall %void %main_1
-         %57 = OpLoad %v4float %x_GLF_color
-         %58 = OpCompositeConstruct %main_out %57
-               OpReturnValue %58
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %60 = OpLabel
-         %62 = OpLoad %v4float %gl_FragCoord_param_1
-         %61 = OpFunctionCall %main_out %main_inner %62
-         %63 = OpCompositeExtract %v4float %61 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2973115..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  two : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  let x_33 : f32 = gl_FragCoord.x;
-  a = dpdx(cos(x_33));
-  let x_37 : f32 = x_8.two;
-  let x_38 : f32 = a;
-  b = mix(2.0, x_37, x_38);
-  let x_40 : f32 = b;
-  let x_42 : f32 = b;
-  if (((x_40 >= 1.899999976) & (x_42 <= 2.099999905))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 65d213d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float a = 0.0f;
-  float b = 0.0f;
-  const float x_33 = gl_FragCoord.x;
-  a = ddx(cos(x_33));
-  const float x_37 = asfloat(x_8[0].x);
-  b = lerp(2.0f, x_37, a);
-  bool tint_tmp = (b >= 1.899999976f);
-  if (tint_tmp) {
-    tint_tmp = (b <= 2.099999905f);
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9498210..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float a = 0.0f;
-  float b = 0.0f;
-  float const x_33 = (*(tint_symbol_3)).x;
-  a = dfdx(cos(x_33));
-  float const x_37 = x_8.two;
-  float const x_38 = a;
-  b = mix(2.0f, x_37, x_38);
-  float const x_40 = b;
-  float const x_42 = b;
-  if (((x_40 >= 1.899999976f) && (x_42 <= 2.099999905f))) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d4fe2c7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,116 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-         %29 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-%float_1_89999998 = OpConstant %float 1.89999998
-       %bool = OpTypeBool
-%float_2_0999999 = OpConstant %float 2.0999999
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %51 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %52 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %20
-          %b = OpVariable %_ptr_Function_float Function %20
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpExtInst %float %29 Cos %26
-         %27 = OpDPdx %float %28
-               OpStore %a %27
-         %31 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-         %32 = OpLoad %float %31
-         %33 = OpLoad %float %a
-         %34 = OpExtInst %float %29 FMix %float_2 %32 %33
-               OpStore %b %34
-         %36 = OpLoad %float %b
-         %37 = OpLoad %float %b
-         %39 = OpFOrdGreaterThanEqual %bool %36 %float_1_89999998
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %41
-         %42 = OpLabel
-         %44 = OpFOrdLessThanEqual %bool %37 %float_2_0999999
-               OpBranch %41
-         %41 = OpLabel
-         %45 = OpPhi %bool %39 %17 %44 %42
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %46
-         %48 = OpLabel
-               OpStore %x_GLF_color %52
-               OpBranch %46
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %57 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %62 = OpLabel
-         %64 = OpLoad %v4float %gl_FragCoord_param_1
-         %63 = OpFunctionCall %main_out %main_inner %64
-         %65 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7165a35..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  two : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : f32;
-  var b : f32;
-  let x_33 : f32 = gl_FragCoord.x;
-  a = dpdx(cos(x_33));
-  let x_37 : f32 = x_8.two;
-  let x_38 : f32 = a;
-  b = mix(2.0, x_37, x_38);
-  let x_40 : f32 = b;
-  let x_42 : f32 = b;
-  if (((x_40 >= 1.899999976) && (x_42 <= 2.099999905))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 01e8447..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,159 +0,0 @@
-struct S {
-  int data;
-};
-
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_struct_S_i11_(inout S s) {
-  while (true) {
-    const float x_174 = asfloat(x_8[0].x);
-    const float x_176 = asfloat(x_8[0].y);
-    if ((x_174 > x_176)) {
-    } else {
-      break;
-    }
-    return;
-  }
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_180 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-  s.data = x_180;
-  return;
-}
-
-void main_1() {
-  int i = 0;
-  S arr[3] = (S[3])0;
-  int i_1 = 0;
-  S param = (S)0;
-  int j = 0;
-  bool x_136 = false;
-  bool x_146 = false;
-  bool x_137_phi = false;
-  bool x_147_phi = false;
-  const int x_46 = asint(x_10[2].x);
-  i = x_46;
-  while (true) {
-    const int x_51 = i;
-    const int x_53 = asint(x_10[1].x);
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    arr[i].data = i;
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_62 = asint(x_10[2].x);
-  i_1 = x_62;
-  while (true) {
-    const int x_67 = i_1;
-    const int x_69 = asint(x_10[1].x);
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    const float x_73 = asfloat(x_8[0].x);
-    const float x_75 = asfloat(x_8[0].y);
-    if ((x_73 > x_75)) {
-      break;
-    }
-    const int x_81 = arr[i_1].data;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_83 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_81 == x_83)) {
-      const int x_88 = i_1;
-      const int x_91 = asint(x_10[3].x);
-      arr[clamp(x_88, 0, 3)].data = x_91;
-      const S x_94 = arr[2];
-      param = x_94;
-      func_struct_S_i11_(param);
-      arr[2] = param;
-    } else {
-      const int x_99 = asint(x_10[2].x);
-      j = x_99;
-      while (true) {
-        const int x_104 = j;
-        const int x_106 = asint(x_10[1].x);
-        if ((x_104 < x_106)) {
-        } else {
-          break;
-        }
-        const int x_111 = arr[j].data;
-        const int x_113 = asint(x_10[4].x);
-        if ((x_111 > x_113)) {
-          discard;
-        }
-        {
-          j = (j + 1);
-        }
-      }
-    }
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const int x_122 = asint(x_10[2].x);
-  const int x_124 = arr[x_122].data;
-  const int x_126 = asint(x_10[2].x);
-  const bool x_127 = (x_124 == x_126);
-  x_137_phi = x_127;
-  if (x_127) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_131 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_133 = arr[x_131].data;
-    const int x_135 = asint(x_10[3].x);
-    x_136 = (x_133 == x_135);
-    x_137_phi = x_136;
-  }
-  const bool x_137 = x_137_phi;
-  x_147_phi = x_137;
-  if (x_137) {
-    const int x_141 = asint(x_10[3].x);
-    const int x_143 = arr[x_141].data;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_145 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_146 = (x_143 == x_145);
-    x_147_phi = x_146;
-  }
-  if (x_147_phi) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_152 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const int x_155 = asint(x_10[2].x);
-    const int x_158 = asint(x_10[2].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_161 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_152), float(x_155), float(x_158), float(x_161));
-  } else {
-    const int x_165 = asint(x_10[2].x);
-    const float x_166 = float(x_165);
-    x_GLF_color = float4(x_166, x_166, x_166, x_166);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2a95bc7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,174 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int data;
-};
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  S arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_struct_S_i11_(constant buf1& x_8, constant buf0& x_10, thread S* const s) {
-  while (true) {
-    float const x_174 = x_8.v1.x;
-    float const x_176 = x_8.v1.y;
-    if ((x_174 > x_176)) {
-    } else {
-      break;
-    }
-    return;
-  }
-  int const x_180 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  (*(s)).data = x_180;
-  return;
-}
-
-void main_1(constant buf0& x_10, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 arr = {};
-  int i_1 = 0;
-  S param = {};
-  int j = 0;
-  bool x_136 = false;
-  bool x_146 = false;
-  bool x_137_phi = false;
-  bool x_147_phi = false;
-  int const x_46 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  i = x_46;
-  while (true) {
-    int const x_51 = i;
-    int const x_53 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    int const x_56 = i;
-    int const x_57 = i;
-    arr.arr[x_56].data = x_57;
-    {
-      int const x_59 = i;
-      i = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-    }
-  }
-  int const x_62 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  i_1 = x_62;
-  while (true) {
-    int const x_67 = i_1;
-    int const x_69 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    float const x_73 = x_8.v1.x;
-    float const x_75 = x_8.v1.y;
-    if ((x_73 > x_75)) {
-      break;
-    }
-    int const x_79 = i_1;
-    int const x_81 = arr.arr[x_79].data;
-    int const x_83 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_81 == x_83)) {
-      int const x_88 = i_1;
-      int const x_91 = x_10.x_GLF_uniform_int_values.arr[3].el;
-      arr.arr[clamp(x_88, 0, 3)].data = x_91;
-      S const x_94 = arr.arr[2];
-      param = x_94;
-      func_struct_S_i11_(x_8, x_10, &(param));
-      S const x_96 = param;
-      arr.arr[2] = x_96;
-    } else {
-      int const x_99 = x_10.x_GLF_uniform_int_values.arr[2].el;
-      j = x_99;
-      while (true) {
-        int const x_104 = j;
-        int const x_106 = x_10.x_GLF_uniform_int_values.arr[1].el;
-        if ((x_104 < x_106)) {
-        } else {
-          break;
-        }
-        int const x_109 = j;
-        int const x_111 = arr.arr[x_109].data;
-        int const x_113 = x_10.x_GLF_uniform_int_values.arr[4].el;
-        if ((x_111 > x_113)) {
-          discard_fragment();
-        }
-        {
-          int const x_117 = j;
-          j = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_119 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-    }
-  }
-  int const x_122 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  int const x_124 = arr.arr[x_122].data;
-  int const x_126 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  bool const x_127 = (x_124 == x_126);
-  x_137_phi = x_127;
-  if (x_127) {
-    int const x_131 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_133 = arr.arr[x_131].data;
-    int const x_135 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    x_136 = (x_133 == x_135);
-    x_137_phi = x_136;
-  }
-  bool const x_137 = x_137_phi;
-  x_147_phi = x_137;
-  if (x_137) {
-    int const x_141 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_143 = arr.arr[x_141].data;
-    int const x_145 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    x_146 = (x_143 == x_145);
-    x_147_phi = x_146;
-  }
-  bool const x_147 = x_147_phi;
-  if (x_147) {
-    int const x_152 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_155 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_158 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_161 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_152), float(x_155), float(x_158), float(x_161));
-  } else {
-    int const x_165 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_166 = float(x_165);
-    *(tint_symbol_3) = float4(x_166, x_166, x_166, x_166);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_10, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_10 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 80137c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,348 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 217
-; Schema: 0
-               OpCapability Shader
-        %123 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "data"
-               OpName %func_struct_S_i11_ "func_struct_S_i11_"
-               OpName %s "s"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %arr "arr"
-               OpName %i_1 "i_1"
-               OpName %param "param"
-               OpName %j "j"
-               OpName %x_136 "x_136"
-               OpName %x_146 "x_146"
-               OpName %x_137_phi "x_137_phi"
-               OpName %x_147_phi "x_147_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_S_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %S = OpTypeStruct %int
-%_ptr_Function_S = OpTypePointer Function %S
-         %19 = OpTypeFunction %void %_ptr_Function_S
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %49 = OpTypeFunction %void
-         %53 = OpConstantNull %int
-     %uint_3 = OpConstant %uint 3
-%_arr_S_uint_3 = OpTypeArray %S %uint_3
-%_ptr_Function__arr_S_uint_3 = OpTypePointer Function %_arr_S_uint_3
-         %58 = OpConstantNull %_arr_S_uint_3
-         %61 = OpConstantNull %S
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %65 = OpConstantNull %bool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %206 = OpTypeFunction %main_out
-%func_struct_S_i11_ = OpFunction %void None %19
-          %s = OpFunctionParameter %_ptr_Function_S
-         %25 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %32 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFOrdGreaterThan %bool %33 %36
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %27
-         %39 = OpLabel
-               OpReturn
-         %28 = OpLabel
-               OpBranch %26
-         %27 = OpLabel
-         %44 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %48 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %48 %45
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %49
-         %51 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %53
-        %arr = OpVariable %_ptr_Function__arr_S_uint_3 Function %58
-        %i_1 = OpVariable %_ptr_Function_int Function %53
-      %param = OpVariable %_ptr_Function_S Function %61
-          %j = OpVariable %_ptr_Function_int Function %53
-      %x_136 = OpVariable %_ptr_Function_bool Function %65
-      %x_146 = OpVariable %_ptr_Function_bool Function %65
-  %x_137_phi = OpVariable %_ptr_Function_bool Function %65
-  %x_147_phi = OpVariable %_ptr_Function_bool Function %65
-         %70 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %71 = OpLoad %int %70
-               OpStore %i %71
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %int %i
-         %78 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %79 = OpLoad %int %78
-         %80 = OpSLessThan %bool %76 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %73
-         %81 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpLoad %int %i
-         %86 = OpAccessChain %_ptr_Function_int %arr %84 %uint_0
-               OpStore %86 %85
-               OpBranch %74
-         %74 = OpLabel
-         %87 = OpLoad %int %i
-         %88 = OpIAdd %int %87 %int_1
-               OpStore %i %88
-               OpBranch %72
-         %73 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %90 = OpLoad %int %89
-               OpStore %i_1 %90
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %i_1
-         %96 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpSLessThan %bool %95 %97
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %92
-         %99 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %105 = OpLoad %float %104
-        %106 = OpFOrdGreaterThan %bool %103 %105
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-               OpBranch %92
-        %107 = OpLabel
-        %109 = OpLoad %int %i_1
-        %110 = OpAccessChain %_ptr_Function_int %arr %109 %uint_0
-        %111 = OpLoad %int %110
-        %112 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpIEqual %bool %111 %113
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpLoad %int %i_1
-        %120 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %121 = OpLoad %int %120
-        %122 = OpExtInst %int %123 SClamp %118 %int_0 %int_3
-        %124 = OpAccessChain %_ptr_Function_int %arr %122 %uint_0
-               OpStore %124 %121
-        %125 = OpAccessChain %_ptr_Function_S %arr %int_2
-        %126 = OpLoad %S %125
-               OpStore %param %126
-        %127 = OpFunctionCall %void %func_struct_S_i11_ %param
-        %129 = OpLoad %S %param
-        %130 = OpAccessChain %_ptr_Function_S %arr %int_2
-               OpStore %130 %129
-               OpBranch %115
-        %117 = OpLabel
-        %131 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %132 = OpLoad %int %131
-               OpStore %j %132
-               OpBranch %133
-        %133 = OpLabel
-               OpLoopMerge %134 %135 None
-               OpBranch %136
-        %136 = OpLabel
-        %137 = OpLoad %int %j
-        %138 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %139 = OpLoad %int %138
-        %140 = OpSLessThan %bool %137 %139
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %143
-        %142 = OpLabel
-               OpBranch %141
-        %143 = OpLabel
-               OpBranch %134
-        %141 = OpLabel
-        %144 = OpLoad %int %j
-        %145 = OpAccessChain %_ptr_Function_int %arr %144 %uint_0
-        %146 = OpLoad %int %145
-        %148 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_4
-        %149 = OpLoad %int %148
-        %150 = OpSGreaterThan %bool %146 %149
-               OpSelectionMerge %151 None
-               OpBranchConditional %150 %152 %151
-        %152 = OpLabel
-               OpKill
-        %151 = OpLabel
-               OpBranch %135
-        %135 = OpLabel
-        %153 = OpLoad %int %j
-        %154 = OpIAdd %int %153 %int_1
-               OpStore %j %154
-               OpBranch %133
-        %134 = OpLabel
-               OpBranch %115
-        %115 = OpLabel
-               OpBranch %93
-         %93 = OpLabel
-        %155 = OpLoad %int %i_1
-        %156 = OpIAdd %int %155 %int_1
-               OpStore %i_1 %156
-               OpBranch %91
-         %92 = OpLabel
-        %157 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %158 = OpLoad %int %157
-        %159 = OpAccessChain %_ptr_Function_int %arr %158 %uint_0
-        %160 = OpLoad %int %159
-        %161 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %162 = OpLoad %int %161
-        %163 = OpIEqual %bool %160 %162
-               OpStore %x_137_phi %163
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %164
-        %165 = OpLabel
-        %166 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %167 = OpLoad %int %166
-        %168 = OpAccessChain %_ptr_Function_int %arr %167 %uint_0
-        %169 = OpLoad %int %168
-        %170 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %171 = OpLoad %int %170
-        %172 = OpIEqual %bool %169 %171
-               OpStore %x_136 %172
-        %173 = OpLoad %bool %x_136
-               OpStore %x_137_phi %173
-               OpBranch %164
-        %164 = OpLabel
-        %174 = OpLoad %bool %x_137_phi
-               OpStore %x_147_phi %174
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %175
-        %176 = OpLabel
-        %177 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %178 = OpLoad %int %177
-        %179 = OpAccessChain %_ptr_Function_int %arr %178 %uint_0
-        %180 = OpLoad %int %179
-        %181 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %182 = OpLoad %int %181
-        %183 = OpIEqual %bool %180 %182
-               OpStore %x_146 %183
-        %184 = OpLoad %bool %x_146
-               OpStore %x_147_phi %184
-               OpBranch %175
-        %175 = OpLabel
-        %185 = OpLoad %bool %x_147_phi
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-        %189 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %190 = OpLoad %int %189
-        %191 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %192 = OpLoad %int %191
-        %193 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %194 = OpLoad %int %193
-        %195 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %196 = OpLoad %int %195
-        %197 = OpConvertSToF %float %190
-        %198 = OpConvertSToF %float %192
-        %199 = OpConvertSToF %float %194
-        %200 = OpConvertSToF %float %196
-        %201 = OpCompositeConstruct %v4float %197 %198 %199 %200
-               OpStore %x_GLF_color %201
-               OpBranch %186
-        %188 = OpLabel
-        %202 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %203 = OpLoad %int %202
-        %204 = OpConvertSToF %float %203
-        %205 = OpCompositeConstruct %v4float %204 %204 %204 %204
-               OpStore %x_GLF_color %205
-               OpBranch %186
-        %186 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %206
-        %209 = OpLabel
-        %210 = OpFunctionCall %void %main_1
-        %211 = OpLoad %v4float %x_GLF_color
-        %212 = OpCompositeConstruct %main_out %211
-               OpReturnValue %212
-               OpFunctionEnd
-       %main = OpFunction %void None %49
-        %214 = OpLabel
-        %215 = OpFunctionCall %main_out %main_inner
-        %216 = OpCompositeExtract %v4float %215 0
-               OpStore %x_GLF_color_1_1 %216
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 68f76e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,166 +0,0 @@
-struct S {
-  data : i32;
-};
-
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i11_(s : ptr<function, S>) {
-  loop {
-    let x_174 : f32 = x_8.v1.x;
-    let x_176 : f32 = x_8.v1.y;
-    if ((x_174 > x_176)) {
-    } else {
-      break;
-    }
-    return;
-  }
-  let x_180 : i32 = x_10.x_GLF_uniform_int_values[0];
-  (*(s)).data = x_180;
-  return;
-}
-
-fn main_1() {
-  var i : i32;
-  var arr : array<S, 3>;
-  var i_1 : i32;
-  var param : S;
-  var j : i32;
-  var x_136 : bool;
-  var x_146 : bool;
-  var x_137_phi : bool;
-  var x_147_phi : bool;
-  let x_46 : i32 = x_10.x_GLF_uniform_int_values[2];
-  i = x_46;
-  loop {
-    let x_51 : i32 = i;
-    let x_53 : i32 = x_10.x_GLF_uniform_int_values[1];
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    let x_56 : i32 = i;
-    let x_57 : i32 = i;
-    arr[x_56].data = x_57;
-
-    continuing {
-      let x_59 : i32 = i;
-      i = (x_59 + 1);
-    }
-  }
-  let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
-  i_1 = x_62;
-  loop {
-    let x_67 : i32 = i_1;
-    let x_69 : i32 = x_10.x_GLF_uniform_int_values[1];
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    let x_73 : f32 = x_8.v1.x;
-    let x_75 : f32 = x_8.v1.y;
-    if ((x_73 > x_75)) {
-      break;
-    }
-    let x_79 : i32 = i_1;
-    let x_81 : i32 = arr[x_79].data;
-    let x_83 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_81 == x_83)) {
-      let x_88 : i32 = i_1;
-      let x_91 : i32 = x_10.x_GLF_uniform_int_values[3];
-      arr[clamp(x_88, 0, 3)].data = x_91;
-      let x_94 : S = arr[2];
-      param = x_94;
-      func_struct_S_i11_(&(param));
-      let x_96 : S = param;
-      arr[2] = x_96;
-    } else {
-      let x_99 : i32 = x_10.x_GLF_uniform_int_values[2];
-      j = x_99;
-      loop {
-        let x_104 : i32 = j;
-        let x_106 : i32 = x_10.x_GLF_uniform_int_values[1];
-        if ((x_104 < x_106)) {
-        } else {
-          break;
-        }
-        let x_109 : i32 = j;
-        let x_111 : i32 = arr[x_109].data;
-        let x_113 : i32 = x_10.x_GLF_uniform_int_values[4];
-        if ((x_111 > x_113)) {
-          discard;
-        }
-
-        continuing {
-          let x_117 : i32 = j;
-          j = (x_117 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_119 : i32 = i_1;
-      i_1 = (x_119 + 1);
-    }
-  }
-  let x_122 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_124 : i32 = arr[x_122].data;
-  let x_126 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_127 : bool = (x_124 == x_126);
-  x_137_phi = x_127;
-  if (x_127) {
-    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_133 : i32 = arr[x_131].data;
-    let x_135 : i32 = x_10.x_GLF_uniform_int_values[3];
-    x_136 = (x_133 == x_135);
-    x_137_phi = x_136;
-  }
-  let x_137 : bool = x_137_phi;
-  x_147_phi = x_137;
-  if (x_137) {
-    let x_141 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_143 : i32 = arr[x_141].data;
-    let x_145 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_146 = (x_143 == x_145);
-    x_147_phi = x_146;
-  }
-  let x_147 : bool = x_147_phi;
-  if (x_147) {
-    let x_152 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_155 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_158 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_161 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_152), f32(x_155), f32(x_158), f32(x_161));
-  } else {
-    let x_165 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_166 : f32 = f32(x_165);
-    x_GLF_color = vec4<f32>(x_166, x_166, x_166, x_166);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 01e8447..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,159 +0,0 @@
-struct S {
-  int data;
-};
-
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[5];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_struct_S_i11_(inout S s) {
-  while (true) {
-    const float x_174 = asfloat(x_8[0].x);
-    const float x_176 = asfloat(x_8[0].y);
-    if ((x_174 > x_176)) {
-    } else {
-      break;
-    }
-    return;
-  }
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_180 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
-  s.data = x_180;
-  return;
-}
-
-void main_1() {
-  int i = 0;
-  S arr[3] = (S[3])0;
-  int i_1 = 0;
-  S param = (S)0;
-  int j = 0;
-  bool x_136 = false;
-  bool x_146 = false;
-  bool x_137_phi = false;
-  bool x_147_phi = false;
-  const int x_46 = asint(x_10[2].x);
-  i = x_46;
-  while (true) {
-    const int x_51 = i;
-    const int x_53 = asint(x_10[1].x);
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    arr[i].data = i;
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_62 = asint(x_10[2].x);
-  i_1 = x_62;
-  while (true) {
-    const int x_67 = i_1;
-    const int x_69 = asint(x_10[1].x);
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    const float x_73 = asfloat(x_8[0].x);
-    const float x_75 = asfloat(x_8[0].y);
-    if ((x_73 > x_75)) {
-      break;
-    }
-    const int x_81 = arr[i_1].data;
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_83 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    if ((x_81 == x_83)) {
-      const int x_88 = i_1;
-      const int x_91 = asint(x_10[3].x);
-      arr[clamp(x_88, 0, 3)].data = x_91;
-      const S x_94 = arr[2];
-      param = x_94;
-      func_struct_S_i11_(param);
-      arr[2] = param;
-    } else {
-      const int x_99 = asint(x_10[2].x);
-      j = x_99;
-      while (true) {
-        const int x_104 = j;
-        const int x_106 = asint(x_10[1].x);
-        if ((x_104 < x_106)) {
-        } else {
-          break;
-        }
-        const int x_111 = arr[j].data;
-        const int x_113 = asint(x_10[4].x);
-        if ((x_111 > x_113)) {
-          discard;
-        }
-        {
-          j = (j + 1);
-        }
-      }
-    }
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const int x_122 = asint(x_10[2].x);
-  const int x_124 = arr[x_122].data;
-  const int x_126 = asint(x_10[2].x);
-  const bool x_127 = (x_124 == x_126);
-  x_137_phi = x_127;
-  if (x_127) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_131 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_133 = arr[x_131].data;
-    const int x_135 = asint(x_10[3].x);
-    x_136 = (x_133 == x_135);
-    x_137_phi = x_136;
-  }
-  const bool x_137 = x_137_phi;
-  x_147_phi = x_137;
-  if (x_137) {
-    const int x_141 = asint(x_10[3].x);
-    const int x_143 = arr[x_141].data;
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_145 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_146 = (x_143 == x_145);
-    x_147_phi = x_146;
-  }
-  if (x_147_phi) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_152 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const int x_155 = asint(x_10[2].x);
-    const int x_158 = asint(x_10[2].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_161 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_152), float(x_155), float(x_158), float(x_161));
-  } else {
-    const int x_165 = asint(x_10[2].x);
-    const float x_166 = float(x_165);
-    x_GLF_color = float4(x_166, x_166, x_166, x_166);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2a95bc7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,174 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int data;
-};
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[5];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  S arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_struct_S_i11_(constant buf1& x_8, constant buf0& x_10, thread S* const s) {
-  while (true) {
-    float const x_174 = x_8.v1.x;
-    float const x_176 = x_8.v1.y;
-    if ((x_174 > x_176)) {
-    } else {
-      break;
-    }
-    return;
-  }
-  int const x_180 = x_10.x_GLF_uniform_int_values.arr[0].el;
-  (*(s)).data = x_180;
-  return;
-}
-
-void main_1(constant buf0& x_10, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 arr = {};
-  int i_1 = 0;
-  S param = {};
-  int j = 0;
-  bool x_136 = false;
-  bool x_146 = false;
-  bool x_137_phi = false;
-  bool x_147_phi = false;
-  int const x_46 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  i = x_46;
-  while (true) {
-    int const x_51 = i;
-    int const x_53 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    int const x_56 = i;
-    int const x_57 = i;
-    arr.arr[x_56].data = x_57;
-    {
-      int const x_59 = i;
-      i = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-    }
-  }
-  int const x_62 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  i_1 = x_62;
-  while (true) {
-    int const x_67 = i_1;
-    int const x_69 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    float const x_73 = x_8.v1.x;
-    float const x_75 = x_8.v1.y;
-    if ((x_73 > x_75)) {
-      break;
-    }
-    int const x_79 = i_1;
-    int const x_81 = arr.arr[x_79].data;
-    int const x_83 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_81 == x_83)) {
-      int const x_88 = i_1;
-      int const x_91 = x_10.x_GLF_uniform_int_values.arr[3].el;
-      arr.arr[clamp(x_88, 0, 3)].data = x_91;
-      S const x_94 = arr.arr[2];
-      param = x_94;
-      func_struct_S_i11_(x_8, x_10, &(param));
-      S const x_96 = param;
-      arr.arr[2] = x_96;
-    } else {
-      int const x_99 = x_10.x_GLF_uniform_int_values.arr[2].el;
-      j = x_99;
-      while (true) {
-        int const x_104 = j;
-        int const x_106 = x_10.x_GLF_uniform_int_values.arr[1].el;
-        if ((x_104 < x_106)) {
-        } else {
-          break;
-        }
-        int const x_109 = j;
-        int const x_111 = arr.arr[x_109].data;
-        int const x_113 = x_10.x_GLF_uniform_int_values.arr[4].el;
-        if ((x_111 > x_113)) {
-          discard_fragment();
-        }
-        {
-          int const x_117 = j;
-          j = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_119 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-    }
-  }
-  int const x_122 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  int const x_124 = arr.arr[x_122].data;
-  int const x_126 = x_10.x_GLF_uniform_int_values.arr[2].el;
-  bool const x_127 = (x_124 == x_126);
-  x_137_phi = x_127;
-  if (x_127) {
-    int const x_131 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_133 = arr.arr[x_131].data;
-    int const x_135 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    x_136 = (x_133 == x_135);
-    x_137_phi = x_136;
-  }
-  bool const x_137 = x_137_phi;
-  x_147_phi = x_137;
-  if (x_137) {
-    int const x_141 = x_10.x_GLF_uniform_int_values.arr[3].el;
-    int const x_143 = arr.arr[x_141].data;
-    int const x_145 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    x_146 = (x_143 == x_145);
-    x_147_phi = x_146;
-  }
-  bool const x_147 = x_147_phi;
-  if (x_147) {
-    int const x_152 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_155 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_158 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    int const x_161 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_152), float(x_155), float(x_158), float(x_161));
-  } else {
-    int const x_165 = x_10.x_GLF_uniform_int_values.arr[2].el;
-    float const x_166 = float(x_165);
-    *(tint_symbol_3) = float4(x_166, x_166, x_166, x_166);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_10, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_10 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 80137c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,348 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 217
-; Schema: 0
-               OpCapability Shader
-        %123 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_8 "x_8"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "data"
-               OpName %func_struct_S_i11_ "func_struct_S_i11_"
-               OpName %s "s"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %arr "arr"
-               OpName %i_1 "i_1"
-               OpName %param "param"
-               OpName %j "j"
-               OpName %x_136 "x_136"
-               OpName %x_146 "x_146"
-               OpName %x_137_phi "x_137_phi"
-               OpName %x_147_phi "x_147_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_5 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_S_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_5 = OpConstant %uint 5
-%_arr_int_uint_5 = OpTypeArray %int %uint_5
-       %buf0 = OpTypeStruct %_arr_int_uint_5
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %S = OpTypeStruct %int
-%_ptr_Function_S = OpTypePointer Function %S
-         %19 = OpTypeFunction %void %_ptr_Function_S
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %49 = OpTypeFunction %void
-         %53 = OpConstantNull %int
-     %uint_3 = OpConstant %uint 3
-%_arr_S_uint_3 = OpTypeArray %S %uint_3
-%_ptr_Function__arr_S_uint_3 = OpTypePointer Function %_arr_S_uint_3
-         %58 = OpConstantNull %_arr_S_uint_3
-         %61 = OpConstantNull %S
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %65 = OpConstantNull %bool
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-   %main_out = OpTypeStruct %v4float
-        %206 = OpTypeFunction %main_out
-%func_struct_S_i11_ = OpFunction %void None %19
-          %s = OpFunctionParameter %_ptr_Function_S
-         %25 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %32 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFOrdGreaterThan %bool %33 %36
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %27
-         %39 = OpLabel
-               OpReturn
-         %28 = OpLabel
-               OpBranch %26
-         %27 = OpLabel
-         %44 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %45 = OpLoad %int %44
-         %48 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %48 %45
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %49
-         %51 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %53
-        %arr = OpVariable %_ptr_Function__arr_S_uint_3 Function %58
-        %i_1 = OpVariable %_ptr_Function_int Function %53
-      %param = OpVariable %_ptr_Function_S Function %61
-          %j = OpVariable %_ptr_Function_int Function %53
-      %x_136 = OpVariable %_ptr_Function_bool Function %65
-      %x_146 = OpVariable %_ptr_Function_bool Function %65
-  %x_137_phi = OpVariable %_ptr_Function_bool Function %65
-  %x_147_phi = OpVariable %_ptr_Function_bool Function %65
-         %70 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %71 = OpLoad %int %70
-               OpStore %i %71
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %int %i
-         %78 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %79 = OpLoad %int %78
-         %80 = OpSLessThan %bool %76 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %73
-         %81 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpLoad %int %i
-         %86 = OpAccessChain %_ptr_Function_int %arr %84 %uint_0
-               OpStore %86 %85
-               OpBranch %74
-         %74 = OpLabel
-         %87 = OpLoad %int %i
-         %88 = OpIAdd %int %87 %int_1
-               OpStore %i %88
-               OpBranch %72
-         %73 = OpLabel
-         %89 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-         %90 = OpLoad %int %89
-               OpStore %i_1 %90
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %i_1
-         %96 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %97 = OpLoad %int %96
-         %98 = OpSLessThan %bool %95 %97
-               OpSelectionMerge %99 None
-               OpBranchConditional %98 %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %92
-         %99 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %105 = OpLoad %float %104
-        %106 = OpFOrdGreaterThan %bool %103 %105
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-               OpBranch %92
-        %107 = OpLabel
-        %109 = OpLoad %int %i_1
-        %110 = OpAccessChain %_ptr_Function_int %arr %109 %uint_0
-        %111 = OpLoad %int %110
-        %112 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpIEqual %bool %111 %113
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpLoad %int %i_1
-        %120 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %121 = OpLoad %int %120
-        %122 = OpExtInst %int %123 SClamp %118 %int_0 %int_3
-        %124 = OpAccessChain %_ptr_Function_int %arr %122 %uint_0
-               OpStore %124 %121
-        %125 = OpAccessChain %_ptr_Function_S %arr %int_2
-        %126 = OpLoad %S %125
-               OpStore %param %126
-        %127 = OpFunctionCall %void %func_struct_S_i11_ %param
-        %129 = OpLoad %S %param
-        %130 = OpAccessChain %_ptr_Function_S %arr %int_2
-               OpStore %130 %129
-               OpBranch %115
-        %117 = OpLabel
-        %131 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %132 = OpLoad %int %131
-               OpStore %j %132
-               OpBranch %133
-        %133 = OpLabel
-               OpLoopMerge %134 %135 None
-               OpBranch %136
-        %136 = OpLabel
-        %137 = OpLoad %int %j
-        %138 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-        %139 = OpLoad %int %138
-        %140 = OpSLessThan %bool %137 %139
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %143
-        %142 = OpLabel
-               OpBranch %141
-        %143 = OpLabel
-               OpBranch %134
-        %141 = OpLabel
-        %144 = OpLoad %int %j
-        %145 = OpAccessChain %_ptr_Function_int %arr %144 %uint_0
-        %146 = OpLoad %int %145
-        %148 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_4
-        %149 = OpLoad %int %148
-        %150 = OpSGreaterThan %bool %146 %149
-               OpSelectionMerge %151 None
-               OpBranchConditional %150 %152 %151
-        %152 = OpLabel
-               OpKill
-        %151 = OpLabel
-               OpBranch %135
-        %135 = OpLabel
-        %153 = OpLoad %int %j
-        %154 = OpIAdd %int %153 %int_1
-               OpStore %j %154
-               OpBranch %133
-        %134 = OpLabel
-               OpBranch %115
-        %115 = OpLabel
-               OpBranch %93
-         %93 = OpLabel
-        %155 = OpLoad %int %i_1
-        %156 = OpIAdd %int %155 %int_1
-               OpStore %i_1 %156
-               OpBranch %91
-         %92 = OpLabel
-        %157 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %158 = OpLoad %int %157
-        %159 = OpAccessChain %_ptr_Function_int %arr %158 %uint_0
-        %160 = OpLoad %int %159
-        %161 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %162 = OpLoad %int %161
-        %163 = OpIEqual %bool %160 %162
-               OpStore %x_137_phi %163
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %164
-        %165 = OpLabel
-        %166 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %167 = OpLoad %int %166
-        %168 = OpAccessChain %_ptr_Function_int %arr %167 %uint_0
-        %169 = OpLoad %int %168
-        %170 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %171 = OpLoad %int %170
-        %172 = OpIEqual %bool %169 %171
-               OpStore %x_136 %172
-        %173 = OpLoad %bool %x_136
-               OpStore %x_137_phi %173
-               OpBranch %164
-        %164 = OpLabel
-        %174 = OpLoad %bool %x_137_phi
-               OpStore %x_147_phi %174
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %175
-        %176 = OpLabel
-        %177 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_3
-        %178 = OpLoad %int %177
-        %179 = OpAccessChain %_ptr_Function_int %arr %178 %uint_0
-        %180 = OpLoad %int %179
-        %181 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %182 = OpLoad %int %181
-        %183 = OpIEqual %bool %180 %182
-               OpStore %x_146 %183
-        %184 = OpLoad %bool %x_146
-               OpStore %x_147_phi %184
-               OpBranch %175
-        %175 = OpLabel
-        %185 = OpLoad %bool %x_147_phi
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-        %189 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %190 = OpLoad %int %189
-        %191 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %192 = OpLoad %int %191
-        %193 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %194 = OpLoad %int %193
-        %195 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-        %196 = OpLoad %int %195
-        %197 = OpConvertSToF %float %190
-        %198 = OpConvertSToF %float %192
-        %199 = OpConvertSToF %float %194
-        %200 = OpConvertSToF %float %196
-        %201 = OpCompositeConstruct %v4float %197 %198 %199 %200
-               OpStore %x_GLF_color %201
-               OpBranch %186
-        %188 = OpLabel
-        %202 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_2
-        %203 = OpLoad %int %202
-        %204 = OpConvertSToF %float %203
-        %205 = OpCompositeConstruct %v4float %204 %204 %204 %204
-               OpStore %x_GLF_color %205
-               OpBranch %186
-        %186 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %206
-        %209 = OpLabel
-        %210 = OpFunctionCall %void %main_1
-        %211 = OpLoad %v4float %x_GLF_color
-        %212 = OpCompositeConstruct %main_out %211
-               OpReturnValue %212
-               OpFunctionEnd
-       %main = OpFunction %void None %49
-        %214 = OpLabel
-        %215 = OpFunctionCall %main_out %main_inner
-        %216 = OpCompositeExtract %v4float %215 0
-               OpStore %x_GLF_color_1_1 %216
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 68f76e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-target-lowering-inst-combine-compares-struct-array-clamp-function-cal/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,166 +0,0 @@
-struct S {
-  data : i32;
-};
-
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-type Arr = [[stride(16)]] array<i32, 5>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i11_(s : ptr<function, S>) {
-  loop {
-    let x_174 : f32 = x_8.v1.x;
-    let x_176 : f32 = x_8.v1.y;
-    if ((x_174 > x_176)) {
-    } else {
-      break;
-    }
-    return;
-  }
-  let x_180 : i32 = x_10.x_GLF_uniform_int_values[0];
-  (*(s)).data = x_180;
-  return;
-}
-
-fn main_1() {
-  var i : i32;
-  var arr : array<S, 3>;
-  var i_1 : i32;
-  var param : S;
-  var j : i32;
-  var x_136 : bool;
-  var x_146 : bool;
-  var x_137_phi : bool;
-  var x_147_phi : bool;
-  let x_46 : i32 = x_10.x_GLF_uniform_int_values[2];
-  i = x_46;
-  loop {
-    let x_51 : i32 = i;
-    let x_53 : i32 = x_10.x_GLF_uniform_int_values[1];
-    if ((x_51 < x_53)) {
-    } else {
-      break;
-    }
-    let x_56 : i32 = i;
-    let x_57 : i32 = i;
-    arr[x_56].data = x_57;
-
-    continuing {
-      let x_59 : i32 = i;
-      i = (x_59 + 1);
-    }
-  }
-  let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
-  i_1 = x_62;
-  loop {
-    let x_67 : i32 = i_1;
-    let x_69 : i32 = x_10.x_GLF_uniform_int_values[1];
-    if ((x_67 < x_69)) {
-    } else {
-      break;
-    }
-    let x_73 : f32 = x_8.v1.x;
-    let x_75 : f32 = x_8.v1.y;
-    if ((x_73 > x_75)) {
-      break;
-    }
-    let x_79 : i32 = i_1;
-    let x_81 : i32 = arr[x_79].data;
-    let x_83 : i32 = x_10.x_GLF_uniform_int_values[0];
-    if ((x_81 == x_83)) {
-      let x_88 : i32 = i_1;
-      let x_91 : i32 = x_10.x_GLF_uniform_int_values[3];
-      arr[clamp(x_88, 0, 3)].data = x_91;
-      let x_94 : S = arr[2];
-      param = x_94;
-      func_struct_S_i11_(&(param));
-      let x_96 : S = param;
-      arr[2] = x_96;
-    } else {
-      let x_99 : i32 = x_10.x_GLF_uniform_int_values[2];
-      j = x_99;
-      loop {
-        let x_104 : i32 = j;
-        let x_106 : i32 = x_10.x_GLF_uniform_int_values[1];
-        if ((x_104 < x_106)) {
-        } else {
-          break;
-        }
-        let x_109 : i32 = j;
-        let x_111 : i32 = arr[x_109].data;
-        let x_113 : i32 = x_10.x_GLF_uniform_int_values[4];
-        if ((x_111 > x_113)) {
-          discard;
-        }
-
-        continuing {
-          let x_117 : i32 = j;
-          j = (x_117 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_119 : i32 = i_1;
-      i_1 = (x_119 + 1);
-    }
-  }
-  let x_122 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_124 : i32 = arr[x_122].data;
-  let x_126 : i32 = x_10.x_GLF_uniform_int_values[2];
-  let x_127 : bool = (x_124 == x_126);
-  x_137_phi = x_127;
-  if (x_127) {
-    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_133 : i32 = arr[x_131].data;
-    let x_135 : i32 = x_10.x_GLF_uniform_int_values[3];
-    x_136 = (x_133 == x_135);
-    x_137_phi = x_136;
-  }
-  let x_137 : bool = x_137_phi;
-  x_147_phi = x_137;
-  if (x_137) {
-    let x_141 : i32 = x_10.x_GLF_uniform_int_values[3];
-    let x_143 : i32 = arr[x_141].data;
-    let x_145 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_146 = (x_143 == x_145);
-    x_147_phi = x_146;
-  }
-  let x_147 : bool = x_147_phi;
-  if (x_147) {
-    let x_152 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_155 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_158 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_161 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_152), f32(x_155), f32(x_158), f32(x_161));
-  } else {
-    let x_165 : i32 = x_10.x_GLF_uniform_int_values[2];
-    let x_166 : f32 = f32(x_165);
-    x_GLF_color = vec4<f32>(x_166, x_166, x_166, x_166);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7625205..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  m = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-  const float2x2 x_30 = mul(transpose(m), transpose(m));
-  const float2x2 x_34 = transpose(mul(m, m));
-  if ((all((x_30[0u] == x_34[0u])) & all((x_30[1u] == x_34[1u])))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.msl
deleted file mode 100644
index c3b0818..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2x2 m = float2x2(0.0f);
-  m = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-  float2x2 const x_26 = m;
-  float2x2 const x_28 = m;
-  float2x2 const x_30 = (transpose(x_26) * transpose(x_28));
-  float2x2 const x_31 = m;
-  float2x2 const x_32 = m;
-  float2x2 const x_34 = transpose((x_31 * x_32));
-  if ((all((x_30[0u] == x_34[0u])) & all((x_30[1u] == x_34[1u])))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 46574b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %16 = OpConstantNull %mat2v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-         %19 = OpConstantComposite %v2float %float_1 %float_2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %22 = OpConstantComposite %v2float %float_3 %float_4
-         %23 = OpConstantComposite %mat2v2float %19 %22
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %v2bool = OpTypeVector %bool 2
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %51 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %52 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %m = OpVariable %_ptr_Function_mat2v2float Function %16
-               OpStore %m %23
-         %24 = OpLoad %mat2v2float %m
-         %25 = OpLoad %mat2v2float %m
-         %26 = OpTranspose %mat2v2float %24
-         %27 = OpTranspose %mat2v2float %25
-         %28 = OpMatrixTimesMatrix %mat2v2float %26 %27
-         %29 = OpLoad %mat2v2float %m
-         %30 = OpLoad %mat2v2float %m
-         %32 = OpMatrixTimesMatrix %mat2v2float %29 %30
-         %31 = OpTranspose %mat2v2float %32
-         %37 = OpCompositeExtract %v2float %28 0
-         %38 = OpCompositeExtract %v2float %31 0
-         %39 = OpFOrdEqual %v2bool %37 %38
-         %33 = OpAll %bool %39
-         %43 = OpCompositeExtract %v2float %28 1
-         %44 = OpCompositeExtract %v2float %31 1
-         %45 = OpFOrdEqual %v2bool %43 %44
-         %41 = OpAll %bool %45
-         %46 = OpLogicalAnd %bool %33 %41
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %49
-         %48 = OpLabel
-               OpStore %x_GLF_color %51
-               OpBranch %47
-         %49 = OpLabel
-               OpStore %x_GLF_color %52
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c9e11f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat2x2<f32>;
-  m = mat2x2<f32>(vec2<f32>(1.0, 2.0), vec2<f32>(3.0, 4.0));
-  let x_26 : mat2x2<f32> = m;
-  let x_28 : mat2x2<f32> = m;
-  let x_30 : mat2x2<f32> = (transpose(x_26) * transpose(x_28));
-  let x_31 : mat2x2<f32> = m;
-  let x_32 : mat2x2<f32> = m;
-  let x_34 : mat2x2<f32> = transpose((x_31 * x_32));
-  if ((all((x_30[0u] == x_34[0u])) & all((x_30[1u] == x_34[1u])))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d587bd2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  m = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-  const float2x2 x_30 = mul(transpose(m), transpose(m));
-  const float2x2 x_34 = transpose(mul(m, m));
-  bool tint_tmp = all((x_30[0u] == x_34[0u]));
-  if (tint_tmp) {
-    tint_tmp = all((x_30[1u] == x_34[1u]));
-  }
-  if ((tint_tmp)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.msl
deleted file mode 100644
index 604e881..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2x2 m = float2x2(0.0f);
-  m = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-  float2x2 const x_26 = m;
-  float2x2 const x_28 = m;
-  float2x2 const x_30 = (transpose(x_26) * transpose(x_28));
-  float2x2 const x_31 = m;
-  float2x2 const x_32 = m;
-  float2x2 const x_34 = transpose((x_31 * x_32));
-  if ((all((x_30[0u] == x_34[0u])) && all((x_30[1u] == x_34[1u])))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index fed0db5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,101 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %16 = OpConstantNull %mat2v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-         %19 = OpConstantComposite %v2float %float_1 %float_2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %22 = OpConstantComposite %v2float %float_3 %float_4
-         %23 = OpConstantComposite %mat2v2float %19 %22
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %v2bool = OpTypeVector %bool 2
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %53 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %54 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %m = OpVariable %_ptr_Function_mat2v2float Function %16
-               OpStore %m %23
-         %24 = OpLoad %mat2v2float %m
-         %25 = OpLoad %mat2v2float %m
-         %26 = OpTranspose %mat2v2float %24
-         %27 = OpTranspose %mat2v2float %25
-         %28 = OpMatrixTimesMatrix %mat2v2float %26 %27
-         %29 = OpLoad %mat2v2float %m
-         %30 = OpLoad %mat2v2float %m
-         %32 = OpMatrixTimesMatrix %mat2v2float %29 %30
-         %31 = OpTranspose %mat2v2float %32
-         %37 = OpCompositeExtract %v2float %28 0
-         %38 = OpCompositeExtract %v2float %31 0
-         %39 = OpFOrdEqual %v2bool %37 %38
-         %33 = OpAll %bool %39
-               OpSelectionMerge %41 None
-               OpBranchConditional %33 %42 %41
-         %42 = OpLabel
-         %45 = OpCompositeExtract %v2float %28 1
-         %46 = OpCompositeExtract %v2float %31 1
-         %47 = OpFOrdEqual %v2bool %45 %46
-         %43 = OpAll %bool %47
-               OpBranch %41
-         %41 = OpLabel
-         %48 = OpPhi %bool %33 %11 %43 %42
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpStore %x_GLF_color %53
-               OpBranch %49
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-               OpBranch %49
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 891a913..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-transpose-multiply/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m : mat2x2<f32>;
-  m = mat2x2<f32>(vec2<f32>(1.0, 2.0), vec2<f32>(3.0, 4.0));
-  let x_26 : mat2x2<f32> = m;
-  let x_28 : mat2x2<f32> = m;
-  let x_30 : mat2x2<f32> = (transpose(x_26) * transpose(x_28));
-  let x_31 : mat2x2<f32> = m;
-  let x_32 : mat2x2<f32> = m;
-  let x_34 : mat2x2<f32> = transpose((x_31 * x_32));
-  if ((all((x_30[0u] == x_34[0u])) && all((x_30[1u] == x_34[1u])))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7ab118a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  const float x_35 = gl_FragCoord.y;
-  const float x_37 = asfloat(x_7[1].x);
-  f = frac(trunc(((x_35 < x_37) ? 0.100000001f : 1.0f)));
-  const float x_42 = f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_42 == x_44)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_53 = asint(x_9[1].x);
-    const int x_56 = asint(x_9[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_50), float(x_53), float(x_56), float(x_59));
-  } else {
-    const int x_63 = asint(x_9[1].x);
-    const float x_64 = float(x_63);
-    x_GLF_color = float4(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4b4e8bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  float const x_35 = (*(tint_symbol_3)).y;
-  float const x_37 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  f = fract(trunc(select(1.0f, 0.100000001f, (x_35 < x_37))));
-  float const x_42 = f;
-  float const x_44 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_42 == x_44)) {
-    int const x_50 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_53 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_59 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_50), float(x_53), float(x_56), float(x_59));
-  } else {
-    int const x_63 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_64 = float(x_63);
-    *(tint_symbol_4) = float4(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8a68020..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-         %39 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%float_0_100000001 = OpConstant %float 0.100000001
-    %float_1 = OpConstant %float 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %28
-         %31 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %32 = OpLoad %float %31
-         %36 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %37 = OpLoad %float %36
-         %42 = OpFOrdLessThan %bool %32 %37
-         %41 = OpSelect %float %42 %float_0_100000001 %float_1
-         %40 = OpExtInst %float %39 Trunc %41
-         %38 = OpExtInst %float %39 Fract %40
-               OpStore %f %38
-         %46 = OpLoad %float %f
-         %48 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %49 = OpLoad %float %48
-         %50 = OpFOrdEqual %bool %46 %49
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpConvertSToF %float %56
-         %64 = OpConvertSToF %float %58
-         %65 = OpConvertSToF %float %60
-         %66 = OpConvertSToF %float %62
-         %67 = OpCompositeConstruct %v4float %63 %64 %65 %66
-               OpStore %x_GLF_color %67
-               OpBranch %51
-         %53 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %69
-         %71 = OpCompositeConstruct %v4float %70 %70 %70 %70
-               OpStore %x_GLF_color %71
-               OpBranch %51
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %76 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %77 = OpFunctionCall %void %main_1
-         %78 = OpLoad %v4float %x_GLF_color
-         %79 = OpCompositeConstruct %main_out %78
-               OpReturnValue %79
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %81 = OpLabel
-         %83 = OpLoad %v4float %gl_FragCoord_param_1
-         %82 = OpFunctionCall %main_out %main_inner %83
-         %84 = OpCompositeExtract %v4float %82 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bba3d95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var f : f32;
-  let x_35 : f32 = gl_FragCoord.y;
-  let x_37 : f32 = x_7.x_GLF_uniform_float_values[1];
-  f = fract(trunc(select(1.0, 0.100000001, (x_35 < x_37))));
-  let x_42 : f32 = f;
-  let x_44 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_42 == x_44)) {
-    let x_50 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_53 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_59 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_50), f32(x_53), f32(x_56), f32(x_59));
-  } else {
-    let x_63 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_64 : f32 = f32(x_63);
-    x_GLF_color = vec4<f32>(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7ab118a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b1, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  const float x_35 = gl_FragCoord.y;
-  const float x_37 = asfloat(x_7[1].x);
-  f = frac(trunc(((x_35 < x_37) ? 0.100000001f : 1.0f)));
-  const float x_42 = f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_44 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_42 == x_44)) {
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_50 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const int x_53 = asint(x_9[1].x);
-    const int x_56 = asint(x_9[1].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_59 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    x_GLF_color = float4(float(x_50), float(x_53), float(x_56), float(x_59));
-  } else {
-    const int x_63 = asint(x_9[1].x);
-    const float x_64 = float(x_63);
-    x_GLF_color = float4(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4b4e8bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float f = 0.0f;
-  float const x_35 = (*(tint_symbol_3)).y;
-  float const x_37 = x_7.x_GLF_uniform_float_values.arr[1].el;
-  f = fract(trunc(select(1.0f, 0.100000001f, (x_35 < x_37))));
-  float const x_42 = f;
-  float const x_44 = x_7.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_42 == x_44)) {
-    int const x_50 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_53 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_59 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_50), float(x_53), float(x_56), float(x_59));
-  } else {
-    int const x_63 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_64 = float(x_63);
-    *(tint_symbol_4) = float4(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_7, constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf1& x_7 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8a68020..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-         %39 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_7 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%float_0_100000001 = OpConstant %float 0.100000001
-    %float_1 = OpConstant %float 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %28
-         %31 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %32 = OpLoad %float %31
-         %36 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_1
-         %37 = OpLoad %float %36
-         %42 = OpFOrdLessThan %bool %32 %37
-         %41 = OpSelect %float %42 %float_0_100000001 %float_1
-         %40 = OpExtInst %float %39 Trunc %41
-         %38 = OpExtInst %float %39 Fract %40
-               OpStore %f %38
-         %46 = OpLoad %float %f
-         %48 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %int_0
-         %49 = OpLoad %float %48
-         %50 = OpFOrdEqual %bool %46 %49
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %53
-         %52 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %60 = OpLoad %int %59
-         %61 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %62 = OpLoad %int %61
-         %63 = OpConvertSToF %float %56
-         %64 = OpConvertSToF %float %58
-         %65 = OpConvertSToF %float %60
-         %66 = OpConvertSToF %float %62
-         %67 = OpCompositeConstruct %v4float %63 %64 %65 %66
-               OpStore %x_GLF_color %67
-               OpBranch %51
-         %53 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %69 = OpLoad %int %68
-         %70 = OpConvertSToF %float %69
-         %71 = OpCompositeConstruct %v4float %70 %70 %70 %70
-               OpStore %x_GLF_color %71
-               OpBranch %51
-         %51 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %76 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %77 = OpFunctionCall %void %main_1
-         %78 = OpLoad %v4float %x_GLF_color
-         %79 = OpCompositeConstruct %main_out %78
-               OpReturnValue %79
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %81 = OpLabel
-         %83 = OpLoad %v4float %gl_FragCoord_param_1
-         %82 = OpFunctionCall %main_out %main_inner %83
-         %84 = OpCompositeExtract %v4float %82 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index bba3d95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-trunc-fract-always-zero/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_7 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-fn main_1() {
-  var f : f32;
-  let x_35 : f32 = gl_FragCoord.y;
-  let x_37 : f32 = x_7.x_GLF_uniform_float_values[1];
-  f = fract(trunc(select(1.0, 0.100000001, (x_35 < x_37))));
-  let x_42 : f32 = f;
-  let x_44 : f32 = x_7.x_GLF_uniform_float_values[0];
-  if ((x_42 == x_44)) {
-    let x_50 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_53 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_59 : i32 = x_9.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_50), f32(x_53), f32(x_56), f32(x_59));
-  } else {
-    let x_63 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_64 : f32 = f32(x_63);
-    x_GLF_color = vec4<f32>(x_64, x_64, x_64, x_64);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 30187e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  float4 x_24 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_26 = asint(x_6[0].x);
-  if ((x_26 == 0)) {
-    return;
-  }
-  x_24 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float4 func_() {
-  return float4(1.0f, 0.0f, 0.0f, 1.0f);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1bc94ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 x_24 = 0.0f;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int const x_26 = x_6.one;
-  if ((x_26 == 0)) {
-    return;
-  }
-  x_24 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float4 func_() {
-  return float4(1.0f, 0.0f, 0.0f, 1.0f);
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4003fa1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %x_24 "x_24"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_ "func_"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-         %43 = OpTypeFunction %v4float
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_24 = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %x_GLF_color %19
-         %23 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %24 = OpLoad %int %23
-         %26 = OpIEqual %bool %24 %int_0
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %28
-         %29 = OpLabel
-               OpReturn
-         %28 = OpLabel
-               OpStore %x_24 %31
-               OpStore %x_GLF_color %31
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
-      %func_ = OpFunction %v4float None %43
-         %45 = OpLabel
-               OpReturnValue %31
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a354d57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var x_24 : vec4<f32>;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_26 : i32 = x_6.one;
-  if ((x_26 == 0)) {
-    return;
-  }
-  x_24 = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_() -> vec4<f32> {
-  return vec4<f32>(1.0, 0.0, 0.0, 1.0);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 30187e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,40 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  float4 x_24 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_26 = asint(x_6[0].x);
-  if ((x_26 == 0)) {
-    return;
-  }
-  x_24 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float4 func_() {
-  return float4(1.0f, 0.0f, 0.0f, 1.0f);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1bc94ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float4 x_24 = 0.0f;
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int const x_26 = x_6.one;
-  if ((x_26 == 0)) {
-    return;
-  }
-  x_24 = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float4 func_() {
-  return float4(1.0f, 0.0f, 0.0f, 1.0f);
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4003fa1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,88 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 46
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %x_24 "x_24"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %func_ "func_"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %32 = OpTypeFunction %main_out
-         %43 = OpTypeFunction %v4float
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_24 = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %x_GLF_color %19
-         %23 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %24 = OpLoad %int %23
-         %26 = OpIEqual %bool %24 %int_0
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %28
-         %29 = OpLabel
-               OpReturn
-         %28 = OpLabel
-               OpStore %x_24 %31
-               OpStore %x_GLF_color %31
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %32
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %x_GLF_color
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %40 = OpLabel
-         %41 = OpFunctionCall %main_out %main_inner
-         %42 = OpCompositeExtract %v4float %41 0
-               OpStore %x_GLF_color_1_1 %42
-               OpReturn
-               OpFunctionEnd
-      %func_ = OpFunction %v4float None %43
-         %45 = OpLabel
-               OpReturnValue %31
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a354d57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-types-return-in-main-never-hit/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,35 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var x_24 : vec4<f32>;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_26 : i32 = x_6.one;
-  if ((x_26 == 0)) {
-    return;
-  }
-  x_24 = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn func_() -> vec4<f32> {
-  return vec4<f32>(1.0, 0.0, 0.0, 1.0);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0670ecb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m24 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float a = 0.0f;
-  float2 v2 = float2(0.0f, 0.0f);
-  float2 v3 = float2(0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_44 = asfloat(x_8[0].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  m24 = float2x2(float2(x_40, x_42), float2((x_44 * 1.0f), x_47));
-  a = m24[0u].x;
-  v2 = float2(asfloat(0x7fc00000u), 1.0f);
-  const float2 x_53 = v2;
-  const float2 x_55 = float2(a, 1.0f);
-  v3 = reflect(x_53, x_55);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_58 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float2 x_59 = v3;
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_61 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  x_GLF_color = float4(x_58, x_59.x, x_59.y, x_61);
-  const float x_66 = asfloat(x_8[0].y);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_68 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  if ((x_66 == x_68)) {
-    const float4 x_73 = x_GLF_color;
-    x_GLF_color = float4(x_73.x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y, x_73.w);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6fed219..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float2x2 m24 = float2x2(0.0f);
-  float a = 0.0f;
-  float2 v2 = 0.0f;
-  float2 v3 = 0.0f;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_44 = x_8.v1.x;
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  m24 = float2x2(float2(x_40, x_42), float2((x_44 * 1.0f), x_47));
-  float2x2 const x_51 = m24;
-  a = x_51[0u].x;
-  v2 = float2(NAN, 1.0f);
-  float2 const x_53 = v2;
-  float const x_54 = a;
-  float2 const x_55 = float2(x_54, 1.0f);
-  v3 = reflect(x_53, x_55);
-  float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float2 const x_59 = v3;
-  float const x_61 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  *(tint_symbol_3) = float4(x_58, x_59.x, x_59.y, x_61);
-  float const x_66 = x_8.v1.y;
-  float const x_68 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_66 == x_68)) {
-    float4 const x_73 = *(tint_symbol_3);
-    *(tint_symbol_3) = float4(x_73.x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y, x_73.w);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 156c44ec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 97
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m24 "m24"
-               OpName %a "a"
-               OpName %v2 "v2"
-               OpName %v3 "v3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %25 = OpConstantNull %mat2v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %31 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-%float_n0x1_8p_128 = OpConstant %float -0x1.8p+128
-         %54 = OpConstantComposite %v2float %float_n0x1_8p_128 %float_1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %80 = OpConstantComposite %v2float %float_0 %float_0
-         %85 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %86 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-        %m24 = OpVariable %_ptr_Function_mat2v2float Function %25
-          %a = OpVariable %_ptr_Function_float Function %28
-         %v2 = OpVariable %_ptr_Function_v2float Function %31
-         %v3 = OpVariable %_ptr_Function_v2float Function %31
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %42 = OpLoad %float %41
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %45 = OpCompositeConstruct %v2float %38 %40
-         %47 = OpFMul %float %42 %float_1
-         %48 = OpCompositeConstruct %v2float %47 %44
-         %49 = OpCompositeConstruct %mat2v2float %45 %48
-               OpStore %m24 %49
-         %50 = OpLoad %mat2v2float %m24
-         %51 = OpCompositeExtract %v2float %50 0
-         %52 = OpCompositeExtract %float %51 0
-               OpStore %a %52
-               OpStore %v2 %54
-         %55 = OpLoad %v2float %v2
-         %56 = OpLoad %float %a
-         %57 = OpCompositeConstruct %v2float %56 %float_1
-         %58 = OpExtInst %v2float %59 Reflect %55 %57
-               OpStore %v3 %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpLoad %v2float %v3
-         %63 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %64 = OpLoad %float %63
-         %65 = OpCompositeExtract %float %62 0
-         %66 = OpCompositeExtract %float %62 1
-         %67 = OpCompositeConstruct %v4float %61 %65 %66 %64
-               OpStore %x_GLF_color %67
-         %68 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %69 = OpLoad %float %68
-         %70 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %71 = OpLoad %float %70
-         %72 = OpFOrdEqual %bool %69 %71
-               OpSelectionMerge %74 None
-               OpBranchConditional %72 %75 %76
-         %75 = OpLabel
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeExtract %float %77 0
-         %81 = OpCompositeExtract %float %80 0
-         %82 = OpCompositeExtract %float %80 1
-         %83 = OpCompositeExtract %float %77 3
-         %84 = OpCompositeConstruct %v4float %78 %81 %82 %83
-               OpStore %x_GLF_color %84
-               OpBranch %74
-         %76 = OpLabel
-               OpStore %x_GLF_color %85
-               OpBranch %74
-         %74 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %86
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %94 = OpLabel
-         %95 = OpFunctionCall %main_out %main_inner
-         %96 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %96
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 483443b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m24 : mat2x2<f32>;
-  var a : f32;
-  var v2 : vec2<f32>;
-  var v3 : vec2<f32>;
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_44 : f32 = x_8.v1.x;
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[0];
-  m24 = mat2x2<f32>(vec2<f32>(x_40, x_42), vec2<f32>((x_44 * 1.0), x_47));
-  let x_51 : mat2x2<f32> = m24;
-  a = x_51[0u].x;
-  v2 = vec2<f32>(-0x1.8p+128, 1.0);
-  let x_53 : vec2<f32> = v2;
-  let x_54 : f32 = a;
-  let x_55 : vec2<f32> = vec2<f32>(x_54, 1.0);
-  v3 = reflect(x_53, x_55);
-  let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_59 : vec2<f32> = v3;
-  let x_61 : f32 = x_6.x_GLF_uniform_float_values[0];
-  x_GLF_color = vec4<f32>(x_58, x_59.x, x_59.y, x_61);
-  let x_66 : f32 = x_8.v1.y;
-  let x_68 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_66 == x_68)) {
-    let x_73 : vec4<f32> = x_GLF_color;
-    x_GLF_color = vec4<f32>(x_73.x, vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y, x_73.w);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5513092..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 m24 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float a = 0.0f;
-  float2 v2 = float2(0.0f, 0.0f);
-  float2 v3 = float2(0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_42 = asfloat(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const float x_44 = asfloat(x_8[0].x);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_47 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  m24 = float2x2(float2(x_40, x_42), float2((x_44 * 1.0f), x_47));
-  a = m24[0u].x;
-  v2 = float2(asfloat(0xff800000u), 1.0f);
-  v3 = reflect(v2, float2(a, 1.0f));
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_58 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float2 x_59 = v3;
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_61 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  x_GLF_color = float4(x_58, x_59.x, x_59.y, x_61);
-  const float x_66 = asfloat(x_8[0].y);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_68 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  if ((x_66 == x_68)) {
-    const float4 x_73 = x_GLF_color;
-    x_GLF_color = float4(x_73.x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y, x_73.w);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.msl
deleted file mode 100644
index c0b4346..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct buf1 {
-  /* 0x0000 */ float2 v1;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float2x2 m24 = float2x2(0.0f);
-  float a = 0.0f;
-  float2 v2 = 0.0f;
-  float2 v3 = 0.0f;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_44 = x_8.v1.x;
-  float const x_47 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  m24 = float2x2(float2(x_40, x_42), float2((x_44 * 1.0f), x_47));
-  float2x2 const x_51 = m24;
-  a = x_51[0u].x;
-  v2 = float2(-INFINITY, 1.0f);
-  float2 const x_53 = v2;
-  float const x_54 = a;
-  v3 = reflect(x_53, float2(x_54, 1.0f));
-  float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float2 const x_59 = v3;
-  float const x_61 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  *(tint_symbol_3) = float4(x_58, x_59.x, x_59.y, x_61);
-  float const x_66 = x_8.v1.y;
-  float const x_68 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_66 == x_68)) {
-    float4 const x_73 = *(tint_symbol_3);
-    *(tint_symbol_3) = float4(x_73.x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y, x_73.w);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e5eebfd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 97
-; Schema: 0
-               OpCapability Shader
-         %58 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "v1"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m24 "m24"
-               OpName %a "a"
-               OpName %v2 "v2"
-               OpName %v3 "v3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %25 = OpConstantNull %mat2v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %31 = OpConstantNull %v2float
-     %uint_0 = OpConstant %uint 0
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-%float_n0x1p_128 = OpConstant %float -0x1p+128
-         %54 = OpConstantComposite %v2float %float_n0x1p_128 %float_1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %80 = OpConstantComposite %v2float %float_0 %float_0
-         %85 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %86 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-        %m24 = OpVariable %_ptr_Function_mat2v2float Function %25
-          %a = OpVariable %_ptr_Function_float Function %28
-         %v2 = OpVariable %_ptr_Function_v2float Function %31
-         %v3 = OpVariable %_ptr_Function_v2float Function %31
-         %37 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %38 = OpLoad %float %37
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %42 = OpLoad %float %41
-         %43 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %44 = OpLoad %float %43
-         %45 = OpCompositeConstruct %v2float %38 %40
-         %47 = OpFMul %float %42 %float_1
-         %48 = OpCompositeConstruct %v2float %47 %44
-         %49 = OpCompositeConstruct %mat2v2float %45 %48
-               OpStore %m24 %49
-         %50 = OpLoad %mat2v2float %m24
-         %51 = OpCompositeExtract %v2float %50 0
-         %52 = OpCompositeExtract %float %51 0
-               OpStore %a %52
-               OpStore %v2 %54
-         %55 = OpLoad %v2float %v2
-         %56 = OpLoad %float %a
-         %59 = OpCompositeConstruct %v2float %56 %float_1
-         %57 = OpExtInst %v2float %58 Reflect %55 %59
-               OpStore %v3 %57
-         %60 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpLoad %v2float %v3
-         %63 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %64 = OpLoad %float %63
-         %65 = OpCompositeExtract %float %62 0
-         %66 = OpCompositeExtract %float %62 1
-         %67 = OpCompositeConstruct %v4float %61 %65 %66 %64
-               OpStore %x_GLF_color %67
-         %68 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %69 = OpLoad %float %68
-         %70 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %71 = OpLoad %float %70
-         %72 = OpFOrdEqual %bool %69 %71
-               OpSelectionMerge %74 None
-               OpBranchConditional %72 %75 %76
-         %75 = OpLabel
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeExtract %float %77 0
-         %81 = OpCompositeExtract %float %80 0
-         %82 = OpCompositeExtract %float %80 1
-         %83 = OpCompositeExtract %float %77 3
-         %84 = OpCompositeConstruct %v4float %78 %81 %82 %83
-               OpStore %x_GLF_color %84
-               OpBranch %74
-         %76 = OpLabel
-               OpStore %x_GLF_color %85
-               OpBranch %74
-         %74 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %86
-         %89 = OpLabel
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-         %94 = OpLabel
-         %95 = OpFunctionCall %main_out %main_inner
-         %96 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %96
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index eb36e3b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-undefined-inversesqrt-reflect/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-[[block]]
-struct buf1 {
-  v1 : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m24 : mat2x2<f32>;
-  var a : f32;
-  var v2 : vec2<f32>;
-  var v3 : vec2<f32>;
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_44 : f32 = x_8.v1.x;
-  let x_47 : f32 = x_6.x_GLF_uniform_float_values[0];
-  m24 = mat2x2<f32>(vec2<f32>(x_40, x_42), vec2<f32>((x_44 * 1.0), x_47));
-  let x_51 : mat2x2<f32> = m24;
-  a = x_51[0u].x;
-  v2 = vec2<f32>(-0x1p+128, 1.0);
-  let x_53 : vec2<f32> = v2;
-  let x_54 : f32 = a;
-  v3 = reflect(x_53, vec2<f32>(x_54, 1.0));
-  let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_59 : vec2<f32> = v3;
-  let x_61 : f32 = x_6.x_GLF_uniform_float_values[0];
-  x_GLF_color = vec4<f32>(x_58, x_59.x, x_59.y, x_61);
-  let x_66 : f32 = x_8.v1.y;
-  let x_68 : f32 = x_6.x_GLF_uniform_float_values[0];
-  if ((x_66 == x_68)) {
-    let x_73 : vec4<f32> = x_GLF_color;
-    x_GLF_color = vec4<f32>(x_73.x, vec2<f32>(0.0, 0.0).x, vec2<f32>(0.0, 0.0).y, x_73.w);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7b2449d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,95 +0,0 @@
-struct S {
-  int data;
-};
-
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_struct_S_i11_i1_(inout S s, inout int x) {
-  const int x_103 = asint(x_9[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_105 = asint(x_9[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_103 == x_105)) {
-    return;
-  }
-  const int x_109 = x;
-  s.data = x_109;
-  return;
-}
-
-void main_1() {
-  int i = 0;
-  S arr[10] = (S[10])0;
-  int index = 0;
-  S param = (S)0;
-  int param_1 = 0;
-  S param_2 = (S)0;
-  int param_3 = 0;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      arr[i].data = 0;
-    }
-  }
-  const int x_51 = asint(x_9[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_51 == x_53)) {
-    const int x_58 = index;
-    const S x_60 = arr[x_58];
-    param = x_60;
-    param_1 = index;
-    func_struct_S_i11_i1_(param, param_1);
-    arr[x_58] = param;
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const S x_68 = arr[x_66];
-    param_2 = x_68;
-    const int x_70 = asint(x_9[1].x);
-    param_3 = x_70;
-    func_struct_S_i11_i1_(param_2, param_3);
-    arr[x_66] = param_2;
-  }
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_75 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_77 = arr[x_75].data;
-  const int x_79 = asint(x_9[1].x);
-  if ((x_77 == x_79)) {
-    const int x_85 = asint(x_9[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_88 = asint(x_9[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_91 = asint(x_9[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_94 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_85), float(x_88), float(x_91), float(x_94));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_98 = asint(x_9[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_99 = float(x_98);
-    x_GLF_color = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3bfed4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int data;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  S arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_struct_S_i11_i1_(constant buf0& x_9, thread S* const s, thread int* const x) {
-  int const x_103 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  int const x_105 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_103 == x_105)) {
-    return;
-  }
-  int const x_109 = *(x);
-  (*(s)).data = x_109;
-  return;
-}
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 arr = {};
-  int index = 0;
-  S param = {};
-  int param_1 = 0;
-  S param_2 = {};
-  int param_3 = 0;
-  i = 0;
-  while (true) {
-    int const x_43 = i;
-    if ((x_43 < 10)) {
-    } else {
-      break;
-    }
-    int const x_46 = i;
-    arr.arr[x_46].data = 0;
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  int const x_51 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  int const x_53 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_51 == x_53)) {
-    int const x_58 = index;
-    S const x_60 = arr.arr[x_58];
-    param = x_60;
-    int const x_61 = index;
-    param_1 = x_61;
-    func_struct_S_i11_i1_(x_9, &(param), &(param_1));
-    S const x_63 = param;
-    arr.arr[x_58] = x_63;
-  } else {
-    int const x_66 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    S const x_68 = arr.arr[x_66];
-    param_2 = x_68;
-    int const x_70 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    param_3 = x_70;
-    func_struct_S_i11_i1_(x_9, &(param_2), &(param_3));
-    S const x_72 = param_2;
-    arr.arr[x_66] = x_72;
-  }
-  int const x_75 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  int const x_77 = arr.arr[x_75].data;
-  int const x_79 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_77 == x_79)) {
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_88 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_91 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_94 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_85), float(x_88), float(x_91), float(x_94));
-  } else {
-    int const x_98 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    float const x_99 = float(x_98);
-    *(tint_symbol_3) = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index bfb6c97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,211 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 136
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "data"
-               OpName %func_struct_S_i11_i1_ "func_struct_S_i11_i1_"
-               OpName %s "s"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %arr "arr"
-               OpName %index "index"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_S_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %S = OpTypeStruct %int
-%_ptr_Function_S = OpTypePointer Function %S
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpTypeFunction %void %_ptr_Function_S %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-         %40 = OpTypeFunction %void
-         %44 = OpConstantNull %int
-    %uint_10 = OpConstant %uint 10
-%_arr_S_uint_10 = OpTypeArray %S %uint_10
-%_ptr_Function__arr_S_uint_10 = OpTypePointer Function %_arr_S_uint_10
-         %49 = OpConstantNull %_arr_S_uint_10
-         %52 = OpConstantNull %S
-     %int_10 = OpConstant %int 10
-   %main_out = OpTypeStruct %v4float
-        %125 = OpTypeFunction %main_out
-%func_struct_S_i11_i1_ = OpFunction %void None %15
-          %s = OpFunctionParameter %_ptr_Function_S
-          %x = OpFunctionParameter %_ptr_Function_int
-         %23 = OpLabel
-         %27 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %30 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpIEqual %bool %28 %31
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %34
-         %35 = OpLabel
-               OpReturn
-         %34 = OpLabel
-         %37 = OpLoad %int %x
-         %39 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %39 %37
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %40
-         %42 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %44
-        %arr = OpVariable %_ptr_Function__arr_S_uint_10 Function %49
-      %index = OpVariable %_ptr_Function_int Function %44
-      %param = OpVariable %_ptr_Function_S Function %52
-    %param_1 = OpVariable %_ptr_Function_int Function %44
-    %param_2 = OpVariable %_ptr_Function_S Function %52
-    %param_3 = OpVariable %_ptr_Function_int Function %44
-               OpStore %i %int_0
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %60 = OpLoad %int %i
-         %62 = OpSLessThan %bool %60 %int_10
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %57
-         %63 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpAccessChain %_ptr_Function_int %arr %66 %uint_0
-               OpStore %67 %int_0
-               OpBranch %58
-         %58 = OpLabel
-         %68 = OpLoad %int %i
-         %69 = OpIAdd %int %68 %int_1
-               OpStore %i %69
-               OpBranch %56
-         %57 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpIEqual %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpLoad %int %index
-         %79 = OpAccessChain %_ptr_Function_S %arr %78
-         %80 = OpLoad %S %79
-               OpStore %param %80
-         %81 = OpLoad %int %index
-               OpStore %param_1 %81
-         %82 = OpFunctionCall %void %func_struct_S_i11_i1_ %param %param_1
-         %85 = OpLoad %S %param
-         %86 = OpAccessChain %_ptr_Function_S %arr %78
-               OpStore %86 %85
-               OpBranch %75
-         %77 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Function_S %arr %88
-         %90 = OpLoad %S %89
-               OpStore %param_2 %90
-         %91 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %92 = OpLoad %int %91
-               OpStore %param_3 %92
-         %93 = OpFunctionCall %void %func_struct_S_i11_i1_ %param_2 %param_3
-         %96 = OpLoad %S %param_2
-         %97 = OpAccessChain %_ptr_Function_S %arr %88
-               OpStore %97 %96
-               OpBranch %75
-         %75 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Function_int %arr %99 %uint_0
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %103 = OpLoad %int %102
-        %104 = OpIEqual %bool %101 %103
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %107
-        %106 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %111 = OpLoad %int %110
-        %112 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %115 = OpLoad %int %114
-        %116 = OpConvertSToF %float %109
-        %117 = OpConvertSToF %float %111
-        %118 = OpConvertSToF %float %113
-        %119 = OpConvertSToF %float %115
-        %120 = OpCompositeConstruct %v4float %116 %117 %118 %119
-               OpStore %x_GLF_color %120
-               OpBranch %105
-        %107 = OpLabel
-        %121 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %122 = OpLoad %int %121
-        %123 = OpConvertSToF %float %122
-        %124 = OpCompositeConstruct %v4float %123 %123 %123 %123
-               OpStore %x_GLF_color %124
-               OpBranch %105
-        %105 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %125
-        %128 = OpLabel
-        %129 = OpFunctionCall %void %main_1
-        %130 = OpLoad %v4float %x_GLF_color
-        %131 = OpCompositeConstruct %main_out %130
-               OpReturnValue %131
-               OpFunctionEnd
-       %main = OpFunction %void None %40
-        %133 = OpLabel
-        %134 = OpFunctionCall %main_out %main_inner
-        %135 = OpCompositeExtract %v4float %134 0
-               OpStore %x_GLF_color_1_1 %135
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b1a8e78..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-struct S {
-  data : i32;
-};
-
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i11_i1_(s : ptr<function, S>, x : ptr<function, i32>) {
-  let x_103 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_105 : i32 = x_9.x_GLF_uniform_int_values[0];
-  if ((x_103 == x_105)) {
-    return;
-  }
-  let x_109 : i32 = *(x);
-  (*(s)).data = x_109;
-  return;
-}
-
-fn main_1() {
-  var i : i32;
-  var arr : array<S, 10>;
-  var index : i32;
-  var param : S;
-  var param_1 : i32;
-  var param_2 : S;
-  var param_3 : i32;
-  i = 0;
-  loop {
-    let x_43 : i32 = i;
-    if ((x_43 < 10)) {
-    } else {
-      break;
-    }
-    let x_46 : i32 = i;
-    arr[x_46].data = 0;
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_51 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_53 : i32 = x_9.x_GLF_uniform_int_values[0];
-  if ((x_51 == x_53)) {
-    let x_58 : i32 = index;
-    let x_60 : S = arr[x_58];
-    param = x_60;
-    let x_61 : i32 = index;
-    param_1 = x_61;
-    func_struct_S_i11_i1_(&(param), &(param_1));
-    let x_63 : S = param;
-    arr[x_58] = x_63;
-  } else {
-    let x_66 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_68 : S = arr[x_66];
-    param_2 = x_68;
-    let x_70 : i32 = x_9.x_GLF_uniform_int_values[1];
-    param_3 = x_70;
-    func_struct_S_i11_i1_(&(param_2), &(param_3));
-    let x_72 : S = param_2;
-    arr[x_66] = x_72;
-  }
-  let x_75 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_77 : i32 = arr[x_75].data;
-  let x_79 : i32 = x_9.x_GLF_uniform_int_values[1];
-  if ((x_77 == x_79)) {
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_88 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_91 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_94 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_85), f32(x_88), f32(x_91), f32(x_94));
-  } else {
-    let x_98 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_99 : f32 = f32(x_98);
-    x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7b2449d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,95 +0,0 @@
-struct S {
-  int data;
-};
-
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_struct_S_i11_i1_(inout S s, inout int x) {
-  const int x_103 = asint(x_9[1].x);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_105 = asint(x_9[scalar_offset / 4][scalar_offset % 4]);
-  if ((x_103 == x_105)) {
-    return;
-  }
-  const int x_109 = x;
-  s.data = x_109;
-  return;
-}
-
-void main_1() {
-  int i = 0;
-  S arr[10] = (S[10])0;
-  int index = 0;
-  S param = (S)0;
-  int param_1 = 0;
-  S param_2 = (S)0;
-  int param_3 = 0;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      arr[i].data = 0;
-    }
-  }
-  const int x_51 = asint(x_9[1].x);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_51 == x_53)) {
-    const int x_58 = index;
-    const S x_60 = arr[x_58];
-    param = x_60;
-    param_1 = index;
-    func_struct_S_i11_i1_(param, param_1);
-    arr[x_58] = param;
-  } else {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_9[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const S x_68 = arr[x_66];
-    param_2 = x_68;
-    const int x_70 = asint(x_9[1].x);
-    param_3 = x_70;
-    func_struct_S_i11_i1_(param_2, param_3);
-    arr[x_66] = param_2;
-  }
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_75 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const int x_77 = arr[x_75].data;
-  const int x_79 = asint(x_9[1].x);
-  if ((x_77 == x_79)) {
-    const int x_85 = asint(x_9[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_88 = asint(x_9[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_91 = asint(x_9[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    const int x_94 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_85), float(x_88), float(x_91), float(x_94));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_98 = asint(x_9[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_99 = float(x_98);
-    x_GLF_color = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3bfed4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int data;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  S arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_struct_S_i11_i1_(constant buf0& x_9, thread S* const s, thread int* const x) {
-  int const x_103 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  int const x_105 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_103 == x_105)) {
-    return;
-  }
-  int const x_109 = *(x);
-  (*(s)).data = x_109;
-  return;
-}
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 arr = {};
-  int index = 0;
-  S param = {};
-  int param_1 = 0;
-  S param_2 = {};
-  int param_3 = 0;
-  i = 0;
-  while (true) {
-    int const x_43 = i;
-    if ((x_43 < 10)) {
-    } else {
-      break;
-    }
-    int const x_46 = i;
-    arr.arr[x_46].data = 0;
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  int const x_51 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  int const x_53 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_51 == x_53)) {
-    int const x_58 = index;
-    S const x_60 = arr.arr[x_58];
-    param = x_60;
-    int const x_61 = index;
-    param_1 = x_61;
-    func_struct_S_i11_i1_(x_9, &(param), &(param_1));
-    S const x_63 = param;
-    arr.arr[x_58] = x_63;
-  } else {
-    int const x_66 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    S const x_68 = arr.arr[x_66];
-    param_2 = x_68;
-    int const x_70 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    param_3 = x_70;
-    func_struct_S_i11_i1_(x_9, &(param_2), &(param_3));
-    S const x_72 = param_2;
-    arr.arr[x_66] = x_72;
-  }
-  int const x_75 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  int const x_77 = arr.arr[x_75].data;
-  int const x_79 = x_9.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_77 == x_79)) {
-    int const x_85 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_88 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_91 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_94 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_85), float(x_88), float(x_91), float(x_94));
-  } else {
-    int const x_98 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    float const x_99 = float(x_98);
-    *(tint_symbol_3) = float4(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index bfb6c97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,211 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 136
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %S "S"
-               OpMemberName %S 0 "data"
-               OpName %func_struct_S_i11_i1_ "func_struct_S_i11_i1_"
-               OpName %s "s"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %arr "arr"
-               OpName %index "index"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_arr_S_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %S = OpTypeStruct %int
-%_ptr_Function_S = OpTypePointer Function %S
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpTypeFunction %void %_ptr_Function_S %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-         %40 = OpTypeFunction %void
-         %44 = OpConstantNull %int
-    %uint_10 = OpConstant %uint 10
-%_arr_S_uint_10 = OpTypeArray %S %uint_10
-%_ptr_Function__arr_S_uint_10 = OpTypePointer Function %_arr_S_uint_10
-         %49 = OpConstantNull %_arr_S_uint_10
-         %52 = OpConstantNull %S
-     %int_10 = OpConstant %int 10
-   %main_out = OpTypeStruct %v4float
-        %125 = OpTypeFunction %main_out
-%func_struct_S_i11_i1_ = OpFunction %void None %15
-          %s = OpFunctionParameter %_ptr_Function_S
-          %x = OpFunctionParameter %_ptr_Function_int
-         %23 = OpLabel
-         %27 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %30 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %31 = OpLoad %int %30
-         %32 = OpIEqual %bool %28 %31
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %34
-         %35 = OpLabel
-               OpReturn
-         %34 = OpLabel
-         %37 = OpLoad %int %x
-         %39 = OpAccessChain %_ptr_Function_int %s %uint_0
-               OpStore %39 %37
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %40
-         %42 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %44
-        %arr = OpVariable %_ptr_Function__arr_S_uint_10 Function %49
-      %index = OpVariable %_ptr_Function_int Function %44
-      %param = OpVariable %_ptr_Function_S Function %52
-    %param_1 = OpVariable %_ptr_Function_int Function %44
-    %param_2 = OpVariable %_ptr_Function_S Function %52
-    %param_3 = OpVariable %_ptr_Function_int Function %44
-               OpStore %i %int_0
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %60 = OpLoad %int %i
-         %62 = OpSLessThan %bool %60 %int_10
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %57
-         %63 = OpLabel
-         %66 = OpLoad %int %i
-         %67 = OpAccessChain %_ptr_Function_int %arr %66 %uint_0
-               OpStore %67 %int_0
-               OpBranch %58
-         %58 = OpLabel
-         %68 = OpLoad %int %i
-         %69 = OpIAdd %int %68 %int_1
-               OpStore %i %69
-               OpBranch %56
-         %57 = OpLabel
-         %70 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %73 = OpLoad %int %72
-         %74 = OpIEqual %bool %71 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpLoad %int %index
-         %79 = OpAccessChain %_ptr_Function_S %arr %78
-         %80 = OpLoad %S %79
-               OpStore %param %80
-         %81 = OpLoad %int %index
-               OpStore %param_1 %81
-         %82 = OpFunctionCall %void %func_struct_S_i11_i1_ %param %param_1
-         %85 = OpLoad %S %param
-         %86 = OpAccessChain %_ptr_Function_S %arr %78
-               OpStore %86 %85
-               OpBranch %75
-         %77 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Function_S %arr %88
-         %90 = OpLoad %S %89
-               OpStore %param_2 %90
-         %91 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-         %92 = OpLoad %int %91
-               OpStore %param_3 %92
-         %93 = OpFunctionCall %void %func_struct_S_i11_i1_ %param_2 %param_3
-         %96 = OpLoad %S %param_2
-         %97 = OpAccessChain %_ptr_Function_S %arr %88
-               OpStore %97 %96
-               OpBranch %75
-         %75 = OpLabel
-         %98 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Function_int %arr %99 %uint_0
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %103 = OpLoad %int %102
-        %104 = OpIEqual %bool %101 %103
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %107
-        %106 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %111 = OpLoad %int %110
-        %112 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %115 = OpLoad %int %114
-        %116 = OpConvertSToF %float %109
-        %117 = OpConvertSToF %float %111
-        %118 = OpConvertSToF %float %113
-        %119 = OpConvertSToF %float %115
-        %120 = OpCompositeConstruct %v4float %116 %117 %118 %119
-               OpStore %x_GLF_color %120
-               OpBranch %105
-        %107 = OpLabel
-        %121 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %122 = OpLoad %int %121
-        %123 = OpConvertSToF %float %122
-        %124 = OpCompositeConstruct %v4float %123 %123 %123 %123
-               OpStore %x_GLF_color %124
-               OpBranch %105
-        %105 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %125
-        %128 = OpLabel
-        %129 = OpFunctionCall %void %main_1
-        %130 = OpLoad %v4float %x_GLF_color
-        %131 = OpCompositeConstruct %main_out %130
-               OpReturnValue %131
-               OpFunctionEnd
-       %main = OpFunction %void None %40
-        %133 = OpLabel
-        %134 = OpFunctionCall %main_out %main_inner
-        %135 = OpCompositeExtract %v4float %134 0
-               OpStore %x_GLF_color_1_1 %135
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b1a8e78..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-uninitialized-values-passed-to-function-never-executed/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-struct S {
-  data : i32;
-};
-
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_struct_S_i11_i1_(s : ptr<function, S>, x : ptr<function, i32>) {
-  let x_103 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_105 : i32 = x_9.x_GLF_uniform_int_values[0];
-  if ((x_103 == x_105)) {
-    return;
-  }
-  let x_109 : i32 = *(x);
-  (*(s)).data = x_109;
-  return;
-}
-
-fn main_1() {
-  var i : i32;
-  var arr : array<S, 10>;
-  var index : i32;
-  var param : S;
-  var param_1 : i32;
-  var param_2 : S;
-  var param_3 : i32;
-  i = 0;
-  loop {
-    let x_43 : i32 = i;
-    if ((x_43 < 10)) {
-    } else {
-      break;
-    }
-    let x_46 : i32 = i;
-    arr[x_46].data = 0;
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_51 : i32 = x_9.x_GLF_uniform_int_values[1];
-  let x_53 : i32 = x_9.x_GLF_uniform_int_values[0];
-  if ((x_51 == x_53)) {
-    let x_58 : i32 = index;
-    let x_60 : S = arr[x_58];
-    param = x_60;
-    let x_61 : i32 = index;
-    param_1 = x_61;
-    func_struct_S_i11_i1_(&(param), &(param_1));
-    let x_63 : S = param;
-    arr[x_58] = x_63;
-  } else {
-    let x_66 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_68 : S = arr[x_66];
-    param_2 = x_68;
-    let x_70 : i32 = x_9.x_GLF_uniform_int_values[1];
-    param_3 = x_70;
-    func_struct_S_i11_i1_(&(param_2), &(param_3));
-    let x_72 : S = param_2;
-    arr[x_66] = x_72;
-  }
-  let x_75 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_77 : i32 = arr[x_75].data;
-  let x_79 : i32 = x_9.x_GLF_uniform_int_values[1];
-  if ((x_77 == x_79)) {
-    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_88 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_91 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_94 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_85), f32(x_88), f32(x_91), f32(x_94));
-  } else {
-    let x_98 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_99 : f32 = f32(x_98);
-    x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 56b40df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-cbuffer cbuffer_x_10 : register(b2, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const uint x_39 = x_6[scalar_offset / 4][scalar_offset % 4];
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const uint x_41 = x_6[scalar_offset_1 / 4][scalar_offset_1 % 4];
-  v = tint_unpack4x8unorm((x_39 / (true ? 92382u : x_41)));
-  const float4 x_45 = v;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_50 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const float x_56 = asfloat(x_10[1].x);
-  const float x_58 = asfloat(x_10[2].x);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_63 = asfloat(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  if ((distance(x_45, float4(float(x_47), float(x_50), float(x_53), (x_56 / x_58))) < x_63)) {
-    const int x_69 = asint(x_8[1].x);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_72 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_75 = asint(x_8[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const int x_78 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_69), float(x_72), float(x_75), float(x_78));
-  } else {
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const int x_82 = asint(x_8[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    const float x_83 = float(x_82);
-    x_GLF_color = float4(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.msl
deleted file mode 100644
index 8dc6a52..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_uint_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[3];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, constant buf2& x_10, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  uint const x_39 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  uint const x_41 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  v = unpack_unorm4x8_to_float((x_39 / select(x_41, 92382u, true)));
-  float4 const x_45 = v;
-  int const x_47 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_50 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_53 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_56 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  float const x_58 = x_10.x_GLF_uniform_float_values.arr[2].el;
-  float const x_63 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  if ((distance(x_45, float4(float(x_47), float(x_50), float(x_53), (x_56 / x_58))) < x_63)) {
-    int const x_69 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_72 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_75 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_78 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_69), float(x_72), float(x_75), float(x_78));
-  } else {
-    int const x_82 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_83 = float(x_82);
-    *(tint_symbol_3) = float4(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, constant buf2& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]], constant buf2& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f242ed0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,159 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 100
-; Schema: 0
-               OpCapability Shader
-         %39 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_uint_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_uint_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 2
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-       %buf0 = OpTypeStruct %_arr_uint_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf2 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_10 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
- %uint_92382 = OpConstant %uint 92382
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %89 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %25
-         %28 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %34 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %35 = OpLoad %uint %34
-         %36 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %37 = OpLoad %uint %36
-         %40 = OpSelect %uint %true %uint_92382 %37
-         %44 = OpUDiv %uint %35 %40
-         %38 = OpExtInst %v4float %39 UnpackUnorm4x8 %44
-               OpStore %v %38
-         %45 = OpLoad %v4float %v
-         %47 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %55 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_2
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %63 = OpConvertSToF %float %48
-         %64 = OpConvertSToF %float %50
-         %65 = OpConvertSToF %float %52
-         %66 = OpFDiv %float %56 %59
-         %67 = OpCompositeConstruct %v4float %63 %64 %65 %66
-         %62 = OpExtInst %float %39 Distance %45 %67
-         %68 = OpFOrdLessThan %bool %62 %61
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %73
-         %81 = OpConvertSToF %float %75
-         %82 = OpConvertSToF %float %77
-         %83 = OpConvertSToF %float %79
-         %84 = OpCompositeConstruct %v4float %80 %81 %82 %83
-               OpStore %x_GLF_color %84
-               OpBranch %69
-         %71 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %86
-         %88 = OpCompositeConstruct %v4float %87 %87 %87 %87
-               OpStore %x_GLF_color %88
-               OpBranch %69
-         %69 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %89
-         %92 = OpLabel
-         %93 = OpFunctionCall %void %main_1
-         %94 = OpLoad %v4float %x_GLF_color
-         %95 = OpCompositeConstruct %main_out %94
-               OpReturnValue %95
-               OpFunctionEnd
-       %main = OpFunction %void None %25
-         %97 = OpLabel
-         %98 = OpFunctionCall %main_out %main_inner
-         %99 = OpCompositeExtract %v4float %98 0
-               OpStore %x_GLF_color_1_1 %99
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b44947b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<u32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_uint_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-type Arr_2 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_float_values : Arr_2;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_39 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  let x_41 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  v = unpack4x8unorm((x_39 / select(x_41, 92382u, true)));
-  let x_45 : vec4<f32> = v;
-  let x_47 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_50 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_53 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_56 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_58 : f32 = x_10.x_GLF_uniform_float_values[2];
-  let x_63 : f32 = x_10.x_GLF_uniform_float_values[0];
-  if ((distance(x_45, vec4<f32>(f32(x_47), f32(x_50), f32(x_53), (x_56 / x_58))) < x_63)) {
-    let x_69 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_72 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_75 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_78 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_69), f32(x_72), f32(x_75), f32(x_78));
-  } else {
-    let x_82 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_83 : f32 = f32(x_82);
-    x_GLF_color = vec4<f32>(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 56b40df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,71 +0,0 @@
-float4 tint_unpack4x8unorm(uint param_0) {
-  uint j = param_0;
-  uint4 i = uint4(j & 0xff, (j >> 8) & 0xff, (j >> 16) & 0xff, j >> 24);
-  return float4(i) / 255.0;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-cbuffer cbuffer_x_10 : register(b2, space0) {
-  uint4 x_10[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const uint x_39 = x_6[scalar_offset / 4][scalar_offset % 4];
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const uint x_41 = x_6[scalar_offset_1 / 4][scalar_offset_1 % 4];
-  v = tint_unpack4x8unorm((x_39 / (true ? 92382u : x_41)));
-  const float4 x_45 = v;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_47 = asint(x_8[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_50 = asint(x_8[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_8[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const float x_56 = asfloat(x_10[1].x);
-  const float x_58 = asfloat(x_10[2].x);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_63 = asfloat(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  if ((distance(x_45, float4(float(x_47), float(x_50), float(x_53), (x_56 / x_58))) < x_63)) {
-    const int x_69 = asint(x_8[1].x);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_72 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_75 = asint(x_8[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const int x_78 = asint(x_8[1].x);
-    x_GLF_color = float4(float(x_69), float(x_72), float(x_75), float(x_78));
-  } else {
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const int x_82 = asint(x_8[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    const float x_83 = float(x_82);
-    x_GLF_color = float4(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.msl
deleted file mode 100644
index 8dc6a52..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_uint_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[3];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, constant buf2& x_10, thread float4* const tint_symbol_3) {
-  float4 v = 0.0f;
-  uint const x_39 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  uint const x_41 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  v = unpack_unorm4x8_to_float((x_39 / select(x_41, 92382u, true)));
-  float4 const x_45 = v;
-  int const x_47 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_50 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_53 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_56 = x_10.x_GLF_uniform_float_values.arr[1].el;
-  float const x_58 = x_10.x_GLF_uniform_float_values.arr[2].el;
-  float const x_63 = x_10.x_GLF_uniform_float_values.arr[0].el;
-  if ((distance(x_45, float4(float(x_47), float(x_50), float(x_53), (x_56 / x_58))) < x_63)) {
-    int const x_69 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_72 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_75 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_78 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_69), float(x_72), float(x_75), float(x_78));
-  } else {
-    int const x_82 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_83 = float(x_82);
-    *(tint_symbol_3) = float4(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, constant buf2& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]], constant buf2& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f242ed0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,159 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 100
-; Schema: 0
-               OpCapability Shader
-         %39 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_uint_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_uint_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 2
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-       %buf0 = OpTypeStruct %_arr_uint_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf1 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf2 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_10 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %25 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
- %uint_92382 = OpConstant %uint 92382
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %89 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %25
-         %28 = OpLabel
-          %v = OpVariable %_ptr_Function_v4float Function %5
-         %34 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %35 = OpLoad %uint %34
-         %36 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %37 = OpLoad %uint %36
-         %40 = OpSelect %uint %true %uint_92382 %37
-         %44 = OpUDiv %uint %35 %40
-         %38 = OpExtInst %v4float %39 UnpackUnorm4x8 %44
-               OpStore %v %38
-         %45 = OpLoad %v4float %v
-         %47 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %49 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %50 = OpLoad %int %49
-         %51 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %52 = OpLoad %int %51
-         %55 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_1
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_2
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %63 = OpConvertSToF %float %48
-         %64 = OpConvertSToF %float %50
-         %65 = OpConvertSToF %float %52
-         %66 = OpFDiv %float %56 %59
-         %67 = OpCompositeConstruct %v4float %63 %64 %65 %66
-         %62 = OpExtInst %float %39 Distance %45 %67
-         %68 = OpFOrdLessThan %bool %62 %61
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %73
-         %81 = OpConvertSToF %float %75
-         %82 = OpConvertSToF %float %77
-         %83 = OpConvertSToF %float %79
-         %84 = OpCompositeConstruct %v4float %80 %81 %82 %83
-               OpStore %x_GLF_color %84
-               OpBranch %69
-         %71 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %86
-         %88 = OpCompositeConstruct %v4float %87 %87 %87 %87
-               OpStore %x_GLF_color %88
-               OpBranch %69
-         %69 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %89
-         %92 = OpLabel
-         %93 = OpFunctionCall %void %main_1
-         %94 = OpLoad %v4float %x_GLF_color
-         %95 = OpCompositeConstruct %main_out %94
-               OpReturnValue %95
-               OpFunctionEnd
-       %main = OpFunction %void None %25
-         %97 = OpLabel
-         %98 = OpFunctionCall %main_out %main_inner
-         %99 = OpCompositeExtract %v4float %98 0
-               OpStore %x_GLF_color_1_1 %99
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b44947b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unpack-unorm-mix-always-one/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<u32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_uint_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-type Arr_2 = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_float_values : Arr_2;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_10 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec4<f32>;
-  let x_39 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  let x_41 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  v = unpack4x8unorm((x_39 / select(x_41, 92382u, true)));
-  let x_45 : vec4<f32> = v;
-  let x_47 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_50 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_53 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_56 : f32 = x_10.x_GLF_uniform_float_values[1];
-  let x_58 : f32 = x_10.x_GLF_uniform_float_values[2];
-  let x_63 : f32 = x_10.x_GLF_uniform_float_values[0];
-  if ((distance(x_45, vec4<f32>(f32(x_47), f32(x_50), f32(x_53), (x_56 / x_58))) < x_63)) {
-    let x_69 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_72 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_75 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_78 : i32 = x_8.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_69), f32(x_72), f32(x_75), f32(x_78));
-  } else {
-    let x_82 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_83 : f32 = f32(x_82);
-    x_GLF_color = vec4<f32>(x_83, x_83, x_83, x_83);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b3c1f40..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,113 +0,0 @@
-SKIP: FAILED
-
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-struct tint_padded_array_element {
-  float el;
-};
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x3 m43 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  tint_padded_array_element sums[3] = (tint_padded_array_element[3])0;
-  int i = 0;
-  int a = 0;
-  int x_67_phi = 0;
-  const float x_44 = asfloat(x_6[1].x);
-  const float3 x_48 = float3(0.0f, 0.0f, 0.0f);
-  m43 = float4x3(float3(x_44, 0.0f, 0.0f), float3(0.0f, x_44, 0.0f), float3(0.0f, 0.0f, x_44), float3(0.0f, 0.0f, 0.0f));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_51 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_55 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  set_float3(m43[x_51], x_53, x_55);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_58 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_60 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_62 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const tint_padded_array_element tint_symbol_4[3] = {{x_58}, {x_60}, {x_62}};
-  sums = tint_symbol_4;
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const int x_65 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  i = x_65;
-  x_67_phi = x_65;
-  while (true) {
-    const int x_67 = x_67_phi;
-    const int x_73 = asint(x_8[3].x);
-    if ((x_67 < x_73)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_77 = asint(x_8[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const int x_79 = asint(x_8[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    const float x_81 = m43[x_67][x_79];
-    const float x_83 = sums[x_77].el;
-    sums[x_77].el = (x_83 + x_81);
-    {
-      const int x_68 = (x_67 + 1);
-      i = x_68;
-      x_67_phi = x_68;
-    }
-  }
-  const int x_87 = asint(x_8[1].x);
-  if ((x_87 == 1)) {
-    a = 4;
-    const int x_92 = asint(x_8[2].x);
-    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-    const int x_94 = asint(x_8[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-    const float x_96 = m43[4][x_94];
-    const float x_98 = sums[x_92].el;
-    sums[x_92].el = (x_98 + x_96);
-  }
-  const int x_102 = asint(x_8[1].x);
-  const float x_104 = sums[x_102].el;
-  const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-  const int x_106 = asint(x_8[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-  const float x_108 = sums[x_106].el;
-  const float x_111 = asfloat(x_6[2].x);
-  if (((x_104 + x_108) == x_111)) {
-    const uint scalar_offset_11 = ((16u * uint(0))) / 4;
-    const int x_117 = asint(x_8[scalar_offset_11 / 4][scalar_offset_11 % 4]);
-    const int x_120 = asint(x_8[1].x);
-    const int x_123 = asint(x_8[1].x);
-    const uint scalar_offset_12 = ((16u * uint(0))) / 4;
-    const int x_126 = asint(x_8[scalar_offset_12 / 4][scalar_offset_12 % 4]);
-    x_GLF_color = float4(float(x_117), float(x_120), float(x_123), float(x_126));
-  } else {
-    const int x_130 = asint(x_8[1].x);
-    const float x_131 = float(x_130);
-    x_GLF_color = float4(x_131, x_131, x_131, x_131);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_5 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000001D542C02010(32,14-22): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.msl
deleted file mode 100644
index f123d3d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  float4x3 m43 = float4x3(0.0f);
-  tint_array_wrapper sums = {};
-  int i = 0;
-  int a = 0;
-  int x_67_phi = 0;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float3 const x_48 = float3(0.0f, 0.0f, 0.0f);
-  m43 = float4x3(float3(x_44, 0.0f, 0.0f), float3(0.0f, x_44, 0.0f), float3(0.0f, 0.0f, x_44), float3(0.0f, 0.0f, 0.0f));
-  int const x_51 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_53 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_55 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  m43[x_51][x_53] = x_55;
-  float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_60 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_62 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper const tint_symbol_2 = {.arr={{.el=x_58}, {.el=x_60}, {.el=x_62}}};
-  sums = tint_symbol_2;
-  int const x_65 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i = x_65;
-  x_67_phi = x_65;
-  while (true) {
-    int const x_67 = x_67_phi;
-    int const x_73 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_67 < x_73)) {
-    } else {
-      break;
-    }
-    int const x_77 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_79 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_81 = m43[x_67][x_79];
-    float const x_83 = sums.arr[x_77].el;
-    sums.arr[x_77].el = (x_83 + x_81);
-    {
-      int const x_68 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-      i = x_68;
-      x_67_phi = x_68;
-    }
-  }
-  int const x_87 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_87 == 1)) {
-    a = 4;
-    int const x_92 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_94 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_96 = m43[4][x_94];
-    float const x_98 = sums.arr[x_92].el;
-    sums.arr[x_92].el = (x_98 + x_96);
-  }
-  int const x_102 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  float const x_104 = sums.arr[x_102].el;
-  int const x_106 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_108 = sums.arr[x_106].el;
-  float const x_111 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  if (((x_104 + x_108) == x_111)) {
-    int const x_117 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_120 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_123 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_126 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_117), float(x_120), float(x_123), float(x_126));
-  } else {
-    int const x_130 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_131 = float(x_130);
-    *(tint_symbol_4) = float4(x_131, x_131, x_131, x_131);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_8, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d3f89ac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,226 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m43 "m43"
-               OpName %sums "sums"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %x_67_phi "x_67_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %28 = OpConstantNull %mat4v3float
-%_ptr_Function__arr_float_uint_3 = OpTypePointer Function %_arr_float_uint_3
-         %31 = OpConstantNull %_arr_float_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-         %43 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-        %m43 = OpVariable %_ptr_Function_mat4v3float Function %28
-       %sums = OpVariable %_ptr_Function__arr_float_uint_3 Function %31
-          %i = OpVariable %_ptr_Function_int Function %34
-          %a = OpVariable %_ptr_Function_int Function %34
-   %x_67_phi = OpVariable %_ptr_Function_int Function %34
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %41 = OpLoad %float %40
-         %44 = OpCompositeConstruct %v3float %41 %float_0 %float_0
-         %45 = OpCompositeConstruct %v3float %float_0 %41 %float_0
-         %46 = OpCompositeConstruct %v3float %float_0 %float_0 %41
-         %47 = OpCompositeConstruct %mat4v3float %44 %45 %46 %43
-               OpStore %m43 %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %57 = OpAccessChain %_ptr_Function_float %m43 %51 %53
-               OpStore %57 %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpCompositeConstruct %_arr_float_uint_3 %59 %61 %63
-               OpStore %sums %64
-         %65 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %66 = OpLoad %int %65
-               OpStore %i %66
-               OpStore %x_67_phi %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %x_67_phi
-         %73 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %74 = OpLoad %int %73
-         %75 = OpSLessThan %bool %71 %74
-               OpSelectionMerge %77 None
-               OpBranchConditional %75 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %68
-         %77 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Function_float %m43 %71 %83
-         %85 = OpLoad %float %84
-         %86 = OpAccessChain %_ptr_Function_float %sums %81
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Function_float %sums %81
-         %89 = OpFAdd %float %87 %85
-               OpStore %88 %89
-               OpBranch %69
-         %69 = OpLabel
-         %90 = OpIAdd %int %71 %int_1
-               OpStore %i %90
-               OpStore %x_67_phi %90
-               OpBranch %67
-         %68 = OpLabel
-         %91 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpIEqual %bool %92 %int_1
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %94
-         %95 = OpLabel
-               OpStore %a %int_4
-         %98 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Function_float %m43 %int_4 %101
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Function_float %sums %99
-        %105 = OpLoad %float %104
-        %106 = OpAccessChain %_ptr_Function_float %sums %99
-        %107 = OpFAdd %float %105 %103
-               OpStore %106 %107
-               OpBranch %94
-         %94 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Function_float %sums %109
-        %111 = OpLoad %float %110
-        %112 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Function_float %sums %113
-        %115 = OpLoad %float %114
-        %116 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-        %117 = OpLoad %float %116
-        %118 = OpFAdd %float %111 %115
-        %119 = OpFOrdEqual %bool %118 %117
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %130 = OpLoad %int %129
-        %131 = OpConvertSToF %float %124
-        %132 = OpConvertSToF %float %126
-        %133 = OpConvertSToF %float %128
-        %134 = OpConvertSToF %float %130
-        %135 = OpCompositeConstruct %v4float %131 %132 %133 %134
-               OpStore %x_GLF_color %135
-               OpBranch %120
-        %122 = OpLabel
-        %136 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %137 = OpLoad %int %136
-        %138 = OpConvertSToF %float %137
-        %139 = OpCompositeConstruct %v4float %138 %138 %138 %138
-               OpStore %x_GLF_color %139
-               OpBranch %120
-        %120 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-        %143 = OpLabel
-        %144 = OpFunctionCall %void %main_1
-        %145 = OpLoad %v4float %x_GLF_color
-        %146 = OpCompositeConstruct %main_out %145
-               OpReturnValue %146
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %148 = OpLabel
-        %149 = OpFunctionCall %main_out %main_inner
-        %150 = OpCompositeExtract %v4float %149 0
-               OpStore %x_GLF_color_1_1 %150
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 7c1756e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m43 : mat4x3<f32>;
-  var sums : Arr;
-  var i : i32;
-  var a : i32;
-  var x_67_phi : i32;
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_48 : vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
-  m43 = mat4x3<f32>(vec3<f32>(x_44, 0.0, 0.0), vec3<f32>(0.0, x_44, 0.0), vec3<f32>(0.0, 0.0, x_44), vec3<f32>(0.0, 0.0, 0.0));
-  let x_51 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_53 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_55 : f32 = x_6.x_GLF_uniform_float_values[0];
-  m43[x_51][x_53] = x_55;
-  let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_60 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_62 : f32 = x_6.x_GLF_uniform_float_values[0];
-  sums = Arr(x_58, x_60, x_62);
-  let x_65 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i = x_65;
-  x_67_phi = x_65;
-  loop {
-    let x_67 : i32 = x_67_phi;
-    let x_73 : i32 = x_8.x_GLF_uniform_int_values[3];
-    if ((x_67 < x_73)) {
-    } else {
-      break;
-    }
-    let x_77 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_79 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_81 : f32 = m43[x_67][x_79];
-    let x_83 : f32 = sums[x_77];
-    sums[x_77] = (x_83 + x_81);
-
-    continuing {
-      let x_68 : i32 = (x_67 + 1);
-      i = x_68;
-      x_67_phi = x_68;
-    }
-  }
-  let x_87 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_87 == 1)) {
-    a = 4;
-    let x_92 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_94 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_96 : f32 = m43[4][x_94];
-    let x_98 : f32 = sums[x_92];
-    sums[x_92] = (x_98 + x_96);
-  }
-  let x_102 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_104 : f32 = sums[x_102];
-  let x_106 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_108 : f32 = sums[x_106];
-  let x_111 : f32 = x_6.x_GLF_uniform_float_values[2];
-  if (((x_104 + x_108) == x_111)) {
-    let x_117 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_120 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_123 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_126 : i32 = x_8.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_117), f32(x_120), f32(x_123), f32(x_126));
-  } else {
-    let x_130 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_131 : f32 = f32(x_130);
-    x_GLF_color = vec4<f32>(x_131, x_131, x_131, x_131);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c5b21ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,113 +0,0 @@
-SKIP: FAILED
-
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-struct tint_padded_array_element {
-  float el;
-};
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x3 m43 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  tint_padded_array_element sums[3] = (tint_padded_array_element[3])0;
-  int i = 0;
-  int a = 0;
-  int x_67_phi = 0;
-  const float x_44 = asfloat(x_6[1].x);
-  const float3 x_48 = float3(0.0f, 0.0f, 0.0f);
-  m43 = float4x3(float3(x_44, 0.0f, 0.0f), float3(0.0f, x_44, 0.0f), float3(0.0f, 0.0f, x_44), float3(0.0f, 0.0f, 0.0f));
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_51 = asint(x_8[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_53 = asint(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const float x_55 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  set_float3(m43[x_51], x_53, x_55);
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const float x_58 = asfloat(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_60 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const float x_62 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const tint_padded_array_element tint_symbol_4[3] = {{x_58}, {x_60}, {x_62}};
-  sums = tint_symbol_4;
-  const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-  const int x_65 = asint(x_8[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-  i = x_65;
-  x_67_phi = x_65;
-  while (true) {
-    const int x_67 = x_67_phi;
-    const int x_73 = asint(x_8[3].x);
-    if ((x_67 < x_73)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_77 = asint(x_8[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const uint scalar_offset_8 = ((16u * uint(0))) / 4;
-    const int x_79 = asint(x_8[scalar_offset_8 / 4][scalar_offset_8 % 4]);
-    const float x_81 = m43[x_67][x_79];
-    const float x_83 = sums[x_77].el;
-    sums[x_77].el = (x_83 + x_81);
-    {
-      const int x_68 = (x_67 + 1);
-      i = x_68;
-      x_67_phi = x_68;
-    }
-  }
-  const int x_87 = asint(x_8[1].x);
-  if ((x_87 == 1)) {
-    a = 4;
-    const int x_92 = asint(x_8[2].x);
-    const uint scalar_offset_9 = ((16u * uint(0))) / 4;
-    const int x_94 = asint(x_8[scalar_offset_9 / 4][scalar_offset_9 % 4]);
-    const float x_96 = m43[4][x_94];
-    const float x_98 = sums[x_92].el;
-    sums[x_92].el = (x_98 + x_96);
-  }
-  const int x_102 = asint(x_8[1].x);
-  const float x_104 = sums[x_102].el;
-  const uint scalar_offset_10 = ((16u * uint(0))) / 4;
-  const int x_106 = asint(x_8[scalar_offset_10 / 4][scalar_offset_10 % 4]);
-  const float x_108 = sums[x_106].el;
-  const float x_111 = asfloat(x_6[2].x);
-  if (((x_104 + x_108) == x_111)) {
-    const uint scalar_offset_11 = ((16u * uint(0))) / 4;
-    const int x_117 = asint(x_8[scalar_offset_11 / 4][scalar_offset_11 % 4]);
-    const int x_120 = asint(x_8[1].x);
-    const int x_123 = asint(x_8[1].x);
-    const uint scalar_offset_12 = ((16u * uint(0))) / 4;
-    const int x_126 = asint(x_8[scalar_offset_12 / 4][scalar_offset_12 % 4]);
-    x_GLF_color = float4(float(x_117), float(x_120), float(x_123), float(x_126));
-  } else {
-    const int x_130 = asint(x_8[1].x);
-    const float x_131 = float(x_130);
-    x_GLF_color = float4(x_131, x_131, x_131, x_131);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_5 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000002A8E28000B0(32,14-22): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.msl
deleted file mode 100644
index f123d3d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  float4x3 m43 = float4x3(0.0f);
-  tint_array_wrapper sums = {};
-  int i = 0;
-  int a = 0;
-  int x_67_phi = 0;
-  float const x_44 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  float3 const x_48 = float3(0.0f, 0.0f, 0.0f);
-  m43 = float4x3(float3(x_44, 0.0f, 0.0f), float3(0.0f, x_44, 0.0f), float3(0.0f, 0.0f, x_44), float3(0.0f, 0.0f, 0.0f));
-  int const x_51 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  int const x_53 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_55 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  m43[x_51][x_53] = x_55;
-  float const x_58 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_60 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  float const x_62 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  tint_array_wrapper const tint_symbol_2 = {.arr={{.el=x_58}, {.el=x_60}, {.el=x_62}}};
-  sums = tint_symbol_2;
-  int const x_65 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  i = x_65;
-  x_67_phi = x_65;
-  while (true) {
-    int const x_67 = x_67_phi;
-    int const x_73 = x_8.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_67 < x_73)) {
-    } else {
-      break;
-    }
-    int const x_77 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_79 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_81 = m43[x_67][x_79];
-    float const x_83 = sums.arr[x_77].el;
-    sums.arr[x_77].el = (x_83 + x_81);
-    {
-      int const x_68 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-      i = x_68;
-      x_67_phi = x_68;
-    }
-  }
-  int const x_87 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_87 == 1)) {
-    a = 4;
-    int const x_92 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    int const x_94 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    float const x_96 = m43[4][x_94];
-    float const x_98 = sums.arr[x_92].el;
-    sums.arr[x_92].el = (x_98 + x_96);
-  }
-  int const x_102 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  float const x_104 = sums.arr[x_102].el;
-  int const x_106 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  float const x_108 = sums.arr[x_106].el;
-  float const x_111 = x_6.x_GLF_uniform_float_values.arr[2].el;
-  if (((x_104 + x_108) == x_111)) {
-    int const x_117 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    int const x_120 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_123 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    int const x_126 = x_8.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_4) = float4(float(x_117), float(x_120), float(x_123), float(x_126));
-  } else {
-    int const x_130 = x_8.x_GLF_uniform_int_values.arr[1].el;
-    float const x_131 = float(x_130);
-    *(tint_symbol_4) = float4(x_131, x_131, x_131, x_131);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_8, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d3f89ac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,226 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m43 "m43"
-               OpName %sums "sums"
-               OpName %i "i"
-               OpName %a "a"
-               OpName %x_67_phi "x_67_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %28 = OpConstantNull %mat4v3float
-%_ptr_Function__arr_float_uint_3 = OpTypePointer Function %_arr_float_uint_3
-         %31 = OpConstantNull %_arr_float_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-         %43 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_3 = OpConstant %int 3
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-        %m43 = OpVariable %_ptr_Function_mat4v3float Function %28
-       %sums = OpVariable %_ptr_Function__arr_float_uint_3 Function %31
-          %i = OpVariable %_ptr_Function_int Function %34
-          %a = OpVariable %_ptr_Function_int Function %34
-   %x_67_phi = OpVariable %_ptr_Function_int Function %34
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %41 = OpLoad %float %40
-         %44 = OpCompositeConstruct %v3float %41 %float_0 %float_0
-         %45 = OpCompositeConstruct %v3float %float_0 %41 %float_0
-         %46 = OpCompositeConstruct %v3float %float_0 %float_0 %41
-         %47 = OpCompositeConstruct %mat4v3float %44 %45 %46 %43
-               OpStore %m43 %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %52 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %55 = OpLoad %float %54
-         %57 = OpAccessChain %_ptr_Function_float %m43 %51 %53
-               OpStore %57 %55
-         %58 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %61 = OpLoad %float %60
-         %62 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %63 = OpLoad %float %62
-         %64 = OpCompositeConstruct %_arr_float_uint_3 %59 %61 %63
-               OpStore %sums %64
-         %65 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %66 = OpLoad %int %65
-               OpStore %i %66
-               OpStore %x_67_phi %66
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %x_67_phi
-         %73 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_3
-         %74 = OpLoad %int %73
-         %75 = OpSLessThan %bool %71 %74
-               OpSelectionMerge %77 None
-               OpBranchConditional %75 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %68
-         %77 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %83 = OpLoad %int %82
-         %84 = OpAccessChain %_ptr_Function_float %m43 %71 %83
-         %85 = OpLoad %float %84
-         %86 = OpAccessChain %_ptr_Function_float %sums %81
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Function_float %sums %81
-         %89 = OpFAdd %float %87 %85
-               OpStore %88 %89
-               OpBranch %69
-         %69 = OpLabel
-         %90 = OpIAdd %int %71 %int_1
-               OpStore %i %90
-               OpStore %x_67_phi %90
-               OpBranch %67
-         %68 = OpLabel
-         %91 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpIEqual %bool %92 %int_1
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %94
-         %95 = OpLabel
-               OpStore %a %int_4
-         %98 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %99 = OpLoad %int %98
-        %100 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Function_float %m43 %int_4 %101
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Function_float %sums %99
-        %105 = OpLoad %float %104
-        %106 = OpAccessChain %_ptr_Function_float %sums %99
-        %107 = OpFAdd %float %105 %103
-               OpStore %106 %107
-               OpBranch %94
-         %94 = OpLabel
-        %108 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Function_float %sums %109
-        %111 = OpLoad %float %110
-        %112 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Function_float %sums %113
-        %115 = OpLoad %float %114
-        %116 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-        %117 = OpLoad %float %116
-        %118 = OpFAdd %float %111 %115
-        %119 = OpFOrdEqual %bool %118 %117
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-        %130 = OpLoad %int %129
-        %131 = OpConvertSToF %float %124
-        %132 = OpConvertSToF %float %126
-        %133 = OpConvertSToF %float %128
-        %134 = OpConvertSToF %float %130
-        %135 = OpCompositeConstruct %v4float %131 %132 %133 %134
-               OpStore %x_GLF_color %135
-               OpBranch %120
-        %122 = OpLabel
-        %136 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-        %137 = OpLoad %int %136
-        %138 = OpConvertSToF %float %137
-        %139 = OpCompositeConstruct %v4float %138 %138 %138 %138
-               OpStore %x_GLF_color %139
-               OpBranch %120
-        %120 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-        %143 = OpLabel
-        %144 = OpFunctionCall %void %main_1
-        %145 = OpLoad %v4float %x_GLF_color
-        %146 = OpCompositeConstruct %main_out %145
-               OpReturnValue %146
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %148 = OpLabel
-        %149 = OpFunctionCall %main_out %main_inner
-        %150 = OpCompositeExtract %v4float %149 0
-               OpStore %x_GLF_color_1_1 %150
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7c1756e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-access-past-matrix-elements/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m43 : mat4x3<f32>;
-  var sums : Arr;
-  var i : i32;
-  var a : i32;
-  var x_67_phi : i32;
-  let x_44 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_48 : vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
-  m43 = mat4x3<f32>(vec3<f32>(x_44, 0.0, 0.0), vec3<f32>(0.0, x_44, 0.0), vec3<f32>(0.0, 0.0, x_44), vec3<f32>(0.0, 0.0, 0.0));
-  let x_51 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_53 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_55 : f32 = x_6.x_GLF_uniform_float_values[0];
-  m43[x_51][x_53] = x_55;
-  let x_58 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_60 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_62 : f32 = x_6.x_GLF_uniform_float_values[0];
-  sums = Arr(x_58, x_60, x_62);
-  let x_65 : i32 = x_8.x_GLF_uniform_int_values[0];
-  i = x_65;
-  x_67_phi = x_65;
-  loop {
-    let x_67 : i32 = x_67_phi;
-    let x_73 : i32 = x_8.x_GLF_uniform_int_values[3];
-    if ((x_67 < x_73)) {
-    } else {
-      break;
-    }
-    let x_77 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_79 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_81 : f32 = m43[x_67][x_79];
-    let x_83 : f32 = sums[x_77];
-    sums[x_77] = (x_83 + x_81);
-
-    continuing {
-      let x_68 : i32 = (x_67 + 1);
-      i = x_68;
-      x_67_phi = x_68;
-    }
-  }
-  let x_87 : i32 = x_8.x_GLF_uniform_int_values[1];
-  if ((x_87 == 1)) {
-    a = 4;
-    let x_92 : i32 = x_8.x_GLF_uniform_int_values[2];
-    let x_94 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_96 : f32 = m43[4][x_94];
-    let x_98 : f32 = sums[x_92];
-    sums[x_92] = (x_98 + x_96);
-  }
-  let x_102 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_104 : f32 = sums[x_102];
-  let x_106 : i32 = x_8.x_GLF_uniform_int_values[0];
-  let x_108 : f32 = sums[x_106];
-  let x_111 : f32 = x_6.x_GLF_uniform_float_values[2];
-  if (((x_104 + x_108) == x_111)) {
-    let x_117 : i32 = x_8.x_GLF_uniform_int_values[0];
-    let x_120 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_123 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_126 : i32 = x_8.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_117), f32(x_120), f32(x_123), f32(x_126));
-  } else {
-    let x_130 : i32 = x_8.x_GLF_uniform_int_values[1];
-    let x_131 : f32 = f32(x_130);
-    x_GLF_color = vec4<f32>(x_131, x_131, x_131, x_131);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4465561..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,97 +0,0 @@
-SKIP: FAILED
-
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x4 m0 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int c = 0;
-  float4x4 m1 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_40 = asint(x_6[1].x);
-  const float x_41 = float(x_40);
-  m0 = float4x4(float4(x_41, 0.0f, 0.0f, 0.0f), float4(0.0f, x_41, 0.0f, 0.0f), float4(0.0f, 0.0f, x_41, 0.0f), float4(0.0f, 0.0f, 0.0f, x_41));
-  const int x_48 = asint(x_6[2].x);
-  c = x_48;
-  while (true) {
-    const int x_53 = c;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    m1 = m0;
-    const int x_59 = c;
-    const int x_61 = asint(x_6[3].x);
-    const int x_64 = asint(x_6[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_66 = asfloat(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    set_float4(m1[(x_59 % x_61)], x_64, x_66);
-    const int x_68 = c;
-    const int x_70 = asint(x_6[3].x);
-    const int x_73 = asint(x_6[2].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_75 = asfloat(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    set_float4(m0[(x_68 % x_70)], x_73, x_75);
-    {
-      c = (c + 1);
-    }
-  }
-  const float4x4 x_79 = m0;
-  const int x_81 = asint(x_6[1].x);
-  const int x_84 = asint(x_6[2].x);
-  const int x_87 = asint(x_6[1].x);
-  const int x_90 = asint(x_6[1].x);
-  const int x_93 = asint(x_6[1].x);
-  const int x_96 = asint(x_6[2].x);
-  const int x_99 = asint(x_6[1].x);
-  const int x_102 = asint(x_6[1].x);
-  const int x_105 = asint(x_6[1].x);
-  const int x_108 = asint(x_6[2].x);
-  const int x_111 = asint(x_6[1].x);
-  const int x_114 = asint(x_6[1].x);
-  const int x_117 = asint(x_6[1].x);
-  const int x_120 = asint(x_6[2].x);
-  const int x_123 = asint(x_6[1].x);
-  const int x_126 = asint(x_6[1].x);
-  const float4x4 x_132 = float4x4(float4(float(x_81), float(x_84), float(x_87), float(x_90)), float4(float(x_93), float(x_96), float(x_99), float(x_102)), float4(float(x_105), float(x_108), float(x_111), float(x_114)), float4(float(x_117), float(x_120), float(x_123), float(x_126)));
-  if ((((all((x_79[0u] == x_132[0u])) & all((x_79[1u] == x_132[1u]))) & all((x_79[2u] == x_132[2u]))) & all((x_79[3u] == x_132[3u])))) {
-    const int x_156 = asint(x_6[2].x);
-    const int x_159 = asint(x_6[1].x);
-    const int x_162 = asint(x_6[1].x);
-    const int x_165 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_156), float(x_159), float(x_162), float(x_165));
-  } else {
-    const int x_169 = asint(x_6[1].x);
-    const float x_170 = float(x_169);
-    x_GLF_color = float4(x_170, x_170, x_170, x_170);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_4 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_4;
-}
-C:\src\tint\test\Shader@0x00000204988F8F80(36,20-30): warning X3556: integer modulus may be much slower, try using uints if possible.
-C:\src\tint\test\Shader@0x00000204988F8F80(36,16-32): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x00000204988F8F80(22,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 96fef1d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,109 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float4x4 m0 = float4x4(0.0f);
-  int c = 0;
-  float4x4 m1 = float4x4(0.0f);
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_41 = float(x_40);
-  m0 = float4x4(float4(x_41, 0.0f, 0.0f, 0.0f), float4(0.0f, x_41, 0.0f, 0.0f), float4(0.0f, 0.0f, x_41, 0.0f), float4(0.0f, 0.0f, 0.0f, x_41));
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  c = x_48;
-  while (true) {
-    int const x_53 = c;
-    int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    float4x4 const x_58 = m0;
-    m1 = x_58;
-    int const x_59 = c;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_66 = x_10.x_GLF_uniform_float_values.arr[0].el;
-    m1[(x_59 % x_61)][x_64] = x_66;
-    int const x_68 = c;
-    int const x_70 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_73 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_75 = x_10.x_GLF_uniform_float_values.arr[0].el;
-    m0[(x_68 % x_70)][x_73] = x_75;
-    {
-      int const x_77 = c;
-      c = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-    }
-  }
-  float4x4 const x_79 = m0;
-  int const x_81 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_84 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_87 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_90 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_93 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_96 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_99 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_102 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_105 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_108 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_111 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_114 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_117 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_120 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_123 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_126 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float4x4 const x_132 = float4x4(float4(float(x_81), float(x_84), float(x_87), float(x_90)), float4(float(x_93), float(x_96), float(x_99), float(x_102)), float4(float(x_105), float(x_108), float(x_111), float(x_114)), float4(float(x_117), float(x_120), float(x_123), float(x_126)));
-  if ((((all((x_79[0u] == x_132[0u])) & all((x_79[1u] == x_132[1u]))) & all((x_79[2u] == x_132[2u]))) & all((x_79[3u] == x_132[3u])))) {
-    int const x_156 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_159 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_162 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_165 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_156), float(x_159), float(x_162), float(x_165));
-  } else {
-    int const x_169 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_170 = float(x_169);
-    *(tint_symbol_3) = float4(x_170, x_170, x_170, x_170);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2b90d5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,257 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 191
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m0 "m0"
-               OpName %c "c"
-               OpName %m1 "m1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %27 = OpConstantNull %mat4v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-     %v4bool = OpTypeVector %bool 4
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-   %main_out = OpTypeStruct %v4float
-        %180 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %m0 = OpVariable %_ptr_Function_mat4v4float Function %27
-          %c = OpVariable %_ptr_Function_int Function %30
-         %m1 = OpVariable %_ptr_Function_mat4v4float Function %27
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %36 = OpLoad %int %35
-         %37 = OpConvertSToF %float %36
-         %39 = OpCompositeConstruct %v4float %37 %float_0 %float_0 %float_0
-         %40 = OpCompositeConstruct %v4float %float_0 %37 %float_0 %float_0
-         %41 = OpCompositeConstruct %v4float %float_0 %float_0 %37 %float_0
-         %42 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %37
-         %43 = OpCompositeConstruct %mat4v4float %39 %40 %41 %42
-               OpStore %m0 %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-               OpStore %c %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %c
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpSLessThan %bool %51 %54
-               OpSelectionMerge %57 None
-               OpBranchConditional %55 %58 %59
-         %58 = OpLabel
-               OpBranch %57
-         %59 = OpLabel
-               OpBranch %48
-         %57 = OpLabel
-         %60 = OpLoad %mat4v4float %m0
-               OpStore %m1 %60
-         %61 = OpLoad %int %c
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %68 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %69 = OpLoad %float %68
-         %70 = OpSMod %int %61 %64
-         %72 = OpAccessChain %_ptr_Function_float %m1 %70 %66
-               OpStore %72 %69
-         %73 = OpLoad %int %c
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %79 = OpLoad %float %78
-         %80 = OpSMod %int %73 %75
-         %81 = OpAccessChain %_ptr_Function_float %m0 %80 %77
-               OpStore %81 %79
-               OpBranch %49
-         %49 = OpLabel
-         %82 = OpLoad %int %c
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %c %83
-               OpBranch %47
-         %48 = OpLabel
-         %84 = OpLoad %mat4v4float %m0
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %103 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %104 = OpLoad %int %103
-        %105 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %112 = OpLoad %int %111
-        %113 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %86
-        %118 = OpConvertSToF %float %88
-        %119 = OpConvertSToF %float %90
-        %120 = OpConvertSToF %float %92
-        %121 = OpCompositeConstruct %v4float %117 %118 %119 %120
-        %122 = OpConvertSToF %float %94
-        %123 = OpConvertSToF %float %96
-        %124 = OpConvertSToF %float %98
-        %125 = OpConvertSToF %float %100
-        %126 = OpCompositeConstruct %v4float %122 %123 %124 %125
-        %127 = OpConvertSToF %float %102
-        %128 = OpConvertSToF %float %104
-        %129 = OpConvertSToF %float %106
-        %130 = OpConvertSToF %float %108
-        %131 = OpCompositeConstruct %v4float %127 %128 %129 %130
-        %132 = OpConvertSToF %float %110
-        %133 = OpConvertSToF %float %112
-        %134 = OpConvertSToF %float %114
-        %135 = OpConvertSToF %float %116
-        %136 = OpCompositeConstruct %v4float %132 %133 %134 %135
-        %137 = OpCompositeConstruct %mat4v4float %121 %126 %131 %136
-        %139 = OpCompositeExtract %v4float %84 0
-        %140 = OpCompositeExtract %v4float %137 0
-        %141 = OpFOrdEqual %v4bool %139 %140
-        %138 = OpAll %bool %141
-        %144 = OpCompositeExtract %v4float %84 1
-        %145 = OpCompositeExtract %v4float %137 1
-        %146 = OpFOrdEqual %v4bool %144 %145
-        %143 = OpAll %bool %146
-        %147 = OpLogicalAnd %bool %138 %143
-        %150 = OpCompositeExtract %v4float %84 2
-        %151 = OpCompositeExtract %v4float %137 2
-        %152 = OpFOrdEqual %v4bool %150 %151
-        %148 = OpAll %bool %152
-        %153 = OpLogicalAnd %bool %147 %148
-        %156 = OpCompositeExtract %v4float %84 3
-        %157 = OpCompositeExtract %v4float %137 3
-        %158 = OpFOrdEqual %v4bool %156 %157
-        %154 = OpAll %bool %158
-        %159 = OpLogicalAnd %bool %153 %154
-               OpSelectionMerge %160 None
-               OpBranchConditional %159 %161 %162
-        %161 = OpLabel
-        %163 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %164 = OpLoad %int %163
-        %165 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %166 = OpLoad %int %165
-        %167 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %168 = OpLoad %int %167
-        %169 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %170 = OpLoad %int %169
-        %171 = OpConvertSToF %float %164
-        %172 = OpConvertSToF %float %166
-        %173 = OpConvertSToF %float %168
-        %174 = OpConvertSToF %float %170
-        %175 = OpCompositeConstruct %v4float %171 %172 %173 %174
-               OpStore %x_GLF_color %175
-               OpBranch %160
-        %162 = OpLabel
-        %176 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %177 = OpLoad %int %176
-        %178 = OpConvertSToF %float %177
-        %179 = OpCompositeConstruct %v4float %178 %178 %178 %178
-               OpStore %x_GLF_color %179
-               OpBranch %160
-        %160 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %180
-        %183 = OpLabel
-        %184 = OpFunctionCall %void %main_1
-        %185 = OpLoad %v4float %x_GLF_color
-        %186 = OpCompositeConstruct %main_out %185
-               OpReturnValue %186
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %188 = OpLabel
-        %189 = OpFunctionCall %main_out %main_inner
-        %190 = OpCompositeExtract %v4float %189 0
-               OpStore %x_GLF_color_1_1 %190
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5cf3aa2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,96 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m0 : mat4x4<f32>;
-  var c : i32;
-  var m1 : mat4x4<f32>;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_41 : f32 = f32(x_40);
-  m0 = mat4x4<f32>(vec4<f32>(x_41, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_41, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_41, 0.0), vec4<f32>(0.0, 0.0, 0.0, x_41));
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
-  c = x_48;
-  loop {
-    let x_53 : i32 = c;
-    let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    let x_58 : mat4x4<f32> = m0;
-    m1 = x_58;
-    let x_59 : i32 = c;
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_66 : f32 = x_10.x_GLF_uniform_float_values[0];
-    m1[(x_59 % x_61)][x_64] = x_66;
-    let x_68 : i32 = c;
-    let x_70 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_73 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_75 : f32 = x_10.x_GLF_uniform_float_values[0];
-    m0[(x_68 % x_70)][x_73] = x_75;
-
-    continuing {
-      let x_77 : i32 = c;
-      c = (x_77 + 1);
-    }
-  }
-  let x_79 : mat4x4<f32> = m0;
-  let x_81 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_84 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_87 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_90 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_93 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_96 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_99 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_102 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_105 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_108 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_111 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_114 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_117 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_120 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_123 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_126 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_132 : mat4x4<f32> = mat4x4<f32>(vec4<f32>(f32(x_81), f32(x_84), f32(x_87), f32(x_90)), vec4<f32>(f32(x_93), f32(x_96), f32(x_99), f32(x_102)), vec4<f32>(f32(x_105), f32(x_108), f32(x_111), f32(x_114)), vec4<f32>(f32(x_117), f32(x_120), f32(x_123), f32(x_126)));
-  if ((((all((x_79[0u] == x_132[0u])) & all((x_79[1u] == x_132[1u]))) & all((x_79[2u] == x_132[2u]))) & all((x_79[3u] == x_132[3u])))) {
-    let x_156 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_159 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_162 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_165 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_156), f32(x_159), f32(x_162), f32(x_165));
-  } else {
-    let x_169 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_170 : f32 = f32(x_169);
-    x_GLF_color = vec4<f32>(x_170, x_170, x_170, x_170);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4654374..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,109 +0,0 @@
-SKIP: FAILED
-
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[4];
-};
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x4 m0 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int c = 0;
-  float4x4 m1 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  const int x_40 = asint(x_6[1].x);
-  const float x_41 = float(x_40);
-  m0 = float4x4(float4(x_41, 0.0f, 0.0f, 0.0f), float4(0.0f, x_41, 0.0f, 0.0f), float4(0.0f, 0.0f, x_41, 0.0f), float4(0.0f, 0.0f, 0.0f, x_41));
-  const int x_48 = asint(x_6[2].x);
-  c = x_48;
-  while (true) {
-    const int x_53 = c;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    m1 = m0;
-    const int x_59 = c;
-    const int x_61 = asint(x_6[3].x);
-    const int x_64 = asint(x_6[2].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const float x_66 = asfloat(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    set_float4(m1[(x_59 % x_61)], x_64, x_66);
-    const int x_68 = c;
-    const int x_70 = asint(x_6[3].x);
-    const int x_73 = asint(x_6[2].x);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const float x_75 = asfloat(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    set_float4(m0[(x_68 % x_70)], x_73, x_75);
-    {
-      c = (c + 1);
-    }
-  }
-  const float4x4 x_79 = m0;
-  const int x_81 = asint(x_6[1].x);
-  const int x_84 = asint(x_6[2].x);
-  const int x_87 = asint(x_6[1].x);
-  const int x_90 = asint(x_6[1].x);
-  const int x_93 = asint(x_6[1].x);
-  const int x_96 = asint(x_6[2].x);
-  const int x_99 = asint(x_6[1].x);
-  const int x_102 = asint(x_6[1].x);
-  const int x_105 = asint(x_6[1].x);
-  const int x_108 = asint(x_6[2].x);
-  const int x_111 = asint(x_6[1].x);
-  const int x_114 = asint(x_6[1].x);
-  const int x_117 = asint(x_6[1].x);
-  const int x_120 = asint(x_6[2].x);
-  const int x_123 = asint(x_6[1].x);
-  const int x_126 = asint(x_6[1].x);
-  const float4x4 x_132 = float4x4(float4(float(x_81), float(x_84), float(x_87), float(x_90)), float4(float(x_93), float(x_96), float(x_99), float(x_102)), float4(float(x_105), float(x_108), float(x_111), float(x_114)), float4(float(x_117), float(x_120), float(x_123), float(x_126)));
-  bool tint_tmp_2 = all((x_79[0u] == x_132[0u]));
-  if (tint_tmp_2) {
-    tint_tmp_2 = all((x_79[1u] == x_132[1u]));
-  }
-  bool tint_tmp_1 = (tint_tmp_2);
-  if (tint_tmp_1) {
-    tint_tmp_1 = all((x_79[2u] == x_132[2u]));
-  }
-  bool tint_tmp = (tint_tmp_1);
-  if (tint_tmp) {
-    tint_tmp = all((x_79[3u] == x_132[3u]));
-  }
-  if ((tint_tmp)) {
-    const int x_156 = asint(x_6[2].x);
-    const int x_159 = asint(x_6[1].x);
-    const int x_162 = asint(x_6[1].x);
-    const int x_165 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_156), float(x_159), float(x_162), float(x_165));
-  } else {
-    const int x_169 = asint(x_6[1].x);
-    const float x_170 = float(x_169);
-    x_GLF_color = float4(x_170, x_170, x_170, x_170);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_4 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_4;
-}
-C:\src\tint\test\Shader@0x000002F8CC0810E0(36,20-30): warning X3556: integer modulus may be much slower, try using uints if possible.
-C:\src\tint\test\Shader@0x000002F8CC0810E0(36,16-32): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x000002F8CC0810E0(22,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index c1d712d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,109 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float4x4 m0 = float4x4(0.0f);
-  int c = 0;
-  float4x4 m1 = float4x4(0.0f);
-  int const x_40 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_41 = float(x_40);
-  m0 = float4x4(float4(x_41, 0.0f, 0.0f, 0.0f), float4(0.0f, x_41, 0.0f, 0.0f), float4(0.0f, 0.0f, x_41, 0.0f), float4(0.0f, 0.0f, 0.0f, x_41));
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  c = x_48;
-  while (true) {
-    int const x_53 = c;
-    int const x_55 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    float4x4 const x_58 = m0;
-    m1 = x_58;
-    int const x_59 = c;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_66 = x_10.x_GLF_uniform_float_values.arr[0].el;
-    m1[(x_59 % x_61)][x_64] = x_66;
-    int const x_68 = c;
-    int const x_70 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_73 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_75 = x_10.x_GLF_uniform_float_values.arr[0].el;
-    m0[(x_68 % x_70)][x_73] = x_75;
-    {
-      int const x_77 = c;
-      c = as_type<int>((as_type<uint>(x_77) + as_type<uint>(1)));
-    }
-  }
-  float4x4 const x_79 = m0;
-  int const x_81 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_84 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_87 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_90 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_93 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_96 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_99 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_102 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_105 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_108 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_111 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_114 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_117 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_120 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_123 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_126 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float4x4 const x_132 = float4x4(float4(float(x_81), float(x_84), float(x_87), float(x_90)), float4(float(x_93), float(x_96), float(x_99), float(x_102)), float4(float(x_105), float(x_108), float(x_111), float(x_114)), float4(float(x_117), float(x_120), float(x_123), float(x_126)));
-  if ((((all((x_79[0u] == x_132[0u])) && all((x_79[1u] == x_132[1u]))) && all((x_79[2u] == x_132[2u]))) && all((x_79[3u] == x_132[3u])))) {
-    int const x_156 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_159 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_162 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_165 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_156), float(x_159), float(x_162), float(x_165));
-  } else {
-    int const x_169 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_170 = float(x_169);
-    *(tint_symbol_3) = float4(x_170, x_170, x_170, x_170);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_10 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 9e07478..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,272 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 197
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_float_values"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m0 "m0"
-               OpName %c "c"
-               OpName %m1 "m1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf1 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf0 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %27 = OpConstantNull %mat4v4float
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-     %v4bool = OpTypeVector %bool 4
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-   %main_out = OpTypeStruct %v4float
-        %186 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %m0 = OpVariable %_ptr_Function_mat4v4float Function %27
-          %c = OpVariable %_ptr_Function_int Function %30
-         %m1 = OpVariable %_ptr_Function_mat4v4float Function %27
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %36 = OpLoad %int %35
-         %37 = OpConvertSToF %float %36
-         %39 = OpCompositeConstruct %v4float %37 %float_0 %float_0 %float_0
-         %40 = OpCompositeConstruct %v4float %float_0 %37 %float_0 %float_0
-         %41 = OpCompositeConstruct %v4float %float_0 %float_0 %37 %float_0
-         %42 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %37
-         %43 = OpCompositeConstruct %mat4v4float %39 %40 %41 %42
-               OpStore %m0 %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-               OpStore %c %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %c
-         %53 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %54 = OpLoad %int %53
-         %55 = OpSLessThan %bool %51 %54
-               OpSelectionMerge %57 None
-               OpBranchConditional %55 %58 %59
-         %58 = OpLabel
-               OpBranch %57
-         %59 = OpLabel
-               OpBranch %48
-         %57 = OpLabel
-         %60 = OpLoad %mat4v4float %m0
-               OpStore %m1 %60
-         %61 = OpLoad %int %c
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %68 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %69 = OpLoad %float %68
-         %70 = OpSMod %int %61 %64
-         %72 = OpAccessChain %_ptr_Function_float %m1 %70 %66
-               OpStore %72 %69
-         %73 = OpLoad %int %c
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %75 = OpLoad %int %74
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %int_0
-         %79 = OpLoad %float %78
-         %80 = OpSMod %int %73 %75
-         %81 = OpAccessChain %_ptr_Function_float %m0 %80 %77
-               OpStore %81 %79
-               OpBranch %49
-         %49 = OpLabel
-         %82 = OpLoad %int %c
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %c %83
-               OpBranch %47
-         %48 = OpLabel
-         %84 = OpLoad %mat4v4float %m0
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %90 = OpLoad %int %89
-         %91 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %92 = OpLoad %int %91
-         %93 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %96 = OpLoad %int %95
-         %97 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %98 = OpLoad %int %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %102 = OpLoad %int %101
-        %103 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %104 = OpLoad %int %103
-        %105 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %108 = OpLoad %int %107
-        %109 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %112 = OpLoad %int %111
-        %113 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %116 = OpLoad %int %115
-        %117 = OpConvertSToF %float %86
-        %118 = OpConvertSToF %float %88
-        %119 = OpConvertSToF %float %90
-        %120 = OpConvertSToF %float %92
-        %121 = OpCompositeConstruct %v4float %117 %118 %119 %120
-        %122 = OpConvertSToF %float %94
-        %123 = OpConvertSToF %float %96
-        %124 = OpConvertSToF %float %98
-        %125 = OpConvertSToF %float %100
-        %126 = OpCompositeConstruct %v4float %122 %123 %124 %125
-        %127 = OpConvertSToF %float %102
-        %128 = OpConvertSToF %float %104
-        %129 = OpConvertSToF %float %106
-        %130 = OpConvertSToF %float %108
-        %131 = OpCompositeConstruct %v4float %127 %128 %129 %130
-        %132 = OpConvertSToF %float %110
-        %133 = OpConvertSToF %float %112
-        %134 = OpConvertSToF %float %114
-        %135 = OpConvertSToF %float %116
-        %136 = OpCompositeConstruct %v4float %132 %133 %134 %135
-        %137 = OpCompositeConstruct %mat4v4float %121 %126 %131 %136
-        %139 = OpCompositeExtract %v4float %84 0
-        %140 = OpCompositeExtract %v4float %137 0
-        %141 = OpFOrdEqual %v4bool %139 %140
-        %138 = OpAll %bool %141
-               OpSelectionMerge %143 None
-               OpBranchConditional %138 %144 %143
-        %144 = OpLabel
-        %146 = OpCompositeExtract %v4float %84 1
-        %147 = OpCompositeExtract %v4float %137 1
-        %148 = OpFOrdEqual %v4bool %146 %147
-        %145 = OpAll %bool %148
-               OpBranch %143
-        %143 = OpLabel
-        %149 = OpPhi %bool %138 %48 %145 %144
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %150
-        %151 = OpLabel
-        %154 = OpCompositeExtract %v4float %84 2
-        %155 = OpCompositeExtract %v4float %137 2
-        %156 = OpFOrdEqual %v4bool %154 %155
-        %152 = OpAll %bool %156
-               OpBranch %150
-        %150 = OpLabel
-        %157 = OpPhi %bool %149 %143 %152 %151
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %158
-        %159 = OpLabel
-        %162 = OpCompositeExtract %v4float %84 3
-        %163 = OpCompositeExtract %v4float %137 3
-        %164 = OpFOrdEqual %v4bool %162 %163
-        %160 = OpAll %bool %164
-               OpBranch %158
-        %158 = OpLabel
-        %165 = OpPhi %bool %157 %150 %160 %159
-               OpSelectionMerge %166 None
-               OpBranchConditional %165 %167 %168
-        %167 = OpLabel
-        %169 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %170 = OpLoad %int %169
-        %171 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %172 = OpLoad %int %171
-        %173 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %174 = OpLoad %int %173
-        %175 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %176 = OpLoad %int %175
-        %177 = OpConvertSToF %float %170
-        %178 = OpConvertSToF %float %172
-        %179 = OpConvertSToF %float %174
-        %180 = OpConvertSToF %float %176
-        %181 = OpCompositeConstruct %v4float %177 %178 %179 %180
-               OpStore %x_GLF_color %181
-               OpBranch %166
-        %168 = OpLabel
-        %182 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %183 = OpLoad %int %182
-        %184 = OpConvertSToF %float %183
-        %185 = OpCompositeConstruct %v4float %184 %184 %184 %184
-               OpStore %x_GLF_color %185
-               OpBranch %166
-        %166 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %186
-        %189 = OpLabel
-        %190 = OpFunctionCall %void %main_1
-        %191 = OpLoad %v4float %x_GLF_color
-        %192 = OpCompositeConstruct %main_out %191
-               OpReturnValue %192
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %194 = OpLabel
-        %195 = OpFunctionCall %main_out %main_inner
-        %196 = OpCompositeExtract %v4float %195 0
-               OpStore %x_GLF_color_1_1 %196
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index cd04198..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,96 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m0 : mat4x4<f32>;
-  var c : i32;
-  var m1 : mat4x4<f32>;
-  let x_40 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_41 : f32 = f32(x_40);
-  m0 = mat4x4<f32>(vec4<f32>(x_41, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_41, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_41, 0.0), vec4<f32>(0.0, 0.0, 0.0, x_41));
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
-  c = x_48;
-  loop {
-    let x_53 : i32 = c;
-    let x_55 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_53 < x_55)) {
-    } else {
-      break;
-    }
-    let x_58 : mat4x4<f32> = m0;
-    m1 = x_58;
-    let x_59 : i32 = c;
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_66 : f32 = x_10.x_GLF_uniform_float_values[0];
-    m1[(x_59 % x_61)][x_64] = x_66;
-    let x_68 : i32 = c;
-    let x_70 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_73 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_75 : f32 = x_10.x_GLF_uniform_float_values[0];
-    m0[(x_68 % x_70)][x_73] = x_75;
-
-    continuing {
-      let x_77 : i32 = c;
-      c = (x_77 + 1);
-    }
-  }
-  let x_79 : mat4x4<f32> = m0;
-  let x_81 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_84 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_87 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_90 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_93 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_96 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_99 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_102 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_105 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_108 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_111 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_114 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_117 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_120 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_123 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_126 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_132 : mat4x4<f32> = mat4x4<f32>(vec4<f32>(f32(x_81), f32(x_84), f32(x_87), f32(x_90)), vec4<f32>(f32(x_93), f32(x_96), f32(x_99), f32(x_102)), vec4<f32>(f32(x_105), f32(x_108), f32(x_111), f32(x_114)), vec4<f32>(f32(x_117), f32(x_120), f32(x_123), f32(x_126)));
-  if ((((all((x_79[0u] == x_132[0u])) && all((x_79[1u] == x_132[1u]))) && all((x_79[2u] == x_132[2u]))) && all((x_79[3u] == x_132[3u])))) {
-    let x_156 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_159 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_162 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_165 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_156), f32(x_159), f32(x_162), f32(x_165));
-  } else {
-    let x_169 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_170 : f32 = f32(x_169);
-    x_GLF_color = vec4<f32>(x_170, x_170, x_170, x_170);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f30cc45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  a = 0;
-  const int x_26 = asint(x_6[0].x);
-  switch(x_26) {
-    case 2:
-    case 3: {
-      a = 1;
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 4: {
-      break;
-    }
-    default: {
-      a = 2;
-      break;
-    }
-  }
-  if ((a == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.msl
deleted file mode 100644
index a8af80b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  a = 0;
-  int const x_26 = x_6.one;
-  switch(x_26) {
-    case 2:
-    case 3: {
-      a = 1;
-      /* fallthrough */
-    }
-    case 4: {
-      break;
-    }
-    default: {
-      a = 2;
-      break;
-    }
-  }
-  int const x_31 = a;
-  if ((x_31 == 2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 21a787f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %39 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %40 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-         %23 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %24 = OpLoad %int %23
-               OpSelectionMerge %25 None
-               OpSwitch %24 %26 2 %27 3 %27 4 %28
-         %27 = OpLabel
-               OpStore %a %int_1
-               OpBranch %28
-         %28 = OpLabel
-               OpBranch %25
-         %26 = OpLabel
-               OpStore %a %int_2
-               OpBranch %25
-         %25 = OpLabel
-         %31 = OpLoad %int %a
-         %32 = OpIEqual %bool %31 %int_2
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %34
-         %36 = OpLabel
-               OpStore %x_GLF_color %40
-               OpBranch %34
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 7ac234c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  a = 0;
-  let x_26 : i32 = x_6.one;
-  switch(x_26) {
-    case 2, 3: {
-      a = 1;
-      fallthrough;
-    }
-    case 4: {
-    }
-    default: {
-      a = 2;
-    }
-  }
-  let x_31 : i32 = a;
-  if ((x_31 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f30cc45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  a = 0;
-  const int x_26 = asint(x_6[0].x);
-  switch(x_26) {
-    case 2:
-    case 3: {
-      a = 1;
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 4: {
-      break;
-    }
-    default: {
-      a = 2;
-      break;
-    }
-  }
-  if ((a == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.msl
deleted file mode 100644
index a8af80b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  a = 0;
-  int const x_26 = x_6.one;
-  switch(x_26) {
-    case 2:
-    case 3: {
-      a = 1;
-      /* fallthrough */
-    }
-    case 4: {
-      break;
-    }
-    default: {
-      a = 2;
-      break;
-    }
-  }
-  int const x_31 = a;
-  if ((x_31 == 2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 21a787f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %39 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %40 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-         %23 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %24 = OpLoad %int %23
-               OpSelectionMerge %25 None
-               OpSwitch %24 %26 2 %27 3 %27 4 %28
-         %27 = OpLabel
-               OpStore %a %int_1
-               OpBranch %28
-         %28 = OpLabel
-               OpBranch %25
-         %26 = OpLabel
-               OpStore %a %int_2
-               OpBranch %25
-         %25 = OpLabel
-         %31 = OpLoad %int %a
-         %32 = OpIEqual %bool %31 %int_2
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %34
-         %36 = OpLabel
-               OpStore %x_GLF_color %40
-               OpBranch %34
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 7ac234c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-val-cfg-case-fallthrough/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-[[block]]
-struct buf0 {
-  one : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  a = 0;
-  let x_26 : i32 = x_6.one;
-  switch(x_26) {
-    case 2, 3: {
-      a = 1;
-      fallthrough;
-    }
-    case 4: {
-    }
-    default: {
-      a = 2;
-    }
-  }
-  let x_31 : i32 = a;
-  if ((x_31 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 842d6e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int A[2] = (int[2])0;
-  int a = 0;
-  const int x_30 = asint(x_6[1].x);
-  i = x_30;
-  while (true) {
-    const int x_35 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_37 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    A[i] = i;
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_46 = asint(x_6[1].x);
-  const int x_48 = A[x_46];
-  const int x_51 = asint(x_6[2].x);
-  const int x_53 = A[x_51];
-  a = min(~(x_48), ~(x_53));
-  const int x_57 = asint(x_6[1].x);
-  const float x_58 = float(x_57);
-  x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  const int x_60 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_62 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_60 == -(x_62))) {
-    const int x_68 = asint(x_6[2].x);
-    const int x_71 = asint(x_6[1].x);
-    const int x_74 = asint(x_6[1].x);
-    const int x_77 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_68), float(x_71), float(x_74), float(x_77));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.msl
deleted file mode 100644
index 55b611b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,83 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 A = {};
-  int a = 0;
-  int const x_30 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_30;
-  while (true) {
-    int const x_35 = i;
-    int const x_37 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    int const x_40 = i;
-    int const x_41 = i;
-    A.arr[x_40] = x_41;
-    {
-      int const x_43 = i;
-      i = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-    }
-  }
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_48 = A.arr[x_46];
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_53 = A.arr[x_51];
-  a = min(~(x_48), ~(x_53));
-  int const x_57 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_58 = float(x_57);
-  *(tint_symbol_3) = float4(x_58, x_58, x_58, x_58);
-  int const x_60 = a;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_60 == tint_unary_minus(x_62))) {
-    int const x_68 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_74 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_68), float(x_71), float(x_74), float(x_77));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6212659..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,154 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 99
-; Schema: 0
-               OpCapability Shader
-         %61 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %A "A"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %26 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %A = OpVariable %_ptr_Function__arr_int_uint_2 Function %26
-          %a = OpVariable %_ptr_Function_int Function %21
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %32 = OpLoad %int %31
-               OpStore %i %32
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %37 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %41 = OpSLessThan %bool %37 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %34
-         %43 = OpLabel
-         %46 = OpLoad %int %i
-         %47 = OpLoad %int %i
-         %48 = OpAccessChain %_ptr_Function_int %A %46
-               OpStore %48 %47
-               OpBranch %35
-         %35 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %i %50
-               OpBranch %33
-         %34 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Function_int %A %52
-         %54 = OpLoad %int %53
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %57 = OpLoad %int %56
-         %58 = OpAccessChain %_ptr_Function_int %A %57
-         %59 = OpLoad %int %58
-         %62 = OpNot %int %54
-         %63 = OpNot %int %59
-         %60 = OpExtInst %int %61 SMin %62 %63
-               OpStore %a %60
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpConvertSToF %float %65
-         %67 = OpCompositeConstruct %v4float %66 %66 %66 %66
-               OpStore %x_GLF_color %67
-         %68 = OpLoad %int %a
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpSNegate %int %70
-         %72 = OpIEqual %bool %68 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %82 = OpLoad %int %81
-         %83 = OpConvertSToF %float %76
-         %84 = OpConvertSToF %float %78
-         %85 = OpConvertSToF %float %80
-         %86 = OpConvertSToF %float %82
-         %87 = OpCompositeConstruct %v4float %83 %84 %85 %86
-               OpStore %x_GLF_color %87
-               OpBranch %73
-         %73 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-         %91 = OpLabel
-         %92 = OpFunctionCall %void %main_1
-         %93 = OpLoad %v4float %x_GLF_color
-         %94 = OpCompositeConstruct %main_out %93
-               OpReturnValue %94
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %96 = OpLabel
-         %97 = OpFunctionCall %main_out %main_inner
-         %98 = OpCompositeExtract %v4float %97 0
-               OpStore %x_GLF_color_1_1 %98
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c17f0bb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var A : array<i32, 2>;
-  var a : i32;
-  let x_30 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_30;
-  loop {
-    let x_35 : i32 = i;
-    let x_37 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    let x_40 : i32 = i;
-    let x_41 : i32 = i;
-    A[x_40] = x_41;
-
-    continuing {
-      let x_43 : i32 = i;
-      i = (x_43 + 1);
-    }
-  }
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_48 : i32 = A[x_46];
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_53 : i32 = A[x_51];
-  a = min(~(x_48), ~(x_53));
-  let x_57 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_58 : f32 = f32(x_57);
-  x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  let x_60 : i32 = a;
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_60 == -(x_62))) {
-    let x_68 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_74 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_68), f32(x_71), f32(x_74), f32(x_77));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 842d6e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[3];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int A[2] = (int[2])0;
-  int a = 0;
-  const int x_30 = asint(x_6[1].x);
-  i = x_30;
-  while (true) {
-    const int x_35 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_37 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    A[i] = i;
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_46 = asint(x_6[1].x);
-  const int x_48 = A[x_46];
-  const int x_51 = asint(x_6[2].x);
-  const int x_53 = A[x_51];
-  a = min(~(x_48), ~(x_53));
-  const int x_57 = asint(x_6[1].x);
-  const float x_58 = float(x_57);
-  x_GLF_color = float4(x_58, x_58, x_58, x_58);
-  const int x_60 = a;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_62 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_60 == -(x_62))) {
-    const int x_68 = asint(x_6[2].x);
-    const int x_71 = asint(x_6[1].x);
-    const int x_74 = asint(x_6[1].x);
-    const int x_77 = asint(x_6[2].x);
-    x_GLF_color = float4(float(x_68), float(x_71), float(x_74), float(x_77));
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.msl
deleted file mode 100644
index 55b611b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,83 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper_1 A = {};
-  int a = 0;
-  int const x_30 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  i = x_30;
-  while (true) {
-    int const x_35 = i;
-    int const x_37 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    int const x_40 = i;
-    int const x_41 = i;
-    A.arr[x_40] = x_41;
-    {
-      int const x_43 = i;
-      i = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-    }
-  }
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_48 = A.arr[x_46];
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_53 = A.arr[x_51];
-  a = min(~(x_48), ~(x_53));
-  int const x_57 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  float const x_58 = float(x_57);
-  *(tint_symbol_3) = float4(x_58, x_58, x_58, x_58);
-  int const x_60 = a;
-  int const x_62 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_60 == tint_unary_minus(x_62))) {
-    int const x_68 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_74 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_77 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    *(tint_symbol_3) = float4(float(x_68), float(x_71), float(x_74), float(x_77));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6212659..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,154 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 99
-; Schema: 0
-               OpCapability Shader
-         %61 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %A "A"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %26 = OpConstantNull %_arr_int_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %21
-          %A = OpVariable %_ptr_Function__arr_int_uint_2 Function %26
-          %a = OpVariable %_ptr_Function_int Function %21
-         %31 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %32 = OpLoad %int %31
-               OpStore %i %32
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %37 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %41 = OpSLessThan %bool %37 %40
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %34
-         %43 = OpLabel
-         %46 = OpLoad %int %i
-         %47 = OpLoad %int %i
-         %48 = OpAccessChain %_ptr_Function_int %A %46
-               OpStore %48 %47
-               OpBranch %35
-         %35 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %i %50
-               OpBranch %33
-         %34 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Function_int %A %52
-         %54 = OpLoad %int %53
-         %56 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %57 = OpLoad %int %56
-         %58 = OpAccessChain %_ptr_Function_int %A %57
-         %59 = OpLoad %int %58
-         %62 = OpNot %int %54
-         %63 = OpNot %int %59
-         %60 = OpExtInst %int %61 SMin %62 %63
-               OpStore %a %60
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpConvertSToF %float %65
-         %67 = OpCompositeConstruct %v4float %66 %66 %66 %66
-               OpStore %x_GLF_color %67
-         %68 = OpLoad %int %a
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpSNegate %int %70
-         %72 = OpIEqual %bool %68 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %76 = OpLoad %int %75
-         %77 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %78 = OpLoad %int %77
-         %79 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %82 = OpLoad %int %81
-         %83 = OpConvertSToF %float %76
-         %84 = OpConvertSToF %float %78
-         %85 = OpConvertSToF %float %80
-         %86 = OpConvertSToF %float %82
-         %87 = OpCompositeConstruct %v4float %83 %84 %85 %86
-               OpStore %x_GLF_color %87
-               OpBranch %73
-         %73 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-         %91 = OpLabel
-         %92 = OpFunctionCall %void %main_1
-         %93 = OpLoad %v4float %x_GLF_color
-         %94 = OpCompositeConstruct %main_out %93
-               OpReturnValue %94
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %96 = OpLabel
-         %97 = OpFunctionCall %main_out %main_inner
-         %98 = OpCompositeExtract %v4float %97 0
-               OpStore %x_GLF_color_1_1 %98
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c17f0bb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-inst-combine-select-value-tracking-flip-bits/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var A : array<i32, 2>;
-  var a : i32;
-  let x_30 : i32 = x_6.x_GLF_uniform_int_values[1];
-  i = x_30;
-  loop {
-    let x_35 : i32 = i;
-    let x_37 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_35 < x_37)) {
-    } else {
-      break;
-    }
-    let x_40 : i32 = i;
-    let x_41 : i32 = i;
-    A[x_40] = x_41;
-
-    continuing {
-      let x_43 : i32 = i;
-      i = (x_43 + 1);
-    }
-  }
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_48 : i32 = A[x_46];
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_53 : i32 = A[x_51];
-  a = min(~(x_48), ~(x_53));
-  let x_57 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_58 : f32 = f32(x_57);
-  x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
-  let x_60 : i32 = a;
-  let x_62 : i32 = x_6.x_GLF_uniform_int_values[0];
-  if ((x_60 == -(x_62))) {
-    let x_68 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_74 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_77 : i32 = x_6.x_GLF_uniform_int_values[2];
-    x_GLF_color = vec4<f32>(f32(x_68), f32(x_71), f32(x_74), f32(x_77));
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index cd254df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[2].x);
-  a = x_27;
-  const int x_29 = asint(x_6[3].x);
-  i = x_29;
-  while (true) {
-    const int x_34 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_36 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    const int x_39 = i;
-    const int x_42 = asint(x_6[2].x);
-    if (((1 % x_39) == x_42)) {
-      {
-        i = (i + 1);
-      }
-      continue;
-    }
-    a = (a + 1);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_50 = a;
-  const int x_52 = asint(x_6[1].x);
-  if ((x_50 == x_52)) {
-    const int x_58 = asint(x_6[3].x);
-    const int x_61 = asint(x_6[2].x);
-    const int x_64 = asint(x_6[2].x);
-    const int x_67 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_58), float(x_61), float(x_64), float(x_67));
-  } else {
-    const int x_71 = asint(x_6[2].x);
-    const float x_72 = float(x_71);
-    x_GLF_color = float4(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.msl
deleted file mode 100644
index 8da1242..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_27;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  i = x_29;
-  while (true) {
-    int const x_34 = i;
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    int const x_39 = i;
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if (((1 % x_39) == x_42)) {
-      {
-        int const x_48 = i;
-        i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-      }
-      continue;
-    }
-    int const x_46 = a;
-    a = as_type<int>((as_type<uint>(x_46) + as_type<uint>(1)));
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  int const x_50 = a;
-  int const x_52 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_50 == x_52)) {
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_58), float(x_61), float(x_64), float(x_67));
-  } else {
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_72 = float(x_71);
-    *(tint_symbol_3) = float4(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a0b252c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,148 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %30 = OpLoad %int %29
-               OpStore %i %30
-               OpBranch %31
-         %31 = OpLabel
-               OpLoopMerge %32 %33 None
-               OpBranch %34
-         %34 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %39 = OpSLessThan %bool %35 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %32
-         %41 = OpLabel
-         %44 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %48 = OpSMod %int %int_1 %44
-         %49 = OpIEqual %bool %48 %46
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-               OpBranch %33
-         %50 = OpLabel
-         %52 = OpLoad %int %a
-         %53 = OpIAdd %int %52 %int_1
-               OpStore %a %53
-               OpBranch %33
-         %33 = OpLabel
-         %54 = OpLoad %int %i
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %i %55
-               OpBranch %31
-         %32 = OpLabel
-         %56 = OpLoad %int %a
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpIEqual %bool %56 %58
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %60
-         %62 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d11bb08..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_27;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[3];
-  i = x_29;
-  loop {
-    let x_34 : i32 = i;
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    let x_39 : i32 = i;
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if (((1 % x_39) == x_42)) {
-      continue;
-    }
-    let x_46 : i32 = a;
-    a = (x_46 + 1);
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_50 : i32 = a;
-  let x_52 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_50 == x_52)) {
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_58), f32(x_61), f32(x_64), f32(x_67));
-  } else {
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_72 : f32 = f32(x_71);
-    x_GLF_color = vec4<f32>(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index cd254df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  const int x_27 = asint(x_6[2].x);
-  a = x_27;
-  const int x_29 = asint(x_6[3].x);
-  i = x_29;
-  while (true) {
-    const int x_34 = i;
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const int x_36 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    const int x_39 = i;
-    const int x_42 = asint(x_6[2].x);
-    if (((1 % x_39) == x_42)) {
-      {
-        i = (i + 1);
-      }
-      continue;
-    }
-    a = (a + 1);
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_50 = a;
-  const int x_52 = asint(x_6[1].x);
-  if ((x_50 == x_52)) {
-    const int x_58 = asint(x_6[3].x);
-    const int x_61 = asint(x_6[2].x);
-    const int x_64 = asint(x_6[2].x);
-    const int x_67 = asint(x_6[3].x);
-    x_GLF_color = float4(float(x_58), float(x_61), float(x_64), float(x_67));
-  } else {
-    const int x_71 = asint(x_6[2].x);
-    const float x_72 = float(x_71);
-    x_GLF_color = float4(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.msl
deleted file mode 100644
index 8da1242..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  int const x_27 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  a = x_27;
-  int const x_29 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  i = x_29;
-  while (true) {
-    int const x_34 = i;
-    int const x_36 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    int const x_39 = i;
-    int const x_42 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    if (((1 % x_39) == x_42)) {
-      {
-        int const x_48 = i;
-        i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-      }
-      continue;
-    }
-    int const x_46 = a;
-    a = as_type<int>((as_type<uint>(x_46) + as_type<uint>(1)));
-    {
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  int const x_50 = a;
-  int const x_52 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_50 == x_52)) {
-    int const x_58 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    int const x_61 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_64 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    int const x_67 = x_6.x_GLF_uniform_int_values.arr[3].el;
-    *(tint_symbol_3) = float4(float(x_58), float(x_61), float(x_64), float(x_67));
-  } else {
-    int const x_71 = x_6.x_GLF_uniform_int_values.arr[2].el;
-    float const x_72 = float(x_71);
-    *(tint_symbol_3) = float4(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a0b252c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,148 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 91
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_2 = OpConstant %int 2
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %80 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %27 = OpLoad %int %26
-               OpStore %a %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %30 = OpLoad %int %29
-               OpStore %i %30
-               OpBranch %31
-         %31 = OpLabel
-               OpLoopMerge %32 %33 None
-               OpBranch %34
-         %34 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %38 = OpLoad %int %37
-         %39 = OpSLessThan %bool %35 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %32
-         %41 = OpLabel
-         %44 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %46 = OpLoad %int %45
-         %48 = OpSMod %int %int_1 %44
-         %49 = OpIEqual %bool %48 %46
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-               OpBranch %33
-         %50 = OpLabel
-         %52 = OpLoad %int %a
-         %53 = OpIAdd %int %52 %int_1
-               OpStore %a %53
-               OpBranch %33
-         %33 = OpLabel
-         %54 = OpLoad %int %i
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %i %55
-               OpBranch %31
-         %32 = OpLabel
-         %56 = OpLoad %int %a
-         %57 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %58 = OpLoad %int %57
-         %59 = OpIEqual %bool %56 %58
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-         %63 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %70 = OpLoad %int %69
-         %71 = OpConvertSToF %float %64
-         %72 = OpConvertSToF %float %66
-         %73 = OpConvertSToF %float %68
-         %74 = OpConvertSToF %float %70
-         %75 = OpCompositeConstruct %v4float %71 %72 %73 %74
-               OpStore %x_GLF_color %75
-               OpBranch %60
-         %62 = OpLabel
-         %76 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %77 = OpLoad %int %76
-         %78 = OpConvertSToF %float %77
-         %79 = OpCompositeConstruct %v4float %78 %78 %78 %78
-               OpStore %x_GLF_color %79
-               OpBranch %60
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %80
-         %83 = OpLabel
-         %84 = OpFunctionCall %void %main_1
-         %85 = OpLoad %v4float %x_GLF_color
-         %86 = OpCompositeConstruct %main_out %85
-               OpReturnValue %86
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %88 = OpLabel
-         %89 = OpFunctionCall %main_out %main_inner
-         %90 = OpCompositeExtract %v4float %89 0
-               OpStore %x_GLF_color_1_1 %90
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d11bb08..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-apint-inst-combine-simplify-one-mod-loop-iterator/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  let x_27 : i32 = x_6.x_GLF_uniform_int_values[2];
-  a = x_27;
-  let x_29 : i32 = x_6.x_GLF_uniform_int_values[3];
-  i = x_29;
-  loop {
-    let x_34 : i32 = i;
-    let x_36 : i32 = x_6.x_GLF_uniform_int_values[0];
-    if ((x_34 < x_36)) {
-    } else {
-      break;
-    }
-    let x_39 : i32 = i;
-    let x_42 : i32 = x_6.x_GLF_uniform_int_values[2];
-    if (((1 % x_39) == x_42)) {
-      continue;
-    }
-    let x_46 : i32 = a;
-    a = (x_46 + 1);
-
-    continuing {
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_50 : i32 = a;
-  let x_52 : i32 = x_6.x_GLF_uniform_int_values[1];
-  if ((x_50 == x_52)) {
-    let x_58 : i32 = x_6.x_GLF_uniform_int_values[3];
-    let x_61 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_64 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_67 : i32 = x_6.x_GLF_uniform_int_values[3];
-    x_GLF_color = vec4<f32>(f32(x_58), f32(x_61), f32(x_64), f32(x_67));
-  } else {
-    let x_71 : i32 = x_6.x_GLF_uniform_int_values[2];
-    let x_72 : f32 = f32(x_71);
-    x_GLF_color = vec4<f32>(x_72, x_72, x_72, x_72);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 437221f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      a = ((i | -2) - 1);
-    }
-  }
-  if ((a == -2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5d64f57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_30 = i;
-    if ((x_30 < 2)) {
-    } else {
-      break;
-    }
-    int const x_33 = i;
-    a = as_type<int>((as_type<uint>((x_33 | -2)) - as_type<uint>(1)));
-    {
-      int const x_36 = i;
-      i = as_type<int>((as_type<uint>(x_36) + as_type<uint>(1)));
-    }
-  }
-  int const x_38 = a;
-  if ((x_38 == -2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4b63e0c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %int_n2 = OpConstant %int -2
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %46 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %47 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %48 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %i
-         %27 = OpSLessThan %bool %25 %int_2
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpBranch %29
-         %31 = OpLabel
-               OpBranch %22
-         %29 = OpLabel
-         %32 = OpLoad %int %i
-         %34 = OpBitwiseOr %int %32 %int_n2
-         %36 = OpISub %int %34 %int_1
-               OpStore %a %36
-               OpBranch %23
-         %23 = OpLabel
-         %37 = OpLoad %int %i
-         %38 = OpIAdd %int %37 %int_1
-               OpStore %i %38
-               OpBranch %21
-         %22 = OpLabel
-         %39 = OpLoad %int %a
-         %40 = OpIEqual %bool %39 %int_n2
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %43
-         %42 = OpLabel
-               OpStore %x_GLF_color %46
-               OpBranch %41
-         %43 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %41
-         %41 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %48
-         %51 = OpLabel
-         %52 = OpFunctionCall %void %main_1
-         %53 = OpLoad %v4float %x_GLF_color
-         %54 = OpCompositeConstruct %main_out %53
-               OpReturnValue %54
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %56 = OpLabel
-         %57 = OpFunctionCall %main_out %main_inner
-         %58 = OpCompositeExtract %v4float %57 0
-               OpStore %x_GLF_color_1_1 %58
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5aa3bbe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,47 +0,0 @@
-[[block]]
-struct buf0 {
-  two : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_30 : i32 = i;
-    if ((x_30 < 2)) {
-    } else {
-      break;
-    }
-    let x_33 : i32 = i;
-    a = ((x_33 | -2) - 1);
-
-    continuing {
-      let x_36 : i32 = i;
-      i = (x_36 + 1);
-    }
-  }
-  let x_38 : i32 = a;
-  if ((x_38 == -2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 437221f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-
-void main_1() {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      a = ((i | -2) - 1);
-    }
-  }
-  if ((a == -2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5d64f57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int two;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int a = 0;
-  int i = 0;
-  a = 0;
-  i = 0;
-  while (true) {
-    int const x_30 = i;
-    if ((x_30 < 2)) {
-    } else {
-      break;
-    }
-    int const x_33 = i;
-    a = as_type<int>((as_type<uint>((x_33 | -2)) - as_type<uint>(1)));
-    {
-      int const x_36 = i;
-      i = as_type<int>((as_type<uint>(x_36) + as_type<uint>(1)));
-    }
-  }
-  int const x_38 = a;
-  if ((x_38 == -2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4b63e0c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "two"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %int_n2 = OpConstant %int -2
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %46 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %47 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %48 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %18
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %a %int_0
-               OpStore %i %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %int %i
-         %27 = OpSLessThan %bool %25 %int_2
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpBranch %29
-         %31 = OpLabel
-               OpBranch %22
-         %29 = OpLabel
-         %32 = OpLoad %int %i
-         %34 = OpBitwiseOr %int %32 %int_n2
-         %36 = OpISub %int %34 %int_1
-               OpStore %a %36
-               OpBranch %23
-         %23 = OpLabel
-         %37 = OpLoad %int %i
-         %38 = OpIAdd %int %37 %int_1
-               OpStore %i %38
-               OpBranch %21
-         %22 = OpLabel
-         %39 = OpLoad %int %a
-         %40 = OpIEqual %bool %39 %int_n2
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %43
-         %42 = OpLabel
-               OpStore %x_GLF_color %46
-               OpBranch %41
-         %43 = OpLabel
-               OpStore %x_GLF_color %47
-               OpBranch %41
-         %41 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %48
-         %51 = OpLabel
-         %52 = OpFunctionCall %void %main_1
-         %53 = OpLoad %v4float %x_GLF_color
-         %54 = OpCompositeConstruct %main_out %53
-               OpReturnValue %54
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %56 = OpLabel
-         %57 = OpFunctionCall %main_out %main_inner
-         %58 = OpCompositeExtract %v4float %57 0
-               OpStore %x_GLF_color_1_1 %58
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5aa3bbe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-inclusive-or/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,47 +0,0 @@
-[[block]]
-struct buf0 {
-  two : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-fn main_1() {
-  var a : i32;
-  var i : i32;
-  a = 0;
-  i = 0;
-  loop {
-    let x_30 : i32 = i;
-    if ((x_30 < 2)) {
-    } else {
-      break;
-    }
-    let x_33 : i32 = i;
-    a = ((x_33 | -2) - 1);
-
-    continuing {
-      let x_36 : i32 = i;
-      i = (x_36 + 1);
-    }
-  }
-  let x_38 : i32 = a;
-  if ((x_38 == -2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ae4cdca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int sum = 0;
-  int i = 0;
-  a = 65536;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  sum = x_29;
-  const int x_31 = asint(x_7[1].x);
-  if ((1 == x_31)) {
-    a = (a - 1);
-  }
-  i = 0;
-  while (true) {
-    if ((i < a)) {
-    } else {
-      break;
-    }
-    sum = (sum + i);
-    {
-      const int x_49 = asint(x_7[2].x);
-      i = (i + x_49);
-    }
-  }
-  const int x_52 = sum;
-  const int x_54 = asint(x_7[3].x);
-  if ((x_52 == x_54)) {
-    const int x_60 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_63 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_69 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_60), float(x_63), float(x_66), float(x_69));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_73 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_74 = float(x_73);
-    x_GLF_color = float4(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.msl
deleted file mode 100644
index 70386d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int sum = 0;
-  int i = 0;
-  a = 65536;
-  int const x_29 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  sum = x_29;
-  int const x_31 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((1 == x_31)) {
-    int const x_35 = a;
-    a = as_type<int>((as_type<uint>(x_35) - as_type<uint>(1)));
-  }
-  i = 0;
-  while (true) {
-    int const x_41 = i;
-    int const x_42 = a;
-    if ((x_41 < x_42)) {
-    } else {
-      break;
-    }
-    int const x_45 = i;
-    int const x_46 = sum;
-    sum = as_type<int>((as_type<uint>(x_46) + as_type<uint>(x_45)));
-    {
-      int const x_49 = x_7.x_GLF_uniform_int_values.arr[2].el;
-      int const x_50 = i;
-      i = as_type<int>((as_type<uint>(x_50) + as_type<uint>(x_49)));
-    }
-  }
-  int const x_52 = sum;
-  int const x_54 = x_7.x_GLF_uniform_int_values.arr[3].el;
-  if ((x_52 == x_54)) {
-    int const x_60 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_63 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_66 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_69 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_60), float(x_63), float(x_66), float(x_69));
-  } else {
-    int const x_73 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_74 = float(x_73);
-    *(tint_symbol_3) = float4(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1f8dc72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 93
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %sum "sum"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-  %int_65536 = OpConstant %int 65536
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-         %82 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-        %sum = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_65536
-         %28 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %29 = OpLoad %int %28
-               OpStore %sum %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %32 = OpLoad %int %31
-         %33 = OpIEqual %bool %int_1 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %37 = OpLoad %int %a
-         %38 = OpISub %int %37 %int_1
-               OpStore %a %38
-               OpBranch %35
-         %35 = OpLabel
-               OpStore %i %int_0
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpLoad %int %i
-         %44 = OpLoad %int %a
-         %45 = OpSLessThan %bool %43 %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %40
-         %46 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpLoad %int %sum
-         %51 = OpIAdd %int %50 %49
-               OpStore %sum %51
-               OpBranch %41
-         %41 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %54 = OpLoad %int %53
-         %55 = OpLoad %int %i
-         %56 = OpIAdd %int %55 %54
-               OpStore %i %56
-               OpBranch %39
-         %40 = OpLabel
-         %57 = OpLoad %int %sum
-         %59 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_3
-         %60 = OpLoad %int %59
-         %61 = OpIEqual %bool %57 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %64
-         %63 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %72 = OpLoad %int %71
-         %73 = OpConvertSToF %float %66
-         %74 = OpConvertSToF %float %68
-         %75 = OpConvertSToF %float %70
-         %76 = OpConvertSToF %float %72
-         %77 = OpCompositeConstruct %v4float %73 %74 %75 %76
-               OpStore %x_GLF_color %77
-               OpBranch %62
-         %64 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %79
-         %81 = OpCompositeConstruct %v4float %80 %80 %80 %80
-               OpStore %x_GLF_color %81
-               OpBranch %62
-         %62 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %82
-         %85 = OpLabel
-         %86 = OpFunctionCall %void %main_1
-         %87 = OpLoad %v4float %x_GLF_color
-         %88 = OpCompositeConstruct %main_out %87
-               OpReturnValue %88
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %90 = OpLabel
-         %91 = OpFunctionCall %main_out %main_inner
-         %92 = OpCompositeExtract %v4float %91 0
-               OpStore %x_GLF_color_1_1 %92
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c8d8ccc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var sum : i32;
-  var i : i32;
-  a = 65536;
-  let x_29 : i32 = x_7.x_GLF_uniform_int_values[0];
-  sum = x_29;
-  let x_31 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((1 == x_31)) {
-    let x_35 : i32 = a;
-    a = (x_35 - 1);
-  }
-  i = 0;
-  loop {
-    let x_41 : i32 = i;
-    let x_42 : i32 = a;
-    if ((x_41 < x_42)) {
-    } else {
-      break;
-    }
-    let x_45 : i32 = i;
-    let x_46 : i32 = sum;
-    sum = (x_46 + x_45);
-
-    continuing {
-      let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
-      let x_50 : i32 = i;
-      i = (x_50 + x_49);
-    }
-  }
-  let x_52 : i32 = sum;
-  let x_54 : i32 = x_7.x_GLF_uniform_int_values[3];
-  if ((x_52 == x_54)) {
-    let x_60 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_63 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_66 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_69 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_60), f32(x_63), f32(x_66), f32(x_69));
-  } else {
-    let x_73 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_74 : f32 = f32(x_73);
-    x_GLF_color = vec4<f32>(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index ae4cdca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,67 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int a = 0;
-  int sum = 0;
-  int i = 0;
-  a = 65536;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_29 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  sum = x_29;
-  const int x_31 = asint(x_7[1].x);
-  if ((1 == x_31)) {
-    a = (a - 1);
-  }
-  i = 0;
-  while (true) {
-    if ((i < a)) {
-    } else {
-      break;
-    }
-    sum = (sum + i);
-    {
-      const int x_49 = asint(x_7[2].x);
-      i = (i + x_49);
-    }
-  }
-  const int x_52 = sum;
-  const int x_54 = asint(x_7[3].x);
-  if ((x_52 == x_54)) {
-    const int x_60 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_63 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_66 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_69 = asint(x_7[1].x);
-    x_GLF_color = float4(float(x_60), float(x_63), float(x_66), float(x_69));
-  } else {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_73 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const float x_74 = float(x_73);
-    x_GLF_color = float4(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.msl
deleted file mode 100644
index 70386d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int a = 0;
-  int sum = 0;
-  int i = 0;
-  a = 65536;
-  int const x_29 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  sum = x_29;
-  int const x_31 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((1 == x_31)) {
-    int const x_35 = a;
-    a = as_type<int>((as_type<uint>(x_35) - as_type<uint>(1)));
-  }
-  i = 0;
-  while (true) {
-    int const x_41 = i;
-    int const x_42 = a;
-    if ((x_41 < x_42)) {
-    } else {
-      break;
-    }
-    int const x_45 = i;
-    int const x_46 = sum;
-    sum = as_type<int>((as_type<uint>(x_46) + as_type<uint>(x_45)));
-    {
-      int const x_49 = x_7.x_GLF_uniform_int_values.arr[2].el;
-      int const x_50 = i;
-      i = as_type<int>((as_type<uint>(x_50) + as_type<uint>(x_49)));
-    }
-  }
-  int const x_52 = sum;
-  int const x_54 = x_7.x_GLF_uniform_int_values.arr[3].el;
-  if ((x_52 == x_54)) {
-    int const x_60 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_63 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_66 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_69 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_60), float(x_63), float(x_66), float(x_69));
-  } else {
-    int const x_73 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_74 = float(x_73);
-    *(tint_symbol_3) = float4(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1f8dc72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 93
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %sum "sum"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-  %int_65536 = OpConstant %int 65536
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-         %82 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %a = OpVariable %_ptr_Function_int Function %21
-        %sum = OpVariable %_ptr_Function_int Function %21
-          %i = OpVariable %_ptr_Function_int Function %21
-               OpStore %a %int_65536
-         %28 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %29 = OpLoad %int %28
-               OpStore %sum %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %32 = OpLoad %int %31
-         %33 = OpIEqual %bool %int_1 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %37 = OpLoad %int %a
-         %38 = OpISub %int %37 %int_1
-               OpStore %a %38
-               OpBranch %35
-         %35 = OpLabel
-               OpStore %i %int_0
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %43 = OpLoad %int %i
-         %44 = OpLoad %int %a
-         %45 = OpSLessThan %bool %43 %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %40
-         %46 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpLoad %int %sum
-         %51 = OpIAdd %int %50 %49
-               OpStore %sum %51
-               OpBranch %41
-         %41 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_2
-         %54 = OpLoad %int %53
-         %55 = OpLoad %int %i
-         %56 = OpIAdd %int %55 %54
-               OpStore %i %56
-               OpBranch %39
-         %40 = OpLabel
-         %57 = OpLoad %int %sum
-         %59 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_3
-         %60 = OpLoad %int %59
-         %61 = OpIEqual %bool %57 %60
-               OpSelectionMerge %62 None
-               OpBranchConditional %61 %63 %64
-         %63 = OpLabel
-         %65 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %66 = OpLoad %int %65
-         %67 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %68 = OpLoad %int %67
-         %69 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %72 = OpLoad %int %71
-         %73 = OpConvertSToF %float %66
-         %74 = OpConvertSToF %float %68
-         %75 = OpConvertSToF %float %70
-         %76 = OpConvertSToF %float %72
-         %77 = OpCompositeConstruct %v4float %73 %74 %75 %76
-               OpStore %x_GLF_color %77
-               OpBranch %62
-         %64 = OpLabel
-         %78 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %79 = OpLoad %int %78
-         %80 = OpConvertSToF %float %79
-         %81 = OpCompositeConstruct %v4float %80 %80 %80 %80
-               OpStore %x_GLF_color %81
-               OpBranch %62
-         %62 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %82
-         %85 = OpLabel
-         %86 = OpFunctionCall %void %main_1
-         %87 = OpLoad %v4float %x_GLF_color
-         %88 = OpCompositeConstruct %main_out %87
-               OpReturnValue %88
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %90 = OpLabel
-         %91 = OpFunctionCall %main_out %main_inner
-         %92 = OpCompositeExtract %v4float %91 0
-               OpStore %x_GLF_color_1_1 %92
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c8d8ccc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-known-nonzero/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : i32;
-  var sum : i32;
-  var i : i32;
-  a = 65536;
-  let x_29 : i32 = x_7.x_GLF_uniform_int_values[0];
-  sum = x_29;
-  let x_31 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((1 == x_31)) {
-    let x_35 : i32 = a;
-    a = (x_35 - 1);
-  }
-  i = 0;
-  loop {
-    let x_41 : i32 = i;
-    let x_42 : i32 = a;
-    if ((x_41 < x_42)) {
-    } else {
-      break;
-    }
-    let x_45 : i32 = i;
-    let x_46 : i32 = sum;
-    sum = (x_46 + x_45);
-
-    continuing {
-      let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
-      let x_50 : i32 = i;
-      i = (x_50 + x_49);
-    }
-  }
-  let x_52 : i32 = sum;
-  let x_54 : i32 = x_7.x_GLF_uniform_int_values[3];
-  if ((x_52 == x_54)) {
-    let x_60 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_63 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_66 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_69 : i32 = x_7.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_60), f32(x_63), f32(x_66), f32(x_69));
-  } else {
-    let x_73 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_74 : f32 = f32(x_73);
-    x_GLF_color = vec4<f32>(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b7ce59e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-cbuffer cbuffer_x_6 : register(b2, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const uint x_36 = x_6[scalar_offset / 4][scalar_offset % 4];
-  f = asfloat(max(100u, x_36));
-  const float x_39 = f;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_39 == x_41)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_50 = asint(x_10[1].x);
-    const int x_53 = asint(x_10[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    const int x_60 = asint(x_10[1].x);
-    const float x_61 = float(x_60);
-    x_GLF_color = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.msl
deleted file mode 100644
index fded02b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_uint_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf2& x_6, constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  uint const x_36 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  f = as_type<float>(max(100u, x_36));
-  float const x_39 = f;
-  float const x_41 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_39 == x_41)) {
-    int const x_47 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_50 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_53 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    int const x_60 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_61 = float(x_60);
-    *(tint_symbol_3) = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf2& x_6, constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf2& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]], constant buf0& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 947f831..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,138 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-         %38 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_uint_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_uint_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 2
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-       %buf2 = OpTypeStruct %_arr_uint_uint_1
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_6 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %24 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-   %uint_100 = OpConstant %uint 100
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %24
-         %27 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %30
-         %34 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %35 = OpLoad %uint %34
-         %37 = OpExtInst %uint %38 UMax %uint_100 %35
-         %36 = OpBitcast %float %37
-               OpStore %f %36
-         %40 = OpLoad %float %f
-         %42 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %44 = OpFOrdEqual %bool %40 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %53 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %58 = OpLoad %int %57
-         %59 = OpConvertSToF %float %51
-         %60 = OpConvertSToF %float %54
-         %61 = OpConvertSToF %float %56
-         %62 = OpConvertSToF %float %58
-         %63 = OpCompositeConstruct %v4float %59 %60 %61 %62
-               OpStore %x_GLF_color %63
-               OpBranch %46
-         %48 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpConvertSToF %float %65
-         %67 = OpCompositeConstruct %v4float %66 %66 %66 %66
-               OpStore %x_GLF_color %67
-               OpBranch %46
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-         %71 = OpLabel
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %24
-         %76 = OpLabel
-         %77 = OpFunctionCall %main_out %main_inner
-         %78 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0bf1020..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<u32, 1>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_uint_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-type Arr_2 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_2;
-};
-
-[[group(0), binding(2)]] var<uniform> x_6 : buf2;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn main_1() {
-  var f : f32;
-  let x_36 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  f = bitcast<f32>(max(100u, x_36));
-  let x_39 : f32 = f;
-  let x_41 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_39 == x_41)) {
-    let x_47 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_50 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_53 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_47), f32(x_50), f32(x_53), f32(x_56));
-  } else {
-    let x_60 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_61 : f32 = f32(x_60);
-    x_GLF_color = vec4<f32>(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b7ce59e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-cbuffer cbuffer_x_6 : register(b2, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[2];
-};
-
-void main_1() {
-  float f = 0.0f;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const uint x_36 = x_6[scalar_offset / 4][scalar_offset % 4];
-  f = asfloat(max(100u, x_36));
-  const float x_39 = f;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_41 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  if ((x_39 == x_41)) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_47 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_50 = asint(x_10[1].x);
-    const int x_53 = asint(x_10[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    const int x_60 = asint(x_10[1].x);
-    const float x_61 = float(x_60);
-    x_GLF_color = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.msl
deleted file mode 100644
index fded02b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[1];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_uint_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf2& x_6, constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_3) {
-  float f = 0.0f;
-  uint const x_36 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  f = as_type<float>(max(100u, x_36));
-  float const x_39 = f;
-  float const x_41 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  if ((x_39 == x_41)) {
-    int const x_47 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    int const x_50 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_53 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    int const x_56 = x_10.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_47), float(x_50), float(x_53), float(x_56));
-  } else {
-    int const x_60 = x_10.x_GLF_uniform_int_values.arr[1].el;
-    float const x_61 = float(x_60);
-    *(tint_symbol_3) = float4(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf2& x_6, constant buf1& x_8, constant buf0& x_10, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_10, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf2& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]], constant buf0& x_10 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_10, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 947f831..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,138 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-         %38 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_uint_values"
-               OpName %x_6 "x_6"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_10 "x_10"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_uint_uint_1 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 2
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_uint_uint_1 = OpTypeArray %uint %uint_1
-       %buf2 = OpTypeStruct %_arr_uint_uint_1
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_6 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf1 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %24 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %30 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-   %uint_100 = OpConstant %uint 100
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %24
-         %27 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %30
-         %34 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %35 = OpLoad %uint %34
-         %37 = OpExtInst %uint %38 UMax %uint_100 %35
-         %36 = OpBitcast %float %37
-               OpStore %f %36
-         %40 = OpLoad %float %f
-         %42 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %43 = OpLoad %float %42
-         %44 = OpFOrdEqual %bool %40 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-         %50 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %51 = OpLoad %int %50
-         %53 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_0
-         %58 = OpLoad %int %57
-         %59 = OpConvertSToF %float %51
-         %60 = OpConvertSToF %float %54
-         %61 = OpConvertSToF %float %56
-         %62 = OpConvertSToF %float %58
-         %63 = OpCompositeConstruct %v4float %59 %60 %61 %62
-               OpStore %x_GLF_color %63
-               OpBranch %46
-         %48 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0 %int_1
-         %65 = OpLoad %int %64
-         %66 = OpConvertSToF %float %65
-         %67 = OpCompositeConstruct %v4float %66 %66 %66 %66
-               OpStore %x_GLF_color %67
-               OpBranch %46
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-         %71 = OpLabel
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %24
-         %76 = OpLabel
-         %77 = OpFunctionCall %main_out %main_inner
-         %78 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 0bf1020..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-max-uintbitstofloat/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,59 +0,0 @@
-type Arr = [[stride(16)]] array<u32, 1>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_uint_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-type Arr_2 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_2;
-};
-
-[[group(0), binding(2)]] var<uniform> x_6 : buf2;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-fn main_1() {
-  var f : f32;
-  let x_36 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  f = bitcast<f32>(max(100u, x_36));
-  let x_39 : f32 = f;
-  let x_41 : f32 = x_8.x_GLF_uniform_float_values[0];
-  if ((x_39 == x_41)) {
-    let x_47 : i32 = x_10.x_GLF_uniform_int_values[0];
-    let x_50 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_53 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_56 : i32 = x_10.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_47), f32(x_50), f32(x_53), f32(x_56));
-  } else {
-    let x_60 : i32 = x_10.x_GLF_uniform_int_values[1];
-    let x_61 : f32 = f32(x_60);
-    x_GLF_color = vec4<f32>(x_61, x_61, x_61, x_61);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 37bb0b3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,156 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[16];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int ref[15] = (int[15])0;
-  int i = 0;
-  int data[15] = (int[15])0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_46 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_48 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  ref[x_46] = x_48;
-  const int x_51 = asint(x_6[1].x);
-  const int x_53 = asint(x_6[1].x);
-  ref[x_51] = x_53;
-  const int x_56 = asint(x_6[2].x);
-  const int x_58 = asint(x_6[2].x);
-  ref[x_56] = x_58;
-  const int x_61 = asint(x_6[3].x);
-  const int x_63 = asint(x_6[3].x);
-  ref[x_61] = x_63;
-  const int x_66 = asint(x_6[4].x);
-  const int x_68 = asint(x_6[4].x);
-  ref[x_66] = x_68;
-  const int x_71 = asint(x_6[5].x);
-  const int x_73 = asint(x_6[1].x);
-  ref[x_71] = -(x_73);
-  const int x_77 = asint(x_6[8].x);
-  const int x_79 = asint(x_6[1].x);
-  ref[x_77] = -(x_79);
-  const int x_83 = asint(x_6[9].x);
-  const int x_85 = asint(x_6[1].x);
-  ref[x_83] = -(x_85);
-  const int x_89 = asint(x_6[10].x);
-  const int x_91 = asint(x_6[1].x);
-  ref[x_89] = -(x_91);
-  const int x_95 = asint(x_6[11].x);
-  const int x_97 = asint(x_6[1].x);
-  ref[x_95] = -(x_97);
-  const int x_101 = asint(x_6[6].x);
-  const int x_103 = asint(x_6[2].x);
-  ref[x_101] = -(x_103);
-  const int x_107 = asint(x_6[12].x);
-  const int x_109 = asint(x_6[2].x);
-  ref[x_107] = -(x_109);
-  const int x_113 = asint(x_6[13].x);
-  const int x_115 = asint(x_6[2].x);
-  ref[x_113] = -(x_115);
-  const int x_119 = asint(x_6[14].x);
-  const int x_121 = asint(x_6[2].x);
-  ref[x_119] = -(x_121);
-  const int x_125 = asint(x_6[15].x);
-  const int x_127 = asint(x_6[2].x);
-  ref[x_125] = -(x_127);
-  i = 0;
-  while (true) {
-    const int x_134 = i;
-    const int x_136 = asint(x_6[5].x);
-    if ((x_134 < x_136)) {
-    } else {
-      break;
-    }
-    const int x_139 = i;
-    const int x_140 = i;
-    const int x_142 = i;
-    const int x_145 = asint(x_6[1].x);
-    data[x_139] = ~(clamp(~(x_140), ~(x_142), x_145));
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_152 = asint(x_6[5].x);
-  i_1 = x_152;
-  while (true) {
-    const int x_157 = i_1;
-    const int x_159 = asint(x_6[6].x);
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    data[i_1] = ~(clamp(~(i_1), 0, 1));
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const int x_171 = asint(x_6[6].x);
-  i_2 = x_171;
-  while (true) {
-    const int x_176 = i_2;
-    const int x_178 = asint(x_6[7].x);
-    if ((x_176 < x_178)) {
-    } else {
-      break;
-    }
-    data[i_2] = ~(clamp(i_2, 0, 1));
-    {
-      i_2 = (i_2 + 1);
-    }
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_189 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  i_3 = x_189;
-  while (true) {
-    const int x_194 = i_3;
-    const int x_196 = asint(x_6[7].x);
-    if ((x_194 < x_196)) {
-    } else {
-      break;
-    }
-    const int x_201 = data[i_3];
-    const int x_204 = ref[i_3];
-    if ((x_201 != x_204)) {
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const int x_209 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const float x_210 = float(x_209);
-      x_GLF_color = float4(x_210, x_210, x_210, x_210);
-      return;
-    }
-    {
-      i_3 = (i_3 + 1);
-    }
-  }
-  const int x_215 = asint(x_6[1].x);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_218 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const int x_221 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const int x_224 = asint(x_6[1].x);
-  x_GLF_color = float4(float(x_215), float(x_218), float(x_221), float(x_224));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0bd5417..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,178 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[16];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[15];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_1 ref = {};
-  int i = 0;
-  tint_array_wrapper_1 data = {};
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  ref.arr[x_46] = x_48;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_51] = x_53;
-  int const x_56 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_58 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_56] = x_58;
-  int const x_61 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_63 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  ref.arr[x_61] = x_63;
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_68 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  ref.arr[x_66] = x_68;
-  int const x_71 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_73 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_71] = tint_unary_minus(x_73);
-  int const x_77 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_79 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_77] = tint_unary_minus(x_79);
-  int const x_83 = x_6.x_GLF_uniform_int_values.arr[9].el;
-  int const x_85 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_83] = tint_unary_minus(x_85);
-  int const x_89 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  int const x_91 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_89] = tint_unary_minus(x_91);
-  int const x_95 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_97 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_95] = tint_unary_minus(x_97);
-  int const x_101 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_103 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_101] = tint_unary_minus(x_103);
-  int const x_107 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_109 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_107] = tint_unary_minus(x_109);
-  int const x_113 = x_6.x_GLF_uniform_int_values.arr[13].el;
-  int const x_115 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_113] = tint_unary_minus(x_115);
-  int const x_119 = x_6.x_GLF_uniform_int_values.arr[14].el;
-  int const x_121 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_119] = tint_unary_minus(x_121);
-  int const x_125 = x_6.x_GLF_uniform_int_values.arr[15].el;
-  int const x_127 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_125] = tint_unary_minus(x_127);
-  i = 0;
-  while (true) {
-    int const x_134 = i;
-    int const x_136 = x_6.x_GLF_uniform_int_values.arr[5].el;
-    if ((x_134 < x_136)) {
-    } else {
-      break;
-    }
-    int const x_139 = i;
-    int const x_140 = i;
-    int const x_142 = i;
-    int const x_145 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    data.arr[x_139] = ~(clamp(~(x_140), ~(x_142), x_145));
-    {
-      int const x_149 = i;
-      i = as_type<int>((as_type<uint>(x_149) + as_type<uint>(1)));
-    }
-  }
-  int const x_152 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  i_1 = x_152;
-  while (true) {
-    int const x_157 = i_1;
-    int const x_159 = x_6.x_GLF_uniform_int_values.arr[6].el;
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    int const x_162 = i_1;
-    int const x_163 = i_1;
-    data.arr[x_162] = ~(clamp(~(x_163), 0, 1));
-    {
-      int const x_168 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_168) + as_type<uint>(1)));
-    }
-  }
-  int const x_171 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  i_2 = x_171;
-  while (true) {
-    int const x_176 = i_2;
-    int const x_178 = x_6.x_GLF_uniform_int_values.arr[7].el;
-    if ((x_176 < x_178)) {
-    } else {
-      break;
-    }
-    int const x_181 = i_2;
-    int const x_182 = i_2;
-    data.arr[x_181] = ~(clamp(x_182, 0, 1));
-    {
-      int const x_186 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_186) + as_type<uint>(1)));
-    }
-  }
-  int const x_189 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i_3 = x_189;
-  while (true) {
-    int const x_194 = i_3;
-    int const x_196 = x_6.x_GLF_uniform_int_values.arr[7].el;
-    if ((x_194 < x_196)) {
-    } else {
-      break;
-    }
-    int const x_199 = i_3;
-    int const x_201 = data.arr[x_199];
-    int const x_202 = i_3;
-    int const x_204 = ref.arr[x_202];
-    if ((x_201 != x_204)) {
-      int const x_209 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      float const x_210 = float(x_209);
-      *(tint_symbol_3) = float4(x_210, x_210, x_210, x_210);
-      return;
-    }
-    {
-      int const x_212 = i_3;
-      i_3 = as_type<int>((as_type<uint>(x_212) + as_type<uint>(1)));
-    }
-  }
-  int const x_215 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_218 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_221 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_224 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  *(tint_symbol_3) = float4(float(x_215), float(x_218), float(x_221), float(x_224));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 86dae79..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,359 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 252
-; Schema: 0
-               OpCapability Shader
-        %153 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %ref "ref"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %i_3 "i_3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_16 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_15 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_int_uint_16 = OpTypeArray %int %uint_16
-       %buf0 = OpTypeStruct %_arr_int_uint_16
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %uint_15 = OpConstant %uint 15
-%_arr_int_uint_15 = OpTypeArray %int %uint_15
-%_ptr_Function__arr_int_uint_15 = OpTypePointer Function %_arr_int_uint_15
-         %23 = OpConstantNull %_arr_int_uint_15
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-     %int_11 = OpConstant %int 11
-      %int_6 = OpConstant %int 6
-     %int_12 = OpConstant %int 12
-     %int_13 = OpConstant %int 13
-     %int_14 = OpConstant %int 14
-     %int_15 = OpConstant %int 15
-       %bool = OpTypeBool
-      %int_7 = OpConstant %int 7
-   %main_out = OpTypeStruct %v4float
-        %241 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-        %ref = OpVariable %_ptr_Function__arr_int_uint_15 Function %23
-          %i = OpVariable %_ptr_Function_int Function %26
-       %data = OpVariable %_ptr_Function__arr_int_uint_15 Function %23
-        %i_1 = OpVariable %_ptr_Function_int Function %26
-        %i_2 = OpVariable %_ptr_Function_int Function %26
-        %i_3 = OpVariable %_ptr_Function_int Function %26
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Function_int %ref %35
-               OpStore %38 %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Function_int %ref %41
-               OpStore %44 %43
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Function_int %ref %47
-               OpStore %50 %49
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Function_int %ref %53
-               OpStore %56 %55
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Function_int %ref %59
-               OpStore %62 %61
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Function_int %ref %65
-         %69 = OpSNegate %int %67
-               OpStore %68 %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Function_int %ref %72
-         %76 = OpSNegate %int %74
-               OpStore %75 %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Function_int %ref %79
-         %83 = OpSNegate %int %81
-               OpStore %82 %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Function_int %ref %86
-         %90 = OpSNegate %int %88
-               OpStore %89 %90
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-         %93 = OpLoad %int %92
-         %94 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Function_int %ref %93
-         %97 = OpSNegate %int %95
-               OpStore %96 %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %102 = OpLoad %int %101
-        %103 = OpAccessChain %_ptr_Function_int %ref %100
-        %104 = OpSNegate %int %102
-               OpStore %103 %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Function_int %ref %107
-        %111 = OpSNegate %int %109
-               OpStore %110 %111
-        %113 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_13
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %116 = OpLoad %int %115
-        %117 = OpAccessChain %_ptr_Function_int %ref %114
-        %118 = OpSNegate %int %116
-               OpStore %117 %118
-        %120 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_14
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %123 = OpLoad %int %122
-        %124 = OpAccessChain %_ptr_Function_int %ref %121
-        %125 = OpSNegate %int %123
-               OpStore %124 %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_15
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %130 = OpLoad %int %129
-        %131 = OpAccessChain %_ptr_Function_int %ref %128
-        %132 = OpSNegate %int %130
-               OpStore %131 %132
-               OpStore %i %int_0
-               OpBranch %133
-        %133 = OpLabel
-               OpLoopMerge %134 %135 None
-               OpBranch %136
-        %136 = OpLabel
-        %137 = OpLoad %int %i
-        %138 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %139 = OpLoad %int %138
-        %140 = OpSLessThan %bool %137 %139
-               OpSelectionMerge %142 None
-               OpBranchConditional %140 %143 %144
-        %143 = OpLabel
-               OpBranch %142
-        %144 = OpLabel
-               OpBranch %134
-        %142 = OpLabel
-        %145 = OpLoad %int %i
-        %146 = OpLoad %int %i
-        %147 = OpLoad %int %i
-        %148 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %149 = OpLoad %int %148
-        %150 = OpAccessChain %_ptr_Function_int %data %145
-        %154 = OpNot %int %146
-        %155 = OpNot %int %147
-        %152 = OpExtInst %int %153 SClamp %154 %155 %149
-        %151 = OpNot %int %152
-               OpStore %150 %151
-               OpBranch %135
-        %135 = OpLabel
-        %156 = OpLoad %int %i
-        %157 = OpIAdd %int %156 %int_1
-               OpStore %i %157
-               OpBranch %133
-        %134 = OpLabel
-        %158 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %159 = OpLoad %int %158
-               OpStore %i_1 %159
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %164 = OpLoad %int %i_1
-        %165 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %164 %166
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %161
-        %168 = OpLabel
-        %171 = OpLoad %int %i_1
-        %172 = OpLoad %int %i_1
-        %173 = OpAccessChain %_ptr_Function_int %data %171
-        %176 = OpNot %int %172
-        %175 = OpExtInst %int %153 SClamp %176 %int_0 %int_1
-        %174 = OpNot %int %175
-               OpStore %173 %174
-               OpBranch %162
-        %162 = OpLabel
-        %177 = OpLoad %int %i_1
-        %178 = OpIAdd %int %177 %int_1
-               OpStore %i_1 %178
-               OpBranch %160
-        %161 = OpLabel
-        %179 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %180 = OpLoad %int %179
-               OpStore %i_2 %180
-               OpBranch %181
-        %181 = OpLabel
-               OpLoopMerge %182 %183 None
-               OpBranch %184
-        %184 = OpLabel
-        %185 = OpLoad %int %i_2
-        %187 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-        %188 = OpLoad %int %187
-        %189 = OpSLessThan %bool %185 %188
-               OpSelectionMerge %190 None
-               OpBranchConditional %189 %191 %192
-        %191 = OpLabel
-               OpBranch %190
-        %192 = OpLabel
-               OpBranch %182
-        %190 = OpLabel
-        %193 = OpLoad %int %i_2
-        %194 = OpLoad %int %i_2
-        %195 = OpAccessChain %_ptr_Function_int %data %193
-        %197 = OpExtInst %int %153 SClamp %194 %int_0 %int_1
-        %196 = OpNot %int %197
-               OpStore %195 %196
-               OpBranch %183
-        %183 = OpLabel
-        %198 = OpLoad %int %i_2
-        %199 = OpIAdd %int %198 %int_1
-               OpStore %i_2 %199
-               OpBranch %181
-        %182 = OpLabel
-        %200 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %201 = OpLoad %int %200
-               OpStore %i_3 %201
-               OpBranch %202
-        %202 = OpLabel
-               OpLoopMerge %203 %204 None
-               OpBranch %205
-        %205 = OpLabel
-        %206 = OpLoad %int %i_3
-        %207 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-        %208 = OpLoad %int %207
-        %209 = OpSLessThan %bool %206 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %212
-        %211 = OpLabel
-               OpBranch %210
-        %212 = OpLabel
-               OpBranch %203
-        %210 = OpLabel
-        %213 = OpLoad %int %i_3
-        %214 = OpAccessChain %_ptr_Function_int %data %213
-        %215 = OpLoad %int %214
-        %216 = OpLoad %int %i_3
-        %217 = OpAccessChain %_ptr_Function_int %ref %216
-        %218 = OpLoad %int %217
-        %219 = OpINotEqual %bool %215 %218
-               OpSelectionMerge %220 None
-               OpBranchConditional %219 %221 %220
-        %221 = OpLabel
-        %222 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %223 = OpLoad %int %222
-        %224 = OpConvertSToF %float %223
-        %225 = OpCompositeConstruct %v4float %224 %224 %224 %224
-               OpStore %x_GLF_color %225
-               OpReturn
-        %220 = OpLabel
-               OpBranch %204
-        %204 = OpLabel
-        %226 = OpLoad %int %i_3
-        %227 = OpIAdd %int %226 %int_1
-               OpStore %i_3 %227
-               OpBranch %202
-        %203 = OpLabel
-        %228 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %229 = OpLoad %int %228
-        %230 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %231 = OpLoad %int %230
-        %232 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %233 = OpLoad %int %232
-        %234 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %235 = OpLoad %int %234
-        %236 = OpConvertSToF %float %229
-        %237 = OpConvertSToF %float %231
-        %238 = OpConvertSToF %float %233
-        %239 = OpConvertSToF %float %235
-        %240 = OpCompositeConstruct %v4float %236 %237 %238 %239
-               OpStore %x_GLF_color %240
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %241
-        %244 = OpLabel
-        %245 = OpFunctionCall %void %main_1
-        %246 = OpLoad %v4float %x_GLF_color
-        %247 = OpCompositeConstruct %main_out %246
-               OpReturnValue %247
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %249 = OpLabel
-        %250 = OpFunctionCall %main_out %main_inner
-        %251 = OpCompositeExtract %v4float %250 0
-               OpStore %x_GLF_color_1_1 %251
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2dc09e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,161 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 16>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var ref : array<i32, 15>;
-  var i : i32;
-  var data : array<i32, 15>;
-  var i_1 : i32;
-  var i_2 : i32;
-  var i_3 : i32;
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[0];
-  ref[x_46] = x_48;
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_51] = x_53;
-  let x_56 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_58 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_56] = x_58;
-  let x_61 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_63 : i32 = x_6.x_GLF_uniform_int_values[3];
-  ref[x_61] = x_63;
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_68 : i32 = x_6.x_GLF_uniform_int_values[4];
-  ref[x_66] = x_68;
-  let x_71 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_73 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_71] = -(x_73);
-  let x_77 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_79 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_77] = -(x_79);
-  let x_83 : i32 = x_6.x_GLF_uniform_int_values[9];
-  let x_85 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_83] = -(x_85);
-  let x_89 : i32 = x_6.x_GLF_uniform_int_values[10];
-  let x_91 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_89] = -(x_91);
-  let x_95 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_97 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_95] = -(x_97);
-  let x_101 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_103 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_101] = -(x_103);
-  let x_107 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_109 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_107] = -(x_109);
-  let x_113 : i32 = x_6.x_GLF_uniform_int_values[13];
-  let x_115 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_113] = -(x_115);
-  let x_119 : i32 = x_6.x_GLF_uniform_int_values[14];
-  let x_121 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_119] = -(x_121);
-  let x_125 : i32 = x_6.x_GLF_uniform_int_values[15];
-  let x_127 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_125] = -(x_127);
-  i = 0;
-  loop {
-    let x_134 : i32 = i;
-    let x_136 : i32 = x_6.x_GLF_uniform_int_values[5];
-    if ((x_134 < x_136)) {
-    } else {
-      break;
-    }
-    let x_139 : i32 = i;
-    let x_140 : i32 = i;
-    let x_142 : i32 = i;
-    let x_145 : i32 = x_6.x_GLF_uniform_int_values[1];
-    data[x_139] = ~(clamp(~(x_140), ~(x_142), x_145));
-
-    continuing {
-      let x_149 : i32 = i;
-      i = (x_149 + 1);
-    }
-  }
-  let x_152 : i32 = x_6.x_GLF_uniform_int_values[5];
-  i_1 = x_152;
-  loop {
-    let x_157 : i32 = i_1;
-    let x_159 : i32 = x_6.x_GLF_uniform_int_values[6];
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    let x_162 : i32 = i_1;
-    let x_163 : i32 = i_1;
-    data[x_162] = ~(clamp(~(x_163), 0, 1));
-
-    continuing {
-      let x_168 : i32 = i_1;
-      i_1 = (x_168 + 1);
-    }
-  }
-  let x_171 : i32 = x_6.x_GLF_uniform_int_values[6];
-  i_2 = x_171;
-  loop {
-    let x_176 : i32 = i_2;
-    let x_178 : i32 = x_6.x_GLF_uniform_int_values[7];
-    if ((x_176 < x_178)) {
-    } else {
-      break;
-    }
-    let x_181 : i32 = i_2;
-    let x_182 : i32 = i_2;
-    data[x_181] = ~(clamp(x_182, 0, 1));
-
-    continuing {
-      let x_186 : i32 = i_2;
-      i_2 = (x_186 + 1);
-    }
-  }
-  let x_189 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i_3 = x_189;
-  loop {
-    let x_194 : i32 = i_3;
-    let x_196 : i32 = x_6.x_GLF_uniform_int_values[7];
-    if ((x_194 < x_196)) {
-    } else {
-      break;
-    }
-    let x_199 : i32 = i_3;
-    let x_201 : i32 = data[x_199];
-    let x_202 : i32 = i_3;
-    let x_204 : i32 = ref[x_202];
-    if ((x_201 != x_204)) {
-      let x_209 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_210 : f32 = f32(x_209);
-      x_GLF_color = vec4<f32>(x_210, x_210, x_210, x_210);
-      return;
-    }
-
-    continuing {
-      let x_212 : i32 = i_3;
-      i_3 = (x_212 + 1);
-    }
-  }
-  let x_215 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_218 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_221 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_224 : i32 = x_6.x_GLF_uniform_int_values[1];
-  x_GLF_color = vec4<f32>(f32(x_215), f32(x_218), f32(x_221), f32(x_224));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 37bb0b3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,156 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[16];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int ref[15] = (int[15])0;
-  int i = 0;
-  int data[15] = (int[15])0;
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_46 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const int x_48 = asint(x_6[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  ref[x_46] = x_48;
-  const int x_51 = asint(x_6[1].x);
-  const int x_53 = asint(x_6[1].x);
-  ref[x_51] = x_53;
-  const int x_56 = asint(x_6[2].x);
-  const int x_58 = asint(x_6[2].x);
-  ref[x_56] = x_58;
-  const int x_61 = asint(x_6[3].x);
-  const int x_63 = asint(x_6[3].x);
-  ref[x_61] = x_63;
-  const int x_66 = asint(x_6[4].x);
-  const int x_68 = asint(x_6[4].x);
-  ref[x_66] = x_68;
-  const int x_71 = asint(x_6[5].x);
-  const int x_73 = asint(x_6[1].x);
-  ref[x_71] = -(x_73);
-  const int x_77 = asint(x_6[8].x);
-  const int x_79 = asint(x_6[1].x);
-  ref[x_77] = -(x_79);
-  const int x_83 = asint(x_6[9].x);
-  const int x_85 = asint(x_6[1].x);
-  ref[x_83] = -(x_85);
-  const int x_89 = asint(x_6[10].x);
-  const int x_91 = asint(x_6[1].x);
-  ref[x_89] = -(x_91);
-  const int x_95 = asint(x_6[11].x);
-  const int x_97 = asint(x_6[1].x);
-  ref[x_95] = -(x_97);
-  const int x_101 = asint(x_6[6].x);
-  const int x_103 = asint(x_6[2].x);
-  ref[x_101] = -(x_103);
-  const int x_107 = asint(x_6[12].x);
-  const int x_109 = asint(x_6[2].x);
-  ref[x_107] = -(x_109);
-  const int x_113 = asint(x_6[13].x);
-  const int x_115 = asint(x_6[2].x);
-  ref[x_113] = -(x_115);
-  const int x_119 = asint(x_6[14].x);
-  const int x_121 = asint(x_6[2].x);
-  ref[x_119] = -(x_121);
-  const int x_125 = asint(x_6[15].x);
-  const int x_127 = asint(x_6[2].x);
-  ref[x_125] = -(x_127);
-  i = 0;
-  while (true) {
-    const int x_134 = i;
-    const int x_136 = asint(x_6[5].x);
-    if ((x_134 < x_136)) {
-    } else {
-      break;
-    }
-    const int x_139 = i;
-    const int x_140 = i;
-    const int x_142 = i;
-    const int x_145 = asint(x_6[1].x);
-    data[x_139] = ~(clamp(~(x_140), ~(x_142), x_145));
-    {
-      i = (i + 1);
-    }
-  }
-  const int x_152 = asint(x_6[5].x);
-  i_1 = x_152;
-  while (true) {
-    const int x_157 = i_1;
-    const int x_159 = asint(x_6[6].x);
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    data[i_1] = ~(clamp(~(i_1), 0, 1));
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  const int x_171 = asint(x_6[6].x);
-  i_2 = x_171;
-  while (true) {
-    const int x_176 = i_2;
-    const int x_178 = asint(x_6[7].x);
-    if ((x_176 < x_178)) {
-    } else {
-      break;
-    }
-    data[i_2] = ~(clamp(i_2, 0, 1));
-    {
-      i_2 = (i_2 + 1);
-    }
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_189 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  i_3 = x_189;
-  while (true) {
-    const int x_194 = i_3;
-    const int x_196 = asint(x_6[7].x);
-    if ((x_194 < x_196)) {
-    } else {
-      break;
-    }
-    const int x_201 = data[i_3];
-    const int x_204 = ref[i_3];
-    if ((x_201 != x_204)) {
-      const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-      const int x_209 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-      const float x_210 = float(x_209);
-      x_GLF_color = float4(x_210, x_210, x_210, x_210);
-      return;
-    }
-    {
-      i_3 = (i_3 + 1);
-    }
-  }
-  const int x_215 = asint(x_6[1].x);
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const int x_218 = asint(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-  const int x_221 = asint(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-  const int x_224 = asint(x_6[1].x);
-  x_GLF_color = float4(float(x_215), float(x_218), float(x_221), float(x_224));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0bd5417..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,178 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[16];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  int arr[15];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_1 ref = {};
-  int i = 0;
-  tint_array_wrapper_1 data = {};
-  int i_1 = 0;
-  int i_2 = 0;
-  int i_3 = 0;
-  int const x_46 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_48 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  ref.arr[x_46] = x_48;
-  int const x_51 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_53 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_51] = x_53;
-  int const x_56 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  int const x_58 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_56] = x_58;
-  int const x_61 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  int const x_63 = x_6.x_GLF_uniform_int_values.arr[3].el;
-  ref.arr[x_61] = x_63;
-  int const x_66 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  int const x_68 = x_6.x_GLF_uniform_int_values.arr[4].el;
-  ref.arr[x_66] = x_68;
-  int const x_71 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  int const x_73 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_71] = tint_unary_minus(x_73);
-  int const x_77 = x_6.x_GLF_uniform_int_values.arr[8].el;
-  int const x_79 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_77] = tint_unary_minus(x_79);
-  int const x_83 = x_6.x_GLF_uniform_int_values.arr[9].el;
-  int const x_85 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_83] = tint_unary_minus(x_85);
-  int const x_89 = x_6.x_GLF_uniform_int_values.arr[10].el;
-  int const x_91 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_89] = tint_unary_minus(x_91);
-  int const x_95 = x_6.x_GLF_uniform_int_values.arr[11].el;
-  int const x_97 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  ref.arr[x_95] = tint_unary_minus(x_97);
-  int const x_101 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  int const x_103 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_101] = tint_unary_minus(x_103);
-  int const x_107 = x_6.x_GLF_uniform_int_values.arr[12].el;
-  int const x_109 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_107] = tint_unary_minus(x_109);
-  int const x_113 = x_6.x_GLF_uniform_int_values.arr[13].el;
-  int const x_115 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_113] = tint_unary_minus(x_115);
-  int const x_119 = x_6.x_GLF_uniform_int_values.arr[14].el;
-  int const x_121 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_119] = tint_unary_minus(x_121);
-  int const x_125 = x_6.x_GLF_uniform_int_values.arr[15].el;
-  int const x_127 = x_6.x_GLF_uniform_int_values.arr[2].el;
-  ref.arr[x_125] = tint_unary_minus(x_127);
-  i = 0;
-  while (true) {
-    int const x_134 = i;
-    int const x_136 = x_6.x_GLF_uniform_int_values.arr[5].el;
-    if ((x_134 < x_136)) {
-    } else {
-      break;
-    }
-    int const x_139 = i;
-    int const x_140 = i;
-    int const x_142 = i;
-    int const x_145 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    data.arr[x_139] = ~(clamp(~(x_140), ~(x_142), x_145));
-    {
-      int const x_149 = i;
-      i = as_type<int>((as_type<uint>(x_149) + as_type<uint>(1)));
-    }
-  }
-  int const x_152 = x_6.x_GLF_uniform_int_values.arr[5].el;
-  i_1 = x_152;
-  while (true) {
-    int const x_157 = i_1;
-    int const x_159 = x_6.x_GLF_uniform_int_values.arr[6].el;
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    int const x_162 = i_1;
-    int const x_163 = i_1;
-    data.arr[x_162] = ~(clamp(~(x_163), 0, 1));
-    {
-      int const x_168 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_168) + as_type<uint>(1)));
-    }
-  }
-  int const x_171 = x_6.x_GLF_uniform_int_values.arr[6].el;
-  i_2 = x_171;
-  while (true) {
-    int const x_176 = i_2;
-    int const x_178 = x_6.x_GLF_uniform_int_values.arr[7].el;
-    if ((x_176 < x_178)) {
-    } else {
-      break;
-    }
-    int const x_181 = i_2;
-    int const x_182 = i_2;
-    data.arr[x_181] = ~(clamp(x_182, 0, 1));
-    {
-      int const x_186 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_186) + as_type<uint>(1)));
-    }
-  }
-  int const x_189 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  i_3 = x_189;
-  while (true) {
-    int const x_194 = i_3;
-    int const x_196 = x_6.x_GLF_uniform_int_values.arr[7].el;
-    if ((x_194 < x_196)) {
-    } else {
-      break;
-    }
-    int const x_199 = i_3;
-    int const x_201 = data.arr[x_199];
-    int const x_202 = i_3;
-    int const x_204 = ref.arr[x_202];
-    if ((x_201 != x_204)) {
-      int const x_209 = x_6.x_GLF_uniform_int_values.arr[0].el;
-      float const x_210 = float(x_209);
-      *(tint_symbol_3) = float4(x_210, x_210, x_210, x_210);
-      return;
-    }
-    {
-      int const x_212 = i_3;
-      i_3 = as_type<int>((as_type<uint>(x_212) + as_type<uint>(1)));
-    }
-  }
-  int const x_215 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  int const x_218 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_221 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  int const x_224 = x_6.x_GLF_uniform_int_values.arr[1].el;
-  *(tint_symbol_3) = float4(float(x_215), float(x_218), float(x_221), float(x_224));
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 86dae79..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,359 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 252
-; Schema: 0
-               OpCapability Shader
-        %153 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %ref "ref"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %i_3 "i_3"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_16 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_15 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_int_uint_16 = OpTypeArray %int %uint_16
-       %buf0 = OpTypeStruct %_arr_int_uint_16
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %uint_15 = OpConstant %uint 15
-%_arr_int_uint_15 = OpTypeArray %int %uint_15
-%_ptr_Function__arr_int_uint_15 = OpTypePointer Function %_arr_int_uint_15
-         %23 = OpConstantNull %_arr_int_uint_15
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_8 = OpConstant %int 8
-      %int_9 = OpConstant %int 9
-     %int_10 = OpConstant %int 10
-     %int_11 = OpConstant %int 11
-      %int_6 = OpConstant %int 6
-     %int_12 = OpConstant %int 12
-     %int_13 = OpConstant %int 13
-     %int_14 = OpConstant %int 14
-     %int_15 = OpConstant %int 15
-       %bool = OpTypeBool
-      %int_7 = OpConstant %int 7
-   %main_out = OpTypeStruct %v4float
-        %241 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-        %ref = OpVariable %_ptr_Function__arr_int_uint_15 Function %23
-          %i = OpVariable %_ptr_Function_int Function %26
-       %data = OpVariable %_ptr_Function__arr_int_uint_15 Function %23
-        %i_1 = OpVariable %_ptr_Function_int Function %26
-        %i_2 = OpVariable %_ptr_Function_int Function %26
-        %i_3 = OpVariable %_ptr_Function_int Function %26
-         %34 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %35 = OpLoad %int %34
-         %36 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %37 = OpLoad %int %36
-         %38 = OpAccessChain %_ptr_Function_int %ref %35
-               OpStore %38 %37
-         %40 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %41 = OpLoad %int %40
-         %42 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Function_int %ref %41
-               OpStore %44 %43
-         %46 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %47 = OpLoad %int %46
-         %48 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Function_int %ref %47
-               OpStore %50 %49
-         %52 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %53 = OpLoad %int %52
-         %54 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_3
-         %55 = OpLoad %int %54
-         %56 = OpAccessChain %_ptr_Function_int %ref %53
-               OpStore %56 %55
-         %58 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %59 = OpLoad %int %58
-         %60 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_4
-         %61 = OpLoad %int %60
-         %62 = OpAccessChain %_ptr_Function_int %ref %59
-               OpStore %62 %61
-         %64 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-         %65 = OpLoad %int %64
-         %66 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %67 = OpLoad %int %66
-         %68 = OpAccessChain %_ptr_Function_int %ref %65
-         %69 = OpSNegate %int %67
-               OpStore %68 %69
-         %71 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_8
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %74 = OpLoad %int %73
-         %75 = OpAccessChain %_ptr_Function_int %ref %72
-         %76 = OpSNegate %int %74
-               OpStore %75 %76
-         %78 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_9
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %81 = OpLoad %int %80
-         %82 = OpAccessChain %_ptr_Function_int %ref %79
-         %83 = OpSNegate %int %81
-               OpStore %82 %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_10
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %88 = OpLoad %int %87
-         %89 = OpAccessChain %_ptr_Function_int %ref %86
-         %90 = OpSNegate %int %88
-               OpStore %89 %90
-         %92 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_11
-         %93 = OpLoad %int %92
-         %94 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %95 = OpLoad %int %94
-         %96 = OpAccessChain %_ptr_Function_int %ref %93
-         %97 = OpSNegate %int %95
-               OpStore %96 %97
-         %99 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %100 = OpLoad %int %99
-        %101 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %102 = OpLoad %int %101
-        %103 = OpAccessChain %_ptr_Function_int %ref %100
-        %104 = OpSNegate %int %102
-               OpStore %103 %104
-        %106 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_12
-        %107 = OpLoad %int %106
-        %108 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Function_int %ref %107
-        %111 = OpSNegate %int %109
-               OpStore %110 %111
-        %113 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_13
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %116 = OpLoad %int %115
-        %117 = OpAccessChain %_ptr_Function_int %ref %114
-        %118 = OpSNegate %int %116
-               OpStore %117 %118
-        %120 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_14
-        %121 = OpLoad %int %120
-        %122 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %123 = OpLoad %int %122
-        %124 = OpAccessChain %_ptr_Function_int %ref %121
-        %125 = OpSNegate %int %123
-               OpStore %124 %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_15
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_2
-        %130 = OpLoad %int %129
-        %131 = OpAccessChain %_ptr_Function_int %ref %128
-        %132 = OpSNegate %int %130
-               OpStore %131 %132
-               OpStore %i %int_0
-               OpBranch %133
-        %133 = OpLabel
-               OpLoopMerge %134 %135 None
-               OpBranch %136
-        %136 = OpLabel
-        %137 = OpLoad %int %i
-        %138 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %139 = OpLoad %int %138
-        %140 = OpSLessThan %bool %137 %139
-               OpSelectionMerge %142 None
-               OpBranchConditional %140 %143 %144
-        %143 = OpLabel
-               OpBranch %142
-        %144 = OpLabel
-               OpBranch %134
-        %142 = OpLabel
-        %145 = OpLoad %int %i
-        %146 = OpLoad %int %i
-        %147 = OpLoad %int %i
-        %148 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %149 = OpLoad %int %148
-        %150 = OpAccessChain %_ptr_Function_int %data %145
-        %154 = OpNot %int %146
-        %155 = OpNot %int %147
-        %152 = OpExtInst %int %153 SClamp %154 %155 %149
-        %151 = OpNot %int %152
-               OpStore %150 %151
-               OpBranch %135
-        %135 = OpLabel
-        %156 = OpLoad %int %i
-        %157 = OpIAdd %int %156 %int_1
-               OpStore %i %157
-               OpBranch %133
-        %134 = OpLabel
-        %158 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_5
-        %159 = OpLoad %int %158
-               OpStore %i_1 %159
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %164 = OpLoad %int %i_1
-        %165 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %164 %166
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %161
-        %168 = OpLabel
-        %171 = OpLoad %int %i_1
-        %172 = OpLoad %int %i_1
-        %173 = OpAccessChain %_ptr_Function_int %data %171
-        %176 = OpNot %int %172
-        %175 = OpExtInst %int %153 SClamp %176 %int_0 %int_1
-        %174 = OpNot %int %175
-               OpStore %173 %174
-               OpBranch %162
-        %162 = OpLabel
-        %177 = OpLoad %int %i_1
-        %178 = OpIAdd %int %177 %int_1
-               OpStore %i_1 %178
-               OpBranch %160
-        %161 = OpLabel
-        %179 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_6
-        %180 = OpLoad %int %179
-               OpStore %i_2 %180
-               OpBranch %181
-        %181 = OpLabel
-               OpLoopMerge %182 %183 None
-               OpBranch %184
-        %184 = OpLabel
-        %185 = OpLoad %int %i_2
-        %187 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-        %188 = OpLoad %int %187
-        %189 = OpSLessThan %bool %185 %188
-               OpSelectionMerge %190 None
-               OpBranchConditional %189 %191 %192
-        %191 = OpLabel
-               OpBranch %190
-        %192 = OpLabel
-               OpBranch %182
-        %190 = OpLabel
-        %193 = OpLoad %int %i_2
-        %194 = OpLoad %int %i_2
-        %195 = OpAccessChain %_ptr_Function_int %data %193
-        %197 = OpExtInst %int %153 SClamp %194 %int_0 %int_1
-        %196 = OpNot %int %197
-               OpStore %195 %196
-               OpBranch %183
-        %183 = OpLabel
-        %198 = OpLoad %int %i_2
-        %199 = OpIAdd %int %198 %int_1
-               OpStore %i_2 %199
-               OpBranch %181
-        %182 = OpLabel
-        %200 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %201 = OpLoad %int %200
-               OpStore %i_3 %201
-               OpBranch %202
-        %202 = OpLabel
-               OpLoopMerge %203 %204 None
-               OpBranch %205
-        %205 = OpLabel
-        %206 = OpLoad %int %i_3
-        %207 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_7
-        %208 = OpLoad %int %207
-        %209 = OpSLessThan %bool %206 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %212
-        %211 = OpLabel
-               OpBranch %210
-        %212 = OpLabel
-               OpBranch %203
-        %210 = OpLabel
-        %213 = OpLoad %int %i_3
-        %214 = OpAccessChain %_ptr_Function_int %data %213
-        %215 = OpLoad %int %214
-        %216 = OpLoad %int %i_3
-        %217 = OpAccessChain %_ptr_Function_int %ref %216
-        %218 = OpLoad %int %217
-        %219 = OpINotEqual %bool %215 %218
-               OpSelectionMerge %220 None
-               OpBranchConditional %219 %221 %220
-        %221 = OpLabel
-        %222 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %223 = OpLoad %int %222
-        %224 = OpConvertSToF %float %223
-        %225 = OpCompositeConstruct %v4float %224 %224 %224 %224
-               OpStore %x_GLF_color %225
-               OpReturn
-        %220 = OpLabel
-               OpBranch %204
-        %204 = OpLabel
-        %226 = OpLoad %int %i_3
-        %227 = OpIAdd %int %226 %int_1
-               OpStore %i_3 %227
-               OpBranch %202
-        %203 = OpLabel
-        %228 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %229 = OpLoad %int %228
-        %230 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %231 = OpLoad %int %230
-        %232 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-        %233 = OpLoad %int %232
-        %234 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-        %235 = OpLoad %int %234
-        %236 = OpConvertSToF %float %229
-        %237 = OpConvertSToF %float %231
-        %238 = OpConvertSToF %float %233
-        %239 = OpConvertSToF %float %235
-        %240 = OpCompositeConstruct %v4float %236 %237 %238 %239
-               OpStore %x_GLF_color %240
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %241
-        %244 = OpLabel
-        %245 = OpFunctionCall %void %main_1
-        %246 = OpLoad %v4float %x_GLF_color
-        %247 = OpCompositeConstruct %main_out %246
-               OpReturnValue %247
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %249 = OpLabel
-        %250 = OpFunctionCall %main_out %main_inner
-        %251 = OpCompositeExtract %v4float %250 0
-               OpStore %x_GLF_color_1_1 %251
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2dc09e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-selection-dag-negation-clamp-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,161 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 16>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var ref : array<i32, 15>;
-  var i : i32;
-  var data : array<i32, 15>;
-  var i_1 : i32;
-  var i_2 : i32;
-  var i_3 : i32;
-  let x_46 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_48 : i32 = x_6.x_GLF_uniform_int_values[0];
-  ref[x_46] = x_48;
-  let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_51] = x_53;
-  let x_56 : i32 = x_6.x_GLF_uniform_int_values[2];
-  let x_58 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_56] = x_58;
-  let x_61 : i32 = x_6.x_GLF_uniform_int_values[3];
-  let x_63 : i32 = x_6.x_GLF_uniform_int_values[3];
-  ref[x_61] = x_63;
-  let x_66 : i32 = x_6.x_GLF_uniform_int_values[4];
-  let x_68 : i32 = x_6.x_GLF_uniform_int_values[4];
-  ref[x_66] = x_68;
-  let x_71 : i32 = x_6.x_GLF_uniform_int_values[5];
-  let x_73 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_71] = -(x_73);
-  let x_77 : i32 = x_6.x_GLF_uniform_int_values[8];
-  let x_79 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_77] = -(x_79);
-  let x_83 : i32 = x_6.x_GLF_uniform_int_values[9];
-  let x_85 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_83] = -(x_85);
-  let x_89 : i32 = x_6.x_GLF_uniform_int_values[10];
-  let x_91 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_89] = -(x_91);
-  let x_95 : i32 = x_6.x_GLF_uniform_int_values[11];
-  let x_97 : i32 = x_6.x_GLF_uniform_int_values[1];
-  ref[x_95] = -(x_97);
-  let x_101 : i32 = x_6.x_GLF_uniform_int_values[6];
-  let x_103 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_101] = -(x_103);
-  let x_107 : i32 = x_6.x_GLF_uniform_int_values[12];
-  let x_109 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_107] = -(x_109);
-  let x_113 : i32 = x_6.x_GLF_uniform_int_values[13];
-  let x_115 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_113] = -(x_115);
-  let x_119 : i32 = x_6.x_GLF_uniform_int_values[14];
-  let x_121 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_119] = -(x_121);
-  let x_125 : i32 = x_6.x_GLF_uniform_int_values[15];
-  let x_127 : i32 = x_6.x_GLF_uniform_int_values[2];
-  ref[x_125] = -(x_127);
-  i = 0;
-  loop {
-    let x_134 : i32 = i;
-    let x_136 : i32 = x_6.x_GLF_uniform_int_values[5];
-    if ((x_134 < x_136)) {
-    } else {
-      break;
-    }
-    let x_139 : i32 = i;
-    let x_140 : i32 = i;
-    let x_142 : i32 = i;
-    let x_145 : i32 = x_6.x_GLF_uniform_int_values[1];
-    data[x_139] = ~(clamp(~(x_140), ~(x_142), x_145));
-
-    continuing {
-      let x_149 : i32 = i;
-      i = (x_149 + 1);
-    }
-  }
-  let x_152 : i32 = x_6.x_GLF_uniform_int_values[5];
-  i_1 = x_152;
-  loop {
-    let x_157 : i32 = i_1;
-    let x_159 : i32 = x_6.x_GLF_uniform_int_values[6];
-    if ((x_157 < x_159)) {
-    } else {
-      break;
-    }
-    let x_162 : i32 = i_1;
-    let x_163 : i32 = i_1;
-    data[x_162] = ~(clamp(~(x_163), 0, 1));
-
-    continuing {
-      let x_168 : i32 = i_1;
-      i_1 = (x_168 + 1);
-    }
-  }
-  let x_171 : i32 = x_6.x_GLF_uniform_int_values[6];
-  i_2 = x_171;
-  loop {
-    let x_176 : i32 = i_2;
-    let x_178 : i32 = x_6.x_GLF_uniform_int_values[7];
-    if ((x_176 < x_178)) {
-    } else {
-      break;
-    }
-    let x_181 : i32 = i_2;
-    let x_182 : i32 = i_2;
-    data[x_181] = ~(clamp(x_182, 0, 1));
-
-    continuing {
-      let x_186 : i32 = i_2;
-      i_2 = (x_186 + 1);
-    }
-  }
-  let x_189 : i32 = x_6.x_GLF_uniform_int_values[0];
-  i_3 = x_189;
-  loop {
-    let x_194 : i32 = i_3;
-    let x_196 : i32 = x_6.x_GLF_uniform_int_values[7];
-    if ((x_194 < x_196)) {
-    } else {
-      break;
-    }
-    let x_199 : i32 = i_3;
-    let x_201 : i32 = data[x_199];
-    let x_202 : i32 = i_3;
-    let x_204 : i32 = ref[x_202];
-    if ((x_201 != x_204)) {
-      let x_209 : i32 = x_6.x_GLF_uniform_int_values[0];
-      let x_210 : f32 = f32(x_209);
-      x_GLF_color = vec4<f32>(x_210, x_210, x_210, x_210);
-      return;
-    }
-
-    continuing {
-      let x_212 : i32 = i_3;
-      i_3 = (x_212 + 1);
-    }
-  }
-  let x_215 : i32 = x_6.x_GLF_uniform_int_values[1];
-  let x_218 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_221 : i32 = x_6.x_GLF_uniform_int_values[0];
-  let x_224 : i32 = x_6.x_GLF_uniform_int_values[1];
-  x_GLF_color = vec4<f32>(f32(x_215), f32(x_218), f32(x_221), f32(x_224));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a7a240a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 N = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 I = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 Nref = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  N = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float x_44 = asfloat(x_7[0].x);
-  I = float4(4.0f, 87.589996338f, x_44, 92.510002136f);
-  Nref = float4(17.049999237f, -6.099999905f, 4329.370605469f, 2.700000048f);
-  v = faceforward(N, I, Nref);
-  if (all((v == float4(-1.0f, -2.0f, -3.0f, -4.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.msl
deleted file mode 100644
index 189151f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float quarter;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float4 N = 0.0f;
-  float4 I = 0.0f;
-  float4 Nref = 0.0f;
-  float4 v = 0.0f;
-  N = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float const x_44 = x_7.quarter;
-  I = float4(4.0f, 87.589996338f, x_44, 92.510002136f);
-  Nref = float4(17.049999237f, -6.099999905f, 4329.370605469f, 2.700000048f);
-  float4 const x_46 = N;
-  float4 const x_47 = I;
-  float4 const x_48 = Nref;
-  v = faceforward(x_46, x_47, x_48);
-  float4 const x_50 = v;
-  if (all((x_50 == float4(-1.0f, -2.0f, -3.0f, -4.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4baf220..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,116 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 70
-; Schema: 0
-               OpCapability Shader
-         %42 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "quarter"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %N "N"
-               OpName %I "I"
-               OpName %Nref "Nref"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_87_5899963 = OpConstant %float 87.5899963
-%float_92_5100021 = OpConstant %float 92.5100021
-%float_17_0499992 = OpConstant %float 17.0499992
-%float_n6_0999999 = OpConstant %float -6.0999999
-%float_4329_37061 = OpConstant %float 4329.37061
-%float_2_70000005 = OpConstant %float 2.70000005
-         %37 = OpConstantComposite %v4float %float_17_0499992 %float_n6_0999999 %float_4329_37061 %float_2_70000005
-       %bool = OpTypeBool
-   %float_n1 = OpConstant %float -1
-   %float_n2 = OpConstant %float -2
-   %float_n3 = OpConstant %float -3
-   %float_n4 = OpConstant %float -4
-         %50 = OpConstantComposite %v4float %float_n1 %float_n2 %float_n3 %float_n4
-     %v4bool = OpTypeVector %bool 4
-    %float_0 = OpConstant %float 0
-         %57 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %58 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %59 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %N = OpVariable %_ptr_Function_v4float Function %5
-          %I = OpVariable %_ptr_Function_v4float Function %5
-       %Nref = OpVariable %_ptr_Function_v4float Function %5
-          %v = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %N %24
-         %28 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %29 = OpLoad %float %28
-         %32 = OpCompositeConstruct %v4float %float_4 %float_87_5899963 %29 %float_92_5100021
-               OpStore %I %32
-               OpStore %Nref %37
-         %38 = OpLoad %v4float %N
-         %39 = OpLoad %v4float %I
-         %40 = OpLoad %v4float %Nref
-         %41 = OpExtInst %v4float %42 FaceForward %38 %39 %40
-               OpStore %v %41
-         %43 = OpLoad %v4float %v
-         %51 = OpFOrdEqual %v4bool %43 %50
-         %44 = OpAll %bool %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %44 %54 %55
-         %54 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %53
-         %55 = OpLabel
-               OpStore %x_GLF_color %58
-               OpBranch %53
-         %53 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %59
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %67 = OpLabel
-         %68 = OpFunctionCall %main_out %main_inner
-         %69 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %69
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 40281ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-[[block]]
-struct buf0 {
-  quarter : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var N : vec4<f32>;
-  var I : vec4<f32>;
-  var Nref : vec4<f32>;
-  var v : vec4<f32>;
-  N = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_44 : f32 = x_7.quarter;
-  I = vec4<f32>(4.0, 87.589996338, x_44, 92.510002136);
-  Nref = vec4<f32>(17.049999237, -6.099999905, 4329.370605469, 2.700000048);
-  let x_46 : vec4<f32> = N;
-  let x_47 : vec4<f32> = I;
-  let x_48 : vec4<f32> = Nref;
-  v = faceForward(x_46, x_47, x_48);
-  let x_50 : vec4<f32> = v;
-  if (all((x_50 == vec4<f32>(-1.0, -2.0, -3.0, -4.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a7a240a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 N = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 I = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 Nref = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 v = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  N = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  const float x_44 = asfloat(x_7[0].x);
-  I = float4(4.0f, 87.589996338f, x_44, 92.510002136f);
-  Nref = float4(17.049999237f, -6.099999905f, 4329.370605469f, 2.700000048f);
-  v = faceforward(N, I, Nref);
-  if (all((v == float4(-1.0f, -2.0f, -3.0f, -4.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.msl
deleted file mode 100644
index 189151f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float quarter;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  float4 N = 0.0f;
-  float4 I = 0.0f;
-  float4 Nref = 0.0f;
-  float4 v = 0.0f;
-  N = float4(1.0f, 2.0f, 3.0f, 4.0f);
-  float const x_44 = x_7.quarter;
-  I = float4(4.0f, 87.589996338f, x_44, 92.510002136f);
-  Nref = float4(17.049999237f, -6.099999905f, 4329.370605469f, 2.700000048f);
-  float4 const x_46 = N;
-  float4 const x_47 = I;
-  float4 const x_48 = Nref;
-  v = faceforward(x_46, x_47, x_48);
-  float4 const x_50 = v;
-  if (all((x_50 == float4(-1.0f, -2.0f, -3.0f, -4.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4baf220..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,116 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 70
-; Schema: 0
-               OpCapability Shader
-         %42 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "quarter"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %N "N"
-               OpName %I "I"
-               OpName %Nref "Nref"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %24 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_87_5899963 = OpConstant %float 87.5899963
-%float_92_5100021 = OpConstant %float 92.5100021
-%float_17_0499992 = OpConstant %float 17.0499992
-%float_n6_0999999 = OpConstant %float -6.0999999
-%float_4329_37061 = OpConstant %float 4329.37061
-%float_2_70000005 = OpConstant %float 2.70000005
-         %37 = OpConstantComposite %v4float %float_17_0499992 %float_n6_0999999 %float_4329_37061 %float_2_70000005
-       %bool = OpTypeBool
-   %float_n1 = OpConstant %float -1
-   %float_n2 = OpConstant %float -2
-   %float_n3 = OpConstant %float -3
-   %float_n4 = OpConstant %float -4
-         %50 = OpConstantComposite %v4float %float_n1 %float_n2 %float_n3 %float_n4
-     %v4bool = OpTypeVector %bool 4
-    %float_0 = OpConstant %float 0
-         %57 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %58 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %59 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %N = OpVariable %_ptr_Function_v4float Function %5
-          %I = OpVariable %_ptr_Function_v4float Function %5
-       %Nref = OpVariable %_ptr_Function_v4float Function %5
-          %v = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %N %24
-         %28 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %29 = OpLoad %float %28
-         %32 = OpCompositeConstruct %v4float %float_4 %float_87_5899963 %29 %float_92_5100021
-               OpStore %I %32
-               OpStore %Nref %37
-         %38 = OpLoad %v4float %N
-         %39 = OpLoad %v4float %I
-         %40 = OpLoad %v4float %Nref
-         %41 = OpExtInst %v4float %42 FaceForward %38 %39 %40
-               OpStore %v %41
-         %43 = OpLoad %v4float %v
-         %51 = OpFOrdEqual %v4bool %43 %50
-         %44 = OpAll %bool %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %44 %54 %55
-         %54 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %53
-         %55 = OpLabel
-               OpStore %x_GLF_color %58
-               OpBranch %53
-         %53 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %59
-         %62 = OpLabel
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %67 = OpLabel
-         %68 = OpFunctionCall %main_out %main_inner
-         %69 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %69
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 40281ef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-value-tracking-uniform-incident/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-[[block]]
-struct buf0 {
-  quarter : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var N : vec4<f32>;
-  var I : vec4<f32>;
-  var Nref : vec4<f32>;
-  var v : vec4<f32>;
-  N = vec4<f32>(1.0, 2.0, 3.0, 4.0);
-  let x_44 : f32 = x_7.quarter;
-  I = vec4<f32>(4.0, 87.589996338, x_44, 92.510002136);
-  Nref = vec4<f32>(17.049999237, -6.099999905, 4329.370605469, 2.700000048);
-  let x_46 : vec4<f32> = N;
-  let x_47 : vec4<f32> = I;
-  let x_48 : vec4<f32> = Nref;
-  v = faceForward(x_46, x_47, x_48);
-  let x_50 : vec4<f32> = v;
-  if (all((x_50 == vec4<f32>(-1.0, -2.0, -3.0, -4.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2f6405b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 a = float2(0.0f, 0.0f);
-  float2 b = float2(0.0f, 0.0f);
-  a = float2(1.0f, 1.0f);
-  const int x_38 = asint(x_6[0].x);
-  if ((x_38 == 1)) {
-    const float x_43 = a.x;
-    a.x = (x_43 + 1.0f);
-  }
-  const float x_47 = a.y;
-  b = (float2(x_47, x_47) + float2(2.0f, 3.0f));
-  if (all((b == float2(3.0f, 4.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.msl
deleted file mode 100644
index 742b628..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 a = 0.0f;
-  float2 b = 0.0f;
-  a = float2(1.0f, 1.0f);
-  int const x_38 = x_6.zero;
-  if ((x_38 == 1)) {
-    float const x_43 = a.x;
-    a.x = (x_43 + 1.0f);
-  }
-  float const x_47 = a.y;
-  b = (float2(x_47, x_47) + float2(2.0f, 3.0f));
-  float2 const x_50 = b;
-  if (all((x_50 == float2(3.0f, 4.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b42cb47..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,115 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %19 = OpConstantNull %v2float
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v2float %float_1 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v2float %float_2 %float_3
-    %float_4 = OpConstant %float 4
-         %49 = OpConstantComposite %v2float %float_3 %float_4
-     %v2bool = OpTypeVector %bool 2
-    %float_0 = OpConstant %float 0
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %57 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_v2float Function %19
-          %b = OpVariable %_ptr_Function_v2float Function %19
-               OpStore %a %22
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %27 = OpLoad %int %26
-         %29 = OpIEqual %bool %27 %int_1
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %31
-         %32 = OpLabel
-         %34 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %35 = OpLoad %float %34
-         %36 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %37 = OpFAdd %float %35 %float_1
-               OpStore %36 %37
-               OpBranch %31
-         %31 = OpLabel
-         %39 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %40 = OpLoad %float %39
-         %41 = OpCompositeConstruct %v2float %40 %40
-         %45 = OpFAdd %v2float %41 %44
-               OpStore %b %45
-         %46 = OpLoad %v2float %b
-         %50 = OpFOrdEqual %v2bool %46 %49
-         %47 = OpAll %bool %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %47 %53 %54
-         %53 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %52
-         %54 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %52
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ef1ccfe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec2<f32>;
-  var b : vec2<f32>;
-  a = vec2<f32>(1.0, 1.0);
-  let x_38 : i32 = x_6.zero;
-  if ((x_38 == 1)) {
-    let x_43 : f32 = a.x;
-    a.x = (x_43 + 1.0);
-  }
-  let x_47 : f32 = a.y;
-  b = (vec2<f32>(x_47, x_47) + vec2<f32>(2.0, 3.0));
-  let x_50 : vec2<f32> = b;
-  if (all((x_50 == vec2<f32>(3.0, 4.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 2f6405b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 a = float2(0.0f, 0.0f);
-  float2 b = float2(0.0f, 0.0f);
-  a = float2(1.0f, 1.0f);
-  const int x_38 = asint(x_6[0].x);
-  if ((x_38 == 1)) {
-    const float x_43 = a.x;
-    a.x = (x_43 + 1.0f);
-  }
-  const float x_47 = a.y;
-  b = (float2(x_47, x_47) + float2(2.0f, 3.0f));
-  if (all((b == float2(3.0f, 4.0f)))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.msl
deleted file mode 100644
index 742b628..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float2 a = 0.0f;
-  float2 b = 0.0f;
-  a = float2(1.0f, 1.0f);
-  int const x_38 = x_6.zero;
-  if ((x_38 == 1)) {
-    float const x_43 = a.x;
-    a.x = (x_43 + 1.0f);
-  }
-  float const x_47 = a.y;
-  b = (float2(x_47, x_47) + float2(2.0f, 3.0f));
-  float2 const x_50 = b;
-  if (all((x_50 == float2(3.0f, 4.0f)))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b42cb47..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,115 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %19 = OpConstantNull %v2float
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v2float %float_1 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-         %44 = OpConstantComposite %v2float %float_2 %float_3
-    %float_4 = OpConstant %float 4
-         %49 = OpConstantComposite %v2float %float_3 %float_4
-     %v2bool = OpTypeVector %bool 2
-    %float_0 = OpConstant %float 0
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %57 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %a = OpVariable %_ptr_Function_v2float Function %19
-          %b = OpVariable %_ptr_Function_v2float Function %19
-               OpStore %a %22
-         %26 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0
-         %27 = OpLoad %int %26
-         %29 = OpIEqual %bool %27 %int_1
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %31
-         %32 = OpLabel
-         %34 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %35 = OpLoad %float %34
-         %36 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %37 = OpFAdd %float %35 %float_1
-               OpStore %36 %37
-               OpBranch %31
-         %31 = OpLabel
-         %39 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %40 = OpLoad %float %39
-         %41 = OpCompositeConstruct %v2float %40 %40
-         %45 = OpFAdd %v2float %41 %44
-               OpStore %b %45
-         %46 = OpLoad %v2float %b
-         %50 = OpFOrdEqual %v2bool %46 %49
-         %47 = OpAll %bool %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %47 %53 %54
-         %53 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %52
-         %54 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %52
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ef1ccfe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-inc-unused-comp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec2<f32>;
-  var b : vec2<f32>;
-  a = vec2<f32>(1.0, 1.0);
-  let x_38 : i32 = x_6.zero;
-  if ((x_38 == 1)) {
-    let x_43 : f32 = a.x;
-    a.x = (x_43 + 1.0);
-  }
-  let x_47 : f32 = a.y;
-  b = (vec2<f32>(x_47, x_47) + vec2<f32>(2.0, 3.0));
-  let x_50 : vec2<f32> = b;
-  if (all((x_50 == vec2<f32>(3.0, 4.0)))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index c06a97e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 a = float2(0.0f, 0.0f);
-  float2 b = float2(0.0f, 0.0f);
-  a = float2(1.0f, 1.0f);
-  const float x_25 = a.x;
-  a.x = (x_25 + 0.5f);
-  b = frac(a);
-  const float x_31 = b.x;
-  if ((x_31 == 0.5f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.msl
deleted file mode 100644
index bb4f4e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 a = 0.0f;
-  float2 b = 0.0f;
-  a = float2(1.0f, 1.0f);
-  float const x_25 = a.x;
-  a.x = (x_25 + 0.5f);
-  float2 const x_28 = a;
-  b = fract(x_28);
-  float const x_31 = b.x;
-  if ((x_31 == 0.5f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 50e32c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-         %29 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-    %float_1 = OpConstant %float 1
-         %18 = OpConstantComposite %v2float %float_1 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-  %float_0_5 = OpConstant %float 0.5
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %40 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_v2float Function %15
-          %b = OpVariable %_ptr_Function_v2float Function %15
-               OpStore %a %18
-         %22 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %23 = OpLoad %float %22
-         %24 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpFAdd %float %23 %float_0_5
-               OpStore %24 %26
-         %27 = OpLoad %v2float %a
-         %28 = OpExtInst %v2float %29 Fract %27
-               OpStore %b %28
-         %30 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %31 = OpLoad %float %30
-         %32 = OpFOrdEqual %bool %31 %float_0_5
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %34
-         %36 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %34
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %40
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %main_1
-         %45 = OpLoad %v4float %x_GLF_color
-         %46 = OpCompositeConstruct %main_out %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %48 = OpLabel
-         %49 = OpFunctionCall %main_out %main_inner
-         %50 = OpCompositeExtract %v4float %49 0
-               OpStore %x_GLF_color_1_1 %50
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5be7339..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec2<f32>;
-  var b : vec2<f32>;
-  a = vec2<f32>(1.0, 1.0);
-  let x_25 : f32 = a.x;
-  a.x = (x_25 + 0.5);
-  let x_28 : vec2<f32> = a;
-  b = fract(x_28);
-  let x_31 : f32 = b.x;
-  if ((x_31 == 0.5)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c06a97e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 a = float2(0.0f, 0.0f);
-  float2 b = float2(0.0f, 0.0f);
-  a = float2(1.0f, 1.0f);
-  const float x_25 = a.x;
-  a.x = (x_25 + 0.5f);
-  b = frac(a);
-  const float x_31 = b.x;
-  if ((x_31 == 0.5f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.msl
deleted file mode 100644
index bb4f4e6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 a = 0.0f;
-  float2 b = 0.0f;
-  a = float2(1.0f, 1.0f);
-  float const x_25 = a.x;
-  a.x = (x_25 + 0.5f);
-  float2 const x_28 = a;
-  b = fract(x_28);
-  float const x_31 = b.x;
-  if ((x_31 == 0.5f)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 50e32c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,86 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 51
-; Schema: 0
-               OpCapability Shader
-         %29 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-    %float_1 = OpConstant %float 1
-         %18 = OpConstantComposite %v2float %float_1 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-  %float_0_5 = OpConstant %float 0.5
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %40 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %a = OpVariable %_ptr_Function_v2float Function %15
-          %b = OpVariable %_ptr_Function_v2float Function %15
-               OpStore %a %18
-         %22 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %23 = OpLoad %float %22
-         %24 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpFAdd %float %23 %float_0_5
-               OpStore %24 %26
-         %27 = OpLoad %v2float %a
-         %28 = OpExtInst %v2float %29 Fract %27
-               OpStore %b %28
-         %30 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %31 = OpLoad %float %30
-         %32 = OpFOrdEqual %bool %31 %float_0_5
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %34
-         %36 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %34
-         %34 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %40
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %main_1
-         %45 = OpLoad %v4float %x_GLF_color
-         %46 = OpCompositeConstruct %main_out %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %48 = OpLabel
-         %49 = OpFunctionCall %main_out %main_inner
-         %50 = OpCompositeExtract %v4float %49 0
-               OpStore %x_GLF_color_1_1 %50
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5be7339..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-dce-unused-component/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var a : vec2<f32>;
-  var b : vec2<f32>;
-  a = vec2<f32>(1.0, 1.0);
-  let x_25 : f32 = a.x;
-  a.x = (x_25 + 0.5);
-  let x_28 : vec2<f32> = a;
-  b = fract(x_28);
-  let x_31 : f32 = b.x;
-  if ((x_31 == 0.5)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4edd4ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v = float2(0.0f, 0.0f);
-  v = log2(cosh(float2(1.0f, 100.0f)));
-  const float x_27 = v.x;
-  const float x_29 = v.y;
-  if ((x_27 < x_29)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6eb510b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 v = 0.0f;
-  v = log2(cosh(float2(1.0f, 100.0f)));
-  float const x_27 = v.x;
-  float const x_29 = v.y;
-  if ((x_27 < x_29)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 458ecf2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-         %17 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-    %float_1 = OpConstant %float 1
-  %float_100 = OpConstant %float 100
-         %21 = OpConstantComposite %v2float %float_1 %float_100
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %37 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %15
-         %18 = OpExtInst %v2float %17 Cosh %21
-         %16 = OpExtInst %v2float %17 Log2 %18
-               OpStore %v %16
-         %25 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %29 = OpLoad %float %28
-         %30 = OpFOrdLessThan %bool %26 %29
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %32
-         %34 = OpLabel
-               OpStore %x_GLF_color %37
-               OpBranch %32
-         %32 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2cecb75..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec2<f32>;
-  v = log2(cosh(vec2<f32>(1.0, 100.0)));
-  let x_27 : f32 = v.x;
-  let x_29 : f32 = v.y;
-  if ((x_27 < x_29)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4edd4ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,34 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v = float2(0.0f, 0.0f);
-  v = log2(cosh(float2(1.0f, 100.0f)));
-  const float x_27 = v.x;
-  const float x_29 = v.y;
-  if ((x_27 < x_29)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6eb510b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 v = 0.0f;
-  v = log2(cosh(float2(1.0f, 100.0f)));
-  float const x_27 = v.x;
-  float const x_29 = v.y;
-  if ((x_27 < x_29)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 458ecf2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-         %17 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-    %float_1 = OpConstant %float 1
-  %float_100 = OpConstant %float 100
-         %21 = OpConstantComposite %v2float %float_1 %float_100
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %37 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %15
-         %18 = OpExtInst %v2float %17 Cosh %21
-         %16 = OpExtInst %v2float %17 Log2 %18
-               OpStore %v %16
-         %25 = OpAccessChain %_ptr_Function_float %v %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpAccessChain %_ptr_Function_float %v %uint_1
-         %29 = OpLoad %float %28
-         %30 = OpFOrdLessThan %bool %26 %29
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpStore %x_GLF_color %36
-               OpBranch %32
-         %34 = OpLabel
-               OpStore %x_GLF_color %37
-               OpBranch %32
-         %32 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2cecb75..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-vector-log2-cosh/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var v : vec2<f32>;
-  v = log2(cosh(vec2<f32>(1.0, 100.0)));
-  let x_27 : f32 = v.x;
-  let x_29 : f32 = v.y;
-  if ((x_27 < x_29)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e66c0d6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_i1_(inout int x) {
-  const int x_41 = x;
-  const int x_43 = asint(x_7[0].x);
-  if ((x_41 < x_43)) {
-    discard;
-  }
-  const int x_47 = x;
-  if ((x_47 > 8)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-void main_1() {
-  int i = 0;
-  int param = 0;
-  int x_31_phi = 0;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  x_31_phi = 0;
-  while (true) {
-    const int x_31 = x_31_phi;
-    const int x_35 = asint(x_7[0].x);
-    if ((x_31 < (10 + x_35))) {
-    } else {
-      break;
-    }
-    {
-      param = x_31;
-      func_i1_(param);
-      const int x_32 = (x_31 + 1);
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index b5e6e03..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_i1_(constant buf0& x_7, thread int* const x, thread float4* const tint_symbol_3) {
-  int const x_41 = *(x);
-  int const x_43 = x_7.zero;
-  if ((x_41 < x_43)) {
-    discard_fragment();
-  }
-  int const x_47 = *(x);
-  if ((x_47 > 8)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int param = 0;
-  int x_31_phi = 0;
-  *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  x_31_phi = 0;
-  while (true) {
-    int const x_31 = x_31_phi;
-    int const x_35 = x_7.zero;
-    if ((x_31 < as_type<int>((as_type<uint>(10) + as_type<uint>(x_35))))) {
-    } else {
-      break;
-    }
-    {
-      param = x_31;
-      func_i1_(x_7, &(param), tint_symbol_4);
-      int const x_32 = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  main_1(x_7, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f94406c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,136 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 76
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %x_31_phi "x_31_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %void %_ptr_Function_int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %40 = OpTypeFunction %void
-         %44 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %void None %12
-          %x = OpFunctionParameter %_ptr_Function_int
-         %17 = OpLabel
-         %19 = OpLoad %int %x
-         %23 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %24 = OpLoad %int %23
-         %25 = OpSLessThan %bool %19 %24
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
-               OpKill
-         %27 = OpLabel
-         %30 = OpLoad %int %x
-         %32 = OpSGreaterThan %bool %30 %int_8
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %35
-         %34 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %33
-         %35 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %40
-         %42 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %44
-      %param = OpVariable %_ptr_Function_int Function %44
-   %x_31_phi = OpVariable %_ptr_Function_int Function %44
-               OpStore %x_GLF_color %39
-               OpStore %i %int_0
-               OpStore %x_31_phi %int_0
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-         %52 = OpLoad %int %x_31_phi
-         %53 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %54 = OpLoad %int %53
-         %56 = OpIAdd %int %int_10 %54
-         %57 = OpSLessThan %bool %52 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %49
-         %58 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-               OpStore %param %52
-         %61 = OpFunctionCall %void %func_i1_ %param
-         %64 = OpIAdd %int %52 %int_1
-               OpStore %i %64
-               OpStore %x_31_phi %64
-               OpBranch %48
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-         %68 = OpLabel
-         %69 = OpFunctionCall %void %main_1
-         %70 = OpLoad %v4float %x_GLF_color
-         %71 = OpCompositeConstruct %main_out %70
-               OpReturnValue %71
-               OpFunctionEnd
-       %main = OpFunction %void None %40
-         %73 = OpLabel
-         %74 = OpFunctionCall %main_out %main_inner
-         %75 = OpCompositeExtract %v4float %74 0
-               OpStore %x_GLF_color_1_1 %75
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f53a636..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) {
-  let x_41 : i32 = *(x);
-  let x_43 : i32 = x_7.zero;
-  if ((x_41 < x_43)) {
-    discard;
-  }
-  let x_47 : i32 = *(x);
-  if ((x_47 > 8)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-fn main_1() {
-  var i : i32;
-  var param : i32;
-  var x_31_phi : i32;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  i = 0;
-  x_31_phi = 0;
-  loop {
-    let x_31 : i32 = x_31_phi;
-    let x_35 : i32 = x_7.zero;
-    if ((x_31 < (10 + x_35))) {
-    } else {
-      break;
-    }
-
-    continuing {
-      param = x_31;
-      func_i1_(&(param));
-      let x_32 : i32 = (x_31 + 1);
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e66c0d6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void func_i1_(inout int x) {
-  const int x_41 = x;
-  const int x_43 = asint(x_7[0].x);
-  if ((x_41 < x_43)) {
-    discard;
-  }
-  const int x_47 = x;
-  if ((x_47 > 8)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-void main_1() {
-  int i = 0;
-  int param = 0;
-  int x_31_phi = 0;
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  x_31_phi = 0;
-  while (true) {
-    const int x_31 = x_31_phi;
-    const int x_35 = asint(x_7[0].x);
-    if ((x_31 < (10 + x_35))) {
-    } else {
-      break;
-    }
-    {
-      param = x_31;
-      func_i1_(param);
-      const int x_32 = (x_31 + 1);
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index b5e6e03..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void func_i1_(constant buf0& x_7, thread int* const x, thread float4* const tint_symbol_3) {
-  int const x_41 = *(x);
-  int const x_43 = x_7.zero;
-  if ((x_41 < x_43)) {
-    discard_fragment();
-  }
-  int const x_47 = *(x);
-  if ((x_47 > 8)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int param = 0;
-  int x_31_phi = 0;
-  *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  i = 0;
-  x_31_phi = 0;
-  while (true) {
-    int const x_31 = x_31_phi;
-    int const x_35 = x_7.zero;
-    if ((x_31 < as_type<int>((as_type<uint>(10) + as_type<uint>(x_35))))) {
-    } else {
-      break;
-    }
-    {
-      param = x_31;
-      func_i1_(x_7, &(param), tint_symbol_4);
-      int const x_32 = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  main_1(x_7, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f94406c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,136 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 76
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_i1_ "func_i1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %x_31_phi "x_31_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %12 = OpTypeFunction %void %_ptr_Function_int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %40 = OpTypeFunction %void
-         %44 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out
-   %func_i1_ = OpFunction %void None %12
-          %x = OpFunctionParameter %_ptr_Function_int
-         %17 = OpLabel
-         %19 = OpLoad %int %x
-         %23 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %24 = OpLoad %int %23
-         %25 = OpSLessThan %bool %19 %24
-               OpSelectionMerge %27 None
-               OpBranchConditional %25 %28 %27
-         %28 = OpLabel
-               OpKill
-         %27 = OpLabel
-         %30 = OpLoad %int %x
-         %32 = OpSGreaterThan %bool %30 %int_8
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %35
-         %34 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %33
-         %35 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %40
-         %42 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %44
-      %param = OpVariable %_ptr_Function_int Function %44
-   %x_31_phi = OpVariable %_ptr_Function_int Function %44
-               OpStore %x_GLF_color %39
-               OpStore %i %int_0
-               OpStore %x_31_phi %int_0
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-         %52 = OpLoad %int %x_31_phi
-         %53 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0
-         %54 = OpLoad %int %53
-         %56 = OpIAdd %int %int_10 %54
-         %57 = OpSLessThan %bool %52 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %49
-         %58 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-               OpStore %param %52
-         %61 = OpFunctionCall %void %func_i1_ %param
-         %64 = OpIAdd %int %52 %int_1
-               OpStore %i %64
-               OpStore %x_31_phi %64
-               OpBranch %48
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-         %68 = OpLabel
-         %69 = OpFunctionCall %void %main_1
-         %70 = OpLoad %v4float %x_GLF_color
-         %71 = OpCompositeConstruct %main_out %70
-               OpReturnValue %71
-               OpFunctionEnd
-       %main = OpFunction %void None %40
-         %73 = OpLabel
-         %74 = OpFunctionCall %main_out %main_inner
-         %75 = OpCompositeExtract %v4float %74 0
-               OpStore %x_GLF_color_1_1 %75
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f53a636..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-for-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_i1_(x : ptr<function, i32>) {
-  let x_41 : i32 = *(x);
-  let x_43 : i32 = x_7.zero;
-  if ((x_41 < x_43)) {
-    discard;
-  }
-  let x_47 : i32 = *(x);
-  if ((x_47 > 8)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-fn main_1() {
-  var i : i32;
-  var param : i32;
-  var x_31_phi : i32;
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  i = 0;
-  x_31_phi = 0;
-  loop {
-    let x_31 : i32 = x_31_phi;
-    let x_35 : i32 = x_7.zero;
-    if ((x_31 < (10 + x_35))) {
-    } else {
-      break;
-    }
-
-    continuing {
-      param = x_31;
-      func_i1_(&(param));
-      let x_32 : i32 = (x_31 + 1);
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8c33320..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-SKIP: FAILED
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_f1_(inout float x) {
-  const float x_56 = x;
-  if ((x_56 > 5.0f)) {
-    const float x_61 = gl_FragCoord.x;
-    if ((x_61 < 0.5f)) {
-      discard;
-    } else {
-      const float x_67 = gl_FragCoord.y;
-      if ((x_67 < 0.5f)) {
-        discard;
-      }
-    }
-  }
-  const float x_71 = x;
-  return (x_71 + 1.0f);
-}
-
-void main_1() {
-  float f = 0.0f;
-  int i = 0;
-  float param = 0.0f;
-  f = 0.0f;
-  i = 0;
-  while (true) {
-    const int x_39 = i;
-    const int x_41 = asint(x_10[0].x);
-    if ((x_39 < x_41)) {
-    } else {
-      break;
-    }
-    {
-      param = float(i);
-      const float x_47 = func_f1_(param);
-      f = x_47;
-      i = (i + 1);
-    }
-  }
-  if ((f == 5.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_5 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000001976079AA90(7,14-29): error X3507: 'func_f1_': Not all control paths return a value
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.msl
deleted file mode 100644
index fcf1e30..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int five;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_f1_(thread float* const x, thread float4* const tint_symbol_3) {
-  float const x_56 = *(x);
-  if ((x_56 > 5.0f)) {
-    float const x_61 = (*(tint_symbol_3)).x;
-    if ((x_61 < 0.5f)) {
-      discard_fragment();
-    } else {
-      float const x_67 = (*(tint_symbol_3)).y;
-      if ((x_67 < 0.5f)) {
-        discard_fragment();
-      }
-    }
-  }
-  float const x_71 = *(x);
-  return (x_71 + 1.0f);
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float f = 0.0f;
-  int i = 0;
-  float param = 0.0f;
-  f = 0.0f;
-  i = 0;
-  while (true) {
-    int const x_39 = i;
-    int const x_41 = x_10.five;
-    if ((x_39 < x_41)) {
-    } else {
-      break;
-    }
-    {
-      int const x_45 = i;
-      param = float(x_45);
-      float const x_47 = func_f1_(&(param), tint_symbol_4);
-      f = x_47;
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  float const x_50 = f;
-  if ((x_50 == 5.0f)) {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_10, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f1c0d30..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,169 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 98
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "five"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_f1_ "func_f1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %float %_ptr_Function_float
-    %float_5 = OpConstant %float 5
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_0_5 = OpConstant %float 0.5
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-         %47 = OpTypeFunction %void
-         %52 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %55 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-         %83 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %84 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %85 = OpTypeFunction %main_out %v4float
-   %func_f1_ = OpFunction %float None %15
-          %x = OpFunctionParameter %_ptr_Function_float
-         %19 = OpLabel
-         %21 = OpLoad %float %x
-         %23 = OpFOrdGreaterThan %bool %21 %float_5
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %25
-         %26 = OpLabel
-         %30 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %31 = OpLoad %float %30
-         %33 = OpFOrdLessThan %bool %31 %float_0_5
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %36
-         %35 = OpLabel
-               OpKill
-         %36 = OpLabel
-         %38 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFOrdLessThan %bool %39 %float_0_5
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-               OpKill
-         %41 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %25
-         %25 = OpLabel
-         %44 = OpLoad %float %x
-         %46 = OpFAdd %float %44 %float_1
-               OpReturnValue %46
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %47
-         %50 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %52
-          %i = OpVariable %_ptr_Function_int Function %55
-      %param = OpVariable %_ptr_Function_float Function %52
-               OpStore %f %float_0
-               OpStore %i %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %66 = OpLoad %int %65
-         %67 = OpSLessThan %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %60
-         %68 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-         %71 = OpLoad %int %i
-         %72 = OpConvertSToF %float %71
-               OpStore %param %72
-         %73 = OpFunctionCall %float %func_f1_ %param
-               OpStore %f %73
-         %75 = OpLoad %int %i
-         %77 = OpIAdd %int %75 %int_1
-               OpStore %i %77
-               OpBranch %59
-         %60 = OpLabel
-         %78 = OpLoad %float %f
-         %79 = OpFOrdEqual %bool %78 %float_5
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpStore %x_GLF_color %83
-               OpBranch %80
-         %82 = OpLabel
-               OpStore %x_GLF_color %84
-               OpBranch %80
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %85
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %89 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %47
-         %94 = OpLabel
-         %96 = OpLoad %v4float %gl_FragCoord_param_1
-         %95 = OpFunctionCall %main_out %main_inner %96
-         %97 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %97
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d25c0e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-[[block]]
-struct buf0 {
-  five : i32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_f1_(x : ptr<function, f32>) -> f32 {
-  let x_56 : f32 = *(x);
-  if ((x_56 > 5.0)) {
-    let x_61 : f32 = gl_FragCoord.x;
-    if ((x_61 < 0.5)) {
-      discard;
-    } else {
-      let x_67 : f32 = gl_FragCoord.y;
-      if ((x_67 < 0.5)) {
-        discard;
-      }
-    }
-  }
-  let x_71 : f32 = *(x);
-  return (x_71 + 1.0);
-}
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  var param : f32;
-  f = 0.0;
-  i = 0;
-  loop {
-    let x_39 : i32 = i;
-    let x_41 : i32 = x_10.five;
-    if ((x_39 < x_41)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_45 : i32 = i;
-      param = f32(x_45);
-      let x_47 : f32 = func_f1_(&(param));
-      f = x_47;
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_50 : f32 = f;
-  if ((x_50 == 5.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 38923d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-SKIP: FAILED
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_f1_(inout float x) {
-  const float x_56 = x;
-  if ((x_56 > 5.0f)) {
-    const float x_61 = gl_FragCoord.x;
-    if ((x_61 < 0.5f)) {
-      discard;
-    } else {
-      const float x_67 = gl_FragCoord.y;
-      if ((x_67 < 0.5f)) {
-        discard;
-      }
-    }
-  }
-  const float x_71 = x;
-  return (x_71 + 1.0f);
-}
-
-void main_1() {
-  float f = 0.0f;
-  int i = 0;
-  float param = 0.0f;
-  f = 0.0f;
-  i = 0;
-  while (true) {
-    const int x_39 = i;
-    const int x_41 = asint(x_10[0].x);
-    if ((x_39 < x_41)) {
-    } else {
-      break;
-    }
-    {
-      param = float(i);
-      const float x_47 = func_f1_(param);
-      f = x_47;
-      i = (i + 1);
-    }
-  }
-  if ((f == 5.0f)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_5 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x0000020625AC68E0(7,14-29): error X3507: 'func_f1_': Not all control paths return a value
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.msl
deleted file mode 100644
index fcf1e30..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int five;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_f1_(thread float* const x, thread float4* const tint_symbol_3) {
-  float const x_56 = *(x);
-  if ((x_56 > 5.0f)) {
-    float const x_61 = (*(tint_symbol_3)).x;
-    if ((x_61 < 0.5f)) {
-      discard_fragment();
-    } else {
-      float const x_67 = (*(tint_symbol_3)).y;
-      if ((x_67 < 0.5f)) {
-        discard_fragment();
-      }
-    }
-  }
-  float const x_71 = *(x);
-  return (x_71 + 1.0f);
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float f = 0.0f;
-  int i = 0;
-  float param = 0.0f;
-  f = 0.0f;
-  i = 0;
-  while (true) {
-    int const x_39 = i;
-    int const x_41 = x_10.five;
-    if ((x_39 < x_41)) {
-    } else {
-      break;
-    }
-    {
-      int const x_45 = i;
-      param = float(x_45);
-      float const x_47 = func_f1_(&(param), tint_symbol_4);
-      f = x_47;
-      int const x_48 = i;
-      i = as_type<int>((as_type<uint>(x_48) + as_type<uint>(1)));
-    }
-  }
-  float const x_50 = f;
-  if ((x_50 == 5.0f)) {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_10, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f1c0d30..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,169 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 98
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "five"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_f1_ "func_f1_"
-               OpName %x "x"
-               OpName %main_1 "main_1"
-               OpName %f "f"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %float %_ptr_Function_float
-    %float_5 = OpConstant %float 5
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_0_5 = OpConstant %float 0.5
-     %uint_1 = OpConstant %uint 1
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-         %47 = OpTypeFunction %void
-         %52 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %55 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-         %83 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %84 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %85 = OpTypeFunction %main_out %v4float
-   %func_f1_ = OpFunction %float None %15
-          %x = OpFunctionParameter %_ptr_Function_float
-         %19 = OpLabel
-         %21 = OpLoad %float %x
-         %23 = OpFOrdGreaterThan %bool %21 %float_5
-               OpSelectionMerge %25 None
-               OpBranchConditional %23 %26 %25
-         %26 = OpLabel
-         %30 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %31 = OpLoad %float %30
-         %33 = OpFOrdLessThan %bool %31 %float_0_5
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %36
-         %35 = OpLabel
-               OpKill
-         %36 = OpLabel
-         %38 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %39 = OpLoad %float %38
-         %40 = OpFOrdLessThan %bool %39 %float_0_5
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-               OpKill
-         %41 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %25
-         %25 = OpLabel
-         %44 = OpLoad %float %x
-         %46 = OpFAdd %float %44 %float_1
-               OpReturnValue %46
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %47
-         %50 = OpLabel
-          %f = OpVariable %_ptr_Function_float Function %52
-          %i = OpVariable %_ptr_Function_int Function %55
-      %param = OpVariable %_ptr_Function_float Function %52
-               OpStore %f %float_0
-               OpStore %i %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Uniform_int %x_10 %uint_0
-         %66 = OpLoad %int %65
-         %67 = OpSLessThan %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %60
-         %68 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-         %71 = OpLoad %int %i
-         %72 = OpConvertSToF %float %71
-               OpStore %param %72
-         %73 = OpFunctionCall %float %func_f1_ %param
-               OpStore %f %73
-         %75 = OpLoad %int %i
-         %77 = OpIAdd %int %75 %int_1
-               OpStore %i %77
-               OpBranch %59
-         %60 = OpLabel
-         %78 = OpLoad %float %f
-         %79 = OpFOrdEqual %bool %78 %float_5
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpStore %x_GLF_color %83
-               OpBranch %80
-         %82 = OpLabel
-               OpStore %x_GLF_color %84
-               OpBranch %80
-         %80 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %85
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %89 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %90 = OpFunctionCall %void %main_1
-         %91 = OpLoad %v4float %x_GLF_color
-         %92 = OpCompositeConstruct %main_out %91
-               OpReturnValue %92
-               OpFunctionEnd
-       %main = OpFunction %void None %47
-         %94 = OpLabel
-         %96 = OpLoad %v4float %gl_FragCoord_param_1
-         %95 = OpFunctionCall %main_out %main_inner %96
-         %97 = OpCompositeExtract %v4float %95 0
-               OpStore %x_GLF_color_1_1 %97
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d25c0e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-wrap-op-kill-two-branches/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,71 +0,0 @@
-[[block]]
-struct buf0 {
-  five : i32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_f1_(x : ptr<function, f32>) -> f32 {
-  let x_56 : f32 = *(x);
-  if ((x_56 > 5.0)) {
-    let x_61 : f32 = gl_FragCoord.x;
-    if ((x_61 < 0.5)) {
-      discard;
-    } else {
-      let x_67 : f32 = gl_FragCoord.y;
-      if ((x_67 < 0.5)) {
-        discard;
-      }
-    }
-  }
-  let x_71 : f32 = *(x);
-  return (x_71 + 1.0);
-}
-
-fn main_1() {
-  var f : f32;
-  var i : i32;
-  var param : f32;
-  f = 0.0;
-  i = 0;
-  loop {
-    let x_39 : i32 = i;
-    let x_41 : i32 = x_10.five;
-    if ((x_39 < x_41)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_45 : i32 = i;
-      param = f32(x_45);
-      let x_47 : f32 = func_f1_(&(param));
-      f = x_47;
-      let x_48 : i32 = i;
-      i = (x_48 + 1);
-    }
-  }
-  let x_50 : f32 = f;
-  if ((x_50 == 5.0)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.msl
deleted file mode 100644
index 4658b19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  float3x2 m32 = float3x2(0.0f);
-  tint_array_wrapper_2 sums = {};
-  int x_52_phi = 0;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  m32 = float3x2(float2(x_40, 0.0f), float2(0.0f, x_40), float2(0.0f, 0.0f));
-  int const x_45 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_45 == 1)) {
-    m32[3][x_45] = x_40;
-  }
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_40, x_40, x_40}};
-  sums = tint_symbol_2;
-  x_52_phi = x_45;
-  while (true) {
-    int x_53 = 0;
-    int const x_52 = x_52_phi;
-    int const x_56 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_52 < x_56)) {
-    } else {
-      break;
-    }
-    {
-      float const x_60 = m32[x_52][x_45];
-      int const x_61_save = x_56;
-      float const x_62 = sums.arr[x_61_save];
-      sums.arr[x_61_save] = (x_62 + x_60);
-      x_53 = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-      x_52_phi = x_53;
-    }
-  }
-  float const x_65 = sums.arr[x_45];
-  float const x_67 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  int const x_69 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  float const x_71 = sums.arr[x_69];
-  *(tint_symbol_4) = float4(x_65, x_67, x_67, x_71);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_8, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.spvasm
deleted file mode 100644
index 62fe687..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,166 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 99
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m32 "m32"
-               OpName %sums "sums"
-               OpName %x_52_phi "x_52_phi"
-               OpName %x_53 "x_53"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %28 = OpConstantNull %mat3v2float
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3 = OpTypePointer Function %_arr_float_uint_3
-         %32 = OpConstantNull %_arr_float_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-         %44 = OpConstantComposite %v2float %float_0 %float_0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-        %m32 = OpVariable %_ptr_Function_mat3v2float Function %28
-       %sums = OpVariable %_ptr_Function__arr_float_uint_3 Function %32
-   %x_52_phi = OpVariable %_ptr_Function_int Function %35
-       %x_53 = OpVariable %_ptr_Function_int Function %35
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %42 = OpCompositeConstruct %v2float %40 %float_0
-         %43 = OpCompositeConstruct %v2float %float_0 %40
-         %45 = OpCompositeConstruct %mat3v2float %42 %43 %44
-               OpStore %m32 %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %50 = OpIEqual %bool %48 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %52
-         %53 = OpLabel
-         %56 = OpAccessChain %_ptr_Function_float %m32 %int_3 %48
-               OpStore %56 %40
-               OpBranch %52
-         %52 = OpLabel
-         %57 = OpCompositeConstruct %_arr_float_uint_3 %40 %40 %40
-               OpStore %sums %57
-               OpStore %x_52_phi %48
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-         %63 = OpLoad %int %x_52_phi
-         %65 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpSLessThan %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %59
-         %68 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-         %71 = OpAccessChain %_ptr_Function_float %m32 %63 %48
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Function_float %sums %66
-         %74 = OpLoad %float %73
-         %75 = OpAccessChain %_ptr_Function_float %sums %66
-         %76 = OpFAdd %float %74 %72
-               OpStore %75 %76
-         %77 = OpIAdd %int %63 %int_1
-               OpStore %x_53 %77
-         %78 = OpLoad %int %x_53
-               OpStore %x_52_phi %78
-               OpBranch %58
-         %59 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_float %sums %48
-         %80 = OpLoad %float %79
-         %81 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %82 = OpLoad %float %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Function_float %sums %84
-         %86 = OpLoad %float %85
-         %87 = OpCompositeConstruct %v4float %80 %82 %82 %86
-               OpStore %x_GLF_color %87
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-         %91 = OpLabel
-         %92 = OpFunctionCall %void %main_1
-         %93 = OpLoad %v4float %x_GLF_color
-         %94 = OpCompositeConstruct %main_out %93
-               OpReturnValue %94
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %96 = OpLabel
-         %97 = OpFunctionCall %main_out %main_inner
-         %98 = OpCompositeExtract %v4float %97 0
-               OpStore %x_GLF_color_1_1 %98
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.wgsl
deleted file mode 100644
index 712a69e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,68 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m32 : mat3x2<f32>;
-  var sums : array<f32, 3>;
-  var x_52_phi : i32;
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  m32 = mat3x2<f32>(vec2<f32>(x_40, 0.0), vec2<f32>(0.0, x_40), vec2<f32>(0.0, 0.0));
-  let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
-  if ((x_45 == 1)) {
-    m32[3][x_45] = x_40;
-  }
-  sums = array<f32, 3>(x_40, x_40, x_40);
-  x_52_phi = x_45;
-  loop {
-    var x_53 : i32;
-    let x_52 : i32 = x_52_phi;
-    let x_56 : i32 = x_8.x_GLF_uniform_int_values[2];
-    if ((x_52 < x_56)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_60 : f32 = m32[x_52][x_45];
-      let x_61 : ptr<function, f32> = &(sums[x_56]);
-      let x_62 : f32 = *(x_61);
-      *(x_61) = (x_62 + x_60);
-      x_53 = (x_52 + 1);
-      x_52_phi = x_53;
-    }
-  }
-  let x_65 : f32 = sums[x_45];
-  let x_67 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_69 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_71 : f32 = sums[x_69];
-  x_GLF_color = vec4<f32>(x_65, x_67, x_67, x_71);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.msl
deleted file mode 100644
index 4658b19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[3];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_4) {
-  float3x2 m32 = float3x2(0.0f);
-  tint_array_wrapper_2 sums = {};
-  int x_52_phi = 0;
-  float const x_40 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  m32 = float3x2(float2(x_40, 0.0f), float2(0.0f, x_40), float2(0.0f, 0.0f));
-  int const x_45 = x_8.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_45 == 1)) {
-    m32[3][x_45] = x_40;
-  }
-  tint_array_wrapper_2 const tint_symbol_2 = {.arr={x_40, x_40, x_40}};
-  sums = tint_symbol_2;
-  x_52_phi = x_45;
-  while (true) {
-    int x_53 = 0;
-    int const x_52 = x_52_phi;
-    int const x_56 = x_8.x_GLF_uniform_int_values.arr[2].el;
-    if ((x_52 < x_56)) {
-    } else {
-      break;
-    }
-    {
-      float const x_60 = m32[x_52][x_45];
-      int const x_61_save = x_56;
-      float const x_62 = sums.arr[x_61_save];
-      sums.arr[x_61_save] = (x_62 + x_60);
-      x_53 = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-      x_52_phi = x_53;
-    }
-  }
-  float const x_65 = sums.arr[x_45];
-  float const x_67 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  int const x_69 = x_8.x_GLF_uniform_int_values.arr[1].el;
-  float const x_71 = sums.arr[x_69];
-  *(tint_symbol_4) = float4(x_65, x_67, x_67, x_71);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_8, thread float4* const tint_symbol_5) {
-  main_1(x_6, x_8, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.spvasm
deleted file mode 100644
index 62fe687..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,166 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 99
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m32 "m32"
-               OpName %sums "sums"
-               OpName %x_52_phi "x_52_phi"
-               OpName %x_53 "x_53"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_3 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_3 = OpConstant %uint 3
-%_arr_int_uint_3 = OpTypeArray %int %uint_3
-       %buf0 = OpTypeStruct %_arr_int_uint_3
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat3v2float = OpTypeMatrix %v2float 3
-%_ptr_Function_mat3v2float = OpTypePointer Function %mat3v2float
-         %28 = OpConstantNull %mat3v2float
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-%_ptr_Function__arr_float_uint_3 = OpTypePointer Function %_arr_float_uint_3
-         %32 = OpConstantNull %_arr_float_uint_3
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-         %44 = OpConstantComposite %v2float %float_0 %float_0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %88 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-        %m32 = OpVariable %_ptr_Function_mat3v2float Function %28
-       %sums = OpVariable %_ptr_Function__arr_float_uint_3 Function %32
-   %x_52_phi = OpVariable %_ptr_Function_int Function %35
-       %x_53 = OpVariable %_ptr_Function_int Function %35
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %40 = OpLoad %float %39
-         %42 = OpCompositeConstruct %v2float %40 %float_0
-         %43 = OpCompositeConstruct %v2float %float_0 %40
-         %45 = OpCompositeConstruct %mat3v2float %42 %43 %44
-               OpStore %m32 %45
-         %47 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_0
-         %48 = OpLoad %int %47
-         %50 = OpIEqual %bool %48 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %52
-         %53 = OpLabel
-         %56 = OpAccessChain %_ptr_Function_float %m32 %int_3 %48
-               OpStore %56 %40
-               OpBranch %52
-         %52 = OpLabel
-         %57 = OpCompositeConstruct %_arr_float_uint_3 %40 %40 %40
-               OpStore %sums %57
-               OpStore %x_52_phi %48
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-         %63 = OpLoad %int %x_52_phi
-         %65 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_2
-         %66 = OpLoad %int %65
-         %67 = OpSLessThan %bool %63 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %59
-         %68 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-         %71 = OpAccessChain %_ptr_Function_float %m32 %63 %48
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Function_float %sums %66
-         %74 = OpLoad %float %73
-         %75 = OpAccessChain %_ptr_Function_float %sums %66
-         %76 = OpFAdd %float %74 %72
-               OpStore %75 %76
-         %77 = OpIAdd %int %63 %int_1
-               OpStore %x_53 %77
-         %78 = OpLoad %int %x_53
-               OpStore %x_52_phi %78
-               OpBranch %58
-         %59 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_float %sums %48
-         %80 = OpLoad %float %79
-         %81 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %82 = OpLoad %float %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_8 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Function_float %sums %84
-         %86 = OpLoad %float %85
-         %87 = OpCompositeConstruct %v4float %80 %82 %82 %86
-               OpStore %x_GLF_color %87
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %88
-         %91 = OpLabel
-         %92 = OpFunctionCall %void %main_1
-         %93 = OpLoad %v4float %x_GLF_color
-         %94 = OpCompositeConstruct %main_out %93
-               OpReturnValue %94
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %96 = OpLabel
-         %97 = OpFunctionCall %main_out %main_inner
-         %98 = OpCompositeExtract %v4float %97 0
-               OpStore %x_GLF_color_1_1 %98
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.wgsl
deleted file mode 100644
index 712a69e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-write-past-matrix-elements-unused/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,68 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 3>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m32 : mat3x2<f32>;
-  var sums : array<f32, 3>;
-  var x_52_phi : i32;
-  let x_40 : f32 = x_6.x_GLF_uniform_float_values[0];
-  m32 = mat3x2<f32>(vec2<f32>(x_40, 0.0), vec2<f32>(0.0, x_40), vec2<f32>(0.0, 0.0));
-  let x_45 : i32 = x_8.x_GLF_uniform_int_values[0];
-  if ((x_45 == 1)) {
-    m32[3][x_45] = x_40;
-  }
-  sums = array<f32, 3>(x_40, x_40, x_40);
-  x_52_phi = x_45;
-  loop {
-    var x_53 : i32;
-    let x_52 : i32 = x_52_phi;
-    let x_56 : i32 = x_8.x_GLF_uniform_int_values[2];
-    if ((x_52 < x_56)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_60 : f32 = m32[x_52][x_45];
-      let x_61 : ptr<function, f32> = &(sums[x_56]);
-      let x_62 : f32 = *(x_61);
-      *(x_61) = (x_62 + x_60);
-      x_53 = (x_52 + 1);
-      x_52_phi = x_53;
-    }
-  }
-  let x_65 : f32 = sums[x_45];
-  let x_67 : f32 = x_6.x_GLF_uniform_float_values[1];
-  let x_69 : i32 = x_8.x_GLF_uniform_int_values[1];
-  let x_71 : f32 = sums[x_69];
-  x_GLF_color = vec4<f32>(x_65, x_67, x_67, x_71);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e0d4c6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  bool x_54 = false;
-  bool x_55_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_35 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = cos(cos(asfloat(int2(-1, x_35))));
-  const float x_41 = v1.x;
-  x_GLF_color = float4(x_41, x_41, x_41, x_41);
-  const float x_44 = v1.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_46 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const bool x_47 = (x_44 > x_46);
-  x_55_phi = x_47;
-  if (x_47) {
-    const float x_51 = v1.y;
-    const float x_53 = asfloat(x_8[1].x);
-    x_54 = (x_51 < x_53);
-    x_55_phi = x_54;
-  }
-  if (x_55_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_63 = asint(x_6[1].x);
-    const int x_66 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_69 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_60), float(x_63), float(x_66), float(x_69));
-  } else {
-    const int x_73 = asint(x_6[1].x);
-    const float x_74 = float(x_73);
-    x_GLF_color = float4(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.msl
deleted file mode 100644
index 04da6c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  bool x_54 = false;
-  bool x_55_phi = false;
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  v1 = cos(cos(as_type<float2>(int2(-1, x_35))));
-  float const x_41 = v1.x;
-  *(tint_symbol_3) = float4(x_41, x_41, x_41, x_41);
-  float const x_44 = v1.y;
-  float const x_46 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_47 = (x_44 > x_46);
-  x_55_phi = x_47;
-  if (x_47) {
-    float const x_51 = v1.y;
-    float const x_53 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    x_54 = (x_51 < x_53);
-    x_55_phi = x_54;
-  }
-  bool const x_55 = x_55_phi;
-  if (x_55) {
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_66 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_69 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_60), float(x_63), float(x_66), float(x_69));
-  } else {
-    int const x_73 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_74 = float(x_73);
-    *(tint_symbol_3) = float4(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 09748fb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,155 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-         %38 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %x_54 "x_54"
-               OpName %x_55_phi "x_55_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %v2int = OpTypeVector %int 2
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %85 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %26
-       %x_54 = OpVariable %_ptr_Function_bool Function %30
-   %x_55_phi = OpVariable %_ptr_Function_bool Function %30
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %36 = OpLoad %int %35
-         %43 = OpCompositeConstruct %v2int %int_n1 %36
-         %40 = OpBitcast %v2float %43
-         %39 = OpExtInst %v2float %38 Cos %40
-         %37 = OpExtInst %v2float %38 Cos %39
-               OpStore %v1 %37
-         %45 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-         %46 = OpLoad %float %45
-         %47 = OpCompositeConstruct %v4float %46 %46 %46 %46
-               OpStore %x_GLF_color %47
-         %49 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %53 = OpLoad %float %52
-         %54 = OpFOrdGreaterThan %bool %50 %53
-               OpStore %x_55_phi %54
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %58 = OpLoad %float %57
-         %60 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpFOrdLessThan %bool %58 %61
-               OpStore %x_54 %62
-         %63 = OpLoad %bool %x_54
-               OpStore %x_55_phi %63
-               OpBranch %55
-         %55 = OpLabel
-         %64 = OpLoad %bool %x_55_phi
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %67
-         %66 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %75 = OpLoad %int %74
-         %76 = OpConvertSToF %float %69
-         %77 = OpConvertSToF %float %71
-         %78 = OpConvertSToF %float %73
-         %79 = OpConvertSToF %float %75
-         %80 = OpCompositeConstruct %v4float %76 %77 %78 %79
-               OpStore %x_GLF_color %80
-               OpBranch %65
-         %67 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpConvertSToF %float %82
-         %84 = OpCompositeConstruct %v4float %83 %83 %83 %83
-               OpStore %x_GLF_color %84
-               OpBranch %65
-         %65 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %85
-         %88 = OpLabel
-         %89 = OpFunctionCall %void %main_1
-         %90 = OpLoad %v4float %x_GLF_color
-         %91 = OpCompositeConstruct %main_out %90
-               OpReturnValue %91
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %93 = OpLabel
-         %94 = OpFunctionCall %main_out %main_inner
-         %95 = OpCompositeExtract %v4float %94 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5e5c216..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  var x_54 : bool;
-  var x_55_phi : bool;
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-  v1 = cos(cos(bitcast<vec2<f32>>(vec2<i32>(-1, x_35))));
-  let x_41 : f32 = v1.x;
-  x_GLF_color = vec4<f32>(x_41, x_41, x_41, x_41);
-  let x_44 : f32 = v1.y;
-  let x_46 : f32 = x_8.x_GLF_uniform_float_values[0];
-  let x_47 : bool = (x_44 > x_46);
-  x_55_phi = x_47;
-  if (x_47) {
-    let x_51 : f32 = v1.y;
-    let x_53 : f32 = x_8.x_GLF_uniform_float_values[1];
-    x_54 = (x_51 < x_53);
-    x_55_phi = x_54;
-  }
-  let x_55 : bool = x_55_phi;
-  if (x_55) {
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_66 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_69 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_60), f32(x_63), f32(x_66), f32(x_69));
-  } else {
-    let x_73 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_74 : f32 = f32(x_73);
-    x_GLF_color = vec4<f32>(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e0d4c6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b1, space0) {
-  uint4 x_8[2];
-};
-
-void main_1() {
-  float2 v1 = float2(0.0f, 0.0f);
-  bool x_54 = false;
-  bool x_55_phi = false;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_35 = asint(x_6[scalar_offset / 4][scalar_offset % 4]);
-  v1 = cos(cos(asfloat(int2(-1, x_35))));
-  const float x_41 = v1.x;
-  x_GLF_color = float4(x_41, x_41, x_41, x_41);
-  const float x_44 = v1.y;
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_46 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  const bool x_47 = (x_44 > x_46);
-  x_55_phi = x_47;
-  if (x_47) {
-    const float x_51 = v1.y;
-    const float x_53 = asfloat(x_8[1].x);
-    x_54 = (x_51 < x_53);
-    x_55_phi = x_54;
-  }
-  if (x_55_phi) {
-    const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-    const int x_60 = asint(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-    const int x_63 = asint(x_6[1].x);
-    const int x_66 = asint(x_6[1].x);
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_69 = asint(x_6[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    x_GLF_color = float4(float(x_60), float(x_63), float(x_66), float(x_69));
-  } else {
-    const int x_73 = asint(x_6[1].x);
-    const float x_74 = float(x_73);
-    x_GLF_color = float4(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.msl
deleted file mode 100644
index 04da6c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_3) {
-  float2 v1 = 0.0f;
-  bool x_54 = false;
-  bool x_55_phi = false;
-  int const x_35 = x_6.x_GLF_uniform_int_values.arr[0].el;
-  v1 = cos(cos(as_type<float2>(int2(-1, x_35))));
-  float const x_41 = v1.x;
-  *(tint_symbol_3) = float4(x_41, x_41, x_41, x_41);
-  float const x_44 = v1.y;
-  float const x_46 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_47 = (x_44 > x_46);
-  x_55_phi = x_47;
-  if (x_47) {
-    float const x_51 = v1.y;
-    float const x_53 = x_8.x_GLF_uniform_float_values.arr[1].el;
-    x_54 = (x_51 < x_53);
-    x_55_phi = x_54;
-  }
-  bool const x_55 = x_55_phi;
-  if (x_55) {
-    int const x_60 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    int const x_63 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_66 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    int const x_69 = x_6.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_60), float(x_63), float(x_66), float(x_69));
-  } else {
-    int const x_73 = x_6.x_GLF_uniform_int_values.arr[1].el;
-    float const x_74 = float(x_73);
-    *(tint_symbol_3) = float4(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, constant buf1& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]], constant buf1& x_8 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 09748fb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,155 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 96
-; Schema: 0
-               OpCapability Shader
-         %38 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %v1 "v1"
-               OpName %x_54 "x_54"
-               OpName %x_55_phi "x_55_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-       %buf1 = OpTypeStruct %_arr_float_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_8 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %19 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %v2int = OpTypeVector %int 2
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %85 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %19
-         %22 = OpLabel
-         %v1 = OpVariable %_ptr_Function_v2float Function %26
-       %x_54 = OpVariable %_ptr_Function_bool Function %30
-   %x_55_phi = OpVariable %_ptr_Function_bool Function %30
-         %35 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %36 = OpLoad %int %35
-         %43 = OpCompositeConstruct %v2int %int_n1 %36
-         %40 = OpBitcast %v2float %43
-         %39 = OpExtInst %v2float %38 Cos %40
-         %37 = OpExtInst %v2float %38 Cos %39
-               OpStore %v1 %37
-         %45 = OpAccessChain %_ptr_Function_float %v1 %uint_0
-         %46 = OpLoad %float %45
-         %47 = OpCompositeConstruct %v4float %46 %46 %46 %46
-               OpStore %x_GLF_color %47
-         %49 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %53 = OpLoad %float %52
-         %54 = OpFOrdGreaterThan %bool %50 %53
-               OpStore %x_55_phi %54
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Function_float %v1 %uint_1
-         %58 = OpLoad %float %57
-         %60 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_1
-         %61 = OpLoad %float %60
-         %62 = OpFOrdLessThan %bool %58 %61
-               OpStore %x_54 %62
-         %63 = OpLoad %bool %x_54
-               OpStore %x_55_phi %63
-               OpBranch %55
-         %55 = OpLabel
-         %64 = OpLoad %bool %x_55_phi
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %67
-         %66 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %69 = OpLoad %int %68
-         %70 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %71 = OpLoad %int %70
-         %72 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %73 = OpLoad %int %72
-         %74 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_0
-         %75 = OpLoad %int %74
-         %76 = OpConvertSToF %float %69
-         %77 = OpConvertSToF %float %71
-         %78 = OpConvertSToF %float %73
-         %79 = OpConvertSToF %float %75
-         %80 = OpCompositeConstruct %v4float %76 %77 %78 %79
-               OpStore %x_GLF_color %80
-               OpBranch %65
-         %67 = OpLabel
-         %81 = OpAccessChain %_ptr_Uniform_int %x_6 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpConvertSToF %float %82
-         %84 = OpCompositeConstruct %v4float %83 %83 %83 %83
-               OpStore %x_GLF_color %84
-               OpBranch %65
-         %65 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %85
-         %88 = OpLabel
-         %89 = OpFunctionCall %void %main_1
-         %90 = OpLoad %v4float %x_GLF_color
-         %91 = OpCompositeConstruct %main_out %90
-               OpReturnValue %91
-               OpFunctionEnd
-       %main = OpFunction %void None %19
-         %93 = OpLabel
-         %94 = OpFunctionCall %main_out %main_inner
-         %95 = OpCompositeExtract %v4float %94 0
-               OpStore %x_GLF_color_1_1 %95
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 5e5c216..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-apfloat-nan-cos-cos/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_8 : buf1;
-
-fn main_1() {
-  var v1 : vec2<f32>;
-  var x_54 : bool;
-  var x_55_phi : bool;
-  let x_35 : i32 = x_6.x_GLF_uniform_int_values[0];
-  v1 = cos(cos(bitcast<vec2<f32>>(vec2<i32>(-1, x_35))));
-  let x_41 : f32 = v1.x;
-  x_GLF_color = vec4<f32>(x_41, x_41, x_41, x_41);
-  let x_44 : f32 = v1.y;
-  let x_46 : f32 = x_8.x_GLF_uniform_float_values[0];
-  let x_47 : bool = (x_44 > x_46);
-  x_55_phi = x_47;
-  if (x_47) {
-    let x_51 : f32 = v1.y;
-    let x_53 : f32 = x_8.x_GLF_uniform_float_values[1];
-    x_54 = (x_51 < x_53);
-    x_55_phi = x_54;
-  }
-  let x_55 : bool = x_55_phi;
-  if (x_55) {
-    let x_60 : i32 = x_6.x_GLF_uniform_int_values[0];
-    let x_63 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_66 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_69 : i32 = x_6.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_60), f32(x_63), f32(x_66), f32(x_69));
-  } else {
-    let x_73 : i32 = x_6.x_GLF_uniform_int_values[1];
-    let x_74 : f32 = f32(x_73);
-    x_GLF_color = vec4<f32>(x_74, x_74, x_74, x_74);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 350b119..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b2, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[2];
-};
-
-void main_1() {
-  uint a = 0u;
-  float b = 0.0f;
-  uint c = 0u;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const uint x_38 = x_6[scalar_offset / 4][scalar_offset % 4];
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = (x_38 >> uint(x_40));
-  b = asfloat(a);
-  c = asuint(b);
-  const uint x_47 = c;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const uint x_49 = x_6[scalar_offset_2 / 4][scalar_offset_2 % 4];
-  if ((x_47 == x_49)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_12[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_58 = asint(x_12[1].x);
-    const int x_61 = asint(x_12[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_64 = asint(x_12[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    const float x_67 = b;
-    x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.msl
deleted file mode 100644
index de16e9d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_uint_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf2& x_8, constant buf0& x_12, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float b = 0.0f;
-  uint c = 0u;
-  uint const x_38 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  float const x_40 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  a = (x_38 >> uint(x_40));
-  uint const x_43 = a;
-  b = as_type<float>(x_43);
-  float const x_45 = b;
-  c = as_type<uint>(x_45);
-  uint const x_47 = c;
-  uint const x_49 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  if ((x_47 == x_49)) {
-    int const x_55 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    int const x_58 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    float const x_67 = b;
-    *(tint_symbol_3) = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf2& x_8, constant buf0& x_12, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_12, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf2& x_8 [[buffer(1)]], constant buf0& x_12 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_12, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e73d4a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,148 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_uint_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_uint_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-       %buf1 = OpTypeStruct %_arr_uint_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf2 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_8 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %24 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %30 = OpConstantNull %uint
-%_ptr_Function_float = OpTypePointer Function %float
-         %33 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %24
-         %27 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %30
-          %b = OpVariable %_ptr_Function_float Function %33
-          %c = OpVariable %_ptr_Function_uint Function %30
-         %38 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %39 = OpLoad %uint %38
-         %41 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpConvertFToU %uint %42
-         %44 = OpShiftRightLogical %uint %39 %43
-               OpStore %a %44
-         %45 = OpLoad %uint %a
-         %46 = OpBitcast %float %45
-               OpStore %b %46
-         %47 = OpLoad %float %b
-         %48 = OpBitcast %uint %47
-               OpStore %c %48
-         %49 = OpLoad %uint %c
-         %50 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %51 = OpLoad %uint %50
-         %52 = OpIEqual %bool %49 %51
-               OpSelectionMerge %54 None
-               OpBranchConditional %52 %55 %56
-         %55 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %61 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %59
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %54
-         %56 = OpLabel
-         %72 = OpLoad %float %b
-         %73 = OpCompositeConstruct %v4float %72 %72 %72 %72
-               OpStore %x_GLF_color %73
-               OpBranch %54
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-         %77 = OpLabel
-         %78 = OpFunctionCall %void %main_1
-         %79 = OpLoad %v4float %x_GLF_color
-         %80 = OpCompositeConstruct %main_out %79
-               OpReturnValue %80
-               OpFunctionEnd
-       %main = OpFunction %void None %24
-         %82 = OpLabel
-         %83 = OpFunctionCall %main_out %main_inner
-         %84 = OpCompositeExtract %v4float %83 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 79c6767..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<u32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_uint_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-type Arr_2 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_2;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-fn main_1() {
-  var a : u32;
-  var b : f32;
-  var c : u32;
-  let x_38 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  let x_40 : f32 = x_8.x_GLF_uniform_float_values[0];
-  a = (x_38 >> u32(x_40));
-  let x_43 : u32 = a;
-  b = bitcast<f32>(x_43);
-  let x_45 : f32 = b;
-  c = bitcast<u32>(x_45);
-  let x_47 : u32 = c;
-  let x_49 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  if ((x_47 == x_49)) {
-    let x_55 : i32 = x_12.x_GLF_uniform_int_values[0];
-    let x_58 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_12.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  } else {
-    let x_67 : f32 = b;
-    x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 350b119..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[2];
-};
-cbuffer cbuffer_x_8 : register(b2, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_12 : register(b0, space0) {
-  uint4 x_12[2];
-};
-
-void main_1() {
-  uint a = 0u;
-  float b = 0.0f;
-  uint c = 0u;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const uint x_38 = x_6[scalar_offset / 4][scalar_offset % 4];
-  const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-  const float x_40 = asfloat(x_8[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-  a = (x_38 >> uint(x_40));
-  b = asfloat(a);
-  c = asuint(b);
-  const uint x_47 = c;
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const uint x_49 = x_6[scalar_offset_2 / 4][scalar_offset_2 % 4];
-  if ((x_47 == x_49)) {
-    const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-    const int x_55 = asint(x_12[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-    const int x_58 = asint(x_12[1].x);
-    const int x_61 = asint(x_12[1].x);
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_64 = asint(x_12[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    x_GLF_color = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    const float x_67 = b;
-    x_GLF_color = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.msl
deleted file mode 100644
index de16e9d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ uint el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_uint_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[1];
-};
-struct buf2 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_2 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_2[12];
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ tint_padded_array_element_2 arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_2 x_GLF_uniform_int_values;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf2& x_8, constant buf0& x_12, thread float4* const tint_symbol_3) {
-  uint a = 0u;
-  float b = 0.0f;
-  uint c = 0u;
-  uint const x_38 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  float const x_40 = x_8.x_GLF_uniform_float_values.arr[0].el;
-  a = (x_38 >> uint(x_40));
-  uint const x_43 = a;
-  b = as_type<float>(x_43);
-  float const x_45 = b;
-  c = as_type<uint>(x_45);
-  uint const x_47 = c;
-  uint const x_49 = x_6.x_GLF_uniform_uint_values.arr[0].el;
-  if ((x_47 == x_49)) {
-    int const x_55 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    int const x_58 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_12.x_GLF_uniform_int_values.arr[1].el;
-    int const x_64 = x_12.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_3) = float4(float(x_55), float(x_58), float(x_61), float(x_64));
-  } else {
-    float const x_67 = b;
-    *(tint_symbol_3) = float4(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf2& x_8, constant buf0& x_12, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_8, x_12, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf2& x_8 [[buffer(1)]], constant buf0& x_12 [[buffer(2)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_8, x_12, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e73d4a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,148 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_uint_values"
-               OpName %x_6 "x_6"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "x_GLF_uniform_float_values"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_12 "x_12"
-               OpName %main_1 "main_1"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_uint_uint_2 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_12 NonWritable
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_uint_uint_2 = OpTypeArray %uint %uint_2
-       %buf1 = OpTypeStruct %_arr_uint_uint_2
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-       %buf2 = OpTypeStruct %_arr_float_uint_1
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-        %x_8 = OpVariable %_ptr_Uniform_buf2 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_12 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %24 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %30 = OpConstantNull %uint
-%_ptr_Function_float = OpTypePointer Function %float
-         %33 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_uint = OpTypePointer Uniform %uint
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %24
-         %27 = OpLabel
-          %a = OpVariable %_ptr_Function_uint Function %30
-          %b = OpVariable %_ptr_Function_float Function %33
-          %c = OpVariable %_ptr_Function_uint Function %30
-         %38 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %39 = OpLoad %uint %38
-         %41 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0
-         %42 = OpLoad %float %41
-         %43 = OpConvertFToU %uint %42
-         %44 = OpShiftRightLogical %uint %39 %43
-               OpStore %a %44
-         %45 = OpLoad %uint %a
-         %46 = OpBitcast %float %45
-               OpStore %b %46
-         %47 = OpLoad %float %b
-         %48 = OpBitcast %uint %47
-               OpStore %c %48
-         %49 = OpLoad %uint %c
-         %50 = OpAccessChain %_ptr_Uniform_uint %x_6 %uint_0 %int_0
-         %51 = OpLoad %uint %50
-         %52 = OpIEqual %bool %49 %51
-               OpSelectionMerge %54 None
-               OpBranchConditional %52 %55 %56
-         %55 = OpLabel
-         %58 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-         %59 = OpLoad %int %58
-         %61 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_1
-         %64 = OpLoad %int %63
-         %65 = OpAccessChain %_ptr_Uniform_int %x_12 %uint_0 %int_0
-         %66 = OpLoad %int %65
-         %67 = OpConvertSToF %float %59
-         %68 = OpConvertSToF %float %62
-         %69 = OpConvertSToF %float %64
-         %70 = OpConvertSToF %float %66
-         %71 = OpCompositeConstruct %v4float %67 %68 %69 %70
-               OpStore %x_GLF_color %71
-               OpBranch %54
-         %56 = OpLabel
-         %72 = OpLoad %float %b
-         %73 = OpCompositeConstruct %v4float %72 %72 %72 %72
-               OpStore %x_GLF_color %73
-               OpBranch %54
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-         %77 = OpLabel
-         %78 = OpFunctionCall %void %main_1
-         %79 = OpLoad %v4float %x_GLF_color
-         %80 = OpCompositeConstruct %main_out %79
-               OpReturnValue %80
-               OpFunctionEnd
-       %main = OpFunction %void None %24
-         %82 = OpLabel
-         %83 = OpFunctionCall %main_out %main_inner
-         %84 = OpCompositeExtract %v4float %83 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 79c6767..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-machine-value-type-uint-to-float/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,65 +0,0 @@
-type Arr = [[stride(16)]] array<u32, 2>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_uint_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<f32, 1>;
-
-[[block]]
-struct buf2 {
-  x_GLF_uniform_float_values : Arr_1;
-};
-
-type Arr_2 = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_2;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_8 : buf2;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_12 : buf0;
-
-fn main_1() {
-  var a : u32;
-  var b : f32;
-  var c : u32;
-  let x_38 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  let x_40 : f32 = x_8.x_GLF_uniform_float_values[0];
-  a = (x_38 >> u32(x_40));
-  let x_43 : u32 = a;
-  b = bitcast<f32>(x_43);
-  let x_45 : f32 = b;
-  c = bitcast<u32>(x_45);
-  let x_47 : u32 = c;
-  let x_49 : u32 = x_6.x_GLF_uniform_uint_values[0];
-  if ((x_47 == x_49)) {
-    let x_55 : i32 = x_12.x_GLF_uniform_int_values[0];
-    let x_58 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_12.x_GLF_uniform_int_values[1];
-    let x_64 : i32 = x_12.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_55), f32(x_58), f32(x_61), f32(x_64));
-  } else {
-    let x_67 : f32 = b;
-    x_GLF_color = vec4<f32>(x_67, x_67, x_67, x_67);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a5af68f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,118 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float A[2] = (float[2])0;
-  int i = 0;
-  int j = 0;
-  bool x_101 = false;
-  bool x_102_phi = false;
-  const float x_39 = asfloat(x_6[1].x);
-  A[0] = x_39;
-  const float x_42 = asfloat(x_6[1].x);
-  A[1] = x_42;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_9[scalar_offset / 4][scalar_offset % 4]);
-  i = x_45;
-  while (true) {
-    const int x_50 = i;
-    const int x_52 = asint(x_9[3].x);
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    j = x_56;
-    while (true) {
-      const int x_61 = j;
-      const int x_63 = asint(x_9[2].x);
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      switch(j) {
-        case 1: {
-          const int x_78 = i;
-          const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-          const float x_80 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-          A[x_78] = x_80;
-          break;
-        }
-        case 0: {
-          if ((-2147483648 < i)) {
-            {
-              j = (j + 1);
-            }
-            continue;
-          }
-          const int x_74 = i;
-          const float x_76 = asfloat(x_6[2].x);
-          A[x_74] = x_76;
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_87 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_89 = A[x_87];
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_91 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const bool x_92 = (x_89 == x_91);
-  x_102_phi = x_92;
-  if (x_92) {
-    const int x_96 = asint(x_9[1].x);
-    const float x_98 = A[x_96];
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_100 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_101 = (x_98 == x_100);
-    x_102_phi = x_101;
-  }
-  if (x_102_phi) {
-    const int x_107 = asint(x_9[1].x);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_110 = asint(x_9[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_113 = asint(x_9[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const int x_116 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    const int x_120 = asint(x_9[1].x);
-    const float x_121 = float(x_120);
-    x_GLF_color = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_4 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_4;
-}
-C:\src\tint\test\Shader@0x000001DCAB969A50(52,13-21): error X3708: continue cannot be used in a switch
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.msl
deleted file mode 100644
index e487692..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,138 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 A = {};
-  int i = 0;
-  int j = 0;
-  bool x_101 = false;
-  bool x_102_phi = false;
-  float const x_39 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  A.arr[0] = x_39;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  A.arr[1] = x_42;
-  int const x_45 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  i = x_45;
-  while (true) {
-    int const x_50 = i;
-    int const x_52 = x_9.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    int const x_56 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    j = x_56;
-    while (true) {
-      int const x_61 = j;
-      int const x_63 = x_9.x_GLF_uniform_int_values.arr[2].el;
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      int const x_66 = j;
-      switch(x_66) {
-        case 1: {
-          int const x_78 = i;
-          float const x_80 = x_6.x_GLF_uniform_float_values.arr[0].el;
-          A.arr[x_78] = x_80;
-          break;
-        }
-        case 0: {
-          int const x_70 = i;
-          if (((-2147483647 - 1) < x_70)) {
-            {
-              int const x_82 = j;
-              j = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
-            }
-            continue;
-          }
-          int const x_74 = i;
-          float const x_76 = x_6.x_GLF_uniform_float_values.arr[2].el;
-          A.arr[x_74] = x_76;
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-      {
-        int const x_82 = j;
-        j = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_84 = i;
-      i = as_type<int>((as_type<uint>(x_84) + as_type<uint>(1)));
-    }
-  }
-  int const x_87 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  float const x_89 = A.arr[x_87];
-  float const x_91 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_92 = (x_89 == x_91);
-  x_102_phi = x_92;
-  if (x_92) {
-    int const x_96 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_98 = A.arr[x_96];
-    float const x_100 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    x_101 = (x_98 == x_100);
-    x_102_phi = x_101;
-  }
-  bool const x_102 = x_102_phi;
-  if (x_102) {
-    int const x_107 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_110 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_113 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_116 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    int const x_120 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_121 = float(x_120);
-    *(tint_symbol_3) = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 37e6c5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,243 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 149
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %A "A"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %x_101 "x_101"
-               OpName %x_102_phi "x_102_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
-         %28 = OpConstantNull %_arr_float_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-%int_n2147483648 = OpConstant %int -2147483648
-   %main_out = OpTypeStruct %v4float
-        %138 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_float_uint_2 Function %28
-          %i = OpVariable %_ptr_Function_int Function %31
-          %j = OpVariable %_ptr_Function_int Function %31
-      %x_101 = OpVariable %_ptr_Function_bool Function %36
-  %x_102_phi = OpVariable %_ptr_Function_bool Function %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %42 = OpLoad %float %41
-         %45 = OpAccessChain %_ptr_Function_float %A %int_0
-               OpStore %45 %42
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %47 = OpLoad %float %46
-         %48 = OpAccessChain %_ptr_Function_float %A %int_1
-               OpStore %48 %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %51 = OpLoad %int %50
-               OpStore %i %51
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_3
-         %59 = OpLoad %int %58
-         %60 = OpSLessThan %bool %56 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %53
-         %61 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %65 = OpLoad %int %64
-               OpStore %j %65
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-         %70 = OpLoad %int %j
-         %72 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %70 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %67
-         %75 = OpLabel
-         %78 = OpLoad %int %j
-               OpSelectionMerge %79 None
-               OpSwitch %78 %80 1 %81 0 %82
-         %81 = OpLabel
-         %83 = OpLoad %int %i
-         %84 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %85 = OpLoad %float %84
-         %86 = OpAccessChain %_ptr_Function_float %A %83
-               OpStore %86 %85
-               OpBranch %79
-         %82 = OpLabel
-         %87 = OpLoad %int %i
-         %89 = OpSLessThan %bool %int_n2147483648 %87
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-               OpBranch %68
-         %90 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %94 = OpLoad %float %93
-         %95 = OpAccessChain %_ptr_Function_float %A %92
-               OpStore %95 %94
-               OpBranch %79
-         %80 = OpLabel
-               OpBranch %79
-         %79 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-         %96 = OpLoad %int %j
-         %97 = OpIAdd %int %96 %int_1
-               OpStore %j %97
-               OpBranch %66
-         %67 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %98 = OpLoad %int %i
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %i %99
-               OpBranch %52
-         %53 = OpLabel
-        %100 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Function_float %A %101
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %105 = OpLoad %float %104
-        %106 = OpFOrdEqual %bool %103 %105
-               OpStore %x_102_phi %106
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-        %109 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Function_float %A %110
-        %112 = OpLoad %float %111
-        %113 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %114 = OpLoad %float %113
-        %115 = OpFOrdEqual %bool %112 %114
-               OpStore %x_101 %115
-        %116 = OpLoad %bool %x_101
-               OpStore %x_102_phi %116
-               OpBranch %107
-        %107 = OpLabel
-        %117 = OpLoad %bool %x_102_phi
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-        %121 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %122 = OpLoad %int %121
-        %123 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %128 = OpLoad %int %127
-        %129 = OpConvertSToF %float %122
-        %130 = OpConvertSToF %float %124
-        %131 = OpConvertSToF %float %126
-        %132 = OpConvertSToF %float %128
-        %133 = OpCompositeConstruct %v4float %129 %130 %131 %132
-               OpStore %x_GLF_color %133
-               OpBranch %118
-        %120 = OpLabel
-        %134 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %135 = OpLoad %int %134
-        %136 = OpConvertSToF %float %135
-        %137 = OpCompositeConstruct %v4float %136 %136 %136 %136
-               OpStore %x_GLF_color %137
-               OpBranch %118
-        %118 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %138
-        %141 = OpLabel
-        %142 = OpFunctionCall %void %main_1
-        %143 = OpLoad %v4float %x_GLF_color
-        %144 = OpCompositeConstruct %main_out %143
-               OpReturnValue %144
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %146 = OpLabel
-        %147 = OpFunctionCall %main_out %main_inner
-        %148 = OpCompositeExtract %v4float %147 0
-               OpStore %x_GLF_color_1_1 %148
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e999646..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,116 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A : array<f32, 2>;
-  var i : i32;
-  var j : i32;
-  var x_101 : bool;
-  var x_102_phi : bool;
-  let x_39 : f32 = x_6.x_GLF_uniform_float_values[1];
-  A[0] = x_39;
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[1];
-  A[1] = x_42;
-  let x_45 : i32 = x_9.x_GLF_uniform_int_values[0];
-  i = x_45;
-  loop {
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_9.x_GLF_uniform_int_values[3];
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    let x_56 : i32 = x_9.x_GLF_uniform_int_values[0];
-    j = x_56;
-    loop {
-      let x_61 : i32 = j;
-      let x_63 : i32 = x_9.x_GLF_uniform_int_values[2];
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      let x_66 : i32 = j;
-      switch(x_66) {
-        case 1: {
-          let x_78 : i32 = i;
-          let x_80 : f32 = x_6.x_GLF_uniform_float_values[0];
-          A[x_78] = x_80;
-        }
-        case 0: {
-          let x_70 : i32 = i;
-          if ((-2147483648 < x_70)) {
-            continue;
-          }
-          let x_74 : i32 = i;
-          let x_76 : f32 = x_6.x_GLF_uniform_float_values[2];
-          A[x_74] = x_76;
-        }
-        default: {
-        }
-      }
-
-      continuing {
-        let x_82 : i32 = j;
-        j = (x_82 + 1);
-      }
-    }
-
-    continuing {
-      let x_84 : i32 = i;
-      i = (x_84 + 1);
-    }
-  }
-  let x_87 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_89 : f32 = A[x_87];
-  let x_91 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_92 : bool = (x_89 == x_91);
-  x_102_phi = x_92;
-  if (x_92) {
-    let x_96 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_98 : f32 = A[x_96];
-    let x_100 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_101 = (x_98 == x_100);
-    x_102_phi = x_101;
-  }
-  let x_102 : bool = x_102_phi;
-  if (x_102) {
-    let x_107 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_110 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_113 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_116 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  } else {
-    let x_120 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_121 : f32 = f32(x_120);
-    x_GLF_color = vec4<f32>(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3713117..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,118 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[3];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float A[2] = (float[2])0;
-  int i = 0;
-  int j = 0;
-  bool x_101 = false;
-  bool x_102_phi = false;
-  const float x_39 = asfloat(x_6[1].x);
-  A[0] = x_39;
-  const float x_42 = asfloat(x_6[1].x);
-  A[1] = x_42;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_45 = asint(x_9[scalar_offset / 4][scalar_offset % 4]);
-  i = x_45;
-  while (true) {
-    const int x_50 = i;
-    const int x_52 = asint(x_9[3].x);
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_56 = asint(x_9[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    j = x_56;
-    while (true) {
-      const int x_61 = j;
-      const int x_63 = asint(x_9[2].x);
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      switch(j) {
-        case 1: {
-          const int x_78 = i;
-          const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-          const float x_80 = asfloat(x_6[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-          A[x_78] = x_80;
-          break;
-        }
-        case 0: {
-          if ((-2147483648 < i)) {
-            {
-              j = (j + 1);
-            }
-            continue;
-          }
-          const int x_74 = i;
-          const float x_76 = asfloat(x_6[2].x);
-          A[x_74] = x_76;
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-      {
-        j = (j + 1);
-      }
-    }
-    {
-      i = (i + 1);
-    }
-  }
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_87 = asint(x_9[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  const float x_89 = A[x_87];
-  const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-  const float x_91 = asfloat(x_6[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-  const bool x_92 = (x_89 == x_91);
-  x_102_phi = x_92;
-  if (x_92) {
-    const int x_96 = asint(x_9[1].x);
-    const float x_98 = A[x_96];
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const float x_100 = asfloat(x_6[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_101 = (x_98 == x_100);
-    x_102_phi = x_101;
-  }
-  if (x_102_phi) {
-    const int x_107 = asint(x_9[1].x);
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_110 = asint(x_9[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const uint scalar_offset_7 = ((16u * uint(0))) / 4;
-    const int x_113 = asint(x_9[scalar_offset_7 / 4][scalar_offset_7 % 4]);
-    const int x_116 = asint(x_9[1].x);
-    x_GLF_color = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    const int x_120 = asint(x_9[1].x);
-    const float x_121 = float(x_120);
-    x_GLF_color = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_4 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_4;
-}
-C:\src\tint\test\Shader@0x00000168838E90D0(52,13-21): error X3708: continue cannot be used in a switch
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.msl
deleted file mode 100644
index e487692..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,138 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_padded_array_element {
-  /* 0x0000 */ float el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[3];
-};
-struct buf1 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
-};
-struct tint_padded_array_element_1 {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad_1[12];
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ tint_padded_array_element_1 arr[4];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_2 {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_3) {
-  tint_array_wrapper_2 A = {};
-  int i = 0;
-  int j = 0;
-  bool x_101 = false;
-  bool x_102_phi = false;
-  float const x_39 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  A.arr[0] = x_39;
-  float const x_42 = x_6.x_GLF_uniform_float_values.arr[1].el;
-  A.arr[1] = x_42;
-  int const x_45 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  i = x_45;
-  while (true) {
-    int const x_50 = i;
-    int const x_52 = x_9.x_GLF_uniform_int_values.arr[3].el;
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    int const x_56 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    j = x_56;
-    while (true) {
-      int const x_61 = j;
-      int const x_63 = x_9.x_GLF_uniform_int_values.arr[2].el;
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      int const x_66 = j;
-      switch(x_66) {
-        case 1: {
-          int const x_78 = i;
-          float const x_80 = x_6.x_GLF_uniform_float_values.arr[0].el;
-          A.arr[x_78] = x_80;
-          break;
-        }
-        case 0: {
-          int const x_70 = i;
-          if (((-2147483647 - 1) < x_70)) {
-            {
-              int const x_82 = j;
-              j = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
-            }
-            continue;
-          }
-          int const x_74 = i;
-          float const x_76 = x_6.x_GLF_uniform_float_values.arr[2].el;
-          A.arr[x_74] = x_76;
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-      {
-        int const x_82 = j;
-        j = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_84 = i;
-      i = as_type<int>((as_type<uint>(x_84) + as_type<uint>(1)));
-    }
-  }
-  int const x_87 = x_9.x_GLF_uniform_int_values.arr[0].el;
-  float const x_89 = A.arr[x_87];
-  float const x_91 = x_6.x_GLF_uniform_float_values.arr[0].el;
-  bool const x_92 = (x_89 == x_91);
-  x_102_phi = x_92;
-  if (x_92) {
-    int const x_96 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_98 = A.arr[x_96];
-    float const x_100 = x_6.x_GLF_uniform_float_values.arr[0].el;
-    x_101 = (x_98 == x_100);
-    x_102_phi = x_101;
-  }
-  bool const x_102 = x_102_phi;
-  if (x_102) {
-    int const x_107 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    int const x_110 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_113 = x_9.x_GLF_uniform_int_values.arr[0].el;
-    int const x_116 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    *(tint_symbol_3) = float4(float(x_107), float(x_110), float(x_113), float(x_116));
-  } else {
-    int const x_120 = x_9.x_GLF_uniform_int_values.arr[1].el;
-    float const x_121 = float(x_120);
-    *(tint_symbol_3) = float4(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_6, constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_6, x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf1& x_6 [[buffer(0)]], constant buf0& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 37e6c5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,243 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 149
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "x_GLF_uniform_float_values"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %A "A"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %x_101 "x_101"
-               OpName %x_102_phi "x_102_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %_arr_float_uint_3 ArrayStride 16
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_4 ArrayStride 16
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_float_uint_3 = OpTypeArray %float %uint_3
-       %buf1 = OpTypeStruct %_arr_float_uint_3
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-        %int = OpTypeInt 32 1
-     %uint_4 = OpConstant %uint 4
-%_arr_int_uint_4 = OpTypeArray %int %uint_4
-       %buf0 = OpTypeStruct %_arr_int_uint_4
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
-         %28 = OpConstantNull %_arr_float_uint_2
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-%int_n2147483648 = OpConstant %int -2147483648
-   %main_out = OpTypeStruct %v4float
-        %138 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_float_uint_2 Function %28
-          %i = OpVariable %_ptr_Function_int Function %31
-          %j = OpVariable %_ptr_Function_int Function %31
-      %x_101 = OpVariable %_ptr_Function_bool Function %36
-  %x_102_phi = OpVariable %_ptr_Function_bool Function %36
-         %41 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %42 = OpLoad %float %41
-         %45 = OpAccessChain %_ptr_Function_float %A %int_0
-               OpStore %45 %42
-         %46 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_1
-         %47 = OpLoad %float %46
-         %48 = OpAccessChain %_ptr_Function_float %A %int_1
-               OpStore %48 %47
-         %50 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %51 = OpLoad %int %50
-               OpStore %i %51
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_3
-         %59 = OpLoad %int %58
-         %60 = OpSLessThan %bool %56 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %53
-         %61 = OpLabel
-         %64 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-         %65 = OpLoad %int %64
-               OpStore %j %65
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-         %70 = OpLoad %int %j
-         %72 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_2
-         %73 = OpLoad %int %72
-         %74 = OpSLessThan %bool %70 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %67
-         %75 = OpLabel
-         %78 = OpLoad %int %j
-               OpSelectionMerge %79 None
-               OpSwitch %78 %80 1 %81 0 %82
-         %81 = OpLabel
-         %83 = OpLoad %int %i
-         %84 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-         %85 = OpLoad %float %84
-         %86 = OpAccessChain %_ptr_Function_float %A %83
-               OpStore %86 %85
-               OpBranch %79
-         %82 = OpLabel
-         %87 = OpLoad %int %i
-         %89 = OpSLessThan %bool %int_n2147483648 %87
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-               OpBranch %68
-         %90 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_2
-         %94 = OpLoad %float %93
-         %95 = OpAccessChain %_ptr_Function_float %A %92
-               OpStore %95 %94
-               OpBranch %79
-         %80 = OpLabel
-               OpBranch %79
-         %79 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-         %96 = OpLoad %int %j
-         %97 = OpIAdd %int %96 %int_1
-               OpStore %j %97
-               OpBranch %66
-         %67 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %98 = OpLoad %int %i
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %i %99
-               OpBranch %52
-         %53 = OpLabel
-        %100 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %101 = OpLoad %int %100
-        %102 = OpAccessChain %_ptr_Function_float %A %101
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %105 = OpLoad %float %104
-        %106 = OpFOrdEqual %bool %103 %105
-               OpStore %x_102_phi %106
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-        %109 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Function_float %A %110
-        %112 = OpLoad %float %111
-        %113 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %int_0
-        %114 = OpLoad %float %113
-        %115 = OpFOrdEqual %bool %112 %114
-               OpStore %x_101 %115
-        %116 = OpLoad %bool %x_101
-               OpStore %x_102_phi %116
-               OpBranch %107
-        %107 = OpLabel
-        %117 = OpLoad %bool %x_102_phi
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-        %121 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %122 = OpLoad %int %121
-        %123 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_0
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %128 = OpLoad %int %127
-        %129 = OpConvertSToF %float %122
-        %130 = OpConvertSToF %float %124
-        %131 = OpConvertSToF %float %126
-        %132 = OpConvertSToF %float %128
-        %133 = OpCompositeConstruct %v4float %129 %130 %131 %132
-               OpStore %x_GLF_color %133
-               OpBranch %118
-        %120 = OpLabel
-        %134 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0 %int_1
-        %135 = OpLoad %int %134
-        %136 = OpConvertSToF %float %135
-        %137 = OpCompositeConstruct %v4float %136 %136 %136 %136
-               OpStore %x_GLF_color %137
-               OpBranch %118
-        %118 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %138
-        %141 = OpLabel
-        %142 = OpFunctionCall %void %main_1
-        %143 = OpLoad %v4float %x_GLF_color
-        %144 = OpCompositeConstruct %main_out %143
-               OpReturnValue %144
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-        %146 = OpLabel
-        %147 = OpFunctionCall %main_out %main_inner
-        %148 = OpCompositeExtract %v4float %147 0
-               OpStore %x_GLF_color_1_1 %148
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e999646..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-negative-left-shift/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,116 +0,0 @@
-type Arr = [[stride(16)]] array<f32, 3>;
-
-[[block]]
-struct buf1 {
-  x_GLF_uniform_float_values : Arr;
-};
-
-type Arr_1 = [[stride(16)]] array<i32, 4>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr_1;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A : array<f32, 2>;
-  var i : i32;
-  var j : i32;
-  var x_101 : bool;
-  var x_102_phi : bool;
-  let x_39 : f32 = x_6.x_GLF_uniform_float_values[1];
-  A[0] = x_39;
-  let x_42 : f32 = x_6.x_GLF_uniform_float_values[1];
-  A[1] = x_42;
-  let x_45 : i32 = x_9.x_GLF_uniform_int_values[0];
-  i = x_45;
-  loop {
-    let x_50 : i32 = i;
-    let x_52 : i32 = x_9.x_GLF_uniform_int_values[3];
-    if ((x_50 < x_52)) {
-    } else {
-      break;
-    }
-    let x_56 : i32 = x_9.x_GLF_uniform_int_values[0];
-    j = x_56;
-    loop {
-      let x_61 : i32 = j;
-      let x_63 : i32 = x_9.x_GLF_uniform_int_values[2];
-      if ((x_61 < x_63)) {
-      } else {
-        break;
-      }
-      let x_66 : i32 = j;
-      switch(x_66) {
-        case 1: {
-          let x_78 : i32 = i;
-          let x_80 : f32 = x_6.x_GLF_uniform_float_values[0];
-          A[x_78] = x_80;
-        }
-        case 0: {
-          let x_70 : i32 = i;
-          if ((-2147483648 < x_70)) {
-            continue;
-          }
-          let x_74 : i32 = i;
-          let x_76 : f32 = x_6.x_GLF_uniform_float_values[2];
-          A[x_74] = x_76;
-        }
-        default: {
-        }
-      }
-
-      continuing {
-        let x_82 : i32 = j;
-        j = (x_82 + 1);
-      }
-    }
-
-    continuing {
-      let x_84 : i32 = i;
-      i = (x_84 + 1);
-    }
-  }
-  let x_87 : i32 = x_9.x_GLF_uniform_int_values[0];
-  let x_89 : f32 = A[x_87];
-  let x_91 : f32 = x_6.x_GLF_uniform_float_values[0];
-  let x_92 : bool = (x_89 == x_91);
-  x_102_phi = x_92;
-  if (x_92) {
-    let x_96 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_98 : f32 = A[x_96];
-    let x_100 : f32 = x_6.x_GLF_uniform_float_values[0];
-    x_101 = (x_98 == x_100);
-    x_102_phi = x_101;
-  }
-  let x_102 : bool = x_102_phi;
-  if (x_102) {
-    let x_107 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_110 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_113 : i32 = x_9.x_GLF_uniform_int_values[0];
-    let x_116 : i32 = x_9.x_GLF_uniform_int_values[1];
-    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
-  } else {
-    let x_120 : i32 = x_9.x_GLF_uniform_int_values[1];
-    let x_121 : f32 = f32(x_120);
-    x_GLF_color = vec4<f32>(x_121, x_121, x_121, x_121);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7e9bce9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-struct S {
-  int a;
-  int b;
-  int c;
-};
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  S A[2] = (S[2])0;
-  const int x_29 = asint(x_7[1].x);
-  const int x_31 = asint(x_7[1].x);
-  const int x_33 = asint(x_7[1].x);
-  const int x_35 = asint(x_7[1].x);
-  const S tint_symbol_2 = {x_31, x_33, x_35};
-  A[x_29] = tint_symbol_2;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_39 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const int x_41 = asint(x_7[1].x);
-  const int x_43 = asint(x_7[1].x);
-  const int x_45 = asint(x_7[1].x);
-  const S tint_symbol_3 = {x_41, x_43, x_45};
-  A[x_39] = tint_symbol_3;
-  const int x_49 = asint(x_7[1].x);
-  const int x_51 = A[x_49].b;
-  const int x_53 = asint(x_7[1].x);
-  if ((x_51 == x_53)) {
-    const int x_58 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_61 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    A[clamp(x_58, 1, 2)].b = x_61;
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_64 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_66 = A[x_64].b;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_68 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  if ((x_66 == x_68)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const int x_77 = asint(x_7[1].x);
-    const int x_80 = asint(x_7[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_83 = asint(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_74), float(x_77), float(x_80), float(x_83));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_87 = asint(x_7[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_88 = float(x_87);
-    x_GLF_color = float4(x_88, x_88, x_88, x_88);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.msl
deleted file mode 100644
index 921e868..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int a;
-  int b;
-  int c;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  S arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_1 A = {};
-  int const x_29 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_31 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_33 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_35 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  S const tint_symbol_2 = {.a=x_31, .b=x_33, .c=x_35};
-  A.arr[x_29] = tint_symbol_2;
-  int const x_39 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_41 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_43 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_45 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  S const tint_symbol_3 = {.a=x_41, .b=x_43, .c=x_45};
-  A.arr[x_39] = tint_symbol_3;
-  int const x_49 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_51 = A.arr[x_49].b;
-  int const x_53 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_51 == x_53)) {
-    int const x_58 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    A.arr[clamp(x_58, 1, 2)].b = x_61;
-  }
-  int const x_64 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_66 = A.arr[x_64].b;
-  int const x_68 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_66 == x_68)) {
-    int const x_74 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_77 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_80 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_83 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_74), float(x_77), float(x_80), float(x_83));
-  } else {
-    int const x_87 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_88 = float(x_87);
-    *(tint_symbol_5) = float4(x_88, x_88, x_88, x_88);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_6) {
-  main_1(x_7, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f542eb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,161 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 107
-; Schema: 0
-               OpCapability Shader
-         %66 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "a"
-               OpMemberName %S 1 "b"
-               OpMemberName %S 2 "c"
-               OpName %A "A"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_S_uint_2 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-          %S = OpTypeStruct %int %int %int
-%_arr_S_uint_2 = OpTypeArray %S %uint_2
-%_ptr_Function__arr_S_uint_2 = OpTypePointer Function %_arr_S_uint_2
-         %23 = OpConstantNull %_arr_S_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_S = OpTypePointer Function %S
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %96 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_S_uint_2 Function %23
-         %27 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %30 = OpLoad %int %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %32 = OpLoad %int %31
-         %33 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %36 = OpAccessChain %_ptr_Function_S %A %28
-         %37 = OpCompositeConstruct %S %30 %32 %34
-               OpStore %36 %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %41 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Function_S %A %40
-         %48 = OpCompositeConstruct %S %42 %44 %46
-               OpStore %47 %48
-         %49 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %53 = OpAccessChain %_ptr_Function_int %A %50 %uint_1
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpIEqual %bool %54 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %59
-         %60 = OpLabel
-         %61 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpExtInst %int %66 SClamp %62 %int_1 %int_2
-         %68 = OpAccessChain %_ptr_Function_int %A %65 %uint_1
-               OpStore %68 %64
-               OpBranch %59
-         %59 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Function_int %A %70 %uint_1
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %74 = OpLoad %int %73
-         %75 = OpIEqual %bool %72 %74
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %80
-         %88 = OpConvertSToF %float %82
-         %89 = OpConvertSToF %float %84
-         %90 = OpConvertSToF %float %86
-         %91 = OpCompositeConstruct %v4float %87 %88 %89 %90
-               OpStore %x_GLF_color %91
-               OpBranch %76
-         %78 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %94 = OpConvertSToF %float %93
-         %95 = OpCompositeConstruct %v4float %94 %94 %94 %94
-               OpStore %x_GLF_color %95
-               OpBranch %76
-         %76 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %96
-         %99 = OpLabel
-        %100 = OpFunctionCall %void %main_1
-        %101 = OpLoad %v4float %x_GLF_color
-        %102 = OpCompositeConstruct %main_out %101
-               OpReturnValue %102
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %104 = OpLabel
-        %105 = OpFunctionCall %main_out %main_inner
-        %106 = OpCompositeExtract %v4float %105 0
-               OpStore %x_GLF_color_1_1 %106
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index af4102c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-struct S {
-  a : i32;
-  b : i32;
-  c : i32;
-};
-
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A : array<S, 2>;
-  let x_29 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_31 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_33 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_35 : i32 = x_7.x_GLF_uniform_int_values[1];
-  A[x_29] = S(x_31, x_33, x_35);
-  let x_39 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_41 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_43 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_45 : i32 = x_7.x_GLF_uniform_int_values[1];
-  A[x_39] = S(x_41, x_43, x_45);
-  let x_49 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_51 : i32 = A[x_49].b;
-  let x_53 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_51 == x_53)) {
-    let x_58 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_7.x_GLF_uniform_int_values[0];
-    A[clamp(x_58, 1, 2)].b = x_61;
-  }
-  let x_64 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_66 : i32 = A[x_64].b;
-  let x_68 : i32 = x_7.x_GLF_uniform_int_values[0];
-  if ((x_66 == x_68)) {
-    let x_74 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_77 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_80 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_83 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_74), f32(x_77), f32(x_80), f32(x_83));
-  } else {
-    let x_87 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_88 : f32 = f32(x_87);
-    x_GLF_color = vec4<f32>(x_88, x_88, x_88, x_88);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7e9bce9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-struct S {
-  int a;
-  int b;
-  int c;
-};
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  S A[2] = (S[2])0;
-  const int x_29 = asint(x_7[1].x);
-  const int x_31 = asint(x_7[1].x);
-  const int x_33 = asint(x_7[1].x);
-  const int x_35 = asint(x_7[1].x);
-  const S tint_symbol_2 = {x_31, x_33, x_35};
-  A[x_29] = tint_symbol_2;
-  const uint scalar_offset = ((16u * uint(0))) / 4;
-  const int x_39 = asint(x_7[scalar_offset / 4][scalar_offset % 4]);
-  const int x_41 = asint(x_7[1].x);
-  const int x_43 = asint(x_7[1].x);
-  const int x_45 = asint(x_7[1].x);
-  const S tint_symbol_3 = {x_41, x_43, x_45};
-  A[x_39] = tint_symbol_3;
-  const int x_49 = asint(x_7[1].x);
-  const int x_51 = A[x_49].b;
-  const int x_53 = asint(x_7[1].x);
-  if ((x_51 == x_53)) {
-    const int x_58 = asint(x_7[1].x);
-    const uint scalar_offset_1 = ((16u * uint(0))) / 4;
-    const int x_61 = asint(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
-    A[clamp(x_58, 1, 2)].b = x_61;
-  }
-  const uint scalar_offset_2 = ((16u * uint(0))) / 4;
-  const int x_64 = asint(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
-  const int x_66 = A[x_64].b;
-  const uint scalar_offset_3 = ((16u * uint(0))) / 4;
-  const int x_68 = asint(x_7[scalar_offset_3 / 4][scalar_offset_3 % 4]);
-  if ((x_66 == x_68)) {
-    const uint scalar_offset_4 = ((16u * uint(0))) / 4;
-    const int x_74 = asint(x_7[scalar_offset_4 / 4][scalar_offset_4 % 4]);
-    const int x_77 = asint(x_7[1].x);
-    const int x_80 = asint(x_7[1].x);
-    const uint scalar_offset_5 = ((16u * uint(0))) / 4;
-    const int x_83 = asint(x_7[scalar_offset_5 / 4][scalar_offset_5 % 4]);
-    x_GLF_color = float4(float(x_74), float(x_77), float(x_80), float(x_83));
-  } else {
-    const uint scalar_offset_6 = ((16u * uint(0))) / 4;
-    const int x_87 = asint(x_7[scalar_offset_6 / 4][scalar_offset_6 % 4]);
-    const float x_88 = float(x_87);
-    x_GLF_color = float4(x_88, x_88, x_88, x_88);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.msl
deleted file mode 100644
index 921e868..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int a;
-  int b;
-  int c;
-};
-struct tint_padded_array_element {
-  /* 0x0000 */ int el;
-  /* 0x0004 */ int8_t tint_pad[12];
-};
-struct tint_array_wrapper {
-  /* 0x0000 */ tint_padded_array_element arr[2];
-};
-struct buf0 {
-  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_int_values;
-};
-struct tint_array_wrapper_1 {
-  S arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  tint_array_wrapper_1 A = {};
-  int const x_29 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_31 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_33 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_35 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  S const tint_symbol_2 = {.a=x_31, .b=x_33, .c=x_35};
-  A.arr[x_29] = tint_symbol_2;
-  int const x_39 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_41 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_43 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_45 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  S const tint_symbol_3 = {.a=x_41, .b=x_43, .c=x_45};
-  A.arr[x_39] = tint_symbol_3;
-  int const x_49 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  int const x_51 = A.arr[x_49].b;
-  int const x_53 = x_7.x_GLF_uniform_int_values.arr[1].el;
-  if ((x_51 == x_53)) {
-    int const x_58 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_61 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    A.arr[clamp(x_58, 1, 2)].b = x_61;
-  }
-  int const x_64 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  int const x_66 = A.arr[x_64].b;
-  int const x_68 = x_7.x_GLF_uniform_int_values.arr[0].el;
-  if ((x_66 == x_68)) {
-    int const x_74 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    int const x_77 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_80 = x_7.x_GLF_uniform_int_values.arr[1].el;
-    int const x_83 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    *(tint_symbol_5) = float4(float(x_74), float(x_77), float(x_80), float(x_83));
-  } else {
-    int const x_87 = x_7.x_GLF_uniform_int_values.arr[0].el;
-    float const x_88 = float(x_87);
-    *(tint_symbol_5) = float4(x_88, x_88, x_88, x_88);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_6) {
-  main_1(x_7, tint_symbol_6);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_7));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f542eb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,161 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 107
-; Schema: 0
-               OpCapability Shader
-         %66 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "x_GLF_uniform_int_values"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "a"
-               OpMemberName %S 1 "b"
-               OpMemberName %S 2 "c"
-               OpName %A "A"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %_arr_int_uint_2 ArrayStride 16
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 4
-               OpMemberDecorate %S 2 Offset 8
-               OpDecorate %_arr_S_uint_2 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-       %buf0 = OpTypeStruct %_arr_int_uint_2
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-          %S = OpTypeStruct %int %int %int
-%_arr_S_uint_2 = OpTypeArray %S %uint_2
-%_ptr_Function__arr_S_uint_2 = OpTypePointer Function %_arr_S_uint_2
-         %23 = OpConstantNull %_arr_S_uint_2
-     %uint_0 = OpConstant %uint 0
-      %int_1 = OpConstant %int 1
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-%_ptr_Function_S = OpTypePointer Function %S
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-       %bool = OpTypeBool
-      %int_2 = OpConstant %int 2
-   %main_out = OpTypeStruct %v4float
-         %96 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_S_uint_2 Function %23
-         %27 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %30 = OpLoad %int %29
-         %31 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %32 = OpLoad %int %31
-         %33 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %34 = OpLoad %int %33
-         %36 = OpAccessChain %_ptr_Function_S %A %28
-         %37 = OpCompositeConstruct %S %30 %32 %34
-               OpStore %36 %37
-         %39 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %40 = OpLoad %int %39
-         %41 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %42 = OpLoad %int %41
-         %43 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %44 = OpLoad %int %43
-         %45 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Function_S %A %40
-         %48 = OpCompositeConstruct %S %42 %44 %46
-               OpStore %47 %48
-         %49 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %50 = OpLoad %int %49
-         %53 = OpAccessChain %_ptr_Function_int %A %50 %uint_1
-         %54 = OpLoad %int %53
-         %55 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %56 = OpLoad %int %55
-         %57 = OpIEqual %bool %54 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %59
-         %60 = OpLabel
-         %61 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %62 = OpLoad %int %61
-         %63 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %64 = OpLoad %int %63
-         %65 = OpExtInst %int %66 SClamp %62 %int_1 %int_2
-         %68 = OpAccessChain %_ptr_Function_int %A %65 %uint_1
-               OpStore %68 %64
-               OpBranch %59
-         %59 = OpLabel
-         %69 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %70 = OpLoad %int %69
-         %71 = OpAccessChain %_ptr_Function_int %A %70 %uint_1
-         %72 = OpLoad %int %71
-         %73 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %74 = OpLoad %int %73
-         %75 = OpIEqual %bool %72 %74
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-         %79 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_1
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %86 = OpLoad %int %85
-         %87 = OpConvertSToF %float %80
-         %88 = OpConvertSToF %float %82
-         %89 = OpConvertSToF %float %84
-         %90 = OpConvertSToF %float %86
-         %91 = OpCompositeConstruct %v4float %87 %88 %89 %90
-               OpStore %x_GLF_color %91
-               OpBranch %76
-         %78 = OpLabel
-         %92 = OpAccessChain %_ptr_Uniform_int %x_7 %uint_0 %int_0
-         %93 = OpLoad %int %92
-         %94 = OpConvertSToF %float %93
-         %95 = OpCompositeConstruct %v4float %94 %94 %94 %94
-               OpStore %x_GLF_color %95
-               OpBranch %76
-         %76 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %96
-         %99 = OpLabel
-        %100 = OpFunctionCall %void %main_1
-        %101 = OpLoad %v4float %x_GLF_color
-        %102 = OpCompositeConstruct %main_out %101
-               OpReturnValue %102
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %104 = OpLabel
-        %105 = OpFunctionCall %main_out %main_inner
-        %106 = OpCompositeExtract %v4float %105 0
-               OpStore %x_GLF_color_1_1 %106
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index af4102c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-x86-isel-lowering-selection-dag-struct-array-clamp-index/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,64 +0,0 @@
-struct S {
-  a : i32;
-  b : i32;
-  c : i32;
-};
-
-type Arr = [[stride(16)]] array<i32, 2>;
-
-[[block]]
-struct buf0 {
-  x_GLF_uniform_int_values : Arr;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var A : array<S, 2>;
-  let x_29 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_31 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_33 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_35 : i32 = x_7.x_GLF_uniform_int_values[1];
-  A[x_29] = S(x_31, x_33, x_35);
-  let x_39 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_41 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_43 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_45 : i32 = x_7.x_GLF_uniform_int_values[1];
-  A[x_39] = S(x_41, x_43, x_45);
-  let x_49 : i32 = x_7.x_GLF_uniform_int_values[1];
-  let x_51 : i32 = A[x_49].b;
-  let x_53 : i32 = x_7.x_GLF_uniform_int_values[1];
-  if ((x_51 == x_53)) {
-    let x_58 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_61 : i32 = x_7.x_GLF_uniform_int_values[0];
-    A[clamp(x_58, 1, 2)].b = x_61;
-  }
-  let x_64 : i32 = x_7.x_GLF_uniform_int_values[0];
-  let x_66 : i32 = A[x_64].b;
-  let x_68 : i32 = x_7.x_GLF_uniform_int_values[0];
-  if ((x_66 == x_68)) {
-    let x_74 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_77 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_80 : i32 = x_7.x_GLF_uniform_int_values[1];
-    let x_83 : i32 = x_7.x_GLF_uniform_int_values[0];
-    x_GLF_color = vec4<f32>(f32(x_74), f32(x_77), f32(x_80), f32(x_83));
-  } else {
-    let x_87 : i32 = x_7.x_GLF_uniform_int_values[0];
-    let x_88 : f32 = f32(x_87);
-    x_GLF_color = vec4<f32>(x_88, x_88, x_88, x_88);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8c431f0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,94 +0,0 @@
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v = float2(0.0f, 0.0f);
-  float floats[9] = (float[9])0;
-  int one = 0;
-  int i = 0;
-  bool alwaysFalse = false;
-  v = float2(0.0f, 0.0f);
-  floats[1] = 0.0f;
-  const float x_46 = asfloat(x_9[0].y);
-  one = int(x_46);
-  while (true) {
-    i = 0;
-    {
-      for(; (i < one); i = (i + 1)) {
-        if ((i == 0)) {
-          const float x_65 = asfloat(x_9[0].x);
-          const float x_67 = asfloat(x_9[0].y);
-          alwaysFalse = (x_65 > x_67);
-          if (!(alwaysFalse)) {
-            floats[one] = 1.0f;
-            x_GLF_color = float4(1.0f, 1.0f, 0.0f, 1.0f);
-          }
-          set_float2(v, one, 1.0f);
-          if (alwaysFalse) {
-            discard;
-          }
-          const float x_81 = asfloat(x_9[0].y);
-          if ((x_81 < 0.0f)) {
-            x_GLF_color = float4(0.0f, 1.0f, 0.0f, 1.0f);
-          }
-        }
-      }
-    }
-    {
-      if ((one < 0)) {
-      } else {
-        break;
-      }
-    }
-  }
-  bool x_102 = false;
-  bool x_103_phi = false;
-  const float x_90 = gl_FragCoord.y;
-  if ((x_90 >= 0.0f)) {
-    const float x_96 = v.y;
-    const bool x_97 = (x_96 == 1.0f);
-    x_103_phi = x_97;
-    if (x_97) {
-      const float x_101 = floats[1];
-      x_102 = (x_101 == 1.0f);
-      x_103_phi = x_102;
-    }
-    if (x_103_phi) {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index e212452..0000000
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 v = 0.0f;
-  tint_array_wrapper floats = {};
-  int one = 0;
-  int i = 0;
-  bool alwaysFalse = false;
-  v = float2(0.0f, 0.0f);
-  floats.arr[1] = 0.0f;
-  float const x_46 = x_9.injectionSwitch.y;
-  one = int(x_46);
-  while (true) {
-    i = 0;
-    while (true) {
-      int const x_56 = i;
-      int const x_57 = one;
-      if ((x_56 < x_57)) {
-      } else {
-        break;
-      }
-      int const x_60 = i;
-      if ((x_60 == 0)) {
-        float const x_65 = x_9.injectionSwitch.x;
-        float const x_67 = x_9.injectionSwitch.y;
-        alwaysFalse = (x_65 > x_67);
-        bool const x_69 = alwaysFalse;
-        if (!(x_69)) {
-          int const x_73 = one;
-          floats.arr[x_73] = 1.0f;
-          *(tint_symbol_3) = float4(1.0f, 1.0f, 0.0f, 1.0f);
-        }
-        int const x_75 = one;
-        v[x_75] = 1.0f;
-        bool const x_77 = alwaysFalse;
-        if (x_77) {
-          discard_fragment();
-        }
-        float const x_81 = x_9.injectionSwitch.y;
-        if ((x_81 < 0.0f)) {
-          *(tint_symbol_3) = float4(0.0f, 1.0f, 0.0f, 1.0f);
-        }
-      }
-      {
-        int const x_85 = i;
-        i = as_type<int>((as_type<uint>(x_85) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_87 = one;
-      if ((x_87 < 0)) {
-      } else {
-        break;
-      }
-    }
-  }
-  bool x_102 = false;
-  bool x_103_phi = false;
-  float const x_90 = (*(tint_symbol_4)).y;
-  if ((x_90 >= 0.0f)) {
-    float const x_96 = v.y;
-    bool const x_97 = (x_96 == 1.0f);
-    x_103_phi = x_97;
-    if (x_97) {
-      float const x_101 = floats.arr[1];
-      x_102 = (x_101 == 1.0f);
-      x_103_phi = x_102;
-    }
-    bool const x_103 = x_103_phi;
-    if (x_103) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 7e05fdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,227 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 131
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %floats "floats"
-               OpName %one "one"
-               OpName %i "i"
-               OpName %alwaysFalse "alwaysFalse"
-               OpName %x_102 "x_102"
-               OpName %x_103_phi "x_103_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %21 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %27 = OpConstantNull %_arr_float_uint_9
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v2float %float_0 %float_0
-      %int_1 = OpConstant %int 1
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-         %79 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %90 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-%_ptr_Private_float = OpTypePointer Private %float
-        %116 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %117 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %118 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %21
-     %floats = OpVariable %_ptr_Function__arr_float_uint_9 Function %27
-        %one = OpVariable %_ptr_Function_int Function %31
-          %i = OpVariable %_ptr_Function_int Function %31
-%alwaysFalse = OpVariable %_ptr_Function_bool Function %36
-      %x_102 = OpVariable %_ptr_Function_bool Function %36
-  %x_103_phi = OpVariable %_ptr_Function_bool Function %36
-               OpStore %v %38
-         %41 = OpAccessChain %_ptr_Function_float %floats %int_1
-               OpStore %41 %float_0
-         %45 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %46 = OpLoad %float %45
-         %47 = OpConvertFToS %int %46
-               OpStore %one %47
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-               OpStore %i %int_0
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpLoad %int %i
-         %58 = OpLoad %int %one
-         %59 = OpSLessThan %bool %57 %58
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %54
-         %60 = OpLabel
-         %63 = OpLoad %int %i
-         %64 = OpIEqual %bool %63 %int_0
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-         %67 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %68 = OpLoad %float %67
-         %69 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %70 = OpLoad %float %69
-         %71 = OpFOrdGreaterThan %bool %68 %70
-               OpStore %alwaysFalse %71
-         %72 = OpLoad %bool %alwaysFalse
-         %73 = OpLogicalNot %bool %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %74
-         %75 = OpLabel
-         %76 = OpLoad %int %one
-         %77 = OpAccessChain %_ptr_Function_float %floats %76
-               OpStore %77 %float_1
-               OpStore %x_GLF_color %79
-               OpBranch %74
-         %74 = OpLabel
-         %80 = OpLoad %int %one
-         %81 = OpAccessChain %_ptr_Function_float %v %80
-               OpStore %81 %float_1
-         %82 = OpLoad %bool %alwaysFalse
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-               OpKill
-         %83 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %86 = OpLoad %float %85
-         %87 = OpFOrdLessThan %bool %86 %float_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpStore %x_GLF_color %90
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %91 = OpLoad %int %i
-         %92 = OpIAdd %int %91 %int_1
-               OpStore %i %92
-               OpBranch %53
-         %54 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-         %93 = OpLoad %int %one
-         %94 = OpSLessThan %bool %93 %int_0
-               OpBranchConditional %94 %48 %49
-         %49 = OpLabel
-         %98 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %99 = OpLoad %float %98
-        %100 = OpFOrdGreaterThanEqual %bool %99 %float_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_float %v %uint_1
-        %105 = OpLoad %float %104
-        %106 = OpFOrdEqual %bool %105 %float_1
-               OpStore %x_103_phi %106
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-        %109 = OpAccessChain %_ptr_Function_float %floats %int_1
-        %110 = OpLoad %float %109
-        %111 = OpFOrdEqual %bool %110 %float_1
-               OpStore %x_102 %111
-        %112 = OpLoad %bool %x_102
-               OpStore %x_103_phi %112
-               OpBranch %107
-        %107 = OpLabel
-        %113 = OpLoad %bool %x_103_phi
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-               OpStore %x_GLF_color %116
-               OpBranch %114
-        %114 = OpLabel
-               OpBranch %101
-        %103 = OpLabel
-               OpStore %x_GLF_color %117
-               OpBranch %101
-        %101 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %118
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %122 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %127 = OpLabel
-        %129 = OpLoad %v4float %gl_FragCoord_param_1
-        %128 = OpFunctionCall %main_out %main_inner %129
-        %130 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %130
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6d6d467..0000000
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,100 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var v : vec2<f32>;
-  var floats : array<f32, 9>;
-  var one : i32;
-  var i : i32;
-  var alwaysFalse : bool;
-  v = vec2<f32>(0.0, 0.0);
-  floats[1] = 0.0;
-  let x_46 : f32 = x_9.injectionSwitch.y;
-  one = i32(x_46);
-  loop {
-    i = 0;
-    loop {
-      let x_56 : i32 = i;
-      let x_57 : i32 = one;
-      if ((x_56 < x_57)) {
-      } else {
-        break;
-      }
-      let x_60 : i32 = i;
-      if ((x_60 == 0)) {
-        let x_65 : f32 = x_9.injectionSwitch.x;
-        let x_67 : f32 = x_9.injectionSwitch.y;
-        alwaysFalse = (x_65 > x_67);
-        let x_69 : bool = alwaysFalse;
-        if (!(x_69)) {
-          let x_73 : i32 = one;
-          floats[x_73] = 1.0;
-          x_GLF_color = vec4<f32>(1.0, 1.0, 0.0, 1.0);
-        }
-        let x_75 : i32 = one;
-        v[x_75] = 1.0;
-        let x_77 : bool = alwaysFalse;
-        if (x_77) {
-          discard;
-        }
-        let x_81 : f32 = x_9.injectionSwitch.y;
-        if ((x_81 < 0.0)) {
-          x_GLF_color = vec4<f32>(0.0, 1.0, 0.0, 1.0);
-        }
-      }
-
-      continuing {
-        let x_85 : i32 = i;
-        i = (x_85 + 1);
-      }
-    }
-
-    continuing {
-      let x_87 : i32 = one;
-      if ((x_87 < 0)) {
-      } else {
-        break;
-      }
-    }
-  }
-  var x_102 : bool;
-  var x_103_phi : bool;
-  let x_90 : f32 = gl_FragCoord.y;
-  if ((x_90 >= 0.0)) {
-    let x_96 : f32 = v.y;
-    let x_97 : bool = (x_96 == 1.0);
-    x_103_phi = x_97;
-    if (x_97) {
-      let x_101 : f32 = floats[1];
-      x_102 = (x_101 == 1.0);
-      x_103_phi = x_102;
-    }
-    let x_103 : bool = x_103_phi;
-    if (x_103) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 8c431f0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,94 +0,0 @@
-void set_float2(inout float2 vec, int idx, float val) {
-  vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
-}
-
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 v = float2(0.0f, 0.0f);
-  float floats[9] = (float[9])0;
-  int one = 0;
-  int i = 0;
-  bool alwaysFalse = false;
-  v = float2(0.0f, 0.0f);
-  floats[1] = 0.0f;
-  const float x_46 = asfloat(x_9[0].y);
-  one = int(x_46);
-  while (true) {
-    i = 0;
-    {
-      for(; (i < one); i = (i + 1)) {
-        if ((i == 0)) {
-          const float x_65 = asfloat(x_9[0].x);
-          const float x_67 = asfloat(x_9[0].y);
-          alwaysFalse = (x_65 > x_67);
-          if (!(alwaysFalse)) {
-            floats[one] = 1.0f;
-            x_GLF_color = float4(1.0f, 1.0f, 0.0f, 1.0f);
-          }
-          set_float2(v, one, 1.0f);
-          if (alwaysFalse) {
-            discard;
-          }
-          const float x_81 = asfloat(x_9[0].y);
-          if ((x_81 < 0.0f)) {
-            x_GLF_color = float4(0.0f, 1.0f, 0.0f, 1.0f);
-          }
-        }
-      }
-    }
-    {
-      if ((one < 0)) {
-      } else {
-        break;
-      }
-    }
-  }
-  bool x_102 = false;
-  bool x_103_phi = false;
-  const float x_90 = gl_FragCoord.y;
-  if ((x_90 >= 0.0f)) {
-    const float x_96 = v.y;
-    const bool x_97 = (x_96 == 1.0f);
-    x_103_phi = x_97;
-    if (x_97) {
-      const float x_101 = floats[1];
-      x_102 = (x_101 == 1.0f);
-      x_103_phi = x_102;
-    }
-    if (x_103_phi) {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index e212452..0000000
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,108 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 v = 0.0f;
-  tint_array_wrapper floats = {};
-  int one = 0;
-  int i = 0;
-  bool alwaysFalse = false;
-  v = float2(0.0f, 0.0f);
-  floats.arr[1] = 0.0f;
-  float const x_46 = x_9.injectionSwitch.y;
-  one = int(x_46);
-  while (true) {
-    i = 0;
-    while (true) {
-      int const x_56 = i;
-      int const x_57 = one;
-      if ((x_56 < x_57)) {
-      } else {
-        break;
-      }
-      int const x_60 = i;
-      if ((x_60 == 0)) {
-        float const x_65 = x_9.injectionSwitch.x;
-        float const x_67 = x_9.injectionSwitch.y;
-        alwaysFalse = (x_65 > x_67);
-        bool const x_69 = alwaysFalse;
-        if (!(x_69)) {
-          int const x_73 = one;
-          floats.arr[x_73] = 1.0f;
-          *(tint_symbol_3) = float4(1.0f, 1.0f, 0.0f, 1.0f);
-        }
-        int const x_75 = one;
-        v[x_75] = 1.0f;
-        bool const x_77 = alwaysFalse;
-        if (x_77) {
-          discard_fragment();
-        }
-        float const x_81 = x_9.injectionSwitch.y;
-        if ((x_81 < 0.0f)) {
-          *(tint_symbol_3) = float4(0.0f, 1.0f, 0.0f, 1.0f);
-        }
-      }
-      {
-        int const x_85 = i;
-        i = as_type<int>((as_type<uint>(x_85) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_87 = one;
-      if ((x_87 < 0)) {
-      } else {
-        break;
-      }
-    }
-  }
-  bool x_102 = false;
-  bool x_103_phi = false;
-  float const x_90 = (*(tint_symbol_4)).y;
-  if ((x_90 >= 0.0f)) {
-    float const x_96 = v.y;
-    bool const x_97 = (x_96 == 1.0f);
-    x_103_phi = x_97;
-    if (x_97) {
-      float const x_101 = floats.arr[1];
-      x_102 = (x_101 == 1.0f);
-      x_103_phi = x_102;
-    }
-    bool const x_103 = x_103_phi;
-    if (x_103) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 7e05fdd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,227 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 131
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %v "v"
-               OpName %floats "floats"
-               OpName %one "one"
-               OpName %i "i"
-               OpName %alwaysFalse "alwaysFalse"
-               OpName %x_102 "x_102"
-               OpName %x_103_phi "x_103_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %21 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %27 = OpConstantNull %_arr_float_uint_9
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %36 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v2float %float_0 %float_0
-      %int_1 = OpConstant %int 1
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-         %79 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %90 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-%_ptr_Private_float = OpTypePointer Private %float
-        %116 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %117 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %118 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %v = OpVariable %_ptr_Function_v2float Function %21
-     %floats = OpVariable %_ptr_Function__arr_float_uint_9 Function %27
-        %one = OpVariable %_ptr_Function_int Function %31
-          %i = OpVariable %_ptr_Function_int Function %31
-%alwaysFalse = OpVariable %_ptr_Function_bool Function %36
-      %x_102 = OpVariable %_ptr_Function_bool Function %36
-  %x_103_phi = OpVariable %_ptr_Function_bool Function %36
-               OpStore %v %38
-         %41 = OpAccessChain %_ptr_Function_float %floats %int_1
-               OpStore %41 %float_0
-         %45 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %46 = OpLoad %float %45
-         %47 = OpConvertFToS %int %46
-               OpStore %one %47
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-               OpStore %i %int_0
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpLoad %int %i
-         %58 = OpLoad %int %one
-         %59 = OpSLessThan %bool %57 %58
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %54
-         %60 = OpLabel
-         %63 = OpLoad %int %i
-         %64 = OpIEqual %bool %63 %int_0
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-         %67 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %68 = OpLoad %float %67
-         %69 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %70 = OpLoad %float %69
-         %71 = OpFOrdGreaterThan %bool %68 %70
-               OpStore %alwaysFalse %71
-         %72 = OpLoad %bool %alwaysFalse
-         %73 = OpLogicalNot %bool %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %74
-         %75 = OpLabel
-         %76 = OpLoad %int %one
-         %77 = OpAccessChain %_ptr_Function_float %floats %76
-               OpStore %77 %float_1
-               OpStore %x_GLF_color %79
-               OpBranch %74
-         %74 = OpLabel
-         %80 = OpLoad %int %one
-         %81 = OpAccessChain %_ptr_Function_float %v %80
-               OpStore %81 %float_1
-         %82 = OpLoad %bool %alwaysFalse
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-               OpKill
-         %83 = OpLabel
-         %85 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %86 = OpLoad %float %85
-         %87 = OpFOrdLessThan %bool %86 %float_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpStore %x_GLF_color %90
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %91 = OpLoad %int %i
-         %92 = OpIAdd %int %91 %int_1
-               OpStore %i %92
-               OpBranch %53
-         %54 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-         %93 = OpLoad %int %one
-         %94 = OpSLessThan %bool %93 %int_0
-               OpBranchConditional %94 %48 %49
-         %49 = OpLabel
-         %98 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %99 = OpLoad %float %98
-        %100 = OpFOrdGreaterThanEqual %bool %99 %float_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_float %v %uint_1
-        %105 = OpLoad %float %104
-        %106 = OpFOrdEqual %bool %105 %float_1
-               OpStore %x_103_phi %106
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-        %109 = OpAccessChain %_ptr_Function_float %floats %int_1
-        %110 = OpLoad %float %109
-        %111 = OpFOrdEqual %bool %110 %float_1
-               OpStore %x_102 %111
-        %112 = OpLoad %bool %x_102
-               OpStore %x_103_phi %112
-               OpBranch %107
-        %107 = OpLabel
-        %113 = OpLoad %bool %x_103_phi
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-               OpStore %x_GLF_color %116
-               OpBranch %114
-        %114 = OpLabel
-               OpBranch %101
-        %103 = OpLabel
-               OpStore %x_GLF_color %117
-               OpBranch %101
-        %101 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %118
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %122 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %123 = OpFunctionCall %void %main_1
-        %124 = OpLoad %v4float %x_GLF_color
-        %125 = OpCompositeConstruct %main_out %124
-               OpReturnValue %125
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %127 = OpLabel
-        %129 = OpLoad %v4float %gl_FragCoord_param_1
-        %128 = OpFunctionCall %main_out %main_inner %129
-        %130 = OpCompositeExtract %v4float %128 0
-               OpStore %x_GLF_color_1_1 %130
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6d6d467..0000000
--- a/test/vk-gl-cts/graphicsfuzz/create-color-in-do-while-for-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,100 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var v : vec2<f32>;
-  var floats : array<f32, 9>;
-  var one : i32;
-  var i : i32;
-  var alwaysFalse : bool;
-  v = vec2<f32>(0.0, 0.0);
-  floats[1] = 0.0;
-  let x_46 : f32 = x_9.injectionSwitch.y;
-  one = i32(x_46);
-  loop {
-    i = 0;
-    loop {
-      let x_56 : i32 = i;
-      let x_57 : i32 = one;
-      if ((x_56 < x_57)) {
-      } else {
-        break;
-      }
-      let x_60 : i32 = i;
-      if ((x_60 == 0)) {
-        let x_65 : f32 = x_9.injectionSwitch.x;
-        let x_67 : f32 = x_9.injectionSwitch.y;
-        alwaysFalse = (x_65 > x_67);
-        let x_69 : bool = alwaysFalse;
-        if (!(x_69)) {
-          let x_73 : i32 = one;
-          floats[x_73] = 1.0;
-          x_GLF_color = vec4<f32>(1.0, 1.0, 0.0, 1.0);
-        }
-        let x_75 : i32 = one;
-        v[x_75] = 1.0;
-        let x_77 : bool = alwaysFalse;
-        if (x_77) {
-          discard;
-        }
-        let x_81 : f32 = x_9.injectionSwitch.y;
-        if ((x_81 < 0.0)) {
-          x_GLF_color = vec4<f32>(0.0, 1.0, 0.0, 1.0);
-        }
-      }
-
-      continuing {
-        let x_85 : i32 = i;
-        i = (x_85 + 1);
-      }
-    }
-
-    continuing {
-      let x_87 : i32 = one;
-      if ((x_87 < 0)) {
-      } else {
-        break;
-      }
-    }
-  }
-  var x_102 : bool;
-  var x_103_phi : bool;
-  let x_90 : f32 = gl_FragCoord.y;
-  if ((x_90 >= 0.0)) {
-    let x_96 : f32 = v.y;
-    let x_97 : bool = (x_96 == 1.0);
-    x_103_phi = x_97;
-    if (x_97) {
-      let x_101 : f32 = floats[1];
-      x_102 = (x_101 == 1.0);
-      x_103_phi = x_102;
-    }
-    let x_103 : bool = x_103_phi;
-    if (x_103) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a18cdf6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,74 +0,0 @@
-RWByteAddressBuffer x_4 : register(u0, space0);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  int i = 0;
-  float GLF_live3s = 0.0f;
-  int i_1 = 0;
-  int z = 0;
-  x_4.Store(0u, asuint(42));
-  const float x_37 = asfloat(x_6[0].x);
-  const float x_39 = asfloat(x_6[0].y);
-  if ((x_37 > x_39)) {
-    GroupMemoryBarrierWithGroupSync();
-  }
-  const float x_44 = asfloat(x_6[0].x);
-  const float x_46 = asfloat(x_6[0].y);
-  if ((x_44 > x_46)) {
-    GroupMemoryBarrierWithGroupSync();
-  }
-  const float x_51 = asfloat(x_6[0].y);
-  i = int(x_51);
-  {
-    for(; (i > 0); i = (i - 1)) {
-      GroupMemoryBarrierWithGroupSync();
-    }
-  }
-  GLF_live3s = 0.0f;
-  while (true) {
-    i_1 = 1;
-    {
-      for(; (i_1 < 2); i_1 = (i_1 + 1)) {
-        const float x_74 = asfloat(x_6[0].x);
-        if ((x_74 > 1.0f)) {
-          GroupMemoryBarrierWithGroupSync();
-        }
-        const float x_79 = asfloat(x_6[0].x);
-        const float x_81 = asfloat(x_6[0].y);
-        if ((x_79 > x_81)) {
-          GroupMemoryBarrierWithGroupSync();
-        }
-        const float x_86 = asfloat(x_6[0].y);
-        z = int(x_86);
-        {
-          for(; (z > 0); z = (z - 1)) {
-            GLF_live3s = (GLF_live3s + 1.0f);
-          }
-        }
-        if ((i_1 >= 1)) {
-          const float x_104 = asfloat(x_6[0].x);
-          if ((x_104 > 1.0f)) {
-            GroupMemoryBarrierWithGroupSync();
-          }
-        }
-      }
-    }
-    {
-      const float x_111 = asfloat(x_6[0].x);
-      const float x_113 = asfloat(x_6[0].y);
-      if ((x_111 > x_113)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5447590..0000000
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct theSSBO {
-  /* 0x0000 */ int out_data;
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-
-void main_1(constant buf1& x_6, device theSSBO& x_4) {
-  int i = 0;
-  float GLF_live3s = 0.0f;
-  int i_1 = 0;
-  int z = 0;
-  x_4.out_data = 42;
-  float const x_37 = x_6.injectionSwitch.x;
-  float const x_39 = x_6.injectionSwitch.y;
-  if ((x_37 > x_39)) {
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-  }
-  float const x_44 = x_6.injectionSwitch.x;
-  float const x_46 = x_6.injectionSwitch.y;
-  if ((x_44 > x_46)) {
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-  }
-  float const x_51 = x_6.injectionSwitch.y;
-  i = int(x_51);
-  while (true) {
-    int const x_57 = i;
-    if ((x_57 > 0)) {
-    } else {
-      break;
-    }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    {
-      int const x_60 = i;
-      i = as_type<int>((as_type<uint>(x_60) - as_type<uint>(1)));
-    }
-  }
-  GLF_live3s = 0.0f;
-  while (true) {
-    i_1 = 1;
-    while (true) {
-      int const x_70 = i_1;
-      if ((x_70 < 2)) {
-      } else {
-        break;
-      }
-      float const x_74 = x_6.injectionSwitch.x;
-      if ((x_74 > 1.0f)) {
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-      }
-      float const x_79 = x_6.injectionSwitch.x;
-      float const x_81 = x_6.injectionSwitch.y;
-      if ((x_79 > x_81)) {
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-      }
-      float const x_86 = x_6.injectionSwitch.y;
-      z = int(x_86);
-      while (true) {
-        int const x_92 = z;
-        if ((x_92 > 0)) {
-        } else {
-          break;
-        }
-        float const x_95 = GLF_live3s;
-        GLF_live3s = (x_95 + 1.0f);
-        {
-          int const x_97 = z;
-          z = as_type<int>((as_type<uint>(x_97) - as_type<uint>(1)));
-        }
-      }
-      int const x_99 = i_1;
-      if ((x_99 >= 1)) {
-        float const x_104 = x_6.injectionSwitch.x;
-        if ((x_104 > 1.0f)) {
-          threadgroup_barrier(mem_flags::mem_threadgroup);
-        }
-      }
-      {
-        int const x_108 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-      }
-    }
-    {
-      float const x_111 = x_6.injectionSwitch.x;
-      float const x_113 = x_6.injectionSwitch.y;
-      if ((x_111 > x_113)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-kernel void tint_symbol(constant buf1& x_6 [[buffer(0)]], device theSSBO& x_4 [[buffer(1)]]) {
-  main_1(x_6, x_4);
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index dfb82e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,223 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 131
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %theSSBO "theSSBO"
-               OpMemberName %theSSBO 0 "out_data"
-               OpName %x_4 "x_4"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %GLF_live3s "GLF_live3s"
-               OpName %i_1 "i_1"
-               OpName %z "z"
-               OpName %main "main"
-               OpDecorate %theSSBO Block
-               OpMemberDecorate %theSSBO 0 Offset 0
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-        %int = OpTypeInt 32 1
-    %theSSBO = OpTypeStruct %int
-%_ptr_StorageBuffer_theSSBO = OpTypePointer StorageBuffer %theSSBO
-        %x_4 = OpVariable %_ptr_StorageBuffer_theSSBO StorageBuffer
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %16 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %19 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-     %int_42 = OpConstant %int 42
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %16
- %GLF_live3s = OpVariable %_ptr_Function_float Function %19
-        %i_1 = OpVariable %_ptr_Function_int Function %16
-          %z = OpVariable %_ptr_Function_int Function %16
-         %25 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %25 %int_42
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %29 = OpLoad %float %28
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %32 = OpLoad %float %31
-         %33 = OpFOrdGreaterThan %bool %29 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %35
-         %35 = OpLabel
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %43 = OpLoad %float %42
-         %44 = OpFOrdGreaterThan %bool %41 %43
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %45
-         %45 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %49 = OpLoad %float %48
-         %50 = OpConvertFToS %int %49
-               OpStore %i %50
-               OpBranch %51
-         %51 = OpLabel
-               OpLoopMerge %52 %53 None
-               OpBranch %54
-         %54 = OpLabel
-         %55 = OpLoad %int %i
-         %57 = OpSGreaterThan %bool %55 %int_0
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %52
-         %58 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %53
-         %53 = OpLabel
-         %62 = OpLoad %int %i
-         %64 = OpISub %int %62 %int_1
-               OpStore %i %64
-               OpBranch %51
-         %52 = OpLabel
-               OpStore %GLF_live3s %float_0
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-               OpStore %i_1 %int_1
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %74 = OpLoad %int %i_1
-         %76 = OpSLessThan %bool %74 %int_2
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %71
-         %77 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %81 = OpLoad %float %80
-         %83 = OpFOrdGreaterThan %bool %81 %float_1
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %84
-         %85 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %84
-         %84 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %88 = OpLoad %float %87
-         %89 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %90 = OpLoad %float %89
-         %91 = OpFOrdGreaterThan %bool %88 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %92
-         %93 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %92
-         %92 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %96 = OpLoad %float %95
-         %97 = OpConvertFToS %int %96
-               OpStore %z %97
-               OpBranch %98
-         %98 = OpLabel
-               OpLoopMerge %99 %100 None
-               OpBranch %101
-        %101 = OpLabel
-        %102 = OpLoad %int %z
-        %103 = OpSGreaterThan %bool %102 %int_0
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %106
-        %105 = OpLabel
-               OpBranch %104
-        %106 = OpLabel
-               OpBranch %99
-        %104 = OpLabel
-        %107 = OpLoad %float %GLF_live3s
-        %108 = OpFAdd %float %107 %float_1
-               OpStore %GLF_live3s %108
-               OpBranch %100
-        %100 = OpLabel
-        %109 = OpLoad %int %z
-        %110 = OpISub %int %109 %int_1
-               OpStore %z %110
-               OpBranch %98
-         %99 = OpLabel
-        %111 = OpLoad %int %i_1
-        %112 = OpSGreaterThanEqual %bool %111 %int_1
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %113
-        %114 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %116 = OpLoad %float %115
-        %117 = OpFOrdGreaterThan %bool %116 %float_1
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %118
-        %118 = OpLabel
-               OpBranch %113
-        %113 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %i_1 %122
-               OpBranch %70
-         %71 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %124 = OpLoad %float %123
-        %125 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %126 = OpLoad %float %125
-        %127 = OpFOrdGreaterThan %bool %124 %126
-               OpBranchConditional %127 %66 %67
-         %67 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-        %129 = OpLabel
-        %130 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 899baac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,109 +0,0 @@
-[[block]]
-struct theSSBO {
-  out_data : i32;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_4 : theSSBO;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-fn main_1() {
-  var i : i32;
-  var GLF_live3s : f32;
-  var i_1 : i32;
-  var z : i32;
-  x_4.out_data = 42;
-  let x_37 : f32 = x_6.injectionSwitch.x;
-  let x_39 : f32 = x_6.injectionSwitch.y;
-  if ((x_37 > x_39)) {
-    workgroupBarrier();
-  }
-  let x_44 : f32 = x_6.injectionSwitch.x;
-  let x_46 : f32 = x_6.injectionSwitch.y;
-  if ((x_44 > x_46)) {
-    workgroupBarrier();
-  }
-  let x_51 : f32 = x_6.injectionSwitch.y;
-  i = i32(x_51);
-  loop {
-    let x_57 : i32 = i;
-    if ((x_57 > 0)) {
-    } else {
-      break;
-    }
-    workgroupBarrier();
-
-    continuing {
-      let x_60 : i32 = i;
-      i = (x_60 - 1);
-    }
-  }
-  GLF_live3s = 0.0;
-  loop {
-    i_1 = 1;
-    loop {
-      let x_70 : i32 = i_1;
-      if ((x_70 < 2)) {
-      } else {
-        break;
-      }
-      let x_74 : f32 = x_6.injectionSwitch.x;
-      if ((x_74 > 1.0)) {
-        workgroupBarrier();
-      }
-      let x_79 : f32 = x_6.injectionSwitch.x;
-      let x_81 : f32 = x_6.injectionSwitch.y;
-      if ((x_79 > x_81)) {
-        workgroupBarrier();
-      }
-      let x_86 : f32 = x_6.injectionSwitch.y;
-      z = i32(x_86);
-      loop {
-        let x_92 : i32 = z;
-        if ((x_92 > 0)) {
-        } else {
-          break;
-        }
-        let x_95 : f32 = GLF_live3s;
-        GLF_live3s = (x_95 + 1.0);
-
-        continuing {
-          let x_97 : i32 = z;
-          z = (x_97 - 1);
-        }
-      }
-      let x_99 : i32 = i_1;
-      if ((x_99 >= 1)) {
-        let x_104 : f32 = x_6.injectionSwitch.x;
-        if ((x_104 > 1.0)) {
-          workgroupBarrier();
-        }
-      }
-
-      continuing {
-        let x_108 : i32 = i_1;
-        i_1 = (x_108 + 1);
-      }
-    }
-
-    continuing {
-      let x_111 : f32 = x_6.injectionSwitch.x;
-      let x_113 : f32 = x_6.injectionSwitch.y;
-      if ((x_111 > x_113)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a18cdf6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,74 +0,0 @@
-RWByteAddressBuffer x_4 : register(u0, space0);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  int i = 0;
-  float GLF_live3s = 0.0f;
-  int i_1 = 0;
-  int z = 0;
-  x_4.Store(0u, asuint(42));
-  const float x_37 = asfloat(x_6[0].x);
-  const float x_39 = asfloat(x_6[0].y);
-  if ((x_37 > x_39)) {
-    GroupMemoryBarrierWithGroupSync();
-  }
-  const float x_44 = asfloat(x_6[0].x);
-  const float x_46 = asfloat(x_6[0].y);
-  if ((x_44 > x_46)) {
-    GroupMemoryBarrierWithGroupSync();
-  }
-  const float x_51 = asfloat(x_6[0].y);
-  i = int(x_51);
-  {
-    for(; (i > 0); i = (i - 1)) {
-      GroupMemoryBarrierWithGroupSync();
-    }
-  }
-  GLF_live3s = 0.0f;
-  while (true) {
-    i_1 = 1;
-    {
-      for(; (i_1 < 2); i_1 = (i_1 + 1)) {
-        const float x_74 = asfloat(x_6[0].x);
-        if ((x_74 > 1.0f)) {
-          GroupMemoryBarrierWithGroupSync();
-        }
-        const float x_79 = asfloat(x_6[0].x);
-        const float x_81 = asfloat(x_6[0].y);
-        if ((x_79 > x_81)) {
-          GroupMemoryBarrierWithGroupSync();
-        }
-        const float x_86 = asfloat(x_6[0].y);
-        z = int(x_86);
-        {
-          for(; (z > 0); z = (z - 1)) {
-            GLF_live3s = (GLF_live3s + 1.0f);
-          }
-        }
-        if ((i_1 >= 1)) {
-          const float x_104 = asfloat(x_6[0].x);
-          if ((x_104 > 1.0f)) {
-            GroupMemoryBarrierWithGroupSync();
-          }
-        }
-      }
-    }
-    {
-      const float x_111 = asfloat(x_6[0].x);
-      const float x_113 = asfloat(x_6[0].y);
-      if ((x_111 > x_113)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5447590..0000000
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct theSSBO {
-  /* 0x0000 */ int out_data;
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-
-void main_1(constant buf1& x_6, device theSSBO& x_4) {
-  int i = 0;
-  float GLF_live3s = 0.0f;
-  int i_1 = 0;
-  int z = 0;
-  x_4.out_data = 42;
-  float const x_37 = x_6.injectionSwitch.x;
-  float const x_39 = x_6.injectionSwitch.y;
-  if ((x_37 > x_39)) {
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-  }
-  float const x_44 = x_6.injectionSwitch.x;
-  float const x_46 = x_6.injectionSwitch.y;
-  if ((x_44 > x_46)) {
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-  }
-  float const x_51 = x_6.injectionSwitch.y;
-  i = int(x_51);
-  while (true) {
-    int const x_57 = i;
-    if ((x_57 > 0)) {
-    } else {
-      break;
-    }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    {
-      int const x_60 = i;
-      i = as_type<int>((as_type<uint>(x_60) - as_type<uint>(1)));
-    }
-  }
-  GLF_live3s = 0.0f;
-  while (true) {
-    i_1 = 1;
-    while (true) {
-      int const x_70 = i_1;
-      if ((x_70 < 2)) {
-      } else {
-        break;
-      }
-      float const x_74 = x_6.injectionSwitch.x;
-      if ((x_74 > 1.0f)) {
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-      }
-      float const x_79 = x_6.injectionSwitch.x;
-      float const x_81 = x_6.injectionSwitch.y;
-      if ((x_79 > x_81)) {
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-      }
-      float const x_86 = x_6.injectionSwitch.y;
-      z = int(x_86);
-      while (true) {
-        int const x_92 = z;
-        if ((x_92 > 0)) {
-        } else {
-          break;
-        }
-        float const x_95 = GLF_live3s;
-        GLF_live3s = (x_95 + 1.0f);
-        {
-          int const x_97 = z;
-          z = as_type<int>((as_type<uint>(x_97) - as_type<uint>(1)));
-        }
-      }
-      int const x_99 = i_1;
-      if ((x_99 >= 1)) {
-        float const x_104 = x_6.injectionSwitch.x;
-        if ((x_104 > 1.0f)) {
-          threadgroup_barrier(mem_flags::mem_threadgroup);
-        }
-      }
-      {
-        int const x_108 = i_1;
-        i_1 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-      }
-    }
-    {
-      float const x_111 = x_6.injectionSwitch.x;
-      float const x_113 = x_6.injectionSwitch.y;
-      if ((x_111 > x_113)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-kernel void tint_symbol(constant buf1& x_6 [[buffer(0)]], device theSSBO& x_4 [[buffer(1)]]) {
-  main_1(x_6, x_4);
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index dfb82e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,223 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 131
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %theSSBO "theSSBO"
-               OpMemberName %theSSBO 0 "out_data"
-               OpName %x_4 "x_4"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %GLF_live3s "GLF_live3s"
-               OpName %i_1 "i_1"
-               OpName %z "z"
-               OpName %main "main"
-               OpDecorate %theSSBO Block
-               OpMemberDecorate %theSSBO 0 Offset 0
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-        %int = OpTypeInt 32 1
-    %theSSBO = OpTypeStruct %int
-%_ptr_StorageBuffer_theSSBO = OpTypePointer StorageBuffer %theSSBO
-        %x_4 = OpVariable %_ptr_StorageBuffer_theSSBO StorageBuffer
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %16 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %19 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-     %int_42 = OpConstant %int 42
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %16
- %GLF_live3s = OpVariable %_ptr_Function_float Function %19
-        %i_1 = OpVariable %_ptr_Function_int Function %16
-          %z = OpVariable %_ptr_Function_int Function %16
-         %25 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %25 %int_42
-         %28 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %29 = OpLoad %float %28
-         %31 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %32 = OpLoad %float %31
-         %33 = OpFOrdGreaterThan %bool %29 %32
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %35
-         %35 = OpLabel
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %41 = OpLoad %float %40
-         %42 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %43 = OpLoad %float %42
-         %44 = OpFOrdGreaterThan %bool %41 %43
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %45
-         %45 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %49 = OpLoad %float %48
-         %50 = OpConvertFToS %int %49
-               OpStore %i %50
-               OpBranch %51
-         %51 = OpLabel
-               OpLoopMerge %52 %53 None
-               OpBranch %54
-         %54 = OpLabel
-         %55 = OpLoad %int %i
-         %57 = OpSGreaterThan %bool %55 %int_0
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %52
-         %58 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %53
-         %53 = OpLabel
-         %62 = OpLoad %int %i
-         %64 = OpISub %int %62 %int_1
-               OpStore %i %64
-               OpBranch %51
-         %52 = OpLabel
-               OpStore %GLF_live3s %float_0
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-               OpStore %i_1 %int_1
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %74 = OpLoad %int %i_1
-         %76 = OpSLessThan %bool %74 %int_2
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %71
-         %77 = OpLabel
-         %80 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %81 = OpLoad %float %80
-         %83 = OpFOrdGreaterThan %bool %81 %float_1
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %84
-         %85 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %84
-         %84 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %88 = OpLoad %float %87
-         %89 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %90 = OpLoad %float %89
-         %91 = OpFOrdGreaterThan %bool %88 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %92
-         %93 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %92
-         %92 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %96 = OpLoad %float %95
-         %97 = OpConvertFToS %int %96
-               OpStore %z %97
-               OpBranch %98
-         %98 = OpLabel
-               OpLoopMerge %99 %100 None
-               OpBranch %101
-        %101 = OpLabel
-        %102 = OpLoad %int %z
-        %103 = OpSGreaterThan %bool %102 %int_0
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %106
-        %105 = OpLabel
-               OpBranch %104
-        %106 = OpLabel
-               OpBranch %99
-        %104 = OpLabel
-        %107 = OpLoad %float %GLF_live3s
-        %108 = OpFAdd %float %107 %float_1
-               OpStore %GLF_live3s %108
-               OpBranch %100
-        %100 = OpLabel
-        %109 = OpLoad %int %z
-        %110 = OpISub %int %109 %int_1
-               OpStore %z %110
-               OpBranch %98
-         %99 = OpLabel
-        %111 = OpLoad %int %i_1
-        %112 = OpSGreaterThanEqual %bool %111 %int_1
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %113
-        %114 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %116 = OpLoad %float %115
-        %117 = OpFOrdGreaterThan %bool %116 %float_1
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %118
-        %118 = OpLabel
-               OpBranch %113
-        %113 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %i_1 %122
-               OpBranch %70
-         %71 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %124 = OpLoad %float %123
-        %125 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %126 = OpLoad %float %125
-        %127 = OpFOrdGreaterThan %bool %124 %126
-               OpBranchConditional %127 %66 %67
-         %67 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-        %129 = OpLabel
-        %130 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 899baac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/dead-barriers-in-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,109 +0,0 @@
-[[block]]
-struct theSSBO {
-  out_data : i32;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_4 : theSSBO;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-fn main_1() {
-  var i : i32;
-  var GLF_live3s : f32;
-  var i_1 : i32;
-  var z : i32;
-  x_4.out_data = 42;
-  let x_37 : f32 = x_6.injectionSwitch.x;
-  let x_39 : f32 = x_6.injectionSwitch.y;
-  if ((x_37 > x_39)) {
-    workgroupBarrier();
-  }
-  let x_44 : f32 = x_6.injectionSwitch.x;
-  let x_46 : f32 = x_6.injectionSwitch.y;
-  if ((x_44 > x_46)) {
-    workgroupBarrier();
-  }
-  let x_51 : f32 = x_6.injectionSwitch.y;
-  i = i32(x_51);
-  loop {
-    let x_57 : i32 = i;
-    if ((x_57 > 0)) {
-    } else {
-      break;
-    }
-    workgroupBarrier();
-
-    continuing {
-      let x_60 : i32 = i;
-      i = (x_60 - 1);
-    }
-  }
-  GLF_live3s = 0.0;
-  loop {
-    i_1 = 1;
-    loop {
-      let x_70 : i32 = i_1;
-      if ((x_70 < 2)) {
-      } else {
-        break;
-      }
-      let x_74 : f32 = x_6.injectionSwitch.x;
-      if ((x_74 > 1.0)) {
-        workgroupBarrier();
-      }
-      let x_79 : f32 = x_6.injectionSwitch.x;
-      let x_81 : f32 = x_6.injectionSwitch.y;
-      if ((x_79 > x_81)) {
-        workgroupBarrier();
-      }
-      let x_86 : f32 = x_6.injectionSwitch.y;
-      z = i32(x_86);
-      loop {
-        let x_92 : i32 = z;
-        if ((x_92 > 0)) {
-        } else {
-          break;
-        }
-        let x_95 : f32 = GLF_live3s;
-        GLF_live3s = (x_95 + 1.0);
-
-        continuing {
-          let x_97 : i32 = z;
-          z = (x_97 - 1);
-        }
-      }
-      let x_99 : i32 = i_1;
-      if ((x_99 >= 1)) {
-        let x_104 : f32 = x_6.injectionSwitch.x;
-        if ((x_104 > 1.0)) {
-          workgroupBarrier();
-        }
-      }
-
-      continuing {
-        let x_108 : i32 = i_1;
-        i_1 = (x_108 + 1);
-      }
-    }
-
-    continuing {
-      let x_111 : f32 = x_6.injectionSwitch.x;
-      let x_113 : f32 = x_6.injectionSwitch.y;
-      if ((x_111 > x_113)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index fad5d97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void x_51() {
-  discard;
-}
-
-void main_1() {
-  while (true) {
-    bool x_31 = false;
-    bool x_30_phi = false;
-    x_30_phi = false;
-    while (true) {
-      bool x_31_phi = false;
-      const bool x_30 = x_30_phi;
-      while (true) {
-        float4 x_52 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        float4 x_54 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        float4 x_55_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        const float x_36 = asfloat(x_5[0].y);
-        x_31_phi = x_30;
-        if ((x_36 > 0.0f)) {
-        } else {
-          break;
-        }
-        while (true) {
-          const float x_46 = asfloat(x_5[0].x);
-          if ((x_46 > 0.0f)) {
-            x_51();
-            x_52 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-            x_55_phi = x_52;
-            break;
-          }
-          x_54 = (float4(1.0f, 0.0f, 0.0f, 1.0f) + float4(x_46, x_46, x_46, x_46));
-          x_55_phi = x_54;
-          break;
-        }
-        x_GLF_color = x_55_phi;
-        x_31_phi = true;
-        break;
-      }
-      x_31 = x_31_phi;
-      if (x_31) {
-        break;
-      } else {
-        {
-          x_30_phi = x_31;
-        }
-        continue;
-      }
-      {
-        x_30_phi = x_31;
-      }
-    }
-    if (x_31) {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7d8653c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,87 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void x_51() {
-  discard_fragment();
-}
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  while (true) {
-    bool x_31 = false;
-    bool x_30_phi = false;
-    x_30_phi = false;
-    while (true) {
-      bool x_31_phi = false;
-      bool const x_30 = x_30_phi;
-      while (true) {
-        float4 x_52 = 0.0f;
-        float4 x_54 = 0.0f;
-        float4 x_55_phi = 0.0f;
-        float const x_36 = x_5.injectionSwitch.y;
-        x_31_phi = x_30;
-        if ((x_36 > 0.0f)) {
-        } else {
-          break;
-        }
-        while (true) {
-          float const x_46 = x_5.injectionSwitch.x;
-          if ((x_46 > 0.0f)) {
-            x_51();
-            x_52 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-            x_55_phi = x_52;
-            break;
-          }
-          x_54 = (float4(1.0f, 0.0f, 0.0f, 1.0f) + float4(x_46, x_46, x_46, x_46));
-          x_55_phi = x_54;
-          break;
-        }
-        float4 const x_55 = x_55_phi;
-        *(tint_symbol_3) = x_55;
-        x_31_phi = true;
-        break;
-      }
-      x_31 = x_31_phi;
-      if (x_31) {
-        break;
-      } else {
-        {
-          x_30_phi = x_31;
-        }
-        continue;
-      }
-      {
-        x_30_phi = x_31;
-      }
-    }
-    if (x_31) {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e7152d6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,177 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 92
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %x_51 "x_51"
-               OpName %main_1 "main_1"
-               OpName %x_31 "x_31"
-               OpName %x_30_phi "x_30_phi"
-               OpName %x_31_phi "x_31_phi"
-               OpName %x_52 "x_52"
-               OpName %x_54 "x_54"
-               OpName %x_55_phi "x_55_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %25 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-         %63 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-         %66 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %81 = OpTypeFunction %main_out
-       %x_51 = OpFunction %void None %12
-         %15 = OpLabel
-               OpKill
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %12
-         %17 = OpLabel
-       %x_31 = OpVariable %_ptr_Function_bool Function %25
-   %x_30_phi = OpVariable %_ptr_Function_bool Function %25
-   %x_31_phi = OpVariable %_ptr_Function_bool Function %25
-       %x_52 = OpVariable %_ptr_Function_v4float Function %5
-       %x_54 = OpVariable %_ptr_Function_v4float Function %5
-   %x_55_phi = OpVariable %_ptr_Function_v4float Function %5
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-               OpStore %x_30_phi %false
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-         %33 = OpLoad %bool %x_30_phi
-               OpBranch %34
-         %34 = OpLabel
-               OpLoopMerge %35 %36 None
-               OpBranch %37
-         %37 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %47 = OpLoad %float %46
-               OpStore %x_31_phi %33
-         %49 = OpFOrdGreaterThan %bool %47 %float_0
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %35
-         %50 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %58 = OpLoad %float %57
-         %59 = OpFOrdGreaterThan %bool %58 %float_0
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %60
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %x_51
-               OpStore %x_52 %63
-         %64 = OpLoad %v4float %x_52
-               OpStore %x_55_phi %64
-               OpBranch %54
-         %60 = OpLabel
-         %67 = OpCompositeConstruct %v4float %58 %58 %58 %58
-         %68 = OpFAdd %v4float %66 %67
-               OpStore %x_54 %68
-         %69 = OpLoad %v4float %x_54
-               OpStore %x_55_phi %69
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %53
-         %54 = OpLabel
-         %70 = OpLoad %v4float %x_55_phi
-               OpStore %x_GLF_color %70
-               OpStore %x_31_phi %true
-               OpBranch %35
-         %36 = OpLabel
-               OpBranch %34
-         %35 = OpLabel
-         %72 = OpLoad %bool %x_31_phi
-               OpStore %x_31 %72
-         %73 = OpLoad %bool %x_31
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %29
-         %76 = OpLabel
-               OpBranch %30
-         %74 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-         %77 = OpLoad %bool %x_31
-               OpStore %x_30_phi %77
-               OpBranch %28
-         %29 = OpLabel
-         %78 = OpLoad %bool %x_31
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %79
-         %80 = OpLabel
-               OpBranch %19
-         %79 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpBranch %18
-         %19 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %81
-         %84 = OpLabel
-         %85 = OpFunctionCall %void %main_1
-         %86 = OpLoad %v4float %x_GLF_color
-         %87 = OpCompositeConstruct %main_out %86
-               OpReturnValue %87
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %89 = OpLabel
-         %90 = OpFunctionCall %main_out %main_inner
-         %91 = OpCompositeExtract %v4float %90 0
-               OpStore %x_GLF_color_1_1 %91
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 96cc10e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,77 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn x_51() {
-  discard;
-}
-
-fn main_1() {
-  loop {
-    var x_31 : bool;
-    var x_30_phi : bool;
-    x_30_phi = false;
-    loop {
-      var x_31_phi : bool;
-      let x_30 : bool = x_30_phi;
-      loop {
-        var x_52 : vec4<f32>;
-        var x_54 : vec4<f32>;
-        var x_55_phi : vec4<f32>;
-        let x_36 : f32 = x_5.injectionSwitch.y;
-        x_31_phi = x_30;
-        if ((x_36 > 0.0)) {
-        } else {
-          break;
-        }
-        loop {
-          let x_46 : f32 = x_5.injectionSwitch.x;
-          if ((x_46 > 0.0)) {
-            x_51();
-            x_52 = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-            x_55_phi = x_52;
-            break;
-          }
-          x_54 = (vec4<f32>(1.0, 0.0, 0.0, 1.0) + vec4<f32>(x_46, x_46, x_46, x_46));
-          x_55_phi = x_54;
-          break;
-        }
-        let x_55 : vec4<f32> = x_55_phi;
-        x_GLF_color = x_55;
-        x_31_phi = true;
-        break;
-      }
-      x_31 = x_31_phi;
-      if (x_31) {
-        break;
-      } else {
-        continue;
-      }
-
-      continuing {
-        x_30_phi = x_31;
-      }
-    }
-    if (x_31) {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index fad5d97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void x_51() {
-  discard;
-}
-
-void main_1() {
-  while (true) {
-    bool x_31 = false;
-    bool x_30_phi = false;
-    x_30_phi = false;
-    while (true) {
-      bool x_31_phi = false;
-      const bool x_30 = x_30_phi;
-      while (true) {
-        float4 x_52 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        float4 x_54 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        float4 x_55_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        const float x_36 = asfloat(x_5[0].y);
-        x_31_phi = x_30;
-        if ((x_36 > 0.0f)) {
-        } else {
-          break;
-        }
-        while (true) {
-          const float x_46 = asfloat(x_5[0].x);
-          if ((x_46 > 0.0f)) {
-            x_51();
-            x_52 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-            x_55_phi = x_52;
-            break;
-          }
-          x_54 = (float4(1.0f, 0.0f, 0.0f, 1.0f) + float4(x_46, x_46, x_46, x_46));
-          x_55_phi = x_54;
-          break;
-        }
-        x_GLF_color = x_55_phi;
-        x_31_phi = true;
-        break;
-      }
-      x_31 = x_31_phi;
-      if (x_31) {
-        break;
-      } else {
-        {
-          x_30_phi = x_31;
-        }
-        continue;
-      }
-      {
-        x_30_phi = x_31;
-      }
-    }
-    if (x_31) {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7d8653c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,87 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void x_51() {
-  discard_fragment();
-}
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  while (true) {
-    bool x_31 = false;
-    bool x_30_phi = false;
-    x_30_phi = false;
-    while (true) {
-      bool x_31_phi = false;
-      bool const x_30 = x_30_phi;
-      while (true) {
-        float4 x_52 = 0.0f;
-        float4 x_54 = 0.0f;
-        float4 x_55_phi = 0.0f;
-        float const x_36 = x_5.injectionSwitch.y;
-        x_31_phi = x_30;
-        if ((x_36 > 0.0f)) {
-        } else {
-          break;
-        }
-        while (true) {
-          float const x_46 = x_5.injectionSwitch.x;
-          if ((x_46 > 0.0f)) {
-            x_51();
-            x_52 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-            x_55_phi = x_52;
-            break;
-          }
-          x_54 = (float4(1.0f, 0.0f, 0.0f, 1.0f) + float4(x_46, x_46, x_46, x_46));
-          x_55_phi = x_54;
-          break;
-        }
-        float4 const x_55 = x_55_phi;
-        *(tint_symbol_3) = x_55;
-        x_31_phi = true;
-        break;
-      }
-      x_31 = x_31_phi;
-      if (x_31) {
-        break;
-      } else {
-        {
-          x_30_phi = x_31;
-        }
-        continue;
-      }
-      {
-        x_30_phi = x_31;
-      }
-    }
-    if (x_31) {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e7152d6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,177 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 92
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %x_51 "x_51"
-               OpName %main_1 "main_1"
-               OpName %x_31 "x_31"
-               OpName %x_30_phi "x_30_phi"
-               OpName %x_31_phi "x_31_phi"
-               OpName %x_52 "x_52"
-               OpName %x_54 "x_54"
-               OpName %x_55_phi "x_55_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %25 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-         %63 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-    %float_1 = OpConstant %float 1
-         %66 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %81 = OpTypeFunction %main_out
-       %x_51 = OpFunction %void None %12
-         %15 = OpLabel
-               OpKill
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %12
-         %17 = OpLabel
-       %x_31 = OpVariable %_ptr_Function_bool Function %25
-   %x_30_phi = OpVariable %_ptr_Function_bool Function %25
-   %x_31_phi = OpVariable %_ptr_Function_bool Function %25
-       %x_52 = OpVariable %_ptr_Function_v4float Function %5
-       %x_54 = OpVariable %_ptr_Function_v4float Function %5
-   %x_55_phi = OpVariable %_ptr_Function_v4float Function %5
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-               OpStore %x_30_phi %false
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-         %33 = OpLoad %bool %x_30_phi
-               OpBranch %34
-         %34 = OpLabel
-               OpLoopMerge %35 %36 None
-               OpBranch %37
-         %37 = OpLabel
-         %46 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %47 = OpLoad %float %46
-               OpStore %x_31_phi %33
-         %49 = OpFOrdGreaterThan %bool %47 %float_0
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-               OpBranch %50
-         %52 = OpLabel
-               OpBranch %35
-         %50 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %58 = OpLoad %float %57
-         %59 = OpFOrdGreaterThan %bool %58 %float_0
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %60
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %x_51
-               OpStore %x_52 %63
-         %64 = OpLoad %v4float %x_52
-               OpStore %x_55_phi %64
-               OpBranch %54
-         %60 = OpLabel
-         %67 = OpCompositeConstruct %v4float %58 %58 %58 %58
-         %68 = OpFAdd %v4float %66 %67
-               OpStore %x_54 %68
-         %69 = OpLoad %v4float %x_54
-               OpStore %x_55_phi %69
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %53
-         %54 = OpLabel
-         %70 = OpLoad %v4float %x_55_phi
-               OpStore %x_GLF_color %70
-               OpStore %x_31_phi %true
-               OpBranch %35
-         %36 = OpLabel
-               OpBranch %34
-         %35 = OpLabel
-         %72 = OpLoad %bool %x_31_phi
-               OpStore %x_31 %72
-         %73 = OpLoad %bool %x_31
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %29
-         %76 = OpLabel
-               OpBranch %30
-         %74 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-         %77 = OpLoad %bool %x_31
-               OpStore %x_30_phi %77
-               OpBranch %28
-         %29 = OpLabel
-         %78 = OpLoad %bool %x_31
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %79
-         %80 = OpLabel
-               OpBranch %19
-         %79 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpBranch %18
-         %19 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %81
-         %84 = OpLabel
-         %85 = OpFunctionCall %void %main_1
-         %86 = OpLoad %v4float %x_GLF_color
-         %87 = OpCompositeConstruct %main_out %86
-               OpReturnValue %87
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %89 = OpLabel
-         %90 = OpFunctionCall %main_out %main_inner
-         %91 = OpCompositeExtract %v4float %90 0
-               OpStore %x_GLF_color_1_1 %91
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 96cc10e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/disc-and-add-in-func-in-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,77 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn x_51() {
-  discard;
-}
-
-fn main_1() {
-  loop {
-    var x_31 : bool;
-    var x_30_phi : bool;
-    x_30_phi = false;
-    loop {
-      var x_31_phi : bool;
-      let x_30 : bool = x_30_phi;
-      loop {
-        var x_52 : vec4<f32>;
-        var x_54 : vec4<f32>;
-        var x_55_phi : vec4<f32>;
-        let x_36 : f32 = x_5.injectionSwitch.y;
-        x_31_phi = x_30;
-        if ((x_36 > 0.0)) {
-        } else {
-          break;
-        }
-        loop {
-          let x_46 : f32 = x_5.injectionSwitch.x;
-          if ((x_46 > 0.0)) {
-            x_51();
-            x_52 = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-            x_55_phi = x_52;
-            break;
-          }
-          x_54 = (vec4<f32>(1.0, 0.0, 0.0, 1.0) + vec4<f32>(x_46, x_46, x_46, x_46));
-          x_55_phi = x_54;
-          break;
-        }
-        let x_55 : vec4<f32> = x_55_phi;
-        x_GLF_color = x_55;
-        x_31_phi = true;
-        break;
-      }
-      x_31 = x_31_phi;
-      if (x_31) {
-        break;
-      } else {
-        continue;
-      }
-
-      continuing {
-        x_30_phi = x_31;
-      }
-    }
-    if (x_31) {
-      break;
-    }
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 70e4a5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  while (true) {
-    bool x_46_phi = false;
-    while (true) {
-      const float x_37 = gl_FragCoord.x;
-      if ((x_37 < 0.0f)) {
-        const float x_42 = asfloat(x_6[0].y);
-        if ((1.0f > x_42)) {
-          discard;
-        } else {
-          {
-            x_46_phi = false;
-            if (false) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-        {
-          x_46_phi = false;
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      x_46_phi = true;
-      break;
-      {
-        x_46_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_46_phi) {
-      break;
-    }
-    break;
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.msl
deleted file mode 100644
index e70aeb8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  while (true) {
-    bool x_46_phi = false;
-    while (true) {
-      float const x_37 = (*(tint_symbol_3)).x;
-      if ((x_37 < 0.0f)) {
-        float const x_42 = x_6.injectionSwitch.y;
-        if ((1.0f > x_42)) {
-          discard_fragment();
-        } else {
-          {
-            x_46_phi = false;
-            if (false) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-        {
-          x_46_phi = false;
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      x_46_phi = true;
-      break;
-      {
-        x_46_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    bool const x_46 = x_46_phi;
-    if (x_46) {
-      break;
-    }
-    break;
-  }
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ef78faf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_46_phi "x_46_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-   %x_46_phi = OpVariable %_ptr_Function_bool Function %26
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %34 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %35 = OpLoad %float %34
-         %37 = OpFOrdLessThan %bool %35 %float_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %38
-         %39 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %43 = OpLoad %float %42
-         %45 = OpFOrdGreaterThan %bool %float_1 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpKill
-         %48 = OpLabel
-               OpBranch %29
-         %46 = OpLabel
-               OpBranch %29
-         %38 = OpLabel
-               OpStore %x_46_phi %true
-               OpBranch %28
-         %29 = OpLabel
-               OpStore %x_46_phi %false
-               OpBranchConditional %false %27 %28
-         %28 = OpLabel
-         %51 = OpLoad %bool %x_46_phi
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-               OpBranch %20
-         %52 = OpLabel
-               OpBranch %20
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpStore %x_GLF_color %54
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %59 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %64 = OpLabel
-         %66 = OpLoad %v4float %gl_FragCoord_param_1
-         %65 = OpFunctionCall %main_out %main_inner %66
-         %67 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2da08c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  loop {
-    var x_46_phi : bool;
-    loop {
-      let x_37 : f32 = gl_FragCoord.x;
-      if ((x_37 < 0.0)) {
-        let x_42 : f32 = x_6.injectionSwitch.y;
-        if ((1.0 > x_42)) {
-          discard;
-        } else {
-          continue;
-        }
-        continue;
-      }
-      x_46_phi = true;
-      break;
-
-      continuing {
-        x_46_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    let x_46 : bool = x_46_phi;
-    if (x_46) {
-      break;
-    }
-    break;
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 70e4a5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  while (true) {
-    bool x_46_phi = false;
-    while (true) {
-      const float x_37 = gl_FragCoord.x;
-      if ((x_37 < 0.0f)) {
-        const float x_42 = asfloat(x_6[0].y);
-        if ((1.0f > x_42)) {
-          discard;
-        } else {
-          {
-            x_46_phi = false;
-            if (false) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-        {
-          x_46_phi = false;
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      x_46_phi = true;
-      break;
-      {
-        x_46_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_46_phi) {
-      break;
-    }
-    break;
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.msl
deleted file mode 100644
index e70aeb8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  while (true) {
-    bool x_46_phi = false;
-    while (true) {
-      float const x_37 = (*(tint_symbol_3)).x;
-      if ((x_37 < 0.0f)) {
-        float const x_42 = x_6.injectionSwitch.y;
-        if ((1.0f > x_42)) {
-          discard_fragment();
-        } else {
-          {
-            x_46_phi = false;
-            if (false) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-        {
-          x_46_phi = false;
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      x_46_phi = true;
-      break;
-      {
-        x_46_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    bool const x_46 = x_46_phi;
-    if (x_46) {
-      break;
-    }
-    break;
-  }
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ef78faf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_46_phi "x_46_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-   %x_46_phi = OpVariable %_ptr_Function_bool Function %26
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpLoopMerge %28 %29 None
-               OpBranch %30
-         %30 = OpLabel
-         %34 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %35 = OpLoad %float %34
-         %37 = OpFOrdLessThan %bool %35 %float_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %37 %39 %38
-         %39 = OpLabel
-         %42 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %43 = OpLoad %float %42
-         %45 = OpFOrdGreaterThan %bool %float_1 %43
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpKill
-         %48 = OpLabel
-               OpBranch %29
-         %46 = OpLabel
-               OpBranch %29
-         %38 = OpLabel
-               OpStore %x_46_phi %true
-               OpBranch %28
-         %29 = OpLabel
-               OpStore %x_46_phi %false
-               OpBranchConditional %false %27 %28
-         %28 = OpLabel
-         %51 = OpLoad %bool %x_46_phi
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-               OpBranch %20
-         %52 = OpLabel
-               OpBranch %20
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpStore %x_GLF_color %54
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %59 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %60 = OpFunctionCall %void %main_1
-         %61 = OpLoad %v4float %x_GLF_color
-         %62 = OpCompositeConstruct %main_out %61
-               OpReturnValue %62
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %64 = OpLabel
-         %66 = OpLoad %v4float %gl_FragCoord_param_1
-         %65 = OpFunctionCall %main_out %main_inner %66
-         %67 = OpCompositeExtract %v4float %65 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2da08c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-continue-return/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  loop {
-    var x_46_phi : bool;
-    loop {
-      let x_37 : f32 = gl_FragCoord.x;
-      if ((x_37 < 0.0)) {
-        let x_42 : f32 = x_6.injectionSwitch.y;
-        if ((1.0 > x_42)) {
-          discard;
-        } else {
-          continue;
-        }
-        continue;
-      }
-      x_46_phi = true;
-      break;
-
-      continuing {
-        x_46_phi = false;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    let x_46 : bool = x_46_phi;
-    if (x_46) {
-      break;
-    }
-    break;
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3164b11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[10] = (float[10])0;
-  int i = 0;
-  const float tint_symbol_3[10] = {0.100000001f, 0.200000003f, 0.300000012f, 0.400000006f, 0.5f, 0.600000024f, 0.699999988f, 0.800000012f, 0.899999976f, 1.0f};
-  data = tint_symbol_3;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      const float x_50 = gl_FragCoord.x;
-      if ((x_50 < 0.0f)) {
-        discard;
-      }
-      const float x_55 = data[i];
-      data[0] = x_55;
-    }
-  }
-  const float x_58 = data[0];
-  x_GLF_color = float4(x_58, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index b4738d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper data = {};
-  int i = 0;
-  tint_array_wrapper const tint_symbol_2 = {.arr={0.100000001f, 0.200000003f, 0.300000012f, 0.400000006f, 0.5f, 0.600000024f, 0.699999988f, 0.800000012f, 0.899999976f, 1.0f}};
-  data = tint_symbol_2;
-  i = 0;
-  while (true) {
-    int const x_7 = i;
-    if ((x_7 < 10)) {
-    } else {
-      break;
-    }
-    float const x_50 = (*(tint_symbol_4)).x;
-    if ((x_50 < 0.0f)) {
-      discard_fragment();
-    }
-    int const x_8 = i;
-    float const x_55 = data.arr[x_8];
-    data.arr[0] = x_55;
-    {
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-    }
-  }
-  float const x_58 = data.arr[0];
-  *(tint_symbol_5) = float4(x_58, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0094e72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 80
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %20 = OpConstantNull %_arr_float_uint_10
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_200000003 = OpConstant %float 0.200000003
-%float_0_300000012 = OpConstant %float 0.300000012
-%float_0_400000006 = OpConstant %float 0.400000006
-  %float_0_5 = OpConstant %float 0.5
-%float_0_600000024 = OpConstant %float 0.600000024
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_800000012 = OpConstant %float 0.800000012
-%float_0_899999976 = OpConstant %float 0.899999976
-    %float_1 = OpConstant %float 1
-         %35 = OpConstantComposite %_arr_float_uint_10 %float_0_100000001 %float_0_200000003 %float_0_300000012 %float_0_400000006 %float_0_5 %float_0_600000024 %float_0_699999988 %float_0_800000012 %float_0_899999976 %float_1
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %20
-          %i = OpVariable %_ptr_Function_int Function %24
-               OpStore %data %35
-               OpStore %i %int_0
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %41 = OpLoad %int %i
-         %43 = OpSLessThan %bool %41 %int_10
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %38
-         %45 = OpLabel
-         %50 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %51 = OpLoad %float %50
-         %53 = OpFOrdLessThan %bool %51 %float_0
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %54
-         %55 = OpLabel
-               OpKill
-         %54 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpAccessChain %_ptr_Function_float %data %56
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Function_float %data %int_0
-               OpStore %60 %59
-               OpBranch %39
-         %39 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpIAdd %int %61 %int_1
-               OpStore %i %63
-               OpBranch %37
-         %38 = OpLabel
-         %64 = OpAccessChain %_ptr_Function_float %data %int_0
-         %65 = OpLoad %float %64
-         %66 = OpCompositeConstruct %v4float %65 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %66
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %71 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %76 = OpLabel
-         %78 = OpLoad %v4float %gl_FragCoord_param_1
-         %77 = OpFunctionCall %main_out %main_inner %78
-         %79 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %79
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6981641..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 10>;
-  var i : i32;
-  data = array<f32, 10>(0.100000001, 0.200000003, 0.300000012, 0.400000006, 0.5, 0.600000024, 0.699999988, 0.800000012, 0.899999976, 1.0);
-  i = 0;
-  loop {
-    let x_7 : i32 = i;
-    if ((x_7 < 10)) {
-    } else {
-      break;
-    }
-    let x_50 : f32 = gl_FragCoord.x;
-    if ((x_50 < 0.0)) {
-      discard;
-    }
-    let x_8 : i32 = i;
-    let x_55 : f32 = data[x_8];
-    data[0] = x_55;
-
-    continuing {
-      let x_9 : i32 = i;
-      i = (x_9 + 1);
-    }
-  }
-  let x_58 : f32 = data[0];
-  x_GLF_color = vec4<f32>(x_58, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3164b11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,47 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[10] = (float[10])0;
-  int i = 0;
-  const float tint_symbol_3[10] = {0.100000001f, 0.200000003f, 0.300000012f, 0.400000006f, 0.5f, 0.600000024f, 0.699999988f, 0.800000012f, 0.899999976f, 1.0f};
-  data = tint_symbol_3;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      const float x_50 = gl_FragCoord.x;
-      if ((x_50 < 0.0f)) {
-        discard;
-      }
-      const float x_55 = data[i];
-      data[0] = x_55;
-    }
-  }
-  const float x_58 = data[0];
-  x_GLF_color = float4(x_58, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index b4738d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper data = {};
-  int i = 0;
-  tint_array_wrapper const tint_symbol_2 = {.arr={0.100000001f, 0.200000003f, 0.300000012f, 0.400000006f, 0.5f, 0.600000024f, 0.699999988f, 0.800000012f, 0.899999976f, 1.0f}};
-  data = tint_symbol_2;
-  i = 0;
-  while (true) {
-    int const x_7 = i;
-    if ((x_7 < 10)) {
-    } else {
-      break;
-    }
-    float const x_50 = (*(tint_symbol_4)).x;
-    if ((x_50 < 0.0f)) {
-      discard_fragment();
-    }
-    int const x_8 = i;
-    float const x_55 = data.arr[x_8];
-    data.arr[0] = x_55;
-    {
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-    }
-  }
-  float const x_58 = data.arr[0];
-  *(tint_symbol_5) = float4(x_58, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0094e72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 80
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %20 = OpConstantNull %_arr_float_uint_10
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_200000003 = OpConstant %float 0.200000003
-%float_0_300000012 = OpConstant %float 0.300000012
-%float_0_400000006 = OpConstant %float 0.400000006
-  %float_0_5 = OpConstant %float 0.5
-%float_0_600000024 = OpConstant %float 0.600000024
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_800000012 = OpConstant %float 0.800000012
-%float_0_899999976 = OpConstant %float 0.899999976
-    %float_1 = OpConstant %float 1
-         %35 = OpConstantComposite %_arr_float_uint_10 %float_0_100000001 %float_0_200000003 %float_0_300000012 %float_0_400000006 %float_0_5 %float_0_600000024 %float_0_699999988 %float_0_800000012 %float_0_899999976 %float_1
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %20
-          %i = OpVariable %_ptr_Function_int Function %24
-               OpStore %data %35
-               OpStore %i %int_0
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %41 = OpLoad %int %i
-         %43 = OpSLessThan %bool %41 %int_10
-               OpSelectionMerge %45 None
-               OpBranchConditional %43 %46 %47
-         %46 = OpLabel
-               OpBranch %45
-         %47 = OpLabel
-               OpBranch %38
-         %45 = OpLabel
-         %50 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %51 = OpLoad %float %50
-         %53 = OpFOrdLessThan %bool %51 %float_0
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %54
-         %55 = OpLabel
-               OpKill
-         %54 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpAccessChain %_ptr_Function_float %data %56
-         %59 = OpLoad %float %58
-         %60 = OpAccessChain %_ptr_Function_float %data %int_0
-               OpStore %60 %59
-               OpBranch %39
-         %39 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpIAdd %int %61 %int_1
-               OpStore %i %63
-               OpBranch %37
-         %38 = OpLabel
-         %64 = OpAccessChain %_ptr_Function_float %data %int_0
-         %65 = OpLoad %float %64
-         %66 = OpCompositeConstruct %v4float %65 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %66
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %71 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %76 = OpLabel
-         %78 = OpLoad %v4float %gl_FragCoord_param_1
-         %77 = OpFunctionCall %main_out %main_inner %78
-         %79 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %79
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6981641..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-array-manipulating-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 10>;
-  var i : i32;
-  data = array<f32, 10>(0.100000001, 0.200000003, 0.300000012, 0.400000006, 0.5, 0.600000024, 0.699999988, 0.800000012, 0.899999976, 1.0);
-  i = 0;
-  loop {
-    let x_7 : i32 = i;
-    if ((x_7 < 10)) {
-    } else {
-      break;
-    }
-    let x_50 : f32 = gl_FragCoord.x;
-    if ((x_50 < 0.0)) {
-      discard;
-    }
-    let x_8 : i32 = i;
-    let x_55 : f32 = data[x_8];
-    data[0] = x_55;
-
-    continuing {
-      let x_9 : i32 = i;
-      i = (x_9 + 1);
-    }
-  }
-  let x_58 : f32 = data[0];
-  x_GLF_color = vec4<f32>(x_58, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f2fbcca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void f_() {
-  while (true) {
-    const float x_35 = asfloat(x_7[0].y);
-    if ((1.0f > x_35)) {
-      const float x_40 = gl_FragCoord.y;
-      if ((x_40 < 0.0f)) {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      } else {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    discard;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  f_();
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3f3017a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void f_(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  while (true) {
-    float const x_35 = x_7.injectionSwitch.y;
-    if ((1.0f > x_35)) {
-      float const x_40 = (*(tint_symbol_3)).y;
-      if ((x_40 < 0.0f)) {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      } else {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    discard_fragment();
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  f_(x_7, tint_symbol_4);
-  *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e9214d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,113 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_ "f_"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-         %46 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %47 = OpTypeFunction %main_out %v4float
-         %f_ = OpFunction %void None %15
-         %18 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %27 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %28 = OpLoad %float %27
-         %30 = OpFOrdGreaterThan %bool %float_1 %28
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %36 = OpLoad %float %35
-         %38 = OpFOrdLessThan %bool %36 %float_0
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-               OpBranch %21
-         %41 = OpLabel
-               OpBranch %21
-         %39 = OpLabel
-               OpBranch %21
-         %32 = OpLabel
-               OpKill
-         %21 = OpLabel
-               OpBranchConditional %false %19 %20
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %15
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %f_
-               OpStore %x_GLF_color %46
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %47
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %51 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %52 = OpFunctionCall %void %main_1
-         %53 = OpLoad %v4float %x_GLF_color
-         %54 = OpCompositeConstruct %main_out %53
-               OpReturnValue %54
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %56 = OpLabel
-         %58 = OpLoad %v4float %gl_FragCoord_param_1
-         %57 = OpFunctionCall %main_out %main_inner %58
-         %59 = OpCompositeExtract %v4float %57 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bf03fdc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_() {
-  loop {
-    let x_35 : f32 = x_7.injectionSwitch.y;
-    if ((1.0 > x_35)) {
-      let x_40 : f32 = gl_FragCoord.y;
-      if ((x_40 < 0.0)) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    discard;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  f_();
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f2fbcca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void f_() {
-  while (true) {
-    const float x_35 = asfloat(x_7[0].y);
-    if ((1.0f > x_35)) {
-      const float x_40 = gl_FragCoord.y;
-      if ((x_40 < 0.0f)) {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      } else {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    discard;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  f_();
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3f3017a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void f_(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  while (true) {
-    float const x_35 = x_7.injectionSwitch.y;
-    if ((1.0f > x_35)) {
-      float const x_40 = (*(tint_symbol_3)).y;
-      if ((x_40 < 0.0f)) {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      } else {
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-        continue;
-      }
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    discard_fragment();
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  f_(x_7, tint_symbol_4);
-  *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e9214d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,113 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_ "f_"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-         %46 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %47 = OpTypeFunction %main_out %v4float
-         %f_ = OpFunction %void None %15
-         %18 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %27 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %28 = OpLoad %float %27
-         %30 = OpFOrdGreaterThan %bool %float_1 %28
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %32
-         %33 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %36 = OpLoad %float %35
-         %38 = OpFOrdLessThan %bool %36 %float_0
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-               OpBranch %21
-         %41 = OpLabel
-               OpBranch %21
-         %39 = OpLabel
-               OpBranch %21
-         %32 = OpLabel
-               OpKill
-         %21 = OpLabel
-               OpBranchConditional %false %19 %20
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %15
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %f_
-               OpStore %x_GLF_color %46
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %47
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %51 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %52 = OpFunctionCall %void %main_1
-         %53 = OpLoad %v4float %x_GLF_color
-         %54 = OpCompositeConstruct %main_out %53
-               OpReturnValue %54
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %56 = OpLabel
-         %58 = OpLoad %v4float %gl_FragCoord_param_1
-         %57 = OpFunctionCall %main_out %main_inner %58
-         %59 = OpCompositeExtract %v4float %57 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index bf03fdc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop-in-function/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_() {
-  loop {
-    let x_35 : f32 = x_7.injectionSwitch.y;
-    if ((1.0 > x_35)) {
-      let x_40 : f32 = gl_FragCoord.y;
-      if ((x_40 < 0.0)) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    discard;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  f_();
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7a092ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void x_47() {
-  discard;
-}
-
-void main_1() {
-  while (true) {
-    int x_30_phi = 0;
-    bool x_48_phi = false;
-    x_30_phi = 0;
-    while (true) {
-      int x_31 = 0;
-      const int x_30 = x_30_phi;
-      x_48_phi = false;
-      if ((x_30 < 10)) {
-      } else {
-        break;
-      }
-      const float x_37 = gl_FragCoord.y;
-      if ((x_37 < 0.0f)) {
-        const float x_42 = gl_FragCoord.x;
-        if ((x_42 < 0.0f)) {
-          x_48_phi = false;
-          break;
-        } else {
-          {
-            x_31 = (x_30 + 1);
-            x_30_phi = x_31;
-          }
-          continue;
-        }
-        {
-          x_31 = (x_30 + 1);
-          x_30_phi = x_31;
-        }
-        continue;
-      }
-      x_47();
-      x_48_phi = true;
-      break;
-      {
-        x_31 = (x_30 + 1);
-        x_30_phi = x_31;
-      }
-    }
-    if (x_48_phi) {
-      break;
-    }
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 17aa773..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void x_47() {
-  discard_fragment();
-}
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  while (true) {
-    int x_30_phi = 0;
-    bool x_48_phi = false;
-    x_30_phi = 0;
-    while (true) {
-      int x_31 = 0;
-      int const x_30 = x_30_phi;
-      x_48_phi = false;
-      if ((x_30 < 10)) {
-      } else {
-        break;
-      }
-      float const x_37 = (*(tint_symbol_3)).y;
-      if ((x_37 < 0.0f)) {
-        float const x_42 = (*(tint_symbol_3)).x;
-        if ((x_42 < 0.0f)) {
-          x_48_phi = false;
-          break;
-        } else {
-          {
-            x_31 = as_type<int>((as_type<uint>(x_30) + as_type<uint>(1)));
-            x_30_phi = x_31;
-          }
-          continue;
-        }
-        {
-          x_31 = as_type<int>((as_type<uint>(x_30) + as_type<uint>(1)));
-          x_30_phi = x_31;
-        }
-        continue;
-      }
-      x_47();
-      x_48_phi = true;
-      break;
-      {
-        x_31 = as_type<int>((as_type<uint>(x_30) + as_type<uint>(1)));
-        x_30_phi = x_31;
-      }
-    }
-    bool const x_48 = x_48_phi;
-    if (x_48) {
-      break;
-    }
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f839726..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,147 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 81
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %x_47 "x_47"
-               OpName %main_1 "main_1"
-               OpName %x_30_phi "x_30_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %x_31 "x_31"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %28 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-      %false = OpConstantFalse %bool
-     %int_10 = OpConstant %int 10
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-     %uint_0 = OpConstant %uint 0
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %67 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out %v4float
-       %x_47 = OpFunction %void None %11
-         %14 = OpLabel
-               OpKill
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %11
-         %16 = OpLabel
-   %x_30_phi = OpVariable %_ptr_Function_int Function %24
-   %x_48_phi = OpVariable %_ptr_Function_bool Function %28
-       %x_31 = OpVariable %_ptr_Function_int Function %24
-               OpBranch %17
-         %17 = OpLabel
-               OpLoopMerge %18 %19 None
-               OpBranch %20
-         %20 = OpLabel
-               OpStore %x_30_phi %int_0
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %35 = OpLoad %int %x_30_phi
-               OpStore %x_48_phi %false
-         %38 = OpSLessThan %bool %35 %int_10
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %31
-         %39 = OpLabel
-         %45 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %46 = OpLoad %float %45
-         %48 = OpFOrdLessThan %bool %46 %float_0
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-         %52 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %53 = OpLoad %float %52
-         %54 = OpFOrdLessThan %bool %53 %float_0
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpStore %x_48_phi %false
-               OpBranch %31
-         %57 = OpLabel
-               OpBranch %32
-         %55 = OpLabel
-               OpBranch %32
-         %49 = OpLabel
-         %58 = OpFunctionCall %void %x_47
-               OpStore %x_48_phi %true
-               OpBranch %31
-         %32 = OpLabel
-         %61 = OpIAdd %int %35 %int_1
-               OpStore %x_31 %61
-         %62 = OpLoad %int %x_31
-               OpStore %x_30_phi %62
-               OpBranch %30
-         %31 = OpLabel
-         %63 = OpLoad %bool %x_48_phi
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-               OpBranch %18
-         %64 = OpLabel
-               OpStore %x_GLF_color %67
-               OpBranch %18
-         %19 = OpLabel
-               OpBranch %17
-         %18 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %72 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %73 = OpFunctionCall %void %main_1
-         %74 = OpLoad %v4float %x_GLF_color
-         %75 = OpCompositeConstruct %main_out %74
-               OpReturnValue %75
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %77 = OpLabel
-         %79 = OpLoad %v4float %gl_FragCoord_param_1
-         %78 = OpFunctionCall %main_out %main_inner %79
-         %80 = OpCompositeExtract %v4float %78 0
-               OpStore %x_GLF_color_1_1 %80
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 83948ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,62 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn x_47() {
-  discard;
-}
-
-fn main_1() {
-  loop {
-    var x_30_phi : i32;
-    var x_48_phi : bool;
-    x_30_phi = 0;
-    loop {
-      var x_31 : i32;
-      let x_30 : i32 = x_30_phi;
-      x_48_phi = false;
-      if ((x_30 < 10)) {
-      } else {
-        break;
-      }
-      let x_37 : f32 = gl_FragCoord.y;
-      if ((x_37 < 0.0)) {
-        let x_42 : f32 = gl_FragCoord.x;
-        if ((x_42 < 0.0)) {
-          x_48_phi = false;
-          break;
-        } else {
-          continue;
-        }
-        continue;
-      }
-      x_47();
-      x_48_phi = true;
-      break;
-
-      continuing {
-        x_31 = (x_30 + 1);
-        x_30_phi = x_31;
-      }
-    }
-    let x_48 : bool = x_48_phi;
-    if (x_48) {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7a092ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void x_47() {
-  discard;
-}
-
-void main_1() {
-  while (true) {
-    int x_30_phi = 0;
-    bool x_48_phi = false;
-    x_30_phi = 0;
-    while (true) {
-      int x_31 = 0;
-      const int x_30 = x_30_phi;
-      x_48_phi = false;
-      if ((x_30 < 10)) {
-      } else {
-        break;
-      }
-      const float x_37 = gl_FragCoord.y;
-      if ((x_37 < 0.0f)) {
-        const float x_42 = gl_FragCoord.x;
-        if ((x_42 < 0.0f)) {
-          x_48_phi = false;
-          break;
-        } else {
-          {
-            x_31 = (x_30 + 1);
-            x_30_phi = x_31;
-          }
-          continue;
-        }
-        {
-          x_31 = (x_30 + 1);
-          x_30_phi = x_31;
-        }
-        continue;
-      }
-      x_47();
-      x_48_phi = true;
-      break;
-      {
-        x_31 = (x_30 + 1);
-        x_30_phi = x_31;
-      }
-    }
-    if (x_48_phi) {
-      break;
-    }
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 17aa773..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void x_47() {
-  discard_fragment();
-}
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  while (true) {
-    int x_30_phi = 0;
-    bool x_48_phi = false;
-    x_30_phi = 0;
-    while (true) {
-      int x_31 = 0;
-      int const x_30 = x_30_phi;
-      x_48_phi = false;
-      if ((x_30 < 10)) {
-      } else {
-        break;
-      }
-      float const x_37 = (*(tint_symbol_3)).y;
-      if ((x_37 < 0.0f)) {
-        float const x_42 = (*(tint_symbol_3)).x;
-        if ((x_42 < 0.0f)) {
-          x_48_phi = false;
-          break;
-        } else {
-          {
-            x_31 = as_type<int>((as_type<uint>(x_30) + as_type<uint>(1)));
-            x_30_phi = x_31;
-          }
-          continue;
-        }
-        {
-          x_31 = as_type<int>((as_type<uint>(x_30) + as_type<uint>(1)));
-          x_30_phi = x_31;
-        }
-        continue;
-      }
-      x_47();
-      x_48_phi = true;
-      break;
-      {
-        x_31 = as_type<int>((as_type<uint>(x_30) + as_type<uint>(1)));
-        x_30_phi = x_31;
-      }
-    }
-    bool const x_48 = x_48_phi;
-    if (x_48) {
-      break;
-    }
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f839726..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,147 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 81
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %x_47 "x_47"
-               OpName %main_1 "main_1"
-               OpName %x_30_phi "x_30_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %x_31 "x_31"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %28 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-      %false = OpConstantFalse %bool
-     %int_10 = OpConstant %int 10
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-     %uint_0 = OpConstant %uint 0
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %67 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out %v4float
-       %x_47 = OpFunction %void None %11
-         %14 = OpLabel
-               OpKill
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %11
-         %16 = OpLabel
-   %x_30_phi = OpVariable %_ptr_Function_int Function %24
-   %x_48_phi = OpVariable %_ptr_Function_bool Function %28
-       %x_31 = OpVariable %_ptr_Function_int Function %24
-               OpBranch %17
-         %17 = OpLabel
-               OpLoopMerge %18 %19 None
-               OpBranch %20
-         %20 = OpLabel
-               OpStore %x_30_phi %int_0
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %35 = OpLoad %int %x_30_phi
-               OpStore %x_48_phi %false
-         %38 = OpSLessThan %bool %35 %int_10
-               OpSelectionMerge %39 None
-               OpBranchConditional %38 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %31
-         %39 = OpLabel
-         %45 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %46 = OpLoad %float %45
-         %48 = OpFOrdLessThan %bool %46 %float_0
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-         %52 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %53 = OpLoad %float %52
-         %54 = OpFOrdLessThan %bool %53 %float_0
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpStore %x_48_phi %false
-               OpBranch %31
-         %57 = OpLabel
-               OpBranch %32
-         %55 = OpLabel
-               OpBranch %32
-         %49 = OpLabel
-         %58 = OpFunctionCall %void %x_47
-               OpStore %x_48_phi %true
-               OpBranch %31
-         %32 = OpLabel
-         %61 = OpIAdd %int %35 %int_1
-               OpStore %x_31 %61
-         %62 = OpLoad %int %x_31
-               OpStore %x_30_phi %62
-               OpBranch %30
-         %31 = OpLabel
-         %63 = OpLoad %bool %x_48_phi
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-               OpBranch %18
-         %64 = OpLabel
-               OpStore %x_GLF_color %67
-               OpBranch %18
-         %19 = OpLabel
-               OpBranch %17
-         %18 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %72 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %73 = OpFunctionCall %void %main_1
-         %74 = OpLoad %v4float %x_GLF_color
-         %75 = OpCompositeConstruct %main_out %74
-               OpReturnValue %75
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %77 = OpLabel
-         %79 = OpLoad %v4float %gl_FragCoord_param_1
-         %78 = OpFunctionCall %main_out %main_inner %79
-         %80 = OpCompositeExtract %v4float %78 0
-               OpStore %x_GLF_color_1_1 %80
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 83948ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discard-in-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,62 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn x_47() {
-  discard;
-}
-
-fn main_1() {
-  loop {
-    var x_30_phi : i32;
-    var x_48_phi : bool;
-    x_30_phi = 0;
-    loop {
-      var x_31 : i32;
-      let x_30 : i32 = x_30_phi;
-      x_48_phi = false;
-      if ((x_30 < 10)) {
-      } else {
-        break;
-      }
-      let x_37 : f32 = gl_FragCoord.y;
-      if ((x_37 < 0.0)) {
-        let x_42 : f32 = gl_FragCoord.x;
-        if ((x_42 < 0.0)) {
-          x_48_phi = false;
-          break;
-        } else {
-          continue;
-        }
-        continue;
-      }
-      x_47();
-      x_48_phi = true;
-      break;
-
-      continuing {
-        x_31 = (x_30 + 1);
-        x_30_phi = x_31;
-      }
-    }
-    let x_48 : bool = x_48_phi;
-    if (x_48) {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index aa9c06c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int ll = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const float x_30 = gl_FragCoord.x;
-  if ((int(x_30) < 2000)) {
-  } else {
-    ll = 0;
-    while (true) {
-      const float x_41 = gl_FragCoord.x;
-      if ((x_41 < 0.0f)) {
-        discard;
-      }
-      if ((ll >= 5)) {
-        break;
-      }
-      {
-        ll = (ll + 1);
-      }
-    }
-    const float x_49 = gl_FragCoord.x;
-    if ((int(x_49) >= 2000)) {
-      discard;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2d28755..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int ll = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_30 = (*(tint_symbol_4)).x;
-  if ((int(x_30) < 2000)) {
-  } else {
-    ll = 0;
-    while (true) {
-      float const x_41 = (*(tint_symbol_4)).x;
-      if ((x_41 < 0.0f)) {
-        discard_fragment();
-      }
-      int const x_6 = ll;
-      if ((x_6 >= 5)) {
-        break;
-      }
-      {
-        int const x_7 = ll;
-        ll = as_type<int>((as_type<uint>(x_7) + as_type<uint>(1)));
-      }
-    }
-    float const x_49 = (*(tint_symbol_4)).x;
-    if ((int(x_49) >= 2000)) {
-      discard_fragment();
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ff81c93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,122 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %ll "ll"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %int_2000 = OpConstant %int 2000
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-      %int_5 = OpConstant %int 5
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %ll = OpVariable %_ptr_Function_int Function %18
-               OpStore %x_GLF_color %21
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpConvertFToS %int %26
-         %29 = OpSLessThan %bool %27 %int_2000
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %ll %int_0
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %40 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpKill
-         %42 = OpLabel
-         %44 = OpLoad %int %ll
-         %46 = OpSGreaterThanEqual %bool %44 %int_5
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-               OpBranch %36
-         %47 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %49 = OpLoad %int %ll
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %ll %51
-               OpBranch %35
-         %36 = OpLabel
-         %52 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %53 = OpLoad %float %52
-         %54 = OpConvertFToS %int %53
-         %55 = OpSGreaterThanEqual %bool %54 %int_2000
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-               OpKill
-         %56 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %62 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %67 = OpLabel
-         %69 = OpLoad %v4float %gl_FragCoord_param_1
-         %68 = OpFunctionCall %main_out %main_inner %69
-         %70 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 926c273..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var ll : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_30 : f32 = gl_FragCoord.x;
-  if ((i32(x_30) < 2000)) {
-  } else {
-    ll = 0;
-    loop {
-      let x_41 : f32 = gl_FragCoord.x;
-      if ((x_41 < 0.0)) {
-        discard;
-      }
-      let x_6 : i32 = ll;
-      if ((x_6 >= 5)) {
-        break;
-      }
-
-      continuing {
-        let x_7 : i32 = ll;
-        ll = (x_7 + 1);
-      }
-    }
-    let x_49 : f32 = gl_FragCoord.x;
-    if ((i32(x_49) >= 2000)) {
-      discard;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index aa9c06c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int ll = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const float x_30 = gl_FragCoord.x;
-  if ((int(x_30) < 2000)) {
-  } else {
-    ll = 0;
-    while (true) {
-      const float x_41 = gl_FragCoord.x;
-      if ((x_41 < 0.0f)) {
-        discard;
-      }
-      if ((ll >= 5)) {
-        break;
-      }
-      {
-        ll = (ll + 1);
-      }
-    }
-    const float x_49 = gl_FragCoord.x;
-    if ((int(x_49) >= 2000)) {
-      discard;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2d28755..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int ll = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_30 = (*(tint_symbol_4)).x;
-  if ((int(x_30) < 2000)) {
-  } else {
-    ll = 0;
-    while (true) {
-      float const x_41 = (*(tint_symbol_4)).x;
-      if ((x_41 < 0.0f)) {
-        discard_fragment();
-      }
-      int const x_6 = ll;
-      if ((x_6 >= 5)) {
-        break;
-      }
-      {
-        int const x_7 = ll;
-        ll = as_type<int>((as_type<uint>(x_7) + as_type<uint>(1)));
-      }
-    }
-    float const x_49 = (*(tint_symbol_4)).x;
-    if ((int(x_49) >= 2000)) {
-      discard_fragment();
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ff81c93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,122 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 71
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %ll "ll"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %int_2000 = OpConstant %int 2000
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-      %int_5 = OpConstant %int 5
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %ll = OpVariable %_ptr_Function_int Function %18
-               OpStore %x_GLF_color %21
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpConvertFToS %int %26
-         %29 = OpSLessThan %bool %27 %int_2000
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpStore %ll %int_0
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %40 %float_0
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpKill
-         %42 = OpLabel
-         %44 = OpLoad %int %ll
-         %46 = OpSGreaterThanEqual %bool %44 %int_5
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-               OpBranch %36
-         %47 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-         %49 = OpLoad %int %ll
-         %51 = OpIAdd %int %49 %int_1
-               OpStore %ll %51
-               OpBranch %35
-         %36 = OpLabel
-         %52 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %53 = OpLoad %float %52
-         %54 = OpConvertFToS %int %53
-         %55 = OpSGreaterThanEqual %bool %54 %int_2000
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-               OpKill
-         %56 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %62 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %v4float %x_GLF_color
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %67 = OpLabel
-         %69 = OpLoad %v4float %gl_FragCoord_param_1
-         %68 = OpFunctionCall %main_out %main_inner %69
-         %70 = OpCompositeExtract %v4float %68 0
-               OpStore %x_GLF_color_1_1 %70
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 926c273..0000000
--- a/test/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var ll : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_30 : f32 = gl_FragCoord.x;
-  if ((i32(x_30) < 2000)) {
-  } else {
-    ll = 0;
-    loop {
-      let x_41 : f32 = gl_FragCoord.x;
-      if ((x_41 < 0.0)) {
-        discard;
-      }
-      let x_6 : i32 = ll;
-      if ((x_6 >= 5)) {
-        break;
-      }
-
-      continuing {
-        let x_7 : i32 = ll;
-        ll = (x_7 + 1);
-      }
-    }
-    let x_49 : f32 = gl_FragCoord.x;
-    if ((i32(x_49) >= 2000)) {
-      discard;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 47691f0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,51 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 f_() {
-  int iteration = 0;
-  int k = 0;
-  iteration = 0;
-  k = 0;
-  {
-    for(; (k < 100); k = (k + 1)) {
-      iteration = (iteration + 1);
-    }
-  }
-  if ((iteration < 100)) {
-    return float3(1.0f, float((iteration - 1)), float((iteration - 1)));
-  } else {
-    while (true) {
-      while (true) {
-        return float3(1.0f, 0.0f, 0.0f);
-      }
-      return float3(0.0f, 0.0f, 0.0f);
-    }
-    return float3(0.0f, 0.0f, 0.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  const float3 x_35 = f_();
-  x_GLF_color = float4(x_35.x, x_35.y, x_35.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index b333a22..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 f_() {
-  int iteration = 0;
-  int k = 0;
-  iteration = 0;
-  k = 0;
-  while (true) {
-    int const x_7 = k;
-    if ((x_7 < 100)) {
-    } else {
-      break;
-    }
-    int const x_8 = iteration;
-    iteration = as_type<int>((as_type<uint>(x_8) + as_type<uint>(1)));
-    {
-      int const x_10 = k;
-      k = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-    }
-  }
-  int const x_12 = iteration;
-  if ((x_12 < 100)) {
-    int const x_13 = iteration;
-    int const x_15 = iteration;
-    return float3(1.0f, float(as_type<int>((as_type<uint>(x_13) - as_type<uint>(1)))), float(as_type<int>((as_type<uint>(x_15) - as_type<uint>(1)))));
-  } else {
-    while (true) {
-      while (true) {
-        return float3(1.0f, 0.0f, 0.0f);
-      }
-      return float3(0.0f, 0.0f, 0.0f);
-    }
-    return float3(0.0f, 0.0f, 0.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float3 const x_35 = f_();
-  *(tint_symbol_3) = float4(x_35.x, x_35.y, x_35.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index fae65db..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_ "f_"
-               OpName %iteration "iteration"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %56 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %57 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %58 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-         %f_ = OpFunction %v3float None %8
-         %11 = OpLabel
-  %iteration = OpVariable %_ptr_Function_int Function %15
-          %k = OpVariable %_ptr_Function_int Function %15
-               OpStore %iteration %int_0
-               OpStore %k %int_0
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-         %22 = OpLoad %int %k
-         %24 = OpSLessThan %bool %22 %int_100
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %28
-         %27 = OpLabel
-               OpBranch %26
-         %28 = OpLabel
-               OpBranch %19
-         %26 = OpLabel
-         %29 = OpLoad %int %iteration
-         %31 = OpIAdd %int %29 %int_1
-               OpStore %iteration %31
-               OpBranch %20
-         %20 = OpLabel
-         %32 = OpLoad %int %k
-         %33 = OpIAdd %int %32 %int_1
-               OpStore %k %33
-               OpBranch %18
-         %19 = OpLabel
-         %34 = OpLoad %int %iteration
-         %35 = OpSLessThan %bool %34 %int_100
-               OpSelectionMerge %36 None
-               OpBranchConditional %35 %37 %38
-         %37 = OpLabel
-         %39 = OpLoad %int %iteration
-         %40 = OpLoad %int %iteration
-         %43 = OpISub %int %39 %int_1
-         %42 = OpConvertSToF %float %43
-         %45 = OpISub %int %40 %int_1
-         %44 = OpConvertSToF %float %45
-         %46 = OpCompositeConstruct %v3float %float_1 %42 %44
-               OpReturnValue %46
-         %38 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-               OpLoopMerge %52 %53 None
-               OpBranch %54
-         %54 = OpLabel
-               OpReturnValue %56
-         %53 = OpLabel
-               OpBranch %51
-         %52 = OpLabel
-               OpReturnValue %57
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-               OpReturnValue %57
-         %36 = OpLabel
-               OpReturnValue %57
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %v3float %f_
-         %63 = OpCompositeExtract %float %62 0
-         %64 = OpCompositeExtract %float %62 1
-         %65 = OpCompositeExtract %float %62 2
-         %66 = OpCompositeConstruct %v4float %63 %64 %65 %float_1
-               OpStore %x_GLF_color %66
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %58
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c2fa551..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_() -> vec3<f32> {
-  var iteration : i32;
-  var k : i32;
-  iteration = 0;
-  k = 0;
-  loop {
-    let x_7 : i32 = k;
-    if ((x_7 < 100)) {
-    } else {
-      break;
-    }
-    let x_8 : i32 = iteration;
-    iteration = (x_8 + 1);
-
-    continuing {
-      let x_10 : i32 = k;
-      k = (x_10 + 1);
-    }
-  }
-  let x_12 : i32 = iteration;
-  if ((x_12 < 100)) {
-    let x_13 : i32 = iteration;
-    let x_15 : i32 = iteration;
-    return vec3<f32>(1.0, f32((x_13 - 1)), f32((x_15 - 1)));
-  } else {
-    loop {
-      loop {
-        return vec3<f32>(1.0, 0.0, 0.0);
-      }
-      return vec3<f32>(0.0, 0.0, 0.0);
-    }
-    return vec3<f32>(0.0, 0.0, 0.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  let x_35 : vec3<f32> = f_();
-  x_GLF_color = vec4<f32>(x_35.x, x_35.y, x_35.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 47691f0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,51 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 f_() {
-  int iteration = 0;
-  int k = 0;
-  iteration = 0;
-  k = 0;
-  {
-    for(; (k < 100); k = (k + 1)) {
-      iteration = (iteration + 1);
-    }
-  }
-  if ((iteration < 100)) {
-    return float3(1.0f, float((iteration - 1)), float((iteration - 1)));
-  } else {
-    while (true) {
-      while (true) {
-        return float3(1.0f, 0.0f, 0.0f);
-      }
-      return float3(0.0f, 0.0f, 0.0f);
-    }
-    return float3(0.0f, 0.0f, 0.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  const float3 x_35 = f_();
-  x_GLF_color = float4(x_35.x, x_35.y, x_35.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index b333a22..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 f_() {
-  int iteration = 0;
-  int k = 0;
-  iteration = 0;
-  k = 0;
-  while (true) {
-    int const x_7 = k;
-    if ((x_7 < 100)) {
-    } else {
-      break;
-    }
-    int const x_8 = iteration;
-    iteration = as_type<int>((as_type<uint>(x_8) + as_type<uint>(1)));
-    {
-      int const x_10 = k;
-      k = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-    }
-  }
-  int const x_12 = iteration;
-  if ((x_12 < 100)) {
-    int const x_13 = iteration;
-    int const x_15 = iteration;
-    return float3(1.0f, float(as_type<int>((as_type<uint>(x_13) - as_type<uint>(1)))), float(as_type<int>((as_type<uint>(x_15) - as_type<uint>(1)))));
-  } else {
-    while (true) {
-      while (true) {
-        return float3(1.0f, 0.0f, 0.0f);
-      }
-      return float3(0.0f, 0.0f, 0.0f);
-    }
-    return float3(0.0f, 0.0f, 0.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float3 const x_35 = f_();
-  *(tint_symbol_3) = float4(x_35.x, x_35.y, x_35.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index fae65db..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_ "f_"
-               OpName %iteration "iteration"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %56 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %57 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %58 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-         %f_ = OpFunction %v3float None %8
-         %11 = OpLabel
-  %iteration = OpVariable %_ptr_Function_int Function %15
-          %k = OpVariable %_ptr_Function_int Function %15
-               OpStore %iteration %int_0
-               OpStore %k %int_0
-               OpBranch %18
-         %18 = OpLabel
-               OpLoopMerge %19 %20 None
-               OpBranch %21
-         %21 = OpLabel
-         %22 = OpLoad %int %k
-         %24 = OpSLessThan %bool %22 %int_100
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %28
-         %27 = OpLabel
-               OpBranch %26
-         %28 = OpLabel
-               OpBranch %19
-         %26 = OpLabel
-         %29 = OpLoad %int %iteration
-         %31 = OpIAdd %int %29 %int_1
-               OpStore %iteration %31
-               OpBranch %20
-         %20 = OpLabel
-         %32 = OpLoad %int %k
-         %33 = OpIAdd %int %32 %int_1
-               OpStore %k %33
-               OpBranch %18
-         %19 = OpLabel
-         %34 = OpLoad %int %iteration
-         %35 = OpSLessThan %bool %34 %int_100
-               OpSelectionMerge %36 None
-               OpBranchConditional %35 %37 %38
-         %37 = OpLabel
-         %39 = OpLoad %int %iteration
-         %40 = OpLoad %int %iteration
-         %43 = OpISub %int %39 %int_1
-         %42 = OpConvertSToF %float %43
-         %45 = OpISub %int %40 %int_1
-         %44 = OpConvertSToF %float %45
-         %46 = OpCompositeConstruct %v3float %float_1 %42 %44
-               OpReturnValue %46
-         %38 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-               OpLoopMerge %52 %53 None
-               OpBranch %54
-         %54 = OpLabel
-               OpReturnValue %56
-         %53 = OpLabel
-               OpBranch %51
-         %52 = OpLabel
-               OpReturnValue %57
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-               OpReturnValue %57
-         %36 = OpLabel
-               OpReturnValue %57
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %v3float %f_
-         %63 = OpCompositeExtract %float %62 0
-         %64 = OpCompositeExtract %float %62 1
-         %65 = OpCompositeExtract %float %62 2
-         %66 = OpCompositeConstruct %v4float %63 %64 %65 %float_1
-               OpStore %x_GLF_color %66
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %58
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c2fa551..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-false-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,54 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_() -> vec3<f32> {
-  var iteration : i32;
-  var k : i32;
-  iteration = 0;
-  k = 0;
-  loop {
-    let x_7 : i32 = k;
-    if ((x_7 < 100)) {
-    } else {
-      break;
-    }
-    let x_8 : i32 = iteration;
-    iteration = (x_8 + 1);
-
-    continuing {
-      let x_10 : i32 = k;
-      k = (x_10 + 1);
-    }
-  }
-  let x_12 : i32 = iteration;
-  if ((x_12 < 100)) {
-    let x_13 : i32 = iteration;
-    let x_15 : i32 = iteration;
-    return vec3<f32>(1.0, f32((x_13 - 1)), f32((x_15 - 1)));
-  } else {
-    loop {
-      loop {
-        return vec3<f32>(1.0, 0.0, 0.0);
-      }
-      return vec3<f32>(0.0, 0.0, 0.0);
-    }
-    return vec3<f32>(0.0, 0.0, 0.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  let x_35 : vec3<f32> = f_();
-  x_GLF_color = vec4<f32>(x_35.x, x_35.y, x_35.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 610bfdc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,77 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  int loop_count = 0;
-  int x_38_phi = 0;
-  loop_count = 0;
-  x_38_phi = 0;
-  while (true) {
-    int x_39 = 0;
-    int x_45_phi = 0;
-    const int x_43 = (x_38_phi + 1);
-    loop_count = x_43;
-    x_45_phi = x_43;
-    while (true) {
-      x_39 = (x_45_phi + 1);
-      loop_count = x_39;
-      const float x_50 = asfloat(x_7[0].x);
-      const float x_52 = asfloat(x_7[0].y);
-      if ((x_50 < x_52)) {
-        return 1;
-      }
-      const float x_57 = asfloat(x_7[0].x);
-      const float x_59 = asfloat(x_7[0].y);
-      if ((x_57 < x_59)) {
-        break;
-      }
-      {
-        x_45_phi = x_39;
-        if ((x_39 < 100)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      x_38_phi = x_39;
-      if ((x_39 < 100)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return 0;
-}
-
-void main_1() {
-  const int x_31 = func_();
-  if ((x_31 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7ddba58..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_(constant buf0& x_7) {
-  int loop_count = 0;
-  int x_38_phi = 0;
-  loop_count = 0;
-  x_38_phi = 0;
-  while (true) {
-    int x_39 = 0;
-    int x_45_phi = 0;
-    int const x_38 = x_38_phi;
-    int const x_43 = as_type<int>((as_type<uint>(x_38) + as_type<uint>(1)));
-    loop_count = x_43;
-    x_45_phi = x_43;
-    while (true) {
-      int const x_45 = x_45_phi;
-      x_39 = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-      loop_count = x_39;
-      float const x_50 = x_7.injectionSwitch.x;
-      float const x_52 = x_7.injectionSwitch.y;
-      if ((x_50 < x_52)) {
-        return 1;
-      }
-      float const x_57 = x_7.injectionSwitch.x;
-      float const x_59 = x_7.injectionSwitch.y;
-      if ((x_57 < x_59)) {
-        break;
-      }
-      {
-        x_45_phi = x_39;
-        if ((x_39 < 100)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      x_38_phi = x_39;
-      if ((x_39 < 100)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int const x_31 = func_(x_7);
-  if ((x_31 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 85a1114..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,156 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %loop_count "loop_count"
-               OpName %x_38_phi "x_38_phi"
-               OpName %x_39 "x_39"
-               OpName %x_45_phi "x_45_phi"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-         %12 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %int_100 = OpConstant %int 100
-       %void = OpTypeVoid
-         %63 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %74 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %75 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %12
-         %15 = OpLabel
- %loop_count = OpVariable %_ptr_Function_int Function %18
-   %x_38_phi = OpVariable %_ptr_Function_int Function %18
-       %x_39 = OpVariable %_ptr_Function_int Function %18
-   %x_45_phi = OpVariable %_ptr_Function_int Function %18
-               OpStore %loop_count %int_0
-               OpStore %x_38_phi %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %27 = OpLoad %int %x_38_phi
-         %29 = OpIAdd %int %27 %int_1
-               OpStore %loop_count %29
-               OpStore %x_45_phi %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %x_45_phi
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %x_39 %35
-         %36 = OpLoad %int %x_39
-               OpStore %loop_count %36
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %41 = OpLoad %float %40
-         %43 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %44 = OpLoad %float %43
-         %45 = OpFOrdLessThan %bool %41 %44
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %47
-         %48 = OpLabel
-               OpReturnValue %int_1
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %50 = OpLoad %float %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %52 = OpLoad %float %51
-         %53 = OpFOrdLessThan %bool %50 %52
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %54
-         %55 = OpLabel
-               OpBranch %31
-         %54 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %56 = OpLoad %int %x_39
-               OpStore %x_45_phi %56
-         %57 = OpLoad %int %x_39
-         %59 = OpSLessThan %bool %57 %int_100
-               OpBranchConditional %59 %30 %31
-         %31 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-         %60 = OpLoad %int %x_39
-               OpStore %x_38_phi %60
-         %61 = OpLoad %int %x_39
-         %62 = OpSLessThan %bool %61 %int_100
-               OpBranchConditional %62 %21 %22
-         %22 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %int %func_
-         %68 = OpIEqual %bool %67 %int_1
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-               OpStore %x_GLF_color %74
-               OpBranch %69
-         %71 = OpLabel
-               OpStore %x_GLF_color %75
-               OpBranch %69
-         %69 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %63
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 43fb691..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  var loop_count : i32;
-  var x_38_phi : i32;
-  loop_count = 0;
-  x_38_phi = 0;
-  loop {
-    var x_39 : i32;
-    var x_45_phi : i32;
-    let x_38 : i32 = x_38_phi;
-    let x_43 : i32 = (x_38 + 1);
-    loop_count = x_43;
-    x_45_phi = x_43;
-    loop {
-      let x_45 : i32 = x_45_phi;
-      x_39 = (x_45 + 1);
-      loop_count = x_39;
-      let x_50 : f32 = x_7.injectionSwitch.x;
-      let x_52 : f32 = x_7.injectionSwitch.y;
-      if ((x_50 < x_52)) {
-        return 1;
-      }
-      let x_57 : f32 = x_7.injectionSwitch.x;
-      let x_59 : f32 = x_7.injectionSwitch.y;
-      if ((x_57 < x_59)) {
-        break;
-      }
-
-      continuing {
-        x_45_phi = x_39;
-        if ((x_39 < 100)) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      x_38_phi = x_39;
-      if ((x_39 < 100)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return 0;
-}
-
-fn main_1() {
-  let x_31 : i32 = func_();
-  if ((x_31 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 610bfdc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,77 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  int loop_count = 0;
-  int x_38_phi = 0;
-  loop_count = 0;
-  x_38_phi = 0;
-  while (true) {
-    int x_39 = 0;
-    int x_45_phi = 0;
-    const int x_43 = (x_38_phi + 1);
-    loop_count = x_43;
-    x_45_phi = x_43;
-    while (true) {
-      x_39 = (x_45_phi + 1);
-      loop_count = x_39;
-      const float x_50 = asfloat(x_7[0].x);
-      const float x_52 = asfloat(x_7[0].y);
-      if ((x_50 < x_52)) {
-        return 1;
-      }
-      const float x_57 = asfloat(x_7[0].x);
-      const float x_59 = asfloat(x_7[0].y);
-      if ((x_57 < x_59)) {
-        break;
-      }
-      {
-        x_45_phi = x_39;
-        if ((x_39 < 100)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      x_38_phi = x_39;
-      if ((x_39 < 100)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return 0;
-}
-
-void main_1() {
-  const int x_31 = func_();
-  if ((x_31 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7ddba58..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_(constant buf0& x_7) {
-  int loop_count = 0;
-  int x_38_phi = 0;
-  loop_count = 0;
-  x_38_phi = 0;
-  while (true) {
-    int x_39 = 0;
-    int x_45_phi = 0;
-    int const x_38 = x_38_phi;
-    int const x_43 = as_type<int>((as_type<uint>(x_38) + as_type<uint>(1)));
-    loop_count = x_43;
-    x_45_phi = x_43;
-    while (true) {
-      int const x_45 = x_45_phi;
-      x_39 = as_type<int>((as_type<uint>(x_45) + as_type<uint>(1)));
-      loop_count = x_39;
-      float const x_50 = x_7.injectionSwitch.x;
-      float const x_52 = x_7.injectionSwitch.y;
-      if ((x_50 < x_52)) {
-        return 1;
-      }
-      float const x_57 = x_7.injectionSwitch.x;
-      float const x_59 = x_7.injectionSwitch.y;
-      if ((x_57 < x_59)) {
-        break;
-      }
-      {
-        x_45_phi = x_39;
-        if ((x_39 < 100)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      x_38_phi = x_39;
-      if ((x_39 < 100)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int const x_31 = func_(x_7);
-  if ((x_31 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 85a1114..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,156 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %loop_count "loop_count"
-               OpName %x_38_phi "x_38_phi"
-               OpName %x_39 "x_39"
-               OpName %x_45_phi "x_45_phi"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-         %12 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %int_100 = OpConstant %int 100
-       %void = OpTypeVoid
-         %63 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %74 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %75 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %12
-         %15 = OpLabel
- %loop_count = OpVariable %_ptr_Function_int Function %18
-   %x_38_phi = OpVariable %_ptr_Function_int Function %18
-       %x_39 = OpVariable %_ptr_Function_int Function %18
-   %x_45_phi = OpVariable %_ptr_Function_int Function %18
-               OpStore %loop_count %int_0
-               OpStore %x_38_phi %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %27 = OpLoad %int %x_38_phi
-         %29 = OpIAdd %int %27 %int_1
-               OpStore %loop_count %29
-               OpStore %x_45_phi %29
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %x_45_phi
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %x_39 %35
-         %36 = OpLoad %int %x_39
-               OpStore %loop_count %36
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %41 = OpLoad %float %40
-         %43 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %44 = OpLoad %float %43
-         %45 = OpFOrdLessThan %bool %41 %44
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %47
-         %48 = OpLabel
-               OpReturnValue %int_1
-         %47 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %50 = OpLoad %float %49
-         %51 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %52 = OpLoad %float %51
-         %53 = OpFOrdLessThan %bool %50 %52
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %54
-         %55 = OpLabel
-               OpBranch %31
-         %54 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %56 = OpLoad %int %x_39
-               OpStore %x_45_phi %56
-         %57 = OpLoad %int %x_39
-         %59 = OpSLessThan %bool %57 %int_100
-               OpBranchConditional %59 %30 %31
-         %31 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-         %60 = OpLoad %int %x_39
-               OpStore %x_38_phi %60
-         %61 = OpLoad %int %x_39
-         %62 = OpSLessThan %bool %61 %int_100
-               OpBranchConditional %62 %21 %22
-         %22 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %int %func_
-         %68 = OpIEqual %bool %67 %int_1
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-               OpStore %x_GLF_color %74
-               OpBranch %69
-         %71 = OpLabel
-               OpStore %x_GLF_color %75
-               OpBranch %69
-         %69 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %63
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 43fb691..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-if-return/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,76 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  var loop_count : i32;
-  var x_38_phi : i32;
-  loop_count = 0;
-  x_38_phi = 0;
-  loop {
-    var x_39 : i32;
-    var x_45_phi : i32;
-    let x_38 : i32 = x_38_phi;
-    let x_43 : i32 = (x_38 + 1);
-    loop_count = x_43;
-    x_45_phi = x_43;
-    loop {
-      let x_45 : i32 = x_45_phi;
-      x_39 = (x_45 + 1);
-      loop_count = x_39;
-      let x_50 : f32 = x_7.injectionSwitch.x;
-      let x_52 : f32 = x_7.injectionSwitch.y;
-      if ((x_50 < x_52)) {
-        return 1;
-      }
-      let x_57 : f32 = x_7.injectionSwitch.x;
-      let x_59 : f32 = x_7.injectionSwitch.y;
-      if ((x_57 < x_59)) {
-        break;
-      }
-
-      continuing {
-        x_45_phi = x_39;
-        if ((x_39 < 100)) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      x_38_phi = x_39;
-      if ((x_39 < 100)) {
-      } else {
-        break;
-      }
-    }
-  }
-  return 0;
-}
-
-fn main_1() {
-  let x_31 : i32 = func_();
-  if ((x_31 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 75839bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  if (true) {
-    const float x_23 = gl_FragCoord.x;
-    if ((x_23 < 0.0f)) {
-      while (true) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        {
-          const float x_32 = gl_FragCoord.x;
-          if ((x_32 < 0.0f)) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3c12e00..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  if (true) {
-    float const x_23 = (*(tint_symbol_4)).x;
-    if ((x_23 < 0.0f)) {
-      while (true) {
-        *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        {
-          float const x_32 = (*(tint_symbol_4)).x;
-          if ((x_32 < 0.0f)) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c60a59b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %17 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %37 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpStore %x_GLF_color %17
-               OpSelectionMerge %20 None
-               OpBranchConditional %true %21 %20
-         %21 = OpLabel
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpFOrdLessThan %bool %26 %float_0
-               OpSelectionMerge %28 None
-               OpBranchConditional %27 %29 %28
-         %29 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-               OpStore %x_GLF_color %17
-               OpBranch %32
-         %32 = OpLabel
-         %34 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %35 = OpLoad %float %34
-         %36 = OpFOrdLessThan %bool %35 %float_0
-               OpBranchConditional %36 %30 %31
-         %31 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %37
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %41 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %46 = OpLabel
-         %48 = OpLoad %v4float %gl_FragCoord_param_1
-         %47 = OpFunctionCall %main_out %main_inner %48
-         %49 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2c077a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  if (true) {
-    let x_23 : f32 = gl_FragCoord.x;
-    if ((x_23 < 0.0)) {
-      loop {
-        x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-
-        continuing {
-          let x_32 : f32 = gl_FragCoord.x;
-          if ((x_32 < 0.0)) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 75839bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  if (true) {
-    const float x_23 = gl_FragCoord.x;
-    if ((x_23 < 0.0f)) {
-      while (true) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        {
-          const float x_32 = gl_FragCoord.x;
-          if ((x_32 < 0.0f)) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3c12e00..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  if (true) {
-    float const x_23 = (*(tint_symbol_4)).x;
-    if ((x_23 < 0.0f)) {
-      while (true) {
-        *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        {
-          float const x_32 = (*(tint_symbol_4)).x;
-          if ((x_32 < 0.0f)) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c60a59b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %17 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %37 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-               OpStore %x_GLF_color %17
-               OpSelectionMerge %20 None
-               OpBranchConditional %true %21 %20
-         %21 = OpLabel
-         %25 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %26 = OpLoad %float %25
-         %27 = OpFOrdLessThan %bool %26 %float_0
-               OpSelectionMerge %28 None
-               OpBranchConditional %27 %29 %28
-         %29 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-               OpStore %x_GLF_color %17
-               OpBranch %32
-         %32 = OpLabel
-         %34 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %35 = OpLoad %float %34
-         %36 = OpFOrdLessThan %bool %35 %float_0
-               OpBranchConditional %36 %30 %31
-         %31 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-               OpBranch %20
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %37
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %41 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %46 = OpLabel
-         %48 = OpLoad %v4float %gl_FragCoord_param_1
-         %47 = OpFunctionCall %main_out %main_inner %48
-         %49 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %49
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2c077a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/do-while-loop-in-conditionals/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  if (true) {
-    let x_23 : f32 = gl_FragCoord.x;
-    if ((x_23 < 0.0)) {
-      loop {
-        x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-
-        continuing {
-          let x_32 : f32 = gl_FragCoord.x;
-          if ((x_32 < 0.0)) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.hlsl
deleted file mode 100644
index 7909f45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-RWByteAddressBuffer x_4 : register(u0, space0);
-
-void main_1() {
-  float2x2 x_30 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 x_30_phi = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_32_phi = 0;
-  x_4.Store(0u, asuint(42));
-  x_30_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  x_32_phi = 1;
-  while (true) {
-    int x_33 = 0;
-    x_30 = x_30_phi;
-    const int x_32 = x_32_phi;
-    if ((x_32 > 0)) {
-    } else {
-      break;
-    }
-    {
-      x_33 = (x_32 - 1);
-      x_30_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
-      x_32_phi = x_33;
-    }
-  }
-  const float2 x_41 = mul(float2x2((x_30[0u] - float2(1.0f, 0.0f)), (x_30[1u] - float2(0.0f, 1.0f))), float2(1.0f, 1.0f));
-  while (true) {
-    if ((1.0f < x_41.x)) {
-      break;
-    }
-    GroupMemoryBarrierWithGroupSync();
-    break;
-  }
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.msl
deleted file mode 100644
index 049c25a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct theSSBO {
-  /* 0x0000 */ int out_data;
-};
-
-void main_1(device theSSBO& x_4) {
-  float2x2 x_30 = float2x2(0.0f);
-  float2x2 x_30_phi = float2x2(0.0f);
-  int x_32_phi = 0;
-  x_4.out_data = 42;
-  x_30_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  x_32_phi = 1;
-  while (true) {
-    int x_33 = 0;
-    x_30 = x_30_phi;
-    int const x_32 = x_32_phi;
-    if ((x_32 > 0)) {
-    } else {
-      break;
-    }
-    {
-      x_33 = as_type<int>((as_type<uint>(x_32) - as_type<uint>(1)));
-      x_30_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
-      x_32_phi = x_33;
-    }
-  }
-  float2 const x_41 = (float2(1.0f, 1.0f) * float2x2((x_30[0u] - float2(1.0f, 0.0f)), (x_30[1u] - float2(0.0f, 1.0f))));
-  while (true) {
-    if ((1.0f < x_41.x)) {
-      break;
-    }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    break;
-  }
-  return;
-}
-
-kernel void tint_symbol(device theSSBO& x_4 [[buffer(0)]]) {
-  main_1(x_4);
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.spvasm
deleted file mode 100644
index a2f71c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,121 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %theSSBO "theSSBO"
-               OpMemberName %theSSBO 0 "out_data"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %x_30_phi "x_30_phi"
-               OpName %x_32_phi "x_32_phi"
-               OpName %x_33 "x_33"
-               OpName %main "main"
-               OpDecorate %theSSBO Block
-               OpMemberDecorate %theSSBO 0 Offset 0
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 0
-        %int = OpTypeInt 32 1
-    %theSSBO = OpTypeStruct %int
-%_ptr_StorageBuffer_theSSBO = OpTypePointer StorageBuffer %theSSBO
-        %x_4 = OpVariable %_ptr_StorageBuffer_theSSBO StorageBuffer
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %14 = OpConstantNull %mat2v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-     %int_42 = OpConstant %int 42
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v2float %float_0 %float_0
-         %26 = OpConstantComposite %mat2v2float %25 %25
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %43 = OpConstantComposite %v2float %float_1 %float_0
-         %44 = OpConstantComposite %v2float %float_0 %float_1
-         %45 = OpConstantComposite %mat2v2float %43 %44
-         %47 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_mat2v2float Function %14
-   %x_30_phi = OpVariable %_ptr_Function_mat2v2float Function %14
-   %x_32_phi = OpVariable %_ptr_Function_int Function %18
-       %x_33 = OpVariable %_ptr_Function_int Function %18
-         %22 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %22 %int_42
-               OpStore %x_30_phi %26
-               OpStore %x_32_phi %int_1
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-         %33 = OpLoad %mat2v2float %x_30_phi
-               OpStore %x_30 %33
-         %34 = OpLoad %int %x_32_phi
-         %36 = OpSGreaterThan %bool %34 %int_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpBranch %38
-         %40 = OpLabel
-               OpBranch %29
-         %38 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-         %41 = OpISub %int %34 %int_1
-               OpStore %x_33 %41
-               OpStore %x_30_phi %45
-         %46 = OpLoad %int %x_33
-               OpStore %x_32_phi %46
-               OpBranch %28
-         %29 = OpLabel
-         %49 = OpAccessChain %_ptr_Function_v2float %x_30 %uint_0
-         %50 = OpLoad %v2float %49
-         %51 = OpFSub %v2float %50 %43
-         %53 = OpAccessChain %_ptr_Function_v2float %x_30 %uint_1
-         %54 = OpLoad %v2float %53
-         %55 = OpFSub %v2float %54 %44
-         %56 = OpCompositeConstruct %mat2v2float %51 %55
-         %57 = OpVectorTimesMatrix %v2float %47 %56
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-         %62 = OpCompositeExtract %float %57 0
-         %63 = OpFOrdLessThan %bool %float_1 %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-               OpBranch %59
-         %64 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %59
-         %60 = OpLabel
-               OpBranch %58
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.wgsl
deleted file mode 100644
index 7eaea5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct theSSBO {
-  out_data : i32;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_4 : theSSBO;
-
-fn main_1() {
-  var x_30 : mat2x2<f32>;
-  var x_30_phi : mat2x2<f32>;
-  var x_32_phi : i32;
-  x_4.out_data = 42;
-  x_30_phi = mat2x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  x_32_phi = 1;
-  loop {
-    var x_33 : i32;
-    x_30 = x_30_phi;
-    let x_32 : i32 = x_32_phi;
-    if ((x_32 > 0)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_33 = (x_32 - 1);
-      x_30_phi = mat2x2<f32>(vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0));
-      x_32_phi = x_33;
-    }
-  }
-  let x_41 : vec2<f32> = (vec2<f32>(1.0, 1.0) * mat2x2<f32>((x_30[0u] - vec2<f32>(1.0, 0.0)), (x_30[1u] - vec2<f32>(0.0, 1.0))));
-  loop {
-    if ((1.0 < x_41.x)) {
-      break;
-    }
-    workgroupBarrier();
-    break;
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.hlsl
deleted file mode 100644
index 7909f45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-RWByteAddressBuffer x_4 : register(u0, space0);
-
-void main_1() {
-  float2x2 x_30 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 x_30_phi = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_32_phi = 0;
-  x_4.Store(0u, asuint(42));
-  x_30_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  x_32_phi = 1;
-  while (true) {
-    int x_33 = 0;
-    x_30 = x_30_phi;
-    const int x_32 = x_32_phi;
-    if ((x_32 > 0)) {
-    } else {
-      break;
-    }
-    {
-      x_33 = (x_32 - 1);
-      x_30_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
-      x_32_phi = x_33;
-    }
-  }
-  const float2 x_41 = mul(float2x2((x_30[0u] - float2(1.0f, 0.0f)), (x_30[1u] - float2(0.0f, 1.0f))), float2(1.0f, 1.0f));
-  while (true) {
-    if ((1.0f < x_41.x)) {
-      break;
-    }
-    GroupMemoryBarrierWithGroupSync();
-    break;
-  }
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.msl
deleted file mode 100644
index 049c25a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct theSSBO {
-  /* 0x0000 */ int out_data;
-};
-
-void main_1(device theSSBO& x_4) {
-  float2x2 x_30 = float2x2(0.0f);
-  float2x2 x_30_phi = float2x2(0.0f);
-  int x_32_phi = 0;
-  x_4.out_data = 42;
-  x_30_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  x_32_phi = 1;
-  while (true) {
-    int x_33 = 0;
-    x_30 = x_30_phi;
-    int const x_32 = x_32_phi;
-    if ((x_32 > 0)) {
-    } else {
-      break;
-    }
-    {
-      x_33 = as_type<int>((as_type<uint>(x_32) - as_type<uint>(1)));
-      x_30_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
-      x_32_phi = x_33;
-    }
-  }
-  float2 const x_41 = (float2(1.0f, 1.0f) * float2x2((x_30[0u] - float2(1.0f, 0.0f)), (x_30[1u] - float2(0.0f, 1.0f))));
-  while (true) {
-    if ((1.0f < x_41.x)) {
-      break;
-    }
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    break;
-  }
-  return;
-}
-
-kernel void tint_symbol(device theSSBO& x_4 [[buffer(0)]]) {
-  main_1(x_4);
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.spvasm
deleted file mode 100644
index a2f71c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,121 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %theSSBO "theSSBO"
-               OpMemberName %theSSBO 0 "out_data"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %x_30_phi "x_30_phi"
-               OpName %x_32_phi "x_32_phi"
-               OpName %x_33 "x_33"
-               OpName %main "main"
-               OpDecorate %theSSBO Block
-               OpMemberDecorate %theSSBO 0 Offset 0
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 0
-        %int = OpTypeInt 32 1
-    %theSSBO = OpTypeStruct %int
-%_ptr_StorageBuffer_theSSBO = OpTypePointer StorageBuffer %theSSBO
-        %x_4 = OpVariable %_ptr_StorageBuffer_theSSBO StorageBuffer
-       %void = OpTypeVoid
-          %5 = OpTypeFunction %void
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %14 = OpConstantNull %mat2v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-     %int_42 = OpConstant %int 42
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v2float %float_0 %float_0
-         %26 = OpConstantComposite %mat2v2float %25 %25
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %43 = OpConstantComposite %v2float %float_1 %float_0
-         %44 = OpConstantComposite %v2float %float_0 %float_1
-         %45 = OpConstantComposite %mat2v2float %43 %44
-         %47 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-     %main_1 = OpFunction %void None %5
-          %8 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_mat2v2float Function %14
-   %x_30_phi = OpVariable %_ptr_Function_mat2v2float Function %14
-   %x_32_phi = OpVariable %_ptr_Function_int Function %18
-       %x_33 = OpVariable %_ptr_Function_int Function %18
-         %22 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %22 %int_42
-               OpStore %x_30_phi %26
-               OpStore %x_32_phi %int_1
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-         %33 = OpLoad %mat2v2float %x_30_phi
-               OpStore %x_30 %33
-         %34 = OpLoad %int %x_32_phi
-         %36 = OpSGreaterThan %bool %34 %int_0
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpBranch %38
-         %40 = OpLabel
-               OpBranch %29
-         %38 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-         %41 = OpISub %int %34 %int_1
-               OpStore %x_33 %41
-               OpStore %x_30_phi %45
-         %46 = OpLoad %int %x_33
-               OpStore %x_32_phi %46
-               OpBranch %28
-         %29 = OpLabel
-         %49 = OpAccessChain %_ptr_Function_v2float %x_30 %uint_0
-         %50 = OpLoad %v2float %49
-         %51 = OpFSub %v2float %50 %43
-         %53 = OpAccessChain %_ptr_Function_v2float %x_30 %uint_1
-         %54 = OpLoad %v2float %53
-         %55 = OpFSub %v2float %54 %44
-         %56 = OpCompositeConstruct %mat2v2float %51 %55
-         %57 = OpVectorTimesMatrix %v2float %47 %56
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-         %62 = OpCompositeExtract %float %57 0
-         %63 = OpFOrdLessThan %bool %float_1 %62
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-               OpBranch %59
-         %64 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %59
-         %60 = OpLabel
-               OpBranch %58
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %5
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.wgsl
deleted file mode 100644
index 7eaea5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/early-return-and-barrier/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct theSSBO {
-  out_data : i32;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_4 : theSSBO;
-
-fn main_1() {
-  var x_30 : mat2x2<f32>;
-  var x_30_phi : mat2x2<f32>;
-  var x_32_phi : i32;
-  x_4.out_data = 42;
-  x_30_phi = mat2x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  x_32_phi = 1;
-  loop {
-    var x_33 : i32;
-    x_30 = x_30_phi;
-    let x_32 : i32 = x_32_phi;
-    if ((x_32 > 0)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_33 = (x_32 - 1);
-      x_30_phi = mat2x2<f32>(vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0));
-      x_32_phi = x_33;
-    }
-  }
-  let x_41 : vec2<f32> = (vec2<f32>(1.0, 1.0) * mat2x2<f32>((x_30[0u] - vec2<f32>(1.0, 0.0)), (x_30[1u] - vec2<f32>(0.0, 1.0))));
-  loop {
-    if ((1.0 < x_41.x)) {
-      break;
-    }
-    workgroupBarrier();
-    break;
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a0fb19d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int loop_count = 0;
-  loop_count = 0;
-  const float x_33 = asfloat(x_7[0].x);
-  const float x_35 = asfloat(x_7[0].y);
-  const bool x_36 = (x_33 > x_35);
-  if (x_36) {
-    return;
-  }
-  const float x_40 = gl_FragCoord.x;
-  const bool x_41 = (x_40 < 0.0f);
-  {
-    for(; (loop_count < 100); loop_count = (loop_count + 1)) {
-      if (x_36) {
-        break;
-      }
-      if (x_36) {
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      } else {
-        if (x_41) {
-          return;
-        }
-      }
-      if (x_36) {
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      } else {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      }
-      if (x_36) {
-        return;
-      }
-      if (x_41) {
-        {
-          for(; (loop_count < 100); loop_count = (loop_count + 1)) {
-          }
-        }
-      }
-    }
-  }
-  if ((loop_count >= 100)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.msl
deleted file mode 100644
index bc0b5ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int loop_count = 0;
-  loop_count = 0;
-  float const x_33 = x_7.injectionSwitch.x;
-  float const x_35 = x_7.injectionSwitch.y;
-  bool const x_36 = (x_33 > x_35);
-  if (x_36) {
-    return;
-  }
-  float const x_40 = (*(tint_symbol_3)).x;
-  bool const x_41 = (x_40 < 0.0f);
-  while (true) {
-    int const x_43 = loop_count;
-    if ((x_43 < 100)) {
-    } else {
-      break;
-    }
-    if (x_36) {
-      break;
-    }
-    if (x_36) {
-      *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    } else {
-      if (x_41) {
-        return;
-      }
-    }
-    if (x_36) {
-      *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    } else {
-      *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-    if (x_36) {
-      return;
-    }
-    if (x_41) {
-      while (true) {
-        int const x_63 = loop_count;
-        if ((x_63 < 100)) {
-        } else {
-          break;
-        }
-        {
-          int const x_67 = loop_count;
-          loop_count = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_69 = loop_count;
-      loop_count = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-    }
-  }
-  int const x_71 = loop_count;
-  if ((x_71 >= 100)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 368cfc2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 100
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %loop_count "loop_count"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-    %int_100 = OpConstant %int 100
-    %float_1 = OpConstant %float 1
-         %57 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %63 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %87 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
- %loop_count = OpVariable %_ptr_Function_int Function %22
-               OpStore %loop_count %int_0
-         %27 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %28 = OpLoad %float %27
-         %30 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %31 = OpLoad %float %30
-         %32 = OpFOrdGreaterThan %bool %28 %31
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %34
-         %35 = OpLabel
-               OpReturn
-         %34 = OpLabel
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %40 = OpFOrdLessThan %bool %38 %float_0
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpLoad %int %loop_count
-         %47 = OpSLessThan %bool %45 %int_100
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-               OpBranch %48
-         %50 = OpLabel
-               OpBranch %42
-         %48 = OpLabel
-               OpSelectionMerge %51 None
-               OpBranchConditional %32 %52 %51
-         %52 = OpLabel
-               OpBranch %42
-         %51 = OpLabel
-               OpSelectionMerge %53 None
-               OpBranchConditional %32 %54 %55
-         %54 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %53
-         %55 = OpLabel
-               OpSelectionMerge %58 None
-               OpBranchConditional %40 %59 %58
-         %59 = OpLabel
-               OpReturn
-         %58 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpSelectionMerge %60 None
-               OpBranchConditional %32 %61 %62
-         %61 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %60
-         %62 = OpLabel
-               OpStore %x_GLF_color %63
-               OpBranch %60
-         %60 = OpLabel
-               OpSelectionMerge %64 None
-               OpBranchConditional %32 %65 %64
-         %65 = OpLabel
-               OpReturn
-         %64 = OpLabel
-               OpSelectionMerge %66 None
-               OpBranchConditional %40 %67 %66
-         %67 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %72 = OpLoad %int %loop_count
-         %73 = OpSLessThan %bool %72 %int_100
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %69
-         %74 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %int %loop_count
-         %79 = OpIAdd %int %77 %int_1
-               OpStore %loop_count %79
-               OpBranch %68
-         %69 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-         %80 = OpLoad %int %loop_count
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %loop_count %81
-               OpBranch %41
-         %42 = OpLabel
-         %82 = OpLoad %int %loop_count
-         %83 = OpSGreaterThanEqual %bool %82 %int_100
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpStore %x_GLF_color %63
-               OpBranch %84
-         %86 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %84
-         %84 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %87
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %91 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %92 = OpFunctionCall %void %main_1
-         %93 = OpLoad %v4float %x_GLF_color
-         %94 = OpCompositeConstruct %main_out %93
-               OpReturnValue %94
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %96 = OpLabel
-         %98 = OpLoad %v4float %gl_FragCoord_param_1
-         %97 = OpFunctionCall %main_out %main_inner %98
-         %99 = OpCompositeExtract %v4float %97 0
-               OpStore %x_GLF_color_1_1 %99
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 08be511..0000000
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,86 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var loop_count : i32;
-  loop_count = 0;
-  let x_33 : f32 = x_7.injectionSwitch.x;
-  let x_35 : f32 = x_7.injectionSwitch.y;
-  let x_36 : bool = (x_33 > x_35);
-  if (x_36) {
-    return;
-  }
-  let x_40 : f32 = gl_FragCoord.x;
-  let x_41 : bool = (x_40 < 0.0);
-  loop {
-    let x_43 : i32 = loop_count;
-    if ((x_43 < 100)) {
-    } else {
-      break;
-    }
-    if (x_36) {
-      break;
-    }
-    if (x_36) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    } else {
-      if (x_41) {
-        return;
-      }
-    }
-    if (x_36) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    } else {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-    if (x_36) {
-      return;
-    }
-    if (x_41) {
-      loop {
-        let x_63 : i32 = loop_count;
-        if ((x_63 < 100)) {
-        } else {
-          break;
-        }
-
-        continuing {
-          let x_67 : i32 = loop_count;
-          loop_count = (x_67 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_69 : i32 = loop_count;
-      loop_count = (x_69 + 1);
-    }
-  }
-  let x_71 : i32 = loop_count;
-  if ((x_71 >= 100)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a0fb19d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int loop_count = 0;
-  loop_count = 0;
-  const float x_33 = asfloat(x_7[0].x);
-  const float x_35 = asfloat(x_7[0].y);
-  const bool x_36 = (x_33 > x_35);
-  if (x_36) {
-    return;
-  }
-  const float x_40 = gl_FragCoord.x;
-  const bool x_41 = (x_40 < 0.0f);
-  {
-    for(; (loop_count < 100); loop_count = (loop_count + 1)) {
-      if (x_36) {
-        break;
-      }
-      if (x_36) {
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      } else {
-        if (x_41) {
-          return;
-        }
-      }
-      if (x_36) {
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      } else {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      }
-      if (x_36) {
-        return;
-      }
-      if (x_41) {
-        {
-          for(; (loop_count < 100); loop_count = (loop_count + 1)) {
-          }
-        }
-      }
-    }
-  }
-  if ((loop_count >= 100)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.msl
deleted file mode 100644
index bc0b5ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,91 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int loop_count = 0;
-  loop_count = 0;
-  float const x_33 = x_7.injectionSwitch.x;
-  float const x_35 = x_7.injectionSwitch.y;
-  bool const x_36 = (x_33 > x_35);
-  if (x_36) {
-    return;
-  }
-  float const x_40 = (*(tint_symbol_3)).x;
-  bool const x_41 = (x_40 < 0.0f);
-  while (true) {
-    int const x_43 = loop_count;
-    if ((x_43 < 100)) {
-    } else {
-      break;
-    }
-    if (x_36) {
-      break;
-    }
-    if (x_36) {
-      *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    } else {
-      if (x_41) {
-        return;
-      }
-    }
-    if (x_36) {
-      *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    } else {
-      *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-    if (x_36) {
-      return;
-    }
-    if (x_41) {
-      while (true) {
-        int const x_63 = loop_count;
-        if ((x_63 < 100)) {
-        } else {
-          break;
-        }
-        {
-          int const x_67 = loop_count;
-          loop_count = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-        }
-      }
-    }
-    {
-      int const x_69 = loop_count;
-      loop_count = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-    }
-  }
-  int const x_71 = loop_count;
-  if ((x_71 >= 100)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 368cfc2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 100
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %loop_count "loop_count"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-    %int_100 = OpConstant %int 100
-    %float_1 = OpConstant %float 1
-         %57 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %63 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %87 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
- %loop_count = OpVariable %_ptr_Function_int Function %22
-               OpStore %loop_count %int_0
-         %27 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %28 = OpLoad %float %27
-         %30 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %31 = OpLoad %float %30
-         %32 = OpFOrdGreaterThan %bool %28 %31
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %34
-         %35 = OpLabel
-               OpReturn
-         %34 = OpLabel
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %40 = OpFOrdLessThan %bool %38 %float_0
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpLoad %int %loop_count
-         %47 = OpSLessThan %bool %45 %int_100
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-               OpBranch %48
-         %50 = OpLabel
-               OpBranch %42
-         %48 = OpLabel
-               OpSelectionMerge %51 None
-               OpBranchConditional %32 %52 %51
-         %52 = OpLabel
-               OpBranch %42
-         %51 = OpLabel
-               OpSelectionMerge %53 None
-               OpBranchConditional %32 %54 %55
-         %54 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %53
-         %55 = OpLabel
-               OpSelectionMerge %58 None
-               OpBranchConditional %40 %59 %58
-         %59 = OpLabel
-               OpReturn
-         %58 = OpLabel
-               OpBranch %53
-         %53 = OpLabel
-               OpSelectionMerge %60 None
-               OpBranchConditional %32 %61 %62
-         %61 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %60
-         %62 = OpLabel
-               OpStore %x_GLF_color %63
-               OpBranch %60
-         %60 = OpLabel
-               OpSelectionMerge %64 None
-               OpBranchConditional %32 %65 %64
-         %65 = OpLabel
-               OpReturn
-         %64 = OpLabel
-               OpSelectionMerge %66 None
-               OpBranchConditional %40 %67 %66
-         %67 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %72 = OpLoad %int %loop_count
-         %73 = OpSLessThan %bool %72 %int_100
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %69
-         %74 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-         %77 = OpLoad %int %loop_count
-         %79 = OpIAdd %int %77 %int_1
-               OpStore %loop_count %79
-               OpBranch %68
-         %69 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-         %80 = OpLoad %int %loop_count
-         %81 = OpIAdd %int %80 %int_1
-               OpStore %loop_count %81
-               OpBranch %41
-         %42 = OpLabel
-         %82 = OpLoad %int %loop_count
-         %83 = OpSGreaterThanEqual %bool %82 %int_100
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpStore %x_GLF_color %63
-               OpBranch %84
-         %86 = OpLabel
-               OpStore %x_GLF_color %57
-               OpBranch %84
-         %84 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %87
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %91 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %92 = OpFunctionCall %void %main_1
-         %93 = OpLoad %v4float %x_GLF_color
-         %94 = OpCompositeConstruct %main_out %93
-               OpReturnValue %94
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %96 = OpLabel
-         %98 = OpLoad %v4float %gl_FragCoord_param_1
-         %97 = OpFunctionCall %main_out %main_inner %98
-         %99 = OpCompositeExtract %v4float %97 0
-               OpStore %x_GLF_color_1_1 %99
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 08be511..0000000
--- a/test/vk-gl-cts/graphicsfuzz/flag-always-false-if/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,86 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var loop_count : i32;
-  loop_count = 0;
-  let x_33 : f32 = x_7.injectionSwitch.x;
-  let x_35 : f32 = x_7.injectionSwitch.y;
-  let x_36 : bool = (x_33 > x_35);
-  if (x_36) {
-    return;
-  }
-  let x_40 : f32 = gl_FragCoord.x;
-  let x_41 : bool = (x_40 < 0.0);
-  loop {
-    let x_43 : i32 = loop_count;
-    if ((x_43 < 100)) {
-    } else {
-      break;
-    }
-    if (x_36) {
-      break;
-    }
-    if (x_36) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    } else {
-      if (x_41) {
-        return;
-      }
-    }
-    if (x_36) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    } else {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-    if (x_36) {
-      return;
-    }
-    if (x_41) {
-      loop {
-        let x_63 : i32 = loop_count;
-        if ((x_63 < 100)) {
-        } else {
-          break;
-        }
-
-        continuing {
-          let x_67 : i32 = loop_count;
-          loop_count = (x_67 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_69 : i32 = loop_count;
-      loop_count = (x_69 + 1);
-    }
-  }
-  let x_71 : i32 = loop_count;
-  if ((x_71 >= 100)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 2fa2417..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-static float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 drawShape_vf2_(inout float2 pos) {
-  bool c3 = false;
-  bool x_35_phi = false;
-  const float x_32 = pos.y;
-  const bool x_33 = (x_32 < 1.0f);
-  c3 = x_33;
-  x_35_phi = x_33;
-  {
-    for(; x_35_phi; x_35_phi = false) {
-      return float3(1.0f, 1.0f, 1.0f);
-    }
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1() {
-  float2 param = float2(0.0f, 0.0f);
-  param = float2(1.0f, 1.0f);
-  const float3 x_29 = drawShape_vf2_(param);
-  color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 color_1;
-};
-struct tint_symbol {
-  float4 color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_1 = inner_result.color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.msl
deleted file mode 100644
index dbe923b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_1;
-};
-struct tint_symbol_1 {
-  float4 color_1 [[color(0)]];
-};
-
-float3 drawShape_vf2_(thread float2* const pos) {
-  bool c3 = false;
-  bool x_35_phi = false;
-  float const x_32 = (*(pos)).y;
-  bool const x_33 = (x_32 < 1.0f);
-  c3 = x_33;
-  x_35_phi = x_33;
-  while (true) {
-    bool const x_35 = x_35_phi;
-    if (x_35) {
-    } else {
-      break;
-    }
-    return float3(1.0f, 1.0f, 1.0f);
-    {
-      x_35_phi = false;
-    }
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 param = 0.0f;
-  param = float2(1.0f, 1.0f);
-  float3 const x_29 = drawShape_vf2_(&(param));
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_1 = inner_result.color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ed87ecd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,103 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %color_1_1 "color_1_1"
-               OpName %color "color"
-               OpName %drawShape_vf2_ "drawShape_vf2_"
-               OpName %pos "pos"
-               OpName %c3 "c3"
-               OpName %x_35_phi "x_35_phi"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-  %color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-      %color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-          %8 = OpTypeFunction %v3float %_ptr_Function_v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %18 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-         %36 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-      %false = OpConstantFalse %bool
-       %void = OpTypeVoid
-         %38 = OpTypeFunction %void
-         %43 = OpConstantNull %v2float
-         %44 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-%drawShape_vf2_ = OpFunction %v3float None %8
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-         %14 = OpLabel
-         %c3 = OpVariable %_ptr_Function_bool Function %18
-   %x_35_phi = OpVariable %_ptr_Function_bool Function %18
-         %24 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %25 = OpLoad %float %24
-         %27 = OpFOrdLessThan %bool %25 %float_1
-               OpStore %c3 %27
-               OpStore %x_35_phi %27
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-         %32 = OpLoad %bool %x_35_phi
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %35
-         %34 = OpLabel
-               OpBranch %33
-         %35 = OpLabel
-               OpBranch %29
-         %33 = OpLabel
-               OpReturnValue %36
-         %30 = OpLabel
-               OpStore %x_35_phi %false
-               OpBranch %28
-         %29 = OpLabel
-               OpReturnValue %36
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %38
-         %41 = OpLabel
-      %param = OpVariable %_ptr_Function_v2float Function %43
-               OpStore %param %44
-         %45 = OpFunctionCall %v3float %drawShape_vf2_ %param
-               OpStore %color %48
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %38
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3817d55..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-var<private> color : vec4<f32>;
-
-fn drawShape_vf2_(pos : ptr<function, vec2<f32>>) -> vec3<f32> {
-  var c3 : bool;
-  var x_35_phi : bool;
-  let x_32 : f32 = (*(pos)).y;
-  let x_33 : bool = (x_32 < 1.0);
-  c3 = x_33;
-  x_35_phi = x_33;
-  loop {
-    let x_35 : bool = x_35_phi;
-    if (x_35) {
-    } else {
-      break;
-    }
-    return vec3<f32>(1.0, 1.0, 1.0);
-
-    continuing {
-      x_35_phi = false;
-    }
-  }
-  return vec3<f32>(1.0, 1.0, 1.0);
-}
-
-fn main_1() {
-  var param : vec2<f32>;
-  param = vec2<f32>(1.0, 1.0);
-  let x_29 : vec3<f32> = drawShape_vf2_(&(param));
-  color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 2fa2417..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,44 +0,0 @@
-static float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 drawShape_vf2_(inout float2 pos) {
-  bool c3 = false;
-  bool x_35_phi = false;
-  const float x_32 = pos.y;
-  const bool x_33 = (x_32 < 1.0f);
-  c3 = x_33;
-  x_35_phi = x_33;
-  {
-    for(; x_35_phi; x_35_phi = false) {
-      return float3(1.0f, 1.0f, 1.0f);
-    }
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1() {
-  float2 param = float2(0.0f, 0.0f);
-  param = float2(1.0f, 1.0f);
-  const float3 x_29 = drawShape_vf2_(param);
-  color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 color_1;
-};
-struct tint_symbol {
-  float4 color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_1 = inner_result.color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.msl
deleted file mode 100644
index dbe923b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_1;
-};
-struct tint_symbol_1 {
-  float4 color_1 [[color(0)]];
-};
-
-float3 drawShape_vf2_(thread float2* const pos) {
-  bool c3 = false;
-  bool x_35_phi = false;
-  float const x_32 = (*(pos)).y;
-  bool const x_33 = (x_32 < 1.0f);
-  c3 = x_33;
-  x_35_phi = x_33;
-  while (true) {
-    bool const x_35 = x_35_phi;
-    if (x_35) {
-    } else {
-      break;
-    }
-    return float3(1.0f, 1.0f, 1.0f);
-    {
-      x_35_phi = false;
-    }
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float2 param = 0.0f;
-  param = float2(1.0f, 1.0f);
-  float3 const x_29 = drawShape_vf2_(&(param));
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_1 = inner_result.color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ed87ecd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,103 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %color_1_1 "color_1_1"
-               OpName %color "color"
-               OpName %drawShape_vf2_ "drawShape_vf2_"
-               OpName %pos "pos"
-               OpName %c3 "c3"
-               OpName %x_35_phi "x_35_phi"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-  %color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-      %color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-          %8 = OpTypeFunction %v3float %_ptr_Function_v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %18 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-         %36 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-      %false = OpConstantFalse %bool
-       %void = OpTypeVoid
-         %38 = OpTypeFunction %void
-         %43 = OpConstantNull %v2float
-         %44 = OpConstantComposite %v2float %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-%drawShape_vf2_ = OpFunction %v3float None %8
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-         %14 = OpLabel
-         %c3 = OpVariable %_ptr_Function_bool Function %18
-   %x_35_phi = OpVariable %_ptr_Function_bool Function %18
-         %24 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %25 = OpLoad %float %24
-         %27 = OpFOrdLessThan %bool %25 %float_1
-               OpStore %c3 %27
-               OpStore %x_35_phi %27
-               OpBranch %28
-         %28 = OpLabel
-               OpLoopMerge %29 %30 None
-               OpBranch %31
-         %31 = OpLabel
-         %32 = OpLoad %bool %x_35_phi
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %35
-         %34 = OpLabel
-               OpBranch %33
-         %35 = OpLabel
-               OpBranch %29
-         %33 = OpLabel
-               OpReturnValue %36
-         %30 = OpLabel
-               OpStore %x_35_phi %false
-               OpBranch %28
-         %29 = OpLabel
-               OpReturnValue %36
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %38
-         %41 = OpLabel
-      %param = OpVariable %_ptr_Function_v2float Function %43
-               OpStore %param %44
-         %45 = OpFunctionCall %v3float %drawShape_vf2_ %param
-               OpStore %color %48
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %38
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3817d55..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-condition-always-false/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-var<private> color : vec4<f32>;
-
-fn drawShape_vf2_(pos : ptr<function, vec2<f32>>) -> vec3<f32> {
-  var c3 : bool;
-  var x_35_phi : bool;
-  let x_32 : f32 = (*(pos)).y;
-  let x_33 : bool = (x_32 < 1.0);
-  c3 = x_33;
-  x_35_phi = x_33;
-  loop {
-    let x_35 : bool = x_35_phi;
-    if (x_35) {
-    } else {
-      break;
-    }
-    return vec3<f32>(1.0, 1.0, 1.0);
-
-    continuing {
-      x_35_phi = false;
-    }
-  }
-  return vec3<f32>(1.0, 1.0, 1.0);
-}
-
-fn main_1() {
-  var param : vec2<f32>;
-  param = vec2<f32>(1.0, 1.0);
-  let x_29 : vec3<f32> = drawShape_vf2_(&(param));
-  color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.hlsl
deleted file mode 100644
index ce7a543..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 mand_() {
-  while (true) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  const float3 x_17 = mand_();
-  while (true) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.msl
deleted file mode 100644
index ff30036..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 mand_() {
-  while (true) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float3 const x_17 = mand_();
-  while (true) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    return;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.spvasm
deleted file mode 100644
index 62f9638..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %mand_ "mand_"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-    %float_1 = OpConstant %float 1
-         %17 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-         %29 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %30 = OpTypeFunction %main_out
-      %mand_ = OpFunction %v3float None %8
-         %11 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpLoopMerge %13 %14 None
-               OpBranch %15
-         %15 = OpLabel
-               OpReturnValue %17
-         %14 = OpLabel
-               OpBranch %12
-         %13 = OpLabel
-               OpReturnValue %19
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %v3float %mand_
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-               OpStore %x_GLF_color %29
-               OpReturn
-         %27 = OpLabel
-               OpBranch %25
-         %26 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %30
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %main_1
-         %35 = OpLoad %v4float %x_GLF_color
-         %36 = OpCompositeConstruct %main_out %35
-               OpReturnValue %36
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %38 = OpLabel
-         %39 = OpFunctionCall %main_out %main_inner
-         %40 = OpCompositeExtract %v4float %39 0
-               OpStore %x_GLF_color_1_1 %40
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.wgsl
deleted file mode 100644
index 1478c3b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn mand_() -> vec3<f32> {
-  loop {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  let x_17 : vec3<f32> = mand_();
-  loop {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.hlsl
deleted file mode 100644
index ce7a543..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 mand_() {
-  while (true) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  const float3 x_17 = mand_();
-  while (true) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.msl
deleted file mode 100644
index ff30036..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 mand_() {
-  while (true) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float3 const x_17 = mand_();
-  while (true) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    return;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.spvasm
deleted file mode 100644
index 62f9638..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %mand_ "mand_"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-    %float_1 = OpConstant %float 1
-         %17 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-         %29 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %30 = OpTypeFunction %main_out
-      %mand_ = OpFunction %v3float None %8
-         %11 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpLoopMerge %13 %14 None
-               OpBranch %15
-         %15 = OpLabel
-               OpReturnValue %17
-         %14 = OpLabel
-               OpBranch %12
-         %13 = OpLabel
-               OpReturnValue %19
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %v3float %mand_
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-               OpStore %x_GLF_color %29
-               OpReturn
-         %27 = OpLabel
-               OpBranch %25
-         %26 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %30
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %main_1
-         %35 = OpLoad %v4float %x_GLF_color
-         %36 = OpCompositeConstruct %main_out %35
-               OpReturnValue %36
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %38 = OpLabel
-         %39 = OpFunctionCall %main_out %main_inner
-         %40 = OpCompositeExtract %v4float %39 0
-               OpStore %x_GLF_color_1_1 %40
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.wgsl
deleted file mode 100644
index 1478c3b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-loop-with-return/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn mand_() -> vec3<f32> {
-  loop {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  let x_17 : vec3<f32> = mand_();
-  loop {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b4a4b07..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 1;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      const float x_37 = gl_FragCoord.y;
-      if ((x_37 < 0.0f)) {
-        const float x_42 = gl_FragCoord.x;
-        if ((x_42 < 0.0f)) {
-          x_GLF_color = float4(226.695999146f, 1.0f, 1.0f, 1.0f);
-        }
-        continue;
-      }
-      return;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.msl
deleted file mode 100644
index 47c8827..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 1;
-  while (true) {
-    int const x_6 = i;
-    if ((x_6 < 2)) {
-    } else {
-      break;
-    }
-    float const x_37 = (*(tint_symbol_4)).y;
-    if ((x_37 < 0.0f)) {
-      float const x_42 = (*(tint_symbol_4)).x;
-      if ((x_42 < 0.0f)) {
-        *(tint_symbol_3) = float4(226.695999146f, 1.0f, 1.0f, 1.0f);
-      }
-      {
-        int const x_7 = i;
-        i = as_type<int>((as_type<uint>(x_7) + as_type<uint>(1)));
-      }
-      continue;
-    }
-    return;
-    {
-      int const x_7 = i;
-      i = as_type<int>((as_type<uint>(x_7) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 29dda82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-%float_226_695999 = OpConstant %float 226.695999
-         %49 = OpConstantComposite %v4float %float_226_695999 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %52 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %x_GLF_color %21
-               OpStore %i %int_1
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %i
-         %29 = OpSLessThan %bool %27 %int_2
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %24
-         %31 = OpLabel
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %38 = OpLoad %float %37
-         %39 = OpFOrdLessThan %bool %38 %float_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-         %43 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %44 = OpLoad %float %43
-         %45 = OpFOrdLessThan %bool %44 %float_0
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
-               OpStore %x_GLF_color %49
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %25
-         %40 = OpLabel
-               OpReturn
-         %25 = OpLabel
-         %50 = OpLoad %int %i
-         %51 = OpIAdd %int %50 %int_1
-               OpStore %i %51
-               OpBranch %23
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %52
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %56 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %61 = OpLabel
-         %63 = OpLoad %v4float %gl_FragCoord_param_1
-         %62 = OpFunctionCall %main_out %main_inner %63
-         %64 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 869d8a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 1;
-  loop {
-    let x_6 : i32 = i;
-    if ((x_6 < 2)) {
-    } else {
-      break;
-    }
-    let x_37 : f32 = gl_FragCoord.y;
-    if ((x_37 < 0.0)) {
-      let x_42 : f32 = gl_FragCoord.x;
-      if ((x_42 < 0.0)) {
-        x_GLF_color = vec4<f32>(226.695999146, 1.0, 1.0, 1.0);
-      }
-      continue;
-    }
-    return;
-
-    continuing {
-      let x_7 : i32 = i;
-      i = (x_7 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b4a4b07..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,46 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 1;
-  {
-    for(; (i < 2); i = (i + 1)) {
-      const float x_37 = gl_FragCoord.y;
-      if ((x_37 < 0.0f)) {
-        const float x_42 = gl_FragCoord.x;
-        if ((x_42 < 0.0f)) {
-          x_GLF_color = float4(226.695999146f, 1.0f, 1.0f, 1.0f);
-        }
-        continue;
-      }
-      return;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.msl
deleted file mode 100644
index 47c8827..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 1;
-  while (true) {
-    int const x_6 = i;
-    if ((x_6 < 2)) {
-    } else {
-      break;
-    }
-    float const x_37 = (*(tint_symbol_4)).y;
-    if ((x_37 < 0.0f)) {
-      float const x_42 = (*(tint_symbol_4)).x;
-      if ((x_42 < 0.0f)) {
-        *(tint_symbol_3) = float4(226.695999146f, 1.0f, 1.0f, 1.0f);
-      }
-      {
-        int const x_7 = i;
-        i = as_type<int>((as_type<uint>(x_7) + as_type<uint>(1)));
-      }
-      continue;
-    }
-    return;
-    {
-      int const x_7 = i;
-      i = as_type<int>((as_type<uint>(x_7) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 29dda82..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-%float_226_695999 = OpConstant %float 226.695999
-         %49 = OpConstantComposite %v4float %float_226_695999 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %52 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %18
-               OpStore %x_GLF_color %21
-               OpStore %i %int_1
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %i
-         %29 = OpSLessThan %bool %27 %int_2
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %24
-         %31 = OpLabel
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %38 = OpLoad %float %37
-         %39 = OpFOrdLessThan %bool %38 %float_0
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-         %43 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %44 = OpLoad %float %43
-         %45 = OpFOrdLessThan %bool %44 %float_0
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
-               OpStore %x_GLF_color %49
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %25
-         %40 = OpLabel
-               OpReturn
-         %25 = OpLabel
-         %50 = OpLoad %int %i
-         %51 = OpIAdd %int %50 %int_1
-               OpStore %i %51
-               OpBranch %23
-         %24 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %52
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %56 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %61 = OpLabel
-         %63 = OpLoad %v4float %gl_FragCoord_param_1
-         %62 = OpFunctionCall %main_out %main_inner %63
-         %64 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 869d8a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/for-with-ifs-and-return/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 1;
-  loop {
-    let x_6 : i32 = i;
-    if ((x_6 < 2)) {
-    } else {
-      break;
-    }
-    let x_37 : f32 = gl_FragCoord.y;
-    if ((x_37 < 0.0)) {
-      let x_42 : f32 = gl_FragCoord.x;
-      if ((x_42 < 0.0)) {
-        x_GLF_color = vec4<f32>(226.695999146, 1.0, 1.0, 1.0);
-      }
-      continue;
-    }
-    return;
-
-    continuing {
-      let x_7 : i32 = i;
-      i = (x_7 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index c89a64b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,118 +0,0 @@
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float x_43 = 0.0f;
-  float x_44 = 0.0f;
-  float x_45 = 0.0f;
-  int x_46 = 0;
-  int zero = 0;
-  float2 param = float2(0.0f, 0.0f);
-  float2 temp = float2(0.0f, 0.0f);
-  const float4 x_47 = gl_FragCoord;
-  param = float2(x_47.x, x_47.y);
-  while (true) {
-    const float x_54 = param.y;
-    if ((x_54 < 50.0f)) {
-      const float x_60 = asfloat(x_9[0].y);
-      x_44 = x_60;
-    } else {
-      x_44 = 0.0f;
-    }
-    const float x_61 = x_44;
-    x_43 = x_61;
-    const float x_63 = gl_FragCoord.y;
-    const float x_65 = ((x_63 < 50.0f) ? 1.0f : 0.0f);
-    x_45 = x_65;
-    if (((x_61 - x_65) < 1.0f)) {
-      x_46 = 0;
-      break;
-    }
-    x_46 = 1;
-    break;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_70 = x_46;
-  zero = x_70;
-  if ((x_70 == 1)) {
-    return;
-  }
-  x_GLF_color = float4(0.0f, 1.0f, 1.0f, 1.0f);
-  const float x_75 = gl_FragCoord.x;
-  const float x_77 = asfloat(x_9[0].x);
-  if ((x_75 >= x_77)) {
-    const float x_82 = gl_FragCoord.y;
-    if ((x_82 >= 0.0f)) {
-      const float x_87 = asfloat(x_9[0].y);
-      x_GLF_color.x = x_87;
-    }
-  }
-  const float x_90 = gl_FragCoord.y;
-  if ((x_90 >= 0.0f)) {
-    const float x_95 = asfloat(x_9[0].x);
-    x_GLF_color.y = x_95;
-  }
-  const float4 x_97 = gl_FragCoord;
-  const float2 x_98 = float2(x_97.x, x_97.y);
-  const float2 x_101 = float2(x_98.x, x_98.y);
-  temp = x_101;
-  if ((x_101.y >= 0.0f)) {
-    const float x_107 = asfloat(x_9[0].x);
-    x_GLF_color.z = x_107;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int alwaysZero_vf2_(inout float2 coord) {
-  float a = 0.0f;
-  float x_110 = 0.0f;
-  float b = 0.0f;
-  const float x_112 = coord.y;
-  if ((x_112 < 50.0f)) {
-    const float x_118 = asfloat(x_9[0].y);
-    x_110 = x_118;
-  } else {
-    x_110 = 0.0f;
-  }
-  const float x_119 = x_110;
-  a = x_119;
-  const float x_121 = gl_FragCoord.y;
-  const float x_123 = ((x_121 < 50.0f) ? 1.0f : 0.0f);
-  b = x_123;
-  if (((x_119 - x_123) < 1.0f)) {
-    return 0;
-  }
-  return 1;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.msl
deleted file mode 100644
index f5a905e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float x_43 = 0.0f;
-  float x_44 = 0.0f;
-  float x_45 = 0.0f;
-  int x_46 = 0;
-  int zero = 0;
-  float2 param = 0.0f;
-  float2 temp = 0.0f;
-  float4 const x_47 = *(tint_symbol_3);
-  param = float2(x_47.x, x_47.y);
-  while (true) {
-    float const x_54 = param.y;
-    if ((x_54 < 50.0f)) {
-      float const x_60 = x_9.injectionSwitch.y;
-      x_44 = x_60;
-    } else {
-      x_44 = 0.0f;
-    }
-    float const x_61 = x_44;
-    x_43 = x_61;
-    float const x_63 = (*(tint_symbol_3)).y;
-    float const x_65 = select(0.0f, 1.0f, (x_63 < 50.0f));
-    x_45 = x_65;
-    if (((x_61 - x_65) < 1.0f)) {
-      x_46 = 0;
-      break;
-    }
-    x_46 = 1;
-    break;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_70 = x_46;
-  zero = x_70;
-  if ((x_70 == 1)) {
-    return;
-  }
-  *(tint_symbol_4) = float4(0.0f, 1.0f, 1.0f, 1.0f);
-  float const x_75 = (*(tint_symbol_3)).x;
-  float const x_77 = x_9.injectionSwitch.x;
-  if ((x_75 >= x_77)) {
-    float const x_82 = (*(tint_symbol_3)).y;
-    if ((x_82 >= 0.0f)) {
-      float const x_87 = x_9.injectionSwitch.y;
-      (*(tint_symbol_4)).x = x_87;
-    }
-  }
-  float const x_90 = (*(tint_symbol_3)).y;
-  if ((x_90 >= 0.0f)) {
-    float const x_95 = x_9.injectionSwitch.x;
-    (*(tint_symbol_4)).y = x_95;
-  }
-  float4 const x_97 = *(tint_symbol_3);
-  float2 const x_98 = float2(x_97.x, x_97.y);
-  float2 const x_101 = float2(x_98.x, x_98.y);
-  temp = x_101;
-  if ((x_101.y >= 0.0f)) {
-    float const x_107 = x_9.injectionSwitch.x;
-    (*(tint_symbol_4)).z = x_107;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int alwaysZero_vf2_(constant buf0& x_9, thread float2* const coord, thread float4* const tint_symbol_9) {
-  float a = 0.0f;
-  float x_110 = 0.0f;
-  float b = 0.0f;
-  float const x_112 = (*(coord)).y;
-  if ((x_112 < 50.0f)) {
-    float const x_118 = x_9.injectionSwitch.y;
-    x_110 = x_118;
-  } else {
-    x_110 = 0.0f;
-  }
-  float const x_119 = x_110;
-  a = x_119;
-  float const x_121 = (*(tint_symbol_9)).y;
-  float const x_123 = select(0.0f, 1.0f, (x_121 < 50.0f));
-  b = x_123;
-  if (((x_119 - x_123) < 1.0f)) {
-    return 0;
-  }
-  return 1;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0c9f169..0000000
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,252 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_43 "x_43"
-               OpName %x_44 "x_44"
-               OpName %x_45 "x_45"
-               OpName %x_46 "x_46"
-               OpName %zero "zero"
-               OpName %param "param"
-               OpName %temp "temp"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpName %alwaysZero_vf2_ "alwaysZero_vf2_"
-               OpName %coord "coord"
-               OpName %a "a"
-               OpName %x_110 "x_110"
-               OpName %b "b"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %27 = OpConstantNull %int
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %31 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-   %float_50 = OpConstant %float 50
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-         %74 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-        %113 = OpTypeFunction %main_out %v4float
-        %126 = OpTypeFunction %int %_ptr_Function_v2float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_43 = OpVariable %_ptr_Function_float Function %21
-       %x_44 = OpVariable %_ptr_Function_float Function %21
-       %x_45 = OpVariable %_ptr_Function_float Function %21
-       %x_46 = OpVariable %_ptr_Function_int Function %27
-       %zero = OpVariable %_ptr_Function_int Function %27
-      %param = OpVariable %_ptr_Function_v2float Function %31
-       %temp = OpVariable %_ptr_Function_v2float Function %31
-         %33 = OpLoad %v4float %gl_FragCoord
-         %34 = OpCompositeExtract %float %33 0
-         %35 = OpCompositeExtract %float %33 1
-         %36 = OpCompositeConstruct %v2float %34 %35
-               OpStore %param %36
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %43 = OpAccessChain %_ptr_Function_float %param %uint_1
-         %44 = OpLoad %float %43
-         %46 = OpFOrdLessThan %bool %44 %float_50
-               OpSelectionMerge %48 None
-               OpBranchConditional %46 %49 %50
-         %49 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %54 = OpLoad %float %53
-               OpStore %x_44 %54
-               OpBranch %48
-         %50 = OpLabel
-               OpStore %x_44 %float_0
-               OpBranch %48
-         %48 = OpLabel
-         %56 = OpLoad %float %x_44
-               OpStore %x_43 %56
-         %58 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %59 = OpLoad %float %58
-         %61 = OpFOrdLessThan %bool %59 %float_50
-         %60 = OpSelect %float %61 %float_1 %float_0
-               OpStore %x_45 %60
-         %63 = OpFSub %float %56 %60
-         %64 = OpFOrdLessThan %bool %63 %float_1
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-               OpStore %x_46 %int_0
-               OpBranch %38
-         %65 = OpLabel
-               OpStore %x_46 %int_1
-               OpBranch %38
-         %39 = OpLabel
-               OpBranchConditional %false %37 %38
-         %38 = OpLabel
-         %70 = OpLoad %int %x_46
-               OpStore %zero %70
-         %71 = OpIEqual %bool %70 %int_1
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturn
-         %72 = OpLabel
-               OpStore %x_GLF_color %74
-         %75 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %76 = OpLoad %float %75
-         %77 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %78 = OpLoad %float %77
-         %79 = OpFOrdGreaterThanEqual %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %80
-         %81 = OpLabel
-         %82 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %83 = OpLoad %float %82
-         %84 = OpFOrdGreaterThanEqual %bool %83 %float_0
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %88 = OpLoad %float %87
-         %89 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-               OpStore %89 %88
-               OpBranch %85
-         %85 = OpLabel
-               OpBranch %80
-         %80 = OpLabel
-         %90 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %91 = OpLoad %float %90
-         %92 = OpFOrdGreaterThanEqual %bool %91 %float_0
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %96 = OpLoad %float %95
-         %97 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %97 %96
-               OpBranch %93
-         %93 = OpLabel
-         %98 = OpLoad %v4float %gl_FragCoord
-         %99 = OpCompositeExtract %float %98 0
-        %100 = OpCompositeExtract %float %98 1
-        %101 = OpCompositeConstruct %v2float %99 %100
-        %102 = OpCompositeExtract %float %101 0
-        %103 = OpCompositeExtract %float %101 1
-        %104 = OpCompositeConstruct %v2float %102 %103
-               OpStore %temp %104
-        %105 = OpCompositeExtract %float %104 1
-        %106 = OpFOrdGreaterThanEqual %bool %105 %float_0
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-        %109 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-        %110 = OpLoad %float %109
-        %112 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_2
-               OpStore %112 %110
-               OpBranch %107
-        %107 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %113
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %117 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %118 = OpFunctionCall %void %main_1
-        %119 = OpLoad %v4float %x_GLF_color
-        %120 = OpCompositeConstruct %main_out %119
-               OpReturnValue %120
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %122 = OpLabel
-        %124 = OpLoad %v4float %gl_FragCoord_param_1
-        %123 = OpFunctionCall %main_out %main_inner %124
-        %125 = OpCompositeExtract %v4float %123 0
-               OpStore %x_GLF_color_1_1 %125
-               OpReturn
-               OpFunctionEnd
-%alwaysZero_vf2_ = OpFunction %int None %126
-      %coord = OpFunctionParameter %_ptr_Function_v2float
-        %129 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %21
-      %x_110 = OpVariable %_ptr_Function_float Function %21
-          %b = OpVariable %_ptr_Function_float Function %21
-        %134 = OpAccessChain %_ptr_Function_float %coord %uint_1
-        %135 = OpLoad %float %134
-        %136 = OpFOrdLessThan %bool %135 %float_50
-               OpSelectionMerge %137 None
-               OpBranchConditional %136 %138 %139
-        %138 = OpLabel
-        %140 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-        %141 = OpLoad %float %140
-               OpStore %x_110 %141
-               OpBranch %137
-        %139 = OpLabel
-               OpStore %x_110 %float_0
-               OpBranch %137
-        %137 = OpLabel
-        %142 = OpLoad %float %x_110
-               OpStore %a %142
-        %143 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %144 = OpLoad %float %143
-        %146 = OpFOrdLessThan %bool %144 %float_50
-        %145 = OpSelect %float %146 %float_1 %float_0
-               OpStore %b %145
-        %147 = OpFSub %float %142 %145
-        %148 = OpFOrdLessThan %bool %147 %float_1
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %149
-        %150 = OpLabel
-               OpReturnValue %int_0
-        %149 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f94238d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,112 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_43 : f32;
-  var x_44 : f32;
-  var x_45 : f32;
-  var x_46 : i32;
-  var zero : i32;
-  var param : vec2<f32>;
-  var temp : vec2<f32>;
-  let x_47 : vec4<f32> = gl_FragCoord;
-  param = vec2<f32>(x_47.x, x_47.y);
-  loop {
-    let x_54 : f32 = param.y;
-    if ((x_54 < 50.0)) {
-      let x_60 : f32 = x_9.injectionSwitch.y;
-      x_44 = x_60;
-    } else {
-      x_44 = 0.0;
-    }
-    let x_61 : f32 = x_44;
-    x_43 = x_61;
-    let x_63 : f32 = gl_FragCoord.y;
-    let x_65 : f32 = select(0.0, 1.0, (x_63 < 50.0));
-    x_45 = x_65;
-    if (((x_61 - x_65) < 1.0)) {
-      x_46 = 0;
-      break;
-    }
-    x_46 = 1;
-    break;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_70 : i32 = x_46;
-  zero = x_70;
-  if ((x_70 == 1)) {
-    return;
-  }
-  x_GLF_color = vec4<f32>(0.0, 1.0, 1.0, 1.0);
-  let x_75 : f32 = gl_FragCoord.x;
-  let x_77 : f32 = x_9.injectionSwitch.x;
-  if ((x_75 >= x_77)) {
-    let x_82 : f32 = gl_FragCoord.y;
-    if ((x_82 >= 0.0)) {
-      let x_87 : f32 = x_9.injectionSwitch.y;
-      x_GLF_color.x = x_87;
-    }
-  }
-  let x_90 : f32 = gl_FragCoord.y;
-  if ((x_90 >= 0.0)) {
-    let x_95 : f32 = x_9.injectionSwitch.x;
-    x_GLF_color.y = x_95;
-  }
-  let x_97 : vec4<f32> = gl_FragCoord;
-  let x_98 : vec2<f32> = vec2<f32>(x_97.x, x_97.y);
-  let x_101 : vec2<f32> = vec2<f32>(x_98.x, x_98.y);
-  temp = x_101;
-  if ((x_101.y >= 0.0)) {
-    let x_107 : f32 = x_9.injectionSwitch.x;
-    x_GLF_color.z = x_107;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn alwaysZero_vf2_(coord : ptr<function, vec2<f32>>) -> i32 {
-  var a : f32;
-  var x_110 : f32;
-  var b : f32;
-  let x_112 : f32 = (*(coord)).y;
-  if ((x_112 < 50.0)) {
-    let x_118 : f32 = x_9.injectionSwitch.y;
-    x_110 = x_118;
-  } else {
-    x_110 = 0.0;
-  }
-  let x_119 : f32 = x_110;
-  a = x_119;
-  let x_121 : f32 = gl_FragCoord.y;
-  let x_123 : f32 = select(0.0, 1.0, (x_121 < 50.0));
-  b = x_123;
-  if (((x_119 - x_123) < 1.0)) {
-    return 0;
-  }
-  return 1;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c89a64b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,118 +0,0 @@
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float x_43 = 0.0f;
-  float x_44 = 0.0f;
-  float x_45 = 0.0f;
-  int x_46 = 0;
-  int zero = 0;
-  float2 param = float2(0.0f, 0.0f);
-  float2 temp = float2(0.0f, 0.0f);
-  const float4 x_47 = gl_FragCoord;
-  param = float2(x_47.x, x_47.y);
-  while (true) {
-    const float x_54 = param.y;
-    if ((x_54 < 50.0f)) {
-      const float x_60 = asfloat(x_9[0].y);
-      x_44 = x_60;
-    } else {
-      x_44 = 0.0f;
-    }
-    const float x_61 = x_44;
-    x_43 = x_61;
-    const float x_63 = gl_FragCoord.y;
-    const float x_65 = ((x_63 < 50.0f) ? 1.0f : 0.0f);
-    x_45 = x_65;
-    if (((x_61 - x_65) < 1.0f)) {
-      x_46 = 0;
-      break;
-    }
-    x_46 = 1;
-    break;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_70 = x_46;
-  zero = x_70;
-  if ((x_70 == 1)) {
-    return;
-  }
-  x_GLF_color = float4(0.0f, 1.0f, 1.0f, 1.0f);
-  const float x_75 = gl_FragCoord.x;
-  const float x_77 = asfloat(x_9[0].x);
-  if ((x_75 >= x_77)) {
-    const float x_82 = gl_FragCoord.y;
-    if ((x_82 >= 0.0f)) {
-      const float x_87 = asfloat(x_9[0].y);
-      x_GLF_color.x = x_87;
-    }
-  }
-  const float x_90 = gl_FragCoord.y;
-  if ((x_90 >= 0.0f)) {
-    const float x_95 = asfloat(x_9[0].x);
-    x_GLF_color.y = x_95;
-  }
-  const float4 x_97 = gl_FragCoord;
-  const float2 x_98 = float2(x_97.x, x_97.y);
-  const float2 x_101 = float2(x_98.x, x_98.y);
-  temp = x_101;
-  if ((x_101.y >= 0.0f)) {
-    const float x_107 = asfloat(x_9[0].x);
-    x_GLF_color.z = x_107;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int alwaysZero_vf2_(inout float2 coord) {
-  float a = 0.0f;
-  float x_110 = 0.0f;
-  float b = 0.0f;
-  const float x_112 = coord.y;
-  if ((x_112 < 50.0f)) {
-    const float x_118 = asfloat(x_9[0].y);
-    x_110 = x_118;
-  } else {
-    x_110 = 0.0f;
-  }
-  const float x_119 = x_110;
-  a = x_119;
-  const float x_121 = gl_FragCoord.y;
-  const float x_123 = ((x_121 < 50.0f) ? 1.0f : 0.0f);
-  b = x_123;
-  if (((x_119 - x_123) < 1.0f)) {
-    return 0;
-  }
-  return 1;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.msl
deleted file mode 100644
index f5a905e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float x_43 = 0.0f;
-  float x_44 = 0.0f;
-  float x_45 = 0.0f;
-  int x_46 = 0;
-  int zero = 0;
-  float2 param = 0.0f;
-  float2 temp = 0.0f;
-  float4 const x_47 = *(tint_symbol_3);
-  param = float2(x_47.x, x_47.y);
-  while (true) {
-    float const x_54 = param.y;
-    if ((x_54 < 50.0f)) {
-      float const x_60 = x_9.injectionSwitch.y;
-      x_44 = x_60;
-    } else {
-      x_44 = 0.0f;
-    }
-    float const x_61 = x_44;
-    x_43 = x_61;
-    float const x_63 = (*(tint_symbol_3)).y;
-    float const x_65 = select(0.0f, 1.0f, (x_63 < 50.0f));
-    x_45 = x_65;
-    if (((x_61 - x_65) < 1.0f)) {
-      x_46 = 0;
-      break;
-    }
-    x_46 = 1;
-    break;
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_70 = x_46;
-  zero = x_70;
-  if ((x_70 == 1)) {
-    return;
-  }
-  *(tint_symbol_4) = float4(0.0f, 1.0f, 1.0f, 1.0f);
-  float const x_75 = (*(tint_symbol_3)).x;
-  float const x_77 = x_9.injectionSwitch.x;
-  if ((x_75 >= x_77)) {
-    float const x_82 = (*(tint_symbol_3)).y;
-    if ((x_82 >= 0.0f)) {
-      float const x_87 = x_9.injectionSwitch.y;
-      (*(tint_symbol_4)).x = x_87;
-    }
-  }
-  float const x_90 = (*(tint_symbol_3)).y;
-  if ((x_90 >= 0.0f)) {
-    float const x_95 = x_9.injectionSwitch.x;
-    (*(tint_symbol_4)).y = x_95;
-  }
-  float4 const x_97 = *(tint_symbol_3);
-  float2 const x_98 = float2(x_97.x, x_97.y);
-  float2 const x_101 = float2(x_98.x, x_98.y);
-  temp = x_101;
-  if ((x_101.y >= 0.0f)) {
-    float const x_107 = x_9.injectionSwitch.x;
-    (*(tint_symbol_4)).z = x_107;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int alwaysZero_vf2_(constant buf0& x_9, thread float2* const coord, thread float4* const tint_symbol_9) {
-  float a = 0.0f;
-  float x_110 = 0.0f;
-  float b = 0.0f;
-  float const x_112 = (*(coord)).y;
-  if ((x_112 < 50.0f)) {
-    float const x_118 = x_9.injectionSwitch.y;
-    x_110 = x_118;
-  } else {
-    x_110 = 0.0f;
-  }
-  float const x_119 = x_110;
-  a = x_119;
-  float const x_121 = (*(tint_symbol_9)).y;
-  float const x_123 = select(0.0f, 1.0f, (x_121 < 50.0f));
-  b = x_123;
-  if (((x_119 - x_123) < 1.0f)) {
-    return 0;
-  }
-  return 1;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0c9f169..0000000
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,252 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_43 "x_43"
-               OpName %x_44 "x_44"
-               OpName %x_45 "x_45"
-               OpName %x_46 "x_46"
-               OpName %zero "zero"
-               OpName %param "param"
-               OpName %temp "temp"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpName %alwaysZero_vf2_ "alwaysZero_vf2_"
-               OpName %coord "coord"
-               OpName %a "a"
-               OpName %x_110 "x_110"
-               OpName %b "b"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %21 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %27 = OpConstantNull %int
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %31 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-   %float_50 = OpConstant %float 50
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-         %74 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-        %113 = OpTypeFunction %main_out %v4float
-        %126 = OpTypeFunction %int %_ptr_Function_v2float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_43 = OpVariable %_ptr_Function_float Function %21
-       %x_44 = OpVariable %_ptr_Function_float Function %21
-       %x_45 = OpVariable %_ptr_Function_float Function %21
-       %x_46 = OpVariable %_ptr_Function_int Function %27
-       %zero = OpVariable %_ptr_Function_int Function %27
-      %param = OpVariable %_ptr_Function_v2float Function %31
-       %temp = OpVariable %_ptr_Function_v2float Function %31
-         %33 = OpLoad %v4float %gl_FragCoord
-         %34 = OpCompositeExtract %float %33 0
-         %35 = OpCompositeExtract %float %33 1
-         %36 = OpCompositeConstruct %v2float %34 %35
-               OpStore %param %36
-               OpBranch %37
-         %37 = OpLabel
-               OpLoopMerge %38 %39 None
-               OpBranch %40
-         %40 = OpLabel
-         %43 = OpAccessChain %_ptr_Function_float %param %uint_1
-         %44 = OpLoad %float %43
-         %46 = OpFOrdLessThan %bool %44 %float_50
-               OpSelectionMerge %48 None
-               OpBranchConditional %46 %49 %50
-         %49 = OpLabel
-         %53 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %54 = OpLoad %float %53
-               OpStore %x_44 %54
-               OpBranch %48
-         %50 = OpLabel
-               OpStore %x_44 %float_0
-               OpBranch %48
-         %48 = OpLabel
-         %56 = OpLoad %float %x_44
-               OpStore %x_43 %56
-         %58 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %59 = OpLoad %float %58
-         %61 = OpFOrdLessThan %bool %59 %float_50
-         %60 = OpSelect %float %61 %float_1 %float_0
-               OpStore %x_45 %60
-         %63 = OpFSub %float %56 %60
-         %64 = OpFOrdLessThan %bool %63 %float_1
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-               OpStore %x_46 %int_0
-               OpBranch %38
-         %65 = OpLabel
-               OpStore %x_46 %int_1
-               OpBranch %38
-         %39 = OpLabel
-               OpBranchConditional %false %37 %38
-         %38 = OpLabel
-         %70 = OpLoad %int %x_46
-               OpStore %zero %70
-         %71 = OpIEqual %bool %70 %int_1
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturn
-         %72 = OpLabel
-               OpStore %x_GLF_color %74
-         %75 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %76 = OpLoad %float %75
-         %77 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %78 = OpLoad %float %77
-         %79 = OpFOrdGreaterThanEqual %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %80
-         %81 = OpLabel
-         %82 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %83 = OpLoad %float %82
-         %84 = OpFOrdGreaterThanEqual %bool %83 %float_0
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %88 = OpLoad %float %87
-         %89 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-               OpStore %89 %88
-               OpBranch %85
-         %85 = OpLabel
-               OpBranch %80
-         %80 = OpLabel
-         %90 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %91 = OpLoad %float %90
-         %92 = OpFOrdGreaterThanEqual %bool %91 %float_0
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-         %95 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %96 = OpLoad %float %95
-         %97 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_1
-               OpStore %97 %96
-               OpBranch %93
-         %93 = OpLabel
-         %98 = OpLoad %v4float %gl_FragCoord
-         %99 = OpCompositeExtract %float %98 0
-        %100 = OpCompositeExtract %float %98 1
-        %101 = OpCompositeConstruct %v2float %99 %100
-        %102 = OpCompositeExtract %float %101 0
-        %103 = OpCompositeExtract %float %101 1
-        %104 = OpCompositeConstruct %v2float %102 %103
-               OpStore %temp %104
-        %105 = OpCompositeExtract %float %104 1
-        %106 = OpFOrdGreaterThanEqual %bool %105 %float_0
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-        %109 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-        %110 = OpLoad %float %109
-        %112 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_2
-               OpStore %112 %110
-               OpBranch %107
-        %107 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %113
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %117 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %118 = OpFunctionCall %void %main_1
-        %119 = OpLoad %v4float %x_GLF_color
-        %120 = OpCompositeConstruct %main_out %119
-               OpReturnValue %120
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %122 = OpLabel
-        %124 = OpLoad %v4float %gl_FragCoord_param_1
-        %123 = OpFunctionCall %main_out %main_inner %124
-        %125 = OpCompositeExtract %v4float %123 0
-               OpStore %x_GLF_color_1_1 %125
-               OpReturn
-               OpFunctionEnd
-%alwaysZero_vf2_ = OpFunction %int None %126
-      %coord = OpFunctionParameter %_ptr_Function_v2float
-        %129 = OpLabel
-          %a = OpVariable %_ptr_Function_float Function %21
-      %x_110 = OpVariable %_ptr_Function_float Function %21
-          %b = OpVariable %_ptr_Function_float Function %21
-        %134 = OpAccessChain %_ptr_Function_float %coord %uint_1
-        %135 = OpLoad %float %134
-        %136 = OpFOrdLessThan %bool %135 %float_50
-               OpSelectionMerge %137 None
-               OpBranchConditional %136 %138 %139
-        %138 = OpLabel
-        %140 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-        %141 = OpLoad %float %140
-               OpStore %x_110 %141
-               OpBranch %137
-        %139 = OpLabel
-               OpStore %x_110 %float_0
-               OpBranch %137
-        %137 = OpLabel
-        %142 = OpLoad %float %x_110
-               OpStore %a %142
-        %143 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %144 = OpLoad %float %143
-        %146 = OpFOrdLessThan %bool %144 %float_50
-        %145 = OpSelect %float %146 %float_1 %float_0
-               OpStore %b %145
-        %147 = OpFSub %float %142 %145
-        %148 = OpFOrdLessThan %bool %147 %float_1
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %149
-        %150 = OpLabel
-               OpReturnValue %int_0
-        %149 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f94238d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/frag-coord-func-call-and-ifs/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,112 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_43 : f32;
-  var x_44 : f32;
-  var x_45 : f32;
-  var x_46 : i32;
-  var zero : i32;
-  var param : vec2<f32>;
-  var temp : vec2<f32>;
-  let x_47 : vec4<f32> = gl_FragCoord;
-  param = vec2<f32>(x_47.x, x_47.y);
-  loop {
-    let x_54 : f32 = param.y;
-    if ((x_54 < 50.0)) {
-      let x_60 : f32 = x_9.injectionSwitch.y;
-      x_44 = x_60;
-    } else {
-      x_44 = 0.0;
-    }
-    let x_61 : f32 = x_44;
-    x_43 = x_61;
-    let x_63 : f32 = gl_FragCoord.y;
-    let x_65 : f32 = select(0.0, 1.0, (x_63 < 50.0));
-    x_45 = x_65;
-    if (((x_61 - x_65) < 1.0)) {
-      x_46 = 0;
-      break;
-    }
-    x_46 = 1;
-    break;
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_70 : i32 = x_46;
-  zero = x_70;
-  if ((x_70 == 1)) {
-    return;
-  }
-  x_GLF_color = vec4<f32>(0.0, 1.0, 1.0, 1.0);
-  let x_75 : f32 = gl_FragCoord.x;
-  let x_77 : f32 = x_9.injectionSwitch.x;
-  if ((x_75 >= x_77)) {
-    let x_82 : f32 = gl_FragCoord.y;
-    if ((x_82 >= 0.0)) {
-      let x_87 : f32 = x_9.injectionSwitch.y;
-      x_GLF_color.x = x_87;
-    }
-  }
-  let x_90 : f32 = gl_FragCoord.y;
-  if ((x_90 >= 0.0)) {
-    let x_95 : f32 = x_9.injectionSwitch.x;
-    x_GLF_color.y = x_95;
-  }
-  let x_97 : vec4<f32> = gl_FragCoord;
-  let x_98 : vec2<f32> = vec2<f32>(x_97.x, x_97.y);
-  let x_101 : vec2<f32> = vec2<f32>(x_98.x, x_98.y);
-  temp = x_101;
-  if ((x_101.y >= 0.0)) {
-    let x_107 : f32 = x_9.injectionSwitch.x;
-    x_GLF_color.z = x_107;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn alwaysZero_vf2_(coord : ptr<function, vec2<f32>>) -> i32 {
-  var a : f32;
-  var x_110 : f32;
-  var b : f32;
-  let x_112 : f32 = (*(coord)).y;
-  if ((x_112 < 50.0)) {
-    let x_118 : f32 = x_9.injectionSwitch.y;
-    x_110 = x_118;
-  } else {
-    x_110 = 0.0;
-  }
-  let x_119 : f32 = x_110;
-  a = x_119;
-  let x_121 : f32 = gl_FragCoord.y;
-  let x_123 : f32 = select(0.0, 1.0, (x_121 < 50.0));
-  b = x_123;
-  if (((x_119 - x_123) < 1.0)) {
-    return 0;
-  }
-  return 1;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9661c77..0000000
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float fx_(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_50 = (*(tint_symbol_3)).y;
-  if ((x_50 >= 0.0f)) {
-    float const x_55 = x_7.injectionSwitch.y;
-    return x_55;
-  }
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return 0.0f;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float x2 = 0.0f;
-  float B = 0.0f;
-  float k0 = 0.0f;
-  x2 = 1.0f;
-  B = 1.0f;
-  float const x_34 = fx_(x_7, tint_symbol_5, tint_symbol_6);
-  *(tint_symbol_6) = float4(x_34, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    float const x_40 = x2;
-    if ((x_40 > 2.0f)) {
-    } else {
-      break;
-    }
-    float const x_43 = fx_(x_7, tint_symbol_5, tint_symbol_6);
-    float const x_44 = fx_(x_7, tint_symbol_5, tint_symbol_6);
-    k0 = (x_43 - x_44);
-    float const x_46 = k0;
-    B = x_46;
-    float const x_47 = B;
-    x2 = x_47;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8e85648..0000000
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,152 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 81
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %fx_ "fx_"
-               OpName %main_1 "main_1"
-               OpName %x2 "x2"
-               OpName %B "B"
-               OpName %k0 "k0"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %15 = OpTypeFunction %float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %41 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-       %void = OpTypeVoid
-         %42 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %48 = OpConstantNull %float
-    %float_2 = OpConstant %float 2
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out %v4float
-        %fx_ = OpFunction %float None %15
-         %17 = OpLabel
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %22 = OpLoad %float %21
-         %24 = OpFOrdGreaterThanEqual %bool %22 %float_0
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-         %30 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %31 = OpLoad %float %30
-               OpReturnValue %31
-         %26 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-               OpSelectionMerge %37 None
-               OpBranchConditional %true %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %33
-         %37 = OpLabel
-               OpStore %x_GLF_color %41
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %32
-         %33 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %42
-         %45 = OpLabel
-         %x2 = OpVariable %_ptr_Function_float Function %48
-          %B = OpVariable %_ptr_Function_float Function %48
-         %k0 = OpVariable %_ptr_Function_float Function %48
-               OpStore %x2 %float_1
-               OpStore %B %float_1
-         %51 = OpFunctionCall %float %fx_
-         %52 = OpCompositeConstruct %v4float %51 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %52
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpLoad %float %x2
-         %59 = OpFOrdGreaterThan %bool %57 %float_2
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %54
-         %60 = OpLabel
-         %63 = OpFunctionCall %float %fx_
-         %64 = OpFunctionCall %float %fx_
-         %65 = OpFSub %float %63 %64
-               OpStore %k0 %65
-         %66 = OpLoad %float %k0
-               OpStore %B %66
-         %67 = OpLoad %float %B
-               OpStore %x2 %67
-               OpBranch %55
-         %55 = OpLabel
-               OpBranch %53
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %72 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %73 = OpFunctionCall %void %main_1
-         %74 = OpLoad %v4float %x_GLF_color
-         %75 = OpCompositeConstruct %main_out %74
-               OpReturnValue %75
-               OpFunctionEnd
-       %main = OpFunction %void None %42
-         %77 = OpLabel
-         %79 = OpLoad %v4float %gl_FragCoord_param_1
-         %78 = OpFunctionCall %main_out %main_inner %79
-         %80 = OpCompositeExtract %v4float %78 0
-               OpStore %x_GLF_color_1_1 %80
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ad60ab7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn fx_() -> f32 {
-  let x_50 : f32 = gl_FragCoord.y;
-  if ((x_50 >= 0.0)) {
-    let x_55 : f32 = x_7.injectionSwitch.y;
-    return x_55;
-  }
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var x2 : f32;
-  var B : f32;
-  var k0 : f32;
-  x2 = 1.0;
-  B = 1.0;
-  let x_34 : f32 = fx_();
-  x_GLF_color = vec4<f32>(x_34, 0.0, 0.0, 1.0);
-  loop {
-    let x_40 : f32 = x2;
-    if ((x_40 > 2.0)) {
-    } else {
-      break;
-    }
-    let x_43 : f32 = fx_();
-    let x_44 : f32 = fx_();
-    k0 = (x_43 - x_44);
-    let x_46 : f32 = k0;
-    B = x_46;
-    let x_47 : f32 = B;
-    x2 = x_47;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9661c77..0000000
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float fx_(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_50 = (*(tint_symbol_3)).y;
-  if ((x_50 >= 0.0f)) {
-    float const x_55 = x_7.injectionSwitch.y;
-    return x_55;
-  }
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return 0.0f;
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float x2 = 0.0f;
-  float B = 0.0f;
-  float k0 = 0.0f;
-  x2 = 1.0f;
-  B = 1.0f;
-  float const x_34 = fx_(x_7, tint_symbol_5, tint_symbol_6);
-  *(tint_symbol_6) = float4(x_34, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    float const x_40 = x2;
-    if ((x_40 > 2.0f)) {
-    } else {
-      break;
-    }
-    float const x_43 = fx_(x_7, tint_symbol_5, tint_symbol_6);
-    float const x_44 = fx_(x_7, tint_symbol_5, tint_symbol_6);
-    k0 = (x_43 - x_44);
-    float const x_46 = k0;
-    B = x_46;
-    float const x_47 = B;
-    x2 = x_47;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8e85648..0000000
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,152 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 81
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %fx_ "fx_"
-               OpName %main_1 "main_1"
-               OpName %x2 "x2"
-               OpName %B "B"
-               OpName %k0 "k0"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %15 = OpTypeFunction %float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %41 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-       %void = OpTypeVoid
-         %42 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %48 = OpConstantNull %float
-    %float_2 = OpConstant %float 2
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out %v4float
-        %fx_ = OpFunction %float None %15
-         %17 = OpLabel
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %22 = OpLoad %float %21
-         %24 = OpFOrdGreaterThanEqual %bool %22 %float_0
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-         %30 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %31 = OpLoad %float %30
-               OpReturnValue %31
-         %26 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-               OpSelectionMerge %37 None
-               OpBranchConditional %true %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %33
-         %37 = OpLabel
-               OpStore %x_GLF_color %41
-               OpBranch %34
-         %34 = OpLabel
-               OpBranch %32
-         %33 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %42
-         %45 = OpLabel
-         %x2 = OpVariable %_ptr_Function_float Function %48
-          %B = OpVariable %_ptr_Function_float Function %48
-         %k0 = OpVariable %_ptr_Function_float Function %48
-               OpStore %x2 %float_1
-               OpStore %B %float_1
-         %51 = OpFunctionCall %float %fx_
-         %52 = OpCompositeConstruct %v4float %51 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %52
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpLoad %float %x2
-         %59 = OpFOrdGreaterThan %bool %57 %float_2
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %54
-         %60 = OpLabel
-         %63 = OpFunctionCall %float %fx_
-         %64 = OpFunctionCall %float %fx_
-         %65 = OpFSub %float %63 %64
-               OpStore %k0 %65
-         %66 = OpLoad %float %k0
-               OpStore %B %66
-         %67 = OpLoad %float %B
-               OpStore %x2 %67
-               OpBranch %55
-         %55 = OpLabel
-               OpBranch %53
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %72 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %73 = OpFunctionCall %void %main_1
-         %74 = OpLoad %v4float %x_GLF_color
-         %75 = OpCompositeConstruct %main_out %74
-               OpReturnValue %75
-               OpFunctionEnd
-       %main = OpFunction %void None %42
-         %77 = OpLabel
-         %79 = OpLoad %v4float %gl_FragCoord_param_1
-         %78 = OpFunctionCall %main_out %main_inner %79
-         %80 = OpCompositeExtract %v4float %78 0
-               OpStore %x_GLF_color_1_1 %80
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ad60ab7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn fx_() -> f32 {
-  let x_50 : f32 = gl_FragCoord.y;
-  if ((x_50 >= 0.0)) {
-    let x_55 : f32 = x_7.injectionSwitch.y;
-    return x_55;
-  }
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var x2 : f32;
-  var B : f32;
-  var k0 : f32;
-  x2 = 1.0;
-  B = 1.0;
-  let x_34 : f32 = fx_();
-  x_GLF_color = vec4<f32>(x_34, 0.0, 0.0, 1.0);
-  loop {
-    let x_40 : f32 = x2;
-    if ((x_40 > 2.0)) {
-    } else {
-      break;
-    }
-    let x_43 : f32 = fx_();
-    let x_44 : f32 = fx_();
-    k0 = (x_43 - x_44);
-    let x_46 : f32 = k0;
-    B = x_46;
-    let x_47 : f32 = B;
-    x2 = x_47;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 34cea08..0000000
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,207 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_68 = false;
-  int x_29 = 0;
-  int x_30 = 0;
-  int x_31 = 0;
-  int globalNumbers[10] = (int[10])0;
-  int x_17 = 0;
-  int acc = 0;
-  int i_1 = 0;
-  int localNumbers[2] = (int[2])0;
-  int param = 0;
-  int x_24 = 0;
-  int x_24_phi = 0;
-  int x_23_phi = 0;
-  acc = 0;
-  i_1 = 0;
-  x_24_phi = 0;
-  x_23_phi = 0;
-  while (true) {
-    int x_33 = 0;
-    int x_92 = 0;
-    bool x_76_phi = false;
-    int x_34_phi = 0;
-    int x_25_phi = 0;
-    x_24 = x_24_phi;
-    const int x_23 = x_23_phi;
-    if ((x_23 < 4)) {
-    } else {
-      break;
-    }
-    x_68 = false;
-    x_76_phi = false;
-    while (true) {
-      bool x_81 = false;
-      int x_32 = 0;
-      bool x_81_phi = false;
-      int x_32_phi = 0;
-      int x_33_phi = 0;
-      bool x_90_phi = false;
-      const bool x_76 = x_76_phi;
-      x_30 = 0;
-      x_81_phi = x_76;
-      x_32_phi = 0;
-      while (true) {
-        x_81 = x_81_phi;
-        x_32 = x_32_phi;
-        const float x_86 = asfloat(x_8[0].x);
-        x_33_phi = 0;
-        x_90_phi = x_81;
-        if ((x_32 < int(x_86))) {
-        } else {
-          break;
-        }
-        x_68 = true;
-        x_29 = x_32;
-        x_33_phi = x_32;
-        x_90_phi = true;
-        break;
-        {
-          x_81_phi = false;
-          x_32_phi = 0;
-        }
-      }
-      x_33 = x_33_phi;
-      const bool x_90 = x_90_phi;
-      x_34_phi = x_33;
-      if (x_90) {
-        break;
-      }
-      x_92 = 0;
-      x_68 = true;
-      x_29 = x_92;
-      x_34_phi = x_92;
-      break;
-      {
-        x_76_phi = false;
-      }
-    }
-    x_31 = x_34_phi;
-    const int x_93 = x_31;
-    int x_22_1[2] = localNumbers;
-    x_22_1[1u] = x_93;
-    const int x_22[2] = x_22_1;
-    localNumbers = x_22;
-    globalNumbers[0] = 0;
-    const int x_13 = x_22[1u];
-    param = x_13;
-    x_17 = 0;
-    x_25_phi = 0;
-    while (true) {
-      const int x_25 = x_25_phi;
-      if ((x_25 <= x_13)) {
-      } else {
-        break;
-      }
-      const int x_102_save = x_13;
-      const int x_18 = globalNumbers[x_102_save];
-      if ((x_18 <= 1)) {
-        globalNumbers[x_102_save] = 1;
-      }
-      {
-        const int x_19 = (x_25 + 1);
-        x_17 = x_19;
-        x_25_phi = x_19;
-      }
-    }
-    const float x_107 = asfloat(x_8[0].x);
-    const int x_14 = globalNumbers[(int(x_107) - 1)];
-    const int x_15 = asint((x_24 + asint(x_14)));
-    acc = x_15;
-    {
-      const int x_16 = (x_23 + 1);
-      i_1 = x_16;
-      x_24_phi = x_15;
-      x_23_phi = x_16;
-    }
-  }
-  if ((x_24 == asint(4))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int yieldsZero_() {
-  bool x_116 = false;
-  int x_20 = 0;
-  int i = 0;
-  int x_26 = 0;
-  int x_134 = 0;
-  bool x_118_phi = false;
-  int x_27_phi = 0;
-  x_118_phi = false;
-  while (true) {
-    bool x_123 = false;
-    int x_28 = 0;
-    bool x_123_phi = false;
-    int x_28_phi = 0;
-    int x_26_phi = 0;
-    bool x_132_phi = false;
-    const bool x_118 = x_118_phi;
-    i = 0;
-    x_123_phi = x_118;
-    x_28_phi = 0;
-    while (true) {
-      x_123 = x_123_phi;
-      x_28 = x_28_phi;
-      const float x_128 = asfloat(x_8[0].x);
-      x_26_phi = 0;
-      x_132_phi = x_123;
-      if ((x_28 < int(x_128))) {
-      } else {
-        break;
-      }
-      x_116 = true;
-      x_20 = x_28;
-      x_26_phi = x_28;
-      x_132_phi = true;
-      break;
-      {
-        x_123_phi = false;
-        x_28_phi = 0;
-      }
-    }
-    x_26 = x_26_phi;
-    const bool x_132 = x_132_phi;
-    x_27_phi = x_26;
-    if (x_132) {
-      break;
-    }
-    x_134 = 0;
-    x_116 = true;
-    x_20 = x_134;
-    x_27_phi = x_134;
-    break;
-    {
-      x_118_phi = false;
-    }
-  }
-  return x_27_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index c30e197..0000000
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,219 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  bool x_68 = false;
-  int x_29 = 0;
-  int x_30 = 0;
-  int x_31 = 0;
-  tint_array_wrapper globalNumbers = {};
-  int x_17 = 0;
-  int acc = 0;
-  int i_1 = 0;
-  tint_array_wrapper_1 localNumbers = {};
-  int param = 0;
-  int x_24 = 0;
-  int x_24_phi = 0;
-  int x_23_phi = 0;
-  acc = 0;
-  i_1 = 0;
-  x_24_phi = 0;
-  x_23_phi = 0;
-  while (true) {
-    int x_33 = 0;
-    int x_92 = 0;
-    bool x_76_phi = false;
-    int x_34_phi = 0;
-    int x_25_phi = 0;
-    x_24 = x_24_phi;
-    int const x_23 = x_23_phi;
-    if ((x_23 < 4)) {
-    } else {
-      break;
-    }
-    x_68 = false;
-    x_76_phi = false;
-    while (true) {
-      bool x_81 = false;
-      int x_32 = 0;
-      bool x_81_phi = false;
-      int x_32_phi = 0;
-      int x_33_phi = 0;
-      bool x_90_phi = false;
-      bool const x_76 = x_76_phi;
-      x_30 = 0;
-      x_81_phi = x_76;
-      x_32_phi = 0;
-      while (true) {
-        x_81 = x_81_phi;
-        x_32 = x_32_phi;
-        float const x_86 = x_8.one;
-        x_33_phi = 0;
-        x_90_phi = x_81;
-        if ((x_32 < int(x_86))) {
-        } else {
-          break;
-        }
-        x_68 = true;
-        x_29 = x_32;
-        x_33_phi = x_32;
-        x_90_phi = true;
-        break;
-        {
-          x_81_phi = false;
-          x_32_phi = 0;
-        }
-      }
-      x_33 = x_33_phi;
-      bool const x_90 = x_90_phi;
-      x_34_phi = x_33;
-      if (x_90) {
-        break;
-      }
-      x_92 = 0;
-      x_68 = true;
-      x_29 = x_92;
-      x_34_phi = x_92;
-      break;
-      {
-        x_76_phi = false;
-      }
-    }
-    int const x_34 = x_34_phi;
-    x_31 = x_34;
-    int const x_93 = x_31;
-    tint_array_wrapper_1 const x_21 = localNumbers;
-    tint_array_wrapper_1 x_22_1 = x_21;
-    x_22_1.arr[1u] = x_93;
-    tint_array_wrapper_1 const x_22 = x_22_1;
-    localNumbers = x_22;
-    globalNumbers.arr[0] = 0;
-    int const x_13 = x_22.arr[1u];
-    param = x_13;
-    x_17 = 0;
-    x_25_phi = 0;
-    while (true) {
-      int const x_25 = x_25_phi;
-      if ((x_25 <= x_13)) {
-      } else {
-        break;
-      }
-      int const x_102_save = x_13;
-      int const x_18 = globalNumbers.arr[x_102_save];
-      if ((x_18 <= 1)) {
-        globalNumbers.arr[x_102_save] = 1;
-      }
-      {
-        int const x_19 = as_type<int>((as_type<uint>(x_25) + as_type<uint>(1)));
-        x_17 = x_19;
-        x_25_phi = x_19;
-      }
-    }
-    float const x_107 = x_8.one;
-    int const x_14 = globalNumbers.arr[as_type<int>((as_type<uint>(int(x_107)) - as_type<uint>(1)))];
-    int const x_15 = as_type<int>(as_type<int>((as_type<uint>(x_24) + as_type<uint>(as_type<int>(x_14)))));
-    acc = x_15;
-    {
-      int const x_16 = as_type<int>((as_type<uint>(x_23) + as_type<uint>(1)));
-      i_1 = x_16;
-      x_24_phi = x_15;
-      x_23_phi = x_16;
-    }
-  }
-  if ((x_24 == as_type<int>(4))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int yieldsZero_(constant buf0& x_8) {
-  bool x_116 = false;
-  int x_20 = 0;
-  int i = 0;
-  int x_26 = 0;
-  int x_134 = 0;
-  bool x_118_phi = false;
-  int x_27_phi = 0;
-  x_118_phi = false;
-  while (true) {
-    bool x_123 = false;
-    int x_28 = 0;
-    bool x_123_phi = false;
-    int x_28_phi = 0;
-    int x_26_phi = 0;
-    bool x_132_phi = false;
-    bool const x_118 = x_118_phi;
-    i = 0;
-    x_123_phi = x_118;
-    x_28_phi = 0;
-    while (true) {
-      x_123 = x_123_phi;
-      x_28 = x_28_phi;
-      float const x_128 = x_8.one;
-      x_26_phi = 0;
-      x_132_phi = x_123;
-      if ((x_28 < int(x_128))) {
-      } else {
-        break;
-      }
-      x_116 = true;
-      x_20 = x_28;
-      x_26_phi = x_28;
-      x_132_phi = true;
-      break;
-      {
-        x_123_phi = false;
-        x_28_phi = 0;
-      }
-    }
-    x_26 = x_26_phi;
-    bool const x_132 = x_132_phi;
-    x_27_phi = x_26;
-    if (x_132) {
-      break;
-    }
-    x_134 = 0;
-    x_116 = true;
-    x_20 = x_134;
-    x_27_phi = x_134;
-    break;
-    {
-      x_118_phi = false;
-    }
-  }
-  int const x_27 = x_27_phi;
-  return x_27;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f8e23e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,404 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 203
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_68 "x_68"
-               OpName %x_29 "x_29"
-               OpName %x_30 "x_30"
-               OpName %x_31 "x_31"
-               OpName %globalNumbers "globalNumbers"
-               OpName %x_17 "x_17"
-               OpName %acc "acc"
-               OpName %i_1 "i_1"
-               OpName %localNumbers "localNumbers"
-               OpName %param "param"
-               OpName %x_24 "x_24"
-               OpName %x_24_phi "x_24_phi"
-               OpName %x_23_phi "x_23_phi"
-               OpName %x_33 "x_33"
-               OpName %x_92 "x_92"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_34_phi "x_34_phi"
-               OpName %x_25_phi "x_25_phi"
-               OpName %x_81 "x_81"
-               OpName %x_32 "x_32"
-               OpName %x_81_phi "x_81_phi"
-               OpName %x_32_phi "x_32_phi"
-               OpName %x_33_phi "x_33_phi"
-               OpName %x_90_phi "x_90_phi"
-               OpName %x_22_1 "x_22_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %yieldsZero_ "yieldsZero_"
-               OpName %x_116 "x_116"
-               OpName %x_20 "x_20"
-               OpName %i "i"
-               OpName %x_26 "x_26"
-               OpName %x_134 "x_134"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_27_phi "x_27_phi"
-               OpName %x_123 "x_123"
-               OpName %x_28 "x_28"
-               OpName %x_123_phi "x_123_phi"
-               OpName %x_28_phi "x_28_phi"
-               OpName %x_26_phi "x_26_phi"
-               OpName %x_132_phi "x_132_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %31 = OpConstantNull %_arr_int_uint_10
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %39 = OpConstantNull %_arr_int_uint_2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %144 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %145 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %146 = OpTypeFunction %main_out
-        %157 = OpTypeFunction %int
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_68 = OpVariable %_ptr_Function_bool Function %19
-       %x_29 = OpVariable %_ptr_Function_int Function %23
-       %x_30 = OpVariable %_ptr_Function_int Function %23
-       %x_31 = OpVariable %_ptr_Function_int Function %23
-%globalNumbers = OpVariable %_ptr_Function__arr_int_uint_10 Function %31
-       %x_17 = OpVariable %_ptr_Function_int Function %23
-        %acc = OpVariable %_ptr_Function_int Function %23
-        %i_1 = OpVariable %_ptr_Function_int Function %23
-%localNumbers = OpVariable %_ptr_Function__arr_int_uint_2 Function %39
-      %param = OpVariable %_ptr_Function_int Function %23
-       %x_24 = OpVariable %_ptr_Function_int Function %23
-   %x_24_phi = OpVariable %_ptr_Function_int Function %23
-   %x_23_phi = OpVariable %_ptr_Function_int Function %23
-       %x_33 = OpVariable %_ptr_Function_int Function %23
-       %x_92 = OpVariable %_ptr_Function_int Function %23
-   %x_76_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_34_phi = OpVariable %_ptr_Function_int Function %23
-   %x_25_phi = OpVariable %_ptr_Function_int Function %23
-       %x_81 = OpVariable %_ptr_Function_bool Function %19
-       %x_32 = OpVariable %_ptr_Function_int Function %23
-   %x_81_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_32_phi = OpVariable %_ptr_Function_int Function %23
-   %x_33_phi = OpVariable %_ptr_Function_int Function %23
-   %x_90_phi = OpVariable %_ptr_Function_bool Function %19
-     %x_22_1 = OpVariable %_ptr_Function__arr_int_uint_2 Function %39
-               OpStore %x_68 %false
-               OpStore %acc %int_0
-               OpStore %i_1 %int_0
-               OpStore %x_24_phi %int_0
-               OpStore %x_23_phi %int_0
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %54 = OpLoad %int %x_24_phi
-               OpStore %x_24 %54
-         %55 = OpLoad %int %x_23_phi
-         %57 = OpSLessThan %bool %55 %int_4
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %46
-         %58 = OpLabel
-               OpStore %x_68 %false
-               OpStore %x_76_phi %false
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %71 = OpLoad %bool %x_76_phi
-               OpStore %x_30 %int_0
-               OpStore %x_81_phi %71
-               OpStore %x_32_phi %int_0
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %bool %x_81_phi
-               OpStore %x_81 %76
-         %77 = OpLoad %int %x_32_phi
-               OpStore %x_32 %77
-         %80 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-         %81 = OpLoad %float %80
-               OpStore %x_33_phi %int_0
-         %82 = OpLoad %bool %x_81
-               OpStore %x_90_phi %82
-         %83 = OpLoad %int %x_32
-         %84 = OpConvertFToS %int %81
-         %85 = OpSLessThan %bool %83 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-               OpBranch %86
-         %88 = OpLabel
-               OpBranch %73
-         %86 = OpLabel
-               OpStore %x_68 %true
-         %90 = OpLoad %int %x_32
-               OpStore %x_29 %90
-         %91 = OpLoad %int %x_32
-               OpStore %x_33_phi %91
-               OpStore %x_90_phi %true
-               OpBranch %73
-         %74 = OpLabel
-               OpStore %x_81_phi %false
-               OpStore %x_32_phi %int_0
-               OpBranch %72
-         %73 = OpLabel
-         %92 = OpLoad %int %x_33_phi
-               OpStore %x_33 %92
-         %93 = OpLoad %bool %x_90_phi
-         %94 = OpLoad %int %x_33
-               OpStore %x_34_phi %94
-               OpSelectionMerge %95 None
-               OpBranchConditional %93 %96 %95
-         %96 = OpLabel
-               OpBranch %62
-         %95 = OpLabel
-               OpStore %x_92 %int_0
-               OpStore %x_68 %true
-         %97 = OpLoad %int %x_92
-               OpStore %x_29 %97
-         %98 = OpLoad %int %x_92
-               OpStore %x_34_phi %98
-               OpBranch %62
-         %63 = OpLabel
-               OpStore %x_76_phi %false
-               OpBranch %61
-         %62 = OpLabel
-         %99 = OpLoad %int %x_34_phi
-               OpStore %x_31 %99
-        %100 = OpLoad %int %x_31
-        %101 = OpLoad %_arr_int_uint_2 %localNumbers
-               OpStore %x_22_1 %101
-        %104 = OpAccessChain %_ptr_Function_int %x_22_1 %uint_1
-               OpStore %104 %100
-        %105 = OpLoad %_arr_int_uint_2 %x_22_1
-               OpStore %localNumbers %105
-        %106 = OpAccessChain %_ptr_Function_int %globalNumbers %int_0
-               OpStore %106 %int_0
-        %107 = OpCompositeExtract %int %105 1
-               OpStore %param %107
-               OpStore %x_17 %int_0
-               OpStore %x_25_phi %int_0
-               OpBranch %108
-        %108 = OpLabel
-               OpLoopMerge %109 %110 None
-               OpBranch %111
-        %111 = OpLabel
-        %112 = OpLoad %int %x_25_phi
-        %113 = OpSLessThanEqual %bool %112 %107
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %116
-        %115 = OpLabel
-               OpBranch %114
-        %116 = OpLabel
-               OpBranch %109
-        %114 = OpLabel
-        %117 = OpAccessChain %_ptr_Function_int %globalNumbers %107
-        %118 = OpLoad %int %117
-        %120 = OpSLessThanEqual %bool %118 %int_1
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %121
-        %122 = OpLabel
-        %123 = OpAccessChain %_ptr_Function_int %globalNumbers %107
-               OpStore %123 %int_1
-               OpBranch %121
-        %121 = OpLabel
-               OpBranch %110
-        %110 = OpLabel
-        %124 = OpIAdd %int %112 %int_1
-               OpStore %x_17 %124
-               OpStore %x_25_phi %124
-               OpBranch %108
-        %109 = OpLabel
-        %125 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-        %126 = OpLoad %float %125
-        %127 = OpConvertFToS %int %126
-        %128 = OpISub %int %127 %int_1
-        %129 = OpAccessChain %_ptr_Function_int %globalNumbers %128
-        %130 = OpLoad %int %129
-        %132 = OpLoad %int %x_24
-        %133 = OpCopyObject %int %130
-        %134 = OpIAdd %int %132 %133
-        %131 = OpCopyObject %int %134
-               OpStore %acc %131
-               OpBranch %47
-         %47 = OpLabel
-        %135 = OpIAdd %int %55 %int_1
-               OpStore %i_1 %135
-               OpStore %x_24_phi %131
-               OpStore %x_23_phi %135
-               OpBranch %45
-         %46 = OpLabel
-        %136 = OpLoad %int %x_24
-        %137 = OpCopyObject %int %int_4
-        %138 = OpIEqual %bool %136 %137
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpStore %x_GLF_color %144
-               OpBranch %139
-        %141 = OpLabel
-               OpStore %x_GLF_color %145
-               OpBranch %139
-        %139 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %146
-        %149 = OpLabel
-        %150 = OpFunctionCall %void %main_1
-        %151 = OpLoad %v4float %x_GLF_color
-        %152 = OpCompositeConstruct %main_out %151
-               OpReturnValue %152
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-        %154 = OpLabel
-        %155 = OpFunctionCall %main_out %main_inner
-        %156 = OpCompositeExtract %v4float %155 0
-               OpStore %x_GLF_color_1_1 %156
-               OpReturn
-               OpFunctionEnd
-%yieldsZero_ = OpFunction %int None %157
-        %159 = OpLabel
-      %x_116 = OpVariable %_ptr_Function_bool Function %19
-       %x_20 = OpVariable %_ptr_Function_int Function %23
-          %i = OpVariable %_ptr_Function_int Function %23
-       %x_26 = OpVariable %_ptr_Function_int Function %23
-      %x_134 = OpVariable %_ptr_Function_int Function %23
-  %x_118_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_27_phi = OpVariable %_ptr_Function_int Function %23
-      %x_123 = OpVariable %_ptr_Function_bool Function %19
-       %x_28 = OpVariable %_ptr_Function_int Function %23
-  %x_123_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_28_phi = OpVariable %_ptr_Function_int Function %23
-   %x_26_phi = OpVariable %_ptr_Function_int Function %23
-  %x_132_phi = OpVariable %_ptr_Function_bool Function %19
-               OpStore %x_116 %false
-               OpStore %x_118_phi %false
-               OpBranch %167
-        %167 = OpLabel
-               OpLoopMerge %168 %169 None
-               OpBranch %170
-        %170 = OpLabel
-        %177 = OpLoad %bool %x_118_phi
-               OpStore %i %int_0
-               OpStore %x_123_phi %177
-               OpStore %x_28_phi %int_0
-               OpBranch %178
-        %178 = OpLabel
-               OpLoopMerge %179 %180 None
-               OpBranch %181
-        %181 = OpLabel
-        %182 = OpLoad %bool %x_123_phi
-               OpStore %x_123 %182
-        %183 = OpLoad %int %x_28_phi
-               OpStore %x_28 %183
-        %184 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-        %185 = OpLoad %float %184
-               OpStore %x_26_phi %int_0
-        %186 = OpLoad %bool %x_123
-               OpStore %x_132_phi %186
-        %187 = OpLoad %int %x_28
-        %188 = OpConvertFToS %int %185
-        %189 = OpSLessThan %bool %187 %188
-               OpSelectionMerge %190 None
-               OpBranchConditional %189 %191 %192
-        %191 = OpLabel
-               OpBranch %190
-        %192 = OpLabel
-               OpBranch %179
-        %190 = OpLabel
-               OpStore %x_116 %true
-        %193 = OpLoad %int %x_28
-               OpStore %x_20 %193
-        %194 = OpLoad %int %x_28
-               OpStore %x_26_phi %194
-               OpStore %x_132_phi %true
-               OpBranch %179
-        %180 = OpLabel
-               OpStore %x_123_phi %false
-               OpStore %x_28_phi %int_0
-               OpBranch %178
-        %179 = OpLabel
-        %195 = OpLoad %int %x_26_phi
-               OpStore %x_26 %195
-        %196 = OpLoad %bool %x_132_phi
-        %197 = OpLoad %int %x_26
-               OpStore %x_27_phi %197
-               OpSelectionMerge %198 None
-               OpBranchConditional %196 %199 %198
-        %199 = OpLabel
-               OpBranch %168
-        %198 = OpLabel
-               OpStore %x_134 %int_0
-               OpStore %x_116 %true
-        %200 = OpLoad %int %x_134
-               OpStore %x_20 %200
-        %201 = OpLoad %int %x_134
-               OpStore %x_27_phi %201
-               OpBranch %168
-        %169 = OpLabel
-               OpStore %x_118_phi %false
-               OpBranch %167
-        %168 = OpLabel
-        %202 = OpLoad %int %x_27_phi
-               OpReturnValue %202
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 68df8e3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,212 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_68 : bool = false;
-  var x_29 : i32;
-  var x_30 : i32;
-  var x_31 : i32;
-  var globalNumbers : array<i32, 10>;
-  var x_17 : i32;
-  var acc : i32;
-  var i_1 : i32;
-  var localNumbers : array<i32, 2>;
-  var param : i32;
-  var x_24 : i32;
-  var x_24_phi : i32;
-  var x_23_phi : i32;
-  acc = 0;
-  i_1 = 0;
-  x_24_phi = 0;
-  x_23_phi = 0;
-  loop {
-    var x_33 : i32;
-    var x_92 : i32;
-    var x_76_phi : bool;
-    var x_34_phi : i32;
-    var x_25_phi : i32;
-    x_24 = x_24_phi;
-    let x_23 : i32 = x_23_phi;
-    if ((x_23 < 4)) {
-    } else {
-      break;
-    }
-    x_68 = false;
-    x_76_phi = false;
-    loop {
-      var x_81 : bool;
-      var x_32 : i32;
-      var x_81_phi : bool;
-      var x_32_phi : i32;
-      var x_33_phi : i32;
-      var x_90_phi : bool;
-      let x_76 : bool = x_76_phi;
-      x_30 = 0;
-      x_81_phi = x_76;
-      x_32_phi = 0;
-      loop {
-        x_81 = x_81_phi;
-        x_32 = x_32_phi;
-        let x_86 : f32 = x_8.one;
-        x_33_phi = 0;
-        x_90_phi = x_81;
-        if ((x_32 < i32(x_86))) {
-        } else {
-          break;
-        }
-        x_68 = true;
-        x_29 = x_32;
-        x_33_phi = x_32;
-        x_90_phi = true;
-        break;
-
-        continuing {
-          x_81_phi = false;
-          x_32_phi = 0;
-        }
-      }
-      x_33 = x_33_phi;
-      let x_90 : bool = x_90_phi;
-      x_34_phi = x_33;
-      if (x_90) {
-        break;
-      }
-      x_92 = 0;
-      x_68 = true;
-      x_29 = x_92;
-      x_34_phi = x_92;
-      break;
-
-      continuing {
-        x_76_phi = false;
-      }
-    }
-    let x_34 : i32 = x_34_phi;
-    x_31 = x_34;
-    let x_93 : i32 = x_31;
-    let x_21 : array<i32, 2> = localNumbers;
-    var x_22_1 : array<i32, 2> = x_21;
-    x_22_1[1u] = x_93;
-    let x_22 : array<i32, 2> = x_22_1;
-    localNumbers = x_22;
-    globalNumbers[0] = 0;
-    let x_95 : ptr<function, i32> = &(localNumbers[1]);
-    let x_13 : i32 = x_22[1u];
-    param = x_13;
-    x_17 = 0;
-    x_25_phi = 0;
-    loop {
-      let x_25 : i32 = x_25_phi;
-      if ((x_25 <= x_13)) {
-      } else {
-        break;
-      }
-      let x_102 : ptr<function, i32> = &(globalNumbers[x_13]);
-      let x_18 : i32 = *(x_102);
-      if ((x_18 <= 1)) {
-        *(x_102) = 1;
-      }
-
-      continuing {
-        let x_19 : i32 = (x_25 + 1);
-        x_17 = x_19;
-        x_25_phi = x_19;
-      }
-    }
-    let x_107 : f32 = x_8.one;
-    let x_14 : i32 = globalNumbers[(i32(x_107) - 1)];
-    let x_15 : i32 = bitcast<i32>((x_24 + bitcast<i32>(x_14)));
-    acc = x_15;
-
-    continuing {
-      let x_16 : i32 = (x_23 + 1);
-      i_1 = x_16;
-      x_24_phi = x_15;
-      x_23_phi = x_16;
-    }
-  }
-  if ((x_24 == bitcast<i32>(4))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn yieldsZero_() -> i32 {
-  var x_116 : bool = false;
-  var x_20 : i32;
-  var i : i32;
-  var x_26 : i32;
-  var x_134 : i32;
-  var x_118_phi : bool;
-  var x_27_phi : i32;
-  x_118_phi = false;
-  loop {
-    var x_123 : bool;
-    var x_28 : i32;
-    var x_123_phi : bool;
-    var x_28_phi : i32;
-    var x_26_phi : i32;
-    var x_132_phi : bool;
-    let x_118 : bool = x_118_phi;
-    i = 0;
-    x_123_phi = x_118;
-    x_28_phi = 0;
-    loop {
-      x_123 = x_123_phi;
-      x_28 = x_28_phi;
-      let x_128 : f32 = x_8.one;
-      x_26_phi = 0;
-      x_132_phi = x_123;
-      if ((x_28 < i32(x_128))) {
-      } else {
-        break;
-      }
-      x_116 = true;
-      x_20 = x_28;
-      x_26_phi = x_28;
-      x_132_phi = true;
-      break;
-
-      continuing {
-        x_123_phi = false;
-        x_28_phi = 0;
-      }
-    }
-    x_26 = x_26_phi;
-    let x_132 : bool = x_132_phi;
-    x_27_phi = x_26;
-    if (x_132) {
-      break;
-    }
-    x_134 = 0;
-    x_116 = true;
-    x_20 = x_134;
-    x_27_phi = x_134;
-    break;
-
-    continuing {
-      x_118_phi = false;
-    }
-  }
-  let x_27 : i32 = x_27_phi;
-  return x_27;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 34cea08..0000000
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,207 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_68 = false;
-  int x_29 = 0;
-  int x_30 = 0;
-  int x_31 = 0;
-  int globalNumbers[10] = (int[10])0;
-  int x_17 = 0;
-  int acc = 0;
-  int i_1 = 0;
-  int localNumbers[2] = (int[2])0;
-  int param = 0;
-  int x_24 = 0;
-  int x_24_phi = 0;
-  int x_23_phi = 0;
-  acc = 0;
-  i_1 = 0;
-  x_24_phi = 0;
-  x_23_phi = 0;
-  while (true) {
-    int x_33 = 0;
-    int x_92 = 0;
-    bool x_76_phi = false;
-    int x_34_phi = 0;
-    int x_25_phi = 0;
-    x_24 = x_24_phi;
-    const int x_23 = x_23_phi;
-    if ((x_23 < 4)) {
-    } else {
-      break;
-    }
-    x_68 = false;
-    x_76_phi = false;
-    while (true) {
-      bool x_81 = false;
-      int x_32 = 0;
-      bool x_81_phi = false;
-      int x_32_phi = 0;
-      int x_33_phi = 0;
-      bool x_90_phi = false;
-      const bool x_76 = x_76_phi;
-      x_30 = 0;
-      x_81_phi = x_76;
-      x_32_phi = 0;
-      while (true) {
-        x_81 = x_81_phi;
-        x_32 = x_32_phi;
-        const float x_86 = asfloat(x_8[0].x);
-        x_33_phi = 0;
-        x_90_phi = x_81;
-        if ((x_32 < int(x_86))) {
-        } else {
-          break;
-        }
-        x_68 = true;
-        x_29 = x_32;
-        x_33_phi = x_32;
-        x_90_phi = true;
-        break;
-        {
-          x_81_phi = false;
-          x_32_phi = 0;
-        }
-      }
-      x_33 = x_33_phi;
-      const bool x_90 = x_90_phi;
-      x_34_phi = x_33;
-      if (x_90) {
-        break;
-      }
-      x_92 = 0;
-      x_68 = true;
-      x_29 = x_92;
-      x_34_phi = x_92;
-      break;
-      {
-        x_76_phi = false;
-      }
-    }
-    x_31 = x_34_phi;
-    const int x_93 = x_31;
-    int x_22_1[2] = localNumbers;
-    x_22_1[1u] = x_93;
-    const int x_22[2] = x_22_1;
-    localNumbers = x_22;
-    globalNumbers[0] = 0;
-    const int x_13 = x_22[1u];
-    param = x_13;
-    x_17 = 0;
-    x_25_phi = 0;
-    while (true) {
-      const int x_25 = x_25_phi;
-      if ((x_25 <= x_13)) {
-      } else {
-        break;
-      }
-      const int x_102_save = x_13;
-      const int x_18 = globalNumbers[x_102_save];
-      if ((x_18 <= 1)) {
-        globalNumbers[x_102_save] = 1;
-      }
-      {
-        const int x_19 = (x_25 + 1);
-        x_17 = x_19;
-        x_25_phi = x_19;
-      }
-    }
-    const float x_107 = asfloat(x_8[0].x);
-    const int x_14 = globalNumbers[(int(x_107) - 1)];
-    const int x_15 = asint((x_24 + asint(x_14)));
-    acc = x_15;
-    {
-      const int x_16 = (x_23 + 1);
-      i_1 = x_16;
-      x_24_phi = x_15;
-      x_23_phi = x_16;
-    }
-  }
-  if ((x_24 == asint(4))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int yieldsZero_() {
-  bool x_116 = false;
-  int x_20 = 0;
-  int i = 0;
-  int x_26 = 0;
-  int x_134 = 0;
-  bool x_118_phi = false;
-  int x_27_phi = 0;
-  x_118_phi = false;
-  while (true) {
-    bool x_123 = false;
-    int x_28 = 0;
-    bool x_123_phi = false;
-    int x_28_phi = 0;
-    int x_26_phi = 0;
-    bool x_132_phi = false;
-    const bool x_118 = x_118_phi;
-    i = 0;
-    x_123_phi = x_118;
-    x_28_phi = 0;
-    while (true) {
-      x_123 = x_123_phi;
-      x_28 = x_28_phi;
-      const float x_128 = asfloat(x_8[0].x);
-      x_26_phi = 0;
-      x_132_phi = x_123;
-      if ((x_28 < int(x_128))) {
-      } else {
-        break;
-      }
-      x_116 = true;
-      x_20 = x_28;
-      x_26_phi = x_28;
-      x_132_phi = true;
-      break;
-      {
-        x_123_phi = false;
-        x_28_phi = 0;
-      }
-    }
-    x_26 = x_26_phi;
-    const bool x_132 = x_132_phi;
-    x_27_phi = x_26;
-    if (x_132) {
-      break;
-    }
-    x_134 = 0;
-    x_116 = true;
-    x_20 = x_134;
-    x_27_phi = x_134;
-    break;
-    {
-      x_118_phi = false;
-    }
-  }
-  return x_27_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index c30e197..0000000
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,219 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct tint_array_wrapper_1 {
-  int arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  bool x_68 = false;
-  int x_29 = 0;
-  int x_30 = 0;
-  int x_31 = 0;
-  tint_array_wrapper globalNumbers = {};
-  int x_17 = 0;
-  int acc = 0;
-  int i_1 = 0;
-  tint_array_wrapper_1 localNumbers = {};
-  int param = 0;
-  int x_24 = 0;
-  int x_24_phi = 0;
-  int x_23_phi = 0;
-  acc = 0;
-  i_1 = 0;
-  x_24_phi = 0;
-  x_23_phi = 0;
-  while (true) {
-    int x_33 = 0;
-    int x_92 = 0;
-    bool x_76_phi = false;
-    int x_34_phi = 0;
-    int x_25_phi = 0;
-    x_24 = x_24_phi;
-    int const x_23 = x_23_phi;
-    if ((x_23 < 4)) {
-    } else {
-      break;
-    }
-    x_68 = false;
-    x_76_phi = false;
-    while (true) {
-      bool x_81 = false;
-      int x_32 = 0;
-      bool x_81_phi = false;
-      int x_32_phi = 0;
-      int x_33_phi = 0;
-      bool x_90_phi = false;
-      bool const x_76 = x_76_phi;
-      x_30 = 0;
-      x_81_phi = x_76;
-      x_32_phi = 0;
-      while (true) {
-        x_81 = x_81_phi;
-        x_32 = x_32_phi;
-        float const x_86 = x_8.one;
-        x_33_phi = 0;
-        x_90_phi = x_81;
-        if ((x_32 < int(x_86))) {
-        } else {
-          break;
-        }
-        x_68 = true;
-        x_29 = x_32;
-        x_33_phi = x_32;
-        x_90_phi = true;
-        break;
-        {
-          x_81_phi = false;
-          x_32_phi = 0;
-        }
-      }
-      x_33 = x_33_phi;
-      bool const x_90 = x_90_phi;
-      x_34_phi = x_33;
-      if (x_90) {
-        break;
-      }
-      x_92 = 0;
-      x_68 = true;
-      x_29 = x_92;
-      x_34_phi = x_92;
-      break;
-      {
-        x_76_phi = false;
-      }
-    }
-    int const x_34 = x_34_phi;
-    x_31 = x_34;
-    int const x_93 = x_31;
-    tint_array_wrapper_1 const x_21 = localNumbers;
-    tint_array_wrapper_1 x_22_1 = x_21;
-    x_22_1.arr[1u] = x_93;
-    tint_array_wrapper_1 const x_22 = x_22_1;
-    localNumbers = x_22;
-    globalNumbers.arr[0] = 0;
-    int const x_13 = x_22.arr[1u];
-    param = x_13;
-    x_17 = 0;
-    x_25_phi = 0;
-    while (true) {
-      int const x_25 = x_25_phi;
-      if ((x_25 <= x_13)) {
-      } else {
-        break;
-      }
-      int const x_102_save = x_13;
-      int const x_18 = globalNumbers.arr[x_102_save];
-      if ((x_18 <= 1)) {
-        globalNumbers.arr[x_102_save] = 1;
-      }
-      {
-        int const x_19 = as_type<int>((as_type<uint>(x_25) + as_type<uint>(1)));
-        x_17 = x_19;
-        x_25_phi = x_19;
-      }
-    }
-    float const x_107 = x_8.one;
-    int const x_14 = globalNumbers.arr[as_type<int>((as_type<uint>(int(x_107)) - as_type<uint>(1)))];
-    int const x_15 = as_type<int>(as_type<int>((as_type<uint>(x_24) + as_type<uint>(as_type<int>(x_14)))));
-    acc = x_15;
-    {
-      int const x_16 = as_type<int>((as_type<uint>(x_23) + as_type<uint>(1)));
-      i_1 = x_16;
-      x_24_phi = x_15;
-      x_23_phi = x_16;
-    }
-  }
-  if ((x_24 == as_type<int>(4))) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-int yieldsZero_(constant buf0& x_8) {
-  bool x_116 = false;
-  int x_20 = 0;
-  int i = 0;
-  int x_26 = 0;
-  int x_134 = 0;
-  bool x_118_phi = false;
-  int x_27_phi = 0;
-  x_118_phi = false;
-  while (true) {
-    bool x_123 = false;
-    int x_28 = 0;
-    bool x_123_phi = false;
-    int x_28_phi = 0;
-    int x_26_phi = 0;
-    bool x_132_phi = false;
-    bool const x_118 = x_118_phi;
-    i = 0;
-    x_123_phi = x_118;
-    x_28_phi = 0;
-    while (true) {
-      x_123 = x_123_phi;
-      x_28 = x_28_phi;
-      float const x_128 = x_8.one;
-      x_26_phi = 0;
-      x_132_phi = x_123;
-      if ((x_28 < int(x_128))) {
-      } else {
-        break;
-      }
-      x_116 = true;
-      x_20 = x_28;
-      x_26_phi = x_28;
-      x_132_phi = true;
-      break;
-      {
-        x_123_phi = false;
-        x_28_phi = 0;
-      }
-    }
-    x_26 = x_26_phi;
-    bool const x_132 = x_132_phi;
-    x_27_phi = x_26;
-    if (x_132) {
-      break;
-    }
-    x_134 = 0;
-    x_116 = true;
-    x_20 = x_134;
-    x_27_phi = x_134;
-    break;
-    {
-      x_118_phi = false;
-    }
-  }
-  int const x_27 = x_27_phi;
-  return x_27;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f8e23e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,404 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 203
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_68 "x_68"
-               OpName %x_29 "x_29"
-               OpName %x_30 "x_30"
-               OpName %x_31 "x_31"
-               OpName %globalNumbers "globalNumbers"
-               OpName %x_17 "x_17"
-               OpName %acc "acc"
-               OpName %i_1 "i_1"
-               OpName %localNumbers "localNumbers"
-               OpName %param "param"
-               OpName %x_24 "x_24"
-               OpName %x_24_phi "x_24_phi"
-               OpName %x_23_phi "x_23_phi"
-               OpName %x_33 "x_33"
-               OpName %x_92 "x_92"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_34_phi "x_34_phi"
-               OpName %x_25_phi "x_25_phi"
-               OpName %x_81 "x_81"
-               OpName %x_32 "x_32"
-               OpName %x_81_phi "x_81_phi"
-               OpName %x_32_phi "x_32_phi"
-               OpName %x_33_phi "x_33_phi"
-               OpName %x_90_phi "x_90_phi"
-               OpName %x_22_1 "x_22_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %yieldsZero_ "yieldsZero_"
-               OpName %x_116 "x_116"
-               OpName %x_20 "x_20"
-               OpName %i "i"
-               OpName %x_26 "x_26"
-               OpName %x_134 "x_134"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_27_phi "x_27_phi"
-               OpName %x_123 "x_123"
-               OpName %x_28 "x_28"
-               OpName %x_123_phi "x_123_phi"
-               OpName %x_28_phi "x_28_phi"
-               OpName %x_26_phi "x_26_phi"
-               OpName %x_132_phi "x_132_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %_arr_int_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %19 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %31 = OpConstantNull %_arr_int_uint_10
-     %uint_2 = OpConstant %uint 2
-%_arr_int_uint_2 = OpTypeArray %int %uint_2
-%_ptr_Function__arr_int_uint_2 = OpTypePointer Function %_arr_int_uint_2
-         %39 = OpConstantNull %_arr_int_uint_2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %144 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %145 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %146 = OpTypeFunction %main_out
-        %157 = OpTypeFunction %int
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_68 = OpVariable %_ptr_Function_bool Function %19
-       %x_29 = OpVariable %_ptr_Function_int Function %23
-       %x_30 = OpVariable %_ptr_Function_int Function %23
-       %x_31 = OpVariable %_ptr_Function_int Function %23
-%globalNumbers = OpVariable %_ptr_Function__arr_int_uint_10 Function %31
-       %x_17 = OpVariable %_ptr_Function_int Function %23
-        %acc = OpVariable %_ptr_Function_int Function %23
-        %i_1 = OpVariable %_ptr_Function_int Function %23
-%localNumbers = OpVariable %_ptr_Function__arr_int_uint_2 Function %39
-      %param = OpVariable %_ptr_Function_int Function %23
-       %x_24 = OpVariable %_ptr_Function_int Function %23
-   %x_24_phi = OpVariable %_ptr_Function_int Function %23
-   %x_23_phi = OpVariable %_ptr_Function_int Function %23
-       %x_33 = OpVariable %_ptr_Function_int Function %23
-       %x_92 = OpVariable %_ptr_Function_int Function %23
-   %x_76_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_34_phi = OpVariable %_ptr_Function_int Function %23
-   %x_25_phi = OpVariable %_ptr_Function_int Function %23
-       %x_81 = OpVariable %_ptr_Function_bool Function %19
-       %x_32 = OpVariable %_ptr_Function_int Function %23
-   %x_81_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_32_phi = OpVariable %_ptr_Function_int Function %23
-   %x_33_phi = OpVariable %_ptr_Function_int Function %23
-   %x_90_phi = OpVariable %_ptr_Function_bool Function %19
-     %x_22_1 = OpVariable %_ptr_Function__arr_int_uint_2 Function %39
-               OpStore %x_68 %false
-               OpStore %acc %int_0
-               OpStore %i_1 %int_0
-               OpStore %x_24_phi %int_0
-               OpStore %x_23_phi %int_0
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-         %54 = OpLoad %int %x_24_phi
-               OpStore %x_24 %54
-         %55 = OpLoad %int %x_23_phi
-         %57 = OpSLessThan %bool %55 %int_4
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %46
-         %58 = OpLabel
-               OpStore %x_68 %false
-               OpStore %x_76_phi %false
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %71 = OpLoad %bool %x_76_phi
-               OpStore %x_30 %int_0
-               OpStore %x_81_phi %71
-               OpStore %x_32_phi %int_0
-               OpBranch %72
-         %72 = OpLabel
-               OpLoopMerge %73 %74 None
-               OpBranch %75
-         %75 = OpLabel
-         %76 = OpLoad %bool %x_81_phi
-               OpStore %x_81 %76
-         %77 = OpLoad %int %x_32_phi
-               OpStore %x_32 %77
-         %80 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-         %81 = OpLoad %float %80
-               OpStore %x_33_phi %int_0
-         %82 = OpLoad %bool %x_81
-               OpStore %x_90_phi %82
-         %83 = OpLoad %int %x_32
-         %84 = OpConvertFToS %int %81
-         %85 = OpSLessThan %bool %83 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-               OpBranch %86
-         %88 = OpLabel
-               OpBranch %73
-         %86 = OpLabel
-               OpStore %x_68 %true
-         %90 = OpLoad %int %x_32
-               OpStore %x_29 %90
-         %91 = OpLoad %int %x_32
-               OpStore %x_33_phi %91
-               OpStore %x_90_phi %true
-               OpBranch %73
-         %74 = OpLabel
-               OpStore %x_81_phi %false
-               OpStore %x_32_phi %int_0
-               OpBranch %72
-         %73 = OpLabel
-         %92 = OpLoad %int %x_33_phi
-               OpStore %x_33 %92
-         %93 = OpLoad %bool %x_90_phi
-         %94 = OpLoad %int %x_33
-               OpStore %x_34_phi %94
-               OpSelectionMerge %95 None
-               OpBranchConditional %93 %96 %95
-         %96 = OpLabel
-               OpBranch %62
-         %95 = OpLabel
-               OpStore %x_92 %int_0
-               OpStore %x_68 %true
-         %97 = OpLoad %int %x_92
-               OpStore %x_29 %97
-         %98 = OpLoad %int %x_92
-               OpStore %x_34_phi %98
-               OpBranch %62
-         %63 = OpLabel
-               OpStore %x_76_phi %false
-               OpBranch %61
-         %62 = OpLabel
-         %99 = OpLoad %int %x_34_phi
-               OpStore %x_31 %99
-        %100 = OpLoad %int %x_31
-        %101 = OpLoad %_arr_int_uint_2 %localNumbers
-               OpStore %x_22_1 %101
-        %104 = OpAccessChain %_ptr_Function_int %x_22_1 %uint_1
-               OpStore %104 %100
-        %105 = OpLoad %_arr_int_uint_2 %x_22_1
-               OpStore %localNumbers %105
-        %106 = OpAccessChain %_ptr_Function_int %globalNumbers %int_0
-               OpStore %106 %int_0
-        %107 = OpCompositeExtract %int %105 1
-               OpStore %param %107
-               OpStore %x_17 %int_0
-               OpStore %x_25_phi %int_0
-               OpBranch %108
-        %108 = OpLabel
-               OpLoopMerge %109 %110 None
-               OpBranch %111
-        %111 = OpLabel
-        %112 = OpLoad %int %x_25_phi
-        %113 = OpSLessThanEqual %bool %112 %107
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %116
-        %115 = OpLabel
-               OpBranch %114
-        %116 = OpLabel
-               OpBranch %109
-        %114 = OpLabel
-        %117 = OpAccessChain %_ptr_Function_int %globalNumbers %107
-        %118 = OpLoad %int %117
-        %120 = OpSLessThanEqual %bool %118 %int_1
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %121
-        %122 = OpLabel
-        %123 = OpAccessChain %_ptr_Function_int %globalNumbers %107
-               OpStore %123 %int_1
-               OpBranch %121
-        %121 = OpLabel
-               OpBranch %110
-        %110 = OpLabel
-        %124 = OpIAdd %int %112 %int_1
-               OpStore %x_17 %124
-               OpStore %x_25_phi %124
-               OpBranch %108
-        %109 = OpLabel
-        %125 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-        %126 = OpLoad %float %125
-        %127 = OpConvertFToS %int %126
-        %128 = OpISub %int %127 %int_1
-        %129 = OpAccessChain %_ptr_Function_int %globalNumbers %128
-        %130 = OpLoad %int %129
-        %132 = OpLoad %int %x_24
-        %133 = OpCopyObject %int %130
-        %134 = OpIAdd %int %132 %133
-        %131 = OpCopyObject %int %134
-               OpStore %acc %131
-               OpBranch %47
-         %47 = OpLabel
-        %135 = OpIAdd %int %55 %int_1
-               OpStore %i_1 %135
-               OpStore %x_24_phi %131
-               OpStore %x_23_phi %135
-               OpBranch %45
-         %46 = OpLabel
-        %136 = OpLoad %int %x_24
-        %137 = OpCopyObject %int %int_4
-        %138 = OpIEqual %bool %136 %137
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpStore %x_GLF_color %144
-               OpBranch %139
-        %141 = OpLabel
-               OpStore %x_GLF_color %145
-               OpBranch %139
-        %139 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %146
-        %149 = OpLabel
-        %150 = OpFunctionCall %void %main_1
-        %151 = OpLoad %v4float %x_GLF_color
-        %152 = OpCompositeConstruct %main_out %151
-               OpReturnValue %152
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-        %154 = OpLabel
-        %155 = OpFunctionCall %main_out %main_inner
-        %156 = OpCompositeExtract %v4float %155 0
-               OpStore %x_GLF_color_1_1 %156
-               OpReturn
-               OpFunctionEnd
-%yieldsZero_ = OpFunction %int None %157
-        %159 = OpLabel
-      %x_116 = OpVariable %_ptr_Function_bool Function %19
-       %x_20 = OpVariable %_ptr_Function_int Function %23
-          %i = OpVariable %_ptr_Function_int Function %23
-       %x_26 = OpVariable %_ptr_Function_int Function %23
-      %x_134 = OpVariable %_ptr_Function_int Function %23
-  %x_118_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_27_phi = OpVariable %_ptr_Function_int Function %23
-      %x_123 = OpVariable %_ptr_Function_bool Function %19
-       %x_28 = OpVariable %_ptr_Function_int Function %23
-  %x_123_phi = OpVariable %_ptr_Function_bool Function %19
-   %x_28_phi = OpVariable %_ptr_Function_int Function %23
-   %x_26_phi = OpVariable %_ptr_Function_int Function %23
-  %x_132_phi = OpVariable %_ptr_Function_bool Function %19
-               OpStore %x_116 %false
-               OpStore %x_118_phi %false
-               OpBranch %167
-        %167 = OpLabel
-               OpLoopMerge %168 %169 None
-               OpBranch %170
-        %170 = OpLabel
-        %177 = OpLoad %bool %x_118_phi
-               OpStore %i %int_0
-               OpStore %x_123_phi %177
-               OpStore %x_28_phi %int_0
-               OpBranch %178
-        %178 = OpLabel
-               OpLoopMerge %179 %180 None
-               OpBranch %181
-        %181 = OpLabel
-        %182 = OpLoad %bool %x_123_phi
-               OpStore %x_123 %182
-        %183 = OpLoad %int %x_28_phi
-               OpStore %x_28 %183
-        %184 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0
-        %185 = OpLoad %float %184
-               OpStore %x_26_phi %int_0
-        %186 = OpLoad %bool %x_123
-               OpStore %x_132_phi %186
-        %187 = OpLoad %int %x_28
-        %188 = OpConvertFToS %int %185
-        %189 = OpSLessThan %bool %187 %188
-               OpSelectionMerge %190 None
-               OpBranchConditional %189 %191 %192
-        %191 = OpLabel
-               OpBranch %190
-        %192 = OpLabel
-               OpBranch %179
-        %190 = OpLabel
-               OpStore %x_116 %true
-        %193 = OpLoad %int %x_28
-               OpStore %x_20 %193
-        %194 = OpLoad %int %x_28
-               OpStore %x_26_phi %194
-               OpStore %x_132_phi %true
-               OpBranch %179
-        %180 = OpLabel
-               OpStore %x_123_phi %false
-               OpStore %x_28_phi %int_0
-               OpBranch %178
-        %179 = OpLabel
-        %195 = OpLoad %int %x_26_phi
-               OpStore %x_26 %195
-        %196 = OpLoad %bool %x_132_phi
-        %197 = OpLoad %int %x_26
-               OpStore %x_27_phi %197
-               OpSelectionMerge %198 None
-               OpBranchConditional %196 %199 %198
-        %199 = OpLabel
-               OpBranch %168
-        %198 = OpLabel
-               OpStore %x_134 %int_0
-               OpStore %x_116 %true
-        %200 = OpLoad %int %x_134
-               OpStore %x_20 %200
-        %201 = OpLoad %int %x_134
-               OpStore %x_27_phi %201
-               OpBranch %168
-        %169 = OpLabel
-               OpStore %x_118_phi %false
-               OpBranch %167
-        %168 = OpLabel
-        %202 = OpLoad %int %x_27_phi
-               OpReturnValue %202
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 68df8e3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,212 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_68 : bool = false;
-  var x_29 : i32;
-  var x_30 : i32;
-  var x_31 : i32;
-  var globalNumbers : array<i32, 10>;
-  var x_17 : i32;
-  var acc : i32;
-  var i_1 : i32;
-  var localNumbers : array<i32, 2>;
-  var param : i32;
-  var x_24 : i32;
-  var x_24_phi : i32;
-  var x_23_phi : i32;
-  acc = 0;
-  i_1 = 0;
-  x_24_phi = 0;
-  x_23_phi = 0;
-  loop {
-    var x_33 : i32;
-    var x_92 : i32;
-    var x_76_phi : bool;
-    var x_34_phi : i32;
-    var x_25_phi : i32;
-    x_24 = x_24_phi;
-    let x_23 : i32 = x_23_phi;
-    if ((x_23 < 4)) {
-    } else {
-      break;
-    }
-    x_68 = false;
-    x_76_phi = false;
-    loop {
-      var x_81 : bool;
-      var x_32 : i32;
-      var x_81_phi : bool;
-      var x_32_phi : i32;
-      var x_33_phi : i32;
-      var x_90_phi : bool;
-      let x_76 : bool = x_76_phi;
-      x_30 = 0;
-      x_81_phi = x_76;
-      x_32_phi = 0;
-      loop {
-        x_81 = x_81_phi;
-        x_32 = x_32_phi;
-        let x_86 : f32 = x_8.one;
-        x_33_phi = 0;
-        x_90_phi = x_81;
-        if ((x_32 < i32(x_86))) {
-        } else {
-          break;
-        }
-        x_68 = true;
-        x_29 = x_32;
-        x_33_phi = x_32;
-        x_90_phi = true;
-        break;
-
-        continuing {
-          x_81_phi = false;
-          x_32_phi = 0;
-        }
-      }
-      x_33 = x_33_phi;
-      let x_90 : bool = x_90_phi;
-      x_34_phi = x_33;
-      if (x_90) {
-        break;
-      }
-      x_92 = 0;
-      x_68 = true;
-      x_29 = x_92;
-      x_34_phi = x_92;
-      break;
-
-      continuing {
-        x_76_phi = false;
-      }
-    }
-    let x_34 : i32 = x_34_phi;
-    x_31 = x_34;
-    let x_93 : i32 = x_31;
-    let x_21 : array<i32, 2> = localNumbers;
-    var x_22_1 : array<i32, 2> = x_21;
-    x_22_1[1u] = x_93;
-    let x_22 : array<i32, 2> = x_22_1;
-    localNumbers = x_22;
-    globalNumbers[0] = 0;
-    let x_95 : ptr<function, i32> = &(localNumbers[1]);
-    let x_13 : i32 = x_22[1u];
-    param = x_13;
-    x_17 = 0;
-    x_25_phi = 0;
-    loop {
-      let x_25 : i32 = x_25_phi;
-      if ((x_25 <= x_13)) {
-      } else {
-        break;
-      }
-      let x_102 : ptr<function, i32> = &(globalNumbers[x_13]);
-      let x_18 : i32 = *(x_102);
-      if ((x_18 <= 1)) {
-        *(x_102) = 1;
-      }
-
-      continuing {
-        let x_19 : i32 = (x_25 + 1);
-        x_17 = x_19;
-        x_25_phi = x_19;
-      }
-    }
-    let x_107 : f32 = x_8.one;
-    let x_14 : i32 = globalNumbers[(i32(x_107) - 1)];
-    let x_15 : i32 = bitcast<i32>((x_24 + bitcast<i32>(x_14)));
-    acc = x_15;
-
-    continuing {
-      let x_16 : i32 = (x_23 + 1);
-      i_1 = x_16;
-      x_24_phi = x_15;
-      x_23_phi = x_16;
-    }
-  }
-  if ((x_24 == bitcast<i32>(4))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn yieldsZero_() -> i32 {
-  var x_116 : bool = false;
-  var x_20 : i32;
-  var i : i32;
-  var x_26 : i32;
-  var x_134 : i32;
-  var x_118_phi : bool;
-  var x_27_phi : i32;
-  x_118_phi = false;
-  loop {
-    var x_123 : bool;
-    var x_28 : i32;
-    var x_123_phi : bool;
-    var x_28_phi : i32;
-    var x_26_phi : i32;
-    var x_132_phi : bool;
-    let x_118 : bool = x_118_phi;
-    i = 0;
-    x_123_phi = x_118;
-    x_28_phi = 0;
-    loop {
-      x_123 = x_123_phi;
-      x_28 = x_28_phi;
-      let x_128 : f32 = x_8.one;
-      x_26_phi = 0;
-      x_132_phi = x_123;
-      if ((x_28 < i32(x_128))) {
-      } else {
-        break;
-      }
-      x_116 = true;
-      x_20 = x_28;
-      x_26_phi = x_28;
-      x_132_phi = true;
-      break;
-
-      continuing {
-        x_123_phi = false;
-        x_28_phi = 0;
-      }
-    }
-    x_26 = x_26_phi;
-    let x_132 : bool = x_132_phi;
-    x_27_phi = x_26;
-    if (x_132) {
-      break;
-    }
-    x_134 = 0;
-    x_116 = true;
-    x_20 = x_134;
-    x_27_phi = x_134;
-    break;
-
-    continuing {
-      x_118_phi = false;
-    }
-  }
-  let x_27 : i32 = x_27_phi;
-  return x_27;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.hlsl
deleted file mode 100644
index 9f2aaaa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[2] = (float[2])0;
-  float x_32 = 0.0f;
-  x_32 = asfloat(x_6[0].x);
-  data[0] = x_32;
-  data[1] = x_32;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const float x_35 = data[1];
-  if ((x_35 > 1.0f)) {
-    float x_43_phi = 0.0f;
-    const int x_39 = int(x_32);
-    x_43_phi = 0.0f;
-    switch(x_39) {
-      case 0: {
-        x_43_phi = 1.0f;
-        /* fallthrough */
-        {
-          data[x_39] = x_43_phi;
-          x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        }
-        break;
-      }
-      case 1: {
-        data[x_39] = x_43_phi;
-        x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.msl
deleted file mode 100644
index b28d411..0000000
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  tint_array_wrapper data = {};
-  float x_32 = 0.0f;
-  x_32 = x_6.injectionSwitch.x;
-  data.arr[0] = x_32;
-  data.arr[1] = x_32;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_35 = data.arr[1];
-  if ((x_35 > 1.0f)) {
-    float x_43_phi = 0.0f;
-    int const x_39 = int(x_32);
-    x_43_phi = 0.0f;
-    switch(x_39) {
-      case 0: {
-        x_43_phi = 1.0f;
-        /* fallthrough */
-      }
-      case 1: {
-        float const x_43 = x_43_phi;
-        data.arr[x_39] = x_43;
-        *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.spvasm
deleted file mode 100644
index a111b58..0000000
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,118 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %x_32 "x_32"
-               OpName %x_43_phi "x_43_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
-         %21 = OpConstantNull %_arr_float_uint_2
-%_ptr_Function_float = OpTypePointer Function %float
-         %24 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %bool = OpTypeBool
-         %54 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_2 Function %21
-       %x_32 = OpVariable %_ptr_Function_float Function %24
-   %x_43_phi = OpVariable %_ptr_Function_float Function %24
-         %27 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %28 = OpLoad %float %27
-               OpStore %x_32 %28
-         %31 = OpAccessChain %_ptr_Function_float %data %int_0
-         %32 = OpLoad %float %x_32
-               OpStore %31 %32
-         %34 = OpAccessChain %_ptr_Function_float %data %int_1
-         %35 = OpLoad %float %x_32
-               OpStore %34 %35
-               OpStore %x_GLF_color %38
-         %39 = OpAccessChain %_ptr_Function_float %data %int_1
-         %40 = OpLoad %float %39
-         %41 = OpFOrdGreaterThan %bool %40 %float_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %43
-         %44 = OpLabel
-         %47 = OpLoad %float %x_32
-         %46 = OpConvertFToS %int %47
-               OpStore %x_43_phi %float_0
-               OpSelectionMerge %48 None
-               OpSwitch %46 %49 0 %50 1 %51
-         %50 = OpLabel
-               OpStore %x_43_phi %float_1
-               OpBranch %51
-         %51 = OpLabel
-         %52 = OpLoad %float %x_43_phi
-         %53 = OpAccessChain %_ptr_Function_float %data %46
-               OpStore %53 %52
-               OpStore %x_GLF_color %54
-               OpBranch %48
-         %49 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.wgsl
deleted file mode 100644
index 71828f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 2>;
-  var x_32 : f32;
-  x_32 = x_6.injectionSwitch.x;
-  data[0] = x_32;
-  let x_34 : ptr<function, f32> = &(data[1]);
-  *(x_34) = x_32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_35 : f32 = *(x_34);
-  if ((x_35 > 1.0)) {
-    var x_43_phi : f32;
-    let x_39 : i32 = i32(x_32);
-    x_43_phi = 0.0;
-    switch(x_39) {
-      case 0: {
-        x_43_phi = 1.0;
-        fallthrough;
-      }
-      case 1: {
-        let x_43 : f32 = x_43_phi;
-        data[x_39] = x_43;
-        x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      }
-      default: {
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.hlsl
deleted file mode 100644
index 9f2aaaa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[2] = (float[2])0;
-  float x_32 = 0.0f;
-  x_32 = asfloat(x_6[0].x);
-  data[0] = x_32;
-  data[1] = x_32;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const float x_35 = data[1];
-  if ((x_35 > 1.0f)) {
-    float x_43_phi = 0.0f;
-    const int x_39 = int(x_32);
-    x_43_phi = 0.0f;
-    switch(x_39) {
-      case 0: {
-        x_43_phi = 1.0f;
-        /* fallthrough */
-        {
-          data[x_39] = x_43_phi;
-          x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        }
-        break;
-      }
-      case 1: {
-        data[x_39] = x_43_phi;
-        x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.msl
deleted file mode 100644
index b28d411..0000000
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[2];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  tint_array_wrapper data = {};
-  float x_32 = 0.0f;
-  x_32 = x_6.injectionSwitch.x;
-  data.arr[0] = x_32;
-  data.arr[1] = x_32;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_35 = data.arr[1];
-  if ((x_35 > 1.0f)) {
-    float x_43_phi = 0.0f;
-    int const x_39 = int(x_32);
-    x_43_phi = 0.0f;
-    switch(x_39) {
-      case 0: {
-        x_43_phi = 1.0f;
-        /* fallthrough */
-      }
-      case 1: {
-        float const x_43 = x_43_phi;
-        data.arr[x_39] = x_43;
-        *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.spvasm
deleted file mode 100644
index a111b58..0000000
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,118 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %x_32 "x_32"
-               OpName %x_43_phi "x_43_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_float_uint_2 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_arr_float_uint_2 = OpTypeArray %float %uint_2
-%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
-         %21 = OpConstantNull %_arr_float_uint_2
-%_ptr_Function_float = OpTypePointer Function %float
-         %24 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %bool = OpTypeBool
-         %54 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_2 Function %21
-       %x_32 = OpVariable %_ptr_Function_float Function %24
-   %x_43_phi = OpVariable %_ptr_Function_float Function %24
-         %27 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %28 = OpLoad %float %27
-               OpStore %x_32 %28
-         %31 = OpAccessChain %_ptr_Function_float %data %int_0
-         %32 = OpLoad %float %x_32
-               OpStore %31 %32
-         %34 = OpAccessChain %_ptr_Function_float %data %int_1
-         %35 = OpLoad %float %x_32
-               OpStore %34 %35
-               OpStore %x_GLF_color %38
-         %39 = OpAccessChain %_ptr_Function_float %data %int_1
-         %40 = OpLoad %float %39
-         %41 = OpFOrdGreaterThan %bool %40 %float_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %43
-         %44 = OpLabel
-         %47 = OpLoad %float %x_32
-         %46 = OpConvertFToS %int %47
-               OpStore %x_43_phi %float_0
-               OpSelectionMerge %48 None
-               OpSwitch %46 %49 0 %50 1 %51
-         %50 = OpLabel
-               OpStore %x_43_phi %float_1
-               OpBranch %51
-         %51 = OpLabel
-         %52 = OpLoad %float %x_43_phi
-         %53 = OpAccessChain %_ptr_Function_float %data %46
-               OpStore %53 %52
-               OpStore %x_GLF_color %54
-               OpBranch %48
-         %49 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.wgsl
deleted file mode 100644
index 71828f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/if-and-switch/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 2>;
-  var x_32 : f32;
-  x_32 = x_6.injectionSwitch.x;
-  data[0] = x_32;
-  let x_34 : ptr<function, f32> = &(data[1]);
-  *(x_34) = x_32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_35 : f32 = *(x_34);
-  if ((x_35 > 1.0)) {
-    var x_43_phi : f32;
-    let x_39 : i32 = i32(x_32);
-    x_43_phi = 0.0;
-    switch(x_39) {
-      case 0: {
-        x_43_phi = 1.0;
-        fallthrough;
-      }
-      case 1: {
-        let x_43 : f32 = x_43_phi;
-        data[x_39] = x_43;
-        x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      }
-      default: {
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.hlsl
deleted file mode 100644
index 37f384f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,285 +0,0 @@
-SKIP: FAILED
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  while (true) {
-    bool x_45 = false;
-    int x_48 = 0;
-    int x_49 = 0;
-    bool x_46 = false;
-    int x_115 = 0;
-    int x_116 = 0;
-    bool x_45_phi = false;
-    int x_48_phi = 0;
-    int x_50_phi = 0;
-    int x_52_phi = 0;
-    int x_111_phi = 0;
-    bool x_112_phi = false;
-    int x_115_phi = 0;
-    int x_118_phi = 0;
-    int x_120_phi = 0;
-    int x_161_phi = 0;
-    const float x_40 = asfloat(x_6[0].x);
-    const bool x_41 = (x_40 < -1.0f);
-    x_45_phi = false;
-    x_48_phi = 0;
-    x_50_phi = 0;
-    x_52_phi = 0;
-    while (true) {
-      int x_62 = 0;
-      int x_65 = 0;
-      int x_66 = 0;
-      int x_63 = 0;
-      int x_53 = 0;
-      int x_62_phi = 0;
-      int x_65_phi = 0;
-      int x_67_phi = 0;
-      int x_51_phi = 0;
-      int x_49_phi = 0;
-      bool x_46_phi = false;
-      x_45 = x_45_phi;
-      x_48 = x_48_phi;
-      const int x_50 = x_50_phi;
-      const int x_52 = x_52_phi;
-      const float x_55 = gl_FragCoord.y;
-      x_111_phi = x_48;
-      x_112_phi = x_45;
-      if ((x_52 < ((x_55 > -1.0f) ? 10 : 100))) {
-      } else {
-        break;
-      }
-      x_62_phi = x_48;
-      x_65_phi = x_50;
-      x_67_phi = 0;
-      while (true) {
-        int x_97 = 0;
-        int x_68 = 0;
-        int x_66_phi = 0;
-        x_62 = x_62_phi;
-        x_65 = x_65_phi;
-        const int x_67 = x_67_phi;
-        x_51_phi = x_65;
-        x_49_phi = x_62;
-        x_46_phi = x_45;
-        if ((x_67 < 2)) {
-        } else {
-          break;
-        }
-        while (true) {
-          bool x_78 = false;
-          int x_86_phi = 0;
-          int x_97_phi = 0;
-          bool x_98_phi = false;
-          const float x_77 = gl_FragCoord.x;
-          x_78 = (x_77 < -1.0f);
-          if (!((x_40 < 0.0f))) {
-            if (x_78) {
-              x_66_phi = 0;
-              break;
-            }
-            x_86_phi = 1;
-            while (true) {
-              int x_87 = 0;
-              const int x_86 = x_86_phi;
-              x_97_phi = x_65;
-              x_98_phi = false;
-              if ((x_86 < 3)) {
-              } else {
-                break;
-              }
-              if (x_78) {
-                {
-                  x_87 = (x_86 + 1);
-                  x_86_phi = x_87;
-                }
-                continue;
-              }
-              if ((x_86 > 0)) {
-                x_97_phi = 1;
-                x_98_phi = true;
-                break;
-              }
-              {
-                x_87 = (x_86 + 1);
-                x_86_phi = x_87;
-              }
-            }
-            x_97 = x_97_phi;
-            const bool x_98 = x_98_phi;
-            x_66_phi = x_97;
-            if (x_98) {
-              break;
-            }
-          }
-          x_66_phi = 0;
-          break;
-        }
-        x_66 = x_66_phi;
-        x_63 = asint((x_62 + x_66));
-        if (x_41) {
-          while (true) {
-            if (x_41) {
-            } else {
-              break;
-            }
-            {
-              const float x_105 = float(x_52);
-              x_GLF_color = float4(x_105, x_105, x_105, x_105);
-            }
-          }
-          x_51_phi = x_66;
-          x_49_phi = x_63;
-          x_46_phi = true;
-          break;
-        }
-        {
-          x_68 = (x_67 + 1);
-          x_62_phi = x_63;
-          x_65_phi = x_66;
-          x_67_phi = x_68;
-        }
-      }
-      const int x_51 = x_51_phi;
-      x_49 = x_49_phi;
-      x_46 = x_46_phi;
-      x_111_phi = x_49;
-      x_112_phi = x_46;
-      if (x_46) {
-        break;
-      }
-      if (!(x_41)) {
-        x_111_phi = x_49;
-        x_112_phi = x_46;
-        break;
-      }
-      {
-        x_53 = (x_52 + 1);
-        x_45_phi = x_46;
-        x_48_phi = x_49;
-        x_50_phi = x_51;
-        x_52_phi = x_53;
-      }
-    }
-    const int x_111 = x_111_phi;
-    if (x_112_phi) {
-      break;
-    }
-    x_115_phi = x_111;
-    x_118_phi = 0;
-    x_120_phi = 0;
-    while (true) {
-      int x_154 = 0;
-      int x_121 = 0;
-      int x_119_phi = 0;
-      x_115 = x_115_phi;
-      const int x_118 = x_118_phi;
-      const int x_120 = x_120_phi;
-      const float x_123 = asfloat(x_6[0].y);
-      x_161_phi = x_115;
-      if ((x_120 < int((x_123 + 1.0f)))) {
-      } else {
-        break;
-      }
-      while (true) {
-        bool x_135 = false;
-        int x_143_phi = 0;
-        int x_154_phi = 0;
-        bool x_155_phi = false;
-        const float x_134 = gl_FragCoord.x;
-        x_135 = (x_134 < -1.0f);
-        if (!((x_40 < 0.0f))) {
-          if (x_135) {
-            x_119_phi = 0;
-            break;
-          }
-          x_143_phi = 1;
-          while (true) {
-            int x_144 = 0;
-            const int x_143 = x_143_phi;
-            x_154_phi = x_118;
-            x_155_phi = false;
-            if ((x_143 < 3)) {
-            } else {
-              break;
-            }
-            if (x_135) {
-              {
-                x_144 = (x_143 + 1);
-                x_143_phi = x_144;
-              }
-              continue;
-            }
-            if ((x_143 > 0)) {
-              x_154_phi = 1;
-              x_155_phi = true;
-              break;
-            }
-            {
-              x_144 = (x_143 + 1);
-              x_143_phi = x_144;
-            }
-          }
-          x_154 = x_154_phi;
-          const bool x_155 = x_155_phi;
-          x_119_phi = x_154;
-          if (x_155) {
-            break;
-          }
-        }
-        x_119_phi = 0;
-        break;
-      }
-      int x_119 = 0;
-      x_119 = x_119_phi;
-      x_116 = asint((x_115 + x_119));
-      if ((!(x_41) ? false : x_41)) {
-        x_161_phi = x_116;
-        break;
-      }
-      {
-        x_121 = (x_120 + 1);
-        x_115_phi = x_116;
-        x_118_phi = x_119;
-        x_120_phi = x_121;
-      }
-    }
-    if ((x_161_phi == 4)) {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    } else {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    }
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_5 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000002BFA0A3D040(8,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002BFA0A3D040(71,9-20): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002BFA0A3D040(186,7-18): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002BFA0A3D040(71,9-20): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002BFA0A3D040(186,7-18): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002BFA0A3D040(123,11-22): error X4029: infinite loop detected - loop never exits
-
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.msl
deleted file mode 100644
index 94b57d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,283 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  while (true) {
-    bool x_45 = false;
-    int x_48 = 0;
-    int x_49 = 0;
-    bool x_46 = false;
-    int x_115 = 0;
-    int x_116 = 0;
-    bool x_45_phi = false;
-    int x_48_phi = 0;
-    int x_50_phi = 0;
-    int x_52_phi = 0;
-    int x_111_phi = 0;
-    bool x_112_phi = false;
-    int x_115_phi = 0;
-    int x_118_phi = 0;
-    int x_120_phi = 0;
-    int x_161_phi = 0;
-    float const x_40 = x_6.injectionSwitch.x;
-    bool const x_41 = (x_40 < -1.0f);
-    x_45_phi = false;
-    x_48_phi = 0;
-    x_50_phi = 0;
-    x_52_phi = 0;
-    while (true) {
-      int x_62 = 0;
-      int x_65 = 0;
-      int x_66 = 0;
-      int x_63 = 0;
-      int x_53 = 0;
-      int x_62_phi = 0;
-      int x_65_phi = 0;
-      int x_67_phi = 0;
-      int x_51_phi = 0;
-      int x_49_phi = 0;
-      bool x_46_phi = false;
-      x_45 = x_45_phi;
-      x_48 = x_48_phi;
-      int const x_50 = x_50_phi;
-      int const x_52 = x_52_phi;
-      float const x_55 = (*(tint_symbol_3)).y;
-      x_111_phi = x_48;
-      x_112_phi = x_45;
-      if ((x_52 < select(100, 10, (x_55 > -1.0f)))) {
-      } else {
-        break;
-      }
-      x_62_phi = x_48;
-      x_65_phi = x_50;
-      x_67_phi = 0;
-      while (true) {
-        int x_97 = 0;
-        int x_68 = 0;
-        int x_66_phi = 0;
-        x_62 = x_62_phi;
-        x_65 = x_65_phi;
-        int const x_67 = x_67_phi;
-        x_51_phi = x_65;
-        x_49_phi = x_62;
-        x_46_phi = x_45;
-        if ((x_67 < 2)) {
-        } else {
-          break;
-        }
-        while (true) {
-          bool x_78 = false;
-          int x_86_phi = 0;
-          int x_97_phi = 0;
-          bool x_98_phi = false;
-          float const x_77 = (*(tint_symbol_3)).x;
-          x_78 = (x_77 < -1.0f);
-          if (!((x_40 < 0.0f))) {
-            if (x_78) {
-              x_66_phi = 0;
-              break;
-            }
-            x_86_phi = 1;
-            while (true) {
-              int x_87 = 0;
-              int const x_86 = x_86_phi;
-              x_97_phi = x_65;
-              x_98_phi = false;
-              if ((x_86 < 3)) {
-              } else {
-                break;
-              }
-              if (x_78) {
-                {
-                  x_87 = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-                  x_86_phi = x_87;
-                }
-                continue;
-              }
-              if ((x_86 > 0)) {
-                x_97_phi = 1;
-                x_98_phi = true;
-                break;
-              }
-              {
-                x_87 = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-                x_86_phi = x_87;
-              }
-            }
-            x_97 = x_97_phi;
-            bool const x_98 = x_98_phi;
-            x_66_phi = x_97;
-            if (x_98) {
-              break;
-            }
-          }
-          x_66_phi = 0;
-          break;
-        }
-        x_66 = x_66_phi;
-        x_63 = as_type<int>(as_type<int>((as_type<uint>(x_62) + as_type<uint>(x_66))));
-        if (x_41) {
-          while (true) {
-            if (x_41) {
-            } else {
-              break;
-            }
-            {
-              float const x_105 = float(x_52);
-              *(tint_symbol_4) = float4(x_105, x_105, x_105, x_105);
-            }
-          }
-          x_51_phi = x_66;
-          x_49_phi = x_63;
-          x_46_phi = true;
-          break;
-        }
-        {
-          x_68 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-          x_62_phi = x_63;
-          x_65_phi = x_66;
-          x_67_phi = x_68;
-        }
-      }
-      int const x_51 = x_51_phi;
-      x_49 = x_49_phi;
-      x_46 = x_46_phi;
-      x_111_phi = x_49;
-      x_112_phi = x_46;
-      if (x_46) {
-        break;
-      }
-      if (!(x_41)) {
-        x_111_phi = x_49;
-        x_112_phi = x_46;
-        break;
-      }
-      {
-        x_53 = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-        x_45_phi = x_46;
-        x_48_phi = x_49;
-        x_50_phi = x_51;
-        x_52_phi = x_53;
-      }
-    }
-    int const x_111 = x_111_phi;
-    bool const x_112 = x_112_phi;
-    if (x_112) {
-      break;
-    }
-    x_115_phi = x_111;
-    x_118_phi = 0;
-    x_120_phi = 0;
-    while (true) {
-      int x_154 = 0;
-      int x_121 = 0;
-      int x_119_phi = 0;
-      x_115 = x_115_phi;
-      int const x_118 = x_118_phi;
-      int const x_120 = x_120_phi;
-      float const x_123 = x_6.injectionSwitch.y;
-      x_161_phi = x_115;
-      if ((x_120 < int((x_123 + 1.0f)))) {
-      } else {
-        break;
-      }
-      while (true) {
-        bool x_135 = false;
-        int x_143_phi = 0;
-        int x_154_phi = 0;
-        bool x_155_phi = false;
-        float const x_134 = (*(tint_symbol_3)).x;
-        x_135 = (x_134 < -1.0f);
-        if (!((x_40 < 0.0f))) {
-          if (x_135) {
-            x_119_phi = 0;
-            break;
-          }
-          x_143_phi = 1;
-          while (true) {
-            int x_144 = 0;
-            int const x_143 = x_143_phi;
-            x_154_phi = x_118;
-            x_155_phi = false;
-            if ((x_143 < 3)) {
-            } else {
-              break;
-            }
-            if (x_135) {
-              {
-                x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-                x_143_phi = x_144;
-              }
-              continue;
-            }
-            if ((x_143 > 0)) {
-              x_154_phi = 1;
-              x_155_phi = true;
-              break;
-            }
-            {
-              x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-              x_143_phi = x_144;
-            }
-          }
-          x_154 = x_154_phi;
-          bool const x_155 = x_155_phi;
-          x_119_phi = x_154;
-          if (x_155) {
-            break;
-          }
-        }
-        x_119_phi = 0;
-        break;
-      }
-      int x_119 = 0;
-      x_119 = x_119_phi;
-      x_116 = as_type<int>(as_type<int>((as_type<uint>(x_115) + as_type<uint>(x_119))));
-      if (select(x_41, false, !(x_41))) {
-        x_161_phi = x_116;
-        break;
-      }
-      {
-        x_121 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-        x_115_phi = x_116;
-        x_118_phi = x_119;
-        x_120_phi = x_121;
-      }
-    }
-    int const x_161 = x_161_phi;
-    if ((x_161 == 4)) {
-      *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    } else {
-      *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    }
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index c368904..0000000
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,566 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 292
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_45 "x_45"
-               OpName %x_48 "x_48"
-               OpName %x_49 "x_49"
-               OpName %x_46 "x_46"
-               OpName %x_115 "x_115"
-               OpName %x_116 "x_116"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %x_50_phi "x_50_phi"
-               OpName %x_52_phi "x_52_phi"
-               OpName %x_111_phi "x_111_phi"
-               OpName %x_112_phi "x_112_phi"
-               OpName %x_115_phi "x_115_phi"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_120_phi "x_120_phi"
-               OpName %x_161_phi "x_161_phi"
-               OpName %x_62 "x_62"
-               OpName %x_65 "x_65"
-               OpName %x_66 "x_66"
-               OpName %x_63 "x_63"
-               OpName %x_53 "x_53"
-               OpName %x_62_phi "x_62_phi"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_67_phi "x_67_phi"
-               OpName %x_51_phi "x_51_phi"
-               OpName %x_49_phi "x_49_phi"
-               OpName %x_46_phi "x_46_phi"
-               OpName %x_97 "x_97"
-               OpName %x_68 "x_68"
-               OpName %x_66_phi "x_66_phi"
-               OpName %x_78 "x_78"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_97_phi "x_97_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_87 "x_87"
-               OpName %x_154 "x_154"
-               OpName %x_121 "x_121"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_135 "x_135"
-               OpName %x_143_phi "x_143_phi"
-               OpName %x_154_phi "x_154_phi"
-               OpName %x_155_phi "x_155_phi"
-               OpName %x_144 "x_144"
-               OpName %x_119 "x_119"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_n1 = OpConstant %float -1
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_2 = OpConstant %int 2
-    %float_0 = OpConstant %float 0
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-      %int_4 = OpConstant %int 4
-        %277 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %278 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %279 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_45 = OpVariable %_ptr_Function_bool Function %26
-       %x_48 = OpVariable %_ptr_Function_int Function %30
-       %x_49 = OpVariable %_ptr_Function_int Function %30
-       %x_46 = OpVariable %_ptr_Function_bool Function %26
-      %x_115 = OpVariable %_ptr_Function_int Function %30
-      %x_116 = OpVariable %_ptr_Function_int Function %30
-   %x_45_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_48_phi = OpVariable %_ptr_Function_int Function %30
-   %x_50_phi = OpVariable %_ptr_Function_int Function %30
-   %x_52_phi = OpVariable %_ptr_Function_int Function %30
-  %x_111_phi = OpVariable %_ptr_Function_int Function %30
-  %x_112_phi = OpVariable %_ptr_Function_bool Function %26
-  %x_115_phi = OpVariable %_ptr_Function_int Function %30
-  %x_118_phi = OpVariable %_ptr_Function_int Function %30
-  %x_120_phi = OpVariable %_ptr_Function_int Function %30
-  %x_161_phi = OpVariable %_ptr_Function_int Function %30
-       %x_62 = OpVariable %_ptr_Function_int Function %30
-       %x_65 = OpVariable %_ptr_Function_int Function %30
-       %x_66 = OpVariable %_ptr_Function_int Function %30
-       %x_63 = OpVariable %_ptr_Function_int Function %30
-       %x_53 = OpVariable %_ptr_Function_int Function %30
-   %x_62_phi = OpVariable %_ptr_Function_int Function %30
-   %x_65_phi = OpVariable %_ptr_Function_int Function %30
-   %x_67_phi = OpVariable %_ptr_Function_int Function %30
-   %x_51_phi = OpVariable %_ptr_Function_int Function %30
-   %x_49_phi = OpVariable %_ptr_Function_int Function %30
-   %x_46_phi = OpVariable %_ptr_Function_bool Function %26
-       %x_97 = OpVariable %_ptr_Function_int Function %30
-       %x_68 = OpVariable %_ptr_Function_int Function %30
-   %x_66_phi = OpVariable %_ptr_Function_int Function %30
-       %x_78 = OpVariable %_ptr_Function_bool Function %26
-   %x_86_phi = OpVariable %_ptr_Function_int Function %30
-   %x_97_phi = OpVariable %_ptr_Function_int Function %30
-   %x_98_phi = OpVariable %_ptr_Function_bool Function %26
-       %x_87 = OpVariable %_ptr_Function_int Function %30
-      %x_154 = OpVariable %_ptr_Function_int Function %30
-      %x_121 = OpVariable %_ptr_Function_int Function %30
-  %x_119_phi = OpVariable %_ptr_Function_int Function %30
-      %x_135 = OpVariable %_ptr_Function_bool Function %26
-  %x_143_phi = OpVariable %_ptr_Function_int Function %30
-  %x_154_phi = OpVariable %_ptr_Function_int Function %30
-  %x_155_phi = OpVariable %_ptr_Function_bool Function %26
-      %x_144 = OpVariable %_ptr_Function_int Function %30
-      %x_119 = OpVariable %_ptr_Function_int Function %30
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %49 = OpLoad %float %48
-         %51 = OpFOrdLessThan %bool %49 %float_n1
-               OpStore %x_45_phi %false
-               OpStore %x_48_phi %int_0
-               OpStore %x_50_phi %int_0
-               OpStore %x_52_phi %int_0
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %69 = OpLoad %bool %x_45_phi
-               OpStore %x_45 %69
-         %70 = OpLoad %int %x_48_phi
-               OpStore %x_48 %70
-         %71 = OpLoad %int %x_50_phi
-         %72 = OpLoad %int %x_52_phi
-         %75 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %76 = OpLoad %float %75
-         %77 = OpLoad %int %x_48
-               OpStore %x_111_phi %77
-         %78 = OpLoad %bool %x_45
-               OpStore %x_112_phi %78
-         %80 = OpFOrdGreaterThan %bool %76 %float_n1
-         %79 = OpSelect %int %80 %int_10 %int_100
-         %83 = OpSLessThan %bool %72 %79
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %55
-         %84 = OpLabel
-         %87 = OpLoad %int %x_48
-               OpStore %x_62_phi %87
-               OpStore %x_65_phi %71
-               OpStore %x_67_phi %int_0
-               OpBranch %88
-         %88 = OpLabel
-               OpLoopMerge %89 %90 None
-               OpBranch %91
-         %91 = OpLabel
-         %95 = OpLoad %int %x_62_phi
-               OpStore %x_62 %95
-         %96 = OpLoad %int %x_65_phi
-               OpStore %x_65 %96
-         %97 = OpLoad %int %x_67_phi
-         %98 = OpLoad %int %x_65
-               OpStore %x_51_phi %98
-         %99 = OpLoad %int %x_62
-               OpStore %x_49_phi %99
-        %100 = OpLoad %bool %x_45
-               OpStore %x_46_phi %100
-        %102 = OpSLessThan %bool %97 %int_2
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-               OpBranch %103
-        %105 = OpLabel
-               OpBranch %89
-        %103 = OpLabel
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %114 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %115 = OpLoad %float %114
-        %116 = OpFOrdLessThan %bool %115 %float_n1
-               OpStore %x_78 %116
-        %119 = OpFOrdLessThan %bool %49 %float_0
-        %117 = OpLogicalNot %bool %119
-               OpSelectionMerge %120 None
-               OpBranchConditional %117 %121 %120
-        %121 = OpLabel
-        %122 = OpLoad %bool %x_78
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %123
-        %124 = OpLabel
-               OpStore %x_66_phi %int_0
-               OpBranch %107
-        %123 = OpLabel
-               OpStore %x_86_phi %int_1
-               OpBranch %126
-        %126 = OpLabel
-               OpLoopMerge %127 %128 None
-               OpBranch %129
-        %129 = OpLabel
-        %131 = OpLoad %int %x_86_phi
-        %132 = OpLoad %int %x_65
-               OpStore %x_97_phi %132
-               OpStore %x_98_phi %false
-        %134 = OpSLessThan %bool %131 %int_3
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %127
-        %135 = OpLabel
-        %138 = OpLoad %bool %x_78
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-               OpBranch %128
-        %139 = OpLabel
-        %141 = OpSGreaterThan %bool %131 %int_0
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %142
-        %143 = OpLabel
-               OpStore %x_97_phi %int_1
-               OpStore %x_98_phi %true
-               OpBranch %127
-        %142 = OpLabel
-               OpBranch %128
-        %128 = OpLabel
-        %145 = OpIAdd %int %131 %int_1
-               OpStore %x_87 %145
-        %146 = OpLoad %int %x_87
-               OpStore %x_86_phi %146
-               OpBranch %126
-        %127 = OpLabel
-        %147 = OpLoad %int %x_97_phi
-               OpStore %x_97 %147
-        %148 = OpLoad %bool %x_98_phi
-        %149 = OpLoad %int %x_97
-               OpStore %x_66_phi %149
-               OpSelectionMerge %150 None
-               OpBranchConditional %148 %151 %150
-        %151 = OpLabel
-               OpBranch %107
-        %150 = OpLabel
-               OpBranch %120
-        %120 = OpLabel
-               OpStore %x_66_phi %int_0
-               OpBranch %107
-        %108 = OpLabel
-               OpBranch %106
-        %107 = OpLabel
-        %152 = OpLoad %int %x_66_phi
-               OpStore %x_66 %152
-        %154 = OpLoad %int %x_62
-        %155 = OpLoad %int %x_66
-        %156 = OpIAdd %int %154 %155
-        %153 = OpCopyObject %int %156
-               OpStore %x_63 %153
-               OpSelectionMerge %157 None
-               OpBranchConditional %51 %158 %157
-        %158 = OpLabel
-               OpBranch %159
-        %159 = OpLabel
-               OpLoopMerge %160 %161 None
-               OpBranch %162
-        %162 = OpLabel
-               OpSelectionMerge %163 None
-               OpBranchConditional %51 %164 %165
-        %164 = OpLabel
-               OpBranch %163
-        %165 = OpLabel
-               OpBranch %160
-        %163 = OpLabel
-               OpBranch %161
-        %161 = OpLabel
-        %166 = OpConvertSToF %float %72
-        %167 = OpCompositeConstruct %v4float %166 %166 %166 %166
-               OpStore %x_GLF_color %167
-               OpBranch %159
-        %160 = OpLabel
-        %168 = OpLoad %int %x_66
-               OpStore %x_51_phi %168
-        %169 = OpLoad %int %x_63
-               OpStore %x_49_phi %169
-               OpStore %x_46_phi %true
-               OpBranch %89
-        %157 = OpLabel
-               OpBranch %90
-         %90 = OpLabel
-        %170 = OpIAdd %int %97 %int_1
-               OpStore %x_68 %170
-        %171 = OpLoad %int %x_63
-               OpStore %x_62_phi %171
-        %172 = OpLoad %int %x_66
-               OpStore %x_65_phi %172
-        %173 = OpLoad %int %x_68
-               OpStore %x_67_phi %173
-               OpBranch %88
-         %89 = OpLabel
-        %174 = OpLoad %int %x_51_phi
-        %175 = OpLoad %int %x_49_phi
-               OpStore %x_49 %175
-        %176 = OpLoad %bool %x_46_phi
-               OpStore %x_46 %176
-        %177 = OpLoad %int %x_49
-               OpStore %x_111_phi %177
-        %178 = OpLoad %bool %x_46
-               OpStore %x_112_phi %178
-        %179 = OpLoad %bool %x_46
-               OpSelectionMerge %180 None
-               OpBranchConditional %179 %181 %180
-        %181 = OpLabel
-               OpBranch %55
-        %180 = OpLabel
-        %182 = OpLogicalNot %bool %51
-               OpSelectionMerge %183 None
-               OpBranchConditional %182 %184 %183
-        %184 = OpLabel
-        %185 = OpLoad %int %x_49
-               OpStore %x_111_phi %185
-        %186 = OpLoad %bool %x_46
-               OpStore %x_112_phi %186
-               OpBranch %55
-        %183 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-        %187 = OpIAdd %int %72 %int_1
-               OpStore %x_53 %187
-        %188 = OpLoad %bool %x_46
-               OpStore %x_45_phi %188
-        %189 = OpLoad %int %x_49
-               OpStore %x_48_phi %189
-               OpStore %x_50_phi %174
-        %190 = OpLoad %int %x_53
-               OpStore %x_52_phi %190
-               OpBranch %54
-         %55 = OpLabel
-        %191 = OpLoad %int %x_111_phi
-        %192 = OpLoad %bool %x_112_phi
-               OpSelectionMerge %193 None
-               OpBranchConditional %192 %194 %193
-        %194 = OpLabel
-               OpBranch %20
-        %193 = OpLabel
-               OpStore %x_115_phi %191
-               OpStore %x_118_phi %int_0
-               OpStore %x_120_phi %int_0
-               OpBranch %195
-        %195 = OpLabel
-               OpLoopMerge %196 %197 None
-               OpBranch %198
-        %198 = OpLabel
-        %202 = OpLoad %int %x_115_phi
-               OpStore %x_115 %202
-        %203 = OpLoad %int %x_118_phi
-        %204 = OpLoad %int %x_120_phi
-        %205 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %206 = OpLoad %float %205
-        %207 = OpLoad %int %x_115
-               OpStore %x_161_phi %207
-        %210 = OpFAdd %float %206 %float_1
-        %208 = OpConvertFToS %int %210
-        %211 = OpSLessThan %bool %204 %208
-               OpSelectionMerge %212 None
-               OpBranchConditional %211 %213 %214
-        %213 = OpLabel
-               OpBranch %212
-        %214 = OpLabel
-               OpBranch %196
-        %212 = OpLabel
-               OpBranch %215
-        %215 = OpLabel
-               OpLoopMerge %216 %217 None
-               OpBranch %218
-        %218 = OpLabel
-        %223 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %224 = OpLoad %float %223
-        %225 = OpFOrdLessThan %bool %224 %float_n1
-               OpStore %x_135 %225
-        %227 = OpFOrdLessThan %bool %49 %float_0
-        %226 = OpLogicalNot %bool %227
-               OpSelectionMerge %228 None
-               OpBranchConditional %226 %229 %228
-        %229 = OpLabel
-        %230 = OpLoad %bool %x_135
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %231
-        %232 = OpLabel
-               OpStore %x_119_phi %int_0
-               OpBranch %216
-        %231 = OpLabel
-               OpStore %x_143_phi %int_1
-               OpBranch %233
-        %233 = OpLabel
-               OpLoopMerge %234 %235 None
-               OpBranch %236
-        %236 = OpLabel
-        %238 = OpLoad %int %x_143_phi
-               OpStore %x_154_phi %203
-               OpStore %x_155_phi %false
-        %239 = OpSLessThan %bool %238 %int_3
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %242
-        %241 = OpLabel
-               OpBranch %240
-        %242 = OpLabel
-               OpBranch %234
-        %240 = OpLabel
-        %243 = OpLoad %bool %x_135
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-               OpBranch %235
-        %244 = OpLabel
-        %246 = OpSGreaterThan %bool %238 %int_0
-               OpSelectionMerge %247 None
-               OpBranchConditional %246 %248 %247
-        %248 = OpLabel
-               OpStore %x_154_phi %int_1
-               OpStore %x_155_phi %true
-               OpBranch %234
-        %247 = OpLabel
-               OpBranch %235
-        %235 = OpLabel
-        %249 = OpIAdd %int %238 %int_1
-               OpStore %x_144 %249
-        %250 = OpLoad %int %x_144
-               OpStore %x_143_phi %250
-               OpBranch %233
-        %234 = OpLabel
-        %251 = OpLoad %int %x_154_phi
-               OpStore %x_154 %251
-        %252 = OpLoad %bool %x_155_phi
-        %253 = OpLoad %int %x_154
-               OpStore %x_119_phi %253
-               OpSelectionMerge %254 None
-               OpBranchConditional %252 %255 %254
-        %255 = OpLabel
-               OpBranch %216
-        %254 = OpLabel
-               OpBranch %228
-        %228 = OpLabel
-               OpStore %x_119_phi %int_0
-               OpBranch %216
-        %217 = OpLabel
-               OpBranch %215
-        %216 = OpLabel
-        %257 = OpLoad %int %x_119_phi
-               OpStore %x_119 %257
-        %259 = OpLoad %int %x_115
-        %260 = OpLoad %int %x_119
-        %261 = OpIAdd %int %259 %260
-        %258 = OpCopyObject %int %261
-               OpStore %x_116 %258
-        %263 = OpLogicalNot %bool %51
-        %262 = OpSelect %bool %263 %false %51
-               OpSelectionMerge %264 None
-               OpBranchConditional %262 %265 %264
-        %265 = OpLabel
-        %266 = OpLoad %int %x_116
-               OpStore %x_161_phi %266
-               OpBranch %196
-        %264 = OpLabel
-               OpBranch %197
-        %197 = OpLabel
-        %267 = OpIAdd %int %204 %int_1
-               OpStore %x_121 %267
-        %268 = OpLoad %int %x_116
-               OpStore %x_115_phi %268
-        %269 = OpLoad %int %x_119
-               OpStore %x_118_phi %269
-        %270 = OpLoad %int %x_121
-               OpStore %x_120_phi %270
-               OpBranch %195
-        %196 = OpLabel
-        %271 = OpLoad %int %x_161_phi
-        %273 = OpIEqual %bool %271 %int_4
-               OpSelectionMerge %274 None
-               OpBranchConditional %273 %275 %276
-        %275 = OpLabel
-               OpStore %x_GLF_color %277
-               OpBranch %274
-        %276 = OpLabel
-               OpStore %x_GLF_color %278
-               OpBranch %274
-        %274 = OpLabel
-               OpBranch %20
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %279
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %283 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %284 = OpFunctionCall %void %main_1
-        %285 = OpLoad %v4float %x_GLF_color
-        %286 = OpCompositeConstruct %main_out %285
-               OpReturnValue %286
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %288 = OpLabel
-        %290 = OpLoad %v4float %gl_FragCoord_param_1
-        %289 = OpFunctionCall %main_out %main_inner %290
-        %291 = OpCompositeExtract %v4float %289 0
-               OpStore %x_GLF_color_1_1 %291
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index 7b1d980..0000000
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,274 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  loop {
-    var x_45 : bool;
-    var x_48 : i32;
-    var x_49 : i32;
-    var x_46 : bool;
-    var x_115 : i32;
-    var x_116 : i32;
-    var x_45_phi : bool;
-    var x_48_phi : i32;
-    var x_50_phi : i32;
-    var x_52_phi : i32;
-    var x_111_phi : i32;
-    var x_112_phi : bool;
-    var x_115_phi : i32;
-    var x_118_phi : i32;
-    var x_120_phi : i32;
-    var x_161_phi : i32;
-    let x_40 : f32 = x_6.injectionSwitch.x;
-    let x_41 : bool = (x_40 < -1.0);
-    x_45_phi = false;
-    x_48_phi = 0;
-    x_50_phi = 0;
-    x_52_phi = 0;
-    loop {
-      var x_62 : i32;
-      var x_65 : i32;
-      var x_66 : i32;
-      var x_63 : i32;
-      var x_53 : i32;
-      var x_62_phi : i32;
-      var x_65_phi : i32;
-      var x_67_phi : i32;
-      var x_51_phi : i32;
-      var x_49_phi : i32;
-      var x_46_phi : bool;
-      x_45 = x_45_phi;
-      x_48 = x_48_phi;
-      let x_50 : i32 = x_50_phi;
-      let x_52 : i32 = x_52_phi;
-      let x_55 : f32 = gl_FragCoord.y;
-      x_111_phi = x_48;
-      x_112_phi = x_45;
-      if ((x_52 < select(100, 10, (x_55 > -1.0)))) {
-      } else {
-        break;
-      }
-      x_62_phi = x_48;
-      x_65_phi = x_50;
-      x_67_phi = 0;
-      loop {
-        var x_97 : i32;
-        var x_68 : i32;
-        var x_66_phi : i32;
-        x_62 = x_62_phi;
-        x_65 = x_65_phi;
-        let x_67 : i32 = x_67_phi;
-        x_51_phi = x_65;
-        x_49_phi = x_62;
-        x_46_phi = x_45;
-        if ((x_67 < 2)) {
-        } else {
-          break;
-        }
-        loop {
-          var x_78 : bool;
-          var x_86_phi : i32;
-          var x_97_phi : i32;
-          var x_98_phi : bool;
-          let x_77 : f32 = gl_FragCoord.x;
-          x_78 = (x_77 < -1.0);
-          if (!((x_40 < 0.0))) {
-            if (x_78) {
-              x_66_phi = 0;
-              break;
-            }
-            x_86_phi = 1;
-            loop {
-              var x_87 : i32;
-              let x_86 : i32 = x_86_phi;
-              x_97_phi = x_65;
-              x_98_phi = false;
-              if ((x_86 < 3)) {
-              } else {
-                break;
-              }
-              if (x_78) {
-                continue;
-              }
-              if ((x_86 > 0)) {
-                x_97_phi = 1;
-                x_98_phi = true;
-                break;
-              }
-
-              continuing {
-                x_87 = (x_86 + 1);
-                x_86_phi = x_87;
-              }
-            }
-            x_97 = x_97_phi;
-            let x_98 : bool = x_98_phi;
-            x_66_phi = x_97;
-            if (x_98) {
-              break;
-            }
-          }
-          x_66_phi = 0;
-          break;
-        }
-        x_66 = x_66_phi;
-        x_63 = bitcast<i32>((x_62 + x_66));
-        if (x_41) {
-          loop {
-            if (x_41) {
-            } else {
-              break;
-            }
-
-            continuing {
-              let x_105 : f32 = f32(x_52);
-              x_GLF_color = vec4<f32>(x_105, x_105, x_105, x_105);
-            }
-          }
-          x_51_phi = x_66;
-          x_49_phi = x_63;
-          x_46_phi = true;
-          break;
-        }
-
-        continuing {
-          x_68 = (x_67 + 1);
-          x_62_phi = x_63;
-          x_65_phi = x_66;
-          x_67_phi = x_68;
-        }
-      }
-      let x_51 : i32 = x_51_phi;
-      x_49 = x_49_phi;
-      x_46 = x_46_phi;
-      x_111_phi = x_49;
-      x_112_phi = x_46;
-      if (x_46) {
-        break;
-      }
-      if (!(x_41)) {
-        x_111_phi = x_49;
-        x_112_phi = x_46;
-        break;
-      }
-
-      continuing {
-        x_53 = (x_52 + 1);
-        x_45_phi = x_46;
-        x_48_phi = x_49;
-        x_50_phi = x_51;
-        x_52_phi = x_53;
-      }
-    }
-    let x_111 : i32 = x_111_phi;
-    let x_112 : bool = x_112_phi;
-    if (x_112) {
-      break;
-    }
-    x_115_phi = x_111;
-    x_118_phi = 0;
-    x_120_phi = 0;
-    loop {
-      var x_154 : i32;
-      var x_121 : i32;
-      var x_119_phi : i32;
-      x_115 = x_115_phi;
-      let x_118 : i32 = x_118_phi;
-      let x_120 : i32 = x_120_phi;
-      let x_123 : f32 = x_6.injectionSwitch.y;
-      x_161_phi = x_115;
-      if ((x_120 < i32((x_123 + 1.0)))) {
-      } else {
-        break;
-      }
-      loop {
-        var x_135 : bool;
-        var x_143_phi : i32;
-        var x_154_phi : i32;
-        var x_155_phi : bool;
-        let x_134 : f32 = gl_FragCoord.x;
-        x_135 = (x_134 < -1.0);
-        if (!((x_40 < 0.0))) {
-          if (x_135) {
-            x_119_phi = 0;
-            break;
-          }
-          x_143_phi = 1;
-          loop {
-            var x_144 : i32;
-            let x_143 : i32 = x_143_phi;
-            x_154_phi = x_118;
-            x_155_phi = false;
-            if ((x_143 < 3)) {
-            } else {
-              break;
-            }
-            if (x_135) {
-              continue;
-            }
-            if ((x_143 > 0)) {
-              x_154_phi = 1;
-              x_155_phi = true;
-              break;
-            }
-
-            continuing {
-              x_144 = (x_143 + 1);
-              x_143_phi = x_144;
-            }
-          }
-          x_154 = x_154_phi;
-          let x_155 : bool = x_155_phi;
-          x_119_phi = x_154;
-          if (x_155) {
-            break;
-          }
-        }
-        x_119_phi = 0;
-        break;
-      }
-      var x_119 : i32;
-      x_119 = x_119_phi;
-      x_116 = bitcast<i32>((x_115 + x_119));
-      if (select(x_41, false, !(x_41))) {
-        x_161_phi = x_116;
-        break;
-      }
-
-      continuing {
-        x_121 = (x_120 + 1);
-        x_115_phi = x_116;
-        x_118_phi = x_119;
-        x_120_phi = x_121;
-      }
-    }
-    let x_161 : i32 = x_161_phi;
-    if ((x_161 == 4)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    } else {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    }
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.hlsl
deleted file mode 100644
index 5bb26c1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,285 +0,0 @@
-SKIP: FAILED
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  while (true) {
-    bool x_45 = false;
-    int x_48 = 0;
-    int x_49 = 0;
-    bool x_46 = false;
-    int x_115 = 0;
-    int x_116 = 0;
-    bool x_45_phi = false;
-    int x_48_phi = 0;
-    int x_50_phi = 0;
-    int x_52_phi = 0;
-    int x_111_phi = 0;
-    bool x_112_phi = false;
-    int x_115_phi = 0;
-    int x_118_phi = 0;
-    int x_120_phi = 0;
-    int x_161_phi = 0;
-    const float x_40 = asfloat(x_6[0].x);
-    const bool x_41 = (x_40 < -1.0f);
-    x_45_phi = false;
-    x_48_phi = 0;
-    x_50_phi = 0;
-    x_52_phi = 0;
-    while (true) {
-      int x_62 = 0;
-      int x_65 = 0;
-      int x_66 = 0;
-      int x_63 = 0;
-      int x_53 = 0;
-      int x_62_phi = 0;
-      int x_65_phi = 0;
-      int x_67_phi = 0;
-      int x_51_phi = 0;
-      int x_49_phi = 0;
-      bool x_46_phi = false;
-      x_45 = x_45_phi;
-      x_48 = x_48_phi;
-      const int x_50 = x_50_phi;
-      const int x_52 = x_52_phi;
-      const float x_55 = gl_FragCoord.y;
-      x_111_phi = x_48;
-      x_112_phi = x_45;
-      if ((x_52 < ((x_55 > -1.0f) ? 10 : 100))) {
-      } else {
-        break;
-      }
-      x_62_phi = x_48;
-      x_65_phi = x_50;
-      x_67_phi = 0;
-      while (true) {
-        int x_97 = 0;
-        int x_68 = 0;
-        int x_66_phi = 0;
-        x_62 = x_62_phi;
-        x_65 = x_65_phi;
-        const int x_67 = x_67_phi;
-        x_51_phi = x_65;
-        x_49_phi = x_62;
-        x_46_phi = x_45;
-        if ((x_67 < 2)) {
-        } else {
-          break;
-        }
-        while (true) {
-          bool x_78 = false;
-          int x_86_phi = 0;
-          int x_97_phi = 0;
-          bool x_98_phi = false;
-          const float x_77 = gl_FragCoord.x;
-          x_78 = (x_77 < -1.0f);
-          if (!((x_40 < 0.0f))) {
-            if (x_78) {
-              x_66_phi = 0;
-              break;
-            }
-            x_86_phi = 1;
-            while (true) {
-              int x_87 = 0;
-              const int x_86 = x_86_phi;
-              x_97_phi = x_65;
-              x_98_phi = false;
-              if ((x_86 < 3)) {
-              } else {
-                break;
-              }
-              if (x_78) {
-                {
-                  x_87 = (x_86 + 1);
-                  x_86_phi = x_87;
-                }
-                continue;
-              }
-              if ((x_86 > 0)) {
-                x_97_phi = 1;
-                x_98_phi = true;
-                break;
-              }
-              {
-                x_87 = (x_86 + 1);
-                x_86_phi = x_87;
-              }
-            }
-            x_97 = x_97_phi;
-            const bool x_98 = x_98_phi;
-            x_66_phi = x_97;
-            if (x_98) {
-              break;
-            }
-          }
-          x_66_phi = 0;
-          break;
-        }
-        x_66 = x_66_phi;
-        x_63 = asint((x_62 + x_66));
-        if (x_41) {
-          while (true) {
-            if (x_41) {
-            } else {
-              break;
-            }
-            {
-              const float x_105 = float(x_52);
-              x_GLF_color = float4(x_105, x_105, x_105, x_105);
-            }
-          }
-          x_51_phi = x_66;
-          x_49_phi = x_63;
-          x_46_phi = true;
-          break;
-        }
-        {
-          x_68 = (x_67 + 1);
-          x_62_phi = x_63;
-          x_65_phi = x_66;
-          x_67_phi = x_68;
-        }
-      }
-      const int x_51 = x_51_phi;
-      x_49 = x_49_phi;
-      x_46 = x_46_phi;
-      x_111_phi = x_49;
-      x_112_phi = x_46;
-      if (x_46) {
-        break;
-      }
-      if (!(x_41)) {
-        x_111_phi = x_49;
-        x_112_phi = x_46;
-        break;
-      }
-      {
-        x_53 = (x_52 + 1);
-        x_45_phi = x_46;
-        x_48_phi = x_49;
-        x_50_phi = x_51;
-        x_52_phi = x_53;
-      }
-    }
-    const int x_111 = x_111_phi;
-    if (x_112_phi) {
-      break;
-    }
-    x_115_phi = x_111;
-    x_118_phi = 0;
-    x_120_phi = 0;
-    while (true) {
-      int x_154 = 0;
-      int x_121 = 0;
-      int x_119_phi = 0;
-      x_115 = x_115_phi;
-      const int x_118 = x_118_phi;
-      const int x_120 = x_120_phi;
-      const float x_123 = asfloat(x_6[0].y);
-      x_161_phi = x_115;
-      if ((x_120 < int((x_123 + 1.0f)))) {
-      } else {
-        break;
-      }
-      while (true) {
-        bool x_135 = false;
-        int x_143_phi = 0;
-        int x_154_phi = 0;
-        bool x_155_phi = false;
-        const float x_134 = gl_FragCoord.x;
-        x_135 = (x_134 < -1.0f);
-        if (!((x_40 < 0.0f))) {
-          if (x_135) {
-            x_119_phi = 0;
-            break;
-          }
-          x_143_phi = 1;
-          while (true) {
-            int x_144 = 0;
-            const int x_143 = x_143_phi;
-            x_154_phi = x_118;
-            x_155_phi = false;
-            if ((x_143 < 3)) {
-            } else {
-              break;
-            }
-            if (x_135) {
-              {
-                x_144 = (x_143 + 1);
-                x_143_phi = x_144;
-              }
-              continue;
-            }
-            if ((x_143 > 0)) {
-              x_154_phi = 1;
-              x_155_phi = true;
-              break;
-            }
-            {
-              x_144 = (x_143 + 1);
-              x_143_phi = x_144;
-            }
-          }
-          x_154 = x_154_phi;
-          const bool x_155 = x_155_phi;
-          x_119_phi = x_154;
-          if (x_155) {
-            break;
-          }
-        }
-        x_119_phi = 0;
-        break;
-      }
-      int x_119 = 0;
-      x_119 = x_119_phi;
-      x_116 = asint((x_115 + x_119));
-      if ((!(x_41) ? false : x_41)) {
-        x_161_phi = x_116;
-        break;
-      }
-      {
-        x_121 = (x_120 + 1);
-        x_115_phi = x_116;
-        x_118_phi = x_119;
-        x_120_phi = x_121;
-      }
-    }
-    if ((x_161_phi == 4)) {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    } else {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    }
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_5 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000002E21608F310(8,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002E21608F310(71,9-20): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002E21608F310(186,7-18): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002E21608F310(71,9-20): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002E21608F310(186,7-18): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002E21608F310(123,11-22): error X4029: infinite loop detected - loop never exits
-
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.msl
deleted file mode 100644
index 94b57d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,283 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  while (true) {
-    bool x_45 = false;
-    int x_48 = 0;
-    int x_49 = 0;
-    bool x_46 = false;
-    int x_115 = 0;
-    int x_116 = 0;
-    bool x_45_phi = false;
-    int x_48_phi = 0;
-    int x_50_phi = 0;
-    int x_52_phi = 0;
-    int x_111_phi = 0;
-    bool x_112_phi = false;
-    int x_115_phi = 0;
-    int x_118_phi = 0;
-    int x_120_phi = 0;
-    int x_161_phi = 0;
-    float const x_40 = x_6.injectionSwitch.x;
-    bool const x_41 = (x_40 < -1.0f);
-    x_45_phi = false;
-    x_48_phi = 0;
-    x_50_phi = 0;
-    x_52_phi = 0;
-    while (true) {
-      int x_62 = 0;
-      int x_65 = 0;
-      int x_66 = 0;
-      int x_63 = 0;
-      int x_53 = 0;
-      int x_62_phi = 0;
-      int x_65_phi = 0;
-      int x_67_phi = 0;
-      int x_51_phi = 0;
-      int x_49_phi = 0;
-      bool x_46_phi = false;
-      x_45 = x_45_phi;
-      x_48 = x_48_phi;
-      int const x_50 = x_50_phi;
-      int const x_52 = x_52_phi;
-      float const x_55 = (*(tint_symbol_3)).y;
-      x_111_phi = x_48;
-      x_112_phi = x_45;
-      if ((x_52 < select(100, 10, (x_55 > -1.0f)))) {
-      } else {
-        break;
-      }
-      x_62_phi = x_48;
-      x_65_phi = x_50;
-      x_67_phi = 0;
-      while (true) {
-        int x_97 = 0;
-        int x_68 = 0;
-        int x_66_phi = 0;
-        x_62 = x_62_phi;
-        x_65 = x_65_phi;
-        int const x_67 = x_67_phi;
-        x_51_phi = x_65;
-        x_49_phi = x_62;
-        x_46_phi = x_45;
-        if ((x_67 < 2)) {
-        } else {
-          break;
-        }
-        while (true) {
-          bool x_78 = false;
-          int x_86_phi = 0;
-          int x_97_phi = 0;
-          bool x_98_phi = false;
-          float const x_77 = (*(tint_symbol_3)).x;
-          x_78 = (x_77 < -1.0f);
-          if (!((x_40 < 0.0f))) {
-            if (x_78) {
-              x_66_phi = 0;
-              break;
-            }
-            x_86_phi = 1;
-            while (true) {
-              int x_87 = 0;
-              int const x_86 = x_86_phi;
-              x_97_phi = x_65;
-              x_98_phi = false;
-              if ((x_86 < 3)) {
-              } else {
-                break;
-              }
-              if (x_78) {
-                {
-                  x_87 = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-                  x_86_phi = x_87;
-                }
-                continue;
-              }
-              if ((x_86 > 0)) {
-                x_97_phi = 1;
-                x_98_phi = true;
-                break;
-              }
-              {
-                x_87 = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-                x_86_phi = x_87;
-              }
-            }
-            x_97 = x_97_phi;
-            bool const x_98 = x_98_phi;
-            x_66_phi = x_97;
-            if (x_98) {
-              break;
-            }
-          }
-          x_66_phi = 0;
-          break;
-        }
-        x_66 = x_66_phi;
-        x_63 = as_type<int>(as_type<int>((as_type<uint>(x_62) + as_type<uint>(x_66))));
-        if (x_41) {
-          while (true) {
-            if (x_41) {
-            } else {
-              break;
-            }
-            {
-              float const x_105 = float(x_52);
-              *(tint_symbol_4) = float4(x_105, x_105, x_105, x_105);
-            }
-          }
-          x_51_phi = x_66;
-          x_49_phi = x_63;
-          x_46_phi = true;
-          break;
-        }
-        {
-          x_68 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-          x_62_phi = x_63;
-          x_65_phi = x_66;
-          x_67_phi = x_68;
-        }
-      }
-      int const x_51 = x_51_phi;
-      x_49 = x_49_phi;
-      x_46 = x_46_phi;
-      x_111_phi = x_49;
-      x_112_phi = x_46;
-      if (x_46) {
-        break;
-      }
-      if (!(x_41)) {
-        x_111_phi = x_49;
-        x_112_phi = x_46;
-        break;
-      }
-      {
-        x_53 = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-        x_45_phi = x_46;
-        x_48_phi = x_49;
-        x_50_phi = x_51;
-        x_52_phi = x_53;
-      }
-    }
-    int const x_111 = x_111_phi;
-    bool const x_112 = x_112_phi;
-    if (x_112) {
-      break;
-    }
-    x_115_phi = x_111;
-    x_118_phi = 0;
-    x_120_phi = 0;
-    while (true) {
-      int x_154 = 0;
-      int x_121 = 0;
-      int x_119_phi = 0;
-      x_115 = x_115_phi;
-      int const x_118 = x_118_phi;
-      int const x_120 = x_120_phi;
-      float const x_123 = x_6.injectionSwitch.y;
-      x_161_phi = x_115;
-      if ((x_120 < int((x_123 + 1.0f)))) {
-      } else {
-        break;
-      }
-      while (true) {
-        bool x_135 = false;
-        int x_143_phi = 0;
-        int x_154_phi = 0;
-        bool x_155_phi = false;
-        float const x_134 = (*(tint_symbol_3)).x;
-        x_135 = (x_134 < -1.0f);
-        if (!((x_40 < 0.0f))) {
-          if (x_135) {
-            x_119_phi = 0;
-            break;
-          }
-          x_143_phi = 1;
-          while (true) {
-            int x_144 = 0;
-            int const x_143 = x_143_phi;
-            x_154_phi = x_118;
-            x_155_phi = false;
-            if ((x_143 < 3)) {
-            } else {
-              break;
-            }
-            if (x_135) {
-              {
-                x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-                x_143_phi = x_144;
-              }
-              continue;
-            }
-            if ((x_143 > 0)) {
-              x_154_phi = 1;
-              x_155_phi = true;
-              break;
-            }
-            {
-              x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-              x_143_phi = x_144;
-            }
-          }
-          x_154 = x_154_phi;
-          bool const x_155 = x_155_phi;
-          x_119_phi = x_154;
-          if (x_155) {
-            break;
-          }
-        }
-        x_119_phi = 0;
-        break;
-      }
-      int x_119 = 0;
-      x_119 = x_119_phi;
-      x_116 = as_type<int>(as_type<int>((as_type<uint>(x_115) + as_type<uint>(x_119))));
-      if (select(x_41, false, !(x_41))) {
-        x_161_phi = x_116;
-        break;
-      }
-      {
-        x_121 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-        x_115_phi = x_116;
-        x_118_phi = x_119;
-        x_120_phi = x_121;
-      }
-    }
-    int const x_161 = x_161_phi;
-    if ((x_161 == 4)) {
-      *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    } else {
-      *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    }
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index c368904..0000000
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,566 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 292
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_45 "x_45"
-               OpName %x_48 "x_48"
-               OpName %x_49 "x_49"
-               OpName %x_46 "x_46"
-               OpName %x_115 "x_115"
-               OpName %x_116 "x_116"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %x_50_phi "x_50_phi"
-               OpName %x_52_phi "x_52_phi"
-               OpName %x_111_phi "x_111_phi"
-               OpName %x_112_phi "x_112_phi"
-               OpName %x_115_phi "x_115_phi"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_120_phi "x_120_phi"
-               OpName %x_161_phi "x_161_phi"
-               OpName %x_62 "x_62"
-               OpName %x_65 "x_65"
-               OpName %x_66 "x_66"
-               OpName %x_63 "x_63"
-               OpName %x_53 "x_53"
-               OpName %x_62_phi "x_62_phi"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_67_phi "x_67_phi"
-               OpName %x_51_phi "x_51_phi"
-               OpName %x_49_phi "x_49_phi"
-               OpName %x_46_phi "x_46_phi"
-               OpName %x_97 "x_97"
-               OpName %x_68 "x_68"
-               OpName %x_66_phi "x_66_phi"
-               OpName %x_78 "x_78"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_97_phi "x_97_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_87 "x_87"
-               OpName %x_154 "x_154"
-               OpName %x_121 "x_121"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_135 "x_135"
-               OpName %x_143_phi "x_143_phi"
-               OpName %x_154_phi "x_154_phi"
-               OpName %x_155_phi "x_155_phi"
-               OpName %x_144 "x_144"
-               OpName %x_119 "x_119"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_n1 = OpConstant %float -1
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_2 = OpConstant %int 2
-    %float_0 = OpConstant %float 0
-      %int_1 = OpConstant %int 1
-      %int_3 = OpConstant %int 3
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-      %int_4 = OpConstant %int 4
-        %277 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %278 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %279 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_45 = OpVariable %_ptr_Function_bool Function %26
-       %x_48 = OpVariable %_ptr_Function_int Function %30
-       %x_49 = OpVariable %_ptr_Function_int Function %30
-       %x_46 = OpVariable %_ptr_Function_bool Function %26
-      %x_115 = OpVariable %_ptr_Function_int Function %30
-      %x_116 = OpVariable %_ptr_Function_int Function %30
-   %x_45_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_48_phi = OpVariable %_ptr_Function_int Function %30
-   %x_50_phi = OpVariable %_ptr_Function_int Function %30
-   %x_52_phi = OpVariable %_ptr_Function_int Function %30
-  %x_111_phi = OpVariable %_ptr_Function_int Function %30
-  %x_112_phi = OpVariable %_ptr_Function_bool Function %26
-  %x_115_phi = OpVariable %_ptr_Function_int Function %30
-  %x_118_phi = OpVariable %_ptr_Function_int Function %30
-  %x_120_phi = OpVariable %_ptr_Function_int Function %30
-  %x_161_phi = OpVariable %_ptr_Function_int Function %30
-       %x_62 = OpVariable %_ptr_Function_int Function %30
-       %x_65 = OpVariable %_ptr_Function_int Function %30
-       %x_66 = OpVariable %_ptr_Function_int Function %30
-       %x_63 = OpVariable %_ptr_Function_int Function %30
-       %x_53 = OpVariable %_ptr_Function_int Function %30
-   %x_62_phi = OpVariable %_ptr_Function_int Function %30
-   %x_65_phi = OpVariable %_ptr_Function_int Function %30
-   %x_67_phi = OpVariable %_ptr_Function_int Function %30
-   %x_51_phi = OpVariable %_ptr_Function_int Function %30
-   %x_49_phi = OpVariable %_ptr_Function_int Function %30
-   %x_46_phi = OpVariable %_ptr_Function_bool Function %26
-       %x_97 = OpVariable %_ptr_Function_int Function %30
-       %x_68 = OpVariable %_ptr_Function_int Function %30
-   %x_66_phi = OpVariable %_ptr_Function_int Function %30
-       %x_78 = OpVariable %_ptr_Function_bool Function %26
-   %x_86_phi = OpVariable %_ptr_Function_int Function %30
-   %x_97_phi = OpVariable %_ptr_Function_int Function %30
-   %x_98_phi = OpVariable %_ptr_Function_bool Function %26
-       %x_87 = OpVariable %_ptr_Function_int Function %30
-      %x_154 = OpVariable %_ptr_Function_int Function %30
-      %x_121 = OpVariable %_ptr_Function_int Function %30
-  %x_119_phi = OpVariable %_ptr_Function_int Function %30
-      %x_135 = OpVariable %_ptr_Function_bool Function %26
-  %x_143_phi = OpVariable %_ptr_Function_int Function %30
-  %x_154_phi = OpVariable %_ptr_Function_int Function %30
-  %x_155_phi = OpVariable %_ptr_Function_bool Function %26
-      %x_144 = OpVariable %_ptr_Function_int Function %30
-      %x_119 = OpVariable %_ptr_Function_int Function %30
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %49 = OpLoad %float %48
-         %51 = OpFOrdLessThan %bool %49 %float_n1
-               OpStore %x_45_phi %false
-               OpStore %x_48_phi %int_0
-               OpStore %x_50_phi %int_0
-               OpStore %x_52_phi %int_0
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %69 = OpLoad %bool %x_45_phi
-               OpStore %x_45 %69
-         %70 = OpLoad %int %x_48_phi
-               OpStore %x_48 %70
-         %71 = OpLoad %int %x_50_phi
-         %72 = OpLoad %int %x_52_phi
-         %75 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %76 = OpLoad %float %75
-         %77 = OpLoad %int %x_48
-               OpStore %x_111_phi %77
-         %78 = OpLoad %bool %x_45
-               OpStore %x_112_phi %78
-         %80 = OpFOrdGreaterThan %bool %76 %float_n1
-         %79 = OpSelect %int %80 %int_10 %int_100
-         %83 = OpSLessThan %bool %72 %79
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %55
-         %84 = OpLabel
-         %87 = OpLoad %int %x_48
-               OpStore %x_62_phi %87
-               OpStore %x_65_phi %71
-               OpStore %x_67_phi %int_0
-               OpBranch %88
-         %88 = OpLabel
-               OpLoopMerge %89 %90 None
-               OpBranch %91
-         %91 = OpLabel
-         %95 = OpLoad %int %x_62_phi
-               OpStore %x_62 %95
-         %96 = OpLoad %int %x_65_phi
-               OpStore %x_65 %96
-         %97 = OpLoad %int %x_67_phi
-         %98 = OpLoad %int %x_65
-               OpStore %x_51_phi %98
-         %99 = OpLoad %int %x_62
-               OpStore %x_49_phi %99
-        %100 = OpLoad %bool %x_45
-               OpStore %x_46_phi %100
-        %102 = OpSLessThan %bool %97 %int_2
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-               OpBranch %103
-        %105 = OpLabel
-               OpBranch %89
-        %103 = OpLabel
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %114 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %115 = OpLoad %float %114
-        %116 = OpFOrdLessThan %bool %115 %float_n1
-               OpStore %x_78 %116
-        %119 = OpFOrdLessThan %bool %49 %float_0
-        %117 = OpLogicalNot %bool %119
-               OpSelectionMerge %120 None
-               OpBranchConditional %117 %121 %120
-        %121 = OpLabel
-        %122 = OpLoad %bool %x_78
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %123
-        %124 = OpLabel
-               OpStore %x_66_phi %int_0
-               OpBranch %107
-        %123 = OpLabel
-               OpStore %x_86_phi %int_1
-               OpBranch %126
-        %126 = OpLabel
-               OpLoopMerge %127 %128 None
-               OpBranch %129
-        %129 = OpLabel
-        %131 = OpLoad %int %x_86_phi
-        %132 = OpLoad %int %x_65
-               OpStore %x_97_phi %132
-               OpStore %x_98_phi %false
-        %134 = OpSLessThan %bool %131 %int_3
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %127
-        %135 = OpLabel
-        %138 = OpLoad %bool %x_78
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-               OpBranch %128
-        %139 = OpLabel
-        %141 = OpSGreaterThan %bool %131 %int_0
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %142
-        %143 = OpLabel
-               OpStore %x_97_phi %int_1
-               OpStore %x_98_phi %true
-               OpBranch %127
-        %142 = OpLabel
-               OpBranch %128
-        %128 = OpLabel
-        %145 = OpIAdd %int %131 %int_1
-               OpStore %x_87 %145
-        %146 = OpLoad %int %x_87
-               OpStore %x_86_phi %146
-               OpBranch %126
-        %127 = OpLabel
-        %147 = OpLoad %int %x_97_phi
-               OpStore %x_97 %147
-        %148 = OpLoad %bool %x_98_phi
-        %149 = OpLoad %int %x_97
-               OpStore %x_66_phi %149
-               OpSelectionMerge %150 None
-               OpBranchConditional %148 %151 %150
-        %151 = OpLabel
-               OpBranch %107
-        %150 = OpLabel
-               OpBranch %120
-        %120 = OpLabel
-               OpStore %x_66_phi %int_0
-               OpBranch %107
-        %108 = OpLabel
-               OpBranch %106
-        %107 = OpLabel
-        %152 = OpLoad %int %x_66_phi
-               OpStore %x_66 %152
-        %154 = OpLoad %int %x_62
-        %155 = OpLoad %int %x_66
-        %156 = OpIAdd %int %154 %155
-        %153 = OpCopyObject %int %156
-               OpStore %x_63 %153
-               OpSelectionMerge %157 None
-               OpBranchConditional %51 %158 %157
-        %158 = OpLabel
-               OpBranch %159
-        %159 = OpLabel
-               OpLoopMerge %160 %161 None
-               OpBranch %162
-        %162 = OpLabel
-               OpSelectionMerge %163 None
-               OpBranchConditional %51 %164 %165
-        %164 = OpLabel
-               OpBranch %163
-        %165 = OpLabel
-               OpBranch %160
-        %163 = OpLabel
-               OpBranch %161
-        %161 = OpLabel
-        %166 = OpConvertSToF %float %72
-        %167 = OpCompositeConstruct %v4float %166 %166 %166 %166
-               OpStore %x_GLF_color %167
-               OpBranch %159
-        %160 = OpLabel
-        %168 = OpLoad %int %x_66
-               OpStore %x_51_phi %168
-        %169 = OpLoad %int %x_63
-               OpStore %x_49_phi %169
-               OpStore %x_46_phi %true
-               OpBranch %89
-        %157 = OpLabel
-               OpBranch %90
-         %90 = OpLabel
-        %170 = OpIAdd %int %97 %int_1
-               OpStore %x_68 %170
-        %171 = OpLoad %int %x_63
-               OpStore %x_62_phi %171
-        %172 = OpLoad %int %x_66
-               OpStore %x_65_phi %172
-        %173 = OpLoad %int %x_68
-               OpStore %x_67_phi %173
-               OpBranch %88
-         %89 = OpLabel
-        %174 = OpLoad %int %x_51_phi
-        %175 = OpLoad %int %x_49_phi
-               OpStore %x_49 %175
-        %176 = OpLoad %bool %x_46_phi
-               OpStore %x_46 %176
-        %177 = OpLoad %int %x_49
-               OpStore %x_111_phi %177
-        %178 = OpLoad %bool %x_46
-               OpStore %x_112_phi %178
-        %179 = OpLoad %bool %x_46
-               OpSelectionMerge %180 None
-               OpBranchConditional %179 %181 %180
-        %181 = OpLabel
-               OpBranch %55
-        %180 = OpLabel
-        %182 = OpLogicalNot %bool %51
-               OpSelectionMerge %183 None
-               OpBranchConditional %182 %184 %183
-        %184 = OpLabel
-        %185 = OpLoad %int %x_49
-               OpStore %x_111_phi %185
-        %186 = OpLoad %bool %x_46
-               OpStore %x_112_phi %186
-               OpBranch %55
-        %183 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-        %187 = OpIAdd %int %72 %int_1
-               OpStore %x_53 %187
-        %188 = OpLoad %bool %x_46
-               OpStore %x_45_phi %188
-        %189 = OpLoad %int %x_49
-               OpStore %x_48_phi %189
-               OpStore %x_50_phi %174
-        %190 = OpLoad %int %x_53
-               OpStore %x_52_phi %190
-               OpBranch %54
-         %55 = OpLabel
-        %191 = OpLoad %int %x_111_phi
-        %192 = OpLoad %bool %x_112_phi
-               OpSelectionMerge %193 None
-               OpBranchConditional %192 %194 %193
-        %194 = OpLabel
-               OpBranch %20
-        %193 = OpLabel
-               OpStore %x_115_phi %191
-               OpStore %x_118_phi %int_0
-               OpStore %x_120_phi %int_0
-               OpBranch %195
-        %195 = OpLabel
-               OpLoopMerge %196 %197 None
-               OpBranch %198
-        %198 = OpLabel
-        %202 = OpLoad %int %x_115_phi
-               OpStore %x_115 %202
-        %203 = OpLoad %int %x_118_phi
-        %204 = OpLoad %int %x_120_phi
-        %205 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %206 = OpLoad %float %205
-        %207 = OpLoad %int %x_115
-               OpStore %x_161_phi %207
-        %210 = OpFAdd %float %206 %float_1
-        %208 = OpConvertFToS %int %210
-        %211 = OpSLessThan %bool %204 %208
-               OpSelectionMerge %212 None
-               OpBranchConditional %211 %213 %214
-        %213 = OpLabel
-               OpBranch %212
-        %214 = OpLabel
-               OpBranch %196
-        %212 = OpLabel
-               OpBranch %215
-        %215 = OpLabel
-               OpLoopMerge %216 %217 None
-               OpBranch %218
-        %218 = OpLabel
-        %223 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %224 = OpLoad %float %223
-        %225 = OpFOrdLessThan %bool %224 %float_n1
-               OpStore %x_135 %225
-        %227 = OpFOrdLessThan %bool %49 %float_0
-        %226 = OpLogicalNot %bool %227
-               OpSelectionMerge %228 None
-               OpBranchConditional %226 %229 %228
-        %229 = OpLabel
-        %230 = OpLoad %bool %x_135
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %231
-        %232 = OpLabel
-               OpStore %x_119_phi %int_0
-               OpBranch %216
-        %231 = OpLabel
-               OpStore %x_143_phi %int_1
-               OpBranch %233
-        %233 = OpLabel
-               OpLoopMerge %234 %235 None
-               OpBranch %236
-        %236 = OpLabel
-        %238 = OpLoad %int %x_143_phi
-               OpStore %x_154_phi %203
-               OpStore %x_155_phi %false
-        %239 = OpSLessThan %bool %238 %int_3
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %242
-        %241 = OpLabel
-               OpBranch %240
-        %242 = OpLabel
-               OpBranch %234
-        %240 = OpLabel
-        %243 = OpLoad %bool %x_135
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-               OpBranch %235
-        %244 = OpLabel
-        %246 = OpSGreaterThan %bool %238 %int_0
-               OpSelectionMerge %247 None
-               OpBranchConditional %246 %248 %247
-        %248 = OpLabel
-               OpStore %x_154_phi %int_1
-               OpStore %x_155_phi %true
-               OpBranch %234
-        %247 = OpLabel
-               OpBranch %235
-        %235 = OpLabel
-        %249 = OpIAdd %int %238 %int_1
-               OpStore %x_144 %249
-        %250 = OpLoad %int %x_144
-               OpStore %x_143_phi %250
-               OpBranch %233
-        %234 = OpLabel
-        %251 = OpLoad %int %x_154_phi
-               OpStore %x_154 %251
-        %252 = OpLoad %bool %x_155_phi
-        %253 = OpLoad %int %x_154
-               OpStore %x_119_phi %253
-               OpSelectionMerge %254 None
-               OpBranchConditional %252 %255 %254
-        %255 = OpLabel
-               OpBranch %216
-        %254 = OpLabel
-               OpBranch %228
-        %228 = OpLabel
-               OpStore %x_119_phi %int_0
-               OpBranch %216
-        %217 = OpLabel
-               OpBranch %215
-        %216 = OpLabel
-        %257 = OpLoad %int %x_119_phi
-               OpStore %x_119 %257
-        %259 = OpLoad %int %x_115
-        %260 = OpLoad %int %x_119
-        %261 = OpIAdd %int %259 %260
-        %258 = OpCopyObject %int %261
-               OpStore %x_116 %258
-        %263 = OpLogicalNot %bool %51
-        %262 = OpSelect %bool %263 %false %51
-               OpSelectionMerge %264 None
-               OpBranchConditional %262 %265 %264
-        %265 = OpLabel
-        %266 = OpLoad %int %x_116
-               OpStore %x_161_phi %266
-               OpBranch %196
-        %264 = OpLabel
-               OpBranch %197
-        %197 = OpLabel
-        %267 = OpIAdd %int %204 %int_1
-               OpStore %x_121 %267
-        %268 = OpLoad %int %x_116
-               OpStore %x_115_phi %268
-        %269 = OpLoad %int %x_119
-               OpStore %x_118_phi %269
-        %270 = OpLoad %int %x_121
-               OpStore %x_120_phi %270
-               OpBranch %195
-        %196 = OpLabel
-        %271 = OpLoad %int %x_161_phi
-        %273 = OpIEqual %bool %271 %int_4
-               OpSelectionMerge %274 None
-               OpBranchConditional %273 %275 %276
-        %275 = OpLabel
-               OpStore %x_GLF_color %277
-               OpBranch %274
-        %276 = OpLabel
-               OpStore %x_GLF_color %278
-               OpBranch %274
-        %274 = OpLabel
-               OpBranch %20
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %279
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %283 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %284 = OpFunctionCall %void %main_1
-        %285 = OpLoad %v4float %x_GLF_color
-        %286 = OpCompositeConstruct %main_out %285
-               OpReturnValue %286
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %288 = OpLabel
-        %290 = OpLoad %v4float %gl_FragCoord_param_1
-        %289 = OpFunctionCall %main_out %main_inner %290
-        %291 = OpCompositeExtract %v4float %289 0
-               OpStore %x_GLF_color_1_1 %291
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index 7b1d980..0000000
--- a/test/vk-gl-cts/graphicsfuzz/increment-value-in-nested-for-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,274 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  loop {
-    var x_45 : bool;
-    var x_48 : i32;
-    var x_49 : i32;
-    var x_46 : bool;
-    var x_115 : i32;
-    var x_116 : i32;
-    var x_45_phi : bool;
-    var x_48_phi : i32;
-    var x_50_phi : i32;
-    var x_52_phi : i32;
-    var x_111_phi : i32;
-    var x_112_phi : bool;
-    var x_115_phi : i32;
-    var x_118_phi : i32;
-    var x_120_phi : i32;
-    var x_161_phi : i32;
-    let x_40 : f32 = x_6.injectionSwitch.x;
-    let x_41 : bool = (x_40 < -1.0);
-    x_45_phi = false;
-    x_48_phi = 0;
-    x_50_phi = 0;
-    x_52_phi = 0;
-    loop {
-      var x_62 : i32;
-      var x_65 : i32;
-      var x_66 : i32;
-      var x_63 : i32;
-      var x_53 : i32;
-      var x_62_phi : i32;
-      var x_65_phi : i32;
-      var x_67_phi : i32;
-      var x_51_phi : i32;
-      var x_49_phi : i32;
-      var x_46_phi : bool;
-      x_45 = x_45_phi;
-      x_48 = x_48_phi;
-      let x_50 : i32 = x_50_phi;
-      let x_52 : i32 = x_52_phi;
-      let x_55 : f32 = gl_FragCoord.y;
-      x_111_phi = x_48;
-      x_112_phi = x_45;
-      if ((x_52 < select(100, 10, (x_55 > -1.0)))) {
-      } else {
-        break;
-      }
-      x_62_phi = x_48;
-      x_65_phi = x_50;
-      x_67_phi = 0;
-      loop {
-        var x_97 : i32;
-        var x_68 : i32;
-        var x_66_phi : i32;
-        x_62 = x_62_phi;
-        x_65 = x_65_phi;
-        let x_67 : i32 = x_67_phi;
-        x_51_phi = x_65;
-        x_49_phi = x_62;
-        x_46_phi = x_45;
-        if ((x_67 < 2)) {
-        } else {
-          break;
-        }
-        loop {
-          var x_78 : bool;
-          var x_86_phi : i32;
-          var x_97_phi : i32;
-          var x_98_phi : bool;
-          let x_77 : f32 = gl_FragCoord.x;
-          x_78 = (x_77 < -1.0);
-          if (!((x_40 < 0.0))) {
-            if (x_78) {
-              x_66_phi = 0;
-              break;
-            }
-            x_86_phi = 1;
-            loop {
-              var x_87 : i32;
-              let x_86 : i32 = x_86_phi;
-              x_97_phi = x_65;
-              x_98_phi = false;
-              if ((x_86 < 3)) {
-              } else {
-                break;
-              }
-              if (x_78) {
-                continue;
-              }
-              if ((x_86 > 0)) {
-                x_97_phi = 1;
-                x_98_phi = true;
-                break;
-              }
-
-              continuing {
-                x_87 = (x_86 + 1);
-                x_86_phi = x_87;
-              }
-            }
-            x_97 = x_97_phi;
-            let x_98 : bool = x_98_phi;
-            x_66_phi = x_97;
-            if (x_98) {
-              break;
-            }
-          }
-          x_66_phi = 0;
-          break;
-        }
-        x_66 = x_66_phi;
-        x_63 = bitcast<i32>((x_62 + x_66));
-        if (x_41) {
-          loop {
-            if (x_41) {
-            } else {
-              break;
-            }
-
-            continuing {
-              let x_105 : f32 = f32(x_52);
-              x_GLF_color = vec4<f32>(x_105, x_105, x_105, x_105);
-            }
-          }
-          x_51_phi = x_66;
-          x_49_phi = x_63;
-          x_46_phi = true;
-          break;
-        }
-
-        continuing {
-          x_68 = (x_67 + 1);
-          x_62_phi = x_63;
-          x_65_phi = x_66;
-          x_67_phi = x_68;
-        }
-      }
-      let x_51 : i32 = x_51_phi;
-      x_49 = x_49_phi;
-      x_46 = x_46_phi;
-      x_111_phi = x_49;
-      x_112_phi = x_46;
-      if (x_46) {
-        break;
-      }
-      if (!(x_41)) {
-        x_111_phi = x_49;
-        x_112_phi = x_46;
-        break;
-      }
-
-      continuing {
-        x_53 = (x_52 + 1);
-        x_45_phi = x_46;
-        x_48_phi = x_49;
-        x_50_phi = x_51;
-        x_52_phi = x_53;
-      }
-    }
-    let x_111 : i32 = x_111_phi;
-    let x_112 : bool = x_112_phi;
-    if (x_112) {
-      break;
-    }
-    x_115_phi = x_111;
-    x_118_phi = 0;
-    x_120_phi = 0;
-    loop {
-      var x_154 : i32;
-      var x_121 : i32;
-      var x_119_phi : i32;
-      x_115 = x_115_phi;
-      let x_118 : i32 = x_118_phi;
-      let x_120 : i32 = x_120_phi;
-      let x_123 : f32 = x_6.injectionSwitch.y;
-      x_161_phi = x_115;
-      if ((x_120 < i32((x_123 + 1.0)))) {
-      } else {
-        break;
-      }
-      loop {
-        var x_135 : bool;
-        var x_143_phi : i32;
-        var x_154_phi : i32;
-        var x_155_phi : bool;
-        let x_134 : f32 = gl_FragCoord.x;
-        x_135 = (x_134 < -1.0);
-        if (!((x_40 < 0.0))) {
-          if (x_135) {
-            x_119_phi = 0;
-            break;
-          }
-          x_143_phi = 1;
-          loop {
-            var x_144 : i32;
-            let x_143 : i32 = x_143_phi;
-            x_154_phi = x_118;
-            x_155_phi = false;
-            if ((x_143 < 3)) {
-            } else {
-              break;
-            }
-            if (x_135) {
-              continue;
-            }
-            if ((x_143 > 0)) {
-              x_154_phi = 1;
-              x_155_phi = true;
-              break;
-            }
-
-            continuing {
-              x_144 = (x_143 + 1);
-              x_143_phi = x_144;
-            }
-          }
-          x_154 = x_154_phi;
-          let x_155 : bool = x_155_phi;
-          x_119_phi = x_154;
-          if (x_155) {
-            break;
-          }
-        }
-        x_119_phi = 0;
-        break;
-      }
-      var x_119 : i32;
-      x_119 = x_119_phi;
-      x_116 = bitcast<i32>((x_115 + x_119));
-      if (select(x_41, false, !(x_41))) {
-        x_161_phi = x_116;
-        break;
-      }
-
-      continuing {
-        x_121 = (x_120 + 1);
-        x_115_phi = x_116;
-        x_118_phi = x_119;
-        x_120_phi = x_121;
-      }
-    }
-    let x_161 : i32 = x_161_phi;
-    if ((x_161 == 4)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    } else {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    }
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.hlsl
deleted file mode 100644
index f1f1972..0000000
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,114 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float makeFrame_() {
-  float x_60 = 0.0f;
-  float x_63_phi = 0.0f;
-  while (true) {
-    bool x_41 = false;
-    float x_44 = 0.0f;
-    float x_45 = 0.0f;
-    bool x_42 = false;
-    bool x_41_phi = false;
-    int x_8_phi = 0;
-    float x_44_phi = 0.0f;
-    float x_60_phi = 0.0f;
-    bool x_61_phi = false;
-    x_41_phi = false;
-    x_8_phi = 0;
-    x_44_phi = 0.0f;
-    while (true) {
-      float x_50 = 0.0f;
-      int x_9 = 0;
-      bool x_52 = false;
-      int x_7 = 0;
-      float x_50_phi = 0.0f;
-      int x_9_phi = 0;
-      bool x_52_phi = false;
-      float x_45_phi = 0.0f;
-      bool x_42_phi = false;
-      x_41 = x_41_phi;
-      const int x_8 = x_8_phi;
-      x_44 = x_44_phi;
-      x_60_phi = x_44;
-      x_61_phi = x_41;
-      if ((x_8 < 1)) {
-      } else {
-        break;
-      }
-      x_50_phi = x_44;
-      x_9_phi = x_8;
-      x_52_phi = x_41;
-      while (true) {
-        x_50 = x_50_phi;
-        x_9 = x_9_phi;
-        x_52 = x_52_phi;
-        const float x_54 = asfloat(x_6[0].y);
-        x_45_phi = x_50;
-        x_42_phi = x_52;
-        if ((1 < int(x_54))) {
-        } else {
-          break;
-        }
-        x_45_phi = 1.0f;
-        x_42_phi = true;
-        break;
-        {
-          x_50_phi = 0.0f;
-          x_9_phi = 0;
-          x_52_phi = false;
-        }
-      }
-      x_45 = x_45_phi;
-      x_42 = x_42_phi;
-      x_60_phi = x_45;
-      x_61_phi = x_42;
-      if (x_42) {
-        break;
-      }
-      {
-        x_7 = asint((x_9 + asint(1)));
-        x_41_phi = x_42;
-        x_8_phi = x_7;
-        x_44_phi = x_45;
-      }
-    }
-    x_60 = x_60_phi;
-    const bool x_61 = x_61_phi;
-    x_63_phi = x_60;
-    if (x_61) {
-      break;
-    }
-    x_63_phi = 1.0f;
-    break;
-  }
-  return x_63_phi;
-}
-
-void main_1() {
-  const float x_34 = makeFrame_();
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.msl
deleted file mode 100644
index 4ee64c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float makeFrame_(constant buf0& x_6) {
-  float x_60 = 0.0f;
-  float x_63_phi = 0.0f;
-  while (true) {
-    bool x_41 = false;
-    float x_44 = 0.0f;
-    float x_45 = 0.0f;
-    bool x_42 = false;
-    bool x_41_phi = false;
-    int x_8_phi = 0;
-    float x_44_phi = 0.0f;
-    float x_60_phi = 0.0f;
-    bool x_61_phi = false;
-    x_41_phi = false;
-    x_8_phi = 0;
-    x_44_phi = 0.0f;
-    while (true) {
-      float x_50 = 0.0f;
-      int x_9 = 0;
-      bool x_52 = false;
-      int x_7 = 0;
-      float x_50_phi = 0.0f;
-      int x_9_phi = 0;
-      bool x_52_phi = false;
-      float x_45_phi = 0.0f;
-      bool x_42_phi = false;
-      x_41 = x_41_phi;
-      int const x_8 = x_8_phi;
-      x_44 = x_44_phi;
-      x_60_phi = x_44;
-      x_61_phi = x_41;
-      if ((x_8 < 1)) {
-      } else {
-        break;
-      }
-      x_50_phi = x_44;
-      x_9_phi = x_8;
-      x_52_phi = x_41;
-      while (true) {
-        x_50 = x_50_phi;
-        x_9 = x_9_phi;
-        x_52 = x_52_phi;
-        float const x_54 = x_6.injectionSwitch.y;
-        x_45_phi = x_50;
-        x_42_phi = x_52;
-        if ((1 < int(x_54))) {
-        } else {
-          break;
-        }
-        x_45_phi = 1.0f;
-        x_42_phi = true;
-        break;
-        {
-          x_50_phi = 0.0f;
-          x_9_phi = 0;
-          x_52_phi = false;
-        }
-      }
-      x_45 = x_45_phi;
-      x_42 = x_42_phi;
-      x_60_phi = x_45;
-      x_61_phi = x_42;
-      if (x_42) {
-        break;
-      }
-      {
-        x_7 = as_type<int>(as_type<int>((as_type<uint>(x_9) + as_type<uint>(as_type<int>(1)))));
-        x_41_phi = x_42;
-        x_8_phi = x_7;
-        x_44_phi = x_45;
-      }
-    }
-    x_60 = x_60_phi;
-    bool const x_61 = x_61_phi;
-    x_63_phi = x_60;
-    if (x_61) {
-      break;
-    }
-    x_63_phi = 1.0f;
-    break;
-  }
-  float const x_63 = x_63_phi;
-  return x_63;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float const x_34 = makeFrame_(x_6);
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.spvasm
deleted file mode 100644
index 18b4d77..0000000
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,241 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 125
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeFrame_ "makeFrame_"
-               OpName %x_60 "x_60"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_41 "x_41"
-               OpName %x_44 "x_44"
-               OpName %x_45 "x_45"
-               OpName %x_42 "x_42"
-               OpName %x_41_phi "x_41_phi"
-               OpName %x_8_phi "x_8_phi"
-               OpName %x_44_phi "x_44_phi"
-               OpName %x_60_phi "x_60_phi"
-               OpName %x_61_phi "x_61_phi"
-               OpName %x_50 "x_50"
-               OpName %x_9 "x_9"
-               OpName %x_52 "x_52"
-               OpName %x_7 "x_7"
-               OpName %x_50_phi "x_50_phi"
-               OpName %x_9_phi "x_9_phi"
-               OpName %x_52_phi "x_52_phi"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-       %void = OpTypeVoid
-        %108 = OpTypeFunction %void
-        %113 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %114 = OpTypeFunction %main_out
- %makeFrame_ = OpFunction %float None %12
-         %14 = OpLabel
-       %x_60 = OpVariable %_ptr_Function_float Function %17
-   %x_63_phi = OpVariable %_ptr_Function_float Function %17
-       %x_41 = OpVariable %_ptr_Function_bool Function %26
-       %x_44 = OpVariable %_ptr_Function_float Function %17
-       %x_45 = OpVariable %_ptr_Function_float Function %17
-       %x_42 = OpVariable %_ptr_Function_bool Function %26
-   %x_41_phi = OpVariable %_ptr_Function_bool Function %26
-    %x_8_phi = OpVariable %_ptr_Function_int Function %34
-   %x_44_phi = OpVariable %_ptr_Function_float Function %17
-   %x_60_phi = OpVariable %_ptr_Function_float Function %17
-   %x_61_phi = OpVariable %_ptr_Function_bool Function %26
-       %x_50 = OpVariable %_ptr_Function_float Function %17
-        %x_9 = OpVariable %_ptr_Function_int Function %34
-       %x_52 = OpVariable %_ptr_Function_bool Function %26
-        %x_7 = OpVariable %_ptr_Function_int Function %34
-   %x_50_phi = OpVariable %_ptr_Function_float Function %17
-    %x_9_phi = OpVariable %_ptr_Function_int Function %34
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_45_phi = OpVariable %_ptr_Function_float Function %17
-   %x_42_phi = OpVariable %_ptr_Function_bool Function %26
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-               OpStore %x_41_phi %false
-               OpStore %x_8_phi %int_0
-               OpStore %x_44_phi %float_0
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %54 = OpLoad %bool %x_41_phi
-               OpStore %x_41 %54
-         %55 = OpLoad %int %x_8_phi
-         %56 = OpLoad %float %x_44_phi
-               OpStore %x_44 %56
-         %57 = OpLoad %float %x_44
-               OpStore %x_60_phi %57
-         %58 = OpLoad %bool %x_41
-               OpStore %x_61_phi %58
-         %60 = OpSLessThan %bool %55 %int_1
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %42
-         %61 = OpLabel
-         %64 = OpLoad %float %x_44
-               OpStore %x_50_phi %64
-               OpStore %x_9_phi %55
-         %65 = OpLoad %bool %x_41
-               OpStore %x_52_phi %65
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-         %70 = OpLoad %float %x_50_phi
-               OpStore %x_50 %70
-         %71 = OpLoad %int %x_9_phi
-               OpStore %x_9 %71
-         %72 = OpLoad %bool %x_52_phi
-               OpStore %x_52 %72
-         %77 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %78 = OpLoad %float %77
-         %79 = OpLoad %float %x_50
-               OpStore %x_45_phi %79
-         %80 = OpLoad %bool %x_52
-               OpStore %x_42_phi %80
-         %81 = OpConvertFToS %int %78
-         %82 = OpSLessThan %bool %int_1 %81
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %67
-         %83 = OpLabel
-               OpStore %x_45_phi %float_1
-               OpStore %x_42_phi %true
-               OpBranch %67
-         %68 = OpLabel
-               OpStore %x_50_phi %float_0
-               OpStore %x_9_phi %int_0
-               OpStore %x_52_phi %false
-               OpBranch %66
-         %67 = OpLabel
-         %88 = OpLoad %float %x_45_phi
-               OpStore %x_45 %88
-         %89 = OpLoad %bool %x_42_phi
-               OpStore %x_42 %89
-         %90 = OpLoad %float %x_45
-               OpStore %x_60_phi %90
-         %91 = OpLoad %bool %x_42
-               OpStore %x_61_phi %91
-         %92 = OpLoad %bool %x_42
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-               OpBranch %42
-         %93 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-         %96 = OpLoad %int %x_9
-         %97 = OpCopyObject %int %int_1
-         %98 = OpIAdd %int %96 %97
-         %95 = OpCopyObject %int %98
-               OpStore %x_7 %95
-         %99 = OpLoad %bool %x_42
-               OpStore %x_41_phi %99
-        %100 = OpLoad %int %x_7
-               OpStore %x_8_phi %100
-        %101 = OpLoad %float %x_45
-               OpStore %x_44_phi %101
-               OpBranch %41
-         %42 = OpLabel
-        %102 = OpLoad %float %x_60_phi
-               OpStore %x_60 %102
-        %103 = OpLoad %bool %x_61_phi
-        %104 = OpLoad %float %x_60
-               OpStore %x_63_phi %104
-               OpSelectionMerge %105 None
-               OpBranchConditional %103 %106 %105
-        %106 = OpLabel
-               OpBranch %20
-        %105 = OpLabel
-               OpStore %x_63_phi %float_1
-               OpBranch %20
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-        %107 = OpLoad %float %x_63_phi
-               OpReturnValue %107
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %108
-        %111 = OpLabel
-        %112 = OpFunctionCall %float %makeFrame_
-               OpStore %x_GLF_color %113
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %114
-        %117 = OpLabel
-        %118 = OpFunctionCall %void %main_1
-        %119 = OpLoad %v4float %x_GLF_color
-        %120 = OpCompositeConstruct %main_out %119
-               OpReturnValue %120
-               OpFunctionEnd
-       %main = OpFunction %void None %108
-        %122 = OpLabel
-        %123 = OpFunctionCall %main_out %main_inner
-        %124 = OpCompositeExtract %v4float %123 0
-               OpStore %x_GLF_color_1_1 %124
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.wgsl
deleted file mode 100644
index d594596..0000000
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,112 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeFrame_() -> f32 {
-  var x_60 : f32;
-  var x_63_phi : f32;
-  loop {
-    var x_41 : bool;
-    var x_44 : f32;
-    var x_45 : f32;
-    var x_42 : bool;
-    var x_41_phi : bool;
-    var x_8_phi : i32;
-    var x_44_phi : f32;
-    var x_60_phi : f32;
-    var x_61_phi : bool;
-    x_41_phi = false;
-    x_8_phi = 0;
-    x_44_phi = 0.0;
-    loop {
-      var x_50 : f32;
-      var x_9 : i32;
-      var x_52 : bool;
-      var x_7 : i32;
-      var x_50_phi : f32;
-      var x_9_phi : i32;
-      var x_52_phi : bool;
-      var x_45_phi : f32;
-      var x_42_phi : bool;
-      x_41 = x_41_phi;
-      let x_8 : i32 = x_8_phi;
-      x_44 = x_44_phi;
-      x_60_phi = x_44;
-      x_61_phi = x_41;
-      if ((x_8 < 1)) {
-      } else {
-        break;
-      }
-      x_50_phi = x_44;
-      x_9_phi = x_8;
-      x_52_phi = x_41;
-      loop {
-        x_50 = x_50_phi;
-        x_9 = x_9_phi;
-        x_52 = x_52_phi;
-        let x_54 : f32 = x_6.injectionSwitch.y;
-        x_45_phi = x_50;
-        x_42_phi = x_52;
-        if ((1 < i32(x_54))) {
-        } else {
-          break;
-        }
-        x_45_phi = 1.0;
-        x_42_phi = true;
-        break;
-
-        continuing {
-          x_50_phi = 0.0;
-          x_9_phi = 0;
-          x_52_phi = false;
-        }
-      }
-      x_45 = x_45_phi;
-      x_42 = x_42_phi;
-      x_60_phi = x_45;
-      x_61_phi = x_42;
-      if (x_42) {
-        break;
-      }
-
-      continuing {
-        x_7 = bitcast<i32>((x_9 + bitcast<i32>(1)));
-        x_41_phi = x_42;
-        x_8_phi = x_7;
-        x_44_phi = x_45;
-      }
-    }
-    x_60 = x_60_phi;
-    let x_61 : bool = x_61_phi;
-    x_63_phi = x_60;
-    if (x_61) {
-      break;
-    }
-    x_63_phi = 1.0;
-    break;
-  }
-  let x_63 : f32 = x_63_phi;
-  return x_63;
-}
-
-fn main_1() {
-  let x_34 : f32 = makeFrame_();
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.hlsl
deleted file mode 100644
index f1f1972..0000000
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,114 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float makeFrame_() {
-  float x_60 = 0.0f;
-  float x_63_phi = 0.0f;
-  while (true) {
-    bool x_41 = false;
-    float x_44 = 0.0f;
-    float x_45 = 0.0f;
-    bool x_42 = false;
-    bool x_41_phi = false;
-    int x_8_phi = 0;
-    float x_44_phi = 0.0f;
-    float x_60_phi = 0.0f;
-    bool x_61_phi = false;
-    x_41_phi = false;
-    x_8_phi = 0;
-    x_44_phi = 0.0f;
-    while (true) {
-      float x_50 = 0.0f;
-      int x_9 = 0;
-      bool x_52 = false;
-      int x_7 = 0;
-      float x_50_phi = 0.0f;
-      int x_9_phi = 0;
-      bool x_52_phi = false;
-      float x_45_phi = 0.0f;
-      bool x_42_phi = false;
-      x_41 = x_41_phi;
-      const int x_8 = x_8_phi;
-      x_44 = x_44_phi;
-      x_60_phi = x_44;
-      x_61_phi = x_41;
-      if ((x_8 < 1)) {
-      } else {
-        break;
-      }
-      x_50_phi = x_44;
-      x_9_phi = x_8;
-      x_52_phi = x_41;
-      while (true) {
-        x_50 = x_50_phi;
-        x_9 = x_9_phi;
-        x_52 = x_52_phi;
-        const float x_54 = asfloat(x_6[0].y);
-        x_45_phi = x_50;
-        x_42_phi = x_52;
-        if ((1 < int(x_54))) {
-        } else {
-          break;
-        }
-        x_45_phi = 1.0f;
-        x_42_phi = true;
-        break;
-        {
-          x_50_phi = 0.0f;
-          x_9_phi = 0;
-          x_52_phi = false;
-        }
-      }
-      x_45 = x_45_phi;
-      x_42 = x_42_phi;
-      x_60_phi = x_45;
-      x_61_phi = x_42;
-      if (x_42) {
-        break;
-      }
-      {
-        x_7 = asint((x_9 + asint(1)));
-        x_41_phi = x_42;
-        x_8_phi = x_7;
-        x_44_phi = x_45;
-      }
-    }
-    x_60 = x_60_phi;
-    const bool x_61 = x_61_phi;
-    x_63_phi = x_60;
-    if (x_61) {
-      break;
-    }
-    x_63_phi = 1.0f;
-    break;
-  }
-  return x_63_phi;
-}
-
-void main_1() {
-  const float x_34 = makeFrame_();
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.msl
deleted file mode 100644
index 4ee64c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float makeFrame_(constant buf0& x_6) {
-  float x_60 = 0.0f;
-  float x_63_phi = 0.0f;
-  while (true) {
-    bool x_41 = false;
-    float x_44 = 0.0f;
-    float x_45 = 0.0f;
-    bool x_42 = false;
-    bool x_41_phi = false;
-    int x_8_phi = 0;
-    float x_44_phi = 0.0f;
-    float x_60_phi = 0.0f;
-    bool x_61_phi = false;
-    x_41_phi = false;
-    x_8_phi = 0;
-    x_44_phi = 0.0f;
-    while (true) {
-      float x_50 = 0.0f;
-      int x_9 = 0;
-      bool x_52 = false;
-      int x_7 = 0;
-      float x_50_phi = 0.0f;
-      int x_9_phi = 0;
-      bool x_52_phi = false;
-      float x_45_phi = 0.0f;
-      bool x_42_phi = false;
-      x_41 = x_41_phi;
-      int const x_8 = x_8_phi;
-      x_44 = x_44_phi;
-      x_60_phi = x_44;
-      x_61_phi = x_41;
-      if ((x_8 < 1)) {
-      } else {
-        break;
-      }
-      x_50_phi = x_44;
-      x_9_phi = x_8;
-      x_52_phi = x_41;
-      while (true) {
-        x_50 = x_50_phi;
-        x_9 = x_9_phi;
-        x_52 = x_52_phi;
-        float const x_54 = x_6.injectionSwitch.y;
-        x_45_phi = x_50;
-        x_42_phi = x_52;
-        if ((1 < int(x_54))) {
-        } else {
-          break;
-        }
-        x_45_phi = 1.0f;
-        x_42_phi = true;
-        break;
-        {
-          x_50_phi = 0.0f;
-          x_9_phi = 0;
-          x_52_phi = false;
-        }
-      }
-      x_45 = x_45_phi;
-      x_42 = x_42_phi;
-      x_60_phi = x_45;
-      x_61_phi = x_42;
-      if (x_42) {
-        break;
-      }
-      {
-        x_7 = as_type<int>(as_type<int>((as_type<uint>(x_9) + as_type<uint>(as_type<int>(1)))));
-        x_41_phi = x_42;
-        x_8_phi = x_7;
-        x_44_phi = x_45;
-      }
-    }
-    x_60 = x_60_phi;
-    bool const x_61 = x_61_phi;
-    x_63_phi = x_60;
-    if (x_61) {
-      break;
-    }
-    x_63_phi = 1.0f;
-    break;
-  }
-  float const x_63 = x_63_phi;
-  return x_63;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float const x_34 = makeFrame_(x_6);
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.spvasm
deleted file mode 100644
index 18b4d77..0000000
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,241 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 125
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeFrame_ "makeFrame_"
-               OpName %x_60 "x_60"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_41 "x_41"
-               OpName %x_44 "x_44"
-               OpName %x_45 "x_45"
-               OpName %x_42 "x_42"
-               OpName %x_41_phi "x_41_phi"
-               OpName %x_8_phi "x_8_phi"
-               OpName %x_44_phi "x_44_phi"
-               OpName %x_60_phi "x_60_phi"
-               OpName %x_61_phi "x_61_phi"
-               OpName %x_50 "x_50"
-               OpName %x_9 "x_9"
-               OpName %x_52 "x_52"
-               OpName %x_7 "x_7"
-               OpName %x_50_phi "x_50_phi"
-               OpName %x_9_phi "x_9_phi"
-               OpName %x_52_phi "x_52_phi"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-         %12 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %26 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-       %void = OpTypeVoid
-        %108 = OpTypeFunction %void
-        %113 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %114 = OpTypeFunction %main_out
- %makeFrame_ = OpFunction %float None %12
-         %14 = OpLabel
-       %x_60 = OpVariable %_ptr_Function_float Function %17
-   %x_63_phi = OpVariable %_ptr_Function_float Function %17
-       %x_41 = OpVariable %_ptr_Function_bool Function %26
-       %x_44 = OpVariable %_ptr_Function_float Function %17
-       %x_45 = OpVariable %_ptr_Function_float Function %17
-       %x_42 = OpVariable %_ptr_Function_bool Function %26
-   %x_41_phi = OpVariable %_ptr_Function_bool Function %26
-    %x_8_phi = OpVariable %_ptr_Function_int Function %34
-   %x_44_phi = OpVariable %_ptr_Function_float Function %17
-   %x_60_phi = OpVariable %_ptr_Function_float Function %17
-   %x_61_phi = OpVariable %_ptr_Function_bool Function %26
-       %x_50 = OpVariable %_ptr_Function_float Function %17
-        %x_9 = OpVariable %_ptr_Function_int Function %34
-       %x_52 = OpVariable %_ptr_Function_bool Function %26
-        %x_7 = OpVariable %_ptr_Function_int Function %34
-   %x_50_phi = OpVariable %_ptr_Function_float Function %17
-    %x_9_phi = OpVariable %_ptr_Function_int Function %34
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %26
-   %x_45_phi = OpVariable %_ptr_Function_float Function %17
-   %x_42_phi = OpVariable %_ptr_Function_bool Function %26
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-               OpStore %x_41_phi %false
-               OpStore %x_8_phi %int_0
-               OpStore %x_44_phi %float_0
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %54 = OpLoad %bool %x_41_phi
-               OpStore %x_41 %54
-         %55 = OpLoad %int %x_8_phi
-         %56 = OpLoad %float %x_44_phi
-               OpStore %x_44 %56
-         %57 = OpLoad %float %x_44
-               OpStore %x_60_phi %57
-         %58 = OpLoad %bool %x_41
-               OpStore %x_61_phi %58
-         %60 = OpSLessThan %bool %55 %int_1
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %42
-         %61 = OpLabel
-         %64 = OpLoad %float %x_44
-               OpStore %x_50_phi %64
-               OpStore %x_9_phi %55
-         %65 = OpLoad %bool %x_41
-               OpStore %x_52_phi %65
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-         %70 = OpLoad %float %x_50_phi
-               OpStore %x_50 %70
-         %71 = OpLoad %int %x_9_phi
-               OpStore %x_9 %71
-         %72 = OpLoad %bool %x_52_phi
-               OpStore %x_52 %72
-         %77 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %78 = OpLoad %float %77
-         %79 = OpLoad %float %x_50
-               OpStore %x_45_phi %79
-         %80 = OpLoad %bool %x_52
-               OpStore %x_42_phi %80
-         %81 = OpConvertFToS %int %78
-         %82 = OpSLessThan %bool %int_1 %81
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %67
-         %83 = OpLabel
-               OpStore %x_45_phi %float_1
-               OpStore %x_42_phi %true
-               OpBranch %67
-         %68 = OpLabel
-               OpStore %x_50_phi %float_0
-               OpStore %x_9_phi %int_0
-               OpStore %x_52_phi %false
-               OpBranch %66
-         %67 = OpLabel
-         %88 = OpLoad %float %x_45_phi
-               OpStore %x_45 %88
-         %89 = OpLoad %bool %x_42_phi
-               OpStore %x_42 %89
-         %90 = OpLoad %float %x_45
-               OpStore %x_60_phi %90
-         %91 = OpLoad %bool %x_42
-               OpStore %x_61_phi %91
-         %92 = OpLoad %bool %x_42
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-               OpBranch %42
-         %93 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-         %96 = OpLoad %int %x_9
-         %97 = OpCopyObject %int %int_1
-         %98 = OpIAdd %int %96 %97
-         %95 = OpCopyObject %int %98
-               OpStore %x_7 %95
-         %99 = OpLoad %bool %x_42
-               OpStore %x_41_phi %99
-        %100 = OpLoad %int %x_7
-               OpStore %x_8_phi %100
-        %101 = OpLoad %float %x_45
-               OpStore %x_44_phi %101
-               OpBranch %41
-         %42 = OpLabel
-        %102 = OpLoad %float %x_60_phi
-               OpStore %x_60 %102
-        %103 = OpLoad %bool %x_61_phi
-        %104 = OpLoad %float %x_60
-               OpStore %x_63_phi %104
-               OpSelectionMerge %105 None
-               OpBranchConditional %103 %106 %105
-        %106 = OpLabel
-               OpBranch %20
-        %105 = OpLabel
-               OpStore %x_63_phi %float_1
-               OpBranch %20
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-        %107 = OpLoad %float %x_63_phi
-               OpReturnValue %107
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %108
-        %111 = OpLabel
-        %112 = OpFunctionCall %float %makeFrame_
-               OpStore %x_GLF_color %113
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %114
-        %117 = OpLabel
-        %118 = OpFunctionCall %void %main_1
-        %119 = OpLoad %v4float %x_GLF_color
-        %120 = OpCompositeConstruct %main_out %119
-               OpReturnValue %120
-               OpFunctionEnd
-       %main = OpFunction %void None %108
-        %122 = OpLabel
-        %123 = OpFunctionCall %main_out %main_inner
-        %124 = OpCompositeExtract %v4float %123 0
-               OpStore %x_GLF_color_1_1 %124
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.wgsl
deleted file mode 100644
index d594596..0000000
--- a/test/vk-gl-cts/graphicsfuzz/injection-switch-as-comparison/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,112 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeFrame_() -> f32 {
-  var x_60 : f32;
-  var x_63_phi : f32;
-  loop {
-    var x_41 : bool;
-    var x_44 : f32;
-    var x_45 : f32;
-    var x_42 : bool;
-    var x_41_phi : bool;
-    var x_8_phi : i32;
-    var x_44_phi : f32;
-    var x_60_phi : f32;
-    var x_61_phi : bool;
-    x_41_phi = false;
-    x_8_phi = 0;
-    x_44_phi = 0.0;
-    loop {
-      var x_50 : f32;
-      var x_9 : i32;
-      var x_52 : bool;
-      var x_7 : i32;
-      var x_50_phi : f32;
-      var x_9_phi : i32;
-      var x_52_phi : bool;
-      var x_45_phi : f32;
-      var x_42_phi : bool;
-      x_41 = x_41_phi;
-      let x_8 : i32 = x_8_phi;
-      x_44 = x_44_phi;
-      x_60_phi = x_44;
-      x_61_phi = x_41;
-      if ((x_8 < 1)) {
-      } else {
-        break;
-      }
-      x_50_phi = x_44;
-      x_9_phi = x_8;
-      x_52_phi = x_41;
-      loop {
-        x_50 = x_50_phi;
-        x_9 = x_9_phi;
-        x_52 = x_52_phi;
-        let x_54 : f32 = x_6.injectionSwitch.y;
-        x_45_phi = x_50;
-        x_42_phi = x_52;
-        if ((1 < i32(x_54))) {
-        } else {
-          break;
-        }
-        x_45_phi = 1.0;
-        x_42_phi = true;
-        break;
-
-        continuing {
-          x_50_phi = 0.0;
-          x_9_phi = 0;
-          x_52_phi = false;
-        }
-      }
-      x_45 = x_45_phi;
-      x_42 = x_42_phi;
-      x_60_phi = x_45;
-      x_61_phi = x_42;
-      if (x_42) {
-        break;
-      }
-
-      continuing {
-        x_7 = bitcast<i32>((x_9 + bitcast<i32>(1)));
-        x_41_phi = x_42;
-        x_8_phi = x_7;
-        x_44_phi = x_45;
-      }
-    }
-    x_60 = x_60_phi;
-    let x_61 : bool = x_61_phi;
-    x_63_phi = x_60;
-    if (x_61) {
-      break;
-    }
-    x_63_phi = 1.0;
-    break;
-  }
-  let x_63 : f32 = x_63_phi;
-  return x_63;
-}
-
-fn main_1() {
-  let x_34 : f32 = makeFrame_();
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 10694ae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-struct S {
-  int f1;
-  float2x2 f2;
-};
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 x_41 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_6 = 0;
-  float2x2 x_42 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 x_49_phi = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_44 = gl_FragCoord.x;
-  if ((x_44 < 0.0f)) {
-    x_42 = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-    x_49_phi = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-  } else {
-    x_42 = float2x2(float2(0.5f, -0.5f), float2(-0.5f, 0.5f));
-    x_49_phi = float2x2(float2(0.5f, -0.5f), float2(-0.5f, 0.5f));
-  }
-  const S x_51 = {1, transpose(x_49_phi)};
-  const int x_52 = x_51.f1;
-  x_6 = x_52;
-  x_41 = x_51.f2;
-  const float2x2 x_56 = x_41;
-  const float2x2 x_59 = x_41;
-  const float2x2 x_63 = x_41;
-  x_GLF_color = float4(float(x_52), (x_56[0u].x + x_59[1u].x), (x_63[0u].y + x_41[1u].y), float(x_52));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4e836be..0000000
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int f1;
-  float2x2 f2;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2x2 x_41 = float2x2(0.0f);
-  int x_6 = 0;
-  float2x2 x_42 = float2x2(0.0f);
-  float2x2 x_49_phi = float2x2(0.0f);
-  float const x_44 = (*(tint_symbol_3)).x;
-  if ((x_44 < 0.0f)) {
-    x_42 = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-    x_49_phi = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-  } else {
-    x_42 = float2x2(float2(0.5f, -0.5f), float2(-0.5f, 0.5f));
-    x_49_phi = float2x2(float2(0.5f, -0.5f), float2(-0.5f, 0.5f));
-  }
-  float2x2 const x_49 = x_49_phi;
-  S const x_51 = {.f1=1, .f2=transpose(x_49)};
-  int const x_52 = x_51.f1;
-  x_6 = x_52;
-  x_41 = x_51.f2;
-  float2x2 const x_56 = x_41;
-  float2x2 const x_59 = x_41;
-  float2x2 const x_63 = x_41;
-  float2x2 const x_66 = x_41;
-  *(tint_symbol_4) = float4(float(x_52), (x_56[0u].x + x_59[1u].x), (x_63[0u].y + x_66[1u].y), float(x_52));
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 78c8778..0000000
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,138 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_41 "x_41"
-               OpName %x_6 "x_6"
-               OpName %x_42 "x_42"
-               OpName %x_49_phi "x_49_phi"
-               OpName %S "S"
-               OpMemberName %S 0 "f1"
-               OpMemberName %S 1 "f2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 8
-               OpMemberDecorate %S 1 ColMajor
-               OpMemberDecorate %S 1 MatrixStride 8
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %19 = OpConstantNull %mat2v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-         %39 = OpConstantComposite %v2float %float_1 %float_2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %42 = OpConstantComposite %v2float %float_3 %float_4
-         %43 = OpConstantComposite %mat2v2float %39 %42
-  %float_0_5 = OpConstant %float 0.5
- %float_n0_5 = OpConstant %float -0.5
-         %46 = OpConstantComposite %v2float %float_0_5 %float_n0_5
-         %47 = OpConstantComposite %v2float %float_n0_5 %float_0_5
-         %48 = OpConstantComposite %mat2v2float %46 %47
-          %S = OpTypeStruct %int %mat2v2float
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_41 = OpVariable %_ptr_Function_mat2v2float Function %19
-        %x_6 = OpVariable %_ptr_Function_int Function %23
-       %x_42 = OpVariable %_ptr_Function_mat2v2float Function %19
-   %x_49_phi = OpVariable %_ptr_Function_mat2v2float Function %19
-         %29 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpFOrdLessThan %bool %30 %float_0
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpStore %x_42 %43
-               OpStore %x_49_phi %43
-               OpBranch %34
-         %36 = OpLabel
-               OpStore %x_42 %48
-               OpStore %x_49_phi %48
-               OpBranch %34
-         %34 = OpLabel
-         %49 = OpLoad %mat2v2float %x_49_phi
-         %52 = OpTranspose %mat2v2float %49
-         %53 = OpCompositeConstruct %S %int_1 %52
-         %54 = OpCompositeExtract %int %53 0
-               OpStore %x_6 %54
-         %55 = OpCompositeExtract %mat2v2float %53 1
-               OpStore %x_41 %55
-         %56 = OpLoad %mat2v2float %x_41
-         %57 = OpLoad %mat2v2float %x_41
-         %58 = OpLoad %mat2v2float %x_41
-         %59 = OpLoad %mat2v2float %x_41
-         %60 = OpConvertSToF %float %54
-         %61 = OpCompositeExtract %v2float %56 0
-         %62 = OpCompositeExtract %float %61 0
-         %64 = OpCompositeExtract %v2float %57 1
-         %65 = OpCompositeExtract %float %64 0
-         %66 = OpFAdd %float %62 %65
-         %67 = OpCompositeExtract %v2float %58 0
-         %68 = OpCompositeExtract %float %67 1
-         %69 = OpCompositeExtract %v2float %59 1
-         %70 = OpCompositeExtract %float %69 1
-         %71 = OpFAdd %float %68 %70
-         %72 = OpConvertSToF %float %54
-         %73 = OpCompositeConstruct %v4float %60 %66 %71 %72
-               OpStore %x_GLF_color %73
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %78 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %79 = OpFunctionCall %void %main_1
-         %80 = OpLoad %v4float %x_GLF_color
-         %81 = OpCompositeConstruct %main_out %80
-               OpReturnValue %81
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %83 = OpLabel
-         %85 = OpLoad %v4float %gl_FragCoord_param_1
-         %84 = OpFunctionCall %main_out %main_inner %85
-         %86 = OpCompositeExtract %v4float %84 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4df9f94..0000000
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,50 +0,0 @@
-struct S {
-  f1 : i32;
-  f2 : mat2x2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_41 : mat2x2<f32>;
-  var x_6 : i32;
-  var x_42 : mat2x2<f32>;
-  var x_49_phi : mat2x2<f32>;
-  let x_44 : f32 = gl_FragCoord.x;
-  if ((x_44 < 0.0)) {
-    x_42 = mat2x2<f32>(vec2<f32>(1.0, 2.0), vec2<f32>(3.0, 4.0));
-    x_49_phi = mat2x2<f32>(vec2<f32>(1.0, 2.0), vec2<f32>(3.0, 4.0));
-  } else {
-    x_42 = mat2x2<f32>(vec2<f32>(0.5, -0.5), vec2<f32>(-0.5, 0.5));
-    x_49_phi = mat2x2<f32>(vec2<f32>(0.5, -0.5), vec2<f32>(-0.5, 0.5));
-  }
-  let x_49 : mat2x2<f32> = x_49_phi;
-  let x_51 : S = S(1, transpose(x_49));
-  let x_52 : i32 = x_51.f1;
-  x_6 = x_52;
-  x_41 = x_51.f2;
-  let x_55 : ptr<function, f32> = &(x_41[0].x);
-  let x_56 : mat2x2<f32> = x_41;
-  let x_58 : ptr<function, f32> = &(x_41[1].x);
-  let x_59 : mat2x2<f32> = x_41;
-  let x_62 : ptr<function, f32> = &(x_41[0].y);
-  let x_63 : mat2x2<f32> = x_41;
-  let x_65 : ptr<function, f32> = &(x_41[1].y);
-  let x_66 : mat2x2<f32> = x_41;
-  x_GLF_color = vec4<f32>(f32(x_52), (x_56[0u].x + x_59[1u].x), (x_63[0u].y + x_66[1u].y), f32(x_52));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 10694ae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-struct S {
-  int f1;
-  float2x2 f2;
-};
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2x2 x_41 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_6 = 0;
-  float2x2 x_42 = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 x_49_phi = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_44 = gl_FragCoord.x;
-  if ((x_44 < 0.0f)) {
-    x_42 = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-    x_49_phi = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-  } else {
-    x_42 = float2x2(float2(0.5f, -0.5f), float2(-0.5f, 0.5f));
-    x_49_phi = float2x2(float2(0.5f, -0.5f), float2(-0.5f, 0.5f));
-  }
-  const S x_51 = {1, transpose(x_49_phi)};
-  const int x_52 = x_51.f1;
-  x_6 = x_52;
-  x_41 = x_51.f2;
-  const float2x2 x_56 = x_41;
-  const float2x2 x_59 = x_41;
-  const float2x2 x_63 = x_41;
-  x_GLF_color = float4(float(x_52), (x_56[0u].x + x_59[1u].x), (x_63[0u].y + x_41[1u].y), float(x_52));
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4e836be..0000000
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int f1;
-  float2x2 f2;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2x2 x_41 = float2x2(0.0f);
-  int x_6 = 0;
-  float2x2 x_42 = float2x2(0.0f);
-  float2x2 x_49_phi = float2x2(0.0f);
-  float const x_44 = (*(tint_symbol_3)).x;
-  if ((x_44 < 0.0f)) {
-    x_42 = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-    x_49_phi = float2x2(float2(1.0f, 2.0f), float2(3.0f, 4.0f));
-  } else {
-    x_42 = float2x2(float2(0.5f, -0.5f), float2(-0.5f, 0.5f));
-    x_49_phi = float2x2(float2(0.5f, -0.5f), float2(-0.5f, 0.5f));
-  }
-  float2x2 const x_49 = x_49_phi;
-  S const x_51 = {.f1=1, .f2=transpose(x_49)};
-  int const x_52 = x_51.f1;
-  x_6 = x_52;
-  x_41 = x_51.f2;
-  float2x2 const x_56 = x_41;
-  float2x2 const x_59 = x_41;
-  float2x2 const x_63 = x_41;
-  float2x2 const x_66 = x_41;
-  *(tint_symbol_4) = float4(float(x_52), (x_56[0u].x + x_59[1u].x), (x_63[0u].y + x_66[1u].y), float(x_52));
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 78c8778..0000000
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,138 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_41 "x_41"
-               OpName %x_6 "x_6"
-               OpName %x_42 "x_42"
-               OpName %x_49_phi "x_49_phi"
-               OpName %S "S"
-               OpMemberName %S 0 "f1"
-               OpMemberName %S 1 "f2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 8
-               OpMemberDecorate %S 1 ColMajor
-               OpMemberDecorate %S 1 MatrixStride 8
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %19 = OpConstantNull %mat2v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-         %39 = OpConstantComposite %v2float %float_1 %float_2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %42 = OpConstantComposite %v2float %float_3 %float_4
-         %43 = OpConstantComposite %mat2v2float %39 %42
-  %float_0_5 = OpConstant %float 0.5
- %float_n0_5 = OpConstant %float -0.5
-         %46 = OpConstantComposite %v2float %float_0_5 %float_n0_5
-         %47 = OpConstantComposite %v2float %float_n0_5 %float_0_5
-         %48 = OpConstantComposite %mat2v2float %46 %47
-          %S = OpTypeStruct %int %mat2v2float
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_41 = OpVariable %_ptr_Function_mat2v2float Function %19
-        %x_6 = OpVariable %_ptr_Function_int Function %23
-       %x_42 = OpVariable %_ptr_Function_mat2v2float Function %19
-   %x_49_phi = OpVariable %_ptr_Function_mat2v2float Function %19
-         %29 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpFOrdLessThan %bool %30 %float_0
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpStore %x_42 %43
-               OpStore %x_49_phi %43
-               OpBranch %34
-         %36 = OpLabel
-               OpStore %x_42 %48
-               OpStore %x_49_phi %48
-               OpBranch %34
-         %34 = OpLabel
-         %49 = OpLoad %mat2v2float %x_49_phi
-         %52 = OpTranspose %mat2v2float %49
-         %53 = OpCompositeConstruct %S %int_1 %52
-         %54 = OpCompositeExtract %int %53 0
-               OpStore %x_6 %54
-         %55 = OpCompositeExtract %mat2v2float %53 1
-               OpStore %x_41 %55
-         %56 = OpLoad %mat2v2float %x_41
-         %57 = OpLoad %mat2v2float %x_41
-         %58 = OpLoad %mat2v2float %x_41
-         %59 = OpLoad %mat2v2float %x_41
-         %60 = OpConvertSToF %float %54
-         %61 = OpCompositeExtract %v2float %56 0
-         %62 = OpCompositeExtract %float %61 0
-         %64 = OpCompositeExtract %v2float %57 1
-         %65 = OpCompositeExtract %float %64 0
-         %66 = OpFAdd %float %62 %65
-         %67 = OpCompositeExtract %v2float %58 0
-         %68 = OpCompositeExtract %float %67 1
-         %69 = OpCompositeExtract %v2float %59 1
-         %70 = OpCompositeExtract %float %69 1
-         %71 = OpFAdd %float %68 %70
-         %72 = OpConvertSToF %float %54
-         %73 = OpCompositeConstruct %v4float %60 %66 %71 %72
-               OpStore %x_GLF_color %73
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %78 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %79 = OpFunctionCall %void %main_1
-         %80 = OpLoad %v4float %x_GLF_color
-         %81 = OpCompositeConstruct %main_out %80
-               OpReturnValue %81
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %83 = OpLabel
-         %85 = OpLoad %v4float %gl_FragCoord_param_1
-         %84 = OpFunctionCall %main_out %main_inner %85
-         %86 = OpCompositeExtract %v4float %84 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 4df9f94..0000000
--- a/test/vk-gl-cts/graphicsfuzz/int-mat2-struct/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,50 +0,0 @@
-struct S {
-  f1 : i32;
-  f2 : mat2x2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_41 : mat2x2<f32>;
-  var x_6 : i32;
-  var x_42 : mat2x2<f32>;
-  var x_49_phi : mat2x2<f32>;
-  let x_44 : f32 = gl_FragCoord.x;
-  if ((x_44 < 0.0)) {
-    x_42 = mat2x2<f32>(vec2<f32>(1.0, 2.0), vec2<f32>(3.0, 4.0));
-    x_49_phi = mat2x2<f32>(vec2<f32>(1.0, 2.0), vec2<f32>(3.0, 4.0));
-  } else {
-    x_42 = mat2x2<f32>(vec2<f32>(0.5, -0.5), vec2<f32>(-0.5, 0.5));
-    x_49_phi = mat2x2<f32>(vec2<f32>(0.5, -0.5), vec2<f32>(-0.5, 0.5));
-  }
-  let x_49 : mat2x2<f32> = x_49_phi;
-  let x_51 : S = S(1, transpose(x_49));
-  let x_52 : i32 = x_51.f1;
-  x_6 = x_52;
-  x_41 = x_51.f2;
-  let x_55 : ptr<function, f32> = &(x_41[0].x);
-  let x_56 : mat2x2<f32> = x_41;
-  let x_58 : ptr<function, f32> = &(x_41[1].x);
-  let x_59 : mat2x2<f32> = x_41;
-  let x_62 : ptr<function, f32> = &(x_41[0].y);
-  let x_63 : mat2x2<f32> = x_41;
-  let x_65 : ptr<function, f32> = &(x_41[1].y);
-  let x_66 : mat2x2<f32> = x_41;
-  x_GLF_color = vec4<f32>(f32(x_52), (x_56[0u].x + x_59[1u].x), (x_63[0u].y + x_66[1u].y), f32(x_52));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7106574..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,73 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int k = 0;
-  int GLF_dead0j = 0;
-  int donor_replacementGLF_dead0stack[10] = (int[10])0;
-  int donor_replacementGLF_dead0top = 0;
-  int x_54 = 0;
-  float4 matrix_b = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int b = 0;
-  k = 0;
-  {
-    for(; (k < 4); k = (k + 1)) {
-      const float x_62 = asfloat(x_6[0].y);
-      if ((0.0f > x_62)) {
-        GLF_dead0j = 1;
-        while (true) {
-          const int x_13 = donor_replacementGLF_dead0stack[0];
-          if ((1 <= x_13)) {
-          } else {
-            break;
-          }
-        }
-        if (((donor_replacementGLF_dead0top >= 0) & (donor_replacementGLF_dead0top < 9))) {
-          const int x_17 = (donor_replacementGLF_dead0top + 1);
-          donor_replacementGLF_dead0top = x_17;
-          x_54 = x_17;
-        } else {
-          x_54 = 0;
-        }
-        donor_replacementGLF_dead0stack[x_54] = 1;
-      }
-      matrix_b = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      b = 3;
-      {
-        for(; (b >= 0); b = (b - 1)) {
-          const int x_20 = b;
-          const float x_87 = matrix_b[b];
-          set_float4(matrix_b, x_20, (x_87 - 1.0f));
-        }
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 34bc5ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int k = 0;
-  int GLF_dead0j = 0;
-  tint_array_wrapper donor_replacementGLF_dead0stack = {};
-  int donor_replacementGLF_dead0top = 0;
-  int x_54 = 0;
-  float4 matrix_b = 0.0f;
-  int b = 0;
-  k = 0;
-  while (true) {
-    int const x_12 = k;
-    if ((x_12 < 4)) {
-    } else {
-      break;
-    }
-    float const x_62 = x_6.injectionSwitch.y;
-    if ((0.0f > x_62)) {
-      GLF_dead0j = 1;
-      while (true) {
-        int const x_13 = donor_replacementGLF_dead0stack.arr[0];
-        if ((1 <= x_13)) {
-        } else {
-          break;
-        }
-      }
-      int const x_14 = donor_replacementGLF_dead0top;
-      int const x_15 = donor_replacementGLF_dead0top;
-      if (((x_14 >= 0) & (x_15 < 9))) {
-        int const x_16 = donor_replacementGLF_dead0top;
-        int const x_17 = as_type<int>((as_type<uint>(x_16) + as_type<uint>(1)));
-        donor_replacementGLF_dead0top = x_17;
-        x_54 = x_17;
-      } else {
-        x_54 = 0;
-      }
-      int const x_18 = x_54;
-      donor_replacementGLF_dead0stack.arr[x_18] = 1;
-    }
-    matrix_b = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    b = 3;
-    while (true) {
-      int const x_19 = b;
-      if ((x_19 >= 0)) {
-      } else {
-        break;
-      }
-      int const x_20 = b;
-      int const x_21 = b;
-      float const x_87 = matrix_b[x_21];
-      matrix_b[x_20] = (x_87 - 1.0f);
-      {
-        int const x_22 = b;
-        b = as_type<int>((as_type<uint>(x_22) - as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_24 = k;
-      k = as_type<int>((as_type<uint>(x_24) + as_type<uint>(1)));
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 663e474..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,198 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 112
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %k "k"
-               OpName %GLF_dead0j "GLF_dead0j"
-               OpName %donor_replacementGLF_dead0stack "donor_replacementGLF_dead0stack"
-               OpName %donor_replacementGLF_dead0top "donor_replacementGLF_dead0top"
-               OpName %x_54 "x_54"
-               OpName %matrix_b "matrix_b"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %26 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-         %77 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_3 = OpConstant %int 3
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-        %100 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %101 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %19
- %GLF_dead0j = OpVariable %_ptr_Function_int Function %19
-%donor_replacementGLF_dead0stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-%donor_replacementGLF_dead0top = OpVariable %_ptr_Function_int Function %19
-       %x_54 = OpVariable %_ptr_Function_int Function %19
-   %matrix_b = OpVariable %_ptr_Function_v4float Function %5
-          %b = OpVariable %_ptr_Function_int Function %19
-               OpStore %k %int_0
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %37 = OpLoad %int %k
-         %39 = OpSLessThan %bool %37 %int_4
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %34
-         %41 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %48 = OpLoad %float %47
-         %50 = OpFOrdGreaterThan %bool %float_0 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-               OpStore %GLF_dead0j %int_1
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %58 = OpAccessChain %_ptr_Function_int %donor_replacementGLF_dead0stack %int_0
-         %59 = OpLoad %int %58
-         %60 = OpSLessThanEqual %bool %int_1 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %55
-         %61 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %54
-         %55 = OpLabel
-         %64 = OpLoad %int %donor_replacementGLF_dead0top
-         %65 = OpLoad %int %donor_replacementGLF_dead0top
-         %66 = OpSGreaterThanEqual %bool %64 %int_0
-         %68 = OpSLessThan %bool %65 %int_9
-         %69 = OpLogicalAnd %bool %66 %68
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-         %73 = OpLoad %int %donor_replacementGLF_dead0top
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %donor_replacementGLF_dead0top %74
-               OpStore %x_54 %74
-               OpBranch %70
-         %72 = OpLabel
-               OpStore %x_54 %int_0
-               OpBranch %70
-         %70 = OpLabel
-         %75 = OpLoad %int %x_54
-         %76 = OpAccessChain %_ptr_Function_int %donor_replacementGLF_dead0stack %75
-               OpStore %76 %int_1
-               OpBranch %51
-         %51 = OpLabel
-               OpStore %matrix_b %77
-               OpStore %b %int_3
-               OpBranch %79
-         %79 = OpLabel
-               OpLoopMerge %80 %81 None
-               OpBranch %82
-         %82 = OpLabel
-         %83 = OpLoad %int %b
-         %84 = OpSGreaterThanEqual %bool %83 %int_0
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %87
-         %86 = OpLabel
-               OpBranch %85
-         %87 = OpLabel
-               OpBranch %80
-         %85 = OpLabel
-         %88 = OpLoad %int %b
-         %89 = OpLoad %int %b
-         %91 = OpAccessChain %_ptr_Function_float %matrix_b %89
-         %92 = OpLoad %float %91
-         %93 = OpAccessChain %_ptr_Function_float %matrix_b %88
-         %95 = OpFSub %float %92 %float_1
-               OpStore %93 %95
-               OpBranch %81
-         %81 = OpLabel
-         %96 = OpLoad %int %b
-         %97 = OpISub %int %96 %int_1
-               OpStore %b %97
-               OpBranch %79
-         %80 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-         %98 = OpLoad %int %k
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %k %99
-               OpBranch %33
-         %34 = OpLabel
-               OpStore %x_GLF_color %100
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %101
-        %104 = OpLabel
-        %105 = OpFunctionCall %void %main_1
-        %106 = OpLoad %v4float %x_GLF_color
-        %107 = OpCompositeConstruct %main_out %106
-               OpReturnValue %107
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %109 = OpLabel
-        %110 = OpFunctionCall %main_out %main_inner
-        %111 = OpCompositeExtract %v4float %110 0
-               OpStore %x_GLF_color_1_1 %111
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 25f8cec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,85 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var k : i32;
-  var GLF_dead0j : i32;
-  var donor_replacementGLF_dead0stack : array<i32, 10>;
-  var donor_replacementGLF_dead0top : i32;
-  var x_54 : i32;
-  var matrix_b : vec4<f32>;
-  var b : i32;
-  k = 0;
-  loop {
-    let x_12 : i32 = k;
-    if ((x_12 < 4)) {
-    } else {
-      break;
-    }
-    let x_62 : f32 = x_6.injectionSwitch.y;
-    if ((0.0 > x_62)) {
-      GLF_dead0j = 1;
-      loop {
-        let x_13 : i32 = donor_replacementGLF_dead0stack[0];
-        if ((1 <= x_13)) {
-        } else {
-          break;
-        }
-      }
-      let x_14 : i32 = donor_replacementGLF_dead0top;
-      let x_15 : i32 = donor_replacementGLF_dead0top;
-      if (((x_14 >= 0) & (x_15 < 9))) {
-        let x_16 : i32 = donor_replacementGLF_dead0top;
-        let x_17 : i32 = (x_16 + 1);
-        donor_replacementGLF_dead0top = x_17;
-        x_54 = x_17;
-      } else {
-        x_54 = 0;
-      }
-      let x_18 : i32 = x_54;
-      donor_replacementGLF_dead0stack[x_18] = 1;
-    }
-    matrix_b = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    b = 3;
-    loop {
-      let x_19 : i32 = b;
-      if ((x_19 >= 0)) {
-      } else {
-        break;
-      }
-      let x_20 : i32 = b;
-      let x_21 : i32 = b;
-      let x_87 : f32 = matrix_b[x_21];
-      matrix_b[x_20] = (x_87 - 1.0);
-
-      continuing {
-        let x_22 : i32 = b;
-        b = (x_22 - 1);
-      }
-    }
-
-    continuing {
-      let x_24 : i32 = k;
-      k = (x_24 + 1);
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 2783b46..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,77 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int k = 0;
-  int GLF_dead0j = 0;
-  int donor_replacementGLF_dead0stack[10] = (int[10])0;
-  int donor_replacementGLF_dead0top = 0;
-  int x_54 = 0;
-  float4 matrix_b = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int b = 0;
-  k = 0;
-  {
-    for(; (k < 4); k = (k + 1)) {
-      const float x_62 = asfloat(x_6[0].y);
-      if ((0.0f > x_62)) {
-        GLF_dead0j = 1;
-        while (true) {
-          const int x_13 = donor_replacementGLF_dead0stack[0];
-          if ((1 <= x_13)) {
-          } else {
-            break;
-          }
-        }
-        bool tint_tmp = (donor_replacementGLF_dead0top >= 0);
-        if (tint_tmp) {
-          tint_tmp = (donor_replacementGLF_dead0top < 9);
-        }
-        if ((tint_tmp)) {
-          const int x_17 = (donor_replacementGLF_dead0top + 1);
-          donor_replacementGLF_dead0top = x_17;
-          x_54 = x_17;
-        } else {
-          x_54 = 0;
-        }
-        donor_replacementGLF_dead0stack[x_54] = 1;
-      }
-      matrix_b = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      b = 3;
-      {
-        for(; (b >= 0); b = (b - 1)) {
-          const int x_20 = b;
-          const float x_87 = matrix_b[b];
-          set_float4(matrix_b, x_20, (x_87 - 1.0f));
-        }
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index deec1da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int k = 0;
-  int GLF_dead0j = 0;
-  tint_array_wrapper donor_replacementGLF_dead0stack = {};
-  int donor_replacementGLF_dead0top = 0;
-  int x_54 = 0;
-  float4 matrix_b = 0.0f;
-  int b = 0;
-  k = 0;
-  while (true) {
-    int const x_12 = k;
-    if ((x_12 < 4)) {
-    } else {
-      break;
-    }
-    float const x_62 = x_6.injectionSwitch.y;
-    if ((0.0f > x_62)) {
-      GLF_dead0j = 1;
-      while (true) {
-        int const x_13 = donor_replacementGLF_dead0stack.arr[0];
-        if ((1 <= x_13)) {
-        } else {
-          break;
-        }
-      }
-      int const x_14 = donor_replacementGLF_dead0top;
-      int const x_15 = donor_replacementGLF_dead0top;
-      if (((x_14 >= 0) && (x_15 < 9))) {
-        int const x_16 = donor_replacementGLF_dead0top;
-        int const x_17 = as_type<int>((as_type<uint>(x_16) + as_type<uint>(1)));
-        donor_replacementGLF_dead0top = x_17;
-        x_54 = x_17;
-      } else {
-        x_54 = 0;
-      }
-      int const x_18 = x_54;
-      donor_replacementGLF_dead0stack.arr[x_18] = 1;
-    }
-    matrix_b = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    b = 3;
-    while (true) {
-      int const x_19 = b;
-      if ((x_19 >= 0)) {
-      } else {
-        break;
-      }
-      int const x_20 = b;
-      int const x_21 = b;
-      float const x_87 = matrix_b[x_21];
-      matrix_b[x_20] = (x_87 - 1.0f);
-      {
-        int const x_22 = b;
-        b = as_type<int>((as_type<uint>(x_22) - as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_24 = k;
-      k = as_type<int>((as_type<uint>(x_24) + as_type<uint>(1)));
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5b8431a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,203 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 114
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %k "k"
-               OpName %GLF_dead0j "GLF_dead0j"
-               OpName %donor_replacementGLF_dead0stack "donor_replacementGLF_dead0stack"
-               OpName %donor_replacementGLF_dead0top "donor_replacementGLF_dead0top"
-               OpName %x_54 "x_54"
-               OpName %matrix_b "matrix_b"
-               OpName %b "b"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %26 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-         %79 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_3 = OpConstant %int 3
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-        %102 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %103 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %19
- %GLF_dead0j = OpVariable %_ptr_Function_int Function %19
-%donor_replacementGLF_dead0stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %26
-%donor_replacementGLF_dead0top = OpVariable %_ptr_Function_int Function %19
-       %x_54 = OpVariable %_ptr_Function_int Function %19
-   %matrix_b = OpVariable %_ptr_Function_v4float Function %5
-          %b = OpVariable %_ptr_Function_int Function %19
-               OpStore %k %int_0
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %37 = OpLoad %int %k
-         %39 = OpSLessThan %bool %37 %int_4
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %34
-         %41 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %48 = OpLoad %float %47
-         %50 = OpFOrdGreaterThan %bool %float_0 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-               OpStore %GLF_dead0j %int_1
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %58 = OpAccessChain %_ptr_Function_int %donor_replacementGLF_dead0stack %int_0
-         %59 = OpLoad %int %58
-         %60 = OpSLessThanEqual %bool %int_1 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %55
-         %61 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %54
-         %55 = OpLabel
-         %64 = OpLoad %int %donor_replacementGLF_dead0top
-         %65 = OpLoad %int %donor_replacementGLF_dead0top
-         %66 = OpSGreaterThanEqual %bool %64 %int_0
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-         %70 = OpSLessThan %bool %65 %int_9
-               OpBranch %67
-         %67 = OpLabel
-         %71 = OpPhi %bool %66 %55 %70 %68
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-         %75 = OpLoad %int %donor_replacementGLF_dead0top
-         %76 = OpIAdd %int %75 %int_1
-               OpStore %donor_replacementGLF_dead0top %76
-               OpStore %x_54 %76
-               OpBranch %72
-         %74 = OpLabel
-               OpStore %x_54 %int_0
-               OpBranch %72
-         %72 = OpLabel
-         %77 = OpLoad %int %x_54
-         %78 = OpAccessChain %_ptr_Function_int %donor_replacementGLF_dead0stack %77
-               OpStore %78 %int_1
-               OpBranch %51
-         %51 = OpLabel
-               OpStore %matrix_b %79
-               OpStore %b %int_3
-               OpBranch %81
-         %81 = OpLabel
-               OpLoopMerge %82 %83 None
-               OpBranch %84
-         %84 = OpLabel
-         %85 = OpLoad %int %b
-         %86 = OpSGreaterThanEqual %bool %85 %int_0
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %89
-         %88 = OpLabel
-               OpBranch %87
-         %89 = OpLabel
-               OpBranch %82
-         %87 = OpLabel
-         %90 = OpLoad %int %b
-         %91 = OpLoad %int %b
-         %93 = OpAccessChain %_ptr_Function_float %matrix_b %91
-         %94 = OpLoad %float %93
-         %95 = OpAccessChain %_ptr_Function_float %matrix_b %90
-         %97 = OpFSub %float %94 %float_1
-               OpStore %95 %97
-               OpBranch %83
-         %83 = OpLabel
-         %98 = OpLoad %int %b
-         %99 = OpISub %int %98 %int_1
-               OpStore %b %99
-               OpBranch %81
-         %82 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-        %100 = OpLoad %int %k
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %k %101
-               OpBranch %33
-         %34 = OpLabel
-               OpStore %x_GLF_color %102
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %103
-        %106 = OpLabel
-        %107 = OpFunctionCall %void %main_1
-        %108 = OpLoad %v4float %x_GLF_color
-        %109 = OpCompositeConstruct %main_out %108
-               OpReturnValue %109
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %111 = OpLabel
-        %112 = OpFunctionCall %main_out %main_inner
-        %113 = OpCompositeExtract %v4float %112 0
-               OpStore %x_GLF_color_1_1 %113
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 26a8a10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-dead-if-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,85 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var k : i32;
-  var GLF_dead0j : i32;
-  var donor_replacementGLF_dead0stack : array<i32, 10>;
-  var donor_replacementGLF_dead0top : i32;
-  var x_54 : i32;
-  var matrix_b : vec4<f32>;
-  var b : i32;
-  k = 0;
-  loop {
-    let x_12 : i32 = k;
-    if ((x_12 < 4)) {
-    } else {
-      break;
-    }
-    let x_62 : f32 = x_6.injectionSwitch.y;
-    if ((0.0 > x_62)) {
-      GLF_dead0j = 1;
-      loop {
-        let x_13 : i32 = donor_replacementGLF_dead0stack[0];
-        if ((1 <= x_13)) {
-        } else {
-          break;
-        }
-      }
-      let x_14 : i32 = donor_replacementGLF_dead0top;
-      let x_15 : i32 = donor_replacementGLF_dead0top;
-      if (((x_14 >= 0) && (x_15 < 9))) {
-        let x_16 : i32 = donor_replacementGLF_dead0top;
-        let x_17 : i32 = (x_16 + 1);
-        donor_replacementGLF_dead0top = x_17;
-        x_54 = x_17;
-      } else {
-        x_54 = 0;
-      }
-      let x_18 : i32 = x_54;
-      donor_replacementGLF_dead0stack[x_18] = 1;
-    }
-    matrix_b = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    b = 3;
-    loop {
-      let x_19 : i32 = b;
-      if ((x_19 >= 0)) {
-      } else {
-        break;
-      }
-      let x_20 : i32 = b;
-      let x_21 : i32 = b;
-      let x_87 : f32 = matrix_b[x_21];
-      matrix_b[x_20] = (x_87 - 1.0);
-
-      continuing {
-        let x_22 : i32 = b;
-        b = (x_22 - 1);
-      }
-    }
-
-    continuing {
-      let x_24 : i32 = k;
-      k = (x_24 + 1);
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index edb5018..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int j = 0;
-  float a = 0.0f;
-  j = 0;
-  {
-    for(; (j < 2); j = (j + 1)) {
-      if ((j < 1)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      }
-      if ((j != 3)) {
-        if ((j != 4)) {
-          if ((j == 5)) {
-            x_GLF_color.x = ldexp(1.0f, 2);
-          } else {
-            a = ldexp(1.0f, 2);
-            x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.msl
deleted file mode 100644
index b956542..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int j = 0;
-  float a = 0.0f;
-  j = 0;
-  while (true) {
-    int const x_6 = j;
-    if ((x_6 < 2)) {
-    } else {
-      break;
-    }
-    int const x_7 = j;
-    if ((x_7 < 1)) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-    int const x_8 = j;
-    if ((x_8 != 3)) {
-      int const x_9 = j;
-      if ((x_9 != 4)) {
-        int const x_10 = j;
-        if ((x_10 == 5)) {
-          (*(tint_symbol_3)).x = ldexp(1.0f, 2);
-        } else {
-          a = ldexp(1.0f, 2);
-          *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        }
-      }
-    }
-    {
-      int const x_11 = j;
-      j = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2cd86eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-         %60 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %64 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %15
-          %a = OpVariable %_ptr_Function_float Function %18
-               OpStore %j %int_0
-               OpBranch %20
-         %20 = OpLabel
-               OpLoopMerge %21 %22 None
-               OpBranch %23
-         %23 = OpLabel
-         %24 = OpLoad %int %j
-         %26 = OpSLessThan %bool %24 %int_2
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-               OpBranch %28
-         %30 = OpLabel
-               OpBranch %21
-         %28 = OpLabel
-         %31 = OpLoad %int %j
-         %33 = OpSLessThan %bool %31 %int_1
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %34
-         %35 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %34
-         %34 = OpLabel
-         %39 = OpLoad %int %j
-         %41 = OpINotEqual %bool %39 %int_3
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-         %44 = OpLoad %int %j
-         %46 = OpINotEqual %bool %44 %int_4
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %int %j
-         %51 = OpIEqual %bool %49 %int_5
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-         %58 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %59 = OpExtInst %float %60 Ldexp %float_1 %int_2
-               OpStore %58 %59
-               OpBranch %52
-         %54 = OpLabel
-         %61 = OpExtInst %float %60 Ldexp %float_1 %int_2
-               OpStore %a %61
-               OpStore %x_GLF_color %38
-               OpBranch %52
-         %52 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-               OpBranch %22
-         %22 = OpLabel
-         %62 = OpLoad %int %j
-         %63 = OpIAdd %int %62 %int_1
-               OpStore %j %63
-               OpBranch %20
-         %21 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %64
-         %67 = OpLabel
-         %68 = OpFunctionCall %void %main_1
-         %69 = OpLoad %v4float %x_GLF_color
-         %70 = OpCompositeConstruct %main_out %69
-               OpReturnValue %70
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %72 = OpLabel
-         %73 = OpFunctionCall %main_out %main_inner
-         %74 = OpCompositeExtract %v4float %73 0
-               OpStore %x_GLF_color_1_1 %74
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b8234b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var j : i32;
-  var a : f32;
-  j = 0;
-  loop {
-    let x_6 : i32 = j;
-    if ((x_6 < 2)) {
-    } else {
-      break;
-    }
-    let x_7 : i32 = j;
-    if ((x_7 < 1)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-    let x_8 : i32 = j;
-    if ((x_8 != 3)) {
-      let x_9 : i32 = j;
-      if ((x_9 != 4)) {
-        let x_10 : i32 = j;
-        if ((x_10 == 5)) {
-          x_GLF_color.x = ldexp(1.0, 2);
-        } else {
-          a = ldexp(1.0, 2);
-          x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-        }
-      }
-    }
-
-    continuing {
-      let x_11 : i32 = j;
-      j = (x_11 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index edb5018..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,45 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int j = 0;
-  float a = 0.0f;
-  j = 0;
-  {
-    for(; (j < 2); j = (j + 1)) {
-      if ((j < 1)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      }
-      if ((j != 3)) {
-        if ((j != 4)) {
-          if ((j == 5)) {
-            x_GLF_color.x = ldexp(1.0f, 2);
-          } else {
-            a = ldexp(1.0f, 2);
-            x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.msl
deleted file mode 100644
index b956542..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int j = 0;
-  float a = 0.0f;
-  j = 0;
-  while (true) {
-    int const x_6 = j;
-    if ((x_6 < 2)) {
-    } else {
-      break;
-    }
-    int const x_7 = j;
-    if ((x_7 < 1)) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-    int const x_8 = j;
-    if ((x_8 != 3)) {
-      int const x_9 = j;
-      if ((x_9 != 4)) {
-        int const x_10 = j;
-        if ((x_10 == 5)) {
-          (*(tint_symbol_3)).x = ldexp(1.0f, 2);
-        } else {
-          a = ldexp(1.0f, 2);
-          *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        }
-      }
-    }
-    {
-      int const x_11 = j;
-      j = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2cd86eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,129 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 75
-; Schema: 0
-               OpCapability Shader
-         %60 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %a "a"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %main_out = OpTypeStruct %v4float
-         %64 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %15
-          %a = OpVariable %_ptr_Function_float Function %18
-               OpStore %j %int_0
-               OpBranch %20
-         %20 = OpLabel
-               OpLoopMerge %21 %22 None
-               OpBranch %23
-         %23 = OpLabel
-         %24 = OpLoad %int %j
-         %26 = OpSLessThan %bool %24 %int_2
-               OpSelectionMerge %28 None
-               OpBranchConditional %26 %29 %30
-         %29 = OpLabel
-               OpBranch %28
-         %30 = OpLabel
-               OpBranch %21
-         %28 = OpLabel
-         %31 = OpLoad %int %j
-         %33 = OpSLessThan %bool %31 %int_1
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %34
-         %35 = OpLabel
-               OpStore %x_GLF_color %38
-               OpBranch %34
-         %34 = OpLabel
-         %39 = OpLoad %int %j
-         %41 = OpINotEqual %bool %39 %int_3
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-         %44 = OpLoad %int %j
-         %46 = OpINotEqual %bool %44 %int_4
-               OpSelectionMerge %47 None
-               OpBranchConditional %46 %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %int %j
-         %51 = OpIEqual %bool %49 %int_5
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-         %58 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %59 = OpExtInst %float %60 Ldexp %float_1 %int_2
-               OpStore %58 %59
-               OpBranch %52
-         %54 = OpLabel
-         %61 = OpExtInst %float %60 Ldexp %float_1 %int_2
-               OpStore %a %61
-               OpStore %x_GLF_color %38
-               OpBranch %52
-         %52 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %42
-         %42 = OpLabel
-               OpBranch %22
-         %22 = OpLabel
-         %62 = OpLoad %int %j
-         %63 = OpIAdd %int %62 %int_1
-               OpStore %j %63
-               OpBranch %20
-         %21 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %64
-         %67 = OpLabel
-         %68 = OpFunctionCall %void %main_1
-         %69 = OpLoad %v4float %x_GLF_color
-         %70 = OpCompositeConstruct %main_out %69
-               OpReturnValue %70
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %72 = OpLabel
-         %73 = OpFunctionCall %main_out %main_inner
-         %74 = OpCompositeExtract %v4float %73 0
-               OpStore %x_GLF_color_1_1 %74
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b8234b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loop-nested-ifs/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var j : i32;
-  var a : f32;
-  j = 0;
-  loop {
-    let x_6 : i32 = j;
-    if ((x_6 < 2)) {
-    } else {
-      break;
-    }
-    let x_7 : i32 = j;
-    if ((x_7 < 1)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-    let x_8 : i32 = j;
-    if ((x_8 != 3)) {
-      let x_9 : i32 = j;
-      if ((x_9 != 4)) {
-        let x_10 : i32 = j;
-        if ((x_10 == 5)) {
-          x_GLF_color.x = ldexp(1.0, 2);
-        } else {
-          a = ldexp(1.0, 2);
-          x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-        }
-      }
-    }
-
-    continuing {
-      let x_11 : i32 = j;
-      j = (x_11 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.hlsl
deleted file mode 100644
index 52bc359..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-struct BinarySearchObject {
-  int prime_numbers[10];
-};
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int binarySearch_struct_BinarySearchObject_i1_10_1_(inout BinarySearchObject obj) {
-  int m = 0;
-  while (true) {
-    const float x_91 = asfloat(x_8[0].x);
-    if ((x_91 > 1.0f)) {
-    } else {
-      break;
-    }
-    const float x_95 = asfloat(x_8[0].x);
-    m = int(x_95);
-    const int x_15 = obj.prime_numbers[m];
-    if ((x_15 == 1)) {
-      return 1;
-    }
-  }
-  return 1;
-}
-
-void main_1() {
-  int i = 0;
-  BinarySearchObject obj_1 = (BinarySearchObject)0;
-  BinarySearchObject param = (BinarySearchObject)0;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      if ((i != 3)) {
-        const int x_18 = i;
-        const float x_67 = asfloat(x_8[0].x);
-        if (((x_18 - int(x_67)) == 4)) {
-          obj_1.prime_numbers[i] = 11;
-        } else {
-          if ((i == 6)) {
-            obj_1.prime_numbers[i] = 17;
-          }
-          continue;
-        }
-      }
-      while (true) {
-        {
-          const float x_82 = asfloat(x_8[0].y);
-          if ((0.0f > x_82)) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  param = obj_1;
-  const int x_26 = binarySearch_struct_BinarySearchObject_i1_10_1_(param);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.msl
deleted file mode 100644
index af02cf4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.msl
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct BinarySearchObject {
-  tint_array_wrapper prime_numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int binarySearch_struct_BinarySearchObject_i1_10_1_(constant buf0& x_8, thread BinarySearchObject* const obj) {
-  int m = 0;
-  while (true) {
-    float const x_91 = x_8.injectionSwitch.x;
-    if ((x_91 > 1.0f)) {
-    } else {
-      break;
-    }
-    float const x_95 = x_8.injectionSwitch.x;
-    m = int(x_95);
-    int const x_14 = m;
-    int const x_15 = (*(obj)).prime_numbers.arr[x_14];
-    if ((x_15 == 1)) {
-      return 1;
-    }
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  BinarySearchObject obj_1 = {};
-  BinarySearchObject param = {};
-  i = 0;
-  while (true) {
-    int const x_16 = i;
-    if ((x_16 < 10)) {
-    } else {
-      break;
-    }
-    int const x_17 = i;
-    if ((x_17 != 3)) {
-      int const x_18 = i;
-      float const x_67 = x_8.injectionSwitch.x;
-      if ((as_type<int>((as_type<uint>(x_18) - as_type<uint>(int(x_67)))) == 4)) {
-        int const x_21 = i;
-        obj_1.prime_numbers.arr[x_21] = 11;
-      } else {
-        int const x_22 = i;
-        if ((x_22 == 6)) {
-          int const x_23 = i;
-          obj_1.prime_numbers.arr[x_23] = 17;
-        }
-        {
-          int const x_24 = i;
-          i = as_type<int>((as_type<uint>(x_24) + as_type<uint>(1)));
-        }
-        continue;
-      }
-    }
-    while (true) {
-      {
-        float const x_82 = x_8.injectionSwitch.y;
-        if ((0.0f > x_82)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      int const x_24 = i;
-      i = as_type<int>((as_type<uint>(x_24) + as_type<uint>(1)));
-    }
-  }
-  BinarySearchObject const x_84 = obj_1;
-  param = x_84;
-  int const x_26 = binarySearch_struct_BinarySearchObject_i1_10_1_(x_8, &(param));
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.spvasm
deleted file mode 100644
index 64b7405..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,206 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %BinarySearchObject "BinarySearchObject"
-               OpMemberName %BinarySearchObject 0 "prime_numbers"
-               OpName %binarySearch_struct_BinarySearchObject_i1_10_1_ "binarySearch_struct_BinarySearchObject_i1_10_1_"
-               OpName %obj "obj"
-               OpName %m "m"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %obj_1 "obj_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %BinarySearchObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%BinarySearchObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Function_BinarySearchObject = OpTypePointer Function %BinarySearchObject
-         %12 = OpTypeFunction %int %_ptr_Function_BinarySearchObject
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %50 = OpTypeFunction %void
-         %56 = OpConstantNull %BinarySearchObject
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-        %109 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out
-%binarySearch_struct_BinarySearchObject_i1_10_1_ = OpFunction %int None %12
-        %obj = OpFunctionParameter %_ptr_Function_BinarySearchObject
-         %21 = OpLabel
-          %m = OpVariable %_ptr_Function_int Function %24
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %31 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %32 = OpLoad %float %31
-         %34 = OpFOrdGreaterThan %bool %32 %float_1
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-               OpBranch %36
-         %38 = OpLabel
-               OpBranch %26
-         %36 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-               OpStore %m %41
-         %42 = OpLoad %int %m
-         %44 = OpAccessChain %_ptr_Function_int %obj %uint_0 %42
-         %45 = OpLoad %int %44
-         %47 = OpIEqual %bool %45 %int_1
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-               OpReturnValue %int_1
-         %48 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpBranch %25
-         %26 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %50
-         %53 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %24
-      %obj_1 = OpVariable %_ptr_Function_BinarySearchObject Function %56
-      %param = OpVariable %_ptr_Function_BinarySearchObject Function %56
-               OpStore %i %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpSLessThan %bool %63 %int_10
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-               OpBranch %66
-         %68 = OpLabel
-               OpBranch %60
-         %66 = OpLabel
-         %69 = OpLoad %int %i
-         %71 = OpINotEqual %bool %69 %int_3
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %76 = OpLoad %float %75
-         %77 = OpConvertFToS %int %76
-         %78 = OpISub %int %74 %77
-         %80 = OpIEqual %bool %78 %int_4
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpAccessChain %_ptr_Function_int %obj_1 %uint_0 %84
-               OpStore %85 %int_11
-               OpBranch %81
-         %83 = OpLabel
-         %87 = OpLoad %int %i
-         %89 = OpIEqual %bool %87 %int_6
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpAccessChain %_ptr_Function_int %obj_1 %uint_0 %92
-               OpStore %93 %int_17
-               OpBranch %90
-         %90 = OpLabel
-               OpBranch %61
-         %81 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %95
-         %95 = OpLabel
-               OpLoopMerge %96 %97 None
-               OpBranch %98
-         %98 = OpLabel
-               OpBranch %97
-         %97 = OpLabel
-        %100 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %101 = OpLoad %float %100
-        %103 = OpFOrdGreaterThan %bool %float_0 %101
-               OpBranchConditional %103 %95 %96
-         %96 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-        %104 = OpLoad %int %i
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %i %105
-               OpBranch %59
-         %60 = OpLabel
-        %106 = OpLoad %BinarySearchObject %obj_1
-               OpStore %param %106
-        %107 = OpFunctionCall %int %binarySearch_struct_BinarySearchObject_i1_10_1_ %param
-               OpStore %x_GLF_color %109
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-        %113 = OpLabel
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %50
-        %118 = OpLabel
-        %119 = OpFunctionCall %main_out %main_inner
-        %120 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.wgsl
deleted file mode 100644
index 9d9f80c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,92 +0,0 @@
-struct BinarySearchObject {
-  prime_numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn binarySearch_struct_BinarySearchObject_i1_10_1_(obj : ptr<function, BinarySearchObject>) -> i32 {
-  var m : i32;
-  loop {
-    let x_91 : f32 = x_8.injectionSwitch.x;
-    if ((x_91 > 1.0)) {
-    } else {
-      break;
-    }
-    let x_95 : f32 = x_8.injectionSwitch.x;
-    m = i32(x_95);
-    let x_14 : i32 = m;
-    let x_15 : i32 = (*(obj)).prime_numbers[x_14];
-    if ((x_15 == 1)) {
-      return 1;
-    }
-  }
-  return 1;
-}
-
-fn main_1() {
-  var i : i32;
-  var obj_1 : BinarySearchObject;
-  var param : BinarySearchObject;
-  i = 0;
-  loop {
-    let x_16 : i32 = i;
-    if ((x_16 < 10)) {
-    } else {
-      break;
-    }
-    let x_17 : i32 = i;
-    if ((x_17 != 3)) {
-      let x_18 : i32 = i;
-      let x_67 : f32 = x_8.injectionSwitch.x;
-      if (((x_18 - i32(x_67)) == 4)) {
-        let x_21 : i32 = i;
-        obj_1.prime_numbers[x_21] = 11;
-      } else {
-        let x_22 : i32 = i;
-        if ((x_22 == 6)) {
-          let x_23 : i32 = i;
-          obj_1.prime_numbers[x_23] = 17;
-        }
-        continue;
-      }
-    }
-    loop {
-
-      continuing {
-        let x_82 : f32 = x_8.injectionSwitch.y;
-        if ((0.0 > x_82)) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      let x_24 : i32 = i;
-      i = (x_24 + 1);
-    }
-  }
-  let x_84 : BinarySearchObject = obj_1;
-  param = x_84;
-  let x_26 : i32 = binarySearch_struct_BinarySearchObject_i1_10_1_(&(param));
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.hlsl
deleted file mode 100644
index 52bc359..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,82 +0,0 @@
-struct BinarySearchObject {
-  int prime_numbers[10];
-};
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int binarySearch_struct_BinarySearchObject_i1_10_1_(inout BinarySearchObject obj) {
-  int m = 0;
-  while (true) {
-    const float x_91 = asfloat(x_8[0].x);
-    if ((x_91 > 1.0f)) {
-    } else {
-      break;
-    }
-    const float x_95 = asfloat(x_8[0].x);
-    m = int(x_95);
-    const int x_15 = obj.prime_numbers[m];
-    if ((x_15 == 1)) {
-      return 1;
-    }
-  }
-  return 1;
-}
-
-void main_1() {
-  int i = 0;
-  BinarySearchObject obj_1 = (BinarySearchObject)0;
-  BinarySearchObject param = (BinarySearchObject)0;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      if ((i != 3)) {
-        const int x_18 = i;
-        const float x_67 = asfloat(x_8[0].x);
-        if (((x_18 - int(x_67)) == 4)) {
-          obj_1.prime_numbers[i] = 11;
-        } else {
-          if ((i == 6)) {
-            obj_1.prime_numbers[i] = 17;
-          }
-          continue;
-        }
-      }
-      while (true) {
-        {
-          const float x_82 = asfloat(x_8[0].y);
-          if ((0.0f > x_82)) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  param = obj_1;
-  const int x_26 = binarySearch_struct_BinarySearchObject_i1_10_1_(param);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.msl
deleted file mode 100644
index af02cf4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.msl
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct BinarySearchObject {
-  tint_array_wrapper prime_numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int binarySearch_struct_BinarySearchObject_i1_10_1_(constant buf0& x_8, thread BinarySearchObject* const obj) {
-  int m = 0;
-  while (true) {
-    float const x_91 = x_8.injectionSwitch.x;
-    if ((x_91 > 1.0f)) {
-    } else {
-      break;
-    }
-    float const x_95 = x_8.injectionSwitch.x;
-    m = int(x_95);
-    int const x_14 = m;
-    int const x_15 = (*(obj)).prime_numbers.arr[x_14];
-    if ((x_15 == 1)) {
-      return 1;
-    }
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int i = 0;
-  BinarySearchObject obj_1 = {};
-  BinarySearchObject param = {};
-  i = 0;
-  while (true) {
-    int const x_16 = i;
-    if ((x_16 < 10)) {
-    } else {
-      break;
-    }
-    int const x_17 = i;
-    if ((x_17 != 3)) {
-      int const x_18 = i;
-      float const x_67 = x_8.injectionSwitch.x;
-      if ((as_type<int>((as_type<uint>(x_18) - as_type<uint>(int(x_67)))) == 4)) {
-        int const x_21 = i;
-        obj_1.prime_numbers.arr[x_21] = 11;
-      } else {
-        int const x_22 = i;
-        if ((x_22 == 6)) {
-          int const x_23 = i;
-          obj_1.prime_numbers.arr[x_23] = 17;
-        }
-        {
-          int const x_24 = i;
-          i = as_type<int>((as_type<uint>(x_24) + as_type<uint>(1)));
-        }
-        continue;
-      }
-    }
-    while (true) {
-      {
-        float const x_82 = x_8.injectionSwitch.y;
-        if ((0.0f > x_82)) {
-        } else {
-          break;
-        }
-      }
-    }
-    {
-      int const x_24 = i;
-      i = as_type<int>((as_type<uint>(x_24) + as_type<uint>(1)));
-    }
-  }
-  BinarySearchObject const x_84 = obj_1;
-  param = x_84;
-  int const x_26 = binarySearch_struct_BinarySearchObject_i1_10_1_(x_8, &(param));
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.spvasm
deleted file mode 100644
index 64b7405..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,206 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %BinarySearchObject "BinarySearchObject"
-               OpMemberName %BinarySearchObject 0 "prime_numbers"
-               OpName %binarySearch_struct_BinarySearchObject_i1_10_1_ "binarySearch_struct_BinarySearchObject_i1_10_1_"
-               OpName %obj "obj"
-               OpName %m "m"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %obj_1 "obj_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %BinarySearchObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%BinarySearchObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Function_BinarySearchObject = OpTypePointer Function %BinarySearchObject
-         %12 = OpTypeFunction %int %_ptr_Function_BinarySearchObject
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %50 = OpTypeFunction %void
-         %56 = OpConstantNull %BinarySearchObject
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-        %109 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out
-%binarySearch_struct_BinarySearchObject_i1_10_1_ = OpFunction %int None %12
-        %obj = OpFunctionParameter %_ptr_Function_BinarySearchObject
-         %21 = OpLabel
-          %m = OpVariable %_ptr_Function_int Function %24
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %31 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %32 = OpLoad %float %31
-         %34 = OpFOrdGreaterThan %bool %32 %float_1
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-               OpBranch %36
-         %38 = OpLabel
-               OpBranch %26
-         %36 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-               OpStore %m %41
-         %42 = OpLoad %int %m
-         %44 = OpAccessChain %_ptr_Function_int %obj %uint_0 %42
-         %45 = OpLoad %int %44
-         %47 = OpIEqual %bool %45 %int_1
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-               OpReturnValue %int_1
-         %48 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpBranch %25
-         %26 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %50
-         %53 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %24
-      %obj_1 = OpVariable %_ptr_Function_BinarySearchObject Function %56
-      %param = OpVariable %_ptr_Function_BinarySearchObject Function %56
-               OpStore %i %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpSLessThan %bool %63 %int_10
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-               OpBranch %66
-         %68 = OpLabel
-               OpBranch %60
-         %66 = OpLabel
-         %69 = OpLoad %int %i
-         %71 = OpINotEqual %bool %69 %int_3
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-         %74 = OpLoad %int %i
-         %75 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %76 = OpLoad %float %75
-         %77 = OpConvertFToS %int %76
-         %78 = OpISub %int %74 %77
-         %80 = OpIEqual %bool %78 %int_4
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %84 = OpLoad %int %i
-         %85 = OpAccessChain %_ptr_Function_int %obj_1 %uint_0 %84
-               OpStore %85 %int_11
-               OpBranch %81
-         %83 = OpLabel
-         %87 = OpLoad %int %i
-         %89 = OpIEqual %bool %87 %int_6
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpAccessChain %_ptr_Function_int %obj_1 %uint_0 %92
-               OpStore %93 %int_17
-               OpBranch %90
-         %90 = OpLabel
-               OpBranch %61
-         %81 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %95
-         %95 = OpLabel
-               OpLoopMerge %96 %97 None
-               OpBranch %98
-         %98 = OpLabel
-               OpBranch %97
-         %97 = OpLabel
-        %100 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %101 = OpLoad %float %100
-        %103 = OpFOrdGreaterThan %bool %float_0 %101
-               OpBranchConditional %103 %95 %96
-         %96 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-        %104 = OpLoad %int %i
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %i %105
-               OpBranch %59
-         %60 = OpLabel
-        %106 = OpLoad %BinarySearchObject %obj_1
-               OpStore %param %106
-        %107 = OpFunctionCall %int %binarySearch_struct_BinarySearchObject_i1_10_1_ %param
-               OpStore %x_GLF_color %109
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-        %113 = OpLabel
-        %114 = OpFunctionCall %void %main_1
-        %115 = OpLoad %v4float %x_GLF_color
-        %116 = OpCompositeConstruct %main_out %115
-               OpReturnValue %116
-               OpFunctionEnd
-       %main = OpFunction %void None %50
-        %118 = OpLabel
-        %119 = OpFunctionCall %main_out %main_inner
-        %120 = OpCompositeExtract %v4float %119 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.wgsl
deleted file mode 100644
index 9d9f80c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,92 +0,0 @@
-struct BinarySearchObject {
-  prime_numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn binarySearch_struct_BinarySearchObject_i1_10_1_(obj : ptr<function, BinarySearchObject>) -> i32 {
-  var m : i32;
-  loop {
-    let x_91 : f32 = x_8.injectionSwitch.x;
-    if ((x_91 > 1.0)) {
-    } else {
-      break;
-    }
-    let x_95 : f32 = x_8.injectionSwitch.x;
-    m = i32(x_95);
-    let x_14 : i32 = m;
-    let x_15 : i32 = (*(obj)).prime_numbers[x_14];
-    if ((x_15 == 1)) {
-      return 1;
-    }
-  }
-  return 1;
-}
-
-fn main_1() {
-  var i : i32;
-  var obj_1 : BinarySearchObject;
-  var param : BinarySearchObject;
-  i = 0;
-  loop {
-    let x_16 : i32 = i;
-    if ((x_16 < 10)) {
-    } else {
-      break;
-    }
-    let x_17 : i32 = i;
-    if ((x_17 != 3)) {
-      let x_18 : i32 = i;
-      let x_67 : f32 = x_8.injectionSwitch.x;
-      if (((x_18 - i32(x_67)) == 4)) {
-        let x_21 : i32 = i;
-        obj_1.prime_numbers[x_21] = 11;
-      } else {
-        let x_22 : i32 = i;
-        if ((x_22 == 6)) {
-          let x_23 : i32 = i;
-          obj_1.prime_numbers[x_23] = 17;
-        }
-        continue;
-      }
-    }
-    loop {
-
-      continuing {
-        let x_82 : f32 = x_8.injectionSwitch.y;
-        if ((0.0 > x_82)) {
-        } else {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      let x_24 : i32 = i;
-      i = (x_24 + 1);
-    }
-  }
-  let x_84 : BinarySearchObject = obj_1;
-  param = x_84;
-  let x_26 : i32 = binarySearch_struct_BinarySearchObject_i1_10_1_(&(param));
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.hlsl
deleted file mode 100644
index 1620108..0000000
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 f_mf22_(inout float2x2 m) {
-  while (true) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  float2x2 param = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 x_38_phi = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_34 = gl_FragCoord.x;
-  x_38_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  if ((x_34 >= 0.0f)) {
-    x_38_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
-  }
-  const float2x2 x_38 = x_38_phi;
-  param = mul(x_38, x_38);
-  const float3 x_40 = f_mf22_(param);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.msl
deleted file mode 100644
index 4b851a4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 f_mf22_(thread float2x2* const m) {
-  while (true) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2x2 param = float2x2(0.0f);
-  float2x2 x_38_phi = float2x2(0.0f);
-  float const x_34 = (*(tint_symbol_3)).x;
-  x_38_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  if ((x_34 >= 0.0f)) {
-    x_38_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
-  }
-  float2x2 const x_38 = x_38_phi;
-  param = (x_38 * x_38);
-  float3 const x_40 = f_mf22_(&(param));
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index dc4e412..0000000
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_mf22_ "f_mf22_"
-               OpName %m "m"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %x_38_phi "x_38_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v3float = OpTypeVector %float 3
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %11 = OpTypeFunction %v3float %_ptr_Function_mat2v2float
-    %float_1 = OpConstant %float 1
-         %24 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %26 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-         %32 = OpConstantNull %mat2v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-         %39 = OpConstantComposite %v2float %float_0 %float_0
-         %40 = OpConstantComposite %mat2v2float %39 %39
-       %bool = OpTypeBool
-         %45 = OpConstantComposite %v2float %float_1 %float_0
-         %46 = OpConstantComposite %v2float %float_0 %float_1
-         %47 = OpConstantComposite %mat2v2float %45 %46
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out %v4float
-    %f_mf22_ = OpFunction %v3float None %11
-          %m = OpFunctionParameter %_ptr_Function_mat2v2float
-         %18 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-               OpReturnValue %24
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpReturnValue %26
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-      %param = OpVariable %_ptr_Function_mat2v2float Function %32
-   %x_38_phi = OpVariable %_ptr_Function_mat2v2float Function %32
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-               OpStore %x_38_phi %40
-         %41 = OpFOrdGreaterThanEqual %bool %38 %float_0
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %43
-         %44 = OpLabel
-               OpStore %x_38_phi %47
-               OpBranch %43
-         %43 = OpLabel
-         %48 = OpLoad %mat2v2float %x_38_phi
-         %49 = OpMatrixTimesMatrix %mat2v2float %48 %48
-               OpStore %param %49
-         %50 = OpFunctionCall %v3float %f_mf22_ %param
-               OpStore %x_GLF_color %52
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %57 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-         %62 = OpLabel
-         %64 = OpLoad %v4float %gl_FragCoord_param_1
-         %63 = OpFunctionCall %main_out %main_inner %64
-         %65 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index ee6e11e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,37 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_mf22_(m : ptr<function, mat2x2<f32>>) -> vec3<f32> {
-  loop {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var param : mat2x2<f32>;
-  var x_38_phi : mat2x2<f32>;
-  let x_34 : f32 = gl_FragCoord.x;
-  x_38_phi = mat2x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  if ((x_34 >= 0.0)) {
-    x_38_phi = mat2x2<f32>(vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0));
-  }
-  let x_38 : mat2x2<f32> = x_38_phi;
-  param = (x_38 * x_38);
-  let x_40 : vec3<f32> = f_mf22_(&(param));
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.hlsl
deleted file mode 100644
index 1620108..0000000
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,48 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 f_mf22_(inout float2x2 m) {
-  while (true) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  float2x2 param = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  float2x2 x_38_phi = float2x2(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_34 = gl_FragCoord.x;
-  x_38_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  if ((x_34 >= 0.0f)) {
-    x_38_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
-  }
-  const float2x2 x_38 = x_38_phi;
-  param = mul(x_38, x_38);
-  const float3 x_40 = f_mf22_(param);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.msl
deleted file mode 100644
index 4b851a4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 f_mf22_(thread float2x2* const m) {
-  while (true) {
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2x2 param = float2x2(0.0f);
-  float2x2 x_38_phi = float2x2(0.0f);
-  float const x_34 = (*(tint_symbol_3)).x;
-  x_38_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
-  if ((x_34 >= 0.0f)) {
-    x_38_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
-  }
-  float2x2 const x_38 = x_38_phi;
-  param = (x_38 * x_38);
-  float3 const x_40 = f_mf22_(&(param));
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index dc4e412..0000000
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_mf22_ "f_mf22_"
-               OpName %m "m"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %x_38_phi "x_38_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v3float = OpTypeVector %float 3
-    %v2float = OpTypeVector %float 2
-%mat2v2float = OpTypeMatrix %v2float 2
-%_ptr_Function_mat2v2float = OpTypePointer Function %mat2v2float
-         %11 = OpTypeFunction %v3float %_ptr_Function_mat2v2float
-    %float_1 = OpConstant %float 1
-         %24 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-         %26 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-         %32 = OpConstantNull %mat2v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-         %39 = OpConstantComposite %v2float %float_0 %float_0
-         %40 = OpConstantComposite %mat2v2float %39 %39
-       %bool = OpTypeBool
-         %45 = OpConstantComposite %v2float %float_1 %float_0
-         %46 = OpConstantComposite %v2float %float_0 %float_1
-         %47 = OpConstantComposite %mat2v2float %45 %46
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out %v4float
-    %f_mf22_ = OpFunction %v3float None %11
-          %m = OpFunctionParameter %_ptr_Function_mat2v2float
-         %18 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-               OpReturnValue %24
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpReturnValue %26
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-      %param = OpVariable %_ptr_Function_mat2v2float Function %32
-   %x_38_phi = OpVariable %_ptr_Function_mat2v2float Function %32
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-               OpStore %x_38_phi %40
-         %41 = OpFOrdGreaterThanEqual %bool %38 %float_0
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %43
-         %44 = OpLabel
-               OpStore %x_38_phi %47
-               OpBranch %43
-         %43 = OpLabel
-         %48 = OpLoad %mat2v2float %x_38_phi
-         %49 = OpMatrixTimesMatrix %mat2v2float %48 %48
-               OpStore %param %49
-         %50 = OpFunctionCall %v3float %f_mf22_ %param
-               OpStore %x_GLF_color %52
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %57 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-         %62 = OpLabel
-         %64 = OpLoad %v4float %gl_FragCoord_param_1
-         %63 = OpFunctionCall %main_out %main_inner %64
-         %65 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index ee6e11e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/matrices-and-return-in-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,37 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_mf22_(m : ptr<function, mat2x2<f32>>) -> vec3<f32> {
-  loop {
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var param : mat2x2<f32>;
-  var x_38_phi : mat2x2<f32>;
-  let x_34 : f32 = gl_FragCoord.x;
-  x_38_phi = mat2x2<f32>(vec2<f32>(0.0, 0.0), vec2<f32>(0.0, 0.0));
-  if ((x_34 >= 0.0)) {
-    x_38_phi = mat2x2<f32>(vec2<f32>(1.0, 0.0), vec2<f32>(0.0, 1.0));
-  }
-  let x_38 : mat2x2<f32> = x_38_phi;
-  param = (x_38 * x_38);
-  let x_40 : vec3<f32> = f_mf22_(&(param));
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b2ec293..0000000
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 gv = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int temp = 0;
-  const float x_39 = asfloat(x_5[0].x);
-  if ((x_39 > 2.0f)) {
-    temp = int(max(lerp(float4(1.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), gv), float4(8.600000381f, 8.600000381f, 8.600000381f, 8.600000381f)).y);
-    if ((temp < 150)) {
-      discard;
-    }
-    if ((temp < 180)) {
-      discard;
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.msl
deleted file mode 100644
index ad8b9c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int temp = 0;
-  float const x_39 = x_5.injectionSwitch.x;
-  if ((x_39 > 2.0f)) {
-    float4 const x_8 = *(tint_symbol_3);
-    temp = int(fmax(mix(float4(1.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), x_8), float4(8.600000381f, 8.600000381f, 8.600000381f, 8.600000381f)).y);
-    int const x_44 = temp;
-    if ((x_44 < 150)) {
-      discard_fragment();
-    }
-    int const x_48 = temp;
-    if ((x_48 < 180)) {
-      discard_fragment();
-    }
-  }
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_5, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 7f1fb64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,109 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %gv "gv"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %temp "temp"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %gv = OpVariable %_ptr_Private_v4float Private %5
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %37 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%float_8_60000038 = OpConstant %float 8.60000038
-         %39 = OpConstantComposite %v4float %float_8_60000038 %float_8_60000038 %float_8_60000038 %float_8_60000038
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %20
-         %24 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %25 = OpLoad %float %24
-         %27 = OpFOrdGreaterThan %bool %25 %float_2
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
-         %31 = OpLoad %v4float %gv
-         %35 = OpExtInst %v4float %34 FMix %37 %37 %31
-         %33 = OpExtInst %v4float %34 NMax %35 %39
-         %40 = OpCompositeExtract %float %33 1
-         %32 = OpConvertFToS %int %40
-               OpStore %temp %32
-         %41 = OpLoad %int %temp
-         %43 = OpSLessThan %bool %41 %int_150
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpKill
-         %44 = OpLabel
-         %46 = OpLoad %int %temp
-         %48 = OpSLessThan %bool %46 %int_180
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-               OpKill
-         %49 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-               OpStore %x_GLF_color %52
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f4bf9c7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> gv : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var temp : i32;
-  let x_39 : f32 = x_5.injectionSwitch.x;
-  if ((x_39 > 2.0)) {
-    let x_8 : vec4<f32> = gv;
-    temp = i32(max(mix(vec4<f32>(1.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0), x_8), vec4<f32>(8.600000381, 8.600000381, 8.600000381, 8.600000381)).y);
-    let x_44 : i32 = temp;
-    if ((x_44 < 150)) {
-      discard;
-    }
-    let x_48 : i32 = temp;
-    if ((x_48 < 180)) {
-      discard;
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b2ec293..0000000
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 gv = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int temp = 0;
-  const float x_39 = asfloat(x_5[0].x);
-  if ((x_39 > 2.0f)) {
-    temp = int(max(lerp(float4(1.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), gv), float4(8.600000381f, 8.600000381f, 8.600000381f, 8.600000381f)).y);
-    if ((temp < 150)) {
-      discard;
-    }
-    if ((temp < 180)) {
-      discard;
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.msl
deleted file mode 100644
index ad8b9c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int temp = 0;
-  float const x_39 = x_5.injectionSwitch.x;
-  if ((x_39 > 2.0f)) {
-    float4 const x_8 = *(tint_symbol_3);
-    temp = int(fmax(mix(float4(1.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), x_8), float4(8.600000381f, 8.600000381f, 8.600000381f, 8.600000381f)).y);
-    int const x_44 = temp;
-    if ((x_44 < 150)) {
-      discard_fragment();
-    }
-    int const x_48 = temp;
-    if ((x_48 < 180)) {
-      discard_fragment();
-    }
-  }
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  main_1(x_5, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 7f1fb64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,109 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %gv "gv"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %temp "temp"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %gv = OpVariable %_ptr_Private_v4float Private %5
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %37 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%float_8_60000038 = OpConstant %float 8.60000038
-         %39 = OpConstantComposite %v4float %float_8_60000038 %float_8_60000038 %float_8_60000038 %float_8_60000038
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %53 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %20
-         %24 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %25 = OpLoad %float %24
-         %27 = OpFOrdGreaterThan %bool %25 %float_2
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
-         %31 = OpLoad %v4float %gv
-         %35 = OpExtInst %v4float %34 FMix %37 %37 %31
-         %33 = OpExtInst %v4float %34 NMax %35 %39
-         %40 = OpCompositeExtract %float %33 1
-         %32 = OpConvertFToS %int %40
-               OpStore %temp %32
-         %41 = OpLoad %int %temp
-         %43 = OpSLessThan %bool %41 %int_150
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpKill
-         %44 = OpLabel
-         %46 = OpLoad %int %temp
-         %48 = OpSLessThan %bool %46 %int_180
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-               OpKill
-         %49 = OpLabel
-               OpBranch %29
-         %29 = OpLabel
-               OpStore %x_GLF_color %52
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-         %56 = OpLabel
-         %57 = OpFunctionCall %void %main_1
-         %58 = OpLoad %v4float %x_GLF_color
-         %59 = OpCompositeConstruct %main_out %58
-               OpReturnValue %59
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %61 = OpLabel
-         %62 = OpFunctionCall %main_out %main_inner
-         %63 = OpCompositeExtract %v4float %62 0
-               OpStore %x_GLF_color_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f4bf9c7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/max-mix-conditional-discard/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> gv : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var temp : i32;
-  let x_39 : f32 = x_5.injectionSwitch.x;
-  if ((x_39 > 2.0)) {
-    let x_8 : vec4<f32> = gv;
-    temp = i32(max(mix(vec4<f32>(1.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0), x_8), vec4<f32>(8.600000381, 8.600000381, 8.600000381, 8.600000381)).y);
-    let x_44 : i32 = temp;
-    if ((x_44 < 150)) {
-      discard;
-    }
-    let x_48 : i32 = temp;
-    if ((x_48 < 180)) {
-      discard;
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1924e2c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 GLF_live6mand_() {
-  return lerp(asfloat(uint3(38730u, 63193u, 63173u)), float3(463.0f, 4.0f, 0.0f), float3(2.0f, 2.0f, 2.0f));
-}
-
-void main_1() {
-  const float3 x_27 = GLF_live6mand_();
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2417abe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 GLF_live6mand_() {
-  return mix(as_type<float3>(uint3(38730u, 63193u, 63173u)), float3(463.0f, 4.0f, 0.0f), float3(2.0f, 2.0f, 2.0f));
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float3 const x_27 = GLF_live6mand_();
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1337b9a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-         %13 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %GLF_live6mand_ "GLF_live6mand_"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
- %uint_38730 = OpConstant %uint 38730
- %uint_63193 = OpConstant %uint 63193
- %uint_63173 = OpConstant %uint 63173
-         %20 = OpConstantComposite %v3uint %uint_38730 %uint_63193 %uint_63173
-  %float_463 = OpConstant %float 463
-    %float_4 = OpConstant %float 4
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v3float %float_463 %float_4 %float_0
-    %float_2 = OpConstant %float 2
-         %26 = OpConstantComposite %v3float %float_2 %float_2 %float_2
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %34 = OpTypeFunction %main_out
-%GLF_live6mand_ = OpFunction %v3float None %8
-         %11 = OpLabel
-         %14 = OpBitcast %v3float %20
-         %12 = OpExtInst %v3float %13 FMix %14 %24 %26
-               OpReturnValue %12
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-         %31 = OpFunctionCall %v3float %GLF_live6mand_
-               OpStore %x_GLF_color %33
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %34
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-         %42 = OpLabel
-         %43 = OpFunctionCall %main_out %main_inner
-         %44 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %44
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 99c613e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn GLF_live6mand_() -> vec3<f32> {
-  return mix(bitcast<vec3<f32>>(vec3<u32>(38730u, 63193u, 63173u)), vec3<f32>(463.0, 4.0, 0.0), vec3<f32>(2.0, 2.0, 2.0));
-}
-
-fn main_1() {
-  let x_27 : vec3<f32> = GLF_live6mand_();
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1924e2c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 GLF_live6mand_() {
-  return lerp(asfloat(uint3(38730u, 63193u, 63173u)), float3(463.0f, 4.0f, 0.0f), float3(2.0f, 2.0f, 2.0f));
-}
-
-void main_1() {
-  const float3 x_27 = GLF_live6mand_();
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2417abe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 GLF_live6mand_() {
-  return mix(as_type<float3>(uint3(38730u, 63193u, 63173u)), float3(463.0f, 4.0f, 0.0f), float3(2.0f, 2.0f, 2.0f));
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float3 const x_27 = GLF_live6mand_();
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1337b9a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 45
-; Schema: 0
-               OpCapability Shader
-         %13 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %GLF_live6mand_ "GLF_live6mand_"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
- %uint_38730 = OpConstant %uint 38730
- %uint_63193 = OpConstant %uint 63193
- %uint_63173 = OpConstant %uint 63173
-         %20 = OpConstantComposite %v3uint %uint_38730 %uint_63193 %uint_63173
-  %float_463 = OpConstant %float 463
-    %float_4 = OpConstant %float 4
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v3float %float_463 %float_4 %float_0
-    %float_2 = OpConstant %float 2
-         %26 = OpConstantComposite %v3float %float_2 %float_2 %float_2
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %34 = OpTypeFunction %main_out
-%GLF_live6mand_ = OpFunction %v3float None %8
-         %11 = OpLabel
-         %14 = OpBitcast %v3float %20
-         %12 = OpExtInst %v3float %13 FMix %14 %24 %26
-               OpReturnValue %12
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-         %31 = OpFunctionCall %v3float %GLF_live6mand_
-               OpStore %x_GLF_color %33
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %34
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %main_1
-         %39 = OpLoad %v4float %x_GLF_color
-         %40 = OpCompositeConstruct %main_out %39
-               OpReturnValue %40
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-         %42 = OpLabel
-         %43 = OpFunctionCall %main_out %main_inner
-         %44 = OpCompositeExtract %v4float %43 0
-               OpStore %x_GLF_color_1_1 %44
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 99c613e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/mix-floor-add/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn GLF_live6mand_() -> vec3<f32> {
-  return mix(bitcast<vec3<f32>>(vec3<u32>(38730u, 63193u, 63173u)), vec3<f32>(463.0, 4.0, 0.0), vec3<f32>(2.0, 2.0, 2.0));
-}
-
-fn main_1() {
-  let x_27 : vec3<f32> = GLF_live6mand_();
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.hlsl
deleted file mode 100644
index d6635f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-SKIP: FAILED
-
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x4 m44 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int x_10_phi = 0;
-  m44 = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
-  x_10_phi = 0;
-  while (true) {
-    int x_9 = 0;
-    int x_11_phi = 0;
-    const int x_10 = x_10_phi;
-    if ((x_10 < 4)) {
-    } else {
-      break;
-    }
-    const float x_63 = gl_FragCoord.y;
-    if ((x_63 < 0.0f)) {
-      break;
-    }
-    x_11_phi = 0;
-    while (true) {
-      int x_8 = 0;
-      const int x_11 = x_11_phi;
-      if ((x_11 < 4)) {
-      } else {
-        break;
-      }
-      {
-        const float x_72 = asfloat(x_7[0].x);
-        const int x_73_save = x_10;
-        const int x_73_save_1 = x_11;
-        const float x_74 = m44[x_73_save][x_73_save_1];
-        set_float4(m44[x_73_save], x_73_save_1, (x_74 + x_72));
-        x_8 = (x_11 + 1);
-        x_11_phi = x_8;
-      }
-    }
-    {
-      x_9 = (x_10 + 1);
-      x_10_phi = x_9;
-    }
-  }
-  const float x_77 = m44[1].y;
-  float4 x_79_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_79_1.x = (x_77 - 6.0f);
-  const float4 x_79 = x_79_1;
-  const float x_81 = m44[2].z;
-  float4 x_83_1 = x_79;
-  x_83_1.w = (x_81 - 11.0f);
-  x_GLF_color = x_83_1;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_5 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x0000018B52EEB9C0(16,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.msl
deleted file mode 100644
index 63be284..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4x4 m44 = float4x4(0.0f);
-  int x_10_phi = 0;
-  m44 = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
-  x_10_phi = 0;
-  while (true) {
-    int x_9 = 0;
-    int x_11_phi = 0;
-    int const x_10 = x_10_phi;
-    if ((x_10 < 4)) {
-    } else {
-      break;
-    }
-    float const x_63 = (*(tint_symbol_3)).y;
-    if ((x_63 < 0.0f)) {
-      break;
-    }
-    x_11_phi = 0;
-    while (true) {
-      int x_8 = 0;
-      int const x_11 = x_11_phi;
-      if ((x_11 < 4)) {
-      } else {
-        break;
-      }
-      {
-        float const x_72 = x_7.one;
-        int const x_73_save = x_10;
-        int const x_73_save_1 = x_11;
-        float const x_74 = m44[x_73_save][x_73_save_1];
-        m44[x_73_save][x_73_save_1] = (x_74 + x_72);
-        x_8 = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-        x_11_phi = x_8;
-      }
-    }
-    {
-      x_9 = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-      x_10_phi = x_9;
-    }
-  }
-  float const x_77 = m44[1].y;
-  float4 x_79_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_79_1.x = (x_77 - 6.0f);
-  float4 const x_79 = x_79_1;
-  float const x_81 = m44[2].z;
-  float4 x_83_1 = x_79;
-  x_83_1.w = (x_81 - 11.0f);
-  float4 const x_83 = x_83_1;
-  *(tint_symbol_4) = x_83;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.spvasm
deleted file mode 100644
index b58d564..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,202 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 124
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m44 "m44"
-               OpName %x_10_phi "x_10_phi"
-               OpName %x_9 "x_9"
-               OpName %x_11_phi "x_11_phi"
-               OpName %x_8 "x_8"
-               OpName %x_79_1 "x_79_1"
-               OpName %x_83_1 "x_83_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %21 = OpConstantNull %mat4v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %30 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-    %float_5 = OpConstant %float 5
-    %float_6 = OpConstant %float 6
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-         %35 = OpConstantComposite %v4float %float_5 %float_6 %float_7 %float_8
-    %float_9 = OpConstant %float 9
-   %float_10 = OpConstant %float 10
-   %float_11 = OpConstant %float 11
-   %float_12 = OpConstant %float 12
-         %40 = OpConstantComposite %v4float %float_9 %float_10 %float_11 %float_12
-   %float_13 = OpConstant %float 13
-   %float_14 = OpConstant %float 14
-   %float_15 = OpConstant %float 15
-   %float_16 = OpConstant %float 16
-         %45 = OpConstantComposite %v4float %float_13 %float_14 %float_15 %float_16
-         %46 = OpConstantComposite %mat4v4float %30 %35 %40 %45
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-         %96 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-      %int_2 = OpConstant %int 2
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-   %main_out = OpTypeStruct %v4float
-        %111 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-        %m44 = OpVariable %_ptr_Function_mat4v4float Function %21
-   %x_10_phi = OpVariable %_ptr_Function_int Function %25
-        %x_9 = OpVariable %_ptr_Function_int Function %25
-   %x_11_phi = OpVariable %_ptr_Function_int Function %25
-        %x_8 = OpVariable %_ptr_Function_int Function %25
-     %x_79_1 = OpVariable %_ptr_Function_v4float Function %7
-     %x_83_1 = OpVariable %_ptr_Function_v4float Function %7
-               OpStore %m44 %46
-               OpStore %x_10_phi %int_0
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-         %54 = OpLoad %int %x_10_phi
-         %56 = OpSLessThan %bool %54 %int_4
-               OpSelectionMerge %58 None
-               OpBranchConditional %56 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %49
-         %58 = OpLabel
-         %64 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %65 = OpLoad %float %64
-         %67 = OpFOrdLessThan %bool %65 %float_0
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpBranch %49
-         %68 = OpLabel
-               OpStore %x_11_phi %int_0
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %75 = OpLoad %int %x_11_phi
-         %76 = OpSLessThan %bool %75 %int_4
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %71
-         %77 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %83 = OpLoad %float %82
-         %85 = OpAccessChain %_ptr_Function_float %m44 %54 %75
-         %86 = OpLoad %float %85
-         %87 = OpAccessChain %_ptr_Function_float %m44 %54 %75
-         %88 = OpFAdd %float %86 %83
-               OpStore %87 %88
-         %90 = OpIAdd %int %75 %int_1
-               OpStore %x_8 %90
-         %91 = OpLoad %int %x_8
-               OpStore %x_11_phi %91
-               OpBranch %70
-         %71 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-         %92 = OpIAdd %int %54 %int_1
-               OpStore %x_9 %92
-         %93 = OpLoad %int %x_9
-               OpStore %x_10_phi %93
-               OpBranch %48
-         %49 = OpLabel
-         %94 = OpAccessChain %_ptr_Function_float %m44 %int_1 %uint_1
-         %95 = OpLoad %float %94
-               OpStore %x_79_1 %96
-         %99 = OpAccessChain %_ptr_Function_float %x_79_1 %uint_0
-        %100 = OpFSub %float %95 %float_6
-               OpStore %99 %100
-        %101 = OpLoad %v4float %x_79_1
-        %104 = OpAccessChain %_ptr_Function_float %m44 %int_2 %uint_2
-        %105 = OpLoad %float %104
-               OpStore %x_83_1 %101
-        %108 = OpAccessChain %_ptr_Function_float %x_83_1 %uint_3
-        %109 = OpFSub %float %105 %float_11
-               OpStore %108 %109
-        %110 = OpLoad %v4float %x_83_1
-               OpStore %x_GLF_color %110
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %111
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %115 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %116 = OpFunctionCall %void %main_1
-        %117 = OpLoad %v4float %x_GLF_color
-        %118 = OpCompositeConstruct %main_out %117
-               OpReturnValue %118
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-        %120 = OpLabel
-        %122 = OpLoad %v4float %gl_FragCoord_param_1
-        %121 = OpFunctionCall %main_out %main_inner %122
-        %123 = OpCompositeExtract %v4float %121 0
-               OpStore %x_GLF_color_1_1 %123
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.wgsl
deleted file mode 100644
index 8f6639e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m44 : mat4x4<f32>;
-  var x_10_phi : i32;
-  m44 = mat4x4<f32>(vec4<f32>(1.0, 2.0, 3.0, 4.0), vec4<f32>(5.0, 6.0, 7.0, 8.0), vec4<f32>(9.0, 10.0, 11.0, 12.0), vec4<f32>(13.0, 14.0, 15.0, 16.0));
-  x_10_phi = 0;
-  loop {
-    var x_9 : i32;
-    var x_11_phi : i32;
-    let x_10 : i32 = x_10_phi;
-    if ((x_10 < 4)) {
-    } else {
-      break;
-    }
-    let x_63 : f32 = gl_FragCoord.y;
-    if ((x_63 < 0.0)) {
-      break;
-    }
-    x_11_phi = 0;
-    loop {
-      var x_8 : i32;
-      let x_11 : i32 = x_11_phi;
-      if ((x_11 < 4)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        let x_72 : f32 = x_7.one;
-        let x_73 : ptr<function, f32> = &(m44[x_10][x_11]);
-        let x_74 : f32 = *(x_73);
-        *(x_73) = (x_74 + x_72);
-        x_8 = (x_11 + 1);
-        x_11_phi = x_8;
-      }
-    }
-
-    continuing {
-      x_9 = (x_10 + 1);
-      x_10_phi = x_9;
-    }
-  }
-  let x_77 : f32 = m44[1].y;
-  var x_79_1 : vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  x_79_1.x = (x_77 - 6.0);
-  let x_79 : vec4<f32> = x_79_1;
-  let x_81 : f32 = m44[2].z;
-  var x_83_1 : vec4<f32> = x_79;
-  x_83_1.w = (x_81 - 11.0);
-  let x_83 : vec4<f32> = x_83_1;
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.hlsl
deleted file mode 100644
index 1ba4ded..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-SKIP: FAILED
-
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x4 m44 = float4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int x_10_phi = 0;
-  m44 = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
-  x_10_phi = 0;
-  while (true) {
-    int x_9 = 0;
-    int x_11_phi = 0;
-    const int x_10 = x_10_phi;
-    if ((x_10 < 4)) {
-    } else {
-      break;
-    }
-    const float x_63 = gl_FragCoord.y;
-    if ((x_63 < 0.0f)) {
-      break;
-    }
-    x_11_phi = 0;
-    while (true) {
-      int x_8 = 0;
-      const int x_11 = x_11_phi;
-      if ((x_11 < 4)) {
-      } else {
-        break;
-      }
-      {
-        const float x_72 = asfloat(x_7[0].x);
-        const int x_73_save = x_10;
-        const int x_73_save_1 = x_11;
-        const float x_74 = m44[x_73_save][x_73_save_1];
-        set_float4(m44[x_73_save], x_73_save_1, (x_74 + x_72));
-        x_8 = (x_11 + 1);
-        x_11_phi = x_8;
-      }
-    }
-    {
-      x_9 = (x_10 + 1);
-      x_10_phi = x_9;
-    }
-  }
-  const float x_77 = m44[1].y;
-  float4 x_79_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_79_1.x = (x_77 - 6.0f);
-  const float4 x_79 = x_79_1;
-  const float x_81 = m44[2].z;
-  float4 x_83_1 = x_79;
-  x_83_1.w = (x_81 - 11.0f);
-  x_GLF_color = x_83_1;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_5 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000002906756D530(16,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.msl
deleted file mode 100644
index 63be284..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.msl
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float one;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4x4 m44 = float4x4(0.0f);
-  int x_10_phi = 0;
-  m44 = float4x4(float4(1.0f, 2.0f, 3.0f, 4.0f), float4(5.0f, 6.0f, 7.0f, 8.0f), float4(9.0f, 10.0f, 11.0f, 12.0f), float4(13.0f, 14.0f, 15.0f, 16.0f));
-  x_10_phi = 0;
-  while (true) {
-    int x_9 = 0;
-    int x_11_phi = 0;
-    int const x_10 = x_10_phi;
-    if ((x_10 < 4)) {
-    } else {
-      break;
-    }
-    float const x_63 = (*(tint_symbol_3)).y;
-    if ((x_63 < 0.0f)) {
-      break;
-    }
-    x_11_phi = 0;
-    while (true) {
-      int x_8 = 0;
-      int const x_11 = x_11_phi;
-      if ((x_11 < 4)) {
-      } else {
-        break;
-      }
-      {
-        float const x_72 = x_7.one;
-        int const x_73_save = x_10;
-        int const x_73_save_1 = x_11;
-        float const x_74 = m44[x_73_save][x_73_save_1];
-        m44[x_73_save][x_73_save_1] = (x_74 + x_72);
-        x_8 = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-        x_11_phi = x_8;
-      }
-    }
-    {
-      x_9 = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-      x_10_phi = x_9;
-    }
-  }
-  float const x_77 = m44[1].y;
-  float4 x_79_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x_79_1.x = (x_77 - 6.0f);
-  float4 const x_79 = x_79_1;
-  float const x_81 = m44[2].z;
-  float4 x_83_1 = x_79;
-  x_83_1.w = (x_81 - 11.0f);
-  float4 const x_83 = x_83_1;
-  *(tint_symbol_4) = x_83;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.spvasm
deleted file mode 100644
index b58d564..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,202 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 124
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "one"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m44 "m44"
-               OpName %x_10_phi "x_10_phi"
-               OpName %x_9 "x_9"
-               OpName %x_11_phi "x_11_phi"
-               OpName %x_8 "x_8"
-               OpName %x_79_1 "x_79_1"
-               OpName %x_83_1 "x_83_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-%mat4v4float = OpTypeMatrix %v4float 4
-%_ptr_Function_mat4v4float = OpTypePointer Function %mat4v4float
-         %21 = OpConstantNull %mat4v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-    %float_4 = OpConstant %float 4
-         %30 = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
-    %float_5 = OpConstant %float 5
-    %float_6 = OpConstant %float 6
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-         %35 = OpConstantComposite %v4float %float_5 %float_6 %float_7 %float_8
-    %float_9 = OpConstant %float 9
-   %float_10 = OpConstant %float 10
-   %float_11 = OpConstant %float 11
-   %float_12 = OpConstant %float 12
-         %40 = OpConstantComposite %v4float %float_9 %float_10 %float_11 %float_12
-   %float_13 = OpConstant %float 13
-   %float_14 = OpConstant %float 14
-   %float_15 = OpConstant %float 15
-   %float_16 = OpConstant %float 16
-         %45 = OpConstantComposite %v4float %float_13 %float_14 %float_15 %float_16
-         %46 = OpConstantComposite %mat4v4float %30 %35 %40 %45
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-         %96 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-      %int_2 = OpConstant %int 2
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-   %main_out = OpTypeStruct %v4float
-        %111 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-        %m44 = OpVariable %_ptr_Function_mat4v4float Function %21
-   %x_10_phi = OpVariable %_ptr_Function_int Function %25
-        %x_9 = OpVariable %_ptr_Function_int Function %25
-   %x_11_phi = OpVariable %_ptr_Function_int Function %25
-        %x_8 = OpVariable %_ptr_Function_int Function %25
-     %x_79_1 = OpVariable %_ptr_Function_v4float Function %7
-     %x_83_1 = OpVariable %_ptr_Function_v4float Function %7
-               OpStore %m44 %46
-               OpStore %x_10_phi %int_0
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-         %54 = OpLoad %int %x_10_phi
-         %56 = OpSLessThan %bool %54 %int_4
-               OpSelectionMerge %58 None
-               OpBranchConditional %56 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %49
-         %58 = OpLabel
-         %64 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %65 = OpLoad %float %64
-         %67 = OpFOrdLessThan %bool %65 %float_0
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-               OpBranch %49
-         %68 = OpLabel
-               OpStore %x_11_phi %int_0
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %75 = OpLoad %int %x_11_phi
-         %76 = OpSLessThan %bool %75 %int_4
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-               OpBranch %77
-         %79 = OpLabel
-               OpBranch %71
-         %77 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-         %82 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0
-         %83 = OpLoad %float %82
-         %85 = OpAccessChain %_ptr_Function_float %m44 %54 %75
-         %86 = OpLoad %float %85
-         %87 = OpAccessChain %_ptr_Function_float %m44 %54 %75
-         %88 = OpFAdd %float %86 %83
-               OpStore %87 %88
-         %90 = OpIAdd %int %75 %int_1
-               OpStore %x_8 %90
-         %91 = OpLoad %int %x_8
-               OpStore %x_11_phi %91
-               OpBranch %70
-         %71 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-         %92 = OpIAdd %int %54 %int_1
-               OpStore %x_9 %92
-         %93 = OpLoad %int %x_9
-               OpStore %x_10_phi %93
-               OpBranch %48
-         %49 = OpLabel
-         %94 = OpAccessChain %_ptr_Function_float %m44 %int_1 %uint_1
-         %95 = OpLoad %float %94
-               OpStore %x_79_1 %96
-         %99 = OpAccessChain %_ptr_Function_float %x_79_1 %uint_0
-        %100 = OpFSub %float %95 %float_6
-               OpStore %99 %100
-        %101 = OpLoad %v4float %x_79_1
-        %104 = OpAccessChain %_ptr_Function_float %m44 %int_2 %uint_2
-        %105 = OpLoad %float %104
-               OpStore %x_83_1 %101
-        %108 = OpAccessChain %_ptr_Function_float %x_83_1 %uint_3
-        %109 = OpFSub %float %105 %float_11
-               OpStore %108 %109
-        %110 = OpLoad %v4float %x_83_1
-               OpStore %x_GLF_color %110
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %111
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %115 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %116 = OpFunctionCall %void %main_1
-        %117 = OpLoad %v4float %x_GLF_color
-        %118 = OpCompositeConstruct %main_out %117
-               OpReturnValue %118
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-        %120 = OpLabel
-        %122 = OpLoad %v4float %gl_FragCoord_param_1
-        %121 = OpFunctionCall %main_out %main_inner %122
-        %123 = OpCompositeExtract %v4float %121 0
-               OpStore %x_GLF_color_1_1 %123
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.wgsl
deleted file mode 100644
index 8f6639e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-break-mat-color/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,75 +0,0 @@
-[[block]]
-struct buf0 {
-  one : f32;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m44 : mat4x4<f32>;
-  var x_10_phi : i32;
-  m44 = mat4x4<f32>(vec4<f32>(1.0, 2.0, 3.0, 4.0), vec4<f32>(5.0, 6.0, 7.0, 8.0), vec4<f32>(9.0, 10.0, 11.0, 12.0), vec4<f32>(13.0, 14.0, 15.0, 16.0));
-  x_10_phi = 0;
-  loop {
-    var x_9 : i32;
-    var x_11_phi : i32;
-    let x_10 : i32 = x_10_phi;
-    if ((x_10 < 4)) {
-    } else {
-      break;
-    }
-    let x_63 : f32 = gl_FragCoord.y;
-    if ((x_63 < 0.0)) {
-      break;
-    }
-    x_11_phi = 0;
-    loop {
-      var x_8 : i32;
-      let x_11 : i32 = x_11_phi;
-      if ((x_11 < 4)) {
-      } else {
-        break;
-      }
-
-      continuing {
-        let x_72 : f32 = x_7.one;
-        let x_73 : ptr<function, f32> = &(m44[x_10][x_11]);
-        let x_74 : f32 = *(x_73);
-        *(x_73) = (x_74 + x_72);
-        x_8 = (x_11 + 1);
-        x_11_phi = x_8;
-      }
-    }
-
-    continuing {
-      x_9 = (x_10 + 1);
-      x_10_phi = x_9;
-    }
-  }
-  let x_77 : f32 = m44[1].y;
-  var x_79_1 : vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  x_79_1.x = (x_77 - 6.0);
-  let x_79 : vec4<f32> = x_79_1;
-  let x_81 : f32 = m44[2].z;
-  var x_83_1 : vec4<f32> = x_79;
-  x_83_1.w = (x_81 - 11.0);
-  let x_83 : vec4<f32> = x_83_1;
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 77e3171..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float nb_mod_f1_(inout float limit) {
-  int x_injected_loop_counter = 0;
-  int x_injected_loop_counter_1 = 0;
-  const float x_37 = limit;
-  if ((1.0f >= x_37)) {
-    return 1.0f;
-  }
-  x_injected_loop_counter = 0;
-  while (true) {
-    const bool x_42 = (0 < 2);
-    x_injected_loop_counter_1 = 0;
-    while (true) {
-      const bool x_47 = (0 < 1);
-      return 1.0f;
-    }
-  }
-  return 0.0f;
-}
-
-void main_1() {
-  float param = 0.0f;
-  const float x_34 = gl_FragCoord.x;
-  param = x_34;
-  const float x_35 = nb_mod_f1_(param);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.msl
deleted file mode 100644
index c2c4c60..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float nb_mod_f1_(thread float* const limit) {
-  int x_injected_loop_counter = 0;
-  int x_injected_loop_counter_1 = 0;
-  float const x_37 = *(limit);
-  if ((1.0f >= x_37)) {
-    return 1.0f;
-  }
-  x_injected_loop_counter = 0;
-  while (true) {
-    bool const x_42 = (0 < 2);
-    x_injected_loop_counter_1 = 0;
-    while (true) {
-      bool const x_47 = (0 < 1);
-      return 1.0f;
-    }
-  }
-  return 0.0f;
-}
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float param = 0.0f;
-  float const x_34 = (*(tint_symbol_3)).x;
-  param = x_34;
-  float const x_35 = nb_mod_f1_(&(param));
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c2763f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,120 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %nb_mod_f1_ "nb_mod_f1_"
-               OpName %limit "limit"
-               OpName %x_injected_loop_counter "x_injected_loop_counter"
-               OpName %x_injected_loop_counter_1 "x_injected_loop_counter_1"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %11 = OpTypeFunction %float %_ptr_Function_float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-       %void = OpTypeVoid
-         %42 = OpTypeFunction %void
-         %47 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-         %55 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out %v4float
- %nb_mod_f1_ = OpFunction %float None %11
-      %limit = OpFunctionParameter %_ptr_Function_float
-         %15 = OpLabel
-%x_injected_loop_counter = OpVariable %_ptr_Function_int Function %19
-%x_injected_loop_counter_1 = OpVariable %_ptr_Function_int Function %19
-         %22 = OpLoad %float %limit
-         %24 = OpFOrdGreaterThanEqual %bool %float_1 %22
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-               OpReturnValue %float_1
-         %26 = OpLabel
-               OpStore %x_injected_loop_counter %int_0
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %34 = OpSLessThan %bool %int_0 %int_2
-               OpStore %x_injected_loop_counter_1 %int_0
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %40 = OpSLessThan %bool %int_0 %int_1
-               OpReturnValue %float_1
-         %37 = OpLabel
-               OpBranch %35
-         %36 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-               OpBranch %29
-         %30 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %42
-         %45 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %47
-         %51 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %52 = OpLoad %float %51
-               OpStore %param %52
-         %53 = OpFunctionCall %float %nb_mod_f1_ %param
-               OpStore %x_GLF_color %55
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %60 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %42
-         %65 = OpLabel
-         %67 = OpLoad %v4float %gl_FragCoord_param_1
-         %66 = OpFunctionCall %main_out %main_inner %67
-         %68 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f37535c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn nb_mod_f1_(limit : ptr<function, f32>) -> f32 {
-  var x_injected_loop_counter : i32;
-  var x_injected_loop_counter_1 : i32;
-  let x_37 : f32 = *(limit);
-  if ((1.0 >= x_37)) {
-    return 1.0;
-  }
-  x_injected_loop_counter = 0;
-  loop {
-    let x_42 : bool = (0 < 2);
-    x_injected_loop_counter_1 = 0;
-    loop {
-      let x_47 : bool = (0 < 1);
-      return 1.0;
-    }
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var param : f32;
-  let x_34 : f32 = gl_FragCoord.x;
-  param = x_34;
-  let x_35 : f32 = nb_mod_f1_(&(param));
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 77e3171..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float nb_mod_f1_(inout float limit) {
-  int x_injected_loop_counter = 0;
-  int x_injected_loop_counter_1 = 0;
-  const float x_37 = limit;
-  if ((1.0f >= x_37)) {
-    return 1.0f;
-  }
-  x_injected_loop_counter = 0;
-  while (true) {
-    const bool x_42 = (0 < 2);
-    x_injected_loop_counter_1 = 0;
-    while (true) {
-      const bool x_47 = (0 < 1);
-      return 1.0f;
-    }
-  }
-  return 0.0f;
-}
-
-void main_1() {
-  float param = 0.0f;
-  const float x_34 = gl_FragCoord.x;
-  param = x_34;
-  const float x_35 = nb_mod_f1_(param);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.msl
deleted file mode 100644
index c2c4c60..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float nb_mod_f1_(thread float* const limit) {
-  int x_injected_loop_counter = 0;
-  int x_injected_loop_counter_1 = 0;
-  float const x_37 = *(limit);
-  if ((1.0f >= x_37)) {
-    return 1.0f;
-  }
-  x_injected_loop_counter = 0;
-  while (true) {
-    bool const x_42 = (0 < 2);
-    x_injected_loop_counter_1 = 0;
-    while (true) {
-      bool const x_47 = (0 < 1);
-      return 1.0f;
-    }
-  }
-  return 0.0f;
-}
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float param = 0.0f;
-  float const x_34 = (*(tint_symbol_3)).x;
-  param = x_34;
-  float const x_35 = nb_mod_f1_(&(param));
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c2763f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,120 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %nb_mod_f1_ "nb_mod_f1_"
-               OpName %limit "limit"
-               OpName %x_injected_loop_counter "x_injected_loop_counter"
-               OpName %x_injected_loop_counter_1 "x_injected_loop_counter_1"
-               OpName %main_1 "main_1"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %11 = OpTypeFunction %float %_ptr_Function_float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-       %void = OpTypeVoid
-         %42 = OpTypeFunction %void
-         %47 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-         %55 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out %v4float
- %nb_mod_f1_ = OpFunction %float None %11
-      %limit = OpFunctionParameter %_ptr_Function_float
-         %15 = OpLabel
-%x_injected_loop_counter = OpVariable %_ptr_Function_int Function %19
-%x_injected_loop_counter_1 = OpVariable %_ptr_Function_int Function %19
-         %22 = OpLoad %float %limit
-         %24 = OpFOrdGreaterThanEqual %bool %float_1 %22
-               OpSelectionMerge %26 None
-               OpBranchConditional %24 %27 %26
-         %27 = OpLabel
-               OpReturnValue %float_1
-         %26 = OpLabel
-               OpStore %x_injected_loop_counter %int_0
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %34 = OpSLessThan %bool %int_0 %int_2
-               OpStore %x_injected_loop_counter_1 %int_0
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %40 = OpSLessThan %bool %int_0 %int_1
-               OpReturnValue %float_1
-         %37 = OpLabel
-               OpBranch %35
-         %36 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-               OpBranch %29
-         %30 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %42
-         %45 = OpLabel
-      %param = OpVariable %_ptr_Function_float Function %47
-         %51 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %52 = OpLoad %float %51
-               OpStore %param %52
-         %53 = OpFunctionCall %float %nb_mod_f1_ %param
-               OpStore %x_GLF_color %55
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %60 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %42
-         %65 = OpLabel
-         %67 = OpLoad %v4float %gl_FragCoord_param_1
-         %66 = OpFunctionCall %main_out %main_inner %67
-         %68 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f37535c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-for-loops-with-return/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,43 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn nb_mod_f1_(limit : ptr<function, f32>) -> f32 {
-  var x_injected_loop_counter : i32;
-  var x_injected_loop_counter_1 : i32;
-  let x_37 : f32 = *(limit);
-  if ((1.0 >= x_37)) {
-    return 1.0;
-  }
-  x_injected_loop_counter = 0;
-  loop {
-    let x_42 : bool = (0 < 2);
-    x_injected_loop_counter_1 = 0;
-    loop {
-      let x_47 : bool = (0 < 1);
-      return 1.0;
-    }
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var param : f32;
-  let x_34 : f32 = gl_FragCoord.x;
-  param = x_34;
-  let x_35 : f32 = nb_mod_f1_(&(param));
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3fc97c4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      const float x_39 = asfloat(x_6[0].y);
-      if ((1.0f > x_39)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        if (true) {
-          return;
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5672d2d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_7 = i;
-    if ((x_7 < 10)) {
-    } else {
-      break;
-    }
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    float const x_39 = x_6.injectionSwitch.y;
-    if ((1.0f > x_39)) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      if (true) {
-        return;
-      }
-    }
-    {
-      int const x_8 = i;
-      i = as_type<int>((as_type<uint>(x_8) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d051634..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,115 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-         %35 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %51 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %19
-               OpStore %x_GLF_color %22
-               OpStore %i %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %i
-         %30 = OpSLessThan %bool %28 %int_10
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-               OpStore %x_GLF_color %35
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %41 = OpLoad %float %40
-         %42 = OpFOrdGreaterThan %bool %float_1 %41
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpStore %x_GLF_color %22
-               OpSelectionMerge %46 None
-               OpBranchConditional %true %47 %46
-         %47 = OpLabel
-               OpReturn
-         %46 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpIAdd %int %48 %int_1
-               OpStore %i %50
-               OpBranch %24
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %51
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %v4float %x_GLF_color
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %59 = OpLabel
-         %60 = OpFunctionCall %main_out %main_inner
-         %61 = OpCompositeExtract %v4float %60 0
-               OpStore %x_GLF_color_1_1 %61
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ac61d8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 0;
-  loop {
-    let x_7 : i32 = i;
-    if ((x_7 < 10)) {
-    } else {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    let x_39 : f32 = x_6.injectionSwitch.y;
-    if ((1.0 > x_39)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      if (true) {
-        return;
-      }
-    }
-
-    continuing {
-      let x_8 : i32 = i;
-      i = (x_8 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3fc97c4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      const float x_39 = asfloat(x_6[0].y);
-      if ((1.0f > x_39)) {
-        x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-        if (true) {
-          return;
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5672d2d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_7 = i;
-    if ((x_7 < 10)) {
-    } else {
-      break;
-    }
-    *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    float const x_39 = x_6.injectionSwitch.y;
-    if ((1.0f > x_39)) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      if (true) {
-        return;
-      }
-    }
-    {
-      int const x_8 = i;
-      i = as_type<int>((as_type<uint>(x_8) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d051634..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,115 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-         %35 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %51 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %19
-               OpStore %x_GLF_color %22
-               OpStore %i %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %28 = OpLoad %int %i
-         %30 = OpSLessThan %bool %28 %int_10
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpBranch %32
-         %34 = OpLabel
-               OpBranch %25
-         %32 = OpLabel
-               OpStore %x_GLF_color %35
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %41 = OpLoad %float %40
-         %42 = OpFOrdGreaterThan %bool %float_1 %41
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpStore %x_GLF_color %22
-               OpSelectionMerge %46 None
-               OpBranchConditional %true %47 %46
-         %47 = OpLabel
-               OpReturn
-         %46 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-               OpBranch %26
-         %26 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpIAdd %int %48 %int_1
-               OpStore %i %50
-               OpBranch %24
-         %25 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %51
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %v4float %x_GLF_color
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %59 = OpLabel
-         %60 = OpFunctionCall %main_out %main_inner
-         %61 = OpCompositeExtract %v4float %60 0
-               OpStore %x_GLF_color_1_1 %61
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ac61d8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-ifs-and-return-in-for-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 0;
-  loop {
-    let x_7 : i32 = i;
-    if ((x_7 < 10)) {
-    } else {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    let x_39 : f32 = x_6.injectionSwitch.y;
-    if ((1.0 > x_39)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      if (true) {
-        return;
-      }
-    }
-
-    continuing {
-      let x_8 : i32 = i;
-      i = (x_8 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.hlsl
deleted file mode 100644
index b6078ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,87 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int GLF_dead5cols = 0;
-  int GLF_dead5rows = 0;
-  int GLF_dead5c = 0;
-  int GLF_dead5r = 0;
-  int msb10 = 0;
-  float donor_replacementGLF_dead5sums[9] = (float[9])0;
-  i = 0;
-  while (true) {
-    const int x_45 = i;
-    const float x_47 = asfloat(x_6[0].x);
-    if ((x_45 >= int(x_47))) {
-      break;
-    }
-    const float x_53 = asfloat(x_6[0].y);
-    if ((0.0f > x_53)) {
-      GLF_dead5cols = 2;
-      {
-        for(; (GLF_dead5cols <= 4); GLF_dead5cols = (GLF_dead5cols + 1)) {
-          GLF_dead5rows = 2;
-          {
-            for(; (GLF_dead5rows <= 4); GLF_dead5rows = (GLF_dead5rows + 1)) {
-              GLF_dead5c = 0;
-              {
-                for(; (GLF_dead5c < GLF_dead5cols); GLF_dead5c = (GLF_dead5c + 1)) {
-                  GLF_dead5r = 0;
-                  {
-                    for(; (GLF_dead5r < GLF_dead5rows); GLF_dead5r = (GLF_dead5r + 1)) {
-                      switch(msb10) {
-                        case 1:
-                        case 8: {
-                          const int x_96 = (((msb10 >= 0) & (msb10 < 9)) ? msb10 : 0);
-                          const float x_98 = donor_replacementGLF_dead5sums[x_96];
-                          donor_replacementGLF_dead5sums[x_96] = (x_98 + 1.0f);
-                          break;
-                        }
-                        default: {
-                          break;
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-              msb10 = (msb10 + 1);
-            }
-          }
-        }
-      }
-    }
-    i = (i + 1);
-    {
-      if ((i < 200)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.msl
deleted file mode 100644
index bd797f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.msl
+++ /dev/null
@@ -1,130 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int GLF_dead5cols = 0;
-  int GLF_dead5rows = 0;
-  int GLF_dead5c = 0;
-  int GLF_dead5r = 0;
-  int msb10 = 0;
-  tint_array_wrapper donor_replacementGLF_dead5sums = {};
-  i = 0;
-  while (true) {
-    int const x_45 = i;
-    float const x_47 = x_6.injectionSwitch.x;
-    if ((x_45 >= int(x_47))) {
-      break;
-    }
-    float const x_53 = x_6.injectionSwitch.y;
-    if ((0.0f > x_53)) {
-      GLF_dead5cols = 2;
-      while (true) {
-        int const x_61 = GLF_dead5cols;
-        if ((x_61 <= 4)) {
-        } else {
-          break;
-        }
-        GLF_dead5rows = 2;
-        while (true) {
-          int const x_68 = GLF_dead5rows;
-          if ((x_68 <= 4)) {
-          } else {
-            break;
-          }
-          GLF_dead5c = 0;
-          while (true) {
-            int const x_75 = GLF_dead5c;
-            int const x_76 = GLF_dead5cols;
-            if ((x_75 < x_76)) {
-            } else {
-              break;
-            }
-            GLF_dead5r = 0;
-            while (true) {
-              int const x_83 = GLF_dead5r;
-              int const x_84 = GLF_dead5rows;
-              if ((x_83 < x_84)) {
-              } else {
-                break;
-              }
-              int const x_87 = msb10;
-              switch(x_87) {
-                case 1:
-                case 8: {
-                  int const x_90 = msb10;
-                  int const x_92 = msb10;
-                  int const x_95 = msb10;
-                  int const x_96 = select(0, x_95, ((x_90 >= 0) & (x_92 < 9)));
-                  float const x_98 = donor_replacementGLF_dead5sums.arr[x_96];
-                  donor_replacementGLF_dead5sums.arr[x_96] = (x_98 + 1.0f);
-                  break;
-                }
-                default: {
-                  break;
-                }
-              }
-              {
-                int const x_101 = GLF_dead5r;
-                GLF_dead5r = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_103 = GLF_dead5c;
-              GLF_dead5c = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-            }
-          }
-          int const x_105 = msb10;
-          msb10 = as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)));
-          {
-            int const x_107 = GLF_dead5rows;
-            GLF_dead5rows = as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_109 = GLF_dead5cols;
-          GLF_dead5cols = as_type<int>((as_type<uint>(x_109) + as_type<uint>(1)));
-        }
-      }
-    }
-    int const x_111 = i;
-    i = as_type<int>((as_type<uint>(x_111) + as_type<uint>(1)));
-    {
-      int const x_113 = i;
-      if ((x_113 < 200)) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.spvasm
deleted file mode 100644
index bb4a7b4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,243 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 139
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %GLF_dead5cols "GLF_dead5cols"
-               OpName %GLF_dead5rows "GLF_dead5rows"
-               OpName %GLF_dead5c "GLF_dead5c"
-               OpName %GLF_dead5r "GLF_dead5r"
-               OpName %msb10 "msb10"
-               OpName %donor_replacementGLF_dead5sums "donor_replacementGLF_dead5sums"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %30 = OpConstantNull %_arr_float_uint_9
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-      %int_9 = OpConstant %int 9
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-    %int_200 = OpConstant %int 200
-        %127 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %128 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %19
-%GLF_dead5cols = OpVariable %_ptr_Function_int Function %19
-%GLF_dead5rows = OpVariable %_ptr_Function_int Function %19
- %GLF_dead5c = OpVariable %_ptr_Function_int Function %19
- %GLF_dead5r = OpVariable %_ptr_Function_int Function %19
-      %msb10 = OpVariable %_ptr_Function_int Function %19
-%donor_replacementGLF_dead5sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %30
-               OpStore %i %int_0
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-         %42 = OpSGreaterThanEqual %bool %36 %41
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %44
-         %45 = OpLabel
-               OpBranch %33
-         %44 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %48 = OpLoad %float %47
-         %50 = OpFOrdGreaterThan %bool %float_0 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-               OpStore %GLF_dead5cols %int_2
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %58 = OpLoad %int %GLF_dead5cols
-         %60 = OpSLessThanEqual %bool %58 %int_4
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %55
-         %61 = OpLabel
-               OpStore %GLF_dead5rows %int_2
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %GLF_dead5rows
-         %69 = OpSLessThanEqual %bool %68 %int_4
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %65
-         %70 = OpLabel
-               OpStore %GLF_dead5c %int_0
-               OpBranch %73
-         %73 = OpLabel
-               OpLoopMerge %74 %75 None
-               OpBranch %76
-         %76 = OpLabel
-         %77 = OpLoad %int %GLF_dead5c
-         %78 = OpLoad %int %GLF_dead5cols
-         %79 = OpSLessThan %bool %77 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpBranch %80
-         %82 = OpLabel
-               OpBranch %74
-         %80 = OpLabel
-               OpStore %GLF_dead5r %int_0
-               OpBranch %83
-         %83 = OpLabel
-               OpLoopMerge %84 %85 None
-               OpBranch %86
-         %86 = OpLabel
-         %87 = OpLoad %int %GLF_dead5r
-         %88 = OpLoad %int %GLF_dead5rows
-         %89 = OpSLessThan %bool %87 %88
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %84
-         %90 = OpLabel
-         %93 = OpLoad %int %msb10
-               OpSelectionMerge %94 None
-               OpSwitch %93 %95 1 %96 8 %96
-         %96 = OpLabel
-         %97 = OpLoad %int %msb10
-         %98 = OpLoad %int %msb10
-         %99 = OpLoad %int %msb10
-        %101 = OpSGreaterThanEqual %bool %97 %int_0
-        %103 = OpSLessThan %bool %98 %int_9
-        %104 = OpLogicalAnd %bool %101 %103
-        %100 = OpSelect %int %104 %99 %int_0
-        %106 = OpAccessChain %_ptr_Function_float %donor_replacementGLF_dead5sums %100
-        %107 = OpLoad %float %106
-        %108 = OpAccessChain %_ptr_Function_float %donor_replacementGLF_dead5sums %100
-        %110 = OpFAdd %float %107 %float_1
-               OpStore %108 %110
-               OpBranch %94
-         %95 = OpLabel
-               OpBranch %94
-         %94 = OpLabel
-               OpBranch %85
-         %85 = OpLabel
-        %111 = OpLoad %int %GLF_dead5r
-        %113 = OpIAdd %int %111 %int_1
-               OpStore %GLF_dead5r %113
-               OpBranch %83
-         %84 = OpLabel
-               OpBranch %75
-         %75 = OpLabel
-        %114 = OpLoad %int %GLF_dead5c
-        %115 = OpIAdd %int %114 %int_1
-               OpStore %GLF_dead5c %115
-               OpBranch %73
-         %74 = OpLabel
-        %116 = OpLoad %int %msb10
-        %117 = OpIAdd %int %116 %int_1
-               OpStore %msb10 %117
-               OpBranch %66
-         %66 = OpLabel
-        %118 = OpLoad %int %GLF_dead5rows
-        %119 = OpIAdd %int %118 %int_1
-               OpStore %GLF_dead5rows %119
-               OpBranch %64
-         %65 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-        %120 = OpLoad %int %GLF_dead5cols
-        %121 = OpIAdd %int %120 %int_1
-               OpStore %GLF_dead5cols %121
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-        %122 = OpLoad %int %i
-        %123 = OpIAdd %int %122 %int_1
-               OpStore %i %123
-               OpBranch %34
-         %34 = OpLabel
-        %124 = OpLoad %int %i
-        %126 = OpSLessThan %bool %124 %int_200
-               OpBranchConditional %126 %32 %33
-         %33 = OpLabel
-               OpStore %x_GLF_color %127
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %128
-        %131 = OpLabel
-        %132 = OpFunctionCall %void %main_1
-        %133 = OpLoad %v4float %x_GLF_color
-        %134 = OpCompositeConstruct %main_out %133
-               OpReturnValue %134
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %136 = OpLabel
-        %137 = OpFunctionCall %main_out %main_inner
-        %138 = OpCompositeExtract %v4float %137 0
-               OpStore %x_GLF_color_1_1 %138
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.wgsl
deleted file mode 100644
index d1780a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,121 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var GLF_dead5cols : i32;
-  var GLF_dead5rows : i32;
-  var GLF_dead5c : i32;
-  var GLF_dead5r : i32;
-  var msb10 : i32;
-  var donor_replacementGLF_dead5sums : array<f32, 9>;
-  i = 0;
-  loop {
-    let x_45 : i32 = i;
-    let x_47 : f32 = x_6.injectionSwitch.x;
-    if ((x_45 >= i32(x_47))) {
-      break;
-    }
-    let x_53 : f32 = x_6.injectionSwitch.y;
-    if ((0.0 > x_53)) {
-      GLF_dead5cols = 2;
-      loop {
-        let x_61 : i32 = GLF_dead5cols;
-        if ((x_61 <= 4)) {
-        } else {
-          break;
-        }
-        GLF_dead5rows = 2;
-        loop {
-          let x_68 : i32 = GLF_dead5rows;
-          if ((x_68 <= 4)) {
-          } else {
-            break;
-          }
-          GLF_dead5c = 0;
-          loop {
-            let x_75 : i32 = GLF_dead5c;
-            let x_76 : i32 = GLF_dead5cols;
-            if ((x_75 < x_76)) {
-            } else {
-              break;
-            }
-            GLF_dead5r = 0;
-            loop {
-              let x_83 : i32 = GLF_dead5r;
-              let x_84 : i32 = GLF_dead5rows;
-              if ((x_83 < x_84)) {
-              } else {
-                break;
-              }
-              let x_87 : i32 = msb10;
-              switch(x_87) {
-                case 1, 8: {
-                  let x_90 : i32 = msb10;
-                  let x_92 : i32 = msb10;
-                  let x_95 : i32 = msb10;
-                  let x_96 : i32 = select(0, x_95, ((x_90 >= 0) & (x_92 < 9)));
-                  let x_98 : f32 = donor_replacementGLF_dead5sums[x_96];
-                  donor_replacementGLF_dead5sums[x_96] = (x_98 + 1.0);
-                }
-                default: {
-                }
-              }
-
-              continuing {
-                let x_101 : i32 = GLF_dead5r;
-                GLF_dead5r = (x_101 + 1);
-              }
-            }
-
-            continuing {
-              let x_103 : i32 = GLF_dead5c;
-              GLF_dead5c = (x_103 + 1);
-            }
-          }
-          let x_105 : i32 = msb10;
-          msb10 = (x_105 + 1);
-
-          continuing {
-            let x_107 : i32 = GLF_dead5rows;
-            GLF_dead5rows = (x_107 + 1);
-          }
-        }
-
-        continuing {
-          let x_109 : i32 = GLF_dead5cols;
-          GLF_dead5cols = (x_109 + 1);
-        }
-      }
-    }
-    let x_111 : i32 = i;
-    i = (x_111 + 1);
-
-    continuing {
-      let x_113 : i32 = i;
-      if ((x_113 < 200)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.hlsl
deleted file mode 100644
index bf551d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,91 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int GLF_dead5cols = 0;
-  int GLF_dead5rows = 0;
-  int GLF_dead5c = 0;
-  int GLF_dead5r = 0;
-  int msb10 = 0;
-  float donor_replacementGLF_dead5sums[9] = (float[9])0;
-  i = 0;
-  while (true) {
-    const int x_45 = i;
-    const float x_47 = asfloat(x_6[0].x);
-    if ((x_45 >= int(x_47))) {
-      break;
-    }
-    const float x_53 = asfloat(x_6[0].y);
-    if ((0.0f > x_53)) {
-      GLF_dead5cols = 2;
-      {
-        for(; (GLF_dead5cols <= 4); GLF_dead5cols = (GLF_dead5cols + 1)) {
-          GLF_dead5rows = 2;
-          {
-            for(; (GLF_dead5rows <= 4); GLF_dead5rows = (GLF_dead5rows + 1)) {
-              GLF_dead5c = 0;
-              {
-                for(; (GLF_dead5c < GLF_dead5cols); GLF_dead5c = (GLF_dead5c + 1)) {
-                  GLF_dead5r = 0;
-                  {
-                    for(; (GLF_dead5r < GLF_dead5rows); GLF_dead5r = (GLF_dead5r + 1)) {
-                      switch(msb10) {
-                        case 1:
-                        case 8: {
-                          bool tint_tmp = (msb10 >= 0);
-                          if (tint_tmp) {
-                            tint_tmp = (msb10 < 9);
-                          }
-                          const int x_96 = ((tint_tmp) ? msb10 : 0);
-                          const float x_98 = donor_replacementGLF_dead5sums[x_96];
-                          donor_replacementGLF_dead5sums[x_96] = (x_98 + 1.0f);
-                          break;
-                        }
-                        default: {
-                          break;
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-              msb10 = (msb10 + 1);
-            }
-          }
-        }
-      }
-    }
-    i = (i + 1);
-    {
-      if ((i < 200)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.msl
deleted file mode 100644
index 5eec8a9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.msl
+++ /dev/null
@@ -1,130 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int GLF_dead5cols = 0;
-  int GLF_dead5rows = 0;
-  int GLF_dead5c = 0;
-  int GLF_dead5r = 0;
-  int msb10 = 0;
-  tint_array_wrapper donor_replacementGLF_dead5sums = {};
-  i = 0;
-  while (true) {
-    int const x_45 = i;
-    float const x_47 = x_6.injectionSwitch.x;
-    if ((x_45 >= int(x_47))) {
-      break;
-    }
-    float const x_53 = x_6.injectionSwitch.y;
-    if ((0.0f > x_53)) {
-      GLF_dead5cols = 2;
-      while (true) {
-        int const x_61 = GLF_dead5cols;
-        if ((x_61 <= 4)) {
-        } else {
-          break;
-        }
-        GLF_dead5rows = 2;
-        while (true) {
-          int const x_68 = GLF_dead5rows;
-          if ((x_68 <= 4)) {
-          } else {
-            break;
-          }
-          GLF_dead5c = 0;
-          while (true) {
-            int const x_75 = GLF_dead5c;
-            int const x_76 = GLF_dead5cols;
-            if ((x_75 < x_76)) {
-            } else {
-              break;
-            }
-            GLF_dead5r = 0;
-            while (true) {
-              int const x_83 = GLF_dead5r;
-              int const x_84 = GLF_dead5rows;
-              if ((x_83 < x_84)) {
-              } else {
-                break;
-              }
-              int const x_87 = msb10;
-              switch(x_87) {
-                case 1:
-                case 8: {
-                  int const x_90 = msb10;
-                  int const x_92 = msb10;
-                  int const x_95 = msb10;
-                  int const x_96 = select(0, x_95, ((x_90 >= 0) && (x_92 < 9)));
-                  float const x_98 = donor_replacementGLF_dead5sums.arr[x_96];
-                  donor_replacementGLF_dead5sums.arr[x_96] = (x_98 + 1.0f);
-                  break;
-                }
-                default: {
-                  break;
-                }
-              }
-              {
-                int const x_101 = GLF_dead5r;
-                GLF_dead5r = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-              }
-            }
-            {
-              int const x_103 = GLF_dead5c;
-              GLF_dead5c = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-            }
-          }
-          int const x_105 = msb10;
-          msb10 = as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)));
-          {
-            int const x_107 = GLF_dead5rows;
-            GLF_dead5rows = as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_109 = GLF_dead5cols;
-          GLF_dead5cols = as_type<int>((as_type<uint>(x_109) + as_type<uint>(1)));
-        }
-      }
-    }
-    int const x_111 = i;
-    i = as_type<int>((as_type<uint>(x_111) + as_type<uint>(1)));
-    {
-      int const x_113 = i;
-      if ((x_113 < 200)) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.spvasm
deleted file mode 100644
index 1a033ac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,248 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 141
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %GLF_dead5cols "GLF_dead5cols"
-               OpName %GLF_dead5rows "GLF_dead5rows"
-               OpName %GLF_dead5c "GLF_dead5c"
-               OpName %GLF_dead5r "GLF_dead5r"
-               OpName %msb10 "msb10"
-               OpName %donor_replacementGLF_dead5sums "donor_replacementGLF_dead5sums"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %30 = OpConstantNull %_arr_float_uint_9
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-      %int_9 = OpConstant %int 9
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-    %int_200 = OpConstant %int 200
-        %129 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %130 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %19
-%GLF_dead5cols = OpVariable %_ptr_Function_int Function %19
-%GLF_dead5rows = OpVariable %_ptr_Function_int Function %19
- %GLF_dead5c = OpVariable %_ptr_Function_int Function %19
- %GLF_dead5r = OpVariable %_ptr_Function_int Function %19
-      %msb10 = OpVariable %_ptr_Function_int Function %19
-%donor_replacementGLF_dead5sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %30
-               OpStore %i %int_0
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-         %42 = OpSGreaterThanEqual %bool %36 %41
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %44
-         %45 = OpLabel
-               OpBranch %33
-         %44 = OpLabel
-         %47 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %48 = OpLoad %float %47
-         %50 = OpFOrdGreaterThan %bool %float_0 %48
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-               OpStore %GLF_dead5cols %int_2
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %58 = OpLoad %int %GLF_dead5cols
-         %60 = OpSLessThanEqual %bool %58 %int_4
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %55
-         %61 = OpLabel
-               OpStore %GLF_dead5rows %int_2
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %GLF_dead5rows
-         %69 = OpSLessThanEqual %bool %68 %int_4
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %65
-         %70 = OpLabel
-               OpStore %GLF_dead5c %int_0
-               OpBranch %73
-         %73 = OpLabel
-               OpLoopMerge %74 %75 None
-               OpBranch %76
-         %76 = OpLabel
-         %77 = OpLoad %int %GLF_dead5c
-         %78 = OpLoad %int %GLF_dead5cols
-         %79 = OpSLessThan %bool %77 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-               OpBranch %80
-         %82 = OpLabel
-               OpBranch %74
-         %80 = OpLabel
-               OpStore %GLF_dead5r %int_0
-               OpBranch %83
-         %83 = OpLabel
-               OpLoopMerge %84 %85 None
-               OpBranch %86
-         %86 = OpLabel
-         %87 = OpLoad %int %GLF_dead5r
-         %88 = OpLoad %int %GLF_dead5rows
-         %89 = OpSLessThan %bool %87 %88
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %84
-         %90 = OpLabel
-         %93 = OpLoad %int %msb10
-               OpSelectionMerge %94 None
-               OpSwitch %93 %95 1 %96 8 %96
-         %96 = OpLabel
-         %97 = OpLoad %int %msb10
-         %98 = OpLoad %int %msb10
-         %99 = OpLoad %int %msb10
-        %101 = OpSGreaterThanEqual %bool %97 %int_0
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %105 = OpSLessThan %bool %98 %int_9
-               OpBranch %102
-        %102 = OpLabel
-        %106 = OpPhi %bool %101 %96 %105 %103
-        %100 = OpSelect %int %106 %99 %int_0
-        %108 = OpAccessChain %_ptr_Function_float %donor_replacementGLF_dead5sums %100
-        %109 = OpLoad %float %108
-        %110 = OpAccessChain %_ptr_Function_float %donor_replacementGLF_dead5sums %100
-        %112 = OpFAdd %float %109 %float_1
-               OpStore %110 %112
-               OpBranch %94
-         %95 = OpLabel
-               OpBranch %94
-         %94 = OpLabel
-               OpBranch %85
-         %85 = OpLabel
-        %113 = OpLoad %int %GLF_dead5r
-        %115 = OpIAdd %int %113 %int_1
-               OpStore %GLF_dead5r %115
-               OpBranch %83
-         %84 = OpLabel
-               OpBranch %75
-         %75 = OpLabel
-        %116 = OpLoad %int %GLF_dead5c
-        %117 = OpIAdd %int %116 %int_1
-               OpStore %GLF_dead5c %117
-               OpBranch %73
-         %74 = OpLabel
-        %118 = OpLoad %int %msb10
-        %119 = OpIAdd %int %118 %int_1
-               OpStore %msb10 %119
-               OpBranch %66
-         %66 = OpLabel
-        %120 = OpLoad %int %GLF_dead5rows
-        %121 = OpIAdd %int %120 %int_1
-               OpStore %GLF_dead5rows %121
-               OpBranch %64
-         %65 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-        %122 = OpLoad %int %GLF_dead5cols
-        %123 = OpIAdd %int %122 %int_1
-               OpStore %GLF_dead5cols %123
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-        %124 = OpLoad %int %i
-        %125 = OpIAdd %int %124 %int_1
-               OpStore %i %125
-               OpBranch %34
-         %34 = OpLabel
-        %126 = OpLoad %int %i
-        %128 = OpSLessThan %bool %126 %int_200
-               OpBranchConditional %128 %32 %33
-         %33 = OpLabel
-               OpStore %x_GLF_color %129
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %130
-        %133 = OpLabel
-        %134 = OpFunctionCall %void %main_1
-        %135 = OpLoad %v4float %x_GLF_color
-        %136 = OpCompositeConstruct %main_out %135
-               OpReturnValue %136
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %138 = OpLabel
-        %139 = OpFunctionCall %main_out %main_inner
-        %140 = OpCompositeExtract %v4float %139 0
-               OpStore %x_GLF_color_1_1 %140
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.wgsl
deleted file mode 100644
index 31f3f0e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-loops-switch/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,121 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var GLF_dead5cols : i32;
-  var GLF_dead5rows : i32;
-  var GLF_dead5c : i32;
-  var GLF_dead5r : i32;
-  var msb10 : i32;
-  var donor_replacementGLF_dead5sums : array<f32, 9>;
-  i = 0;
-  loop {
-    let x_45 : i32 = i;
-    let x_47 : f32 = x_6.injectionSwitch.x;
-    if ((x_45 >= i32(x_47))) {
-      break;
-    }
-    let x_53 : f32 = x_6.injectionSwitch.y;
-    if ((0.0 > x_53)) {
-      GLF_dead5cols = 2;
-      loop {
-        let x_61 : i32 = GLF_dead5cols;
-        if ((x_61 <= 4)) {
-        } else {
-          break;
-        }
-        GLF_dead5rows = 2;
-        loop {
-          let x_68 : i32 = GLF_dead5rows;
-          if ((x_68 <= 4)) {
-          } else {
-            break;
-          }
-          GLF_dead5c = 0;
-          loop {
-            let x_75 : i32 = GLF_dead5c;
-            let x_76 : i32 = GLF_dead5cols;
-            if ((x_75 < x_76)) {
-            } else {
-              break;
-            }
-            GLF_dead5r = 0;
-            loop {
-              let x_83 : i32 = GLF_dead5r;
-              let x_84 : i32 = GLF_dead5rows;
-              if ((x_83 < x_84)) {
-              } else {
-                break;
-              }
-              let x_87 : i32 = msb10;
-              switch(x_87) {
-                case 1, 8: {
-                  let x_90 : i32 = msb10;
-                  let x_92 : i32 = msb10;
-                  let x_95 : i32 = msb10;
-                  let x_96 : i32 = select(0, x_95, ((x_90 >= 0) && (x_92 < 9)));
-                  let x_98 : f32 = donor_replacementGLF_dead5sums[x_96];
-                  donor_replacementGLF_dead5sums[x_96] = (x_98 + 1.0);
-                }
-                default: {
-                }
-              }
-
-              continuing {
-                let x_101 : i32 = GLF_dead5r;
-                GLF_dead5r = (x_101 + 1);
-              }
-            }
-
-            continuing {
-              let x_103 : i32 = GLF_dead5c;
-              GLF_dead5c = (x_103 + 1);
-            }
-          }
-          let x_105 : i32 = msb10;
-          msb10 = (x_105 + 1);
-
-          continuing {
-            let x_107 : i32 = GLF_dead5rows;
-            GLF_dead5rows = (x_107 + 1);
-          }
-        }
-
-        continuing {
-          let x_109 : i32 = GLF_dead5cols;
-          GLF_dead5cols = (x_109 + 1);
-        }
-      }
-    }
-    let x_111 : i32 = i;
-    i = (x_111 + 1);
-
-    continuing {
-      let x_113 : i32 = i;
-      if ((x_113 < 200)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3bd8cb6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  const float x_30 = asfloat(x_6[0].x);
-  switch(int(x_30)) {
-    case 0: {
-      switch(1) {
-        case 1: {
-          const float x_38 = gl_FragCoord.y;
-          if ((x_38 >= 0.0f)) {
-            x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-            break;
-          }
-          discard;
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 42: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0fd49c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  float const x_30 = x_6.injectionSwitch.x;
-  switch(int(x_30)) {
-    case 0: {
-      switch(1) {
-        case 1: {
-          float const x_38 = (*(tint_symbol_4)).y;
-          if ((x_38 >= 0.0f)) {
-            *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-            break;
-          }
-          discard_fragment();
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-      /* fallthrough */
-    }
-    case 42: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index aeb1b95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,110 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-       %bool = OpTypeBool
-         %45 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %46 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-               OpStore %x_GLF_color %21
-         %25 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpConvertFToS %int %26
-               OpSelectionMerge %27 None
-               OpSwitch %28 %30 0 %31 42 %32
-         %31 = OpLabel
-               OpSelectionMerge %33 None
-               OpSwitch %int_1 %35 1 %36
-         %36 = OpLabel
-         %39 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %40 = OpLoad %float %39
-         %41 = OpFOrdGreaterThanEqual %bool %40 %float_0
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %43
-         %44 = OpLabel
-               OpStore %x_GLF_color %45
-               OpBranch %33
-         %43 = OpLabel
-               OpKill
-         %35 = OpLabel
-               OpBranch %33
-         %33 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-               OpBranch %27
-         %30 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %46
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %50 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %x_GLF_color
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %55 = OpLabel
-         %57 = OpLoad %v4float %gl_FragCoord_param_1
-         %56 = OpFunctionCall %main_out %main_inner %57
-         %58 = OpCompositeExtract %v4float %56 0
-               OpStore %x_GLF_color_1_1 %58
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 44294d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  let x_30 : f32 = x_6.injectionSwitch.x;
-  switch(i32(x_30)) {
-    case 0: {
-      switch(1) {
-        case 1: {
-          let x_38 : f32 = gl_FragCoord.y;
-          if ((x_38 >= 0.0)) {
-            x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-            break;
-          }
-          discard;
-        }
-        default: {
-        }
-      }
-      fallthrough;
-    }
-    case 42: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3bd8cb6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  const float x_30 = asfloat(x_6[0].x);
-  switch(int(x_30)) {
-    case 0: {
-      switch(1) {
-        case 1: {
-          const float x_38 = gl_FragCoord.y;
-          if ((x_38 >= 0.0f)) {
-            x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-            break;
-          }
-          discard;
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-      /* fallthrough */
-      {
-      }
-      break;
-    }
-    case 42: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0fd49c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  float const x_30 = x_6.injectionSwitch.x;
-  switch(int(x_30)) {
-    case 0: {
-      switch(1) {
-        case 1: {
-          float const x_38 = (*(tint_symbol_4)).y;
-          if ((x_38 >= 0.0f)) {
-            *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-            break;
-          }
-          discard_fragment();
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-      /* fallthrough */
-    }
-    case 42: {
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index aeb1b95..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,110 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 59
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-       %bool = OpTypeBool
-         %45 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %46 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-               OpStore %x_GLF_color %21
-         %25 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %26 = OpLoad %float %25
-         %28 = OpConvertFToS %int %26
-               OpSelectionMerge %27 None
-               OpSwitch %28 %30 0 %31 42 %32
-         %31 = OpLabel
-               OpSelectionMerge %33 None
-               OpSwitch %int_1 %35 1 %36
-         %36 = OpLabel
-         %39 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %40 = OpLoad %float %39
-         %41 = OpFOrdGreaterThanEqual %bool %40 %float_0
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %43
-         %44 = OpLabel
-               OpStore %x_GLF_color %45
-               OpBranch %33
-         %43 = OpLabel
-               OpKill
-         %35 = OpLabel
-               OpBranch %33
-         %33 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-               OpBranch %27
-         %30 = OpLabel
-               OpBranch %27
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %46
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %50 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %51 = OpFunctionCall %void %main_1
-         %52 = OpLoad %v4float %x_GLF_color
-         %53 = OpCompositeConstruct %main_out %52
-               OpReturnValue %53
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %55 = OpLabel
-         %57 = OpLoad %v4float %gl_FragCoord_param_1
-         %56 = OpFunctionCall %main_out %main_inner %57
-         %58 = OpCompositeExtract %v4float %56 0
-               OpStore %x_GLF_color_1_1 %58
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 44294d2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/nested-switch-break-discard/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  let x_30 : f32 = x_6.injectionSwitch.x;
-  switch(i32(x_30)) {
-    case 0: {
-      switch(1) {
-        case 1: {
-          let x_38 : f32 = gl_FragCoord.y;
-          if ((x_38 >= 0.0)) {
-            x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-            break;
-          }
-          discard;
-        }
-        default: {
-        }
-      }
-      fallthrough;
-    }
-    case 42: {
-    }
-    default: {
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4d40d34..0000000
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  int x_10[1] = (int[1])0;
-  int x_9[1] = (int[1])0;
-  int x_7 = 0;
-  int x_11_phi = 0;
-  const int x_6 = asint(x_5[0].x);
-  x_9[0] = x_6;
-  x_10 = x_9;
-  x_7 = x_9[0];
-  switch(0u) {
-    default: {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      const int x_8 = x_10[0];
-      if ((x_8 == asint(x_7))) {
-        x_11_phi = 1;
-        break;
-      }
-      x_11_phi = 2;
-      break;
-    }
-  }
-  if ((x_11_phi == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.msl
deleted file mode 100644
index d0d0597..0000000
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  tint_array_wrapper x_10 = {};
-  tint_array_wrapper x_9 = {};
-  int x_7 = 0;
-  int x_11_phi = 0;
-  int const x_6 = x_5.zero;
-  x_9.arr[0] = x_6;
-  tint_array_wrapper const x_37 = x_9;
-  x_10 = x_37;
-  x_7 = x_9.arr[0];
-  switch(0u) {
-    default: {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      int const x_8 = x_10.arr[0];
-      if ((x_8 == as_type<int>(x_7))) {
-        x_11_phi = 1;
-        break;
-      }
-      x_11_phi = 2;
-      break;
-    }
-  }
-  int const x_11 = x_11_phi;
-  if ((x_11 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 63448fe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_10 "x_10"
-               OpName %x_9 "x_9"
-               OpName %x_7 "x_7"
-               OpName %x_11_phi "x_11_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Function__arr_int_uint_1 = OpTypePointer Function %_arr_int_uint_1
-         %21 = OpConstantNull %_arr_int_uint_1
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_10 = OpVariable %_ptr_Function__arr_int_uint_1 Function %21
-        %x_9 = OpVariable %_ptr_Function__arr_int_uint_1 Function %21
-        %x_7 = OpVariable %_ptr_Function_int Function %25
-   %x_11_phi = OpVariable %_ptr_Function_int Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Function_int %x_9 %int_0
-               OpStore %32 %30
-         %33 = OpLoad %_arr_int_uint_1 %x_9
-               OpStore %x_10 %33
-         %34 = OpAccessChain %_ptr_Function_int %x_9 %int_0
-         %35 = OpLoad %int %34
-               OpStore %x_7 %35
-               OpSelectionMerge %36 None
-               OpSwitch %uint_0 %37
-         %37 = OpLabel
-               OpStore %x_GLF_color %39
-         %40 = OpAccessChain %_ptr_Function_int %x_10 %int_0
-         %41 = OpLoad %int %40
-         %43 = OpLoad %int %x_7
-         %42 = OpCopyObject %int %43
-         %44 = OpIEqual %bool %41 %42
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %46
-         %47 = OpLabel
-               OpStore %x_11_phi %int_1
-               OpBranch %36
-         %46 = OpLabel
-               OpStore %x_11_phi %int_2
-               OpBranch %36
-         %36 = OpLabel
-         %50 = OpLoad %int %x_11_phi
-         %51 = OpIEqual %bool %50 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %52
-         %54 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %52
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 62409af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_10 : array<i32, 1>;
-  var x_9 : array<i32, 1>;
-  var x_7 : i32;
-  var x_11_phi : i32;
-  let x_6 : i32 = x_5.zero;
-  x_9[0] = x_6;
-  let x_37 : array<i32, 1> = x_9;
-  x_10 = x_37;
-  x_7 = x_9[0];
-  switch(0u) {
-    default: {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      let x_8 : i32 = x_10[0];
-      if ((x_8 == bitcast<i32>(x_7))) {
-        x_11_phi = 1;
-        break;
-      }
-      x_11_phi = 2;
-    }
-  }
-  let x_11 : i32 = x_11_phi;
-  if ((x_11 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4d40d34..0000000
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,53 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  int x_10[1] = (int[1])0;
-  int x_9[1] = (int[1])0;
-  int x_7 = 0;
-  int x_11_phi = 0;
-  const int x_6 = asint(x_5[0].x);
-  x_9[0] = x_6;
-  x_10 = x_9;
-  x_7 = x_9[0];
-  switch(0u) {
-    default: {
-      x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      const int x_8 = x_10[0];
-      if ((x_8 == asint(x_7))) {
-        x_11_phi = 1;
-        break;
-      }
-      x_11_phi = 2;
-      break;
-    }
-  }
-  if ((x_11_phi == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.msl
deleted file mode 100644
index d0d0597..0000000
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int zero;
-};
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  tint_array_wrapper x_10 = {};
-  tint_array_wrapper x_9 = {};
-  int x_7 = 0;
-  int x_11_phi = 0;
-  int const x_6 = x_5.zero;
-  x_9.arr[0] = x_6;
-  tint_array_wrapper const x_37 = x_9;
-  x_10 = x_37;
-  x_7 = x_9.arr[0];
-  switch(0u) {
-    default: {
-      *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      int const x_8 = x_10.arr[0];
-      if ((x_8 == as_type<int>(x_7))) {
-        x_11_phi = 1;
-        break;
-      }
-      x_11_phi = 2;
-      break;
-    }
-  }
-  int const x_11 = x_11_phi;
-  if ((x_11 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 63448fe..0000000
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %x_10 "x_10"
-               OpName %x_9 "x_9"
-               OpName %x_7 "x_7"
-               OpName %x_11_phi "x_11_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Function__arr_int_uint_1 = OpTypePointer Function %_arr_int_uint_1
-         %21 = OpConstantNull %_arr_int_uint_1
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-      %int_0 = OpConstant %int 0
-    %float_0 = OpConstant %float 0
-         %39 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-    %float_1 = OpConstant %float 1
-         %56 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %57 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_10 = OpVariable %_ptr_Function__arr_int_uint_1 Function %21
-        %x_9 = OpVariable %_ptr_Function__arr_int_uint_1 Function %21
-        %x_7 = OpVariable %_ptr_Function_int Function %25
-   %x_11_phi = OpVariable %_ptr_Function_int Function %25
-         %29 = OpAccessChain %_ptr_Uniform_int %x_5 %uint_0
-         %30 = OpLoad %int %29
-         %32 = OpAccessChain %_ptr_Function_int %x_9 %int_0
-               OpStore %32 %30
-         %33 = OpLoad %_arr_int_uint_1 %x_9
-               OpStore %x_10 %33
-         %34 = OpAccessChain %_ptr_Function_int %x_9 %int_0
-         %35 = OpLoad %int %34
-               OpStore %x_7 %35
-               OpSelectionMerge %36 None
-               OpSwitch %uint_0 %37
-         %37 = OpLabel
-               OpStore %x_GLF_color %39
-         %40 = OpAccessChain %_ptr_Function_int %x_10 %int_0
-         %41 = OpLoad %int %40
-         %43 = OpLoad %int %x_7
-         %42 = OpCopyObject %int %43
-         %44 = OpIEqual %bool %41 %42
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %46
-         %47 = OpLabel
-               OpStore %x_11_phi %int_1
-               OpBranch %36
-         %46 = OpLabel
-               OpStore %x_11_phi %int_2
-               OpBranch %36
-         %36 = OpLabel
-         %50 = OpLoad %int %x_11_phi
-         %51 = OpIEqual %bool %50 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpStore %x_GLF_color %56
-               OpBranch %52
-         %54 = OpLabel
-               OpStore %x_GLF_color %39
-               OpBranch %52
-         %52 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-         %60 = OpLabel
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %65 = OpLabel
-         %66 = OpFunctionCall %main_out %main_inner
-         %67 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %67
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 62409af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/one-sized-array/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var x_10 : array<i32, 1>;
-  var x_9 : array<i32, 1>;
-  var x_7 : i32;
-  var x_11_phi : i32;
-  let x_6 : i32 = x_5.zero;
-  x_9[0] = x_6;
-  let x_37 : array<i32, 1> = x_9;
-  x_10 = x_37;
-  x_7 = x_9[0];
-  switch(0u) {
-    default: {
-      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-      let x_8 : i32 = x_10[0];
-      if ((x_8 == bitcast<i32>(x_7))) {
-        x_11_phi = 1;
-        break;
-      }
-      x_11_phi = 2;
-    }
-  }
-  let x_11 : i32 = x_11_phi;
-  if ((x_11 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1268a9f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_30 = false;
-  float x_47 = 0.0f;
-  const float x_29 = asfloat(x_6[0].x);
-  x_30 = (x_29 > 1.0f);
-  if (x_30) {
-    while (true) {
-      float x_47_phi = 0.0f;
-      while (true) {
-        const float x_41 = gl_FragCoord.x;
-        if ((x_41 < 0.0f)) {
-          if (x_30) {
-            x_47_phi = 1.0f;
-            break;
-          } else {
-            continue;
-          }
-          continue;
-        }
-        x_47_phi = 0.0f;
-        break;
-      }
-      x_47 = x_47_phi;
-      break;
-    }
-    float4 x_48_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_48_1.y = x_47;
-    x_GLF_color = x_48_1;
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index b0a84b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  bool x_30 = false;
-  float x_47 = 0.0f;
-  float const x_29 = x_6.injectionSwitch.x;
-  x_30 = (x_29 > 1.0f);
-  if (x_30) {
-    while (true) {
-      float x_47_phi = 0.0f;
-      while (true) {
-        float const x_41 = (*(tint_symbol_3)).x;
-        if ((x_41 < 0.0f)) {
-          if (x_30) {
-            x_47_phi = 1.0f;
-            break;
-          } else {
-            continue;
-          }
-          continue;
-        }
-        x_47_phi = 0.0f;
-        break;
-      }
-      x_47 = x_47_phi;
-      break;
-    }
-    float4 x_48_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_48_1.y = x_47;
-    float4 const x_48 = x_48_1;
-    *(tint_symbol_4) = x_48;
-  }
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index de6b7b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,147 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %x_47 "x_47"
-               OpName %x_47_phi "x_47_phi"
-               OpName %x_48_1 "x_48_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %22 = OpConstantNull %bool
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-         %57 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_1 = OpConstant %uint 1
-         %64 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_bool Function %22
-       %x_47 = OpVariable %_ptr_Function_float Function %25
-   %x_47_phi = OpVariable %_ptr_Function_float Function %25
-     %x_48_1 = OpVariable %_ptr_Function_v4float Function %7
-         %29 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpFOrdGreaterThan %bool %30 %float_1
-               OpStore %x_30 %32
-         %33 = OpLoad %bool %x_30
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %34
-         %35 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %46 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %47 = OpLoad %float %46
-         %49 = OpFOrdLessThan %bool %47 %float_0
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-         %52 = OpLoad %bool %x_30
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpStore %x_47_phi %float_1
-               OpBranch %42
-         %55 = OpLabel
-               OpBranch %43
-         %53 = OpLabel
-               OpBranch %43
-         %50 = OpLabel
-               OpStore %x_47_phi %float_0
-               OpBranch %42
-         %43 = OpLabel
-               OpBranch %41
-         %42 = OpLabel
-         %56 = OpLoad %float %x_47_phi
-               OpStore %x_47 %56
-               OpBranch %37
-         %38 = OpLabel
-               OpBranch %36
-         %37 = OpLabel
-               OpStore %x_48_1 %57
-         %61 = OpAccessChain %_ptr_Function_float %x_48_1 %uint_1
-         %62 = OpLoad %float %x_47
-               OpStore %61 %62
-         %63 = OpLoad %v4float %x_48_1
-               OpStore %x_GLF_color %63
-               OpBranch %34
-         %34 = OpLabel
-               OpStore %x_GLF_color %64
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index fd8fb0e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_30 : bool;
-  var x_47 : f32;
-  let x_29 : f32 = x_6.injectionSwitch.x;
-  x_30 = (x_29 > 1.0);
-  if (x_30) {
-    loop {
-      var x_47_phi : f32;
-      loop {
-        let x_41 : f32 = gl_FragCoord.x;
-        if ((x_41 < 0.0)) {
-          if (x_30) {
-            x_47_phi = 1.0;
-            break;
-          } else {
-            continue;
-          }
-          continue;
-        }
-        x_47_phi = 0.0;
-        break;
-      }
-      x_47 = x_47_phi;
-      break;
-    }
-    var x_48_1 : vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    x_48_1.y = x_47;
-    let x_48 : vec4<f32> = x_48_1;
-    x_GLF_color = x_48;
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1268a9f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,62 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_30 = false;
-  float x_47 = 0.0f;
-  const float x_29 = asfloat(x_6[0].x);
-  x_30 = (x_29 > 1.0f);
-  if (x_30) {
-    while (true) {
-      float x_47_phi = 0.0f;
-      while (true) {
-        const float x_41 = gl_FragCoord.x;
-        if ((x_41 < 0.0f)) {
-          if (x_30) {
-            x_47_phi = 1.0f;
-            break;
-          } else {
-            continue;
-          }
-          continue;
-        }
-        x_47_phi = 0.0f;
-        break;
-      }
-      x_47 = x_47_phi;
-      break;
-    }
-    float4 x_48_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_48_1.y = x_47;
-    x_GLF_color = x_48_1;
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index b0a84b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  bool x_30 = false;
-  float x_47 = 0.0f;
-  float const x_29 = x_6.injectionSwitch.x;
-  x_30 = (x_29 > 1.0f);
-  if (x_30) {
-    while (true) {
-      float x_47_phi = 0.0f;
-      while (true) {
-        float const x_41 = (*(tint_symbol_3)).x;
-        if ((x_41 < 0.0f)) {
-          if (x_30) {
-            x_47_phi = 1.0f;
-            break;
-          } else {
-            continue;
-          }
-          continue;
-        }
-        x_47_phi = 0.0f;
-        break;
-      }
-      x_47 = x_47_phi;
-      break;
-    }
-    float4 x_48_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_48_1.y = x_47;
-    float4 const x_48 = x_48_1;
-    *(tint_symbol_4) = x_48;
-  }
-  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index de6b7b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,147 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %x_47 "x_47"
-               OpName %x_47_phi "x_47_phi"
-               OpName %x_48_1 "x_48_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %22 = OpConstantNull %bool
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-         %57 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-     %uint_1 = OpConstant %uint 1
-         %64 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_bool Function %22
-       %x_47 = OpVariable %_ptr_Function_float Function %25
-   %x_47_phi = OpVariable %_ptr_Function_float Function %25
-     %x_48_1 = OpVariable %_ptr_Function_v4float Function %7
-         %29 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpFOrdGreaterThan %bool %30 %float_1
-               OpStore %x_30 %32
-         %33 = OpLoad %bool %x_30
-               OpSelectionMerge %34 None
-               OpBranchConditional %33 %35 %34
-         %35 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %46 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %47 = OpLoad %float %46
-         %49 = OpFOrdLessThan %bool %47 %float_0
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-         %52 = OpLoad %bool %x_30
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpStore %x_47_phi %float_1
-               OpBranch %42
-         %55 = OpLabel
-               OpBranch %43
-         %53 = OpLabel
-               OpBranch %43
-         %50 = OpLabel
-               OpStore %x_47_phi %float_0
-               OpBranch %42
-         %43 = OpLabel
-               OpBranch %41
-         %42 = OpLabel
-         %56 = OpLoad %float %x_47_phi
-               OpStore %x_47 %56
-               OpBranch %37
-         %38 = OpLabel
-               OpBranch %36
-         %37 = OpLabel
-               OpStore %x_48_1 %57
-         %61 = OpAccessChain %_ptr_Function_float %x_48_1 %uint_1
-         %62 = OpLoad %float %x_47
-               OpStore %61 %62
-         %63 = OpLoad %v4float %x_48_1
-               OpStore %x_GLF_color %63
-               OpBranch %34
-         %34 = OpLabel
-               OpStore %x_GLF_color %64
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index fd8fb0e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-float-from-while-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_30 : bool;
-  var x_47 : f32;
-  let x_29 : f32 = x_6.injectionSwitch.x;
-  x_30 = (x_29 > 1.0);
-  if (x_30) {
-    loop {
-      var x_47_phi : f32;
-      loop {
-        let x_41 : f32 = gl_FragCoord.x;
-        if ((x_41 < 0.0)) {
-          if (x_30) {
-            x_47_phi = 1.0;
-            break;
-          } else {
-            continue;
-          }
-          continue;
-        }
-        x_47_phi = 0.0;
-        break;
-      }
-      x_47 = x_47_phi;
-      break;
-    }
-    var x_48_1 : vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    x_48_1.y = x_47;
-    let x_48 : vec4<f32> = x_48_1;
-    x_GLF_color = x_48;
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 16f0423..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float f_() {
-  int i = 0;
-  i = 1;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      if ((float(i) >= 1.0f)) {
-        return 1.0f;
-      } else {
-        continue;
-      }
-    }
-  }
-  return 1.0f;
-}
-
-void main_1() {
-  float4 c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i_1 = 0;
-  c = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i_1 = 0;
-  while (true) {
-    if ((i_1 < 1)) {
-    } else {
-      break;
-    }
-    {
-      const float x_39 = f_();
-      c.x = x_39;
-      i_1 = (i_1 + 1);
-    }
-  }
-  x_GLF_color = c;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.msl
deleted file mode 100644
index 082e268..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float f_() {
-  int i = 0;
-  i = 1;
-  while (true) {
-    int const x_8 = i;
-    if ((x_8 < 10)) {
-    } else {
-      break;
-    }
-    int const x_9 = i;
-    if ((float(x_9) >= 1.0f)) {
-      return 1.0f;
-    } else {
-      {
-        int const x_10 = i;
-        i = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-      }
-      continue;
-    }
-    {
-      int const x_10 = i;
-      i = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-    }
-  }
-  return 1.0f;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4 c = 0.0f;
-  int i_1 = 0;
-  c = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i_1 = 0;
-  while (true) {
-    int const x_12 = i_1;
-    if ((x_12 < 1)) {
-    } else {
-      break;
-    }
-    {
-      float const x_39 = f_();
-      c.x = x_39;
-      int const x_13 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_13) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_41 = c;
-  *(tint_symbol_3) = x_41;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index af0b528..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,133 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 74
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_ "f_"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-          %8 = OpTypeFunction %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %14 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-         %36 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_0 = OpConstant %float 0
-         %44 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-         %63 = OpTypeFunction %main_out
-         %f_ = OpFunction %float None %8
-         %10 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %14
-               OpStore %i %int_1
-               OpBranch %16
-         %16 = OpLabel
-               OpLoopMerge %17 %18 None
-               OpBranch %19
-         %19 = OpLabel
-         %20 = OpLoad %int %i
-         %22 = OpSLessThan %bool %20 %int_10
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %26
-         %25 = OpLabel
-               OpBranch %24
-         %26 = OpLabel
-               OpBranch %17
-         %24 = OpLabel
-         %27 = OpLoad %int %i
-         %28 = OpConvertSToF %float %27
-         %30 = OpFOrdGreaterThanEqual %bool %28 %float_1
-               OpSelectionMerge %31 None
-               OpBranchConditional %30 %32 %33
-         %32 = OpLabel
-               OpReturnValue %float_1
-         %33 = OpLabel
-               OpBranch %18
-         %31 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-         %34 = OpLoad %int %i
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %i %35
-               OpBranch %16
-         %17 = OpLabel
-               OpReturnValue %float_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %36
-         %39 = OpLabel
-          %c = OpVariable %_ptr_Function_v4float Function %5
-        %i_1 = OpVariable %_ptr_Function_int Function %14
-               OpStore %c %44
-               OpStore %i_1 %int_0
-               OpBranch %46
-         %46 = OpLabel
-               OpLoopMerge %47 %48 None
-               OpBranch %49
-         %49 = OpLabel
-         %50 = OpLoad %int %i_1
-         %51 = OpSLessThan %bool %50 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %47
-         %52 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-         %55 = OpFunctionCall %float %f_
-         %59 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %59 %55
-         %60 = OpLoad %int %i_1
-         %61 = OpIAdd %int %60 %int_1
-               OpStore %i_1 %61
-               OpBranch %46
-         %47 = OpLabel
-         %62 = OpLoad %v4float %c
-               OpStore %x_GLF_color %62
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %36
-         %71 = OpLabel
-         %72 = OpFunctionCall %main_out %main_inner
-         %73 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %73
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8e2cc4c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_() -> f32 {
-  var i : i32;
-  i = 1;
-  loop {
-    let x_8 : i32 = i;
-    if ((x_8 < 10)) {
-    } else {
-      break;
-    }
-    let x_9 : i32 = i;
-    if ((f32(x_9) >= 1.0)) {
-      return 1.0;
-    } else {
-      continue;
-    }
-
-    continuing {
-      let x_10 : i32 = i;
-      i = (x_10 + 1);
-    }
-  }
-  return 1.0;
-}
-
-fn main_1() {
-  var c : vec4<f32>;
-  var i_1 : i32;
-  c = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i_1 = 0;
-  loop {
-    let x_12 : i32 = i_1;
-    if ((x_12 < 1)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_39 : f32 = f_();
-      c.x = x_39;
-      let x_13 : i32 = i_1;
-      i_1 = (x_13 + 1);
-    }
-  }
-  let x_41 : vec4<f32> = c;
-  x_GLF_color = x_41;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 16f0423..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,56 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float f_() {
-  int i = 0;
-  i = 1;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      if ((float(i) >= 1.0f)) {
-        return 1.0f;
-      } else {
-        continue;
-      }
-    }
-  }
-  return 1.0f;
-}
-
-void main_1() {
-  float4 c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i_1 = 0;
-  c = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i_1 = 0;
-  while (true) {
-    if ((i_1 < 1)) {
-    } else {
-      break;
-    }
-    {
-      const float x_39 = f_();
-      c.x = x_39;
-      i_1 = (i_1 + 1);
-    }
-  }
-  x_GLF_color = c;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.msl
deleted file mode 100644
index 082e268..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,74 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float f_() {
-  int i = 0;
-  i = 1;
-  while (true) {
-    int const x_8 = i;
-    if ((x_8 < 10)) {
-    } else {
-      break;
-    }
-    int const x_9 = i;
-    if ((float(x_9) >= 1.0f)) {
-      return 1.0f;
-    } else {
-      {
-        int const x_10 = i;
-        i = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-      }
-      continue;
-    }
-    {
-      int const x_10 = i;
-      i = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-    }
-  }
-  return 1.0f;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4 c = 0.0f;
-  int i_1 = 0;
-  c = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i_1 = 0;
-  while (true) {
-    int const x_12 = i_1;
-    if ((x_12 < 1)) {
-    } else {
-      break;
-    }
-    {
-      float const x_39 = f_();
-      c.x = x_39;
-      int const x_13 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_13) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_41 = c;
-  *(tint_symbol_3) = x_41;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index af0b528..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,133 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 74
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %f_ "f_"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-          %8 = OpTypeFunction %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %14 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-       %void = OpTypeVoid
-         %36 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_0 = OpConstant %float 0
-         %44 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-   %main_out = OpTypeStruct %v4float
-         %63 = OpTypeFunction %main_out
-         %f_ = OpFunction %float None %8
-         %10 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %14
-               OpStore %i %int_1
-               OpBranch %16
-         %16 = OpLabel
-               OpLoopMerge %17 %18 None
-               OpBranch %19
-         %19 = OpLabel
-         %20 = OpLoad %int %i
-         %22 = OpSLessThan %bool %20 %int_10
-               OpSelectionMerge %24 None
-               OpBranchConditional %22 %25 %26
-         %25 = OpLabel
-               OpBranch %24
-         %26 = OpLabel
-               OpBranch %17
-         %24 = OpLabel
-         %27 = OpLoad %int %i
-         %28 = OpConvertSToF %float %27
-         %30 = OpFOrdGreaterThanEqual %bool %28 %float_1
-               OpSelectionMerge %31 None
-               OpBranchConditional %30 %32 %33
-         %32 = OpLabel
-               OpReturnValue %float_1
-         %33 = OpLabel
-               OpBranch %18
-         %31 = OpLabel
-               OpBranch %18
-         %18 = OpLabel
-         %34 = OpLoad %int %i
-         %35 = OpIAdd %int %34 %int_1
-               OpStore %i %35
-               OpBranch %16
-         %17 = OpLabel
-               OpReturnValue %float_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %36
-         %39 = OpLabel
-          %c = OpVariable %_ptr_Function_v4float Function %5
-        %i_1 = OpVariable %_ptr_Function_int Function %14
-               OpStore %c %44
-               OpStore %i_1 %int_0
-               OpBranch %46
-         %46 = OpLabel
-               OpLoopMerge %47 %48 None
-               OpBranch %49
-         %49 = OpLabel
-         %50 = OpLoad %int %i_1
-         %51 = OpSLessThan %bool %50 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %47
-         %52 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-         %55 = OpFunctionCall %float %f_
-         %59 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %59 %55
-         %60 = OpLoad %int %i_1
-         %61 = OpIAdd %int %60 %int_1
-               OpStore %i_1 %61
-               OpBranch %46
-         %47 = OpLabel
-         %62 = OpLoad %v4float %c
-               OpStore %x_GLF_color %62
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %36
-         %71 = OpLabel
-         %72 = OpFunctionCall %main_out %main_inner
-         %73 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %73
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8e2cc4c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-in-loop-in-function/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn f_() -> f32 {
-  var i : i32;
-  i = 1;
-  loop {
-    let x_8 : i32 = i;
-    if ((x_8 < 10)) {
-    } else {
-      break;
-    }
-    let x_9 : i32 = i;
-    if ((f32(x_9) >= 1.0)) {
-      return 1.0;
-    } else {
-      continue;
-    }
-
-    continuing {
-      let x_10 : i32 = i;
-      i = (x_10 + 1);
-    }
-  }
-  return 1.0;
-}
-
-fn main_1() {
-  var c : vec4<f32>;
-  var i_1 : i32;
-  c = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i_1 = 0;
-  loop {
-    let x_12 : i32 = i_1;
-    if ((x_12 < 1)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_39 : f32 = f_();
-      c.x = x_39;
-      let x_13 : i32 = i_1;
-      i_1 = (x_13 + 1);
-    }
-  }
-  let x_41 : vec4<f32> = c;
-  x_GLF_color = x_41;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.hlsl
deleted file mode 100644
index 9393324..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,135 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_36 = false;
-  float3 x_37 = float3(0.0f, 0.0f, 0.0f);
-  int x_6 = 0;
-  float3 x_38 = float3(0.0f, 0.0f, 0.0f);
-  float3 x_51 = float3(0.0f, 0.0f, 0.0f);
-  float3 x_54 = float3(0.0f, 0.0f, 0.0f);
-  bool x_40_phi = false;
-  float3 x_55_phi = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_36 = false;
-  x_40_phi = false;
-  while (true) {
-    bool x_45 = false;
-    bool x_45_phi = false;
-    int x_7_phi = 0;
-    float3 x_51_phi = float3(0.0f, 0.0f, 0.0f);
-    bool x_52_phi = false;
-    const bool x_40 = x_40_phi;
-    x_6 = 0;
-    x_45_phi = x_40;
-    x_7_phi = 0;
-    while (true) {
-      x_45 = x_45_phi;
-      const int x_7 = x_7_phi;
-      x_51_phi = float3(0.0f, 0.0f, 0.0f);
-      x_52_phi = x_45;
-      if ((x_7 < 0)) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = float3(1.0f, 1.0f, 1.0f);
-      x_51_phi = float3(1.0f, 1.0f, 1.0f);
-      x_52_phi = true;
-      break;
-      {
-        x_45_phi = false;
-        x_7_phi = 0;
-      }
-    }
-    x_51 = x_51_phi;
-    const bool x_52 = x_52_phi;
-    x_55_phi = x_51;
-    if (x_52) {
-      break;
-    }
-    x_54 = float3(0.0f, 0.0f, 0.0f);
-    x_36 = true;
-    x_55_phi = x_54;
-    break;
-    {
-      x_40_phi = false;
-    }
-  }
-  x_38 = x_55_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float3 GLF_live4drawShape_() {
-  bool x_57 = false;
-  float3 x_58 = float3(0.0f, 0.0f, 0.0f);
-  int i = 0;
-  float3 x_71 = float3(0.0f, 0.0f, 0.0f);
-  float3 x_74 = float3(0.0f, 0.0f, 0.0f);
-  bool x_60_phi = false;
-  float3 x_75_phi = float3(0.0f, 0.0f, 0.0f);
-  x_60_phi = false;
-  while (true) {
-    bool x_65 = false;
-    bool x_65_phi = false;
-    int x_8_phi = 0;
-    float3 x_71_phi = float3(0.0f, 0.0f, 0.0f);
-    bool x_72_phi = false;
-    const bool x_60 = x_60_phi;
-    i = 0;
-    x_65_phi = x_60;
-    x_8_phi = 0;
-    while (true) {
-      x_65 = x_65_phi;
-      const int x_8 = x_8_phi;
-      x_71_phi = float3(0.0f, 0.0f, 0.0f);
-      x_72_phi = x_65;
-      if ((x_8 < 0)) {
-      } else {
-        break;
-      }
-      x_57 = true;
-      x_58 = float3(1.0f, 1.0f, 1.0f);
-      x_71_phi = float3(1.0f, 1.0f, 1.0f);
-      x_72_phi = true;
-      break;
-      {
-        x_65_phi = false;
-        x_8_phi = 0;
-      }
-    }
-    x_71 = x_71_phi;
-    const bool x_72 = x_72_phi;
-    x_75_phi = x_71;
-    if (x_72) {
-      break;
-    }
-    x_74 = float3(0.0f, 0.0f, 0.0f);
-    x_57 = true;
-    x_75_phi = x_74;
-    break;
-    {
-      x_60_phi = false;
-    }
-  }
-  return x_75_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.msl
deleted file mode 100644
index 8752d55..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.msl
+++ /dev/null
@@ -1,140 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool x_36 = false;
-  float3 x_37 = 0.0f;
-  int x_6 = 0;
-  float3 x_38 = 0.0f;
-  float3 x_51 = 0.0f;
-  float3 x_54 = 0.0f;
-  bool x_40_phi = false;
-  float3 x_55_phi = 0.0f;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_36 = false;
-  x_40_phi = false;
-  while (true) {
-    bool x_45 = false;
-    bool x_45_phi = false;
-    int x_7_phi = 0;
-    float3 x_51_phi = 0.0f;
-    bool x_52_phi = false;
-    bool const x_40 = x_40_phi;
-    x_6 = 0;
-    x_45_phi = x_40;
-    x_7_phi = 0;
-    while (true) {
-      x_45 = x_45_phi;
-      int const x_7 = x_7_phi;
-      x_51_phi = float3(0.0f, 0.0f, 0.0f);
-      x_52_phi = x_45;
-      if ((x_7 < 0)) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = float3(1.0f, 1.0f, 1.0f);
-      x_51_phi = float3(1.0f, 1.0f, 1.0f);
-      x_52_phi = true;
-      break;
-      {
-        x_45_phi = false;
-        x_7_phi = 0;
-      }
-    }
-    x_51 = x_51_phi;
-    bool const x_52 = x_52_phi;
-    x_55_phi = x_51;
-    if (x_52) {
-      break;
-    }
-    x_54 = float3(0.0f, 0.0f, 0.0f);
-    x_36 = true;
-    x_55_phi = x_54;
-    break;
-    {
-      x_40_phi = false;
-    }
-  }
-  float3 const x_55 = x_55_phi;
-  x_38 = x_55;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float3 GLF_live4drawShape_() {
-  bool x_57 = false;
-  float3 x_58 = 0.0f;
-  int i = 0;
-  float3 x_71 = 0.0f;
-  float3 x_74 = 0.0f;
-  bool x_60_phi = false;
-  float3 x_75_phi = 0.0f;
-  x_60_phi = false;
-  while (true) {
-    bool x_65 = false;
-    bool x_65_phi = false;
-    int x_8_phi = 0;
-    float3 x_71_phi = 0.0f;
-    bool x_72_phi = false;
-    bool const x_60 = x_60_phi;
-    i = 0;
-    x_65_phi = x_60;
-    x_8_phi = 0;
-    while (true) {
-      x_65 = x_65_phi;
-      int const x_8 = x_8_phi;
-      x_71_phi = float3(0.0f, 0.0f, 0.0f);
-      x_72_phi = x_65;
-      if ((x_8 < 0)) {
-      } else {
-        break;
-      }
-      x_57 = true;
-      x_58 = float3(1.0f, 1.0f, 1.0f);
-      x_71_phi = float3(1.0f, 1.0f, 1.0f);
-      x_72_phi = true;
-      break;
-      {
-        x_65_phi = false;
-        x_8_phi = 0;
-      }
-    }
-    x_71 = x_71_phi;
-    bool const x_72 = x_72_phi;
-    x_75_phi = x_71;
-    if (x_72) {
-      break;
-    }
-    x_74 = float3(0.0f, 0.0f, 0.0f);
-    x_57 = true;
-    x_75_phi = x_74;
-    break;
-    {
-      x_60_phi = false;
-    }
-  }
-  float3 const x_75 = x_75_phi;
-  return x_75;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.spvasm
deleted file mode 100644
index 894685d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,243 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 114
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_37 "x_37"
-               OpName %x_6 "x_6"
-               OpName %x_38 "x_38"
-               OpName %x_51 "x_51"
-               OpName %x_54 "x_54"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_55_phi "x_55_phi"
-               OpName %x_45 "x_45"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_7_phi "x_7_phi"
-               OpName %x_51_phi "x_51_phi"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %GLF_live4drawShape_ "GLF_live4drawShape_"
-               OpName %x_57 "x_57"
-               OpName %x_58 "x_58"
-               OpName %i "i"
-               OpName %x_71 "x_71"
-               OpName %x_74 "x_74"
-               OpName %x_60_phi "x_60_phi"
-               OpName %x_75_phi "x_75_phi"
-               OpName %x_65 "x_65"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_8_phi "x_8_phi"
-               OpName %x_71_phi "x_71_phi"
-               OpName %x_72_phi "x_72_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %16 = OpConstantNull %bool
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %20 = OpConstantNull %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-         %50 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %true = OpConstantTrue %bool
-         %57 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out
-         %76 = OpTypeFunction %v3float
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_bool Function %16
-       %x_37 = OpVariable %_ptr_Function_v3float Function %20
-        %x_6 = OpVariable %_ptr_Function_int Function %24
-       %x_38 = OpVariable %_ptr_Function_v3float Function %20
-       %x_51 = OpVariable %_ptr_Function_v3float Function %20
-       %x_54 = OpVariable %_ptr_Function_v3float Function %20
-   %x_40_phi = OpVariable %_ptr_Function_bool Function %16
-   %x_55_phi = OpVariable %_ptr_Function_v3float Function %20
-       %x_45 = OpVariable %_ptr_Function_bool Function %16
-   %x_45_phi = OpVariable %_ptr_Function_bool Function %16
-    %x_7_phi = OpVariable %_ptr_Function_int Function %24
-   %x_51_phi = OpVariable %_ptr_Function_v3float Function %20
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %16
-               OpStore %x_36 %false
-               OpStore %x_GLF_color %32
-               OpStore %x_36 %false
-               OpStore %x_40_phi %false
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %42 = OpLoad %bool %x_40_phi
-               OpStore %x_6 %int_0
-               OpStore %x_45_phi %42
-               OpStore %x_7_phi %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %bool %x_45_phi
-               OpStore %x_45 %48
-         %49 = OpLoad %int %x_7_phi
-               OpStore %x_51_phi %50
-         %51 = OpLoad %bool %x_45
-               OpStore %x_52_phi %51
-         %52 = OpSLessThan %bool %49 %int_0
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %45
-         %53 = OpLabel
-               OpStore %x_36 %true
-               OpStore %x_37 %57
-               OpStore %x_51_phi %57
-               OpStore %x_52_phi %true
-               OpBranch %45
-         %46 = OpLabel
-               OpStore %x_45_phi %false
-               OpStore %x_7_phi %int_0
-               OpBranch %44
-         %45 = OpLabel
-         %58 = OpLoad %v3float %x_51_phi
-               OpStore %x_51 %58
-         %59 = OpLoad %bool %x_52_phi
-         %60 = OpLoad %v3float %x_51
-               OpStore %x_55_phi %60
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %61
-         %62 = OpLabel
-               OpBranch %34
-         %61 = OpLabel
-               OpStore %x_54 %50
-               OpStore %x_36 %true
-         %63 = OpLoad %v3float %x_54
-               OpStore %x_55_phi %63
-               OpBranch %34
-         %35 = OpLabel
-               OpStore %x_40_phi %false
-               OpBranch %33
-         %34 = OpLabel
-         %64 = OpLoad %v3float %x_55_phi
-               OpStore %x_38 %64
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-         %68 = OpLabel
-         %69 = OpFunctionCall %void %main_1
-         %70 = OpLoad %v4float %x_GLF_color
-         %71 = OpCompositeConstruct %main_out %70
-               OpReturnValue %71
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %73 = OpLabel
-         %74 = OpFunctionCall %main_out %main_inner
-         %75 = OpCompositeExtract %v4float %74 0
-               OpStore %x_GLF_color_1_1 %75
-               OpReturn
-               OpFunctionEnd
-%GLF_live4drawShape_ = OpFunction %v3float None %76
-         %78 = OpLabel
-       %x_57 = OpVariable %_ptr_Function_bool Function %16
-       %x_58 = OpVariable %_ptr_Function_v3float Function %20
-          %i = OpVariable %_ptr_Function_int Function %24
-       %x_71 = OpVariable %_ptr_Function_v3float Function %20
-       %x_74 = OpVariable %_ptr_Function_v3float Function %20
-   %x_60_phi = OpVariable %_ptr_Function_bool Function %16
-   %x_75_phi = OpVariable %_ptr_Function_v3float Function %20
-       %x_65 = OpVariable %_ptr_Function_bool Function %16
-   %x_65_phi = OpVariable %_ptr_Function_bool Function %16
-    %x_8_phi = OpVariable %_ptr_Function_int Function %24
-   %x_71_phi = OpVariable %_ptr_Function_v3float Function %20
-   %x_72_phi = OpVariable %_ptr_Function_bool Function %16
-               OpStore %x_57 %false
-               OpStore %x_60_phi %false
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %95 = OpLoad %bool %x_60_phi
-               OpStore %i %int_0
-               OpStore %x_65_phi %95
-               OpStore %x_8_phi %int_0
-               OpBranch %96
-         %96 = OpLabel
-               OpLoopMerge %97 %98 None
-               OpBranch %99
-         %99 = OpLabel
-        %100 = OpLoad %bool %x_65_phi
-               OpStore %x_65 %100
-        %101 = OpLoad %int %x_8_phi
-               OpStore %x_71_phi %50
-        %102 = OpLoad %bool %x_65
-               OpStore %x_72_phi %102
-        %103 = OpSLessThan %bool %101 %int_0
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %106
-        %105 = OpLabel
-               OpBranch %104
-        %106 = OpLabel
-               OpBranch %97
-        %104 = OpLabel
-               OpStore %x_57 %true
-               OpStore %x_58 %57
-               OpStore %x_71_phi %57
-               OpStore %x_72_phi %true
-               OpBranch %97
-         %98 = OpLabel
-               OpStore %x_65_phi %false
-               OpStore %x_8_phi %int_0
-               OpBranch %96
-         %97 = OpLabel
-        %107 = OpLoad %v3float %x_71_phi
-               OpStore %x_71 %107
-        %108 = OpLoad %bool %x_72_phi
-        %109 = OpLoad %v3float %x_71
-               OpStore %x_75_phi %109
-               OpSelectionMerge %110 None
-               OpBranchConditional %108 %111 %110
-        %111 = OpLabel
-               OpBranch %87
-        %110 = OpLabel
-               OpStore %x_74 %50
-               OpStore %x_57 %true
-        %112 = OpLoad %v3float %x_74
-               OpStore %x_75_phi %112
-               OpBranch %87
-         %88 = OpLabel
-               OpStore %x_60_phi %false
-               OpBranch %86
-         %87 = OpLabel
-        %113 = OpLoad %v3float %x_75_phi
-               OpReturnValue %113
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.wgsl
deleted file mode 100644
index def4326..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,132 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : bool = false;
-  var x_37 : vec3<f32>;
-  var x_6 : i32;
-  var x_38 : vec3<f32>;
-  var x_51 : vec3<f32>;
-  var x_54 : vec3<f32>;
-  var x_40_phi : bool;
-  var x_55_phi : vec3<f32>;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  x_36 = false;
-  x_40_phi = false;
-  loop {
-    var x_45 : bool;
-    var x_45_phi : bool;
-    var x_7_phi : i32;
-    var x_51_phi : vec3<f32>;
-    var x_52_phi : bool;
-    let x_40 : bool = x_40_phi;
-    x_6 = 0;
-    x_45_phi = x_40;
-    x_7_phi = 0;
-    loop {
-      x_45 = x_45_phi;
-      let x_7 : i32 = x_7_phi;
-      x_51_phi = vec3<f32>(0.0, 0.0, 0.0);
-      x_52_phi = x_45;
-      if ((x_7 < 0)) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = vec3<f32>(1.0, 1.0, 1.0);
-      x_51_phi = vec3<f32>(1.0, 1.0, 1.0);
-      x_52_phi = true;
-      break;
-
-      continuing {
-        x_45_phi = false;
-        x_7_phi = 0;
-      }
-    }
-    x_51 = x_51_phi;
-    let x_52 : bool = x_52_phi;
-    x_55_phi = x_51;
-    if (x_52) {
-      break;
-    }
-    x_54 = vec3<f32>(0.0, 0.0, 0.0);
-    x_36 = true;
-    x_55_phi = x_54;
-    break;
-
-    continuing {
-      x_40_phi = false;
-    }
-  }
-  let x_55 : vec3<f32> = x_55_phi;
-  x_38 = x_55;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn GLF_live4drawShape_() -> vec3<f32> {
-  var x_57 : bool = false;
-  var x_58 : vec3<f32>;
-  var i : i32;
-  var x_71 : vec3<f32>;
-  var x_74 : vec3<f32>;
-  var x_60_phi : bool;
-  var x_75_phi : vec3<f32>;
-  x_60_phi = false;
-  loop {
-    var x_65 : bool;
-    var x_65_phi : bool;
-    var x_8_phi : i32;
-    var x_71_phi : vec3<f32>;
-    var x_72_phi : bool;
-    let x_60 : bool = x_60_phi;
-    i = 0;
-    x_65_phi = x_60;
-    x_8_phi = 0;
-    loop {
-      x_65 = x_65_phi;
-      let x_8 : i32 = x_8_phi;
-      x_71_phi = vec3<f32>(0.0, 0.0, 0.0);
-      x_72_phi = x_65;
-      if ((x_8 < 0)) {
-      } else {
-        break;
-      }
-      x_57 = true;
-      x_58 = vec3<f32>(1.0, 1.0, 1.0);
-      x_71_phi = vec3<f32>(1.0, 1.0, 1.0);
-      x_72_phi = true;
-      break;
-
-      continuing {
-        x_65_phi = false;
-        x_8_phi = 0;
-      }
-    }
-    x_71 = x_71_phi;
-    let x_72 : bool = x_72_phi;
-    x_75_phi = x_71;
-    if (x_72) {
-      break;
-    }
-    x_74 = vec3<f32>(0.0, 0.0, 0.0);
-    x_57 = true;
-    x_75_phi = x_74;
-    break;
-
-    continuing {
-      x_60_phi = false;
-    }
-  }
-  let x_75 : vec3<f32> = x_75_phi;
-  return x_75;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.hlsl
deleted file mode 100644
index 9393324..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,135 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool x_36 = false;
-  float3 x_37 = float3(0.0f, 0.0f, 0.0f);
-  int x_6 = 0;
-  float3 x_38 = float3(0.0f, 0.0f, 0.0f);
-  float3 x_51 = float3(0.0f, 0.0f, 0.0f);
-  float3 x_54 = float3(0.0f, 0.0f, 0.0f);
-  bool x_40_phi = false;
-  float3 x_55_phi = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_36 = false;
-  x_40_phi = false;
-  while (true) {
-    bool x_45 = false;
-    bool x_45_phi = false;
-    int x_7_phi = 0;
-    float3 x_51_phi = float3(0.0f, 0.0f, 0.0f);
-    bool x_52_phi = false;
-    const bool x_40 = x_40_phi;
-    x_6 = 0;
-    x_45_phi = x_40;
-    x_7_phi = 0;
-    while (true) {
-      x_45 = x_45_phi;
-      const int x_7 = x_7_phi;
-      x_51_phi = float3(0.0f, 0.0f, 0.0f);
-      x_52_phi = x_45;
-      if ((x_7 < 0)) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = float3(1.0f, 1.0f, 1.0f);
-      x_51_phi = float3(1.0f, 1.0f, 1.0f);
-      x_52_phi = true;
-      break;
-      {
-        x_45_phi = false;
-        x_7_phi = 0;
-      }
-    }
-    x_51 = x_51_phi;
-    const bool x_52 = x_52_phi;
-    x_55_phi = x_51;
-    if (x_52) {
-      break;
-    }
-    x_54 = float3(0.0f, 0.0f, 0.0f);
-    x_36 = true;
-    x_55_phi = x_54;
-    break;
-    {
-      x_40_phi = false;
-    }
-  }
-  x_38 = x_55_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float3 GLF_live4drawShape_() {
-  bool x_57 = false;
-  float3 x_58 = float3(0.0f, 0.0f, 0.0f);
-  int i = 0;
-  float3 x_71 = float3(0.0f, 0.0f, 0.0f);
-  float3 x_74 = float3(0.0f, 0.0f, 0.0f);
-  bool x_60_phi = false;
-  float3 x_75_phi = float3(0.0f, 0.0f, 0.0f);
-  x_60_phi = false;
-  while (true) {
-    bool x_65 = false;
-    bool x_65_phi = false;
-    int x_8_phi = 0;
-    float3 x_71_phi = float3(0.0f, 0.0f, 0.0f);
-    bool x_72_phi = false;
-    const bool x_60 = x_60_phi;
-    i = 0;
-    x_65_phi = x_60;
-    x_8_phi = 0;
-    while (true) {
-      x_65 = x_65_phi;
-      const int x_8 = x_8_phi;
-      x_71_phi = float3(0.0f, 0.0f, 0.0f);
-      x_72_phi = x_65;
-      if ((x_8 < 0)) {
-      } else {
-        break;
-      }
-      x_57 = true;
-      x_58 = float3(1.0f, 1.0f, 1.0f);
-      x_71_phi = float3(1.0f, 1.0f, 1.0f);
-      x_72_phi = true;
-      break;
-      {
-        x_65_phi = false;
-        x_8_phi = 0;
-      }
-    }
-    x_71 = x_71_phi;
-    const bool x_72 = x_72_phi;
-    x_75_phi = x_71;
-    if (x_72) {
-      break;
-    }
-    x_74 = float3(0.0f, 0.0f, 0.0f);
-    x_57 = true;
-    x_75_phi = x_74;
-    break;
-    {
-      x_60_phi = false;
-    }
-  }
-  return x_75_phi;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.msl
deleted file mode 100644
index 8752d55..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.msl
+++ /dev/null
@@ -1,140 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool x_36 = false;
-  float3 x_37 = 0.0f;
-  int x_6 = 0;
-  float3 x_38 = 0.0f;
-  float3 x_51 = 0.0f;
-  float3 x_54 = 0.0f;
-  bool x_40_phi = false;
-  float3 x_55_phi = 0.0f;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_36 = false;
-  x_40_phi = false;
-  while (true) {
-    bool x_45 = false;
-    bool x_45_phi = false;
-    int x_7_phi = 0;
-    float3 x_51_phi = 0.0f;
-    bool x_52_phi = false;
-    bool const x_40 = x_40_phi;
-    x_6 = 0;
-    x_45_phi = x_40;
-    x_7_phi = 0;
-    while (true) {
-      x_45 = x_45_phi;
-      int const x_7 = x_7_phi;
-      x_51_phi = float3(0.0f, 0.0f, 0.0f);
-      x_52_phi = x_45;
-      if ((x_7 < 0)) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = float3(1.0f, 1.0f, 1.0f);
-      x_51_phi = float3(1.0f, 1.0f, 1.0f);
-      x_52_phi = true;
-      break;
-      {
-        x_45_phi = false;
-        x_7_phi = 0;
-      }
-    }
-    x_51 = x_51_phi;
-    bool const x_52 = x_52_phi;
-    x_55_phi = x_51;
-    if (x_52) {
-      break;
-    }
-    x_54 = float3(0.0f, 0.0f, 0.0f);
-    x_36 = true;
-    x_55_phi = x_54;
-    break;
-    {
-      x_40_phi = false;
-    }
-  }
-  float3 const x_55 = x_55_phi;
-  x_38 = x_55;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-float3 GLF_live4drawShape_() {
-  bool x_57 = false;
-  float3 x_58 = 0.0f;
-  int i = 0;
-  float3 x_71 = 0.0f;
-  float3 x_74 = 0.0f;
-  bool x_60_phi = false;
-  float3 x_75_phi = 0.0f;
-  x_60_phi = false;
-  while (true) {
-    bool x_65 = false;
-    bool x_65_phi = false;
-    int x_8_phi = 0;
-    float3 x_71_phi = 0.0f;
-    bool x_72_phi = false;
-    bool const x_60 = x_60_phi;
-    i = 0;
-    x_65_phi = x_60;
-    x_8_phi = 0;
-    while (true) {
-      x_65 = x_65_phi;
-      int const x_8 = x_8_phi;
-      x_71_phi = float3(0.0f, 0.0f, 0.0f);
-      x_72_phi = x_65;
-      if ((x_8 < 0)) {
-      } else {
-        break;
-      }
-      x_57 = true;
-      x_58 = float3(1.0f, 1.0f, 1.0f);
-      x_71_phi = float3(1.0f, 1.0f, 1.0f);
-      x_72_phi = true;
-      break;
-      {
-        x_65_phi = false;
-        x_8_phi = 0;
-      }
-    }
-    x_71 = x_71_phi;
-    bool const x_72 = x_72_phi;
-    x_75_phi = x_71;
-    if (x_72) {
-      break;
-    }
-    x_74 = float3(0.0f, 0.0f, 0.0f);
-    x_57 = true;
-    x_75_phi = x_74;
-    break;
-    {
-      x_60_phi = false;
-    }
-  }
-  float3 const x_75 = x_75_phi;
-  return x_75;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.spvasm
deleted file mode 100644
index 894685d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,243 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 114
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_37 "x_37"
-               OpName %x_6 "x_6"
-               OpName %x_38 "x_38"
-               OpName %x_51 "x_51"
-               OpName %x_54 "x_54"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_55_phi "x_55_phi"
-               OpName %x_45 "x_45"
-               OpName %x_45_phi "x_45_phi"
-               OpName %x_7_phi "x_7_phi"
-               OpName %x_51_phi "x_51_phi"
-               OpName %x_52_phi "x_52_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpName %GLF_live4drawShape_ "GLF_live4drawShape_"
-               OpName %x_57 "x_57"
-               OpName %x_58 "x_58"
-               OpName %i "i"
-               OpName %x_71 "x_71"
-               OpName %x_74 "x_74"
-               OpName %x_60_phi "x_60_phi"
-               OpName %x_75_phi "x_75_phi"
-               OpName %x_65 "x_65"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_8_phi "x_8_phi"
-               OpName %x_71_phi "x_71_phi"
-               OpName %x_72_phi "x_72_phi"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %16 = OpConstantNull %bool
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %20 = OpConstantNull %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-         %50 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %true = OpConstantTrue %bool
-         %57 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out
-         %76 = OpTypeFunction %v3float
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_bool Function %16
-       %x_37 = OpVariable %_ptr_Function_v3float Function %20
-        %x_6 = OpVariable %_ptr_Function_int Function %24
-       %x_38 = OpVariable %_ptr_Function_v3float Function %20
-       %x_51 = OpVariable %_ptr_Function_v3float Function %20
-       %x_54 = OpVariable %_ptr_Function_v3float Function %20
-   %x_40_phi = OpVariable %_ptr_Function_bool Function %16
-   %x_55_phi = OpVariable %_ptr_Function_v3float Function %20
-       %x_45 = OpVariable %_ptr_Function_bool Function %16
-   %x_45_phi = OpVariable %_ptr_Function_bool Function %16
-    %x_7_phi = OpVariable %_ptr_Function_int Function %24
-   %x_51_phi = OpVariable %_ptr_Function_v3float Function %20
-   %x_52_phi = OpVariable %_ptr_Function_bool Function %16
-               OpStore %x_36 %false
-               OpStore %x_GLF_color %32
-               OpStore %x_36 %false
-               OpStore %x_40_phi %false
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %42 = OpLoad %bool %x_40_phi
-               OpStore %x_6 %int_0
-               OpStore %x_45_phi %42
-               OpStore %x_7_phi %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %bool %x_45_phi
-               OpStore %x_45 %48
-         %49 = OpLoad %int %x_7_phi
-               OpStore %x_51_phi %50
-         %51 = OpLoad %bool %x_45
-               OpStore %x_52_phi %51
-         %52 = OpSLessThan %bool %49 %int_0
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %45
-         %53 = OpLabel
-               OpStore %x_36 %true
-               OpStore %x_37 %57
-               OpStore %x_51_phi %57
-               OpStore %x_52_phi %true
-               OpBranch %45
-         %46 = OpLabel
-               OpStore %x_45_phi %false
-               OpStore %x_7_phi %int_0
-               OpBranch %44
-         %45 = OpLabel
-         %58 = OpLoad %v3float %x_51_phi
-               OpStore %x_51 %58
-         %59 = OpLoad %bool %x_52_phi
-         %60 = OpLoad %v3float %x_51
-               OpStore %x_55_phi %60
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %61
-         %62 = OpLabel
-               OpBranch %34
-         %61 = OpLabel
-               OpStore %x_54 %50
-               OpStore %x_36 %true
-         %63 = OpLoad %v3float %x_54
-               OpStore %x_55_phi %63
-               OpBranch %34
-         %35 = OpLabel
-               OpStore %x_40_phi %false
-               OpBranch %33
-         %34 = OpLabel
-         %64 = OpLoad %v3float %x_55_phi
-               OpStore %x_38 %64
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-         %68 = OpLabel
-         %69 = OpFunctionCall %void %main_1
-         %70 = OpLoad %v4float %x_GLF_color
-         %71 = OpCompositeConstruct %main_out %70
-               OpReturnValue %71
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %73 = OpLabel
-         %74 = OpFunctionCall %main_out %main_inner
-         %75 = OpCompositeExtract %v4float %74 0
-               OpStore %x_GLF_color_1_1 %75
-               OpReturn
-               OpFunctionEnd
-%GLF_live4drawShape_ = OpFunction %v3float None %76
-         %78 = OpLabel
-       %x_57 = OpVariable %_ptr_Function_bool Function %16
-       %x_58 = OpVariable %_ptr_Function_v3float Function %20
-          %i = OpVariable %_ptr_Function_int Function %24
-       %x_71 = OpVariable %_ptr_Function_v3float Function %20
-       %x_74 = OpVariable %_ptr_Function_v3float Function %20
-   %x_60_phi = OpVariable %_ptr_Function_bool Function %16
-   %x_75_phi = OpVariable %_ptr_Function_v3float Function %20
-       %x_65 = OpVariable %_ptr_Function_bool Function %16
-   %x_65_phi = OpVariable %_ptr_Function_bool Function %16
-    %x_8_phi = OpVariable %_ptr_Function_int Function %24
-   %x_71_phi = OpVariable %_ptr_Function_v3float Function %20
-   %x_72_phi = OpVariable %_ptr_Function_bool Function %16
-               OpStore %x_57 %false
-               OpStore %x_60_phi %false
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %95 = OpLoad %bool %x_60_phi
-               OpStore %i %int_0
-               OpStore %x_65_phi %95
-               OpStore %x_8_phi %int_0
-               OpBranch %96
-         %96 = OpLabel
-               OpLoopMerge %97 %98 None
-               OpBranch %99
-         %99 = OpLabel
-        %100 = OpLoad %bool %x_65_phi
-               OpStore %x_65 %100
-        %101 = OpLoad %int %x_8_phi
-               OpStore %x_71_phi %50
-        %102 = OpLoad %bool %x_65
-               OpStore %x_72_phi %102
-        %103 = OpSLessThan %bool %101 %int_0
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %106
-        %105 = OpLabel
-               OpBranch %104
-        %106 = OpLabel
-               OpBranch %97
-        %104 = OpLabel
-               OpStore %x_57 %true
-               OpStore %x_58 %57
-               OpStore %x_71_phi %57
-               OpStore %x_72_phi %true
-               OpBranch %97
-         %98 = OpLabel
-               OpStore %x_65_phi %false
-               OpStore %x_8_phi %int_0
-               OpBranch %96
-         %97 = OpLabel
-        %107 = OpLoad %v3float %x_71_phi
-               OpStore %x_71 %107
-        %108 = OpLoad %bool %x_72_phi
-        %109 = OpLoad %v3float %x_71
-               OpStore %x_75_phi %109
-               OpSelectionMerge %110 None
-               OpBranchConditional %108 %111 %110
-        %111 = OpLabel
-               OpBranch %87
-        %110 = OpLabel
-               OpStore %x_74 %50
-               OpStore %x_57 %true
-        %112 = OpLoad %v3float %x_74
-               OpStore %x_75_phi %112
-               OpBranch %87
-         %88 = OpLabel
-               OpStore %x_60_phi %false
-               OpBranch %86
-         %87 = OpLabel
-        %113 = OpLoad %v3float %x_75_phi
-               OpReturnValue %113
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.wgsl
deleted file mode 100644
index def4326..0000000
--- a/test/vk-gl-cts/graphicsfuzz/return-inside-loop-in-function/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,132 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : bool = false;
-  var x_37 : vec3<f32>;
-  var x_6 : i32;
-  var x_38 : vec3<f32>;
-  var x_51 : vec3<f32>;
-  var x_54 : vec3<f32>;
-  var x_40_phi : bool;
-  var x_55_phi : vec3<f32>;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  x_36 = false;
-  x_40_phi = false;
-  loop {
-    var x_45 : bool;
-    var x_45_phi : bool;
-    var x_7_phi : i32;
-    var x_51_phi : vec3<f32>;
-    var x_52_phi : bool;
-    let x_40 : bool = x_40_phi;
-    x_6 = 0;
-    x_45_phi = x_40;
-    x_7_phi = 0;
-    loop {
-      x_45 = x_45_phi;
-      let x_7 : i32 = x_7_phi;
-      x_51_phi = vec3<f32>(0.0, 0.0, 0.0);
-      x_52_phi = x_45;
-      if ((x_7 < 0)) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = vec3<f32>(1.0, 1.0, 1.0);
-      x_51_phi = vec3<f32>(1.0, 1.0, 1.0);
-      x_52_phi = true;
-      break;
-
-      continuing {
-        x_45_phi = false;
-        x_7_phi = 0;
-      }
-    }
-    x_51 = x_51_phi;
-    let x_52 : bool = x_52_phi;
-    x_55_phi = x_51;
-    if (x_52) {
-      break;
-    }
-    x_54 = vec3<f32>(0.0, 0.0, 0.0);
-    x_36 = true;
-    x_55_phi = x_54;
-    break;
-
-    continuing {
-      x_40_phi = false;
-    }
-  }
-  let x_55 : vec3<f32> = x_55_phi;
-  x_38 = x_55;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn GLF_live4drawShape_() -> vec3<f32> {
-  var x_57 : bool = false;
-  var x_58 : vec3<f32>;
-  var i : i32;
-  var x_71 : vec3<f32>;
-  var x_74 : vec3<f32>;
-  var x_60_phi : bool;
-  var x_75_phi : vec3<f32>;
-  x_60_phi = false;
-  loop {
-    var x_65 : bool;
-    var x_65_phi : bool;
-    var x_8_phi : i32;
-    var x_71_phi : vec3<f32>;
-    var x_72_phi : bool;
-    let x_60 : bool = x_60_phi;
-    i = 0;
-    x_65_phi = x_60;
-    x_8_phi = 0;
-    loop {
-      x_65 = x_65_phi;
-      let x_8 : i32 = x_8_phi;
-      x_71_phi = vec3<f32>(0.0, 0.0, 0.0);
-      x_72_phi = x_65;
-      if ((x_8 < 0)) {
-      } else {
-        break;
-      }
-      x_57 = true;
-      x_58 = vec3<f32>(1.0, 1.0, 1.0);
-      x_71_phi = vec3<f32>(1.0, 1.0, 1.0);
-      x_72_phi = true;
-      break;
-
-      continuing {
-        x_65_phi = false;
-        x_8_phi = 0;
-      }
-    }
-    x_71 = x_71_phi;
-    let x_72 : bool = x_72_phi;
-    x_75_phi = x_71;
-    if (x_72) {
-      break;
-    }
-    x_74 = vec3<f32>(0.0, 0.0, 0.0);
-    x_57 = true;
-    x_75_phi = x_74;
-    break;
-
-    continuing {
-      x_60_phi = false;
-    }
-  }
-  let x_75 : vec3<f32> = x_75_phi;
-  return x_75;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5b54e66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_36 = false;
-  bool x_37 = false;
-  int x_7 = 0;
-  bool x_38 = false;
-  float3 color = 0.0f;
-  bool x_40 = false;
-  float3 x_43 = 0.0f;
-  bool x_40_phi = false;
-  float3 x_42_phi = 0.0f;
-  bool x_56_phi = false;
-  bool x_58_phi = false;
-  x_40_phi = false;
-  x_42_phi = float3(0.0f, 0.0f, 0.0f);
-  while (true) {
-    float3 x_43_phi = 0.0f;
-    x_40 = x_40_phi;
-    float3 const x_42 = x_42_phi;
-    float const x_47 = x_5.injectionSwitch.y;
-    x_43_phi = x_42;
-    if ((x_47 < 0.0f)) {
-      color = float3(1.0f, 1.0f, 1.0f);
-      x_43_phi = float3(1.0f, 1.0f, 1.0f);
-    }
-    x_43 = x_43_phi;
-    {
-      x_40_phi = x_40;
-      x_42_phi = x_43;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_36 = false;
-  x_56_phi = x_40;
-  x_58_phi = false;
-  while (true) {
-    bool x_62 = false;
-    bool x_62_phi = false;
-    bool x_64_phi = false;
-    int x_65_phi = 0;
-    bool x_70_phi = false;
-    bool x_71_phi = false;
-    bool const x_56 = x_56_phi;
-    bool const x_58 = x_58_phi;
-    x_7 = 0;
-    x_62_phi = x_56;
-    x_64_phi = false;
-    x_65_phi = 0;
-    while (true) {
-      x_62 = x_62_phi;
-      bool const x_64 = x_64_phi;
-      int const x_65 = x_65_phi;
-      bool const x_68 = (0 < 1);
-      x_70_phi = x_62;
-      x_71_phi = false;
-      if (true) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = true;
-      x_70_phi = true;
-      x_71_phi = true;
-      break;
-      {
-        x_62_phi = false;
-        x_64_phi = false;
-        x_65_phi = 0;
-      }
-    }
-    bool const x_70 = x_70_phi;
-    bool const x_71 = x_71_phi;
-    if (true) {
-      break;
-    }
-    x_36 = true;
-    break;
-    {
-      x_56_phi = false;
-      x_58_phi = false;
-    }
-  }
-  x_38 = true;
-  float const x_73 = select(0.0f, 1.0f, true);
-  *(tint_symbol_3) = (float4(x_43.x, x_43.y, x_43.z, 1.0f) + float4(x_73, x_73, x_73, x_73));
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index acc14da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,224 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 116
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_37 "x_37"
-               OpName %x_7 "x_7"
-               OpName %x_38 "x_38"
-               OpName %color "color"
-               OpName %x_40 "x_40"
-               OpName %x_43 "x_43"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_43_phi "x_43_phi"
-               OpName %x_62 "x_62"
-               OpName %x_62_phi "x_62_phi"
-               OpName %x_64_phi "x_64_phi"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_71_phi "x_71_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %20 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %30 = OpConstantNull %v3float
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %56 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_2 = OpConstant %uint 2
-        %104 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %105 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_bool Function %20
-       %x_37 = OpVariable %_ptr_Function_bool Function %20
-        %x_7 = OpVariable %_ptr_Function_int Function %25
-       %x_38 = OpVariable %_ptr_Function_bool Function %20
-      %color = OpVariable %_ptr_Function_v3float Function %30
-       %x_40 = OpVariable %_ptr_Function_bool Function %20
-       %x_43 = OpVariable %_ptr_Function_v3float Function %30
-   %x_40_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_42_phi = OpVariable %_ptr_Function_v3float Function %30
-   %x_56_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_58_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_43_phi = OpVariable %_ptr_Function_v3float Function %30
-       %x_62 = OpVariable %_ptr_Function_bool Function %20
-   %x_62_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_64_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_65_phi = OpVariable %_ptr_Function_int Function %25
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_71_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_36 %false
-               OpStore %x_40_phi %false
-               OpStore %x_42_phi %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %44 = OpLoad %bool %x_40_phi
-               OpStore %x_40 %44
-         %45 = OpLoad %v3float %x_42_phi
-         %50 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %51 = OpLoad %float %50
-               OpStore %x_43_phi %45
-         %52 = OpFOrdLessThan %bool %51 %float_0
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpStore %color %56
-               OpStore %x_43_phi %56
-               OpBranch %53
-         %53 = OpLabel
-         %57 = OpLoad %v3float %x_43_phi
-               OpStore %x_43 %57
-               OpBranch %41
-         %41 = OpLabel
-         %58 = OpLoad %bool %x_40
-               OpStore %x_40_phi %58
-         %59 = OpLoad %v3float %x_43
-               OpStore %x_42_phi %59
-               OpBranchConditional %false %39 %40
-         %40 = OpLabel
-               OpStore %x_36 %false
-         %60 = OpLoad %bool %x_40
-               OpStore %x_56_phi %60
-               OpStore %x_58_phi %false
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %71 = OpLoad %bool %x_56_phi
-         %72 = OpLoad %bool %x_58_phi
-               OpStore %x_7 %int_0
-               OpStore %x_62_phi %71
-               OpStore %x_64_phi %false
-               OpStore %x_65_phi %int_0
-               OpBranch %74
-         %74 = OpLabel
-               OpLoopMerge %75 %76 None
-               OpBranch %77
-         %77 = OpLabel
-         %78 = OpLoad %bool %x_62_phi
-               OpStore %x_62 %78
-         %79 = OpLoad %bool %x_64_phi
-         %80 = OpLoad %int %x_65_phi
-         %82 = OpSLessThan %bool %int_0 %int_1
-         %83 = OpLoad %bool %x_62
-               OpStore %x_70_phi %83
-               OpStore %x_71_phi %false
-               OpSelectionMerge %85 None
-               OpBranchConditional %true %86 %87
-         %86 = OpLabel
-               OpBranch %85
-         %87 = OpLabel
-               OpBranch %75
-         %85 = OpLabel
-               OpStore %x_36 %true
-               OpStore %x_37 %true
-               OpStore %x_70_phi %true
-               OpStore %x_71_phi %true
-               OpBranch %75
-         %76 = OpLabel
-               OpStore %x_62_phi %false
-               OpStore %x_64_phi %false
-               OpStore %x_65_phi %int_0
-               OpBranch %74
-         %75 = OpLabel
-         %88 = OpLoad %bool %x_70_phi
-         %89 = OpLoad %bool %x_71_phi
-               OpSelectionMerge %90 None
-               OpBranchConditional %true %91 %90
-         %91 = OpLabel
-               OpBranch %62
-         %90 = OpLabel
-               OpStore %x_36 %true
-               OpBranch %62
-         %63 = OpLabel
-               OpStore %x_56_phi %false
-               OpStore %x_58_phi %false
-               OpBranch %61
-         %62 = OpLabel
-               OpStore %x_38 %true
-         %92 = OpSelect %float %true %float_1 %float_0
-         %94 = OpAccessChain %_ptr_Function_float %x_43 %uint_0
-         %95 = OpLoad %float %94
-         %96 = OpAccessChain %_ptr_Function_float %x_43 %uint_1
-         %97 = OpLoad %float %96
-         %99 = OpAccessChain %_ptr_Function_float %x_43 %uint_2
-        %100 = OpLoad %float %99
-        %101 = OpCompositeConstruct %v4float %95 %97 %100 %float_1
-        %102 = OpCompositeConstruct %v4float %92 %92 %92 %92
-        %103 = OpFAdd %v4float %101 %102
-               OpStore %x_GLF_color %103
-               OpStore %x_GLF_color %104
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %105
-        %108 = OpLabel
-        %109 = OpFunctionCall %void %main_1
-        %110 = OpLoad %v4float %x_GLF_color
-        %111 = OpCompositeConstruct %main_out %110
-               OpReturnValue %111
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %113 = OpLabel
-        %114 = OpFunctionCall %main_out %main_inner
-        %115 = OpCompositeExtract %v4float %114 0
-               OpStore %x_GLF_color_1_1 %115
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b1bfcca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,113 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : bool = false;
-  var x_37 : bool;
-  var x_7 : i32;
-  var x_38 : bool;
-  var color : vec3<f32>;
-  var x_40 : bool;
-  var x_43 : vec3<f32>;
-  var x_40_phi : bool;
-  var x_42_phi : vec3<f32>;
-  var x_56_phi : bool;
-  var x_58_phi : bool;
-  x_40_phi = false;
-  x_42_phi = vec3<f32>(0.0, 0.0, 0.0);
-  loop {
-    var x_43_phi : vec3<f32>;
-    x_40 = x_40_phi;
-    let x_42 : vec3<f32> = x_42_phi;
-    let x_47 : f32 = x_5.injectionSwitch.y;
-    x_43_phi = x_42;
-    if ((x_47 < 0.0)) {
-      color = vec3<f32>(1.0, 1.0, 1.0);
-      x_43_phi = vec3<f32>(1.0, 1.0, 1.0);
-    }
-    x_43 = x_43_phi;
-
-    continuing {
-      x_40_phi = x_40;
-      x_42_phi = x_43;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_36 = false;
-  x_56_phi = x_40;
-  x_58_phi = false;
-  loop {
-    var x_62 : bool;
-    var x_62_phi : bool;
-    var x_64_phi : bool;
-    var x_65_phi : i32;
-    var x_70_phi : bool;
-    var x_71_phi : bool;
-    let x_56 : bool = x_56_phi;
-    let x_58 : bool = x_58_phi;
-    x_7 = 0;
-    x_62_phi = x_56;
-    x_64_phi = false;
-    x_65_phi = 0;
-    loop {
-      x_62 = x_62_phi;
-      let x_64 : bool = x_64_phi;
-      let x_65 : i32 = x_65_phi;
-      let x_68 : bool = (0 < 1);
-      x_70_phi = x_62;
-      x_71_phi = false;
-      if (true) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = true;
-      x_70_phi = true;
-      x_71_phi = true;
-      break;
-
-      continuing {
-        x_62_phi = false;
-        x_64_phi = false;
-        x_65_phi = 0;
-      }
-    }
-    let x_70 : bool = x_70_phi;
-    let x_71 : bool = x_71_phi;
-    if (true) {
-      break;
-    }
-    x_36 = true;
-    break;
-
-    continuing {
-      x_56_phi = false;
-      x_58_phi = false;
-    }
-  }
-  x_38 = true;
-  let x_73 : f32 = select(0.0, 1.0, true);
-  x_GLF_color = (vec4<f32>(x_43.x, x_43.y, x_43.z, 1.0) + vec4<f32>(x_73, x_73, x_73, x_73));
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5b54e66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  bool x_36 = false;
-  bool x_37 = false;
-  int x_7 = 0;
-  bool x_38 = false;
-  float3 color = 0.0f;
-  bool x_40 = false;
-  float3 x_43 = 0.0f;
-  bool x_40_phi = false;
-  float3 x_42_phi = 0.0f;
-  bool x_56_phi = false;
-  bool x_58_phi = false;
-  x_40_phi = false;
-  x_42_phi = float3(0.0f, 0.0f, 0.0f);
-  while (true) {
-    float3 x_43_phi = 0.0f;
-    x_40 = x_40_phi;
-    float3 const x_42 = x_42_phi;
-    float const x_47 = x_5.injectionSwitch.y;
-    x_43_phi = x_42;
-    if ((x_47 < 0.0f)) {
-      color = float3(1.0f, 1.0f, 1.0f);
-      x_43_phi = float3(1.0f, 1.0f, 1.0f);
-    }
-    x_43 = x_43_phi;
-    {
-      x_40_phi = x_40;
-      x_42_phi = x_43;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_36 = false;
-  x_56_phi = x_40;
-  x_58_phi = false;
-  while (true) {
-    bool x_62 = false;
-    bool x_62_phi = false;
-    bool x_64_phi = false;
-    int x_65_phi = 0;
-    bool x_70_phi = false;
-    bool x_71_phi = false;
-    bool const x_56 = x_56_phi;
-    bool const x_58 = x_58_phi;
-    x_7 = 0;
-    x_62_phi = x_56;
-    x_64_phi = false;
-    x_65_phi = 0;
-    while (true) {
-      x_62 = x_62_phi;
-      bool const x_64 = x_64_phi;
-      int const x_65 = x_65_phi;
-      bool const x_68 = (0 < 1);
-      x_70_phi = x_62;
-      x_71_phi = false;
-      if (true) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = true;
-      x_70_phi = true;
-      x_71_phi = true;
-      break;
-      {
-        x_62_phi = false;
-        x_64_phi = false;
-        x_65_phi = 0;
-      }
-    }
-    bool const x_70 = x_70_phi;
-    bool const x_71 = x_71_phi;
-    if (true) {
-      break;
-    }
-    x_36 = true;
-    break;
-    {
-      x_56_phi = false;
-      x_58_phi = false;
-    }
-  }
-  x_38 = true;
-  float const x_73 = select(0.0f, 1.0f, true);
-  *(tint_symbol_3) = (float4(x_43.x, x_43.y, x_43.z, 1.0f) + float4(x_73, x_73, x_73, x_73));
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index acc14da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,224 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 116
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_36 "x_36"
-               OpName %x_37 "x_37"
-               OpName %x_7 "x_7"
-               OpName %x_38 "x_38"
-               OpName %color "color"
-               OpName %x_40 "x_40"
-               OpName %x_43 "x_43"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_43_phi "x_43_phi"
-               OpName %x_62 "x_62"
-               OpName %x_62_phi "x_62_phi"
-               OpName %x_64_phi "x_64_phi"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_71_phi "x_71_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %20 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpConstantNull %int
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %30 = OpConstantNull %v3float
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-         %56 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_2 = OpConstant %uint 2
-        %104 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %105 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_36 = OpVariable %_ptr_Function_bool Function %20
-       %x_37 = OpVariable %_ptr_Function_bool Function %20
-        %x_7 = OpVariable %_ptr_Function_int Function %25
-       %x_38 = OpVariable %_ptr_Function_bool Function %20
-      %color = OpVariable %_ptr_Function_v3float Function %30
-       %x_40 = OpVariable %_ptr_Function_bool Function %20
-       %x_43 = OpVariable %_ptr_Function_v3float Function %30
-   %x_40_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_42_phi = OpVariable %_ptr_Function_v3float Function %30
-   %x_56_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_58_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_43_phi = OpVariable %_ptr_Function_v3float Function %30
-       %x_62 = OpVariable %_ptr_Function_bool Function %20
-   %x_62_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_64_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_65_phi = OpVariable %_ptr_Function_int Function %25
-   %x_70_phi = OpVariable %_ptr_Function_bool Function %20
-   %x_71_phi = OpVariable %_ptr_Function_bool Function %20
-               OpStore %x_36 %false
-               OpStore %x_40_phi %false
-               OpStore %x_42_phi %38
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-         %44 = OpLoad %bool %x_40_phi
-               OpStore %x_40 %44
-         %45 = OpLoad %v3float %x_42_phi
-         %50 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %51 = OpLoad %float %50
-               OpStore %x_43_phi %45
-         %52 = OpFOrdLessThan %bool %51 %float_0
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpStore %color %56
-               OpStore %x_43_phi %56
-               OpBranch %53
-         %53 = OpLabel
-         %57 = OpLoad %v3float %x_43_phi
-               OpStore %x_43 %57
-               OpBranch %41
-         %41 = OpLabel
-         %58 = OpLoad %bool %x_40
-               OpStore %x_40_phi %58
-         %59 = OpLoad %v3float %x_43
-               OpStore %x_42_phi %59
-               OpBranchConditional %false %39 %40
-         %40 = OpLabel
-               OpStore %x_36 %false
-         %60 = OpLoad %bool %x_40
-               OpStore %x_56_phi %60
-               OpStore %x_58_phi %false
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-         %71 = OpLoad %bool %x_56_phi
-         %72 = OpLoad %bool %x_58_phi
-               OpStore %x_7 %int_0
-               OpStore %x_62_phi %71
-               OpStore %x_64_phi %false
-               OpStore %x_65_phi %int_0
-               OpBranch %74
-         %74 = OpLabel
-               OpLoopMerge %75 %76 None
-               OpBranch %77
-         %77 = OpLabel
-         %78 = OpLoad %bool %x_62_phi
-               OpStore %x_62 %78
-         %79 = OpLoad %bool %x_64_phi
-         %80 = OpLoad %int %x_65_phi
-         %82 = OpSLessThan %bool %int_0 %int_1
-         %83 = OpLoad %bool %x_62
-               OpStore %x_70_phi %83
-               OpStore %x_71_phi %false
-               OpSelectionMerge %85 None
-               OpBranchConditional %true %86 %87
-         %86 = OpLabel
-               OpBranch %85
-         %87 = OpLabel
-               OpBranch %75
-         %85 = OpLabel
-               OpStore %x_36 %true
-               OpStore %x_37 %true
-               OpStore %x_70_phi %true
-               OpStore %x_71_phi %true
-               OpBranch %75
-         %76 = OpLabel
-               OpStore %x_62_phi %false
-               OpStore %x_64_phi %false
-               OpStore %x_65_phi %int_0
-               OpBranch %74
-         %75 = OpLabel
-         %88 = OpLoad %bool %x_70_phi
-         %89 = OpLoad %bool %x_71_phi
-               OpSelectionMerge %90 None
-               OpBranchConditional %true %91 %90
-         %91 = OpLabel
-               OpBranch %62
-         %90 = OpLabel
-               OpStore %x_36 %true
-               OpBranch %62
-         %63 = OpLabel
-               OpStore %x_56_phi %false
-               OpStore %x_58_phi %false
-               OpBranch %61
-         %62 = OpLabel
-               OpStore %x_38 %true
-         %92 = OpSelect %float %true %float_1 %float_0
-         %94 = OpAccessChain %_ptr_Function_float %x_43 %uint_0
-         %95 = OpLoad %float %94
-         %96 = OpAccessChain %_ptr_Function_float %x_43 %uint_1
-         %97 = OpLoad %float %96
-         %99 = OpAccessChain %_ptr_Function_float %x_43 %uint_2
-        %100 = OpLoad %float %99
-        %101 = OpCompositeConstruct %v4float %95 %97 %100 %float_1
-        %102 = OpCompositeConstruct %v4float %92 %92 %92 %92
-        %103 = OpFAdd %v4float %101 %102
-               OpStore %x_GLF_color %103
-               OpStore %x_GLF_color %104
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %105
-        %108 = OpLabel
-        %109 = OpFunctionCall %void %main_1
-        %110 = OpLoad %v4float %x_GLF_color
-        %111 = OpCompositeConstruct %main_out %110
-               OpReturnValue %111
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %113 = OpLabel
-        %114 = OpFunctionCall %main_out %main_inner
-        %115 = OpCompositeExtract %v4float %114 0
-               OpStore %x_GLF_color_1_1 %115
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b1bfcca..0000000
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,113 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_36 : bool = false;
-  var x_37 : bool;
-  var x_7 : i32;
-  var x_38 : bool;
-  var color : vec3<f32>;
-  var x_40 : bool;
-  var x_43 : vec3<f32>;
-  var x_40_phi : bool;
-  var x_42_phi : vec3<f32>;
-  var x_56_phi : bool;
-  var x_58_phi : bool;
-  x_40_phi = false;
-  x_42_phi = vec3<f32>(0.0, 0.0, 0.0);
-  loop {
-    var x_43_phi : vec3<f32>;
-    x_40 = x_40_phi;
-    let x_42 : vec3<f32> = x_42_phi;
-    let x_47 : f32 = x_5.injectionSwitch.y;
-    x_43_phi = x_42;
-    if ((x_47 < 0.0)) {
-      color = vec3<f32>(1.0, 1.0, 1.0);
-      x_43_phi = vec3<f32>(1.0, 1.0, 1.0);
-    }
-    x_43 = x_43_phi;
-
-    continuing {
-      x_40_phi = x_40;
-      x_42_phi = x_43;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_36 = false;
-  x_56_phi = x_40;
-  x_58_phi = false;
-  loop {
-    var x_62 : bool;
-    var x_62_phi : bool;
-    var x_64_phi : bool;
-    var x_65_phi : i32;
-    var x_70_phi : bool;
-    var x_71_phi : bool;
-    let x_56 : bool = x_56_phi;
-    let x_58 : bool = x_58_phi;
-    x_7 = 0;
-    x_62_phi = x_56;
-    x_64_phi = false;
-    x_65_phi = 0;
-    loop {
-      x_62 = x_62_phi;
-      let x_64 : bool = x_64_phi;
-      let x_65 : i32 = x_65_phi;
-      let x_68 : bool = (0 < 1);
-      x_70_phi = x_62;
-      x_71_phi = false;
-      if (true) {
-      } else {
-        break;
-      }
-      x_36 = true;
-      x_37 = true;
-      x_70_phi = true;
-      x_71_phi = true;
-      break;
-
-      continuing {
-        x_62_phi = false;
-        x_64_phi = false;
-        x_65_phi = 0;
-      }
-    }
-    let x_70 : bool = x_70_phi;
-    let x_71 : bool = x_71_phi;
-    if (true) {
-      break;
-    }
-    x_36 = true;
-    break;
-
-    continuing {
-      x_56_phi = false;
-      x_58_phi = false;
-    }
-  }
-  x_38 = true;
-  let x_73 : f32 = select(0.0, 1.0, true);
-  x_GLF_color = (vec4<f32>(x_43.x, x_43.y, x_43.z, 1.0) + vec4<f32>(x_73, x_73, x_73, x_73));
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.hlsl
deleted file mode 100644
index efb270b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,106 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  while (true) {
-    float4 x_42 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    bool x_39 = false;
-    bool x_38_phi = false;
-    float4 x_41_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    const float x_32 = gl_FragCoord.x;
-    const int x_34 = int(clamp(x_32, 0.0f, 1.0f));
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_38_phi = false;
-    x_41_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    while (true) {
-      float4 x_42_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      int x_47_phi = 0;
-      bool x_39_phi = false;
-      const bool x_38 = x_38_phi;
-      x_42_phi = x_41_phi;
-      x_47_phi = 0;
-      while (true) {
-        float4 x_45 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        int x_48 = 0;
-        x_42 = x_42_phi;
-        const int x_47 = x_47_phi;
-        const float x_50 = asfloat(x_6[0].y);
-        x_39_phi = x_38;
-        if ((x_47 < (x_34 + int(x_50)))) {
-        } else {
-          break;
-        }
-        float4 x_66 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        float4 x_70 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        float4 x_45_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        if ((x_34 < 0)) {
-          x_39_phi = true;
-          break;
-        } else {
-          if ((x_34 == 1)) {
-            const float x_64 = float(x_34);
-            const float2 x_65 = float2(x_64, x_64);
-            x_66 = float4(x_65.x, x_42.y, x_42.z, x_65.y);
-            x_45_phi = x_66;
-          } else {
-            const float x_68 = float((x_34 + 1));
-            const float2 x_69 = float2(x_68, x_68);
-            x_70 = float4(x_69.x, x_42.y, x_42.z, x_69.y);
-            x_45_phi = x_70;
-          }
-          x_45 = x_45_phi;
-        }
-        {
-          x_48 = (x_47 + 1);
-          x_42_phi = x_45;
-          x_47_phi = x_48;
-        }
-      }
-      x_39 = x_39_phi;
-      if (x_39) {
-        break;
-      }
-      {
-        x_38_phi = x_39;
-        x_41_phi = x_42;
-        if ((x_34 < 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_39) {
-      break;
-    }
-    x_GLF_color = x_42;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.msl
deleted file mode 100644
index 54a7b6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  while (true) {
-    float4 x_42 = 0.0f;
-    bool x_39 = false;
-    bool x_38_phi = false;
-    float4 x_41_phi = 0.0f;
-    float const x_32 = (*(tint_symbol_3)).x;
-    int const x_34 = int(clamp(x_32, 0.0f, 1.0f));
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_38_phi = false;
-    x_41_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    while (true) {
-      float4 x_42_phi = 0.0f;
-      int x_47_phi = 0;
-      bool x_39_phi = false;
-      bool const x_38 = x_38_phi;
-      float4 const x_41 = x_41_phi;
-      x_42_phi = x_41;
-      x_47_phi = 0;
-      while (true) {
-        float4 x_45 = 0.0f;
-        int x_48 = 0;
-        x_42 = x_42_phi;
-        int const x_47 = x_47_phi;
-        float const x_50 = x_6.injectionSwitch.y;
-        x_39_phi = x_38;
-        if ((x_47 < as_type<int>((as_type<uint>(x_34) + as_type<uint>(int(x_50)))))) {
-        } else {
-          break;
-        }
-        float4 x_66 = 0.0f;
-        float4 x_70 = 0.0f;
-        float4 x_45_phi = 0.0f;
-        if ((x_34 < 0)) {
-          x_39_phi = true;
-          break;
-        } else {
-          if ((x_34 == 1)) {
-            float const x_64 = float(x_34);
-            float2 const x_65 = float2(x_64, x_64);
-            x_66 = float4(x_65.x, x_42.y, x_42.z, x_65.y);
-            x_45_phi = x_66;
-          } else {
-            float const x_68 = float(as_type<int>((as_type<uint>(x_34) + as_type<uint>(1))));
-            float2 const x_69 = float2(x_68, x_68);
-            x_70 = float4(x_69.x, x_42.y, x_42.z, x_69.y);
-            x_45_phi = x_70;
-          }
-          x_45 = x_45_phi;
-        }
-        {
-          x_48 = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-          x_42_phi = x_45;
-          x_47_phi = x_48;
-        }
-      }
-      x_39 = x_39_phi;
-      if (x_39) {
-        break;
-      }
-      {
-        x_38_phi = x_39;
-        x_41_phi = x_42;
-        if ((x_34 < 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_39) {
-      break;
-    }
-    *(tint_symbol_4) = x_42;
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index 8142eed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,240 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 138
-; Schema: 0
-               OpCapability Shader
-         %39 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %x_42 "x_42"
-               OpName %x_39 "x_39"
-               OpName %x_38_phi "x_38_phi"
-               OpName %x_41_phi "x_41_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %x_47_phi "x_47_phi"
-               OpName %x_39_phi "x_39_phi"
-               OpName %x_45 "x_45"
-               OpName %x_48 "x_48"
-               OpName %x_66 "x_66"
-               OpName %x_70 "x_70"
-               OpName %x_45_phi "x_45_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %28 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-        %int = OpTypeInt 32 1
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %42 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %51 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-        %125 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_42 = OpVariable %_ptr_Function_v4float Function %7
-       %x_39 = OpVariable %_ptr_Function_bool Function %28
-   %x_38_phi = OpVariable %_ptr_Function_bool Function %28
-   %x_41_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_42_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_47_phi = OpVariable %_ptr_Function_int Function %51
-   %x_39_phi = OpVariable %_ptr_Function_bool Function %28
-       %x_45 = OpVariable %_ptr_Function_v4float Function %7
-       %x_48 = OpVariable %_ptr_Function_int Function %51
-       %x_66 = OpVariable %_ptr_Function_v4float Function %7
-       %x_70 = OpVariable %_ptr_Function_v4float Function %7
-   %x_45_phi = OpVariable %_ptr_Function_v4float Function %7
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %34 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %35 = OpLoad %float %34
-         %38 = OpExtInst %float %39 NClamp %35 %float_0 %float_1
-         %36 = OpConvertFToS %int %38
-               OpStore %x_GLF_color %42
-               OpStore %x_38_phi %false
-               OpStore %x_41_phi %42
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %53 = OpLoad %bool %x_38_phi
-         %54 = OpLoad %v4float %x_41_phi
-               OpStore %x_42_phi %54
-               OpStore %x_47_phi %int_0
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %62 = OpLoad %v4float %x_42_phi
-               OpStore %x_42 %62
-         %63 = OpLoad %int %x_47_phi
-         %66 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %67 = OpLoad %float %66
-               OpStore %x_39_phi %53
-         %68 = OpConvertFToS %int %67
-         %69 = OpIAdd %int %36 %68
-         %70 = OpSLessThan %bool %63 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %57
-         %71 = OpLabel
-         %77 = OpSLessThan %bool %36 %int_0
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpStore %x_39_phi %true
-               OpBranch %57
-         %80 = OpLabel
-         %83 = OpIEqual %bool %36 %int_1
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-         %87 = OpConvertSToF %float %36
-         %88 = OpCompositeConstruct %v2float %87 %87
-         %89 = OpCompositeExtract %float %88 0
-         %91 = OpAccessChain %_ptr_Function_float %x_42 %uint_1
-         %92 = OpLoad %float %91
-         %94 = OpAccessChain %_ptr_Function_float %x_42 %uint_2
-         %95 = OpLoad %float %94
-         %96 = OpCompositeExtract %float %88 1
-         %97 = OpCompositeConstruct %v4float %89 %92 %95 %96
-               OpStore %x_66 %97
-         %98 = OpLoad %v4float %x_66
-               OpStore %x_45_phi %98
-               OpBranch %84
-         %86 = OpLabel
-        %100 = OpIAdd %int %36 %int_1
-         %99 = OpConvertSToF %float %100
-        %101 = OpCompositeConstruct %v2float %99 %99
-        %102 = OpCompositeExtract %float %101 0
-        %103 = OpAccessChain %_ptr_Function_float %x_42 %uint_1
-        %104 = OpLoad %float %103
-        %105 = OpAccessChain %_ptr_Function_float %x_42 %uint_2
-        %106 = OpLoad %float %105
-        %107 = OpCompositeExtract %float %101 1
-        %108 = OpCompositeConstruct %v4float %102 %104 %106 %107
-               OpStore %x_70 %108
-        %109 = OpLoad %v4float %x_70
-               OpStore %x_45_phi %109
-               OpBranch %84
-         %84 = OpLabel
-        %110 = OpLoad %v4float %x_45_phi
-               OpStore %x_45 %110
-               OpBranch %78
-         %78 = OpLabel
-               OpBranch %58
-         %58 = OpLabel
-        %111 = OpIAdd %int %63 %int_1
-               OpStore %x_48 %111
-        %112 = OpLoad %v4float %x_45
-               OpStore %x_42_phi %112
-        %113 = OpLoad %int %x_48
-               OpStore %x_47_phi %113
-               OpBranch %56
-         %57 = OpLabel
-        %114 = OpLoad %bool %x_39_phi
-               OpStore %x_39 %114
-        %115 = OpLoad %bool %x_39
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-               OpBranch %45
-        %116 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-        %118 = OpLoad %bool %x_39
-               OpStore %x_38_phi %118
-        %119 = OpLoad %v4float %x_42
-               OpStore %x_41_phi %119
-        %120 = OpSLessThan %bool %36 %int_0
-               OpBranchConditional %120 %44 %45
-         %45 = OpLabel
-        %121 = OpLoad %bool %x_39
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-               OpBranch %20
-        %122 = OpLabel
-        %124 = OpLoad %v4float %x_42
-               OpStore %x_GLF_color %124
-               OpBranch %20
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %125
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %129 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %130 = OpFunctionCall %void %main_1
-        %131 = OpLoad %v4float %x_GLF_color
-        %132 = OpCompositeConstruct %main_out %131
-               OpReturnValue %132
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %134 = OpLabel
-        %136 = OpLoad %v4float %gl_FragCoord_param_1
-        %135 = OpFunctionCall %main_out %main_inner %136
-        %137 = OpCompositeExtract %v4float %135 0
-               OpStore %x_GLF_color_1_1 %137
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index ee729d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,102 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  loop {
-    var x_42 : vec4<f32>;
-    var x_39 : bool;
-    var x_38_phi : bool;
-    var x_41_phi : vec4<f32>;
-    let x_32 : f32 = gl_FragCoord.x;
-    let x_34 : i32 = i32(clamp(x_32, 0.0, 1.0));
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    x_38_phi = false;
-    x_41_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    loop {
-      var x_42_phi : vec4<f32>;
-      var x_47_phi : i32;
-      var x_39_phi : bool;
-      let x_38 : bool = x_38_phi;
-      let x_41 : vec4<f32> = x_41_phi;
-      x_42_phi = x_41;
-      x_47_phi = 0;
-      loop {
-        var x_45 : vec4<f32>;
-        var x_48 : i32;
-        x_42 = x_42_phi;
-        let x_47 : i32 = x_47_phi;
-        let x_50 : f32 = x_6.injectionSwitch.y;
-        x_39_phi = x_38;
-        if ((x_47 < (x_34 + i32(x_50)))) {
-        } else {
-          break;
-        }
-        var x_66 : vec4<f32>;
-        var x_70 : vec4<f32>;
-        var x_45_phi : vec4<f32>;
-        if ((x_34 < 0)) {
-          x_39_phi = true;
-          break;
-        } else {
-          if ((x_34 == 1)) {
-            let x_64 : f32 = f32(x_34);
-            let x_65 : vec2<f32> = vec2<f32>(x_64, x_64);
-            x_66 = vec4<f32>(x_65.x, x_42.y, x_42.z, x_65.y);
-            x_45_phi = x_66;
-          } else {
-            let x_68 : f32 = f32((x_34 + 1));
-            let x_69 : vec2<f32> = vec2<f32>(x_68, x_68);
-            x_70 = vec4<f32>(x_69.x, x_42.y, x_42.z, x_69.y);
-            x_45_phi = x_70;
-          }
-          x_45 = x_45_phi;
-        }
-
-        continuing {
-          x_48 = (x_47 + 1);
-          x_42_phi = x_45;
-          x_47_phi = x_48;
-        }
-      }
-      x_39 = x_39_phi;
-      if (x_39) {
-        break;
-      }
-
-      continuing {
-        x_38_phi = x_39;
-        x_41_phi = x_42;
-        if ((x_34 < 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_39) {
-      break;
-    }
-    x_GLF_color = x_42;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.hlsl
deleted file mode 100644
index efb270b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,106 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  while (true) {
-    float4 x_42 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    bool x_39 = false;
-    bool x_38_phi = false;
-    float4 x_41_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    const float x_32 = gl_FragCoord.x;
-    const int x_34 = int(clamp(x_32, 0.0f, 1.0f));
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_38_phi = false;
-    x_41_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    while (true) {
-      float4 x_42_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-      int x_47_phi = 0;
-      bool x_39_phi = false;
-      const bool x_38 = x_38_phi;
-      x_42_phi = x_41_phi;
-      x_47_phi = 0;
-      while (true) {
-        float4 x_45 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        int x_48 = 0;
-        x_42 = x_42_phi;
-        const int x_47 = x_47_phi;
-        const float x_50 = asfloat(x_6[0].y);
-        x_39_phi = x_38;
-        if ((x_47 < (x_34 + int(x_50)))) {
-        } else {
-          break;
-        }
-        float4 x_66 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        float4 x_70 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        float4 x_45_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        if ((x_34 < 0)) {
-          x_39_phi = true;
-          break;
-        } else {
-          if ((x_34 == 1)) {
-            const float x_64 = float(x_34);
-            const float2 x_65 = float2(x_64, x_64);
-            x_66 = float4(x_65.x, x_42.y, x_42.z, x_65.y);
-            x_45_phi = x_66;
-          } else {
-            const float x_68 = float((x_34 + 1));
-            const float2 x_69 = float2(x_68, x_68);
-            x_70 = float4(x_69.x, x_42.y, x_42.z, x_69.y);
-            x_45_phi = x_70;
-          }
-          x_45 = x_45_phi;
-        }
-        {
-          x_48 = (x_47 + 1);
-          x_42_phi = x_45;
-          x_47_phi = x_48;
-        }
-      }
-      x_39 = x_39_phi;
-      if (x_39) {
-        break;
-      }
-      {
-        x_38_phi = x_39;
-        x_41_phi = x_42;
-        if ((x_34 < 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_39) {
-      break;
-    }
-    x_GLF_color = x_42;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.msl
deleted file mode 100644
index 54a7b6b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  while (true) {
-    float4 x_42 = 0.0f;
-    bool x_39 = false;
-    bool x_38_phi = false;
-    float4 x_41_phi = 0.0f;
-    float const x_32 = (*(tint_symbol_3)).x;
-    int const x_34 = int(clamp(x_32, 0.0f, 1.0f));
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_38_phi = false;
-    x_41_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    while (true) {
-      float4 x_42_phi = 0.0f;
-      int x_47_phi = 0;
-      bool x_39_phi = false;
-      bool const x_38 = x_38_phi;
-      float4 const x_41 = x_41_phi;
-      x_42_phi = x_41;
-      x_47_phi = 0;
-      while (true) {
-        float4 x_45 = 0.0f;
-        int x_48 = 0;
-        x_42 = x_42_phi;
-        int const x_47 = x_47_phi;
-        float const x_50 = x_6.injectionSwitch.y;
-        x_39_phi = x_38;
-        if ((x_47 < as_type<int>((as_type<uint>(x_34) + as_type<uint>(int(x_50)))))) {
-        } else {
-          break;
-        }
-        float4 x_66 = 0.0f;
-        float4 x_70 = 0.0f;
-        float4 x_45_phi = 0.0f;
-        if ((x_34 < 0)) {
-          x_39_phi = true;
-          break;
-        } else {
-          if ((x_34 == 1)) {
-            float const x_64 = float(x_34);
-            float2 const x_65 = float2(x_64, x_64);
-            x_66 = float4(x_65.x, x_42.y, x_42.z, x_65.y);
-            x_45_phi = x_66;
-          } else {
-            float const x_68 = float(as_type<int>((as_type<uint>(x_34) + as_type<uint>(1))));
-            float2 const x_69 = float2(x_68, x_68);
-            x_70 = float4(x_69.x, x_42.y, x_42.z, x_69.y);
-            x_45_phi = x_70;
-          }
-          x_45 = x_45_phi;
-        }
-        {
-          x_48 = as_type<int>((as_type<uint>(x_47) + as_type<uint>(1)));
-          x_42_phi = x_45;
-          x_47_phi = x_48;
-        }
-      }
-      x_39 = x_39_phi;
-      if (x_39) {
-        break;
-      }
-      {
-        x_38_phi = x_39;
-        x_41_phi = x_42;
-        if ((x_34 < 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_39) {
-      break;
-    }
-    *(tint_symbol_4) = x_42;
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index 8142eed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,240 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 138
-; Schema: 0
-               OpCapability Shader
-         %39 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %x_42 "x_42"
-               OpName %x_39 "x_39"
-               OpName %x_38_phi "x_38_phi"
-               OpName %x_41_phi "x_41_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %x_47_phi "x_47_phi"
-               OpName %x_39_phi "x_39_phi"
-               OpName %x_45 "x_45"
-               OpName %x_48 "x_48"
-               OpName %x_66 "x_66"
-               OpName %x_70 "x_70"
-               OpName %x_45_phi "x_45_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %28 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-        %int = OpTypeInt 32 1
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %42 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %51 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-      %int_1 = OpConstant %int 1
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float
-        %125 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_42 = OpVariable %_ptr_Function_v4float Function %7
-       %x_39 = OpVariable %_ptr_Function_bool Function %28
-   %x_38_phi = OpVariable %_ptr_Function_bool Function %28
-   %x_41_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_42_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_47_phi = OpVariable %_ptr_Function_int Function %51
-   %x_39_phi = OpVariable %_ptr_Function_bool Function %28
-       %x_45 = OpVariable %_ptr_Function_v4float Function %7
-       %x_48 = OpVariable %_ptr_Function_int Function %51
-       %x_66 = OpVariable %_ptr_Function_v4float Function %7
-       %x_70 = OpVariable %_ptr_Function_v4float Function %7
-   %x_45_phi = OpVariable %_ptr_Function_v4float Function %7
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-         %34 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %35 = OpLoad %float %34
-         %38 = OpExtInst %float %39 NClamp %35 %float_0 %float_1
-         %36 = OpConvertFToS %int %38
-               OpStore %x_GLF_color %42
-               OpStore %x_38_phi %false
-               OpStore %x_41_phi %42
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %53 = OpLoad %bool %x_38_phi
-         %54 = OpLoad %v4float %x_41_phi
-               OpStore %x_42_phi %54
-               OpStore %x_47_phi %int_0
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %62 = OpLoad %v4float %x_42_phi
-               OpStore %x_42 %62
-         %63 = OpLoad %int %x_47_phi
-         %66 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %67 = OpLoad %float %66
-               OpStore %x_39_phi %53
-         %68 = OpConvertFToS %int %67
-         %69 = OpIAdd %int %36 %68
-         %70 = OpSLessThan %bool %63 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %57
-         %71 = OpLabel
-         %77 = OpSLessThan %bool %36 %int_0
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpStore %x_39_phi %true
-               OpBranch %57
-         %80 = OpLabel
-         %83 = OpIEqual %bool %36 %int_1
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-         %87 = OpConvertSToF %float %36
-         %88 = OpCompositeConstruct %v2float %87 %87
-         %89 = OpCompositeExtract %float %88 0
-         %91 = OpAccessChain %_ptr_Function_float %x_42 %uint_1
-         %92 = OpLoad %float %91
-         %94 = OpAccessChain %_ptr_Function_float %x_42 %uint_2
-         %95 = OpLoad %float %94
-         %96 = OpCompositeExtract %float %88 1
-         %97 = OpCompositeConstruct %v4float %89 %92 %95 %96
-               OpStore %x_66 %97
-         %98 = OpLoad %v4float %x_66
-               OpStore %x_45_phi %98
-               OpBranch %84
-         %86 = OpLabel
-        %100 = OpIAdd %int %36 %int_1
-         %99 = OpConvertSToF %float %100
-        %101 = OpCompositeConstruct %v2float %99 %99
-        %102 = OpCompositeExtract %float %101 0
-        %103 = OpAccessChain %_ptr_Function_float %x_42 %uint_1
-        %104 = OpLoad %float %103
-        %105 = OpAccessChain %_ptr_Function_float %x_42 %uint_2
-        %106 = OpLoad %float %105
-        %107 = OpCompositeExtract %float %101 1
-        %108 = OpCompositeConstruct %v4float %102 %104 %106 %107
-               OpStore %x_70 %108
-        %109 = OpLoad %v4float %x_70
-               OpStore %x_45_phi %109
-               OpBranch %84
-         %84 = OpLabel
-        %110 = OpLoad %v4float %x_45_phi
-               OpStore %x_45 %110
-               OpBranch %78
-         %78 = OpLabel
-               OpBranch %58
-         %58 = OpLabel
-        %111 = OpIAdd %int %63 %int_1
-               OpStore %x_48 %111
-        %112 = OpLoad %v4float %x_45
-               OpStore %x_42_phi %112
-        %113 = OpLoad %int %x_48
-               OpStore %x_47_phi %113
-               OpBranch %56
-         %57 = OpLabel
-        %114 = OpLoad %bool %x_39_phi
-               OpStore %x_39 %114
-        %115 = OpLoad %bool %x_39
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-               OpBranch %45
-        %116 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-        %118 = OpLoad %bool %x_39
-               OpStore %x_38_phi %118
-        %119 = OpLoad %v4float %x_42
-               OpStore %x_41_phi %119
-        %120 = OpSLessThan %bool %36 %int_0
-               OpBranchConditional %120 %44 %45
-         %45 = OpLabel
-        %121 = OpLoad %bool %x_39
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-               OpBranch %20
-        %122 = OpLabel
-        %124 = OpLoad %v4float %x_42
-               OpStore %x_GLF_color %124
-               OpBranch %20
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %125
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %129 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %130 = OpFunctionCall %void %main_1
-        %131 = OpLoad %v4float %x_GLF_color
-        %132 = OpCompositeConstruct %main_out %131
-               OpReturnValue %132
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %134 = OpLabel
-        %136 = OpLoad %v4float %gl_FragCoord_param_1
-        %135 = OpFunctionCall %main_out %main_inner %136
-        %137 = OpCompositeExtract %v4float %135 0
-               OpStore %x_GLF_color_1_1 %137
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index ee729d9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/set-color-in-one-iteration-while-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,102 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  loop {
-    var x_42 : vec4<f32>;
-    var x_39 : bool;
-    var x_38_phi : bool;
-    var x_41_phi : vec4<f32>;
-    let x_32 : f32 = gl_FragCoord.x;
-    let x_34 : i32 = i32(clamp(x_32, 0.0, 1.0));
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    x_38_phi = false;
-    x_41_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-    loop {
-      var x_42_phi : vec4<f32>;
-      var x_47_phi : i32;
-      var x_39_phi : bool;
-      let x_38 : bool = x_38_phi;
-      let x_41 : vec4<f32> = x_41_phi;
-      x_42_phi = x_41;
-      x_47_phi = 0;
-      loop {
-        var x_45 : vec4<f32>;
-        var x_48 : i32;
-        x_42 = x_42_phi;
-        let x_47 : i32 = x_47_phi;
-        let x_50 : f32 = x_6.injectionSwitch.y;
-        x_39_phi = x_38;
-        if ((x_47 < (x_34 + i32(x_50)))) {
-        } else {
-          break;
-        }
-        var x_66 : vec4<f32>;
-        var x_70 : vec4<f32>;
-        var x_45_phi : vec4<f32>;
-        if ((x_34 < 0)) {
-          x_39_phi = true;
-          break;
-        } else {
-          if ((x_34 == 1)) {
-            let x_64 : f32 = f32(x_34);
-            let x_65 : vec2<f32> = vec2<f32>(x_64, x_64);
-            x_66 = vec4<f32>(x_65.x, x_42.y, x_42.z, x_65.y);
-            x_45_phi = x_66;
-          } else {
-            let x_68 : f32 = f32((x_34 + 1));
-            let x_69 : vec2<f32> = vec2<f32>(x_68, x_68);
-            x_70 = vec4<f32>(x_69.x, x_42.y, x_42.z, x_69.y);
-            x_45_phi = x_70;
-          }
-          x_45 = x_45_phi;
-        }
-
-        continuing {
-          x_48 = (x_47 + 1);
-          x_42_phi = x_45;
-          x_47_phi = x_48;
-        }
-      }
-      x_39 = x_39_phi;
-      if (x_39) {
-        break;
-      }
-
-      continuing {
-        x_38_phi = x_39;
-        x_41_phi = x_42;
-        if ((x_34 < 0)) {
-        } else {
-          break;
-        }
-      }
-    }
-    if (x_39) {
-      break;
-    }
-    x_GLF_color = x_42;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index c7bc168..0000000
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float gv = 0.0f;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float lv = 0.0f;
-  float x_43 = 0.0f;
-  int GLF_live5r = 0;
-  int GLF_live5_looplimiter6 = 0;
-  const float x_45 = asfloat(x_7[0].y);
-  if ((1.0f > x_45)) {
-    x_43 = abs(gv);
-  } else {
-    x_43 = 260.0f;
-  }
-  lv = x_43;
-  if ((int(lv) < 250)) {
-    if ((int(lv) < 180)) {
-      const float x_65 = clamp(lv, 1.0f, 1.0f);
-    } else {
-      const float x_67 = gl_FragCoord.y;
-      if ((x_67 < 0.0f)) {
-        if ((int(lv) < 210)) {
-          while (true) {
-            {
-              if (true) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-        GLF_live5r = 0;
-        while (true) {
-          if (true) {
-          } else {
-            break;
-          }
-          if ((GLF_live5_looplimiter6 >= 6)) {
-            break;
-          }
-          GLF_live5_looplimiter6 = (GLF_live5_looplimiter6 + 1);
-        }
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.msl
deleted file mode 100644
index 882e276..0000000
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float* const tint_symbol_3, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float lv = 0.0f;
-  float x_43 = 0.0f;
-  int GLF_live5r = 0;
-  int GLF_live5_looplimiter6 = 0;
-  float const x_45 = x_7.injectionSwitch.y;
-  if ((1.0f > x_45)) {
-    float const x_50 = *(tint_symbol_3);
-    x_43 = fabs(x_50);
-  } else {
-    x_43 = 260.0f;
-  }
-  float const x_52 = x_43;
-  lv = x_52;
-  float const x_53 = lv;
-  if ((int(x_53) < 250)) {
-    float const x_58 = lv;
-    if ((int(x_58) < 180)) {
-      float const x_64 = lv;
-      float const x_65 = clamp(x_64, 1.0f, 1.0f);
-    } else {
-      float const x_67 = (*(tint_symbol_4)).y;
-      if ((x_67 < 0.0f)) {
-        float const x_71 = lv;
-        if ((int(x_71) < 210)) {
-          while (true) {
-            {
-              if (true) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-        GLF_live5r = 0;
-        while (true) {
-          if (true) {
-          } else {
-            break;
-          }
-          int const x_11 = GLF_live5_looplimiter6;
-          if ((x_11 >= 6)) {
-            break;
-          }
-          int const x_12 = GLF_live5_looplimiter6;
-          GLF_live5_looplimiter6 = as_type<int>((as_type<uint>(x_12) + as_type<uint>(1)));
-        }
-      }
-    }
-  }
-  *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_7, tint_symbol_6, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2d9494d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-         %44 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gv "gv"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %lv "lv"
-               OpName %x_43 "x_43"
-               OpName %GLF_live5r "GLF_live5r"
-               OpName %GLF_live5_looplimiter6 "GLF_live5_looplimiter6"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_float = OpTypePointer Private %float
-         %14 = OpConstantNull %float
-         %gv = OpVariable %_ptr_Private_float Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-  %float_260 = OpConstant %float 260
-    %int_250 = OpConstant %int 250
-    %int_180 = OpConstant %int 180
-    %float_0 = OpConstant %float 0
-    %int_210 = OpConstant %int 210
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-      %int_6 = OpConstant %int 6
-      %int_1 = OpConstant %int 1
-         %95 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %96 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %lv = OpVariable %_ptr_Function_float Function %14
-       %x_43 = OpVariable %_ptr_Function_float Function %14
- %GLF_live5r = OpVariable %_ptr_Function_int Function %28
-%GLF_live5_looplimiter6 = OpVariable %_ptr_Function_int Function %28
-         %34 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %35 = OpLoad %float %34
-         %37 = OpFOrdGreaterThan %bool %float_1 %35
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-         %42 = OpLoad %float %gv
-         %43 = OpExtInst %float %44 FAbs %42
-               OpStore %x_43 %43
-               OpBranch %39
-         %41 = OpLabel
-               OpStore %x_43 %float_260
-               OpBranch %39
-         %39 = OpLabel
-         %46 = OpLoad %float %x_43
-               OpStore %lv %46
-         %47 = OpLoad %float %lv
-         %48 = OpConvertFToS %int %47
-         %50 = OpSLessThan %bool %48 %int_250
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %53 = OpLoad %float %lv
-         %54 = OpConvertFToS %int %53
-         %56 = OpSLessThan %bool %54 %int_180
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpLoad %float %lv
-         %61 = OpExtInst %float %44 NClamp %60 %float_1 %float_1
-               OpBranch %57
-         %59 = OpLabel
-         %62 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %63 = OpLoad %float %62
-         %65 = OpFOrdLessThan %bool %63 %float_0
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %66
-         %67 = OpLabel
-         %68 = OpLoad %float %lv
-         %69 = OpConvertFToS %int %68
-         %71 = OpSLessThan %bool %69 %int_210
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpBranch %74
-         %74 = OpLabel
-               OpLoopMerge %75 %76 None
-               OpBranch %77
-         %77 = OpLabel
-               OpBranch %76
-         %76 = OpLabel
-               OpBranchConditional %true %74 %75
-         %75 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-               OpStore %GLF_live5r %int_0
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-               OpSelectionMerge %84 None
-               OpBranchConditional %true %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %81
-         %84 = OpLabel
-         %87 = OpLoad %int %GLF_live5_looplimiter6
-         %89 = OpSGreaterThanEqual %bool %87 %int_6
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-               OpBranch %81
-         %90 = OpLabel
-         %92 = OpLoad %int %GLF_live5_looplimiter6
-         %94 = OpIAdd %int %92 %int_1
-               OpStore %GLF_live5_looplimiter6 %94
-               OpBranch %82
-         %82 = OpLabel
-               OpBranch %80
-         %81 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-               OpStore %x_GLF_color %95
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %96
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %100 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %101 = OpFunctionCall %void %main_1
-        %102 = OpLoad %v4float %x_GLF_color
-        %103 = OpCompositeConstruct %main_out %102
-               OpReturnValue %103
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %105 = OpLabel
-        %107 = OpLoad %v4float %gl_FragCoord_param_1
-        %106 = OpFunctionCall %main_out %main_inner %107
-        %108 = OpCompositeExtract %v4float %106 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 592be78..0000000
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,79 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gv : f32;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var lv : f32;
-  var x_43 : f32;
-  var GLF_live5r : i32;
-  var GLF_live5_looplimiter6 : i32;
-  let x_45 : f32 = x_7.injectionSwitch.y;
-  if ((1.0 > x_45)) {
-    let x_50 : f32 = gv;
-    x_43 = abs(x_50);
-  } else {
-    x_43 = 260.0;
-  }
-  let x_52 : f32 = x_43;
-  lv = x_52;
-  let x_53 : f32 = lv;
-  if ((i32(x_53) < 250)) {
-    let x_58 : f32 = lv;
-    if ((i32(x_58) < 180)) {
-      let x_64 : f32 = lv;
-      let x_65 : f32 = clamp(x_64, 1.0, 1.0);
-    } else {
-      let x_67 : f32 = gl_FragCoord.y;
-      if ((x_67 < 0.0)) {
-        let x_71 : f32 = lv;
-        if ((i32(x_71) < 210)) {
-          loop {
-
-            continuing {
-              if (true) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-        GLF_live5r = 0;
-        loop {
-          if (true) {
-          } else {
-            break;
-          }
-          let x_11 : i32 = GLF_live5_looplimiter6;
-          if ((x_11 >= 6)) {
-            break;
-          }
-          let x_12 : i32 = GLF_live5_looplimiter6;
-          GLF_live5_looplimiter6 = (x_12 + 1);
-        }
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c7bc168..0000000
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,76 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float gv = 0.0f;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float lv = 0.0f;
-  float x_43 = 0.0f;
-  int GLF_live5r = 0;
-  int GLF_live5_looplimiter6 = 0;
-  const float x_45 = asfloat(x_7[0].y);
-  if ((1.0f > x_45)) {
-    x_43 = abs(gv);
-  } else {
-    x_43 = 260.0f;
-  }
-  lv = x_43;
-  if ((int(lv) < 250)) {
-    if ((int(lv) < 180)) {
-      const float x_65 = clamp(lv, 1.0f, 1.0f);
-    } else {
-      const float x_67 = gl_FragCoord.y;
-      if ((x_67 < 0.0f)) {
-        if ((int(lv) < 210)) {
-          while (true) {
-            {
-              if (true) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-        GLF_live5r = 0;
-        while (true) {
-          if (true) {
-          } else {
-            break;
-          }
-          if ((GLF_live5_looplimiter6 >= 6)) {
-            break;
-          }
-          GLF_live5_looplimiter6 = (GLF_live5_looplimiter6 + 1);
-        }
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.msl
deleted file mode 100644
index 882e276..0000000
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float* const tint_symbol_3, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float lv = 0.0f;
-  float x_43 = 0.0f;
-  int GLF_live5r = 0;
-  int GLF_live5_looplimiter6 = 0;
-  float const x_45 = x_7.injectionSwitch.y;
-  if ((1.0f > x_45)) {
-    float const x_50 = *(tint_symbol_3);
-    x_43 = fabs(x_50);
-  } else {
-    x_43 = 260.0f;
-  }
-  float const x_52 = x_43;
-  lv = x_52;
-  float const x_53 = lv;
-  if ((int(x_53) < 250)) {
-    float const x_58 = lv;
-    if ((int(x_58) < 180)) {
-      float const x_64 = lv;
-      float const x_65 = clamp(x_64, 1.0f, 1.0f);
-    } else {
-      float const x_67 = (*(tint_symbol_4)).y;
-      if ((x_67 < 0.0f)) {
-        float const x_71 = lv;
-        if ((int(x_71) < 210)) {
-          while (true) {
-            {
-              if (true) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-        GLF_live5r = 0;
-        while (true) {
-          if (true) {
-          } else {
-            break;
-          }
-          int const x_11 = GLF_live5_looplimiter6;
-          if ((x_11 >= 6)) {
-            break;
-          }
-          int const x_12 = GLF_live5_looplimiter6;
-          GLF_live5_looplimiter6 = as_type<int>((as_type<uint>(x_12) + as_type<uint>(1)));
-        }
-      }
-    }
-  }
-  *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_7, tint_symbol_6, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2d9494d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,191 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 109
-; Schema: 0
-               OpCapability Shader
-         %44 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gv "gv"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %lv "lv"
-               OpName %x_43 "x_43"
-               OpName %GLF_live5r "GLF_live5r"
-               OpName %GLF_live5_looplimiter6 "GLF_live5_looplimiter6"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_float = OpTypePointer Private %float
-         %14 = OpConstantNull %float
-         %gv = OpVariable %_ptr_Private_float Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-  %float_260 = OpConstant %float 260
-    %int_250 = OpConstant %int 250
-    %int_180 = OpConstant %int 180
-    %float_0 = OpConstant %float 0
-    %int_210 = OpConstant %int 210
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-      %int_6 = OpConstant %int 6
-      %int_1 = OpConstant %int 1
-         %95 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %96 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-         %lv = OpVariable %_ptr_Function_float Function %14
-       %x_43 = OpVariable %_ptr_Function_float Function %14
- %GLF_live5r = OpVariable %_ptr_Function_int Function %28
-%GLF_live5_looplimiter6 = OpVariable %_ptr_Function_int Function %28
-         %34 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %35 = OpLoad %float %34
-         %37 = OpFOrdGreaterThan %bool %float_1 %35
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-         %42 = OpLoad %float %gv
-         %43 = OpExtInst %float %44 FAbs %42
-               OpStore %x_43 %43
-               OpBranch %39
-         %41 = OpLabel
-               OpStore %x_43 %float_260
-               OpBranch %39
-         %39 = OpLabel
-         %46 = OpLoad %float %x_43
-               OpStore %lv %46
-         %47 = OpLoad %float %lv
-         %48 = OpConvertFToS %int %47
-         %50 = OpSLessThan %bool %48 %int_250
-               OpSelectionMerge %51 None
-               OpBranchConditional %50 %52 %51
-         %52 = OpLabel
-         %53 = OpLoad %float %lv
-         %54 = OpConvertFToS %int %53
-         %56 = OpSLessThan %bool %54 %int_180
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %59
-         %58 = OpLabel
-         %60 = OpLoad %float %lv
-         %61 = OpExtInst %float %44 NClamp %60 %float_1 %float_1
-               OpBranch %57
-         %59 = OpLabel
-         %62 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %63 = OpLoad %float %62
-         %65 = OpFOrdLessThan %bool %63 %float_0
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %66
-         %67 = OpLabel
-         %68 = OpLoad %float %lv
-         %69 = OpConvertFToS %int %68
-         %71 = OpSLessThan %bool %69 %int_210
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpBranch %74
-         %74 = OpLabel
-               OpLoopMerge %75 %76 None
-               OpBranch %77
-         %77 = OpLabel
-               OpBranch %76
-         %76 = OpLabel
-               OpBranchConditional %true %74 %75
-         %75 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-               OpStore %GLF_live5r %int_0
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-               OpSelectionMerge %84 None
-               OpBranchConditional %true %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %81
-         %84 = OpLabel
-         %87 = OpLoad %int %GLF_live5_looplimiter6
-         %89 = OpSGreaterThanEqual %bool %87 %int_6
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-               OpBranch %81
-         %90 = OpLabel
-         %92 = OpLoad %int %GLF_live5_looplimiter6
-         %94 = OpIAdd %int %92 %int_1
-               OpStore %GLF_live5_looplimiter6 %94
-               OpBranch %82
-         %82 = OpLabel
-               OpBranch %80
-         %81 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-               OpStore %x_GLF_color %95
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %96
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %100 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %101 = OpFunctionCall %void %main_1
-        %102 = OpLoad %v4float %x_GLF_color
-        %103 = OpCompositeConstruct %main_out %102
-               OpReturnValue %103
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %105 = OpLabel
-        %107 = OpLoad %v4float %gl_FragCoord_param_1
-        %106 = OpFunctionCall %main_out %main_inner %107
-        %108 = OpCompositeExtract %v4float %106 0
-               OpStore %x_GLF_color_1_1 %108
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 592be78..0000000
--- a/test/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,79 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gv : f32;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var lv : f32;
-  var x_43 : f32;
-  var GLF_live5r : i32;
-  var GLF_live5_looplimiter6 : i32;
-  let x_45 : f32 = x_7.injectionSwitch.y;
-  if ((1.0 > x_45)) {
-    let x_50 : f32 = gv;
-    x_43 = abs(x_50);
-  } else {
-    x_43 = 260.0;
-  }
-  let x_52 : f32 = x_43;
-  lv = x_52;
-  let x_53 : f32 = lv;
-  if ((i32(x_53) < 250)) {
-    let x_58 : f32 = lv;
-    if ((i32(x_58) < 180)) {
-      let x_64 : f32 = lv;
-      let x_65 : f32 = clamp(x_64, 1.0, 1.0);
-    } else {
-      let x_67 : f32 = gl_FragCoord.y;
-      if ((x_67 < 0.0)) {
-        let x_71 : f32 = lv;
-        if ((i32(x_71) < 210)) {
-          loop {
-
-            continuing {
-              if (true) {
-              } else {
-                break;
-              }
-            }
-          }
-        }
-        GLF_live5r = 0;
-        loop {
-          if (true) {
-          } else {
-            break;
-          }
-          let x_11 : i32 = GLF_live5_looplimiter6;
-          if ((x_11 >= 6)) {
-            break;
-          }
-          let x_12 : i32 = GLF_live5_looplimiter6;
-          GLF_live5_looplimiter6 = (x_12 + 1);
-        }
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 65fb693..0000000
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int GLF_live9r = 0;
-  float g = 0.0f;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-    const int x_32 = clamp(GLF_live9r, 0, 1);
-  }
-  g = 3.0f;
-  x_GLF_color = float4(smoothstep(0.0f, 1.0f, g), 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 079142b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int GLF_live9r = 0;
-  float g = 0.0f;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-    int const x_31 = GLF_live9r;
-    int const x_32 = clamp(x_31, 0, 1);
-  }
-  g = 3.0f;
-  float const x_33 = g;
-  *(tint_symbol_3) = float4(smoothstep(0.0f, 1.0f, x_33), 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0f1771b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-         %32 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %GLF_live9r "GLF_live9r"
-               OpName %g "g"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_3 = OpConstant %float 3
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
- %GLF_live9r = OpVariable %_ptr_Function_int Function %15
-          %g = OpVariable %_ptr_Function_float Function %18
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-               OpSelectionMerge %25 None
-               OpBranchConditional %true %26 %27
-         %26 = OpLabel
-               OpBranch %25
-         %27 = OpLabel
-               OpBranch %20
-         %25 = OpLabel
-               OpSelectionMerge %28 None
-               OpBranchConditional %true %29 %28
-         %29 = OpLabel
-               OpBranch %20
-         %28 = OpLabel
-         %30 = OpLoad %int %GLF_live9r
-         %31 = OpExtInst %int %32 SClamp %30 %int_0 %int_1
-               OpBranch %21
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpStore %g %float_3
-         %36 = OpLoad %float %g
-         %37 = OpExtInst %float %32 SmoothStep %float_0 %float_1 %36
-         %40 = OpCompositeConstruct %v4float %37 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %40
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3f8d86d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var GLF_live9r : i32;
-  var g : f32;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-    let x_31 : i32 = GLF_live9r;
-    let x_32 : i32 = clamp(x_31, 0, 1);
-  }
-  g = 3.0;
-  let x_33 : f32 = g;
-  x_GLF_color = vec4<f32>(smoothStep(0.0, 1.0, x_33), 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 65fb693..0000000
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int GLF_live9r = 0;
-  float g = 0.0f;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-    const int x_32 = clamp(GLF_live9r, 0, 1);
-  }
-  g = 3.0f;
-  x_GLF_color = float4(smoothstep(0.0f, 1.0f, g), 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 079142b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int GLF_live9r = 0;
-  float g = 0.0f;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-    int const x_31 = GLF_live9r;
-    int const x_32 = clamp(x_31, 0, 1);
-  }
-  g = 3.0f;
-  float const x_33 = g;
-  *(tint_symbol_3) = float4(smoothstep(0.0f, 1.0f, x_33), 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0f1771b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 52
-; Schema: 0
-               OpCapability Shader
-         %32 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %GLF_live9r "GLF_live9r"
-               OpName %g "g"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_3 = OpConstant %float 3
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %41 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
- %GLF_live9r = OpVariable %_ptr_Function_int Function %15
-          %g = OpVariable %_ptr_Function_float Function %18
-               OpBranch %19
-         %19 = OpLabel
-               OpLoopMerge %20 %21 None
-               OpBranch %22
-         %22 = OpLabel
-               OpSelectionMerge %25 None
-               OpBranchConditional %true %26 %27
-         %26 = OpLabel
-               OpBranch %25
-         %27 = OpLabel
-               OpBranch %20
-         %25 = OpLabel
-               OpSelectionMerge %28 None
-               OpBranchConditional %true %29 %28
-         %29 = OpLabel
-               OpBranch %20
-         %28 = OpLabel
-         %30 = OpLoad %int %GLF_live9r
-         %31 = OpExtInst %int %32 SClamp %30 %int_0 %int_1
-               OpBranch %21
-         %21 = OpLabel
-               OpBranch %19
-         %20 = OpLabel
-               OpStore %g %float_3
-         %36 = OpLoad %float %g
-         %37 = OpExtInst %float %32 SmoothStep %float_0 %float_1 %36
-         %40 = OpCompositeConstruct %v4float %37 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %40
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %41
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %main_1
-         %46 = OpLoad %v4float %x_GLF_color
-         %47 = OpCompositeConstruct %main_out %46
-               OpReturnValue %47
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %49 = OpLabel
-         %50 = OpFunctionCall %main_out %main_inner
-         %51 = OpCompositeExtract %v4float %50 0
-               OpStore %x_GLF_color_1_1 %51
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3f8d86d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/smoothstep-after-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var GLF_live9r : i32;
-  var g : f32;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    if (true) {
-      break;
-    }
-    let x_31 : i32 = GLF_live9r;
-    let x_32 : i32 = clamp(x_31, 0, 1);
-  }
-  g = 3.0;
-  let x_33 : f32 = g;
-  x_GLF_color = vec4<f32>(smoothStep(0.0, 1.0, x_33), 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a922b72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,297 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static int map[256] = (int[256])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int i = 0;
-  int2 p = int2(0, 0);
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  const float4 x_57 = gl_FragCoord;
-  const float2 x_60 = asfloat(x_7[0].xy);
-  pos = (float2(x_57.x, x_57.y) / x_60);
-  const float x_63 = pos.x;
-  const float x_67 = pos.y;
-  ipos = int2(int((x_63 * 16.0f)), int((x_67 * 16.0f)));
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      map[i] = 0;
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_102 = false;
-    bool x_122 = false;
-    bool x_142 = false;
-    bool x_162 = false;
-    bool x_103_phi = false;
-    bool x_123_phi = false;
-    bool x_143_phi = false;
-    bool x_163_phi = false;
-    v = (v + 1);
-    directions = 0;
-    const int x_89 = p.x;
-    const bool x_90 = (x_89 > 0);
-    x_103_phi = x_90;
-    if (x_90) {
-      const int x_94 = p.x;
-      const int x_97 = p.y;
-      const int x_101 = map[((x_94 - 2) + (x_97 * 16))];
-      x_102 = (x_101 == 0);
-      x_103_phi = x_102;
-    }
-    if (x_103_phi) {
-      directions = (directions + 1);
-    }
-    const int x_109 = p.y;
-    const bool x_110 = (x_109 > 0);
-    x_123_phi = x_110;
-    if (x_110) {
-      const int x_114 = p.x;
-      const int x_116 = p.y;
-      const int x_121 = map[(x_114 + ((x_116 - 2) * 16))];
-      x_122 = (x_121 == 0);
-      x_123_phi = x_122;
-    }
-    if (x_123_phi) {
-      directions = (directions + 1);
-    }
-    const int x_129 = p.x;
-    const bool x_130 = (x_129 < 14);
-    x_143_phi = x_130;
-    if (x_130) {
-      const int x_134 = p.x;
-      const int x_137 = p.y;
-      const int x_141 = map[((x_134 + 2) + (x_137 * 16))];
-      x_142 = (x_141 == 0);
-      x_143_phi = x_142;
-    }
-    if (x_143_phi) {
-      directions = (directions + 1);
-    }
-    const int x_149 = p.y;
-    const bool x_150 = (x_149 < 14);
-    x_163_phi = x_150;
-    if (x_150) {
-      const int x_154 = p.x;
-      const int x_156 = p.y;
-      const int x_161 = map[(x_154 + ((x_156 + 2) * 16))];
-      x_162 = (x_161 == 0);
-      x_163_phi = x_162;
-    }
-    if (x_163_phi) {
-      directions = (directions + 1);
-    }
-    bool x_227 = false;
-    bool x_240 = false;
-    bool x_279 = false;
-    bool x_292 = false;
-    bool x_331 = false;
-    bool x_344 = false;
-    bool x_383 = false;
-    bool x_396 = false;
-    bool x_228_phi = false;
-    bool x_241_phi = false;
-    bool x_280_phi = false;
-    bool x_293_phi = false;
-    bool x_332_phi = false;
-    bool x_345_phi = false;
-    bool x_384_phi = false;
-    bool x_397_phi = false;
-    if ((directions == 0)) {
-      canwalk = false;
-      i = 0;
-      {
-        for(; (i < 8); i = (i + 1)) {
-          j = 0;
-          {
-            for(; (j < 8); j = (j + 1)) {
-              const int x_194 = map[((j * 2) + ((i * 2) * 16))];
-              if ((x_194 == 0)) {
-                p.x = (j * 2);
-                p.y = (i * 2);
-                canwalk = true;
-              }
-            }
-          }
-        }
-      }
-      const int x_209 = p.x;
-      const int x_211 = p.y;
-      map[(x_209 + (x_211 * 16))] = 1;
-    } else {
-      d = (v % directions);
-      v = (v + directions);
-      const bool x_222 = (d >= 0);
-      x_228_phi = x_222;
-      if (x_222) {
-        const int x_226 = p.x;
-        x_227 = (x_226 > 0);
-        x_228_phi = x_227;
-      }
-      const bool x_228 = x_228_phi;
-      x_241_phi = x_228;
-      if (x_228) {
-        const int x_232 = p.x;
-        const int x_235 = p.y;
-        const int x_239 = map[((x_232 - 2) + (x_235 * 16))];
-        x_240 = (x_239 == 0);
-        x_241_phi = x_240;
-      }
-      if (x_241_phi) {
-        d = (d - 1);
-        const int x_247 = p.x;
-        const int x_249 = p.y;
-        map[(x_247 + (x_249 * 16))] = 1;
-        const int x_254 = p.x;
-        const int x_257 = p.y;
-        map[((x_254 - 1) + (x_257 * 16))] = 1;
-        const int x_262 = p.x;
-        const int x_265 = p.y;
-        map[((x_262 - 2) + (x_265 * 16))] = 1;
-        const int x_270 = p.x;
-        p.x = (x_270 - 2);
-      }
-      const bool x_274 = (d >= 0);
-      x_280_phi = x_274;
-      if (x_274) {
-        const int x_278 = p.y;
-        x_279 = (x_278 > 0);
-        x_280_phi = x_279;
-      }
-      const bool x_280 = x_280_phi;
-      x_293_phi = x_280;
-      if (x_280) {
-        const int x_284 = p.x;
-        const int x_286 = p.y;
-        const int x_291 = map[(x_284 + ((x_286 - 2) * 16))];
-        x_292 = (x_291 == 0);
-        x_293_phi = x_292;
-      }
-      if (x_293_phi) {
-        d = (d - 1);
-        const int x_299 = p.x;
-        const int x_301 = p.y;
-        map[(x_299 + (x_301 * 16))] = 1;
-        const int x_306 = p.x;
-        const int x_308 = p.y;
-        map[(x_306 + ((x_308 - 1) * 16))] = 1;
-        const int x_314 = p.x;
-        const int x_316 = p.y;
-        map[(x_314 + ((x_316 - 2) * 16))] = 1;
-        const int x_322 = p.y;
-        p.y = (x_322 - 2);
-      }
-      const bool x_326 = (d >= 0);
-      x_332_phi = x_326;
-      if (x_326) {
-        const int x_330 = p.x;
-        x_331 = (x_330 < 14);
-        x_332_phi = x_331;
-      }
-      const bool x_332 = x_332_phi;
-      x_345_phi = x_332;
-      if (x_332) {
-        const int x_336 = p.x;
-        const int x_339 = p.y;
-        const int x_343 = map[((x_336 + 2) + (x_339 * 16))];
-        x_344 = (x_343 == 0);
-        x_345_phi = x_344;
-      }
-      if (x_345_phi) {
-        d = (d - 1);
-        const int x_351 = p.x;
-        const int x_353 = p.y;
-        map[(x_351 + (x_353 * 16))] = 1;
-        const int x_358 = p.x;
-        const int x_361 = p.y;
-        map[((x_358 + 1) + (x_361 * 16))] = 1;
-        const int x_366 = p.x;
-        const int x_369 = p.y;
-        map[((x_366 + 2) + (x_369 * 16))] = 1;
-        const int x_374 = p.x;
-        p.x = (x_374 + 2);
-      }
-      const bool x_378 = (d >= 0);
-      x_384_phi = x_378;
-      if (x_378) {
-        const int x_382 = p.y;
-        x_383 = (x_382 < 14);
-        x_384_phi = x_383;
-      }
-      const bool x_384 = x_384_phi;
-      x_397_phi = x_384;
-      if (x_384) {
-        const int x_388 = p.x;
-        const int x_390 = p.y;
-        const int x_395 = map[(x_388 + ((x_390 + 2) * 16))];
-        x_396 = (x_395 == 0);
-        x_397_phi = x_396;
-      }
-      if (x_397_phi) {
-        d = (d - 1);
-        const int x_403 = p.x;
-        const int x_405 = p.y;
-        map[(x_403 + (x_405 * 16))] = 1;
-        const int x_410 = p.x;
-        const int x_412 = p.y;
-        map[(x_410 + ((x_412 + 1) * 16))] = 1;
-        const int x_418 = p.x;
-        const int x_420 = p.y;
-        map[(x_418 + ((x_420 + 2) * 16))] = 1;
-        const int x_426 = p.y;
-        p.y = (x_426 + 2);
-      }
-    }
-    const int x_430 = ipos.y;
-    const int x_433 = ipos.x;
-    const int x_436 = map[((x_430 * 16) + x_433)];
-    if ((x_436 == 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      if (canwalk) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.msl
deleted file mode 100644
index 7487fa5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,353 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float2 pos = 0.0f;
-  int2 ipos = 0;
-  int i = 0;
-  int2 p = 0;
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  float4 const x_57 = *(tint_symbol_3);
-  float2 const x_60 = x_7.resolution;
-  pos = (float2(x_57.x, x_57.y) / x_60);
-  float const x_63 = pos.x;
-  float const x_67 = pos.y;
-  ipos = int2(int((x_63 * 16.0f)), int((x_67 * 16.0f)));
-  i = 0;
-  while (true) {
-    int const x_75 = i;
-    if ((x_75 < 256)) {
-    } else {
-      break;
-    }
-    int const x_78 = i;
-    (*(tint_symbol_4)).arr[x_78] = 0;
-    {
-      int const x_80 = i;
-      i = as_type<int>((as_type<uint>(x_80) + as_type<uint>(1)));
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_102 = false;
-    bool x_122 = false;
-    bool x_142 = false;
-    bool x_162 = false;
-    bool x_103_phi = false;
-    bool x_123_phi = false;
-    bool x_143_phi = false;
-    bool x_163_phi = false;
-    int const x_86 = v;
-    v = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-    directions = 0;
-    int const x_89 = p.x;
-    bool const x_90 = (x_89 > 0);
-    x_103_phi = x_90;
-    if (x_90) {
-      int const x_94 = p.x;
-      int const x_97 = p.y;
-      int const x_101 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_94) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_97) * as_type<uint>(16))))))];
-      x_102 = (x_101 == 0);
-      x_103_phi = x_102;
-    }
-    bool const x_103 = x_103_phi;
-    if (x_103) {
-      int const x_106 = directions;
-      directions = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-    }
-    int const x_109 = p.y;
-    bool const x_110 = (x_109 > 0);
-    x_123_phi = x_110;
-    if (x_110) {
-      int const x_114 = p.x;
-      int const x_116 = p.y;
-      int const x_121 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_114) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_116) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_122 = (x_121 == 0);
-      x_123_phi = x_122;
-    }
-    bool const x_123 = x_123_phi;
-    if (x_123) {
-      int const x_126 = directions;
-      directions = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-    }
-    int const x_129 = p.x;
-    bool const x_130 = (x_129 < 14);
-    x_143_phi = x_130;
-    if (x_130) {
-      int const x_134 = p.x;
-      int const x_137 = p.y;
-      int const x_141 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_134) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_137) * as_type<uint>(16))))))];
-      x_142 = (x_141 == 0);
-      x_143_phi = x_142;
-    }
-    bool const x_143 = x_143_phi;
-    if (x_143) {
-      int const x_146 = directions;
-      directions = as_type<int>((as_type<uint>(x_146) + as_type<uint>(1)));
-    }
-    int const x_149 = p.y;
-    bool const x_150 = (x_149 < 14);
-    x_163_phi = x_150;
-    if (x_150) {
-      int const x_154 = p.x;
-      int const x_156 = p.y;
-      int const x_161 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_154) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_156) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_162 = (x_161 == 0);
-      x_163_phi = x_162;
-    }
-    bool const x_163 = x_163_phi;
-    if (x_163) {
-      int const x_166 = directions;
-      directions = as_type<int>((as_type<uint>(x_166) + as_type<uint>(1)));
-    }
-    bool x_227 = false;
-    bool x_240 = false;
-    bool x_279 = false;
-    bool x_292 = false;
-    bool x_331 = false;
-    bool x_344 = false;
-    bool x_383 = false;
-    bool x_396 = false;
-    bool x_228_phi = false;
-    bool x_241_phi = false;
-    bool x_280_phi = false;
-    bool x_293_phi = false;
-    bool x_332_phi = false;
-    bool x_345_phi = false;
-    bool x_384_phi = false;
-    bool x_397_phi = false;
-    int const x_168 = directions;
-    if ((x_168 == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        int const x_177 = i;
-        if ((x_177 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        while (true) {
-          int const x_184 = j;
-          if ((x_184 < 8)) {
-          } else {
-            break;
-          }
-          int const x_187 = j;
-          int const x_189 = i;
-          int const x_194 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_187) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_189) * as_type<uint>(2)))) * as_type<uint>(16))))))];
-          if ((x_194 == 0)) {
-            int const x_198 = j;
-            p.x = as_type<int>((as_type<uint>(x_198) * as_type<uint>(2)));
-            int const x_201 = i;
-            p.y = as_type<int>((as_type<uint>(x_201) * as_type<uint>(2)));
-            canwalk = true;
-          }
-          {
-            int const x_204 = j;
-            j = as_type<int>((as_type<uint>(x_204) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_206 = i;
-          i = as_type<int>((as_type<uint>(x_206) + as_type<uint>(1)));
-        }
-      }
-      int const x_209 = p.x;
-      int const x_211 = p.y;
-      (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_209) + as_type<uint>(as_type<int>((as_type<uint>(x_211) * as_type<uint>(16))))))] = 1;
-    } else {
-      int const x_215 = v;
-      int const x_216 = directions;
-      d = (x_215 % x_216);
-      int const x_218 = directions;
-      int const x_219 = v;
-      v = as_type<int>((as_type<uint>(x_219) + as_type<uint>(x_218)));
-      int const x_221 = d;
-      bool const x_222 = (x_221 >= 0);
-      x_228_phi = x_222;
-      if (x_222) {
-        int const x_226 = p.x;
-        x_227 = (x_226 > 0);
-        x_228_phi = x_227;
-      }
-      bool const x_228 = x_228_phi;
-      x_241_phi = x_228;
-      if (x_228) {
-        int const x_232 = p.x;
-        int const x_235 = p.y;
-        int const x_239 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_232) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_235) * as_type<uint>(16))))))];
-        x_240 = (x_239 == 0);
-        x_241_phi = x_240;
-      }
-      bool const x_241 = x_241_phi;
-      if (x_241) {
-        int const x_244 = d;
-        d = as_type<int>((as_type<uint>(x_244) - as_type<uint>(1)));
-        int const x_247 = p.x;
-        int const x_249 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_247) + as_type<uint>(as_type<int>((as_type<uint>(x_249) * as_type<uint>(16))))))] = 1;
-        int const x_254 = p.x;
-        int const x_257 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_254) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_257) * as_type<uint>(16))))))] = 1;
-        int const x_262 = p.x;
-        int const x_265 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_262) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_265) * as_type<uint>(16))))))] = 1;
-        int const x_270 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_270) - as_type<uint>(2)));
-      }
-      int const x_273 = d;
-      bool const x_274 = (x_273 >= 0);
-      x_280_phi = x_274;
-      if (x_274) {
-        int const x_278 = p.y;
-        x_279 = (x_278 > 0);
-        x_280_phi = x_279;
-      }
-      bool const x_280 = x_280_phi;
-      x_293_phi = x_280;
-      if (x_280) {
-        int const x_284 = p.x;
-        int const x_286 = p.y;
-        int const x_291 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_284) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_286) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_292 = (x_291 == 0);
-        x_293_phi = x_292;
-      }
-      bool const x_293 = x_293_phi;
-      if (x_293) {
-        int const x_296 = d;
-        d = as_type<int>((as_type<uint>(x_296) - as_type<uint>(1)));
-        int const x_299 = p.x;
-        int const x_301 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_299) + as_type<uint>(as_type<int>((as_type<uint>(x_301) * as_type<uint>(16))))))] = 1;
-        int const x_306 = p.x;
-        int const x_308 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_306) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_308) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_314 = p.x;
-        int const x_316 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_314) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_316) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_322 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_322) - as_type<uint>(2)));
-      }
-      int const x_325 = d;
-      bool const x_326 = (x_325 >= 0);
-      x_332_phi = x_326;
-      if (x_326) {
-        int const x_330 = p.x;
-        x_331 = (x_330 < 14);
-        x_332_phi = x_331;
-      }
-      bool const x_332 = x_332_phi;
-      x_345_phi = x_332;
-      if (x_332) {
-        int const x_336 = p.x;
-        int const x_339 = p.y;
-        int const x_343 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_336) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_339) * as_type<uint>(16))))))];
-        x_344 = (x_343 == 0);
-        x_345_phi = x_344;
-      }
-      bool const x_345 = x_345_phi;
-      if (x_345) {
-        int const x_348 = d;
-        d = as_type<int>((as_type<uint>(x_348) - as_type<uint>(1)));
-        int const x_351 = p.x;
-        int const x_353 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_351) + as_type<uint>(as_type<int>((as_type<uint>(x_353) * as_type<uint>(16))))))] = 1;
-        int const x_358 = p.x;
-        int const x_361 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_358) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_361) * as_type<uint>(16))))))] = 1;
-        int const x_366 = p.x;
-        int const x_369 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_366) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_369) * as_type<uint>(16))))))] = 1;
-        int const x_374 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_374) + as_type<uint>(2)));
-      }
-      int const x_377 = d;
-      bool const x_378 = (x_377 >= 0);
-      x_384_phi = x_378;
-      if (x_378) {
-        int const x_382 = p.y;
-        x_383 = (x_382 < 14);
-        x_384_phi = x_383;
-      }
-      bool const x_384 = x_384_phi;
-      x_397_phi = x_384;
-      if (x_384) {
-        int const x_388 = p.x;
-        int const x_390 = p.y;
-        int const x_395 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_388) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_390) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_396 = (x_395 == 0);
-        x_397_phi = x_396;
-      }
-      bool const x_397 = x_397_phi;
-      if (x_397) {
-        int const x_400 = d;
-        d = as_type<int>((as_type<uint>(x_400) - as_type<uint>(1)));
-        int const x_403 = p.x;
-        int const x_405 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_403) + as_type<uint>(as_type<int>((as_type<uint>(x_405) * as_type<uint>(16))))))] = 1;
-        int const x_410 = p.x;
-        int const x_412 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_410) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_412) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_418 = p.x;
-        int const x_420 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_418) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_420) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_426 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_426) + as_type<uint>(2)));
-      }
-    }
-    int const x_430 = ipos.y;
-    int const x_433 = ipos.x;
-    int const x_436 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_430) * as_type<uint>(16)))) + as_type<uint>(x_433)))];
-    if ((x_436 == 1)) {
-      *(tint_symbol_5) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      bool const x_440 = canwalk;
-      if (x_440) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_6, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread tint_array_wrapper tint_symbol_10 = {};
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0897775..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,763 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 506
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %map "map"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %ipos "ipos"
-               OpName %i "i"
-               OpName %p "p"
-               OpName %canwalk "canwalk"
-               OpName %v "v"
-               OpName %directions "directions"
-               OpName %j "j"
-               OpName %d "d"
-               OpName %x_102 "x_102"
-               OpName %x_122 "x_122"
-               OpName %x_142 "x_142"
-               OpName %x_162 "x_162"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_123_phi "x_123_phi"
-               OpName %x_143_phi "x_143_phi"
-               OpName %x_163_phi "x_163_phi"
-               OpName %x_227 "x_227"
-               OpName %x_240 "x_240"
-               OpName %x_279 "x_279"
-               OpName %x_292 "x_292"
-               OpName %x_331 "x_331"
-               OpName %x_344 "x_344"
-               OpName %x_383 "x_383"
-               OpName %x_396 "x_396"
-               OpName %x_228_phi "x_228_phi"
-               OpName %x_241_phi "x_241_phi"
-               OpName %x_280_phi "x_280_phi"
-               OpName %x_293_phi "x_293_phi"
-               OpName %x_332_phi "x_332_phi"
-               OpName %x_345_phi "x_345_phi"
-               OpName %x_384_phi "x_384_phi"
-               OpName %x_397_phi "x_397_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
-         %20 = OpConstantNull %_arr_int_uint_256
-        %map = OpVariable %_ptr_Private__arr_int_uint_256 Private %20
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %28 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %32 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %float_16 = OpConstant %float 16
-      %int_0 = OpConstant %int 0
-    %int_256 = OpConstant %int 256
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-         %83 = OpConstantComposite %v2int %int_0 %int_0
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-     %int_16 = OpConstant %int 16
-     %int_14 = OpConstant %int 14
-      %false = OpConstantFalse %bool
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-        %489 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-        %492 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %493 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %28
-       %ipos = OpVariable %_ptr_Function_v2int Function %32
-          %i = OpVariable %_ptr_Function_int Function %35
-          %p = OpVariable %_ptr_Function_v2int Function %32
-    %canwalk = OpVariable %_ptr_Function_bool Function %40
-          %v = OpVariable %_ptr_Function_int Function %35
- %directions = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-          %d = OpVariable %_ptr_Function_int Function %35
-      %x_102 = OpVariable %_ptr_Function_bool Function %40
-      %x_122 = OpVariable %_ptr_Function_bool Function %40
-      %x_142 = OpVariable %_ptr_Function_bool Function %40
-      %x_162 = OpVariable %_ptr_Function_bool Function %40
-  %x_103_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_123_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_143_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_163_phi = OpVariable %_ptr_Function_bool Function %40
-      %x_227 = OpVariable %_ptr_Function_bool Function %40
-      %x_240 = OpVariable %_ptr_Function_bool Function %40
-      %x_279 = OpVariable %_ptr_Function_bool Function %40
-      %x_292 = OpVariable %_ptr_Function_bool Function %40
-      %x_331 = OpVariable %_ptr_Function_bool Function %40
-      %x_344 = OpVariable %_ptr_Function_bool Function %40
-      %x_383 = OpVariable %_ptr_Function_bool Function %40
-      %x_396 = OpVariable %_ptr_Function_bool Function %40
-  %x_228_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_241_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_280_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_293_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_332_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_345_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_384_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_397_phi = OpVariable %_ptr_Function_bool Function %40
-         %45 = OpLoad %v4float %gl_FragCoord
-         %48 = OpAccessChain %_ptr_Uniform_v2float %x_7 %uint_0
-         %49 = OpLoad %v2float %48
-         %50 = OpCompositeExtract %float %45 0
-         %51 = OpCompositeExtract %float %45 1
-         %52 = OpCompositeConstruct %v2float %50 %51
-         %53 = OpFDiv %v2float %52 %49
-               OpStore %pos %53
-         %55 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %59 = OpLoad %float %58
-         %62 = OpFMul %float %56 %float_16
-         %60 = OpConvertFToS %int %62
-         %64 = OpFMul %float %59 %float_16
-         %63 = OpConvertFToS %int %64
-         %65 = OpCompositeConstruct %v2int %60 %63
-               OpStore %ipos %65
-               OpStore %i %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %73 = OpSLessThan %bool %71 %int_256
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %68
-         %74 = OpLabel
-         %77 = OpLoad %int %i
-         %79 = OpAccessChain %_ptr_Private_int %map %77
-               OpStore %79 %int_0
-               OpBranch %69
-         %69 = OpLabel
-         %80 = OpLoad %int %i
-         %82 = OpIAdd %int %80 %int_1
-               OpStore %i %82
-               OpBranch %67
-         %68 = OpLabel
-               OpStore %p %83
-               OpStore %canwalk %true
-               OpStore %v %int_0
-               OpBranch %85
-         %85 = OpLabel
-               OpLoopMerge %86 %87 None
-               OpBranch %88
-         %88 = OpLabel
-         %97 = OpLoad %int %v
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %v %98
-               OpStore %directions %int_0
-         %99 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %100 = OpLoad %int %99
-        %101 = OpSGreaterThan %bool %100 %int_0
-               OpStore %x_103_phi %101
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %107 = OpLoad %int %106
-        %109 = OpISub %int %105 %int_2
-        %111 = OpIMul %int %107 %int_16
-        %112 = OpIAdd %int %109 %111
-        %113 = OpAccessChain %_ptr_Private_int %map %112
-        %114 = OpLoad %int %113
-        %115 = OpIEqual %bool %114 %int_0
-               OpStore %x_102 %115
-        %116 = OpLoad %bool %x_102
-               OpStore %x_103_phi %116
-               OpBranch %102
-        %102 = OpLabel
-        %117 = OpLoad %bool %x_103_phi
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpLoad %int %directions
-        %121 = OpIAdd %int %120 %int_1
-               OpStore %directions %121
-               OpBranch %118
-        %118 = OpLabel
-        %122 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %123 = OpLoad %int %122
-        %124 = OpSGreaterThan %bool %123 %int_0
-               OpStore %x_123_phi %124
-               OpSelectionMerge %125 None
-               OpBranchConditional %124 %126 %125
-        %126 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %130 = OpLoad %int %129
-        %131 = OpISub %int %130 %int_2
-        %132 = OpIMul %int %131 %int_16
-        %133 = OpIAdd %int %128 %132
-        %134 = OpAccessChain %_ptr_Private_int %map %133
-        %135 = OpLoad %int %134
-        %136 = OpIEqual %bool %135 %int_0
-               OpStore %x_122 %136
-        %137 = OpLoad %bool %x_122
-               OpStore %x_123_phi %137
-               OpBranch %125
-        %125 = OpLabel
-        %138 = OpLoad %bool %x_123_phi
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %int %directions
-        %142 = OpIAdd %int %141 %int_1
-               OpStore %directions %142
-               OpBranch %139
-        %139 = OpLabel
-        %143 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %144 = OpLoad %int %143
-        %146 = OpSLessThan %bool %144 %int_14
-               OpStore %x_143_phi %146
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-        %149 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %150 = OpLoad %int %149
-        %151 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %152 = OpLoad %int %151
-        %153 = OpIAdd %int %150 %int_2
-        %154 = OpIMul %int %152 %int_16
-        %155 = OpIAdd %int %153 %154
-        %156 = OpAccessChain %_ptr_Private_int %map %155
-        %157 = OpLoad %int %156
-        %158 = OpIEqual %bool %157 %int_0
-               OpStore %x_142 %158
-        %159 = OpLoad %bool %x_142
-               OpStore %x_143_phi %159
-               OpBranch %147
-        %147 = OpLabel
-        %160 = OpLoad %bool %x_143_phi
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %161
-        %162 = OpLabel
-        %163 = OpLoad %int %directions
-        %164 = OpIAdd %int %163 %int_1
-               OpStore %directions %164
-               OpBranch %161
-        %161 = OpLabel
-        %165 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %166 %int_14
-               OpStore %x_163_phi %167
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %168
-        %169 = OpLabel
-        %170 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %171 = OpLoad %int %170
-        %172 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %173 = OpLoad %int %172
-        %174 = OpIAdd %int %173 %int_2
-        %175 = OpIMul %int %174 %int_16
-        %176 = OpIAdd %int %171 %175
-        %177 = OpAccessChain %_ptr_Private_int %map %176
-        %178 = OpLoad %int %177
-        %179 = OpIEqual %bool %178 %int_0
-               OpStore %x_162 %179
-        %180 = OpLoad %bool %x_162
-               OpStore %x_163_phi %180
-               OpBranch %168
-        %168 = OpLabel
-        %181 = OpLoad %bool %x_163_phi
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %directions
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %directions %185
-               OpBranch %182
-        %182 = OpLabel
-        %202 = OpLoad %int %directions
-        %203 = OpIEqual %bool %202 %int_0
-               OpSelectionMerge %204 None
-               OpBranchConditional %203 %205 %206
-        %205 = OpLabel
-               OpStore %canwalk %false
-               OpStore %i %int_0
-               OpBranch %208
-        %208 = OpLabel
-               OpLoopMerge %209 %210 None
-               OpBranch %211
-        %211 = OpLabel
-        %212 = OpLoad %int %i
-        %214 = OpSLessThan %bool %212 %int_8
-               OpSelectionMerge %215 None
-               OpBranchConditional %214 %216 %217
-        %216 = OpLabel
-               OpBranch %215
-        %217 = OpLabel
-               OpBranch %209
-        %215 = OpLabel
-               OpStore %j %int_0
-               OpBranch %218
-        %218 = OpLabel
-               OpLoopMerge %219 %220 None
-               OpBranch %221
-        %221 = OpLabel
-        %222 = OpLoad %int %j
-        %223 = OpSLessThan %bool %222 %int_8
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %226
-        %225 = OpLabel
-               OpBranch %224
-        %226 = OpLabel
-               OpBranch %219
-        %224 = OpLabel
-        %227 = OpLoad %int %j
-        %228 = OpLoad %int %i
-        %229 = OpIMul %int %227 %int_2
-        %230 = OpIMul %int %228 %int_2
-        %231 = OpIMul %int %230 %int_16
-        %232 = OpIAdd %int %229 %231
-        %233 = OpAccessChain %_ptr_Private_int %map %232
-        %234 = OpLoad %int %233
-        %235 = OpIEqual %bool %234 %int_0
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %236
-        %237 = OpLabel
-        %238 = OpLoad %int %j
-        %239 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %240 = OpIMul %int %238 %int_2
-               OpStore %239 %240
-        %241 = OpLoad %int %i
-        %242 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %243 = OpIMul %int %241 %int_2
-               OpStore %242 %243
-               OpStore %canwalk %true
-               OpBranch %236
-        %236 = OpLabel
-               OpBranch %220
-        %220 = OpLabel
-        %244 = OpLoad %int %j
-        %245 = OpIAdd %int %244 %int_1
-               OpStore %j %245
-               OpBranch %218
-        %219 = OpLabel
-               OpBranch %210
-        %210 = OpLabel
-        %246 = OpLoad %int %i
-        %247 = OpIAdd %int %246 %int_1
-               OpStore %i %247
-               OpBranch %208
-        %209 = OpLabel
-        %248 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %249 = OpLoad %int %248
-        %250 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %251 = OpLoad %int %250
-        %252 = OpIMul %int %251 %int_16
-        %253 = OpIAdd %int %249 %252
-        %254 = OpAccessChain %_ptr_Private_int %map %253
-               OpStore %254 %int_1
-               OpBranch %204
-        %206 = OpLabel
-        %255 = OpLoad %int %v
-        %256 = OpLoad %int %directions
-        %257 = OpSMod %int %255 %256
-               OpStore %d %257
-        %258 = OpLoad %int %directions
-        %259 = OpLoad %int %v
-        %260 = OpIAdd %int %259 %258
-               OpStore %v %260
-        %261 = OpLoad %int %d
-        %262 = OpSGreaterThanEqual %bool %261 %int_0
-               OpStore %x_228_phi %262
-               OpSelectionMerge %263 None
-               OpBranchConditional %262 %264 %263
-        %264 = OpLabel
-        %265 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %266 = OpLoad %int %265
-        %267 = OpSGreaterThan %bool %266 %int_0
-               OpStore %x_227 %267
-        %268 = OpLoad %bool %x_227
-               OpStore %x_228_phi %268
-               OpBranch %263
-        %263 = OpLabel
-        %269 = OpLoad %bool %x_228_phi
-               OpStore %x_241_phi %269
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %270
-        %271 = OpLabel
-        %272 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %273 = OpLoad %int %272
-        %274 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %275 = OpLoad %int %274
-        %276 = OpISub %int %273 %int_2
-        %277 = OpIMul %int %275 %int_16
-        %278 = OpIAdd %int %276 %277
-        %279 = OpAccessChain %_ptr_Private_int %map %278
-        %280 = OpLoad %int %279
-        %281 = OpIEqual %bool %280 %int_0
-               OpStore %x_240 %281
-        %282 = OpLoad %bool %x_240
-               OpStore %x_241_phi %282
-               OpBranch %270
-        %270 = OpLabel
-        %283 = OpLoad %bool %x_241_phi
-               OpSelectionMerge %284 None
-               OpBranchConditional %283 %285 %284
-        %285 = OpLabel
-        %286 = OpLoad %int %d
-        %287 = OpISub %int %286 %int_1
-               OpStore %d %287
-        %288 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %289 = OpLoad %int %288
-        %290 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %291 = OpLoad %int %290
-        %292 = OpIMul %int %291 %int_16
-        %293 = OpIAdd %int %289 %292
-        %294 = OpAccessChain %_ptr_Private_int %map %293
-               OpStore %294 %int_1
-        %295 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %296 = OpLoad %int %295
-        %297 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %298 = OpLoad %int %297
-        %299 = OpISub %int %296 %int_1
-        %300 = OpIMul %int %298 %int_16
-        %301 = OpIAdd %int %299 %300
-        %302 = OpAccessChain %_ptr_Private_int %map %301
-               OpStore %302 %int_1
-        %303 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %304 = OpLoad %int %303
-        %305 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %306 = OpLoad %int %305
-        %307 = OpISub %int %304 %int_2
-        %308 = OpIMul %int %306 %int_16
-        %309 = OpIAdd %int %307 %308
-        %310 = OpAccessChain %_ptr_Private_int %map %309
-               OpStore %310 %int_1
-        %311 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %312 = OpLoad %int %311
-        %313 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %314 = OpISub %int %312 %int_2
-               OpStore %313 %314
-               OpBranch %284
-        %284 = OpLabel
-        %315 = OpLoad %int %d
-        %316 = OpSGreaterThanEqual %bool %315 %int_0
-               OpStore %x_280_phi %316
-               OpSelectionMerge %317 None
-               OpBranchConditional %316 %318 %317
-        %318 = OpLabel
-        %319 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %320 = OpLoad %int %319
-        %321 = OpSGreaterThan %bool %320 %int_0
-               OpStore %x_279 %321
-        %322 = OpLoad %bool %x_279
-               OpStore %x_280_phi %322
-               OpBranch %317
-        %317 = OpLabel
-        %323 = OpLoad %bool %x_280_phi
-               OpStore %x_293_phi %323
-               OpSelectionMerge %324 None
-               OpBranchConditional %323 %325 %324
-        %325 = OpLabel
-        %326 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %327 = OpLoad %int %326
-        %328 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %329 = OpLoad %int %328
-        %330 = OpISub %int %329 %int_2
-        %331 = OpIMul %int %330 %int_16
-        %332 = OpIAdd %int %327 %331
-        %333 = OpAccessChain %_ptr_Private_int %map %332
-        %334 = OpLoad %int %333
-        %335 = OpIEqual %bool %334 %int_0
-               OpStore %x_292 %335
-        %336 = OpLoad %bool %x_292
-               OpStore %x_293_phi %336
-               OpBranch %324
-        %324 = OpLabel
-        %337 = OpLoad %bool %x_293_phi
-               OpSelectionMerge %338 None
-               OpBranchConditional %337 %339 %338
-        %339 = OpLabel
-        %340 = OpLoad %int %d
-        %341 = OpISub %int %340 %int_1
-               OpStore %d %341
-        %342 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %343 = OpLoad %int %342
-        %344 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %345 = OpLoad %int %344
-        %346 = OpIMul %int %345 %int_16
-        %347 = OpIAdd %int %343 %346
-        %348 = OpAccessChain %_ptr_Private_int %map %347
-               OpStore %348 %int_1
-        %349 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %350 = OpLoad %int %349
-        %351 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %352 = OpLoad %int %351
-        %353 = OpISub %int %352 %int_1
-        %354 = OpIMul %int %353 %int_16
-        %355 = OpIAdd %int %350 %354
-        %356 = OpAccessChain %_ptr_Private_int %map %355
-               OpStore %356 %int_1
-        %357 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %358 = OpLoad %int %357
-        %359 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %360 = OpLoad %int %359
-        %361 = OpISub %int %360 %int_2
-        %362 = OpIMul %int %361 %int_16
-        %363 = OpIAdd %int %358 %362
-        %364 = OpAccessChain %_ptr_Private_int %map %363
-               OpStore %364 %int_1
-        %365 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %366 = OpLoad %int %365
-        %367 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %368 = OpISub %int %366 %int_2
-               OpStore %367 %368
-               OpBranch %338
-        %338 = OpLabel
-        %369 = OpLoad %int %d
-        %370 = OpSGreaterThanEqual %bool %369 %int_0
-               OpStore %x_332_phi %370
-               OpSelectionMerge %371 None
-               OpBranchConditional %370 %372 %371
-        %372 = OpLabel
-        %373 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %374 = OpLoad %int %373
-        %375 = OpSLessThan %bool %374 %int_14
-               OpStore %x_331 %375
-        %376 = OpLoad %bool %x_331
-               OpStore %x_332_phi %376
-               OpBranch %371
-        %371 = OpLabel
-        %377 = OpLoad %bool %x_332_phi
-               OpStore %x_345_phi %377
-               OpSelectionMerge %378 None
-               OpBranchConditional %377 %379 %378
-        %379 = OpLabel
-        %380 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %381 = OpLoad %int %380
-        %382 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %383 = OpLoad %int %382
-        %384 = OpIAdd %int %381 %int_2
-        %385 = OpIMul %int %383 %int_16
-        %386 = OpIAdd %int %384 %385
-        %387 = OpAccessChain %_ptr_Private_int %map %386
-        %388 = OpLoad %int %387
-        %389 = OpIEqual %bool %388 %int_0
-               OpStore %x_344 %389
-        %390 = OpLoad %bool %x_344
-               OpStore %x_345_phi %390
-               OpBranch %378
-        %378 = OpLabel
-        %391 = OpLoad %bool %x_345_phi
-               OpSelectionMerge %392 None
-               OpBranchConditional %391 %393 %392
-        %393 = OpLabel
-        %394 = OpLoad %int %d
-        %395 = OpISub %int %394 %int_1
-               OpStore %d %395
-        %396 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %397 = OpLoad %int %396
-        %398 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %399 = OpLoad %int %398
-        %400 = OpIMul %int %399 %int_16
-        %401 = OpIAdd %int %397 %400
-        %402 = OpAccessChain %_ptr_Private_int %map %401
-               OpStore %402 %int_1
-        %403 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %404 = OpLoad %int %403
-        %405 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %406 = OpLoad %int %405
-        %407 = OpIAdd %int %404 %int_1
-        %408 = OpIMul %int %406 %int_16
-        %409 = OpIAdd %int %407 %408
-        %410 = OpAccessChain %_ptr_Private_int %map %409
-               OpStore %410 %int_1
-        %411 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %412 = OpLoad %int %411
-        %413 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %414 = OpLoad %int %413
-        %415 = OpIAdd %int %412 %int_2
-        %416 = OpIMul %int %414 %int_16
-        %417 = OpIAdd %int %415 %416
-        %418 = OpAccessChain %_ptr_Private_int %map %417
-               OpStore %418 %int_1
-        %419 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %420 = OpLoad %int %419
-        %421 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %422 = OpIAdd %int %420 %int_2
-               OpStore %421 %422
-               OpBranch %392
-        %392 = OpLabel
-        %423 = OpLoad %int %d
-        %424 = OpSGreaterThanEqual %bool %423 %int_0
-               OpStore %x_384_phi %424
-               OpSelectionMerge %425 None
-               OpBranchConditional %424 %426 %425
-        %426 = OpLabel
-        %427 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %428 = OpLoad %int %427
-        %429 = OpSLessThan %bool %428 %int_14
-               OpStore %x_383 %429
-        %430 = OpLoad %bool %x_383
-               OpStore %x_384_phi %430
-               OpBranch %425
-        %425 = OpLabel
-        %431 = OpLoad %bool %x_384_phi
-               OpStore %x_397_phi %431
-               OpSelectionMerge %432 None
-               OpBranchConditional %431 %433 %432
-        %433 = OpLabel
-        %434 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %435 = OpLoad %int %434
-        %436 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %437 = OpLoad %int %436
-        %438 = OpIAdd %int %437 %int_2
-        %439 = OpIMul %int %438 %int_16
-        %440 = OpIAdd %int %435 %439
-        %441 = OpAccessChain %_ptr_Private_int %map %440
-        %442 = OpLoad %int %441
-        %443 = OpIEqual %bool %442 %int_0
-               OpStore %x_396 %443
-        %444 = OpLoad %bool %x_396
-               OpStore %x_397_phi %444
-               OpBranch %432
-        %432 = OpLabel
-        %445 = OpLoad %bool %x_397_phi
-               OpSelectionMerge %446 None
-               OpBranchConditional %445 %447 %446
-        %447 = OpLabel
-        %448 = OpLoad %int %d
-        %449 = OpISub %int %448 %int_1
-               OpStore %d %449
-        %450 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %451 = OpLoad %int %450
-        %452 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %453 = OpLoad %int %452
-        %454 = OpIMul %int %453 %int_16
-        %455 = OpIAdd %int %451 %454
-        %456 = OpAccessChain %_ptr_Private_int %map %455
-               OpStore %456 %int_1
-        %457 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %458 = OpLoad %int %457
-        %459 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %460 = OpLoad %int %459
-        %461 = OpIAdd %int %460 %int_1
-        %462 = OpIMul %int %461 %int_16
-        %463 = OpIAdd %int %458 %462
-        %464 = OpAccessChain %_ptr_Private_int %map %463
-               OpStore %464 %int_1
-        %465 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %466 = OpLoad %int %465
-        %467 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %468 = OpLoad %int %467
-        %469 = OpIAdd %int %468 %int_2
-        %470 = OpIMul %int %469 %int_16
-        %471 = OpIAdd %int %466 %470
-        %472 = OpAccessChain %_ptr_Private_int %map %471
-               OpStore %472 %int_1
-        %473 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %474 = OpLoad %int %473
-        %475 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %476 = OpIAdd %int %474 %int_2
-               OpStore %475 %476
-               OpBranch %446
-        %446 = OpLabel
-               OpBranch %204
-        %204 = OpLabel
-        %477 = OpAccessChain %_ptr_Function_int %ipos %uint_1
-        %478 = OpLoad %int %477
-        %479 = OpAccessChain %_ptr_Function_int %ipos %uint_0
-        %480 = OpLoad %int %479
-        %481 = OpIMul %int %478 %int_16
-        %482 = OpIAdd %int %481 %480
-        %483 = OpAccessChain %_ptr_Private_int %map %482
-        %484 = OpLoad %int %483
-        %485 = OpIEqual %bool %484 %int_1
-               OpSelectionMerge %486 None
-               OpBranchConditional %485 %487 %486
-        %487 = OpLabel
-               OpStore %x_GLF_color %489
-               OpReturn
-        %486 = OpLabel
-               OpBranch %87
-         %87 = OpLabel
-        %490 = OpLoad %bool %canwalk
-               OpBranchConditional %490 %85 %86
-         %86 = OpLabel
-               OpStore %x_GLF_color %492
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %493
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %497 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %498 = OpFunctionCall %void %main_1
-        %499 = OpLoad %v4float %x_GLF_color
-        %500 = OpCompositeConstruct %main_out %499
-               OpReturnValue %500
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %502 = OpLabel
-        %504 = OpLoad %v4float %gl_FragCoord_param_1
-        %503 = OpFunctionCall %main_out %main_inner %504
-        %505 = OpCompositeExtract %v4float %503 0
-               OpStore %x_GLF_color_1_1 %505
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 4128fb7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,348 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> map : array<i32, 256>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var ipos : vec2<i32>;
-  var i : i32;
-  var p : vec2<i32>;
-  var canwalk : bool;
-  var v : i32;
-  var directions : i32;
-  var j : i32;
-  var d : i32;
-  let x_57 : vec4<f32> = gl_FragCoord;
-  let x_60 : vec2<f32> = x_7.resolution;
-  pos = (vec2<f32>(x_57.x, x_57.y) / x_60);
-  let x_63 : f32 = pos.x;
-  let x_67 : f32 = pos.y;
-  ipos = vec2<i32>(i32((x_63 * 16.0)), i32((x_67 * 16.0)));
-  i = 0;
-  loop {
-    let x_75 : i32 = i;
-    if ((x_75 < 256)) {
-    } else {
-      break;
-    }
-    let x_78 : i32 = i;
-    map[x_78] = 0;
-
-    continuing {
-      let x_80 : i32 = i;
-      i = (x_80 + 1);
-    }
-  }
-  p = vec2<i32>(0, 0);
-  canwalk = true;
-  v = 0;
-  loop {
-    var x_102 : bool;
-    var x_122 : bool;
-    var x_142 : bool;
-    var x_162 : bool;
-    var x_103_phi : bool;
-    var x_123_phi : bool;
-    var x_143_phi : bool;
-    var x_163_phi : bool;
-    let x_86 : i32 = v;
-    v = (x_86 + 1);
-    directions = 0;
-    let x_89 : i32 = p.x;
-    let x_90 : bool = (x_89 > 0);
-    x_103_phi = x_90;
-    if (x_90) {
-      let x_94 : i32 = p.x;
-      let x_97 : i32 = p.y;
-      let x_101 : i32 = map[((x_94 - 2) + (x_97 * 16))];
-      x_102 = (x_101 == 0);
-      x_103_phi = x_102;
-    }
-    let x_103 : bool = x_103_phi;
-    if (x_103) {
-      let x_106 : i32 = directions;
-      directions = (x_106 + 1);
-    }
-    let x_109 : i32 = p.y;
-    let x_110 : bool = (x_109 > 0);
-    x_123_phi = x_110;
-    if (x_110) {
-      let x_114 : i32 = p.x;
-      let x_116 : i32 = p.y;
-      let x_121 : i32 = map[(x_114 + ((x_116 - 2) * 16))];
-      x_122 = (x_121 == 0);
-      x_123_phi = x_122;
-    }
-    let x_123 : bool = x_123_phi;
-    if (x_123) {
-      let x_126 : i32 = directions;
-      directions = (x_126 + 1);
-    }
-    let x_129 : i32 = p.x;
-    let x_130 : bool = (x_129 < 14);
-    x_143_phi = x_130;
-    if (x_130) {
-      let x_134 : i32 = p.x;
-      let x_137 : i32 = p.y;
-      let x_141 : i32 = map[((x_134 + 2) + (x_137 * 16))];
-      x_142 = (x_141 == 0);
-      x_143_phi = x_142;
-    }
-    let x_143 : bool = x_143_phi;
-    if (x_143) {
-      let x_146 : i32 = directions;
-      directions = (x_146 + 1);
-    }
-    let x_149 : i32 = p.y;
-    let x_150 : bool = (x_149 < 14);
-    x_163_phi = x_150;
-    if (x_150) {
-      let x_154 : i32 = p.x;
-      let x_156 : i32 = p.y;
-      let x_161 : i32 = map[(x_154 + ((x_156 + 2) * 16))];
-      x_162 = (x_161 == 0);
-      x_163_phi = x_162;
-    }
-    let x_163 : bool = x_163_phi;
-    if (x_163) {
-      let x_166 : i32 = directions;
-      directions = (x_166 + 1);
-    }
-    var x_227 : bool;
-    var x_240 : bool;
-    var x_279 : bool;
-    var x_292 : bool;
-    var x_331 : bool;
-    var x_344 : bool;
-    var x_383 : bool;
-    var x_396 : bool;
-    var x_228_phi : bool;
-    var x_241_phi : bool;
-    var x_280_phi : bool;
-    var x_293_phi : bool;
-    var x_332_phi : bool;
-    var x_345_phi : bool;
-    var x_384_phi : bool;
-    var x_397_phi : bool;
-    let x_168 : i32 = directions;
-    if ((x_168 == 0)) {
-      canwalk = false;
-      i = 0;
-      loop {
-        let x_177 : i32 = i;
-        if ((x_177 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        loop {
-          let x_184 : i32 = j;
-          if ((x_184 < 8)) {
-          } else {
-            break;
-          }
-          let x_187 : i32 = j;
-          let x_189 : i32 = i;
-          let x_194 : i32 = map[((x_187 * 2) + ((x_189 * 2) * 16))];
-          if ((x_194 == 0)) {
-            let x_198 : i32 = j;
-            p.x = (x_198 * 2);
-            let x_201 : i32 = i;
-            p.y = (x_201 * 2);
-            canwalk = true;
-          }
-
-          continuing {
-            let x_204 : i32 = j;
-            j = (x_204 + 1);
-          }
-        }
-
-        continuing {
-          let x_206 : i32 = i;
-          i = (x_206 + 1);
-        }
-      }
-      let x_209 : i32 = p.x;
-      let x_211 : i32 = p.y;
-      map[(x_209 + (x_211 * 16))] = 1;
-    } else {
-      let x_215 : i32 = v;
-      let x_216 : i32 = directions;
-      d = (x_215 % x_216);
-      let x_218 : i32 = directions;
-      let x_219 : i32 = v;
-      v = (x_219 + x_218);
-      let x_221 : i32 = d;
-      let x_222 : bool = (x_221 >= 0);
-      x_228_phi = x_222;
-      if (x_222) {
-        let x_226 : i32 = p.x;
-        x_227 = (x_226 > 0);
-        x_228_phi = x_227;
-      }
-      let x_228 : bool = x_228_phi;
-      x_241_phi = x_228;
-      if (x_228) {
-        let x_232 : i32 = p.x;
-        let x_235 : i32 = p.y;
-        let x_239 : i32 = map[((x_232 - 2) + (x_235 * 16))];
-        x_240 = (x_239 == 0);
-        x_241_phi = x_240;
-      }
-      let x_241 : bool = x_241_phi;
-      if (x_241) {
-        let x_244 : i32 = d;
-        d = (x_244 - 1);
-        let x_247 : i32 = p.x;
-        let x_249 : i32 = p.y;
-        map[(x_247 + (x_249 * 16))] = 1;
-        let x_254 : i32 = p.x;
-        let x_257 : i32 = p.y;
-        map[((x_254 - 1) + (x_257 * 16))] = 1;
-        let x_262 : i32 = p.x;
-        let x_265 : i32 = p.y;
-        map[((x_262 - 2) + (x_265 * 16))] = 1;
-        let x_270 : i32 = p.x;
-        p.x = (x_270 - 2);
-      }
-      let x_273 : i32 = d;
-      let x_274 : bool = (x_273 >= 0);
-      x_280_phi = x_274;
-      if (x_274) {
-        let x_278 : i32 = p.y;
-        x_279 = (x_278 > 0);
-        x_280_phi = x_279;
-      }
-      let x_280 : bool = x_280_phi;
-      x_293_phi = x_280;
-      if (x_280) {
-        let x_284 : i32 = p.x;
-        let x_286 : i32 = p.y;
-        let x_291 : i32 = map[(x_284 + ((x_286 - 2) * 16))];
-        x_292 = (x_291 == 0);
-        x_293_phi = x_292;
-      }
-      let x_293 : bool = x_293_phi;
-      if (x_293) {
-        let x_296 : i32 = d;
-        d = (x_296 - 1);
-        let x_299 : i32 = p.x;
-        let x_301 : i32 = p.y;
-        map[(x_299 + (x_301 * 16))] = 1;
-        let x_306 : i32 = p.x;
-        let x_308 : i32 = p.y;
-        map[(x_306 + ((x_308 - 1) * 16))] = 1;
-        let x_314 : i32 = p.x;
-        let x_316 : i32 = p.y;
-        map[(x_314 + ((x_316 - 2) * 16))] = 1;
-        let x_322 : i32 = p.y;
-        p.y = (x_322 - 2);
-      }
-      let x_325 : i32 = d;
-      let x_326 : bool = (x_325 >= 0);
-      x_332_phi = x_326;
-      if (x_326) {
-        let x_330 : i32 = p.x;
-        x_331 = (x_330 < 14);
-        x_332_phi = x_331;
-      }
-      let x_332 : bool = x_332_phi;
-      x_345_phi = x_332;
-      if (x_332) {
-        let x_336 : i32 = p.x;
-        let x_339 : i32 = p.y;
-        let x_343 : i32 = map[((x_336 + 2) + (x_339 * 16))];
-        x_344 = (x_343 == 0);
-        x_345_phi = x_344;
-      }
-      let x_345 : bool = x_345_phi;
-      if (x_345) {
-        let x_348 : i32 = d;
-        d = (x_348 - 1);
-        let x_351 : i32 = p.x;
-        let x_353 : i32 = p.y;
-        map[(x_351 + (x_353 * 16))] = 1;
-        let x_358 : i32 = p.x;
-        let x_361 : i32 = p.y;
-        map[((x_358 + 1) + (x_361 * 16))] = 1;
-        let x_366 : i32 = p.x;
-        let x_369 : i32 = p.y;
-        map[((x_366 + 2) + (x_369 * 16))] = 1;
-        let x_374 : i32 = p.x;
-        p.x = (x_374 + 2);
-      }
-      let x_377 : i32 = d;
-      let x_378 : bool = (x_377 >= 0);
-      x_384_phi = x_378;
-      if (x_378) {
-        let x_382 : i32 = p.y;
-        x_383 = (x_382 < 14);
-        x_384_phi = x_383;
-      }
-      let x_384 : bool = x_384_phi;
-      x_397_phi = x_384;
-      if (x_384) {
-        let x_388 : i32 = p.x;
-        let x_390 : i32 = p.y;
-        let x_395 : i32 = map[(x_388 + ((x_390 + 2) * 16))];
-        x_396 = (x_395 == 0);
-        x_397_phi = x_396;
-      }
-      let x_397 : bool = x_397_phi;
-      if (x_397) {
-        let x_400 : i32 = d;
-        d = (x_400 - 1);
-        let x_403 : i32 = p.x;
-        let x_405 : i32 = p.y;
-        map[(x_403 + (x_405 * 16))] = 1;
-        let x_410 : i32 = p.x;
-        let x_412 : i32 = p.y;
-        map[(x_410 + ((x_412 + 1) * 16))] = 1;
-        let x_418 : i32 = p.x;
-        let x_420 : i32 = p.y;
-        map[(x_418 + ((x_420 + 2) * 16))] = 1;
-        let x_426 : i32 = p.y;
-        p.y = (x_426 + 2);
-      }
-    }
-    let x_430 : i32 = ipos.y;
-    let x_433 : i32 = ipos.x;
-    let x_436 : i32 = map[((x_430 * 16) + x_433)];
-    if ((x_436 == 1)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      return;
-    }
-
-    continuing {
-      let x_440 : bool = canwalk;
-      if (x_440) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a922b72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,297 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static int map[256] = (int[256])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int i = 0;
-  int2 p = int2(0, 0);
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  const float4 x_57 = gl_FragCoord;
-  const float2 x_60 = asfloat(x_7[0].xy);
-  pos = (float2(x_57.x, x_57.y) / x_60);
-  const float x_63 = pos.x;
-  const float x_67 = pos.y;
-  ipos = int2(int((x_63 * 16.0f)), int((x_67 * 16.0f)));
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      map[i] = 0;
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_102 = false;
-    bool x_122 = false;
-    bool x_142 = false;
-    bool x_162 = false;
-    bool x_103_phi = false;
-    bool x_123_phi = false;
-    bool x_143_phi = false;
-    bool x_163_phi = false;
-    v = (v + 1);
-    directions = 0;
-    const int x_89 = p.x;
-    const bool x_90 = (x_89 > 0);
-    x_103_phi = x_90;
-    if (x_90) {
-      const int x_94 = p.x;
-      const int x_97 = p.y;
-      const int x_101 = map[((x_94 - 2) + (x_97 * 16))];
-      x_102 = (x_101 == 0);
-      x_103_phi = x_102;
-    }
-    if (x_103_phi) {
-      directions = (directions + 1);
-    }
-    const int x_109 = p.y;
-    const bool x_110 = (x_109 > 0);
-    x_123_phi = x_110;
-    if (x_110) {
-      const int x_114 = p.x;
-      const int x_116 = p.y;
-      const int x_121 = map[(x_114 + ((x_116 - 2) * 16))];
-      x_122 = (x_121 == 0);
-      x_123_phi = x_122;
-    }
-    if (x_123_phi) {
-      directions = (directions + 1);
-    }
-    const int x_129 = p.x;
-    const bool x_130 = (x_129 < 14);
-    x_143_phi = x_130;
-    if (x_130) {
-      const int x_134 = p.x;
-      const int x_137 = p.y;
-      const int x_141 = map[((x_134 + 2) + (x_137 * 16))];
-      x_142 = (x_141 == 0);
-      x_143_phi = x_142;
-    }
-    if (x_143_phi) {
-      directions = (directions + 1);
-    }
-    const int x_149 = p.y;
-    const bool x_150 = (x_149 < 14);
-    x_163_phi = x_150;
-    if (x_150) {
-      const int x_154 = p.x;
-      const int x_156 = p.y;
-      const int x_161 = map[(x_154 + ((x_156 + 2) * 16))];
-      x_162 = (x_161 == 0);
-      x_163_phi = x_162;
-    }
-    if (x_163_phi) {
-      directions = (directions + 1);
-    }
-    bool x_227 = false;
-    bool x_240 = false;
-    bool x_279 = false;
-    bool x_292 = false;
-    bool x_331 = false;
-    bool x_344 = false;
-    bool x_383 = false;
-    bool x_396 = false;
-    bool x_228_phi = false;
-    bool x_241_phi = false;
-    bool x_280_phi = false;
-    bool x_293_phi = false;
-    bool x_332_phi = false;
-    bool x_345_phi = false;
-    bool x_384_phi = false;
-    bool x_397_phi = false;
-    if ((directions == 0)) {
-      canwalk = false;
-      i = 0;
-      {
-        for(; (i < 8); i = (i + 1)) {
-          j = 0;
-          {
-            for(; (j < 8); j = (j + 1)) {
-              const int x_194 = map[((j * 2) + ((i * 2) * 16))];
-              if ((x_194 == 0)) {
-                p.x = (j * 2);
-                p.y = (i * 2);
-                canwalk = true;
-              }
-            }
-          }
-        }
-      }
-      const int x_209 = p.x;
-      const int x_211 = p.y;
-      map[(x_209 + (x_211 * 16))] = 1;
-    } else {
-      d = (v % directions);
-      v = (v + directions);
-      const bool x_222 = (d >= 0);
-      x_228_phi = x_222;
-      if (x_222) {
-        const int x_226 = p.x;
-        x_227 = (x_226 > 0);
-        x_228_phi = x_227;
-      }
-      const bool x_228 = x_228_phi;
-      x_241_phi = x_228;
-      if (x_228) {
-        const int x_232 = p.x;
-        const int x_235 = p.y;
-        const int x_239 = map[((x_232 - 2) + (x_235 * 16))];
-        x_240 = (x_239 == 0);
-        x_241_phi = x_240;
-      }
-      if (x_241_phi) {
-        d = (d - 1);
-        const int x_247 = p.x;
-        const int x_249 = p.y;
-        map[(x_247 + (x_249 * 16))] = 1;
-        const int x_254 = p.x;
-        const int x_257 = p.y;
-        map[((x_254 - 1) + (x_257 * 16))] = 1;
-        const int x_262 = p.x;
-        const int x_265 = p.y;
-        map[((x_262 - 2) + (x_265 * 16))] = 1;
-        const int x_270 = p.x;
-        p.x = (x_270 - 2);
-      }
-      const bool x_274 = (d >= 0);
-      x_280_phi = x_274;
-      if (x_274) {
-        const int x_278 = p.y;
-        x_279 = (x_278 > 0);
-        x_280_phi = x_279;
-      }
-      const bool x_280 = x_280_phi;
-      x_293_phi = x_280;
-      if (x_280) {
-        const int x_284 = p.x;
-        const int x_286 = p.y;
-        const int x_291 = map[(x_284 + ((x_286 - 2) * 16))];
-        x_292 = (x_291 == 0);
-        x_293_phi = x_292;
-      }
-      if (x_293_phi) {
-        d = (d - 1);
-        const int x_299 = p.x;
-        const int x_301 = p.y;
-        map[(x_299 + (x_301 * 16))] = 1;
-        const int x_306 = p.x;
-        const int x_308 = p.y;
-        map[(x_306 + ((x_308 - 1) * 16))] = 1;
-        const int x_314 = p.x;
-        const int x_316 = p.y;
-        map[(x_314 + ((x_316 - 2) * 16))] = 1;
-        const int x_322 = p.y;
-        p.y = (x_322 - 2);
-      }
-      const bool x_326 = (d >= 0);
-      x_332_phi = x_326;
-      if (x_326) {
-        const int x_330 = p.x;
-        x_331 = (x_330 < 14);
-        x_332_phi = x_331;
-      }
-      const bool x_332 = x_332_phi;
-      x_345_phi = x_332;
-      if (x_332) {
-        const int x_336 = p.x;
-        const int x_339 = p.y;
-        const int x_343 = map[((x_336 + 2) + (x_339 * 16))];
-        x_344 = (x_343 == 0);
-        x_345_phi = x_344;
-      }
-      if (x_345_phi) {
-        d = (d - 1);
-        const int x_351 = p.x;
-        const int x_353 = p.y;
-        map[(x_351 + (x_353 * 16))] = 1;
-        const int x_358 = p.x;
-        const int x_361 = p.y;
-        map[((x_358 + 1) + (x_361 * 16))] = 1;
-        const int x_366 = p.x;
-        const int x_369 = p.y;
-        map[((x_366 + 2) + (x_369 * 16))] = 1;
-        const int x_374 = p.x;
-        p.x = (x_374 + 2);
-      }
-      const bool x_378 = (d >= 0);
-      x_384_phi = x_378;
-      if (x_378) {
-        const int x_382 = p.y;
-        x_383 = (x_382 < 14);
-        x_384_phi = x_383;
-      }
-      const bool x_384 = x_384_phi;
-      x_397_phi = x_384;
-      if (x_384) {
-        const int x_388 = p.x;
-        const int x_390 = p.y;
-        const int x_395 = map[(x_388 + ((x_390 + 2) * 16))];
-        x_396 = (x_395 == 0);
-        x_397_phi = x_396;
-      }
-      if (x_397_phi) {
-        d = (d - 1);
-        const int x_403 = p.x;
-        const int x_405 = p.y;
-        map[(x_403 + (x_405 * 16))] = 1;
-        const int x_410 = p.x;
-        const int x_412 = p.y;
-        map[(x_410 + ((x_412 + 1) * 16))] = 1;
-        const int x_418 = p.x;
-        const int x_420 = p.y;
-        map[(x_418 + ((x_420 + 2) * 16))] = 1;
-        const int x_426 = p.y;
-        p.y = (x_426 + 2);
-      }
-    }
-    const int x_430 = ipos.y;
-    const int x_433 = ipos.x;
-    const int x_436 = map[((x_430 * 16) + x_433)];
-    if ((x_436 == 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      if (canwalk) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.msl
deleted file mode 100644
index 7487fa5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,353 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float2 pos = 0.0f;
-  int2 ipos = 0;
-  int i = 0;
-  int2 p = 0;
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  float4 const x_57 = *(tint_symbol_3);
-  float2 const x_60 = x_7.resolution;
-  pos = (float2(x_57.x, x_57.y) / x_60);
-  float const x_63 = pos.x;
-  float const x_67 = pos.y;
-  ipos = int2(int((x_63 * 16.0f)), int((x_67 * 16.0f)));
-  i = 0;
-  while (true) {
-    int const x_75 = i;
-    if ((x_75 < 256)) {
-    } else {
-      break;
-    }
-    int const x_78 = i;
-    (*(tint_symbol_4)).arr[x_78] = 0;
-    {
-      int const x_80 = i;
-      i = as_type<int>((as_type<uint>(x_80) + as_type<uint>(1)));
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_102 = false;
-    bool x_122 = false;
-    bool x_142 = false;
-    bool x_162 = false;
-    bool x_103_phi = false;
-    bool x_123_phi = false;
-    bool x_143_phi = false;
-    bool x_163_phi = false;
-    int const x_86 = v;
-    v = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-    directions = 0;
-    int const x_89 = p.x;
-    bool const x_90 = (x_89 > 0);
-    x_103_phi = x_90;
-    if (x_90) {
-      int const x_94 = p.x;
-      int const x_97 = p.y;
-      int const x_101 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_94) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_97) * as_type<uint>(16))))))];
-      x_102 = (x_101 == 0);
-      x_103_phi = x_102;
-    }
-    bool const x_103 = x_103_phi;
-    if (x_103) {
-      int const x_106 = directions;
-      directions = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-    }
-    int const x_109 = p.y;
-    bool const x_110 = (x_109 > 0);
-    x_123_phi = x_110;
-    if (x_110) {
-      int const x_114 = p.x;
-      int const x_116 = p.y;
-      int const x_121 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_114) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_116) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_122 = (x_121 == 0);
-      x_123_phi = x_122;
-    }
-    bool const x_123 = x_123_phi;
-    if (x_123) {
-      int const x_126 = directions;
-      directions = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-    }
-    int const x_129 = p.x;
-    bool const x_130 = (x_129 < 14);
-    x_143_phi = x_130;
-    if (x_130) {
-      int const x_134 = p.x;
-      int const x_137 = p.y;
-      int const x_141 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_134) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_137) * as_type<uint>(16))))))];
-      x_142 = (x_141 == 0);
-      x_143_phi = x_142;
-    }
-    bool const x_143 = x_143_phi;
-    if (x_143) {
-      int const x_146 = directions;
-      directions = as_type<int>((as_type<uint>(x_146) + as_type<uint>(1)));
-    }
-    int const x_149 = p.y;
-    bool const x_150 = (x_149 < 14);
-    x_163_phi = x_150;
-    if (x_150) {
-      int const x_154 = p.x;
-      int const x_156 = p.y;
-      int const x_161 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_154) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_156) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_162 = (x_161 == 0);
-      x_163_phi = x_162;
-    }
-    bool const x_163 = x_163_phi;
-    if (x_163) {
-      int const x_166 = directions;
-      directions = as_type<int>((as_type<uint>(x_166) + as_type<uint>(1)));
-    }
-    bool x_227 = false;
-    bool x_240 = false;
-    bool x_279 = false;
-    bool x_292 = false;
-    bool x_331 = false;
-    bool x_344 = false;
-    bool x_383 = false;
-    bool x_396 = false;
-    bool x_228_phi = false;
-    bool x_241_phi = false;
-    bool x_280_phi = false;
-    bool x_293_phi = false;
-    bool x_332_phi = false;
-    bool x_345_phi = false;
-    bool x_384_phi = false;
-    bool x_397_phi = false;
-    int const x_168 = directions;
-    if ((x_168 == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        int const x_177 = i;
-        if ((x_177 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        while (true) {
-          int const x_184 = j;
-          if ((x_184 < 8)) {
-          } else {
-            break;
-          }
-          int const x_187 = j;
-          int const x_189 = i;
-          int const x_194 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_187) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_189) * as_type<uint>(2)))) * as_type<uint>(16))))))];
-          if ((x_194 == 0)) {
-            int const x_198 = j;
-            p.x = as_type<int>((as_type<uint>(x_198) * as_type<uint>(2)));
-            int const x_201 = i;
-            p.y = as_type<int>((as_type<uint>(x_201) * as_type<uint>(2)));
-            canwalk = true;
-          }
-          {
-            int const x_204 = j;
-            j = as_type<int>((as_type<uint>(x_204) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_206 = i;
-          i = as_type<int>((as_type<uint>(x_206) + as_type<uint>(1)));
-        }
-      }
-      int const x_209 = p.x;
-      int const x_211 = p.y;
-      (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_209) + as_type<uint>(as_type<int>((as_type<uint>(x_211) * as_type<uint>(16))))))] = 1;
-    } else {
-      int const x_215 = v;
-      int const x_216 = directions;
-      d = (x_215 % x_216);
-      int const x_218 = directions;
-      int const x_219 = v;
-      v = as_type<int>((as_type<uint>(x_219) + as_type<uint>(x_218)));
-      int const x_221 = d;
-      bool const x_222 = (x_221 >= 0);
-      x_228_phi = x_222;
-      if (x_222) {
-        int const x_226 = p.x;
-        x_227 = (x_226 > 0);
-        x_228_phi = x_227;
-      }
-      bool const x_228 = x_228_phi;
-      x_241_phi = x_228;
-      if (x_228) {
-        int const x_232 = p.x;
-        int const x_235 = p.y;
-        int const x_239 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_232) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_235) * as_type<uint>(16))))))];
-        x_240 = (x_239 == 0);
-        x_241_phi = x_240;
-      }
-      bool const x_241 = x_241_phi;
-      if (x_241) {
-        int const x_244 = d;
-        d = as_type<int>((as_type<uint>(x_244) - as_type<uint>(1)));
-        int const x_247 = p.x;
-        int const x_249 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_247) + as_type<uint>(as_type<int>((as_type<uint>(x_249) * as_type<uint>(16))))))] = 1;
-        int const x_254 = p.x;
-        int const x_257 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_254) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_257) * as_type<uint>(16))))))] = 1;
-        int const x_262 = p.x;
-        int const x_265 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_262) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_265) * as_type<uint>(16))))))] = 1;
-        int const x_270 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_270) - as_type<uint>(2)));
-      }
-      int const x_273 = d;
-      bool const x_274 = (x_273 >= 0);
-      x_280_phi = x_274;
-      if (x_274) {
-        int const x_278 = p.y;
-        x_279 = (x_278 > 0);
-        x_280_phi = x_279;
-      }
-      bool const x_280 = x_280_phi;
-      x_293_phi = x_280;
-      if (x_280) {
-        int const x_284 = p.x;
-        int const x_286 = p.y;
-        int const x_291 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_284) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_286) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_292 = (x_291 == 0);
-        x_293_phi = x_292;
-      }
-      bool const x_293 = x_293_phi;
-      if (x_293) {
-        int const x_296 = d;
-        d = as_type<int>((as_type<uint>(x_296) - as_type<uint>(1)));
-        int const x_299 = p.x;
-        int const x_301 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_299) + as_type<uint>(as_type<int>((as_type<uint>(x_301) * as_type<uint>(16))))))] = 1;
-        int const x_306 = p.x;
-        int const x_308 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_306) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_308) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_314 = p.x;
-        int const x_316 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_314) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_316) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_322 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_322) - as_type<uint>(2)));
-      }
-      int const x_325 = d;
-      bool const x_326 = (x_325 >= 0);
-      x_332_phi = x_326;
-      if (x_326) {
-        int const x_330 = p.x;
-        x_331 = (x_330 < 14);
-        x_332_phi = x_331;
-      }
-      bool const x_332 = x_332_phi;
-      x_345_phi = x_332;
-      if (x_332) {
-        int const x_336 = p.x;
-        int const x_339 = p.y;
-        int const x_343 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_336) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_339) * as_type<uint>(16))))))];
-        x_344 = (x_343 == 0);
-        x_345_phi = x_344;
-      }
-      bool const x_345 = x_345_phi;
-      if (x_345) {
-        int const x_348 = d;
-        d = as_type<int>((as_type<uint>(x_348) - as_type<uint>(1)));
-        int const x_351 = p.x;
-        int const x_353 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_351) + as_type<uint>(as_type<int>((as_type<uint>(x_353) * as_type<uint>(16))))))] = 1;
-        int const x_358 = p.x;
-        int const x_361 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_358) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_361) * as_type<uint>(16))))))] = 1;
-        int const x_366 = p.x;
-        int const x_369 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_366) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_369) * as_type<uint>(16))))))] = 1;
-        int const x_374 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_374) + as_type<uint>(2)));
-      }
-      int const x_377 = d;
-      bool const x_378 = (x_377 >= 0);
-      x_384_phi = x_378;
-      if (x_378) {
-        int const x_382 = p.y;
-        x_383 = (x_382 < 14);
-        x_384_phi = x_383;
-      }
-      bool const x_384 = x_384_phi;
-      x_397_phi = x_384;
-      if (x_384) {
-        int const x_388 = p.x;
-        int const x_390 = p.y;
-        int const x_395 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_388) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_390) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_396 = (x_395 == 0);
-        x_397_phi = x_396;
-      }
-      bool const x_397 = x_397_phi;
-      if (x_397) {
-        int const x_400 = d;
-        d = as_type<int>((as_type<uint>(x_400) - as_type<uint>(1)));
-        int const x_403 = p.x;
-        int const x_405 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_403) + as_type<uint>(as_type<int>((as_type<uint>(x_405) * as_type<uint>(16))))))] = 1;
-        int const x_410 = p.x;
-        int const x_412 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_410) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_412) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_418 = p.x;
-        int const x_420 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_418) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_420) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_426 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_426) + as_type<uint>(2)));
-      }
-    }
-    int const x_430 = ipos.y;
-    int const x_433 = ipos.x;
-    int const x_436 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_430) * as_type<uint>(16)))) + as_type<uint>(x_433)))];
-    if ((x_436 == 1)) {
-      *(tint_symbol_5) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      bool const x_440 = canwalk;
-      if (x_440) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_6, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread tint_array_wrapper tint_symbol_10 = {};
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0897775..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,763 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 506
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %map "map"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %ipos "ipos"
-               OpName %i "i"
-               OpName %p "p"
-               OpName %canwalk "canwalk"
-               OpName %v "v"
-               OpName %directions "directions"
-               OpName %j "j"
-               OpName %d "d"
-               OpName %x_102 "x_102"
-               OpName %x_122 "x_122"
-               OpName %x_142 "x_142"
-               OpName %x_162 "x_162"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_123_phi "x_123_phi"
-               OpName %x_143_phi "x_143_phi"
-               OpName %x_163_phi "x_163_phi"
-               OpName %x_227 "x_227"
-               OpName %x_240 "x_240"
-               OpName %x_279 "x_279"
-               OpName %x_292 "x_292"
-               OpName %x_331 "x_331"
-               OpName %x_344 "x_344"
-               OpName %x_383 "x_383"
-               OpName %x_396 "x_396"
-               OpName %x_228_phi "x_228_phi"
-               OpName %x_241_phi "x_241_phi"
-               OpName %x_280_phi "x_280_phi"
-               OpName %x_293_phi "x_293_phi"
-               OpName %x_332_phi "x_332_phi"
-               OpName %x_345_phi "x_345_phi"
-               OpName %x_384_phi "x_384_phi"
-               OpName %x_397_phi "x_397_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
-         %20 = OpConstantNull %_arr_int_uint_256
-        %map = OpVariable %_ptr_Private__arr_int_uint_256 Private %20
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %28 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %32 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %float_16 = OpConstant %float 16
-      %int_0 = OpConstant %int 0
-    %int_256 = OpConstant %int 256
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-         %83 = OpConstantComposite %v2int %int_0 %int_0
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-     %int_16 = OpConstant %int 16
-     %int_14 = OpConstant %int 14
-      %false = OpConstantFalse %bool
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-        %489 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-        %492 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %493 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %28
-       %ipos = OpVariable %_ptr_Function_v2int Function %32
-          %i = OpVariable %_ptr_Function_int Function %35
-          %p = OpVariable %_ptr_Function_v2int Function %32
-    %canwalk = OpVariable %_ptr_Function_bool Function %40
-          %v = OpVariable %_ptr_Function_int Function %35
- %directions = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-          %d = OpVariable %_ptr_Function_int Function %35
-      %x_102 = OpVariable %_ptr_Function_bool Function %40
-      %x_122 = OpVariable %_ptr_Function_bool Function %40
-      %x_142 = OpVariable %_ptr_Function_bool Function %40
-      %x_162 = OpVariable %_ptr_Function_bool Function %40
-  %x_103_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_123_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_143_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_163_phi = OpVariable %_ptr_Function_bool Function %40
-      %x_227 = OpVariable %_ptr_Function_bool Function %40
-      %x_240 = OpVariable %_ptr_Function_bool Function %40
-      %x_279 = OpVariable %_ptr_Function_bool Function %40
-      %x_292 = OpVariable %_ptr_Function_bool Function %40
-      %x_331 = OpVariable %_ptr_Function_bool Function %40
-      %x_344 = OpVariable %_ptr_Function_bool Function %40
-      %x_383 = OpVariable %_ptr_Function_bool Function %40
-      %x_396 = OpVariable %_ptr_Function_bool Function %40
-  %x_228_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_241_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_280_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_293_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_332_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_345_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_384_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_397_phi = OpVariable %_ptr_Function_bool Function %40
-         %45 = OpLoad %v4float %gl_FragCoord
-         %48 = OpAccessChain %_ptr_Uniform_v2float %x_7 %uint_0
-         %49 = OpLoad %v2float %48
-         %50 = OpCompositeExtract %float %45 0
-         %51 = OpCompositeExtract %float %45 1
-         %52 = OpCompositeConstruct %v2float %50 %51
-         %53 = OpFDiv %v2float %52 %49
-               OpStore %pos %53
-         %55 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %59 = OpLoad %float %58
-         %62 = OpFMul %float %56 %float_16
-         %60 = OpConvertFToS %int %62
-         %64 = OpFMul %float %59 %float_16
-         %63 = OpConvertFToS %int %64
-         %65 = OpCompositeConstruct %v2int %60 %63
-               OpStore %ipos %65
-               OpStore %i %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %73 = OpSLessThan %bool %71 %int_256
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %68
-         %74 = OpLabel
-         %77 = OpLoad %int %i
-         %79 = OpAccessChain %_ptr_Private_int %map %77
-               OpStore %79 %int_0
-               OpBranch %69
-         %69 = OpLabel
-         %80 = OpLoad %int %i
-         %82 = OpIAdd %int %80 %int_1
-               OpStore %i %82
-               OpBranch %67
-         %68 = OpLabel
-               OpStore %p %83
-               OpStore %canwalk %true
-               OpStore %v %int_0
-               OpBranch %85
-         %85 = OpLabel
-               OpLoopMerge %86 %87 None
-               OpBranch %88
-         %88 = OpLabel
-         %97 = OpLoad %int %v
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %v %98
-               OpStore %directions %int_0
-         %99 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %100 = OpLoad %int %99
-        %101 = OpSGreaterThan %bool %100 %int_0
-               OpStore %x_103_phi %101
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %107 = OpLoad %int %106
-        %109 = OpISub %int %105 %int_2
-        %111 = OpIMul %int %107 %int_16
-        %112 = OpIAdd %int %109 %111
-        %113 = OpAccessChain %_ptr_Private_int %map %112
-        %114 = OpLoad %int %113
-        %115 = OpIEqual %bool %114 %int_0
-               OpStore %x_102 %115
-        %116 = OpLoad %bool %x_102
-               OpStore %x_103_phi %116
-               OpBranch %102
-        %102 = OpLabel
-        %117 = OpLoad %bool %x_103_phi
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpLoad %int %directions
-        %121 = OpIAdd %int %120 %int_1
-               OpStore %directions %121
-               OpBranch %118
-        %118 = OpLabel
-        %122 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %123 = OpLoad %int %122
-        %124 = OpSGreaterThan %bool %123 %int_0
-               OpStore %x_123_phi %124
-               OpSelectionMerge %125 None
-               OpBranchConditional %124 %126 %125
-        %126 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %130 = OpLoad %int %129
-        %131 = OpISub %int %130 %int_2
-        %132 = OpIMul %int %131 %int_16
-        %133 = OpIAdd %int %128 %132
-        %134 = OpAccessChain %_ptr_Private_int %map %133
-        %135 = OpLoad %int %134
-        %136 = OpIEqual %bool %135 %int_0
-               OpStore %x_122 %136
-        %137 = OpLoad %bool %x_122
-               OpStore %x_123_phi %137
-               OpBranch %125
-        %125 = OpLabel
-        %138 = OpLoad %bool %x_123_phi
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %int %directions
-        %142 = OpIAdd %int %141 %int_1
-               OpStore %directions %142
-               OpBranch %139
-        %139 = OpLabel
-        %143 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %144 = OpLoad %int %143
-        %146 = OpSLessThan %bool %144 %int_14
-               OpStore %x_143_phi %146
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-        %149 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %150 = OpLoad %int %149
-        %151 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %152 = OpLoad %int %151
-        %153 = OpIAdd %int %150 %int_2
-        %154 = OpIMul %int %152 %int_16
-        %155 = OpIAdd %int %153 %154
-        %156 = OpAccessChain %_ptr_Private_int %map %155
-        %157 = OpLoad %int %156
-        %158 = OpIEqual %bool %157 %int_0
-               OpStore %x_142 %158
-        %159 = OpLoad %bool %x_142
-               OpStore %x_143_phi %159
-               OpBranch %147
-        %147 = OpLabel
-        %160 = OpLoad %bool %x_143_phi
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %161
-        %162 = OpLabel
-        %163 = OpLoad %int %directions
-        %164 = OpIAdd %int %163 %int_1
-               OpStore %directions %164
-               OpBranch %161
-        %161 = OpLabel
-        %165 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %166 %int_14
-               OpStore %x_163_phi %167
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %168
-        %169 = OpLabel
-        %170 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %171 = OpLoad %int %170
-        %172 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %173 = OpLoad %int %172
-        %174 = OpIAdd %int %173 %int_2
-        %175 = OpIMul %int %174 %int_16
-        %176 = OpIAdd %int %171 %175
-        %177 = OpAccessChain %_ptr_Private_int %map %176
-        %178 = OpLoad %int %177
-        %179 = OpIEqual %bool %178 %int_0
-               OpStore %x_162 %179
-        %180 = OpLoad %bool %x_162
-               OpStore %x_163_phi %180
-               OpBranch %168
-        %168 = OpLabel
-        %181 = OpLoad %bool %x_163_phi
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %directions
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %directions %185
-               OpBranch %182
-        %182 = OpLabel
-        %202 = OpLoad %int %directions
-        %203 = OpIEqual %bool %202 %int_0
-               OpSelectionMerge %204 None
-               OpBranchConditional %203 %205 %206
-        %205 = OpLabel
-               OpStore %canwalk %false
-               OpStore %i %int_0
-               OpBranch %208
-        %208 = OpLabel
-               OpLoopMerge %209 %210 None
-               OpBranch %211
-        %211 = OpLabel
-        %212 = OpLoad %int %i
-        %214 = OpSLessThan %bool %212 %int_8
-               OpSelectionMerge %215 None
-               OpBranchConditional %214 %216 %217
-        %216 = OpLabel
-               OpBranch %215
-        %217 = OpLabel
-               OpBranch %209
-        %215 = OpLabel
-               OpStore %j %int_0
-               OpBranch %218
-        %218 = OpLabel
-               OpLoopMerge %219 %220 None
-               OpBranch %221
-        %221 = OpLabel
-        %222 = OpLoad %int %j
-        %223 = OpSLessThan %bool %222 %int_8
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %226
-        %225 = OpLabel
-               OpBranch %224
-        %226 = OpLabel
-               OpBranch %219
-        %224 = OpLabel
-        %227 = OpLoad %int %j
-        %228 = OpLoad %int %i
-        %229 = OpIMul %int %227 %int_2
-        %230 = OpIMul %int %228 %int_2
-        %231 = OpIMul %int %230 %int_16
-        %232 = OpIAdd %int %229 %231
-        %233 = OpAccessChain %_ptr_Private_int %map %232
-        %234 = OpLoad %int %233
-        %235 = OpIEqual %bool %234 %int_0
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %236
-        %237 = OpLabel
-        %238 = OpLoad %int %j
-        %239 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %240 = OpIMul %int %238 %int_2
-               OpStore %239 %240
-        %241 = OpLoad %int %i
-        %242 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %243 = OpIMul %int %241 %int_2
-               OpStore %242 %243
-               OpStore %canwalk %true
-               OpBranch %236
-        %236 = OpLabel
-               OpBranch %220
-        %220 = OpLabel
-        %244 = OpLoad %int %j
-        %245 = OpIAdd %int %244 %int_1
-               OpStore %j %245
-               OpBranch %218
-        %219 = OpLabel
-               OpBranch %210
-        %210 = OpLabel
-        %246 = OpLoad %int %i
-        %247 = OpIAdd %int %246 %int_1
-               OpStore %i %247
-               OpBranch %208
-        %209 = OpLabel
-        %248 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %249 = OpLoad %int %248
-        %250 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %251 = OpLoad %int %250
-        %252 = OpIMul %int %251 %int_16
-        %253 = OpIAdd %int %249 %252
-        %254 = OpAccessChain %_ptr_Private_int %map %253
-               OpStore %254 %int_1
-               OpBranch %204
-        %206 = OpLabel
-        %255 = OpLoad %int %v
-        %256 = OpLoad %int %directions
-        %257 = OpSMod %int %255 %256
-               OpStore %d %257
-        %258 = OpLoad %int %directions
-        %259 = OpLoad %int %v
-        %260 = OpIAdd %int %259 %258
-               OpStore %v %260
-        %261 = OpLoad %int %d
-        %262 = OpSGreaterThanEqual %bool %261 %int_0
-               OpStore %x_228_phi %262
-               OpSelectionMerge %263 None
-               OpBranchConditional %262 %264 %263
-        %264 = OpLabel
-        %265 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %266 = OpLoad %int %265
-        %267 = OpSGreaterThan %bool %266 %int_0
-               OpStore %x_227 %267
-        %268 = OpLoad %bool %x_227
-               OpStore %x_228_phi %268
-               OpBranch %263
-        %263 = OpLabel
-        %269 = OpLoad %bool %x_228_phi
-               OpStore %x_241_phi %269
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %270
-        %271 = OpLabel
-        %272 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %273 = OpLoad %int %272
-        %274 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %275 = OpLoad %int %274
-        %276 = OpISub %int %273 %int_2
-        %277 = OpIMul %int %275 %int_16
-        %278 = OpIAdd %int %276 %277
-        %279 = OpAccessChain %_ptr_Private_int %map %278
-        %280 = OpLoad %int %279
-        %281 = OpIEqual %bool %280 %int_0
-               OpStore %x_240 %281
-        %282 = OpLoad %bool %x_240
-               OpStore %x_241_phi %282
-               OpBranch %270
-        %270 = OpLabel
-        %283 = OpLoad %bool %x_241_phi
-               OpSelectionMerge %284 None
-               OpBranchConditional %283 %285 %284
-        %285 = OpLabel
-        %286 = OpLoad %int %d
-        %287 = OpISub %int %286 %int_1
-               OpStore %d %287
-        %288 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %289 = OpLoad %int %288
-        %290 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %291 = OpLoad %int %290
-        %292 = OpIMul %int %291 %int_16
-        %293 = OpIAdd %int %289 %292
-        %294 = OpAccessChain %_ptr_Private_int %map %293
-               OpStore %294 %int_1
-        %295 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %296 = OpLoad %int %295
-        %297 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %298 = OpLoad %int %297
-        %299 = OpISub %int %296 %int_1
-        %300 = OpIMul %int %298 %int_16
-        %301 = OpIAdd %int %299 %300
-        %302 = OpAccessChain %_ptr_Private_int %map %301
-               OpStore %302 %int_1
-        %303 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %304 = OpLoad %int %303
-        %305 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %306 = OpLoad %int %305
-        %307 = OpISub %int %304 %int_2
-        %308 = OpIMul %int %306 %int_16
-        %309 = OpIAdd %int %307 %308
-        %310 = OpAccessChain %_ptr_Private_int %map %309
-               OpStore %310 %int_1
-        %311 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %312 = OpLoad %int %311
-        %313 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %314 = OpISub %int %312 %int_2
-               OpStore %313 %314
-               OpBranch %284
-        %284 = OpLabel
-        %315 = OpLoad %int %d
-        %316 = OpSGreaterThanEqual %bool %315 %int_0
-               OpStore %x_280_phi %316
-               OpSelectionMerge %317 None
-               OpBranchConditional %316 %318 %317
-        %318 = OpLabel
-        %319 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %320 = OpLoad %int %319
-        %321 = OpSGreaterThan %bool %320 %int_0
-               OpStore %x_279 %321
-        %322 = OpLoad %bool %x_279
-               OpStore %x_280_phi %322
-               OpBranch %317
-        %317 = OpLabel
-        %323 = OpLoad %bool %x_280_phi
-               OpStore %x_293_phi %323
-               OpSelectionMerge %324 None
-               OpBranchConditional %323 %325 %324
-        %325 = OpLabel
-        %326 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %327 = OpLoad %int %326
-        %328 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %329 = OpLoad %int %328
-        %330 = OpISub %int %329 %int_2
-        %331 = OpIMul %int %330 %int_16
-        %332 = OpIAdd %int %327 %331
-        %333 = OpAccessChain %_ptr_Private_int %map %332
-        %334 = OpLoad %int %333
-        %335 = OpIEqual %bool %334 %int_0
-               OpStore %x_292 %335
-        %336 = OpLoad %bool %x_292
-               OpStore %x_293_phi %336
-               OpBranch %324
-        %324 = OpLabel
-        %337 = OpLoad %bool %x_293_phi
-               OpSelectionMerge %338 None
-               OpBranchConditional %337 %339 %338
-        %339 = OpLabel
-        %340 = OpLoad %int %d
-        %341 = OpISub %int %340 %int_1
-               OpStore %d %341
-        %342 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %343 = OpLoad %int %342
-        %344 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %345 = OpLoad %int %344
-        %346 = OpIMul %int %345 %int_16
-        %347 = OpIAdd %int %343 %346
-        %348 = OpAccessChain %_ptr_Private_int %map %347
-               OpStore %348 %int_1
-        %349 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %350 = OpLoad %int %349
-        %351 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %352 = OpLoad %int %351
-        %353 = OpISub %int %352 %int_1
-        %354 = OpIMul %int %353 %int_16
-        %355 = OpIAdd %int %350 %354
-        %356 = OpAccessChain %_ptr_Private_int %map %355
-               OpStore %356 %int_1
-        %357 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %358 = OpLoad %int %357
-        %359 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %360 = OpLoad %int %359
-        %361 = OpISub %int %360 %int_2
-        %362 = OpIMul %int %361 %int_16
-        %363 = OpIAdd %int %358 %362
-        %364 = OpAccessChain %_ptr_Private_int %map %363
-               OpStore %364 %int_1
-        %365 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %366 = OpLoad %int %365
-        %367 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %368 = OpISub %int %366 %int_2
-               OpStore %367 %368
-               OpBranch %338
-        %338 = OpLabel
-        %369 = OpLoad %int %d
-        %370 = OpSGreaterThanEqual %bool %369 %int_0
-               OpStore %x_332_phi %370
-               OpSelectionMerge %371 None
-               OpBranchConditional %370 %372 %371
-        %372 = OpLabel
-        %373 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %374 = OpLoad %int %373
-        %375 = OpSLessThan %bool %374 %int_14
-               OpStore %x_331 %375
-        %376 = OpLoad %bool %x_331
-               OpStore %x_332_phi %376
-               OpBranch %371
-        %371 = OpLabel
-        %377 = OpLoad %bool %x_332_phi
-               OpStore %x_345_phi %377
-               OpSelectionMerge %378 None
-               OpBranchConditional %377 %379 %378
-        %379 = OpLabel
-        %380 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %381 = OpLoad %int %380
-        %382 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %383 = OpLoad %int %382
-        %384 = OpIAdd %int %381 %int_2
-        %385 = OpIMul %int %383 %int_16
-        %386 = OpIAdd %int %384 %385
-        %387 = OpAccessChain %_ptr_Private_int %map %386
-        %388 = OpLoad %int %387
-        %389 = OpIEqual %bool %388 %int_0
-               OpStore %x_344 %389
-        %390 = OpLoad %bool %x_344
-               OpStore %x_345_phi %390
-               OpBranch %378
-        %378 = OpLabel
-        %391 = OpLoad %bool %x_345_phi
-               OpSelectionMerge %392 None
-               OpBranchConditional %391 %393 %392
-        %393 = OpLabel
-        %394 = OpLoad %int %d
-        %395 = OpISub %int %394 %int_1
-               OpStore %d %395
-        %396 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %397 = OpLoad %int %396
-        %398 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %399 = OpLoad %int %398
-        %400 = OpIMul %int %399 %int_16
-        %401 = OpIAdd %int %397 %400
-        %402 = OpAccessChain %_ptr_Private_int %map %401
-               OpStore %402 %int_1
-        %403 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %404 = OpLoad %int %403
-        %405 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %406 = OpLoad %int %405
-        %407 = OpIAdd %int %404 %int_1
-        %408 = OpIMul %int %406 %int_16
-        %409 = OpIAdd %int %407 %408
-        %410 = OpAccessChain %_ptr_Private_int %map %409
-               OpStore %410 %int_1
-        %411 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %412 = OpLoad %int %411
-        %413 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %414 = OpLoad %int %413
-        %415 = OpIAdd %int %412 %int_2
-        %416 = OpIMul %int %414 %int_16
-        %417 = OpIAdd %int %415 %416
-        %418 = OpAccessChain %_ptr_Private_int %map %417
-               OpStore %418 %int_1
-        %419 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %420 = OpLoad %int %419
-        %421 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %422 = OpIAdd %int %420 %int_2
-               OpStore %421 %422
-               OpBranch %392
-        %392 = OpLabel
-        %423 = OpLoad %int %d
-        %424 = OpSGreaterThanEqual %bool %423 %int_0
-               OpStore %x_384_phi %424
-               OpSelectionMerge %425 None
-               OpBranchConditional %424 %426 %425
-        %426 = OpLabel
-        %427 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %428 = OpLoad %int %427
-        %429 = OpSLessThan %bool %428 %int_14
-               OpStore %x_383 %429
-        %430 = OpLoad %bool %x_383
-               OpStore %x_384_phi %430
-               OpBranch %425
-        %425 = OpLabel
-        %431 = OpLoad %bool %x_384_phi
-               OpStore %x_397_phi %431
-               OpSelectionMerge %432 None
-               OpBranchConditional %431 %433 %432
-        %433 = OpLabel
-        %434 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %435 = OpLoad %int %434
-        %436 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %437 = OpLoad %int %436
-        %438 = OpIAdd %int %437 %int_2
-        %439 = OpIMul %int %438 %int_16
-        %440 = OpIAdd %int %435 %439
-        %441 = OpAccessChain %_ptr_Private_int %map %440
-        %442 = OpLoad %int %441
-        %443 = OpIEqual %bool %442 %int_0
-               OpStore %x_396 %443
-        %444 = OpLoad %bool %x_396
-               OpStore %x_397_phi %444
-               OpBranch %432
-        %432 = OpLabel
-        %445 = OpLoad %bool %x_397_phi
-               OpSelectionMerge %446 None
-               OpBranchConditional %445 %447 %446
-        %447 = OpLabel
-        %448 = OpLoad %int %d
-        %449 = OpISub %int %448 %int_1
-               OpStore %d %449
-        %450 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %451 = OpLoad %int %450
-        %452 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %453 = OpLoad %int %452
-        %454 = OpIMul %int %453 %int_16
-        %455 = OpIAdd %int %451 %454
-        %456 = OpAccessChain %_ptr_Private_int %map %455
-               OpStore %456 %int_1
-        %457 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %458 = OpLoad %int %457
-        %459 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %460 = OpLoad %int %459
-        %461 = OpIAdd %int %460 %int_1
-        %462 = OpIMul %int %461 %int_16
-        %463 = OpIAdd %int %458 %462
-        %464 = OpAccessChain %_ptr_Private_int %map %463
-               OpStore %464 %int_1
-        %465 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %466 = OpLoad %int %465
-        %467 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %468 = OpLoad %int %467
-        %469 = OpIAdd %int %468 %int_2
-        %470 = OpIMul %int %469 %int_16
-        %471 = OpIAdd %int %466 %470
-        %472 = OpAccessChain %_ptr_Private_int %map %471
-               OpStore %472 %int_1
-        %473 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %474 = OpLoad %int %473
-        %475 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %476 = OpIAdd %int %474 %int_2
-               OpStore %475 %476
-               OpBranch %446
-        %446 = OpLabel
-               OpBranch %204
-        %204 = OpLabel
-        %477 = OpAccessChain %_ptr_Function_int %ipos %uint_1
-        %478 = OpLoad %int %477
-        %479 = OpAccessChain %_ptr_Function_int %ipos %uint_0
-        %480 = OpLoad %int %479
-        %481 = OpIMul %int %478 %int_16
-        %482 = OpIAdd %int %481 %480
-        %483 = OpAccessChain %_ptr_Private_int %map %482
-        %484 = OpLoad %int %483
-        %485 = OpIEqual %bool %484 %int_1
-               OpSelectionMerge %486 None
-               OpBranchConditional %485 %487 %486
-        %487 = OpLabel
-               OpStore %x_GLF_color %489
-               OpReturn
-        %486 = OpLabel
-               OpBranch %87
-         %87 = OpLabel
-        %490 = OpLoad %bool %canwalk
-               OpBranchConditional %490 %85 %86
-         %86 = OpLabel
-               OpStore %x_GLF_color %492
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %493
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %497 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %498 = OpFunctionCall %void %main_1
-        %499 = OpLoad %v4float %x_GLF_color
-        %500 = OpCompositeConstruct %main_out %499
-               OpReturnValue %500
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %502 = OpLabel
-        %504 = OpLoad %v4float %gl_FragCoord_param_1
-        %503 = OpFunctionCall %main_out %main_inner %504
-        %505 = OpCompositeExtract %v4float %503 0
-               OpStore %x_GLF_color_1_1 %505
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 4128fb7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-access-chains/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,348 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> map : array<i32, 256>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var ipos : vec2<i32>;
-  var i : i32;
-  var p : vec2<i32>;
-  var canwalk : bool;
-  var v : i32;
-  var directions : i32;
-  var j : i32;
-  var d : i32;
-  let x_57 : vec4<f32> = gl_FragCoord;
-  let x_60 : vec2<f32> = x_7.resolution;
-  pos = (vec2<f32>(x_57.x, x_57.y) / x_60);
-  let x_63 : f32 = pos.x;
-  let x_67 : f32 = pos.y;
-  ipos = vec2<i32>(i32((x_63 * 16.0)), i32((x_67 * 16.0)));
-  i = 0;
-  loop {
-    let x_75 : i32 = i;
-    if ((x_75 < 256)) {
-    } else {
-      break;
-    }
-    let x_78 : i32 = i;
-    map[x_78] = 0;
-
-    continuing {
-      let x_80 : i32 = i;
-      i = (x_80 + 1);
-    }
-  }
-  p = vec2<i32>(0, 0);
-  canwalk = true;
-  v = 0;
-  loop {
-    var x_102 : bool;
-    var x_122 : bool;
-    var x_142 : bool;
-    var x_162 : bool;
-    var x_103_phi : bool;
-    var x_123_phi : bool;
-    var x_143_phi : bool;
-    var x_163_phi : bool;
-    let x_86 : i32 = v;
-    v = (x_86 + 1);
-    directions = 0;
-    let x_89 : i32 = p.x;
-    let x_90 : bool = (x_89 > 0);
-    x_103_phi = x_90;
-    if (x_90) {
-      let x_94 : i32 = p.x;
-      let x_97 : i32 = p.y;
-      let x_101 : i32 = map[((x_94 - 2) + (x_97 * 16))];
-      x_102 = (x_101 == 0);
-      x_103_phi = x_102;
-    }
-    let x_103 : bool = x_103_phi;
-    if (x_103) {
-      let x_106 : i32 = directions;
-      directions = (x_106 + 1);
-    }
-    let x_109 : i32 = p.y;
-    let x_110 : bool = (x_109 > 0);
-    x_123_phi = x_110;
-    if (x_110) {
-      let x_114 : i32 = p.x;
-      let x_116 : i32 = p.y;
-      let x_121 : i32 = map[(x_114 + ((x_116 - 2) * 16))];
-      x_122 = (x_121 == 0);
-      x_123_phi = x_122;
-    }
-    let x_123 : bool = x_123_phi;
-    if (x_123) {
-      let x_126 : i32 = directions;
-      directions = (x_126 + 1);
-    }
-    let x_129 : i32 = p.x;
-    let x_130 : bool = (x_129 < 14);
-    x_143_phi = x_130;
-    if (x_130) {
-      let x_134 : i32 = p.x;
-      let x_137 : i32 = p.y;
-      let x_141 : i32 = map[((x_134 + 2) + (x_137 * 16))];
-      x_142 = (x_141 == 0);
-      x_143_phi = x_142;
-    }
-    let x_143 : bool = x_143_phi;
-    if (x_143) {
-      let x_146 : i32 = directions;
-      directions = (x_146 + 1);
-    }
-    let x_149 : i32 = p.y;
-    let x_150 : bool = (x_149 < 14);
-    x_163_phi = x_150;
-    if (x_150) {
-      let x_154 : i32 = p.x;
-      let x_156 : i32 = p.y;
-      let x_161 : i32 = map[(x_154 + ((x_156 + 2) * 16))];
-      x_162 = (x_161 == 0);
-      x_163_phi = x_162;
-    }
-    let x_163 : bool = x_163_phi;
-    if (x_163) {
-      let x_166 : i32 = directions;
-      directions = (x_166 + 1);
-    }
-    var x_227 : bool;
-    var x_240 : bool;
-    var x_279 : bool;
-    var x_292 : bool;
-    var x_331 : bool;
-    var x_344 : bool;
-    var x_383 : bool;
-    var x_396 : bool;
-    var x_228_phi : bool;
-    var x_241_phi : bool;
-    var x_280_phi : bool;
-    var x_293_phi : bool;
-    var x_332_phi : bool;
-    var x_345_phi : bool;
-    var x_384_phi : bool;
-    var x_397_phi : bool;
-    let x_168 : i32 = directions;
-    if ((x_168 == 0)) {
-      canwalk = false;
-      i = 0;
-      loop {
-        let x_177 : i32 = i;
-        if ((x_177 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        loop {
-          let x_184 : i32 = j;
-          if ((x_184 < 8)) {
-          } else {
-            break;
-          }
-          let x_187 : i32 = j;
-          let x_189 : i32 = i;
-          let x_194 : i32 = map[((x_187 * 2) + ((x_189 * 2) * 16))];
-          if ((x_194 == 0)) {
-            let x_198 : i32 = j;
-            p.x = (x_198 * 2);
-            let x_201 : i32 = i;
-            p.y = (x_201 * 2);
-            canwalk = true;
-          }
-
-          continuing {
-            let x_204 : i32 = j;
-            j = (x_204 + 1);
-          }
-        }
-
-        continuing {
-          let x_206 : i32 = i;
-          i = (x_206 + 1);
-        }
-      }
-      let x_209 : i32 = p.x;
-      let x_211 : i32 = p.y;
-      map[(x_209 + (x_211 * 16))] = 1;
-    } else {
-      let x_215 : i32 = v;
-      let x_216 : i32 = directions;
-      d = (x_215 % x_216);
-      let x_218 : i32 = directions;
-      let x_219 : i32 = v;
-      v = (x_219 + x_218);
-      let x_221 : i32 = d;
-      let x_222 : bool = (x_221 >= 0);
-      x_228_phi = x_222;
-      if (x_222) {
-        let x_226 : i32 = p.x;
-        x_227 = (x_226 > 0);
-        x_228_phi = x_227;
-      }
-      let x_228 : bool = x_228_phi;
-      x_241_phi = x_228;
-      if (x_228) {
-        let x_232 : i32 = p.x;
-        let x_235 : i32 = p.y;
-        let x_239 : i32 = map[((x_232 - 2) + (x_235 * 16))];
-        x_240 = (x_239 == 0);
-        x_241_phi = x_240;
-      }
-      let x_241 : bool = x_241_phi;
-      if (x_241) {
-        let x_244 : i32 = d;
-        d = (x_244 - 1);
-        let x_247 : i32 = p.x;
-        let x_249 : i32 = p.y;
-        map[(x_247 + (x_249 * 16))] = 1;
-        let x_254 : i32 = p.x;
-        let x_257 : i32 = p.y;
-        map[((x_254 - 1) + (x_257 * 16))] = 1;
-        let x_262 : i32 = p.x;
-        let x_265 : i32 = p.y;
-        map[((x_262 - 2) + (x_265 * 16))] = 1;
-        let x_270 : i32 = p.x;
-        p.x = (x_270 - 2);
-      }
-      let x_273 : i32 = d;
-      let x_274 : bool = (x_273 >= 0);
-      x_280_phi = x_274;
-      if (x_274) {
-        let x_278 : i32 = p.y;
-        x_279 = (x_278 > 0);
-        x_280_phi = x_279;
-      }
-      let x_280 : bool = x_280_phi;
-      x_293_phi = x_280;
-      if (x_280) {
-        let x_284 : i32 = p.x;
-        let x_286 : i32 = p.y;
-        let x_291 : i32 = map[(x_284 + ((x_286 - 2) * 16))];
-        x_292 = (x_291 == 0);
-        x_293_phi = x_292;
-      }
-      let x_293 : bool = x_293_phi;
-      if (x_293) {
-        let x_296 : i32 = d;
-        d = (x_296 - 1);
-        let x_299 : i32 = p.x;
-        let x_301 : i32 = p.y;
-        map[(x_299 + (x_301 * 16))] = 1;
-        let x_306 : i32 = p.x;
-        let x_308 : i32 = p.y;
-        map[(x_306 + ((x_308 - 1) * 16))] = 1;
-        let x_314 : i32 = p.x;
-        let x_316 : i32 = p.y;
-        map[(x_314 + ((x_316 - 2) * 16))] = 1;
-        let x_322 : i32 = p.y;
-        p.y = (x_322 - 2);
-      }
-      let x_325 : i32 = d;
-      let x_326 : bool = (x_325 >= 0);
-      x_332_phi = x_326;
-      if (x_326) {
-        let x_330 : i32 = p.x;
-        x_331 = (x_330 < 14);
-        x_332_phi = x_331;
-      }
-      let x_332 : bool = x_332_phi;
-      x_345_phi = x_332;
-      if (x_332) {
-        let x_336 : i32 = p.x;
-        let x_339 : i32 = p.y;
-        let x_343 : i32 = map[((x_336 + 2) + (x_339 * 16))];
-        x_344 = (x_343 == 0);
-        x_345_phi = x_344;
-      }
-      let x_345 : bool = x_345_phi;
-      if (x_345) {
-        let x_348 : i32 = d;
-        d = (x_348 - 1);
-        let x_351 : i32 = p.x;
-        let x_353 : i32 = p.y;
-        map[(x_351 + (x_353 * 16))] = 1;
-        let x_358 : i32 = p.x;
-        let x_361 : i32 = p.y;
-        map[((x_358 + 1) + (x_361 * 16))] = 1;
-        let x_366 : i32 = p.x;
-        let x_369 : i32 = p.y;
-        map[((x_366 + 2) + (x_369 * 16))] = 1;
-        let x_374 : i32 = p.x;
-        p.x = (x_374 + 2);
-      }
-      let x_377 : i32 = d;
-      let x_378 : bool = (x_377 >= 0);
-      x_384_phi = x_378;
-      if (x_378) {
-        let x_382 : i32 = p.y;
-        x_383 = (x_382 < 14);
-        x_384_phi = x_383;
-      }
-      let x_384 : bool = x_384_phi;
-      x_397_phi = x_384;
-      if (x_384) {
-        let x_388 : i32 = p.x;
-        let x_390 : i32 = p.y;
-        let x_395 : i32 = map[(x_388 + ((x_390 + 2) * 16))];
-        x_396 = (x_395 == 0);
-        x_397_phi = x_396;
-      }
-      let x_397 : bool = x_397_phi;
-      if (x_397) {
-        let x_400 : i32 = d;
-        d = (x_400 - 1);
-        let x_403 : i32 = p.x;
-        let x_405 : i32 = p.y;
-        map[(x_403 + (x_405 * 16))] = 1;
-        let x_410 : i32 = p.x;
-        let x_412 : i32 = p.y;
-        map[(x_410 + ((x_412 + 1) * 16))] = 1;
-        let x_418 : i32 = p.x;
-        let x_420 : i32 = p.y;
-        map[(x_418 + ((x_420 + 2) * 16))] = 1;
-        let x_426 : i32 = p.y;
-        p.y = (x_426 + 2);
-      }
-    }
-    let x_430 : i32 = ipos.y;
-    let x_433 : i32 = ipos.x;
-    let x_436 : i32 = map[((x_430 * 16) + x_433)];
-    if ((x_436 == 1)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      return;
-    }
-
-    continuing {
-      let x_440 : bool = canwalk;
-      if (x_440) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.hlsl
deleted file mode 100644
index bcc4048..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,207 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float x_51 = 0.0f;
-  float x_55 = 0.0f;
-  float x_56 = 0.0f;
-  float x_81 = 0.0f;
-  float x_82 = 0.0f;
-  float x_118 = 0.0f;
-  float x_119 = 0.0f;
-  float x_55_phi = 0.0f;
-  int x_58_phi = 0;
-  float x_81_phi = 0.0f;
-  float x_82_phi = 0.0f;
-  bool x_83_phi = false;
-  float x_85_phi = 0.0f;
-  float x_122_phi = 0.0f;
-  int x_129_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_47 = asfloat(x_7[0].x);
-  const float x_49 = round((x_47 * 0.125f));
-  x_51 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5f;
-      x_58_phi = 1;
-      while (true) {
-        float x_68 = 0.0f;
-        float x_76 = 0.0f;
-        int x_59 = 0;
-        float x_56_phi = 0.0f;
-        x_55 = x_55_phi;
-        const int x_58 = x_58_phi;
-        x_81_phi = 0.0f;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        float x_75 = 0.0f;
-        float x_76_phi = 0.0f;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006f);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((float(x_58) - (round(x_49) * floor((float(x_58) / round(x_49))))) <= 0.01f)) {
-            x_75 = (x_55 + 100.0f);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((float(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-        {
-          x_59 = (x_58 + 1);
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      const bool x_83 = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-      break;
-    }
-  }
-  float x_88 = 0.0f;
-  float x_92 = 0.0f;
-  float x_93 = 0.0f;
-  float x_92_phi = 0.0f;
-  int x_95_phi = 0;
-  float x_118_phi = 0.0f;
-  float x_119_phi = 0.0f;
-  bool x_120_phi = false;
-  const float x_85 = x_85_phi;
-  c.x = x_85;
-  x_88 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5f;
-      x_95_phi = 1;
-      while (true) {
-        float x_105 = 0.0f;
-        float x_113 = 0.0f;
-        int x_96 = 0;
-        float x_93_phi = 0.0f;
-        x_92 = x_92_phi;
-        const int x_95 = x_95_phi;
-        x_118_phi = 0.0f;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        float x_112 = 0.0f;
-        float x_113_phi = 0.0f;
-        if (((x_95 % 32) == 0)) {
-          x_105 = (x_92 + 0.400000006f);
-          x_93_phi = x_105;
-        } else {
-          x_113_phi = x_92;
-          if (((float(x_95) - (round(x_49) * floor((float(x_95) / round(x_49))))) <= 0.01f)) {
-            x_112 = (x_92 + 100.0f);
-            x_113_phi = x_112;
-          }
-          x_113 = x_113_phi;
-          x_93_phi = x_113;
-        }
-        x_93 = x_93_phi;
-        if ((float(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-        {
-          x_96 = (x_95 + 1);
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      const bool x_120 = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-      break;
-    }
-  }
-  const float x_122 = x_122_phi;
-  c.y = x_122;
-  const float x_124 = c.x;
-  const float x_125 = c.y;
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  while (true) {
-    int x_130 = 0;
-    const int x_129 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    const int x_135_save = x_129;
-    const float x_136 = c[x_135_save];
-    if ((x_136 >= 1.0f)) {
-      const float x_140 = c[x_135_save];
-      const float x_141 = c[x_135_save];
-      set_float3(c, x_135_save, (x_140 * x_141));
-    }
-    {
-      x_130 = (x_129 + 1);
-      x_129_phi = x_130;
-    }
-  }
-  const float3 x_145 = normalize(abs(c));
-  x_GLF_color = float4(x_145.x, x_145.y, x_145.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.msl
deleted file mode 100755
index 4f5d16e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float x_51 = 0.0f;
-  float x_55 = 0.0f;
-  float x_56 = 0.0f;
-  float x_81 = 0.0f;
-  float x_82 = 0.0f;
-  float x_118 = 0.0f;
-  float x_119 = 0.0f;
-  float x_55_phi = 0.0f;
-  int x_58_phi = 0;
-  float x_81_phi = 0.0f;
-  float x_82_phi = 0.0f;
-  bool x_83_phi = false;
-  float x_85_phi = 0.0f;
-  float x_122_phi = 0.0f;
-  int x_129_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_47 = x_7.resolution.x;
-  float const x_49 = rint((x_47 * 0.125f));
-  x_51 = (*(tint_symbol_3)).x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5f;
-      x_58_phi = 1;
-      while (true) {
-        float x_68 = 0.0f;
-        float x_76 = 0.0f;
-        int x_59 = 0;
-        float x_56_phi = 0.0f;
-        x_55 = x_55_phi;
-        int const x_58 = x_58_phi;
-        x_81_phi = 0.0f;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        float x_75 = 0.0f;
-        float x_76_phi = 0.0f;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006f);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((float(x_58) - (rint(x_49) * floor((float(x_58) / rint(x_49))))) <= 0.01f)) {
-            x_75 = (x_55 + 100.0f);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((float(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-        {
-          x_59 = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      bool const x_83 = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-      break;
-    }
-  }
-  float x_88 = 0.0f;
-  float x_92 = 0.0f;
-  float x_93 = 0.0f;
-  float x_92_phi = 0.0f;
-  int x_95_phi = 0;
-  float x_118_phi = 0.0f;
-  float x_119_phi = 0.0f;
-  bool x_120_phi = false;
-  float const x_85 = x_85_phi;
-  c.x = x_85;
-  x_88 = (*(tint_symbol_3)).y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5f;
-      x_95_phi = 1;
-      while (true) {
-        float x_105 = 0.0f;
-        float x_113 = 0.0f;
-        int x_96 = 0;
-        float x_93_phi = 0.0f;
-        x_92 = x_92_phi;
-        int const x_95 = x_95_phi;
-        x_118_phi = 0.0f;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        float x_112 = 0.0f;
-        float x_113_phi = 0.0f;
-        if (((x_95 % 32) == 0)) {
-          x_105 = (x_92 + 0.400000006f);
-          x_93_phi = x_105;
-        } else {
-          x_113_phi = x_92;
-          if (((float(x_95) - (rint(x_49) * floor((float(x_95) / rint(x_49))))) <= 0.01f)) {
-            x_112 = (x_92 + 100.0f);
-            x_113_phi = x_112;
-          }
-          x_113 = x_113_phi;
-          x_93_phi = x_113;
-        }
-        x_93 = x_93_phi;
-        if ((float(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-        {
-          x_96 = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      bool const x_120 = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-      break;
-    }
-  }
-  float const x_122 = x_122_phi;
-  c.y = x_122;
-  float const x_124 = c.x;
-  float const x_125 = c.y;
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  while (true) {
-    int x_130 = 0;
-    int const x_129 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    int const x_135_save = x_129;
-    float const x_136 = c[x_135_save];
-    if ((x_136 >= 1.0f)) {
-      float const x_140 = c[x_135_save];
-      float const x_141 = c[x_135_save];
-      c[x_135_save] = (x_140 * x_141);
-    }
-    {
-      x_130 = as_type<int>((as_type<uint>(x_129) + as_type<uint>(1)));
-      x_129_phi = x_130;
-    }
-  }
-  float3 const x_143 = c;
-  float3 const x_145 = normalize(fabs(x_143));
-  *(tint_symbol_4) = float4(x_145.x, x_145.y, x_145.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.spvasm
deleted file mode 100644
index 5473a39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,459 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 264
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %x_51 "x_51"
-               OpName %x_55 "x_55"
-               OpName %x_56 "x_56"
-               OpName %x_81 "x_81"
-               OpName %x_82 "x_82"
-               OpName %x_118 "x_118"
-               OpName %x_119 "x_119"
-               OpName %x_55_phi "x_55_phi"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_81_phi "x_81_phi"
-               OpName %x_82_phi "x_82_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_85_phi "x_85_phi"
-               OpName %x_122_phi "x_122_phi"
-               OpName %x_129_phi "x_129_phi"
-               OpName %x_68 "x_68"
-               OpName %x_76 "x_76"
-               OpName %x_59 "x_59"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_75 "x_75"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_88 "x_88"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_120_phi "x_120_phi"
-               OpName %x_105 "x_105"
-               OpName %x_113 "x_113"
-               OpName %x_96 "x_96"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_112 "x_112"
-               OpName %x_113_phi "x_113_phi"
-               OpName %x_130 "x_130"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %22 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %49 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-    %int_800 = OpConstant %int 800
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %251 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %22
-       %x_51 = OpVariable %_ptr_Function_float Function %25
-       %x_55 = OpVariable %_ptr_Function_float Function %25
-       %x_56 = OpVariable %_ptr_Function_float Function %25
-       %x_81 = OpVariable %_ptr_Function_float Function %25
-       %x_82 = OpVariable %_ptr_Function_float Function %25
-      %x_118 = OpVariable %_ptr_Function_float Function %25
-      %x_119 = OpVariable %_ptr_Function_float Function %25
-   %x_55_phi = OpVariable %_ptr_Function_float Function %25
-   %x_58_phi = OpVariable %_ptr_Function_int Function %36
-   %x_81_phi = OpVariable %_ptr_Function_float Function %25
-   %x_82_phi = OpVariable %_ptr_Function_float Function %25
-   %x_83_phi = OpVariable %_ptr_Function_bool Function %42
-   %x_85_phi = OpVariable %_ptr_Function_float Function %25
-  %x_122_phi = OpVariable %_ptr_Function_float Function %25
-  %x_129_phi = OpVariable %_ptr_Function_int Function %36
-       %x_68 = OpVariable %_ptr_Function_float Function %25
-       %x_76 = OpVariable %_ptr_Function_float Function %25
-       %x_59 = OpVariable %_ptr_Function_int Function %36
-   %x_56_phi = OpVariable %_ptr_Function_float Function %25
-       %x_75 = OpVariable %_ptr_Function_float Function %25
-   %x_76_phi = OpVariable %_ptr_Function_float Function %25
-       %x_88 = OpVariable %_ptr_Function_float Function %25
-       %x_92 = OpVariable %_ptr_Function_float Function %25
-       %x_93 = OpVariable %_ptr_Function_float Function %25
-   %x_92_phi = OpVariable %_ptr_Function_float Function %25
-   %x_95_phi = OpVariable %_ptr_Function_int Function %36
-  %x_118_phi = OpVariable %_ptr_Function_float Function %25
-  %x_119_phi = OpVariable %_ptr_Function_float Function %25
-  %x_120_phi = OpVariable %_ptr_Function_bool Function %42
-      %x_105 = OpVariable %_ptr_Function_float Function %25
-      %x_113 = OpVariable %_ptr_Function_float Function %25
-       %x_96 = OpVariable %_ptr_Function_int Function %36
-   %x_93_phi = OpVariable %_ptr_Function_float Function %25
-      %x_112 = OpVariable %_ptr_Function_float Function %25
-  %x_113_phi = OpVariable %_ptr_Function_float Function %25
-      %x_130 = OpVariable %_ptr_Function_int Function %36
-               OpStore %c %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %54 = OpLoad %float %53
-         %58 = OpFMul %float %54 %float_0_125
-         %55 = OpExtInst %float %56 RoundEven %58
-         %60 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %61 = OpLoad %float %60
-               OpStore %x_51 %61
-               OpSelectionMerge %62 None
-               OpSwitch %uint_0 %63
-         %63 = OpLabel
-               OpStore %x_55_phi %float_n0_5
-               OpStore %x_58_phi %int_1
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-         %74 = OpLoad %float %x_55_phi
-               OpStore %x_55 %74
-         %75 = OpLoad %int %x_58_phi
-               OpStore %x_81_phi %float_0
-         %77 = OpLoad %float %x_55
-               OpStore %x_82_phi %77
-               OpStore %x_83_phi %false
-         %80 = OpSLessThan %bool %75 %int_800
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %67
-         %81 = OpLabel
-         %87 = OpSMod %int %75 %int_32
-         %89 = OpIEqual %bool %87 %int_0
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-         %93 = OpLoad %float %x_55
-         %95 = OpFAdd %float %93 %float_0_400000006
-               OpStore %x_68 %95
-         %96 = OpLoad %float %x_68
-               OpStore %x_56_phi %96
-               OpBranch %90
-         %92 = OpLabel
-         %97 = OpLoad %float %x_55
-               OpStore %x_76_phi %97
-         %98 = OpConvertSToF %float %75
-         %99 = OpExtInst %float %56 RoundEven %55
-        %101 = OpConvertSToF %float %75
-        %102 = OpExtInst %float %56 RoundEven %55
-        %103 = OpFDiv %float %101 %102
-        %100 = OpExtInst %float %56 Floor %103
-        %104 = OpFMul %float %99 %100
-        %105 = OpFSub %float %98 %104
-        %107 = OpFOrdLessThanEqual %bool %105 %float_0_00999999978
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %108
-        %109 = OpLabel
-        %110 = OpLoad %float %x_55
-        %112 = OpFAdd %float %110 %float_100
-               OpStore %x_75 %112
-        %113 = OpLoad %float %x_75
-               OpStore %x_76_phi %113
-               OpBranch %108
-        %108 = OpLabel
-        %114 = OpLoad %float %x_76_phi
-               OpStore %x_76 %114
-        %115 = OpLoad %float %x_76
-               OpStore %x_56_phi %115
-               OpBranch %90
-         %90 = OpLabel
-        %116 = OpLoad %float %x_56_phi
-               OpStore %x_56 %116
-        %117 = OpConvertSToF %float %75
-        %118 = OpLoad %float %x_51
-        %119 = OpFOrdGreaterThanEqual %bool %117 %118
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %120
-        %121 = OpLabel
-        %122 = OpLoad %float %x_56
-               OpStore %x_81_phi %122
-        %123 = OpLoad %float %x_56
-               OpStore %x_82_phi %123
-               OpStore %x_83_phi %true
-               OpBranch %67
-        %120 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-        %125 = OpIAdd %int %75 %int_1
-               OpStore %x_59 %125
-        %126 = OpLoad %float %x_56
-               OpStore %x_55_phi %126
-        %127 = OpLoad %int %x_59
-               OpStore %x_58_phi %127
-               OpBranch %66
-         %67 = OpLabel
-        %128 = OpLoad %float %x_81_phi
-               OpStore %x_81 %128
-        %129 = OpLoad %float %x_82_phi
-               OpStore %x_82 %129
-        %130 = OpLoad %bool %x_83_phi
-        %131 = OpLoad %float %x_81
-               OpStore %x_85_phi %131
-               OpSelectionMerge %132 None
-               OpBranchConditional %130 %133 %132
-        %133 = OpLabel
-               OpBranch %62
-        %132 = OpLabel
-        %134 = OpLoad %float %x_82
-               OpStore %x_85_phi %134
-               OpBranch %62
-         %62 = OpLabel
-        %143 = OpLoad %float %x_85_phi
-        %144 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %144 %143
-        %146 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %147 = OpLoad %float %146
-               OpStore %x_88 %147
-               OpSelectionMerge %148 None
-               OpSwitch %uint_0 %149
-        %149 = OpLabel
-               OpStore %x_92_phi %float_n0_5
-               OpStore %x_95_phi %int_1
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %158 = OpLoad %float %x_92_phi
-               OpStore %x_92 %158
-        %159 = OpLoad %int %x_95_phi
-               OpStore %x_118_phi %float_0
-        %160 = OpLoad %float %x_92
-               OpStore %x_119_phi %160
-               OpStore %x_120_phi %false
-        %161 = OpSLessThan %bool %159 %int_800
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %164
-        %163 = OpLabel
-               OpBranch %162
-        %164 = OpLabel
-               OpBranch %151
-        %162 = OpLabel
-        %167 = OpSMod %int %159 %int_32
-        %168 = OpIEqual %bool %167 %int_0
-               OpSelectionMerge %169 None
-               OpBranchConditional %168 %170 %171
-        %170 = OpLabel
-        %172 = OpLoad %float %x_92
-        %173 = OpFAdd %float %172 %float_0_400000006
-               OpStore %x_105 %173
-        %174 = OpLoad %float %x_105
-               OpStore %x_93_phi %174
-               OpBranch %169
-        %171 = OpLabel
-        %175 = OpLoad %float %x_92
-               OpStore %x_113_phi %175
-        %176 = OpConvertSToF %float %159
-        %177 = OpExtInst %float %56 RoundEven %55
-        %179 = OpConvertSToF %float %159
-        %180 = OpExtInst %float %56 RoundEven %55
-        %181 = OpFDiv %float %179 %180
-        %178 = OpExtInst %float %56 Floor %181
-        %182 = OpFMul %float %177 %178
-        %183 = OpFSub %float %176 %182
-        %184 = OpFOrdLessThanEqual %bool %183 %float_0_00999999978
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %185
-        %186 = OpLabel
-        %187 = OpLoad %float %x_92
-        %188 = OpFAdd %float %187 %float_100
-               OpStore %x_112 %188
-        %189 = OpLoad %float %x_112
-               OpStore %x_113_phi %189
-               OpBranch %185
-        %185 = OpLabel
-        %190 = OpLoad %float %x_113_phi
-               OpStore %x_113 %190
-        %191 = OpLoad %float %x_113
-               OpStore %x_93_phi %191
-               OpBranch %169
-        %169 = OpLabel
-        %192 = OpLoad %float %x_93_phi
-               OpStore %x_93 %192
-        %193 = OpConvertSToF %float %159
-        %194 = OpLoad %float %x_88
-        %195 = OpFOrdGreaterThanEqual %bool %193 %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %196
-        %197 = OpLabel
-        %198 = OpLoad %float %x_93
-               OpStore %x_118_phi %198
-        %199 = OpLoad %float %x_93
-               OpStore %x_119_phi %199
-               OpStore %x_120_phi %true
-               OpBranch %151
-        %196 = OpLabel
-               OpBranch %152
-        %152 = OpLabel
-        %200 = OpIAdd %int %159 %int_1
-               OpStore %x_96 %200
-        %201 = OpLoad %float %x_93
-               OpStore %x_92_phi %201
-        %202 = OpLoad %int %x_96
-               OpStore %x_95_phi %202
-               OpBranch %150
-        %151 = OpLabel
-        %203 = OpLoad %float %x_118_phi
-               OpStore %x_118 %203
-        %204 = OpLoad %float %x_119_phi
-               OpStore %x_119 %204
-        %205 = OpLoad %bool %x_120_phi
-        %206 = OpLoad %float %x_118
-               OpStore %x_122_phi %206
-               OpSelectionMerge %207 None
-               OpBranchConditional %205 %208 %207
-        %208 = OpLabel
-               OpBranch %148
-        %207 = OpLabel
-        %209 = OpLoad %float %x_119
-               OpStore %x_122_phi %209
-               OpBranch %148
-        %148 = OpLabel
-        %210 = OpLoad %float %x_122_phi
-        %211 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %211 %210
-        %212 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %213 = OpLoad %float %212
-        %214 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %215 = OpLoad %float %214
-        %217 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %218 = OpFAdd %float %213 %215
-               OpStore %217 %218
-               OpStore %x_129_phi %int_0
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %224 = OpLoad %int %x_129_phi
-        %226 = OpSLessThan %bool %224 %int_3
-               OpSelectionMerge %227 None
-               OpBranchConditional %226 %228 %229
-        %228 = OpLabel
-               OpBranch %227
-        %229 = OpLabel
-               OpBranch %220
-        %227 = OpLabel
-        %230 = OpAccessChain %_ptr_Function_float %c %224
-        %231 = OpLoad %float %230
-        %233 = OpFOrdGreaterThanEqual %bool %231 %float_1
-               OpSelectionMerge %234 None
-               OpBranchConditional %233 %235 %234
-        %235 = OpLabel
-        %236 = OpAccessChain %_ptr_Function_float %c %224
-        %237 = OpLoad %float %236
-        %238 = OpAccessChain %_ptr_Function_float %c %224
-        %239 = OpLoad %float %238
-        %240 = OpAccessChain %_ptr_Function_float %c %224
-        %241 = OpFMul %float %237 %239
-               OpStore %240 %241
-               OpBranch %234
-        %234 = OpLabel
-               OpBranch %221
-        %221 = OpLabel
-        %242 = OpIAdd %int %224 %int_1
-               OpStore %x_130 %242
-        %243 = OpLoad %int %x_130
-               OpStore %x_129_phi %243
-               OpBranch %219
-        %220 = OpLabel
-        %244 = OpLoad %v3float %c
-        %246 = OpExtInst %v3float %56 FAbs %244
-        %245 = OpExtInst %v3float %56 Normalize %246
-        %247 = OpCompositeExtract %float %245 0
-        %248 = OpCompositeExtract %float %245 1
-        %249 = OpCompositeExtract %float %245 2
-        %250 = OpCompositeConstruct %v4float %247 %248 %249 %float_1
-               OpStore %x_GLF_color %250
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %251
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %255 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %256 = OpFunctionCall %void %main_1
-        %257 = OpLoad %v4float %x_GLF_color
-        %258 = OpCompositeConstruct %main_out %257
-               OpReturnValue %258
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %260 = OpLabel
-        %262 = OpLoad %v4float %gl_FragCoord_param_1
-        %261 = OpFunctionCall %main_out %main_inner %262
-        %263 = OpCompositeExtract %v4float %261 0
-               OpStore %x_GLF_color_1_1 %263
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.wgsl
deleted file mode 100644
index 76331ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,200 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec3<f32>;
-  var x_51 : f32;
-  var x_55 : f32;
-  var x_56 : f32;
-  var x_81 : f32;
-  var x_82 : f32;
-  var x_118 : f32;
-  var x_119 : f32;
-  var x_55_phi : f32;
-  var x_58_phi : i32;
-  var x_81_phi : f32;
-  var x_82_phi : f32;
-  var x_83_phi : bool;
-  var x_85_phi : f32;
-  var x_122_phi : f32;
-  var x_129_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_47 : f32 = x_7.resolution.x;
-  let x_49 : f32 = round((x_47 * 0.125));
-  x_51 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5;
-      x_58_phi = 1;
-      loop {
-        var x_68 : f32;
-        var x_76 : f32;
-        var x_59 : i32;
-        var x_56_phi : f32;
-        x_55 = x_55_phi;
-        let x_58 : i32 = x_58_phi;
-        x_81_phi = 0.0;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        var x_75 : f32;
-        var x_76_phi : f32;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((f32(x_58) - (round(x_49) * floor((f32(x_58) / round(x_49))))) <= 0.01)) {
-            x_75 = (x_55 + 100.0);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((f32(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-
-        continuing {
-          x_59 = (x_58 + 1);
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      let x_83 : bool = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-    }
-  }
-  var x_88 : f32;
-  var x_92 : f32;
-  var x_93 : f32;
-  var x_92_phi : f32;
-  var x_95_phi : i32;
-  var x_118_phi : f32;
-  var x_119_phi : f32;
-  var x_120_phi : bool;
-  let x_85 : f32 = x_85_phi;
-  let x_86 : ptr<function, f32> = &(c.x);
-  *(x_86) = x_85;
-  x_88 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5;
-      x_95_phi = 1;
-      loop {
-        var x_105 : f32;
-        var x_113 : f32;
-        var x_96 : i32;
-        var x_93_phi : f32;
-        x_92 = x_92_phi;
-        let x_95 : i32 = x_95_phi;
-        x_118_phi = 0.0;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        var x_112 : f32;
-        var x_113_phi : f32;
-        if (((x_95 % 32) == 0)) {
-          x_105 = (x_92 + 0.400000006);
-          x_93_phi = x_105;
-        } else {
-          x_113_phi = x_92;
-          if (((f32(x_95) - (round(x_49) * floor((f32(x_95) / round(x_49))))) <= 0.01)) {
-            x_112 = (x_92 + 100.0);
-            x_113_phi = x_112;
-          }
-          x_113 = x_113_phi;
-          x_93_phi = x_113;
-        }
-        x_93 = x_93_phi;
-        if ((f32(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-
-        continuing {
-          x_96 = (x_95 + 1);
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      let x_120 : bool = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-    }
-  }
-  let x_122 : f32 = x_122_phi;
-  let x_123 : ptr<function, f32> = &(c.y);
-  *(x_123) = x_122;
-  let x_124 : f32 = *(x_86);
-  let x_125 : f32 = *(x_123);
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  loop {
-    var x_130 : i32;
-    let x_129 : i32 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    let x_135 : ptr<function, f32> = &(c[x_129]);
-    let x_136 : f32 = *(x_135);
-    if ((x_136 >= 1.0)) {
-      let x_140 : f32 = *(x_135);
-      let x_141 : f32 = *(x_135);
-      *(x_135) = (x_140 * x_141);
-    }
-
-    continuing {
-      x_130 = (x_129 + 1);
-      x_129_phi = x_130;
-    }
-  }
-  let x_143 : vec3<f32> = c;
-  let x_145 : vec3<f32> = normalize(abs(x_143));
-  x_GLF_color = vec4<f32>(x_145.x, x_145.y, x_145.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.hlsl
deleted file mode 100644
index 8311f18..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,207 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float x_51 = 0.0f;
-  float x_55 = 0.0f;
-  float x_56 = 0.0f;
-  float x_81 = 0.0f;
-  float x_82 = 0.0f;
-  float x_118 = 0.0f;
-  float x_119 = 0.0f;
-  float x_55_phi = 0.0f;
-  int x_58_phi = 0;
-  float x_81_phi = 0.0f;
-  float x_82_phi = 0.0f;
-  bool x_83_phi = false;
-  float x_85_phi = 0.0f;
-  float x_122_phi = 0.0f;
-  int x_129_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_47 = asfloat(x_7[0].x);
-  const float x_49 = round((x_47 * 0.125f));
-  x_51 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5f;
-      x_58_phi = 1;
-      while (true) {
-        float x_68 = 0.0f;
-        float x_76 = 0.0f;
-        int x_59 = 0;
-        float x_56_phi = 0.0f;
-        x_55 = x_55_phi;
-        const int x_58 = x_58_phi;
-        x_81_phi = 0.0f;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        float x_75 = 0.0f;
-        float x_76_phi = 0.0f;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006f);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((float(x_58) % round(x_49)) <= 0.01f)) {
-            x_75 = (x_55 + 100.0f);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((float(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-        {
-          x_59 = (x_58 + 1);
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      const bool x_83 = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-      break;
-    }
-  }
-  float x_88 = 0.0f;
-  float x_92 = 0.0f;
-  float x_93 = 0.0f;
-  float x_92_phi = 0.0f;
-  int x_95_phi = 0;
-  float x_118_phi = 0.0f;
-  float x_119_phi = 0.0f;
-  bool x_120_phi = false;
-  const float x_85 = x_85_phi;
-  c.x = x_85;
-  x_88 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5f;
-      x_95_phi = 1;
-      while (true) {
-        float x_105 = 0.0f;
-        float x_113 = 0.0f;
-        int x_96 = 0;
-        float x_93_phi = 0.0f;
-        x_92 = x_92_phi;
-        const int x_95 = x_95_phi;
-        x_118_phi = 0.0f;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        float x_112 = 0.0f;
-        float x_113_phi = 0.0f;
-        if (((x_95 % 32) == 0)) {
-          x_105 = (x_92 + 0.400000006f);
-          x_93_phi = x_105;
-        } else {
-          x_113_phi = x_92;
-          if (((float(x_95) % round(x_49)) <= 0.01f)) {
-            x_112 = (x_92 + 100.0f);
-            x_113_phi = x_112;
-          }
-          x_113 = x_113_phi;
-          x_93_phi = x_113;
-        }
-        x_93 = x_93_phi;
-        if ((float(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-        {
-          x_96 = (x_95 + 1);
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      const bool x_120 = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-      break;
-    }
-  }
-  const float x_122 = x_122_phi;
-  c.y = x_122;
-  const float x_124 = c.x;
-  const float x_125 = c.y;
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  while (true) {
-    int x_130 = 0;
-    const int x_129 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    const int x_135_save = x_129;
-    const float x_136 = c[x_135_save];
-    if ((x_136 >= 1.0f)) {
-      const float x_140 = c[x_135_save];
-      const float x_141 = c[x_135_save];
-      set_float3(c, x_135_save, (x_140 * x_141));
-    }
-    {
-      x_130 = (x_129 + 1);
-      x_129_phi = x_130;
-    }
-  }
-  const float3 x_145 = normalize(abs(c));
-  x_GLF_color = float4(x_145.x, x_145.y, x_145.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.msl
deleted file mode 100755
index 2747539..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float x_51 = 0.0f;
-  float x_55 = 0.0f;
-  float x_56 = 0.0f;
-  float x_81 = 0.0f;
-  float x_82 = 0.0f;
-  float x_118 = 0.0f;
-  float x_119 = 0.0f;
-  float x_55_phi = 0.0f;
-  int x_58_phi = 0;
-  float x_81_phi = 0.0f;
-  float x_82_phi = 0.0f;
-  bool x_83_phi = false;
-  float x_85_phi = 0.0f;
-  float x_122_phi = 0.0f;
-  int x_129_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_47 = x_7.resolution.x;
-  float const x_49 = rint((x_47 * 0.125f));
-  x_51 = (*(tint_symbol_3)).x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5f;
-      x_58_phi = 1;
-      while (true) {
-        float x_68 = 0.0f;
-        float x_76 = 0.0f;
-        int x_59 = 0;
-        float x_56_phi = 0.0f;
-        x_55 = x_55_phi;
-        int const x_58 = x_58_phi;
-        x_81_phi = 0.0f;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        float x_75 = 0.0f;
-        float x_76_phi = 0.0f;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006f);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if ((fmod(float(x_58), rint(x_49)) <= 0.01f)) {
-            x_75 = (x_55 + 100.0f);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((float(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-        {
-          x_59 = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      bool const x_83 = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-      break;
-    }
-  }
-  float x_88 = 0.0f;
-  float x_92 = 0.0f;
-  float x_93 = 0.0f;
-  float x_92_phi = 0.0f;
-  int x_95_phi = 0;
-  float x_118_phi = 0.0f;
-  float x_119_phi = 0.0f;
-  bool x_120_phi = false;
-  float const x_85 = x_85_phi;
-  c.x = x_85;
-  x_88 = (*(tint_symbol_3)).y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5f;
-      x_95_phi = 1;
-      while (true) {
-        float x_105 = 0.0f;
-        float x_113 = 0.0f;
-        int x_96 = 0;
-        float x_93_phi = 0.0f;
-        x_92 = x_92_phi;
-        int const x_95 = x_95_phi;
-        x_118_phi = 0.0f;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        float x_112 = 0.0f;
-        float x_113_phi = 0.0f;
-        if (((x_95 % 32) == 0)) {
-          x_105 = (x_92 + 0.400000006f);
-          x_93_phi = x_105;
-        } else {
-          x_113_phi = x_92;
-          if ((fmod(float(x_95), rint(x_49)) <= 0.01f)) {
-            x_112 = (x_92 + 100.0f);
-            x_113_phi = x_112;
-          }
-          x_113 = x_113_phi;
-          x_93_phi = x_113;
-        }
-        x_93 = x_93_phi;
-        if ((float(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-        {
-          x_96 = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      bool const x_120 = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-      break;
-    }
-  }
-  float const x_122 = x_122_phi;
-  c.y = x_122;
-  float const x_124 = c.x;
-  float const x_125 = c.y;
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  while (true) {
-    int x_130 = 0;
-    int const x_129 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    int const x_135_save = x_129;
-    float const x_136 = c[x_135_save];
-    if ((x_136 >= 1.0f)) {
-      float const x_140 = c[x_135_save];
-      float const x_141 = c[x_135_save];
-      c[x_135_save] = (x_140 * x_141);
-    }
-    {
-      x_130 = as_type<int>((as_type<uint>(x_129) + as_type<uint>(1)));
-      x_129_phi = x_130;
-    }
-  }
-  float3 const x_143 = c;
-  float3 const x_145 = normalize(fabs(x_143));
-  *(tint_symbol_4) = float4(x_145.x, x_145.y, x_145.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.spvasm
deleted file mode 100644
index 37f2f9c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,449 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 254
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %x_51 "x_51"
-               OpName %x_55 "x_55"
-               OpName %x_56 "x_56"
-               OpName %x_81 "x_81"
-               OpName %x_82 "x_82"
-               OpName %x_118 "x_118"
-               OpName %x_119 "x_119"
-               OpName %x_55_phi "x_55_phi"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_81_phi "x_81_phi"
-               OpName %x_82_phi "x_82_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_85_phi "x_85_phi"
-               OpName %x_122_phi "x_122_phi"
-               OpName %x_129_phi "x_129_phi"
-               OpName %x_68 "x_68"
-               OpName %x_76 "x_76"
-               OpName %x_59 "x_59"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_75 "x_75"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_88 "x_88"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_120_phi "x_120_phi"
-               OpName %x_105 "x_105"
-               OpName %x_113 "x_113"
-               OpName %x_96 "x_96"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_112 "x_112"
-               OpName %x_113_phi "x_113_phi"
-               OpName %x_130 "x_130"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %22 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %49 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-    %int_800 = OpConstant %int 800
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %241 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %22
-       %x_51 = OpVariable %_ptr_Function_float Function %25
-       %x_55 = OpVariable %_ptr_Function_float Function %25
-       %x_56 = OpVariable %_ptr_Function_float Function %25
-       %x_81 = OpVariable %_ptr_Function_float Function %25
-       %x_82 = OpVariable %_ptr_Function_float Function %25
-      %x_118 = OpVariable %_ptr_Function_float Function %25
-      %x_119 = OpVariable %_ptr_Function_float Function %25
-   %x_55_phi = OpVariable %_ptr_Function_float Function %25
-   %x_58_phi = OpVariable %_ptr_Function_int Function %36
-   %x_81_phi = OpVariable %_ptr_Function_float Function %25
-   %x_82_phi = OpVariable %_ptr_Function_float Function %25
-   %x_83_phi = OpVariable %_ptr_Function_bool Function %42
-   %x_85_phi = OpVariable %_ptr_Function_float Function %25
-  %x_122_phi = OpVariable %_ptr_Function_float Function %25
-  %x_129_phi = OpVariable %_ptr_Function_int Function %36
-       %x_68 = OpVariable %_ptr_Function_float Function %25
-       %x_76 = OpVariable %_ptr_Function_float Function %25
-       %x_59 = OpVariable %_ptr_Function_int Function %36
-   %x_56_phi = OpVariable %_ptr_Function_float Function %25
-       %x_75 = OpVariable %_ptr_Function_float Function %25
-   %x_76_phi = OpVariable %_ptr_Function_float Function %25
-       %x_88 = OpVariable %_ptr_Function_float Function %25
-       %x_92 = OpVariable %_ptr_Function_float Function %25
-       %x_93 = OpVariable %_ptr_Function_float Function %25
-   %x_92_phi = OpVariable %_ptr_Function_float Function %25
-   %x_95_phi = OpVariable %_ptr_Function_int Function %36
-  %x_118_phi = OpVariable %_ptr_Function_float Function %25
-  %x_119_phi = OpVariable %_ptr_Function_float Function %25
-  %x_120_phi = OpVariable %_ptr_Function_bool Function %42
-      %x_105 = OpVariable %_ptr_Function_float Function %25
-      %x_113 = OpVariable %_ptr_Function_float Function %25
-       %x_96 = OpVariable %_ptr_Function_int Function %36
-   %x_93_phi = OpVariable %_ptr_Function_float Function %25
-      %x_112 = OpVariable %_ptr_Function_float Function %25
-  %x_113_phi = OpVariable %_ptr_Function_float Function %25
-      %x_130 = OpVariable %_ptr_Function_int Function %36
-               OpStore %c %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %54 = OpLoad %float %53
-         %58 = OpFMul %float %54 %float_0_125
-         %55 = OpExtInst %float %56 RoundEven %58
-         %60 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %61 = OpLoad %float %60
-               OpStore %x_51 %61
-               OpSelectionMerge %62 None
-               OpSwitch %uint_0 %63
-         %63 = OpLabel
-               OpStore %x_55_phi %float_n0_5
-               OpStore %x_58_phi %int_1
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-         %74 = OpLoad %float %x_55_phi
-               OpStore %x_55 %74
-         %75 = OpLoad %int %x_58_phi
-               OpStore %x_81_phi %float_0
-         %77 = OpLoad %float %x_55
-               OpStore %x_82_phi %77
-               OpStore %x_83_phi %false
-         %80 = OpSLessThan %bool %75 %int_800
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %67
-         %81 = OpLabel
-         %87 = OpSMod %int %75 %int_32
-         %89 = OpIEqual %bool %87 %int_0
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-         %93 = OpLoad %float %x_55
-         %95 = OpFAdd %float %93 %float_0_400000006
-               OpStore %x_68 %95
-         %96 = OpLoad %float %x_68
-               OpStore %x_56_phi %96
-               OpBranch %90
-         %92 = OpLabel
-         %97 = OpLoad %float %x_55
-               OpStore %x_76_phi %97
-         %98 = OpConvertSToF %float %75
-         %99 = OpExtInst %float %56 RoundEven %55
-        %100 = OpFRem %float %98 %99
-        %102 = OpFOrdLessThanEqual %bool %100 %float_0_00999999978
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %103
-        %104 = OpLabel
-        %105 = OpLoad %float %x_55
-        %107 = OpFAdd %float %105 %float_100
-               OpStore %x_75 %107
-        %108 = OpLoad %float %x_75
-               OpStore %x_76_phi %108
-               OpBranch %103
-        %103 = OpLabel
-        %109 = OpLoad %float %x_76_phi
-               OpStore %x_76 %109
-        %110 = OpLoad %float %x_76
-               OpStore %x_56_phi %110
-               OpBranch %90
-         %90 = OpLabel
-        %111 = OpLoad %float %x_56_phi
-               OpStore %x_56 %111
-        %112 = OpConvertSToF %float %75
-        %113 = OpLoad %float %x_51
-        %114 = OpFOrdGreaterThanEqual %bool %112 %113
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %115
-        %116 = OpLabel
-        %117 = OpLoad %float %x_56
-               OpStore %x_81_phi %117
-        %118 = OpLoad %float %x_56
-               OpStore %x_82_phi %118
-               OpStore %x_83_phi %true
-               OpBranch %67
-        %115 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-        %120 = OpIAdd %int %75 %int_1
-               OpStore %x_59 %120
-        %121 = OpLoad %float %x_56
-               OpStore %x_55_phi %121
-        %122 = OpLoad %int %x_59
-               OpStore %x_58_phi %122
-               OpBranch %66
-         %67 = OpLabel
-        %123 = OpLoad %float %x_81_phi
-               OpStore %x_81 %123
-        %124 = OpLoad %float %x_82_phi
-               OpStore %x_82 %124
-        %125 = OpLoad %bool %x_83_phi
-        %126 = OpLoad %float %x_81
-               OpStore %x_85_phi %126
-               OpSelectionMerge %127 None
-               OpBranchConditional %125 %128 %127
-        %128 = OpLabel
-               OpBranch %62
-        %127 = OpLabel
-        %129 = OpLoad %float %x_82
-               OpStore %x_85_phi %129
-               OpBranch %62
-         %62 = OpLabel
-        %138 = OpLoad %float %x_85_phi
-        %139 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %139 %138
-        %141 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %142 = OpLoad %float %141
-               OpStore %x_88 %142
-               OpSelectionMerge %143 None
-               OpSwitch %uint_0 %144
-        %144 = OpLabel
-               OpStore %x_92_phi %float_n0_5
-               OpStore %x_95_phi %int_1
-               OpBranch %145
-        %145 = OpLabel
-               OpLoopMerge %146 %147 None
-               OpBranch %148
-        %148 = OpLabel
-        %153 = OpLoad %float %x_92_phi
-               OpStore %x_92 %153
-        %154 = OpLoad %int %x_95_phi
-               OpStore %x_118_phi %float_0
-        %155 = OpLoad %float %x_92
-               OpStore %x_119_phi %155
-               OpStore %x_120_phi %false
-        %156 = OpSLessThan %bool %154 %int_800
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %159
-        %158 = OpLabel
-               OpBranch %157
-        %159 = OpLabel
-               OpBranch %146
-        %157 = OpLabel
-        %162 = OpSMod %int %154 %int_32
-        %163 = OpIEqual %bool %162 %int_0
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %166
-        %165 = OpLabel
-        %167 = OpLoad %float %x_92
-        %168 = OpFAdd %float %167 %float_0_400000006
-               OpStore %x_105 %168
-        %169 = OpLoad %float %x_105
-               OpStore %x_93_phi %169
-               OpBranch %164
-        %166 = OpLabel
-        %170 = OpLoad %float %x_92
-               OpStore %x_113_phi %170
-        %171 = OpConvertSToF %float %154
-        %172 = OpExtInst %float %56 RoundEven %55
-        %173 = OpFRem %float %171 %172
-        %174 = OpFOrdLessThanEqual %bool %173 %float_0_00999999978
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %175
-        %176 = OpLabel
-        %177 = OpLoad %float %x_92
-        %178 = OpFAdd %float %177 %float_100
-               OpStore %x_112 %178
-        %179 = OpLoad %float %x_112
-               OpStore %x_113_phi %179
-               OpBranch %175
-        %175 = OpLabel
-        %180 = OpLoad %float %x_113_phi
-               OpStore %x_113 %180
-        %181 = OpLoad %float %x_113
-               OpStore %x_93_phi %181
-               OpBranch %164
-        %164 = OpLabel
-        %182 = OpLoad %float %x_93_phi
-               OpStore %x_93 %182
-        %183 = OpConvertSToF %float %154
-        %184 = OpLoad %float %x_88
-        %185 = OpFOrdGreaterThanEqual %bool %183 %184
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %186
-        %187 = OpLabel
-        %188 = OpLoad %float %x_93
-               OpStore %x_118_phi %188
-        %189 = OpLoad %float %x_93
-               OpStore %x_119_phi %189
-               OpStore %x_120_phi %true
-               OpBranch %146
-        %186 = OpLabel
-               OpBranch %147
-        %147 = OpLabel
-        %190 = OpIAdd %int %154 %int_1
-               OpStore %x_96 %190
-        %191 = OpLoad %float %x_93
-               OpStore %x_92_phi %191
-        %192 = OpLoad %int %x_96
-               OpStore %x_95_phi %192
-               OpBranch %145
-        %146 = OpLabel
-        %193 = OpLoad %float %x_118_phi
-               OpStore %x_118 %193
-        %194 = OpLoad %float %x_119_phi
-               OpStore %x_119 %194
-        %195 = OpLoad %bool %x_120_phi
-        %196 = OpLoad %float %x_118
-               OpStore %x_122_phi %196
-               OpSelectionMerge %197 None
-               OpBranchConditional %195 %198 %197
-        %198 = OpLabel
-               OpBranch %143
-        %197 = OpLabel
-        %199 = OpLoad %float %x_119
-               OpStore %x_122_phi %199
-               OpBranch %143
-        %143 = OpLabel
-        %200 = OpLoad %float %x_122_phi
-        %201 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %201 %200
-        %202 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %203 = OpLoad %float %202
-        %204 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %205 = OpLoad %float %204
-        %207 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %208 = OpFAdd %float %203 %205
-               OpStore %207 %208
-               OpStore %x_129_phi %int_0
-               OpBranch %209
-        %209 = OpLabel
-               OpLoopMerge %210 %211 None
-               OpBranch %212
-        %212 = OpLabel
-        %214 = OpLoad %int %x_129_phi
-        %216 = OpSLessThan %bool %214 %int_3
-               OpSelectionMerge %217 None
-               OpBranchConditional %216 %218 %219
-        %218 = OpLabel
-               OpBranch %217
-        %219 = OpLabel
-               OpBranch %210
-        %217 = OpLabel
-        %220 = OpAccessChain %_ptr_Function_float %c %214
-        %221 = OpLoad %float %220
-        %223 = OpFOrdGreaterThanEqual %bool %221 %float_1
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %224
-        %225 = OpLabel
-        %226 = OpAccessChain %_ptr_Function_float %c %214
-        %227 = OpLoad %float %226
-        %228 = OpAccessChain %_ptr_Function_float %c %214
-        %229 = OpLoad %float %228
-        %230 = OpAccessChain %_ptr_Function_float %c %214
-        %231 = OpFMul %float %227 %229
-               OpStore %230 %231
-               OpBranch %224
-        %224 = OpLabel
-               OpBranch %211
-        %211 = OpLabel
-        %232 = OpIAdd %int %214 %int_1
-               OpStore %x_130 %232
-        %233 = OpLoad %int %x_130
-               OpStore %x_129_phi %233
-               OpBranch %209
-        %210 = OpLabel
-        %234 = OpLoad %v3float %c
-        %236 = OpExtInst %v3float %56 FAbs %234
-        %235 = OpExtInst %v3float %56 Normalize %236
-        %237 = OpCompositeExtract %float %235 0
-        %238 = OpCompositeExtract %float %235 1
-        %239 = OpCompositeExtract %float %235 2
-        %240 = OpCompositeConstruct %v4float %237 %238 %239 %float_1
-               OpStore %x_GLF_color %240
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %241
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %245 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %246 = OpFunctionCall %void %main_1
-        %247 = OpLoad %v4float %x_GLF_color
-        %248 = OpCompositeConstruct %main_out %247
-               OpReturnValue %248
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %250 = OpLabel
-        %252 = OpLoad %v4float %gl_FragCoord_param_1
-        %251 = OpFunctionCall %main_out %main_inner %252
-        %253 = OpCompositeExtract %v4float %251 0
-               OpStore %x_GLF_color_1_1 %253
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.wgsl
deleted file mode 100644
index 41e57f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,200 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec3<f32>;
-  var x_51 : f32;
-  var x_55 : f32;
-  var x_56 : f32;
-  var x_81 : f32;
-  var x_82 : f32;
-  var x_118 : f32;
-  var x_119 : f32;
-  var x_55_phi : f32;
-  var x_58_phi : i32;
-  var x_81_phi : f32;
-  var x_82_phi : f32;
-  var x_83_phi : bool;
-  var x_85_phi : f32;
-  var x_122_phi : f32;
-  var x_129_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_47 : f32 = x_7.resolution.x;
-  let x_49 : f32 = round((x_47 * 0.125));
-  x_51 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5;
-      x_58_phi = 1;
-      loop {
-        var x_68 : f32;
-        var x_76 : f32;
-        var x_59 : i32;
-        var x_56_phi : f32;
-        x_55 = x_55_phi;
-        let x_58 : i32 = x_58_phi;
-        x_81_phi = 0.0;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        var x_75 : f32;
-        var x_76_phi : f32;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((f32(x_58) % round(x_49)) <= 0.01)) {
-            x_75 = (x_55 + 100.0);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((f32(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-
-        continuing {
-          x_59 = (x_58 + 1);
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      let x_83 : bool = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-    }
-  }
-  var x_88 : f32;
-  var x_92 : f32;
-  var x_93 : f32;
-  var x_92_phi : f32;
-  var x_95_phi : i32;
-  var x_118_phi : f32;
-  var x_119_phi : f32;
-  var x_120_phi : bool;
-  let x_85 : f32 = x_85_phi;
-  let x_86 : ptr<function, f32> = &(c.x);
-  *(x_86) = x_85;
-  x_88 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5;
-      x_95_phi = 1;
-      loop {
-        var x_105 : f32;
-        var x_113 : f32;
-        var x_96 : i32;
-        var x_93_phi : f32;
-        x_92 = x_92_phi;
-        let x_95 : i32 = x_95_phi;
-        x_118_phi = 0.0;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        var x_112 : f32;
-        var x_113_phi : f32;
-        if (((x_95 % 32) == 0)) {
-          x_105 = (x_92 + 0.400000006);
-          x_93_phi = x_105;
-        } else {
-          x_113_phi = x_92;
-          if (((f32(x_95) % round(x_49)) <= 0.01)) {
-            x_112 = (x_92 + 100.0);
-            x_113_phi = x_112;
-          }
-          x_113 = x_113_phi;
-          x_93_phi = x_113;
-        }
-        x_93 = x_93_phi;
-        if ((f32(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-
-        continuing {
-          x_96 = (x_95 + 1);
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      let x_120 : bool = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-    }
-  }
-  let x_122 : f32 = x_122_phi;
-  let x_123 : ptr<function, f32> = &(c.y);
-  *(x_123) = x_122;
-  let x_124 : f32 = *(x_86);
-  let x_125 : f32 = *(x_123);
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  loop {
-    var x_130 : i32;
-    let x_129 : i32 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    let x_135 : ptr<function, f32> = &(c[x_129]);
-    let x_136 : f32 = *(x_135);
-    if ((x_136 >= 1.0)) {
-      let x_140 : f32 = *(x_135);
-      let x_141 : f32 = *(x_135);
-      *(x_135) = (x_140 * x_141);
-    }
-
-    continuing {
-      x_130 = (x_129 + 1);
-      x_129_phi = x_130;
-    }
-  }
-  let x_143 : vec3<f32> = c;
-  let x_145 : vec3<f32> = normalize(abs(x_143));
-  x_GLF_color = vec4<f32>(x_145.x, x_145.y, x_145.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.hlsl
deleted file mode 100644
index d2184a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,212 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float x_53 = 0.0f;
-  float x_57 = 0.0f;
-  float x_58 = 0.0f;
-  float x_83 = 0.0f;
-  float x_84 = 0.0f;
-  float x_124 = 0.0f;
-  float x_125 = 0.0f;
-  float x_57_phi = 0.0f;
-  int x_60_phi = 0;
-  float x_83_phi = 0.0f;
-  float x_84_phi = 0.0f;
-  bool x_85_phi = false;
-  float x_87_phi = 0.0f;
-  float x_128_phi = 0.0f;
-  int x_135_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_47 = asfloat(x_7[0].x);
-  const float2 x_48 = float2(1.0f, x_47);
-  const float x_50 = round((x_47 * 0.125f));
-  const float2 x_51 = float2(0.0f, -0.5f);
-  x_53 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_57_phi = -0.5f;
-      x_60_phi = 1;
-      while (true) {
-        float x_70 = 0.0f;
-        float x_78 = 0.0f;
-        int x_61 = 0;
-        float x_58_phi = 0.0f;
-        x_57 = x_57_phi;
-        const int x_60 = x_60_phi;
-        x_83_phi = 0.0f;
-        x_84_phi = x_57;
-        x_85_phi = false;
-        if ((x_60 < 800)) {
-        } else {
-          break;
-        }
-        float x_77 = 0.0f;
-        float x_78_phi = 0.0f;
-        if (((x_60 % 32) == 0)) {
-          x_70 = (x_57 + 0.400000006f);
-          x_58_phi = x_70;
-        } else {
-          x_78_phi = x_57;
-          if (((float(x_60) - (round(x_50) * floor((float(x_60) / round(x_50))))) <= 0.01f)) {
-            x_77 = (x_57 + 100.0f);
-            x_78_phi = x_77;
-          }
-          x_78 = x_78_phi;
-          x_58_phi = x_78;
-        }
-        x_58 = x_58_phi;
-        if ((float(x_60) >= x_53)) {
-          x_83_phi = x_58;
-          x_84_phi = x_58;
-          x_85_phi = true;
-          break;
-        }
-        {
-          x_61 = (x_60 + 1);
-          x_57_phi = x_58;
-          x_60_phi = x_61;
-        }
-      }
-      x_83 = x_83_phi;
-      x_84 = x_84_phi;
-      const bool x_85 = x_85_phi;
-      x_87_phi = x_83;
-      if (x_85) {
-        break;
-      }
-      x_87_phi = x_84;
-      break;
-    }
-  }
-  float x_92 = 0.0f;
-  float x_98 = 0.0f;
-  float x_99 = 0.0f;
-  float x_98_phi = 0.0f;
-  int x_101_phi = 0;
-  float x_124_phi = 0.0f;
-  float x_125_phi = 0.0f;
-  bool x_126_phi = false;
-  const float x_87 = x_87_phi;
-  const float4 x_89 = float4(x_84, 0.400000006f, x_83, 0.400000006f);
-  c.x = x_87;
-  x_92 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      const float4 x_95 = float4(x_51, 0.0f, x_57);
-      const float x_96 = float3(x_48, -0.5f).z;
-      x_98_phi = x_96;
-      x_101_phi = 1;
-      while (true) {
-        float x_111 = 0.0f;
-        float x_119 = 0.0f;
-        int x_102 = 0;
-        float x_99_phi = 0.0f;
-        x_98 = x_98_phi;
-        const int x_101 = x_101_phi;
-        x_124_phi = 0.0f;
-        x_125_phi = x_98;
-        x_126_phi = false;
-        if ((x_101 < 800)) {
-        } else {
-          break;
-        }
-        float x_118 = 0.0f;
-        float x_119_phi = 0.0f;
-        if (((x_101 % 32) == 0)) {
-          x_111 = (x_98 + 0.400000006f);
-          x_99_phi = x_111;
-        } else {
-          x_119_phi = x_98;
-          if (((float(x_101) - (round(x_50) * floor((float(x_101) / round(x_50))))) <= 0.01f)) {
-            x_118 = (x_98 + 100.0f);
-            x_119_phi = x_118;
-          }
-          x_119 = x_119_phi;
-          x_99_phi = x_119;
-        }
-        x_99 = x_99_phi;
-        if ((float(x_101) >= x_92)) {
-          x_124_phi = x_99;
-          x_125_phi = x_99;
-          x_126_phi = true;
-          break;
-        }
-        {
-          x_102 = (x_101 + 1);
-          x_98_phi = x_99;
-          x_101_phi = x_102;
-        }
-      }
-      x_124 = x_124_phi;
-      x_125 = x_125_phi;
-      const bool x_126 = x_126_phi;
-      x_128_phi = x_124;
-      if (x_126) {
-        break;
-      }
-      x_128_phi = x_125;
-      break;
-    }
-  }
-  const float x_128 = x_128_phi;
-  c.y = x_128;
-  const float x_130 = c.x;
-  const float x_131 = c.y;
-  c.z = (x_130 + x_131);
-  x_135_phi = 0;
-  while (true) {
-    int x_136 = 0;
-    const int x_135 = x_135_phi;
-    if ((x_135 < 3)) {
-    } else {
-      break;
-    }
-    const int x_141_save = x_135;
-    const float x_142 = c[x_141_save];
-    if ((x_142 >= 1.0f)) {
-      const float x_146 = c[x_141_save];
-      const float x_147 = c[x_141_save];
-      set_float3(c, x_141_save, (x_146 * x_147));
-    }
-    {
-      x_136 = (x_135 + 1);
-      x_135_phi = x_136;
-    }
-  }
-  const float3 x_151 = normalize(abs(c));
-  x_GLF_color = float4(x_151.x, x_151.y, x_151.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.msl
deleted file mode 100755
index 0827345..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.msl
+++ /dev/null
@@ -1,209 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float x_53 = 0.0f;
-  float x_57 = 0.0f;
-  float x_58 = 0.0f;
-  float x_83 = 0.0f;
-  float x_84 = 0.0f;
-  float x_124 = 0.0f;
-  float x_125 = 0.0f;
-  float x_57_phi = 0.0f;
-  int x_60_phi = 0;
-  float x_83_phi = 0.0f;
-  float x_84_phi = 0.0f;
-  bool x_85_phi = false;
-  float x_87_phi = 0.0f;
-  float x_128_phi = 0.0f;
-  int x_135_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_47 = x_7.resolution.x;
-  float2 const x_48 = float2(1.0f, x_47);
-  float const x_50 = rint((x_47 * 0.125f));
-  float2 const x_51 = float2(0.0f, -0.5f);
-  x_53 = (*(tint_symbol_3)).x;
-  switch(0u) {
-    default: {
-      x_57_phi = -0.5f;
-      x_60_phi = 1;
-      while (true) {
-        float x_70 = 0.0f;
-        float x_78 = 0.0f;
-        int x_61 = 0;
-        float x_58_phi = 0.0f;
-        x_57 = x_57_phi;
-        int const x_60 = x_60_phi;
-        x_83_phi = 0.0f;
-        x_84_phi = x_57;
-        x_85_phi = false;
-        if ((x_60 < 800)) {
-        } else {
-          break;
-        }
-        float x_77 = 0.0f;
-        float x_78_phi = 0.0f;
-        if (((x_60 % 32) == 0)) {
-          x_70 = (x_57 + 0.400000006f);
-          x_58_phi = x_70;
-        } else {
-          x_78_phi = x_57;
-          if (((float(x_60) - (rint(x_50) * floor((float(x_60) / rint(x_50))))) <= 0.01f)) {
-            x_77 = (x_57 + 100.0f);
-            x_78_phi = x_77;
-          }
-          x_78 = x_78_phi;
-          x_58_phi = x_78;
-        }
-        x_58 = x_58_phi;
-        if ((float(x_60) >= x_53)) {
-          x_83_phi = x_58;
-          x_84_phi = x_58;
-          x_85_phi = true;
-          break;
-        }
-        {
-          x_61 = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-          x_57_phi = x_58;
-          x_60_phi = x_61;
-        }
-      }
-      x_83 = x_83_phi;
-      x_84 = x_84_phi;
-      bool const x_85 = x_85_phi;
-      x_87_phi = x_83;
-      if (x_85) {
-        break;
-      }
-      x_87_phi = x_84;
-      break;
-    }
-  }
-  float x_92 = 0.0f;
-  float x_98 = 0.0f;
-  float x_99 = 0.0f;
-  float x_98_phi = 0.0f;
-  int x_101_phi = 0;
-  float x_124_phi = 0.0f;
-  float x_125_phi = 0.0f;
-  bool x_126_phi = false;
-  float const x_87 = x_87_phi;
-  float4 const x_89 = float4(x_84, 0.400000006f, x_83, 0.400000006f);
-  c.x = x_87;
-  x_92 = (*(tint_symbol_3)).y;
-  switch(0u) {
-    default: {
-      float4 const x_95 = float4(x_51, 0.0f, x_57);
-      float const x_96 = float3(x_48, -0.5f).z;
-      x_98_phi = x_96;
-      x_101_phi = 1;
-      while (true) {
-        float x_111 = 0.0f;
-        float x_119 = 0.0f;
-        int x_102 = 0;
-        float x_99_phi = 0.0f;
-        x_98 = x_98_phi;
-        int const x_101 = x_101_phi;
-        x_124_phi = 0.0f;
-        x_125_phi = x_98;
-        x_126_phi = false;
-        if ((x_101 < 800)) {
-        } else {
-          break;
-        }
-        float x_118 = 0.0f;
-        float x_119_phi = 0.0f;
-        if (((x_101 % 32) == 0)) {
-          x_111 = (x_98 + 0.400000006f);
-          x_99_phi = x_111;
-        } else {
-          x_119_phi = x_98;
-          if (((float(x_101) - (rint(x_50) * floor((float(x_101) / rint(x_50))))) <= 0.01f)) {
-            x_118 = (x_98 + 100.0f);
-            x_119_phi = x_118;
-          }
-          x_119 = x_119_phi;
-          x_99_phi = x_119;
-        }
-        x_99 = x_99_phi;
-        if ((float(x_101) >= x_92)) {
-          x_124_phi = x_99;
-          x_125_phi = x_99;
-          x_126_phi = true;
-          break;
-        }
-        {
-          x_102 = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-          x_98_phi = x_99;
-          x_101_phi = x_102;
-        }
-      }
-      x_124 = x_124_phi;
-      x_125 = x_125_phi;
-      bool const x_126 = x_126_phi;
-      x_128_phi = x_124;
-      if (x_126) {
-        break;
-      }
-      x_128_phi = x_125;
-      break;
-    }
-  }
-  float const x_128 = x_128_phi;
-  c.y = x_128;
-  float const x_130 = c.x;
-  float const x_131 = c.y;
-  c.z = (x_130 + x_131);
-  x_135_phi = 0;
-  while (true) {
-    int x_136 = 0;
-    int const x_135 = x_135_phi;
-    if ((x_135 < 3)) {
-    } else {
-      break;
-    }
-    int const x_141_save = x_135;
-    float const x_142 = c[x_141_save];
-    if ((x_142 >= 1.0f)) {
-      float const x_146 = c[x_141_save];
-      float const x_147 = c[x_141_save];
-      c[x_141_save] = (x_146 * x_147);
-    }
-    {
-      x_136 = as_type<int>((as_type<uint>(x_135) + as_type<uint>(1)));
-      x_135_phi = x_136;
-    }
-  }
-  float3 const x_149 = c;
-  float3 const x_151 = normalize(fabs(x_149));
-  *(tint_symbol_4) = float4(x_151.x, x_151.y, x_151.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.spvasm
deleted file mode 100644
index 0fb4e79..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,472 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 277
-; Schema: 0
-               OpCapability Shader
-         %58 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %x_53 "x_53"
-               OpName %x_57 "x_57"
-               OpName %x_58 "x_58"
-               OpName %x_83 "x_83"
-               OpName %x_84 "x_84"
-               OpName %x_124 "x_124"
-               OpName %x_125 "x_125"
-               OpName %x_57_phi "x_57_phi"
-               OpName %x_60_phi "x_60_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_84_phi "x_84_phi"
-               OpName %x_85_phi "x_85_phi"
-               OpName %x_87_phi "x_87_phi"
-               OpName %x_128_phi "x_128_phi"
-               OpName %x_135_phi "x_135_phi"
-               OpName %x_70 "x_70"
-               OpName %x_78 "x_78"
-               OpName %x_61 "x_61"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_77 "x_77"
-               OpName %x_78_phi "x_78_phi"
-               OpName %x_92 "x_92"
-               OpName %x_98 "x_98"
-               OpName %x_99 "x_99"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_101_phi "x_101_phi"
-               OpName %x_124_phi "x_124_phi"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_126_phi "x_126_phi"
-               OpName %x_111 "x_111"
-               OpName %x_119 "x_119"
-               OpName %x_102 "x_102"
-               OpName %x_99_phi "x_99_phi"
-               OpName %x_118 "x_118"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_136 "x_136"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %22 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %49 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-%float_0_125 = OpConstant %float 0.125
-    %float_0 = OpConstant %float 0
- %float_n0_5 = OpConstant %float -0.5
-         %63 = OpConstantComposite %v2float %float_0 %float_n0_5
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-    %int_800 = OpConstant %int 800
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %264 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %22
-       %x_53 = OpVariable %_ptr_Function_float Function %25
-       %x_57 = OpVariable %_ptr_Function_float Function %25
-       %x_58 = OpVariable %_ptr_Function_float Function %25
-       %x_83 = OpVariable %_ptr_Function_float Function %25
-       %x_84 = OpVariable %_ptr_Function_float Function %25
-      %x_124 = OpVariable %_ptr_Function_float Function %25
-      %x_125 = OpVariable %_ptr_Function_float Function %25
-   %x_57_phi = OpVariable %_ptr_Function_float Function %25
-   %x_60_phi = OpVariable %_ptr_Function_int Function %36
-   %x_83_phi = OpVariable %_ptr_Function_float Function %25
-   %x_84_phi = OpVariable %_ptr_Function_float Function %25
-   %x_85_phi = OpVariable %_ptr_Function_bool Function %42
-   %x_87_phi = OpVariable %_ptr_Function_float Function %25
-  %x_128_phi = OpVariable %_ptr_Function_float Function %25
-  %x_135_phi = OpVariable %_ptr_Function_int Function %36
-       %x_70 = OpVariable %_ptr_Function_float Function %25
-       %x_78 = OpVariable %_ptr_Function_float Function %25
-       %x_61 = OpVariable %_ptr_Function_int Function %36
-   %x_58_phi = OpVariable %_ptr_Function_float Function %25
-       %x_77 = OpVariable %_ptr_Function_float Function %25
-   %x_78_phi = OpVariable %_ptr_Function_float Function %25
-       %x_92 = OpVariable %_ptr_Function_float Function %25
-       %x_98 = OpVariable %_ptr_Function_float Function %25
-       %x_99 = OpVariable %_ptr_Function_float Function %25
-   %x_98_phi = OpVariable %_ptr_Function_float Function %25
-  %x_101_phi = OpVariable %_ptr_Function_int Function %36
-  %x_124_phi = OpVariable %_ptr_Function_float Function %25
-  %x_125_phi = OpVariable %_ptr_Function_float Function %25
-  %x_126_phi = OpVariable %_ptr_Function_bool Function %42
-      %x_111 = OpVariable %_ptr_Function_float Function %25
-      %x_119 = OpVariable %_ptr_Function_float Function %25
-      %x_102 = OpVariable %_ptr_Function_int Function %36
-   %x_99_phi = OpVariable %_ptr_Function_float Function %25
-      %x_118 = OpVariable %_ptr_Function_float Function %25
-  %x_119_phi = OpVariable %_ptr_Function_float Function %25
-      %x_136 = OpVariable %_ptr_Function_int Function %36
-               OpStore %c %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %54 = OpLoad %float %53
-         %56 = OpCompositeConstruct %v2float %float_1 %54
-         %60 = OpFMul %float %54 %float_0_125
-         %57 = OpExtInst %float %58 RoundEven %60
-         %65 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %66 = OpLoad %float %65
-               OpStore %x_53 %66
-               OpSelectionMerge %67 None
-               OpSwitch %uint_0 %68
-         %68 = OpLabel
-               OpStore %x_57_phi %float_n0_5
-               OpStore %x_60_phi %int_1
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %78 = OpLoad %float %x_57_phi
-               OpStore %x_57 %78
-         %79 = OpLoad %int %x_60_phi
-               OpStore %x_83_phi %float_0
-         %80 = OpLoad %float %x_57
-               OpStore %x_84_phi %80
-               OpStore %x_85_phi %false
-         %83 = OpSLessThan %bool %79 %int_800
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %71
-         %84 = OpLabel
-         %90 = OpSMod %int %79 %int_32
-         %92 = OpIEqual %bool %90 %int_0
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-         %96 = OpLoad %float %x_57
-         %98 = OpFAdd %float %96 %float_0_400000006
-               OpStore %x_70 %98
-         %99 = OpLoad %float %x_70
-               OpStore %x_58_phi %99
-               OpBranch %93
-         %95 = OpLabel
-        %100 = OpLoad %float %x_57
-               OpStore %x_78_phi %100
-        %101 = OpConvertSToF %float %79
-        %102 = OpExtInst %float %58 RoundEven %57
-        %104 = OpConvertSToF %float %79
-        %105 = OpExtInst %float %58 RoundEven %57
-        %106 = OpFDiv %float %104 %105
-        %103 = OpExtInst %float %58 Floor %106
-        %107 = OpFMul %float %102 %103
-        %108 = OpFSub %float %101 %107
-        %110 = OpFOrdLessThanEqual %bool %108 %float_0_00999999978
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %111
-        %112 = OpLabel
-        %113 = OpLoad %float %x_57
-        %115 = OpFAdd %float %113 %float_100
-               OpStore %x_77 %115
-        %116 = OpLoad %float %x_77
-               OpStore %x_78_phi %116
-               OpBranch %111
-        %111 = OpLabel
-        %117 = OpLoad %float %x_78_phi
-               OpStore %x_78 %117
-        %118 = OpLoad %float %x_78
-               OpStore %x_58_phi %118
-               OpBranch %93
-         %93 = OpLabel
-        %119 = OpLoad %float %x_58_phi
-               OpStore %x_58 %119
-        %120 = OpConvertSToF %float %79
-        %121 = OpLoad %float %x_53
-        %122 = OpFOrdGreaterThanEqual %bool %120 %121
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %123
-        %124 = OpLabel
-        %125 = OpLoad %float %x_58
-               OpStore %x_83_phi %125
-        %126 = OpLoad %float %x_58
-               OpStore %x_84_phi %126
-               OpStore %x_85_phi %true
-               OpBranch %71
-        %123 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-        %128 = OpIAdd %int %79 %int_1
-               OpStore %x_61 %128
-        %129 = OpLoad %float %x_58
-               OpStore %x_57_phi %129
-        %130 = OpLoad %int %x_61
-               OpStore %x_60_phi %130
-               OpBranch %70
-         %71 = OpLabel
-        %131 = OpLoad %float %x_83_phi
-               OpStore %x_83 %131
-        %132 = OpLoad %float %x_84_phi
-               OpStore %x_84 %132
-        %133 = OpLoad %bool %x_85_phi
-        %134 = OpLoad %float %x_83
-               OpStore %x_87_phi %134
-               OpSelectionMerge %135 None
-               OpBranchConditional %133 %136 %135
-        %136 = OpLabel
-               OpBranch %67
-        %135 = OpLabel
-        %137 = OpLoad %float %x_84
-               OpStore %x_87_phi %137
-               OpBranch %67
-         %67 = OpLabel
-        %146 = OpLoad %float %x_87_phi
-        %147 = OpLoad %float %x_84
-        %148 = OpLoad %float %x_83
-        %149 = OpCompositeConstruct %v4float %147 %float_0_400000006 %148 %float_0_400000006
-        %150 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %150 %146
-        %152 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %153 = OpLoad %float %152
-               OpStore %x_92 %153
-               OpSelectionMerge %154 None
-               OpSwitch %uint_0 %155
-        %155 = OpLabel
-        %156 = OpCompositeExtract %float %63 0
-        %157 = OpCompositeExtract %float %63 1
-        %158 = OpLoad %float %x_57
-        %159 = OpCompositeConstruct %v4float %156 %157 %float_0 %158
-        %160 = OpCompositeExtract %float %56 0
-        %161 = OpCompositeExtract %float %56 1
-        %162 = OpCompositeConstruct %v3float %160 %161 %float_n0_5
-        %163 = OpCompositeExtract %float %162 2
-               OpStore %x_98_phi %163
-               OpStore %x_101_phi %int_1
-               OpBranch %164
-        %164 = OpLabel
-               OpLoopMerge %165 %166 None
-               OpBranch %167
-        %167 = OpLabel
-        %172 = OpLoad %float %x_98_phi
-               OpStore %x_98 %172
-        %173 = OpLoad %int %x_101_phi
-               OpStore %x_124_phi %float_0
-        %174 = OpLoad %float %x_98
-               OpStore %x_125_phi %174
-               OpStore %x_126_phi %false
-        %175 = OpSLessThan %bool %173 %int_800
-               OpSelectionMerge %176 None
-               OpBranchConditional %175 %177 %178
-        %177 = OpLabel
-               OpBranch %176
-        %178 = OpLabel
-               OpBranch %165
-        %176 = OpLabel
-        %181 = OpSMod %int %173 %int_32
-        %182 = OpIEqual %bool %181 %int_0
-               OpSelectionMerge %183 None
-               OpBranchConditional %182 %184 %185
-        %184 = OpLabel
-        %186 = OpLoad %float %x_98
-        %187 = OpFAdd %float %186 %float_0_400000006
-               OpStore %x_111 %187
-        %188 = OpLoad %float %x_111
-               OpStore %x_99_phi %188
-               OpBranch %183
-        %185 = OpLabel
-        %189 = OpLoad %float %x_98
-               OpStore %x_119_phi %189
-        %190 = OpConvertSToF %float %173
-        %191 = OpExtInst %float %58 RoundEven %57
-        %193 = OpConvertSToF %float %173
-        %194 = OpExtInst %float %58 RoundEven %57
-        %195 = OpFDiv %float %193 %194
-        %192 = OpExtInst %float %58 Floor %195
-        %196 = OpFMul %float %191 %192
-        %197 = OpFSub %float %190 %196
-        %198 = OpFOrdLessThanEqual %bool %197 %float_0_00999999978
-               OpSelectionMerge %199 None
-               OpBranchConditional %198 %200 %199
-        %200 = OpLabel
-        %201 = OpLoad %float %x_98
-        %202 = OpFAdd %float %201 %float_100
-               OpStore %x_118 %202
-        %203 = OpLoad %float %x_118
-               OpStore %x_119_phi %203
-               OpBranch %199
-        %199 = OpLabel
-        %204 = OpLoad %float %x_119_phi
-               OpStore %x_119 %204
-        %205 = OpLoad %float %x_119
-               OpStore %x_99_phi %205
-               OpBranch %183
-        %183 = OpLabel
-        %206 = OpLoad %float %x_99_phi
-               OpStore %x_99 %206
-        %207 = OpConvertSToF %float %173
-        %208 = OpLoad %float %x_92
-        %209 = OpFOrdGreaterThanEqual %bool %207 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %210
-        %211 = OpLabel
-        %212 = OpLoad %float %x_99
-               OpStore %x_124_phi %212
-        %213 = OpLoad %float %x_99
-               OpStore %x_125_phi %213
-               OpStore %x_126_phi %true
-               OpBranch %165
-        %210 = OpLabel
-               OpBranch %166
-        %166 = OpLabel
-        %214 = OpIAdd %int %173 %int_1
-               OpStore %x_102 %214
-        %215 = OpLoad %float %x_99
-               OpStore %x_98_phi %215
-        %216 = OpLoad %int %x_102
-               OpStore %x_101_phi %216
-               OpBranch %164
-        %165 = OpLabel
-        %217 = OpLoad %float %x_124_phi
-               OpStore %x_124 %217
-        %218 = OpLoad %float %x_125_phi
-               OpStore %x_125 %218
-        %219 = OpLoad %bool %x_126_phi
-        %220 = OpLoad %float %x_124
-               OpStore %x_128_phi %220
-               OpSelectionMerge %221 None
-               OpBranchConditional %219 %222 %221
-        %222 = OpLabel
-               OpBranch %154
-        %221 = OpLabel
-        %223 = OpLoad %float %x_125
-               OpStore %x_128_phi %223
-               OpBranch %154
-        %154 = OpLabel
-        %224 = OpLoad %float %x_128_phi
-        %225 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %225 %224
-        %226 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %227 = OpLoad %float %226
-        %228 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %229 = OpLoad %float %228
-        %231 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %232 = OpFAdd %float %227 %229
-               OpStore %231 %232
-               OpStore %x_135_phi %int_0
-               OpBranch %233
-        %233 = OpLabel
-               OpLoopMerge %234 %235 None
-               OpBranch %236
-        %236 = OpLabel
-        %238 = OpLoad %int %x_135_phi
-        %240 = OpSLessThan %bool %238 %int_3
-               OpSelectionMerge %241 None
-               OpBranchConditional %240 %242 %243
-        %242 = OpLabel
-               OpBranch %241
-        %243 = OpLabel
-               OpBranch %234
-        %241 = OpLabel
-        %244 = OpAccessChain %_ptr_Function_float %c %238
-        %245 = OpLoad %float %244
-        %246 = OpFOrdGreaterThanEqual %bool %245 %float_1
-               OpSelectionMerge %247 None
-               OpBranchConditional %246 %248 %247
-        %248 = OpLabel
-        %249 = OpAccessChain %_ptr_Function_float %c %238
-        %250 = OpLoad %float %249
-        %251 = OpAccessChain %_ptr_Function_float %c %238
-        %252 = OpLoad %float %251
-        %253 = OpAccessChain %_ptr_Function_float %c %238
-        %254 = OpFMul %float %250 %252
-               OpStore %253 %254
-               OpBranch %247
-        %247 = OpLabel
-               OpBranch %235
-        %235 = OpLabel
-        %255 = OpIAdd %int %238 %int_1
-               OpStore %x_136 %255
-        %256 = OpLoad %int %x_136
-               OpStore %x_135_phi %256
-               OpBranch %233
-        %234 = OpLabel
-        %257 = OpLoad %v3float %c
-        %259 = OpExtInst %v3float %58 FAbs %257
-        %258 = OpExtInst %v3float %58 Normalize %259
-        %260 = OpCompositeExtract %float %258 0
-        %261 = OpCompositeExtract %float %258 1
-        %262 = OpCompositeExtract %float %258 2
-        %263 = OpCompositeConstruct %v4float %260 %261 %262 %float_1
-               OpStore %x_GLF_color %263
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %264
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %268 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %269 = OpFunctionCall %void %main_1
-        %270 = OpLoad %v4float %x_GLF_color
-        %271 = OpCompositeConstruct %main_out %270
-               OpReturnValue %271
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %273 = OpLabel
-        %275 = OpLoad %v4float %gl_FragCoord_param_1
-        %274 = OpFunctionCall %main_out %main_inner %275
-        %276 = OpCompositeExtract %v4float %274 0
-               OpStore %x_GLF_color_1_1 %276
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.wgsl
deleted file mode 100644
index e1db4ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,205 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec3<f32>;
-  var x_53 : f32;
-  var x_57 : f32;
-  var x_58 : f32;
-  var x_83 : f32;
-  var x_84 : f32;
-  var x_124 : f32;
-  var x_125 : f32;
-  var x_57_phi : f32;
-  var x_60_phi : i32;
-  var x_83_phi : f32;
-  var x_84_phi : f32;
-  var x_85_phi : bool;
-  var x_87_phi : f32;
-  var x_128_phi : f32;
-  var x_135_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_47 : f32 = x_7.resolution.x;
-  let x_48 : vec2<f32> = vec2<f32>(1.0, x_47);
-  let x_50 : f32 = round((x_47 * 0.125));
-  let x_51 : vec2<f32> = vec2<f32>(0.0, -0.5);
-  x_53 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_57_phi = -0.5;
-      x_60_phi = 1;
-      loop {
-        var x_70 : f32;
-        var x_78 : f32;
-        var x_61 : i32;
-        var x_58_phi : f32;
-        x_57 = x_57_phi;
-        let x_60 : i32 = x_60_phi;
-        x_83_phi = 0.0;
-        x_84_phi = x_57;
-        x_85_phi = false;
-        if ((x_60 < 800)) {
-        } else {
-          break;
-        }
-        var x_77 : f32;
-        var x_78_phi : f32;
-        if (((x_60 % 32) == 0)) {
-          x_70 = (x_57 + 0.400000006);
-          x_58_phi = x_70;
-        } else {
-          x_78_phi = x_57;
-          if (((f32(x_60) - (round(x_50) * floor((f32(x_60) / round(x_50))))) <= 0.01)) {
-            x_77 = (x_57 + 100.0);
-            x_78_phi = x_77;
-          }
-          x_78 = x_78_phi;
-          x_58_phi = x_78;
-        }
-        x_58 = x_58_phi;
-        if ((f32(x_60) >= x_53)) {
-          x_83_phi = x_58;
-          x_84_phi = x_58;
-          x_85_phi = true;
-          break;
-        }
-
-        continuing {
-          x_61 = (x_60 + 1);
-          x_57_phi = x_58;
-          x_60_phi = x_61;
-        }
-      }
-      x_83 = x_83_phi;
-      x_84 = x_84_phi;
-      let x_85 : bool = x_85_phi;
-      x_87_phi = x_83;
-      if (x_85) {
-        break;
-      }
-      x_87_phi = x_84;
-    }
-  }
-  var x_92 : f32;
-  var x_98 : f32;
-  var x_99 : f32;
-  var x_98_phi : f32;
-  var x_101_phi : i32;
-  var x_124_phi : f32;
-  var x_125_phi : f32;
-  var x_126_phi : bool;
-  let x_87 : f32 = x_87_phi;
-  let x_88 : ptr<function, f32> = &(c.x);
-  let x_89 : vec4<f32> = vec4<f32>(x_84, 0.400000006, x_83, 0.400000006);
-  *(x_88) = x_87;
-  x_92 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      let x_95 : vec4<f32> = vec4<f32>(x_51, 0.0, x_57);
-      let x_96 : f32 = vec3<f32>(x_48, -0.5).z;
-      x_98_phi = x_96;
-      x_101_phi = 1;
-      loop {
-        var x_111 : f32;
-        var x_119 : f32;
-        var x_102 : i32;
-        var x_99_phi : f32;
-        x_98 = x_98_phi;
-        let x_101 : i32 = x_101_phi;
-        x_124_phi = 0.0;
-        x_125_phi = x_98;
-        x_126_phi = false;
-        if ((x_101 < 800)) {
-        } else {
-          break;
-        }
-        var x_118 : f32;
-        var x_119_phi : f32;
-        if (((x_101 % 32) == 0)) {
-          x_111 = (x_98 + 0.400000006);
-          x_99_phi = x_111;
-        } else {
-          x_119_phi = x_98;
-          if (((f32(x_101) - (round(x_50) * floor((f32(x_101) / round(x_50))))) <= 0.01)) {
-            x_118 = (x_98 + 100.0);
-            x_119_phi = x_118;
-          }
-          x_119 = x_119_phi;
-          x_99_phi = x_119;
-        }
-        x_99 = x_99_phi;
-        if ((f32(x_101) >= x_92)) {
-          x_124_phi = x_99;
-          x_125_phi = x_99;
-          x_126_phi = true;
-          break;
-        }
-
-        continuing {
-          x_102 = (x_101 + 1);
-          x_98_phi = x_99;
-          x_101_phi = x_102;
-        }
-      }
-      x_124 = x_124_phi;
-      x_125 = x_125_phi;
-      let x_126 : bool = x_126_phi;
-      x_128_phi = x_124;
-      if (x_126) {
-        break;
-      }
-      x_128_phi = x_125;
-    }
-  }
-  let x_128 : f32 = x_128_phi;
-  let x_129 : ptr<function, f32> = &(c.y);
-  *(x_129) = x_128;
-  let x_130 : f32 = *(x_88);
-  let x_131 : f32 = *(x_129);
-  c.z = (x_130 + x_131);
-  x_135_phi = 0;
-  loop {
-    var x_136 : i32;
-    let x_135 : i32 = x_135_phi;
-    if ((x_135 < 3)) {
-    } else {
-      break;
-    }
-    let x_141 : ptr<function, f32> = &(c[x_135]);
-    let x_142 : f32 = *(x_141);
-    if ((x_142 >= 1.0)) {
-      let x_146 : f32 = *(x_141);
-      let x_147 : f32 = *(x_141);
-      *(x_141) = (x_146 * x_147);
-    }
-
-    continuing {
-      x_136 = (x_135 + 1);
-      x_135_phi = x_136;
-    }
-  }
-  let x_149 : vec3<f32> = c;
-  let x_151 : vec3<f32> = normalize(abs(x_149));
-  x_GLF_color = vec4<f32>(x_151.x, x_151.y, x_151.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.hlsl
deleted file mode 100644
index 24247b1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,212 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float x_53 = 0.0f;
-  float x_57 = 0.0f;
-  float x_58 = 0.0f;
-  float x_83 = 0.0f;
-  float x_84 = 0.0f;
-  float x_124 = 0.0f;
-  float x_125 = 0.0f;
-  float x_57_phi = 0.0f;
-  int x_60_phi = 0;
-  float x_83_phi = 0.0f;
-  float x_84_phi = 0.0f;
-  bool x_85_phi = false;
-  float x_87_phi = 0.0f;
-  float x_128_phi = 0.0f;
-  int x_135_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_47 = asfloat(x_7[0].x);
-  const float2 x_48 = float2(1.0f, x_47);
-  const float x_50 = round((x_47 * 0.125f));
-  const float2 x_51 = float2(0.0f, -0.5f);
-  x_53 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_57_phi = -0.5f;
-      x_60_phi = 1;
-      while (true) {
-        float x_70 = 0.0f;
-        float x_78 = 0.0f;
-        int x_61 = 0;
-        float x_58_phi = 0.0f;
-        x_57 = x_57_phi;
-        const int x_60 = x_60_phi;
-        x_83_phi = 0.0f;
-        x_84_phi = x_57;
-        x_85_phi = false;
-        if ((x_60 < 800)) {
-        } else {
-          break;
-        }
-        float x_77 = 0.0f;
-        float x_78_phi = 0.0f;
-        if (((x_60 % 32) == 0)) {
-          x_70 = (x_57 + 0.400000006f);
-          x_58_phi = x_70;
-        } else {
-          x_78_phi = x_57;
-          if (((float(x_60) % round(x_50)) <= 0.01f)) {
-            x_77 = (x_57 + 100.0f);
-            x_78_phi = x_77;
-          }
-          x_78 = x_78_phi;
-          x_58_phi = x_78;
-        }
-        x_58 = x_58_phi;
-        if ((float(x_60) >= x_53)) {
-          x_83_phi = x_58;
-          x_84_phi = x_58;
-          x_85_phi = true;
-          break;
-        }
-        {
-          x_61 = (x_60 + 1);
-          x_57_phi = x_58;
-          x_60_phi = x_61;
-        }
-      }
-      x_83 = x_83_phi;
-      x_84 = x_84_phi;
-      const bool x_85 = x_85_phi;
-      x_87_phi = x_83;
-      if (x_85) {
-        break;
-      }
-      x_87_phi = x_84;
-      break;
-    }
-  }
-  float x_92 = 0.0f;
-  float x_98 = 0.0f;
-  float x_99 = 0.0f;
-  float x_98_phi = 0.0f;
-  int x_101_phi = 0;
-  float x_124_phi = 0.0f;
-  float x_125_phi = 0.0f;
-  bool x_126_phi = false;
-  const float x_87 = x_87_phi;
-  const float4 x_89 = float4(x_84, 0.400000006f, x_83, 0.400000006f);
-  c.x = x_87;
-  x_92 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      const float4 x_95 = float4(x_51, 0.0f, x_57);
-      const float x_96 = float3(x_48, -0.5f).z;
-      x_98_phi = x_96;
-      x_101_phi = 1;
-      while (true) {
-        float x_111 = 0.0f;
-        float x_119 = 0.0f;
-        int x_102 = 0;
-        float x_99_phi = 0.0f;
-        x_98 = x_98_phi;
-        const int x_101 = x_101_phi;
-        x_124_phi = 0.0f;
-        x_125_phi = x_98;
-        x_126_phi = false;
-        if ((x_101 < 800)) {
-        } else {
-          break;
-        }
-        float x_118 = 0.0f;
-        float x_119_phi = 0.0f;
-        if (((x_101 % 32) == 0)) {
-          x_111 = (x_98 + 0.400000006f);
-          x_99_phi = x_111;
-        } else {
-          x_119_phi = x_98;
-          if (((float(x_101) % round(x_50)) <= 0.01f)) {
-            x_118 = (x_98 + 100.0f);
-            x_119_phi = x_118;
-          }
-          x_119 = x_119_phi;
-          x_99_phi = x_119;
-        }
-        x_99 = x_99_phi;
-        if ((float(x_101) >= x_92)) {
-          x_124_phi = x_99;
-          x_125_phi = x_99;
-          x_126_phi = true;
-          break;
-        }
-        {
-          x_102 = (x_101 + 1);
-          x_98_phi = x_99;
-          x_101_phi = x_102;
-        }
-      }
-      x_124 = x_124_phi;
-      x_125 = x_125_phi;
-      const bool x_126 = x_126_phi;
-      x_128_phi = x_124;
-      if (x_126) {
-        break;
-      }
-      x_128_phi = x_125;
-      break;
-    }
-  }
-  const float x_128 = x_128_phi;
-  c.y = x_128;
-  const float x_130 = c.x;
-  const float x_131 = c.y;
-  c.z = (x_130 + x_131);
-  x_135_phi = 0;
-  while (true) {
-    int x_136 = 0;
-    const int x_135 = x_135_phi;
-    if ((x_135 < 3)) {
-    } else {
-      break;
-    }
-    const int x_141_save = x_135;
-    const float x_142 = c[x_141_save];
-    if ((x_142 >= 1.0f)) {
-      const float x_146 = c[x_141_save];
-      const float x_147 = c[x_141_save];
-      set_float3(c, x_141_save, (x_146 * x_147));
-    }
-    {
-      x_136 = (x_135 + 1);
-      x_135_phi = x_136;
-    }
-  }
-  const float3 x_151 = normalize(abs(c));
-  x_GLF_color = float4(x_151.x, x_151.y, x_151.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.msl
deleted file mode 100755
index 9e79e00..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.msl
+++ /dev/null
@@ -1,209 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float x_53 = 0.0f;
-  float x_57 = 0.0f;
-  float x_58 = 0.0f;
-  float x_83 = 0.0f;
-  float x_84 = 0.0f;
-  float x_124 = 0.0f;
-  float x_125 = 0.0f;
-  float x_57_phi = 0.0f;
-  int x_60_phi = 0;
-  float x_83_phi = 0.0f;
-  float x_84_phi = 0.0f;
-  bool x_85_phi = false;
-  float x_87_phi = 0.0f;
-  float x_128_phi = 0.0f;
-  int x_135_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_47 = x_7.resolution.x;
-  float2 const x_48 = float2(1.0f, x_47);
-  float const x_50 = rint((x_47 * 0.125f));
-  float2 const x_51 = float2(0.0f, -0.5f);
-  x_53 = (*(tint_symbol_3)).x;
-  switch(0u) {
-    default: {
-      x_57_phi = -0.5f;
-      x_60_phi = 1;
-      while (true) {
-        float x_70 = 0.0f;
-        float x_78 = 0.0f;
-        int x_61 = 0;
-        float x_58_phi = 0.0f;
-        x_57 = x_57_phi;
-        int const x_60 = x_60_phi;
-        x_83_phi = 0.0f;
-        x_84_phi = x_57;
-        x_85_phi = false;
-        if ((x_60 < 800)) {
-        } else {
-          break;
-        }
-        float x_77 = 0.0f;
-        float x_78_phi = 0.0f;
-        if (((x_60 % 32) == 0)) {
-          x_70 = (x_57 + 0.400000006f);
-          x_58_phi = x_70;
-        } else {
-          x_78_phi = x_57;
-          if ((fmod(float(x_60), rint(x_50)) <= 0.01f)) {
-            x_77 = (x_57 + 100.0f);
-            x_78_phi = x_77;
-          }
-          x_78 = x_78_phi;
-          x_58_phi = x_78;
-        }
-        x_58 = x_58_phi;
-        if ((float(x_60) >= x_53)) {
-          x_83_phi = x_58;
-          x_84_phi = x_58;
-          x_85_phi = true;
-          break;
-        }
-        {
-          x_61 = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-          x_57_phi = x_58;
-          x_60_phi = x_61;
-        }
-      }
-      x_83 = x_83_phi;
-      x_84 = x_84_phi;
-      bool const x_85 = x_85_phi;
-      x_87_phi = x_83;
-      if (x_85) {
-        break;
-      }
-      x_87_phi = x_84;
-      break;
-    }
-  }
-  float x_92 = 0.0f;
-  float x_98 = 0.0f;
-  float x_99 = 0.0f;
-  float x_98_phi = 0.0f;
-  int x_101_phi = 0;
-  float x_124_phi = 0.0f;
-  float x_125_phi = 0.0f;
-  bool x_126_phi = false;
-  float const x_87 = x_87_phi;
-  float4 const x_89 = float4(x_84, 0.400000006f, x_83, 0.400000006f);
-  c.x = x_87;
-  x_92 = (*(tint_symbol_3)).y;
-  switch(0u) {
-    default: {
-      float4 const x_95 = float4(x_51, 0.0f, x_57);
-      float const x_96 = float3(x_48, -0.5f).z;
-      x_98_phi = x_96;
-      x_101_phi = 1;
-      while (true) {
-        float x_111 = 0.0f;
-        float x_119 = 0.0f;
-        int x_102 = 0;
-        float x_99_phi = 0.0f;
-        x_98 = x_98_phi;
-        int const x_101 = x_101_phi;
-        x_124_phi = 0.0f;
-        x_125_phi = x_98;
-        x_126_phi = false;
-        if ((x_101 < 800)) {
-        } else {
-          break;
-        }
-        float x_118 = 0.0f;
-        float x_119_phi = 0.0f;
-        if (((x_101 % 32) == 0)) {
-          x_111 = (x_98 + 0.400000006f);
-          x_99_phi = x_111;
-        } else {
-          x_119_phi = x_98;
-          if ((fmod(float(x_101), rint(x_50)) <= 0.01f)) {
-            x_118 = (x_98 + 100.0f);
-            x_119_phi = x_118;
-          }
-          x_119 = x_119_phi;
-          x_99_phi = x_119;
-        }
-        x_99 = x_99_phi;
-        if ((float(x_101) >= x_92)) {
-          x_124_phi = x_99;
-          x_125_phi = x_99;
-          x_126_phi = true;
-          break;
-        }
-        {
-          x_102 = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-          x_98_phi = x_99;
-          x_101_phi = x_102;
-        }
-      }
-      x_124 = x_124_phi;
-      x_125 = x_125_phi;
-      bool const x_126 = x_126_phi;
-      x_128_phi = x_124;
-      if (x_126) {
-        break;
-      }
-      x_128_phi = x_125;
-      break;
-    }
-  }
-  float const x_128 = x_128_phi;
-  c.y = x_128;
-  float const x_130 = c.x;
-  float const x_131 = c.y;
-  c.z = (x_130 + x_131);
-  x_135_phi = 0;
-  while (true) {
-    int x_136 = 0;
-    int const x_135 = x_135_phi;
-    if ((x_135 < 3)) {
-    } else {
-      break;
-    }
-    int const x_141_save = x_135;
-    float const x_142 = c[x_141_save];
-    if ((x_142 >= 1.0f)) {
-      float const x_146 = c[x_141_save];
-      float const x_147 = c[x_141_save];
-      c[x_141_save] = (x_146 * x_147);
-    }
-    {
-      x_136 = as_type<int>((as_type<uint>(x_135) + as_type<uint>(1)));
-      x_135_phi = x_136;
-    }
-  }
-  float3 const x_149 = c;
-  float3 const x_151 = normalize(fabs(x_149));
-  *(tint_symbol_4) = float4(x_151.x, x_151.y, x_151.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.spvasm
deleted file mode 100644
index 600e4cf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,462 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 267
-; Schema: 0
-               OpCapability Shader
-         %58 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %x_53 "x_53"
-               OpName %x_57 "x_57"
-               OpName %x_58 "x_58"
-               OpName %x_83 "x_83"
-               OpName %x_84 "x_84"
-               OpName %x_124 "x_124"
-               OpName %x_125 "x_125"
-               OpName %x_57_phi "x_57_phi"
-               OpName %x_60_phi "x_60_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_84_phi "x_84_phi"
-               OpName %x_85_phi "x_85_phi"
-               OpName %x_87_phi "x_87_phi"
-               OpName %x_128_phi "x_128_phi"
-               OpName %x_135_phi "x_135_phi"
-               OpName %x_70 "x_70"
-               OpName %x_78 "x_78"
-               OpName %x_61 "x_61"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_77 "x_77"
-               OpName %x_78_phi "x_78_phi"
-               OpName %x_92 "x_92"
-               OpName %x_98 "x_98"
-               OpName %x_99 "x_99"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_101_phi "x_101_phi"
-               OpName %x_124_phi "x_124_phi"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_126_phi "x_126_phi"
-               OpName %x_111 "x_111"
-               OpName %x_119 "x_119"
-               OpName %x_102 "x_102"
-               OpName %x_99_phi "x_99_phi"
-               OpName %x_118 "x_118"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_136 "x_136"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %22 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %49 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-%float_0_125 = OpConstant %float 0.125
-    %float_0 = OpConstant %float 0
- %float_n0_5 = OpConstant %float -0.5
-         %63 = OpConstantComposite %v2float %float_0 %float_n0_5
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-    %int_800 = OpConstant %int 800
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %254 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %22
-       %x_53 = OpVariable %_ptr_Function_float Function %25
-       %x_57 = OpVariable %_ptr_Function_float Function %25
-       %x_58 = OpVariable %_ptr_Function_float Function %25
-       %x_83 = OpVariable %_ptr_Function_float Function %25
-       %x_84 = OpVariable %_ptr_Function_float Function %25
-      %x_124 = OpVariable %_ptr_Function_float Function %25
-      %x_125 = OpVariable %_ptr_Function_float Function %25
-   %x_57_phi = OpVariable %_ptr_Function_float Function %25
-   %x_60_phi = OpVariable %_ptr_Function_int Function %36
-   %x_83_phi = OpVariable %_ptr_Function_float Function %25
-   %x_84_phi = OpVariable %_ptr_Function_float Function %25
-   %x_85_phi = OpVariable %_ptr_Function_bool Function %42
-   %x_87_phi = OpVariable %_ptr_Function_float Function %25
-  %x_128_phi = OpVariable %_ptr_Function_float Function %25
-  %x_135_phi = OpVariable %_ptr_Function_int Function %36
-       %x_70 = OpVariable %_ptr_Function_float Function %25
-       %x_78 = OpVariable %_ptr_Function_float Function %25
-       %x_61 = OpVariable %_ptr_Function_int Function %36
-   %x_58_phi = OpVariable %_ptr_Function_float Function %25
-       %x_77 = OpVariable %_ptr_Function_float Function %25
-   %x_78_phi = OpVariable %_ptr_Function_float Function %25
-       %x_92 = OpVariable %_ptr_Function_float Function %25
-       %x_98 = OpVariable %_ptr_Function_float Function %25
-       %x_99 = OpVariable %_ptr_Function_float Function %25
-   %x_98_phi = OpVariable %_ptr_Function_float Function %25
-  %x_101_phi = OpVariable %_ptr_Function_int Function %36
-  %x_124_phi = OpVariable %_ptr_Function_float Function %25
-  %x_125_phi = OpVariable %_ptr_Function_float Function %25
-  %x_126_phi = OpVariable %_ptr_Function_bool Function %42
-      %x_111 = OpVariable %_ptr_Function_float Function %25
-      %x_119 = OpVariable %_ptr_Function_float Function %25
-      %x_102 = OpVariable %_ptr_Function_int Function %36
-   %x_99_phi = OpVariable %_ptr_Function_float Function %25
-      %x_118 = OpVariable %_ptr_Function_float Function %25
-  %x_119_phi = OpVariable %_ptr_Function_float Function %25
-      %x_136 = OpVariable %_ptr_Function_int Function %36
-               OpStore %c %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %54 = OpLoad %float %53
-         %56 = OpCompositeConstruct %v2float %float_1 %54
-         %60 = OpFMul %float %54 %float_0_125
-         %57 = OpExtInst %float %58 RoundEven %60
-         %65 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %66 = OpLoad %float %65
-               OpStore %x_53 %66
-               OpSelectionMerge %67 None
-               OpSwitch %uint_0 %68
-         %68 = OpLabel
-               OpStore %x_57_phi %float_n0_5
-               OpStore %x_60_phi %int_1
-               OpBranch %70
-         %70 = OpLabel
-               OpLoopMerge %71 %72 None
-               OpBranch %73
-         %73 = OpLabel
-         %78 = OpLoad %float %x_57_phi
-               OpStore %x_57 %78
-         %79 = OpLoad %int %x_60_phi
-               OpStore %x_83_phi %float_0
-         %80 = OpLoad %float %x_57
-               OpStore %x_84_phi %80
-               OpStore %x_85_phi %false
-         %83 = OpSLessThan %bool %79 %int_800
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %71
-         %84 = OpLabel
-         %90 = OpSMod %int %79 %int_32
-         %92 = OpIEqual %bool %90 %int_0
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-         %96 = OpLoad %float %x_57
-         %98 = OpFAdd %float %96 %float_0_400000006
-               OpStore %x_70 %98
-         %99 = OpLoad %float %x_70
-               OpStore %x_58_phi %99
-               OpBranch %93
-         %95 = OpLabel
-        %100 = OpLoad %float %x_57
-               OpStore %x_78_phi %100
-        %101 = OpConvertSToF %float %79
-        %102 = OpExtInst %float %58 RoundEven %57
-        %103 = OpFRem %float %101 %102
-        %105 = OpFOrdLessThanEqual %bool %103 %float_0_00999999978
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %106
-        %107 = OpLabel
-        %108 = OpLoad %float %x_57
-        %110 = OpFAdd %float %108 %float_100
-               OpStore %x_77 %110
-        %111 = OpLoad %float %x_77
-               OpStore %x_78_phi %111
-               OpBranch %106
-        %106 = OpLabel
-        %112 = OpLoad %float %x_78_phi
-               OpStore %x_78 %112
-        %113 = OpLoad %float %x_78
-               OpStore %x_58_phi %113
-               OpBranch %93
-         %93 = OpLabel
-        %114 = OpLoad %float %x_58_phi
-               OpStore %x_58 %114
-        %115 = OpConvertSToF %float %79
-        %116 = OpLoad %float %x_53
-        %117 = OpFOrdGreaterThanEqual %bool %115 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpLoad %float %x_58
-               OpStore %x_83_phi %120
-        %121 = OpLoad %float %x_58
-               OpStore %x_84_phi %121
-               OpStore %x_85_phi %true
-               OpBranch %71
-        %118 = OpLabel
-               OpBranch %72
-         %72 = OpLabel
-        %123 = OpIAdd %int %79 %int_1
-               OpStore %x_61 %123
-        %124 = OpLoad %float %x_58
-               OpStore %x_57_phi %124
-        %125 = OpLoad %int %x_61
-               OpStore %x_60_phi %125
-               OpBranch %70
-         %71 = OpLabel
-        %126 = OpLoad %float %x_83_phi
-               OpStore %x_83 %126
-        %127 = OpLoad %float %x_84_phi
-               OpStore %x_84 %127
-        %128 = OpLoad %bool %x_85_phi
-        %129 = OpLoad %float %x_83
-               OpStore %x_87_phi %129
-               OpSelectionMerge %130 None
-               OpBranchConditional %128 %131 %130
-        %131 = OpLabel
-               OpBranch %67
-        %130 = OpLabel
-        %132 = OpLoad %float %x_84
-               OpStore %x_87_phi %132
-               OpBranch %67
-         %67 = OpLabel
-        %141 = OpLoad %float %x_87_phi
-        %142 = OpLoad %float %x_84
-        %143 = OpLoad %float %x_83
-        %144 = OpCompositeConstruct %v4float %142 %float_0_400000006 %143 %float_0_400000006
-        %145 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %145 %141
-        %147 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %148 = OpLoad %float %147
-               OpStore %x_92 %148
-               OpSelectionMerge %149 None
-               OpSwitch %uint_0 %150
-        %150 = OpLabel
-        %151 = OpCompositeExtract %float %63 0
-        %152 = OpCompositeExtract %float %63 1
-        %153 = OpLoad %float %x_57
-        %154 = OpCompositeConstruct %v4float %151 %152 %float_0 %153
-        %155 = OpCompositeExtract %float %56 0
-        %156 = OpCompositeExtract %float %56 1
-        %157 = OpCompositeConstruct %v3float %155 %156 %float_n0_5
-        %158 = OpCompositeExtract %float %157 2
-               OpStore %x_98_phi %158
-               OpStore %x_101_phi %int_1
-               OpBranch %159
-        %159 = OpLabel
-               OpLoopMerge %160 %161 None
-               OpBranch %162
-        %162 = OpLabel
-        %167 = OpLoad %float %x_98_phi
-               OpStore %x_98 %167
-        %168 = OpLoad %int %x_101_phi
-               OpStore %x_124_phi %float_0
-        %169 = OpLoad %float %x_98
-               OpStore %x_125_phi %169
-               OpStore %x_126_phi %false
-        %170 = OpSLessThan %bool %168 %int_800
-               OpSelectionMerge %171 None
-               OpBranchConditional %170 %172 %173
-        %172 = OpLabel
-               OpBranch %171
-        %173 = OpLabel
-               OpBranch %160
-        %171 = OpLabel
-        %176 = OpSMod %int %168 %int_32
-        %177 = OpIEqual %bool %176 %int_0
-               OpSelectionMerge %178 None
-               OpBranchConditional %177 %179 %180
-        %179 = OpLabel
-        %181 = OpLoad %float %x_98
-        %182 = OpFAdd %float %181 %float_0_400000006
-               OpStore %x_111 %182
-        %183 = OpLoad %float %x_111
-               OpStore %x_99_phi %183
-               OpBranch %178
-        %180 = OpLabel
-        %184 = OpLoad %float %x_98
-               OpStore %x_119_phi %184
-        %185 = OpConvertSToF %float %168
-        %186 = OpExtInst %float %58 RoundEven %57
-        %187 = OpFRem %float %185 %186
-        %188 = OpFOrdLessThanEqual %bool %187 %float_0_00999999978
-               OpSelectionMerge %189 None
-               OpBranchConditional %188 %190 %189
-        %190 = OpLabel
-        %191 = OpLoad %float %x_98
-        %192 = OpFAdd %float %191 %float_100
-               OpStore %x_118 %192
-        %193 = OpLoad %float %x_118
-               OpStore %x_119_phi %193
-               OpBranch %189
-        %189 = OpLabel
-        %194 = OpLoad %float %x_119_phi
-               OpStore %x_119 %194
-        %195 = OpLoad %float %x_119
-               OpStore %x_99_phi %195
-               OpBranch %178
-        %178 = OpLabel
-        %196 = OpLoad %float %x_99_phi
-               OpStore %x_99 %196
-        %197 = OpConvertSToF %float %168
-        %198 = OpLoad %float %x_92
-        %199 = OpFOrdGreaterThanEqual %bool %197 %198
-               OpSelectionMerge %200 None
-               OpBranchConditional %199 %201 %200
-        %201 = OpLabel
-        %202 = OpLoad %float %x_99
-               OpStore %x_124_phi %202
-        %203 = OpLoad %float %x_99
-               OpStore %x_125_phi %203
-               OpStore %x_126_phi %true
-               OpBranch %160
-        %200 = OpLabel
-               OpBranch %161
-        %161 = OpLabel
-        %204 = OpIAdd %int %168 %int_1
-               OpStore %x_102 %204
-        %205 = OpLoad %float %x_99
-               OpStore %x_98_phi %205
-        %206 = OpLoad %int %x_102
-               OpStore %x_101_phi %206
-               OpBranch %159
-        %160 = OpLabel
-        %207 = OpLoad %float %x_124_phi
-               OpStore %x_124 %207
-        %208 = OpLoad %float %x_125_phi
-               OpStore %x_125 %208
-        %209 = OpLoad %bool %x_126_phi
-        %210 = OpLoad %float %x_124
-               OpStore %x_128_phi %210
-               OpSelectionMerge %211 None
-               OpBranchConditional %209 %212 %211
-        %212 = OpLabel
-               OpBranch %149
-        %211 = OpLabel
-        %213 = OpLoad %float %x_125
-               OpStore %x_128_phi %213
-               OpBranch %149
-        %149 = OpLabel
-        %214 = OpLoad %float %x_128_phi
-        %215 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %215 %214
-        %216 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %217 = OpLoad %float %216
-        %218 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %219 = OpLoad %float %218
-        %221 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %222 = OpFAdd %float %217 %219
-               OpStore %221 %222
-               OpStore %x_135_phi %int_0
-               OpBranch %223
-        %223 = OpLabel
-               OpLoopMerge %224 %225 None
-               OpBranch %226
-        %226 = OpLabel
-        %228 = OpLoad %int %x_135_phi
-        %230 = OpSLessThan %bool %228 %int_3
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %233
-        %232 = OpLabel
-               OpBranch %231
-        %233 = OpLabel
-               OpBranch %224
-        %231 = OpLabel
-        %234 = OpAccessChain %_ptr_Function_float %c %228
-        %235 = OpLoad %float %234
-        %236 = OpFOrdGreaterThanEqual %bool %235 %float_1
-               OpSelectionMerge %237 None
-               OpBranchConditional %236 %238 %237
-        %238 = OpLabel
-        %239 = OpAccessChain %_ptr_Function_float %c %228
-        %240 = OpLoad %float %239
-        %241 = OpAccessChain %_ptr_Function_float %c %228
-        %242 = OpLoad %float %241
-        %243 = OpAccessChain %_ptr_Function_float %c %228
-        %244 = OpFMul %float %240 %242
-               OpStore %243 %244
-               OpBranch %237
-        %237 = OpLabel
-               OpBranch %225
-        %225 = OpLabel
-        %245 = OpIAdd %int %228 %int_1
-               OpStore %x_136 %245
-        %246 = OpLoad %int %x_136
-               OpStore %x_135_phi %246
-               OpBranch %223
-        %224 = OpLabel
-        %247 = OpLoad %v3float %c
-        %249 = OpExtInst %v3float %58 FAbs %247
-        %248 = OpExtInst %v3float %58 Normalize %249
-        %250 = OpCompositeExtract %float %248 0
-        %251 = OpCompositeExtract %float %248 1
-        %252 = OpCompositeExtract %float %248 2
-        %253 = OpCompositeConstruct %v4float %250 %251 %252 %float_1
-               OpStore %x_GLF_color %253
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %254
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %258 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %259 = OpFunctionCall %void %main_1
-        %260 = OpLoad %v4float %x_GLF_color
-        %261 = OpCompositeConstruct %main_out %260
-               OpReturnValue %261
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %263 = OpLabel
-        %265 = OpLoad %v4float %gl_FragCoord_param_1
-        %264 = OpFunctionCall %main_out %main_inner %265
-        %266 = OpCompositeExtract %v4float %264 0
-               OpStore %x_GLF_color_1_1 %266
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.wgsl
deleted file mode 100644
index c2ad2e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite-phi/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,205 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec3<f32>;
-  var x_53 : f32;
-  var x_57 : f32;
-  var x_58 : f32;
-  var x_83 : f32;
-  var x_84 : f32;
-  var x_124 : f32;
-  var x_125 : f32;
-  var x_57_phi : f32;
-  var x_60_phi : i32;
-  var x_83_phi : f32;
-  var x_84_phi : f32;
-  var x_85_phi : bool;
-  var x_87_phi : f32;
-  var x_128_phi : f32;
-  var x_135_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_47 : f32 = x_7.resolution.x;
-  let x_48 : vec2<f32> = vec2<f32>(1.0, x_47);
-  let x_50 : f32 = round((x_47 * 0.125));
-  let x_51 : vec2<f32> = vec2<f32>(0.0, -0.5);
-  x_53 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_57_phi = -0.5;
-      x_60_phi = 1;
-      loop {
-        var x_70 : f32;
-        var x_78 : f32;
-        var x_61 : i32;
-        var x_58_phi : f32;
-        x_57 = x_57_phi;
-        let x_60 : i32 = x_60_phi;
-        x_83_phi = 0.0;
-        x_84_phi = x_57;
-        x_85_phi = false;
-        if ((x_60 < 800)) {
-        } else {
-          break;
-        }
-        var x_77 : f32;
-        var x_78_phi : f32;
-        if (((x_60 % 32) == 0)) {
-          x_70 = (x_57 + 0.400000006);
-          x_58_phi = x_70;
-        } else {
-          x_78_phi = x_57;
-          if (((f32(x_60) % round(x_50)) <= 0.01)) {
-            x_77 = (x_57 + 100.0);
-            x_78_phi = x_77;
-          }
-          x_78 = x_78_phi;
-          x_58_phi = x_78;
-        }
-        x_58 = x_58_phi;
-        if ((f32(x_60) >= x_53)) {
-          x_83_phi = x_58;
-          x_84_phi = x_58;
-          x_85_phi = true;
-          break;
-        }
-
-        continuing {
-          x_61 = (x_60 + 1);
-          x_57_phi = x_58;
-          x_60_phi = x_61;
-        }
-      }
-      x_83 = x_83_phi;
-      x_84 = x_84_phi;
-      let x_85 : bool = x_85_phi;
-      x_87_phi = x_83;
-      if (x_85) {
-        break;
-      }
-      x_87_phi = x_84;
-    }
-  }
-  var x_92 : f32;
-  var x_98 : f32;
-  var x_99 : f32;
-  var x_98_phi : f32;
-  var x_101_phi : i32;
-  var x_124_phi : f32;
-  var x_125_phi : f32;
-  var x_126_phi : bool;
-  let x_87 : f32 = x_87_phi;
-  let x_88 : ptr<function, f32> = &(c.x);
-  let x_89 : vec4<f32> = vec4<f32>(x_84, 0.400000006, x_83, 0.400000006);
-  *(x_88) = x_87;
-  x_92 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      let x_95 : vec4<f32> = vec4<f32>(x_51, 0.0, x_57);
-      let x_96 : f32 = vec3<f32>(x_48, -0.5).z;
-      x_98_phi = x_96;
-      x_101_phi = 1;
-      loop {
-        var x_111 : f32;
-        var x_119 : f32;
-        var x_102 : i32;
-        var x_99_phi : f32;
-        x_98 = x_98_phi;
-        let x_101 : i32 = x_101_phi;
-        x_124_phi = 0.0;
-        x_125_phi = x_98;
-        x_126_phi = false;
-        if ((x_101 < 800)) {
-        } else {
-          break;
-        }
-        var x_118 : f32;
-        var x_119_phi : f32;
-        if (((x_101 % 32) == 0)) {
-          x_111 = (x_98 + 0.400000006);
-          x_99_phi = x_111;
-        } else {
-          x_119_phi = x_98;
-          if (((f32(x_101) % round(x_50)) <= 0.01)) {
-            x_118 = (x_98 + 100.0);
-            x_119_phi = x_118;
-          }
-          x_119 = x_119_phi;
-          x_99_phi = x_119;
-        }
-        x_99 = x_99_phi;
-        if ((f32(x_101) >= x_92)) {
-          x_124_phi = x_99;
-          x_125_phi = x_99;
-          x_126_phi = true;
-          break;
-        }
-
-        continuing {
-          x_102 = (x_101 + 1);
-          x_98_phi = x_99;
-          x_101_phi = x_102;
-        }
-      }
-      x_124 = x_124_phi;
-      x_125 = x_125_phi;
-      let x_126 : bool = x_126_phi;
-      x_128_phi = x_124;
-      if (x_126) {
-        break;
-      }
-      x_128_phi = x_125;
-    }
-  }
-  let x_128 : f32 = x_128_phi;
-  let x_129 : ptr<function, f32> = &(c.y);
-  *(x_129) = x_128;
-  let x_130 : f32 = *(x_88);
-  let x_131 : f32 = *(x_129);
-  c.z = (x_130 + x_131);
-  x_135_phi = 0;
-  loop {
-    var x_136 : i32;
-    let x_135 : i32 = x_135_phi;
-    if ((x_135 < 3)) {
-    } else {
-      break;
-    }
-    let x_141 : ptr<function, f32> = &(c[x_135]);
-    let x_142 : f32 = *(x_141);
-    if ((x_142 >= 1.0)) {
-      let x_146 : f32 = *(x_141);
-      let x_147 : f32 = *(x_141);
-      *(x_141) = (x_146 * x_147);
-    }
-
-    continuing {
-      x_136 = (x_135 + 1);
-      x_135_phi = x_136;
-    }
-  }
-  let x_149 : vec3<f32> = c;
-  let x_151 : vec3<f32> = normalize(abs(x_149));
-  x_GLF_color = vec4<f32>(x_151.x, x_151.y, x_151.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.hlsl
deleted file mode 100644
index 8e5a341..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_66 = 0;
-  int x_66_phi = 0;
-  int x_69_phi = 0;
-  const float4 x_52 = gl_FragCoord;
-  const float2 x_55 = asfloat(x_6[0].xy);
-  const float2 x_56 = (float2(x_52.x, x_52.y) / x_55);
-  const int x_64 = (int((x_56.x * 10.0f)) + (int((x_56.y * 10.0f)) * 10));
-  x_66_phi = 100;
-  x_69_phi = 0;
-  while (true) {
-    int x_67 = 0;
-    int x_70 = 0;
-    x_66 = x_66_phi;
-    const int x_69 = x_69_phi;
-    if ((x_69 < x_64)) {
-    } else {
-      break;
-    }
-    {
-      x_67 = (((4 * asint(x_66)) * (1000 - asint(x_66))) / 1000);
-      x_70 = (x_69 + 1);
-      x_66_phi = x_67;
-      x_69_phi = x_70;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_78 = indexable[asint((x_66 % 16))];
-  x_GLF_color = x_78;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.msl
deleted file mode 100644
index 4bd1e3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.msl
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int x_66 = 0;
-  int x_66_phi = 0;
-  int x_69_phi = 0;
-  float4 const x_52 = *(tint_symbol_4);
-  float2 const x_55 = x_6.resolution;
-  float2 const x_56 = (float2(x_52.x, x_52.y) / x_55);
-  int const x_64 = as_type<int>((as_type<uint>(int((x_56.x * 10.0f))) + as_type<uint>(as_type<int>((as_type<uint>(int((x_56.y * 10.0f))) * as_type<uint>(10))))));
-  x_66_phi = 100;
-  x_69_phi = 0;
-  while (true) {
-    int x_67 = 0;
-    int x_70 = 0;
-    x_66 = x_66_phi;
-    int const x_69 = x_69_phi;
-    if ((x_69 < x_64)) {
-    } else {
-      break;
-    }
-    {
-      x_67 = (as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(as_type<int>(x_66))))) * as_type<uint>(as_type<int>((as_type<uint>(1000) - as_type<uint>(as_type<int>(x_66))))))) / 1000);
-      x_70 = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-      x_66_phi = x_67;
-      x_69_phi = x_70;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_78 = indexable.arr[as_type<int>((x_66 % 16))];
-  *(tint_symbol_5) = x_78;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.spvasm
deleted file mode 100644
index 790f08e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,180 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 118
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_66 "x_66"
-               OpName %x_66_phi "x_66_phi"
-               OpName %x_69_phi "x_69_phi"
-               OpName %x_67 "x_67"
-               OpName %x_70 "x_70"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_10 = OpConstant %float 10
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-   %int_1000 = OpConstant %int 1000
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %81 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %83 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %84 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %85 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %87 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %88 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %89 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %90 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %92 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %94 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-         %95 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-         %96 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %97 = OpConstantComposite %_arr_v4float_uint_16 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %105 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_66 = OpVariable %_ptr_Function_int Function %28
-   %x_66_phi = OpVariable %_ptr_Function_int Function %28
-   %x_69_phi = OpVariable %_ptr_Function_int Function %28
-       %x_67 = OpVariable %_ptr_Function_int Function %28
-       %x_70 = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %34 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %35 = OpLoad %v2float %34
-         %36 = OpCompositeExtract %float %31 0
-         %37 = OpCompositeExtract %float %31 1
-         %38 = OpCompositeConstruct %v2float %36 %37
-         %39 = OpFDiv %v2float %38 %35
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpFMul %float %41 %float_10
-         %40 = OpConvertFToS %int %43
-         %45 = OpCompositeExtract %float %39 1
-         %46 = OpFMul %float %45 %float_10
-         %44 = OpConvertFToS %int %46
-         %48 = OpIMul %int %44 %int_10
-         %49 = OpIAdd %int %40 %48
-               OpStore %x_66_phi %int_100
-               OpStore %x_69_phi %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %58 = OpLoad %int %x_66_phi
-               OpStore %x_66 %58
-         %59 = OpLoad %int %x_69_phi
-         %60 = OpSLessThan %bool %59 %49
-               OpSelectionMerge %62 None
-               OpBranchConditional %60 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %53
-         %62 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %67 = OpLoad %int %x_66
-         %66 = OpCopyObject %int %67
-         %68 = OpIMul %int %int_4 %66
-         %71 = OpLoad %int %x_66
-         %70 = OpCopyObject %int %71
-         %72 = OpISub %int %int_1000 %70
-         %73 = OpIMul %int %68 %72
-         %74 = OpSDiv %int %73 %int_1000
-               OpStore %x_67 %74
-         %76 = OpIAdd %int %59 %int_1
-               OpStore %x_70 %76
-         %77 = OpLoad %int %x_67
-               OpStore %x_66_phi %77
-         %78 = OpLoad %int %x_70
-               OpStore %x_69_phi %78
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %97
-         %99 = OpLoad %int %x_66
-        %101 = OpSMod %int %99 %int_16
-         %98 = OpCopyObject %int %101
-        %103 = OpAccessChain %_ptr_Function_v4float %indexable %98
-        %104 = OpLoad %v4float %103
-               OpStore %x_GLF_color %104
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %105
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %109 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %110 = OpFunctionCall %void %main_1
-        %111 = OpLoad %v4float %x_GLF_color
-        %112 = OpCompositeConstruct %main_out %111
-               OpReturnValue %112
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %114 = OpLabel
-        %116 = OpLoad %v4float %gl_FragCoord_param_1
-        %115 = OpFunctionCall %main_out %main_inner %116
-        %117 = OpCompositeExtract %v4float %115 0
-               OpStore %x_GLF_color_1_1 %117
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.wgsl
deleted file mode 100644
index 8d0080b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_66 : i32;
-  var x_66_phi : i32;
-  var x_69_phi : i32;
-  let x_52 : vec4<f32> = gl_FragCoord;
-  let x_55 : vec2<f32> = x_6.resolution;
-  let x_56 : vec2<f32> = (vec2<f32>(x_52.x, x_52.y) / x_55);
-  let x_64 : i32 = (i32((x_56.x * 10.0)) + (i32((x_56.y * 10.0)) * 10));
-  x_66_phi = 100;
-  x_69_phi = 0;
-  loop {
-    var x_67 : i32;
-    var x_70 : i32;
-    x_66 = x_66_phi;
-    let x_69 : i32 = x_69_phi;
-    if ((x_69 < x_64)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_67 = (((4 * bitcast<i32>(x_66)) * (1000 - bitcast<i32>(x_66))) / 1000);
-      x_70 = (x_69 + 1);
-      x_66_phi = x_67;
-      x_69_phi = x_70;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_78 : vec4<f32> = indexable[bitcast<i32>((x_66 % 16))];
-  x_GLF_color = x_78;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.hlsl
deleted file mode 100644
index 8e5a341..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,63 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_66 = 0;
-  int x_66_phi = 0;
-  int x_69_phi = 0;
-  const float4 x_52 = gl_FragCoord;
-  const float2 x_55 = asfloat(x_6[0].xy);
-  const float2 x_56 = (float2(x_52.x, x_52.y) / x_55);
-  const int x_64 = (int((x_56.x * 10.0f)) + (int((x_56.y * 10.0f)) * 10));
-  x_66_phi = 100;
-  x_69_phi = 0;
-  while (true) {
-    int x_67 = 0;
-    int x_70 = 0;
-    x_66 = x_66_phi;
-    const int x_69 = x_69_phi;
-    if ((x_69 < x_64)) {
-    } else {
-      break;
-    }
-    {
-      x_67 = (((4 * asint(x_66)) * (1000 - asint(x_66))) / 1000);
-      x_70 = (x_69 + 1);
-      x_66_phi = x_67;
-      x_69_phi = x_70;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_78 = indexable[asint((x_66 % 16))];
-  x_GLF_color = x_78;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.msl
deleted file mode 100644
index 4bd1e3f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.msl
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int x_66 = 0;
-  int x_66_phi = 0;
-  int x_69_phi = 0;
-  float4 const x_52 = *(tint_symbol_4);
-  float2 const x_55 = x_6.resolution;
-  float2 const x_56 = (float2(x_52.x, x_52.y) / x_55);
-  int const x_64 = as_type<int>((as_type<uint>(int((x_56.x * 10.0f))) + as_type<uint>(as_type<int>((as_type<uint>(int((x_56.y * 10.0f))) * as_type<uint>(10))))));
-  x_66_phi = 100;
-  x_69_phi = 0;
-  while (true) {
-    int x_67 = 0;
-    int x_70 = 0;
-    x_66 = x_66_phi;
-    int const x_69 = x_69_phi;
-    if ((x_69 < x_64)) {
-    } else {
-      break;
-    }
-    {
-      x_67 = (as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(as_type<int>(x_66))))) * as_type<uint>(as_type<int>((as_type<uint>(1000) - as_type<uint>(as_type<int>(x_66))))))) / 1000);
-      x_70 = as_type<int>((as_type<uint>(x_69) + as_type<uint>(1)));
-      x_66_phi = x_67;
-      x_69_phi = x_70;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_78 = indexable.arr[as_type<int>((x_66 % 16))];
-  *(tint_symbol_5) = x_78;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.spvasm
deleted file mode 100644
index 790f08e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,180 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 118
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_66 "x_66"
-               OpName %x_66_phi "x_66_phi"
-               OpName %x_69_phi "x_69_phi"
-               OpName %x_67 "x_67"
-               OpName %x_70 "x_70"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_10 = OpConstant %float 10
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-   %int_1000 = OpConstant %int 1000
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %81 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %83 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %84 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %85 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %87 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %88 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %89 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %90 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %92 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %94 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-         %95 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-         %96 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %97 = OpConstantComposite %_arr_v4float_uint_16 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %105 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_66 = OpVariable %_ptr_Function_int Function %28
-   %x_66_phi = OpVariable %_ptr_Function_int Function %28
-   %x_69_phi = OpVariable %_ptr_Function_int Function %28
-       %x_67 = OpVariable %_ptr_Function_int Function %28
-       %x_70 = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %34 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %35 = OpLoad %v2float %34
-         %36 = OpCompositeExtract %float %31 0
-         %37 = OpCompositeExtract %float %31 1
-         %38 = OpCompositeConstruct %v2float %36 %37
-         %39 = OpFDiv %v2float %38 %35
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpFMul %float %41 %float_10
-         %40 = OpConvertFToS %int %43
-         %45 = OpCompositeExtract %float %39 1
-         %46 = OpFMul %float %45 %float_10
-         %44 = OpConvertFToS %int %46
-         %48 = OpIMul %int %44 %int_10
-         %49 = OpIAdd %int %40 %48
-               OpStore %x_66_phi %int_100
-               OpStore %x_69_phi %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %58 = OpLoad %int %x_66_phi
-               OpStore %x_66 %58
-         %59 = OpLoad %int %x_69_phi
-         %60 = OpSLessThan %bool %59 %49
-               OpSelectionMerge %62 None
-               OpBranchConditional %60 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %53
-         %62 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %67 = OpLoad %int %x_66
-         %66 = OpCopyObject %int %67
-         %68 = OpIMul %int %int_4 %66
-         %71 = OpLoad %int %x_66
-         %70 = OpCopyObject %int %71
-         %72 = OpISub %int %int_1000 %70
-         %73 = OpIMul %int %68 %72
-         %74 = OpSDiv %int %73 %int_1000
-               OpStore %x_67 %74
-         %76 = OpIAdd %int %59 %int_1
-               OpStore %x_70 %76
-         %77 = OpLoad %int %x_67
-               OpStore %x_66_phi %77
-         %78 = OpLoad %int %x_70
-               OpStore %x_69_phi %78
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %97
-         %99 = OpLoad %int %x_66
-        %101 = OpSMod %int %99 %int_16
-         %98 = OpCopyObject %int %101
-        %103 = OpAccessChain %_ptr_Function_v4float %indexable %98
-        %104 = OpLoad %v4float %103
-               OpStore %x_GLF_color %104
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %105
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %109 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %110 = OpFunctionCall %void %main_1
-        %111 = OpLoad %v4float %x_GLF_color
-        %112 = OpCompositeConstruct %main_out %111
-               OpReturnValue %112
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %114 = OpLabel
-        %116 = OpLoad %v4float %gl_FragCoord_param_1
-        %115 = OpFunctionCall %main_out %main_inner %116
-        %117 = OpCompositeExtract %v4float %115 0
-               OpStore %x_GLF_color_1_1 %117
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.wgsl
deleted file mode 100644
index 8d0080b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_66 : i32;
-  var x_66_phi : i32;
-  var x_69_phi : i32;
-  let x_52 : vec4<f32> = gl_FragCoord;
-  let x_55 : vec2<f32> = x_6.resolution;
-  let x_56 : vec2<f32> = (vec2<f32>(x_52.x, x_52.y) / x_55);
-  let x_64 : i32 = (i32((x_56.x * 10.0)) + (i32((x_56.y * 10.0)) * 10));
-  x_66_phi = 100;
-  x_69_phi = 0;
-  loop {
-    var x_67 : i32;
-    var x_70 : i32;
-    x_66 = x_66_phi;
-    let x_69 : i32 = x_69_phi;
-    if ((x_69 < x_64)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_67 = (((4 * bitcast<i32>(x_66)) * (1000 - bitcast<i32>(x_66))) / 1000);
-      x_70 = (x_69 + 1);
-      x_66_phi = x_67;
-      x_69_phi = x_70;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_78 : vec4<f32> = indexable[bitcast<i32>((x_66 % 16))];
-  x_GLF_color = x_78;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.hlsl
deleted file mode 100644
index 0f0037f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_72 = 0;
-  int x_72_phi = 0;
-  int x_75_phi = 0;
-  const float4 x_54 = gl_FragCoord;
-  const float2 x_55 = float2(x_54.x, x_54.y);
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_59 = (x_55 / x_58);
-  const int x_70 = (int((x_59.x * float4(float4(0.0f, x_55, 0.5f).w, 10.0f, float2(0.0f, 0.0f)).y)) + (int((x_59.y * 10.0f)) * 10));
-  x_72_phi = 100;
-  x_75_phi = 0;
-  while (true) {
-    int x_73 = 0;
-    int x_76 = 0;
-    x_72 = x_72_phi;
-    const int x_75 = x_75_phi;
-    if ((x_75 < x_70)) {
-    } else {
-      break;
-    }
-    {
-      x_73 = (((4 * asint(x_72)) * (1000 - asint(x_72))) / 1000);
-      x_76 = (x_75 + 1);
-      x_72_phi = x_73;
-      x_75_phi = x_76;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_84 = indexable[asint((x_72 % 16))];
-  x_GLF_color = x_84;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.msl
deleted file mode 100644
index e021be1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int x_72 = 0;
-  int x_72_phi = 0;
-  int x_75_phi = 0;
-  float4 const x_54 = *(tint_symbol_4);
-  float2 const x_55 = float2(x_54.x, x_54.y);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_59 = (x_55 / x_58);
-  int const x_70 = as_type<int>((as_type<uint>(int((x_59.x * float4(float4(0.0f, x_55, 0.5f).w, 10.0f, float2(0.0f, 0.0f)).y))) + as_type<uint>(as_type<int>((as_type<uint>(int((x_59.y * 10.0f))) * as_type<uint>(10))))));
-  x_72_phi = 100;
-  x_75_phi = 0;
-  while (true) {
-    int x_73 = 0;
-    int x_76 = 0;
-    x_72 = x_72_phi;
-    int const x_75 = x_75_phi;
-    if ((x_75 < x_70)) {
-    } else {
-      break;
-    }
-    {
-      x_73 = (as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(as_type<int>(x_72))))) * as_type<uint>(as_type<int>((as_type<uint>(1000) - as_type<uint>(as_type<int>(x_72))))))) / 1000);
-      x_76 = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-      x_72_phi = x_73;
-      x_75_phi = x_76;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_84 = indexable.arr[as_type<int>((x_72 % 16))];
-  *(tint_symbol_5) = x_84;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.spvasm
deleted file mode 100644
index 7eb9d59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,189 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 127
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_72 "x_72"
-               OpName %x_72_phi "x_72_phi"
-               OpName %x_75_phi "x_75_phi"
-               OpName %x_73 "x_73"
-               OpName %x_76 "x_76"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_0 = OpConstant %float 0
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-         %49 = OpConstantComposite %v2float %float_0 %float_0
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-   %int_1000 = OpConstant %int 1000
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %91 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-         %92 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %94 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %95 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %96 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %97 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %98 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %99 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %100 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %101 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %102 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %103 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %104 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %105 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %106 = OpConstantComposite %_arr_v4float_uint_16 %91 %92 %93 %94 %95 %96 %97 %98 %91 %99 %100 %101 %102 %103 %104 %105
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %114 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_72 = OpVariable %_ptr_Function_int Function %28
-   %x_72_phi = OpVariable %_ptr_Function_int Function %28
-   %x_75_phi = OpVariable %_ptr_Function_int Function %28
-       %x_73 = OpVariable %_ptr_Function_int Function %28
-       %x_76 = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %32 = OpCompositeExtract %float %31 0
-         %33 = OpCompositeExtract %float %31 1
-         %34 = OpCompositeConstruct %v2float %32 %33
-         %37 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %38 = OpLoad %v2float %37
-         %39 = OpFDiv %v2float %34 %38
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpCompositeExtract %float %34 0
-         %44 = OpCompositeExtract %float %34 1
-         %46 = OpCompositeConstruct %v4float %float_0 %43 %44 %float_0_5
-         %47 = OpCompositeExtract %float %46 3
-         %50 = OpCompositeExtract %float %49 0
-         %51 = OpCompositeExtract %float %49 1
-         %52 = OpCompositeConstruct %v4float %47 %float_10 %50 %51
-         %53 = OpCompositeExtract %float %52 1
-         %54 = OpFMul %float %41 %53
-         %40 = OpConvertFToS %int %54
-         %56 = OpCompositeExtract %float %39 1
-         %57 = OpFMul %float %56 %float_10
-         %55 = OpConvertFToS %int %57
-         %59 = OpIMul %int %55 %int_10
-         %60 = OpIAdd %int %40 %59
-               OpStore %x_72_phi %int_100
-               OpStore %x_75_phi %int_0
-               OpBranch %63
-         %63 = OpLabel
-               OpLoopMerge %64 %65 None
-               OpBranch %66
-         %66 = OpLabel
-         %69 = OpLoad %int %x_72_phi
-               OpStore %x_72 %69
-         %70 = OpLoad %int %x_75_phi
-         %71 = OpSLessThan %bool %70 %60
-               OpSelectionMerge %73 None
-               OpBranchConditional %71 %74 %75
-         %74 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-               OpBranch %64
-         %73 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-         %78 = OpLoad %int %x_72
-         %77 = OpCopyObject %int %78
-         %79 = OpIMul %int %int_4 %77
-         %82 = OpLoad %int %x_72
-         %81 = OpCopyObject %int %82
-         %83 = OpISub %int %int_1000 %81
-         %84 = OpIMul %int %79 %83
-         %85 = OpSDiv %int %84 %int_1000
-               OpStore %x_73 %85
-         %87 = OpIAdd %int %70 %int_1
-               OpStore %x_76 %87
-         %88 = OpLoad %int %x_73
-               OpStore %x_72_phi %88
-         %89 = OpLoad %int %x_76
-               OpStore %x_75_phi %89
-               OpBranch %63
-         %64 = OpLabel
-               OpStore %indexable %106
-        %108 = OpLoad %int %x_72
-        %110 = OpSMod %int %108 %int_16
-        %107 = OpCopyObject %int %110
-        %112 = OpAccessChain %_ptr_Function_v4float %indexable %107
-        %113 = OpLoad %v4float %112
-               OpStore %x_GLF_color %113
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %114
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %118 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %119 = OpFunctionCall %void %main_1
-        %120 = OpLoad %v4float %x_GLF_color
-        %121 = OpCompositeConstruct %main_out %120
-               OpReturnValue %121
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %123 = OpLabel
-        %125 = OpLoad %v4float %gl_FragCoord_param_1
-        %124 = OpFunctionCall %main_out %main_inner %125
-        %126 = OpCompositeExtract %v4float %124 0
-               OpStore %x_GLF_color_1_1 %126
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.wgsl
deleted file mode 100644
index daa4973..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_72 : i32;
-  var x_72_phi : i32;
-  var x_75_phi : i32;
-  let x_54 : vec4<f32> = gl_FragCoord;
-  let x_55 : vec2<f32> = vec2<f32>(x_54.x, x_54.y);
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_59 : vec2<f32> = (x_55 / x_58);
-  let x_70 : i32 = (i32((x_59.x * vec4<f32>(vec4<f32>(0.0, x_55, 0.5).w, 10.0, vec2<f32>(0.0, 0.0)).y)) + (i32((x_59.y * 10.0)) * 10));
-  x_72_phi = 100;
-  x_75_phi = 0;
-  loop {
-    var x_73 : i32;
-    var x_76 : i32;
-    x_72 = x_72_phi;
-    let x_75 : i32 = x_75_phi;
-    if ((x_75 < x_70)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_73 = (((4 * bitcast<i32>(x_72)) * (1000 - bitcast<i32>(x_72))) / 1000);
-      x_76 = (x_75 + 1);
-      x_72_phi = x_73;
-      x_75_phi = x_76;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_84 : vec4<f32> = indexable[bitcast<i32>((x_72 % 16))];
-  x_GLF_color = x_84;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.hlsl
deleted file mode 100644
index 0f0037f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_72 = 0;
-  int x_72_phi = 0;
-  int x_75_phi = 0;
-  const float4 x_54 = gl_FragCoord;
-  const float2 x_55 = float2(x_54.x, x_54.y);
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_59 = (x_55 / x_58);
-  const int x_70 = (int((x_59.x * float4(float4(0.0f, x_55, 0.5f).w, 10.0f, float2(0.0f, 0.0f)).y)) + (int((x_59.y * 10.0f)) * 10));
-  x_72_phi = 100;
-  x_75_phi = 0;
-  while (true) {
-    int x_73 = 0;
-    int x_76 = 0;
-    x_72 = x_72_phi;
-    const int x_75 = x_75_phi;
-    if ((x_75 < x_70)) {
-    } else {
-      break;
-    }
-    {
-      x_73 = (((4 * asint(x_72)) * (1000 - asint(x_72))) / 1000);
-      x_76 = (x_75 + 1);
-      x_72_phi = x_73;
-      x_75_phi = x_76;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_84 = indexable[asint((x_72 % 16))];
-  x_GLF_color = x_84;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.msl
deleted file mode 100644
index e021be1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int x_72 = 0;
-  int x_72_phi = 0;
-  int x_75_phi = 0;
-  float4 const x_54 = *(tint_symbol_4);
-  float2 const x_55 = float2(x_54.x, x_54.y);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_59 = (x_55 / x_58);
-  int const x_70 = as_type<int>((as_type<uint>(int((x_59.x * float4(float4(0.0f, x_55, 0.5f).w, 10.0f, float2(0.0f, 0.0f)).y))) + as_type<uint>(as_type<int>((as_type<uint>(int((x_59.y * 10.0f))) * as_type<uint>(10))))));
-  x_72_phi = 100;
-  x_75_phi = 0;
-  while (true) {
-    int x_73 = 0;
-    int x_76 = 0;
-    x_72 = x_72_phi;
-    int const x_75 = x_75_phi;
-    if ((x_75 < x_70)) {
-    } else {
-      break;
-    }
-    {
-      x_73 = (as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(as_type<int>(x_72))))) * as_type<uint>(as_type<int>((as_type<uint>(1000) - as_type<uint>(as_type<int>(x_72))))))) / 1000);
-      x_76 = as_type<int>((as_type<uint>(x_75) + as_type<uint>(1)));
-      x_72_phi = x_73;
-      x_75_phi = x_76;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_84 = indexable.arr[as_type<int>((x_72 % 16))];
-  *(tint_symbol_5) = x_84;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.spvasm
deleted file mode 100644
index 7eb9d59..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,189 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 127
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_72 "x_72"
-               OpName %x_72_phi "x_72_phi"
-               OpName %x_75_phi "x_75_phi"
-               OpName %x_73 "x_73"
-               OpName %x_76 "x_76"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_0 = OpConstant %float 0
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-         %49 = OpConstantComposite %v2float %float_0 %float_0
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-   %int_1000 = OpConstant %int 1000
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-         %91 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-         %92 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %94 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %95 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %96 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %97 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %98 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %99 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %100 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %101 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %102 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %103 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %104 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %105 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %106 = OpConstantComposite %_arr_v4float_uint_16 %91 %92 %93 %94 %95 %96 %97 %98 %91 %99 %100 %101 %102 %103 %104 %105
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %114 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_72 = OpVariable %_ptr_Function_int Function %28
-   %x_72_phi = OpVariable %_ptr_Function_int Function %28
-   %x_75_phi = OpVariable %_ptr_Function_int Function %28
-       %x_73 = OpVariable %_ptr_Function_int Function %28
-       %x_76 = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %32 = OpCompositeExtract %float %31 0
-         %33 = OpCompositeExtract %float %31 1
-         %34 = OpCompositeConstruct %v2float %32 %33
-         %37 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %38 = OpLoad %v2float %37
-         %39 = OpFDiv %v2float %34 %38
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpCompositeExtract %float %34 0
-         %44 = OpCompositeExtract %float %34 1
-         %46 = OpCompositeConstruct %v4float %float_0 %43 %44 %float_0_5
-         %47 = OpCompositeExtract %float %46 3
-         %50 = OpCompositeExtract %float %49 0
-         %51 = OpCompositeExtract %float %49 1
-         %52 = OpCompositeConstruct %v4float %47 %float_10 %50 %51
-         %53 = OpCompositeExtract %float %52 1
-         %54 = OpFMul %float %41 %53
-         %40 = OpConvertFToS %int %54
-         %56 = OpCompositeExtract %float %39 1
-         %57 = OpFMul %float %56 %float_10
-         %55 = OpConvertFToS %int %57
-         %59 = OpIMul %int %55 %int_10
-         %60 = OpIAdd %int %40 %59
-               OpStore %x_72_phi %int_100
-               OpStore %x_75_phi %int_0
-               OpBranch %63
-         %63 = OpLabel
-               OpLoopMerge %64 %65 None
-               OpBranch %66
-         %66 = OpLabel
-         %69 = OpLoad %int %x_72_phi
-               OpStore %x_72 %69
-         %70 = OpLoad %int %x_75_phi
-         %71 = OpSLessThan %bool %70 %60
-               OpSelectionMerge %73 None
-               OpBranchConditional %71 %74 %75
-         %74 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-               OpBranch %64
-         %73 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-         %78 = OpLoad %int %x_72
-         %77 = OpCopyObject %int %78
-         %79 = OpIMul %int %int_4 %77
-         %82 = OpLoad %int %x_72
-         %81 = OpCopyObject %int %82
-         %83 = OpISub %int %int_1000 %81
-         %84 = OpIMul %int %79 %83
-         %85 = OpSDiv %int %84 %int_1000
-               OpStore %x_73 %85
-         %87 = OpIAdd %int %70 %int_1
-               OpStore %x_76 %87
-         %88 = OpLoad %int %x_73
-               OpStore %x_72_phi %88
-         %89 = OpLoad %int %x_76
-               OpStore %x_75_phi %89
-               OpBranch %63
-         %64 = OpLabel
-               OpStore %indexable %106
-        %108 = OpLoad %int %x_72
-        %110 = OpSMod %int %108 %int_16
-        %107 = OpCopyObject %int %110
-        %112 = OpAccessChain %_ptr_Function_v4float %indexable %107
-        %113 = OpLoad %v4float %112
-               OpStore %x_GLF_color %113
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %114
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %118 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %119 = OpFunctionCall %void %main_1
-        %120 = OpLoad %v4float %x_GLF_color
-        %121 = OpCompositeConstruct %main_out %120
-               OpReturnValue %121
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %123 = OpLabel
-        %125 = OpLoad %v4float %gl_FragCoord_param_1
-        %124 = OpFunctionCall %main_out %main_inner %125
-        %126 = OpCompositeExtract %v4float %124 0
-               OpStore %x_GLF_color_1_1 %126
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.wgsl
deleted file mode 100644
index daa4973..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_72 : i32;
-  var x_72_phi : i32;
-  var x_75_phi : i32;
-  let x_54 : vec4<f32> = gl_FragCoord;
-  let x_55 : vec2<f32> = vec2<f32>(x_54.x, x_54.y);
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_59 : vec2<f32> = (x_55 / x_58);
-  let x_70 : i32 = (i32((x_59.x * vec4<f32>(vec4<f32>(0.0, x_55, 0.5).w, 10.0, vec2<f32>(0.0, 0.0)).y)) + (i32((x_59.y * 10.0)) * 10));
-  x_72_phi = 100;
-  x_75_phi = 0;
-  loop {
-    var x_73 : i32;
-    var x_76 : i32;
-    x_72 = x_72_phi;
-    let x_75 : i32 = x_75_phi;
-    if ((x_75 < x_70)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_73 = (((4 * bitcast<i32>(x_72)) * (1000 - bitcast<i32>(x_72))) / 1000);
-      x_76 = (x_75 + 1);
-      x_72_phi = x_73;
-      x_75_phi = x_76;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_84 : vec4<f32> = indexable[bitcast<i32>((x_72 % 16))];
-  x_GLF_color = x_84;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.hlsl
deleted file mode 100644
index d1165c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,102 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_195[256] = (int[256])0;
-  int x_196[256] = (int[256])0;
-  int x_197[256] = (int[256])0;
-  int2 x_209 = int2(0, 0);
-  float4 x_241 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_243 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int2 x_213_phi = int2(0, 0);
-  float4 x_243_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_244_phi = false;
-  float4 x_246_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_198 = gl_FragCoord;
-  const float2 x_201 = asfloat(x_6[0].xy);
-  const float2 x_202 = (float2(x_198.x, x_198.y) / x_201);
-  x_209 = int2(int((x_202.x * 256.0f)), int((x_202.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_213_phi = x_209;
-      while (true) {
-        bool x_230 = false;
-        bool x_231_phi = false;
-        const int2 x_213 = x_213_phi;
-        const int x_216 = x_213.y;
-        x_243_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_244_phi = false;
-        if ((x_216 != 256)) {
-        } else {
-          break;
-        }
-        const int x_220 = x_213.x;
-        const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-        x_195 = tint_symbol_4;
-        const int x_222 = x_195[x_216];
-        const bool x_224 = (x_220 < (x_222 + 15));
-        x_231_phi = x_224;
-        if (x_224) {
-          const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_196 = tint_symbol_5;
-          const int x_228 = x_196[x_216];
-          x_230 = (x_220 > (x_228 - 15));
-          x_231_phi = x_230;
-        }
-        if (x_231_phi) {
-          const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_197 = tint_symbol_6;
-          const int x_235 = x_197[x_216];
-          const float x_240 = ((15.0f - abs(float((x_220 - x_235)))) * 0.06666667f);
-          x_241 = float4(x_240, x_240, x_240, 1.0f);
-          x_243_phi = x_241;
-          x_244_phi = true;
-          break;
-        }
-        int2 x_214_1 = x_213;
-        x_214_1.y = (x_216 + 1);
-        const int2 x_214 = x_214_1;
-        {
-          x_213_phi = x_214;
-        }
-      }
-      x_243 = x_243_phi;
-      const bool x_244 = x_244_phi;
-      x_246_phi = x_243;
-      if (x_244) {
-        break;
-      }
-      x_246_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  x_GLF_color = x_246_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.msl
deleted file mode 100644
index c4b46a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper x_195 = {};
-  tint_array_wrapper x_196 = {};
-  tint_array_wrapper x_197 = {};
-  int2 x_209 = 0;
-  float4 x_241 = 0.0f;
-  float4 x_243 = 0.0f;
-  int2 x_213_phi = 0;
-  float4 x_243_phi = 0.0f;
-  bool x_244_phi = false;
-  float4 x_246_phi = 0.0f;
-  float4 const x_198 = *(tint_symbol_6);
-  float2 const x_201 = x_6.resolution;
-  float2 const x_202 = (float2(x_198.x, x_198.y) / x_201);
-  x_209 = int2(int((x_202.x * 256.0f)), int((x_202.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_213_phi = x_209;
-      while (true) {
-        bool x_230 = false;
-        bool x_231_phi = false;
-        int2 const x_213 = x_213_phi;
-        int const x_216 = x_213.y;
-        x_243_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_244_phi = false;
-        if ((x_216 != 256)) {
-        } else {
-          break;
-        }
-        int const x_220 = x_213.x;
-        tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-        x_195 = tint_symbol_2;
-        int const x_222 = x_195.arr[x_216];
-        bool const x_224 = (x_220 < as_type<int>((as_type<uint>(x_222) + as_type<uint>(15))));
-        x_231_phi = x_224;
-        if (x_224) {
-          tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_196 = tint_symbol_3;
-          int const x_228 = x_196.arr[x_216];
-          x_230 = (x_220 > as_type<int>((as_type<uint>(x_228) - as_type<uint>(15))));
-          x_231_phi = x_230;
-        }
-        bool const x_231 = x_231_phi;
-        if (x_231) {
-          tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_197 = tint_symbol_4;
-          int const x_235 = x_197.arr[x_216];
-          float const x_240 = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_220) - as_type<uint>(x_235)))))) * 0.06666667f);
-          x_241 = float4(x_240, x_240, x_240, 1.0f);
-          x_243_phi = x_241;
-          x_244_phi = true;
-          break;
-        }
-        int2 x_214_1 = x_213;
-        x_214_1.y = as_type<int>((as_type<uint>(x_216) + as_type<uint>(1)));
-        int2 const x_214 = x_214_1;
-        {
-          x_213_phi = x_214;
-        }
-      }
-      x_243 = x_243_phi;
-      bool const x_244 = x_244_phi;
-      x_246_phi = x_243;
-      if (x_244) {
-        break;
-      }
-      x_246_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  float4 const x_246 = x_246_phi;
-  *(tint_symbol_7) = x_246;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.spvasm
deleted file mode 100644
index 574c745..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,384 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 292
-; Schema: 0
-               OpCapability Shader
-        %256 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_195 "x_195"
-               OpName %x_196 "x_196"
-               OpName %x_197 "x_197"
-               OpName %x_209 "x_209"
-               OpName %x_241 "x_241"
-               OpName %x_243 "x_243"
-               OpName %x_213_phi "x_213_phi"
-               OpName %x_243_phi "x_243_phi"
-               OpName %x_244_phi "x_244_phi"
-               OpName %x_246_phi "x_246_phi"
-               OpName %x_230 "x_230"
-               OpName %x_231_phi "x_231_phi"
-               OpName %x_214_1 "x_214_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %25 = OpConstantNull %_arr_int_uint_256
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-    %float_0 = OpConstant %float 0
-         %71 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-    %int_256 = OpConstant %int 256
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %236 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-%_ptr_Function_int = OpTypePointer Function %int
-   %float_15 = OpConstant %float 15
-%float_0_0666666701 = OpConstant %float 0.0666666701
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-        %277 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %279 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %x_195 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_196 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_197 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_209 = OpVariable %_ptr_Function_v2int Function %31
-      %x_241 = OpVariable %_ptr_Function_v4float Function %7
-      %x_243 = OpVariable %_ptr_Function_v4float Function %7
-  %x_213_phi = OpVariable %_ptr_Function_v2int Function %31
-  %x_243_phi = OpVariable %_ptr_Function_v4float Function %7
-  %x_244_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_246_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_230 = OpVariable %_ptr_Function_bool Function %40
-  %x_231_phi = OpVariable %_ptr_Function_bool Function %40
-    %x_214_1 = OpVariable %_ptr_Function_v2int Function %31
-         %42 = OpLoad %v4float %gl_FragCoord
-         %45 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %46 = OpLoad %v2float %45
-         %47 = OpCompositeExtract %float %42 0
-         %48 = OpCompositeExtract %float %42 1
-         %49 = OpCompositeConstruct %v2float %47 %48
-         %50 = OpFDiv %v2float %49 %46
-         %52 = OpCompositeExtract %float %50 0
-         %54 = OpFMul %float %52 %float_256
-         %51 = OpConvertFToS %int %54
-         %56 = OpCompositeExtract %float %50 1
-         %57 = OpFMul %float %56 %float_256
-         %55 = OpConvertFToS %int %57
-         %58 = OpCompositeConstruct %v2int %51 %55
-               OpStore %x_209 %58
-               OpSelectionMerge %59 None
-               OpSwitch %uint_0 %60
-         %60 = OpLabel
-         %61 = OpLoad %v2int %x_209
-               OpStore %x_213_phi %61
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %68 = OpLoad %v2int %x_213_phi
-         %69 = OpCompositeExtract %int %68 1
-               OpStore %x_243_phi %71
-               OpStore %x_244_phi %false
-         %74 = OpINotEqual %bool %69 %int_256
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %63
-         %75 = OpLabel
-         %78 = OpCompositeExtract %int %68 0
-               OpStore %x_195 %236
-        %238 = OpAccessChain %_ptr_Function_int %x_195 %69
-        %239 = OpLoad %int %238
-        %240 = OpIAdd %int %239 %int_15
-        %241 = OpSLessThan %bool %78 %240
-               OpStore %x_231_phi %241
-               OpSelectionMerge %242 None
-               OpBranchConditional %241 %243 %242
-        %243 = OpLabel
-               OpStore %x_196 %236
-        %244 = OpAccessChain %_ptr_Function_int %x_196 %69
-        %245 = OpLoad %int %244
-        %246 = OpISub %int %245 %int_15
-        %247 = OpSGreaterThan %bool %78 %246
-               OpStore %x_230 %247
-        %248 = OpLoad %bool %x_230
-               OpStore %x_231_phi %248
-               OpBranch %242
-        %242 = OpLabel
-        %249 = OpLoad %bool %x_231_phi
-               OpSelectionMerge %250 None
-               OpBranchConditional %249 %251 %250
-        %251 = OpLabel
-               OpStore %x_197 %236
-        %252 = OpAccessChain %_ptr_Function_int %x_197 %69
-        %253 = OpLoad %int %252
-        %258 = OpISub %int %78 %253
-        %257 = OpConvertSToF %float %258
-        %255 = OpExtInst %float %256 FAbs %257
-        %259 = OpFSub %float %float_15 %255
-        %261 = OpFMul %float %259 %float_0_0666666701
-        %263 = OpCompositeConstruct %v4float %261 %261 %261 %float_1
-               OpStore %x_241 %263
-        %264 = OpLoad %v4float %x_241
-               OpStore %x_243_phi %264
-               OpStore %x_244_phi %true
-               OpBranch %63
-        %250 = OpLabel
-               OpStore %x_214_1 %68
-        %268 = OpAccessChain %_ptr_Function_int %x_214_1 %uint_1
-        %270 = OpIAdd %int %69 %int_1
-               OpStore %268 %270
-        %271 = OpLoad %v2int %x_214_1
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %x_213_phi %271
-               OpBranch %62
-         %63 = OpLabel
-        %272 = OpLoad %v4float %x_243_phi
-               OpStore %x_243 %272
-        %273 = OpLoad %bool %x_244_phi
-        %274 = OpLoad %v4float %x_243
-               OpStore %x_246_phi %274
-               OpSelectionMerge %275 None
-               OpBranchConditional %273 %276 %275
-        %276 = OpLabel
-               OpBranch %59
-        %275 = OpLabel
-               OpStore %x_246_phi %277
-               OpBranch %59
-         %59 = OpLabel
-        %278 = OpLoad %v4float %x_246_phi
-               OpStore %x_GLF_color %278
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %279
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %283 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %284 = OpFunctionCall %void %main_1
-        %285 = OpLoad %v4float %x_GLF_color
-        %286 = OpCompositeConstruct %main_out %285
-               OpReturnValue %286
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %288 = OpLabel
-        %290 = OpLoad %v4float %gl_FragCoord_param_1
-        %289 = OpFunctionCall %main_out %main_inner %290
-        %291 = OpCompositeExtract %v4float %289 0
-               OpStore %x_GLF_color_1_1 %291
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.wgsl
deleted file mode 100644
index bdc7096..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,94 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_195 : array<i32, 256>;
-  var x_196 : array<i32, 256>;
-  var x_197 : array<i32, 256>;
-  var x_209 : vec2<i32>;
-  var x_241 : vec4<f32>;
-  var x_243 : vec4<f32>;
-  var x_213_phi : vec2<i32>;
-  var x_243_phi : vec4<f32>;
-  var x_244_phi : bool;
-  var x_246_phi : vec4<f32>;
-  let x_198 : vec4<f32> = gl_FragCoord;
-  let x_201 : vec2<f32> = x_6.resolution;
-  let x_202 : vec2<f32> = (vec2<f32>(x_198.x, x_198.y) / x_201);
-  x_209 = vec2<i32>(i32((x_202.x * 256.0)), i32((x_202.y * 256.0)));
-  switch(0u) {
-    default: {
-      x_213_phi = x_209;
-      loop {
-        var x_230 : bool;
-        var x_231_phi : bool;
-        let x_213 : vec2<i32> = x_213_phi;
-        let x_216 : i32 = x_213.y;
-        x_243_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_244_phi = false;
-        if ((x_216 != 256)) {
-        } else {
-          break;
-        }
-        let x_220 : i32 = x_213.x;
-        x_195 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        let x_222 : i32 = x_195[x_216];
-        let x_224 : bool = (x_220 < (x_222 + 15));
-        x_231_phi = x_224;
-        if (x_224) {
-          x_196 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_228 : i32 = x_196[x_216];
-          x_230 = (x_220 > (x_228 - 15));
-          x_231_phi = x_230;
-        }
-        let x_231 : bool = x_231_phi;
-        if (x_231) {
-          x_197 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_235 : i32 = x_197[x_216];
-          let x_240 : f32 = ((15.0 - abs(f32((x_220 - x_235)))) * 0.06666667);
-          x_241 = vec4<f32>(x_240, x_240, x_240, 1.0);
-          x_243_phi = x_241;
-          x_244_phi = true;
-          break;
-        }
-        var x_214_1 : vec2<i32> = x_213;
-        x_214_1.y = (x_216 + 1);
-        let x_214 : vec2<i32> = x_214_1;
-
-        continuing {
-          x_213_phi = x_214;
-        }
-      }
-      x_243 = x_243_phi;
-      let x_244 : bool = x_244_phi;
-      x_246_phi = x_243;
-      if (x_244) {
-        break;
-      }
-      x_246_phi = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-  }
-  let x_246 : vec4<f32> = x_246_phi;
-  x_GLF_color = x_246;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.hlsl
deleted file mode 100644
index d1165c5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,102 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_195[256] = (int[256])0;
-  int x_196[256] = (int[256])0;
-  int x_197[256] = (int[256])0;
-  int2 x_209 = int2(0, 0);
-  float4 x_241 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_243 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int2 x_213_phi = int2(0, 0);
-  float4 x_243_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_244_phi = false;
-  float4 x_246_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_198 = gl_FragCoord;
-  const float2 x_201 = asfloat(x_6[0].xy);
-  const float2 x_202 = (float2(x_198.x, x_198.y) / x_201);
-  x_209 = int2(int((x_202.x * 256.0f)), int((x_202.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_213_phi = x_209;
-      while (true) {
-        bool x_230 = false;
-        bool x_231_phi = false;
-        const int2 x_213 = x_213_phi;
-        const int x_216 = x_213.y;
-        x_243_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_244_phi = false;
-        if ((x_216 != 256)) {
-        } else {
-          break;
-        }
-        const int x_220 = x_213.x;
-        const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-        x_195 = tint_symbol_4;
-        const int x_222 = x_195[x_216];
-        const bool x_224 = (x_220 < (x_222 + 15));
-        x_231_phi = x_224;
-        if (x_224) {
-          const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_196 = tint_symbol_5;
-          const int x_228 = x_196[x_216];
-          x_230 = (x_220 > (x_228 - 15));
-          x_231_phi = x_230;
-        }
-        if (x_231_phi) {
-          const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_197 = tint_symbol_6;
-          const int x_235 = x_197[x_216];
-          const float x_240 = ((15.0f - abs(float((x_220 - x_235)))) * 0.06666667f);
-          x_241 = float4(x_240, x_240, x_240, 1.0f);
-          x_243_phi = x_241;
-          x_244_phi = true;
-          break;
-        }
-        int2 x_214_1 = x_213;
-        x_214_1.y = (x_216 + 1);
-        const int2 x_214 = x_214_1;
-        {
-          x_213_phi = x_214;
-        }
-      }
-      x_243 = x_243_phi;
-      const bool x_244 = x_244_phi;
-      x_246_phi = x_243;
-      if (x_244) {
-        break;
-      }
-      x_246_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  x_GLF_color = x_246_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.msl
deleted file mode 100644
index c4b46a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.msl
+++ /dev/null
@@ -1,107 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper x_195 = {};
-  tint_array_wrapper x_196 = {};
-  tint_array_wrapper x_197 = {};
-  int2 x_209 = 0;
-  float4 x_241 = 0.0f;
-  float4 x_243 = 0.0f;
-  int2 x_213_phi = 0;
-  float4 x_243_phi = 0.0f;
-  bool x_244_phi = false;
-  float4 x_246_phi = 0.0f;
-  float4 const x_198 = *(tint_symbol_6);
-  float2 const x_201 = x_6.resolution;
-  float2 const x_202 = (float2(x_198.x, x_198.y) / x_201);
-  x_209 = int2(int((x_202.x * 256.0f)), int((x_202.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_213_phi = x_209;
-      while (true) {
-        bool x_230 = false;
-        bool x_231_phi = false;
-        int2 const x_213 = x_213_phi;
-        int const x_216 = x_213.y;
-        x_243_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_244_phi = false;
-        if ((x_216 != 256)) {
-        } else {
-          break;
-        }
-        int const x_220 = x_213.x;
-        tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-        x_195 = tint_symbol_2;
-        int const x_222 = x_195.arr[x_216];
-        bool const x_224 = (x_220 < as_type<int>((as_type<uint>(x_222) + as_type<uint>(15))));
-        x_231_phi = x_224;
-        if (x_224) {
-          tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_196 = tint_symbol_3;
-          int const x_228 = x_196.arr[x_216];
-          x_230 = (x_220 > as_type<int>((as_type<uint>(x_228) - as_type<uint>(15))));
-          x_231_phi = x_230;
-        }
-        bool const x_231 = x_231_phi;
-        if (x_231) {
-          tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_197 = tint_symbol_4;
-          int const x_235 = x_197.arr[x_216];
-          float const x_240 = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_220) - as_type<uint>(x_235)))))) * 0.06666667f);
-          x_241 = float4(x_240, x_240, x_240, 1.0f);
-          x_243_phi = x_241;
-          x_244_phi = true;
-          break;
-        }
-        int2 x_214_1 = x_213;
-        x_214_1.y = as_type<int>((as_type<uint>(x_216) + as_type<uint>(1)));
-        int2 const x_214 = x_214_1;
-        {
-          x_213_phi = x_214;
-        }
-      }
-      x_243 = x_243_phi;
-      bool const x_244 = x_244_phi;
-      x_246_phi = x_243;
-      if (x_244) {
-        break;
-      }
-      x_246_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  float4 const x_246 = x_246_phi;
-  *(tint_symbol_7) = x_246;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.spvasm
deleted file mode 100644
index 574c745..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,384 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 292
-; Schema: 0
-               OpCapability Shader
-        %256 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_195 "x_195"
-               OpName %x_196 "x_196"
-               OpName %x_197 "x_197"
-               OpName %x_209 "x_209"
-               OpName %x_241 "x_241"
-               OpName %x_243 "x_243"
-               OpName %x_213_phi "x_213_phi"
-               OpName %x_243_phi "x_243_phi"
-               OpName %x_244_phi "x_244_phi"
-               OpName %x_246_phi "x_246_phi"
-               OpName %x_230 "x_230"
-               OpName %x_231_phi "x_231_phi"
-               OpName %x_214_1 "x_214_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %25 = OpConstantNull %_arr_int_uint_256
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-    %float_0 = OpConstant %float 0
-         %71 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-    %int_256 = OpConstant %int 256
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %236 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-%_ptr_Function_int = OpTypePointer Function %int
-   %float_15 = OpConstant %float 15
-%float_0_0666666701 = OpConstant %float 0.0666666701
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-        %277 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %279 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %x_195 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_196 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_197 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_209 = OpVariable %_ptr_Function_v2int Function %31
-      %x_241 = OpVariable %_ptr_Function_v4float Function %7
-      %x_243 = OpVariable %_ptr_Function_v4float Function %7
-  %x_213_phi = OpVariable %_ptr_Function_v2int Function %31
-  %x_243_phi = OpVariable %_ptr_Function_v4float Function %7
-  %x_244_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_246_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_230 = OpVariable %_ptr_Function_bool Function %40
-  %x_231_phi = OpVariable %_ptr_Function_bool Function %40
-    %x_214_1 = OpVariable %_ptr_Function_v2int Function %31
-         %42 = OpLoad %v4float %gl_FragCoord
-         %45 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %46 = OpLoad %v2float %45
-         %47 = OpCompositeExtract %float %42 0
-         %48 = OpCompositeExtract %float %42 1
-         %49 = OpCompositeConstruct %v2float %47 %48
-         %50 = OpFDiv %v2float %49 %46
-         %52 = OpCompositeExtract %float %50 0
-         %54 = OpFMul %float %52 %float_256
-         %51 = OpConvertFToS %int %54
-         %56 = OpCompositeExtract %float %50 1
-         %57 = OpFMul %float %56 %float_256
-         %55 = OpConvertFToS %int %57
-         %58 = OpCompositeConstruct %v2int %51 %55
-               OpStore %x_209 %58
-               OpSelectionMerge %59 None
-               OpSwitch %uint_0 %60
-         %60 = OpLabel
-         %61 = OpLoad %v2int %x_209
-               OpStore %x_213_phi %61
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %68 = OpLoad %v2int %x_213_phi
-         %69 = OpCompositeExtract %int %68 1
-               OpStore %x_243_phi %71
-               OpStore %x_244_phi %false
-         %74 = OpINotEqual %bool %69 %int_256
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %63
-         %75 = OpLabel
-         %78 = OpCompositeExtract %int %68 0
-               OpStore %x_195 %236
-        %238 = OpAccessChain %_ptr_Function_int %x_195 %69
-        %239 = OpLoad %int %238
-        %240 = OpIAdd %int %239 %int_15
-        %241 = OpSLessThan %bool %78 %240
-               OpStore %x_231_phi %241
-               OpSelectionMerge %242 None
-               OpBranchConditional %241 %243 %242
-        %243 = OpLabel
-               OpStore %x_196 %236
-        %244 = OpAccessChain %_ptr_Function_int %x_196 %69
-        %245 = OpLoad %int %244
-        %246 = OpISub %int %245 %int_15
-        %247 = OpSGreaterThan %bool %78 %246
-               OpStore %x_230 %247
-        %248 = OpLoad %bool %x_230
-               OpStore %x_231_phi %248
-               OpBranch %242
-        %242 = OpLabel
-        %249 = OpLoad %bool %x_231_phi
-               OpSelectionMerge %250 None
-               OpBranchConditional %249 %251 %250
-        %251 = OpLabel
-               OpStore %x_197 %236
-        %252 = OpAccessChain %_ptr_Function_int %x_197 %69
-        %253 = OpLoad %int %252
-        %258 = OpISub %int %78 %253
-        %257 = OpConvertSToF %float %258
-        %255 = OpExtInst %float %256 FAbs %257
-        %259 = OpFSub %float %float_15 %255
-        %261 = OpFMul %float %259 %float_0_0666666701
-        %263 = OpCompositeConstruct %v4float %261 %261 %261 %float_1
-               OpStore %x_241 %263
-        %264 = OpLoad %v4float %x_241
-               OpStore %x_243_phi %264
-               OpStore %x_244_phi %true
-               OpBranch %63
-        %250 = OpLabel
-               OpStore %x_214_1 %68
-        %268 = OpAccessChain %_ptr_Function_int %x_214_1 %uint_1
-        %270 = OpIAdd %int %69 %int_1
-               OpStore %268 %270
-        %271 = OpLoad %v2int %x_214_1
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %x_213_phi %271
-               OpBranch %62
-         %63 = OpLabel
-        %272 = OpLoad %v4float %x_243_phi
-               OpStore %x_243 %272
-        %273 = OpLoad %bool %x_244_phi
-        %274 = OpLoad %v4float %x_243
-               OpStore %x_246_phi %274
-               OpSelectionMerge %275 None
-               OpBranchConditional %273 %276 %275
-        %276 = OpLabel
-               OpBranch %59
-        %275 = OpLabel
-               OpStore %x_246_phi %277
-               OpBranch %59
-         %59 = OpLabel
-        %278 = OpLoad %v4float %x_246_phi
-               OpStore %x_GLF_color %278
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %279
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %283 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %284 = OpFunctionCall %void %main_1
-        %285 = OpLoad %v4float %x_GLF_color
-        %286 = OpCompositeConstruct %main_out %285
-               OpReturnValue %286
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %288 = OpLabel
-        %290 = OpLoad %v4float %gl_FragCoord_param_1
-        %289 = OpFunctionCall %main_out %main_inner %290
-        %291 = OpCompositeExtract %v4float %289 0
-               OpStore %x_GLF_color_1_1 %291
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.wgsl
deleted file mode 100644
index bdc7096..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,94 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_195 : array<i32, 256>;
-  var x_196 : array<i32, 256>;
-  var x_197 : array<i32, 256>;
-  var x_209 : vec2<i32>;
-  var x_241 : vec4<f32>;
-  var x_243 : vec4<f32>;
-  var x_213_phi : vec2<i32>;
-  var x_243_phi : vec4<f32>;
-  var x_244_phi : bool;
-  var x_246_phi : vec4<f32>;
-  let x_198 : vec4<f32> = gl_FragCoord;
-  let x_201 : vec2<f32> = x_6.resolution;
-  let x_202 : vec2<f32> = (vec2<f32>(x_198.x, x_198.y) / x_201);
-  x_209 = vec2<i32>(i32((x_202.x * 256.0)), i32((x_202.y * 256.0)));
-  switch(0u) {
-    default: {
-      x_213_phi = x_209;
-      loop {
-        var x_230 : bool;
-        var x_231_phi : bool;
-        let x_213 : vec2<i32> = x_213_phi;
-        let x_216 : i32 = x_213.y;
-        x_243_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_244_phi = false;
-        if ((x_216 != 256)) {
-        } else {
-          break;
-        }
-        let x_220 : i32 = x_213.x;
-        x_195 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        let x_222 : i32 = x_195[x_216];
-        let x_224 : bool = (x_220 < (x_222 + 15));
-        x_231_phi = x_224;
-        if (x_224) {
-          x_196 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_228 : i32 = x_196[x_216];
-          x_230 = (x_220 > (x_228 - 15));
-          x_231_phi = x_230;
-        }
-        let x_231 : bool = x_231_phi;
-        if (x_231) {
-          x_197 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_235 : i32 = x_197[x_216];
-          let x_240 : f32 = ((15.0 - abs(f32((x_220 - x_235)))) * 0.06666667);
-          x_241 = vec4<f32>(x_240, x_240, x_240, 1.0);
-          x_243_phi = x_241;
-          x_244_phi = true;
-          break;
-        }
-        var x_214_1 : vec2<i32> = x_213;
-        x_214_1.y = (x_216 + 1);
-        let x_214 : vec2<i32> = x_214_1;
-
-        continuing {
-          x_213_phi = x_214;
-        }
-      }
-      x_243 = x_243_phi;
-      let x_244 : bool = x_244_phi;
-      x_246_phi = x_243;
-      if (x_244) {
-        break;
-      }
-      x_246_phi = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-  }
-  let x_246 : vec4<f32> = x_246_phi;
-  x_GLF_color = x_246;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.hlsl
deleted file mode 100755
index e2eab22..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,112 +0,0 @@
-struct buf0 {
-  float2 resolution;
-};
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_195[256] = (int[256])0;
-  int x_196[256] = (int[256])0;
-  int x_197[256] = (int[256])0;
-  float2 x_208 = float2(0.0f, 0.0f);
-  int2 x_214 = int2(0, 0);
-  float4 x_249 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_251 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int2 x_218_phi = int2(0, 0);
-  float4 x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_252_phi = false;
-  float4 x_254_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_198 = gl_FragCoord;
-  const float2 x_201 = asfloat(x_6[0].xy);
-  const float2 x_202 = (float2(x_198.x, x_198.y) / x_201);
-  const int x_204 = -(82);
-  x_208 = float2(0.0f, float4(x_201, 15.0f, 15.0f).z);
-  const int x_209 = (120 - 0);
-  x_214 = int2(int((x_202.x * 256.0f)), int((x_202.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_218_phi = x_214;
-      while (true) {
-        bool x_235 = false;
-        bool x_236_phi = false;
-        const int2 x_218 = x_218_phi;
-        const int x_221 = x_218.y;
-        x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_252_phi = false;
-        if ((x_221 != 256)) {
-        } else {
-          break;
-        }
-        const int x_225 = x_218.x;
-        const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-        x_195 = tint_symbol_4;
-        const int x_227 = x_195[x_221];
-        const bool x_229 = (x_225 < (x_227 + 15));
-        x_236_phi = x_229;
-        if (x_229) {
-          const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_196 = tint_symbol_5;
-          const int x_233 = x_196[x_221];
-          x_235 = (x_225 > (x_233 - 15));
-          x_236_phi = x_235;
-        }
-        if (x_236_phi) {
-          const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_197 = tint_symbol_6;
-          const int x_240 = x_197[x_221];
-          const int x_244 = (91 + 244);
-          const buf0 tint_symbol_7 = {x_208};
-          const float x_248 = ((tint_symbol_7.resolution.y - abs(float((x_225 - x_240)))) * 0.06666667f);
-          x_249 = float4(x_248, x_248, x_248, 1.0f);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        int2 x_219_1 = x_218;
-        x_219_1.y = (x_221 + 1);
-        const int2 x_219 = x_219_1;
-        {
-          x_218_phi = x_219;
-        }
-      }
-      x_251 = x_251_phi;
-      const bool x_252 = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  x_GLF_color = x_254_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.msl
deleted file mode 100644
index d016030..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  tint_array_wrapper x_195 = {};
-  tint_array_wrapper x_196 = {};
-  tint_array_wrapper x_197 = {};
-  float2 x_208 = 0.0f;
-  int2 x_214 = 0;
-  float4 x_249 = 0.0f;
-  float4 x_251 = 0.0f;
-  int2 x_218_phi = 0;
-  float4 x_251_phi = 0.0f;
-  bool x_252_phi = false;
-  float4 x_254_phi = 0.0f;
-  float4 const x_198 = *(tint_symbol_7);
-  float2 const x_201 = x_6.resolution;
-  float2 const x_202 = (float2(x_198.x, x_198.y) / x_201);
-  int const x_204 = tint_unary_minus(82);
-  x_208 = float2(0.0f, float4(x_201, 15.0f, 15.0f).z);
-  int const x_209 = as_type<int>((as_type<uint>(120) - as_type<uint>(0)));
-  x_214 = int2(int((x_202.x * 256.0f)), int((x_202.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_218_phi = x_214;
-      while (true) {
-        bool x_235 = false;
-        bool x_236_phi = false;
-        int2 const x_218 = x_218_phi;
-        int const x_221 = x_218.y;
-        x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_252_phi = false;
-        if ((x_221 != 256)) {
-        } else {
-          break;
-        }
-        int const x_225 = x_218.x;
-        tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-        x_195 = tint_symbol_2;
-        int const x_227 = x_195.arr[x_221];
-        bool const x_229 = (x_225 < as_type<int>((as_type<uint>(x_227) + as_type<uint>(15))));
-        x_236_phi = x_229;
-        if (x_229) {
-          tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_196 = tint_symbol_3;
-          int const x_233 = x_196.arr[x_221];
-          x_235 = (x_225 > as_type<int>((as_type<uint>(x_233) - as_type<uint>(15))));
-          x_236_phi = x_235;
-        }
-        bool const x_236 = x_236_phi;
-        if (x_236) {
-          tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_197 = tint_symbol_4;
-          int const x_240 = x_197.arr[x_221];
-          int const x_244 = as_type<int>((as_type<uint>(91) + as_type<uint>(244)));
-          buf0 const tint_symbol_5 = {.resolution=x_208};
-          float const x_248 = ((tint_symbol_5.resolution.y - fabs(float(as_type<int>((as_type<uint>(x_225) - as_type<uint>(x_240)))))) * 0.06666667f);
-          x_249 = float4(x_248, x_248, x_248, 1.0f);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        int2 x_219_1 = x_218;
-        x_219_1.y = as_type<int>((as_type<uint>(x_221) + as_type<uint>(1)));
-        int2 const x_219 = x_219_1;
-        {
-          x_218_phi = x_219;
-        }
-      }
-      x_251 = x_251_phi;
-      bool const x_252 = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  float4 const x_254 = x_254_phi;
-  *(tint_symbol_8) = x_254;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.spvasm
deleted file mode 100644
index efa8c69..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,401 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 307
-; Schema: 0
-               OpCapability Shader
-        %271 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_195 "x_195"
-               OpName %x_196 "x_196"
-               OpName %x_197 "x_197"
-               OpName %x_208 "x_208"
-               OpName %x_214 "x_214"
-               OpName %x_249 "x_249"
-               OpName %x_251 "x_251"
-               OpName %x_218_phi "x_218_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_252_phi "x_252_phi"
-               OpName %x_254_phi "x_254_phi"
-               OpName %x_235 "x_235"
-               OpName %x_236_phi "x_236_phi"
-               OpName %x_219_1 "x_219_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %25 = OpConstantNull %_arr_int_uint_256
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %30 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %34 = OpConstantNull %v2int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %43 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-     %int_82 = OpConstant %int 82
-    %float_0 = OpConstant %float 0
-   %float_15 = OpConstant %float 15
-    %int_120 = OpConstant %int 120
-      %int_0 = OpConstant %int 0
-  %float_256 = OpConstant %float 256
-         %85 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-    %int_256 = OpConstant %int 256
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %247 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-%_ptr_Function_int = OpTypePointer Function %int
-%float_0_0666666701 = OpConstant %float 0.0666666701
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-        %292 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %294 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %x_195 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_196 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_197 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_208 = OpVariable %_ptr_Function_v2float Function %30
-      %x_214 = OpVariable %_ptr_Function_v2int Function %34
-      %x_249 = OpVariable %_ptr_Function_v4float Function %7
-      %x_251 = OpVariable %_ptr_Function_v4float Function %7
-  %x_218_phi = OpVariable %_ptr_Function_v2int Function %34
-  %x_251_phi = OpVariable %_ptr_Function_v4float Function %7
-  %x_252_phi = OpVariable %_ptr_Function_bool Function %43
-  %x_254_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_235 = OpVariable %_ptr_Function_bool Function %43
-  %x_236_phi = OpVariable %_ptr_Function_bool Function %43
-    %x_219_1 = OpVariable %_ptr_Function_v2int Function %34
-         %45 = OpLoad %v4float %gl_FragCoord
-         %48 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %49 = OpLoad %v2float %48
-         %50 = OpCompositeExtract %float %45 0
-         %51 = OpCompositeExtract %float %45 1
-         %52 = OpCompositeConstruct %v2float %50 %51
-         %53 = OpFDiv %v2float %52 %49
-         %54 = OpSNegate %int %int_82
-         %57 = OpCompositeExtract %float %49 0
-         %58 = OpCompositeExtract %float %49 1
-         %60 = OpCompositeConstruct %v4float %57 %58 %float_15 %float_15
-         %61 = OpCompositeExtract %float %60 2
-         %62 = OpCompositeConstruct %v2float %float_0 %61
-               OpStore %x_208 %62
-         %65 = OpISub %int %int_120 %int_0
-         %67 = OpCompositeExtract %float %53 0
-         %69 = OpFMul %float %67 %float_256
-         %66 = OpConvertFToS %int %69
-         %71 = OpCompositeExtract %float %53 1
-         %72 = OpFMul %float %71 %float_256
-         %70 = OpConvertFToS %int %72
-         %73 = OpCompositeConstruct %v2int %66 %70
-               OpStore %x_214 %73
-               OpSelectionMerge %74 None
-               OpSwitch %uint_0 %75
-         %75 = OpLabel
-         %76 = OpLoad %v2int %x_214
-               OpStore %x_218_phi %76
-               OpBranch %77
-         %77 = OpLabel
-               OpLoopMerge %78 %79 None
-               OpBranch %80
-         %80 = OpLabel
-         %83 = OpLoad %v2int %x_218_phi
-         %84 = OpCompositeExtract %int %83 1
-               OpStore %x_251_phi %85
-               OpStore %x_252_phi %false
-         %88 = OpINotEqual %bool %84 %int_256
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-               OpBranch %89
-         %91 = OpLabel
-               OpBranch %78
-         %89 = OpLabel
-         %92 = OpCompositeExtract %int %83 0
-               OpStore %x_195 %247
-        %249 = OpAccessChain %_ptr_Function_int %x_195 %84
-        %250 = OpLoad %int %249
-        %251 = OpIAdd %int %250 %int_15
-        %252 = OpSLessThan %bool %92 %251
-               OpStore %x_236_phi %252
-               OpSelectionMerge %253 None
-               OpBranchConditional %252 %254 %253
-        %254 = OpLabel
-               OpStore %x_196 %247
-        %255 = OpAccessChain %_ptr_Function_int %x_196 %84
-        %256 = OpLoad %int %255
-        %257 = OpISub %int %256 %int_15
-        %258 = OpSGreaterThan %bool %92 %257
-               OpStore %x_235 %258
-        %259 = OpLoad %bool %x_235
-               OpStore %x_236_phi %259
-               OpBranch %253
-        %253 = OpLabel
-        %260 = OpLoad %bool %x_236_phi
-               OpSelectionMerge %261 None
-               OpBranchConditional %260 %262 %261
-        %262 = OpLabel
-               OpStore %x_197 %247
-        %263 = OpAccessChain %_ptr_Function_int %x_197 %84
-        %264 = OpLoad %int %263
-        %265 = OpIAdd %int %int_91 %int_244
-        %266 = OpLoad %v2float %x_208
-        %267 = OpCompositeConstruct %buf0 %266
-        %268 = OpCompositeExtract %v2float %267 0
-        %269 = OpCompositeExtract %float %268 1
-        %273 = OpISub %int %92 %264
-        %272 = OpConvertSToF %float %273
-        %270 = OpExtInst %float %271 FAbs %272
-        %274 = OpFSub %float %269 %270
-        %276 = OpFMul %float %274 %float_0_0666666701
-        %278 = OpCompositeConstruct %v4float %276 %276 %276 %float_1
-               OpStore %x_249 %278
-        %279 = OpLoad %v4float %x_249
-               OpStore %x_251_phi %279
-               OpStore %x_252_phi %true
-               OpBranch %78
-        %261 = OpLabel
-               OpStore %x_219_1 %83
-        %283 = OpAccessChain %_ptr_Function_int %x_219_1 %uint_1
-        %285 = OpIAdd %int %84 %int_1
-               OpStore %283 %285
-        %286 = OpLoad %v2int %x_219_1
-               OpBranch %79
-         %79 = OpLabel
-               OpStore %x_218_phi %286
-               OpBranch %77
-         %78 = OpLabel
-        %287 = OpLoad %v4float %x_251_phi
-               OpStore %x_251 %287
-        %288 = OpLoad %bool %x_252_phi
-        %289 = OpLoad %v4float %x_251
-               OpStore %x_254_phi %289
-               OpSelectionMerge %290 None
-               OpBranchConditional %288 %291 %290
-        %291 = OpLabel
-               OpBranch %74
-        %290 = OpLabel
-               OpStore %x_254_phi %292
-               OpBranch %74
-         %74 = OpLabel
-        %293 = OpLoad %v4float %x_254_phi
-               OpStore %x_GLF_color %293
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %294
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %298 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %299 = OpFunctionCall %void %main_1
-        %300 = OpLoad %v4float %x_GLF_color
-        %301 = OpCompositeConstruct %main_out %300
-               OpReturnValue %301
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %303 = OpLabel
-        %305 = OpLoad %v4float %gl_FragCoord_param_1
-        %304 = OpFunctionCall %main_out %main_inner %305
-        %306 = OpCompositeExtract %v4float %304 0
-               OpStore %x_GLF_color_1_1 %306
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.wgsl
deleted file mode 100644
index a8a9633..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_195 : array<i32, 256>;
-  var x_196 : array<i32, 256>;
-  var x_197 : array<i32, 256>;
-  var x_208 : vec2<f32>;
-  var x_214 : vec2<i32>;
-  var x_249 : vec4<f32>;
-  var x_251 : vec4<f32>;
-  var x_218_phi : vec2<i32>;
-  var x_251_phi : vec4<f32>;
-  var x_252_phi : bool;
-  var x_254_phi : vec4<f32>;
-  let x_198 : vec4<f32> = gl_FragCoord;
-  let x_201 : vec2<f32> = x_6.resolution;
-  let x_202 : vec2<f32> = (vec2<f32>(x_198.x, x_198.y) / x_201);
-  let x_204 : i32 = -(82);
-  x_208 = vec2<f32>(0.0, vec4<f32>(x_201, 15.0, 15.0).z);
-  let x_209 : i32 = (120 - 0);
-  x_214 = vec2<i32>(i32((x_202.x * 256.0)), i32((x_202.y * 256.0)));
-  switch(0u) {
-    default: {
-      x_218_phi = x_214;
-      loop {
-        var x_235 : bool;
-        var x_236_phi : bool;
-        let x_218 : vec2<i32> = x_218_phi;
-        let x_221 : i32 = x_218.y;
-        x_251_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_252_phi = false;
-        if ((x_221 != 256)) {
-        } else {
-          break;
-        }
-        let x_225 : i32 = x_218.x;
-        x_195 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        let x_227 : i32 = x_195[x_221];
-        let x_229 : bool = (x_225 < (x_227 + 15));
-        x_236_phi = x_229;
-        if (x_229) {
-          x_196 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_233 : i32 = x_196[x_221];
-          x_235 = (x_225 > (x_233 - 15));
-          x_236_phi = x_235;
-        }
-        let x_236 : bool = x_236_phi;
-        if (x_236) {
-          x_197 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_240 : i32 = x_197[x_221];
-          let x_244 : i32 = (91 + 244);
-          let x_248 : f32 = ((buf0(x_208).resolution.y - abs(f32((x_225 - x_240)))) * 0.06666667);
-          x_249 = vec4<f32>(x_248, x_248, x_248, 1.0);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        var x_219_1 : vec2<i32> = x_218;
-        x_219_1.y = (x_221 + 1);
-        let x_219 : vec2<i32> = x_219_1;
-
-        continuing {
-          x_218_phi = x_219;
-        }
-      }
-      x_251 = x_251_phi;
-      let x_252 : bool = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-  }
-  let x_254 : vec4<f32> = x_254_phi;
-  x_GLF_color = x_254;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.hlsl
deleted file mode 100644
index e2eab22..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,112 +0,0 @@
-struct buf0 {
-  float2 resolution;
-};
-
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_195[256] = (int[256])0;
-  int x_196[256] = (int[256])0;
-  int x_197[256] = (int[256])0;
-  float2 x_208 = float2(0.0f, 0.0f);
-  int2 x_214 = int2(0, 0);
-  float4 x_249 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_251 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int2 x_218_phi = int2(0, 0);
-  float4 x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_252_phi = false;
-  float4 x_254_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_198 = gl_FragCoord;
-  const float2 x_201 = asfloat(x_6[0].xy);
-  const float2 x_202 = (float2(x_198.x, x_198.y) / x_201);
-  const int x_204 = -(82);
-  x_208 = float2(0.0f, float4(x_201, 15.0f, 15.0f).z);
-  const int x_209 = (120 - 0);
-  x_214 = int2(int((x_202.x * 256.0f)), int((x_202.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_218_phi = x_214;
-      while (true) {
-        bool x_235 = false;
-        bool x_236_phi = false;
-        const int2 x_218 = x_218_phi;
-        const int x_221 = x_218.y;
-        x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_252_phi = false;
-        if ((x_221 != 256)) {
-        } else {
-          break;
-        }
-        const int x_225 = x_218.x;
-        const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-        x_195 = tint_symbol_4;
-        const int x_227 = x_195[x_221];
-        const bool x_229 = (x_225 < (x_227 + 15));
-        x_236_phi = x_229;
-        if (x_229) {
-          const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_196 = tint_symbol_5;
-          const int x_233 = x_196[x_221];
-          x_235 = (x_225 > (x_233 - 15));
-          x_236_phi = x_235;
-        }
-        if (x_236_phi) {
-          const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_197 = tint_symbol_6;
-          const int x_240 = x_197[x_221];
-          const int x_244 = (91 + 244);
-          const buf0 tint_symbol_7 = {x_208};
-          const float x_248 = ((tint_symbol_7.resolution.y - abs(float((x_225 - x_240)))) * 0.06666667f);
-          x_249 = float4(x_248, x_248, x_248, 1.0f);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        int2 x_219_1 = x_218;
-        x_219_1.y = (x_221 + 1);
-        const int2 x_219 = x_219_1;
-        {
-          x_218_phi = x_219;
-        }
-      }
-      x_251 = x_251_phi;
-      const bool x_252 = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  x_GLF_color = x_254_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.msl
deleted file mode 100644
index d016030..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.msl
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  tint_array_wrapper x_195 = {};
-  tint_array_wrapper x_196 = {};
-  tint_array_wrapper x_197 = {};
-  float2 x_208 = 0.0f;
-  int2 x_214 = 0;
-  float4 x_249 = 0.0f;
-  float4 x_251 = 0.0f;
-  int2 x_218_phi = 0;
-  float4 x_251_phi = 0.0f;
-  bool x_252_phi = false;
-  float4 x_254_phi = 0.0f;
-  float4 const x_198 = *(tint_symbol_7);
-  float2 const x_201 = x_6.resolution;
-  float2 const x_202 = (float2(x_198.x, x_198.y) / x_201);
-  int const x_204 = tint_unary_minus(82);
-  x_208 = float2(0.0f, float4(x_201, 15.0f, 15.0f).z);
-  int const x_209 = as_type<int>((as_type<uint>(120) - as_type<uint>(0)));
-  x_214 = int2(int((x_202.x * 256.0f)), int((x_202.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_218_phi = x_214;
-      while (true) {
-        bool x_235 = false;
-        bool x_236_phi = false;
-        int2 const x_218 = x_218_phi;
-        int const x_221 = x_218.y;
-        x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_252_phi = false;
-        if ((x_221 != 256)) {
-        } else {
-          break;
-        }
-        int const x_225 = x_218.x;
-        tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-        x_195 = tint_symbol_2;
-        int const x_227 = x_195.arr[x_221];
-        bool const x_229 = (x_225 < as_type<int>((as_type<uint>(x_227) + as_type<uint>(15))));
-        x_236_phi = x_229;
-        if (x_229) {
-          tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_196 = tint_symbol_3;
-          int const x_233 = x_196.arr[x_221];
-          x_235 = (x_225 > as_type<int>((as_type<uint>(x_233) - as_type<uint>(15))));
-          x_236_phi = x_235;
-        }
-        bool const x_236 = x_236_phi;
-        if (x_236) {
-          tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_197 = tint_symbol_4;
-          int const x_240 = x_197.arr[x_221];
-          int const x_244 = as_type<int>((as_type<uint>(91) + as_type<uint>(244)));
-          buf0 const tint_symbol_5 = {.resolution=x_208};
-          float const x_248 = ((tint_symbol_5.resolution.y - fabs(float(as_type<int>((as_type<uint>(x_225) - as_type<uint>(x_240)))))) * 0.06666667f);
-          x_249 = float4(x_248, x_248, x_248, 1.0f);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        int2 x_219_1 = x_218;
-        x_219_1.y = as_type<int>((as_type<uint>(x_221) + as_type<uint>(1)));
-        int2 const x_219 = x_219_1;
-        {
-          x_218_phi = x_219;
-        }
-      }
-      x_251 = x_251_phi;
-      bool const x_252 = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  float4 const x_254 = x_254_phi;
-  *(tint_symbol_8) = x_254;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.spvasm
deleted file mode 100644
index efa8c69..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,401 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 307
-; Schema: 0
-               OpCapability Shader
-        %271 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_195 "x_195"
-               OpName %x_196 "x_196"
-               OpName %x_197 "x_197"
-               OpName %x_208 "x_208"
-               OpName %x_214 "x_214"
-               OpName %x_249 "x_249"
-               OpName %x_251 "x_251"
-               OpName %x_218_phi "x_218_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_252_phi "x_252_phi"
-               OpName %x_254_phi "x_254_phi"
-               OpName %x_235 "x_235"
-               OpName %x_236_phi "x_236_phi"
-               OpName %x_219_1 "x_219_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %25 = OpConstantNull %_arr_int_uint_256
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %30 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %34 = OpConstantNull %v2int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %43 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-     %int_82 = OpConstant %int 82
-    %float_0 = OpConstant %float 0
-   %float_15 = OpConstant %float 15
-    %int_120 = OpConstant %int 120
-      %int_0 = OpConstant %int 0
-  %float_256 = OpConstant %float 256
-         %85 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-    %int_256 = OpConstant %int 256
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %247 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-%_ptr_Function_int = OpTypePointer Function %int
-%float_0_0666666701 = OpConstant %float 0.0666666701
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-        %292 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %294 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %x_195 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_196 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_197 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_208 = OpVariable %_ptr_Function_v2float Function %30
-      %x_214 = OpVariable %_ptr_Function_v2int Function %34
-      %x_249 = OpVariable %_ptr_Function_v4float Function %7
-      %x_251 = OpVariable %_ptr_Function_v4float Function %7
-  %x_218_phi = OpVariable %_ptr_Function_v2int Function %34
-  %x_251_phi = OpVariable %_ptr_Function_v4float Function %7
-  %x_252_phi = OpVariable %_ptr_Function_bool Function %43
-  %x_254_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_235 = OpVariable %_ptr_Function_bool Function %43
-  %x_236_phi = OpVariable %_ptr_Function_bool Function %43
-    %x_219_1 = OpVariable %_ptr_Function_v2int Function %34
-         %45 = OpLoad %v4float %gl_FragCoord
-         %48 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %49 = OpLoad %v2float %48
-         %50 = OpCompositeExtract %float %45 0
-         %51 = OpCompositeExtract %float %45 1
-         %52 = OpCompositeConstruct %v2float %50 %51
-         %53 = OpFDiv %v2float %52 %49
-         %54 = OpSNegate %int %int_82
-         %57 = OpCompositeExtract %float %49 0
-         %58 = OpCompositeExtract %float %49 1
-         %60 = OpCompositeConstruct %v4float %57 %58 %float_15 %float_15
-         %61 = OpCompositeExtract %float %60 2
-         %62 = OpCompositeConstruct %v2float %float_0 %61
-               OpStore %x_208 %62
-         %65 = OpISub %int %int_120 %int_0
-         %67 = OpCompositeExtract %float %53 0
-         %69 = OpFMul %float %67 %float_256
-         %66 = OpConvertFToS %int %69
-         %71 = OpCompositeExtract %float %53 1
-         %72 = OpFMul %float %71 %float_256
-         %70 = OpConvertFToS %int %72
-         %73 = OpCompositeConstruct %v2int %66 %70
-               OpStore %x_214 %73
-               OpSelectionMerge %74 None
-               OpSwitch %uint_0 %75
-         %75 = OpLabel
-         %76 = OpLoad %v2int %x_214
-               OpStore %x_218_phi %76
-               OpBranch %77
-         %77 = OpLabel
-               OpLoopMerge %78 %79 None
-               OpBranch %80
-         %80 = OpLabel
-         %83 = OpLoad %v2int %x_218_phi
-         %84 = OpCompositeExtract %int %83 1
-               OpStore %x_251_phi %85
-               OpStore %x_252_phi %false
-         %88 = OpINotEqual %bool %84 %int_256
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-               OpBranch %89
-         %91 = OpLabel
-               OpBranch %78
-         %89 = OpLabel
-         %92 = OpCompositeExtract %int %83 0
-               OpStore %x_195 %247
-        %249 = OpAccessChain %_ptr_Function_int %x_195 %84
-        %250 = OpLoad %int %249
-        %251 = OpIAdd %int %250 %int_15
-        %252 = OpSLessThan %bool %92 %251
-               OpStore %x_236_phi %252
-               OpSelectionMerge %253 None
-               OpBranchConditional %252 %254 %253
-        %254 = OpLabel
-               OpStore %x_196 %247
-        %255 = OpAccessChain %_ptr_Function_int %x_196 %84
-        %256 = OpLoad %int %255
-        %257 = OpISub %int %256 %int_15
-        %258 = OpSGreaterThan %bool %92 %257
-               OpStore %x_235 %258
-        %259 = OpLoad %bool %x_235
-               OpStore %x_236_phi %259
-               OpBranch %253
-        %253 = OpLabel
-        %260 = OpLoad %bool %x_236_phi
-               OpSelectionMerge %261 None
-               OpBranchConditional %260 %262 %261
-        %262 = OpLabel
-               OpStore %x_197 %247
-        %263 = OpAccessChain %_ptr_Function_int %x_197 %84
-        %264 = OpLoad %int %263
-        %265 = OpIAdd %int %int_91 %int_244
-        %266 = OpLoad %v2float %x_208
-        %267 = OpCompositeConstruct %buf0 %266
-        %268 = OpCompositeExtract %v2float %267 0
-        %269 = OpCompositeExtract %float %268 1
-        %273 = OpISub %int %92 %264
-        %272 = OpConvertSToF %float %273
-        %270 = OpExtInst %float %271 FAbs %272
-        %274 = OpFSub %float %269 %270
-        %276 = OpFMul %float %274 %float_0_0666666701
-        %278 = OpCompositeConstruct %v4float %276 %276 %276 %float_1
-               OpStore %x_249 %278
-        %279 = OpLoad %v4float %x_249
-               OpStore %x_251_phi %279
-               OpStore %x_252_phi %true
-               OpBranch %78
-        %261 = OpLabel
-               OpStore %x_219_1 %83
-        %283 = OpAccessChain %_ptr_Function_int %x_219_1 %uint_1
-        %285 = OpIAdd %int %84 %int_1
-               OpStore %283 %285
-        %286 = OpLoad %v2int %x_219_1
-               OpBranch %79
-         %79 = OpLabel
-               OpStore %x_218_phi %286
-               OpBranch %77
-         %78 = OpLabel
-        %287 = OpLoad %v4float %x_251_phi
-               OpStore %x_251 %287
-        %288 = OpLoad %bool %x_252_phi
-        %289 = OpLoad %v4float %x_251
-               OpStore %x_254_phi %289
-               OpSelectionMerge %290 None
-               OpBranchConditional %288 %291 %290
-        %291 = OpLabel
-               OpBranch %74
-        %290 = OpLabel
-               OpStore %x_254_phi %292
-               OpBranch %74
-         %74 = OpLabel
-        %293 = OpLoad %v4float %x_254_phi
-               OpStore %x_GLF_color %293
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %294
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %298 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %299 = OpFunctionCall %void %main_1
-        %300 = OpLoad %v4float %x_GLF_color
-        %301 = OpCompositeConstruct %main_out %300
-               OpReturnValue %301
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %303 = OpLabel
-        %305 = OpLoad %v4float %gl_FragCoord_param_1
-        %304 = OpFunctionCall %main_out %main_inner %305
-        %306 = OpCompositeExtract %v4float %304 0
-               OpStore %x_GLF_color_1_1 %306
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.wgsl
deleted file mode 100644
index a8a9633..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-composites/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_195 : array<i32, 256>;
-  var x_196 : array<i32, 256>;
-  var x_197 : array<i32, 256>;
-  var x_208 : vec2<f32>;
-  var x_214 : vec2<i32>;
-  var x_249 : vec4<f32>;
-  var x_251 : vec4<f32>;
-  var x_218_phi : vec2<i32>;
-  var x_251_phi : vec4<f32>;
-  var x_252_phi : bool;
-  var x_254_phi : vec4<f32>;
-  let x_198 : vec4<f32> = gl_FragCoord;
-  let x_201 : vec2<f32> = x_6.resolution;
-  let x_202 : vec2<f32> = (vec2<f32>(x_198.x, x_198.y) / x_201);
-  let x_204 : i32 = -(82);
-  x_208 = vec2<f32>(0.0, vec4<f32>(x_201, 15.0, 15.0).z);
-  let x_209 : i32 = (120 - 0);
-  x_214 = vec2<i32>(i32((x_202.x * 256.0)), i32((x_202.y * 256.0)));
-  switch(0u) {
-    default: {
-      x_218_phi = x_214;
-      loop {
-        var x_235 : bool;
-        var x_236_phi : bool;
-        let x_218 : vec2<i32> = x_218_phi;
-        let x_221 : i32 = x_218.y;
-        x_251_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_252_phi = false;
-        if ((x_221 != 256)) {
-        } else {
-          break;
-        }
-        let x_225 : i32 = x_218.x;
-        x_195 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        let x_227 : i32 = x_195[x_221];
-        let x_229 : bool = (x_225 < (x_227 + 15));
-        x_236_phi = x_229;
-        if (x_229) {
-          x_196 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_233 : i32 = x_196[x_221];
-          x_235 = (x_225 > (x_233 - 15));
-          x_236_phi = x_235;
-        }
-        let x_236 : bool = x_236_phi;
-        if (x_236) {
-          x_197 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_240 : i32 = x_197[x_221];
-          let x_244 : i32 = (91 + 244);
-          let x_248 : f32 = ((buf0(x_208).resolution.y - abs(f32((x_225 - x_240)))) * 0.06666667);
-          x_249 = vec4<f32>(x_248, x_248, x_248, 1.0);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        var x_219_1 : vec2<i32> = x_218;
-        x_219_1.y = (x_221 + 1);
-        let x_219 : vec2<i32> = x_219_1;
-
-        continuing {
-          x_218_phi = x_219;
-        }
-      }
-      x_251 = x_251_phi;
-      let x_252 : bool = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-  }
-  let x_254 : vec4<f32> = x_254_phi;
-  x_GLF_color = x_254;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.hlsl
deleted file mode 100644
index bf9483e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,314 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static int map[256] = (int[256])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float2x4 x_60 = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int i = 0;
-  int2 p = int2(0, 0);
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  const float4 x_63 = gl_FragCoord;
-  const float2 x_67 = asfloat(x_7[0].xy);
-  const int x_68 = -((256 - 14));
-  pos = (float2(x_63.x, x_63.y) / x_67);
-  const float x_71 = pos.x;
-  const float x_75 = pos.y;
-  ipos = int2(int((x_71 * 16.0f)), int((x_75 * 16.0f)));
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      map[i] = 0;
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_110 = false;
-    bool x_130 = false;
-    bool x_150 = false;
-    bool x_171 = false;
-    bool x_111_phi = false;
-    bool x_131_phi = false;
-    bool x_151_phi = false;
-    bool x_172_phi = false;
-    v = (v + 1);
-    directions = 0;
-    const int x_97 = p.x;
-    const bool x_98 = (x_97 > 0);
-    x_111_phi = x_98;
-    if (x_98) {
-      const int x_102 = p.x;
-      const int x_105 = p.y;
-      const int x_109 = map[((x_102 - 2) + (x_105 * 16))];
-      x_110 = (x_109 == 0);
-      x_111_phi = x_110;
-    }
-    if (x_111_phi) {
-      directions = (directions + 1);
-    }
-    const int x_117 = p.y;
-    const bool x_118 = (x_117 > 0);
-    x_131_phi = x_118;
-    if (x_118) {
-      const int x_122 = p.x;
-      const int x_124 = p.y;
-      const int x_129 = map[(x_122 + ((x_124 - 2) * 16))];
-      x_130 = (x_129 == 0);
-      x_131_phi = x_130;
-    }
-    if (x_131_phi) {
-      directions = (directions + 1);
-    }
-    const int x_137 = p.x;
-    const bool x_138 = (x_137 < 14);
-    x_151_phi = x_138;
-    if (x_138) {
-      const int x_142 = p.x;
-      const int x_145 = p.y;
-      const int x_149 = map[((x_142 + 2) + (x_145 * 16))];
-      x_150 = (x_149 == 0);
-      x_151_phi = x_150;
-    }
-    if (x_151_phi) {
-      directions = (directions + 1);
-    }
-    const int x_156 = (256 - x_68);
-    const int x_158 = p.y;
-    const bool x_159 = (x_158 < 14);
-    x_172_phi = x_159;
-    if (x_159) {
-      const int x_163 = p.x;
-      const int x_165 = p.y;
-      const int x_170 = map[(x_163 + ((x_165 + 2) * 16))];
-      x_171 = (x_170 == 0);
-      x_172_phi = x_171;
-    }
-    if (x_172_phi) {
-      directions = (directions + 1);
-    }
-    bool x_237 = false;
-    bool x_250 = false;
-    bool x_289 = false;
-    bool x_302 = false;
-    bool x_341 = false;
-    bool x_354 = false;
-    bool x_393 = false;
-    bool x_406 = false;
-    bool x_238_phi = false;
-    bool x_251_phi = false;
-    bool x_290_phi = false;
-    bool x_303_phi = false;
-    bool x_342_phi = false;
-    bool x_355_phi = false;
-    bool x_394_phi = false;
-    bool x_407_phi = false;
-    if ((directions == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        const int x_186 = i;
-        if ((x_186 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        const int x_189 = (x_156 - x_186);
-        x_60 = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-        if (false) {
-          {
-            i = (i + 1);
-          }
-          continue;
-        }
-        {
-          for(; (j < 8); j = (j + 1)) {
-            const int x_204 = map[((j * 2) + ((i * 2) * 16))];
-            if ((x_204 == 0)) {
-              p.x = (j * 2);
-              p.y = (i * 2);
-              canwalk = true;
-            }
-          }
-        }
-        {
-          i = (i + 1);
-        }
-      }
-      const int x_219 = p.x;
-      const int x_221 = p.y;
-      map[(x_219 + (x_221 * 16))] = 1;
-    } else {
-      d = (v % directions);
-      v = (v + directions);
-      const bool x_232 = (d >= 0);
-      x_238_phi = x_232;
-      if (x_232) {
-        const int x_236 = p.x;
-        x_237 = (x_236 > 0);
-        x_238_phi = x_237;
-      }
-      const bool x_238 = x_238_phi;
-      x_251_phi = x_238;
-      if (x_238) {
-        const int x_242 = p.x;
-        const int x_245 = p.y;
-        const int x_249 = map[((x_242 - 2) + (x_245 * 16))];
-        x_250 = (x_249 == 0);
-        x_251_phi = x_250;
-      }
-      if (x_251_phi) {
-        d = (d - 1);
-        const int x_257 = p.x;
-        const int x_259 = p.y;
-        map[(x_257 + (x_259 * 16))] = 1;
-        const int x_264 = p.x;
-        const int x_267 = p.y;
-        map[((x_264 - 1) + (x_267 * 16))] = 1;
-        const int x_272 = p.x;
-        const int x_275 = p.y;
-        map[((x_272 - 2) + (x_275 * 16))] = 1;
-        const int x_280 = p.x;
-        p.x = (x_280 - 2);
-      }
-      const bool x_284 = (d >= 0);
-      x_290_phi = x_284;
-      if (x_284) {
-        const int x_288 = p.y;
-        x_289 = (x_288 > 0);
-        x_290_phi = x_289;
-      }
-      const bool x_290 = x_290_phi;
-      x_303_phi = x_290;
-      if (x_290) {
-        const int x_294 = p.x;
-        const int x_296 = p.y;
-        const int x_301 = map[(x_294 + ((x_296 - 2) * 16))];
-        x_302 = (x_301 == 0);
-        x_303_phi = x_302;
-      }
-      if (x_303_phi) {
-        d = (d - 1);
-        const int x_309 = p.x;
-        const int x_311 = p.y;
-        map[(x_309 + (x_311 * 16))] = 1;
-        const int x_316 = p.x;
-        const int x_318 = p.y;
-        map[(x_316 + ((x_318 - 1) * 16))] = 1;
-        const int x_324 = p.x;
-        const int x_326 = p.y;
-        map[(x_324 + ((x_326 - 2) * 16))] = 1;
-        const int x_332 = p.y;
-        p.y = (x_332 - 2);
-      }
-      const bool x_336 = (d >= 0);
-      x_342_phi = x_336;
-      if (x_336) {
-        const int x_340 = p.x;
-        x_341 = (x_340 < 14);
-        x_342_phi = x_341;
-      }
-      const bool x_342 = x_342_phi;
-      x_355_phi = x_342;
-      if (x_342) {
-        const int x_346 = p.x;
-        const int x_349 = p.y;
-        const int x_353 = map[((x_346 + 2) + (x_349 * 16))];
-        x_354 = (x_353 == 0);
-        x_355_phi = x_354;
-      }
-      if (x_355_phi) {
-        d = (d - 1);
-        const int x_361 = p.x;
-        const int x_363 = p.y;
-        map[(x_361 + (x_363 * 16))] = 1;
-        const int x_368 = p.x;
-        const int x_371 = p.y;
-        map[((x_368 + 1) + (x_371 * 16))] = 1;
-        const int x_376 = p.x;
-        const int x_379 = p.y;
-        map[((x_376 + 2) + (x_379 * 16))] = 1;
-        const int x_384 = p.x;
-        p.x = (x_384 + 2);
-      }
-      const bool x_388 = (d >= 0);
-      x_394_phi = x_388;
-      if (x_388) {
-        const int x_392 = p.y;
-        x_393 = (x_392 < 14);
-        x_394_phi = x_393;
-      }
-      const bool x_394 = x_394_phi;
-      x_407_phi = x_394;
-      if (x_394) {
-        const int x_398 = p.x;
-        const int x_400 = p.y;
-        const int x_405 = map[(x_398 + ((x_400 + 2) * 16))];
-        x_406 = (x_405 == 0);
-        x_407_phi = x_406;
-      }
-      if (x_407_phi) {
-        d = (d - 1);
-        const int x_413 = p.x;
-        const int x_415 = p.y;
-        map[(x_413 + (x_415 * 16))] = 1;
-        const int x_420 = p.x;
-        const int x_422 = p.y;
-        map[(x_420 + ((x_422 + 1) * 16))] = 1;
-        const int x_428 = p.x;
-        const int x_430 = p.y;
-        map[(x_428 + ((x_430 + 2) * 16))] = 1;
-        const int x_436 = p.y;
-        p.y = (x_436 + 2);
-      }
-    }
-    const int x_440 = ipos.y;
-    const int x_443 = ipos.x;
-    const int x_446 = map[((x_440 * 16) + x_443)];
-    if ((x_446 == 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      if (canwalk) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.msl
deleted file mode 100644
index cb41180..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.msl
+++ /dev/null
@@ -1,370 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, thread float2x4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float2 pos = 0.0f;
-  int2 ipos = 0;
-  int i = 0;
-  int2 p = 0;
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  float4 const x_63 = *(tint_symbol_3);
-  float2 const x_67 = x_7.resolution;
-  int const x_68 = tint_unary_minus(as_type<int>((as_type<uint>(256) - as_type<uint>(14))));
-  pos = (float2(x_63.x, x_63.y) / x_67);
-  float const x_71 = pos.x;
-  float const x_75 = pos.y;
-  ipos = int2(int((x_71 * 16.0f)), int((x_75 * 16.0f)));
-  i = 0;
-  while (true) {
-    int const x_83 = i;
-    if ((x_83 < 256)) {
-    } else {
-      break;
-    }
-    int const x_86 = i;
-    (*(tint_symbol_4)).arr[x_86] = 0;
-    {
-      int const x_88 = i;
-      i = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_110 = false;
-    bool x_130 = false;
-    bool x_150 = false;
-    bool x_171 = false;
-    bool x_111_phi = false;
-    bool x_131_phi = false;
-    bool x_151_phi = false;
-    bool x_172_phi = false;
-    int const x_94 = v;
-    v = as_type<int>((as_type<uint>(x_94) + as_type<uint>(1)));
-    directions = 0;
-    int const x_97 = p.x;
-    bool const x_98 = (x_97 > 0);
-    x_111_phi = x_98;
-    if (x_98) {
-      int const x_102 = p.x;
-      int const x_105 = p.y;
-      int const x_109 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_102) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_105) * as_type<uint>(16))))))];
-      x_110 = (x_109 == 0);
-      x_111_phi = x_110;
-    }
-    bool const x_111 = x_111_phi;
-    if (x_111) {
-      int const x_114 = directions;
-      directions = as_type<int>((as_type<uint>(x_114) + as_type<uint>(1)));
-    }
-    int const x_117 = p.y;
-    bool const x_118 = (x_117 > 0);
-    x_131_phi = x_118;
-    if (x_118) {
-      int const x_122 = p.x;
-      int const x_124 = p.y;
-      int const x_129 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_122) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_124) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_130 = (x_129 == 0);
-      x_131_phi = x_130;
-    }
-    bool const x_131 = x_131_phi;
-    if (x_131) {
-      int const x_134 = directions;
-      directions = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
-    }
-    int const x_137 = p.x;
-    bool const x_138 = (x_137 < 14);
-    x_151_phi = x_138;
-    if (x_138) {
-      int const x_142 = p.x;
-      int const x_145 = p.y;
-      int const x_149 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_142) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_145) * as_type<uint>(16))))))];
-      x_150 = (x_149 == 0);
-      x_151_phi = x_150;
-    }
-    bool const x_151 = x_151_phi;
-    if (x_151) {
-      int const x_154 = directions;
-      directions = as_type<int>((as_type<uint>(x_154) + as_type<uint>(1)));
-    }
-    int const x_156 = as_type<int>((as_type<uint>(256) - as_type<uint>(x_68)));
-    int const x_158 = p.y;
-    bool const x_159 = (x_158 < 14);
-    x_172_phi = x_159;
-    if (x_159) {
-      int const x_163 = p.x;
-      int const x_165 = p.y;
-      int const x_170 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_163) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_165) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_171 = (x_170 == 0);
-      x_172_phi = x_171;
-    }
-    bool const x_172 = x_172_phi;
-    if (x_172) {
-      int const x_175 = directions;
-      directions = as_type<int>((as_type<uint>(x_175) + as_type<uint>(1)));
-    }
-    bool x_237 = false;
-    bool x_250 = false;
-    bool x_289 = false;
-    bool x_302 = false;
-    bool x_341 = false;
-    bool x_354 = false;
-    bool x_393 = false;
-    bool x_406 = false;
-    bool x_238_phi = false;
-    bool x_251_phi = false;
-    bool x_290_phi = false;
-    bool x_303_phi = false;
-    bool x_342_phi = false;
-    bool x_355_phi = false;
-    bool x_394_phi = false;
-    bool x_407_phi = false;
-    int const x_177 = directions;
-    if ((x_177 == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        int const x_186 = i;
-        if ((x_186 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        int const x_189 = as_type<int>((as_type<uint>(x_156) - as_type<uint>(x_186)));
-        *(tint_symbol_5) = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-        if (false) {
-          {
-            int const x_216 = i;
-            i = as_type<int>((as_type<uint>(x_216) + as_type<uint>(1)));
-          }
-          continue;
-        }
-        while (true) {
-          int const x_194 = j;
-          if ((x_194 < 8)) {
-          } else {
-            break;
-          }
-          int const x_197 = j;
-          int const x_199 = i;
-          int const x_204 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_197) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_199) * as_type<uint>(2)))) * as_type<uint>(16))))))];
-          if ((x_204 == 0)) {
-            int const x_208 = j;
-            p.x = as_type<int>((as_type<uint>(x_208) * as_type<uint>(2)));
-            int const x_211 = i;
-            p.y = as_type<int>((as_type<uint>(x_211) * as_type<uint>(2)));
-            canwalk = true;
-          }
-          {
-            int const x_214 = j;
-            j = as_type<int>((as_type<uint>(x_214) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_216 = i;
-          i = as_type<int>((as_type<uint>(x_216) + as_type<uint>(1)));
-        }
-      }
-      int const x_219 = p.x;
-      int const x_221 = p.y;
-      (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_219) + as_type<uint>(as_type<int>((as_type<uint>(x_221) * as_type<uint>(16))))))] = 1;
-    } else {
-      int const x_225 = v;
-      int const x_226 = directions;
-      d = (x_225 % x_226);
-      int const x_228 = directions;
-      int const x_229 = v;
-      v = as_type<int>((as_type<uint>(x_229) + as_type<uint>(x_228)));
-      int const x_231 = d;
-      bool const x_232 = (x_231 >= 0);
-      x_238_phi = x_232;
-      if (x_232) {
-        int const x_236 = p.x;
-        x_237 = (x_236 > 0);
-        x_238_phi = x_237;
-      }
-      bool const x_238 = x_238_phi;
-      x_251_phi = x_238;
-      if (x_238) {
-        int const x_242 = p.x;
-        int const x_245 = p.y;
-        int const x_249 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_242) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_245) * as_type<uint>(16))))))];
-        x_250 = (x_249 == 0);
-        x_251_phi = x_250;
-      }
-      bool const x_251 = x_251_phi;
-      if (x_251) {
-        int const x_254 = d;
-        d = as_type<int>((as_type<uint>(x_254) - as_type<uint>(1)));
-        int const x_257 = p.x;
-        int const x_259 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_257) + as_type<uint>(as_type<int>((as_type<uint>(x_259) * as_type<uint>(16))))))] = 1;
-        int const x_264 = p.x;
-        int const x_267 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_264) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_267) * as_type<uint>(16))))))] = 1;
-        int const x_272 = p.x;
-        int const x_275 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_272) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_275) * as_type<uint>(16))))))] = 1;
-        int const x_280 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_280) - as_type<uint>(2)));
-      }
-      int const x_283 = d;
-      bool const x_284 = (x_283 >= 0);
-      x_290_phi = x_284;
-      if (x_284) {
-        int const x_288 = p.y;
-        x_289 = (x_288 > 0);
-        x_290_phi = x_289;
-      }
-      bool const x_290 = x_290_phi;
-      x_303_phi = x_290;
-      if (x_290) {
-        int const x_294 = p.x;
-        int const x_296 = p.y;
-        int const x_301 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_294) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_296) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_302 = (x_301 == 0);
-        x_303_phi = x_302;
-      }
-      bool const x_303 = x_303_phi;
-      if (x_303) {
-        int const x_306 = d;
-        d = as_type<int>((as_type<uint>(x_306) - as_type<uint>(1)));
-        int const x_309 = p.x;
-        int const x_311 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_309) + as_type<uint>(as_type<int>((as_type<uint>(x_311) * as_type<uint>(16))))))] = 1;
-        int const x_316 = p.x;
-        int const x_318 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_316) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_318) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_324 = p.x;
-        int const x_326 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_324) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_326) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_332 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_332) - as_type<uint>(2)));
-      }
-      int const x_335 = d;
-      bool const x_336 = (x_335 >= 0);
-      x_342_phi = x_336;
-      if (x_336) {
-        int const x_340 = p.x;
-        x_341 = (x_340 < 14);
-        x_342_phi = x_341;
-      }
-      bool const x_342 = x_342_phi;
-      x_355_phi = x_342;
-      if (x_342) {
-        int const x_346 = p.x;
-        int const x_349 = p.y;
-        int const x_353 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_346) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_349) * as_type<uint>(16))))))];
-        x_354 = (x_353 == 0);
-        x_355_phi = x_354;
-      }
-      bool const x_355 = x_355_phi;
-      if (x_355) {
-        int const x_358 = d;
-        d = as_type<int>((as_type<uint>(x_358) - as_type<uint>(1)));
-        int const x_361 = p.x;
-        int const x_363 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_361) + as_type<uint>(as_type<int>((as_type<uint>(x_363) * as_type<uint>(16))))))] = 1;
-        int const x_368 = p.x;
-        int const x_371 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_368) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_371) * as_type<uint>(16))))))] = 1;
-        int const x_376 = p.x;
-        int const x_379 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_376) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_379) * as_type<uint>(16))))))] = 1;
-        int const x_384 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_384) + as_type<uint>(2)));
-      }
-      int const x_387 = d;
-      bool const x_388 = (x_387 >= 0);
-      x_394_phi = x_388;
-      if (x_388) {
-        int const x_392 = p.y;
-        x_393 = (x_392 < 14);
-        x_394_phi = x_393;
-      }
-      bool const x_394 = x_394_phi;
-      x_407_phi = x_394;
-      if (x_394) {
-        int const x_398 = p.x;
-        int const x_400 = p.y;
-        int const x_405 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_398) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_400) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_406 = (x_405 == 0);
-        x_407_phi = x_406;
-      }
-      bool const x_407 = x_407_phi;
-      if (x_407) {
-        int const x_410 = d;
-        d = as_type<int>((as_type<uint>(x_410) - as_type<uint>(1)));
-        int const x_413 = p.x;
-        int const x_415 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_413) + as_type<uint>(as_type<int>((as_type<uint>(x_415) * as_type<uint>(16))))))] = 1;
-        int const x_420 = p.x;
-        int const x_422 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_420) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_422) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_428 = p.x;
-        int const x_430 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_428) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_430) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_436 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_436) + as_type<uint>(2)));
-      }
-    }
-    int const x_440 = ipos.y;
-    int const x_443 = ipos.x;
-    int const x_446 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_440) * as_type<uint>(16)))) + as_type<uint>(x_443)))];
-    if ((x_446 == 1)) {
-      *(tint_symbol_6) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      bool const x_450 = canwalk;
-      if (x_450) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_6) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float2x4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_7, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread tint_array_wrapper tint_symbol_12 = {};
-  thread float2x4 tint_symbol_13 = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.spvasm
deleted file mode 100644
index dc8895d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,779 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 517
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %map "map"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %x_60 "x_60"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %ipos "ipos"
-               OpName %i "i"
-               OpName %p "p"
-               OpName %canwalk "canwalk"
-               OpName %v "v"
-               OpName %directions "directions"
-               OpName %j "j"
-               OpName %d "d"
-               OpName %x_110 "x_110"
-               OpName %x_130 "x_130"
-               OpName %x_150 "x_150"
-               OpName %x_171 "x_171"
-               OpName %x_111_phi "x_111_phi"
-               OpName %x_131_phi "x_131_phi"
-               OpName %x_151_phi "x_151_phi"
-               OpName %x_172_phi "x_172_phi"
-               OpName %x_237 "x_237"
-               OpName %x_250 "x_250"
-               OpName %x_289 "x_289"
-               OpName %x_302 "x_302"
-               OpName %x_341 "x_341"
-               OpName %x_354 "x_354"
-               OpName %x_393 "x_393"
-               OpName %x_406 "x_406"
-               OpName %x_238_phi "x_238_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_290_phi "x_290_phi"
-               OpName %x_303_phi "x_303_phi"
-               OpName %x_342_phi "x_342_phi"
-               OpName %x_355_phi "x_355_phi"
-               OpName %x_394_phi "x_394_phi"
-               OpName %x_407_phi "x_407_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
-         %20 = OpConstantNull %_arr_int_uint_256
-        %map = OpVariable %_ptr_Private__arr_int_uint_256 Private %20
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%mat2v4float = OpTypeMatrix %v4float 2
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %25 = OpConstantComposite %mat2v4float %24 %24
-%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
-       %x_60 = OpVariable %_ptr_Private_mat2v4float Private %25
-       %void = OpTypeVoid
-         %28 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %34 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %38 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %41 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %46 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %int_256 = OpConstant %int 256
-     %int_14 = OpConstant %int 14
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %float_16 = OpConstant %float 16
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-         %92 = OpConstantComposite %v2int %int_0 %int_0
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-     %int_16 = OpConstant %int 16
-      %false = OpConstantFalse %bool
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-        %501 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %503 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %504 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %28
-         %31 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %34
-       %ipos = OpVariable %_ptr_Function_v2int Function %38
-          %i = OpVariable %_ptr_Function_int Function %41
-          %p = OpVariable %_ptr_Function_v2int Function %38
-    %canwalk = OpVariable %_ptr_Function_bool Function %46
-          %v = OpVariable %_ptr_Function_int Function %41
- %directions = OpVariable %_ptr_Function_int Function %41
-          %j = OpVariable %_ptr_Function_int Function %41
-          %d = OpVariable %_ptr_Function_int Function %41
-      %x_110 = OpVariable %_ptr_Function_bool Function %46
-      %x_130 = OpVariable %_ptr_Function_bool Function %46
-      %x_150 = OpVariable %_ptr_Function_bool Function %46
-      %x_171 = OpVariable %_ptr_Function_bool Function %46
-  %x_111_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_131_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_151_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_172_phi = OpVariable %_ptr_Function_bool Function %46
-      %x_237 = OpVariable %_ptr_Function_bool Function %46
-      %x_250 = OpVariable %_ptr_Function_bool Function %46
-      %x_289 = OpVariable %_ptr_Function_bool Function %46
-      %x_302 = OpVariable %_ptr_Function_bool Function %46
-      %x_341 = OpVariable %_ptr_Function_bool Function %46
-      %x_354 = OpVariable %_ptr_Function_bool Function %46
-      %x_393 = OpVariable %_ptr_Function_bool Function %46
-      %x_406 = OpVariable %_ptr_Function_bool Function %46
-  %x_238_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_251_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_290_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_303_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_342_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_355_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_394_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_407_phi = OpVariable %_ptr_Function_bool Function %46
-         %51 = OpLoad %v4float %gl_FragCoord
-         %54 = OpAccessChain %_ptr_Uniform_v2float %x_7 %uint_0
-         %55 = OpLoad %v2float %54
-         %59 = OpISub %int %int_256 %int_14
-         %56 = OpSNegate %int %59
-         %60 = OpCompositeExtract %float %51 0
-         %61 = OpCompositeExtract %float %51 1
-         %62 = OpCompositeConstruct %v2float %60 %61
-         %63 = OpFDiv %v2float %62 %55
-               OpStore %pos %63
-         %65 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %66 = OpLoad %float %65
-         %68 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %69 = OpLoad %float %68
-         %72 = OpFMul %float %66 %float_16
-         %70 = OpConvertFToS %int %72
-         %74 = OpFMul %float %69 %float_16
-         %73 = OpConvertFToS %int %74
-         %75 = OpCompositeConstruct %v2int %70 %73
-               OpStore %ipos %75
-               OpStore %i %int_0
-               OpBranch %77
-         %77 = OpLabel
-               OpLoopMerge %78 %79 None
-               OpBranch %80
-         %80 = OpLabel
-         %81 = OpLoad %int %i
-         %82 = OpSLessThan %bool %81 %int_256
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %78
-         %83 = OpLabel
-         %86 = OpLoad %int %i
-         %88 = OpAccessChain %_ptr_Private_int %map %86
-               OpStore %88 %int_0
-               OpBranch %79
-         %79 = OpLabel
-         %89 = OpLoad %int %i
-         %91 = OpIAdd %int %89 %int_1
-               OpStore %i %91
-               OpBranch %77
-         %78 = OpLabel
-               OpStore %p %92
-               OpStore %canwalk %true
-               OpStore %v %int_0
-               OpBranch %94
-         %94 = OpLabel
-               OpLoopMerge %95 %96 None
-               OpBranch %97
-         %97 = OpLabel
-        %106 = OpLoad %int %v
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %v %107
-               OpStore %directions %int_0
-        %108 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %109 = OpLoad %int %108
-        %110 = OpSGreaterThan %bool %109 %int_0
-               OpStore %x_111_phi %110
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %111
-        %112 = OpLabel
-        %113 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %116 = OpLoad %int %115
-        %118 = OpISub %int %114 %int_2
-        %120 = OpIMul %int %116 %int_16
-        %121 = OpIAdd %int %118 %120
-        %122 = OpAccessChain %_ptr_Private_int %map %121
-        %123 = OpLoad %int %122
-        %124 = OpIEqual %bool %123 %int_0
-               OpStore %x_110 %124
-        %125 = OpLoad %bool %x_110
-               OpStore %x_111_phi %125
-               OpBranch %111
-        %111 = OpLabel
-        %126 = OpLoad %bool %x_111_phi
-               OpSelectionMerge %127 None
-               OpBranchConditional %126 %128 %127
-        %128 = OpLabel
-        %129 = OpLoad %int %directions
-        %130 = OpIAdd %int %129 %int_1
-               OpStore %directions %130
-               OpBranch %127
-        %127 = OpLabel
-        %131 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %132 = OpLoad %int %131
-        %133 = OpSGreaterThan %bool %132 %int_0
-               OpStore %x_131_phi %133
-               OpSelectionMerge %134 None
-               OpBranchConditional %133 %135 %134
-        %135 = OpLabel
-        %136 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %139 = OpLoad %int %138
-        %140 = OpISub %int %139 %int_2
-        %141 = OpIMul %int %140 %int_16
-        %142 = OpIAdd %int %137 %141
-        %143 = OpAccessChain %_ptr_Private_int %map %142
-        %144 = OpLoad %int %143
-        %145 = OpIEqual %bool %144 %int_0
-               OpStore %x_130 %145
-        %146 = OpLoad %bool %x_130
-               OpStore %x_131_phi %146
-               OpBranch %134
-        %134 = OpLabel
-        %147 = OpLoad %bool %x_131_phi
-               OpSelectionMerge %148 None
-               OpBranchConditional %147 %149 %148
-        %149 = OpLabel
-        %150 = OpLoad %int %directions
-        %151 = OpIAdd %int %150 %int_1
-               OpStore %directions %151
-               OpBranch %148
-        %148 = OpLabel
-        %152 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %153 = OpLoad %int %152
-        %154 = OpSLessThan %bool %153 %int_14
-               OpStore %x_151_phi %154
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %155
-        %156 = OpLabel
-        %157 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %158 = OpLoad %int %157
-        %159 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %160 = OpLoad %int %159
-        %161 = OpIAdd %int %158 %int_2
-        %162 = OpIMul %int %160 %int_16
-        %163 = OpIAdd %int %161 %162
-        %164 = OpAccessChain %_ptr_Private_int %map %163
-        %165 = OpLoad %int %164
-        %166 = OpIEqual %bool %165 %int_0
-               OpStore %x_150 %166
-        %167 = OpLoad %bool %x_150
-               OpStore %x_151_phi %167
-               OpBranch %155
-        %155 = OpLabel
-        %168 = OpLoad %bool %x_151_phi
-               OpSelectionMerge %169 None
-               OpBranchConditional %168 %170 %169
-        %170 = OpLabel
-        %171 = OpLoad %int %directions
-        %172 = OpIAdd %int %171 %int_1
-               OpStore %directions %172
-               OpBranch %169
-        %169 = OpLabel
-        %173 = OpISub %int %int_256 %56
-        %174 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %175 = OpLoad %int %174
-        %176 = OpSLessThan %bool %175 %int_14
-               OpStore %x_172_phi %176
-               OpSelectionMerge %177 None
-               OpBranchConditional %176 %178 %177
-        %178 = OpLabel
-        %179 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %180 = OpLoad %int %179
-        %181 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %182 = OpLoad %int %181
-        %183 = OpIAdd %int %182 %int_2
-        %184 = OpIMul %int %183 %int_16
-        %185 = OpIAdd %int %180 %184
-        %186 = OpAccessChain %_ptr_Private_int %map %185
-        %187 = OpLoad %int %186
-        %188 = OpIEqual %bool %187 %int_0
-               OpStore %x_171 %188
-        %189 = OpLoad %bool %x_171
-               OpStore %x_172_phi %189
-               OpBranch %177
-        %177 = OpLabel
-        %190 = OpLoad %bool %x_172_phi
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %191
-        %192 = OpLabel
-        %193 = OpLoad %int %directions
-        %194 = OpIAdd %int %193 %int_1
-               OpStore %directions %194
-               OpBranch %191
-        %191 = OpLabel
-        %211 = OpLoad %int %directions
-        %212 = OpIEqual %bool %211 %int_0
-               OpSelectionMerge %213 None
-               OpBranchConditional %212 %214 %215
-        %214 = OpLabel
-               OpStore %canwalk %false
-               OpStore %i %int_0
-               OpBranch %217
-        %217 = OpLabel
-               OpLoopMerge %218 %219 None
-               OpBranch %220
-        %220 = OpLabel
-        %221 = OpLoad %int %i
-        %223 = OpSLessThan %bool %221 %int_8
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %226
-        %225 = OpLabel
-               OpBranch %224
-        %226 = OpLabel
-               OpBranch %218
-        %224 = OpLabel
-               OpStore %j %int_0
-        %227 = OpISub %int %173 %221
-               OpStore %x_60 %25
-               OpSelectionMerge %228 None
-               OpBranchConditional %false %229 %228
-        %229 = OpLabel
-               OpBranch %219
-        %228 = OpLabel
-               OpBranch %230
-        %230 = OpLabel
-               OpLoopMerge %231 %232 None
-               OpBranch %233
-        %233 = OpLabel
-        %234 = OpLoad %int %j
-        %235 = OpSLessThan %bool %234 %int_8
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %238
-        %237 = OpLabel
-               OpBranch %236
-        %238 = OpLabel
-               OpBranch %231
-        %236 = OpLabel
-        %239 = OpLoad %int %j
-        %240 = OpLoad %int %i
-        %241 = OpIMul %int %239 %int_2
-        %242 = OpIMul %int %240 %int_2
-        %243 = OpIMul %int %242 %int_16
-        %244 = OpIAdd %int %241 %243
-        %245 = OpAccessChain %_ptr_Private_int %map %244
-        %246 = OpLoad %int %245
-        %247 = OpIEqual %bool %246 %int_0
-               OpSelectionMerge %248 None
-               OpBranchConditional %247 %249 %248
-        %249 = OpLabel
-        %250 = OpLoad %int %j
-        %251 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %252 = OpIMul %int %250 %int_2
-               OpStore %251 %252
-        %253 = OpLoad %int %i
-        %254 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %255 = OpIMul %int %253 %int_2
-               OpStore %254 %255
-               OpStore %canwalk %true
-               OpBranch %248
-        %248 = OpLabel
-               OpBranch %232
-        %232 = OpLabel
-        %256 = OpLoad %int %j
-        %257 = OpIAdd %int %256 %int_1
-               OpStore %j %257
-               OpBranch %230
-        %231 = OpLabel
-               OpBranch %219
-        %219 = OpLabel
-        %258 = OpLoad %int %i
-        %259 = OpIAdd %int %258 %int_1
-               OpStore %i %259
-               OpBranch %217
-        %218 = OpLabel
-        %260 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %261 = OpLoad %int %260
-        %262 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %263 = OpLoad %int %262
-        %264 = OpIMul %int %263 %int_16
-        %265 = OpIAdd %int %261 %264
-        %266 = OpAccessChain %_ptr_Private_int %map %265
-               OpStore %266 %int_1
-               OpBranch %213
-        %215 = OpLabel
-        %267 = OpLoad %int %v
-        %268 = OpLoad %int %directions
-        %269 = OpSMod %int %267 %268
-               OpStore %d %269
-        %270 = OpLoad %int %directions
-        %271 = OpLoad %int %v
-        %272 = OpIAdd %int %271 %270
-               OpStore %v %272
-        %273 = OpLoad %int %d
-        %274 = OpSGreaterThanEqual %bool %273 %int_0
-               OpStore %x_238_phi %274
-               OpSelectionMerge %275 None
-               OpBranchConditional %274 %276 %275
-        %276 = OpLabel
-        %277 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %278 = OpLoad %int %277
-        %279 = OpSGreaterThan %bool %278 %int_0
-               OpStore %x_237 %279
-        %280 = OpLoad %bool %x_237
-               OpStore %x_238_phi %280
-               OpBranch %275
-        %275 = OpLabel
-        %281 = OpLoad %bool %x_238_phi
-               OpStore %x_251_phi %281
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %282
-        %283 = OpLabel
-        %284 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %285 = OpLoad %int %284
-        %286 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %287 = OpLoad %int %286
-        %288 = OpISub %int %285 %int_2
-        %289 = OpIMul %int %287 %int_16
-        %290 = OpIAdd %int %288 %289
-        %291 = OpAccessChain %_ptr_Private_int %map %290
-        %292 = OpLoad %int %291
-        %293 = OpIEqual %bool %292 %int_0
-               OpStore %x_250 %293
-        %294 = OpLoad %bool %x_250
-               OpStore %x_251_phi %294
-               OpBranch %282
-        %282 = OpLabel
-        %295 = OpLoad %bool %x_251_phi
-               OpSelectionMerge %296 None
-               OpBranchConditional %295 %297 %296
-        %297 = OpLabel
-        %298 = OpLoad %int %d
-        %299 = OpISub %int %298 %int_1
-               OpStore %d %299
-        %300 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %301 = OpLoad %int %300
-        %302 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %303 = OpLoad %int %302
-        %304 = OpIMul %int %303 %int_16
-        %305 = OpIAdd %int %301 %304
-        %306 = OpAccessChain %_ptr_Private_int %map %305
-               OpStore %306 %int_1
-        %307 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %308 = OpLoad %int %307
-        %309 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %310 = OpLoad %int %309
-        %311 = OpISub %int %308 %int_1
-        %312 = OpIMul %int %310 %int_16
-        %313 = OpIAdd %int %311 %312
-        %314 = OpAccessChain %_ptr_Private_int %map %313
-               OpStore %314 %int_1
-        %315 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %316 = OpLoad %int %315
-        %317 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %318 = OpLoad %int %317
-        %319 = OpISub %int %316 %int_2
-        %320 = OpIMul %int %318 %int_16
-        %321 = OpIAdd %int %319 %320
-        %322 = OpAccessChain %_ptr_Private_int %map %321
-               OpStore %322 %int_1
-        %323 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %324 = OpLoad %int %323
-        %325 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %326 = OpISub %int %324 %int_2
-               OpStore %325 %326
-               OpBranch %296
-        %296 = OpLabel
-        %327 = OpLoad %int %d
-        %328 = OpSGreaterThanEqual %bool %327 %int_0
-               OpStore %x_290_phi %328
-               OpSelectionMerge %329 None
-               OpBranchConditional %328 %330 %329
-        %330 = OpLabel
-        %331 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %332 = OpLoad %int %331
-        %333 = OpSGreaterThan %bool %332 %int_0
-               OpStore %x_289 %333
-        %334 = OpLoad %bool %x_289
-               OpStore %x_290_phi %334
-               OpBranch %329
-        %329 = OpLabel
-        %335 = OpLoad %bool %x_290_phi
-               OpStore %x_303_phi %335
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %336
-        %337 = OpLabel
-        %338 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %339 = OpLoad %int %338
-        %340 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %341 = OpLoad %int %340
-        %342 = OpISub %int %341 %int_2
-        %343 = OpIMul %int %342 %int_16
-        %344 = OpIAdd %int %339 %343
-        %345 = OpAccessChain %_ptr_Private_int %map %344
-        %346 = OpLoad %int %345
-        %347 = OpIEqual %bool %346 %int_0
-               OpStore %x_302 %347
-        %348 = OpLoad %bool %x_302
-               OpStore %x_303_phi %348
-               OpBranch %336
-        %336 = OpLabel
-        %349 = OpLoad %bool %x_303_phi
-               OpSelectionMerge %350 None
-               OpBranchConditional %349 %351 %350
-        %351 = OpLabel
-        %352 = OpLoad %int %d
-        %353 = OpISub %int %352 %int_1
-               OpStore %d %353
-        %354 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %355 = OpLoad %int %354
-        %356 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %357 = OpLoad %int %356
-        %358 = OpIMul %int %357 %int_16
-        %359 = OpIAdd %int %355 %358
-        %360 = OpAccessChain %_ptr_Private_int %map %359
-               OpStore %360 %int_1
-        %361 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %362 = OpLoad %int %361
-        %363 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %364 = OpLoad %int %363
-        %365 = OpISub %int %364 %int_1
-        %366 = OpIMul %int %365 %int_16
-        %367 = OpIAdd %int %362 %366
-        %368 = OpAccessChain %_ptr_Private_int %map %367
-               OpStore %368 %int_1
-        %369 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %370 = OpLoad %int %369
-        %371 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %372 = OpLoad %int %371
-        %373 = OpISub %int %372 %int_2
-        %374 = OpIMul %int %373 %int_16
-        %375 = OpIAdd %int %370 %374
-        %376 = OpAccessChain %_ptr_Private_int %map %375
-               OpStore %376 %int_1
-        %377 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %378 = OpLoad %int %377
-        %379 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %380 = OpISub %int %378 %int_2
-               OpStore %379 %380
-               OpBranch %350
-        %350 = OpLabel
-        %381 = OpLoad %int %d
-        %382 = OpSGreaterThanEqual %bool %381 %int_0
-               OpStore %x_342_phi %382
-               OpSelectionMerge %383 None
-               OpBranchConditional %382 %384 %383
-        %384 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %386 = OpLoad %int %385
-        %387 = OpSLessThan %bool %386 %int_14
-               OpStore %x_341 %387
-        %388 = OpLoad %bool %x_341
-               OpStore %x_342_phi %388
-               OpBranch %383
-        %383 = OpLabel
-        %389 = OpLoad %bool %x_342_phi
-               OpStore %x_355_phi %389
-               OpSelectionMerge %390 None
-               OpBranchConditional %389 %391 %390
-        %391 = OpLabel
-        %392 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %393 = OpLoad %int %392
-        %394 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %395 = OpLoad %int %394
-        %396 = OpIAdd %int %393 %int_2
-        %397 = OpIMul %int %395 %int_16
-        %398 = OpIAdd %int %396 %397
-        %399 = OpAccessChain %_ptr_Private_int %map %398
-        %400 = OpLoad %int %399
-        %401 = OpIEqual %bool %400 %int_0
-               OpStore %x_354 %401
-        %402 = OpLoad %bool %x_354
-               OpStore %x_355_phi %402
-               OpBranch %390
-        %390 = OpLabel
-        %403 = OpLoad %bool %x_355_phi
-               OpSelectionMerge %404 None
-               OpBranchConditional %403 %405 %404
-        %405 = OpLabel
-        %406 = OpLoad %int %d
-        %407 = OpISub %int %406 %int_1
-               OpStore %d %407
-        %408 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %409 = OpLoad %int %408
-        %410 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %411 = OpLoad %int %410
-        %412 = OpIMul %int %411 %int_16
-        %413 = OpIAdd %int %409 %412
-        %414 = OpAccessChain %_ptr_Private_int %map %413
-               OpStore %414 %int_1
-        %415 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %416 = OpLoad %int %415
-        %417 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %418 = OpLoad %int %417
-        %419 = OpIAdd %int %416 %int_1
-        %420 = OpIMul %int %418 %int_16
-        %421 = OpIAdd %int %419 %420
-        %422 = OpAccessChain %_ptr_Private_int %map %421
-               OpStore %422 %int_1
-        %423 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %424 = OpLoad %int %423
-        %425 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %426 = OpLoad %int %425
-        %427 = OpIAdd %int %424 %int_2
-        %428 = OpIMul %int %426 %int_16
-        %429 = OpIAdd %int %427 %428
-        %430 = OpAccessChain %_ptr_Private_int %map %429
-               OpStore %430 %int_1
-        %431 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %432 = OpLoad %int %431
-        %433 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %434 = OpIAdd %int %432 %int_2
-               OpStore %433 %434
-               OpBranch %404
-        %404 = OpLabel
-        %435 = OpLoad %int %d
-        %436 = OpSGreaterThanEqual %bool %435 %int_0
-               OpStore %x_394_phi %436
-               OpSelectionMerge %437 None
-               OpBranchConditional %436 %438 %437
-        %438 = OpLabel
-        %439 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %440 = OpLoad %int %439
-        %441 = OpSLessThan %bool %440 %int_14
-               OpStore %x_393 %441
-        %442 = OpLoad %bool %x_393
-               OpStore %x_394_phi %442
-               OpBranch %437
-        %437 = OpLabel
-        %443 = OpLoad %bool %x_394_phi
-               OpStore %x_407_phi %443
-               OpSelectionMerge %444 None
-               OpBranchConditional %443 %445 %444
-        %445 = OpLabel
-        %446 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %447 = OpLoad %int %446
-        %448 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %449 = OpLoad %int %448
-        %450 = OpIAdd %int %449 %int_2
-        %451 = OpIMul %int %450 %int_16
-        %452 = OpIAdd %int %447 %451
-        %453 = OpAccessChain %_ptr_Private_int %map %452
-        %454 = OpLoad %int %453
-        %455 = OpIEqual %bool %454 %int_0
-               OpStore %x_406 %455
-        %456 = OpLoad %bool %x_406
-               OpStore %x_407_phi %456
-               OpBranch %444
-        %444 = OpLabel
-        %457 = OpLoad %bool %x_407_phi
-               OpSelectionMerge %458 None
-               OpBranchConditional %457 %459 %458
-        %459 = OpLabel
-        %460 = OpLoad %int %d
-        %461 = OpISub %int %460 %int_1
-               OpStore %d %461
-        %462 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %463 = OpLoad %int %462
-        %464 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %465 = OpLoad %int %464
-        %466 = OpIMul %int %465 %int_16
-        %467 = OpIAdd %int %463 %466
-        %468 = OpAccessChain %_ptr_Private_int %map %467
-               OpStore %468 %int_1
-        %469 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %470 = OpLoad %int %469
-        %471 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %472 = OpLoad %int %471
-        %473 = OpIAdd %int %472 %int_1
-        %474 = OpIMul %int %473 %int_16
-        %475 = OpIAdd %int %470 %474
-        %476 = OpAccessChain %_ptr_Private_int %map %475
-               OpStore %476 %int_1
-        %477 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %478 = OpLoad %int %477
-        %479 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %480 = OpLoad %int %479
-        %481 = OpIAdd %int %480 %int_2
-        %482 = OpIMul %int %481 %int_16
-        %483 = OpIAdd %int %478 %482
-        %484 = OpAccessChain %_ptr_Private_int %map %483
-               OpStore %484 %int_1
-        %485 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %486 = OpLoad %int %485
-        %487 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %488 = OpIAdd %int %486 %int_2
-               OpStore %487 %488
-               OpBranch %458
-        %458 = OpLabel
-               OpBranch %213
-        %213 = OpLabel
-        %489 = OpAccessChain %_ptr_Function_int %ipos %uint_1
-        %490 = OpLoad %int %489
-        %491 = OpAccessChain %_ptr_Function_int %ipos %uint_0
-        %492 = OpLoad %int %491
-        %493 = OpIMul %int %490 %int_16
-        %494 = OpIAdd %int %493 %492
-        %495 = OpAccessChain %_ptr_Private_int %map %494
-        %496 = OpLoad %int %495
-        %497 = OpIEqual %bool %496 %int_1
-               OpSelectionMerge %498 None
-               OpBranchConditional %497 %499 %498
-        %499 = OpLabel
-               OpStore %x_GLF_color %501
-               OpReturn
-        %498 = OpLabel
-               OpBranch %96
-         %96 = OpLabel
-        %502 = OpLoad %bool %canwalk
-               OpBranchConditional %502 %94 %95
-         %95 = OpLabel
-               OpStore %x_GLF_color %503
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %504
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %508 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %509 = OpFunctionCall %void %main_1
-        %510 = OpLoad %v4float %x_GLF_color
-        %511 = OpCompositeConstruct %main_out %510
-               OpReturnValue %511
-               OpFunctionEnd
-       %main = OpFunction %void None %28
-        %513 = OpLabel
-        %515 = OpLoad %v4float %gl_FragCoord_param_1
-        %514 = OpFunctionCall %main_out %main_inner %515
-        %516 = OpCompositeExtract %v4float %514 0
-               OpStore %x_GLF_color_1_1 %516
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.wgsl
deleted file mode 100644
index 14e531e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,357 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> map : array<i32, 256>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> x_60 : mat2x4<f32> = mat2x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var ipos : vec2<i32>;
-  var i : i32;
-  var p : vec2<i32>;
-  var canwalk : bool;
-  var v : i32;
-  var directions : i32;
-  var j : i32;
-  var d : i32;
-  let x_63 : vec4<f32> = gl_FragCoord;
-  let x_67 : vec2<f32> = x_7.resolution;
-  let x_68 : i32 = -((256 - 14));
-  pos = (vec2<f32>(x_63.x, x_63.y) / x_67);
-  let x_71 : f32 = pos.x;
-  let x_75 : f32 = pos.y;
-  ipos = vec2<i32>(i32((x_71 * 16.0)), i32((x_75 * 16.0)));
-  i = 0;
-  loop {
-    let x_83 : i32 = i;
-    if ((x_83 < 256)) {
-    } else {
-      break;
-    }
-    let x_86 : i32 = i;
-    map[x_86] = 0;
-
-    continuing {
-      let x_88 : i32 = i;
-      i = (x_88 + 1);
-    }
-  }
-  p = vec2<i32>(0, 0);
-  canwalk = true;
-  v = 0;
-  loop {
-    var x_110 : bool;
-    var x_130 : bool;
-    var x_150 : bool;
-    var x_171 : bool;
-    var x_111_phi : bool;
-    var x_131_phi : bool;
-    var x_151_phi : bool;
-    var x_172_phi : bool;
-    let x_94 : i32 = v;
-    v = (x_94 + 1);
-    directions = 0;
-    let x_97 : i32 = p.x;
-    let x_98 : bool = (x_97 > 0);
-    x_111_phi = x_98;
-    if (x_98) {
-      let x_102 : i32 = p.x;
-      let x_105 : i32 = p.y;
-      let x_109 : i32 = map[((x_102 - 2) + (x_105 * 16))];
-      x_110 = (x_109 == 0);
-      x_111_phi = x_110;
-    }
-    let x_111 : bool = x_111_phi;
-    if (x_111) {
-      let x_114 : i32 = directions;
-      directions = (x_114 + 1);
-    }
-    let x_117 : i32 = p.y;
-    let x_118 : bool = (x_117 > 0);
-    x_131_phi = x_118;
-    if (x_118) {
-      let x_122 : i32 = p.x;
-      let x_124 : i32 = p.y;
-      let x_129 : i32 = map[(x_122 + ((x_124 - 2) * 16))];
-      x_130 = (x_129 == 0);
-      x_131_phi = x_130;
-    }
-    let x_131 : bool = x_131_phi;
-    if (x_131) {
-      let x_134 : i32 = directions;
-      directions = (x_134 + 1);
-    }
-    let x_137 : i32 = p.x;
-    let x_138 : bool = (x_137 < 14);
-    x_151_phi = x_138;
-    if (x_138) {
-      let x_142 : i32 = p.x;
-      let x_145 : i32 = p.y;
-      let x_149 : i32 = map[((x_142 + 2) + (x_145 * 16))];
-      x_150 = (x_149 == 0);
-      x_151_phi = x_150;
-    }
-    let x_151 : bool = x_151_phi;
-    if (x_151) {
-      let x_154 : i32 = directions;
-      directions = (x_154 + 1);
-    }
-    let x_156 : i32 = (256 - x_68);
-    let x_158 : i32 = p.y;
-    let x_159 : bool = (x_158 < 14);
-    x_172_phi = x_159;
-    if (x_159) {
-      let x_163 : i32 = p.x;
-      let x_165 : i32 = p.y;
-      let x_170 : i32 = map[(x_163 + ((x_165 + 2) * 16))];
-      x_171 = (x_170 == 0);
-      x_172_phi = x_171;
-    }
-    let x_172 : bool = x_172_phi;
-    if (x_172) {
-      let x_175 : i32 = directions;
-      directions = (x_175 + 1);
-    }
-    var x_237 : bool;
-    var x_250 : bool;
-    var x_289 : bool;
-    var x_302 : bool;
-    var x_341 : bool;
-    var x_354 : bool;
-    var x_393 : bool;
-    var x_406 : bool;
-    var x_238_phi : bool;
-    var x_251_phi : bool;
-    var x_290_phi : bool;
-    var x_303_phi : bool;
-    var x_342_phi : bool;
-    var x_355_phi : bool;
-    var x_394_phi : bool;
-    var x_407_phi : bool;
-    let x_177 : i32 = directions;
-    if ((x_177 == 0)) {
-      canwalk = false;
-      i = 0;
-      loop {
-        let x_186 : i32 = i;
-        if ((x_186 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        let x_189 : i32 = (x_156 - x_186);
-        x_60 = mat2x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-        if (false) {
-          continue;
-        }
-        loop {
-          let x_194 : i32 = j;
-          if ((x_194 < 8)) {
-          } else {
-            break;
-          }
-          let x_197 : i32 = j;
-          let x_199 : i32 = i;
-          let x_204 : i32 = map[((x_197 * 2) + ((x_199 * 2) * 16))];
-          if ((x_204 == 0)) {
-            let x_208 : i32 = j;
-            p.x = (x_208 * 2);
-            let x_211 : i32 = i;
-            p.y = (x_211 * 2);
-            canwalk = true;
-          }
-
-          continuing {
-            let x_214 : i32 = j;
-            j = (x_214 + 1);
-          }
-        }
-
-        continuing {
-          let x_216 : i32 = i;
-          i = (x_216 + 1);
-        }
-      }
-      let x_219 : i32 = p.x;
-      let x_221 : i32 = p.y;
-      map[(x_219 + (x_221 * 16))] = 1;
-    } else {
-      let x_225 : i32 = v;
-      let x_226 : i32 = directions;
-      d = (x_225 % x_226);
-      let x_228 : i32 = directions;
-      let x_229 : i32 = v;
-      v = (x_229 + x_228);
-      let x_231 : i32 = d;
-      let x_232 : bool = (x_231 >= 0);
-      x_238_phi = x_232;
-      if (x_232) {
-        let x_236 : i32 = p.x;
-        x_237 = (x_236 > 0);
-        x_238_phi = x_237;
-      }
-      let x_238 : bool = x_238_phi;
-      x_251_phi = x_238;
-      if (x_238) {
-        let x_242 : i32 = p.x;
-        let x_245 : i32 = p.y;
-        let x_249 : i32 = map[((x_242 - 2) + (x_245 * 16))];
-        x_250 = (x_249 == 0);
-        x_251_phi = x_250;
-      }
-      let x_251 : bool = x_251_phi;
-      if (x_251) {
-        let x_254 : i32 = d;
-        d = (x_254 - 1);
-        let x_257 : i32 = p.x;
-        let x_259 : i32 = p.y;
-        map[(x_257 + (x_259 * 16))] = 1;
-        let x_264 : i32 = p.x;
-        let x_267 : i32 = p.y;
-        map[((x_264 - 1) + (x_267 * 16))] = 1;
-        let x_272 : i32 = p.x;
-        let x_275 : i32 = p.y;
-        map[((x_272 - 2) + (x_275 * 16))] = 1;
-        let x_280 : i32 = p.x;
-        p.x = (x_280 - 2);
-      }
-      let x_283 : i32 = d;
-      let x_284 : bool = (x_283 >= 0);
-      x_290_phi = x_284;
-      if (x_284) {
-        let x_288 : i32 = p.y;
-        x_289 = (x_288 > 0);
-        x_290_phi = x_289;
-      }
-      let x_290 : bool = x_290_phi;
-      x_303_phi = x_290;
-      if (x_290) {
-        let x_294 : i32 = p.x;
-        let x_296 : i32 = p.y;
-        let x_301 : i32 = map[(x_294 + ((x_296 - 2) * 16))];
-        x_302 = (x_301 == 0);
-        x_303_phi = x_302;
-      }
-      let x_303 : bool = x_303_phi;
-      if (x_303) {
-        let x_306 : i32 = d;
-        d = (x_306 - 1);
-        let x_309 : i32 = p.x;
-        let x_311 : i32 = p.y;
-        map[(x_309 + (x_311 * 16))] = 1;
-        let x_316 : i32 = p.x;
-        let x_318 : i32 = p.y;
-        map[(x_316 + ((x_318 - 1) * 16))] = 1;
-        let x_324 : i32 = p.x;
-        let x_326 : i32 = p.y;
-        map[(x_324 + ((x_326 - 2) * 16))] = 1;
-        let x_332 : i32 = p.y;
-        p.y = (x_332 - 2);
-      }
-      let x_335 : i32 = d;
-      let x_336 : bool = (x_335 >= 0);
-      x_342_phi = x_336;
-      if (x_336) {
-        let x_340 : i32 = p.x;
-        x_341 = (x_340 < 14);
-        x_342_phi = x_341;
-      }
-      let x_342 : bool = x_342_phi;
-      x_355_phi = x_342;
-      if (x_342) {
-        let x_346 : i32 = p.x;
-        let x_349 : i32 = p.y;
-        let x_353 : i32 = map[((x_346 + 2) + (x_349 * 16))];
-        x_354 = (x_353 == 0);
-        x_355_phi = x_354;
-      }
-      let x_355 : bool = x_355_phi;
-      if (x_355) {
-        let x_358 : i32 = d;
-        d = (x_358 - 1);
-        let x_361 : i32 = p.x;
-        let x_363 : i32 = p.y;
-        map[(x_361 + (x_363 * 16))] = 1;
-        let x_368 : i32 = p.x;
-        let x_371 : i32 = p.y;
-        map[((x_368 + 1) + (x_371 * 16))] = 1;
-        let x_376 : i32 = p.x;
-        let x_379 : i32 = p.y;
-        map[((x_376 + 2) + (x_379 * 16))] = 1;
-        let x_384 : i32 = p.x;
-        p.x = (x_384 + 2);
-      }
-      let x_387 : i32 = d;
-      let x_388 : bool = (x_387 >= 0);
-      x_394_phi = x_388;
-      if (x_388) {
-        let x_392 : i32 = p.y;
-        x_393 = (x_392 < 14);
-        x_394_phi = x_393;
-      }
-      let x_394 : bool = x_394_phi;
-      x_407_phi = x_394;
-      if (x_394) {
-        let x_398 : i32 = p.x;
-        let x_400 : i32 = p.y;
-        let x_405 : i32 = map[(x_398 + ((x_400 + 2) * 16))];
-        x_406 = (x_405 == 0);
-        x_407_phi = x_406;
-      }
-      let x_407 : bool = x_407_phi;
-      if (x_407) {
-        let x_410 : i32 = d;
-        d = (x_410 - 1);
-        let x_413 : i32 = p.x;
-        let x_415 : i32 = p.y;
-        map[(x_413 + (x_415 * 16))] = 1;
-        let x_420 : i32 = p.x;
-        let x_422 : i32 = p.y;
-        map[(x_420 + ((x_422 + 1) * 16))] = 1;
-        let x_428 : i32 = p.x;
-        let x_430 : i32 = p.y;
-        map[(x_428 + ((x_430 + 2) * 16))] = 1;
-        let x_436 : i32 = p.y;
-        p.y = (x_436 + 2);
-      }
-    }
-    let x_440 : i32 = ipos.y;
-    let x_443 : i32 = ipos.x;
-    let x_446 : i32 = map[((x_440 * 16) + x_443)];
-    if ((x_446 == 1)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      return;
-    }
-
-    continuing {
-      let x_450 : bool = canwalk;
-      if (x_450) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.hlsl
deleted file mode 100644
index bf9483e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,314 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static int map[256] = (int[256])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float2x4 x_60 = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int i = 0;
-  int2 p = int2(0, 0);
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  const float4 x_63 = gl_FragCoord;
-  const float2 x_67 = asfloat(x_7[0].xy);
-  const int x_68 = -((256 - 14));
-  pos = (float2(x_63.x, x_63.y) / x_67);
-  const float x_71 = pos.x;
-  const float x_75 = pos.y;
-  ipos = int2(int((x_71 * 16.0f)), int((x_75 * 16.0f)));
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      map[i] = 0;
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_110 = false;
-    bool x_130 = false;
-    bool x_150 = false;
-    bool x_171 = false;
-    bool x_111_phi = false;
-    bool x_131_phi = false;
-    bool x_151_phi = false;
-    bool x_172_phi = false;
-    v = (v + 1);
-    directions = 0;
-    const int x_97 = p.x;
-    const bool x_98 = (x_97 > 0);
-    x_111_phi = x_98;
-    if (x_98) {
-      const int x_102 = p.x;
-      const int x_105 = p.y;
-      const int x_109 = map[((x_102 - 2) + (x_105 * 16))];
-      x_110 = (x_109 == 0);
-      x_111_phi = x_110;
-    }
-    if (x_111_phi) {
-      directions = (directions + 1);
-    }
-    const int x_117 = p.y;
-    const bool x_118 = (x_117 > 0);
-    x_131_phi = x_118;
-    if (x_118) {
-      const int x_122 = p.x;
-      const int x_124 = p.y;
-      const int x_129 = map[(x_122 + ((x_124 - 2) * 16))];
-      x_130 = (x_129 == 0);
-      x_131_phi = x_130;
-    }
-    if (x_131_phi) {
-      directions = (directions + 1);
-    }
-    const int x_137 = p.x;
-    const bool x_138 = (x_137 < 14);
-    x_151_phi = x_138;
-    if (x_138) {
-      const int x_142 = p.x;
-      const int x_145 = p.y;
-      const int x_149 = map[((x_142 + 2) + (x_145 * 16))];
-      x_150 = (x_149 == 0);
-      x_151_phi = x_150;
-    }
-    if (x_151_phi) {
-      directions = (directions + 1);
-    }
-    const int x_156 = (256 - x_68);
-    const int x_158 = p.y;
-    const bool x_159 = (x_158 < 14);
-    x_172_phi = x_159;
-    if (x_159) {
-      const int x_163 = p.x;
-      const int x_165 = p.y;
-      const int x_170 = map[(x_163 + ((x_165 + 2) * 16))];
-      x_171 = (x_170 == 0);
-      x_172_phi = x_171;
-    }
-    if (x_172_phi) {
-      directions = (directions + 1);
-    }
-    bool x_237 = false;
-    bool x_250 = false;
-    bool x_289 = false;
-    bool x_302 = false;
-    bool x_341 = false;
-    bool x_354 = false;
-    bool x_393 = false;
-    bool x_406 = false;
-    bool x_238_phi = false;
-    bool x_251_phi = false;
-    bool x_290_phi = false;
-    bool x_303_phi = false;
-    bool x_342_phi = false;
-    bool x_355_phi = false;
-    bool x_394_phi = false;
-    bool x_407_phi = false;
-    if ((directions == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        const int x_186 = i;
-        if ((x_186 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        const int x_189 = (x_156 - x_186);
-        x_60 = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-        if (false) {
-          {
-            i = (i + 1);
-          }
-          continue;
-        }
-        {
-          for(; (j < 8); j = (j + 1)) {
-            const int x_204 = map[((j * 2) + ((i * 2) * 16))];
-            if ((x_204 == 0)) {
-              p.x = (j * 2);
-              p.y = (i * 2);
-              canwalk = true;
-            }
-          }
-        }
-        {
-          i = (i + 1);
-        }
-      }
-      const int x_219 = p.x;
-      const int x_221 = p.y;
-      map[(x_219 + (x_221 * 16))] = 1;
-    } else {
-      d = (v % directions);
-      v = (v + directions);
-      const bool x_232 = (d >= 0);
-      x_238_phi = x_232;
-      if (x_232) {
-        const int x_236 = p.x;
-        x_237 = (x_236 > 0);
-        x_238_phi = x_237;
-      }
-      const bool x_238 = x_238_phi;
-      x_251_phi = x_238;
-      if (x_238) {
-        const int x_242 = p.x;
-        const int x_245 = p.y;
-        const int x_249 = map[((x_242 - 2) + (x_245 * 16))];
-        x_250 = (x_249 == 0);
-        x_251_phi = x_250;
-      }
-      if (x_251_phi) {
-        d = (d - 1);
-        const int x_257 = p.x;
-        const int x_259 = p.y;
-        map[(x_257 + (x_259 * 16))] = 1;
-        const int x_264 = p.x;
-        const int x_267 = p.y;
-        map[((x_264 - 1) + (x_267 * 16))] = 1;
-        const int x_272 = p.x;
-        const int x_275 = p.y;
-        map[((x_272 - 2) + (x_275 * 16))] = 1;
-        const int x_280 = p.x;
-        p.x = (x_280 - 2);
-      }
-      const bool x_284 = (d >= 0);
-      x_290_phi = x_284;
-      if (x_284) {
-        const int x_288 = p.y;
-        x_289 = (x_288 > 0);
-        x_290_phi = x_289;
-      }
-      const bool x_290 = x_290_phi;
-      x_303_phi = x_290;
-      if (x_290) {
-        const int x_294 = p.x;
-        const int x_296 = p.y;
-        const int x_301 = map[(x_294 + ((x_296 - 2) * 16))];
-        x_302 = (x_301 == 0);
-        x_303_phi = x_302;
-      }
-      if (x_303_phi) {
-        d = (d - 1);
-        const int x_309 = p.x;
-        const int x_311 = p.y;
-        map[(x_309 + (x_311 * 16))] = 1;
-        const int x_316 = p.x;
-        const int x_318 = p.y;
-        map[(x_316 + ((x_318 - 1) * 16))] = 1;
-        const int x_324 = p.x;
-        const int x_326 = p.y;
-        map[(x_324 + ((x_326 - 2) * 16))] = 1;
-        const int x_332 = p.y;
-        p.y = (x_332 - 2);
-      }
-      const bool x_336 = (d >= 0);
-      x_342_phi = x_336;
-      if (x_336) {
-        const int x_340 = p.x;
-        x_341 = (x_340 < 14);
-        x_342_phi = x_341;
-      }
-      const bool x_342 = x_342_phi;
-      x_355_phi = x_342;
-      if (x_342) {
-        const int x_346 = p.x;
-        const int x_349 = p.y;
-        const int x_353 = map[((x_346 + 2) + (x_349 * 16))];
-        x_354 = (x_353 == 0);
-        x_355_phi = x_354;
-      }
-      if (x_355_phi) {
-        d = (d - 1);
-        const int x_361 = p.x;
-        const int x_363 = p.y;
-        map[(x_361 + (x_363 * 16))] = 1;
-        const int x_368 = p.x;
-        const int x_371 = p.y;
-        map[((x_368 + 1) + (x_371 * 16))] = 1;
-        const int x_376 = p.x;
-        const int x_379 = p.y;
-        map[((x_376 + 2) + (x_379 * 16))] = 1;
-        const int x_384 = p.x;
-        p.x = (x_384 + 2);
-      }
-      const bool x_388 = (d >= 0);
-      x_394_phi = x_388;
-      if (x_388) {
-        const int x_392 = p.y;
-        x_393 = (x_392 < 14);
-        x_394_phi = x_393;
-      }
-      const bool x_394 = x_394_phi;
-      x_407_phi = x_394;
-      if (x_394) {
-        const int x_398 = p.x;
-        const int x_400 = p.y;
-        const int x_405 = map[(x_398 + ((x_400 + 2) * 16))];
-        x_406 = (x_405 == 0);
-        x_407_phi = x_406;
-      }
-      if (x_407_phi) {
-        d = (d - 1);
-        const int x_413 = p.x;
-        const int x_415 = p.y;
-        map[(x_413 + (x_415 * 16))] = 1;
-        const int x_420 = p.x;
-        const int x_422 = p.y;
-        map[(x_420 + ((x_422 + 1) * 16))] = 1;
-        const int x_428 = p.x;
-        const int x_430 = p.y;
-        map[(x_428 + ((x_430 + 2) * 16))] = 1;
-        const int x_436 = p.y;
-        p.y = (x_436 + 2);
-      }
-    }
-    const int x_440 = ipos.y;
-    const int x_443 = ipos.x;
-    const int x_446 = map[((x_440 * 16) + x_443)];
-    if ((x_446 == 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      if (canwalk) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.msl
deleted file mode 100644
index cb41180..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.msl
+++ /dev/null
@@ -1,370 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, thread float2x4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float2 pos = 0.0f;
-  int2 ipos = 0;
-  int i = 0;
-  int2 p = 0;
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  float4 const x_63 = *(tint_symbol_3);
-  float2 const x_67 = x_7.resolution;
-  int const x_68 = tint_unary_minus(as_type<int>((as_type<uint>(256) - as_type<uint>(14))));
-  pos = (float2(x_63.x, x_63.y) / x_67);
-  float const x_71 = pos.x;
-  float const x_75 = pos.y;
-  ipos = int2(int((x_71 * 16.0f)), int((x_75 * 16.0f)));
-  i = 0;
-  while (true) {
-    int const x_83 = i;
-    if ((x_83 < 256)) {
-    } else {
-      break;
-    }
-    int const x_86 = i;
-    (*(tint_symbol_4)).arr[x_86] = 0;
-    {
-      int const x_88 = i;
-      i = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_110 = false;
-    bool x_130 = false;
-    bool x_150 = false;
-    bool x_171 = false;
-    bool x_111_phi = false;
-    bool x_131_phi = false;
-    bool x_151_phi = false;
-    bool x_172_phi = false;
-    int const x_94 = v;
-    v = as_type<int>((as_type<uint>(x_94) + as_type<uint>(1)));
-    directions = 0;
-    int const x_97 = p.x;
-    bool const x_98 = (x_97 > 0);
-    x_111_phi = x_98;
-    if (x_98) {
-      int const x_102 = p.x;
-      int const x_105 = p.y;
-      int const x_109 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_102) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_105) * as_type<uint>(16))))))];
-      x_110 = (x_109 == 0);
-      x_111_phi = x_110;
-    }
-    bool const x_111 = x_111_phi;
-    if (x_111) {
-      int const x_114 = directions;
-      directions = as_type<int>((as_type<uint>(x_114) + as_type<uint>(1)));
-    }
-    int const x_117 = p.y;
-    bool const x_118 = (x_117 > 0);
-    x_131_phi = x_118;
-    if (x_118) {
-      int const x_122 = p.x;
-      int const x_124 = p.y;
-      int const x_129 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_122) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_124) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_130 = (x_129 == 0);
-      x_131_phi = x_130;
-    }
-    bool const x_131 = x_131_phi;
-    if (x_131) {
-      int const x_134 = directions;
-      directions = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
-    }
-    int const x_137 = p.x;
-    bool const x_138 = (x_137 < 14);
-    x_151_phi = x_138;
-    if (x_138) {
-      int const x_142 = p.x;
-      int const x_145 = p.y;
-      int const x_149 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_142) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_145) * as_type<uint>(16))))))];
-      x_150 = (x_149 == 0);
-      x_151_phi = x_150;
-    }
-    bool const x_151 = x_151_phi;
-    if (x_151) {
-      int const x_154 = directions;
-      directions = as_type<int>((as_type<uint>(x_154) + as_type<uint>(1)));
-    }
-    int const x_156 = as_type<int>((as_type<uint>(256) - as_type<uint>(x_68)));
-    int const x_158 = p.y;
-    bool const x_159 = (x_158 < 14);
-    x_172_phi = x_159;
-    if (x_159) {
-      int const x_163 = p.x;
-      int const x_165 = p.y;
-      int const x_170 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_163) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_165) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_171 = (x_170 == 0);
-      x_172_phi = x_171;
-    }
-    bool const x_172 = x_172_phi;
-    if (x_172) {
-      int const x_175 = directions;
-      directions = as_type<int>((as_type<uint>(x_175) + as_type<uint>(1)));
-    }
-    bool x_237 = false;
-    bool x_250 = false;
-    bool x_289 = false;
-    bool x_302 = false;
-    bool x_341 = false;
-    bool x_354 = false;
-    bool x_393 = false;
-    bool x_406 = false;
-    bool x_238_phi = false;
-    bool x_251_phi = false;
-    bool x_290_phi = false;
-    bool x_303_phi = false;
-    bool x_342_phi = false;
-    bool x_355_phi = false;
-    bool x_394_phi = false;
-    bool x_407_phi = false;
-    int const x_177 = directions;
-    if ((x_177 == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        int const x_186 = i;
-        if ((x_186 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        int const x_189 = as_type<int>((as_type<uint>(x_156) - as_type<uint>(x_186)));
-        *(tint_symbol_5) = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-        if (false) {
-          {
-            int const x_216 = i;
-            i = as_type<int>((as_type<uint>(x_216) + as_type<uint>(1)));
-          }
-          continue;
-        }
-        while (true) {
-          int const x_194 = j;
-          if ((x_194 < 8)) {
-          } else {
-            break;
-          }
-          int const x_197 = j;
-          int const x_199 = i;
-          int const x_204 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_197) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_199) * as_type<uint>(2)))) * as_type<uint>(16))))))];
-          if ((x_204 == 0)) {
-            int const x_208 = j;
-            p.x = as_type<int>((as_type<uint>(x_208) * as_type<uint>(2)));
-            int const x_211 = i;
-            p.y = as_type<int>((as_type<uint>(x_211) * as_type<uint>(2)));
-            canwalk = true;
-          }
-          {
-            int const x_214 = j;
-            j = as_type<int>((as_type<uint>(x_214) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_216 = i;
-          i = as_type<int>((as_type<uint>(x_216) + as_type<uint>(1)));
-        }
-      }
-      int const x_219 = p.x;
-      int const x_221 = p.y;
-      (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_219) + as_type<uint>(as_type<int>((as_type<uint>(x_221) * as_type<uint>(16))))))] = 1;
-    } else {
-      int const x_225 = v;
-      int const x_226 = directions;
-      d = (x_225 % x_226);
-      int const x_228 = directions;
-      int const x_229 = v;
-      v = as_type<int>((as_type<uint>(x_229) + as_type<uint>(x_228)));
-      int const x_231 = d;
-      bool const x_232 = (x_231 >= 0);
-      x_238_phi = x_232;
-      if (x_232) {
-        int const x_236 = p.x;
-        x_237 = (x_236 > 0);
-        x_238_phi = x_237;
-      }
-      bool const x_238 = x_238_phi;
-      x_251_phi = x_238;
-      if (x_238) {
-        int const x_242 = p.x;
-        int const x_245 = p.y;
-        int const x_249 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_242) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_245) * as_type<uint>(16))))))];
-        x_250 = (x_249 == 0);
-        x_251_phi = x_250;
-      }
-      bool const x_251 = x_251_phi;
-      if (x_251) {
-        int const x_254 = d;
-        d = as_type<int>((as_type<uint>(x_254) - as_type<uint>(1)));
-        int const x_257 = p.x;
-        int const x_259 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_257) + as_type<uint>(as_type<int>((as_type<uint>(x_259) * as_type<uint>(16))))))] = 1;
-        int const x_264 = p.x;
-        int const x_267 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_264) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_267) * as_type<uint>(16))))))] = 1;
-        int const x_272 = p.x;
-        int const x_275 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_272) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_275) * as_type<uint>(16))))))] = 1;
-        int const x_280 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_280) - as_type<uint>(2)));
-      }
-      int const x_283 = d;
-      bool const x_284 = (x_283 >= 0);
-      x_290_phi = x_284;
-      if (x_284) {
-        int const x_288 = p.y;
-        x_289 = (x_288 > 0);
-        x_290_phi = x_289;
-      }
-      bool const x_290 = x_290_phi;
-      x_303_phi = x_290;
-      if (x_290) {
-        int const x_294 = p.x;
-        int const x_296 = p.y;
-        int const x_301 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_294) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_296) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_302 = (x_301 == 0);
-        x_303_phi = x_302;
-      }
-      bool const x_303 = x_303_phi;
-      if (x_303) {
-        int const x_306 = d;
-        d = as_type<int>((as_type<uint>(x_306) - as_type<uint>(1)));
-        int const x_309 = p.x;
-        int const x_311 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_309) + as_type<uint>(as_type<int>((as_type<uint>(x_311) * as_type<uint>(16))))))] = 1;
-        int const x_316 = p.x;
-        int const x_318 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_316) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_318) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_324 = p.x;
-        int const x_326 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_324) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_326) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_332 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_332) - as_type<uint>(2)));
-      }
-      int const x_335 = d;
-      bool const x_336 = (x_335 >= 0);
-      x_342_phi = x_336;
-      if (x_336) {
-        int const x_340 = p.x;
-        x_341 = (x_340 < 14);
-        x_342_phi = x_341;
-      }
-      bool const x_342 = x_342_phi;
-      x_355_phi = x_342;
-      if (x_342) {
-        int const x_346 = p.x;
-        int const x_349 = p.y;
-        int const x_353 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_346) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_349) * as_type<uint>(16))))))];
-        x_354 = (x_353 == 0);
-        x_355_phi = x_354;
-      }
-      bool const x_355 = x_355_phi;
-      if (x_355) {
-        int const x_358 = d;
-        d = as_type<int>((as_type<uint>(x_358) - as_type<uint>(1)));
-        int const x_361 = p.x;
-        int const x_363 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_361) + as_type<uint>(as_type<int>((as_type<uint>(x_363) * as_type<uint>(16))))))] = 1;
-        int const x_368 = p.x;
-        int const x_371 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_368) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_371) * as_type<uint>(16))))))] = 1;
-        int const x_376 = p.x;
-        int const x_379 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_376) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_379) * as_type<uint>(16))))))] = 1;
-        int const x_384 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_384) + as_type<uint>(2)));
-      }
-      int const x_387 = d;
-      bool const x_388 = (x_387 >= 0);
-      x_394_phi = x_388;
-      if (x_388) {
-        int const x_392 = p.y;
-        x_393 = (x_392 < 14);
-        x_394_phi = x_393;
-      }
-      bool const x_394 = x_394_phi;
-      x_407_phi = x_394;
-      if (x_394) {
-        int const x_398 = p.x;
-        int const x_400 = p.y;
-        int const x_405 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_398) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_400) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_406 = (x_405 == 0);
-        x_407_phi = x_406;
-      }
-      bool const x_407 = x_407_phi;
-      if (x_407) {
-        int const x_410 = d;
-        d = as_type<int>((as_type<uint>(x_410) - as_type<uint>(1)));
-        int const x_413 = p.x;
-        int const x_415 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_413) + as_type<uint>(as_type<int>((as_type<uint>(x_415) * as_type<uint>(16))))))] = 1;
-        int const x_420 = p.x;
-        int const x_422 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_420) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_422) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_428 = p.x;
-        int const x_430 = p.y;
-        (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(x_428) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_430) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_436 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_436) + as_type<uint>(2)));
-      }
-    }
-    int const x_440 = ipos.y;
-    int const x_443 = ipos.x;
-    int const x_446 = (*(tint_symbol_4)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_440) * as_type<uint>(16)))) + as_type<uint>(x_443)))];
-    if ((x_446 == 1)) {
-      *(tint_symbol_6) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      bool const x_450 = canwalk;
-      if (x_450) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_6) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float2x4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_7, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread tint_array_wrapper tint_symbol_12 = {};
-  thread float2x4 tint_symbol_13 = float2x4(float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f));
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.spvasm
deleted file mode 100644
index dc8895d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,779 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 517
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %map "map"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %x_60 "x_60"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %ipos "ipos"
-               OpName %i "i"
-               OpName %p "p"
-               OpName %canwalk "canwalk"
-               OpName %v "v"
-               OpName %directions "directions"
-               OpName %j "j"
-               OpName %d "d"
-               OpName %x_110 "x_110"
-               OpName %x_130 "x_130"
-               OpName %x_150 "x_150"
-               OpName %x_171 "x_171"
-               OpName %x_111_phi "x_111_phi"
-               OpName %x_131_phi "x_131_phi"
-               OpName %x_151_phi "x_151_phi"
-               OpName %x_172_phi "x_172_phi"
-               OpName %x_237 "x_237"
-               OpName %x_250 "x_250"
-               OpName %x_289 "x_289"
-               OpName %x_302 "x_302"
-               OpName %x_341 "x_341"
-               OpName %x_354 "x_354"
-               OpName %x_393 "x_393"
-               OpName %x_406 "x_406"
-               OpName %x_238_phi "x_238_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_290_phi "x_290_phi"
-               OpName %x_303_phi "x_303_phi"
-               OpName %x_342_phi "x_342_phi"
-               OpName %x_355_phi "x_355_phi"
-               OpName %x_394_phi "x_394_phi"
-               OpName %x_407_phi "x_407_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
-         %20 = OpConstantNull %_arr_int_uint_256
-        %map = OpVariable %_ptr_Private__arr_int_uint_256 Private %20
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%mat2v4float = OpTypeMatrix %v4float 2
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %25 = OpConstantComposite %mat2v4float %24 %24
-%_ptr_Private_mat2v4float = OpTypePointer Private %mat2v4float
-       %x_60 = OpVariable %_ptr_Private_mat2v4float Private %25
-       %void = OpTypeVoid
-         %28 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %34 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %38 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %41 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %46 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %int_256 = OpConstant %int 256
-     %int_14 = OpConstant %int 14
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %float_16 = OpConstant %float 16
-      %int_0 = OpConstant %int 0
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-         %92 = OpConstantComposite %v2int %int_0 %int_0
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-     %int_16 = OpConstant %int 16
-      %false = OpConstantFalse %bool
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-        %501 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %503 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %504 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %28
-         %31 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %34
-       %ipos = OpVariable %_ptr_Function_v2int Function %38
-          %i = OpVariable %_ptr_Function_int Function %41
-          %p = OpVariable %_ptr_Function_v2int Function %38
-    %canwalk = OpVariable %_ptr_Function_bool Function %46
-          %v = OpVariable %_ptr_Function_int Function %41
- %directions = OpVariable %_ptr_Function_int Function %41
-          %j = OpVariable %_ptr_Function_int Function %41
-          %d = OpVariable %_ptr_Function_int Function %41
-      %x_110 = OpVariable %_ptr_Function_bool Function %46
-      %x_130 = OpVariable %_ptr_Function_bool Function %46
-      %x_150 = OpVariable %_ptr_Function_bool Function %46
-      %x_171 = OpVariable %_ptr_Function_bool Function %46
-  %x_111_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_131_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_151_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_172_phi = OpVariable %_ptr_Function_bool Function %46
-      %x_237 = OpVariable %_ptr_Function_bool Function %46
-      %x_250 = OpVariable %_ptr_Function_bool Function %46
-      %x_289 = OpVariable %_ptr_Function_bool Function %46
-      %x_302 = OpVariable %_ptr_Function_bool Function %46
-      %x_341 = OpVariable %_ptr_Function_bool Function %46
-      %x_354 = OpVariable %_ptr_Function_bool Function %46
-      %x_393 = OpVariable %_ptr_Function_bool Function %46
-      %x_406 = OpVariable %_ptr_Function_bool Function %46
-  %x_238_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_251_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_290_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_303_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_342_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_355_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_394_phi = OpVariable %_ptr_Function_bool Function %46
-  %x_407_phi = OpVariable %_ptr_Function_bool Function %46
-         %51 = OpLoad %v4float %gl_FragCoord
-         %54 = OpAccessChain %_ptr_Uniform_v2float %x_7 %uint_0
-         %55 = OpLoad %v2float %54
-         %59 = OpISub %int %int_256 %int_14
-         %56 = OpSNegate %int %59
-         %60 = OpCompositeExtract %float %51 0
-         %61 = OpCompositeExtract %float %51 1
-         %62 = OpCompositeConstruct %v2float %60 %61
-         %63 = OpFDiv %v2float %62 %55
-               OpStore %pos %63
-         %65 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %66 = OpLoad %float %65
-         %68 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %69 = OpLoad %float %68
-         %72 = OpFMul %float %66 %float_16
-         %70 = OpConvertFToS %int %72
-         %74 = OpFMul %float %69 %float_16
-         %73 = OpConvertFToS %int %74
-         %75 = OpCompositeConstruct %v2int %70 %73
-               OpStore %ipos %75
-               OpStore %i %int_0
-               OpBranch %77
-         %77 = OpLabel
-               OpLoopMerge %78 %79 None
-               OpBranch %80
-         %80 = OpLabel
-         %81 = OpLoad %int %i
-         %82 = OpSLessThan %bool %81 %int_256
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %78
-         %83 = OpLabel
-         %86 = OpLoad %int %i
-         %88 = OpAccessChain %_ptr_Private_int %map %86
-               OpStore %88 %int_0
-               OpBranch %79
-         %79 = OpLabel
-         %89 = OpLoad %int %i
-         %91 = OpIAdd %int %89 %int_1
-               OpStore %i %91
-               OpBranch %77
-         %78 = OpLabel
-               OpStore %p %92
-               OpStore %canwalk %true
-               OpStore %v %int_0
-               OpBranch %94
-         %94 = OpLabel
-               OpLoopMerge %95 %96 None
-               OpBranch %97
-         %97 = OpLabel
-        %106 = OpLoad %int %v
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %v %107
-               OpStore %directions %int_0
-        %108 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %109 = OpLoad %int %108
-        %110 = OpSGreaterThan %bool %109 %int_0
-               OpStore %x_111_phi %110
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %111
-        %112 = OpLabel
-        %113 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %114 = OpLoad %int %113
-        %115 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %116 = OpLoad %int %115
-        %118 = OpISub %int %114 %int_2
-        %120 = OpIMul %int %116 %int_16
-        %121 = OpIAdd %int %118 %120
-        %122 = OpAccessChain %_ptr_Private_int %map %121
-        %123 = OpLoad %int %122
-        %124 = OpIEqual %bool %123 %int_0
-               OpStore %x_110 %124
-        %125 = OpLoad %bool %x_110
-               OpStore %x_111_phi %125
-               OpBranch %111
-        %111 = OpLabel
-        %126 = OpLoad %bool %x_111_phi
-               OpSelectionMerge %127 None
-               OpBranchConditional %126 %128 %127
-        %128 = OpLabel
-        %129 = OpLoad %int %directions
-        %130 = OpIAdd %int %129 %int_1
-               OpStore %directions %130
-               OpBranch %127
-        %127 = OpLabel
-        %131 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %132 = OpLoad %int %131
-        %133 = OpSGreaterThan %bool %132 %int_0
-               OpStore %x_131_phi %133
-               OpSelectionMerge %134 None
-               OpBranchConditional %133 %135 %134
-        %135 = OpLabel
-        %136 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %137 = OpLoad %int %136
-        %138 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %139 = OpLoad %int %138
-        %140 = OpISub %int %139 %int_2
-        %141 = OpIMul %int %140 %int_16
-        %142 = OpIAdd %int %137 %141
-        %143 = OpAccessChain %_ptr_Private_int %map %142
-        %144 = OpLoad %int %143
-        %145 = OpIEqual %bool %144 %int_0
-               OpStore %x_130 %145
-        %146 = OpLoad %bool %x_130
-               OpStore %x_131_phi %146
-               OpBranch %134
-        %134 = OpLabel
-        %147 = OpLoad %bool %x_131_phi
-               OpSelectionMerge %148 None
-               OpBranchConditional %147 %149 %148
-        %149 = OpLabel
-        %150 = OpLoad %int %directions
-        %151 = OpIAdd %int %150 %int_1
-               OpStore %directions %151
-               OpBranch %148
-        %148 = OpLabel
-        %152 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %153 = OpLoad %int %152
-        %154 = OpSLessThan %bool %153 %int_14
-               OpStore %x_151_phi %154
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %155
-        %156 = OpLabel
-        %157 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %158 = OpLoad %int %157
-        %159 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %160 = OpLoad %int %159
-        %161 = OpIAdd %int %158 %int_2
-        %162 = OpIMul %int %160 %int_16
-        %163 = OpIAdd %int %161 %162
-        %164 = OpAccessChain %_ptr_Private_int %map %163
-        %165 = OpLoad %int %164
-        %166 = OpIEqual %bool %165 %int_0
-               OpStore %x_150 %166
-        %167 = OpLoad %bool %x_150
-               OpStore %x_151_phi %167
-               OpBranch %155
-        %155 = OpLabel
-        %168 = OpLoad %bool %x_151_phi
-               OpSelectionMerge %169 None
-               OpBranchConditional %168 %170 %169
-        %170 = OpLabel
-        %171 = OpLoad %int %directions
-        %172 = OpIAdd %int %171 %int_1
-               OpStore %directions %172
-               OpBranch %169
-        %169 = OpLabel
-        %173 = OpISub %int %int_256 %56
-        %174 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %175 = OpLoad %int %174
-        %176 = OpSLessThan %bool %175 %int_14
-               OpStore %x_172_phi %176
-               OpSelectionMerge %177 None
-               OpBranchConditional %176 %178 %177
-        %178 = OpLabel
-        %179 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %180 = OpLoad %int %179
-        %181 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %182 = OpLoad %int %181
-        %183 = OpIAdd %int %182 %int_2
-        %184 = OpIMul %int %183 %int_16
-        %185 = OpIAdd %int %180 %184
-        %186 = OpAccessChain %_ptr_Private_int %map %185
-        %187 = OpLoad %int %186
-        %188 = OpIEqual %bool %187 %int_0
-               OpStore %x_171 %188
-        %189 = OpLoad %bool %x_171
-               OpStore %x_172_phi %189
-               OpBranch %177
-        %177 = OpLabel
-        %190 = OpLoad %bool %x_172_phi
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %191
-        %192 = OpLabel
-        %193 = OpLoad %int %directions
-        %194 = OpIAdd %int %193 %int_1
-               OpStore %directions %194
-               OpBranch %191
-        %191 = OpLabel
-        %211 = OpLoad %int %directions
-        %212 = OpIEqual %bool %211 %int_0
-               OpSelectionMerge %213 None
-               OpBranchConditional %212 %214 %215
-        %214 = OpLabel
-               OpStore %canwalk %false
-               OpStore %i %int_0
-               OpBranch %217
-        %217 = OpLabel
-               OpLoopMerge %218 %219 None
-               OpBranch %220
-        %220 = OpLabel
-        %221 = OpLoad %int %i
-        %223 = OpSLessThan %bool %221 %int_8
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %226
-        %225 = OpLabel
-               OpBranch %224
-        %226 = OpLabel
-               OpBranch %218
-        %224 = OpLabel
-               OpStore %j %int_0
-        %227 = OpISub %int %173 %221
-               OpStore %x_60 %25
-               OpSelectionMerge %228 None
-               OpBranchConditional %false %229 %228
-        %229 = OpLabel
-               OpBranch %219
-        %228 = OpLabel
-               OpBranch %230
-        %230 = OpLabel
-               OpLoopMerge %231 %232 None
-               OpBranch %233
-        %233 = OpLabel
-        %234 = OpLoad %int %j
-        %235 = OpSLessThan %bool %234 %int_8
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %238
-        %237 = OpLabel
-               OpBranch %236
-        %238 = OpLabel
-               OpBranch %231
-        %236 = OpLabel
-        %239 = OpLoad %int %j
-        %240 = OpLoad %int %i
-        %241 = OpIMul %int %239 %int_2
-        %242 = OpIMul %int %240 %int_2
-        %243 = OpIMul %int %242 %int_16
-        %244 = OpIAdd %int %241 %243
-        %245 = OpAccessChain %_ptr_Private_int %map %244
-        %246 = OpLoad %int %245
-        %247 = OpIEqual %bool %246 %int_0
-               OpSelectionMerge %248 None
-               OpBranchConditional %247 %249 %248
-        %249 = OpLabel
-        %250 = OpLoad %int %j
-        %251 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %252 = OpIMul %int %250 %int_2
-               OpStore %251 %252
-        %253 = OpLoad %int %i
-        %254 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %255 = OpIMul %int %253 %int_2
-               OpStore %254 %255
-               OpStore %canwalk %true
-               OpBranch %248
-        %248 = OpLabel
-               OpBranch %232
-        %232 = OpLabel
-        %256 = OpLoad %int %j
-        %257 = OpIAdd %int %256 %int_1
-               OpStore %j %257
-               OpBranch %230
-        %231 = OpLabel
-               OpBranch %219
-        %219 = OpLabel
-        %258 = OpLoad %int %i
-        %259 = OpIAdd %int %258 %int_1
-               OpStore %i %259
-               OpBranch %217
-        %218 = OpLabel
-        %260 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %261 = OpLoad %int %260
-        %262 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %263 = OpLoad %int %262
-        %264 = OpIMul %int %263 %int_16
-        %265 = OpIAdd %int %261 %264
-        %266 = OpAccessChain %_ptr_Private_int %map %265
-               OpStore %266 %int_1
-               OpBranch %213
-        %215 = OpLabel
-        %267 = OpLoad %int %v
-        %268 = OpLoad %int %directions
-        %269 = OpSMod %int %267 %268
-               OpStore %d %269
-        %270 = OpLoad %int %directions
-        %271 = OpLoad %int %v
-        %272 = OpIAdd %int %271 %270
-               OpStore %v %272
-        %273 = OpLoad %int %d
-        %274 = OpSGreaterThanEqual %bool %273 %int_0
-               OpStore %x_238_phi %274
-               OpSelectionMerge %275 None
-               OpBranchConditional %274 %276 %275
-        %276 = OpLabel
-        %277 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %278 = OpLoad %int %277
-        %279 = OpSGreaterThan %bool %278 %int_0
-               OpStore %x_237 %279
-        %280 = OpLoad %bool %x_237
-               OpStore %x_238_phi %280
-               OpBranch %275
-        %275 = OpLabel
-        %281 = OpLoad %bool %x_238_phi
-               OpStore %x_251_phi %281
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %282
-        %283 = OpLabel
-        %284 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %285 = OpLoad %int %284
-        %286 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %287 = OpLoad %int %286
-        %288 = OpISub %int %285 %int_2
-        %289 = OpIMul %int %287 %int_16
-        %290 = OpIAdd %int %288 %289
-        %291 = OpAccessChain %_ptr_Private_int %map %290
-        %292 = OpLoad %int %291
-        %293 = OpIEqual %bool %292 %int_0
-               OpStore %x_250 %293
-        %294 = OpLoad %bool %x_250
-               OpStore %x_251_phi %294
-               OpBranch %282
-        %282 = OpLabel
-        %295 = OpLoad %bool %x_251_phi
-               OpSelectionMerge %296 None
-               OpBranchConditional %295 %297 %296
-        %297 = OpLabel
-        %298 = OpLoad %int %d
-        %299 = OpISub %int %298 %int_1
-               OpStore %d %299
-        %300 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %301 = OpLoad %int %300
-        %302 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %303 = OpLoad %int %302
-        %304 = OpIMul %int %303 %int_16
-        %305 = OpIAdd %int %301 %304
-        %306 = OpAccessChain %_ptr_Private_int %map %305
-               OpStore %306 %int_1
-        %307 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %308 = OpLoad %int %307
-        %309 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %310 = OpLoad %int %309
-        %311 = OpISub %int %308 %int_1
-        %312 = OpIMul %int %310 %int_16
-        %313 = OpIAdd %int %311 %312
-        %314 = OpAccessChain %_ptr_Private_int %map %313
-               OpStore %314 %int_1
-        %315 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %316 = OpLoad %int %315
-        %317 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %318 = OpLoad %int %317
-        %319 = OpISub %int %316 %int_2
-        %320 = OpIMul %int %318 %int_16
-        %321 = OpIAdd %int %319 %320
-        %322 = OpAccessChain %_ptr_Private_int %map %321
-               OpStore %322 %int_1
-        %323 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %324 = OpLoad %int %323
-        %325 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %326 = OpISub %int %324 %int_2
-               OpStore %325 %326
-               OpBranch %296
-        %296 = OpLabel
-        %327 = OpLoad %int %d
-        %328 = OpSGreaterThanEqual %bool %327 %int_0
-               OpStore %x_290_phi %328
-               OpSelectionMerge %329 None
-               OpBranchConditional %328 %330 %329
-        %330 = OpLabel
-        %331 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %332 = OpLoad %int %331
-        %333 = OpSGreaterThan %bool %332 %int_0
-               OpStore %x_289 %333
-        %334 = OpLoad %bool %x_289
-               OpStore %x_290_phi %334
-               OpBranch %329
-        %329 = OpLabel
-        %335 = OpLoad %bool %x_290_phi
-               OpStore %x_303_phi %335
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %336
-        %337 = OpLabel
-        %338 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %339 = OpLoad %int %338
-        %340 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %341 = OpLoad %int %340
-        %342 = OpISub %int %341 %int_2
-        %343 = OpIMul %int %342 %int_16
-        %344 = OpIAdd %int %339 %343
-        %345 = OpAccessChain %_ptr_Private_int %map %344
-        %346 = OpLoad %int %345
-        %347 = OpIEqual %bool %346 %int_0
-               OpStore %x_302 %347
-        %348 = OpLoad %bool %x_302
-               OpStore %x_303_phi %348
-               OpBranch %336
-        %336 = OpLabel
-        %349 = OpLoad %bool %x_303_phi
-               OpSelectionMerge %350 None
-               OpBranchConditional %349 %351 %350
-        %351 = OpLabel
-        %352 = OpLoad %int %d
-        %353 = OpISub %int %352 %int_1
-               OpStore %d %353
-        %354 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %355 = OpLoad %int %354
-        %356 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %357 = OpLoad %int %356
-        %358 = OpIMul %int %357 %int_16
-        %359 = OpIAdd %int %355 %358
-        %360 = OpAccessChain %_ptr_Private_int %map %359
-               OpStore %360 %int_1
-        %361 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %362 = OpLoad %int %361
-        %363 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %364 = OpLoad %int %363
-        %365 = OpISub %int %364 %int_1
-        %366 = OpIMul %int %365 %int_16
-        %367 = OpIAdd %int %362 %366
-        %368 = OpAccessChain %_ptr_Private_int %map %367
-               OpStore %368 %int_1
-        %369 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %370 = OpLoad %int %369
-        %371 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %372 = OpLoad %int %371
-        %373 = OpISub %int %372 %int_2
-        %374 = OpIMul %int %373 %int_16
-        %375 = OpIAdd %int %370 %374
-        %376 = OpAccessChain %_ptr_Private_int %map %375
-               OpStore %376 %int_1
-        %377 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %378 = OpLoad %int %377
-        %379 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %380 = OpISub %int %378 %int_2
-               OpStore %379 %380
-               OpBranch %350
-        %350 = OpLabel
-        %381 = OpLoad %int %d
-        %382 = OpSGreaterThanEqual %bool %381 %int_0
-               OpStore %x_342_phi %382
-               OpSelectionMerge %383 None
-               OpBranchConditional %382 %384 %383
-        %384 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %386 = OpLoad %int %385
-        %387 = OpSLessThan %bool %386 %int_14
-               OpStore %x_341 %387
-        %388 = OpLoad %bool %x_341
-               OpStore %x_342_phi %388
-               OpBranch %383
-        %383 = OpLabel
-        %389 = OpLoad %bool %x_342_phi
-               OpStore %x_355_phi %389
-               OpSelectionMerge %390 None
-               OpBranchConditional %389 %391 %390
-        %391 = OpLabel
-        %392 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %393 = OpLoad %int %392
-        %394 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %395 = OpLoad %int %394
-        %396 = OpIAdd %int %393 %int_2
-        %397 = OpIMul %int %395 %int_16
-        %398 = OpIAdd %int %396 %397
-        %399 = OpAccessChain %_ptr_Private_int %map %398
-        %400 = OpLoad %int %399
-        %401 = OpIEqual %bool %400 %int_0
-               OpStore %x_354 %401
-        %402 = OpLoad %bool %x_354
-               OpStore %x_355_phi %402
-               OpBranch %390
-        %390 = OpLabel
-        %403 = OpLoad %bool %x_355_phi
-               OpSelectionMerge %404 None
-               OpBranchConditional %403 %405 %404
-        %405 = OpLabel
-        %406 = OpLoad %int %d
-        %407 = OpISub %int %406 %int_1
-               OpStore %d %407
-        %408 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %409 = OpLoad %int %408
-        %410 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %411 = OpLoad %int %410
-        %412 = OpIMul %int %411 %int_16
-        %413 = OpIAdd %int %409 %412
-        %414 = OpAccessChain %_ptr_Private_int %map %413
-               OpStore %414 %int_1
-        %415 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %416 = OpLoad %int %415
-        %417 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %418 = OpLoad %int %417
-        %419 = OpIAdd %int %416 %int_1
-        %420 = OpIMul %int %418 %int_16
-        %421 = OpIAdd %int %419 %420
-        %422 = OpAccessChain %_ptr_Private_int %map %421
-               OpStore %422 %int_1
-        %423 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %424 = OpLoad %int %423
-        %425 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %426 = OpLoad %int %425
-        %427 = OpIAdd %int %424 %int_2
-        %428 = OpIMul %int %426 %int_16
-        %429 = OpIAdd %int %427 %428
-        %430 = OpAccessChain %_ptr_Private_int %map %429
-               OpStore %430 %int_1
-        %431 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %432 = OpLoad %int %431
-        %433 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %434 = OpIAdd %int %432 %int_2
-               OpStore %433 %434
-               OpBranch %404
-        %404 = OpLabel
-        %435 = OpLoad %int %d
-        %436 = OpSGreaterThanEqual %bool %435 %int_0
-               OpStore %x_394_phi %436
-               OpSelectionMerge %437 None
-               OpBranchConditional %436 %438 %437
-        %438 = OpLabel
-        %439 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %440 = OpLoad %int %439
-        %441 = OpSLessThan %bool %440 %int_14
-               OpStore %x_393 %441
-        %442 = OpLoad %bool %x_393
-               OpStore %x_394_phi %442
-               OpBranch %437
-        %437 = OpLabel
-        %443 = OpLoad %bool %x_394_phi
-               OpStore %x_407_phi %443
-               OpSelectionMerge %444 None
-               OpBranchConditional %443 %445 %444
-        %445 = OpLabel
-        %446 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %447 = OpLoad %int %446
-        %448 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %449 = OpLoad %int %448
-        %450 = OpIAdd %int %449 %int_2
-        %451 = OpIMul %int %450 %int_16
-        %452 = OpIAdd %int %447 %451
-        %453 = OpAccessChain %_ptr_Private_int %map %452
-        %454 = OpLoad %int %453
-        %455 = OpIEqual %bool %454 %int_0
-               OpStore %x_406 %455
-        %456 = OpLoad %bool %x_406
-               OpStore %x_407_phi %456
-               OpBranch %444
-        %444 = OpLabel
-        %457 = OpLoad %bool %x_407_phi
-               OpSelectionMerge %458 None
-               OpBranchConditional %457 %459 %458
-        %459 = OpLabel
-        %460 = OpLoad %int %d
-        %461 = OpISub %int %460 %int_1
-               OpStore %d %461
-        %462 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %463 = OpLoad %int %462
-        %464 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %465 = OpLoad %int %464
-        %466 = OpIMul %int %465 %int_16
-        %467 = OpIAdd %int %463 %466
-        %468 = OpAccessChain %_ptr_Private_int %map %467
-               OpStore %468 %int_1
-        %469 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %470 = OpLoad %int %469
-        %471 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %472 = OpLoad %int %471
-        %473 = OpIAdd %int %472 %int_1
-        %474 = OpIMul %int %473 %int_16
-        %475 = OpIAdd %int %470 %474
-        %476 = OpAccessChain %_ptr_Private_int %map %475
-               OpStore %476 %int_1
-        %477 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %478 = OpLoad %int %477
-        %479 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %480 = OpLoad %int %479
-        %481 = OpIAdd %int %480 %int_2
-        %482 = OpIMul %int %481 %int_16
-        %483 = OpIAdd %int %478 %482
-        %484 = OpAccessChain %_ptr_Private_int %map %483
-               OpStore %484 %int_1
-        %485 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %486 = OpLoad %int %485
-        %487 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %488 = OpIAdd %int %486 %int_2
-               OpStore %487 %488
-               OpBranch %458
-        %458 = OpLabel
-               OpBranch %213
-        %213 = OpLabel
-        %489 = OpAccessChain %_ptr_Function_int %ipos %uint_1
-        %490 = OpLoad %int %489
-        %491 = OpAccessChain %_ptr_Function_int %ipos %uint_0
-        %492 = OpLoad %int %491
-        %493 = OpIMul %int %490 %int_16
-        %494 = OpIAdd %int %493 %492
-        %495 = OpAccessChain %_ptr_Private_int %map %494
-        %496 = OpLoad %int %495
-        %497 = OpIEqual %bool %496 %int_1
-               OpSelectionMerge %498 None
-               OpBranchConditional %497 %499 %498
-        %499 = OpLabel
-               OpStore %x_GLF_color %501
-               OpReturn
-        %498 = OpLabel
-               OpBranch %96
-         %96 = OpLabel
-        %502 = OpLoad %bool %canwalk
-               OpBranchConditional %502 %94 %95
-         %95 = OpLabel
-               OpStore %x_GLF_color %503
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %504
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %508 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %509 = OpFunctionCall %void %main_1
-        %510 = OpLoad %v4float %x_GLF_color
-        %511 = OpCompositeConstruct %main_out %510
-               OpReturnValue %511
-               OpFunctionEnd
-       %main = OpFunction %void None %28
-        %513 = OpLabel
-        %515 = OpLoad %v4float %gl_FragCoord_param_1
-        %514 = OpFunctionCall %main_out %main_inner %515
-        %516 = OpCompositeExtract %v4float %514 0
-               OpStore %x_GLF_color_1_1 %516
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.wgsl
deleted file mode 100644
index 14e531e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-dead-break-and-unroll/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,357 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> map : array<i32, 256>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> x_60 : mat2x4<f32> = mat2x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var ipos : vec2<i32>;
-  var i : i32;
-  var p : vec2<i32>;
-  var canwalk : bool;
-  var v : i32;
-  var directions : i32;
-  var j : i32;
-  var d : i32;
-  let x_63 : vec4<f32> = gl_FragCoord;
-  let x_67 : vec2<f32> = x_7.resolution;
-  let x_68 : i32 = -((256 - 14));
-  pos = (vec2<f32>(x_63.x, x_63.y) / x_67);
-  let x_71 : f32 = pos.x;
-  let x_75 : f32 = pos.y;
-  ipos = vec2<i32>(i32((x_71 * 16.0)), i32((x_75 * 16.0)));
-  i = 0;
-  loop {
-    let x_83 : i32 = i;
-    if ((x_83 < 256)) {
-    } else {
-      break;
-    }
-    let x_86 : i32 = i;
-    map[x_86] = 0;
-
-    continuing {
-      let x_88 : i32 = i;
-      i = (x_88 + 1);
-    }
-  }
-  p = vec2<i32>(0, 0);
-  canwalk = true;
-  v = 0;
-  loop {
-    var x_110 : bool;
-    var x_130 : bool;
-    var x_150 : bool;
-    var x_171 : bool;
-    var x_111_phi : bool;
-    var x_131_phi : bool;
-    var x_151_phi : bool;
-    var x_172_phi : bool;
-    let x_94 : i32 = v;
-    v = (x_94 + 1);
-    directions = 0;
-    let x_97 : i32 = p.x;
-    let x_98 : bool = (x_97 > 0);
-    x_111_phi = x_98;
-    if (x_98) {
-      let x_102 : i32 = p.x;
-      let x_105 : i32 = p.y;
-      let x_109 : i32 = map[((x_102 - 2) + (x_105 * 16))];
-      x_110 = (x_109 == 0);
-      x_111_phi = x_110;
-    }
-    let x_111 : bool = x_111_phi;
-    if (x_111) {
-      let x_114 : i32 = directions;
-      directions = (x_114 + 1);
-    }
-    let x_117 : i32 = p.y;
-    let x_118 : bool = (x_117 > 0);
-    x_131_phi = x_118;
-    if (x_118) {
-      let x_122 : i32 = p.x;
-      let x_124 : i32 = p.y;
-      let x_129 : i32 = map[(x_122 + ((x_124 - 2) * 16))];
-      x_130 = (x_129 == 0);
-      x_131_phi = x_130;
-    }
-    let x_131 : bool = x_131_phi;
-    if (x_131) {
-      let x_134 : i32 = directions;
-      directions = (x_134 + 1);
-    }
-    let x_137 : i32 = p.x;
-    let x_138 : bool = (x_137 < 14);
-    x_151_phi = x_138;
-    if (x_138) {
-      let x_142 : i32 = p.x;
-      let x_145 : i32 = p.y;
-      let x_149 : i32 = map[((x_142 + 2) + (x_145 * 16))];
-      x_150 = (x_149 == 0);
-      x_151_phi = x_150;
-    }
-    let x_151 : bool = x_151_phi;
-    if (x_151) {
-      let x_154 : i32 = directions;
-      directions = (x_154 + 1);
-    }
-    let x_156 : i32 = (256 - x_68);
-    let x_158 : i32 = p.y;
-    let x_159 : bool = (x_158 < 14);
-    x_172_phi = x_159;
-    if (x_159) {
-      let x_163 : i32 = p.x;
-      let x_165 : i32 = p.y;
-      let x_170 : i32 = map[(x_163 + ((x_165 + 2) * 16))];
-      x_171 = (x_170 == 0);
-      x_172_phi = x_171;
-    }
-    let x_172 : bool = x_172_phi;
-    if (x_172) {
-      let x_175 : i32 = directions;
-      directions = (x_175 + 1);
-    }
-    var x_237 : bool;
-    var x_250 : bool;
-    var x_289 : bool;
-    var x_302 : bool;
-    var x_341 : bool;
-    var x_354 : bool;
-    var x_393 : bool;
-    var x_406 : bool;
-    var x_238_phi : bool;
-    var x_251_phi : bool;
-    var x_290_phi : bool;
-    var x_303_phi : bool;
-    var x_342_phi : bool;
-    var x_355_phi : bool;
-    var x_394_phi : bool;
-    var x_407_phi : bool;
-    let x_177 : i32 = directions;
-    if ((x_177 == 0)) {
-      canwalk = false;
-      i = 0;
-      loop {
-        let x_186 : i32 = i;
-        if ((x_186 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        let x_189 : i32 = (x_156 - x_186);
-        x_60 = mat2x4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-        if (false) {
-          continue;
-        }
-        loop {
-          let x_194 : i32 = j;
-          if ((x_194 < 8)) {
-          } else {
-            break;
-          }
-          let x_197 : i32 = j;
-          let x_199 : i32 = i;
-          let x_204 : i32 = map[((x_197 * 2) + ((x_199 * 2) * 16))];
-          if ((x_204 == 0)) {
-            let x_208 : i32 = j;
-            p.x = (x_208 * 2);
-            let x_211 : i32 = i;
-            p.y = (x_211 * 2);
-            canwalk = true;
-          }
-
-          continuing {
-            let x_214 : i32 = j;
-            j = (x_214 + 1);
-          }
-        }
-
-        continuing {
-          let x_216 : i32 = i;
-          i = (x_216 + 1);
-        }
-      }
-      let x_219 : i32 = p.x;
-      let x_221 : i32 = p.y;
-      map[(x_219 + (x_221 * 16))] = 1;
-    } else {
-      let x_225 : i32 = v;
-      let x_226 : i32 = directions;
-      d = (x_225 % x_226);
-      let x_228 : i32 = directions;
-      let x_229 : i32 = v;
-      v = (x_229 + x_228);
-      let x_231 : i32 = d;
-      let x_232 : bool = (x_231 >= 0);
-      x_238_phi = x_232;
-      if (x_232) {
-        let x_236 : i32 = p.x;
-        x_237 = (x_236 > 0);
-        x_238_phi = x_237;
-      }
-      let x_238 : bool = x_238_phi;
-      x_251_phi = x_238;
-      if (x_238) {
-        let x_242 : i32 = p.x;
-        let x_245 : i32 = p.y;
-        let x_249 : i32 = map[((x_242 - 2) + (x_245 * 16))];
-        x_250 = (x_249 == 0);
-        x_251_phi = x_250;
-      }
-      let x_251 : bool = x_251_phi;
-      if (x_251) {
-        let x_254 : i32 = d;
-        d = (x_254 - 1);
-        let x_257 : i32 = p.x;
-        let x_259 : i32 = p.y;
-        map[(x_257 + (x_259 * 16))] = 1;
-        let x_264 : i32 = p.x;
-        let x_267 : i32 = p.y;
-        map[((x_264 - 1) + (x_267 * 16))] = 1;
-        let x_272 : i32 = p.x;
-        let x_275 : i32 = p.y;
-        map[((x_272 - 2) + (x_275 * 16))] = 1;
-        let x_280 : i32 = p.x;
-        p.x = (x_280 - 2);
-      }
-      let x_283 : i32 = d;
-      let x_284 : bool = (x_283 >= 0);
-      x_290_phi = x_284;
-      if (x_284) {
-        let x_288 : i32 = p.y;
-        x_289 = (x_288 > 0);
-        x_290_phi = x_289;
-      }
-      let x_290 : bool = x_290_phi;
-      x_303_phi = x_290;
-      if (x_290) {
-        let x_294 : i32 = p.x;
-        let x_296 : i32 = p.y;
-        let x_301 : i32 = map[(x_294 + ((x_296 - 2) * 16))];
-        x_302 = (x_301 == 0);
-        x_303_phi = x_302;
-      }
-      let x_303 : bool = x_303_phi;
-      if (x_303) {
-        let x_306 : i32 = d;
-        d = (x_306 - 1);
-        let x_309 : i32 = p.x;
-        let x_311 : i32 = p.y;
-        map[(x_309 + (x_311 * 16))] = 1;
-        let x_316 : i32 = p.x;
-        let x_318 : i32 = p.y;
-        map[(x_316 + ((x_318 - 1) * 16))] = 1;
-        let x_324 : i32 = p.x;
-        let x_326 : i32 = p.y;
-        map[(x_324 + ((x_326 - 2) * 16))] = 1;
-        let x_332 : i32 = p.y;
-        p.y = (x_332 - 2);
-      }
-      let x_335 : i32 = d;
-      let x_336 : bool = (x_335 >= 0);
-      x_342_phi = x_336;
-      if (x_336) {
-        let x_340 : i32 = p.x;
-        x_341 = (x_340 < 14);
-        x_342_phi = x_341;
-      }
-      let x_342 : bool = x_342_phi;
-      x_355_phi = x_342;
-      if (x_342) {
-        let x_346 : i32 = p.x;
-        let x_349 : i32 = p.y;
-        let x_353 : i32 = map[((x_346 + 2) + (x_349 * 16))];
-        x_354 = (x_353 == 0);
-        x_355_phi = x_354;
-      }
-      let x_355 : bool = x_355_phi;
-      if (x_355) {
-        let x_358 : i32 = d;
-        d = (x_358 - 1);
-        let x_361 : i32 = p.x;
-        let x_363 : i32 = p.y;
-        map[(x_361 + (x_363 * 16))] = 1;
-        let x_368 : i32 = p.x;
-        let x_371 : i32 = p.y;
-        map[((x_368 + 1) + (x_371 * 16))] = 1;
-        let x_376 : i32 = p.x;
-        let x_379 : i32 = p.y;
-        map[((x_376 + 2) + (x_379 * 16))] = 1;
-        let x_384 : i32 = p.x;
-        p.x = (x_384 + 2);
-      }
-      let x_387 : i32 = d;
-      let x_388 : bool = (x_387 >= 0);
-      x_394_phi = x_388;
-      if (x_388) {
-        let x_392 : i32 = p.y;
-        x_393 = (x_392 < 14);
-        x_394_phi = x_393;
-      }
-      let x_394 : bool = x_394_phi;
-      x_407_phi = x_394;
-      if (x_394) {
-        let x_398 : i32 = p.x;
-        let x_400 : i32 = p.y;
-        let x_405 : i32 = map[(x_398 + ((x_400 + 2) * 16))];
-        x_406 = (x_405 == 0);
-        x_407_phi = x_406;
-      }
-      let x_407 : bool = x_407_phi;
-      if (x_407) {
-        let x_410 : i32 = d;
-        d = (x_410 - 1);
-        let x_413 : i32 = p.x;
-        let x_415 : i32 = p.y;
-        map[(x_413 + (x_415 * 16))] = 1;
-        let x_420 : i32 = p.x;
-        let x_422 : i32 = p.y;
-        map[(x_420 + ((x_422 + 1) * 16))] = 1;
-        let x_428 : i32 = p.x;
-        let x_430 : i32 = p.y;
-        map[(x_428 + ((x_430 + 2) * 16))] = 1;
-        let x_436 : i32 = p.y;
-        p.y = (x_436 + 2);
-      }
-    }
-    let x_440 : i32 = ipos.y;
-    let x_443 : i32 = ipos.x;
-    let x_446 : i32 = map[((x_440 * 16) + x_443)];
-    if ((x_446 == 1)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      return;
-    }
-
-    continuing {
-      let x_450 : bool = canwalk;
-      if (x_450) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 400866d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,111 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_20 : register(b0, space0) {
-  uint4 x_20[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int index = 0;
-static int state[16] = (int[16])0;
-
-bool collision_vf2_vf4_(inout float2 pos, inout float4 quad) {
-  const float x_114 = pos.x;
-  const float x_116 = quad.x;
-  if ((x_114 < x_116)) {
-    return false;
-  }
-  const float x_121 = pos.y;
-  const float x_123 = quad.y;
-  if ((x_121 < x_123)) {
-    return false;
-  }
-  const float x_128 = pos.x;
-  const float x_130 = quad.x;
-  const float x_132 = quad.z;
-  if ((x_128 > (x_130 + x_132))) {
-    return false;
-  }
-  const float x_138 = pos.y;
-  const float x_140 = quad.y;
-  const float x_142 = quad.w;
-  if ((x_138 > (x_140 + x_142))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(inout float2 pos_1) {
-  float4 res = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  float2 param = float2(0.0f, 0.0f);
-  float4 param_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 indexable[8] = (float4[8])0;
-  float4 indexable_1[8] = (float4[8])0;
-  float4 indexable_2[8] = (float4[8])0;
-  float4 indexable_3[16] = (float4[16])0;
-  res = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 8); i = (i + 1)) {
-      const int x_155 = i;
-      const float2 x_156 = pos_1;
-      param = x_156;
-      const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      indexable = tint_symbol_4;
-      const float4 x_158 = indexable[x_155];
-      param_1 = x_158;
-      const bool x_159 = collision_vf2_vf4_(param, param_1);
-      if (x_159) {
-        const int x_162 = i;
-        const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_1 = tint_symbol_5;
-        const float x_164 = indexable_1[x_162].x;
-        const int x_166 = i;
-        const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_2 = tint_symbol_6;
-        const float x_168 = indexable_2[x_166].y;
-        const int x_171 = i;
-        const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-        indexable_3 = tint_symbol_7;
-        const float4 x_177 = indexable_3[((((int(x_164) * int(x_168)) + (x_171 * 9)) + 11) % 16)];
-        res = x_177;
-      }
-    }
-  }
-  return res;
-}
-
-void main_1() {
-  float2 lin = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  const float4 x_102 = gl_FragCoord;
-  const float2 x_105 = asfloat(x_20[0].xy);
-  lin = (float2(x_102.x, x_102.y) / x_105);
-  lin = floor((lin * 32.0f));
-  param_2 = lin;
-  const float4 x_111 = match_vf2_(param_2);
-  x_GLF_color = x_111;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5e37f38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,128 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[16];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[8];
-};
-struct tint_array_wrapper_2 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool collision_vf2_vf4_(thread float2* const pos, thread float4* const quad) {
-  float const x_114 = (*(pos)).x;
-  float const x_116 = (*(quad)).x;
-  if ((x_114 < x_116)) {
-    return false;
-  }
-  float const x_121 = (*(pos)).y;
-  float const x_123 = (*(quad)).y;
-  if ((x_121 < x_123)) {
-    return false;
-  }
-  float const x_128 = (*(pos)).x;
-  float const x_130 = (*(quad)).x;
-  float const x_132 = (*(quad)).z;
-  if ((x_128 > (x_130 + x_132))) {
-    return false;
-  }
-  float const x_138 = (*(pos)).y;
-  float const x_140 = (*(quad)).y;
-  float const x_142 = (*(quad)).w;
-  if ((x_138 > (x_140 + x_142))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(thread float2* const pos_1) {
-  float4 res = 0.0f;
-  int i = 0;
-  float2 param = 0.0f;
-  float4 param_1 = 0.0f;
-  tint_array_wrapper_1 indexable = {};
-  tint_array_wrapper_1 indexable_1 = {};
-  tint_array_wrapper_1 indexable_2 = {};
-  tint_array_wrapper_2 indexable_3 = {};
-  res = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_152 = i;
-    if ((x_152 < 8)) {
-    } else {
-      break;
-    }
-    int const x_155 = i;
-    float2 const x_156 = *(pos_1);
-    param = x_156;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-    indexable = tint_symbol_2;
-    float4 const x_158 = indexable.arr[x_155];
-    param_1 = x_158;
-    bool const x_159 = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_159) {
-      int const x_162 = i;
-      tint_array_wrapper_1 const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_1 = tint_symbol_3;
-      float const x_164 = indexable_1.arr[x_162].x;
-      int const x_166 = i;
-      tint_array_wrapper_1 const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_2 = tint_symbol_4;
-      float const x_168 = indexable_2.arr[x_166].y;
-      int const x_171 = i;
-      tint_array_wrapper_2 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      indexable_3 = tint_symbol_5;
-      float4 const x_177 = indexable_3.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_164)) * as_type<uint>(int(x_168))))) + as_type<uint>(as_type<int>((as_type<uint>(x_171) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      res = x_177;
-    }
-    {
-      int const x_178 = i;
-      i = as_type<int>((as_type<uint>(x_178) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_180 = res;
-  return x_180;
-}
-
-void main_1(constant buf0& x_20, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  float2 lin = 0.0f;
-  float2 param_2 = 0.0f;
-  float4 const x_102 = *(tint_symbol_7);
-  float2 const x_105 = x_20.resolution;
-  lin = (float2(x_102.x, x_102.y) / x_105);
-  float2 const x_107 = lin;
-  lin = floor((x_107 * 32.0f));
-  float2 const x_110 = lin;
-  param_2 = x_110;
-  float4 const x_111 = match_vf2_(&(param_2));
-  *(tint_symbol_8) = x_111;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_20, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_20, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_20 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_20, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 24b7928..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,306 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 221
-; Schema: 0
-               OpCapability Shader
-        %202 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_20 "x_20"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %index "index"
-               OpName %state "state"
-               OpName %collision_vf2_vf4_ "collision_vf2_vf4_"
-               OpName %pos "pos"
-               OpName %quad "quad"
-               OpName %match_vf2_ "match_vf2_"
-               OpName %pos_1 "pos_1"
-               OpName %res "res"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %indexable_2 "indexable_2"
-               OpName %indexable_3 "indexable_3"
-               OpName %main_1 "main_1"
-               OpName %lin "lin"
-               OpName %param_2 "param_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-               OpDecorate %_arr_int_uint_16 ArrayStride 4
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_20 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %18 = OpConstantNull %int
-      %index = OpVariable %_ptr_Private_int Private %18
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_int_uint_16 = OpTypeArray %int %uint_16
-%_ptr_Private__arr_int_uint_16 = OpTypePointer Private %_arr_int_uint_16
-         %24 = OpConstantNull %_arr_int_uint_16
-      %state = OpVariable %_ptr_Private__arr_int_uint_16 Private %24
-       %bool = OpTypeBool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %25 = OpTypeFunction %bool %_ptr_Function_v2float %_ptr_Function_v4float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-         %84 = OpTypeFunction %v4float %_ptr_Function_v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %92 = OpConstantNull %v2float
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %98 = OpConstantNull %_arr_v4float_uint_8
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-        %104 = OpConstantNull %_arr_v4float_uint_16
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-        %107 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_8 = OpConstant %int 8
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-        %124 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-        %125 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-        %126 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-        %128 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-        %131 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-        %133 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-        %135 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-        %137 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-        %138 = OpConstantComposite %_arr_v4float_uint_8 %124 %125 %126 %128 %131 %133 %135 %137
-    %float_0 = OpConstant %float 0
-        %154 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %161 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %167 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %168 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %169 = OpConstantComposite %_arr_v4float_uint_16 %154 %155 %156 %157 %158 %159 %160 %161 %154 %162 %163 %164 %165 %166 %167 %168
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %186 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-   %main_out = OpTypeStruct %v4float
-        %208 = OpTypeFunction %main_out %v4float
-%collision_vf2_vf4_ = OpFunction %bool None %25
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-       %quad = OpFunctionParameter %_ptr_Function_v4float
-         %32 = OpLabel
-         %36 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %37 = OpLoad %float %36
-         %39 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %37 %40
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpReturnValue %false
-         %42 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %48 = OpLoad %float %47
-         %50 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %51 = OpLoad %float %50
-         %52 = OpFOrdLessThan %bool %48 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpReturnValue %false
-         %53 = OpLabel
-         %56 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %60 = OpLoad %float %59
-         %63 = OpAccessChain %_ptr_Function_float %quad %uint_2
-         %64 = OpLoad %float %63
-         %65 = OpFAdd %float %60 %64
-         %66 = OpFOrdGreaterThan %bool %57 %65
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-               OpReturnValue %false
-         %67 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %74 = OpLoad %float %73
-         %77 = OpAccessChain %_ptr_Function_float %quad %uint_3
-         %78 = OpLoad %float %77
-         %79 = OpFAdd %float %74 %78
-         %80 = OpFOrdGreaterThan %bool %71 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %81
-         %82 = OpLabel
-               OpReturnValue %false
-         %81 = OpLabel
-               OpReturnValue %true
-               OpFunctionEnd
- %match_vf2_ = OpFunction %v4float None %84
-      %pos_1 = OpFunctionParameter %_ptr_Function_v2float
-         %87 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %7
-          %i = OpVariable %_ptr_Function_int Function %18
-      %param = OpVariable %_ptr_Function_v2float Function %92
-    %param_1 = OpVariable %_ptr_Function_v4float Function %7
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %98
-%indexable_1 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %98
-%indexable_2 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %98
-%indexable_3 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %104
-               OpStore %res %107
-               OpStore %i %int_0
-               OpBranch %109
-        %109 = OpLabel
-               OpLoopMerge %110 %111 None
-               OpBranch %112
-        %112 = OpLabel
-        %113 = OpLoad %int %i
-        %115 = OpSLessThan %bool %113 %int_8
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-               OpBranch %116
-        %118 = OpLabel
-               OpBranch %110
-        %116 = OpLabel
-        %119 = OpLoad %int %i
-        %121 = OpLoad %v2float %pos_1
-               OpStore %param %121
-               OpStore %indexable %138
-        %139 = OpAccessChain %_ptr_Function_v4float %indexable %119
-        %140 = OpLoad %v4float %139
-               OpStore %param_1 %140
-        %141 = OpFunctionCall %bool %collision_vf2_vf4_ %param %param_1
-               OpSelectionMerge %144 None
-               OpBranchConditional %141 %145 %144
-        %145 = OpLabel
-        %146 = OpLoad %int %i
-               OpStore %indexable_1 %138
-        %147 = OpAccessChain %_ptr_Function_float %indexable_1 %146 %uint_0
-        %148 = OpLoad %float %147
-        %149 = OpLoad %int %i
-               OpStore %indexable_2 %138
-        %150 = OpAccessChain %_ptr_Function_float %indexable_2 %149 %uint_1
-        %151 = OpLoad %float %150
-        %152 = OpLoad %int %i
-               OpStore %indexable_3 %169
-        %170 = OpConvertFToS %int %148
-        %171 = OpConvertFToS %int %151
-        %172 = OpIMul %int %170 %171
-        %174 = OpIMul %int %152 %int_9
-        %175 = OpIAdd %int %172 %174
-        %177 = OpIAdd %int %175 %int_11
-        %179 = OpSMod %int %177 %int_16
-        %180 = OpAccessChain %_ptr_Function_v4float %indexable_3 %179
-        %181 = OpLoad %v4float %180
-               OpStore %res %181
-               OpBranch %144
-        %144 = OpLabel
-               OpBranch %111
-        %111 = OpLabel
-        %182 = OpLoad %int %i
-        %184 = OpIAdd %int %182 %int_1
-               OpStore %i %184
-               OpBranch %109
-        %110 = OpLabel
-        %185 = OpLoad %v4float %res
-               OpReturnValue %185
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %186
-        %189 = OpLabel
-        %lin = OpVariable %_ptr_Function_v2float Function %92
-    %param_2 = OpVariable %_ptr_Function_v2float Function %92
-        %192 = OpLoad %v4float %gl_FragCoord
-        %194 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_0
-        %195 = OpLoad %v2float %194
-        %196 = OpCompositeExtract %float %192 0
-        %197 = OpCompositeExtract %float %192 1
-        %198 = OpCompositeConstruct %v2float %196 %197
-        %199 = OpFDiv %v2float %198 %195
-               OpStore %lin %199
-        %200 = OpLoad %v2float %lin
-        %204 = OpVectorTimesScalar %v2float %200 %float_32
-        %201 = OpExtInst %v2float %202 Floor %204
-               OpStore %lin %201
-        %205 = OpLoad %v2float %lin
-               OpStore %param_2 %205
-        %206 = OpFunctionCall %v4float %match_vf2_ %param_2
-               OpStore %x_GLF_color %206
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %208
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %212 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %213 = OpFunctionCall %void %main_1
-        %214 = OpLoad %v4float %x_GLF_color
-        %215 = OpCompositeConstruct %main_out %214
-               OpReturnValue %215
-               OpFunctionEnd
-       %main = OpFunction %void None %186
-        %217 = OpLabel
-        %219 = OpLoad %v4float %gl_FragCoord_param_1
-        %218 = OpFunctionCall %main_out %main_inner %219
-        %220 = OpCompositeExtract %v4float %218 0
-               OpStore %x_GLF_color_1_1 %220
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f8f9584..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,113 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> index : i32;
-
-var<private> state : array<i32, 16>;
-
-fn collision_vf2_vf4_(pos : ptr<function, vec2<f32>>, quad : ptr<function, vec4<f32>>) -> bool {
-  let x_114 : f32 = (*(pos)).x;
-  let x_116 : f32 = (*(quad)).x;
-  if ((x_114 < x_116)) {
-    return false;
-  }
-  let x_121 : f32 = (*(pos)).y;
-  let x_123 : f32 = (*(quad)).y;
-  if ((x_121 < x_123)) {
-    return false;
-  }
-  let x_128 : f32 = (*(pos)).x;
-  let x_130 : f32 = (*(quad)).x;
-  let x_132 : f32 = (*(quad)).z;
-  if ((x_128 > (x_130 + x_132))) {
-    return false;
-  }
-  let x_138 : f32 = (*(pos)).y;
-  let x_140 : f32 = (*(quad)).y;
-  let x_142 : f32 = (*(quad)).w;
-  if ((x_138 > (x_140 + x_142))) {
-    return false;
-  }
-  return true;
-}
-
-fn match_vf2_(pos_1 : ptr<function, vec2<f32>>) -> vec4<f32> {
-  var res : vec4<f32>;
-  var i : i32;
-  var param : vec2<f32>;
-  var param_1 : vec4<f32>;
-  var indexable : array<vec4<f32>, 8>;
-  var indexable_1 : array<vec4<f32>, 8>;
-  var indexable_2 : array<vec4<f32>, 8>;
-  var indexable_3 : array<vec4<f32>, 16>;
-  res = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  i = 0;
-  loop {
-    let x_152 : i32 = i;
-    if ((x_152 < 8)) {
-    } else {
-      break;
-    }
-    let x_155 : i32 = i;
-    let x_156 : vec2<f32> = *(pos_1);
-    param = x_156;
-    indexable = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-    let x_158 : vec4<f32> = indexable[x_155];
-    param_1 = x_158;
-    let x_159 : bool = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_159) {
-      let x_162 : i32 = i;
-      indexable_1 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_164 : f32 = indexable_1[x_162].x;
-      let x_166 : i32 = i;
-      indexable_2 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_168 : f32 = indexable_2[x_166].y;
-      let x_171 : i32 = i;
-      indexable_3 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      let x_177 : vec4<f32> = indexable_3[((((i32(x_164) * i32(x_168)) + (x_171 * 9)) + 11) % 16)];
-      res = x_177;
-    }
-
-    continuing {
-      let x_178 : i32 = i;
-      i = (x_178 + 1);
-    }
-  }
-  let x_180 : vec4<f32> = res;
-  return x_180;
-}
-
-fn main_1() {
-  var lin : vec2<f32>;
-  var param_2 : vec2<f32>;
-  let x_102 : vec4<f32> = gl_FragCoord;
-  let x_105 : vec2<f32> = x_20.resolution;
-  lin = (vec2<f32>(x_102.x, x_102.y) / x_105);
-  let x_107 : vec2<f32> = lin;
-  lin = floor((x_107 * 32.0));
-  let x_110 : vec2<f32> = lin;
-  param_2 = x_110;
-  let x_111 : vec4<f32> = match_vf2_(&(param_2));
-  x_GLF_color = x_111;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 400866d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,111 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_20 : register(b0, space0) {
-  uint4 x_20[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int index = 0;
-static int state[16] = (int[16])0;
-
-bool collision_vf2_vf4_(inout float2 pos, inout float4 quad) {
-  const float x_114 = pos.x;
-  const float x_116 = quad.x;
-  if ((x_114 < x_116)) {
-    return false;
-  }
-  const float x_121 = pos.y;
-  const float x_123 = quad.y;
-  if ((x_121 < x_123)) {
-    return false;
-  }
-  const float x_128 = pos.x;
-  const float x_130 = quad.x;
-  const float x_132 = quad.z;
-  if ((x_128 > (x_130 + x_132))) {
-    return false;
-  }
-  const float x_138 = pos.y;
-  const float x_140 = quad.y;
-  const float x_142 = quad.w;
-  if ((x_138 > (x_140 + x_142))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(inout float2 pos_1) {
-  float4 res = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  float2 param = float2(0.0f, 0.0f);
-  float4 param_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 indexable[8] = (float4[8])0;
-  float4 indexable_1[8] = (float4[8])0;
-  float4 indexable_2[8] = (float4[8])0;
-  float4 indexable_3[16] = (float4[16])0;
-  res = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 8); i = (i + 1)) {
-      const int x_155 = i;
-      const float2 x_156 = pos_1;
-      param = x_156;
-      const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      indexable = tint_symbol_4;
-      const float4 x_158 = indexable[x_155];
-      param_1 = x_158;
-      const bool x_159 = collision_vf2_vf4_(param, param_1);
-      if (x_159) {
-        const int x_162 = i;
-        const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_1 = tint_symbol_5;
-        const float x_164 = indexable_1[x_162].x;
-        const int x_166 = i;
-        const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_2 = tint_symbol_6;
-        const float x_168 = indexable_2[x_166].y;
-        const int x_171 = i;
-        const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-        indexable_3 = tint_symbol_7;
-        const float4 x_177 = indexable_3[((((int(x_164) * int(x_168)) + (x_171 * 9)) + 11) % 16)];
-        res = x_177;
-      }
-    }
-  }
-  return res;
-}
-
-void main_1() {
-  float2 lin = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  const float4 x_102 = gl_FragCoord;
-  const float2 x_105 = asfloat(x_20[0].xy);
-  lin = (float2(x_102.x, x_102.y) / x_105);
-  lin = floor((lin * 32.0f));
-  param_2 = lin;
-  const float4 x_111 = match_vf2_(param_2);
-  x_GLF_color = x_111;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5e37f38..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,128 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[16];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[8];
-};
-struct tint_array_wrapper_2 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool collision_vf2_vf4_(thread float2* const pos, thread float4* const quad) {
-  float const x_114 = (*(pos)).x;
-  float const x_116 = (*(quad)).x;
-  if ((x_114 < x_116)) {
-    return false;
-  }
-  float const x_121 = (*(pos)).y;
-  float const x_123 = (*(quad)).y;
-  if ((x_121 < x_123)) {
-    return false;
-  }
-  float const x_128 = (*(pos)).x;
-  float const x_130 = (*(quad)).x;
-  float const x_132 = (*(quad)).z;
-  if ((x_128 > (x_130 + x_132))) {
-    return false;
-  }
-  float const x_138 = (*(pos)).y;
-  float const x_140 = (*(quad)).y;
-  float const x_142 = (*(quad)).w;
-  if ((x_138 > (x_140 + x_142))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(thread float2* const pos_1) {
-  float4 res = 0.0f;
-  int i = 0;
-  float2 param = 0.0f;
-  float4 param_1 = 0.0f;
-  tint_array_wrapper_1 indexable = {};
-  tint_array_wrapper_1 indexable_1 = {};
-  tint_array_wrapper_1 indexable_2 = {};
-  tint_array_wrapper_2 indexable_3 = {};
-  res = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_152 = i;
-    if ((x_152 < 8)) {
-    } else {
-      break;
-    }
-    int const x_155 = i;
-    float2 const x_156 = *(pos_1);
-    param = x_156;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-    indexable = tint_symbol_2;
-    float4 const x_158 = indexable.arr[x_155];
-    param_1 = x_158;
-    bool const x_159 = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_159) {
-      int const x_162 = i;
-      tint_array_wrapper_1 const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_1 = tint_symbol_3;
-      float const x_164 = indexable_1.arr[x_162].x;
-      int const x_166 = i;
-      tint_array_wrapper_1 const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_2 = tint_symbol_4;
-      float const x_168 = indexable_2.arr[x_166].y;
-      int const x_171 = i;
-      tint_array_wrapper_2 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      indexable_3 = tint_symbol_5;
-      float4 const x_177 = indexable_3.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_164)) * as_type<uint>(int(x_168))))) + as_type<uint>(as_type<int>((as_type<uint>(x_171) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      res = x_177;
-    }
-    {
-      int const x_178 = i;
-      i = as_type<int>((as_type<uint>(x_178) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_180 = res;
-  return x_180;
-}
-
-void main_1(constant buf0& x_20, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  float2 lin = 0.0f;
-  float2 param_2 = 0.0f;
-  float4 const x_102 = *(tint_symbol_7);
-  float2 const x_105 = x_20.resolution;
-  lin = (float2(x_102.x, x_102.y) / x_105);
-  float2 const x_107 = lin;
-  lin = floor((x_107 * 32.0f));
-  float2 const x_110 = lin;
-  param_2 = x_110;
-  float4 const x_111 = match_vf2_(&(param_2));
-  *(tint_symbol_8) = x_111;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_20, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_20, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_20 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_20, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 24b7928..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,306 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 221
-; Schema: 0
-               OpCapability Shader
-        %202 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_20 "x_20"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %index "index"
-               OpName %state "state"
-               OpName %collision_vf2_vf4_ "collision_vf2_vf4_"
-               OpName %pos "pos"
-               OpName %quad "quad"
-               OpName %match_vf2_ "match_vf2_"
-               OpName %pos_1 "pos_1"
-               OpName %res "res"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %indexable_2 "indexable_2"
-               OpName %indexable_3 "indexable_3"
-               OpName %main_1 "main_1"
-               OpName %lin "lin"
-               OpName %param_2 "param_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-               OpDecorate %_arr_int_uint_16 ArrayStride 4
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_20 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %18 = OpConstantNull %int
-      %index = OpVariable %_ptr_Private_int Private %18
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_int_uint_16 = OpTypeArray %int %uint_16
-%_ptr_Private__arr_int_uint_16 = OpTypePointer Private %_arr_int_uint_16
-         %24 = OpConstantNull %_arr_int_uint_16
-      %state = OpVariable %_ptr_Private__arr_int_uint_16 Private %24
-       %bool = OpTypeBool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %25 = OpTypeFunction %bool %_ptr_Function_v2float %_ptr_Function_v4float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-         %84 = OpTypeFunction %v4float %_ptr_Function_v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %92 = OpConstantNull %v2float
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %98 = OpConstantNull %_arr_v4float_uint_8
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-        %104 = OpConstantNull %_arr_v4float_uint_16
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-        %107 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_8 = OpConstant %int 8
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-        %124 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-        %125 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-        %126 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-        %128 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-        %131 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-        %133 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-        %135 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-        %137 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-        %138 = OpConstantComposite %_arr_v4float_uint_8 %124 %125 %126 %128 %131 %133 %135 %137
-    %float_0 = OpConstant %float 0
-        %154 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %161 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %167 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %168 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %169 = OpConstantComposite %_arr_v4float_uint_16 %154 %155 %156 %157 %158 %159 %160 %161 %154 %162 %163 %164 %165 %166 %167 %168
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %186 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-   %main_out = OpTypeStruct %v4float
-        %208 = OpTypeFunction %main_out %v4float
-%collision_vf2_vf4_ = OpFunction %bool None %25
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-       %quad = OpFunctionParameter %_ptr_Function_v4float
-         %32 = OpLabel
-         %36 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %37 = OpLoad %float %36
-         %39 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpFOrdLessThan %bool %37 %40
-               OpSelectionMerge %42 None
-               OpBranchConditional %41 %43 %42
-         %43 = OpLabel
-               OpReturnValue %false
-         %42 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %48 = OpLoad %float %47
-         %50 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %51 = OpLoad %float %50
-         %52 = OpFOrdLessThan %bool %48 %51
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpReturnValue %false
-         %53 = OpLabel
-         %56 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %60 = OpLoad %float %59
-         %63 = OpAccessChain %_ptr_Function_float %quad %uint_2
-         %64 = OpLoad %float %63
-         %65 = OpFAdd %float %60 %64
-         %66 = OpFOrdGreaterThan %bool %57 %65
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %67
-         %68 = OpLabel
-               OpReturnValue %false
-         %67 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %74 = OpLoad %float %73
-         %77 = OpAccessChain %_ptr_Function_float %quad %uint_3
-         %78 = OpLoad %float %77
-         %79 = OpFAdd %float %74 %78
-         %80 = OpFOrdGreaterThan %bool %71 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %81
-         %82 = OpLabel
-               OpReturnValue %false
-         %81 = OpLabel
-               OpReturnValue %true
-               OpFunctionEnd
- %match_vf2_ = OpFunction %v4float None %84
-      %pos_1 = OpFunctionParameter %_ptr_Function_v2float
-         %87 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %7
-          %i = OpVariable %_ptr_Function_int Function %18
-      %param = OpVariable %_ptr_Function_v2float Function %92
-    %param_1 = OpVariable %_ptr_Function_v4float Function %7
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %98
-%indexable_1 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %98
-%indexable_2 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %98
-%indexable_3 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %104
-               OpStore %res %107
-               OpStore %i %int_0
-               OpBranch %109
-        %109 = OpLabel
-               OpLoopMerge %110 %111 None
-               OpBranch %112
-        %112 = OpLabel
-        %113 = OpLoad %int %i
-        %115 = OpSLessThan %bool %113 %int_8
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-               OpBranch %116
-        %118 = OpLabel
-               OpBranch %110
-        %116 = OpLabel
-        %119 = OpLoad %int %i
-        %121 = OpLoad %v2float %pos_1
-               OpStore %param %121
-               OpStore %indexable %138
-        %139 = OpAccessChain %_ptr_Function_v4float %indexable %119
-        %140 = OpLoad %v4float %139
-               OpStore %param_1 %140
-        %141 = OpFunctionCall %bool %collision_vf2_vf4_ %param %param_1
-               OpSelectionMerge %144 None
-               OpBranchConditional %141 %145 %144
-        %145 = OpLabel
-        %146 = OpLoad %int %i
-               OpStore %indexable_1 %138
-        %147 = OpAccessChain %_ptr_Function_float %indexable_1 %146 %uint_0
-        %148 = OpLoad %float %147
-        %149 = OpLoad %int %i
-               OpStore %indexable_2 %138
-        %150 = OpAccessChain %_ptr_Function_float %indexable_2 %149 %uint_1
-        %151 = OpLoad %float %150
-        %152 = OpLoad %int %i
-               OpStore %indexable_3 %169
-        %170 = OpConvertFToS %int %148
-        %171 = OpConvertFToS %int %151
-        %172 = OpIMul %int %170 %171
-        %174 = OpIMul %int %152 %int_9
-        %175 = OpIAdd %int %172 %174
-        %177 = OpIAdd %int %175 %int_11
-        %179 = OpSMod %int %177 %int_16
-        %180 = OpAccessChain %_ptr_Function_v4float %indexable_3 %179
-        %181 = OpLoad %v4float %180
-               OpStore %res %181
-               OpBranch %144
-        %144 = OpLabel
-               OpBranch %111
-        %111 = OpLabel
-        %182 = OpLoad %int %i
-        %184 = OpIAdd %int %182 %int_1
-               OpStore %i %184
-               OpBranch %109
-        %110 = OpLabel
-        %185 = OpLoad %v4float %res
-               OpReturnValue %185
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %186
-        %189 = OpLabel
-        %lin = OpVariable %_ptr_Function_v2float Function %92
-    %param_2 = OpVariable %_ptr_Function_v2float Function %92
-        %192 = OpLoad %v4float %gl_FragCoord
-        %194 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_0
-        %195 = OpLoad %v2float %194
-        %196 = OpCompositeExtract %float %192 0
-        %197 = OpCompositeExtract %float %192 1
-        %198 = OpCompositeConstruct %v2float %196 %197
-        %199 = OpFDiv %v2float %198 %195
-               OpStore %lin %199
-        %200 = OpLoad %v2float %lin
-        %204 = OpVectorTimesScalar %v2float %200 %float_32
-        %201 = OpExtInst %v2float %202 Floor %204
-               OpStore %lin %201
-        %205 = OpLoad %v2float %lin
-               OpStore %param_2 %205
-        %206 = OpFunctionCall %v4float %match_vf2_ %param_2
-               OpStore %x_GLF_color %206
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %208
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %212 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %213 = OpFunctionCall %void %main_1
-        %214 = OpLoad %v4float %x_GLF_color
-        %215 = OpCompositeConstruct %main_out %214
-               OpReturnValue %215
-               OpFunctionEnd
-       %main = OpFunction %void None %186
-        %217 = OpLabel
-        %219 = OpLoad %v4float %gl_FragCoord_param_1
-        %218 = OpFunctionCall %main_out %main_inner %219
-        %220 = OpCompositeExtract %v4float %218 0
-               OpStore %x_GLF_color_1_1 %220
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f8f9584..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,113 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> index : i32;
-
-var<private> state : array<i32, 16>;
-
-fn collision_vf2_vf4_(pos : ptr<function, vec2<f32>>, quad : ptr<function, vec4<f32>>) -> bool {
-  let x_114 : f32 = (*(pos)).x;
-  let x_116 : f32 = (*(quad)).x;
-  if ((x_114 < x_116)) {
-    return false;
-  }
-  let x_121 : f32 = (*(pos)).y;
-  let x_123 : f32 = (*(quad)).y;
-  if ((x_121 < x_123)) {
-    return false;
-  }
-  let x_128 : f32 = (*(pos)).x;
-  let x_130 : f32 = (*(quad)).x;
-  let x_132 : f32 = (*(quad)).z;
-  if ((x_128 > (x_130 + x_132))) {
-    return false;
-  }
-  let x_138 : f32 = (*(pos)).y;
-  let x_140 : f32 = (*(quad)).y;
-  let x_142 : f32 = (*(quad)).w;
-  if ((x_138 > (x_140 + x_142))) {
-    return false;
-  }
-  return true;
-}
-
-fn match_vf2_(pos_1 : ptr<function, vec2<f32>>) -> vec4<f32> {
-  var res : vec4<f32>;
-  var i : i32;
-  var param : vec2<f32>;
-  var param_1 : vec4<f32>;
-  var indexable : array<vec4<f32>, 8>;
-  var indexable_1 : array<vec4<f32>, 8>;
-  var indexable_2 : array<vec4<f32>, 8>;
-  var indexable_3 : array<vec4<f32>, 16>;
-  res = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  i = 0;
-  loop {
-    let x_152 : i32 = i;
-    if ((x_152 < 8)) {
-    } else {
-      break;
-    }
-    let x_155 : i32 = i;
-    let x_156 : vec2<f32> = *(pos_1);
-    param = x_156;
-    indexable = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-    let x_158 : vec4<f32> = indexable[x_155];
-    param_1 = x_158;
-    let x_159 : bool = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_159) {
-      let x_162 : i32 = i;
-      indexable_1 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_164 : f32 = indexable_1[x_162].x;
-      let x_166 : i32 = i;
-      indexable_2 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_168 : f32 = indexable_2[x_166].y;
-      let x_171 : i32 = i;
-      indexable_3 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      let x_177 : vec4<f32> = indexable_3[((((i32(x_164) * i32(x_168)) + (x_171 * 9)) + 11) % 16)];
-      res = x_177;
-    }
-
-    continuing {
-      let x_178 : i32 = i;
-      i = (x_178 + 1);
-    }
-  }
-  let x_180 : vec4<f32> = res;
-  return x_180;
-}
-
-fn main_1() {
-  var lin : vec2<f32>;
-  var param_2 : vec2<f32>;
-  let x_102 : vec4<f32> = gl_FragCoord;
-  let x_105 : vec2<f32> = x_20.resolution;
-  lin = (vec2<f32>(x_102.x, x_102.y) / x_105);
-  let x_107 : vec2<f32> = lin;
-  lin = floor((x_107 * 32.0));
-  let x_110 : vec2<f32> = lin;
-  param_2 = x_110;
-  let x_111 : vec4<f32> = match_vf2_(&(param_2));
-  x_GLF_color = x_111;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.hlsl
deleted file mode 100644
index 8c6fe1a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,112 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_20 : register(b0, space0) {
-  uint4 x_20[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int index = 0;
-static int state[16] = (int[16])0;
-
-bool collision_vf2_vf4_(inout float2 pos, inout float4 quad) {
-  bool4 x_116 = bool4(false, false, false, false);
-  const float x_118 = pos.x;
-  const float x_120 = quad.x;
-  if ((x_118 < x_120)) {
-    return false;
-  }
-  const float x_125 = pos.y;
-  const float x_127 = quad.y;
-  if ((x_125 < x_127)) {
-    return false;
-  }
-  const float x_132 = pos.x;
-  const float x_134 = quad.x;
-  const float x_136 = quad.z;
-  if ((x_132 > (x_134 + x_136))) {
-    return false;
-  }
-  const float x_142 = pos.y;
-  const float x_144 = quad.y;
-  const float x_146 = quad.w;
-  if ((x_142 > (x_144 + x_146))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(inout float2 pos_1) {
-  float4 res = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  float2 param = float2(0.0f, 0.0f);
-  float4 param_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 indexable[8] = (float4[8])0;
-  float4 indexable_1[8] = (float4[8])0;
-  float4 indexable_2[8] = (float4[8])0;
-  float4 indexable_3[16] = (float4[16])0;
-  res = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 8); i = (i + 1)) {
-      const int x_159 = i;
-      const float2 x_160 = pos_1;
-      param = x_160;
-      const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      indexable = tint_symbol_4;
-      const float4 x_162 = indexable[x_159];
-      param_1 = x_162;
-      const bool x_163 = collision_vf2_vf4_(param, param_1);
-      if (x_163) {
-        const int x_166 = i;
-        const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_1 = tint_symbol_5;
-        const float x_168 = indexable_1[x_166].x;
-        const int x_170 = i;
-        const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_2 = tint_symbol_6;
-        const float x_172 = indexable_2[x_170].y;
-        const int x_175 = i;
-        const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-        indexable_3 = tint_symbol_7;
-        const float4 x_181 = indexable_3[((((int(x_168) * int(x_172)) + (x_175 * 9)) + 11) % 16)];
-        res = x_181;
-      }
-    }
-  }
-  return res;
-}
-
-void main_1() {
-  float2 lin = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  const float4 x_105 = gl_FragCoord;
-  const float2 x_108 = asfloat(x_20[0].xy);
-  lin = (float2(x_105.x, x_105.y) / x_108);
-  lin = floor((lin * 32.0f));
-  param_2 = lin;
-  const float4 x_114 = match_vf2_(param_2);
-  x_GLF_color = x_114;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.msl
deleted file mode 100644
index 8c0c869..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.msl
+++ /dev/null
@@ -1,129 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[16];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[8];
-};
-struct tint_array_wrapper_2 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool collision_vf2_vf4_(thread float2* const pos, thread float4* const quad) {
-  bool4 x_116 = bool4(false, false, false, false);
-  float const x_118 = (*(pos)).x;
-  float const x_120 = (*(quad)).x;
-  if ((x_118 < x_120)) {
-    return false;
-  }
-  float const x_125 = (*(pos)).y;
-  float const x_127 = (*(quad)).y;
-  if ((x_125 < x_127)) {
-    return false;
-  }
-  float const x_132 = (*(pos)).x;
-  float const x_134 = (*(quad)).x;
-  float const x_136 = (*(quad)).z;
-  if ((x_132 > (x_134 + x_136))) {
-    return false;
-  }
-  float const x_142 = (*(pos)).y;
-  float const x_144 = (*(quad)).y;
-  float const x_146 = (*(quad)).w;
-  if ((x_142 > (x_144 + x_146))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(thread float2* const pos_1) {
-  float4 res = 0.0f;
-  int i = 0;
-  float2 param = 0.0f;
-  float4 param_1 = 0.0f;
-  tint_array_wrapper_1 indexable = {};
-  tint_array_wrapper_1 indexable_1 = {};
-  tint_array_wrapper_1 indexable_2 = {};
-  tint_array_wrapper_2 indexable_3 = {};
-  res = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_156 = i;
-    if ((x_156 < 8)) {
-    } else {
-      break;
-    }
-    int const x_159 = i;
-    float2 const x_160 = *(pos_1);
-    param = x_160;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-    indexable = tint_symbol_2;
-    float4 const x_162 = indexable.arr[x_159];
-    param_1 = x_162;
-    bool const x_163 = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_163) {
-      int const x_166 = i;
-      tint_array_wrapper_1 const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_1 = tint_symbol_3;
-      float const x_168 = indexable_1.arr[x_166].x;
-      int const x_170 = i;
-      tint_array_wrapper_1 const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_2 = tint_symbol_4;
-      float const x_172 = indexable_2.arr[x_170].y;
-      int const x_175 = i;
-      tint_array_wrapper_2 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      indexable_3 = tint_symbol_5;
-      float4 const x_181 = indexable_3.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_168)) * as_type<uint>(int(x_172))))) + as_type<uint>(as_type<int>((as_type<uint>(x_175) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      res = x_181;
-    }
-    {
-      int const x_182 = i;
-      i = as_type<int>((as_type<uint>(x_182) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_184 = res;
-  return x_184;
-}
-
-void main_1(constant buf0& x_20, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  float2 lin = 0.0f;
-  float2 param_2 = 0.0f;
-  float4 const x_105 = *(tint_symbol_7);
-  float2 const x_108 = x_20.resolution;
-  lin = (float2(x_105.x, x_105.y) / x_108);
-  float2 const x_110 = lin;
-  lin = floor((x_110 * 32.0f));
-  float2 const x_113 = lin;
-  param_2 = x_113;
-  float4 const x_114 = match_vf2_(&(param_2));
-  *(tint_symbol_8) = x_114;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_20, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_20, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_20 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_20, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.spvasm
deleted file mode 100644
index 78ad920..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,313 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 226
-; Schema: 0
-               OpCapability Shader
-        %207 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_20 "x_20"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %index "index"
-               OpName %state "state"
-               OpName %collision_vf2_vf4_ "collision_vf2_vf4_"
-               OpName %pos "pos"
-               OpName %quad "quad"
-               OpName %x_116 "x_116"
-               OpName %match_vf2_ "match_vf2_"
-               OpName %pos_1 "pos_1"
-               OpName %res "res"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %indexable_2 "indexable_2"
-               OpName %indexable_3 "indexable_3"
-               OpName %main_1 "main_1"
-               OpName %lin "lin"
-               OpName %param_2 "param_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-               OpDecorate %_arr_int_uint_16 ArrayStride 4
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_20 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %18 = OpConstantNull %int
-      %index = OpVariable %_ptr_Private_int Private %18
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_int_uint_16 = OpTypeArray %int %uint_16
-%_ptr_Private__arr_int_uint_16 = OpTypePointer Private %_arr_int_uint_16
-         %24 = OpConstantNull %_arr_int_uint_16
-      %state = OpVariable %_ptr_Private__arr_int_uint_16 Private %24
-       %bool = OpTypeBool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %25 = OpTypeFunction %bool %_ptr_Function_v2float %_ptr_Function_v4float
-     %v4bool = OpTypeVector %bool 4
-      %false = OpConstantFalse %bool
-         %35 = OpConstantComposite %v4bool %false %false %false %false
-%_ptr_Function_v4bool = OpTypePointer Function %v4bool
-         %38 = OpConstantNull %v4bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-         %89 = OpTypeFunction %v4float %_ptr_Function_v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %97 = OpConstantNull %v2float
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-        %103 = OpConstantNull %_arr_v4float_uint_8
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-        %109 = OpConstantNull %_arr_v4float_uint_16
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-        %112 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_8 = OpConstant %int 8
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-        %129 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-        %130 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-        %131 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-        %133 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-        %136 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-        %138 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-        %140 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-        %142 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-        %143 = OpConstantComposite %_arr_v4float_uint_8 %129 %130 %131 %133 %136 %138 %140 %142
-    %float_0 = OpConstant %float 0
-        %159 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %160 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %164 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %166 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %167 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %168 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %169 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %170 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %171 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %172 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %173 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %174 = OpConstantComposite %_arr_v4float_uint_16 %159 %160 %161 %162 %163 %164 %165 %166 %159 %167 %168 %169 %170 %171 %172 %173
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %191 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-   %main_out = OpTypeStruct %v4float
-        %213 = OpTypeFunction %main_out %v4float
-%collision_vf2_vf4_ = OpFunction %bool None %25
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-       %quad = OpFunctionParameter %_ptr_Function_v4float
-         %32 = OpLabel
-      %x_116 = OpVariable %_ptr_Function_v4bool Function %38
-               OpStore %x_116 %35
-         %42 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %43 = OpLoad %float %42
-         %45 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %46 = OpLoad %float %45
-         %47 = OpFOrdLessThan %bool %43 %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-               OpReturnValue %false
-         %48 = OpLabel
-         %52 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %53 = OpLoad %float %52
-         %55 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %56 = OpLoad %float %55
-         %57 = OpFOrdLessThan %bool %53 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpReturnValue %false
-         %58 = OpLabel
-         %61 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %62 = OpLoad %float %61
-         %64 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %65 = OpLoad %float %64
-         %68 = OpAccessChain %_ptr_Function_float %quad %uint_2
-         %69 = OpLoad %float %68
-         %70 = OpFAdd %float %65 %69
-         %71 = OpFOrdGreaterThan %bool %62 %70
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturnValue %false
-         %72 = OpLabel
-         %75 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %76 = OpLoad %float %75
-         %78 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %79 = OpLoad %float %78
-         %82 = OpAccessChain %_ptr_Function_float %quad %uint_3
-         %83 = OpLoad %float %82
-         %84 = OpFAdd %float %79 %83
-         %85 = OpFOrdGreaterThan %bool %76 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-               OpReturnValue %false
-         %86 = OpLabel
-               OpReturnValue %true
-               OpFunctionEnd
- %match_vf2_ = OpFunction %v4float None %89
-      %pos_1 = OpFunctionParameter %_ptr_Function_v2float
-         %92 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %7
-          %i = OpVariable %_ptr_Function_int Function %18
-      %param = OpVariable %_ptr_Function_v2float Function %97
-    %param_1 = OpVariable %_ptr_Function_v4float Function %7
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %103
-%indexable_1 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %103
-%indexable_2 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %103
-%indexable_3 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %109
-               OpStore %res %112
-               OpStore %i %int_0
-               OpBranch %114
-        %114 = OpLabel
-               OpLoopMerge %115 %116 None
-               OpBranch %117
-        %117 = OpLabel
-        %118 = OpLoad %int %i
-        %120 = OpSLessThan %bool %118 %int_8
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpBranch %121
-        %123 = OpLabel
-               OpBranch %115
-        %121 = OpLabel
-        %124 = OpLoad %int %i
-        %126 = OpLoad %v2float %pos_1
-               OpStore %param %126
-               OpStore %indexable %143
-        %144 = OpAccessChain %_ptr_Function_v4float %indexable %124
-        %145 = OpLoad %v4float %144
-               OpStore %param_1 %145
-        %146 = OpFunctionCall %bool %collision_vf2_vf4_ %param %param_1
-               OpSelectionMerge %149 None
-               OpBranchConditional %146 %150 %149
-        %150 = OpLabel
-        %151 = OpLoad %int %i
-               OpStore %indexable_1 %143
-        %152 = OpAccessChain %_ptr_Function_float %indexable_1 %151 %uint_0
-        %153 = OpLoad %float %152
-        %154 = OpLoad %int %i
-               OpStore %indexable_2 %143
-        %155 = OpAccessChain %_ptr_Function_float %indexable_2 %154 %uint_1
-        %156 = OpLoad %float %155
-        %157 = OpLoad %int %i
-               OpStore %indexable_3 %174
-        %175 = OpConvertFToS %int %153
-        %176 = OpConvertFToS %int %156
-        %177 = OpIMul %int %175 %176
-        %179 = OpIMul %int %157 %int_9
-        %180 = OpIAdd %int %177 %179
-        %182 = OpIAdd %int %180 %int_11
-        %184 = OpSMod %int %182 %int_16
-        %185 = OpAccessChain %_ptr_Function_v4float %indexable_3 %184
-        %186 = OpLoad %v4float %185
-               OpStore %res %186
-               OpBranch %149
-        %149 = OpLabel
-               OpBranch %116
-        %116 = OpLabel
-        %187 = OpLoad %int %i
-        %189 = OpIAdd %int %187 %int_1
-               OpStore %i %189
-               OpBranch %114
-        %115 = OpLabel
-        %190 = OpLoad %v4float %res
-               OpReturnValue %190
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %191
-        %194 = OpLabel
-        %lin = OpVariable %_ptr_Function_v2float Function %97
-    %param_2 = OpVariable %_ptr_Function_v2float Function %97
-        %197 = OpLoad %v4float %gl_FragCoord
-        %199 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_0
-        %200 = OpLoad %v2float %199
-        %201 = OpCompositeExtract %float %197 0
-        %202 = OpCompositeExtract %float %197 1
-        %203 = OpCompositeConstruct %v2float %201 %202
-        %204 = OpFDiv %v2float %203 %200
-               OpStore %lin %204
-        %205 = OpLoad %v2float %lin
-        %209 = OpVectorTimesScalar %v2float %205 %float_32
-        %206 = OpExtInst %v2float %207 Floor %209
-               OpStore %lin %206
-        %210 = OpLoad %v2float %lin
-               OpStore %param_2 %210
-        %211 = OpFunctionCall %v4float %match_vf2_ %param_2
-               OpStore %x_GLF_color %211
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %213
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %217 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %218 = OpFunctionCall %void %main_1
-        %219 = OpLoad %v4float %x_GLF_color
-        %220 = OpCompositeConstruct %main_out %219
-               OpReturnValue %220
-               OpFunctionEnd
-       %main = OpFunction %void None %191
-        %222 = OpLabel
-        %224 = OpLoad %v4float %gl_FragCoord_param_1
-        %223 = OpFunctionCall %main_out %main_inner %224
-        %225 = OpCompositeExtract %v4float %223 0
-               OpStore %x_GLF_color_1_1 %225
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.wgsl
deleted file mode 100644
index f70d557..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,114 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> index : i32;
-
-var<private> state : array<i32, 16>;
-
-fn collision_vf2_vf4_(pos : ptr<function, vec2<f32>>, quad : ptr<function, vec4<f32>>) -> bool {
-  var x_116 : vec4<bool> = vec4<bool>(false, false, false, false);
-  let x_118 : f32 = (*(pos)).x;
-  let x_120 : f32 = (*(quad)).x;
-  if ((x_118 < x_120)) {
-    return false;
-  }
-  let x_125 : f32 = (*(pos)).y;
-  let x_127 : f32 = (*(quad)).y;
-  if ((x_125 < x_127)) {
-    return false;
-  }
-  let x_132 : f32 = (*(pos)).x;
-  let x_134 : f32 = (*(quad)).x;
-  let x_136 : f32 = (*(quad)).z;
-  if ((x_132 > (x_134 + x_136))) {
-    return false;
-  }
-  let x_142 : f32 = (*(pos)).y;
-  let x_144 : f32 = (*(quad)).y;
-  let x_146 : f32 = (*(quad)).w;
-  if ((x_142 > (x_144 + x_146))) {
-    return false;
-  }
-  return true;
-}
-
-fn match_vf2_(pos_1 : ptr<function, vec2<f32>>) -> vec4<f32> {
-  var res : vec4<f32>;
-  var i : i32;
-  var param : vec2<f32>;
-  var param_1 : vec4<f32>;
-  var indexable : array<vec4<f32>, 8>;
-  var indexable_1 : array<vec4<f32>, 8>;
-  var indexable_2 : array<vec4<f32>, 8>;
-  var indexable_3 : array<vec4<f32>, 16>;
-  res = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  i = 0;
-  loop {
-    let x_156 : i32 = i;
-    if ((x_156 < 8)) {
-    } else {
-      break;
-    }
-    let x_159 : i32 = i;
-    let x_160 : vec2<f32> = *(pos_1);
-    param = x_160;
-    indexable = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-    let x_162 : vec4<f32> = indexable[x_159];
-    param_1 = x_162;
-    let x_163 : bool = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_163) {
-      let x_166 : i32 = i;
-      indexable_1 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_168 : f32 = indexable_1[x_166].x;
-      let x_170 : i32 = i;
-      indexable_2 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_172 : f32 = indexable_2[x_170].y;
-      let x_175 : i32 = i;
-      indexable_3 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      let x_181 : vec4<f32> = indexable_3[((((i32(x_168) * i32(x_172)) + (x_175 * 9)) + 11) % 16)];
-      res = x_181;
-    }
-
-    continuing {
-      let x_182 : i32 = i;
-      i = (x_182 + 1);
-    }
-  }
-  let x_184 : vec4<f32> = res;
-  return x_184;
-}
-
-fn main_1() {
-  var lin : vec2<f32>;
-  var param_2 : vec2<f32>;
-  let x_105 : vec4<f32> = gl_FragCoord;
-  let x_108 : vec2<f32> = x_20.resolution;
-  lin = (vec2<f32>(x_105.x, x_105.y) / x_108);
-  let x_110 : vec2<f32> = lin;
-  lin = floor((x_110 * 32.0));
-  let x_113 : vec2<f32> = lin;
-  param_2 = x_113;
-  let x_114 : vec4<f32> = match_vf2_(&(param_2));
-  x_GLF_color = x_114;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.hlsl
deleted file mode 100644
index 8c6fe1a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,112 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_20 : register(b0, space0) {
-  uint4 x_20[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int index = 0;
-static int state[16] = (int[16])0;
-
-bool collision_vf2_vf4_(inout float2 pos, inout float4 quad) {
-  bool4 x_116 = bool4(false, false, false, false);
-  const float x_118 = pos.x;
-  const float x_120 = quad.x;
-  if ((x_118 < x_120)) {
-    return false;
-  }
-  const float x_125 = pos.y;
-  const float x_127 = quad.y;
-  if ((x_125 < x_127)) {
-    return false;
-  }
-  const float x_132 = pos.x;
-  const float x_134 = quad.x;
-  const float x_136 = quad.z;
-  if ((x_132 > (x_134 + x_136))) {
-    return false;
-  }
-  const float x_142 = pos.y;
-  const float x_144 = quad.y;
-  const float x_146 = quad.w;
-  if ((x_142 > (x_144 + x_146))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(inout float2 pos_1) {
-  float4 res = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int i = 0;
-  float2 param = float2(0.0f, 0.0f);
-  float4 param_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 indexable[8] = (float4[8])0;
-  float4 indexable_1[8] = (float4[8])0;
-  float4 indexable_2[8] = (float4[8])0;
-  float4 indexable_3[16] = (float4[16])0;
-  res = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 8); i = (i + 1)) {
-      const int x_159 = i;
-      const float2 x_160 = pos_1;
-      param = x_160;
-      const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      indexable = tint_symbol_4;
-      const float4 x_162 = indexable[x_159];
-      param_1 = x_162;
-      const bool x_163 = collision_vf2_vf4_(param, param_1);
-      if (x_163) {
-        const int x_166 = i;
-        const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_1 = tint_symbol_5;
-        const float x_168 = indexable_1[x_166].x;
-        const int x_170 = i;
-        const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_2 = tint_symbol_6;
-        const float x_172 = indexable_2[x_170].y;
-        const int x_175 = i;
-        const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-        indexable_3 = tint_symbol_7;
-        const float4 x_181 = indexable_3[((((int(x_168) * int(x_172)) + (x_175 * 9)) + 11) % 16)];
-        res = x_181;
-      }
-    }
-  }
-  return res;
-}
-
-void main_1() {
-  float2 lin = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  const float4 x_105 = gl_FragCoord;
-  const float2 x_108 = asfloat(x_20[0].xy);
-  lin = (float2(x_105.x, x_105.y) / x_108);
-  lin = floor((lin * 32.0f));
-  param_2 = lin;
-  const float4 x_114 = match_vf2_(param_2);
-  x_GLF_color = x_114;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.msl
deleted file mode 100644
index 8c0c869..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.msl
+++ /dev/null
@@ -1,129 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[16];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[8];
-};
-struct tint_array_wrapper_2 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool collision_vf2_vf4_(thread float2* const pos, thread float4* const quad) {
-  bool4 x_116 = bool4(false, false, false, false);
-  float const x_118 = (*(pos)).x;
-  float const x_120 = (*(quad)).x;
-  if ((x_118 < x_120)) {
-    return false;
-  }
-  float const x_125 = (*(pos)).y;
-  float const x_127 = (*(quad)).y;
-  if ((x_125 < x_127)) {
-    return false;
-  }
-  float const x_132 = (*(pos)).x;
-  float const x_134 = (*(quad)).x;
-  float const x_136 = (*(quad)).z;
-  if ((x_132 > (x_134 + x_136))) {
-    return false;
-  }
-  float const x_142 = (*(pos)).y;
-  float const x_144 = (*(quad)).y;
-  float const x_146 = (*(quad)).w;
-  if ((x_142 > (x_144 + x_146))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(thread float2* const pos_1) {
-  float4 res = 0.0f;
-  int i = 0;
-  float2 param = 0.0f;
-  float4 param_1 = 0.0f;
-  tint_array_wrapper_1 indexable = {};
-  tint_array_wrapper_1 indexable_1 = {};
-  tint_array_wrapper_1 indexable_2 = {};
-  tint_array_wrapper_2 indexable_3 = {};
-  res = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_156 = i;
-    if ((x_156 < 8)) {
-    } else {
-      break;
-    }
-    int const x_159 = i;
-    float2 const x_160 = *(pos_1);
-    param = x_160;
-    tint_array_wrapper_1 const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-    indexable = tint_symbol_2;
-    float4 const x_162 = indexable.arr[x_159];
-    param_1 = x_162;
-    bool const x_163 = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_163) {
-      int const x_166 = i;
-      tint_array_wrapper_1 const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_1 = tint_symbol_3;
-      float const x_168 = indexable_1.arr[x_166].x;
-      int const x_170 = i;
-      tint_array_wrapper_1 const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_2 = tint_symbol_4;
-      float const x_172 = indexable_2.arr[x_170].y;
-      int const x_175 = i;
-      tint_array_wrapper_2 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      indexable_3 = tint_symbol_5;
-      float4 const x_181 = indexable_3.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_168)) * as_type<uint>(int(x_172))))) + as_type<uint>(as_type<int>((as_type<uint>(x_175) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      res = x_181;
-    }
-    {
-      int const x_182 = i;
-      i = as_type<int>((as_type<uint>(x_182) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_184 = res;
-  return x_184;
-}
-
-void main_1(constant buf0& x_20, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  float2 lin = 0.0f;
-  float2 param_2 = 0.0f;
-  float4 const x_105 = *(tint_symbol_7);
-  float2 const x_108 = x_20.resolution;
-  lin = (float2(x_105.x, x_105.y) / x_108);
-  float2 const x_110 = lin;
-  lin = floor((x_110 * 32.0f));
-  float2 const x_113 = lin;
-  param_2 = x_113;
-  float4 const x_114 = match_vf2_(&(param_2));
-  *(tint_symbol_8) = x_114;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_20, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_20, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_20 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_20, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.spvasm
deleted file mode 100644
index 78ad920..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,313 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 226
-; Schema: 0
-               OpCapability Shader
-        %207 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_20 "x_20"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %index "index"
-               OpName %state "state"
-               OpName %collision_vf2_vf4_ "collision_vf2_vf4_"
-               OpName %pos "pos"
-               OpName %quad "quad"
-               OpName %x_116 "x_116"
-               OpName %match_vf2_ "match_vf2_"
-               OpName %pos_1 "pos_1"
-               OpName %res "res"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %indexable_2 "indexable_2"
-               OpName %indexable_3 "indexable_3"
-               OpName %main_1 "main_1"
-               OpName %lin "lin"
-               OpName %param_2 "param_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-               OpDecorate %_arr_int_uint_16 ArrayStride 4
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_20 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_ptr_Private_int = OpTypePointer Private %int
-         %18 = OpConstantNull %int
-      %index = OpVariable %_ptr_Private_int Private %18
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_int_uint_16 = OpTypeArray %int %uint_16
-%_ptr_Private__arr_int_uint_16 = OpTypePointer Private %_arr_int_uint_16
-         %24 = OpConstantNull %_arr_int_uint_16
-      %state = OpVariable %_ptr_Private__arr_int_uint_16 Private %24
-       %bool = OpTypeBool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %25 = OpTypeFunction %bool %_ptr_Function_v2float %_ptr_Function_v4float
-     %v4bool = OpTypeVector %bool 4
-      %false = OpConstantFalse %bool
-         %35 = OpConstantComposite %v4bool %false %false %false %false
-%_ptr_Function_v4bool = OpTypePointer Function %v4bool
-         %38 = OpConstantNull %v4bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-         %89 = OpTypeFunction %v4float %_ptr_Function_v2float
-%_ptr_Function_int = OpTypePointer Function %int
-         %97 = OpConstantNull %v2float
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-        %103 = OpConstantNull %_arr_v4float_uint_8
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-        %109 = OpConstantNull %_arr_v4float_uint_16
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-        %112 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-      %int_8 = OpConstant %int 8
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-        %129 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-        %130 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-        %131 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-        %133 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-        %136 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-        %138 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-        %140 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-        %142 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-        %143 = OpConstantComposite %_arr_v4float_uint_8 %129 %130 %131 %133 %136 %138 %140 %142
-    %float_0 = OpConstant %float 0
-        %159 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %160 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %164 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %166 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %167 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %168 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %169 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %170 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %171 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %172 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %173 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %174 = OpConstantComposite %_arr_v4float_uint_16 %159 %160 %161 %162 %163 %164 %165 %166 %159 %167 %168 %169 %170 %171 %172 %173
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %191 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-   %main_out = OpTypeStruct %v4float
-        %213 = OpTypeFunction %main_out %v4float
-%collision_vf2_vf4_ = OpFunction %bool None %25
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-       %quad = OpFunctionParameter %_ptr_Function_v4float
-         %32 = OpLabel
-      %x_116 = OpVariable %_ptr_Function_v4bool Function %38
-               OpStore %x_116 %35
-         %42 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %43 = OpLoad %float %42
-         %45 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %46 = OpLoad %float %45
-         %47 = OpFOrdLessThan %bool %43 %46
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %48
-         %49 = OpLabel
-               OpReturnValue %false
-         %48 = OpLabel
-         %52 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %53 = OpLoad %float %52
-         %55 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %56 = OpLoad %float %55
-         %57 = OpFOrdLessThan %bool %53 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpReturnValue %false
-         %58 = OpLabel
-         %61 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %62 = OpLoad %float %61
-         %64 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %65 = OpLoad %float %64
-         %68 = OpAccessChain %_ptr_Function_float %quad %uint_2
-         %69 = OpLoad %float %68
-         %70 = OpFAdd %float %65 %69
-         %71 = OpFOrdGreaterThan %bool %62 %70
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturnValue %false
-         %72 = OpLabel
-         %75 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %76 = OpLoad %float %75
-         %78 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %79 = OpLoad %float %78
-         %82 = OpAccessChain %_ptr_Function_float %quad %uint_3
-         %83 = OpLoad %float %82
-         %84 = OpFAdd %float %79 %83
-         %85 = OpFOrdGreaterThan %bool %76 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-               OpReturnValue %false
-         %86 = OpLabel
-               OpReturnValue %true
-               OpFunctionEnd
- %match_vf2_ = OpFunction %v4float None %89
-      %pos_1 = OpFunctionParameter %_ptr_Function_v2float
-         %92 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %7
-          %i = OpVariable %_ptr_Function_int Function %18
-      %param = OpVariable %_ptr_Function_v2float Function %97
-    %param_1 = OpVariable %_ptr_Function_v4float Function %7
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %103
-%indexable_1 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %103
-%indexable_2 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %103
-%indexable_3 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %109
-               OpStore %res %112
-               OpStore %i %int_0
-               OpBranch %114
-        %114 = OpLabel
-               OpLoopMerge %115 %116 None
-               OpBranch %117
-        %117 = OpLabel
-        %118 = OpLoad %int %i
-        %120 = OpSLessThan %bool %118 %int_8
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpBranch %121
-        %123 = OpLabel
-               OpBranch %115
-        %121 = OpLabel
-        %124 = OpLoad %int %i
-        %126 = OpLoad %v2float %pos_1
-               OpStore %param %126
-               OpStore %indexable %143
-        %144 = OpAccessChain %_ptr_Function_v4float %indexable %124
-        %145 = OpLoad %v4float %144
-               OpStore %param_1 %145
-        %146 = OpFunctionCall %bool %collision_vf2_vf4_ %param %param_1
-               OpSelectionMerge %149 None
-               OpBranchConditional %146 %150 %149
-        %150 = OpLabel
-        %151 = OpLoad %int %i
-               OpStore %indexable_1 %143
-        %152 = OpAccessChain %_ptr_Function_float %indexable_1 %151 %uint_0
-        %153 = OpLoad %float %152
-        %154 = OpLoad %int %i
-               OpStore %indexable_2 %143
-        %155 = OpAccessChain %_ptr_Function_float %indexable_2 %154 %uint_1
-        %156 = OpLoad %float %155
-        %157 = OpLoad %int %i
-               OpStore %indexable_3 %174
-        %175 = OpConvertFToS %int %153
-        %176 = OpConvertFToS %int %156
-        %177 = OpIMul %int %175 %176
-        %179 = OpIMul %int %157 %int_9
-        %180 = OpIAdd %int %177 %179
-        %182 = OpIAdd %int %180 %int_11
-        %184 = OpSMod %int %182 %int_16
-        %185 = OpAccessChain %_ptr_Function_v4float %indexable_3 %184
-        %186 = OpLoad %v4float %185
-               OpStore %res %186
-               OpBranch %149
-        %149 = OpLabel
-               OpBranch %116
-        %116 = OpLabel
-        %187 = OpLoad %int %i
-        %189 = OpIAdd %int %187 %int_1
-               OpStore %i %189
-               OpBranch %114
-        %115 = OpLabel
-        %190 = OpLoad %v4float %res
-               OpReturnValue %190
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %191
-        %194 = OpLabel
-        %lin = OpVariable %_ptr_Function_v2float Function %97
-    %param_2 = OpVariable %_ptr_Function_v2float Function %97
-        %197 = OpLoad %v4float %gl_FragCoord
-        %199 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_0
-        %200 = OpLoad %v2float %199
-        %201 = OpCompositeExtract %float %197 0
-        %202 = OpCompositeExtract %float %197 1
-        %203 = OpCompositeConstruct %v2float %201 %202
-        %204 = OpFDiv %v2float %203 %200
-               OpStore %lin %204
-        %205 = OpLoad %v2float %lin
-        %209 = OpVectorTimesScalar %v2float %205 %float_32
-        %206 = OpExtInst %v2float %207 Floor %209
-               OpStore %lin %206
-        %210 = OpLoad %v2float %lin
-               OpStore %param_2 %210
-        %211 = OpFunctionCall %v4float %match_vf2_ %param_2
-               OpStore %x_GLF_color %211
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %213
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %217 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %218 = OpFunctionCall %void %main_1
-        %219 = OpLoad %v4float %x_GLF_color
-        %220 = OpCompositeConstruct %main_out %219
-               OpReturnValue %220
-               OpFunctionEnd
-       %main = OpFunction %void None %191
-        %222 = OpLabel
-        %224 = OpLoad %v4float %gl_FragCoord_param_1
-        %223 = OpFunctionCall %main_out %main_inner %224
-        %225 = OpCompositeExtract %v4float %223 0
-               OpStore %x_GLF_color_1_1 %225
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.wgsl
deleted file mode 100644
index f70d557..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-declare-bvec4/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,114 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> index : i32;
-
-var<private> state : array<i32, 16>;
-
-fn collision_vf2_vf4_(pos : ptr<function, vec2<f32>>, quad : ptr<function, vec4<f32>>) -> bool {
-  var x_116 : vec4<bool> = vec4<bool>(false, false, false, false);
-  let x_118 : f32 = (*(pos)).x;
-  let x_120 : f32 = (*(quad)).x;
-  if ((x_118 < x_120)) {
-    return false;
-  }
-  let x_125 : f32 = (*(pos)).y;
-  let x_127 : f32 = (*(quad)).y;
-  if ((x_125 < x_127)) {
-    return false;
-  }
-  let x_132 : f32 = (*(pos)).x;
-  let x_134 : f32 = (*(quad)).x;
-  let x_136 : f32 = (*(quad)).z;
-  if ((x_132 > (x_134 + x_136))) {
-    return false;
-  }
-  let x_142 : f32 = (*(pos)).y;
-  let x_144 : f32 = (*(quad)).y;
-  let x_146 : f32 = (*(quad)).w;
-  if ((x_142 > (x_144 + x_146))) {
-    return false;
-  }
-  return true;
-}
-
-fn match_vf2_(pos_1 : ptr<function, vec2<f32>>) -> vec4<f32> {
-  var res : vec4<f32>;
-  var i : i32;
-  var param : vec2<f32>;
-  var param_1 : vec4<f32>;
-  var indexable : array<vec4<f32>, 8>;
-  var indexable_1 : array<vec4<f32>, 8>;
-  var indexable_2 : array<vec4<f32>, 8>;
-  var indexable_3 : array<vec4<f32>, 16>;
-  res = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  i = 0;
-  loop {
-    let x_156 : i32 = i;
-    if ((x_156 < 8)) {
-    } else {
-      break;
-    }
-    let x_159 : i32 = i;
-    let x_160 : vec2<f32> = *(pos_1);
-    param = x_160;
-    indexable = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-    let x_162 : vec4<f32> = indexable[x_159];
-    param_1 = x_162;
-    let x_163 : bool = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_163) {
-      let x_166 : i32 = i;
-      indexable_1 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_168 : f32 = indexable_1[x_166].x;
-      let x_170 : i32 = i;
-      indexable_2 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_172 : f32 = indexable_2[x_170].y;
-      let x_175 : i32 = i;
-      indexable_3 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      let x_181 : vec4<f32> = indexable_3[((((i32(x_168) * i32(x_172)) + (x_175 * 9)) + 11) % 16)];
-      res = x_181;
-    }
-
-    continuing {
-      let x_182 : i32 = i;
-      i = (x_182 + 1);
-    }
-  }
-  let x_184 : vec4<f32> = res;
-  return x_184;
-}
-
-fn main_1() {
-  var lin : vec2<f32>;
-  var param_2 : vec2<f32>;
-  let x_105 : vec4<f32> = gl_FragCoord;
-  let x_108 : vec2<f32> = x_20.resolution;
-  lin = (vec2<f32>(x_105.x, x_105.y) / x_108);
-  let x_110 : vec2<f32> = lin;
-  lin = floor((x_110 * 32.0));
-  let x_113 : vec2<f32> = lin;
-  param_2 = x_113;
-  let x_114 : vec4<f32> = match_vf2_(&(param_2));
-  x_GLF_color = x_114;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a06e811..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,268 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b1, space0) {
-  uint4 x_32[1];
-};
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_254 = from;
-  k = x_254;
-  const int x_255 = from;
-  i = x_255;
-  const int x_256 = mid;
-  j = (x_256 + 1);
-  while (true) {
-    const int x_262 = i;
-    const int x_263 = mid;
-    const int x_265 = j;
-    const int x_266 = to;
-    if (((x_262 <= x_263) & (x_265 <= x_266))) {
-    } else {
-      break;
-    }
-    const int x_272 = data[i];
-    const int x_275 = data[j];
-    if ((x_272 < x_275)) {
-      const int x_280 = k;
-      k = (x_280 + 1);
-      const int x_282 = i;
-      i = (x_282 + 1);
-      const int x_285 = data[x_282];
-      temp[x_280] = x_285;
-    } else {
-      const int x_287 = k;
-      k = (x_287 + 1);
-      const int x_289 = j;
-      j = (x_289 + 1);
-      const int x_292 = data[x_289];
-      temp[x_287] = x_292;
-    }
-  }
-  while (true) {
-    const int x_298 = i;
-    const int x_300 = i;
-    const int x_301 = mid;
-    if (((x_298 < 10) & (x_300 <= x_301))) {
-    } else {
-      break;
-    }
-    const int x_305 = k;
-    k = (x_305 + 1);
-    const int x_307 = i;
-    i = (x_307 + 1);
-    const int x_310 = data[x_307];
-    temp[x_305] = x_310;
-  }
-  const int x_312 = from;
-  i_1 = x_312;
-  while (true) {
-    const int x_317 = i_1;
-    const int x_318 = to;
-    if ((x_317 <= x_318)) {
-    } else {
-      break;
-    }
-    const int x_321 = i_1;
-    const int x_324 = temp[i_1];
-    data[x_321] = x_324;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_87 = asfloat(x_28[0].x);
-  i_3 = int(x_87);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_136 = j_1;
-      const int x_139 = data[j_1];
-      temp[x_136] = x_139;
-    }
-  }
-  mergeSort_();
-  const float x_145 = gl_FragCoord.y;
-  if ((int(x_145) < 30)) {
-    const int x_152 = data[0];
-    grey = (0.5f + (float(x_152) / 10.0f));
-  } else {
-    const float x_157 = gl_FragCoord.y;
-    if ((int(x_157) < 60)) {
-      const int x_164 = data[1];
-      grey = (0.5f + (float(x_164) / 10.0f));
-    } else {
-      const float x_169 = gl_FragCoord.y;
-      if ((int(x_169) < 90)) {
-        const int x_176 = data[2];
-        grey = (0.5f + (float(x_176) / 10.0f));
-      } else {
-        const float x_181 = gl_FragCoord.y;
-        if ((int(x_181) < 120)) {
-          const int x_188 = data[3];
-          grey = (0.5f + (float(x_188) / 10.0f));
-        } else {
-          const float x_193 = gl_FragCoord.y;
-          if ((int(x_193) < 150)) {
-            discard;
-          } else {
-            const float x_200 = gl_FragCoord.y;
-            if ((int(x_200) < 180)) {
-              const int x_207 = data[5];
-              grey = (0.5f + (float(x_207) / 10.0f));
-            } else {
-              const float x_212 = gl_FragCoord.y;
-              if ((int(x_212) < 210)) {
-                const int x_219 = data[6];
-                grey = (0.5f + (float(x_219) / 10.0f));
-              } else {
-                const float x_224 = gl_FragCoord.y;
-                if ((int(x_224) < 240)) {
-                  const int x_231 = data[7];
-                  grey = (0.5f + (float(x_231) / 10.0f));
-                } else {
-                  const float x_236 = gl_FragCoord.y;
-                  if ((int(x_236) < 270)) {
-                    const int x_243 = data[8];
-                    grey = (0.5f + (float(x_243) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_247 = grey;
-  const float3 x_248 = float3(x_247, x_247, x_247);
-  x_GLF_color = float4(x_248.x, x_248.y, x_248.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.msl
deleted file mode 100644
index f76fa2a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,323 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_254 = *(from);
-  k = x_254;
-  int const x_255 = *(from);
-  i = x_255;
-  int const x_256 = *(mid);
-  j = as_type<int>((as_type<uint>(x_256) + as_type<uint>(1)));
-  while (true) {
-    int const x_262 = i;
-    int const x_263 = *(mid);
-    int const x_265 = j;
-    int const x_266 = *(to);
-    if (((x_262 <= x_263) & (x_265 <= x_266))) {
-    } else {
-      break;
-    }
-    int const x_270 = i;
-    int const x_272 = (*(tint_symbol_3)).arr[x_270];
-    int const x_273 = j;
-    int const x_275 = (*(tint_symbol_3)).arr[x_273];
-    if ((x_272 < x_275)) {
-      int const x_280 = k;
-      k = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
-      int const x_282 = i;
-      i = as_type<int>((as_type<uint>(x_282) + as_type<uint>(1)));
-      int const x_285 = (*(tint_symbol_3)).arr[x_282];
-      (*(tint_symbol_4)).arr[x_280] = x_285;
-    } else {
-      int const x_287 = k;
-      k = as_type<int>((as_type<uint>(x_287) + as_type<uint>(1)));
-      int const x_289 = j;
-      j = as_type<int>((as_type<uint>(x_289) + as_type<uint>(1)));
-      int const x_292 = (*(tint_symbol_3)).arr[x_289];
-      (*(tint_symbol_4)).arr[x_287] = x_292;
-    }
-  }
-  while (true) {
-    int const x_298 = i;
-    int const x_300 = i;
-    int const x_301 = *(mid);
-    if (((x_298 < 10) & (x_300 <= x_301))) {
-    } else {
-      break;
-    }
-    int const x_305 = k;
-    k = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
-    int const x_307 = i;
-    i = as_type<int>((as_type<uint>(x_307) + as_type<uint>(1)));
-    int const x_310 = (*(tint_symbol_3)).arr[x_307];
-    (*(tint_symbol_4)).arr[x_305] = x_310;
-  }
-  int const x_312 = *(from);
-  i_1 = x_312;
-  while (true) {
-    int const x_317 = i_1;
-    int const x_318 = *(to);
-    if ((x_317 <= x_318)) {
-    } else {
-      break;
-    }
-    int const x_321 = i_1;
-    int const x_322 = i_1;
-    int const x_324 = (*(tint_symbol_4)).arr[x_322];
-    (*(tint_symbol_3)).arr[x_321] = x_324;
-    {
-      int const x_326 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_326) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_333 = m;
-    int const x_334 = high;
-    if ((x_333 <= x_334)) {
-    } else {
-      break;
-    }
-    int const x_337 = low;
-    i_2 = x_337;
-    while (true) {
-      int const x_342 = i_2;
-      int const x_343 = high;
-      if ((x_342 < x_343)) {
-      } else {
-        break;
-      }
-      int const x_346 = i_2;
-      from_1 = x_346;
-      int const x_347 = i_2;
-      int const x_348 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_347) + as_type<uint>(x_348)))) - as_type<uint>(1)));
-      int const x_351 = i_2;
-      int const x_352 = m;
-      int const x_356 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_351) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_352))))))) - as_type<uint>(1))), x_356);
-      int const x_358 = from_1;
-      param = x_358;
-      int const x_359 = mid_1;
-      param_1 = x_359;
-      int const x_360 = to_1;
-      param_2 = x_360;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_362 = m;
-        int const x_364 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_364) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_362))))));
-      }
-    }
-    {
-      int const x_366 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_366)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_87 = x_28.injectionSwitch.x;
-  i_3 = int(x_87);
-  while (true) {
-    int const x_93 = i_3;
-    switch(x_93) {
-      case 9: {
-        int const x_123 = i_3;
-        (*(tint_symbol_7)).arr[x_123] = -5;
-        break;
-      }
-      case 8: {
-        int const x_121 = i_3;
-        (*(tint_symbol_7)).arr[x_121] = -4;
-        break;
-      }
-      case 7: {
-        int const x_119 = i_3;
-        (*(tint_symbol_7)).arr[x_119] = -3;
-        break;
-      }
-      case 6: {
-        int const x_117 = i_3;
-        (*(tint_symbol_7)).arr[x_117] = -2;
-        break;
-      }
-      case 5: {
-        int const x_115 = i_3;
-        (*(tint_symbol_7)).arr[x_115] = -1;
-        break;
-      }
-      case 4: {
-        int const x_113 = i_3;
-        (*(tint_symbol_7)).arr[x_113] = 0;
-        break;
-      }
-      case 3: {
-        int const x_111 = i_3;
-        (*(tint_symbol_7)).arr[x_111] = 1;
-        break;
-      }
-      case 2: {
-        int const x_109 = i_3;
-        (*(tint_symbol_7)).arr[x_109] = 2;
-        break;
-      }
-      case 1: {
-        int const x_107 = i_3;
-        (*(tint_symbol_7)).arr[x_107] = 3;
-        break;
-      }
-      case 0: {
-        int const x_105 = i_3;
-        (*(tint_symbol_7)).arr[x_105] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_125 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_125) + as_type<uint>(1)));
-    {
-      int const x_127 = i_3;
-      if ((x_127 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_133 = j_1;
-    if ((x_133 < 10)) {
-    } else {
-      break;
-    }
-    int const x_136 = j_1;
-    int const x_137 = j_1;
-    int const x_139 = (*(tint_symbol_7)).arr[x_137];
-    (*(tint_symbol_8)).arr[x_136] = x_139;
-    {
-      int const x_141 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_141) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_145 = (*(tint_symbol_9)).y;
-  if ((int(x_145) < 30)) {
-    int const x_152 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_152) / 10.0f));
-  } else {
-    float const x_157 = (*(tint_symbol_9)).y;
-    if ((int(x_157) < 60)) {
-      int const x_164 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_164) / 10.0f));
-    } else {
-      float const x_169 = (*(tint_symbol_9)).y;
-      if ((int(x_169) < 90)) {
-        int const x_176 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_176) / 10.0f));
-      } else {
-        float const x_181 = (*(tint_symbol_9)).y;
-        if ((int(x_181) < 120)) {
-          int const x_188 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_188) / 10.0f));
-        } else {
-          float const x_193 = (*(tint_symbol_9)).y;
-          if ((int(x_193) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_200 = (*(tint_symbol_9)).y;
-            if ((int(x_200) < 180)) {
-              int const x_207 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_207) / 10.0f));
-            } else {
-              float const x_212 = (*(tint_symbol_9)).y;
-              if ((int(x_212) < 210)) {
-                int const x_219 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_219) / 10.0f));
-              } else {
-                float const x_224 = (*(tint_symbol_9)).y;
-                if ((int(x_224) < 240)) {
-                  int const x_231 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_231) / 10.0f));
-                } else {
-                  float const x_236 = (*(tint_symbol_9)).y;
-                  if ((int(x_236) < 270)) {
-                    int const x_243 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_243) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_247 = grey;
-  float3 const x_248 = float3(x_247, x_247, x_247);
-  *(tint_symbol_10) = float4(x_248.x, x_248.y, x_248.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b590ee6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,638 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 412
-; Schema: 0
-               OpCapability Shader
-        %176 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_32 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %35 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %131 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %200 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %399 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %26
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %33 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %35
-          %i = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-        %i_1 = OpVariable %_ptr_Function_int Function %35
-         %40 = OpLoad %int %from
-               OpStore %k %40
-         %42 = OpLoad %int %from
-               OpStore %i %42
-         %44 = OpLoad %int %mid
-         %46 = OpIAdd %int %44 %int_1
-               OpStore %j %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %int %mid
-         %54 = OpLoad %int %j
-         %56 = OpLoad %int %to
-         %57 = OpSLessThanEqual %bool %51 %53
-         %59 = OpSLessThanEqual %bool %54 %56
-         %60 = OpLogicalAnd %bool %57 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %48
-         %61 = OpLabel
-         %64 = OpLoad %int %i
-         %66 = OpAccessChain %_ptr_Private_int %data %64
-         %67 = OpLoad %int %66
-         %68 = OpLoad %int %j
-         %69 = OpAccessChain %_ptr_Private_int %data %68
-         %70 = OpLoad %int %69
-         %71 = OpSLessThan %bool %67 %70
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-         %75 = OpLoad %int %k
-         %76 = OpIAdd %int %75 %int_1
-               OpStore %k %76
-         %77 = OpLoad %int %i
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %i %78
-         %79 = OpAccessChain %_ptr_Private_int %data %77
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Private_int %temp %75
-               OpStore %81 %80
-               OpBranch %72
-         %74 = OpLabel
-         %82 = OpLoad %int %k
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %k %83
-         %84 = OpLoad %int %j
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %j %85
-         %86 = OpAccessChain %_ptr_Private_int %data %84
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Private_int %temp %82
-               OpStore %88 %87
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %89
-         %89 = OpLabel
-               OpLoopMerge %90 %91 None
-               OpBranch %92
-         %92 = OpLabel
-         %93 = OpLoad %int %i
-         %94 = OpLoad %int %i
-         %96 = OpLoad %int %mid
-         %98 = OpSLessThan %bool %93 %int_10
-         %99 = OpSLessThanEqual %bool %94 %96
-        %100 = OpLogicalAnd %bool %98 %99
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-               OpBranch %101
-        %103 = OpLabel
-               OpBranch %90
-        %101 = OpLabel
-        %104 = OpLoad %int %k
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %k %105
-        %106 = OpLoad %int %i
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %i %107
-        %108 = OpAccessChain %_ptr_Private_int %data %106
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Private_int %temp %104
-               OpStore %110 %109
-               OpBranch %91
-         %91 = OpLabel
-               OpBranch %89
-         %90 = OpLabel
-        %112 = OpLoad %int %from
-               OpStore %i_1 %112
-               OpBranch %113
-        %113 = OpLabel
-               OpLoopMerge %114 %115 None
-               OpBranch %116
-        %116 = OpLabel
-        %117 = OpLoad %int %i_1
-        %119 = OpLoad %int %to
-        %120 = OpSLessThanEqual %bool %117 %119
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpBranch %121
-        %123 = OpLabel
-               OpBranch %114
-        %121 = OpLabel
-        %124 = OpLoad %int %i_1
-        %125 = OpLoad %int %i_1
-        %126 = OpAccessChain %_ptr_Private_int %temp %125
-        %127 = OpLoad %int %126
-        %128 = OpAccessChain %_ptr_Private_int %data %124
-               OpStore %128 %127
-               OpBranch %115
-        %115 = OpLabel
-        %129 = OpLoad %int %i_1
-        %130 = OpIAdd %int %129 %int_1
-               OpStore %i_1 %130
-               OpBranch %113
-        %114 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %131
-        %133 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %35
-       %high = OpVariable %_ptr_Function_int Function %35
-          %m = OpVariable %_ptr_Function_int Function %35
-        %i_2 = OpVariable %_ptr_Function_int Function %35
-     %from_1 = OpVariable %_ptr_Function_int Function %35
-      %mid_1 = OpVariable %_ptr_Function_int Function %35
-       %to_1 = OpVariable %_ptr_Function_int Function %35
-      %param = OpVariable %_ptr_Function_int Function %35
-    %param_1 = OpVariable %_ptr_Function_int Function %35
-    %param_2 = OpVariable %_ptr_Function_int Function %35
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %146
-        %146 = OpLabel
-               OpLoopMerge %147 %148 None
-               OpBranch %149
-        %149 = OpLabel
-        %150 = OpLoad %int %m
-        %151 = OpLoad %int %high
-        %152 = OpSLessThanEqual %bool %150 %151
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %155
-        %154 = OpLabel
-               OpBranch %153
-        %155 = OpLabel
-               OpBranch %147
-        %153 = OpLabel
-        %156 = OpLoad %int %low
-               OpStore %i_2 %156
-               OpBranch %157
-        %157 = OpLabel
-               OpLoopMerge %158 %159 None
-               OpBranch %160
-        %160 = OpLabel
-        %161 = OpLoad %int %i_2
-        %162 = OpLoad %int %high
-        %163 = OpSLessThan %bool %161 %162
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %166
-        %165 = OpLabel
-               OpBranch %164
-        %166 = OpLabel
-               OpBranch %158
-        %164 = OpLabel
-        %167 = OpLoad %int %i_2
-               OpStore %from_1 %167
-        %168 = OpLoad %int %i_2
-        %169 = OpLoad %int %m
-        %170 = OpIAdd %int %168 %169
-        %171 = OpISub %int %170 %int_1
-               OpStore %mid_1 %171
-        %172 = OpLoad %int %i_2
-        %173 = OpLoad %int %m
-        %174 = OpLoad %int %high
-        %178 = OpIMul %int %int_2 %173
-        %179 = OpIAdd %int %172 %178
-        %180 = OpISub %int %179 %int_1
-        %175 = OpExtInst %int %176 SMin %180 %174
-               OpStore %to_1 %175
-        %181 = OpLoad %int %from_1
-               OpStore %param %181
-        %182 = OpLoad %int %mid_1
-               OpStore %param_1 %182
-        %183 = OpLoad %int %to_1
-               OpStore %param_2 %183
-        %184 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %159
-        %159 = OpLabel
-        %188 = OpLoad %int %m
-        %189 = OpLoad %int %i_2
-        %190 = OpIMul %int %int_2 %188
-        %191 = OpIAdd %int %189 %190
-               OpStore %i_2 %191
-               OpBranch %157
-        %158 = OpLabel
-               OpBranch %148
-        %148 = OpLabel
-        %192 = OpLoad %int %m
-        %193 = OpIMul %int %int_2 %192
-               OpStore %m %193
-               OpBranch %146
-        %147 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %131
-        %195 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %35
-        %j_1 = OpVariable %_ptr_Function_int Function %35
-       %grey = OpVariable %_ptr_Function_float Function %200
-        %203 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %204 = OpLoad %float %203
-        %205 = OpConvertFToS %int %204
-               OpStore %i_3 %205
-               OpBranch %206
-        %206 = OpLabel
-               OpLoopMerge %207 %208 None
-               OpBranch %209
-        %209 = OpLabel
-        %210 = OpLoad %int %i_3
-               OpSelectionMerge %211 None
-               OpSwitch %210 %212 9 %213 8 %214 7 %215 6 %216 5 %217 4 %218 3 %219 2 %220 1 %221 0 %222
-        %213 = OpLabel
-        %223 = OpLoad %int %i_3
-        %224 = OpAccessChain %_ptr_Private_int %data %223
-               OpStore %224 %int_n5
-               OpBranch %211
-        %214 = OpLabel
-        %226 = OpLoad %int %i_3
-        %227 = OpAccessChain %_ptr_Private_int %data %226
-               OpStore %227 %int_n4
-               OpBranch %211
-        %215 = OpLabel
-        %229 = OpLoad %int %i_3
-        %230 = OpAccessChain %_ptr_Private_int %data %229
-               OpStore %230 %int_n3
-               OpBranch %211
-        %216 = OpLabel
-        %232 = OpLoad %int %i_3
-        %233 = OpAccessChain %_ptr_Private_int %data %232
-               OpStore %233 %int_n2
-               OpBranch %211
-        %217 = OpLabel
-        %235 = OpLoad %int %i_3
-        %236 = OpAccessChain %_ptr_Private_int %data %235
-               OpStore %236 %int_n1
-               OpBranch %211
-        %218 = OpLabel
-        %238 = OpLoad %int %i_3
-        %239 = OpAccessChain %_ptr_Private_int %data %238
-               OpStore %239 %int_0
-               OpBranch %211
-        %219 = OpLabel
-        %240 = OpLoad %int %i_3
-        %241 = OpAccessChain %_ptr_Private_int %data %240
-               OpStore %241 %int_1
-               OpBranch %211
-        %220 = OpLabel
-        %242 = OpLoad %int %i_3
-        %243 = OpAccessChain %_ptr_Private_int %data %242
-               OpStore %243 %int_2
-               OpBranch %211
-        %221 = OpLabel
-        %244 = OpLoad %int %i_3
-        %245 = OpAccessChain %_ptr_Private_int %data %244
-               OpStore %245 %int_3
-               OpBranch %211
-        %222 = OpLabel
-        %247 = OpLoad %int %i_3
-        %248 = OpAccessChain %_ptr_Private_int %data %247
-               OpStore %248 %int_4
-               OpBranch %211
-        %212 = OpLabel
-               OpBranch %211
-        %211 = OpLabel
-        %250 = OpLoad %int %i_3
-        %251 = OpIAdd %int %250 %int_1
-               OpStore %i_3 %251
-               OpBranch %208
-        %208 = OpLabel
-        %252 = OpLoad %int %i_3
-        %253 = OpSLessThan %bool %252 %int_10
-               OpBranchConditional %253 %206 %207
-        %207 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %254
-        %254 = OpLabel
-               OpLoopMerge %255 %256 None
-               OpBranch %257
-        %257 = OpLabel
-        %258 = OpLoad %int %j_1
-        %259 = OpSLessThan %bool %258 %int_10
-               OpSelectionMerge %260 None
-               OpBranchConditional %259 %261 %262
-        %261 = OpLabel
-               OpBranch %260
-        %262 = OpLabel
-               OpBranch %255
-        %260 = OpLabel
-        %263 = OpLoad %int %j_1
-        %264 = OpLoad %int %j_1
-        %265 = OpAccessChain %_ptr_Private_int %data %264
-        %266 = OpLoad %int %265
-        %267 = OpAccessChain %_ptr_Private_int %temp %263
-               OpStore %267 %266
-               OpBranch %256
-        %256 = OpLabel
-        %268 = OpLoad %int %j_1
-        %269 = OpIAdd %int %268 %int_1
-               OpStore %j_1 %269
-               OpBranch %254
-        %255 = OpLabel
-        %270 = OpFunctionCall %void %mergeSort_
-        %273 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %274 = OpLoad %float %273
-        %275 = OpConvertFToS %int %274
-        %277 = OpSLessThan %bool %275 %int_30
-               OpSelectionMerge %278 None
-               OpBranchConditional %277 %279 %280
-        %279 = OpLabel
-        %281 = OpAccessChain %_ptr_Private_int %data %int_0
-        %282 = OpLoad %int %281
-        %284 = OpConvertSToF %float %282
-        %286 = OpFDiv %float %284 %float_10
-        %287 = OpFAdd %float %float_0_5 %286
-               OpStore %grey %287
-               OpBranch %278
-        %280 = OpLabel
-        %288 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %289 = OpLoad %float %288
-        %290 = OpConvertFToS %int %289
-        %292 = OpSLessThan %bool %290 %int_60
-               OpSelectionMerge %293 None
-               OpBranchConditional %292 %294 %295
-        %294 = OpLabel
-        %296 = OpAccessChain %_ptr_Private_int %data %int_1
-        %297 = OpLoad %int %296
-        %298 = OpConvertSToF %float %297
-        %299 = OpFDiv %float %298 %float_10
-        %300 = OpFAdd %float %float_0_5 %299
-               OpStore %grey %300
-               OpBranch %293
-        %295 = OpLabel
-        %301 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %302 = OpLoad %float %301
-        %303 = OpConvertFToS %int %302
-        %305 = OpSLessThan %bool %303 %int_90
-               OpSelectionMerge %306 None
-               OpBranchConditional %305 %307 %308
-        %307 = OpLabel
-        %309 = OpAccessChain %_ptr_Private_int %data %int_2
-        %310 = OpLoad %int %309
-        %311 = OpConvertSToF %float %310
-        %312 = OpFDiv %float %311 %float_10
-        %313 = OpFAdd %float %float_0_5 %312
-               OpStore %grey %313
-               OpBranch %306
-        %308 = OpLabel
-        %314 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %315 = OpLoad %float %314
-        %316 = OpConvertFToS %int %315
-        %318 = OpSLessThan %bool %316 %int_120
-               OpSelectionMerge %319 None
-               OpBranchConditional %318 %320 %321
-        %320 = OpLabel
-        %322 = OpAccessChain %_ptr_Private_int %data %int_3
-        %323 = OpLoad %int %322
-        %324 = OpConvertSToF %float %323
-        %325 = OpFDiv %float %324 %float_10
-        %326 = OpFAdd %float %float_0_5 %325
-               OpStore %grey %326
-               OpBranch %319
-        %321 = OpLabel
-        %327 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %328 = OpLoad %float %327
-        %329 = OpConvertFToS %int %328
-        %331 = OpSLessThan %bool %329 %int_150
-               OpSelectionMerge %332 None
-               OpBranchConditional %331 %333 %334
-        %333 = OpLabel
-               OpKill
-        %334 = OpLabel
-        %335 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %336 = OpLoad %float %335
-        %337 = OpConvertFToS %int %336
-        %339 = OpSLessThan %bool %337 %int_180
-               OpSelectionMerge %340 None
-               OpBranchConditional %339 %341 %342
-        %341 = OpLabel
-        %344 = OpAccessChain %_ptr_Private_int %data %int_5
-        %345 = OpLoad %int %344
-        %346 = OpConvertSToF %float %345
-        %347 = OpFDiv %float %346 %float_10
-        %348 = OpFAdd %float %float_0_5 %347
-               OpStore %grey %348
-               OpBranch %340
-        %342 = OpLabel
-        %349 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %350 = OpLoad %float %349
-        %351 = OpConvertFToS %int %350
-        %353 = OpSLessThan %bool %351 %int_210
-               OpSelectionMerge %354 None
-               OpBranchConditional %353 %355 %356
-        %355 = OpLabel
-        %358 = OpAccessChain %_ptr_Private_int %data %int_6
-        %359 = OpLoad %int %358
-        %360 = OpConvertSToF %float %359
-        %361 = OpFDiv %float %360 %float_10
-        %362 = OpFAdd %float %float_0_5 %361
-               OpStore %grey %362
-               OpBranch %354
-        %356 = OpLabel
-        %363 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %364 = OpLoad %float %363
-        %365 = OpConvertFToS %int %364
-        %367 = OpSLessThan %bool %365 %int_240
-               OpSelectionMerge %368 None
-               OpBranchConditional %367 %369 %370
-        %369 = OpLabel
-        %372 = OpAccessChain %_ptr_Private_int %data %int_7
-        %373 = OpLoad %int %372
-        %374 = OpConvertSToF %float %373
-        %375 = OpFDiv %float %374 %float_10
-        %376 = OpFAdd %float %float_0_5 %375
-               OpStore %grey %376
-               OpBranch %368
-        %370 = OpLabel
-        %377 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %378 = OpLoad %float %377
-        %379 = OpConvertFToS %int %378
-        %381 = OpSLessThan %bool %379 %int_270
-               OpSelectionMerge %382 None
-               OpBranchConditional %381 %383 %384
-        %383 = OpLabel
-        %386 = OpAccessChain %_ptr_Private_int %data %int_8
-        %387 = OpLoad %int %386
-        %388 = OpConvertSToF %float %387
-        %389 = OpFDiv %float %388 %float_10
-        %390 = OpFAdd %float %float_0_5 %389
-               OpStore %grey %390
-               OpBranch %382
-        %384 = OpLabel
-               OpKill
-        %382 = OpLabel
-               OpBranch %368
-        %368 = OpLabel
-               OpBranch %354
-        %354 = OpLabel
-               OpBranch %340
-        %340 = OpLabel
-               OpBranch %332
-        %332 = OpLabel
-               OpBranch %319
-        %319 = OpLabel
-               OpBranch %306
-        %306 = OpLabel
-               OpBranch %293
-        %293 = OpLabel
-               OpBranch %278
-        %278 = OpLabel
-        %391 = OpLoad %float %grey
-        %393 = OpCompositeConstruct %v3float %391 %391 %391
-        %394 = OpCompositeExtract %float %393 0
-        %395 = OpCompositeExtract %float %393 1
-        %396 = OpCompositeExtract %float %393 2
-        %398 = OpCompositeConstruct %v4float %394 %395 %396 %float_1
-               OpStore %x_GLF_color %398
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %399
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %403 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %404 = OpFunctionCall %void %main_1
-        %405 = OpLoad %v4float %x_GLF_color
-        %406 = OpCompositeConstruct %main_out %405
-               OpReturnValue %406
-               OpFunctionEnd
-       %main = OpFunction %void None %131
-        %408 = OpLabel
-        %410 = OpLoad %v4float %gl_FragCoord_param_1
-        %409 = OpFunctionCall %main_out %main_inner %410
-        %411 = OpCompositeExtract %v4float %409 0
-               OpStore %x_GLF_color_1_1 %411
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 961f5bc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,313 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_254 : i32 = *(from);
-  k = x_254;
-  let x_255 : i32 = *(from);
-  i = x_255;
-  let x_256 : i32 = *(mid);
-  j = (x_256 + 1);
-  loop {
-    let x_262 : i32 = i;
-    let x_263 : i32 = *(mid);
-    let x_265 : i32 = j;
-    let x_266 : i32 = *(to);
-    if (((x_262 <= x_263) & (x_265 <= x_266))) {
-    } else {
-      break;
-    }
-    let x_270 : i32 = i;
-    let x_272 : i32 = data[x_270];
-    let x_273 : i32 = j;
-    let x_275 : i32 = data[x_273];
-    if ((x_272 < x_275)) {
-      let x_280 : i32 = k;
-      k = (x_280 + 1);
-      let x_282 : i32 = i;
-      i = (x_282 + 1);
-      let x_285 : i32 = data[x_282];
-      temp[x_280] = x_285;
-    } else {
-      let x_287 : i32 = k;
-      k = (x_287 + 1);
-      let x_289 : i32 = j;
-      j = (x_289 + 1);
-      let x_292 : i32 = data[x_289];
-      temp[x_287] = x_292;
-    }
-  }
-  loop {
-    let x_298 : i32 = i;
-    let x_300 : i32 = i;
-    let x_301 : i32 = *(mid);
-    if (((x_298 < 10) & (x_300 <= x_301))) {
-    } else {
-      break;
-    }
-    let x_305 : i32 = k;
-    k = (x_305 + 1);
-    let x_307 : i32 = i;
-    i = (x_307 + 1);
-    let x_310 : i32 = data[x_307];
-    temp[x_305] = x_310;
-  }
-  let x_312 : i32 = *(from);
-  i_1 = x_312;
-  loop {
-    let x_317 : i32 = i_1;
-    let x_318 : i32 = *(to);
-    if ((x_317 <= x_318)) {
-    } else {
-      break;
-    }
-    let x_321 : i32 = i_1;
-    let x_322 : i32 = i_1;
-    let x_324 : i32 = temp[x_322];
-    data[x_321] = x_324;
-
-    continuing {
-      let x_326 : i32 = i_1;
-      i_1 = (x_326 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_333 : i32 = m;
-    let x_334 : i32 = high;
-    if ((x_333 <= x_334)) {
-    } else {
-      break;
-    }
-    let x_337 : i32 = low;
-    i_2 = x_337;
-    loop {
-      let x_342 : i32 = i_2;
-      let x_343 : i32 = high;
-      if ((x_342 < x_343)) {
-      } else {
-        break;
-      }
-      let x_346 : i32 = i_2;
-      from_1 = x_346;
-      let x_347 : i32 = i_2;
-      let x_348 : i32 = m;
-      mid_1 = ((x_347 + x_348) - 1);
-      let x_351 : i32 = i_2;
-      let x_352 : i32 = m;
-      let x_356 : i32 = high;
-      to_1 = min(((x_351 + (2 * x_352)) - 1), x_356);
-      let x_358 : i32 = from_1;
-      param = x_358;
-      let x_359 : i32 = mid_1;
-      param_1 = x_359;
-      let x_360 : i32 = to_1;
-      param_2 = x_360;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_362 : i32 = m;
-        let x_364 : i32 = i_2;
-        i_2 = (x_364 + (2 * x_362));
-      }
-    }
-
-    continuing {
-      let x_366 : i32 = m;
-      m = (2 * x_366);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_87 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_87);
-  loop {
-    let x_93 : i32 = i_3;
-    switch(x_93) {
-      case 9: {
-        let x_123 : i32 = i_3;
-        data[x_123] = -5;
-      }
-      case 8: {
-        let x_121 : i32 = i_3;
-        data[x_121] = -4;
-      }
-      case 7: {
-        let x_119 : i32 = i_3;
-        data[x_119] = -3;
-      }
-      case 6: {
-        let x_117 : i32 = i_3;
-        data[x_117] = -2;
-      }
-      case 5: {
-        let x_115 : i32 = i_3;
-        data[x_115] = -1;
-      }
-      case 4: {
-        let x_113 : i32 = i_3;
-        data[x_113] = 0;
-      }
-      case 3: {
-        let x_111 : i32 = i_3;
-        data[x_111] = 1;
-      }
-      case 2: {
-        let x_109 : i32 = i_3;
-        data[x_109] = 2;
-      }
-      case 1: {
-        let x_107 : i32 = i_3;
-        data[x_107] = 3;
-      }
-      case 0: {
-        let x_105 : i32 = i_3;
-        data[x_105] = 4;
-      }
-      default: {
-      }
-    }
-    let x_125 : i32 = i_3;
-    i_3 = (x_125 + 1);
-
-    continuing {
-      let x_127 : i32 = i_3;
-      if ((x_127 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_133 : i32 = j_1;
-    if ((x_133 < 10)) {
-    } else {
-      break;
-    }
-    let x_136 : i32 = j_1;
-    let x_137 : i32 = j_1;
-    let x_139 : i32 = data[x_137];
-    temp[x_136] = x_139;
-
-    continuing {
-      let x_141 : i32 = j_1;
-      j_1 = (x_141 + 1);
-    }
-  }
-  mergeSort_();
-  let x_145 : f32 = gl_FragCoord.y;
-  if ((i32(x_145) < 30)) {
-    let x_152 : i32 = data[0];
-    grey = (0.5 + (f32(x_152) / 10.0));
-  } else {
-    let x_157 : f32 = gl_FragCoord.y;
-    if ((i32(x_157) < 60)) {
-      let x_164 : i32 = data[1];
-      grey = (0.5 + (f32(x_164) / 10.0));
-    } else {
-      let x_169 : f32 = gl_FragCoord.y;
-      if ((i32(x_169) < 90)) {
-        let x_176 : i32 = data[2];
-        grey = (0.5 + (f32(x_176) / 10.0));
-      } else {
-        let x_181 : f32 = gl_FragCoord.y;
-        if ((i32(x_181) < 120)) {
-          let x_188 : i32 = data[3];
-          grey = (0.5 + (f32(x_188) / 10.0));
-        } else {
-          let x_193 : f32 = gl_FragCoord.y;
-          if ((i32(x_193) < 150)) {
-            discard;
-          } else {
-            let x_200 : f32 = gl_FragCoord.y;
-            if ((i32(x_200) < 180)) {
-              let x_207 : i32 = data[5];
-              grey = (0.5 + (f32(x_207) / 10.0));
-            } else {
-              let x_212 : f32 = gl_FragCoord.y;
-              if ((i32(x_212) < 210)) {
-                let x_219 : i32 = data[6];
-                grey = (0.5 + (f32(x_219) / 10.0));
-              } else {
-                let x_224 : f32 = gl_FragCoord.y;
-                if ((i32(x_224) < 240)) {
-                  let x_231 : i32 = data[7];
-                  grey = (0.5 + (f32(x_231) / 10.0));
-                } else {
-                  let x_236 : f32 = gl_FragCoord.y;
-                  if ((i32(x_236) < 270)) {
-                    let x_243 : i32 = data[8];
-                    grey = (0.5 + (f32(x_243) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_247 : f32 = grey;
-  let x_248 : vec3<f32> = vec3<f32>(x_247, x_247, x_247);
-  x_GLF_color = vec4<f32>(x_248.x, x_248.y, x_248.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index fa6bb30..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,276 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b1, space0) {
-  uint4 x_32[1];
-};
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_254 = from;
-  k = x_254;
-  const int x_255 = from;
-  i = x_255;
-  const int x_256 = mid;
-  j = (x_256 + 1);
-  while (true) {
-    const int x_262 = i;
-    const int x_263 = mid;
-    const int x_265 = j;
-    const int x_266 = to;
-    bool tint_tmp = (x_262 <= x_263);
-    if (tint_tmp) {
-      tint_tmp = (x_265 <= x_266);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_272 = data[i];
-    const int x_275 = data[j];
-    if ((x_272 < x_275)) {
-      const int x_280 = k;
-      k = (x_280 + 1);
-      const int x_282 = i;
-      i = (x_282 + 1);
-      const int x_285 = data[x_282];
-      temp[x_280] = x_285;
-    } else {
-      const int x_287 = k;
-      k = (x_287 + 1);
-      const int x_289 = j;
-      j = (x_289 + 1);
-      const int x_292 = data[x_289];
-      temp[x_287] = x_292;
-    }
-  }
-  while (true) {
-    const int x_298 = i;
-    const int x_300 = i;
-    const int x_301 = mid;
-    bool tint_tmp_1 = (x_298 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_300 <= x_301);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_305 = k;
-    k = (x_305 + 1);
-    const int x_307 = i;
-    i = (x_307 + 1);
-    const int x_310 = data[x_307];
-    temp[x_305] = x_310;
-  }
-  const int x_312 = from;
-  i_1 = x_312;
-  while (true) {
-    const int x_317 = i_1;
-    const int x_318 = to;
-    if ((x_317 <= x_318)) {
-    } else {
-      break;
-    }
-    const int x_321 = i_1;
-    const int x_324 = temp[i_1];
-    data[x_321] = x_324;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_87 = asfloat(x_28[0].x);
-  i_3 = int(x_87);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_136 = j_1;
-      const int x_139 = data[j_1];
-      temp[x_136] = x_139;
-    }
-  }
-  mergeSort_();
-  const float x_145 = gl_FragCoord.y;
-  if ((int(x_145) < 30)) {
-    const int x_152 = data[0];
-    grey = (0.5f + (float(x_152) / 10.0f));
-  } else {
-    const float x_157 = gl_FragCoord.y;
-    if ((int(x_157) < 60)) {
-      const int x_164 = data[1];
-      grey = (0.5f + (float(x_164) / 10.0f));
-    } else {
-      const float x_169 = gl_FragCoord.y;
-      if ((int(x_169) < 90)) {
-        const int x_176 = data[2];
-        grey = (0.5f + (float(x_176) / 10.0f));
-      } else {
-        const float x_181 = gl_FragCoord.y;
-        if ((int(x_181) < 120)) {
-          const int x_188 = data[3];
-          grey = (0.5f + (float(x_188) / 10.0f));
-        } else {
-          const float x_193 = gl_FragCoord.y;
-          if ((int(x_193) < 150)) {
-            discard;
-          } else {
-            const float x_200 = gl_FragCoord.y;
-            if ((int(x_200) < 180)) {
-              const int x_207 = data[5];
-              grey = (0.5f + (float(x_207) / 10.0f));
-            } else {
-              const float x_212 = gl_FragCoord.y;
-              if ((int(x_212) < 210)) {
-                const int x_219 = data[6];
-                grey = (0.5f + (float(x_219) / 10.0f));
-              } else {
-                const float x_224 = gl_FragCoord.y;
-                if ((int(x_224) < 240)) {
-                  const int x_231 = data[7];
-                  grey = (0.5f + (float(x_231) / 10.0f));
-                } else {
-                  const float x_236 = gl_FragCoord.y;
-                  if ((int(x_236) < 270)) {
-                    const int x_243 = data[8];
-                    grey = (0.5f + (float(x_243) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_247 = grey;
-  const float3 x_248 = float3(x_247, x_247, x_247);
-  x_GLF_color = float4(x_248.x, x_248.y, x_248.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.msl
deleted file mode 100644
index 26b7300..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,323 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_254 = *(from);
-  k = x_254;
-  int const x_255 = *(from);
-  i = x_255;
-  int const x_256 = *(mid);
-  j = as_type<int>((as_type<uint>(x_256) + as_type<uint>(1)));
-  while (true) {
-    int const x_262 = i;
-    int const x_263 = *(mid);
-    int const x_265 = j;
-    int const x_266 = *(to);
-    if (((x_262 <= x_263) && (x_265 <= x_266))) {
-    } else {
-      break;
-    }
-    int const x_270 = i;
-    int const x_272 = (*(tint_symbol_3)).arr[x_270];
-    int const x_273 = j;
-    int const x_275 = (*(tint_symbol_3)).arr[x_273];
-    if ((x_272 < x_275)) {
-      int const x_280 = k;
-      k = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
-      int const x_282 = i;
-      i = as_type<int>((as_type<uint>(x_282) + as_type<uint>(1)));
-      int const x_285 = (*(tint_symbol_3)).arr[x_282];
-      (*(tint_symbol_4)).arr[x_280] = x_285;
-    } else {
-      int const x_287 = k;
-      k = as_type<int>((as_type<uint>(x_287) + as_type<uint>(1)));
-      int const x_289 = j;
-      j = as_type<int>((as_type<uint>(x_289) + as_type<uint>(1)));
-      int const x_292 = (*(tint_symbol_3)).arr[x_289];
-      (*(tint_symbol_4)).arr[x_287] = x_292;
-    }
-  }
-  while (true) {
-    int const x_298 = i;
-    int const x_300 = i;
-    int const x_301 = *(mid);
-    if (((x_298 < 10) && (x_300 <= x_301))) {
-    } else {
-      break;
-    }
-    int const x_305 = k;
-    k = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
-    int const x_307 = i;
-    i = as_type<int>((as_type<uint>(x_307) + as_type<uint>(1)));
-    int const x_310 = (*(tint_symbol_3)).arr[x_307];
-    (*(tint_symbol_4)).arr[x_305] = x_310;
-  }
-  int const x_312 = *(from);
-  i_1 = x_312;
-  while (true) {
-    int const x_317 = i_1;
-    int const x_318 = *(to);
-    if ((x_317 <= x_318)) {
-    } else {
-      break;
-    }
-    int const x_321 = i_1;
-    int const x_322 = i_1;
-    int const x_324 = (*(tint_symbol_4)).arr[x_322];
-    (*(tint_symbol_3)).arr[x_321] = x_324;
-    {
-      int const x_326 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_326) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_333 = m;
-    int const x_334 = high;
-    if ((x_333 <= x_334)) {
-    } else {
-      break;
-    }
-    int const x_337 = low;
-    i_2 = x_337;
-    while (true) {
-      int const x_342 = i_2;
-      int const x_343 = high;
-      if ((x_342 < x_343)) {
-      } else {
-        break;
-      }
-      int const x_346 = i_2;
-      from_1 = x_346;
-      int const x_347 = i_2;
-      int const x_348 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_347) + as_type<uint>(x_348)))) - as_type<uint>(1)));
-      int const x_351 = i_2;
-      int const x_352 = m;
-      int const x_356 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_351) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_352))))))) - as_type<uint>(1))), x_356);
-      int const x_358 = from_1;
-      param = x_358;
-      int const x_359 = mid_1;
-      param_1 = x_359;
-      int const x_360 = to_1;
-      param_2 = x_360;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_362 = m;
-        int const x_364 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_364) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_362))))));
-      }
-    }
-    {
-      int const x_366 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_366)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_87 = x_28.injectionSwitch.x;
-  i_3 = int(x_87);
-  while (true) {
-    int const x_93 = i_3;
-    switch(x_93) {
-      case 9: {
-        int const x_123 = i_3;
-        (*(tint_symbol_7)).arr[x_123] = -5;
-        break;
-      }
-      case 8: {
-        int const x_121 = i_3;
-        (*(tint_symbol_7)).arr[x_121] = -4;
-        break;
-      }
-      case 7: {
-        int const x_119 = i_3;
-        (*(tint_symbol_7)).arr[x_119] = -3;
-        break;
-      }
-      case 6: {
-        int const x_117 = i_3;
-        (*(tint_symbol_7)).arr[x_117] = -2;
-        break;
-      }
-      case 5: {
-        int const x_115 = i_3;
-        (*(tint_symbol_7)).arr[x_115] = -1;
-        break;
-      }
-      case 4: {
-        int const x_113 = i_3;
-        (*(tint_symbol_7)).arr[x_113] = 0;
-        break;
-      }
-      case 3: {
-        int const x_111 = i_3;
-        (*(tint_symbol_7)).arr[x_111] = 1;
-        break;
-      }
-      case 2: {
-        int const x_109 = i_3;
-        (*(tint_symbol_7)).arr[x_109] = 2;
-        break;
-      }
-      case 1: {
-        int const x_107 = i_3;
-        (*(tint_symbol_7)).arr[x_107] = 3;
-        break;
-      }
-      case 0: {
-        int const x_105 = i_3;
-        (*(tint_symbol_7)).arr[x_105] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_125 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_125) + as_type<uint>(1)));
-    {
-      int const x_127 = i_3;
-      if ((x_127 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_133 = j_1;
-    if ((x_133 < 10)) {
-    } else {
-      break;
-    }
-    int const x_136 = j_1;
-    int const x_137 = j_1;
-    int const x_139 = (*(tint_symbol_7)).arr[x_137];
-    (*(tint_symbol_8)).arr[x_136] = x_139;
-    {
-      int const x_141 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_141) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_145 = (*(tint_symbol_9)).y;
-  if ((int(x_145) < 30)) {
-    int const x_152 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_152) / 10.0f));
-  } else {
-    float const x_157 = (*(tint_symbol_9)).y;
-    if ((int(x_157) < 60)) {
-      int const x_164 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_164) / 10.0f));
-    } else {
-      float const x_169 = (*(tint_symbol_9)).y;
-      if ((int(x_169) < 90)) {
-        int const x_176 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_176) / 10.0f));
-      } else {
-        float const x_181 = (*(tint_symbol_9)).y;
-        if ((int(x_181) < 120)) {
-          int const x_188 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_188) / 10.0f));
-        } else {
-          float const x_193 = (*(tint_symbol_9)).y;
-          if ((int(x_193) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_200 = (*(tint_symbol_9)).y;
-            if ((int(x_200) < 180)) {
-              int const x_207 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_207) / 10.0f));
-            } else {
-              float const x_212 = (*(tint_symbol_9)).y;
-              if ((int(x_212) < 210)) {
-                int const x_219 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_219) / 10.0f));
-              } else {
-                float const x_224 = (*(tint_symbol_9)).y;
-                if ((int(x_224) < 240)) {
-                  int const x_231 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_231) / 10.0f));
-                } else {
-                  float const x_236 = (*(tint_symbol_9)).y;
-                  if ((int(x_236) < 270)) {
-                    int const x_243 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_243) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_247 = grey;
-  float3 const x_248 = float3(x_247, x_247, x_247);
-  *(tint_symbol_10) = float4(x_248.x, x_248.y, x_248.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 72c4199..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,648 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 416
-; Schema: 0
-               OpCapability Shader
-        %180 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_32 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %35 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %135 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %204 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %403 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %26
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %33 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %35
-          %i = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-        %i_1 = OpVariable %_ptr_Function_int Function %35
-         %40 = OpLoad %int %from
-               OpStore %k %40
-         %42 = OpLoad %int %from
-               OpStore %i %42
-         %44 = OpLoad %int %mid
-         %46 = OpIAdd %int %44 %int_1
-               OpStore %j %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %int %mid
-         %54 = OpLoad %int %j
-         %56 = OpLoad %int %to
-         %57 = OpSLessThanEqual %bool %51 %53
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %59
-         %60 = OpLabel
-         %61 = OpSLessThanEqual %bool %54 %56
-               OpBranch %59
-         %59 = OpLabel
-         %62 = OpPhi %bool %57 %50 %61 %60
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %48
-         %63 = OpLabel
-         %66 = OpLoad %int %i
-         %68 = OpAccessChain %_ptr_Private_int %data %66
-         %69 = OpLoad %int %68
-         %70 = OpLoad %int %j
-         %71 = OpAccessChain %_ptr_Private_int %data %70
-         %72 = OpLoad %int %71
-         %73 = OpSLessThan %bool %69 %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-         %77 = OpLoad %int %k
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %k %78
-         %79 = OpLoad %int %i
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %i %80
-         %81 = OpAccessChain %_ptr_Private_int %data %79
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Private_int %temp %77
-               OpStore %83 %82
-               OpBranch %74
-         %76 = OpLabel
-         %84 = OpLoad %int %k
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %k %85
-         %86 = OpLoad %int %j
-         %87 = OpIAdd %int %86 %int_1
-               OpStore %j %87
-         %88 = OpAccessChain %_ptr_Private_int %data %86
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Private_int %temp %84
-               OpStore %90 %89
-               OpBranch %74
-         %74 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %i
-         %96 = OpLoad %int %i
-         %98 = OpLoad %int %mid
-        %100 = OpSLessThan %bool %95 %int_10
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-        %103 = OpSLessThanEqual %bool %96 %98
-               OpBranch %101
-        %101 = OpLabel
-        %104 = OpPhi %bool %100 %94 %103 %102
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %107
-        %106 = OpLabel
-               OpBranch %105
-        %107 = OpLabel
-               OpBranch %92
-        %105 = OpLabel
-        %108 = OpLoad %int %k
-        %109 = OpIAdd %int %108 %int_1
-               OpStore %k %109
-        %110 = OpLoad %int %i
-        %111 = OpIAdd %int %110 %int_1
-               OpStore %i %111
-        %112 = OpAccessChain %_ptr_Private_int %data %110
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Private_int %temp %108
-               OpStore %114 %113
-               OpBranch %93
-         %93 = OpLabel
-               OpBranch %91
-         %92 = OpLabel
-        %116 = OpLoad %int %from
-               OpStore %i_1 %116
-               OpBranch %117
-        %117 = OpLabel
-               OpLoopMerge %118 %119 None
-               OpBranch %120
-        %120 = OpLabel
-        %121 = OpLoad %int %i_1
-        %123 = OpLoad %int %to
-        %124 = OpSLessThanEqual %bool %121 %123
-               OpSelectionMerge %125 None
-               OpBranchConditional %124 %126 %127
-        %126 = OpLabel
-               OpBranch %125
-        %127 = OpLabel
-               OpBranch %118
-        %125 = OpLabel
-        %128 = OpLoad %int %i_1
-        %129 = OpLoad %int %i_1
-        %130 = OpAccessChain %_ptr_Private_int %temp %129
-        %131 = OpLoad %int %130
-        %132 = OpAccessChain %_ptr_Private_int %data %128
-               OpStore %132 %131
-               OpBranch %119
-        %119 = OpLabel
-        %133 = OpLoad %int %i_1
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %i_1 %134
-               OpBranch %117
-        %118 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %135
-        %137 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %35
-       %high = OpVariable %_ptr_Function_int Function %35
-          %m = OpVariable %_ptr_Function_int Function %35
-        %i_2 = OpVariable %_ptr_Function_int Function %35
-     %from_1 = OpVariable %_ptr_Function_int Function %35
-      %mid_1 = OpVariable %_ptr_Function_int Function %35
-       %to_1 = OpVariable %_ptr_Function_int Function %35
-      %param = OpVariable %_ptr_Function_int Function %35
-    %param_1 = OpVariable %_ptr_Function_int Function %35
-    %param_2 = OpVariable %_ptr_Function_int Function %35
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %154 = OpLoad %int %m
-        %155 = OpLoad %int %high
-        %156 = OpSLessThanEqual %bool %154 %155
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %159
-        %158 = OpLabel
-               OpBranch %157
-        %159 = OpLabel
-               OpBranch %151
-        %157 = OpLabel
-        %160 = OpLoad %int %low
-               OpStore %i_2 %160
-               OpBranch %161
-        %161 = OpLabel
-               OpLoopMerge %162 %163 None
-               OpBranch %164
-        %164 = OpLabel
-        %165 = OpLoad %int %i_2
-        %166 = OpLoad %int %high
-        %167 = OpSLessThan %bool %165 %166
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %162
-        %168 = OpLabel
-        %171 = OpLoad %int %i_2
-               OpStore %from_1 %171
-        %172 = OpLoad %int %i_2
-        %173 = OpLoad %int %m
-        %174 = OpIAdd %int %172 %173
-        %175 = OpISub %int %174 %int_1
-               OpStore %mid_1 %175
-        %176 = OpLoad %int %i_2
-        %177 = OpLoad %int %m
-        %178 = OpLoad %int %high
-        %182 = OpIMul %int %int_2 %177
-        %183 = OpIAdd %int %176 %182
-        %184 = OpISub %int %183 %int_1
-        %179 = OpExtInst %int %180 SMin %184 %178
-               OpStore %to_1 %179
-        %185 = OpLoad %int %from_1
-               OpStore %param %185
-        %186 = OpLoad %int %mid_1
-               OpStore %param_1 %186
-        %187 = OpLoad %int %to_1
-               OpStore %param_2 %187
-        %188 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %163
-        %163 = OpLabel
-        %192 = OpLoad %int %m
-        %193 = OpLoad %int %i_2
-        %194 = OpIMul %int %int_2 %192
-        %195 = OpIAdd %int %193 %194
-               OpStore %i_2 %195
-               OpBranch %161
-        %162 = OpLabel
-               OpBranch %152
-        %152 = OpLabel
-        %196 = OpLoad %int %m
-        %197 = OpIMul %int %int_2 %196
-               OpStore %m %197
-               OpBranch %150
-        %151 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %135
-        %199 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %35
-        %j_1 = OpVariable %_ptr_Function_int Function %35
-       %grey = OpVariable %_ptr_Function_float Function %204
-        %207 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %208 = OpLoad %float %207
-        %209 = OpConvertFToS %int %208
-               OpStore %i_3 %209
-               OpBranch %210
-        %210 = OpLabel
-               OpLoopMerge %211 %212 None
-               OpBranch %213
-        %213 = OpLabel
-        %214 = OpLoad %int %i_3
-               OpSelectionMerge %215 None
-               OpSwitch %214 %216 9 %217 8 %218 7 %219 6 %220 5 %221 4 %222 3 %223 2 %224 1 %225 0 %226
-        %217 = OpLabel
-        %227 = OpLoad %int %i_3
-        %228 = OpAccessChain %_ptr_Private_int %data %227
-               OpStore %228 %int_n5
-               OpBranch %215
-        %218 = OpLabel
-        %230 = OpLoad %int %i_3
-        %231 = OpAccessChain %_ptr_Private_int %data %230
-               OpStore %231 %int_n4
-               OpBranch %215
-        %219 = OpLabel
-        %233 = OpLoad %int %i_3
-        %234 = OpAccessChain %_ptr_Private_int %data %233
-               OpStore %234 %int_n3
-               OpBranch %215
-        %220 = OpLabel
-        %236 = OpLoad %int %i_3
-        %237 = OpAccessChain %_ptr_Private_int %data %236
-               OpStore %237 %int_n2
-               OpBranch %215
-        %221 = OpLabel
-        %239 = OpLoad %int %i_3
-        %240 = OpAccessChain %_ptr_Private_int %data %239
-               OpStore %240 %int_n1
-               OpBranch %215
-        %222 = OpLabel
-        %242 = OpLoad %int %i_3
-        %243 = OpAccessChain %_ptr_Private_int %data %242
-               OpStore %243 %int_0
-               OpBranch %215
-        %223 = OpLabel
-        %244 = OpLoad %int %i_3
-        %245 = OpAccessChain %_ptr_Private_int %data %244
-               OpStore %245 %int_1
-               OpBranch %215
-        %224 = OpLabel
-        %246 = OpLoad %int %i_3
-        %247 = OpAccessChain %_ptr_Private_int %data %246
-               OpStore %247 %int_2
-               OpBranch %215
-        %225 = OpLabel
-        %248 = OpLoad %int %i_3
-        %249 = OpAccessChain %_ptr_Private_int %data %248
-               OpStore %249 %int_3
-               OpBranch %215
-        %226 = OpLabel
-        %251 = OpLoad %int %i_3
-        %252 = OpAccessChain %_ptr_Private_int %data %251
-               OpStore %252 %int_4
-               OpBranch %215
-        %216 = OpLabel
-               OpBranch %215
-        %215 = OpLabel
-        %254 = OpLoad %int %i_3
-        %255 = OpIAdd %int %254 %int_1
-               OpStore %i_3 %255
-               OpBranch %212
-        %212 = OpLabel
-        %256 = OpLoad %int %i_3
-        %257 = OpSLessThan %bool %256 %int_10
-               OpBranchConditional %257 %210 %211
-        %211 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %258
-        %258 = OpLabel
-               OpLoopMerge %259 %260 None
-               OpBranch %261
-        %261 = OpLabel
-        %262 = OpLoad %int %j_1
-        %263 = OpSLessThan %bool %262 %int_10
-               OpSelectionMerge %264 None
-               OpBranchConditional %263 %265 %266
-        %265 = OpLabel
-               OpBranch %264
-        %266 = OpLabel
-               OpBranch %259
-        %264 = OpLabel
-        %267 = OpLoad %int %j_1
-        %268 = OpLoad %int %j_1
-        %269 = OpAccessChain %_ptr_Private_int %data %268
-        %270 = OpLoad %int %269
-        %271 = OpAccessChain %_ptr_Private_int %temp %267
-               OpStore %271 %270
-               OpBranch %260
-        %260 = OpLabel
-        %272 = OpLoad %int %j_1
-        %273 = OpIAdd %int %272 %int_1
-               OpStore %j_1 %273
-               OpBranch %258
-        %259 = OpLabel
-        %274 = OpFunctionCall %void %mergeSort_
-        %277 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %278 = OpLoad %float %277
-        %279 = OpConvertFToS %int %278
-        %281 = OpSLessThan %bool %279 %int_30
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %284
-        %283 = OpLabel
-        %285 = OpAccessChain %_ptr_Private_int %data %int_0
-        %286 = OpLoad %int %285
-        %288 = OpConvertSToF %float %286
-        %290 = OpFDiv %float %288 %float_10
-        %291 = OpFAdd %float %float_0_5 %290
-               OpStore %grey %291
-               OpBranch %282
-        %284 = OpLabel
-        %292 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %293 = OpLoad %float %292
-        %294 = OpConvertFToS %int %293
-        %296 = OpSLessThan %bool %294 %int_60
-               OpSelectionMerge %297 None
-               OpBranchConditional %296 %298 %299
-        %298 = OpLabel
-        %300 = OpAccessChain %_ptr_Private_int %data %int_1
-        %301 = OpLoad %int %300
-        %302 = OpConvertSToF %float %301
-        %303 = OpFDiv %float %302 %float_10
-        %304 = OpFAdd %float %float_0_5 %303
-               OpStore %grey %304
-               OpBranch %297
-        %299 = OpLabel
-        %305 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %306 = OpLoad %float %305
-        %307 = OpConvertFToS %int %306
-        %309 = OpSLessThan %bool %307 %int_90
-               OpSelectionMerge %310 None
-               OpBranchConditional %309 %311 %312
-        %311 = OpLabel
-        %313 = OpAccessChain %_ptr_Private_int %data %int_2
-        %314 = OpLoad %int %313
-        %315 = OpConvertSToF %float %314
-        %316 = OpFDiv %float %315 %float_10
-        %317 = OpFAdd %float %float_0_5 %316
-               OpStore %grey %317
-               OpBranch %310
-        %312 = OpLabel
-        %318 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %319 = OpLoad %float %318
-        %320 = OpConvertFToS %int %319
-        %322 = OpSLessThan %bool %320 %int_120
-               OpSelectionMerge %323 None
-               OpBranchConditional %322 %324 %325
-        %324 = OpLabel
-        %326 = OpAccessChain %_ptr_Private_int %data %int_3
-        %327 = OpLoad %int %326
-        %328 = OpConvertSToF %float %327
-        %329 = OpFDiv %float %328 %float_10
-        %330 = OpFAdd %float %float_0_5 %329
-               OpStore %grey %330
-               OpBranch %323
-        %325 = OpLabel
-        %331 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %332 = OpLoad %float %331
-        %333 = OpConvertFToS %int %332
-        %335 = OpSLessThan %bool %333 %int_150
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %338
-        %337 = OpLabel
-               OpKill
-        %338 = OpLabel
-        %339 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %340 = OpLoad %float %339
-        %341 = OpConvertFToS %int %340
-        %343 = OpSLessThan %bool %341 %int_180
-               OpSelectionMerge %344 None
-               OpBranchConditional %343 %345 %346
-        %345 = OpLabel
-        %348 = OpAccessChain %_ptr_Private_int %data %int_5
-        %349 = OpLoad %int %348
-        %350 = OpConvertSToF %float %349
-        %351 = OpFDiv %float %350 %float_10
-        %352 = OpFAdd %float %float_0_5 %351
-               OpStore %grey %352
-               OpBranch %344
-        %346 = OpLabel
-        %353 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %354 = OpLoad %float %353
-        %355 = OpConvertFToS %int %354
-        %357 = OpSLessThan %bool %355 %int_210
-               OpSelectionMerge %358 None
-               OpBranchConditional %357 %359 %360
-        %359 = OpLabel
-        %362 = OpAccessChain %_ptr_Private_int %data %int_6
-        %363 = OpLoad %int %362
-        %364 = OpConvertSToF %float %363
-        %365 = OpFDiv %float %364 %float_10
-        %366 = OpFAdd %float %float_0_5 %365
-               OpStore %grey %366
-               OpBranch %358
-        %360 = OpLabel
-        %367 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %368 = OpLoad %float %367
-        %369 = OpConvertFToS %int %368
-        %371 = OpSLessThan %bool %369 %int_240
-               OpSelectionMerge %372 None
-               OpBranchConditional %371 %373 %374
-        %373 = OpLabel
-        %376 = OpAccessChain %_ptr_Private_int %data %int_7
-        %377 = OpLoad %int %376
-        %378 = OpConvertSToF %float %377
-        %379 = OpFDiv %float %378 %float_10
-        %380 = OpFAdd %float %float_0_5 %379
-               OpStore %grey %380
-               OpBranch %372
-        %374 = OpLabel
-        %381 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %382 = OpLoad %float %381
-        %383 = OpConvertFToS %int %382
-        %385 = OpSLessThan %bool %383 %int_270
-               OpSelectionMerge %386 None
-               OpBranchConditional %385 %387 %388
-        %387 = OpLabel
-        %390 = OpAccessChain %_ptr_Private_int %data %int_8
-        %391 = OpLoad %int %390
-        %392 = OpConvertSToF %float %391
-        %393 = OpFDiv %float %392 %float_10
-        %394 = OpFAdd %float %float_0_5 %393
-               OpStore %grey %394
-               OpBranch %386
-        %388 = OpLabel
-               OpKill
-        %386 = OpLabel
-               OpBranch %372
-        %372 = OpLabel
-               OpBranch %358
-        %358 = OpLabel
-               OpBranch %344
-        %344 = OpLabel
-               OpBranch %336
-        %336 = OpLabel
-               OpBranch %323
-        %323 = OpLabel
-               OpBranch %310
-        %310 = OpLabel
-               OpBranch %297
-        %297 = OpLabel
-               OpBranch %282
-        %282 = OpLabel
-        %395 = OpLoad %float %grey
-        %397 = OpCompositeConstruct %v3float %395 %395 %395
-        %398 = OpCompositeExtract %float %397 0
-        %399 = OpCompositeExtract %float %397 1
-        %400 = OpCompositeExtract %float %397 2
-        %402 = OpCompositeConstruct %v4float %398 %399 %400 %float_1
-               OpStore %x_GLF_color %402
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %403
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %407 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %408 = OpFunctionCall %void %main_1
-        %409 = OpLoad %v4float %x_GLF_color
-        %410 = OpCompositeConstruct %main_out %409
-               OpReturnValue %410
-               OpFunctionEnd
-       %main = OpFunction %void None %135
-        %412 = OpLabel
-        %414 = OpLoad %v4float %gl_FragCoord_param_1
-        %413 = OpFunctionCall %main_out %main_inner %414
-        %415 = OpCompositeExtract %v4float %413 0
-               OpStore %x_GLF_color_1_1 %415
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e61feb5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,313 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_254 : i32 = *(from);
-  k = x_254;
-  let x_255 : i32 = *(from);
-  i = x_255;
-  let x_256 : i32 = *(mid);
-  j = (x_256 + 1);
-  loop {
-    let x_262 : i32 = i;
-    let x_263 : i32 = *(mid);
-    let x_265 : i32 = j;
-    let x_266 : i32 = *(to);
-    if (((x_262 <= x_263) && (x_265 <= x_266))) {
-    } else {
-      break;
-    }
-    let x_270 : i32 = i;
-    let x_272 : i32 = data[x_270];
-    let x_273 : i32 = j;
-    let x_275 : i32 = data[x_273];
-    if ((x_272 < x_275)) {
-      let x_280 : i32 = k;
-      k = (x_280 + 1);
-      let x_282 : i32 = i;
-      i = (x_282 + 1);
-      let x_285 : i32 = data[x_282];
-      temp[x_280] = x_285;
-    } else {
-      let x_287 : i32 = k;
-      k = (x_287 + 1);
-      let x_289 : i32 = j;
-      j = (x_289 + 1);
-      let x_292 : i32 = data[x_289];
-      temp[x_287] = x_292;
-    }
-  }
-  loop {
-    let x_298 : i32 = i;
-    let x_300 : i32 = i;
-    let x_301 : i32 = *(mid);
-    if (((x_298 < 10) && (x_300 <= x_301))) {
-    } else {
-      break;
-    }
-    let x_305 : i32 = k;
-    k = (x_305 + 1);
-    let x_307 : i32 = i;
-    i = (x_307 + 1);
-    let x_310 : i32 = data[x_307];
-    temp[x_305] = x_310;
-  }
-  let x_312 : i32 = *(from);
-  i_1 = x_312;
-  loop {
-    let x_317 : i32 = i_1;
-    let x_318 : i32 = *(to);
-    if ((x_317 <= x_318)) {
-    } else {
-      break;
-    }
-    let x_321 : i32 = i_1;
-    let x_322 : i32 = i_1;
-    let x_324 : i32 = temp[x_322];
-    data[x_321] = x_324;
-
-    continuing {
-      let x_326 : i32 = i_1;
-      i_1 = (x_326 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_333 : i32 = m;
-    let x_334 : i32 = high;
-    if ((x_333 <= x_334)) {
-    } else {
-      break;
-    }
-    let x_337 : i32 = low;
-    i_2 = x_337;
-    loop {
-      let x_342 : i32 = i_2;
-      let x_343 : i32 = high;
-      if ((x_342 < x_343)) {
-      } else {
-        break;
-      }
-      let x_346 : i32 = i_2;
-      from_1 = x_346;
-      let x_347 : i32 = i_2;
-      let x_348 : i32 = m;
-      mid_1 = ((x_347 + x_348) - 1);
-      let x_351 : i32 = i_2;
-      let x_352 : i32 = m;
-      let x_356 : i32 = high;
-      to_1 = min(((x_351 + (2 * x_352)) - 1), x_356);
-      let x_358 : i32 = from_1;
-      param = x_358;
-      let x_359 : i32 = mid_1;
-      param_1 = x_359;
-      let x_360 : i32 = to_1;
-      param_2 = x_360;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_362 : i32 = m;
-        let x_364 : i32 = i_2;
-        i_2 = (x_364 + (2 * x_362));
-      }
-    }
-
-    continuing {
-      let x_366 : i32 = m;
-      m = (2 * x_366);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_87 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_87);
-  loop {
-    let x_93 : i32 = i_3;
-    switch(x_93) {
-      case 9: {
-        let x_123 : i32 = i_3;
-        data[x_123] = -5;
-      }
-      case 8: {
-        let x_121 : i32 = i_3;
-        data[x_121] = -4;
-      }
-      case 7: {
-        let x_119 : i32 = i_3;
-        data[x_119] = -3;
-      }
-      case 6: {
-        let x_117 : i32 = i_3;
-        data[x_117] = -2;
-      }
-      case 5: {
-        let x_115 : i32 = i_3;
-        data[x_115] = -1;
-      }
-      case 4: {
-        let x_113 : i32 = i_3;
-        data[x_113] = 0;
-      }
-      case 3: {
-        let x_111 : i32 = i_3;
-        data[x_111] = 1;
-      }
-      case 2: {
-        let x_109 : i32 = i_3;
-        data[x_109] = 2;
-      }
-      case 1: {
-        let x_107 : i32 = i_3;
-        data[x_107] = 3;
-      }
-      case 0: {
-        let x_105 : i32 = i_3;
-        data[x_105] = 4;
-      }
-      default: {
-      }
-    }
-    let x_125 : i32 = i_3;
-    i_3 = (x_125 + 1);
-
-    continuing {
-      let x_127 : i32 = i_3;
-      if ((x_127 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_133 : i32 = j_1;
-    if ((x_133 < 10)) {
-    } else {
-      break;
-    }
-    let x_136 : i32 = j_1;
-    let x_137 : i32 = j_1;
-    let x_139 : i32 = data[x_137];
-    temp[x_136] = x_139;
-
-    continuing {
-      let x_141 : i32 = j_1;
-      j_1 = (x_141 + 1);
-    }
-  }
-  mergeSort_();
-  let x_145 : f32 = gl_FragCoord.y;
-  if ((i32(x_145) < 30)) {
-    let x_152 : i32 = data[0];
-    grey = (0.5 + (f32(x_152) / 10.0));
-  } else {
-    let x_157 : f32 = gl_FragCoord.y;
-    if ((i32(x_157) < 60)) {
-      let x_164 : i32 = data[1];
-      grey = (0.5 + (f32(x_164) / 10.0));
-    } else {
-      let x_169 : f32 = gl_FragCoord.y;
-      if ((i32(x_169) < 90)) {
-        let x_176 : i32 = data[2];
-        grey = (0.5 + (f32(x_176) / 10.0));
-      } else {
-        let x_181 : f32 = gl_FragCoord.y;
-        if ((i32(x_181) < 120)) {
-          let x_188 : i32 = data[3];
-          grey = (0.5 + (f32(x_188) / 10.0));
-        } else {
-          let x_193 : f32 = gl_FragCoord.y;
-          if ((i32(x_193) < 150)) {
-            discard;
-          } else {
-            let x_200 : f32 = gl_FragCoord.y;
-            if ((i32(x_200) < 180)) {
-              let x_207 : i32 = data[5];
-              grey = (0.5 + (f32(x_207) / 10.0));
-            } else {
-              let x_212 : f32 = gl_FragCoord.y;
-              if ((i32(x_212) < 210)) {
-                let x_219 : i32 = data[6];
-                grey = (0.5 + (f32(x_219) / 10.0));
-              } else {
-                let x_224 : f32 = gl_FragCoord.y;
-                if ((i32(x_224) < 240)) {
-                  let x_231 : i32 = data[7];
-                  grey = (0.5 + (f32(x_231) / 10.0));
-                } else {
-                  let x_236 : f32 = gl_FragCoord.y;
-                  if ((i32(x_236) < 270)) {
-                    let x_243 : i32 = data[8];
-                    grey = (0.5 + (f32(x_243) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_247 : f32 = grey;
-  let x_248 : vec3<f32> = vec3<f32>(x_247, x_247, x_247);
-  x_GLF_color = vec4<f32>(x_248.x, x_248.y, x_248.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.hlsl
deleted file mode 100644
index d3f0772..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,278 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b1, space0) {
-  uint4 x_32[1];
-};
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_255 = from;
-  k = x_255;
-  const int x_256 = from;
-  i = x_256;
-  const int x_257 = mid;
-  j = (x_257 + 1);
-  while (true) {
-    const int x_263 = i;
-    const int x_264 = mid;
-    const int x_266 = j;
-    const int x_267 = to;
-    if (((x_263 <= x_264) & (x_266 <= x_267))) {
-    } else {
-      break;
-    }
-    const int x_273 = data[i];
-    const int x_276 = data[j];
-    if ((x_273 < x_276)) {
-      const int x_281 = k;
-      k = (x_281 + 1);
-      const int x_283 = i;
-      i = (x_283 + 1);
-      const int x_286 = data[x_283];
-      temp[x_281] = x_286;
-    } else {
-      const int x_288 = k;
-      k = (x_288 + 1);
-      const int x_290 = j;
-      j = (x_290 + 1);
-      const int x_293 = data[x_290];
-      temp[x_288] = x_293;
-    }
-  }
-  while (true) {
-    const int x_299 = i;
-    const int x_301 = i;
-    const int x_302 = mid;
-    if (((x_299 < 10) & (x_301 <= x_302))) {
-    } else {
-      break;
-    }
-    const int x_306 = k;
-    k = (x_306 + 1);
-    const int x_308 = i;
-    i = (x_308 + 1);
-    const int x_311 = data[x_308];
-    temp[x_306] = x_311;
-  }
-  const int x_313 = from;
-  i_1 = x_313;
-  while (true) {
-    const int x_318 = i_1;
-    const int x_319 = to;
-    if ((x_318 <= x_319)) {
-    } else {
-      break;
-    }
-    const int x_322 = i_1;
-    const int x_325 = temp[i_1];
-    data[x_322] = x_325;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_88 = asfloat(x_28[0].x);
-  i_3 = int(x_88);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        if (true) {
-        } else {
-          {
-            if ((i_3 < 10)) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_137 = j_1;
-      const int x_140 = data[j_1];
-      temp[x_137] = x_140;
-    }
-  }
-  mergeSort_();
-  const float x_146 = gl_FragCoord.y;
-  if ((int(x_146) < 30)) {
-    const int x_153 = data[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    const float x_158 = gl_FragCoord.y;
-    if ((int(x_158) < 60)) {
-      const int x_165 = data[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      const float x_170 = gl_FragCoord.y;
-      if ((int(x_170) < 90)) {
-        const int x_177 = data[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        const float x_182 = gl_FragCoord.y;
-        if ((int(x_182) < 120)) {
-          const int x_189 = data[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          const float x_194 = gl_FragCoord.y;
-          if ((int(x_194) < 150)) {
-            discard;
-          } else {
-            const float x_201 = gl_FragCoord.y;
-            if ((int(x_201) < 180)) {
-              const int x_208 = data[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              const float x_213 = gl_FragCoord.y;
-              if ((int(x_213) < 210)) {
-                const int x_220 = data[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                const float x_225 = gl_FragCoord.y;
-                if ((int(x_225) < 240)) {
-                  const int x_232 = data[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  const float x_237 = gl_FragCoord.y;
-                  if ((int(x_237) < 270)) {
-                    const int x_244 = data[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_248 = grey;
-  const float3 x_249 = float3(x_248, x_248, x_248);
-  x_GLF_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.msl
deleted file mode 100644
index ff61264..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.msl
+++ /dev/null
@@ -1,334 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_255 = *(from);
-  k = x_255;
-  int const x_256 = *(from);
-  i = x_256;
-  int const x_257 = *(mid);
-  j = as_type<int>((as_type<uint>(x_257) + as_type<uint>(1)));
-  while (true) {
-    int const x_263 = i;
-    int const x_264 = *(mid);
-    int const x_266 = j;
-    int const x_267 = *(to);
-    if (((x_263 <= x_264) & (x_266 <= x_267))) {
-    } else {
-      break;
-    }
-    int const x_271 = i;
-    int const x_273 = (*(tint_symbol_3)).arr[x_271];
-    int const x_274 = j;
-    int const x_276 = (*(tint_symbol_3)).arr[x_274];
-    if ((x_273 < x_276)) {
-      int const x_281 = k;
-      k = as_type<int>((as_type<uint>(x_281) + as_type<uint>(1)));
-      int const x_283 = i;
-      i = as_type<int>((as_type<uint>(x_283) + as_type<uint>(1)));
-      int const x_286 = (*(tint_symbol_3)).arr[x_283];
-      (*(tint_symbol_4)).arr[x_281] = x_286;
-    } else {
-      int const x_288 = k;
-      k = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
-      int const x_290 = j;
-      j = as_type<int>((as_type<uint>(x_290) + as_type<uint>(1)));
-      int const x_293 = (*(tint_symbol_3)).arr[x_290];
-      (*(tint_symbol_4)).arr[x_288] = x_293;
-    }
-  }
-  while (true) {
-    int const x_299 = i;
-    int const x_301 = i;
-    int const x_302 = *(mid);
-    if (((x_299 < 10) & (x_301 <= x_302))) {
-    } else {
-      break;
-    }
-    int const x_306 = k;
-    k = as_type<int>((as_type<uint>(x_306) + as_type<uint>(1)));
-    int const x_308 = i;
-    i = as_type<int>((as_type<uint>(x_308) + as_type<uint>(1)));
-    int const x_311 = (*(tint_symbol_3)).arr[x_308];
-    (*(tint_symbol_4)).arr[x_306] = x_311;
-  }
-  int const x_313 = *(from);
-  i_1 = x_313;
-  while (true) {
-    int const x_318 = i_1;
-    int const x_319 = *(to);
-    if ((x_318 <= x_319)) {
-    } else {
-      break;
-    }
-    int const x_322 = i_1;
-    int const x_323 = i_1;
-    int const x_325 = (*(tint_symbol_4)).arr[x_323];
-    (*(tint_symbol_3)).arr[x_322] = x_325;
-    {
-      int const x_327 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_327) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_334 = m;
-    int const x_335 = high;
-    if ((x_334 <= x_335)) {
-    } else {
-      break;
-    }
-    int const x_338 = low;
-    i_2 = x_338;
-    while (true) {
-      int const x_343 = i_2;
-      int const x_344 = high;
-      if ((x_343 < x_344)) {
-      } else {
-        break;
-      }
-      int const x_347 = i_2;
-      from_1 = x_347;
-      int const x_348 = i_2;
-      int const x_349 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_348) + as_type<uint>(x_349)))) - as_type<uint>(1)));
-      int const x_352 = i_2;
-      int const x_353 = m;
-      int const x_357 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_352) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_353))))))) - as_type<uint>(1))), x_357);
-      int const x_359 = from_1;
-      param = x_359;
-      int const x_360 = mid_1;
-      param_1 = x_360;
-      int const x_361 = to_1;
-      param_2 = x_361;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_363 = m;
-        int const x_365 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_365) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_363))))));
-      }
-    }
-    {
-      int const x_367 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_367)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_88 = x_28.injectionSwitch.x;
-  i_3 = int(x_88);
-  while (true) {
-    int const x_94 = i_3;
-    switch(x_94) {
-      case 9: {
-        int const x_124 = i_3;
-        (*(tint_symbol_7)).arr[x_124] = -5;
-        if (true) {
-        } else {
-          {
-            int const x_128 = i_3;
-            if ((x_128 < 10)) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-        break;
-      }
-      case 8: {
-        int const x_122 = i_3;
-        (*(tint_symbol_7)).arr[x_122] = -4;
-        break;
-      }
-      case 7: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -3;
-        break;
-      }
-      case 6: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -2;
-        break;
-      }
-      case 5: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -1;
-        break;
-      }
-      case 4: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = 0;
-        break;
-      }
-      case 3: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = 1;
-        break;
-      }
-      case 2: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 2;
-        break;
-      }
-      case 1: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 3;
-        break;
-      }
-      case 0: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_126 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-    {
-      int const x_128 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_134 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    int const x_137 = j_1;
-    int const x_138 = j_1;
-    int const x_140 = (*(tint_symbol_7)).arr[x_138];
-    (*(tint_symbol_8)).arr[x_137] = x_140;
-    {
-      int const x_142 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_146 = (*(tint_symbol_9)).y;
-  if ((int(x_146) < 30)) {
-    int const x_153 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    float const x_158 = (*(tint_symbol_9)).y;
-    if ((int(x_158) < 60)) {
-      int const x_165 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      float const x_170 = (*(tint_symbol_9)).y;
-      if ((int(x_170) < 90)) {
-        int const x_177 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        float const x_182 = (*(tint_symbol_9)).y;
-        if ((int(x_182) < 120)) {
-          int const x_189 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          float const x_194 = (*(tint_symbol_9)).y;
-          if ((int(x_194) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_201 = (*(tint_symbol_9)).y;
-            if ((int(x_201) < 180)) {
-              int const x_208 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              float const x_213 = (*(tint_symbol_9)).y;
-              if ((int(x_213) < 210)) {
-                int const x_220 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                float const x_225 = (*(tint_symbol_9)).y;
-                if ((int(x_225) < 240)) {
-                  int const x_232 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  float const x_237 = (*(tint_symbol_9)).y;
-                  if ((int(x_237) < 270)) {
-                    int const x_244 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_248 = grey;
-  float3 const x_249 = float3(x_248, x_248, x_248);
-  *(tint_symbol_10) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.spvasm
deleted file mode 100644
index dc0ea2b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,646 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 416
-; Schema: 0
-               OpCapability Shader
-        %176 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_32 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %35 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %131 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %200 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-       %true = OpConstantTrue %bool
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %403 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %26
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %33 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %35
-          %i = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-        %i_1 = OpVariable %_ptr_Function_int Function %35
-         %40 = OpLoad %int %from
-               OpStore %k %40
-         %42 = OpLoad %int %from
-               OpStore %i %42
-         %44 = OpLoad %int %mid
-         %46 = OpIAdd %int %44 %int_1
-               OpStore %j %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %int %mid
-         %54 = OpLoad %int %j
-         %56 = OpLoad %int %to
-         %57 = OpSLessThanEqual %bool %51 %53
-         %59 = OpSLessThanEqual %bool %54 %56
-         %60 = OpLogicalAnd %bool %57 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %48
-         %61 = OpLabel
-         %64 = OpLoad %int %i
-         %66 = OpAccessChain %_ptr_Private_int %data %64
-         %67 = OpLoad %int %66
-         %68 = OpLoad %int %j
-         %69 = OpAccessChain %_ptr_Private_int %data %68
-         %70 = OpLoad %int %69
-         %71 = OpSLessThan %bool %67 %70
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-         %75 = OpLoad %int %k
-         %76 = OpIAdd %int %75 %int_1
-               OpStore %k %76
-         %77 = OpLoad %int %i
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %i %78
-         %79 = OpAccessChain %_ptr_Private_int %data %77
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Private_int %temp %75
-               OpStore %81 %80
-               OpBranch %72
-         %74 = OpLabel
-         %82 = OpLoad %int %k
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %k %83
-         %84 = OpLoad %int %j
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %j %85
-         %86 = OpAccessChain %_ptr_Private_int %data %84
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Private_int %temp %82
-               OpStore %88 %87
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %89
-         %89 = OpLabel
-               OpLoopMerge %90 %91 None
-               OpBranch %92
-         %92 = OpLabel
-         %93 = OpLoad %int %i
-         %94 = OpLoad %int %i
-         %96 = OpLoad %int %mid
-         %98 = OpSLessThan %bool %93 %int_10
-         %99 = OpSLessThanEqual %bool %94 %96
-        %100 = OpLogicalAnd %bool %98 %99
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-               OpBranch %101
-        %103 = OpLabel
-               OpBranch %90
-        %101 = OpLabel
-        %104 = OpLoad %int %k
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %k %105
-        %106 = OpLoad %int %i
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %i %107
-        %108 = OpAccessChain %_ptr_Private_int %data %106
-        %109 = OpLoad %int %108
-        %110 = OpAccessChain %_ptr_Private_int %temp %104
-               OpStore %110 %109
-               OpBranch %91
-         %91 = OpLabel
-               OpBranch %89
-         %90 = OpLabel
-        %112 = OpLoad %int %from
-               OpStore %i_1 %112
-               OpBranch %113
-        %113 = OpLabel
-               OpLoopMerge %114 %115 None
-               OpBranch %116
-        %116 = OpLabel
-        %117 = OpLoad %int %i_1
-        %119 = OpLoad %int %to
-        %120 = OpSLessThanEqual %bool %117 %119
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpBranch %121
-        %123 = OpLabel
-               OpBranch %114
-        %121 = OpLabel
-        %124 = OpLoad %int %i_1
-        %125 = OpLoad %int %i_1
-        %126 = OpAccessChain %_ptr_Private_int %temp %125
-        %127 = OpLoad %int %126
-        %128 = OpAccessChain %_ptr_Private_int %data %124
-               OpStore %128 %127
-               OpBranch %115
-        %115 = OpLabel
-        %129 = OpLoad %int %i_1
-        %130 = OpIAdd %int %129 %int_1
-               OpStore %i_1 %130
-               OpBranch %113
-        %114 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %131
-        %133 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %35
-       %high = OpVariable %_ptr_Function_int Function %35
-          %m = OpVariable %_ptr_Function_int Function %35
-        %i_2 = OpVariable %_ptr_Function_int Function %35
-     %from_1 = OpVariable %_ptr_Function_int Function %35
-      %mid_1 = OpVariable %_ptr_Function_int Function %35
-       %to_1 = OpVariable %_ptr_Function_int Function %35
-      %param = OpVariable %_ptr_Function_int Function %35
-    %param_1 = OpVariable %_ptr_Function_int Function %35
-    %param_2 = OpVariable %_ptr_Function_int Function %35
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %146
-        %146 = OpLabel
-               OpLoopMerge %147 %148 None
-               OpBranch %149
-        %149 = OpLabel
-        %150 = OpLoad %int %m
-        %151 = OpLoad %int %high
-        %152 = OpSLessThanEqual %bool %150 %151
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %155
-        %154 = OpLabel
-               OpBranch %153
-        %155 = OpLabel
-               OpBranch %147
-        %153 = OpLabel
-        %156 = OpLoad %int %low
-               OpStore %i_2 %156
-               OpBranch %157
-        %157 = OpLabel
-               OpLoopMerge %158 %159 None
-               OpBranch %160
-        %160 = OpLabel
-        %161 = OpLoad %int %i_2
-        %162 = OpLoad %int %high
-        %163 = OpSLessThan %bool %161 %162
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %166
-        %165 = OpLabel
-               OpBranch %164
-        %166 = OpLabel
-               OpBranch %158
-        %164 = OpLabel
-        %167 = OpLoad %int %i_2
-               OpStore %from_1 %167
-        %168 = OpLoad %int %i_2
-        %169 = OpLoad %int %m
-        %170 = OpIAdd %int %168 %169
-        %171 = OpISub %int %170 %int_1
-               OpStore %mid_1 %171
-        %172 = OpLoad %int %i_2
-        %173 = OpLoad %int %m
-        %174 = OpLoad %int %high
-        %178 = OpIMul %int %int_2 %173
-        %179 = OpIAdd %int %172 %178
-        %180 = OpISub %int %179 %int_1
-        %175 = OpExtInst %int %176 SMin %180 %174
-               OpStore %to_1 %175
-        %181 = OpLoad %int %from_1
-               OpStore %param %181
-        %182 = OpLoad %int %mid_1
-               OpStore %param_1 %182
-        %183 = OpLoad %int %to_1
-               OpStore %param_2 %183
-        %184 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %159
-        %159 = OpLabel
-        %188 = OpLoad %int %m
-        %189 = OpLoad %int %i_2
-        %190 = OpIMul %int %int_2 %188
-        %191 = OpIAdd %int %189 %190
-               OpStore %i_2 %191
-               OpBranch %157
-        %158 = OpLabel
-               OpBranch %148
-        %148 = OpLabel
-        %192 = OpLoad %int %m
-        %193 = OpIMul %int %int_2 %192
-               OpStore %m %193
-               OpBranch %146
-        %147 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %131
-        %195 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %35
-        %j_1 = OpVariable %_ptr_Function_int Function %35
-       %grey = OpVariable %_ptr_Function_float Function %200
-        %203 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %204 = OpLoad %float %203
-        %205 = OpConvertFToS %int %204
-               OpStore %i_3 %205
-               OpBranch %206
-        %206 = OpLabel
-               OpLoopMerge %207 %208 None
-               OpBranch %209
-        %209 = OpLabel
-        %210 = OpLoad %int %i_3
-               OpSelectionMerge %211 None
-               OpSwitch %210 %212 9 %213 8 %214 7 %215 6 %216 5 %217 4 %218 3 %219 2 %220 1 %221 0 %222
-        %213 = OpLabel
-        %223 = OpLoad %int %i_3
-        %224 = OpAccessChain %_ptr_Private_int %data %223
-               OpStore %224 %int_n5
-               OpSelectionMerge %227 None
-               OpBranchConditional %true %228 %229
-        %228 = OpLabel
-               OpBranch %227
-        %229 = OpLabel
-               OpBranch %208
-        %227 = OpLabel
-               OpBranch %211
-        %214 = OpLabel
-        %230 = OpLoad %int %i_3
-        %231 = OpAccessChain %_ptr_Private_int %data %230
-               OpStore %231 %int_n4
-               OpBranch %211
-        %215 = OpLabel
-        %233 = OpLoad %int %i_3
-        %234 = OpAccessChain %_ptr_Private_int %data %233
-               OpStore %234 %int_n3
-               OpBranch %211
-        %216 = OpLabel
-        %236 = OpLoad %int %i_3
-        %237 = OpAccessChain %_ptr_Private_int %data %236
-               OpStore %237 %int_n2
-               OpBranch %211
-        %217 = OpLabel
-        %239 = OpLoad %int %i_3
-        %240 = OpAccessChain %_ptr_Private_int %data %239
-               OpStore %240 %int_n1
-               OpBranch %211
-        %218 = OpLabel
-        %242 = OpLoad %int %i_3
-        %243 = OpAccessChain %_ptr_Private_int %data %242
-               OpStore %243 %int_0
-               OpBranch %211
-        %219 = OpLabel
-        %244 = OpLoad %int %i_3
-        %245 = OpAccessChain %_ptr_Private_int %data %244
-               OpStore %245 %int_1
-               OpBranch %211
-        %220 = OpLabel
-        %246 = OpLoad %int %i_3
-        %247 = OpAccessChain %_ptr_Private_int %data %246
-               OpStore %247 %int_2
-               OpBranch %211
-        %221 = OpLabel
-        %248 = OpLoad %int %i_3
-        %249 = OpAccessChain %_ptr_Private_int %data %248
-               OpStore %249 %int_3
-               OpBranch %211
-        %222 = OpLabel
-        %251 = OpLoad %int %i_3
-        %252 = OpAccessChain %_ptr_Private_int %data %251
-               OpStore %252 %int_4
-               OpBranch %211
-        %212 = OpLabel
-               OpBranch %211
-        %211 = OpLabel
-        %254 = OpLoad %int %i_3
-        %255 = OpIAdd %int %254 %int_1
-               OpStore %i_3 %255
-               OpBranch %208
-        %208 = OpLabel
-        %256 = OpLoad %int %i_3
-        %257 = OpSLessThan %bool %256 %int_10
-               OpBranchConditional %257 %206 %207
-        %207 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %258
-        %258 = OpLabel
-               OpLoopMerge %259 %260 None
-               OpBranch %261
-        %261 = OpLabel
-        %262 = OpLoad %int %j_1
-        %263 = OpSLessThan %bool %262 %int_10
-               OpSelectionMerge %264 None
-               OpBranchConditional %263 %265 %266
-        %265 = OpLabel
-               OpBranch %264
-        %266 = OpLabel
-               OpBranch %259
-        %264 = OpLabel
-        %267 = OpLoad %int %j_1
-        %268 = OpLoad %int %j_1
-        %269 = OpAccessChain %_ptr_Private_int %data %268
-        %270 = OpLoad %int %269
-        %271 = OpAccessChain %_ptr_Private_int %temp %267
-               OpStore %271 %270
-               OpBranch %260
-        %260 = OpLabel
-        %272 = OpLoad %int %j_1
-        %273 = OpIAdd %int %272 %int_1
-               OpStore %j_1 %273
-               OpBranch %258
-        %259 = OpLabel
-        %274 = OpFunctionCall %void %mergeSort_
-        %277 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %278 = OpLoad %float %277
-        %279 = OpConvertFToS %int %278
-        %281 = OpSLessThan %bool %279 %int_30
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %284
-        %283 = OpLabel
-        %285 = OpAccessChain %_ptr_Private_int %data %int_0
-        %286 = OpLoad %int %285
-        %288 = OpConvertSToF %float %286
-        %290 = OpFDiv %float %288 %float_10
-        %291 = OpFAdd %float %float_0_5 %290
-               OpStore %grey %291
-               OpBranch %282
-        %284 = OpLabel
-        %292 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %293 = OpLoad %float %292
-        %294 = OpConvertFToS %int %293
-        %296 = OpSLessThan %bool %294 %int_60
-               OpSelectionMerge %297 None
-               OpBranchConditional %296 %298 %299
-        %298 = OpLabel
-        %300 = OpAccessChain %_ptr_Private_int %data %int_1
-        %301 = OpLoad %int %300
-        %302 = OpConvertSToF %float %301
-        %303 = OpFDiv %float %302 %float_10
-        %304 = OpFAdd %float %float_0_5 %303
-               OpStore %grey %304
-               OpBranch %297
-        %299 = OpLabel
-        %305 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %306 = OpLoad %float %305
-        %307 = OpConvertFToS %int %306
-        %309 = OpSLessThan %bool %307 %int_90
-               OpSelectionMerge %310 None
-               OpBranchConditional %309 %311 %312
-        %311 = OpLabel
-        %313 = OpAccessChain %_ptr_Private_int %data %int_2
-        %314 = OpLoad %int %313
-        %315 = OpConvertSToF %float %314
-        %316 = OpFDiv %float %315 %float_10
-        %317 = OpFAdd %float %float_0_5 %316
-               OpStore %grey %317
-               OpBranch %310
-        %312 = OpLabel
-        %318 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %319 = OpLoad %float %318
-        %320 = OpConvertFToS %int %319
-        %322 = OpSLessThan %bool %320 %int_120
-               OpSelectionMerge %323 None
-               OpBranchConditional %322 %324 %325
-        %324 = OpLabel
-        %326 = OpAccessChain %_ptr_Private_int %data %int_3
-        %327 = OpLoad %int %326
-        %328 = OpConvertSToF %float %327
-        %329 = OpFDiv %float %328 %float_10
-        %330 = OpFAdd %float %float_0_5 %329
-               OpStore %grey %330
-               OpBranch %323
-        %325 = OpLabel
-        %331 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %332 = OpLoad %float %331
-        %333 = OpConvertFToS %int %332
-        %335 = OpSLessThan %bool %333 %int_150
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %338
-        %337 = OpLabel
-               OpKill
-        %338 = OpLabel
-        %339 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %340 = OpLoad %float %339
-        %341 = OpConvertFToS %int %340
-        %343 = OpSLessThan %bool %341 %int_180
-               OpSelectionMerge %344 None
-               OpBranchConditional %343 %345 %346
-        %345 = OpLabel
-        %348 = OpAccessChain %_ptr_Private_int %data %int_5
-        %349 = OpLoad %int %348
-        %350 = OpConvertSToF %float %349
-        %351 = OpFDiv %float %350 %float_10
-        %352 = OpFAdd %float %float_0_5 %351
-               OpStore %grey %352
-               OpBranch %344
-        %346 = OpLabel
-        %353 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %354 = OpLoad %float %353
-        %355 = OpConvertFToS %int %354
-        %357 = OpSLessThan %bool %355 %int_210
-               OpSelectionMerge %358 None
-               OpBranchConditional %357 %359 %360
-        %359 = OpLabel
-        %362 = OpAccessChain %_ptr_Private_int %data %int_6
-        %363 = OpLoad %int %362
-        %364 = OpConvertSToF %float %363
-        %365 = OpFDiv %float %364 %float_10
-        %366 = OpFAdd %float %float_0_5 %365
-               OpStore %grey %366
-               OpBranch %358
-        %360 = OpLabel
-        %367 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %368 = OpLoad %float %367
-        %369 = OpConvertFToS %int %368
-        %371 = OpSLessThan %bool %369 %int_240
-               OpSelectionMerge %372 None
-               OpBranchConditional %371 %373 %374
-        %373 = OpLabel
-        %376 = OpAccessChain %_ptr_Private_int %data %int_7
-        %377 = OpLoad %int %376
-        %378 = OpConvertSToF %float %377
-        %379 = OpFDiv %float %378 %float_10
-        %380 = OpFAdd %float %float_0_5 %379
-               OpStore %grey %380
-               OpBranch %372
-        %374 = OpLabel
-        %381 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %382 = OpLoad %float %381
-        %383 = OpConvertFToS %int %382
-        %385 = OpSLessThan %bool %383 %int_270
-               OpSelectionMerge %386 None
-               OpBranchConditional %385 %387 %388
-        %387 = OpLabel
-        %390 = OpAccessChain %_ptr_Private_int %data %int_8
-        %391 = OpLoad %int %390
-        %392 = OpConvertSToF %float %391
-        %393 = OpFDiv %float %392 %float_10
-        %394 = OpFAdd %float %float_0_5 %393
-               OpStore %grey %394
-               OpBranch %386
-        %388 = OpLabel
-               OpKill
-        %386 = OpLabel
-               OpBranch %372
-        %372 = OpLabel
-               OpBranch %358
-        %358 = OpLabel
-               OpBranch %344
-        %344 = OpLabel
-               OpBranch %336
-        %336 = OpLabel
-               OpBranch %323
-        %323 = OpLabel
-               OpBranch %310
-        %310 = OpLabel
-               OpBranch %297
-        %297 = OpLabel
-               OpBranch %282
-        %282 = OpLabel
-        %395 = OpLoad %float %grey
-        %397 = OpCompositeConstruct %v3float %395 %395 %395
-        %398 = OpCompositeExtract %float %397 0
-        %399 = OpCompositeExtract %float %397 1
-        %400 = OpCompositeExtract %float %397 2
-        %402 = OpCompositeConstruct %v4float %398 %399 %400 %float_1
-               OpStore %x_GLF_color %402
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %403
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %407 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %408 = OpFunctionCall %void %main_1
-        %409 = OpLoad %v4float %x_GLF_color
-        %410 = OpCompositeConstruct %main_out %409
-               OpReturnValue %410
-               OpFunctionEnd
-       %main = OpFunction %void None %131
-        %412 = OpLabel
-        %414 = OpLoad %v4float %gl_FragCoord_param_1
-        %413 = OpFunctionCall %main_out %main_inner %414
-        %415 = OpCompositeExtract %v4float %413 0
-               OpStore %x_GLF_color_1_1 %415
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.wgsl
deleted file mode 100644
index e37d777..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,317 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_255 : i32 = *(from);
-  k = x_255;
-  let x_256 : i32 = *(from);
-  i = x_256;
-  let x_257 : i32 = *(mid);
-  j = (x_257 + 1);
-  loop {
-    let x_263 : i32 = i;
-    let x_264 : i32 = *(mid);
-    let x_266 : i32 = j;
-    let x_267 : i32 = *(to);
-    if (((x_263 <= x_264) & (x_266 <= x_267))) {
-    } else {
-      break;
-    }
-    let x_271 : i32 = i;
-    let x_273 : i32 = data[x_271];
-    let x_274 : i32 = j;
-    let x_276 : i32 = data[x_274];
-    if ((x_273 < x_276)) {
-      let x_281 : i32 = k;
-      k = (x_281 + 1);
-      let x_283 : i32 = i;
-      i = (x_283 + 1);
-      let x_286 : i32 = data[x_283];
-      temp[x_281] = x_286;
-    } else {
-      let x_288 : i32 = k;
-      k = (x_288 + 1);
-      let x_290 : i32 = j;
-      j = (x_290 + 1);
-      let x_293 : i32 = data[x_290];
-      temp[x_288] = x_293;
-    }
-  }
-  loop {
-    let x_299 : i32 = i;
-    let x_301 : i32 = i;
-    let x_302 : i32 = *(mid);
-    if (((x_299 < 10) & (x_301 <= x_302))) {
-    } else {
-      break;
-    }
-    let x_306 : i32 = k;
-    k = (x_306 + 1);
-    let x_308 : i32 = i;
-    i = (x_308 + 1);
-    let x_311 : i32 = data[x_308];
-    temp[x_306] = x_311;
-  }
-  let x_313 : i32 = *(from);
-  i_1 = x_313;
-  loop {
-    let x_318 : i32 = i_1;
-    let x_319 : i32 = *(to);
-    if ((x_318 <= x_319)) {
-    } else {
-      break;
-    }
-    let x_322 : i32 = i_1;
-    let x_323 : i32 = i_1;
-    let x_325 : i32 = temp[x_323];
-    data[x_322] = x_325;
-
-    continuing {
-      let x_327 : i32 = i_1;
-      i_1 = (x_327 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_334 : i32 = m;
-    let x_335 : i32 = high;
-    if ((x_334 <= x_335)) {
-    } else {
-      break;
-    }
-    let x_338 : i32 = low;
-    i_2 = x_338;
-    loop {
-      let x_343 : i32 = i_2;
-      let x_344 : i32 = high;
-      if ((x_343 < x_344)) {
-      } else {
-        break;
-      }
-      let x_347 : i32 = i_2;
-      from_1 = x_347;
-      let x_348 : i32 = i_2;
-      let x_349 : i32 = m;
-      mid_1 = ((x_348 + x_349) - 1);
-      let x_352 : i32 = i_2;
-      let x_353 : i32 = m;
-      let x_357 : i32 = high;
-      to_1 = min(((x_352 + (2 * x_353)) - 1), x_357);
-      let x_359 : i32 = from_1;
-      param = x_359;
-      let x_360 : i32 = mid_1;
-      param_1 = x_360;
-      let x_361 : i32 = to_1;
-      param_2 = x_361;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_363 : i32 = m;
-        let x_365 : i32 = i_2;
-        i_2 = (x_365 + (2 * x_363));
-      }
-    }
-
-    continuing {
-      let x_367 : i32 = m;
-      m = (2 * x_367);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_88 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_88);
-  loop {
-    let x_94 : i32 = i_3;
-    switch(x_94) {
-      case 9: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -5;
-        if (true) {
-        } else {
-          continue;
-        }
-      }
-      case 8: {
-        let x_122 : i32 = i_3;
-        data[x_122] = -4;
-      }
-      case 7: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -3;
-      }
-      case 6: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -2;
-      }
-      case 5: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -1;
-      }
-      case 4: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 0;
-      }
-      case 3: {
-        let x_112 : i32 = i_3;
-        data[x_112] = 1;
-      }
-      case 2: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 2;
-      }
-      case 1: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 3;
-      }
-      case 0: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 4;
-      }
-      default: {
-      }
-    }
-    let x_126 : i32 = i_3;
-    i_3 = (x_126 + 1);
-
-    continuing {
-      let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_134 : i32 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    let x_137 : i32 = j_1;
-    let x_138 : i32 = j_1;
-    let x_140 : i32 = data[x_138];
-    temp[x_137] = x_140;
-
-    continuing {
-      let x_142 : i32 = j_1;
-      j_1 = (x_142 + 1);
-    }
-  }
-  mergeSort_();
-  let x_146 : f32 = gl_FragCoord.y;
-  if ((i32(x_146) < 30)) {
-    let x_153 : i32 = data[0];
-    grey = (0.5 + (f32(x_153) / 10.0));
-  } else {
-    let x_158 : f32 = gl_FragCoord.y;
-    if ((i32(x_158) < 60)) {
-      let x_165 : i32 = data[1];
-      grey = (0.5 + (f32(x_165) / 10.0));
-    } else {
-      let x_170 : f32 = gl_FragCoord.y;
-      if ((i32(x_170) < 90)) {
-        let x_177 : i32 = data[2];
-        grey = (0.5 + (f32(x_177) / 10.0));
-      } else {
-        let x_182 : f32 = gl_FragCoord.y;
-        if ((i32(x_182) < 120)) {
-          let x_189 : i32 = data[3];
-          grey = (0.5 + (f32(x_189) / 10.0));
-        } else {
-          let x_194 : f32 = gl_FragCoord.y;
-          if ((i32(x_194) < 150)) {
-            discard;
-          } else {
-            let x_201 : f32 = gl_FragCoord.y;
-            if ((i32(x_201) < 180)) {
-              let x_208 : i32 = data[5];
-              grey = (0.5 + (f32(x_208) / 10.0));
-            } else {
-              let x_213 : f32 = gl_FragCoord.y;
-              if ((i32(x_213) < 210)) {
-                let x_220 : i32 = data[6];
-                grey = (0.5 + (f32(x_220) / 10.0));
-              } else {
-                let x_225 : f32 = gl_FragCoord.y;
-                if ((i32(x_225) < 240)) {
-                  let x_232 : i32 = data[7];
-                  grey = (0.5 + (f32(x_232) / 10.0));
-                } else {
-                  let x_237 : f32 = gl_FragCoord.y;
-                  if ((i32(x_237) < 270)) {
-                    let x_244 : i32 = data[8];
-                    grey = (0.5 + (f32(x_244) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_248 : f32 = grey;
-  let x_249 : vec3<f32> = vec3<f32>(x_248, x_248, x_248);
-  x_GLF_color = vec4<f32>(x_249.x, x_249.y, x_249.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.hlsl
deleted file mode 100644
index c469d3a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,286 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b1, space0) {
-  uint4 x_32[1];
-};
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_255 = from;
-  k = x_255;
-  const int x_256 = from;
-  i = x_256;
-  const int x_257 = mid;
-  j = (x_257 + 1);
-  while (true) {
-    const int x_263 = i;
-    const int x_264 = mid;
-    const int x_266 = j;
-    const int x_267 = to;
-    bool tint_tmp = (x_263 <= x_264);
-    if (tint_tmp) {
-      tint_tmp = (x_266 <= x_267);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_273 = data[i];
-    const int x_276 = data[j];
-    if ((x_273 < x_276)) {
-      const int x_281 = k;
-      k = (x_281 + 1);
-      const int x_283 = i;
-      i = (x_283 + 1);
-      const int x_286 = data[x_283];
-      temp[x_281] = x_286;
-    } else {
-      const int x_288 = k;
-      k = (x_288 + 1);
-      const int x_290 = j;
-      j = (x_290 + 1);
-      const int x_293 = data[x_290];
-      temp[x_288] = x_293;
-    }
-  }
-  while (true) {
-    const int x_299 = i;
-    const int x_301 = i;
-    const int x_302 = mid;
-    bool tint_tmp_1 = (x_299 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_301 <= x_302);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_306 = k;
-    k = (x_306 + 1);
-    const int x_308 = i;
-    i = (x_308 + 1);
-    const int x_311 = data[x_308];
-    temp[x_306] = x_311;
-  }
-  const int x_313 = from;
-  i_1 = x_313;
-  while (true) {
-    const int x_318 = i_1;
-    const int x_319 = to;
-    if ((x_318 <= x_319)) {
-    } else {
-      break;
-    }
-    const int x_322 = i_1;
-    const int x_325 = temp[i_1];
-    data[x_322] = x_325;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_88 = asfloat(x_28[0].x);
-  i_3 = int(x_88);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        if (true) {
-        } else {
-          {
-            if ((i_3 < 10)) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_137 = j_1;
-      const int x_140 = data[j_1];
-      temp[x_137] = x_140;
-    }
-  }
-  mergeSort_();
-  const float x_146 = gl_FragCoord.y;
-  if ((int(x_146) < 30)) {
-    const int x_153 = data[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    const float x_158 = gl_FragCoord.y;
-    if ((int(x_158) < 60)) {
-      const int x_165 = data[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      const float x_170 = gl_FragCoord.y;
-      if ((int(x_170) < 90)) {
-        const int x_177 = data[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        const float x_182 = gl_FragCoord.y;
-        if ((int(x_182) < 120)) {
-          const int x_189 = data[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          const float x_194 = gl_FragCoord.y;
-          if ((int(x_194) < 150)) {
-            discard;
-          } else {
-            const float x_201 = gl_FragCoord.y;
-            if ((int(x_201) < 180)) {
-              const int x_208 = data[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              const float x_213 = gl_FragCoord.y;
-              if ((int(x_213) < 210)) {
-                const int x_220 = data[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                const float x_225 = gl_FragCoord.y;
-                if ((int(x_225) < 240)) {
-                  const int x_232 = data[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  const float x_237 = gl_FragCoord.y;
-                  if ((int(x_237) < 270)) {
-                    const int x_244 = data[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_248 = grey;
-  const float3 x_249 = float3(x_248, x_248, x_248);
-  x_GLF_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.msl
deleted file mode 100644
index 4dbb836..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.msl
+++ /dev/null
@@ -1,334 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_255 = *(from);
-  k = x_255;
-  int const x_256 = *(from);
-  i = x_256;
-  int const x_257 = *(mid);
-  j = as_type<int>((as_type<uint>(x_257) + as_type<uint>(1)));
-  while (true) {
-    int const x_263 = i;
-    int const x_264 = *(mid);
-    int const x_266 = j;
-    int const x_267 = *(to);
-    if (((x_263 <= x_264) && (x_266 <= x_267))) {
-    } else {
-      break;
-    }
-    int const x_271 = i;
-    int const x_273 = (*(tint_symbol_3)).arr[x_271];
-    int const x_274 = j;
-    int const x_276 = (*(tint_symbol_3)).arr[x_274];
-    if ((x_273 < x_276)) {
-      int const x_281 = k;
-      k = as_type<int>((as_type<uint>(x_281) + as_type<uint>(1)));
-      int const x_283 = i;
-      i = as_type<int>((as_type<uint>(x_283) + as_type<uint>(1)));
-      int const x_286 = (*(tint_symbol_3)).arr[x_283];
-      (*(tint_symbol_4)).arr[x_281] = x_286;
-    } else {
-      int const x_288 = k;
-      k = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
-      int const x_290 = j;
-      j = as_type<int>((as_type<uint>(x_290) + as_type<uint>(1)));
-      int const x_293 = (*(tint_symbol_3)).arr[x_290];
-      (*(tint_symbol_4)).arr[x_288] = x_293;
-    }
-  }
-  while (true) {
-    int const x_299 = i;
-    int const x_301 = i;
-    int const x_302 = *(mid);
-    if (((x_299 < 10) && (x_301 <= x_302))) {
-    } else {
-      break;
-    }
-    int const x_306 = k;
-    k = as_type<int>((as_type<uint>(x_306) + as_type<uint>(1)));
-    int const x_308 = i;
-    i = as_type<int>((as_type<uint>(x_308) + as_type<uint>(1)));
-    int const x_311 = (*(tint_symbol_3)).arr[x_308];
-    (*(tint_symbol_4)).arr[x_306] = x_311;
-  }
-  int const x_313 = *(from);
-  i_1 = x_313;
-  while (true) {
-    int const x_318 = i_1;
-    int const x_319 = *(to);
-    if ((x_318 <= x_319)) {
-    } else {
-      break;
-    }
-    int const x_322 = i_1;
-    int const x_323 = i_1;
-    int const x_325 = (*(tint_symbol_4)).arr[x_323];
-    (*(tint_symbol_3)).arr[x_322] = x_325;
-    {
-      int const x_327 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_327) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_334 = m;
-    int const x_335 = high;
-    if ((x_334 <= x_335)) {
-    } else {
-      break;
-    }
-    int const x_338 = low;
-    i_2 = x_338;
-    while (true) {
-      int const x_343 = i_2;
-      int const x_344 = high;
-      if ((x_343 < x_344)) {
-      } else {
-        break;
-      }
-      int const x_347 = i_2;
-      from_1 = x_347;
-      int const x_348 = i_2;
-      int const x_349 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_348) + as_type<uint>(x_349)))) - as_type<uint>(1)));
-      int const x_352 = i_2;
-      int const x_353 = m;
-      int const x_357 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_352) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_353))))))) - as_type<uint>(1))), x_357);
-      int const x_359 = from_1;
-      param = x_359;
-      int const x_360 = mid_1;
-      param_1 = x_360;
-      int const x_361 = to_1;
-      param_2 = x_361;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_363 = m;
-        int const x_365 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_365) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_363))))));
-      }
-    }
-    {
-      int const x_367 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_367)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_88 = x_28.injectionSwitch.x;
-  i_3 = int(x_88);
-  while (true) {
-    int const x_94 = i_3;
-    switch(x_94) {
-      case 9: {
-        int const x_124 = i_3;
-        (*(tint_symbol_7)).arr[x_124] = -5;
-        if (true) {
-        } else {
-          {
-            int const x_128 = i_3;
-            if ((x_128 < 10)) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-        break;
-      }
-      case 8: {
-        int const x_122 = i_3;
-        (*(tint_symbol_7)).arr[x_122] = -4;
-        break;
-      }
-      case 7: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -3;
-        break;
-      }
-      case 6: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -2;
-        break;
-      }
-      case 5: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -1;
-        break;
-      }
-      case 4: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = 0;
-        break;
-      }
-      case 3: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = 1;
-        break;
-      }
-      case 2: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 2;
-        break;
-      }
-      case 1: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 3;
-        break;
-      }
-      case 0: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_126 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-    {
-      int const x_128 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_134 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    int const x_137 = j_1;
-    int const x_138 = j_1;
-    int const x_140 = (*(tint_symbol_7)).arr[x_138];
-    (*(tint_symbol_8)).arr[x_137] = x_140;
-    {
-      int const x_142 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_146 = (*(tint_symbol_9)).y;
-  if ((int(x_146) < 30)) {
-    int const x_153 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    float const x_158 = (*(tint_symbol_9)).y;
-    if ((int(x_158) < 60)) {
-      int const x_165 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      float const x_170 = (*(tint_symbol_9)).y;
-      if ((int(x_170) < 90)) {
-        int const x_177 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        float const x_182 = (*(tint_symbol_9)).y;
-        if ((int(x_182) < 120)) {
-          int const x_189 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          float const x_194 = (*(tint_symbol_9)).y;
-          if ((int(x_194) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_201 = (*(tint_symbol_9)).y;
-            if ((int(x_201) < 180)) {
-              int const x_208 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              float const x_213 = (*(tint_symbol_9)).y;
-              if ((int(x_213) < 210)) {
-                int const x_220 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                float const x_225 = (*(tint_symbol_9)).y;
-                if ((int(x_225) < 240)) {
-                  int const x_232 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  float const x_237 = (*(tint_symbol_9)).y;
-                  if ((int(x_237) < 270)) {
-                    int const x_244 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_248 = grey;
-  float3 const x_249 = float3(x_248, x_248, x_248);
-  *(tint_symbol_10) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.spvasm
deleted file mode 100644
index 01d6d84..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,656 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 420
-; Schema: 0
-               OpCapability Shader
-        %180 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_32 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %35 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %135 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %204 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-       %true = OpConstantTrue %bool
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %407 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %26
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %33 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %35
-          %i = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-        %i_1 = OpVariable %_ptr_Function_int Function %35
-         %40 = OpLoad %int %from
-               OpStore %k %40
-         %42 = OpLoad %int %from
-               OpStore %i %42
-         %44 = OpLoad %int %mid
-         %46 = OpIAdd %int %44 %int_1
-               OpStore %j %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %int %mid
-         %54 = OpLoad %int %j
-         %56 = OpLoad %int %to
-         %57 = OpSLessThanEqual %bool %51 %53
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %59
-         %60 = OpLabel
-         %61 = OpSLessThanEqual %bool %54 %56
-               OpBranch %59
-         %59 = OpLabel
-         %62 = OpPhi %bool %57 %50 %61 %60
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %48
-         %63 = OpLabel
-         %66 = OpLoad %int %i
-         %68 = OpAccessChain %_ptr_Private_int %data %66
-         %69 = OpLoad %int %68
-         %70 = OpLoad %int %j
-         %71 = OpAccessChain %_ptr_Private_int %data %70
-         %72 = OpLoad %int %71
-         %73 = OpSLessThan %bool %69 %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-         %77 = OpLoad %int %k
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %k %78
-         %79 = OpLoad %int %i
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %i %80
-         %81 = OpAccessChain %_ptr_Private_int %data %79
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Private_int %temp %77
-               OpStore %83 %82
-               OpBranch %74
-         %76 = OpLabel
-         %84 = OpLoad %int %k
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %k %85
-         %86 = OpLoad %int %j
-         %87 = OpIAdd %int %86 %int_1
-               OpStore %j %87
-         %88 = OpAccessChain %_ptr_Private_int %data %86
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Private_int %temp %84
-               OpStore %90 %89
-               OpBranch %74
-         %74 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %95 = OpLoad %int %i
-         %96 = OpLoad %int %i
-         %98 = OpLoad %int %mid
-        %100 = OpSLessThan %bool %95 %int_10
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-        %103 = OpSLessThanEqual %bool %96 %98
-               OpBranch %101
-        %101 = OpLabel
-        %104 = OpPhi %bool %100 %94 %103 %102
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %107
-        %106 = OpLabel
-               OpBranch %105
-        %107 = OpLabel
-               OpBranch %92
-        %105 = OpLabel
-        %108 = OpLoad %int %k
-        %109 = OpIAdd %int %108 %int_1
-               OpStore %k %109
-        %110 = OpLoad %int %i
-        %111 = OpIAdd %int %110 %int_1
-               OpStore %i %111
-        %112 = OpAccessChain %_ptr_Private_int %data %110
-        %113 = OpLoad %int %112
-        %114 = OpAccessChain %_ptr_Private_int %temp %108
-               OpStore %114 %113
-               OpBranch %93
-         %93 = OpLabel
-               OpBranch %91
-         %92 = OpLabel
-        %116 = OpLoad %int %from
-               OpStore %i_1 %116
-               OpBranch %117
-        %117 = OpLabel
-               OpLoopMerge %118 %119 None
-               OpBranch %120
-        %120 = OpLabel
-        %121 = OpLoad %int %i_1
-        %123 = OpLoad %int %to
-        %124 = OpSLessThanEqual %bool %121 %123
-               OpSelectionMerge %125 None
-               OpBranchConditional %124 %126 %127
-        %126 = OpLabel
-               OpBranch %125
-        %127 = OpLabel
-               OpBranch %118
-        %125 = OpLabel
-        %128 = OpLoad %int %i_1
-        %129 = OpLoad %int %i_1
-        %130 = OpAccessChain %_ptr_Private_int %temp %129
-        %131 = OpLoad %int %130
-        %132 = OpAccessChain %_ptr_Private_int %data %128
-               OpStore %132 %131
-               OpBranch %119
-        %119 = OpLabel
-        %133 = OpLoad %int %i_1
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %i_1 %134
-               OpBranch %117
-        %118 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %135
-        %137 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %35
-       %high = OpVariable %_ptr_Function_int Function %35
-          %m = OpVariable %_ptr_Function_int Function %35
-        %i_2 = OpVariable %_ptr_Function_int Function %35
-     %from_1 = OpVariable %_ptr_Function_int Function %35
-      %mid_1 = OpVariable %_ptr_Function_int Function %35
-       %to_1 = OpVariable %_ptr_Function_int Function %35
-      %param = OpVariable %_ptr_Function_int Function %35
-    %param_1 = OpVariable %_ptr_Function_int Function %35
-    %param_2 = OpVariable %_ptr_Function_int Function %35
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %154 = OpLoad %int %m
-        %155 = OpLoad %int %high
-        %156 = OpSLessThanEqual %bool %154 %155
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %159
-        %158 = OpLabel
-               OpBranch %157
-        %159 = OpLabel
-               OpBranch %151
-        %157 = OpLabel
-        %160 = OpLoad %int %low
-               OpStore %i_2 %160
-               OpBranch %161
-        %161 = OpLabel
-               OpLoopMerge %162 %163 None
-               OpBranch %164
-        %164 = OpLabel
-        %165 = OpLoad %int %i_2
-        %166 = OpLoad %int %high
-        %167 = OpSLessThan %bool %165 %166
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %162
-        %168 = OpLabel
-        %171 = OpLoad %int %i_2
-               OpStore %from_1 %171
-        %172 = OpLoad %int %i_2
-        %173 = OpLoad %int %m
-        %174 = OpIAdd %int %172 %173
-        %175 = OpISub %int %174 %int_1
-               OpStore %mid_1 %175
-        %176 = OpLoad %int %i_2
-        %177 = OpLoad %int %m
-        %178 = OpLoad %int %high
-        %182 = OpIMul %int %int_2 %177
-        %183 = OpIAdd %int %176 %182
-        %184 = OpISub %int %183 %int_1
-        %179 = OpExtInst %int %180 SMin %184 %178
-               OpStore %to_1 %179
-        %185 = OpLoad %int %from_1
-               OpStore %param %185
-        %186 = OpLoad %int %mid_1
-               OpStore %param_1 %186
-        %187 = OpLoad %int %to_1
-               OpStore %param_2 %187
-        %188 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %163
-        %163 = OpLabel
-        %192 = OpLoad %int %m
-        %193 = OpLoad %int %i_2
-        %194 = OpIMul %int %int_2 %192
-        %195 = OpIAdd %int %193 %194
-               OpStore %i_2 %195
-               OpBranch %161
-        %162 = OpLabel
-               OpBranch %152
-        %152 = OpLabel
-        %196 = OpLoad %int %m
-        %197 = OpIMul %int %int_2 %196
-               OpStore %m %197
-               OpBranch %150
-        %151 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %135
-        %199 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %35
-        %j_1 = OpVariable %_ptr_Function_int Function %35
-       %grey = OpVariable %_ptr_Function_float Function %204
-        %207 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %208 = OpLoad %float %207
-        %209 = OpConvertFToS %int %208
-               OpStore %i_3 %209
-               OpBranch %210
-        %210 = OpLabel
-               OpLoopMerge %211 %212 None
-               OpBranch %213
-        %213 = OpLabel
-        %214 = OpLoad %int %i_3
-               OpSelectionMerge %215 None
-               OpSwitch %214 %216 9 %217 8 %218 7 %219 6 %220 5 %221 4 %222 3 %223 2 %224 1 %225 0 %226
-        %217 = OpLabel
-        %227 = OpLoad %int %i_3
-        %228 = OpAccessChain %_ptr_Private_int %data %227
-               OpStore %228 %int_n5
-               OpSelectionMerge %231 None
-               OpBranchConditional %true %232 %233
-        %232 = OpLabel
-               OpBranch %231
-        %233 = OpLabel
-               OpBranch %212
-        %231 = OpLabel
-               OpBranch %215
-        %218 = OpLabel
-        %234 = OpLoad %int %i_3
-        %235 = OpAccessChain %_ptr_Private_int %data %234
-               OpStore %235 %int_n4
-               OpBranch %215
-        %219 = OpLabel
-        %237 = OpLoad %int %i_3
-        %238 = OpAccessChain %_ptr_Private_int %data %237
-               OpStore %238 %int_n3
-               OpBranch %215
-        %220 = OpLabel
-        %240 = OpLoad %int %i_3
-        %241 = OpAccessChain %_ptr_Private_int %data %240
-               OpStore %241 %int_n2
-               OpBranch %215
-        %221 = OpLabel
-        %243 = OpLoad %int %i_3
-        %244 = OpAccessChain %_ptr_Private_int %data %243
-               OpStore %244 %int_n1
-               OpBranch %215
-        %222 = OpLabel
-        %246 = OpLoad %int %i_3
-        %247 = OpAccessChain %_ptr_Private_int %data %246
-               OpStore %247 %int_0
-               OpBranch %215
-        %223 = OpLabel
-        %248 = OpLoad %int %i_3
-        %249 = OpAccessChain %_ptr_Private_int %data %248
-               OpStore %249 %int_1
-               OpBranch %215
-        %224 = OpLabel
-        %250 = OpLoad %int %i_3
-        %251 = OpAccessChain %_ptr_Private_int %data %250
-               OpStore %251 %int_2
-               OpBranch %215
-        %225 = OpLabel
-        %252 = OpLoad %int %i_3
-        %253 = OpAccessChain %_ptr_Private_int %data %252
-               OpStore %253 %int_3
-               OpBranch %215
-        %226 = OpLabel
-        %255 = OpLoad %int %i_3
-        %256 = OpAccessChain %_ptr_Private_int %data %255
-               OpStore %256 %int_4
-               OpBranch %215
-        %216 = OpLabel
-               OpBranch %215
-        %215 = OpLabel
-        %258 = OpLoad %int %i_3
-        %259 = OpIAdd %int %258 %int_1
-               OpStore %i_3 %259
-               OpBranch %212
-        %212 = OpLabel
-        %260 = OpLoad %int %i_3
-        %261 = OpSLessThan %bool %260 %int_10
-               OpBranchConditional %261 %210 %211
-        %211 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %262
-        %262 = OpLabel
-               OpLoopMerge %263 %264 None
-               OpBranch %265
-        %265 = OpLabel
-        %266 = OpLoad %int %j_1
-        %267 = OpSLessThan %bool %266 %int_10
-               OpSelectionMerge %268 None
-               OpBranchConditional %267 %269 %270
-        %269 = OpLabel
-               OpBranch %268
-        %270 = OpLabel
-               OpBranch %263
-        %268 = OpLabel
-        %271 = OpLoad %int %j_1
-        %272 = OpLoad %int %j_1
-        %273 = OpAccessChain %_ptr_Private_int %data %272
-        %274 = OpLoad %int %273
-        %275 = OpAccessChain %_ptr_Private_int %temp %271
-               OpStore %275 %274
-               OpBranch %264
-        %264 = OpLabel
-        %276 = OpLoad %int %j_1
-        %277 = OpIAdd %int %276 %int_1
-               OpStore %j_1 %277
-               OpBranch %262
-        %263 = OpLabel
-        %278 = OpFunctionCall %void %mergeSort_
-        %281 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %282 = OpLoad %float %281
-        %283 = OpConvertFToS %int %282
-        %285 = OpSLessThan %bool %283 %int_30
-               OpSelectionMerge %286 None
-               OpBranchConditional %285 %287 %288
-        %287 = OpLabel
-        %289 = OpAccessChain %_ptr_Private_int %data %int_0
-        %290 = OpLoad %int %289
-        %292 = OpConvertSToF %float %290
-        %294 = OpFDiv %float %292 %float_10
-        %295 = OpFAdd %float %float_0_5 %294
-               OpStore %grey %295
-               OpBranch %286
-        %288 = OpLabel
-        %296 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %297 = OpLoad %float %296
-        %298 = OpConvertFToS %int %297
-        %300 = OpSLessThan %bool %298 %int_60
-               OpSelectionMerge %301 None
-               OpBranchConditional %300 %302 %303
-        %302 = OpLabel
-        %304 = OpAccessChain %_ptr_Private_int %data %int_1
-        %305 = OpLoad %int %304
-        %306 = OpConvertSToF %float %305
-        %307 = OpFDiv %float %306 %float_10
-        %308 = OpFAdd %float %float_0_5 %307
-               OpStore %grey %308
-               OpBranch %301
-        %303 = OpLabel
-        %309 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %310 = OpLoad %float %309
-        %311 = OpConvertFToS %int %310
-        %313 = OpSLessThan %bool %311 %int_90
-               OpSelectionMerge %314 None
-               OpBranchConditional %313 %315 %316
-        %315 = OpLabel
-        %317 = OpAccessChain %_ptr_Private_int %data %int_2
-        %318 = OpLoad %int %317
-        %319 = OpConvertSToF %float %318
-        %320 = OpFDiv %float %319 %float_10
-        %321 = OpFAdd %float %float_0_5 %320
-               OpStore %grey %321
-               OpBranch %314
-        %316 = OpLabel
-        %322 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %323 = OpLoad %float %322
-        %324 = OpConvertFToS %int %323
-        %326 = OpSLessThan %bool %324 %int_120
-               OpSelectionMerge %327 None
-               OpBranchConditional %326 %328 %329
-        %328 = OpLabel
-        %330 = OpAccessChain %_ptr_Private_int %data %int_3
-        %331 = OpLoad %int %330
-        %332 = OpConvertSToF %float %331
-        %333 = OpFDiv %float %332 %float_10
-        %334 = OpFAdd %float %float_0_5 %333
-               OpStore %grey %334
-               OpBranch %327
-        %329 = OpLabel
-        %335 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %336 = OpLoad %float %335
-        %337 = OpConvertFToS %int %336
-        %339 = OpSLessThan %bool %337 %int_150
-               OpSelectionMerge %340 None
-               OpBranchConditional %339 %341 %342
-        %341 = OpLabel
-               OpKill
-        %342 = OpLabel
-        %343 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %344 = OpLoad %float %343
-        %345 = OpConvertFToS %int %344
-        %347 = OpSLessThan %bool %345 %int_180
-               OpSelectionMerge %348 None
-               OpBranchConditional %347 %349 %350
-        %349 = OpLabel
-        %352 = OpAccessChain %_ptr_Private_int %data %int_5
-        %353 = OpLoad %int %352
-        %354 = OpConvertSToF %float %353
-        %355 = OpFDiv %float %354 %float_10
-        %356 = OpFAdd %float %float_0_5 %355
-               OpStore %grey %356
-               OpBranch %348
-        %350 = OpLabel
-        %357 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %358 = OpLoad %float %357
-        %359 = OpConvertFToS %int %358
-        %361 = OpSLessThan %bool %359 %int_210
-               OpSelectionMerge %362 None
-               OpBranchConditional %361 %363 %364
-        %363 = OpLabel
-        %366 = OpAccessChain %_ptr_Private_int %data %int_6
-        %367 = OpLoad %int %366
-        %368 = OpConvertSToF %float %367
-        %369 = OpFDiv %float %368 %float_10
-        %370 = OpFAdd %float %float_0_5 %369
-               OpStore %grey %370
-               OpBranch %362
-        %364 = OpLabel
-        %371 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %372 = OpLoad %float %371
-        %373 = OpConvertFToS %int %372
-        %375 = OpSLessThan %bool %373 %int_240
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %378
-        %377 = OpLabel
-        %380 = OpAccessChain %_ptr_Private_int %data %int_7
-        %381 = OpLoad %int %380
-        %382 = OpConvertSToF %float %381
-        %383 = OpFDiv %float %382 %float_10
-        %384 = OpFAdd %float %float_0_5 %383
-               OpStore %grey %384
-               OpBranch %376
-        %378 = OpLabel
-        %385 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %386 = OpLoad %float %385
-        %387 = OpConvertFToS %int %386
-        %389 = OpSLessThan %bool %387 %int_270
-               OpSelectionMerge %390 None
-               OpBranchConditional %389 %391 %392
-        %391 = OpLabel
-        %394 = OpAccessChain %_ptr_Private_int %data %int_8
-        %395 = OpLoad %int %394
-        %396 = OpConvertSToF %float %395
-        %397 = OpFDiv %float %396 %float_10
-        %398 = OpFAdd %float %float_0_5 %397
-               OpStore %grey %398
-               OpBranch %390
-        %392 = OpLabel
-               OpKill
-        %390 = OpLabel
-               OpBranch %376
-        %376 = OpLabel
-               OpBranch %362
-        %362 = OpLabel
-               OpBranch %348
-        %348 = OpLabel
-               OpBranch %340
-        %340 = OpLabel
-               OpBranch %327
-        %327 = OpLabel
-               OpBranch %314
-        %314 = OpLabel
-               OpBranch %301
-        %301 = OpLabel
-               OpBranch %286
-        %286 = OpLabel
-        %399 = OpLoad %float %grey
-        %401 = OpCompositeConstruct %v3float %399 %399 %399
-        %402 = OpCompositeExtract %float %401 0
-        %403 = OpCompositeExtract %float %401 1
-        %404 = OpCompositeExtract %float %401 2
-        %406 = OpCompositeConstruct %v4float %402 %403 %404 %float_1
-               OpStore %x_GLF_color %406
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %407
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %411 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %412 = OpFunctionCall %void %main_1
-        %413 = OpLoad %v4float %x_GLF_color
-        %414 = OpCompositeConstruct %main_out %413
-               OpReturnValue %414
-               OpFunctionEnd
-       %main = OpFunction %void None %135
-        %416 = OpLabel
-        %418 = OpLoad %v4float %gl_FragCoord_param_1
-        %417 = OpFunctionCall %main_out %main_inner %418
-        %419 = OpCompositeExtract %v4float %417 0
-               OpStore %x_GLF_color_1_1 %419
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.wgsl
deleted file mode 100644
index b969e06..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,317 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_255 : i32 = *(from);
-  k = x_255;
-  let x_256 : i32 = *(from);
-  i = x_256;
-  let x_257 : i32 = *(mid);
-  j = (x_257 + 1);
-  loop {
-    let x_263 : i32 = i;
-    let x_264 : i32 = *(mid);
-    let x_266 : i32 = j;
-    let x_267 : i32 = *(to);
-    if (((x_263 <= x_264) && (x_266 <= x_267))) {
-    } else {
-      break;
-    }
-    let x_271 : i32 = i;
-    let x_273 : i32 = data[x_271];
-    let x_274 : i32 = j;
-    let x_276 : i32 = data[x_274];
-    if ((x_273 < x_276)) {
-      let x_281 : i32 = k;
-      k = (x_281 + 1);
-      let x_283 : i32 = i;
-      i = (x_283 + 1);
-      let x_286 : i32 = data[x_283];
-      temp[x_281] = x_286;
-    } else {
-      let x_288 : i32 = k;
-      k = (x_288 + 1);
-      let x_290 : i32 = j;
-      j = (x_290 + 1);
-      let x_293 : i32 = data[x_290];
-      temp[x_288] = x_293;
-    }
-  }
-  loop {
-    let x_299 : i32 = i;
-    let x_301 : i32 = i;
-    let x_302 : i32 = *(mid);
-    if (((x_299 < 10) && (x_301 <= x_302))) {
-    } else {
-      break;
-    }
-    let x_306 : i32 = k;
-    k = (x_306 + 1);
-    let x_308 : i32 = i;
-    i = (x_308 + 1);
-    let x_311 : i32 = data[x_308];
-    temp[x_306] = x_311;
-  }
-  let x_313 : i32 = *(from);
-  i_1 = x_313;
-  loop {
-    let x_318 : i32 = i_1;
-    let x_319 : i32 = *(to);
-    if ((x_318 <= x_319)) {
-    } else {
-      break;
-    }
-    let x_322 : i32 = i_1;
-    let x_323 : i32 = i_1;
-    let x_325 : i32 = temp[x_323];
-    data[x_322] = x_325;
-
-    continuing {
-      let x_327 : i32 = i_1;
-      i_1 = (x_327 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_334 : i32 = m;
-    let x_335 : i32 = high;
-    if ((x_334 <= x_335)) {
-    } else {
-      break;
-    }
-    let x_338 : i32 = low;
-    i_2 = x_338;
-    loop {
-      let x_343 : i32 = i_2;
-      let x_344 : i32 = high;
-      if ((x_343 < x_344)) {
-      } else {
-        break;
-      }
-      let x_347 : i32 = i_2;
-      from_1 = x_347;
-      let x_348 : i32 = i_2;
-      let x_349 : i32 = m;
-      mid_1 = ((x_348 + x_349) - 1);
-      let x_352 : i32 = i_2;
-      let x_353 : i32 = m;
-      let x_357 : i32 = high;
-      to_1 = min(((x_352 + (2 * x_353)) - 1), x_357);
-      let x_359 : i32 = from_1;
-      param = x_359;
-      let x_360 : i32 = mid_1;
-      param_1 = x_360;
-      let x_361 : i32 = to_1;
-      param_2 = x_361;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_363 : i32 = m;
-        let x_365 : i32 = i_2;
-        i_2 = (x_365 + (2 * x_363));
-      }
-    }
-
-    continuing {
-      let x_367 : i32 = m;
-      m = (2 * x_367);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_88 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_88);
-  loop {
-    let x_94 : i32 = i_3;
-    switch(x_94) {
-      case 9: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -5;
-        if (true) {
-        } else {
-          continue;
-        }
-      }
-      case 8: {
-        let x_122 : i32 = i_3;
-        data[x_122] = -4;
-      }
-      case 7: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -3;
-      }
-      case 6: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -2;
-      }
-      case 5: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -1;
-      }
-      case 4: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 0;
-      }
-      case 3: {
-        let x_112 : i32 = i_3;
-        data[x_112] = 1;
-      }
-      case 2: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 2;
-      }
-      case 1: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 3;
-      }
-      case 0: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 4;
-      }
-      default: {
-      }
-    }
-    let x_126 : i32 = i_3;
-    i_3 = (x_126 + 1);
-
-    continuing {
-      let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_134 : i32 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    let x_137 : i32 = j_1;
-    let x_138 : i32 = j_1;
-    let x_140 : i32 = data[x_138];
-    temp[x_137] = x_140;
-
-    continuing {
-      let x_142 : i32 = j_1;
-      j_1 = (x_142 + 1);
-    }
-  }
-  mergeSort_();
-  let x_146 : f32 = gl_FragCoord.y;
-  if ((i32(x_146) < 30)) {
-    let x_153 : i32 = data[0];
-    grey = (0.5 + (f32(x_153) / 10.0));
-  } else {
-    let x_158 : f32 = gl_FragCoord.y;
-    if ((i32(x_158) < 60)) {
-      let x_165 : i32 = data[1];
-      grey = (0.5 + (f32(x_165) / 10.0));
-    } else {
-      let x_170 : f32 = gl_FragCoord.y;
-      if ((i32(x_170) < 90)) {
-        let x_177 : i32 = data[2];
-        grey = (0.5 + (f32(x_177) / 10.0));
-      } else {
-        let x_182 : f32 = gl_FragCoord.y;
-        if ((i32(x_182) < 120)) {
-          let x_189 : i32 = data[3];
-          grey = (0.5 + (f32(x_189) / 10.0));
-        } else {
-          let x_194 : f32 = gl_FragCoord.y;
-          if ((i32(x_194) < 150)) {
-            discard;
-          } else {
-            let x_201 : f32 = gl_FragCoord.y;
-            if ((i32(x_201) < 180)) {
-              let x_208 : i32 = data[5];
-              grey = (0.5 + (f32(x_208) / 10.0));
-            } else {
-              let x_213 : f32 = gl_FragCoord.y;
-              if ((i32(x_213) < 210)) {
-                let x_220 : i32 = data[6];
-                grey = (0.5 + (f32(x_220) / 10.0));
-              } else {
-                let x_225 : f32 = gl_FragCoord.y;
-                if ((i32(x_225) < 240)) {
-                  let x_232 : i32 = data[7];
-                  grey = (0.5 + (f32(x_232) / 10.0));
-                } else {
-                  let x_237 : f32 = gl_FragCoord.y;
-                  if ((i32(x_237) < 270)) {
-                    let x_244 : i32 = data[8];
-                    grey = (0.5 + (f32(x_244) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_248 : f32 = grey;
-  let x_249 : vec3<f32> = vec3<f32>(x_248, x_248, x_248);
-  x_GLF_color = vec4<f32>(x_249.x, x_249.y, x_249.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.hlsl
deleted file mode 100644
index 28e9f1a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,123 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[10] = (float[10])0;
-  int x_40_phi = 0;
-  int x_52_phi = 0;
-  x_40_phi = 0;
-  while (true) {
-    int x_41 = 0;
-    const int x_40 = x_40_phi;
-    if ((x_40 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const float x_48 = asfloat(x_9[0].y);
-      data[x_40] = (float((10 - x_40)) * x_48);
-      x_41 = (x_40 + 1);
-      x_40_phi = x_41;
-    }
-  }
-  x_52_phi = 0;
-  while (true) {
-    int x_53 = 0;
-    int x_59_phi = 0;
-    const int x_52 = x_52_phi;
-    if ((x_52 < 9)) {
-    } else {
-      break;
-    }
-    x_59_phi = 0;
-    while (true) {
-      bool x_82 = false;
-      bool x_83 = false;
-      int x_60 = 0;
-      bool x_84_phi = false;
-      const int x_59 = x_59_phi;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_59 < (x_52 + 1))) {
-        {
-          x_60 = (x_59 + 1);
-          x_59_phi = x_60;
-        }
-        continue;
-      }
-      const int x_69_save = x_52;
-      const float x_70 = data[x_69_save];
-      const int x_71_save = x_59;
-      const float x_72 = data[x_71_save];
-      const float x_74 = gl_FragCoord.y;
-      const float x_76 = asfloat(x_6[0].y);
-      if ((x_74 < (x_76 * 0.5f))) {
-        x_82 = (x_70 > x_72);
-        x_84_phi = x_82;
-      } else {
-        x_83 = (x_70 < x_72);
-        x_84_phi = x_83;
-      }
-      if (x_84_phi) {
-        const float x_87 = data[x_69_save];
-        const float x_88 = data[x_71_save];
-        data[x_69_save] = x_88;
-        data[x_71_save] = x_87;
-      }
-      {
-        x_60 = (x_59 + 1);
-        x_59_phi = x_60;
-      }
-    }
-    {
-      x_53 = (x_52 + 1);
-      x_52_phi = x_53;
-    }
-  }
-  const float x_90 = gl_FragCoord.x;
-  const float x_92 = asfloat(x_6[0].x);
-  if ((x_90 < (x_92 * 0.5f))) {
-    const float x_99 = data[0];
-    const float x_102 = data[5];
-    const float x_105 = data[9];
-    x_GLF_color = float4((x_99 * 0.100000001f), (x_102 * 0.100000001f), (x_105 * 0.100000001f), 1.0f);
-  } else {
-    const float x_109 = data[5];
-    const float x_112 = data[9];
-    const float x_115 = data[0];
-    x_GLF_color = float4((x_109 * 0.100000001f), (x_112 * 0.100000001f), (x_115 * 0.100000001f), 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.msl
deleted file mode 100644
index d7bf86c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.msl
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, constant buf1& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  tint_array_wrapper data = {};
-  int x_40_phi = 0;
-  int x_52_phi = 0;
-  x_40_phi = 0;
-  while (true) {
-    int x_41 = 0;
-    int const x_40 = x_40_phi;
-    if ((x_40 < 10)) {
-    } else {
-      break;
-    }
-    {
-      float const x_48 = x_9.injectionSwitch.y;
-      data.arr[x_40] = (float(as_type<int>((as_type<uint>(10) - as_type<uint>(x_40)))) * x_48);
-      x_41 = as_type<int>((as_type<uint>(x_40) + as_type<uint>(1)));
-      x_40_phi = x_41;
-    }
-  }
-  x_52_phi = 0;
-  while (true) {
-    int x_53 = 0;
-    int x_59_phi = 0;
-    int const x_52 = x_52_phi;
-    if ((x_52 < 9)) {
-    } else {
-      break;
-    }
-    x_59_phi = 0;
-    while (true) {
-      bool x_82 = false;
-      bool x_83 = false;
-      int x_60 = 0;
-      bool x_84_phi = false;
-      int const x_59 = x_59_phi;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_59 < as_type<int>((as_type<uint>(x_52) + as_type<uint>(1))))) {
-        {
-          x_60 = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-          x_59_phi = x_60;
-        }
-        continue;
-      }
-      int const x_69_save = x_52;
-      float const x_70 = data.arr[x_69_save];
-      int const x_71_save = x_59;
-      float const x_72 = data.arr[x_71_save];
-      float const x_74 = (*(tint_symbol_3)).y;
-      float const x_76 = x_6.resolution.y;
-      if ((x_74 < (x_76 * 0.5f))) {
-        x_82 = (x_70 > x_72);
-        x_84_phi = x_82;
-      } else {
-        x_83 = (x_70 < x_72);
-        x_84_phi = x_83;
-      }
-      bool const x_84 = x_84_phi;
-      if (x_84) {
-        float const x_87 = data.arr[x_69_save];
-        float const x_88 = data.arr[x_71_save];
-        data.arr[x_69_save] = x_88;
-        data.arr[x_71_save] = x_87;
-      }
-      {
-        x_60 = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-        x_59_phi = x_60;
-      }
-    }
-    {
-      x_53 = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-      x_52_phi = x_53;
-    }
-  }
-  float const x_90 = (*(tint_symbol_3)).x;
-  float const x_92 = x_6.resolution.x;
-  if ((x_90 < (x_92 * 0.5f))) {
-    float const x_99 = data.arr[0];
-    float const x_102 = data.arr[5];
-    float const x_105 = data.arr[9];
-    *(tint_symbol_4) = float4((x_99 * 0.100000001f), (x_102 * 0.100000001f), (x_105 * 0.100000001f), 1.0f);
-  } else {
-    float const x_109 = data.arr[5];
-    float const x_112 = data.arr[9];
-    float const x_115 = data.arr[0];
-    *(tint_symbol_4) = float4((x_109 * 0.100000001f), (x_112 * 0.100000001f), (x_115 * 0.100000001f), 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, constant buf1& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]], constant buf1& x_6 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.spvasm
deleted file mode 100644
index 83842cb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,282 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 167
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_52_phi "x_52_phi"
-               OpName %x_41 "x_41"
-               OpName %x_53 "x_53"
-               OpName %x_59_phi "x_59_phi"
-               OpName %x_82 "x_82"
-               OpName %x_83 "x_83"
-               OpName %x_60 "x_60"
-               OpName %x_84_phi "x_84_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %27 = OpConstantNull %_arr_float_uint_10
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %77 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_0_5 = OpConstant %float 0.5
-      %int_5 = OpConstant %int 5
-%float_0_100000001 = OpConstant %float 0.100000001
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %154 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %27
-   %x_40_phi = OpVariable %_ptr_Function_int Function %31
-   %x_52_phi = OpVariable %_ptr_Function_int Function %31
-       %x_41 = OpVariable %_ptr_Function_int Function %31
-       %x_53 = OpVariable %_ptr_Function_int Function %31
-   %x_59_phi = OpVariable %_ptr_Function_int Function %31
-       %x_82 = OpVariable %_ptr_Function_bool Function %77
-       %x_83 = OpVariable %_ptr_Function_bool Function %77
-       %x_60 = OpVariable %_ptr_Function_int Function %31
-   %x_84_phi = OpVariable %_ptr_Function_bool Function %77
-               OpStore %x_40_phi %int_0
-               OpBranch %34
-         %34 = OpLabel
-               OpLoopMerge %35 %36 None
-               OpBranch %37
-         %37 = OpLabel
-         %39 = OpLoad %int %x_40_phi
-         %41 = OpSLessThan %bool %39 %int_10
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %35
-         %43 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Function_float %data %39
-         %54 = OpISub %int %int_10 %39
-         %53 = OpConvertSToF %float %54
-         %55 = OpFMul %float %53 %50
-               OpStore %52 %55
-         %57 = OpIAdd %int %39 %int_1
-               OpStore %x_41 %57
-         %58 = OpLoad %int %x_41
-               OpStore %x_40_phi %58
-               OpBranch %34
-         %35 = OpLabel
-               OpStore %x_52_phi %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %65 = OpLoad %int %x_52_phi
-         %67 = OpSLessThan %bool %65 %int_9
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %60
-         %68 = OpLabel
-               OpStore %x_59_phi %int_0
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %81 = OpLoad %int %x_59_phi
-         %82 = OpSLessThan %bool %81 %int_10
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %72
-         %83 = OpLabel
-         %86 = OpIAdd %int %65 %int_1
-         %87 = OpSLessThan %bool %81 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpBranch %73
-         %88 = OpLabel
-         %90 = OpAccessChain %_ptr_Function_float %data %65
-         %91 = OpLoad %float %90
-         %92 = OpAccessChain %_ptr_Function_float %data %81
-         %93 = OpLoad %float %92
-         %95 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %96 = OpLoad %float %95
-         %97 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpFMul %float %98 %float_0_5
-        %101 = OpFOrdLessThan %bool %96 %100
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-        %105 = OpFOrdGreaterThan %bool %91 %93
-               OpStore %x_82 %105
-        %106 = OpLoad %bool %x_82
-               OpStore %x_84_phi %106
-               OpBranch %102
-        %104 = OpLabel
-        %107 = OpFOrdLessThan %bool %91 %93
-               OpStore %x_83 %107
-        %108 = OpLoad %bool %x_83
-               OpStore %x_84_phi %108
-               OpBranch %102
-        %102 = OpLabel
-        %109 = OpLoad %bool %x_84_phi
-               OpSelectionMerge %110 None
-               OpBranchConditional %109 %111 %110
-        %111 = OpLabel
-        %112 = OpAccessChain %_ptr_Function_float %data %65
-        %113 = OpLoad %float %112
-        %114 = OpAccessChain %_ptr_Function_float %data %81
-        %115 = OpLoad %float %114
-        %116 = OpAccessChain %_ptr_Function_float %data %65
-               OpStore %116 %115
-        %117 = OpAccessChain %_ptr_Function_float %data %81
-               OpStore %117 %113
-               OpBranch %110
-        %110 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-        %118 = OpIAdd %int %81 %int_1
-               OpStore %x_60 %118
-        %119 = OpLoad %int %x_60
-               OpStore %x_59_phi %119
-               OpBranch %71
-         %72 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-        %120 = OpIAdd %int %65 %int_1
-               OpStore %x_53 %120
-        %121 = OpLoad %int %x_53
-               OpStore %x_52_phi %121
-               OpBranch %59
-         %60 = OpLabel
-        %122 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %125 = OpLoad %float %124
-        %126 = OpFMul %float %125 %float_0_5
-        %127 = OpFOrdLessThan %bool %123 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-        %131 = OpAccessChain %_ptr_Function_float %data %int_0
-        %132 = OpLoad %float %131
-        %134 = OpAccessChain %_ptr_Function_float %data %int_5
-        %135 = OpLoad %float %134
-        %136 = OpAccessChain %_ptr_Function_float %data %int_9
-        %137 = OpLoad %float %136
-        %139 = OpFMul %float %132 %float_0_100000001
-        %140 = OpFMul %float %135 %float_0_100000001
-        %141 = OpFMul %float %137 %float_0_100000001
-        %143 = OpCompositeConstruct %v4float %139 %140 %141 %float_1
-               OpStore %x_GLF_color %143
-               OpBranch %128
-        %130 = OpLabel
-        %144 = OpAccessChain %_ptr_Function_float %data %int_5
-        %145 = OpLoad %float %144
-        %146 = OpAccessChain %_ptr_Function_float %data %int_9
-        %147 = OpLoad %float %146
-        %148 = OpAccessChain %_ptr_Function_float %data %int_0
-        %149 = OpLoad %float %148
-        %150 = OpFMul %float %145 %float_0_100000001
-        %151 = OpFMul %float %147 %float_0_100000001
-        %152 = OpFMul %float %149 %float_0_100000001
-        %153 = OpCompositeConstruct %v4float %150 %151 %152 %float_1
-               OpStore %x_GLF_color %153
-               OpBranch %128
-        %128 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %154
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %158 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %159 = OpFunctionCall %void %main_1
-        %160 = OpLoad %v4float %x_GLF_color
-        %161 = OpCompositeConstruct %main_out %160
-               OpReturnValue %161
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %163 = OpLabel
-        %165 = OpLoad %v4float %gl_FragCoord_param_1
-        %164 = OpFunctionCall %main_out %main_inner %165
-        %166 = OpCompositeExtract %v4float %164 0
-               OpStore %x_GLF_color_1_1 %166
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.wgsl
deleted file mode 100644
index 819f07b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,120 +0,0 @@
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 10>;
-  var x_40_phi : i32;
-  var x_52_phi : i32;
-  x_40_phi = 0;
-  loop {
-    var x_41 : i32;
-    let x_40 : i32 = x_40_phi;
-    if ((x_40 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_48 : f32 = x_9.injectionSwitch.y;
-      data[x_40] = (f32((10 - x_40)) * x_48);
-      x_41 = (x_40 + 1);
-      x_40_phi = x_41;
-    }
-  }
-  x_52_phi = 0;
-  loop {
-    var x_53 : i32;
-    var x_59_phi : i32;
-    let x_52 : i32 = x_52_phi;
-    if ((x_52 < 9)) {
-    } else {
-      break;
-    }
-    x_59_phi = 0;
-    loop {
-      var x_82 : bool;
-      var x_83 : bool;
-      var x_60 : i32;
-      var x_84_phi : bool;
-      let x_59 : i32 = x_59_phi;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_59 < (x_52 + 1))) {
-        continue;
-      }
-      let x_69 : ptr<function, f32> = &(data[x_52]);
-      let x_70 : f32 = *(x_69);
-      let x_71 : ptr<function, f32> = &(data[x_59]);
-      let x_72 : f32 = *(x_71);
-      let x_74 : f32 = gl_FragCoord.y;
-      let x_76 : f32 = x_6.resolution.y;
-      if ((x_74 < (x_76 * 0.5))) {
-        x_82 = (x_70 > x_72);
-        x_84_phi = x_82;
-      } else {
-        x_83 = (x_70 < x_72);
-        x_84_phi = x_83;
-      }
-      let x_84 : bool = x_84_phi;
-      if (x_84) {
-        let x_87 : f32 = *(x_69);
-        let x_88 : f32 = *(x_71);
-        *(x_69) = x_88;
-        *(x_71) = x_87;
-      }
-
-      continuing {
-        x_60 = (x_59 + 1);
-        x_59_phi = x_60;
-      }
-    }
-
-    continuing {
-      x_53 = (x_52 + 1);
-      x_52_phi = x_53;
-    }
-  }
-  let x_90 : f32 = gl_FragCoord.x;
-  let x_92 : f32 = x_6.resolution.x;
-  if ((x_90 < (x_92 * 0.5))) {
-    let x_99 : f32 = data[0];
-    let x_102 : f32 = data[5];
-    let x_105 : f32 = data[9];
-    x_GLF_color = vec4<f32>((x_99 * 0.100000001), (x_102 * 0.100000001), (x_105 * 0.100000001), 1.0);
-  } else {
-    let x_109 : f32 = data[5];
-    let x_112 : f32 = data[9];
-    let x_115 : f32 = data[0];
-    x_GLF_color = vec4<f32>((x_109 * 0.100000001), (x_112 * 0.100000001), (x_115 * 0.100000001), 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.hlsl
deleted file mode 100644
index 28e9f1a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,123 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[10] = (float[10])0;
-  int x_40_phi = 0;
-  int x_52_phi = 0;
-  x_40_phi = 0;
-  while (true) {
-    int x_41 = 0;
-    const int x_40 = x_40_phi;
-    if ((x_40 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const float x_48 = asfloat(x_9[0].y);
-      data[x_40] = (float((10 - x_40)) * x_48);
-      x_41 = (x_40 + 1);
-      x_40_phi = x_41;
-    }
-  }
-  x_52_phi = 0;
-  while (true) {
-    int x_53 = 0;
-    int x_59_phi = 0;
-    const int x_52 = x_52_phi;
-    if ((x_52 < 9)) {
-    } else {
-      break;
-    }
-    x_59_phi = 0;
-    while (true) {
-      bool x_82 = false;
-      bool x_83 = false;
-      int x_60 = 0;
-      bool x_84_phi = false;
-      const int x_59 = x_59_phi;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_59 < (x_52 + 1))) {
-        {
-          x_60 = (x_59 + 1);
-          x_59_phi = x_60;
-        }
-        continue;
-      }
-      const int x_69_save = x_52;
-      const float x_70 = data[x_69_save];
-      const int x_71_save = x_59;
-      const float x_72 = data[x_71_save];
-      const float x_74 = gl_FragCoord.y;
-      const float x_76 = asfloat(x_6[0].y);
-      if ((x_74 < (x_76 * 0.5f))) {
-        x_82 = (x_70 > x_72);
-        x_84_phi = x_82;
-      } else {
-        x_83 = (x_70 < x_72);
-        x_84_phi = x_83;
-      }
-      if (x_84_phi) {
-        const float x_87 = data[x_69_save];
-        const float x_88 = data[x_71_save];
-        data[x_69_save] = x_88;
-        data[x_71_save] = x_87;
-      }
-      {
-        x_60 = (x_59 + 1);
-        x_59_phi = x_60;
-      }
-    }
-    {
-      x_53 = (x_52 + 1);
-      x_52_phi = x_53;
-    }
-  }
-  const float x_90 = gl_FragCoord.x;
-  const float x_92 = asfloat(x_6[0].x);
-  if ((x_90 < (x_92 * 0.5f))) {
-    const float x_99 = data[0];
-    const float x_102 = data[5];
-    const float x_105 = data[9];
-    x_GLF_color = float4((x_99 * 0.100000001f), (x_102 * 0.100000001f), (x_105 * 0.100000001f), 1.0f);
-  } else {
-    const float x_109 = data[5];
-    const float x_112 = data[9];
-    const float x_115 = data[0];
-    x_GLF_color = float4((x_109 * 0.100000001f), (x_112 * 0.100000001f), (x_115 * 0.100000001f), 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.msl
deleted file mode 100644
index d7bf86c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.msl
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, constant buf1& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  tint_array_wrapper data = {};
-  int x_40_phi = 0;
-  int x_52_phi = 0;
-  x_40_phi = 0;
-  while (true) {
-    int x_41 = 0;
-    int const x_40 = x_40_phi;
-    if ((x_40 < 10)) {
-    } else {
-      break;
-    }
-    {
-      float const x_48 = x_9.injectionSwitch.y;
-      data.arr[x_40] = (float(as_type<int>((as_type<uint>(10) - as_type<uint>(x_40)))) * x_48);
-      x_41 = as_type<int>((as_type<uint>(x_40) + as_type<uint>(1)));
-      x_40_phi = x_41;
-    }
-  }
-  x_52_phi = 0;
-  while (true) {
-    int x_53 = 0;
-    int x_59_phi = 0;
-    int const x_52 = x_52_phi;
-    if ((x_52 < 9)) {
-    } else {
-      break;
-    }
-    x_59_phi = 0;
-    while (true) {
-      bool x_82 = false;
-      bool x_83 = false;
-      int x_60 = 0;
-      bool x_84_phi = false;
-      int const x_59 = x_59_phi;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_59 < as_type<int>((as_type<uint>(x_52) + as_type<uint>(1))))) {
-        {
-          x_60 = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-          x_59_phi = x_60;
-        }
-        continue;
-      }
-      int const x_69_save = x_52;
-      float const x_70 = data.arr[x_69_save];
-      int const x_71_save = x_59;
-      float const x_72 = data.arr[x_71_save];
-      float const x_74 = (*(tint_symbol_3)).y;
-      float const x_76 = x_6.resolution.y;
-      if ((x_74 < (x_76 * 0.5f))) {
-        x_82 = (x_70 > x_72);
-        x_84_phi = x_82;
-      } else {
-        x_83 = (x_70 < x_72);
-        x_84_phi = x_83;
-      }
-      bool const x_84 = x_84_phi;
-      if (x_84) {
-        float const x_87 = data.arr[x_69_save];
-        float const x_88 = data.arr[x_71_save];
-        data.arr[x_69_save] = x_88;
-        data.arr[x_71_save] = x_87;
-      }
-      {
-        x_60 = as_type<int>((as_type<uint>(x_59) + as_type<uint>(1)));
-        x_59_phi = x_60;
-      }
-    }
-    {
-      x_53 = as_type<int>((as_type<uint>(x_52) + as_type<uint>(1)));
-      x_52_phi = x_53;
-    }
-  }
-  float const x_90 = (*(tint_symbol_3)).x;
-  float const x_92 = x_6.resolution.x;
-  if ((x_90 < (x_92 * 0.5f))) {
-    float const x_99 = data.arr[0];
-    float const x_102 = data.arr[5];
-    float const x_105 = data.arr[9];
-    *(tint_symbol_4) = float4((x_99 * 0.100000001f), (x_102 * 0.100000001f), (x_105 * 0.100000001f), 1.0f);
-  } else {
-    float const x_109 = data.arr[5];
-    float const x_112 = data.arr[9];
-    float const x_115 = data.arr[0];
-    *(tint_symbol_4) = float4((x_109 * 0.100000001f), (x_112 * 0.100000001f), (x_115 * 0.100000001f), 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, constant buf1& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]], constant buf1& x_6 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.spvasm
deleted file mode 100644
index 83842cb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,282 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 167
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %x_40_phi "x_40_phi"
-               OpName %x_52_phi "x_52_phi"
-               OpName %x_41 "x_41"
-               OpName %x_53 "x_53"
-               OpName %x_59_phi "x_59_phi"
-               OpName %x_82 "x_82"
-               OpName %x_83 "x_83"
-               OpName %x_60 "x_60"
-               OpName %x_84_phi "x_84_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %27 = OpConstantNull %_arr_float_uint_10
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %77 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_0_5 = OpConstant %float 0.5
-      %int_5 = OpConstant %int 5
-%float_0_100000001 = OpConstant %float 0.100000001
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %154 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %27
-   %x_40_phi = OpVariable %_ptr_Function_int Function %31
-   %x_52_phi = OpVariable %_ptr_Function_int Function %31
-       %x_41 = OpVariable %_ptr_Function_int Function %31
-       %x_53 = OpVariable %_ptr_Function_int Function %31
-   %x_59_phi = OpVariable %_ptr_Function_int Function %31
-       %x_82 = OpVariable %_ptr_Function_bool Function %77
-       %x_83 = OpVariable %_ptr_Function_bool Function %77
-       %x_60 = OpVariable %_ptr_Function_int Function %31
-   %x_84_phi = OpVariable %_ptr_Function_bool Function %77
-               OpStore %x_40_phi %int_0
-               OpBranch %34
-         %34 = OpLabel
-               OpLoopMerge %35 %36 None
-               OpBranch %37
-         %37 = OpLabel
-         %39 = OpLoad %int %x_40_phi
-         %41 = OpSLessThan %bool %39 %int_10
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %35
-         %43 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Function_float %data %39
-         %54 = OpISub %int %int_10 %39
-         %53 = OpConvertSToF %float %54
-         %55 = OpFMul %float %53 %50
-               OpStore %52 %55
-         %57 = OpIAdd %int %39 %int_1
-               OpStore %x_41 %57
-         %58 = OpLoad %int %x_41
-               OpStore %x_40_phi %58
-               OpBranch %34
-         %35 = OpLabel
-               OpStore %x_52_phi %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %65 = OpLoad %int %x_52_phi
-         %67 = OpSLessThan %bool %65 %int_9
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %60
-         %68 = OpLabel
-               OpStore %x_59_phi %int_0
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %81 = OpLoad %int %x_59_phi
-         %82 = OpSLessThan %bool %81 %int_10
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %72
-         %83 = OpLabel
-         %86 = OpIAdd %int %65 %int_1
-         %87 = OpSLessThan %bool %81 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpBranch %73
-         %88 = OpLabel
-         %90 = OpAccessChain %_ptr_Function_float %data %65
-         %91 = OpLoad %float %90
-         %92 = OpAccessChain %_ptr_Function_float %data %81
-         %93 = OpLoad %float %92
-         %95 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %96 = OpLoad %float %95
-         %97 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpFMul %float %98 %float_0_5
-        %101 = OpFOrdLessThan %bool %96 %100
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-        %105 = OpFOrdGreaterThan %bool %91 %93
-               OpStore %x_82 %105
-        %106 = OpLoad %bool %x_82
-               OpStore %x_84_phi %106
-               OpBranch %102
-        %104 = OpLabel
-        %107 = OpFOrdLessThan %bool %91 %93
-               OpStore %x_83 %107
-        %108 = OpLoad %bool %x_83
-               OpStore %x_84_phi %108
-               OpBranch %102
-        %102 = OpLabel
-        %109 = OpLoad %bool %x_84_phi
-               OpSelectionMerge %110 None
-               OpBranchConditional %109 %111 %110
-        %111 = OpLabel
-        %112 = OpAccessChain %_ptr_Function_float %data %65
-        %113 = OpLoad %float %112
-        %114 = OpAccessChain %_ptr_Function_float %data %81
-        %115 = OpLoad %float %114
-        %116 = OpAccessChain %_ptr_Function_float %data %65
-               OpStore %116 %115
-        %117 = OpAccessChain %_ptr_Function_float %data %81
-               OpStore %117 %113
-               OpBranch %110
-        %110 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-        %118 = OpIAdd %int %81 %int_1
-               OpStore %x_60 %118
-        %119 = OpLoad %int %x_60
-               OpStore %x_59_phi %119
-               OpBranch %71
-         %72 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-        %120 = OpIAdd %int %65 %int_1
-               OpStore %x_53 %120
-        %121 = OpLoad %int %x_53
-               OpStore %x_52_phi %121
-               OpBranch %59
-         %60 = OpLabel
-        %122 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %125 = OpLoad %float %124
-        %126 = OpFMul %float %125 %float_0_5
-        %127 = OpFOrdLessThan %bool %123 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-        %131 = OpAccessChain %_ptr_Function_float %data %int_0
-        %132 = OpLoad %float %131
-        %134 = OpAccessChain %_ptr_Function_float %data %int_5
-        %135 = OpLoad %float %134
-        %136 = OpAccessChain %_ptr_Function_float %data %int_9
-        %137 = OpLoad %float %136
-        %139 = OpFMul %float %132 %float_0_100000001
-        %140 = OpFMul %float %135 %float_0_100000001
-        %141 = OpFMul %float %137 %float_0_100000001
-        %143 = OpCompositeConstruct %v4float %139 %140 %141 %float_1
-               OpStore %x_GLF_color %143
-               OpBranch %128
-        %130 = OpLabel
-        %144 = OpAccessChain %_ptr_Function_float %data %int_5
-        %145 = OpLoad %float %144
-        %146 = OpAccessChain %_ptr_Function_float %data %int_9
-        %147 = OpLoad %float %146
-        %148 = OpAccessChain %_ptr_Function_float %data %int_0
-        %149 = OpLoad %float %148
-        %150 = OpFMul %float %145 %float_0_100000001
-        %151 = OpFMul %float %147 %float_0_100000001
-        %152 = OpFMul %float %149 %float_0_100000001
-        %153 = OpCompositeConstruct %v4float %150 %151 %152 %float_1
-               OpStore %x_GLF_color %153
-               OpBranch %128
-        %128 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %154
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %158 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %159 = OpFunctionCall %void %main_1
-        %160 = OpLoad %v4float %x_GLF_color
-        %161 = OpCompositeConstruct %main_out %160
-               OpReturnValue %161
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %163 = OpLabel
-        %165 = OpLoad %v4float %gl_FragCoord_param_1
-        %164 = OpFunctionCall %main_out %main_inner %165
-        %166 = OpCompositeExtract %v4float %164 0
-               OpStore %x_GLF_color_1_1 %166
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.wgsl
deleted file mode 100644
index 819f07b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,120 +0,0 @@
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 10>;
-  var x_40_phi : i32;
-  var x_52_phi : i32;
-  x_40_phi = 0;
-  loop {
-    var x_41 : i32;
-    let x_40 : i32 = x_40_phi;
-    if ((x_40 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_48 : f32 = x_9.injectionSwitch.y;
-      data[x_40] = (f32((10 - x_40)) * x_48);
-      x_41 = (x_40 + 1);
-      x_40_phi = x_41;
-    }
-  }
-  x_52_phi = 0;
-  loop {
-    var x_53 : i32;
-    var x_59_phi : i32;
-    let x_52 : i32 = x_52_phi;
-    if ((x_52 < 9)) {
-    } else {
-      break;
-    }
-    x_59_phi = 0;
-    loop {
-      var x_82 : bool;
-      var x_83 : bool;
-      var x_60 : i32;
-      var x_84_phi : bool;
-      let x_59 : i32 = x_59_phi;
-      if ((x_59 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_59 < (x_52 + 1))) {
-        continue;
-      }
-      let x_69 : ptr<function, f32> = &(data[x_52]);
-      let x_70 : f32 = *(x_69);
-      let x_71 : ptr<function, f32> = &(data[x_59]);
-      let x_72 : f32 = *(x_71);
-      let x_74 : f32 = gl_FragCoord.y;
-      let x_76 : f32 = x_6.resolution.y;
-      if ((x_74 < (x_76 * 0.5))) {
-        x_82 = (x_70 > x_72);
-        x_84_phi = x_82;
-      } else {
-        x_83 = (x_70 < x_72);
-        x_84_phi = x_83;
-      }
-      let x_84 : bool = x_84_phi;
-      if (x_84) {
-        let x_87 : f32 = *(x_69);
-        let x_88 : f32 = *(x_71);
-        *(x_69) = x_88;
-        *(x_71) = x_87;
-      }
-
-      continuing {
-        x_60 = (x_59 + 1);
-        x_59_phi = x_60;
-      }
-    }
-
-    continuing {
-      x_53 = (x_52 + 1);
-      x_52_phi = x_53;
-    }
-  }
-  let x_90 : f32 = gl_FragCoord.x;
-  let x_92 : f32 = x_6.resolution.x;
-  if ((x_90 < (x_92 * 0.5))) {
-    let x_99 : f32 = data[0];
-    let x_102 : f32 = data[5];
-    let x_105 : f32 = data[9];
-    x_GLF_color = vec4<f32>((x_99 * 0.100000001), (x_102 * 0.100000001), (x_105 * 0.100000001), 1.0);
-  } else {
-    let x_109 : f32 = data[5];
-    let x_112 : f32 = data[9];
-    let x_115 : f32 = data[0];
-    x_GLF_color = vec4<f32>((x_109 * 0.100000001), (x_112 * 0.100000001), (x_115 * 0.100000001), 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.hlsl
deleted file mode 100644
index 4efca13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,123 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[10] = (float[10])0;
-  int x_41_phi = 0;
-  int x_53_phi = 0;
-  x_41_phi = 0;
-  while (true) {
-    int x_42 = 0;
-    const int x_41 = x_41_phi;
-    if ((x_41 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const float x_49 = asfloat(x_9[0].y);
-      data[x_41] = (float((10 - x_41)) * x_49);
-      x_42 = (x_41 + 1);
-      x_41_phi = x_42;
-    }
-  }
-  x_53_phi = 0;
-  while (true) {
-    int x_54 = 0;
-    int x_60_phi = 0;
-    const int x_53 = x_53_phi;
-    if ((x_53 < 9)) {
-    } else {
-      break;
-    }
-    x_60_phi = 0;
-    while (true) {
-      bool x_83 = false;
-      bool x_84 = false;
-      int x_61 = 0;
-      bool x_85_phi = false;
-      const int x_60 = x_60_phi;
-      if ((x_60 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_60 < (x_53 + 1))) {
-        {
-          x_61 = (x_60 + 1);
-          x_60_phi = x_61;
-        }
-        continue;
-      }
-      const int x_70_save = x_53;
-      const float x_71 = data[x_70_save];
-      const int x_72_save = x_60;
-      const float x_73 = data[x_72_save];
-      const float x_75 = gl_FragCoord.y;
-      const float x_77 = asfloat(x_6[0].y);
-      if ((x_75 < (x_77 * 0.5f))) {
-        x_83 = (x_71 > x_73);
-        x_85_phi = x_83;
-      } else {
-        x_84 = (x_71 < x_73);
-        x_85_phi = x_84;
-      }
-      if (x_85_phi) {
-        const float x_88 = data[x_70_save];
-        const float x_89 = data[x_72_save];
-        data[x_70_save] = x_89;
-        data[x_72_save] = x_88;
-      }
-      {
-        x_61 = (x_60 + 1);
-        x_60_phi = x_61;
-      }
-    }
-    {
-      x_54 = (x_53 + 1);
-      x_53_phi = x_54;
-    }
-  }
-  const float x_91 = gl_FragCoord.x;
-  const float x_93 = asfloat(x_6[0].x);
-  if ((x_91 < (x_93 * 0.5f))) {
-    const float x_100 = data[0];
-    const float x_103 = data[5];
-    const float x_106 = data[9];
-    x_GLF_color = float4((x_100 * 0.100000001f), (x_103 * 0.100000001f), (x_106 * 0.100000001f), 1.0f);
-  } else {
-    const float x_110 = data[5];
-    const float x_113 = data[9];
-    const float x_116 = data[0];
-    x_GLF_color = float4((x_110 * 0.100000001f), (x_113 * 0.100000001f), (x_116 * 0.100000001f), 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.msl
deleted file mode 100644
index e7d323c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.msl
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, constant buf1& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  tint_array_wrapper data = {};
-  int x_41_phi = 0;
-  int x_53_phi = 0;
-  x_41_phi = 0;
-  while (true) {
-    int x_42 = 0;
-    int const x_41 = x_41_phi;
-    if ((x_41 < 10)) {
-    } else {
-      break;
-    }
-    {
-      float const x_49 = x_9.injectionSwitch.y;
-      data.arr[x_41] = (float(as_type<int>((as_type<uint>(10) - as_type<uint>(x_41)))) * x_49);
-      x_42 = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
-      x_41_phi = x_42;
-    }
-  }
-  x_53_phi = 0;
-  while (true) {
-    int x_54 = 0;
-    int x_60_phi = 0;
-    int const x_53 = x_53_phi;
-    if ((x_53 < 9)) {
-    } else {
-      break;
-    }
-    x_60_phi = 0;
-    while (true) {
-      bool x_83 = false;
-      bool x_84 = false;
-      int x_61 = 0;
-      bool x_85_phi = false;
-      int const x_60 = x_60_phi;
-      if ((x_60 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_60 < as_type<int>((as_type<uint>(x_53) + as_type<uint>(1))))) {
-        {
-          x_61 = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-          x_60_phi = x_61;
-        }
-        continue;
-      }
-      int const x_70_save = x_53;
-      float const x_71 = data.arr[x_70_save];
-      int const x_72_save = x_60;
-      float const x_73 = data.arr[x_72_save];
-      float const x_75 = (*(tint_symbol_3)).y;
-      float const x_77 = x_6.resolution.y;
-      if ((x_75 < (x_77 * 0.5f))) {
-        x_83 = (x_71 > x_73);
-        x_85_phi = x_83;
-      } else {
-        x_84 = (x_71 < x_73);
-        x_85_phi = x_84;
-      }
-      bool const x_85 = x_85_phi;
-      if (x_85) {
-        float const x_88 = data.arr[x_70_save];
-        float const x_89 = data.arr[x_72_save];
-        data.arr[x_70_save] = x_89;
-        data.arr[x_72_save] = x_88;
-      }
-      {
-        x_61 = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-        x_60_phi = x_61;
-      }
-    }
-    {
-      x_54 = as_type<int>((as_type<uint>(x_53) + as_type<uint>(1)));
-      x_53_phi = x_54;
-    }
-  }
-  float const x_91 = (*(tint_symbol_3)).x;
-  float const x_93 = x_6.resolution.x;
-  if ((x_91 < (x_93 * 0.5f))) {
-    float const x_100 = data.arr[0];
-    float const x_103 = data.arr[5];
-    float const x_106 = data.arr[9];
-    *(tint_symbol_4) = float4((x_100 * 0.100000001f), (x_103 * 0.100000001f), (x_106 * 0.100000001f), 1.0f);
-  } else {
-    float const x_110 = data.arr[5];
-    float const x_113 = data.arr[9];
-    float const x_116 = data.arr[0];
-    *(tint_symbol_4) = float4((x_110 * 0.100000001f), (x_113 * 0.100000001f), (x_116 * 0.100000001f), 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, constant buf1& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]], constant buf1& x_6 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.spvasm
deleted file mode 100644
index 71cd98b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,282 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 167
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %x_41_phi "x_41_phi"
-               OpName %x_53_phi "x_53_phi"
-               OpName %x_42 "x_42"
-               OpName %x_54 "x_54"
-               OpName %x_60_phi "x_60_phi"
-               OpName %x_83 "x_83"
-               OpName %x_84 "x_84"
-               OpName %x_61 "x_61"
-               OpName %x_85_phi "x_85_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %27 = OpConstantNull %_arr_float_uint_10
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %77 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_0_5 = OpConstant %float 0.5
-      %int_5 = OpConstant %int 5
-%float_0_100000001 = OpConstant %float 0.100000001
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %154 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %27
-   %x_41_phi = OpVariable %_ptr_Function_int Function %31
-   %x_53_phi = OpVariable %_ptr_Function_int Function %31
-       %x_42 = OpVariable %_ptr_Function_int Function %31
-       %x_54 = OpVariable %_ptr_Function_int Function %31
-   %x_60_phi = OpVariable %_ptr_Function_int Function %31
-       %x_83 = OpVariable %_ptr_Function_bool Function %77
-       %x_84 = OpVariable %_ptr_Function_bool Function %77
-       %x_61 = OpVariable %_ptr_Function_int Function %31
-   %x_85_phi = OpVariable %_ptr_Function_bool Function %77
-               OpStore %x_41_phi %int_0
-               OpBranch %34
-         %34 = OpLabel
-               OpLoopMerge %35 %36 None
-               OpBranch %37
-         %37 = OpLabel
-         %39 = OpLoad %int %x_41_phi
-         %41 = OpSLessThan %bool %39 %int_10
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %35
-         %43 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Function_float %data %39
-         %54 = OpISub %int %int_10 %39
-         %53 = OpConvertSToF %float %54
-         %55 = OpFMul %float %53 %50
-               OpStore %52 %55
-         %57 = OpIAdd %int %39 %int_1
-               OpStore %x_42 %57
-         %58 = OpLoad %int %x_42
-               OpStore %x_41_phi %58
-               OpBranch %34
-         %35 = OpLabel
-               OpStore %x_53_phi %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %65 = OpLoad %int %x_53_phi
-         %67 = OpSLessThan %bool %65 %int_9
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %60
-         %68 = OpLabel
-               OpStore %x_60_phi %int_0
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %81 = OpLoad %int %x_60_phi
-         %82 = OpSLessThan %bool %81 %int_10
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %72
-         %83 = OpLabel
-         %86 = OpIAdd %int %65 %int_1
-         %87 = OpSLessThan %bool %81 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpBranch %73
-         %88 = OpLabel
-         %90 = OpAccessChain %_ptr_Function_float %data %65
-         %91 = OpLoad %float %90
-         %92 = OpAccessChain %_ptr_Function_float %data %81
-         %93 = OpLoad %float %92
-         %95 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %96 = OpLoad %float %95
-         %97 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpFMul %float %98 %float_0_5
-        %101 = OpFOrdLessThan %bool %96 %100
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-        %105 = OpFOrdGreaterThan %bool %91 %93
-               OpStore %x_83 %105
-        %106 = OpLoad %bool %x_83
-               OpStore %x_85_phi %106
-               OpBranch %102
-        %104 = OpLabel
-        %107 = OpFOrdLessThan %bool %91 %93
-               OpStore %x_84 %107
-        %108 = OpLoad %bool %x_84
-               OpStore %x_85_phi %108
-               OpBranch %102
-        %102 = OpLabel
-        %109 = OpLoad %bool %x_85_phi
-               OpSelectionMerge %110 None
-               OpBranchConditional %109 %111 %110
-        %111 = OpLabel
-        %112 = OpAccessChain %_ptr_Function_float %data %65
-        %113 = OpLoad %float %112
-        %114 = OpAccessChain %_ptr_Function_float %data %81
-        %115 = OpLoad %float %114
-        %116 = OpAccessChain %_ptr_Function_float %data %65
-               OpStore %116 %115
-        %117 = OpAccessChain %_ptr_Function_float %data %81
-               OpStore %117 %113
-               OpBranch %110
-        %110 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-        %118 = OpIAdd %int %81 %int_1
-               OpStore %x_61 %118
-        %119 = OpLoad %int %x_61
-               OpStore %x_60_phi %119
-               OpBranch %71
-         %72 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-        %120 = OpIAdd %int %65 %int_1
-               OpStore %x_54 %120
-        %121 = OpLoad %int %x_54
-               OpStore %x_53_phi %121
-               OpBranch %59
-         %60 = OpLabel
-        %122 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %125 = OpLoad %float %124
-        %126 = OpFMul %float %125 %float_0_5
-        %127 = OpFOrdLessThan %bool %123 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-        %131 = OpAccessChain %_ptr_Function_float %data %int_0
-        %132 = OpLoad %float %131
-        %134 = OpAccessChain %_ptr_Function_float %data %int_5
-        %135 = OpLoad %float %134
-        %136 = OpAccessChain %_ptr_Function_float %data %int_9
-        %137 = OpLoad %float %136
-        %139 = OpFMul %float %132 %float_0_100000001
-        %140 = OpFMul %float %135 %float_0_100000001
-        %141 = OpFMul %float %137 %float_0_100000001
-        %143 = OpCompositeConstruct %v4float %139 %140 %141 %float_1
-               OpStore %x_GLF_color %143
-               OpBranch %128
-        %130 = OpLabel
-        %144 = OpAccessChain %_ptr_Function_float %data %int_5
-        %145 = OpLoad %float %144
-        %146 = OpAccessChain %_ptr_Function_float %data %int_9
-        %147 = OpLoad %float %146
-        %148 = OpAccessChain %_ptr_Function_float %data %int_0
-        %149 = OpLoad %float %148
-        %150 = OpFMul %float %145 %float_0_100000001
-        %151 = OpFMul %float %147 %float_0_100000001
-        %152 = OpFMul %float %149 %float_0_100000001
-        %153 = OpCompositeConstruct %v4float %150 %151 %152 %float_1
-               OpStore %x_GLF_color %153
-               OpBranch %128
-        %128 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %154
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %158 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %159 = OpFunctionCall %void %main_1
-        %160 = OpLoad %v4float %x_GLF_color
-        %161 = OpCompositeConstruct %main_out %160
-               OpReturnValue %161
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %163 = OpLabel
-        %165 = OpLoad %v4float %gl_FragCoord_param_1
-        %164 = OpFunctionCall %main_out %main_inner %165
-        %166 = OpCompositeExtract %v4float %164 0
-               OpStore %x_GLF_color_1_1 %166
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.wgsl
deleted file mode 100644
index aac8d57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,120 +0,0 @@
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 10>;
-  var x_41_phi : i32;
-  var x_53_phi : i32;
-  x_41_phi = 0;
-  loop {
-    var x_42 : i32;
-    let x_41 : i32 = x_41_phi;
-    if ((x_41 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_49 : f32 = x_9.injectionSwitch.y;
-      data[x_41] = (f32((10 - x_41)) * x_49);
-      x_42 = (x_41 + 1);
-      x_41_phi = x_42;
-    }
-  }
-  x_53_phi = 0;
-  loop {
-    var x_54 : i32;
-    var x_60_phi : i32;
-    let x_53 : i32 = x_53_phi;
-    if ((x_53 < 9)) {
-    } else {
-      break;
-    }
-    x_60_phi = 0;
-    loop {
-      var x_83 : bool;
-      var x_84 : bool;
-      var x_61 : i32;
-      var x_85_phi : bool;
-      let x_60 : i32 = x_60_phi;
-      if ((x_60 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_60 < (x_53 + 1))) {
-        continue;
-      }
-      let x_70 : ptr<function, f32> = &(data[x_53]);
-      let x_71 : f32 = *(x_70);
-      let x_72 : ptr<function, f32> = &(data[x_60]);
-      let x_73 : f32 = *(x_72);
-      let x_75 : f32 = gl_FragCoord.y;
-      let x_77 : f32 = x_6.resolution.y;
-      if ((x_75 < (x_77 * 0.5))) {
-        x_83 = (x_71 > x_73);
-        x_85_phi = x_83;
-      } else {
-        x_84 = (x_71 < x_73);
-        x_85_phi = x_84;
-      }
-      let x_85 : bool = x_85_phi;
-      if (x_85) {
-        let x_88 : f32 = *(x_70);
-        let x_89 : f32 = *(x_72);
-        *(x_70) = x_89;
-        *(x_72) = x_88;
-      }
-
-      continuing {
-        x_61 = (x_60 + 1);
-        x_60_phi = x_61;
-      }
-    }
-
-    continuing {
-      x_54 = (x_53 + 1);
-      x_53_phi = x_54;
-    }
-  }
-  let x_91 : f32 = gl_FragCoord.x;
-  let x_93 : f32 = x_6.resolution.x;
-  if ((x_91 < (x_93 * 0.5))) {
-    let x_100 : f32 = data[0];
-    let x_103 : f32 = data[5];
-    let x_106 : f32 = data[9];
-    x_GLF_color = vec4<f32>((x_100 * 0.100000001), (x_103 * 0.100000001), (x_106 * 0.100000001), 1.0);
-  } else {
-    let x_110 : f32 = data[5];
-    let x_113 : f32 = data[9];
-    let x_116 : f32 = data[0];
-    x_GLF_color = vec4<f32>((x_110 * 0.100000001), (x_113 * 0.100000001), (x_116 * 0.100000001), 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.hlsl
deleted file mode 100644
index 4efca13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,123 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float data[10] = (float[10])0;
-  int x_41_phi = 0;
-  int x_53_phi = 0;
-  x_41_phi = 0;
-  while (true) {
-    int x_42 = 0;
-    const int x_41 = x_41_phi;
-    if ((x_41 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const float x_49 = asfloat(x_9[0].y);
-      data[x_41] = (float((10 - x_41)) * x_49);
-      x_42 = (x_41 + 1);
-      x_41_phi = x_42;
-    }
-  }
-  x_53_phi = 0;
-  while (true) {
-    int x_54 = 0;
-    int x_60_phi = 0;
-    const int x_53 = x_53_phi;
-    if ((x_53 < 9)) {
-    } else {
-      break;
-    }
-    x_60_phi = 0;
-    while (true) {
-      bool x_83 = false;
-      bool x_84 = false;
-      int x_61 = 0;
-      bool x_85_phi = false;
-      const int x_60 = x_60_phi;
-      if ((x_60 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_60 < (x_53 + 1))) {
-        {
-          x_61 = (x_60 + 1);
-          x_60_phi = x_61;
-        }
-        continue;
-      }
-      const int x_70_save = x_53;
-      const float x_71 = data[x_70_save];
-      const int x_72_save = x_60;
-      const float x_73 = data[x_72_save];
-      const float x_75 = gl_FragCoord.y;
-      const float x_77 = asfloat(x_6[0].y);
-      if ((x_75 < (x_77 * 0.5f))) {
-        x_83 = (x_71 > x_73);
-        x_85_phi = x_83;
-      } else {
-        x_84 = (x_71 < x_73);
-        x_85_phi = x_84;
-      }
-      if (x_85_phi) {
-        const float x_88 = data[x_70_save];
-        const float x_89 = data[x_72_save];
-        data[x_70_save] = x_89;
-        data[x_72_save] = x_88;
-      }
-      {
-        x_61 = (x_60 + 1);
-        x_60_phi = x_61;
-      }
-    }
-    {
-      x_54 = (x_53 + 1);
-      x_53_phi = x_54;
-    }
-  }
-  const float x_91 = gl_FragCoord.x;
-  const float x_93 = asfloat(x_6[0].x);
-  if ((x_91 < (x_93 * 0.5f))) {
-    const float x_100 = data[0];
-    const float x_103 = data[5];
-    const float x_106 = data[9];
-    x_GLF_color = float4((x_100 * 0.100000001f), (x_103 * 0.100000001f), (x_106 * 0.100000001f), 1.0f);
-  } else {
-    const float x_110 = data[5];
-    const float x_113 = data[9];
-    const float x_116 = data[0];
-    x_GLF_color = float4((x_110 * 0.100000001f), (x_113 * 0.100000001f), (x_116 * 0.100000001f), 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.msl
deleted file mode 100644
index e7d323c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.msl
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, constant buf1& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  tint_array_wrapper data = {};
-  int x_41_phi = 0;
-  int x_53_phi = 0;
-  x_41_phi = 0;
-  while (true) {
-    int x_42 = 0;
-    int const x_41 = x_41_phi;
-    if ((x_41 < 10)) {
-    } else {
-      break;
-    }
-    {
-      float const x_49 = x_9.injectionSwitch.y;
-      data.arr[x_41] = (float(as_type<int>((as_type<uint>(10) - as_type<uint>(x_41)))) * x_49);
-      x_42 = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
-      x_41_phi = x_42;
-    }
-  }
-  x_53_phi = 0;
-  while (true) {
-    int x_54 = 0;
-    int x_60_phi = 0;
-    int const x_53 = x_53_phi;
-    if ((x_53 < 9)) {
-    } else {
-      break;
-    }
-    x_60_phi = 0;
-    while (true) {
-      bool x_83 = false;
-      bool x_84 = false;
-      int x_61 = 0;
-      bool x_85_phi = false;
-      int const x_60 = x_60_phi;
-      if ((x_60 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_60 < as_type<int>((as_type<uint>(x_53) + as_type<uint>(1))))) {
-        {
-          x_61 = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-          x_60_phi = x_61;
-        }
-        continue;
-      }
-      int const x_70_save = x_53;
-      float const x_71 = data.arr[x_70_save];
-      int const x_72_save = x_60;
-      float const x_73 = data.arr[x_72_save];
-      float const x_75 = (*(tint_symbol_3)).y;
-      float const x_77 = x_6.resolution.y;
-      if ((x_75 < (x_77 * 0.5f))) {
-        x_83 = (x_71 > x_73);
-        x_85_phi = x_83;
-      } else {
-        x_84 = (x_71 < x_73);
-        x_85_phi = x_84;
-      }
-      bool const x_85 = x_85_phi;
-      if (x_85) {
-        float const x_88 = data.arr[x_70_save];
-        float const x_89 = data.arr[x_72_save];
-        data.arr[x_70_save] = x_89;
-        data.arr[x_72_save] = x_88;
-      }
-      {
-        x_61 = as_type<int>((as_type<uint>(x_60) + as_type<uint>(1)));
-        x_60_phi = x_61;
-      }
-    }
-    {
-      x_54 = as_type<int>((as_type<uint>(x_53) + as_type<uint>(1)));
-      x_53_phi = x_54;
-    }
-  }
-  float const x_91 = (*(tint_symbol_3)).x;
-  float const x_93 = x_6.resolution.x;
-  if ((x_91 < (x_93 * 0.5f))) {
-    float const x_100 = data.arr[0];
-    float const x_103 = data.arr[5];
-    float const x_106 = data.arr[9];
-    *(tint_symbol_4) = float4((x_100 * 0.100000001f), (x_103 * 0.100000001f), (x_106 * 0.100000001f), 1.0f);
-  } else {
-    float const x_110 = data.arr[5];
-    float const x_113 = data.arr[9];
-    float const x_116 = data.arr[0];
-    *(tint_symbol_4) = float4((x_110 * 0.100000001f), (x_113 * 0.100000001f), (x_116 * 0.100000001f), 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, constant buf1& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]], constant buf1& x_6 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.spvasm
deleted file mode 100644
index 71cd98b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,282 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 167
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %data "data"
-               OpName %x_41_phi "x_41_phi"
-               OpName %x_53_phi "x_53_phi"
-               OpName %x_42 "x_42"
-               OpName %x_54 "x_54"
-               OpName %x_60_phi "x_60_phi"
-               OpName %x_83 "x_83"
-               OpName %x_84 "x_84"
-               OpName %x_61 "x_61"
-               OpName %x_85_phi "x_85_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %27 = OpConstantNull %_arr_float_uint_10
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %31 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %77 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_0_5 = OpConstant %float 0.5
-      %int_5 = OpConstant %int 5
-%float_0_100000001 = OpConstant %float 0.100000001
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %154 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %27
-   %x_41_phi = OpVariable %_ptr_Function_int Function %31
-   %x_53_phi = OpVariable %_ptr_Function_int Function %31
-       %x_42 = OpVariable %_ptr_Function_int Function %31
-       %x_54 = OpVariable %_ptr_Function_int Function %31
-   %x_60_phi = OpVariable %_ptr_Function_int Function %31
-       %x_83 = OpVariable %_ptr_Function_bool Function %77
-       %x_84 = OpVariable %_ptr_Function_bool Function %77
-       %x_61 = OpVariable %_ptr_Function_int Function %31
-   %x_85_phi = OpVariable %_ptr_Function_bool Function %77
-               OpStore %x_41_phi %int_0
-               OpBranch %34
-         %34 = OpLabel
-               OpLoopMerge %35 %36 None
-               OpBranch %37
-         %37 = OpLabel
-         %39 = OpLoad %int %x_41_phi
-         %41 = OpSLessThan %bool %39 %int_10
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %35
-         %43 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-         %49 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Function_float %data %39
-         %54 = OpISub %int %int_10 %39
-         %53 = OpConvertSToF %float %54
-         %55 = OpFMul %float %53 %50
-               OpStore %52 %55
-         %57 = OpIAdd %int %39 %int_1
-               OpStore %x_42 %57
-         %58 = OpLoad %int %x_42
-               OpStore %x_41_phi %58
-               OpBranch %34
-         %35 = OpLabel
-               OpStore %x_53_phi %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %65 = OpLoad %int %x_53_phi
-         %67 = OpSLessThan %bool %65 %int_9
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-               OpBranch %68
-         %70 = OpLabel
-               OpBranch %60
-         %68 = OpLabel
-               OpStore %x_60_phi %int_0
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %81 = OpLoad %int %x_60_phi
-         %82 = OpSLessThan %bool %81 %int_10
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %85
-         %84 = OpLabel
-               OpBranch %83
-         %85 = OpLabel
-               OpBranch %72
-         %83 = OpLabel
-         %86 = OpIAdd %int %65 %int_1
-         %87 = OpSLessThan %bool %81 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpBranch %73
-         %88 = OpLabel
-         %90 = OpAccessChain %_ptr_Function_float %data %65
-         %91 = OpLoad %float %90
-         %92 = OpAccessChain %_ptr_Function_float %data %81
-         %93 = OpLoad %float %92
-         %95 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %96 = OpLoad %float %95
-         %97 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpFMul %float %98 %float_0_5
-        %101 = OpFOrdLessThan %bool %96 %100
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-        %105 = OpFOrdGreaterThan %bool %91 %93
-               OpStore %x_83 %105
-        %106 = OpLoad %bool %x_83
-               OpStore %x_85_phi %106
-               OpBranch %102
-        %104 = OpLabel
-        %107 = OpFOrdLessThan %bool %91 %93
-               OpStore %x_84 %107
-        %108 = OpLoad %bool %x_84
-               OpStore %x_85_phi %108
-               OpBranch %102
-        %102 = OpLabel
-        %109 = OpLoad %bool %x_85_phi
-               OpSelectionMerge %110 None
-               OpBranchConditional %109 %111 %110
-        %111 = OpLabel
-        %112 = OpAccessChain %_ptr_Function_float %data %65
-        %113 = OpLoad %float %112
-        %114 = OpAccessChain %_ptr_Function_float %data %81
-        %115 = OpLoad %float %114
-        %116 = OpAccessChain %_ptr_Function_float %data %65
-               OpStore %116 %115
-        %117 = OpAccessChain %_ptr_Function_float %data %81
-               OpStore %117 %113
-               OpBranch %110
-        %110 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-        %118 = OpIAdd %int %81 %int_1
-               OpStore %x_61 %118
-        %119 = OpLoad %int %x_61
-               OpStore %x_60_phi %119
-               OpBranch %71
-         %72 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-        %120 = OpIAdd %int %65 %int_1
-               OpStore %x_54 %120
-        %121 = OpLoad %int %x_54
-               OpStore %x_53_phi %121
-               OpBranch %59
-         %60 = OpLabel
-        %122 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %125 = OpLoad %float %124
-        %126 = OpFMul %float %125 %float_0_5
-        %127 = OpFOrdLessThan %bool %123 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-        %131 = OpAccessChain %_ptr_Function_float %data %int_0
-        %132 = OpLoad %float %131
-        %134 = OpAccessChain %_ptr_Function_float %data %int_5
-        %135 = OpLoad %float %134
-        %136 = OpAccessChain %_ptr_Function_float %data %int_9
-        %137 = OpLoad %float %136
-        %139 = OpFMul %float %132 %float_0_100000001
-        %140 = OpFMul %float %135 %float_0_100000001
-        %141 = OpFMul %float %137 %float_0_100000001
-        %143 = OpCompositeConstruct %v4float %139 %140 %141 %float_1
-               OpStore %x_GLF_color %143
-               OpBranch %128
-        %130 = OpLabel
-        %144 = OpAccessChain %_ptr_Function_float %data %int_5
-        %145 = OpLoad %float %144
-        %146 = OpAccessChain %_ptr_Function_float %data %int_9
-        %147 = OpLoad %float %146
-        %148 = OpAccessChain %_ptr_Function_float %data %int_0
-        %149 = OpLoad %float %148
-        %150 = OpFMul %float %145 %float_0_100000001
-        %151 = OpFMul %float %147 %float_0_100000001
-        %152 = OpFMul %float %149 %float_0_100000001
-        %153 = OpCompositeConstruct %v4float %150 %151 %152 %float_1
-               OpStore %x_GLF_color %153
-               OpBranch %128
-        %128 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %154
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %158 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %159 = OpFunctionCall %void %main_1
-        %160 = OpLoad %v4float %x_GLF_color
-        %161 = OpCompositeConstruct %main_out %160
-               OpReturnValue %161
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %163 = OpLabel
-        %165 = OpLoad %v4float %gl_FragCoord_param_1
-        %164 = OpFunctionCall %main_out %main_inner %165
-        %166 = OpCompositeExtract %v4float %164 0
-               OpStore %x_GLF_color_1_1 %166
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.wgsl
deleted file mode 100644
index aac8d57..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block2/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,120 +0,0 @@
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var data : array<f32, 10>;
-  var x_41_phi : i32;
-  var x_53_phi : i32;
-  x_41_phi = 0;
-  loop {
-    var x_42 : i32;
-    let x_41 : i32 = x_41_phi;
-    if ((x_41 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_49 : f32 = x_9.injectionSwitch.y;
-      data[x_41] = (f32((10 - x_41)) * x_49);
-      x_42 = (x_41 + 1);
-      x_41_phi = x_42;
-    }
-  }
-  x_53_phi = 0;
-  loop {
-    var x_54 : i32;
-    var x_60_phi : i32;
-    let x_53 : i32 = x_53_phi;
-    if ((x_53 < 9)) {
-    } else {
-      break;
-    }
-    x_60_phi = 0;
-    loop {
-      var x_83 : bool;
-      var x_84 : bool;
-      var x_61 : i32;
-      var x_85_phi : bool;
-      let x_60 : i32 = x_60_phi;
-      if ((x_60 < 10)) {
-      } else {
-        break;
-      }
-      if ((x_60 < (x_53 + 1))) {
-        continue;
-      }
-      let x_70 : ptr<function, f32> = &(data[x_53]);
-      let x_71 : f32 = *(x_70);
-      let x_72 : ptr<function, f32> = &(data[x_60]);
-      let x_73 : f32 = *(x_72);
-      let x_75 : f32 = gl_FragCoord.y;
-      let x_77 : f32 = x_6.resolution.y;
-      if ((x_75 < (x_77 * 0.5))) {
-        x_83 = (x_71 > x_73);
-        x_85_phi = x_83;
-      } else {
-        x_84 = (x_71 < x_73);
-        x_85_phi = x_84;
-      }
-      let x_85 : bool = x_85_phi;
-      if (x_85) {
-        let x_88 : f32 = *(x_70);
-        let x_89 : f32 = *(x_72);
-        *(x_70) = x_89;
-        *(x_72) = x_88;
-      }
-
-      continuing {
-        x_61 = (x_60 + 1);
-        x_60_phi = x_61;
-      }
-    }
-
-    continuing {
-      x_54 = (x_53 + 1);
-      x_53_phi = x_54;
-    }
-  }
-  let x_91 : f32 = gl_FragCoord.x;
-  let x_93 : f32 = x_6.resolution.x;
-  if ((x_91 < (x_93 * 0.5))) {
-    let x_100 : f32 = data[0];
-    let x_103 : f32 = data[5];
-    let x_106 : f32 = data[9];
-    x_GLF_color = vec4<f32>((x_100 * 0.100000001), (x_103 * 0.100000001), (x_106 * 0.100000001), 1.0);
-  } else {
-    let x_110 : f32 = data[5];
-    let x_113 : f32 = data[9];
-    let x_116 : f32 = data[0];
-    x_GLF_color = vec4<f32>((x_110 * 0.100000001), (x_113 * 0.100000001), (x_116 * 0.100000001), 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.hlsl
deleted file mode 100644
index 088c51f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,272 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b1, space0) {
-  uint4 x_32[1];
-};
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_256 = from;
-  k = x_256;
-  const int x_257 = from;
-  i = x_257;
-  const int x_258 = mid;
-  j = (x_258 + 1);
-  while (true) {
-    const int x_264 = i;
-    const int x_265 = mid;
-    const int x_267 = j;
-    const int x_268 = to;
-    if (((x_264 <= x_265) & (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    const int x_274 = data[i];
-    const int x_277 = data[j];
-    if ((x_274 < x_277)) {
-      const int x_282 = k;
-      k = (x_282 + 1);
-      const int x_284 = i;
-      i = (x_284 + 1);
-      const int x_287 = data[x_284];
-      temp[x_282] = x_287;
-    } else {
-      const int x_289 = k;
-      k = (x_289 + 1);
-      const int x_291 = j;
-      j = (x_291 + 1);
-      const int x_294 = data[x_291];
-      temp[x_289] = x_294;
-    }
-  }
-  while (true) {
-    if (!((256.0f < 1.0f))) {
-    } else {
-      continue;
-    }
-    const int x_301 = i;
-    const int x_303 = i;
-    const int x_304 = mid;
-    if (((x_301 < 10) & (x_303 <= x_304))) {
-    } else {
-      break;
-    }
-    const int x_309 = k;
-    k = (x_309 + 1);
-    const int x_311 = i;
-    i = (x_311 + 1);
-    const int x_314 = data[x_311];
-    temp[x_309] = x_314;
-  }
-  const int x_316 = from;
-  i_1 = x_316;
-  while (true) {
-    const int x_321 = i_1;
-    const int x_322 = to;
-    if ((x_321 <= x_322)) {
-    } else {
-      break;
-    }
-    const int x_325 = i_1;
-    const int x_328 = temp[i_1];
-    data[x_325] = x_328;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_89 = asfloat(x_28[0].x);
-  i_3 = int(x_89);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_138 = j_1;
-      const int x_141 = data[j_1];
-      temp[x_138] = x_141;
-    }
-  }
-  mergeSort_();
-  const float x_147 = gl_FragCoord.y;
-  if ((int(x_147) < 30)) {
-    const int x_154 = data[0];
-    grey = (0.5f + (float(x_154) / 10.0f));
-  } else {
-    const float x_159 = gl_FragCoord.y;
-    if ((int(x_159) < 60)) {
-      const int x_166 = data[1];
-      grey = (0.5f + (float(x_166) / 10.0f));
-    } else {
-      const float x_171 = gl_FragCoord.y;
-      if ((int(x_171) < 90)) {
-        const int x_178 = data[2];
-        grey = (0.5f + (float(x_178) / 10.0f));
-      } else {
-        const float x_183 = gl_FragCoord.y;
-        if ((int(x_183) < 120)) {
-          const int x_190 = data[3];
-          grey = (0.5f + (float(x_190) / 10.0f));
-        } else {
-          const float x_195 = gl_FragCoord.y;
-          if ((int(x_195) < 150)) {
-            discard;
-          } else {
-            const float x_202 = gl_FragCoord.y;
-            if ((int(x_202) < 180)) {
-              const int x_209 = data[5];
-              grey = (0.5f + (float(x_209) / 10.0f));
-            } else {
-              const float x_214 = gl_FragCoord.y;
-              if ((int(x_214) < 210)) {
-                const int x_221 = data[6];
-                grey = (0.5f + (float(x_221) / 10.0f));
-              } else {
-                const float x_226 = gl_FragCoord.y;
-                if ((int(x_226) < 240)) {
-                  const int x_233 = data[7];
-                  grey = (0.5f + (float(x_233) / 10.0f));
-                } else {
-                  const float x_238 = gl_FragCoord.y;
-                  if ((int(x_238) < 270)) {
-                    const int x_245 = data[8];
-                    grey = (0.5f + (float(x_245) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_249 = grey;
-  const float3 x_250 = float3(x_249, x_249, x_249);
-  x_GLF_color = float4(x_250.x, x_250.y, x_250.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.msl
deleted file mode 100644
index 76b8e46..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.msl
+++ /dev/null
@@ -1,327 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_256 = *(from);
-  k = x_256;
-  int const x_257 = *(from);
-  i = x_257;
-  int const x_258 = *(mid);
-  j = as_type<int>((as_type<uint>(x_258) + as_type<uint>(1)));
-  while (true) {
-    int const x_264 = i;
-    int const x_265 = *(mid);
-    int const x_267 = j;
-    int const x_268 = *(to);
-    if (((x_264 <= x_265) & (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    int const x_272 = i;
-    int const x_274 = (*(tint_symbol_3)).arr[x_272];
-    int const x_275 = j;
-    int const x_277 = (*(tint_symbol_3)).arr[x_275];
-    if ((x_274 < x_277)) {
-      int const x_282 = k;
-      k = as_type<int>((as_type<uint>(x_282) + as_type<uint>(1)));
-      int const x_284 = i;
-      i = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
-      int const x_287 = (*(tint_symbol_3)).arr[x_284];
-      (*(tint_symbol_4)).arr[x_282] = x_287;
-    } else {
-      int const x_289 = k;
-      k = as_type<int>((as_type<uint>(x_289) + as_type<uint>(1)));
-      int const x_291 = j;
-      j = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
-      int const x_294 = (*(tint_symbol_3)).arr[x_291];
-      (*(tint_symbol_4)).arr[x_289] = x_294;
-    }
-  }
-  while (true) {
-    if (!((256.0f < 1.0f))) {
-    } else {
-      continue;
-    }
-    int const x_301 = i;
-    int const x_303 = i;
-    int const x_304 = *(mid);
-    if (((x_301 < 10) & (x_303 <= x_304))) {
-    } else {
-      break;
-    }
-    int const x_309 = k;
-    k = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
-    int const x_311 = i;
-    i = as_type<int>((as_type<uint>(x_311) + as_type<uint>(1)));
-    int const x_314 = (*(tint_symbol_3)).arr[x_311];
-    (*(tint_symbol_4)).arr[x_309] = x_314;
-  }
-  int const x_316 = *(from);
-  i_1 = x_316;
-  while (true) {
-    int const x_321 = i_1;
-    int const x_322 = *(to);
-    if ((x_321 <= x_322)) {
-    } else {
-      break;
-    }
-    int const x_325 = i_1;
-    int const x_326 = i_1;
-    int const x_328 = (*(tint_symbol_4)).arr[x_326];
-    (*(tint_symbol_3)).arr[x_325] = x_328;
-    {
-      int const x_330 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_337 = m;
-    int const x_338 = high;
-    if ((x_337 <= x_338)) {
-    } else {
-      break;
-    }
-    int const x_341 = low;
-    i_2 = x_341;
-    while (true) {
-      int const x_346 = i_2;
-      int const x_347 = high;
-      if ((x_346 < x_347)) {
-      } else {
-        break;
-      }
-      int const x_350 = i_2;
-      from_1 = x_350;
-      int const x_351 = i_2;
-      int const x_352 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_351) + as_type<uint>(x_352)))) - as_type<uint>(1)));
-      int const x_355 = i_2;
-      int const x_356 = m;
-      int const x_360 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_356))))))) - as_type<uint>(1))), x_360);
-      int const x_362 = from_1;
-      param = x_362;
-      int const x_363 = mid_1;
-      param_1 = x_363;
-      int const x_364 = to_1;
-      param_2 = x_364;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_366 = m;
-        int const x_368 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_368) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_366))))));
-      }
-    }
-    {
-      int const x_370 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_370)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_89 = x_28.injectionSwitch.x;
-  i_3 = int(x_89);
-  while (true) {
-    int const x_95 = i_3;
-    switch(x_95) {
-      case 9: {
-        int const x_125 = i_3;
-        (*(tint_symbol_7)).arr[x_125] = -5;
-        break;
-      }
-      case 8: {
-        int const x_123 = i_3;
-        (*(tint_symbol_7)).arr[x_123] = -4;
-        break;
-      }
-      case 7: {
-        int const x_121 = i_3;
-        (*(tint_symbol_7)).arr[x_121] = -3;
-        break;
-      }
-      case 6: {
-        int const x_119 = i_3;
-        (*(tint_symbol_7)).arr[x_119] = -2;
-        break;
-      }
-      case 5: {
-        int const x_117 = i_3;
-        (*(tint_symbol_7)).arr[x_117] = -1;
-        break;
-      }
-      case 4: {
-        int const x_115 = i_3;
-        (*(tint_symbol_7)).arr[x_115] = 0;
-        break;
-      }
-      case 3: {
-        int const x_113 = i_3;
-        (*(tint_symbol_7)).arr[x_113] = 1;
-        break;
-      }
-      case 2: {
-        int const x_111 = i_3;
-        (*(tint_symbol_7)).arr[x_111] = 2;
-        break;
-      }
-      case 1: {
-        int const x_109 = i_3;
-        (*(tint_symbol_7)).arr[x_109] = 3;
-        break;
-      }
-      case 0: {
-        int const x_107 = i_3;
-        (*(tint_symbol_7)).arr[x_107] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_127 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
-    {
-      int const x_129 = i_3;
-      if ((x_129 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_135 = j_1;
-    if ((x_135 < 10)) {
-    } else {
-      break;
-    }
-    int const x_138 = j_1;
-    int const x_139 = j_1;
-    int const x_141 = (*(tint_symbol_7)).arr[x_139];
-    (*(tint_symbol_8)).arr[x_138] = x_141;
-    {
-      int const x_143 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_147 = (*(tint_symbol_9)).y;
-  if ((int(x_147) < 30)) {
-    int const x_154 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_154) / 10.0f));
-  } else {
-    float const x_159 = (*(tint_symbol_9)).y;
-    if ((int(x_159) < 60)) {
-      int const x_166 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_166) / 10.0f));
-    } else {
-      float const x_171 = (*(tint_symbol_9)).y;
-      if ((int(x_171) < 90)) {
-        int const x_178 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_178) / 10.0f));
-      } else {
-        float const x_183 = (*(tint_symbol_9)).y;
-        if ((int(x_183) < 120)) {
-          int const x_190 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_190) / 10.0f));
-        } else {
-          float const x_195 = (*(tint_symbol_9)).y;
-          if ((int(x_195) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_202 = (*(tint_symbol_9)).y;
-            if ((int(x_202) < 180)) {
-              int const x_209 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_209) / 10.0f));
-            } else {
-              float const x_214 = (*(tint_symbol_9)).y;
-              if ((int(x_214) < 210)) {
-                int const x_221 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_221) / 10.0f));
-              } else {
-                float const x_226 = (*(tint_symbol_9)).y;
-                if ((int(x_226) < 240)) {
-                  int const x_233 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_233) / 10.0f));
-                } else {
-                  float const x_238 = (*(tint_symbol_9)).y;
-                  if ((int(x_238) < 270)) {
-                    int const x_245 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_245) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_249 = grey;
-  float3 const x_250 = float3(x_249, x_249, x_249);
-  *(tint_symbol_10) = float4(x_250.x, x_250.y, x_250.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.spvasm
deleted file mode 100644
index 4202ee1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,648 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 418
-; Schema: 0
-               OpCapability Shader
-        %183 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_32 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %35 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-  %float_256 = OpConstant %float 256
-    %float_1 = OpConstant %float 1
-     %int_10 = OpConstant %int 10
-        %138 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %207 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %405 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %26
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %33 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %35
-          %i = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-        %i_1 = OpVariable %_ptr_Function_int Function %35
-         %40 = OpLoad %int %from
-               OpStore %k %40
-         %42 = OpLoad %int %from
-               OpStore %i %42
-         %44 = OpLoad %int %mid
-         %46 = OpIAdd %int %44 %int_1
-               OpStore %j %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %int %mid
-         %54 = OpLoad %int %j
-         %56 = OpLoad %int %to
-         %57 = OpSLessThanEqual %bool %51 %53
-         %59 = OpSLessThanEqual %bool %54 %56
-         %60 = OpLogicalAnd %bool %57 %59
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %48
-         %61 = OpLabel
-         %64 = OpLoad %int %i
-         %66 = OpAccessChain %_ptr_Private_int %data %64
-         %67 = OpLoad %int %66
-         %68 = OpLoad %int %j
-         %69 = OpAccessChain %_ptr_Private_int %data %68
-         %70 = OpLoad %int %69
-         %71 = OpSLessThan %bool %67 %70
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-         %75 = OpLoad %int %k
-         %76 = OpIAdd %int %75 %int_1
-               OpStore %k %76
-         %77 = OpLoad %int %i
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %i %78
-         %79 = OpAccessChain %_ptr_Private_int %data %77
-         %80 = OpLoad %int %79
-         %81 = OpAccessChain %_ptr_Private_int %temp %75
-               OpStore %81 %80
-               OpBranch %72
-         %74 = OpLabel
-         %82 = OpLoad %int %k
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %k %83
-         %84 = OpLoad %int %j
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %j %85
-         %86 = OpAccessChain %_ptr_Private_int %data %84
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Private_int %temp %82
-               OpStore %88 %87
-               OpBranch %72
-         %72 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %89
-         %89 = OpLabel
-               OpLoopMerge %90 %91 None
-               OpBranch %92
-         %92 = OpLabel
-         %96 = OpFOrdLessThan %bool %float_256 %float_1
-         %93 = OpLogicalNot %bool %96
-               OpSelectionMerge %97 None
-               OpBranchConditional %93 %98 %99
-         %98 = OpLabel
-               OpBranch %97
-         %99 = OpLabel
-               OpBranch %91
-         %97 = OpLabel
-        %100 = OpLoad %int %i
-        %101 = OpLoad %int %i
-        %103 = OpLoad %int %mid
-        %105 = OpSLessThan %bool %100 %int_10
-        %106 = OpSLessThanEqual %bool %101 %103
-        %107 = OpLogicalAnd %bool %105 %106
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %110
-        %109 = OpLabel
-               OpBranch %108
-        %110 = OpLabel
-               OpBranch %90
-        %108 = OpLabel
-        %111 = OpLoad %int %k
-        %112 = OpIAdd %int %111 %int_1
-               OpStore %k %112
-        %113 = OpLoad %int %i
-        %114 = OpIAdd %int %113 %int_1
-               OpStore %i %114
-        %115 = OpAccessChain %_ptr_Private_int %data %113
-        %116 = OpLoad %int %115
-        %117 = OpAccessChain %_ptr_Private_int %temp %111
-               OpStore %117 %116
-               OpBranch %91
-         %91 = OpLabel
-               OpBranch %89
-         %90 = OpLabel
-        %119 = OpLoad %int %from
-               OpStore %i_1 %119
-               OpBranch %120
-        %120 = OpLabel
-               OpLoopMerge %121 %122 None
-               OpBranch %123
-        %123 = OpLabel
-        %124 = OpLoad %int %i_1
-        %126 = OpLoad %int %to
-        %127 = OpSLessThanEqual %bool %124 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %130
-        %129 = OpLabel
-               OpBranch %128
-        %130 = OpLabel
-               OpBranch %121
-        %128 = OpLabel
-        %131 = OpLoad %int %i_1
-        %132 = OpLoad %int %i_1
-        %133 = OpAccessChain %_ptr_Private_int %temp %132
-        %134 = OpLoad %int %133
-        %135 = OpAccessChain %_ptr_Private_int %data %131
-               OpStore %135 %134
-               OpBranch %122
-        %122 = OpLabel
-        %136 = OpLoad %int %i_1
-        %137 = OpIAdd %int %136 %int_1
-               OpStore %i_1 %137
-               OpBranch %120
-        %121 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %138
-        %140 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %35
-       %high = OpVariable %_ptr_Function_int Function %35
-          %m = OpVariable %_ptr_Function_int Function %35
-        %i_2 = OpVariable %_ptr_Function_int Function %35
-     %from_1 = OpVariable %_ptr_Function_int Function %35
-      %mid_1 = OpVariable %_ptr_Function_int Function %35
-       %to_1 = OpVariable %_ptr_Function_int Function %35
-      %param = OpVariable %_ptr_Function_int Function %35
-    %param_1 = OpVariable %_ptr_Function_int Function %35
-    %param_2 = OpVariable %_ptr_Function_int Function %35
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %153
-        %153 = OpLabel
-               OpLoopMerge %154 %155 None
-               OpBranch %156
-        %156 = OpLabel
-        %157 = OpLoad %int %m
-        %158 = OpLoad %int %high
-        %159 = OpSLessThanEqual %bool %157 %158
-               OpSelectionMerge %160 None
-               OpBranchConditional %159 %161 %162
-        %161 = OpLabel
-               OpBranch %160
-        %162 = OpLabel
-               OpBranch %154
-        %160 = OpLabel
-        %163 = OpLoad %int %low
-               OpStore %i_2 %163
-               OpBranch %164
-        %164 = OpLabel
-               OpLoopMerge %165 %166 None
-               OpBranch %167
-        %167 = OpLabel
-        %168 = OpLoad %int %i_2
-        %169 = OpLoad %int %high
-        %170 = OpSLessThan %bool %168 %169
-               OpSelectionMerge %171 None
-               OpBranchConditional %170 %172 %173
-        %172 = OpLabel
-               OpBranch %171
-        %173 = OpLabel
-               OpBranch %165
-        %171 = OpLabel
-        %174 = OpLoad %int %i_2
-               OpStore %from_1 %174
-        %175 = OpLoad %int %i_2
-        %176 = OpLoad %int %m
-        %177 = OpIAdd %int %175 %176
-        %178 = OpISub %int %177 %int_1
-               OpStore %mid_1 %178
-        %179 = OpLoad %int %i_2
-        %180 = OpLoad %int %m
-        %181 = OpLoad %int %high
-        %185 = OpIMul %int %int_2 %180
-        %186 = OpIAdd %int %179 %185
-        %187 = OpISub %int %186 %int_1
-        %182 = OpExtInst %int %183 SMin %187 %181
-               OpStore %to_1 %182
-        %188 = OpLoad %int %from_1
-               OpStore %param %188
-        %189 = OpLoad %int %mid_1
-               OpStore %param_1 %189
-        %190 = OpLoad %int %to_1
-               OpStore %param_2 %190
-        %191 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %166
-        %166 = OpLabel
-        %195 = OpLoad %int %m
-        %196 = OpLoad %int %i_2
-        %197 = OpIMul %int %int_2 %195
-        %198 = OpIAdd %int %196 %197
-               OpStore %i_2 %198
-               OpBranch %164
-        %165 = OpLabel
-               OpBranch %155
-        %155 = OpLabel
-        %199 = OpLoad %int %m
-        %200 = OpIMul %int %int_2 %199
-               OpStore %m %200
-               OpBranch %153
-        %154 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %138
-        %202 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %35
-        %j_1 = OpVariable %_ptr_Function_int Function %35
-       %grey = OpVariable %_ptr_Function_float Function %207
-        %210 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %211 = OpLoad %float %210
-        %212 = OpConvertFToS %int %211
-               OpStore %i_3 %212
-               OpBranch %213
-        %213 = OpLabel
-               OpLoopMerge %214 %215 None
-               OpBranch %216
-        %216 = OpLabel
-        %217 = OpLoad %int %i_3
-               OpSelectionMerge %218 None
-               OpSwitch %217 %219 9 %220 8 %221 7 %222 6 %223 5 %224 4 %225 3 %226 2 %227 1 %228 0 %229
-        %220 = OpLabel
-        %230 = OpLoad %int %i_3
-        %231 = OpAccessChain %_ptr_Private_int %data %230
-               OpStore %231 %int_n5
-               OpBranch %218
-        %221 = OpLabel
-        %233 = OpLoad %int %i_3
-        %234 = OpAccessChain %_ptr_Private_int %data %233
-               OpStore %234 %int_n4
-               OpBranch %218
-        %222 = OpLabel
-        %236 = OpLoad %int %i_3
-        %237 = OpAccessChain %_ptr_Private_int %data %236
-               OpStore %237 %int_n3
-               OpBranch %218
-        %223 = OpLabel
-        %239 = OpLoad %int %i_3
-        %240 = OpAccessChain %_ptr_Private_int %data %239
-               OpStore %240 %int_n2
-               OpBranch %218
-        %224 = OpLabel
-        %242 = OpLoad %int %i_3
-        %243 = OpAccessChain %_ptr_Private_int %data %242
-               OpStore %243 %int_n1
-               OpBranch %218
-        %225 = OpLabel
-        %245 = OpLoad %int %i_3
-        %246 = OpAccessChain %_ptr_Private_int %data %245
-               OpStore %246 %int_0
-               OpBranch %218
-        %226 = OpLabel
-        %247 = OpLoad %int %i_3
-        %248 = OpAccessChain %_ptr_Private_int %data %247
-               OpStore %248 %int_1
-               OpBranch %218
-        %227 = OpLabel
-        %249 = OpLoad %int %i_3
-        %250 = OpAccessChain %_ptr_Private_int %data %249
-               OpStore %250 %int_2
-               OpBranch %218
-        %228 = OpLabel
-        %251 = OpLoad %int %i_3
-        %252 = OpAccessChain %_ptr_Private_int %data %251
-               OpStore %252 %int_3
-               OpBranch %218
-        %229 = OpLabel
-        %254 = OpLoad %int %i_3
-        %255 = OpAccessChain %_ptr_Private_int %data %254
-               OpStore %255 %int_4
-               OpBranch %218
-        %219 = OpLabel
-               OpBranch %218
-        %218 = OpLabel
-        %257 = OpLoad %int %i_3
-        %258 = OpIAdd %int %257 %int_1
-               OpStore %i_3 %258
-               OpBranch %215
-        %215 = OpLabel
-        %259 = OpLoad %int %i_3
-        %260 = OpSLessThan %bool %259 %int_10
-               OpBranchConditional %260 %213 %214
-        %214 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %261
-        %261 = OpLabel
-               OpLoopMerge %262 %263 None
-               OpBranch %264
-        %264 = OpLabel
-        %265 = OpLoad %int %j_1
-        %266 = OpSLessThan %bool %265 %int_10
-               OpSelectionMerge %267 None
-               OpBranchConditional %266 %268 %269
-        %268 = OpLabel
-               OpBranch %267
-        %269 = OpLabel
-               OpBranch %262
-        %267 = OpLabel
-        %270 = OpLoad %int %j_1
-        %271 = OpLoad %int %j_1
-        %272 = OpAccessChain %_ptr_Private_int %data %271
-        %273 = OpLoad %int %272
-        %274 = OpAccessChain %_ptr_Private_int %temp %270
-               OpStore %274 %273
-               OpBranch %263
-        %263 = OpLabel
-        %275 = OpLoad %int %j_1
-        %276 = OpIAdd %int %275 %int_1
-               OpStore %j_1 %276
-               OpBranch %261
-        %262 = OpLabel
-        %277 = OpFunctionCall %void %mergeSort_
-        %280 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %281 = OpLoad %float %280
-        %282 = OpConvertFToS %int %281
-        %284 = OpSLessThan %bool %282 %int_30
-               OpSelectionMerge %285 None
-               OpBranchConditional %284 %286 %287
-        %286 = OpLabel
-        %288 = OpAccessChain %_ptr_Private_int %data %int_0
-        %289 = OpLoad %int %288
-        %291 = OpConvertSToF %float %289
-        %293 = OpFDiv %float %291 %float_10
-        %294 = OpFAdd %float %float_0_5 %293
-               OpStore %grey %294
-               OpBranch %285
-        %287 = OpLabel
-        %295 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %296 = OpLoad %float %295
-        %297 = OpConvertFToS %int %296
-        %299 = OpSLessThan %bool %297 %int_60
-               OpSelectionMerge %300 None
-               OpBranchConditional %299 %301 %302
-        %301 = OpLabel
-        %303 = OpAccessChain %_ptr_Private_int %data %int_1
-        %304 = OpLoad %int %303
-        %305 = OpConvertSToF %float %304
-        %306 = OpFDiv %float %305 %float_10
-        %307 = OpFAdd %float %float_0_5 %306
-               OpStore %grey %307
-               OpBranch %300
-        %302 = OpLabel
-        %308 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %309 = OpLoad %float %308
-        %310 = OpConvertFToS %int %309
-        %312 = OpSLessThan %bool %310 %int_90
-               OpSelectionMerge %313 None
-               OpBranchConditional %312 %314 %315
-        %314 = OpLabel
-        %316 = OpAccessChain %_ptr_Private_int %data %int_2
-        %317 = OpLoad %int %316
-        %318 = OpConvertSToF %float %317
-        %319 = OpFDiv %float %318 %float_10
-        %320 = OpFAdd %float %float_0_5 %319
-               OpStore %grey %320
-               OpBranch %313
-        %315 = OpLabel
-        %321 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %322 = OpLoad %float %321
-        %323 = OpConvertFToS %int %322
-        %325 = OpSLessThan %bool %323 %int_120
-               OpSelectionMerge %326 None
-               OpBranchConditional %325 %327 %328
-        %327 = OpLabel
-        %329 = OpAccessChain %_ptr_Private_int %data %int_3
-        %330 = OpLoad %int %329
-        %331 = OpConvertSToF %float %330
-        %332 = OpFDiv %float %331 %float_10
-        %333 = OpFAdd %float %float_0_5 %332
-               OpStore %grey %333
-               OpBranch %326
-        %328 = OpLabel
-        %334 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %335 = OpLoad %float %334
-        %336 = OpConvertFToS %int %335
-        %338 = OpSLessThan %bool %336 %int_150
-               OpSelectionMerge %339 None
-               OpBranchConditional %338 %340 %341
-        %340 = OpLabel
-               OpKill
-        %341 = OpLabel
-        %342 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %343 = OpLoad %float %342
-        %344 = OpConvertFToS %int %343
-        %346 = OpSLessThan %bool %344 %int_180
-               OpSelectionMerge %347 None
-               OpBranchConditional %346 %348 %349
-        %348 = OpLabel
-        %351 = OpAccessChain %_ptr_Private_int %data %int_5
-        %352 = OpLoad %int %351
-        %353 = OpConvertSToF %float %352
-        %354 = OpFDiv %float %353 %float_10
-        %355 = OpFAdd %float %float_0_5 %354
-               OpStore %grey %355
-               OpBranch %347
-        %349 = OpLabel
-        %356 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %357 = OpLoad %float %356
-        %358 = OpConvertFToS %int %357
-        %360 = OpSLessThan %bool %358 %int_210
-               OpSelectionMerge %361 None
-               OpBranchConditional %360 %362 %363
-        %362 = OpLabel
-        %365 = OpAccessChain %_ptr_Private_int %data %int_6
-        %366 = OpLoad %int %365
-        %367 = OpConvertSToF %float %366
-        %368 = OpFDiv %float %367 %float_10
-        %369 = OpFAdd %float %float_0_5 %368
-               OpStore %grey %369
-               OpBranch %361
-        %363 = OpLabel
-        %370 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %371 = OpLoad %float %370
-        %372 = OpConvertFToS %int %371
-        %374 = OpSLessThan %bool %372 %int_240
-               OpSelectionMerge %375 None
-               OpBranchConditional %374 %376 %377
-        %376 = OpLabel
-        %379 = OpAccessChain %_ptr_Private_int %data %int_7
-        %380 = OpLoad %int %379
-        %381 = OpConvertSToF %float %380
-        %382 = OpFDiv %float %381 %float_10
-        %383 = OpFAdd %float %float_0_5 %382
-               OpStore %grey %383
-               OpBranch %375
-        %377 = OpLabel
-        %384 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %385 = OpLoad %float %384
-        %386 = OpConvertFToS %int %385
-        %388 = OpSLessThan %bool %386 %int_270
-               OpSelectionMerge %389 None
-               OpBranchConditional %388 %390 %391
-        %390 = OpLabel
-        %393 = OpAccessChain %_ptr_Private_int %data %int_8
-        %394 = OpLoad %int %393
-        %395 = OpConvertSToF %float %394
-        %396 = OpFDiv %float %395 %float_10
-        %397 = OpFAdd %float %float_0_5 %396
-               OpStore %grey %397
-               OpBranch %389
-        %391 = OpLabel
-               OpKill
-        %389 = OpLabel
-               OpBranch %375
-        %375 = OpLabel
-               OpBranch %361
-        %361 = OpLabel
-               OpBranch %347
-        %347 = OpLabel
-               OpBranch %339
-        %339 = OpLabel
-               OpBranch %326
-        %326 = OpLabel
-               OpBranch %313
-        %313 = OpLabel
-               OpBranch %300
-        %300 = OpLabel
-               OpBranch %285
-        %285 = OpLabel
-        %398 = OpLoad %float %grey
-        %400 = OpCompositeConstruct %v3float %398 %398 %398
-        %401 = OpCompositeExtract %float %400 0
-        %402 = OpCompositeExtract %float %400 1
-        %403 = OpCompositeExtract %float %400 2
-        %404 = OpCompositeConstruct %v4float %401 %402 %403 %float_1
-               OpStore %x_GLF_color %404
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %405
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %409 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %410 = OpFunctionCall %void %main_1
-        %411 = OpLoad %v4float %x_GLF_color
-        %412 = OpCompositeConstruct %main_out %411
-               OpReturnValue %412
-               OpFunctionEnd
-       %main = OpFunction %void None %138
-        %414 = OpLabel
-        %416 = OpLoad %v4float %gl_FragCoord_param_1
-        %415 = OpFunctionCall %main_out %main_inner %416
-        %417 = OpCompositeExtract %v4float %415 0
-               OpStore %x_GLF_color_1_1 %417
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.wgsl
deleted file mode 100644
index a1f8110..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,317 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_256 : i32 = *(from);
-  k = x_256;
-  let x_257 : i32 = *(from);
-  i = x_257;
-  let x_258 : i32 = *(mid);
-  j = (x_258 + 1);
-  loop {
-    let x_264 : i32 = i;
-    let x_265 : i32 = *(mid);
-    let x_267 : i32 = j;
-    let x_268 : i32 = *(to);
-    if (((x_264 <= x_265) & (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    let x_272 : i32 = i;
-    let x_274 : i32 = data[x_272];
-    let x_275 : i32 = j;
-    let x_277 : i32 = data[x_275];
-    if ((x_274 < x_277)) {
-      let x_282 : i32 = k;
-      k = (x_282 + 1);
-      let x_284 : i32 = i;
-      i = (x_284 + 1);
-      let x_287 : i32 = data[x_284];
-      temp[x_282] = x_287;
-    } else {
-      let x_289 : i32 = k;
-      k = (x_289 + 1);
-      let x_291 : i32 = j;
-      j = (x_291 + 1);
-      let x_294 : i32 = data[x_291];
-      temp[x_289] = x_294;
-    }
-  }
-  loop {
-    if (!((256.0 < 1.0))) {
-    } else {
-      continue;
-    }
-    let x_301 : i32 = i;
-    let x_303 : i32 = i;
-    let x_304 : i32 = *(mid);
-    if (((x_301 < 10) & (x_303 <= x_304))) {
-    } else {
-      break;
-    }
-    let x_309 : i32 = k;
-    k = (x_309 + 1);
-    let x_311 : i32 = i;
-    i = (x_311 + 1);
-    let x_314 : i32 = data[x_311];
-    temp[x_309] = x_314;
-  }
-  let x_316 : i32 = *(from);
-  i_1 = x_316;
-  loop {
-    let x_321 : i32 = i_1;
-    let x_322 : i32 = *(to);
-    if ((x_321 <= x_322)) {
-    } else {
-      break;
-    }
-    let x_325 : i32 = i_1;
-    let x_326 : i32 = i_1;
-    let x_328 : i32 = temp[x_326];
-    data[x_325] = x_328;
-
-    continuing {
-      let x_330 : i32 = i_1;
-      i_1 = (x_330 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_337 : i32 = m;
-    let x_338 : i32 = high;
-    if ((x_337 <= x_338)) {
-    } else {
-      break;
-    }
-    let x_341 : i32 = low;
-    i_2 = x_341;
-    loop {
-      let x_346 : i32 = i_2;
-      let x_347 : i32 = high;
-      if ((x_346 < x_347)) {
-      } else {
-        break;
-      }
-      let x_350 : i32 = i_2;
-      from_1 = x_350;
-      let x_351 : i32 = i_2;
-      let x_352 : i32 = m;
-      mid_1 = ((x_351 + x_352) - 1);
-      let x_355 : i32 = i_2;
-      let x_356 : i32 = m;
-      let x_360 : i32 = high;
-      to_1 = min(((x_355 + (2 * x_356)) - 1), x_360);
-      let x_362 : i32 = from_1;
-      param = x_362;
-      let x_363 : i32 = mid_1;
-      param_1 = x_363;
-      let x_364 : i32 = to_1;
-      param_2 = x_364;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_366 : i32 = m;
-        let x_368 : i32 = i_2;
-        i_2 = (x_368 + (2 * x_366));
-      }
-    }
-
-    continuing {
-      let x_370 : i32 = m;
-      m = (2 * x_370);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_89 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_89);
-  loop {
-    let x_95 : i32 = i_3;
-    switch(x_95) {
-      case 9: {
-        let x_125 : i32 = i_3;
-        data[x_125] = -5;
-      }
-      case 8: {
-        let x_123 : i32 = i_3;
-        data[x_123] = -4;
-      }
-      case 7: {
-        let x_121 : i32 = i_3;
-        data[x_121] = -3;
-      }
-      case 6: {
-        let x_119 : i32 = i_3;
-        data[x_119] = -2;
-      }
-      case 5: {
-        let x_117 : i32 = i_3;
-        data[x_117] = -1;
-      }
-      case 4: {
-        let x_115 : i32 = i_3;
-        data[x_115] = 0;
-      }
-      case 3: {
-        let x_113 : i32 = i_3;
-        data[x_113] = 1;
-      }
-      case 2: {
-        let x_111 : i32 = i_3;
-        data[x_111] = 2;
-      }
-      case 1: {
-        let x_109 : i32 = i_3;
-        data[x_109] = 3;
-      }
-      case 0: {
-        let x_107 : i32 = i_3;
-        data[x_107] = 4;
-      }
-      default: {
-      }
-    }
-    let x_127 : i32 = i_3;
-    i_3 = (x_127 + 1);
-
-    continuing {
-      let x_129 : i32 = i_3;
-      if ((x_129 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_135 : i32 = j_1;
-    if ((x_135 < 10)) {
-    } else {
-      break;
-    }
-    let x_138 : i32 = j_1;
-    let x_139 : i32 = j_1;
-    let x_141 : i32 = data[x_139];
-    temp[x_138] = x_141;
-
-    continuing {
-      let x_143 : i32 = j_1;
-      j_1 = (x_143 + 1);
-    }
-  }
-  mergeSort_();
-  let x_147 : f32 = gl_FragCoord.y;
-  if ((i32(x_147) < 30)) {
-    let x_154 : i32 = data[0];
-    grey = (0.5 + (f32(x_154) / 10.0));
-  } else {
-    let x_159 : f32 = gl_FragCoord.y;
-    if ((i32(x_159) < 60)) {
-      let x_166 : i32 = data[1];
-      grey = (0.5 + (f32(x_166) / 10.0));
-    } else {
-      let x_171 : f32 = gl_FragCoord.y;
-      if ((i32(x_171) < 90)) {
-        let x_178 : i32 = data[2];
-        grey = (0.5 + (f32(x_178) / 10.0));
-      } else {
-        let x_183 : f32 = gl_FragCoord.y;
-        if ((i32(x_183) < 120)) {
-          let x_190 : i32 = data[3];
-          grey = (0.5 + (f32(x_190) / 10.0));
-        } else {
-          let x_195 : f32 = gl_FragCoord.y;
-          if ((i32(x_195) < 150)) {
-            discard;
-          } else {
-            let x_202 : f32 = gl_FragCoord.y;
-            if ((i32(x_202) < 180)) {
-              let x_209 : i32 = data[5];
-              grey = (0.5 + (f32(x_209) / 10.0));
-            } else {
-              let x_214 : f32 = gl_FragCoord.y;
-              if ((i32(x_214) < 210)) {
-                let x_221 : i32 = data[6];
-                grey = (0.5 + (f32(x_221) / 10.0));
-              } else {
-                let x_226 : f32 = gl_FragCoord.y;
-                if ((i32(x_226) < 240)) {
-                  let x_233 : i32 = data[7];
-                  grey = (0.5 + (f32(x_233) / 10.0));
-                } else {
-                  let x_238 : f32 = gl_FragCoord.y;
-                  if ((i32(x_238) < 270)) {
-                    let x_245 : i32 = data[8];
-                    grey = (0.5 + (f32(x_245) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_249 : f32 = grey;
-  let x_250 : vec3<f32> = vec3<f32>(x_249, x_249, x_249);
-  x_GLF_color = vec4<f32>(x_250.x, x_250.y, x_250.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.hlsl
deleted file mode 100644
index 30a24e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,280 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b1, space0) {
-  uint4 x_32[1];
-};
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_256 = from;
-  k = x_256;
-  const int x_257 = from;
-  i = x_257;
-  const int x_258 = mid;
-  j = (x_258 + 1);
-  while (true) {
-    const int x_264 = i;
-    const int x_265 = mid;
-    const int x_267 = j;
-    const int x_268 = to;
-    bool tint_tmp = (x_264 <= x_265);
-    if (tint_tmp) {
-      tint_tmp = (x_267 <= x_268);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_274 = data[i];
-    const int x_277 = data[j];
-    if ((x_274 < x_277)) {
-      const int x_282 = k;
-      k = (x_282 + 1);
-      const int x_284 = i;
-      i = (x_284 + 1);
-      const int x_287 = data[x_284];
-      temp[x_282] = x_287;
-    } else {
-      const int x_289 = k;
-      k = (x_289 + 1);
-      const int x_291 = j;
-      j = (x_291 + 1);
-      const int x_294 = data[x_291];
-      temp[x_289] = x_294;
-    }
-  }
-  while (true) {
-    if (!((256.0f < 1.0f))) {
-    } else {
-      continue;
-    }
-    const int x_301 = i;
-    const int x_303 = i;
-    const int x_304 = mid;
-    bool tint_tmp_1 = (x_301 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_303 <= x_304);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_309 = k;
-    k = (x_309 + 1);
-    const int x_311 = i;
-    i = (x_311 + 1);
-    const int x_314 = data[x_311];
-    temp[x_309] = x_314;
-  }
-  const int x_316 = from;
-  i_1 = x_316;
-  while (true) {
-    const int x_321 = i_1;
-    const int x_322 = to;
-    if ((x_321 <= x_322)) {
-    } else {
-      break;
-    }
-    const int x_325 = i_1;
-    const int x_328 = temp[i_1];
-    data[x_325] = x_328;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_89 = asfloat(x_28[0].x);
-  i_3 = int(x_89);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_138 = j_1;
-      const int x_141 = data[j_1];
-      temp[x_138] = x_141;
-    }
-  }
-  mergeSort_();
-  const float x_147 = gl_FragCoord.y;
-  if ((int(x_147) < 30)) {
-    const int x_154 = data[0];
-    grey = (0.5f + (float(x_154) / 10.0f));
-  } else {
-    const float x_159 = gl_FragCoord.y;
-    if ((int(x_159) < 60)) {
-      const int x_166 = data[1];
-      grey = (0.5f + (float(x_166) / 10.0f));
-    } else {
-      const float x_171 = gl_FragCoord.y;
-      if ((int(x_171) < 90)) {
-        const int x_178 = data[2];
-        grey = (0.5f + (float(x_178) / 10.0f));
-      } else {
-        const float x_183 = gl_FragCoord.y;
-        if ((int(x_183) < 120)) {
-          const int x_190 = data[3];
-          grey = (0.5f + (float(x_190) / 10.0f));
-        } else {
-          const float x_195 = gl_FragCoord.y;
-          if ((int(x_195) < 150)) {
-            discard;
-          } else {
-            const float x_202 = gl_FragCoord.y;
-            if ((int(x_202) < 180)) {
-              const int x_209 = data[5];
-              grey = (0.5f + (float(x_209) / 10.0f));
-            } else {
-              const float x_214 = gl_FragCoord.y;
-              if ((int(x_214) < 210)) {
-                const int x_221 = data[6];
-                grey = (0.5f + (float(x_221) / 10.0f));
-              } else {
-                const float x_226 = gl_FragCoord.y;
-                if ((int(x_226) < 240)) {
-                  const int x_233 = data[7];
-                  grey = (0.5f + (float(x_233) / 10.0f));
-                } else {
-                  const float x_238 = gl_FragCoord.y;
-                  if ((int(x_238) < 270)) {
-                    const int x_245 = data[8];
-                    grey = (0.5f + (float(x_245) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_249 = grey;
-  const float3 x_250 = float3(x_249, x_249, x_249);
-  x_GLF_color = float4(x_250.x, x_250.y, x_250.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.msl
deleted file mode 100644
index d8d2288..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.msl
+++ /dev/null
@@ -1,327 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_256 = *(from);
-  k = x_256;
-  int const x_257 = *(from);
-  i = x_257;
-  int const x_258 = *(mid);
-  j = as_type<int>((as_type<uint>(x_258) + as_type<uint>(1)));
-  while (true) {
-    int const x_264 = i;
-    int const x_265 = *(mid);
-    int const x_267 = j;
-    int const x_268 = *(to);
-    if (((x_264 <= x_265) && (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    int const x_272 = i;
-    int const x_274 = (*(tint_symbol_3)).arr[x_272];
-    int const x_275 = j;
-    int const x_277 = (*(tint_symbol_3)).arr[x_275];
-    if ((x_274 < x_277)) {
-      int const x_282 = k;
-      k = as_type<int>((as_type<uint>(x_282) + as_type<uint>(1)));
-      int const x_284 = i;
-      i = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
-      int const x_287 = (*(tint_symbol_3)).arr[x_284];
-      (*(tint_symbol_4)).arr[x_282] = x_287;
-    } else {
-      int const x_289 = k;
-      k = as_type<int>((as_type<uint>(x_289) + as_type<uint>(1)));
-      int const x_291 = j;
-      j = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
-      int const x_294 = (*(tint_symbol_3)).arr[x_291];
-      (*(tint_symbol_4)).arr[x_289] = x_294;
-    }
-  }
-  while (true) {
-    if (!((256.0f < 1.0f))) {
-    } else {
-      continue;
-    }
-    int const x_301 = i;
-    int const x_303 = i;
-    int const x_304 = *(mid);
-    if (((x_301 < 10) && (x_303 <= x_304))) {
-    } else {
-      break;
-    }
-    int const x_309 = k;
-    k = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
-    int const x_311 = i;
-    i = as_type<int>((as_type<uint>(x_311) + as_type<uint>(1)));
-    int const x_314 = (*(tint_symbol_3)).arr[x_311];
-    (*(tint_symbol_4)).arr[x_309] = x_314;
-  }
-  int const x_316 = *(from);
-  i_1 = x_316;
-  while (true) {
-    int const x_321 = i_1;
-    int const x_322 = *(to);
-    if ((x_321 <= x_322)) {
-    } else {
-      break;
-    }
-    int const x_325 = i_1;
-    int const x_326 = i_1;
-    int const x_328 = (*(tint_symbol_4)).arr[x_326];
-    (*(tint_symbol_3)).arr[x_325] = x_328;
-    {
-      int const x_330 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_337 = m;
-    int const x_338 = high;
-    if ((x_337 <= x_338)) {
-    } else {
-      break;
-    }
-    int const x_341 = low;
-    i_2 = x_341;
-    while (true) {
-      int const x_346 = i_2;
-      int const x_347 = high;
-      if ((x_346 < x_347)) {
-      } else {
-        break;
-      }
-      int const x_350 = i_2;
-      from_1 = x_350;
-      int const x_351 = i_2;
-      int const x_352 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_351) + as_type<uint>(x_352)))) - as_type<uint>(1)));
-      int const x_355 = i_2;
-      int const x_356 = m;
-      int const x_360 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_356))))))) - as_type<uint>(1))), x_360);
-      int const x_362 = from_1;
-      param = x_362;
-      int const x_363 = mid_1;
-      param_1 = x_363;
-      int const x_364 = to_1;
-      param_2 = x_364;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_366 = m;
-        int const x_368 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_368) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_366))))));
-      }
-    }
-    {
-      int const x_370 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_370)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_89 = x_28.injectionSwitch.x;
-  i_3 = int(x_89);
-  while (true) {
-    int const x_95 = i_3;
-    switch(x_95) {
-      case 9: {
-        int const x_125 = i_3;
-        (*(tint_symbol_7)).arr[x_125] = -5;
-        break;
-      }
-      case 8: {
-        int const x_123 = i_3;
-        (*(tint_symbol_7)).arr[x_123] = -4;
-        break;
-      }
-      case 7: {
-        int const x_121 = i_3;
-        (*(tint_symbol_7)).arr[x_121] = -3;
-        break;
-      }
-      case 6: {
-        int const x_119 = i_3;
-        (*(tint_symbol_7)).arr[x_119] = -2;
-        break;
-      }
-      case 5: {
-        int const x_117 = i_3;
-        (*(tint_symbol_7)).arr[x_117] = -1;
-        break;
-      }
-      case 4: {
-        int const x_115 = i_3;
-        (*(tint_symbol_7)).arr[x_115] = 0;
-        break;
-      }
-      case 3: {
-        int const x_113 = i_3;
-        (*(tint_symbol_7)).arr[x_113] = 1;
-        break;
-      }
-      case 2: {
-        int const x_111 = i_3;
-        (*(tint_symbol_7)).arr[x_111] = 2;
-        break;
-      }
-      case 1: {
-        int const x_109 = i_3;
-        (*(tint_symbol_7)).arr[x_109] = 3;
-        break;
-      }
-      case 0: {
-        int const x_107 = i_3;
-        (*(tint_symbol_7)).arr[x_107] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_127 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
-    {
-      int const x_129 = i_3;
-      if ((x_129 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_135 = j_1;
-    if ((x_135 < 10)) {
-    } else {
-      break;
-    }
-    int const x_138 = j_1;
-    int const x_139 = j_1;
-    int const x_141 = (*(tint_symbol_7)).arr[x_139];
-    (*(tint_symbol_8)).arr[x_138] = x_141;
-    {
-      int const x_143 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_147 = (*(tint_symbol_9)).y;
-  if ((int(x_147) < 30)) {
-    int const x_154 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_154) / 10.0f));
-  } else {
-    float const x_159 = (*(tint_symbol_9)).y;
-    if ((int(x_159) < 60)) {
-      int const x_166 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_166) / 10.0f));
-    } else {
-      float const x_171 = (*(tint_symbol_9)).y;
-      if ((int(x_171) < 90)) {
-        int const x_178 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_178) / 10.0f));
-      } else {
-        float const x_183 = (*(tint_symbol_9)).y;
-        if ((int(x_183) < 120)) {
-          int const x_190 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_190) / 10.0f));
-        } else {
-          float const x_195 = (*(tint_symbol_9)).y;
-          if ((int(x_195) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_202 = (*(tint_symbol_9)).y;
-            if ((int(x_202) < 180)) {
-              int const x_209 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_209) / 10.0f));
-            } else {
-              float const x_214 = (*(tint_symbol_9)).y;
-              if ((int(x_214) < 210)) {
-                int const x_221 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_221) / 10.0f));
-              } else {
-                float const x_226 = (*(tint_symbol_9)).y;
-                if ((int(x_226) < 240)) {
-                  int const x_233 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_233) / 10.0f));
-                } else {
-                  float const x_238 = (*(tint_symbol_9)).y;
-                  if ((int(x_238) < 270)) {
-                    int const x_245 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_245) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_249 = grey;
-  float3 const x_250 = float3(x_249, x_249, x_249);
-  *(tint_symbol_10) = float4(x_250.x, x_250.y, x_250.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.spvasm
deleted file mode 100644
index 6208764..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,658 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 422
-; Schema: 0
-               OpCapability Shader
-        %187 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_32 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %35 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-  %float_256 = OpConstant %float 256
-    %float_1 = OpConstant %float 1
-     %int_10 = OpConstant %int 10
-        %142 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %211 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %409 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %26
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %33 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %35
-          %i = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-        %i_1 = OpVariable %_ptr_Function_int Function %35
-         %40 = OpLoad %int %from
-               OpStore %k %40
-         %42 = OpLoad %int %from
-               OpStore %i %42
-         %44 = OpLoad %int %mid
-         %46 = OpIAdd %int %44 %int_1
-               OpStore %j %46
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %int %mid
-         %54 = OpLoad %int %j
-         %56 = OpLoad %int %to
-         %57 = OpSLessThanEqual %bool %51 %53
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %59
-         %60 = OpLabel
-         %61 = OpSLessThanEqual %bool %54 %56
-               OpBranch %59
-         %59 = OpLabel
-         %62 = OpPhi %bool %57 %50 %61 %60
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %48
-         %63 = OpLabel
-         %66 = OpLoad %int %i
-         %68 = OpAccessChain %_ptr_Private_int %data %66
-         %69 = OpLoad %int %68
-         %70 = OpLoad %int %j
-         %71 = OpAccessChain %_ptr_Private_int %data %70
-         %72 = OpLoad %int %71
-         %73 = OpSLessThan %bool %69 %72
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-         %77 = OpLoad %int %k
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %k %78
-         %79 = OpLoad %int %i
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %i %80
-         %81 = OpAccessChain %_ptr_Private_int %data %79
-         %82 = OpLoad %int %81
-         %83 = OpAccessChain %_ptr_Private_int %temp %77
-               OpStore %83 %82
-               OpBranch %74
-         %76 = OpLabel
-         %84 = OpLoad %int %k
-         %85 = OpIAdd %int %84 %int_1
-               OpStore %k %85
-         %86 = OpLoad %int %j
-         %87 = OpIAdd %int %86 %int_1
-               OpStore %j %87
-         %88 = OpAccessChain %_ptr_Private_int %data %86
-         %89 = OpLoad %int %88
-         %90 = OpAccessChain %_ptr_Private_int %temp %84
-               OpStore %90 %89
-               OpBranch %74
-         %74 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %91
-         %91 = OpLabel
-               OpLoopMerge %92 %93 None
-               OpBranch %94
-         %94 = OpLabel
-         %98 = OpFOrdLessThan %bool %float_256 %float_1
-         %95 = OpLogicalNot %bool %98
-               OpSelectionMerge %99 None
-               OpBranchConditional %95 %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %93
-         %99 = OpLabel
-        %102 = OpLoad %int %i
-        %103 = OpLoad %int %i
-        %105 = OpLoad %int %mid
-        %107 = OpSLessThan %bool %102 %int_10
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %108
-        %109 = OpLabel
-        %110 = OpSLessThanEqual %bool %103 %105
-               OpBranch %108
-        %108 = OpLabel
-        %111 = OpPhi %bool %107 %99 %110 %109
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %114
-        %113 = OpLabel
-               OpBranch %112
-        %114 = OpLabel
-               OpBranch %92
-        %112 = OpLabel
-        %115 = OpLoad %int %k
-        %116 = OpIAdd %int %115 %int_1
-               OpStore %k %116
-        %117 = OpLoad %int %i
-        %118 = OpIAdd %int %117 %int_1
-               OpStore %i %118
-        %119 = OpAccessChain %_ptr_Private_int %data %117
-        %120 = OpLoad %int %119
-        %121 = OpAccessChain %_ptr_Private_int %temp %115
-               OpStore %121 %120
-               OpBranch %93
-         %93 = OpLabel
-               OpBranch %91
-         %92 = OpLabel
-        %123 = OpLoad %int %from
-               OpStore %i_1 %123
-               OpBranch %124
-        %124 = OpLabel
-               OpLoopMerge %125 %126 None
-               OpBranch %127
-        %127 = OpLabel
-        %128 = OpLoad %int %i_1
-        %130 = OpLoad %int %to
-        %131 = OpSLessThanEqual %bool %128 %130
-               OpSelectionMerge %132 None
-               OpBranchConditional %131 %133 %134
-        %133 = OpLabel
-               OpBranch %132
-        %134 = OpLabel
-               OpBranch %125
-        %132 = OpLabel
-        %135 = OpLoad %int %i_1
-        %136 = OpLoad %int %i_1
-        %137 = OpAccessChain %_ptr_Private_int %temp %136
-        %138 = OpLoad %int %137
-        %139 = OpAccessChain %_ptr_Private_int %data %135
-               OpStore %139 %138
-               OpBranch %126
-        %126 = OpLabel
-        %140 = OpLoad %int %i_1
-        %141 = OpIAdd %int %140 %int_1
-               OpStore %i_1 %141
-               OpBranch %124
-        %125 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %142
-        %144 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %35
-       %high = OpVariable %_ptr_Function_int Function %35
-          %m = OpVariable %_ptr_Function_int Function %35
-        %i_2 = OpVariable %_ptr_Function_int Function %35
-     %from_1 = OpVariable %_ptr_Function_int Function %35
-      %mid_1 = OpVariable %_ptr_Function_int Function %35
-       %to_1 = OpVariable %_ptr_Function_int Function %35
-      %param = OpVariable %_ptr_Function_int Function %35
-    %param_1 = OpVariable %_ptr_Function_int Function %35
-    %param_2 = OpVariable %_ptr_Function_int Function %35
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %157
-        %157 = OpLabel
-               OpLoopMerge %158 %159 None
-               OpBranch %160
-        %160 = OpLabel
-        %161 = OpLoad %int %m
-        %162 = OpLoad %int %high
-        %163 = OpSLessThanEqual %bool %161 %162
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %166
-        %165 = OpLabel
-               OpBranch %164
-        %166 = OpLabel
-               OpBranch %158
-        %164 = OpLabel
-        %167 = OpLoad %int %low
-               OpStore %i_2 %167
-               OpBranch %168
-        %168 = OpLabel
-               OpLoopMerge %169 %170 None
-               OpBranch %171
-        %171 = OpLabel
-        %172 = OpLoad %int %i_2
-        %173 = OpLoad %int %high
-        %174 = OpSLessThan %bool %172 %173
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %177
-        %176 = OpLabel
-               OpBranch %175
-        %177 = OpLabel
-               OpBranch %169
-        %175 = OpLabel
-        %178 = OpLoad %int %i_2
-               OpStore %from_1 %178
-        %179 = OpLoad %int %i_2
-        %180 = OpLoad %int %m
-        %181 = OpIAdd %int %179 %180
-        %182 = OpISub %int %181 %int_1
-               OpStore %mid_1 %182
-        %183 = OpLoad %int %i_2
-        %184 = OpLoad %int %m
-        %185 = OpLoad %int %high
-        %189 = OpIMul %int %int_2 %184
-        %190 = OpIAdd %int %183 %189
-        %191 = OpISub %int %190 %int_1
-        %186 = OpExtInst %int %187 SMin %191 %185
-               OpStore %to_1 %186
-        %192 = OpLoad %int %from_1
-               OpStore %param %192
-        %193 = OpLoad %int %mid_1
-               OpStore %param_1 %193
-        %194 = OpLoad %int %to_1
-               OpStore %param_2 %194
-        %195 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %170
-        %170 = OpLabel
-        %199 = OpLoad %int %m
-        %200 = OpLoad %int %i_2
-        %201 = OpIMul %int %int_2 %199
-        %202 = OpIAdd %int %200 %201
-               OpStore %i_2 %202
-               OpBranch %168
-        %169 = OpLabel
-               OpBranch %159
-        %159 = OpLabel
-        %203 = OpLoad %int %m
-        %204 = OpIMul %int %int_2 %203
-               OpStore %m %204
-               OpBranch %157
-        %158 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %142
-        %206 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %35
-        %j_1 = OpVariable %_ptr_Function_int Function %35
-       %grey = OpVariable %_ptr_Function_float Function %211
-        %214 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %215 = OpLoad %float %214
-        %216 = OpConvertFToS %int %215
-               OpStore %i_3 %216
-               OpBranch %217
-        %217 = OpLabel
-               OpLoopMerge %218 %219 None
-               OpBranch %220
-        %220 = OpLabel
-        %221 = OpLoad %int %i_3
-               OpSelectionMerge %222 None
-               OpSwitch %221 %223 9 %224 8 %225 7 %226 6 %227 5 %228 4 %229 3 %230 2 %231 1 %232 0 %233
-        %224 = OpLabel
-        %234 = OpLoad %int %i_3
-        %235 = OpAccessChain %_ptr_Private_int %data %234
-               OpStore %235 %int_n5
-               OpBranch %222
-        %225 = OpLabel
-        %237 = OpLoad %int %i_3
-        %238 = OpAccessChain %_ptr_Private_int %data %237
-               OpStore %238 %int_n4
-               OpBranch %222
-        %226 = OpLabel
-        %240 = OpLoad %int %i_3
-        %241 = OpAccessChain %_ptr_Private_int %data %240
-               OpStore %241 %int_n3
-               OpBranch %222
-        %227 = OpLabel
-        %243 = OpLoad %int %i_3
-        %244 = OpAccessChain %_ptr_Private_int %data %243
-               OpStore %244 %int_n2
-               OpBranch %222
-        %228 = OpLabel
-        %246 = OpLoad %int %i_3
-        %247 = OpAccessChain %_ptr_Private_int %data %246
-               OpStore %247 %int_n1
-               OpBranch %222
-        %229 = OpLabel
-        %249 = OpLoad %int %i_3
-        %250 = OpAccessChain %_ptr_Private_int %data %249
-               OpStore %250 %int_0
-               OpBranch %222
-        %230 = OpLabel
-        %251 = OpLoad %int %i_3
-        %252 = OpAccessChain %_ptr_Private_int %data %251
-               OpStore %252 %int_1
-               OpBranch %222
-        %231 = OpLabel
-        %253 = OpLoad %int %i_3
-        %254 = OpAccessChain %_ptr_Private_int %data %253
-               OpStore %254 %int_2
-               OpBranch %222
-        %232 = OpLabel
-        %255 = OpLoad %int %i_3
-        %256 = OpAccessChain %_ptr_Private_int %data %255
-               OpStore %256 %int_3
-               OpBranch %222
-        %233 = OpLabel
-        %258 = OpLoad %int %i_3
-        %259 = OpAccessChain %_ptr_Private_int %data %258
-               OpStore %259 %int_4
-               OpBranch %222
-        %223 = OpLabel
-               OpBranch %222
-        %222 = OpLabel
-        %261 = OpLoad %int %i_3
-        %262 = OpIAdd %int %261 %int_1
-               OpStore %i_3 %262
-               OpBranch %219
-        %219 = OpLabel
-        %263 = OpLoad %int %i_3
-        %264 = OpSLessThan %bool %263 %int_10
-               OpBranchConditional %264 %217 %218
-        %218 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %265
-        %265 = OpLabel
-               OpLoopMerge %266 %267 None
-               OpBranch %268
-        %268 = OpLabel
-        %269 = OpLoad %int %j_1
-        %270 = OpSLessThan %bool %269 %int_10
-               OpSelectionMerge %271 None
-               OpBranchConditional %270 %272 %273
-        %272 = OpLabel
-               OpBranch %271
-        %273 = OpLabel
-               OpBranch %266
-        %271 = OpLabel
-        %274 = OpLoad %int %j_1
-        %275 = OpLoad %int %j_1
-        %276 = OpAccessChain %_ptr_Private_int %data %275
-        %277 = OpLoad %int %276
-        %278 = OpAccessChain %_ptr_Private_int %temp %274
-               OpStore %278 %277
-               OpBranch %267
-        %267 = OpLabel
-        %279 = OpLoad %int %j_1
-        %280 = OpIAdd %int %279 %int_1
-               OpStore %j_1 %280
-               OpBranch %265
-        %266 = OpLabel
-        %281 = OpFunctionCall %void %mergeSort_
-        %284 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %285 = OpLoad %float %284
-        %286 = OpConvertFToS %int %285
-        %288 = OpSLessThan %bool %286 %int_30
-               OpSelectionMerge %289 None
-               OpBranchConditional %288 %290 %291
-        %290 = OpLabel
-        %292 = OpAccessChain %_ptr_Private_int %data %int_0
-        %293 = OpLoad %int %292
-        %295 = OpConvertSToF %float %293
-        %297 = OpFDiv %float %295 %float_10
-        %298 = OpFAdd %float %float_0_5 %297
-               OpStore %grey %298
-               OpBranch %289
-        %291 = OpLabel
-        %299 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %300 = OpLoad %float %299
-        %301 = OpConvertFToS %int %300
-        %303 = OpSLessThan %bool %301 %int_60
-               OpSelectionMerge %304 None
-               OpBranchConditional %303 %305 %306
-        %305 = OpLabel
-        %307 = OpAccessChain %_ptr_Private_int %data %int_1
-        %308 = OpLoad %int %307
-        %309 = OpConvertSToF %float %308
-        %310 = OpFDiv %float %309 %float_10
-        %311 = OpFAdd %float %float_0_5 %310
-               OpStore %grey %311
-               OpBranch %304
-        %306 = OpLabel
-        %312 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %313 = OpLoad %float %312
-        %314 = OpConvertFToS %int %313
-        %316 = OpSLessThan %bool %314 %int_90
-               OpSelectionMerge %317 None
-               OpBranchConditional %316 %318 %319
-        %318 = OpLabel
-        %320 = OpAccessChain %_ptr_Private_int %data %int_2
-        %321 = OpLoad %int %320
-        %322 = OpConvertSToF %float %321
-        %323 = OpFDiv %float %322 %float_10
-        %324 = OpFAdd %float %float_0_5 %323
-               OpStore %grey %324
-               OpBranch %317
-        %319 = OpLabel
-        %325 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %326 = OpLoad %float %325
-        %327 = OpConvertFToS %int %326
-        %329 = OpSLessThan %bool %327 %int_120
-               OpSelectionMerge %330 None
-               OpBranchConditional %329 %331 %332
-        %331 = OpLabel
-        %333 = OpAccessChain %_ptr_Private_int %data %int_3
-        %334 = OpLoad %int %333
-        %335 = OpConvertSToF %float %334
-        %336 = OpFDiv %float %335 %float_10
-        %337 = OpFAdd %float %float_0_5 %336
-               OpStore %grey %337
-               OpBranch %330
-        %332 = OpLabel
-        %338 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %339 = OpLoad %float %338
-        %340 = OpConvertFToS %int %339
-        %342 = OpSLessThan %bool %340 %int_150
-               OpSelectionMerge %343 None
-               OpBranchConditional %342 %344 %345
-        %344 = OpLabel
-               OpKill
-        %345 = OpLabel
-        %346 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %347 = OpLoad %float %346
-        %348 = OpConvertFToS %int %347
-        %350 = OpSLessThan %bool %348 %int_180
-               OpSelectionMerge %351 None
-               OpBranchConditional %350 %352 %353
-        %352 = OpLabel
-        %355 = OpAccessChain %_ptr_Private_int %data %int_5
-        %356 = OpLoad %int %355
-        %357 = OpConvertSToF %float %356
-        %358 = OpFDiv %float %357 %float_10
-        %359 = OpFAdd %float %float_0_5 %358
-               OpStore %grey %359
-               OpBranch %351
-        %353 = OpLabel
-        %360 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %361 = OpLoad %float %360
-        %362 = OpConvertFToS %int %361
-        %364 = OpSLessThan %bool %362 %int_210
-               OpSelectionMerge %365 None
-               OpBranchConditional %364 %366 %367
-        %366 = OpLabel
-        %369 = OpAccessChain %_ptr_Private_int %data %int_6
-        %370 = OpLoad %int %369
-        %371 = OpConvertSToF %float %370
-        %372 = OpFDiv %float %371 %float_10
-        %373 = OpFAdd %float %float_0_5 %372
-               OpStore %grey %373
-               OpBranch %365
-        %367 = OpLabel
-        %374 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %375 = OpLoad %float %374
-        %376 = OpConvertFToS %int %375
-        %378 = OpSLessThan %bool %376 %int_240
-               OpSelectionMerge %379 None
-               OpBranchConditional %378 %380 %381
-        %380 = OpLabel
-        %383 = OpAccessChain %_ptr_Private_int %data %int_7
-        %384 = OpLoad %int %383
-        %385 = OpConvertSToF %float %384
-        %386 = OpFDiv %float %385 %float_10
-        %387 = OpFAdd %float %float_0_5 %386
-               OpStore %grey %387
-               OpBranch %379
-        %381 = OpLabel
-        %388 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %389 = OpLoad %float %388
-        %390 = OpConvertFToS %int %389
-        %392 = OpSLessThan %bool %390 %int_270
-               OpSelectionMerge %393 None
-               OpBranchConditional %392 %394 %395
-        %394 = OpLabel
-        %397 = OpAccessChain %_ptr_Private_int %data %int_8
-        %398 = OpLoad %int %397
-        %399 = OpConvertSToF %float %398
-        %400 = OpFDiv %float %399 %float_10
-        %401 = OpFAdd %float %float_0_5 %400
-               OpStore %grey %401
-               OpBranch %393
-        %395 = OpLabel
-               OpKill
-        %393 = OpLabel
-               OpBranch %379
-        %379 = OpLabel
-               OpBranch %365
-        %365 = OpLabel
-               OpBranch %351
-        %351 = OpLabel
-               OpBranch %343
-        %343 = OpLabel
-               OpBranch %330
-        %330 = OpLabel
-               OpBranch %317
-        %317 = OpLabel
-               OpBranch %304
-        %304 = OpLabel
-               OpBranch %289
-        %289 = OpLabel
-        %402 = OpLoad %float %grey
-        %404 = OpCompositeConstruct %v3float %402 %402 %402
-        %405 = OpCompositeExtract %float %404 0
-        %406 = OpCompositeExtract %float %404 1
-        %407 = OpCompositeExtract %float %404 2
-        %408 = OpCompositeConstruct %v4float %405 %406 %407 %float_1
-               OpStore %x_GLF_color %408
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %409
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %413 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %414 = OpFunctionCall %void %main_1
-        %415 = OpLoad %v4float %x_GLF_color
-        %416 = OpCompositeConstruct %main_out %415
-               OpReturnValue %416
-               OpFunctionEnd
-       %main = OpFunction %void None %142
-        %418 = OpLabel
-        %420 = OpLoad %v4float %gl_FragCoord_param_1
-        %419 = OpFunctionCall %main_out %main_inner %420
-        %421 = OpCompositeExtract %v4float %419 0
-               OpStore %x_GLF_color_1_1 %421
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.wgsl
deleted file mode 100644
index b26ac12..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-double-branch-to-same-block3/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,317 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_32 : buf1;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_256 : i32 = *(from);
-  k = x_256;
-  let x_257 : i32 = *(from);
-  i = x_257;
-  let x_258 : i32 = *(mid);
-  j = (x_258 + 1);
-  loop {
-    let x_264 : i32 = i;
-    let x_265 : i32 = *(mid);
-    let x_267 : i32 = j;
-    let x_268 : i32 = *(to);
-    if (((x_264 <= x_265) && (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    let x_272 : i32 = i;
-    let x_274 : i32 = data[x_272];
-    let x_275 : i32 = j;
-    let x_277 : i32 = data[x_275];
-    if ((x_274 < x_277)) {
-      let x_282 : i32 = k;
-      k = (x_282 + 1);
-      let x_284 : i32 = i;
-      i = (x_284 + 1);
-      let x_287 : i32 = data[x_284];
-      temp[x_282] = x_287;
-    } else {
-      let x_289 : i32 = k;
-      k = (x_289 + 1);
-      let x_291 : i32 = j;
-      j = (x_291 + 1);
-      let x_294 : i32 = data[x_291];
-      temp[x_289] = x_294;
-    }
-  }
-  loop {
-    if (!((256.0 < 1.0))) {
-    } else {
-      continue;
-    }
-    let x_301 : i32 = i;
-    let x_303 : i32 = i;
-    let x_304 : i32 = *(mid);
-    if (((x_301 < 10) && (x_303 <= x_304))) {
-    } else {
-      break;
-    }
-    let x_309 : i32 = k;
-    k = (x_309 + 1);
-    let x_311 : i32 = i;
-    i = (x_311 + 1);
-    let x_314 : i32 = data[x_311];
-    temp[x_309] = x_314;
-  }
-  let x_316 : i32 = *(from);
-  i_1 = x_316;
-  loop {
-    let x_321 : i32 = i_1;
-    let x_322 : i32 = *(to);
-    if ((x_321 <= x_322)) {
-    } else {
-      break;
-    }
-    let x_325 : i32 = i_1;
-    let x_326 : i32 = i_1;
-    let x_328 : i32 = temp[x_326];
-    data[x_325] = x_328;
-
-    continuing {
-      let x_330 : i32 = i_1;
-      i_1 = (x_330 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_337 : i32 = m;
-    let x_338 : i32 = high;
-    if ((x_337 <= x_338)) {
-    } else {
-      break;
-    }
-    let x_341 : i32 = low;
-    i_2 = x_341;
-    loop {
-      let x_346 : i32 = i_2;
-      let x_347 : i32 = high;
-      if ((x_346 < x_347)) {
-      } else {
-        break;
-      }
-      let x_350 : i32 = i_2;
-      from_1 = x_350;
-      let x_351 : i32 = i_2;
-      let x_352 : i32 = m;
-      mid_1 = ((x_351 + x_352) - 1);
-      let x_355 : i32 = i_2;
-      let x_356 : i32 = m;
-      let x_360 : i32 = high;
-      to_1 = min(((x_355 + (2 * x_356)) - 1), x_360);
-      let x_362 : i32 = from_1;
-      param = x_362;
-      let x_363 : i32 = mid_1;
-      param_1 = x_363;
-      let x_364 : i32 = to_1;
-      param_2 = x_364;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_366 : i32 = m;
-        let x_368 : i32 = i_2;
-        i_2 = (x_368 + (2 * x_366));
-      }
-    }
-
-    continuing {
-      let x_370 : i32 = m;
-      m = (2 * x_370);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_89 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_89);
-  loop {
-    let x_95 : i32 = i_3;
-    switch(x_95) {
-      case 9: {
-        let x_125 : i32 = i_3;
-        data[x_125] = -5;
-      }
-      case 8: {
-        let x_123 : i32 = i_3;
-        data[x_123] = -4;
-      }
-      case 7: {
-        let x_121 : i32 = i_3;
-        data[x_121] = -3;
-      }
-      case 6: {
-        let x_119 : i32 = i_3;
-        data[x_119] = -2;
-      }
-      case 5: {
-        let x_117 : i32 = i_3;
-        data[x_117] = -1;
-      }
-      case 4: {
-        let x_115 : i32 = i_3;
-        data[x_115] = 0;
-      }
-      case 3: {
-        let x_113 : i32 = i_3;
-        data[x_113] = 1;
-      }
-      case 2: {
-        let x_111 : i32 = i_3;
-        data[x_111] = 2;
-      }
-      case 1: {
-        let x_109 : i32 = i_3;
-        data[x_109] = 3;
-      }
-      case 0: {
-        let x_107 : i32 = i_3;
-        data[x_107] = 4;
-      }
-      default: {
-      }
-    }
-    let x_127 : i32 = i_3;
-    i_3 = (x_127 + 1);
-
-    continuing {
-      let x_129 : i32 = i_3;
-      if ((x_129 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_135 : i32 = j_1;
-    if ((x_135 < 10)) {
-    } else {
-      break;
-    }
-    let x_138 : i32 = j_1;
-    let x_139 : i32 = j_1;
-    let x_141 : i32 = data[x_139];
-    temp[x_138] = x_141;
-
-    continuing {
-      let x_143 : i32 = j_1;
-      j_1 = (x_143 + 1);
-    }
-  }
-  mergeSort_();
-  let x_147 : f32 = gl_FragCoord.y;
-  if ((i32(x_147) < 30)) {
-    let x_154 : i32 = data[0];
-    grey = (0.5 + (f32(x_154) / 10.0));
-  } else {
-    let x_159 : f32 = gl_FragCoord.y;
-    if ((i32(x_159) < 60)) {
-      let x_166 : i32 = data[1];
-      grey = (0.5 + (f32(x_166) / 10.0));
-    } else {
-      let x_171 : f32 = gl_FragCoord.y;
-      if ((i32(x_171) < 90)) {
-        let x_178 : i32 = data[2];
-        grey = (0.5 + (f32(x_178) / 10.0));
-      } else {
-        let x_183 : f32 = gl_FragCoord.y;
-        if ((i32(x_183) < 120)) {
-          let x_190 : i32 = data[3];
-          grey = (0.5 + (f32(x_190) / 10.0));
-        } else {
-          let x_195 : f32 = gl_FragCoord.y;
-          if ((i32(x_195) < 150)) {
-            discard;
-          } else {
-            let x_202 : f32 = gl_FragCoord.y;
-            if ((i32(x_202) < 180)) {
-              let x_209 : i32 = data[5];
-              grey = (0.5 + (f32(x_209) / 10.0));
-            } else {
-              let x_214 : f32 = gl_FragCoord.y;
-              if ((i32(x_214) < 210)) {
-                let x_221 : i32 = data[6];
-                grey = (0.5 + (f32(x_221) / 10.0));
-              } else {
-                let x_226 : f32 = gl_FragCoord.y;
-                if ((i32(x_226) < 240)) {
-                  let x_233 : i32 = data[7];
-                  grey = (0.5 + (f32(x_233) / 10.0));
-                } else {
-                  let x_238 : f32 = gl_FragCoord.y;
-                  if ((i32(x_238) < 270)) {
-                    let x_245 : i32 = data[8];
-                    grey = (0.5 + (f32(x_245) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_249 : f32 = grey;
-  let x_250 : vec3<f32> = vec3<f32>(x_249, x_249, x_249);
-  x_GLF_color = vec4<f32>(x_250.x, x_250.y, x_250.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.hlsl
deleted file mode 100644
index 0d62f20..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,756 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  BST tree[10] = (BST[10])0;
-  int x_360 = 0;
-  int x_62_phi = 0;
-  bool x_90_phi = false;
-  int x_357_phi = 0;
-  int x_360_phi = 0;
-  int x_362_phi = 0;
-  const BST tint_symbol_1 = {9, -1, -1};
-  tree[0] = tint_symbol_1;
-  switch(0u) {
-    default: {
-      x_62_phi = 0;
-      while (true) {
-        int x_88 = 0;
-        int x_80 = 0;
-        int x_63 = 0;
-        int x_63_phi = 0;
-        const int x_62 = x_62_phi;
-        x_90_phi = false;
-        if ((x_62 <= 1)) {
-        } else {
-          break;
-        }
-        const int x_69 = tree[x_62].data;
-        if ((5 <= x_69)) {
-          const int x_82_save = x_62;
-          const int x_83 = tree[x_82_save].leftIndex;
-          if ((x_83 == -1)) {
-            tree[x_82_save].leftIndex = 1;
-            const BST tint_symbol_2 = {5, -1, -1};
-            tree[1] = tint_symbol_2;
-            x_90_phi = true;
-            break;
-          } else {
-            x_88 = tree[x_82_save].leftIndex;
-            x_63_phi = x_88;
-            {
-              x_63 = x_63_phi;
-              x_62_phi = x_63;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_74_save = x_62;
-          const int x_75 = tree[x_74_save].rightIndex;
-          if ((x_75 == -1)) {
-            tree[x_74_save].rightIndex = 1;
-            const BST tint_symbol_3 = {5, -1, -1};
-            tree[1] = tint_symbol_3;
-            x_90_phi = true;
-            break;
-          } else {
-            x_80 = tree[x_74_save].rightIndex;
-            x_63_phi = x_80;
-            {
-              x_63 = x_63_phi;
-              x_62_phi = x_63;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_63 = x_63_phi;
-          x_62_phi = x_63;
-        }
-      }
-      if (x_90_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_95_phi = 0;
-  bool x_123_phi = false;
-  switch(0u) {
-    default: {
-      x_95_phi = 0;
-      while (true) {
-        int x_121 = 0;
-        int x_113 = 0;
-        int x_96 = 0;
-        int x_96_phi = 0;
-        const int x_95 = x_95_phi;
-        x_123_phi = false;
-        if ((x_95 <= 2)) {
-        } else {
-          break;
-        }
-        const int x_102 = tree[x_95].data;
-        if ((12 <= x_102)) {
-          const int x_115_save = x_95;
-          const int x_116 = tree[x_115_save].leftIndex;
-          if ((x_116 == -1)) {
-            tree[x_115_save].leftIndex = 2;
-            const BST tint_symbol_4 = {12, -1, -1};
-            tree[2] = tint_symbol_4;
-            x_123_phi = true;
-            break;
-          } else {
-            x_121 = tree[x_115_save].leftIndex;
-            x_96_phi = x_121;
-            {
-              x_96 = x_96_phi;
-              x_95_phi = x_96;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_107_save = x_95;
-          const int x_108 = tree[x_107_save].rightIndex;
-          if ((x_108 == -1)) {
-            tree[x_107_save].rightIndex = 2;
-            const BST tint_symbol_5 = {12, -1, -1};
-            tree[2] = tint_symbol_5;
-            x_123_phi = true;
-            break;
-          } else {
-            x_113 = tree[x_107_save].rightIndex;
-            x_96_phi = x_113;
-            {
-              x_96 = x_96_phi;
-              x_95_phi = x_96;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_96 = x_96_phi;
-          x_95_phi = x_96;
-        }
-      }
-      if (x_123_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_128_phi = 0;
-  bool x_156_phi = false;
-  switch(0u) {
-    default: {
-      x_128_phi = 0;
-      while (true) {
-        int x_154 = 0;
-        int x_146 = 0;
-        int x_129 = 0;
-        int x_129_phi = 0;
-        const int x_128 = x_128_phi;
-        x_156_phi = false;
-        if ((x_128 <= 3)) {
-        } else {
-          break;
-        }
-        const int x_135 = tree[x_128].data;
-        if ((15 <= x_135)) {
-          const int x_148_save = x_128;
-          const int x_149 = tree[x_148_save].leftIndex;
-          if ((x_149 == -1)) {
-            tree[x_148_save].leftIndex = 3;
-            const BST tint_symbol_6 = {15, -1, -1};
-            tree[3] = tint_symbol_6;
-            x_156_phi = true;
-            break;
-          } else {
-            x_154 = tree[x_148_save].leftIndex;
-            x_129_phi = x_154;
-            {
-              x_129 = x_129_phi;
-              x_128_phi = x_129;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_140_save = x_128;
-          const int x_141 = tree[x_140_save].rightIndex;
-          if ((x_141 == -1)) {
-            tree[x_140_save].rightIndex = 3;
-            const BST tint_symbol_7 = {15, -1, -1};
-            tree[3] = tint_symbol_7;
-            x_156_phi = true;
-            break;
-          } else {
-            x_146 = tree[x_140_save].rightIndex;
-            x_129_phi = x_146;
-            {
-              x_129 = x_129_phi;
-              x_128_phi = x_129;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_129 = x_129_phi;
-          x_128_phi = x_129;
-        }
-      }
-      if (x_156_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_161_phi = 0;
-  bool x_189_phi = false;
-  switch(0u) {
-    default: {
-      x_161_phi = 0;
-      while (true) {
-        int x_187 = 0;
-        int x_179 = 0;
-        int x_162 = 0;
-        int x_162_phi = 0;
-        const int x_161 = x_161_phi;
-        x_189_phi = false;
-        if ((x_161 <= 4)) {
-        } else {
-          break;
-        }
-        const int x_168 = tree[x_161].data;
-        if ((7 <= x_168)) {
-          const int x_181_save = x_161;
-          const int x_182 = tree[x_181_save].leftIndex;
-          if ((x_182 == -1)) {
-            tree[x_181_save].leftIndex = 4;
-            const BST tint_symbol_8 = {7, -1, -1};
-            tree[4] = tint_symbol_8;
-            x_189_phi = true;
-            break;
-          } else {
-            x_187 = tree[x_181_save].leftIndex;
-            x_162_phi = x_187;
-            {
-              x_162 = x_162_phi;
-              x_161_phi = x_162;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_173_save = x_161;
-          const int x_174 = tree[x_173_save].rightIndex;
-          if ((x_174 == -1)) {
-            tree[x_173_save].rightIndex = 4;
-            const BST tint_symbol_9 = {7, -1, -1};
-            tree[4] = tint_symbol_9;
-            x_189_phi = true;
-            break;
-          } else {
-            x_179 = tree[x_173_save].rightIndex;
-            x_162_phi = x_179;
-            {
-              x_162 = x_162_phi;
-              x_161_phi = x_162;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_162 = x_162_phi;
-          x_161_phi = x_162;
-        }
-      }
-      if (x_189_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_194_phi = 0;
-  bool x_222_phi = false;
-  switch(0u) {
-    default: {
-      x_194_phi = 0;
-      while (true) {
-        int x_220 = 0;
-        int x_212 = 0;
-        int x_195 = 0;
-        int x_195_phi = 0;
-        const int x_194 = x_194_phi;
-        x_222_phi = false;
-        if ((x_194 <= 5)) {
-        } else {
-          break;
-        }
-        const int x_201 = tree[x_194].data;
-        if ((8 <= x_201)) {
-          const int x_214_save = x_194;
-          const int x_215 = tree[x_214_save].leftIndex;
-          if ((x_215 == -1)) {
-            tree[x_214_save].leftIndex = 5;
-            const BST tint_symbol_10 = {8, -1, -1};
-            tree[5] = tint_symbol_10;
-            x_222_phi = true;
-            break;
-          } else {
-            x_220 = tree[x_214_save].leftIndex;
-            x_195_phi = x_220;
-            {
-              x_195 = x_195_phi;
-              x_194_phi = x_195;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_206_save = x_194;
-          const int x_207 = tree[x_206_save].rightIndex;
-          if ((x_207 == -1)) {
-            tree[x_206_save].rightIndex = 5;
-            const BST tint_symbol_11 = {8, -1, -1};
-            tree[5] = tint_symbol_11;
-            x_222_phi = true;
-            break;
-          } else {
-            x_212 = tree[x_206_save].rightIndex;
-            x_195_phi = x_212;
-            {
-              x_195 = x_195_phi;
-              x_194_phi = x_195;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_195 = x_195_phi;
-          x_194_phi = x_195;
-        }
-      }
-      if (x_222_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_227_phi = 0;
-  bool x_255_phi = false;
-  switch(0u) {
-    default: {
-      x_227_phi = 0;
-      while (true) {
-        int x_253 = 0;
-        int x_245 = 0;
-        int x_228 = 0;
-        int x_228_phi = 0;
-        const int x_227 = x_227_phi;
-        x_255_phi = false;
-        if ((x_227 <= 6)) {
-        } else {
-          break;
-        }
-        const int x_234 = tree[x_227].data;
-        if ((2 <= x_234)) {
-          const int x_247_save = x_227;
-          const int x_248 = tree[x_247_save].leftIndex;
-          if ((x_248 == -1)) {
-            tree[x_247_save].leftIndex = 6;
-            const BST tint_symbol_12 = {2, -1, -1};
-            tree[6] = tint_symbol_12;
-            x_255_phi = true;
-            break;
-          } else {
-            x_253 = tree[x_247_save].leftIndex;
-            x_228_phi = x_253;
-            {
-              x_228 = x_228_phi;
-              x_227_phi = x_228;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_239_save = x_227;
-          const int x_240 = tree[x_239_save].rightIndex;
-          if ((x_240 == -1)) {
-            tree[x_239_save].rightIndex = 6;
-            const BST tint_symbol_13 = {2, -1, -1};
-            tree[6] = tint_symbol_13;
-            x_255_phi = true;
-            break;
-          } else {
-            x_245 = tree[x_239_save].rightIndex;
-            x_228_phi = x_245;
-            {
-              x_228 = x_228_phi;
-              x_227_phi = x_228;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_228 = x_228_phi;
-          x_227_phi = x_228;
-        }
-      }
-      if (x_255_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_260_phi = 0;
-  bool x_288_phi = false;
-  switch(0u) {
-    default: {
-      x_260_phi = 0;
-      while (true) {
-        int x_286 = 0;
-        int x_278 = 0;
-        int x_261 = 0;
-        int x_261_phi = 0;
-        const int x_260 = x_260_phi;
-        x_288_phi = false;
-        if ((x_260 <= 7)) {
-        } else {
-          break;
-        }
-        const int x_267 = tree[x_260].data;
-        if ((6 <= x_267)) {
-          const int x_280_save = x_260;
-          const int x_281 = tree[x_280_save].leftIndex;
-          if ((x_281 == -1)) {
-            tree[x_280_save].leftIndex = 7;
-            const BST tint_symbol_14 = {6, -1, -1};
-            tree[7] = tint_symbol_14;
-            x_288_phi = true;
-            break;
-          } else {
-            x_286 = tree[x_280_save].leftIndex;
-            x_261_phi = x_286;
-            {
-              x_261 = x_261_phi;
-              x_260_phi = x_261;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_272_save = x_260;
-          const int x_273 = tree[x_272_save].rightIndex;
-          if ((x_273 == -1)) {
-            tree[x_272_save].rightIndex = 7;
-            const BST tint_symbol_15 = {6, -1, -1};
-            tree[7] = tint_symbol_15;
-            x_288_phi = true;
-            break;
-          } else {
-            x_278 = tree[x_272_save].rightIndex;
-            x_261_phi = x_278;
-            {
-              x_261 = x_261_phi;
-              x_260_phi = x_261;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_261 = x_261_phi;
-          x_260_phi = x_261;
-        }
-      }
-      if (x_288_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_293_phi = 0;
-  bool x_321_phi = false;
-  switch(0u) {
-    default: {
-      x_293_phi = 0;
-      while (true) {
-        int x_319 = 0;
-        int x_311 = 0;
-        int x_294 = 0;
-        int x_294_phi = 0;
-        const int x_293 = x_293_phi;
-        x_321_phi = false;
-        if ((x_293 <= 8)) {
-        } else {
-          break;
-        }
-        const int x_300 = tree[x_293].data;
-        if ((17 <= x_300)) {
-          const int x_313_save = x_293;
-          const int x_314 = tree[x_313_save].leftIndex;
-          if ((x_314 == -1)) {
-            tree[x_313_save].leftIndex = 8;
-            const BST tint_symbol_16 = {17, -1, -1};
-            tree[8] = tint_symbol_16;
-            x_321_phi = true;
-            break;
-          } else {
-            x_319 = tree[x_313_save].leftIndex;
-            x_294_phi = x_319;
-            {
-              x_294 = x_294_phi;
-              x_293_phi = x_294;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_305_save = x_293;
-          const int x_306 = tree[x_305_save].rightIndex;
-          if ((x_306 == -1)) {
-            tree[x_305_save].rightIndex = 8;
-            const BST tint_symbol_17 = {17, -1, -1};
-            tree[8] = tint_symbol_17;
-            x_321_phi = true;
-            break;
-          } else {
-            x_311 = tree[x_305_save].rightIndex;
-            x_294_phi = x_311;
-            {
-              x_294 = x_294_phi;
-              x_293_phi = x_294;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_294 = x_294_phi;
-          x_293_phi = x_294;
-        }
-      }
-      if (x_321_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_326_phi = 0;
-  bool x_354_phi = false;
-  switch(0u) {
-    default: {
-      x_326_phi = 0;
-      while (true) {
-        int x_352 = 0;
-        int x_344 = 0;
-        int x_327 = 0;
-        int x_327_phi = 0;
-        const int x_326 = x_326_phi;
-        x_354_phi = false;
-        if ((x_326 <= 9)) {
-        } else {
-          break;
-        }
-        const int x_333 = tree[x_326].data;
-        if ((13 <= x_333)) {
-          const int x_346_save = x_326;
-          const int x_347 = tree[x_346_save].leftIndex;
-          if ((x_347 == -1)) {
-            tree[x_346_save].leftIndex = 9;
-            const BST tint_symbol_18 = {13, -1, -1};
-            tree[9] = tint_symbol_18;
-            x_354_phi = true;
-            break;
-          } else {
-            x_352 = tree[x_346_save].leftIndex;
-            x_327_phi = x_352;
-            {
-              x_327 = x_327_phi;
-              x_326_phi = x_327;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_338_save = x_326;
-          const int x_339 = tree[x_338_save].rightIndex;
-          if ((x_339 == -1)) {
-            tree[x_338_save].rightIndex = 9;
-            const BST tint_symbol_19 = {13, -1, -1};
-            tree[9] = tint_symbol_19;
-            x_354_phi = true;
-            break;
-          } else {
-            x_344 = tree[x_338_save].rightIndex;
-            x_327_phi = x_344;
-            {
-              x_327 = x_327_phi;
-              x_326_phi = x_327;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_327 = x_327_phi;
-          x_326_phi = x_327;
-        }
-      }
-      if (x_354_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  x_357_phi = 0;
-  x_360_phi = 0;
-  x_362_phi = 0;
-  while (true) {
-    int x_392 = 0;
-    int x_402 = 0;
-    int x_407 = 0;
-    int x_363 = 0;
-    int x_358_phi = 0;
-    int x_361_phi = 0;
-    const int x_357 = x_357_phi;
-    x_360 = x_360_phi;
-    const int x_362 = x_362_phi;
-    const int x_365 = (6 - 15);
-    if ((x_362 < 20)) {
-    } else {
-      break;
-    }
-    int x_374_phi = 0;
-    int x_392_phi = 0;
-    bool x_393_phi = false;
-    switch(0u) {
-      default: {
-        x_374_phi = 0;
-        while (true) {
-          const int x_374 = x_374_phi;
-          x_392_phi = x_357;
-          x_393_phi = false;
-          if ((x_374 != -1)) {
-          } else {
-            break;
-          }
-          const BST x_381 = tree[x_374];
-          const int x_382 = x_381.data;
-          const int x_383 = x_381.leftIndex;
-          const int x_385 = x_381.rightIndex;
-          if ((x_382 == x_362)) {
-            x_392_phi = x_362;
-            x_393_phi = true;
-            break;
-          }
-          const float x_389 = x_GLF_color[((3u <= 3u) ? 3u : 3u)];
-          {
-            x_374_phi = (!((x_362 <= x_382)) ? x_385 : x_383);
-          }
-        }
-        x_392 = x_392_phi;
-        const bool x_393 = x_393_phi;
-        x_358_phi = x_392;
-        if (x_393) {
-          break;
-        }
-        x_358_phi = -1;
-        break;
-      }
-    }
-    int x_358 = 0;
-    int x_401 = 0;
-    int x_406 = 0;
-    int x_402_phi = 0;
-    int x_407_phi = 0;
-    x_358 = x_358_phi;
-    switch(x_362) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_402_phi = x_360;
-        if ((x_358 == asint(x_362))) {
-          x_401 = asint((x_360 + asint(1)));
-          x_402_phi = x_401;
-        }
-        x_402 = x_402_phi;
-        x_361_phi = x_402;
-        break;
-      }
-      default: {
-        x_407_phi = x_360;
-        if ((x_358 == asint(-1))) {
-          x_406 = asint((x_360 + asint(1)));
-          x_407_phi = x_406;
-        }
-        x_407 = x_407_phi;
-        x_361_phi = x_407;
-        break;
-      }
-    }
-    const int x_361 = x_361_phi;
-    {
-      x_363 = (x_362 + 1);
-      x_357_phi = x_358;
-      x_360_phi = x_361;
-      x_362_phi = x_363;
-    }
-  }
-  if ((x_360 == asint(20))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_20 = {x_GLF_color};
-  return tint_symbol_20;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.msl
deleted file mode 100644
index bb781cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.msl
+++ /dev/null
@@ -1,770 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_22) {
-  tint_array_wrapper tree = {};
-  int x_360 = 0;
-  int x_62_phi = 0;
-  bool x_90_phi = false;
-  int x_357_phi = 0;
-  int x_360_phi = 0;
-  int x_362_phi = 0;
-  BST const tint_symbol_2 = {.data=9, .leftIndex=-1, .rightIndex=-1};
-  tree.arr[0] = tint_symbol_2;
-  switch(0u) {
-    default: {
-      x_62_phi = 0;
-      while (true) {
-        int x_88 = 0;
-        int x_80 = 0;
-        int x_63 = 0;
-        int x_63_phi = 0;
-        int const x_62 = x_62_phi;
-        x_90_phi = false;
-        if ((x_62 <= 1)) {
-        } else {
-          break;
-        }
-        int const x_69 = tree.arr[x_62].data;
-        if ((5 <= x_69)) {
-          int const x_82_save = x_62;
-          int const x_83 = tree.arr[x_82_save].leftIndex;
-          if ((x_83 == -1)) {
-            tree.arr[x_82_save].leftIndex = 1;
-            BST const tint_symbol_3 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_3;
-            x_90_phi = true;
-            break;
-          } else {
-            x_88 = tree.arr[x_82_save].leftIndex;
-            x_63_phi = x_88;
-            {
-              x_63 = x_63_phi;
-              x_62_phi = x_63;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_74_save = x_62;
-          int const x_75 = tree.arr[x_74_save].rightIndex;
-          if ((x_75 == -1)) {
-            tree.arr[x_74_save].rightIndex = 1;
-            BST const tint_symbol_4 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_4;
-            x_90_phi = true;
-            break;
-          } else {
-            x_80 = tree.arr[x_74_save].rightIndex;
-            x_63_phi = x_80;
-            {
-              x_63 = x_63_phi;
-              x_62_phi = x_63;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_63 = x_63_phi;
-          x_62_phi = x_63;
-        }
-      }
-      bool const x_90 = x_90_phi;
-      if (x_90) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_95_phi = 0;
-  bool x_123_phi = false;
-  switch(0u) {
-    default: {
-      x_95_phi = 0;
-      while (true) {
-        int x_121 = 0;
-        int x_113 = 0;
-        int x_96 = 0;
-        int x_96_phi = 0;
-        int const x_95 = x_95_phi;
-        x_123_phi = false;
-        if ((x_95 <= 2)) {
-        } else {
-          break;
-        }
-        int const x_102 = tree.arr[x_95].data;
-        if ((12 <= x_102)) {
-          int const x_115_save = x_95;
-          int const x_116 = tree.arr[x_115_save].leftIndex;
-          if ((x_116 == -1)) {
-            tree.arr[x_115_save].leftIndex = 2;
-            BST const tint_symbol_5 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[2] = tint_symbol_5;
-            x_123_phi = true;
-            break;
-          } else {
-            x_121 = tree.arr[x_115_save].leftIndex;
-            x_96_phi = x_121;
-            {
-              x_96 = x_96_phi;
-              x_95_phi = x_96;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_107_save = x_95;
-          int const x_108 = tree.arr[x_107_save].rightIndex;
-          if ((x_108 == -1)) {
-            tree.arr[x_107_save].rightIndex = 2;
-            BST const tint_symbol_6 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[2] = tint_symbol_6;
-            x_123_phi = true;
-            break;
-          } else {
-            x_113 = tree.arr[x_107_save].rightIndex;
-            x_96_phi = x_113;
-            {
-              x_96 = x_96_phi;
-              x_95_phi = x_96;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_96 = x_96_phi;
-          x_95_phi = x_96;
-        }
-      }
-      bool const x_123 = x_123_phi;
-      if (x_123) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_128_phi = 0;
-  bool x_156_phi = false;
-  switch(0u) {
-    default: {
-      x_128_phi = 0;
-      while (true) {
-        int x_154 = 0;
-        int x_146 = 0;
-        int x_129 = 0;
-        int x_129_phi = 0;
-        int const x_128 = x_128_phi;
-        x_156_phi = false;
-        if ((x_128 <= 3)) {
-        } else {
-          break;
-        }
-        int const x_135 = tree.arr[x_128].data;
-        if ((15 <= x_135)) {
-          int const x_148_save = x_128;
-          int const x_149 = tree.arr[x_148_save].leftIndex;
-          if ((x_149 == -1)) {
-            tree.arr[x_148_save].leftIndex = 3;
-            BST const tint_symbol_7 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_7;
-            x_156_phi = true;
-            break;
-          } else {
-            x_154 = tree.arr[x_148_save].leftIndex;
-            x_129_phi = x_154;
-            {
-              x_129 = x_129_phi;
-              x_128_phi = x_129;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_140_save = x_128;
-          int const x_141 = tree.arr[x_140_save].rightIndex;
-          if ((x_141 == -1)) {
-            tree.arr[x_140_save].rightIndex = 3;
-            BST const tint_symbol_8 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_8;
-            x_156_phi = true;
-            break;
-          } else {
-            x_146 = tree.arr[x_140_save].rightIndex;
-            x_129_phi = x_146;
-            {
-              x_129 = x_129_phi;
-              x_128_phi = x_129;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_129 = x_129_phi;
-          x_128_phi = x_129;
-        }
-      }
-      bool const x_156 = x_156_phi;
-      if (x_156) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_161_phi = 0;
-  bool x_189_phi = false;
-  switch(0u) {
-    default: {
-      x_161_phi = 0;
-      while (true) {
-        int x_187 = 0;
-        int x_179 = 0;
-        int x_162 = 0;
-        int x_162_phi = 0;
-        int const x_161 = x_161_phi;
-        x_189_phi = false;
-        if ((x_161 <= 4)) {
-        } else {
-          break;
-        }
-        int const x_168 = tree.arr[x_161].data;
-        if ((7 <= x_168)) {
-          int const x_181_save = x_161;
-          int const x_182 = tree.arr[x_181_save].leftIndex;
-          if ((x_182 == -1)) {
-            tree.arr[x_181_save].leftIndex = 4;
-            BST const tint_symbol_9 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_9;
-            x_189_phi = true;
-            break;
-          } else {
-            x_187 = tree.arr[x_181_save].leftIndex;
-            x_162_phi = x_187;
-            {
-              x_162 = x_162_phi;
-              x_161_phi = x_162;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_173_save = x_161;
-          int const x_174 = tree.arr[x_173_save].rightIndex;
-          if ((x_174 == -1)) {
-            tree.arr[x_173_save].rightIndex = 4;
-            BST const tint_symbol_10 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_10;
-            x_189_phi = true;
-            break;
-          } else {
-            x_179 = tree.arr[x_173_save].rightIndex;
-            x_162_phi = x_179;
-            {
-              x_162 = x_162_phi;
-              x_161_phi = x_162;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_162 = x_162_phi;
-          x_161_phi = x_162;
-        }
-      }
-      bool const x_189 = x_189_phi;
-      if (x_189) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_194_phi = 0;
-  bool x_222_phi = false;
-  switch(0u) {
-    default: {
-      x_194_phi = 0;
-      while (true) {
-        int x_220 = 0;
-        int x_212 = 0;
-        int x_195 = 0;
-        int x_195_phi = 0;
-        int const x_194 = x_194_phi;
-        x_222_phi = false;
-        if ((x_194 <= 5)) {
-        } else {
-          break;
-        }
-        int const x_201 = tree.arr[x_194].data;
-        if ((8 <= x_201)) {
-          int const x_214_save = x_194;
-          int const x_215 = tree.arr[x_214_save].leftIndex;
-          if ((x_215 == -1)) {
-            tree.arr[x_214_save].leftIndex = 5;
-            BST const tint_symbol_11 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_11;
-            x_222_phi = true;
-            break;
-          } else {
-            x_220 = tree.arr[x_214_save].leftIndex;
-            x_195_phi = x_220;
-            {
-              x_195 = x_195_phi;
-              x_194_phi = x_195;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_206_save = x_194;
-          int const x_207 = tree.arr[x_206_save].rightIndex;
-          if ((x_207 == -1)) {
-            tree.arr[x_206_save].rightIndex = 5;
-            BST const tint_symbol_12 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_12;
-            x_222_phi = true;
-            break;
-          } else {
-            x_212 = tree.arr[x_206_save].rightIndex;
-            x_195_phi = x_212;
-            {
-              x_195 = x_195_phi;
-              x_194_phi = x_195;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_195 = x_195_phi;
-          x_194_phi = x_195;
-        }
-      }
-      bool const x_222 = x_222_phi;
-      if (x_222) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_227_phi = 0;
-  bool x_255_phi = false;
-  switch(0u) {
-    default: {
-      x_227_phi = 0;
-      while (true) {
-        int x_253 = 0;
-        int x_245 = 0;
-        int x_228 = 0;
-        int x_228_phi = 0;
-        int const x_227 = x_227_phi;
-        x_255_phi = false;
-        if ((x_227 <= 6)) {
-        } else {
-          break;
-        }
-        int const x_234 = tree.arr[x_227].data;
-        if ((2 <= x_234)) {
-          int const x_247_save = x_227;
-          int const x_248 = tree.arr[x_247_save].leftIndex;
-          if ((x_248 == -1)) {
-            tree.arr[x_247_save].leftIndex = 6;
-            BST const tint_symbol_13 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_13;
-            x_255_phi = true;
-            break;
-          } else {
-            x_253 = tree.arr[x_247_save].leftIndex;
-            x_228_phi = x_253;
-            {
-              x_228 = x_228_phi;
-              x_227_phi = x_228;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_239_save = x_227;
-          int const x_240 = tree.arr[x_239_save].rightIndex;
-          if ((x_240 == -1)) {
-            tree.arr[x_239_save].rightIndex = 6;
-            BST const tint_symbol_14 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_14;
-            x_255_phi = true;
-            break;
-          } else {
-            x_245 = tree.arr[x_239_save].rightIndex;
-            x_228_phi = x_245;
-            {
-              x_228 = x_228_phi;
-              x_227_phi = x_228;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_228 = x_228_phi;
-          x_227_phi = x_228;
-        }
-      }
-      bool const x_255 = x_255_phi;
-      if (x_255) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_260_phi = 0;
-  bool x_288_phi = false;
-  switch(0u) {
-    default: {
-      x_260_phi = 0;
-      while (true) {
-        int x_286 = 0;
-        int x_278 = 0;
-        int x_261 = 0;
-        int x_261_phi = 0;
-        int const x_260 = x_260_phi;
-        x_288_phi = false;
-        if ((x_260 <= 7)) {
-        } else {
-          break;
-        }
-        int const x_267 = tree.arr[x_260].data;
-        if ((6 <= x_267)) {
-          int const x_280_save = x_260;
-          int const x_281 = tree.arr[x_280_save].leftIndex;
-          if ((x_281 == -1)) {
-            tree.arr[x_280_save].leftIndex = 7;
-            BST const tint_symbol_15 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_15;
-            x_288_phi = true;
-            break;
-          } else {
-            x_286 = tree.arr[x_280_save].leftIndex;
-            x_261_phi = x_286;
-            {
-              x_261 = x_261_phi;
-              x_260_phi = x_261;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_272_save = x_260;
-          int const x_273 = tree.arr[x_272_save].rightIndex;
-          if ((x_273 == -1)) {
-            tree.arr[x_272_save].rightIndex = 7;
-            BST const tint_symbol_16 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_16;
-            x_288_phi = true;
-            break;
-          } else {
-            x_278 = tree.arr[x_272_save].rightIndex;
-            x_261_phi = x_278;
-            {
-              x_261 = x_261_phi;
-              x_260_phi = x_261;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_261 = x_261_phi;
-          x_260_phi = x_261;
-        }
-      }
-      bool const x_288 = x_288_phi;
-      if (x_288) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_293_phi = 0;
-  bool x_321_phi = false;
-  switch(0u) {
-    default: {
-      x_293_phi = 0;
-      while (true) {
-        int x_319 = 0;
-        int x_311 = 0;
-        int x_294 = 0;
-        int x_294_phi = 0;
-        int const x_293 = x_293_phi;
-        x_321_phi = false;
-        if ((x_293 <= 8)) {
-        } else {
-          break;
-        }
-        int const x_300 = tree.arr[x_293].data;
-        if ((17 <= x_300)) {
-          int const x_313_save = x_293;
-          int const x_314 = tree.arr[x_313_save].leftIndex;
-          if ((x_314 == -1)) {
-            tree.arr[x_313_save].leftIndex = 8;
-            BST const tint_symbol_17 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_17;
-            x_321_phi = true;
-            break;
-          } else {
-            x_319 = tree.arr[x_313_save].leftIndex;
-            x_294_phi = x_319;
-            {
-              x_294 = x_294_phi;
-              x_293_phi = x_294;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_305_save = x_293;
-          int const x_306 = tree.arr[x_305_save].rightIndex;
-          if ((x_306 == -1)) {
-            tree.arr[x_305_save].rightIndex = 8;
-            BST const tint_symbol_18 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_18;
-            x_321_phi = true;
-            break;
-          } else {
-            x_311 = tree.arr[x_305_save].rightIndex;
-            x_294_phi = x_311;
-            {
-              x_294 = x_294_phi;
-              x_293_phi = x_294;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_294 = x_294_phi;
-          x_293_phi = x_294;
-        }
-      }
-      bool const x_321 = x_321_phi;
-      if (x_321) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_326_phi = 0;
-  bool x_354_phi = false;
-  switch(0u) {
-    default: {
-      x_326_phi = 0;
-      while (true) {
-        int x_352 = 0;
-        int x_344 = 0;
-        int x_327 = 0;
-        int x_327_phi = 0;
-        int const x_326 = x_326_phi;
-        x_354_phi = false;
-        if ((x_326 <= 9)) {
-        } else {
-          break;
-        }
-        int const x_333 = tree.arr[x_326].data;
-        if ((13 <= x_333)) {
-          int const x_346_save = x_326;
-          int const x_347 = tree.arr[x_346_save].leftIndex;
-          if ((x_347 == -1)) {
-            tree.arr[x_346_save].leftIndex = 9;
-            BST const tint_symbol_19 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_19;
-            x_354_phi = true;
-            break;
-          } else {
-            x_352 = tree.arr[x_346_save].leftIndex;
-            x_327_phi = x_352;
-            {
-              x_327 = x_327_phi;
-              x_326_phi = x_327;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_338_save = x_326;
-          int const x_339 = tree.arr[x_338_save].rightIndex;
-          if ((x_339 == -1)) {
-            tree.arr[x_338_save].rightIndex = 9;
-            BST const tint_symbol_20 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_20;
-            x_354_phi = true;
-            break;
-          } else {
-            x_344 = tree.arr[x_338_save].rightIndex;
-            x_327_phi = x_344;
-            {
-              x_327 = x_327_phi;
-              x_326_phi = x_327;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_327 = x_327_phi;
-          x_326_phi = x_327;
-        }
-      }
-      bool const x_354 = x_354_phi;
-      if (x_354) {
-        break;
-      }
-      break;
-    }
-  }
-  x_357_phi = 0;
-  x_360_phi = 0;
-  x_362_phi = 0;
-  while (true) {
-    int x_392 = 0;
-    int x_402 = 0;
-    int x_407 = 0;
-    int x_363 = 0;
-    int x_358_phi = 0;
-    int x_361_phi = 0;
-    int const x_357 = x_357_phi;
-    x_360 = x_360_phi;
-    int const x_362 = x_362_phi;
-    int const x_365 = as_type<int>((as_type<uint>(6) - as_type<uint>(15)));
-    if ((x_362 < 20)) {
-    } else {
-      break;
-    }
-    int x_374_phi = 0;
-    int x_392_phi = 0;
-    bool x_393_phi = false;
-    switch(0u) {
-      default: {
-        x_374_phi = 0;
-        while (true) {
-          int const x_374 = x_374_phi;
-          x_392_phi = x_357;
-          x_393_phi = false;
-          if ((x_374 != -1)) {
-          } else {
-            break;
-          }
-          BST const x_381 = tree.arr[x_374];
-          int const x_382 = x_381.data;
-          int const x_383 = x_381.leftIndex;
-          int const x_385 = x_381.rightIndex;
-          if ((x_382 == x_362)) {
-            x_392_phi = x_362;
-            x_393_phi = true;
-            break;
-          }
-          float const x_389 = (*(tint_symbol_22))[select(3u, 3u, (3u <= 3u))];
-          {
-            x_374_phi = select(x_383, x_385, !((x_362 <= x_382)));
-          }
-        }
-        x_392 = x_392_phi;
-        bool const x_393 = x_393_phi;
-        x_358_phi = x_392;
-        if (x_393) {
-          break;
-        }
-        x_358_phi = -1;
-        break;
-      }
-    }
-    int x_358 = 0;
-    int x_401 = 0;
-    int x_406 = 0;
-    int x_402_phi = 0;
-    int x_407_phi = 0;
-    x_358 = x_358_phi;
-    switch(x_362) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_402_phi = x_360;
-        if ((x_358 == as_type<int>(x_362))) {
-          x_401 = as_type<int>(as_type<int>((as_type<uint>(x_360) + as_type<uint>(as_type<int>(1)))));
-          x_402_phi = x_401;
-        }
-        x_402 = x_402_phi;
-        x_361_phi = x_402;
-        break;
-      }
-      default: {
-        x_407_phi = x_360;
-        if ((x_358 == as_type<int>(-1))) {
-          x_406 = as_type<int>(as_type<int>((as_type<uint>(x_360) + as_type<uint>(as_type<int>(1)))));
-          x_407_phi = x_406;
-        }
-        x_407 = x_407_phi;
-        x_361_phi = x_407;
-        break;
-      }
-    }
-    int const x_361 = x_361_phi;
-    {
-      x_363 = as_type<int>((as_type<uint>(x_362) + as_type<uint>(1)));
-      x_357_phi = x_358;
-      x_360_phi = x_361;
-      x_362_phi = x_363;
-    }
-  }
-  if ((x_360 == as_type<int>(20))) {
-    *(tint_symbol_22) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_22) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_23) {
-  main_1(tint_symbol_23);
-  main_out const tint_symbol_21 = {.x_GLF_color_1=*(tint_symbol_23)};
-  return tint_symbol_21;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_24 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_24));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.spvasm
deleted file mode 100644
index 6884591..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,1172 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 626
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %x_360 "x_360"
-               OpName %x_62_phi "x_62_phi"
-               OpName %x_90_phi "x_90_phi"
-               OpName %x_357_phi "x_357_phi"
-               OpName %x_360_phi "x_360_phi"
-               OpName %x_362_phi "x_362_phi"
-               OpName %x_88 "x_88"
-               OpName %x_80 "x_80"
-               OpName %x_63 "x_63"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_123_phi "x_123_phi"
-               OpName %x_121 "x_121"
-               OpName %x_113 "x_113"
-               OpName %x_96 "x_96"
-               OpName %x_96_phi "x_96_phi"
-               OpName %x_128_phi "x_128_phi"
-               OpName %x_156_phi "x_156_phi"
-               OpName %x_154 "x_154"
-               OpName %x_146 "x_146"
-               OpName %x_129 "x_129"
-               OpName %x_129_phi "x_129_phi"
-               OpName %x_161_phi "x_161_phi"
-               OpName %x_189_phi "x_189_phi"
-               OpName %x_187 "x_187"
-               OpName %x_179 "x_179"
-               OpName %x_162 "x_162"
-               OpName %x_162_phi "x_162_phi"
-               OpName %x_194_phi "x_194_phi"
-               OpName %x_222_phi "x_222_phi"
-               OpName %x_220 "x_220"
-               OpName %x_212 "x_212"
-               OpName %x_195 "x_195"
-               OpName %x_195_phi "x_195_phi"
-               OpName %x_227_phi "x_227_phi"
-               OpName %x_255_phi "x_255_phi"
-               OpName %x_253 "x_253"
-               OpName %x_245 "x_245"
-               OpName %x_228 "x_228"
-               OpName %x_228_phi "x_228_phi"
-               OpName %x_260_phi "x_260_phi"
-               OpName %x_288_phi "x_288_phi"
-               OpName %x_286 "x_286"
-               OpName %x_278 "x_278"
-               OpName %x_261 "x_261"
-               OpName %x_261_phi "x_261_phi"
-               OpName %x_293_phi "x_293_phi"
-               OpName %x_321_phi "x_321_phi"
-               OpName %x_319 "x_319"
-               OpName %x_311 "x_311"
-               OpName %x_294 "x_294"
-               OpName %x_294_phi "x_294_phi"
-               OpName %x_326_phi "x_326_phi"
-               OpName %x_354_phi "x_354_phi"
-               OpName %x_352 "x_352"
-               OpName %x_344 "x_344"
-               OpName %x_327 "x_327"
-               OpName %x_327_phi "x_327_phi"
-               OpName %x_392 "x_392"
-               OpName %x_402 "x_402"
-               OpName %x_407 "x_407"
-               OpName %x_363 "x_363"
-               OpName %x_358_phi "x_358_phi"
-               OpName %x_361_phi "x_361_phi"
-               OpName %x_374_phi "x_374_phi"
-               OpName %x_392_phi "x_392_phi"
-               OpName %x_393_phi "x_393_phi"
-               OpName %x_358 "x_358"
-               OpName %x_401 "x_401"
-               OpName %x_406 "x_406"
-               OpName %x_402_phi "x_402_phi"
-               OpName %x_407_phi "x_407_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Function__arr_BST_uint_10 = OpTypePointer Function %_arr_BST_uint_10
-         %19 = OpConstantNull %_arr_BST_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-%_ptr_Function_BST = OpTypePointer Function %BST
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-         %36 = OpConstantComposite %BST %int_9 %int_n1 %int_n1
-     %uint_0 = OpConstant %uint 0
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-         %71 = OpConstantComposite %BST %int_5 %int_n1 %int_n1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %int_2 = OpConstant %int 2
-     %int_12 = OpConstant %int 12
-        %126 = OpConstantComposite %BST %int_12 %int_n1 %int_n1
-      %int_3 = OpConstant %int 3
-     %int_15 = OpConstant %int 15
-        %179 = OpConstantComposite %BST %int_15 %int_n1 %int_n1
-      %int_4 = OpConstant %int 4
-      %int_7 = OpConstant %int 7
-        %232 = OpConstantComposite %BST %int_7 %int_n1 %int_n1
-      %int_8 = OpConstant %int 8
-        %284 = OpConstantComposite %BST %int_8 %int_n1 %int_n1
-      %int_6 = OpConstant %int 6
-        %336 = OpConstantComposite %BST %int_2 %int_n1 %int_n1
-        %387 = OpConstantComposite %BST %int_6 %int_n1 %int_n1
-     %int_17 = OpConstant %int 17
-        %439 = OpConstantComposite %BST %int_17 %int_n1 %int_n1
-     %int_13 = OpConstant %int 13
-        %491 = OpConstantComposite %BST %int_13 %int_n1 %int_n1
-     %int_20 = OpConstant %int 20
-     %uint_3 = OpConstant %uint 3
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %613 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %614 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %615 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %tree = OpVariable %_ptr_Function__arr_BST_uint_10 Function %19
-      %x_360 = OpVariable %_ptr_Function_int Function %22
-   %x_62_phi = OpVariable %_ptr_Function_int Function %22
-   %x_90_phi = OpVariable %_ptr_Function_bool Function %27
-  %x_357_phi = OpVariable %_ptr_Function_int Function %22
-  %x_360_phi = OpVariable %_ptr_Function_int Function %22
-  %x_362_phi = OpVariable %_ptr_Function_int Function %22
-       %x_88 = OpVariable %_ptr_Function_int Function %22
-       %x_80 = OpVariable %_ptr_Function_int Function %22
-       %x_63 = OpVariable %_ptr_Function_int Function %22
-   %x_63_phi = OpVariable %_ptr_Function_int Function %22
-   %x_95_phi = OpVariable %_ptr_Function_int Function %22
-  %x_123_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_121 = OpVariable %_ptr_Function_int Function %22
-      %x_113 = OpVariable %_ptr_Function_int Function %22
-       %x_96 = OpVariable %_ptr_Function_int Function %22
-   %x_96_phi = OpVariable %_ptr_Function_int Function %22
-  %x_128_phi = OpVariable %_ptr_Function_int Function %22
-  %x_156_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_154 = OpVariable %_ptr_Function_int Function %22
-      %x_146 = OpVariable %_ptr_Function_int Function %22
-      %x_129 = OpVariable %_ptr_Function_int Function %22
-  %x_129_phi = OpVariable %_ptr_Function_int Function %22
-  %x_161_phi = OpVariable %_ptr_Function_int Function %22
-  %x_189_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_187 = OpVariable %_ptr_Function_int Function %22
-      %x_179 = OpVariable %_ptr_Function_int Function %22
-      %x_162 = OpVariable %_ptr_Function_int Function %22
-  %x_162_phi = OpVariable %_ptr_Function_int Function %22
-  %x_194_phi = OpVariable %_ptr_Function_int Function %22
-  %x_222_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_220 = OpVariable %_ptr_Function_int Function %22
-      %x_212 = OpVariable %_ptr_Function_int Function %22
-      %x_195 = OpVariable %_ptr_Function_int Function %22
-  %x_195_phi = OpVariable %_ptr_Function_int Function %22
-  %x_227_phi = OpVariable %_ptr_Function_int Function %22
-  %x_255_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_253 = OpVariable %_ptr_Function_int Function %22
-      %x_245 = OpVariable %_ptr_Function_int Function %22
-      %x_228 = OpVariable %_ptr_Function_int Function %22
-  %x_228_phi = OpVariable %_ptr_Function_int Function %22
-  %x_260_phi = OpVariable %_ptr_Function_int Function %22
-  %x_288_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_286 = OpVariable %_ptr_Function_int Function %22
-      %x_278 = OpVariable %_ptr_Function_int Function %22
-      %x_261 = OpVariable %_ptr_Function_int Function %22
-  %x_261_phi = OpVariable %_ptr_Function_int Function %22
-  %x_293_phi = OpVariable %_ptr_Function_int Function %22
-  %x_321_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_319 = OpVariable %_ptr_Function_int Function %22
-      %x_311 = OpVariable %_ptr_Function_int Function %22
-      %x_294 = OpVariable %_ptr_Function_int Function %22
-  %x_294_phi = OpVariable %_ptr_Function_int Function %22
-  %x_326_phi = OpVariable %_ptr_Function_int Function %22
-  %x_354_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_352 = OpVariable %_ptr_Function_int Function %22
-      %x_344 = OpVariable %_ptr_Function_int Function %22
-      %x_327 = OpVariable %_ptr_Function_int Function %22
-  %x_327_phi = OpVariable %_ptr_Function_int Function %22
-      %x_392 = OpVariable %_ptr_Function_int Function %22
-      %x_402 = OpVariable %_ptr_Function_int Function %22
-      %x_407 = OpVariable %_ptr_Function_int Function %22
-      %x_363 = OpVariable %_ptr_Function_int Function %22
-  %x_358_phi = OpVariable %_ptr_Function_int Function %22
-  %x_361_phi = OpVariable %_ptr_Function_int Function %22
-  %x_374_phi = OpVariable %_ptr_Function_int Function %22
-  %x_392_phi = OpVariable %_ptr_Function_int Function %22
-  %x_393_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_358 = OpVariable %_ptr_Function_int Function %22
-      %x_401 = OpVariable %_ptr_Function_int Function %22
-      %x_406 = OpVariable %_ptr_Function_int Function %22
-  %x_402_phi = OpVariable %_ptr_Function_int Function %22
-  %x_407_phi = OpVariable %_ptr_Function_int Function %22
-         %33 = OpAccessChain %_ptr_Function_BST %tree %int_0
-               OpStore %33 %36
-               OpSelectionMerge %37 None
-               OpSwitch %uint_0 %39
-         %39 = OpLabel
-               OpStore %x_62_phi %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %48 = OpLoad %int %x_62_phi
-               OpStore %x_90_phi %false
-         %51 = OpSLessThanEqual %bool %48 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %41
-         %52 = OpLabel
-         %55 = OpAccessChain %_ptr_Function_int %tree %48 %uint_0
-         %56 = OpLoad %int %55
-         %58 = OpSLessThanEqual %bool %int_5 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-         %64 = OpLoad %int %63
-         %65 = OpIEqual %bool %64 %int_n1
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-         %69 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-               OpStore %69 %int_1
-         %70 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %70 %71
-               OpStore %x_90_phi %true
-               OpBranch %41
-         %68 = OpLabel
-         %73 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-         %74 = OpLoad %int %73
-               OpStore %x_88 %74
-         %75 = OpLoad %int %x_88
-               OpStore %x_63_phi %75
-               OpBranch %42
-         %66 = OpLabel
-               OpReturn
-         %61 = OpLabel
-         %77 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-         %78 = OpLoad %int %77
-         %79 = OpIEqual %bool %78 %int_n1
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-               OpStore %83 %int_1
-         %84 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %84 %71
-               OpStore %x_90_phi %true
-               OpBranch %41
-         %82 = OpLabel
-         %85 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-         %86 = OpLoad %int %85
-               OpStore %x_80 %86
-         %87 = OpLoad %int %x_80
-               OpStore %x_63_phi %87
-               OpBranch %42
-         %80 = OpLabel
-               OpReturn
-         %59 = OpLabel
-               OpReturn
-         %42 = OpLabel
-         %88 = OpLoad %int %x_63_phi
-               OpStore %x_63 %88
-         %89 = OpLoad %int %x_63
-               OpStore %x_62_phi %89
-               OpBranch %40
-         %41 = OpLabel
-         %90 = OpLoad %bool %x_90_phi
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %91
-         %92 = OpLabel
-               OpBranch %37
-         %91 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpSelectionMerge %95 None
-               OpSwitch %uint_0 %96
-         %96 = OpLabel
-               OpStore %x_95_phi %int_0
-               OpBranch %97
-         %97 = OpLabel
-               OpLoopMerge %98 %99 None
-               OpBranch %100
-        %100 = OpLabel
-        %105 = OpLoad %int %x_95_phi
-               OpStore %x_123_phi %false
-        %107 = OpSLessThanEqual %bool %105 %int_2
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %110
-        %109 = OpLabel
-               OpBranch %108
-        %110 = OpLabel
-               OpBranch %98
-        %108 = OpLabel
-        %111 = OpAccessChain %_ptr_Function_int %tree %105 %uint_0
-        %112 = OpLoad %int %111
-        %114 = OpSLessThanEqual %bool %int_12 %112
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-        %119 = OpLoad %int %118
-        %120 = OpIEqual %bool %119 %int_n1
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-        %124 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-               OpStore %124 %int_2
-        %125 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %125 %126
-               OpStore %x_123_phi %true
-               OpBranch %98
-        %123 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-        %128 = OpLoad %int %127
-               OpStore %x_121 %128
-        %129 = OpLoad %int %x_121
-               OpStore %x_96_phi %129
-               OpBranch %99
-        %121 = OpLabel
-               OpReturn
-        %117 = OpLabel
-        %130 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-        %131 = OpLoad %int %130
-        %132 = OpIEqual %bool %131 %int_n1
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %135
-        %134 = OpLabel
-        %136 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-               OpStore %136 %int_2
-        %137 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %137 %126
-               OpStore %x_123_phi %true
-               OpBranch %98
-        %135 = OpLabel
-        %138 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-        %139 = OpLoad %int %138
-               OpStore %x_113 %139
-        %140 = OpLoad %int %x_113
-               OpStore %x_96_phi %140
-               OpBranch %99
-        %133 = OpLabel
-               OpReturn
-        %115 = OpLabel
-               OpReturn
-         %99 = OpLabel
-        %141 = OpLoad %int %x_96_phi
-               OpStore %x_96 %141
-        %142 = OpLoad %int %x_96
-               OpStore %x_95_phi %142
-               OpBranch %97
-         %98 = OpLabel
-        %143 = OpLoad %bool %x_123_phi
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %144
-        %145 = OpLabel
-               OpBranch %95
-        %144 = OpLabel
-               OpBranch %95
-         %95 = OpLabel
-               OpSelectionMerge %148 None
-               OpSwitch %uint_0 %149
-        %149 = OpLabel
-               OpStore %x_128_phi %int_0
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %158 = OpLoad %int %x_128_phi
-               OpStore %x_156_phi %false
-        %160 = OpSLessThanEqual %bool %158 %int_3
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %163
-        %162 = OpLabel
-               OpBranch %161
-        %163 = OpLabel
-               OpBranch %151
-        %161 = OpLabel
-        %164 = OpAccessChain %_ptr_Function_int %tree %158 %uint_0
-        %165 = OpLoad %int %164
-        %167 = OpSLessThanEqual %bool %int_15 %165
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-        %171 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-        %172 = OpLoad %int %171
-        %173 = OpIEqual %bool %172 %int_n1
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-        %177 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-               OpStore %177 %int_3
-        %178 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %178 %179
-               OpStore %x_156_phi %true
-               OpBranch %151
-        %176 = OpLabel
-        %180 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-        %181 = OpLoad %int %180
-               OpStore %x_154 %181
-        %182 = OpLoad %int %x_154
-               OpStore %x_129_phi %182
-               OpBranch %152
-        %174 = OpLabel
-               OpReturn
-        %170 = OpLabel
-        %183 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-        %184 = OpLoad %int %183
-        %185 = OpIEqual %bool %184 %int_n1
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-        %189 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-               OpStore %189 %int_3
-        %190 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %190 %179
-               OpStore %x_156_phi %true
-               OpBranch %151
-        %188 = OpLabel
-        %191 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-        %192 = OpLoad %int %191
-               OpStore %x_146 %192
-        %193 = OpLoad %int %x_146
-               OpStore %x_129_phi %193
-               OpBranch %152
-        %186 = OpLabel
-               OpReturn
-        %168 = OpLabel
-               OpReturn
-        %152 = OpLabel
-        %194 = OpLoad %int %x_129_phi
-               OpStore %x_129 %194
-        %195 = OpLoad %int %x_129
-               OpStore %x_128_phi %195
-               OpBranch %150
-        %151 = OpLabel
-        %196 = OpLoad %bool %x_156_phi
-               OpSelectionMerge %197 None
-               OpBranchConditional %196 %198 %197
-        %198 = OpLabel
-               OpBranch %148
-        %197 = OpLabel
-               OpBranch %148
-        %148 = OpLabel
-               OpSelectionMerge %201 None
-               OpSwitch %uint_0 %202
-        %202 = OpLabel
-               OpStore %x_161_phi %int_0
-               OpBranch %203
-        %203 = OpLabel
-               OpLoopMerge %204 %205 None
-               OpBranch %206
-        %206 = OpLabel
-        %211 = OpLoad %int %x_161_phi
-               OpStore %x_189_phi %false
-        %213 = OpSLessThanEqual %bool %211 %int_4
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-               OpBranch %204
-        %214 = OpLabel
-        %217 = OpAccessChain %_ptr_Function_int %tree %211 %uint_0
-        %218 = OpLoad %int %217
-        %220 = OpSLessThanEqual %bool %int_7 %218
-               OpSelectionMerge %221 None
-               OpBranchConditional %220 %222 %223
-        %222 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-        %225 = OpLoad %int %224
-        %226 = OpIEqual %bool %225 %int_n1
-               OpSelectionMerge %227 None
-               OpBranchConditional %226 %228 %229
-        %228 = OpLabel
-        %230 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-               OpStore %230 %int_4
-        %231 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %231 %232
-               OpStore %x_189_phi %true
-               OpBranch %204
-        %229 = OpLabel
-        %233 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-        %234 = OpLoad %int %233
-               OpStore %x_187 %234
-        %235 = OpLoad %int %x_187
-               OpStore %x_162_phi %235
-               OpBranch %205
-        %227 = OpLabel
-               OpReturn
-        %223 = OpLabel
-        %236 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-        %237 = OpLoad %int %236
-        %238 = OpIEqual %bool %237 %int_n1
-               OpSelectionMerge %239 None
-               OpBranchConditional %238 %240 %241
-        %240 = OpLabel
-        %242 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-               OpStore %242 %int_4
-        %243 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %243 %232
-               OpStore %x_189_phi %true
-               OpBranch %204
-        %241 = OpLabel
-        %244 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-        %245 = OpLoad %int %244
-               OpStore %x_179 %245
-        %246 = OpLoad %int %x_179
-               OpStore %x_162_phi %246
-               OpBranch %205
-        %239 = OpLabel
-               OpReturn
-        %221 = OpLabel
-               OpReturn
-        %205 = OpLabel
-        %247 = OpLoad %int %x_162_phi
-               OpStore %x_162 %247
-        %248 = OpLoad %int %x_162
-               OpStore %x_161_phi %248
-               OpBranch %203
-        %204 = OpLabel
-        %249 = OpLoad %bool %x_189_phi
-               OpSelectionMerge %250 None
-               OpBranchConditional %249 %251 %250
-        %251 = OpLabel
-               OpBranch %201
-        %250 = OpLabel
-               OpBranch %201
-        %201 = OpLabel
-               OpSelectionMerge %254 None
-               OpSwitch %uint_0 %255
-        %255 = OpLabel
-               OpStore %x_194_phi %int_0
-               OpBranch %256
-        %256 = OpLabel
-               OpLoopMerge %257 %258 None
-               OpBranch %259
-        %259 = OpLabel
-        %264 = OpLoad %int %x_194_phi
-               OpStore %x_222_phi %false
-        %265 = OpSLessThanEqual %bool %264 %int_5
-               OpSelectionMerge %266 None
-               OpBranchConditional %265 %267 %268
-        %267 = OpLabel
-               OpBranch %266
-        %268 = OpLabel
-               OpBranch %257
-        %266 = OpLabel
-        %269 = OpAccessChain %_ptr_Function_int %tree %264 %uint_0
-        %270 = OpLoad %int %269
-        %272 = OpSLessThanEqual %bool %int_8 %270
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %275
-        %274 = OpLabel
-        %276 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-        %277 = OpLoad %int %276
-        %278 = OpIEqual %bool %277 %int_n1
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
-        %282 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-               OpStore %282 %int_5
-        %283 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %283 %284
-               OpStore %x_222_phi %true
-               OpBranch %257
-        %281 = OpLabel
-        %285 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-        %286 = OpLoad %int %285
-               OpStore %x_220 %286
-        %287 = OpLoad %int %x_220
-               OpStore %x_195_phi %287
-               OpBranch %258
-        %279 = OpLabel
-               OpReturn
-        %275 = OpLabel
-        %288 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-        %289 = OpLoad %int %288
-        %290 = OpIEqual %bool %289 %int_n1
-               OpSelectionMerge %291 None
-               OpBranchConditional %290 %292 %293
-        %292 = OpLabel
-        %294 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-               OpStore %294 %int_5
-        %295 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %295 %284
-               OpStore %x_222_phi %true
-               OpBranch %257
-        %293 = OpLabel
-        %296 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-        %297 = OpLoad %int %296
-               OpStore %x_212 %297
-        %298 = OpLoad %int %x_212
-               OpStore %x_195_phi %298
-               OpBranch %258
-        %291 = OpLabel
-               OpReturn
-        %273 = OpLabel
-               OpReturn
-        %258 = OpLabel
-        %299 = OpLoad %int %x_195_phi
-               OpStore %x_195 %299
-        %300 = OpLoad %int %x_195
-               OpStore %x_194_phi %300
-               OpBranch %256
-        %257 = OpLabel
-        %301 = OpLoad %bool %x_222_phi
-               OpSelectionMerge %302 None
-               OpBranchConditional %301 %303 %302
-        %303 = OpLabel
-               OpBranch %254
-        %302 = OpLabel
-               OpBranch %254
-        %254 = OpLabel
-               OpSelectionMerge %306 None
-               OpSwitch %uint_0 %307
-        %307 = OpLabel
-               OpStore %x_227_phi %int_0
-               OpBranch %308
-        %308 = OpLabel
-               OpLoopMerge %309 %310 None
-               OpBranch %311
-        %311 = OpLabel
-        %316 = OpLoad %int %x_227_phi
-               OpStore %x_255_phi %false
-        %318 = OpSLessThanEqual %bool %316 %int_6
-               OpSelectionMerge %319 None
-               OpBranchConditional %318 %320 %321
-        %320 = OpLabel
-               OpBranch %319
-        %321 = OpLabel
-               OpBranch %309
-        %319 = OpLabel
-        %322 = OpAccessChain %_ptr_Function_int %tree %316 %uint_0
-        %323 = OpLoad %int %322
-        %324 = OpSLessThanEqual %bool %int_2 %323
-               OpSelectionMerge %325 None
-               OpBranchConditional %324 %326 %327
-        %326 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-        %329 = OpLoad %int %328
-        %330 = OpIEqual %bool %329 %int_n1
-               OpSelectionMerge %331 None
-               OpBranchConditional %330 %332 %333
-        %332 = OpLabel
-        %334 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-               OpStore %334 %int_6
-        %335 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %335 %336
-               OpStore %x_255_phi %true
-               OpBranch %309
-        %333 = OpLabel
-        %337 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-        %338 = OpLoad %int %337
-               OpStore %x_253 %338
-        %339 = OpLoad %int %x_253
-               OpStore %x_228_phi %339
-               OpBranch %310
-        %331 = OpLabel
-               OpReturn
-        %327 = OpLabel
-        %340 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-        %341 = OpLoad %int %340
-        %342 = OpIEqual %bool %341 %int_n1
-               OpSelectionMerge %343 None
-               OpBranchConditional %342 %344 %345
-        %344 = OpLabel
-        %346 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-               OpStore %346 %int_6
-        %347 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %347 %336
-               OpStore %x_255_phi %true
-               OpBranch %309
-        %345 = OpLabel
-        %348 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-        %349 = OpLoad %int %348
-               OpStore %x_245 %349
-        %350 = OpLoad %int %x_245
-               OpStore %x_228_phi %350
-               OpBranch %310
-        %343 = OpLabel
-               OpReturn
-        %325 = OpLabel
-               OpReturn
-        %310 = OpLabel
-        %351 = OpLoad %int %x_228_phi
-               OpStore %x_228 %351
-        %352 = OpLoad %int %x_228
-               OpStore %x_227_phi %352
-               OpBranch %308
-        %309 = OpLabel
-        %353 = OpLoad %bool %x_255_phi
-               OpSelectionMerge %354 None
-               OpBranchConditional %353 %355 %354
-        %355 = OpLabel
-               OpBranch %306
-        %354 = OpLabel
-               OpBranch %306
-        %306 = OpLabel
-               OpSelectionMerge %358 None
-               OpSwitch %uint_0 %359
-        %359 = OpLabel
-               OpStore %x_260_phi %int_0
-               OpBranch %360
-        %360 = OpLabel
-               OpLoopMerge %361 %362 None
-               OpBranch %363
-        %363 = OpLabel
-        %368 = OpLoad %int %x_260_phi
-               OpStore %x_288_phi %false
-        %369 = OpSLessThanEqual %bool %368 %int_7
-               OpSelectionMerge %370 None
-               OpBranchConditional %369 %371 %372
-        %371 = OpLabel
-               OpBranch %370
-        %372 = OpLabel
-               OpBranch %361
-        %370 = OpLabel
-        %373 = OpAccessChain %_ptr_Function_int %tree %368 %uint_0
-        %374 = OpLoad %int %373
-        %375 = OpSLessThanEqual %bool %int_6 %374
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %378
-        %377 = OpLabel
-        %379 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-        %380 = OpLoad %int %379
-        %381 = OpIEqual %bool %380 %int_n1
-               OpSelectionMerge %382 None
-               OpBranchConditional %381 %383 %384
-        %383 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-               OpStore %385 %int_7
-        %386 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %386 %387
-               OpStore %x_288_phi %true
-               OpBranch %361
-        %384 = OpLabel
-        %388 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-        %389 = OpLoad %int %388
-               OpStore %x_286 %389
-        %390 = OpLoad %int %x_286
-               OpStore %x_261_phi %390
-               OpBranch %362
-        %382 = OpLabel
-               OpReturn
-        %378 = OpLabel
-        %391 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-        %392 = OpLoad %int %391
-        %393 = OpIEqual %bool %392 %int_n1
-               OpSelectionMerge %394 None
-               OpBranchConditional %393 %395 %396
-        %395 = OpLabel
-        %397 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-               OpStore %397 %int_7
-        %398 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %398 %387
-               OpStore %x_288_phi %true
-               OpBranch %361
-        %396 = OpLabel
-        %399 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-        %400 = OpLoad %int %399
-               OpStore %x_278 %400
-        %401 = OpLoad %int %x_278
-               OpStore %x_261_phi %401
-               OpBranch %362
-        %394 = OpLabel
-               OpReturn
-        %376 = OpLabel
-               OpReturn
-        %362 = OpLabel
-        %402 = OpLoad %int %x_261_phi
-               OpStore %x_261 %402
-        %403 = OpLoad %int %x_261
-               OpStore %x_260_phi %403
-               OpBranch %360
-        %361 = OpLabel
-        %404 = OpLoad %bool %x_288_phi
-               OpSelectionMerge %405 None
-               OpBranchConditional %404 %406 %405
-        %406 = OpLabel
-               OpBranch %358
-        %405 = OpLabel
-               OpBranch %358
-        %358 = OpLabel
-               OpSelectionMerge %409 None
-               OpSwitch %uint_0 %410
-        %410 = OpLabel
-               OpStore %x_293_phi %int_0
-               OpBranch %411
-        %411 = OpLabel
-               OpLoopMerge %412 %413 None
-               OpBranch %414
-        %414 = OpLabel
-        %419 = OpLoad %int %x_293_phi
-               OpStore %x_321_phi %false
-        %420 = OpSLessThanEqual %bool %419 %int_8
-               OpSelectionMerge %421 None
-               OpBranchConditional %420 %422 %423
-        %422 = OpLabel
-               OpBranch %421
-        %423 = OpLabel
-               OpBranch %412
-        %421 = OpLabel
-        %424 = OpAccessChain %_ptr_Function_int %tree %419 %uint_0
-        %425 = OpLoad %int %424
-        %427 = OpSLessThanEqual %bool %int_17 %425
-               OpSelectionMerge %428 None
-               OpBranchConditional %427 %429 %430
-        %429 = OpLabel
-        %431 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-        %432 = OpLoad %int %431
-        %433 = OpIEqual %bool %432 %int_n1
-               OpSelectionMerge %434 None
-               OpBranchConditional %433 %435 %436
-        %435 = OpLabel
-        %437 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-               OpStore %437 %int_8
-        %438 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %438 %439
-               OpStore %x_321_phi %true
-               OpBranch %412
-        %436 = OpLabel
-        %440 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-        %441 = OpLoad %int %440
-               OpStore %x_319 %441
-        %442 = OpLoad %int %x_319
-               OpStore %x_294_phi %442
-               OpBranch %413
-        %434 = OpLabel
-               OpReturn
-        %430 = OpLabel
-        %443 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-        %444 = OpLoad %int %443
-        %445 = OpIEqual %bool %444 %int_n1
-               OpSelectionMerge %446 None
-               OpBranchConditional %445 %447 %448
-        %447 = OpLabel
-        %449 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-               OpStore %449 %int_8
-        %450 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %450 %439
-               OpStore %x_321_phi %true
-               OpBranch %412
-        %448 = OpLabel
-        %451 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-        %452 = OpLoad %int %451
-               OpStore %x_311 %452
-        %453 = OpLoad %int %x_311
-               OpStore %x_294_phi %453
-               OpBranch %413
-        %446 = OpLabel
-               OpReturn
-        %428 = OpLabel
-               OpReturn
-        %413 = OpLabel
-        %454 = OpLoad %int %x_294_phi
-               OpStore %x_294 %454
-        %455 = OpLoad %int %x_294
-               OpStore %x_293_phi %455
-               OpBranch %411
-        %412 = OpLabel
-        %456 = OpLoad %bool %x_321_phi
-               OpSelectionMerge %457 None
-               OpBranchConditional %456 %458 %457
-        %458 = OpLabel
-               OpBranch %409
-        %457 = OpLabel
-               OpBranch %409
-        %409 = OpLabel
-               OpSelectionMerge %461 None
-               OpSwitch %uint_0 %462
-        %462 = OpLabel
-               OpStore %x_326_phi %int_0
-               OpBranch %463
-        %463 = OpLabel
-               OpLoopMerge %464 %465 None
-               OpBranch %466
-        %466 = OpLabel
-        %471 = OpLoad %int %x_326_phi
-               OpStore %x_354_phi %false
-        %472 = OpSLessThanEqual %bool %471 %int_9
-               OpSelectionMerge %473 None
-               OpBranchConditional %472 %474 %475
-        %474 = OpLabel
-               OpBranch %473
-        %475 = OpLabel
-               OpBranch %464
-        %473 = OpLabel
-        %476 = OpAccessChain %_ptr_Function_int %tree %471 %uint_0
-        %477 = OpLoad %int %476
-        %479 = OpSLessThanEqual %bool %int_13 %477
-               OpSelectionMerge %480 None
-               OpBranchConditional %479 %481 %482
-        %481 = OpLabel
-        %483 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-        %484 = OpLoad %int %483
-        %485 = OpIEqual %bool %484 %int_n1
-               OpSelectionMerge %486 None
-               OpBranchConditional %485 %487 %488
-        %487 = OpLabel
-        %489 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-               OpStore %489 %int_9
-        %490 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %490 %491
-               OpStore %x_354_phi %true
-               OpBranch %464
-        %488 = OpLabel
-        %492 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-        %493 = OpLoad %int %492
-               OpStore %x_352 %493
-        %494 = OpLoad %int %x_352
-               OpStore %x_327_phi %494
-               OpBranch %465
-        %486 = OpLabel
-               OpReturn
-        %482 = OpLabel
-        %495 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-        %496 = OpLoad %int %495
-        %497 = OpIEqual %bool %496 %int_n1
-               OpSelectionMerge %498 None
-               OpBranchConditional %497 %499 %500
-        %499 = OpLabel
-        %501 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-               OpStore %501 %int_9
-        %502 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %502 %491
-               OpStore %x_354_phi %true
-               OpBranch %464
-        %500 = OpLabel
-        %503 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-        %504 = OpLoad %int %503
-               OpStore %x_344 %504
-        %505 = OpLoad %int %x_344
-               OpStore %x_327_phi %505
-               OpBranch %465
-        %498 = OpLabel
-               OpReturn
-        %480 = OpLabel
-               OpReturn
-        %465 = OpLabel
-        %506 = OpLoad %int %x_327_phi
-               OpStore %x_327 %506
-        %507 = OpLoad %int %x_327
-               OpStore %x_326_phi %507
-               OpBranch %463
-        %464 = OpLabel
-        %508 = OpLoad %bool %x_354_phi
-               OpSelectionMerge %509 None
-               OpBranchConditional %508 %510 %509
-        %510 = OpLabel
-               OpBranch %461
-        %509 = OpLabel
-               OpBranch %461
-        %461 = OpLabel
-               OpStore %x_357_phi %int_0
-               OpStore %x_360_phi %int_0
-               OpStore %x_362_phi %int_0
-               OpBranch %511
-        %511 = OpLabel
-               OpLoopMerge %512 %513 None
-               OpBranch %514
-        %514 = OpLabel
-        %521 = OpLoad %int %x_357_phi
-        %522 = OpLoad %int %x_360_phi
-               OpStore %x_360 %522
-        %523 = OpLoad %int %x_362_phi
-        %524 = OpISub %int %int_6 %int_15
-        %526 = OpSLessThan %bool %523 %int_20
-               OpSelectionMerge %527 None
-               OpBranchConditional %526 %528 %529
-        %528 = OpLabel
-               OpBranch %527
-        %529 = OpLabel
-               OpBranch %512
-        %527 = OpLabel
-               OpSelectionMerge %533 None
-               OpSwitch %uint_0 %534
-        %534 = OpLabel
-               OpStore %x_374_phi %int_0
-               OpBranch %535
-        %535 = OpLabel
-               OpLoopMerge %536 %537 None
-               OpBranch %538
-        %538 = OpLabel
-        %539 = OpLoad %int %x_374_phi
-               OpStore %x_392_phi %521
-               OpStore %x_393_phi %false
-        %540 = OpINotEqual %bool %539 %int_n1
-               OpSelectionMerge %541 None
-               OpBranchConditional %540 %542 %543
-        %542 = OpLabel
-               OpBranch %541
-        %543 = OpLabel
-               OpBranch %536
-        %541 = OpLabel
-        %544 = OpAccessChain %_ptr_Function_BST %tree %539
-        %545 = OpLoad %BST %544
-        %546 = OpCompositeExtract %int %545 0
-        %547 = OpCompositeExtract %int %545 1
-        %548 = OpCompositeExtract %int %545 2
-        %549 = OpIEqual %bool %546 %523
-               OpSelectionMerge %550 None
-               OpBranchConditional %549 %551 %550
-        %551 = OpLabel
-               OpStore %x_392_phi %523
-               OpStore %x_393_phi %true
-               OpBranch %536
-        %550 = OpLabel
-        %554 = OpULessThanEqual %bool %uint_3 %uint_3
-        %552 = OpSelect %uint %554 %uint_3 %uint_3
-        %556 = OpAccessChain %_ptr_Private_float %x_GLF_color %552
-        %557 = OpLoad %float %556
-               OpBranch %537
-        %537 = OpLabel
-        %560 = OpSLessThanEqual %bool %523 %546
-        %559 = OpLogicalNot %bool %560
-        %558 = OpSelect %int %559 %548 %547
-               OpStore %x_374_phi %558
-               OpBranch %535
-        %536 = OpLabel
-        %561 = OpLoad %int %x_392_phi
-               OpStore %x_392 %561
-        %562 = OpLoad %bool %x_393_phi
-        %563 = OpLoad %int %x_392
-               OpStore %x_358_phi %563
-               OpSelectionMerge %564 None
-               OpBranchConditional %562 %565 %564
-        %565 = OpLabel
-               OpBranch %533
-        %564 = OpLabel
-               OpStore %x_358_phi %int_n1
-               OpBranch %533
-        %533 = OpLabel
-        %571 = OpLoad %int %x_358_phi
-               OpStore %x_358 %571
-               OpSelectionMerge %572 None
-               OpSwitch %523 %573 2 %574 5 %574 6 %574 7 %574 8 %574 9 %574 12 %574 13 %574 15 %574 17 %574
-        %574 = OpLabel
-        %575 = OpLoad %int %x_360
-               OpStore %x_402_phi %575
-        %576 = OpLoad %int %x_358
-        %577 = OpCopyObject %int %523
-        %578 = OpIEqual %bool %576 %577
-               OpSelectionMerge %579 None
-               OpBranchConditional %578 %580 %579
-        %580 = OpLabel
-        %582 = OpLoad %int %x_360
-        %583 = OpCopyObject %int %int_1
-        %584 = OpIAdd %int %582 %583
-        %581 = OpCopyObject %int %584
-               OpStore %x_401 %581
-        %585 = OpLoad %int %x_401
-               OpStore %x_402_phi %585
-               OpBranch %579
-        %579 = OpLabel
-        %586 = OpLoad %int %x_402_phi
-               OpStore %x_402 %586
-        %587 = OpLoad %int %x_402
-               OpStore %x_361_phi %587
-               OpBranch %572
-        %573 = OpLabel
-        %588 = OpLoad %int %x_360
-               OpStore %x_407_phi %588
-        %589 = OpLoad %int %x_358
-        %590 = OpCopyObject %int %int_n1
-        %591 = OpIEqual %bool %589 %590
-               OpSelectionMerge %592 None
-               OpBranchConditional %591 %593 %592
-        %593 = OpLabel
-        %595 = OpLoad %int %x_360
-        %596 = OpCopyObject %int %int_1
-        %597 = OpIAdd %int %595 %596
-        %594 = OpCopyObject %int %597
-               OpStore %x_406 %594
-        %598 = OpLoad %int %x_406
-               OpStore %x_407_phi %598
-               OpBranch %592
-        %592 = OpLabel
-        %599 = OpLoad %int %x_407_phi
-               OpStore %x_407 %599
-        %600 = OpLoad %int %x_407
-               OpStore %x_361_phi %600
-               OpBranch %572
-        %572 = OpLabel
-        %601 = OpLoad %int %x_361_phi
-               OpBranch %513
-        %513 = OpLabel
-        %602 = OpIAdd %int %523 %int_1
-               OpStore %x_363 %602
-        %603 = OpLoad %int %x_358
-               OpStore %x_357_phi %603
-               OpStore %x_360_phi %601
-        %604 = OpLoad %int %x_363
-               OpStore %x_362_phi %604
-               OpBranch %511
-        %512 = OpLabel
-        %605 = OpLoad %int %x_360
-        %606 = OpCopyObject %int %int_20
-        %607 = OpIEqual %bool %605 %606
-               OpSelectionMerge %608 None
-               OpBranchConditional %607 %609 %610
-        %609 = OpLabel
-               OpStore %x_GLF_color %613
-               OpBranch %608
-        %610 = OpLabel
-               OpStore %x_GLF_color %614
-               OpBranch %608
-        %608 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %615
-        %618 = OpLabel
-        %619 = OpFunctionCall %void %main_1
-        %620 = OpLoad %v4float %x_GLF_color
-        %621 = OpCompositeConstruct %main_out %620
-               OpReturnValue %621
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-        %623 = OpLabel
-        %624 = OpFunctionCall %main_out %main_inner
-        %625 = OpCompositeExtract %v4float %624 0
-               OpStore %x_GLF_color_1_1 %625
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.wgsl
deleted file mode 100644
index 0c19b19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,655 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var tree : array<BST, 10>;
-  var x_360 : i32;
-  var x_62_phi : i32;
-  var x_90_phi : bool;
-  var x_357_phi : i32;
-  var x_360_phi : i32;
-  var x_362_phi : i32;
-  tree[0] = BST(9, -1, -1);
-  switch(0u) {
-    default: {
-      x_62_phi = 0;
-      loop {
-        var x_88 : i32;
-        var x_80 : i32;
-        var x_63 : i32;
-        var x_63_phi : i32;
-        let x_62 : i32 = x_62_phi;
-        x_90_phi = false;
-        if ((x_62 <= 1)) {
-        } else {
-          break;
-        }
-        let x_69 : i32 = tree[x_62].data;
-        if ((5 <= x_69)) {
-          let x_82 : ptr<function, i32> = &(tree[x_62].leftIndex);
-          let x_83 : i32 = *(x_82);
-          if ((x_83 == -1)) {
-            *(x_82) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_90_phi = true;
-            break;
-          } else {
-            x_88 = *(x_82);
-            x_63_phi = x_88;
-            continue;
-          }
-          return;
-        } else {
-          let x_74 : ptr<function, i32> = &(tree[x_62].rightIndex);
-          let x_75 : i32 = *(x_74);
-          if ((x_75 == -1)) {
-            *(x_74) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_90_phi = true;
-            break;
-          } else {
-            x_80 = *(x_74);
-            x_63_phi = x_80;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_63 = x_63_phi;
-          x_62_phi = x_63;
-        }
-      }
-      let x_90 : bool = x_90_phi;
-      if (x_90) {
-        break;
-      }
-    }
-  }
-  var x_95_phi : i32;
-  var x_123_phi : bool;
-  switch(0u) {
-    default: {
-      x_95_phi = 0;
-      loop {
-        var x_121 : i32;
-        var x_113 : i32;
-        var x_96 : i32;
-        var x_96_phi : i32;
-        let x_95 : i32 = x_95_phi;
-        x_123_phi = false;
-        if ((x_95 <= 2)) {
-        } else {
-          break;
-        }
-        let x_102 : i32 = tree[x_95].data;
-        if ((12 <= x_102)) {
-          let x_115 : ptr<function, i32> = &(tree[x_95].leftIndex);
-          let x_116 : i32 = *(x_115);
-          if ((x_116 == -1)) {
-            *(x_115) = 2;
-            tree[2] = BST(12, -1, -1);
-            x_123_phi = true;
-            break;
-          } else {
-            x_121 = *(x_115);
-            x_96_phi = x_121;
-            continue;
-          }
-          return;
-        } else {
-          let x_107 : ptr<function, i32> = &(tree[x_95].rightIndex);
-          let x_108 : i32 = *(x_107);
-          if ((x_108 == -1)) {
-            *(x_107) = 2;
-            tree[2] = BST(12, -1, -1);
-            x_123_phi = true;
-            break;
-          } else {
-            x_113 = *(x_107);
-            x_96_phi = x_113;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_96 = x_96_phi;
-          x_95_phi = x_96;
-        }
-      }
-      let x_123 : bool = x_123_phi;
-      if (x_123) {
-        break;
-      }
-    }
-  }
-  var x_128_phi : i32;
-  var x_156_phi : bool;
-  switch(0u) {
-    default: {
-      x_128_phi = 0;
-      loop {
-        var x_154 : i32;
-        var x_146 : i32;
-        var x_129 : i32;
-        var x_129_phi : i32;
-        let x_128 : i32 = x_128_phi;
-        x_156_phi = false;
-        if ((x_128 <= 3)) {
-        } else {
-          break;
-        }
-        let x_135 : i32 = tree[x_128].data;
-        if ((15 <= x_135)) {
-          let x_148 : ptr<function, i32> = &(tree[x_128].leftIndex);
-          let x_149 : i32 = *(x_148);
-          if ((x_149 == -1)) {
-            *(x_148) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_156_phi = true;
-            break;
-          } else {
-            x_154 = *(x_148);
-            x_129_phi = x_154;
-            continue;
-          }
-          return;
-        } else {
-          let x_140 : ptr<function, i32> = &(tree[x_128].rightIndex);
-          let x_141 : i32 = *(x_140);
-          if ((x_141 == -1)) {
-            *(x_140) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_156_phi = true;
-            break;
-          } else {
-            x_146 = *(x_140);
-            x_129_phi = x_146;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_129 = x_129_phi;
-          x_128_phi = x_129;
-        }
-      }
-      let x_156 : bool = x_156_phi;
-      if (x_156) {
-        break;
-      }
-    }
-  }
-  var x_161_phi : i32;
-  var x_189_phi : bool;
-  switch(0u) {
-    default: {
-      x_161_phi = 0;
-      loop {
-        var x_187 : i32;
-        var x_179 : i32;
-        var x_162 : i32;
-        var x_162_phi : i32;
-        let x_161 : i32 = x_161_phi;
-        x_189_phi = false;
-        if ((x_161 <= 4)) {
-        } else {
-          break;
-        }
-        let x_168 : i32 = tree[x_161].data;
-        if ((7 <= x_168)) {
-          let x_181 : ptr<function, i32> = &(tree[x_161].leftIndex);
-          let x_182 : i32 = *(x_181);
-          if ((x_182 == -1)) {
-            *(x_181) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_189_phi = true;
-            break;
-          } else {
-            x_187 = *(x_181);
-            x_162_phi = x_187;
-            continue;
-          }
-          return;
-        } else {
-          let x_173 : ptr<function, i32> = &(tree[x_161].rightIndex);
-          let x_174 : i32 = *(x_173);
-          if ((x_174 == -1)) {
-            *(x_173) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_189_phi = true;
-            break;
-          } else {
-            x_179 = *(x_173);
-            x_162_phi = x_179;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_162 = x_162_phi;
-          x_161_phi = x_162;
-        }
-      }
-      let x_189 : bool = x_189_phi;
-      if (x_189) {
-        break;
-      }
-    }
-  }
-  var x_194_phi : i32;
-  var x_222_phi : bool;
-  switch(0u) {
-    default: {
-      x_194_phi = 0;
-      loop {
-        var x_220 : i32;
-        var x_212 : i32;
-        var x_195 : i32;
-        var x_195_phi : i32;
-        let x_194 : i32 = x_194_phi;
-        x_222_phi = false;
-        if ((x_194 <= 5)) {
-        } else {
-          break;
-        }
-        let x_201 : i32 = tree[x_194].data;
-        if ((8 <= x_201)) {
-          let x_214 : ptr<function, i32> = &(tree[x_194].leftIndex);
-          let x_215 : i32 = *(x_214);
-          if ((x_215 == -1)) {
-            *(x_214) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_222_phi = true;
-            break;
-          } else {
-            x_220 = *(x_214);
-            x_195_phi = x_220;
-            continue;
-          }
-          return;
-        } else {
-          let x_206 : ptr<function, i32> = &(tree[x_194].rightIndex);
-          let x_207 : i32 = *(x_206);
-          if ((x_207 == -1)) {
-            *(x_206) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_222_phi = true;
-            break;
-          } else {
-            x_212 = *(x_206);
-            x_195_phi = x_212;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_195 = x_195_phi;
-          x_194_phi = x_195;
-        }
-      }
-      let x_222 : bool = x_222_phi;
-      if (x_222) {
-        break;
-      }
-    }
-  }
-  var x_227_phi : i32;
-  var x_255_phi : bool;
-  switch(0u) {
-    default: {
-      x_227_phi = 0;
-      loop {
-        var x_253 : i32;
-        var x_245 : i32;
-        var x_228 : i32;
-        var x_228_phi : i32;
-        let x_227 : i32 = x_227_phi;
-        x_255_phi = false;
-        if ((x_227 <= 6)) {
-        } else {
-          break;
-        }
-        let x_234 : i32 = tree[x_227].data;
-        if ((2 <= x_234)) {
-          let x_247 : ptr<function, i32> = &(tree[x_227].leftIndex);
-          let x_248 : i32 = *(x_247);
-          if ((x_248 == -1)) {
-            *(x_247) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_255_phi = true;
-            break;
-          } else {
-            x_253 = *(x_247);
-            x_228_phi = x_253;
-            continue;
-          }
-          return;
-        } else {
-          let x_239 : ptr<function, i32> = &(tree[x_227].rightIndex);
-          let x_240 : i32 = *(x_239);
-          if ((x_240 == -1)) {
-            *(x_239) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_255_phi = true;
-            break;
-          } else {
-            x_245 = *(x_239);
-            x_228_phi = x_245;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_228 = x_228_phi;
-          x_227_phi = x_228;
-        }
-      }
-      let x_255 : bool = x_255_phi;
-      if (x_255) {
-        break;
-      }
-    }
-  }
-  var x_260_phi : i32;
-  var x_288_phi : bool;
-  switch(0u) {
-    default: {
-      x_260_phi = 0;
-      loop {
-        var x_286 : i32;
-        var x_278 : i32;
-        var x_261 : i32;
-        var x_261_phi : i32;
-        let x_260 : i32 = x_260_phi;
-        x_288_phi = false;
-        if ((x_260 <= 7)) {
-        } else {
-          break;
-        }
-        let x_267 : i32 = tree[x_260].data;
-        if ((6 <= x_267)) {
-          let x_280 : ptr<function, i32> = &(tree[x_260].leftIndex);
-          let x_281 : i32 = *(x_280);
-          if ((x_281 == -1)) {
-            *(x_280) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_288_phi = true;
-            break;
-          } else {
-            x_286 = *(x_280);
-            x_261_phi = x_286;
-            continue;
-          }
-          return;
-        } else {
-          let x_272 : ptr<function, i32> = &(tree[x_260].rightIndex);
-          let x_273 : i32 = *(x_272);
-          if ((x_273 == -1)) {
-            *(x_272) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_288_phi = true;
-            break;
-          } else {
-            x_278 = *(x_272);
-            x_261_phi = x_278;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_261 = x_261_phi;
-          x_260_phi = x_261;
-        }
-      }
-      let x_288 : bool = x_288_phi;
-      if (x_288) {
-        break;
-      }
-    }
-  }
-  var x_293_phi : i32;
-  var x_321_phi : bool;
-  switch(0u) {
-    default: {
-      x_293_phi = 0;
-      loop {
-        var x_319 : i32;
-        var x_311 : i32;
-        var x_294 : i32;
-        var x_294_phi : i32;
-        let x_293 : i32 = x_293_phi;
-        x_321_phi = false;
-        if ((x_293 <= 8)) {
-        } else {
-          break;
-        }
-        let x_300 : i32 = tree[x_293].data;
-        if ((17 <= x_300)) {
-          let x_313 : ptr<function, i32> = &(tree[x_293].leftIndex);
-          let x_314 : i32 = *(x_313);
-          if ((x_314 == -1)) {
-            *(x_313) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_321_phi = true;
-            break;
-          } else {
-            x_319 = *(x_313);
-            x_294_phi = x_319;
-            continue;
-          }
-          return;
-        } else {
-          let x_305 : ptr<function, i32> = &(tree[x_293].rightIndex);
-          let x_306 : i32 = *(x_305);
-          if ((x_306 == -1)) {
-            *(x_305) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_321_phi = true;
-            break;
-          } else {
-            x_311 = *(x_305);
-            x_294_phi = x_311;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_294 = x_294_phi;
-          x_293_phi = x_294;
-        }
-      }
-      let x_321 : bool = x_321_phi;
-      if (x_321) {
-        break;
-      }
-    }
-  }
-  var x_326_phi : i32;
-  var x_354_phi : bool;
-  switch(0u) {
-    default: {
-      x_326_phi = 0;
-      loop {
-        var x_352 : i32;
-        var x_344 : i32;
-        var x_327 : i32;
-        var x_327_phi : i32;
-        let x_326 : i32 = x_326_phi;
-        x_354_phi = false;
-        if ((x_326 <= 9)) {
-        } else {
-          break;
-        }
-        let x_333 : i32 = tree[x_326].data;
-        if ((13 <= x_333)) {
-          let x_346 : ptr<function, i32> = &(tree[x_326].leftIndex);
-          let x_347 : i32 = *(x_346);
-          if ((x_347 == -1)) {
-            *(x_346) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_354_phi = true;
-            break;
-          } else {
-            x_352 = *(x_346);
-            x_327_phi = x_352;
-            continue;
-          }
-          return;
-        } else {
-          let x_338 : ptr<function, i32> = &(tree[x_326].rightIndex);
-          let x_339 : i32 = *(x_338);
-          if ((x_339 == -1)) {
-            *(x_338) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_354_phi = true;
-            break;
-          } else {
-            x_344 = *(x_338);
-            x_327_phi = x_344;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_327 = x_327_phi;
-          x_326_phi = x_327;
-        }
-      }
-      let x_354 : bool = x_354_phi;
-      if (x_354) {
-        break;
-      }
-    }
-  }
-  x_357_phi = 0;
-  x_360_phi = 0;
-  x_362_phi = 0;
-  loop {
-    var x_392 : i32;
-    var x_402 : i32;
-    var x_407 : i32;
-    var x_363 : i32;
-    var x_358_phi : i32;
-    var x_361_phi : i32;
-    let x_357 : i32 = x_357_phi;
-    x_360 = x_360_phi;
-    let x_362 : i32 = x_362_phi;
-    let x_365 : i32 = (6 - 15);
-    if ((x_362 < 20)) {
-    } else {
-      break;
-    }
-    var x_374_phi : i32;
-    var x_392_phi : i32;
-    var x_393_phi : bool;
-    switch(0u) {
-      default: {
-        x_374_phi = 0;
-        loop {
-          let x_374 : i32 = x_374_phi;
-          x_392_phi = x_357;
-          x_393_phi = false;
-          if ((x_374 != -1)) {
-          } else {
-            break;
-          }
-          let x_381 : BST = tree[x_374];
-          let x_382 : i32 = x_381.data;
-          let x_383 : i32 = x_381.leftIndex;
-          let x_385 : i32 = x_381.rightIndex;
-          if ((x_382 == x_362)) {
-            x_392_phi = x_362;
-            x_393_phi = true;
-            break;
-          }
-          let x_389 : f32 = x_GLF_color[select(3u, 3u, (3u <= 3u))];
-
-          continuing {
-            x_374_phi = select(x_383, x_385, !((x_362 <= x_382)));
-          }
-        }
-        x_392 = x_392_phi;
-        let x_393 : bool = x_393_phi;
-        x_358_phi = x_392;
-        if (x_393) {
-          break;
-        }
-        x_358_phi = -1;
-      }
-    }
-    var x_358 : i32;
-    var x_401 : i32;
-    var x_406 : i32;
-    var x_402_phi : i32;
-    var x_407_phi : i32;
-    x_358 = x_358_phi;
-    switch(x_362) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        x_402_phi = x_360;
-        if ((x_358 == bitcast<i32>(x_362))) {
-          x_401 = bitcast<i32>((x_360 + bitcast<i32>(1)));
-          x_402_phi = x_401;
-        }
-        x_402 = x_402_phi;
-        x_361_phi = x_402;
-      }
-      default: {
-        x_407_phi = x_360;
-        if ((x_358 == bitcast<i32>(-1))) {
-          x_406 = bitcast<i32>((x_360 + bitcast<i32>(1)));
-          x_407_phi = x_406;
-        }
-        x_407 = x_407_phi;
-        x_361_phi = x_407;
-      }
-    }
-    let x_361 : i32 = x_361_phi;
-
-    continuing {
-      x_363 = (x_362 + 1);
-      x_357_phi = x_358;
-      x_360_phi = x_361;
-      x_362_phi = x_363;
-    }
-  }
-  if ((x_360 == bitcast<i32>(20))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.hlsl
deleted file mode 100644
index 0d62f20..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,756 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  BST tree[10] = (BST[10])0;
-  int x_360 = 0;
-  int x_62_phi = 0;
-  bool x_90_phi = false;
-  int x_357_phi = 0;
-  int x_360_phi = 0;
-  int x_362_phi = 0;
-  const BST tint_symbol_1 = {9, -1, -1};
-  tree[0] = tint_symbol_1;
-  switch(0u) {
-    default: {
-      x_62_phi = 0;
-      while (true) {
-        int x_88 = 0;
-        int x_80 = 0;
-        int x_63 = 0;
-        int x_63_phi = 0;
-        const int x_62 = x_62_phi;
-        x_90_phi = false;
-        if ((x_62 <= 1)) {
-        } else {
-          break;
-        }
-        const int x_69 = tree[x_62].data;
-        if ((5 <= x_69)) {
-          const int x_82_save = x_62;
-          const int x_83 = tree[x_82_save].leftIndex;
-          if ((x_83 == -1)) {
-            tree[x_82_save].leftIndex = 1;
-            const BST tint_symbol_2 = {5, -1, -1};
-            tree[1] = tint_symbol_2;
-            x_90_phi = true;
-            break;
-          } else {
-            x_88 = tree[x_82_save].leftIndex;
-            x_63_phi = x_88;
-            {
-              x_63 = x_63_phi;
-              x_62_phi = x_63;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_74_save = x_62;
-          const int x_75 = tree[x_74_save].rightIndex;
-          if ((x_75 == -1)) {
-            tree[x_74_save].rightIndex = 1;
-            const BST tint_symbol_3 = {5, -1, -1};
-            tree[1] = tint_symbol_3;
-            x_90_phi = true;
-            break;
-          } else {
-            x_80 = tree[x_74_save].rightIndex;
-            x_63_phi = x_80;
-            {
-              x_63 = x_63_phi;
-              x_62_phi = x_63;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_63 = x_63_phi;
-          x_62_phi = x_63;
-        }
-      }
-      if (x_90_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_95_phi = 0;
-  bool x_123_phi = false;
-  switch(0u) {
-    default: {
-      x_95_phi = 0;
-      while (true) {
-        int x_121 = 0;
-        int x_113 = 0;
-        int x_96 = 0;
-        int x_96_phi = 0;
-        const int x_95 = x_95_phi;
-        x_123_phi = false;
-        if ((x_95 <= 2)) {
-        } else {
-          break;
-        }
-        const int x_102 = tree[x_95].data;
-        if ((12 <= x_102)) {
-          const int x_115_save = x_95;
-          const int x_116 = tree[x_115_save].leftIndex;
-          if ((x_116 == -1)) {
-            tree[x_115_save].leftIndex = 2;
-            const BST tint_symbol_4 = {12, -1, -1};
-            tree[2] = tint_symbol_4;
-            x_123_phi = true;
-            break;
-          } else {
-            x_121 = tree[x_115_save].leftIndex;
-            x_96_phi = x_121;
-            {
-              x_96 = x_96_phi;
-              x_95_phi = x_96;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_107_save = x_95;
-          const int x_108 = tree[x_107_save].rightIndex;
-          if ((x_108 == -1)) {
-            tree[x_107_save].rightIndex = 2;
-            const BST tint_symbol_5 = {12, -1, -1};
-            tree[2] = tint_symbol_5;
-            x_123_phi = true;
-            break;
-          } else {
-            x_113 = tree[x_107_save].rightIndex;
-            x_96_phi = x_113;
-            {
-              x_96 = x_96_phi;
-              x_95_phi = x_96;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_96 = x_96_phi;
-          x_95_phi = x_96;
-        }
-      }
-      if (x_123_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_128_phi = 0;
-  bool x_156_phi = false;
-  switch(0u) {
-    default: {
-      x_128_phi = 0;
-      while (true) {
-        int x_154 = 0;
-        int x_146 = 0;
-        int x_129 = 0;
-        int x_129_phi = 0;
-        const int x_128 = x_128_phi;
-        x_156_phi = false;
-        if ((x_128 <= 3)) {
-        } else {
-          break;
-        }
-        const int x_135 = tree[x_128].data;
-        if ((15 <= x_135)) {
-          const int x_148_save = x_128;
-          const int x_149 = tree[x_148_save].leftIndex;
-          if ((x_149 == -1)) {
-            tree[x_148_save].leftIndex = 3;
-            const BST tint_symbol_6 = {15, -1, -1};
-            tree[3] = tint_symbol_6;
-            x_156_phi = true;
-            break;
-          } else {
-            x_154 = tree[x_148_save].leftIndex;
-            x_129_phi = x_154;
-            {
-              x_129 = x_129_phi;
-              x_128_phi = x_129;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_140_save = x_128;
-          const int x_141 = tree[x_140_save].rightIndex;
-          if ((x_141 == -1)) {
-            tree[x_140_save].rightIndex = 3;
-            const BST tint_symbol_7 = {15, -1, -1};
-            tree[3] = tint_symbol_7;
-            x_156_phi = true;
-            break;
-          } else {
-            x_146 = tree[x_140_save].rightIndex;
-            x_129_phi = x_146;
-            {
-              x_129 = x_129_phi;
-              x_128_phi = x_129;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_129 = x_129_phi;
-          x_128_phi = x_129;
-        }
-      }
-      if (x_156_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_161_phi = 0;
-  bool x_189_phi = false;
-  switch(0u) {
-    default: {
-      x_161_phi = 0;
-      while (true) {
-        int x_187 = 0;
-        int x_179 = 0;
-        int x_162 = 0;
-        int x_162_phi = 0;
-        const int x_161 = x_161_phi;
-        x_189_phi = false;
-        if ((x_161 <= 4)) {
-        } else {
-          break;
-        }
-        const int x_168 = tree[x_161].data;
-        if ((7 <= x_168)) {
-          const int x_181_save = x_161;
-          const int x_182 = tree[x_181_save].leftIndex;
-          if ((x_182 == -1)) {
-            tree[x_181_save].leftIndex = 4;
-            const BST tint_symbol_8 = {7, -1, -1};
-            tree[4] = tint_symbol_8;
-            x_189_phi = true;
-            break;
-          } else {
-            x_187 = tree[x_181_save].leftIndex;
-            x_162_phi = x_187;
-            {
-              x_162 = x_162_phi;
-              x_161_phi = x_162;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_173_save = x_161;
-          const int x_174 = tree[x_173_save].rightIndex;
-          if ((x_174 == -1)) {
-            tree[x_173_save].rightIndex = 4;
-            const BST tint_symbol_9 = {7, -1, -1};
-            tree[4] = tint_symbol_9;
-            x_189_phi = true;
-            break;
-          } else {
-            x_179 = tree[x_173_save].rightIndex;
-            x_162_phi = x_179;
-            {
-              x_162 = x_162_phi;
-              x_161_phi = x_162;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_162 = x_162_phi;
-          x_161_phi = x_162;
-        }
-      }
-      if (x_189_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_194_phi = 0;
-  bool x_222_phi = false;
-  switch(0u) {
-    default: {
-      x_194_phi = 0;
-      while (true) {
-        int x_220 = 0;
-        int x_212 = 0;
-        int x_195 = 0;
-        int x_195_phi = 0;
-        const int x_194 = x_194_phi;
-        x_222_phi = false;
-        if ((x_194 <= 5)) {
-        } else {
-          break;
-        }
-        const int x_201 = tree[x_194].data;
-        if ((8 <= x_201)) {
-          const int x_214_save = x_194;
-          const int x_215 = tree[x_214_save].leftIndex;
-          if ((x_215 == -1)) {
-            tree[x_214_save].leftIndex = 5;
-            const BST tint_symbol_10 = {8, -1, -1};
-            tree[5] = tint_symbol_10;
-            x_222_phi = true;
-            break;
-          } else {
-            x_220 = tree[x_214_save].leftIndex;
-            x_195_phi = x_220;
-            {
-              x_195 = x_195_phi;
-              x_194_phi = x_195;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_206_save = x_194;
-          const int x_207 = tree[x_206_save].rightIndex;
-          if ((x_207 == -1)) {
-            tree[x_206_save].rightIndex = 5;
-            const BST tint_symbol_11 = {8, -1, -1};
-            tree[5] = tint_symbol_11;
-            x_222_phi = true;
-            break;
-          } else {
-            x_212 = tree[x_206_save].rightIndex;
-            x_195_phi = x_212;
-            {
-              x_195 = x_195_phi;
-              x_194_phi = x_195;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_195 = x_195_phi;
-          x_194_phi = x_195;
-        }
-      }
-      if (x_222_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_227_phi = 0;
-  bool x_255_phi = false;
-  switch(0u) {
-    default: {
-      x_227_phi = 0;
-      while (true) {
-        int x_253 = 0;
-        int x_245 = 0;
-        int x_228 = 0;
-        int x_228_phi = 0;
-        const int x_227 = x_227_phi;
-        x_255_phi = false;
-        if ((x_227 <= 6)) {
-        } else {
-          break;
-        }
-        const int x_234 = tree[x_227].data;
-        if ((2 <= x_234)) {
-          const int x_247_save = x_227;
-          const int x_248 = tree[x_247_save].leftIndex;
-          if ((x_248 == -1)) {
-            tree[x_247_save].leftIndex = 6;
-            const BST tint_symbol_12 = {2, -1, -1};
-            tree[6] = tint_symbol_12;
-            x_255_phi = true;
-            break;
-          } else {
-            x_253 = tree[x_247_save].leftIndex;
-            x_228_phi = x_253;
-            {
-              x_228 = x_228_phi;
-              x_227_phi = x_228;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_239_save = x_227;
-          const int x_240 = tree[x_239_save].rightIndex;
-          if ((x_240 == -1)) {
-            tree[x_239_save].rightIndex = 6;
-            const BST tint_symbol_13 = {2, -1, -1};
-            tree[6] = tint_symbol_13;
-            x_255_phi = true;
-            break;
-          } else {
-            x_245 = tree[x_239_save].rightIndex;
-            x_228_phi = x_245;
-            {
-              x_228 = x_228_phi;
-              x_227_phi = x_228;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_228 = x_228_phi;
-          x_227_phi = x_228;
-        }
-      }
-      if (x_255_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_260_phi = 0;
-  bool x_288_phi = false;
-  switch(0u) {
-    default: {
-      x_260_phi = 0;
-      while (true) {
-        int x_286 = 0;
-        int x_278 = 0;
-        int x_261 = 0;
-        int x_261_phi = 0;
-        const int x_260 = x_260_phi;
-        x_288_phi = false;
-        if ((x_260 <= 7)) {
-        } else {
-          break;
-        }
-        const int x_267 = tree[x_260].data;
-        if ((6 <= x_267)) {
-          const int x_280_save = x_260;
-          const int x_281 = tree[x_280_save].leftIndex;
-          if ((x_281 == -1)) {
-            tree[x_280_save].leftIndex = 7;
-            const BST tint_symbol_14 = {6, -1, -1};
-            tree[7] = tint_symbol_14;
-            x_288_phi = true;
-            break;
-          } else {
-            x_286 = tree[x_280_save].leftIndex;
-            x_261_phi = x_286;
-            {
-              x_261 = x_261_phi;
-              x_260_phi = x_261;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_272_save = x_260;
-          const int x_273 = tree[x_272_save].rightIndex;
-          if ((x_273 == -1)) {
-            tree[x_272_save].rightIndex = 7;
-            const BST tint_symbol_15 = {6, -1, -1};
-            tree[7] = tint_symbol_15;
-            x_288_phi = true;
-            break;
-          } else {
-            x_278 = tree[x_272_save].rightIndex;
-            x_261_phi = x_278;
-            {
-              x_261 = x_261_phi;
-              x_260_phi = x_261;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_261 = x_261_phi;
-          x_260_phi = x_261;
-        }
-      }
-      if (x_288_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_293_phi = 0;
-  bool x_321_phi = false;
-  switch(0u) {
-    default: {
-      x_293_phi = 0;
-      while (true) {
-        int x_319 = 0;
-        int x_311 = 0;
-        int x_294 = 0;
-        int x_294_phi = 0;
-        const int x_293 = x_293_phi;
-        x_321_phi = false;
-        if ((x_293 <= 8)) {
-        } else {
-          break;
-        }
-        const int x_300 = tree[x_293].data;
-        if ((17 <= x_300)) {
-          const int x_313_save = x_293;
-          const int x_314 = tree[x_313_save].leftIndex;
-          if ((x_314 == -1)) {
-            tree[x_313_save].leftIndex = 8;
-            const BST tint_symbol_16 = {17, -1, -1};
-            tree[8] = tint_symbol_16;
-            x_321_phi = true;
-            break;
-          } else {
-            x_319 = tree[x_313_save].leftIndex;
-            x_294_phi = x_319;
-            {
-              x_294 = x_294_phi;
-              x_293_phi = x_294;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_305_save = x_293;
-          const int x_306 = tree[x_305_save].rightIndex;
-          if ((x_306 == -1)) {
-            tree[x_305_save].rightIndex = 8;
-            const BST tint_symbol_17 = {17, -1, -1};
-            tree[8] = tint_symbol_17;
-            x_321_phi = true;
-            break;
-          } else {
-            x_311 = tree[x_305_save].rightIndex;
-            x_294_phi = x_311;
-            {
-              x_294 = x_294_phi;
-              x_293_phi = x_294;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_294 = x_294_phi;
-          x_293_phi = x_294;
-        }
-      }
-      if (x_321_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_326_phi = 0;
-  bool x_354_phi = false;
-  switch(0u) {
-    default: {
-      x_326_phi = 0;
-      while (true) {
-        int x_352 = 0;
-        int x_344 = 0;
-        int x_327 = 0;
-        int x_327_phi = 0;
-        const int x_326 = x_326_phi;
-        x_354_phi = false;
-        if ((x_326 <= 9)) {
-        } else {
-          break;
-        }
-        const int x_333 = tree[x_326].data;
-        if ((13 <= x_333)) {
-          const int x_346_save = x_326;
-          const int x_347 = tree[x_346_save].leftIndex;
-          if ((x_347 == -1)) {
-            tree[x_346_save].leftIndex = 9;
-            const BST tint_symbol_18 = {13, -1, -1};
-            tree[9] = tint_symbol_18;
-            x_354_phi = true;
-            break;
-          } else {
-            x_352 = tree[x_346_save].leftIndex;
-            x_327_phi = x_352;
-            {
-              x_327 = x_327_phi;
-              x_326_phi = x_327;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_338_save = x_326;
-          const int x_339 = tree[x_338_save].rightIndex;
-          if ((x_339 == -1)) {
-            tree[x_338_save].rightIndex = 9;
-            const BST tint_symbol_19 = {13, -1, -1};
-            tree[9] = tint_symbol_19;
-            x_354_phi = true;
-            break;
-          } else {
-            x_344 = tree[x_338_save].rightIndex;
-            x_327_phi = x_344;
-            {
-              x_327 = x_327_phi;
-              x_326_phi = x_327;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_327 = x_327_phi;
-          x_326_phi = x_327;
-        }
-      }
-      if (x_354_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  x_357_phi = 0;
-  x_360_phi = 0;
-  x_362_phi = 0;
-  while (true) {
-    int x_392 = 0;
-    int x_402 = 0;
-    int x_407 = 0;
-    int x_363 = 0;
-    int x_358_phi = 0;
-    int x_361_phi = 0;
-    const int x_357 = x_357_phi;
-    x_360 = x_360_phi;
-    const int x_362 = x_362_phi;
-    const int x_365 = (6 - 15);
-    if ((x_362 < 20)) {
-    } else {
-      break;
-    }
-    int x_374_phi = 0;
-    int x_392_phi = 0;
-    bool x_393_phi = false;
-    switch(0u) {
-      default: {
-        x_374_phi = 0;
-        while (true) {
-          const int x_374 = x_374_phi;
-          x_392_phi = x_357;
-          x_393_phi = false;
-          if ((x_374 != -1)) {
-          } else {
-            break;
-          }
-          const BST x_381 = tree[x_374];
-          const int x_382 = x_381.data;
-          const int x_383 = x_381.leftIndex;
-          const int x_385 = x_381.rightIndex;
-          if ((x_382 == x_362)) {
-            x_392_phi = x_362;
-            x_393_phi = true;
-            break;
-          }
-          const float x_389 = x_GLF_color[((3u <= 3u) ? 3u : 3u)];
-          {
-            x_374_phi = (!((x_362 <= x_382)) ? x_385 : x_383);
-          }
-        }
-        x_392 = x_392_phi;
-        const bool x_393 = x_393_phi;
-        x_358_phi = x_392;
-        if (x_393) {
-          break;
-        }
-        x_358_phi = -1;
-        break;
-      }
-    }
-    int x_358 = 0;
-    int x_401 = 0;
-    int x_406 = 0;
-    int x_402_phi = 0;
-    int x_407_phi = 0;
-    x_358 = x_358_phi;
-    switch(x_362) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_402_phi = x_360;
-        if ((x_358 == asint(x_362))) {
-          x_401 = asint((x_360 + asint(1)));
-          x_402_phi = x_401;
-        }
-        x_402 = x_402_phi;
-        x_361_phi = x_402;
-        break;
-      }
-      default: {
-        x_407_phi = x_360;
-        if ((x_358 == asint(-1))) {
-          x_406 = asint((x_360 + asint(1)));
-          x_407_phi = x_406;
-        }
-        x_407 = x_407_phi;
-        x_361_phi = x_407;
-        break;
-      }
-    }
-    const int x_361 = x_361_phi;
-    {
-      x_363 = (x_362 + 1);
-      x_357_phi = x_358;
-      x_360_phi = x_361;
-      x_362_phi = x_363;
-    }
-  }
-  if ((x_360 == asint(20))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_20 = {x_GLF_color};
-  return tint_symbol_20;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.msl
deleted file mode 100644
index bb781cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.msl
+++ /dev/null
@@ -1,770 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_22) {
-  tint_array_wrapper tree = {};
-  int x_360 = 0;
-  int x_62_phi = 0;
-  bool x_90_phi = false;
-  int x_357_phi = 0;
-  int x_360_phi = 0;
-  int x_362_phi = 0;
-  BST const tint_symbol_2 = {.data=9, .leftIndex=-1, .rightIndex=-1};
-  tree.arr[0] = tint_symbol_2;
-  switch(0u) {
-    default: {
-      x_62_phi = 0;
-      while (true) {
-        int x_88 = 0;
-        int x_80 = 0;
-        int x_63 = 0;
-        int x_63_phi = 0;
-        int const x_62 = x_62_phi;
-        x_90_phi = false;
-        if ((x_62 <= 1)) {
-        } else {
-          break;
-        }
-        int const x_69 = tree.arr[x_62].data;
-        if ((5 <= x_69)) {
-          int const x_82_save = x_62;
-          int const x_83 = tree.arr[x_82_save].leftIndex;
-          if ((x_83 == -1)) {
-            tree.arr[x_82_save].leftIndex = 1;
-            BST const tint_symbol_3 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_3;
-            x_90_phi = true;
-            break;
-          } else {
-            x_88 = tree.arr[x_82_save].leftIndex;
-            x_63_phi = x_88;
-            {
-              x_63 = x_63_phi;
-              x_62_phi = x_63;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_74_save = x_62;
-          int const x_75 = tree.arr[x_74_save].rightIndex;
-          if ((x_75 == -1)) {
-            tree.arr[x_74_save].rightIndex = 1;
-            BST const tint_symbol_4 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_4;
-            x_90_phi = true;
-            break;
-          } else {
-            x_80 = tree.arr[x_74_save].rightIndex;
-            x_63_phi = x_80;
-            {
-              x_63 = x_63_phi;
-              x_62_phi = x_63;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_63 = x_63_phi;
-          x_62_phi = x_63;
-        }
-      }
-      bool const x_90 = x_90_phi;
-      if (x_90) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_95_phi = 0;
-  bool x_123_phi = false;
-  switch(0u) {
-    default: {
-      x_95_phi = 0;
-      while (true) {
-        int x_121 = 0;
-        int x_113 = 0;
-        int x_96 = 0;
-        int x_96_phi = 0;
-        int const x_95 = x_95_phi;
-        x_123_phi = false;
-        if ((x_95 <= 2)) {
-        } else {
-          break;
-        }
-        int const x_102 = tree.arr[x_95].data;
-        if ((12 <= x_102)) {
-          int const x_115_save = x_95;
-          int const x_116 = tree.arr[x_115_save].leftIndex;
-          if ((x_116 == -1)) {
-            tree.arr[x_115_save].leftIndex = 2;
-            BST const tint_symbol_5 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[2] = tint_symbol_5;
-            x_123_phi = true;
-            break;
-          } else {
-            x_121 = tree.arr[x_115_save].leftIndex;
-            x_96_phi = x_121;
-            {
-              x_96 = x_96_phi;
-              x_95_phi = x_96;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_107_save = x_95;
-          int const x_108 = tree.arr[x_107_save].rightIndex;
-          if ((x_108 == -1)) {
-            tree.arr[x_107_save].rightIndex = 2;
-            BST const tint_symbol_6 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[2] = tint_symbol_6;
-            x_123_phi = true;
-            break;
-          } else {
-            x_113 = tree.arr[x_107_save].rightIndex;
-            x_96_phi = x_113;
-            {
-              x_96 = x_96_phi;
-              x_95_phi = x_96;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_96 = x_96_phi;
-          x_95_phi = x_96;
-        }
-      }
-      bool const x_123 = x_123_phi;
-      if (x_123) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_128_phi = 0;
-  bool x_156_phi = false;
-  switch(0u) {
-    default: {
-      x_128_phi = 0;
-      while (true) {
-        int x_154 = 0;
-        int x_146 = 0;
-        int x_129 = 0;
-        int x_129_phi = 0;
-        int const x_128 = x_128_phi;
-        x_156_phi = false;
-        if ((x_128 <= 3)) {
-        } else {
-          break;
-        }
-        int const x_135 = tree.arr[x_128].data;
-        if ((15 <= x_135)) {
-          int const x_148_save = x_128;
-          int const x_149 = tree.arr[x_148_save].leftIndex;
-          if ((x_149 == -1)) {
-            tree.arr[x_148_save].leftIndex = 3;
-            BST const tint_symbol_7 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_7;
-            x_156_phi = true;
-            break;
-          } else {
-            x_154 = tree.arr[x_148_save].leftIndex;
-            x_129_phi = x_154;
-            {
-              x_129 = x_129_phi;
-              x_128_phi = x_129;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_140_save = x_128;
-          int const x_141 = tree.arr[x_140_save].rightIndex;
-          if ((x_141 == -1)) {
-            tree.arr[x_140_save].rightIndex = 3;
-            BST const tint_symbol_8 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_8;
-            x_156_phi = true;
-            break;
-          } else {
-            x_146 = tree.arr[x_140_save].rightIndex;
-            x_129_phi = x_146;
-            {
-              x_129 = x_129_phi;
-              x_128_phi = x_129;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_129 = x_129_phi;
-          x_128_phi = x_129;
-        }
-      }
-      bool const x_156 = x_156_phi;
-      if (x_156) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_161_phi = 0;
-  bool x_189_phi = false;
-  switch(0u) {
-    default: {
-      x_161_phi = 0;
-      while (true) {
-        int x_187 = 0;
-        int x_179 = 0;
-        int x_162 = 0;
-        int x_162_phi = 0;
-        int const x_161 = x_161_phi;
-        x_189_phi = false;
-        if ((x_161 <= 4)) {
-        } else {
-          break;
-        }
-        int const x_168 = tree.arr[x_161].data;
-        if ((7 <= x_168)) {
-          int const x_181_save = x_161;
-          int const x_182 = tree.arr[x_181_save].leftIndex;
-          if ((x_182 == -1)) {
-            tree.arr[x_181_save].leftIndex = 4;
-            BST const tint_symbol_9 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_9;
-            x_189_phi = true;
-            break;
-          } else {
-            x_187 = tree.arr[x_181_save].leftIndex;
-            x_162_phi = x_187;
-            {
-              x_162 = x_162_phi;
-              x_161_phi = x_162;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_173_save = x_161;
-          int const x_174 = tree.arr[x_173_save].rightIndex;
-          if ((x_174 == -1)) {
-            tree.arr[x_173_save].rightIndex = 4;
-            BST const tint_symbol_10 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_10;
-            x_189_phi = true;
-            break;
-          } else {
-            x_179 = tree.arr[x_173_save].rightIndex;
-            x_162_phi = x_179;
-            {
-              x_162 = x_162_phi;
-              x_161_phi = x_162;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_162 = x_162_phi;
-          x_161_phi = x_162;
-        }
-      }
-      bool const x_189 = x_189_phi;
-      if (x_189) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_194_phi = 0;
-  bool x_222_phi = false;
-  switch(0u) {
-    default: {
-      x_194_phi = 0;
-      while (true) {
-        int x_220 = 0;
-        int x_212 = 0;
-        int x_195 = 0;
-        int x_195_phi = 0;
-        int const x_194 = x_194_phi;
-        x_222_phi = false;
-        if ((x_194 <= 5)) {
-        } else {
-          break;
-        }
-        int const x_201 = tree.arr[x_194].data;
-        if ((8 <= x_201)) {
-          int const x_214_save = x_194;
-          int const x_215 = tree.arr[x_214_save].leftIndex;
-          if ((x_215 == -1)) {
-            tree.arr[x_214_save].leftIndex = 5;
-            BST const tint_symbol_11 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_11;
-            x_222_phi = true;
-            break;
-          } else {
-            x_220 = tree.arr[x_214_save].leftIndex;
-            x_195_phi = x_220;
-            {
-              x_195 = x_195_phi;
-              x_194_phi = x_195;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_206_save = x_194;
-          int const x_207 = tree.arr[x_206_save].rightIndex;
-          if ((x_207 == -1)) {
-            tree.arr[x_206_save].rightIndex = 5;
-            BST const tint_symbol_12 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_12;
-            x_222_phi = true;
-            break;
-          } else {
-            x_212 = tree.arr[x_206_save].rightIndex;
-            x_195_phi = x_212;
-            {
-              x_195 = x_195_phi;
-              x_194_phi = x_195;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_195 = x_195_phi;
-          x_194_phi = x_195;
-        }
-      }
-      bool const x_222 = x_222_phi;
-      if (x_222) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_227_phi = 0;
-  bool x_255_phi = false;
-  switch(0u) {
-    default: {
-      x_227_phi = 0;
-      while (true) {
-        int x_253 = 0;
-        int x_245 = 0;
-        int x_228 = 0;
-        int x_228_phi = 0;
-        int const x_227 = x_227_phi;
-        x_255_phi = false;
-        if ((x_227 <= 6)) {
-        } else {
-          break;
-        }
-        int const x_234 = tree.arr[x_227].data;
-        if ((2 <= x_234)) {
-          int const x_247_save = x_227;
-          int const x_248 = tree.arr[x_247_save].leftIndex;
-          if ((x_248 == -1)) {
-            tree.arr[x_247_save].leftIndex = 6;
-            BST const tint_symbol_13 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_13;
-            x_255_phi = true;
-            break;
-          } else {
-            x_253 = tree.arr[x_247_save].leftIndex;
-            x_228_phi = x_253;
-            {
-              x_228 = x_228_phi;
-              x_227_phi = x_228;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_239_save = x_227;
-          int const x_240 = tree.arr[x_239_save].rightIndex;
-          if ((x_240 == -1)) {
-            tree.arr[x_239_save].rightIndex = 6;
-            BST const tint_symbol_14 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_14;
-            x_255_phi = true;
-            break;
-          } else {
-            x_245 = tree.arr[x_239_save].rightIndex;
-            x_228_phi = x_245;
-            {
-              x_228 = x_228_phi;
-              x_227_phi = x_228;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_228 = x_228_phi;
-          x_227_phi = x_228;
-        }
-      }
-      bool const x_255 = x_255_phi;
-      if (x_255) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_260_phi = 0;
-  bool x_288_phi = false;
-  switch(0u) {
-    default: {
-      x_260_phi = 0;
-      while (true) {
-        int x_286 = 0;
-        int x_278 = 0;
-        int x_261 = 0;
-        int x_261_phi = 0;
-        int const x_260 = x_260_phi;
-        x_288_phi = false;
-        if ((x_260 <= 7)) {
-        } else {
-          break;
-        }
-        int const x_267 = tree.arr[x_260].data;
-        if ((6 <= x_267)) {
-          int const x_280_save = x_260;
-          int const x_281 = tree.arr[x_280_save].leftIndex;
-          if ((x_281 == -1)) {
-            tree.arr[x_280_save].leftIndex = 7;
-            BST const tint_symbol_15 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_15;
-            x_288_phi = true;
-            break;
-          } else {
-            x_286 = tree.arr[x_280_save].leftIndex;
-            x_261_phi = x_286;
-            {
-              x_261 = x_261_phi;
-              x_260_phi = x_261;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_272_save = x_260;
-          int const x_273 = tree.arr[x_272_save].rightIndex;
-          if ((x_273 == -1)) {
-            tree.arr[x_272_save].rightIndex = 7;
-            BST const tint_symbol_16 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_16;
-            x_288_phi = true;
-            break;
-          } else {
-            x_278 = tree.arr[x_272_save].rightIndex;
-            x_261_phi = x_278;
-            {
-              x_261 = x_261_phi;
-              x_260_phi = x_261;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_261 = x_261_phi;
-          x_260_phi = x_261;
-        }
-      }
-      bool const x_288 = x_288_phi;
-      if (x_288) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_293_phi = 0;
-  bool x_321_phi = false;
-  switch(0u) {
-    default: {
-      x_293_phi = 0;
-      while (true) {
-        int x_319 = 0;
-        int x_311 = 0;
-        int x_294 = 0;
-        int x_294_phi = 0;
-        int const x_293 = x_293_phi;
-        x_321_phi = false;
-        if ((x_293 <= 8)) {
-        } else {
-          break;
-        }
-        int const x_300 = tree.arr[x_293].data;
-        if ((17 <= x_300)) {
-          int const x_313_save = x_293;
-          int const x_314 = tree.arr[x_313_save].leftIndex;
-          if ((x_314 == -1)) {
-            tree.arr[x_313_save].leftIndex = 8;
-            BST const tint_symbol_17 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_17;
-            x_321_phi = true;
-            break;
-          } else {
-            x_319 = tree.arr[x_313_save].leftIndex;
-            x_294_phi = x_319;
-            {
-              x_294 = x_294_phi;
-              x_293_phi = x_294;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_305_save = x_293;
-          int const x_306 = tree.arr[x_305_save].rightIndex;
-          if ((x_306 == -1)) {
-            tree.arr[x_305_save].rightIndex = 8;
-            BST const tint_symbol_18 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_18;
-            x_321_phi = true;
-            break;
-          } else {
-            x_311 = tree.arr[x_305_save].rightIndex;
-            x_294_phi = x_311;
-            {
-              x_294 = x_294_phi;
-              x_293_phi = x_294;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_294 = x_294_phi;
-          x_293_phi = x_294;
-        }
-      }
-      bool const x_321 = x_321_phi;
-      if (x_321) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_326_phi = 0;
-  bool x_354_phi = false;
-  switch(0u) {
-    default: {
-      x_326_phi = 0;
-      while (true) {
-        int x_352 = 0;
-        int x_344 = 0;
-        int x_327 = 0;
-        int x_327_phi = 0;
-        int const x_326 = x_326_phi;
-        x_354_phi = false;
-        if ((x_326 <= 9)) {
-        } else {
-          break;
-        }
-        int const x_333 = tree.arr[x_326].data;
-        if ((13 <= x_333)) {
-          int const x_346_save = x_326;
-          int const x_347 = tree.arr[x_346_save].leftIndex;
-          if ((x_347 == -1)) {
-            tree.arr[x_346_save].leftIndex = 9;
-            BST const tint_symbol_19 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_19;
-            x_354_phi = true;
-            break;
-          } else {
-            x_352 = tree.arr[x_346_save].leftIndex;
-            x_327_phi = x_352;
-            {
-              x_327 = x_327_phi;
-              x_326_phi = x_327;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_338_save = x_326;
-          int const x_339 = tree.arr[x_338_save].rightIndex;
-          if ((x_339 == -1)) {
-            tree.arr[x_338_save].rightIndex = 9;
-            BST const tint_symbol_20 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_20;
-            x_354_phi = true;
-            break;
-          } else {
-            x_344 = tree.arr[x_338_save].rightIndex;
-            x_327_phi = x_344;
-            {
-              x_327 = x_327_phi;
-              x_326_phi = x_327;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_327 = x_327_phi;
-          x_326_phi = x_327;
-        }
-      }
-      bool const x_354 = x_354_phi;
-      if (x_354) {
-        break;
-      }
-      break;
-    }
-  }
-  x_357_phi = 0;
-  x_360_phi = 0;
-  x_362_phi = 0;
-  while (true) {
-    int x_392 = 0;
-    int x_402 = 0;
-    int x_407 = 0;
-    int x_363 = 0;
-    int x_358_phi = 0;
-    int x_361_phi = 0;
-    int const x_357 = x_357_phi;
-    x_360 = x_360_phi;
-    int const x_362 = x_362_phi;
-    int const x_365 = as_type<int>((as_type<uint>(6) - as_type<uint>(15)));
-    if ((x_362 < 20)) {
-    } else {
-      break;
-    }
-    int x_374_phi = 0;
-    int x_392_phi = 0;
-    bool x_393_phi = false;
-    switch(0u) {
-      default: {
-        x_374_phi = 0;
-        while (true) {
-          int const x_374 = x_374_phi;
-          x_392_phi = x_357;
-          x_393_phi = false;
-          if ((x_374 != -1)) {
-          } else {
-            break;
-          }
-          BST const x_381 = tree.arr[x_374];
-          int const x_382 = x_381.data;
-          int const x_383 = x_381.leftIndex;
-          int const x_385 = x_381.rightIndex;
-          if ((x_382 == x_362)) {
-            x_392_phi = x_362;
-            x_393_phi = true;
-            break;
-          }
-          float const x_389 = (*(tint_symbol_22))[select(3u, 3u, (3u <= 3u))];
-          {
-            x_374_phi = select(x_383, x_385, !((x_362 <= x_382)));
-          }
-        }
-        x_392 = x_392_phi;
-        bool const x_393 = x_393_phi;
-        x_358_phi = x_392;
-        if (x_393) {
-          break;
-        }
-        x_358_phi = -1;
-        break;
-      }
-    }
-    int x_358 = 0;
-    int x_401 = 0;
-    int x_406 = 0;
-    int x_402_phi = 0;
-    int x_407_phi = 0;
-    x_358 = x_358_phi;
-    switch(x_362) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_402_phi = x_360;
-        if ((x_358 == as_type<int>(x_362))) {
-          x_401 = as_type<int>(as_type<int>((as_type<uint>(x_360) + as_type<uint>(as_type<int>(1)))));
-          x_402_phi = x_401;
-        }
-        x_402 = x_402_phi;
-        x_361_phi = x_402;
-        break;
-      }
-      default: {
-        x_407_phi = x_360;
-        if ((x_358 == as_type<int>(-1))) {
-          x_406 = as_type<int>(as_type<int>((as_type<uint>(x_360) + as_type<uint>(as_type<int>(1)))));
-          x_407_phi = x_406;
-        }
-        x_407 = x_407_phi;
-        x_361_phi = x_407;
-        break;
-      }
-    }
-    int const x_361 = x_361_phi;
-    {
-      x_363 = as_type<int>((as_type<uint>(x_362) + as_type<uint>(1)));
-      x_357_phi = x_358;
-      x_360_phi = x_361;
-      x_362_phi = x_363;
-    }
-  }
-  if ((x_360 == as_type<int>(20))) {
-    *(tint_symbol_22) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_22) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_23) {
-  main_1(tint_symbol_23);
-  main_out const tint_symbol_21 = {.x_GLF_color_1=*(tint_symbol_23)};
-  return tint_symbol_21;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_24 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_24));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.spvasm
deleted file mode 100644
index 6884591..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,1172 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 626
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %x_360 "x_360"
-               OpName %x_62_phi "x_62_phi"
-               OpName %x_90_phi "x_90_phi"
-               OpName %x_357_phi "x_357_phi"
-               OpName %x_360_phi "x_360_phi"
-               OpName %x_362_phi "x_362_phi"
-               OpName %x_88 "x_88"
-               OpName %x_80 "x_80"
-               OpName %x_63 "x_63"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_123_phi "x_123_phi"
-               OpName %x_121 "x_121"
-               OpName %x_113 "x_113"
-               OpName %x_96 "x_96"
-               OpName %x_96_phi "x_96_phi"
-               OpName %x_128_phi "x_128_phi"
-               OpName %x_156_phi "x_156_phi"
-               OpName %x_154 "x_154"
-               OpName %x_146 "x_146"
-               OpName %x_129 "x_129"
-               OpName %x_129_phi "x_129_phi"
-               OpName %x_161_phi "x_161_phi"
-               OpName %x_189_phi "x_189_phi"
-               OpName %x_187 "x_187"
-               OpName %x_179 "x_179"
-               OpName %x_162 "x_162"
-               OpName %x_162_phi "x_162_phi"
-               OpName %x_194_phi "x_194_phi"
-               OpName %x_222_phi "x_222_phi"
-               OpName %x_220 "x_220"
-               OpName %x_212 "x_212"
-               OpName %x_195 "x_195"
-               OpName %x_195_phi "x_195_phi"
-               OpName %x_227_phi "x_227_phi"
-               OpName %x_255_phi "x_255_phi"
-               OpName %x_253 "x_253"
-               OpName %x_245 "x_245"
-               OpName %x_228 "x_228"
-               OpName %x_228_phi "x_228_phi"
-               OpName %x_260_phi "x_260_phi"
-               OpName %x_288_phi "x_288_phi"
-               OpName %x_286 "x_286"
-               OpName %x_278 "x_278"
-               OpName %x_261 "x_261"
-               OpName %x_261_phi "x_261_phi"
-               OpName %x_293_phi "x_293_phi"
-               OpName %x_321_phi "x_321_phi"
-               OpName %x_319 "x_319"
-               OpName %x_311 "x_311"
-               OpName %x_294 "x_294"
-               OpName %x_294_phi "x_294_phi"
-               OpName %x_326_phi "x_326_phi"
-               OpName %x_354_phi "x_354_phi"
-               OpName %x_352 "x_352"
-               OpName %x_344 "x_344"
-               OpName %x_327 "x_327"
-               OpName %x_327_phi "x_327_phi"
-               OpName %x_392 "x_392"
-               OpName %x_402 "x_402"
-               OpName %x_407 "x_407"
-               OpName %x_363 "x_363"
-               OpName %x_358_phi "x_358_phi"
-               OpName %x_361_phi "x_361_phi"
-               OpName %x_374_phi "x_374_phi"
-               OpName %x_392_phi "x_392_phi"
-               OpName %x_393_phi "x_393_phi"
-               OpName %x_358 "x_358"
-               OpName %x_401 "x_401"
-               OpName %x_406 "x_406"
-               OpName %x_402_phi "x_402_phi"
-               OpName %x_407_phi "x_407_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Function__arr_BST_uint_10 = OpTypePointer Function %_arr_BST_uint_10
-         %19 = OpConstantNull %_arr_BST_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-%_ptr_Function_BST = OpTypePointer Function %BST
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-         %36 = OpConstantComposite %BST %int_9 %int_n1 %int_n1
-     %uint_0 = OpConstant %uint 0
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-         %71 = OpConstantComposite %BST %int_5 %int_n1 %int_n1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %int_2 = OpConstant %int 2
-     %int_12 = OpConstant %int 12
-        %126 = OpConstantComposite %BST %int_12 %int_n1 %int_n1
-      %int_3 = OpConstant %int 3
-     %int_15 = OpConstant %int 15
-        %179 = OpConstantComposite %BST %int_15 %int_n1 %int_n1
-      %int_4 = OpConstant %int 4
-      %int_7 = OpConstant %int 7
-        %232 = OpConstantComposite %BST %int_7 %int_n1 %int_n1
-      %int_8 = OpConstant %int 8
-        %284 = OpConstantComposite %BST %int_8 %int_n1 %int_n1
-      %int_6 = OpConstant %int 6
-        %336 = OpConstantComposite %BST %int_2 %int_n1 %int_n1
-        %387 = OpConstantComposite %BST %int_6 %int_n1 %int_n1
-     %int_17 = OpConstant %int 17
-        %439 = OpConstantComposite %BST %int_17 %int_n1 %int_n1
-     %int_13 = OpConstant %int 13
-        %491 = OpConstantComposite %BST %int_13 %int_n1 %int_n1
-     %int_20 = OpConstant %int 20
-     %uint_3 = OpConstant %uint 3
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %613 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %614 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %615 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %tree = OpVariable %_ptr_Function__arr_BST_uint_10 Function %19
-      %x_360 = OpVariable %_ptr_Function_int Function %22
-   %x_62_phi = OpVariable %_ptr_Function_int Function %22
-   %x_90_phi = OpVariable %_ptr_Function_bool Function %27
-  %x_357_phi = OpVariable %_ptr_Function_int Function %22
-  %x_360_phi = OpVariable %_ptr_Function_int Function %22
-  %x_362_phi = OpVariable %_ptr_Function_int Function %22
-       %x_88 = OpVariable %_ptr_Function_int Function %22
-       %x_80 = OpVariable %_ptr_Function_int Function %22
-       %x_63 = OpVariable %_ptr_Function_int Function %22
-   %x_63_phi = OpVariable %_ptr_Function_int Function %22
-   %x_95_phi = OpVariable %_ptr_Function_int Function %22
-  %x_123_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_121 = OpVariable %_ptr_Function_int Function %22
-      %x_113 = OpVariable %_ptr_Function_int Function %22
-       %x_96 = OpVariable %_ptr_Function_int Function %22
-   %x_96_phi = OpVariable %_ptr_Function_int Function %22
-  %x_128_phi = OpVariable %_ptr_Function_int Function %22
-  %x_156_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_154 = OpVariable %_ptr_Function_int Function %22
-      %x_146 = OpVariable %_ptr_Function_int Function %22
-      %x_129 = OpVariable %_ptr_Function_int Function %22
-  %x_129_phi = OpVariable %_ptr_Function_int Function %22
-  %x_161_phi = OpVariable %_ptr_Function_int Function %22
-  %x_189_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_187 = OpVariable %_ptr_Function_int Function %22
-      %x_179 = OpVariable %_ptr_Function_int Function %22
-      %x_162 = OpVariable %_ptr_Function_int Function %22
-  %x_162_phi = OpVariable %_ptr_Function_int Function %22
-  %x_194_phi = OpVariable %_ptr_Function_int Function %22
-  %x_222_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_220 = OpVariable %_ptr_Function_int Function %22
-      %x_212 = OpVariable %_ptr_Function_int Function %22
-      %x_195 = OpVariable %_ptr_Function_int Function %22
-  %x_195_phi = OpVariable %_ptr_Function_int Function %22
-  %x_227_phi = OpVariable %_ptr_Function_int Function %22
-  %x_255_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_253 = OpVariable %_ptr_Function_int Function %22
-      %x_245 = OpVariable %_ptr_Function_int Function %22
-      %x_228 = OpVariable %_ptr_Function_int Function %22
-  %x_228_phi = OpVariable %_ptr_Function_int Function %22
-  %x_260_phi = OpVariable %_ptr_Function_int Function %22
-  %x_288_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_286 = OpVariable %_ptr_Function_int Function %22
-      %x_278 = OpVariable %_ptr_Function_int Function %22
-      %x_261 = OpVariable %_ptr_Function_int Function %22
-  %x_261_phi = OpVariable %_ptr_Function_int Function %22
-  %x_293_phi = OpVariable %_ptr_Function_int Function %22
-  %x_321_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_319 = OpVariable %_ptr_Function_int Function %22
-      %x_311 = OpVariable %_ptr_Function_int Function %22
-      %x_294 = OpVariable %_ptr_Function_int Function %22
-  %x_294_phi = OpVariable %_ptr_Function_int Function %22
-  %x_326_phi = OpVariable %_ptr_Function_int Function %22
-  %x_354_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_352 = OpVariable %_ptr_Function_int Function %22
-      %x_344 = OpVariable %_ptr_Function_int Function %22
-      %x_327 = OpVariable %_ptr_Function_int Function %22
-  %x_327_phi = OpVariable %_ptr_Function_int Function %22
-      %x_392 = OpVariable %_ptr_Function_int Function %22
-      %x_402 = OpVariable %_ptr_Function_int Function %22
-      %x_407 = OpVariable %_ptr_Function_int Function %22
-      %x_363 = OpVariable %_ptr_Function_int Function %22
-  %x_358_phi = OpVariable %_ptr_Function_int Function %22
-  %x_361_phi = OpVariable %_ptr_Function_int Function %22
-  %x_374_phi = OpVariable %_ptr_Function_int Function %22
-  %x_392_phi = OpVariable %_ptr_Function_int Function %22
-  %x_393_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_358 = OpVariable %_ptr_Function_int Function %22
-      %x_401 = OpVariable %_ptr_Function_int Function %22
-      %x_406 = OpVariable %_ptr_Function_int Function %22
-  %x_402_phi = OpVariable %_ptr_Function_int Function %22
-  %x_407_phi = OpVariable %_ptr_Function_int Function %22
-         %33 = OpAccessChain %_ptr_Function_BST %tree %int_0
-               OpStore %33 %36
-               OpSelectionMerge %37 None
-               OpSwitch %uint_0 %39
-         %39 = OpLabel
-               OpStore %x_62_phi %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %48 = OpLoad %int %x_62_phi
-               OpStore %x_90_phi %false
-         %51 = OpSLessThanEqual %bool %48 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %41
-         %52 = OpLabel
-         %55 = OpAccessChain %_ptr_Function_int %tree %48 %uint_0
-         %56 = OpLoad %int %55
-         %58 = OpSLessThanEqual %bool %int_5 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-         %64 = OpLoad %int %63
-         %65 = OpIEqual %bool %64 %int_n1
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-         %69 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-               OpStore %69 %int_1
-         %70 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %70 %71
-               OpStore %x_90_phi %true
-               OpBranch %41
-         %68 = OpLabel
-         %73 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-         %74 = OpLoad %int %73
-               OpStore %x_88 %74
-         %75 = OpLoad %int %x_88
-               OpStore %x_63_phi %75
-               OpBranch %42
-         %66 = OpLabel
-               OpReturn
-         %61 = OpLabel
-         %77 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-         %78 = OpLoad %int %77
-         %79 = OpIEqual %bool %78 %int_n1
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-               OpStore %83 %int_1
-         %84 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %84 %71
-               OpStore %x_90_phi %true
-               OpBranch %41
-         %82 = OpLabel
-         %85 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-         %86 = OpLoad %int %85
-               OpStore %x_80 %86
-         %87 = OpLoad %int %x_80
-               OpStore %x_63_phi %87
-               OpBranch %42
-         %80 = OpLabel
-               OpReturn
-         %59 = OpLabel
-               OpReturn
-         %42 = OpLabel
-         %88 = OpLoad %int %x_63_phi
-               OpStore %x_63 %88
-         %89 = OpLoad %int %x_63
-               OpStore %x_62_phi %89
-               OpBranch %40
-         %41 = OpLabel
-         %90 = OpLoad %bool %x_90_phi
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %91
-         %92 = OpLabel
-               OpBranch %37
-         %91 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpSelectionMerge %95 None
-               OpSwitch %uint_0 %96
-         %96 = OpLabel
-               OpStore %x_95_phi %int_0
-               OpBranch %97
-         %97 = OpLabel
-               OpLoopMerge %98 %99 None
-               OpBranch %100
-        %100 = OpLabel
-        %105 = OpLoad %int %x_95_phi
-               OpStore %x_123_phi %false
-        %107 = OpSLessThanEqual %bool %105 %int_2
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %110
-        %109 = OpLabel
-               OpBranch %108
-        %110 = OpLabel
-               OpBranch %98
-        %108 = OpLabel
-        %111 = OpAccessChain %_ptr_Function_int %tree %105 %uint_0
-        %112 = OpLoad %int %111
-        %114 = OpSLessThanEqual %bool %int_12 %112
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-        %119 = OpLoad %int %118
-        %120 = OpIEqual %bool %119 %int_n1
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-        %124 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-               OpStore %124 %int_2
-        %125 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %125 %126
-               OpStore %x_123_phi %true
-               OpBranch %98
-        %123 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-        %128 = OpLoad %int %127
-               OpStore %x_121 %128
-        %129 = OpLoad %int %x_121
-               OpStore %x_96_phi %129
-               OpBranch %99
-        %121 = OpLabel
-               OpReturn
-        %117 = OpLabel
-        %130 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-        %131 = OpLoad %int %130
-        %132 = OpIEqual %bool %131 %int_n1
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %135
-        %134 = OpLabel
-        %136 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-               OpStore %136 %int_2
-        %137 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %137 %126
-               OpStore %x_123_phi %true
-               OpBranch %98
-        %135 = OpLabel
-        %138 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-        %139 = OpLoad %int %138
-               OpStore %x_113 %139
-        %140 = OpLoad %int %x_113
-               OpStore %x_96_phi %140
-               OpBranch %99
-        %133 = OpLabel
-               OpReturn
-        %115 = OpLabel
-               OpReturn
-         %99 = OpLabel
-        %141 = OpLoad %int %x_96_phi
-               OpStore %x_96 %141
-        %142 = OpLoad %int %x_96
-               OpStore %x_95_phi %142
-               OpBranch %97
-         %98 = OpLabel
-        %143 = OpLoad %bool %x_123_phi
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %144
-        %145 = OpLabel
-               OpBranch %95
-        %144 = OpLabel
-               OpBranch %95
-         %95 = OpLabel
-               OpSelectionMerge %148 None
-               OpSwitch %uint_0 %149
-        %149 = OpLabel
-               OpStore %x_128_phi %int_0
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %158 = OpLoad %int %x_128_phi
-               OpStore %x_156_phi %false
-        %160 = OpSLessThanEqual %bool %158 %int_3
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %163
-        %162 = OpLabel
-               OpBranch %161
-        %163 = OpLabel
-               OpBranch %151
-        %161 = OpLabel
-        %164 = OpAccessChain %_ptr_Function_int %tree %158 %uint_0
-        %165 = OpLoad %int %164
-        %167 = OpSLessThanEqual %bool %int_15 %165
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-        %171 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-        %172 = OpLoad %int %171
-        %173 = OpIEqual %bool %172 %int_n1
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-        %177 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-               OpStore %177 %int_3
-        %178 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %178 %179
-               OpStore %x_156_phi %true
-               OpBranch %151
-        %176 = OpLabel
-        %180 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-        %181 = OpLoad %int %180
-               OpStore %x_154 %181
-        %182 = OpLoad %int %x_154
-               OpStore %x_129_phi %182
-               OpBranch %152
-        %174 = OpLabel
-               OpReturn
-        %170 = OpLabel
-        %183 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-        %184 = OpLoad %int %183
-        %185 = OpIEqual %bool %184 %int_n1
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-        %189 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-               OpStore %189 %int_3
-        %190 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %190 %179
-               OpStore %x_156_phi %true
-               OpBranch %151
-        %188 = OpLabel
-        %191 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-        %192 = OpLoad %int %191
-               OpStore %x_146 %192
-        %193 = OpLoad %int %x_146
-               OpStore %x_129_phi %193
-               OpBranch %152
-        %186 = OpLabel
-               OpReturn
-        %168 = OpLabel
-               OpReturn
-        %152 = OpLabel
-        %194 = OpLoad %int %x_129_phi
-               OpStore %x_129 %194
-        %195 = OpLoad %int %x_129
-               OpStore %x_128_phi %195
-               OpBranch %150
-        %151 = OpLabel
-        %196 = OpLoad %bool %x_156_phi
-               OpSelectionMerge %197 None
-               OpBranchConditional %196 %198 %197
-        %198 = OpLabel
-               OpBranch %148
-        %197 = OpLabel
-               OpBranch %148
-        %148 = OpLabel
-               OpSelectionMerge %201 None
-               OpSwitch %uint_0 %202
-        %202 = OpLabel
-               OpStore %x_161_phi %int_0
-               OpBranch %203
-        %203 = OpLabel
-               OpLoopMerge %204 %205 None
-               OpBranch %206
-        %206 = OpLabel
-        %211 = OpLoad %int %x_161_phi
-               OpStore %x_189_phi %false
-        %213 = OpSLessThanEqual %bool %211 %int_4
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-               OpBranch %204
-        %214 = OpLabel
-        %217 = OpAccessChain %_ptr_Function_int %tree %211 %uint_0
-        %218 = OpLoad %int %217
-        %220 = OpSLessThanEqual %bool %int_7 %218
-               OpSelectionMerge %221 None
-               OpBranchConditional %220 %222 %223
-        %222 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-        %225 = OpLoad %int %224
-        %226 = OpIEqual %bool %225 %int_n1
-               OpSelectionMerge %227 None
-               OpBranchConditional %226 %228 %229
-        %228 = OpLabel
-        %230 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-               OpStore %230 %int_4
-        %231 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %231 %232
-               OpStore %x_189_phi %true
-               OpBranch %204
-        %229 = OpLabel
-        %233 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-        %234 = OpLoad %int %233
-               OpStore %x_187 %234
-        %235 = OpLoad %int %x_187
-               OpStore %x_162_phi %235
-               OpBranch %205
-        %227 = OpLabel
-               OpReturn
-        %223 = OpLabel
-        %236 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-        %237 = OpLoad %int %236
-        %238 = OpIEqual %bool %237 %int_n1
-               OpSelectionMerge %239 None
-               OpBranchConditional %238 %240 %241
-        %240 = OpLabel
-        %242 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-               OpStore %242 %int_4
-        %243 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %243 %232
-               OpStore %x_189_phi %true
-               OpBranch %204
-        %241 = OpLabel
-        %244 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-        %245 = OpLoad %int %244
-               OpStore %x_179 %245
-        %246 = OpLoad %int %x_179
-               OpStore %x_162_phi %246
-               OpBranch %205
-        %239 = OpLabel
-               OpReturn
-        %221 = OpLabel
-               OpReturn
-        %205 = OpLabel
-        %247 = OpLoad %int %x_162_phi
-               OpStore %x_162 %247
-        %248 = OpLoad %int %x_162
-               OpStore %x_161_phi %248
-               OpBranch %203
-        %204 = OpLabel
-        %249 = OpLoad %bool %x_189_phi
-               OpSelectionMerge %250 None
-               OpBranchConditional %249 %251 %250
-        %251 = OpLabel
-               OpBranch %201
-        %250 = OpLabel
-               OpBranch %201
-        %201 = OpLabel
-               OpSelectionMerge %254 None
-               OpSwitch %uint_0 %255
-        %255 = OpLabel
-               OpStore %x_194_phi %int_0
-               OpBranch %256
-        %256 = OpLabel
-               OpLoopMerge %257 %258 None
-               OpBranch %259
-        %259 = OpLabel
-        %264 = OpLoad %int %x_194_phi
-               OpStore %x_222_phi %false
-        %265 = OpSLessThanEqual %bool %264 %int_5
-               OpSelectionMerge %266 None
-               OpBranchConditional %265 %267 %268
-        %267 = OpLabel
-               OpBranch %266
-        %268 = OpLabel
-               OpBranch %257
-        %266 = OpLabel
-        %269 = OpAccessChain %_ptr_Function_int %tree %264 %uint_0
-        %270 = OpLoad %int %269
-        %272 = OpSLessThanEqual %bool %int_8 %270
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %275
-        %274 = OpLabel
-        %276 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-        %277 = OpLoad %int %276
-        %278 = OpIEqual %bool %277 %int_n1
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
-        %282 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-               OpStore %282 %int_5
-        %283 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %283 %284
-               OpStore %x_222_phi %true
-               OpBranch %257
-        %281 = OpLabel
-        %285 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-        %286 = OpLoad %int %285
-               OpStore %x_220 %286
-        %287 = OpLoad %int %x_220
-               OpStore %x_195_phi %287
-               OpBranch %258
-        %279 = OpLabel
-               OpReturn
-        %275 = OpLabel
-        %288 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-        %289 = OpLoad %int %288
-        %290 = OpIEqual %bool %289 %int_n1
-               OpSelectionMerge %291 None
-               OpBranchConditional %290 %292 %293
-        %292 = OpLabel
-        %294 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-               OpStore %294 %int_5
-        %295 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %295 %284
-               OpStore %x_222_phi %true
-               OpBranch %257
-        %293 = OpLabel
-        %296 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-        %297 = OpLoad %int %296
-               OpStore %x_212 %297
-        %298 = OpLoad %int %x_212
-               OpStore %x_195_phi %298
-               OpBranch %258
-        %291 = OpLabel
-               OpReturn
-        %273 = OpLabel
-               OpReturn
-        %258 = OpLabel
-        %299 = OpLoad %int %x_195_phi
-               OpStore %x_195 %299
-        %300 = OpLoad %int %x_195
-               OpStore %x_194_phi %300
-               OpBranch %256
-        %257 = OpLabel
-        %301 = OpLoad %bool %x_222_phi
-               OpSelectionMerge %302 None
-               OpBranchConditional %301 %303 %302
-        %303 = OpLabel
-               OpBranch %254
-        %302 = OpLabel
-               OpBranch %254
-        %254 = OpLabel
-               OpSelectionMerge %306 None
-               OpSwitch %uint_0 %307
-        %307 = OpLabel
-               OpStore %x_227_phi %int_0
-               OpBranch %308
-        %308 = OpLabel
-               OpLoopMerge %309 %310 None
-               OpBranch %311
-        %311 = OpLabel
-        %316 = OpLoad %int %x_227_phi
-               OpStore %x_255_phi %false
-        %318 = OpSLessThanEqual %bool %316 %int_6
-               OpSelectionMerge %319 None
-               OpBranchConditional %318 %320 %321
-        %320 = OpLabel
-               OpBranch %319
-        %321 = OpLabel
-               OpBranch %309
-        %319 = OpLabel
-        %322 = OpAccessChain %_ptr_Function_int %tree %316 %uint_0
-        %323 = OpLoad %int %322
-        %324 = OpSLessThanEqual %bool %int_2 %323
-               OpSelectionMerge %325 None
-               OpBranchConditional %324 %326 %327
-        %326 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-        %329 = OpLoad %int %328
-        %330 = OpIEqual %bool %329 %int_n1
-               OpSelectionMerge %331 None
-               OpBranchConditional %330 %332 %333
-        %332 = OpLabel
-        %334 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-               OpStore %334 %int_6
-        %335 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %335 %336
-               OpStore %x_255_phi %true
-               OpBranch %309
-        %333 = OpLabel
-        %337 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-        %338 = OpLoad %int %337
-               OpStore %x_253 %338
-        %339 = OpLoad %int %x_253
-               OpStore %x_228_phi %339
-               OpBranch %310
-        %331 = OpLabel
-               OpReturn
-        %327 = OpLabel
-        %340 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-        %341 = OpLoad %int %340
-        %342 = OpIEqual %bool %341 %int_n1
-               OpSelectionMerge %343 None
-               OpBranchConditional %342 %344 %345
-        %344 = OpLabel
-        %346 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-               OpStore %346 %int_6
-        %347 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %347 %336
-               OpStore %x_255_phi %true
-               OpBranch %309
-        %345 = OpLabel
-        %348 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-        %349 = OpLoad %int %348
-               OpStore %x_245 %349
-        %350 = OpLoad %int %x_245
-               OpStore %x_228_phi %350
-               OpBranch %310
-        %343 = OpLabel
-               OpReturn
-        %325 = OpLabel
-               OpReturn
-        %310 = OpLabel
-        %351 = OpLoad %int %x_228_phi
-               OpStore %x_228 %351
-        %352 = OpLoad %int %x_228
-               OpStore %x_227_phi %352
-               OpBranch %308
-        %309 = OpLabel
-        %353 = OpLoad %bool %x_255_phi
-               OpSelectionMerge %354 None
-               OpBranchConditional %353 %355 %354
-        %355 = OpLabel
-               OpBranch %306
-        %354 = OpLabel
-               OpBranch %306
-        %306 = OpLabel
-               OpSelectionMerge %358 None
-               OpSwitch %uint_0 %359
-        %359 = OpLabel
-               OpStore %x_260_phi %int_0
-               OpBranch %360
-        %360 = OpLabel
-               OpLoopMerge %361 %362 None
-               OpBranch %363
-        %363 = OpLabel
-        %368 = OpLoad %int %x_260_phi
-               OpStore %x_288_phi %false
-        %369 = OpSLessThanEqual %bool %368 %int_7
-               OpSelectionMerge %370 None
-               OpBranchConditional %369 %371 %372
-        %371 = OpLabel
-               OpBranch %370
-        %372 = OpLabel
-               OpBranch %361
-        %370 = OpLabel
-        %373 = OpAccessChain %_ptr_Function_int %tree %368 %uint_0
-        %374 = OpLoad %int %373
-        %375 = OpSLessThanEqual %bool %int_6 %374
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %378
-        %377 = OpLabel
-        %379 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-        %380 = OpLoad %int %379
-        %381 = OpIEqual %bool %380 %int_n1
-               OpSelectionMerge %382 None
-               OpBranchConditional %381 %383 %384
-        %383 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-               OpStore %385 %int_7
-        %386 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %386 %387
-               OpStore %x_288_phi %true
-               OpBranch %361
-        %384 = OpLabel
-        %388 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-        %389 = OpLoad %int %388
-               OpStore %x_286 %389
-        %390 = OpLoad %int %x_286
-               OpStore %x_261_phi %390
-               OpBranch %362
-        %382 = OpLabel
-               OpReturn
-        %378 = OpLabel
-        %391 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-        %392 = OpLoad %int %391
-        %393 = OpIEqual %bool %392 %int_n1
-               OpSelectionMerge %394 None
-               OpBranchConditional %393 %395 %396
-        %395 = OpLabel
-        %397 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-               OpStore %397 %int_7
-        %398 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %398 %387
-               OpStore %x_288_phi %true
-               OpBranch %361
-        %396 = OpLabel
-        %399 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-        %400 = OpLoad %int %399
-               OpStore %x_278 %400
-        %401 = OpLoad %int %x_278
-               OpStore %x_261_phi %401
-               OpBranch %362
-        %394 = OpLabel
-               OpReturn
-        %376 = OpLabel
-               OpReturn
-        %362 = OpLabel
-        %402 = OpLoad %int %x_261_phi
-               OpStore %x_261 %402
-        %403 = OpLoad %int %x_261
-               OpStore %x_260_phi %403
-               OpBranch %360
-        %361 = OpLabel
-        %404 = OpLoad %bool %x_288_phi
-               OpSelectionMerge %405 None
-               OpBranchConditional %404 %406 %405
-        %406 = OpLabel
-               OpBranch %358
-        %405 = OpLabel
-               OpBranch %358
-        %358 = OpLabel
-               OpSelectionMerge %409 None
-               OpSwitch %uint_0 %410
-        %410 = OpLabel
-               OpStore %x_293_phi %int_0
-               OpBranch %411
-        %411 = OpLabel
-               OpLoopMerge %412 %413 None
-               OpBranch %414
-        %414 = OpLabel
-        %419 = OpLoad %int %x_293_phi
-               OpStore %x_321_phi %false
-        %420 = OpSLessThanEqual %bool %419 %int_8
-               OpSelectionMerge %421 None
-               OpBranchConditional %420 %422 %423
-        %422 = OpLabel
-               OpBranch %421
-        %423 = OpLabel
-               OpBranch %412
-        %421 = OpLabel
-        %424 = OpAccessChain %_ptr_Function_int %tree %419 %uint_0
-        %425 = OpLoad %int %424
-        %427 = OpSLessThanEqual %bool %int_17 %425
-               OpSelectionMerge %428 None
-               OpBranchConditional %427 %429 %430
-        %429 = OpLabel
-        %431 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-        %432 = OpLoad %int %431
-        %433 = OpIEqual %bool %432 %int_n1
-               OpSelectionMerge %434 None
-               OpBranchConditional %433 %435 %436
-        %435 = OpLabel
-        %437 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-               OpStore %437 %int_8
-        %438 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %438 %439
-               OpStore %x_321_phi %true
-               OpBranch %412
-        %436 = OpLabel
-        %440 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-        %441 = OpLoad %int %440
-               OpStore %x_319 %441
-        %442 = OpLoad %int %x_319
-               OpStore %x_294_phi %442
-               OpBranch %413
-        %434 = OpLabel
-               OpReturn
-        %430 = OpLabel
-        %443 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-        %444 = OpLoad %int %443
-        %445 = OpIEqual %bool %444 %int_n1
-               OpSelectionMerge %446 None
-               OpBranchConditional %445 %447 %448
-        %447 = OpLabel
-        %449 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-               OpStore %449 %int_8
-        %450 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %450 %439
-               OpStore %x_321_phi %true
-               OpBranch %412
-        %448 = OpLabel
-        %451 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-        %452 = OpLoad %int %451
-               OpStore %x_311 %452
-        %453 = OpLoad %int %x_311
-               OpStore %x_294_phi %453
-               OpBranch %413
-        %446 = OpLabel
-               OpReturn
-        %428 = OpLabel
-               OpReturn
-        %413 = OpLabel
-        %454 = OpLoad %int %x_294_phi
-               OpStore %x_294 %454
-        %455 = OpLoad %int %x_294
-               OpStore %x_293_phi %455
-               OpBranch %411
-        %412 = OpLabel
-        %456 = OpLoad %bool %x_321_phi
-               OpSelectionMerge %457 None
-               OpBranchConditional %456 %458 %457
-        %458 = OpLabel
-               OpBranch %409
-        %457 = OpLabel
-               OpBranch %409
-        %409 = OpLabel
-               OpSelectionMerge %461 None
-               OpSwitch %uint_0 %462
-        %462 = OpLabel
-               OpStore %x_326_phi %int_0
-               OpBranch %463
-        %463 = OpLabel
-               OpLoopMerge %464 %465 None
-               OpBranch %466
-        %466 = OpLabel
-        %471 = OpLoad %int %x_326_phi
-               OpStore %x_354_phi %false
-        %472 = OpSLessThanEqual %bool %471 %int_9
-               OpSelectionMerge %473 None
-               OpBranchConditional %472 %474 %475
-        %474 = OpLabel
-               OpBranch %473
-        %475 = OpLabel
-               OpBranch %464
-        %473 = OpLabel
-        %476 = OpAccessChain %_ptr_Function_int %tree %471 %uint_0
-        %477 = OpLoad %int %476
-        %479 = OpSLessThanEqual %bool %int_13 %477
-               OpSelectionMerge %480 None
-               OpBranchConditional %479 %481 %482
-        %481 = OpLabel
-        %483 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-        %484 = OpLoad %int %483
-        %485 = OpIEqual %bool %484 %int_n1
-               OpSelectionMerge %486 None
-               OpBranchConditional %485 %487 %488
-        %487 = OpLabel
-        %489 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-               OpStore %489 %int_9
-        %490 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %490 %491
-               OpStore %x_354_phi %true
-               OpBranch %464
-        %488 = OpLabel
-        %492 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-        %493 = OpLoad %int %492
-               OpStore %x_352 %493
-        %494 = OpLoad %int %x_352
-               OpStore %x_327_phi %494
-               OpBranch %465
-        %486 = OpLabel
-               OpReturn
-        %482 = OpLabel
-        %495 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-        %496 = OpLoad %int %495
-        %497 = OpIEqual %bool %496 %int_n1
-               OpSelectionMerge %498 None
-               OpBranchConditional %497 %499 %500
-        %499 = OpLabel
-        %501 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-               OpStore %501 %int_9
-        %502 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %502 %491
-               OpStore %x_354_phi %true
-               OpBranch %464
-        %500 = OpLabel
-        %503 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-        %504 = OpLoad %int %503
-               OpStore %x_344 %504
-        %505 = OpLoad %int %x_344
-               OpStore %x_327_phi %505
-               OpBranch %465
-        %498 = OpLabel
-               OpReturn
-        %480 = OpLabel
-               OpReturn
-        %465 = OpLabel
-        %506 = OpLoad %int %x_327_phi
-               OpStore %x_327 %506
-        %507 = OpLoad %int %x_327
-               OpStore %x_326_phi %507
-               OpBranch %463
-        %464 = OpLabel
-        %508 = OpLoad %bool %x_354_phi
-               OpSelectionMerge %509 None
-               OpBranchConditional %508 %510 %509
-        %510 = OpLabel
-               OpBranch %461
-        %509 = OpLabel
-               OpBranch %461
-        %461 = OpLabel
-               OpStore %x_357_phi %int_0
-               OpStore %x_360_phi %int_0
-               OpStore %x_362_phi %int_0
-               OpBranch %511
-        %511 = OpLabel
-               OpLoopMerge %512 %513 None
-               OpBranch %514
-        %514 = OpLabel
-        %521 = OpLoad %int %x_357_phi
-        %522 = OpLoad %int %x_360_phi
-               OpStore %x_360 %522
-        %523 = OpLoad %int %x_362_phi
-        %524 = OpISub %int %int_6 %int_15
-        %526 = OpSLessThan %bool %523 %int_20
-               OpSelectionMerge %527 None
-               OpBranchConditional %526 %528 %529
-        %528 = OpLabel
-               OpBranch %527
-        %529 = OpLabel
-               OpBranch %512
-        %527 = OpLabel
-               OpSelectionMerge %533 None
-               OpSwitch %uint_0 %534
-        %534 = OpLabel
-               OpStore %x_374_phi %int_0
-               OpBranch %535
-        %535 = OpLabel
-               OpLoopMerge %536 %537 None
-               OpBranch %538
-        %538 = OpLabel
-        %539 = OpLoad %int %x_374_phi
-               OpStore %x_392_phi %521
-               OpStore %x_393_phi %false
-        %540 = OpINotEqual %bool %539 %int_n1
-               OpSelectionMerge %541 None
-               OpBranchConditional %540 %542 %543
-        %542 = OpLabel
-               OpBranch %541
-        %543 = OpLabel
-               OpBranch %536
-        %541 = OpLabel
-        %544 = OpAccessChain %_ptr_Function_BST %tree %539
-        %545 = OpLoad %BST %544
-        %546 = OpCompositeExtract %int %545 0
-        %547 = OpCompositeExtract %int %545 1
-        %548 = OpCompositeExtract %int %545 2
-        %549 = OpIEqual %bool %546 %523
-               OpSelectionMerge %550 None
-               OpBranchConditional %549 %551 %550
-        %551 = OpLabel
-               OpStore %x_392_phi %523
-               OpStore %x_393_phi %true
-               OpBranch %536
-        %550 = OpLabel
-        %554 = OpULessThanEqual %bool %uint_3 %uint_3
-        %552 = OpSelect %uint %554 %uint_3 %uint_3
-        %556 = OpAccessChain %_ptr_Private_float %x_GLF_color %552
-        %557 = OpLoad %float %556
-               OpBranch %537
-        %537 = OpLabel
-        %560 = OpSLessThanEqual %bool %523 %546
-        %559 = OpLogicalNot %bool %560
-        %558 = OpSelect %int %559 %548 %547
-               OpStore %x_374_phi %558
-               OpBranch %535
-        %536 = OpLabel
-        %561 = OpLoad %int %x_392_phi
-               OpStore %x_392 %561
-        %562 = OpLoad %bool %x_393_phi
-        %563 = OpLoad %int %x_392
-               OpStore %x_358_phi %563
-               OpSelectionMerge %564 None
-               OpBranchConditional %562 %565 %564
-        %565 = OpLabel
-               OpBranch %533
-        %564 = OpLabel
-               OpStore %x_358_phi %int_n1
-               OpBranch %533
-        %533 = OpLabel
-        %571 = OpLoad %int %x_358_phi
-               OpStore %x_358 %571
-               OpSelectionMerge %572 None
-               OpSwitch %523 %573 2 %574 5 %574 6 %574 7 %574 8 %574 9 %574 12 %574 13 %574 15 %574 17 %574
-        %574 = OpLabel
-        %575 = OpLoad %int %x_360
-               OpStore %x_402_phi %575
-        %576 = OpLoad %int %x_358
-        %577 = OpCopyObject %int %523
-        %578 = OpIEqual %bool %576 %577
-               OpSelectionMerge %579 None
-               OpBranchConditional %578 %580 %579
-        %580 = OpLabel
-        %582 = OpLoad %int %x_360
-        %583 = OpCopyObject %int %int_1
-        %584 = OpIAdd %int %582 %583
-        %581 = OpCopyObject %int %584
-               OpStore %x_401 %581
-        %585 = OpLoad %int %x_401
-               OpStore %x_402_phi %585
-               OpBranch %579
-        %579 = OpLabel
-        %586 = OpLoad %int %x_402_phi
-               OpStore %x_402 %586
-        %587 = OpLoad %int %x_402
-               OpStore %x_361_phi %587
-               OpBranch %572
-        %573 = OpLabel
-        %588 = OpLoad %int %x_360
-               OpStore %x_407_phi %588
-        %589 = OpLoad %int %x_358
-        %590 = OpCopyObject %int %int_n1
-        %591 = OpIEqual %bool %589 %590
-               OpSelectionMerge %592 None
-               OpBranchConditional %591 %593 %592
-        %593 = OpLabel
-        %595 = OpLoad %int %x_360
-        %596 = OpCopyObject %int %int_1
-        %597 = OpIAdd %int %595 %596
-        %594 = OpCopyObject %int %597
-               OpStore %x_406 %594
-        %598 = OpLoad %int %x_406
-               OpStore %x_407_phi %598
-               OpBranch %592
-        %592 = OpLabel
-        %599 = OpLoad %int %x_407_phi
-               OpStore %x_407 %599
-        %600 = OpLoad %int %x_407
-               OpStore %x_361_phi %600
-               OpBranch %572
-        %572 = OpLabel
-        %601 = OpLoad %int %x_361_phi
-               OpBranch %513
-        %513 = OpLabel
-        %602 = OpIAdd %int %523 %int_1
-               OpStore %x_363 %602
-        %603 = OpLoad %int %x_358
-               OpStore %x_357_phi %603
-               OpStore %x_360_phi %601
-        %604 = OpLoad %int %x_363
-               OpStore %x_362_phi %604
-               OpBranch %511
-        %512 = OpLabel
-        %605 = OpLoad %int %x_360
-        %606 = OpCopyObject %int %int_20
-        %607 = OpIEqual %bool %605 %606
-               OpSelectionMerge %608 None
-               OpBranchConditional %607 %609 %610
-        %609 = OpLabel
-               OpStore %x_GLF_color %613
-               OpBranch %608
-        %610 = OpLabel
-               OpStore %x_GLF_color %614
-               OpBranch %608
-        %608 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %615
-        %618 = OpLabel
-        %619 = OpFunctionCall %void %main_1
-        %620 = OpLoad %v4float %x_GLF_color
-        %621 = OpCompositeConstruct %main_out %620
-               OpReturnValue %621
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-        %623 = OpLabel
-        %624 = OpFunctionCall %main_out %main_inner
-        %625 = OpCompositeExtract %v4float %624 0
-               OpStore %x_GLF_color_1_1 %625
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.wgsl
deleted file mode 100644
index 0c19b19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,655 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var tree : array<BST, 10>;
-  var x_360 : i32;
-  var x_62_phi : i32;
-  var x_90_phi : bool;
-  var x_357_phi : i32;
-  var x_360_phi : i32;
-  var x_362_phi : i32;
-  tree[0] = BST(9, -1, -1);
-  switch(0u) {
-    default: {
-      x_62_phi = 0;
-      loop {
-        var x_88 : i32;
-        var x_80 : i32;
-        var x_63 : i32;
-        var x_63_phi : i32;
-        let x_62 : i32 = x_62_phi;
-        x_90_phi = false;
-        if ((x_62 <= 1)) {
-        } else {
-          break;
-        }
-        let x_69 : i32 = tree[x_62].data;
-        if ((5 <= x_69)) {
-          let x_82 : ptr<function, i32> = &(tree[x_62].leftIndex);
-          let x_83 : i32 = *(x_82);
-          if ((x_83 == -1)) {
-            *(x_82) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_90_phi = true;
-            break;
-          } else {
-            x_88 = *(x_82);
-            x_63_phi = x_88;
-            continue;
-          }
-          return;
-        } else {
-          let x_74 : ptr<function, i32> = &(tree[x_62].rightIndex);
-          let x_75 : i32 = *(x_74);
-          if ((x_75 == -1)) {
-            *(x_74) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_90_phi = true;
-            break;
-          } else {
-            x_80 = *(x_74);
-            x_63_phi = x_80;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_63 = x_63_phi;
-          x_62_phi = x_63;
-        }
-      }
-      let x_90 : bool = x_90_phi;
-      if (x_90) {
-        break;
-      }
-    }
-  }
-  var x_95_phi : i32;
-  var x_123_phi : bool;
-  switch(0u) {
-    default: {
-      x_95_phi = 0;
-      loop {
-        var x_121 : i32;
-        var x_113 : i32;
-        var x_96 : i32;
-        var x_96_phi : i32;
-        let x_95 : i32 = x_95_phi;
-        x_123_phi = false;
-        if ((x_95 <= 2)) {
-        } else {
-          break;
-        }
-        let x_102 : i32 = tree[x_95].data;
-        if ((12 <= x_102)) {
-          let x_115 : ptr<function, i32> = &(tree[x_95].leftIndex);
-          let x_116 : i32 = *(x_115);
-          if ((x_116 == -1)) {
-            *(x_115) = 2;
-            tree[2] = BST(12, -1, -1);
-            x_123_phi = true;
-            break;
-          } else {
-            x_121 = *(x_115);
-            x_96_phi = x_121;
-            continue;
-          }
-          return;
-        } else {
-          let x_107 : ptr<function, i32> = &(tree[x_95].rightIndex);
-          let x_108 : i32 = *(x_107);
-          if ((x_108 == -1)) {
-            *(x_107) = 2;
-            tree[2] = BST(12, -1, -1);
-            x_123_phi = true;
-            break;
-          } else {
-            x_113 = *(x_107);
-            x_96_phi = x_113;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_96 = x_96_phi;
-          x_95_phi = x_96;
-        }
-      }
-      let x_123 : bool = x_123_phi;
-      if (x_123) {
-        break;
-      }
-    }
-  }
-  var x_128_phi : i32;
-  var x_156_phi : bool;
-  switch(0u) {
-    default: {
-      x_128_phi = 0;
-      loop {
-        var x_154 : i32;
-        var x_146 : i32;
-        var x_129 : i32;
-        var x_129_phi : i32;
-        let x_128 : i32 = x_128_phi;
-        x_156_phi = false;
-        if ((x_128 <= 3)) {
-        } else {
-          break;
-        }
-        let x_135 : i32 = tree[x_128].data;
-        if ((15 <= x_135)) {
-          let x_148 : ptr<function, i32> = &(tree[x_128].leftIndex);
-          let x_149 : i32 = *(x_148);
-          if ((x_149 == -1)) {
-            *(x_148) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_156_phi = true;
-            break;
-          } else {
-            x_154 = *(x_148);
-            x_129_phi = x_154;
-            continue;
-          }
-          return;
-        } else {
-          let x_140 : ptr<function, i32> = &(tree[x_128].rightIndex);
-          let x_141 : i32 = *(x_140);
-          if ((x_141 == -1)) {
-            *(x_140) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_156_phi = true;
-            break;
-          } else {
-            x_146 = *(x_140);
-            x_129_phi = x_146;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_129 = x_129_phi;
-          x_128_phi = x_129;
-        }
-      }
-      let x_156 : bool = x_156_phi;
-      if (x_156) {
-        break;
-      }
-    }
-  }
-  var x_161_phi : i32;
-  var x_189_phi : bool;
-  switch(0u) {
-    default: {
-      x_161_phi = 0;
-      loop {
-        var x_187 : i32;
-        var x_179 : i32;
-        var x_162 : i32;
-        var x_162_phi : i32;
-        let x_161 : i32 = x_161_phi;
-        x_189_phi = false;
-        if ((x_161 <= 4)) {
-        } else {
-          break;
-        }
-        let x_168 : i32 = tree[x_161].data;
-        if ((7 <= x_168)) {
-          let x_181 : ptr<function, i32> = &(tree[x_161].leftIndex);
-          let x_182 : i32 = *(x_181);
-          if ((x_182 == -1)) {
-            *(x_181) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_189_phi = true;
-            break;
-          } else {
-            x_187 = *(x_181);
-            x_162_phi = x_187;
-            continue;
-          }
-          return;
-        } else {
-          let x_173 : ptr<function, i32> = &(tree[x_161].rightIndex);
-          let x_174 : i32 = *(x_173);
-          if ((x_174 == -1)) {
-            *(x_173) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_189_phi = true;
-            break;
-          } else {
-            x_179 = *(x_173);
-            x_162_phi = x_179;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_162 = x_162_phi;
-          x_161_phi = x_162;
-        }
-      }
-      let x_189 : bool = x_189_phi;
-      if (x_189) {
-        break;
-      }
-    }
-  }
-  var x_194_phi : i32;
-  var x_222_phi : bool;
-  switch(0u) {
-    default: {
-      x_194_phi = 0;
-      loop {
-        var x_220 : i32;
-        var x_212 : i32;
-        var x_195 : i32;
-        var x_195_phi : i32;
-        let x_194 : i32 = x_194_phi;
-        x_222_phi = false;
-        if ((x_194 <= 5)) {
-        } else {
-          break;
-        }
-        let x_201 : i32 = tree[x_194].data;
-        if ((8 <= x_201)) {
-          let x_214 : ptr<function, i32> = &(tree[x_194].leftIndex);
-          let x_215 : i32 = *(x_214);
-          if ((x_215 == -1)) {
-            *(x_214) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_222_phi = true;
-            break;
-          } else {
-            x_220 = *(x_214);
-            x_195_phi = x_220;
-            continue;
-          }
-          return;
-        } else {
-          let x_206 : ptr<function, i32> = &(tree[x_194].rightIndex);
-          let x_207 : i32 = *(x_206);
-          if ((x_207 == -1)) {
-            *(x_206) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_222_phi = true;
-            break;
-          } else {
-            x_212 = *(x_206);
-            x_195_phi = x_212;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_195 = x_195_phi;
-          x_194_phi = x_195;
-        }
-      }
-      let x_222 : bool = x_222_phi;
-      if (x_222) {
-        break;
-      }
-    }
-  }
-  var x_227_phi : i32;
-  var x_255_phi : bool;
-  switch(0u) {
-    default: {
-      x_227_phi = 0;
-      loop {
-        var x_253 : i32;
-        var x_245 : i32;
-        var x_228 : i32;
-        var x_228_phi : i32;
-        let x_227 : i32 = x_227_phi;
-        x_255_phi = false;
-        if ((x_227 <= 6)) {
-        } else {
-          break;
-        }
-        let x_234 : i32 = tree[x_227].data;
-        if ((2 <= x_234)) {
-          let x_247 : ptr<function, i32> = &(tree[x_227].leftIndex);
-          let x_248 : i32 = *(x_247);
-          if ((x_248 == -1)) {
-            *(x_247) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_255_phi = true;
-            break;
-          } else {
-            x_253 = *(x_247);
-            x_228_phi = x_253;
-            continue;
-          }
-          return;
-        } else {
-          let x_239 : ptr<function, i32> = &(tree[x_227].rightIndex);
-          let x_240 : i32 = *(x_239);
-          if ((x_240 == -1)) {
-            *(x_239) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_255_phi = true;
-            break;
-          } else {
-            x_245 = *(x_239);
-            x_228_phi = x_245;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_228 = x_228_phi;
-          x_227_phi = x_228;
-        }
-      }
-      let x_255 : bool = x_255_phi;
-      if (x_255) {
-        break;
-      }
-    }
-  }
-  var x_260_phi : i32;
-  var x_288_phi : bool;
-  switch(0u) {
-    default: {
-      x_260_phi = 0;
-      loop {
-        var x_286 : i32;
-        var x_278 : i32;
-        var x_261 : i32;
-        var x_261_phi : i32;
-        let x_260 : i32 = x_260_phi;
-        x_288_phi = false;
-        if ((x_260 <= 7)) {
-        } else {
-          break;
-        }
-        let x_267 : i32 = tree[x_260].data;
-        if ((6 <= x_267)) {
-          let x_280 : ptr<function, i32> = &(tree[x_260].leftIndex);
-          let x_281 : i32 = *(x_280);
-          if ((x_281 == -1)) {
-            *(x_280) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_288_phi = true;
-            break;
-          } else {
-            x_286 = *(x_280);
-            x_261_phi = x_286;
-            continue;
-          }
-          return;
-        } else {
-          let x_272 : ptr<function, i32> = &(tree[x_260].rightIndex);
-          let x_273 : i32 = *(x_272);
-          if ((x_273 == -1)) {
-            *(x_272) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_288_phi = true;
-            break;
-          } else {
-            x_278 = *(x_272);
-            x_261_phi = x_278;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_261 = x_261_phi;
-          x_260_phi = x_261;
-        }
-      }
-      let x_288 : bool = x_288_phi;
-      if (x_288) {
-        break;
-      }
-    }
-  }
-  var x_293_phi : i32;
-  var x_321_phi : bool;
-  switch(0u) {
-    default: {
-      x_293_phi = 0;
-      loop {
-        var x_319 : i32;
-        var x_311 : i32;
-        var x_294 : i32;
-        var x_294_phi : i32;
-        let x_293 : i32 = x_293_phi;
-        x_321_phi = false;
-        if ((x_293 <= 8)) {
-        } else {
-          break;
-        }
-        let x_300 : i32 = tree[x_293].data;
-        if ((17 <= x_300)) {
-          let x_313 : ptr<function, i32> = &(tree[x_293].leftIndex);
-          let x_314 : i32 = *(x_313);
-          if ((x_314 == -1)) {
-            *(x_313) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_321_phi = true;
-            break;
-          } else {
-            x_319 = *(x_313);
-            x_294_phi = x_319;
-            continue;
-          }
-          return;
-        } else {
-          let x_305 : ptr<function, i32> = &(tree[x_293].rightIndex);
-          let x_306 : i32 = *(x_305);
-          if ((x_306 == -1)) {
-            *(x_305) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_321_phi = true;
-            break;
-          } else {
-            x_311 = *(x_305);
-            x_294_phi = x_311;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_294 = x_294_phi;
-          x_293_phi = x_294;
-        }
-      }
-      let x_321 : bool = x_321_phi;
-      if (x_321) {
-        break;
-      }
-    }
-  }
-  var x_326_phi : i32;
-  var x_354_phi : bool;
-  switch(0u) {
-    default: {
-      x_326_phi = 0;
-      loop {
-        var x_352 : i32;
-        var x_344 : i32;
-        var x_327 : i32;
-        var x_327_phi : i32;
-        let x_326 : i32 = x_326_phi;
-        x_354_phi = false;
-        if ((x_326 <= 9)) {
-        } else {
-          break;
-        }
-        let x_333 : i32 = tree[x_326].data;
-        if ((13 <= x_333)) {
-          let x_346 : ptr<function, i32> = &(tree[x_326].leftIndex);
-          let x_347 : i32 = *(x_346);
-          if ((x_347 == -1)) {
-            *(x_346) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_354_phi = true;
-            break;
-          } else {
-            x_352 = *(x_346);
-            x_327_phi = x_352;
-            continue;
-          }
-          return;
-        } else {
-          let x_338 : ptr<function, i32> = &(tree[x_326].rightIndex);
-          let x_339 : i32 = *(x_338);
-          if ((x_339 == -1)) {
-            *(x_338) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_354_phi = true;
-            break;
-          } else {
-            x_344 = *(x_338);
-            x_327_phi = x_344;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_327 = x_327_phi;
-          x_326_phi = x_327;
-        }
-      }
-      let x_354 : bool = x_354_phi;
-      if (x_354) {
-        break;
-      }
-    }
-  }
-  x_357_phi = 0;
-  x_360_phi = 0;
-  x_362_phi = 0;
-  loop {
-    var x_392 : i32;
-    var x_402 : i32;
-    var x_407 : i32;
-    var x_363 : i32;
-    var x_358_phi : i32;
-    var x_361_phi : i32;
-    let x_357 : i32 = x_357_phi;
-    x_360 = x_360_phi;
-    let x_362 : i32 = x_362_phi;
-    let x_365 : i32 = (6 - 15);
-    if ((x_362 < 20)) {
-    } else {
-      break;
-    }
-    var x_374_phi : i32;
-    var x_392_phi : i32;
-    var x_393_phi : bool;
-    switch(0u) {
-      default: {
-        x_374_phi = 0;
-        loop {
-          let x_374 : i32 = x_374_phi;
-          x_392_phi = x_357;
-          x_393_phi = false;
-          if ((x_374 != -1)) {
-          } else {
-            break;
-          }
-          let x_381 : BST = tree[x_374];
-          let x_382 : i32 = x_381.data;
-          let x_383 : i32 = x_381.leftIndex;
-          let x_385 : i32 = x_381.rightIndex;
-          if ((x_382 == x_362)) {
-            x_392_phi = x_362;
-            x_393_phi = true;
-            break;
-          }
-          let x_389 : f32 = x_GLF_color[select(3u, 3u, (3u <= 3u))];
-
-          continuing {
-            x_374_phi = select(x_383, x_385, !((x_362 <= x_382)));
-          }
-        }
-        x_392 = x_392_phi;
-        let x_393 : bool = x_393_phi;
-        x_358_phi = x_392;
-        if (x_393) {
-          break;
-        }
-        x_358_phi = -1;
-      }
-    }
-    var x_358 : i32;
-    var x_401 : i32;
-    var x_406 : i32;
-    var x_402_phi : i32;
-    var x_407_phi : i32;
-    x_358 = x_358_phi;
-    switch(x_362) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        x_402_phi = x_360;
-        if ((x_358 == bitcast<i32>(x_362))) {
-          x_401 = bitcast<i32>((x_360 + bitcast<i32>(1)));
-          x_402_phi = x_401;
-        }
-        x_402 = x_402_phi;
-        x_361_phi = x_402;
-      }
-      default: {
-        x_407_phi = x_360;
-        if ((x_358 == bitcast<i32>(-1))) {
-          x_406 = bitcast<i32>((x_360 + bitcast<i32>(1)));
-          x_407_phi = x_406;
-        }
-        x_407 = x_407_phi;
-        x_361_phi = x_407;
-      }
-    }
-    let x_361 : i32 = x_361_phi;
-
-    continuing {
-      x_363 = (x_362 + 1);
-      x_357_phi = x_358;
-      x_360_phi = x_361;
-      x_362_phi = x_363;
-    }
-  }
-  if ((x_360 == bitcast<i32>(20))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.hlsl
deleted file mode 100644
index 038d8ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,108 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 x_77[8] = (float4[8])0;
-  float4 x_78[8] = (float4[8])0;
-  float4 x_79[8] = (float4[8])0;
-  float4 x_80[16] = (float4[16])0;
-  float4 x_89 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_89_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_92_phi = 0;
-  const float4 x_81 = gl_FragCoord;
-  const float2 x_84 = asfloat(x_6[0].xy);
-  const float2 x_87 = floor(((float2(x_81.x, x_81.y) / x_84) * 32.0f));
-  x_89_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_92_phi = 0;
-  while (true) {
-    float4 x_136 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_93 = 0;
-    bool x_121_phi = false;
-    float4 x_90_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_89 = x_89_phi;
-    const int x_92 = x_92_phi;
-    if ((x_92 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_98 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-    x_77 = tint_symbol_4;
-    x_98 = x_77[x_92];
-    switch(0u) {
-      default: {
-        const float x_101 = x_87.x;
-        const float x_102 = x_98.x;
-        if ((x_101 < x_102)) {
-          x_121_phi = false;
-          break;
-        }
-        const float x_106 = x_87.y;
-        const float x_107 = x_98.y;
-        if ((x_106 < x_107)) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_101 > (x_102 + x_98.z))) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_106 > (x_107 + x_98.w))) {
-          x_121_phi = false;
-          break;
-        }
-        x_121_phi = true;
-        break;
-      }
-    }
-    const bool x_121 = x_121_phi;
-    x_90_phi = x_89;
-    if (x_121) {
-      const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_78 = tint_symbol_5;
-      const float x_125 = x_78[x_92].x;
-      const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_79 = tint_symbol_6;
-      const float x_128 = x_79[x_92].y;
-      const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-      x_80 = tint_symbol_7;
-      x_136 = x_80[((((int(x_125) * int(x_128)) + (x_92 * 9)) + 11) % 16)];
-      x_90_phi = x_136;
-    }
-    const float4 x_90 = x_90_phi;
-    {
-      x_93 = (x_92 + 1);
-      x_89_phi = x_90;
-      x_92_phi = x_93;
-    }
-  }
-  x_GLF_color = x_89;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.msl
deleted file mode 100644
index 87a5605..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.msl
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[8];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  tint_array_wrapper x_77 = {};
-  tint_array_wrapper x_78 = {};
-  tint_array_wrapper x_79 = {};
-  tint_array_wrapper_1 x_80 = {};
-  float4 x_89 = 0.0f;
-  float4 x_89_phi = 0.0f;
-  int x_92_phi = 0;
-  float4 const x_81 = *(tint_symbol_7);
-  float2 const x_84 = x_6.resolution;
-  float2 const x_87 = floor(((float2(x_81.x, x_81.y) / x_84) * 32.0f));
-  x_89_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_92_phi = 0;
-  while (true) {
-    float4 x_136 = 0.0f;
-    int x_93 = 0;
-    bool x_121_phi = false;
-    float4 x_90_phi = 0.0f;
-    x_89 = x_89_phi;
-    int const x_92 = x_92_phi;
-    if ((x_92 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_98 = 0.0f;
-    tint_array_wrapper const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-    x_77 = tint_symbol_2;
-    x_98 = x_77.arr[x_92];
-    switch(0u) {
-      default: {
-        float const x_101 = x_87.x;
-        float const x_102 = x_98.x;
-        if ((x_101 < x_102)) {
-          x_121_phi = false;
-          break;
-        }
-        float const x_106 = x_87.y;
-        float const x_107 = x_98.y;
-        if ((x_106 < x_107)) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_101 > (x_102 + x_98.z))) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_106 > (x_107 + x_98.w))) {
-          x_121_phi = false;
-          break;
-        }
-        x_121_phi = true;
-        break;
-      }
-    }
-    bool const x_121 = x_121_phi;
-    x_90_phi = x_89;
-    if (x_121) {
-      tint_array_wrapper const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_78 = tint_symbol_3;
-      float const x_125 = x_78.arr[x_92].x;
-      tint_array_wrapper const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_79 = tint_symbol_4;
-      float const x_128 = x_79.arr[x_92].y;
-      tint_array_wrapper_1 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      x_80 = tint_symbol_5;
-      x_136 = x_80.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_125)) * as_type<uint>(int(x_128))))) + as_type<uint>(as_type<int>((as_type<uint>(x_92) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      x_90_phi = x_136;
-    }
-    float4 const x_90 = x_90_phi;
-    {
-      x_93 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(1)));
-      x_89_phi = x_90;
-      x_92_phi = x_93;
-    }
-  }
-  *(tint_symbol_8) = x_89;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.spvasm
deleted file mode 100644
index 000259e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,280 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 182
-; Schema: 0
-               OpCapability Shader
-         %45 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_77 "x_77"
-               OpName %x_78 "x_78"
-               OpName %x_79 "x_79"
-               OpName %x_80 "x_80"
-               OpName %x_89 "x_89"
-               OpName %x_89_phi "x_89_phi"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_136 "x_136"
-               OpName %x_93 "x_93"
-               OpName %x_121_phi "x_121_phi"
-               OpName %x_90_phi "x_90_phi"
-               OpName %x_98 "x_98"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %24 = OpConstantNull %_arr_v4float_uint_8
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %31 = OpConstantNull %_arr_v4float_uint_16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %38 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-         %54 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %65 = OpConstantNull %bool
-      %int_8 = OpConstant %int 8
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-         %77 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-         %78 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-         %79 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-         %81 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-         %84 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-         %86 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-         %88 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-         %90 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-         %91 = OpConstantComposite %_arr_v4float_uint_8 %77 %78 %79 %81 %84 %86 %88 %90
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-    %float_0 = OpConstant %float 0
-        %135 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %136 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %137 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %138 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %139 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %140 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %141 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %142 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %143 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %144 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %145 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %146 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %147 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %148 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %149 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %150 = OpConstantComposite %_arr_v4float_uint_16 %135 %136 %137 %138 %139 %140 %141 %142 %135 %143 %144 %145 %146 %147 %148 %149
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %169 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_77 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %24
-       %x_78 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %24
-       %x_79 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %24
-       %x_80 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %31
-       %x_89 = OpVariable %_ptr_Function_v4float Function %7
-   %x_89_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_92_phi = OpVariable %_ptr_Function_int Function %38
-      %x_136 = OpVariable %_ptr_Function_v4float Function %7
-       %x_93 = OpVariable %_ptr_Function_int Function %38
-  %x_121_phi = OpVariable %_ptr_Function_bool Function %65
-   %x_90_phi = OpVariable %_ptr_Function_v4float Function %7
-       %x_98 = OpVariable %_ptr_Function_v4float Function %7
-         %39 = OpLoad %v4float %gl_FragCoord
-         %42 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %43 = OpLoad %v2float %42
-         %46 = OpCompositeExtract %float %39 0
-         %47 = OpCompositeExtract %float %39 1
-         %48 = OpCompositeConstruct %v2float %46 %47
-         %49 = OpFDiv %v2float %48 %43
-         %51 = OpVectorTimesScalar %v2float %49 %float_32
-         %44 = OpExtInst %v2float %45 Floor %51
-               OpStore %x_89_phi %54
-               OpStore %x_92_phi %int_0
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %67 = OpLoad %v4float %x_89_phi
-               OpStore %x_89 %67
-         %68 = OpLoad %int %x_92_phi
-         %70 = OpSLessThan %bool %68 %int_8
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %57
-         %71 = OpLabel
-               OpStore %x_77 %91
-         %92 = OpAccessChain %_ptr_Function_v4float %x_77 %68
-         %93 = OpLoad %v4float %92
-               OpStore %x_98 %93
-               OpSelectionMerge %94 None
-               OpSwitch %uint_0 %95
-         %95 = OpLabel
-         %96 = OpCompositeExtract %float %44 0
-         %98 = OpAccessChain %_ptr_Function_float %x_98 %uint_0
-         %99 = OpLoad %float %98
-        %100 = OpFOrdLessThan %bool %96 %99
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_121_phi %false
-               OpBranch %94
-        %101 = OpLabel
-        %104 = OpCompositeExtract %float %44 1
-        %106 = OpAccessChain %_ptr_Function_float %x_98 %uint_1
-        %107 = OpLoad %float %106
-        %108 = OpFOrdLessThan %bool %104 %107
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %109
-        %110 = OpLabel
-               OpStore %x_121_phi %false
-               OpBranch %94
-        %109 = OpLabel
-        %112 = OpAccessChain %_ptr_Function_float %x_98 %uint_2
-        %113 = OpLoad %float %112
-        %114 = OpFAdd %float %99 %113
-        %115 = OpFOrdGreaterThan %bool %96 %114
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-               OpStore %x_121_phi %false
-               OpBranch %94
-        %116 = OpLabel
-        %119 = OpAccessChain %_ptr_Function_float %x_98 %uint_3
-        %120 = OpLoad %float %119
-        %121 = OpFAdd %float %107 %120
-        %122 = OpFOrdGreaterThan %bool %104 %121
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %123
-        %124 = OpLabel
-               OpStore %x_121_phi %false
-               OpBranch %94
-        %123 = OpLabel
-               OpStore %x_121_phi %true
-               OpBranch %94
-         %94 = OpLabel
-        %126 = OpLoad %bool %x_121_phi
-        %127 = OpLoad %v4float %x_89
-               OpStore %x_90_phi %127
-               OpSelectionMerge %128 None
-               OpBranchConditional %126 %129 %128
-        %129 = OpLabel
-               OpStore %x_78 %91
-        %130 = OpAccessChain %_ptr_Function_float %x_78 %68 %uint_0
-        %131 = OpLoad %float %130
-               OpStore %x_79 %91
-        %132 = OpAccessChain %_ptr_Function_float %x_79 %68 %uint_1
-        %133 = OpLoad %float %132
-               OpStore %x_80 %150
-        %151 = OpConvertFToS %int %131
-        %152 = OpConvertFToS %int %133
-        %153 = OpIMul %int %151 %152
-        %155 = OpIMul %int %68 %int_9
-        %156 = OpIAdd %int %153 %155
-        %158 = OpIAdd %int %156 %int_11
-        %160 = OpSMod %int %158 %int_16
-        %161 = OpAccessChain %_ptr_Function_v4float %x_80 %160
-        %162 = OpLoad %v4float %161
-               OpStore %x_136 %162
-        %163 = OpLoad %v4float %x_136
-               OpStore %x_90_phi %163
-               OpBranch %128
-        %128 = OpLabel
-        %164 = OpLoad %v4float %x_90_phi
-               OpBranch %58
-         %58 = OpLabel
-        %166 = OpIAdd %int %68 %int_1
-               OpStore %x_93 %166
-               OpStore %x_89_phi %164
-        %167 = OpLoad %int %x_93
-               OpStore %x_92_phi %167
-               OpBranch %56
-         %57 = OpLabel
-        %168 = OpLoad %v4float %x_89
-               OpStore %x_GLF_color %168
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %169
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %173 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %174 = OpFunctionCall %void %main_1
-        %175 = OpLoad %v4float %x_GLF_color
-        %176 = OpCompositeConstruct %main_out %175
-               OpReturnValue %176
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %178 = OpLabel
-        %180 = OpLoad %v4float %gl_FragCoord_param_1
-        %179 = OpFunctionCall %main_out %main_inner %180
-        %181 = OpCompositeExtract %v4float %179 0
-               OpStore %x_GLF_color_1_1 %181
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.wgsl
deleted file mode 100644
index 1742de0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_77 : array<vec4<f32>, 8>;
-  var x_78 : array<vec4<f32>, 8>;
-  var x_79 : array<vec4<f32>, 8>;
-  var x_80 : array<vec4<f32>, 16>;
-  var x_89 : vec4<f32>;
-  var x_89_phi : vec4<f32>;
-  var x_92_phi : i32;
-  let x_81 : vec4<f32> = gl_FragCoord;
-  let x_84 : vec2<f32> = x_6.resolution;
-  let x_87 : vec2<f32> = floor(((vec2<f32>(x_81.x, x_81.y) / x_84) * 32.0));
-  x_89_phi = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  x_92_phi = 0;
-  loop {
-    var x_136 : vec4<f32>;
-    var x_93 : i32;
-    var x_121_phi : bool;
-    var x_90_phi : vec4<f32>;
-    x_89 = x_89_phi;
-    let x_92 : i32 = x_92_phi;
-    if ((x_92 < 8)) {
-    } else {
-      break;
-    }
-    var x_98 : vec4<f32>;
-    x_77 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-    x_98 = x_77[x_92];
-    switch(0u) {
-      default: {
-        let x_101 : f32 = x_87.x;
-        let x_102 : f32 = x_98.x;
-        if ((x_101 < x_102)) {
-          x_121_phi = false;
-          break;
-        }
-        let x_106 : f32 = x_87.y;
-        let x_107 : f32 = x_98.y;
-        if ((x_106 < x_107)) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_101 > (x_102 + x_98.z))) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_106 > (x_107 + x_98.w))) {
-          x_121_phi = false;
-          break;
-        }
-        x_121_phi = true;
-      }
-    }
-    let x_121 : bool = x_121_phi;
-    x_90_phi = x_89;
-    if (x_121) {
-      x_78 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_125 : f32 = x_78[x_92].x;
-      x_79 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_128 : f32 = x_79[x_92].y;
-      x_80 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      x_136 = x_80[((((i32(x_125) * i32(x_128)) + (x_92 * 9)) + 11) % 16)];
-      x_90_phi = x_136;
-    }
-    let x_90 : vec4<f32> = x_90_phi;
-
-    continuing {
-      x_93 = (x_92 + 1);
-      x_89_phi = x_90;
-      x_92_phi = x_93;
-    }
-  }
-  x_GLF_color = x_89;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.hlsl
deleted file mode 100644
index 038d8ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,108 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 x_77[8] = (float4[8])0;
-  float4 x_78[8] = (float4[8])0;
-  float4 x_79[8] = (float4[8])0;
-  float4 x_80[16] = (float4[16])0;
-  float4 x_89 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_89_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_92_phi = 0;
-  const float4 x_81 = gl_FragCoord;
-  const float2 x_84 = asfloat(x_6[0].xy);
-  const float2 x_87 = floor(((float2(x_81.x, x_81.y) / x_84) * 32.0f));
-  x_89_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_92_phi = 0;
-  while (true) {
-    float4 x_136 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_93 = 0;
-    bool x_121_phi = false;
-    float4 x_90_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_89 = x_89_phi;
-    const int x_92 = x_92_phi;
-    if ((x_92 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_98 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-    x_77 = tint_symbol_4;
-    x_98 = x_77[x_92];
-    switch(0u) {
-      default: {
-        const float x_101 = x_87.x;
-        const float x_102 = x_98.x;
-        if ((x_101 < x_102)) {
-          x_121_phi = false;
-          break;
-        }
-        const float x_106 = x_87.y;
-        const float x_107 = x_98.y;
-        if ((x_106 < x_107)) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_101 > (x_102 + x_98.z))) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_106 > (x_107 + x_98.w))) {
-          x_121_phi = false;
-          break;
-        }
-        x_121_phi = true;
-        break;
-      }
-    }
-    const bool x_121 = x_121_phi;
-    x_90_phi = x_89;
-    if (x_121) {
-      const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_78 = tint_symbol_5;
-      const float x_125 = x_78[x_92].x;
-      const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_79 = tint_symbol_6;
-      const float x_128 = x_79[x_92].y;
-      const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-      x_80 = tint_symbol_7;
-      x_136 = x_80[((((int(x_125) * int(x_128)) + (x_92 * 9)) + 11) % 16)];
-      x_90_phi = x_136;
-    }
-    const float4 x_90 = x_90_phi;
-    {
-      x_93 = (x_92 + 1);
-      x_89_phi = x_90;
-      x_92_phi = x_93;
-    }
-  }
-  x_GLF_color = x_89;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.msl
deleted file mode 100644
index 87a5605..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.msl
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[8];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  tint_array_wrapper x_77 = {};
-  tint_array_wrapper x_78 = {};
-  tint_array_wrapper x_79 = {};
-  tint_array_wrapper_1 x_80 = {};
-  float4 x_89 = 0.0f;
-  float4 x_89_phi = 0.0f;
-  int x_92_phi = 0;
-  float4 const x_81 = *(tint_symbol_7);
-  float2 const x_84 = x_6.resolution;
-  float2 const x_87 = floor(((float2(x_81.x, x_81.y) / x_84) * 32.0f));
-  x_89_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_92_phi = 0;
-  while (true) {
-    float4 x_136 = 0.0f;
-    int x_93 = 0;
-    bool x_121_phi = false;
-    float4 x_90_phi = 0.0f;
-    x_89 = x_89_phi;
-    int const x_92 = x_92_phi;
-    if ((x_92 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_98 = 0.0f;
-    tint_array_wrapper const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-    x_77 = tint_symbol_2;
-    x_98 = x_77.arr[x_92];
-    switch(0u) {
-      default: {
-        float const x_101 = x_87.x;
-        float const x_102 = x_98.x;
-        if ((x_101 < x_102)) {
-          x_121_phi = false;
-          break;
-        }
-        float const x_106 = x_87.y;
-        float const x_107 = x_98.y;
-        if ((x_106 < x_107)) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_101 > (x_102 + x_98.z))) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_106 > (x_107 + x_98.w))) {
-          x_121_phi = false;
-          break;
-        }
-        x_121_phi = true;
-        break;
-      }
-    }
-    bool const x_121 = x_121_phi;
-    x_90_phi = x_89;
-    if (x_121) {
-      tint_array_wrapper const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_78 = tint_symbol_3;
-      float const x_125 = x_78.arr[x_92].x;
-      tint_array_wrapper const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_79 = tint_symbol_4;
-      float const x_128 = x_79.arr[x_92].y;
-      tint_array_wrapper_1 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      x_80 = tint_symbol_5;
-      x_136 = x_80.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_125)) * as_type<uint>(int(x_128))))) + as_type<uint>(as_type<int>((as_type<uint>(x_92) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      x_90_phi = x_136;
-    }
-    float4 const x_90 = x_90_phi;
-    {
-      x_93 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(1)));
-      x_89_phi = x_90;
-      x_92_phi = x_93;
-    }
-  }
-  *(tint_symbol_8) = x_89;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.spvasm
deleted file mode 100644
index 000259e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,280 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 182
-; Schema: 0
-               OpCapability Shader
-         %45 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_77 "x_77"
-               OpName %x_78 "x_78"
-               OpName %x_79 "x_79"
-               OpName %x_80 "x_80"
-               OpName %x_89 "x_89"
-               OpName %x_89_phi "x_89_phi"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_136 "x_136"
-               OpName %x_93 "x_93"
-               OpName %x_121_phi "x_121_phi"
-               OpName %x_90_phi "x_90_phi"
-               OpName %x_98 "x_98"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %24 = OpConstantNull %_arr_v4float_uint_8
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %31 = OpConstantNull %_arr_v4float_uint_16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %38 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-         %54 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %65 = OpConstantNull %bool
-      %int_8 = OpConstant %int 8
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-         %77 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-         %78 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-         %79 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-         %81 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-         %84 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-         %86 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-         %88 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-         %90 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-         %91 = OpConstantComposite %_arr_v4float_uint_8 %77 %78 %79 %81 %84 %86 %88 %90
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-    %float_0 = OpConstant %float 0
-        %135 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %136 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %137 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %138 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %139 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %140 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %141 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %142 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %143 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %144 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %145 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %146 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %147 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %148 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %149 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %150 = OpConstantComposite %_arr_v4float_uint_16 %135 %136 %137 %138 %139 %140 %141 %142 %135 %143 %144 %145 %146 %147 %148 %149
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %169 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_77 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %24
-       %x_78 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %24
-       %x_79 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %24
-       %x_80 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %31
-       %x_89 = OpVariable %_ptr_Function_v4float Function %7
-   %x_89_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_92_phi = OpVariable %_ptr_Function_int Function %38
-      %x_136 = OpVariable %_ptr_Function_v4float Function %7
-       %x_93 = OpVariable %_ptr_Function_int Function %38
-  %x_121_phi = OpVariable %_ptr_Function_bool Function %65
-   %x_90_phi = OpVariable %_ptr_Function_v4float Function %7
-       %x_98 = OpVariable %_ptr_Function_v4float Function %7
-         %39 = OpLoad %v4float %gl_FragCoord
-         %42 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %43 = OpLoad %v2float %42
-         %46 = OpCompositeExtract %float %39 0
-         %47 = OpCompositeExtract %float %39 1
-         %48 = OpCompositeConstruct %v2float %46 %47
-         %49 = OpFDiv %v2float %48 %43
-         %51 = OpVectorTimesScalar %v2float %49 %float_32
-         %44 = OpExtInst %v2float %45 Floor %51
-               OpStore %x_89_phi %54
-               OpStore %x_92_phi %int_0
-               OpBranch %56
-         %56 = OpLabel
-               OpLoopMerge %57 %58 None
-               OpBranch %59
-         %59 = OpLabel
-         %67 = OpLoad %v4float %x_89_phi
-               OpStore %x_89 %67
-         %68 = OpLoad %int %x_92_phi
-         %70 = OpSLessThan %bool %68 %int_8
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %57
-         %71 = OpLabel
-               OpStore %x_77 %91
-         %92 = OpAccessChain %_ptr_Function_v4float %x_77 %68
-         %93 = OpLoad %v4float %92
-               OpStore %x_98 %93
-               OpSelectionMerge %94 None
-               OpSwitch %uint_0 %95
-         %95 = OpLabel
-         %96 = OpCompositeExtract %float %44 0
-         %98 = OpAccessChain %_ptr_Function_float %x_98 %uint_0
-         %99 = OpLoad %float %98
-        %100 = OpFOrdLessThan %bool %96 %99
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_121_phi %false
-               OpBranch %94
-        %101 = OpLabel
-        %104 = OpCompositeExtract %float %44 1
-        %106 = OpAccessChain %_ptr_Function_float %x_98 %uint_1
-        %107 = OpLoad %float %106
-        %108 = OpFOrdLessThan %bool %104 %107
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %109
-        %110 = OpLabel
-               OpStore %x_121_phi %false
-               OpBranch %94
-        %109 = OpLabel
-        %112 = OpAccessChain %_ptr_Function_float %x_98 %uint_2
-        %113 = OpLoad %float %112
-        %114 = OpFAdd %float %99 %113
-        %115 = OpFOrdGreaterThan %bool %96 %114
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %116
-        %117 = OpLabel
-               OpStore %x_121_phi %false
-               OpBranch %94
-        %116 = OpLabel
-        %119 = OpAccessChain %_ptr_Function_float %x_98 %uint_3
-        %120 = OpLoad %float %119
-        %121 = OpFAdd %float %107 %120
-        %122 = OpFOrdGreaterThan %bool %104 %121
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %123
-        %124 = OpLabel
-               OpStore %x_121_phi %false
-               OpBranch %94
-        %123 = OpLabel
-               OpStore %x_121_phi %true
-               OpBranch %94
-         %94 = OpLabel
-        %126 = OpLoad %bool %x_121_phi
-        %127 = OpLoad %v4float %x_89
-               OpStore %x_90_phi %127
-               OpSelectionMerge %128 None
-               OpBranchConditional %126 %129 %128
-        %129 = OpLabel
-               OpStore %x_78 %91
-        %130 = OpAccessChain %_ptr_Function_float %x_78 %68 %uint_0
-        %131 = OpLoad %float %130
-               OpStore %x_79 %91
-        %132 = OpAccessChain %_ptr_Function_float %x_79 %68 %uint_1
-        %133 = OpLoad %float %132
-               OpStore %x_80 %150
-        %151 = OpConvertFToS %int %131
-        %152 = OpConvertFToS %int %133
-        %153 = OpIMul %int %151 %152
-        %155 = OpIMul %int %68 %int_9
-        %156 = OpIAdd %int %153 %155
-        %158 = OpIAdd %int %156 %int_11
-        %160 = OpSMod %int %158 %int_16
-        %161 = OpAccessChain %_ptr_Function_v4float %x_80 %160
-        %162 = OpLoad %v4float %161
-               OpStore %x_136 %162
-        %163 = OpLoad %v4float %x_136
-               OpStore %x_90_phi %163
-               OpBranch %128
-        %128 = OpLabel
-        %164 = OpLoad %v4float %x_90_phi
-               OpBranch %58
-         %58 = OpLabel
-        %166 = OpIAdd %int %68 %int_1
-               OpStore %x_93 %166
-               OpStore %x_89_phi %164
-        %167 = OpLoad %int %x_93
-               OpStore %x_92_phi %167
-               OpBranch %56
-         %57 = OpLabel
-        %168 = OpLoad %v4float %x_89
-               OpStore %x_GLF_color %168
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %169
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %173 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %174 = OpFunctionCall %void %main_1
-        %175 = OpLoad %v4float %x_GLF_color
-        %176 = OpCompositeConstruct %main_out %175
-               OpReturnValue %176
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %178 = OpLabel
-        %180 = OpLoad %v4float %gl_FragCoord_param_1
-        %179 = OpFunctionCall %main_out %main_inner %180
-        %181 = OpCompositeExtract %v4float %179 0
-               OpStore %x_GLF_color_1_1 %181
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.wgsl
deleted file mode 100644
index 1742de0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,97 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_77 : array<vec4<f32>, 8>;
-  var x_78 : array<vec4<f32>, 8>;
-  var x_79 : array<vec4<f32>, 8>;
-  var x_80 : array<vec4<f32>, 16>;
-  var x_89 : vec4<f32>;
-  var x_89_phi : vec4<f32>;
-  var x_92_phi : i32;
-  let x_81 : vec4<f32> = gl_FragCoord;
-  let x_84 : vec2<f32> = x_6.resolution;
-  let x_87 : vec2<f32> = floor(((vec2<f32>(x_81.x, x_81.y) / x_84) * 32.0));
-  x_89_phi = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  x_92_phi = 0;
-  loop {
-    var x_136 : vec4<f32>;
-    var x_93 : i32;
-    var x_121_phi : bool;
-    var x_90_phi : vec4<f32>;
-    x_89 = x_89_phi;
-    let x_92 : i32 = x_92_phi;
-    if ((x_92 < 8)) {
-    } else {
-      break;
-    }
-    var x_98 : vec4<f32>;
-    x_77 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-    x_98 = x_77[x_92];
-    switch(0u) {
-      default: {
-        let x_101 : f32 = x_87.x;
-        let x_102 : f32 = x_98.x;
-        if ((x_101 < x_102)) {
-          x_121_phi = false;
-          break;
-        }
-        let x_106 : f32 = x_87.y;
-        let x_107 : f32 = x_98.y;
-        if ((x_106 < x_107)) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_101 > (x_102 + x_98.z))) {
-          x_121_phi = false;
-          break;
-        }
-        if ((x_106 > (x_107 + x_98.w))) {
-          x_121_phi = false;
-          break;
-        }
-        x_121_phi = true;
-      }
-    }
-    let x_121 : bool = x_121_phi;
-    x_90_phi = x_89;
-    if (x_121) {
-      x_78 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_125 : f32 = x_78[x_92].x;
-      x_79 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_128 : f32 = x_79[x_92].y;
-      x_80 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      x_136 = x_80[((((i32(x_125) * i32(x_128)) + (x_92 * 9)) + 11) % 16)];
-      x_90_phi = x_136;
-    }
-    let x_90 : vec4<f32> = x_90_phi;
-
-    continuing {
-      x_93 = (x_92 + 1);
-      x_89_phi = x_90;
-      x_92_phi = x_93;
-    }
-  }
-  x_GLF_color = x_89;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.hlsl
deleted file mode 100644
index 60a3f69..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_69 = 0;
-  int x_69_phi = 0;
-  int x_72_phi = 0;
-  const float4 x_55 = gl_FragCoord;
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_59 = (float2(x_55.x, x_55.y) / x_58);
-  const int x_67 = (int((x_59.x * 10.0f)) + (int((x_59.y * 10.0f)) * 10));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  while (true) {
-    int x_70 = 0;
-    int x_73 = 0;
-    x_69 = x_69_phi;
-    const int x_72 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-    {
-      x_70 = (((4 * asint(x_69)) * (1000 - asint(x_69))) / 1000);
-      x_73 = (x_72 + 1);
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_80[16] = indexable;
-  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  indexable = tint_symbol_5;
-  indexable = x_80;
-  const float2 x_81 = float2(float4(0.0f, 1.0f, 0.0f, 1.0f).y, float4(0.5f, 0.0f, 0.5f, 1.0f).x);
-  const float4 x_83 = indexable[asint((x_69 % 16))];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.msl
deleted file mode 100644
index aaee00b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  tint_array_wrapper indexable = {};
-  int x_69 = 0;
-  int x_69_phi = 0;
-  int x_72_phi = 0;
-  float4 const x_55 = *(tint_symbol_5);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_59 = (float2(x_55.x, x_55.y) / x_58);
-  int const x_67 = as_type<int>((as_type<uint>(int((x_59.x * 10.0f))) + as_type<uint>(as_type<int>((as_type<uint>(int((x_59.y * 10.0f))) * as_type<uint>(10))))));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  while (true) {
-    int x_70 = 0;
-    int x_73 = 0;
-    x_69 = x_69_phi;
-    int const x_72 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-    {
-      x_70 = (as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(as_type<int>(x_69))))) * as_type<uint>(as_type<int>((as_type<uint>(1000) - as_type<uint>(as_type<int>(x_69))))))) / 1000);
-      x_73 = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  tint_array_wrapper const x_80 = indexable;
-  tint_array_wrapper const tint_symbol_3 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  indexable = tint_symbol_3;
-  indexable = x_80;
-  float2 const x_81 = float2(float4(0.0f, 1.0f, 0.0f, 1.0f).y, float4(0.5f, 0.0f, 0.5f, 1.0f).x);
-  float4 const x_83 = indexable.arr[as_type<int>((x_69 % 16))];
-  *(tint_symbol_6) = x_83;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.spvasm
deleted file mode 100644
index 8630dfb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,188 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 124
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_69 "x_69"
-               OpName %x_69_phi "x_69_phi"
-               OpName %x_72_phi "x_72_phi"
-               OpName %x_70 "x_70"
-               OpName %x_73 "x_73"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_10 = OpConstant %float 10
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-   %int_1000 = OpConstant %int 1000
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %81 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %83 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %84 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %85 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %87 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %88 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %89 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %90 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %92 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %94 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-         %95 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-         %96 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %97 = OpConstantComposite %_arr_v4float_uint_16 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
-         %99 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %100 = OpConstantComposite %_arr_v4float_uint_16 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %111 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_69 = OpVariable %_ptr_Function_int Function %28
-   %x_69_phi = OpVariable %_ptr_Function_int Function %28
-   %x_72_phi = OpVariable %_ptr_Function_int Function %28
-       %x_70 = OpVariable %_ptr_Function_int Function %28
-       %x_73 = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %34 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %35 = OpLoad %v2float %34
-         %36 = OpCompositeExtract %float %31 0
-         %37 = OpCompositeExtract %float %31 1
-         %38 = OpCompositeConstruct %v2float %36 %37
-         %39 = OpFDiv %v2float %38 %35
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpFMul %float %41 %float_10
-         %40 = OpConvertFToS %int %43
-         %45 = OpCompositeExtract %float %39 1
-         %46 = OpFMul %float %45 %float_10
-         %44 = OpConvertFToS %int %46
-         %48 = OpIMul %int %44 %int_10
-         %49 = OpIAdd %int %40 %48
-               OpStore %x_69_phi %int_100
-               OpStore %x_72_phi %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %58 = OpLoad %int %x_69_phi
-               OpStore %x_69 %58
-         %59 = OpLoad %int %x_72_phi
-         %60 = OpSLessThan %bool %59 %49
-               OpSelectionMerge %62 None
-               OpBranchConditional %60 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %53
-         %62 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %67 = OpLoad %int %x_69
-         %66 = OpCopyObject %int %67
-         %68 = OpIMul %int %int_4 %66
-         %71 = OpLoad %int %x_69
-         %70 = OpCopyObject %int %71
-         %72 = OpISub %int %int_1000 %70
-         %73 = OpIMul %int %68 %72
-         %74 = OpSDiv %int %73 %int_1000
-               OpStore %x_70 %74
-         %76 = OpIAdd %int %59 %int_1
-               OpStore %x_73 %76
-         %77 = OpLoad %int %x_70
-               OpStore %x_69_phi %77
-         %78 = OpLoad %int %x_73
-               OpStore %x_72_phi %78
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %97
-         %98 = OpLoad %_arr_v4float_uint_16 %indexable
-               OpStore %indexable %100
-               OpStore %indexable %98
-        %101 = OpCompositeExtract %float %91 1
-        %102 = OpCompositeExtract %float %87 0
-        %103 = OpCompositeConstruct %v2float %101 %102
-        %105 = OpLoad %int %x_69
-        %107 = OpSMod %int %105 %int_16
-        %104 = OpCopyObject %int %107
-        %109 = OpAccessChain %_ptr_Function_v4float %indexable %104
-        %110 = OpLoad %v4float %109
-               OpStore %x_GLF_color %110
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %111
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %115 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %116 = OpFunctionCall %void %main_1
-        %117 = OpLoad %v4float %x_GLF_color
-        %118 = OpCompositeConstruct %main_out %117
-               OpReturnValue %118
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %120 = OpLabel
-        %122 = OpLoad %v4float %gl_FragCoord_param_1
-        %121 = OpFunctionCall %main_out %main_inner %122
-        %123 = OpCompositeExtract %v4float %121 0
-               OpStore %x_GLF_color_1_1 %123
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.wgsl
deleted file mode 100644
index e7aeb6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_69 : i32;
-  var x_69_phi : i32;
-  var x_72_phi : i32;
-  let x_55 : vec4<f32> = gl_FragCoord;
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_59 : vec2<f32> = (vec2<f32>(x_55.x, x_55.y) / x_58);
-  let x_67 : i32 = (i32((x_59.x * 10.0)) + (i32((x_59.y * 10.0)) * 10));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  loop {
-    var x_70 : i32;
-    var x_73 : i32;
-    x_69 = x_69_phi;
-    let x_72 : i32 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_70 = (((4 * bitcast<i32>(x_69)) * (1000 - bitcast<i32>(x_69))) / 1000);
-      x_73 = (x_72 + 1);
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_80 : array<vec4<f32>, 16> = indexable;
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  indexable = x_80;
-  let x_81 : vec2<f32> = vec2<f32>(vec4<f32>(0.0, 1.0, 0.0, 1.0).y, vec4<f32>(0.5, 0.0, 0.5, 1.0).x);
-  let x_83 : vec4<f32> = indexable[bitcast<i32>((x_69 % 16))];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.hlsl
deleted file mode 100644
index 60a3f69..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,68 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_69 = 0;
-  int x_69_phi = 0;
-  int x_72_phi = 0;
-  const float4 x_55 = gl_FragCoord;
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_59 = (float2(x_55.x, x_55.y) / x_58);
-  const int x_67 = (int((x_59.x * 10.0f)) + (int((x_59.y * 10.0f)) * 10));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  while (true) {
-    int x_70 = 0;
-    int x_73 = 0;
-    x_69 = x_69_phi;
-    const int x_72 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-    {
-      x_70 = (((4 * asint(x_69)) * (1000 - asint(x_69))) / 1000);
-      x_73 = (x_72 + 1);
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_80[16] = indexable;
-  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  indexable = tint_symbol_5;
-  indexable = x_80;
-  const float2 x_81 = float2(float4(0.0f, 1.0f, 0.0f, 1.0f).y, float4(0.5f, 0.0f, 0.5f, 1.0f).x);
-  const float4 x_83 = indexable[asint((x_69 % 16))];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.msl
deleted file mode 100644
index aaee00b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.msl
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  tint_array_wrapper indexable = {};
-  int x_69 = 0;
-  int x_69_phi = 0;
-  int x_72_phi = 0;
-  float4 const x_55 = *(tint_symbol_5);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_59 = (float2(x_55.x, x_55.y) / x_58);
-  int const x_67 = as_type<int>((as_type<uint>(int((x_59.x * 10.0f))) + as_type<uint>(as_type<int>((as_type<uint>(int((x_59.y * 10.0f))) * as_type<uint>(10))))));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  while (true) {
-    int x_70 = 0;
-    int x_73 = 0;
-    x_69 = x_69_phi;
-    int const x_72 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-    {
-      x_70 = (as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(as_type<int>(x_69))))) * as_type<uint>(as_type<int>((as_type<uint>(1000) - as_type<uint>(as_type<int>(x_69))))))) / 1000);
-      x_73 = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  tint_array_wrapper const x_80 = indexable;
-  tint_array_wrapper const tint_symbol_3 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  indexable = tint_symbol_3;
-  indexable = x_80;
-  float2 const x_81 = float2(float4(0.0f, 1.0f, 0.0f, 1.0f).y, float4(0.5f, 0.0f, 0.5f, 1.0f).x);
-  float4 const x_83 = indexable.arr[as_type<int>((x_69 % 16))];
-  *(tint_symbol_6) = x_83;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.spvasm
deleted file mode 100644
index 8630dfb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,188 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 124
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_69 "x_69"
-               OpName %x_69_phi "x_69_phi"
-               OpName %x_72_phi "x_72_phi"
-               OpName %x_70 "x_70"
-               OpName %x_73 "x_73"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_10 = OpConstant %float 10
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-   %int_1000 = OpConstant %int 1000
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %81 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %83 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %84 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %85 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %87 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %88 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %89 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %90 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %92 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %94 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-         %95 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-         %96 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %97 = OpConstantComposite %_arr_v4float_uint_16 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
-         %99 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %100 = OpConstantComposite %_arr_v4float_uint_16 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99 %99
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %111 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_69 = OpVariable %_ptr_Function_int Function %28
-   %x_69_phi = OpVariable %_ptr_Function_int Function %28
-   %x_72_phi = OpVariable %_ptr_Function_int Function %28
-       %x_70 = OpVariable %_ptr_Function_int Function %28
-       %x_73 = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %34 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %35 = OpLoad %v2float %34
-         %36 = OpCompositeExtract %float %31 0
-         %37 = OpCompositeExtract %float %31 1
-         %38 = OpCompositeConstruct %v2float %36 %37
-         %39 = OpFDiv %v2float %38 %35
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpFMul %float %41 %float_10
-         %40 = OpConvertFToS %int %43
-         %45 = OpCompositeExtract %float %39 1
-         %46 = OpFMul %float %45 %float_10
-         %44 = OpConvertFToS %int %46
-         %48 = OpIMul %int %44 %int_10
-         %49 = OpIAdd %int %40 %48
-               OpStore %x_69_phi %int_100
-               OpStore %x_72_phi %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %58 = OpLoad %int %x_69_phi
-               OpStore %x_69 %58
-         %59 = OpLoad %int %x_72_phi
-         %60 = OpSLessThan %bool %59 %49
-               OpSelectionMerge %62 None
-               OpBranchConditional %60 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %53
-         %62 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %67 = OpLoad %int %x_69
-         %66 = OpCopyObject %int %67
-         %68 = OpIMul %int %int_4 %66
-         %71 = OpLoad %int %x_69
-         %70 = OpCopyObject %int %71
-         %72 = OpISub %int %int_1000 %70
-         %73 = OpIMul %int %68 %72
-         %74 = OpSDiv %int %73 %int_1000
-               OpStore %x_70 %74
-         %76 = OpIAdd %int %59 %int_1
-               OpStore %x_73 %76
-         %77 = OpLoad %int %x_70
-               OpStore %x_69_phi %77
-         %78 = OpLoad %int %x_73
-               OpStore %x_72_phi %78
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %97
-         %98 = OpLoad %_arr_v4float_uint_16 %indexable
-               OpStore %indexable %100
-               OpStore %indexable %98
-        %101 = OpCompositeExtract %float %91 1
-        %102 = OpCompositeExtract %float %87 0
-        %103 = OpCompositeConstruct %v2float %101 %102
-        %105 = OpLoad %int %x_69
-        %107 = OpSMod %int %105 %int_16
-        %104 = OpCopyObject %int %107
-        %109 = OpAccessChain %_ptr_Function_v4float %indexable %104
-        %110 = OpLoad %v4float %109
-               OpStore %x_GLF_color %110
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %111
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %115 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %116 = OpFunctionCall %void %main_1
-        %117 = OpLoad %v4float %x_GLF_color
-        %118 = OpCompositeConstruct %main_out %117
-               OpReturnValue %118
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %120 = OpLabel
-        %122 = OpLoad %v4float %gl_FragCoord_param_1
-        %121 = OpFunctionCall %main_out %main_inner %122
-        %123 = OpCompositeExtract %v4float %121 0
-               OpStore %x_GLF_color_1_1 %123
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.wgsl
deleted file mode 100644
index e7aeb6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_69 : i32;
-  var x_69_phi : i32;
-  var x_72_phi : i32;
-  let x_55 : vec4<f32> = gl_FragCoord;
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_59 : vec2<f32> = (vec2<f32>(x_55.x, x_55.y) / x_58);
-  let x_67 : i32 = (i32((x_59.x * 10.0)) + (i32((x_59.y * 10.0)) * 10));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  loop {
-    var x_70 : i32;
-    var x_73 : i32;
-    x_69 = x_69_phi;
-    let x_72 : i32 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_70 = (((4 * bitcast<i32>(x_69)) * (1000 - bitcast<i32>(x_69))) / 1000);
-      x_73 = (x_72 + 1);
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_80 : array<vec4<f32>, 16> = indexable;
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  indexable = x_80;
-  let x_81 : vec2<f32> = vec2<f32>(vec4<f32>(0.0, 1.0, 0.0, 1.0).y, vec4<f32>(0.5, 0.0, 0.5, 1.0).x);
-  let x_83 : vec4<f32> = indexable[bitcast<i32>((x_69 % 16))];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.hlsl
deleted file mode 100644
index 7838ecc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_69 = 0;
-  int x_69_phi = 0;
-  int x_72_phi = 0;
-  const float4 x_55 = gl_FragCoord;
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_59 = (float2(x_55.x, x_55.y) / x_58);
-  const int x_67 = (int((x_59.x * 10.0f)) + (int((x_59.y * 10.0f)) * 10));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  while (true) {
-    int x_70 = 0;
-    int x_73 = 0;
-    x_69 = x_69_phi;
-    const int x_72 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-    {
-      x_70 = (((4 * asint(x_69)) * (1000 - asint(x_69))) / 1000);
-      x_73 = (x_72 + 1);
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float2 x_80 = float2(float4(0.0f, 1.0f, 0.0f, 1.0f).y, float4(0.5f, 0.0f, 0.5f, 1.0f).x);
-  const float4 x_82 = indexable[asint((x_69 % 16))];
-  x_GLF_color = x_82;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.msl
deleted file mode 100644
index b9b9c97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int x_69 = 0;
-  int x_69_phi = 0;
-  int x_72_phi = 0;
-  float4 const x_55 = *(tint_symbol_4);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_59 = (float2(x_55.x, x_55.y) / x_58);
-  int const x_67 = as_type<int>((as_type<uint>(int((x_59.x * 10.0f))) + as_type<uint>(as_type<int>((as_type<uint>(int((x_59.y * 10.0f))) * as_type<uint>(10))))));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  while (true) {
-    int x_70 = 0;
-    int x_73 = 0;
-    x_69 = x_69_phi;
-    int const x_72 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-    {
-      x_70 = (as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(as_type<int>(x_69))))) * as_type<uint>(as_type<int>((as_type<uint>(1000) - as_type<uint>(as_type<int>(x_69))))))) / 1000);
-      x_73 = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float2 const x_80 = float2(float4(0.0f, 1.0f, 0.0f, 1.0f).y, float4(0.5f, 0.0f, 0.5f, 1.0f).x);
-  float4 const x_82 = indexable.arr[as_type<int>((x_69 % 16))];
-  *(tint_symbol_5) = x_82;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.spvasm
deleted file mode 100644
index d917257..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,183 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_69 "x_69"
-               OpName %x_69_phi "x_69_phi"
-               OpName %x_72_phi "x_72_phi"
-               OpName %x_70 "x_70"
-               OpName %x_73 "x_73"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_10 = OpConstant %float 10
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-   %int_1000 = OpConstant %int 1000
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %81 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %83 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %84 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %85 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %87 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %88 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %89 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %90 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %92 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %94 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-         %95 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-         %96 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %97 = OpConstantComposite %_arr_v4float_uint_16 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %108 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_69 = OpVariable %_ptr_Function_int Function %28
-   %x_69_phi = OpVariable %_ptr_Function_int Function %28
-   %x_72_phi = OpVariable %_ptr_Function_int Function %28
-       %x_70 = OpVariable %_ptr_Function_int Function %28
-       %x_73 = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %34 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %35 = OpLoad %v2float %34
-         %36 = OpCompositeExtract %float %31 0
-         %37 = OpCompositeExtract %float %31 1
-         %38 = OpCompositeConstruct %v2float %36 %37
-         %39 = OpFDiv %v2float %38 %35
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpFMul %float %41 %float_10
-         %40 = OpConvertFToS %int %43
-         %45 = OpCompositeExtract %float %39 1
-         %46 = OpFMul %float %45 %float_10
-         %44 = OpConvertFToS %int %46
-         %48 = OpIMul %int %44 %int_10
-         %49 = OpIAdd %int %40 %48
-               OpStore %x_69_phi %int_100
-               OpStore %x_72_phi %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %58 = OpLoad %int %x_69_phi
-               OpStore %x_69 %58
-         %59 = OpLoad %int %x_72_phi
-         %60 = OpSLessThan %bool %59 %49
-               OpSelectionMerge %62 None
-               OpBranchConditional %60 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %53
-         %62 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %67 = OpLoad %int %x_69
-         %66 = OpCopyObject %int %67
-         %68 = OpIMul %int %int_4 %66
-         %71 = OpLoad %int %x_69
-         %70 = OpCopyObject %int %71
-         %72 = OpISub %int %int_1000 %70
-         %73 = OpIMul %int %68 %72
-         %74 = OpSDiv %int %73 %int_1000
-               OpStore %x_70 %74
-         %76 = OpIAdd %int %59 %int_1
-               OpStore %x_73 %76
-         %77 = OpLoad %int %x_70
-               OpStore %x_69_phi %77
-         %78 = OpLoad %int %x_73
-               OpStore %x_72_phi %78
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %97
-         %98 = OpCompositeExtract %float %91 1
-         %99 = OpCompositeExtract %float %87 0
-        %100 = OpCompositeConstruct %v2float %98 %99
-        %102 = OpLoad %int %x_69
-        %104 = OpSMod %int %102 %int_16
-        %101 = OpCopyObject %int %104
-        %106 = OpAccessChain %_ptr_Function_v4float %indexable %101
-        %107 = OpLoad %v4float %106
-               OpStore %x_GLF_color %107
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %108
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %112 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %117 = OpLabel
-        %119 = OpLoad %v4float %gl_FragCoord_param_1
-        %118 = OpFunctionCall %main_out %main_inner %119
-        %120 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.wgsl
deleted file mode 100644
index 088e3cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_69 : i32;
-  var x_69_phi : i32;
-  var x_72_phi : i32;
-  let x_55 : vec4<f32> = gl_FragCoord;
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_59 : vec2<f32> = (vec2<f32>(x_55.x, x_55.y) / x_58);
-  let x_67 : i32 = (i32((x_59.x * 10.0)) + (i32((x_59.y * 10.0)) * 10));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  loop {
-    var x_70 : i32;
-    var x_73 : i32;
-    x_69 = x_69_phi;
-    let x_72 : i32 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_70 = (((4 * bitcast<i32>(x_69)) * (1000 - bitcast<i32>(x_69))) / 1000);
-      x_73 = (x_72 + 1);
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_80 : vec2<f32> = vec2<f32>(vec4<f32>(0.0, 1.0, 0.0, 1.0).y, vec4<f32>(0.5, 0.0, 0.5, 1.0).x);
-  let x_82 : vec4<f32> = indexable[bitcast<i32>((x_69 % 16))];
-  x_GLF_color = x_82;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.hlsl
deleted file mode 100644
index 7838ecc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_69 = 0;
-  int x_69_phi = 0;
-  int x_72_phi = 0;
-  const float4 x_55 = gl_FragCoord;
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_59 = (float2(x_55.x, x_55.y) / x_58);
-  const int x_67 = (int((x_59.x * 10.0f)) + (int((x_59.y * 10.0f)) * 10));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  while (true) {
-    int x_70 = 0;
-    int x_73 = 0;
-    x_69 = x_69_phi;
-    const int x_72 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-    {
-      x_70 = (((4 * asint(x_69)) * (1000 - asint(x_69))) / 1000);
-      x_73 = (x_72 + 1);
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float2 x_80 = float2(float4(0.0f, 1.0f, 0.0f, 1.0f).y, float4(0.5f, 0.0f, 0.5f, 1.0f).x);
-  const float4 x_82 = indexable[asint((x_69 % 16))];
-  x_GLF_color = x_82;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.msl
deleted file mode 100644
index b9b9c97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.msl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int x_69 = 0;
-  int x_69_phi = 0;
-  int x_72_phi = 0;
-  float4 const x_55 = *(tint_symbol_4);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_59 = (float2(x_55.x, x_55.y) / x_58);
-  int const x_67 = as_type<int>((as_type<uint>(int((x_59.x * 10.0f))) + as_type<uint>(as_type<int>((as_type<uint>(int((x_59.y * 10.0f))) * as_type<uint>(10))))));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  while (true) {
-    int x_70 = 0;
-    int x_73 = 0;
-    x_69 = x_69_phi;
-    int const x_72 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-    {
-      x_70 = (as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(4) * as_type<uint>(as_type<int>(x_69))))) * as_type<uint>(as_type<int>((as_type<uint>(1000) - as_type<uint>(as_type<int>(x_69))))))) / 1000);
-      x_73 = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float2 const x_80 = float2(float4(0.0f, 1.0f, 0.0f, 1.0f).y, float4(0.5f, 0.0f, 0.5f, 1.0f).x);
-  float4 const x_82 = indexable.arr[as_type<int>((x_69 % 16))];
-  *(tint_symbol_5) = x_82;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.spvasm
deleted file mode 100644
index d917257..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.spvasm
+++ /dev/null
@@ -1,183 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 121
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_69 "x_69"
-               OpName %x_69_phi "x_69_phi"
-               OpName %x_72_phi "x_72_phi"
-               OpName %x_70 "x_70"
-               OpName %x_73 "x_73"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_10 = OpConstant %float 10
-     %int_10 = OpConstant %int 10
-    %int_100 = OpConstant %int 100
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %int_4 = OpConstant %int 4
-   %int_1000 = OpConstant %int 1000
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %81 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %83 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %84 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %85 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %87 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %88 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %89 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %90 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %92 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %94 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-         %95 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-         %96 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-         %97 = OpConstantComposite %_arr_v4float_uint_16 %81 %83 %84 %85 %86 %87 %88 %89 %81 %90 %91 %92 %93 %94 %95 %96
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %108 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_69 = OpVariable %_ptr_Function_int Function %28
-   %x_69_phi = OpVariable %_ptr_Function_int Function %28
-   %x_72_phi = OpVariable %_ptr_Function_int Function %28
-       %x_70 = OpVariable %_ptr_Function_int Function %28
-       %x_73 = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %34 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %35 = OpLoad %v2float %34
-         %36 = OpCompositeExtract %float %31 0
-         %37 = OpCompositeExtract %float %31 1
-         %38 = OpCompositeConstruct %v2float %36 %37
-         %39 = OpFDiv %v2float %38 %35
-         %41 = OpCompositeExtract %float %39 0
-         %43 = OpFMul %float %41 %float_10
-         %40 = OpConvertFToS %int %43
-         %45 = OpCompositeExtract %float %39 1
-         %46 = OpFMul %float %45 %float_10
-         %44 = OpConvertFToS %int %46
-         %48 = OpIMul %int %44 %int_10
-         %49 = OpIAdd %int %40 %48
-               OpStore %x_69_phi %int_100
-               OpStore %x_72_phi %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %58 = OpLoad %int %x_69_phi
-               OpStore %x_69 %58
-         %59 = OpLoad %int %x_72_phi
-         %60 = OpSLessThan %bool %59 %49
-               OpSelectionMerge %62 None
-               OpBranchConditional %60 %63 %64
-         %63 = OpLabel
-               OpBranch %62
-         %64 = OpLabel
-               OpBranch %53
-         %62 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-         %67 = OpLoad %int %x_69
-         %66 = OpCopyObject %int %67
-         %68 = OpIMul %int %int_4 %66
-         %71 = OpLoad %int %x_69
-         %70 = OpCopyObject %int %71
-         %72 = OpISub %int %int_1000 %70
-         %73 = OpIMul %int %68 %72
-         %74 = OpSDiv %int %73 %int_1000
-               OpStore %x_70 %74
-         %76 = OpIAdd %int %59 %int_1
-               OpStore %x_73 %76
-         %77 = OpLoad %int %x_70
-               OpStore %x_69_phi %77
-         %78 = OpLoad %int %x_73
-               OpStore %x_72_phi %78
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %97
-         %98 = OpCompositeExtract %float %91 1
-         %99 = OpCompositeExtract %float %87 0
-        %100 = OpCompositeConstruct %v2float %98 %99
-        %102 = OpLoad %int %x_69
-        %104 = OpSMod %int %102 %int_16
-        %101 = OpCopyObject %int %104
-        %106 = OpAccessChain %_ptr_Function_v4float %indexable %101
-        %107 = OpLoad %v4float %106
-               OpStore %x_GLF_color %107
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %108
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %112 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %113 = OpFunctionCall %void %main_1
-        %114 = OpLoad %v4float %x_GLF_color
-        %115 = OpCompositeConstruct %main_out %114
-               OpReturnValue %115
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %117 = OpLabel
-        %119 = OpLoad %v4float %gl_FragCoord_param_1
-        %118 = OpFunctionCall %main_out %main_inner %119
-        %120 = OpCompositeExtract %v4float %118 0
-               OpStore %x_GLF_color_1_1 %120
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.wgsl
deleted file mode 100644
index 088e3cd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.wgsl
+++ /dev/null
@@ -1,57 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_69 : i32;
-  var x_69_phi : i32;
-  var x_72_phi : i32;
-  let x_55 : vec4<f32> = gl_FragCoord;
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_59 : vec2<f32> = (vec2<f32>(x_55.x, x_55.y) / x_58);
-  let x_67 : i32 = (i32((x_59.x * 10.0)) + (i32((x_59.y * 10.0)) * 10));
-  x_69_phi = 100;
-  x_72_phi = 0;
-  loop {
-    var x_70 : i32;
-    var x_73 : i32;
-    x_69 = x_69_phi;
-    let x_72 : i32 = x_72_phi;
-    if ((x_72 < x_67)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_70 = (((4 * bitcast<i32>(x_69)) * (1000 - bitcast<i32>(x_69))) / 1000);
-      x_73 = (x_72 + 1);
-      x_69_phi = x_70;
-      x_72_phi = x_73;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_80 : vec2<f32> = vec2<f32>(vec4<f32>(0.0, 1.0, 0.0, 1.0).y, vec4<f32>(0.5, 0.0, 0.5, 1.0).x);
-  let x_82 : vec4<f32> = indexable[bitcast<i32>((x_69 % 16))];
-  x_GLF_color = x_82;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.hlsl
deleted file mode 100644
index f84cad3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-bool checkSwap_f1_f1_(inout float a, inout float b) {
-  bool x_144 = false;
-  const float x_146 = gl_FragCoord.y;
-  const float x_148 = asfloat(x_9[0].y);
-  if ((x_146 < (x_148 / 2.0f))) {
-    const float x_154 = a;
-    const float x_155 = b;
-    x_144 = (x_154 > x_155);
-  } else {
-    const float x_157 = a;
-    const float x_158 = b;
-    x_144 = (x_157 < x_158);
-  }
-  return x_144;
-}
-
-void main_1() {
-  int i = 0;
-  float data[10] = (float[10])0;
-  int i_1 = 0;
-  int j = 0;
-  bool doSwap = false;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float temp = 0.0f;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      const int x_59 = i;
-      const int x_60 = i;
-      const float x_64 = asfloat(x_13[0].y);
-      data[x_59] = (float((10 - x_60)) * x_64);
-    }
-  }
-  i_1 = 0;
-  {
-    for(; (i_1 < 9); i_1 = (i_1 + 1)) {
-      j = 0;
-      {
-        for(; (j < 10); j = (j + 1)) {
-          if ((j < (i_1 + 1))) {
-            continue;
-          }
-          const int x_90 = j;
-          const float x_92 = data[i_1];
-          param = x_92;
-          const float x_94 = data[x_90];
-          param_1 = x_94;
-          const bool x_95 = checkSwap_f1_f1_(param, param_1);
-          doSwap = x_95;
-          if (doSwap) {
-            const float x_101 = data[i_1];
-            temp = x_101;
-            const int x_102 = i_1;
-            const float x_105 = data[j];
-            data[x_102] = x_105;
-            data[j] = temp;
-          }
-        }
-      }
-    }
-  }
-  const float x_115 = gl_FragCoord.x;
-  const float x_117 = asfloat(x_9[0].x);
-  if ((x_115 < (x_117 / 2.0f))) {
-    const float x_124 = data[0];
-    const float x_127 = data[5];
-    const float x_130 = data[9];
-    x_GLF_color = float4((x_124 / 10.0f), (x_127 / 10.0f), (x_130 / 10.0f), 1.0f);
-  } else {
-    const float x_134 = data[5];
-    const float x_137 = data[9];
-    const float x_140 = data[0];
-    x_GLF_color = float4((x_134 / 10.0f), (x_137 / 10.0f), (x_140 / 10.0f), 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.msl
deleted file mode 100644
index 7209faf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.msl
+++ /dev/null
@@ -1,147 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool checkSwap_f1_f1_(constant buf1& x_9, thread float* const a, thread float* const b, thread float4* const tint_symbol_3) {
-  bool x_144 = false;
-  float const x_146 = (*(tint_symbol_3)).y;
-  float const x_148 = x_9.resolution.y;
-  if ((x_146 < (x_148 / 2.0f))) {
-    float const x_154 = *(a);
-    float const x_155 = *(b);
-    x_144 = (x_154 > x_155);
-  } else {
-    float const x_157 = *(a);
-    float const x_158 = *(b);
-    x_144 = (x_157 < x_158);
-  }
-  bool const x_160 = x_144;
-  return x_160;
-}
-
-void main_1(constant buf0& x_13, constant buf1& x_9, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int i = 0;
-  tint_array_wrapper data = {};
-  int i_1 = 0;
-  int j = 0;
-  bool doSwap = false;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float temp = 0.0f;
-  i = 0;
-  while (true) {
-    int const x_56 = i;
-    if ((x_56 < 10)) {
-    } else {
-      break;
-    }
-    int const x_59 = i;
-    int const x_60 = i;
-    float const x_64 = x_13.injectionSwitch.y;
-    data.arr[x_59] = (float(as_type<int>((as_type<uint>(10) - as_type<uint>(x_60)))) * x_64);
-    {
-      int const x_67 = i;
-      i = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-    }
-  }
-  i_1 = 0;
-  while (true) {
-    int const x_73 = i_1;
-    if ((x_73 < 9)) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      int const x_80 = j;
-      if ((x_80 < 10)) {
-      } else {
-        break;
-      }
-      int const x_83 = j;
-      int const x_84 = i_1;
-      if ((x_83 < as_type<int>((as_type<uint>(x_84) + as_type<uint>(1))))) {
-        {
-          int const x_110 = j;
-          j = as_type<int>((as_type<uint>(x_110) + as_type<uint>(1)));
-        }
-        continue;
-      }
-      int const x_89 = i_1;
-      int const x_90 = j;
-      float const x_92 = data.arr[x_89];
-      param = x_92;
-      float const x_94 = data.arr[x_90];
-      param_1 = x_94;
-      bool const x_95 = checkSwap_f1_f1_(x_9, &(param), &(param_1), tint_symbol_4);
-      doSwap = x_95;
-      bool const x_96 = doSwap;
-      if (x_96) {
-        int const x_99 = i_1;
-        float const x_101 = data.arr[x_99];
-        temp = x_101;
-        int const x_102 = i_1;
-        int const x_103 = j;
-        float const x_105 = data.arr[x_103];
-        data.arr[x_102] = x_105;
-        int const x_107 = j;
-        float const x_108 = temp;
-        data.arr[x_107] = x_108;
-      }
-      {
-        int const x_110 = j;
-        j = as_type<int>((as_type<uint>(x_110) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_112 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-    }
-  }
-  float const x_115 = (*(tint_symbol_4)).x;
-  float const x_117 = x_9.resolution.x;
-  if ((x_115 < (x_117 / 2.0f))) {
-    float const x_124 = data.arr[0];
-    float const x_127 = data.arr[5];
-    float const x_130 = data.arr[9];
-    *(tint_symbol_5) = float4((x_124 / 10.0f), (x_127 / 10.0f), (x_130 / 10.0f), 1.0f);
-  } else {
-    float const x_134 = data.arr[5];
-    float const x_137 = data.arr[9];
-    float const x_140 = data.arr[0];
-    *(tint_symbol_5) = float4((x_134 / 10.0f), (x_137 / 10.0f), (x_140 / 10.0f), 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_13, x_9, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, x_9, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.spvasm
deleted file mode 100644
index c4002c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,305 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 193
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_9 "x_9"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %checkSwap_f1_f1_ "checkSwap_f1_f1_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_144 "x_144"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %i_1 "i_1"
-               OpName %j "j"
-               OpName %doSwap "doSwap"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %temp "temp"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %bool %_ptr_Function_float %_ptr_Function_float
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-       %void = OpTypeVoid
-         %54 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %61 = OpConstantNull %int
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %66 = OpConstantNull %_arr_float_uint_10
-         %71 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-      %int_5 = OpConstant %int 5
-   %float_10 = OpConstant %float 10
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %180 = OpTypeFunction %main_out %v4float
-%checkSwap_f1_f1_ = OpFunction %bool None %18
-          %a = OpFunctionParameter %_ptr_Function_float
-          %b = OpFunctionParameter %_ptr_Function_float
-         %24 = OpLabel
-      %x_144 = OpVariable %_ptr_Function_bool Function %27
-         %31 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %32 = OpLoad %float %31
-         %35 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %36 = OpLoad %float %35
-         %38 = OpFDiv %float %36 %float_2
-         %39 = OpFOrdLessThan %bool %32 %38
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %42
-         %41 = OpLabel
-         %44 = OpLoad %float %a
-         %46 = OpLoad %float %b
-         %47 = OpFOrdGreaterThan %bool %44 %46
-               OpStore %x_144 %47
-               OpBranch %40
-         %42 = OpLabel
-         %49 = OpLoad %float %a
-         %51 = OpLoad %float %b
-         %52 = OpFOrdLessThan %bool %49 %51
-               OpStore %x_144 %52
-               OpBranch %40
-         %40 = OpLabel
-         %53 = OpLoad %bool %x_144
-               OpReturnValue %53
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %54
-         %57 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %61
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %66
-        %i_1 = OpVariable %_ptr_Function_int Function %61
-          %j = OpVariable %_ptr_Function_int Function %61
-     %doSwap = OpVariable %_ptr_Function_bool Function %27
-      %param = OpVariable %_ptr_Function_float Function %71
-    %param_1 = OpVariable %_ptr_Function_float Function %71
-       %temp = OpVariable %_ptr_Function_float Function %71
-               OpStore %i %int_0
-               OpBranch %75
-         %75 = OpLabel
-               OpLoopMerge %76 %77 None
-               OpBranch %78
-         %78 = OpLabel
-         %79 = OpLoad %int %i
-         %81 = OpSLessThan %bool %79 %int_10
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-               OpBranch %76
-         %82 = OpLabel
-         %85 = OpLoad %int %i
-         %86 = OpLoad %int %i
-         %87 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_1
-         %88 = OpLoad %float %87
-         %89 = OpAccessChain %_ptr_Function_float %data %85
-         %91 = OpISub %int %int_10 %86
-         %90 = OpConvertSToF %float %91
-         %92 = OpFMul %float %90 %88
-               OpStore %89 %92
-               OpBranch %77
-         %77 = OpLabel
-         %93 = OpLoad %int %i
-         %95 = OpIAdd %int %93 %int_1
-               OpStore %i %95
-               OpBranch %75
-         %76 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %96
-         %96 = OpLabel
-               OpLoopMerge %97 %98 None
-               OpBranch %99
-         %99 = OpLabel
-        %100 = OpLoad %int %i_1
-        %102 = OpSLessThan %bool %100 %int_9
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-               OpBranch %103
-        %105 = OpLabel
-               OpBranch %97
-        %103 = OpLabel
-               OpStore %j %int_0
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %j
-        %111 = OpSLessThan %bool %110 %int_10
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %114
-        %113 = OpLabel
-               OpBranch %112
-        %114 = OpLabel
-               OpBranch %107
-        %112 = OpLabel
-        %115 = OpLoad %int %j
-        %116 = OpLoad %int %i_1
-        %117 = OpIAdd %int %116 %int_1
-        %118 = OpSLessThan %bool %115 %117
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpBranch %108
-        %119 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpLoad %int %j
-        %123 = OpAccessChain %_ptr_Function_float %data %121
-        %124 = OpLoad %float %123
-               OpStore %param %124
-        %125 = OpAccessChain %_ptr_Function_float %data %122
-        %126 = OpLoad %float %125
-               OpStore %param_1 %126
-        %127 = OpFunctionCall %bool %checkSwap_f1_f1_ %param %param_1
-               OpStore %doSwap %127
-        %130 = OpLoad %bool %doSwap
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %131
-        %132 = OpLabel
-        %133 = OpLoad %int %i_1
-        %134 = OpAccessChain %_ptr_Function_float %data %133
-        %135 = OpLoad %float %134
-               OpStore %temp %135
-        %136 = OpLoad %int %i_1
-        %137 = OpLoad %int %j
-        %138 = OpAccessChain %_ptr_Function_float %data %137
-        %139 = OpLoad %float %138
-        %140 = OpAccessChain %_ptr_Function_float %data %136
-               OpStore %140 %139
-        %141 = OpLoad %int %j
-        %142 = OpLoad %float %temp
-        %143 = OpAccessChain %_ptr_Function_float %data %141
-               OpStore %143 %142
-               OpBranch %131
-        %131 = OpLabel
-               OpBranch %108
-        %108 = OpLabel
-        %144 = OpLoad %int %j
-        %145 = OpIAdd %int %144 %int_1
-               OpStore %j %145
-               OpBranch %106
-        %107 = OpLabel
-               OpBranch %98
-         %98 = OpLabel
-        %146 = OpLoad %int %i_1
-        %147 = OpIAdd %int %146 %int_1
-               OpStore %i_1 %147
-               OpBranch %96
-         %97 = OpLabel
-        %148 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %149 = OpLoad %float %148
-        %150 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-        %151 = OpLoad %float %150
-        %152 = OpFDiv %float %151 %float_2
-        %153 = OpFOrdLessThan %bool %149 %152
-               OpSelectionMerge %154 None
-               OpBranchConditional %153 %155 %156
-        %155 = OpLabel
-        %157 = OpAccessChain %_ptr_Function_float %data %int_0
-        %158 = OpLoad %float %157
-        %160 = OpAccessChain %_ptr_Function_float %data %int_5
-        %161 = OpLoad %float %160
-        %162 = OpAccessChain %_ptr_Function_float %data %int_9
-        %163 = OpLoad %float %162
-        %165 = OpFDiv %float %158 %float_10
-        %166 = OpFDiv %float %161 %float_10
-        %167 = OpFDiv %float %163 %float_10
-        %169 = OpCompositeConstruct %v4float %165 %166 %167 %float_1
-               OpStore %x_GLF_color %169
-               OpBranch %154
-        %156 = OpLabel
-        %170 = OpAccessChain %_ptr_Function_float %data %int_5
-        %171 = OpLoad %float %170
-        %172 = OpAccessChain %_ptr_Function_float %data %int_9
-        %173 = OpLoad %float %172
-        %174 = OpAccessChain %_ptr_Function_float %data %int_0
-        %175 = OpLoad %float %174
-        %176 = OpFDiv %float %171 %float_10
-        %177 = OpFDiv %float %173 %float_10
-        %178 = OpFDiv %float %175 %float_10
-        %179 = OpCompositeConstruct %v4float %176 %177 %178 %float_1
-               OpStore %x_GLF_color %179
-               OpBranch %154
-        %154 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %180
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %184 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %185 = OpFunctionCall %void %main_1
-        %186 = OpLoad %v4float %x_GLF_color
-        %187 = OpCompositeConstruct %main_out %186
-               OpReturnValue %187
-               OpFunctionEnd
-       %main = OpFunction %void None %54
-        %189 = OpLabel
-        %191 = OpLoad %v4float %gl_FragCoord_param_1
-        %190 = OpFunctionCall %main_out %main_inner %191
-        %192 = OpCompositeExtract %v4float %190 0
-               OpStore %x_GLF_color_1_1 %192
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.wgsl
deleted file mode 100644
index 9074163..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,140 +0,0 @@
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn checkSwap_f1_f1_(a : ptr<function, f32>, b : ptr<function, f32>) -> bool {
-  var x_144 : bool;
-  let x_146 : f32 = gl_FragCoord.y;
-  let x_148 : f32 = x_9.resolution.y;
-  if ((x_146 < (x_148 / 2.0))) {
-    let x_154 : f32 = *(a);
-    let x_155 : f32 = *(b);
-    x_144 = (x_154 > x_155);
-  } else {
-    let x_157 : f32 = *(a);
-    let x_158 : f32 = *(b);
-    x_144 = (x_157 < x_158);
-  }
-  let x_160 : bool = x_144;
-  return x_160;
-}
-
-fn main_1() {
-  var i : i32;
-  var data : array<f32, 10>;
-  var i_1 : i32;
-  var j : i32;
-  var doSwap : bool;
-  var param : f32;
-  var param_1 : f32;
-  var temp : f32;
-  i = 0;
-  loop {
-    let x_56 : i32 = i;
-    if ((x_56 < 10)) {
-    } else {
-      break;
-    }
-    let x_59 : i32 = i;
-    let x_60 : i32 = i;
-    let x_64 : f32 = x_13.injectionSwitch.y;
-    data[x_59] = (f32((10 - x_60)) * x_64);
-
-    continuing {
-      let x_67 : i32 = i;
-      i = (x_67 + 1);
-    }
-  }
-  i_1 = 0;
-  loop {
-    let x_73 : i32 = i_1;
-    if ((x_73 < 9)) {
-    } else {
-      break;
-    }
-    j = 0;
-    loop {
-      let x_80 : i32 = j;
-      if ((x_80 < 10)) {
-      } else {
-        break;
-      }
-      let x_83 : i32 = j;
-      let x_84 : i32 = i_1;
-      if ((x_83 < (x_84 + 1))) {
-        continue;
-      }
-      let x_89 : i32 = i_1;
-      let x_90 : i32 = j;
-      let x_92 : f32 = data[x_89];
-      param = x_92;
-      let x_94 : f32 = data[x_90];
-      param_1 = x_94;
-      let x_95 : bool = checkSwap_f1_f1_(&(param), &(param_1));
-      doSwap = x_95;
-      let x_96 : bool = doSwap;
-      if (x_96) {
-        let x_99 : i32 = i_1;
-        let x_101 : f32 = data[x_99];
-        temp = x_101;
-        let x_102 : i32 = i_1;
-        let x_103 : i32 = j;
-        let x_105 : f32 = data[x_103];
-        data[x_102] = x_105;
-        let x_107 : i32 = j;
-        let x_108 : f32 = temp;
-        data[x_107] = x_108;
-      }
-
-      continuing {
-        let x_110 : i32 = j;
-        j = (x_110 + 1);
-      }
-    }
-
-    continuing {
-      let x_112 : i32 = i_1;
-      i_1 = (x_112 + 1);
-    }
-  }
-  let x_115 : f32 = gl_FragCoord.x;
-  let x_117 : f32 = x_9.resolution.x;
-  if ((x_115 < (x_117 / 2.0))) {
-    let x_124 : f32 = data[0];
-    let x_127 : f32 = data[5];
-    let x_130 : f32 = data[9];
-    x_GLF_color = vec4<f32>((x_124 / 10.0), (x_127 / 10.0), (x_130 / 10.0), 1.0);
-  } else {
-    let x_134 : f32 = data[5];
-    let x_137 : f32 = data[9];
-    let x_140 : f32 = data[0];
-    x_GLF_color = vec4<f32>((x_134 / 10.0), (x_137 / 10.0), (x_140 / 10.0), 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.hlsl
deleted file mode 100644
index f84cad3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-bool checkSwap_f1_f1_(inout float a, inout float b) {
-  bool x_144 = false;
-  const float x_146 = gl_FragCoord.y;
-  const float x_148 = asfloat(x_9[0].y);
-  if ((x_146 < (x_148 / 2.0f))) {
-    const float x_154 = a;
-    const float x_155 = b;
-    x_144 = (x_154 > x_155);
-  } else {
-    const float x_157 = a;
-    const float x_158 = b;
-    x_144 = (x_157 < x_158);
-  }
-  return x_144;
-}
-
-void main_1() {
-  int i = 0;
-  float data[10] = (float[10])0;
-  int i_1 = 0;
-  int j = 0;
-  bool doSwap = false;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float temp = 0.0f;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      const int x_59 = i;
-      const int x_60 = i;
-      const float x_64 = asfloat(x_13[0].y);
-      data[x_59] = (float((10 - x_60)) * x_64);
-    }
-  }
-  i_1 = 0;
-  {
-    for(; (i_1 < 9); i_1 = (i_1 + 1)) {
-      j = 0;
-      {
-        for(; (j < 10); j = (j + 1)) {
-          if ((j < (i_1 + 1))) {
-            continue;
-          }
-          const int x_90 = j;
-          const float x_92 = data[i_1];
-          param = x_92;
-          const float x_94 = data[x_90];
-          param_1 = x_94;
-          const bool x_95 = checkSwap_f1_f1_(param, param_1);
-          doSwap = x_95;
-          if (doSwap) {
-            const float x_101 = data[i_1];
-            temp = x_101;
-            const int x_102 = i_1;
-            const float x_105 = data[j];
-            data[x_102] = x_105;
-            data[j] = temp;
-          }
-        }
-      }
-    }
-  }
-  const float x_115 = gl_FragCoord.x;
-  const float x_117 = asfloat(x_9[0].x);
-  if ((x_115 < (x_117 / 2.0f))) {
-    const float x_124 = data[0];
-    const float x_127 = data[5];
-    const float x_130 = data[9];
-    x_GLF_color = float4((x_124 / 10.0f), (x_127 / 10.0f), (x_130 / 10.0f), 1.0f);
-  } else {
-    const float x_134 = data[5];
-    const float x_137 = data[9];
-    const float x_140 = data[0];
-    x_GLF_color = float4((x_134 / 10.0f), (x_137 / 10.0f), (x_140 / 10.0f), 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.msl
deleted file mode 100644
index 7209faf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.msl
+++ /dev/null
@@ -1,147 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool checkSwap_f1_f1_(constant buf1& x_9, thread float* const a, thread float* const b, thread float4* const tint_symbol_3) {
-  bool x_144 = false;
-  float const x_146 = (*(tint_symbol_3)).y;
-  float const x_148 = x_9.resolution.y;
-  if ((x_146 < (x_148 / 2.0f))) {
-    float const x_154 = *(a);
-    float const x_155 = *(b);
-    x_144 = (x_154 > x_155);
-  } else {
-    float const x_157 = *(a);
-    float const x_158 = *(b);
-    x_144 = (x_157 < x_158);
-  }
-  bool const x_160 = x_144;
-  return x_160;
-}
-
-void main_1(constant buf0& x_13, constant buf1& x_9, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int i = 0;
-  tint_array_wrapper data = {};
-  int i_1 = 0;
-  int j = 0;
-  bool doSwap = false;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float temp = 0.0f;
-  i = 0;
-  while (true) {
-    int const x_56 = i;
-    if ((x_56 < 10)) {
-    } else {
-      break;
-    }
-    int const x_59 = i;
-    int const x_60 = i;
-    float const x_64 = x_13.injectionSwitch.y;
-    data.arr[x_59] = (float(as_type<int>((as_type<uint>(10) - as_type<uint>(x_60)))) * x_64);
-    {
-      int const x_67 = i;
-      i = as_type<int>((as_type<uint>(x_67) + as_type<uint>(1)));
-    }
-  }
-  i_1 = 0;
-  while (true) {
-    int const x_73 = i_1;
-    if ((x_73 < 9)) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      int const x_80 = j;
-      if ((x_80 < 10)) {
-      } else {
-        break;
-      }
-      int const x_83 = j;
-      int const x_84 = i_1;
-      if ((x_83 < as_type<int>((as_type<uint>(x_84) + as_type<uint>(1))))) {
-        {
-          int const x_110 = j;
-          j = as_type<int>((as_type<uint>(x_110) + as_type<uint>(1)));
-        }
-        continue;
-      }
-      int const x_89 = i_1;
-      int const x_90 = j;
-      float const x_92 = data.arr[x_89];
-      param = x_92;
-      float const x_94 = data.arr[x_90];
-      param_1 = x_94;
-      bool const x_95 = checkSwap_f1_f1_(x_9, &(param), &(param_1), tint_symbol_4);
-      doSwap = x_95;
-      bool const x_96 = doSwap;
-      if (x_96) {
-        int const x_99 = i_1;
-        float const x_101 = data.arr[x_99];
-        temp = x_101;
-        int const x_102 = i_1;
-        int const x_103 = j;
-        float const x_105 = data.arr[x_103];
-        data.arr[x_102] = x_105;
-        int const x_107 = j;
-        float const x_108 = temp;
-        data.arr[x_107] = x_108;
-      }
-      {
-        int const x_110 = j;
-        j = as_type<int>((as_type<uint>(x_110) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_112 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-    }
-  }
-  float const x_115 = (*(tint_symbol_4)).x;
-  float const x_117 = x_9.resolution.x;
-  if ((x_115 < (x_117 / 2.0f))) {
-    float const x_124 = data.arr[0];
-    float const x_127 = data.arr[5];
-    float const x_130 = data.arr[9];
-    *(tint_symbol_5) = float4((x_124 / 10.0f), (x_127 / 10.0f), (x_130 / 10.0f), 1.0f);
-  } else {
-    float const x_134 = data.arr[5];
-    float const x_137 = data.arr[9];
-    float const x_140 = data.arr[0];
-    *(tint_symbol_5) = float4((x_134 / 10.0f), (x_137 / 10.0f), (x_140 / 10.0f), 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_13, x_9, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, x_9, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.spvasm
deleted file mode 100644
index c4002c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,305 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 193
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_9 "x_9"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %checkSwap_f1_f1_ "checkSwap_f1_f1_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_144 "x_144"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %i_1 "i_1"
-               OpName %j "j"
-               OpName %doSwap "doSwap"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %temp "temp"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %bool %_ptr_Function_float %_ptr_Function_float
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-       %void = OpTypeVoid
-         %54 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %61 = OpConstantNull %int
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-         %66 = OpConstantNull %_arr_float_uint_10
-         %71 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-      %int_5 = OpConstant %int 5
-   %float_10 = OpConstant %float 10
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %180 = OpTypeFunction %main_out %v4float
-%checkSwap_f1_f1_ = OpFunction %bool None %18
-          %a = OpFunctionParameter %_ptr_Function_float
-          %b = OpFunctionParameter %_ptr_Function_float
-         %24 = OpLabel
-      %x_144 = OpVariable %_ptr_Function_bool Function %27
-         %31 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %32 = OpLoad %float %31
-         %35 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %36 = OpLoad %float %35
-         %38 = OpFDiv %float %36 %float_2
-         %39 = OpFOrdLessThan %bool %32 %38
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %42
-         %41 = OpLabel
-         %44 = OpLoad %float %a
-         %46 = OpLoad %float %b
-         %47 = OpFOrdGreaterThan %bool %44 %46
-               OpStore %x_144 %47
-               OpBranch %40
-         %42 = OpLabel
-         %49 = OpLoad %float %a
-         %51 = OpLoad %float %b
-         %52 = OpFOrdLessThan %bool %49 %51
-               OpStore %x_144 %52
-               OpBranch %40
-         %40 = OpLabel
-         %53 = OpLoad %bool %x_144
-               OpReturnValue %53
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %54
-         %57 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %61
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %66
-        %i_1 = OpVariable %_ptr_Function_int Function %61
-          %j = OpVariable %_ptr_Function_int Function %61
-     %doSwap = OpVariable %_ptr_Function_bool Function %27
-      %param = OpVariable %_ptr_Function_float Function %71
-    %param_1 = OpVariable %_ptr_Function_float Function %71
-       %temp = OpVariable %_ptr_Function_float Function %71
-               OpStore %i %int_0
-               OpBranch %75
-         %75 = OpLabel
-               OpLoopMerge %76 %77 None
-               OpBranch %78
-         %78 = OpLabel
-         %79 = OpLoad %int %i
-         %81 = OpSLessThan %bool %79 %int_10
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-               OpBranch %76
-         %82 = OpLabel
-         %85 = OpLoad %int %i
-         %86 = OpLoad %int %i
-         %87 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_1
-         %88 = OpLoad %float %87
-         %89 = OpAccessChain %_ptr_Function_float %data %85
-         %91 = OpISub %int %int_10 %86
-         %90 = OpConvertSToF %float %91
-         %92 = OpFMul %float %90 %88
-               OpStore %89 %92
-               OpBranch %77
-         %77 = OpLabel
-         %93 = OpLoad %int %i
-         %95 = OpIAdd %int %93 %int_1
-               OpStore %i %95
-               OpBranch %75
-         %76 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %96
-         %96 = OpLabel
-               OpLoopMerge %97 %98 None
-               OpBranch %99
-         %99 = OpLabel
-        %100 = OpLoad %int %i_1
-        %102 = OpSLessThan %bool %100 %int_9
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %105
-        %104 = OpLabel
-               OpBranch %103
-        %105 = OpLabel
-               OpBranch %97
-        %103 = OpLabel
-               OpStore %j %int_0
-               OpBranch %106
-        %106 = OpLabel
-               OpLoopMerge %107 %108 None
-               OpBranch %109
-        %109 = OpLabel
-        %110 = OpLoad %int %j
-        %111 = OpSLessThan %bool %110 %int_10
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %114
-        %113 = OpLabel
-               OpBranch %112
-        %114 = OpLabel
-               OpBranch %107
-        %112 = OpLabel
-        %115 = OpLoad %int %j
-        %116 = OpLoad %int %i_1
-        %117 = OpIAdd %int %116 %int_1
-        %118 = OpSLessThan %bool %115 %117
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpBranch %108
-        %119 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpLoad %int %j
-        %123 = OpAccessChain %_ptr_Function_float %data %121
-        %124 = OpLoad %float %123
-               OpStore %param %124
-        %125 = OpAccessChain %_ptr_Function_float %data %122
-        %126 = OpLoad %float %125
-               OpStore %param_1 %126
-        %127 = OpFunctionCall %bool %checkSwap_f1_f1_ %param %param_1
-               OpStore %doSwap %127
-        %130 = OpLoad %bool %doSwap
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %131
-        %132 = OpLabel
-        %133 = OpLoad %int %i_1
-        %134 = OpAccessChain %_ptr_Function_float %data %133
-        %135 = OpLoad %float %134
-               OpStore %temp %135
-        %136 = OpLoad %int %i_1
-        %137 = OpLoad %int %j
-        %138 = OpAccessChain %_ptr_Function_float %data %137
-        %139 = OpLoad %float %138
-        %140 = OpAccessChain %_ptr_Function_float %data %136
-               OpStore %140 %139
-        %141 = OpLoad %int %j
-        %142 = OpLoad %float %temp
-        %143 = OpAccessChain %_ptr_Function_float %data %141
-               OpStore %143 %142
-               OpBranch %131
-        %131 = OpLabel
-               OpBranch %108
-        %108 = OpLabel
-        %144 = OpLoad %int %j
-        %145 = OpIAdd %int %144 %int_1
-               OpStore %j %145
-               OpBranch %106
-        %107 = OpLabel
-               OpBranch %98
-         %98 = OpLabel
-        %146 = OpLoad %int %i_1
-        %147 = OpIAdd %int %146 %int_1
-               OpStore %i_1 %147
-               OpBranch %96
-         %97 = OpLabel
-        %148 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %149 = OpLoad %float %148
-        %150 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-        %151 = OpLoad %float %150
-        %152 = OpFDiv %float %151 %float_2
-        %153 = OpFOrdLessThan %bool %149 %152
-               OpSelectionMerge %154 None
-               OpBranchConditional %153 %155 %156
-        %155 = OpLabel
-        %157 = OpAccessChain %_ptr_Function_float %data %int_0
-        %158 = OpLoad %float %157
-        %160 = OpAccessChain %_ptr_Function_float %data %int_5
-        %161 = OpLoad %float %160
-        %162 = OpAccessChain %_ptr_Function_float %data %int_9
-        %163 = OpLoad %float %162
-        %165 = OpFDiv %float %158 %float_10
-        %166 = OpFDiv %float %161 %float_10
-        %167 = OpFDiv %float %163 %float_10
-        %169 = OpCompositeConstruct %v4float %165 %166 %167 %float_1
-               OpStore %x_GLF_color %169
-               OpBranch %154
-        %156 = OpLabel
-        %170 = OpAccessChain %_ptr_Function_float %data %int_5
-        %171 = OpLoad %float %170
-        %172 = OpAccessChain %_ptr_Function_float %data %int_9
-        %173 = OpLoad %float %172
-        %174 = OpAccessChain %_ptr_Function_float %data %int_0
-        %175 = OpLoad %float %174
-        %176 = OpFDiv %float %171 %float_10
-        %177 = OpFDiv %float %173 %float_10
-        %178 = OpFDiv %float %175 %float_10
-        %179 = OpCompositeConstruct %v4float %176 %177 %178 %float_1
-               OpStore %x_GLF_color %179
-               OpBranch %154
-        %154 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %180
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %184 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %185 = OpFunctionCall %void %main_1
-        %186 = OpLoad %v4float %x_GLF_color
-        %187 = OpCompositeConstruct %main_out %186
-               OpReturnValue %187
-               OpFunctionEnd
-       %main = OpFunction %void None %54
-        %189 = OpLabel
-        %191 = OpLoad %v4float %gl_FragCoord_param_1
-        %190 = OpFunctionCall %main_out %main_inner %191
-        %192 = OpCompositeExtract %v4float %190 0
-               OpStore %x_GLF_color_1_1 %192
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.wgsl
deleted file mode 100644
index 9074163..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,140 +0,0 @@
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn checkSwap_f1_f1_(a : ptr<function, f32>, b : ptr<function, f32>) -> bool {
-  var x_144 : bool;
-  let x_146 : f32 = gl_FragCoord.y;
-  let x_148 : f32 = x_9.resolution.y;
-  if ((x_146 < (x_148 / 2.0))) {
-    let x_154 : f32 = *(a);
-    let x_155 : f32 = *(b);
-    x_144 = (x_154 > x_155);
-  } else {
-    let x_157 : f32 = *(a);
-    let x_158 : f32 = *(b);
-    x_144 = (x_157 < x_158);
-  }
-  let x_160 : bool = x_144;
-  return x_160;
-}
-
-fn main_1() {
-  var i : i32;
-  var data : array<f32, 10>;
-  var i_1 : i32;
-  var j : i32;
-  var doSwap : bool;
-  var param : f32;
-  var param_1 : f32;
-  var temp : f32;
-  i = 0;
-  loop {
-    let x_56 : i32 = i;
-    if ((x_56 < 10)) {
-    } else {
-      break;
-    }
-    let x_59 : i32 = i;
-    let x_60 : i32 = i;
-    let x_64 : f32 = x_13.injectionSwitch.y;
-    data[x_59] = (f32((10 - x_60)) * x_64);
-
-    continuing {
-      let x_67 : i32 = i;
-      i = (x_67 + 1);
-    }
-  }
-  i_1 = 0;
-  loop {
-    let x_73 : i32 = i_1;
-    if ((x_73 < 9)) {
-    } else {
-      break;
-    }
-    j = 0;
-    loop {
-      let x_80 : i32 = j;
-      if ((x_80 < 10)) {
-      } else {
-        break;
-      }
-      let x_83 : i32 = j;
-      let x_84 : i32 = i_1;
-      if ((x_83 < (x_84 + 1))) {
-        continue;
-      }
-      let x_89 : i32 = i_1;
-      let x_90 : i32 = j;
-      let x_92 : f32 = data[x_89];
-      param = x_92;
-      let x_94 : f32 = data[x_90];
-      param_1 = x_94;
-      let x_95 : bool = checkSwap_f1_f1_(&(param), &(param_1));
-      doSwap = x_95;
-      let x_96 : bool = doSwap;
-      if (x_96) {
-        let x_99 : i32 = i_1;
-        let x_101 : f32 = data[x_99];
-        temp = x_101;
-        let x_102 : i32 = i_1;
-        let x_103 : i32 = j;
-        let x_105 : f32 = data[x_103];
-        data[x_102] = x_105;
-        let x_107 : i32 = j;
-        let x_108 : f32 = temp;
-        data[x_107] = x_108;
-      }
-
-      continuing {
-        let x_110 : i32 = j;
-        j = (x_110 + 1);
-      }
-    }
-
-    continuing {
-      let x_112 : i32 = i_1;
-      i_1 = (x_112 + 1);
-    }
-  }
-  let x_115 : f32 = gl_FragCoord.x;
-  let x_117 : f32 = x_9.resolution.x;
-  if ((x_115 < (x_117 / 2.0))) {
-    let x_124 : f32 = data[0];
-    let x_127 : f32 = data[5];
-    let x_130 : f32 = data[9];
-    x_GLF_color = vec4<f32>((x_124 / 10.0), (x_127 / 10.0), (x_130 / 10.0), 1.0);
-  } else {
-    let x_134 : f32 = data[5];
-    let x_137 : f32 = data[9];
-    let x_140 : f32 = data[0];
-    x_GLF_color = vec4<f32>((x_134 / 10.0), (x_137 / 10.0), (x_140 / 10.0), 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.hlsl
deleted file mode 100644
index 9f00d01..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,166 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-bool checkSwap_f1_f1_(inout float a, inout float b) {
-  bool x_147 = false;
-  float x_158 = 0.0f;
-  float x_159 = 0.0f;
-  float x_179 = 0.0f;
-  float x_178 = 0.0f;
-  float x_185 = 0.0f;
-  float x_184 = 0.0f;
-  float x_160_phi = 0.0f;
-  float x_180_phi = 0.0f;
-  float x_186_phi = 0.0f;
-  const float x_149 = gl_FragCoord.y;
-  const float x_151 = asfloat(x_9[0].y);
-  const bool x_153 = (x_149 < (x_151 / 2.0f));
-  if (x_153) {
-    x_158 = a;
-    x_160_phi = x_158;
-  } else {
-    x_159 = 0.0f;
-    x_160_phi = x_159;
-  }
-  float x_166 = 0.0f;
-  float x_167 = 0.0f;
-  float x_168_phi = 0.0f;
-  const float x_160 = x_160_phi;
-  bool guard155 = true;
-  if (false) {
-  } else {
-    if (guard155) {
-      if (x_153) {
-        x_166 = b;
-        x_168_phi = x_166;
-      } else {
-        x_167 = 0.0f;
-        x_168_phi = x_167;
-      }
-      const bool x_169 = (x_160 > x_168_phi);
-      if (x_153) {
-        x_147 = x_169;
-      }
-      if (true) {
-      } else {
-        guard155 = false;
-      }
-      if (guard155) {
-        guard155 = false;
-      }
-    }
-  }
-  if (x_153) {
-    x_179 = 0.0f;
-    x_180_phi = x_179;
-  } else {
-    x_178 = a;
-    x_180_phi = x_178;
-  }
-  const float x_180 = x_180_phi;
-  if (x_153) {
-    x_185 = 0.0f;
-    x_186_phi = x_185;
-  } else {
-    x_184 = b;
-    x_186_phi = x_184;
-  }
-  const float x_186 = x_186_phi;
-  if (x_153) {
-  } else {
-    x_147 = (x_180 < x_186);
-  }
-  return x_147;
-}
-
-void main_1() {
-  int i = 0;
-  float data[10] = (float[10])0;
-  int i_1 = 0;
-  int j = 0;
-  bool doSwap = false;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float temp = 0.0f;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      const int x_62 = i;
-      const int x_63 = i;
-      const float x_67 = asfloat(x_13[0].y);
-      data[x_62] = (float((10 - x_63)) * x_67);
-    }
-  }
-  i_1 = 0;
-  {
-    for(; (i_1 < 9); i_1 = (i_1 + 1)) {
-      j = 0;
-      {
-        for(; (j < 10); j = (j + 1)) {
-          if ((j < (i_1 + 1))) {
-            continue;
-          }
-          const int x_93 = j;
-          const float x_95 = data[i_1];
-          param = x_95;
-          const float x_97 = data[x_93];
-          param_1 = x_97;
-          const bool x_98 = checkSwap_f1_f1_(param, param_1);
-          doSwap = x_98;
-          if (doSwap) {
-            const float x_104 = data[i_1];
-            temp = x_104;
-            const int x_105 = i_1;
-            const float x_108 = data[j];
-            data[x_105] = x_108;
-            data[j] = temp;
-          }
-        }
-      }
-    }
-  }
-  const float x_118 = gl_FragCoord.x;
-  const float x_120 = asfloat(x_9[0].x);
-  if ((x_118 < (x_120 / 2.0f))) {
-    const float x_127 = data[0];
-    const float x_130 = data[5];
-    const float x_133 = data[9];
-    x_GLF_color = float4((x_127 / 10.0f), (x_130 / 10.0f), (x_133 / 10.0f), 1.0f);
-  } else {
-    const float x_137 = data[5];
-    const float x_140 = data[9];
-    const float x_143 = data[0];
-    x_GLF_color = float4((x_137 / 10.0f), (x_140 / 10.0f), (x_143 / 10.0f), 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.msl
deleted file mode 100644
index 9839113..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool checkSwap_f1_f1_(constant buf1& x_9, thread float* const a, thread float* const b, thread float4* const tint_symbol_3) {
-  bool x_147 = false;
-  float x_158 = 0.0f;
-  float x_159 = 0.0f;
-  float x_179 = 0.0f;
-  float x_178 = 0.0f;
-  float x_185 = 0.0f;
-  float x_184 = 0.0f;
-  float x_160_phi = 0.0f;
-  float x_180_phi = 0.0f;
-  float x_186_phi = 0.0f;
-  float const x_149 = (*(tint_symbol_3)).y;
-  float const x_151 = x_9.resolution.y;
-  bool const x_153 = (x_149 < (x_151 / 2.0f));
-  if (x_153) {
-    x_158 = *(a);
-    x_160_phi = x_158;
-  } else {
-    x_159 = 0.0f;
-    x_160_phi = x_159;
-  }
-  float x_166 = 0.0f;
-  float x_167 = 0.0f;
-  float x_168_phi = 0.0f;
-  float const x_160 = x_160_phi;
-  bool guard155 = true;
-  if (false) {
-  } else {
-    if (guard155) {
-      if (x_153) {
-        x_166 = *(b);
-        x_168_phi = x_166;
-      } else {
-        x_167 = 0.0f;
-        x_168_phi = x_167;
-      }
-      float const x_168 = x_168_phi;
-      bool const x_169 = (x_160 > x_168);
-      if (x_153) {
-        x_147 = x_169;
-      }
-      if (true) {
-      } else {
-        guard155 = false;
-      }
-      if (guard155) {
-        guard155 = false;
-      }
-    }
-  }
-  if (x_153) {
-    x_179 = 0.0f;
-    x_180_phi = x_179;
-  } else {
-    x_178 = *(a);
-    x_180_phi = x_178;
-  }
-  float const x_180 = x_180_phi;
-  if (x_153) {
-    x_185 = 0.0f;
-    x_186_phi = x_185;
-  } else {
-    x_184 = *(b);
-    x_186_phi = x_184;
-  }
-  float const x_186 = x_186_phi;
-  if (x_153) {
-  } else {
-    x_147 = (x_180 < x_186);
-  }
-  bool const x_191 = x_147;
-  return x_191;
-}
-
-void main_1(constant buf0& x_13, constant buf1& x_9, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int i = 0;
-  tint_array_wrapper data = {};
-  int i_1 = 0;
-  int j = 0;
-  bool doSwap = false;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float temp = 0.0f;
-  i = 0;
-  while (true) {
-    int const x_59 = i;
-    if ((x_59 < 10)) {
-    } else {
-      break;
-    }
-    int const x_62 = i;
-    int const x_63 = i;
-    float const x_67 = x_13.injectionSwitch.y;
-    data.arr[x_62] = (float(as_type<int>((as_type<uint>(10) - as_type<uint>(x_63)))) * x_67);
-    {
-      int const x_70 = i;
-      i = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-    }
-  }
-  i_1 = 0;
-  while (true) {
-    int const x_76 = i_1;
-    if ((x_76 < 9)) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      int const x_83 = j;
-      if ((x_83 < 10)) {
-      } else {
-        break;
-      }
-      int const x_86 = j;
-      int const x_87 = i_1;
-      if ((x_86 < as_type<int>((as_type<uint>(x_87) + as_type<uint>(1))))) {
-        {
-          int const x_113 = j;
-          j = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-        }
-        continue;
-      }
-      int const x_92 = i_1;
-      int const x_93 = j;
-      float const x_95 = data.arr[x_92];
-      param = x_95;
-      float const x_97 = data.arr[x_93];
-      param_1 = x_97;
-      bool const x_98 = checkSwap_f1_f1_(x_9, &(param), &(param_1), tint_symbol_4);
-      doSwap = x_98;
-      bool const x_99 = doSwap;
-      if (x_99) {
-        int const x_102 = i_1;
-        float const x_104 = data.arr[x_102];
-        temp = x_104;
-        int const x_105 = i_1;
-        int const x_106 = j;
-        float const x_108 = data.arr[x_106];
-        data.arr[x_105] = x_108;
-        int const x_110 = j;
-        float const x_111 = temp;
-        data.arr[x_110] = x_111;
-      }
-      {
-        int const x_113 = j;
-        j = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_115 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
-    }
-  }
-  float const x_118 = (*(tint_symbol_4)).x;
-  float const x_120 = x_9.resolution.x;
-  if ((x_118 < (x_120 / 2.0f))) {
-    float const x_127 = data.arr[0];
-    float const x_130 = data.arr[5];
-    float const x_133 = data.arr[9];
-    *(tint_symbol_5) = float4((x_127 / 10.0f), (x_130 / 10.0f), (x_133 / 10.0f), 1.0f);
-  } else {
-    float const x_137 = data.arr[5];
-    float const x_140 = data.arr[9];
-    float const x_143 = data.arr[0];
-    *(tint_symbol_5) = float4((x_137 / 10.0f), (x_140 / 10.0f), (x_143 / 10.0f), 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_13, x_9, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, x_9, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.spvasm
deleted file mode 100644
index 11e08b3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,424 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 247
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_9 "x_9"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %checkSwap_f1_f1_ "checkSwap_f1_f1_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_147 "x_147"
-               OpName %x_158 "x_158"
-               OpName %x_159 "x_159"
-               OpName %x_179 "x_179"
-               OpName %x_178 "x_178"
-               OpName %x_185 "x_185"
-               OpName %x_184 "x_184"
-               OpName %x_160_phi "x_160_phi"
-               OpName %x_180_phi "x_180_phi"
-               OpName %x_186_phi "x_186_phi"
-               OpName %x_166 "x_166"
-               OpName %x_167 "x_167"
-               OpName %x_168_phi "x_168_phi"
-               OpName %guard155 "guard155"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %i_1 "i_1"
-               OpName %j "j"
-               OpName %doSwap "doSwap"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %temp "temp"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %bool %_ptr_Function_float %_ptr_Function_float
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-         %29 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-       %void = OpTypeVoid
-        %109 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-        %116 = OpConstantNull %int
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-        %121 = OpConstantNull %_arr_float_uint_10
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-      %int_5 = OpConstant %int 5
-   %float_10 = OpConstant %float 10
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %234 = OpTypeFunction %main_out %v4float
-%checkSwap_f1_f1_ = OpFunction %bool None %18
-          %a = OpFunctionParameter %_ptr_Function_float
-          %b = OpFunctionParameter %_ptr_Function_float
-         %24 = OpLabel
-      %x_147 = OpVariable %_ptr_Function_bool Function %27
-      %x_158 = OpVariable %_ptr_Function_float Function %29
-      %x_159 = OpVariable %_ptr_Function_float Function %29
-      %x_179 = OpVariable %_ptr_Function_float Function %29
-      %x_178 = OpVariable %_ptr_Function_float Function %29
-      %x_185 = OpVariable %_ptr_Function_float Function %29
-      %x_184 = OpVariable %_ptr_Function_float Function %29
-  %x_160_phi = OpVariable %_ptr_Function_float Function %29
-  %x_180_phi = OpVariable %_ptr_Function_float Function %29
-  %x_186_phi = OpVariable %_ptr_Function_float Function %29
-      %x_166 = OpVariable %_ptr_Function_float Function %29
-      %x_167 = OpVariable %_ptr_Function_float Function %29
-  %x_168_phi = OpVariable %_ptr_Function_float Function %29
-   %guard155 = OpVariable %_ptr_Function_bool Function %27
-         %41 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %42 = OpLoad %float %41
-         %45 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %46 = OpLoad %float %45
-         %48 = OpFDiv %float %46 %float_2
-         %49 = OpFOrdLessThan %bool %42 %48
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-         %54 = OpLoad %float %a
-               OpStore %x_158 %54
-         %55 = OpLoad %float %x_158
-               OpStore %x_160_phi %55
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_159 %float_0
-         %57 = OpLoad %float %x_159
-               OpStore %x_160_phi %57
-               OpBranch %50
-         %50 = OpLabel
-         %61 = OpLoad %float %x_160_phi
-               OpStore %guard155 %true
-               OpSelectionMerge %65 None
-               OpBranchConditional %false %66 %67
-         %66 = OpLabel
-               OpBranch %65
-         %67 = OpLabel
-         %68 = OpLoad %bool %guard155
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-               OpSelectionMerge %71 None
-               OpBranchConditional %49 %72 %73
-         %72 = OpLabel
-         %75 = OpLoad %float %b
-               OpStore %x_166 %75
-         %76 = OpLoad %float %x_166
-               OpStore %x_168_phi %76
-               OpBranch %71
-         %73 = OpLabel
-               OpStore %x_167 %float_0
-         %77 = OpLoad %float %x_167
-               OpStore %x_168_phi %77
-               OpBranch %71
-         %71 = OpLabel
-         %78 = OpLoad %float %x_168_phi
-         %79 = OpFOrdGreaterThan %bool %61 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %49 %81 %80
-         %81 = OpLabel
-               OpStore %x_147 %79
-               OpBranch %80
-         %80 = OpLabel
-               OpSelectionMerge %82 None
-               OpBranchConditional %true %83 %84
-         %83 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-               OpStore %guard155 %false
-               OpBranch %82
-         %82 = OpLabel
-         %85 = OpLoad %bool %guard155
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-               OpStore %guard155 %false
-               OpBranch %86
-         %86 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpSelectionMerge %88 None
-               OpBranchConditional %49 %89 %90
-         %89 = OpLabel
-               OpStore %x_179 %float_0
-         %91 = OpLoad %float %x_179
-               OpStore %x_180_phi %91
-               OpBranch %88
-         %90 = OpLabel
-         %93 = OpLoad %float %a
-               OpStore %x_178 %93
-         %94 = OpLoad %float %x_178
-               OpStore %x_180_phi %94
-               OpBranch %88
-         %88 = OpLabel
-         %95 = OpLoad %float %x_180_phi
-               OpSelectionMerge %96 None
-               OpBranchConditional %49 %97 %98
-         %97 = OpLabel
-               OpStore %x_185 %float_0
-         %99 = OpLoad %float %x_185
-               OpStore %x_186_phi %99
-               OpBranch %96
-         %98 = OpLabel
-        %101 = OpLoad %float %b
-               OpStore %x_184 %101
-        %102 = OpLoad %float %x_184
-               OpStore %x_186_phi %102
-               OpBranch %96
-         %96 = OpLabel
-        %103 = OpLoad %float %x_186_phi
-               OpSelectionMerge %104 None
-               OpBranchConditional %49 %105 %106
-        %105 = OpLabel
-               OpBranch %104
-        %106 = OpLabel
-        %107 = OpFOrdLessThan %bool %95 %103
-               OpStore %x_147 %107
-               OpBranch %104
-        %104 = OpLabel
-        %108 = OpLoad %bool %x_147
-               OpReturnValue %108
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %109
-        %112 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %116
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %121
-        %i_1 = OpVariable %_ptr_Function_int Function %116
-          %j = OpVariable %_ptr_Function_int Function %116
-     %doSwap = OpVariable %_ptr_Function_bool Function %27
-      %param = OpVariable %_ptr_Function_float Function %29
-    %param_1 = OpVariable %_ptr_Function_float Function %29
-       %temp = OpVariable %_ptr_Function_float Function %29
-               OpStore %i %int_0
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %i
-        %135 = OpSLessThan %bool %133 %int_10
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %138
-        %137 = OpLabel
-               OpBranch %136
-        %138 = OpLabel
-               OpBranch %130
-        %136 = OpLabel
-        %139 = OpLoad %int %i
-        %140 = OpLoad %int %i
-        %141 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_1
-        %142 = OpLoad %float %141
-        %143 = OpAccessChain %_ptr_Function_float %data %139
-        %145 = OpISub %int %int_10 %140
-        %144 = OpConvertSToF %float %145
-        %146 = OpFMul %float %144 %142
-               OpStore %143 %146
-               OpBranch %131
-        %131 = OpLabel
-        %147 = OpLoad %int %i
-        %149 = OpIAdd %int %147 %int_1
-               OpStore %i %149
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %154 = OpLoad %int %i_1
-        %156 = OpSLessThan %bool %154 %int_9
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %159
-        %158 = OpLabel
-               OpBranch %157
-        %159 = OpLabel
-               OpBranch %151
-        %157 = OpLabel
-               OpStore %j %int_0
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %164 = OpLoad %int %j
-        %165 = OpSLessThan %bool %164 %int_10
-               OpSelectionMerge %166 None
-               OpBranchConditional %165 %167 %168
-        %167 = OpLabel
-               OpBranch %166
-        %168 = OpLabel
-               OpBranch %161
-        %166 = OpLabel
-        %169 = OpLoad %int %j
-        %170 = OpLoad %int %i_1
-        %171 = OpIAdd %int %170 %int_1
-        %172 = OpSLessThan %bool %169 %171
-               OpSelectionMerge %173 None
-               OpBranchConditional %172 %174 %173
-        %174 = OpLabel
-               OpBranch %162
-        %173 = OpLabel
-        %175 = OpLoad %int %i_1
-        %176 = OpLoad %int %j
-        %177 = OpAccessChain %_ptr_Function_float %data %175
-        %178 = OpLoad %float %177
-               OpStore %param %178
-        %179 = OpAccessChain %_ptr_Function_float %data %176
-        %180 = OpLoad %float %179
-               OpStore %param_1 %180
-        %181 = OpFunctionCall %bool %checkSwap_f1_f1_ %param %param_1
-               OpStore %doSwap %181
-        %184 = OpLoad %bool %doSwap
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %185
-        %186 = OpLabel
-        %187 = OpLoad %int %i_1
-        %188 = OpAccessChain %_ptr_Function_float %data %187
-        %189 = OpLoad %float %188
-               OpStore %temp %189
-        %190 = OpLoad %int %i_1
-        %191 = OpLoad %int %j
-        %192 = OpAccessChain %_ptr_Function_float %data %191
-        %193 = OpLoad %float %192
-        %194 = OpAccessChain %_ptr_Function_float %data %190
-               OpStore %194 %193
-        %195 = OpLoad %int %j
-        %196 = OpLoad %float %temp
-        %197 = OpAccessChain %_ptr_Function_float %data %195
-               OpStore %197 %196
-               OpBranch %185
-        %185 = OpLabel
-               OpBranch %162
-        %162 = OpLabel
-        %198 = OpLoad %int %j
-        %199 = OpIAdd %int %198 %int_1
-               OpStore %j %199
-               OpBranch %160
-        %161 = OpLabel
-               OpBranch %152
-        %152 = OpLabel
-        %200 = OpLoad %int %i_1
-        %201 = OpIAdd %int %200 %int_1
-               OpStore %i_1 %201
-               OpBranch %150
-        %151 = OpLabel
-        %202 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %203 = OpLoad %float %202
-        %204 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-        %205 = OpLoad %float %204
-        %206 = OpFDiv %float %205 %float_2
-        %207 = OpFOrdLessThan %bool %203 %206
-               OpSelectionMerge %208 None
-               OpBranchConditional %207 %209 %210
-        %209 = OpLabel
-        %211 = OpAccessChain %_ptr_Function_float %data %int_0
-        %212 = OpLoad %float %211
-        %214 = OpAccessChain %_ptr_Function_float %data %int_5
-        %215 = OpLoad %float %214
-        %216 = OpAccessChain %_ptr_Function_float %data %int_9
-        %217 = OpLoad %float %216
-        %219 = OpFDiv %float %212 %float_10
-        %220 = OpFDiv %float %215 %float_10
-        %221 = OpFDiv %float %217 %float_10
-        %223 = OpCompositeConstruct %v4float %219 %220 %221 %float_1
-               OpStore %x_GLF_color %223
-               OpBranch %208
-        %210 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_float %data %int_5
-        %225 = OpLoad %float %224
-        %226 = OpAccessChain %_ptr_Function_float %data %int_9
-        %227 = OpLoad %float %226
-        %228 = OpAccessChain %_ptr_Function_float %data %int_0
-        %229 = OpLoad %float %228
-        %230 = OpFDiv %float %225 %float_10
-        %231 = OpFDiv %float %227 %float_10
-        %232 = OpFDiv %float %229 %float_10
-        %233 = OpCompositeConstruct %v4float %230 %231 %232 %float_1
-               OpStore %x_GLF_color %233
-               OpBranch %208
-        %208 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %234
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %238 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %239 = OpFunctionCall %void %main_1
-        %240 = OpLoad %v4float %x_GLF_color
-        %241 = OpCompositeConstruct %main_out %240
-               OpReturnValue %241
-               OpFunctionEnd
-       %main = OpFunction %void None %109
-        %243 = OpLabel
-        %245 = OpLoad %v4float %gl_FragCoord_param_1
-        %244 = OpFunctionCall %main_out %main_inner %245
-        %246 = OpCompositeExtract %v4float %244 0
-               OpStore %x_GLF_color_1_1 %246
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.wgsl
deleted file mode 100644
index 6e36ff7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,197 +0,0 @@
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn checkSwap_f1_f1_(a : ptr<function, f32>, b : ptr<function, f32>) -> bool {
-  var x_147 : bool;
-  var x_158 : f32;
-  var x_159 : f32;
-  var x_179 : f32;
-  var x_178 : f32;
-  var x_185 : f32;
-  var x_184 : f32;
-  var x_160_phi : f32;
-  var x_180_phi : f32;
-  var x_186_phi : f32;
-  let x_149 : f32 = gl_FragCoord.y;
-  let x_151 : f32 = x_9.resolution.y;
-  let x_153 : bool = (x_149 < (x_151 / 2.0));
-  if (x_153) {
-    x_158 = *(a);
-    x_160_phi = x_158;
-  } else {
-    x_159 = 0.0;
-    x_160_phi = x_159;
-  }
-  var x_166 : f32;
-  var x_167 : f32;
-  var x_168_phi : f32;
-  let x_160 : f32 = x_160_phi;
-  var guard155 : bool = true;
-  if (false) {
-  } else {
-    if (guard155) {
-      if (x_153) {
-        x_166 = *(b);
-        x_168_phi = x_166;
-      } else {
-        x_167 = 0.0;
-        x_168_phi = x_167;
-      }
-      let x_168 : f32 = x_168_phi;
-      let x_169 : bool = (x_160 > x_168);
-      if (x_153) {
-        x_147 = x_169;
-      }
-      if (true) {
-      } else {
-        guard155 = false;
-      }
-      if (guard155) {
-        guard155 = false;
-      }
-    }
-  }
-  if (x_153) {
-    x_179 = 0.0;
-    x_180_phi = x_179;
-  } else {
-    x_178 = *(a);
-    x_180_phi = x_178;
-  }
-  let x_180 : f32 = x_180_phi;
-  if (x_153) {
-    x_185 = 0.0;
-    x_186_phi = x_185;
-  } else {
-    x_184 = *(b);
-    x_186_phi = x_184;
-  }
-  let x_186 : f32 = x_186_phi;
-  if (x_153) {
-  } else {
-    x_147 = (x_180 < x_186);
-  }
-  let x_191 : bool = x_147;
-  return x_191;
-}
-
-fn main_1() {
-  var i : i32;
-  var data : array<f32, 10>;
-  var i_1 : i32;
-  var j : i32;
-  var doSwap : bool;
-  var param : f32;
-  var param_1 : f32;
-  var temp : f32;
-  i = 0;
-  loop {
-    let x_59 : i32 = i;
-    if ((x_59 < 10)) {
-    } else {
-      break;
-    }
-    let x_62 : i32 = i;
-    let x_63 : i32 = i;
-    let x_67 : f32 = x_13.injectionSwitch.y;
-    data[x_62] = (f32((10 - x_63)) * x_67);
-
-    continuing {
-      let x_70 : i32 = i;
-      i = (x_70 + 1);
-    }
-  }
-  i_1 = 0;
-  loop {
-    let x_76 : i32 = i_1;
-    if ((x_76 < 9)) {
-    } else {
-      break;
-    }
-    j = 0;
-    loop {
-      let x_83 : i32 = j;
-      if ((x_83 < 10)) {
-      } else {
-        break;
-      }
-      let x_86 : i32 = j;
-      let x_87 : i32 = i_1;
-      if ((x_86 < (x_87 + 1))) {
-        continue;
-      }
-      let x_92 : i32 = i_1;
-      let x_93 : i32 = j;
-      let x_95 : f32 = data[x_92];
-      param = x_95;
-      let x_97 : f32 = data[x_93];
-      param_1 = x_97;
-      let x_98 : bool = checkSwap_f1_f1_(&(param), &(param_1));
-      doSwap = x_98;
-      let x_99 : bool = doSwap;
-      if (x_99) {
-        let x_102 : i32 = i_1;
-        let x_104 : f32 = data[x_102];
-        temp = x_104;
-        let x_105 : i32 = i_1;
-        let x_106 : i32 = j;
-        let x_108 : f32 = data[x_106];
-        data[x_105] = x_108;
-        let x_110 : i32 = j;
-        let x_111 : f32 = temp;
-        data[x_110] = x_111;
-      }
-
-      continuing {
-        let x_113 : i32 = j;
-        j = (x_113 + 1);
-      }
-    }
-
-    continuing {
-      let x_115 : i32 = i_1;
-      i_1 = (x_115 + 1);
-    }
-  }
-  let x_118 : f32 = gl_FragCoord.x;
-  let x_120 : f32 = x_9.resolution.x;
-  if ((x_118 < (x_120 / 2.0))) {
-    let x_127 : f32 = data[0];
-    let x_130 : f32 = data[5];
-    let x_133 : f32 = data[9];
-    x_GLF_color = vec4<f32>((x_127 / 10.0), (x_130 / 10.0), (x_133 / 10.0), 1.0);
-  } else {
-    let x_137 : f32 = data[5];
-    let x_140 : f32 = data[9];
-    let x_143 : f32 = data[0];
-    x_GLF_color = vec4<f32>((x_137 / 10.0), (x_140 / 10.0), (x_143 / 10.0), 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.hlsl
deleted file mode 100644
index 9f00d01..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,166 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-bool checkSwap_f1_f1_(inout float a, inout float b) {
-  bool x_147 = false;
-  float x_158 = 0.0f;
-  float x_159 = 0.0f;
-  float x_179 = 0.0f;
-  float x_178 = 0.0f;
-  float x_185 = 0.0f;
-  float x_184 = 0.0f;
-  float x_160_phi = 0.0f;
-  float x_180_phi = 0.0f;
-  float x_186_phi = 0.0f;
-  const float x_149 = gl_FragCoord.y;
-  const float x_151 = asfloat(x_9[0].y);
-  const bool x_153 = (x_149 < (x_151 / 2.0f));
-  if (x_153) {
-    x_158 = a;
-    x_160_phi = x_158;
-  } else {
-    x_159 = 0.0f;
-    x_160_phi = x_159;
-  }
-  float x_166 = 0.0f;
-  float x_167 = 0.0f;
-  float x_168_phi = 0.0f;
-  const float x_160 = x_160_phi;
-  bool guard155 = true;
-  if (false) {
-  } else {
-    if (guard155) {
-      if (x_153) {
-        x_166 = b;
-        x_168_phi = x_166;
-      } else {
-        x_167 = 0.0f;
-        x_168_phi = x_167;
-      }
-      const bool x_169 = (x_160 > x_168_phi);
-      if (x_153) {
-        x_147 = x_169;
-      }
-      if (true) {
-      } else {
-        guard155 = false;
-      }
-      if (guard155) {
-        guard155 = false;
-      }
-    }
-  }
-  if (x_153) {
-    x_179 = 0.0f;
-    x_180_phi = x_179;
-  } else {
-    x_178 = a;
-    x_180_phi = x_178;
-  }
-  const float x_180 = x_180_phi;
-  if (x_153) {
-    x_185 = 0.0f;
-    x_186_phi = x_185;
-  } else {
-    x_184 = b;
-    x_186_phi = x_184;
-  }
-  const float x_186 = x_186_phi;
-  if (x_153) {
-  } else {
-    x_147 = (x_180 < x_186);
-  }
-  return x_147;
-}
-
-void main_1() {
-  int i = 0;
-  float data[10] = (float[10])0;
-  int i_1 = 0;
-  int j = 0;
-  bool doSwap = false;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float temp = 0.0f;
-  i = 0;
-  {
-    for(; (i < 10); i = (i + 1)) {
-      const int x_62 = i;
-      const int x_63 = i;
-      const float x_67 = asfloat(x_13[0].y);
-      data[x_62] = (float((10 - x_63)) * x_67);
-    }
-  }
-  i_1 = 0;
-  {
-    for(; (i_1 < 9); i_1 = (i_1 + 1)) {
-      j = 0;
-      {
-        for(; (j < 10); j = (j + 1)) {
-          if ((j < (i_1 + 1))) {
-            continue;
-          }
-          const int x_93 = j;
-          const float x_95 = data[i_1];
-          param = x_95;
-          const float x_97 = data[x_93];
-          param_1 = x_97;
-          const bool x_98 = checkSwap_f1_f1_(param, param_1);
-          doSwap = x_98;
-          if (doSwap) {
-            const float x_104 = data[i_1];
-            temp = x_104;
-            const int x_105 = i_1;
-            const float x_108 = data[j];
-            data[x_105] = x_108;
-            data[j] = temp;
-          }
-        }
-      }
-    }
-  }
-  const float x_118 = gl_FragCoord.x;
-  const float x_120 = asfloat(x_9[0].x);
-  if ((x_118 < (x_120 / 2.0f))) {
-    const float x_127 = data[0];
-    const float x_130 = data[5];
-    const float x_133 = data[9];
-    x_GLF_color = float4((x_127 / 10.0f), (x_130 / 10.0f), (x_133 / 10.0f), 1.0f);
-  } else {
-    const float x_137 = data[5];
-    const float x_140 = data[9];
-    const float x_143 = data[0];
-    x_GLF_color = float4((x_137 / 10.0f), (x_140 / 10.0f), (x_143 / 10.0f), 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.msl
deleted file mode 100644
index 9839113..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool checkSwap_f1_f1_(constant buf1& x_9, thread float* const a, thread float* const b, thread float4* const tint_symbol_3) {
-  bool x_147 = false;
-  float x_158 = 0.0f;
-  float x_159 = 0.0f;
-  float x_179 = 0.0f;
-  float x_178 = 0.0f;
-  float x_185 = 0.0f;
-  float x_184 = 0.0f;
-  float x_160_phi = 0.0f;
-  float x_180_phi = 0.0f;
-  float x_186_phi = 0.0f;
-  float const x_149 = (*(tint_symbol_3)).y;
-  float const x_151 = x_9.resolution.y;
-  bool const x_153 = (x_149 < (x_151 / 2.0f));
-  if (x_153) {
-    x_158 = *(a);
-    x_160_phi = x_158;
-  } else {
-    x_159 = 0.0f;
-    x_160_phi = x_159;
-  }
-  float x_166 = 0.0f;
-  float x_167 = 0.0f;
-  float x_168_phi = 0.0f;
-  float const x_160 = x_160_phi;
-  bool guard155 = true;
-  if (false) {
-  } else {
-    if (guard155) {
-      if (x_153) {
-        x_166 = *(b);
-        x_168_phi = x_166;
-      } else {
-        x_167 = 0.0f;
-        x_168_phi = x_167;
-      }
-      float const x_168 = x_168_phi;
-      bool const x_169 = (x_160 > x_168);
-      if (x_153) {
-        x_147 = x_169;
-      }
-      if (true) {
-      } else {
-        guard155 = false;
-      }
-      if (guard155) {
-        guard155 = false;
-      }
-    }
-  }
-  if (x_153) {
-    x_179 = 0.0f;
-    x_180_phi = x_179;
-  } else {
-    x_178 = *(a);
-    x_180_phi = x_178;
-  }
-  float const x_180 = x_180_phi;
-  if (x_153) {
-    x_185 = 0.0f;
-    x_186_phi = x_185;
-  } else {
-    x_184 = *(b);
-    x_186_phi = x_184;
-  }
-  float const x_186 = x_186_phi;
-  if (x_153) {
-  } else {
-    x_147 = (x_180 < x_186);
-  }
-  bool const x_191 = x_147;
-  return x_191;
-}
-
-void main_1(constant buf0& x_13, constant buf1& x_9, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int i = 0;
-  tint_array_wrapper data = {};
-  int i_1 = 0;
-  int j = 0;
-  bool doSwap = false;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float temp = 0.0f;
-  i = 0;
-  while (true) {
-    int const x_59 = i;
-    if ((x_59 < 10)) {
-    } else {
-      break;
-    }
-    int const x_62 = i;
-    int const x_63 = i;
-    float const x_67 = x_13.injectionSwitch.y;
-    data.arr[x_62] = (float(as_type<int>((as_type<uint>(10) - as_type<uint>(x_63)))) * x_67);
-    {
-      int const x_70 = i;
-      i = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-    }
-  }
-  i_1 = 0;
-  while (true) {
-    int const x_76 = i_1;
-    if ((x_76 < 9)) {
-    } else {
-      break;
-    }
-    j = 0;
-    while (true) {
-      int const x_83 = j;
-      if ((x_83 < 10)) {
-      } else {
-        break;
-      }
-      int const x_86 = j;
-      int const x_87 = i_1;
-      if ((x_86 < as_type<int>((as_type<uint>(x_87) + as_type<uint>(1))))) {
-        {
-          int const x_113 = j;
-          j = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-        }
-        continue;
-      }
-      int const x_92 = i_1;
-      int const x_93 = j;
-      float const x_95 = data.arr[x_92];
-      param = x_95;
-      float const x_97 = data.arr[x_93];
-      param_1 = x_97;
-      bool const x_98 = checkSwap_f1_f1_(x_9, &(param), &(param_1), tint_symbol_4);
-      doSwap = x_98;
-      bool const x_99 = doSwap;
-      if (x_99) {
-        int const x_102 = i_1;
-        float const x_104 = data.arr[x_102];
-        temp = x_104;
-        int const x_105 = i_1;
-        int const x_106 = j;
-        float const x_108 = data.arr[x_106];
-        data.arr[x_105] = x_108;
-        int const x_110 = j;
-        float const x_111 = temp;
-        data.arr[x_110] = x_111;
-      }
-      {
-        int const x_113 = j;
-        j = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-      }
-    }
-    {
-      int const x_115 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
-    }
-  }
-  float const x_118 = (*(tint_symbol_4)).x;
-  float const x_120 = x_9.resolution.x;
-  if ((x_118 < (x_120 / 2.0f))) {
-    float const x_127 = data.arr[0];
-    float const x_130 = data.arr[5];
-    float const x_133 = data.arr[9];
-    *(tint_symbol_5) = float4((x_127 / 10.0f), (x_130 / 10.0f), (x_133 / 10.0f), 1.0f);
-  } else {
-    float const x_137 = data.arr[5];
-    float const x_140 = data.arr[9];
-    float const x_143 = data.arr[0];
-    *(tint_symbol_5) = float4((x_137 / 10.0f), (x_140 / 10.0f), (x_143 / 10.0f), 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, constant buf1& x_9, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_13, x_9, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]], constant buf1& x_9 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, x_9, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.spvasm
deleted file mode 100644
index 11e08b3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,424 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 247
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_9 "x_9"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %checkSwap_f1_f1_ "checkSwap_f1_f1_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %x_147 "x_147"
-               OpName %x_158 "x_158"
-               OpName %x_159 "x_159"
-               OpName %x_179 "x_179"
-               OpName %x_178 "x_178"
-               OpName %x_185 "x_185"
-               OpName %x_184 "x_184"
-               OpName %x_160_phi "x_160_phi"
-               OpName %x_180_phi "x_180_phi"
-               OpName %x_186_phi "x_186_phi"
-               OpName %x_166 "x_166"
-               OpName %x_167 "x_167"
-               OpName %x_168_phi "x_168_phi"
-               OpName %guard155 "guard155"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %i_1 "i_1"
-               OpName %j "j"
-               OpName %doSwap "doSwap"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %temp "temp"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_9 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %bool %_ptr_Function_float %_ptr_Function_float
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-         %29 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_2 = OpConstant %float 2
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-      %false = OpConstantFalse %bool
-       %void = OpTypeVoid
-        %109 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-        %116 = OpConstantNull %int
-    %uint_10 = OpConstant %uint 10
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-%_ptr_Function__arr_float_uint_10 = OpTypePointer Function %_arr_float_uint_10
-        %121 = OpConstantNull %_arr_float_uint_10
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-      %int_5 = OpConstant %int 5
-   %float_10 = OpConstant %float 10
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %234 = OpTypeFunction %main_out %v4float
-%checkSwap_f1_f1_ = OpFunction %bool None %18
-          %a = OpFunctionParameter %_ptr_Function_float
-          %b = OpFunctionParameter %_ptr_Function_float
-         %24 = OpLabel
-      %x_147 = OpVariable %_ptr_Function_bool Function %27
-      %x_158 = OpVariable %_ptr_Function_float Function %29
-      %x_159 = OpVariable %_ptr_Function_float Function %29
-      %x_179 = OpVariable %_ptr_Function_float Function %29
-      %x_178 = OpVariable %_ptr_Function_float Function %29
-      %x_185 = OpVariable %_ptr_Function_float Function %29
-      %x_184 = OpVariable %_ptr_Function_float Function %29
-  %x_160_phi = OpVariable %_ptr_Function_float Function %29
-  %x_180_phi = OpVariable %_ptr_Function_float Function %29
-  %x_186_phi = OpVariable %_ptr_Function_float Function %29
-      %x_166 = OpVariable %_ptr_Function_float Function %29
-      %x_167 = OpVariable %_ptr_Function_float Function %29
-  %x_168_phi = OpVariable %_ptr_Function_float Function %29
-   %guard155 = OpVariable %_ptr_Function_bool Function %27
-         %41 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %42 = OpLoad %float %41
-         %45 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %46 = OpLoad %float %45
-         %48 = OpFDiv %float %46 %float_2
-         %49 = OpFOrdLessThan %bool %42 %48
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %52
-         %51 = OpLabel
-         %54 = OpLoad %float %a
-               OpStore %x_158 %54
-         %55 = OpLoad %float %x_158
-               OpStore %x_160_phi %55
-               OpBranch %50
-         %52 = OpLabel
-               OpStore %x_159 %float_0
-         %57 = OpLoad %float %x_159
-               OpStore %x_160_phi %57
-               OpBranch %50
-         %50 = OpLabel
-         %61 = OpLoad %float %x_160_phi
-               OpStore %guard155 %true
-               OpSelectionMerge %65 None
-               OpBranchConditional %false %66 %67
-         %66 = OpLabel
-               OpBranch %65
-         %67 = OpLabel
-         %68 = OpLoad %bool %guard155
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-               OpSelectionMerge %71 None
-               OpBranchConditional %49 %72 %73
-         %72 = OpLabel
-         %75 = OpLoad %float %b
-               OpStore %x_166 %75
-         %76 = OpLoad %float %x_166
-               OpStore %x_168_phi %76
-               OpBranch %71
-         %73 = OpLabel
-               OpStore %x_167 %float_0
-         %77 = OpLoad %float %x_167
-               OpStore %x_168_phi %77
-               OpBranch %71
-         %71 = OpLabel
-         %78 = OpLoad %float %x_168_phi
-         %79 = OpFOrdGreaterThan %bool %61 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %49 %81 %80
-         %81 = OpLabel
-               OpStore %x_147 %79
-               OpBranch %80
-         %80 = OpLabel
-               OpSelectionMerge %82 None
-               OpBranchConditional %true %83 %84
-         %83 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-               OpStore %guard155 %false
-               OpBranch %82
-         %82 = OpLabel
-         %85 = OpLoad %bool %guard155
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %86
-         %87 = OpLabel
-               OpStore %guard155 %false
-               OpBranch %86
-         %86 = OpLabel
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %65
-         %65 = OpLabel
-               OpSelectionMerge %88 None
-               OpBranchConditional %49 %89 %90
-         %89 = OpLabel
-               OpStore %x_179 %float_0
-         %91 = OpLoad %float %x_179
-               OpStore %x_180_phi %91
-               OpBranch %88
-         %90 = OpLabel
-         %93 = OpLoad %float %a
-               OpStore %x_178 %93
-         %94 = OpLoad %float %x_178
-               OpStore %x_180_phi %94
-               OpBranch %88
-         %88 = OpLabel
-         %95 = OpLoad %float %x_180_phi
-               OpSelectionMerge %96 None
-               OpBranchConditional %49 %97 %98
-         %97 = OpLabel
-               OpStore %x_185 %float_0
-         %99 = OpLoad %float %x_185
-               OpStore %x_186_phi %99
-               OpBranch %96
-         %98 = OpLabel
-        %101 = OpLoad %float %b
-               OpStore %x_184 %101
-        %102 = OpLoad %float %x_184
-               OpStore %x_186_phi %102
-               OpBranch %96
-         %96 = OpLabel
-        %103 = OpLoad %float %x_186_phi
-               OpSelectionMerge %104 None
-               OpBranchConditional %49 %105 %106
-        %105 = OpLabel
-               OpBranch %104
-        %106 = OpLabel
-        %107 = OpFOrdLessThan %bool %95 %103
-               OpStore %x_147 %107
-               OpBranch %104
-        %104 = OpLabel
-        %108 = OpLoad %bool %x_147
-               OpReturnValue %108
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %109
-        %112 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %116
-       %data = OpVariable %_ptr_Function__arr_float_uint_10 Function %121
-        %i_1 = OpVariable %_ptr_Function_int Function %116
-          %j = OpVariable %_ptr_Function_int Function %116
-     %doSwap = OpVariable %_ptr_Function_bool Function %27
-      %param = OpVariable %_ptr_Function_float Function %29
-    %param_1 = OpVariable %_ptr_Function_float Function %29
-       %temp = OpVariable %_ptr_Function_float Function %29
-               OpStore %i %int_0
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %i
-        %135 = OpSLessThan %bool %133 %int_10
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %138
-        %137 = OpLabel
-               OpBranch %136
-        %138 = OpLabel
-               OpBranch %130
-        %136 = OpLabel
-        %139 = OpLoad %int %i
-        %140 = OpLoad %int %i
-        %141 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_1
-        %142 = OpLoad %float %141
-        %143 = OpAccessChain %_ptr_Function_float %data %139
-        %145 = OpISub %int %int_10 %140
-        %144 = OpConvertSToF %float %145
-        %146 = OpFMul %float %144 %142
-               OpStore %143 %146
-               OpBranch %131
-        %131 = OpLabel
-        %147 = OpLoad %int %i
-        %149 = OpIAdd %int %147 %int_1
-               OpStore %i %149
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %154 = OpLoad %int %i_1
-        %156 = OpSLessThan %bool %154 %int_9
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %159
-        %158 = OpLabel
-               OpBranch %157
-        %159 = OpLabel
-               OpBranch %151
-        %157 = OpLabel
-               OpStore %j %int_0
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %164 = OpLoad %int %j
-        %165 = OpSLessThan %bool %164 %int_10
-               OpSelectionMerge %166 None
-               OpBranchConditional %165 %167 %168
-        %167 = OpLabel
-               OpBranch %166
-        %168 = OpLabel
-               OpBranch %161
-        %166 = OpLabel
-        %169 = OpLoad %int %j
-        %170 = OpLoad %int %i_1
-        %171 = OpIAdd %int %170 %int_1
-        %172 = OpSLessThan %bool %169 %171
-               OpSelectionMerge %173 None
-               OpBranchConditional %172 %174 %173
-        %174 = OpLabel
-               OpBranch %162
-        %173 = OpLabel
-        %175 = OpLoad %int %i_1
-        %176 = OpLoad %int %j
-        %177 = OpAccessChain %_ptr_Function_float %data %175
-        %178 = OpLoad %float %177
-               OpStore %param %178
-        %179 = OpAccessChain %_ptr_Function_float %data %176
-        %180 = OpLoad %float %179
-               OpStore %param_1 %180
-        %181 = OpFunctionCall %bool %checkSwap_f1_f1_ %param %param_1
-               OpStore %doSwap %181
-        %184 = OpLoad %bool %doSwap
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %185
-        %186 = OpLabel
-        %187 = OpLoad %int %i_1
-        %188 = OpAccessChain %_ptr_Function_float %data %187
-        %189 = OpLoad %float %188
-               OpStore %temp %189
-        %190 = OpLoad %int %i_1
-        %191 = OpLoad %int %j
-        %192 = OpAccessChain %_ptr_Function_float %data %191
-        %193 = OpLoad %float %192
-        %194 = OpAccessChain %_ptr_Function_float %data %190
-               OpStore %194 %193
-        %195 = OpLoad %int %j
-        %196 = OpLoad %float %temp
-        %197 = OpAccessChain %_ptr_Function_float %data %195
-               OpStore %197 %196
-               OpBranch %185
-        %185 = OpLabel
-               OpBranch %162
-        %162 = OpLabel
-        %198 = OpLoad %int %j
-        %199 = OpIAdd %int %198 %int_1
-               OpStore %j %199
-               OpBranch %160
-        %161 = OpLabel
-               OpBranch %152
-        %152 = OpLabel
-        %200 = OpLoad %int %i_1
-        %201 = OpIAdd %int %200 %int_1
-               OpStore %i_1 %201
-               OpBranch %150
-        %151 = OpLabel
-        %202 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %203 = OpLoad %float %202
-        %204 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-        %205 = OpLoad %float %204
-        %206 = OpFDiv %float %205 %float_2
-        %207 = OpFOrdLessThan %bool %203 %206
-               OpSelectionMerge %208 None
-               OpBranchConditional %207 %209 %210
-        %209 = OpLabel
-        %211 = OpAccessChain %_ptr_Function_float %data %int_0
-        %212 = OpLoad %float %211
-        %214 = OpAccessChain %_ptr_Function_float %data %int_5
-        %215 = OpLoad %float %214
-        %216 = OpAccessChain %_ptr_Function_float %data %int_9
-        %217 = OpLoad %float %216
-        %219 = OpFDiv %float %212 %float_10
-        %220 = OpFDiv %float %215 %float_10
-        %221 = OpFDiv %float %217 %float_10
-        %223 = OpCompositeConstruct %v4float %219 %220 %221 %float_1
-               OpStore %x_GLF_color %223
-               OpBranch %208
-        %210 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_float %data %int_5
-        %225 = OpLoad %float %224
-        %226 = OpAccessChain %_ptr_Function_float %data %int_9
-        %227 = OpLoad %float %226
-        %228 = OpAccessChain %_ptr_Function_float %data %int_0
-        %229 = OpLoad %float %228
-        %230 = OpFDiv %float %225 %float_10
-        %231 = OpFDiv %float %227 %float_10
-        %232 = OpFDiv %float %229 %float_10
-        %233 = OpCompositeConstruct %v4float %230 %231 %232 %float_1
-               OpStore %x_GLF_color %233
-               OpBranch %208
-        %208 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %234
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %238 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %239 = OpFunctionCall %void %main_1
-        %240 = OpLoad %v4float %x_GLF_color
-        %241 = OpCompositeConstruct %main_out %240
-               OpReturnValue %241
-               OpFunctionEnd
-       %main = OpFunction %void None %109
-        %243 = OpLabel
-        %245 = OpLoad %v4float %gl_FragCoord_param_1
-        %244 = OpFunctionCall %main_out %main_inner %245
-        %246 = OpCompositeExtract %v4float %244 0
-               OpStore %x_GLF_color_1_1 %246
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.wgsl
deleted file mode 100644
index 6e36ff7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-bubblesort-flag-complex-conditionals/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,197 +0,0 @@
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn checkSwap_f1_f1_(a : ptr<function, f32>, b : ptr<function, f32>) -> bool {
-  var x_147 : bool;
-  var x_158 : f32;
-  var x_159 : f32;
-  var x_179 : f32;
-  var x_178 : f32;
-  var x_185 : f32;
-  var x_184 : f32;
-  var x_160_phi : f32;
-  var x_180_phi : f32;
-  var x_186_phi : f32;
-  let x_149 : f32 = gl_FragCoord.y;
-  let x_151 : f32 = x_9.resolution.y;
-  let x_153 : bool = (x_149 < (x_151 / 2.0));
-  if (x_153) {
-    x_158 = *(a);
-    x_160_phi = x_158;
-  } else {
-    x_159 = 0.0;
-    x_160_phi = x_159;
-  }
-  var x_166 : f32;
-  var x_167 : f32;
-  var x_168_phi : f32;
-  let x_160 : f32 = x_160_phi;
-  var guard155 : bool = true;
-  if (false) {
-  } else {
-    if (guard155) {
-      if (x_153) {
-        x_166 = *(b);
-        x_168_phi = x_166;
-      } else {
-        x_167 = 0.0;
-        x_168_phi = x_167;
-      }
-      let x_168 : f32 = x_168_phi;
-      let x_169 : bool = (x_160 > x_168);
-      if (x_153) {
-        x_147 = x_169;
-      }
-      if (true) {
-      } else {
-        guard155 = false;
-      }
-      if (guard155) {
-        guard155 = false;
-      }
-    }
-  }
-  if (x_153) {
-    x_179 = 0.0;
-    x_180_phi = x_179;
-  } else {
-    x_178 = *(a);
-    x_180_phi = x_178;
-  }
-  let x_180 : f32 = x_180_phi;
-  if (x_153) {
-    x_185 = 0.0;
-    x_186_phi = x_185;
-  } else {
-    x_184 = *(b);
-    x_186_phi = x_184;
-  }
-  let x_186 : f32 = x_186_phi;
-  if (x_153) {
-  } else {
-    x_147 = (x_180 < x_186);
-  }
-  let x_191 : bool = x_147;
-  return x_191;
-}
-
-fn main_1() {
-  var i : i32;
-  var data : array<f32, 10>;
-  var i_1 : i32;
-  var j : i32;
-  var doSwap : bool;
-  var param : f32;
-  var param_1 : f32;
-  var temp : f32;
-  i = 0;
-  loop {
-    let x_59 : i32 = i;
-    if ((x_59 < 10)) {
-    } else {
-      break;
-    }
-    let x_62 : i32 = i;
-    let x_63 : i32 = i;
-    let x_67 : f32 = x_13.injectionSwitch.y;
-    data[x_62] = (f32((10 - x_63)) * x_67);
-
-    continuing {
-      let x_70 : i32 = i;
-      i = (x_70 + 1);
-    }
-  }
-  i_1 = 0;
-  loop {
-    let x_76 : i32 = i_1;
-    if ((x_76 < 9)) {
-    } else {
-      break;
-    }
-    j = 0;
-    loop {
-      let x_83 : i32 = j;
-      if ((x_83 < 10)) {
-      } else {
-        break;
-      }
-      let x_86 : i32 = j;
-      let x_87 : i32 = i_1;
-      if ((x_86 < (x_87 + 1))) {
-        continue;
-      }
-      let x_92 : i32 = i_1;
-      let x_93 : i32 = j;
-      let x_95 : f32 = data[x_92];
-      param = x_95;
-      let x_97 : f32 = data[x_93];
-      param_1 = x_97;
-      let x_98 : bool = checkSwap_f1_f1_(&(param), &(param_1));
-      doSwap = x_98;
-      let x_99 : bool = doSwap;
-      if (x_99) {
-        let x_102 : i32 = i_1;
-        let x_104 : f32 = data[x_102];
-        temp = x_104;
-        let x_105 : i32 = i_1;
-        let x_106 : i32 = j;
-        let x_108 : f32 = data[x_106];
-        data[x_105] = x_108;
-        let x_110 : i32 = j;
-        let x_111 : f32 = temp;
-        data[x_110] = x_111;
-      }
-
-      continuing {
-        let x_113 : i32 = j;
-        j = (x_113 + 1);
-      }
-    }
-
-    continuing {
-      let x_115 : i32 = i_1;
-      i_1 = (x_115 + 1);
-    }
-  }
-  let x_118 : f32 = gl_FragCoord.x;
-  let x_120 : f32 = x_9.resolution.x;
-  if ((x_118 < (x_120 / 2.0))) {
-    let x_127 : f32 = data[0];
-    let x_130 : f32 = data[5];
-    let x_133 : f32 = data[9];
-    x_GLF_color = vec4<f32>((x_127 / 10.0), (x_130 / 10.0), (x_133 / 10.0), 1.0);
-  } else {
-    let x_137 : f32 = data[5];
-    let x_140 : f32 = data[9];
-    let x_143 : f32 = data[0];
-    x_GLF_color = vec4<f32>((x_137 / 10.0), (x_140 / 10.0), (x_143 / 10.0), 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.hlsl
deleted file mode 100644
index 38242ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,70 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_65 = 0;
-  int x_65_phi = 0;
-  int x_68_phi = 0;
-  const float4 x_51 = gl_FragCoord;
-  const float2 x_54 = asfloat(x_6[0].xy);
-  const float2 x_57 = floor(((float2(x_51.x, x_51.y) / x_54) * 8.0f));
-  const int x_63 = ((int(x_57.x) * 8) + int(x_57.y));
-  x_65_phi = 0;
-  x_68_phi = x_63;
-  while (true) {
-    int x_79 = 0;
-    int x_80 = 0;
-    int x_69_phi = 0;
-    x_65 = x_65_phi;
-    const int x_68 = x_68_phi;
-    if ((x_68 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_68 & 1) == 1)) {
-      x_79 = ((3 * x_68) + 1);
-      x_69_phi = x_79;
-    } else {
-      x_80 = (x_68 / 2);
-      x_69_phi = x_80;
-    }
-    const int x_69 = x_69_phi;
-    {
-      x_65_phi = asint((x_65 + asint(1)));
-      x_68_phi = x_69;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_83 = indexable[asint((x_65 % 16))];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.msl
deleted file mode 100644
index 30ff268..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.msl
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int x_65 = 0;
-  int x_65_phi = 0;
-  int x_68_phi = 0;
-  float4 const x_51 = *(tint_symbol_4);
-  float2 const x_54 = x_6.resolution;
-  float2 const x_57 = floor(((float2(x_51.x, x_51.y) / x_54) * 8.0f));
-  int const x_63 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_57.x)) * as_type<uint>(8)))) + as_type<uint>(int(x_57.y))));
-  x_65_phi = 0;
-  x_68_phi = x_63;
-  while (true) {
-    int x_79 = 0;
-    int x_80 = 0;
-    int x_69_phi = 0;
-    x_65 = x_65_phi;
-    int const x_68 = x_68_phi;
-    if ((x_68 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_68 & 1) == 1)) {
-      x_79 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(3) * as_type<uint>(x_68)))) + as_type<uint>(1)));
-      x_69_phi = x_79;
-    } else {
-      x_80 = (x_68 / 2);
-      x_69_phi = x_80;
-    }
-    int const x_69 = x_69_phi;
-    {
-      x_65_phi = as_type<int>(as_type<int>((as_type<uint>(x_65) + as_type<uint>(as_type<int>(1)))));
-      x_68_phi = x_69;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_83 = indexable.arr[as_type<int>((x_65 % 16))];
-  *(tint_symbol_5) = x_83;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.spvasm
deleted file mode 100644
index 4292706..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,192 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 123
-; Schema: 0
-               OpCapability Shader
-         %37 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_65 "x_65"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_68_phi "x_68_phi"
-               OpName %x_79 "x_79"
-               OpName %x_80 "x_80"
-               OpName %x_69_phi "x_69_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %88 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %89 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %90 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %92 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %94 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %95 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %96 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %97 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %98 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %99 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %100 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %101 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %102 = OpConstantComposite %_arr_v4float_uint_16 %86 %88 %89 %90 %91 %92 %93 %94 %86 %95 %96 %97 %98 %99 %100 %101
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_65 = OpVariable %_ptr_Function_int Function %28
-   %x_65_phi = OpVariable %_ptr_Function_int Function %28
-   %x_68_phi = OpVariable %_ptr_Function_int Function %28
-       %x_79 = OpVariable %_ptr_Function_int Function %28
-       %x_80 = OpVariable %_ptr_Function_int Function %28
-   %x_69_phi = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %34 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %35 = OpLoad %v2float %34
-         %38 = OpCompositeExtract %float %31 0
-         %39 = OpCompositeExtract %float %31 1
-         %40 = OpCompositeConstruct %v2float %38 %39
-         %41 = OpFDiv %v2float %40 %35
-         %43 = OpVectorTimesScalar %v2float %41 %float_8
-         %36 = OpExtInst %v2float %37 Floor %43
-         %45 = OpCompositeExtract %float %36 0
-         %44 = OpConvertFToS %int %45
-         %47 = OpIMul %int %44 %int_8
-         %49 = OpCompositeExtract %float %36 1
-         %48 = OpConvertFToS %int %49
-         %50 = OpIAdd %int %47 %48
-               OpStore %x_65_phi %int_0
-               OpStore %x_68_phi %50
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %59 = OpLoad %int %x_65_phi
-               OpStore %x_65 %59
-         %60 = OpLoad %int %x_68_phi
-         %62 = OpSGreaterThan %bool %60 %int_1
-               OpSelectionMerge %64 None
-               OpBranchConditional %62 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %53
-         %64 = OpLabel
-         %67 = OpBitwiseAnd %int %60 %int_1
-         %68 = OpIEqual %bool %67 %int_1
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %73 = OpIMul %int %int_3 %60
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %x_79 %74
-         %75 = OpLoad %int %x_79
-               OpStore %x_69_phi %75
-               OpBranch %69
-         %71 = OpLabel
-         %77 = OpSDiv %int %60 %int_2
-               OpStore %x_80 %77
-         %78 = OpLoad %int %x_80
-               OpStore %x_69_phi %78
-               OpBranch %69
-         %69 = OpLabel
-         %79 = OpLoad %int %x_69_phi
-               OpBranch %54
-         %54 = OpLabel
-         %81 = OpLoad %int %x_65
-         %82 = OpCopyObject %int %int_1
-         %83 = OpIAdd %int %81 %82
-         %80 = OpCopyObject %int %83
-               OpStore %x_65_phi %80
-               OpStore %x_68_phi %79
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %102
-        %104 = OpLoad %int %x_65
-        %106 = OpSMod %int %104 %int_16
-        %103 = OpCopyObject %int %106
-        %108 = OpAccessChain %_ptr_Function_v4float %indexable %103
-        %109 = OpLoad %v4float %108
-               OpStore %x_GLF_color %109
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %114 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %115 = OpFunctionCall %void %main_1
-        %116 = OpLoad %v4float %x_GLF_color
-        %117 = OpCompositeConstruct %main_out %116
-               OpReturnValue %117
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %119 = OpLabel
-        %121 = OpLoad %v4float %gl_FragCoord_param_1
-        %120 = OpFunctionCall %main_out %main_inner %121
-        %122 = OpCompositeExtract %v4float %120 0
-               OpStore %x_GLF_color_1_1 %122
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.wgsl
deleted file mode 100644
index 919b5ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_65 : i32;
-  var x_65_phi : i32;
-  var x_68_phi : i32;
-  let x_51 : vec4<f32> = gl_FragCoord;
-  let x_54 : vec2<f32> = x_6.resolution;
-  let x_57 : vec2<f32> = floor(((vec2<f32>(x_51.x, x_51.y) / x_54) * 8.0));
-  let x_63 : i32 = ((i32(x_57.x) * 8) + i32(x_57.y));
-  x_65_phi = 0;
-  x_68_phi = x_63;
-  loop {
-    var x_79 : i32;
-    var x_80 : i32;
-    var x_69_phi : i32;
-    x_65 = x_65_phi;
-    let x_68 : i32 = x_68_phi;
-    if ((x_68 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_68 & 1) == 1)) {
-      x_79 = ((3 * x_68) + 1);
-      x_69_phi = x_79;
-    } else {
-      x_80 = (x_68 / 2);
-      x_69_phi = x_80;
-    }
-    let x_69 : i32 = x_69_phi;
-
-    continuing {
-      x_65_phi = bitcast<i32>((x_65 + bitcast<i32>(1)));
-      x_68_phi = x_69;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_83 : vec4<f32> = indexable[bitcast<i32>((x_65 % 16))];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.hlsl
deleted file mode 100644
index 38242ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,70 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_65 = 0;
-  int x_65_phi = 0;
-  int x_68_phi = 0;
-  const float4 x_51 = gl_FragCoord;
-  const float2 x_54 = asfloat(x_6[0].xy);
-  const float2 x_57 = floor(((float2(x_51.x, x_51.y) / x_54) * 8.0f));
-  const int x_63 = ((int(x_57.x) * 8) + int(x_57.y));
-  x_65_phi = 0;
-  x_68_phi = x_63;
-  while (true) {
-    int x_79 = 0;
-    int x_80 = 0;
-    int x_69_phi = 0;
-    x_65 = x_65_phi;
-    const int x_68 = x_68_phi;
-    if ((x_68 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_68 & 1) == 1)) {
-      x_79 = ((3 * x_68) + 1);
-      x_69_phi = x_79;
-    } else {
-      x_80 = (x_68 / 2);
-      x_69_phi = x_80;
-    }
-    const int x_69 = x_69_phi;
-    {
-      x_65_phi = asint((x_65 + asint(1)));
-      x_68_phi = x_69;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_83 = indexable[asint((x_65 % 16))];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.msl
deleted file mode 100644
index 30ff268..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.msl
+++ /dev/null
@@ -1,73 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int x_65 = 0;
-  int x_65_phi = 0;
-  int x_68_phi = 0;
-  float4 const x_51 = *(tint_symbol_4);
-  float2 const x_54 = x_6.resolution;
-  float2 const x_57 = floor(((float2(x_51.x, x_51.y) / x_54) * 8.0f));
-  int const x_63 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_57.x)) * as_type<uint>(8)))) + as_type<uint>(int(x_57.y))));
-  x_65_phi = 0;
-  x_68_phi = x_63;
-  while (true) {
-    int x_79 = 0;
-    int x_80 = 0;
-    int x_69_phi = 0;
-    x_65 = x_65_phi;
-    int const x_68 = x_68_phi;
-    if ((x_68 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_68 & 1) == 1)) {
-      x_79 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(3) * as_type<uint>(x_68)))) + as_type<uint>(1)));
-      x_69_phi = x_79;
-    } else {
-      x_80 = (x_68 / 2);
-      x_69_phi = x_80;
-    }
-    int const x_69 = x_69_phi;
-    {
-      x_65_phi = as_type<int>(as_type<int>((as_type<uint>(x_65) + as_type<uint>(as_type<int>(1)))));
-      x_68_phi = x_69;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_83 = indexable.arr[as_type<int>((x_65 % 16))];
-  *(tint_symbol_5) = x_83;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.spvasm
deleted file mode 100644
index 4292706..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,192 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 123
-; Schema: 0
-               OpCapability Shader
-         %37 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_65 "x_65"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_68_phi "x_68_phi"
-               OpName %x_79 "x_79"
-               OpName %x_80 "x_80"
-               OpName %x_69_phi "x_69_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %88 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %89 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %90 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %92 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %94 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %95 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %96 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %97 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %98 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %99 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %100 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %101 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %102 = OpConstantComposite %_arr_v4float_uint_16 %86 %88 %89 %90 %91 %92 %93 %94 %86 %95 %96 %97 %98 %99 %100 %101
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %110 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_65 = OpVariable %_ptr_Function_int Function %28
-   %x_65_phi = OpVariable %_ptr_Function_int Function %28
-   %x_68_phi = OpVariable %_ptr_Function_int Function %28
-       %x_79 = OpVariable %_ptr_Function_int Function %28
-       %x_80 = OpVariable %_ptr_Function_int Function %28
-   %x_69_phi = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %34 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %35 = OpLoad %v2float %34
-         %38 = OpCompositeExtract %float %31 0
-         %39 = OpCompositeExtract %float %31 1
-         %40 = OpCompositeConstruct %v2float %38 %39
-         %41 = OpFDiv %v2float %40 %35
-         %43 = OpVectorTimesScalar %v2float %41 %float_8
-         %36 = OpExtInst %v2float %37 Floor %43
-         %45 = OpCompositeExtract %float %36 0
-         %44 = OpConvertFToS %int %45
-         %47 = OpIMul %int %44 %int_8
-         %49 = OpCompositeExtract %float %36 1
-         %48 = OpConvertFToS %int %49
-         %50 = OpIAdd %int %47 %48
-               OpStore %x_65_phi %int_0
-               OpStore %x_68_phi %50
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %59 = OpLoad %int %x_65_phi
-               OpStore %x_65 %59
-         %60 = OpLoad %int %x_68_phi
-         %62 = OpSGreaterThan %bool %60 %int_1
-               OpSelectionMerge %64 None
-               OpBranchConditional %62 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %53
-         %64 = OpLabel
-         %67 = OpBitwiseAnd %int %60 %int_1
-         %68 = OpIEqual %bool %67 %int_1
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %73 = OpIMul %int %int_3 %60
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %x_79 %74
-         %75 = OpLoad %int %x_79
-               OpStore %x_69_phi %75
-               OpBranch %69
-         %71 = OpLabel
-         %77 = OpSDiv %int %60 %int_2
-               OpStore %x_80 %77
-         %78 = OpLoad %int %x_80
-               OpStore %x_69_phi %78
-               OpBranch %69
-         %69 = OpLabel
-         %79 = OpLoad %int %x_69_phi
-               OpBranch %54
-         %54 = OpLabel
-         %81 = OpLoad %int %x_65
-         %82 = OpCopyObject %int %int_1
-         %83 = OpIAdd %int %81 %82
-         %80 = OpCopyObject %int %83
-               OpStore %x_65_phi %80
-               OpStore %x_68_phi %79
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %102
-        %104 = OpLoad %int %x_65
-        %106 = OpSMod %int %104 %int_16
-        %103 = OpCopyObject %int %106
-        %108 = OpAccessChain %_ptr_Function_v4float %indexable %103
-        %109 = OpLoad %v4float %108
-               OpStore %x_GLF_color %109
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %110
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %114 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %115 = OpFunctionCall %void %main_1
-        %116 = OpLoad %v4float %x_GLF_color
-        %117 = OpCompositeConstruct %main_out %116
-               OpReturnValue %117
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %119 = OpLabel
-        %121 = OpLoad %v4float %gl_FragCoord_param_1
-        %120 = OpFunctionCall %main_out %main_inner %121
-        %122 = OpCompositeExtract %v4float %120 0
-               OpStore %x_GLF_color_1_1 %122
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.wgsl
deleted file mode 100644
index 919b5ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,63 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_65 : i32;
-  var x_65_phi : i32;
-  var x_68_phi : i32;
-  let x_51 : vec4<f32> = gl_FragCoord;
-  let x_54 : vec2<f32> = x_6.resolution;
-  let x_57 : vec2<f32> = floor(((vec2<f32>(x_51.x, x_51.y) / x_54) * 8.0));
-  let x_63 : i32 = ((i32(x_57.x) * 8) + i32(x_57.y));
-  x_65_phi = 0;
-  x_68_phi = x_63;
-  loop {
-    var x_79 : i32;
-    var x_80 : i32;
-    var x_69_phi : i32;
-    x_65 = x_65_phi;
-    let x_68 : i32 = x_68_phi;
-    if ((x_68 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_68 & 1) == 1)) {
-      x_79 = ((3 * x_68) + 1);
-      x_69_phi = x_79;
-    } else {
-      x_80 = (x_68 / 2);
-      x_69_phi = x_80;
-    }
-    let x_69 : i32 = x_69_phi;
-
-    continuing {
-      x_65_phi = bitcast<i32>((x_65 + bitcast<i32>(1)));
-      x_68_phi = x_69;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_83 : vec4<f32> = indexable[bitcast<i32>((x_65 % 16))];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.hlsl
deleted file mode 100644
index 092c154..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_71 = 0;
-  int x_71_phi = 0;
-  int x_74_phi = 0;
-  const float4 x_54 = gl_FragCoord;
-  const float2 x_55 = float2(x_54.x, x_54.y);
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_61 = ((x_55 / x_58) * 8.0f);
-  const float2 x_62 = floor(x_61);
-  const int x_69 = ((int(x_62.x) * 8) + int(x_62.y));
-  x_71_phi = 0;
-  x_74_phi = x_69;
-  while (true) {
-    int x_85 = 0;
-    int x_86 = 0;
-    int x_75_phi = 0;
-    x_71 = x_71_phi;
-    const int x_74 = x_74_phi;
-    if ((x_74 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_74 & 1) == 1)) {
-      x_85 = ((3 * x_74) + 1);
-      x_75_phi = x_85;
-    } else {
-      x_86 = (x_74 / 2);
-      x_75_phi = x_86;
-    }
-    const int x_75 = x_75_phi;
-    {
-      x_71_phi = asint((x_71 + asint(1)));
-      x_74_phi = x_75;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_88[16] = indexable;
-  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  indexable = tint_symbol_5;
-  indexable = x_88;
-  const float4 tint_symbol_6[16] = {float4(0.0f, 0.0f, 0.5f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), x_54, float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f)};
-  const float4 x_89 = tint_symbol_6[1u];
-  const float4 x_90[16] = {float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 8.0f, x_55), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(x_61, 0.5f, 1.0f)};
-  const float4 x_92 = indexable[asint((x_71 % 16))];
-  x_GLF_color = x_92;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.msl
deleted file mode 100644
index 1ff5bff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.msl
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper indexable = {};
-  int x_71 = 0;
-  int x_71_phi = 0;
-  int x_74_phi = 0;
-  float4 const x_54 = *(tint_symbol_6);
-  float2 const x_55 = float2(x_54.x, x_54.y);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_61 = ((x_55 / x_58) * 8.0f);
-  float2 const x_62 = floor(x_61);
-  int const x_69 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_62.x)) * as_type<uint>(8)))) + as_type<uint>(int(x_62.y))));
-  x_71_phi = 0;
-  x_74_phi = x_69;
-  while (true) {
-    int x_85 = 0;
-    int x_86 = 0;
-    int x_75_phi = 0;
-    x_71 = x_71_phi;
-    int const x_74 = x_74_phi;
-    if ((x_74 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_74 & 1) == 1)) {
-      x_85 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(3) * as_type<uint>(x_74)))) + as_type<uint>(1)));
-      x_75_phi = x_85;
-    } else {
-      x_86 = (x_74 / 2);
-      x_75_phi = x_86;
-    }
-    int const x_75 = x_75_phi;
-    {
-      x_71_phi = as_type<int>(as_type<int>((as_type<uint>(x_71) + as_type<uint>(as_type<int>(1)))));
-      x_74_phi = x_75;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  tint_array_wrapper const x_88 = indexable;
-  tint_array_wrapper const tint_symbol_3 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  indexable = tint_symbol_3;
-  indexable = x_88;
-  tint_array_wrapper const tint_symbol_4 = {.arr={float4(0.0f, 0.0f, 0.5f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), x_54, float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f)}};
-  float4 const x_89 = tint_symbol_4.arr[1u];
-  tint_array_wrapper const x_90 = {.arr={float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 8.0f, x_55), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(x_61, 0.5f, 1.0f)}};
-  float4 const x_92 = indexable.arr[as_type<int>((x_71 % 16))];
-  *(tint_symbol_7) = x_92;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.spvasm
deleted file mode 100644
index be911ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,207 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 136
-; Schema: 0
-               OpCapability Shader
-         %43 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_71 "x_71"
-               OpName %x_71_phi "x_71_phi"
-               OpName %x_74_phi "x_74_phi"
-               OpName %x_85 "x_85"
-               OpName %x_86 "x_86"
-               OpName %x_75_phi "x_75_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %88 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %89 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %90 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %92 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %94 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %95 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %96 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %97 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %98 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %99 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %100 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %101 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %102 = OpConstantComposite %_arr_v4float_uint_16 %86 %88 %89 %90 %91 %92 %93 %94 %86 %95 %96 %97 %98 %99 %100 %101
-        %104 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %105 = OpConstantComposite %_arr_v4float_uint_16 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104
-     %uint_1 = OpConstant %uint 1
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %123 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_71 = OpVariable %_ptr_Function_int Function %28
-   %x_71_phi = OpVariable %_ptr_Function_int Function %28
-   %x_74_phi = OpVariable %_ptr_Function_int Function %28
-       %x_85 = OpVariable %_ptr_Function_int Function %28
-       %x_86 = OpVariable %_ptr_Function_int Function %28
-   %x_75_phi = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %32 = OpCompositeExtract %float %31 0
-         %33 = OpCompositeExtract %float %31 1
-         %34 = OpCompositeConstruct %v2float %32 %33
-         %37 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %38 = OpLoad %v2float %37
-         %39 = OpFDiv %v2float %34 %38
-         %41 = OpVectorTimesScalar %v2float %39 %float_8
-         %42 = OpExtInst %v2float %43 Floor %41
-         %45 = OpCompositeExtract %float %42 0
-         %44 = OpConvertFToS %int %45
-         %47 = OpIMul %int %44 %int_8
-         %49 = OpCompositeExtract %float %42 1
-         %48 = OpConvertFToS %int %49
-         %50 = OpIAdd %int %47 %48
-               OpStore %x_71_phi %int_0
-               OpStore %x_74_phi %50
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %59 = OpLoad %int %x_71_phi
-               OpStore %x_71 %59
-         %60 = OpLoad %int %x_74_phi
-         %62 = OpSGreaterThan %bool %60 %int_1
-               OpSelectionMerge %64 None
-               OpBranchConditional %62 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %53
-         %64 = OpLabel
-         %67 = OpBitwiseAnd %int %60 %int_1
-         %68 = OpIEqual %bool %67 %int_1
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %73 = OpIMul %int %int_3 %60
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %x_85 %74
-         %75 = OpLoad %int %x_85
-               OpStore %x_75_phi %75
-               OpBranch %69
-         %71 = OpLabel
-         %77 = OpSDiv %int %60 %int_2
-               OpStore %x_86 %77
-         %78 = OpLoad %int %x_86
-               OpStore %x_75_phi %78
-               OpBranch %69
-         %69 = OpLabel
-         %79 = OpLoad %int %x_75_phi
-               OpBranch %54
-         %54 = OpLabel
-         %81 = OpLoad %int %x_71
-         %82 = OpCopyObject %int %int_1
-         %83 = OpIAdd %int %81 %82
-         %80 = OpCopyObject %int %83
-               OpStore %x_71_phi %80
-               OpStore %x_74_phi %79
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %102
-        %103 = OpLoad %_arr_v4float_uint_16 %indexable
-               OpStore %indexable %105
-               OpStore %indexable %103
-        %106 = OpCompositeConstruct %_arr_v4float_uint_16 %91 %99 %93 %100 %101 %93 %93 %92 %97 %31 %91 %90 %89 %88 %96 %95
-        %108 = OpCompositeExtract %v4float %106 1
-        %109 = OpCompositeExtract %float %34 0
-        %110 = OpCompositeExtract %float %34 1
-        %111 = OpCompositeConstruct %v4float %float_0 %float_8 %109 %110
-        %112 = OpCompositeExtract %float %41 0
-        %113 = OpCompositeExtract %float %41 1
-        %114 = OpCompositeConstruct %v4float %112 %113 %float_0_5 %float_1
-        %115 = OpCompositeConstruct %_arr_v4float_uint_16 %92 %92 %96 %86 %92 %94 %99 %86 %96 %111 %91 %93 %92 %97 %99 %114
-        %117 = OpLoad %int %x_71
-        %119 = OpSMod %int %117 %int_16
-        %116 = OpCopyObject %int %119
-        %121 = OpAccessChain %_ptr_Function_v4float %indexable %116
-        %122 = OpLoad %v4float %121
-               OpStore %x_GLF_color %122
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %123
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %127 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %128 = OpFunctionCall %void %main_1
-        %129 = OpLoad %v4float %x_GLF_color
-        %130 = OpCompositeConstruct %main_out %129
-               OpReturnValue %130
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %132 = OpLabel
-        %134 = OpLoad %v4float %gl_FragCoord_param_1
-        %133 = OpFunctionCall %main_out %main_inner %134
-        %135 = OpCompositeExtract %v4float %133 0
-               OpStore %x_GLF_color_1_1 %135
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.wgsl
deleted file mode 100644
index 872479c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,70 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_71 : i32;
-  var x_71_phi : i32;
-  var x_74_phi : i32;
-  let x_54 : vec4<f32> = gl_FragCoord;
-  let x_55 : vec2<f32> = vec2<f32>(x_54.x, x_54.y);
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_61 : vec2<f32> = ((x_55 / x_58) * 8.0);
-  let x_62 : vec2<f32> = floor(x_61);
-  let x_69 : i32 = ((i32(x_62.x) * 8) + i32(x_62.y));
-  x_71_phi = 0;
-  x_74_phi = x_69;
-  loop {
-    var x_85 : i32;
-    var x_86 : i32;
-    var x_75_phi : i32;
-    x_71 = x_71_phi;
-    let x_74 : i32 = x_74_phi;
-    if ((x_74 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_74 & 1) == 1)) {
-      x_85 = ((3 * x_74) + 1);
-      x_75_phi = x_85;
-    } else {
-      x_86 = (x_74 / 2);
-      x_75_phi = x_86;
-    }
-    let x_75 : i32 = x_75_phi;
-
-    continuing {
-      x_71_phi = bitcast<i32>((x_71 + bitcast<i32>(1)));
-      x_74_phi = x_75;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_88 : array<vec4<f32>, 16> = indexable;
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  indexable = x_88;
-  let x_89 : vec4<f32> = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), x_54, vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0))[1u];
-  let x_90 : array<vec4<f32>, 16> = array<vec4<f32>, 16>(vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 8.0, x_55), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(x_61, 0.5, 1.0));
-  let x_92 : vec4<f32> = indexable[bitcast<i32>((x_71 % 16))];
-  x_GLF_color = x_92;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.hlsl
deleted file mode 100644
index 092c154..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int x_71 = 0;
-  int x_71_phi = 0;
-  int x_74_phi = 0;
-  const float4 x_54 = gl_FragCoord;
-  const float2 x_55 = float2(x_54.x, x_54.y);
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_61 = ((x_55 / x_58) * 8.0f);
-  const float2 x_62 = floor(x_61);
-  const int x_69 = ((int(x_62.x) * 8) + int(x_62.y));
-  x_71_phi = 0;
-  x_74_phi = x_69;
-  while (true) {
-    int x_85 = 0;
-    int x_86 = 0;
-    int x_75_phi = 0;
-    x_71 = x_71_phi;
-    const int x_74 = x_74_phi;
-    if ((x_74 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_74 & 1) == 1)) {
-      x_85 = ((3 * x_74) + 1);
-      x_75_phi = x_85;
-    } else {
-      x_86 = (x_74 / 2);
-      x_75_phi = x_86;
-    }
-    const int x_75 = x_75_phi;
-    {
-      x_71_phi = asint((x_71 + asint(1)));
-      x_74_phi = x_75;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_88[16] = indexable;
-  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  indexable = tint_symbol_5;
-  indexable = x_88;
-  const float4 tint_symbol_6[16] = {float4(0.0f, 0.0f, 0.5f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), x_54, float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f)};
-  const float4 x_89 = tint_symbol_6[1u];
-  const float4 x_90[16] = {float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 8.0f, x_55), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(x_61, 0.5f, 1.0f)};
-  const float4 x_92 = indexable[asint((x_71 % 16))];
-  x_GLF_color = x_92;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.msl
deleted file mode 100644
index 1ff5bff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.msl
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper indexable = {};
-  int x_71 = 0;
-  int x_71_phi = 0;
-  int x_74_phi = 0;
-  float4 const x_54 = *(tint_symbol_6);
-  float2 const x_55 = float2(x_54.x, x_54.y);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_61 = ((x_55 / x_58) * 8.0f);
-  float2 const x_62 = floor(x_61);
-  int const x_69 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_62.x)) * as_type<uint>(8)))) + as_type<uint>(int(x_62.y))));
-  x_71_phi = 0;
-  x_74_phi = x_69;
-  while (true) {
-    int x_85 = 0;
-    int x_86 = 0;
-    int x_75_phi = 0;
-    x_71 = x_71_phi;
-    int const x_74 = x_74_phi;
-    if ((x_74 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_74 & 1) == 1)) {
-      x_85 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(3) * as_type<uint>(x_74)))) + as_type<uint>(1)));
-      x_75_phi = x_85;
-    } else {
-      x_86 = (x_74 / 2);
-      x_75_phi = x_86;
-    }
-    int const x_75 = x_75_phi;
-    {
-      x_71_phi = as_type<int>(as_type<int>((as_type<uint>(x_71) + as_type<uint>(as_type<int>(1)))));
-      x_74_phi = x_75;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  tint_array_wrapper const x_88 = indexable;
-  tint_array_wrapper const tint_symbol_3 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  indexable = tint_symbol_3;
-  indexable = x_88;
-  tint_array_wrapper const tint_symbol_4 = {.arr={float4(0.0f, 0.0f, 0.5f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), x_54, float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f)}};
-  float4 const x_89 = tint_symbol_4.arr[1u];
-  tint_array_wrapper const x_90 = {.arr={float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 8.0f, x_55), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(x_61, 0.5f, 1.0f)}};
-  float4 const x_92 = indexable.arr[as_type<int>((x_71 % 16))];
-  *(tint_symbol_7) = x_92;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.spvasm
deleted file mode 100644
index be911ea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,207 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 136
-; Schema: 0
-               OpCapability Shader
-         %43 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_71 "x_71"
-               OpName %x_71_phi "x_71_phi"
-               OpName %x_74_phi "x_74_phi"
-               OpName %x_85 "x_85"
-               OpName %x_86 "x_86"
-               OpName %x_75_phi "x_75_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %28 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-         %86 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-         %88 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-         %89 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-         %90 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-         %91 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-         %92 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-         %93 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-         %94 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-         %95 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %96 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-         %97 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-         %98 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-         %99 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %100 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %101 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %102 = OpConstantComposite %_arr_v4float_uint_16 %86 %88 %89 %90 %91 %92 %93 %94 %86 %95 %96 %97 %98 %99 %100 %101
-        %104 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %105 = OpConstantComposite %_arr_v4float_uint_16 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104 %104
-     %uint_1 = OpConstant %uint 1
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %123 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_71 = OpVariable %_ptr_Function_int Function %28
-   %x_71_phi = OpVariable %_ptr_Function_int Function %28
-   %x_74_phi = OpVariable %_ptr_Function_int Function %28
-       %x_85 = OpVariable %_ptr_Function_int Function %28
-       %x_86 = OpVariable %_ptr_Function_int Function %28
-   %x_75_phi = OpVariable %_ptr_Function_int Function %28
-         %31 = OpLoad %v4float %gl_FragCoord
-         %32 = OpCompositeExtract %float %31 0
-         %33 = OpCompositeExtract %float %31 1
-         %34 = OpCompositeConstruct %v2float %32 %33
-         %37 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %38 = OpLoad %v2float %37
-         %39 = OpFDiv %v2float %34 %38
-         %41 = OpVectorTimesScalar %v2float %39 %float_8
-         %42 = OpExtInst %v2float %43 Floor %41
-         %45 = OpCompositeExtract %float %42 0
-         %44 = OpConvertFToS %int %45
-         %47 = OpIMul %int %44 %int_8
-         %49 = OpCompositeExtract %float %42 1
-         %48 = OpConvertFToS %int %49
-         %50 = OpIAdd %int %47 %48
-               OpStore %x_71_phi %int_0
-               OpStore %x_74_phi %50
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %59 = OpLoad %int %x_71_phi
-               OpStore %x_71 %59
-         %60 = OpLoad %int %x_74_phi
-         %62 = OpSGreaterThan %bool %60 %int_1
-               OpSelectionMerge %64 None
-               OpBranchConditional %62 %65 %66
-         %65 = OpLabel
-               OpBranch %64
-         %66 = OpLabel
-               OpBranch %53
-         %64 = OpLabel
-         %67 = OpBitwiseAnd %int %60 %int_1
-         %68 = OpIEqual %bool %67 %int_1
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %73 = OpIMul %int %int_3 %60
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %x_85 %74
-         %75 = OpLoad %int %x_85
-               OpStore %x_75_phi %75
-               OpBranch %69
-         %71 = OpLabel
-         %77 = OpSDiv %int %60 %int_2
-               OpStore %x_86 %77
-         %78 = OpLoad %int %x_86
-               OpStore %x_75_phi %78
-               OpBranch %69
-         %69 = OpLabel
-         %79 = OpLoad %int %x_75_phi
-               OpBranch %54
-         %54 = OpLabel
-         %81 = OpLoad %int %x_71
-         %82 = OpCopyObject %int %int_1
-         %83 = OpIAdd %int %81 %82
-         %80 = OpCopyObject %int %83
-               OpStore %x_71_phi %80
-               OpStore %x_74_phi %79
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %indexable %102
-        %103 = OpLoad %_arr_v4float_uint_16 %indexable
-               OpStore %indexable %105
-               OpStore %indexable %103
-        %106 = OpCompositeConstruct %_arr_v4float_uint_16 %91 %99 %93 %100 %101 %93 %93 %92 %97 %31 %91 %90 %89 %88 %96 %95
-        %108 = OpCompositeExtract %v4float %106 1
-        %109 = OpCompositeExtract %float %34 0
-        %110 = OpCompositeExtract %float %34 1
-        %111 = OpCompositeConstruct %v4float %float_0 %float_8 %109 %110
-        %112 = OpCompositeExtract %float %41 0
-        %113 = OpCompositeExtract %float %41 1
-        %114 = OpCompositeConstruct %v4float %112 %113 %float_0_5 %float_1
-        %115 = OpCompositeConstruct %_arr_v4float_uint_16 %92 %92 %96 %86 %92 %94 %99 %86 %96 %111 %91 %93 %92 %97 %99 %114
-        %117 = OpLoad %int %x_71
-        %119 = OpSMod %int %117 %int_16
-        %116 = OpCopyObject %int %119
-        %121 = OpAccessChain %_ptr_Function_v4float %indexable %116
-        %122 = OpLoad %v4float %121
-               OpStore %x_GLF_color %122
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %123
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %127 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %128 = OpFunctionCall %void %main_1
-        %129 = OpLoad %v4float %x_GLF_color
-        %130 = OpCompositeConstruct %main_out %129
-               OpReturnValue %130
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %132 = OpLabel
-        %134 = OpLoad %v4float %gl_FragCoord_param_1
-        %133 = OpFunctionCall %main_out %main_inner %134
-        %135 = OpCompositeExtract %v4float %133 0
-               OpStore %x_GLF_color_1_1 %135
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.wgsl
deleted file mode 100644
index 872479c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,70 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_71 : i32;
-  var x_71_phi : i32;
-  var x_74_phi : i32;
-  let x_54 : vec4<f32> = gl_FragCoord;
-  let x_55 : vec2<f32> = vec2<f32>(x_54.x, x_54.y);
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_61 : vec2<f32> = ((x_55 / x_58) * 8.0);
-  let x_62 : vec2<f32> = floor(x_61);
-  let x_69 : i32 = ((i32(x_62.x) * 8) + i32(x_62.y));
-  x_71_phi = 0;
-  x_74_phi = x_69;
-  loop {
-    var x_85 : i32;
-    var x_86 : i32;
-    var x_75_phi : i32;
-    x_71 = x_71_phi;
-    let x_74 : i32 = x_74_phi;
-    if ((x_74 > 1)) {
-    } else {
-      break;
-    }
-    if (((x_74 & 1) == 1)) {
-      x_85 = ((3 * x_74) + 1);
-      x_75_phi = x_85;
-    } else {
-      x_86 = (x_74 / 2);
-      x_75_phi = x_86;
-    }
-    let x_75 : i32 = x_75_phi;
-
-    continuing {
-      x_71_phi = bitcast<i32>((x_71 + bitcast<i32>(1)));
-      x_74_phi = x_75;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_88 : array<vec4<f32>, 16> = indexable;
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  indexable = x_88;
-  let x_89 : vec4<f32> = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), x_54, vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0))[1u];
-  let x_90 : array<vec4<f32>, 16> = array<vec4<f32>, 16>(vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 8.0, x_55), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(x_61, 0.5, 1.0));
-  let x_92 : vec4<f32> = indexable[bitcast<i32>((x_71 % 16))];
-  x_GLF_color = x_92;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.hlsl
deleted file mode 100644
index ff80e2f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,207 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float x_51 = 0.0f;
-  float x_55 = 0.0f;
-  float x_56 = 0.0f;
-  float x_81 = 0.0f;
-  float x_82 = 0.0f;
-  float x_118 = 0.0f;
-  float x_119 = 0.0f;
-  float x_55_phi = 0.0f;
-  int x_58_phi = 0;
-  float x_81_phi = 0.0f;
-  float x_82_phi = 0.0f;
-  bool x_83_phi = false;
-  float x_85_phi = 0.0f;
-  float x_122_phi = 0.0f;
-  int x_129_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_47 = asfloat(x_7[0].x);
-  const float x_49 = round((x_47 * 0.125f));
-  x_51 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5f;
-      x_58_phi = 1;
-      while (true) {
-        float x_68 = 0.0f;
-        float x_76 = 0.0f;
-        int x_59 = 0;
-        float x_56_phi = 0.0f;
-        x_55 = x_55_phi;
-        const int x_58 = x_58_phi;
-        x_81_phi = 0.0f;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        float x_75 = 0.0f;
-        float x_76_phi = 0.0f;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006f);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((float(x_58) - (round(x_49) * floor((float(x_58) / round(x_49))))) <= 0.01f)) {
-            x_75 = (x_55 + 100.0f);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((float(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-        {
-          x_59 = (x_58 + 1);
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      const bool x_83 = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-      break;
-    }
-  }
-  float x_88 = 0.0f;
-  float x_92 = 0.0f;
-  float x_93 = 0.0f;
-  float x_92_phi = 0.0f;
-  int x_95_phi = 0;
-  float x_118_phi = 0.0f;
-  float x_119_phi = 0.0f;
-  bool x_120_phi = false;
-  const float x_85 = x_85_phi;
-  c.x = x_85;
-  x_88 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5f;
-      x_95_phi = 1;
-      while (true) {
-        float x_113 = 0.0f;
-        float x_112 = 0.0f;
-        int x_96 = 0;
-        float x_93_phi = 0.0f;
-        x_92 = x_92_phi;
-        const int x_95 = x_95_phi;
-        x_118_phi = 0.0f;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        float x_111 = 0.0f;
-        float x_112_phi = 0.0f;
-        if (((x_95 % 32) == 0)) {
-          x_113 = (x_92 + 0.400000006f);
-          x_93_phi = x_113;
-        } else {
-          x_112_phi = x_92;
-          if (((float(x_95) - (round(x_49) * floor((float(x_95) / round(x_49))))) <= 0.01f)) {
-            x_111 = (x_92 + 100.0f);
-            x_112_phi = x_111;
-          }
-          x_112 = x_112_phi;
-          x_93_phi = x_112;
-        }
-        x_93 = x_93_phi;
-        if ((float(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-        {
-          x_96 = (x_95 + 1);
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      const bool x_120 = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-      break;
-    }
-  }
-  const float x_122 = x_122_phi;
-  c.y = x_122;
-  const float x_124 = c.x;
-  const float x_125 = c.y;
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  while (true) {
-    int x_130 = 0;
-    const int x_129 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    const int x_135_save = x_129;
-    const float x_136 = c[x_135_save];
-    if ((x_136 >= 1.0f)) {
-      const float x_140 = c[x_135_save];
-      const float x_141 = c[x_135_save];
-      set_float3(c, x_135_save, (x_140 * x_141));
-    }
-    {
-      x_130 = (x_129 + 1);
-      x_129_phi = x_130;
-    }
-  }
-  const float3 x_145 = normalize(abs(c));
-  x_GLF_color = float4(x_145.x, x_145.y, x_145.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.msl
deleted file mode 100755
index 7e2be6e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float x_51 = 0.0f;
-  float x_55 = 0.0f;
-  float x_56 = 0.0f;
-  float x_81 = 0.0f;
-  float x_82 = 0.0f;
-  float x_118 = 0.0f;
-  float x_119 = 0.0f;
-  float x_55_phi = 0.0f;
-  int x_58_phi = 0;
-  float x_81_phi = 0.0f;
-  float x_82_phi = 0.0f;
-  bool x_83_phi = false;
-  float x_85_phi = 0.0f;
-  float x_122_phi = 0.0f;
-  int x_129_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_47 = x_7.resolution.x;
-  float const x_49 = rint((x_47 * 0.125f));
-  x_51 = (*(tint_symbol_3)).x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5f;
-      x_58_phi = 1;
-      while (true) {
-        float x_68 = 0.0f;
-        float x_76 = 0.0f;
-        int x_59 = 0;
-        float x_56_phi = 0.0f;
-        x_55 = x_55_phi;
-        int const x_58 = x_58_phi;
-        x_81_phi = 0.0f;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        float x_75 = 0.0f;
-        float x_76_phi = 0.0f;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006f);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((float(x_58) - (rint(x_49) * floor((float(x_58) / rint(x_49))))) <= 0.01f)) {
-            x_75 = (x_55 + 100.0f);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((float(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-        {
-          x_59 = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      bool const x_83 = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-      break;
-    }
-  }
-  float x_88 = 0.0f;
-  float x_92 = 0.0f;
-  float x_93 = 0.0f;
-  float x_92_phi = 0.0f;
-  int x_95_phi = 0;
-  float x_118_phi = 0.0f;
-  float x_119_phi = 0.0f;
-  bool x_120_phi = false;
-  float const x_85 = x_85_phi;
-  c.x = x_85;
-  x_88 = (*(tint_symbol_3)).y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5f;
-      x_95_phi = 1;
-      while (true) {
-        float x_113 = 0.0f;
-        float x_112 = 0.0f;
-        int x_96 = 0;
-        float x_93_phi = 0.0f;
-        x_92 = x_92_phi;
-        int const x_95 = x_95_phi;
-        x_118_phi = 0.0f;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        float x_111 = 0.0f;
-        float x_112_phi = 0.0f;
-        if (((x_95 % 32) == 0)) {
-          x_113 = (x_92 + 0.400000006f);
-          x_93_phi = x_113;
-        } else {
-          x_112_phi = x_92;
-          if (((float(x_95) - (rint(x_49) * floor((float(x_95) / rint(x_49))))) <= 0.01f)) {
-            x_111 = (x_92 + 100.0f);
-            x_112_phi = x_111;
-          }
-          x_112 = x_112_phi;
-          x_93_phi = x_112;
-        }
-        x_93 = x_93_phi;
-        if ((float(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-        {
-          x_96 = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      bool const x_120 = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-      break;
-    }
-  }
-  float const x_122 = x_122_phi;
-  c.y = x_122;
-  float const x_124 = c.x;
-  float const x_125 = c.y;
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  while (true) {
-    int x_130 = 0;
-    int const x_129 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    int const x_135_save = x_129;
-    float const x_136 = c[x_135_save];
-    if ((x_136 >= 1.0f)) {
-      float const x_140 = c[x_135_save];
-      float const x_141 = c[x_135_save];
-      c[x_135_save] = (x_140 * x_141);
-    }
-    {
-      x_130 = as_type<int>((as_type<uint>(x_129) + as_type<uint>(1)));
-      x_129_phi = x_130;
-    }
-  }
-  float3 const x_143 = c;
-  float3 const x_145 = normalize(fabs(x_143));
-  *(tint_symbol_4) = float4(x_145.x, x_145.y, x_145.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.spvasm
deleted file mode 100644
index f873f32..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,459 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 264
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %x_51 "x_51"
-               OpName %x_55 "x_55"
-               OpName %x_56 "x_56"
-               OpName %x_81 "x_81"
-               OpName %x_82 "x_82"
-               OpName %x_118 "x_118"
-               OpName %x_119 "x_119"
-               OpName %x_55_phi "x_55_phi"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_81_phi "x_81_phi"
-               OpName %x_82_phi "x_82_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_85_phi "x_85_phi"
-               OpName %x_122_phi "x_122_phi"
-               OpName %x_129_phi "x_129_phi"
-               OpName %x_68 "x_68"
-               OpName %x_76 "x_76"
-               OpName %x_59 "x_59"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_75 "x_75"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_88 "x_88"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_120_phi "x_120_phi"
-               OpName %x_113 "x_113"
-               OpName %x_112 "x_112"
-               OpName %x_96 "x_96"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_111 "x_111"
-               OpName %x_112_phi "x_112_phi"
-               OpName %x_130 "x_130"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %22 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %49 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-    %int_800 = OpConstant %int 800
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %251 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %22
-       %x_51 = OpVariable %_ptr_Function_float Function %25
-       %x_55 = OpVariable %_ptr_Function_float Function %25
-       %x_56 = OpVariable %_ptr_Function_float Function %25
-       %x_81 = OpVariable %_ptr_Function_float Function %25
-       %x_82 = OpVariable %_ptr_Function_float Function %25
-      %x_118 = OpVariable %_ptr_Function_float Function %25
-      %x_119 = OpVariable %_ptr_Function_float Function %25
-   %x_55_phi = OpVariable %_ptr_Function_float Function %25
-   %x_58_phi = OpVariable %_ptr_Function_int Function %36
-   %x_81_phi = OpVariable %_ptr_Function_float Function %25
-   %x_82_phi = OpVariable %_ptr_Function_float Function %25
-   %x_83_phi = OpVariable %_ptr_Function_bool Function %42
-   %x_85_phi = OpVariable %_ptr_Function_float Function %25
-  %x_122_phi = OpVariable %_ptr_Function_float Function %25
-  %x_129_phi = OpVariable %_ptr_Function_int Function %36
-       %x_68 = OpVariable %_ptr_Function_float Function %25
-       %x_76 = OpVariable %_ptr_Function_float Function %25
-       %x_59 = OpVariable %_ptr_Function_int Function %36
-   %x_56_phi = OpVariable %_ptr_Function_float Function %25
-       %x_75 = OpVariable %_ptr_Function_float Function %25
-   %x_76_phi = OpVariable %_ptr_Function_float Function %25
-       %x_88 = OpVariable %_ptr_Function_float Function %25
-       %x_92 = OpVariable %_ptr_Function_float Function %25
-       %x_93 = OpVariable %_ptr_Function_float Function %25
-   %x_92_phi = OpVariable %_ptr_Function_float Function %25
-   %x_95_phi = OpVariable %_ptr_Function_int Function %36
-  %x_118_phi = OpVariable %_ptr_Function_float Function %25
-  %x_119_phi = OpVariable %_ptr_Function_float Function %25
-  %x_120_phi = OpVariable %_ptr_Function_bool Function %42
-      %x_113 = OpVariable %_ptr_Function_float Function %25
-      %x_112 = OpVariable %_ptr_Function_float Function %25
-       %x_96 = OpVariable %_ptr_Function_int Function %36
-   %x_93_phi = OpVariable %_ptr_Function_float Function %25
-      %x_111 = OpVariable %_ptr_Function_float Function %25
-  %x_112_phi = OpVariable %_ptr_Function_float Function %25
-      %x_130 = OpVariable %_ptr_Function_int Function %36
-               OpStore %c %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %54 = OpLoad %float %53
-         %58 = OpFMul %float %54 %float_0_125
-         %55 = OpExtInst %float %56 RoundEven %58
-         %60 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %61 = OpLoad %float %60
-               OpStore %x_51 %61
-               OpSelectionMerge %62 None
-               OpSwitch %uint_0 %63
-         %63 = OpLabel
-               OpStore %x_55_phi %float_n0_5
-               OpStore %x_58_phi %int_1
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-         %74 = OpLoad %float %x_55_phi
-               OpStore %x_55 %74
-         %75 = OpLoad %int %x_58_phi
-               OpStore %x_81_phi %float_0
-         %77 = OpLoad %float %x_55
-               OpStore %x_82_phi %77
-               OpStore %x_83_phi %false
-         %80 = OpSLessThan %bool %75 %int_800
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %67
-         %81 = OpLabel
-         %87 = OpSMod %int %75 %int_32
-         %89 = OpIEqual %bool %87 %int_0
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-         %93 = OpLoad %float %x_55
-         %95 = OpFAdd %float %93 %float_0_400000006
-               OpStore %x_68 %95
-         %96 = OpLoad %float %x_68
-               OpStore %x_56_phi %96
-               OpBranch %90
-         %92 = OpLabel
-         %97 = OpLoad %float %x_55
-               OpStore %x_76_phi %97
-         %98 = OpConvertSToF %float %75
-         %99 = OpExtInst %float %56 RoundEven %55
-        %101 = OpConvertSToF %float %75
-        %102 = OpExtInst %float %56 RoundEven %55
-        %103 = OpFDiv %float %101 %102
-        %100 = OpExtInst %float %56 Floor %103
-        %104 = OpFMul %float %99 %100
-        %105 = OpFSub %float %98 %104
-        %107 = OpFOrdLessThanEqual %bool %105 %float_0_00999999978
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %108
-        %109 = OpLabel
-        %110 = OpLoad %float %x_55
-        %112 = OpFAdd %float %110 %float_100
-               OpStore %x_75 %112
-        %113 = OpLoad %float %x_75
-               OpStore %x_76_phi %113
-               OpBranch %108
-        %108 = OpLabel
-        %114 = OpLoad %float %x_76_phi
-               OpStore %x_76 %114
-        %115 = OpLoad %float %x_76
-               OpStore %x_56_phi %115
-               OpBranch %90
-         %90 = OpLabel
-        %116 = OpLoad %float %x_56_phi
-               OpStore %x_56 %116
-        %117 = OpConvertSToF %float %75
-        %118 = OpLoad %float %x_51
-        %119 = OpFOrdGreaterThanEqual %bool %117 %118
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %120
-        %121 = OpLabel
-        %122 = OpLoad %float %x_56
-               OpStore %x_81_phi %122
-        %123 = OpLoad %float %x_56
-               OpStore %x_82_phi %123
-               OpStore %x_83_phi %true
-               OpBranch %67
-        %120 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-        %125 = OpIAdd %int %75 %int_1
-               OpStore %x_59 %125
-        %126 = OpLoad %float %x_56
-               OpStore %x_55_phi %126
-        %127 = OpLoad %int %x_59
-               OpStore %x_58_phi %127
-               OpBranch %66
-         %67 = OpLabel
-        %128 = OpLoad %float %x_81_phi
-               OpStore %x_81 %128
-        %129 = OpLoad %float %x_82_phi
-               OpStore %x_82 %129
-        %130 = OpLoad %bool %x_83_phi
-        %131 = OpLoad %float %x_81
-               OpStore %x_85_phi %131
-               OpSelectionMerge %132 None
-               OpBranchConditional %130 %133 %132
-        %133 = OpLabel
-               OpBranch %62
-        %132 = OpLabel
-        %134 = OpLoad %float %x_82
-               OpStore %x_85_phi %134
-               OpBranch %62
-         %62 = OpLabel
-        %143 = OpLoad %float %x_85_phi
-        %144 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %144 %143
-        %146 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %147 = OpLoad %float %146
-               OpStore %x_88 %147
-               OpSelectionMerge %148 None
-               OpSwitch %uint_0 %149
-        %149 = OpLabel
-               OpStore %x_92_phi %float_n0_5
-               OpStore %x_95_phi %int_1
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %158 = OpLoad %float %x_92_phi
-               OpStore %x_92 %158
-        %159 = OpLoad %int %x_95_phi
-               OpStore %x_118_phi %float_0
-        %160 = OpLoad %float %x_92
-               OpStore %x_119_phi %160
-               OpStore %x_120_phi %false
-        %161 = OpSLessThan %bool %159 %int_800
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %164
-        %163 = OpLabel
-               OpBranch %162
-        %164 = OpLabel
-               OpBranch %151
-        %162 = OpLabel
-        %167 = OpSMod %int %159 %int_32
-        %168 = OpIEqual %bool %167 %int_0
-               OpSelectionMerge %169 None
-               OpBranchConditional %168 %170 %171
-        %170 = OpLabel
-        %172 = OpLoad %float %x_92
-        %173 = OpFAdd %float %172 %float_0_400000006
-               OpStore %x_113 %173
-        %174 = OpLoad %float %x_113
-               OpStore %x_93_phi %174
-               OpBranch %169
-        %171 = OpLabel
-        %175 = OpLoad %float %x_92
-               OpStore %x_112_phi %175
-        %176 = OpConvertSToF %float %159
-        %177 = OpExtInst %float %56 RoundEven %55
-        %179 = OpConvertSToF %float %159
-        %180 = OpExtInst %float %56 RoundEven %55
-        %181 = OpFDiv %float %179 %180
-        %178 = OpExtInst %float %56 Floor %181
-        %182 = OpFMul %float %177 %178
-        %183 = OpFSub %float %176 %182
-        %184 = OpFOrdLessThanEqual %bool %183 %float_0_00999999978
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %185
-        %186 = OpLabel
-        %187 = OpLoad %float %x_92
-        %188 = OpFAdd %float %187 %float_100
-               OpStore %x_111 %188
-        %189 = OpLoad %float %x_111
-               OpStore %x_112_phi %189
-               OpBranch %185
-        %185 = OpLabel
-        %190 = OpLoad %float %x_112_phi
-               OpStore %x_112 %190
-        %191 = OpLoad %float %x_112
-               OpStore %x_93_phi %191
-               OpBranch %169
-        %169 = OpLabel
-        %192 = OpLoad %float %x_93_phi
-               OpStore %x_93 %192
-        %193 = OpConvertSToF %float %159
-        %194 = OpLoad %float %x_88
-        %195 = OpFOrdGreaterThanEqual %bool %193 %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %196
-        %197 = OpLabel
-        %198 = OpLoad %float %x_93
-               OpStore %x_118_phi %198
-        %199 = OpLoad %float %x_93
-               OpStore %x_119_phi %199
-               OpStore %x_120_phi %true
-               OpBranch %151
-        %196 = OpLabel
-               OpBranch %152
-        %152 = OpLabel
-        %200 = OpIAdd %int %159 %int_1
-               OpStore %x_96 %200
-        %201 = OpLoad %float %x_93
-               OpStore %x_92_phi %201
-        %202 = OpLoad %int %x_96
-               OpStore %x_95_phi %202
-               OpBranch %150
-        %151 = OpLabel
-        %203 = OpLoad %float %x_118_phi
-               OpStore %x_118 %203
-        %204 = OpLoad %float %x_119_phi
-               OpStore %x_119 %204
-        %205 = OpLoad %bool %x_120_phi
-        %206 = OpLoad %float %x_118
-               OpStore %x_122_phi %206
-               OpSelectionMerge %207 None
-               OpBranchConditional %205 %208 %207
-        %208 = OpLabel
-               OpBranch %148
-        %207 = OpLabel
-        %209 = OpLoad %float %x_119
-               OpStore %x_122_phi %209
-               OpBranch %148
-        %148 = OpLabel
-        %210 = OpLoad %float %x_122_phi
-        %211 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %211 %210
-        %212 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %213 = OpLoad %float %212
-        %214 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %215 = OpLoad %float %214
-        %217 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %218 = OpFAdd %float %213 %215
-               OpStore %217 %218
-               OpStore %x_129_phi %int_0
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %224 = OpLoad %int %x_129_phi
-        %226 = OpSLessThan %bool %224 %int_3
-               OpSelectionMerge %227 None
-               OpBranchConditional %226 %228 %229
-        %228 = OpLabel
-               OpBranch %227
-        %229 = OpLabel
-               OpBranch %220
-        %227 = OpLabel
-        %230 = OpAccessChain %_ptr_Function_float %c %224
-        %231 = OpLoad %float %230
-        %233 = OpFOrdGreaterThanEqual %bool %231 %float_1
-               OpSelectionMerge %234 None
-               OpBranchConditional %233 %235 %234
-        %235 = OpLabel
-        %236 = OpAccessChain %_ptr_Function_float %c %224
-        %237 = OpLoad %float %236
-        %238 = OpAccessChain %_ptr_Function_float %c %224
-        %239 = OpLoad %float %238
-        %240 = OpAccessChain %_ptr_Function_float %c %224
-        %241 = OpFMul %float %237 %239
-               OpStore %240 %241
-               OpBranch %234
-        %234 = OpLabel
-               OpBranch %221
-        %221 = OpLabel
-        %242 = OpIAdd %int %224 %int_1
-               OpStore %x_130 %242
-        %243 = OpLoad %int %x_130
-               OpStore %x_129_phi %243
-               OpBranch %219
-        %220 = OpLabel
-        %244 = OpLoad %v3float %c
-        %246 = OpExtInst %v3float %56 FAbs %244
-        %245 = OpExtInst %v3float %56 Normalize %246
-        %247 = OpCompositeExtract %float %245 0
-        %248 = OpCompositeExtract %float %245 1
-        %249 = OpCompositeExtract %float %245 2
-        %250 = OpCompositeConstruct %v4float %247 %248 %249 %float_1
-               OpStore %x_GLF_color %250
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %251
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %255 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %256 = OpFunctionCall %void %main_1
-        %257 = OpLoad %v4float %x_GLF_color
-        %258 = OpCompositeConstruct %main_out %257
-               OpReturnValue %258
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %260 = OpLabel
-        %262 = OpLoad %v4float %gl_FragCoord_param_1
-        %261 = OpFunctionCall %main_out %main_inner %262
-        %263 = OpCompositeExtract %v4float %261 0
-               OpStore %x_GLF_color_1_1 %263
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.wgsl
deleted file mode 100644
index 98a11e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,200 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec3<f32>;
-  var x_51 : f32;
-  var x_55 : f32;
-  var x_56 : f32;
-  var x_81 : f32;
-  var x_82 : f32;
-  var x_118 : f32;
-  var x_119 : f32;
-  var x_55_phi : f32;
-  var x_58_phi : i32;
-  var x_81_phi : f32;
-  var x_82_phi : f32;
-  var x_83_phi : bool;
-  var x_85_phi : f32;
-  var x_122_phi : f32;
-  var x_129_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_47 : f32 = x_7.resolution.x;
-  let x_49 : f32 = round((x_47 * 0.125));
-  x_51 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5;
-      x_58_phi = 1;
-      loop {
-        var x_68 : f32;
-        var x_76 : f32;
-        var x_59 : i32;
-        var x_56_phi : f32;
-        x_55 = x_55_phi;
-        let x_58 : i32 = x_58_phi;
-        x_81_phi = 0.0;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        var x_75 : f32;
-        var x_76_phi : f32;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((f32(x_58) - (round(x_49) * floor((f32(x_58) / round(x_49))))) <= 0.01)) {
-            x_75 = (x_55 + 100.0);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((f32(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-
-        continuing {
-          x_59 = (x_58 + 1);
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      let x_83 : bool = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-    }
-  }
-  var x_88 : f32;
-  var x_92 : f32;
-  var x_93 : f32;
-  var x_92_phi : f32;
-  var x_95_phi : i32;
-  var x_118_phi : f32;
-  var x_119_phi : f32;
-  var x_120_phi : bool;
-  let x_85 : f32 = x_85_phi;
-  let x_86 : ptr<function, f32> = &(c.x);
-  *(x_86) = x_85;
-  x_88 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5;
-      x_95_phi = 1;
-      loop {
-        var x_113 : f32;
-        var x_112 : f32;
-        var x_96 : i32;
-        var x_93_phi : f32;
-        x_92 = x_92_phi;
-        let x_95 : i32 = x_95_phi;
-        x_118_phi = 0.0;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        var x_111 : f32;
-        var x_112_phi : f32;
-        if (((x_95 % 32) == 0)) {
-          x_113 = (x_92 + 0.400000006);
-          x_93_phi = x_113;
-        } else {
-          x_112_phi = x_92;
-          if (((f32(x_95) - (round(x_49) * floor((f32(x_95) / round(x_49))))) <= 0.01)) {
-            x_111 = (x_92 + 100.0);
-            x_112_phi = x_111;
-          }
-          x_112 = x_112_phi;
-          x_93_phi = x_112;
-        }
-        x_93 = x_93_phi;
-        if ((f32(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-
-        continuing {
-          x_96 = (x_95 + 1);
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      let x_120 : bool = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-    }
-  }
-  let x_122 : f32 = x_122_phi;
-  let x_123 : ptr<function, f32> = &(c.y);
-  *(x_123) = x_122;
-  let x_124 : f32 = *(x_86);
-  let x_125 : f32 = *(x_123);
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  loop {
-    var x_130 : i32;
-    let x_129 : i32 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    let x_135 : ptr<function, f32> = &(c[x_129]);
-    let x_136 : f32 = *(x_135);
-    if ((x_136 >= 1.0)) {
-      let x_140 : f32 = *(x_135);
-      let x_141 : f32 = *(x_135);
-      *(x_135) = (x_140 * x_141);
-    }
-
-    continuing {
-      x_130 = (x_129 + 1);
-      x_129_phi = x_130;
-    }
-  }
-  let x_143 : vec3<f32> = c;
-  let x_145 : vec3<f32> = normalize(abs(x_143));
-  x_GLF_color = vec4<f32>(x_145.x, x_145.y, x_145.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.hlsl
deleted file mode 100644
index fec7d26..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,207 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float x_51 = 0.0f;
-  float x_55 = 0.0f;
-  float x_56 = 0.0f;
-  float x_81 = 0.0f;
-  float x_82 = 0.0f;
-  float x_118 = 0.0f;
-  float x_119 = 0.0f;
-  float x_55_phi = 0.0f;
-  int x_58_phi = 0;
-  float x_81_phi = 0.0f;
-  float x_82_phi = 0.0f;
-  bool x_83_phi = false;
-  float x_85_phi = 0.0f;
-  float x_122_phi = 0.0f;
-  int x_129_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_47 = asfloat(x_7[0].x);
-  const float x_49 = round((x_47 * 0.125f));
-  x_51 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5f;
-      x_58_phi = 1;
-      while (true) {
-        float x_68 = 0.0f;
-        float x_76 = 0.0f;
-        int x_59 = 0;
-        float x_56_phi = 0.0f;
-        x_55 = x_55_phi;
-        const int x_58 = x_58_phi;
-        x_81_phi = 0.0f;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        float x_75 = 0.0f;
-        float x_76_phi = 0.0f;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006f);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((float(x_58) % round(x_49)) <= 0.01f)) {
-            x_75 = (x_55 + 100.0f);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((float(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-        {
-          x_59 = (x_58 + 1);
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      const bool x_83 = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-      break;
-    }
-  }
-  float x_88 = 0.0f;
-  float x_92 = 0.0f;
-  float x_93 = 0.0f;
-  float x_92_phi = 0.0f;
-  int x_95_phi = 0;
-  float x_118_phi = 0.0f;
-  float x_119_phi = 0.0f;
-  bool x_120_phi = false;
-  const float x_85 = x_85_phi;
-  c.x = x_85;
-  x_88 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5f;
-      x_95_phi = 1;
-      while (true) {
-        float x_113 = 0.0f;
-        float x_112 = 0.0f;
-        int x_96 = 0;
-        float x_93_phi = 0.0f;
-        x_92 = x_92_phi;
-        const int x_95 = x_95_phi;
-        x_118_phi = 0.0f;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        float x_111 = 0.0f;
-        float x_112_phi = 0.0f;
-        if (((x_95 % 32) == 0)) {
-          x_113 = (x_92 + 0.400000006f);
-          x_93_phi = x_113;
-        } else {
-          x_112_phi = x_92;
-          if (((float(x_95) % round(x_49)) <= 0.01f)) {
-            x_111 = (x_92 + 100.0f);
-            x_112_phi = x_111;
-          }
-          x_112 = x_112_phi;
-          x_93_phi = x_112;
-        }
-        x_93 = x_93_phi;
-        if ((float(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-        {
-          x_96 = (x_95 + 1);
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      const bool x_120 = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-      break;
-    }
-  }
-  const float x_122 = x_122_phi;
-  c.y = x_122;
-  const float x_124 = c.x;
-  const float x_125 = c.y;
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  while (true) {
-    int x_130 = 0;
-    const int x_129 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    const int x_135_save = x_129;
-    const float x_136 = c[x_135_save];
-    if ((x_136 >= 1.0f)) {
-      const float x_140 = c[x_135_save];
-      const float x_141 = c[x_135_save];
-      set_float3(c, x_135_save, (x_140 * x_141));
-    }
-    {
-      x_130 = (x_129 + 1);
-      x_129_phi = x_130;
-    }
-  }
-  const float3 x_145 = normalize(abs(c));
-  x_GLF_color = float4(x_145.x, x_145.y, x_145.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.msl
deleted file mode 100755
index b2d2ae3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float x_51 = 0.0f;
-  float x_55 = 0.0f;
-  float x_56 = 0.0f;
-  float x_81 = 0.0f;
-  float x_82 = 0.0f;
-  float x_118 = 0.0f;
-  float x_119 = 0.0f;
-  float x_55_phi = 0.0f;
-  int x_58_phi = 0;
-  float x_81_phi = 0.0f;
-  float x_82_phi = 0.0f;
-  bool x_83_phi = false;
-  float x_85_phi = 0.0f;
-  float x_122_phi = 0.0f;
-  int x_129_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_47 = x_7.resolution.x;
-  float const x_49 = rint((x_47 * 0.125f));
-  x_51 = (*(tint_symbol_3)).x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5f;
-      x_58_phi = 1;
-      while (true) {
-        float x_68 = 0.0f;
-        float x_76 = 0.0f;
-        int x_59 = 0;
-        float x_56_phi = 0.0f;
-        x_55 = x_55_phi;
-        int const x_58 = x_58_phi;
-        x_81_phi = 0.0f;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        float x_75 = 0.0f;
-        float x_76_phi = 0.0f;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006f);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if ((fmod(float(x_58), rint(x_49)) <= 0.01f)) {
-            x_75 = (x_55 + 100.0f);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((float(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-        {
-          x_59 = as_type<int>((as_type<uint>(x_58) + as_type<uint>(1)));
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      bool const x_83 = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-      break;
-    }
-  }
-  float x_88 = 0.0f;
-  float x_92 = 0.0f;
-  float x_93 = 0.0f;
-  float x_92_phi = 0.0f;
-  int x_95_phi = 0;
-  float x_118_phi = 0.0f;
-  float x_119_phi = 0.0f;
-  bool x_120_phi = false;
-  float const x_85 = x_85_phi;
-  c.x = x_85;
-  x_88 = (*(tint_symbol_3)).y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5f;
-      x_95_phi = 1;
-      while (true) {
-        float x_113 = 0.0f;
-        float x_112 = 0.0f;
-        int x_96 = 0;
-        float x_93_phi = 0.0f;
-        x_92 = x_92_phi;
-        int const x_95 = x_95_phi;
-        x_118_phi = 0.0f;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        float x_111 = 0.0f;
-        float x_112_phi = 0.0f;
-        if (((x_95 % 32) == 0)) {
-          x_113 = (x_92 + 0.400000006f);
-          x_93_phi = x_113;
-        } else {
-          x_112_phi = x_92;
-          if ((fmod(float(x_95), rint(x_49)) <= 0.01f)) {
-            x_111 = (x_92 + 100.0f);
-            x_112_phi = x_111;
-          }
-          x_112 = x_112_phi;
-          x_93_phi = x_112;
-        }
-        x_93 = x_93_phi;
-        if ((float(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-        {
-          x_96 = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      bool const x_120 = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-      break;
-    }
-  }
-  float const x_122 = x_122_phi;
-  c.y = x_122;
-  float const x_124 = c.x;
-  float const x_125 = c.y;
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  while (true) {
-    int x_130 = 0;
-    int const x_129 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    int const x_135_save = x_129;
-    float const x_136 = c[x_135_save];
-    if ((x_136 >= 1.0f)) {
-      float const x_140 = c[x_135_save];
-      float const x_141 = c[x_135_save];
-      c[x_135_save] = (x_140 * x_141);
-    }
-    {
-      x_130 = as_type<int>((as_type<uint>(x_129) + as_type<uint>(1)));
-      x_129_phi = x_130;
-    }
-  }
-  float3 const x_143 = c;
-  float3 const x_145 = normalize(fabs(x_143));
-  *(tint_symbol_4) = float4(x_145.x, x_145.y, x_145.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.spvasm
deleted file mode 100644
index eb782e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,449 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 254
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %x_51 "x_51"
-               OpName %x_55 "x_55"
-               OpName %x_56 "x_56"
-               OpName %x_81 "x_81"
-               OpName %x_82 "x_82"
-               OpName %x_118 "x_118"
-               OpName %x_119 "x_119"
-               OpName %x_55_phi "x_55_phi"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_81_phi "x_81_phi"
-               OpName %x_82_phi "x_82_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_85_phi "x_85_phi"
-               OpName %x_122_phi "x_122_phi"
-               OpName %x_129_phi "x_129_phi"
-               OpName %x_68 "x_68"
-               OpName %x_76 "x_76"
-               OpName %x_59 "x_59"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_75 "x_75"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_88 "x_88"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_120_phi "x_120_phi"
-               OpName %x_113 "x_113"
-               OpName %x_112 "x_112"
-               OpName %x_96 "x_96"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_111 "x_111"
-               OpName %x_112_phi "x_112_phi"
-               OpName %x_130 "x_130"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %22 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %36 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %49 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-    %int_800 = OpConstant %int 800
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %241 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %22
-       %x_51 = OpVariable %_ptr_Function_float Function %25
-       %x_55 = OpVariable %_ptr_Function_float Function %25
-       %x_56 = OpVariable %_ptr_Function_float Function %25
-       %x_81 = OpVariable %_ptr_Function_float Function %25
-       %x_82 = OpVariable %_ptr_Function_float Function %25
-      %x_118 = OpVariable %_ptr_Function_float Function %25
-      %x_119 = OpVariable %_ptr_Function_float Function %25
-   %x_55_phi = OpVariable %_ptr_Function_float Function %25
-   %x_58_phi = OpVariable %_ptr_Function_int Function %36
-   %x_81_phi = OpVariable %_ptr_Function_float Function %25
-   %x_82_phi = OpVariable %_ptr_Function_float Function %25
-   %x_83_phi = OpVariable %_ptr_Function_bool Function %42
-   %x_85_phi = OpVariable %_ptr_Function_float Function %25
-  %x_122_phi = OpVariable %_ptr_Function_float Function %25
-  %x_129_phi = OpVariable %_ptr_Function_int Function %36
-       %x_68 = OpVariable %_ptr_Function_float Function %25
-       %x_76 = OpVariable %_ptr_Function_float Function %25
-       %x_59 = OpVariable %_ptr_Function_int Function %36
-   %x_56_phi = OpVariable %_ptr_Function_float Function %25
-       %x_75 = OpVariable %_ptr_Function_float Function %25
-   %x_76_phi = OpVariable %_ptr_Function_float Function %25
-       %x_88 = OpVariable %_ptr_Function_float Function %25
-       %x_92 = OpVariable %_ptr_Function_float Function %25
-       %x_93 = OpVariable %_ptr_Function_float Function %25
-   %x_92_phi = OpVariable %_ptr_Function_float Function %25
-   %x_95_phi = OpVariable %_ptr_Function_int Function %36
-  %x_118_phi = OpVariable %_ptr_Function_float Function %25
-  %x_119_phi = OpVariable %_ptr_Function_float Function %25
-  %x_120_phi = OpVariable %_ptr_Function_bool Function %42
-      %x_113 = OpVariable %_ptr_Function_float Function %25
-      %x_112 = OpVariable %_ptr_Function_float Function %25
-       %x_96 = OpVariable %_ptr_Function_int Function %36
-   %x_93_phi = OpVariable %_ptr_Function_float Function %25
-      %x_111 = OpVariable %_ptr_Function_float Function %25
-  %x_112_phi = OpVariable %_ptr_Function_float Function %25
-      %x_130 = OpVariable %_ptr_Function_int Function %36
-               OpStore %c %49
-         %53 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %54 = OpLoad %float %53
-         %58 = OpFMul %float %54 %float_0_125
-         %55 = OpExtInst %float %56 RoundEven %58
-         %60 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %61 = OpLoad %float %60
-               OpStore %x_51 %61
-               OpSelectionMerge %62 None
-               OpSwitch %uint_0 %63
-         %63 = OpLabel
-               OpStore %x_55_phi %float_n0_5
-               OpStore %x_58_phi %int_1
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-         %74 = OpLoad %float %x_55_phi
-               OpStore %x_55 %74
-         %75 = OpLoad %int %x_58_phi
-               OpStore %x_81_phi %float_0
-         %77 = OpLoad %float %x_55
-               OpStore %x_82_phi %77
-               OpStore %x_83_phi %false
-         %80 = OpSLessThan %bool %75 %int_800
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %67
-         %81 = OpLabel
-         %87 = OpSMod %int %75 %int_32
-         %89 = OpIEqual %bool %87 %int_0
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-         %93 = OpLoad %float %x_55
-         %95 = OpFAdd %float %93 %float_0_400000006
-               OpStore %x_68 %95
-         %96 = OpLoad %float %x_68
-               OpStore %x_56_phi %96
-               OpBranch %90
-         %92 = OpLabel
-         %97 = OpLoad %float %x_55
-               OpStore %x_76_phi %97
-         %98 = OpConvertSToF %float %75
-         %99 = OpExtInst %float %56 RoundEven %55
-        %100 = OpFRem %float %98 %99
-        %102 = OpFOrdLessThanEqual %bool %100 %float_0_00999999978
-               OpSelectionMerge %103 None
-               OpBranchConditional %102 %104 %103
-        %104 = OpLabel
-        %105 = OpLoad %float %x_55
-        %107 = OpFAdd %float %105 %float_100
-               OpStore %x_75 %107
-        %108 = OpLoad %float %x_75
-               OpStore %x_76_phi %108
-               OpBranch %103
-        %103 = OpLabel
-        %109 = OpLoad %float %x_76_phi
-               OpStore %x_76 %109
-        %110 = OpLoad %float %x_76
-               OpStore %x_56_phi %110
-               OpBranch %90
-         %90 = OpLabel
-        %111 = OpLoad %float %x_56_phi
-               OpStore %x_56 %111
-        %112 = OpConvertSToF %float %75
-        %113 = OpLoad %float %x_51
-        %114 = OpFOrdGreaterThanEqual %bool %112 %113
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %115
-        %116 = OpLabel
-        %117 = OpLoad %float %x_56
-               OpStore %x_81_phi %117
-        %118 = OpLoad %float %x_56
-               OpStore %x_82_phi %118
-               OpStore %x_83_phi %true
-               OpBranch %67
-        %115 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-        %120 = OpIAdd %int %75 %int_1
-               OpStore %x_59 %120
-        %121 = OpLoad %float %x_56
-               OpStore %x_55_phi %121
-        %122 = OpLoad %int %x_59
-               OpStore %x_58_phi %122
-               OpBranch %66
-         %67 = OpLabel
-        %123 = OpLoad %float %x_81_phi
-               OpStore %x_81 %123
-        %124 = OpLoad %float %x_82_phi
-               OpStore %x_82 %124
-        %125 = OpLoad %bool %x_83_phi
-        %126 = OpLoad %float %x_81
-               OpStore %x_85_phi %126
-               OpSelectionMerge %127 None
-               OpBranchConditional %125 %128 %127
-        %128 = OpLabel
-               OpBranch %62
-        %127 = OpLabel
-        %129 = OpLoad %float %x_82
-               OpStore %x_85_phi %129
-               OpBranch %62
-         %62 = OpLabel
-        %138 = OpLoad %float %x_85_phi
-        %139 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %139 %138
-        %141 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %142 = OpLoad %float %141
-               OpStore %x_88 %142
-               OpSelectionMerge %143 None
-               OpSwitch %uint_0 %144
-        %144 = OpLabel
-               OpStore %x_92_phi %float_n0_5
-               OpStore %x_95_phi %int_1
-               OpBranch %145
-        %145 = OpLabel
-               OpLoopMerge %146 %147 None
-               OpBranch %148
-        %148 = OpLabel
-        %153 = OpLoad %float %x_92_phi
-               OpStore %x_92 %153
-        %154 = OpLoad %int %x_95_phi
-               OpStore %x_118_phi %float_0
-        %155 = OpLoad %float %x_92
-               OpStore %x_119_phi %155
-               OpStore %x_120_phi %false
-        %156 = OpSLessThan %bool %154 %int_800
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %159
-        %158 = OpLabel
-               OpBranch %157
-        %159 = OpLabel
-               OpBranch %146
-        %157 = OpLabel
-        %162 = OpSMod %int %154 %int_32
-        %163 = OpIEqual %bool %162 %int_0
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %166
-        %165 = OpLabel
-        %167 = OpLoad %float %x_92
-        %168 = OpFAdd %float %167 %float_0_400000006
-               OpStore %x_113 %168
-        %169 = OpLoad %float %x_113
-               OpStore %x_93_phi %169
-               OpBranch %164
-        %166 = OpLabel
-        %170 = OpLoad %float %x_92
-               OpStore %x_112_phi %170
-        %171 = OpConvertSToF %float %154
-        %172 = OpExtInst %float %56 RoundEven %55
-        %173 = OpFRem %float %171 %172
-        %174 = OpFOrdLessThanEqual %bool %173 %float_0_00999999978
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %175
-        %176 = OpLabel
-        %177 = OpLoad %float %x_92
-        %178 = OpFAdd %float %177 %float_100
-               OpStore %x_111 %178
-        %179 = OpLoad %float %x_111
-               OpStore %x_112_phi %179
-               OpBranch %175
-        %175 = OpLabel
-        %180 = OpLoad %float %x_112_phi
-               OpStore %x_112 %180
-        %181 = OpLoad %float %x_112
-               OpStore %x_93_phi %181
-               OpBranch %164
-        %164 = OpLabel
-        %182 = OpLoad %float %x_93_phi
-               OpStore %x_93 %182
-        %183 = OpConvertSToF %float %154
-        %184 = OpLoad %float %x_88
-        %185 = OpFOrdGreaterThanEqual %bool %183 %184
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %186
-        %187 = OpLabel
-        %188 = OpLoad %float %x_93
-               OpStore %x_118_phi %188
-        %189 = OpLoad %float %x_93
-               OpStore %x_119_phi %189
-               OpStore %x_120_phi %true
-               OpBranch %146
-        %186 = OpLabel
-               OpBranch %147
-        %147 = OpLabel
-        %190 = OpIAdd %int %154 %int_1
-               OpStore %x_96 %190
-        %191 = OpLoad %float %x_93
-               OpStore %x_92_phi %191
-        %192 = OpLoad %int %x_96
-               OpStore %x_95_phi %192
-               OpBranch %145
-        %146 = OpLabel
-        %193 = OpLoad %float %x_118_phi
-               OpStore %x_118 %193
-        %194 = OpLoad %float %x_119_phi
-               OpStore %x_119 %194
-        %195 = OpLoad %bool %x_120_phi
-        %196 = OpLoad %float %x_118
-               OpStore %x_122_phi %196
-               OpSelectionMerge %197 None
-               OpBranchConditional %195 %198 %197
-        %198 = OpLabel
-               OpBranch %143
-        %197 = OpLabel
-        %199 = OpLoad %float %x_119
-               OpStore %x_122_phi %199
-               OpBranch %143
-        %143 = OpLabel
-        %200 = OpLoad %float %x_122_phi
-        %201 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %201 %200
-        %202 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %203 = OpLoad %float %202
-        %204 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %205 = OpLoad %float %204
-        %207 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %208 = OpFAdd %float %203 %205
-               OpStore %207 %208
-               OpStore %x_129_phi %int_0
-               OpBranch %209
-        %209 = OpLabel
-               OpLoopMerge %210 %211 None
-               OpBranch %212
-        %212 = OpLabel
-        %214 = OpLoad %int %x_129_phi
-        %216 = OpSLessThan %bool %214 %int_3
-               OpSelectionMerge %217 None
-               OpBranchConditional %216 %218 %219
-        %218 = OpLabel
-               OpBranch %217
-        %219 = OpLabel
-               OpBranch %210
-        %217 = OpLabel
-        %220 = OpAccessChain %_ptr_Function_float %c %214
-        %221 = OpLoad %float %220
-        %223 = OpFOrdGreaterThanEqual %bool %221 %float_1
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %224
-        %225 = OpLabel
-        %226 = OpAccessChain %_ptr_Function_float %c %214
-        %227 = OpLoad %float %226
-        %228 = OpAccessChain %_ptr_Function_float %c %214
-        %229 = OpLoad %float %228
-        %230 = OpAccessChain %_ptr_Function_float %c %214
-        %231 = OpFMul %float %227 %229
-               OpStore %230 %231
-               OpBranch %224
-        %224 = OpLabel
-               OpBranch %211
-        %211 = OpLabel
-        %232 = OpIAdd %int %214 %int_1
-               OpStore %x_130 %232
-        %233 = OpLoad %int %x_130
-               OpStore %x_129_phi %233
-               OpBranch %209
-        %210 = OpLabel
-        %234 = OpLoad %v3float %c
-        %236 = OpExtInst %v3float %56 FAbs %234
-        %235 = OpExtInst %v3float %56 Normalize %236
-        %237 = OpCompositeExtract %float %235 0
-        %238 = OpCompositeExtract %float %235 1
-        %239 = OpCompositeExtract %float %235 2
-        %240 = OpCompositeConstruct %v4float %237 %238 %239 %float_1
-               OpStore %x_GLF_color %240
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %241
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %245 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %246 = OpFunctionCall %void %main_1
-        %247 = OpLoad %v4float %x_GLF_color
-        %248 = OpCompositeConstruct %main_out %247
-               OpReturnValue %248
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %250 = OpLabel
-        %252 = OpLoad %v4float %gl_FragCoord_param_1
-        %251 = OpFunctionCall %main_out %main_inner %252
-        %253 = OpCompositeExtract %v4float %251 0
-               OpStore %x_GLF_color_1_1 %253
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.wgsl
deleted file mode 100644
index 20e6da9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-colorgrid-modulo-O-move-block-down/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,200 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec3<f32>;
-  var x_51 : f32;
-  var x_55 : f32;
-  var x_56 : f32;
-  var x_81 : f32;
-  var x_82 : f32;
-  var x_118 : f32;
-  var x_119 : f32;
-  var x_55_phi : f32;
-  var x_58_phi : i32;
-  var x_81_phi : f32;
-  var x_82_phi : f32;
-  var x_83_phi : bool;
-  var x_85_phi : f32;
-  var x_122_phi : f32;
-  var x_129_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_47 : f32 = x_7.resolution.x;
-  let x_49 : f32 = round((x_47 * 0.125));
-  x_51 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_55_phi = -0.5;
-      x_58_phi = 1;
-      loop {
-        var x_68 : f32;
-        var x_76 : f32;
-        var x_59 : i32;
-        var x_56_phi : f32;
-        x_55 = x_55_phi;
-        let x_58 : i32 = x_58_phi;
-        x_81_phi = 0.0;
-        x_82_phi = x_55;
-        x_83_phi = false;
-        if ((x_58 < 800)) {
-        } else {
-          break;
-        }
-        var x_75 : f32;
-        var x_76_phi : f32;
-        if (((x_58 % 32) == 0)) {
-          x_68 = (x_55 + 0.400000006);
-          x_56_phi = x_68;
-        } else {
-          x_76_phi = x_55;
-          if (((f32(x_58) % round(x_49)) <= 0.01)) {
-            x_75 = (x_55 + 100.0);
-            x_76_phi = x_75;
-          }
-          x_76 = x_76_phi;
-          x_56_phi = x_76;
-        }
-        x_56 = x_56_phi;
-        if ((f32(x_58) >= x_51)) {
-          x_81_phi = x_56;
-          x_82_phi = x_56;
-          x_83_phi = true;
-          break;
-        }
-
-        continuing {
-          x_59 = (x_58 + 1);
-          x_55_phi = x_56;
-          x_58_phi = x_59;
-        }
-      }
-      x_81 = x_81_phi;
-      x_82 = x_82_phi;
-      let x_83 : bool = x_83_phi;
-      x_85_phi = x_81;
-      if (x_83) {
-        break;
-      }
-      x_85_phi = x_82;
-    }
-  }
-  var x_88 : f32;
-  var x_92 : f32;
-  var x_93 : f32;
-  var x_92_phi : f32;
-  var x_95_phi : i32;
-  var x_118_phi : f32;
-  var x_119_phi : f32;
-  var x_120_phi : bool;
-  let x_85 : f32 = x_85_phi;
-  let x_86 : ptr<function, f32> = &(c.x);
-  *(x_86) = x_85;
-  x_88 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_92_phi = -0.5;
-      x_95_phi = 1;
-      loop {
-        var x_113 : f32;
-        var x_112 : f32;
-        var x_96 : i32;
-        var x_93_phi : f32;
-        x_92 = x_92_phi;
-        let x_95 : i32 = x_95_phi;
-        x_118_phi = 0.0;
-        x_119_phi = x_92;
-        x_120_phi = false;
-        if ((x_95 < 800)) {
-        } else {
-          break;
-        }
-        var x_111 : f32;
-        var x_112_phi : f32;
-        if (((x_95 % 32) == 0)) {
-          x_113 = (x_92 + 0.400000006);
-          x_93_phi = x_113;
-        } else {
-          x_112_phi = x_92;
-          if (((f32(x_95) % round(x_49)) <= 0.01)) {
-            x_111 = (x_92 + 100.0);
-            x_112_phi = x_111;
-          }
-          x_112 = x_112_phi;
-          x_93_phi = x_112;
-        }
-        x_93 = x_93_phi;
-        if ((f32(x_95) >= x_88)) {
-          x_118_phi = x_93;
-          x_119_phi = x_93;
-          x_120_phi = true;
-          break;
-        }
-
-        continuing {
-          x_96 = (x_95 + 1);
-          x_92_phi = x_93;
-          x_95_phi = x_96;
-        }
-      }
-      x_118 = x_118_phi;
-      x_119 = x_119_phi;
-      let x_120 : bool = x_120_phi;
-      x_122_phi = x_118;
-      if (x_120) {
-        break;
-      }
-      x_122_phi = x_119;
-    }
-  }
-  let x_122 : f32 = x_122_phi;
-  let x_123 : ptr<function, f32> = &(c.y);
-  *(x_123) = x_122;
-  let x_124 : f32 = *(x_86);
-  let x_125 : f32 = *(x_123);
-  c.z = (x_124 + x_125);
-  x_129_phi = 0;
-  loop {
-    var x_130 : i32;
-    let x_129 : i32 = x_129_phi;
-    if ((x_129 < 3)) {
-    } else {
-      break;
-    }
-    let x_135 : ptr<function, f32> = &(c[x_129]);
-    let x_136 : f32 = *(x_135);
-    if ((x_136 >= 1.0)) {
-      let x_140 : f32 = *(x_135);
-      let x_141 : f32 = *(x_135);
-      *(x_135) = (x_140 * x_141);
-    }
-
-    continuing {
-      x_130 = (x_129 + 1);
-      x_129_phi = x_130;
-    }
-  }
-  let x_143 : vec3<f32> = c;
-  let x_145 : vec3<f32> = normalize(abs(x_143));
-  x_GLF_color = vec4<f32>(x_145.x, x_145.y, x_145.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.hlsl
deleted file mode 100644
index 1c4efe4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,343 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static int map[256] = (int[256])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int i = 0;
-  int2 p = int2(0, 0);
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  const float4 x_59 = gl_FragCoord;
-  const float2 x_62 = asfloat(x_7[0].xy);
-  pos = (float2(x_59.x, x_59.y) / x_62);
-  const float x_65 = pos.x;
-  const float x_69 = pos.y;
-  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      map[i] = 0;
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_104 = false;
-    bool x_124 = false;
-    bool x_144 = false;
-    bool x_164 = false;
-    bool x_105_phi = false;
-    bool x_125_phi = false;
-    bool x_145_phi = false;
-    bool x_165_phi = false;
-    v = (v + 1);
-    directions = 0;
-    const int x_91 = p.x;
-    const bool x_92 = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      const int x_96 = p.x;
-      const int x_99 = p.y;
-      const int x_103 = map[((x_96 - 2) + (x_99 * 16))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    if (x_105_phi) {
-      directions = (directions + 1);
-    }
-    const int x_111 = p.y;
-    const bool x_112 = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      const int x_116 = p.x;
-      const int x_118 = p.y;
-      const int x_123 = map[(x_116 + ((x_118 - 2) * 16))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    if (x_125_phi) {
-      directions = (directions + 1);
-    }
-    const int x_131 = p.x;
-    const bool x_132 = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      const int x_136 = p.x;
-      const int x_139 = p.y;
-      const int x_143 = map[((x_136 + 2) + (x_139 * 16))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    if (x_145_phi) {
-      directions = (directions + 1);
-    }
-    const int x_151 = p.y;
-    const bool x_152 = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      const int x_156 = p.x;
-      const int x_158 = p.y;
-      const int x_163 = map[(x_156 + ((x_158 + 2) * 16))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    if (x_165_phi) {
-      directions = (directions + 1);
-    }
-    bool x_229 = false;
-    bool x_242 = false;
-    bool x_281 = false;
-    int x_288 = 0;
-    int x_289 = 0;
-    int x_295 = 0;
-    int x_296 = 0;
-    int x_303[256] = (int[256])0;
-    int x_304[256] = (int[256])0;
-    int x_315 = 0;
-    int x_316 = 0;
-    bool x_359 = false;
-    bool x_372 = false;
-    bool x_411 = false;
-    bool x_424 = false;
-    bool x_230_phi = false;
-    bool x_243_phi = false;
-    bool x_282_phi = false;
-    int x_290_phi = 0;
-    int x_297_phi = 0;
-    int x_305_phi[256] = (int[256])0;
-    int x_317_phi = 0;
-    bool x_360_phi = false;
-    bool x_373_phi = false;
-    bool x_412_phi = false;
-    bool x_425_phi = false;
-    if ((directions == 0)) {
-      canwalk = false;
-      i = 0;
-      {
-        for(; (i < 8); i = (i + 1)) {
-          j = 0;
-          {
-            for(; (j < 8); j = (j + 1)) {
-              const int x_196 = map[((j * 2) + ((i * 2) * 16))];
-              if ((x_196 == 0)) {
-                p.x = (j * 2);
-                p.y = (i * 2);
-                canwalk = true;
-              }
-            }
-          }
-        }
-      }
-      const int x_211 = p.x;
-      const int x_213 = p.y;
-      map[(x_211 + (x_213 * 16))] = 1;
-    } else {
-      d = (v % directions);
-      v = (v + directions);
-      const bool x_224 = (d >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        const int x_228 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      const bool x_230 = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        const int x_234 = p.x;
-        const int x_237 = p.y;
-        const int x_241 = map[((x_234 - 2) + (x_237 * 16))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      if (x_243_phi) {
-        d = (d - 1);
-        const int x_249 = p.x;
-        const int x_251 = p.y;
-        map[(x_249 + (x_251 * 16))] = 1;
-        const int x_256 = p.x;
-        const int x_259 = p.y;
-        map[((x_256 - 1) + (x_259 * 16))] = 1;
-        const int x_264 = p.x;
-        const int x_267 = p.y;
-        map[((x_264 - 2) + (x_267 * 16))] = 1;
-        const int x_272 = p.x;
-        p.x = (x_272 - 2);
-      }
-      const bool x_276 = (d >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        const int x_280 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      const bool x_282 = x_282_phi;
-      if (x_282) {
-        x_288 = p.x;
-        x_290_phi = x_288;
-      } else {
-        x_289 = 0;
-        x_290_phi = x_289;
-      }
-      const int x_290 = x_290_phi;
-      if (x_282) {
-        x_295 = p.y;
-        x_297_phi = x_295;
-      } else {
-        x_296 = 0;
-        x_297_phi = x_296;
-      }
-      const int x_299 = ((x_297_phi - 2) * 16);
-      if (x_282) {
-        x_303 = map;
-        x_305_phi = x_303;
-      } else {
-        const int tint_symbol_4[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        x_304 = tint_symbol_4;
-        x_305_phi = x_304;
-      }
-      const int x_305[256] = x_305_phi;
-      if (x_282) {
-        const int tint_symbol_5[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        map = tint_symbol_5;
-      }
-      if (x_282) {
-        map = x_305;
-      }
-      if (x_282) {
-        x_315 = map[(x_290 + x_299)];
-        x_317_phi = x_315;
-      } else {
-        x_316 = 0;
-        x_317_phi = x_316;
-      }
-      const bool x_318 = (x_317_phi == 0);
-      if ((x_282 ? x_318 : x_282)) {
-        d = (d - 1);
-        const int x_326 = p.x;
-        const int x_328 = p.y;
-        map[(x_326 + (x_328 * 16))] = 1;
-        const int x_333 = p.x;
-        const int x_335 = p.y;
-        map[(x_333 + ((x_335 - 1) * 16))] = 1;
-        const int x_341 = p.x;
-        const int x_343 = p.y;
-        const int x_345[256] = map;
-        const int tint_symbol_6[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        map = tint_symbol_6;
-        map = x_345;
-        map[(x_341 + ((x_343 - 2) * 16))] = 1;
-        const int x_350 = p.y;
-        p.y = (x_350 - 2);
-      }
-      const bool x_354 = (d >= 0);
-      x_360_phi = x_354;
-      if (x_354) {
-        const int x_358 = p.x;
-        x_359 = (x_358 < 14);
-        x_360_phi = x_359;
-      }
-      const bool x_360 = x_360_phi;
-      x_373_phi = x_360;
-      if (x_360) {
-        const int x_364 = p.x;
-        const int x_367 = p.y;
-        const int x_371 = map[((x_364 + 2) + (x_367 * 16))];
-        x_372 = (x_371 == 0);
-        x_373_phi = x_372;
-      }
-      if (x_373_phi) {
-        d = (d - 1);
-        const int x_379 = p.x;
-        const int x_381 = p.y;
-        map[(x_379 + (x_381 * 16))] = 1;
-        const int x_386 = p.x;
-        const int x_389 = p.y;
-        map[((x_386 + 1) + (x_389 * 16))] = 1;
-        const int x_394 = p.x;
-        const int x_397 = p.y;
-        map[((x_394 + 2) + (x_397 * 16))] = 1;
-        const int x_402 = p.x;
-        p.x = (x_402 + 2);
-      }
-      const bool x_406 = (d >= 0);
-      x_412_phi = x_406;
-      if (x_406) {
-        const int x_410 = p.y;
-        x_411 = (x_410 < 14);
-        x_412_phi = x_411;
-      }
-      const bool x_412 = x_412_phi;
-      x_425_phi = x_412;
-      if (x_412) {
-        const int x_416 = p.x;
-        const int x_418 = p.y;
-        const int x_423 = map[(x_416 + ((x_418 + 2) * 16))];
-        x_424 = (x_423 == 0);
-        x_425_phi = x_424;
-      }
-      if (x_425_phi) {
-        d = (d - 1);
-        const int x_431 = p.x;
-        const int x_433 = p.y;
-        map[(x_431 + (x_433 * 16))] = 1;
-        const int x_438 = p.x;
-        const int x_440 = p.y;
-        map[(x_438 + ((x_440 + 1) * 16))] = 1;
-        const int x_446 = p.x;
-        const int x_448 = p.y;
-        map[(x_446 + ((x_448 + 2) * 16))] = 1;
-        const int x_454 = p.y;
-        p.y = (x_454 + 2);
-      }
-    }
-    const int x_458 = ipos.y;
-    const int x_461 = ipos.x;
-    const int x_464 = map[((x_458 * 16) + x_461)];
-    if ((x_464 == 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      if (canwalk) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.msl
deleted file mode 100644
index 902b3c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.msl
+++ /dev/null
@@ -1,400 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  float2 pos = 0.0f;
-  int2 ipos = 0;
-  int i = 0;
-  int2 p = 0;
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  float4 const x_59 = *(tint_symbol_6);
-  float2 const x_62 = x_7.resolution;
-  pos = (float2(x_59.x, x_59.y) / x_62);
-  float const x_65 = pos.x;
-  float const x_69 = pos.y;
-  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
-  i = 0;
-  while (true) {
-    int const x_77 = i;
-    if ((x_77 < 256)) {
-    } else {
-      break;
-    }
-    int const x_80 = i;
-    (*(tint_symbol_7)).arr[x_80] = 0;
-    {
-      int const x_82 = i;
-      i = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_104 = false;
-    bool x_124 = false;
-    bool x_144 = false;
-    bool x_164 = false;
-    bool x_105_phi = false;
-    bool x_125_phi = false;
-    bool x_145_phi = false;
-    bool x_165_phi = false;
-    int const x_88 = v;
-    v = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    directions = 0;
-    int const x_91 = p.x;
-    bool const x_92 = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      int const x_96 = p.x;
-      int const x_99 = p.y;
-      int const x_103 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_96) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_99) * as_type<uint>(16))))))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    bool const x_105 = x_105_phi;
-    if (x_105) {
-      int const x_108 = directions;
-      directions = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-    }
-    int const x_111 = p.y;
-    bool const x_112 = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      int const x_116 = p.x;
-      int const x_118 = p.y;
-      int const x_123 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_116) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_118) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    bool const x_125 = x_125_phi;
-    if (x_125) {
-      int const x_128 = directions;
-      directions = as_type<int>((as_type<uint>(x_128) + as_type<uint>(1)));
-    }
-    int const x_131 = p.x;
-    bool const x_132 = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      int const x_136 = p.x;
-      int const x_139 = p.y;
-      int const x_143 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_139) * as_type<uint>(16))))))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    bool const x_145 = x_145_phi;
-    if (x_145) {
-      int const x_148 = directions;
-      directions = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-    }
-    int const x_151 = p.y;
-    bool const x_152 = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      int const x_156 = p.x;
-      int const x_158 = p.y;
-      int const x_163 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_156) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_158) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    bool const x_165 = x_165_phi;
-    if (x_165) {
-      int const x_168 = directions;
-      directions = as_type<int>((as_type<uint>(x_168) + as_type<uint>(1)));
-    }
-    bool x_229 = false;
-    bool x_242 = false;
-    bool x_281 = false;
-    int x_288 = 0;
-    int x_289 = 0;
-    int x_295 = 0;
-    int x_296 = 0;
-    tint_array_wrapper x_303 = {};
-    tint_array_wrapper x_304 = {};
-    int x_315 = 0;
-    int x_316 = 0;
-    bool x_359 = false;
-    bool x_372 = false;
-    bool x_411 = false;
-    bool x_424 = false;
-    bool x_230_phi = false;
-    bool x_243_phi = false;
-    bool x_282_phi = false;
-    int x_290_phi = 0;
-    int x_297_phi = 0;
-    tint_array_wrapper x_305_phi = {};
-    int x_317_phi = 0;
-    bool x_360_phi = false;
-    bool x_373_phi = false;
-    bool x_412_phi = false;
-    bool x_425_phi = false;
-    int const x_170 = directions;
-    if ((x_170 == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        int const x_179 = i;
-        if ((x_179 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        while (true) {
-          int const x_186 = j;
-          if ((x_186 < 8)) {
-          } else {
-            break;
-          }
-          int const x_189 = j;
-          int const x_191 = i;
-          int const x_196 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_189) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_191) * as_type<uint>(2)))) * as_type<uint>(16))))))];
-          if ((x_196 == 0)) {
-            int const x_200 = j;
-            p.x = as_type<int>((as_type<uint>(x_200) * as_type<uint>(2)));
-            int const x_203 = i;
-            p.y = as_type<int>((as_type<uint>(x_203) * as_type<uint>(2)));
-            canwalk = true;
-          }
-          {
-            int const x_206 = j;
-            j = as_type<int>((as_type<uint>(x_206) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_208 = i;
-          i = as_type<int>((as_type<uint>(x_208) + as_type<uint>(1)));
-        }
-      }
-      int const x_211 = p.x;
-      int const x_213 = p.y;
-      (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_211) + as_type<uint>(as_type<int>((as_type<uint>(x_213) * as_type<uint>(16))))))] = 1;
-    } else {
-      int const x_217 = v;
-      int const x_218 = directions;
-      d = (x_217 % x_218);
-      int const x_220 = directions;
-      int const x_221 = v;
-      v = as_type<int>((as_type<uint>(x_221) + as_type<uint>(x_220)));
-      int const x_223 = d;
-      bool const x_224 = (x_223 >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        int const x_228 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      bool const x_230 = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        int const x_234 = p.x;
-        int const x_237 = p.y;
-        int const x_241 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_234) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_237) * as_type<uint>(16))))))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      bool const x_243 = x_243_phi;
-      if (x_243) {
-        int const x_246 = d;
-        d = as_type<int>((as_type<uint>(x_246) - as_type<uint>(1)));
-        int const x_249 = p.x;
-        int const x_251 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_249) + as_type<uint>(as_type<int>((as_type<uint>(x_251) * as_type<uint>(16))))))] = 1;
-        int const x_256 = p.x;
-        int const x_259 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_256) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_259) * as_type<uint>(16))))))] = 1;
-        int const x_264 = p.x;
-        int const x_267 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_264) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_267) * as_type<uint>(16))))))] = 1;
-        int const x_272 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_272) - as_type<uint>(2)));
-      }
-      int const x_275 = d;
-      bool const x_276 = (x_275 >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        int const x_280 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      bool const x_282 = x_282_phi;
-      if (x_282) {
-        x_288 = p.x;
-        x_290_phi = x_288;
-      } else {
-        x_289 = 0;
-        x_290_phi = x_289;
-      }
-      int const x_290 = x_290_phi;
-      if (x_282) {
-        x_295 = p.y;
-        x_297_phi = x_295;
-      } else {
-        x_296 = 0;
-        x_297_phi = x_296;
-      }
-      int const x_297 = x_297_phi;
-      int const x_299 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_297) - as_type<uint>(2)))) * as_type<uint>(16)));
-      if (x_282) {
-        x_303 = *(tint_symbol_7);
-        x_305_phi = x_303;
-      } else {
-        tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        x_304 = tint_symbol_2;
-        x_305_phi = x_304;
-      }
-      tint_array_wrapper const x_305 = x_305_phi;
-      if (x_282) {
-        tint_array_wrapper const tint_symbol_3 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        *(tint_symbol_7) = tint_symbol_3;
-      }
-      if (x_282) {
-        *(tint_symbol_7) = x_305;
-      }
-      if (x_282) {
-        x_315 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_290) + as_type<uint>(x_299)))];
-        x_317_phi = x_315;
-      } else {
-        x_316 = 0;
-        x_317_phi = x_316;
-      }
-      int const x_317 = x_317_phi;
-      bool const x_318 = (x_317 == 0);
-      if (select(x_282, x_318, x_282)) {
-        int const x_323 = d;
-        d = as_type<int>((as_type<uint>(x_323) - as_type<uint>(1)));
-        int const x_326 = p.x;
-        int const x_328 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_326) + as_type<uint>(as_type<int>((as_type<uint>(x_328) * as_type<uint>(16))))))] = 1;
-        int const x_333 = p.x;
-        int const x_335 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_333) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_335) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_341 = p.x;
-        int const x_343 = p.y;
-        tint_array_wrapper const x_345 = *(tint_symbol_7);
-        tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        *(tint_symbol_7) = tint_symbol_4;
-        *(tint_symbol_7) = x_345;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_341) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_343) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_350 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_350) - as_type<uint>(2)));
-      }
-      int const x_353 = d;
-      bool const x_354 = (x_353 >= 0);
-      x_360_phi = x_354;
-      if (x_354) {
-        int const x_358 = p.x;
-        x_359 = (x_358 < 14);
-        x_360_phi = x_359;
-      }
-      bool const x_360 = x_360_phi;
-      x_373_phi = x_360;
-      if (x_360) {
-        int const x_364 = p.x;
-        int const x_367 = p.y;
-        int const x_371 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_364) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_367) * as_type<uint>(16))))))];
-        x_372 = (x_371 == 0);
-        x_373_phi = x_372;
-      }
-      bool const x_373 = x_373_phi;
-      if (x_373) {
-        int const x_376 = d;
-        d = as_type<int>((as_type<uint>(x_376) - as_type<uint>(1)));
-        int const x_379 = p.x;
-        int const x_381 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_379) + as_type<uint>(as_type<int>((as_type<uint>(x_381) * as_type<uint>(16))))))] = 1;
-        int const x_386 = p.x;
-        int const x_389 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_386) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_389) * as_type<uint>(16))))))] = 1;
-        int const x_394 = p.x;
-        int const x_397 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_394) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_397) * as_type<uint>(16))))))] = 1;
-        int const x_402 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_402) + as_type<uint>(2)));
-      }
-      int const x_405 = d;
-      bool const x_406 = (x_405 >= 0);
-      x_412_phi = x_406;
-      if (x_406) {
-        int const x_410 = p.y;
-        x_411 = (x_410 < 14);
-        x_412_phi = x_411;
-      }
-      bool const x_412 = x_412_phi;
-      x_425_phi = x_412;
-      if (x_412) {
-        int const x_416 = p.x;
-        int const x_418 = p.y;
-        int const x_423 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_416) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_418) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_424 = (x_423 == 0);
-        x_425_phi = x_424;
-      }
-      bool const x_425 = x_425_phi;
-      if (x_425) {
-        int const x_428 = d;
-        d = as_type<int>((as_type<uint>(x_428) - as_type<uint>(1)));
-        int const x_431 = p.x;
-        int const x_433 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_431) + as_type<uint>(as_type<int>((as_type<uint>(x_433) * as_type<uint>(16))))))] = 1;
-        int const x_438 = p.x;
-        int const x_440 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_438) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_440) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_446 = p.x;
-        int const x_448 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_446) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_448) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_454 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_454) + as_type<uint>(2)));
-      }
-    }
-    int const x_458 = ipos.y;
-    int const x_461 = ipos.x;
-    int const x_464 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_458) * as_type<uint>(16)))) + as_type<uint>(x_461)))];
-    if ((x_464 == 1)) {
-      *(tint_symbol_8) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      bool const x_468 = canwalk;
-      if (x_468) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_8) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_9, tint_symbol_10, tint_symbol_11);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread tint_array_wrapper tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.spvasm
deleted file mode 100644
index de934f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,848 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 545
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %map "map"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %ipos "ipos"
-               OpName %i "i"
-               OpName %p "p"
-               OpName %canwalk "canwalk"
-               OpName %v "v"
-               OpName %directions "directions"
-               OpName %j "j"
-               OpName %d "d"
-               OpName %x_104 "x_104"
-               OpName %x_124 "x_124"
-               OpName %x_144 "x_144"
-               OpName %x_164 "x_164"
-               OpName %x_105_phi "x_105_phi"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_145_phi "x_145_phi"
-               OpName %x_165_phi "x_165_phi"
-               OpName %x_229 "x_229"
-               OpName %x_242 "x_242"
-               OpName %x_281 "x_281"
-               OpName %x_288 "x_288"
-               OpName %x_289 "x_289"
-               OpName %x_295 "x_295"
-               OpName %x_296 "x_296"
-               OpName %x_303 "x_303"
-               OpName %x_304 "x_304"
-               OpName %x_315 "x_315"
-               OpName %x_316 "x_316"
-               OpName %x_359 "x_359"
-               OpName %x_372 "x_372"
-               OpName %x_411 "x_411"
-               OpName %x_424 "x_424"
-               OpName %x_230_phi "x_230_phi"
-               OpName %x_243_phi "x_243_phi"
-               OpName %x_282_phi "x_282_phi"
-               OpName %x_290_phi "x_290_phi"
-               OpName %x_297_phi "x_297_phi"
-               OpName %x_305_phi "x_305_phi"
-               OpName %x_317_phi "x_317_phi"
-               OpName %x_360_phi "x_360_phi"
-               OpName %x_373_phi "x_373_phi"
-               OpName %x_412_phi "x_412_phi"
-               OpName %x_425_phi "x_425_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
-         %20 = OpConstantNull %_arr_int_uint_256
-        %map = OpVariable %_ptr_Private__arr_int_uint_256 Private %20
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %28 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %32 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %float_16 = OpConstant %float 16
-      %int_0 = OpConstant %int 0
-    %int_256 = OpConstant %int 256
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-         %83 = OpConstantComposite %v2int %int_0 %int_0
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-     %int_16 = OpConstant %int 16
-     %int_14 = OpConstant %int 14
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-      %false = OpConstantFalse %bool
-      %int_8 = OpConstant %int 8
-        %358 = OpConstantComposite %_arr_int_uint_256 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-    %float_1 = OpConstant %float 1
-        %528 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-        %531 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %532 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %28
-       %ipos = OpVariable %_ptr_Function_v2int Function %32
-          %i = OpVariable %_ptr_Function_int Function %35
-          %p = OpVariable %_ptr_Function_v2int Function %32
-    %canwalk = OpVariable %_ptr_Function_bool Function %40
-          %v = OpVariable %_ptr_Function_int Function %35
- %directions = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-          %d = OpVariable %_ptr_Function_int Function %35
-      %x_104 = OpVariable %_ptr_Function_bool Function %40
-      %x_124 = OpVariable %_ptr_Function_bool Function %40
-      %x_144 = OpVariable %_ptr_Function_bool Function %40
-      %x_164 = OpVariable %_ptr_Function_bool Function %40
-  %x_105_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_125_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_145_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_165_phi = OpVariable %_ptr_Function_bool Function %40
-      %x_229 = OpVariable %_ptr_Function_bool Function %40
-      %x_242 = OpVariable %_ptr_Function_bool Function %40
-      %x_281 = OpVariable %_ptr_Function_bool Function %40
-      %x_288 = OpVariable %_ptr_Function_int Function %35
-      %x_289 = OpVariable %_ptr_Function_int Function %35
-      %x_295 = OpVariable %_ptr_Function_int Function %35
-      %x_296 = OpVariable %_ptr_Function_int Function %35
-      %x_303 = OpVariable %_ptr_Function__arr_int_uint_256 Function %20
-      %x_304 = OpVariable %_ptr_Function__arr_int_uint_256 Function %20
-      %x_315 = OpVariable %_ptr_Function_int Function %35
-      %x_316 = OpVariable %_ptr_Function_int Function %35
-      %x_359 = OpVariable %_ptr_Function_bool Function %40
-      %x_372 = OpVariable %_ptr_Function_bool Function %40
-      %x_411 = OpVariable %_ptr_Function_bool Function %40
-      %x_424 = OpVariable %_ptr_Function_bool Function %40
-  %x_230_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_243_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_282_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_290_phi = OpVariable %_ptr_Function_int Function %35
-  %x_297_phi = OpVariable %_ptr_Function_int Function %35
-  %x_305_phi = OpVariable %_ptr_Function__arr_int_uint_256 Function %20
-  %x_317_phi = OpVariable %_ptr_Function_int Function %35
-  %x_360_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_373_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_412_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_425_phi = OpVariable %_ptr_Function_bool Function %40
-         %45 = OpLoad %v4float %gl_FragCoord
-         %48 = OpAccessChain %_ptr_Uniform_v2float %x_7 %uint_0
-         %49 = OpLoad %v2float %48
-         %50 = OpCompositeExtract %float %45 0
-         %51 = OpCompositeExtract %float %45 1
-         %52 = OpCompositeConstruct %v2float %50 %51
-         %53 = OpFDiv %v2float %52 %49
-               OpStore %pos %53
-         %55 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %59 = OpLoad %float %58
-         %62 = OpFMul %float %56 %float_16
-         %60 = OpConvertFToS %int %62
-         %64 = OpFMul %float %59 %float_16
-         %63 = OpConvertFToS %int %64
-         %65 = OpCompositeConstruct %v2int %60 %63
-               OpStore %ipos %65
-               OpStore %i %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %73 = OpSLessThan %bool %71 %int_256
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %68
-         %74 = OpLabel
-         %77 = OpLoad %int %i
-         %79 = OpAccessChain %_ptr_Private_int %map %77
-               OpStore %79 %int_0
-               OpBranch %69
-         %69 = OpLabel
-         %80 = OpLoad %int %i
-         %82 = OpIAdd %int %80 %int_1
-               OpStore %i %82
-               OpBranch %67
-         %68 = OpLabel
-               OpStore %p %83
-               OpStore %canwalk %true
-               OpStore %v %int_0
-               OpBranch %85
-         %85 = OpLabel
-               OpLoopMerge %86 %87 None
-               OpBranch %88
-         %88 = OpLabel
-         %97 = OpLoad %int %v
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %v %98
-               OpStore %directions %int_0
-         %99 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %100 = OpLoad %int %99
-        %101 = OpSGreaterThan %bool %100 %int_0
-               OpStore %x_105_phi %101
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %107 = OpLoad %int %106
-        %109 = OpISub %int %105 %int_2
-        %111 = OpIMul %int %107 %int_16
-        %112 = OpIAdd %int %109 %111
-        %113 = OpAccessChain %_ptr_Private_int %map %112
-        %114 = OpLoad %int %113
-        %115 = OpIEqual %bool %114 %int_0
-               OpStore %x_104 %115
-        %116 = OpLoad %bool %x_104
-               OpStore %x_105_phi %116
-               OpBranch %102
-        %102 = OpLabel
-        %117 = OpLoad %bool %x_105_phi
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpLoad %int %directions
-        %121 = OpIAdd %int %120 %int_1
-               OpStore %directions %121
-               OpBranch %118
-        %118 = OpLabel
-        %122 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %123 = OpLoad %int %122
-        %124 = OpSGreaterThan %bool %123 %int_0
-               OpStore %x_125_phi %124
-               OpSelectionMerge %125 None
-               OpBranchConditional %124 %126 %125
-        %126 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %130 = OpLoad %int %129
-        %131 = OpISub %int %130 %int_2
-        %132 = OpIMul %int %131 %int_16
-        %133 = OpIAdd %int %128 %132
-        %134 = OpAccessChain %_ptr_Private_int %map %133
-        %135 = OpLoad %int %134
-        %136 = OpIEqual %bool %135 %int_0
-               OpStore %x_124 %136
-        %137 = OpLoad %bool %x_124
-               OpStore %x_125_phi %137
-               OpBranch %125
-        %125 = OpLabel
-        %138 = OpLoad %bool %x_125_phi
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %int %directions
-        %142 = OpIAdd %int %141 %int_1
-               OpStore %directions %142
-               OpBranch %139
-        %139 = OpLabel
-        %143 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %144 = OpLoad %int %143
-        %146 = OpSLessThan %bool %144 %int_14
-               OpStore %x_145_phi %146
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-        %149 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %150 = OpLoad %int %149
-        %151 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %152 = OpLoad %int %151
-        %153 = OpIAdd %int %150 %int_2
-        %154 = OpIMul %int %152 %int_16
-        %155 = OpIAdd %int %153 %154
-        %156 = OpAccessChain %_ptr_Private_int %map %155
-        %157 = OpLoad %int %156
-        %158 = OpIEqual %bool %157 %int_0
-               OpStore %x_144 %158
-        %159 = OpLoad %bool %x_144
-               OpStore %x_145_phi %159
-               OpBranch %147
-        %147 = OpLabel
-        %160 = OpLoad %bool %x_145_phi
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %161
-        %162 = OpLabel
-        %163 = OpLoad %int %directions
-        %164 = OpIAdd %int %163 %int_1
-               OpStore %directions %164
-               OpBranch %161
-        %161 = OpLabel
-        %165 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %166 %int_14
-               OpStore %x_165_phi %167
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %168
-        %169 = OpLabel
-        %170 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %171 = OpLoad %int %170
-        %172 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %173 = OpLoad %int %172
-        %174 = OpIAdd %int %173 %int_2
-        %175 = OpIMul %int %174 %int_16
-        %176 = OpIAdd %int %171 %175
-        %177 = OpAccessChain %_ptr_Private_int %map %176
-        %178 = OpLoad %int %177
-        %179 = OpIEqual %bool %178 %int_0
-               OpStore %x_164 %179
-        %180 = OpLoad %bool %x_164
-               OpStore %x_165_phi %180
-               OpBranch %168
-        %168 = OpLabel
-        %181 = OpLoad %bool %x_165_phi
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %directions
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %directions %185
-               OpBranch %182
-        %182 = OpLabel
-        %213 = OpLoad %int %directions
-        %214 = OpIEqual %bool %213 %int_0
-               OpSelectionMerge %215 None
-               OpBranchConditional %214 %216 %217
-        %216 = OpLabel
-               OpStore %canwalk %false
-               OpStore %i %int_0
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %223 = OpLoad %int %i
-        %225 = OpSLessThan %bool %223 %int_8
-               OpSelectionMerge %226 None
-               OpBranchConditional %225 %227 %228
-        %227 = OpLabel
-               OpBranch %226
-        %228 = OpLabel
-               OpBranch %220
-        %226 = OpLabel
-               OpStore %j %int_0
-               OpBranch %229
-        %229 = OpLabel
-               OpLoopMerge %230 %231 None
-               OpBranch %232
-        %232 = OpLabel
-        %233 = OpLoad %int %j
-        %234 = OpSLessThan %bool %233 %int_8
-               OpSelectionMerge %235 None
-               OpBranchConditional %234 %236 %237
-        %236 = OpLabel
-               OpBranch %235
-        %237 = OpLabel
-               OpBranch %230
-        %235 = OpLabel
-        %238 = OpLoad %int %j
-        %239 = OpLoad %int %i
-        %240 = OpIMul %int %238 %int_2
-        %241 = OpIMul %int %239 %int_2
-        %242 = OpIMul %int %241 %int_16
-        %243 = OpIAdd %int %240 %242
-        %244 = OpAccessChain %_ptr_Private_int %map %243
-        %245 = OpLoad %int %244
-        %246 = OpIEqual %bool %245 %int_0
-               OpSelectionMerge %247 None
-               OpBranchConditional %246 %248 %247
-        %248 = OpLabel
-        %249 = OpLoad %int %j
-        %250 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %251 = OpIMul %int %249 %int_2
-               OpStore %250 %251
-        %252 = OpLoad %int %i
-        %253 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %254 = OpIMul %int %252 %int_2
-               OpStore %253 %254
-               OpStore %canwalk %true
-               OpBranch %247
-        %247 = OpLabel
-               OpBranch %231
-        %231 = OpLabel
-        %255 = OpLoad %int %j
-        %256 = OpIAdd %int %255 %int_1
-               OpStore %j %256
-               OpBranch %229
-        %230 = OpLabel
-               OpBranch %221
-        %221 = OpLabel
-        %257 = OpLoad %int %i
-        %258 = OpIAdd %int %257 %int_1
-               OpStore %i %258
-               OpBranch %219
-        %220 = OpLabel
-        %259 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %260 = OpLoad %int %259
-        %261 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %262 = OpLoad %int %261
-        %263 = OpIMul %int %262 %int_16
-        %264 = OpIAdd %int %260 %263
-        %265 = OpAccessChain %_ptr_Private_int %map %264
-               OpStore %265 %int_1
-               OpBranch %215
-        %217 = OpLabel
-        %266 = OpLoad %int %v
-        %267 = OpLoad %int %directions
-        %268 = OpSMod %int %266 %267
-               OpStore %d %268
-        %269 = OpLoad %int %directions
-        %270 = OpLoad %int %v
-        %271 = OpIAdd %int %270 %269
-               OpStore %v %271
-        %272 = OpLoad %int %d
-        %273 = OpSGreaterThanEqual %bool %272 %int_0
-               OpStore %x_230_phi %273
-               OpSelectionMerge %274 None
-               OpBranchConditional %273 %275 %274
-        %275 = OpLabel
-        %276 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %277 = OpLoad %int %276
-        %278 = OpSGreaterThan %bool %277 %int_0
-               OpStore %x_229 %278
-        %279 = OpLoad %bool %x_229
-               OpStore %x_230_phi %279
-               OpBranch %274
-        %274 = OpLabel
-        %280 = OpLoad %bool %x_230_phi
-               OpStore %x_243_phi %280
-               OpSelectionMerge %281 None
-               OpBranchConditional %280 %282 %281
-        %282 = OpLabel
-        %283 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %284 = OpLoad %int %283
-        %285 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %286 = OpLoad %int %285
-        %287 = OpISub %int %284 %int_2
-        %288 = OpIMul %int %286 %int_16
-        %289 = OpIAdd %int %287 %288
-        %290 = OpAccessChain %_ptr_Private_int %map %289
-        %291 = OpLoad %int %290
-        %292 = OpIEqual %bool %291 %int_0
-               OpStore %x_242 %292
-        %293 = OpLoad %bool %x_242
-               OpStore %x_243_phi %293
-               OpBranch %281
-        %281 = OpLabel
-        %294 = OpLoad %bool %x_243_phi
-               OpSelectionMerge %295 None
-               OpBranchConditional %294 %296 %295
-        %296 = OpLabel
-        %297 = OpLoad %int %d
-        %298 = OpISub %int %297 %int_1
-               OpStore %d %298
-        %299 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %300 = OpLoad %int %299
-        %301 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %302 = OpLoad %int %301
-        %303 = OpIMul %int %302 %int_16
-        %304 = OpIAdd %int %300 %303
-        %305 = OpAccessChain %_ptr_Private_int %map %304
-               OpStore %305 %int_1
-        %306 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %307 = OpLoad %int %306
-        %308 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %309 = OpLoad %int %308
-        %310 = OpISub %int %307 %int_1
-        %311 = OpIMul %int %309 %int_16
-        %312 = OpIAdd %int %310 %311
-        %313 = OpAccessChain %_ptr_Private_int %map %312
-               OpStore %313 %int_1
-        %314 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %315 = OpLoad %int %314
-        %316 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %317 = OpLoad %int %316
-        %318 = OpISub %int %315 %int_2
-        %319 = OpIMul %int %317 %int_16
-        %320 = OpIAdd %int %318 %319
-        %321 = OpAccessChain %_ptr_Private_int %map %320
-               OpStore %321 %int_1
-        %322 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %323 = OpLoad %int %322
-        %324 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %325 = OpISub %int %323 %int_2
-               OpStore %324 %325
-               OpBranch %295
-        %295 = OpLabel
-        %326 = OpLoad %int %d
-        %327 = OpSGreaterThanEqual %bool %326 %int_0
-               OpStore %x_282_phi %327
-               OpSelectionMerge %328 None
-               OpBranchConditional %327 %329 %328
-        %329 = OpLabel
-        %330 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %331 = OpLoad %int %330
-        %332 = OpSGreaterThan %bool %331 %int_0
-               OpStore %x_281 %332
-        %333 = OpLoad %bool %x_281
-               OpStore %x_282_phi %333
-               OpBranch %328
-        %328 = OpLabel
-        %334 = OpLoad %bool %x_282_phi
-               OpSelectionMerge %335 None
-               OpBranchConditional %334 %336 %337
-        %336 = OpLabel
-        %338 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %339 = OpLoad %int %338
-               OpStore %x_288 %339
-        %340 = OpLoad %int %x_288
-               OpStore %x_290_phi %340
-               OpBranch %335
-        %337 = OpLabel
-               OpStore %x_289 %int_0
-        %341 = OpLoad %int %x_289
-               OpStore %x_290_phi %341
-               OpBranch %335
-        %335 = OpLabel
-        %342 = OpLoad %int %x_290_phi
-               OpSelectionMerge %343 None
-               OpBranchConditional %334 %344 %345
-        %344 = OpLabel
-        %346 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %347 = OpLoad %int %346
-               OpStore %x_295 %347
-        %348 = OpLoad %int %x_295
-               OpStore %x_297_phi %348
-               OpBranch %343
-        %345 = OpLabel
-               OpStore %x_296 %int_0
-        %349 = OpLoad %int %x_296
-               OpStore %x_297_phi %349
-               OpBranch %343
-        %343 = OpLabel
-        %350 = OpLoad %int %x_297_phi
-        %351 = OpISub %int %350 %int_2
-        %352 = OpIMul %int %351 %int_16
-               OpSelectionMerge %353 None
-               OpBranchConditional %334 %354 %355
-        %354 = OpLabel
-        %356 = OpLoad %_arr_int_uint_256 %map
-               OpStore %x_303 %356
-        %357 = OpLoad %_arr_int_uint_256 %x_303
-               OpStore %x_305_phi %357
-               OpBranch %353
-        %355 = OpLabel
-               OpStore %x_304 %358
-        %359 = OpLoad %_arr_int_uint_256 %x_304
-               OpStore %x_305_phi %359
-               OpBranch %353
-        %353 = OpLabel
-        %360 = OpLoad %_arr_int_uint_256 %x_305_phi
-               OpSelectionMerge %361 None
-               OpBranchConditional %334 %362 %361
-        %362 = OpLabel
-               OpStore %map %358
-               OpBranch %361
-        %361 = OpLabel
-               OpSelectionMerge %363 None
-               OpBranchConditional %334 %364 %363
-        %364 = OpLabel
-               OpStore %map %360
-               OpBranch %363
-        %363 = OpLabel
-               OpSelectionMerge %365 None
-               OpBranchConditional %334 %366 %367
-        %366 = OpLabel
-        %368 = OpIAdd %int %342 %352
-        %369 = OpAccessChain %_ptr_Private_int %map %368
-        %370 = OpLoad %int %369
-               OpStore %x_315 %370
-        %371 = OpLoad %int %x_315
-               OpStore %x_317_phi %371
-               OpBranch %365
-        %367 = OpLabel
-               OpStore %x_316 %int_0
-        %372 = OpLoad %int %x_316
-               OpStore %x_317_phi %372
-               OpBranch %365
-        %365 = OpLabel
-        %373 = OpLoad %int %x_317_phi
-        %374 = OpIEqual %bool %373 %int_0
-        %375 = OpSelect %bool %334 %374 %334
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %376
-        %377 = OpLabel
-        %378 = OpLoad %int %d
-        %379 = OpISub %int %378 %int_1
-               OpStore %d %379
-        %380 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %381 = OpLoad %int %380
-        %382 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %383 = OpLoad %int %382
-        %384 = OpIMul %int %383 %int_16
-        %385 = OpIAdd %int %381 %384
-        %386 = OpAccessChain %_ptr_Private_int %map %385
-               OpStore %386 %int_1
-        %387 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %388 = OpLoad %int %387
-        %389 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %390 = OpLoad %int %389
-        %391 = OpISub %int %390 %int_1
-        %392 = OpIMul %int %391 %int_16
-        %393 = OpIAdd %int %388 %392
-        %394 = OpAccessChain %_ptr_Private_int %map %393
-               OpStore %394 %int_1
-        %395 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %396 = OpLoad %int %395
-        %397 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %398 = OpLoad %int %397
-        %399 = OpLoad %_arr_int_uint_256 %map
-               OpStore %map %358
-               OpStore %map %399
-        %400 = OpISub %int %398 %int_2
-        %401 = OpIMul %int %400 %int_16
-        %402 = OpIAdd %int %396 %401
-        %403 = OpAccessChain %_ptr_Private_int %map %402
-               OpStore %403 %int_1
-        %404 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %405 = OpLoad %int %404
-        %406 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %407 = OpISub %int %405 %int_2
-               OpStore %406 %407
-               OpBranch %376
-        %376 = OpLabel
-        %408 = OpLoad %int %d
-        %409 = OpSGreaterThanEqual %bool %408 %int_0
-               OpStore %x_360_phi %409
-               OpSelectionMerge %410 None
-               OpBranchConditional %409 %411 %410
-        %411 = OpLabel
-        %412 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %413 = OpLoad %int %412
-        %414 = OpSLessThan %bool %413 %int_14
-               OpStore %x_359 %414
-        %415 = OpLoad %bool %x_359
-               OpStore %x_360_phi %415
-               OpBranch %410
-        %410 = OpLabel
-        %416 = OpLoad %bool %x_360_phi
-               OpStore %x_373_phi %416
-               OpSelectionMerge %417 None
-               OpBranchConditional %416 %418 %417
-        %418 = OpLabel
-        %419 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %420 = OpLoad %int %419
-        %421 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %422 = OpLoad %int %421
-        %423 = OpIAdd %int %420 %int_2
-        %424 = OpIMul %int %422 %int_16
-        %425 = OpIAdd %int %423 %424
-        %426 = OpAccessChain %_ptr_Private_int %map %425
-        %427 = OpLoad %int %426
-        %428 = OpIEqual %bool %427 %int_0
-               OpStore %x_372 %428
-        %429 = OpLoad %bool %x_372
-               OpStore %x_373_phi %429
-               OpBranch %417
-        %417 = OpLabel
-        %430 = OpLoad %bool %x_373_phi
-               OpSelectionMerge %431 None
-               OpBranchConditional %430 %432 %431
-        %432 = OpLabel
-        %433 = OpLoad %int %d
-        %434 = OpISub %int %433 %int_1
-               OpStore %d %434
-        %435 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %436 = OpLoad %int %435
-        %437 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %438 = OpLoad %int %437
-        %439 = OpIMul %int %438 %int_16
-        %440 = OpIAdd %int %436 %439
-        %441 = OpAccessChain %_ptr_Private_int %map %440
-               OpStore %441 %int_1
-        %442 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %443 = OpLoad %int %442
-        %444 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %445 = OpLoad %int %444
-        %446 = OpIAdd %int %443 %int_1
-        %447 = OpIMul %int %445 %int_16
-        %448 = OpIAdd %int %446 %447
-        %449 = OpAccessChain %_ptr_Private_int %map %448
-               OpStore %449 %int_1
-        %450 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %451 = OpLoad %int %450
-        %452 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %453 = OpLoad %int %452
-        %454 = OpIAdd %int %451 %int_2
-        %455 = OpIMul %int %453 %int_16
-        %456 = OpIAdd %int %454 %455
-        %457 = OpAccessChain %_ptr_Private_int %map %456
-               OpStore %457 %int_1
-        %458 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %459 = OpLoad %int %458
-        %460 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %461 = OpIAdd %int %459 %int_2
-               OpStore %460 %461
-               OpBranch %431
-        %431 = OpLabel
-        %462 = OpLoad %int %d
-        %463 = OpSGreaterThanEqual %bool %462 %int_0
-               OpStore %x_412_phi %463
-               OpSelectionMerge %464 None
-               OpBranchConditional %463 %465 %464
-        %465 = OpLabel
-        %466 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %467 = OpLoad %int %466
-        %468 = OpSLessThan %bool %467 %int_14
-               OpStore %x_411 %468
-        %469 = OpLoad %bool %x_411
-               OpStore %x_412_phi %469
-               OpBranch %464
-        %464 = OpLabel
-        %470 = OpLoad %bool %x_412_phi
-               OpStore %x_425_phi %470
-               OpSelectionMerge %471 None
-               OpBranchConditional %470 %472 %471
-        %472 = OpLabel
-        %473 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %474 = OpLoad %int %473
-        %475 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %476 = OpLoad %int %475
-        %477 = OpIAdd %int %476 %int_2
-        %478 = OpIMul %int %477 %int_16
-        %479 = OpIAdd %int %474 %478
-        %480 = OpAccessChain %_ptr_Private_int %map %479
-        %481 = OpLoad %int %480
-        %482 = OpIEqual %bool %481 %int_0
-               OpStore %x_424 %482
-        %483 = OpLoad %bool %x_424
-               OpStore %x_425_phi %483
-               OpBranch %471
-        %471 = OpLabel
-        %484 = OpLoad %bool %x_425_phi
-               OpSelectionMerge %485 None
-               OpBranchConditional %484 %486 %485
-        %486 = OpLabel
-        %487 = OpLoad %int %d
-        %488 = OpISub %int %487 %int_1
-               OpStore %d %488
-        %489 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %490 = OpLoad %int %489
-        %491 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %492 = OpLoad %int %491
-        %493 = OpIMul %int %492 %int_16
-        %494 = OpIAdd %int %490 %493
-        %495 = OpAccessChain %_ptr_Private_int %map %494
-               OpStore %495 %int_1
-        %496 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %497 = OpLoad %int %496
-        %498 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %499 = OpLoad %int %498
-        %500 = OpIAdd %int %499 %int_1
-        %501 = OpIMul %int %500 %int_16
-        %502 = OpIAdd %int %497 %501
-        %503 = OpAccessChain %_ptr_Private_int %map %502
-               OpStore %503 %int_1
-        %504 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %505 = OpLoad %int %504
-        %506 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %507 = OpLoad %int %506
-        %508 = OpIAdd %int %507 %int_2
-        %509 = OpIMul %int %508 %int_16
-        %510 = OpIAdd %int %505 %509
-        %511 = OpAccessChain %_ptr_Private_int %map %510
-               OpStore %511 %int_1
-        %512 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %513 = OpLoad %int %512
-        %514 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %515 = OpIAdd %int %513 %int_2
-               OpStore %514 %515
-               OpBranch %485
-        %485 = OpLabel
-               OpBranch %215
-        %215 = OpLabel
-        %516 = OpAccessChain %_ptr_Function_int %ipos %uint_1
-        %517 = OpLoad %int %516
-        %518 = OpAccessChain %_ptr_Function_int %ipos %uint_0
-        %519 = OpLoad %int %518
-        %520 = OpIMul %int %517 %int_16
-        %521 = OpIAdd %int %520 %519
-        %522 = OpAccessChain %_ptr_Private_int %map %521
-        %523 = OpLoad %int %522
-        %524 = OpIEqual %bool %523 %int_1
-               OpSelectionMerge %525 None
-               OpBranchConditional %524 %526 %525
-        %526 = OpLabel
-               OpStore %x_GLF_color %528
-               OpReturn
-        %525 = OpLabel
-               OpBranch %87
-         %87 = OpLabel
-        %529 = OpLoad %bool %canwalk
-               OpBranchConditional %529 %85 %86
-         %86 = OpLabel
-               OpStore %x_GLF_color %531
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %532
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %536 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %537 = OpFunctionCall %void %main_1
-        %538 = OpLoad %v4float %x_GLF_color
-        %539 = OpCompositeConstruct %main_out %538
-               OpReturnValue %539
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %541 = OpLabel
-        %543 = OpLoad %v4float %gl_FragCoord_param_1
-        %542 = OpFunctionCall %main_out %main_inner %543
-        %544 = OpCompositeExtract %v4float %542 0
-               OpStore %x_GLF_color_1_1 %544
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.wgsl
deleted file mode 100644
index 7636426..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,392 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> map : array<i32, 256>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var ipos : vec2<i32>;
-  var i : i32;
-  var p : vec2<i32>;
-  var canwalk : bool;
-  var v : i32;
-  var directions : i32;
-  var j : i32;
-  var d : i32;
-  let x_59 : vec4<f32> = gl_FragCoord;
-  let x_62 : vec2<f32> = x_7.resolution;
-  pos = (vec2<f32>(x_59.x, x_59.y) / x_62);
-  let x_65 : f32 = pos.x;
-  let x_69 : f32 = pos.y;
-  ipos = vec2<i32>(i32((x_65 * 16.0)), i32((x_69 * 16.0)));
-  i = 0;
-  loop {
-    let x_77 : i32 = i;
-    if ((x_77 < 256)) {
-    } else {
-      break;
-    }
-    let x_80 : i32 = i;
-    map[x_80] = 0;
-
-    continuing {
-      let x_82 : i32 = i;
-      i = (x_82 + 1);
-    }
-  }
-  p = vec2<i32>(0, 0);
-  canwalk = true;
-  v = 0;
-  loop {
-    var x_104 : bool;
-    var x_124 : bool;
-    var x_144 : bool;
-    var x_164 : bool;
-    var x_105_phi : bool;
-    var x_125_phi : bool;
-    var x_145_phi : bool;
-    var x_165_phi : bool;
-    let x_88 : i32 = v;
-    v = (x_88 + 1);
-    directions = 0;
-    let x_91 : i32 = p.x;
-    let x_92 : bool = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      let x_96 : i32 = p.x;
-      let x_99 : i32 = p.y;
-      let x_103 : i32 = map[((x_96 - 2) + (x_99 * 16))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    let x_105 : bool = x_105_phi;
-    if (x_105) {
-      let x_108 : i32 = directions;
-      directions = (x_108 + 1);
-    }
-    let x_111 : i32 = p.y;
-    let x_112 : bool = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      let x_116 : i32 = p.x;
-      let x_118 : i32 = p.y;
-      let x_123 : i32 = map[(x_116 + ((x_118 - 2) * 16))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    let x_125 : bool = x_125_phi;
-    if (x_125) {
-      let x_128 : i32 = directions;
-      directions = (x_128 + 1);
-    }
-    let x_131 : i32 = p.x;
-    let x_132 : bool = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      let x_136 : i32 = p.x;
-      let x_139 : i32 = p.y;
-      let x_143 : i32 = map[((x_136 + 2) + (x_139 * 16))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    let x_145 : bool = x_145_phi;
-    if (x_145) {
-      let x_148 : i32 = directions;
-      directions = (x_148 + 1);
-    }
-    let x_151 : i32 = p.y;
-    let x_152 : bool = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      let x_156 : i32 = p.x;
-      let x_158 : i32 = p.y;
-      let x_163 : i32 = map[(x_156 + ((x_158 + 2) * 16))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    let x_165 : bool = x_165_phi;
-    if (x_165) {
-      let x_168 : i32 = directions;
-      directions = (x_168 + 1);
-    }
-    var x_229 : bool;
-    var x_242 : bool;
-    var x_281 : bool;
-    var x_288 : i32;
-    var x_289 : i32;
-    var x_295 : i32;
-    var x_296 : i32;
-    var x_303 : array<i32, 256>;
-    var x_304 : array<i32, 256>;
-    var x_315 : i32;
-    var x_316 : i32;
-    var x_359 : bool;
-    var x_372 : bool;
-    var x_411 : bool;
-    var x_424 : bool;
-    var x_230_phi : bool;
-    var x_243_phi : bool;
-    var x_282_phi : bool;
-    var x_290_phi : i32;
-    var x_297_phi : i32;
-    var x_305_phi : array<i32, 256>;
-    var x_317_phi : i32;
-    var x_360_phi : bool;
-    var x_373_phi : bool;
-    var x_412_phi : bool;
-    var x_425_phi : bool;
-    let x_170 : i32 = directions;
-    if ((x_170 == 0)) {
-      canwalk = false;
-      i = 0;
-      loop {
-        let x_179 : i32 = i;
-        if ((x_179 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        loop {
-          let x_186 : i32 = j;
-          if ((x_186 < 8)) {
-          } else {
-            break;
-          }
-          let x_189 : i32 = j;
-          let x_191 : i32 = i;
-          let x_196 : i32 = map[((x_189 * 2) + ((x_191 * 2) * 16))];
-          if ((x_196 == 0)) {
-            let x_200 : i32 = j;
-            p.x = (x_200 * 2);
-            let x_203 : i32 = i;
-            p.y = (x_203 * 2);
-            canwalk = true;
-          }
-
-          continuing {
-            let x_206 : i32 = j;
-            j = (x_206 + 1);
-          }
-        }
-
-        continuing {
-          let x_208 : i32 = i;
-          i = (x_208 + 1);
-        }
-      }
-      let x_211 : i32 = p.x;
-      let x_213 : i32 = p.y;
-      map[(x_211 + (x_213 * 16))] = 1;
-    } else {
-      let x_217 : i32 = v;
-      let x_218 : i32 = directions;
-      d = (x_217 % x_218);
-      let x_220 : i32 = directions;
-      let x_221 : i32 = v;
-      v = (x_221 + x_220);
-      let x_223 : i32 = d;
-      let x_224 : bool = (x_223 >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        let x_228 : i32 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      let x_230 : bool = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        let x_234 : i32 = p.x;
-        let x_237 : i32 = p.y;
-        let x_241 : i32 = map[((x_234 - 2) + (x_237 * 16))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      let x_243 : bool = x_243_phi;
-      if (x_243) {
-        let x_246 : i32 = d;
-        d = (x_246 - 1);
-        let x_249 : i32 = p.x;
-        let x_251 : i32 = p.y;
-        map[(x_249 + (x_251 * 16))] = 1;
-        let x_256 : i32 = p.x;
-        let x_259 : i32 = p.y;
-        map[((x_256 - 1) + (x_259 * 16))] = 1;
-        let x_264 : i32 = p.x;
-        let x_267 : i32 = p.y;
-        map[((x_264 - 2) + (x_267 * 16))] = 1;
-        let x_272 : i32 = p.x;
-        p.x = (x_272 - 2);
-      }
-      let x_275 : i32 = d;
-      let x_276 : bool = (x_275 >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        let x_280 : i32 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      let x_282 : bool = x_282_phi;
-      if (x_282) {
-        x_288 = p.x;
-        x_290_phi = x_288;
-      } else {
-        x_289 = 0;
-        x_290_phi = x_289;
-      }
-      let x_290 : i32 = x_290_phi;
-      if (x_282) {
-        x_295 = p.y;
-        x_297_phi = x_295;
-      } else {
-        x_296 = 0;
-        x_297_phi = x_296;
-      }
-      let x_297 : i32 = x_297_phi;
-      let x_299 : i32 = ((x_297 - 2) * 16);
-      if (x_282) {
-        x_303 = map;
-        x_305_phi = x_303;
-      } else {
-        x_304 = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        x_305_phi = x_304;
-      }
-      let x_305 : array<i32, 256> = x_305_phi;
-      if (x_282) {
-        map = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-      }
-      if (x_282) {
-        map = x_305;
-      }
-      if (x_282) {
-        x_315 = map[(x_290 + x_299)];
-        x_317_phi = x_315;
-      } else {
-        x_316 = 0;
-        x_317_phi = x_316;
-      }
-      let x_317 : i32 = x_317_phi;
-      let x_318 : bool = (x_317 == 0);
-      if (select(x_282, x_318, x_282)) {
-        let x_323 : i32 = d;
-        d = (x_323 - 1);
-        let x_326 : i32 = p.x;
-        let x_328 : i32 = p.y;
-        map[(x_326 + (x_328 * 16))] = 1;
-        let x_333 : i32 = p.x;
-        let x_335 : i32 = p.y;
-        map[(x_333 + ((x_335 - 1) * 16))] = 1;
-        let x_341 : i32 = p.x;
-        let x_343 : i32 = p.y;
-        let x_345 : array<i32, 256> = map;
-        map = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        map = x_345;
-        map[(x_341 + ((x_343 - 2) * 16))] = 1;
-        let x_350 : i32 = p.y;
-        p.y = (x_350 - 2);
-      }
-      let x_353 : i32 = d;
-      let x_354 : bool = (x_353 >= 0);
-      x_360_phi = x_354;
-      if (x_354) {
-        let x_358 : i32 = p.x;
-        x_359 = (x_358 < 14);
-        x_360_phi = x_359;
-      }
-      let x_360 : bool = x_360_phi;
-      x_373_phi = x_360;
-      if (x_360) {
-        let x_364 : i32 = p.x;
-        let x_367 : i32 = p.y;
-        let x_371 : i32 = map[((x_364 + 2) + (x_367 * 16))];
-        x_372 = (x_371 == 0);
-        x_373_phi = x_372;
-      }
-      let x_373 : bool = x_373_phi;
-      if (x_373) {
-        let x_376 : i32 = d;
-        d = (x_376 - 1);
-        let x_379 : i32 = p.x;
-        let x_381 : i32 = p.y;
-        map[(x_379 + (x_381 * 16))] = 1;
-        let x_386 : i32 = p.x;
-        let x_389 : i32 = p.y;
-        map[((x_386 + 1) + (x_389 * 16))] = 1;
-        let x_394 : i32 = p.x;
-        let x_397 : i32 = p.y;
-        map[((x_394 + 2) + (x_397 * 16))] = 1;
-        let x_402 : i32 = p.x;
-        p.x = (x_402 + 2);
-      }
-      let x_405 : i32 = d;
-      let x_406 : bool = (x_405 >= 0);
-      x_412_phi = x_406;
-      if (x_406) {
-        let x_410 : i32 = p.y;
-        x_411 = (x_410 < 14);
-        x_412_phi = x_411;
-      }
-      let x_412 : bool = x_412_phi;
-      x_425_phi = x_412;
-      if (x_412) {
-        let x_416 : i32 = p.x;
-        let x_418 : i32 = p.y;
-        let x_423 : i32 = map[(x_416 + ((x_418 + 2) * 16))];
-        x_424 = (x_423 == 0);
-        x_425_phi = x_424;
-      }
-      let x_425 : bool = x_425_phi;
-      if (x_425) {
-        let x_428 : i32 = d;
-        d = (x_428 - 1);
-        let x_431 : i32 = p.x;
-        let x_433 : i32 = p.y;
-        map[(x_431 + (x_433 * 16))] = 1;
-        let x_438 : i32 = p.x;
-        let x_440 : i32 = p.y;
-        map[(x_438 + ((x_440 + 1) * 16))] = 1;
-        let x_446 : i32 = p.x;
-        let x_448 : i32 = p.y;
-        map[(x_446 + ((x_448 + 2) * 16))] = 1;
-        let x_454 : i32 = p.y;
-        p.y = (x_454 + 2);
-      }
-    }
-    let x_458 : i32 = ipos.y;
-    let x_461 : i32 = ipos.x;
-    let x_464 : i32 = map[((x_458 * 16) + x_461)];
-    if ((x_464 == 1)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      return;
-    }
-
-    continuing {
-      let x_468 : bool = canwalk;
-      if (x_468) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.hlsl
deleted file mode 100644
index 1c4efe4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,343 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static int map[256] = (int[256])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int i = 0;
-  int2 p = int2(0, 0);
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  const float4 x_59 = gl_FragCoord;
-  const float2 x_62 = asfloat(x_7[0].xy);
-  pos = (float2(x_59.x, x_59.y) / x_62);
-  const float x_65 = pos.x;
-  const float x_69 = pos.y;
-  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      map[i] = 0;
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_104 = false;
-    bool x_124 = false;
-    bool x_144 = false;
-    bool x_164 = false;
-    bool x_105_phi = false;
-    bool x_125_phi = false;
-    bool x_145_phi = false;
-    bool x_165_phi = false;
-    v = (v + 1);
-    directions = 0;
-    const int x_91 = p.x;
-    const bool x_92 = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      const int x_96 = p.x;
-      const int x_99 = p.y;
-      const int x_103 = map[((x_96 - 2) + (x_99 * 16))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    if (x_105_phi) {
-      directions = (directions + 1);
-    }
-    const int x_111 = p.y;
-    const bool x_112 = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      const int x_116 = p.x;
-      const int x_118 = p.y;
-      const int x_123 = map[(x_116 + ((x_118 - 2) * 16))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    if (x_125_phi) {
-      directions = (directions + 1);
-    }
-    const int x_131 = p.x;
-    const bool x_132 = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      const int x_136 = p.x;
-      const int x_139 = p.y;
-      const int x_143 = map[((x_136 + 2) + (x_139 * 16))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    if (x_145_phi) {
-      directions = (directions + 1);
-    }
-    const int x_151 = p.y;
-    const bool x_152 = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      const int x_156 = p.x;
-      const int x_158 = p.y;
-      const int x_163 = map[(x_156 + ((x_158 + 2) * 16))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    if (x_165_phi) {
-      directions = (directions + 1);
-    }
-    bool x_229 = false;
-    bool x_242 = false;
-    bool x_281 = false;
-    int x_288 = 0;
-    int x_289 = 0;
-    int x_295 = 0;
-    int x_296 = 0;
-    int x_303[256] = (int[256])0;
-    int x_304[256] = (int[256])0;
-    int x_315 = 0;
-    int x_316 = 0;
-    bool x_359 = false;
-    bool x_372 = false;
-    bool x_411 = false;
-    bool x_424 = false;
-    bool x_230_phi = false;
-    bool x_243_phi = false;
-    bool x_282_phi = false;
-    int x_290_phi = 0;
-    int x_297_phi = 0;
-    int x_305_phi[256] = (int[256])0;
-    int x_317_phi = 0;
-    bool x_360_phi = false;
-    bool x_373_phi = false;
-    bool x_412_phi = false;
-    bool x_425_phi = false;
-    if ((directions == 0)) {
-      canwalk = false;
-      i = 0;
-      {
-        for(; (i < 8); i = (i + 1)) {
-          j = 0;
-          {
-            for(; (j < 8); j = (j + 1)) {
-              const int x_196 = map[((j * 2) + ((i * 2) * 16))];
-              if ((x_196 == 0)) {
-                p.x = (j * 2);
-                p.y = (i * 2);
-                canwalk = true;
-              }
-            }
-          }
-        }
-      }
-      const int x_211 = p.x;
-      const int x_213 = p.y;
-      map[(x_211 + (x_213 * 16))] = 1;
-    } else {
-      d = (v % directions);
-      v = (v + directions);
-      const bool x_224 = (d >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        const int x_228 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      const bool x_230 = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        const int x_234 = p.x;
-        const int x_237 = p.y;
-        const int x_241 = map[((x_234 - 2) + (x_237 * 16))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      if (x_243_phi) {
-        d = (d - 1);
-        const int x_249 = p.x;
-        const int x_251 = p.y;
-        map[(x_249 + (x_251 * 16))] = 1;
-        const int x_256 = p.x;
-        const int x_259 = p.y;
-        map[((x_256 - 1) + (x_259 * 16))] = 1;
-        const int x_264 = p.x;
-        const int x_267 = p.y;
-        map[((x_264 - 2) + (x_267 * 16))] = 1;
-        const int x_272 = p.x;
-        p.x = (x_272 - 2);
-      }
-      const bool x_276 = (d >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        const int x_280 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      const bool x_282 = x_282_phi;
-      if (x_282) {
-        x_288 = p.x;
-        x_290_phi = x_288;
-      } else {
-        x_289 = 0;
-        x_290_phi = x_289;
-      }
-      const int x_290 = x_290_phi;
-      if (x_282) {
-        x_295 = p.y;
-        x_297_phi = x_295;
-      } else {
-        x_296 = 0;
-        x_297_phi = x_296;
-      }
-      const int x_299 = ((x_297_phi - 2) * 16);
-      if (x_282) {
-        x_303 = map;
-        x_305_phi = x_303;
-      } else {
-        const int tint_symbol_4[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        x_304 = tint_symbol_4;
-        x_305_phi = x_304;
-      }
-      const int x_305[256] = x_305_phi;
-      if (x_282) {
-        const int tint_symbol_5[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        map = tint_symbol_5;
-      }
-      if (x_282) {
-        map = x_305;
-      }
-      if (x_282) {
-        x_315 = map[(x_290 + x_299)];
-        x_317_phi = x_315;
-      } else {
-        x_316 = 0;
-        x_317_phi = x_316;
-      }
-      const bool x_318 = (x_317_phi == 0);
-      if ((x_282 ? x_318 : x_282)) {
-        d = (d - 1);
-        const int x_326 = p.x;
-        const int x_328 = p.y;
-        map[(x_326 + (x_328 * 16))] = 1;
-        const int x_333 = p.x;
-        const int x_335 = p.y;
-        map[(x_333 + ((x_335 - 1) * 16))] = 1;
-        const int x_341 = p.x;
-        const int x_343 = p.y;
-        const int x_345[256] = map;
-        const int tint_symbol_6[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        map = tint_symbol_6;
-        map = x_345;
-        map[(x_341 + ((x_343 - 2) * 16))] = 1;
-        const int x_350 = p.y;
-        p.y = (x_350 - 2);
-      }
-      const bool x_354 = (d >= 0);
-      x_360_phi = x_354;
-      if (x_354) {
-        const int x_358 = p.x;
-        x_359 = (x_358 < 14);
-        x_360_phi = x_359;
-      }
-      const bool x_360 = x_360_phi;
-      x_373_phi = x_360;
-      if (x_360) {
-        const int x_364 = p.x;
-        const int x_367 = p.y;
-        const int x_371 = map[((x_364 + 2) + (x_367 * 16))];
-        x_372 = (x_371 == 0);
-        x_373_phi = x_372;
-      }
-      if (x_373_phi) {
-        d = (d - 1);
-        const int x_379 = p.x;
-        const int x_381 = p.y;
-        map[(x_379 + (x_381 * 16))] = 1;
-        const int x_386 = p.x;
-        const int x_389 = p.y;
-        map[((x_386 + 1) + (x_389 * 16))] = 1;
-        const int x_394 = p.x;
-        const int x_397 = p.y;
-        map[((x_394 + 2) + (x_397 * 16))] = 1;
-        const int x_402 = p.x;
-        p.x = (x_402 + 2);
-      }
-      const bool x_406 = (d >= 0);
-      x_412_phi = x_406;
-      if (x_406) {
-        const int x_410 = p.y;
-        x_411 = (x_410 < 14);
-        x_412_phi = x_411;
-      }
-      const bool x_412 = x_412_phi;
-      x_425_phi = x_412;
-      if (x_412) {
-        const int x_416 = p.x;
-        const int x_418 = p.y;
-        const int x_423 = map[(x_416 + ((x_418 + 2) * 16))];
-        x_424 = (x_423 == 0);
-        x_425_phi = x_424;
-      }
-      if (x_425_phi) {
-        d = (d - 1);
-        const int x_431 = p.x;
-        const int x_433 = p.y;
-        map[(x_431 + (x_433 * 16))] = 1;
-        const int x_438 = p.x;
-        const int x_440 = p.y;
-        map[(x_438 + ((x_440 + 1) * 16))] = 1;
-        const int x_446 = p.x;
-        const int x_448 = p.y;
-        map[(x_446 + ((x_448 + 2) * 16))] = 1;
-        const int x_454 = p.y;
-        p.y = (x_454 + 2);
-      }
-    }
-    const int x_458 = ipos.y;
-    const int x_461 = ipos.x;
-    const int x_464 = map[((x_458 * 16) + x_461)];
-    if ((x_464 == 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      if (canwalk) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.msl
deleted file mode 100644
index 902b3c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.msl
+++ /dev/null
@@ -1,400 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  float2 pos = 0.0f;
-  int2 ipos = 0;
-  int i = 0;
-  int2 p = 0;
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  float4 const x_59 = *(tint_symbol_6);
-  float2 const x_62 = x_7.resolution;
-  pos = (float2(x_59.x, x_59.y) / x_62);
-  float const x_65 = pos.x;
-  float const x_69 = pos.y;
-  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
-  i = 0;
-  while (true) {
-    int const x_77 = i;
-    if ((x_77 < 256)) {
-    } else {
-      break;
-    }
-    int const x_80 = i;
-    (*(tint_symbol_7)).arr[x_80] = 0;
-    {
-      int const x_82 = i;
-      i = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_104 = false;
-    bool x_124 = false;
-    bool x_144 = false;
-    bool x_164 = false;
-    bool x_105_phi = false;
-    bool x_125_phi = false;
-    bool x_145_phi = false;
-    bool x_165_phi = false;
-    int const x_88 = v;
-    v = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    directions = 0;
-    int const x_91 = p.x;
-    bool const x_92 = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      int const x_96 = p.x;
-      int const x_99 = p.y;
-      int const x_103 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_96) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_99) * as_type<uint>(16))))))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    bool const x_105 = x_105_phi;
-    if (x_105) {
-      int const x_108 = directions;
-      directions = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-    }
-    int const x_111 = p.y;
-    bool const x_112 = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      int const x_116 = p.x;
-      int const x_118 = p.y;
-      int const x_123 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_116) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_118) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    bool const x_125 = x_125_phi;
-    if (x_125) {
-      int const x_128 = directions;
-      directions = as_type<int>((as_type<uint>(x_128) + as_type<uint>(1)));
-    }
-    int const x_131 = p.x;
-    bool const x_132 = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      int const x_136 = p.x;
-      int const x_139 = p.y;
-      int const x_143 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_139) * as_type<uint>(16))))))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    bool const x_145 = x_145_phi;
-    if (x_145) {
-      int const x_148 = directions;
-      directions = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-    }
-    int const x_151 = p.y;
-    bool const x_152 = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      int const x_156 = p.x;
-      int const x_158 = p.y;
-      int const x_163 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_156) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_158) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    bool const x_165 = x_165_phi;
-    if (x_165) {
-      int const x_168 = directions;
-      directions = as_type<int>((as_type<uint>(x_168) + as_type<uint>(1)));
-    }
-    bool x_229 = false;
-    bool x_242 = false;
-    bool x_281 = false;
-    int x_288 = 0;
-    int x_289 = 0;
-    int x_295 = 0;
-    int x_296 = 0;
-    tint_array_wrapper x_303 = {};
-    tint_array_wrapper x_304 = {};
-    int x_315 = 0;
-    int x_316 = 0;
-    bool x_359 = false;
-    bool x_372 = false;
-    bool x_411 = false;
-    bool x_424 = false;
-    bool x_230_phi = false;
-    bool x_243_phi = false;
-    bool x_282_phi = false;
-    int x_290_phi = 0;
-    int x_297_phi = 0;
-    tint_array_wrapper x_305_phi = {};
-    int x_317_phi = 0;
-    bool x_360_phi = false;
-    bool x_373_phi = false;
-    bool x_412_phi = false;
-    bool x_425_phi = false;
-    int const x_170 = directions;
-    if ((x_170 == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        int const x_179 = i;
-        if ((x_179 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        while (true) {
-          int const x_186 = j;
-          if ((x_186 < 8)) {
-          } else {
-            break;
-          }
-          int const x_189 = j;
-          int const x_191 = i;
-          int const x_196 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_189) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_191) * as_type<uint>(2)))) * as_type<uint>(16))))))];
-          if ((x_196 == 0)) {
-            int const x_200 = j;
-            p.x = as_type<int>((as_type<uint>(x_200) * as_type<uint>(2)));
-            int const x_203 = i;
-            p.y = as_type<int>((as_type<uint>(x_203) * as_type<uint>(2)));
-            canwalk = true;
-          }
-          {
-            int const x_206 = j;
-            j = as_type<int>((as_type<uint>(x_206) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_208 = i;
-          i = as_type<int>((as_type<uint>(x_208) + as_type<uint>(1)));
-        }
-      }
-      int const x_211 = p.x;
-      int const x_213 = p.y;
-      (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_211) + as_type<uint>(as_type<int>((as_type<uint>(x_213) * as_type<uint>(16))))))] = 1;
-    } else {
-      int const x_217 = v;
-      int const x_218 = directions;
-      d = (x_217 % x_218);
-      int const x_220 = directions;
-      int const x_221 = v;
-      v = as_type<int>((as_type<uint>(x_221) + as_type<uint>(x_220)));
-      int const x_223 = d;
-      bool const x_224 = (x_223 >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        int const x_228 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      bool const x_230 = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        int const x_234 = p.x;
-        int const x_237 = p.y;
-        int const x_241 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_234) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_237) * as_type<uint>(16))))))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      bool const x_243 = x_243_phi;
-      if (x_243) {
-        int const x_246 = d;
-        d = as_type<int>((as_type<uint>(x_246) - as_type<uint>(1)));
-        int const x_249 = p.x;
-        int const x_251 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_249) + as_type<uint>(as_type<int>((as_type<uint>(x_251) * as_type<uint>(16))))))] = 1;
-        int const x_256 = p.x;
-        int const x_259 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_256) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_259) * as_type<uint>(16))))))] = 1;
-        int const x_264 = p.x;
-        int const x_267 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_264) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_267) * as_type<uint>(16))))))] = 1;
-        int const x_272 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_272) - as_type<uint>(2)));
-      }
-      int const x_275 = d;
-      bool const x_276 = (x_275 >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        int const x_280 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      bool const x_282 = x_282_phi;
-      if (x_282) {
-        x_288 = p.x;
-        x_290_phi = x_288;
-      } else {
-        x_289 = 0;
-        x_290_phi = x_289;
-      }
-      int const x_290 = x_290_phi;
-      if (x_282) {
-        x_295 = p.y;
-        x_297_phi = x_295;
-      } else {
-        x_296 = 0;
-        x_297_phi = x_296;
-      }
-      int const x_297 = x_297_phi;
-      int const x_299 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_297) - as_type<uint>(2)))) * as_type<uint>(16)));
-      if (x_282) {
-        x_303 = *(tint_symbol_7);
-        x_305_phi = x_303;
-      } else {
-        tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        x_304 = tint_symbol_2;
-        x_305_phi = x_304;
-      }
-      tint_array_wrapper const x_305 = x_305_phi;
-      if (x_282) {
-        tint_array_wrapper const tint_symbol_3 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        *(tint_symbol_7) = tint_symbol_3;
-      }
-      if (x_282) {
-        *(tint_symbol_7) = x_305;
-      }
-      if (x_282) {
-        x_315 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_290) + as_type<uint>(x_299)))];
-        x_317_phi = x_315;
-      } else {
-        x_316 = 0;
-        x_317_phi = x_316;
-      }
-      int const x_317 = x_317_phi;
-      bool const x_318 = (x_317 == 0);
-      if (select(x_282, x_318, x_282)) {
-        int const x_323 = d;
-        d = as_type<int>((as_type<uint>(x_323) - as_type<uint>(1)));
-        int const x_326 = p.x;
-        int const x_328 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_326) + as_type<uint>(as_type<int>((as_type<uint>(x_328) * as_type<uint>(16))))))] = 1;
-        int const x_333 = p.x;
-        int const x_335 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_333) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_335) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_341 = p.x;
-        int const x_343 = p.y;
-        tint_array_wrapper const x_345 = *(tint_symbol_7);
-        tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        *(tint_symbol_7) = tint_symbol_4;
-        *(tint_symbol_7) = x_345;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_341) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_343) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_350 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_350) - as_type<uint>(2)));
-      }
-      int const x_353 = d;
-      bool const x_354 = (x_353 >= 0);
-      x_360_phi = x_354;
-      if (x_354) {
-        int const x_358 = p.x;
-        x_359 = (x_358 < 14);
-        x_360_phi = x_359;
-      }
-      bool const x_360 = x_360_phi;
-      x_373_phi = x_360;
-      if (x_360) {
-        int const x_364 = p.x;
-        int const x_367 = p.y;
-        int const x_371 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_364) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_367) * as_type<uint>(16))))))];
-        x_372 = (x_371 == 0);
-        x_373_phi = x_372;
-      }
-      bool const x_373 = x_373_phi;
-      if (x_373) {
-        int const x_376 = d;
-        d = as_type<int>((as_type<uint>(x_376) - as_type<uint>(1)));
-        int const x_379 = p.x;
-        int const x_381 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_379) + as_type<uint>(as_type<int>((as_type<uint>(x_381) * as_type<uint>(16))))))] = 1;
-        int const x_386 = p.x;
-        int const x_389 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_386) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_389) * as_type<uint>(16))))))] = 1;
-        int const x_394 = p.x;
-        int const x_397 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_394) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_397) * as_type<uint>(16))))))] = 1;
-        int const x_402 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_402) + as_type<uint>(2)));
-      }
-      int const x_405 = d;
-      bool const x_406 = (x_405 >= 0);
-      x_412_phi = x_406;
-      if (x_406) {
-        int const x_410 = p.y;
-        x_411 = (x_410 < 14);
-        x_412_phi = x_411;
-      }
-      bool const x_412 = x_412_phi;
-      x_425_phi = x_412;
-      if (x_412) {
-        int const x_416 = p.x;
-        int const x_418 = p.y;
-        int const x_423 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_416) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_418) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_424 = (x_423 == 0);
-        x_425_phi = x_424;
-      }
-      bool const x_425 = x_425_phi;
-      if (x_425) {
-        int const x_428 = d;
-        d = as_type<int>((as_type<uint>(x_428) - as_type<uint>(1)));
-        int const x_431 = p.x;
-        int const x_433 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_431) + as_type<uint>(as_type<int>((as_type<uint>(x_433) * as_type<uint>(16))))))] = 1;
-        int const x_438 = p.x;
-        int const x_440 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_438) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_440) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_446 = p.x;
-        int const x_448 = p.y;
-        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_446) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_448) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_454 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_454) + as_type<uint>(2)));
-      }
-    }
-    int const x_458 = ipos.y;
-    int const x_461 = ipos.x;
-    int const x_464 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_458) * as_type<uint>(16)))) + as_type<uint>(x_461)))];
-    if ((x_464 == 1)) {
-      *(tint_symbol_8) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      bool const x_468 = canwalk;
-      if (x_468) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_8) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_9, tint_symbol_10, tint_symbol_11);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread tint_array_wrapper tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.spvasm
deleted file mode 100644
index de934f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,848 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 545
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %map "map"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %ipos "ipos"
-               OpName %i "i"
-               OpName %p "p"
-               OpName %canwalk "canwalk"
-               OpName %v "v"
-               OpName %directions "directions"
-               OpName %j "j"
-               OpName %d "d"
-               OpName %x_104 "x_104"
-               OpName %x_124 "x_124"
-               OpName %x_144 "x_144"
-               OpName %x_164 "x_164"
-               OpName %x_105_phi "x_105_phi"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_145_phi "x_145_phi"
-               OpName %x_165_phi "x_165_phi"
-               OpName %x_229 "x_229"
-               OpName %x_242 "x_242"
-               OpName %x_281 "x_281"
-               OpName %x_288 "x_288"
-               OpName %x_289 "x_289"
-               OpName %x_295 "x_295"
-               OpName %x_296 "x_296"
-               OpName %x_303 "x_303"
-               OpName %x_304 "x_304"
-               OpName %x_315 "x_315"
-               OpName %x_316 "x_316"
-               OpName %x_359 "x_359"
-               OpName %x_372 "x_372"
-               OpName %x_411 "x_411"
-               OpName %x_424 "x_424"
-               OpName %x_230_phi "x_230_phi"
-               OpName %x_243_phi "x_243_phi"
-               OpName %x_282_phi "x_282_phi"
-               OpName %x_290_phi "x_290_phi"
-               OpName %x_297_phi "x_297_phi"
-               OpName %x_305_phi "x_305_phi"
-               OpName %x_317_phi "x_317_phi"
-               OpName %x_360_phi "x_360_phi"
-               OpName %x_373_phi "x_373_phi"
-               OpName %x_412_phi "x_412_phi"
-               OpName %x_425_phi "x_425_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
-         %20 = OpConstantNull %_arr_int_uint_256
-        %map = OpVariable %_ptr_Private__arr_int_uint_256 Private %20
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %28 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %32 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %float_16 = OpConstant %float 16
-      %int_0 = OpConstant %int 0
-    %int_256 = OpConstant %int 256
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-         %83 = OpConstantComposite %v2int %int_0 %int_0
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-     %int_16 = OpConstant %int 16
-     %int_14 = OpConstant %int 14
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-      %false = OpConstantFalse %bool
-      %int_8 = OpConstant %int 8
-        %358 = OpConstantComposite %_arr_int_uint_256 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-    %float_1 = OpConstant %float 1
-        %528 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-        %531 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %532 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %28
-       %ipos = OpVariable %_ptr_Function_v2int Function %32
-          %i = OpVariable %_ptr_Function_int Function %35
-          %p = OpVariable %_ptr_Function_v2int Function %32
-    %canwalk = OpVariable %_ptr_Function_bool Function %40
-          %v = OpVariable %_ptr_Function_int Function %35
- %directions = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-          %d = OpVariable %_ptr_Function_int Function %35
-      %x_104 = OpVariable %_ptr_Function_bool Function %40
-      %x_124 = OpVariable %_ptr_Function_bool Function %40
-      %x_144 = OpVariable %_ptr_Function_bool Function %40
-      %x_164 = OpVariable %_ptr_Function_bool Function %40
-  %x_105_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_125_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_145_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_165_phi = OpVariable %_ptr_Function_bool Function %40
-      %x_229 = OpVariable %_ptr_Function_bool Function %40
-      %x_242 = OpVariable %_ptr_Function_bool Function %40
-      %x_281 = OpVariable %_ptr_Function_bool Function %40
-      %x_288 = OpVariable %_ptr_Function_int Function %35
-      %x_289 = OpVariable %_ptr_Function_int Function %35
-      %x_295 = OpVariable %_ptr_Function_int Function %35
-      %x_296 = OpVariable %_ptr_Function_int Function %35
-      %x_303 = OpVariable %_ptr_Function__arr_int_uint_256 Function %20
-      %x_304 = OpVariable %_ptr_Function__arr_int_uint_256 Function %20
-      %x_315 = OpVariable %_ptr_Function_int Function %35
-      %x_316 = OpVariable %_ptr_Function_int Function %35
-      %x_359 = OpVariable %_ptr_Function_bool Function %40
-      %x_372 = OpVariable %_ptr_Function_bool Function %40
-      %x_411 = OpVariable %_ptr_Function_bool Function %40
-      %x_424 = OpVariable %_ptr_Function_bool Function %40
-  %x_230_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_243_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_282_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_290_phi = OpVariable %_ptr_Function_int Function %35
-  %x_297_phi = OpVariable %_ptr_Function_int Function %35
-  %x_305_phi = OpVariable %_ptr_Function__arr_int_uint_256 Function %20
-  %x_317_phi = OpVariable %_ptr_Function_int Function %35
-  %x_360_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_373_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_412_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_425_phi = OpVariable %_ptr_Function_bool Function %40
-         %45 = OpLoad %v4float %gl_FragCoord
-         %48 = OpAccessChain %_ptr_Uniform_v2float %x_7 %uint_0
-         %49 = OpLoad %v2float %48
-         %50 = OpCompositeExtract %float %45 0
-         %51 = OpCompositeExtract %float %45 1
-         %52 = OpCompositeConstruct %v2float %50 %51
-         %53 = OpFDiv %v2float %52 %49
-               OpStore %pos %53
-         %55 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %59 = OpLoad %float %58
-         %62 = OpFMul %float %56 %float_16
-         %60 = OpConvertFToS %int %62
-         %64 = OpFMul %float %59 %float_16
-         %63 = OpConvertFToS %int %64
-         %65 = OpCompositeConstruct %v2int %60 %63
-               OpStore %ipos %65
-               OpStore %i %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %73 = OpSLessThan %bool %71 %int_256
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %68
-         %74 = OpLabel
-         %77 = OpLoad %int %i
-         %79 = OpAccessChain %_ptr_Private_int %map %77
-               OpStore %79 %int_0
-               OpBranch %69
-         %69 = OpLabel
-         %80 = OpLoad %int %i
-         %82 = OpIAdd %int %80 %int_1
-               OpStore %i %82
-               OpBranch %67
-         %68 = OpLabel
-               OpStore %p %83
-               OpStore %canwalk %true
-               OpStore %v %int_0
-               OpBranch %85
-         %85 = OpLabel
-               OpLoopMerge %86 %87 None
-               OpBranch %88
-         %88 = OpLabel
-         %97 = OpLoad %int %v
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %v %98
-               OpStore %directions %int_0
-         %99 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %100 = OpLoad %int %99
-        %101 = OpSGreaterThan %bool %100 %int_0
-               OpStore %x_105_phi %101
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %107 = OpLoad %int %106
-        %109 = OpISub %int %105 %int_2
-        %111 = OpIMul %int %107 %int_16
-        %112 = OpIAdd %int %109 %111
-        %113 = OpAccessChain %_ptr_Private_int %map %112
-        %114 = OpLoad %int %113
-        %115 = OpIEqual %bool %114 %int_0
-               OpStore %x_104 %115
-        %116 = OpLoad %bool %x_104
-               OpStore %x_105_phi %116
-               OpBranch %102
-        %102 = OpLabel
-        %117 = OpLoad %bool %x_105_phi
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpLoad %int %directions
-        %121 = OpIAdd %int %120 %int_1
-               OpStore %directions %121
-               OpBranch %118
-        %118 = OpLabel
-        %122 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %123 = OpLoad %int %122
-        %124 = OpSGreaterThan %bool %123 %int_0
-               OpStore %x_125_phi %124
-               OpSelectionMerge %125 None
-               OpBranchConditional %124 %126 %125
-        %126 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %130 = OpLoad %int %129
-        %131 = OpISub %int %130 %int_2
-        %132 = OpIMul %int %131 %int_16
-        %133 = OpIAdd %int %128 %132
-        %134 = OpAccessChain %_ptr_Private_int %map %133
-        %135 = OpLoad %int %134
-        %136 = OpIEqual %bool %135 %int_0
-               OpStore %x_124 %136
-        %137 = OpLoad %bool %x_124
-               OpStore %x_125_phi %137
-               OpBranch %125
-        %125 = OpLabel
-        %138 = OpLoad %bool %x_125_phi
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %int %directions
-        %142 = OpIAdd %int %141 %int_1
-               OpStore %directions %142
-               OpBranch %139
-        %139 = OpLabel
-        %143 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %144 = OpLoad %int %143
-        %146 = OpSLessThan %bool %144 %int_14
-               OpStore %x_145_phi %146
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-        %149 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %150 = OpLoad %int %149
-        %151 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %152 = OpLoad %int %151
-        %153 = OpIAdd %int %150 %int_2
-        %154 = OpIMul %int %152 %int_16
-        %155 = OpIAdd %int %153 %154
-        %156 = OpAccessChain %_ptr_Private_int %map %155
-        %157 = OpLoad %int %156
-        %158 = OpIEqual %bool %157 %int_0
-               OpStore %x_144 %158
-        %159 = OpLoad %bool %x_144
-               OpStore %x_145_phi %159
-               OpBranch %147
-        %147 = OpLabel
-        %160 = OpLoad %bool %x_145_phi
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %161
-        %162 = OpLabel
-        %163 = OpLoad %int %directions
-        %164 = OpIAdd %int %163 %int_1
-               OpStore %directions %164
-               OpBranch %161
-        %161 = OpLabel
-        %165 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %166 %int_14
-               OpStore %x_165_phi %167
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %168
-        %169 = OpLabel
-        %170 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %171 = OpLoad %int %170
-        %172 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %173 = OpLoad %int %172
-        %174 = OpIAdd %int %173 %int_2
-        %175 = OpIMul %int %174 %int_16
-        %176 = OpIAdd %int %171 %175
-        %177 = OpAccessChain %_ptr_Private_int %map %176
-        %178 = OpLoad %int %177
-        %179 = OpIEqual %bool %178 %int_0
-               OpStore %x_164 %179
-        %180 = OpLoad %bool %x_164
-               OpStore %x_165_phi %180
-               OpBranch %168
-        %168 = OpLabel
-        %181 = OpLoad %bool %x_165_phi
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %directions
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %directions %185
-               OpBranch %182
-        %182 = OpLabel
-        %213 = OpLoad %int %directions
-        %214 = OpIEqual %bool %213 %int_0
-               OpSelectionMerge %215 None
-               OpBranchConditional %214 %216 %217
-        %216 = OpLabel
-               OpStore %canwalk %false
-               OpStore %i %int_0
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %223 = OpLoad %int %i
-        %225 = OpSLessThan %bool %223 %int_8
-               OpSelectionMerge %226 None
-               OpBranchConditional %225 %227 %228
-        %227 = OpLabel
-               OpBranch %226
-        %228 = OpLabel
-               OpBranch %220
-        %226 = OpLabel
-               OpStore %j %int_0
-               OpBranch %229
-        %229 = OpLabel
-               OpLoopMerge %230 %231 None
-               OpBranch %232
-        %232 = OpLabel
-        %233 = OpLoad %int %j
-        %234 = OpSLessThan %bool %233 %int_8
-               OpSelectionMerge %235 None
-               OpBranchConditional %234 %236 %237
-        %236 = OpLabel
-               OpBranch %235
-        %237 = OpLabel
-               OpBranch %230
-        %235 = OpLabel
-        %238 = OpLoad %int %j
-        %239 = OpLoad %int %i
-        %240 = OpIMul %int %238 %int_2
-        %241 = OpIMul %int %239 %int_2
-        %242 = OpIMul %int %241 %int_16
-        %243 = OpIAdd %int %240 %242
-        %244 = OpAccessChain %_ptr_Private_int %map %243
-        %245 = OpLoad %int %244
-        %246 = OpIEqual %bool %245 %int_0
-               OpSelectionMerge %247 None
-               OpBranchConditional %246 %248 %247
-        %248 = OpLabel
-        %249 = OpLoad %int %j
-        %250 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %251 = OpIMul %int %249 %int_2
-               OpStore %250 %251
-        %252 = OpLoad %int %i
-        %253 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %254 = OpIMul %int %252 %int_2
-               OpStore %253 %254
-               OpStore %canwalk %true
-               OpBranch %247
-        %247 = OpLabel
-               OpBranch %231
-        %231 = OpLabel
-        %255 = OpLoad %int %j
-        %256 = OpIAdd %int %255 %int_1
-               OpStore %j %256
-               OpBranch %229
-        %230 = OpLabel
-               OpBranch %221
-        %221 = OpLabel
-        %257 = OpLoad %int %i
-        %258 = OpIAdd %int %257 %int_1
-               OpStore %i %258
-               OpBranch %219
-        %220 = OpLabel
-        %259 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %260 = OpLoad %int %259
-        %261 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %262 = OpLoad %int %261
-        %263 = OpIMul %int %262 %int_16
-        %264 = OpIAdd %int %260 %263
-        %265 = OpAccessChain %_ptr_Private_int %map %264
-               OpStore %265 %int_1
-               OpBranch %215
-        %217 = OpLabel
-        %266 = OpLoad %int %v
-        %267 = OpLoad %int %directions
-        %268 = OpSMod %int %266 %267
-               OpStore %d %268
-        %269 = OpLoad %int %directions
-        %270 = OpLoad %int %v
-        %271 = OpIAdd %int %270 %269
-               OpStore %v %271
-        %272 = OpLoad %int %d
-        %273 = OpSGreaterThanEqual %bool %272 %int_0
-               OpStore %x_230_phi %273
-               OpSelectionMerge %274 None
-               OpBranchConditional %273 %275 %274
-        %275 = OpLabel
-        %276 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %277 = OpLoad %int %276
-        %278 = OpSGreaterThan %bool %277 %int_0
-               OpStore %x_229 %278
-        %279 = OpLoad %bool %x_229
-               OpStore %x_230_phi %279
-               OpBranch %274
-        %274 = OpLabel
-        %280 = OpLoad %bool %x_230_phi
-               OpStore %x_243_phi %280
-               OpSelectionMerge %281 None
-               OpBranchConditional %280 %282 %281
-        %282 = OpLabel
-        %283 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %284 = OpLoad %int %283
-        %285 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %286 = OpLoad %int %285
-        %287 = OpISub %int %284 %int_2
-        %288 = OpIMul %int %286 %int_16
-        %289 = OpIAdd %int %287 %288
-        %290 = OpAccessChain %_ptr_Private_int %map %289
-        %291 = OpLoad %int %290
-        %292 = OpIEqual %bool %291 %int_0
-               OpStore %x_242 %292
-        %293 = OpLoad %bool %x_242
-               OpStore %x_243_phi %293
-               OpBranch %281
-        %281 = OpLabel
-        %294 = OpLoad %bool %x_243_phi
-               OpSelectionMerge %295 None
-               OpBranchConditional %294 %296 %295
-        %296 = OpLabel
-        %297 = OpLoad %int %d
-        %298 = OpISub %int %297 %int_1
-               OpStore %d %298
-        %299 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %300 = OpLoad %int %299
-        %301 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %302 = OpLoad %int %301
-        %303 = OpIMul %int %302 %int_16
-        %304 = OpIAdd %int %300 %303
-        %305 = OpAccessChain %_ptr_Private_int %map %304
-               OpStore %305 %int_1
-        %306 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %307 = OpLoad %int %306
-        %308 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %309 = OpLoad %int %308
-        %310 = OpISub %int %307 %int_1
-        %311 = OpIMul %int %309 %int_16
-        %312 = OpIAdd %int %310 %311
-        %313 = OpAccessChain %_ptr_Private_int %map %312
-               OpStore %313 %int_1
-        %314 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %315 = OpLoad %int %314
-        %316 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %317 = OpLoad %int %316
-        %318 = OpISub %int %315 %int_2
-        %319 = OpIMul %int %317 %int_16
-        %320 = OpIAdd %int %318 %319
-        %321 = OpAccessChain %_ptr_Private_int %map %320
-               OpStore %321 %int_1
-        %322 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %323 = OpLoad %int %322
-        %324 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %325 = OpISub %int %323 %int_2
-               OpStore %324 %325
-               OpBranch %295
-        %295 = OpLabel
-        %326 = OpLoad %int %d
-        %327 = OpSGreaterThanEqual %bool %326 %int_0
-               OpStore %x_282_phi %327
-               OpSelectionMerge %328 None
-               OpBranchConditional %327 %329 %328
-        %329 = OpLabel
-        %330 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %331 = OpLoad %int %330
-        %332 = OpSGreaterThan %bool %331 %int_0
-               OpStore %x_281 %332
-        %333 = OpLoad %bool %x_281
-               OpStore %x_282_phi %333
-               OpBranch %328
-        %328 = OpLabel
-        %334 = OpLoad %bool %x_282_phi
-               OpSelectionMerge %335 None
-               OpBranchConditional %334 %336 %337
-        %336 = OpLabel
-        %338 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %339 = OpLoad %int %338
-               OpStore %x_288 %339
-        %340 = OpLoad %int %x_288
-               OpStore %x_290_phi %340
-               OpBranch %335
-        %337 = OpLabel
-               OpStore %x_289 %int_0
-        %341 = OpLoad %int %x_289
-               OpStore %x_290_phi %341
-               OpBranch %335
-        %335 = OpLabel
-        %342 = OpLoad %int %x_290_phi
-               OpSelectionMerge %343 None
-               OpBranchConditional %334 %344 %345
-        %344 = OpLabel
-        %346 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %347 = OpLoad %int %346
-               OpStore %x_295 %347
-        %348 = OpLoad %int %x_295
-               OpStore %x_297_phi %348
-               OpBranch %343
-        %345 = OpLabel
-               OpStore %x_296 %int_0
-        %349 = OpLoad %int %x_296
-               OpStore %x_297_phi %349
-               OpBranch %343
-        %343 = OpLabel
-        %350 = OpLoad %int %x_297_phi
-        %351 = OpISub %int %350 %int_2
-        %352 = OpIMul %int %351 %int_16
-               OpSelectionMerge %353 None
-               OpBranchConditional %334 %354 %355
-        %354 = OpLabel
-        %356 = OpLoad %_arr_int_uint_256 %map
-               OpStore %x_303 %356
-        %357 = OpLoad %_arr_int_uint_256 %x_303
-               OpStore %x_305_phi %357
-               OpBranch %353
-        %355 = OpLabel
-               OpStore %x_304 %358
-        %359 = OpLoad %_arr_int_uint_256 %x_304
-               OpStore %x_305_phi %359
-               OpBranch %353
-        %353 = OpLabel
-        %360 = OpLoad %_arr_int_uint_256 %x_305_phi
-               OpSelectionMerge %361 None
-               OpBranchConditional %334 %362 %361
-        %362 = OpLabel
-               OpStore %map %358
-               OpBranch %361
-        %361 = OpLabel
-               OpSelectionMerge %363 None
-               OpBranchConditional %334 %364 %363
-        %364 = OpLabel
-               OpStore %map %360
-               OpBranch %363
-        %363 = OpLabel
-               OpSelectionMerge %365 None
-               OpBranchConditional %334 %366 %367
-        %366 = OpLabel
-        %368 = OpIAdd %int %342 %352
-        %369 = OpAccessChain %_ptr_Private_int %map %368
-        %370 = OpLoad %int %369
-               OpStore %x_315 %370
-        %371 = OpLoad %int %x_315
-               OpStore %x_317_phi %371
-               OpBranch %365
-        %367 = OpLabel
-               OpStore %x_316 %int_0
-        %372 = OpLoad %int %x_316
-               OpStore %x_317_phi %372
-               OpBranch %365
-        %365 = OpLabel
-        %373 = OpLoad %int %x_317_phi
-        %374 = OpIEqual %bool %373 %int_0
-        %375 = OpSelect %bool %334 %374 %334
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %376
-        %377 = OpLabel
-        %378 = OpLoad %int %d
-        %379 = OpISub %int %378 %int_1
-               OpStore %d %379
-        %380 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %381 = OpLoad %int %380
-        %382 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %383 = OpLoad %int %382
-        %384 = OpIMul %int %383 %int_16
-        %385 = OpIAdd %int %381 %384
-        %386 = OpAccessChain %_ptr_Private_int %map %385
-               OpStore %386 %int_1
-        %387 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %388 = OpLoad %int %387
-        %389 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %390 = OpLoad %int %389
-        %391 = OpISub %int %390 %int_1
-        %392 = OpIMul %int %391 %int_16
-        %393 = OpIAdd %int %388 %392
-        %394 = OpAccessChain %_ptr_Private_int %map %393
-               OpStore %394 %int_1
-        %395 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %396 = OpLoad %int %395
-        %397 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %398 = OpLoad %int %397
-        %399 = OpLoad %_arr_int_uint_256 %map
-               OpStore %map %358
-               OpStore %map %399
-        %400 = OpISub %int %398 %int_2
-        %401 = OpIMul %int %400 %int_16
-        %402 = OpIAdd %int %396 %401
-        %403 = OpAccessChain %_ptr_Private_int %map %402
-               OpStore %403 %int_1
-        %404 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %405 = OpLoad %int %404
-        %406 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %407 = OpISub %int %405 %int_2
-               OpStore %406 %407
-               OpBranch %376
-        %376 = OpLabel
-        %408 = OpLoad %int %d
-        %409 = OpSGreaterThanEqual %bool %408 %int_0
-               OpStore %x_360_phi %409
-               OpSelectionMerge %410 None
-               OpBranchConditional %409 %411 %410
-        %411 = OpLabel
-        %412 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %413 = OpLoad %int %412
-        %414 = OpSLessThan %bool %413 %int_14
-               OpStore %x_359 %414
-        %415 = OpLoad %bool %x_359
-               OpStore %x_360_phi %415
-               OpBranch %410
-        %410 = OpLabel
-        %416 = OpLoad %bool %x_360_phi
-               OpStore %x_373_phi %416
-               OpSelectionMerge %417 None
-               OpBranchConditional %416 %418 %417
-        %418 = OpLabel
-        %419 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %420 = OpLoad %int %419
-        %421 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %422 = OpLoad %int %421
-        %423 = OpIAdd %int %420 %int_2
-        %424 = OpIMul %int %422 %int_16
-        %425 = OpIAdd %int %423 %424
-        %426 = OpAccessChain %_ptr_Private_int %map %425
-        %427 = OpLoad %int %426
-        %428 = OpIEqual %bool %427 %int_0
-               OpStore %x_372 %428
-        %429 = OpLoad %bool %x_372
-               OpStore %x_373_phi %429
-               OpBranch %417
-        %417 = OpLabel
-        %430 = OpLoad %bool %x_373_phi
-               OpSelectionMerge %431 None
-               OpBranchConditional %430 %432 %431
-        %432 = OpLabel
-        %433 = OpLoad %int %d
-        %434 = OpISub %int %433 %int_1
-               OpStore %d %434
-        %435 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %436 = OpLoad %int %435
-        %437 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %438 = OpLoad %int %437
-        %439 = OpIMul %int %438 %int_16
-        %440 = OpIAdd %int %436 %439
-        %441 = OpAccessChain %_ptr_Private_int %map %440
-               OpStore %441 %int_1
-        %442 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %443 = OpLoad %int %442
-        %444 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %445 = OpLoad %int %444
-        %446 = OpIAdd %int %443 %int_1
-        %447 = OpIMul %int %445 %int_16
-        %448 = OpIAdd %int %446 %447
-        %449 = OpAccessChain %_ptr_Private_int %map %448
-               OpStore %449 %int_1
-        %450 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %451 = OpLoad %int %450
-        %452 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %453 = OpLoad %int %452
-        %454 = OpIAdd %int %451 %int_2
-        %455 = OpIMul %int %453 %int_16
-        %456 = OpIAdd %int %454 %455
-        %457 = OpAccessChain %_ptr_Private_int %map %456
-               OpStore %457 %int_1
-        %458 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %459 = OpLoad %int %458
-        %460 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %461 = OpIAdd %int %459 %int_2
-               OpStore %460 %461
-               OpBranch %431
-        %431 = OpLabel
-        %462 = OpLoad %int %d
-        %463 = OpSGreaterThanEqual %bool %462 %int_0
-               OpStore %x_412_phi %463
-               OpSelectionMerge %464 None
-               OpBranchConditional %463 %465 %464
-        %465 = OpLabel
-        %466 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %467 = OpLoad %int %466
-        %468 = OpSLessThan %bool %467 %int_14
-               OpStore %x_411 %468
-        %469 = OpLoad %bool %x_411
-               OpStore %x_412_phi %469
-               OpBranch %464
-        %464 = OpLabel
-        %470 = OpLoad %bool %x_412_phi
-               OpStore %x_425_phi %470
-               OpSelectionMerge %471 None
-               OpBranchConditional %470 %472 %471
-        %472 = OpLabel
-        %473 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %474 = OpLoad %int %473
-        %475 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %476 = OpLoad %int %475
-        %477 = OpIAdd %int %476 %int_2
-        %478 = OpIMul %int %477 %int_16
-        %479 = OpIAdd %int %474 %478
-        %480 = OpAccessChain %_ptr_Private_int %map %479
-        %481 = OpLoad %int %480
-        %482 = OpIEqual %bool %481 %int_0
-               OpStore %x_424 %482
-        %483 = OpLoad %bool %x_424
-               OpStore %x_425_phi %483
-               OpBranch %471
-        %471 = OpLabel
-        %484 = OpLoad %bool %x_425_phi
-               OpSelectionMerge %485 None
-               OpBranchConditional %484 %486 %485
-        %486 = OpLabel
-        %487 = OpLoad %int %d
-        %488 = OpISub %int %487 %int_1
-               OpStore %d %488
-        %489 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %490 = OpLoad %int %489
-        %491 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %492 = OpLoad %int %491
-        %493 = OpIMul %int %492 %int_16
-        %494 = OpIAdd %int %490 %493
-        %495 = OpAccessChain %_ptr_Private_int %map %494
-               OpStore %495 %int_1
-        %496 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %497 = OpLoad %int %496
-        %498 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %499 = OpLoad %int %498
-        %500 = OpIAdd %int %499 %int_1
-        %501 = OpIMul %int %500 %int_16
-        %502 = OpIAdd %int %497 %501
-        %503 = OpAccessChain %_ptr_Private_int %map %502
-               OpStore %503 %int_1
-        %504 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %505 = OpLoad %int %504
-        %506 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %507 = OpLoad %int %506
-        %508 = OpIAdd %int %507 %int_2
-        %509 = OpIMul %int %508 %int_16
-        %510 = OpIAdd %int %505 %509
-        %511 = OpAccessChain %_ptr_Private_int %map %510
-               OpStore %511 %int_1
-        %512 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %513 = OpLoad %int %512
-        %514 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %515 = OpIAdd %int %513 %int_2
-               OpStore %514 %515
-               OpBranch %485
-        %485 = OpLabel
-               OpBranch %215
-        %215 = OpLabel
-        %516 = OpAccessChain %_ptr_Function_int %ipos %uint_1
-        %517 = OpLoad %int %516
-        %518 = OpAccessChain %_ptr_Function_int %ipos %uint_0
-        %519 = OpLoad %int %518
-        %520 = OpIMul %int %517 %int_16
-        %521 = OpIAdd %int %520 %519
-        %522 = OpAccessChain %_ptr_Private_int %map %521
-        %523 = OpLoad %int %522
-        %524 = OpIEqual %bool %523 %int_1
-               OpSelectionMerge %525 None
-               OpBranchConditional %524 %526 %525
-        %526 = OpLabel
-               OpStore %x_GLF_color %528
-               OpReturn
-        %525 = OpLabel
-               OpBranch %87
-         %87 = OpLabel
-        %529 = OpLoad %bool %canwalk
-               OpBranchConditional %529 %85 %86
-         %86 = OpLabel
-               OpStore %x_GLF_color %531
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %532
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %536 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %537 = OpFunctionCall %void %main_1
-        %538 = OpLoad %v4float %x_GLF_color
-        %539 = OpCompositeConstruct %main_out %538
-               OpReturnValue %539
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %541 = OpLabel
-        %543 = OpLoad %v4float %gl_FragCoord_param_1
-        %542 = OpFunctionCall %main_out %main_inner %543
-        %544 = OpCompositeExtract %v4float %542 0
-               OpStore %x_GLF_color_1_1 %544
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.wgsl
deleted file mode 100644
index 7636426..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,392 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> map : array<i32, 256>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var ipos : vec2<i32>;
-  var i : i32;
-  var p : vec2<i32>;
-  var canwalk : bool;
-  var v : i32;
-  var directions : i32;
-  var j : i32;
-  var d : i32;
-  let x_59 : vec4<f32> = gl_FragCoord;
-  let x_62 : vec2<f32> = x_7.resolution;
-  pos = (vec2<f32>(x_59.x, x_59.y) / x_62);
-  let x_65 : f32 = pos.x;
-  let x_69 : f32 = pos.y;
-  ipos = vec2<i32>(i32((x_65 * 16.0)), i32((x_69 * 16.0)));
-  i = 0;
-  loop {
-    let x_77 : i32 = i;
-    if ((x_77 < 256)) {
-    } else {
-      break;
-    }
-    let x_80 : i32 = i;
-    map[x_80] = 0;
-
-    continuing {
-      let x_82 : i32 = i;
-      i = (x_82 + 1);
-    }
-  }
-  p = vec2<i32>(0, 0);
-  canwalk = true;
-  v = 0;
-  loop {
-    var x_104 : bool;
-    var x_124 : bool;
-    var x_144 : bool;
-    var x_164 : bool;
-    var x_105_phi : bool;
-    var x_125_phi : bool;
-    var x_145_phi : bool;
-    var x_165_phi : bool;
-    let x_88 : i32 = v;
-    v = (x_88 + 1);
-    directions = 0;
-    let x_91 : i32 = p.x;
-    let x_92 : bool = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      let x_96 : i32 = p.x;
-      let x_99 : i32 = p.y;
-      let x_103 : i32 = map[((x_96 - 2) + (x_99 * 16))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    let x_105 : bool = x_105_phi;
-    if (x_105) {
-      let x_108 : i32 = directions;
-      directions = (x_108 + 1);
-    }
-    let x_111 : i32 = p.y;
-    let x_112 : bool = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      let x_116 : i32 = p.x;
-      let x_118 : i32 = p.y;
-      let x_123 : i32 = map[(x_116 + ((x_118 - 2) * 16))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    let x_125 : bool = x_125_phi;
-    if (x_125) {
-      let x_128 : i32 = directions;
-      directions = (x_128 + 1);
-    }
-    let x_131 : i32 = p.x;
-    let x_132 : bool = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      let x_136 : i32 = p.x;
-      let x_139 : i32 = p.y;
-      let x_143 : i32 = map[((x_136 + 2) + (x_139 * 16))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    let x_145 : bool = x_145_phi;
-    if (x_145) {
-      let x_148 : i32 = directions;
-      directions = (x_148 + 1);
-    }
-    let x_151 : i32 = p.y;
-    let x_152 : bool = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      let x_156 : i32 = p.x;
-      let x_158 : i32 = p.y;
-      let x_163 : i32 = map[(x_156 + ((x_158 + 2) * 16))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    let x_165 : bool = x_165_phi;
-    if (x_165) {
-      let x_168 : i32 = directions;
-      directions = (x_168 + 1);
-    }
-    var x_229 : bool;
-    var x_242 : bool;
-    var x_281 : bool;
-    var x_288 : i32;
-    var x_289 : i32;
-    var x_295 : i32;
-    var x_296 : i32;
-    var x_303 : array<i32, 256>;
-    var x_304 : array<i32, 256>;
-    var x_315 : i32;
-    var x_316 : i32;
-    var x_359 : bool;
-    var x_372 : bool;
-    var x_411 : bool;
-    var x_424 : bool;
-    var x_230_phi : bool;
-    var x_243_phi : bool;
-    var x_282_phi : bool;
-    var x_290_phi : i32;
-    var x_297_phi : i32;
-    var x_305_phi : array<i32, 256>;
-    var x_317_phi : i32;
-    var x_360_phi : bool;
-    var x_373_phi : bool;
-    var x_412_phi : bool;
-    var x_425_phi : bool;
-    let x_170 : i32 = directions;
-    if ((x_170 == 0)) {
-      canwalk = false;
-      i = 0;
-      loop {
-        let x_179 : i32 = i;
-        if ((x_179 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        loop {
-          let x_186 : i32 = j;
-          if ((x_186 < 8)) {
-          } else {
-            break;
-          }
-          let x_189 : i32 = j;
-          let x_191 : i32 = i;
-          let x_196 : i32 = map[((x_189 * 2) + ((x_191 * 2) * 16))];
-          if ((x_196 == 0)) {
-            let x_200 : i32 = j;
-            p.x = (x_200 * 2);
-            let x_203 : i32 = i;
-            p.y = (x_203 * 2);
-            canwalk = true;
-          }
-
-          continuing {
-            let x_206 : i32 = j;
-            j = (x_206 + 1);
-          }
-        }
-
-        continuing {
-          let x_208 : i32 = i;
-          i = (x_208 + 1);
-        }
-      }
-      let x_211 : i32 = p.x;
-      let x_213 : i32 = p.y;
-      map[(x_211 + (x_213 * 16))] = 1;
-    } else {
-      let x_217 : i32 = v;
-      let x_218 : i32 = directions;
-      d = (x_217 % x_218);
-      let x_220 : i32 = directions;
-      let x_221 : i32 = v;
-      v = (x_221 + x_220);
-      let x_223 : i32 = d;
-      let x_224 : bool = (x_223 >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        let x_228 : i32 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      let x_230 : bool = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        let x_234 : i32 = p.x;
-        let x_237 : i32 = p.y;
-        let x_241 : i32 = map[((x_234 - 2) + (x_237 * 16))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      let x_243 : bool = x_243_phi;
-      if (x_243) {
-        let x_246 : i32 = d;
-        d = (x_246 - 1);
-        let x_249 : i32 = p.x;
-        let x_251 : i32 = p.y;
-        map[(x_249 + (x_251 * 16))] = 1;
-        let x_256 : i32 = p.x;
-        let x_259 : i32 = p.y;
-        map[((x_256 - 1) + (x_259 * 16))] = 1;
-        let x_264 : i32 = p.x;
-        let x_267 : i32 = p.y;
-        map[((x_264 - 2) + (x_267 * 16))] = 1;
-        let x_272 : i32 = p.x;
-        p.x = (x_272 - 2);
-      }
-      let x_275 : i32 = d;
-      let x_276 : bool = (x_275 >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        let x_280 : i32 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      let x_282 : bool = x_282_phi;
-      if (x_282) {
-        x_288 = p.x;
-        x_290_phi = x_288;
-      } else {
-        x_289 = 0;
-        x_290_phi = x_289;
-      }
-      let x_290 : i32 = x_290_phi;
-      if (x_282) {
-        x_295 = p.y;
-        x_297_phi = x_295;
-      } else {
-        x_296 = 0;
-        x_297_phi = x_296;
-      }
-      let x_297 : i32 = x_297_phi;
-      let x_299 : i32 = ((x_297 - 2) * 16);
-      if (x_282) {
-        x_303 = map;
-        x_305_phi = x_303;
-      } else {
-        x_304 = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        x_305_phi = x_304;
-      }
-      let x_305 : array<i32, 256> = x_305_phi;
-      if (x_282) {
-        map = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-      }
-      if (x_282) {
-        map = x_305;
-      }
-      if (x_282) {
-        x_315 = map[(x_290 + x_299)];
-        x_317_phi = x_315;
-      } else {
-        x_316 = 0;
-        x_317_phi = x_316;
-      }
-      let x_317 : i32 = x_317_phi;
-      let x_318 : bool = (x_317 == 0);
-      if (select(x_282, x_318, x_282)) {
-        let x_323 : i32 = d;
-        d = (x_323 - 1);
-        let x_326 : i32 = p.x;
-        let x_328 : i32 = p.y;
-        map[(x_326 + (x_328 * 16))] = 1;
-        let x_333 : i32 = p.x;
-        let x_335 : i32 = p.y;
-        map[(x_333 + ((x_335 - 1) * 16))] = 1;
-        let x_341 : i32 = p.x;
-        let x_343 : i32 = p.y;
-        let x_345 : array<i32, 256> = map;
-        map = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        map = x_345;
-        map[(x_341 + ((x_343 - 2) * 16))] = 1;
-        let x_350 : i32 = p.y;
-        p.y = (x_350 - 2);
-      }
-      let x_353 : i32 = d;
-      let x_354 : bool = (x_353 >= 0);
-      x_360_phi = x_354;
-      if (x_354) {
-        let x_358 : i32 = p.x;
-        x_359 = (x_358 < 14);
-        x_360_phi = x_359;
-      }
-      let x_360 : bool = x_360_phi;
-      x_373_phi = x_360;
-      if (x_360) {
-        let x_364 : i32 = p.x;
-        let x_367 : i32 = p.y;
-        let x_371 : i32 = map[((x_364 + 2) + (x_367 * 16))];
-        x_372 = (x_371 == 0);
-        x_373_phi = x_372;
-      }
-      let x_373 : bool = x_373_phi;
-      if (x_373) {
-        let x_376 : i32 = d;
-        d = (x_376 - 1);
-        let x_379 : i32 = p.x;
-        let x_381 : i32 = p.y;
-        map[(x_379 + (x_381 * 16))] = 1;
-        let x_386 : i32 = p.x;
-        let x_389 : i32 = p.y;
-        map[((x_386 + 1) + (x_389 * 16))] = 1;
-        let x_394 : i32 = p.x;
-        let x_397 : i32 = p.y;
-        map[((x_394 + 2) + (x_397 * 16))] = 1;
-        let x_402 : i32 = p.x;
-        p.x = (x_402 + 2);
-      }
-      let x_405 : i32 = d;
-      let x_406 : bool = (x_405 >= 0);
-      x_412_phi = x_406;
-      if (x_406) {
-        let x_410 : i32 = p.y;
-        x_411 = (x_410 < 14);
-        x_412_phi = x_411;
-      }
-      let x_412 : bool = x_412_phi;
-      x_425_phi = x_412;
-      if (x_412) {
-        let x_416 : i32 = p.x;
-        let x_418 : i32 = p.y;
-        let x_423 : i32 = map[(x_416 + ((x_418 + 2) * 16))];
-        x_424 = (x_423 == 0);
-        x_425_phi = x_424;
-      }
-      let x_425 : bool = x_425_phi;
-      if (x_425) {
-        let x_428 : i32 = d;
-        d = (x_428 - 1);
-        let x_431 : i32 = p.x;
-        let x_433 : i32 = p.y;
-        map[(x_431 + (x_433 * 16))] = 1;
-        let x_438 : i32 = p.x;
-        let x_440 : i32 = p.y;
-        map[(x_438 + ((x_440 + 1) * 16))] = 1;
-        let x_446 : i32 = p.x;
-        let x_448 : i32 = p.y;
-        map[(x_446 + ((x_448 + 2) * 16))] = 1;
-        let x_454 : i32 = p.y;
-        p.y = (x_454 + 2);
-      }
-    }
-    let x_458 : i32 = ipos.y;
-    let x_461 : i32 = ipos.x;
-    let x_464 : i32 = map[((x_458 * 16) + x_461)];
-    if ((x_464 == 1)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      return;
-    }
-
-    continuing {
-      let x_468 : bool = canwalk;
-      if (x_468) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.hlsl
deleted file mode 100644
index ac04bb1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,305 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static int map[256] = (int[256])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int i = 0;
-  int2 p = int2(0, 0);
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  const float4 x_59 = gl_FragCoord;
-  const float2 x_62 = asfloat(x_7[0].xy);
-  pos = (float2(x_59.x, x_59.y) / x_62);
-  const float x_65 = pos.x;
-  const float x_69 = pos.y;
-  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      map[i] = 0;
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_104 = false;
-    bool x_124 = false;
-    bool x_144 = false;
-    bool x_164 = false;
-    bool x_105_phi = false;
-    bool x_125_phi = false;
-    bool x_145_phi = false;
-    bool x_165_phi = false;
-    v = (v + 1);
-    directions = 0;
-    const int x_91 = p.x;
-    const bool x_92 = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      const int x_96 = p.x;
-      const int x_99 = p.y;
-      const int x_103 = map[((x_96 - 2) + (x_99 * 16))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    if (x_105_phi) {
-      directions = (directions + 1);
-    }
-    const int x_111 = p.y;
-    const bool x_112 = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      const int x_116 = p.x;
-      const int x_118 = p.y;
-      const int x_123 = map[(x_116 + ((x_118 - 2) * 16))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    if (x_125_phi) {
-      directions = (directions + 1);
-    }
-    const int x_131 = p.x;
-    const bool x_132 = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      const int x_136 = p.x;
-      const int x_139 = p.y;
-      const int x_143 = map[((x_136 + 2) + (x_139 * 16))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    if (x_145_phi) {
-      directions = (directions + 1);
-    }
-    const int x_151 = p.y;
-    const bool x_152 = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      const int x_156 = p.x;
-      const int x_158 = p.y;
-      const int x_163 = map[(x_156 + ((x_158 + 2) * 16))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    if (x_165_phi) {
-      directions = (directions + 1);
-    }
-    bool x_229 = false;
-    bool x_242 = false;
-    bool x_281 = false;
-    bool x_295 = false;
-    bool x_335 = false;
-    bool x_348 = false;
-    bool x_387 = false;
-    bool x_400 = false;
-    bool x_230_phi = false;
-    bool x_243_phi = false;
-    bool x_282_phi = false;
-    bool x_296_phi = false;
-    bool x_336_phi = false;
-    bool x_349_phi = false;
-    bool x_388_phi = false;
-    bool x_401_phi = false;
-    if ((directions == 0)) {
-      canwalk = false;
-      i = 0;
-      {
-        for(; (i < 8); i = (i + 1)) {
-          j = 0;
-          {
-            for(; (j < 8); j = (j + 1)) {
-              const int x_196 = map[((j * 2) + ((i * 2) * 16))];
-              if ((x_196 == 0)) {
-                p.x = (j * 2);
-                p.y = (i * 2);
-                canwalk = true;
-              }
-            }
-          }
-        }
-      }
-      const int x_211 = p.x;
-      const int x_213 = p.y;
-      map[(x_211 + (x_213 * 16))] = 1;
-    } else {
-      d = (v % directions);
-      v = (v + directions);
-      const bool x_224 = (d >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        const int x_228 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      const bool x_230 = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        const int x_234 = p.x;
-        const int x_237 = p.y;
-        const int x_241 = map[((x_234 - 2) + (x_237 * 16))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      if (x_243_phi) {
-        d = (d - 1);
-        const int x_249 = p.x;
-        const int x_251 = p.y;
-        map[(x_249 + (x_251 * 16))] = 1;
-        const int x_256 = p.x;
-        const int x_259 = p.y;
-        map[((x_256 - 1) + (x_259 * 16))] = 1;
-        const int x_264 = p.x;
-        const int x_267 = p.y;
-        map[((x_264 - 2) + (x_267 * 16))] = 1;
-        const int x_272 = p.x;
-        p.x = (x_272 - 2);
-      }
-      const bool x_276 = (d >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        const int x_280 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      const bool x_282 = x_282_phi;
-      x_296_phi = x_282;
-      if (x_282) {
-        const int x_286 = p.x;
-        const int x_288 = p.y;
-        const int x_291[256] = map;
-        const int tint_symbol_4[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        map = tint_symbol_4;
-        map = x_291;
-        const int x_294 = map[(x_286 + ((x_288 - 2) * 16))];
-        x_295 = (x_294 == 0);
-        x_296_phi = x_295;
-      }
-      if (x_296_phi) {
-        d = (d - 1);
-        const int x_302 = p.x;
-        const int x_304 = p.y;
-        map[(x_302 + (x_304 * 16))] = 1;
-        const int x_309 = p.x;
-        const int x_311 = p.y;
-        map[(x_309 + ((x_311 - 1) * 16))] = 1;
-        const int x_317 = p.x;
-        const int x_319 = p.y;
-        const int x_321[256] = map;
-        const int tint_symbol_5[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        map = tint_symbol_5;
-        map = x_321;
-        map[(x_317 + ((x_319 - 2) * 16))] = 1;
-        const int x_326 = p.y;
-        p.y = (x_326 - 2);
-      }
-      const bool x_330 = (d >= 0);
-      x_336_phi = x_330;
-      if (x_330) {
-        const int x_334 = p.x;
-        x_335 = (x_334 < 14);
-        x_336_phi = x_335;
-      }
-      const bool x_336 = x_336_phi;
-      x_349_phi = x_336;
-      if (x_336) {
-        const int x_340 = p.x;
-        const int x_343 = p.y;
-        const int x_347 = map[((x_340 + 2) + (x_343 * 16))];
-        x_348 = (x_347 == 0);
-        x_349_phi = x_348;
-      }
-      if (x_349_phi) {
-        d = (d - 1);
-        const int x_355 = p.x;
-        const int x_357 = p.y;
-        map[(x_355 + (x_357 * 16))] = 1;
-        const int x_362 = p.x;
-        const int x_365 = p.y;
-        map[((x_362 + 1) + (x_365 * 16))] = 1;
-        const int x_370 = p.x;
-        const int x_373 = p.y;
-        map[((x_370 + 2) + (x_373 * 16))] = 1;
-        const int x_378 = p.x;
-        p.x = (x_378 + 2);
-      }
-      const bool x_382 = (d >= 0);
-      x_388_phi = x_382;
-      if (x_382) {
-        const int x_386 = p.y;
-        x_387 = (x_386 < 14);
-        x_388_phi = x_387;
-      }
-      const bool x_388 = x_388_phi;
-      x_401_phi = x_388;
-      if (x_388) {
-        const int x_392 = p.x;
-        const int x_394 = p.y;
-        const int x_399 = map[(x_392 + ((x_394 + 2) * 16))];
-        x_400 = (x_399 == 0);
-        x_401_phi = x_400;
-      }
-      if (x_401_phi) {
-        d = (d - 1);
-        const int x_407 = p.x;
-        const int x_409 = p.y;
-        map[(x_407 + (x_409 * 16))] = 1;
-        const int x_414 = p.x;
-        const int x_416 = p.y;
-        map[(x_414 + ((x_416 + 1) * 16))] = 1;
-        const int x_422 = p.x;
-        const int x_424 = p.y;
-        map[(x_422 + ((x_424 + 2) * 16))] = 1;
-        const int x_430 = p.y;
-        p.y = (x_430 + 2);
-      }
-    }
-    const int x_434 = ipos.y;
-    const int x_437 = ipos.x;
-    const int x_440 = map[((x_434 * 16) + x_437)];
-    if ((x_440 == 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      if (canwalk) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.msl
deleted file mode 100644
index 55767c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.msl
+++ /dev/null
@@ -1,361 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float2 pos = 0.0f;
-  int2 ipos = 0;
-  int i = 0;
-  int2 p = 0;
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  float4 const x_59 = *(tint_symbol_5);
-  float2 const x_62 = x_7.resolution;
-  pos = (float2(x_59.x, x_59.y) / x_62);
-  float const x_65 = pos.x;
-  float const x_69 = pos.y;
-  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
-  i = 0;
-  while (true) {
-    int const x_77 = i;
-    if ((x_77 < 256)) {
-    } else {
-      break;
-    }
-    int const x_80 = i;
-    (*(tint_symbol_6)).arr[x_80] = 0;
-    {
-      int const x_82 = i;
-      i = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_104 = false;
-    bool x_124 = false;
-    bool x_144 = false;
-    bool x_164 = false;
-    bool x_105_phi = false;
-    bool x_125_phi = false;
-    bool x_145_phi = false;
-    bool x_165_phi = false;
-    int const x_88 = v;
-    v = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    directions = 0;
-    int const x_91 = p.x;
-    bool const x_92 = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      int const x_96 = p.x;
-      int const x_99 = p.y;
-      int const x_103 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_96) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_99) * as_type<uint>(16))))))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    bool const x_105 = x_105_phi;
-    if (x_105) {
-      int const x_108 = directions;
-      directions = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-    }
-    int const x_111 = p.y;
-    bool const x_112 = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      int const x_116 = p.x;
-      int const x_118 = p.y;
-      int const x_123 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_116) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_118) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    bool const x_125 = x_125_phi;
-    if (x_125) {
-      int const x_128 = directions;
-      directions = as_type<int>((as_type<uint>(x_128) + as_type<uint>(1)));
-    }
-    int const x_131 = p.x;
-    bool const x_132 = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      int const x_136 = p.x;
-      int const x_139 = p.y;
-      int const x_143 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_139) * as_type<uint>(16))))))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    bool const x_145 = x_145_phi;
-    if (x_145) {
-      int const x_148 = directions;
-      directions = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-    }
-    int const x_151 = p.y;
-    bool const x_152 = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      int const x_156 = p.x;
-      int const x_158 = p.y;
-      int const x_163 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_156) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_158) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    bool const x_165 = x_165_phi;
-    if (x_165) {
-      int const x_168 = directions;
-      directions = as_type<int>((as_type<uint>(x_168) + as_type<uint>(1)));
-    }
-    bool x_229 = false;
-    bool x_242 = false;
-    bool x_281 = false;
-    bool x_295 = false;
-    bool x_335 = false;
-    bool x_348 = false;
-    bool x_387 = false;
-    bool x_400 = false;
-    bool x_230_phi = false;
-    bool x_243_phi = false;
-    bool x_282_phi = false;
-    bool x_296_phi = false;
-    bool x_336_phi = false;
-    bool x_349_phi = false;
-    bool x_388_phi = false;
-    bool x_401_phi = false;
-    int const x_170 = directions;
-    if ((x_170 == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        int const x_179 = i;
-        if ((x_179 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        while (true) {
-          int const x_186 = j;
-          if ((x_186 < 8)) {
-          } else {
-            break;
-          }
-          int const x_189 = j;
-          int const x_191 = i;
-          int const x_196 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_189) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_191) * as_type<uint>(2)))) * as_type<uint>(16))))))];
-          if ((x_196 == 0)) {
-            int const x_200 = j;
-            p.x = as_type<int>((as_type<uint>(x_200) * as_type<uint>(2)));
-            int const x_203 = i;
-            p.y = as_type<int>((as_type<uint>(x_203) * as_type<uint>(2)));
-            canwalk = true;
-          }
-          {
-            int const x_206 = j;
-            j = as_type<int>((as_type<uint>(x_206) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_208 = i;
-          i = as_type<int>((as_type<uint>(x_208) + as_type<uint>(1)));
-        }
-      }
-      int const x_211 = p.x;
-      int const x_213 = p.y;
-      (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_211) + as_type<uint>(as_type<int>((as_type<uint>(x_213) * as_type<uint>(16))))))] = 1;
-    } else {
-      int const x_217 = v;
-      int const x_218 = directions;
-      d = (x_217 % x_218);
-      int const x_220 = directions;
-      int const x_221 = v;
-      v = as_type<int>((as_type<uint>(x_221) + as_type<uint>(x_220)));
-      int const x_223 = d;
-      bool const x_224 = (x_223 >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        int const x_228 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      bool const x_230 = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        int const x_234 = p.x;
-        int const x_237 = p.y;
-        int const x_241 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_234) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_237) * as_type<uint>(16))))))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      bool const x_243 = x_243_phi;
-      if (x_243) {
-        int const x_246 = d;
-        d = as_type<int>((as_type<uint>(x_246) - as_type<uint>(1)));
-        int const x_249 = p.x;
-        int const x_251 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_249) + as_type<uint>(as_type<int>((as_type<uint>(x_251) * as_type<uint>(16))))))] = 1;
-        int const x_256 = p.x;
-        int const x_259 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_256) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_259) * as_type<uint>(16))))))] = 1;
-        int const x_264 = p.x;
-        int const x_267 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_264) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_267) * as_type<uint>(16))))))] = 1;
-        int const x_272 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_272) - as_type<uint>(2)));
-      }
-      int const x_275 = d;
-      bool const x_276 = (x_275 >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        int const x_280 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      bool const x_282 = x_282_phi;
-      x_296_phi = x_282;
-      if (x_282) {
-        int const x_286 = p.x;
-        int const x_288 = p.y;
-        tint_array_wrapper const x_291 = *(tint_symbol_6);
-        tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        *(tint_symbol_6) = tint_symbol_2;
-        *(tint_symbol_6) = x_291;
-        int const x_294 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_286) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_288) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_295 = (x_294 == 0);
-        x_296_phi = x_295;
-      }
-      bool const x_296 = x_296_phi;
-      if (x_296) {
-        int const x_299 = d;
-        d = as_type<int>((as_type<uint>(x_299) - as_type<uint>(1)));
-        int const x_302 = p.x;
-        int const x_304 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_302) + as_type<uint>(as_type<int>((as_type<uint>(x_304) * as_type<uint>(16))))))] = 1;
-        int const x_309 = p.x;
-        int const x_311 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_309) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_311) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_317 = p.x;
-        int const x_319 = p.y;
-        tint_array_wrapper const x_321 = *(tint_symbol_6);
-        tint_array_wrapper const tint_symbol_3 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        *(tint_symbol_6) = tint_symbol_3;
-        *(tint_symbol_6) = x_321;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_317) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_319) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_326 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_326) - as_type<uint>(2)));
-      }
-      int const x_329 = d;
-      bool const x_330 = (x_329 >= 0);
-      x_336_phi = x_330;
-      if (x_330) {
-        int const x_334 = p.x;
-        x_335 = (x_334 < 14);
-        x_336_phi = x_335;
-      }
-      bool const x_336 = x_336_phi;
-      x_349_phi = x_336;
-      if (x_336) {
-        int const x_340 = p.x;
-        int const x_343 = p.y;
-        int const x_347 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_340) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_343) * as_type<uint>(16))))))];
-        x_348 = (x_347 == 0);
-        x_349_phi = x_348;
-      }
-      bool const x_349 = x_349_phi;
-      if (x_349) {
-        int const x_352 = d;
-        d = as_type<int>((as_type<uint>(x_352) - as_type<uint>(1)));
-        int const x_355 = p.x;
-        int const x_357 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_355) + as_type<uint>(as_type<int>((as_type<uint>(x_357) * as_type<uint>(16))))))] = 1;
-        int const x_362 = p.x;
-        int const x_365 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_362) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_365) * as_type<uint>(16))))))] = 1;
-        int const x_370 = p.x;
-        int const x_373 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_370) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_373) * as_type<uint>(16))))))] = 1;
-        int const x_378 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_378) + as_type<uint>(2)));
-      }
-      int const x_381 = d;
-      bool const x_382 = (x_381 >= 0);
-      x_388_phi = x_382;
-      if (x_382) {
-        int const x_386 = p.y;
-        x_387 = (x_386 < 14);
-        x_388_phi = x_387;
-      }
-      bool const x_388 = x_388_phi;
-      x_401_phi = x_388;
-      if (x_388) {
-        int const x_392 = p.x;
-        int const x_394 = p.y;
-        int const x_399 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_392) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_394) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_400 = (x_399 == 0);
-        x_401_phi = x_400;
-      }
-      bool const x_401 = x_401_phi;
-      if (x_401) {
-        int const x_404 = d;
-        d = as_type<int>((as_type<uint>(x_404) - as_type<uint>(1)));
-        int const x_407 = p.x;
-        int const x_409 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_407) + as_type<uint>(as_type<int>((as_type<uint>(x_409) * as_type<uint>(16))))))] = 1;
-        int const x_414 = p.x;
-        int const x_416 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_414) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_416) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_422 = p.x;
-        int const x_424 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_422) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_424) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_430 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_430) + as_type<uint>(2)));
-      }
-    }
-    int const x_434 = ipos.y;
-    int const x_437 = ipos.x;
-    int const x_440 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_434) * as_type<uint>(16)))) + as_type<uint>(x_437)))];
-    if ((x_440 == 1)) {
-      *(tint_symbol_7) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      bool const x_444 = canwalk;
-      if (x_444) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_7) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread tint_array_wrapper tint_symbol_12 = {};
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.spvasm
deleted file mode 100644
index 2b6e8e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,770 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 509
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %map "map"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %ipos "ipos"
-               OpName %i "i"
-               OpName %p "p"
-               OpName %canwalk "canwalk"
-               OpName %v "v"
-               OpName %directions "directions"
-               OpName %j "j"
-               OpName %d "d"
-               OpName %x_104 "x_104"
-               OpName %x_124 "x_124"
-               OpName %x_144 "x_144"
-               OpName %x_164 "x_164"
-               OpName %x_105_phi "x_105_phi"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_145_phi "x_145_phi"
-               OpName %x_165_phi "x_165_phi"
-               OpName %x_229 "x_229"
-               OpName %x_242 "x_242"
-               OpName %x_281 "x_281"
-               OpName %x_295 "x_295"
-               OpName %x_335 "x_335"
-               OpName %x_348 "x_348"
-               OpName %x_387 "x_387"
-               OpName %x_400 "x_400"
-               OpName %x_230_phi "x_230_phi"
-               OpName %x_243_phi "x_243_phi"
-               OpName %x_282_phi "x_282_phi"
-               OpName %x_296_phi "x_296_phi"
-               OpName %x_336_phi "x_336_phi"
-               OpName %x_349_phi "x_349_phi"
-               OpName %x_388_phi "x_388_phi"
-               OpName %x_401_phi "x_401_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
-         %20 = OpConstantNull %_arr_int_uint_256
-        %map = OpVariable %_ptr_Private__arr_int_uint_256 Private %20
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %28 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %32 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %float_16 = OpConstant %float 16
-      %int_0 = OpConstant %int 0
-    %int_256 = OpConstant %int 256
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-         %83 = OpConstantComposite %v2int %int_0 %int_0
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-     %int_16 = OpConstant %int 16
-     %int_14 = OpConstant %int 14
-      %false = OpConstantFalse %bool
-      %int_8 = OpConstant %int 8
-        %331 = OpConstantComposite %_arr_int_uint_256 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-    %float_1 = OpConstant %float 1
-        %492 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-        %495 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %496 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %28
-       %ipos = OpVariable %_ptr_Function_v2int Function %32
-          %i = OpVariable %_ptr_Function_int Function %35
-          %p = OpVariable %_ptr_Function_v2int Function %32
-    %canwalk = OpVariable %_ptr_Function_bool Function %40
-          %v = OpVariable %_ptr_Function_int Function %35
- %directions = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-          %d = OpVariable %_ptr_Function_int Function %35
-      %x_104 = OpVariable %_ptr_Function_bool Function %40
-      %x_124 = OpVariable %_ptr_Function_bool Function %40
-      %x_144 = OpVariable %_ptr_Function_bool Function %40
-      %x_164 = OpVariable %_ptr_Function_bool Function %40
-  %x_105_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_125_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_145_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_165_phi = OpVariable %_ptr_Function_bool Function %40
-      %x_229 = OpVariable %_ptr_Function_bool Function %40
-      %x_242 = OpVariable %_ptr_Function_bool Function %40
-      %x_281 = OpVariable %_ptr_Function_bool Function %40
-      %x_295 = OpVariable %_ptr_Function_bool Function %40
-      %x_335 = OpVariable %_ptr_Function_bool Function %40
-      %x_348 = OpVariable %_ptr_Function_bool Function %40
-      %x_387 = OpVariable %_ptr_Function_bool Function %40
-      %x_400 = OpVariable %_ptr_Function_bool Function %40
-  %x_230_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_243_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_282_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_296_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_336_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_349_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_388_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_401_phi = OpVariable %_ptr_Function_bool Function %40
-         %45 = OpLoad %v4float %gl_FragCoord
-         %48 = OpAccessChain %_ptr_Uniform_v2float %x_7 %uint_0
-         %49 = OpLoad %v2float %48
-         %50 = OpCompositeExtract %float %45 0
-         %51 = OpCompositeExtract %float %45 1
-         %52 = OpCompositeConstruct %v2float %50 %51
-         %53 = OpFDiv %v2float %52 %49
-               OpStore %pos %53
-         %55 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %59 = OpLoad %float %58
-         %62 = OpFMul %float %56 %float_16
-         %60 = OpConvertFToS %int %62
-         %64 = OpFMul %float %59 %float_16
-         %63 = OpConvertFToS %int %64
-         %65 = OpCompositeConstruct %v2int %60 %63
-               OpStore %ipos %65
-               OpStore %i %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %73 = OpSLessThan %bool %71 %int_256
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %68
-         %74 = OpLabel
-         %77 = OpLoad %int %i
-         %79 = OpAccessChain %_ptr_Private_int %map %77
-               OpStore %79 %int_0
-               OpBranch %69
-         %69 = OpLabel
-         %80 = OpLoad %int %i
-         %82 = OpIAdd %int %80 %int_1
-               OpStore %i %82
-               OpBranch %67
-         %68 = OpLabel
-               OpStore %p %83
-               OpStore %canwalk %true
-               OpStore %v %int_0
-               OpBranch %85
-         %85 = OpLabel
-               OpLoopMerge %86 %87 None
-               OpBranch %88
-         %88 = OpLabel
-         %97 = OpLoad %int %v
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %v %98
-               OpStore %directions %int_0
-         %99 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %100 = OpLoad %int %99
-        %101 = OpSGreaterThan %bool %100 %int_0
-               OpStore %x_105_phi %101
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %107 = OpLoad %int %106
-        %109 = OpISub %int %105 %int_2
-        %111 = OpIMul %int %107 %int_16
-        %112 = OpIAdd %int %109 %111
-        %113 = OpAccessChain %_ptr_Private_int %map %112
-        %114 = OpLoad %int %113
-        %115 = OpIEqual %bool %114 %int_0
-               OpStore %x_104 %115
-        %116 = OpLoad %bool %x_104
-               OpStore %x_105_phi %116
-               OpBranch %102
-        %102 = OpLabel
-        %117 = OpLoad %bool %x_105_phi
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpLoad %int %directions
-        %121 = OpIAdd %int %120 %int_1
-               OpStore %directions %121
-               OpBranch %118
-        %118 = OpLabel
-        %122 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %123 = OpLoad %int %122
-        %124 = OpSGreaterThan %bool %123 %int_0
-               OpStore %x_125_phi %124
-               OpSelectionMerge %125 None
-               OpBranchConditional %124 %126 %125
-        %126 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %130 = OpLoad %int %129
-        %131 = OpISub %int %130 %int_2
-        %132 = OpIMul %int %131 %int_16
-        %133 = OpIAdd %int %128 %132
-        %134 = OpAccessChain %_ptr_Private_int %map %133
-        %135 = OpLoad %int %134
-        %136 = OpIEqual %bool %135 %int_0
-               OpStore %x_124 %136
-        %137 = OpLoad %bool %x_124
-               OpStore %x_125_phi %137
-               OpBranch %125
-        %125 = OpLabel
-        %138 = OpLoad %bool %x_125_phi
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %int %directions
-        %142 = OpIAdd %int %141 %int_1
-               OpStore %directions %142
-               OpBranch %139
-        %139 = OpLabel
-        %143 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %144 = OpLoad %int %143
-        %146 = OpSLessThan %bool %144 %int_14
-               OpStore %x_145_phi %146
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-        %149 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %150 = OpLoad %int %149
-        %151 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %152 = OpLoad %int %151
-        %153 = OpIAdd %int %150 %int_2
-        %154 = OpIMul %int %152 %int_16
-        %155 = OpIAdd %int %153 %154
-        %156 = OpAccessChain %_ptr_Private_int %map %155
-        %157 = OpLoad %int %156
-        %158 = OpIEqual %bool %157 %int_0
-               OpStore %x_144 %158
-        %159 = OpLoad %bool %x_144
-               OpStore %x_145_phi %159
-               OpBranch %147
-        %147 = OpLabel
-        %160 = OpLoad %bool %x_145_phi
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %161
-        %162 = OpLabel
-        %163 = OpLoad %int %directions
-        %164 = OpIAdd %int %163 %int_1
-               OpStore %directions %164
-               OpBranch %161
-        %161 = OpLabel
-        %165 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %166 %int_14
-               OpStore %x_165_phi %167
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %168
-        %169 = OpLabel
-        %170 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %171 = OpLoad %int %170
-        %172 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %173 = OpLoad %int %172
-        %174 = OpIAdd %int %173 %int_2
-        %175 = OpIMul %int %174 %int_16
-        %176 = OpIAdd %int %171 %175
-        %177 = OpAccessChain %_ptr_Private_int %map %176
-        %178 = OpLoad %int %177
-        %179 = OpIEqual %bool %178 %int_0
-               OpStore %x_164 %179
-        %180 = OpLoad %bool %x_164
-               OpStore %x_165_phi %180
-               OpBranch %168
-        %168 = OpLabel
-        %181 = OpLoad %bool %x_165_phi
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %directions
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %directions %185
-               OpBranch %182
-        %182 = OpLabel
-        %202 = OpLoad %int %directions
-        %203 = OpIEqual %bool %202 %int_0
-               OpSelectionMerge %204 None
-               OpBranchConditional %203 %205 %206
-        %205 = OpLabel
-               OpStore %canwalk %false
-               OpStore %i %int_0
-               OpBranch %208
-        %208 = OpLabel
-               OpLoopMerge %209 %210 None
-               OpBranch %211
-        %211 = OpLabel
-        %212 = OpLoad %int %i
-        %214 = OpSLessThan %bool %212 %int_8
-               OpSelectionMerge %215 None
-               OpBranchConditional %214 %216 %217
-        %216 = OpLabel
-               OpBranch %215
-        %217 = OpLabel
-               OpBranch %209
-        %215 = OpLabel
-               OpStore %j %int_0
-               OpBranch %218
-        %218 = OpLabel
-               OpLoopMerge %219 %220 None
-               OpBranch %221
-        %221 = OpLabel
-        %222 = OpLoad %int %j
-        %223 = OpSLessThan %bool %222 %int_8
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %226
-        %225 = OpLabel
-               OpBranch %224
-        %226 = OpLabel
-               OpBranch %219
-        %224 = OpLabel
-        %227 = OpLoad %int %j
-        %228 = OpLoad %int %i
-        %229 = OpIMul %int %227 %int_2
-        %230 = OpIMul %int %228 %int_2
-        %231 = OpIMul %int %230 %int_16
-        %232 = OpIAdd %int %229 %231
-        %233 = OpAccessChain %_ptr_Private_int %map %232
-        %234 = OpLoad %int %233
-        %235 = OpIEqual %bool %234 %int_0
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %236
-        %237 = OpLabel
-        %238 = OpLoad %int %j
-        %239 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %240 = OpIMul %int %238 %int_2
-               OpStore %239 %240
-        %241 = OpLoad %int %i
-        %242 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %243 = OpIMul %int %241 %int_2
-               OpStore %242 %243
-               OpStore %canwalk %true
-               OpBranch %236
-        %236 = OpLabel
-               OpBranch %220
-        %220 = OpLabel
-        %244 = OpLoad %int %j
-        %245 = OpIAdd %int %244 %int_1
-               OpStore %j %245
-               OpBranch %218
-        %219 = OpLabel
-               OpBranch %210
-        %210 = OpLabel
-        %246 = OpLoad %int %i
-        %247 = OpIAdd %int %246 %int_1
-               OpStore %i %247
-               OpBranch %208
-        %209 = OpLabel
-        %248 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %249 = OpLoad %int %248
-        %250 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %251 = OpLoad %int %250
-        %252 = OpIMul %int %251 %int_16
-        %253 = OpIAdd %int %249 %252
-        %254 = OpAccessChain %_ptr_Private_int %map %253
-               OpStore %254 %int_1
-               OpBranch %204
-        %206 = OpLabel
-        %255 = OpLoad %int %v
-        %256 = OpLoad %int %directions
-        %257 = OpSMod %int %255 %256
-               OpStore %d %257
-        %258 = OpLoad %int %directions
-        %259 = OpLoad %int %v
-        %260 = OpIAdd %int %259 %258
-               OpStore %v %260
-        %261 = OpLoad %int %d
-        %262 = OpSGreaterThanEqual %bool %261 %int_0
-               OpStore %x_230_phi %262
-               OpSelectionMerge %263 None
-               OpBranchConditional %262 %264 %263
-        %264 = OpLabel
-        %265 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %266 = OpLoad %int %265
-        %267 = OpSGreaterThan %bool %266 %int_0
-               OpStore %x_229 %267
-        %268 = OpLoad %bool %x_229
-               OpStore %x_230_phi %268
-               OpBranch %263
-        %263 = OpLabel
-        %269 = OpLoad %bool %x_230_phi
-               OpStore %x_243_phi %269
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %270
-        %271 = OpLabel
-        %272 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %273 = OpLoad %int %272
-        %274 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %275 = OpLoad %int %274
-        %276 = OpISub %int %273 %int_2
-        %277 = OpIMul %int %275 %int_16
-        %278 = OpIAdd %int %276 %277
-        %279 = OpAccessChain %_ptr_Private_int %map %278
-        %280 = OpLoad %int %279
-        %281 = OpIEqual %bool %280 %int_0
-               OpStore %x_242 %281
-        %282 = OpLoad %bool %x_242
-               OpStore %x_243_phi %282
-               OpBranch %270
-        %270 = OpLabel
-        %283 = OpLoad %bool %x_243_phi
-               OpSelectionMerge %284 None
-               OpBranchConditional %283 %285 %284
-        %285 = OpLabel
-        %286 = OpLoad %int %d
-        %287 = OpISub %int %286 %int_1
-               OpStore %d %287
-        %288 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %289 = OpLoad %int %288
-        %290 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %291 = OpLoad %int %290
-        %292 = OpIMul %int %291 %int_16
-        %293 = OpIAdd %int %289 %292
-        %294 = OpAccessChain %_ptr_Private_int %map %293
-               OpStore %294 %int_1
-        %295 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %296 = OpLoad %int %295
-        %297 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %298 = OpLoad %int %297
-        %299 = OpISub %int %296 %int_1
-        %300 = OpIMul %int %298 %int_16
-        %301 = OpIAdd %int %299 %300
-        %302 = OpAccessChain %_ptr_Private_int %map %301
-               OpStore %302 %int_1
-        %303 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %304 = OpLoad %int %303
-        %305 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %306 = OpLoad %int %305
-        %307 = OpISub %int %304 %int_2
-        %308 = OpIMul %int %306 %int_16
-        %309 = OpIAdd %int %307 %308
-        %310 = OpAccessChain %_ptr_Private_int %map %309
-               OpStore %310 %int_1
-        %311 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %312 = OpLoad %int %311
-        %313 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %314 = OpISub %int %312 %int_2
-               OpStore %313 %314
-               OpBranch %284
-        %284 = OpLabel
-        %315 = OpLoad %int %d
-        %316 = OpSGreaterThanEqual %bool %315 %int_0
-               OpStore %x_282_phi %316
-               OpSelectionMerge %317 None
-               OpBranchConditional %316 %318 %317
-        %318 = OpLabel
-        %319 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %320 = OpLoad %int %319
-        %321 = OpSGreaterThan %bool %320 %int_0
-               OpStore %x_281 %321
-        %322 = OpLoad %bool %x_281
-               OpStore %x_282_phi %322
-               OpBranch %317
-        %317 = OpLabel
-        %323 = OpLoad %bool %x_282_phi
-               OpStore %x_296_phi %323
-               OpSelectionMerge %324 None
-               OpBranchConditional %323 %325 %324
-        %325 = OpLabel
-        %326 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %327 = OpLoad %int %326
-        %328 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %329 = OpLoad %int %328
-        %330 = OpLoad %_arr_int_uint_256 %map
-               OpStore %map %331
-               OpStore %map %330
-        %332 = OpISub %int %329 %int_2
-        %333 = OpIMul %int %332 %int_16
-        %334 = OpIAdd %int %327 %333
-        %335 = OpAccessChain %_ptr_Private_int %map %334
-        %336 = OpLoad %int %335
-        %337 = OpIEqual %bool %336 %int_0
-               OpStore %x_295 %337
-        %338 = OpLoad %bool %x_295
-               OpStore %x_296_phi %338
-               OpBranch %324
-        %324 = OpLabel
-        %339 = OpLoad %bool %x_296_phi
-               OpSelectionMerge %340 None
-               OpBranchConditional %339 %341 %340
-        %341 = OpLabel
-        %342 = OpLoad %int %d
-        %343 = OpISub %int %342 %int_1
-               OpStore %d %343
-        %344 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %345 = OpLoad %int %344
-        %346 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %347 = OpLoad %int %346
-        %348 = OpIMul %int %347 %int_16
-        %349 = OpIAdd %int %345 %348
-        %350 = OpAccessChain %_ptr_Private_int %map %349
-               OpStore %350 %int_1
-        %351 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %352 = OpLoad %int %351
-        %353 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %354 = OpLoad %int %353
-        %355 = OpISub %int %354 %int_1
-        %356 = OpIMul %int %355 %int_16
-        %357 = OpIAdd %int %352 %356
-        %358 = OpAccessChain %_ptr_Private_int %map %357
-               OpStore %358 %int_1
-        %359 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %360 = OpLoad %int %359
-        %361 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %362 = OpLoad %int %361
-        %363 = OpLoad %_arr_int_uint_256 %map
-               OpStore %map %331
-               OpStore %map %363
-        %364 = OpISub %int %362 %int_2
-        %365 = OpIMul %int %364 %int_16
-        %366 = OpIAdd %int %360 %365
-        %367 = OpAccessChain %_ptr_Private_int %map %366
-               OpStore %367 %int_1
-        %368 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %369 = OpLoad %int %368
-        %370 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %371 = OpISub %int %369 %int_2
-               OpStore %370 %371
-               OpBranch %340
-        %340 = OpLabel
-        %372 = OpLoad %int %d
-        %373 = OpSGreaterThanEqual %bool %372 %int_0
-               OpStore %x_336_phi %373
-               OpSelectionMerge %374 None
-               OpBranchConditional %373 %375 %374
-        %375 = OpLabel
-        %376 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %377 = OpLoad %int %376
-        %378 = OpSLessThan %bool %377 %int_14
-               OpStore %x_335 %378
-        %379 = OpLoad %bool %x_335
-               OpStore %x_336_phi %379
-               OpBranch %374
-        %374 = OpLabel
-        %380 = OpLoad %bool %x_336_phi
-               OpStore %x_349_phi %380
-               OpSelectionMerge %381 None
-               OpBranchConditional %380 %382 %381
-        %382 = OpLabel
-        %383 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %384 = OpLoad %int %383
-        %385 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %386 = OpLoad %int %385
-        %387 = OpIAdd %int %384 %int_2
-        %388 = OpIMul %int %386 %int_16
-        %389 = OpIAdd %int %387 %388
-        %390 = OpAccessChain %_ptr_Private_int %map %389
-        %391 = OpLoad %int %390
-        %392 = OpIEqual %bool %391 %int_0
-               OpStore %x_348 %392
-        %393 = OpLoad %bool %x_348
-               OpStore %x_349_phi %393
-               OpBranch %381
-        %381 = OpLabel
-        %394 = OpLoad %bool %x_349_phi
-               OpSelectionMerge %395 None
-               OpBranchConditional %394 %396 %395
-        %396 = OpLabel
-        %397 = OpLoad %int %d
-        %398 = OpISub %int %397 %int_1
-               OpStore %d %398
-        %399 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %400 = OpLoad %int %399
-        %401 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %402 = OpLoad %int %401
-        %403 = OpIMul %int %402 %int_16
-        %404 = OpIAdd %int %400 %403
-        %405 = OpAccessChain %_ptr_Private_int %map %404
-               OpStore %405 %int_1
-        %406 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %407 = OpLoad %int %406
-        %408 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %409 = OpLoad %int %408
-        %410 = OpIAdd %int %407 %int_1
-        %411 = OpIMul %int %409 %int_16
-        %412 = OpIAdd %int %410 %411
-        %413 = OpAccessChain %_ptr_Private_int %map %412
-               OpStore %413 %int_1
-        %414 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %415 = OpLoad %int %414
-        %416 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %417 = OpLoad %int %416
-        %418 = OpIAdd %int %415 %int_2
-        %419 = OpIMul %int %417 %int_16
-        %420 = OpIAdd %int %418 %419
-        %421 = OpAccessChain %_ptr_Private_int %map %420
-               OpStore %421 %int_1
-        %422 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %423 = OpLoad %int %422
-        %424 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %425 = OpIAdd %int %423 %int_2
-               OpStore %424 %425
-               OpBranch %395
-        %395 = OpLabel
-        %426 = OpLoad %int %d
-        %427 = OpSGreaterThanEqual %bool %426 %int_0
-               OpStore %x_388_phi %427
-               OpSelectionMerge %428 None
-               OpBranchConditional %427 %429 %428
-        %429 = OpLabel
-        %430 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %431 = OpLoad %int %430
-        %432 = OpSLessThan %bool %431 %int_14
-               OpStore %x_387 %432
-        %433 = OpLoad %bool %x_387
-               OpStore %x_388_phi %433
-               OpBranch %428
-        %428 = OpLabel
-        %434 = OpLoad %bool %x_388_phi
-               OpStore %x_401_phi %434
-               OpSelectionMerge %435 None
-               OpBranchConditional %434 %436 %435
-        %436 = OpLabel
-        %437 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %438 = OpLoad %int %437
-        %439 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %440 = OpLoad %int %439
-        %441 = OpIAdd %int %440 %int_2
-        %442 = OpIMul %int %441 %int_16
-        %443 = OpIAdd %int %438 %442
-        %444 = OpAccessChain %_ptr_Private_int %map %443
-        %445 = OpLoad %int %444
-        %446 = OpIEqual %bool %445 %int_0
-               OpStore %x_400 %446
-        %447 = OpLoad %bool %x_400
-               OpStore %x_401_phi %447
-               OpBranch %435
-        %435 = OpLabel
-        %448 = OpLoad %bool %x_401_phi
-               OpSelectionMerge %449 None
-               OpBranchConditional %448 %450 %449
-        %450 = OpLabel
-        %451 = OpLoad %int %d
-        %452 = OpISub %int %451 %int_1
-               OpStore %d %452
-        %453 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %454 = OpLoad %int %453
-        %455 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %456 = OpLoad %int %455
-        %457 = OpIMul %int %456 %int_16
-        %458 = OpIAdd %int %454 %457
-        %459 = OpAccessChain %_ptr_Private_int %map %458
-               OpStore %459 %int_1
-        %460 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %461 = OpLoad %int %460
-        %462 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %463 = OpLoad %int %462
-        %464 = OpIAdd %int %463 %int_1
-        %465 = OpIMul %int %464 %int_16
-        %466 = OpIAdd %int %461 %465
-        %467 = OpAccessChain %_ptr_Private_int %map %466
-               OpStore %467 %int_1
-        %468 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %469 = OpLoad %int %468
-        %470 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %471 = OpLoad %int %470
-        %472 = OpIAdd %int %471 %int_2
-        %473 = OpIMul %int %472 %int_16
-        %474 = OpIAdd %int %469 %473
-        %475 = OpAccessChain %_ptr_Private_int %map %474
-               OpStore %475 %int_1
-        %476 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %477 = OpLoad %int %476
-        %478 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %479 = OpIAdd %int %477 %int_2
-               OpStore %478 %479
-               OpBranch %449
-        %449 = OpLabel
-               OpBranch %204
-        %204 = OpLabel
-        %480 = OpAccessChain %_ptr_Function_int %ipos %uint_1
-        %481 = OpLoad %int %480
-        %482 = OpAccessChain %_ptr_Function_int %ipos %uint_0
-        %483 = OpLoad %int %482
-        %484 = OpIMul %int %481 %int_16
-        %485 = OpIAdd %int %484 %483
-        %486 = OpAccessChain %_ptr_Private_int %map %485
-        %487 = OpLoad %int %486
-        %488 = OpIEqual %bool %487 %int_1
-               OpSelectionMerge %489 None
-               OpBranchConditional %488 %490 %489
-        %490 = OpLabel
-               OpStore %x_GLF_color %492
-               OpReturn
-        %489 = OpLabel
-               OpBranch %87
-         %87 = OpLabel
-        %493 = OpLoad %bool %canwalk
-               OpBranchConditional %493 %85 %86
-         %86 = OpLabel
-               OpStore %x_GLF_color %495
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %496
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %500 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %501 = OpFunctionCall %void %main_1
-        %502 = OpLoad %v4float %x_GLF_color
-        %503 = OpCompositeConstruct %main_out %502
-               OpReturnValue %503
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %505 = OpLabel
-        %507 = OpLoad %v4float %gl_FragCoord_param_1
-        %506 = OpFunctionCall %main_out %main_inner %507
-        %508 = OpCompositeExtract %v4float %506 0
-               OpStore %x_GLF_color_1_1 %508
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.wgsl
deleted file mode 100644
index 774e546..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,354 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> map : array<i32, 256>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var ipos : vec2<i32>;
-  var i : i32;
-  var p : vec2<i32>;
-  var canwalk : bool;
-  var v : i32;
-  var directions : i32;
-  var j : i32;
-  var d : i32;
-  let x_59 : vec4<f32> = gl_FragCoord;
-  let x_62 : vec2<f32> = x_7.resolution;
-  pos = (vec2<f32>(x_59.x, x_59.y) / x_62);
-  let x_65 : f32 = pos.x;
-  let x_69 : f32 = pos.y;
-  ipos = vec2<i32>(i32((x_65 * 16.0)), i32((x_69 * 16.0)));
-  i = 0;
-  loop {
-    let x_77 : i32 = i;
-    if ((x_77 < 256)) {
-    } else {
-      break;
-    }
-    let x_80 : i32 = i;
-    map[x_80] = 0;
-
-    continuing {
-      let x_82 : i32 = i;
-      i = (x_82 + 1);
-    }
-  }
-  p = vec2<i32>(0, 0);
-  canwalk = true;
-  v = 0;
-  loop {
-    var x_104 : bool;
-    var x_124 : bool;
-    var x_144 : bool;
-    var x_164 : bool;
-    var x_105_phi : bool;
-    var x_125_phi : bool;
-    var x_145_phi : bool;
-    var x_165_phi : bool;
-    let x_88 : i32 = v;
-    v = (x_88 + 1);
-    directions = 0;
-    let x_91 : i32 = p.x;
-    let x_92 : bool = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      let x_96 : i32 = p.x;
-      let x_99 : i32 = p.y;
-      let x_103 : i32 = map[((x_96 - 2) + (x_99 * 16))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    let x_105 : bool = x_105_phi;
-    if (x_105) {
-      let x_108 : i32 = directions;
-      directions = (x_108 + 1);
-    }
-    let x_111 : i32 = p.y;
-    let x_112 : bool = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      let x_116 : i32 = p.x;
-      let x_118 : i32 = p.y;
-      let x_123 : i32 = map[(x_116 + ((x_118 - 2) * 16))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    let x_125 : bool = x_125_phi;
-    if (x_125) {
-      let x_128 : i32 = directions;
-      directions = (x_128 + 1);
-    }
-    let x_131 : i32 = p.x;
-    let x_132 : bool = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      let x_136 : i32 = p.x;
-      let x_139 : i32 = p.y;
-      let x_143 : i32 = map[((x_136 + 2) + (x_139 * 16))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    let x_145 : bool = x_145_phi;
-    if (x_145) {
-      let x_148 : i32 = directions;
-      directions = (x_148 + 1);
-    }
-    let x_151 : i32 = p.y;
-    let x_152 : bool = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      let x_156 : i32 = p.x;
-      let x_158 : i32 = p.y;
-      let x_163 : i32 = map[(x_156 + ((x_158 + 2) * 16))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    let x_165 : bool = x_165_phi;
-    if (x_165) {
-      let x_168 : i32 = directions;
-      directions = (x_168 + 1);
-    }
-    var x_229 : bool;
-    var x_242 : bool;
-    var x_281 : bool;
-    var x_295 : bool;
-    var x_335 : bool;
-    var x_348 : bool;
-    var x_387 : bool;
-    var x_400 : bool;
-    var x_230_phi : bool;
-    var x_243_phi : bool;
-    var x_282_phi : bool;
-    var x_296_phi : bool;
-    var x_336_phi : bool;
-    var x_349_phi : bool;
-    var x_388_phi : bool;
-    var x_401_phi : bool;
-    let x_170 : i32 = directions;
-    if ((x_170 == 0)) {
-      canwalk = false;
-      i = 0;
-      loop {
-        let x_179 : i32 = i;
-        if ((x_179 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        loop {
-          let x_186 : i32 = j;
-          if ((x_186 < 8)) {
-          } else {
-            break;
-          }
-          let x_189 : i32 = j;
-          let x_191 : i32 = i;
-          let x_196 : i32 = map[((x_189 * 2) + ((x_191 * 2) * 16))];
-          if ((x_196 == 0)) {
-            let x_200 : i32 = j;
-            p.x = (x_200 * 2);
-            let x_203 : i32 = i;
-            p.y = (x_203 * 2);
-            canwalk = true;
-          }
-
-          continuing {
-            let x_206 : i32 = j;
-            j = (x_206 + 1);
-          }
-        }
-
-        continuing {
-          let x_208 : i32 = i;
-          i = (x_208 + 1);
-        }
-      }
-      let x_211 : i32 = p.x;
-      let x_213 : i32 = p.y;
-      map[(x_211 + (x_213 * 16))] = 1;
-    } else {
-      let x_217 : i32 = v;
-      let x_218 : i32 = directions;
-      d = (x_217 % x_218);
-      let x_220 : i32 = directions;
-      let x_221 : i32 = v;
-      v = (x_221 + x_220);
-      let x_223 : i32 = d;
-      let x_224 : bool = (x_223 >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        let x_228 : i32 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      let x_230 : bool = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        let x_234 : i32 = p.x;
-        let x_237 : i32 = p.y;
-        let x_241 : i32 = map[((x_234 - 2) + (x_237 * 16))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      let x_243 : bool = x_243_phi;
-      if (x_243) {
-        let x_246 : i32 = d;
-        d = (x_246 - 1);
-        let x_249 : i32 = p.x;
-        let x_251 : i32 = p.y;
-        map[(x_249 + (x_251 * 16))] = 1;
-        let x_256 : i32 = p.x;
-        let x_259 : i32 = p.y;
-        map[((x_256 - 1) + (x_259 * 16))] = 1;
-        let x_264 : i32 = p.x;
-        let x_267 : i32 = p.y;
-        map[((x_264 - 2) + (x_267 * 16))] = 1;
-        let x_272 : i32 = p.x;
-        p.x = (x_272 - 2);
-      }
-      let x_275 : i32 = d;
-      let x_276 : bool = (x_275 >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        let x_280 : i32 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      let x_282 : bool = x_282_phi;
-      x_296_phi = x_282;
-      if (x_282) {
-        let x_286 : i32 = p.x;
-        let x_288 : i32 = p.y;
-        let x_291 : array<i32, 256> = map;
-        map = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        map = x_291;
-        let x_294 : i32 = map[(x_286 + ((x_288 - 2) * 16))];
-        x_295 = (x_294 == 0);
-        x_296_phi = x_295;
-      }
-      let x_296 : bool = x_296_phi;
-      if (x_296) {
-        let x_299 : i32 = d;
-        d = (x_299 - 1);
-        let x_302 : i32 = p.x;
-        let x_304 : i32 = p.y;
-        map[(x_302 + (x_304 * 16))] = 1;
-        let x_309 : i32 = p.x;
-        let x_311 : i32 = p.y;
-        map[(x_309 + ((x_311 - 1) * 16))] = 1;
-        let x_317 : i32 = p.x;
-        let x_319 : i32 = p.y;
-        let x_321 : array<i32, 256> = map;
-        map = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        map = x_321;
-        map[(x_317 + ((x_319 - 2) * 16))] = 1;
-        let x_326 : i32 = p.y;
-        p.y = (x_326 - 2);
-      }
-      let x_329 : i32 = d;
-      let x_330 : bool = (x_329 >= 0);
-      x_336_phi = x_330;
-      if (x_330) {
-        let x_334 : i32 = p.x;
-        x_335 = (x_334 < 14);
-        x_336_phi = x_335;
-      }
-      let x_336 : bool = x_336_phi;
-      x_349_phi = x_336;
-      if (x_336) {
-        let x_340 : i32 = p.x;
-        let x_343 : i32 = p.y;
-        let x_347 : i32 = map[((x_340 + 2) + (x_343 * 16))];
-        x_348 = (x_347 == 0);
-        x_349_phi = x_348;
-      }
-      let x_349 : bool = x_349_phi;
-      if (x_349) {
-        let x_352 : i32 = d;
-        d = (x_352 - 1);
-        let x_355 : i32 = p.x;
-        let x_357 : i32 = p.y;
-        map[(x_355 + (x_357 * 16))] = 1;
-        let x_362 : i32 = p.x;
-        let x_365 : i32 = p.y;
-        map[((x_362 + 1) + (x_365 * 16))] = 1;
-        let x_370 : i32 = p.x;
-        let x_373 : i32 = p.y;
-        map[((x_370 + 2) + (x_373 * 16))] = 1;
-        let x_378 : i32 = p.x;
-        p.x = (x_378 + 2);
-      }
-      let x_381 : i32 = d;
-      let x_382 : bool = (x_381 >= 0);
-      x_388_phi = x_382;
-      if (x_382) {
-        let x_386 : i32 = p.y;
-        x_387 = (x_386 < 14);
-        x_388_phi = x_387;
-      }
-      let x_388 : bool = x_388_phi;
-      x_401_phi = x_388;
-      if (x_388) {
-        let x_392 : i32 = p.x;
-        let x_394 : i32 = p.y;
-        let x_399 : i32 = map[(x_392 + ((x_394 + 2) * 16))];
-        x_400 = (x_399 == 0);
-        x_401_phi = x_400;
-      }
-      let x_401 : bool = x_401_phi;
-      if (x_401) {
-        let x_404 : i32 = d;
-        d = (x_404 - 1);
-        let x_407 : i32 = p.x;
-        let x_409 : i32 = p.y;
-        map[(x_407 + (x_409 * 16))] = 1;
-        let x_414 : i32 = p.x;
-        let x_416 : i32 = p.y;
-        map[(x_414 + ((x_416 + 1) * 16))] = 1;
-        let x_422 : i32 = p.x;
-        let x_424 : i32 = p.y;
-        map[(x_422 + ((x_424 + 2) * 16))] = 1;
-        let x_430 : i32 = p.y;
-        p.y = (x_430 + 2);
-      }
-    }
-    let x_434 : i32 = ipos.y;
-    let x_437 : i32 = ipos.x;
-    let x_440 : i32 = map[((x_434 * 16) + x_437)];
-    if ((x_440 == 1)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      return;
-    }
-
-    continuing {
-      let x_444 : bool = canwalk;
-      if (x_444) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.hlsl
deleted file mode 100644
index ac04bb1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,305 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static int map[256] = (int[256])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int i = 0;
-  int2 p = int2(0, 0);
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  const float4 x_59 = gl_FragCoord;
-  const float2 x_62 = asfloat(x_7[0].xy);
-  pos = (float2(x_59.x, x_59.y) / x_62);
-  const float x_65 = pos.x;
-  const float x_69 = pos.y;
-  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      map[i] = 0;
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_104 = false;
-    bool x_124 = false;
-    bool x_144 = false;
-    bool x_164 = false;
-    bool x_105_phi = false;
-    bool x_125_phi = false;
-    bool x_145_phi = false;
-    bool x_165_phi = false;
-    v = (v + 1);
-    directions = 0;
-    const int x_91 = p.x;
-    const bool x_92 = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      const int x_96 = p.x;
-      const int x_99 = p.y;
-      const int x_103 = map[((x_96 - 2) + (x_99 * 16))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    if (x_105_phi) {
-      directions = (directions + 1);
-    }
-    const int x_111 = p.y;
-    const bool x_112 = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      const int x_116 = p.x;
-      const int x_118 = p.y;
-      const int x_123 = map[(x_116 + ((x_118 - 2) * 16))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    if (x_125_phi) {
-      directions = (directions + 1);
-    }
-    const int x_131 = p.x;
-    const bool x_132 = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      const int x_136 = p.x;
-      const int x_139 = p.y;
-      const int x_143 = map[((x_136 + 2) + (x_139 * 16))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    if (x_145_phi) {
-      directions = (directions + 1);
-    }
-    const int x_151 = p.y;
-    const bool x_152 = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      const int x_156 = p.x;
-      const int x_158 = p.y;
-      const int x_163 = map[(x_156 + ((x_158 + 2) * 16))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    if (x_165_phi) {
-      directions = (directions + 1);
-    }
-    bool x_229 = false;
-    bool x_242 = false;
-    bool x_281 = false;
-    bool x_295 = false;
-    bool x_335 = false;
-    bool x_348 = false;
-    bool x_387 = false;
-    bool x_400 = false;
-    bool x_230_phi = false;
-    bool x_243_phi = false;
-    bool x_282_phi = false;
-    bool x_296_phi = false;
-    bool x_336_phi = false;
-    bool x_349_phi = false;
-    bool x_388_phi = false;
-    bool x_401_phi = false;
-    if ((directions == 0)) {
-      canwalk = false;
-      i = 0;
-      {
-        for(; (i < 8); i = (i + 1)) {
-          j = 0;
-          {
-            for(; (j < 8); j = (j + 1)) {
-              const int x_196 = map[((j * 2) + ((i * 2) * 16))];
-              if ((x_196 == 0)) {
-                p.x = (j * 2);
-                p.y = (i * 2);
-                canwalk = true;
-              }
-            }
-          }
-        }
-      }
-      const int x_211 = p.x;
-      const int x_213 = p.y;
-      map[(x_211 + (x_213 * 16))] = 1;
-    } else {
-      d = (v % directions);
-      v = (v + directions);
-      const bool x_224 = (d >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        const int x_228 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      const bool x_230 = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        const int x_234 = p.x;
-        const int x_237 = p.y;
-        const int x_241 = map[((x_234 - 2) + (x_237 * 16))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      if (x_243_phi) {
-        d = (d - 1);
-        const int x_249 = p.x;
-        const int x_251 = p.y;
-        map[(x_249 + (x_251 * 16))] = 1;
-        const int x_256 = p.x;
-        const int x_259 = p.y;
-        map[((x_256 - 1) + (x_259 * 16))] = 1;
-        const int x_264 = p.x;
-        const int x_267 = p.y;
-        map[((x_264 - 2) + (x_267 * 16))] = 1;
-        const int x_272 = p.x;
-        p.x = (x_272 - 2);
-      }
-      const bool x_276 = (d >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        const int x_280 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      const bool x_282 = x_282_phi;
-      x_296_phi = x_282;
-      if (x_282) {
-        const int x_286 = p.x;
-        const int x_288 = p.y;
-        const int x_291[256] = map;
-        const int tint_symbol_4[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        map = tint_symbol_4;
-        map = x_291;
-        const int x_294 = map[(x_286 + ((x_288 - 2) * 16))];
-        x_295 = (x_294 == 0);
-        x_296_phi = x_295;
-      }
-      if (x_296_phi) {
-        d = (d - 1);
-        const int x_302 = p.x;
-        const int x_304 = p.y;
-        map[(x_302 + (x_304 * 16))] = 1;
-        const int x_309 = p.x;
-        const int x_311 = p.y;
-        map[(x_309 + ((x_311 - 1) * 16))] = 1;
-        const int x_317 = p.x;
-        const int x_319 = p.y;
-        const int x_321[256] = map;
-        const int tint_symbol_5[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        map = tint_symbol_5;
-        map = x_321;
-        map[(x_317 + ((x_319 - 2) * 16))] = 1;
-        const int x_326 = p.y;
-        p.y = (x_326 - 2);
-      }
-      const bool x_330 = (d >= 0);
-      x_336_phi = x_330;
-      if (x_330) {
-        const int x_334 = p.x;
-        x_335 = (x_334 < 14);
-        x_336_phi = x_335;
-      }
-      const bool x_336 = x_336_phi;
-      x_349_phi = x_336;
-      if (x_336) {
-        const int x_340 = p.x;
-        const int x_343 = p.y;
-        const int x_347 = map[((x_340 + 2) + (x_343 * 16))];
-        x_348 = (x_347 == 0);
-        x_349_phi = x_348;
-      }
-      if (x_349_phi) {
-        d = (d - 1);
-        const int x_355 = p.x;
-        const int x_357 = p.y;
-        map[(x_355 + (x_357 * 16))] = 1;
-        const int x_362 = p.x;
-        const int x_365 = p.y;
-        map[((x_362 + 1) + (x_365 * 16))] = 1;
-        const int x_370 = p.x;
-        const int x_373 = p.y;
-        map[((x_370 + 2) + (x_373 * 16))] = 1;
-        const int x_378 = p.x;
-        p.x = (x_378 + 2);
-      }
-      const bool x_382 = (d >= 0);
-      x_388_phi = x_382;
-      if (x_382) {
-        const int x_386 = p.y;
-        x_387 = (x_386 < 14);
-        x_388_phi = x_387;
-      }
-      const bool x_388 = x_388_phi;
-      x_401_phi = x_388;
-      if (x_388) {
-        const int x_392 = p.x;
-        const int x_394 = p.y;
-        const int x_399 = map[(x_392 + ((x_394 + 2) * 16))];
-        x_400 = (x_399 == 0);
-        x_401_phi = x_400;
-      }
-      if (x_401_phi) {
-        d = (d - 1);
-        const int x_407 = p.x;
-        const int x_409 = p.y;
-        map[(x_407 + (x_409 * 16))] = 1;
-        const int x_414 = p.x;
-        const int x_416 = p.y;
-        map[(x_414 + ((x_416 + 1) * 16))] = 1;
-        const int x_422 = p.x;
-        const int x_424 = p.y;
-        map[(x_422 + ((x_424 + 2) * 16))] = 1;
-        const int x_430 = p.y;
-        p.y = (x_430 + 2);
-      }
-    }
-    const int x_434 = ipos.y;
-    const int x_437 = ipos.x;
-    const int x_440 = map[((x_434 * 16) + x_437)];
-    if ((x_440 == 1)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      if (canwalk) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.msl
deleted file mode 100644
index 55767c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.msl
+++ /dev/null
@@ -1,361 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float2 pos = 0.0f;
-  int2 ipos = 0;
-  int i = 0;
-  int2 p = 0;
-  bool canwalk = false;
-  int v = 0;
-  int directions = 0;
-  int j = 0;
-  int d = 0;
-  float4 const x_59 = *(tint_symbol_5);
-  float2 const x_62 = x_7.resolution;
-  pos = (float2(x_59.x, x_59.y) / x_62);
-  float const x_65 = pos.x;
-  float const x_69 = pos.y;
-  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
-  i = 0;
-  while (true) {
-    int const x_77 = i;
-    if ((x_77 < 256)) {
-    } else {
-      break;
-    }
-    int const x_80 = i;
-    (*(tint_symbol_6)).arr[x_80] = 0;
-    {
-      int const x_82 = i;
-      i = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
-    }
-  }
-  p = int2(0, 0);
-  canwalk = true;
-  v = 0;
-  while (true) {
-    bool x_104 = false;
-    bool x_124 = false;
-    bool x_144 = false;
-    bool x_164 = false;
-    bool x_105_phi = false;
-    bool x_125_phi = false;
-    bool x_145_phi = false;
-    bool x_165_phi = false;
-    int const x_88 = v;
-    v = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    directions = 0;
-    int const x_91 = p.x;
-    bool const x_92 = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      int const x_96 = p.x;
-      int const x_99 = p.y;
-      int const x_103 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_96) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_99) * as_type<uint>(16))))))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    bool const x_105 = x_105_phi;
-    if (x_105) {
-      int const x_108 = directions;
-      directions = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-    }
-    int const x_111 = p.y;
-    bool const x_112 = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      int const x_116 = p.x;
-      int const x_118 = p.y;
-      int const x_123 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_116) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_118) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    bool const x_125 = x_125_phi;
-    if (x_125) {
-      int const x_128 = directions;
-      directions = as_type<int>((as_type<uint>(x_128) + as_type<uint>(1)));
-    }
-    int const x_131 = p.x;
-    bool const x_132 = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      int const x_136 = p.x;
-      int const x_139 = p.y;
-      int const x_143 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_139) * as_type<uint>(16))))))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    bool const x_145 = x_145_phi;
-    if (x_145) {
-      int const x_148 = directions;
-      directions = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-    }
-    int const x_151 = p.y;
-    bool const x_152 = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      int const x_156 = p.x;
-      int const x_158 = p.y;
-      int const x_163 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_156) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_158) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    bool const x_165 = x_165_phi;
-    if (x_165) {
-      int const x_168 = directions;
-      directions = as_type<int>((as_type<uint>(x_168) + as_type<uint>(1)));
-    }
-    bool x_229 = false;
-    bool x_242 = false;
-    bool x_281 = false;
-    bool x_295 = false;
-    bool x_335 = false;
-    bool x_348 = false;
-    bool x_387 = false;
-    bool x_400 = false;
-    bool x_230_phi = false;
-    bool x_243_phi = false;
-    bool x_282_phi = false;
-    bool x_296_phi = false;
-    bool x_336_phi = false;
-    bool x_349_phi = false;
-    bool x_388_phi = false;
-    bool x_401_phi = false;
-    int const x_170 = directions;
-    if ((x_170 == 0)) {
-      canwalk = false;
-      i = 0;
-      while (true) {
-        int const x_179 = i;
-        if ((x_179 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        while (true) {
-          int const x_186 = j;
-          if ((x_186 < 8)) {
-          } else {
-            break;
-          }
-          int const x_189 = j;
-          int const x_191 = i;
-          int const x_196 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_189) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_191) * as_type<uint>(2)))) * as_type<uint>(16))))))];
-          if ((x_196 == 0)) {
-            int const x_200 = j;
-            p.x = as_type<int>((as_type<uint>(x_200) * as_type<uint>(2)));
-            int const x_203 = i;
-            p.y = as_type<int>((as_type<uint>(x_203) * as_type<uint>(2)));
-            canwalk = true;
-          }
-          {
-            int const x_206 = j;
-            j = as_type<int>((as_type<uint>(x_206) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_208 = i;
-          i = as_type<int>((as_type<uint>(x_208) + as_type<uint>(1)));
-        }
-      }
-      int const x_211 = p.x;
-      int const x_213 = p.y;
-      (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_211) + as_type<uint>(as_type<int>((as_type<uint>(x_213) * as_type<uint>(16))))))] = 1;
-    } else {
-      int const x_217 = v;
-      int const x_218 = directions;
-      d = (x_217 % x_218);
-      int const x_220 = directions;
-      int const x_221 = v;
-      v = as_type<int>((as_type<uint>(x_221) + as_type<uint>(x_220)));
-      int const x_223 = d;
-      bool const x_224 = (x_223 >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        int const x_228 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      bool const x_230 = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        int const x_234 = p.x;
-        int const x_237 = p.y;
-        int const x_241 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_234) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_237) * as_type<uint>(16))))))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      bool const x_243 = x_243_phi;
-      if (x_243) {
-        int const x_246 = d;
-        d = as_type<int>((as_type<uint>(x_246) - as_type<uint>(1)));
-        int const x_249 = p.x;
-        int const x_251 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_249) + as_type<uint>(as_type<int>((as_type<uint>(x_251) * as_type<uint>(16))))))] = 1;
-        int const x_256 = p.x;
-        int const x_259 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_256) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_259) * as_type<uint>(16))))))] = 1;
-        int const x_264 = p.x;
-        int const x_267 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_264) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_267) * as_type<uint>(16))))))] = 1;
-        int const x_272 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_272) - as_type<uint>(2)));
-      }
-      int const x_275 = d;
-      bool const x_276 = (x_275 >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        int const x_280 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      bool const x_282 = x_282_phi;
-      x_296_phi = x_282;
-      if (x_282) {
-        int const x_286 = p.x;
-        int const x_288 = p.y;
-        tint_array_wrapper const x_291 = *(tint_symbol_6);
-        tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        *(tint_symbol_6) = tint_symbol_2;
-        *(tint_symbol_6) = x_291;
-        int const x_294 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_286) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_288) - as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_295 = (x_294 == 0);
-        x_296_phi = x_295;
-      }
-      bool const x_296 = x_296_phi;
-      if (x_296) {
-        int const x_299 = d;
-        d = as_type<int>((as_type<uint>(x_299) - as_type<uint>(1)));
-        int const x_302 = p.x;
-        int const x_304 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_302) + as_type<uint>(as_type<int>((as_type<uint>(x_304) * as_type<uint>(16))))))] = 1;
-        int const x_309 = p.x;
-        int const x_311 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_309) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_311) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_317 = p.x;
-        int const x_319 = p.y;
-        tint_array_wrapper const x_321 = *(tint_symbol_6);
-        tint_array_wrapper const tint_symbol_3 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-        *(tint_symbol_6) = tint_symbol_3;
-        *(tint_symbol_6) = x_321;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_317) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_319) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_326 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_326) - as_type<uint>(2)));
-      }
-      int const x_329 = d;
-      bool const x_330 = (x_329 >= 0);
-      x_336_phi = x_330;
-      if (x_330) {
-        int const x_334 = p.x;
-        x_335 = (x_334 < 14);
-        x_336_phi = x_335;
-      }
-      bool const x_336 = x_336_phi;
-      x_349_phi = x_336;
-      if (x_336) {
-        int const x_340 = p.x;
-        int const x_343 = p.y;
-        int const x_347 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_340) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_343) * as_type<uint>(16))))))];
-        x_348 = (x_347 == 0);
-        x_349_phi = x_348;
-      }
-      bool const x_349 = x_349_phi;
-      if (x_349) {
-        int const x_352 = d;
-        d = as_type<int>((as_type<uint>(x_352) - as_type<uint>(1)));
-        int const x_355 = p.x;
-        int const x_357 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_355) + as_type<uint>(as_type<int>((as_type<uint>(x_357) * as_type<uint>(16))))))] = 1;
-        int const x_362 = p.x;
-        int const x_365 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_362) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_365) * as_type<uint>(16))))))] = 1;
-        int const x_370 = p.x;
-        int const x_373 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_370) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_373) * as_type<uint>(16))))))] = 1;
-        int const x_378 = p.x;
-        p.x = as_type<int>((as_type<uint>(x_378) + as_type<uint>(2)));
-      }
-      int const x_381 = d;
-      bool const x_382 = (x_381 >= 0);
-      x_388_phi = x_382;
-      if (x_382) {
-        int const x_386 = p.y;
-        x_387 = (x_386 < 14);
-        x_388_phi = x_387;
-      }
-      bool const x_388 = x_388_phi;
-      x_401_phi = x_388;
-      if (x_388) {
-        int const x_392 = p.x;
-        int const x_394 = p.y;
-        int const x_399 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_392) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_394) + as_type<uint>(2)))) * as_type<uint>(16))))))];
-        x_400 = (x_399 == 0);
-        x_401_phi = x_400;
-      }
-      bool const x_401 = x_401_phi;
-      if (x_401) {
-        int const x_404 = d;
-        d = as_type<int>((as_type<uint>(x_404) - as_type<uint>(1)));
-        int const x_407 = p.x;
-        int const x_409 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_407) + as_type<uint>(as_type<int>((as_type<uint>(x_409) * as_type<uint>(16))))))] = 1;
-        int const x_414 = p.x;
-        int const x_416 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_414) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_416) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
-        int const x_422 = p.x;
-        int const x_424 = p.y;
-        (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(x_422) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_424) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
-        int const x_430 = p.y;
-        p.y = as_type<int>((as_type<uint>(x_430) + as_type<uint>(2)));
-      }
-    }
-    int const x_434 = ipos.y;
-    int const x_437 = ipos.x;
-    int const x_440 = (*(tint_symbol_6)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_434) * as_type<uint>(16)))) + as_type<uint>(x_437)))];
-    if ((x_440 == 1)) {
-      *(tint_symbol_7) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      return;
-    }
-    {
-      bool const x_444 = canwalk;
-      if (x_444) {
-      } else {
-        break;
-      }
-    }
-  }
-  *(tint_symbol_7) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread tint_array_wrapper tint_symbol_12 = {};
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.spvasm
deleted file mode 100644
index 2b6e8e1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.spvasm
+++ /dev/null
@@ -1,770 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 509
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_7 "x_7"
-               OpName %map "map"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %ipos "ipos"
-               OpName %i "i"
-               OpName %p "p"
-               OpName %canwalk "canwalk"
-               OpName %v "v"
-               OpName %directions "directions"
-               OpName %j "j"
-               OpName %d "d"
-               OpName %x_104 "x_104"
-               OpName %x_124 "x_124"
-               OpName %x_144 "x_144"
-               OpName %x_164 "x_164"
-               OpName %x_105_phi "x_105_phi"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_145_phi "x_145_phi"
-               OpName %x_165_phi "x_165_phi"
-               OpName %x_229 "x_229"
-               OpName %x_242 "x_242"
-               OpName %x_281 "x_281"
-               OpName %x_295 "x_295"
-               OpName %x_335 "x_335"
-               OpName %x_348 "x_348"
-               OpName %x_387 "x_387"
-               OpName %x_400 "x_400"
-               OpName %x_230_phi "x_230_phi"
-               OpName %x_243_phi "x_243_phi"
-               OpName %x_282_phi "x_282_phi"
-               OpName %x_296_phi "x_296_phi"
-               OpName %x_336_phi "x_336_phi"
-               OpName %x_349_phi "x_349_phi"
-               OpName %x_388_phi "x_388_phi"
-               OpName %x_401_phi "x_401_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Private__arr_int_uint_256 = OpTypePointer Private %_arr_int_uint_256
-         %20 = OpConstantNull %_arr_int_uint_256
-        %map = OpVariable %_ptr_Private__arr_int_uint_256 Private %20
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %22 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %28 = OpConstantNull %v2float
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %32 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-   %float_16 = OpConstant %float 16
-      %int_0 = OpConstant %int 0
-    %int_256 = OpConstant %int 256
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-         %83 = OpConstantComposite %v2int %int_0 %int_0
-       %true = OpConstantTrue %bool
-      %int_2 = OpConstant %int 2
-     %int_16 = OpConstant %int 16
-     %int_14 = OpConstant %int 14
-      %false = OpConstantFalse %bool
-      %int_8 = OpConstant %int 8
-        %331 = OpConstantComposite %_arr_int_uint_256 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-    %float_1 = OpConstant %float 1
-        %492 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-    %float_0 = OpConstant %float 0
-        %495 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %496 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %22
-         %25 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %28
-       %ipos = OpVariable %_ptr_Function_v2int Function %32
-          %i = OpVariable %_ptr_Function_int Function %35
-          %p = OpVariable %_ptr_Function_v2int Function %32
-    %canwalk = OpVariable %_ptr_Function_bool Function %40
-          %v = OpVariable %_ptr_Function_int Function %35
- %directions = OpVariable %_ptr_Function_int Function %35
-          %j = OpVariable %_ptr_Function_int Function %35
-          %d = OpVariable %_ptr_Function_int Function %35
-      %x_104 = OpVariable %_ptr_Function_bool Function %40
-      %x_124 = OpVariable %_ptr_Function_bool Function %40
-      %x_144 = OpVariable %_ptr_Function_bool Function %40
-      %x_164 = OpVariable %_ptr_Function_bool Function %40
-  %x_105_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_125_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_145_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_165_phi = OpVariable %_ptr_Function_bool Function %40
-      %x_229 = OpVariable %_ptr_Function_bool Function %40
-      %x_242 = OpVariable %_ptr_Function_bool Function %40
-      %x_281 = OpVariable %_ptr_Function_bool Function %40
-      %x_295 = OpVariable %_ptr_Function_bool Function %40
-      %x_335 = OpVariable %_ptr_Function_bool Function %40
-      %x_348 = OpVariable %_ptr_Function_bool Function %40
-      %x_387 = OpVariable %_ptr_Function_bool Function %40
-      %x_400 = OpVariable %_ptr_Function_bool Function %40
-  %x_230_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_243_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_282_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_296_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_336_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_349_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_388_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_401_phi = OpVariable %_ptr_Function_bool Function %40
-         %45 = OpLoad %v4float %gl_FragCoord
-         %48 = OpAccessChain %_ptr_Uniform_v2float %x_7 %uint_0
-         %49 = OpLoad %v2float %48
-         %50 = OpCompositeExtract %float %45 0
-         %51 = OpCompositeExtract %float %45 1
-         %52 = OpCompositeConstruct %v2float %50 %51
-         %53 = OpFDiv %v2float %52 %49
-               OpStore %pos %53
-         %55 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %56 = OpLoad %float %55
-         %58 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %59 = OpLoad %float %58
-         %62 = OpFMul %float %56 %float_16
-         %60 = OpConvertFToS %int %62
-         %64 = OpFMul %float %59 %float_16
-         %63 = OpConvertFToS %int %64
-         %65 = OpCompositeConstruct %v2int %60 %63
-               OpStore %ipos %65
-               OpStore %i %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %i
-         %73 = OpSLessThan %bool %71 %int_256
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-               OpBranch %68
-         %74 = OpLabel
-         %77 = OpLoad %int %i
-         %79 = OpAccessChain %_ptr_Private_int %map %77
-               OpStore %79 %int_0
-               OpBranch %69
-         %69 = OpLabel
-         %80 = OpLoad %int %i
-         %82 = OpIAdd %int %80 %int_1
-               OpStore %i %82
-               OpBranch %67
-         %68 = OpLabel
-               OpStore %p %83
-               OpStore %canwalk %true
-               OpStore %v %int_0
-               OpBranch %85
-         %85 = OpLabel
-               OpLoopMerge %86 %87 None
-               OpBranch %88
-         %88 = OpLabel
-         %97 = OpLoad %int %v
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %v %98
-               OpStore %directions %int_0
-         %99 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %100 = OpLoad %int %99
-        %101 = OpSGreaterThan %bool %100 %int_0
-               OpStore %x_105_phi %101
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %104 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %105 = OpLoad %int %104
-        %106 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %107 = OpLoad %int %106
-        %109 = OpISub %int %105 %int_2
-        %111 = OpIMul %int %107 %int_16
-        %112 = OpIAdd %int %109 %111
-        %113 = OpAccessChain %_ptr_Private_int %map %112
-        %114 = OpLoad %int %113
-        %115 = OpIEqual %bool %114 %int_0
-               OpStore %x_104 %115
-        %116 = OpLoad %bool %x_104
-               OpStore %x_105_phi %116
-               OpBranch %102
-        %102 = OpLabel
-        %117 = OpLoad %bool %x_105_phi
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %120 = OpLoad %int %directions
-        %121 = OpIAdd %int %120 %int_1
-               OpStore %directions %121
-               OpBranch %118
-        %118 = OpLabel
-        %122 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %123 = OpLoad %int %122
-        %124 = OpSGreaterThan %bool %123 %int_0
-               OpStore %x_125_phi %124
-               OpSelectionMerge %125 None
-               OpBranchConditional %124 %126 %125
-        %126 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %130 = OpLoad %int %129
-        %131 = OpISub %int %130 %int_2
-        %132 = OpIMul %int %131 %int_16
-        %133 = OpIAdd %int %128 %132
-        %134 = OpAccessChain %_ptr_Private_int %map %133
-        %135 = OpLoad %int %134
-        %136 = OpIEqual %bool %135 %int_0
-               OpStore %x_124 %136
-        %137 = OpLoad %bool %x_124
-               OpStore %x_125_phi %137
-               OpBranch %125
-        %125 = OpLabel
-        %138 = OpLoad %bool %x_125_phi
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %int %directions
-        %142 = OpIAdd %int %141 %int_1
-               OpStore %directions %142
-               OpBranch %139
-        %139 = OpLabel
-        %143 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %144 = OpLoad %int %143
-        %146 = OpSLessThan %bool %144 %int_14
-               OpStore %x_145_phi %146
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-        %149 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %150 = OpLoad %int %149
-        %151 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %152 = OpLoad %int %151
-        %153 = OpIAdd %int %150 %int_2
-        %154 = OpIMul %int %152 %int_16
-        %155 = OpIAdd %int %153 %154
-        %156 = OpAccessChain %_ptr_Private_int %map %155
-        %157 = OpLoad %int %156
-        %158 = OpIEqual %bool %157 %int_0
-               OpStore %x_144 %158
-        %159 = OpLoad %bool %x_144
-               OpStore %x_145_phi %159
-               OpBranch %147
-        %147 = OpLabel
-        %160 = OpLoad %bool %x_145_phi
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %161
-        %162 = OpLabel
-        %163 = OpLoad %int %directions
-        %164 = OpIAdd %int %163 %int_1
-               OpStore %directions %164
-               OpBranch %161
-        %161 = OpLabel
-        %165 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %166 = OpLoad %int %165
-        %167 = OpSLessThan %bool %166 %int_14
-               OpStore %x_165_phi %167
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %168
-        %169 = OpLabel
-        %170 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %171 = OpLoad %int %170
-        %172 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %173 = OpLoad %int %172
-        %174 = OpIAdd %int %173 %int_2
-        %175 = OpIMul %int %174 %int_16
-        %176 = OpIAdd %int %171 %175
-        %177 = OpAccessChain %_ptr_Private_int %map %176
-        %178 = OpLoad %int %177
-        %179 = OpIEqual %bool %178 %int_0
-               OpStore %x_164 %179
-        %180 = OpLoad %bool %x_164
-               OpStore %x_165_phi %180
-               OpBranch %168
-        %168 = OpLabel
-        %181 = OpLoad %bool %x_165_phi
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %directions
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %directions %185
-               OpBranch %182
-        %182 = OpLabel
-        %202 = OpLoad %int %directions
-        %203 = OpIEqual %bool %202 %int_0
-               OpSelectionMerge %204 None
-               OpBranchConditional %203 %205 %206
-        %205 = OpLabel
-               OpStore %canwalk %false
-               OpStore %i %int_0
-               OpBranch %208
-        %208 = OpLabel
-               OpLoopMerge %209 %210 None
-               OpBranch %211
-        %211 = OpLabel
-        %212 = OpLoad %int %i
-        %214 = OpSLessThan %bool %212 %int_8
-               OpSelectionMerge %215 None
-               OpBranchConditional %214 %216 %217
-        %216 = OpLabel
-               OpBranch %215
-        %217 = OpLabel
-               OpBranch %209
-        %215 = OpLabel
-               OpStore %j %int_0
-               OpBranch %218
-        %218 = OpLabel
-               OpLoopMerge %219 %220 None
-               OpBranch %221
-        %221 = OpLabel
-        %222 = OpLoad %int %j
-        %223 = OpSLessThan %bool %222 %int_8
-               OpSelectionMerge %224 None
-               OpBranchConditional %223 %225 %226
-        %225 = OpLabel
-               OpBranch %224
-        %226 = OpLabel
-               OpBranch %219
-        %224 = OpLabel
-        %227 = OpLoad %int %j
-        %228 = OpLoad %int %i
-        %229 = OpIMul %int %227 %int_2
-        %230 = OpIMul %int %228 %int_2
-        %231 = OpIMul %int %230 %int_16
-        %232 = OpIAdd %int %229 %231
-        %233 = OpAccessChain %_ptr_Private_int %map %232
-        %234 = OpLoad %int %233
-        %235 = OpIEqual %bool %234 %int_0
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %236
-        %237 = OpLabel
-        %238 = OpLoad %int %j
-        %239 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %240 = OpIMul %int %238 %int_2
-               OpStore %239 %240
-        %241 = OpLoad %int %i
-        %242 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %243 = OpIMul %int %241 %int_2
-               OpStore %242 %243
-               OpStore %canwalk %true
-               OpBranch %236
-        %236 = OpLabel
-               OpBranch %220
-        %220 = OpLabel
-        %244 = OpLoad %int %j
-        %245 = OpIAdd %int %244 %int_1
-               OpStore %j %245
-               OpBranch %218
-        %219 = OpLabel
-               OpBranch %210
-        %210 = OpLabel
-        %246 = OpLoad %int %i
-        %247 = OpIAdd %int %246 %int_1
-               OpStore %i %247
-               OpBranch %208
-        %209 = OpLabel
-        %248 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %249 = OpLoad %int %248
-        %250 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %251 = OpLoad %int %250
-        %252 = OpIMul %int %251 %int_16
-        %253 = OpIAdd %int %249 %252
-        %254 = OpAccessChain %_ptr_Private_int %map %253
-               OpStore %254 %int_1
-               OpBranch %204
-        %206 = OpLabel
-        %255 = OpLoad %int %v
-        %256 = OpLoad %int %directions
-        %257 = OpSMod %int %255 %256
-               OpStore %d %257
-        %258 = OpLoad %int %directions
-        %259 = OpLoad %int %v
-        %260 = OpIAdd %int %259 %258
-               OpStore %v %260
-        %261 = OpLoad %int %d
-        %262 = OpSGreaterThanEqual %bool %261 %int_0
-               OpStore %x_230_phi %262
-               OpSelectionMerge %263 None
-               OpBranchConditional %262 %264 %263
-        %264 = OpLabel
-        %265 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %266 = OpLoad %int %265
-        %267 = OpSGreaterThan %bool %266 %int_0
-               OpStore %x_229 %267
-        %268 = OpLoad %bool %x_229
-               OpStore %x_230_phi %268
-               OpBranch %263
-        %263 = OpLabel
-        %269 = OpLoad %bool %x_230_phi
-               OpStore %x_243_phi %269
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %270
-        %271 = OpLabel
-        %272 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %273 = OpLoad %int %272
-        %274 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %275 = OpLoad %int %274
-        %276 = OpISub %int %273 %int_2
-        %277 = OpIMul %int %275 %int_16
-        %278 = OpIAdd %int %276 %277
-        %279 = OpAccessChain %_ptr_Private_int %map %278
-        %280 = OpLoad %int %279
-        %281 = OpIEqual %bool %280 %int_0
-               OpStore %x_242 %281
-        %282 = OpLoad %bool %x_242
-               OpStore %x_243_phi %282
-               OpBranch %270
-        %270 = OpLabel
-        %283 = OpLoad %bool %x_243_phi
-               OpSelectionMerge %284 None
-               OpBranchConditional %283 %285 %284
-        %285 = OpLabel
-        %286 = OpLoad %int %d
-        %287 = OpISub %int %286 %int_1
-               OpStore %d %287
-        %288 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %289 = OpLoad %int %288
-        %290 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %291 = OpLoad %int %290
-        %292 = OpIMul %int %291 %int_16
-        %293 = OpIAdd %int %289 %292
-        %294 = OpAccessChain %_ptr_Private_int %map %293
-               OpStore %294 %int_1
-        %295 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %296 = OpLoad %int %295
-        %297 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %298 = OpLoad %int %297
-        %299 = OpISub %int %296 %int_1
-        %300 = OpIMul %int %298 %int_16
-        %301 = OpIAdd %int %299 %300
-        %302 = OpAccessChain %_ptr_Private_int %map %301
-               OpStore %302 %int_1
-        %303 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %304 = OpLoad %int %303
-        %305 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %306 = OpLoad %int %305
-        %307 = OpISub %int %304 %int_2
-        %308 = OpIMul %int %306 %int_16
-        %309 = OpIAdd %int %307 %308
-        %310 = OpAccessChain %_ptr_Private_int %map %309
-               OpStore %310 %int_1
-        %311 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %312 = OpLoad %int %311
-        %313 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %314 = OpISub %int %312 %int_2
-               OpStore %313 %314
-               OpBranch %284
-        %284 = OpLabel
-        %315 = OpLoad %int %d
-        %316 = OpSGreaterThanEqual %bool %315 %int_0
-               OpStore %x_282_phi %316
-               OpSelectionMerge %317 None
-               OpBranchConditional %316 %318 %317
-        %318 = OpLabel
-        %319 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %320 = OpLoad %int %319
-        %321 = OpSGreaterThan %bool %320 %int_0
-               OpStore %x_281 %321
-        %322 = OpLoad %bool %x_281
-               OpStore %x_282_phi %322
-               OpBranch %317
-        %317 = OpLabel
-        %323 = OpLoad %bool %x_282_phi
-               OpStore %x_296_phi %323
-               OpSelectionMerge %324 None
-               OpBranchConditional %323 %325 %324
-        %325 = OpLabel
-        %326 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %327 = OpLoad %int %326
-        %328 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %329 = OpLoad %int %328
-        %330 = OpLoad %_arr_int_uint_256 %map
-               OpStore %map %331
-               OpStore %map %330
-        %332 = OpISub %int %329 %int_2
-        %333 = OpIMul %int %332 %int_16
-        %334 = OpIAdd %int %327 %333
-        %335 = OpAccessChain %_ptr_Private_int %map %334
-        %336 = OpLoad %int %335
-        %337 = OpIEqual %bool %336 %int_0
-               OpStore %x_295 %337
-        %338 = OpLoad %bool %x_295
-               OpStore %x_296_phi %338
-               OpBranch %324
-        %324 = OpLabel
-        %339 = OpLoad %bool %x_296_phi
-               OpSelectionMerge %340 None
-               OpBranchConditional %339 %341 %340
-        %341 = OpLabel
-        %342 = OpLoad %int %d
-        %343 = OpISub %int %342 %int_1
-               OpStore %d %343
-        %344 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %345 = OpLoad %int %344
-        %346 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %347 = OpLoad %int %346
-        %348 = OpIMul %int %347 %int_16
-        %349 = OpIAdd %int %345 %348
-        %350 = OpAccessChain %_ptr_Private_int %map %349
-               OpStore %350 %int_1
-        %351 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %352 = OpLoad %int %351
-        %353 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %354 = OpLoad %int %353
-        %355 = OpISub %int %354 %int_1
-        %356 = OpIMul %int %355 %int_16
-        %357 = OpIAdd %int %352 %356
-        %358 = OpAccessChain %_ptr_Private_int %map %357
-               OpStore %358 %int_1
-        %359 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %360 = OpLoad %int %359
-        %361 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %362 = OpLoad %int %361
-        %363 = OpLoad %_arr_int_uint_256 %map
-               OpStore %map %331
-               OpStore %map %363
-        %364 = OpISub %int %362 %int_2
-        %365 = OpIMul %int %364 %int_16
-        %366 = OpIAdd %int %360 %365
-        %367 = OpAccessChain %_ptr_Private_int %map %366
-               OpStore %367 %int_1
-        %368 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %369 = OpLoad %int %368
-        %370 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %371 = OpISub %int %369 %int_2
-               OpStore %370 %371
-               OpBranch %340
-        %340 = OpLabel
-        %372 = OpLoad %int %d
-        %373 = OpSGreaterThanEqual %bool %372 %int_0
-               OpStore %x_336_phi %373
-               OpSelectionMerge %374 None
-               OpBranchConditional %373 %375 %374
-        %375 = OpLabel
-        %376 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %377 = OpLoad %int %376
-        %378 = OpSLessThan %bool %377 %int_14
-               OpStore %x_335 %378
-        %379 = OpLoad %bool %x_335
-               OpStore %x_336_phi %379
-               OpBranch %374
-        %374 = OpLabel
-        %380 = OpLoad %bool %x_336_phi
-               OpStore %x_349_phi %380
-               OpSelectionMerge %381 None
-               OpBranchConditional %380 %382 %381
-        %382 = OpLabel
-        %383 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %384 = OpLoad %int %383
-        %385 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %386 = OpLoad %int %385
-        %387 = OpIAdd %int %384 %int_2
-        %388 = OpIMul %int %386 %int_16
-        %389 = OpIAdd %int %387 %388
-        %390 = OpAccessChain %_ptr_Private_int %map %389
-        %391 = OpLoad %int %390
-        %392 = OpIEqual %bool %391 %int_0
-               OpStore %x_348 %392
-        %393 = OpLoad %bool %x_348
-               OpStore %x_349_phi %393
-               OpBranch %381
-        %381 = OpLabel
-        %394 = OpLoad %bool %x_349_phi
-               OpSelectionMerge %395 None
-               OpBranchConditional %394 %396 %395
-        %396 = OpLabel
-        %397 = OpLoad %int %d
-        %398 = OpISub %int %397 %int_1
-               OpStore %d %398
-        %399 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %400 = OpLoad %int %399
-        %401 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %402 = OpLoad %int %401
-        %403 = OpIMul %int %402 %int_16
-        %404 = OpIAdd %int %400 %403
-        %405 = OpAccessChain %_ptr_Private_int %map %404
-               OpStore %405 %int_1
-        %406 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %407 = OpLoad %int %406
-        %408 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %409 = OpLoad %int %408
-        %410 = OpIAdd %int %407 %int_1
-        %411 = OpIMul %int %409 %int_16
-        %412 = OpIAdd %int %410 %411
-        %413 = OpAccessChain %_ptr_Private_int %map %412
-               OpStore %413 %int_1
-        %414 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %415 = OpLoad %int %414
-        %416 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %417 = OpLoad %int %416
-        %418 = OpIAdd %int %415 %int_2
-        %419 = OpIMul %int %417 %int_16
-        %420 = OpIAdd %int %418 %419
-        %421 = OpAccessChain %_ptr_Private_int %map %420
-               OpStore %421 %int_1
-        %422 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %423 = OpLoad %int %422
-        %424 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %425 = OpIAdd %int %423 %int_2
-               OpStore %424 %425
-               OpBranch %395
-        %395 = OpLabel
-        %426 = OpLoad %int %d
-        %427 = OpSGreaterThanEqual %bool %426 %int_0
-               OpStore %x_388_phi %427
-               OpSelectionMerge %428 None
-               OpBranchConditional %427 %429 %428
-        %429 = OpLabel
-        %430 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %431 = OpLoad %int %430
-        %432 = OpSLessThan %bool %431 %int_14
-               OpStore %x_387 %432
-        %433 = OpLoad %bool %x_387
-               OpStore %x_388_phi %433
-               OpBranch %428
-        %428 = OpLabel
-        %434 = OpLoad %bool %x_388_phi
-               OpStore %x_401_phi %434
-               OpSelectionMerge %435 None
-               OpBranchConditional %434 %436 %435
-        %436 = OpLabel
-        %437 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %438 = OpLoad %int %437
-        %439 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %440 = OpLoad %int %439
-        %441 = OpIAdd %int %440 %int_2
-        %442 = OpIMul %int %441 %int_16
-        %443 = OpIAdd %int %438 %442
-        %444 = OpAccessChain %_ptr_Private_int %map %443
-        %445 = OpLoad %int %444
-        %446 = OpIEqual %bool %445 %int_0
-               OpStore %x_400 %446
-        %447 = OpLoad %bool %x_400
-               OpStore %x_401_phi %447
-               OpBranch %435
-        %435 = OpLabel
-        %448 = OpLoad %bool %x_401_phi
-               OpSelectionMerge %449 None
-               OpBranchConditional %448 %450 %449
-        %450 = OpLabel
-        %451 = OpLoad %int %d
-        %452 = OpISub %int %451 %int_1
-               OpStore %d %452
-        %453 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %454 = OpLoad %int %453
-        %455 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %456 = OpLoad %int %455
-        %457 = OpIMul %int %456 %int_16
-        %458 = OpIAdd %int %454 %457
-        %459 = OpAccessChain %_ptr_Private_int %map %458
-               OpStore %459 %int_1
-        %460 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %461 = OpLoad %int %460
-        %462 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %463 = OpLoad %int %462
-        %464 = OpIAdd %int %463 %int_1
-        %465 = OpIMul %int %464 %int_16
-        %466 = OpIAdd %int %461 %465
-        %467 = OpAccessChain %_ptr_Private_int %map %466
-               OpStore %467 %int_1
-        %468 = OpAccessChain %_ptr_Function_int %p %uint_0
-        %469 = OpLoad %int %468
-        %470 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %471 = OpLoad %int %470
-        %472 = OpIAdd %int %471 %int_2
-        %473 = OpIMul %int %472 %int_16
-        %474 = OpIAdd %int %469 %473
-        %475 = OpAccessChain %_ptr_Private_int %map %474
-               OpStore %475 %int_1
-        %476 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %477 = OpLoad %int %476
-        %478 = OpAccessChain %_ptr_Function_int %p %uint_1
-        %479 = OpIAdd %int %477 %int_2
-               OpStore %478 %479
-               OpBranch %449
-        %449 = OpLabel
-               OpBranch %204
-        %204 = OpLabel
-        %480 = OpAccessChain %_ptr_Function_int %ipos %uint_1
-        %481 = OpLoad %int %480
-        %482 = OpAccessChain %_ptr_Function_int %ipos %uint_0
-        %483 = OpLoad %int %482
-        %484 = OpIMul %int %481 %int_16
-        %485 = OpIAdd %int %484 %483
-        %486 = OpAccessChain %_ptr_Private_int %map %485
-        %487 = OpLoad %int %486
-        %488 = OpIEqual %bool %487 %int_1
-               OpSelectionMerge %489 None
-               OpBranchConditional %488 %490 %489
-        %490 = OpLabel
-               OpStore %x_GLF_color %492
-               OpReturn
-        %489 = OpLabel
-               OpBranch %87
-         %87 = OpLabel
-        %493 = OpLoad %bool %canwalk
-               OpBranchConditional %493 %85 %86
-         %86 = OpLabel
-               OpStore %x_GLF_color %495
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %496
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %500 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %501 = OpFunctionCall %void %main_1
-        %502 = OpLoad %v4float %x_GLF_color
-        %503 = OpCompositeConstruct %main_out %502
-               OpReturnValue %503
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-        %505 = OpLabel
-        %507 = OpLoad %v4float %gl_FragCoord_param_1
-        %506 = OpFunctionCall %main_out %main_inner %507
-        %508 = OpCompositeExtract %v4float %506 0
-               OpStore %x_GLF_color_1_1 %508
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.wgsl
deleted file mode 100644
index 774e546..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-maze-flatten-copy-composite/2.wgsl.expected.wgsl
+++ /dev/null
@@ -1,354 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> map : array<i32, 256>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var ipos : vec2<i32>;
-  var i : i32;
-  var p : vec2<i32>;
-  var canwalk : bool;
-  var v : i32;
-  var directions : i32;
-  var j : i32;
-  var d : i32;
-  let x_59 : vec4<f32> = gl_FragCoord;
-  let x_62 : vec2<f32> = x_7.resolution;
-  pos = (vec2<f32>(x_59.x, x_59.y) / x_62);
-  let x_65 : f32 = pos.x;
-  let x_69 : f32 = pos.y;
-  ipos = vec2<i32>(i32((x_65 * 16.0)), i32((x_69 * 16.0)));
-  i = 0;
-  loop {
-    let x_77 : i32 = i;
-    if ((x_77 < 256)) {
-    } else {
-      break;
-    }
-    let x_80 : i32 = i;
-    map[x_80] = 0;
-
-    continuing {
-      let x_82 : i32 = i;
-      i = (x_82 + 1);
-    }
-  }
-  p = vec2<i32>(0, 0);
-  canwalk = true;
-  v = 0;
-  loop {
-    var x_104 : bool;
-    var x_124 : bool;
-    var x_144 : bool;
-    var x_164 : bool;
-    var x_105_phi : bool;
-    var x_125_phi : bool;
-    var x_145_phi : bool;
-    var x_165_phi : bool;
-    let x_88 : i32 = v;
-    v = (x_88 + 1);
-    directions = 0;
-    let x_91 : i32 = p.x;
-    let x_92 : bool = (x_91 > 0);
-    x_105_phi = x_92;
-    if (x_92) {
-      let x_96 : i32 = p.x;
-      let x_99 : i32 = p.y;
-      let x_103 : i32 = map[((x_96 - 2) + (x_99 * 16))];
-      x_104 = (x_103 == 0);
-      x_105_phi = x_104;
-    }
-    let x_105 : bool = x_105_phi;
-    if (x_105) {
-      let x_108 : i32 = directions;
-      directions = (x_108 + 1);
-    }
-    let x_111 : i32 = p.y;
-    let x_112 : bool = (x_111 > 0);
-    x_125_phi = x_112;
-    if (x_112) {
-      let x_116 : i32 = p.x;
-      let x_118 : i32 = p.y;
-      let x_123 : i32 = map[(x_116 + ((x_118 - 2) * 16))];
-      x_124 = (x_123 == 0);
-      x_125_phi = x_124;
-    }
-    let x_125 : bool = x_125_phi;
-    if (x_125) {
-      let x_128 : i32 = directions;
-      directions = (x_128 + 1);
-    }
-    let x_131 : i32 = p.x;
-    let x_132 : bool = (x_131 < 14);
-    x_145_phi = x_132;
-    if (x_132) {
-      let x_136 : i32 = p.x;
-      let x_139 : i32 = p.y;
-      let x_143 : i32 = map[((x_136 + 2) + (x_139 * 16))];
-      x_144 = (x_143 == 0);
-      x_145_phi = x_144;
-    }
-    let x_145 : bool = x_145_phi;
-    if (x_145) {
-      let x_148 : i32 = directions;
-      directions = (x_148 + 1);
-    }
-    let x_151 : i32 = p.y;
-    let x_152 : bool = (x_151 < 14);
-    x_165_phi = x_152;
-    if (x_152) {
-      let x_156 : i32 = p.x;
-      let x_158 : i32 = p.y;
-      let x_163 : i32 = map[(x_156 + ((x_158 + 2) * 16))];
-      x_164 = (x_163 == 0);
-      x_165_phi = x_164;
-    }
-    let x_165 : bool = x_165_phi;
-    if (x_165) {
-      let x_168 : i32 = directions;
-      directions = (x_168 + 1);
-    }
-    var x_229 : bool;
-    var x_242 : bool;
-    var x_281 : bool;
-    var x_295 : bool;
-    var x_335 : bool;
-    var x_348 : bool;
-    var x_387 : bool;
-    var x_400 : bool;
-    var x_230_phi : bool;
-    var x_243_phi : bool;
-    var x_282_phi : bool;
-    var x_296_phi : bool;
-    var x_336_phi : bool;
-    var x_349_phi : bool;
-    var x_388_phi : bool;
-    var x_401_phi : bool;
-    let x_170 : i32 = directions;
-    if ((x_170 == 0)) {
-      canwalk = false;
-      i = 0;
-      loop {
-        let x_179 : i32 = i;
-        if ((x_179 < 8)) {
-        } else {
-          break;
-        }
-        j = 0;
-        loop {
-          let x_186 : i32 = j;
-          if ((x_186 < 8)) {
-          } else {
-            break;
-          }
-          let x_189 : i32 = j;
-          let x_191 : i32 = i;
-          let x_196 : i32 = map[((x_189 * 2) + ((x_191 * 2) * 16))];
-          if ((x_196 == 0)) {
-            let x_200 : i32 = j;
-            p.x = (x_200 * 2);
-            let x_203 : i32 = i;
-            p.y = (x_203 * 2);
-            canwalk = true;
-          }
-
-          continuing {
-            let x_206 : i32 = j;
-            j = (x_206 + 1);
-          }
-        }
-
-        continuing {
-          let x_208 : i32 = i;
-          i = (x_208 + 1);
-        }
-      }
-      let x_211 : i32 = p.x;
-      let x_213 : i32 = p.y;
-      map[(x_211 + (x_213 * 16))] = 1;
-    } else {
-      let x_217 : i32 = v;
-      let x_218 : i32 = directions;
-      d = (x_217 % x_218);
-      let x_220 : i32 = directions;
-      let x_221 : i32 = v;
-      v = (x_221 + x_220);
-      let x_223 : i32 = d;
-      let x_224 : bool = (x_223 >= 0);
-      x_230_phi = x_224;
-      if (x_224) {
-        let x_228 : i32 = p.x;
-        x_229 = (x_228 > 0);
-        x_230_phi = x_229;
-      }
-      let x_230 : bool = x_230_phi;
-      x_243_phi = x_230;
-      if (x_230) {
-        let x_234 : i32 = p.x;
-        let x_237 : i32 = p.y;
-        let x_241 : i32 = map[((x_234 - 2) + (x_237 * 16))];
-        x_242 = (x_241 == 0);
-        x_243_phi = x_242;
-      }
-      let x_243 : bool = x_243_phi;
-      if (x_243) {
-        let x_246 : i32 = d;
-        d = (x_246 - 1);
-        let x_249 : i32 = p.x;
-        let x_251 : i32 = p.y;
-        map[(x_249 + (x_251 * 16))] = 1;
-        let x_256 : i32 = p.x;
-        let x_259 : i32 = p.y;
-        map[((x_256 - 1) + (x_259 * 16))] = 1;
-        let x_264 : i32 = p.x;
-        let x_267 : i32 = p.y;
-        map[((x_264 - 2) + (x_267 * 16))] = 1;
-        let x_272 : i32 = p.x;
-        p.x = (x_272 - 2);
-      }
-      let x_275 : i32 = d;
-      let x_276 : bool = (x_275 >= 0);
-      x_282_phi = x_276;
-      if (x_276) {
-        let x_280 : i32 = p.y;
-        x_281 = (x_280 > 0);
-        x_282_phi = x_281;
-      }
-      let x_282 : bool = x_282_phi;
-      x_296_phi = x_282;
-      if (x_282) {
-        let x_286 : i32 = p.x;
-        let x_288 : i32 = p.y;
-        let x_291 : array<i32, 256> = map;
-        map = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        map = x_291;
-        let x_294 : i32 = map[(x_286 + ((x_288 - 2) * 16))];
-        x_295 = (x_294 == 0);
-        x_296_phi = x_295;
-      }
-      let x_296 : bool = x_296_phi;
-      if (x_296) {
-        let x_299 : i32 = d;
-        d = (x_299 - 1);
-        let x_302 : i32 = p.x;
-        let x_304 : i32 = p.y;
-        map[(x_302 + (x_304 * 16))] = 1;
-        let x_309 : i32 = p.x;
-        let x_311 : i32 = p.y;
-        map[(x_309 + ((x_311 - 1) * 16))] = 1;
-        let x_317 : i32 = p.x;
-        let x_319 : i32 = p.y;
-        let x_321 : array<i32, 256> = map;
-        map = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        map = x_321;
-        map[(x_317 + ((x_319 - 2) * 16))] = 1;
-        let x_326 : i32 = p.y;
-        p.y = (x_326 - 2);
-      }
-      let x_329 : i32 = d;
-      let x_330 : bool = (x_329 >= 0);
-      x_336_phi = x_330;
-      if (x_330) {
-        let x_334 : i32 = p.x;
-        x_335 = (x_334 < 14);
-        x_336_phi = x_335;
-      }
-      let x_336 : bool = x_336_phi;
-      x_349_phi = x_336;
-      if (x_336) {
-        let x_340 : i32 = p.x;
-        let x_343 : i32 = p.y;
-        let x_347 : i32 = map[((x_340 + 2) + (x_343 * 16))];
-        x_348 = (x_347 == 0);
-        x_349_phi = x_348;
-      }
-      let x_349 : bool = x_349_phi;
-      if (x_349) {
-        let x_352 : i32 = d;
-        d = (x_352 - 1);
-        let x_355 : i32 = p.x;
-        let x_357 : i32 = p.y;
-        map[(x_355 + (x_357 * 16))] = 1;
-        let x_362 : i32 = p.x;
-        let x_365 : i32 = p.y;
-        map[((x_362 + 1) + (x_365 * 16))] = 1;
-        let x_370 : i32 = p.x;
-        let x_373 : i32 = p.y;
-        map[((x_370 + 2) + (x_373 * 16))] = 1;
-        let x_378 : i32 = p.x;
-        p.x = (x_378 + 2);
-      }
-      let x_381 : i32 = d;
-      let x_382 : bool = (x_381 >= 0);
-      x_388_phi = x_382;
-      if (x_382) {
-        let x_386 : i32 = p.y;
-        x_387 = (x_386 < 14);
-        x_388_phi = x_387;
-      }
-      let x_388 : bool = x_388_phi;
-      x_401_phi = x_388;
-      if (x_388) {
-        let x_392 : i32 = p.x;
-        let x_394 : i32 = p.y;
-        let x_399 : i32 = map[(x_392 + ((x_394 + 2) * 16))];
-        x_400 = (x_399 == 0);
-        x_401_phi = x_400;
-      }
-      let x_401 : bool = x_401_phi;
-      if (x_401) {
-        let x_404 : i32 = d;
-        d = (x_404 - 1);
-        let x_407 : i32 = p.x;
-        let x_409 : i32 = p.y;
-        map[(x_407 + (x_409 * 16))] = 1;
-        let x_414 : i32 = p.x;
-        let x_416 : i32 = p.y;
-        map[(x_414 + ((x_416 + 1) * 16))] = 1;
-        let x_422 : i32 = p.x;
-        let x_424 : i32 = p.y;
-        map[(x_422 + ((x_424 + 2) * 16))] = 1;
-        let x_430 : i32 = p.y;
-        p.y = (x_430 + 2);
-      }
-    }
-    let x_434 : i32 = ipos.y;
-    let x_437 : i32 = ipos.x;
-    let x_440 : i32 = map[((x_434 * 16) + x_437)];
-    if ((x_440 == 1)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      return;
-    }
-
-    continuing {
-      let x_444 : bool = canwalk;
-      if (x_444) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.hlsl
deleted file mode 100644
index f2d5a90..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,353 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int temp[10] = (int[10])0;
-  int data[10] = (int[10])0;
-  float x_190 = 0.0f;
-  float x_262 = 0.0f;
-  int x_63_phi = 0;
-  int x_103_phi = 0;
-  int x_112_phi = 0;
-  float x_263_phi = 0.0f;
-  const float x_60 = asfloat(x_8[0].x);
-  const int x_61 = int(x_60);
-  x_63_phi = x_61;
-  while (true) {
-    int x_100 = 0;
-    int x_98 = 0;
-    int x_96 = 0;
-    int x_94 = 0;
-    int x_92 = 0;
-    int x_90 = 0;
-    int x_88 = 0;
-    int x_86 = 0;
-    int x_84 = 0;
-    int x_82 = 0;
-    int x_64_phi = 0;
-    const int x_63 = x_63_phi;
-    const int x_68[10] = data;
-    const int tint_symbol_4[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-    data = tint_symbol_4;
-    data = x_68;
-    const int x_69 = (x_63 + 1);
-    x_64_phi = x_69;
-    switch(x_63) {
-      case 9: {
-        data[x_63] = -5;
-        x_100 = (x_63 + 1);
-        x_64_phi = x_100;
-        break;
-      }
-      case 8: {
-        data[x_63] = -4;
-        x_98 = (x_63 + 1);
-        x_64_phi = x_98;
-        break;
-      }
-      case 7: {
-        data[x_63] = -3;
-        x_96 = (x_63 + 1);
-        x_64_phi = x_96;
-        break;
-      }
-      case 6: {
-        data[x_63] = -2;
-        x_94 = (x_63 + 1);
-        x_64_phi = x_94;
-        break;
-      }
-      case 5: {
-        data[x_63] = -1;
-        x_92 = (x_63 + 1);
-        x_64_phi = x_92;
-        break;
-      }
-      case 4: {
-        data[x_63] = 0;
-        x_90 = (x_63 + 1);
-        x_64_phi = x_90;
-        break;
-      }
-      case 3: {
-        data[x_63] = 1;
-        x_88 = (x_63 + 1);
-        x_64_phi = x_88;
-        break;
-      }
-      case 2: {
-        data[x_63] = 2;
-        x_86 = (x_63 + 1);
-        x_64_phi = x_86;
-        break;
-      }
-      case 1: {
-        data[x_63] = 3;
-        x_84 = (x_63 + 1);
-        x_64_phi = x_84;
-        break;
-      }
-      case 0: {
-        data[x_63] = 4;
-        x_82 = (x_63 + 1);
-        x_64_phi = x_82;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    const int x_64 = x_64_phi;
-    {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_103_phi = 0;
-  while (true) {
-    int x_104 = 0;
-    const int x_103 = x_103_phi;
-    if ((x_103 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const int x_109 = data[x_103];
-      temp[x_103] = x_109;
-      x_104 = (x_103 + 1);
-      x_103_phi = x_104;
-    }
-  }
-  x_112_phi = 1;
-  while (true) {
-    int x_113 = 0;
-    int x_119_phi = 0;
-    const int x_112 = x_112_phi;
-    if ((x_112 <= 9)) {
-    } else {
-      break;
-    }
-    x_119_phi = 0;
-    while (true) {
-      int x_131 = 0;
-      int x_136 = 0;
-      int x_131_phi = 0;
-      int x_134_phi = 0;
-      int x_136_phi = 0;
-      int x_158_phi = 0;
-      int x_161_phi = 0;
-      int x_171_phi = 0;
-      const int x_119 = x_119_phi;
-      if ((x_119 < 9)) {
-      } else {
-        break;
-      }
-      const int x_125 = (x_119 + x_112);
-      const int x_126 = (x_125 - 1);
-      const int x_120 = (x_119 + (2 * x_112));
-      const int x_129 = min((x_120 - 1), 9);
-      x_131_phi = x_119;
-      x_134_phi = x_125;
-      x_136_phi = x_119;
-      while (true) {
-        int x_151 = 0;
-        int x_154 = 0;
-        int x_135_phi = 0;
-        int x_137_phi = 0;
-        x_131 = x_131_phi;
-        const int x_134 = x_134_phi;
-        x_136 = x_136_phi;
-        if (((x_136 <= x_126) & (x_134 <= x_129))) {
-        } else {
-          break;
-        }
-        const int x_143_save = x_136;
-        const int x_144 = data[x_143_save];
-        const int x_145_save = x_134;
-        const int x_146 = data[x_145_save];
-        const int x_132 = asint((x_131 + asint(1)));
-        if ((x_144 < x_146)) {
-          x_151 = asint((x_136 + asint(1)));
-          const int x_152 = data[x_143_save];
-          temp[x_131] = x_152;
-          x_135_phi = x_134;
-          x_137_phi = x_151;
-        } else {
-          x_154 = (x_134 + 1);
-          const int x_155 = data[x_145_save];
-          temp[x_131] = x_155;
-          x_135_phi = x_154;
-          x_137_phi = x_136;
-        }
-        const int x_135 = x_135_phi;
-        const int x_137 = x_137_phi;
-        {
-          x_131_phi = x_132;
-          x_134_phi = x_135;
-          x_136_phi = x_137;
-        }
-      }
-      x_158_phi = x_131;
-      x_161_phi = x_136;
-      while (true) {
-        int x_159 = 0;
-        int x_162 = 0;
-        const int x_158 = x_158_phi;
-        const int x_161 = x_161_phi;
-        if (((x_161 < 10) & (x_161 <= x_126))) {
-        } else {
-          break;
-        }
-        {
-          x_159 = (x_158 + 1);
-          x_162 = (x_161 + 1);
-          const int x_168 = data[x_161];
-          temp[x_158] = x_168;
-          x_158_phi = x_159;
-          x_161_phi = x_162;
-        }
-      }
-      x_171_phi = x_119;
-      while (true) {
-        int x_172 = 0;
-        const int x_171 = x_171_phi;
-        if ((x_171 <= x_129)) {
-        } else {
-          break;
-        }
-        {
-          const int x_177 = temp[x_171];
-          data[x_171] = x_177;
-          x_172 = (x_171 + 1);
-          x_171_phi = x_172;
-        }
-      }
-      {
-        x_119_phi = x_120;
-      }
-    }
-    {
-      x_113 = (2 * x_112);
-      x_112_phi = x_113;
-    }
-  }
-  int x_181 = 0;
-  float x_199 = 0.0f;
-  float x_261 = 0.0f;
-  float x_262_phi = 0.0f;
-  const float x_180 = gl_FragCoord.y;
-  x_181 = int(x_180);
-  if ((x_181 < 30)) {
-    const int x_187 = data[0];
-    x_190 = (0.5f + (float(x_187) * 0.100000001f));
-    x_263_phi = x_190;
-  } else {
-    float x_208 = 0.0f;
-    float x_260 = 0.0f;
-    float x_261_phi = 0.0f;
-    if ((x_181 < 60)) {
-      const int x_196 = data[1];
-      x_199 = (0.5f + (float(x_196) * 0.100000001f));
-      x_262_phi = x_199;
-    } else {
-      float x_217 = 0.0f;
-      float x_259 = 0.0f;
-      float x_260_phi = 0.0f;
-      if ((x_181 < 90)) {
-        const int x_205 = data[2];
-        x_208 = (0.5f + (float(x_205) * 0.100000001f));
-        x_261_phi = x_208;
-      } else {
-        if ((x_181 < 120)) {
-          const int x_214 = data[3];
-          x_217 = (0.5f + (float(x_214) * 0.100000001f));
-          x_260_phi = x_217;
-        } else {
-          float x_230 = 0.0f;
-          float x_258 = 0.0f;
-          float x_259_phi = 0.0f;
-          if ((x_181 < 150)) {
-            discard;
-          } else {
-            float x_239 = 0.0f;
-            float x_257 = 0.0f;
-            float x_258_phi = 0.0f;
-            if ((x_181 < 180)) {
-              const int x_227 = data[5];
-              x_230 = (0.5f + (float(x_227) * 0.100000001f));
-              x_259_phi = x_230;
-            } else {
-              float x_248 = 0.0f;
-              float x_256 = 0.0f;
-              float x_257_phi = 0.0f;
-              if ((x_181 < 210)) {
-                const int x_236 = data[6];
-                x_239 = (0.5f + (float(x_236) * 0.100000001f));
-                x_258_phi = x_239;
-              } else {
-                if ((x_181 < 240)) {
-                  const int x_245 = data[7];
-                  x_248 = (0.5f + (float(x_245) * 0.100000001f));
-                  x_257_phi = x_248;
-                } else {
-                  if ((x_181 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  const int x_253 = data[8];
-                  x_256 = (0.5f + (float(x_253) * 0.100000001f));
-                  x_257_phi = x_256;
-                }
-                x_257 = x_257_phi;
-                x_258_phi = x_257;
-              }
-              x_258 = x_258_phi;
-              x_259_phi = x_258;
-            }
-            x_259 = x_259_phi;
-          }
-          x_260_phi = x_259;
-        }
-        x_260 = x_260_phi;
-        x_261_phi = x_260;
-      }
-      x_261 = x_261_phi;
-      x_262_phi = x_261;
-    }
-    x_262 = x_262_phi;
-    x_263_phi = x_262;
-  }
-  const float x_263 = x_263_phi;
-  x_GLF_color = float4(x_263, x_263, x_263, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.msl
deleted file mode 100644
index f9d3c15..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.msl
+++ /dev/null
@@ -1,356 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper temp = {};
-  tint_array_wrapper data = {};
-  float x_190 = 0.0f;
-  float x_262 = 0.0f;
-  int x_63_phi = 0;
-  int x_103_phi = 0;
-  int x_112_phi = 0;
-  float x_263_phi = 0.0f;
-  float const x_60 = x_8.injectionSwitch.x;
-  int const x_61 = int(x_60);
-  x_63_phi = x_61;
-  while (true) {
-    int x_100 = 0;
-    int x_98 = 0;
-    int x_96 = 0;
-    int x_94 = 0;
-    int x_92 = 0;
-    int x_90 = 0;
-    int x_88 = 0;
-    int x_86 = 0;
-    int x_84 = 0;
-    int x_82 = 0;
-    int x_64_phi = 0;
-    int const x_63 = x_63_phi;
-    tint_array_wrapper const x_68 = data;
-    tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    data = tint_symbol_2;
-    data = x_68;
-    int const x_69 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-    x_64_phi = x_69;
-    switch(x_63) {
-      case 9: {
-        data.arr[x_63] = -5;
-        x_100 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_100;
-        break;
-      }
-      case 8: {
-        data.arr[x_63] = -4;
-        x_98 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_98;
-        break;
-      }
-      case 7: {
-        data.arr[x_63] = -3;
-        x_96 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_96;
-        break;
-      }
-      case 6: {
-        data.arr[x_63] = -2;
-        x_94 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_94;
-        break;
-      }
-      case 5: {
-        data.arr[x_63] = -1;
-        x_92 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_92;
-        break;
-      }
-      case 4: {
-        data.arr[x_63] = 0;
-        x_90 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_90;
-        break;
-      }
-      case 3: {
-        data.arr[x_63] = 1;
-        x_88 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_88;
-        break;
-      }
-      case 2: {
-        data.arr[x_63] = 2;
-        x_86 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_86;
-        break;
-      }
-      case 1: {
-        data.arr[x_63] = 3;
-        x_84 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_84;
-        break;
-      }
-      case 0: {
-        data.arr[x_63] = 4;
-        x_82 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_82;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_64 = x_64_phi;
-    {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_103_phi = 0;
-  while (true) {
-    int x_104 = 0;
-    int const x_103 = x_103_phi;
-    if ((x_103 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_109 = data.arr[x_103];
-      temp.arr[x_103] = x_109;
-      x_104 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-      x_103_phi = x_104;
-    }
-  }
-  x_112_phi = 1;
-  while (true) {
-    int x_113 = 0;
-    int x_119_phi = 0;
-    int const x_112 = x_112_phi;
-    if ((x_112 <= 9)) {
-    } else {
-      break;
-    }
-    x_119_phi = 0;
-    while (true) {
-      int x_131 = 0;
-      int x_136 = 0;
-      int x_131_phi = 0;
-      int x_134_phi = 0;
-      int x_136_phi = 0;
-      int x_158_phi = 0;
-      int x_161_phi = 0;
-      int x_171_phi = 0;
-      int const x_119 = x_119_phi;
-      if ((x_119 < 9)) {
-      } else {
-        break;
-      }
-      int const x_125 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(x_112)));
-      int const x_126 = as_type<int>((as_type<uint>(x_125) - as_type<uint>(1)));
-      int const x_120 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_112))))));
-      int const x_129 = min(as_type<int>((as_type<uint>(x_120) - as_type<uint>(1))), 9);
-      x_131_phi = x_119;
-      x_134_phi = x_125;
-      x_136_phi = x_119;
-      while (true) {
-        int x_151 = 0;
-        int x_154 = 0;
-        int x_135_phi = 0;
-        int x_137_phi = 0;
-        x_131 = x_131_phi;
-        int const x_134 = x_134_phi;
-        x_136 = x_136_phi;
-        if (((x_136 <= x_126) & (x_134 <= x_129))) {
-        } else {
-          break;
-        }
-        int const x_143_save = x_136;
-        int const x_144 = data.arr[x_143_save];
-        int const x_145_save = x_134;
-        int const x_146 = data.arr[x_145_save];
-        int const x_132 = as_type<int>(as_type<int>((as_type<uint>(x_131) + as_type<uint>(as_type<int>(1)))));
-        if ((x_144 < x_146)) {
-          x_151 = as_type<int>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(as_type<int>(1)))));
-          int const x_152 = data.arr[x_143_save];
-          temp.arr[x_131] = x_152;
-          x_135_phi = x_134;
-          x_137_phi = x_151;
-        } else {
-          x_154 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
-          int const x_155 = data.arr[x_145_save];
-          temp.arr[x_131] = x_155;
-          x_135_phi = x_154;
-          x_137_phi = x_136;
-        }
-        int const x_135 = x_135_phi;
-        int const x_137 = x_137_phi;
-        {
-          x_131_phi = x_132;
-          x_134_phi = x_135;
-          x_136_phi = x_137;
-        }
-      }
-      x_158_phi = x_131;
-      x_161_phi = x_136;
-      while (true) {
-        int x_159 = 0;
-        int x_162 = 0;
-        int const x_158 = x_158_phi;
-        int const x_161 = x_161_phi;
-        if (((x_161 < 10) & (x_161 <= x_126))) {
-        } else {
-          break;
-        }
-        {
-          x_159 = as_type<int>((as_type<uint>(x_158) + as_type<uint>(1)));
-          x_162 = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
-          int const x_168 = data.arr[x_161];
-          temp.arr[x_158] = x_168;
-          x_158_phi = x_159;
-          x_161_phi = x_162;
-        }
-      }
-      x_171_phi = x_119;
-      while (true) {
-        int x_172 = 0;
-        int const x_171 = x_171_phi;
-        if ((x_171 <= x_129)) {
-        } else {
-          break;
-        }
-        {
-          int const x_177 = temp.arr[x_171];
-          data.arr[x_171] = x_177;
-          x_172 = as_type<int>((as_type<uint>(x_171) + as_type<uint>(1)));
-          x_171_phi = x_172;
-        }
-      }
-      {
-        x_119_phi = x_120;
-      }
-    }
-    {
-      x_113 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_112)));
-      x_112_phi = x_113;
-    }
-  }
-  int x_181 = 0;
-  float x_199 = 0.0f;
-  float x_261 = 0.0f;
-  float x_262_phi = 0.0f;
-  float const x_180 = (*(tint_symbol_4)).y;
-  x_181 = int(x_180);
-  if ((x_181 < 30)) {
-    int const x_187 = data.arr[0];
-    x_190 = (0.5f + (float(x_187) * 0.100000001f));
-    x_263_phi = x_190;
-  } else {
-    float x_208 = 0.0f;
-    float x_260 = 0.0f;
-    float x_261_phi = 0.0f;
-    if ((x_181 < 60)) {
-      int const x_196 = data.arr[1];
-      x_199 = (0.5f + (float(x_196) * 0.100000001f));
-      x_262_phi = x_199;
-    } else {
-      float x_217 = 0.0f;
-      float x_259 = 0.0f;
-      float x_260_phi = 0.0f;
-      if ((x_181 < 90)) {
-        int const x_205 = data.arr[2];
-        x_208 = (0.5f + (float(x_205) * 0.100000001f));
-        x_261_phi = x_208;
-      } else {
-        if ((x_181 < 120)) {
-          int const x_214 = data.arr[3];
-          x_217 = (0.5f + (float(x_214) * 0.100000001f));
-          x_260_phi = x_217;
-        } else {
-          float x_230 = 0.0f;
-          float x_258 = 0.0f;
-          float x_259_phi = 0.0f;
-          if ((x_181 < 150)) {
-            discard_fragment();
-          } else {
-            float x_239 = 0.0f;
-            float x_257 = 0.0f;
-            float x_258_phi = 0.0f;
-            if ((x_181 < 180)) {
-              int const x_227 = data.arr[5];
-              x_230 = (0.5f + (float(x_227) * 0.100000001f));
-              x_259_phi = x_230;
-            } else {
-              float x_248 = 0.0f;
-              float x_256 = 0.0f;
-              float x_257_phi = 0.0f;
-              if ((x_181 < 210)) {
-                int const x_236 = data.arr[6];
-                x_239 = (0.5f + (float(x_236) * 0.100000001f));
-                x_258_phi = x_239;
-              } else {
-                if ((x_181 < 240)) {
-                  int const x_245 = data.arr[7];
-                  x_248 = (0.5f + (float(x_245) * 0.100000001f));
-                  x_257_phi = x_248;
-                } else {
-                  if ((x_181 < 270)) {
-                  } else {
-                    discard_fragment();
-                  }
-                  int const x_253 = data.arr[8];
-                  x_256 = (0.5f + (float(x_253) * 0.100000001f));
-                  x_257_phi = x_256;
-                }
-                x_257 = x_257_phi;
-                x_258_phi = x_257;
-              }
-              x_258 = x_258_phi;
-              x_259_phi = x_258;
-            }
-            x_259 = x_259_phi;
-          }
-          x_260_phi = x_259;
-        }
-        x_260 = x_260_phi;
-        x_261_phi = x_260;
-      }
-      x_261 = x_261_phi;
-      x_262_phi = x_261;
-    }
-    x_262 = x_262_phi;
-    x_263_phi = x_262;
-  }
-  float const x_263 = x_263_phi;
-  *(tint_symbol_5) = float4(x_263, x_263, x_263, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.spvasm
deleted file mode 100644
index f1c11c2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,724 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 417
-; Schema: 0
-               OpCapability Shader
-        %166 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %temp "temp"
-               OpName %data "data"
-               OpName %x_190 "x_190"
-               OpName %x_262 "x_262"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_112_phi "x_112_phi"
-               OpName %x_263_phi "x_263_phi"
-               OpName %x_100 "x_100"
-               OpName %x_98 "x_98"
-               OpName %x_96 "x_96"
-               OpName %x_94 "x_94"
-               OpName %x_92 "x_92"
-               OpName %x_90 "x_90"
-               OpName %x_88 "x_88"
-               OpName %x_86 "x_86"
-               OpName %x_84 "x_84"
-               OpName %x_82 "x_82"
-               OpName %x_64_phi "x_64_phi"
-               OpName %x_104 "x_104"
-               OpName %x_113 "x_113"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_131 "x_131"
-               OpName %x_136 "x_136"
-               OpName %x_131_phi "x_131_phi"
-               OpName %x_134_phi "x_134_phi"
-               OpName %x_136_phi "x_136_phi"
-               OpName %x_158_phi "x_158_phi"
-               OpName %x_161_phi "x_161_phi"
-               OpName %x_171_phi "x_171_phi"
-               OpName %x_151 "x_151"
-               OpName %x_154 "x_154"
-               OpName %x_135_phi "x_135_phi"
-               OpName %x_137_phi "x_137_phi"
-               OpName %x_159 "x_159"
-               OpName %x_162 "x_162"
-               OpName %x_172 "x_172"
-               OpName %x_181 "x_181"
-               OpName %x_199 "x_199"
-               OpName %x_261 "x_261"
-               OpName %x_262_phi "x_262_phi"
-               OpName %x_208 "x_208"
-               OpName %x_260 "x_260"
-               OpName %x_261_phi "x_261_phi"
-               OpName %x_217 "x_217"
-               OpName %x_259 "x_259"
-               OpName %x_260_phi "x_260_phi"
-               OpName %x_230 "x_230"
-               OpName %x_258 "x_258"
-               OpName %x_259_phi "x_259_phi"
-               OpName %x_239 "x_239"
-               OpName %x_257 "x_257"
-               OpName %x_258_phi "x_258_phi"
-               OpName %x_248 "x_248"
-               OpName %x_256 "x_256"
-               OpName %x_257_phi "x_257_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %25 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-         %60 = OpConstantComposite %_arr_int_uint_10 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-      %int_1 = OpConstant %int 1
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-%float_0_100000001 = OpConstant %float 0.100000001
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %404 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %temp = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-       %data = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-      %x_190 = OpVariable %_ptr_Function_float Function %29
-      %x_262 = OpVariable %_ptr_Function_float Function %29
-   %x_63_phi = OpVariable %_ptr_Function_int Function %33
-  %x_103_phi = OpVariable %_ptr_Function_int Function %33
-  %x_112_phi = OpVariable %_ptr_Function_int Function %33
-  %x_263_phi = OpVariable %_ptr_Function_float Function %29
-      %x_100 = OpVariable %_ptr_Function_int Function %33
-       %x_98 = OpVariable %_ptr_Function_int Function %33
-       %x_96 = OpVariable %_ptr_Function_int Function %33
-       %x_94 = OpVariable %_ptr_Function_int Function %33
-       %x_92 = OpVariable %_ptr_Function_int Function %33
-       %x_90 = OpVariable %_ptr_Function_int Function %33
-       %x_88 = OpVariable %_ptr_Function_int Function %33
-       %x_86 = OpVariable %_ptr_Function_int Function %33
-       %x_84 = OpVariable %_ptr_Function_int Function %33
-       %x_82 = OpVariable %_ptr_Function_int Function %33
-   %x_64_phi = OpVariable %_ptr_Function_int Function %33
-      %x_104 = OpVariable %_ptr_Function_int Function %33
-      %x_113 = OpVariable %_ptr_Function_int Function %33
-  %x_119_phi = OpVariable %_ptr_Function_int Function %33
-      %x_131 = OpVariable %_ptr_Function_int Function %33
-      %x_136 = OpVariable %_ptr_Function_int Function %33
-  %x_131_phi = OpVariable %_ptr_Function_int Function %33
-  %x_134_phi = OpVariable %_ptr_Function_int Function %33
-  %x_136_phi = OpVariable %_ptr_Function_int Function %33
-  %x_158_phi = OpVariable %_ptr_Function_int Function %33
-  %x_161_phi = OpVariable %_ptr_Function_int Function %33
-  %x_171_phi = OpVariable %_ptr_Function_int Function %33
-      %x_151 = OpVariable %_ptr_Function_int Function %33
-      %x_154 = OpVariable %_ptr_Function_int Function %33
-  %x_135_phi = OpVariable %_ptr_Function_int Function %33
-  %x_137_phi = OpVariable %_ptr_Function_int Function %33
-      %x_159 = OpVariable %_ptr_Function_int Function %33
-      %x_162 = OpVariable %_ptr_Function_int Function %33
-      %x_172 = OpVariable %_ptr_Function_int Function %33
-      %x_181 = OpVariable %_ptr_Function_int Function %33
-      %x_199 = OpVariable %_ptr_Function_float Function %29
-      %x_261 = OpVariable %_ptr_Function_float Function %29
-  %x_262_phi = OpVariable %_ptr_Function_float Function %29
-      %x_208 = OpVariable %_ptr_Function_float Function %29
-      %x_260 = OpVariable %_ptr_Function_float Function %29
-  %x_261_phi = OpVariable %_ptr_Function_float Function %29
-      %x_217 = OpVariable %_ptr_Function_float Function %29
-      %x_259 = OpVariable %_ptr_Function_float Function %29
-  %x_260_phi = OpVariable %_ptr_Function_float Function %29
-      %x_230 = OpVariable %_ptr_Function_float Function %29
-      %x_258 = OpVariable %_ptr_Function_float Function %29
-  %x_259_phi = OpVariable %_ptr_Function_float Function %29
-      %x_239 = OpVariable %_ptr_Function_float Function %29
-      %x_257 = OpVariable %_ptr_Function_float Function %29
-  %x_258_phi = OpVariable %_ptr_Function_float Function %29
-      %x_248 = OpVariable %_ptr_Function_float Function %29
-      %x_256 = OpVariable %_ptr_Function_float Function %29
-  %x_257_phi = OpVariable %_ptr_Function_float Function %29
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-               OpStore %x_63_phi %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %57 = OpLoad %int %x_63_phi
-         %58 = OpLoad %_arr_int_uint_10 %data
-               OpStore %data %60
-               OpStore %data %58
-         %62 = OpIAdd %int %57 %int_1
-               OpStore %x_64_phi %62
-               OpSelectionMerge %63 None
-               OpSwitch %57 %64 9 %65 8 %66 7 %67 6 %68 5 %69 4 %70 3 %71 2 %72 1 %73 0 %74
-         %65 = OpLabel
-         %75 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %75 %int_n5
-         %77 = OpIAdd %int %57 %int_1
-               OpStore %x_100 %77
-         %78 = OpLoad %int %x_100
-               OpStore %x_64_phi %78
-               OpBranch %63
-         %66 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %79 %int_n4
-         %81 = OpIAdd %int %57 %int_1
-               OpStore %x_98 %81
-         %82 = OpLoad %int %x_98
-               OpStore %x_64_phi %82
-               OpBranch %63
-         %67 = OpLabel
-         %83 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %83 %int_n3
-         %85 = OpIAdd %int %57 %int_1
-               OpStore %x_96 %85
-         %86 = OpLoad %int %x_96
-               OpStore %x_64_phi %86
-               OpBranch %63
-         %68 = OpLabel
-         %87 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %87 %int_n2
-         %89 = OpIAdd %int %57 %int_1
-               OpStore %x_94 %89
-         %90 = OpLoad %int %x_94
-               OpStore %x_64_phi %90
-               OpBranch %63
-         %69 = OpLabel
-         %91 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %91 %int_n1
-         %93 = OpIAdd %int %57 %int_1
-               OpStore %x_92 %93
-         %94 = OpLoad %int %x_92
-               OpStore %x_64_phi %94
-               OpBranch %63
-         %70 = OpLabel
-         %95 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %95 %int_0
-         %96 = OpIAdd %int %57 %int_1
-               OpStore %x_90 %96
-         %97 = OpLoad %int %x_90
-               OpStore %x_64_phi %97
-               OpBranch %63
-         %71 = OpLabel
-         %98 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %98 %int_1
-         %99 = OpIAdd %int %57 %int_1
-               OpStore %x_88 %99
-        %100 = OpLoad %int %x_88
-               OpStore %x_64_phi %100
-               OpBranch %63
-         %72 = OpLabel
-        %101 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %101 %int_2
-        %103 = OpIAdd %int %57 %int_1
-               OpStore %x_86 %103
-        %104 = OpLoad %int %x_86
-               OpStore %x_64_phi %104
-               OpBranch %63
-         %73 = OpLabel
-        %105 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %105 %int_3
-        %107 = OpIAdd %int %57 %int_1
-               OpStore %x_84 %107
-        %108 = OpLoad %int %x_84
-               OpStore %x_64_phi %108
-               OpBranch %63
-         %74 = OpLabel
-        %109 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %109 %int_4
-        %111 = OpIAdd %int %57 %int_1
-               OpStore %x_82 %111
-        %112 = OpLoad %int %x_82
-               OpStore %x_64_phi %112
-               OpBranch %63
-         %64 = OpLabel
-               OpBranch %63
-         %63 = OpLabel
-        %113 = OpLoad %int %x_64_phi
-               OpBranch %44
-         %44 = OpLabel
-               OpStore %x_63_phi %113
-        %115 = OpSLessThan %bool %113 %int_10
-               OpBranchConditional %115 %42 %43
-         %43 = OpLabel
-               OpStore %x_103_phi %int_0
-               OpBranch %117
-        %117 = OpLabel
-               OpLoopMerge %118 %119 None
-               OpBranch %120
-        %120 = OpLabel
-        %122 = OpLoad %int %x_103_phi
-        %123 = OpSLessThan %bool %122 %int_10
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %126
-        %125 = OpLabel
-               OpBranch %124
-        %126 = OpLabel
-               OpBranch %118
-        %124 = OpLabel
-               OpBranch %119
-        %119 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %data %122
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Function_int %temp %122
-               OpStore %129 %128
-        %130 = OpIAdd %int %122 %int_1
-               OpStore %x_104 %130
-        %131 = OpLoad %int %x_104
-               OpStore %x_103_phi %131
-               OpBranch %117
-        %118 = OpLabel
-               OpStore %x_112_phi %int_1
-               OpBranch %132
-        %132 = OpLabel
-               OpLoopMerge %133 %134 None
-               OpBranch %135
-        %135 = OpLabel
-        %138 = OpLoad %int %x_112_phi
-        %140 = OpSLessThanEqual %bool %138 %int_9
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %143
-        %142 = OpLabel
-               OpBranch %141
-        %143 = OpLabel
-               OpBranch %133
-        %141 = OpLabel
-               OpStore %x_119_phi %int_0
-               OpBranch %144
-        %144 = OpLabel
-               OpLoopMerge %145 %146 None
-               OpBranch %147
-        %147 = OpLabel
-        %156 = OpLoad %int %x_119_phi
-        %157 = OpSLessThan %bool %156 %int_9
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %160
-        %159 = OpLabel
-               OpBranch %158
-        %160 = OpLabel
-               OpBranch %145
-        %158 = OpLabel
-        %161 = OpIAdd %int %156 %138
-        %162 = OpISub %int %161 %int_1
-        %163 = OpIMul %int %int_2 %138
-        %164 = OpIAdd %int %156 %163
-        %167 = OpISub %int %164 %int_1
-        %165 = OpExtInst %int %166 SMin %167 %int_9
-               OpStore %x_131_phi %156
-               OpStore %x_134_phi %161
-               OpStore %x_136_phi %156
-               OpBranch %168
-        %168 = OpLabel
-               OpLoopMerge %169 %170 None
-               OpBranch %171
-        %171 = OpLabel
-        %176 = OpLoad %int %x_131_phi
-               OpStore %x_131 %176
-        %177 = OpLoad %int %x_134_phi
-        %178 = OpLoad %int %x_136_phi
-               OpStore %x_136 %178
-        %179 = OpLoad %int %x_136
-        %180 = OpSLessThanEqual %bool %179 %162
-        %181 = OpSLessThanEqual %bool %177 %165
-        %182 = OpLogicalAnd %bool %180 %181
-               OpSelectionMerge %183 None
-               OpBranchConditional %182 %184 %185
-        %184 = OpLabel
-               OpBranch %183
-        %185 = OpLabel
-               OpBranch %169
-        %183 = OpLabel
-        %186 = OpLoad %int %x_136
-        %187 = OpAccessChain %_ptr_Function_int %data %186
-        %188 = OpLoad %int %187
-        %189 = OpAccessChain %_ptr_Function_int %data %177
-        %190 = OpLoad %int %189
-        %192 = OpLoad %int %x_131
-        %193 = OpCopyObject %int %int_1
-        %194 = OpIAdd %int %192 %193
-        %191 = OpCopyObject %int %194
-        %195 = OpSLessThan %bool %188 %190
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %198
-        %197 = OpLabel
-        %200 = OpLoad %int %x_136
-        %201 = OpCopyObject %int %int_1
-        %202 = OpIAdd %int %200 %201
-        %199 = OpCopyObject %int %202
-               OpStore %x_151 %199
-        %203 = OpAccessChain %_ptr_Function_int %data %186
-        %204 = OpLoad %int %203
-        %205 = OpLoad %int %x_131
-        %206 = OpAccessChain %_ptr_Function_int %temp %205
-               OpStore %206 %204
-               OpStore %x_135_phi %177
-        %207 = OpLoad %int %x_151
-               OpStore %x_137_phi %207
-               OpBranch %196
-        %198 = OpLabel
-        %208 = OpIAdd %int %177 %int_1
-               OpStore %x_154 %208
-        %209 = OpAccessChain %_ptr_Function_int %data %177
-        %210 = OpLoad %int %209
-        %211 = OpLoad %int %x_131
-        %212 = OpAccessChain %_ptr_Function_int %temp %211
-               OpStore %212 %210
-        %213 = OpLoad %int %x_154
-               OpStore %x_135_phi %213
-        %214 = OpLoad %int %x_136
-               OpStore %x_137_phi %214
-               OpBranch %196
-        %196 = OpLabel
-        %215 = OpLoad %int %x_135_phi
-        %216 = OpLoad %int %x_137_phi
-               OpBranch %170
-        %170 = OpLabel
-               OpStore %x_131_phi %191
-               OpStore %x_134_phi %215
-               OpStore %x_136_phi %216
-               OpBranch %168
-        %169 = OpLabel
-        %217 = OpLoad %int %x_131
-               OpStore %x_158_phi %217
-        %218 = OpLoad %int %x_136
-               OpStore %x_161_phi %218
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %225 = OpLoad %int %x_158_phi
-        %226 = OpLoad %int %x_161_phi
-        %227 = OpSLessThan %bool %226 %int_10
-        %228 = OpSLessThanEqual %bool %226 %162
-        %229 = OpLogicalAnd %bool %227 %228
-               OpSelectionMerge %230 None
-               OpBranchConditional %229 %231 %232
-        %231 = OpLabel
-               OpBranch %230
-        %232 = OpLabel
-               OpBranch %220
-        %230 = OpLabel
-               OpBranch %221
-        %221 = OpLabel
-        %233 = OpIAdd %int %225 %int_1
-               OpStore %x_159 %233
-        %234 = OpIAdd %int %226 %int_1
-               OpStore %x_162 %234
-        %235 = OpAccessChain %_ptr_Function_int %data %226
-        %236 = OpLoad %int %235
-        %237 = OpAccessChain %_ptr_Function_int %temp %225
-               OpStore %237 %236
-        %238 = OpLoad %int %x_159
-               OpStore %x_158_phi %238
-        %239 = OpLoad %int %x_162
-               OpStore %x_161_phi %239
-               OpBranch %219
-        %220 = OpLabel
-               OpStore %x_171_phi %156
-               OpBranch %240
-        %240 = OpLabel
-               OpLoopMerge %241 %242 None
-               OpBranch %243
-        %243 = OpLabel
-        %245 = OpLoad %int %x_171_phi
-        %246 = OpSLessThanEqual %bool %245 %165
-               OpSelectionMerge %247 None
-               OpBranchConditional %246 %248 %249
-        %248 = OpLabel
-               OpBranch %247
-        %249 = OpLabel
-               OpBranch %241
-        %247 = OpLabel
-               OpBranch %242
-        %242 = OpLabel
-        %250 = OpAccessChain %_ptr_Function_int %temp %245
-        %251 = OpLoad %int %250
-        %252 = OpAccessChain %_ptr_Function_int %data %245
-               OpStore %252 %251
-        %253 = OpIAdd %int %245 %int_1
-               OpStore %x_172 %253
-        %254 = OpLoad %int %x_172
-               OpStore %x_171_phi %254
-               OpBranch %240
-        %241 = OpLabel
-               OpBranch %146
-        %146 = OpLabel
-               OpStore %x_119_phi %164
-               OpBranch %144
-        %145 = OpLabel
-               OpBranch %134
-        %134 = OpLabel
-        %255 = OpIMul %int %int_2 %138
-               OpStore %x_113 %255
-        %256 = OpLoad %int %x_113
-               OpStore %x_112_phi %256
-               OpBranch %132
-        %133 = OpLabel
-        %263 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %264 = OpLoad %float %263
-        %265 = OpConvertFToS %int %264
-               OpStore %x_181 %265
-        %266 = OpLoad %int %x_181
-        %268 = OpSLessThan %bool %266 %int_30
-               OpSelectionMerge %269 None
-               OpBranchConditional %268 %270 %271
-        %270 = OpLabel
-        %272 = OpAccessChain %_ptr_Function_int %data %int_0
-        %273 = OpLoad %int %272
-        %275 = OpConvertSToF %float %273
-        %277 = OpFMul %float %275 %float_0_100000001
-        %278 = OpFAdd %float %float_0_5 %277
-               OpStore %x_190 %278
-        %279 = OpLoad %float %x_190
-               OpStore %x_263_phi %279
-               OpBranch %269
-        %271 = OpLabel
-        %283 = OpLoad %int %x_181
-        %285 = OpSLessThan %bool %283 %int_60
-               OpSelectionMerge %286 None
-               OpBranchConditional %285 %287 %288
-        %287 = OpLabel
-        %289 = OpAccessChain %_ptr_Function_int %data %int_1
-        %290 = OpLoad %int %289
-        %291 = OpConvertSToF %float %290
-        %292 = OpFMul %float %291 %float_0_100000001
-        %293 = OpFAdd %float %float_0_5 %292
-               OpStore %x_199 %293
-        %294 = OpLoad %float %x_199
-               OpStore %x_262_phi %294
-               OpBranch %286
-        %288 = OpLabel
-        %298 = OpLoad %int %x_181
-        %300 = OpSLessThan %bool %298 %int_90
-               OpSelectionMerge %301 None
-               OpBranchConditional %300 %302 %303
-        %302 = OpLabel
-        %304 = OpAccessChain %_ptr_Function_int %data %int_2
-        %305 = OpLoad %int %304
-        %306 = OpConvertSToF %float %305
-        %307 = OpFMul %float %306 %float_0_100000001
-        %308 = OpFAdd %float %float_0_5 %307
-               OpStore %x_208 %308
-        %309 = OpLoad %float %x_208
-               OpStore %x_261_phi %309
-               OpBranch %301
-        %303 = OpLabel
-        %310 = OpLoad %int %x_181
-        %312 = OpSLessThan %bool %310 %int_120
-               OpSelectionMerge %313 None
-               OpBranchConditional %312 %314 %315
-        %314 = OpLabel
-        %316 = OpAccessChain %_ptr_Function_int %data %int_3
-        %317 = OpLoad %int %316
-        %318 = OpConvertSToF %float %317
-        %319 = OpFMul %float %318 %float_0_100000001
-        %320 = OpFAdd %float %float_0_5 %319
-               OpStore %x_217 %320
-        %321 = OpLoad %float %x_217
-               OpStore %x_260_phi %321
-               OpBranch %313
-        %315 = OpLabel
-        %325 = OpLoad %int %x_181
-        %327 = OpSLessThan %bool %325 %int_150
-               OpSelectionMerge %328 None
-               OpBranchConditional %327 %329 %330
-        %329 = OpLabel
-               OpKill
-        %330 = OpLabel
-        %334 = OpLoad %int %x_181
-        %336 = OpSLessThan %bool %334 %int_180
-               OpSelectionMerge %337 None
-               OpBranchConditional %336 %338 %339
-        %338 = OpLabel
-        %341 = OpAccessChain %_ptr_Function_int %data %int_5
-        %342 = OpLoad %int %341
-        %343 = OpConvertSToF %float %342
-        %344 = OpFMul %float %343 %float_0_100000001
-        %345 = OpFAdd %float %float_0_5 %344
-               OpStore %x_230 %345
-        %346 = OpLoad %float %x_230
-               OpStore %x_259_phi %346
-               OpBranch %337
-        %339 = OpLabel
-        %350 = OpLoad %int %x_181
-        %352 = OpSLessThan %bool %350 %int_210
-               OpSelectionMerge %353 None
-               OpBranchConditional %352 %354 %355
-        %354 = OpLabel
-        %357 = OpAccessChain %_ptr_Function_int %data %int_6
-        %358 = OpLoad %int %357
-        %359 = OpConvertSToF %float %358
-        %360 = OpFMul %float %359 %float_0_100000001
-        %361 = OpFAdd %float %float_0_5 %360
-               OpStore %x_239 %361
-        %362 = OpLoad %float %x_239
-               OpStore %x_258_phi %362
-               OpBranch %353
-        %355 = OpLabel
-        %363 = OpLoad %int %x_181
-        %365 = OpSLessThan %bool %363 %int_240
-               OpSelectionMerge %366 None
-               OpBranchConditional %365 %367 %368
-        %367 = OpLabel
-        %370 = OpAccessChain %_ptr_Function_int %data %int_7
-        %371 = OpLoad %int %370
-        %372 = OpConvertSToF %float %371
-        %373 = OpFMul %float %372 %float_0_100000001
-        %374 = OpFAdd %float %float_0_5 %373
-               OpStore %x_248 %374
-        %375 = OpLoad %float %x_248
-               OpStore %x_257_phi %375
-               OpBranch %366
-        %368 = OpLabel
-        %376 = OpLoad %int %x_181
-        %378 = OpSLessThan %bool %376 %int_270
-               OpSelectionMerge %379 None
-               OpBranchConditional %378 %380 %381
-        %380 = OpLabel
-               OpBranch %379
-        %381 = OpLabel
-               OpKill
-        %379 = OpLabel
-        %383 = OpAccessChain %_ptr_Function_int %data %int_8
-        %384 = OpLoad %int %383
-        %385 = OpConvertSToF %float %384
-        %386 = OpFMul %float %385 %float_0_100000001
-        %387 = OpFAdd %float %float_0_5 %386
-               OpStore %x_256 %387
-        %388 = OpLoad %float %x_256
-               OpStore %x_257_phi %388
-               OpBranch %366
-        %366 = OpLabel
-        %389 = OpLoad %float %x_257_phi
-               OpStore %x_257 %389
-        %390 = OpLoad %float %x_257
-               OpStore %x_258_phi %390
-               OpBranch %353
-        %353 = OpLabel
-        %391 = OpLoad %float %x_258_phi
-               OpStore %x_258 %391
-        %392 = OpLoad %float %x_258
-               OpStore %x_259_phi %392
-               OpBranch %337
-        %337 = OpLabel
-        %393 = OpLoad %float %x_259_phi
-               OpStore %x_259 %393
-               OpBranch %328
-        %328 = OpLabel
-        %394 = OpLoad %float %x_259
-               OpStore %x_260_phi %394
-               OpBranch %313
-        %313 = OpLabel
-        %395 = OpLoad %float %x_260_phi
-               OpStore %x_260 %395
-        %396 = OpLoad %float %x_260
-               OpStore %x_261_phi %396
-               OpBranch %301
-        %301 = OpLabel
-        %397 = OpLoad %float %x_261_phi
-               OpStore %x_261 %397
-        %398 = OpLoad %float %x_261
-               OpStore %x_262_phi %398
-               OpBranch %286
-        %286 = OpLabel
-        %399 = OpLoad %float %x_262_phi
-               OpStore %x_262 %399
-        %400 = OpLoad %float %x_262
-               OpStore %x_263_phi %400
-               OpBranch %269
-        %269 = OpLabel
-        %401 = OpLoad %float %x_263_phi
-        %403 = OpCompositeConstruct %v4float %401 %401 %401 %float_1
-               OpStore %x_GLF_color %403
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %404
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %408 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %409 = OpFunctionCall %void %main_1
-        %410 = OpLoad %v4float %x_GLF_color
-        %411 = OpCompositeConstruct %main_out %410
-               OpReturnValue %411
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %413 = OpLabel
-        %415 = OpLoad %v4float %gl_FragCoord_param_1
-        %414 = OpFunctionCall %main_out %main_inner %415
-        %416 = OpCompositeExtract %v4float %414 0
-               OpStore %x_GLF_color_1_1 %416
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.wgsl
deleted file mode 100644
index 705774f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,341 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var temp : array<i32, 10>;
-  var data : array<i32, 10>;
-  var x_190 : f32;
-  var x_262 : f32;
-  var x_63_phi : i32;
-  var x_103_phi : i32;
-  var x_112_phi : i32;
-  var x_263_phi : f32;
-  let x_60 : f32 = x_8.injectionSwitch.x;
-  let x_61 : i32 = i32(x_60);
-  x_63_phi = x_61;
-  loop {
-    var x_100 : i32;
-    var x_98 : i32;
-    var x_96 : i32;
-    var x_94 : i32;
-    var x_92 : i32;
-    var x_90 : i32;
-    var x_88 : i32;
-    var x_86 : i32;
-    var x_84 : i32;
-    var x_82 : i32;
-    var x_64_phi : i32;
-    let x_63 : i32 = x_63_phi;
-    let x_68 : array<i32, 10> = data;
-    data = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-    data = x_68;
-    let x_69 : i32 = (x_63 + 1);
-    x_64_phi = x_69;
-    switch(x_63) {
-      case 9: {
-        data[x_63] = -5;
-        x_100 = (x_63 + 1);
-        x_64_phi = x_100;
-      }
-      case 8: {
-        data[x_63] = -4;
-        x_98 = (x_63 + 1);
-        x_64_phi = x_98;
-      }
-      case 7: {
-        data[x_63] = -3;
-        x_96 = (x_63 + 1);
-        x_64_phi = x_96;
-      }
-      case 6: {
-        data[x_63] = -2;
-        x_94 = (x_63 + 1);
-        x_64_phi = x_94;
-      }
-      case 5: {
-        data[x_63] = -1;
-        x_92 = (x_63 + 1);
-        x_64_phi = x_92;
-      }
-      case 4: {
-        data[x_63] = 0;
-        x_90 = (x_63 + 1);
-        x_64_phi = x_90;
-      }
-      case 3: {
-        data[x_63] = 1;
-        x_88 = (x_63 + 1);
-        x_64_phi = x_88;
-      }
-      case 2: {
-        data[x_63] = 2;
-        x_86 = (x_63 + 1);
-        x_64_phi = x_86;
-      }
-      case 1: {
-        data[x_63] = 3;
-        x_84 = (x_63 + 1);
-        x_64_phi = x_84;
-      }
-      case 0: {
-        data[x_63] = 4;
-        x_82 = (x_63 + 1);
-        x_64_phi = x_82;
-      }
-      default: {
-      }
-    }
-    let x_64 : i32 = x_64_phi;
-
-    continuing {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_103_phi = 0;
-  loop {
-    var x_104 : i32;
-    let x_103 : i32 = x_103_phi;
-    if ((x_103 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_109 : i32 = data[x_103];
-      temp[x_103] = x_109;
-      x_104 = (x_103 + 1);
-      x_103_phi = x_104;
-    }
-  }
-  x_112_phi = 1;
-  loop {
-    var x_113 : i32;
-    var x_119_phi : i32;
-    let x_112 : i32 = x_112_phi;
-    if ((x_112 <= 9)) {
-    } else {
-      break;
-    }
-    x_119_phi = 0;
-    loop {
-      var x_131 : i32;
-      var x_136 : i32;
-      var x_131_phi : i32;
-      var x_134_phi : i32;
-      var x_136_phi : i32;
-      var x_158_phi : i32;
-      var x_161_phi : i32;
-      var x_171_phi : i32;
-      let x_119 : i32 = x_119_phi;
-      if ((x_119 < 9)) {
-      } else {
-        break;
-      }
-      let x_125 : i32 = (x_119 + x_112);
-      let x_126 : i32 = (x_125 - 1);
-      let x_120 : i32 = (x_119 + (2 * x_112));
-      let x_129 : i32 = min((x_120 - 1), 9);
-      x_131_phi = x_119;
-      x_134_phi = x_125;
-      x_136_phi = x_119;
-      loop {
-        var x_151 : i32;
-        var x_154 : i32;
-        var x_135_phi : i32;
-        var x_137_phi : i32;
-        x_131 = x_131_phi;
-        let x_134 : i32 = x_134_phi;
-        x_136 = x_136_phi;
-        if (((x_136 <= x_126) & (x_134 <= x_129))) {
-        } else {
-          break;
-        }
-        let x_143 : ptr<function, i32> = &(data[x_136]);
-        let x_144 : i32 = *(x_143);
-        let x_145 : ptr<function, i32> = &(data[x_134]);
-        let x_146 : i32 = *(x_145);
-        let x_132 : i32 = bitcast<i32>((x_131 + bitcast<i32>(1)));
-        if ((x_144 < x_146)) {
-          x_151 = bitcast<i32>((x_136 + bitcast<i32>(1)));
-          let x_152 : i32 = *(x_143);
-          temp[x_131] = x_152;
-          x_135_phi = x_134;
-          x_137_phi = x_151;
-        } else {
-          x_154 = (x_134 + 1);
-          let x_155 : i32 = *(x_145);
-          temp[x_131] = x_155;
-          x_135_phi = x_154;
-          x_137_phi = x_136;
-        }
-        let x_135 : i32 = x_135_phi;
-        let x_137 : i32 = x_137_phi;
-
-        continuing {
-          x_131_phi = x_132;
-          x_134_phi = x_135;
-          x_136_phi = x_137;
-        }
-      }
-      x_158_phi = x_131;
-      x_161_phi = x_136;
-      loop {
-        var x_159 : i32;
-        var x_162 : i32;
-        let x_158 : i32 = x_158_phi;
-        let x_161 : i32 = x_161_phi;
-        if (((x_161 < 10) & (x_161 <= x_126))) {
-        } else {
-          break;
-        }
-
-        continuing {
-          x_159 = (x_158 + 1);
-          x_162 = (x_161 + 1);
-          let x_168 : i32 = data[x_161];
-          temp[x_158] = x_168;
-          x_158_phi = x_159;
-          x_161_phi = x_162;
-        }
-      }
-      x_171_phi = x_119;
-      loop {
-        var x_172 : i32;
-        let x_171 : i32 = x_171_phi;
-        if ((x_171 <= x_129)) {
-        } else {
-          break;
-        }
-
-        continuing {
-          let x_177 : i32 = temp[x_171];
-          data[x_171] = x_177;
-          x_172 = (x_171 + 1);
-          x_171_phi = x_172;
-        }
-      }
-
-      continuing {
-        x_119_phi = x_120;
-      }
-    }
-
-    continuing {
-      x_113 = (2 * x_112);
-      x_112_phi = x_113;
-    }
-  }
-  var x_181 : i32;
-  var x_199 : f32;
-  var x_261 : f32;
-  var x_262_phi : f32;
-  let x_180 : f32 = gl_FragCoord.y;
-  x_181 = i32(x_180);
-  if ((x_181 < 30)) {
-    let x_187 : i32 = data[0];
-    x_190 = (0.5 + (f32(x_187) * 0.100000001));
-    x_263_phi = x_190;
-  } else {
-    var x_208 : f32;
-    var x_260 : f32;
-    var x_261_phi : f32;
-    if ((x_181 < 60)) {
-      let x_196 : i32 = data[1];
-      x_199 = (0.5 + (f32(x_196) * 0.100000001));
-      x_262_phi = x_199;
-    } else {
-      var x_217 : f32;
-      var x_259 : f32;
-      var x_260_phi : f32;
-      if ((x_181 < 90)) {
-        let x_205 : i32 = data[2];
-        x_208 = (0.5 + (f32(x_205) * 0.100000001));
-        x_261_phi = x_208;
-      } else {
-        if ((x_181 < 120)) {
-          let x_214 : i32 = data[3];
-          x_217 = (0.5 + (f32(x_214) * 0.100000001));
-          x_260_phi = x_217;
-        } else {
-          var x_230 : f32;
-          var x_258 : f32;
-          var x_259_phi : f32;
-          if ((x_181 < 150)) {
-            discard;
-          } else {
-            var x_239 : f32;
-            var x_257 : f32;
-            var x_258_phi : f32;
-            if ((x_181 < 180)) {
-              let x_227 : i32 = data[5];
-              x_230 = (0.5 + (f32(x_227) * 0.100000001));
-              x_259_phi = x_230;
-            } else {
-              var x_248 : f32;
-              var x_256 : f32;
-              var x_257_phi : f32;
-              if ((x_181 < 210)) {
-                let x_236 : i32 = data[6];
-                x_239 = (0.5 + (f32(x_236) * 0.100000001));
-                x_258_phi = x_239;
-              } else {
-                if ((x_181 < 240)) {
-                  let x_245 : i32 = data[7];
-                  x_248 = (0.5 + (f32(x_245) * 0.100000001));
-                  x_257_phi = x_248;
-                } else {
-                  if ((x_181 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  let x_253 : i32 = data[8];
-                  x_256 = (0.5 + (f32(x_253) * 0.100000001));
-                  x_257_phi = x_256;
-                }
-                x_257 = x_257_phi;
-                x_258_phi = x_257;
-              }
-              x_258 = x_258_phi;
-              x_259_phi = x_258;
-            }
-            x_259 = x_259_phi;
-          }
-          x_260_phi = x_259;
-        }
-        x_260 = x_260_phi;
-        x_261_phi = x_260;
-      }
-      x_261 = x_261_phi;
-      x_262_phi = x_261;
-    }
-    x_262 = x_262_phi;
-    x_263_phi = x_262;
-  }
-  let x_263 : f32 = x_263_phi;
-  x_GLF_color = vec4<f32>(x_263, x_263, x_263, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.hlsl
deleted file mode 100644
index 12e14f0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,361 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int temp[10] = (int[10])0;
-  int data[10] = (int[10])0;
-  float x_190 = 0.0f;
-  float x_262 = 0.0f;
-  int x_63_phi = 0;
-  int x_103_phi = 0;
-  int x_112_phi = 0;
-  float x_263_phi = 0.0f;
-  const float x_60 = asfloat(x_8[0].x);
-  const int x_61 = int(x_60);
-  x_63_phi = x_61;
-  while (true) {
-    int x_100 = 0;
-    int x_98 = 0;
-    int x_96 = 0;
-    int x_94 = 0;
-    int x_92 = 0;
-    int x_90 = 0;
-    int x_88 = 0;
-    int x_86 = 0;
-    int x_84 = 0;
-    int x_82 = 0;
-    int x_64_phi = 0;
-    const int x_63 = x_63_phi;
-    const int x_68[10] = data;
-    const int tint_symbol_4[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-    data = tint_symbol_4;
-    data = x_68;
-    const int x_69 = (x_63 + 1);
-    x_64_phi = x_69;
-    switch(x_63) {
-      case 9: {
-        data[x_63] = -5;
-        x_100 = (x_63 + 1);
-        x_64_phi = x_100;
-        break;
-      }
-      case 8: {
-        data[x_63] = -4;
-        x_98 = (x_63 + 1);
-        x_64_phi = x_98;
-        break;
-      }
-      case 7: {
-        data[x_63] = -3;
-        x_96 = (x_63 + 1);
-        x_64_phi = x_96;
-        break;
-      }
-      case 6: {
-        data[x_63] = -2;
-        x_94 = (x_63 + 1);
-        x_64_phi = x_94;
-        break;
-      }
-      case 5: {
-        data[x_63] = -1;
-        x_92 = (x_63 + 1);
-        x_64_phi = x_92;
-        break;
-      }
-      case 4: {
-        data[x_63] = 0;
-        x_90 = (x_63 + 1);
-        x_64_phi = x_90;
-        break;
-      }
-      case 3: {
-        data[x_63] = 1;
-        x_88 = (x_63 + 1);
-        x_64_phi = x_88;
-        break;
-      }
-      case 2: {
-        data[x_63] = 2;
-        x_86 = (x_63 + 1);
-        x_64_phi = x_86;
-        break;
-      }
-      case 1: {
-        data[x_63] = 3;
-        x_84 = (x_63 + 1);
-        x_64_phi = x_84;
-        break;
-      }
-      case 0: {
-        data[x_63] = 4;
-        x_82 = (x_63 + 1);
-        x_64_phi = x_82;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    const int x_64 = x_64_phi;
-    {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_103_phi = 0;
-  while (true) {
-    int x_104 = 0;
-    const int x_103 = x_103_phi;
-    if ((x_103 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const int x_109 = data[x_103];
-      temp[x_103] = x_109;
-      x_104 = (x_103 + 1);
-      x_103_phi = x_104;
-    }
-  }
-  x_112_phi = 1;
-  while (true) {
-    int x_113 = 0;
-    int x_119_phi = 0;
-    const int x_112 = x_112_phi;
-    if ((x_112 <= 9)) {
-    } else {
-      break;
-    }
-    x_119_phi = 0;
-    while (true) {
-      int x_131 = 0;
-      int x_136 = 0;
-      int x_131_phi = 0;
-      int x_134_phi = 0;
-      int x_136_phi = 0;
-      int x_158_phi = 0;
-      int x_161_phi = 0;
-      int x_171_phi = 0;
-      const int x_119 = x_119_phi;
-      if ((x_119 < 9)) {
-      } else {
-        break;
-      }
-      const int x_125 = (x_119 + x_112);
-      const int x_126 = (x_125 - 1);
-      const int x_120 = (x_119 + (2 * x_112));
-      const int x_129 = min((x_120 - 1), 9);
-      x_131_phi = x_119;
-      x_134_phi = x_125;
-      x_136_phi = x_119;
-      while (true) {
-        int x_151 = 0;
-        int x_154 = 0;
-        int x_135_phi = 0;
-        int x_137_phi = 0;
-        x_131 = x_131_phi;
-        const int x_134 = x_134_phi;
-        x_136 = x_136_phi;
-        bool tint_tmp = (x_136 <= x_126);
-        if (tint_tmp) {
-          tint_tmp = (x_134 <= x_129);
-        }
-        if ((tint_tmp)) {
-        } else {
-          break;
-        }
-        const int x_143_save = x_136;
-        const int x_144 = data[x_143_save];
-        const int x_145_save = x_134;
-        const int x_146 = data[x_145_save];
-        const int x_132 = asint((x_131 + asint(1)));
-        if ((x_144 < x_146)) {
-          x_151 = asint((x_136 + asint(1)));
-          const int x_152 = data[x_143_save];
-          temp[x_131] = x_152;
-          x_135_phi = x_134;
-          x_137_phi = x_151;
-        } else {
-          x_154 = (x_134 + 1);
-          const int x_155 = data[x_145_save];
-          temp[x_131] = x_155;
-          x_135_phi = x_154;
-          x_137_phi = x_136;
-        }
-        const int x_135 = x_135_phi;
-        const int x_137 = x_137_phi;
-        {
-          x_131_phi = x_132;
-          x_134_phi = x_135;
-          x_136_phi = x_137;
-        }
-      }
-      x_158_phi = x_131;
-      x_161_phi = x_136;
-      while (true) {
-        int x_159 = 0;
-        int x_162 = 0;
-        const int x_158 = x_158_phi;
-        const int x_161 = x_161_phi;
-        bool tint_tmp_1 = (x_161 < 10);
-        if (tint_tmp_1) {
-          tint_tmp_1 = (x_161 <= x_126);
-        }
-        if ((tint_tmp_1)) {
-        } else {
-          break;
-        }
-        {
-          x_159 = (x_158 + 1);
-          x_162 = (x_161 + 1);
-          const int x_168 = data[x_161];
-          temp[x_158] = x_168;
-          x_158_phi = x_159;
-          x_161_phi = x_162;
-        }
-      }
-      x_171_phi = x_119;
-      while (true) {
-        int x_172 = 0;
-        const int x_171 = x_171_phi;
-        if ((x_171 <= x_129)) {
-        } else {
-          break;
-        }
-        {
-          const int x_177 = temp[x_171];
-          data[x_171] = x_177;
-          x_172 = (x_171 + 1);
-          x_171_phi = x_172;
-        }
-      }
-      {
-        x_119_phi = x_120;
-      }
-    }
-    {
-      x_113 = (2 * x_112);
-      x_112_phi = x_113;
-    }
-  }
-  int x_181 = 0;
-  float x_199 = 0.0f;
-  float x_261 = 0.0f;
-  float x_262_phi = 0.0f;
-  const float x_180 = gl_FragCoord.y;
-  x_181 = int(x_180);
-  if ((x_181 < 30)) {
-    const int x_187 = data[0];
-    x_190 = (0.5f + (float(x_187) * 0.100000001f));
-    x_263_phi = x_190;
-  } else {
-    float x_208 = 0.0f;
-    float x_260 = 0.0f;
-    float x_261_phi = 0.0f;
-    if ((x_181 < 60)) {
-      const int x_196 = data[1];
-      x_199 = (0.5f + (float(x_196) * 0.100000001f));
-      x_262_phi = x_199;
-    } else {
-      float x_217 = 0.0f;
-      float x_259 = 0.0f;
-      float x_260_phi = 0.0f;
-      if ((x_181 < 90)) {
-        const int x_205 = data[2];
-        x_208 = (0.5f + (float(x_205) * 0.100000001f));
-        x_261_phi = x_208;
-      } else {
-        if ((x_181 < 120)) {
-          const int x_214 = data[3];
-          x_217 = (0.5f + (float(x_214) * 0.100000001f));
-          x_260_phi = x_217;
-        } else {
-          float x_230 = 0.0f;
-          float x_258 = 0.0f;
-          float x_259_phi = 0.0f;
-          if ((x_181 < 150)) {
-            discard;
-          } else {
-            float x_239 = 0.0f;
-            float x_257 = 0.0f;
-            float x_258_phi = 0.0f;
-            if ((x_181 < 180)) {
-              const int x_227 = data[5];
-              x_230 = (0.5f + (float(x_227) * 0.100000001f));
-              x_259_phi = x_230;
-            } else {
-              float x_248 = 0.0f;
-              float x_256 = 0.0f;
-              float x_257_phi = 0.0f;
-              if ((x_181 < 210)) {
-                const int x_236 = data[6];
-                x_239 = (0.5f + (float(x_236) * 0.100000001f));
-                x_258_phi = x_239;
-              } else {
-                if ((x_181 < 240)) {
-                  const int x_245 = data[7];
-                  x_248 = (0.5f + (float(x_245) * 0.100000001f));
-                  x_257_phi = x_248;
-                } else {
-                  if ((x_181 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  const int x_253 = data[8];
-                  x_256 = (0.5f + (float(x_253) * 0.100000001f));
-                  x_257_phi = x_256;
-                }
-                x_257 = x_257_phi;
-                x_258_phi = x_257;
-              }
-              x_258 = x_258_phi;
-              x_259_phi = x_258;
-            }
-            x_259 = x_259_phi;
-          }
-          x_260_phi = x_259;
-        }
-        x_260 = x_260_phi;
-        x_261_phi = x_260;
-      }
-      x_261 = x_261_phi;
-      x_262_phi = x_261;
-    }
-    x_262 = x_262_phi;
-    x_263_phi = x_262;
-  }
-  const float x_263 = x_263_phi;
-  x_GLF_color = float4(x_263, x_263, x_263, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.msl
deleted file mode 100644
index 81ad77b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.msl
+++ /dev/null
@@ -1,356 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper temp = {};
-  tint_array_wrapper data = {};
-  float x_190 = 0.0f;
-  float x_262 = 0.0f;
-  int x_63_phi = 0;
-  int x_103_phi = 0;
-  int x_112_phi = 0;
-  float x_263_phi = 0.0f;
-  float const x_60 = x_8.injectionSwitch.x;
-  int const x_61 = int(x_60);
-  x_63_phi = x_61;
-  while (true) {
-    int x_100 = 0;
-    int x_98 = 0;
-    int x_96 = 0;
-    int x_94 = 0;
-    int x_92 = 0;
-    int x_90 = 0;
-    int x_88 = 0;
-    int x_86 = 0;
-    int x_84 = 0;
-    int x_82 = 0;
-    int x_64_phi = 0;
-    int const x_63 = x_63_phi;
-    tint_array_wrapper const x_68 = data;
-    tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    data = tint_symbol_2;
-    data = x_68;
-    int const x_69 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-    x_64_phi = x_69;
-    switch(x_63) {
-      case 9: {
-        data.arr[x_63] = -5;
-        x_100 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_100;
-        break;
-      }
-      case 8: {
-        data.arr[x_63] = -4;
-        x_98 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_98;
-        break;
-      }
-      case 7: {
-        data.arr[x_63] = -3;
-        x_96 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_96;
-        break;
-      }
-      case 6: {
-        data.arr[x_63] = -2;
-        x_94 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_94;
-        break;
-      }
-      case 5: {
-        data.arr[x_63] = -1;
-        x_92 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_92;
-        break;
-      }
-      case 4: {
-        data.arr[x_63] = 0;
-        x_90 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_90;
-        break;
-      }
-      case 3: {
-        data.arr[x_63] = 1;
-        x_88 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_88;
-        break;
-      }
-      case 2: {
-        data.arr[x_63] = 2;
-        x_86 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_86;
-        break;
-      }
-      case 1: {
-        data.arr[x_63] = 3;
-        x_84 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_84;
-        break;
-      }
-      case 0: {
-        data.arr[x_63] = 4;
-        x_82 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_82;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_64 = x_64_phi;
-    {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_103_phi = 0;
-  while (true) {
-    int x_104 = 0;
-    int const x_103 = x_103_phi;
-    if ((x_103 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_109 = data.arr[x_103];
-      temp.arr[x_103] = x_109;
-      x_104 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-      x_103_phi = x_104;
-    }
-  }
-  x_112_phi = 1;
-  while (true) {
-    int x_113 = 0;
-    int x_119_phi = 0;
-    int const x_112 = x_112_phi;
-    if ((x_112 <= 9)) {
-    } else {
-      break;
-    }
-    x_119_phi = 0;
-    while (true) {
-      int x_131 = 0;
-      int x_136 = 0;
-      int x_131_phi = 0;
-      int x_134_phi = 0;
-      int x_136_phi = 0;
-      int x_158_phi = 0;
-      int x_161_phi = 0;
-      int x_171_phi = 0;
-      int const x_119 = x_119_phi;
-      if ((x_119 < 9)) {
-      } else {
-        break;
-      }
-      int const x_125 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(x_112)));
-      int const x_126 = as_type<int>((as_type<uint>(x_125) - as_type<uint>(1)));
-      int const x_120 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_112))))));
-      int const x_129 = min(as_type<int>((as_type<uint>(x_120) - as_type<uint>(1))), 9);
-      x_131_phi = x_119;
-      x_134_phi = x_125;
-      x_136_phi = x_119;
-      while (true) {
-        int x_151 = 0;
-        int x_154 = 0;
-        int x_135_phi = 0;
-        int x_137_phi = 0;
-        x_131 = x_131_phi;
-        int const x_134 = x_134_phi;
-        x_136 = x_136_phi;
-        if (((x_136 <= x_126) && (x_134 <= x_129))) {
-        } else {
-          break;
-        }
-        int const x_143_save = x_136;
-        int const x_144 = data.arr[x_143_save];
-        int const x_145_save = x_134;
-        int const x_146 = data.arr[x_145_save];
-        int const x_132 = as_type<int>(as_type<int>((as_type<uint>(x_131) + as_type<uint>(as_type<int>(1)))));
-        if ((x_144 < x_146)) {
-          x_151 = as_type<int>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(as_type<int>(1)))));
-          int const x_152 = data.arr[x_143_save];
-          temp.arr[x_131] = x_152;
-          x_135_phi = x_134;
-          x_137_phi = x_151;
-        } else {
-          x_154 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
-          int const x_155 = data.arr[x_145_save];
-          temp.arr[x_131] = x_155;
-          x_135_phi = x_154;
-          x_137_phi = x_136;
-        }
-        int const x_135 = x_135_phi;
-        int const x_137 = x_137_phi;
-        {
-          x_131_phi = x_132;
-          x_134_phi = x_135;
-          x_136_phi = x_137;
-        }
-      }
-      x_158_phi = x_131;
-      x_161_phi = x_136;
-      while (true) {
-        int x_159 = 0;
-        int x_162 = 0;
-        int const x_158 = x_158_phi;
-        int const x_161 = x_161_phi;
-        if (((x_161 < 10) && (x_161 <= x_126))) {
-        } else {
-          break;
-        }
-        {
-          x_159 = as_type<int>((as_type<uint>(x_158) + as_type<uint>(1)));
-          x_162 = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
-          int const x_168 = data.arr[x_161];
-          temp.arr[x_158] = x_168;
-          x_158_phi = x_159;
-          x_161_phi = x_162;
-        }
-      }
-      x_171_phi = x_119;
-      while (true) {
-        int x_172 = 0;
-        int const x_171 = x_171_phi;
-        if ((x_171 <= x_129)) {
-        } else {
-          break;
-        }
-        {
-          int const x_177 = temp.arr[x_171];
-          data.arr[x_171] = x_177;
-          x_172 = as_type<int>((as_type<uint>(x_171) + as_type<uint>(1)));
-          x_171_phi = x_172;
-        }
-      }
-      {
-        x_119_phi = x_120;
-      }
-    }
-    {
-      x_113 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_112)));
-      x_112_phi = x_113;
-    }
-  }
-  int x_181 = 0;
-  float x_199 = 0.0f;
-  float x_261 = 0.0f;
-  float x_262_phi = 0.0f;
-  float const x_180 = (*(tint_symbol_4)).y;
-  x_181 = int(x_180);
-  if ((x_181 < 30)) {
-    int const x_187 = data.arr[0];
-    x_190 = (0.5f + (float(x_187) * 0.100000001f));
-    x_263_phi = x_190;
-  } else {
-    float x_208 = 0.0f;
-    float x_260 = 0.0f;
-    float x_261_phi = 0.0f;
-    if ((x_181 < 60)) {
-      int const x_196 = data.arr[1];
-      x_199 = (0.5f + (float(x_196) * 0.100000001f));
-      x_262_phi = x_199;
-    } else {
-      float x_217 = 0.0f;
-      float x_259 = 0.0f;
-      float x_260_phi = 0.0f;
-      if ((x_181 < 90)) {
-        int const x_205 = data.arr[2];
-        x_208 = (0.5f + (float(x_205) * 0.100000001f));
-        x_261_phi = x_208;
-      } else {
-        if ((x_181 < 120)) {
-          int const x_214 = data.arr[3];
-          x_217 = (0.5f + (float(x_214) * 0.100000001f));
-          x_260_phi = x_217;
-        } else {
-          float x_230 = 0.0f;
-          float x_258 = 0.0f;
-          float x_259_phi = 0.0f;
-          if ((x_181 < 150)) {
-            discard_fragment();
-          } else {
-            float x_239 = 0.0f;
-            float x_257 = 0.0f;
-            float x_258_phi = 0.0f;
-            if ((x_181 < 180)) {
-              int const x_227 = data.arr[5];
-              x_230 = (0.5f + (float(x_227) * 0.100000001f));
-              x_259_phi = x_230;
-            } else {
-              float x_248 = 0.0f;
-              float x_256 = 0.0f;
-              float x_257_phi = 0.0f;
-              if ((x_181 < 210)) {
-                int const x_236 = data.arr[6];
-                x_239 = (0.5f + (float(x_236) * 0.100000001f));
-                x_258_phi = x_239;
-              } else {
-                if ((x_181 < 240)) {
-                  int const x_245 = data.arr[7];
-                  x_248 = (0.5f + (float(x_245) * 0.100000001f));
-                  x_257_phi = x_248;
-                } else {
-                  if ((x_181 < 270)) {
-                  } else {
-                    discard_fragment();
-                  }
-                  int const x_253 = data.arr[8];
-                  x_256 = (0.5f + (float(x_253) * 0.100000001f));
-                  x_257_phi = x_256;
-                }
-                x_257 = x_257_phi;
-                x_258_phi = x_257;
-              }
-              x_258 = x_258_phi;
-              x_259_phi = x_258;
-            }
-            x_259 = x_259_phi;
-          }
-          x_260_phi = x_259;
-        }
-        x_260 = x_260_phi;
-        x_261_phi = x_260;
-      }
-      x_261 = x_261_phi;
-      x_262_phi = x_261;
-    }
-    x_262 = x_262_phi;
-    x_263_phi = x_262;
-  }
-  float const x_263 = x_263_phi;
-  *(tint_symbol_5) = float4(x_263, x_263, x_263, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.spvasm
deleted file mode 100644
index 09fcfae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,734 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 421
-; Schema: 0
-               OpCapability Shader
-        %166 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %temp "temp"
-               OpName %data "data"
-               OpName %x_190 "x_190"
-               OpName %x_262 "x_262"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_112_phi "x_112_phi"
-               OpName %x_263_phi "x_263_phi"
-               OpName %x_100 "x_100"
-               OpName %x_98 "x_98"
-               OpName %x_96 "x_96"
-               OpName %x_94 "x_94"
-               OpName %x_92 "x_92"
-               OpName %x_90 "x_90"
-               OpName %x_88 "x_88"
-               OpName %x_86 "x_86"
-               OpName %x_84 "x_84"
-               OpName %x_82 "x_82"
-               OpName %x_64_phi "x_64_phi"
-               OpName %x_104 "x_104"
-               OpName %x_113 "x_113"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_131 "x_131"
-               OpName %x_136 "x_136"
-               OpName %x_131_phi "x_131_phi"
-               OpName %x_134_phi "x_134_phi"
-               OpName %x_136_phi "x_136_phi"
-               OpName %x_158_phi "x_158_phi"
-               OpName %x_161_phi "x_161_phi"
-               OpName %x_171_phi "x_171_phi"
-               OpName %x_151 "x_151"
-               OpName %x_154 "x_154"
-               OpName %x_135_phi "x_135_phi"
-               OpName %x_137_phi "x_137_phi"
-               OpName %x_159 "x_159"
-               OpName %x_162 "x_162"
-               OpName %x_172 "x_172"
-               OpName %x_181 "x_181"
-               OpName %x_199 "x_199"
-               OpName %x_261 "x_261"
-               OpName %x_262_phi "x_262_phi"
-               OpName %x_208 "x_208"
-               OpName %x_260 "x_260"
-               OpName %x_261_phi "x_261_phi"
-               OpName %x_217 "x_217"
-               OpName %x_259 "x_259"
-               OpName %x_260_phi "x_260_phi"
-               OpName %x_230 "x_230"
-               OpName %x_258 "x_258"
-               OpName %x_259_phi "x_259_phi"
-               OpName %x_239 "x_239"
-               OpName %x_257 "x_257"
-               OpName %x_258_phi "x_258_phi"
-               OpName %x_248 "x_248"
-               OpName %x_256 "x_256"
-               OpName %x_257_phi "x_257_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %25 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_0 = OpConstant %int 0
-         %60 = OpConstantComposite %_arr_int_uint_10 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-      %int_1 = OpConstant %int 1
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-%float_0_100000001 = OpConstant %float 0.100000001
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %408 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %temp = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-       %data = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-      %x_190 = OpVariable %_ptr_Function_float Function %29
-      %x_262 = OpVariable %_ptr_Function_float Function %29
-   %x_63_phi = OpVariable %_ptr_Function_int Function %33
-  %x_103_phi = OpVariable %_ptr_Function_int Function %33
-  %x_112_phi = OpVariable %_ptr_Function_int Function %33
-  %x_263_phi = OpVariable %_ptr_Function_float Function %29
-      %x_100 = OpVariable %_ptr_Function_int Function %33
-       %x_98 = OpVariable %_ptr_Function_int Function %33
-       %x_96 = OpVariable %_ptr_Function_int Function %33
-       %x_94 = OpVariable %_ptr_Function_int Function %33
-       %x_92 = OpVariable %_ptr_Function_int Function %33
-       %x_90 = OpVariable %_ptr_Function_int Function %33
-       %x_88 = OpVariable %_ptr_Function_int Function %33
-       %x_86 = OpVariable %_ptr_Function_int Function %33
-       %x_84 = OpVariable %_ptr_Function_int Function %33
-       %x_82 = OpVariable %_ptr_Function_int Function %33
-   %x_64_phi = OpVariable %_ptr_Function_int Function %33
-      %x_104 = OpVariable %_ptr_Function_int Function %33
-      %x_113 = OpVariable %_ptr_Function_int Function %33
-  %x_119_phi = OpVariable %_ptr_Function_int Function %33
-      %x_131 = OpVariable %_ptr_Function_int Function %33
-      %x_136 = OpVariable %_ptr_Function_int Function %33
-  %x_131_phi = OpVariable %_ptr_Function_int Function %33
-  %x_134_phi = OpVariable %_ptr_Function_int Function %33
-  %x_136_phi = OpVariable %_ptr_Function_int Function %33
-  %x_158_phi = OpVariable %_ptr_Function_int Function %33
-  %x_161_phi = OpVariable %_ptr_Function_int Function %33
-  %x_171_phi = OpVariable %_ptr_Function_int Function %33
-      %x_151 = OpVariable %_ptr_Function_int Function %33
-      %x_154 = OpVariable %_ptr_Function_int Function %33
-  %x_135_phi = OpVariable %_ptr_Function_int Function %33
-  %x_137_phi = OpVariable %_ptr_Function_int Function %33
-      %x_159 = OpVariable %_ptr_Function_int Function %33
-      %x_162 = OpVariable %_ptr_Function_int Function %33
-      %x_172 = OpVariable %_ptr_Function_int Function %33
-      %x_181 = OpVariable %_ptr_Function_int Function %33
-      %x_199 = OpVariable %_ptr_Function_float Function %29
-      %x_261 = OpVariable %_ptr_Function_float Function %29
-  %x_262_phi = OpVariable %_ptr_Function_float Function %29
-      %x_208 = OpVariable %_ptr_Function_float Function %29
-      %x_260 = OpVariable %_ptr_Function_float Function %29
-  %x_261_phi = OpVariable %_ptr_Function_float Function %29
-      %x_217 = OpVariable %_ptr_Function_float Function %29
-      %x_259 = OpVariable %_ptr_Function_float Function %29
-  %x_260_phi = OpVariable %_ptr_Function_float Function %29
-      %x_230 = OpVariable %_ptr_Function_float Function %29
-      %x_258 = OpVariable %_ptr_Function_float Function %29
-  %x_259_phi = OpVariable %_ptr_Function_float Function %29
-      %x_239 = OpVariable %_ptr_Function_float Function %29
-      %x_257 = OpVariable %_ptr_Function_float Function %29
-  %x_258_phi = OpVariable %_ptr_Function_float Function %29
-      %x_248 = OpVariable %_ptr_Function_float Function %29
-      %x_256 = OpVariable %_ptr_Function_float Function %29
-  %x_257_phi = OpVariable %_ptr_Function_float Function %29
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-               OpStore %x_63_phi %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %57 = OpLoad %int %x_63_phi
-         %58 = OpLoad %_arr_int_uint_10 %data
-               OpStore %data %60
-               OpStore %data %58
-         %62 = OpIAdd %int %57 %int_1
-               OpStore %x_64_phi %62
-               OpSelectionMerge %63 None
-               OpSwitch %57 %64 9 %65 8 %66 7 %67 6 %68 5 %69 4 %70 3 %71 2 %72 1 %73 0 %74
-         %65 = OpLabel
-         %75 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %75 %int_n5
-         %77 = OpIAdd %int %57 %int_1
-               OpStore %x_100 %77
-         %78 = OpLoad %int %x_100
-               OpStore %x_64_phi %78
-               OpBranch %63
-         %66 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %79 %int_n4
-         %81 = OpIAdd %int %57 %int_1
-               OpStore %x_98 %81
-         %82 = OpLoad %int %x_98
-               OpStore %x_64_phi %82
-               OpBranch %63
-         %67 = OpLabel
-         %83 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %83 %int_n3
-         %85 = OpIAdd %int %57 %int_1
-               OpStore %x_96 %85
-         %86 = OpLoad %int %x_96
-               OpStore %x_64_phi %86
-               OpBranch %63
-         %68 = OpLabel
-         %87 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %87 %int_n2
-         %89 = OpIAdd %int %57 %int_1
-               OpStore %x_94 %89
-         %90 = OpLoad %int %x_94
-               OpStore %x_64_phi %90
-               OpBranch %63
-         %69 = OpLabel
-         %91 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %91 %int_n1
-         %93 = OpIAdd %int %57 %int_1
-               OpStore %x_92 %93
-         %94 = OpLoad %int %x_92
-               OpStore %x_64_phi %94
-               OpBranch %63
-         %70 = OpLabel
-         %95 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %95 %int_0
-         %96 = OpIAdd %int %57 %int_1
-               OpStore %x_90 %96
-         %97 = OpLoad %int %x_90
-               OpStore %x_64_phi %97
-               OpBranch %63
-         %71 = OpLabel
-         %98 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %98 %int_1
-         %99 = OpIAdd %int %57 %int_1
-               OpStore %x_88 %99
-        %100 = OpLoad %int %x_88
-               OpStore %x_64_phi %100
-               OpBranch %63
-         %72 = OpLabel
-        %101 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %101 %int_2
-        %103 = OpIAdd %int %57 %int_1
-               OpStore %x_86 %103
-        %104 = OpLoad %int %x_86
-               OpStore %x_64_phi %104
-               OpBranch %63
-         %73 = OpLabel
-        %105 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %105 %int_3
-        %107 = OpIAdd %int %57 %int_1
-               OpStore %x_84 %107
-        %108 = OpLoad %int %x_84
-               OpStore %x_64_phi %108
-               OpBranch %63
-         %74 = OpLabel
-        %109 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %109 %int_4
-        %111 = OpIAdd %int %57 %int_1
-               OpStore %x_82 %111
-        %112 = OpLoad %int %x_82
-               OpStore %x_64_phi %112
-               OpBranch %63
-         %64 = OpLabel
-               OpBranch %63
-         %63 = OpLabel
-        %113 = OpLoad %int %x_64_phi
-               OpBranch %44
-         %44 = OpLabel
-               OpStore %x_63_phi %113
-        %115 = OpSLessThan %bool %113 %int_10
-               OpBranchConditional %115 %42 %43
-         %43 = OpLabel
-               OpStore %x_103_phi %int_0
-               OpBranch %117
-        %117 = OpLabel
-               OpLoopMerge %118 %119 None
-               OpBranch %120
-        %120 = OpLabel
-        %122 = OpLoad %int %x_103_phi
-        %123 = OpSLessThan %bool %122 %int_10
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %126
-        %125 = OpLabel
-               OpBranch %124
-        %126 = OpLabel
-               OpBranch %118
-        %124 = OpLabel
-               OpBranch %119
-        %119 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %data %122
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Function_int %temp %122
-               OpStore %129 %128
-        %130 = OpIAdd %int %122 %int_1
-               OpStore %x_104 %130
-        %131 = OpLoad %int %x_104
-               OpStore %x_103_phi %131
-               OpBranch %117
-        %118 = OpLabel
-               OpStore %x_112_phi %int_1
-               OpBranch %132
-        %132 = OpLabel
-               OpLoopMerge %133 %134 None
-               OpBranch %135
-        %135 = OpLabel
-        %138 = OpLoad %int %x_112_phi
-        %140 = OpSLessThanEqual %bool %138 %int_9
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %143
-        %142 = OpLabel
-               OpBranch %141
-        %143 = OpLabel
-               OpBranch %133
-        %141 = OpLabel
-               OpStore %x_119_phi %int_0
-               OpBranch %144
-        %144 = OpLabel
-               OpLoopMerge %145 %146 None
-               OpBranch %147
-        %147 = OpLabel
-        %156 = OpLoad %int %x_119_phi
-        %157 = OpSLessThan %bool %156 %int_9
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %160
-        %159 = OpLabel
-               OpBranch %158
-        %160 = OpLabel
-               OpBranch %145
-        %158 = OpLabel
-        %161 = OpIAdd %int %156 %138
-        %162 = OpISub %int %161 %int_1
-        %163 = OpIMul %int %int_2 %138
-        %164 = OpIAdd %int %156 %163
-        %167 = OpISub %int %164 %int_1
-        %165 = OpExtInst %int %166 SMin %167 %int_9
-               OpStore %x_131_phi %156
-               OpStore %x_134_phi %161
-               OpStore %x_136_phi %156
-               OpBranch %168
-        %168 = OpLabel
-               OpLoopMerge %169 %170 None
-               OpBranch %171
-        %171 = OpLabel
-        %176 = OpLoad %int %x_131_phi
-               OpStore %x_131 %176
-        %177 = OpLoad %int %x_134_phi
-        %178 = OpLoad %int %x_136_phi
-               OpStore %x_136 %178
-        %179 = OpLoad %int %x_136
-        %180 = OpSLessThanEqual %bool %179 %162
-               OpSelectionMerge %181 None
-               OpBranchConditional %180 %182 %181
-        %182 = OpLabel
-        %183 = OpSLessThanEqual %bool %177 %165
-               OpBranch %181
-        %181 = OpLabel
-        %184 = OpPhi %bool %180 %171 %183 %182
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %187
-        %186 = OpLabel
-               OpBranch %185
-        %187 = OpLabel
-               OpBranch %169
-        %185 = OpLabel
-        %188 = OpLoad %int %x_136
-        %189 = OpAccessChain %_ptr_Function_int %data %188
-        %190 = OpLoad %int %189
-        %191 = OpAccessChain %_ptr_Function_int %data %177
-        %192 = OpLoad %int %191
-        %194 = OpLoad %int %x_131
-        %195 = OpCopyObject %int %int_1
-        %196 = OpIAdd %int %194 %195
-        %193 = OpCopyObject %int %196
-        %197 = OpSLessThan %bool %190 %192
-               OpSelectionMerge %198 None
-               OpBranchConditional %197 %199 %200
-        %199 = OpLabel
-        %202 = OpLoad %int %x_136
-        %203 = OpCopyObject %int %int_1
-        %204 = OpIAdd %int %202 %203
-        %201 = OpCopyObject %int %204
-               OpStore %x_151 %201
-        %205 = OpAccessChain %_ptr_Function_int %data %188
-        %206 = OpLoad %int %205
-        %207 = OpLoad %int %x_131
-        %208 = OpAccessChain %_ptr_Function_int %temp %207
-               OpStore %208 %206
-               OpStore %x_135_phi %177
-        %209 = OpLoad %int %x_151
-               OpStore %x_137_phi %209
-               OpBranch %198
-        %200 = OpLabel
-        %210 = OpIAdd %int %177 %int_1
-               OpStore %x_154 %210
-        %211 = OpAccessChain %_ptr_Function_int %data %177
-        %212 = OpLoad %int %211
-        %213 = OpLoad %int %x_131
-        %214 = OpAccessChain %_ptr_Function_int %temp %213
-               OpStore %214 %212
-        %215 = OpLoad %int %x_154
-               OpStore %x_135_phi %215
-        %216 = OpLoad %int %x_136
-               OpStore %x_137_phi %216
-               OpBranch %198
-        %198 = OpLabel
-        %217 = OpLoad %int %x_135_phi
-        %218 = OpLoad %int %x_137_phi
-               OpBranch %170
-        %170 = OpLabel
-               OpStore %x_131_phi %193
-               OpStore %x_134_phi %217
-               OpStore %x_136_phi %218
-               OpBranch %168
-        %169 = OpLabel
-        %219 = OpLoad %int %x_131
-               OpStore %x_158_phi %219
-        %220 = OpLoad %int %x_136
-               OpStore %x_161_phi %220
-               OpBranch %221
-        %221 = OpLabel
-               OpLoopMerge %222 %223 None
-               OpBranch %224
-        %224 = OpLabel
-        %227 = OpLoad %int %x_158_phi
-        %228 = OpLoad %int %x_161_phi
-        %229 = OpSLessThan %bool %228 %int_10
-               OpSelectionMerge %230 None
-               OpBranchConditional %229 %231 %230
-        %231 = OpLabel
-        %232 = OpSLessThanEqual %bool %228 %162
-               OpBranch %230
-        %230 = OpLabel
-        %233 = OpPhi %bool %229 %224 %232 %231
-               OpSelectionMerge %234 None
-               OpBranchConditional %233 %235 %236
-        %235 = OpLabel
-               OpBranch %234
-        %236 = OpLabel
-               OpBranch %222
-        %234 = OpLabel
-               OpBranch %223
-        %223 = OpLabel
-        %237 = OpIAdd %int %227 %int_1
-               OpStore %x_159 %237
-        %238 = OpIAdd %int %228 %int_1
-               OpStore %x_162 %238
-        %239 = OpAccessChain %_ptr_Function_int %data %228
-        %240 = OpLoad %int %239
-        %241 = OpAccessChain %_ptr_Function_int %temp %227
-               OpStore %241 %240
-        %242 = OpLoad %int %x_159
-               OpStore %x_158_phi %242
-        %243 = OpLoad %int %x_162
-               OpStore %x_161_phi %243
-               OpBranch %221
-        %222 = OpLabel
-               OpStore %x_171_phi %156
-               OpBranch %244
-        %244 = OpLabel
-               OpLoopMerge %245 %246 None
-               OpBranch %247
-        %247 = OpLabel
-        %249 = OpLoad %int %x_171_phi
-        %250 = OpSLessThanEqual %bool %249 %165
-               OpSelectionMerge %251 None
-               OpBranchConditional %250 %252 %253
-        %252 = OpLabel
-               OpBranch %251
-        %253 = OpLabel
-               OpBranch %245
-        %251 = OpLabel
-               OpBranch %246
-        %246 = OpLabel
-        %254 = OpAccessChain %_ptr_Function_int %temp %249
-        %255 = OpLoad %int %254
-        %256 = OpAccessChain %_ptr_Function_int %data %249
-               OpStore %256 %255
-        %257 = OpIAdd %int %249 %int_1
-               OpStore %x_172 %257
-        %258 = OpLoad %int %x_172
-               OpStore %x_171_phi %258
-               OpBranch %244
-        %245 = OpLabel
-               OpBranch %146
-        %146 = OpLabel
-               OpStore %x_119_phi %164
-               OpBranch %144
-        %145 = OpLabel
-               OpBranch %134
-        %134 = OpLabel
-        %259 = OpIMul %int %int_2 %138
-               OpStore %x_113 %259
-        %260 = OpLoad %int %x_113
-               OpStore %x_112_phi %260
-               OpBranch %132
-        %133 = OpLabel
-        %267 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %268 = OpLoad %float %267
-        %269 = OpConvertFToS %int %268
-               OpStore %x_181 %269
-        %270 = OpLoad %int %x_181
-        %272 = OpSLessThan %bool %270 %int_30
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %275
-        %274 = OpLabel
-        %276 = OpAccessChain %_ptr_Function_int %data %int_0
-        %277 = OpLoad %int %276
-        %279 = OpConvertSToF %float %277
-        %281 = OpFMul %float %279 %float_0_100000001
-        %282 = OpFAdd %float %float_0_5 %281
-               OpStore %x_190 %282
-        %283 = OpLoad %float %x_190
-               OpStore %x_263_phi %283
-               OpBranch %273
-        %275 = OpLabel
-        %287 = OpLoad %int %x_181
-        %289 = OpSLessThan %bool %287 %int_60
-               OpSelectionMerge %290 None
-               OpBranchConditional %289 %291 %292
-        %291 = OpLabel
-        %293 = OpAccessChain %_ptr_Function_int %data %int_1
-        %294 = OpLoad %int %293
-        %295 = OpConvertSToF %float %294
-        %296 = OpFMul %float %295 %float_0_100000001
-        %297 = OpFAdd %float %float_0_5 %296
-               OpStore %x_199 %297
-        %298 = OpLoad %float %x_199
-               OpStore %x_262_phi %298
-               OpBranch %290
-        %292 = OpLabel
-        %302 = OpLoad %int %x_181
-        %304 = OpSLessThan %bool %302 %int_90
-               OpSelectionMerge %305 None
-               OpBranchConditional %304 %306 %307
-        %306 = OpLabel
-        %308 = OpAccessChain %_ptr_Function_int %data %int_2
-        %309 = OpLoad %int %308
-        %310 = OpConvertSToF %float %309
-        %311 = OpFMul %float %310 %float_0_100000001
-        %312 = OpFAdd %float %float_0_5 %311
-               OpStore %x_208 %312
-        %313 = OpLoad %float %x_208
-               OpStore %x_261_phi %313
-               OpBranch %305
-        %307 = OpLabel
-        %314 = OpLoad %int %x_181
-        %316 = OpSLessThan %bool %314 %int_120
-               OpSelectionMerge %317 None
-               OpBranchConditional %316 %318 %319
-        %318 = OpLabel
-        %320 = OpAccessChain %_ptr_Function_int %data %int_3
-        %321 = OpLoad %int %320
-        %322 = OpConvertSToF %float %321
-        %323 = OpFMul %float %322 %float_0_100000001
-        %324 = OpFAdd %float %float_0_5 %323
-               OpStore %x_217 %324
-        %325 = OpLoad %float %x_217
-               OpStore %x_260_phi %325
-               OpBranch %317
-        %319 = OpLabel
-        %329 = OpLoad %int %x_181
-        %331 = OpSLessThan %bool %329 %int_150
-               OpSelectionMerge %332 None
-               OpBranchConditional %331 %333 %334
-        %333 = OpLabel
-               OpKill
-        %334 = OpLabel
-        %338 = OpLoad %int %x_181
-        %340 = OpSLessThan %bool %338 %int_180
-               OpSelectionMerge %341 None
-               OpBranchConditional %340 %342 %343
-        %342 = OpLabel
-        %345 = OpAccessChain %_ptr_Function_int %data %int_5
-        %346 = OpLoad %int %345
-        %347 = OpConvertSToF %float %346
-        %348 = OpFMul %float %347 %float_0_100000001
-        %349 = OpFAdd %float %float_0_5 %348
-               OpStore %x_230 %349
-        %350 = OpLoad %float %x_230
-               OpStore %x_259_phi %350
-               OpBranch %341
-        %343 = OpLabel
-        %354 = OpLoad %int %x_181
-        %356 = OpSLessThan %bool %354 %int_210
-               OpSelectionMerge %357 None
-               OpBranchConditional %356 %358 %359
-        %358 = OpLabel
-        %361 = OpAccessChain %_ptr_Function_int %data %int_6
-        %362 = OpLoad %int %361
-        %363 = OpConvertSToF %float %362
-        %364 = OpFMul %float %363 %float_0_100000001
-        %365 = OpFAdd %float %float_0_5 %364
-               OpStore %x_239 %365
-        %366 = OpLoad %float %x_239
-               OpStore %x_258_phi %366
-               OpBranch %357
-        %359 = OpLabel
-        %367 = OpLoad %int %x_181
-        %369 = OpSLessThan %bool %367 %int_240
-               OpSelectionMerge %370 None
-               OpBranchConditional %369 %371 %372
-        %371 = OpLabel
-        %374 = OpAccessChain %_ptr_Function_int %data %int_7
-        %375 = OpLoad %int %374
-        %376 = OpConvertSToF %float %375
-        %377 = OpFMul %float %376 %float_0_100000001
-        %378 = OpFAdd %float %float_0_5 %377
-               OpStore %x_248 %378
-        %379 = OpLoad %float %x_248
-               OpStore %x_257_phi %379
-               OpBranch %370
-        %372 = OpLabel
-        %380 = OpLoad %int %x_181
-        %382 = OpSLessThan %bool %380 %int_270
-               OpSelectionMerge %383 None
-               OpBranchConditional %382 %384 %385
-        %384 = OpLabel
-               OpBranch %383
-        %385 = OpLabel
-               OpKill
-        %383 = OpLabel
-        %387 = OpAccessChain %_ptr_Function_int %data %int_8
-        %388 = OpLoad %int %387
-        %389 = OpConvertSToF %float %388
-        %390 = OpFMul %float %389 %float_0_100000001
-        %391 = OpFAdd %float %float_0_5 %390
-               OpStore %x_256 %391
-        %392 = OpLoad %float %x_256
-               OpStore %x_257_phi %392
-               OpBranch %370
-        %370 = OpLabel
-        %393 = OpLoad %float %x_257_phi
-               OpStore %x_257 %393
-        %394 = OpLoad %float %x_257
-               OpStore %x_258_phi %394
-               OpBranch %357
-        %357 = OpLabel
-        %395 = OpLoad %float %x_258_phi
-               OpStore %x_258 %395
-        %396 = OpLoad %float %x_258
-               OpStore %x_259_phi %396
-               OpBranch %341
-        %341 = OpLabel
-        %397 = OpLoad %float %x_259_phi
-               OpStore %x_259 %397
-               OpBranch %332
-        %332 = OpLabel
-        %398 = OpLoad %float %x_259
-               OpStore %x_260_phi %398
-               OpBranch %317
-        %317 = OpLabel
-        %399 = OpLoad %float %x_260_phi
-               OpStore %x_260 %399
-        %400 = OpLoad %float %x_260
-               OpStore %x_261_phi %400
-               OpBranch %305
-        %305 = OpLabel
-        %401 = OpLoad %float %x_261_phi
-               OpStore %x_261 %401
-        %402 = OpLoad %float %x_261
-               OpStore %x_262_phi %402
-               OpBranch %290
-        %290 = OpLabel
-        %403 = OpLoad %float %x_262_phi
-               OpStore %x_262 %403
-        %404 = OpLoad %float %x_262
-               OpStore %x_263_phi %404
-               OpBranch %273
-        %273 = OpLabel
-        %405 = OpLoad %float %x_263_phi
-        %407 = OpCompositeConstruct %v4float %405 %405 %405 %float_1
-               OpStore %x_GLF_color %407
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %408
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %412 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %413 = OpFunctionCall %void %main_1
-        %414 = OpLoad %v4float %x_GLF_color
-        %415 = OpCompositeConstruct %main_out %414
-               OpReturnValue %415
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %417 = OpLabel
-        %419 = OpLoad %v4float %gl_FragCoord_param_1
-        %418 = OpFunctionCall %main_out %main_inner %419
-        %420 = OpCompositeExtract %v4float %418 0
-               OpStore %x_GLF_color_1_1 %420
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.wgsl
deleted file mode 100644
index fc4bfa1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,341 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var temp : array<i32, 10>;
-  var data : array<i32, 10>;
-  var x_190 : f32;
-  var x_262 : f32;
-  var x_63_phi : i32;
-  var x_103_phi : i32;
-  var x_112_phi : i32;
-  var x_263_phi : f32;
-  let x_60 : f32 = x_8.injectionSwitch.x;
-  let x_61 : i32 = i32(x_60);
-  x_63_phi = x_61;
-  loop {
-    var x_100 : i32;
-    var x_98 : i32;
-    var x_96 : i32;
-    var x_94 : i32;
-    var x_92 : i32;
-    var x_90 : i32;
-    var x_88 : i32;
-    var x_86 : i32;
-    var x_84 : i32;
-    var x_82 : i32;
-    var x_64_phi : i32;
-    let x_63 : i32 = x_63_phi;
-    let x_68 : array<i32, 10> = data;
-    data = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-    data = x_68;
-    let x_69 : i32 = (x_63 + 1);
-    x_64_phi = x_69;
-    switch(x_63) {
-      case 9: {
-        data[x_63] = -5;
-        x_100 = (x_63 + 1);
-        x_64_phi = x_100;
-      }
-      case 8: {
-        data[x_63] = -4;
-        x_98 = (x_63 + 1);
-        x_64_phi = x_98;
-      }
-      case 7: {
-        data[x_63] = -3;
-        x_96 = (x_63 + 1);
-        x_64_phi = x_96;
-      }
-      case 6: {
-        data[x_63] = -2;
-        x_94 = (x_63 + 1);
-        x_64_phi = x_94;
-      }
-      case 5: {
-        data[x_63] = -1;
-        x_92 = (x_63 + 1);
-        x_64_phi = x_92;
-      }
-      case 4: {
-        data[x_63] = 0;
-        x_90 = (x_63 + 1);
-        x_64_phi = x_90;
-      }
-      case 3: {
-        data[x_63] = 1;
-        x_88 = (x_63 + 1);
-        x_64_phi = x_88;
-      }
-      case 2: {
-        data[x_63] = 2;
-        x_86 = (x_63 + 1);
-        x_64_phi = x_86;
-      }
-      case 1: {
-        data[x_63] = 3;
-        x_84 = (x_63 + 1);
-        x_64_phi = x_84;
-      }
-      case 0: {
-        data[x_63] = 4;
-        x_82 = (x_63 + 1);
-        x_64_phi = x_82;
-      }
-      default: {
-      }
-    }
-    let x_64 : i32 = x_64_phi;
-
-    continuing {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_103_phi = 0;
-  loop {
-    var x_104 : i32;
-    let x_103 : i32 = x_103_phi;
-    if ((x_103 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_109 : i32 = data[x_103];
-      temp[x_103] = x_109;
-      x_104 = (x_103 + 1);
-      x_103_phi = x_104;
-    }
-  }
-  x_112_phi = 1;
-  loop {
-    var x_113 : i32;
-    var x_119_phi : i32;
-    let x_112 : i32 = x_112_phi;
-    if ((x_112 <= 9)) {
-    } else {
-      break;
-    }
-    x_119_phi = 0;
-    loop {
-      var x_131 : i32;
-      var x_136 : i32;
-      var x_131_phi : i32;
-      var x_134_phi : i32;
-      var x_136_phi : i32;
-      var x_158_phi : i32;
-      var x_161_phi : i32;
-      var x_171_phi : i32;
-      let x_119 : i32 = x_119_phi;
-      if ((x_119 < 9)) {
-      } else {
-        break;
-      }
-      let x_125 : i32 = (x_119 + x_112);
-      let x_126 : i32 = (x_125 - 1);
-      let x_120 : i32 = (x_119 + (2 * x_112));
-      let x_129 : i32 = min((x_120 - 1), 9);
-      x_131_phi = x_119;
-      x_134_phi = x_125;
-      x_136_phi = x_119;
-      loop {
-        var x_151 : i32;
-        var x_154 : i32;
-        var x_135_phi : i32;
-        var x_137_phi : i32;
-        x_131 = x_131_phi;
-        let x_134 : i32 = x_134_phi;
-        x_136 = x_136_phi;
-        if (((x_136 <= x_126) && (x_134 <= x_129))) {
-        } else {
-          break;
-        }
-        let x_143 : ptr<function, i32> = &(data[x_136]);
-        let x_144 : i32 = *(x_143);
-        let x_145 : ptr<function, i32> = &(data[x_134]);
-        let x_146 : i32 = *(x_145);
-        let x_132 : i32 = bitcast<i32>((x_131 + bitcast<i32>(1)));
-        if ((x_144 < x_146)) {
-          x_151 = bitcast<i32>((x_136 + bitcast<i32>(1)));
-          let x_152 : i32 = *(x_143);
-          temp[x_131] = x_152;
-          x_135_phi = x_134;
-          x_137_phi = x_151;
-        } else {
-          x_154 = (x_134 + 1);
-          let x_155 : i32 = *(x_145);
-          temp[x_131] = x_155;
-          x_135_phi = x_154;
-          x_137_phi = x_136;
-        }
-        let x_135 : i32 = x_135_phi;
-        let x_137 : i32 = x_137_phi;
-
-        continuing {
-          x_131_phi = x_132;
-          x_134_phi = x_135;
-          x_136_phi = x_137;
-        }
-      }
-      x_158_phi = x_131;
-      x_161_phi = x_136;
-      loop {
-        var x_159 : i32;
-        var x_162 : i32;
-        let x_158 : i32 = x_158_phi;
-        let x_161 : i32 = x_161_phi;
-        if (((x_161 < 10) && (x_161 <= x_126))) {
-        } else {
-          break;
-        }
-
-        continuing {
-          x_159 = (x_158 + 1);
-          x_162 = (x_161 + 1);
-          let x_168 : i32 = data[x_161];
-          temp[x_158] = x_168;
-          x_158_phi = x_159;
-          x_161_phi = x_162;
-        }
-      }
-      x_171_phi = x_119;
-      loop {
-        var x_172 : i32;
-        let x_171 : i32 = x_171_phi;
-        if ((x_171 <= x_129)) {
-        } else {
-          break;
-        }
-
-        continuing {
-          let x_177 : i32 = temp[x_171];
-          data[x_171] = x_177;
-          x_172 = (x_171 + 1);
-          x_171_phi = x_172;
-        }
-      }
-
-      continuing {
-        x_119_phi = x_120;
-      }
-    }
-
-    continuing {
-      x_113 = (2 * x_112);
-      x_112_phi = x_113;
-    }
-  }
-  var x_181 : i32;
-  var x_199 : f32;
-  var x_261 : f32;
-  var x_262_phi : f32;
-  let x_180 : f32 = gl_FragCoord.y;
-  x_181 = i32(x_180);
-  if ((x_181 < 30)) {
-    let x_187 : i32 = data[0];
-    x_190 = (0.5 + (f32(x_187) * 0.100000001));
-    x_263_phi = x_190;
-  } else {
-    var x_208 : f32;
-    var x_260 : f32;
-    var x_261_phi : f32;
-    if ((x_181 < 60)) {
-      let x_196 : i32 = data[1];
-      x_199 = (0.5 + (f32(x_196) * 0.100000001));
-      x_262_phi = x_199;
-    } else {
-      var x_217 : f32;
-      var x_259 : f32;
-      var x_260_phi : f32;
-      if ((x_181 < 90)) {
-        let x_205 : i32 = data[2];
-        x_208 = (0.5 + (f32(x_205) * 0.100000001));
-        x_261_phi = x_208;
-      } else {
-        if ((x_181 < 120)) {
-          let x_214 : i32 = data[3];
-          x_217 = (0.5 + (f32(x_214) * 0.100000001));
-          x_260_phi = x_217;
-        } else {
-          var x_230 : f32;
-          var x_258 : f32;
-          var x_259_phi : f32;
-          if ((x_181 < 150)) {
-            discard;
-          } else {
-            var x_239 : f32;
-            var x_257 : f32;
-            var x_258_phi : f32;
-            if ((x_181 < 180)) {
-              let x_227 : i32 = data[5];
-              x_230 = (0.5 + (f32(x_227) * 0.100000001));
-              x_259_phi = x_230;
-            } else {
-              var x_248 : f32;
-              var x_256 : f32;
-              var x_257_phi : f32;
-              if ((x_181 < 210)) {
-                let x_236 : i32 = data[6];
-                x_239 = (0.5 + (f32(x_236) * 0.100000001));
-                x_258_phi = x_239;
-              } else {
-                if ((x_181 < 240)) {
-                  let x_245 : i32 = data[7];
-                  x_248 = (0.5 + (f32(x_245) * 0.100000001));
-                  x_257_phi = x_248;
-                } else {
-                  if ((x_181 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  let x_253 : i32 = data[8];
-                  x_256 = (0.5 + (f32(x_253) * 0.100000001));
-                  x_257_phi = x_256;
-                }
-                x_257 = x_257_phi;
-                x_258_phi = x_257;
-              }
-              x_258 = x_258_phi;
-              x_259_phi = x_258;
-            }
-            x_259 = x_259_phi;
-          }
-          x_260_phi = x_259;
-        }
-        x_260 = x_260_phi;
-        x_261_phi = x_260;
-      }
-      x_261 = x_261_phi;
-      x_262_phi = x_261;
-    }
-    x_262 = x_262_phi;
-    x_263_phi = x_262;
-  }
-  let x_263 : f32 = x_263_phi;
-  x_GLF_color = vec4<f32>(x_263, x_263, x_263, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.hlsl
deleted file mode 100644
index 8ea7a19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,349 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int temp[10] = (int[10])0;
-  int data[10] = (int[10])0;
-  float x_189 = 0.0f;
-  float x_261 = 0.0f;
-  int x_63_phi = 0;
-  int x_102_phi = 0;
-  int x_111_phi = 0;
-  float x_262_phi = 0.0f;
-  const float x_60 = asfloat(x_8[0].x);
-  const int x_61 = int(x_60);
-  x_63_phi = x_61;
-  while (true) {
-    int x_99 = 0;
-    int x_97 = 0;
-    int x_95 = 0;
-    int x_93 = 0;
-    int x_91 = 0;
-    int x_89 = 0;
-    int x_87 = 0;
-    int x_85 = 0;
-    int x_83 = 0;
-    int x_81 = 0;
-    int x_64_phi = 0;
-    const int x_63 = x_63_phi;
-    const int x_68 = (x_63 + 1);
-    x_64_phi = x_68;
-    switch(x_63) {
-      case 9: {
-        data[x_63] = -5;
-        x_99 = (x_63 + 1);
-        x_64_phi = x_99;
-        break;
-      }
-      case 8: {
-        data[x_63] = -4;
-        x_97 = (x_63 + 1);
-        x_64_phi = x_97;
-        break;
-      }
-      case 7: {
-        data[x_63] = -3;
-        x_95 = (x_63 + 1);
-        x_64_phi = x_95;
-        break;
-      }
-      case 6: {
-        data[x_63] = -2;
-        x_93 = (x_63 + 1);
-        x_64_phi = x_93;
-        break;
-      }
-      case 5: {
-        data[x_63] = -1;
-        x_91 = (x_63 + 1);
-        x_64_phi = x_91;
-        break;
-      }
-      case 4: {
-        data[x_63] = 0;
-        x_89 = (x_63 + 1);
-        x_64_phi = x_89;
-        break;
-      }
-      case 3: {
-        data[x_63] = 1;
-        x_87 = (x_63 + 1);
-        x_64_phi = x_87;
-        break;
-      }
-      case 2: {
-        data[x_63] = 2;
-        x_85 = (x_63 + 1);
-        x_64_phi = x_85;
-        break;
-      }
-      case 1: {
-        data[x_63] = 3;
-        x_83 = (x_63 + 1);
-        x_64_phi = x_83;
-        break;
-      }
-      case 0: {
-        data[x_63] = 4;
-        x_81 = (x_63 + 1);
-        x_64_phi = x_81;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    const int x_64 = x_64_phi;
-    {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_102_phi = 0;
-  while (true) {
-    int x_103 = 0;
-    const int x_102 = x_102_phi;
-    if ((x_102 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const int x_108 = data[x_102];
-      temp[x_102] = x_108;
-      x_103 = (x_102 + 1);
-      x_102_phi = x_103;
-    }
-  }
-  x_111_phi = 1;
-  while (true) {
-    int x_112 = 0;
-    int x_118_phi = 0;
-    const int x_111 = x_111_phi;
-    if ((x_111 <= 9)) {
-    } else {
-      break;
-    }
-    x_118_phi = 0;
-    while (true) {
-      int x_130 = 0;
-      int x_135 = 0;
-      int x_130_phi = 0;
-      int x_133_phi = 0;
-      int x_135_phi = 0;
-      int x_157_phi = 0;
-      int x_160_phi = 0;
-      int x_170_phi = 0;
-      const int x_118 = x_118_phi;
-      if ((x_118 < 9)) {
-      } else {
-        break;
-      }
-      const int x_124 = (x_118 + x_111);
-      const int x_125 = (x_124 - 1);
-      const int x_119 = (x_118 + (2 * x_111));
-      const int x_128 = min((x_119 - 1), 9);
-      x_130_phi = x_118;
-      x_133_phi = x_124;
-      x_135_phi = x_118;
-      while (true) {
-        int x_150 = 0;
-        int x_153 = 0;
-        int x_134_phi = 0;
-        int x_136_phi = 0;
-        x_130 = x_130_phi;
-        const int x_133 = x_133_phi;
-        x_135 = x_135_phi;
-        if (((x_135 <= x_125) & (x_133 <= x_128))) {
-        } else {
-          break;
-        }
-        const int x_142_save = x_135;
-        const int x_143 = data[x_142_save];
-        const int x_144_save = x_133;
-        const int x_145 = data[x_144_save];
-        const int x_131 = asint((x_130 + asint(1)));
-        if ((x_143 < x_145)) {
-          x_150 = asint((x_135 + asint(1)));
-          const int x_151 = data[x_142_save];
-          temp[x_130] = x_151;
-          x_134_phi = x_133;
-          x_136_phi = x_150;
-        } else {
-          x_153 = (x_133 + 1);
-          const int x_154 = data[x_144_save];
-          temp[x_130] = x_154;
-          x_134_phi = x_153;
-          x_136_phi = x_135;
-        }
-        const int x_134 = x_134_phi;
-        const int x_136 = x_136_phi;
-        {
-          x_130_phi = x_131;
-          x_133_phi = x_134;
-          x_135_phi = x_136;
-        }
-      }
-      x_157_phi = x_130;
-      x_160_phi = x_135;
-      while (true) {
-        int x_158 = 0;
-        int x_161 = 0;
-        const int x_157 = x_157_phi;
-        const int x_160 = x_160_phi;
-        if (((x_160 < 10) & (x_160 <= x_125))) {
-        } else {
-          break;
-        }
-        {
-          x_158 = (x_157 + 1);
-          x_161 = (x_160 + 1);
-          const int x_167 = data[x_160];
-          temp[x_157] = x_167;
-          x_157_phi = x_158;
-          x_160_phi = x_161;
-        }
-      }
-      x_170_phi = x_118;
-      while (true) {
-        int x_171 = 0;
-        const int x_170 = x_170_phi;
-        if ((x_170 <= x_128)) {
-        } else {
-          break;
-        }
-        {
-          const int x_176 = temp[x_170];
-          data[x_170] = x_176;
-          x_171 = (x_170 + 1);
-          x_170_phi = x_171;
-        }
-      }
-      {
-        x_118_phi = x_119;
-      }
-    }
-    {
-      x_112 = (2 * x_111);
-      x_111_phi = x_112;
-    }
-  }
-  int x_180 = 0;
-  float x_198 = 0.0f;
-  float x_260 = 0.0f;
-  float x_261_phi = 0.0f;
-  const float x_179 = gl_FragCoord.y;
-  x_180 = int(x_179);
-  if ((x_180 < 30)) {
-    const int x_186 = data[0];
-    x_189 = (0.5f + (float(x_186) * 0.100000001f));
-    x_262_phi = x_189;
-  } else {
-    float x_207 = 0.0f;
-    float x_259 = 0.0f;
-    float x_260_phi = 0.0f;
-    if ((x_180 < 60)) {
-      const int x_195 = data[1];
-      x_198 = (0.5f + (float(x_195) * 0.100000001f));
-      x_261_phi = x_198;
-    } else {
-      float x_216 = 0.0f;
-      float x_258 = 0.0f;
-      float x_259_phi = 0.0f;
-      if ((x_180 < 90)) {
-        const int x_204 = data[2];
-        x_207 = (0.5f + (float(x_204) * 0.100000001f));
-        x_260_phi = x_207;
-      } else {
-        if ((x_180 < 120)) {
-          const int x_213 = data[3];
-          x_216 = (0.5f + (float(x_213) * 0.100000001f));
-          x_259_phi = x_216;
-        } else {
-          float x_229 = 0.0f;
-          float x_257 = 0.0f;
-          float x_258_phi = 0.0f;
-          if ((x_180 < 150)) {
-            discard;
-          } else {
-            float x_238 = 0.0f;
-            float x_256 = 0.0f;
-            float x_257_phi = 0.0f;
-            if ((x_180 < 180)) {
-              const int x_226 = data[5];
-              x_229 = (0.5f + (float(x_226) * 0.100000001f));
-              x_258_phi = x_229;
-            } else {
-              float x_247 = 0.0f;
-              float x_255 = 0.0f;
-              float x_256_phi = 0.0f;
-              if ((x_180 < 210)) {
-                const int x_235 = data[6];
-                x_238 = (0.5f + (float(x_235) * 0.100000001f));
-                x_257_phi = x_238;
-              } else {
-                if ((x_180 < 240)) {
-                  const int x_244 = data[7];
-                  x_247 = (0.5f + (float(x_244) * 0.100000001f));
-                  x_256_phi = x_247;
-                } else {
-                  if ((x_180 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  const int x_252 = data[8];
-                  x_255 = (0.5f + (float(x_252) * 0.100000001f));
-                  x_256_phi = x_255;
-                }
-                x_256 = x_256_phi;
-                x_257_phi = x_256;
-              }
-              x_257 = x_257_phi;
-              x_258_phi = x_257;
-            }
-            x_258 = x_258_phi;
-          }
-          x_259_phi = x_258;
-        }
-        x_259 = x_259_phi;
-        x_260_phi = x_259;
-      }
-      x_260 = x_260_phi;
-      x_261_phi = x_260;
-    }
-    x_261 = x_261_phi;
-    x_262_phi = x_261;
-  }
-  const float x_262 = x_262_phi;
-  x_GLF_color = float4(x_262, x_262, x_262, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.msl
deleted file mode 100644
index 19683b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.msl
+++ /dev/null
@@ -1,352 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  tint_array_wrapper temp = {};
-  tint_array_wrapper data = {};
-  float x_189 = 0.0f;
-  float x_261 = 0.0f;
-  int x_63_phi = 0;
-  int x_102_phi = 0;
-  int x_111_phi = 0;
-  float x_262_phi = 0.0f;
-  float const x_60 = x_8.injectionSwitch.x;
-  int const x_61 = int(x_60);
-  x_63_phi = x_61;
-  while (true) {
-    int x_99 = 0;
-    int x_97 = 0;
-    int x_95 = 0;
-    int x_93 = 0;
-    int x_91 = 0;
-    int x_89 = 0;
-    int x_87 = 0;
-    int x_85 = 0;
-    int x_83 = 0;
-    int x_81 = 0;
-    int x_64_phi = 0;
-    int const x_63 = x_63_phi;
-    int const x_68 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-    x_64_phi = x_68;
-    switch(x_63) {
-      case 9: {
-        data.arr[x_63] = -5;
-        x_99 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_99;
-        break;
-      }
-      case 8: {
-        data.arr[x_63] = -4;
-        x_97 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_97;
-        break;
-      }
-      case 7: {
-        data.arr[x_63] = -3;
-        x_95 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_95;
-        break;
-      }
-      case 6: {
-        data.arr[x_63] = -2;
-        x_93 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_93;
-        break;
-      }
-      case 5: {
-        data.arr[x_63] = -1;
-        x_91 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_91;
-        break;
-      }
-      case 4: {
-        data.arr[x_63] = 0;
-        x_89 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_89;
-        break;
-      }
-      case 3: {
-        data.arr[x_63] = 1;
-        x_87 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_87;
-        break;
-      }
-      case 2: {
-        data.arr[x_63] = 2;
-        x_85 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_85;
-        break;
-      }
-      case 1: {
-        data.arr[x_63] = 3;
-        x_83 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_83;
-        break;
-      }
-      case 0: {
-        data.arr[x_63] = 4;
-        x_81 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_81;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_64 = x_64_phi;
-    {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_102_phi = 0;
-  while (true) {
-    int x_103 = 0;
-    int const x_102 = x_102_phi;
-    if ((x_102 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_108 = data.arr[x_102];
-      temp.arr[x_102] = x_108;
-      x_103 = as_type<int>((as_type<uint>(x_102) + as_type<uint>(1)));
-      x_102_phi = x_103;
-    }
-  }
-  x_111_phi = 1;
-  while (true) {
-    int x_112 = 0;
-    int x_118_phi = 0;
-    int const x_111 = x_111_phi;
-    if ((x_111 <= 9)) {
-    } else {
-      break;
-    }
-    x_118_phi = 0;
-    while (true) {
-      int x_130 = 0;
-      int x_135 = 0;
-      int x_130_phi = 0;
-      int x_133_phi = 0;
-      int x_135_phi = 0;
-      int x_157_phi = 0;
-      int x_160_phi = 0;
-      int x_170_phi = 0;
-      int const x_118 = x_118_phi;
-      if ((x_118 < 9)) {
-      } else {
-        break;
-      }
-      int const x_124 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(x_111)));
-      int const x_125 = as_type<int>((as_type<uint>(x_124) - as_type<uint>(1)));
-      int const x_119 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_111))))));
-      int const x_128 = min(as_type<int>((as_type<uint>(x_119) - as_type<uint>(1))), 9);
-      x_130_phi = x_118;
-      x_133_phi = x_124;
-      x_135_phi = x_118;
-      while (true) {
-        int x_150 = 0;
-        int x_153 = 0;
-        int x_134_phi = 0;
-        int x_136_phi = 0;
-        x_130 = x_130_phi;
-        int const x_133 = x_133_phi;
-        x_135 = x_135_phi;
-        if (((x_135 <= x_125) & (x_133 <= x_128))) {
-        } else {
-          break;
-        }
-        int const x_142_save = x_135;
-        int const x_143 = data.arr[x_142_save];
-        int const x_144_save = x_133;
-        int const x_145 = data.arr[x_144_save];
-        int const x_131 = as_type<int>(as_type<int>((as_type<uint>(x_130) + as_type<uint>(as_type<int>(1)))));
-        if ((x_143 < x_145)) {
-          x_150 = as_type<int>(as_type<int>((as_type<uint>(x_135) + as_type<uint>(as_type<int>(1)))));
-          int const x_151 = data.arr[x_142_save];
-          temp.arr[x_130] = x_151;
-          x_134_phi = x_133;
-          x_136_phi = x_150;
-        } else {
-          x_153 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
-          int const x_154 = data.arr[x_144_save];
-          temp.arr[x_130] = x_154;
-          x_134_phi = x_153;
-          x_136_phi = x_135;
-        }
-        int const x_134 = x_134_phi;
-        int const x_136 = x_136_phi;
-        {
-          x_130_phi = x_131;
-          x_133_phi = x_134;
-          x_135_phi = x_136;
-        }
-      }
-      x_157_phi = x_130;
-      x_160_phi = x_135;
-      while (true) {
-        int x_158 = 0;
-        int x_161 = 0;
-        int const x_157 = x_157_phi;
-        int const x_160 = x_160_phi;
-        if (((x_160 < 10) & (x_160 <= x_125))) {
-        } else {
-          break;
-        }
-        {
-          x_158 = as_type<int>((as_type<uint>(x_157) + as_type<uint>(1)));
-          x_161 = as_type<int>((as_type<uint>(x_160) + as_type<uint>(1)));
-          int const x_167 = data.arr[x_160];
-          temp.arr[x_157] = x_167;
-          x_157_phi = x_158;
-          x_160_phi = x_161;
-        }
-      }
-      x_170_phi = x_118;
-      while (true) {
-        int x_171 = 0;
-        int const x_170 = x_170_phi;
-        if ((x_170 <= x_128)) {
-        } else {
-          break;
-        }
-        {
-          int const x_176 = temp.arr[x_170];
-          data.arr[x_170] = x_176;
-          x_171 = as_type<int>((as_type<uint>(x_170) + as_type<uint>(1)));
-          x_170_phi = x_171;
-        }
-      }
-      {
-        x_118_phi = x_119;
-      }
-    }
-    {
-      x_112 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_111)));
-      x_111_phi = x_112;
-    }
-  }
-  int x_180 = 0;
-  float x_198 = 0.0f;
-  float x_260 = 0.0f;
-  float x_261_phi = 0.0f;
-  float const x_179 = (*(tint_symbol_3)).y;
-  x_180 = int(x_179);
-  if ((x_180 < 30)) {
-    int const x_186 = data.arr[0];
-    x_189 = (0.5f + (float(x_186) * 0.100000001f));
-    x_262_phi = x_189;
-  } else {
-    float x_207 = 0.0f;
-    float x_259 = 0.0f;
-    float x_260_phi = 0.0f;
-    if ((x_180 < 60)) {
-      int const x_195 = data.arr[1];
-      x_198 = (0.5f + (float(x_195) * 0.100000001f));
-      x_261_phi = x_198;
-    } else {
-      float x_216 = 0.0f;
-      float x_258 = 0.0f;
-      float x_259_phi = 0.0f;
-      if ((x_180 < 90)) {
-        int const x_204 = data.arr[2];
-        x_207 = (0.5f + (float(x_204) * 0.100000001f));
-        x_260_phi = x_207;
-      } else {
-        if ((x_180 < 120)) {
-          int const x_213 = data.arr[3];
-          x_216 = (0.5f + (float(x_213) * 0.100000001f));
-          x_259_phi = x_216;
-        } else {
-          float x_229 = 0.0f;
-          float x_257 = 0.0f;
-          float x_258_phi = 0.0f;
-          if ((x_180 < 150)) {
-            discard_fragment();
-          } else {
-            float x_238 = 0.0f;
-            float x_256 = 0.0f;
-            float x_257_phi = 0.0f;
-            if ((x_180 < 180)) {
-              int const x_226 = data.arr[5];
-              x_229 = (0.5f + (float(x_226) * 0.100000001f));
-              x_258_phi = x_229;
-            } else {
-              float x_247 = 0.0f;
-              float x_255 = 0.0f;
-              float x_256_phi = 0.0f;
-              if ((x_180 < 210)) {
-                int const x_235 = data.arr[6];
-                x_238 = (0.5f + (float(x_235) * 0.100000001f));
-                x_257_phi = x_238;
-              } else {
-                if ((x_180 < 240)) {
-                  int const x_244 = data.arr[7];
-                  x_247 = (0.5f + (float(x_244) * 0.100000001f));
-                  x_256_phi = x_247;
-                } else {
-                  if ((x_180 < 270)) {
-                  } else {
-                    discard_fragment();
-                  }
-                  int const x_252 = data.arr[8];
-                  x_255 = (0.5f + (float(x_252) * 0.100000001f));
-                  x_256_phi = x_255;
-                }
-                x_256 = x_256_phi;
-                x_257_phi = x_256;
-              }
-              x_257 = x_257_phi;
-              x_258_phi = x_257;
-            }
-            x_258 = x_258_phi;
-          }
-          x_259_phi = x_258;
-        }
-        x_259 = x_259_phi;
-        x_260_phi = x_259;
-      }
-      x_260 = x_260_phi;
-      x_261_phi = x_260;
-    }
-    x_261 = x_261_phi;
-    x_262_phi = x_261;
-  }
-  float const x_262 = x_262_phi;
-  *(tint_symbol_4) = float4(x_262, x_262, x_262, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.spvasm
deleted file mode 100644
index e95f0ce..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,720 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 415
-; Schema: 0
-               OpCapability Shader
-        %164 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %temp "temp"
-               OpName %data "data"
-               OpName %x_189 "x_189"
-               OpName %x_261 "x_261"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %x_111_phi "x_111_phi"
-               OpName %x_262_phi "x_262_phi"
-               OpName %x_99 "x_99"
-               OpName %x_97 "x_97"
-               OpName %x_95 "x_95"
-               OpName %x_93 "x_93"
-               OpName %x_91 "x_91"
-               OpName %x_89 "x_89"
-               OpName %x_87 "x_87"
-               OpName %x_85 "x_85"
-               OpName %x_83 "x_83"
-               OpName %x_81 "x_81"
-               OpName %x_64_phi "x_64_phi"
-               OpName %x_103 "x_103"
-               OpName %x_112 "x_112"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_130 "x_130"
-               OpName %x_135 "x_135"
-               OpName %x_130_phi "x_130_phi"
-               OpName %x_133_phi "x_133_phi"
-               OpName %x_135_phi "x_135_phi"
-               OpName %x_157_phi "x_157_phi"
-               OpName %x_160_phi "x_160_phi"
-               OpName %x_170_phi "x_170_phi"
-               OpName %x_150 "x_150"
-               OpName %x_153 "x_153"
-               OpName %x_134_phi "x_134_phi"
-               OpName %x_136_phi "x_136_phi"
-               OpName %x_158 "x_158"
-               OpName %x_161 "x_161"
-               OpName %x_171 "x_171"
-               OpName %x_180 "x_180"
-               OpName %x_198 "x_198"
-               OpName %x_260 "x_260"
-               OpName %x_261_phi "x_261_phi"
-               OpName %x_207 "x_207"
-               OpName %x_259 "x_259"
-               OpName %x_260_phi "x_260_phi"
-               OpName %x_216 "x_216"
-               OpName %x_258 "x_258"
-               OpName %x_259_phi "x_259_phi"
-               OpName %x_229 "x_229"
-               OpName %x_257 "x_257"
-               OpName %x_258_phi "x_258_phi"
-               OpName %x_238 "x_238"
-               OpName %x_256 "x_256"
-               OpName %x_257_phi "x_257_phi"
-               OpName %x_247 "x_247"
-               OpName %x_255 "x_255"
-               OpName %x_256_phi "x_256_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %25 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-%float_0_100000001 = OpConstant %float 0.100000001
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %402 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %temp = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-       %data = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-      %x_189 = OpVariable %_ptr_Function_float Function %29
-      %x_261 = OpVariable %_ptr_Function_float Function %29
-   %x_63_phi = OpVariable %_ptr_Function_int Function %33
-  %x_102_phi = OpVariable %_ptr_Function_int Function %33
-  %x_111_phi = OpVariable %_ptr_Function_int Function %33
-  %x_262_phi = OpVariable %_ptr_Function_float Function %29
-       %x_99 = OpVariable %_ptr_Function_int Function %33
-       %x_97 = OpVariable %_ptr_Function_int Function %33
-       %x_95 = OpVariable %_ptr_Function_int Function %33
-       %x_93 = OpVariable %_ptr_Function_int Function %33
-       %x_91 = OpVariable %_ptr_Function_int Function %33
-       %x_89 = OpVariable %_ptr_Function_int Function %33
-       %x_87 = OpVariable %_ptr_Function_int Function %33
-       %x_85 = OpVariable %_ptr_Function_int Function %33
-       %x_83 = OpVariable %_ptr_Function_int Function %33
-       %x_81 = OpVariable %_ptr_Function_int Function %33
-   %x_64_phi = OpVariable %_ptr_Function_int Function %33
-      %x_103 = OpVariable %_ptr_Function_int Function %33
-      %x_112 = OpVariable %_ptr_Function_int Function %33
-  %x_118_phi = OpVariable %_ptr_Function_int Function %33
-      %x_130 = OpVariable %_ptr_Function_int Function %33
-      %x_135 = OpVariable %_ptr_Function_int Function %33
-  %x_130_phi = OpVariable %_ptr_Function_int Function %33
-  %x_133_phi = OpVariable %_ptr_Function_int Function %33
-  %x_135_phi = OpVariable %_ptr_Function_int Function %33
-  %x_157_phi = OpVariable %_ptr_Function_int Function %33
-  %x_160_phi = OpVariable %_ptr_Function_int Function %33
-  %x_170_phi = OpVariable %_ptr_Function_int Function %33
-      %x_150 = OpVariable %_ptr_Function_int Function %33
-      %x_153 = OpVariable %_ptr_Function_int Function %33
-  %x_134_phi = OpVariable %_ptr_Function_int Function %33
-  %x_136_phi = OpVariable %_ptr_Function_int Function %33
-      %x_158 = OpVariable %_ptr_Function_int Function %33
-      %x_161 = OpVariable %_ptr_Function_int Function %33
-      %x_171 = OpVariable %_ptr_Function_int Function %33
-      %x_180 = OpVariable %_ptr_Function_int Function %33
-      %x_198 = OpVariable %_ptr_Function_float Function %29
-      %x_260 = OpVariable %_ptr_Function_float Function %29
-  %x_261_phi = OpVariable %_ptr_Function_float Function %29
-      %x_207 = OpVariable %_ptr_Function_float Function %29
-      %x_259 = OpVariable %_ptr_Function_float Function %29
-  %x_260_phi = OpVariable %_ptr_Function_float Function %29
-      %x_216 = OpVariable %_ptr_Function_float Function %29
-      %x_258 = OpVariable %_ptr_Function_float Function %29
-  %x_259_phi = OpVariable %_ptr_Function_float Function %29
-      %x_229 = OpVariable %_ptr_Function_float Function %29
-      %x_257 = OpVariable %_ptr_Function_float Function %29
-  %x_258_phi = OpVariable %_ptr_Function_float Function %29
-      %x_238 = OpVariable %_ptr_Function_float Function %29
-      %x_256 = OpVariable %_ptr_Function_float Function %29
-  %x_257_phi = OpVariable %_ptr_Function_float Function %29
-      %x_247 = OpVariable %_ptr_Function_float Function %29
-      %x_255 = OpVariable %_ptr_Function_float Function %29
-  %x_256_phi = OpVariable %_ptr_Function_float Function %29
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-               OpStore %x_63_phi %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %57 = OpLoad %int %x_63_phi
-         %59 = OpIAdd %int %57 %int_1
-               OpStore %x_64_phi %59
-               OpSelectionMerge %60 None
-               OpSwitch %57 %61 9 %62 8 %63 7 %64 6 %65 5 %66 4 %67 3 %68 2 %69 1 %70 0 %71
-         %62 = OpLabel
-         %72 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %72 %int_n5
-         %74 = OpIAdd %int %57 %int_1
-               OpStore %x_99 %74
-         %75 = OpLoad %int %x_99
-               OpStore %x_64_phi %75
-               OpBranch %60
-         %63 = OpLabel
-         %76 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %76 %int_n4
-         %78 = OpIAdd %int %57 %int_1
-               OpStore %x_97 %78
-         %79 = OpLoad %int %x_97
-               OpStore %x_64_phi %79
-               OpBranch %60
-         %64 = OpLabel
-         %80 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %80 %int_n3
-         %82 = OpIAdd %int %57 %int_1
-               OpStore %x_95 %82
-         %83 = OpLoad %int %x_95
-               OpStore %x_64_phi %83
-               OpBranch %60
-         %65 = OpLabel
-         %84 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %84 %int_n2
-         %86 = OpIAdd %int %57 %int_1
-               OpStore %x_93 %86
-         %87 = OpLoad %int %x_93
-               OpStore %x_64_phi %87
-               OpBranch %60
-         %66 = OpLabel
-         %88 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %88 %int_n1
-         %90 = OpIAdd %int %57 %int_1
-               OpStore %x_91 %90
-         %91 = OpLoad %int %x_91
-               OpStore %x_64_phi %91
-               OpBranch %60
-         %67 = OpLabel
-         %92 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %92 %int_0
-         %94 = OpIAdd %int %57 %int_1
-               OpStore %x_89 %94
-         %95 = OpLoad %int %x_89
-               OpStore %x_64_phi %95
-               OpBranch %60
-         %68 = OpLabel
-         %96 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %96 %int_1
-         %97 = OpIAdd %int %57 %int_1
-               OpStore %x_87 %97
-         %98 = OpLoad %int %x_87
-               OpStore %x_64_phi %98
-               OpBranch %60
-         %69 = OpLabel
-         %99 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %99 %int_2
-        %101 = OpIAdd %int %57 %int_1
-               OpStore %x_85 %101
-        %102 = OpLoad %int %x_85
-               OpStore %x_64_phi %102
-               OpBranch %60
-         %70 = OpLabel
-        %103 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %103 %int_3
-        %105 = OpIAdd %int %57 %int_1
-               OpStore %x_83 %105
-        %106 = OpLoad %int %x_83
-               OpStore %x_64_phi %106
-               OpBranch %60
-         %71 = OpLabel
-        %107 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %107 %int_4
-        %109 = OpIAdd %int %57 %int_1
-               OpStore %x_81 %109
-        %110 = OpLoad %int %x_81
-               OpStore %x_64_phi %110
-               OpBranch %60
-         %61 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-        %111 = OpLoad %int %x_64_phi
-               OpBranch %44
-         %44 = OpLabel
-               OpStore %x_63_phi %111
-        %113 = OpSLessThan %bool %111 %int_10
-               OpBranchConditional %113 %42 %43
-         %43 = OpLabel
-               OpStore %x_102_phi %int_0
-               OpBranch %115
-        %115 = OpLabel
-               OpLoopMerge %116 %117 None
-               OpBranch %118
-        %118 = OpLabel
-        %120 = OpLoad %int %x_102_phi
-        %121 = OpSLessThan %bool %120 %int_10
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-               OpBranch %122
-        %124 = OpLabel
-               OpBranch %116
-        %122 = OpLabel
-               OpBranch %117
-        %117 = OpLabel
-        %125 = OpAccessChain %_ptr_Function_int %data %120
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Function_int %temp %120
-               OpStore %127 %126
-        %128 = OpIAdd %int %120 %int_1
-               OpStore %x_103 %128
-        %129 = OpLoad %int %x_103
-               OpStore %x_102_phi %129
-               OpBranch %115
-        %116 = OpLabel
-               OpStore %x_111_phi %int_1
-               OpBranch %130
-        %130 = OpLabel
-               OpLoopMerge %131 %132 None
-               OpBranch %133
-        %133 = OpLabel
-        %136 = OpLoad %int %x_111_phi
-        %138 = OpSLessThanEqual %bool %136 %int_9
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %131
-        %139 = OpLabel
-               OpStore %x_118_phi %int_0
-               OpBranch %142
-        %142 = OpLabel
-               OpLoopMerge %143 %144 None
-               OpBranch %145
-        %145 = OpLabel
-        %154 = OpLoad %int %x_118_phi
-        %155 = OpSLessThan %bool %154 %int_9
-               OpSelectionMerge %156 None
-               OpBranchConditional %155 %157 %158
-        %157 = OpLabel
-               OpBranch %156
-        %158 = OpLabel
-               OpBranch %143
-        %156 = OpLabel
-        %159 = OpIAdd %int %154 %136
-        %160 = OpISub %int %159 %int_1
-        %161 = OpIMul %int %int_2 %136
-        %162 = OpIAdd %int %154 %161
-        %165 = OpISub %int %162 %int_1
-        %163 = OpExtInst %int %164 SMin %165 %int_9
-               OpStore %x_130_phi %154
-               OpStore %x_133_phi %159
-               OpStore %x_135_phi %154
-               OpBranch %166
-        %166 = OpLabel
-               OpLoopMerge %167 %168 None
-               OpBranch %169
-        %169 = OpLabel
-        %174 = OpLoad %int %x_130_phi
-               OpStore %x_130 %174
-        %175 = OpLoad %int %x_133_phi
-        %176 = OpLoad %int %x_135_phi
-               OpStore %x_135 %176
-        %177 = OpLoad %int %x_135
-        %178 = OpSLessThanEqual %bool %177 %160
-        %179 = OpSLessThanEqual %bool %175 %163
-        %180 = OpLogicalAnd %bool %178 %179
-               OpSelectionMerge %181 None
-               OpBranchConditional %180 %182 %183
-        %182 = OpLabel
-               OpBranch %181
-        %183 = OpLabel
-               OpBranch %167
-        %181 = OpLabel
-        %184 = OpLoad %int %x_135
-        %185 = OpAccessChain %_ptr_Function_int %data %184
-        %186 = OpLoad %int %185
-        %187 = OpAccessChain %_ptr_Function_int %data %175
-        %188 = OpLoad %int %187
-        %190 = OpLoad %int %x_130
-        %191 = OpCopyObject %int %int_1
-        %192 = OpIAdd %int %190 %191
-        %189 = OpCopyObject %int %192
-        %193 = OpSLessThan %bool %186 %188
-               OpSelectionMerge %194 None
-               OpBranchConditional %193 %195 %196
-        %195 = OpLabel
-        %198 = OpLoad %int %x_135
-        %199 = OpCopyObject %int %int_1
-        %200 = OpIAdd %int %198 %199
-        %197 = OpCopyObject %int %200
-               OpStore %x_150 %197
-        %201 = OpAccessChain %_ptr_Function_int %data %184
-        %202 = OpLoad %int %201
-        %203 = OpLoad %int %x_130
-        %204 = OpAccessChain %_ptr_Function_int %temp %203
-               OpStore %204 %202
-               OpStore %x_134_phi %175
-        %205 = OpLoad %int %x_150
-               OpStore %x_136_phi %205
-               OpBranch %194
-        %196 = OpLabel
-        %206 = OpIAdd %int %175 %int_1
-               OpStore %x_153 %206
-        %207 = OpAccessChain %_ptr_Function_int %data %175
-        %208 = OpLoad %int %207
-        %209 = OpLoad %int %x_130
-        %210 = OpAccessChain %_ptr_Function_int %temp %209
-               OpStore %210 %208
-        %211 = OpLoad %int %x_153
-               OpStore %x_134_phi %211
-        %212 = OpLoad %int %x_135
-               OpStore %x_136_phi %212
-               OpBranch %194
-        %194 = OpLabel
-        %213 = OpLoad %int %x_134_phi
-        %214 = OpLoad %int %x_136_phi
-               OpBranch %168
-        %168 = OpLabel
-               OpStore %x_130_phi %189
-               OpStore %x_133_phi %213
-               OpStore %x_135_phi %214
-               OpBranch %166
-        %167 = OpLabel
-        %215 = OpLoad %int %x_130
-               OpStore %x_157_phi %215
-        %216 = OpLoad %int %x_135
-               OpStore %x_160_phi %216
-               OpBranch %217
-        %217 = OpLabel
-               OpLoopMerge %218 %219 None
-               OpBranch %220
-        %220 = OpLabel
-        %223 = OpLoad %int %x_157_phi
-        %224 = OpLoad %int %x_160_phi
-        %225 = OpSLessThan %bool %224 %int_10
-        %226 = OpSLessThanEqual %bool %224 %160
-        %227 = OpLogicalAnd %bool %225 %226
-               OpSelectionMerge %228 None
-               OpBranchConditional %227 %229 %230
-        %229 = OpLabel
-               OpBranch %228
-        %230 = OpLabel
-               OpBranch %218
-        %228 = OpLabel
-               OpBranch %219
-        %219 = OpLabel
-        %231 = OpIAdd %int %223 %int_1
-               OpStore %x_158 %231
-        %232 = OpIAdd %int %224 %int_1
-               OpStore %x_161 %232
-        %233 = OpAccessChain %_ptr_Function_int %data %224
-        %234 = OpLoad %int %233
-        %235 = OpAccessChain %_ptr_Function_int %temp %223
-               OpStore %235 %234
-        %236 = OpLoad %int %x_158
-               OpStore %x_157_phi %236
-        %237 = OpLoad %int %x_161
-               OpStore %x_160_phi %237
-               OpBranch %217
-        %218 = OpLabel
-               OpStore %x_170_phi %154
-               OpBranch %238
-        %238 = OpLabel
-               OpLoopMerge %239 %240 None
-               OpBranch %241
-        %241 = OpLabel
-        %243 = OpLoad %int %x_170_phi
-        %244 = OpSLessThanEqual %bool %243 %163
-               OpSelectionMerge %245 None
-               OpBranchConditional %244 %246 %247
-        %246 = OpLabel
-               OpBranch %245
-        %247 = OpLabel
-               OpBranch %239
-        %245 = OpLabel
-               OpBranch %240
-        %240 = OpLabel
-        %248 = OpAccessChain %_ptr_Function_int %temp %243
-        %249 = OpLoad %int %248
-        %250 = OpAccessChain %_ptr_Function_int %data %243
-               OpStore %250 %249
-        %251 = OpIAdd %int %243 %int_1
-               OpStore %x_171 %251
-        %252 = OpLoad %int %x_171
-               OpStore %x_170_phi %252
-               OpBranch %238
-        %239 = OpLabel
-               OpBranch %144
-        %144 = OpLabel
-               OpStore %x_118_phi %162
-               OpBranch %142
-        %143 = OpLabel
-               OpBranch %132
-        %132 = OpLabel
-        %253 = OpIMul %int %int_2 %136
-               OpStore %x_112 %253
-        %254 = OpLoad %int %x_112
-               OpStore %x_111_phi %254
-               OpBranch %130
-        %131 = OpLabel
-        %261 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %262 = OpLoad %float %261
-        %263 = OpConvertFToS %int %262
-               OpStore %x_180 %263
-        %264 = OpLoad %int %x_180
-        %266 = OpSLessThan %bool %264 %int_30
-               OpSelectionMerge %267 None
-               OpBranchConditional %266 %268 %269
-        %268 = OpLabel
-        %270 = OpAccessChain %_ptr_Function_int %data %int_0
-        %271 = OpLoad %int %270
-        %273 = OpConvertSToF %float %271
-        %275 = OpFMul %float %273 %float_0_100000001
-        %276 = OpFAdd %float %float_0_5 %275
-               OpStore %x_189 %276
-        %277 = OpLoad %float %x_189
-               OpStore %x_262_phi %277
-               OpBranch %267
-        %269 = OpLabel
-        %281 = OpLoad %int %x_180
-        %283 = OpSLessThan %bool %281 %int_60
-               OpSelectionMerge %284 None
-               OpBranchConditional %283 %285 %286
-        %285 = OpLabel
-        %287 = OpAccessChain %_ptr_Function_int %data %int_1
-        %288 = OpLoad %int %287
-        %289 = OpConvertSToF %float %288
-        %290 = OpFMul %float %289 %float_0_100000001
-        %291 = OpFAdd %float %float_0_5 %290
-               OpStore %x_198 %291
-        %292 = OpLoad %float %x_198
-               OpStore %x_261_phi %292
-               OpBranch %284
-        %286 = OpLabel
-        %296 = OpLoad %int %x_180
-        %298 = OpSLessThan %bool %296 %int_90
-               OpSelectionMerge %299 None
-               OpBranchConditional %298 %300 %301
-        %300 = OpLabel
-        %302 = OpAccessChain %_ptr_Function_int %data %int_2
-        %303 = OpLoad %int %302
-        %304 = OpConvertSToF %float %303
-        %305 = OpFMul %float %304 %float_0_100000001
-        %306 = OpFAdd %float %float_0_5 %305
-               OpStore %x_207 %306
-        %307 = OpLoad %float %x_207
-               OpStore %x_260_phi %307
-               OpBranch %299
-        %301 = OpLabel
-        %308 = OpLoad %int %x_180
-        %310 = OpSLessThan %bool %308 %int_120
-               OpSelectionMerge %311 None
-               OpBranchConditional %310 %312 %313
-        %312 = OpLabel
-        %314 = OpAccessChain %_ptr_Function_int %data %int_3
-        %315 = OpLoad %int %314
-        %316 = OpConvertSToF %float %315
-        %317 = OpFMul %float %316 %float_0_100000001
-        %318 = OpFAdd %float %float_0_5 %317
-               OpStore %x_216 %318
-        %319 = OpLoad %float %x_216
-               OpStore %x_259_phi %319
-               OpBranch %311
-        %313 = OpLabel
-        %323 = OpLoad %int %x_180
-        %325 = OpSLessThan %bool %323 %int_150
-               OpSelectionMerge %326 None
-               OpBranchConditional %325 %327 %328
-        %327 = OpLabel
-               OpKill
-        %328 = OpLabel
-        %332 = OpLoad %int %x_180
-        %334 = OpSLessThan %bool %332 %int_180
-               OpSelectionMerge %335 None
-               OpBranchConditional %334 %336 %337
-        %336 = OpLabel
-        %339 = OpAccessChain %_ptr_Function_int %data %int_5
-        %340 = OpLoad %int %339
-        %341 = OpConvertSToF %float %340
-        %342 = OpFMul %float %341 %float_0_100000001
-        %343 = OpFAdd %float %float_0_5 %342
-               OpStore %x_229 %343
-        %344 = OpLoad %float %x_229
-               OpStore %x_258_phi %344
-               OpBranch %335
-        %337 = OpLabel
-        %348 = OpLoad %int %x_180
-        %350 = OpSLessThan %bool %348 %int_210
-               OpSelectionMerge %351 None
-               OpBranchConditional %350 %352 %353
-        %352 = OpLabel
-        %355 = OpAccessChain %_ptr_Function_int %data %int_6
-        %356 = OpLoad %int %355
-        %357 = OpConvertSToF %float %356
-        %358 = OpFMul %float %357 %float_0_100000001
-        %359 = OpFAdd %float %float_0_5 %358
-               OpStore %x_238 %359
-        %360 = OpLoad %float %x_238
-               OpStore %x_257_phi %360
-               OpBranch %351
-        %353 = OpLabel
-        %361 = OpLoad %int %x_180
-        %363 = OpSLessThan %bool %361 %int_240
-               OpSelectionMerge %364 None
-               OpBranchConditional %363 %365 %366
-        %365 = OpLabel
-        %368 = OpAccessChain %_ptr_Function_int %data %int_7
-        %369 = OpLoad %int %368
-        %370 = OpConvertSToF %float %369
-        %371 = OpFMul %float %370 %float_0_100000001
-        %372 = OpFAdd %float %float_0_5 %371
-               OpStore %x_247 %372
-        %373 = OpLoad %float %x_247
-               OpStore %x_256_phi %373
-               OpBranch %364
-        %366 = OpLabel
-        %374 = OpLoad %int %x_180
-        %376 = OpSLessThan %bool %374 %int_270
-               OpSelectionMerge %377 None
-               OpBranchConditional %376 %378 %379
-        %378 = OpLabel
-               OpBranch %377
-        %379 = OpLabel
-               OpKill
-        %377 = OpLabel
-        %381 = OpAccessChain %_ptr_Function_int %data %int_8
-        %382 = OpLoad %int %381
-        %383 = OpConvertSToF %float %382
-        %384 = OpFMul %float %383 %float_0_100000001
-        %385 = OpFAdd %float %float_0_5 %384
-               OpStore %x_255 %385
-        %386 = OpLoad %float %x_255
-               OpStore %x_256_phi %386
-               OpBranch %364
-        %364 = OpLabel
-        %387 = OpLoad %float %x_256_phi
-               OpStore %x_256 %387
-        %388 = OpLoad %float %x_256
-               OpStore %x_257_phi %388
-               OpBranch %351
-        %351 = OpLabel
-        %389 = OpLoad %float %x_257_phi
-               OpStore %x_257 %389
-        %390 = OpLoad %float %x_257
-               OpStore %x_258_phi %390
-               OpBranch %335
-        %335 = OpLabel
-        %391 = OpLoad %float %x_258_phi
-               OpStore %x_258 %391
-               OpBranch %326
-        %326 = OpLabel
-        %392 = OpLoad %float %x_258
-               OpStore %x_259_phi %392
-               OpBranch %311
-        %311 = OpLabel
-        %393 = OpLoad %float %x_259_phi
-               OpStore %x_259 %393
-        %394 = OpLoad %float %x_259
-               OpStore %x_260_phi %394
-               OpBranch %299
-        %299 = OpLabel
-        %395 = OpLoad %float %x_260_phi
-               OpStore %x_260 %395
-        %396 = OpLoad %float %x_260
-               OpStore %x_261_phi %396
-               OpBranch %284
-        %284 = OpLabel
-        %397 = OpLoad %float %x_261_phi
-               OpStore %x_261 %397
-        %398 = OpLoad %float %x_261
-               OpStore %x_262_phi %398
-               OpBranch %267
-        %267 = OpLabel
-        %399 = OpLoad %float %x_262_phi
-        %401 = OpCompositeConstruct %v4float %399 %399 %399 %float_1
-               OpStore %x_GLF_color %401
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %402
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %406 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %407 = OpFunctionCall %void %main_1
-        %408 = OpLoad %v4float %x_GLF_color
-        %409 = OpCompositeConstruct %main_out %408
-               OpReturnValue %409
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %411 = OpLabel
-        %413 = OpLoad %v4float %gl_FragCoord_param_1
-        %412 = OpFunctionCall %main_out %main_inner %413
-        %414 = OpCompositeExtract %v4float %412 0
-               OpStore %x_GLF_color_1_1 %414
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.wgsl
deleted file mode 100644
index 235e196..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,338 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var temp : array<i32, 10>;
-  var data : array<i32, 10>;
-  var x_189 : f32;
-  var x_261 : f32;
-  var x_63_phi : i32;
-  var x_102_phi : i32;
-  var x_111_phi : i32;
-  var x_262_phi : f32;
-  let x_60 : f32 = x_8.injectionSwitch.x;
-  let x_61 : i32 = i32(x_60);
-  x_63_phi = x_61;
-  loop {
-    var x_99 : i32;
-    var x_97 : i32;
-    var x_95 : i32;
-    var x_93 : i32;
-    var x_91 : i32;
-    var x_89 : i32;
-    var x_87 : i32;
-    var x_85 : i32;
-    var x_83 : i32;
-    var x_81 : i32;
-    var x_64_phi : i32;
-    let x_63 : i32 = x_63_phi;
-    let x_68 : i32 = (x_63 + 1);
-    x_64_phi = x_68;
-    switch(x_63) {
-      case 9: {
-        data[x_63] = -5;
-        x_99 = (x_63 + 1);
-        x_64_phi = x_99;
-      }
-      case 8: {
-        data[x_63] = -4;
-        x_97 = (x_63 + 1);
-        x_64_phi = x_97;
-      }
-      case 7: {
-        data[x_63] = -3;
-        x_95 = (x_63 + 1);
-        x_64_phi = x_95;
-      }
-      case 6: {
-        data[x_63] = -2;
-        x_93 = (x_63 + 1);
-        x_64_phi = x_93;
-      }
-      case 5: {
-        data[x_63] = -1;
-        x_91 = (x_63 + 1);
-        x_64_phi = x_91;
-      }
-      case 4: {
-        data[x_63] = 0;
-        x_89 = (x_63 + 1);
-        x_64_phi = x_89;
-      }
-      case 3: {
-        data[x_63] = 1;
-        x_87 = (x_63 + 1);
-        x_64_phi = x_87;
-      }
-      case 2: {
-        data[x_63] = 2;
-        x_85 = (x_63 + 1);
-        x_64_phi = x_85;
-      }
-      case 1: {
-        data[x_63] = 3;
-        x_83 = (x_63 + 1);
-        x_64_phi = x_83;
-      }
-      case 0: {
-        data[x_63] = 4;
-        x_81 = (x_63 + 1);
-        x_64_phi = x_81;
-      }
-      default: {
-      }
-    }
-    let x_64 : i32 = x_64_phi;
-
-    continuing {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_102_phi = 0;
-  loop {
-    var x_103 : i32;
-    let x_102 : i32 = x_102_phi;
-    if ((x_102 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_108 : i32 = data[x_102];
-      temp[x_102] = x_108;
-      x_103 = (x_102 + 1);
-      x_102_phi = x_103;
-    }
-  }
-  x_111_phi = 1;
-  loop {
-    var x_112 : i32;
-    var x_118_phi : i32;
-    let x_111 : i32 = x_111_phi;
-    if ((x_111 <= 9)) {
-    } else {
-      break;
-    }
-    x_118_phi = 0;
-    loop {
-      var x_130 : i32;
-      var x_135 : i32;
-      var x_130_phi : i32;
-      var x_133_phi : i32;
-      var x_135_phi : i32;
-      var x_157_phi : i32;
-      var x_160_phi : i32;
-      var x_170_phi : i32;
-      let x_118 : i32 = x_118_phi;
-      if ((x_118 < 9)) {
-      } else {
-        break;
-      }
-      let x_124 : i32 = (x_118 + x_111);
-      let x_125 : i32 = (x_124 - 1);
-      let x_119 : i32 = (x_118 + (2 * x_111));
-      let x_128 : i32 = min((x_119 - 1), 9);
-      x_130_phi = x_118;
-      x_133_phi = x_124;
-      x_135_phi = x_118;
-      loop {
-        var x_150 : i32;
-        var x_153 : i32;
-        var x_134_phi : i32;
-        var x_136_phi : i32;
-        x_130 = x_130_phi;
-        let x_133 : i32 = x_133_phi;
-        x_135 = x_135_phi;
-        if (((x_135 <= x_125) & (x_133 <= x_128))) {
-        } else {
-          break;
-        }
-        let x_142 : ptr<function, i32> = &(data[x_135]);
-        let x_143 : i32 = *(x_142);
-        let x_144 : ptr<function, i32> = &(data[x_133]);
-        let x_145 : i32 = *(x_144);
-        let x_131 : i32 = bitcast<i32>((x_130 + bitcast<i32>(1)));
-        if ((x_143 < x_145)) {
-          x_150 = bitcast<i32>((x_135 + bitcast<i32>(1)));
-          let x_151 : i32 = *(x_142);
-          temp[x_130] = x_151;
-          x_134_phi = x_133;
-          x_136_phi = x_150;
-        } else {
-          x_153 = (x_133 + 1);
-          let x_154 : i32 = *(x_144);
-          temp[x_130] = x_154;
-          x_134_phi = x_153;
-          x_136_phi = x_135;
-        }
-        let x_134 : i32 = x_134_phi;
-        let x_136 : i32 = x_136_phi;
-
-        continuing {
-          x_130_phi = x_131;
-          x_133_phi = x_134;
-          x_135_phi = x_136;
-        }
-      }
-      x_157_phi = x_130;
-      x_160_phi = x_135;
-      loop {
-        var x_158 : i32;
-        var x_161 : i32;
-        let x_157 : i32 = x_157_phi;
-        let x_160 : i32 = x_160_phi;
-        if (((x_160 < 10) & (x_160 <= x_125))) {
-        } else {
-          break;
-        }
-
-        continuing {
-          x_158 = (x_157 + 1);
-          x_161 = (x_160 + 1);
-          let x_167 : i32 = data[x_160];
-          temp[x_157] = x_167;
-          x_157_phi = x_158;
-          x_160_phi = x_161;
-        }
-      }
-      x_170_phi = x_118;
-      loop {
-        var x_171 : i32;
-        let x_170 : i32 = x_170_phi;
-        if ((x_170 <= x_128)) {
-        } else {
-          break;
-        }
-
-        continuing {
-          let x_176 : i32 = temp[x_170];
-          data[x_170] = x_176;
-          x_171 = (x_170 + 1);
-          x_170_phi = x_171;
-        }
-      }
-
-      continuing {
-        x_118_phi = x_119;
-      }
-    }
-
-    continuing {
-      x_112 = (2 * x_111);
-      x_111_phi = x_112;
-    }
-  }
-  var x_180 : i32;
-  var x_198 : f32;
-  var x_260 : f32;
-  var x_261_phi : f32;
-  let x_179 : f32 = gl_FragCoord.y;
-  x_180 = i32(x_179);
-  if ((x_180 < 30)) {
-    let x_186 : i32 = data[0];
-    x_189 = (0.5 + (f32(x_186) * 0.100000001));
-    x_262_phi = x_189;
-  } else {
-    var x_207 : f32;
-    var x_259 : f32;
-    var x_260_phi : f32;
-    if ((x_180 < 60)) {
-      let x_195 : i32 = data[1];
-      x_198 = (0.5 + (f32(x_195) * 0.100000001));
-      x_261_phi = x_198;
-    } else {
-      var x_216 : f32;
-      var x_258 : f32;
-      var x_259_phi : f32;
-      if ((x_180 < 90)) {
-        let x_204 : i32 = data[2];
-        x_207 = (0.5 + (f32(x_204) * 0.100000001));
-        x_260_phi = x_207;
-      } else {
-        if ((x_180 < 120)) {
-          let x_213 : i32 = data[3];
-          x_216 = (0.5 + (f32(x_213) * 0.100000001));
-          x_259_phi = x_216;
-        } else {
-          var x_229 : f32;
-          var x_257 : f32;
-          var x_258_phi : f32;
-          if ((x_180 < 150)) {
-            discard;
-          } else {
-            var x_238 : f32;
-            var x_256 : f32;
-            var x_257_phi : f32;
-            if ((x_180 < 180)) {
-              let x_226 : i32 = data[5];
-              x_229 = (0.5 + (f32(x_226) * 0.100000001));
-              x_258_phi = x_229;
-            } else {
-              var x_247 : f32;
-              var x_255 : f32;
-              var x_256_phi : f32;
-              if ((x_180 < 210)) {
-                let x_235 : i32 = data[6];
-                x_238 = (0.5 + (f32(x_235) * 0.100000001));
-                x_257_phi = x_238;
-              } else {
-                if ((x_180 < 240)) {
-                  let x_244 : i32 = data[7];
-                  x_247 = (0.5 + (f32(x_244) * 0.100000001));
-                  x_256_phi = x_247;
-                } else {
-                  if ((x_180 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  let x_252 : i32 = data[8];
-                  x_255 = (0.5 + (f32(x_252) * 0.100000001));
-                  x_256_phi = x_255;
-                }
-                x_256 = x_256_phi;
-                x_257_phi = x_256;
-              }
-              x_257 = x_257_phi;
-              x_258_phi = x_257;
-            }
-            x_258 = x_258_phi;
-          }
-          x_259_phi = x_258;
-        }
-        x_259 = x_259_phi;
-        x_260_phi = x_259;
-      }
-      x_260 = x_260_phi;
-      x_261_phi = x_260;
-    }
-    x_261 = x_261_phi;
-    x_262_phi = x_261;
-  }
-  let x_262 : f32 = x_262_phi;
-  x_GLF_color = vec4<f32>(x_262, x_262, x_262, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.hlsl
deleted file mode 100644
index a73d085..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,357 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int temp[10] = (int[10])0;
-  int data[10] = (int[10])0;
-  float x_189 = 0.0f;
-  float x_261 = 0.0f;
-  int x_63_phi = 0;
-  int x_102_phi = 0;
-  int x_111_phi = 0;
-  float x_262_phi = 0.0f;
-  const float x_60 = asfloat(x_8[0].x);
-  const int x_61 = int(x_60);
-  x_63_phi = x_61;
-  while (true) {
-    int x_99 = 0;
-    int x_97 = 0;
-    int x_95 = 0;
-    int x_93 = 0;
-    int x_91 = 0;
-    int x_89 = 0;
-    int x_87 = 0;
-    int x_85 = 0;
-    int x_83 = 0;
-    int x_81 = 0;
-    int x_64_phi = 0;
-    const int x_63 = x_63_phi;
-    const int x_68 = (x_63 + 1);
-    x_64_phi = x_68;
-    switch(x_63) {
-      case 9: {
-        data[x_63] = -5;
-        x_99 = (x_63 + 1);
-        x_64_phi = x_99;
-        break;
-      }
-      case 8: {
-        data[x_63] = -4;
-        x_97 = (x_63 + 1);
-        x_64_phi = x_97;
-        break;
-      }
-      case 7: {
-        data[x_63] = -3;
-        x_95 = (x_63 + 1);
-        x_64_phi = x_95;
-        break;
-      }
-      case 6: {
-        data[x_63] = -2;
-        x_93 = (x_63 + 1);
-        x_64_phi = x_93;
-        break;
-      }
-      case 5: {
-        data[x_63] = -1;
-        x_91 = (x_63 + 1);
-        x_64_phi = x_91;
-        break;
-      }
-      case 4: {
-        data[x_63] = 0;
-        x_89 = (x_63 + 1);
-        x_64_phi = x_89;
-        break;
-      }
-      case 3: {
-        data[x_63] = 1;
-        x_87 = (x_63 + 1);
-        x_64_phi = x_87;
-        break;
-      }
-      case 2: {
-        data[x_63] = 2;
-        x_85 = (x_63 + 1);
-        x_64_phi = x_85;
-        break;
-      }
-      case 1: {
-        data[x_63] = 3;
-        x_83 = (x_63 + 1);
-        x_64_phi = x_83;
-        break;
-      }
-      case 0: {
-        data[x_63] = 4;
-        x_81 = (x_63 + 1);
-        x_64_phi = x_81;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    const int x_64 = x_64_phi;
-    {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_102_phi = 0;
-  while (true) {
-    int x_103 = 0;
-    const int x_102 = x_102_phi;
-    if ((x_102 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const int x_108 = data[x_102];
-      temp[x_102] = x_108;
-      x_103 = (x_102 + 1);
-      x_102_phi = x_103;
-    }
-  }
-  x_111_phi = 1;
-  while (true) {
-    int x_112 = 0;
-    int x_118_phi = 0;
-    const int x_111 = x_111_phi;
-    if ((x_111 <= 9)) {
-    } else {
-      break;
-    }
-    x_118_phi = 0;
-    while (true) {
-      int x_130 = 0;
-      int x_135 = 0;
-      int x_130_phi = 0;
-      int x_133_phi = 0;
-      int x_135_phi = 0;
-      int x_157_phi = 0;
-      int x_160_phi = 0;
-      int x_170_phi = 0;
-      const int x_118 = x_118_phi;
-      if ((x_118 < 9)) {
-      } else {
-        break;
-      }
-      const int x_124 = (x_118 + x_111);
-      const int x_125 = (x_124 - 1);
-      const int x_119 = (x_118 + (2 * x_111));
-      const int x_128 = min((x_119 - 1), 9);
-      x_130_phi = x_118;
-      x_133_phi = x_124;
-      x_135_phi = x_118;
-      while (true) {
-        int x_150 = 0;
-        int x_153 = 0;
-        int x_134_phi = 0;
-        int x_136_phi = 0;
-        x_130 = x_130_phi;
-        const int x_133 = x_133_phi;
-        x_135 = x_135_phi;
-        bool tint_tmp = (x_135 <= x_125);
-        if (tint_tmp) {
-          tint_tmp = (x_133 <= x_128);
-        }
-        if ((tint_tmp)) {
-        } else {
-          break;
-        }
-        const int x_142_save = x_135;
-        const int x_143 = data[x_142_save];
-        const int x_144_save = x_133;
-        const int x_145 = data[x_144_save];
-        const int x_131 = asint((x_130 + asint(1)));
-        if ((x_143 < x_145)) {
-          x_150 = asint((x_135 + asint(1)));
-          const int x_151 = data[x_142_save];
-          temp[x_130] = x_151;
-          x_134_phi = x_133;
-          x_136_phi = x_150;
-        } else {
-          x_153 = (x_133 + 1);
-          const int x_154 = data[x_144_save];
-          temp[x_130] = x_154;
-          x_134_phi = x_153;
-          x_136_phi = x_135;
-        }
-        const int x_134 = x_134_phi;
-        const int x_136 = x_136_phi;
-        {
-          x_130_phi = x_131;
-          x_133_phi = x_134;
-          x_135_phi = x_136;
-        }
-      }
-      x_157_phi = x_130;
-      x_160_phi = x_135;
-      while (true) {
-        int x_158 = 0;
-        int x_161 = 0;
-        const int x_157 = x_157_phi;
-        const int x_160 = x_160_phi;
-        bool tint_tmp_1 = (x_160 < 10);
-        if (tint_tmp_1) {
-          tint_tmp_1 = (x_160 <= x_125);
-        }
-        if ((tint_tmp_1)) {
-        } else {
-          break;
-        }
-        {
-          x_158 = (x_157 + 1);
-          x_161 = (x_160 + 1);
-          const int x_167 = data[x_160];
-          temp[x_157] = x_167;
-          x_157_phi = x_158;
-          x_160_phi = x_161;
-        }
-      }
-      x_170_phi = x_118;
-      while (true) {
-        int x_171 = 0;
-        const int x_170 = x_170_phi;
-        if ((x_170 <= x_128)) {
-        } else {
-          break;
-        }
-        {
-          const int x_176 = temp[x_170];
-          data[x_170] = x_176;
-          x_171 = (x_170 + 1);
-          x_170_phi = x_171;
-        }
-      }
-      {
-        x_118_phi = x_119;
-      }
-    }
-    {
-      x_112 = (2 * x_111);
-      x_111_phi = x_112;
-    }
-  }
-  int x_180 = 0;
-  float x_198 = 0.0f;
-  float x_260 = 0.0f;
-  float x_261_phi = 0.0f;
-  const float x_179 = gl_FragCoord.y;
-  x_180 = int(x_179);
-  if ((x_180 < 30)) {
-    const int x_186 = data[0];
-    x_189 = (0.5f + (float(x_186) * 0.100000001f));
-    x_262_phi = x_189;
-  } else {
-    float x_207 = 0.0f;
-    float x_259 = 0.0f;
-    float x_260_phi = 0.0f;
-    if ((x_180 < 60)) {
-      const int x_195 = data[1];
-      x_198 = (0.5f + (float(x_195) * 0.100000001f));
-      x_261_phi = x_198;
-    } else {
-      float x_216 = 0.0f;
-      float x_258 = 0.0f;
-      float x_259_phi = 0.0f;
-      if ((x_180 < 90)) {
-        const int x_204 = data[2];
-        x_207 = (0.5f + (float(x_204) * 0.100000001f));
-        x_260_phi = x_207;
-      } else {
-        if ((x_180 < 120)) {
-          const int x_213 = data[3];
-          x_216 = (0.5f + (float(x_213) * 0.100000001f));
-          x_259_phi = x_216;
-        } else {
-          float x_229 = 0.0f;
-          float x_257 = 0.0f;
-          float x_258_phi = 0.0f;
-          if ((x_180 < 150)) {
-            discard;
-          } else {
-            float x_238 = 0.0f;
-            float x_256 = 0.0f;
-            float x_257_phi = 0.0f;
-            if ((x_180 < 180)) {
-              const int x_226 = data[5];
-              x_229 = (0.5f + (float(x_226) * 0.100000001f));
-              x_258_phi = x_229;
-            } else {
-              float x_247 = 0.0f;
-              float x_255 = 0.0f;
-              float x_256_phi = 0.0f;
-              if ((x_180 < 210)) {
-                const int x_235 = data[6];
-                x_238 = (0.5f + (float(x_235) * 0.100000001f));
-                x_257_phi = x_238;
-              } else {
-                if ((x_180 < 240)) {
-                  const int x_244 = data[7];
-                  x_247 = (0.5f + (float(x_244) * 0.100000001f));
-                  x_256_phi = x_247;
-                } else {
-                  if ((x_180 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  const int x_252 = data[8];
-                  x_255 = (0.5f + (float(x_252) * 0.100000001f));
-                  x_256_phi = x_255;
-                }
-                x_256 = x_256_phi;
-                x_257_phi = x_256;
-              }
-              x_257 = x_257_phi;
-              x_258_phi = x_257;
-            }
-            x_258 = x_258_phi;
-          }
-          x_259_phi = x_258;
-        }
-        x_259 = x_259_phi;
-        x_260_phi = x_259;
-      }
-      x_260 = x_260_phi;
-      x_261_phi = x_260;
-    }
-    x_261 = x_261_phi;
-    x_262_phi = x_261;
-  }
-  const float x_262 = x_262_phi;
-  x_GLF_color = float4(x_262, x_262, x_262, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.msl
deleted file mode 100644
index 4f7238a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.msl
+++ /dev/null
@@ -1,352 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  tint_array_wrapper temp = {};
-  tint_array_wrapper data = {};
-  float x_189 = 0.0f;
-  float x_261 = 0.0f;
-  int x_63_phi = 0;
-  int x_102_phi = 0;
-  int x_111_phi = 0;
-  float x_262_phi = 0.0f;
-  float const x_60 = x_8.injectionSwitch.x;
-  int const x_61 = int(x_60);
-  x_63_phi = x_61;
-  while (true) {
-    int x_99 = 0;
-    int x_97 = 0;
-    int x_95 = 0;
-    int x_93 = 0;
-    int x_91 = 0;
-    int x_89 = 0;
-    int x_87 = 0;
-    int x_85 = 0;
-    int x_83 = 0;
-    int x_81 = 0;
-    int x_64_phi = 0;
-    int const x_63 = x_63_phi;
-    int const x_68 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-    x_64_phi = x_68;
-    switch(x_63) {
-      case 9: {
-        data.arr[x_63] = -5;
-        x_99 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_99;
-        break;
-      }
-      case 8: {
-        data.arr[x_63] = -4;
-        x_97 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_97;
-        break;
-      }
-      case 7: {
-        data.arr[x_63] = -3;
-        x_95 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_95;
-        break;
-      }
-      case 6: {
-        data.arr[x_63] = -2;
-        x_93 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_93;
-        break;
-      }
-      case 5: {
-        data.arr[x_63] = -1;
-        x_91 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_91;
-        break;
-      }
-      case 4: {
-        data.arr[x_63] = 0;
-        x_89 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_89;
-        break;
-      }
-      case 3: {
-        data.arr[x_63] = 1;
-        x_87 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_87;
-        break;
-      }
-      case 2: {
-        data.arr[x_63] = 2;
-        x_85 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_85;
-        break;
-      }
-      case 1: {
-        data.arr[x_63] = 3;
-        x_83 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_83;
-        break;
-      }
-      case 0: {
-        data.arr[x_63] = 4;
-        x_81 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
-        x_64_phi = x_81;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_64 = x_64_phi;
-    {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_102_phi = 0;
-  while (true) {
-    int x_103 = 0;
-    int const x_102 = x_102_phi;
-    if ((x_102 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_108 = data.arr[x_102];
-      temp.arr[x_102] = x_108;
-      x_103 = as_type<int>((as_type<uint>(x_102) + as_type<uint>(1)));
-      x_102_phi = x_103;
-    }
-  }
-  x_111_phi = 1;
-  while (true) {
-    int x_112 = 0;
-    int x_118_phi = 0;
-    int const x_111 = x_111_phi;
-    if ((x_111 <= 9)) {
-    } else {
-      break;
-    }
-    x_118_phi = 0;
-    while (true) {
-      int x_130 = 0;
-      int x_135 = 0;
-      int x_130_phi = 0;
-      int x_133_phi = 0;
-      int x_135_phi = 0;
-      int x_157_phi = 0;
-      int x_160_phi = 0;
-      int x_170_phi = 0;
-      int const x_118 = x_118_phi;
-      if ((x_118 < 9)) {
-      } else {
-        break;
-      }
-      int const x_124 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(x_111)));
-      int const x_125 = as_type<int>((as_type<uint>(x_124) - as_type<uint>(1)));
-      int const x_119 = as_type<int>((as_type<uint>(x_118) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_111))))));
-      int const x_128 = min(as_type<int>((as_type<uint>(x_119) - as_type<uint>(1))), 9);
-      x_130_phi = x_118;
-      x_133_phi = x_124;
-      x_135_phi = x_118;
-      while (true) {
-        int x_150 = 0;
-        int x_153 = 0;
-        int x_134_phi = 0;
-        int x_136_phi = 0;
-        x_130 = x_130_phi;
-        int const x_133 = x_133_phi;
-        x_135 = x_135_phi;
-        if (((x_135 <= x_125) && (x_133 <= x_128))) {
-        } else {
-          break;
-        }
-        int const x_142_save = x_135;
-        int const x_143 = data.arr[x_142_save];
-        int const x_144_save = x_133;
-        int const x_145 = data.arr[x_144_save];
-        int const x_131 = as_type<int>(as_type<int>((as_type<uint>(x_130) + as_type<uint>(as_type<int>(1)))));
-        if ((x_143 < x_145)) {
-          x_150 = as_type<int>(as_type<int>((as_type<uint>(x_135) + as_type<uint>(as_type<int>(1)))));
-          int const x_151 = data.arr[x_142_save];
-          temp.arr[x_130] = x_151;
-          x_134_phi = x_133;
-          x_136_phi = x_150;
-        } else {
-          x_153 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
-          int const x_154 = data.arr[x_144_save];
-          temp.arr[x_130] = x_154;
-          x_134_phi = x_153;
-          x_136_phi = x_135;
-        }
-        int const x_134 = x_134_phi;
-        int const x_136 = x_136_phi;
-        {
-          x_130_phi = x_131;
-          x_133_phi = x_134;
-          x_135_phi = x_136;
-        }
-      }
-      x_157_phi = x_130;
-      x_160_phi = x_135;
-      while (true) {
-        int x_158 = 0;
-        int x_161 = 0;
-        int const x_157 = x_157_phi;
-        int const x_160 = x_160_phi;
-        if (((x_160 < 10) && (x_160 <= x_125))) {
-        } else {
-          break;
-        }
-        {
-          x_158 = as_type<int>((as_type<uint>(x_157) + as_type<uint>(1)));
-          x_161 = as_type<int>((as_type<uint>(x_160) + as_type<uint>(1)));
-          int const x_167 = data.arr[x_160];
-          temp.arr[x_157] = x_167;
-          x_157_phi = x_158;
-          x_160_phi = x_161;
-        }
-      }
-      x_170_phi = x_118;
-      while (true) {
-        int x_171 = 0;
-        int const x_170 = x_170_phi;
-        if ((x_170 <= x_128)) {
-        } else {
-          break;
-        }
-        {
-          int const x_176 = temp.arr[x_170];
-          data.arr[x_170] = x_176;
-          x_171 = as_type<int>((as_type<uint>(x_170) + as_type<uint>(1)));
-          x_170_phi = x_171;
-        }
-      }
-      {
-        x_118_phi = x_119;
-      }
-    }
-    {
-      x_112 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_111)));
-      x_111_phi = x_112;
-    }
-  }
-  int x_180 = 0;
-  float x_198 = 0.0f;
-  float x_260 = 0.0f;
-  float x_261_phi = 0.0f;
-  float const x_179 = (*(tint_symbol_3)).y;
-  x_180 = int(x_179);
-  if ((x_180 < 30)) {
-    int const x_186 = data.arr[0];
-    x_189 = (0.5f + (float(x_186) * 0.100000001f));
-    x_262_phi = x_189;
-  } else {
-    float x_207 = 0.0f;
-    float x_259 = 0.0f;
-    float x_260_phi = 0.0f;
-    if ((x_180 < 60)) {
-      int const x_195 = data.arr[1];
-      x_198 = (0.5f + (float(x_195) * 0.100000001f));
-      x_261_phi = x_198;
-    } else {
-      float x_216 = 0.0f;
-      float x_258 = 0.0f;
-      float x_259_phi = 0.0f;
-      if ((x_180 < 90)) {
-        int const x_204 = data.arr[2];
-        x_207 = (0.5f + (float(x_204) * 0.100000001f));
-        x_260_phi = x_207;
-      } else {
-        if ((x_180 < 120)) {
-          int const x_213 = data.arr[3];
-          x_216 = (0.5f + (float(x_213) * 0.100000001f));
-          x_259_phi = x_216;
-        } else {
-          float x_229 = 0.0f;
-          float x_257 = 0.0f;
-          float x_258_phi = 0.0f;
-          if ((x_180 < 150)) {
-            discard_fragment();
-          } else {
-            float x_238 = 0.0f;
-            float x_256 = 0.0f;
-            float x_257_phi = 0.0f;
-            if ((x_180 < 180)) {
-              int const x_226 = data.arr[5];
-              x_229 = (0.5f + (float(x_226) * 0.100000001f));
-              x_258_phi = x_229;
-            } else {
-              float x_247 = 0.0f;
-              float x_255 = 0.0f;
-              float x_256_phi = 0.0f;
-              if ((x_180 < 210)) {
-                int const x_235 = data.arr[6];
-                x_238 = (0.5f + (float(x_235) * 0.100000001f));
-                x_257_phi = x_238;
-              } else {
-                if ((x_180 < 240)) {
-                  int const x_244 = data.arr[7];
-                  x_247 = (0.5f + (float(x_244) * 0.100000001f));
-                  x_256_phi = x_247;
-                } else {
-                  if ((x_180 < 270)) {
-                  } else {
-                    discard_fragment();
-                  }
-                  int const x_252 = data.arr[8];
-                  x_255 = (0.5f + (float(x_252) * 0.100000001f));
-                  x_256_phi = x_255;
-                }
-                x_256 = x_256_phi;
-                x_257_phi = x_256;
-              }
-              x_257 = x_257_phi;
-              x_258_phi = x_257;
-            }
-            x_258 = x_258_phi;
-          }
-          x_259_phi = x_258;
-        }
-        x_259 = x_259_phi;
-        x_260_phi = x_259;
-      }
-      x_260 = x_260_phi;
-      x_261_phi = x_260;
-    }
-    x_261 = x_261_phi;
-    x_262_phi = x_261;
-  }
-  float const x_262 = x_262_phi;
-  *(tint_symbol_4) = float4(x_262, x_262, x_262, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.spvasm
deleted file mode 100644
index 95cd58b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.spvasm
+++ /dev/null
@@ -1,730 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 419
-; Schema: 0
-               OpCapability Shader
-        %164 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %temp "temp"
-               OpName %data "data"
-               OpName %x_189 "x_189"
-               OpName %x_261 "x_261"
-               OpName %x_63_phi "x_63_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %x_111_phi "x_111_phi"
-               OpName %x_262_phi "x_262_phi"
-               OpName %x_99 "x_99"
-               OpName %x_97 "x_97"
-               OpName %x_95 "x_95"
-               OpName %x_93 "x_93"
-               OpName %x_91 "x_91"
-               OpName %x_89 "x_89"
-               OpName %x_87 "x_87"
-               OpName %x_85 "x_85"
-               OpName %x_83 "x_83"
-               OpName %x_81 "x_81"
-               OpName %x_64_phi "x_64_phi"
-               OpName %x_103 "x_103"
-               OpName %x_112 "x_112"
-               OpName %x_118_phi "x_118_phi"
-               OpName %x_130 "x_130"
-               OpName %x_135 "x_135"
-               OpName %x_130_phi "x_130_phi"
-               OpName %x_133_phi "x_133_phi"
-               OpName %x_135_phi "x_135_phi"
-               OpName %x_157_phi "x_157_phi"
-               OpName %x_160_phi "x_160_phi"
-               OpName %x_170_phi "x_170_phi"
-               OpName %x_150 "x_150"
-               OpName %x_153 "x_153"
-               OpName %x_134_phi "x_134_phi"
-               OpName %x_136_phi "x_136_phi"
-               OpName %x_158 "x_158"
-               OpName %x_161 "x_161"
-               OpName %x_171 "x_171"
-               OpName %x_180 "x_180"
-               OpName %x_198 "x_198"
-               OpName %x_260 "x_260"
-               OpName %x_261_phi "x_261_phi"
-               OpName %x_207 "x_207"
-               OpName %x_259 "x_259"
-               OpName %x_260_phi "x_260_phi"
-               OpName %x_216 "x_216"
-               OpName %x_258 "x_258"
-               OpName %x_259_phi "x_259_phi"
-               OpName %x_229 "x_229"
-               OpName %x_257 "x_257"
-               OpName %x_258_phi "x_258_phi"
-               OpName %x_238 "x_238"
-               OpName %x_256 "x_256"
-               OpName %x_257_phi "x_257_phi"
-               OpName %x_247 "x_247"
-               OpName %x_255 "x_255"
-               OpName %x_256_phi "x_256_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %25 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-%float_0_100000001 = OpConstant %float 0.100000001
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %406 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %temp = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-       %data = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-      %x_189 = OpVariable %_ptr_Function_float Function %29
-      %x_261 = OpVariable %_ptr_Function_float Function %29
-   %x_63_phi = OpVariable %_ptr_Function_int Function %33
-  %x_102_phi = OpVariable %_ptr_Function_int Function %33
-  %x_111_phi = OpVariable %_ptr_Function_int Function %33
-  %x_262_phi = OpVariable %_ptr_Function_float Function %29
-       %x_99 = OpVariable %_ptr_Function_int Function %33
-       %x_97 = OpVariable %_ptr_Function_int Function %33
-       %x_95 = OpVariable %_ptr_Function_int Function %33
-       %x_93 = OpVariable %_ptr_Function_int Function %33
-       %x_91 = OpVariable %_ptr_Function_int Function %33
-       %x_89 = OpVariable %_ptr_Function_int Function %33
-       %x_87 = OpVariable %_ptr_Function_int Function %33
-       %x_85 = OpVariable %_ptr_Function_int Function %33
-       %x_83 = OpVariable %_ptr_Function_int Function %33
-       %x_81 = OpVariable %_ptr_Function_int Function %33
-   %x_64_phi = OpVariable %_ptr_Function_int Function %33
-      %x_103 = OpVariable %_ptr_Function_int Function %33
-      %x_112 = OpVariable %_ptr_Function_int Function %33
-  %x_118_phi = OpVariable %_ptr_Function_int Function %33
-      %x_130 = OpVariable %_ptr_Function_int Function %33
-      %x_135 = OpVariable %_ptr_Function_int Function %33
-  %x_130_phi = OpVariable %_ptr_Function_int Function %33
-  %x_133_phi = OpVariable %_ptr_Function_int Function %33
-  %x_135_phi = OpVariable %_ptr_Function_int Function %33
-  %x_157_phi = OpVariable %_ptr_Function_int Function %33
-  %x_160_phi = OpVariable %_ptr_Function_int Function %33
-  %x_170_phi = OpVariable %_ptr_Function_int Function %33
-      %x_150 = OpVariable %_ptr_Function_int Function %33
-      %x_153 = OpVariable %_ptr_Function_int Function %33
-  %x_134_phi = OpVariable %_ptr_Function_int Function %33
-  %x_136_phi = OpVariable %_ptr_Function_int Function %33
-      %x_158 = OpVariable %_ptr_Function_int Function %33
-      %x_161 = OpVariable %_ptr_Function_int Function %33
-      %x_171 = OpVariable %_ptr_Function_int Function %33
-      %x_180 = OpVariable %_ptr_Function_int Function %33
-      %x_198 = OpVariable %_ptr_Function_float Function %29
-      %x_260 = OpVariable %_ptr_Function_float Function %29
-  %x_261_phi = OpVariable %_ptr_Function_float Function %29
-      %x_207 = OpVariable %_ptr_Function_float Function %29
-      %x_259 = OpVariable %_ptr_Function_float Function %29
-  %x_260_phi = OpVariable %_ptr_Function_float Function %29
-      %x_216 = OpVariable %_ptr_Function_float Function %29
-      %x_258 = OpVariable %_ptr_Function_float Function %29
-  %x_259_phi = OpVariable %_ptr_Function_float Function %29
-      %x_229 = OpVariable %_ptr_Function_float Function %29
-      %x_257 = OpVariable %_ptr_Function_float Function %29
-  %x_258_phi = OpVariable %_ptr_Function_float Function %29
-      %x_238 = OpVariable %_ptr_Function_float Function %29
-      %x_256 = OpVariable %_ptr_Function_float Function %29
-  %x_257_phi = OpVariable %_ptr_Function_float Function %29
-      %x_247 = OpVariable %_ptr_Function_float Function %29
-      %x_255 = OpVariable %_ptr_Function_float Function %29
-  %x_256_phi = OpVariable %_ptr_Function_float Function %29
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-               OpStore %x_63_phi %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %57 = OpLoad %int %x_63_phi
-         %59 = OpIAdd %int %57 %int_1
-               OpStore %x_64_phi %59
-               OpSelectionMerge %60 None
-               OpSwitch %57 %61 9 %62 8 %63 7 %64 6 %65 5 %66 4 %67 3 %68 2 %69 1 %70 0 %71
-         %62 = OpLabel
-         %72 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %72 %int_n5
-         %74 = OpIAdd %int %57 %int_1
-               OpStore %x_99 %74
-         %75 = OpLoad %int %x_99
-               OpStore %x_64_phi %75
-               OpBranch %60
-         %63 = OpLabel
-         %76 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %76 %int_n4
-         %78 = OpIAdd %int %57 %int_1
-               OpStore %x_97 %78
-         %79 = OpLoad %int %x_97
-               OpStore %x_64_phi %79
-               OpBranch %60
-         %64 = OpLabel
-         %80 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %80 %int_n3
-         %82 = OpIAdd %int %57 %int_1
-               OpStore %x_95 %82
-         %83 = OpLoad %int %x_95
-               OpStore %x_64_phi %83
-               OpBranch %60
-         %65 = OpLabel
-         %84 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %84 %int_n2
-         %86 = OpIAdd %int %57 %int_1
-               OpStore %x_93 %86
-         %87 = OpLoad %int %x_93
-               OpStore %x_64_phi %87
-               OpBranch %60
-         %66 = OpLabel
-         %88 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %88 %int_n1
-         %90 = OpIAdd %int %57 %int_1
-               OpStore %x_91 %90
-         %91 = OpLoad %int %x_91
-               OpStore %x_64_phi %91
-               OpBranch %60
-         %67 = OpLabel
-         %92 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %92 %int_0
-         %94 = OpIAdd %int %57 %int_1
-               OpStore %x_89 %94
-         %95 = OpLoad %int %x_89
-               OpStore %x_64_phi %95
-               OpBranch %60
-         %68 = OpLabel
-         %96 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %96 %int_1
-         %97 = OpIAdd %int %57 %int_1
-               OpStore %x_87 %97
-         %98 = OpLoad %int %x_87
-               OpStore %x_64_phi %98
-               OpBranch %60
-         %69 = OpLabel
-         %99 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %99 %int_2
-        %101 = OpIAdd %int %57 %int_1
-               OpStore %x_85 %101
-        %102 = OpLoad %int %x_85
-               OpStore %x_64_phi %102
-               OpBranch %60
-         %70 = OpLabel
-        %103 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %103 %int_3
-        %105 = OpIAdd %int %57 %int_1
-               OpStore %x_83 %105
-        %106 = OpLoad %int %x_83
-               OpStore %x_64_phi %106
-               OpBranch %60
-         %71 = OpLabel
-        %107 = OpAccessChain %_ptr_Function_int %data %57
-               OpStore %107 %int_4
-        %109 = OpIAdd %int %57 %int_1
-               OpStore %x_81 %109
-        %110 = OpLoad %int %x_81
-               OpStore %x_64_phi %110
-               OpBranch %60
-         %61 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-        %111 = OpLoad %int %x_64_phi
-               OpBranch %44
-         %44 = OpLabel
-               OpStore %x_63_phi %111
-        %113 = OpSLessThan %bool %111 %int_10
-               OpBranchConditional %113 %42 %43
-         %43 = OpLabel
-               OpStore %x_102_phi %int_0
-               OpBranch %115
-        %115 = OpLabel
-               OpLoopMerge %116 %117 None
-               OpBranch %118
-        %118 = OpLabel
-        %120 = OpLoad %int %x_102_phi
-        %121 = OpSLessThan %bool %120 %int_10
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-               OpBranch %122
-        %124 = OpLabel
-               OpBranch %116
-        %122 = OpLabel
-               OpBranch %117
-        %117 = OpLabel
-        %125 = OpAccessChain %_ptr_Function_int %data %120
-        %126 = OpLoad %int %125
-        %127 = OpAccessChain %_ptr_Function_int %temp %120
-               OpStore %127 %126
-        %128 = OpIAdd %int %120 %int_1
-               OpStore %x_103 %128
-        %129 = OpLoad %int %x_103
-               OpStore %x_102_phi %129
-               OpBranch %115
-        %116 = OpLabel
-               OpStore %x_111_phi %int_1
-               OpBranch %130
-        %130 = OpLabel
-               OpLoopMerge %131 %132 None
-               OpBranch %133
-        %133 = OpLabel
-        %136 = OpLoad %int %x_111_phi
-        %138 = OpSLessThanEqual %bool %136 %int_9
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %131
-        %139 = OpLabel
-               OpStore %x_118_phi %int_0
-               OpBranch %142
-        %142 = OpLabel
-               OpLoopMerge %143 %144 None
-               OpBranch %145
-        %145 = OpLabel
-        %154 = OpLoad %int %x_118_phi
-        %155 = OpSLessThan %bool %154 %int_9
-               OpSelectionMerge %156 None
-               OpBranchConditional %155 %157 %158
-        %157 = OpLabel
-               OpBranch %156
-        %158 = OpLabel
-               OpBranch %143
-        %156 = OpLabel
-        %159 = OpIAdd %int %154 %136
-        %160 = OpISub %int %159 %int_1
-        %161 = OpIMul %int %int_2 %136
-        %162 = OpIAdd %int %154 %161
-        %165 = OpISub %int %162 %int_1
-        %163 = OpExtInst %int %164 SMin %165 %int_9
-               OpStore %x_130_phi %154
-               OpStore %x_133_phi %159
-               OpStore %x_135_phi %154
-               OpBranch %166
-        %166 = OpLabel
-               OpLoopMerge %167 %168 None
-               OpBranch %169
-        %169 = OpLabel
-        %174 = OpLoad %int %x_130_phi
-               OpStore %x_130 %174
-        %175 = OpLoad %int %x_133_phi
-        %176 = OpLoad %int %x_135_phi
-               OpStore %x_135 %176
-        %177 = OpLoad %int %x_135
-        %178 = OpSLessThanEqual %bool %177 %160
-               OpSelectionMerge %179 None
-               OpBranchConditional %178 %180 %179
-        %180 = OpLabel
-        %181 = OpSLessThanEqual %bool %175 %163
-               OpBranch %179
-        %179 = OpLabel
-        %182 = OpPhi %bool %178 %169 %181 %180
-               OpSelectionMerge %183 None
-               OpBranchConditional %182 %184 %185
-        %184 = OpLabel
-               OpBranch %183
-        %185 = OpLabel
-               OpBranch %167
-        %183 = OpLabel
-        %186 = OpLoad %int %x_135
-        %187 = OpAccessChain %_ptr_Function_int %data %186
-        %188 = OpLoad %int %187
-        %189 = OpAccessChain %_ptr_Function_int %data %175
-        %190 = OpLoad %int %189
-        %192 = OpLoad %int %x_130
-        %193 = OpCopyObject %int %int_1
-        %194 = OpIAdd %int %192 %193
-        %191 = OpCopyObject %int %194
-        %195 = OpSLessThan %bool %188 %190
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %198
-        %197 = OpLabel
-        %200 = OpLoad %int %x_135
-        %201 = OpCopyObject %int %int_1
-        %202 = OpIAdd %int %200 %201
-        %199 = OpCopyObject %int %202
-               OpStore %x_150 %199
-        %203 = OpAccessChain %_ptr_Function_int %data %186
-        %204 = OpLoad %int %203
-        %205 = OpLoad %int %x_130
-        %206 = OpAccessChain %_ptr_Function_int %temp %205
-               OpStore %206 %204
-               OpStore %x_134_phi %175
-        %207 = OpLoad %int %x_150
-               OpStore %x_136_phi %207
-               OpBranch %196
-        %198 = OpLabel
-        %208 = OpIAdd %int %175 %int_1
-               OpStore %x_153 %208
-        %209 = OpAccessChain %_ptr_Function_int %data %175
-        %210 = OpLoad %int %209
-        %211 = OpLoad %int %x_130
-        %212 = OpAccessChain %_ptr_Function_int %temp %211
-               OpStore %212 %210
-        %213 = OpLoad %int %x_153
-               OpStore %x_134_phi %213
-        %214 = OpLoad %int %x_135
-               OpStore %x_136_phi %214
-               OpBranch %196
-        %196 = OpLabel
-        %215 = OpLoad %int %x_134_phi
-        %216 = OpLoad %int %x_136_phi
-               OpBranch %168
-        %168 = OpLabel
-               OpStore %x_130_phi %191
-               OpStore %x_133_phi %215
-               OpStore %x_135_phi %216
-               OpBranch %166
-        %167 = OpLabel
-        %217 = OpLoad %int %x_130
-               OpStore %x_157_phi %217
-        %218 = OpLoad %int %x_135
-               OpStore %x_160_phi %218
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %225 = OpLoad %int %x_157_phi
-        %226 = OpLoad %int %x_160_phi
-        %227 = OpSLessThan %bool %226 %int_10
-               OpSelectionMerge %228 None
-               OpBranchConditional %227 %229 %228
-        %229 = OpLabel
-        %230 = OpSLessThanEqual %bool %226 %160
-               OpBranch %228
-        %228 = OpLabel
-        %231 = OpPhi %bool %227 %222 %230 %229
-               OpSelectionMerge %232 None
-               OpBranchConditional %231 %233 %234
-        %233 = OpLabel
-               OpBranch %232
-        %234 = OpLabel
-               OpBranch %220
-        %232 = OpLabel
-               OpBranch %221
-        %221 = OpLabel
-        %235 = OpIAdd %int %225 %int_1
-               OpStore %x_158 %235
-        %236 = OpIAdd %int %226 %int_1
-               OpStore %x_161 %236
-        %237 = OpAccessChain %_ptr_Function_int %data %226
-        %238 = OpLoad %int %237
-        %239 = OpAccessChain %_ptr_Function_int %temp %225
-               OpStore %239 %238
-        %240 = OpLoad %int %x_158
-               OpStore %x_157_phi %240
-        %241 = OpLoad %int %x_161
-               OpStore %x_160_phi %241
-               OpBranch %219
-        %220 = OpLabel
-               OpStore %x_170_phi %154
-               OpBranch %242
-        %242 = OpLabel
-               OpLoopMerge %243 %244 None
-               OpBranch %245
-        %245 = OpLabel
-        %247 = OpLoad %int %x_170_phi
-        %248 = OpSLessThanEqual %bool %247 %163
-               OpSelectionMerge %249 None
-               OpBranchConditional %248 %250 %251
-        %250 = OpLabel
-               OpBranch %249
-        %251 = OpLabel
-               OpBranch %243
-        %249 = OpLabel
-               OpBranch %244
-        %244 = OpLabel
-        %252 = OpAccessChain %_ptr_Function_int %temp %247
-        %253 = OpLoad %int %252
-        %254 = OpAccessChain %_ptr_Function_int %data %247
-               OpStore %254 %253
-        %255 = OpIAdd %int %247 %int_1
-               OpStore %x_171 %255
-        %256 = OpLoad %int %x_171
-               OpStore %x_170_phi %256
-               OpBranch %242
-        %243 = OpLabel
-               OpBranch %144
-        %144 = OpLabel
-               OpStore %x_118_phi %162
-               OpBranch %142
-        %143 = OpLabel
-               OpBranch %132
-        %132 = OpLabel
-        %257 = OpIMul %int %int_2 %136
-               OpStore %x_112 %257
-        %258 = OpLoad %int %x_112
-               OpStore %x_111_phi %258
-               OpBranch %130
-        %131 = OpLabel
-        %265 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %266 = OpLoad %float %265
-        %267 = OpConvertFToS %int %266
-               OpStore %x_180 %267
-        %268 = OpLoad %int %x_180
-        %270 = OpSLessThan %bool %268 %int_30
-               OpSelectionMerge %271 None
-               OpBranchConditional %270 %272 %273
-        %272 = OpLabel
-        %274 = OpAccessChain %_ptr_Function_int %data %int_0
-        %275 = OpLoad %int %274
-        %277 = OpConvertSToF %float %275
-        %279 = OpFMul %float %277 %float_0_100000001
-        %280 = OpFAdd %float %float_0_5 %279
-               OpStore %x_189 %280
-        %281 = OpLoad %float %x_189
-               OpStore %x_262_phi %281
-               OpBranch %271
-        %273 = OpLabel
-        %285 = OpLoad %int %x_180
-        %287 = OpSLessThan %bool %285 %int_60
-               OpSelectionMerge %288 None
-               OpBranchConditional %287 %289 %290
-        %289 = OpLabel
-        %291 = OpAccessChain %_ptr_Function_int %data %int_1
-        %292 = OpLoad %int %291
-        %293 = OpConvertSToF %float %292
-        %294 = OpFMul %float %293 %float_0_100000001
-        %295 = OpFAdd %float %float_0_5 %294
-               OpStore %x_198 %295
-        %296 = OpLoad %float %x_198
-               OpStore %x_261_phi %296
-               OpBranch %288
-        %290 = OpLabel
-        %300 = OpLoad %int %x_180
-        %302 = OpSLessThan %bool %300 %int_90
-               OpSelectionMerge %303 None
-               OpBranchConditional %302 %304 %305
-        %304 = OpLabel
-        %306 = OpAccessChain %_ptr_Function_int %data %int_2
-        %307 = OpLoad %int %306
-        %308 = OpConvertSToF %float %307
-        %309 = OpFMul %float %308 %float_0_100000001
-        %310 = OpFAdd %float %float_0_5 %309
-               OpStore %x_207 %310
-        %311 = OpLoad %float %x_207
-               OpStore %x_260_phi %311
-               OpBranch %303
-        %305 = OpLabel
-        %312 = OpLoad %int %x_180
-        %314 = OpSLessThan %bool %312 %int_120
-               OpSelectionMerge %315 None
-               OpBranchConditional %314 %316 %317
-        %316 = OpLabel
-        %318 = OpAccessChain %_ptr_Function_int %data %int_3
-        %319 = OpLoad %int %318
-        %320 = OpConvertSToF %float %319
-        %321 = OpFMul %float %320 %float_0_100000001
-        %322 = OpFAdd %float %float_0_5 %321
-               OpStore %x_216 %322
-        %323 = OpLoad %float %x_216
-               OpStore %x_259_phi %323
-               OpBranch %315
-        %317 = OpLabel
-        %327 = OpLoad %int %x_180
-        %329 = OpSLessThan %bool %327 %int_150
-               OpSelectionMerge %330 None
-               OpBranchConditional %329 %331 %332
-        %331 = OpLabel
-               OpKill
-        %332 = OpLabel
-        %336 = OpLoad %int %x_180
-        %338 = OpSLessThan %bool %336 %int_180
-               OpSelectionMerge %339 None
-               OpBranchConditional %338 %340 %341
-        %340 = OpLabel
-        %343 = OpAccessChain %_ptr_Function_int %data %int_5
-        %344 = OpLoad %int %343
-        %345 = OpConvertSToF %float %344
-        %346 = OpFMul %float %345 %float_0_100000001
-        %347 = OpFAdd %float %float_0_5 %346
-               OpStore %x_229 %347
-        %348 = OpLoad %float %x_229
-               OpStore %x_258_phi %348
-               OpBranch %339
-        %341 = OpLabel
-        %352 = OpLoad %int %x_180
-        %354 = OpSLessThan %bool %352 %int_210
-               OpSelectionMerge %355 None
-               OpBranchConditional %354 %356 %357
-        %356 = OpLabel
-        %359 = OpAccessChain %_ptr_Function_int %data %int_6
-        %360 = OpLoad %int %359
-        %361 = OpConvertSToF %float %360
-        %362 = OpFMul %float %361 %float_0_100000001
-        %363 = OpFAdd %float %float_0_5 %362
-               OpStore %x_238 %363
-        %364 = OpLoad %float %x_238
-               OpStore %x_257_phi %364
-               OpBranch %355
-        %357 = OpLabel
-        %365 = OpLoad %int %x_180
-        %367 = OpSLessThan %bool %365 %int_240
-               OpSelectionMerge %368 None
-               OpBranchConditional %367 %369 %370
-        %369 = OpLabel
-        %372 = OpAccessChain %_ptr_Function_int %data %int_7
-        %373 = OpLoad %int %372
-        %374 = OpConvertSToF %float %373
-        %375 = OpFMul %float %374 %float_0_100000001
-        %376 = OpFAdd %float %float_0_5 %375
-               OpStore %x_247 %376
-        %377 = OpLoad %float %x_247
-               OpStore %x_256_phi %377
-               OpBranch %368
-        %370 = OpLabel
-        %378 = OpLoad %int %x_180
-        %380 = OpSLessThan %bool %378 %int_270
-               OpSelectionMerge %381 None
-               OpBranchConditional %380 %382 %383
-        %382 = OpLabel
-               OpBranch %381
-        %383 = OpLabel
-               OpKill
-        %381 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %data %int_8
-        %386 = OpLoad %int %385
-        %387 = OpConvertSToF %float %386
-        %388 = OpFMul %float %387 %float_0_100000001
-        %389 = OpFAdd %float %float_0_5 %388
-               OpStore %x_255 %389
-        %390 = OpLoad %float %x_255
-               OpStore %x_256_phi %390
-               OpBranch %368
-        %368 = OpLabel
-        %391 = OpLoad %float %x_256_phi
-               OpStore %x_256 %391
-        %392 = OpLoad %float %x_256
-               OpStore %x_257_phi %392
-               OpBranch %355
-        %355 = OpLabel
-        %393 = OpLoad %float %x_257_phi
-               OpStore %x_257 %393
-        %394 = OpLoad %float %x_257
-               OpStore %x_258_phi %394
-               OpBranch %339
-        %339 = OpLabel
-        %395 = OpLoad %float %x_258_phi
-               OpStore %x_258 %395
-               OpBranch %330
-        %330 = OpLabel
-        %396 = OpLoad %float %x_258
-               OpStore %x_259_phi %396
-               OpBranch %315
-        %315 = OpLabel
-        %397 = OpLoad %float %x_259_phi
-               OpStore %x_259 %397
-        %398 = OpLoad %float %x_259
-               OpStore %x_260_phi %398
-               OpBranch %303
-        %303 = OpLabel
-        %399 = OpLoad %float %x_260_phi
-               OpStore %x_260 %399
-        %400 = OpLoad %float %x_260
-               OpStore %x_261_phi %400
-               OpBranch %288
-        %288 = OpLabel
-        %401 = OpLoad %float %x_261_phi
-               OpStore %x_261 %401
-        %402 = OpLoad %float %x_261
-               OpStore %x_262_phi %402
-               OpBranch %271
-        %271 = OpLabel
-        %403 = OpLoad %float %x_262_phi
-        %405 = OpCompositeConstruct %v4float %403 %403 %403 %float_1
-               OpStore %x_GLF_color %405
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %406
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %410 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %411 = OpFunctionCall %void %main_1
-        %412 = OpLoad %v4float %x_GLF_color
-        %413 = OpCompositeConstruct %main_out %412
-               OpReturnValue %413
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %415 = OpLabel
-        %417 = OpLoad %v4float %gl_FragCoord_param_1
-        %416 = OpFunctionCall %main_out %main_inner %417
-        %418 = OpCompositeExtract %v4float %416 0
-               OpStore %x_GLF_color_1_1 %418
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.wgsl
deleted file mode 100644
index 0d0b64b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-O-prop-up-mutate-var/2.wgsl.expected.wgsl
+++ /dev/null
@@ -1,338 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var temp : array<i32, 10>;
-  var data : array<i32, 10>;
-  var x_189 : f32;
-  var x_261 : f32;
-  var x_63_phi : i32;
-  var x_102_phi : i32;
-  var x_111_phi : i32;
-  var x_262_phi : f32;
-  let x_60 : f32 = x_8.injectionSwitch.x;
-  let x_61 : i32 = i32(x_60);
-  x_63_phi = x_61;
-  loop {
-    var x_99 : i32;
-    var x_97 : i32;
-    var x_95 : i32;
-    var x_93 : i32;
-    var x_91 : i32;
-    var x_89 : i32;
-    var x_87 : i32;
-    var x_85 : i32;
-    var x_83 : i32;
-    var x_81 : i32;
-    var x_64_phi : i32;
-    let x_63 : i32 = x_63_phi;
-    let x_68 : i32 = (x_63 + 1);
-    x_64_phi = x_68;
-    switch(x_63) {
-      case 9: {
-        data[x_63] = -5;
-        x_99 = (x_63 + 1);
-        x_64_phi = x_99;
-      }
-      case 8: {
-        data[x_63] = -4;
-        x_97 = (x_63 + 1);
-        x_64_phi = x_97;
-      }
-      case 7: {
-        data[x_63] = -3;
-        x_95 = (x_63 + 1);
-        x_64_phi = x_95;
-      }
-      case 6: {
-        data[x_63] = -2;
-        x_93 = (x_63 + 1);
-        x_64_phi = x_93;
-      }
-      case 5: {
-        data[x_63] = -1;
-        x_91 = (x_63 + 1);
-        x_64_phi = x_91;
-      }
-      case 4: {
-        data[x_63] = 0;
-        x_89 = (x_63 + 1);
-        x_64_phi = x_89;
-      }
-      case 3: {
-        data[x_63] = 1;
-        x_87 = (x_63 + 1);
-        x_64_phi = x_87;
-      }
-      case 2: {
-        data[x_63] = 2;
-        x_85 = (x_63 + 1);
-        x_64_phi = x_85;
-      }
-      case 1: {
-        data[x_63] = 3;
-        x_83 = (x_63 + 1);
-        x_64_phi = x_83;
-      }
-      case 0: {
-        data[x_63] = 4;
-        x_81 = (x_63 + 1);
-        x_64_phi = x_81;
-      }
-      default: {
-      }
-    }
-    let x_64 : i32 = x_64_phi;
-
-    continuing {
-      x_63_phi = x_64;
-      if ((x_64 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_102_phi = 0;
-  loop {
-    var x_103 : i32;
-    let x_102 : i32 = x_102_phi;
-    if ((x_102 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_108 : i32 = data[x_102];
-      temp[x_102] = x_108;
-      x_103 = (x_102 + 1);
-      x_102_phi = x_103;
-    }
-  }
-  x_111_phi = 1;
-  loop {
-    var x_112 : i32;
-    var x_118_phi : i32;
-    let x_111 : i32 = x_111_phi;
-    if ((x_111 <= 9)) {
-    } else {
-      break;
-    }
-    x_118_phi = 0;
-    loop {
-      var x_130 : i32;
-      var x_135 : i32;
-      var x_130_phi : i32;
-      var x_133_phi : i32;
-      var x_135_phi : i32;
-      var x_157_phi : i32;
-      var x_160_phi : i32;
-      var x_170_phi : i32;
-      let x_118 : i32 = x_118_phi;
-      if ((x_118 < 9)) {
-      } else {
-        break;
-      }
-      let x_124 : i32 = (x_118 + x_111);
-      let x_125 : i32 = (x_124 - 1);
-      let x_119 : i32 = (x_118 + (2 * x_111));
-      let x_128 : i32 = min((x_119 - 1), 9);
-      x_130_phi = x_118;
-      x_133_phi = x_124;
-      x_135_phi = x_118;
-      loop {
-        var x_150 : i32;
-        var x_153 : i32;
-        var x_134_phi : i32;
-        var x_136_phi : i32;
-        x_130 = x_130_phi;
-        let x_133 : i32 = x_133_phi;
-        x_135 = x_135_phi;
-        if (((x_135 <= x_125) && (x_133 <= x_128))) {
-        } else {
-          break;
-        }
-        let x_142 : ptr<function, i32> = &(data[x_135]);
-        let x_143 : i32 = *(x_142);
-        let x_144 : ptr<function, i32> = &(data[x_133]);
-        let x_145 : i32 = *(x_144);
-        let x_131 : i32 = bitcast<i32>((x_130 + bitcast<i32>(1)));
-        if ((x_143 < x_145)) {
-          x_150 = bitcast<i32>((x_135 + bitcast<i32>(1)));
-          let x_151 : i32 = *(x_142);
-          temp[x_130] = x_151;
-          x_134_phi = x_133;
-          x_136_phi = x_150;
-        } else {
-          x_153 = (x_133 + 1);
-          let x_154 : i32 = *(x_144);
-          temp[x_130] = x_154;
-          x_134_phi = x_153;
-          x_136_phi = x_135;
-        }
-        let x_134 : i32 = x_134_phi;
-        let x_136 : i32 = x_136_phi;
-
-        continuing {
-          x_130_phi = x_131;
-          x_133_phi = x_134;
-          x_135_phi = x_136;
-        }
-      }
-      x_157_phi = x_130;
-      x_160_phi = x_135;
-      loop {
-        var x_158 : i32;
-        var x_161 : i32;
-        let x_157 : i32 = x_157_phi;
-        let x_160 : i32 = x_160_phi;
-        if (((x_160 < 10) && (x_160 <= x_125))) {
-        } else {
-          break;
-        }
-
-        continuing {
-          x_158 = (x_157 + 1);
-          x_161 = (x_160 + 1);
-          let x_167 : i32 = data[x_160];
-          temp[x_157] = x_167;
-          x_157_phi = x_158;
-          x_160_phi = x_161;
-        }
-      }
-      x_170_phi = x_118;
-      loop {
-        var x_171 : i32;
-        let x_170 : i32 = x_170_phi;
-        if ((x_170 <= x_128)) {
-        } else {
-          break;
-        }
-
-        continuing {
-          let x_176 : i32 = temp[x_170];
-          data[x_170] = x_176;
-          x_171 = (x_170 + 1);
-          x_170_phi = x_171;
-        }
-      }
-
-      continuing {
-        x_118_phi = x_119;
-      }
-    }
-
-    continuing {
-      x_112 = (2 * x_111);
-      x_111_phi = x_112;
-    }
-  }
-  var x_180 : i32;
-  var x_198 : f32;
-  var x_260 : f32;
-  var x_261_phi : f32;
-  let x_179 : f32 = gl_FragCoord.y;
-  x_180 = i32(x_179);
-  if ((x_180 < 30)) {
-    let x_186 : i32 = data[0];
-    x_189 = (0.5 + (f32(x_186) * 0.100000001));
-    x_262_phi = x_189;
-  } else {
-    var x_207 : f32;
-    var x_259 : f32;
-    var x_260_phi : f32;
-    if ((x_180 < 60)) {
-      let x_195 : i32 = data[1];
-      x_198 = (0.5 + (f32(x_195) * 0.100000001));
-      x_261_phi = x_198;
-    } else {
-      var x_216 : f32;
-      var x_258 : f32;
-      var x_259_phi : f32;
-      if ((x_180 < 90)) {
-        let x_204 : i32 = data[2];
-        x_207 = (0.5 + (f32(x_204) * 0.100000001));
-        x_260_phi = x_207;
-      } else {
-        if ((x_180 < 120)) {
-          let x_213 : i32 = data[3];
-          x_216 = (0.5 + (f32(x_213) * 0.100000001));
-          x_259_phi = x_216;
-        } else {
-          var x_229 : f32;
-          var x_257 : f32;
-          var x_258_phi : f32;
-          if ((x_180 < 150)) {
-            discard;
-          } else {
-            var x_238 : f32;
-            var x_256 : f32;
-            var x_257_phi : f32;
-            if ((x_180 < 180)) {
-              let x_226 : i32 = data[5];
-              x_229 = (0.5 + (f32(x_226) * 0.100000001));
-              x_258_phi = x_229;
-            } else {
-              var x_247 : f32;
-              var x_255 : f32;
-              var x_256_phi : f32;
-              if ((x_180 < 210)) {
-                let x_235 : i32 = data[6];
-                x_238 = (0.5 + (f32(x_235) * 0.100000001));
-                x_257_phi = x_238;
-              } else {
-                if ((x_180 < 240)) {
-                  let x_244 : i32 = data[7];
-                  x_247 = (0.5 + (f32(x_244) * 0.100000001));
-                  x_256_phi = x_247;
-                } else {
-                  if ((x_180 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  let x_252 : i32 = data[8];
-                  x_255 = (0.5 + (f32(x_252) * 0.100000001));
-                  x_256_phi = x_255;
-                }
-                x_256 = x_256_phi;
-                x_257_phi = x_256;
-              }
-              x_257 = x_257_phi;
-              x_258_phi = x_257;
-            }
-            x_258 = x_258_phi;
-          }
-          x_259_phi = x_258;
-        }
-        x_259 = x_259_phi;
-        x_260_phi = x_259;
-      }
-      x_260 = x_260_phi;
-      x_261_phi = x_260;
-    }
-    x_261 = x_261_phi;
-    x_262_phi = x_261;
-  }
-  let x_262 : f32 = x_262_phi;
-  x_GLF_color = vec4<f32>(x_262, x_262, x_262, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.hlsl
deleted file mode 100644
index 0e81ca2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,265 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_251 = from;
-  k = x_251;
-  const int x_252 = from;
-  i = x_252;
-  const int x_253 = mid;
-  j = (x_253 + 1);
-  while (true) {
-    const int x_259 = i;
-    const int x_260 = mid;
-    const int x_262 = j;
-    const int x_263 = to;
-    if (((x_259 <= x_260) & (x_262 <= x_263))) {
-    } else {
-      break;
-    }
-    const int x_269 = data[i];
-    const int x_272 = data[j];
-    if ((x_269 < x_272)) {
-      const int x_277 = k;
-      k = (x_277 + 1);
-      const int x_279 = i;
-      i = (x_279 + 1);
-      const int x_282 = data[x_279];
-      temp[x_277] = x_282;
-    } else {
-      const int x_284 = k;
-      k = (x_284 + 1);
-      const int x_286 = j;
-      j = (x_286 + 1);
-      const int x_289 = data[x_286];
-      temp[x_284] = x_289;
-    }
-  }
-  while (true) {
-    const int x_295 = i;
-    const int x_297 = i;
-    const int x_298 = mid;
-    if (((x_295 < 10) & (x_297 <= x_298))) {
-    } else {
-      break;
-    }
-    const int x_302 = k;
-    k = (x_302 + 1);
-    const int x_304 = i;
-    i = (x_304 + 1);
-    const int x_307 = data[x_304];
-    temp[x_302] = x_307;
-  }
-  const int x_309 = from;
-  i_1 = x_309;
-  while (true) {
-    const int x_314 = i_1;
-    const int x_315 = to;
-    if ((x_314 <= x_315)) {
-    } else {
-      break;
-    }
-    const int x_318 = i_1;
-    const int x_321 = temp[i_1];
-    data[x_318] = x_321;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_84 = asfloat(x_28[0].x);
-  i_3 = int(x_84);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_133 = j_1;
-      const int x_136 = data[j_1];
-      temp[x_133] = x_136;
-    }
-  }
-  mergeSort_();
-  const float x_142 = gl_FragCoord.y;
-  if ((int(x_142) < 30)) {
-    const int x_149 = data[0];
-    grey = (0.5f + (float(x_149) / 10.0f));
-  } else {
-    const float x_154 = gl_FragCoord.y;
-    if ((int(x_154) < 60)) {
-      const int x_161 = data[1];
-      grey = (0.5f + (float(x_161) / 10.0f));
-    } else {
-      const float x_166 = gl_FragCoord.y;
-      if ((int(x_166) < 90)) {
-        const int x_173 = data[2];
-        grey = (0.5f + (float(x_173) / 10.0f));
-      } else {
-        const float x_178 = gl_FragCoord.y;
-        if ((int(x_178) < 120)) {
-          const int x_185 = data[3];
-          grey = (0.5f + (float(x_185) / 10.0f));
-        } else {
-          const float x_190 = gl_FragCoord.y;
-          if ((int(x_190) < 150)) {
-            discard;
-          } else {
-            const float x_197 = gl_FragCoord.y;
-            if ((int(x_197) < 180)) {
-              const int x_204 = data[5];
-              grey = (0.5f + (float(x_204) / 10.0f));
-            } else {
-              const float x_209 = gl_FragCoord.y;
-              if ((int(x_209) < 210)) {
-                const int x_216 = data[6];
-                grey = (0.5f + (float(x_216) / 10.0f));
-              } else {
-                const float x_221 = gl_FragCoord.y;
-                if ((int(x_221) < 240)) {
-                  const int x_228 = data[7];
-                  grey = (0.5f + (float(x_228) / 10.0f));
-                } else {
-                  const float x_233 = gl_FragCoord.y;
-                  if ((int(x_233) < 270)) {
-                    const int x_240 = data[8];
-                    grey = (0.5f + (float(x_240) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_244 = grey;
-  const float3 x_245 = float3(x_244, x_244, x_244);
-  x_GLF_color = float4(x_245.x, x_245.y, x_245.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.msl
deleted file mode 100644
index ac48893..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.msl
+++ /dev/null
@@ -1,320 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_251 = *(from);
-  k = x_251;
-  int const x_252 = *(from);
-  i = x_252;
-  int const x_253 = *(mid);
-  j = as_type<int>((as_type<uint>(x_253) + as_type<uint>(1)));
-  while (true) {
-    int const x_259 = i;
-    int const x_260 = *(mid);
-    int const x_262 = j;
-    int const x_263 = *(to);
-    if (((x_259 <= x_260) & (x_262 <= x_263))) {
-    } else {
-      break;
-    }
-    int const x_267 = i;
-    int const x_269 = (*(tint_symbol_3)).arr[x_267];
-    int const x_270 = j;
-    int const x_272 = (*(tint_symbol_3)).arr[x_270];
-    if ((x_269 < x_272)) {
-      int const x_277 = k;
-      k = as_type<int>((as_type<uint>(x_277) + as_type<uint>(1)));
-      int const x_279 = i;
-      i = as_type<int>((as_type<uint>(x_279) + as_type<uint>(1)));
-      int const x_282 = (*(tint_symbol_3)).arr[x_279];
-      (*(tint_symbol_4)).arr[x_277] = x_282;
-    } else {
-      int const x_284 = k;
-      k = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
-      int const x_286 = j;
-      j = as_type<int>((as_type<uint>(x_286) + as_type<uint>(1)));
-      int const x_289 = (*(tint_symbol_3)).arr[x_286];
-      (*(tint_symbol_4)).arr[x_284] = x_289;
-    }
-  }
-  while (true) {
-    int const x_295 = i;
-    int const x_297 = i;
-    int const x_298 = *(mid);
-    if (((x_295 < 10) & (x_297 <= x_298))) {
-    } else {
-      break;
-    }
-    int const x_302 = k;
-    k = as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
-    int const x_304 = i;
-    i = as_type<int>((as_type<uint>(x_304) + as_type<uint>(1)));
-    int const x_307 = (*(tint_symbol_3)).arr[x_304];
-    (*(tint_symbol_4)).arr[x_302] = x_307;
-  }
-  int const x_309 = *(from);
-  i_1 = x_309;
-  while (true) {
-    int const x_314 = i_1;
-    int const x_315 = *(to);
-    if ((x_314 <= x_315)) {
-    } else {
-      break;
-    }
-    int const x_318 = i_1;
-    int const x_319 = i_1;
-    int const x_321 = (*(tint_symbol_4)).arr[x_319];
-    (*(tint_symbol_3)).arr[x_318] = x_321;
-    {
-      int const x_323 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_323) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_330 = m;
-    int const x_331 = high;
-    if ((x_330 <= x_331)) {
-    } else {
-      break;
-    }
-    int const x_334 = low;
-    i_2 = x_334;
-    while (true) {
-      int const x_339 = i_2;
-      int const x_340 = high;
-      if ((x_339 < x_340)) {
-      } else {
-        break;
-      }
-      int const x_343 = i_2;
-      from_1 = x_343;
-      int const x_344 = i_2;
-      int const x_345 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_344) + as_type<uint>(x_345)))) - as_type<uint>(1)));
-      int const x_348 = i_2;
-      int const x_349 = m;
-      int const x_353 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_348) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_349))))))) - as_type<uint>(1))), x_353);
-      int const x_355 = from_1;
-      param = x_355;
-      int const x_356 = mid_1;
-      param_1 = x_356;
-      int const x_357 = to_1;
-      param_2 = x_357;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_359 = m;
-        int const x_361 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_361) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_359))))));
-      }
-    }
-    {
-      int const x_363 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_363)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_84 = x_28.injectionSwitch.x;
-  i_3 = int(x_84);
-  while (true) {
-    int const x_90 = i_3;
-    switch(x_90) {
-      case 9: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -5;
-        break;
-      }
-      case 8: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -4;
-        break;
-      }
-      case 7: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -3;
-        break;
-      }
-      case 6: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = -2;
-        break;
-      }
-      case 5: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = -1;
-        break;
-      }
-      case 4: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 0;
-        break;
-      }
-      case 3: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 1;
-        break;
-      }
-      case 2: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 2;
-        break;
-      }
-      case 1: {
-        int const x_104 = i_3;
-        (*(tint_symbol_7)).arr[x_104] = 3;
-        break;
-      }
-      case 0: {
-        int const x_102 = i_3;
-        (*(tint_symbol_7)).arr[x_102] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_122 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_122) + as_type<uint>(1)));
-    {
-      int const x_124 = i_3;
-      if ((x_124 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_130 = j_1;
-    if ((x_130 < 10)) {
-    } else {
-      break;
-    }
-    int const x_133 = j_1;
-    int const x_134 = j_1;
-    int const x_136 = (*(tint_symbol_7)).arr[x_134];
-    (*(tint_symbol_8)).arr[x_133] = x_136;
-    {
-      int const x_138 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_138) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_142 = (*(tint_symbol_9)).y;
-  if ((int(x_142) < 30)) {
-    int const x_149 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_149) / 10.0f));
-  } else {
-    float const x_154 = (*(tint_symbol_9)).y;
-    if ((int(x_154) < 60)) {
-      int const x_161 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_161) / 10.0f));
-    } else {
-      float const x_166 = (*(tint_symbol_9)).y;
-      if ((int(x_166) < 90)) {
-        int const x_173 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_173) / 10.0f));
-      } else {
-        float const x_178 = (*(tint_symbol_9)).y;
-        if ((int(x_178) < 120)) {
-          int const x_185 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_185) / 10.0f));
-        } else {
-          float const x_190 = (*(tint_symbol_9)).y;
-          if ((int(x_190) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_197 = (*(tint_symbol_9)).y;
-            if ((int(x_197) < 180)) {
-              int const x_204 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_204) / 10.0f));
-            } else {
-              float const x_209 = (*(tint_symbol_9)).y;
-              if ((int(x_209) < 210)) {
-                int const x_216 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_216) / 10.0f));
-              } else {
-                float const x_221 = (*(tint_symbol_9)).y;
-                if ((int(x_221) < 240)) {
-                  int const x_228 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_228) / 10.0f));
-                } else {
-                  float const x_233 = (*(tint_symbol_9)).y;
-                  if ((int(x_233) < 270)) {
-                    int const x_240 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_240) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_244 = grey;
-  float3 const x_245 = float3(x_244, x_244, x_244);
-  *(tint_symbol_10) = float4(x_245.x, x_245.y, x_245.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.spvasm
deleted file mode 100644
index 6ec2be4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,627 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 409
-; Schema: 0
-               OpCapability Shader
-        %173 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %128 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %197 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %396 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-         %56 = OpSLessThanEqual %bool %51 %53
-         %57 = OpLogicalAnd %bool %54 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %45
-         %58 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Private_int %data %61
-         %64 = OpLoad %int %63
-         %65 = OpLoad %int %j
-         %66 = OpAccessChain %_ptr_Private_int %data %65
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpLoad %int %k
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %k %73
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-         %76 = OpAccessChain %_ptr_Private_int %data %74
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Private_int %temp %72
-               OpStore %78 %77
-               OpBranch %69
-         %71 = OpLabel
-         %79 = OpLoad %int %k
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %k %80
-         %81 = OpLoad %int %j
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %j %82
-         %83 = OpAccessChain %_ptr_Private_int %data %81
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Private_int %temp %79
-               OpStore %85 %84
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i
-         %91 = OpLoad %int %i
-         %93 = OpLoad %int %mid
-         %95 = OpSLessThan %bool %90 %int_10
-         %96 = OpSLessThanEqual %bool %91 %93
-         %97 = OpLogicalAnd %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-               OpBranch %98
-        %100 = OpLabel
-               OpBranch %87
-         %98 = OpLabel
-        %101 = OpLoad %int %k
-        %102 = OpIAdd %int %101 %int_1
-               OpStore %k %102
-        %103 = OpLoad %int %i
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %i %104
-        %105 = OpAccessChain %_ptr_Private_int %data %103
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Private_int %temp %101
-               OpStore %107 %106
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %86
-         %87 = OpLabel
-        %109 = OpLoad %int %from
-               OpStore %i_1 %109
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %i_1
-        %116 = OpLoad %int %to
-        %117 = OpSLessThanEqual %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-               OpBranch %118
-        %120 = OpLabel
-               OpBranch %111
-        %118 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpLoad %int %i_1
-        %123 = OpAccessChain %_ptr_Private_int %temp %122
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Private_int %data %121
-               OpStore %125 %124
-               OpBranch %112
-        %112 = OpLabel
-        %126 = OpLoad %int %i_1
-        %127 = OpIAdd %int %126 %int_1
-               OpStore %i_1 %127
-               OpBranch %110
-        %111 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %128
-        %130 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %143
-        %143 = OpLabel
-               OpLoopMerge %144 %145 None
-               OpBranch %146
-        %146 = OpLabel
-        %147 = OpLoad %int %m
-        %148 = OpLoad %int %high
-        %149 = OpSLessThanEqual %bool %147 %148
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %152
-        %151 = OpLabel
-               OpBranch %150
-        %152 = OpLabel
-               OpBranch %144
-        %150 = OpLabel
-        %153 = OpLoad %int %low
-               OpStore %i_2 %153
-               OpBranch %154
-        %154 = OpLabel
-               OpLoopMerge %155 %156 None
-               OpBranch %157
-        %157 = OpLabel
-        %158 = OpLoad %int %i_2
-        %159 = OpLoad %int %high
-        %160 = OpSLessThan %bool %158 %159
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %163
-        %162 = OpLabel
-               OpBranch %161
-        %163 = OpLabel
-               OpBranch %155
-        %161 = OpLabel
-        %164 = OpLoad %int %i_2
-               OpStore %from_1 %164
-        %165 = OpLoad %int %i_2
-        %166 = OpLoad %int %m
-        %167 = OpIAdd %int %165 %166
-        %168 = OpISub %int %167 %int_1
-               OpStore %mid_1 %168
-        %169 = OpLoad %int %i_2
-        %170 = OpLoad %int %m
-        %171 = OpLoad %int %high
-        %175 = OpIMul %int %int_2 %170
-        %176 = OpIAdd %int %169 %175
-        %177 = OpISub %int %176 %int_1
-        %172 = OpExtInst %int %173 SMin %177 %171
-               OpStore %to_1 %172
-        %178 = OpLoad %int %from_1
-               OpStore %param %178
-        %179 = OpLoad %int %mid_1
-               OpStore %param_1 %179
-        %180 = OpLoad %int %to_1
-               OpStore %param_2 %180
-        %181 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %156
-        %156 = OpLabel
-        %185 = OpLoad %int %m
-        %186 = OpLoad %int %i_2
-        %187 = OpIMul %int %int_2 %185
-        %188 = OpIAdd %int %186 %187
-               OpStore %i_2 %188
-               OpBranch %154
-        %155 = OpLabel
-               OpBranch %145
-        %145 = OpLabel
-        %189 = OpLoad %int %m
-        %190 = OpIMul %int %int_2 %189
-               OpStore %m %190
-               OpBranch %143
-        %144 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %128
-        %192 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %197
-        %200 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %201 = OpLoad %float %200
-        %202 = OpConvertFToS %int %201
-               OpStore %i_3 %202
-               OpBranch %203
-        %203 = OpLabel
-               OpLoopMerge %204 %205 None
-               OpBranch %206
-        %206 = OpLabel
-        %207 = OpLoad %int %i_3
-               OpSelectionMerge %208 None
-               OpSwitch %207 %209 9 %210 8 %211 7 %212 6 %213 5 %214 4 %215 3 %216 2 %217 1 %218 0 %219
-        %210 = OpLabel
-        %220 = OpLoad %int %i_3
-        %221 = OpAccessChain %_ptr_Private_int %data %220
-               OpStore %221 %int_n5
-               OpBranch %208
-        %211 = OpLabel
-        %223 = OpLoad %int %i_3
-        %224 = OpAccessChain %_ptr_Private_int %data %223
-               OpStore %224 %int_n4
-               OpBranch %208
-        %212 = OpLabel
-        %226 = OpLoad %int %i_3
-        %227 = OpAccessChain %_ptr_Private_int %data %226
-               OpStore %227 %int_n3
-               OpBranch %208
-        %213 = OpLabel
-        %229 = OpLoad %int %i_3
-        %230 = OpAccessChain %_ptr_Private_int %data %229
-               OpStore %230 %int_n2
-               OpBranch %208
-        %214 = OpLabel
-        %232 = OpLoad %int %i_3
-        %233 = OpAccessChain %_ptr_Private_int %data %232
-               OpStore %233 %int_n1
-               OpBranch %208
-        %215 = OpLabel
-        %235 = OpLoad %int %i_3
-        %236 = OpAccessChain %_ptr_Private_int %data %235
-               OpStore %236 %int_0
-               OpBranch %208
-        %216 = OpLabel
-        %237 = OpLoad %int %i_3
-        %238 = OpAccessChain %_ptr_Private_int %data %237
-               OpStore %238 %int_1
-               OpBranch %208
-        %217 = OpLabel
-        %239 = OpLoad %int %i_3
-        %240 = OpAccessChain %_ptr_Private_int %data %239
-               OpStore %240 %int_2
-               OpBranch %208
-        %218 = OpLabel
-        %241 = OpLoad %int %i_3
-        %242 = OpAccessChain %_ptr_Private_int %data %241
-               OpStore %242 %int_3
-               OpBranch %208
-        %219 = OpLabel
-        %244 = OpLoad %int %i_3
-        %245 = OpAccessChain %_ptr_Private_int %data %244
-               OpStore %245 %int_4
-               OpBranch %208
-        %209 = OpLabel
-               OpBranch %208
-        %208 = OpLabel
-        %247 = OpLoad %int %i_3
-        %248 = OpIAdd %int %247 %int_1
-               OpStore %i_3 %248
-               OpBranch %205
-        %205 = OpLabel
-        %249 = OpLoad %int %i_3
-        %250 = OpSLessThan %bool %249 %int_10
-               OpBranchConditional %250 %203 %204
-        %204 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %251
-        %251 = OpLabel
-               OpLoopMerge %252 %253 None
-               OpBranch %254
-        %254 = OpLabel
-        %255 = OpLoad %int %j_1
-        %256 = OpSLessThan %bool %255 %int_10
-               OpSelectionMerge %257 None
-               OpBranchConditional %256 %258 %259
-        %258 = OpLabel
-               OpBranch %257
-        %259 = OpLabel
-               OpBranch %252
-        %257 = OpLabel
-        %260 = OpLoad %int %j_1
-        %261 = OpLoad %int %j_1
-        %262 = OpAccessChain %_ptr_Private_int %data %261
-        %263 = OpLoad %int %262
-        %264 = OpAccessChain %_ptr_Private_int %temp %260
-               OpStore %264 %263
-               OpBranch %253
-        %253 = OpLabel
-        %265 = OpLoad %int %j_1
-        %266 = OpIAdd %int %265 %int_1
-               OpStore %j_1 %266
-               OpBranch %251
-        %252 = OpLabel
-        %267 = OpFunctionCall %void %mergeSort_
-        %270 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %271 = OpLoad %float %270
-        %272 = OpConvertFToS %int %271
-        %274 = OpSLessThan %bool %272 %int_30
-               OpSelectionMerge %275 None
-               OpBranchConditional %274 %276 %277
-        %276 = OpLabel
-        %278 = OpAccessChain %_ptr_Private_int %data %int_0
-        %279 = OpLoad %int %278
-        %281 = OpConvertSToF %float %279
-        %283 = OpFDiv %float %281 %float_10
-        %284 = OpFAdd %float %float_0_5 %283
-               OpStore %grey %284
-               OpBranch %275
-        %277 = OpLabel
-        %285 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %286 = OpLoad %float %285
-        %287 = OpConvertFToS %int %286
-        %289 = OpSLessThan %bool %287 %int_60
-               OpSelectionMerge %290 None
-               OpBranchConditional %289 %291 %292
-        %291 = OpLabel
-        %293 = OpAccessChain %_ptr_Private_int %data %int_1
-        %294 = OpLoad %int %293
-        %295 = OpConvertSToF %float %294
-        %296 = OpFDiv %float %295 %float_10
-        %297 = OpFAdd %float %float_0_5 %296
-               OpStore %grey %297
-               OpBranch %290
-        %292 = OpLabel
-        %298 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %299 = OpLoad %float %298
-        %300 = OpConvertFToS %int %299
-        %302 = OpSLessThan %bool %300 %int_90
-               OpSelectionMerge %303 None
-               OpBranchConditional %302 %304 %305
-        %304 = OpLabel
-        %306 = OpAccessChain %_ptr_Private_int %data %int_2
-        %307 = OpLoad %int %306
-        %308 = OpConvertSToF %float %307
-        %309 = OpFDiv %float %308 %float_10
-        %310 = OpFAdd %float %float_0_5 %309
-               OpStore %grey %310
-               OpBranch %303
-        %305 = OpLabel
-        %311 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %312 = OpLoad %float %311
-        %313 = OpConvertFToS %int %312
-        %315 = OpSLessThan %bool %313 %int_120
-               OpSelectionMerge %316 None
-               OpBranchConditional %315 %317 %318
-        %317 = OpLabel
-        %319 = OpAccessChain %_ptr_Private_int %data %int_3
-        %320 = OpLoad %int %319
-        %321 = OpConvertSToF %float %320
-        %322 = OpFDiv %float %321 %float_10
-        %323 = OpFAdd %float %float_0_5 %322
-               OpStore %grey %323
-               OpBranch %316
-        %318 = OpLabel
-        %324 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %325 = OpLoad %float %324
-        %326 = OpConvertFToS %int %325
-        %328 = OpSLessThan %bool %326 %int_150
-               OpSelectionMerge %329 None
-               OpBranchConditional %328 %330 %331
-        %330 = OpLabel
-               OpKill
-        %331 = OpLabel
-        %332 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %333 = OpLoad %float %332
-        %334 = OpConvertFToS %int %333
-        %336 = OpSLessThan %bool %334 %int_180
-               OpSelectionMerge %337 None
-               OpBranchConditional %336 %338 %339
-        %338 = OpLabel
-        %341 = OpAccessChain %_ptr_Private_int %data %int_5
-        %342 = OpLoad %int %341
-        %343 = OpConvertSToF %float %342
-        %344 = OpFDiv %float %343 %float_10
-        %345 = OpFAdd %float %float_0_5 %344
-               OpStore %grey %345
-               OpBranch %337
-        %339 = OpLabel
-        %346 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %347 = OpLoad %float %346
-        %348 = OpConvertFToS %int %347
-        %350 = OpSLessThan %bool %348 %int_210
-               OpSelectionMerge %351 None
-               OpBranchConditional %350 %352 %353
-        %352 = OpLabel
-        %355 = OpAccessChain %_ptr_Private_int %data %int_6
-        %356 = OpLoad %int %355
-        %357 = OpConvertSToF %float %356
-        %358 = OpFDiv %float %357 %float_10
-        %359 = OpFAdd %float %float_0_5 %358
-               OpStore %grey %359
-               OpBranch %351
-        %353 = OpLabel
-        %360 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %361 = OpLoad %float %360
-        %362 = OpConvertFToS %int %361
-        %364 = OpSLessThan %bool %362 %int_240
-               OpSelectionMerge %365 None
-               OpBranchConditional %364 %366 %367
-        %366 = OpLabel
-        %369 = OpAccessChain %_ptr_Private_int %data %int_7
-        %370 = OpLoad %int %369
-        %371 = OpConvertSToF %float %370
-        %372 = OpFDiv %float %371 %float_10
-        %373 = OpFAdd %float %float_0_5 %372
-               OpStore %grey %373
-               OpBranch %365
-        %367 = OpLabel
-        %374 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %375 = OpLoad %float %374
-        %376 = OpConvertFToS %int %375
-        %378 = OpSLessThan %bool %376 %int_270
-               OpSelectionMerge %379 None
-               OpBranchConditional %378 %380 %381
-        %380 = OpLabel
-        %383 = OpAccessChain %_ptr_Private_int %data %int_8
-        %384 = OpLoad %int %383
-        %385 = OpConvertSToF %float %384
-        %386 = OpFDiv %float %385 %float_10
-        %387 = OpFAdd %float %float_0_5 %386
-               OpStore %grey %387
-               OpBranch %379
-        %381 = OpLabel
-               OpKill
-        %379 = OpLabel
-               OpBranch %365
-        %365 = OpLabel
-               OpBranch %351
-        %351 = OpLabel
-               OpBranch %337
-        %337 = OpLabel
-               OpBranch %329
-        %329 = OpLabel
-               OpBranch %316
-        %316 = OpLabel
-               OpBranch %303
-        %303 = OpLabel
-               OpBranch %290
-        %290 = OpLabel
-               OpBranch %275
-        %275 = OpLabel
-        %388 = OpLoad %float %grey
-        %390 = OpCompositeConstruct %v3float %388 %388 %388
-        %391 = OpCompositeExtract %float %390 0
-        %392 = OpCompositeExtract %float %390 1
-        %393 = OpCompositeExtract %float %390 2
-        %395 = OpCompositeConstruct %v4float %391 %392 %393 %float_1
-               OpStore %x_GLF_color %395
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %396
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %400 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %401 = OpFunctionCall %void %main_1
-        %402 = OpLoad %v4float %x_GLF_color
-        %403 = OpCompositeConstruct %main_out %402
-               OpReturnValue %403
-               OpFunctionEnd
-       %main = OpFunction %void None %128
-        %405 = OpLabel
-        %407 = OpLoad %v4float %gl_FragCoord_param_1
-        %406 = OpFunctionCall %main_out %main_inner %407
-        %408 = OpCompositeExtract %v4float %406 0
-               OpStore %x_GLF_color_1_1 %408
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.wgsl
deleted file mode 100644
index 9c02946..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,306 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_251 : i32 = *(from);
-  k = x_251;
-  let x_252 : i32 = *(from);
-  i = x_252;
-  let x_253 : i32 = *(mid);
-  j = (x_253 + 1);
-  loop {
-    let x_259 : i32 = i;
-    let x_260 : i32 = *(mid);
-    let x_262 : i32 = j;
-    let x_263 : i32 = *(to);
-    if (((x_259 <= x_260) & (x_262 <= x_263))) {
-    } else {
-      break;
-    }
-    let x_267 : i32 = i;
-    let x_269 : i32 = data[x_267];
-    let x_270 : i32 = j;
-    let x_272 : i32 = data[x_270];
-    if ((x_269 < x_272)) {
-      let x_277 : i32 = k;
-      k = (x_277 + 1);
-      let x_279 : i32 = i;
-      i = (x_279 + 1);
-      let x_282 : i32 = data[x_279];
-      temp[x_277] = x_282;
-    } else {
-      let x_284 : i32 = k;
-      k = (x_284 + 1);
-      let x_286 : i32 = j;
-      j = (x_286 + 1);
-      let x_289 : i32 = data[x_286];
-      temp[x_284] = x_289;
-    }
-  }
-  loop {
-    let x_295 : i32 = i;
-    let x_297 : i32 = i;
-    let x_298 : i32 = *(mid);
-    if (((x_295 < 10) & (x_297 <= x_298))) {
-    } else {
-      break;
-    }
-    let x_302 : i32 = k;
-    k = (x_302 + 1);
-    let x_304 : i32 = i;
-    i = (x_304 + 1);
-    let x_307 : i32 = data[x_304];
-    temp[x_302] = x_307;
-  }
-  let x_309 : i32 = *(from);
-  i_1 = x_309;
-  loop {
-    let x_314 : i32 = i_1;
-    let x_315 : i32 = *(to);
-    if ((x_314 <= x_315)) {
-    } else {
-      break;
-    }
-    let x_318 : i32 = i_1;
-    let x_319 : i32 = i_1;
-    let x_321 : i32 = temp[x_319];
-    data[x_318] = x_321;
-
-    continuing {
-      let x_323 : i32 = i_1;
-      i_1 = (x_323 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_330 : i32 = m;
-    let x_331 : i32 = high;
-    if ((x_330 <= x_331)) {
-    } else {
-      break;
-    }
-    let x_334 : i32 = low;
-    i_2 = x_334;
-    loop {
-      let x_339 : i32 = i_2;
-      let x_340 : i32 = high;
-      if ((x_339 < x_340)) {
-      } else {
-        break;
-      }
-      let x_343 : i32 = i_2;
-      from_1 = x_343;
-      let x_344 : i32 = i_2;
-      let x_345 : i32 = m;
-      mid_1 = ((x_344 + x_345) - 1);
-      let x_348 : i32 = i_2;
-      let x_349 : i32 = m;
-      let x_353 : i32 = high;
-      to_1 = min(((x_348 + (2 * x_349)) - 1), x_353);
-      let x_355 : i32 = from_1;
-      param = x_355;
-      let x_356 : i32 = mid_1;
-      param_1 = x_356;
-      let x_357 : i32 = to_1;
-      param_2 = x_357;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_359 : i32 = m;
-        let x_361 : i32 = i_2;
-        i_2 = (x_361 + (2 * x_359));
-      }
-    }
-
-    continuing {
-      let x_363 : i32 = m;
-      m = (2 * x_363);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_84 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_84);
-  loop {
-    let x_90 : i32 = i_3;
-    switch(x_90) {
-      case 9: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -5;
-      }
-      case 8: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -4;
-      }
-      case 7: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -3;
-      }
-      case 6: {
-        let x_114 : i32 = i_3;
-        data[x_114] = -2;
-      }
-      case 5: {
-        let x_112 : i32 = i_3;
-        data[x_112] = -1;
-      }
-      case 4: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 0;
-      }
-      case 3: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 1;
-      }
-      case 2: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 2;
-      }
-      case 1: {
-        let x_104 : i32 = i_3;
-        data[x_104] = 3;
-      }
-      case 0: {
-        let x_102 : i32 = i_3;
-        data[x_102] = 4;
-      }
-      default: {
-      }
-    }
-    let x_122 : i32 = i_3;
-    i_3 = (x_122 + 1);
-
-    continuing {
-      let x_124 : i32 = i_3;
-      if ((x_124 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_130 : i32 = j_1;
-    if ((x_130 < 10)) {
-    } else {
-      break;
-    }
-    let x_133 : i32 = j_1;
-    let x_134 : i32 = j_1;
-    let x_136 : i32 = data[x_134];
-    temp[x_133] = x_136;
-
-    continuing {
-      let x_138 : i32 = j_1;
-      j_1 = (x_138 + 1);
-    }
-  }
-  mergeSort_();
-  let x_142 : f32 = gl_FragCoord.y;
-  if ((i32(x_142) < 30)) {
-    let x_149 : i32 = data[0];
-    grey = (0.5 + (f32(x_149) / 10.0));
-  } else {
-    let x_154 : f32 = gl_FragCoord.y;
-    if ((i32(x_154) < 60)) {
-      let x_161 : i32 = data[1];
-      grey = (0.5 + (f32(x_161) / 10.0));
-    } else {
-      let x_166 : f32 = gl_FragCoord.y;
-      if ((i32(x_166) < 90)) {
-        let x_173 : i32 = data[2];
-        grey = (0.5 + (f32(x_173) / 10.0));
-      } else {
-        let x_178 : f32 = gl_FragCoord.y;
-        if ((i32(x_178) < 120)) {
-          let x_185 : i32 = data[3];
-          grey = (0.5 + (f32(x_185) / 10.0));
-        } else {
-          let x_190 : f32 = gl_FragCoord.y;
-          if ((i32(x_190) < 150)) {
-            discard;
-          } else {
-            let x_197 : f32 = gl_FragCoord.y;
-            if ((i32(x_197) < 180)) {
-              let x_204 : i32 = data[5];
-              grey = (0.5 + (f32(x_204) / 10.0));
-            } else {
-              let x_209 : f32 = gl_FragCoord.y;
-              if ((i32(x_209) < 210)) {
-                let x_216 : i32 = data[6];
-                grey = (0.5 + (f32(x_216) / 10.0));
-              } else {
-                let x_221 : f32 = gl_FragCoord.y;
-                if ((i32(x_221) < 240)) {
-                  let x_228 : i32 = data[7];
-                  grey = (0.5 + (f32(x_228) / 10.0));
-                } else {
-                  let x_233 : f32 = gl_FragCoord.y;
-                  if ((i32(x_233) < 270)) {
-                    let x_240 : i32 = data[8];
-                    grey = (0.5 + (f32(x_240) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_244 : f32 = grey;
-  let x_245 : vec3<f32> = vec3<f32>(x_244, x_244, x_244);
-  x_GLF_color = vec4<f32>(x_245.x, x_245.y, x_245.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.hlsl
deleted file mode 100644
index d127e3e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,273 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_251 = from;
-  k = x_251;
-  const int x_252 = from;
-  i = x_252;
-  const int x_253 = mid;
-  j = (x_253 + 1);
-  while (true) {
-    const int x_259 = i;
-    const int x_260 = mid;
-    const int x_262 = j;
-    const int x_263 = to;
-    bool tint_tmp = (x_259 <= x_260);
-    if (tint_tmp) {
-      tint_tmp = (x_262 <= x_263);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_269 = data[i];
-    const int x_272 = data[j];
-    if ((x_269 < x_272)) {
-      const int x_277 = k;
-      k = (x_277 + 1);
-      const int x_279 = i;
-      i = (x_279 + 1);
-      const int x_282 = data[x_279];
-      temp[x_277] = x_282;
-    } else {
-      const int x_284 = k;
-      k = (x_284 + 1);
-      const int x_286 = j;
-      j = (x_286 + 1);
-      const int x_289 = data[x_286];
-      temp[x_284] = x_289;
-    }
-  }
-  while (true) {
-    const int x_295 = i;
-    const int x_297 = i;
-    const int x_298 = mid;
-    bool tint_tmp_1 = (x_295 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_297 <= x_298);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_302 = k;
-    k = (x_302 + 1);
-    const int x_304 = i;
-    i = (x_304 + 1);
-    const int x_307 = data[x_304];
-    temp[x_302] = x_307;
-  }
-  const int x_309 = from;
-  i_1 = x_309;
-  while (true) {
-    const int x_314 = i_1;
-    const int x_315 = to;
-    if ((x_314 <= x_315)) {
-    } else {
-      break;
-    }
-    const int x_318 = i_1;
-    const int x_321 = temp[i_1];
-    data[x_318] = x_321;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_84 = asfloat(x_28[0].x);
-  i_3 = int(x_84);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_133 = j_1;
-      const int x_136 = data[j_1];
-      temp[x_133] = x_136;
-    }
-  }
-  mergeSort_();
-  const float x_142 = gl_FragCoord.y;
-  if ((int(x_142) < 30)) {
-    const int x_149 = data[0];
-    grey = (0.5f + (float(x_149) / 10.0f));
-  } else {
-    const float x_154 = gl_FragCoord.y;
-    if ((int(x_154) < 60)) {
-      const int x_161 = data[1];
-      grey = (0.5f + (float(x_161) / 10.0f));
-    } else {
-      const float x_166 = gl_FragCoord.y;
-      if ((int(x_166) < 90)) {
-        const int x_173 = data[2];
-        grey = (0.5f + (float(x_173) / 10.0f));
-      } else {
-        const float x_178 = gl_FragCoord.y;
-        if ((int(x_178) < 120)) {
-          const int x_185 = data[3];
-          grey = (0.5f + (float(x_185) / 10.0f));
-        } else {
-          const float x_190 = gl_FragCoord.y;
-          if ((int(x_190) < 150)) {
-            discard;
-          } else {
-            const float x_197 = gl_FragCoord.y;
-            if ((int(x_197) < 180)) {
-              const int x_204 = data[5];
-              grey = (0.5f + (float(x_204) / 10.0f));
-            } else {
-              const float x_209 = gl_FragCoord.y;
-              if ((int(x_209) < 210)) {
-                const int x_216 = data[6];
-                grey = (0.5f + (float(x_216) / 10.0f));
-              } else {
-                const float x_221 = gl_FragCoord.y;
-                if ((int(x_221) < 240)) {
-                  const int x_228 = data[7];
-                  grey = (0.5f + (float(x_228) / 10.0f));
-                } else {
-                  const float x_233 = gl_FragCoord.y;
-                  if ((int(x_233) < 270)) {
-                    const int x_240 = data[8];
-                    grey = (0.5f + (float(x_240) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_244 = grey;
-  const float3 x_245 = float3(x_244, x_244, x_244);
-  x_GLF_color = float4(x_245.x, x_245.y, x_245.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.msl
deleted file mode 100644
index 1002492..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.msl
+++ /dev/null
@@ -1,320 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_251 = *(from);
-  k = x_251;
-  int const x_252 = *(from);
-  i = x_252;
-  int const x_253 = *(mid);
-  j = as_type<int>((as_type<uint>(x_253) + as_type<uint>(1)));
-  while (true) {
-    int const x_259 = i;
-    int const x_260 = *(mid);
-    int const x_262 = j;
-    int const x_263 = *(to);
-    if (((x_259 <= x_260) && (x_262 <= x_263))) {
-    } else {
-      break;
-    }
-    int const x_267 = i;
-    int const x_269 = (*(tint_symbol_3)).arr[x_267];
-    int const x_270 = j;
-    int const x_272 = (*(tint_symbol_3)).arr[x_270];
-    if ((x_269 < x_272)) {
-      int const x_277 = k;
-      k = as_type<int>((as_type<uint>(x_277) + as_type<uint>(1)));
-      int const x_279 = i;
-      i = as_type<int>((as_type<uint>(x_279) + as_type<uint>(1)));
-      int const x_282 = (*(tint_symbol_3)).arr[x_279];
-      (*(tint_symbol_4)).arr[x_277] = x_282;
-    } else {
-      int const x_284 = k;
-      k = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
-      int const x_286 = j;
-      j = as_type<int>((as_type<uint>(x_286) + as_type<uint>(1)));
-      int const x_289 = (*(tint_symbol_3)).arr[x_286];
-      (*(tint_symbol_4)).arr[x_284] = x_289;
-    }
-  }
-  while (true) {
-    int const x_295 = i;
-    int const x_297 = i;
-    int const x_298 = *(mid);
-    if (((x_295 < 10) && (x_297 <= x_298))) {
-    } else {
-      break;
-    }
-    int const x_302 = k;
-    k = as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
-    int const x_304 = i;
-    i = as_type<int>((as_type<uint>(x_304) + as_type<uint>(1)));
-    int const x_307 = (*(tint_symbol_3)).arr[x_304];
-    (*(tint_symbol_4)).arr[x_302] = x_307;
-  }
-  int const x_309 = *(from);
-  i_1 = x_309;
-  while (true) {
-    int const x_314 = i_1;
-    int const x_315 = *(to);
-    if ((x_314 <= x_315)) {
-    } else {
-      break;
-    }
-    int const x_318 = i_1;
-    int const x_319 = i_1;
-    int const x_321 = (*(tint_symbol_4)).arr[x_319];
-    (*(tint_symbol_3)).arr[x_318] = x_321;
-    {
-      int const x_323 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_323) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_330 = m;
-    int const x_331 = high;
-    if ((x_330 <= x_331)) {
-    } else {
-      break;
-    }
-    int const x_334 = low;
-    i_2 = x_334;
-    while (true) {
-      int const x_339 = i_2;
-      int const x_340 = high;
-      if ((x_339 < x_340)) {
-      } else {
-        break;
-      }
-      int const x_343 = i_2;
-      from_1 = x_343;
-      int const x_344 = i_2;
-      int const x_345 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_344) + as_type<uint>(x_345)))) - as_type<uint>(1)));
-      int const x_348 = i_2;
-      int const x_349 = m;
-      int const x_353 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_348) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_349))))))) - as_type<uint>(1))), x_353);
-      int const x_355 = from_1;
-      param = x_355;
-      int const x_356 = mid_1;
-      param_1 = x_356;
-      int const x_357 = to_1;
-      param_2 = x_357;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_359 = m;
-        int const x_361 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_361) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_359))))));
-      }
-    }
-    {
-      int const x_363 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_363)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_84 = x_28.injectionSwitch.x;
-  i_3 = int(x_84);
-  while (true) {
-    int const x_90 = i_3;
-    switch(x_90) {
-      case 9: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -5;
-        break;
-      }
-      case 8: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -4;
-        break;
-      }
-      case 7: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -3;
-        break;
-      }
-      case 6: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = -2;
-        break;
-      }
-      case 5: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = -1;
-        break;
-      }
-      case 4: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 0;
-        break;
-      }
-      case 3: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 1;
-        break;
-      }
-      case 2: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 2;
-        break;
-      }
-      case 1: {
-        int const x_104 = i_3;
-        (*(tint_symbol_7)).arr[x_104] = 3;
-        break;
-      }
-      case 0: {
-        int const x_102 = i_3;
-        (*(tint_symbol_7)).arr[x_102] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_122 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_122) + as_type<uint>(1)));
-    {
-      int const x_124 = i_3;
-      if ((x_124 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_130 = j_1;
-    if ((x_130 < 10)) {
-    } else {
-      break;
-    }
-    int const x_133 = j_1;
-    int const x_134 = j_1;
-    int const x_136 = (*(tint_symbol_7)).arr[x_134];
-    (*(tint_symbol_8)).arr[x_133] = x_136;
-    {
-      int const x_138 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_138) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_142 = (*(tint_symbol_9)).y;
-  if ((int(x_142) < 30)) {
-    int const x_149 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_149) / 10.0f));
-  } else {
-    float const x_154 = (*(tint_symbol_9)).y;
-    if ((int(x_154) < 60)) {
-      int const x_161 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_161) / 10.0f));
-    } else {
-      float const x_166 = (*(tint_symbol_9)).y;
-      if ((int(x_166) < 90)) {
-        int const x_173 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_173) / 10.0f));
-      } else {
-        float const x_178 = (*(tint_symbol_9)).y;
-        if ((int(x_178) < 120)) {
-          int const x_185 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_185) / 10.0f));
-        } else {
-          float const x_190 = (*(tint_symbol_9)).y;
-          if ((int(x_190) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_197 = (*(tint_symbol_9)).y;
-            if ((int(x_197) < 180)) {
-              int const x_204 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_204) / 10.0f));
-            } else {
-              float const x_209 = (*(tint_symbol_9)).y;
-              if ((int(x_209) < 210)) {
-                int const x_216 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_216) / 10.0f));
-              } else {
-                float const x_221 = (*(tint_symbol_9)).y;
-                if ((int(x_221) < 240)) {
-                  int const x_228 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_228) / 10.0f));
-                } else {
-                  float const x_233 = (*(tint_symbol_9)).y;
-                  if ((int(x_233) < 270)) {
-                    int const x_240 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_240) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_244 = grey;
-  float3 const x_245 = float3(x_244, x_244, x_244);
-  *(tint_symbol_10) = float4(x_245.x, x_245.y, x_245.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.spvasm
deleted file mode 100644
index 25a6bc2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,637 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 413
-; Schema: 0
-               OpCapability Shader
-        %177 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %132 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %201 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %400 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %56
-         %57 = OpLabel
-         %58 = OpSLessThanEqual %bool %51 %53
-               OpBranch %56
-         %56 = OpLabel
-         %59 = OpPhi %bool %54 %47 %58 %57
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %45
-         %60 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Private_int %data %63
-         %66 = OpLoad %int %65
-         %67 = OpLoad %int %j
-         %68 = OpAccessChain %_ptr_Private_int %data %67
-         %69 = OpLoad %int %68
-         %70 = OpSLessThan %bool %66 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpLoad %int %k
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %k %75
-         %76 = OpLoad %int %i
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %i %77
-         %78 = OpAccessChain %_ptr_Private_int %data %76
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Private_int %temp %74
-               OpStore %80 %79
-               OpBranch %71
-         %73 = OpLabel
-         %81 = OpLoad %int %k
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %k %82
-         %83 = OpLoad %int %j
-         %84 = OpIAdd %int %83 %int_1
-               OpStore %j %84
-         %85 = OpAccessChain %_ptr_Private_int %data %83
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Private_int %temp %81
-               OpStore %87 %86
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-               OpLoopMerge %89 %90 None
-               OpBranch %91
-         %91 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpLoad %int %i
-         %95 = OpLoad %int %mid
-         %97 = OpSLessThan %bool %92 %int_10
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpSLessThanEqual %bool %93 %95
-               OpBranch %98
-         %98 = OpLabel
-        %101 = OpPhi %bool %97 %91 %100 %99
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpBranch %102
-        %104 = OpLabel
-               OpBranch %89
-        %102 = OpLabel
-        %105 = OpLoad %int %k
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %k %106
-        %107 = OpLoad %int %i
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %i %108
-        %109 = OpAccessChain %_ptr_Private_int %data %107
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Private_int %temp %105
-               OpStore %111 %110
-               OpBranch %90
-         %90 = OpLabel
-               OpBranch %88
-         %89 = OpLabel
-        %113 = OpLoad %int %from
-               OpStore %i_1 %113
-               OpBranch %114
-        %114 = OpLabel
-               OpLoopMerge %115 %116 None
-               OpBranch %117
-        %117 = OpLabel
-        %118 = OpLoad %int %i_1
-        %120 = OpLoad %int %to
-        %121 = OpSLessThanEqual %bool %118 %120
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-               OpBranch %122
-        %124 = OpLabel
-               OpBranch %115
-        %122 = OpLabel
-        %125 = OpLoad %int %i_1
-        %126 = OpLoad %int %i_1
-        %127 = OpAccessChain %_ptr_Private_int %temp %126
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Private_int %data %125
-               OpStore %129 %128
-               OpBranch %116
-        %116 = OpLabel
-        %130 = OpLoad %int %i_1
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %i_1 %131
-               OpBranch %114
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %132
-        %134 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %147
-        %147 = OpLabel
-               OpLoopMerge %148 %149 None
-               OpBranch %150
-        %150 = OpLabel
-        %151 = OpLoad %int %m
-        %152 = OpLoad %int %high
-        %153 = OpSLessThanEqual %bool %151 %152
-               OpSelectionMerge %154 None
-               OpBranchConditional %153 %155 %156
-        %155 = OpLabel
-               OpBranch %154
-        %156 = OpLabel
-               OpBranch %148
-        %154 = OpLabel
-        %157 = OpLoad %int %low
-               OpStore %i_2 %157
-               OpBranch %158
-        %158 = OpLabel
-               OpLoopMerge %159 %160 None
-               OpBranch %161
-        %161 = OpLabel
-        %162 = OpLoad %int %i_2
-        %163 = OpLoad %int %high
-        %164 = OpSLessThan %bool %162 %163
-               OpSelectionMerge %165 None
-               OpBranchConditional %164 %166 %167
-        %166 = OpLabel
-               OpBranch %165
-        %167 = OpLabel
-               OpBranch %159
-        %165 = OpLabel
-        %168 = OpLoad %int %i_2
-               OpStore %from_1 %168
-        %169 = OpLoad %int %i_2
-        %170 = OpLoad %int %m
-        %171 = OpIAdd %int %169 %170
-        %172 = OpISub %int %171 %int_1
-               OpStore %mid_1 %172
-        %173 = OpLoad %int %i_2
-        %174 = OpLoad %int %m
-        %175 = OpLoad %int %high
-        %179 = OpIMul %int %int_2 %174
-        %180 = OpIAdd %int %173 %179
-        %181 = OpISub %int %180 %int_1
-        %176 = OpExtInst %int %177 SMin %181 %175
-               OpStore %to_1 %176
-        %182 = OpLoad %int %from_1
-               OpStore %param %182
-        %183 = OpLoad %int %mid_1
-               OpStore %param_1 %183
-        %184 = OpLoad %int %to_1
-               OpStore %param_2 %184
-        %185 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %160
-        %160 = OpLabel
-        %189 = OpLoad %int %m
-        %190 = OpLoad %int %i_2
-        %191 = OpIMul %int %int_2 %189
-        %192 = OpIAdd %int %190 %191
-               OpStore %i_2 %192
-               OpBranch %158
-        %159 = OpLabel
-               OpBranch %149
-        %149 = OpLabel
-        %193 = OpLoad %int %m
-        %194 = OpIMul %int %int_2 %193
-               OpStore %m %194
-               OpBranch %147
-        %148 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %132
-        %196 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %201
-        %204 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %205 = OpLoad %float %204
-        %206 = OpConvertFToS %int %205
-               OpStore %i_3 %206
-               OpBranch %207
-        %207 = OpLabel
-               OpLoopMerge %208 %209 None
-               OpBranch %210
-        %210 = OpLabel
-        %211 = OpLoad %int %i_3
-               OpSelectionMerge %212 None
-               OpSwitch %211 %213 9 %214 8 %215 7 %216 6 %217 5 %218 4 %219 3 %220 2 %221 1 %222 0 %223
-        %214 = OpLabel
-        %224 = OpLoad %int %i_3
-        %225 = OpAccessChain %_ptr_Private_int %data %224
-               OpStore %225 %int_n5
-               OpBranch %212
-        %215 = OpLabel
-        %227 = OpLoad %int %i_3
-        %228 = OpAccessChain %_ptr_Private_int %data %227
-               OpStore %228 %int_n4
-               OpBranch %212
-        %216 = OpLabel
-        %230 = OpLoad %int %i_3
-        %231 = OpAccessChain %_ptr_Private_int %data %230
-               OpStore %231 %int_n3
-               OpBranch %212
-        %217 = OpLabel
-        %233 = OpLoad %int %i_3
-        %234 = OpAccessChain %_ptr_Private_int %data %233
-               OpStore %234 %int_n2
-               OpBranch %212
-        %218 = OpLabel
-        %236 = OpLoad %int %i_3
-        %237 = OpAccessChain %_ptr_Private_int %data %236
-               OpStore %237 %int_n1
-               OpBranch %212
-        %219 = OpLabel
-        %239 = OpLoad %int %i_3
-        %240 = OpAccessChain %_ptr_Private_int %data %239
-               OpStore %240 %int_0
-               OpBranch %212
-        %220 = OpLabel
-        %241 = OpLoad %int %i_3
-        %242 = OpAccessChain %_ptr_Private_int %data %241
-               OpStore %242 %int_1
-               OpBranch %212
-        %221 = OpLabel
-        %243 = OpLoad %int %i_3
-        %244 = OpAccessChain %_ptr_Private_int %data %243
-               OpStore %244 %int_2
-               OpBranch %212
-        %222 = OpLabel
-        %245 = OpLoad %int %i_3
-        %246 = OpAccessChain %_ptr_Private_int %data %245
-               OpStore %246 %int_3
-               OpBranch %212
-        %223 = OpLabel
-        %248 = OpLoad %int %i_3
-        %249 = OpAccessChain %_ptr_Private_int %data %248
-               OpStore %249 %int_4
-               OpBranch %212
-        %213 = OpLabel
-               OpBranch %212
-        %212 = OpLabel
-        %251 = OpLoad %int %i_3
-        %252 = OpIAdd %int %251 %int_1
-               OpStore %i_3 %252
-               OpBranch %209
-        %209 = OpLabel
-        %253 = OpLoad %int %i_3
-        %254 = OpSLessThan %bool %253 %int_10
-               OpBranchConditional %254 %207 %208
-        %208 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %255
-        %255 = OpLabel
-               OpLoopMerge %256 %257 None
-               OpBranch %258
-        %258 = OpLabel
-        %259 = OpLoad %int %j_1
-        %260 = OpSLessThan %bool %259 %int_10
-               OpSelectionMerge %261 None
-               OpBranchConditional %260 %262 %263
-        %262 = OpLabel
-               OpBranch %261
-        %263 = OpLabel
-               OpBranch %256
-        %261 = OpLabel
-        %264 = OpLoad %int %j_1
-        %265 = OpLoad %int %j_1
-        %266 = OpAccessChain %_ptr_Private_int %data %265
-        %267 = OpLoad %int %266
-        %268 = OpAccessChain %_ptr_Private_int %temp %264
-               OpStore %268 %267
-               OpBranch %257
-        %257 = OpLabel
-        %269 = OpLoad %int %j_1
-        %270 = OpIAdd %int %269 %int_1
-               OpStore %j_1 %270
-               OpBranch %255
-        %256 = OpLabel
-        %271 = OpFunctionCall %void %mergeSort_
-        %274 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %275 = OpLoad %float %274
-        %276 = OpConvertFToS %int %275
-        %278 = OpSLessThan %bool %276 %int_30
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
-        %282 = OpAccessChain %_ptr_Private_int %data %int_0
-        %283 = OpLoad %int %282
-        %285 = OpConvertSToF %float %283
-        %287 = OpFDiv %float %285 %float_10
-        %288 = OpFAdd %float %float_0_5 %287
-               OpStore %grey %288
-               OpBranch %279
-        %281 = OpLabel
-        %289 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %290 = OpLoad %float %289
-        %291 = OpConvertFToS %int %290
-        %293 = OpSLessThan %bool %291 %int_60
-               OpSelectionMerge %294 None
-               OpBranchConditional %293 %295 %296
-        %295 = OpLabel
-        %297 = OpAccessChain %_ptr_Private_int %data %int_1
-        %298 = OpLoad %int %297
-        %299 = OpConvertSToF %float %298
-        %300 = OpFDiv %float %299 %float_10
-        %301 = OpFAdd %float %float_0_5 %300
-               OpStore %grey %301
-               OpBranch %294
-        %296 = OpLabel
-        %302 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %303 = OpLoad %float %302
-        %304 = OpConvertFToS %int %303
-        %306 = OpSLessThan %bool %304 %int_90
-               OpSelectionMerge %307 None
-               OpBranchConditional %306 %308 %309
-        %308 = OpLabel
-        %310 = OpAccessChain %_ptr_Private_int %data %int_2
-        %311 = OpLoad %int %310
-        %312 = OpConvertSToF %float %311
-        %313 = OpFDiv %float %312 %float_10
-        %314 = OpFAdd %float %float_0_5 %313
-               OpStore %grey %314
-               OpBranch %307
-        %309 = OpLabel
-        %315 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %316 = OpLoad %float %315
-        %317 = OpConvertFToS %int %316
-        %319 = OpSLessThan %bool %317 %int_120
-               OpSelectionMerge %320 None
-               OpBranchConditional %319 %321 %322
-        %321 = OpLabel
-        %323 = OpAccessChain %_ptr_Private_int %data %int_3
-        %324 = OpLoad %int %323
-        %325 = OpConvertSToF %float %324
-        %326 = OpFDiv %float %325 %float_10
-        %327 = OpFAdd %float %float_0_5 %326
-               OpStore %grey %327
-               OpBranch %320
-        %322 = OpLabel
-        %328 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %329 = OpLoad %float %328
-        %330 = OpConvertFToS %int %329
-        %332 = OpSLessThan %bool %330 %int_150
-               OpSelectionMerge %333 None
-               OpBranchConditional %332 %334 %335
-        %334 = OpLabel
-               OpKill
-        %335 = OpLabel
-        %336 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %337 = OpLoad %float %336
-        %338 = OpConvertFToS %int %337
-        %340 = OpSLessThan %bool %338 %int_180
-               OpSelectionMerge %341 None
-               OpBranchConditional %340 %342 %343
-        %342 = OpLabel
-        %345 = OpAccessChain %_ptr_Private_int %data %int_5
-        %346 = OpLoad %int %345
-        %347 = OpConvertSToF %float %346
-        %348 = OpFDiv %float %347 %float_10
-        %349 = OpFAdd %float %float_0_5 %348
-               OpStore %grey %349
-               OpBranch %341
-        %343 = OpLabel
-        %350 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %351 = OpLoad %float %350
-        %352 = OpConvertFToS %int %351
-        %354 = OpSLessThan %bool %352 %int_210
-               OpSelectionMerge %355 None
-               OpBranchConditional %354 %356 %357
-        %356 = OpLabel
-        %359 = OpAccessChain %_ptr_Private_int %data %int_6
-        %360 = OpLoad %int %359
-        %361 = OpConvertSToF %float %360
-        %362 = OpFDiv %float %361 %float_10
-        %363 = OpFAdd %float %float_0_5 %362
-               OpStore %grey %363
-               OpBranch %355
-        %357 = OpLabel
-        %364 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %365 = OpLoad %float %364
-        %366 = OpConvertFToS %int %365
-        %368 = OpSLessThan %bool %366 %int_240
-               OpSelectionMerge %369 None
-               OpBranchConditional %368 %370 %371
-        %370 = OpLabel
-        %373 = OpAccessChain %_ptr_Private_int %data %int_7
-        %374 = OpLoad %int %373
-        %375 = OpConvertSToF %float %374
-        %376 = OpFDiv %float %375 %float_10
-        %377 = OpFAdd %float %float_0_5 %376
-               OpStore %grey %377
-               OpBranch %369
-        %371 = OpLabel
-        %378 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %379 = OpLoad %float %378
-        %380 = OpConvertFToS %int %379
-        %382 = OpSLessThan %bool %380 %int_270
-               OpSelectionMerge %383 None
-               OpBranchConditional %382 %384 %385
-        %384 = OpLabel
-        %387 = OpAccessChain %_ptr_Private_int %data %int_8
-        %388 = OpLoad %int %387
-        %389 = OpConvertSToF %float %388
-        %390 = OpFDiv %float %389 %float_10
-        %391 = OpFAdd %float %float_0_5 %390
-               OpStore %grey %391
-               OpBranch %383
-        %385 = OpLabel
-               OpKill
-        %383 = OpLabel
-               OpBranch %369
-        %369 = OpLabel
-               OpBranch %355
-        %355 = OpLabel
-               OpBranch %341
-        %341 = OpLabel
-               OpBranch %333
-        %333 = OpLabel
-               OpBranch %320
-        %320 = OpLabel
-               OpBranch %307
-        %307 = OpLabel
-               OpBranch %294
-        %294 = OpLabel
-               OpBranch %279
-        %279 = OpLabel
-        %392 = OpLoad %float %grey
-        %394 = OpCompositeConstruct %v3float %392 %392 %392
-        %395 = OpCompositeExtract %float %394 0
-        %396 = OpCompositeExtract %float %394 1
-        %397 = OpCompositeExtract %float %394 2
-        %399 = OpCompositeConstruct %v4float %395 %396 %397 %float_1
-               OpStore %x_GLF_color %399
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %400
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %404 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %405 = OpFunctionCall %void %main_1
-        %406 = OpLoad %v4float %x_GLF_color
-        %407 = OpCompositeConstruct %main_out %406
-               OpReturnValue %407
-               OpFunctionEnd
-       %main = OpFunction %void None %132
-        %409 = OpLabel
-        %411 = OpLoad %v4float %gl_FragCoord_param_1
-        %410 = OpFunctionCall %main_out %main_inner %411
-        %412 = OpCompositeExtract %v4float %410 0
-               OpStore %x_GLF_color_1_1 %412
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.wgsl
deleted file mode 100644
index c8f464e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,306 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_251 : i32 = *(from);
-  k = x_251;
-  let x_252 : i32 = *(from);
-  i = x_252;
-  let x_253 : i32 = *(mid);
-  j = (x_253 + 1);
-  loop {
-    let x_259 : i32 = i;
-    let x_260 : i32 = *(mid);
-    let x_262 : i32 = j;
-    let x_263 : i32 = *(to);
-    if (((x_259 <= x_260) && (x_262 <= x_263))) {
-    } else {
-      break;
-    }
-    let x_267 : i32 = i;
-    let x_269 : i32 = data[x_267];
-    let x_270 : i32 = j;
-    let x_272 : i32 = data[x_270];
-    if ((x_269 < x_272)) {
-      let x_277 : i32 = k;
-      k = (x_277 + 1);
-      let x_279 : i32 = i;
-      i = (x_279 + 1);
-      let x_282 : i32 = data[x_279];
-      temp[x_277] = x_282;
-    } else {
-      let x_284 : i32 = k;
-      k = (x_284 + 1);
-      let x_286 : i32 = j;
-      j = (x_286 + 1);
-      let x_289 : i32 = data[x_286];
-      temp[x_284] = x_289;
-    }
-  }
-  loop {
-    let x_295 : i32 = i;
-    let x_297 : i32 = i;
-    let x_298 : i32 = *(mid);
-    if (((x_295 < 10) && (x_297 <= x_298))) {
-    } else {
-      break;
-    }
-    let x_302 : i32 = k;
-    k = (x_302 + 1);
-    let x_304 : i32 = i;
-    i = (x_304 + 1);
-    let x_307 : i32 = data[x_304];
-    temp[x_302] = x_307;
-  }
-  let x_309 : i32 = *(from);
-  i_1 = x_309;
-  loop {
-    let x_314 : i32 = i_1;
-    let x_315 : i32 = *(to);
-    if ((x_314 <= x_315)) {
-    } else {
-      break;
-    }
-    let x_318 : i32 = i_1;
-    let x_319 : i32 = i_1;
-    let x_321 : i32 = temp[x_319];
-    data[x_318] = x_321;
-
-    continuing {
-      let x_323 : i32 = i_1;
-      i_1 = (x_323 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_330 : i32 = m;
-    let x_331 : i32 = high;
-    if ((x_330 <= x_331)) {
-    } else {
-      break;
-    }
-    let x_334 : i32 = low;
-    i_2 = x_334;
-    loop {
-      let x_339 : i32 = i_2;
-      let x_340 : i32 = high;
-      if ((x_339 < x_340)) {
-      } else {
-        break;
-      }
-      let x_343 : i32 = i_2;
-      from_1 = x_343;
-      let x_344 : i32 = i_2;
-      let x_345 : i32 = m;
-      mid_1 = ((x_344 + x_345) - 1);
-      let x_348 : i32 = i_2;
-      let x_349 : i32 = m;
-      let x_353 : i32 = high;
-      to_1 = min(((x_348 + (2 * x_349)) - 1), x_353);
-      let x_355 : i32 = from_1;
-      param = x_355;
-      let x_356 : i32 = mid_1;
-      param_1 = x_356;
-      let x_357 : i32 = to_1;
-      param_2 = x_357;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_359 : i32 = m;
-        let x_361 : i32 = i_2;
-        i_2 = (x_361 + (2 * x_359));
-      }
-    }
-
-    continuing {
-      let x_363 : i32 = m;
-      m = (2 * x_363);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_84 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_84);
-  loop {
-    let x_90 : i32 = i_3;
-    switch(x_90) {
-      case 9: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -5;
-      }
-      case 8: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -4;
-      }
-      case 7: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -3;
-      }
-      case 6: {
-        let x_114 : i32 = i_3;
-        data[x_114] = -2;
-      }
-      case 5: {
-        let x_112 : i32 = i_3;
-        data[x_112] = -1;
-      }
-      case 4: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 0;
-      }
-      case 3: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 1;
-      }
-      case 2: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 2;
-      }
-      case 1: {
-        let x_104 : i32 = i_3;
-        data[x_104] = 3;
-      }
-      case 0: {
-        let x_102 : i32 = i_3;
-        data[x_102] = 4;
-      }
-      default: {
-      }
-    }
-    let x_122 : i32 = i_3;
-    i_3 = (x_122 + 1);
-
-    continuing {
-      let x_124 : i32 = i_3;
-      if ((x_124 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_130 : i32 = j_1;
-    if ((x_130 < 10)) {
-    } else {
-      break;
-    }
-    let x_133 : i32 = j_1;
-    let x_134 : i32 = j_1;
-    let x_136 : i32 = data[x_134];
-    temp[x_133] = x_136;
-
-    continuing {
-      let x_138 : i32 = j_1;
-      j_1 = (x_138 + 1);
-    }
-  }
-  mergeSort_();
-  let x_142 : f32 = gl_FragCoord.y;
-  if ((i32(x_142) < 30)) {
-    let x_149 : i32 = data[0];
-    grey = (0.5 + (f32(x_149) / 10.0));
-  } else {
-    let x_154 : f32 = gl_FragCoord.y;
-    if ((i32(x_154) < 60)) {
-      let x_161 : i32 = data[1];
-      grey = (0.5 + (f32(x_161) / 10.0));
-    } else {
-      let x_166 : f32 = gl_FragCoord.y;
-      if ((i32(x_166) < 90)) {
-        let x_173 : i32 = data[2];
-        grey = (0.5 + (f32(x_173) / 10.0));
-      } else {
-        let x_178 : f32 = gl_FragCoord.y;
-        if ((i32(x_178) < 120)) {
-          let x_185 : i32 = data[3];
-          grey = (0.5 + (f32(x_185) / 10.0));
-        } else {
-          let x_190 : f32 = gl_FragCoord.y;
-          if ((i32(x_190) < 150)) {
-            discard;
-          } else {
-            let x_197 : f32 = gl_FragCoord.y;
-            if ((i32(x_197) < 180)) {
-              let x_204 : i32 = data[5];
-              grey = (0.5 + (f32(x_204) / 10.0));
-            } else {
-              let x_209 : f32 = gl_FragCoord.y;
-              if ((i32(x_209) < 210)) {
-                let x_216 : i32 = data[6];
-                grey = (0.5 + (f32(x_216) / 10.0));
-              } else {
-                let x_221 : f32 = gl_FragCoord.y;
-                if ((i32(x_221) < 240)) {
-                  let x_228 : i32 = data[7];
-                  grey = (0.5 + (f32(x_228) / 10.0));
-                } else {
-                  let x_233 : f32 = gl_FragCoord.y;
-                  if ((i32(x_233) < 270)) {
-                    let x_240 : i32 = data[8];
-                    grey = (0.5 + (f32(x_240) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_244 : f32 = grey;
-  let x_245 : vec3<f32> = vec3<f32>(x_244, x_244, x_244);
-  x_GLF_color = vec4<f32>(x_245.x, x_245.y, x_245.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.hlsl
deleted file mode 100644
index fc8977b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,285 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_262 = from;
-  k = x_262;
-  const int x_263 = from;
-  i = x_263;
-  const int x_264 = mid;
-  j = (x_264 + 1);
-  while (true) {
-    const int x_270 = i;
-    const int x_271 = mid;
-    const int x_273 = j;
-    const int x_274 = to;
-    if (((x_270 <= x_271) & (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    const int x_280 = data[i];
-    const int x_283 = data[j];
-    if ((x_280 < x_283)) {
-      const int x_288 = k;
-      k = (x_288 + 1);
-      const int x_290 = i;
-      i = (x_290 + 1);
-      const int x_293 = data[x_290];
-      temp[x_288] = x_293;
-    } else {
-      const int x_295 = k;
-      k = (x_295 + 1);
-      const int x_297 = j;
-      j = (x_297 + 1);
-      const int x_300 = data[x_297];
-      temp[x_295] = x_300;
-    }
-  }
-  while (true) {
-    const int x_306 = i;
-    const int x_308 = i;
-    const int x_309 = mid;
-    if (((x_306 < 10) & (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    const int x_313 = k;
-    k = (x_313 + 1);
-    const int x_315 = i;
-    i = (x_315 + 1);
-    const int x_318 = data[x_315];
-    temp[x_313] = x_318;
-  }
-  const int x_320 = from;
-  i_1 = x_320;
-  while (true) {
-    const int x_325 = i_1;
-    const int x_326 = to;
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    const int x_329 = i_1;
-    const int x_332 = temp[i_1];
-    data[x_329] = x_332;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_86 = asfloat(x_28[0].x);
-  i_3 = int(x_86);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    const bool x_133 = (j_1 < 10);
-    const float x_135 = asfloat(x_28[0].x);
-    if (!((x_135 <= 1.0f))) {
-      grey = 1.0f;
-    }
-    if (x_133) {
-    } else {
-      break;
-    }
-    const int x_140 = j_1;
-    const int x_143 = data[j_1];
-    temp[x_140] = x_143;
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  mergeSort_();
-  const float x_149 = gl_FragCoord.y;
-  if ((int(x_149) < 30)) {
-    const int x_156 = data[0];
-    grey = (0.5f + (float(x_156) / 10.0f));
-  } else {
-    const float x_161 = gl_FragCoord.y;
-    if ((int(x_161) < 60)) {
-      const int x_168 = data[1];
-      grey = (0.5f + (float(x_168) / 10.0f));
-    } else {
-      const float x_173 = gl_FragCoord.y;
-      if ((int(x_173) < 90)) {
-        const int x_180 = data[2];
-        grey = (0.5f + (float(x_180) / 10.0f));
-      } else {
-        const float x_185 = gl_FragCoord.y;
-        if ((int(x_185) < 120)) {
-          const int x_192 = data[3];
-          grey = (0.5f + (float(x_192) / 10.0f));
-        } else {
-          const float x_197 = gl_FragCoord.y;
-          if ((int(x_197) < 150)) {
-            discard;
-          } else {
-            const float x_204 = gl_FragCoord.y;
-            if ((int(x_204) < 180)) {
-              const int x_211 = data[5];
-              grey = (0.5f + (float(x_211) / 10.0f));
-            } else {
-              const float x_216 = gl_FragCoord.y;
-              if ((int(x_216) < 210)) {
-                const int x_223 = data[6];
-                grey = (0.5f + (float(x_223) / 10.0f));
-              } else {
-                const float x_228 = gl_FragCoord.y;
-                if ((int(x_228) < 240)) {
-                  const int x_235 = data[7];
-                  grey = (0.5f + (float(x_235) / 10.0f));
-                } else {
-                  const float x_240 = gl_FragCoord.y;
-                  bool guard233 = true;
-                  if ((int(x_240) < 270)) {
-                    const int x_247 = data[8];
-                    grey = (0.5f + (float(x_247) / 10.0f));
-                    guard233 = false;
-                  } else {
-                    if (guard233) {
-                      const float x_252 = asfloat(x_28[0].y);
-                      if (!((0.0f < x_252))) {
-                        guard233 = false;
-                      }
-                      if (guard233) {
-                        discard;
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_255 = grey;
-  const float3 x_256 = float3(x_255, x_255, x_255);
-  x_GLF_color = float4(x_256.x, x_256.y, x_256.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.msl
deleted file mode 100644
index 95be486..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.msl
+++ /dev/null
@@ -1,335 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_262 = *(from);
-  k = x_262;
-  int const x_263 = *(from);
-  i = x_263;
-  int const x_264 = *(mid);
-  j = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-  while (true) {
-    int const x_270 = i;
-    int const x_271 = *(mid);
-    int const x_273 = j;
-    int const x_274 = *(to);
-    if (((x_270 <= x_271) & (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    int const x_278 = i;
-    int const x_280 = (*(tint_symbol_3)).arr[x_278];
-    int const x_281 = j;
-    int const x_283 = (*(tint_symbol_3)).arr[x_281];
-    if ((x_280 < x_283)) {
-      int const x_288 = k;
-      k = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
-      int const x_290 = i;
-      i = as_type<int>((as_type<uint>(x_290) + as_type<uint>(1)));
-      int const x_293 = (*(tint_symbol_3)).arr[x_290];
-      (*(tint_symbol_4)).arr[x_288] = x_293;
-    } else {
-      int const x_295 = k;
-      k = as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
-      int const x_297 = j;
-      j = as_type<int>((as_type<uint>(x_297) + as_type<uint>(1)));
-      int const x_300 = (*(tint_symbol_3)).arr[x_297];
-      (*(tint_symbol_4)).arr[x_295] = x_300;
-    }
-  }
-  while (true) {
-    int const x_306 = i;
-    int const x_308 = i;
-    int const x_309 = *(mid);
-    if (((x_306 < 10) & (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    int const x_313 = k;
-    k = as_type<int>((as_type<uint>(x_313) + as_type<uint>(1)));
-    int const x_315 = i;
-    i = as_type<int>((as_type<uint>(x_315) + as_type<uint>(1)));
-    int const x_318 = (*(tint_symbol_3)).arr[x_315];
-    (*(tint_symbol_4)).arr[x_313] = x_318;
-  }
-  int const x_320 = *(from);
-  i_1 = x_320;
-  while (true) {
-    int const x_325 = i_1;
-    int const x_326 = *(to);
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    int const x_329 = i_1;
-    int const x_330 = i_1;
-    int const x_332 = (*(tint_symbol_4)).arr[x_330];
-    (*(tint_symbol_3)).arr[x_329] = x_332;
-    {
-      int const x_334 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_341 = m;
-    int const x_342 = high;
-    if ((x_341 <= x_342)) {
-    } else {
-      break;
-    }
-    int const x_345 = low;
-    i_2 = x_345;
-    while (true) {
-      int const x_350 = i_2;
-      int const x_351 = high;
-      if ((x_350 < x_351)) {
-      } else {
-        break;
-      }
-      int const x_354 = i_2;
-      from_1 = x_354;
-      int const x_355 = i_2;
-      int const x_356 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(x_356)))) - as_type<uint>(1)));
-      int const x_359 = i_2;
-      int const x_360 = m;
-      int const x_364 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_359) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_360))))))) - as_type<uint>(1))), x_364);
-      int const x_366 = from_1;
-      param = x_366;
-      int const x_367 = mid_1;
-      param_1 = x_367;
-      int const x_368 = to_1;
-      param_2 = x_368;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_370 = m;
-        int const x_372 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_372) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_370))))));
-      }
-    }
-    {
-      int const x_374 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_374)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_86 = x_28.injectionSwitch.x;
-  i_3 = int(x_86);
-  while (true) {
-    int const x_92 = i_3;
-    switch(x_92) {
-      case 9: {
-        int const x_122 = i_3;
-        (*(tint_symbol_7)).arr[x_122] = -5;
-        break;
-      }
-      case 8: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -4;
-        break;
-      }
-      case 7: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -3;
-        break;
-      }
-      case 6: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -2;
-        break;
-      }
-      case 5: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = -1;
-        break;
-      }
-      case 4: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = 0;
-        break;
-      }
-      case 3: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 1;
-        break;
-      }
-      case 2: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 2;
-        break;
-      }
-      case 1: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 3;
-        break;
-      }
-      case 0: {
-        int const x_104 = i_3;
-        (*(tint_symbol_7)).arr[x_104] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_124 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-    {
-      int const x_126 = i_3;
-      if ((x_126 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_132 = j_1;
-    bool const x_133 = (x_132 < 10);
-    float const x_135 = x_28.injectionSwitch.x;
-    if (!((x_135 <= 1.0f))) {
-      grey = 1.0f;
-    }
-    if (x_133) {
-    } else {
-      break;
-    }
-    int const x_140 = j_1;
-    int const x_141 = j_1;
-    int const x_143 = (*(tint_symbol_7)).arr[x_141];
-    (*(tint_symbol_8)).arr[x_140] = x_143;
-    {
-      int const x_145 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_145) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_149 = (*(tint_symbol_9)).y;
-  if ((int(x_149) < 30)) {
-    int const x_156 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_156) / 10.0f));
-  } else {
-    float const x_161 = (*(tint_symbol_9)).y;
-    if ((int(x_161) < 60)) {
-      int const x_168 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_168) / 10.0f));
-    } else {
-      float const x_173 = (*(tint_symbol_9)).y;
-      if ((int(x_173) < 90)) {
-        int const x_180 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_180) / 10.0f));
-      } else {
-        float const x_185 = (*(tint_symbol_9)).y;
-        if ((int(x_185) < 120)) {
-          int const x_192 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_192) / 10.0f));
-        } else {
-          float const x_197 = (*(tint_symbol_9)).y;
-          if ((int(x_197) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_204 = (*(tint_symbol_9)).y;
-            if ((int(x_204) < 180)) {
-              int const x_211 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_211) / 10.0f));
-            } else {
-              float const x_216 = (*(tint_symbol_9)).y;
-              if ((int(x_216) < 210)) {
-                int const x_223 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_223) / 10.0f));
-              } else {
-                float const x_228 = (*(tint_symbol_9)).y;
-                if ((int(x_228) < 240)) {
-                  int const x_235 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_235) / 10.0f));
-                } else {
-                  float const x_240 = (*(tint_symbol_9)).y;
-                  bool guard233 = true;
-                  if ((int(x_240) < 270)) {
-                    int const x_247 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_247) / 10.0f));
-                    guard233 = false;
-                  } else {
-                    if (guard233) {
-                      float const x_252 = x_28.injectionSwitch.y;
-                      if (!((0.0f < x_252))) {
-                        guard233 = false;
-                      }
-                      if (guard233) {
-                        discard_fragment();
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_255 = grey;
-  float3 const x_256 = float3(x_255, x_255, x_255);
-  *(tint_symbol_10) = float4(x_256.x, x_256.y, x_256.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.spvasm
deleted file mode 100644
index bd5121d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,668 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 433
-; Schema: 0
-               OpCapability Shader
-        %173 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %guard233 "guard233"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %128 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %197 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-    %float_1 = OpConstant %float 1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-        %386 = OpConstantNull %bool
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-      %false = OpConstantFalse %bool
-    %float_0 = OpConstant %float 0
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %420 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-         %56 = OpSLessThanEqual %bool %51 %53
-         %57 = OpLogicalAnd %bool %54 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %45
-         %58 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Private_int %data %61
-         %64 = OpLoad %int %63
-         %65 = OpLoad %int %j
-         %66 = OpAccessChain %_ptr_Private_int %data %65
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpLoad %int %k
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %k %73
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-         %76 = OpAccessChain %_ptr_Private_int %data %74
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Private_int %temp %72
-               OpStore %78 %77
-               OpBranch %69
-         %71 = OpLabel
-         %79 = OpLoad %int %k
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %k %80
-         %81 = OpLoad %int %j
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %j %82
-         %83 = OpAccessChain %_ptr_Private_int %data %81
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Private_int %temp %79
-               OpStore %85 %84
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i
-         %91 = OpLoad %int %i
-         %93 = OpLoad %int %mid
-         %95 = OpSLessThan %bool %90 %int_10
-         %96 = OpSLessThanEqual %bool %91 %93
-         %97 = OpLogicalAnd %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-               OpBranch %98
-        %100 = OpLabel
-               OpBranch %87
-         %98 = OpLabel
-        %101 = OpLoad %int %k
-        %102 = OpIAdd %int %101 %int_1
-               OpStore %k %102
-        %103 = OpLoad %int %i
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %i %104
-        %105 = OpAccessChain %_ptr_Private_int %data %103
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Private_int %temp %101
-               OpStore %107 %106
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %86
-         %87 = OpLabel
-        %109 = OpLoad %int %from
-               OpStore %i_1 %109
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %i_1
-        %116 = OpLoad %int %to
-        %117 = OpSLessThanEqual %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-               OpBranch %118
-        %120 = OpLabel
-               OpBranch %111
-        %118 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpLoad %int %i_1
-        %123 = OpAccessChain %_ptr_Private_int %temp %122
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Private_int %data %121
-               OpStore %125 %124
-               OpBranch %112
-        %112 = OpLabel
-        %126 = OpLoad %int %i_1
-        %127 = OpIAdd %int %126 %int_1
-               OpStore %i_1 %127
-               OpBranch %110
-        %111 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %128
-        %130 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %143
-        %143 = OpLabel
-               OpLoopMerge %144 %145 None
-               OpBranch %146
-        %146 = OpLabel
-        %147 = OpLoad %int %m
-        %148 = OpLoad %int %high
-        %149 = OpSLessThanEqual %bool %147 %148
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %152
-        %151 = OpLabel
-               OpBranch %150
-        %152 = OpLabel
-               OpBranch %144
-        %150 = OpLabel
-        %153 = OpLoad %int %low
-               OpStore %i_2 %153
-               OpBranch %154
-        %154 = OpLabel
-               OpLoopMerge %155 %156 None
-               OpBranch %157
-        %157 = OpLabel
-        %158 = OpLoad %int %i_2
-        %159 = OpLoad %int %high
-        %160 = OpSLessThan %bool %158 %159
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %163
-        %162 = OpLabel
-               OpBranch %161
-        %163 = OpLabel
-               OpBranch %155
-        %161 = OpLabel
-        %164 = OpLoad %int %i_2
-               OpStore %from_1 %164
-        %165 = OpLoad %int %i_2
-        %166 = OpLoad %int %m
-        %167 = OpIAdd %int %165 %166
-        %168 = OpISub %int %167 %int_1
-               OpStore %mid_1 %168
-        %169 = OpLoad %int %i_2
-        %170 = OpLoad %int %m
-        %171 = OpLoad %int %high
-        %175 = OpIMul %int %int_2 %170
-        %176 = OpIAdd %int %169 %175
-        %177 = OpISub %int %176 %int_1
-        %172 = OpExtInst %int %173 SMin %177 %171
-               OpStore %to_1 %172
-        %178 = OpLoad %int %from_1
-               OpStore %param %178
-        %179 = OpLoad %int %mid_1
-               OpStore %param_1 %179
-        %180 = OpLoad %int %to_1
-               OpStore %param_2 %180
-        %181 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %156
-        %156 = OpLabel
-        %185 = OpLoad %int %m
-        %186 = OpLoad %int %i_2
-        %187 = OpIMul %int %int_2 %185
-        %188 = OpIAdd %int %186 %187
-               OpStore %i_2 %188
-               OpBranch %154
-        %155 = OpLabel
-               OpBranch %145
-        %145 = OpLabel
-        %189 = OpLoad %int %m
-        %190 = OpIMul %int %int_2 %189
-               OpStore %m %190
-               OpBranch %143
-        %144 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %128
-        %192 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %197
-   %guard233 = OpVariable %_ptr_Function_bool Function %386
-        %200 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %201 = OpLoad %float %200
-        %202 = OpConvertFToS %int %201
-               OpStore %i_3 %202
-               OpBranch %203
-        %203 = OpLabel
-               OpLoopMerge %204 %205 None
-               OpBranch %206
-        %206 = OpLabel
-        %207 = OpLoad %int %i_3
-               OpSelectionMerge %208 None
-               OpSwitch %207 %209 9 %210 8 %211 7 %212 6 %213 5 %214 4 %215 3 %216 2 %217 1 %218 0 %219
-        %210 = OpLabel
-        %220 = OpLoad %int %i_3
-        %221 = OpAccessChain %_ptr_Private_int %data %220
-               OpStore %221 %int_n5
-               OpBranch %208
-        %211 = OpLabel
-        %223 = OpLoad %int %i_3
-        %224 = OpAccessChain %_ptr_Private_int %data %223
-               OpStore %224 %int_n4
-               OpBranch %208
-        %212 = OpLabel
-        %226 = OpLoad %int %i_3
-        %227 = OpAccessChain %_ptr_Private_int %data %226
-               OpStore %227 %int_n3
-               OpBranch %208
-        %213 = OpLabel
-        %229 = OpLoad %int %i_3
-        %230 = OpAccessChain %_ptr_Private_int %data %229
-               OpStore %230 %int_n2
-               OpBranch %208
-        %214 = OpLabel
-        %232 = OpLoad %int %i_3
-        %233 = OpAccessChain %_ptr_Private_int %data %232
-               OpStore %233 %int_n1
-               OpBranch %208
-        %215 = OpLabel
-        %235 = OpLoad %int %i_3
-        %236 = OpAccessChain %_ptr_Private_int %data %235
-               OpStore %236 %int_0
-               OpBranch %208
-        %216 = OpLabel
-        %237 = OpLoad %int %i_3
-        %238 = OpAccessChain %_ptr_Private_int %data %237
-               OpStore %238 %int_1
-               OpBranch %208
-        %217 = OpLabel
-        %239 = OpLoad %int %i_3
-        %240 = OpAccessChain %_ptr_Private_int %data %239
-               OpStore %240 %int_2
-               OpBranch %208
-        %218 = OpLabel
-        %241 = OpLoad %int %i_3
-        %242 = OpAccessChain %_ptr_Private_int %data %241
-               OpStore %242 %int_3
-               OpBranch %208
-        %219 = OpLabel
-        %244 = OpLoad %int %i_3
-        %245 = OpAccessChain %_ptr_Private_int %data %244
-               OpStore %245 %int_4
-               OpBranch %208
-        %209 = OpLabel
-               OpBranch %208
-        %208 = OpLabel
-        %247 = OpLoad %int %i_3
-        %248 = OpIAdd %int %247 %int_1
-               OpStore %i_3 %248
-               OpBranch %205
-        %205 = OpLabel
-        %249 = OpLoad %int %i_3
-        %250 = OpSLessThan %bool %249 %int_10
-               OpBranchConditional %250 %203 %204
-        %204 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %251
-        %251 = OpLabel
-               OpLoopMerge %252 %253 None
-               OpBranch %254
-        %254 = OpLabel
-        %255 = OpLoad %int %j_1
-        %256 = OpSLessThan %bool %255 %int_10
-        %257 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %258 = OpLoad %float %257
-        %261 = OpFOrdLessThanEqual %bool %258 %float_1
-        %259 = OpLogicalNot %bool %261
-               OpSelectionMerge %262 None
-               OpBranchConditional %259 %263 %262
-        %263 = OpLabel
-               OpStore %grey %float_1
-               OpBranch %262
-        %262 = OpLabel
-               OpSelectionMerge %264 None
-               OpBranchConditional %256 %265 %266
-        %265 = OpLabel
-               OpBranch %264
-        %266 = OpLabel
-               OpBranch %252
-        %264 = OpLabel
-        %267 = OpLoad %int %j_1
-        %268 = OpLoad %int %j_1
-        %269 = OpAccessChain %_ptr_Private_int %data %268
-        %270 = OpLoad %int %269
-        %271 = OpAccessChain %_ptr_Private_int %temp %267
-               OpStore %271 %270
-               OpBranch %253
-        %253 = OpLabel
-        %272 = OpLoad %int %j_1
-        %273 = OpIAdd %int %272 %int_1
-               OpStore %j_1 %273
-               OpBranch %251
-        %252 = OpLabel
-        %274 = OpFunctionCall %void %mergeSort_
-        %277 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %278 = OpLoad %float %277
-        %279 = OpConvertFToS %int %278
-        %281 = OpSLessThan %bool %279 %int_30
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %284
-        %283 = OpLabel
-        %285 = OpAccessChain %_ptr_Private_int %data %int_0
-        %286 = OpLoad %int %285
-        %288 = OpConvertSToF %float %286
-        %290 = OpFDiv %float %288 %float_10
-        %291 = OpFAdd %float %float_0_5 %290
-               OpStore %grey %291
-               OpBranch %282
-        %284 = OpLabel
-        %292 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %293 = OpLoad %float %292
-        %294 = OpConvertFToS %int %293
-        %296 = OpSLessThan %bool %294 %int_60
-               OpSelectionMerge %297 None
-               OpBranchConditional %296 %298 %299
-        %298 = OpLabel
-        %300 = OpAccessChain %_ptr_Private_int %data %int_1
-        %301 = OpLoad %int %300
-        %302 = OpConvertSToF %float %301
-        %303 = OpFDiv %float %302 %float_10
-        %304 = OpFAdd %float %float_0_5 %303
-               OpStore %grey %304
-               OpBranch %297
-        %299 = OpLabel
-        %305 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %306 = OpLoad %float %305
-        %307 = OpConvertFToS %int %306
-        %309 = OpSLessThan %bool %307 %int_90
-               OpSelectionMerge %310 None
-               OpBranchConditional %309 %311 %312
-        %311 = OpLabel
-        %313 = OpAccessChain %_ptr_Private_int %data %int_2
-        %314 = OpLoad %int %313
-        %315 = OpConvertSToF %float %314
-        %316 = OpFDiv %float %315 %float_10
-        %317 = OpFAdd %float %float_0_5 %316
-               OpStore %grey %317
-               OpBranch %310
-        %312 = OpLabel
-        %318 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %319 = OpLoad %float %318
-        %320 = OpConvertFToS %int %319
-        %322 = OpSLessThan %bool %320 %int_120
-               OpSelectionMerge %323 None
-               OpBranchConditional %322 %324 %325
-        %324 = OpLabel
-        %326 = OpAccessChain %_ptr_Private_int %data %int_3
-        %327 = OpLoad %int %326
-        %328 = OpConvertSToF %float %327
-        %329 = OpFDiv %float %328 %float_10
-        %330 = OpFAdd %float %float_0_5 %329
-               OpStore %grey %330
-               OpBranch %323
-        %325 = OpLabel
-        %331 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %332 = OpLoad %float %331
-        %333 = OpConvertFToS %int %332
-        %335 = OpSLessThan %bool %333 %int_150
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %338
-        %337 = OpLabel
-               OpKill
-        %338 = OpLabel
-        %339 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %340 = OpLoad %float %339
-        %341 = OpConvertFToS %int %340
-        %343 = OpSLessThan %bool %341 %int_180
-               OpSelectionMerge %344 None
-               OpBranchConditional %343 %345 %346
-        %345 = OpLabel
-        %348 = OpAccessChain %_ptr_Private_int %data %int_5
-        %349 = OpLoad %int %348
-        %350 = OpConvertSToF %float %349
-        %351 = OpFDiv %float %350 %float_10
-        %352 = OpFAdd %float %float_0_5 %351
-               OpStore %grey %352
-               OpBranch %344
-        %346 = OpLabel
-        %353 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %354 = OpLoad %float %353
-        %355 = OpConvertFToS %int %354
-        %357 = OpSLessThan %bool %355 %int_210
-               OpSelectionMerge %358 None
-               OpBranchConditional %357 %359 %360
-        %359 = OpLabel
-        %362 = OpAccessChain %_ptr_Private_int %data %int_6
-        %363 = OpLoad %int %362
-        %364 = OpConvertSToF %float %363
-        %365 = OpFDiv %float %364 %float_10
-        %366 = OpFAdd %float %float_0_5 %365
-               OpStore %grey %366
-               OpBranch %358
-        %360 = OpLabel
-        %367 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %368 = OpLoad %float %367
-        %369 = OpConvertFToS %int %368
-        %371 = OpSLessThan %bool %369 %int_240
-               OpSelectionMerge %372 None
-               OpBranchConditional %371 %373 %374
-        %373 = OpLabel
-        %376 = OpAccessChain %_ptr_Private_int %data %int_7
-        %377 = OpLoad %int %376
-        %378 = OpConvertSToF %float %377
-        %379 = OpFDiv %float %378 %float_10
-        %380 = OpFAdd %float %float_0_5 %379
-               OpStore %grey %380
-               OpBranch %372
-        %374 = OpLabel
-        %381 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %382 = OpLoad %float %381
-               OpStore %guard233 %true
-        %387 = OpConvertFToS %int %382
-        %389 = OpSLessThan %bool %387 %int_270
-               OpSelectionMerge %390 None
-               OpBranchConditional %389 %391 %392
-        %391 = OpLabel
-        %394 = OpAccessChain %_ptr_Private_int %data %int_8
-        %395 = OpLoad %int %394
-        %396 = OpConvertSToF %float %395
-        %397 = OpFDiv %float %396 %float_10
-        %398 = OpFAdd %float %float_0_5 %397
-               OpStore %grey %398
-               OpStore %guard233 %false
-               OpBranch %390
-        %392 = OpLabel
-        %400 = OpLoad %bool %guard233
-               OpSelectionMerge %401 None
-               OpBranchConditional %400 %402 %401
-        %402 = OpLabel
-        %403 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %404 = OpLoad %float %403
-        %407 = OpFOrdLessThan %bool %float_0 %404
-        %405 = OpLogicalNot %bool %407
-               OpSelectionMerge %408 None
-               OpBranchConditional %405 %409 %408
-        %409 = OpLabel
-               OpStore %guard233 %false
-               OpBranch %408
-        %408 = OpLabel
-        %410 = OpLoad %bool %guard233
-               OpSelectionMerge %411 None
-               OpBranchConditional %410 %412 %411
-        %412 = OpLabel
-               OpKill
-        %411 = OpLabel
-               OpBranch %401
-        %401 = OpLabel
-               OpBranch %390
-        %390 = OpLabel
-               OpBranch %372
-        %372 = OpLabel
-               OpBranch %358
-        %358 = OpLabel
-               OpBranch %344
-        %344 = OpLabel
-               OpBranch %336
-        %336 = OpLabel
-               OpBranch %323
-        %323 = OpLabel
-               OpBranch %310
-        %310 = OpLabel
-               OpBranch %297
-        %297 = OpLabel
-               OpBranch %282
-        %282 = OpLabel
-        %413 = OpLoad %float %grey
-        %415 = OpCompositeConstruct %v3float %413 %413 %413
-        %416 = OpCompositeExtract %float %415 0
-        %417 = OpCompositeExtract %float %415 1
-        %418 = OpCompositeExtract %float %415 2
-        %419 = OpCompositeConstruct %v4float %416 %417 %418 %float_1
-               OpStore %x_GLF_color %419
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %420
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %424 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %425 = OpFunctionCall %void %main_1
-        %426 = OpLoad %v4float %x_GLF_color
-        %427 = OpCompositeConstruct %main_out %426
-               OpReturnValue %427
-               OpFunctionEnd
-       %main = OpFunction %void None %128
-        %429 = OpLabel
-        %431 = OpLoad %v4float %gl_FragCoord_param_1
-        %430 = OpFunctionCall %main_out %main_inner %431
-        %432 = OpCompositeExtract %v4float %430 0
-               OpStore %x_GLF_color_1_1 %432
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.wgsl
deleted file mode 100644
index ce49bac..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,321 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_262 : i32 = *(from);
-  k = x_262;
-  let x_263 : i32 = *(from);
-  i = x_263;
-  let x_264 : i32 = *(mid);
-  j = (x_264 + 1);
-  loop {
-    let x_270 : i32 = i;
-    let x_271 : i32 = *(mid);
-    let x_273 : i32 = j;
-    let x_274 : i32 = *(to);
-    if (((x_270 <= x_271) & (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    let x_278 : i32 = i;
-    let x_280 : i32 = data[x_278];
-    let x_281 : i32 = j;
-    let x_283 : i32 = data[x_281];
-    if ((x_280 < x_283)) {
-      let x_288 : i32 = k;
-      k = (x_288 + 1);
-      let x_290 : i32 = i;
-      i = (x_290 + 1);
-      let x_293 : i32 = data[x_290];
-      temp[x_288] = x_293;
-    } else {
-      let x_295 : i32 = k;
-      k = (x_295 + 1);
-      let x_297 : i32 = j;
-      j = (x_297 + 1);
-      let x_300 : i32 = data[x_297];
-      temp[x_295] = x_300;
-    }
-  }
-  loop {
-    let x_306 : i32 = i;
-    let x_308 : i32 = i;
-    let x_309 : i32 = *(mid);
-    if (((x_306 < 10) & (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    let x_313 : i32 = k;
-    k = (x_313 + 1);
-    let x_315 : i32 = i;
-    i = (x_315 + 1);
-    let x_318 : i32 = data[x_315];
-    temp[x_313] = x_318;
-  }
-  let x_320 : i32 = *(from);
-  i_1 = x_320;
-  loop {
-    let x_325 : i32 = i_1;
-    let x_326 : i32 = *(to);
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    let x_329 : i32 = i_1;
-    let x_330 : i32 = i_1;
-    let x_332 : i32 = temp[x_330];
-    data[x_329] = x_332;
-
-    continuing {
-      let x_334 : i32 = i_1;
-      i_1 = (x_334 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_341 : i32 = m;
-    let x_342 : i32 = high;
-    if ((x_341 <= x_342)) {
-    } else {
-      break;
-    }
-    let x_345 : i32 = low;
-    i_2 = x_345;
-    loop {
-      let x_350 : i32 = i_2;
-      let x_351 : i32 = high;
-      if ((x_350 < x_351)) {
-      } else {
-        break;
-      }
-      let x_354 : i32 = i_2;
-      from_1 = x_354;
-      let x_355 : i32 = i_2;
-      let x_356 : i32 = m;
-      mid_1 = ((x_355 + x_356) - 1);
-      let x_359 : i32 = i_2;
-      let x_360 : i32 = m;
-      let x_364 : i32 = high;
-      to_1 = min(((x_359 + (2 * x_360)) - 1), x_364);
-      let x_366 : i32 = from_1;
-      param = x_366;
-      let x_367 : i32 = mid_1;
-      param_1 = x_367;
-      let x_368 : i32 = to_1;
-      param_2 = x_368;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_370 : i32 = m;
-        let x_372 : i32 = i_2;
-        i_2 = (x_372 + (2 * x_370));
-      }
-    }
-
-    continuing {
-      let x_374 : i32 = m;
-      m = (2 * x_374);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_86 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_86);
-  loop {
-    let x_92 : i32 = i_3;
-    switch(x_92) {
-      case 9: {
-        let x_122 : i32 = i_3;
-        data[x_122] = -5;
-      }
-      case 8: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -4;
-      }
-      case 7: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -3;
-      }
-      case 6: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -2;
-      }
-      case 5: {
-        let x_114 : i32 = i_3;
-        data[x_114] = -1;
-      }
-      case 4: {
-        let x_112 : i32 = i_3;
-        data[x_112] = 0;
-      }
-      case 3: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 1;
-      }
-      case 2: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 2;
-      }
-      case 1: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 3;
-      }
-      case 0: {
-        let x_104 : i32 = i_3;
-        data[x_104] = 4;
-      }
-      default: {
-      }
-    }
-    let x_124 : i32 = i_3;
-    i_3 = (x_124 + 1);
-
-    continuing {
-      let x_126 : i32 = i_3;
-      if ((x_126 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_132 : i32 = j_1;
-    let x_133 : bool = (x_132 < 10);
-    let x_135 : f32 = x_28.injectionSwitch.x;
-    if (!((x_135 <= 1.0))) {
-      grey = 1.0;
-    }
-    if (x_133) {
-    } else {
-      break;
-    }
-    let x_140 : i32 = j_1;
-    let x_141 : i32 = j_1;
-    let x_143 : i32 = data[x_141];
-    temp[x_140] = x_143;
-
-    continuing {
-      let x_145 : i32 = j_1;
-      j_1 = (x_145 + 1);
-    }
-  }
-  mergeSort_();
-  let x_149 : f32 = gl_FragCoord.y;
-  if ((i32(x_149) < 30)) {
-    let x_156 : i32 = data[0];
-    grey = (0.5 + (f32(x_156) / 10.0));
-  } else {
-    let x_161 : f32 = gl_FragCoord.y;
-    if ((i32(x_161) < 60)) {
-      let x_168 : i32 = data[1];
-      grey = (0.5 + (f32(x_168) / 10.0));
-    } else {
-      let x_173 : f32 = gl_FragCoord.y;
-      if ((i32(x_173) < 90)) {
-        let x_180 : i32 = data[2];
-        grey = (0.5 + (f32(x_180) / 10.0));
-      } else {
-        let x_185 : f32 = gl_FragCoord.y;
-        if ((i32(x_185) < 120)) {
-          let x_192 : i32 = data[3];
-          grey = (0.5 + (f32(x_192) / 10.0));
-        } else {
-          let x_197 : f32 = gl_FragCoord.y;
-          if ((i32(x_197) < 150)) {
-            discard;
-          } else {
-            let x_204 : f32 = gl_FragCoord.y;
-            if ((i32(x_204) < 180)) {
-              let x_211 : i32 = data[5];
-              grey = (0.5 + (f32(x_211) / 10.0));
-            } else {
-              let x_216 : f32 = gl_FragCoord.y;
-              if ((i32(x_216) < 210)) {
-                let x_223 : i32 = data[6];
-                grey = (0.5 + (f32(x_223) / 10.0));
-              } else {
-                let x_228 : f32 = gl_FragCoord.y;
-                if ((i32(x_228) < 240)) {
-                  let x_235 : i32 = data[7];
-                  grey = (0.5 + (f32(x_235) / 10.0));
-                } else {
-                  let x_240 : f32 = gl_FragCoord.y;
-                  var guard233 : bool = true;
-                  if ((i32(x_240) < 270)) {
-                    let x_247 : i32 = data[8];
-                    grey = (0.5 + (f32(x_247) / 10.0));
-                    guard233 = false;
-                  } else {
-                    if (guard233) {
-                      let x_252 : f32 = x_28.injectionSwitch.y;
-                      if (!((0.0 < x_252))) {
-                        guard233 = false;
-                      }
-                      if (guard233) {
-                        discard;
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_255 : f32 = grey;
-  let x_256 : vec3<f32> = vec3<f32>(x_255, x_255, x_255);
-  x_GLF_color = vec4<f32>(x_256.x, x_256.y, x_256.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.hlsl
deleted file mode 100644
index 5b6b83e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,293 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_262 = from;
-  k = x_262;
-  const int x_263 = from;
-  i = x_263;
-  const int x_264 = mid;
-  j = (x_264 + 1);
-  while (true) {
-    const int x_270 = i;
-    const int x_271 = mid;
-    const int x_273 = j;
-    const int x_274 = to;
-    bool tint_tmp = (x_270 <= x_271);
-    if (tint_tmp) {
-      tint_tmp = (x_273 <= x_274);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_280 = data[i];
-    const int x_283 = data[j];
-    if ((x_280 < x_283)) {
-      const int x_288 = k;
-      k = (x_288 + 1);
-      const int x_290 = i;
-      i = (x_290 + 1);
-      const int x_293 = data[x_290];
-      temp[x_288] = x_293;
-    } else {
-      const int x_295 = k;
-      k = (x_295 + 1);
-      const int x_297 = j;
-      j = (x_297 + 1);
-      const int x_300 = data[x_297];
-      temp[x_295] = x_300;
-    }
-  }
-  while (true) {
-    const int x_306 = i;
-    const int x_308 = i;
-    const int x_309 = mid;
-    bool tint_tmp_1 = (x_306 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_308 <= x_309);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_313 = k;
-    k = (x_313 + 1);
-    const int x_315 = i;
-    i = (x_315 + 1);
-    const int x_318 = data[x_315];
-    temp[x_313] = x_318;
-  }
-  const int x_320 = from;
-  i_1 = x_320;
-  while (true) {
-    const int x_325 = i_1;
-    const int x_326 = to;
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    const int x_329 = i_1;
-    const int x_332 = temp[i_1];
-    data[x_329] = x_332;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_86 = asfloat(x_28[0].x);
-  i_3 = int(x_86);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    const bool x_133 = (j_1 < 10);
-    const float x_135 = asfloat(x_28[0].x);
-    if (!((x_135 <= 1.0f))) {
-      grey = 1.0f;
-    }
-    if (x_133) {
-    } else {
-      break;
-    }
-    const int x_140 = j_1;
-    const int x_143 = data[j_1];
-    temp[x_140] = x_143;
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  mergeSort_();
-  const float x_149 = gl_FragCoord.y;
-  if ((int(x_149) < 30)) {
-    const int x_156 = data[0];
-    grey = (0.5f + (float(x_156) / 10.0f));
-  } else {
-    const float x_161 = gl_FragCoord.y;
-    if ((int(x_161) < 60)) {
-      const int x_168 = data[1];
-      grey = (0.5f + (float(x_168) / 10.0f));
-    } else {
-      const float x_173 = gl_FragCoord.y;
-      if ((int(x_173) < 90)) {
-        const int x_180 = data[2];
-        grey = (0.5f + (float(x_180) / 10.0f));
-      } else {
-        const float x_185 = gl_FragCoord.y;
-        if ((int(x_185) < 120)) {
-          const int x_192 = data[3];
-          grey = (0.5f + (float(x_192) / 10.0f));
-        } else {
-          const float x_197 = gl_FragCoord.y;
-          if ((int(x_197) < 150)) {
-            discard;
-          } else {
-            const float x_204 = gl_FragCoord.y;
-            if ((int(x_204) < 180)) {
-              const int x_211 = data[5];
-              grey = (0.5f + (float(x_211) / 10.0f));
-            } else {
-              const float x_216 = gl_FragCoord.y;
-              if ((int(x_216) < 210)) {
-                const int x_223 = data[6];
-                grey = (0.5f + (float(x_223) / 10.0f));
-              } else {
-                const float x_228 = gl_FragCoord.y;
-                if ((int(x_228) < 240)) {
-                  const int x_235 = data[7];
-                  grey = (0.5f + (float(x_235) / 10.0f));
-                } else {
-                  const float x_240 = gl_FragCoord.y;
-                  bool guard233 = true;
-                  if ((int(x_240) < 270)) {
-                    const int x_247 = data[8];
-                    grey = (0.5f + (float(x_247) / 10.0f));
-                    guard233 = false;
-                  } else {
-                    if (guard233) {
-                      const float x_252 = asfloat(x_28[0].y);
-                      if (!((0.0f < x_252))) {
-                        guard233 = false;
-                      }
-                      if (guard233) {
-                        discard;
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_255 = grey;
-  const float3 x_256 = float3(x_255, x_255, x_255);
-  x_GLF_color = float4(x_256.x, x_256.y, x_256.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.msl
deleted file mode 100644
index cd9fda1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.msl
+++ /dev/null
@@ -1,335 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_262 = *(from);
-  k = x_262;
-  int const x_263 = *(from);
-  i = x_263;
-  int const x_264 = *(mid);
-  j = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-  while (true) {
-    int const x_270 = i;
-    int const x_271 = *(mid);
-    int const x_273 = j;
-    int const x_274 = *(to);
-    if (((x_270 <= x_271) && (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    int const x_278 = i;
-    int const x_280 = (*(tint_symbol_3)).arr[x_278];
-    int const x_281 = j;
-    int const x_283 = (*(tint_symbol_3)).arr[x_281];
-    if ((x_280 < x_283)) {
-      int const x_288 = k;
-      k = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
-      int const x_290 = i;
-      i = as_type<int>((as_type<uint>(x_290) + as_type<uint>(1)));
-      int const x_293 = (*(tint_symbol_3)).arr[x_290];
-      (*(tint_symbol_4)).arr[x_288] = x_293;
-    } else {
-      int const x_295 = k;
-      k = as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
-      int const x_297 = j;
-      j = as_type<int>((as_type<uint>(x_297) + as_type<uint>(1)));
-      int const x_300 = (*(tint_symbol_3)).arr[x_297];
-      (*(tint_symbol_4)).arr[x_295] = x_300;
-    }
-  }
-  while (true) {
-    int const x_306 = i;
-    int const x_308 = i;
-    int const x_309 = *(mid);
-    if (((x_306 < 10) && (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    int const x_313 = k;
-    k = as_type<int>((as_type<uint>(x_313) + as_type<uint>(1)));
-    int const x_315 = i;
-    i = as_type<int>((as_type<uint>(x_315) + as_type<uint>(1)));
-    int const x_318 = (*(tint_symbol_3)).arr[x_315];
-    (*(tint_symbol_4)).arr[x_313] = x_318;
-  }
-  int const x_320 = *(from);
-  i_1 = x_320;
-  while (true) {
-    int const x_325 = i_1;
-    int const x_326 = *(to);
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    int const x_329 = i_1;
-    int const x_330 = i_1;
-    int const x_332 = (*(tint_symbol_4)).arr[x_330];
-    (*(tint_symbol_3)).arr[x_329] = x_332;
-    {
-      int const x_334 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_341 = m;
-    int const x_342 = high;
-    if ((x_341 <= x_342)) {
-    } else {
-      break;
-    }
-    int const x_345 = low;
-    i_2 = x_345;
-    while (true) {
-      int const x_350 = i_2;
-      int const x_351 = high;
-      if ((x_350 < x_351)) {
-      } else {
-        break;
-      }
-      int const x_354 = i_2;
-      from_1 = x_354;
-      int const x_355 = i_2;
-      int const x_356 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(x_356)))) - as_type<uint>(1)));
-      int const x_359 = i_2;
-      int const x_360 = m;
-      int const x_364 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_359) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_360))))))) - as_type<uint>(1))), x_364);
-      int const x_366 = from_1;
-      param = x_366;
-      int const x_367 = mid_1;
-      param_1 = x_367;
-      int const x_368 = to_1;
-      param_2 = x_368;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_370 = m;
-        int const x_372 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_372) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_370))))));
-      }
-    }
-    {
-      int const x_374 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_374)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_86 = x_28.injectionSwitch.x;
-  i_3 = int(x_86);
-  while (true) {
-    int const x_92 = i_3;
-    switch(x_92) {
-      case 9: {
-        int const x_122 = i_3;
-        (*(tint_symbol_7)).arr[x_122] = -5;
-        break;
-      }
-      case 8: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -4;
-        break;
-      }
-      case 7: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -3;
-        break;
-      }
-      case 6: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -2;
-        break;
-      }
-      case 5: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = -1;
-        break;
-      }
-      case 4: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = 0;
-        break;
-      }
-      case 3: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 1;
-        break;
-      }
-      case 2: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 2;
-        break;
-      }
-      case 1: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 3;
-        break;
-      }
-      case 0: {
-        int const x_104 = i_3;
-        (*(tint_symbol_7)).arr[x_104] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_124 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-    {
-      int const x_126 = i_3;
-      if ((x_126 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_132 = j_1;
-    bool const x_133 = (x_132 < 10);
-    float const x_135 = x_28.injectionSwitch.x;
-    if (!((x_135 <= 1.0f))) {
-      grey = 1.0f;
-    }
-    if (x_133) {
-    } else {
-      break;
-    }
-    int const x_140 = j_1;
-    int const x_141 = j_1;
-    int const x_143 = (*(tint_symbol_7)).arr[x_141];
-    (*(tint_symbol_8)).arr[x_140] = x_143;
-    {
-      int const x_145 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_145) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_149 = (*(tint_symbol_9)).y;
-  if ((int(x_149) < 30)) {
-    int const x_156 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_156) / 10.0f));
-  } else {
-    float const x_161 = (*(tint_symbol_9)).y;
-    if ((int(x_161) < 60)) {
-      int const x_168 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_168) / 10.0f));
-    } else {
-      float const x_173 = (*(tint_symbol_9)).y;
-      if ((int(x_173) < 90)) {
-        int const x_180 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_180) / 10.0f));
-      } else {
-        float const x_185 = (*(tint_symbol_9)).y;
-        if ((int(x_185) < 120)) {
-          int const x_192 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_192) / 10.0f));
-        } else {
-          float const x_197 = (*(tint_symbol_9)).y;
-          if ((int(x_197) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_204 = (*(tint_symbol_9)).y;
-            if ((int(x_204) < 180)) {
-              int const x_211 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_211) / 10.0f));
-            } else {
-              float const x_216 = (*(tint_symbol_9)).y;
-              if ((int(x_216) < 210)) {
-                int const x_223 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_223) / 10.0f));
-              } else {
-                float const x_228 = (*(tint_symbol_9)).y;
-                if ((int(x_228) < 240)) {
-                  int const x_235 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_235) / 10.0f));
-                } else {
-                  float const x_240 = (*(tint_symbol_9)).y;
-                  bool guard233 = true;
-                  if ((int(x_240) < 270)) {
-                    int const x_247 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_247) / 10.0f));
-                    guard233 = false;
-                  } else {
-                    if (guard233) {
-                      float const x_252 = x_28.injectionSwitch.y;
-                      if (!((0.0f < x_252))) {
-                        guard233 = false;
-                      }
-                      if (guard233) {
-                        discard_fragment();
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_255 = grey;
-  float3 const x_256 = float3(x_255, x_255, x_255);
-  *(tint_symbol_10) = float4(x_256.x, x_256.y, x_256.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.spvasm
deleted file mode 100644
index 62814e3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,678 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 437
-; Schema: 0
-               OpCapability Shader
-        %177 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %guard233 "guard233"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %132 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %201 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-    %float_1 = OpConstant %float 1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-       %true = OpConstantTrue %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-        %390 = OpConstantNull %bool
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-      %false = OpConstantFalse %bool
-    %float_0 = OpConstant %float 0
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %424 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %56
-         %57 = OpLabel
-         %58 = OpSLessThanEqual %bool %51 %53
-               OpBranch %56
-         %56 = OpLabel
-         %59 = OpPhi %bool %54 %47 %58 %57
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %45
-         %60 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Private_int %data %63
-         %66 = OpLoad %int %65
-         %67 = OpLoad %int %j
-         %68 = OpAccessChain %_ptr_Private_int %data %67
-         %69 = OpLoad %int %68
-         %70 = OpSLessThan %bool %66 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpLoad %int %k
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %k %75
-         %76 = OpLoad %int %i
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %i %77
-         %78 = OpAccessChain %_ptr_Private_int %data %76
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Private_int %temp %74
-               OpStore %80 %79
-               OpBranch %71
-         %73 = OpLabel
-         %81 = OpLoad %int %k
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %k %82
-         %83 = OpLoad %int %j
-         %84 = OpIAdd %int %83 %int_1
-               OpStore %j %84
-         %85 = OpAccessChain %_ptr_Private_int %data %83
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Private_int %temp %81
-               OpStore %87 %86
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-               OpLoopMerge %89 %90 None
-               OpBranch %91
-         %91 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpLoad %int %i
-         %95 = OpLoad %int %mid
-         %97 = OpSLessThan %bool %92 %int_10
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpSLessThanEqual %bool %93 %95
-               OpBranch %98
-         %98 = OpLabel
-        %101 = OpPhi %bool %97 %91 %100 %99
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpBranch %102
-        %104 = OpLabel
-               OpBranch %89
-        %102 = OpLabel
-        %105 = OpLoad %int %k
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %k %106
-        %107 = OpLoad %int %i
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %i %108
-        %109 = OpAccessChain %_ptr_Private_int %data %107
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Private_int %temp %105
-               OpStore %111 %110
-               OpBranch %90
-         %90 = OpLabel
-               OpBranch %88
-         %89 = OpLabel
-        %113 = OpLoad %int %from
-               OpStore %i_1 %113
-               OpBranch %114
-        %114 = OpLabel
-               OpLoopMerge %115 %116 None
-               OpBranch %117
-        %117 = OpLabel
-        %118 = OpLoad %int %i_1
-        %120 = OpLoad %int %to
-        %121 = OpSLessThanEqual %bool %118 %120
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-               OpBranch %122
-        %124 = OpLabel
-               OpBranch %115
-        %122 = OpLabel
-        %125 = OpLoad %int %i_1
-        %126 = OpLoad %int %i_1
-        %127 = OpAccessChain %_ptr_Private_int %temp %126
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Private_int %data %125
-               OpStore %129 %128
-               OpBranch %116
-        %116 = OpLabel
-        %130 = OpLoad %int %i_1
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %i_1 %131
-               OpBranch %114
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %132
-        %134 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %147
-        %147 = OpLabel
-               OpLoopMerge %148 %149 None
-               OpBranch %150
-        %150 = OpLabel
-        %151 = OpLoad %int %m
-        %152 = OpLoad %int %high
-        %153 = OpSLessThanEqual %bool %151 %152
-               OpSelectionMerge %154 None
-               OpBranchConditional %153 %155 %156
-        %155 = OpLabel
-               OpBranch %154
-        %156 = OpLabel
-               OpBranch %148
-        %154 = OpLabel
-        %157 = OpLoad %int %low
-               OpStore %i_2 %157
-               OpBranch %158
-        %158 = OpLabel
-               OpLoopMerge %159 %160 None
-               OpBranch %161
-        %161 = OpLabel
-        %162 = OpLoad %int %i_2
-        %163 = OpLoad %int %high
-        %164 = OpSLessThan %bool %162 %163
-               OpSelectionMerge %165 None
-               OpBranchConditional %164 %166 %167
-        %166 = OpLabel
-               OpBranch %165
-        %167 = OpLabel
-               OpBranch %159
-        %165 = OpLabel
-        %168 = OpLoad %int %i_2
-               OpStore %from_1 %168
-        %169 = OpLoad %int %i_2
-        %170 = OpLoad %int %m
-        %171 = OpIAdd %int %169 %170
-        %172 = OpISub %int %171 %int_1
-               OpStore %mid_1 %172
-        %173 = OpLoad %int %i_2
-        %174 = OpLoad %int %m
-        %175 = OpLoad %int %high
-        %179 = OpIMul %int %int_2 %174
-        %180 = OpIAdd %int %173 %179
-        %181 = OpISub %int %180 %int_1
-        %176 = OpExtInst %int %177 SMin %181 %175
-               OpStore %to_1 %176
-        %182 = OpLoad %int %from_1
-               OpStore %param %182
-        %183 = OpLoad %int %mid_1
-               OpStore %param_1 %183
-        %184 = OpLoad %int %to_1
-               OpStore %param_2 %184
-        %185 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %160
-        %160 = OpLabel
-        %189 = OpLoad %int %m
-        %190 = OpLoad %int %i_2
-        %191 = OpIMul %int %int_2 %189
-        %192 = OpIAdd %int %190 %191
-               OpStore %i_2 %192
-               OpBranch %158
-        %159 = OpLabel
-               OpBranch %149
-        %149 = OpLabel
-        %193 = OpLoad %int %m
-        %194 = OpIMul %int %int_2 %193
-               OpStore %m %194
-               OpBranch %147
-        %148 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %132
-        %196 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %201
-   %guard233 = OpVariable %_ptr_Function_bool Function %390
-        %204 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %205 = OpLoad %float %204
-        %206 = OpConvertFToS %int %205
-               OpStore %i_3 %206
-               OpBranch %207
-        %207 = OpLabel
-               OpLoopMerge %208 %209 None
-               OpBranch %210
-        %210 = OpLabel
-        %211 = OpLoad %int %i_3
-               OpSelectionMerge %212 None
-               OpSwitch %211 %213 9 %214 8 %215 7 %216 6 %217 5 %218 4 %219 3 %220 2 %221 1 %222 0 %223
-        %214 = OpLabel
-        %224 = OpLoad %int %i_3
-        %225 = OpAccessChain %_ptr_Private_int %data %224
-               OpStore %225 %int_n5
-               OpBranch %212
-        %215 = OpLabel
-        %227 = OpLoad %int %i_3
-        %228 = OpAccessChain %_ptr_Private_int %data %227
-               OpStore %228 %int_n4
-               OpBranch %212
-        %216 = OpLabel
-        %230 = OpLoad %int %i_3
-        %231 = OpAccessChain %_ptr_Private_int %data %230
-               OpStore %231 %int_n3
-               OpBranch %212
-        %217 = OpLabel
-        %233 = OpLoad %int %i_3
-        %234 = OpAccessChain %_ptr_Private_int %data %233
-               OpStore %234 %int_n2
-               OpBranch %212
-        %218 = OpLabel
-        %236 = OpLoad %int %i_3
-        %237 = OpAccessChain %_ptr_Private_int %data %236
-               OpStore %237 %int_n1
-               OpBranch %212
-        %219 = OpLabel
-        %239 = OpLoad %int %i_3
-        %240 = OpAccessChain %_ptr_Private_int %data %239
-               OpStore %240 %int_0
-               OpBranch %212
-        %220 = OpLabel
-        %241 = OpLoad %int %i_3
-        %242 = OpAccessChain %_ptr_Private_int %data %241
-               OpStore %242 %int_1
-               OpBranch %212
-        %221 = OpLabel
-        %243 = OpLoad %int %i_3
-        %244 = OpAccessChain %_ptr_Private_int %data %243
-               OpStore %244 %int_2
-               OpBranch %212
-        %222 = OpLabel
-        %245 = OpLoad %int %i_3
-        %246 = OpAccessChain %_ptr_Private_int %data %245
-               OpStore %246 %int_3
-               OpBranch %212
-        %223 = OpLabel
-        %248 = OpLoad %int %i_3
-        %249 = OpAccessChain %_ptr_Private_int %data %248
-               OpStore %249 %int_4
-               OpBranch %212
-        %213 = OpLabel
-               OpBranch %212
-        %212 = OpLabel
-        %251 = OpLoad %int %i_3
-        %252 = OpIAdd %int %251 %int_1
-               OpStore %i_3 %252
-               OpBranch %209
-        %209 = OpLabel
-        %253 = OpLoad %int %i_3
-        %254 = OpSLessThan %bool %253 %int_10
-               OpBranchConditional %254 %207 %208
-        %208 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %255
-        %255 = OpLabel
-               OpLoopMerge %256 %257 None
-               OpBranch %258
-        %258 = OpLabel
-        %259 = OpLoad %int %j_1
-        %260 = OpSLessThan %bool %259 %int_10
-        %261 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %262 = OpLoad %float %261
-        %265 = OpFOrdLessThanEqual %bool %262 %float_1
-        %263 = OpLogicalNot %bool %265
-               OpSelectionMerge %266 None
-               OpBranchConditional %263 %267 %266
-        %267 = OpLabel
-               OpStore %grey %float_1
-               OpBranch %266
-        %266 = OpLabel
-               OpSelectionMerge %268 None
-               OpBranchConditional %260 %269 %270
-        %269 = OpLabel
-               OpBranch %268
-        %270 = OpLabel
-               OpBranch %256
-        %268 = OpLabel
-        %271 = OpLoad %int %j_1
-        %272 = OpLoad %int %j_1
-        %273 = OpAccessChain %_ptr_Private_int %data %272
-        %274 = OpLoad %int %273
-        %275 = OpAccessChain %_ptr_Private_int %temp %271
-               OpStore %275 %274
-               OpBranch %257
-        %257 = OpLabel
-        %276 = OpLoad %int %j_1
-        %277 = OpIAdd %int %276 %int_1
-               OpStore %j_1 %277
-               OpBranch %255
-        %256 = OpLabel
-        %278 = OpFunctionCall %void %mergeSort_
-        %281 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %282 = OpLoad %float %281
-        %283 = OpConvertFToS %int %282
-        %285 = OpSLessThan %bool %283 %int_30
-               OpSelectionMerge %286 None
-               OpBranchConditional %285 %287 %288
-        %287 = OpLabel
-        %289 = OpAccessChain %_ptr_Private_int %data %int_0
-        %290 = OpLoad %int %289
-        %292 = OpConvertSToF %float %290
-        %294 = OpFDiv %float %292 %float_10
-        %295 = OpFAdd %float %float_0_5 %294
-               OpStore %grey %295
-               OpBranch %286
-        %288 = OpLabel
-        %296 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %297 = OpLoad %float %296
-        %298 = OpConvertFToS %int %297
-        %300 = OpSLessThan %bool %298 %int_60
-               OpSelectionMerge %301 None
-               OpBranchConditional %300 %302 %303
-        %302 = OpLabel
-        %304 = OpAccessChain %_ptr_Private_int %data %int_1
-        %305 = OpLoad %int %304
-        %306 = OpConvertSToF %float %305
-        %307 = OpFDiv %float %306 %float_10
-        %308 = OpFAdd %float %float_0_5 %307
-               OpStore %grey %308
-               OpBranch %301
-        %303 = OpLabel
-        %309 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %310 = OpLoad %float %309
-        %311 = OpConvertFToS %int %310
-        %313 = OpSLessThan %bool %311 %int_90
-               OpSelectionMerge %314 None
-               OpBranchConditional %313 %315 %316
-        %315 = OpLabel
-        %317 = OpAccessChain %_ptr_Private_int %data %int_2
-        %318 = OpLoad %int %317
-        %319 = OpConvertSToF %float %318
-        %320 = OpFDiv %float %319 %float_10
-        %321 = OpFAdd %float %float_0_5 %320
-               OpStore %grey %321
-               OpBranch %314
-        %316 = OpLabel
-        %322 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %323 = OpLoad %float %322
-        %324 = OpConvertFToS %int %323
-        %326 = OpSLessThan %bool %324 %int_120
-               OpSelectionMerge %327 None
-               OpBranchConditional %326 %328 %329
-        %328 = OpLabel
-        %330 = OpAccessChain %_ptr_Private_int %data %int_3
-        %331 = OpLoad %int %330
-        %332 = OpConvertSToF %float %331
-        %333 = OpFDiv %float %332 %float_10
-        %334 = OpFAdd %float %float_0_5 %333
-               OpStore %grey %334
-               OpBranch %327
-        %329 = OpLabel
-        %335 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %336 = OpLoad %float %335
-        %337 = OpConvertFToS %int %336
-        %339 = OpSLessThan %bool %337 %int_150
-               OpSelectionMerge %340 None
-               OpBranchConditional %339 %341 %342
-        %341 = OpLabel
-               OpKill
-        %342 = OpLabel
-        %343 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %344 = OpLoad %float %343
-        %345 = OpConvertFToS %int %344
-        %347 = OpSLessThan %bool %345 %int_180
-               OpSelectionMerge %348 None
-               OpBranchConditional %347 %349 %350
-        %349 = OpLabel
-        %352 = OpAccessChain %_ptr_Private_int %data %int_5
-        %353 = OpLoad %int %352
-        %354 = OpConvertSToF %float %353
-        %355 = OpFDiv %float %354 %float_10
-        %356 = OpFAdd %float %float_0_5 %355
-               OpStore %grey %356
-               OpBranch %348
-        %350 = OpLabel
-        %357 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %358 = OpLoad %float %357
-        %359 = OpConvertFToS %int %358
-        %361 = OpSLessThan %bool %359 %int_210
-               OpSelectionMerge %362 None
-               OpBranchConditional %361 %363 %364
-        %363 = OpLabel
-        %366 = OpAccessChain %_ptr_Private_int %data %int_6
-        %367 = OpLoad %int %366
-        %368 = OpConvertSToF %float %367
-        %369 = OpFDiv %float %368 %float_10
-        %370 = OpFAdd %float %float_0_5 %369
-               OpStore %grey %370
-               OpBranch %362
-        %364 = OpLabel
-        %371 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %372 = OpLoad %float %371
-        %373 = OpConvertFToS %int %372
-        %375 = OpSLessThan %bool %373 %int_240
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %378
-        %377 = OpLabel
-        %380 = OpAccessChain %_ptr_Private_int %data %int_7
-        %381 = OpLoad %int %380
-        %382 = OpConvertSToF %float %381
-        %383 = OpFDiv %float %382 %float_10
-        %384 = OpFAdd %float %float_0_5 %383
-               OpStore %grey %384
-               OpBranch %376
-        %378 = OpLabel
-        %385 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %386 = OpLoad %float %385
-               OpStore %guard233 %true
-        %391 = OpConvertFToS %int %386
-        %393 = OpSLessThan %bool %391 %int_270
-               OpSelectionMerge %394 None
-               OpBranchConditional %393 %395 %396
-        %395 = OpLabel
-        %398 = OpAccessChain %_ptr_Private_int %data %int_8
-        %399 = OpLoad %int %398
-        %400 = OpConvertSToF %float %399
-        %401 = OpFDiv %float %400 %float_10
-        %402 = OpFAdd %float %float_0_5 %401
-               OpStore %grey %402
-               OpStore %guard233 %false
-               OpBranch %394
-        %396 = OpLabel
-        %404 = OpLoad %bool %guard233
-               OpSelectionMerge %405 None
-               OpBranchConditional %404 %406 %405
-        %406 = OpLabel
-        %407 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %408 = OpLoad %float %407
-        %411 = OpFOrdLessThan %bool %float_0 %408
-        %409 = OpLogicalNot %bool %411
-               OpSelectionMerge %412 None
-               OpBranchConditional %409 %413 %412
-        %413 = OpLabel
-               OpStore %guard233 %false
-               OpBranch %412
-        %412 = OpLabel
-        %414 = OpLoad %bool %guard233
-               OpSelectionMerge %415 None
-               OpBranchConditional %414 %416 %415
-        %416 = OpLabel
-               OpKill
-        %415 = OpLabel
-               OpBranch %405
-        %405 = OpLabel
-               OpBranch %394
-        %394 = OpLabel
-               OpBranch %376
-        %376 = OpLabel
-               OpBranch %362
-        %362 = OpLabel
-               OpBranch %348
-        %348 = OpLabel
-               OpBranch %340
-        %340 = OpLabel
-               OpBranch %327
-        %327 = OpLabel
-               OpBranch %314
-        %314 = OpLabel
-               OpBranch %301
-        %301 = OpLabel
-               OpBranch %286
-        %286 = OpLabel
-        %417 = OpLoad %float %grey
-        %419 = OpCompositeConstruct %v3float %417 %417 %417
-        %420 = OpCompositeExtract %float %419 0
-        %421 = OpCompositeExtract %float %419 1
-        %422 = OpCompositeExtract %float %419 2
-        %423 = OpCompositeConstruct %v4float %420 %421 %422 %float_1
-               OpStore %x_GLF_color %423
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %424
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %428 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %429 = OpFunctionCall %void %main_1
-        %430 = OpLoad %v4float %x_GLF_color
-        %431 = OpCompositeConstruct %main_out %430
-               OpReturnValue %431
-               OpFunctionEnd
-       %main = OpFunction %void None %132
-        %433 = OpLabel
-        %435 = OpLoad %v4float %gl_FragCoord_param_1
-        %434 = OpFunctionCall %main_out %main_inner %435
-        %436 = OpCompositeExtract %v4float %434 0
-               OpStore %x_GLF_color_1_1 %436
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.wgsl
deleted file mode 100644
index 4e442a3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-dead-code/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,321 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_262 : i32 = *(from);
-  k = x_262;
-  let x_263 : i32 = *(from);
-  i = x_263;
-  let x_264 : i32 = *(mid);
-  j = (x_264 + 1);
-  loop {
-    let x_270 : i32 = i;
-    let x_271 : i32 = *(mid);
-    let x_273 : i32 = j;
-    let x_274 : i32 = *(to);
-    if (((x_270 <= x_271) && (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    let x_278 : i32 = i;
-    let x_280 : i32 = data[x_278];
-    let x_281 : i32 = j;
-    let x_283 : i32 = data[x_281];
-    if ((x_280 < x_283)) {
-      let x_288 : i32 = k;
-      k = (x_288 + 1);
-      let x_290 : i32 = i;
-      i = (x_290 + 1);
-      let x_293 : i32 = data[x_290];
-      temp[x_288] = x_293;
-    } else {
-      let x_295 : i32 = k;
-      k = (x_295 + 1);
-      let x_297 : i32 = j;
-      j = (x_297 + 1);
-      let x_300 : i32 = data[x_297];
-      temp[x_295] = x_300;
-    }
-  }
-  loop {
-    let x_306 : i32 = i;
-    let x_308 : i32 = i;
-    let x_309 : i32 = *(mid);
-    if (((x_306 < 10) && (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    let x_313 : i32 = k;
-    k = (x_313 + 1);
-    let x_315 : i32 = i;
-    i = (x_315 + 1);
-    let x_318 : i32 = data[x_315];
-    temp[x_313] = x_318;
-  }
-  let x_320 : i32 = *(from);
-  i_1 = x_320;
-  loop {
-    let x_325 : i32 = i_1;
-    let x_326 : i32 = *(to);
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    let x_329 : i32 = i_1;
-    let x_330 : i32 = i_1;
-    let x_332 : i32 = temp[x_330];
-    data[x_329] = x_332;
-
-    continuing {
-      let x_334 : i32 = i_1;
-      i_1 = (x_334 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_341 : i32 = m;
-    let x_342 : i32 = high;
-    if ((x_341 <= x_342)) {
-    } else {
-      break;
-    }
-    let x_345 : i32 = low;
-    i_2 = x_345;
-    loop {
-      let x_350 : i32 = i_2;
-      let x_351 : i32 = high;
-      if ((x_350 < x_351)) {
-      } else {
-        break;
-      }
-      let x_354 : i32 = i_2;
-      from_1 = x_354;
-      let x_355 : i32 = i_2;
-      let x_356 : i32 = m;
-      mid_1 = ((x_355 + x_356) - 1);
-      let x_359 : i32 = i_2;
-      let x_360 : i32 = m;
-      let x_364 : i32 = high;
-      to_1 = min(((x_359 + (2 * x_360)) - 1), x_364);
-      let x_366 : i32 = from_1;
-      param = x_366;
-      let x_367 : i32 = mid_1;
-      param_1 = x_367;
-      let x_368 : i32 = to_1;
-      param_2 = x_368;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_370 : i32 = m;
-        let x_372 : i32 = i_2;
-        i_2 = (x_372 + (2 * x_370));
-      }
-    }
-
-    continuing {
-      let x_374 : i32 = m;
-      m = (2 * x_374);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_86 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_86);
-  loop {
-    let x_92 : i32 = i_3;
-    switch(x_92) {
-      case 9: {
-        let x_122 : i32 = i_3;
-        data[x_122] = -5;
-      }
-      case 8: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -4;
-      }
-      case 7: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -3;
-      }
-      case 6: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -2;
-      }
-      case 5: {
-        let x_114 : i32 = i_3;
-        data[x_114] = -1;
-      }
-      case 4: {
-        let x_112 : i32 = i_3;
-        data[x_112] = 0;
-      }
-      case 3: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 1;
-      }
-      case 2: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 2;
-      }
-      case 1: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 3;
-      }
-      case 0: {
-        let x_104 : i32 = i_3;
-        data[x_104] = 4;
-      }
-      default: {
-      }
-    }
-    let x_124 : i32 = i_3;
-    i_3 = (x_124 + 1);
-
-    continuing {
-      let x_126 : i32 = i_3;
-      if ((x_126 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_132 : i32 = j_1;
-    let x_133 : bool = (x_132 < 10);
-    let x_135 : f32 = x_28.injectionSwitch.x;
-    if (!((x_135 <= 1.0))) {
-      grey = 1.0;
-    }
-    if (x_133) {
-    } else {
-      break;
-    }
-    let x_140 : i32 = j_1;
-    let x_141 : i32 = j_1;
-    let x_143 : i32 = data[x_141];
-    temp[x_140] = x_143;
-
-    continuing {
-      let x_145 : i32 = j_1;
-      j_1 = (x_145 + 1);
-    }
-  }
-  mergeSort_();
-  let x_149 : f32 = gl_FragCoord.y;
-  if ((i32(x_149) < 30)) {
-    let x_156 : i32 = data[0];
-    grey = (0.5 + (f32(x_156) / 10.0));
-  } else {
-    let x_161 : f32 = gl_FragCoord.y;
-    if ((i32(x_161) < 60)) {
-      let x_168 : i32 = data[1];
-      grey = (0.5 + (f32(x_168) / 10.0));
-    } else {
-      let x_173 : f32 = gl_FragCoord.y;
-      if ((i32(x_173) < 90)) {
-        let x_180 : i32 = data[2];
-        grey = (0.5 + (f32(x_180) / 10.0));
-      } else {
-        let x_185 : f32 = gl_FragCoord.y;
-        if ((i32(x_185) < 120)) {
-          let x_192 : i32 = data[3];
-          grey = (0.5 + (f32(x_192) / 10.0));
-        } else {
-          let x_197 : f32 = gl_FragCoord.y;
-          if ((i32(x_197) < 150)) {
-            discard;
-          } else {
-            let x_204 : f32 = gl_FragCoord.y;
-            if ((i32(x_204) < 180)) {
-              let x_211 : i32 = data[5];
-              grey = (0.5 + (f32(x_211) / 10.0));
-            } else {
-              let x_216 : f32 = gl_FragCoord.y;
-              if ((i32(x_216) < 210)) {
-                let x_223 : i32 = data[6];
-                grey = (0.5 + (f32(x_223) / 10.0));
-              } else {
-                let x_228 : f32 = gl_FragCoord.y;
-                if ((i32(x_228) < 240)) {
-                  let x_235 : i32 = data[7];
-                  grey = (0.5 + (f32(x_235) / 10.0));
-                } else {
-                  let x_240 : f32 = gl_FragCoord.y;
-                  var guard233 : bool = true;
-                  if ((i32(x_240) < 270)) {
-                    let x_247 : i32 = data[8];
-                    grey = (0.5 + (f32(x_247) / 10.0));
-                    guard233 = false;
-                  } else {
-                    if (guard233) {
-                      let x_252 : f32 = x_28.injectionSwitch.y;
-                      if (!((0.0 < x_252))) {
-                        guard233 = false;
-                      }
-                      if (guard233) {
-                        discard;
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_255 : f32 = grey;
-  let x_256 : vec3<f32> = vec3<f32>(x_255, x_255, x_255);
-  x_GLF_color = vec4<f32>(x_256.x, x_256.y, x_256.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.hlsl
deleted file mode 100644
index 22bc5fd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,370 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_255 = from;
-  k = x_255;
-  const int x_256 = from;
-  i = x_256;
-  const int x_257 = mid;
-  j = (x_257 + 1);
-  while (true) {
-    int x_285 = 0;
-    int x_286 = 0;
-    int x_305 = 0;
-    int x_306 = 0;
-    int x_320 = 0;
-    int x_324 = 0;
-    int x_339 = 0;
-    int x_338 = 0;
-    int x_352 = 0;
-    int x_351 = 0;
-    int x_366 = 0;
-    int x_365 = 0;
-    int x_287_phi = 0;
-    int x_307_phi = 0;
-    int x_328_phi = 0;
-    int x_340_phi = 0;
-    int x_353_phi = 0;
-    int x_367_phi = 0;
-    const float x_261 = asfloat(x_28[0].x);
-    if ((1.0f >= x_261)) {
-    } else {
-      continue;
-    }
-    const int x_266 = i;
-    const int x_267 = mid;
-    const int x_269 = j;
-    const int x_270 = to;
-    if (((x_266 <= x_267) & (x_269 <= x_270))) {
-    } else {
-      break;
-    }
-    const int x_276 = data[i];
-    const int x_279 = data[j];
-    const bool x_280 = (x_276 < x_279);
-    if (x_280) {
-      x_285 = k;
-      x_287_phi = x_285;
-    } else {
-      x_286 = 0;
-      x_287_phi = x_286;
-    }
-    const int x_287 = x_287_phi;
-    const int x_288 = (x_287 + 1);
-    if (x_280) {
-      k = x_288;
-      const float x_293 = asfloat(x_28[0].x);
-      if (!((1.0f <= x_293))) {
-      } else {
-        continue;
-      }
-    }
-    const float x_297 = asfloat(x_28[0].y);
-    if ((x_297 >= 0.0f)) {
-    } else {
-      continue;
-    }
-    const int x_300 = 0;
-    if (x_280) {
-      x_305 = i;
-      x_307_phi = x_305;
-    } else {
-      x_306 = 0;
-      x_307_phi = x_306;
-    }
-    const int x_309 = (x_280 ? x_307_phi : x_300);
-    if (x_280) {
-      i = (x_309 + 1);
-    }
-    const int x_315 = 0;
-    if (x_280) {
-      x_320 = data[x_309];
-      const float x_322 = asfloat(x_28[0].y);
-      x_328_phi = x_320;
-      if (!((0.0f <= x_322))) {
-        continue;
-      }
-    } else {
-      x_324 = 0;
-      const float x_326 = asfloat(x_28[0].y);
-      x_328_phi = x_324;
-      if (!((x_326 < 0.0f))) {
-      } else {
-        continue;
-      }
-    }
-    const int x_328 = x_328_phi;
-    if (x_280) {
-      temp[x_287] = (x_280 ? x_328 : x_315);
-    }
-    if (x_280) {
-      x_339 = 0;
-      x_340_phi = x_339;
-    } else {
-      x_338 = k;
-      x_340_phi = x_338;
-    }
-    const int x_340 = x_340_phi;
-    if (x_280) {
-    } else {
-      k = (x_340 + 1);
-    }
-    const float x_345 = asfloat(x_28[0].x);
-    if (!((1.0f <= x_345))) {
-    } else {
-      continue;
-    }
-    if (x_280) {
-      x_352 = 0;
-      x_353_phi = x_352;
-    } else {
-      x_351 = j;
-      x_353_phi = x_351;
-    }
-    const int x_357 = (x_280 ? 0 : x_353_phi);
-    if (x_280) {
-    } else {
-      j = (x_357 + 1);
-    }
-    if (x_280) {
-      x_366 = 0;
-      x_367_phi = x_366;
-    } else {
-      x_365 = data[x_357];
-      x_367_phi = x_365;
-    }
-    const int x_367 = x_367_phi;
-    if (x_280) {
-    } else {
-      temp[x_340] = x_367;
-    }
-  }
-  while (true) {
-    const int x_376 = i;
-    const int x_378 = i;
-    const int x_379 = mid;
-    if (((x_376 < 10) & (x_378 <= x_379))) {
-    } else {
-      break;
-    }
-    const int x_383 = k;
-    k = (x_383 + 1);
-    const int x_385 = i;
-    i = (x_385 + 1);
-    const int x_388 = data[x_385];
-    temp[x_383] = x_388;
-  }
-  const int x_390 = from;
-  i_1 = x_390;
-  while (true) {
-    const int x_395 = i_1;
-    const int x_396 = to;
-    if ((x_395 <= x_396)) {
-    } else {
-      break;
-    }
-    const int x_399 = i_1;
-    const int x_402 = temp[i_1];
-    data[x_399] = x_402;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_88 = asfloat(x_28[0].x);
-  i_3 = int(x_88);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_137 = j_1;
-      const int x_140 = data[j_1];
-      temp[x_137] = x_140;
-    }
-  }
-  mergeSort_();
-  const float x_146 = gl_FragCoord.y;
-  if ((int(x_146) < 30)) {
-    const int x_153 = data[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    const float x_158 = gl_FragCoord.y;
-    if ((int(x_158) < 60)) {
-      const int x_165 = data[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      const float x_170 = gl_FragCoord.y;
-      if ((int(x_170) < 90)) {
-        const int x_177 = data[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        const float x_182 = gl_FragCoord.y;
-        if ((int(x_182) < 120)) {
-          const int x_189 = data[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          const float x_194 = gl_FragCoord.y;
-          if ((int(x_194) < 150)) {
-            discard;
-          } else {
-            const float x_201 = gl_FragCoord.y;
-            if ((int(x_201) < 180)) {
-              const int x_208 = data[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              const float x_213 = gl_FragCoord.y;
-              if ((int(x_213) < 210)) {
-                const int x_220 = data[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                const float x_225 = gl_FragCoord.y;
-                if ((int(x_225) < 240)) {
-                  const int x_232 = data[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  const float x_237 = gl_FragCoord.y;
-                  if ((int(x_237) < 270)) {
-                    const int x_244 = data[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_248 = grey;
-  const float3 x_249 = float3(x_248, x_248, x_248);
-  x_GLF_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.msl
deleted file mode 100644
index 4d5dc70..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.msl
+++ /dev/null
@@ -1,428 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(constant buf0& x_28, thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_255 = *(from);
-  k = x_255;
-  int const x_256 = *(from);
-  i = x_256;
-  int const x_257 = *(mid);
-  j = as_type<int>((as_type<uint>(x_257) + as_type<uint>(1)));
-  while (true) {
-    int x_285 = 0;
-    int x_286 = 0;
-    int x_305 = 0;
-    int x_306 = 0;
-    int x_320 = 0;
-    int x_324 = 0;
-    int x_339 = 0;
-    int x_338 = 0;
-    int x_352 = 0;
-    int x_351 = 0;
-    int x_366 = 0;
-    int x_365 = 0;
-    int x_287_phi = 0;
-    int x_307_phi = 0;
-    int x_328_phi = 0;
-    int x_340_phi = 0;
-    int x_353_phi = 0;
-    int x_367_phi = 0;
-    float const x_261 = x_28.injectionSwitch.x;
-    if ((1.0f >= x_261)) {
-    } else {
-      continue;
-    }
-    int const x_266 = i;
-    int const x_267 = *(mid);
-    int const x_269 = j;
-    int const x_270 = *(to);
-    if (((x_266 <= x_267) & (x_269 <= x_270))) {
-    } else {
-      break;
-    }
-    int const x_274 = i;
-    int const x_276 = (*(tint_symbol_3)).arr[x_274];
-    int const x_277 = j;
-    int const x_279 = (*(tint_symbol_3)).arr[x_277];
-    bool const x_280 = (x_276 < x_279);
-    if (x_280) {
-      x_285 = k;
-      x_287_phi = x_285;
-    } else {
-      x_286 = 0;
-      x_287_phi = x_286;
-    }
-    int const x_287 = x_287_phi;
-    int const x_288 = as_type<int>((as_type<uint>(x_287) + as_type<uint>(1)));
-    if (x_280) {
-      k = x_288;
-      float const x_293 = x_28.injectionSwitch.x;
-      if (!((1.0f <= x_293))) {
-      } else {
-        continue;
-      }
-    }
-    float const x_297 = x_28.injectionSwitch.y;
-    if ((x_297 >= 0.0f)) {
-    } else {
-      continue;
-    }
-    int const x_300 = 0;
-    if (x_280) {
-      x_305 = i;
-      x_307_phi = x_305;
-    } else {
-      x_306 = 0;
-      x_307_phi = x_306;
-    }
-    int const x_307 = x_307_phi;
-    int const x_309 = select(x_300, x_307, x_280);
-    if (x_280) {
-      i = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
-    }
-    int const x_315 = 0;
-    if (x_280) {
-      x_320 = (*(tint_symbol_3)).arr[x_309];
-      float const x_322 = x_28.injectionSwitch.y;
-      x_328_phi = x_320;
-      if (!((0.0f <= x_322))) {
-        continue;
-      }
-    } else {
-      x_324 = 0;
-      float const x_326 = x_28.injectionSwitch.y;
-      x_328_phi = x_324;
-      if (!((x_326 < 0.0f))) {
-      } else {
-        continue;
-      }
-    }
-    int const x_328 = x_328_phi;
-    if (x_280) {
-      (*(tint_symbol_4)).arr[x_287] = select(x_315, x_328, x_280);
-    }
-    if (x_280) {
-      x_339 = 0;
-      x_340_phi = x_339;
-    } else {
-      x_338 = k;
-      x_340_phi = x_338;
-    }
-    int const x_340 = x_340_phi;
-    if (x_280) {
-    } else {
-      k = as_type<int>((as_type<uint>(x_340) + as_type<uint>(1)));
-    }
-    float const x_345 = x_28.injectionSwitch.x;
-    if (!((1.0f <= x_345))) {
-    } else {
-      continue;
-    }
-    if (x_280) {
-      x_352 = 0;
-      x_353_phi = x_352;
-    } else {
-      x_351 = j;
-      x_353_phi = x_351;
-    }
-    int const x_353 = x_353_phi;
-    int const x_355 = 0;
-    int const x_357 = select(x_353, x_355, x_280);
-    if (x_280) {
-    } else {
-      j = as_type<int>((as_type<uint>(x_357) + as_type<uint>(1)));
-    }
-    if (x_280) {
-      x_366 = 0;
-      x_367_phi = x_366;
-    } else {
-      x_365 = (*(tint_symbol_3)).arr[x_357];
-      x_367_phi = x_365;
-    }
-    int const x_367 = x_367_phi;
-    if (x_280) {
-    } else {
-      (*(tint_symbol_4)).arr[x_340] = x_367;
-    }
-  }
-  while (true) {
-    int const x_376 = i;
-    int const x_378 = i;
-    int const x_379 = *(mid);
-    if (((x_376 < 10) & (x_378 <= x_379))) {
-    } else {
-      break;
-    }
-    int const x_383 = k;
-    k = as_type<int>((as_type<uint>(x_383) + as_type<uint>(1)));
-    int const x_385 = i;
-    i = as_type<int>((as_type<uint>(x_385) + as_type<uint>(1)));
-    int const x_388 = (*(tint_symbol_3)).arr[x_385];
-    (*(tint_symbol_4)).arr[x_383] = x_388;
-  }
-  int const x_390 = *(from);
-  i_1 = x_390;
-  while (true) {
-    int const x_395 = i_1;
-    int const x_396 = *(to);
-    if ((x_395 <= x_396)) {
-    } else {
-      break;
-    }
-    int const x_399 = i_1;
-    int const x_400 = i_1;
-    int const x_402 = (*(tint_symbol_4)).arr[x_400];
-    (*(tint_symbol_3)).arr[x_399] = x_402;
-    {
-      int const x_404 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_404) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_411 = m;
-    int const x_412 = high;
-    if ((x_411 <= x_412)) {
-    } else {
-      break;
-    }
-    int const x_415 = low;
-    i_2 = x_415;
-    while (true) {
-      int const x_420 = i_2;
-      int const x_421 = high;
-      if ((x_420 < x_421)) {
-      } else {
-        break;
-      }
-      int const x_424 = i_2;
-      from_1 = x_424;
-      int const x_425 = i_2;
-      int const x_426 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_425) + as_type<uint>(x_426)))) - as_type<uint>(1)));
-      int const x_429 = i_2;
-      int const x_430 = m;
-      int const x_434 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_429) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_430))))))) - as_type<uint>(1))), x_434);
-      int const x_436 = from_1;
-      param = x_436;
-      int const x_437 = mid_1;
-      param_1 = x_437;
-      int const x_438 = to_1;
-      param_2 = x_438;
-      merge_i1_i1_i1_(x_28, &(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_440 = m;
-        int const x_442 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_442) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_440))))));
-      }
-    }
-    {
-      int const x_444 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_444)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_88 = x_28.injectionSwitch.x;
-  i_3 = int(x_88);
-  while (true) {
-    int const x_94 = i_3;
-    switch(x_94) {
-      case 9: {
-        int const x_124 = i_3;
-        (*(tint_symbol_7)).arr[x_124] = -5;
-        break;
-      }
-      case 8: {
-        int const x_122 = i_3;
-        (*(tint_symbol_7)).arr[x_122] = -4;
-        break;
-      }
-      case 7: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -3;
-        break;
-      }
-      case 6: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -2;
-        break;
-      }
-      case 5: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -1;
-        break;
-      }
-      case 4: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = 0;
-        break;
-      }
-      case 3: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = 1;
-        break;
-      }
-      case 2: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 2;
-        break;
-      }
-      case 1: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 3;
-        break;
-      }
-      case 0: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_126 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-    {
-      int const x_128 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_134 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    int const x_137 = j_1;
-    int const x_138 = j_1;
-    int const x_140 = (*(tint_symbol_7)).arr[x_138];
-    (*(tint_symbol_8)).arr[x_137] = x_140;
-    {
-      int const x_142 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(x_28, tint_symbol_7, tint_symbol_8);
-  float const x_146 = (*(tint_symbol_9)).y;
-  if ((int(x_146) < 30)) {
-    int const x_153 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    float const x_158 = (*(tint_symbol_9)).y;
-    if ((int(x_158) < 60)) {
-      int const x_165 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      float const x_170 = (*(tint_symbol_9)).y;
-      if ((int(x_170) < 90)) {
-        int const x_177 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        float const x_182 = (*(tint_symbol_9)).y;
-        if ((int(x_182) < 120)) {
-          int const x_189 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          float const x_194 = (*(tint_symbol_9)).y;
-          if ((int(x_194) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_201 = (*(tint_symbol_9)).y;
-            if ((int(x_201) < 180)) {
-              int const x_208 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              float const x_213 = (*(tint_symbol_9)).y;
-              if ((int(x_213) < 210)) {
-                int const x_220 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                float const x_225 = (*(tint_symbol_9)).y;
-                if ((int(x_225) < 240)) {
-                  int const x_232 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  float const x_237 = (*(tint_symbol_9)).y;
-                  if ((int(x_237) < 270)) {
-                    int const x_244 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_248 = grey;
-  float3 const x_249 = float3(x_248, x_248, x_248);
-  *(tint_symbol_10) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.spvasm
deleted file mode 100644
index 63aeb8c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,842 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 518
-; Schema: 0
-               OpCapability Shader
-        %286 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %x_285 "x_285"
-               OpName %x_286 "x_286"
-               OpName %x_305 "x_305"
-               OpName %x_306 "x_306"
-               OpName %x_320 "x_320"
-               OpName %x_324 "x_324"
-               OpName %x_339 "x_339"
-               OpName %x_338 "x_338"
-               OpName %x_352 "x_352"
-               OpName %x_351 "x_351"
-               OpName %x_366 "x_366"
-               OpName %x_365 "x_365"
-               OpName %x_287_phi "x_287_phi"
-               OpName %x_307_phi "x_307_phi"
-               OpName %x_328_phi "x_328_phi"
-               OpName %x_340_phi "x_340_phi"
-               OpName %x_353_phi "x_353_phi"
-               OpName %x_367_phi "x_367_phi"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-     %int_10 = OpConstant %int 10
-        %242 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %310 = OpConstantNull %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %505 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-      %x_285 = OpVariable %_ptr_Function_int Function %32
-      %x_286 = OpVariable %_ptr_Function_int Function %32
-      %x_305 = OpVariable %_ptr_Function_int Function %32
-      %x_306 = OpVariable %_ptr_Function_int Function %32
-      %x_320 = OpVariable %_ptr_Function_int Function %32
-      %x_324 = OpVariable %_ptr_Function_int Function %32
-      %x_339 = OpVariable %_ptr_Function_int Function %32
-      %x_338 = OpVariable %_ptr_Function_int Function %32
-      %x_352 = OpVariable %_ptr_Function_int Function %32
-      %x_351 = OpVariable %_ptr_Function_int Function %32
-      %x_366 = OpVariable %_ptr_Function_int Function %32
-      %x_365 = OpVariable %_ptr_Function_int Function %32
-  %x_287_phi = OpVariable %_ptr_Function_int Function %32
-  %x_307_phi = OpVariable %_ptr_Function_int Function %32
-  %x_328_phi = OpVariable %_ptr_Function_int Function %32
-  %x_340_phi = OpVariable %_ptr_Function_int Function %32
-  %x_353_phi = OpVariable %_ptr_Function_int Function %32
-  %x_367_phi = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-         %69 = OpLoad %float %68
-         %71 = OpFOrdGreaterThanEqual %bool %float_1 %69
-               OpSelectionMerge %73 None
-               OpBranchConditional %71 %74 %75
-         %74 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-               OpBranch %46
-         %73 = OpLabel
-         %76 = OpLoad %int %i
-         %78 = OpLoad %int %mid
-         %79 = OpLoad %int %j
-         %81 = OpLoad %int %to
-         %82 = OpSLessThanEqual %bool %76 %78
-         %83 = OpSLessThanEqual %bool %79 %81
-         %84 = OpLogicalAnd %bool %82 %83
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %87
-         %86 = OpLabel
-               OpBranch %85
-         %87 = OpLabel
-               OpBranch %45
-         %85 = OpLabel
-         %88 = OpLoad %int %i
-         %90 = OpAccessChain %_ptr_Private_int %data %88
-         %91 = OpLoad %int %90
-         %92 = OpLoad %int %j
-         %93 = OpAccessChain %_ptr_Private_int %data %92
-         %94 = OpLoad %int %93
-         %95 = OpSLessThan %bool %91 %94
-               OpSelectionMerge %96 None
-               OpBranchConditional %95 %97 %98
-         %97 = OpLabel
-         %99 = OpLoad %int %k
-               OpStore %x_285 %99
-        %100 = OpLoad %int %x_285
-               OpStore %x_287_phi %100
-               OpBranch %96
-         %98 = OpLabel
-               OpStore %x_286 %int_0
-        %102 = OpLoad %int %x_286
-               OpStore %x_287_phi %102
-               OpBranch %96
-         %96 = OpLabel
-        %103 = OpLoad %int %x_287_phi
-        %104 = OpIAdd %int %103 %int_1
-               OpSelectionMerge %105 None
-               OpBranchConditional %95 %106 %105
-        %106 = OpLabel
-               OpStore %k %104
-        %107 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %108 = OpLoad %float %107
-        %110 = OpFOrdLessThanEqual %bool %float_1 %108
-        %109 = OpLogicalNot %bool %110
-               OpSelectionMerge %111 None
-               OpBranchConditional %109 %112 %113
-        %112 = OpLabel
-               OpBranch %111
-        %113 = OpLabel
-               OpBranch %46
-        %111 = OpLabel
-               OpBranch %105
-        %105 = OpLabel
-        %115 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %116 = OpLoad %float %115
-        %118 = OpFOrdGreaterThanEqual %bool %116 %float_0
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %121
-        %120 = OpLabel
-               OpBranch %119
-        %121 = OpLabel
-               OpBranch %46
-        %119 = OpLabel
-               OpSelectionMerge %122 None
-               OpBranchConditional %95 %123 %124
-        %123 = OpLabel
-        %125 = OpLoad %int %i
-               OpStore %x_305 %125
-        %126 = OpLoad %int %x_305
-               OpStore %x_307_phi %126
-               OpBranch %122
-        %124 = OpLabel
-               OpStore %x_306 %int_0
-        %127 = OpLoad %int %x_306
-               OpStore %x_307_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %int %x_307_phi
-        %129 = OpSelect %int %95 %128 %int_0
-               OpSelectionMerge %130 None
-               OpBranchConditional %95 %131 %130
-        %131 = OpLabel
-        %132 = OpIAdd %int %129 %int_1
-               OpStore %i %132
-               OpBranch %130
-        %130 = OpLabel
-               OpSelectionMerge %133 None
-               OpBranchConditional %95 %134 %135
-        %134 = OpLabel
-        %136 = OpAccessChain %_ptr_Private_int %data %129
-        %137 = OpLoad %int %136
-               OpStore %x_320 %137
-        %138 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %139 = OpLoad %float %138
-        %140 = OpLoad %int %x_320
-               OpStore %x_328_phi %140
-        %142 = OpFOrdLessThanEqual %bool %float_0 %139
-        %141 = OpLogicalNot %bool %142
-               OpSelectionMerge %143 None
-               OpBranchConditional %141 %144 %143
-        %144 = OpLabel
-               OpBranch %46
-        %143 = OpLabel
-               OpBranch %133
-        %135 = OpLabel
-               OpStore %x_324 %int_0
-        %145 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %146 = OpLoad %float %145
-        %147 = OpLoad %int %x_324
-               OpStore %x_328_phi %147
-        %149 = OpFOrdLessThan %bool %146 %float_0
-        %148 = OpLogicalNot %bool %149
-               OpSelectionMerge %150 None
-               OpBranchConditional %148 %151 %152
-        %151 = OpLabel
-               OpBranch %150
-        %152 = OpLabel
-               OpBranch %46
-        %150 = OpLabel
-               OpBranch %133
-        %133 = OpLabel
-        %153 = OpLoad %int %x_328_phi
-               OpSelectionMerge %154 None
-               OpBranchConditional %95 %155 %154
-        %155 = OpLabel
-        %156 = OpAccessChain %_ptr_Private_int %temp %103
-        %157 = OpSelect %int %95 %153 %int_0
-               OpStore %156 %157
-               OpBranch %154
-        %154 = OpLabel
-               OpSelectionMerge %158 None
-               OpBranchConditional %95 %159 %160
-        %159 = OpLabel
-               OpStore %x_339 %int_0
-        %161 = OpLoad %int %x_339
-               OpStore %x_340_phi %161
-               OpBranch %158
-        %160 = OpLabel
-        %162 = OpLoad %int %k
-               OpStore %x_338 %162
-        %163 = OpLoad %int %x_338
-               OpStore %x_340_phi %163
-               OpBranch %158
-        %158 = OpLabel
-        %164 = OpLoad %int %x_340_phi
-               OpSelectionMerge %165 None
-               OpBranchConditional %95 %166 %167
-        %166 = OpLabel
-               OpBranch %165
-        %167 = OpLabel
-        %168 = OpIAdd %int %164 %int_1
-               OpStore %k %168
-               OpBranch %165
-        %165 = OpLabel
-        %169 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %170 = OpLoad %float %169
-        %172 = OpFOrdLessThanEqual %bool %float_1 %170
-        %171 = OpLogicalNot %bool %172
-               OpSelectionMerge %173 None
-               OpBranchConditional %171 %174 %175
-        %174 = OpLabel
-               OpBranch %173
-        %175 = OpLabel
-               OpBranch %46
-        %173 = OpLabel
-               OpSelectionMerge %176 None
-               OpBranchConditional %95 %177 %178
-        %177 = OpLabel
-               OpStore %x_352 %int_0
-        %179 = OpLoad %int %x_352
-               OpStore %x_353_phi %179
-               OpBranch %176
-        %178 = OpLabel
-        %180 = OpLoad %int %j
-               OpStore %x_351 %180
-        %181 = OpLoad %int %x_351
-               OpStore %x_353_phi %181
-               OpBranch %176
-        %176 = OpLabel
-        %182 = OpLoad %int %x_353_phi
-        %183 = OpSelect %int %95 %int_0 %182
-               OpSelectionMerge %184 None
-               OpBranchConditional %95 %185 %186
-        %185 = OpLabel
-               OpBranch %184
-        %186 = OpLabel
-        %187 = OpIAdd %int %183 %int_1
-               OpStore %j %187
-               OpBranch %184
-        %184 = OpLabel
-               OpSelectionMerge %188 None
-               OpBranchConditional %95 %189 %190
-        %189 = OpLabel
-               OpStore %x_366 %int_0
-        %191 = OpLoad %int %x_366
-               OpStore %x_367_phi %191
-               OpBranch %188
-        %190 = OpLabel
-        %192 = OpAccessChain %_ptr_Private_int %data %183
-        %193 = OpLoad %int %192
-               OpStore %x_365 %193
-        %194 = OpLoad %int %x_365
-               OpStore %x_367_phi %194
-               OpBranch %188
-        %188 = OpLabel
-        %195 = OpLoad %int %x_367_phi
-               OpSelectionMerge %196 None
-               OpBranchConditional %95 %197 %198
-        %197 = OpLabel
-               OpBranch %196
-        %198 = OpLabel
-        %199 = OpAccessChain %_ptr_Private_int %temp %164
-               OpStore %199 %195
-               OpBranch %196
-        %196 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %200
-        %200 = OpLabel
-               OpLoopMerge %201 %202 None
-               OpBranch %203
-        %203 = OpLabel
-        %204 = OpLoad %int %i
-        %205 = OpLoad %int %i
-        %207 = OpLoad %int %mid
-        %209 = OpSLessThan %bool %204 %int_10
-        %210 = OpSLessThanEqual %bool %205 %207
-        %211 = OpLogicalAnd %bool %209 %210
-               OpSelectionMerge %212 None
-               OpBranchConditional %211 %213 %214
-        %213 = OpLabel
-               OpBranch %212
-        %214 = OpLabel
-               OpBranch %201
-        %212 = OpLabel
-        %215 = OpLoad %int %k
-        %216 = OpIAdd %int %215 %int_1
-               OpStore %k %216
-        %217 = OpLoad %int %i
-        %218 = OpIAdd %int %217 %int_1
-               OpStore %i %218
-        %219 = OpAccessChain %_ptr_Private_int %data %217
-        %220 = OpLoad %int %219
-        %221 = OpAccessChain %_ptr_Private_int %temp %215
-               OpStore %221 %220
-               OpBranch %202
-        %202 = OpLabel
-               OpBranch %200
-        %201 = OpLabel
-        %223 = OpLoad %int %from
-               OpStore %i_1 %223
-               OpBranch %224
-        %224 = OpLabel
-               OpLoopMerge %225 %226 None
-               OpBranch %227
-        %227 = OpLabel
-        %228 = OpLoad %int %i_1
-        %230 = OpLoad %int %to
-        %231 = OpSLessThanEqual %bool %228 %230
-               OpSelectionMerge %232 None
-               OpBranchConditional %231 %233 %234
-        %233 = OpLabel
-               OpBranch %232
-        %234 = OpLabel
-               OpBranch %225
-        %232 = OpLabel
-        %235 = OpLoad %int %i_1
-        %236 = OpLoad %int %i_1
-        %237 = OpAccessChain %_ptr_Private_int %temp %236
-        %238 = OpLoad %int %237
-        %239 = OpAccessChain %_ptr_Private_int %data %235
-               OpStore %239 %238
-               OpBranch %226
-        %226 = OpLabel
-        %240 = OpLoad %int %i_1
-        %241 = OpIAdd %int %240 %int_1
-               OpStore %i_1 %241
-               OpBranch %224
-        %225 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %242
-        %244 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %256
-        %256 = OpLabel
-               OpLoopMerge %257 %258 None
-               OpBranch %259
-        %259 = OpLabel
-        %260 = OpLoad %int %m
-        %261 = OpLoad %int %high
-        %262 = OpSLessThanEqual %bool %260 %261
-               OpSelectionMerge %263 None
-               OpBranchConditional %262 %264 %265
-        %264 = OpLabel
-               OpBranch %263
-        %265 = OpLabel
-               OpBranch %257
-        %263 = OpLabel
-        %266 = OpLoad %int %low
-               OpStore %i_2 %266
-               OpBranch %267
-        %267 = OpLabel
-               OpLoopMerge %268 %269 None
-               OpBranch %270
-        %270 = OpLabel
-        %271 = OpLoad %int %i_2
-        %272 = OpLoad %int %high
-        %273 = OpSLessThan %bool %271 %272
-               OpSelectionMerge %274 None
-               OpBranchConditional %273 %275 %276
-        %275 = OpLabel
-               OpBranch %274
-        %276 = OpLabel
-               OpBranch %268
-        %274 = OpLabel
-        %277 = OpLoad %int %i_2
-               OpStore %from_1 %277
-        %278 = OpLoad %int %i_2
-        %279 = OpLoad %int %m
-        %280 = OpIAdd %int %278 %279
-        %281 = OpISub %int %280 %int_1
-               OpStore %mid_1 %281
-        %282 = OpLoad %int %i_2
-        %283 = OpLoad %int %m
-        %284 = OpLoad %int %high
-        %288 = OpIMul %int %int_2 %283
-        %289 = OpIAdd %int %282 %288
-        %290 = OpISub %int %289 %int_1
-        %285 = OpExtInst %int %286 SMin %290 %284
-               OpStore %to_1 %285
-        %291 = OpLoad %int %from_1
-               OpStore %param %291
-        %292 = OpLoad %int %mid_1
-               OpStore %param_1 %292
-        %293 = OpLoad %int %to_1
-               OpStore %param_2 %293
-        %294 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %269
-        %269 = OpLabel
-        %298 = OpLoad %int %m
-        %299 = OpLoad %int %i_2
-        %300 = OpIMul %int %int_2 %298
-        %301 = OpIAdd %int %299 %300
-               OpStore %i_2 %301
-               OpBranch %267
-        %268 = OpLabel
-               OpBranch %258
-        %258 = OpLabel
-        %302 = OpLoad %int %m
-        %303 = OpIMul %int %int_2 %302
-               OpStore %m %303
-               OpBranch %256
-        %257 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %242
-        %305 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %310
-        %311 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %312 = OpLoad %float %311
-        %313 = OpConvertFToS %int %312
-               OpStore %i_3 %313
-               OpBranch %314
-        %314 = OpLabel
-               OpLoopMerge %315 %316 None
-               OpBranch %317
-        %317 = OpLabel
-        %318 = OpLoad %int %i_3
-               OpSelectionMerge %319 None
-               OpSwitch %318 %320 9 %321 8 %322 7 %323 6 %324 5 %325 4 %326 3 %327 2 %328 1 %329 0 %330
-        %321 = OpLabel
-        %331 = OpLoad %int %i_3
-        %332 = OpAccessChain %_ptr_Private_int %data %331
-               OpStore %332 %int_n5
-               OpBranch %319
-        %322 = OpLabel
-        %334 = OpLoad %int %i_3
-        %335 = OpAccessChain %_ptr_Private_int %data %334
-               OpStore %335 %int_n4
-               OpBranch %319
-        %323 = OpLabel
-        %337 = OpLoad %int %i_3
-        %338 = OpAccessChain %_ptr_Private_int %data %337
-               OpStore %338 %int_n3
-               OpBranch %319
-        %324 = OpLabel
-        %340 = OpLoad %int %i_3
-        %341 = OpAccessChain %_ptr_Private_int %data %340
-               OpStore %341 %int_n2
-               OpBranch %319
-        %325 = OpLabel
-        %343 = OpLoad %int %i_3
-        %344 = OpAccessChain %_ptr_Private_int %data %343
-               OpStore %344 %int_n1
-               OpBranch %319
-        %326 = OpLabel
-        %346 = OpLoad %int %i_3
-        %347 = OpAccessChain %_ptr_Private_int %data %346
-               OpStore %347 %int_0
-               OpBranch %319
-        %327 = OpLabel
-        %348 = OpLoad %int %i_3
-        %349 = OpAccessChain %_ptr_Private_int %data %348
-               OpStore %349 %int_1
-               OpBranch %319
-        %328 = OpLabel
-        %350 = OpLoad %int %i_3
-        %351 = OpAccessChain %_ptr_Private_int %data %350
-               OpStore %351 %int_2
-               OpBranch %319
-        %329 = OpLabel
-        %352 = OpLoad %int %i_3
-        %353 = OpAccessChain %_ptr_Private_int %data %352
-               OpStore %353 %int_3
-               OpBranch %319
-        %330 = OpLabel
-        %355 = OpLoad %int %i_3
-        %356 = OpAccessChain %_ptr_Private_int %data %355
-               OpStore %356 %int_4
-               OpBranch %319
-        %320 = OpLabel
-               OpBranch %319
-        %319 = OpLabel
-        %358 = OpLoad %int %i_3
-        %359 = OpIAdd %int %358 %int_1
-               OpStore %i_3 %359
-               OpBranch %316
-        %316 = OpLabel
-        %360 = OpLoad %int %i_3
-        %361 = OpSLessThan %bool %360 %int_10
-               OpBranchConditional %361 %314 %315
-        %315 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %362
-        %362 = OpLabel
-               OpLoopMerge %363 %364 None
-               OpBranch %365
-        %365 = OpLabel
-        %366 = OpLoad %int %j_1
-        %367 = OpSLessThan %bool %366 %int_10
-               OpSelectionMerge %368 None
-               OpBranchConditional %367 %369 %370
-        %369 = OpLabel
-               OpBranch %368
-        %370 = OpLabel
-               OpBranch %363
-        %368 = OpLabel
-        %371 = OpLoad %int %j_1
-        %372 = OpLoad %int %j_1
-        %373 = OpAccessChain %_ptr_Private_int %data %372
-        %374 = OpLoad %int %373
-        %375 = OpAccessChain %_ptr_Private_int %temp %371
-               OpStore %375 %374
-               OpBranch %364
-        %364 = OpLabel
-        %376 = OpLoad %int %j_1
-        %377 = OpIAdd %int %376 %int_1
-               OpStore %j_1 %377
-               OpBranch %362
-        %363 = OpLabel
-        %378 = OpFunctionCall %void %mergeSort_
-        %380 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %381 = OpLoad %float %380
-        %382 = OpConvertFToS %int %381
-        %384 = OpSLessThan %bool %382 %int_30
-               OpSelectionMerge %385 None
-               OpBranchConditional %384 %386 %387
-        %386 = OpLabel
-        %388 = OpAccessChain %_ptr_Private_int %data %int_0
-        %389 = OpLoad %int %388
-        %391 = OpConvertSToF %float %389
-        %393 = OpFDiv %float %391 %float_10
-        %394 = OpFAdd %float %float_0_5 %393
-               OpStore %grey %394
-               OpBranch %385
-        %387 = OpLabel
-        %395 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %396 = OpLoad %float %395
-        %397 = OpConvertFToS %int %396
-        %399 = OpSLessThan %bool %397 %int_60
-               OpSelectionMerge %400 None
-               OpBranchConditional %399 %401 %402
-        %401 = OpLabel
-        %403 = OpAccessChain %_ptr_Private_int %data %int_1
-        %404 = OpLoad %int %403
-        %405 = OpConvertSToF %float %404
-        %406 = OpFDiv %float %405 %float_10
-        %407 = OpFAdd %float %float_0_5 %406
-               OpStore %grey %407
-               OpBranch %400
-        %402 = OpLabel
-        %408 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %409 = OpLoad %float %408
-        %410 = OpConvertFToS %int %409
-        %412 = OpSLessThan %bool %410 %int_90
-               OpSelectionMerge %413 None
-               OpBranchConditional %412 %414 %415
-        %414 = OpLabel
-        %416 = OpAccessChain %_ptr_Private_int %data %int_2
-        %417 = OpLoad %int %416
-        %418 = OpConvertSToF %float %417
-        %419 = OpFDiv %float %418 %float_10
-        %420 = OpFAdd %float %float_0_5 %419
-               OpStore %grey %420
-               OpBranch %413
-        %415 = OpLabel
-        %421 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %422 = OpLoad %float %421
-        %423 = OpConvertFToS %int %422
-        %425 = OpSLessThan %bool %423 %int_120
-               OpSelectionMerge %426 None
-               OpBranchConditional %425 %427 %428
-        %427 = OpLabel
-        %429 = OpAccessChain %_ptr_Private_int %data %int_3
-        %430 = OpLoad %int %429
-        %431 = OpConvertSToF %float %430
-        %432 = OpFDiv %float %431 %float_10
-        %433 = OpFAdd %float %float_0_5 %432
-               OpStore %grey %433
-               OpBranch %426
-        %428 = OpLabel
-        %434 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %435 = OpLoad %float %434
-        %436 = OpConvertFToS %int %435
-        %438 = OpSLessThan %bool %436 %int_150
-               OpSelectionMerge %439 None
-               OpBranchConditional %438 %440 %441
-        %440 = OpLabel
-               OpKill
-        %441 = OpLabel
-        %442 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %443 = OpLoad %float %442
-        %444 = OpConvertFToS %int %443
-        %446 = OpSLessThan %bool %444 %int_180
-               OpSelectionMerge %447 None
-               OpBranchConditional %446 %448 %449
-        %448 = OpLabel
-        %451 = OpAccessChain %_ptr_Private_int %data %int_5
-        %452 = OpLoad %int %451
-        %453 = OpConvertSToF %float %452
-        %454 = OpFDiv %float %453 %float_10
-        %455 = OpFAdd %float %float_0_5 %454
-               OpStore %grey %455
-               OpBranch %447
-        %449 = OpLabel
-        %456 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %457 = OpLoad %float %456
-        %458 = OpConvertFToS %int %457
-        %460 = OpSLessThan %bool %458 %int_210
-               OpSelectionMerge %461 None
-               OpBranchConditional %460 %462 %463
-        %462 = OpLabel
-        %465 = OpAccessChain %_ptr_Private_int %data %int_6
-        %466 = OpLoad %int %465
-        %467 = OpConvertSToF %float %466
-        %468 = OpFDiv %float %467 %float_10
-        %469 = OpFAdd %float %float_0_5 %468
-               OpStore %grey %469
-               OpBranch %461
-        %463 = OpLabel
-        %470 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %471 = OpLoad %float %470
-        %472 = OpConvertFToS %int %471
-        %474 = OpSLessThan %bool %472 %int_240
-               OpSelectionMerge %475 None
-               OpBranchConditional %474 %476 %477
-        %476 = OpLabel
-        %479 = OpAccessChain %_ptr_Private_int %data %int_7
-        %480 = OpLoad %int %479
-        %481 = OpConvertSToF %float %480
-        %482 = OpFDiv %float %481 %float_10
-        %483 = OpFAdd %float %float_0_5 %482
-               OpStore %grey %483
-               OpBranch %475
-        %477 = OpLabel
-        %484 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %485 = OpLoad %float %484
-        %486 = OpConvertFToS %int %485
-        %488 = OpSLessThan %bool %486 %int_270
-               OpSelectionMerge %489 None
-               OpBranchConditional %488 %490 %491
-        %490 = OpLabel
-        %493 = OpAccessChain %_ptr_Private_int %data %int_8
-        %494 = OpLoad %int %493
-        %495 = OpConvertSToF %float %494
-        %496 = OpFDiv %float %495 %float_10
-        %497 = OpFAdd %float %float_0_5 %496
-               OpStore %grey %497
-               OpBranch %489
-        %491 = OpLabel
-               OpKill
-        %489 = OpLabel
-               OpBranch %475
-        %475 = OpLabel
-               OpBranch %461
-        %461 = OpLabel
-               OpBranch %447
-        %447 = OpLabel
-               OpBranch %439
-        %439 = OpLabel
-               OpBranch %426
-        %426 = OpLabel
-               OpBranch %413
-        %413 = OpLabel
-               OpBranch %400
-        %400 = OpLabel
-               OpBranch %385
-        %385 = OpLabel
-        %498 = OpLoad %float %grey
-        %500 = OpCompositeConstruct %v3float %498 %498 %498
-        %501 = OpCompositeExtract %float %500 0
-        %502 = OpCompositeExtract %float %500 1
-        %503 = OpCompositeExtract %float %500 2
-        %504 = OpCompositeConstruct %v4float %501 %502 %503 %float_1
-               OpStore %x_GLF_color %504
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %505
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %509 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %510 = OpFunctionCall %void %main_1
-        %511 = OpLoad %v4float %x_GLF_color
-        %512 = OpCompositeConstruct %main_out %511
-               OpReturnValue %512
-               OpFunctionEnd
-       %main = OpFunction %void None %242
-        %514 = OpLabel
-        %516 = OpLoad %v4float %gl_FragCoord_param_1
-        %515 = OpFunctionCall %main_out %main_inner %516
-        %517 = OpCompositeExtract %v4float %515 0
-               OpStore %x_GLF_color_1_1 %517
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.wgsl
deleted file mode 100644
index 395b996..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,414 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_255 : i32 = *(from);
-  k = x_255;
-  let x_256 : i32 = *(from);
-  i = x_256;
-  let x_257 : i32 = *(mid);
-  j = (x_257 + 1);
-  loop {
-    var x_285 : i32;
-    var x_286 : i32;
-    var x_305 : i32;
-    var x_306 : i32;
-    var x_320 : i32;
-    var x_324 : i32;
-    var x_339 : i32;
-    var x_338 : i32;
-    var x_352 : i32;
-    var x_351 : i32;
-    var x_366 : i32;
-    var x_365 : i32;
-    var x_287_phi : i32;
-    var x_307_phi : i32;
-    var x_328_phi : i32;
-    var x_340_phi : i32;
-    var x_353_phi : i32;
-    var x_367_phi : i32;
-    let x_261 : f32 = x_28.injectionSwitch.x;
-    if ((1.0 >= x_261)) {
-    } else {
-      continue;
-    }
-    let x_266 : i32 = i;
-    let x_267 : i32 = *(mid);
-    let x_269 : i32 = j;
-    let x_270 : i32 = *(to);
-    if (((x_266 <= x_267) & (x_269 <= x_270))) {
-    } else {
-      break;
-    }
-    let x_274 : i32 = i;
-    let x_276 : i32 = data[x_274];
-    let x_277 : i32 = j;
-    let x_279 : i32 = data[x_277];
-    let x_280 : bool = (x_276 < x_279);
-    if (x_280) {
-      x_285 = k;
-      x_287_phi = x_285;
-    } else {
-      x_286 = 0;
-      x_287_phi = x_286;
-    }
-    let x_287 : i32 = x_287_phi;
-    let x_288 : i32 = (x_287 + 1);
-    if (x_280) {
-      k = x_288;
-      let x_293 : f32 = x_28.injectionSwitch.x;
-      if (!((1.0 <= x_293))) {
-      } else {
-        continue;
-      }
-    }
-    let x_297 : f32 = x_28.injectionSwitch.y;
-    if ((x_297 >= 0.0)) {
-    } else {
-      continue;
-    }
-    let x_300 : i32 = 0;
-    if (x_280) {
-      x_305 = i;
-      x_307_phi = x_305;
-    } else {
-      x_306 = 0;
-      x_307_phi = x_306;
-    }
-    let x_307 : i32 = x_307_phi;
-    let x_309 : i32 = select(x_300, x_307, x_280);
-    if (x_280) {
-      i = (x_309 + 1);
-    }
-    let x_315 : i32 = 0;
-    if (x_280) {
-      x_320 = data[x_309];
-      let x_322 : f32 = x_28.injectionSwitch.y;
-      x_328_phi = x_320;
-      if (!((0.0 <= x_322))) {
-        continue;
-      }
-    } else {
-      x_324 = 0;
-      let x_326 : f32 = x_28.injectionSwitch.y;
-      x_328_phi = x_324;
-      if (!((x_326 < 0.0))) {
-      } else {
-        continue;
-      }
-    }
-    let x_328 : i32 = x_328_phi;
-    if (x_280) {
-      temp[x_287] = select(x_315, x_328, x_280);
-    }
-    if (x_280) {
-      x_339 = 0;
-      x_340_phi = x_339;
-    } else {
-      x_338 = k;
-      x_340_phi = x_338;
-    }
-    let x_340 : i32 = x_340_phi;
-    if (x_280) {
-    } else {
-      k = (x_340 + 1);
-    }
-    let x_345 : f32 = x_28.injectionSwitch.x;
-    if (!((1.0 <= x_345))) {
-    } else {
-      continue;
-    }
-    if (x_280) {
-      x_352 = 0;
-      x_353_phi = x_352;
-    } else {
-      x_351 = j;
-      x_353_phi = x_351;
-    }
-    let x_353 : i32 = x_353_phi;
-    let x_355 : i32 = 0;
-    let x_357 : i32 = select(x_353, x_355, x_280);
-    if (x_280) {
-    } else {
-      j = (x_357 + 1);
-    }
-    if (x_280) {
-      x_366 = 0;
-      x_367_phi = x_366;
-    } else {
-      x_365 = data[x_357];
-      x_367_phi = x_365;
-    }
-    let x_367 : i32 = x_367_phi;
-    if (x_280) {
-    } else {
-      temp[x_340] = x_367;
-    }
-  }
-  loop {
-    let x_376 : i32 = i;
-    let x_378 : i32 = i;
-    let x_379 : i32 = *(mid);
-    if (((x_376 < 10) & (x_378 <= x_379))) {
-    } else {
-      break;
-    }
-    let x_383 : i32 = k;
-    k = (x_383 + 1);
-    let x_385 : i32 = i;
-    i = (x_385 + 1);
-    let x_388 : i32 = data[x_385];
-    temp[x_383] = x_388;
-  }
-  let x_390 : i32 = *(from);
-  i_1 = x_390;
-  loop {
-    let x_395 : i32 = i_1;
-    let x_396 : i32 = *(to);
-    if ((x_395 <= x_396)) {
-    } else {
-      break;
-    }
-    let x_399 : i32 = i_1;
-    let x_400 : i32 = i_1;
-    let x_402 : i32 = temp[x_400];
-    data[x_399] = x_402;
-
-    continuing {
-      let x_404 : i32 = i_1;
-      i_1 = (x_404 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_411 : i32 = m;
-    let x_412 : i32 = high;
-    if ((x_411 <= x_412)) {
-    } else {
-      break;
-    }
-    let x_415 : i32 = low;
-    i_2 = x_415;
-    loop {
-      let x_420 : i32 = i_2;
-      let x_421 : i32 = high;
-      if ((x_420 < x_421)) {
-      } else {
-        break;
-      }
-      let x_424 : i32 = i_2;
-      from_1 = x_424;
-      let x_425 : i32 = i_2;
-      let x_426 : i32 = m;
-      mid_1 = ((x_425 + x_426) - 1);
-      let x_429 : i32 = i_2;
-      let x_430 : i32 = m;
-      let x_434 : i32 = high;
-      to_1 = min(((x_429 + (2 * x_430)) - 1), x_434);
-      let x_436 : i32 = from_1;
-      param = x_436;
-      let x_437 : i32 = mid_1;
-      param_1 = x_437;
-      let x_438 : i32 = to_1;
-      param_2 = x_438;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_440 : i32 = m;
-        let x_442 : i32 = i_2;
-        i_2 = (x_442 + (2 * x_440));
-      }
-    }
-
-    continuing {
-      let x_444 : i32 = m;
-      m = (2 * x_444);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_88 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_88);
-  loop {
-    let x_94 : i32 = i_3;
-    switch(x_94) {
-      case 9: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -5;
-      }
-      case 8: {
-        let x_122 : i32 = i_3;
-        data[x_122] = -4;
-      }
-      case 7: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -3;
-      }
-      case 6: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -2;
-      }
-      case 5: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -1;
-      }
-      case 4: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 0;
-      }
-      case 3: {
-        let x_112 : i32 = i_3;
-        data[x_112] = 1;
-      }
-      case 2: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 2;
-      }
-      case 1: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 3;
-      }
-      case 0: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 4;
-      }
-      default: {
-      }
-    }
-    let x_126 : i32 = i_3;
-    i_3 = (x_126 + 1);
-
-    continuing {
-      let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_134 : i32 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    let x_137 : i32 = j_1;
-    let x_138 : i32 = j_1;
-    let x_140 : i32 = data[x_138];
-    temp[x_137] = x_140;
-
-    continuing {
-      let x_142 : i32 = j_1;
-      j_1 = (x_142 + 1);
-    }
-  }
-  mergeSort_();
-  let x_146 : f32 = gl_FragCoord.y;
-  if ((i32(x_146) < 30)) {
-    let x_153 : i32 = data[0];
-    grey = (0.5 + (f32(x_153) / 10.0));
-  } else {
-    let x_158 : f32 = gl_FragCoord.y;
-    if ((i32(x_158) < 60)) {
-      let x_165 : i32 = data[1];
-      grey = (0.5 + (f32(x_165) / 10.0));
-    } else {
-      let x_170 : f32 = gl_FragCoord.y;
-      if ((i32(x_170) < 90)) {
-        let x_177 : i32 = data[2];
-        grey = (0.5 + (f32(x_177) / 10.0));
-      } else {
-        let x_182 : f32 = gl_FragCoord.y;
-        if ((i32(x_182) < 120)) {
-          let x_189 : i32 = data[3];
-          grey = (0.5 + (f32(x_189) / 10.0));
-        } else {
-          let x_194 : f32 = gl_FragCoord.y;
-          if ((i32(x_194) < 150)) {
-            discard;
-          } else {
-            let x_201 : f32 = gl_FragCoord.y;
-            if ((i32(x_201) < 180)) {
-              let x_208 : i32 = data[5];
-              grey = (0.5 + (f32(x_208) / 10.0));
-            } else {
-              let x_213 : f32 = gl_FragCoord.y;
-              if ((i32(x_213) < 210)) {
-                let x_220 : i32 = data[6];
-                grey = (0.5 + (f32(x_220) / 10.0));
-              } else {
-                let x_225 : f32 = gl_FragCoord.y;
-                if ((i32(x_225) < 240)) {
-                  let x_232 : i32 = data[7];
-                  grey = (0.5 + (f32(x_232) / 10.0));
-                } else {
-                  let x_237 : f32 = gl_FragCoord.y;
-                  if ((i32(x_237) < 270)) {
-                    let x_244 : i32 = data[8];
-                    grey = (0.5 + (f32(x_244) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_248 : f32 = grey;
-  let x_249 : vec3<f32> = vec3<f32>(x_248, x_248, x_248);
-  x_GLF_color = vec4<f32>(x_249.x, x_249.y, x_249.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.hlsl
deleted file mode 100644
index 8e26fc7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,378 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_255 = from;
-  k = x_255;
-  const int x_256 = from;
-  i = x_256;
-  const int x_257 = mid;
-  j = (x_257 + 1);
-  while (true) {
-    int x_285 = 0;
-    int x_286 = 0;
-    int x_305 = 0;
-    int x_306 = 0;
-    int x_320 = 0;
-    int x_324 = 0;
-    int x_339 = 0;
-    int x_338 = 0;
-    int x_352 = 0;
-    int x_351 = 0;
-    int x_366 = 0;
-    int x_365 = 0;
-    int x_287_phi = 0;
-    int x_307_phi = 0;
-    int x_328_phi = 0;
-    int x_340_phi = 0;
-    int x_353_phi = 0;
-    int x_367_phi = 0;
-    const float x_261 = asfloat(x_28[0].x);
-    if ((1.0f >= x_261)) {
-    } else {
-      continue;
-    }
-    const int x_266 = i;
-    const int x_267 = mid;
-    const int x_269 = j;
-    const int x_270 = to;
-    bool tint_tmp = (x_266 <= x_267);
-    if (tint_tmp) {
-      tint_tmp = (x_269 <= x_270);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_276 = data[i];
-    const int x_279 = data[j];
-    const bool x_280 = (x_276 < x_279);
-    if (x_280) {
-      x_285 = k;
-      x_287_phi = x_285;
-    } else {
-      x_286 = 0;
-      x_287_phi = x_286;
-    }
-    const int x_287 = x_287_phi;
-    const int x_288 = (x_287 + 1);
-    if (x_280) {
-      k = x_288;
-      const float x_293 = asfloat(x_28[0].x);
-      if (!((1.0f <= x_293))) {
-      } else {
-        continue;
-      }
-    }
-    const float x_297 = asfloat(x_28[0].y);
-    if ((x_297 >= 0.0f)) {
-    } else {
-      continue;
-    }
-    const int x_300 = 0;
-    if (x_280) {
-      x_305 = i;
-      x_307_phi = x_305;
-    } else {
-      x_306 = 0;
-      x_307_phi = x_306;
-    }
-    const int x_309 = (x_280 ? x_307_phi : x_300);
-    if (x_280) {
-      i = (x_309 + 1);
-    }
-    const int x_315 = 0;
-    if (x_280) {
-      x_320 = data[x_309];
-      const float x_322 = asfloat(x_28[0].y);
-      x_328_phi = x_320;
-      if (!((0.0f <= x_322))) {
-        continue;
-      }
-    } else {
-      x_324 = 0;
-      const float x_326 = asfloat(x_28[0].y);
-      x_328_phi = x_324;
-      if (!((x_326 < 0.0f))) {
-      } else {
-        continue;
-      }
-    }
-    const int x_328 = x_328_phi;
-    if (x_280) {
-      temp[x_287] = (x_280 ? x_328 : x_315);
-    }
-    if (x_280) {
-      x_339 = 0;
-      x_340_phi = x_339;
-    } else {
-      x_338 = k;
-      x_340_phi = x_338;
-    }
-    const int x_340 = x_340_phi;
-    if (x_280) {
-    } else {
-      k = (x_340 + 1);
-    }
-    const float x_345 = asfloat(x_28[0].x);
-    if (!((1.0f <= x_345))) {
-    } else {
-      continue;
-    }
-    if (x_280) {
-      x_352 = 0;
-      x_353_phi = x_352;
-    } else {
-      x_351 = j;
-      x_353_phi = x_351;
-    }
-    const int x_357 = (x_280 ? 0 : x_353_phi);
-    if (x_280) {
-    } else {
-      j = (x_357 + 1);
-    }
-    if (x_280) {
-      x_366 = 0;
-      x_367_phi = x_366;
-    } else {
-      x_365 = data[x_357];
-      x_367_phi = x_365;
-    }
-    const int x_367 = x_367_phi;
-    if (x_280) {
-    } else {
-      temp[x_340] = x_367;
-    }
-  }
-  while (true) {
-    const int x_376 = i;
-    const int x_378 = i;
-    const int x_379 = mid;
-    bool tint_tmp_1 = (x_376 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_378 <= x_379);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_383 = k;
-    k = (x_383 + 1);
-    const int x_385 = i;
-    i = (x_385 + 1);
-    const int x_388 = data[x_385];
-    temp[x_383] = x_388;
-  }
-  const int x_390 = from;
-  i_1 = x_390;
-  while (true) {
-    const int x_395 = i_1;
-    const int x_396 = to;
-    if ((x_395 <= x_396)) {
-    } else {
-      break;
-    }
-    const int x_399 = i_1;
-    const int x_402 = temp[i_1];
-    data[x_399] = x_402;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_88 = asfloat(x_28[0].x);
-  i_3 = int(x_88);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_137 = j_1;
-      const int x_140 = data[j_1];
-      temp[x_137] = x_140;
-    }
-  }
-  mergeSort_();
-  const float x_146 = gl_FragCoord.y;
-  if ((int(x_146) < 30)) {
-    const int x_153 = data[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    const float x_158 = gl_FragCoord.y;
-    if ((int(x_158) < 60)) {
-      const int x_165 = data[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      const float x_170 = gl_FragCoord.y;
-      if ((int(x_170) < 90)) {
-        const int x_177 = data[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        const float x_182 = gl_FragCoord.y;
-        if ((int(x_182) < 120)) {
-          const int x_189 = data[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          const float x_194 = gl_FragCoord.y;
-          if ((int(x_194) < 150)) {
-            discard;
-          } else {
-            const float x_201 = gl_FragCoord.y;
-            if ((int(x_201) < 180)) {
-              const int x_208 = data[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              const float x_213 = gl_FragCoord.y;
-              if ((int(x_213) < 210)) {
-                const int x_220 = data[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                const float x_225 = gl_FragCoord.y;
-                if ((int(x_225) < 240)) {
-                  const int x_232 = data[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  const float x_237 = gl_FragCoord.y;
-                  if ((int(x_237) < 270)) {
-                    const int x_244 = data[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_248 = grey;
-  const float3 x_249 = float3(x_248, x_248, x_248);
-  x_GLF_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.msl
deleted file mode 100644
index add8276..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.msl
+++ /dev/null
@@ -1,428 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(constant buf0& x_28, thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_255 = *(from);
-  k = x_255;
-  int const x_256 = *(from);
-  i = x_256;
-  int const x_257 = *(mid);
-  j = as_type<int>((as_type<uint>(x_257) + as_type<uint>(1)));
-  while (true) {
-    int x_285 = 0;
-    int x_286 = 0;
-    int x_305 = 0;
-    int x_306 = 0;
-    int x_320 = 0;
-    int x_324 = 0;
-    int x_339 = 0;
-    int x_338 = 0;
-    int x_352 = 0;
-    int x_351 = 0;
-    int x_366 = 0;
-    int x_365 = 0;
-    int x_287_phi = 0;
-    int x_307_phi = 0;
-    int x_328_phi = 0;
-    int x_340_phi = 0;
-    int x_353_phi = 0;
-    int x_367_phi = 0;
-    float const x_261 = x_28.injectionSwitch.x;
-    if ((1.0f >= x_261)) {
-    } else {
-      continue;
-    }
-    int const x_266 = i;
-    int const x_267 = *(mid);
-    int const x_269 = j;
-    int const x_270 = *(to);
-    if (((x_266 <= x_267) && (x_269 <= x_270))) {
-    } else {
-      break;
-    }
-    int const x_274 = i;
-    int const x_276 = (*(tint_symbol_3)).arr[x_274];
-    int const x_277 = j;
-    int const x_279 = (*(tint_symbol_3)).arr[x_277];
-    bool const x_280 = (x_276 < x_279);
-    if (x_280) {
-      x_285 = k;
-      x_287_phi = x_285;
-    } else {
-      x_286 = 0;
-      x_287_phi = x_286;
-    }
-    int const x_287 = x_287_phi;
-    int const x_288 = as_type<int>((as_type<uint>(x_287) + as_type<uint>(1)));
-    if (x_280) {
-      k = x_288;
-      float const x_293 = x_28.injectionSwitch.x;
-      if (!((1.0f <= x_293))) {
-      } else {
-        continue;
-      }
-    }
-    float const x_297 = x_28.injectionSwitch.y;
-    if ((x_297 >= 0.0f)) {
-    } else {
-      continue;
-    }
-    int const x_300 = 0;
-    if (x_280) {
-      x_305 = i;
-      x_307_phi = x_305;
-    } else {
-      x_306 = 0;
-      x_307_phi = x_306;
-    }
-    int const x_307 = x_307_phi;
-    int const x_309 = select(x_300, x_307, x_280);
-    if (x_280) {
-      i = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
-    }
-    int const x_315 = 0;
-    if (x_280) {
-      x_320 = (*(tint_symbol_3)).arr[x_309];
-      float const x_322 = x_28.injectionSwitch.y;
-      x_328_phi = x_320;
-      if (!((0.0f <= x_322))) {
-        continue;
-      }
-    } else {
-      x_324 = 0;
-      float const x_326 = x_28.injectionSwitch.y;
-      x_328_phi = x_324;
-      if (!((x_326 < 0.0f))) {
-      } else {
-        continue;
-      }
-    }
-    int const x_328 = x_328_phi;
-    if (x_280) {
-      (*(tint_symbol_4)).arr[x_287] = select(x_315, x_328, x_280);
-    }
-    if (x_280) {
-      x_339 = 0;
-      x_340_phi = x_339;
-    } else {
-      x_338 = k;
-      x_340_phi = x_338;
-    }
-    int const x_340 = x_340_phi;
-    if (x_280) {
-    } else {
-      k = as_type<int>((as_type<uint>(x_340) + as_type<uint>(1)));
-    }
-    float const x_345 = x_28.injectionSwitch.x;
-    if (!((1.0f <= x_345))) {
-    } else {
-      continue;
-    }
-    if (x_280) {
-      x_352 = 0;
-      x_353_phi = x_352;
-    } else {
-      x_351 = j;
-      x_353_phi = x_351;
-    }
-    int const x_353 = x_353_phi;
-    int const x_355 = 0;
-    int const x_357 = select(x_353, x_355, x_280);
-    if (x_280) {
-    } else {
-      j = as_type<int>((as_type<uint>(x_357) + as_type<uint>(1)));
-    }
-    if (x_280) {
-      x_366 = 0;
-      x_367_phi = x_366;
-    } else {
-      x_365 = (*(tint_symbol_3)).arr[x_357];
-      x_367_phi = x_365;
-    }
-    int const x_367 = x_367_phi;
-    if (x_280) {
-    } else {
-      (*(tint_symbol_4)).arr[x_340] = x_367;
-    }
-  }
-  while (true) {
-    int const x_376 = i;
-    int const x_378 = i;
-    int const x_379 = *(mid);
-    if (((x_376 < 10) && (x_378 <= x_379))) {
-    } else {
-      break;
-    }
-    int const x_383 = k;
-    k = as_type<int>((as_type<uint>(x_383) + as_type<uint>(1)));
-    int const x_385 = i;
-    i = as_type<int>((as_type<uint>(x_385) + as_type<uint>(1)));
-    int const x_388 = (*(tint_symbol_3)).arr[x_385];
-    (*(tint_symbol_4)).arr[x_383] = x_388;
-  }
-  int const x_390 = *(from);
-  i_1 = x_390;
-  while (true) {
-    int const x_395 = i_1;
-    int const x_396 = *(to);
-    if ((x_395 <= x_396)) {
-    } else {
-      break;
-    }
-    int const x_399 = i_1;
-    int const x_400 = i_1;
-    int const x_402 = (*(tint_symbol_4)).arr[x_400];
-    (*(tint_symbol_3)).arr[x_399] = x_402;
-    {
-      int const x_404 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_404) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_411 = m;
-    int const x_412 = high;
-    if ((x_411 <= x_412)) {
-    } else {
-      break;
-    }
-    int const x_415 = low;
-    i_2 = x_415;
-    while (true) {
-      int const x_420 = i_2;
-      int const x_421 = high;
-      if ((x_420 < x_421)) {
-      } else {
-        break;
-      }
-      int const x_424 = i_2;
-      from_1 = x_424;
-      int const x_425 = i_2;
-      int const x_426 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_425) + as_type<uint>(x_426)))) - as_type<uint>(1)));
-      int const x_429 = i_2;
-      int const x_430 = m;
-      int const x_434 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_429) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_430))))))) - as_type<uint>(1))), x_434);
-      int const x_436 = from_1;
-      param = x_436;
-      int const x_437 = mid_1;
-      param_1 = x_437;
-      int const x_438 = to_1;
-      param_2 = x_438;
-      merge_i1_i1_i1_(x_28, &(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_440 = m;
-        int const x_442 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_442) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_440))))));
-      }
-    }
-    {
-      int const x_444 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_444)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_88 = x_28.injectionSwitch.x;
-  i_3 = int(x_88);
-  while (true) {
-    int const x_94 = i_3;
-    switch(x_94) {
-      case 9: {
-        int const x_124 = i_3;
-        (*(tint_symbol_7)).arr[x_124] = -5;
-        break;
-      }
-      case 8: {
-        int const x_122 = i_3;
-        (*(tint_symbol_7)).arr[x_122] = -4;
-        break;
-      }
-      case 7: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -3;
-        break;
-      }
-      case 6: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -2;
-        break;
-      }
-      case 5: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -1;
-        break;
-      }
-      case 4: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = 0;
-        break;
-      }
-      case 3: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = 1;
-        break;
-      }
-      case 2: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 2;
-        break;
-      }
-      case 1: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 3;
-        break;
-      }
-      case 0: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_126 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-    {
-      int const x_128 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_134 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    int const x_137 = j_1;
-    int const x_138 = j_1;
-    int const x_140 = (*(tint_symbol_7)).arr[x_138];
-    (*(tint_symbol_8)).arr[x_137] = x_140;
-    {
-      int const x_142 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(x_28, tint_symbol_7, tint_symbol_8);
-  float const x_146 = (*(tint_symbol_9)).y;
-  if ((int(x_146) < 30)) {
-    int const x_153 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    float const x_158 = (*(tint_symbol_9)).y;
-    if ((int(x_158) < 60)) {
-      int const x_165 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      float const x_170 = (*(tint_symbol_9)).y;
-      if ((int(x_170) < 90)) {
-        int const x_177 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        float const x_182 = (*(tint_symbol_9)).y;
-        if ((int(x_182) < 120)) {
-          int const x_189 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          float const x_194 = (*(tint_symbol_9)).y;
-          if ((int(x_194) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_201 = (*(tint_symbol_9)).y;
-            if ((int(x_201) < 180)) {
-              int const x_208 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              float const x_213 = (*(tint_symbol_9)).y;
-              if ((int(x_213) < 210)) {
-                int const x_220 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                float const x_225 = (*(tint_symbol_9)).y;
-                if ((int(x_225) < 240)) {
-                  int const x_232 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  float const x_237 = (*(tint_symbol_9)).y;
-                  if ((int(x_237) < 270)) {
-                    int const x_244 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_248 = grey;
-  float3 const x_249 = float3(x_248, x_248, x_248);
-  *(tint_symbol_10) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.spvasm
deleted file mode 100644
index 592eb4f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,852 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 522
-; Schema: 0
-               OpCapability Shader
-        %290 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %x_285 "x_285"
-               OpName %x_286 "x_286"
-               OpName %x_305 "x_305"
-               OpName %x_306 "x_306"
-               OpName %x_320 "x_320"
-               OpName %x_324 "x_324"
-               OpName %x_339 "x_339"
-               OpName %x_338 "x_338"
-               OpName %x_352 "x_352"
-               OpName %x_351 "x_351"
-               OpName %x_366 "x_366"
-               OpName %x_365 "x_365"
-               OpName %x_287_phi "x_287_phi"
-               OpName %x_307_phi "x_307_phi"
-               OpName %x_328_phi "x_328_phi"
-               OpName %x_340_phi "x_340_phi"
-               OpName %x_353_phi "x_353_phi"
-               OpName %x_367_phi "x_367_phi"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-     %int_10 = OpConstant %int 10
-        %246 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %314 = OpConstantNull %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %509 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-      %x_285 = OpVariable %_ptr_Function_int Function %32
-      %x_286 = OpVariable %_ptr_Function_int Function %32
-      %x_305 = OpVariable %_ptr_Function_int Function %32
-      %x_306 = OpVariable %_ptr_Function_int Function %32
-      %x_320 = OpVariable %_ptr_Function_int Function %32
-      %x_324 = OpVariable %_ptr_Function_int Function %32
-      %x_339 = OpVariable %_ptr_Function_int Function %32
-      %x_338 = OpVariable %_ptr_Function_int Function %32
-      %x_352 = OpVariable %_ptr_Function_int Function %32
-      %x_351 = OpVariable %_ptr_Function_int Function %32
-      %x_366 = OpVariable %_ptr_Function_int Function %32
-      %x_365 = OpVariable %_ptr_Function_int Function %32
-  %x_287_phi = OpVariable %_ptr_Function_int Function %32
-  %x_307_phi = OpVariable %_ptr_Function_int Function %32
-  %x_328_phi = OpVariable %_ptr_Function_int Function %32
-  %x_340_phi = OpVariable %_ptr_Function_int Function %32
-  %x_353_phi = OpVariable %_ptr_Function_int Function %32
-  %x_367_phi = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %68 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-         %69 = OpLoad %float %68
-         %71 = OpFOrdGreaterThanEqual %bool %float_1 %69
-               OpSelectionMerge %73 None
-               OpBranchConditional %71 %74 %75
-         %74 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-               OpBranch %46
-         %73 = OpLabel
-         %76 = OpLoad %int %i
-         %78 = OpLoad %int %mid
-         %79 = OpLoad %int %j
-         %81 = OpLoad %int %to
-         %82 = OpSLessThanEqual %bool %76 %78
-               OpSelectionMerge %83 None
-               OpBranchConditional %82 %84 %83
-         %84 = OpLabel
-         %85 = OpSLessThanEqual %bool %79 %81
-               OpBranch %83
-         %83 = OpLabel
-         %86 = OpPhi %bool %82 %73 %85 %84
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %89
-         %88 = OpLabel
-               OpBranch %87
-         %89 = OpLabel
-               OpBranch %45
-         %87 = OpLabel
-         %90 = OpLoad %int %i
-         %92 = OpAccessChain %_ptr_Private_int %data %90
-         %93 = OpLoad %int %92
-         %94 = OpLoad %int %j
-         %95 = OpAccessChain %_ptr_Private_int %data %94
-         %96 = OpLoad %int %95
-         %97 = OpSLessThan %bool %93 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-        %101 = OpLoad %int %k
-               OpStore %x_285 %101
-        %102 = OpLoad %int %x_285
-               OpStore %x_287_phi %102
-               OpBranch %98
-        %100 = OpLabel
-               OpStore %x_286 %int_0
-        %104 = OpLoad %int %x_286
-               OpStore %x_287_phi %104
-               OpBranch %98
-         %98 = OpLabel
-        %105 = OpLoad %int %x_287_phi
-        %106 = OpIAdd %int %105 %int_1
-               OpSelectionMerge %107 None
-               OpBranchConditional %97 %108 %107
-        %108 = OpLabel
-               OpStore %k %106
-        %109 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %110 = OpLoad %float %109
-        %112 = OpFOrdLessThanEqual %bool %float_1 %110
-        %111 = OpLogicalNot %bool %112
-               OpSelectionMerge %113 None
-               OpBranchConditional %111 %114 %115
-        %114 = OpLabel
-               OpBranch %113
-        %115 = OpLabel
-               OpBranch %46
-        %113 = OpLabel
-               OpBranch %107
-        %107 = OpLabel
-        %117 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %118 = OpLoad %float %117
-        %120 = OpFOrdGreaterThanEqual %bool %118 %float_0
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-               OpBranch %121
-        %123 = OpLabel
-               OpBranch %46
-        %121 = OpLabel
-               OpSelectionMerge %124 None
-               OpBranchConditional %97 %125 %126
-        %125 = OpLabel
-        %127 = OpLoad %int %i
-               OpStore %x_305 %127
-        %128 = OpLoad %int %x_305
-               OpStore %x_307_phi %128
-               OpBranch %124
-        %126 = OpLabel
-               OpStore %x_306 %int_0
-        %129 = OpLoad %int %x_306
-               OpStore %x_307_phi %129
-               OpBranch %124
-        %124 = OpLabel
-        %130 = OpLoad %int %x_307_phi
-        %131 = OpSelect %int %97 %130 %int_0
-               OpSelectionMerge %132 None
-               OpBranchConditional %97 %133 %132
-        %133 = OpLabel
-        %134 = OpIAdd %int %131 %int_1
-               OpStore %i %134
-               OpBranch %132
-        %132 = OpLabel
-               OpSelectionMerge %135 None
-               OpBranchConditional %97 %136 %137
-        %136 = OpLabel
-        %138 = OpAccessChain %_ptr_Private_int %data %131
-        %139 = OpLoad %int %138
-               OpStore %x_320 %139
-        %140 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %141 = OpLoad %float %140
-        %142 = OpLoad %int %x_320
-               OpStore %x_328_phi %142
-        %144 = OpFOrdLessThanEqual %bool %float_0 %141
-        %143 = OpLogicalNot %bool %144
-               OpSelectionMerge %145 None
-               OpBranchConditional %143 %146 %145
-        %146 = OpLabel
-               OpBranch %46
-        %145 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpStore %x_324 %int_0
-        %147 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %148 = OpLoad %float %147
-        %149 = OpLoad %int %x_324
-               OpStore %x_328_phi %149
-        %151 = OpFOrdLessThan %bool %148 %float_0
-        %150 = OpLogicalNot %bool %151
-               OpSelectionMerge %152 None
-               OpBranchConditional %150 %153 %154
-        %153 = OpLabel
-               OpBranch %152
-        %154 = OpLabel
-               OpBranch %46
-        %152 = OpLabel
-               OpBranch %135
-        %135 = OpLabel
-        %155 = OpLoad %int %x_328_phi
-               OpSelectionMerge %156 None
-               OpBranchConditional %97 %157 %156
-        %157 = OpLabel
-        %158 = OpAccessChain %_ptr_Private_int %temp %105
-        %159 = OpSelect %int %97 %155 %int_0
-               OpStore %158 %159
-               OpBranch %156
-        %156 = OpLabel
-               OpSelectionMerge %160 None
-               OpBranchConditional %97 %161 %162
-        %161 = OpLabel
-               OpStore %x_339 %int_0
-        %163 = OpLoad %int %x_339
-               OpStore %x_340_phi %163
-               OpBranch %160
-        %162 = OpLabel
-        %164 = OpLoad %int %k
-               OpStore %x_338 %164
-        %165 = OpLoad %int %x_338
-               OpStore %x_340_phi %165
-               OpBranch %160
-        %160 = OpLabel
-        %166 = OpLoad %int %x_340_phi
-               OpSelectionMerge %167 None
-               OpBranchConditional %97 %168 %169
-        %168 = OpLabel
-               OpBranch %167
-        %169 = OpLabel
-        %170 = OpIAdd %int %166 %int_1
-               OpStore %k %170
-               OpBranch %167
-        %167 = OpLabel
-        %171 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %172 = OpLoad %float %171
-        %174 = OpFOrdLessThanEqual %bool %float_1 %172
-        %173 = OpLogicalNot %bool %174
-               OpSelectionMerge %175 None
-               OpBranchConditional %173 %176 %177
-        %176 = OpLabel
-               OpBranch %175
-        %177 = OpLabel
-               OpBranch %46
-        %175 = OpLabel
-               OpSelectionMerge %178 None
-               OpBranchConditional %97 %179 %180
-        %179 = OpLabel
-               OpStore %x_352 %int_0
-        %181 = OpLoad %int %x_352
-               OpStore %x_353_phi %181
-               OpBranch %178
-        %180 = OpLabel
-        %182 = OpLoad %int %j
-               OpStore %x_351 %182
-        %183 = OpLoad %int %x_351
-               OpStore %x_353_phi %183
-               OpBranch %178
-        %178 = OpLabel
-        %184 = OpLoad %int %x_353_phi
-        %185 = OpSelect %int %97 %int_0 %184
-               OpSelectionMerge %186 None
-               OpBranchConditional %97 %187 %188
-        %187 = OpLabel
-               OpBranch %186
-        %188 = OpLabel
-        %189 = OpIAdd %int %185 %int_1
-               OpStore %j %189
-               OpBranch %186
-        %186 = OpLabel
-               OpSelectionMerge %190 None
-               OpBranchConditional %97 %191 %192
-        %191 = OpLabel
-               OpStore %x_366 %int_0
-        %193 = OpLoad %int %x_366
-               OpStore %x_367_phi %193
-               OpBranch %190
-        %192 = OpLabel
-        %194 = OpAccessChain %_ptr_Private_int %data %185
-        %195 = OpLoad %int %194
-               OpStore %x_365 %195
-        %196 = OpLoad %int %x_365
-               OpStore %x_367_phi %196
-               OpBranch %190
-        %190 = OpLabel
-        %197 = OpLoad %int %x_367_phi
-               OpSelectionMerge %198 None
-               OpBranchConditional %97 %199 %200
-        %199 = OpLabel
-               OpBranch %198
-        %200 = OpLabel
-        %201 = OpAccessChain %_ptr_Private_int %temp %166
-               OpStore %201 %197
-               OpBranch %198
-        %198 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %202
-        %202 = OpLabel
-               OpLoopMerge %203 %204 None
-               OpBranch %205
-        %205 = OpLabel
-        %206 = OpLoad %int %i
-        %207 = OpLoad %int %i
-        %209 = OpLoad %int %mid
-        %211 = OpSLessThan %bool %206 %int_10
-               OpSelectionMerge %212 None
-               OpBranchConditional %211 %213 %212
-        %213 = OpLabel
-        %214 = OpSLessThanEqual %bool %207 %209
-               OpBranch %212
-        %212 = OpLabel
-        %215 = OpPhi %bool %211 %205 %214 %213
-               OpSelectionMerge %216 None
-               OpBranchConditional %215 %217 %218
-        %217 = OpLabel
-               OpBranch %216
-        %218 = OpLabel
-               OpBranch %203
-        %216 = OpLabel
-        %219 = OpLoad %int %k
-        %220 = OpIAdd %int %219 %int_1
-               OpStore %k %220
-        %221 = OpLoad %int %i
-        %222 = OpIAdd %int %221 %int_1
-               OpStore %i %222
-        %223 = OpAccessChain %_ptr_Private_int %data %221
-        %224 = OpLoad %int %223
-        %225 = OpAccessChain %_ptr_Private_int %temp %219
-               OpStore %225 %224
-               OpBranch %204
-        %204 = OpLabel
-               OpBranch %202
-        %203 = OpLabel
-        %227 = OpLoad %int %from
-               OpStore %i_1 %227
-               OpBranch %228
-        %228 = OpLabel
-               OpLoopMerge %229 %230 None
-               OpBranch %231
-        %231 = OpLabel
-        %232 = OpLoad %int %i_1
-        %234 = OpLoad %int %to
-        %235 = OpSLessThanEqual %bool %232 %234
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %238
-        %237 = OpLabel
-               OpBranch %236
-        %238 = OpLabel
-               OpBranch %229
-        %236 = OpLabel
-        %239 = OpLoad %int %i_1
-        %240 = OpLoad %int %i_1
-        %241 = OpAccessChain %_ptr_Private_int %temp %240
-        %242 = OpLoad %int %241
-        %243 = OpAccessChain %_ptr_Private_int %data %239
-               OpStore %243 %242
-               OpBranch %230
-        %230 = OpLabel
-        %244 = OpLoad %int %i_1
-        %245 = OpIAdd %int %244 %int_1
-               OpStore %i_1 %245
-               OpBranch %228
-        %229 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %246
-        %248 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %260
-        %260 = OpLabel
-               OpLoopMerge %261 %262 None
-               OpBranch %263
-        %263 = OpLabel
-        %264 = OpLoad %int %m
-        %265 = OpLoad %int %high
-        %266 = OpSLessThanEqual %bool %264 %265
-               OpSelectionMerge %267 None
-               OpBranchConditional %266 %268 %269
-        %268 = OpLabel
-               OpBranch %267
-        %269 = OpLabel
-               OpBranch %261
-        %267 = OpLabel
-        %270 = OpLoad %int %low
-               OpStore %i_2 %270
-               OpBranch %271
-        %271 = OpLabel
-               OpLoopMerge %272 %273 None
-               OpBranch %274
-        %274 = OpLabel
-        %275 = OpLoad %int %i_2
-        %276 = OpLoad %int %high
-        %277 = OpSLessThan %bool %275 %276
-               OpSelectionMerge %278 None
-               OpBranchConditional %277 %279 %280
-        %279 = OpLabel
-               OpBranch %278
-        %280 = OpLabel
-               OpBranch %272
-        %278 = OpLabel
-        %281 = OpLoad %int %i_2
-               OpStore %from_1 %281
-        %282 = OpLoad %int %i_2
-        %283 = OpLoad %int %m
-        %284 = OpIAdd %int %282 %283
-        %285 = OpISub %int %284 %int_1
-               OpStore %mid_1 %285
-        %286 = OpLoad %int %i_2
-        %287 = OpLoad %int %m
-        %288 = OpLoad %int %high
-        %292 = OpIMul %int %int_2 %287
-        %293 = OpIAdd %int %286 %292
-        %294 = OpISub %int %293 %int_1
-        %289 = OpExtInst %int %290 SMin %294 %288
-               OpStore %to_1 %289
-        %295 = OpLoad %int %from_1
-               OpStore %param %295
-        %296 = OpLoad %int %mid_1
-               OpStore %param_1 %296
-        %297 = OpLoad %int %to_1
-               OpStore %param_2 %297
-        %298 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %273
-        %273 = OpLabel
-        %302 = OpLoad %int %m
-        %303 = OpLoad %int %i_2
-        %304 = OpIMul %int %int_2 %302
-        %305 = OpIAdd %int %303 %304
-               OpStore %i_2 %305
-               OpBranch %271
-        %272 = OpLabel
-               OpBranch %262
-        %262 = OpLabel
-        %306 = OpLoad %int %m
-        %307 = OpIMul %int %int_2 %306
-               OpStore %m %307
-               OpBranch %260
-        %261 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %246
-        %309 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %314
-        %315 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %316 = OpLoad %float %315
-        %317 = OpConvertFToS %int %316
-               OpStore %i_3 %317
-               OpBranch %318
-        %318 = OpLabel
-               OpLoopMerge %319 %320 None
-               OpBranch %321
-        %321 = OpLabel
-        %322 = OpLoad %int %i_3
-               OpSelectionMerge %323 None
-               OpSwitch %322 %324 9 %325 8 %326 7 %327 6 %328 5 %329 4 %330 3 %331 2 %332 1 %333 0 %334
-        %325 = OpLabel
-        %335 = OpLoad %int %i_3
-        %336 = OpAccessChain %_ptr_Private_int %data %335
-               OpStore %336 %int_n5
-               OpBranch %323
-        %326 = OpLabel
-        %338 = OpLoad %int %i_3
-        %339 = OpAccessChain %_ptr_Private_int %data %338
-               OpStore %339 %int_n4
-               OpBranch %323
-        %327 = OpLabel
-        %341 = OpLoad %int %i_3
-        %342 = OpAccessChain %_ptr_Private_int %data %341
-               OpStore %342 %int_n3
-               OpBranch %323
-        %328 = OpLabel
-        %344 = OpLoad %int %i_3
-        %345 = OpAccessChain %_ptr_Private_int %data %344
-               OpStore %345 %int_n2
-               OpBranch %323
-        %329 = OpLabel
-        %347 = OpLoad %int %i_3
-        %348 = OpAccessChain %_ptr_Private_int %data %347
-               OpStore %348 %int_n1
-               OpBranch %323
-        %330 = OpLabel
-        %350 = OpLoad %int %i_3
-        %351 = OpAccessChain %_ptr_Private_int %data %350
-               OpStore %351 %int_0
-               OpBranch %323
-        %331 = OpLabel
-        %352 = OpLoad %int %i_3
-        %353 = OpAccessChain %_ptr_Private_int %data %352
-               OpStore %353 %int_1
-               OpBranch %323
-        %332 = OpLabel
-        %354 = OpLoad %int %i_3
-        %355 = OpAccessChain %_ptr_Private_int %data %354
-               OpStore %355 %int_2
-               OpBranch %323
-        %333 = OpLabel
-        %356 = OpLoad %int %i_3
-        %357 = OpAccessChain %_ptr_Private_int %data %356
-               OpStore %357 %int_3
-               OpBranch %323
-        %334 = OpLabel
-        %359 = OpLoad %int %i_3
-        %360 = OpAccessChain %_ptr_Private_int %data %359
-               OpStore %360 %int_4
-               OpBranch %323
-        %324 = OpLabel
-               OpBranch %323
-        %323 = OpLabel
-        %362 = OpLoad %int %i_3
-        %363 = OpIAdd %int %362 %int_1
-               OpStore %i_3 %363
-               OpBranch %320
-        %320 = OpLabel
-        %364 = OpLoad %int %i_3
-        %365 = OpSLessThan %bool %364 %int_10
-               OpBranchConditional %365 %318 %319
-        %319 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %366
-        %366 = OpLabel
-               OpLoopMerge %367 %368 None
-               OpBranch %369
-        %369 = OpLabel
-        %370 = OpLoad %int %j_1
-        %371 = OpSLessThan %bool %370 %int_10
-               OpSelectionMerge %372 None
-               OpBranchConditional %371 %373 %374
-        %373 = OpLabel
-               OpBranch %372
-        %374 = OpLabel
-               OpBranch %367
-        %372 = OpLabel
-        %375 = OpLoad %int %j_1
-        %376 = OpLoad %int %j_1
-        %377 = OpAccessChain %_ptr_Private_int %data %376
-        %378 = OpLoad %int %377
-        %379 = OpAccessChain %_ptr_Private_int %temp %375
-               OpStore %379 %378
-               OpBranch %368
-        %368 = OpLabel
-        %380 = OpLoad %int %j_1
-        %381 = OpIAdd %int %380 %int_1
-               OpStore %j_1 %381
-               OpBranch %366
-        %367 = OpLabel
-        %382 = OpFunctionCall %void %mergeSort_
-        %384 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %385 = OpLoad %float %384
-        %386 = OpConvertFToS %int %385
-        %388 = OpSLessThan %bool %386 %int_30
-               OpSelectionMerge %389 None
-               OpBranchConditional %388 %390 %391
-        %390 = OpLabel
-        %392 = OpAccessChain %_ptr_Private_int %data %int_0
-        %393 = OpLoad %int %392
-        %395 = OpConvertSToF %float %393
-        %397 = OpFDiv %float %395 %float_10
-        %398 = OpFAdd %float %float_0_5 %397
-               OpStore %grey %398
-               OpBranch %389
-        %391 = OpLabel
-        %399 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %400 = OpLoad %float %399
-        %401 = OpConvertFToS %int %400
-        %403 = OpSLessThan %bool %401 %int_60
-               OpSelectionMerge %404 None
-               OpBranchConditional %403 %405 %406
-        %405 = OpLabel
-        %407 = OpAccessChain %_ptr_Private_int %data %int_1
-        %408 = OpLoad %int %407
-        %409 = OpConvertSToF %float %408
-        %410 = OpFDiv %float %409 %float_10
-        %411 = OpFAdd %float %float_0_5 %410
-               OpStore %grey %411
-               OpBranch %404
-        %406 = OpLabel
-        %412 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %413 = OpLoad %float %412
-        %414 = OpConvertFToS %int %413
-        %416 = OpSLessThan %bool %414 %int_90
-               OpSelectionMerge %417 None
-               OpBranchConditional %416 %418 %419
-        %418 = OpLabel
-        %420 = OpAccessChain %_ptr_Private_int %data %int_2
-        %421 = OpLoad %int %420
-        %422 = OpConvertSToF %float %421
-        %423 = OpFDiv %float %422 %float_10
-        %424 = OpFAdd %float %float_0_5 %423
-               OpStore %grey %424
-               OpBranch %417
-        %419 = OpLabel
-        %425 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %426 = OpLoad %float %425
-        %427 = OpConvertFToS %int %426
-        %429 = OpSLessThan %bool %427 %int_120
-               OpSelectionMerge %430 None
-               OpBranchConditional %429 %431 %432
-        %431 = OpLabel
-        %433 = OpAccessChain %_ptr_Private_int %data %int_3
-        %434 = OpLoad %int %433
-        %435 = OpConvertSToF %float %434
-        %436 = OpFDiv %float %435 %float_10
-        %437 = OpFAdd %float %float_0_5 %436
-               OpStore %grey %437
-               OpBranch %430
-        %432 = OpLabel
-        %438 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %439 = OpLoad %float %438
-        %440 = OpConvertFToS %int %439
-        %442 = OpSLessThan %bool %440 %int_150
-               OpSelectionMerge %443 None
-               OpBranchConditional %442 %444 %445
-        %444 = OpLabel
-               OpKill
-        %445 = OpLabel
-        %446 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %447 = OpLoad %float %446
-        %448 = OpConvertFToS %int %447
-        %450 = OpSLessThan %bool %448 %int_180
-               OpSelectionMerge %451 None
-               OpBranchConditional %450 %452 %453
-        %452 = OpLabel
-        %455 = OpAccessChain %_ptr_Private_int %data %int_5
-        %456 = OpLoad %int %455
-        %457 = OpConvertSToF %float %456
-        %458 = OpFDiv %float %457 %float_10
-        %459 = OpFAdd %float %float_0_5 %458
-               OpStore %grey %459
-               OpBranch %451
-        %453 = OpLabel
-        %460 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %461 = OpLoad %float %460
-        %462 = OpConvertFToS %int %461
-        %464 = OpSLessThan %bool %462 %int_210
-               OpSelectionMerge %465 None
-               OpBranchConditional %464 %466 %467
-        %466 = OpLabel
-        %469 = OpAccessChain %_ptr_Private_int %data %int_6
-        %470 = OpLoad %int %469
-        %471 = OpConvertSToF %float %470
-        %472 = OpFDiv %float %471 %float_10
-        %473 = OpFAdd %float %float_0_5 %472
-               OpStore %grey %473
-               OpBranch %465
-        %467 = OpLabel
-        %474 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %475 = OpLoad %float %474
-        %476 = OpConvertFToS %int %475
-        %478 = OpSLessThan %bool %476 %int_240
-               OpSelectionMerge %479 None
-               OpBranchConditional %478 %480 %481
-        %480 = OpLabel
-        %483 = OpAccessChain %_ptr_Private_int %data %int_7
-        %484 = OpLoad %int %483
-        %485 = OpConvertSToF %float %484
-        %486 = OpFDiv %float %485 %float_10
-        %487 = OpFAdd %float %float_0_5 %486
-               OpStore %grey %487
-               OpBranch %479
-        %481 = OpLabel
-        %488 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %489 = OpLoad %float %488
-        %490 = OpConvertFToS %int %489
-        %492 = OpSLessThan %bool %490 %int_270
-               OpSelectionMerge %493 None
-               OpBranchConditional %492 %494 %495
-        %494 = OpLabel
-        %497 = OpAccessChain %_ptr_Private_int %data %int_8
-        %498 = OpLoad %int %497
-        %499 = OpConvertSToF %float %498
-        %500 = OpFDiv %float %499 %float_10
-        %501 = OpFAdd %float %float_0_5 %500
-               OpStore %grey %501
-               OpBranch %493
-        %495 = OpLabel
-               OpKill
-        %493 = OpLabel
-               OpBranch %479
-        %479 = OpLabel
-               OpBranch %465
-        %465 = OpLabel
-               OpBranch %451
-        %451 = OpLabel
-               OpBranch %443
-        %443 = OpLabel
-               OpBranch %430
-        %430 = OpLabel
-               OpBranch %417
-        %417 = OpLabel
-               OpBranch %404
-        %404 = OpLabel
-               OpBranch %389
-        %389 = OpLabel
-        %502 = OpLoad %float %grey
-        %504 = OpCompositeConstruct %v3float %502 %502 %502
-        %505 = OpCompositeExtract %float %504 0
-        %506 = OpCompositeExtract %float %504 1
-        %507 = OpCompositeExtract %float %504 2
-        %508 = OpCompositeConstruct %v4float %505 %506 %507 %float_1
-               OpStore %x_GLF_color %508
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %509
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %513 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %514 = OpFunctionCall %void %main_1
-        %515 = OpLoad %v4float %x_GLF_color
-        %516 = OpCompositeConstruct %main_out %515
-               OpReturnValue %516
-               OpFunctionEnd
-       %main = OpFunction %void None %246
-        %518 = OpLabel
-        %520 = OpLoad %v4float %gl_FragCoord_param_1
-        %519 = OpFunctionCall %main_out %main_inner %520
-        %521 = OpCompositeExtract %v4float %519 0
-               OpStore %x_GLF_color_1_1 %521
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.wgsl
deleted file mode 100644
index 5fac853..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,414 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_255 : i32 = *(from);
-  k = x_255;
-  let x_256 : i32 = *(from);
-  i = x_256;
-  let x_257 : i32 = *(mid);
-  j = (x_257 + 1);
-  loop {
-    var x_285 : i32;
-    var x_286 : i32;
-    var x_305 : i32;
-    var x_306 : i32;
-    var x_320 : i32;
-    var x_324 : i32;
-    var x_339 : i32;
-    var x_338 : i32;
-    var x_352 : i32;
-    var x_351 : i32;
-    var x_366 : i32;
-    var x_365 : i32;
-    var x_287_phi : i32;
-    var x_307_phi : i32;
-    var x_328_phi : i32;
-    var x_340_phi : i32;
-    var x_353_phi : i32;
-    var x_367_phi : i32;
-    let x_261 : f32 = x_28.injectionSwitch.x;
-    if ((1.0 >= x_261)) {
-    } else {
-      continue;
-    }
-    let x_266 : i32 = i;
-    let x_267 : i32 = *(mid);
-    let x_269 : i32 = j;
-    let x_270 : i32 = *(to);
-    if (((x_266 <= x_267) && (x_269 <= x_270))) {
-    } else {
-      break;
-    }
-    let x_274 : i32 = i;
-    let x_276 : i32 = data[x_274];
-    let x_277 : i32 = j;
-    let x_279 : i32 = data[x_277];
-    let x_280 : bool = (x_276 < x_279);
-    if (x_280) {
-      x_285 = k;
-      x_287_phi = x_285;
-    } else {
-      x_286 = 0;
-      x_287_phi = x_286;
-    }
-    let x_287 : i32 = x_287_phi;
-    let x_288 : i32 = (x_287 + 1);
-    if (x_280) {
-      k = x_288;
-      let x_293 : f32 = x_28.injectionSwitch.x;
-      if (!((1.0 <= x_293))) {
-      } else {
-        continue;
-      }
-    }
-    let x_297 : f32 = x_28.injectionSwitch.y;
-    if ((x_297 >= 0.0)) {
-    } else {
-      continue;
-    }
-    let x_300 : i32 = 0;
-    if (x_280) {
-      x_305 = i;
-      x_307_phi = x_305;
-    } else {
-      x_306 = 0;
-      x_307_phi = x_306;
-    }
-    let x_307 : i32 = x_307_phi;
-    let x_309 : i32 = select(x_300, x_307, x_280);
-    if (x_280) {
-      i = (x_309 + 1);
-    }
-    let x_315 : i32 = 0;
-    if (x_280) {
-      x_320 = data[x_309];
-      let x_322 : f32 = x_28.injectionSwitch.y;
-      x_328_phi = x_320;
-      if (!((0.0 <= x_322))) {
-        continue;
-      }
-    } else {
-      x_324 = 0;
-      let x_326 : f32 = x_28.injectionSwitch.y;
-      x_328_phi = x_324;
-      if (!((x_326 < 0.0))) {
-      } else {
-        continue;
-      }
-    }
-    let x_328 : i32 = x_328_phi;
-    if (x_280) {
-      temp[x_287] = select(x_315, x_328, x_280);
-    }
-    if (x_280) {
-      x_339 = 0;
-      x_340_phi = x_339;
-    } else {
-      x_338 = k;
-      x_340_phi = x_338;
-    }
-    let x_340 : i32 = x_340_phi;
-    if (x_280) {
-    } else {
-      k = (x_340 + 1);
-    }
-    let x_345 : f32 = x_28.injectionSwitch.x;
-    if (!((1.0 <= x_345))) {
-    } else {
-      continue;
-    }
-    if (x_280) {
-      x_352 = 0;
-      x_353_phi = x_352;
-    } else {
-      x_351 = j;
-      x_353_phi = x_351;
-    }
-    let x_353 : i32 = x_353_phi;
-    let x_355 : i32 = 0;
-    let x_357 : i32 = select(x_353, x_355, x_280);
-    if (x_280) {
-    } else {
-      j = (x_357 + 1);
-    }
-    if (x_280) {
-      x_366 = 0;
-      x_367_phi = x_366;
-    } else {
-      x_365 = data[x_357];
-      x_367_phi = x_365;
-    }
-    let x_367 : i32 = x_367_phi;
-    if (x_280) {
-    } else {
-      temp[x_340] = x_367;
-    }
-  }
-  loop {
-    let x_376 : i32 = i;
-    let x_378 : i32 = i;
-    let x_379 : i32 = *(mid);
-    if (((x_376 < 10) && (x_378 <= x_379))) {
-    } else {
-      break;
-    }
-    let x_383 : i32 = k;
-    k = (x_383 + 1);
-    let x_385 : i32 = i;
-    i = (x_385 + 1);
-    let x_388 : i32 = data[x_385];
-    temp[x_383] = x_388;
-  }
-  let x_390 : i32 = *(from);
-  i_1 = x_390;
-  loop {
-    let x_395 : i32 = i_1;
-    let x_396 : i32 = *(to);
-    if ((x_395 <= x_396)) {
-    } else {
-      break;
-    }
-    let x_399 : i32 = i_1;
-    let x_400 : i32 = i_1;
-    let x_402 : i32 = temp[x_400];
-    data[x_399] = x_402;
-
-    continuing {
-      let x_404 : i32 = i_1;
-      i_1 = (x_404 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_411 : i32 = m;
-    let x_412 : i32 = high;
-    if ((x_411 <= x_412)) {
-    } else {
-      break;
-    }
-    let x_415 : i32 = low;
-    i_2 = x_415;
-    loop {
-      let x_420 : i32 = i_2;
-      let x_421 : i32 = high;
-      if ((x_420 < x_421)) {
-      } else {
-        break;
-      }
-      let x_424 : i32 = i_2;
-      from_1 = x_424;
-      let x_425 : i32 = i_2;
-      let x_426 : i32 = m;
-      mid_1 = ((x_425 + x_426) - 1);
-      let x_429 : i32 = i_2;
-      let x_430 : i32 = m;
-      let x_434 : i32 = high;
-      to_1 = min(((x_429 + (2 * x_430)) - 1), x_434);
-      let x_436 : i32 = from_1;
-      param = x_436;
-      let x_437 : i32 = mid_1;
-      param_1 = x_437;
-      let x_438 : i32 = to_1;
-      param_2 = x_438;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_440 : i32 = m;
-        let x_442 : i32 = i_2;
-        i_2 = (x_442 + (2 * x_440));
-      }
-    }
-
-    continuing {
-      let x_444 : i32 = m;
-      m = (2 * x_444);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_88 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_88);
-  loop {
-    let x_94 : i32 = i_3;
-    switch(x_94) {
-      case 9: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -5;
-      }
-      case 8: {
-        let x_122 : i32 = i_3;
-        data[x_122] = -4;
-      }
-      case 7: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -3;
-      }
-      case 6: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -2;
-      }
-      case 5: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -1;
-      }
-      case 4: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 0;
-      }
-      case 3: {
-        let x_112 : i32 = i_3;
-        data[x_112] = 1;
-      }
-      case 2: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 2;
-      }
-      case 1: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 3;
-      }
-      case 0: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 4;
-      }
-      default: {
-      }
-    }
-    let x_126 : i32 = i_3;
-    i_3 = (x_126 + 1);
-
-    continuing {
-      let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_134 : i32 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    let x_137 : i32 = j_1;
-    let x_138 : i32 = j_1;
-    let x_140 : i32 = data[x_138];
-    temp[x_137] = x_140;
-
-    continuing {
-      let x_142 : i32 = j_1;
-      j_1 = (x_142 + 1);
-    }
-  }
-  mergeSort_();
-  let x_146 : f32 = gl_FragCoord.y;
-  if ((i32(x_146) < 30)) {
-    let x_153 : i32 = data[0];
-    grey = (0.5 + (f32(x_153) / 10.0));
-  } else {
-    let x_158 : f32 = gl_FragCoord.y;
-    if ((i32(x_158) < 60)) {
-      let x_165 : i32 = data[1];
-      grey = (0.5 + (f32(x_165) / 10.0));
-    } else {
-      let x_170 : f32 = gl_FragCoord.y;
-      if ((i32(x_170) < 90)) {
-        let x_177 : i32 = data[2];
-        grey = (0.5 + (f32(x_177) / 10.0));
-      } else {
-        let x_182 : f32 = gl_FragCoord.y;
-        if ((i32(x_182) < 120)) {
-          let x_189 : i32 = data[3];
-          grey = (0.5 + (f32(x_189) / 10.0));
-        } else {
-          let x_194 : f32 = gl_FragCoord.y;
-          if ((i32(x_194) < 150)) {
-            discard;
-          } else {
-            let x_201 : f32 = gl_FragCoord.y;
-            if ((i32(x_201) < 180)) {
-              let x_208 : i32 = data[5];
-              grey = (0.5 + (f32(x_208) / 10.0));
-            } else {
-              let x_213 : f32 = gl_FragCoord.y;
-              if ((i32(x_213) < 210)) {
-                let x_220 : i32 = data[6];
-                grey = (0.5 + (f32(x_220) / 10.0));
-              } else {
-                let x_225 : f32 = gl_FragCoord.y;
-                if ((i32(x_225) < 240)) {
-                  let x_232 : i32 = data[7];
-                  grey = (0.5 + (f32(x_232) / 10.0));
-                } else {
-                  let x_237 : f32 = gl_FragCoord.y;
-                  if ((i32(x_237) < 270)) {
-                    let x_244 : i32 = data[8];
-                    grey = (0.5 + (f32(x_244) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_248 : f32 = grey;
-  let x_249 : vec3<f32> = vec3<f32>(x_248, x_248, x_248);
-  x_GLF_color = vec4<f32>(x_249.x, x_249.y, x_249.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.hlsl
deleted file mode 100644
index 47787ab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,369 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_255 = from;
-  k = x_255;
-  const int x_256 = from;
-  i = x_256;
-  const int x_257 = mid;
-  j = (x_257 + 1);
-  while (true) {
-    int x_283 = 0;
-    int x_284 = 0;
-    int x_303 = 0;
-    int x_304 = 0;
-    int x_318 = 0;
-    int x_322 = 0;
-    int x_337 = 0;
-    int x_336 = 0;
-    int x_350 = 0;
-    int x_349 = 0;
-    int x_364 = 0;
-    int x_363 = 0;
-    int x_285_phi = 0;
-    int x_305_phi = 0;
-    int x_326_phi = 0;
-    int x_338_phi = 0;
-    int x_351_phi = 0;
-    int x_365_phi = 0;
-    if ((1.0f >= 0.0f)) {
-    } else {
-      continue;
-    }
-    const int x_264 = i;
-    const int x_265 = mid;
-    const int x_267 = j;
-    const int x_268 = to;
-    if (((x_264 <= x_265) & (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    const int x_274 = data[i];
-    const int x_277 = data[j];
-    const bool x_278 = (x_274 < x_277);
-    if (x_278) {
-      x_283 = k;
-      x_285_phi = x_283;
-    } else {
-      x_284 = 0;
-      x_285_phi = x_284;
-    }
-    const int x_285 = x_285_phi;
-    const int x_286 = (x_285 + 1);
-    if (x_278) {
-      k = x_286;
-      const float x_291 = asfloat(x_28[0].x);
-      if (!((1.0f <= x_291))) {
-      } else {
-        continue;
-      }
-    }
-    const float x_295 = asfloat(x_28[0].y);
-    if ((x_295 >= 0.0f)) {
-    } else {
-      continue;
-    }
-    const int x_298 = 0;
-    if (x_278) {
-      x_303 = i;
-      x_305_phi = x_303;
-    } else {
-      x_304 = 0;
-      x_305_phi = x_304;
-    }
-    const int x_307 = (x_278 ? x_305_phi : x_298);
-    if (x_278) {
-      i = (x_307 + 1);
-    }
-    const int x_313 = 0;
-    if (x_278) {
-      x_318 = data[x_307];
-      const float x_320 = asfloat(x_28[0].y);
-      x_326_phi = x_318;
-      if (!((0.0f <= x_320))) {
-        continue;
-      }
-    } else {
-      x_322 = 0;
-      const float x_324 = asfloat(x_28[0].y);
-      x_326_phi = x_322;
-      if (!((x_324 < 0.0f))) {
-      } else {
-        continue;
-      }
-    }
-    const int x_326 = x_326_phi;
-    if (x_278) {
-      temp[x_285] = (x_278 ? x_326 : x_313);
-    }
-    if (x_278) {
-      x_337 = 0;
-      x_338_phi = x_337;
-    } else {
-      x_336 = k;
-      x_338_phi = x_336;
-    }
-    const int x_338 = x_338_phi;
-    if (x_278) {
-    } else {
-      k = (x_338 + 1);
-    }
-    const float x_343 = asfloat(x_28[0].x);
-    if (!((1.0f <= x_343))) {
-    } else {
-      continue;
-    }
-    if (x_278) {
-      x_350 = 0;
-      x_351_phi = x_350;
-    } else {
-      x_349 = j;
-      x_351_phi = x_349;
-    }
-    const int x_355 = (x_278 ? 0 : x_351_phi);
-    if (x_278) {
-    } else {
-      j = (x_355 + 1);
-    }
-    if (x_278) {
-      x_364 = 0;
-      x_365_phi = x_364;
-    } else {
-      x_363 = data[x_355];
-      x_365_phi = x_363;
-    }
-    const int x_365 = x_365_phi;
-    if (x_278) {
-    } else {
-      temp[x_338] = x_365;
-    }
-  }
-  while (true) {
-    const int x_374 = i;
-    const int x_376 = i;
-    const int x_377 = mid;
-    if (((x_374 < 10) & (x_376 <= x_377))) {
-    } else {
-      break;
-    }
-    const int x_381 = k;
-    k = (x_381 + 1);
-    const int x_383 = i;
-    i = (x_383 + 1);
-    const int x_386 = data[x_383];
-    temp[x_381] = x_386;
-  }
-  const int x_388 = from;
-  i_1 = x_388;
-  while (true) {
-    const int x_393 = i_1;
-    const int x_394 = to;
-    if ((x_393 <= x_394)) {
-    } else {
-      break;
-    }
-    const int x_397 = i_1;
-    const int x_400 = temp[i_1];
-    data[x_397] = x_400;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_88 = asfloat(x_28[0].x);
-  i_3 = int(x_88);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_137 = j_1;
-      const int x_140 = data[j_1];
-      temp[x_137] = x_140;
-    }
-  }
-  mergeSort_();
-  const float x_146 = gl_FragCoord.y;
-  if ((int(x_146) < 30)) {
-    const int x_153 = data[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    const float x_158 = gl_FragCoord.y;
-    if ((int(x_158) < 60)) {
-      const int x_165 = data[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      const float x_170 = gl_FragCoord.y;
-      if ((int(x_170) < 90)) {
-        const int x_177 = data[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        const float x_182 = gl_FragCoord.y;
-        if ((int(x_182) < 120)) {
-          const int x_189 = data[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          const float x_194 = gl_FragCoord.y;
-          if ((int(x_194) < 150)) {
-            discard;
-          } else {
-            const float x_201 = gl_FragCoord.y;
-            if ((int(x_201) < 180)) {
-              const int x_208 = data[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              const float x_213 = gl_FragCoord.y;
-              if ((int(x_213) < 210)) {
-                const int x_220 = data[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                const float x_225 = gl_FragCoord.y;
-                if ((int(x_225) < 240)) {
-                  const int x_232 = data[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  const float x_237 = gl_FragCoord.y;
-                  if ((int(x_237) < 270)) {
-                    const int x_244 = data[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_248 = grey;
-  const float3 x_249 = float3(x_248, x_248, x_248);
-  x_GLF_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.msl
deleted file mode 100644
index 2f6e111..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,427 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(constant buf0& x_28, thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_255 = *(from);
-  k = x_255;
-  int const x_256 = *(from);
-  i = x_256;
-  int const x_257 = *(mid);
-  j = as_type<int>((as_type<uint>(x_257) + as_type<uint>(1)));
-  while (true) {
-    int x_283 = 0;
-    int x_284 = 0;
-    int x_303 = 0;
-    int x_304 = 0;
-    int x_318 = 0;
-    int x_322 = 0;
-    int x_337 = 0;
-    int x_336 = 0;
-    int x_350 = 0;
-    int x_349 = 0;
-    int x_364 = 0;
-    int x_363 = 0;
-    int x_285_phi = 0;
-    int x_305_phi = 0;
-    int x_326_phi = 0;
-    int x_338_phi = 0;
-    int x_351_phi = 0;
-    int x_365_phi = 0;
-    if ((1.0f >= 0.0f)) {
-    } else {
-      continue;
-    }
-    int const x_264 = i;
-    int const x_265 = *(mid);
-    int const x_267 = j;
-    int const x_268 = *(to);
-    if (((x_264 <= x_265) & (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    int const x_272 = i;
-    int const x_274 = (*(tint_symbol_3)).arr[x_272];
-    int const x_275 = j;
-    int const x_277 = (*(tint_symbol_3)).arr[x_275];
-    bool const x_278 = (x_274 < x_277);
-    if (x_278) {
-      x_283 = k;
-      x_285_phi = x_283;
-    } else {
-      x_284 = 0;
-      x_285_phi = x_284;
-    }
-    int const x_285 = x_285_phi;
-    int const x_286 = as_type<int>((as_type<uint>(x_285) + as_type<uint>(1)));
-    if (x_278) {
-      k = x_286;
-      float const x_291 = x_28.injectionSwitch.x;
-      if (!((1.0f <= x_291))) {
-      } else {
-        continue;
-      }
-    }
-    float const x_295 = x_28.injectionSwitch.y;
-    if ((x_295 >= 0.0f)) {
-    } else {
-      continue;
-    }
-    int const x_298 = 0;
-    if (x_278) {
-      x_303 = i;
-      x_305_phi = x_303;
-    } else {
-      x_304 = 0;
-      x_305_phi = x_304;
-    }
-    int const x_305 = x_305_phi;
-    int const x_307 = select(x_298, x_305, x_278);
-    if (x_278) {
-      i = as_type<int>((as_type<uint>(x_307) + as_type<uint>(1)));
-    }
-    int const x_313 = 0;
-    if (x_278) {
-      x_318 = (*(tint_symbol_3)).arr[x_307];
-      float const x_320 = x_28.injectionSwitch.y;
-      x_326_phi = x_318;
-      if (!((0.0f <= x_320))) {
-        continue;
-      }
-    } else {
-      x_322 = 0;
-      float const x_324 = x_28.injectionSwitch.y;
-      x_326_phi = x_322;
-      if (!((x_324 < 0.0f))) {
-      } else {
-        continue;
-      }
-    }
-    int const x_326 = x_326_phi;
-    if (x_278) {
-      (*(tint_symbol_4)).arr[x_285] = select(x_313, x_326, x_278);
-    }
-    if (x_278) {
-      x_337 = 0;
-      x_338_phi = x_337;
-    } else {
-      x_336 = k;
-      x_338_phi = x_336;
-    }
-    int const x_338 = x_338_phi;
-    if (x_278) {
-    } else {
-      k = as_type<int>((as_type<uint>(x_338) + as_type<uint>(1)));
-    }
-    float const x_343 = x_28.injectionSwitch.x;
-    if (!((1.0f <= x_343))) {
-    } else {
-      continue;
-    }
-    if (x_278) {
-      x_350 = 0;
-      x_351_phi = x_350;
-    } else {
-      x_349 = j;
-      x_351_phi = x_349;
-    }
-    int const x_351 = x_351_phi;
-    int const x_353 = 0;
-    int const x_355 = select(x_351, x_353, x_278);
-    if (x_278) {
-    } else {
-      j = as_type<int>((as_type<uint>(x_355) + as_type<uint>(1)));
-    }
-    if (x_278) {
-      x_364 = 0;
-      x_365_phi = x_364;
-    } else {
-      x_363 = (*(tint_symbol_3)).arr[x_355];
-      x_365_phi = x_363;
-    }
-    int const x_365 = x_365_phi;
-    if (x_278) {
-    } else {
-      (*(tint_symbol_4)).arr[x_338] = x_365;
-    }
-  }
-  while (true) {
-    int const x_374 = i;
-    int const x_376 = i;
-    int const x_377 = *(mid);
-    if (((x_374 < 10) & (x_376 <= x_377))) {
-    } else {
-      break;
-    }
-    int const x_381 = k;
-    k = as_type<int>((as_type<uint>(x_381) + as_type<uint>(1)));
-    int const x_383 = i;
-    i = as_type<int>((as_type<uint>(x_383) + as_type<uint>(1)));
-    int const x_386 = (*(tint_symbol_3)).arr[x_383];
-    (*(tint_symbol_4)).arr[x_381] = x_386;
-  }
-  int const x_388 = *(from);
-  i_1 = x_388;
-  while (true) {
-    int const x_393 = i_1;
-    int const x_394 = *(to);
-    if ((x_393 <= x_394)) {
-    } else {
-      break;
-    }
-    int const x_397 = i_1;
-    int const x_398 = i_1;
-    int const x_400 = (*(tint_symbol_4)).arr[x_398];
-    (*(tint_symbol_3)).arr[x_397] = x_400;
-    {
-      int const x_402 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_402) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_409 = m;
-    int const x_410 = high;
-    if ((x_409 <= x_410)) {
-    } else {
-      break;
-    }
-    int const x_413 = low;
-    i_2 = x_413;
-    while (true) {
-      int const x_418 = i_2;
-      int const x_419 = high;
-      if ((x_418 < x_419)) {
-      } else {
-        break;
-      }
-      int const x_422 = i_2;
-      from_1 = x_422;
-      int const x_423 = i_2;
-      int const x_424 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_423) + as_type<uint>(x_424)))) - as_type<uint>(1)));
-      int const x_427 = i_2;
-      int const x_428 = m;
-      int const x_432 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_427) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_428))))))) - as_type<uint>(1))), x_432);
-      int const x_434 = from_1;
-      param = x_434;
-      int const x_435 = mid_1;
-      param_1 = x_435;
-      int const x_436 = to_1;
-      param_2 = x_436;
-      merge_i1_i1_i1_(x_28, &(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_438 = m;
-        int const x_440 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_440) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_438))))));
-      }
-    }
-    {
-      int const x_442 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_442)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_88 = x_28.injectionSwitch.x;
-  i_3 = int(x_88);
-  while (true) {
-    int const x_94 = i_3;
-    switch(x_94) {
-      case 9: {
-        int const x_124 = i_3;
-        (*(tint_symbol_7)).arr[x_124] = -5;
-        break;
-      }
-      case 8: {
-        int const x_122 = i_3;
-        (*(tint_symbol_7)).arr[x_122] = -4;
-        break;
-      }
-      case 7: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -3;
-        break;
-      }
-      case 6: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -2;
-        break;
-      }
-      case 5: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -1;
-        break;
-      }
-      case 4: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = 0;
-        break;
-      }
-      case 3: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = 1;
-        break;
-      }
-      case 2: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 2;
-        break;
-      }
-      case 1: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 3;
-        break;
-      }
-      case 0: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_126 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-    {
-      int const x_128 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_134 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    int const x_137 = j_1;
-    int const x_138 = j_1;
-    int const x_140 = (*(tint_symbol_7)).arr[x_138];
-    (*(tint_symbol_8)).arr[x_137] = x_140;
-    {
-      int const x_142 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(x_28, tint_symbol_7, tint_symbol_8);
-  float const x_146 = (*(tint_symbol_9)).y;
-  if ((int(x_146) < 30)) {
-    int const x_153 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    float const x_158 = (*(tint_symbol_9)).y;
-    if ((int(x_158) < 60)) {
-      int const x_165 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      float const x_170 = (*(tint_symbol_9)).y;
-      if ((int(x_170) < 90)) {
-        int const x_177 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        float const x_182 = (*(tint_symbol_9)).y;
-        if ((int(x_182) < 120)) {
-          int const x_189 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          float const x_194 = (*(tint_symbol_9)).y;
-          if ((int(x_194) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_201 = (*(tint_symbol_9)).y;
-            if ((int(x_201) < 180)) {
-              int const x_208 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              float const x_213 = (*(tint_symbol_9)).y;
-              if ((int(x_213) < 210)) {
-                int const x_220 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                float const x_225 = (*(tint_symbol_9)).y;
-                if ((int(x_225) < 240)) {
-                  int const x_232 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  float const x_237 = (*(tint_symbol_9)).y;
-                  if ((int(x_237) < 270)) {
-                    int const x_244 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_248 = grey;
-  float3 const x_249 = float3(x_248, x_248, x_248);
-  *(tint_symbol_10) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.spvasm
deleted file mode 100644
index 3f88a65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,840 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 516
-; Schema: 0
-               OpCapability Shader
-        %284 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %x_283 "x_283"
-               OpName %x_284 "x_284"
-               OpName %x_303 "x_303"
-               OpName %x_304 "x_304"
-               OpName %x_318 "x_318"
-               OpName %x_322 "x_322"
-               OpName %x_337 "x_337"
-               OpName %x_336 "x_336"
-               OpName %x_350 "x_350"
-               OpName %x_349 "x_349"
-               OpName %x_364 "x_364"
-               OpName %x_363 "x_363"
-               OpName %x_285_phi "x_285_phi"
-               OpName %x_305_phi "x_305_phi"
-               OpName %x_326_phi "x_326_phi"
-               OpName %x_338_phi "x_338_phi"
-               OpName %x_351_phi "x_351_phi"
-               OpName %x_365_phi "x_365_phi"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-     %int_10 = OpConstant %int 10
-        %240 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %308 = OpConstantNull %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %503 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-      %x_283 = OpVariable %_ptr_Function_int Function %32
-      %x_284 = OpVariable %_ptr_Function_int Function %32
-      %x_303 = OpVariable %_ptr_Function_int Function %32
-      %x_304 = OpVariable %_ptr_Function_int Function %32
-      %x_318 = OpVariable %_ptr_Function_int Function %32
-      %x_322 = OpVariable %_ptr_Function_int Function %32
-      %x_337 = OpVariable %_ptr_Function_int Function %32
-      %x_336 = OpVariable %_ptr_Function_int Function %32
-      %x_350 = OpVariable %_ptr_Function_int Function %32
-      %x_349 = OpVariable %_ptr_Function_int Function %32
-      %x_364 = OpVariable %_ptr_Function_int Function %32
-      %x_363 = OpVariable %_ptr_Function_int Function %32
-  %x_285_phi = OpVariable %_ptr_Function_int Function %32
-  %x_305_phi = OpVariable %_ptr_Function_int Function %32
-  %x_326_phi = OpVariable %_ptr_Function_int Function %32
-  %x_338_phi = OpVariable %_ptr_Function_int Function %32
-  %x_351_phi = OpVariable %_ptr_Function_int Function %32
-  %x_365_phi = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %68 = OpFOrdGreaterThanEqual %bool %float_1 %float_0
-               OpSelectionMerge %70 None
-               OpBranchConditional %68 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %46
-         %70 = OpLabel
-         %73 = OpLoad %int %i
-         %75 = OpLoad %int %mid
-         %76 = OpLoad %int %j
-         %78 = OpLoad %int %to
-         %79 = OpSLessThanEqual %bool %73 %75
-         %80 = OpSLessThanEqual %bool %76 %78
-         %81 = OpLogicalAnd %bool %79 %80
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-               OpBranch %45
-         %82 = OpLabel
-         %85 = OpLoad %int %i
-         %87 = OpAccessChain %_ptr_Private_int %data %85
-         %88 = OpLoad %int %87
-         %89 = OpLoad %int %j
-         %90 = OpAccessChain %_ptr_Private_int %data %89
-         %91 = OpLoad %int %90
-         %92 = OpSLessThan %bool %88 %91
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-         %96 = OpLoad %int %k
-               OpStore %x_283 %96
-         %97 = OpLoad %int %x_283
-               OpStore %x_285_phi %97
-               OpBranch %93
-         %95 = OpLabel
-               OpStore %x_284 %int_0
-         %99 = OpLoad %int %x_284
-               OpStore %x_285_phi %99
-               OpBranch %93
-         %93 = OpLabel
-        %100 = OpLoad %int %x_285_phi
-        %101 = OpIAdd %int %100 %int_1
-               OpSelectionMerge %102 None
-               OpBranchConditional %92 %103 %102
-        %103 = OpLabel
-               OpStore %k %101
-        %106 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %107 = OpLoad %float %106
-        %109 = OpFOrdLessThanEqual %bool %float_1 %107
-        %108 = OpLogicalNot %bool %109
-               OpSelectionMerge %110 None
-               OpBranchConditional %108 %111 %112
-        %111 = OpLabel
-               OpBranch %110
-        %112 = OpLabel
-               OpBranch %46
-        %110 = OpLabel
-               OpBranch %102
-        %102 = OpLabel
-        %114 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %115 = OpLoad %float %114
-        %116 = OpFOrdGreaterThanEqual %bool %115 %float_0
-               OpSelectionMerge %117 None
-               OpBranchConditional %116 %118 %119
-        %118 = OpLabel
-               OpBranch %117
-        %119 = OpLabel
-               OpBranch %46
-        %117 = OpLabel
-               OpSelectionMerge %120 None
-               OpBranchConditional %92 %121 %122
-        %121 = OpLabel
-        %123 = OpLoad %int %i
-               OpStore %x_303 %123
-        %124 = OpLoad %int %x_303
-               OpStore %x_305_phi %124
-               OpBranch %120
-        %122 = OpLabel
-               OpStore %x_304 %int_0
-        %125 = OpLoad %int %x_304
-               OpStore %x_305_phi %125
-               OpBranch %120
-        %120 = OpLabel
-        %126 = OpLoad %int %x_305_phi
-        %127 = OpSelect %int %92 %126 %int_0
-               OpSelectionMerge %128 None
-               OpBranchConditional %92 %129 %128
-        %129 = OpLabel
-        %130 = OpIAdd %int %127 %int_1
-               OpStore %i %130
-               OpBranch %128
-        %128 = OpLabel
-               OpSelectionMerge %131 None
-               OpBranchConditional %92 %132 %133
-        %132 = OpLabel
-        %134 = OpAccessChain %_ptr_Private_int %data %127
-        %135 = OpLoad %int %134
-               OpStore %x_318 %135
-        %136 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %137 = OpLoad %float %136
-        %138 = OpLoad %int %x_318
-               OpStore %x_326_phi %138
-        %140 = OpFOrdLessThanEqual %bool %float_0 %137
-        %139 = OpLogicalNot %bool %140
-               OpSelectionMerge %141 None
-               OpBranchConditional %139 %142 %141
-        %142 = OpLabel
-               OpBranch %46
-        %141 = OpLabel
-               OpBranch %131
-        %133 = OpLabel
-               OpStore %x_322 %int_0
-        %143 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %144 = OpLoad %float %143
-        %145 = OpLoad %int %x_322
-               OpStore %x_326_phi %145
-        %147 = OpFOrdLessThan %bool %144 %float_0
-        %146 = OpLogicalNot %bool %147
-               OpSelectionMerge %148 None
-               OpBranchConditional %146 %149 %150
-        %149 = OpLabel
-               OpBranch %148
-        %150 = OpLabel
-               OpBranch %46
-        %148 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-        %151 = OpLoad %int %x_326_phi
-               OpSelectionMerge %152 None
-               OpBranchConditional %92 %153 %152
-        %153 = OpLabel
-        %154 = OpAccessChain %_ptr_Private_int %temp %100
-        %155 = OpSelect %int %92 %151 %int_0
-               OpStore %154 %155
-               OpBranch %152
-        %152 = OpLabel
-               OpSelectionMerge %156 None
-               OpBranchConditional %92 %157 %158
-        %157 = OpLabel
-               OpStore %x_337 %int_0
-        %159 = OpLoad %int %x_337
-               OpStore %x_338_phi %159
-               OpBranch %156
-        %158 = OpLabel
-        %160 = OpLoad %int %k
-               OpStore %x_336 %160
-        %161 = OpLoad %int %x_336
-               OpStore %x_338_phi %161
-               OpBranch %156
-        %156 = OpLabel
-        %162 = OpLoad %int %x_338_phi
-               OpSelectionMerge %163 None
-               OpBranchConditional %92 %164 %165
-        %164 = OpLabel
-               OpBranch %163
-        %165 = OpLabel
-        %166 = OpIAdd %int %162 %int_1
-               OpStore %k %166
-               OpBranch %163
-        %163 = OpLabel
-        %167 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %168 = OpLoad %float %167
-        %170 = OpFOrdLessThanEqual %bool %float_1 %168
-        %169 = OpLogicalNot %bool %170
-               OpSelectionMerge %171 None
-               OpBranchConditional %169 %172 %173
-        %172 = OpLabel
-               OpBranch %171
-        %173 = OpLabel
-               OpBranch %46
-        %171 = OpLabel
-               OpSelectionMerge %174 None
-               OpBranchConditional %92 %175 %176
-        %175 = OpLabel
-               OpStore %x_350 %int_0
-        %177 = OpLoad %int %x_350
-               OpStore %x_351_phi %177
-               OpBranch %174
-        %176 = OpLabel
-        %178 = OpLoad %int %j
-               OpStore %x_349 %178
-        %179 = OpLoad %int %x_349
-               OpStore %x_351_phi %179
-               OpBranch %174
-        %174 = OpLabel
-        %180 = OpLoad %int %x_351_phi
-        %181 = OpSelect %int %92 %int_0 %180
-               OpSelectionMerge %182 None
-               OpBranchConditional %92 %183 %184
-        %183 = OpLabel
-               OpBranch %182
-        %184 = OpLabel
-        %185 = OpIAdd %int %181 %int_1
-               OpStore %j %185
-               OpBranch %182
-        %182 = OpLabel
-               OpSelectionMerge %186 None
-               OpBranchConditional %92 %187 %188
-        %187 = OpLabel
-               OpStore %x_364 %int_0
-        %189 = OpLoad %int %x_364
-               OpStore %x_365_phi %189
-               OpBranch %186
-        %188 = OpLabel
-        %190 = OpAccessChain %_ptr_Private_int %data %181
-        %191 = OpLoad %int %190
-               OpStore %x_363 %191
-        %192 = OpLoad %int %x_363
-               OpStore %x_365_phi %192
-               OpBranch %186
-        %186 = OpLabel
-        %193 = OpLoad %int %x_365_phi
-               OpSelectionMerge %194 None
-               OpBranchConditional %92 %195 %196
-        %195 = OpLabel
-               OpBranch %194
-        %196 = OpLabel
-        %197 = OpAccessChain %_ptr_Private_int %temp %162
-               OpStore %197 %193
-               OpBranch %194
-        %194 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %198
-        %198 = OpLabel
-               OpLoopMerge %199 %200 None
-               OpBranch %201
-        %201 = OpLabel
-        %202 = OpLoad %int %i
-        %203 = OpLoad %int %i
-        %205 = OpLoad %int %mid
-        %207 = OpSLessThan %bool %202 %int_10
-        %208 = OpSLessThanEqual %bool %203 %205
-        %209 = OpLogicalAnd %bool %207 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %212
-        %211 = OpLabel
-               OpBranch %210
-        %212 = OpLabel
-               OpBranch %199
-        %210 = OpLabel
-        %213 = OpLoad %int %k
-        %214 = OpIAdd %int %213 %int_1
-               OpStore %k %214
-        %215 = OpLoad %int %i
-        %216 = OpIAdd %int %215 %int_1
-               OpStore %i %216
-        %217 = OpAccessChain %_ptr_Private_int %data %215
-        %218 = OpLoad %int %217
-        %219 = OpAccessChain %_ptr_Private_int %temp %213
-               OpStore %219 %218
-               OpBranch %200
-        %200 = OpLabel
-               OpBranch %198
-        %199 = OpLabel
-        %221 = OpLoad %int %from
-               OpStore %i_1 %221
-               OpBranch %222
-        %222 = OpLabel
-               OpLoopMerge %223 %224 None
-               OpBranch %225
-        %225 = OpLabel
-        %226 = OpLoad %int %i_1
-        %228 = OpLoad %int %to
-        %229 = OpSLessThanEqual %bool %226 %228
-               OpSelectionMerge %230 None
-               OpBranchConditional %229 %231 %232
-        %231 = OpLabel
-               OpBranch %230
-        %232 = OpLabel
-               OpBranch %223
-        %230 = OpLabel
-        %233 = OpLoad %int %i_1
-        %234 = OpLoad %int %i_1
-        %235 = OpAccessChain %_ptr_Private_int %temp %234
-        %236 = OpLoad %int %235
-        %237 = OpAccessChain %_ptr_Private_int %data %233
-               OpStore %237 %236
-               OpBranch %224
-        %224 = OpLabel
-        %238 = OpLoad %int %i_1
-        %239 = OpIAdd %int %238 %int_1
-               OpStore %i_1 %239
-               OpBranch %222
-        %223 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %240
-        %242 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %254
-        %254 = OpLabel
-               OpLoopMerge %255 %256 None
-               OpBranch %257
-        %257 = OpLabel
-        %258 = OpLoad %int %m
-        %259 = OpLoad %int %high
-        %260 = OpSLessThanEqual %bool %258 %259
-               OpSelectionMerge %261 None
-               OpBranchConditional %260 %262 %263
-        %262 = OpLabel
-               OpBranch %261
-        %263 = OpLabel
-               OpBranch %255
-        %261 = OpLabel
-        %264 = OpLoad %int %low
-               OpStore %i_2 %264
-               OpBranch %265
-        %265 = OpLabel
-               OpLoopMerge %266 %267 None
-               OpBranch %268
-        %268 = OpLabel
-        %269 = OpLoad %int %i_2
-        %270 = OpLoad %int %high
-        %271 = OpSLessThan %bool %269 %270
-               OpSelectionMerge %272 None
-               OpBranchConditional %271 %273 %274
-        %273 = OpLabel
-               OpBranch %272
-        %274 = OpLabel
-               OpBranch %266
-        %272 = OpLabel
-        %275 = OpLoad %int %i_2
-               OpStore %from_1 %275
-        %276 = OpLoad %int %i_2
-        %277 = OpLoad %int %m
-        %278 = OpIAdd %int %276 %277
-        %279 = OpISub %int %278 %int_1
-               OpStore %mid_1 %279
-        %280 = OpLoad %int %i_2
-        %281 = OpLoad %int %m
-        %282 = OpLoad %int %high
-        %286 = OpIMul %int %int_2 %281
-        %287 = OpIAdd %int %280 %286
-        %288 = OpISub %int %287 %int_1
-        %283 = OpExtInst %int %284 SMin %288 %282
-               OpStore %to_1 %283
-        %289 = OpLoad %int %from_1
-               OpStore %param %289
-        %290 = OpLoad %int %mid_1
-               OpStore %param_1 %290
-        %291 = OpLoad %int %to_1
-               OpStore %param_2 %291
-        %292 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %267
-        %267 = OpLabel
-        %296 = OpLoad %int %m
-        %297 = OpLoad %int %i_2
-        %298 = OpIMul %int %int_2 %296
-        %299 = OpIAdd %int %297 %298
-               OpStore %i_2 %299
-               OpBranch %265
-        %266 = OpLabel
-               OpBranch %256
-        %256 = OpLabel
-        %300 = OpLoad %int %m
-        %301 = OpIMul %int %int_2 %300
-               OpStore %m %301
-               OpBranch %254
-        %255 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %240
-        %303 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %308
-        %309 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %310 = OpLoad %float %309
-        %311 = OpConvertFToS %int %310
-               OpStore %i_3 %311
-               OpBranch %312
-        %312 = OpLabel
-               OpLoopMerge %313 %314 None
-               OpBranch %315
-        %315 = OpLabel
-        %316 = OpLoad %int %i_3
-               OpSelectionMerge %317 None
-               OpSwitch %316 %318 9 %319 8 %320 7 %321 6 %322 5 %323 4 %324 3 %325 2 %326 1 %327 0 %328
-        %319 = OpLabel
-        %329 = OpLoad %int %i_3
-        %330 = OpAccessChain %_ptr_Private_int %data %329
-               OpStore %330 %int_n5
-               OpBranch %317
-        %320 = OpLabel
-        %332 = OpLoad %int %i_3
-        %333 = OpAccessChain %_ptr_Private_int %data %332
-               OpStore %333 %int_n4
-               OpBranch %317
-        %321 = OpLabel
-        %335 = OpLoad %int %i_3
-        %336 = OpAccessChain %_ptr_Private_int %data %335
-               OpStore %336 %int_n3
-               OpBranch %317
-        %322 = OpLabel
-        %338 = OpLoad %int %i_3
-        %339 = OpAccessChain %_ptr_Private_int %data %338
-               OpStore %339 %int_n2
-               OpBranch %317
-        %323 = OpLabel
-        %341 = OpLoad %int %i_3
-        %342 = OpAccessChain %_ptr_Private_int %data %341
-               OpStore %342 %int_n1
-               OpBranch %317
-        %324 = OpLabel
-        %344 = OpLoad %int %i_3
-        %345 = OpAccessChain %_ptr_Private_int %data %344
-               OpStore %345 %int_0
-               OpBranch %317
-        %325 = OpLabel
-        %346 = OpLoad %int %i_3
-        %347 = OpAccessChain %_ptr_Private_int %data %346
-               OpStore %347 %int_1
-               OpBranch %317
-        %326 = OpLabel
-        %348 = OpLoad %int %i_3
-        %349 = OpAccessChain %_ptr_Private_int %data %348
-               OpStore %349 %int_2
-               OpBranch %317
-        %327 = OpLabel
-        %350 = OpLoad %int %i_3
-        %351 = OpAccessChain %_ptr_Private_int %data %350
-               OpStore %351 %int_3
-               OpBranch %317
-        %328 = OpLabel
-        %353 = OpLoad %int %i_3
-        %354 = OpAccessChain %_ptr_Private_int %data %353
-               OpStore %354 %int_4
-               OpBranch %317
-        %318 = OpLabel
-               OpBranch %317
-        %317 = OpLabel
-        %356 = OpLoad %int %i_3
-        %357 = OpIAdd %int %356 %int_1
-               OpStore %i_3 %357
-               OpBranch %314
-        %314 = OpLabel
-        %358 = OpLoad %int %i_3
-        %359 = OpSLessThan %bool %358 %int_10
-               OpBranchConditional %359 %312 %313
-        %313 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %360
-        %360 = OpLabel
-               OpLoopMerge %361 %362 None
-               OpBranch %363
-        %363 = OpLabel
-        %364 = OpLoad %int %j_1
-        %365 = OpSLessThan %bool %364 %int_10
-               OpSelectionMerge %366 None
-               OpBranchConditional %365 %367 %368
-        %367 = OpLabel
-               OpBranch %366
-        %368 = OpLabel
-               OpBranch %361
-        %366 = OpLabel
-        %369 = OpLoad %int %j_1
-        %370 = OpLoad %int %j_1
-        %371 = OpAccessChain %_ptr_Private_int %data %370
-        %372 = OpLoad %int %371
-        %373 = OpAccessChain %_ptr_Private_int %temp %369
-               OpStore %373 %372
-               OpBranch %362
-        %362 = OpLabel
-        %374 = OpLoad %int %j_1
-        %375 = OpIAdd %int %374 %int_1
-               OpStore %j_1 %375
-               OpBranch %360
-        %361 = OpLabel
-        %376 = OpFunctionCall %void %mergeSort_
-        %378 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %379 = OpLoad %float %378
-        %380 = OpConvertFToS %int %379
-        %382 = OpSLessThan %bool %380 %int_30
-               OpSelectionMerge %383 None
-               OpBranchConditional %382 %384 %385
-        %384 = OpLabel
-        %386 = OpAccessChain %_ptr_Private_int %data %int_0
-        %387 = OpLoad %int %386
-        %389 = OpConvertSToF %float %387
-        %391 = OpFDiv %float %389 %float_10
-        %392 = OpFAdd %float %float_0_5 %391
-               OpStore %grey %392
-               OpBranch %383
-        %385 = OpLabel
-        %393 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %394 = OpLoad %float %393
-        %395 = OpConvertFToS %int %394
-        %397 = OpSLessThan %bool %395 %int_60
-               OpSelectionMerge %398 None
-               OpBranchConditional %397 %399 %400
-        %399 = OpLabel
-        %401 = OpAccessChain %_ptr_Private_int %data %int_1
-        %402 = OpLoad %int %401
-        %403 = OpConvertSToF %float %402
-        %404 = OpFDiv %float %403 %float_10
-        %405 = OpFAdd %float %float_0_5 %404
-               OpStore %grey %405
-               OpBranch %398
-        %400 = OpLabel
-        %406 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %407 = OpLoad %float %406
-        %408 = OpConvertFToS %int %407
-        %410 = OpSLessThan %bool %408 %int_90
-               OpSelectionMerge %411 None
-               OpBranchConditional %410 %412 %413
-        %412 = OpLabel
-        %414 = OpAccessChain %_ptr_Private_int %data %int_2
-        %415 = OpLoad %int %414
-        %416 = OpConvertSToF %float %415
-        %417 = OpFDiv %float %416 %float_10
-        %418 = OpFAdd %float %float_0_5 %417
-               OpStore %grey %418
-               OpBranch %411
-        %413 = OpLabel
-        %419 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %420 = OpLoad %float %419
-        %421 = OpConvertFToS %int %420
-        %423 = OpSLessThan %bool %421 %int_120
-               OpSelectionMerge %424 None
-               OpBranchConditional %423 %425 %426
-        %425 = OpLabel
-        %427 = OpAccessChain %_ptr_Private_int %data %int_3
-        %428 = OpLoad %int %427
-        %429 = OpConvertSToF %float %428
-        %430 = OpFDiv %float %429 %float_10
-        %431 = OpFAdd %float %float_0_5 %430
-               OpStore %grey %431
-               OpBranch %424
-        %426 = OpLabel
-        %432 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %433 = OpLoad %float %432
-        %434 = OpConvertFToS %int %433
-        %436 = OpSLessThan %bool %434 %int_150
-               OpSelectionMerge %437 None
-               OpBranchConditional %436 %438 %439
-        %438 = OpLabel
-               OpKill
-        %439 = OpLabel
-        %440 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %441 = OpLoad %float %440
-        %442 = OpConvertFToS %int %441
-        %444 = OpSLessThan %bool %442 %int_180
-               OpSelectionMerge %445 None
-               OpBranchConditional %444 %446 %447
-        %446 = OpLabel
-        %449 = OpAccessChain %_ptr_Private_int %data %int_5
-        %450 = OpLoad %int %449
-        %451 = OpConvertSToF %float %450
-        %452 = OpFDiv %float %451 %float_10
-        %453 = OpFAdd %float %float_0_5 %452
-               OpStore %grey %453
-               OpBranch %445
-        %447 = OpLabel
-        %454 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %455 = OpLoad %float %454
-        %456 = OpConvertFToS %int %455
-        %458 = OpSLessThan %bool %456 %int_210
-               OpSelectionMerge %459 None
-               OpBranchConditional %458 %460 %461
-        %460 = OpLabel
-        %463 = OpAccessChain %_ptr_Private_int %data %int_6
-        %464 = OpLoad %int %463
-        %465 = OpConvertSToF %float %464
-        %466 = OpFDiv %float %465 %float_10
-        %467 = OpFAdd %float %float_0_5 %466
-               OpStore %grey %467
-               OpBranch %459
-        %461 = OpLabel
-        %468 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %469 = OpLoad %float %468
-        %470 = OpConvertFToS %int %469
-        %472 = OpSLessThan %bool %470 %int_240
-               OpSelectionMerge %473 None
-               OpBranchConditional %472 %474 %475
-        %474 = OpLabel
-        %477 = OpAccessChain %_ptr_Private_int %data %int_7
-        %478 = OpLoad %int %477
-        %479 = OpConvertSToF %float %478
-        %480 = OpFDiv %float %479 %float_10
-        %481 = OpFAdd %float %float_0_5 %480
-               OpStore %grey %481
-               OpBranch %473
-        %475 = OpLabel
-        %482 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %483 = OpLoad %float %482
-        %484 = OpConvertFToS %int %483
-        %486 = OpSLessThan %bool %484 %int_270
-               OpSelectionMerge %487 None
-               OpBranchConditional %486 %488 %489
-        %488 = OpLabel
-        %491 = OpAccessChain %_ptr_Private_int %data %int_8
-        %492 = OpLoad %int %491
-        %493 = OpConvertSToF %float %492
-        %494 = OpFDiv %float %493 %float_10
-        %495 = OpFAdd %float %float_0_5 %494
-               OpStore %grey %495
-               OpBranch %487
-        %489 = OpLabel
-               OpKill
-        %487 = OpLabel
-               OpBranch %473
-        %473 = OpLabel
-               OpBranch %459
-        %459 = OpLabel
-               OpBranch %445
-        %445 = OpLabel
-               OpBranch %437
-        %437 = OpLabel
-               OpBranch %424
-        %424 = OpLabel
-               OpBranch %411
-        %411 = OpLabel
-               OpBranch %398
-        %398 = OpLabel
-               OpBranch %383
-        %383 = OpLabel
-        %496 = OpLoad %float %grey
-        %498 = OpCompositeConstruct %v3float %496 %496 %496
-        %499 = OpCompositeExtract %float %498 0
-        %500 = OpCompositeExtract %float %498 1
-        %501 = OpCompositeExtract %float %498 2
-        %502 = OpCompositeConstruct %v4float %499 %500 %501 %float_1
-               OpStore %x_GLF_color %502
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %503
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %507 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %508 = OpFunctionCall %void %main_1
-        %509 = OpLoad %v4float %x_GLF_color
-        %510 = OpCompositeConstruct %main_out %509
-               OpReturnValue %510
-               OpFunctionEnd
-       %main = OpFunction %void None %240
-        %512 = OpLabel
-        %514 = OpLoad %v4float %gl_FragCoord_param_1
-        %513 = OpFunctionCall %main_out %main_inner %514
-        %515 = OpCompositeExtract %v4float %513 0
-               OpStore %x_GLF_color_1_1 %515
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.wgsl
deleted file mode 100644
index b3b7461..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,413 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_255 : i32 = *(from);
-  k = x_255;
-  let x_256 : i32 = *(from);
-  i = x_256;
-  let x_257 : i32 = *(mid);
-  j = (x_257 + 1);
-  loop {
-    var x_283 : i32;
-    var x_284 : i32;
-    var x_303 : i32;
-    var x_304 : i32;
-    var x_318 : i32;
-    var x_322 : i32;
-    var x_337 : i32;
-    var x_336 : i32;
-    var x_350 : i32;
-    var x_349 : i32;
-    var x_364 : i32;
-    var x_363 : i32;
-    var x_285_phi : i32;
-    var x_305_phi : i32;
-    var x_326_phi : i32;
-    var x_338_phi : i32;
-    var x_351_phi : i32;
-    var x_365_phi : i32;
-    if ((1.0 >= 0.0)) {
-    } else {
-      continue;
-    }
-    let x_264 : i32 = i;
-    let x_265 : i32 = *(mid);
-    let x_267 : i32 = j;
-    let x_268 : i32 = *(to);
-    if (((x_264 <= x_265) & (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    let x_272 : i32 = i;
-    let x_274 : i32 = data[x_272];
-    let x_275 : i32 = j;
-    let x_277 : i32 = data[x_275];
-    let x_278 : bool = (x_274 < x_277);
-    if (x_278) {
-      x_283 = k;
-      x_285_phi = x_283;
-    } else {
-      x_284 = 0;
-      x_285_phi = x_284;
-    }
-    let x_285 : i32 = x_285_phi;
-    let x_286 : i32 = (x_285 + 1);
-    if (x_278) {
-      k = x_286;
-      let x_291 : f32 = x_28.injectionSwitch.x;
-      if (!((1.0 <= x_291))) {
-      } else {
-        continue;
-      }
-    }
-    let x_295 : f32 = x_28.injectionSwitch.y;
-    if ((x_295 >= 0.0)) {
-    } else {
-      continue;
-    }
-    let x_298 : i32 = 0;
-    if (x_278) {
-      x_303 = i;
-      x_305_phi = x_303;
-    } else {
-      x_304 = 0;
-      x_305_phi = x_304;
-    }
-    let x_305 : i32 = x_305_phi;
-    let x_307 : i32 = select(x_298, x_305, x_278);
-    if (x_278) {
-      i = (x_307 + 1);
-    }
-    let x_313 : i32 = 0;
-    if (x_278) {
-      x_318 = data[x_307];
-      let x_320 : f32 = x_28.injectionSwitch.y;
-      x_326_phi = x_318;
-      if (!((0.0 <= x_320))) {
-        continue;
-      }
-    } else {
-      x_322 = 0;
-      let x_324 : f32 = x_28.injectionSwitch.y;
-      x_326_phi = x_322;
-      if (!((x_324 < 0.0))) {
-      } else {
-        continue;
-      }
-    }
-    let x_326 : i32 = x_326_phi;
-    if (x_278) {
-      temp[x_285] = select(x_313, x_326, x_278);
-    }
-    if (x_278) {
-      x_337 = 0;
-      x_338_phi = x_337;
-    } else {
-      x_336 = k;
-      x_338_phi = x_336;
-    }
-    let x_338 : i32 = x_338_phi;
-    if (x_278) {
-    } else {
-      k = (x_338 + 1);
-    }
-    let x_343 : f32 = x_28.injectionSwitch.x;
-    if (!((1.0 <= x_343))) {
-    } else {
-      continue;
-    }
-    if (x_278) {
-      x_350 = 0;
-      x_351_phi = x_350;
-    } else {
-      x_349 = j;
-      x_351_phi = x_349;
-    }
-    let x_351 : i32 = x_351_phi;
-    let x_353 : i32 = 0;
-    let x_355 : i32 = select(x_351, x_353, x_278);
-    if (x_278) {
-    } else {
-      j = (x_355 + 1);
-    }
-    if (x_278) {
-      x_364 = 0;
-      x_365_phi = x_364;
-    } else {
-      x_363 = data[x_355];
-      x_365_phi = x_363;
-    }
-    let x_365 : i32 = x_365_phi;
-    if (x_278) {
-    } else {
-      temp[x_338] = x_365;
-    }
-  }
-  loop {
-    let x_374 : i32 = i;
-    let x_376 : i32 = i;
-    let x_377 : i32 = *(mid);
-    if (((x_374 < 10) & (x_376 <= x_377))) {
-    } else {
-      break;
-    }
-    let x_381 : i32 = k;
-    k = (x_381 + 1);
-    let x_383 : i32 = i;
-    i = (x_383 + 1);
-    let x_386 : i32 = data[x_383];
-    temp[x_381] = x_386;
-  }
-  let x_388 : i32 = *(from);
-  i_1 = x_388;
-  loop {
-    let x_393 : i32 = i_1;
-    let x_394 : i32 = *(to);
-    if ((x_393 <= x_394)) {
-    } else {
-      break;
-    }
-    let x_397 : i32 = i_1;
-    let x_398 : i32 = i_1;
-    let x_400 : i32 = temp[x_398];
-    data[x_397] = x_400;
-
-    continuing {
-      let x_402 : i32 = i_1;
-      i_1 = (x_402 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_409 : i32 = m;
-    let x_410 : i32 = high;
-    if ((x_409 <= x_410)) {
-    } else {
-      break;
-    }
-    let x_413 : i32 = low;
-    i_2 = x_413;
-    loop {
-      let x_418 : i32 = i_2;
-      let x_419 : i32 = high;
-      if ((x_418 < x_419)) {
-      } else {
-        break;
-      }
-      let x_422 : i32 = i_2;
-      from_1 = x_422;
-      let x_423 : i32 = i_2;
-      let x_424 : i32 = m;
-      mid_1 = ((x_423 + x_424) - 1);
-      let x_427 : i32 = i_2;
-      let x_428 : i32 = m;
-      let x_432 : i32 = high;
-      to_1 = min(((x_427 + (2 * x_428)) - 1), x_432);
-      let x_434 : i32 = from_1;
-      param = x_434;
-      let x_435 : i32 = mid_1;
-      param_1 = x_435;
-      let x_436 : i32 = to_1;
-      param_2 = x_436;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_438 : i32 = m;
-        let x_440 : i32 = i_2;
-        i_2 = (x_440 + (2 * x_438));
-      }
-    }
-
-    continuing {
-      let x_442 : i32 = m;
-      m = (2 * x_442);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_88 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_88);
-  loop {
-    let x_94 : i32 = i_3;
-    switch(x_94) {
-      case 9: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -5;
-      }
-      case 8: {
-        let x_122 : i32 = i_3;
-        data[x_122] = -4;
-      }
-      case 7: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -3;
-      }
-      case 6: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -2;
-      }
-      case 5: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -1;
-      }
-      case 4: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 0;
-      }
-      case 3: {
-        let x_112 : i32 = i_3;
-        data[x_112] = 1;
-      }
-      case 2: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 2;
-      }
-      case 1: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 3;
-      }
-      case 0: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 4;
-      }
-      default: {
-      }
-    }
-    let x_126 : i32 = i_3;
-    i_3 = (x_126 + 1);
-
-    continuing {
-      let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_134 : i32 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    let x_137 : i32 = j_1;
-    let x_138 : i32 = j_1;
-    let x_140 : i32 = data[x_138];
-    temp[x_137] = x_140;
-
-    continuing {
-      let x_142 : i32 = j_1;
-      j_1 = (x_142 + 1);
-    }
-  }
-  mergeSort_();
-  let x_146 : f32 = gl_FragCoord.y;
-  if ((i32(x_146) < 30)) {
-    let x_153 : i32 = data[0];
-    grey = (0.5 + (f32(x_153) / 10.0));
-  } else {
-    let x_158 : f32 = gl_FragCoord.y;
-    if ((i32(x_158) < 60)) {
-      let x_165 : i32 = data[1];
-      grey = (0.5 + (f32(x_165) / 10.0));
-    } else {
-      let x_170 : f32 = gl_FragCoord.y;
-      if ((i32(x_170) < 90)) {
-        let x_177 : i32 = data[2];
-        grey = (0.5 + (f32(x_177) / 10.0));
-      } else {
-        let x_182 : f32 = gl_FragCoord.y;
-        if ((i32(x_182) < 120)) {
-          let x_189 : i32 = data[3];
-          grey = (0.5 + (f32(x_189) / 10.0));
-        } else {
-          let x_194 : f32 = gl_FragCoord.y;
-          if ((i32(x_194) < 150)) {
-            discard;
-          } else {
-            let x_201 : f32 = gl_FragCoord.y;
-            if ((i32(x_201) < 180)) {
-              let x_208 : i32 = data[5];
-              grey = (0.5 + (f32(x_208) / 10.0));
-            } else {
-              let x_213 : f32 = gl_FragCoord.y;
-              if ((i32(x_213) < 210)) {
-                let x_220 : i32 = data[6];
-                grey = (0.5 + (f32(x_220) / 10.0));
-              } else {
-                let x_225 : f32 = gl_FragCoord.y;
-                if ((i32(x_225) < 240)) {
-                  let x_232 : i32 = data[7];
-                  grey = (0.5 + (f32(x_232) / 10.0));
-                } else {
-                  let x_237 : f32 = gl_FragCoord.y;
-                  if ((i32(x_237) < 270)) {
-                    let x_244 : i32 = data[8];
-                    grey = (0.5 + (f32(x_244) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_248 : f32 = grey;
-  let x_249 : vec3<f32> = vec3<f32>(x_248, x_248, x_248);
-  x_GLF_color = vec4<f32>(x_249.x, x_249.y, x_249.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5f44e60..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,377 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_255 = from;
-  k = x_255;
-  const int x_256 = from;
-  i = x_256;
-  const int x_257 = mid;
-  j = (x_257 + 1);
-  while (true) {
-    int x_283 = 0;
-    int x_284 = 0;
-    int x_303 = 0;
-    int x_304 = 0;
-    int x_318 = 0;
-    int x_322 = 0;
-    int x_337 = 0;
-    int x_336 = 0;
-    int x_350 = 0;
-    int x_349 = 0;
-    int x_364 = 0;
-    int x_363 = 0;
-    int x_285_phi = 0;
-    int x_305_phi = 0;
-    int x_326_phi = 0;
-    int x_338_phi = 0;
-    int x_351_phi = 0;
-    int x_365_phi = 0;
-    if ((1.0f >= 0.0f)) {
-    } else {
-      continue;
-    }
-    const int x_264 = i;
-    const int x_265 = mid;
-    const int x_267 = j;
-    const int x_268 = to;
-    bool tint_tmp = (x_264 <= x_265);
-    if (tint_tmp) {
-      tint_tmp = (x_267 <= x_268);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_274 = data[i];
-    const int x_277 = data[j];
-    const bool x_278 = (x_274 < x_277);
-    if (x_278) {
-      x_283 = k;
-      x_285_phi = x_283;
-    } else {
-      x_284 = 0;
-      x_285_phi = x_284;
-    }
-    const int x_285 = x_285_phi;
-    const int x_286 = (x_285 + 1);
-    if (x_278) {
-      k = x_286;
-      const float x_291 = asfloat(x_28[0].x);
-      if (!((1.0f <= x_291))) {
-      } else {
-        continue;
-      }
-    }
-    const float x_295 = asfloat(x_28[0].y);
-    if ((x_295 >= 0.0f)) {
-    } else {
-      continue;
-    }
-    const int x_298 = 0;
-    if (x_278) {
-      x_303 = i;
-      x_305_phi = x_303;
-    } else {
-      x_304 = 0;
-      x_305_phi = x_304;
-    }
-    const int x_307 = (x_278 ? x_305_phi : x_298);
-    if (x_278) {
-      i = (x_307 + 1);
-    }
-    const int x_313 = 0;
-    if (x_278) {
-      x_318 = data[x_307];
-      const float x_320 = asfloat(x_28[0].y);
-      x_326_phi = x_318;
-      if (!((0.0f <= x_320))) {
-        continue;
-      }
-    } else {
-      x_322 = 0;
-      const float x_324 = asfloat(x_28[0].y);
-      x_326_phi = x_322;
-      if (!((x_324 < 0.0f))) {
-      } else {
-        continue;
-      }
-    }
-    const int x_326 = x_326_phi;
-    if (x_278) {
-      temp[x_285] = (x_278 ? x_326 : x_313);
-    }
-    if (x_278) {
-      x_337 = 0;
-      x_338_phi = x_337;
-    } else {
-      x_336 = k;
-      x_338_phi = x_336;
-    }
-    const int x_338 = x_338_phi;
-    if (x_278) {
-    } else {
-      k = (x_338 + 1);
-    }
-    const float x_343 = asfloat(x_28[0].x);
-    if (!((1.0f <= x_343))) {
-    } else {
-      continue;
-    }
-    if (x_278) {
-      x_350 = 0;
-      x_351_phi = x_350;
-    } else {
-      x_349 = j;
-      x_351_phi = x_349;
-    }
-    const int x_355 = (x_278 ? 0 : x_351_phi);
-    if (x_278) {
-    } else {
-      j = (x_355 + 1);
-    }
-    if (x_278) {
-      x_364 = 0;
-      x_365_phi = x_364;
-    } else {
-      x_363 = data[x_355];
-      x_365_phi = x_363;
-    }
-    const int x_365 = x_365_phi;
-    if (x_278) {
-    } else {
-      temp[x_338] = x_365;
-    }
-  }
-  while (true) {
-    const int x_374 = i;
-    const int x_376 = i;
-    const int x_377 = mid;
-    bool tint_tmp_1 = (x_374 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_376 <= x_377);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_381 = k;
-    k = (x_381 + 1);
-    const int x_383 = i;
-    i = (x_383 + 1);
-    const int x_386 = data[x_383];
-    temp[x_381] = x_386;
-  }
-  const int x_388 = from;
-  i_1 = x_388;
-  while (true) {
-    const int x_393 = i_1;
-    const int x_394 = to;
-    if ((x_393 <= x_394)) {
-    } else {
-      break;
-    }
-    const int x_397 = i_1;
-    const int x_400 = temp[i_1];
-    data[x_397] = x_400;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_88 = asfloat(x_28[0].x);
-  i_3 = int(x_88);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_137 = j_1;
-      const int x_140 = data[j_1];
-      temp[x_137] = x_140;
-    }
-  }
-  mergeSort_();
-  const float x_146 = gl_FragCoord.y;
-  if ((int(x_146) < 30)) {
-    const int x_153 = data[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    const float x_158 = gl_FragCoord.y;
-    if ((int(x_158) < 60)) {
-      const int x_165 = data[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      const float x_170 = gl_FragCoord.y;
-      if ((int(x_170) < 90)) {
-        const int x_177 = data[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        const float x_182 = gl_FragCoord.y;
-        if ((int(x_182) < 120)) {
-          const int x_189 = data[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          const float x_194 = gl_FragCoord.y;
-          if ((int(x_194) < 150)) {
-            discard;
-          } else {
-            const float x_201 = gl_FragCoord.y;
-            if ((int(x_201) < 180)) {
-              const int x_208 = data[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              const float x_213 = gl_FragCoord.y;
-              if ((int(x_213) < 210)) {
-                const int x_220 = data[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                const float x_225 = gl_FragCoord.y;
-                if ((int(x_225) < 240)) {
-                  const int x_232 = data[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  const float x_237 = gl_FragCoord.y;
-                  if ((int(x_237) < 270)) {
-                    const int x_244 = data[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_248 = grey;
-  const float3 x_249 = float3(x_248, x_248, x_248);
-  x_GLF_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.msl
deleted file mode 100644
index 9cf1ee4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,427 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(constant buf0& x_28, thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_255 = *(from);
-  k = x_255;
-  int const x_256 = *(from);
-  i = x_256;
-  int const x_257 = *(mid);
-  j = as_type<int>((as_type<uint>(x_257) + as_type<uint>(1)));
-  while (true) {
-    int x_283 = 0;
-    int x_284 = 0;
-    int x_303 = 0;
-    int x_304 = 0;
-    int x_318 = 0;
-    int x_322 = 0;
-    int x_337 = 0;
-    int x_336 = 0;
-    int x_350 = 0;
-    int x_349 = 0;
-    int x_364 = 0;
-    int x_363 = 0;
-    int x_285_phi = 0;
-    int x_305_phi = 0;
-    int x_326_phi = 0;
-    int x_338_phi = 0;
-    int x_351_phi = 0;
-    int x_365_phi = 0;
-    if ((1.0f >= 0.0f)) {
-    } else {
-      continue;
-    }
-    int const x_264 = i;
-    int const x_265 = *(mid);
-    int const x_267 = j;
-    int const x_268 = *(to);
-    if (((x_264 <= x_265) && (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    int const x_272 = i;
-    int const x_274 = (*(tint_symbol_3)).arr[x_272];
-    int const x_275 = j;
-    int const x_277 = (*(tint_symbol_3)).arr[x_275];
-    bool const x_278 = (x_274 < x_277);
-    if (x_278) {
-      x_283 = k;
-      x_285_phi = x_283;
-    } else {
-      x_284 = 0;
-      x_285_phi = x_284;
-    }
-    int const x_285 = x_285_phi;
-    int const x_286 = as_type<int>((as_type<uint>(x_285) + as_type<uint>(1)));
-    if (x_278) {
-      k = x_286;
-      float const x_291 = x_28.injectionSwitch.x;
-      if (!((1.0f <= x_291))) {
-      } else {
-        continue;
-      }
-    }
-    float const x_295 = x_28.injectionSwitch.y;
-    if ((x_295 >= 0.0f)) {
-    } else {
-      continue;
-    }
-    int const x_298 = 0;
-    if (x_278) {
-      x_303 = i;
-      x_305_phi = x_303;
-    } else {
-      x_304 = 0;
-      x_305_phi = x_304;
-    }
-    int const x_305 = x_305_phi;
-    int const x_307 = select(x_298, x_305, x_278);
-    if (x_278) {
-      i = as_type<int>((as_type<uint>(x_307) + as_type<uint>(1)));
-    }
-    int const x_313 = 0;
-    if (x_278) {
-      x_318 = (*(tint_symbol_3)).arr[x_307];
-      float const x_320 = x_28.injectionSwitch.y;
-      x_326_phi = x_318;
-      if (!((0.0f <= x_320))) {
-        continue;
-      }
-    } else {
-      x_322 = 0;
-      float const x_324 = x_28.injectionSwitch.y;
-      x_326_phi = x_322;
-      if (!((x_324 < 0.0f))) {
-      } else {
-        continue;
-      }
-    }
-    int const x_326 = x_326_phi;
-    if (x_278) {
-      (*(tint_symbol_4)).arr[x_285] = select(x_313, x_326, x_278);
-    }
-    if (x_278) {
-      x_337 = 0;
-      x_338_phi = x_337;
-    } else {
-      x_336 = k;
-      x_338_phi = x_336;
-    }
-    int const x_338 = x_338_phi;
-    if (x_278) {
-    } else {
-      k = as_type<int>((as_type<uint>(x_338) + as_type<uint>(1)));
-    }
-    float const x_343 = x_28.injectionSwitch.x;
-    if (!((1.0f <= x_343))) {
-    } else {
-      continue;
-    }
-    if (x_278) {
-      x_350 = 0;
-      x_351_phi = x_350;
-    } else {
-      x_349 = j;
-      x_351_phi = x_349;
-    }
-    int const x_351 = x_351_phi;
-    int const x_353 = 0;
-    int const x_355 = select(x_351, x_353, x_278);
-    if (x_278) {
-    } else {
-      j = as_type<int>((as_type<uint>(x_355) + as_type<uint>(1)));
-    }
-    if (x_278) {
-      x_364 = 0;
-      x_365_phi = x_364;
-    } else {
-      x_363 = (*(tint_symbol_3)).arr[x_355];
-      x_365_phi = x_363;
-    }
-    int const x_365 = x_365_phi;
-    if (x_278) {
-    } else {
-      (*(tint_symbol_4)).arr[x_338] = x_365;
-    }
-  }
-  while (true) {
-    int const x_374 = i;
-    int const x_376 = i;
-    int const x_377 = *(mid);
-    if (((x_374 < 10) && (x_376 <= x_377))) {
-    } else {
-      break;
-    }
-    int const x_381 = k;
-    k = as_type<int>((as_type<uint>(x_381) + as_type<uint>(1)));
-    int const x_383 = i;
-    i = as_type<int>((as_type<uint>(x_383) + as_type<uint>(1)));
-    int const x_386 = (*(tint_symbol_3)).arr[x_383];
-    (*(tint_symbol_4)).arr[x_381] = x_386;
-  }
-  int const x_388 = *(from);
-  i_1 = x_388;
-  while (true) {
-    int const x_393 = i_1;
-    int const x_394 = *(to);
-    if ((x_393 <= x_394)) {
-    } else {
-      break;
-    }
-    int const x_397 = i_1;
-    int const x_398 = i_1;
-    int const x_400 = (*(tint_symbol_4)).arr[x_398];
-    (*(tint_symbol_3)).arr[x_397] = x_400;
-    {
-      int const x_402 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_402) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_409 = m;
-    int const x_410 = high;
-    if ((x_409 <= x_410)) {
-    } else {
-      break;
-    }
-    int const x_413 = low;
-    i_2 = x_413;
-    while (true) {
-      int const x_418 = i_2;
-      int const x_419 = high;
-      if ((x_418 < x_419)) {
-      } else {
-        break;
-      }
-      int const x_422 = i_2;
-      from_1 = x_422;
-      int const x_423 = i_2;
-      int const x_424 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_423) + as_type<uint>(x_424)))) - as_type<uint>(1)));
-      int const x_427 = i_2;
-      int const x_428 = m;
-      int const x_432 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_427) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_428))))))) - as_type<uint>(1))), x_432);
-      int const x_434 = from_1;
-      param = x_434;
-      int const x_435 = mid_1;
-      param_1 = x_435;
-      int const x_436 = to_1;
-      param_2 = x_436;
-      merge_i1_i1_i1_(x_28, &(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_438 = m;
-        int const x_440 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_440) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_438))))));
-      }
-    }
-    {
-      int const x_442 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_442)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_88 = x_28.injectionSwitch.x;
-  i_3 = int(x_88);
-  while (true) {
-    int const x_94 = i_3;
-    switch(x_94) {
-      case 9: {
-        int const x_124 = i_3;
-        (*(tint_symbol_7)).arr[x_124] = -5;
-        break;
-      }
-      case 8: {
-        int const x_122 = i_3;
-        (*(tint_symbol_7)).arr[x_122] = -4;
-        break;
-      }
-      case 7: {
-        int const x_120 = i_3;
-        (*(tint_symbol_7)).arr[x_120] = -3;
-        break;
-      }
-      case 6: {
-        int const x_118 = i_3;
-        (*(tint_symbol_7)).arr[x_118] = -2;
-        break;
-      }
-      case 5: {
-        int const x_116 = i_3;
-        (*(tint_symbol_7)).arr[x_116] = -1;
-        break;
-      }
-      case 4: {
-        int const x_114 = i_3;
-        (*(tint_symbol_7)).arr[x_114] = 0;
-        break;
-      }
-      case 3: {
-        int const x_112 = i_3;
-        (*(tint_symbol_7)).arr[x_112] = 1;
-        break;
-      }
-      case 2: {
-        int const x_110 = i_3;
-        (*(tint_symbol_7)).arr[x_110] = 2;
-        break;
-      }
-      case 1: {
-        int const x_108 = i_3;
-        (*(tint_symbol_7)).arr[x_108] = 3;
-        break;
-      }
-      case 0: {
-        int const x_106 = i_3;
-        (*(tint_symbol_7)).arr[x_106] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_126 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(1)));
-    {
-      int const x_128 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_134 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    int const x_137 = j_1;
-    int const x_138 = j_1;
-    int const x_140 = (*(tint_symbol_7)).arr[x_138];
-    (*(tint_symbol_8)).arr[x_137] = x_140;
-    {
-      int const x_142 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(x_28, tint_symbol_7, tint_symbol_8);
-  float const x_146 = (*(tint_symbol_9)).y;
-  if ((int(x_146) < 30)) {
-    int const x_153 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_153) / 10.0f));
-  } else {
-    float const x_158 = (*(tint_symbol_9)).y;
-    if ((int(x_158) < 60)) {
-      int const x_165 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_165) / 10.0f));
-    } else {
-      float const x_170 = (*(tint_symbol_9)).y;
-      if ((int(x_170) < 90)) {
-        int const x_177 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_177) / 10.0f));
-      } else {
-        float const x_182 = (*(tint_symbol_9)).y;
-        if ((int(x_182) < 120)) {
-          int const x_189 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_189) / 10.0f));
-        } else {
-          float const x_194 = (*(tint_symbol_9)).y;
-          if ((int(x_194) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_201 = (*(tint_symbol_9)).y;
-            if ((int(x_201) < 180)) {
-              int const x_208 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_208) / 10.0f));
-            } else {
-              float const x_213 = (*(tint_symbol_9)).y;
-              if ((int(x_213) < 210)) {
-                int const x_220 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_220) / 10.0f));
-              } else {
-                float const x_225 = (*(tint_symbol_9)).y;
-                if ((int(x_225) < 240)) {
-                  int const x_232 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_232) / 10.0f));
-                } else {
-                  float const x_237 = (*(tint_symbol_9)).y;
-                  if ((int(x_237) < 270)) {
-                    int const x_244 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_244) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_248 = grey;
-  float3 const x_249 = float3(x_248, x_248, x_248);
-  *(tint_symbol_10) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.spvasm
deleted file mode 100644
index 64bc0c1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,850 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 520
-; Schema: 0
-               OpCapability Shader
-        %288 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %x_283 "x_283"
-               OpName %x_284 "x_284"
-               OpName %x_303 "x_303"
-               OpName %x_304 "x_304"
-               OpName %x_318 "x_318"
-               OpName %x_322 "x_322"
-               OpName %x_337 "x_337"
-               OpName %x_336 "x_336"
-               OpName %x_350 "x_350"
-               OpName %x_349 "x_349"
-               OpName %x_364 "x_364"
-               OpName %x_363 "x_363"
-               OpName %x_285_phi "x_285_phi"
-               OpName %x_305_phi "x_305_phi"
-               OpName %x_326_phi "x_326_phi"
-               OpName %x_338_phi "x_338_phi"
-               OpName %x_351_phi "x_351_phi"
-               OpName %x_365_phi "x_365_phi"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-     %int_10 = OpConstant %int 10
-        %244 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %312 = OpConstantNull %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-   %main_out = OpTypeStruct %v4float
-        %507 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-      %x_283 = OpVariable %_ptr_Function_int Function %32
-      %x_284 = OpVariable %_ptr_Function_int Function %32
-      %x_303 = OpVariable %_ptr_Function_int Function %32
-      %x_304 = OpVariable %_ptr_Function_int Function %32
-      %x_318 = OpVariable %_ptr_Function_int Function %32
-      %x_322 = OpVariable %_ptr_Function_int Function %32
-      %x_337 = OpVariable %_ptr_Function_int Function %32
-      %x_336 = OpVariable %_ptr_Function_int Function %32
-      %x_350 = OpVariable %_ptr_Function_int Function %32
-      %x_349 = OpVariable %_ptr_Function_int Function %32
-      %x_364 = OpVariable %_ptr_Function_int Function %32
-      %x_363 = OpVariable %_ptr_Function_int Function %32
-  %x_285_phi = OpVariable %_ptr_Function_int Function %32
-  %x_305_phi = OpVariable %_ptr_Function_int Function %32
-  %x_326_phi = OpVariable %_ptr_Function_int Function %32
-  %x_338_phi = OpVariable %_ptr_Function_int Function %32
-  %x_351_phi = OpVariable %_ptr_Function_int Function %32
-  %x_365_phi = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %68 = OpFOrdGreaterThanEqual %bool %float_1 %float_0
-               OpSelectionMerge %70 None
-               OpBranchConditional %68 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %46
-         %70 = OpLabel
-         %73 = OpLoad %int %i
-         %75 = OpLoad %int %mid
-         %76 = OpLoad %int %j
-         %78 = OpLoad %int %to
-         %79 = OpSLessThanEqual %bool %73 %75
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %80
-         %81 = OpLabel
-         %82 = OpSLessThanEqual %bool %76 %78
-               OpBranch %80
-         %80 = OpLabel
-         %83 = OpPhi %bool %79 %70 %82 %81
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %45
-         %84 = OpLabel
-         %87 = OpLoad %int %i
-         %89 = OpAccessChain %_ptr_Private_int %data %87
-         %90 = OpLoad %int %89
-         %91 = OpLoad %int %j
-         %92 = OpAccessChain %_ptr_Private_int %data %91
-         %93 = OpLoad %int %92
-         %94 = OpSLessThan %bool %90 %93
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %97
-         %96 = OpLabel
-         %98 = OpLoad %int %k
-               OpStore %x_283 %98
-         %99 = OpLoad %int %x_283
-               OpStore %x_285_phi %99
-               OpBranch %95
-         %97 = OpLabel
-               OpStore %x_284 %int_0
-        %101 = OpLoad %int %x_284
-               OpStore %x_285_phi %101
-               OpBranch %95
-         %95 = OpLabel
-        %102 = OpLoad %int %x_285_phi
-        %103 = OpIAdd %int %102 %int_1
-               OpSelectionMerge %104 None
-               OpBranchConditional %94 %105 %104
-        %105 = OpLabel
-               OpStore %k %103
-        %108 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %109 = OpLoad %float %108
-        %111 = OpFOrdLessThanEqual %bool %float_1 %109
-        %110 = OpLogicalNot %bool %111
-               OpSelectionMerge %112 None
-               OpBranchConditional %110 %113 %114
-        %113 = OpLabel
-               OpBranch %112
-        %114 = OpLabel
-               OpBranch %46
-        %112 = OpLabel
-               OpBranch %104
-        %104 = OpLabel
-        %116 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %117 = OpLoad %float %116
-        %118 = OpFOrdGreaterThanEqual %bool %117 %float_0
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %121
-        %120 = OpLabel
-               OpBranch %119
-        %121 = OpLabel
-               OpBranch %46
-        %119 = OpLabel
-               OpSelectionMerge %122 None
-               OpBranchConditional %94 %123 %124
-        %123 = OpLabel
-        %125 = OpLoad %int %i
-               OpStore %x_303 %125
-        %126 = OpLoad %int %x_303
-               OpStore %x_305_phi %126
-               OpBranch %122
-        %124 = OpLabel
-               OpStore %x_304 %int_0
-        %127 = OpLoad %int %x_304
-               OpStore %x_305_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %int %x_305_phi
-        %129 = OpSelect %int %94 %128 %int_0
-               OpSelectionMerge %130 None
-               OpBranchConditional %94 %131 %130
-        %131 = OpLabel
-        %132 = OpIAdd %int %129 %int_1
-               OpStore %i %132
-               OpBranch %130
-        %130 = OpLabel
-               OpSelectionMerge %133 None
-               OpBranchConditional %94 %134 %135
-        %134 = OpLabel
-        %136 = OpAccessChain %_ptr_Private_int %data %129
-        %137 = OpLoad %int %136
-               OpStore %x_318 %137
-        %138 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %139 = OpLoad %float %138
-        %140 = OpLoad %int %x_318
-               OpStore %x_326_phi %140
-        %142 = OpFOrdLessThanEqual %bool %float_0 %139
-        %141 = OpLogicalNot %bool %142
-               OpSelectionMerge %143 None
-               OpBranchConditional %141 %144 %143
-        %144 = OpLabel
-               OpBranch %46
-        %143 = OpLabel
-               OpBranch %133
-        %135 = OpLabel
-               OpStore %x_322 %int_0
-        %145 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_1
-        %146 = OpLoad %float %145
-        %147 = OpLoad %int %x_322
-               OpStore %x_326_phi %147
-        %149 = OpFOrdLessThan %bool %146 %float_0
-        %148 = OpLogicalNot %bool %149
-               OpSelectionMerge %150 None
-               OpBranchConditional %148 %151 %152
-        %151 = OpLabel
-               OpBranch %150
-        %152 = OpLabel
-               OpBranch %46
-        %150 = OpLabel
-               OpBranch %133
-        %133 = OpLabel
-        %153 = OpLoad %int %x_326_phi
-               OpSelectionMerge %154 None
-               OpBranchConditional %94 %155 %154
-        %155 = OpLabel
-        %156 = OpAccessChain %_ptr_Private_int %temp %102
-        %157 = OpSelect %int %94 %153 %int_0
-               OpStore %156 %157
-               OpBranch %154
-        %154 = OpLabel
-               OpSelectionMerge %158 None
-               OpBranchConditional %94 %159 %160
-        %159 = OpLabel
-               OpStore %x_337 %int_0
-        %161 = OpLoad %int %x_337
-               OpStore %x_338_phi %161
-               OpBranch %158
-        %160 = OpLabel
-        %162 = OpLoad %int %k
-               OpStore %x_336 %162
-        %163 = OpLoad %int %x_336
-               OpStore %x_338_phi %163
-               OpBranch %158
-        %158 = OpLabel
-        %164 = OpLoad %int %x_338_phi
-               OpSelectionMerge %165 None
-               OpBranchConditional %94 %166 %167
-        %166 = OpLabel
-               OpBranch %165
-        %167 = OpLabel
-        %168 = OpIAdd %int %164 %int_1
-               OpStore %k %168
-               OpBranch %165
-        %165 = OpLabel
-        %169 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %170 = OpLoad %float %169
-        %172 = OpFOrdLessThanEqual %bool %float_1 %170
-        %171 = OpLogicalNot %bool %172
-               OpSelectionMerge %173 None
-               OpBranchConditional %171 %174 %175
-        %174 = OpLabel
-               OpBranch %173
-        %175 = OpLabel
-               OpBranch %46
-        %173 = OpLabel
-               OpSelectionMerge %176 None
-               OpBranchConditional %94 %177 %178
-        %177 = OpLabel
-               OpStore %x_350 %int_0
-        %179 = OpLoad %int %x_350
-               OpStore %x_351_phi %179
-               OpBranch %176
-        %178 = OpLabel
-        %180 = OpLoad %int %j
-               OpStore %x_349 %180
-        %181 = OpLoad %int %x_349
-               OpStore %x_351_phi %181
-               OpBranch %176
-        %176 = OpLabel
-        %182 = OpLoad %int %x_351_phi
-        %183 = OpSelect %int %94 %int_0 %182
-               OpSelectionMerge %184 None
-               OpBranchConditional %94 %185 %186
-        %185 = OpLabel
-               OpBranch %184
-        %186 = OpLabel
-        %187 = OpIAdd %int %183 %int_1
-               OpStore %j %187
-               OpBranch %184
-        %184 = OpLabel
-               OpSelectionMerge %188 None
-               OpBranchConditional %94 %189 %190
-        %189 = OpLabel
-               OpStore %x_364 %int_0
-        %191 = OpLoad %int %x_364
-               OpStore %x_365_phi %191
-               OpBranch %188
-        %190 = OpLabel
-        %192 = OpAccessChain %_ptr_Private_int %data %183
-        %193 = OpLoad %int %192
-               OpStore %x_363 %193
-        %194 = OpLoad %int %x_363
-               OpStore %x_365_phi %194
-               OpBranch %188
-        %188 = OpLabel
-        %195 = OpLoad %int %x_365_phi
-               OpSelectionMerge %196 None
-               OpBranchConditional %94 %197 %198
-        %197 = OpLabel
-               OpBranch %196
-        %198 = OpLabel
-        %199 = OpAccessChain %_ptr_Private_int %temp %164
-               OpStore %199 %195
-               OpBranch %196
-        %196 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %200
-        %200 = OpLabel
-               OpLoopMerge %201 %202 None
-               OpBranch %203
-        %203 = OpLabel
-        %204 = OpLoad %int %i
-        %205 = OpLoad %int %i
-        %207 = OpLoad %int %mid
-        %209 = OpSLessThan %bool %204 %int_10
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %210
-        %211 = OpLabel
-        %212 = OpSLessThanEqual %bool %205 %207
-               OpBranch %210
-        %210 = OpLabel
-        %213 = OpPhi %bool %209 %203 %212 %211
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-               OpBranch %201
-        %214 = OpLabel
-        %217 = OpLoad %int %k
-        %218 = OpIAdd %int %217 %int_1
-               OpStore %k %218
-        %219 = OpLoad %int %i
-        %220 = OpIAdd %int %219 %int_1
-               OpStore %i %220
-        %221 = OpAccessChain %_ptr_Private_int %data %219
-        %222 = OpLoad %int %221
-        %223 = OpAccessChain %_ptr_Private_int %temp %217
-               OpStore %223 %222
-               OpBranch %202
-        %202 = OpLabel
-               OpBranch %200
-        %201 = OpLabel
-        %225 = OpLoad %int %from
-               OpStore %i_1 %225
-               OpBranch %226
-        %226 = OpLabel
-               OpLoopMerge %227 %228 None
-               OpBranch %229
-        %229 = OpLabel
-        %230 = OpLoad %int %i_1
-        %232 = OpLoad %int %to
-        %233 = OpSLessThanEqual %bool %230 %232
-               OpSelectionMerge %234 None
-               OpBranchConditional %233 %235 %236
-        %235 = OpLabel
-               OpBranch %234
-        %236 = OpLabel
-               OpBranch %227
-        %234 = OpLabel
-        %237 = OpLoad %int %i_1
-        %238 = OpLoad %int %i_1
-        %239 = OpAccessChain %_ptr_Private_int %temp %238
-        %240 = OpLoad %int %239
-        %241 = OpAccessChain %_ptr_Private_int %data %237
-               OpStore %241 %240
-               OpBranch %228
-        %228 = OpLabel
-        %242 = OpLoad %int %i_1
-        %243 = OpIAdd %int %242 %int_1
-               OpStore %i_1 %243
-               OpBranch %226
-        %227 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %244
-        %246 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %258
-        %258 = OpLabel
-               OpLoopMerge %259 %260 None
-               OpBranch %261
-        %261 = OpLabel
-        %262 = OpLoad %int %m
-        %263 = OpLoad %int %high
-        %264 = OpSLessThanEqual %bool %262 %263
-               OpSelectionMerge %265 None
-               OpBranchConditional %264 %266 %267
-        %266 = OpLabel
-               OpBranch %265
-        %267 = OpLabel
-               OpBranch %259
-        %265 = OpLabel
-        %268 = OpLoad %int %low
-               OpStore %i_2 %268
-               OpBranch %269
-        %269 = OpLabel
-               OpLoopMerge %270 %271 None
-               OpBranch %272
-        %272 = OpLabel
-        %273 = OpLoad %int %i_2
-        %274 = OpLoad %int %high
-        %275 = OpSLessThan %bool %273 %274
-               OpSelectionMerge %276 None
-               OpBranchConditional %275 %277 %278
-        %277 = OpLabel
-               OpBranch %276
-        %278 = OpLabel
-               OpBranch %270
-        %276 = OpLabel
-        %279 = OpLoad %int %i_2
-               OpStore %from_1 %279
-        %280 = OpLoad %int %i_2
-        %281 = OpLoad %int %m
-        %282 = OpIAdd %int %280 %281
-        %283 = OpISub %int %282 %int_1
-               OpStore %mid_1 %283
-        %284 = OpLoad %int %i_2
-        %285 = OpLoad %int %m
-        %286 = OpLoad %int %high
-        %290 = OpIMul %int %int_2 %285
-        %291 = OpIAdd %int %284 %290
-        %292 = OpISub %int %291 %int_1
-        %287 = OpExtInst %int %288 SMin %292 %286
-               OpStore %to_1 %287
-        %293 = OpLoad %int %from_1
-               OpStore %param %293
-        %294 = OpLoad %int %mid_1
-               OpStore %param_1 %294
-        %295 = OpLoad %int %to_1
-               OpStore %param_2 %295
-        %296 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %271
-        %271 = OpLabel
-        %300 = OpLoad %int %m
-        %301 = OpLoad %int %i_2
-        %302 = OpIMul %int %int_2 %300
-        %303 = OpIAdd %int %301 %302
-               OpStore %i_2 %303
-               OpBranch %269
-        %270 = OpLabel
-               OpBranch %260
-        %260 = OpLabel
-        %304 = OpLoad %int %m
-        %305 = OpIMul %int %int_2 %304
-               OpStore %m %305
-               OpBranch %258
-        %259 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %244
-        %307 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %312
-        %313 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %314 = OpLoad %float %313
-        %315 = OpConvertFToS %int %314
-               OpStore %i_3 %315
-               OpBranch %316
-        %316 = OpLabel
-               OpLoopMerge %317 %318 None
-               OpBranch %319
-        %319 = OpLabel
-        %320 = OpLoad %int %i_3
-               OpSelectionMerge %321 None
-               OpSwitch %320 %322 9 %323 8 %324 7 %325 6 %326 5 %327 4 %328 3 %329 2 %330 1 %331 0 %332
-        %323 = OpLabel
-        %333 = OpLoad %int %i_3
-        %334 = OpAccessChain %_ptr_Private_int %data %333
-               OpStore %334 %int_n5
-               OpBranch %321
-        %324 = OpLabel
-        %336 = OpLoad %int %i_3
-        %337 = OpAccessChain %_ptr_Private_int %data %336
-               OpStore %337 %int_n4
-               OpBranch %321
-        %325 = OpLabel
-        %339 = OpLoad %int %i_3
-        %340 = OpAccessChain %_ptr_Private_int %data %339
-               OpStore %340 %int_n3
-               OpBranch %321
-        %326 = OpLabel
-        %342 = OpLoad %int %i_3
-        %343 = OpAccessChain %_ptr_Private_int %data %342
-               OpStore %343 %int_n2
-               OpBranch %321
-        %327 = OpLabel
-        %345 = OpLoad %int %i_3
-        %346 = OpAccessChain %_ptr_Private_int %data %345
-               OpStore %346 %int_n1
-               OpBranch %321
-        %328 = OpLabel
-        %348 = OpLoad %int %i_3
-        %349 = OpAccessChain %_ptr_Private_int %data %348
-               OpStore %349 %int_0
-               OpBranch %321
-        %329 = OpLabel
-        %350 = OpLoad %int %i_3
-        %351 = OpAccessChain %_ptr_Private_int %data %350
-               OpStore %351 %int_1
-               OpBranch %321
-        %330 = OpLabel
-        %352 = OpLoad %int %i_3
-        %353 = OpAccessChain %_ptr_Private_int %data %352
-               OpStore %353 %int_2
-               OpBranch %321
-        %331 = OpLabel
-        %354 = OpLoad %int %i_3
-        %355 = OpAccessChain %_ptr_Private_int %data %354
-               OpStore %355 %int_3
-               OpBranch %321
-        %332 = OpLabel
-        %357 = OpLoad %int %i_3
-        %358 = OpAccessChain %_ptr_Private_int %data %357
-               OpStore %358 %int_4
-               OpBranch %321
-        %322 = OpLabel
-               OpBranch %321
-        %321 = OpLabel
-        %360 = OpLoad %int %i_3
-        %361 = OpIAdd %int %360 %int_1
-               OpStore %i_3 %361
-               OpBranch %318
-        %318 = OpLabel
-        %362 = OpLoad %int %i_3
-        %363 = OpSLessThan %bool %362 %int_10
-               OpBranchConditional %363 %316 %317
-        %317 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %364
-        %364 = OpLabel
-               OpLoopMerge %365 %366 None
-               OpBranch %367
-        %367 = OpLabel
-        %368 = OpLoad %int %j_1
-        %369 = OpSLessThan %bool %368 %int_10
-               OpSelectionMerge %370 None
-               OpBranchConditional %369 %371 %372
-        %371 = OpLabel
-               OpBranch %370
-        %372 = OpLabel
-               OpBranch %365
-        %370 = OpLabel
-        %373 = OpLoad %int %j_1
-        %374 = OpLoad %int %j_1
-        %375 = OpAccessChain %_ptr_Private_int %data %374
-        %376 = OpLoad %int %375
-        %377 = OpAccessChain %_ptr_Private_int %temp %373
-               OpStore %377 %376
-               OpBranch %366
-        %366 = OpLabel
-        %378 = OpLoad %int %j_1
-        %379 = OpIAdd %int %378 %int_1
-               OpStore %j_1 %379
-               OpBranch %364
-        %365 = OpLabel
-        %380 = OpFunctionCall %void %mergeSort_
-        %382 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %383 = OpLoad %float %382
-        %384 = OpConvertFToS %int %383
-        %386 = OpSLessThan %bool %384 %int_30
-               OpSelectionMerge %387 None
-               OpBranchConditional %386 %388 %389
-        %388 = OpLabel
-        %390 = OpAccessChain %_ptr_Private_int %data %int_0
-        %391 = OpLoad %int %390
-        %393 = OpConvertSToF %float %391
-        %395 = OpFDiv %float %393 %float_10
-        %396 = OpFAdd %float %float_0_5 %395
-               OpStore %grey %396
-               OpBranch %387
-        %389 = OpLabel
-        %397 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %398 = OpLoad %float %397
-        %399 = OpConvertFToS %int %398
-        %401 = OpSLessThan %bool %399 %int_60
-               OpSelectionMerge %402 None
-               OpBranchConditional %401 %403 %404
-        %403 = OpLabel
-        %405 = OpAccessChain %_ptr_Private_int %data %int_1
-        %406 = OpLoad %int %405
-        %407 = OpConvertSToF %float %406
-        %408 = OpFDiv %float %407 %float_10
-        %409 = OpFAdd %float %float_0_5 %408
-               OpStore %grey %409
-               OpBranch %402
-        %404 = OpLabel
-        %410 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %411 = OpLoad %float %410
-        %412 = OpConvertFToS %int %411
-        %414 = OpSLessThan %bool %412 %int_90
-               OpSelectionMerge %415 None
-               OpBranchConditional %414 %416 %417
-        %416 = OpLabel
-        %418 = OpAccessChain %_ptr_Private_int %data %int_2
-        %419 = OpLoad %int %418
-        %420 = OpConvertSToF %float %419
-        %421 = OpFDiv %float %420 %float_10
-        %422 = OpFAdd %float %float_0_5 %421
-               OpStore %grey %422
-               OpBranch %415
-        %417 = OpLabel
-        %423 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %424 = OpLoad %float %423
-        %425 = OpConvertFToS %int %424
-        %427 = OpSLessThan %bool %425 %int_120
-               OpSelectionMerge %428 None
-               OpBranchConditional %427 %429 %430
-        %429 = OpLabel
-        %431 = OpAccessChain %_ptr_Private_int %data %int_3
-        %432 = OpLoad %int %431
-        %433 = OpConvertSToF %float %432
-        %434 = OpFDiv %float %433 %float_10
-        %435 = OpFAdd %float %float_0_5 %434
-               OpStore %grey %435
-               OpBranch %428
-        %430 = OpLabel
-        %436 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %437 = OpLoad %float %436
-        %438 = OpConvertFToS %int %437
-        %440 = OpSLessThan %bool %438 %int_150
-               OpSelectionMerge %441 None
-               OpBranchConditional %440 %442 %443
-        %442 = OpLabel
-               OpKill
-        %443 = OpLabel
-        %444 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %445 = OpLoad %float %444
-        %446 = OpConvertFToS %int %445
-        %448 = OpSLessThan %bool %446 %int_180
-               OpSelectionMerge %449 None
-               OpBranchConditional %448 %450 %451
-        %450 = OpLabel
-        %453 = OpAccessChain %_ptr_Private_int %data %int_5
-        %454 = OpLoad %int %453
-        %455 = OpConvertSToF %float %454
-        %456 = OpFDiv %float %455 %float_10
-        %457 = OpFAdd %float %float_0_5 %456
-               OpStore %grey %457
-               OpBranch %449
-        %451 = OpLabel
-        %458 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %459 = OpLoad %float %458
-        %460 = OpConvertFToS %int %459
-        %462 = OpSLessThan %bool %460 %int_210
-               OpSelectionMerge %463 None
-               OpBranchConditional %462 %464 %465
-        %464 = OpLabel
-        %467 = OpAccessChain %_ptr_Private_int %data %int_6
-        %468 = OpLoad %int %467
-        %469 = OpConvertSToF %float %468
-        %470 = OpFDiv %float %469 %float_10
-        %471 = OpFAdd %float %float_0_5 %470
-               OpStore %grey %471
-               OpBranch %463
-        %465 = OpLabel
-        %472 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %473 = OpLoad %float %472
-        %474 = OpConvertFToS %int %473
-        %476 = OpSLessThan %bool %474 %int_240
-               OpSelectionMerge %477 None
-               OpBranchConditional %476 %478 %479
-        %478 = OpLabel
-        %481 = OpAccessChain %_ptr_Private_int %data %int_7
-        %482 = OpLoad %int %481
-        %483 = OpConvertSToF %float %482
-        %484 = OpFDiv %float %483 %float_10
-        %485 = OpFAdd %float %float_0_5 %484
-               OpStore %grey %485
-               OpBranch %477
-        %479 = OpLabel
-        %486 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %487 = OpLoad %float %486
-        %488 = OpConvertFToS %int %487
-        %490 = OpSLessThan %bool %488 %int_270
-               OpSelectionMerge %491 None
-               OpBranchConditional %490 %492 %493
-        %492 = OpLabel
-        %495 = OpAccessChain %_ptr_Private_int %data %int_8
-        %496 = OpLoad %int %495
-        %497 = OpConvertSToF %float %496
-        %498 = OpFDiv %float %497 %float_10
-        %499 = OpFAdd %float %float_0_5 %498
-               OpStore %grey %499
-               OpBranch %491
-        %493 = OpLabel
-               OpKill
-        %491 = OpLabel
-               OpBranch %477
-        %477 = OpLabel
-               OpBranch %463
-        %463 = OpLabel
-               OpBranch %449
-        %449 = OpLabel
-               OpBranch %441
-        %441 = OpLabel
-               OpBranch %428
-        %428 = OpLabel
-               OpBranch %415
-        %415 = OpLabel
-               OpBranch %402
-        %402 = OpLabel
-               OpBranch %387
-        %387 = OpLabel
-        %500 = OpLoad %float %grey
-        %502 = OpCompositeConstruct %v3float %500 %500 %500
-        %503 = OpCompositeExtract %float %502 0
-        %504 = OpCompositeExtract %float %502 1
-        %505 = OpCompositeExtract %float %502 2
-        %506 = OpCompositeConstruct %v4float %503 %504 %505 %float_1
-               OpStore %x_GLF_color %506
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %507
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %511 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %512 = OpFunctionCall %void %main_1
-        %513 = OpLoad %v4float %x_GLF_color
-        %514 = OpCompositeConstruct %main_out %513
-               OpReturnValue %514
-               OpFunctionEnd
-       %main = OpFunction %void None %244
-        %516 = OpLabel
-        %518 = OpLoad %v4float %gl_FragCoord_param_1
-        %517 = OpFunctionCall %main_out %main_inner %518
-        %519 = OpCompositeExtract %v4float %517 0
-               OpStore %x_GLF_color_1_1 %519
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.wgsl
deleted file mode 100644
index e349c0c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-flatten-selection-dead-continues/2-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,413 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_255 : i32 = *(from);
-  k = x_255;
-  let x_256 : i32 = *(from);
-  i = x_256;
-  let x_257 : i32 = *(mid);
-  j = (x_257 + 1);
-  loop {
-    var x_283 : i32;
-    var x_284 : i32;
-    var x_303 : i32;
-    var x_304 : i32;
-    var x_318 : i32;
-    var x_322 : i32;
-    var x_337 : i32;
-    var x_336 : i32;
-    var x_350 : i32;
-    var x_349 : i32;
-    var x_364 : i32;
-    var x_363 : i32;
-    var x_285_phi : i32;
-    var x_305_phi : i32;
-    var x_326_phi : i32;
-    var x_338_phi : i32;
-    var x_351_phi : i32;
-    var x_365_phi : i32;
-    if ((1.0 >= 0.0)) {
-    } else {
-      continue;
-    }
-    let x_264 : i32 = i;
-    let x_265 : i32 = *(mid);
-    let x_267 : i32 = j;
-    let x_268 : i32 = *(to);
-    if (((x_264 <= x_265) && (x_267 <= x_268))) {
-    } else {
-      break;
-    }
-    let x_272 : i32 = i;
-    let x_274 : i32 = data[x_272];
-    let x_275 : i32 = j;
-    let x_277 : i32 = data[x_275];
-    let x_278 : bool = (x_274 < x_277);
-    if (x_278) {
-      x_283 = k;
-      x_285_phi = x_283;
-    } else {
-      x_284 = 0;
-      x_285_phi = x_284;
-    }
-    let x_285 : i32 = x_285_phi;
-    let x_286 : i32 = (x_285 + 1);
-    if (x_278) {
-      k = x_286;
-      let x_291 : f32 = x_28.injectionSwitch.x;
-      if (!((1.0 <= x_291))) {
-      } else {
-        continue;
-      }
-    }
-    let x_295 : f32 = x_28.injectionSwitch.y;
-    if ((x_295 >= 0.0)) {
-    } else {
-      continue;
-    }
-    let x_298 : i32 = 0;
-    if (x_278) {
-      x_303 = i;
-      x_305_phi = x_303;
-    } else {
-      x_304 = 0;
-      x_305_phi = x_304;
-    }
-    let x_305 : i32 = x_305_phi;
-    let x_307 : i32 = select(x_298, x_305, x_278);
-    if (x_278) {
-      i = (x_307 + 1);
-    }
-    let x_313 : i32 = 0;
-    if (x_278) {
-      x_318 = data[x_307];
-      let x_320 : f32 = x_28.injectionSwitch.y;
-      x_326_phi = x_318;
-      if (!((0.0 <= x_320))) {
-        continue;
-      }
-    } else {
-      x_322 = 0;
-      let x_324 : f32 = x_28.injectionSwitch.y;
-      x_326_phi = x_322;
-      if (!((x_324 < 0.0))) {
-      } else {
-        continue;
-      }
-    }
-    let x_326 : i32 = x_326_phi;
-    if (x_278) {
-      temp[x_285] = select(x_313, x_326, x_278);
-    }
-    if (x_278) {
-      x_337 = 0;
-      x_338_phi = x_337;
-    } else {
-      x_336 = k;
-      x_338_phi = x_336;
-    }
-    let x_338 : i32 = x_338_phi;
-    if (x_278) {
-    } else {
-      k = (x_338 + 1);
-    }
-    let x_343 : f32 = x_28.injectionSwitch.x;
-    if (!((1.0 <= x_343))) {
-    } else {
-      continue;
-    }
-    if (x_278) {
-      x_350 = 0;
-      x_351_phi = x_350;
-    } else {
-      x_349 = j;
-      x_351_phi = x_349;
-    }
-    let x_351 : i32 = x_351_phi;
-    let x_353 : i32 = 0;
-    let x_355 : i32 = select(x_351, x_353, x_278);
-    if (x_278) {
-    } else {
-      j = (x_355 + 1);
-    }
-    if (x_278) {
-      x_364 = 0;
-      x_365_phi = x_364;
-    } else {
-      x_363 = data[x_355];
-      x_365_phi = x_363;
-    }
-    let x_365 : i32 = x_365_phi;
-    if (x_278) {
-    } else {
-      temp[x_338] = x_365;
-    }
-  }
-  loop {
-    let x_374 : i32 = i;
-    let x_376 : i32 = i;
-    let x_377 : i32 = *(mid);
-    if (((x_374 < 10) && (x_376 <= x_377))) {
-    } else {
-      break;
-    }
-    let x_381 : i32 = k;
-    k = (x_381 + 1);
-    let x_383 : i32 = i;
-    i = (x_383 + 1);
-    let x_386 : i32 = data[x_383];
-    temp[x_381] = x_386;
-  }
-  let x_388 : i32 = *(from);
-  i_1 = x_388;
-  loop {
-    let x_393 : i32 = i_1;
-    let x_394 : i32 = *(to);
-    if ((x_393 <= x_394)) {
-    } else {
-      break;
-    }
-    let x_397 : i32 = i_1;
-    let x_398 : i32 = i_1;
-    let x_400 : i32 = temp[x_398];
-    data[x_397] = x_400;
-
-    continuing {
-      let x_402 : i32 = i_1;
-      i_1 = (x_402 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_409 : i32 = m;
-    let x_410 : i32 = high;
-    if ((x_409 <= x_410)) {
-    } else {
-      break;
-    }
-    let x_413 : i32 = low;
-    i_2 = x_413;
-    loop {
-      let x_418 : i32 = i_2;
-      let x_419 : i32 = high;
-      if ((x_418 < x_419)) {
-      } else {
-        break;
-      }
-      let x_422 : i32 = i_2;
-      from_1 = x_422;
-      let x_423 : i32 = i_2;
-      let x_424 : i32 = m;
-      mid_1 = ((x_423 + x_424) - 1);
-      let x_427 : i32 = i_2;
-      let x_428 : i32 = m;
-      let x_432 : i32 = high;
-      to_1 = min(((x_427 + (2 * x_428)) - 1), x_432);
-      let x_434 : i32 = from_1;
-      param = x_434;
-      let x_435 : i32 = mid_1;
-      param_1 = x_435;
-      let x_436 : i32 = to_1;
-      param_2 = x_436;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_438 : i32 = m;
-        let x_440 : i32 = i_2;
-        i_2 = (x_440 + (2 * x_438));
-      }
-    }
-
-    continuing {
-      let x_442 : i32 = m;
-      m = (2 * x_442);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_88 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_88);
-  loop {
-    let x_94 : i32 = i_3;
-    switch(x_94) {
-      case 9: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -5;
-      }
-      case 8: {
-        let x_122 : i32 = i_3;
-        data[x_122] = -4;
-      }
-      case 7: {
-        let x_120 : i32 = i_3;
-        data[x_120] = -3;
-      }
-      case 6: {
-        let x_118 : i32 = i_3;
-        data[x_118] = -2;
-      }
-      case 5: {
-        let x_116 : i32 = i_3;
-        data[x_116] = -1;
-      }
-      case 4: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 0;
-      }
-      case 3: {
-        let x_112 : i32 = i_3;
-        data[x_112] = 1;
-      }
-      case 2: {
-        let x_110 : i32 = i_3;
-        data[x_110] = 2;
-      }
-      case 1: {
-        let x_108 : i32 = i_3;
-        data[x_108] = 3;
-      }
-      case 0: {
-        let x_106 : i32 = i_3;
-        data[x_106] = 4;
-      }
-      default: {
-      }
-    }
-    let x_126 : i32 = i_3;
-    i_3 = (x_126 + 1);
-
-    continuing {
-      let x_128 : i32 = i_3;
-      if ((x_128 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_134 : i32 = j_1;
-    if ((x_134 < 10)) {
-    } else {
-      break;
-    }
-    let x_137 : i32 = j_1;
-    let x_138 : i32 = j_1;
-    let x_140 : i32 = data[x_138];
-    temp[x_137] = x_140;
-
-    continuing {
-      let x_142 : i32 = j_1;
-      j_1 = (x_142 + 1);
-    }
-  }
-  mergeSort_();
-  let x_146 : f32 = gl_FragCoord.y;
-  if ((i32(x_146) < 30)) {
-    let x_153 : i32 = data[0];
-    grey = (0.5 + (f32(x_153) / 10.0));
-  } else {
-    let x_158 : f32 = gl_FragCoord.y;
-    if ((i32(x_158) < 60)) {
-      let x_165 : i32 = data[1];
-      grey = (0.5 + (f32(x_165) / 10.0));
-    } else {
-      let x_170 : f32 = gl_FragCoord.y;
-      if ((i32(x_170) < 90)) {
-        let x_177 : i32 = data[2];
-        grey = (0.5 + (f32(x_177) / 10.0));
-      } else {
-        let x_182 : f32 = gl_FragCoord.y;
-        if ((i32(x_182) < 120)) {
-          let x_189 : i32 = data[3];
-          grey = (0.5 + (f32(x_189) / 10.0));
-        } else {
-          let x_194 : f32 = gl_FragCoord.y;
-          if ((i32(x_194) < 150)) {
-            discard;
-          } else {
-            let x_201 : f32 = gl_FragCoord.y;
-            if ((i32(x_201) < 180)) {
-              let x_208 : i32 = data[5];
-              grey = (0.5 + (f32(x_208) / 10.0));
-            } else {
-              let x_213 : f32 = gl_FragCoord.y;
-              if ((i32(x_213) < 210)) {
-                let x_220 : i32 = data[6];
-                grey = (0.5 + (f32(x_220) / 10.0));
-              } else {
-                let x_225 : f32 = gl_FragCoord.y;
-                if ((i32(x_225) < 240)) {
-                  let x_232 : i32 = data[7];
-                  grey = (0.5 + (f32(x_232) / 10.0));
-                } else {
-                  let x_237 : f32 = gl_FragCoord.y;
-                  if ((i32(x_237) < 270)) {
-                    let x_244 : i32 = data[8];
-                    grey = (0.5 + (f32(x_244) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_248 : f32 = grey;
-  let x_249 : vec3<f32> = vec3<f32>(x_248, x_248, x_248);
-  x_GLF_color = vec4<f32>(x_249.x, x_249.y, x_249.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.hlsl
deleted file mode 100644
index 926a578..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,299 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_303 = from;
-  k = x_303;
-  const int x_304 = from;
-  i = x_304;
-  const int x_305 = mid;
-  j = (x_305 + 1);
-  while (true) {
-    const int x_311 = i;
-    const int x_312 = mid;
-    const int x_314 = j;
-    const int x_315 = to;
-    if (((x_311 <= x_312) & (x_314 <= x_315))) {
-    } else {
-      break;
-    }
-    const int x_321 = data[i];
-    const int x_324 = data[j];
-    if ((x_321 < x_324)) {
-      const int x_329 = k;
-      k = (x_329 + 1);
-      const int x_331 = i;
-      i = (x_331 + 1);
-      const int x_334 = data[x_331];
-      temp[x_329] = x_334;
-    } else {
-      const int x_336 = k;
-      k = (x_336 + 1);
-      const int x_338 = j;
-      j = (x_338 + 1);
-      const int x_341 = data[x_338];
-      temp[x_336] = x_341;
-    }
-  }
-  while (true) {
-    const int x_347 = i;
-    const int x_349 = i;
-    const int x_350 = mid;
-    if (((x_347 < 10) & (x_349 <= x_350))) {
-    } else {
-      break;
-    }
-    const int x_354 = k;
-    k = (x_354 + 1);
-    const int x_356 = i;
-    i = (x_356 + 1);
-    const int x_359 = data[x_356];
-    temp[x_354] = x_359;
-  }
-  const int x_361 = from;
-  i_1 = x_361;
-  while (true) {
-    const int x_366 = i_1;
-    const int x_367 = to;
-    if ((x_366 <= x_367)) {
-    } else {
-      break;
-    }
-    const int x_370 = i_1;
-    const int x_373 = temp[i_1];
-    data[x_370] = x_373;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int x_85 = 0;
-  int x_86 = 0;
-  int x_87 = 0;
-  int x_88 = 0;
-  int x_89 = 0;
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_96 = asfloat(x_28[0].x);
-  i_3 = int(x_96);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_145 = j_1;
-      const int x_148 = data[j_1];
-      temp[x_145] = x_148;
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  {
-    for(; (x_92 <= x_93); x_92 = (2 * x_92)) {
-      x_91 = x_94;
-      {
-        for(; (x_91 < x_93); x_91 = (x_91 + (2 * x_92))) {
-          x_90 = x_91;
-          const int x_170 = x_91;
-          const int x_171 = x_92;
-          const int x_173[10] = data;
-          const int tint_symbol_4[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-          data = tint_symbol_4;
-          data = x_173;
-          x_89 = ((x_170 + x_171) - 1);
-          x_88 = min(((x_91 + (2 * x_92)) - 1), x_93);
-          x_87 = x_90;
-          x_86 = x_89;
-          x_85 = x_88;
-          merge_i1_i1_i1_(x_87, x_86, x_85);
-        }
-      }
-    }
-  }
-  const float x_194 = gl_FragCoord.y;
-  if ((int(x_194) < 30)) {
-    const int x_201 = data[0];
-    grey = (0.5f + (float(x_201) / 10.0f));
-  } else {
-    const float x_206 = gl_FragCoord.y;
-    if ((int(x_206) < 60)) {
-      const int x_213 = data[1];
-      grey = (0.5f + (float(x_213) / 10.0f));
-    } else {
-      const float x_218 = gl_FragCoord.y;
-      if ((int(x_218) < 90)) {
-        const int x_225 = data[2];
-        grey = (0.5f + (float(x_225) / 10.0f));
-      } else {
-        const float x_230 = gl_FragCoord.y;
-        if ((int(x_230) < 120)) {
-          const int x_237 = data[3];
-          grey = (0.5f + (float(x_237) / 10.0f));
-        } else {
-          const float x_242 = gl_FragCoord.y;
-          if ((int(x_242) < 150)) {
-            discard;
-          } else {
-            const float x_249 = gl_FragCoord.y;
-            if ((int(x_249) < 180)) {
-              const int x_256 = data[5];
-              grey = (0.5f + (float(x_256) / 10.0f));
-            } else {
-              const float x_261 = gl_FragCoord.y;
-              if ((int(x_261) < 210)) {
-                const int x_268 = data[6];
-                grey = (0.5f + (float(x_268) / 10.0f));
-              } else {
-                const float x_273 = gl_FragCoord.y;
-                if ((int(x_273) < 240)) {
-                  const int x_280 = data[7];
-                  grey = (0.5f + (float(x_280) / 10.0f));
-                } else {
-                  const float x_285 = gl_FragCoord.y;
-                  if ((int(x_285) < 270)) {
-                    const int x_292 = data[8];
-                    grey = (0.5f + (float(x_292) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_296 = grey;
-  const float3 x_297 = float3(x_296, x_296, x_296);
-  x_GLF_color = float4(x_297.x, x_297.y, x_297.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.msl
deleted file mode 100644
index 7834adc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.msl
+++ /dev/null
@@ -1,379 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_4, thread tint_array_wrapper* const tint_symbol_5) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_303 = *(from);
-  k = x_303;
-  int const x_304 = *(from);
-  i = x_304;
-  int const x_305 = *(mid);
-  j = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
-  while (true) {
-    int const x_311 = i;
-    int const x_312 = *(mid);
-    int const x_314 = j;
-    int const x_315 = *(to);
-    if (((x_311 <= x_312) & (x_314 <= x_315))) {
-    } else {
-      break;
-    }
-    int const x_319 = i;
-    int const x_321 = (*(tint_symbol_4)).arr[x_319];
-    int const x_322 = j;
-    int const x_324 = (*(tint_symbol_4)).arr[x_322];
-    if ((x_321 < x_324)) {
-      int const x_329 = k;
-      k = as_type<int>((as_type<uint>(x_329) + as_type<uint>(1)));
-      int const x_331 = i;
-      i = as_type<int>((as_type<uint>(x_331) + as_type<uint>(1)));
-      int const x_334 = (*(tint_symbol_4)).arr[x_331];
-      (*(tint_symbol_5)).arr[x_329] = x_334;
-    } else {
-      int const x_336 = k;
-      k = as_type<int>((as_type<uint>(x_336) + as_type<uint>(1)));
-      int const x_338 = j;
-      j = as_type<int>((as_type<uint>(x_338) + as_type<uint>(1)));
-      int const x_341 = (*(tint_symbol_4)).arr[x_338];
-      (*(tint_symbol_5)).arr[x_336] = x_341;
-    }
-  }
-  while (true) {
-    int const x_347 = i;
-    int const x_349 = i;
-    int const x_350 = *(mid);
-    if (((x_347 < 10) & (x_349 <= x_350))) {
-    } else {
-      break;
-    }
-    int const x_354 = k;
-    k = as_type<int>((as_type<uint>(x_354) + as_type<uint>(1)));
-    int const x_356 = i;
-    i = as_type<int>((as_type<uint>(x_356) + as_type<uint>(1)));
-    int const x_359 = (*(tint_symbol_4)).arr[x_356];
-    (*(tint_symbol_5)).arr[x_354] = x_359;
-  }
-  int const x_361 = *(from);
-  i_1 = x_361;
-  while (true) {
-    int const x_366 = i_1;
-    int const x_367 = *(to);
-    if ((x_366 <= x_367)) {
-    } else {
-      break;
-    }
-    int const x_370 = i_1;
-    int const x_371 = i_1;
-    int const x_373 = (*(tint_symbol_5)).arr[x_371];
-    (*(tint_symbol_4)).arr[x_370] = x_373;
-    {
-      int const x_375 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_375) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int x_85 = 0;
-  int x_86 = 0;
-  int x_87 = 0;
-  int x_88 = 0;
-  int x_89 = 0;
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_96 = x_28.injectionSwitch.x;
-  i_3 = int(x_96);
-  while (true) {
-    int const x_102 = i_3;
-    switch(x_102) {
-      case 9: {
-        int const x_132 = i_3;
-        (*(tint_symbol_6)).arr[x_132] = -5;
-        break;
-      }
-      case 8: {
-        int const x_130 = i_3;
-        (*(tint_symbol_6)).arr[x_130] = -4;
-        break;
-      }
-      case 7: {
-        int const x_128 = i_3;
-        (*(tint_symbol_6)).arr[x_128] = -3;
-        break;
-      }
-      case 6: {
-        int const x_126 = i_3;
-        (*(tint_symbol_6)).arr[x_126] = -2;
-        break;
-      }
-      case 5: {
-        int const x_124 = i_3;
-        (*(tint_symbol_6)).arr[x_124] = -1;
-        break;
-      }
-      case 4: {
-        int const x_122 = i_3;
-        (*(tint_symbol_6)).arr[x_122] = 0;
-        break;
-      }
-      case 3: {
-        int const x_120 = i_3;
-        (*(tint_symbol_6)).arr[x_120] = 1;
-        break;
-      }
-      case 2: {
-        int const x_118 = i_3;
-        (*(tint_symbol_6)).arr[x_118] = 2;
-        break;
-      }
-      case 1: {
-        int const x_116 = i_3;
-        (*(tint_symbol_6)).arr[x_116] = 3;
-        break;
-      }
-      case 0: {
-        int const x_114 = i_3;
-        (*(tint_symbol_6)).arr[x_114] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_134 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
-    {
-      int const x_136 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_142 = j_1;
-    if ((x_142 < 10)) {
-    } else {
-      break;
-    }
-    int const x_145 = j_1;
-    int const x_146 = j_1;
-    int const x_148 = (*(tint_symbol_6)).arr[x_146];
-    (*(tint_symbol_7)).arr[x_145] = x_148;
-    {
-      int const x_150 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  while (true) {
-    int const x_156 = x_92;
-    int const x_157 = x_93;
-    if ((x_156 <= x_157)) {
-    } else {
-      break;
-    }
-    int const x_160 = x_94;
-    x_91 = x_160;
-    while (true) {
-      int const x_165 = x_91;
-      int const x_166 = x_93;
-      if ((x_165 < x_166)) {
-      } else {
-        break;
-      }
-      int const x_169 = x_91;
-      x_90 = x_169;
-      int const x_170 = x_91;
-      int const x_171 = x_92;
-      tint_array_wrapper const x_173 = *(tint_symbol_6);
-      tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-      *(tint_symbol_6) = tint_symbol_2;
-      *(tint_symbol_6) = x_173;
-      x_89 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_170) + as_type<uint>(x_171)))) - as_type<uint>(1)));
-      int const x_175 = x_91;
-      int const x_176 = x_92;
-      int const x_180 = x_93;
-      x_88 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_175) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_176))))))) - as_type<uint>(1))), x_180);
-      int const x_182 = x_90;
-      x_87 = x_182;
-      int const x_183 = x_89;
-      x_86 = x_183;
-      int const x_184 = x_88;
-      x_85 = x_184;
-      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85), tint_symbol_6, tint_symbol_7);
-      {
-        int const x_186 = x_92;
-        int const x_188 = x_91;
-        x_91 = as_type<int>((as_type<uint>(x_188) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_186))))));
-      }
-    }
-    {
-      int const x_190 = x_92;
-      x_92 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_190)));
-    }
-  }
-  float const x_194 = (*(tint_symbol_8)).y;
-  if ((int(x_194) < 30)) {
-    int const x_201 = (*(tint_symbol_6)).arr[0];
-    grey = (0.5f + (float(x_201) / 10.0f));
-  } else {
-    float const x_206 = (*(tint_symbol_8)).y;
-    if ((int(x_206) < 60)) {
-      int const x_213 = (*(tint_symbol_6)).arr[1];
-      grey = (0.5f + (float(x_213) / 10.0f));
-    } else {
-      float const x_218 = (*(tint_symbol_8)).y;
-      if ((int(x_218) < 90)) {
-        int const x_225 = (*(tint_symbol_6)).arr[2];
-        grey = (0.5f + (float(x_225) / 10.0f));
-      } else {
-        float const x_230 = (*(tint_symbol_8)).y;
-        if ((int(x_230) < 120)) {
-          int const x_237 = (*(tint_symbol_6)).arr[3];
-          grey = (0.5f + (float(x_237) / 10.0f));
-        } else {
-          float const x_242 = (*(tint_symbol_8)).y;
-          if ((int(x_242) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_249 = (*(tint_symbol_8)).y;
-            if ((int(x_249) < 180)) {
-              int const x_256 = (*(tint_symbol_6)).arr[5];
-              grey = (0.5f + (float(x_256) / 10.0f));
-            } else {
-              float const x_261 = (*(tint_symbol_8)).y;
-              if ((int(x_261) < 210)) {
-                int const x_268 = (*(tint_symbol_6)).arr[6];
-                grey = (0.5f + (float(x_268) / 10.0f));
-              } else {
-                float const x_273 = (*(tint_symbol_8)).y;
-                if ((int(x_273) < 240)) {
-                  int const x_280 = (*(tint_symbol_6)).arr[7];
-                  grey = (0.5f + (float(x_280) / 10.0f));
-                } else {
-                  float const x_285 = (*(tint_symbol_8)).y;
-                  if ((int(x_285) < 270)) {
-                    int const x_292 = (*(tint_symbol_6)).arr[8];
-                    grey = (0.5f + (float(x_292) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_296 = grey;
-  float3 const x_297 = float3(x_296, x_296, x_296);
-  *(tint_symbol_9) = float4(x_297.x, x_297.y, x_297.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread float4* const tint_symbol_13) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_11, tint_symbol_12, tint_symbol_10, tint_symbol_13);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_13)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_14 = 0.0f;
-  thread tint_array_wrapper tint_symbol_15 = {};
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread float4 tint_symbol_17 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_18, thread tint_array_wrapper* const tint_symbol_19) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_382 = m;
-    int const x_383 = high;
-    if ((x_382 <= x_383)) {
-    } else {
-      break;
-    }
-    int const x_386 = low;
-    i_2 = x_386;
-    while (true) {
-      int const x_391 = i_2;
-      int const x_392 = high;
-      if ((x_391 < x_392)) {
-      } else {
-        break;
-      }
-      int const x_395 = i_2;
-      from_1 = x_395;
-      int const x_396 = i_2;
-      int const x_397 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_396) + as_type<uint>(x_397)))) - as_type<uint>(1)));
-      int const x_400 = i_2;
-      int const x_401 = m;
-      int const x_405 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_400) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_401))))))) - as_type<uint>(1))), x_405);
-      int const x_407 = from_1;
-      param = x_407;
-      int const x_408 = mid_1;
-      param_1 = x_408;
-      int const x_409 = to_1;
-      param_2 = x_409;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_18, tint_symbol_19);
-      {
-        int const x_411 = m;
-        int const x_413 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_413) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_411))))));
-      }
-    }
-    {
-      int const x_415 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_415)));
-    }
-  }
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.spvasm
deleted file mode 100644
index f5ab977..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,723 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 466
-; Schema: 0
-               OpCapability Shader
-        %250 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %main_1 "main_1"
-               OpName %x_85 "x_85"
-               OpName %x_86 "x_86"
-               OpName %x_87 "x_87"
-               OpName %x_88 "x_88"
-               OpName %x_89 "x_89"
-               OpName %x_90 "x_90"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %128 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-        %145 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_9 = OpConstant %int 9
-        %243 = OpConstantComposite %_arr_int_uint_10 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %395 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-         %56 = OpSLessThanEqual %bool %51 %53
-         %57 = OpLogicalAnd %bool %54 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %45
-         %58 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Private_int %data %61
-         %64 = OpLoad %int %63
-         %65 = OpLoad %int %j
-         %66 = OpAccessChain %_ptr_Private_int %data %65
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpLoad %int %k
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %k %73
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-         %76 = OpAccessChain %_ptr_Private_int %data %74
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Private_int %temp %72
-               OpStore %78 %77
-               OpBranch %69
-         %71 = OpLabel
-         %79 = OpLoad %int %k
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %k %80
-         %81 = OpLoad %int %j
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %j %82
-         %83 = OpAccessChain %_ptr_Private_int %data %81
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Private_int %temp %79
-               OpStore %85 %84
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i
-         %91 = OpLoad %int %i
-         %93 = OpLoad %int %mid
-         %95 = OpSLessThan %bool %90 %int_10
-         %96 = OpSLessThanEqual %bool %91 %93
-         %97 = OpLogicalAnd %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-               OpBranch %98
-        %100 = OpLabel
-               OpBranch %87
-         %98 = OpLabel
-        %101 = OpLoad %int %k
-        %102 = OpIAdd %int %101 %int_1
-               OpStore %k %102
-        %103 = OpLoad %int %i
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %i %104
-        %105 = OpAccessChain %_ptr_Private_int %data %103
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Private_int %temp %101
-               OpStore %107 %106
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %86
-         %87 = OpLabel
-        %109 = OpLoad %int %from
-               OpStore %i_1 %109
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %i_1
-        %116 = OpLoad %int %to
-        %117 = OpSLessThanEqual %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-               OpBranch %118
-        %120 = OpLabel
-               OpBranch %111
-        %118 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpLoad %int %i_1
-        %123 = OpAccessChain %_ptr_Private_int %temp %122
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Private_int %data %121
-               OpStore %125 %124
-               OpBranch %112
-        %112 = OpLabel
-        %126 = OpLoad %int %i_1
-        %127 = OpIAdd %int %126 %int_1
-               OpStore %i_1 %127
-               OpBranch %110
-        %111 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %128
-        %130 = OpLabel
-       %x_85 = OpVariable %_ptr_Function_int Function %32
-       %x_86 = OpVariable %_ptr_Function_int Function %32
-       %x_87 = OpVariable %_ptr_Function_int Function %32
-       %x_88 = OpVariable %_ptr_Function_int Function %32
-       %x_89 = OpVariable %_ptr_Function_int Function %32
-       %x_90 = OpVariable %_ptr_Function_int Function %32
-       %x_91 = OpVariable %_ptr_Function_int Function %32
-       %x_92 = OpVariable %_ptr_Function_int Function %32
-       %x_93 = OpVariable %_ptr_Function_int Function %32
-       %x_94 = OpVariable %_ptr_Function_int Function %32
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %145
-        %148 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %149 = OpLoad %float %148
-        %150 = OpConvertFToS %int %149
-               OpStore %i_3 %150
-               OpBranch %151
-        %151 = OpLabel
-               OpLoopMerge %152 %153 None
-               OpBranch %154
-        %154 = OpLabel
-        %155 = OpLoad %int %i_3
-               OpSelectionMerge %156 None
-               OpSwitch %155 %157 9 %158 8 %159 7 %160 6 %161 5 %162 4 %163 3 %164 2 %165 1 %166 0 %167
-        %158 = OpLabel
-        %168 = OpLoad %int %i_3
-        %169 = OpAccessChain %_ptr_Private_int %data %168
-               OpStore %169 %int_n5
-               OpBranch %156
-        %159 = OpLabel
-        %171 = OpLoad %int %i_3
-        %172 = OpAccessChain %_ptr_Private_int %data %171
-               OpStore %172 %int_n4
-               OpBranch %156
-        %160 = OpLabel
-        %174 = OpLoad %int %i_3
-        %175 = OpAccessChain %_ptr_Private_int %data %174
-               OpStore %175 %int_n3
-               OpBranch %156
-        %161 = OpLabel
-        %177 = OpLoad %int %i_3
-        %178 = OpAccessChain %_ptr_Private_int %data %177
-               OpStore %178 %int_n2
-               OpBranch %156
-        %162 = OpLabel
-        %180 = OpLoad %int %i_3
-        %181 = OpAccessChain %_ptr_Private_int %data %180
-               OpStore %181 %int_n1
-               OpBranch %156
-        %163 = OpLabel
-        %183 = OpLoad %int %i_3
-        %184 = OpAccessChain %_ptr_Private_int %data %183
-               OpStore %184 %int_0
-               OpBranch %156
-        %164 = OpLabel
-        %186 = OpLoad %int %i_3
-        %187 = OpAccessChain %_ptr_Private_int %data %186
-               OpStore %187 %int_1
-               OpBranch %156
-        %165 = OpLabel
-        %188 = OpLoad %int %i_3
-        %189 = OpAccessChain %_ptr_Private_int %data %188
-               OpStore %189 %int_2
-               OpBranch %156
-        %166 = OpLabel
-        %191 = OpLoad %int %i_3
-        %192 = OpAccessChain %_ptr_Private_int %data %191
-               OpStore %192 %int_3
-               OpBranch %156
-        %167 = OpLabel
-        %194 = OpLoad %int %i_3
-        %195 = OpAccessChain %_ptr_Private_int %data %194
-               OpStore %195 %int_4
-               OpBranch %156
-        %157 = OpLabel
-               OpBranch %156
-        %156 = OpLabel
-        %197 = OpLoad %int %i_3
-        %198 = OpIAdd %int %197 %int_1
-               OpStore %i_3 %198
-               OpBranch %153
-        %153 = OpLabel
-        %199 = OpLoad %int %i_3
-        %200 = OpSLessThan %bool %199 %int_10
-               OpBranchConditional %200 %151 %152
-        %152 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %201
-        %201 = OpLabel
-               OpLoopMerge %202 %203 None
-               OpBranch %204
-        %204 = OpLabel
-        %205 = OpLoad %int %j_1
-        %206 = OpSLessThan %bool %205 %int_10
-               OpSelectionMerge %207 None
-               OpBranchConditional %206 %208 %209
-        %208 = OpLabel
-               OpBranch %207
-        %209 = OpLabel
-               OpBranch %202
-        %207 = OpLabel
-        %210 = OpLoad %int %j_1
-        %211 = OpLoad %int %j_1
-        %212 = OpAccessChain %_ptr_Private_int %data %211
-        %213 = OpLoad %int %212
-        %214 = OpAccessChain %_ptr_Private_int %temp %210
-               OpStore %214 %213
-               OpBranch %203
-        %203 = OpLabel
-        %215 = OpLoad %int %j_1
-        %216 = OpIAdd %int %215 %int_1
-               OpStore %j_1 %216
-               OpBranch %201
-        %202 = OpLabel
-               OpStore %x_94 %int_0
-               OpStore %x_93 %int_9
-               OpStore %x_92 %int_1
-               OpBranch %218
-        %218 = OpLabel
-               OpLoopMerge %219 %220 None
-               OpBranch %221
-        %221 = OpLabel
-        %222 = OpLoad %int %x_92
-        %223 = OpLoad %int %x_93
-        %224 = OpSLessThanEqual %bool %222 %223
-               OpSelectionMerge %225 None
-               OpBranchConditional %224 %226 %227
-        %226 = OpLabel
-               OpBranch %225
-        %227 = OpLabel
-               OpBranch %219
-        %225 = OpLabel
-        %228 = OpLoad %int %x_94
-               OpStore %x_91 %228
-               OpBranch %229
-        %229 = OpLabel
-               OpLoopMerge %230 %231 None
-               OpBranch %232
-        %232 = OpLabel
-        %233 = OpLoad %int %x_91
-        %234 = OpLoad %int %x_93
-        %235 = OpSLessThan %bool %233 %234
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %238
-        %237 = OpLabel
-               OpBranch %236
-        %238 = OpLabel
-               OpBranch %230
-        %236 = OpLabel
-        %239 = OpLoad %int %x_91
-               OpStore %x_90 %239
-        %240 = OpLoad %int %x_91
-        %241 = OpLoad %int %x_92
-        %242 = OpLoad %_arr_int_uint_10 %data
-               OpStore %data %243
-               OpStore %data %242
-        %244 = OpIAdd %int %240 %241
-        %245 = OpISub %int %244 %int_1
-               OpStore %x_89 %245
-        %246 = OpLoad %int %x_91
-        %247 = OpLoad %int %x_92
-        %248 = OpLoad %int %x_93
-        %251 = OpIMul %int %int_2 %247
-        %252 = OpIAdd %int %246 %251
-        %253 = OpISub %int %252 %int_1
-        %249 = OpExtInst %int %250 SMin %253 %248
-               OpStore %x_88 %249
-        %254 = OpLoad %int %x_90
-               OpStore %x_87 %254
-        %255 = OpLoad %int %x_89
-               OpStore %x_86 %255
-        %256 = OpLoad %int %x_88
-               OpStore %x_85 %256
-        %257 = OpFunctionCall %void %merge_i1_i1_i1_ %x_87 %x_86 %x_85
-               OpBranch %231
-        %231 = OpLabel
-        %261 = OpLoad %int %x_92
-        %262 = OpLoad %int %x_91
-        %263 = OpIMul %int %int_2 %261
-        %264 = OpIAdd %int %262 %263
-               OpStore %x_91 %264
-               OpBranch %229
-        %230 = OpLabel
-               OpBranch %220
-        %220 = OpLabel
-        %265 = OpLoad %int %x_92
-        %266 = OpIMul %int %int_2 %265
-               OpStore %x_92 %266
-               OpBranch %218
-        %219 = OpLabel
-        %269 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %270 = OpLoad %float %269
-        %271 = OpConvertFToS %int %270
-        %273 = OpSLessThan %bool %271 %int_30
-               OpSelectionMerge %274 None
-               OpBranchConditional %273 %275 %276
-        %275 = OpLabel
-        %277 = OpAccessChain %_ptr_Private_int %data %int_0
-        %278 = OpLoad %int %277
-        %280 = OpConvertSToF %float %278
-        %282 = OpFDiv %float %280 %float_10
-        %283 = OpFAdd %float %float_0_5 %282
-               OpStore %grey %283
-               OpBranch %274
-        %276 = OpLabel
-        %284 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %285 = OpLoad %float %284
-        %286 = OpConvertFToS %int %285
-        %288 = OpSLessThan %bool %286 %int_60
-               OpSelectionMerge %289 None
-               OpBranchConditional %288 %290 %291
-        %290 = OpLabel
-        %292 = OpAccessChain %_ptr_Private_int %data %int_1
-        %293 = OpLoad %int %292
-        %294 = OpConvertSToF %float %293
-        %295 = OpFDiv %float %294 %float_10
-        %296 = OpFAdd %float %float_0_5 %295
-               OpStore %grey %296
-               OpBranch %289
-        %291 = OpLabel
-        %297 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %298 = OpLoad %float %297
-        %299 = OpConvertFToS %int %298
-        %301 = OpSLessThan %bool %299 %int_90
-               OpSelectionMerge %302 None
-               OpBranchConditional %301 %303 %304
-        %303 = OpLabel
-        %305 = OpAccessChain %_ptr_Private_int %data %int_2
-        %306 = OpLoad %int %305
-        %307 = OpConvertSToF %float %306
-        %308 = OpFDiv %float %307 %float_10
-        %309 = OpFAdd %float %float_0_5 %308
-               OpStore %grey %309
-               OpBranch %302
-        %304 = OpLabel
-        %310 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %311 = OpLoad %float %310
-        %312 = OpConvertFToS %int %311
-        %314 = OpSLessThan %bool %312 %int_120
-               OpSelectionMerge %315 None
-               OpBranchConditional %314 %316 %317
-        %316 = OpLabel
-        %318 = OpAccessChain %_ptr_Private_int %data %int_3
-        %319 = OpLoad %int %318
-        %320 = OpConvertSToF %float %319
-        %321 = OpFDiv %float %320 %float_10
-        %322 = OpFAdd %float %float_0_5 %321
-               OpStore %grey %322
-               OpBranch %315
-        %317 = OpLabel
-        %323 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %324 = OpLoad %float %323
-        %325 = OpConvertFToS %int %324
-        %327 = OpSLessThan %bool %325 %int_150
-               OpSelectionMerge %328 None
-               OpBranchConditional %327 %329 %330
-        %329 = OpLabel
-               OpKill
-        %330 = OpLabel
-        %331 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %332 = OpLoad %float %331
-        %333 = OpConvertFToS %int %332
-        %335 = OpSLessThan %bool %333 %int_180
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %338
-        %337 = OpLabel
-        %340 = OpAccessChain %_ptr_Private_int %data %int_5
-        %341 = OpLoad %int %340
-        %342 = OpConvertSToF %float %341
-        %343 = OpFDiv %float %342 %float_10
-        %344 = OpFAdd %float %float_0_5 %343
-               OpStore %grey %344
-               OpBranch %336
-        %338 = OpLabel
-        %345 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %346 = OpLoad %float %345
-        %347 = OpConvertFToS %int %346
-        %349 = OpSLessThan %bool %347 %int_210
-               OpSelectionMerge %350 None
-               OpBranchConditional %349 %351 %352
-        %351 = OpLabel
-        %354 = OpAccessChain %_ptr_Private_int %data %int_6
-        %355 = OpLoad %int %354
-        %356 = OpConvertSToF %float %355
-        %357 = OpFDiv %float %356 %float_10
-        %358 = OpFAdd %float %float_0_5 %357
-               OpStore %grey %358
-               OpBranch %350
-        %352 = OpLabel
-        %359 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %360 = OpLoad %float %359
-        %361 = OpConvertFToS %int %360
-        %363 = OpSLessThan %bool %361 %int_240
-               OpSelectionMerge %364 None
-               OpBranchConditional %363 %365 %366
-        %365 = OpLabel
-        %368 = OpAccessChain %_ptr_Private_int %data %int_7
-        %369 = OpLoad %int %368
-        %370 = OpConvertSToF %float %369
-        %371 = OpFDiv %float %370 %float_10
-        %372 = OpFAdd %float %float_0_5 %371
-               OpStore %grey %372
-               OpBranch %364
-        %366 = OpLabel
-        %373 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %374 = OpLoad %float %373
-        %375 = OpConvertFToS %int %374
-        %377 = OpSLessThan %bool %375 %int_270
-               OpSelectionMerge %378 None
-               OpBranchConditional %377 %379 %380
-        %379 = OpLabel
-        %382 = OpAccessChain %_ptr_Private_int %data %int_8
-        %383 = OpLoad %int %382
-        %384 = OpConvertSToF %float %383
-        %385 = OpFDiv %float %384 %float_10
-        %386 = OpFAdd %float %float_0_5 %385
-               OpStore %grey %386
-               OpBranch %378
-        %380 = OpLabel
-               OpKill
-        %378 = OpLabel
-               OpBranch %364
-        %364 = OpLabel
-               OpBranch %350
-        %350 = OpLabel
-               OpBranch %336
-        %336 = OpLabel
-               OpBranch %328
-        %328 = OpLabel
-               OpBranch %315
-        %315 = OpLabel
-               OpBranch %302
-        %302 = OpLabel
-               OpBranch %289
-        %289 = OpLabel
-               OpBranch %274
-        %274 = OpLabel
-        %387 = OpLoad %float %grey
-        %389 = OpCompositeConstruct %v3float %387 %387 %387
-        %390 = OpCompositeExtract %float %389 0
-        %391 = OpCompositeExtract %float %389 1
-        %392 = OpCompositeExtract %float %389 2
-        %394 = OpCompositeConstruct %v4float %390 %391 %392 %float_1
-               OpStore %x_GLF_color %394
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %395
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %399 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %400 = OpFunctionCall %void %main_1
-        %401 = OpLoad %v4float %x_GLF_color
-        %402 = OpCompositeConstruct %main_out %401
-               OpReturnValue %402
-               OpFunctionEnd
-       %main = OpFunction %void None %128
-        %404 = OpLabel
-        %406 = OpLoad %v4float %gl_FragCoord_param_1
-        %405 = OpFunctionCall %main_out %main_inner %406
-        %407 = OpCompositeExtract %v4float %405 0
-               OpStore %x_GLF_color_1_1 %407
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %128
-        %409 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %420
-        %420 = OpLabel
-               OpLoopMerge %421 %422 None
-               OpBranch %423
-        %423 = OpLabel
-        %424 = OpLoad %int %m
-        %425 = OpLoad %int %high
-        %426 = OpSLessThanEqual %bool %424 %425
-               OpSelectionMerge %427 None
-               OpBranchConditional %426 %428 %429
-        %428 = OpLabel
-               OpBranch %427
-        %429 = OpLabel
-               OpBranch %421
-        %427 = OpLabel
-        %430 = OpLoad %int %low
-               OpStore %i_2 %430
-               OpBranch %431
-        %431 = OpLabel
-               OpLoopMerge %432 %433 None
-               OpBranch %434
-        %434 = OpLabel
-        %435 = OpLoad %int %i_2
-        %436 = OpLoad %int %high
-        %437 = OpSLessThan %bool %435 %436
-               OpSelectionMerge %438 None
-               OpBranchConditional %437 %439 %440
-        %439 = OpLabel
-               OpBranch %438
-        %440 = OpLabel
-               OpBranch %432
-        %438 = OpLabel
-        %441 = OpLoad %int %i_2
-               OpStore %from_1 %441
-        %442 = OpLoad %int %i_2
-        %443 = OpLoad %int %m
-        %444 = OpIAdd %int %442 %443
-        %445 = OpISub %int %444 %int_1
-               OpStore %mid_1 %445
-        %446 = OpLoad %int %i_2
-        %447 = OpLoad %int %m
-        %448 = OpLoad %int %high
-        %450 = OpIMul %int %int_2 %447
-        %451 = OpIAdd %int %446 %450
-        %452 = OpISub %int %451 %int_1
-        %449 = OpExtInst %int %250 SMin %452 %448
-               OpStore %to_1 %449
-        %453 = OpLoad %int %from_1
-               OpStore %param %453
-        %454 = OpLoad %int %mid_1
-               OpStore %param_1 %454
-        %455 = OpLoad %int %to_1
-               OpStore %param_2 %455
-        %456 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %433
-        %433 = OpLabel
-        %460 = OpLoad %int %m
-        %461 = OpLoad %int %i_2
-        %462 = OpIMul %int %int_2 %460
-        %463 = OpIAdd %int %461 %462
-               OpStore %i_2 %463
-               OpBranch %431
-        %432 = OpLabel
-               OpBranch %422
-        %422 = OpLabel
-        %464 = OpLoad %int %m
-        %465 = OpIMul %int %int_2 %464
-               OpStore %m %465
-               OpBranch %420
-        %421 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.wgsl
deleted file mode 100644
index 4f2a421..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,366 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_303 : i32 = *(from);
-  k = x_303;
-  let x_304 : i32 = *(from);
-  i = x_304;
-  let x_305 : i32 = *(mid);
-  j = (x_305 + 1);
-  loop {
-    let x_311 : i32 = i;
-    let x_312 : i32 = *(mid);
-    let x_314 : i32 = j;
-    let x_315 : i32 = *(to);
-    if (((x_311 <= x_312) & (x_314 <= x_315))) {
-    } else {
-      break;
-    }
-    let x_319 : i32 = i;
-    let x_321 : i32 = data[x_319];
-    let x_322 : i32 = j;
-    let x_324 : i32 = data[x_322];
-    if ((x_321 < x_324)) {
-      let x_329 : i32 = k;
-      k = (x_329 + 1);
-      let x_331 : i32 = i;
-      i = (x_331 + 1);
-      let x_334 : i32 = data[x_331];
-      temp[x_329] = x_334;
-    } else {
-      let x_336 : i32 = k;
-      k = (x_336 + 1);
-      let x_338 : i32 = j;
-      j = (x_338 + 1);
-      let x_341 : i32 = data[x_338];
-      temp[x_336] = x_341;
-    }
-  }
-  loop {
-    let x_347 : i32 = i;
-    let x_349 : i32 = i;
-    let x_350 : i32 = *(mid);
-    if (((x_347 < 10) & (x_349 <= x_350))) {
-    } else {
-      break;
-    }
-    let x_354 : i32 = k;
-    k = (x_354 + 1);
-    let x_356 : i32 = i;
-    i = (x_356 + 1);
-    let x_359 : i32 = data[x_356];
-    temp[x_354] = x_359;
-  }
-  let x_361 : i32 = *(from);
-  i_1 = x_361;
-  loop {
-    let x_366 : i32 = i_1;
-    let x_367 : i32 = *(to);
-    if ((x_366 <= x_367)) {
-    } else {
-      break;
-    }
-    let x_370 : i32 = i_1;
-    let x_371 : i32 = i_1;
-    let x_373 : i32 = temp[x_371];
-    data[x_370] = x_373;
-
-    continuing {
-      let x_375 : i32 = i_1;
-      i_1 = (x_375 + 1);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var x_85 : i32;
-  var x_86 : i32;
-  var x_87 : i32;
-  var x_88 : i32;
-  var x_89 : i32;
-  var x_90 : i32;
-  var x_91 : i32;
-  var x_92 : i32;
-  var x_93 : i32;
-  var x_94 : i32;
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_96 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_96);
-  loop {
-    let x_102 : i32 = i_3;
-    switch(x_102) {
-      case 9: {
-        let x_132 : i32 = i_3;
-        data[x_132] = -5;
-      }
-      case 8: {
-        let x_130 : i32 = i_3;
-        data[x_130] = -4;
-      }
-      case 7: {
-        let x_128 : i32 = i_3;
-        data[x_128] = -3;
-      }
-      case 6: {
-        let x_126 : i32 = i_3;
-        data[x_126] = -2;
-      }
-      case 5: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -1;
-      }
-      case 4: {
-        let x_122 : i32 = i_3;
-        data[x_122] = 0;
-      }
-      case 3: {
-        let x_120 : i32 = i_3;
-        data[x_120] = 1;
-      }
-      case 2: {
-        let x_118 : i32 = i_3;
-        data[x_118] = 2;
-      }
-      case 1: {
-        let x_116 : i32 = i_3;
-        data[x_116] = 3;
-      }
-      case 0: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 4;
-      }
-      default: {
-      }
-    }
-    let x_134 : i32 = i_3;
-    i_3 = (x_134 + 1);
-
-    continuing {
-      let x_136 : i32 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_142 : i32 = j_1;
-    if ((x_142 < 10)) {
-    } else {
-      break;
-    }
-    let x_145 : i32 = j_1;
-    let x_146 : i32 = j_1;
-    let x_148 : i32 = data[x_146];
-    temp[x_145] = x_148;
-
-    continuing {
-      let x_150 : i32 = j_1;
-      j_1 = (x_150 + 1);
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  loop {
-    let x_156 : i32 = x_92;
-    let x_157 : i32 = x_93;
-    if ((x_156 <= x_157)) {
-    } else {
-      break;
-    }
-    let x_160 : i32 = x_94;
-    x_91 = x_160;
-    loop {
-      let x_165 : i32 = x_91;
-      let x_166 : i32 = x_93;
-      if ((x_165 < x_166)) {
-      } else {
-        break;
-      }
-      let x_169 : i32 = x_91;
-      x_90 = x_169;
-      let x_170 : i32 = x_91;
-      let x_171 : i32 = x_92;
-      let x_173 : array<i32, 10> = data;
-      data = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-      data = x_173;
-      x_89 = ((x_170 + x_171) - 1);
-      let x_175 : i32 = x_91;
-      let x_176 : i32 = x_92;
-      let x_180 : i32 = x_93;
-      x_88 = min(((x_175 + (2 * x_176)) - 1), x_180);
-      let x_182 : i32 = x_90;
-      x_87 = x_182;
-      let x_183 : i32 = x_89;
-      x_86 = x_183;
-      let x_184 : i32 = x_88;
-      x_85 = x_184;
-      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85));
-
-      continuing {
-        let x_186 : i32 = x_92;
-        let x_188 : i32 = x_91;
-        x_91 = (x_188 + (2 * x_186));
-      }
-    }
-
-    continuing {
-      let x_190 : i32 = x_92;
-      x_92 = (2 * x_190);
-    }
-  }
-  let x_194 : f32 = gl_FragCoord.y;
-  if ((i32(x_194) < 30)) {
-    let x_201 : i32 = data[0];
-    grey = (0.5 + (f32(x_201) / 10.0));
-  } else {
-    let x_206 : f32 = gl_FragCoord.y;
-    if ((i32(x_206) < 60)) {
-      let x_213 : i32 = data[1];
-      grey = (0.5 + (f32(x_213) / 10.0));
-    } else {
-      let x_218 : f32 = gl_FragCoord.y;
-      if ((i32(x_218) < 90)) {
-        let x_225 : i32 = data[2];
-        grey = (0.5 + (f32(x_225) / 10.0));
-      } else {
-        let x_230 : f32 = gl_FragCoord.y;
-        if ((i32(x_230) < 120)) {
-          let x_237 : i32 = data[3];
-          grey = (0.5 + (f32(x_237) / 10.0));
-        } else {
-          let x_242 : f32 = gl_FragCoord.y;
-          if ((i32(x_242) < 150)) {
-            discard;
-          } else {
-            let x_249 : f32 = gl_FragCoord.y;
-            if ((i32(x_249) < 180)) {
-              let x_256 : i32 = data[5];
-              grey = (0.5 + (f32(x_256) / 10.0));
-            } else {
-              let x_261 : f32 = gl_FragCoord.y;
-              if ((i32(x_261) < 210)) {
-                let x_268 : i32 = data[6];
-                grey = (0.5 + (f32(x_268) / 10.0));
-              } else {
-                let x_273 : f32 = gl_FragCoord.y;
-                if ((i32(x_273) < 240)) {
-                  let x_280 : i32 = data[7];
-                  grey = (0.5 + (f32(x_280) / 10.0));
-                } else {
-                  let x_285 : f32 = gl_FragCoord.y;
-                  if ((i32(x_285) < 270)) {
-                    let x_292 : i32 = data[8];
-                    grey = (0.5 + (f32(x_292) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_296 : f32 = grey;
-  let x_297 : vec3<f32> = vec3<f32>(x_296, x_296, x_296);
-  x_GLF_color = vec4<f32>(x_297.x, x_297.y, x_297.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_382 : i32 = m;
-    let x_383 : i32 = high;
-    if ((x_382 <= x_383)) {
-    } else {
-      break;
-    }
-    let x_386 : i32 = low;
-    i_2 = x_386;
-    loop {
-      let x_391 : i32 = i_2;
-      let x_392 : i32 = high;
-      if ((x_391 < x_392)) {
-      } else {
-        break;
-      }
-      let x_395 : i32 = i_2;
-      from_1 = x_395;
-      let x_396 : i32 = i_2;
-      let x_397 : i32 = m;
-      mid_1 = ((x_396 + x_397) - 1);
-      let x_400 : i32 = i_2;
-      let x_401 : i32 = m;
-      let x_405 : i32 = high;
-      to_1 = min(((x_400 + (2 * x_401)) - 1), x_405);
-      let x_407 : i32 = from_1;
-      param = x_407;
-      let x_408 : i32 = mid_1;
-      param_1 = x_408;
-      let x_409 : i32 = to_1;
-      param_2 = x_409;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_411 : i32 = m;
-        let x_413 : i32 = i_2;
-        i_2 = (x_413 + (2 * x_411));
-      }
-    }
-
-    continuing {
-      let x_415 : i32 = m;
-      m = (2 * x_415);
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.hlsl
deleted file mode 100644
index f0bce55..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,307 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_303 = from;
-  k = x_303;
-  const int x_304 = from;
-  i = x_304;
-  const int x_305 = mid;
-  j = (x_305 + 1);
-  while (true) {
-    const int x_311 = i;
-    const int x_312 = mid;
-    const int x_314 = j;
-    const int x_315 = to;
-    bool tint_tmp = (x_311 <= x_312);
-    if (tint_tmp) {
-      tint_tmp = (x_314 <= x_315);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_321 = data[i];
-    const int x_324 = data[j];
-    if ((x_321 < x_324)) {
-      const int x_329 = k;
-      k = (x_329 + 1);
-      const int x_331 = i;
-      i = (x_331 + 1);
-      const int x_334 = data[x_331];
-      temp[x_329] = x_334;
-    } else {
-      const int x_336 = k;
-      k = (x_336 + 1);
-      const int x_338 = j;
-      j = (x_338 + 1);
-      const int x_341 = data[x_338];
-      temp[x_336] = x_341;
-    }
-  }
-  while (true) {
-    const int x_347 = i;
-    const int x_349 = i;
-    const int x_350 = mid;
-    bool tint_tmp_1 = (x_347 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_349 <= x_350);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_354 = k;
-    k = (x_354 + 1);
-    const int x_356 = i;
-    i = (x_356 + 1);
-    const int x_359 = data[x_356];
-    temp[x_354] = x_359;
-  }
-  const int x_361 = from;
-  i_1 = x_361;
-  while (true) {
-    const int x_366 = i_1;
-    const int x_367 = to;
-    if ((x_366 <= x_367)) {
-    } else {
-      break;
-    }
-    const int x_370 = i_1;
-    const int x_373 = temp[i_1];
-    data[x_370] = x_373;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int x_85 = 0;
-  int x_86 = 0;
-  int x_87 = 0;
-  int x_88 = 0;
-  int x_89 = 0;
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_96 = asfloat(x_28[0].x);
-  i_3 = int(x_96);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_145 = j_1;
-      const int x_148 = data[j_1];
-      temp[x_145] = x_148;
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  {
-    for(; (x_92 <= x_93); x_92 = (2 * x_92)) {
-      x_91 = x_94;
-      {
-        for(; (x_91 < x_93); x_91 = (x_91 + (2 * x_92))) {
-          x_90 = x_91;
-          const int x_170 = x_91;
-          const int x_171 = x_92;
-          const int x_173[10] = data;
-          const int tint_symbol_4[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-          data = tint_symbol_4;
-          data = x_173;
-          x_89 = ((x_170 + x_171) - 1);
-          x_88 = min(((x_91 + (2 * x_92)) - 1), x_93);
-          x_87 = x_90;
-          x_86 = x_89;
-          x_85 = x_88;
-          merge_i1_i1_i1_(x_87, x_86, x_85);
-        }
-      }
-    }
-  }
-  const float x_194 = gl_FragCoord.y;
-  if ((int(x_194) < 30)) {
-    const int x_201 = data[0];
-    grey = (0.5f + (float(x_201) / 10.0f));
-  } else {
-    const float x_206 = gl_FragCoord.y;
-    if ((int(x_206) < 60)) {
-      const int x_213 = data[1];
-      grey = (0.5f + (float(x_213) / 10.0f));
-    } else {
-      const float x_218 = gl_FragCoord.y;
-      if ((int(x_218) < 90)) {
-        const int x_225 = data[2];
-        grey = (0.5f + (float(x_225) / 10.0f));
-      } else {
-        const float x_230 = gl_FragCoord.y;
-        if ((int(x_230) < 120)) {
-          const int x_237 = data[3];
-          grey = (0.5f + (float(x_237) / 10.0f));
-        } else {
-          const float x_242 = gl_FragCoord.y;
-          if ((int(x_242) < 150)) {
-            discard;
-          } else {
-            const float x_249 = gl_FragCoord.y;
-            if ((int(x_249) < 180)) {
-              const int x_256 = data[5];
-              grey = (0.5f + (float(x_256) / 10.0f));
-            } else {
-              const float x_261 = gl_FragCoord.y;
-              if ((int(x_261) < 210)) {
-                const int x_268 = data[6];
-                grey = (0.5f + (float(x_268) / 10.0f));
-              } else {
-                const float x_273 = gl_FragCoord.y;
-                if ((int(x_273) < 240)) {
-                  const int x_280 = data[7];
-                  grey = (0.5f + (float(x_280) / 10.0f));
-                } else {
-                  const float x_285 = gl_FragCoord.y;
-                  if ((int(x_285) < 270)) {
-                    const int x_292 = data[8];
-                    grey = (0.5f + (float(x_292) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_296 = grey;
-  const float3 x_297 = float3(x_296, x_296, x_296);
-  x_GLF_color = float4(x_297.x, x_297.y, x_297.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.msl
deleted file mode 100644
index 1c776f0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.msl
+++ /dev/null
@@ -1,379 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_4, thread tint_array_wrapper* const tint_symbol_5) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_303 = *(from);
-  k = x_303;
-  int const x_304 = *(from);
-  i = x_304;
-  int const x_305 = *(mid);
-  j = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
-  while (true) {
-    int const x_311 = i;
-    int const x_312 = *(mid);
-    int const x_314 = j;
-    int const x_315 = *(to);
-    if (((x_311 <= x_312) && (x_314 <= x_315))) {
-    } else {
-      break;
-    }
-    int const x_319 = i;
-    int const x_321 = (*(tint_symbol_4)).arr[x_319];
-    int const x_322 = j;
-    int const x_324 = (*(tint_symbol_4)).arr[x_322];
-    if ((x_321 < x_324)) {
-      int const x_329 = k;
-      k = as_type<int>((as_type<uint>(x_329) + as_type<uint>(1)));
-      int const x_331 = i;
-      i = as_type<int>((as_type<uint>(x_331) + as_type<uint>(1)));
-      int const x_334 = (*(tint_symbol_4)).arr[x_331];
-      (*(tint_symbol_5)).arr[x_329] = x_334;
-    } else {
-      int const x_336 = k;
-      k = as_type<int>((as_type<uint>(x_336) + as_type<uint>(1)));
-      int const x_338 = j;
-      j = as_type<int>((as_type<uint>(x_338) + as_type<uint>(1)));
-      int const x_341 = (*(tint_symbol_4)).arr[x_338];
-      (*(tint_symbol_5)).arr[x_336] = x_341;
-    }
-  }
-  while (true) {
-    int const x_347 = i;
-    int const x_349 = i;
-    int const x_350 = *(mid);
-    if (((x_347 < 10) && (x_349 <= x_350))) {
-    } else {
-      break;
-    }
-    int const x_354 = k;
-    k = as_type<int>((as_type<uint>(x_354) + as_type<uint>(1)));
-    int const x_356 = i;
-    i = as_type<int>((as_type<uint>(x_356) + as_type<uint>(1)));
-    int const x_359 = (*(tint_symbol_4)).arr[x_356];
-    (*(tint_symbol_5)).arr[x_354] = x_359;
-  }
-  int const x_361 = *(from);
-  i_1 = x_361;
-  while (true) {
-    int const x_366 = i_1;
-    int const x_367 = *(to);
-    if ((x_366 <= x_367)) {
-    } else {
-      break;
-    }
-    int const x_370 = i_1;
-    int const x_371 = i_1;
-    int const x_373 = (*(tint_symbol_5)).arr[x_371];
-    (*(tint_symbol_4)).arr[x_370] = x_373;
-    {
-      int const x_375 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_375) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int x_85 = 0;
-  int x_86 = 0;
-  int x_87 = 0;
-  int x_88 = 0;
-  int x_89 = 0;
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_96 = x_28.injectionSwitch.x;
-  i_3 = int(x_96);
-  while (true) {
-    int const x_102 = i_3;
-    switch(x_102) {
-      case 9: {
-        int const x_132 = i_3;
-        (*(tint_symbol_6)).arr[x_132] = -5;
-        break;
-      }
-      case 8: {
-        int const x_130 = i_3;
-        (*(tint_symbol_6)).arr[x_130] = -4;
-        break;
-      }
-      case 7: {
-        int const x_128 = i_3;
-        (*(tint_symbol_6)).arr[x_128] = -3;
-        break;
-      }
-      case 6: {
-        int const x_126 = i_3;
-        (*(tint_symbol_6)).arr[x_126] = -2;
-        break;
-      }
-      case 5: {
-        int const x_124 = i_3;
-        (*(tint_symbol_6)).arr[x_124] = -1;
-        break;
-      }
-      case 4: {
-        int const x_122 = i_3;
-        (*(tint_symbol_6)).arr[x_122] = 0;
-        break;
-      }
-      case 3: {
-        int const x_120 = i_3;
-        (*(tint_symbol_6)).arr[x_120] = 1;
-        break;
-      }
-      case 2: {
-        int const x_118 = i_3;
-        (*(tint_symbol_6)).arr[x_118] = 2;
-        break;
-      }
-      case 1: {
-        int const x_116 = i_3;
-        (*(tint_symbol_6)).arr[x_116] = 3;
-        break;
-      }
-      case 0: {
-        int const x_114 = i_3;
-        (*(tint_symbol_6)).arr[x_114] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_134 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
-    {
-      int const x_136 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_142 = j_1;
-    if ((x_142 < 10)) {
-    } else {
-      break;
-    }
-    int const x_145 = j_1;
-    int const x_146 = j_1;
-    int const x_148 = (*(tint_symbol_6)).arr[x_146];
-    (*(tint_symbol_7)).arr[x_145] = x_148;
-    {
-      int const x_150 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  while (true) {
-    int const x_156 = x_92;
-    int const x_157 = x_93;
-    if ((x_156 <= x_157)) {
-    } else {
-      break;
-    }
-    int const x_160 = x_94;
-    x_91 = x_160;
-    while (true) {
-      int const x_165 = x_91;
-      int const x_166 = x_93;
-      if ((x_165 < x_166)) {
-      } else {
-        break;
-      }
-      int const x_169 = x_91;
-      x_90 = x_169;
-      int const x_170 = x_91;
-      int const x_171 = x_92;
-      tint_array_wrapper const x_173 = *(tint_symbol_6);
-      tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-      *(tint_symbol_6) = tint_symbol_2;
-      *(tint_symbol_6) = x_173;
-      x_89 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_170) + as_type<uint>(x_171)))) - as_type<uint>(1)));
-      int const x_175 = x_91;
-      int const x_176 = x_92;
-      int const x_180 = x_93;
-      x_88 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_175) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_176))))))) - as_type<uint>(1))), x_180);
-      int const x_182 = x_90;
-      x_87 = x_182;
-      int const x_183 = x_89;
-      x_86 = x_183;
-      int const x_184 = x_88;
-      x_85 = x_184;
-      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85), tint_symbol_6, tint_symbol_7);
-      {
-        int const x_186 = x_92;
-        int const x_188 = x_91;
-        x_91 = as_type<int>((as_type<uint>(x_188) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_186))))));
-      }
-    }
-    {
-      int const x_190 = x_92;
-      x_92 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_190)));
-    }
-  }
-  float const x_194 = (*(tint_symbol_8)).y;
-  if ((int(x_194) < 30)) {
-    int const x_201 = (*(tint_symbol_6)).arr[0];
-    grey = (0.5f + (float(x_201) / 10.0f));
-  } else {
-    float const x_206 = (*(tint_symbol_8)).y;
-    if ((int(x_206) < 60)) {
-      int const x_213 = (*(tint_symbol_6)).arr[1];
-      grey = (0.5f + (float(x_213) / 10.0f));
-    } else {
-      float const x_218 = (*(tint_symbol_8)).y;
-      if ((int(x_218) < 90)) {
-        int const x_225 = (*(tint_symbol_6)).arr[2];
-        grey = (0.5f + (float(x_225) / 10.0f));
-      } else {
-        float const x_230 = (*(tint_symbol_8)).y;
-        if ((int(x_230) < 120)) {
-          int const x_237 = (*(tint_symbol_6)).arr[3];
-          grey = (0.5f + (float(x_237) / 10.0f));
-        } else {
-          float const x_242 = (*(tint_symbol_8)).y;
-          if ((int(x_242) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_249 = (*(tint_symbol_8)).y;
-            if ((int(x_249) < 180)) {
-              int const x_256 = (*(tint_symbol_6)).arr[5];
-              grey = (0.5f + (float(x_256) / 10.0f));
-            } else {
-              float const x_261 = (*(tint_symbol_8)).y;
-              if ((int(x_261) < 210)) {
-                int const x_268 = (*(tint_symbol_6)).arr[6];
-                grey = (0.5f + (float(x_268) / 10.0f));
-              } else {
-                float const x_273 = (*(tint_symbol_8)).y;
-                if ((int(x_273) < 240)) {
-                  int const x_280 = (*(tint_symbol_6)).arr[7];
-                  grey = (0.5f + (float(x_280) / 10.0f));
-                } else {
-                  float const x_285 = (*(tint_symbol_8)).y;
-                  if ((int(x_285) < 270)) {
-                    int const x_292 = (*(tint_symbol_6)).arr[8];
-                    grey = (0.5f + (float(x_292) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_296 = grey;
-  float3 const x_297 = float3(x_296, x_296, x_296);
-  *(tint_symbol_9) = float4(x_297.x, x_297.y, x_297.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread float4* const tint_symbol_13) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_11, tint_symbol_12, tint_symbol_10, tint_symbol_13);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_13)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_14 = 0.0f;
-  thread tint_array_wrapper tint_symbol_15 = {};
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread float4 tint_symbol_17 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_18, thread tint_array_wrapper* const tint_symbol_19) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_382 = m;
-    int const x_383 = high;
-    if ((x_382 <= x_383)) {
-    } else {
-      break;
-    }
-    int const x_386 = low;
-    i_2 = x_386;
-    while (true) {
-      int const x_391 = i_2;
-      int const x_392 = high;
-      if ((x_391 < x_392)) {
-      } else {
-        break;
-      }
-      int const x_395 = i_2;
-      from_1 = x_395;
-      int const x_396 = i_2;
-      int const x_397 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_396) + as_type<uint>(x_397)))) - as_type<uint>(1)));
-      int const x_400 = i_2;
-      int const x_401 = m;
-      int const x_405 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_400) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_401))))))) - as_type<uint>(1))), x_405);
-      int const x_407 = from_1;
-      param = x_407;
-      int const x_408 = mid_1;
-      param_1 = x_408;
-      int const x_409 = to_1;
-      param_2 = x_409;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_18, tint_symbol_19);
-      {
-        int const x_411 = m;
-        int const x_413 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_413) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_411))))));
-      }
-    }
-    {
-      int const x_415 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_415)));
-    }
-  }
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.spvasm
deleted file mode 100644
index 34a9af0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,733 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 470
-; Schema: 0
-               OpCapability Shader
-        %254 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %main_1 "main_1"
-               OpName %x_85 "x_85"
-               OpName %x_86 "x_86"
-               OpName %x_87 "x_87"
-               OpName %x_88 "x_88"
-               OpName %x_89 "x_89"
-               OpName %x_90 "x_90"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %132 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-        %149 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_9 = OpConstant %int 9
-        %247 = OpConstantComposite %_arr_int_uint_10 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %399 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %56
-         %57 = OpLabel
-         %58 = OpSLessThanEqual %bool %51 %53
-               OpBranch %56
-         %56 = OpLabel
-         %59 = OpPhi %bool %54 %47 %58 %57
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %45
-         %60 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Private_int %data %63
-         %66 = OpLoad %int %65
-         %67 = OpLoad %int %j
-         %68 = OpAccessChain %_ptr_Private_int %data %67
-         %69 = OpLoad %int %68
-         %70 = OpSLessThan %bool %66 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpLoad %int %k
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %k %75
-         %76 = OpLoad %int %i
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %i %77
-         %78 = OpAccessChain %_ptr_Private_int %data %76
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Private_int %temp %74
-               OpStore %80 %79
-               OpBranch %71
-         %73 = OpLabel
-         %81 = OpLoad %int %k
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %k %82
-         %83 = OpLoad %int %j
-         %84 = OpIAdd %int %83 %int_1
-               OpStore %j %84
-         %85 = OpAccessChain %_ptr_Private_int %data %83
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Private_int %temp %81
-               OpStore %87 %86
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-               OpLoopMerge %89 %90 None
-               OpBranch %91
-         %91 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpLoad %int %i
-         %95 = OpLoad %int %mid
-         %97 = OpSLessThan %bool %92 %int_10
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpSLessThanEqual %bool %93 %95
-               OpBranch %98
-         %98 = OpLabel
-        %101 = OpPhi %bool %97 %91 %100 %99
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpBranch %102
-        %104 = OpLabel
-               OpBranch %89
-        %102 = OpLabel
-        %105 = OpLoad %int %k
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %k %106
-        %107 = OpLoad %int %i
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %i %108
-        %109 = OpAccessChain %_ptr_Private_int %data %107
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Private_int %temp %105
-               OpStore %111 %110
-               OpBranch %90
-         %90 = OpLabel
-               OpBranch %88
-         %89 = OpLabel
-        %113 = OpLoad %int %from
-               OpStore %i_1 %113
-               OpBranch %114
-        %114 = OpLabel
-               OpLoopMerge %115 %116 None
-               OpBranch %117
-        %117 = OpLabel
-        %118 = OpLoad %int %i_1
-        %120 = OpLoad %int %to
-        %121 = OpSLessThanEqual %bool %118 %120
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-               OpBranch %122
-        %124 = OpLabel
-               OpBranch %115
-        %122 = OpLabel
-        %125 = OpLoad %int %i_1
-        %126 = OpLoad %int %i_1
-        %127 = OpAccessChain %_ptr_Private_int %temp %126
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Private_int %data %125
-               OpStore %129 %128
-               OpBranch %116
-        %116 = OpLabel
-        %130 = OpLoad %int %i_1
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %i_1 %131
-               OpBranch %114
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %132
-        %134 = OpLabel
-       %x_85 = OpVariable %_ptr_Function_int Function %32
-       %x_86 = OpVariable %_ptr_Function_int Function %32
-       %x_87 = OpVariable %_ptr_Function_int Function %32
-       %x_88 = OpVariable %_ptr_Function_int Function %32
-       %x_89 = OpVariable %_ptr_Function_int Function %32
-       %x_90 = OpVariable %_ptr_Function_int Function %32
-       %x_91 = OpVariable %_ptr_Function_int Function %32
-       %x_92 = OpVariable %_ptr_Function_int Function %32
-       %x_93 = OpVariable %_ptr_Function_int Function %32
-       %x_94 = OpVariable %_ptr_Function_int Function %32
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %149
-        %152 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %153 = OpLoad %float %152
-        %154 = OpConvertFToS %int %153
-               OpStore %i_3 %154
-               OpBranch %155
-        %155 = OpLabel
-               OpLoopMerge %156 %157 None
-               OpBranch %158
-        %158 = OpLabel
-        %159 = OpLoad %int %i_3
-               OpSelectionMerge %160 None
-               OpSwitch %159 %161 9 %162 8 %163 7 %164 6 %165 5 %166 4 %167 3 %168 2 %169 1 %170 0 %171
-        %162 = OpLabel
-        %172 = OpLoad %int %i_3
-        %173 = OpAccessChain %_ptr_Private_int %data %172
-               OpStore %173 %int_n5
-               OpBranch %160
-        %163 = OpLabel
-        %175 = OpLoad %int %i_3
-        %176 = OpAccessChain %_ptr_Private_int %data %175
-               OpStore %176 %int_n4
-               OpBranch %160
-        %164 = OpLabel
-        %178 = OpLoad %int %i_3
-        %179 = OpAccessChain %_ptr_Private_int %data %178
-               OpStore %179 %int_n3
-               OpBranch %160
-        %165 = OpLabel
-        %181 = OpLoad %int %i_3
-        %182 = OpAccessChain %_ptr_Private_int %data %181
-               OpStore %182 %int_n2
-               OpBranch %160
-        %166 = OpLabel
-        %184 = OpLoad %int %i_3
-        %185 = OpAccessChain %_ptr_Private_int %data %184
-               OpStore %185 %int_n1
-               OpBranch %160
-        %167 = OpLabel
-        %187 = OpLoad %int %i_3
-        %188 = OpAccessChain %_ptr_Private_int %data %187
-               OpStore %188 %int_0
-               OpBranch %160
-        %168 = OpLabel
-        %190 = OpLoad %int %i_3
-        %191 = OpAccessChain %_ptr_Private_int %data %190
-               OpStore %191 %int_1
-               OpBranch %160
-        %169 = OpLabel
-        %192 = OpLoad %int %i_3
-        %193 = OpAccessChain %_ptr_Private_int %data %192
-               OpStore %193 %int_2
-               OpBranch %160
-        %170 = OpLabel
-        %195 = OpLoad %int %i_3
-        %196 = OpAccessChain %_ptr_Private_int %data %195
-               OpStore %196 %int_3
-               OpBranch %160
-        %171 = OpLabel
-        %198 = OpLoad %int %i_3
-        %199 = OpAccessChain %_ptr_Private_int %data %198
-               OpStore %199 %int_4
-               OpBranch %160
-        %161 = OpLabel
-               OpBranch %160
-        %160 = OpLabel
-        %201 = OpLoad %int %i_3
-        %202 = OpIAdd %int %201 %int_1
-               OpStore %i_3 %202
-               OpBranch %157
-        %157 = OpLabel
-        %203 = OpLoad %int %i_3
-        %204 = OpSLessThan %bool %203 %int_10
-               OpBranchConditional %204 %155 %156
-        %156 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %205
-        %205 = OpLabel
-               OpLoopMerge %206 %207 None
-               OpBranch %208
-        %208 = OpLabel
-        %209 = OpLoad %int %j_1
-        %210 = OpSLessThan %bool %209 %int_10
-               OpSelectionMerge %211 None
-               OpBranchConditional %210 %212 %213
-        %212 = OpLabel
-               OpBranch %211
-        %213 = OpLabel
-               OpBranch %206
-        %211 = OpLabel
-        %214 = OpLoad %int %j_1
-        %215 = OpLoad %int %j_1
-        %216 = OpAccessChain %_ptr_Private_int %data %215
-        %217 = OpLoad %int %216
-        %218 = OpAccessChain %_ptr_Private_int %temp %214
-               OpStore %218 %217
-               OpBranch %207
-        %207 = OpLabel
-        %219 = OpLoad %int %j_1
-        %220 = OpIAdd %int %219 %int_1
-               OpStore %j_1 %220
-               OpBranch %205
-        %206 = OpLabel
-               OpStore %x_94 %int_0
-               OpStore %x_93 %int_9
-               OpStore %x_92 %int_1
-               OpBranch %222
-        %222 = OpLabel
-               OpLoopMerge %223 %224 None
-               OpBranch %225
-        %225 = OpLabel
-        %226 = OpLoad %int %x_92
-        %227 = OpLoad %int %x_93
-        %228 = OpSLessThanEqual %bool %226 %227
-               OpSelectionMerge %229 None
-               OpBranchConditional %228 %230 %231
-        %230 = OpLabel
-               OpBranch %229
-        %231 = OpLabel
-               OpBranch %223
-        %229 = OpLabel
-        %232 = OpLoad %int %x_94
-               OpStore %x_91 %232
-               OpBranch %233
-        %233 = OpLabel
-               OpLoopMerge %234 %235 None
-               OpBranch %236
-        %236 = OpLabel
-        %237 = OpLoad %int %x_91
-        %238 = OpLoad %int %x_93
-        %239 = OpSLessThan %bool %237 %238
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %242
-        %241 = OpLabel
-               OpBranch %240
-        %242 = OpLabel
-               OpBranch %234
-        %240 = OpLabel
-        %243 = OpLoad %int %x_91
-               OpStore %x_90 %243
-        %244 = OpLoad %int %x_91
-        %245 = OpLoad %int %x_92
-        %246 = OpLoad %_arr_int_uint_10 %data
-               OpStore %data %247
-               OpStore %data %246
-        %248 = OpIAdd %int %244 %245
-        %249 = OpISub %int %248 %int_1
-               OpStore %x_89 %249
-        %250 = OpLoad %int %x_91
-        %251 = OpLoad %int %x_92
-        %252 = OpLoad %int %x_93
-        %255 = OpIMul %int %int_2 %251
-        %256 = OpIAdd %int %250 %255
-        %257 = OpISub %int %256 %int_1
-        %253 = OpExtInst %int %254 SMin %257 %252
-               OpStore %x_88 %253
-        %258 = OpLoad %int %x_90
-               OpStore %x_87 %258
-        %259 = OpLoad %int %x_89
-               OpStore %x_86 %259
-        %260 = OpLoad %int %x_88
-               OpStore %x_85 %260
-        %261 = OpFunctionCall %void %merge_i1_i1_i1_ %x_87 %x_86 %x_85
-               OpBranch %235
-        %235 = OpLabel
-        %265 = OpLoad %int %x_92
-        %266 = OpLoad %int %x_91
-        %267 = OpIMul %int %int_2 %265
-        %268 = OpIAdd %int %266 %267
-               OpStore %x_91 %268
-               OpBranch %233
-        %234 = OpLabel
-               OpBranch %224
-        %224 = OpLabel
-        %269 = OpLoad %int %x_92
-        %270 = OpIMul %int %int_2 %269
-               OpStore %x_92 %270
-               OpBranch %222
-        %223 = OpLabel
-        %273 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %274 = OpLoad %float %273
-        %275 = OpConvertFToS %int %274
-        %277 = OpSLessThan %bool %275 %int_30
-               OpSelectionMerge %278 None
-               OpBranchConditional %277 %279 %280
-        %279 = OpLabel
-        %281 = OpAccessChain %_ptr_Private_int %data %int_0
-        %282 = OpLoad %int %281
-        %284 = OpConvertSToF %float %282
-        %286 = OpFDiv %float %284 %float_10
-        %287 = OpFAdd %float %float_0_5 %286
-               OpStore %grey %287
-               OpBranch %278
-        %280 = OpLabel
-        %288 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %289 = OpLoad %float %288
-        %290 = OpConvertFToS %int %289
-        %292 = OpSLessThan %bool %290 %int_60
-               OpSelectionMerge %293 None
-               OpBranchConditional %292 %294 %295
-        %294 = OpLabel
-        %296 = OpAccessChain %_ptr_Private_int %data %int_1
-        %297 = OpLoad %int %296
-        %298 = OpConvertSToF %float %297
-        %299 = OpFDiv %float %298 %float_10
-        %300 = OpFAdd %float %float_0_5 %299
-               OpStore %grey %300
-               OpBranch %293
-        %295 = OpLabel
-        %301 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %302 = OpLoad %float %301
-        %303 = OpConvertFToS %int %302
-        %305 = OpSLessThan %bool %303 %int_90
-               OpSelectionMerge %306 None
-               OpBranchConditional %305 %307 %308
-        %307 = OpLabel
-        %309 = OpAccessChain %_ptr_Private_int %data %int_2
-        %310 = OpLoad %int %309
-        %311 = OpConvertSToF %float %310
-        %312 = OpFDiv %float %311 %float_10
-        %313 = OpFAdd %float %float_0_5 %312
-               OpStore %grey %313
-               OpBranch %306
-        %308 = OpLabel
-        %314 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %315 = OpLoad %float %314
-        %316 = OpConvertFToS %int %315
-        %318 = OpSLessThan %bool %316 %int_120
-               OpSelectionMerge %319 None
-               OpBranchConditional %318 %320 %321
-        %320 = OpLabel
-        %322 = OpAccessChain %_ptr_Private_int %data %int_3
-        %323 = OpLoad %int %322
-        %324 = OpConvertSToF %float %323
-        %325 = OpFDiv %float %324 %float_10
-        %326 = OpFAdd %float %float_0_5 %325
-               OpStore %grey %326
-               OpBranch %319
-        %321 = OpLabel
-        %327 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %328 = OpLoad %float %327
-        %329 = OpConvertFToS %int %328
-        %331 = OpSLessThan %bool %329 %int_150
-               OpSelectionMerge %332 None
-               OpBranchConditional %331 %333 %334
-        %333 = OpLabel
-               OpKill
-        %334 = OpLabel
-        %335 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %336 = OpLoad %float %335
-        %337 = OpConvertFToS %int %336
-        %339 = OpSLessThan %bool %337 %int_180
-               OpSelectionMerge %340 None
-               OpBranchConditional %339 %341 %342
-        %341 = OpLabel
-        %344 = OpAccessChain %_ptr_Private_int %data %int_5
-        %345 = OpLoad %int %344
-        %346 = OpConvertSToF %float %345
-        %347 = OpFDiv %float %346 %float_10
-        %348 = OpFAdd %float %float_0_5 %347
-               OpStore %grey %348
-               OpBranch %340
-        %342 = OpLabel
-        %349 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %350 = OpLoad %float %349
-        %351 = OpConvertFToS %int %350
-        %353 = OpSLessThan %bool %351 %int_210
-               OpSelectionMerge %354 None
-               OpBranchConditional %353 %355 %356
-        %355 = OpLabel
-        %358 = OpAccessChain %_ptr_Private_int %data %int_6
-        %359 = OpLoad %int %358
-        %360 = OpConvertSToF %float %359
-        %361 = OpFDiv %float %360 %float_10
-        %362 = OpFAdd %float %float_0_5 %361
-               OpStore %grey %362
-               OpBranch %354
-        %356 = OpLabel
-        %363 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %364 = OpLoad %float %363
-        %365 = OpConvertFToS %int %364
-        %367 = OpSLessThan %bool %365 %int_240
-               OpSelectionMerge %368 None
-               OpBranchConditional %367 %369 %370
-        %369 = OpLabel
-        %372 = OpAccessChain %_ptr_Private_int %data %int_7
-        %373 = OpLoad %int %372
-        %374 = OpConvertSToF %float %373
-        %375 = OpFDiv %float %374 %float_10
-        %376 = OpFAdd %float %float_0_5 %375
-               OpStore %grey %376
-               OpBranch %368
-        %370 = OpLabel
-        %377 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %378 = OpLoad %float %377
-        %379 = OpConvertFToS %int %378
-        %381 = OpSLessThan %bool %379 %int_270
-               OpSelectionMerge %382 None
-               OpBranchConditional %381 %383 %384
-        %383 = OpLabel
-        %386 = OpAccessChain %_ptr_Private_int %data %int_8
-        %387 = OpLoad %int %386
-        %388 = OpConvertSToF %float %387
-        %389 = OpFDiv %float %388 %float_10
-        %390 = OpFAdd %float %float_0_5 %389
-               OpStore %grey %390
-               OpBranch %382
-        %384 = OpLabel
-               OpKill
-        %382 = OpLabel
-               OpBranch %368
-        %368 = OpLabel
-               OpBranch %354
-        %354 = OpLabel
-               OpBranch %340
-        %340 = OpLabel
-               OpBranch %332
-        %332 = OpLabel
-               OpBranch %319
-        %319 = OpLabel
-               OpBranch %306
-        %306 = OpLabel
-               OpBranch %293
-        %293 = OpLabel
-               OpBranch %278
-        %278 = OpLabel
-        %391 = OpLoad %float %grey
-        %393 = OpCompositeConstruct %v3float %391 %391 %391
-        %394 = OpCompositeExtract %float %393 0
-        %395 = OpCompositeExtract %float %393 1
-        %396 = OpCompositeExtract %float %393 2
-        %398 = OpCompositeConstruct %v4float %394 %395 %396 %float_1
-               OpStore %x_GLF_color %398
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %399
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %403 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %404 = OpFunctionCall %void %main_1
-        %405 = OpLoad %v4float %x_GLF_color
-        %406 = OpCompositeConstruct %main_out %405
-               OpReturnValue %406
-               OpFunctionEnd
-       %main = OpFunction %void None %132
-        %408 = OpLabel
-        %410 = OpLoad %v4float %gl_FragCoord_param_1
-        %409 = OpFunctionCall %main_out %main_inner %410
-        %411 = OpCompositeExtract %v4float %409 0
-               OpStore %x_GLF_color_1_1 %411
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %132
-        %413 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %424
-        %424 = OpLabel
-               OpLoopMerge %425 %426 None
-               OpBranch %427
-        %427 = OpLabel
-        %428 = OpLoad %int %m
-        %429 = OpLoad %int %high
-        %430 = OpSLessThanEqual %bool %428 %429
-               OpSelectionMerge %431 None
-               OpBranchConditional %430 %432 %433
-        %432 = OpLabel
-               OpBranch %431
-        %433 = OpLabel
-               OpBranch %425
-        %431 = OpLabel
-        %434 = OpLoad %int %low
-               OpStore %i_2 %434
-               OpBranch %435
-        %435 = OpLabel
-               OpLoopMerge %436 %437 None
-               OpBranch %438
-        %438 = OpLabel
-        %439 = OpLoad %int %i_2
-        %440 = OpLoad %int %high
-        %441 = OpSLessThan %bool %439 %440
-               OpSelectionMerge %442 None
-               OpBranchConditional %441 %443 %444
-        %443 = OpLabel
-               OpBranch %442
-        %444 = OpLabel
-               OpBranch %436
-        %442 = OpLabel
-        %445 = OpLoad %int %i_2
-               OpStore %from_1 %445
-        %446 = OpLoad %int %i_2
-        %447 = OpLoad %int %m
-        %448 = OpIAdd %int %446 %447
-        %449 = OpISub %int %448 %int_1
-               OpStore %mid_1 %449
-        %450 = OpLoad %int %i_2
-        %451 = OpLoad %int %m
-        %452 = OpLoad %int %high
-        %454 = OpIMul %int %int_2 %451
-        %455 = OpIAdd %int %450 %454
-        %456 = OpISub %int %455 %int_1
-        %453 = OpExtInst %int %254 SMin %456 %452
-               OpStore %to_1 %453
-        %457 = OpLoad %int %from_1
-               OpStore %param %457
-        %458 = OpLoad %int %mid_1
-               OpStore %param_1 %458
-        %459 = OpLoad %int %to_1
-               OpStore %param_2 %459
-        %460 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %437
-        %437 = OpLabel
-        %464 = OpLoad %int %m
-        %465 = OpLoad %int %i_2
-        %466 = OpIMul %int %int_2 %464
-        %467 = OpIAdd %int %465 %466
-               OpStore %i_2 %467
-               OpBranch %435
-        %436 = OpLabel
-               OpBranch %426
-        %426 = OpLabel
-        %468 = OpLoad %int %m
-        %469 = OpIMul %int %int_2 %468
-               OpStore %m %469
-               OpBranch %424
-        %425 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.wgsl
deleted file mode 100644
index bf16229..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,366 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_303 : i32 = *(from);
-  k = x_303;
-  let x_304 : i32 = *(from);
-  i = x_304;
-  let x_305 : i32 = *(mid);
-  j = (x_305 + 1);
-  loop {
-    let x_311 : i32 = i;
-    let x_312 : i32 = *(mid);
-    let x_314 : i32 = j;
-    let x_315 : i32 = *(to);
-    if (((x_311 <= x_312) && (x_314 <= x_315))) {
-    } else {
-      break;
-    }
-    let x_319 : i32 = i;
-    let x_321 : i32 = data[x_319];
-    let x_322 : i32 = j;
-    let x_324 : i32 = data[x_322];
-    if ((x_321 < x_324)) {
-      let x_329 : i32 = k;
-      k = (x_329 + 1);
-      let x_331 : i32 = i;
-      i = (x_331 + 1);
-      let x_334 : i32 = data[x_331];
-      temp[x_329] = x_334;
-    } else {
-      let x_336 : i32 = k;
-      k = (x_336 + 1);
-      let x_338 : i32 = j;
-      j = (x_338 + 1);
-      let x_341 : i32 = data[x_338];
-      temp[x_336] = x_341;
-    }
-  }
-  loop {
-    let x_347 : i32 = i;
-    let x_349 : i32 = i;
-    let x_350 : i32 = *(mid);
-    if (((x_347 < 10) && (x_349 <= x_350))) {
-    } else {
-      break;
-    }
-    let x_354 : i32 = k;
-    k = (x_354 + 1);
-    let x_356 : i32 = i;
-    i = (x_356 + 1);
-    let x_359 : i32 = data[x_356];
-    temp[x_354] = x_359;
-  }
-  let x_361 : i32 = *(from);
-  i_1 = x_361;
-  loop {
-    let x_366 : i32 = i_1;
-    let x_367 : i32 = *(to);
-    if ((x_366 <= x_367)) {
-    } else {
-      break;
-    }
-    let x_370 : i32 = i_1;
-    let x_371 : i32 = i_1;
-    let x_373 : i32 = temp[x_371];
-    data[x_370] = x_373;
-
-    continuing {
-      let x_375 : i32 = i_1;
-      i_1 = (x_375 + 1);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var x_85 : i32;
-  var x_86 : i32;
-  var x_87 : i32;
-  var x_88 : i32;
-  var x_89 : i32;
-  var x_90 : i32;
-  var x_91 : i32;
-  var x_92 : i32;
-  var x_93 : i32;
-  var x_94 : i32;
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_96 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_96);
-  loop {
-    let x_102 : i32 = i_3;
-    switch(x_102) {
-      case 9: {
-        let x_132 : i32 = i_3;
-        data[x_132] = -5;
-      }
-      case 8: {
-        let x_130 : i32 = i_3;
-        data[x_130] = -4;
-      }
-      case 7: {
-        let x_128 : i32 = i_3;
-        data[x_128] = -3;
-      }
-      case 6: {
-        let x_126 : i32 = i_3;
-        data[x_126] = -2;
-      }
-      case 5: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -1;
-      }
-      case 4: {
-        let x_122 : i32 = i_3;
-        data[x_122] = 0;
-      }
-      case 3: {
-        let x_120 : i32 = i_3;
-        data[x_120] = 1;
-      }
-      case 2: {
-        let x_118 : i32 = i_3;
-        data[x_118] = 2;
-      }
-      case 1: {
-        let x_116 : i32 = i_3;
-        data[x_116] = 3;
-      }
-      case 0: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 4;
-      }
-      default: {
-      }
-    }
-    let x_134 : i32 = i_3;
-    i_3 = (x_134 + 1);
-
-    continuing {
-      let x_136 : i32 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_142 : i32 = j_1;
-    if ((x_142 < 10)) {
-    } else {
-      break;
-    }
-    let x_145 : i32 = j_1;
-    let x_146 : i32 = j_1;
-    let x_148 : i32 = data[x_146];
-    temp[x_145] = x_148;
-
-    continuing {
-      let x_150 : i32 = j_1;
-      j_1 = (x_150 + 1);
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  loop {
-    let x_156 : i32 = x_92;
-    let x_157 : i32 = x_93;
-    if ((x_156 <= x_157)) {
-    } else {
-      break;
-    }
-    let x_160 : i32 = x_94;
-    x_91 = x_160;
-    loop {
-      let x_165 : i32 = x_91;
-      let x_166 : i32 = x_93;
-      if ((x_165 < x_166)) {
-      } else {
-        break;
-      }
-      let x_169 : i32 = x_91;
-      x_90 = x_169;
-      let x_170 : i32 = x_91;
-      let x_171 : i32 = x_92;
-      let x_173 : array<i32, 10> = data;
-      data = array<i32, 10>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-      data = x_173;
-      x_89 = ((x_170 + x_171) - 1);
-      let x_175 : i32 = x_91;
-      let x_176 : i32 = x_92;
-      let x_180 : i32 = x_93;
-      x_88 = min(((x_175 + (2 * x_176)) - 1), x_180);
-      let x_182 : i32 = x_90;
-      x_87 = x_182;
-      let x_183 : i32 = x_89;
-      x_86 = x_183;
-      let x_184 : i32 = x_88;
-      x_85 = x_184;
-      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85));
-
-      continuing {
-        let x_186 : i32 = x_92;
-        let x_188 : i32 = x_91;
-        x_91 = (x_188 + (2 * x_186));
-      }
-    }
-
-    continuing {
-      let x_190 : i32 = x_92;
-      x_92 = (2 * x_190);
-    }
-  }
-  let x_194 : f32 = gl_FragCoord.y;
-  if ((i32(x_194) < 30)) {
-    let x_201 : i32 = data[0];
-    grey = (0.5 + (f32(x_201) / 10.0));
-  } else {
-    let x_206 : f32 = gl_FragCoord.y;
-    if ((i32(x_206) < 60)) {
-      let x_213 : i32 = data[1];
-      grey = (0.5 + (f32(x_213) / 10.0));
-    } else {
-      let x_218 : f32 = gl_FragCoord.y;
-      if ((i32(x_218) < 90)) {
-        let x_225 : i32 = data[2];
-        grey = (0.5 + (f32(x_225) / 10.0));
-      } else {
-        let x_230 : f32 = gl_FragCoord.y;
-        if ((i32(x_230) < 120)) {
-          let x_237 : i32 = data[3];
-          grey = (0.5 + (f32(x_237) / 10.0));
-        } else {
-          let x_242 : f32 = gl_FragCoord.y;
-          if ((i32(x_242) < 150)) {
-            discard;
-          } else {
-            let x_249 : f32 = gl_FragCoord.y;
-            if ((i32(x_249) < 180)) {
-              let x_256 : i32 = data[5];
-              grey = (0.5 + (f32(x_256) / 10.0));
-            } else {
-              let x_261 : f32 = gl_FragCoord.y;
-              if ((i32(x_261) < 210)) {
-                let x_268 : i32 = data[6];
-                grey = (0.5 + (f32(x_268) / 10.0));
-              } else {
-                let x_273 : f32 = gl_FragCoord.y;
-                if ((i32(x_273) < 240)) {
-                  let x_280 : i32 = data[7];
-                  grey = (0.5 + (f32(x_280) / 10.0));
-                } else {
-                  let x_285 : f32 = gl_FragCoord.y;
-                  if ((i32(x_285) < 270)) {
-                    let x_292 : i32 = data[8];
-                    grey = (0.5 + (f32(x_292) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_296 : f32 = grey;
-  let x_297 : vec3<f32> = vec3<f32>(x_296, x_296, x_296);
-  x_GLF_color = vec4<f32>(x_297.x, x_297.y, x_297.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_382 : i32 = m;
-    let x_383 : i32 = high;
-    if ((x_382 <= x_383)) {
-    } else {
-      break;
-    }
-    let x_386 : i32 = low;
-    i_2 = x_386;
-    loop {
-      let x_391 : i32 = i_2;
-      let x_392 : i32 = high;
-      if ((x_391 < x_392)) {
-      } else {
-        break;
-      }
-      let x_395 : i32 = i_2;
-      from_1 = x_395;
-      let x_396 : i32 = i_2;
-      let x_397 : i32 = m;
-      mid_1 = ((x_396 + x_397) - 1);
-      let x_400 : i32 = i_2;
-      let x_401 : i32 = m;
-      let x_405 : i32 = high;
-      to_1 = min(((x_400 + (2 * x_401)) - 1), x_405);
-      let x_407 : i32 = from_1;
-      param = x_407;
-      let x_408 : i32 = mid_1;
-      param_1 = x_408;
-      let x_409 : i32 = to_1;
-      param_2 = x_409;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_411 : i32 = m;
-        let x_413 : i32 = i_2;
-        i_2 = (x_413 + (2 * x_411));
-      }
-    }
-
-    continuing {
-      let x_415 : i32 = m;
-      m = (2 * x_415);
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.hlsl
deleted file mode 100644
index 8b5199a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,293 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_302 = from;
-  k = x_302;
-  const int x_303 = from;
-  i = x_303;
-  const int x_304 = mid;
-  j = (x_304 + 1);
-  while (true) {
-    const int x_310 = i;
-    const int x_311 = mid;
-    const int x_313 = j;
-    const int x_314 = to;
-    if (((x_310 <= x_311) & (x_313 <= x_314))) {
-    } else {
-      break;
-    }
-    const int x_320 = data[i];
-    const int x_323 = data[j];
-    if ((x_320 < x_323)) {
-      const int x_328 = k;
-      k = (x_328 + 1);
-      const int x_330 = i;
-      i = (x_330 + 1);
-      const int x_333 = data[x_330];
-      temp[x_328] = x_333;
-    } else {
-      const int x_335 = k;
-      k = (x_335 + 1);
-      const int x_337 = j;
-      j = (x_337 + 1);
-      const int x_340 = data[x_337];
-      temp[x_335] = x_340;
-    }
-  }
-  while (true) {
-    const int x_346 = i;
-    const int x_348 = i;
-    const int x_349 = mid;
-    if (((x_346 < 10) & (x_348 <= x_349))) {
-    } else {
-      break;
-    }
-    const int x_353 = k;
-    k = (x_353 + 1);
-    const int x_355 = i;
-    i = (x_355 + 1);
-    const int x_358 = data[x_355];
-    temp[x_353] = x_358;
-  }
-  const int x_360 = from;
-  i_1 = x_360;
-  while (true) {
-    const int x_365 = i_1;
-    const int x_366 = to;
-    if ((x_365 <= x_366)) {
-    } else {
-      break;
-    }
-    const int x_369 = i_1;
-    const int x_372 = temp[i_1];
-    data[x_369] = x_372;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int x_85 = 0;
-  int x_86 = 0;
-  int x_87 = 0;
-  int x_88 = 0;
-  int x_89 = 0;
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_96 = asfloat(x_28[0].x);
-  i_3 = int(x_96);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_145 = j_1;
-      const int x_148 = data[j_1];
-      temp[x_145] = x_148;
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  {
-    for(; (x_92 <= x_93); x_92 = (2 * x_92)) {
-      x_91 = x_94;
-      {
-        for(; (x_91 < x_93); x_91 = (x_91 + (2 * x_92))) {
-          x_90 = x_91;
-          x_89 = ((x_91 + x_92) - 1);
-          x_88 = min(((x_91 + (2 * x_92)) - 1), x_93);
-          x_87 = x_90;
-          x_86 = x_89;
-          x_85 = x_88;
-          merge_i1_i1_i1_(x_87, x_86, x_85);
-        }
-      }
-    }
-  }
-  const float x_193 = gl_FragCoord.y;
-  if ((int(x_193) < 30)) {
-    const int x_200 = data[0];
-    grey = (0.5f + (float(x_200) / 10.0f));
-  } else {
-    const float x_205 = gl_FragCoord.y;
-    if ((int(x_205) < 60)) {
-      const int x_212 = data[1];
-      grey = (0.5f + (float(x_212) / 10.0f));
-    } else {
-      const float x_217 = gl_FragCoord.y;
-      if ((int(x_217) < 90)) {
-        const int x_224 = data[2];
-        grey = (0.5f + (float(x_224) / 10.0f));
-      } else {
-        const float x_229 = gl_FragCoord.y;
-        if ((int(x_229) < 120)) {
-          const int x_236 = data[3];
-          grey = (0.5f + (float(x_236) / 10.0f));
-        } else {
-          const float x_241 = gl_FragCoord.y;
-          if ((int(x_241) < 150)) {
-            discard;
-          } else {
-            const float x_248 = gl_FragCoord.y;
-            if ((int(x_248) < 180)) {
-              const int x_255 = data[5];
-              grey = (0.5f + (float(x_255) / 10.0f));
-            } else {
-              const float x_260 = gl_FragCoord.y;
-              if ((int(x_260) < 210)) {
-                const int x_267 = data[6];
-                grey = (0.5f + (float(x_267) / 10.0f));
-              } else {
-                const float x_272 = gl_FragCoord.y;
-                if ((int(x_272) < 240)) {
-                  const int x_279 = data[7];
-                  grey = (0.5f + (float(x_279) / 10.0f));
-                } else {
-                  const float x_284 = gl_FragCoord.y;
-                  if ((int(x_284) < 270)) {
-                    const int x_291 = data[8];
-                    grey = (0.5f + (float(x_291) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_295 = grey;
-  const float3 x_296 = float3(x_295, x_295, x_295);
-  x_GLF_color = float4(x_296.x, x_296.y, x_296.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.msl
deleted file mode 100644
index 72be55c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.msl
+++ /dev/null
@@ -1,375 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_302 = *(from);
-  k = x_302;
-  int const x_303 = *(from);
-  i = x_303;
-  int const x_304 = *(mid);
-  j = as_type<int>((as_type<uint>(x_304) + as_type<uint>(1)));
-  while (true) {
-    int const x_310 = i;
-    int const x_311 = *(mid);
-    int const x_313 = j;
-    int const x_314 = *(to);
-    if (((x_310 <= x_311) & (x_313 <= x_314))) {
-    } else {
-      break;
-    }
-    int const x_318 = i;
-    int const x_320 = (*(tint_symbol_3)).arr[x_318];
-    int const x_321 = j;
-    int const x_323 = (*(tint_symbol_3)).arr[x_321];
-    if ((x_320 < x_323)) {
-      int const x_328 = k;
-      k = as_type<int>((as_type<uint>(x_328) + as_type<uint>(1)));
-      int const x_330 = i;
-      i = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
-      int const x_333 = (*(tint_symbol_3)).arr[x_330];
-      (*(tint_symbol_4)).arr[x_328] = x_333;
-    } else {
-      int const x_335 = k;
-      k = as_type<int>((as_type<uint>(x_335) + as_type<uint>(1)));
-      int const x_337 = j;
-      j = as_type<int>((as_type<uint>(x_337) + as_type<uint>(1)));
-      int const x_340 = (*(tint_symbol_3)).arr[x_337];
-      (*(tint_symbol_4)).arr[x_335] = x_340;
-    }
-  }
-  while (true) {
-    int const x_346 = i;
-    int const x_348 = i;
-    int const x_349 = *(mid);
-    if (((x_346 < 10) & (x_348 <= x_349))) {
-    } else {
-      break;
-    }
-    int const x_353 = k;
-    k = as_type<int>((as_type<uint>(x_353) + as_type<uint>(1)));
-    int const x_355 = i;
-    i = as_type<int>((as_type<uint>(x_355) + as_type<uint>(1)));
-    int const x_358 = (*(tint_symbol_3)).arr[x_355];
-    (*(tint_symbol_4)).arr[x_353] = x_358;
-  }
-  int const x_360 = *(from);
-  i_1 = x_360;
-  while (true) {
-    int const x_365 = i_1;
-    int const x_366 = *(to);
-    if ((x_365 <= x_366)) {
-    } else {
-      break;
-    }
-    int const x_369 = i_1;
-    int const x_370 = i_1;
-    int const x_372 = (*(tint_symbol_4)).arr[x_370];
-    (*(tint_symbol_3)).arr[x_369] = x_372;
-    {
-      int const x_374 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_374) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int x_85 = 0;
-  int x_86 = 0;
-  int x_87 = 0;
-  int x_88 = 0;
-  int x_89 = 0;
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_96 = x_28.injectionSwitch.x;
-  i_3 = int(x_96);
-  while (true) {
-    int const x_102 = i_3;
-    switch(x_102) {
-      case 9: {
-        int const x_132 = i_3;
-        (*(tint_symbol_5)).arr[x_132] = -5;
-        break;
-      }
-      case 8: {
-        int const x_130 = i_3;
-        (*(tint_symbol_5)).arr[x_130] = -4;
-        break;
-      }
-      case 7: {
-        int const x_128 = i_3;
-        (*(tint_symbol_5)).arr[x_128] = -3;
-        break;
-      }
-      case 6: {
-        int const x_126 = i_3;
-        (*(tint_symbol_5)).arr[x_126] = -2;
-        break;
-      }
-      case 5: {
-        int const x_124 = i_3;
-        (*(tint_symbol_5)).arr[x_124] = -1;
-        break;
-      }
-      case 4: {
-        int const x_122 = i_3;
-        (*(tint_symbol_5)).arr[x_122] = 0;
-        break;
-      }
-      case 3: {
-        int const x_120 = i_3;
-        (*(tint_symbol_5)).arr[x_120] = 1;
-        break;
-      }
-      case 2: {
-        int const x_118 = i_3;
-        (*(tint_symbol_5)).arr[x_118] = 2;
-        break;
-      }
-      case 1: {
-        int const x_116 = i_3;
-        (*(tint_symbol_5)).arr[x_116] = 3;
-        break;
-      }
-      case 0: {
-        int const x_114 = i_3;
-        (*(tint_symbol_5)).arr[x_114] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_134 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
-    {
-      int const x_136 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_142 = j_1;
-    if ((x_142 < 10)) {
-    } else {
-      break;
-    }
-    int const x_145 = j_1;
-    int const x_146 = j_1;
-    int const x_148 = (*(tint_symbol_5)).arr[x_146];
-    (*(tint_symbol_6)).arr[x_145] = x_148;
-    {
-      int const x_150 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  while (true) {
-    int const x_156 = x_92;
-    int const x_157 = x_93;
-    if ((x_156 <= x_157)) {
-    } else {
-      break;
-    }
-    int const x_160 = x_94;
-    x_91 = x_160;
-    while (true) {
-      int const x_165 = x_91;
-      int const x_166 = x_93;
-      if ((x_165 < x_166)) {
-      } else {
-        break;
-      }
-      int const x_169 = x_91;
-      x_90 = x_169;
-      int const x_170 = x_91;
-      int const x_171 = x_92;
-      x_89 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_170) + as_type<uint>(x_171)))) - as_type<uint>(1)));
-      int const x_174 = x_91;
-      int const x_175 = x_92;
-      int const x_179 = x_93;
-      x_88 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_174) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_175))))))) - as_type<uint>(1))), x_179);
-      int const x_181 = x_90;
-      x_87 = x_181;
-      int const x_182 = x_89;
-      x_86 = x_182;
-      int const x_183 = x_88;
-      x_85 = x_183;
-      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_185 = x_92;
-        int const x_187 = x_91;
-        x_91 = as_type<int>((as_type<uint>(x_187) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_185))))));
-      }
-    }
-    {
-      int const x_189 = x_92;
-      x_92 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_189)));
-    }
-  }
-  float const x_193 = (*(tint_symbol_7)).y;
-  if ((int(x_193) < 30)) {
-    int const x_200 = (*(tint_symbol_5)).arr[0];
-    grey = (0.5f + (float(x_200) / 10.0f));
-  } else {
-    float const x_205 = (*(tint_symbol_7)).y;
-    if ((int(x_205) < 60)) {
-      int const x_212 = (*(tint_symbol_5)).arr[1];
-      grey = (0.5f + (float(x_212) / 10.0f));
-    } else {
-      float const x_217 = (*(tint_symbol_7)).y;
-      if ((int(x_217) < 90)) {
-        int const x_224 = (*(tint_symbol_5)).arr[2];
-        grey = (0.5f + (float(x_224) / 10.0f));
-      } else {
-        float const x_229 = (*(tint_symbol_7)).y;
-        if ((int(x_229) < 120)) {
-          int const x_236 = (*(tint_symbol_5)).arr[3];
-          grey = (0.5f + (float(x_236) / 10.0f));
-        } else {
-          float const x_241 = (*(tint_symbol_7)).y;
-          if ((int(x_241) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_248 = (*(tint_symbol_7)).y;
-            if ((int(x_248) < 180)) {
-              int const x_255 = (*(tint_symbol_5)).arr[5];
-              grey = (0.5f + (float(x_255) / 10.0f));
-            } else {
-              float const x_260 = (*(tint_symbol_7)).y;
-              if ((int(x_260) < 210)) {
-                int const x_267 = (*(tint_symbol_5)).arr[6];
-                grey = (0.5f + (float(x_267) / 10.0f));
-              } else {
-                float const x_272 = (*(tint_symbol_7)).y;
-                if ((int(x_272) < 240)) {
-                  int const x_279 = (*(tint_symbol_5)).arr[7];
-                  grey = (0.5f + (float(x_279) / 10.0f));
-                } else {
-                  float const x_284 = (*(tint_symbol_7)).y;
-                  if ((int(x_284) < 270)) {
-                    int const x_291 = (*(tint_symbol_5)).arr[8];
-                    grey = (0.5f + (float(x_291) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_295 = grey;
-  float3 const x_296 = float3(x_295, x_295, x_295);
-  *(tint_symbol_8) = float4(x_296.x, x_296.y, x_296.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_10, tint_symbol_11, tint_symbol_9, tint_symbol_12);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_12)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_13 = 0.0f;
-  thread tint_array_wrapper tint_symbol_14 = {};
-  thread tint_array_wrapper tint_symbol_15 = {};
-  thread float4 tint_symbol_16 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_17, thread tint_array_wrapper* const tint_symbol_18) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_381 = m;
-    int const x_382 = high;
-    if ((x_381 <= x_382)) {
-    } else {
-      break;
-    }
-    int const x_385 = low;
-    i_2 = x_385;
-    while (true) {
-      int const x_390 = i_2;
-      int const x_391 = high;
-      if ((x_390 < x_391)) {
-      } else {
-        break;
-      }
-      int const x_394 = i_2;
-      from_1 = x_394;
-      int const x_395 = i_2;
-      int const x_396 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_395) + as_type<uint>(x_396)))) - as_type<uint>(1)));
-      int const x_399 = i_2;
-      int const x_400 = m;
-      int const x_404 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_399) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_400))))))) - as_type<uint>(1))), x_404);
-      int const x_406 = from_1;
-      param = x_406;
-      int const x_407 = mid_1;
-      param_1 = x_407;
-      int const x_408 = to_1;
-      param_2 = x_408;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_17, tint_symbol_18);
-      {
-        int const x_410 = m;
-        int const x_412 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_412) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_410))))));
-      }
-    }
-    {
-      int const x_414 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_414)));
-    }
-  }
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.spvasm
deleted file mode 100644
index cd54ca6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,719 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 464
-; Schema: 0
-               OpCapability Shader
-        %248 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %main_1 "main_1"
-               OpName %x_85 "x_85"
-               OpName %x_86 "x_86"
-               OpName %x_87 "x_87"
-               OpName %x_88 "x_88"
-               OpName %x_89 "x_89"
-               OpName %x_90 "x_90"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %128 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-        %145 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %393 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-         %56 = OpSLessThanEqual %bool %51 %53
-         %57 = OpLogicalAnd %bool %54 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %45
-         %58 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Private_int %data %61
-         %64 = OpLoad %int %63
-         %65 = OpLoad %int %j
-         %66 = OpAccessChain %_ptr_Private_int %data %65
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpLoad %int %k
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %k %73
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-         %76 = OpAccessChain %_ptr_Private_int %data %74
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Private_int %temp %72
-               OpStore %78 %77
-               OpBranch %69
-         %71 = OpLabel
-         %79 = OpLoad %int %k
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %k %80
-         %81 = OpLoad %int %j
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %j %82
-         %83 = OpAccessChain %_ptr_Private_int %data %81
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Private_int %temp %79
-               OpStore %85 %84
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i
-         %91 = OpLoad %int %i
-         %93 = OpLoad %int %mid
-         %95 = OpSLessThan %bool %90 %int_10
-         %96 = OpSLessThanEqual %bool %91 %93
-         %97 = OpLogicalAnd %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-               OpBranch %98
-        %100 = OpLabel
-               OpBranch %87
-         %98 = OpLabel
-        %101 = OpLoad %int %k
-        %102 = OpIAdd %int %101 %int_1
-               OpStore %k %102
-        %103 = OpLoad %int %i
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %i %104
-        %105 = OpAccessChain %_ptr_Private_int %data %103
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Private_int %temp %101
-               OpStore %107 %106
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %86
-         %87 = OpLabel
-        %109 = OpLoad %int %from
-               OpStore %i_1 %109
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %i_1
-        %116 = OpLoad %int %to
-        %117 = OpSLessThanEqual %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-               OpBranch %118
-        %120 = OpLabel
-               OpBranch %111
-        %118 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpLoad %int %i_1
-        %123 = OpAccessChain %_ptr_Private_int %temp %122
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Private_int %data %121
-               OpStore %125 %124
-               OpBranch %112
-        %112 = OpLabel
-        %126 = OpLoad %int %i_1
-        %127 = OpIAdd %int %126 %int_1
-               OpStore %i_1 %127
-               OpBranch %110
-        %111 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %128
-        %130 = OpLabel
-       %x_85 = OpVariable %_ptr_Function_int Function %32
-       %x_86 = OpVariable %_ptr_Function_int Function %32
-       %x_87 = OpVariable %_ptr_Function_int Function %32
-       %x_88 = OpVariable %_ptr_Function_int Function %32
-       %x_89 = OpVariable %_ptr_Function_int Function %32
-       %x_90 = OpVariable %_ptr_Function_int Function %32
-       %x_91 = OpVariable %_ptr_Function_int Function %32
-       %x_92 = OpVariable %_ptr_Function_int Function %32
-       %x_93 = OpVariable %_ptr_Function_int Function %32
-       %x_94 = OpVariable %_ptr_Function_int Function %32
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %145
-        %148 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %149 = OpLoad %float %148
-        %150 = OpConvertFToS %int %149
-               OpStore %i_3 %150
-               OpBranch %151
-        %151 = OpLabel
-               OpLoopMerge %152 %153 None
-               OpBranch %154
-        %154 = OpLabel
-        %155 = OpLoad %int %i_3
-               OpSelectionMerge %156 None
-               OpSwitch %155 %157 9 %158 8 %159 7 %160 6 %161 5 %162 4 %163 3 %164 2 %165 1 %166 0 %167
-        %158 = OpLabel
-        %168 = OpLoad %int %i_3
-        %169 = OpAccessChain %_ptr_Private_int %data %168
-               OpStore %169 %int_n5
-               OpBranch %156
-        %159 = OpLabel
-        %171 = OpLoad %int %i_3
-        %172 = OpAccessChain %_ptr_Private_int %data %171
-               OpStore %172 %int_n4
-               OpBranch %156
-        %160 = OpLabel
-        %174 = OpLoad %int %i_3
-        %175 = OpAccessChain %_ptr_Private_int %data %174
-               OpStore %175 %int_n3
-               OpBranch %156
-        %161 = OpLabel
-        %177 = OpLoad %int %i_3
-        %178 = OpAccessChain %_ptr_Private_int %data %177
-               OpStore %178 %int_n2
-               OpBranch %156
-        %162 = OpLabel
-        %180 = OpLoad %int %i_3
-        %181 = OpAccessChain %_ptr_Private_int %data %180
-               OpStore %181 %int_n1
-               OpBranch %156
-        %163 = OpLabel
-        %183 = OpLoad %int %i_3
-        %184 = OpAccessChain %_ptr_Private_int %data %183
-               OpStore %184 %int_0
-               OpBranch %156
-        %164 = OpLabel
-        %186 = OpLoad %int %i_3
-        %187 = OpAccessChain %_ptr_Private_int %data %186
-               OpStore %187 %int_1
-               OpBranch %156
-        %165 = OpLabel
-        %188 = OpLoad %int %i_3
-        %189 = OpAccessChain %_ptr_Private_int %data %188
-               OpStore %189 %int_2
-               OpBranch %156
-        %166 = OpLabel
-        %191 = OpLoad %int %i_3
-        %192 = OpAccessChain %_ptr_Private_int %data %191
-               OpStore %192 %int_3
-               OpBranch %156
-        %167 = OpLabel
-        %194 = OpLoad %int %i_3
-        %195 = OpAccessChain %_ptr_Private_int %data %194
-               OpStore %195 %int_4
-               OpBranch %156
-        %157 = OpLabel
-               OpBranch %156
-        %156 = OpLabel
-        %197 = OpLoad %int %i_3
-        %198 = OpIAdd %int %197 %int_1
-               OpStore %i_3 %198
-               OpBranch %153
-        %153 = OpLabel
-        %199 = OpLoad %int %i_3
-        %200 = OpSLessThan %bool %199 %int_10
-               OpBranchConditional %200 %151 %152
-        %152 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %201
-        %201 = OpLabel
-               OpLoopMerge %202 %203 None
-               OpBranch %204
-        %204 = OpLabel
-        %205 = OpLoad %int %j_1
-        %206 = OpSLessThan %bool %205 %int_10
-               OpSelectionMerge %207 None
-               OpBranchConditional %206 %208 %209
-        %208 = OpLabel
-               OpBranch %207
-        %209 = OpLabel
-               OpBranch %202
-        %207 = OpLabel
-        %210 = OpLoad %int %j_1
-        %211 = OpLoad %int %j_1
-        %212 = OpAccessChain %_ptr_Private_int %data %211
-        %213 = OpLoad %int %212
-        %214 = OpAccessChain %_ptr_Private_int %temp %210
-               OpStore %214 %213
-               OpBranch %203
-        %203 = OpLabel
-        %215 = OpLoad %int %j_1
-        %216 = OpIAdd %int %215 %int_1
-               OpStore %j_1 %216
-               OpBranch %201
-        %202 = OpLabel
-               OpStore %x_94 %int_0
-               OpStore %x_93 %int_9
-               OpStore %x_92 %int_1
-               OpBranch %218
-        %218 = OpLabel
-               OpLoopMerge %219 %220 None
-               OpBranch %221
-        %221 = OpLabel
-        %222 = OpLoad %int %x_92
-        %223 = OpLoad %int %x_93
-        %224 = OpSLessThanEqual %bool %222 %223
-               OpSelectionMerge %225 None
-               OpBranchConditional %224 %226 %227
-        %226 = OpLabel
-               OpBranch %225
-        %227 = OpLabel
-               OpBranch %219
-        %225 = OpLabel
-        %228 = OpLoad %int %x_94
-               OpStore %x_91 %228
-               OpBranch %229
-        %229 = OpLabel
-               OpLoopMerge %230 %231 None
-               OpBranch %232
-        %232 = OpLabel
-        %233 = OpLoad %int %x_91
-        %234 = OpLoad %int %x_93
-        %235 = OpSLessThan %bool %233 %234
-               OpSelectionMerge %236 None
-               OpBranchConditional %235 %237 %238
-        %237 = OpLabel
-               OpBranch %236
-        %238 = OpLabel
-               OpBranch %230
-        %236 = OpLabel
-        %239 = OpLoad %int %x_91
-               OpStore %x_90 %239
-        %240 = OpLoad %int %x_91
-        %241 = OpLoad %int %x_92
-        %242 = OpIAdd %int %240 %241
-        %243 = OpISub %int %242 %int_1
-               OpStore %x_89 %243
-        %244 = OpLoad %int %x_91
-        %245 = OpLoad %int %x_92
-        %246 = OpLoad %int %x_93
-        %249 = OpIMul %int %int_2 %245
-        %250 = OpIAdd %int %244 %249
-        %251 = OpISub %int %250 %int_1
-        %247 = OpExtInst %int %248 SMin %251 %246
-               OpStore %x_88 %247
-        %252 = OpLoad %int %x_90
-               OpStore %x_87 %252
-        %253 = OpLoad %int %x_89
-               OpStore %x_86 %253
-        %254 = OpLoad %int %x_88
-               OpStore %x_85 %254
-        %255 = OpFunctionCall %void %merge_i1_i1_i1_ %x_87 %x_86 %x_85
-               OpBranch %231
-        %231 = OpLabel
-        %259 = OpLoad %int %x_92
-        %260 = OpLoad %int %x_91
-        %261 = OpIMul %int %int_2 %259
-        %262 = OpIAdd %int %260 %261
-               OpStore %x_91 %262
-               OpBranch %229
-        %230 = OpLabel
-               OpBranch %220
-        %220 = OpLabel
-        %263 = OpLoad %int %x_92
-        %264 = OpIMul %int %int_2 %263
-               OpStore %x_92 %264
-               OpBranch %218
-        %219 = OpLabel
-        %267 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %268 = OpLoad %float %267
-        %269 = OpConvertFToS %int %268
-        %271 = OpSLessThan %bool %269 %int_30
-               OpSelectionMerge %272 None
-               OpBranchConditional %271 %273 %274
-        %273 = OpLabel
-        %275 = OpAccessChain %_ptr_Private_int %data %int_0
-        %276 = OpLoad %int %275
-        %278 = OpConvertSToF %float %276
-        %280 = OpFDiv %float %278 %float_10
-        %281 = OpFAdd %float %float_0_5 %280
-               OpStore %grey %281
-               OpBranch %272
-        %274 = OpLabel
-        %282 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %283 = OpLoad %float %282
-        %284 = OpConvertFToS %int %283
-        %286 = OpSLessThan %bool %284 %int_60
-               OpSelectionMerge %287 None
-               OpBranchConditional %286 %288 %289
-        %288 = OpLabel
-        %290 = OpAccessChain %_ptr_Private_int %data %int_1
-        %291 = OpLoad %int %290
-        %292 = OpConvertSToF %float %291
-        %293 = OpFDiv %float %292 %float_10
-        %294 = OpFAdd %float %float_0_5 %293
-               OpStore %grey %294
-               OpBranch %287
-        %289 = OpLabel
-        %295 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %296 = OpLoad %float %295
-        %297 = OpConvertFToS %int %296
-        %299 = OpSLessThan %bool %297 %int_90
-               OpSelectionMerge %300 None
-               OpBranchConditional %299 %301 %302
-        %301 = OpLabel
-        %303 = OpAccessChain %_ptr_Private_int %data %int_2
-        %304 = OpLoad %int %303
-        %305 = OpConvertSToF %float %304
-        %306 = OpFDiv %float %305 %float_10
-        %307 = OpFAdd %float %float_0_5 %306
-               OpStore %grey %307
-               OpBranch %300
-        %302 = OpLabel
-        %308 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %309 = OpLoad %float %308
-        %310 = OpConvertFToS %int %309
-        %312 = OpSLessThan %bool %310 %int_120
-               OpSelectionMerge %313 None
-               OpBranchConditional %312 %314 %315
-        %314 = OpLabel
-        %316 = OpAccessChain %_ptr_Private_int %data %int_3
-        %317 = OpLoad %int %316
-        %318 = OpConvertSToF %float %317
-        %319 = OpFDiv %float %318 %float_10
-        %320 = OpFAdd %float %float_0_5 %319
-               OpStore %grey %320
-               OpBranch %313
-        %315 = OpLabel
-        %321 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %322 = OpLoad %float %321
-        %323 = OpConvertFToS %int %322
-        %325 = OpSLessThan %bool %323 %int_150
-               OpSelectionMerge %326 None
-               OpBranchConditional %325 %327 %328
-        %327 = OpLabel
-               OpKill
-        %328 = OpLabel
-        %329 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %330 = OpLoad %float %329
-        %331 = OpConvertFToS %int %330
-        %333 = OpSLessThan %bool %331 %int_180
-               OpSelectionMerge %334 None
-               OpBranchConditional %333 %335 %336
-        %335 = OpLabel
-        %338 = OpAccessChain %_ptr_Private_int %data %int_5
-        %339 = OpLoad %int %338
-        %340 = OpConvertSToF %float %339
-        %341 = OpFDiv %float %340 %float_10
-        %342 = OpFAdd %float %float_0_5 %341
-               OpStore %grey %342
-               OpBranch %334
-        %336 = OpLabel
-        %343 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %344 = OpLoad %float %343
-        %345 = OpConvertFToS %int %344
-        %347 = OpSLessThan %bool %345 %int_210
-               OpSelectionMerge %348 None
-               OpBranchConditional %347 %349 %350
-        %349 = OpLabel
-        %352 = OpAccessChain %_ptr_Private_int %data %int_6
-        %353 = OpLoad %int %352
-        %354 = OpConvertSToF %float %353
-        %355 = OpFDiv %float %354 %float_10
-        %356 = OpFAdd %float %float_0_5 %355
-               OpStore %grey %356
-               OpBranch %348
-        %350 = OpLabel
-        %357 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %358 = OpLoad %float %357
-        %359 = OpConvertFToS %int %358
-        %361 = OpSLessThan %bool %359 %int_240
-               OpSelectionMerge %362 None
-               OpBranchConditional %361 %363 %364
-        %363 = OpLabel
-        %366 = OpAccessChain %_ptr_Private_int %data %int_7
-        %367 = OpLoad %int %366
-        %368 = OpConvertSToF %float %367
-        %369 = OpFDiv %float %368 %float_10
-        %370 = OpFAdd %float %float_0_5 %369
-               OpStore %grey %370
-               OpBranch %362
-        %364 = OpLabel
-        %371 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %372 = OpLoad %float %371
-        %373 = OpConvertFToS %int %372
-        %375 = OpSLessThan %bool %373 %int_270
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %378
-        %377 = OpLabel
-        %380 = OpAccessChain %_ptr_Private_int %data %int_8
-        %381 = OpLoad %int %380
-        %382 = OpConvertSToF %float %381
-        %383 = OpFDiv %float %382 %float_10
-        %384 = OpFAdd %float %float_0_5 %383
-               OpStore %grey %384
-               OpBranch %376
-        %378 = OpLabel
-               OpKill
-        %376 = OpLabel
-               OpBranch %362
-        %362 = OpLabel
-               OpBranch %348
-        %348 = OpLabel
-               OpBranch %334
-        %334 = OpLabel
-               OpBranch %326
-        %326 = OpLabel
-               OpBranch %313
-        %313 = OpLabel
-               OpBranch %300
-        %300 = OpLabel
-               OpBranch %287
-        %287 = OpLabel
-               OpBranch %272
-        %272 = OpLabel
-        %385 = OpLoad %float %grey
-        %387 = OpCompositeConstruct %v3float %385 %385 %385
-        %388 = OpCompositeExtract %float %387 0
-        %389 = OpCompositeExtract %float %387 1
-        %390 = OpCompositeExtract %float %387 2
-        %392 = OpCompositeConstruct %v4float %388 %389 %390 %float_1
-               OpStore %x_GLF_color %392
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %393
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %397 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %398 = OpFunctionCall %void %main_1
-        %399 = OpLoad %v4float %x_GLF_color
-        %400 = OpCompositeConstruct %main_out %399
-               OpReturnValue %400
-               OpFunctionEnd
-       %main = OpFunction %void None %128
-        %402 = OpLabel
-        %404 = OpLoad %v4float %gl_FragCoord_param_1
-        %403 = OpFunctionCall %main_out %main_inner %404
-        %405 = OpCompositeExtract %v4float %403 0
-               OpStore %x_GLF_color_1_1 %405
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %128
-        %407 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %418
-        %418 = OpLabel
-               OpLoopMerge %419 %420 None
-               OpBranch %421
-        %421 = OpLabel
-        %422 = OpLoad %int %m
-        %423 = OpLoad %int %high
-        %424 = OpSLessThanEqual %bool %422 %423
-               OpSelectionMerge %425 None
-               OpBranchConditional %424 %426 %427
-        %426 = OpLabel
-               OpBranch %425
-        %427 = OpLabel
-               OpBranch %419
-        %425 = OpLabel
-        %428 = OpLoad %int %low
-               OpStore %i_2 %428
-               OpBranch %429
-        %429 = OpLabel
-               OpLoopMerge %430 %431 None
-               OpBranch %432
-        %432 = OpLabel
-        %433 = OpLoad %int %i_2
-        %434 = OpLoad %int %high
-        %435 = OpSLessThan %bool %433 %434
-               OpSelectionMerge %436 None
-               OpBranchConditional %435 %437 %438
-        %437 = OpLabel
-               OpBranch %436
-        %438 = OpLabel
-               OpBranch %430
-        %436 = OpLabel
-        %439 = OpLoad %int %i_2
-               OpStore %from_1 %439
-        %440 = OpLoad %int %i_2
-        %441 = OpLoad %int %m
-        %442 = OpIAdd %int %440 %441
-        %443 = OpISub %int %442 %int_1
-               OpStore %mid_1 %443
-        %444 = OpLoad %int %i_2
-        %445 = OpLoad %int %m
-        %446 = OpLoad %int %high
-        %448 = OpIMul %int %int_2 %445
-        %449 = OpIAdd %int %444 %448
-        %450 = OpISub %int %449 %int_1
-        %447 = OpExtInst %int %248 SMin %450 %446
-               OpStore %to_1 %447
-        %451 = OpLoad %int %from_1
-               OpStore %param %451
-        %452 = OpLoad %int %mid_1
-               OpStore %param_1 %452
-        %453 = OpLoad %int %to_1
-               OpStore %param_2 %453
-        %454 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %431
-        %431 = OpLabel
-        %458 = OpLoad %int %m
-        %459 = OpLoad %int %i_2
-        %460 = OpIMul %int %int_2 %458
-        %461 = OpIAdd %int %459 %460
-               OpStore %i_2 %461
-               OpBranch %429
-        %430 = OpLabel
-               OpBranch %420
-        %420 = OpLabel
-        %462 = OpLoad %int %m
-        %463 = OpIMul %int %int_2 %462
-               OpStore %m %463
-               OpBranch %418
-        %419 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.wgsl
deleted file mode 100644
index f9f5006..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,363 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_302 : i32 = *(from);
-  k = x_302;
-  let x_303 : i32 = *(from);
-  i = x_303;
-  let x_304 : i32 = *(mid);
-  j = (x_304 + 1);
-  loop {
-    let x_310 : i32 = i;
-    let x_311 : i32 = *(mid);
-    let x_313 : i32 = j;
-    let x_314 : i32 = *(to);
-    if (((x_310 <= x_311) & (x_313 <= x_314))) {
-    } else {
-      break;
-    }
-    let x_318 : i32 = i;
-    let x_320 : i32 = data[x_318];
-    let x_321 : i32 = j;
-    let x_323 : i32 = data[x_321];
-    if ((x_320 < x_323)) {
-      let x_328 : i32 = k;
-      k = (x_328 + 1);
-      let x_330 : i32 = i;
-      i = (x_330 + 1);
-      let x_333 : i32 = data[x_330];
-      temp[x_328] = x_333;
-    } else {
-      let x_335 : i32 = k;
-      k = (x_335 + 1);
-      let x_337 : i32 = j;
-      j = (x_337 + 1);
-      let x_340 : i32 = data[x_337];
-      temp[x_335] = x_340;
-    }
-  }
-  loop {
-    let x_346 : i32 = i;
-    let x_348 : i32 = i;
-    let x_349 : i32 = *(mid);
-    if (((x_346 < 10) & (x_348 <= x_349))) {
-    } else {
-      break;
-    }
-    let x_353 : i32 = k;
-    k = (x_353 + 1);
-    let x_355 : i32 = i;
-    i = (x_355 + 1);
-    let x_358 : i32 = data[x_355];
-    temp[x_353] = x_358;
-  }
-  let x_360 : i32 = *(from);
-  i_1 = x_360;
-  loop {
-    let x_365 : i32 = i_1;
-    let x_366 : i32 = *(to);
-    if ((x_365 <= x_366)) {
-    } else {
-      break;
-    }
-    let x_369 : i32 = i_1;
-    let x_370 : i32 = i_1;
-    let x_372 : i32 = temp[x_370];
-    data[x_369] = x_372;
-
-    continuing {
-      let x_374 : i32 = i_1;
-      i_1 = (x_374 + 1);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var x_85 : i32;
-  var x_86 : i32;
-  var x_87 : i32;
-  var x_88 : i32;
-  var x_89 : i32;
-  var x_90 : i32;
-  var x_91 : i32;
-  var x_92 : i32;
-  var x_93 : i32;
-  var x_94 : i32;
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_96 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_96);
-  loop {
-    let x_102 : i32 = i_3;
-    switch(x_102) {
-      case 9: {
-        let x_132 : i32 = i_3;
-        data[x_132] = -5;
-      }
-      case 8: {
-        let x_130 : i32 = i_3;
-        data[x_130] = -4;
-      }
-      case 7: {
-        let x_128 : i32 = i_3;
-        data[x_128] = -3;
-      }
-      case 6: {
-        let x_126 : i32 = i_3;
-        data[x_126] = -2;
-      }
-      case 5: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -1;
-      }
-      case 4: {
-        let x_122 : i32 = i_3;
-        data[x_122] = 0;
-      }
-      case 3: {
-        let x_120 : i32 = i_3;
-        data[x_120] = 1;
-      }
-      case 2: {
-        let x_118 : i32 = i_3;
-        data[x_118] = 2;
-      }
-      case 1: {
-        let x_116 : i32 = i_3;
-        data[x_116] = 3;
-      }
-      case 0: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 4;
-      }
-      default: {
-      }
-    }
-    let x_134 : i32 = i_3;
-    i_3 = (x_134 + 1);
-
-    continuing {
-      let x_136 : i32 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_142 : i32 = j_1;
-    if ((x_142 < 10)) {
-    } else {
-      break;
-    }
-    let x_145 : i32 = j_1;
-    let x_146 : i32 = j_1;
-    let x_148 : i32 = data[x_146];
-    temp[x_145] = x_148;
-
-    continuing {
-      let x_150 : i32 = j_1;
-      j_1 = (x_150 + 1);
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  loop {
-    let x_156 : i32 = x_92;
-    let x_157 : i32 = x_93;
-    if ((x_156 <= x_157)) {
-    } else {
-      break;
-    }
-    let x_160 : i32 = x_94;
-    x_91 = x_160;
-    loop {
-      let x_165 : i32 = x_91;
-      let x_166 : i32 = x_93;
-      if ((x_165 < x_166)) {
-      } else {
-        break;
-      }
-      let x_169 : i32 = x_91;
-      x_90 = x_169;
-      let x_170 : i32 = x_91;
-      let x_171 : i32 = x_92;
-      x_89 = ((x_170 + x_171) - 1);
-      let x_174 : i32 = x_91;
-      let x_175 : i32 = x_92;
-      let x_179 : i32 = x_93;
-      x_88 = min(((x_174 + (2 * x_175)) - 1), x_179);
-      let x_181 : i32 = x_90;
-      x_87 = x_181;
-      let x_182 : i32 = x_89;
-      x_86 = x_182;
-      let x_183 : i32 = x_88;
-      x_85 = x_183;
-      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85));
-
-      continuing {
-        let x_185 : i32 = x_92;
-        let x_187 : i32 = x_91;
-        x_91 = (x_187 + (2 * x_185));
-      }
-    }
-
-    continuing {
-      let x_189 : i32 = x_92;
-      x_92 = (2 * x_189);
-    }
-  }
-  let x_193 : f32 = gl_FragCoord.y;
-  if ((i32(x_193) < 30)) {
-    let x_200 : i32 = data[0];
-    grey = (0.5 + (f32(x_200) / 10.0));
-  } else {
-    let x_205 : f32 = gl_FragCoord.y;
-    if ((i32(x_205) < 60)) {
-      let x_212 : i32 = data[1];
-      grey = (0.5 + (f32(x_212) / 10.0));
-    } else {
-      let x_217 : f32 = gl_FragCoord.y;
-      if ((i32(x_217) < 90)) {
-        let x_224 : i32 = data[2];
-        grey = (0.5 + (f32(x_224) / 10.0));
-      } else {
-        let x_229 : f32 = gl_FragCoord.y;
-        if ((i32(x_229) < 120)) {
-          let x_236 : i32 = data[3];
-          grey = (0.5 + (f32(x_236) / 10.0));
-        } else {
-          let x_241 : f32 = gl_FragCoord.y;
-          if ((i32(x_241) < 150)) {
-            discard;
-          } else {
-            let x_248 : f32 = gl_FragCoord.y;
-            if ((i32(x_248) < 180)) {
-              let x_255 : i32 = data[5];
-              grey = (0.5 + (f32(x_255) / 10.0));
-            } else {
-              let x_260 : f32 = gl_FragCoord.y;
-              if ((i32(x_260) < 210)) {
-                let x_267 : i32 = data[6];
-                grey = (0.5 + (f32(x_267) / 10.0));
-              } else {
-                let x_272 : f32 = gl_FragCoord.y;
-                if ((i32(x_272) < 240)) {
-                  let x_279 : i32 = data[7];
-                  grey = (0.5 + (f32(x_279) / 10.0));
-                } else {
-                  let x_284 : f32 = gl_FragCoord.y;
-                  if ((i32(x_284) < 270)) {
-                    let x_291 : i32 = data[8];
-                    grey = (0.5 + (f32(x_291) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_295 : f32 = grey;
-  let x_296 : vec3<f32> = vec3<f32>(x_295, x_295, x_295);
-  x_GLF_color = vec4<f32>(x_296.x, x_296.y, x_296.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_381 : i32 = m;
-    let x_382 : i32 = high;
-    if ((x_381 <= x_382)) {
-    } else {
-      break;
-    }
-    let x_385 : i32 = low;
-    i_2 = x_385;
-    loop {
-      let x_390 : i32 = i_2;
-      let x_391 : i32 = high;
-      if ((x_390 < x_391)) {
-      } else {
-        break;
-      }
-      let x_394 : i32 = i_2;
-      from_1 = x_394;
-      let x_395 : i32 = i_2;
-      let x_396 : i32 = m;
-      mid_1 = ((x_395 + x_396) - 1);
-      let x_399 : i32 = i_2;
-      let x_400 : i32 = m;
-      let x_404 : i32 = high;
-      to_1 = min(((x_399 + (2 * x_400)) - 1), x_404);
-      let x_406 : i32 = from_1;
-      param = x_406;
-      let x_407 : i32 = mid_1;
-      param_1 = x_407;
-      let x_408 : i32 = to_1;
-      param_2 = x_408;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_410 : i32 = m;
-        let x_412 : i32 = i_2;
-        i_2 = (x_412 + (2 * x_410));
-      }
-    }
-
-    continuing {
-      let x_414 : i32 = m;
-      m = (2 * x_414);
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.hlsl
deleted file mode 100644
index a6b3a4a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,301 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_302 = from;
-  k = x_302;
-  const int x_303 = from;
-  i = x_303;
-  const int x_304 = mid;
-  j = (x_304 + 1);
-  while (true) {
-    const int x_310 = i;
-    const int x_311 = mid;
-    const int x_313 = j;
-    const int x_314 = to;
-    bool tint_tmp = (x_310 <= x_311);
-    if (tint_tmp) {
-      tint_tmp = (x_313 <= x_314);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_320 = data[i];
-    const int x_323 = data[j];
-    if ((x_320 < x_323)) {
-      const int x_328 = k;
-      k = (x_328 + 1);
-      const int x_330 = i;
-      i = (x_330 + 1);
-      const int x_333 = data[x_330];
-      temp[x_328] = x_333;
-    } else {
-      const int x_335 = k;
-      k = (x_335 + 1);
-      const int x_337 = j;
-      j = (x_337 + 1);
-      const int x_340 = data[x_337];
-      temp[x_335] = x_340;
-    }
-  }
-  while (true) {
-    const int x_346 = i;
-    const int x_348 = i;
-    const int x_349 = mid;
-    bool tint_tmp_1 = (x_346 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_348 <= x_349);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_353 = k;
-    k = (x_353 + 1);
-    const int x_355 = i;
-    i = (x_355 + 1);
-    const int x_358 = data[x_355];
-    temp[x_353] = x_358;
-  }
-  const int x_360 = from;
-  i_1 = x_360;
-  while (true) {
-    const int x_365 = i_1;
-    const int x_366 = to;
-    if ((x_365 <= x_366)) {
-    } else {
-      break;
-    }
-    const int x_369 = i_1;
-    const int x_372 = temp[i_1];
-    data[x_369] = x_372;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int x_85 = 0;
-  int x_86 = 0;
-  int x_87 = 0;
-  int x_88 = 0;
-  int x_89 = 0;
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_96 = asfloat(x_28[0].x);
-  i_3 = int(x_96);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_145 = j_1;
-      const int x_148 = data[j_1];
-      temp[x_145] = x_148;
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  {
-    for(; (x_92 <= x_93); x_92 = (2 * x_92)) {
-      x_91 = x_94;
-      {
-        for(; (x_91 < x_93); x_91 = (x_91 + (2 * x_92))) {
-          x_90 = x_91;
-          x_89 = ((x_91 + x_92) - 1);
-          x_88 = min(((x_91 + (2 * x_92)) - 1), x_93);
-          x_87 = x_90;
-          x_86 = x_89;
-          x_85 = x_88;
-          merge_i1_i1_i1_(x_87, x_86, x_85);
-        }
-      }
-    }
-  }
-  const float x_193 = gl_FragCoord.y;
-  if ((int(x_193) < 30)) {
-    const int x_200 = data[0];
-    grey = (0.5f + (float(x_200) / 10.0f));
-  } else {
-    const float x_205 = gl_FragCoord.y;
-    if ((int(x_205) < 60)) {
-      const int x_212 = data[1];
-      grey = (0.5f + (float(x_212) / 10.0f));
-    } else {
-      const float x_217 = gl_FragCoord.y;
-      if ((int(x_217) < 90)) {
-        const int x_224 = data[2];
-        grey = (0.5f + (float(x_224) / 10.0f));
-      } else {
-        const float x_229 = gl_FragCoord.y;
-        if ((int(x_229) < 120)) {
-          const int x_236 = data[3];
-          grey = (0.5f + (float(x_236) / 10.0f));
-        } else {
-          const float x_241 = gl_FragCoord.y;
-          if ((int(x_241) < 150)) {
-            discard;
-          } else {
-            const float x_248 = gl_FragCoord.y;
-            if ((int(x_248) < 180)) {
-              const int x_255 = data[5];
-              grey = (0.5f + (float(x_255) / 10.0f));
-            } else {
-              const float x_260 = gl_FragCoord.y;
-              if ((int(x_260) < 210)) {
-                const int x_267 = data[6];
-                grey = (0.5f + (float(x_267) / 10.0f));
-              } else {
-                const float x_272 = gl_FragCoord.y;
-                if ((int(x_272) < 240)) {
-                  const int x_279 = data[7];
-                  grey = (0.5f + (float(x_279) / 10.0f));
-                } else {
-                  const float x_284 = gl_FragCoord.y;
-                  if ((int(x_284) < 270)) {
-                    const int x_291 = data[8];
-                    grey = (0.5f + (float(x_291) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_295 = grey;
-  const float3 x_296 = float3(x_295, x_295, x_295);
-  x_GLF_color = float4(x_296.x, x_296.y, x_296.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.msl
deleted file mode 100644
index c52ca68..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.msl
+++ /dev/null
@@ -1,375 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_302 = *(from);
-  k = x_302;
-  int const x_303 = *(from);
-  i = x_303;
-  int const x_304 = *(mid);
-  j = as_type<int>((as_type<uint>(x_304) + as_type<uint>(1)));
-  while (true) {
-    int const x_310 = i;
-    int const x_311 = *(mid);
-    int const x_313 = j;
-    int const x_314 = *(to);
-    if (((x_310 <= x_311) && (x_313 <= x_314))) {
-    } else {
-      break;
-    }
-    int const x_318 = i;
-    int const x_320 = (*(tint_symbol_3)).arr[x_318];
-    int const x_321 = j;
-    int const x_323 = (*(tint_symbol_3)).arr[x_321];
-    if ((x_320 < x_323)) {
-      int const x_328 = k;
-      k = as_type<int>((as_type<uint>(x_328) + as_type<uint>(1)));
-      int const x_330 = i;
-      i = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
-      int const x_333 = (*(tint_symbol_3)).arr[x_330];
-      (*(tint_symbol_4)).arr[x_328] = x_333;
-    } else {
-      int const x_335 = k;
-      k = as_type<int>((as_type<uint>(x_335) + as_type<uint>(1)));
-      int const x_337 = j;
-      j = as_type<int>((as_type<uint>(x_337) + as_type<uint>(1)));
-      int const x_340 = (*(tint_symbol_3)).arr[x_337];
-      (*(tint_symbol_4)).arr[x_335] = x_340;
-    }
-  }
-  while (true) {
-    int const x_346 = i;
-    int const x_348 = i;
-    int const x_349 = *(mid);
-    if (((x_346 < 10) && (x_348 <= x_349))) {
-    } else {
-      break;
-    }
-    int const x_353 = k;
-    k = as_type<int>((as_type<uint>(x_353) + as_type<uint>(1)));
-    int const x_355 = i;
-    i = as_type<int>((as_type<uint>(x_355) + as_type<uint>(1)));
-    int const x_358 = (*(tint_symbol_3)).arr[x_355];
-    (*(tint_symbol_4)).arr[x_353] = x_358;
-  }
-  int const x_360 = *(from);
-  i_1 = x_360;
-  while (true) {
-    int const x_365 = i_1;
-    int const x_366 = *(to);
-    if ((x_365 <= x_366)) {
-    } else {
-      break;
-    }
-    int const x_369 = i_1;
-    int const x_370 = i_1;
-    int const x_372 = (*(tint_symbol_4)).arr[x_370];
-    (*(tint_symbol_3)).arr[x_369] = x_372;
-    {
-      int const x_374 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_374) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int x_85 = 0;
-  int x_86 = 0;
-  int x_87 = 0;
-  int x_88 = 0;
-  int x_89 = 0;
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_96 = x_28.injectionSwitch.x;
-  i_3 = int(x_96);
-  while (true) {
-    int const x_102 = i_3;
-    switch(x_102) {
-      case 9: {
-        int const x_132 = i_3;
-        (*(tint_symbol_5)).arr[x_132] = -5;
-        break;
-      }
-      case 8: {
-        int const x_130 = i_3;
-        (*(tint_symbol_5)).arr[x_130] = -4;
-        break;
-      }
-      case 7: {
-        int const x_128 = i_3;
-        (*(tint_symbol_5)).arr[x_128] = -3;
-        break;
-      }
-      case 6: {
-        int const x_126 = i_3;
-        (*(tint_symbol_5)).arr[x_126] = -2;
-        break;
-      }
-      case 5: {
-        int const x_124 = i_3;
-        (*(tint_symbol_5)).arr[x_124] = -1;
-        break;
-      }
-      case 4: {
-        int const x_122 = i_3;
-        (*(tint_symbol_5)).arr[x_122] = 0;
-        break;
-      }
-      case 3: {
-        int const x_120 = i_3;
-        (*(tint_symbol_5)).arr[x_120] = 1;
-        break;
-      }
-      case 2: {
-        int const x_118 = i_3;
-        (*(tint_symbol_5)).arr[x_118] = 2;
-        break;
-      }
-      case 1: {
-        int const x_116 = i_3;
-        (*(tint_symbol_5)).arr[x_116] = 3;
-        break;
-      }
-      case 0: {
-        int const x_114 = i_3;
-        (*(tint_symbol_5)).arr[x_114] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_134 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
-    {
-      int const x_136 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_142 = j_1;
-    if ((x_142 < 10)) {
-    } else {
-      break;
-    }
-    int const x_145 = j_1;
-    int const x_146 = j_1;
-    int const x_148 = (*(tint_symbol_5)).arr[x_146];
-    (*(tint_symbol_6)).arr[x_145] = x_148;
-    {
-      int const x_150 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  while (true) {
-    int const x_156 = x_92;
-    int const x_157 = x_93;
-    if ((x_156 <= x_157)) {
-    } else {
-      break;
-    }
-    int const x_160 = x_94;
-    x_91 = x_160;
-    while (true) {
-      int const x_165 = x_91;
-      int const x_166 = x_93;
-      if ((x_165 < x_166)) {
-      } else {
-        break;
-      }
-      int const x_169 = x_91;
-      x_90 = x_169;
-      int const x_170 = x_91;
-      int const x_171 = x_92;
-      x_89 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_170) + as_type<uint>(x_171)))) - as_type<uint>(1)));
-      int const x_174 = x_91;
-      int const x_175 = x_92;
-      int const x_179 = x_93;
-      x_88 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_174) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_175))))))) - as_type<uint>(1))), x_179);
-      int const x_181 = x_90;
-      x_87 = x_181;
-      int const x_182 = x_89;
-      x_86 = x_182;
-      int const x_183 = x_88;
-      x_85 = x_183;
-      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_185 = x_92;
-        int const x_187 = x_91;
-        x_91 = as_type<int>((as_type<uint>(x_187) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_185))))));
-      }
-    }
-    {
-      int const x_189 = x_92;
-      x_92 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_189)));
-    }
-  }
-  float const x_193 = (*(tint_symbol_7)).y;
-  if ((int(x_193) < 30)) {
-    int const x_200 = (*(tint_symbol_5)).arr[0];
-    grey = (0.5f + (float(x_200) / 10.0f));
-  } else {
-    float const x_205 = (*(tint_symbol_7)).y;
-    if ((int(x_205) < 60)) {
-      int const x_212 = (*(tint_symbol_5)).arr[1];
-      grey = (0.5f + (float(x_212) / 10.0f));
-    } else {
-      float const x_217 = (*(tint_symbol_7)).y;
-      if ((int(x_217) < 90)) {
-        int const x_224 = (*(tint_symbol_5)).arr[2];
-        grey = (0.5f + (float(x_224) / 10.0f));
-      } else {
-        float const x_229 = (*(tint_symbol_7)).y;
-        if ((int(x_229) < 120)) {
-          int const x_236 = (*(tint_symbol_5)).arr[3];
-          grey = (0.5f + (float(x_236) / 10.0f));
-        } else {
-          float const x_241 = (*(tint_symbol_7)).y;
-          if ((int(x_241) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_248 = (*(tint_symbol_7)).y;
-            if ((int(x_248) < 180)) {
-              int const x_255 = (*(tint_symbol_5)).arr[5];
-              grey = (0.5f + (float(x_255) / 10.0f));
-            } else {
-              float const x_260 = (*(tint_symbol_7)).y;
-              if ((int(x_260) < 210)) {
-                int const x_267 = (*(tint_symbol_5)).arr[6];
-                grey = (0.5f + (float(x_267) / 10.0f));
-              } else {
-                float const x_272 = (*(tint_symbol_7)).y;
-                if ((int(x_272) < 240)) {
-                  int const x_279 = (*(tint_symbol_5)).arr[7];
-                  grey = (0.5f + (float(x_279) / 10.0f));
-                } else {
-                  float const x_284 = (*(tint_symbol_7)).y;
-                  if ((int(x_284) < 270)) {
-                    int const x_291 = (*(tint_symbol_5)).arr[8];
-                    grey = (0.5f + (float(x_291) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_295 = grey;
-  float3 const x_296 = float3(x_295, x_295, x_295);
-  *(tint_symbol_8) = float4(x_296.x, x_296.y, x_296.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_10, tint_symbol_11, tint_symbol_9, tint_symbol_12);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_12)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_13 = 0.0f;
-  thread tint_array_wrapper tint_symbol_14 = {};
-  thread tint_array_wrapper tint_symbol_15 = {};
-  thread float4 tint_symbol_16 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_17, thread tint_array_wrapper* const tint_symbol_18) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_381 = m;
-    int const x_382 = high;
-    if ((x_381 <= x_382)) {
-    } else {
-      break;
-    }
-    int const x_385 = low;
-    i_2 = x_385;
-    while (true) {
-      int const x_390 = i_2;
-      int const x_391 = high;
-      if ((x_390 < x_391)) {
-      } else {
-        break;
-      }
-      int const x_394 = i_2;
-      from_1 = x_394;
-      int const x_395 = i_2;
-      int const x_396 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_395) + as_type<uint>(x_396)))) - as_type<uint>(1)));
-      int const x_399 = i_2;
-      int const x_400 = m;
-      int const x_404 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_399) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_400))))))) - as_type<uint>(1))), x_404);
-      int const x_406 = from_1;
-      param = x_406;
-      int const x_407 = mid_1;
-      param_1 = x_407;
-      int const x_408 = to_1;
-      param_2 = x_408;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_17, tint_symbol_18);
-      {
-        int const x_410 = m;
-        int const x_412 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_412) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_410))))));
-      }
-    }
-    {
-      int const x_414 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_414)));
-    }
-  }
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.spvasm
deleted file mode 100644
index 5965e67..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.spvasm
+++ /dev/null
@@ -1,729 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 468
-; Schema: 0
-               OpCapability Shader
-        %252 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %main_1 "main_1"
-               OpName %x_85 "x_85"
-               OpName %x_86 "x_86"
-               OpName %x_87 "x_87"
-               OpName %x_88 "x_88"
-               OpName %x_89 "x_89"
-               OpName %x_90 "x_90"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %132 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-        %149 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %397 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %56
-         %57 = OpLabel
-         %58 = OpSLessThanEqual %bool %51 %53
-               OpBranch %56
-         %56 = OpLabel
-         %59 = OpPhi %bool %54 %47 %58 %57
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %45
-         %60 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Private_int %data %63
-         %66 = OpLoad %int %65
-         %67 = OpLoad %int %j
-         %68 = OpAccessChain %_ptr_Private_int %data %67
-         %69 = OpLoad %int %68
-         %70 = OpSLessThan %bool %66 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpLoad %int %k
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %k %75
-         %76 = OpLoad %int %i
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %i %77
-         %78 = OpAccessChain %_ptr_Private_int %data %76
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Private_int %temp %74
-               OpStore %80 %79
-               OpBranch %71
-         %73 = OpLabel
-         %81 = OpLoad %int %k
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %k %82
-         %83 = OpLoad %int %j
-         %84 = OpIAdd %int %83 %int_1
-               OpStore %j %84
-         %85 = OpAccessChain %_ptr_Private_int %data %83
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Private_int %temp %81
-               OpStore %87 %86
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-               OpLoopMerge %89 %90 None
-               OpBranch %91
-         %91 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpLoad %int %i
-         %95 = OpLoad %int %mid
-         %97 = OpSLessThan %bool %92 %int_10
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpSLessThanEqual %bool %93 %95
-               OpBranch %98
-         %98 = OpLabel
-        %101 = OpPhi %bool %97 %91 %100 %99
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpBranch %102
-        %104 = OpLabel
-               OpBranch %89
-        %102 = OpLabel
-        %105 = OpLoad %int %k
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %k %106
-        %107 = OpLoad %int %i
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %i %108
-        %109 = OpAccessChain %_ptr_Private_int %data %107
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Private_int %temp %105
-               OpStore %111 %110
-               OpBranch %90
-         %90 = OpLabel
-               OpBranch %88
-         %89 = OpLabel
-        %113 = OpLoad %int %from
-               OpStore %i_1 %113
-               OpBranch %114
-        %114 = OpLabel
-               OpLoopMerge %115 %116 None
-               OpBranch %117
-        %117 = OpLabel
-        %118 = OpLoad %int %i_1
-        %120 = OpLoad %int %to
-        %121 = OpSLessThanEqual %bool %118 %120
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-               OpBranch %122
-        %124 = OpLabel
-               OpBranch %115
-        %122 = OpLabel
-        %125 = OpLoad %int %i_1
-        %126 = OpLoad %int %i_1
-        %127 = OpAccessChain %_ptr_Private_int %temp %126
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Private_int %data %125
-               OpStore %129 %128
-               OpBranch %116
-        %116 = OpLabel
-        %130 = OpLoad %int %i_1
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %i_1 %131
-               OpBranch %114
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %132
-        %134 = OpLabel
-       %x_85 = OpVariable %_ptr_Function_int Function %32
-       %x_86 = OpVariable %_ptr_Function_int Function %32
-       %x_87 = OpVariable %_ptr_Function_int Function %32
-       %x_88 = OpVariable %_ptr_Function_int Function %32
-       %x_89 = OpVariable %_ptr_Function_int Function %32
-       %x_90 = OpVariable %_ptr_Function_int Function %32
-       %x_91 = OpVariable %_ptr_Function_int Function %32
-       %x_92 = OpVariable %_ptr_Function_int Function %32
-       %x_93 = OpVariable %_ptr_Function_int Function %32
-       %x_94 = OpVariable %_ptr_Function_int Function %32
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %149
-        %152 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %153 = OpLoad %float %152
-        %154 = OpConvertFToS %int %153
-               OpStore %i_3 %154
-               OpBranch %155
-        %155 = OpLabel
-               OpLoopMerge %156 %157 None
-               OpBranch %158
-        %158 = OpLabel
-        %159 = OpLoad %int %i_3
-               OpSelectionMerge %160 None
-               OpSwitch %159 %161 9 %162 8 %163 7 %164 6 %165 5 %166 4 %167 3 %168 2 %169 1 %170 0 %171
-        %162 = OpLabel
-        %172 = OpLoad %int %i_3
-        %173 = OpAccessChain %_ptr_Private_int %data %172
-               OpStore %173 %int_n5
-               OpBranch %160
-        %163 = OpLabel
-        %175 = OpLoad %int %i_3
-        %176 = OpAccessChain %_ptr_Private_int %data %175
-               OpStore %176 %int_n4
-               OpBranch %160
-        %164 = OpLabel
-        %178 = OpLoad %int %i_3
-        %179 = OpAccessChain %_ptr_Private_int %data %178
-               OpStore %179 %int_n3
-               OpBranch %160
-        %165 = OpLabel
-        %181 = OpLoad %int %i_3
-        %182 = OpAccessChain %_ptr_Private_int %data %181
-               OpStore %182 %int_n2
-               OpBranch %160
-        %166 = OpLabel
-        %184 = OpLoad %int %i_3
-        %185 = OpAccessChain %_ptr_Private_int %data %184
-               OpStore %185 %int_n1
-               OpBranch %160
-        %167 = OpLabel
-        %187 = OpLoad %int %i_3
-        %188 = OpAccessChain %_ptr_Private_int %data %187
-               OpStore %188 %int_0
-               OpBranch %160
-        %168 = OpLabel
-        %190 = OpLoad %int %i_3
-        %191 = OpAccessChain %_ptr_Private_int %data %190
-               OpStore %191 %int_1
-               OpBranch %160
-        %169 = OpLabel
-        %192 = OpLoad %int %i_3
-        %193 = OpAccessChain %_ptr_Private_int %data %192
-               OpStore %193 %int_2
-               OpBranch %160
-        %170 = OpLabel
-        %195 = OpLoad %int %i_3
-        %196 = OpAccessChain %_ptr_Private_int %data %195
-               OpStore %196 %int_3
-               OpBranch %160
-        %171 = OpLabel
-        %198 = OpLoad %int %i_3
-        %199 = OpAccessChain %_ptr_Private_int %data %198
-               OpStore %199 %int_4
-               OpBranch %160
-        %161 = OpLabel
-               OpBranch %160
-        %160 = OpLabel
-        %201 = OpLoad %int %i_3
-        %202 = OpIAdd %int %201 %int_1
-               OpStore %i_3 %202
-               OpBranch %157
-        %157 = OpLabel
-        %203 = OpLoad %int %i_3
-        %204 = OpSLessThan %bool %203 %int_10
-               OpBranchConditional %204 %155 %156
-        %156 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %205
-        %205 = OpLabel
-               OpLoopMerge %206 %207 None
-               OpBranch %208
-        %208 = OpLabel
-        %209 = OpLoad %int %j_1
-        %210 = OpSLessThan %bool %209 %int_10
-               OpSelectionMerge %211 None
-               OpBranchConditional %210 %212 %213
-        %212 = OpLabel
-               OpBranch %211
-        %213 = OpLabel
-               OpBranch %206
-        %211 = OpLabel
-        %214 = OpLoad %int %j_1
-        %215 = OpLoad %int %j_1
-        %216 = OpAccessChain %_ptr_Private_int %data %215
-        %217 = OpLoad %int %216
-        %218 = OpAccessChain %_ptr_Private_int %temp %214
-               OpStore %218 %217
-               OpBranch %207
-        %207 = OpLabel
-        %219 = OpLoad %int %j_1
-        %220 = OpIAdd %int %219 %int_1
-               OpStore %j_1 %220
-               OpBranch %205
-        %206 = OpLabel
-               OpStore %x_94 %int_0
-               OpStore %x_93 %int_9
-               OpStore %x_92 %int_1
-               OpBranch %222
-        %222 = OpLabel
-               OpLoopMerge %223 %224 None
-               OpBranch %225
-        %225 = OpLabel
-        %226 = OpLoad %int %x_92
-        %227 = OpLoad %int %x_93
-        %228 = OpSLessThanEqual %bool %226 %227
-               OpSelectionMerge %229 None
-               OpBranchConditional %228 %230 %231
-        %230 = OpLabel
-               OpBranch %229
-        %231 = OpLabel
-               OpBranch %223
-        %229 = OpLabel
-        %232 = OpLoad %int %x_94
-               OpStore %x_91 %232
-               OpBranch %233
-        %233 = OpLabel
-               OpLoopMerge %234 %235 None
-               OpBranch %236
-        %236 = OpLabel
-        %237 = OpLoad %int %x_91
-        %238 = OpLoad %int %x_93
-        %239 = OpSLessThan %bool %237 %238
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %242
-        %241 = OpLabel
-               OpBranch %240
-        %242 = OpLabel
-               OpBranch %234
-        %240 = OpLabel
-        %243 = OpLoad %int %x_91
-               OpStore %x_90 %243
-        %244 = OpLoad %int %x_91
-        %245 = OpLoad %int %x_92
-        %246 = OpIAdd %int %244 %245
-        %247 = OpISub %int %246 %int_1
-               OpStore %x_89 %247
-        %248 = OpLoad %int %x_91
-        %249 = OpLoad %int %x_92
-        %250 = OpLoad %int %x_93
-        %253 = OpIMul %int %int_2 %249
-        %254 = OpIAdd %int %248 %253
-        %255 = OpISub %int %254 %int_1
-        %251 = OpExtInst %int %252 SMin %255 %250
-               OpStore %x_88 %251
-        %256 = OpLoad %int %x_90
-               OpStore %x_87 %256
-        %257 = OpLoad %int %x_89
-               OpStore %x_86 %257
-        %258 = OpLoad %int %x_88
-               OpStore %x_85 %258
-        %259 = OpFunctionCall %void %merge_i1_i1_i1_ %x_87 %x_86 %x_85
-               OpBranch %235
-        %235 = OpLabel
-        %263 = OpLoad %int %x_92
-        %264 = OpLoad %int %x_91
-        %265 = OpIMul %int %int_2 %263
-        %266 = OpIAdd %int %264 %265
-               OpStore %x_91 %266
-               OpBranch %233
-        %234 = OpLabel
-               OpBranch %224
-        %224 = OpLabel
-        %267 = OpLoad %int %x_92
-        %268 = OpIMul %int %int_2 %267
-               OpStore %x_92 %268
-               OpBranch %222
-        %223 = OpLabel
-        %271 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %272 = OpLoad %float %271
-        %273 = OpConvertFToS %int %272
-        %275 = OpSLessThan %bool %273 %int_30
-               OpSelectionMerge %276 None
-               OpBranchConditional %275 %277 %278
-        %277 = OpLabel
-        %279 = OpAccessChain %_ptr_Private_int %data %int_0
-        %280 = OpLoad %int %279
-        %282 = OpConvertSToF %float %280
-        %284 = OpFDiv %float %282 %float_10
-        %285 = OpFAdd %float %float_0_5 %284
-               OpStore %grey %285
-               OpBranch %276
-        %278 = OpLabel
-        %286 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %287 = OpLoad %float %286
-        %288 = OpConvertFToS %int %287
-        %290 = OpSLessThan %bool %288 %int_60
-               OpSelectionMerge %291 None
-               OpBranchConditional %290 %292 %293
-        %292 = OpLabel
-        %294 = OpAccessChain %_ptr_Private_int %data %int_1
-        %295 = OpLoad %int %294
-        %296 = OpConvertSToF %float %295
-        %297 = OpFDiv %float %296 %float_10
-        %298 = OpFAdd %float %float_0_5 %297
-               OpStore %grey %298
-               OpBranch %291
-        %293 = OpLabel
-        %299 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %300 = OpLoad %float %299
-        %301 = OpConvertFToS %int %300
-        %303 = OpSLessThan %bool %301 %int_90
-               OpSelectionMerge %304 None
-               OpBranchConditional %303 %305 %306
-        %305 = OpLabel
-        %307 = OpAccessChain %_ptr_Private_int %data %int_2
-        %308 = OpLoad %int %307
-        %309 = OpConvertSToF %float %308
-        %310 = OpFDiv %float %309 %float_10
-        %311 = OpFAdd %float %float_0_5 %310
-               OpStore %grey %311
-               OpBranch %304
-        %306 = OpLabel
-        %312 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %313 = OpLoad %float %312
-        %314 = OpConvertFToS %int %313
-        %316 = OpSLessThan %bool %314 %int_120
-               OpSelectionMerge %317 None
-               OpBranchConditional %316 %318 %319
-        %318 = OpLabel
-        %320 = OpAccessChain %_ptr_Private_int %data %int_3
-        %321 = OpLoad %int %320
-        %322 = OpConvertSToF %float %321
-        %323 = OpFDiv %float %322 %float_10
-        %324 = OpFAdd %float %float_0_5 %323
-               OpStore %grey %324
-               OpBranch %317
-        %319 = OpLabel
-        %325 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %326 = OpLoad %float %325
-        %327 = OpConvertFToS %int %326
-        %329 = OpSLessThan %bool %327 %int_150
-               OpSelectionMerge %330 None
-               OpBranchConditional %329 %331 %332
-        %331 = OpLabel
-               OpKill
-        %332 = OpLabel
-        %333 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %334 = OpLoad %float %333
-        %335 = OpConvertFToS %int %334
-        %337 = OpSLessThan %bool %335 %int_180
-               OpSelectionMerge %338 None
-               OpBranchConditional %337 %339 %340
-        %339 = OpLabel
-        %342 = OpAccessChain %_ptr_Private_int %data %int_5
-        %343 = OpLoad %int %342
-        %344 = OpConvertSToF %float %343
-        %345 = OpFDiv %float %344 %float_10
-        %346 = OpFAdd %float %float_0_5 %345
-               OpStore %grey %346
-               OpBranch %338
-        %340 = OpLabel
-        %347 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %348 = OpLoad %float %347
-        %349 = OpConvertFToS %int %348
-        %351 = OpSLessThan %bool %349 %int_210
-               OpSelectionMerge %352 None
-               OpBranchConditional %351 %353 %354
-        %353 = OpLabel
-        %356 = OpAccessChain %_ptr_Private_int %data %int_6
-        %357 = OpLoad %int %356
-        %358 = OpConvertSToF %float %357
-        %359 = OpFDiv %float %358 %float_10
-        %360 = OpFAdd %float %float_0_5 %359
-               OpStore %grey %360
-               OpBranch %352
-        %354 = OpLabel
-        %361 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %362 = OpLoad %float %361
-        %363 = OpConvertFToS %int %362
-        %365 = OpSLessThan %bool %363 %int_240
-               OpSelectionMerge %366 None
-               OpBranchConditional %365 %367 %368
-        %367 = OpLabel
-        %370 = OpAccessChain %_ptr_Private_int %data %int_7
-        %371 = OpLoad %int %370
-        %372 = OpConvertSToF %float %371
-        %373 = OpFDiv %float %372 %float_10
-        %374 = OpFAdd %float %float_0_5 %373
-               OpStore %grey %374
-               OpBranch %366
-        %368 = OpLabel
-        %375 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %376 = OpLoad %float %375
-        %377 = OpConvertFToS %int %376
-        %379 = OpSLessThan %bool %377 %int_270
-               OpSelectionMerge %380 None
-               OpBranchConditional %379 %381 %382
-        %381 = OpLabel
-        %384 = OpAccessChain %_ptr_Private_int %data %int_8
-        %385 = OpLoad %int %384
-        %386 = OpConvertSToF %float %385
-        %387 = OpFDiv %float %386 %float_10
-        %388 = OpFAdd %float %float_0_5 %387
-               OpStore %grey %388
-               OpBranch %380
-        %382 = OpLabel
-               OpKill
-        %380 = OpLabel
-               OpBranch %366
-        %366 = OpLabel
-               OpBranch %352
-        %352 = OpLabel
-               OpBranch %338
-        %338 = OpLabel
-               OpBranch %330
-        %330 = OpLabel
-               OpBranch %317
-        %317 = OpLabel
-               OpBranch %304
-        %304 = OpLabel
-               OpBranch %291
-        %291 = OpLabel
-               OpBranch %276
-        %276 = OpLabel
-        %389 = OpLoad %float %grey
-        %391 = OpCompositeConstruct %v3float %389 %389 %389
-        %392 = OpCompositeExtract %float %391 0
-        %393 = OpCompositeExtract %float %391 1
-        %394 = OpCompositeExtract %float %391 2
-        %396 = OpCompositeConstruct %v4float %392 %393 %394 %float_1
-               OpStore %x_GLF_color %396
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %397
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %401 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %402 = OpFunctionCall %void %main_1
-        %403 = OpLoad %v4float %x_GLF_color
-        %404 = OpCompositeConstruct %main_out %403
-               OpReturnValue %404
-               OpFunctionEnd
-       %main = OpFunction %void None %132
-        %406 = OpLabel
-        %408 = OpLoad %v4float %gl_FragCoord_param_1
-        %407 = OpFunctionCall %main_out %main_inner %408
-        %409 = OpCompositeExtract %v4float %407 0
-               OpStore %x_GLF_color_1_1 %409
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %132
-        %411 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %422
-        %422 = OpLabel
-               OpLoopMerge %423 %424 None
-               OpBranch %425
-        %425 = OpLabel
-        %426 = OpLoad %int %m
-        %427 = OpLoad %int %high
-        %428 = OpSLessThanEqual %bool %426 %427
-               OpSelectionMerge %429 None
-               OpBranchConditional %428 %430 %431
-        %430 = OpLabel
-               OpBranch %429
-        %431 = OpLabel
-               OpBranch %423
-        %429 = OpLabel
-        %432 = OpLoad %int %low
-               OpStore %i_2 %432
-               OpBranch %433
-        %433 = OpLabel
-               OpLoopMerge %434 %435 None
-               OpBranch %436
-        %436 = OpLabel
-        %437 = OpLoad %int %i_2
-        %438 = OpLoad %int %high
-        %439 = OpSLessThan %bool %437 %438
-               OpSelectionMerge %440 None
-               OpBranchConditional %439 %441 %442
-        %441 = OpLabel
-               OpBranch %440
-        %442 = OpLabel
-               OpBranch %434
-        %440 = OpLabel
-        %443 = OpLoad %int %i_2
-               OpStore %from_1 %443
-        %444 = OpLoad %int %i_2
-        %445 = OpLoad %int %m
-        %446 = OpIAdd %int %444 %445
-        %447 = OpISub %int %446 %int_1
-               OpStore %mid_1 %447
-        %448 = OpLoad %int %i_2
-        %449 = OpLoad %int %m
-        %450 = OpLoad %int %high
-        %452 = OpIMul %int %int_2 %449
-        %453 = OpIAdd %int %448 %452
-        %454 = OpISub %int %453 %int_1
-        %451 = OpExtInst %int %252 SMin %454 %450
-               OpStore %to_1 %451
-        %455 = OpLoad %int %from_1
-               OpStore %param %455
-        %456 = OpLoad %int %mid_1
-               OpStore %param_1 %456
-        %457 = OpLoad %int %to_1
-               OpStore %param_2 %457
-        %458 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %435
-        %435 = OpLabel
-        %462 = OpLoad %int %m
-        %463 = OpLoad %int %i_2
-        %464 = OpIMul %int %int_2 %462
-        %465 = OpIAdd %int %463 %464
-               OpStore %i_2 %465
-               OpBranch %433
-        %434 = OpLabel
-               OpBranch %424
-        %424 = OpLabel
-        %466 = OpLoad %int %m
-        %467 = OpIMul %int %int_2 %466
-               OpStore %m %467
-               OpBranch %422
-        %423 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.wgsl
deleted file mode 100644
index 57c9c29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-mergesort-func-inline-mutate-var/2.wgsl.expected.wgsl
+++ /dev/null
@@ -1,363 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_302 : i32 = *(from);
-  k = x_302;
-  let x_303 : i32 = *(from);
-  i = x_303;
-  let x_304 : i32 = *(mid);
-  j = (x_304 + 1);
-  loop {
-    let x_310 : i32 = i;
-    let x_311 : i32 = *(mid);
-    let x_313 : i32 = j;
-    let x_314 : i32 = *(to);
-    if (((x_310 <= x_311) && (x_313 <= x_314))) {
-    } else {
-      break;
-    }
-    let x_318 : i32 = i;
-    let x_320 : i32 = data[x_318];
-    let x_321 : i32 = j;
-    let x_323 : i32 = data[x_321];
-    if ((x_320 < x_323)) {
-      let x_328 : i32 = k;
-      k = (x_328 + 1);
-      let x_330 : i32 = i;
-      i = (x_330 + 1);
-      let x_333 : i32 = data[x_330];
-      temp[x_328] = x_333;
-    } else {
-      let x_335 : i32 = k;
-      k = (x_335 + 1);
-      let x_337 : i32 = j;
-      j = (x_337 + 1);
-      let x_340 : i32 = data[x_337];
-      temp[x_335] = x_340;
-    }
-  }
-  loop {
-    let x_346 : i32 = i;
-    let x_348 : i32 = i;
-    let x_349 : i32 = *(mid);
-    if (((x_346 < 10) && (x_348 <= x_349))) {
-    } else {
-      break;
-    }
-    let x_353 : i32 = k;
-    k = (x_353 + 1);
-    let x_355 : i32 = i;
-    i = (x_355 + 1);
-    let x_358 : i32 = data[x_355];
-    temp[x_353] = x_358;
-  }
-  let x_360 : i32 = *(from);
-  i_1 = x_360;
-  loop {
-    let x_365 : i32 = i_1;
-    let x_366 : i32 = *(to);
-    if ((x_365 <= x_366)) {
-    } else {
-      break;
-    }
-    let x_369 : i32 = i_1;
-    let x_370 : i32 = i_1;
-    let x_372 : i32 = temp[x_370];
-    data[x_369] = x_372;
-
-    continuing {
-      let x_374 : i32 = i_1;
-      i_1 = (x_374 + 1);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var x_85 : i32;
-  var x_86 : i32;
-  var x_87 : i32;
-  var x_88 : i32;
-  var x_89 : i32;
-  var x_90 : i32;
-  var x_91 : i32;
-  var x_92 : i32;
-  var x_93 : i32;
-  var x_94 : i32;
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_96 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_96);
-  loop {
-    let x_102 : i32 = i_3;
-    switch(x_102) {
-      case 9: {
-        let x_132 : i32 = i_3;
-        data[x_132] = -5;
-      }
-      case 8: {
-        let x_130 : i32 = i_3;
-        data[x_130] = -4;
-      }
-      case 7: {
-        let x_128 : i32 = i_3;
-        data[x_128] = -3;
-      }
-      case 6: {
-        let x_126 : i32 = i_3;
-        data[x_126] = -2;
-      }
-      case 5: {
-        let x_124 : i32 = i_3;
-        data[x_124] = -1;
-      }
-      case 4: {
-        let x_122 : i32 = i_3;
-        data[x_122] = 0;
-      }
-      case 3: {
-        let x_120 : i32 = i_3;
-        data[x_120] = 1;
-      }
-      case 2: {
-        let x_118 : i32 = i_3;
-        data[x_118] = 2;
-      }
-      case 1: {
-        let x_116 : i32 = i_3;
-        data[x_116] = 3;
-      }
-      case 0: {
-        let x_114 : i32 = i_3;
-        data[x_114] = 4;
-      }
-      default: {
-      }
-    }
-    let x_134 : i32 = i_3;
-    i_3 = (x_134 + 1);
-
-    continuing {
-      let x_136 : i32 = i_3;
-      if ((x_136 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_142 : i32 = j_1;
-    if ((x_142 < 10)) {
-    } else {
-      break;
-    }
-    let x_145 : i32 = j_1;
-    let x_146 : i32 = j_1;
-    let x_148 : i32 = data[x_146];
-    temp[x_145] = x_148;
-
-    continuing {
-      let x_150 : i32 = j_1;
-      j_1 = (x_150 + 1);
-    }
-  }
-  x_94 = 0;
-  x_93 = 9;
-  x_92 = 1;
-  loop {
-    let x_156 : i32 = x_92;
-    let x_157 : i32 = x_93;
-    if ((x_156 <= x_157)) {
-    } else {
-      break;
-    }
-    let x_160 : i32 = x_94;
-    x_91 = x_160;
-    loop {
-      let x_165 : i32 = x_91;
-      let x_166 : i32 = x_93;
-      if ((x_165 < x_166)) {
-      } else {
-        break;
-      }
-      let x_169 : i32 = x_91;
-      x_90 = x_169;
-      let x_170 : i32 = x_91;
-      let x_171 : i32 = x_92;
-      x_89 = ((x_170 + x_171) - 1);
-      let x_174 : i32 = x_91;
-      let x_175 : i32 = x_92;
-      let x_179 : i32 = x_93;
-      x_88 = min(((x_174 + (2 * x_175)) - 1), x_179);
-      let x_181 : i32 = x_90;
-      x_87 = x_181;
-      let x_182 : i32 = x_89;
-      x_86 = x_182;
-      let x_183 : i32 = x_88;
-      x_85 = x_183;
-      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85));
-
-      continuing {
-        let x_185 : i32 = x_92;
-        let x_187 : i32 = x_91;
-        x_91 = (x_187 + (2 * x_185));
-      }
-    }
-
-    continuing {
-      let x_189 : i32 = x_92;
-      x_92 = (2 * x_189);
-    }
-  }
-  let x_193 : f32 = gl_FragCoord.y;
-  if ((i32(x_193) < 30)) {
-    let x_200 : i32 = data[0];
-    grey = (0.5 + (f32(x_200) / 10.0));
-  } else {
-    let x_205 : f32 = gl_FragCoord.y;
-    if ((i32(x_205) < 60)) {
-      let x_212 : i32 = data[1];
-      grey = (0.5 + (f32(x_212) / 10.0));
-    } else {
-      let x_217 : f32 = gl_FragCoord.y;
-      if ((i32(x_217) < 90)) {
-        let x_224 : i32 = data[2];
-        grey = (0.5 + (f32(x_224) / 10.0));
-      } else {
-        let x_229 : f32 = gl_FragCoord.y;
-        if ((i32(x_229) < 120)) {
-          let x_236 : i32 = data[3];
-          grey = (0.5 + (f32(x_236) / 10.0));
-        } else {
-          let x_241 : f32 = gl_FragCoord.y;
-          if ((i32(x_241) < 150)) {
-            discard;
-          } else {
-            let x_248 : f32 = gl_FragCoord.y;
-            if ((i32(x_248) < 180)) {
-              let x_255 : i32 = data[5];
-              grey = (0.5 + (f32(x_255) / 10.0));
-            } else {
-              let x_260 : f32 = gl_FragCoord.y;
-              if ((i32(x_260) < 210)) {
-                let x_267 : i32 = data[6];
-                grey = (0.5 + (f32(x_267) / 10.0));
-              } else {
-                let x_272 : f32 = gl_FragCoord.y;
-                if ((i32(x_272) < 240)) {
-                  let x_279 : i32 = data[7];
-                  grey = (0.5 + (f32(x_279) / 10.0));
-                } else {
-                  let x_284 : f32 = gl_FragCoord.y;
-                  if ((i32(x_284) < 270)) {
-                    let x_291 : i32 = data[8];
-                    grey = (0.5 + (f32(x_291) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_295 : f32 = grey;
-  let x_296 : vec3<f32> = vec3<f32>(x_295, x_295, x_295);
-  x_GLF_color = vec4<f32>(x_296.x, x_296.y, x_296.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_381 : i32 = m;
-    let x_382 : i32 = high;
-    if ((x_381 <= x_382)) {
-    } else {
-      break;
-    }
-    let x_385 : i32 = low;
-    i_2 = x_385;
-    loop {
-      let x_390 : i32 = i_2;
-      let x_391 : i32 = high;
-      if ((x_390 < x_391)) {
-      } else {
-        break;
-      }
-      let x_394 : i32 = i_2;
-      from_1 = x_394;
-      let x_395 : i32 = i_2;
-      let x_396 : i32 = m;
-      mid_1 = ((x_395 + x_396) - 1);
-      let x_399 : i32 = i_2;
-      let x_400 : i32 = m;
-      let x_404 : i32 = high;
-      to_1 = min(((x_399 + (2 * x_400)) - 1), x_404);
-      let x_406 : i32 = from_1;
-      param = x_406;
-      let x_407 : i32 = mid_1;
-      param_1 = x_407;
-      let x_408 : i32 = to_1;
-      param_2 = x_408;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_410 : i32 = m;
-        let x_412 : i32 = i_2;
-        i_2 = (x_412 + (2 * x_410));
-      }
-    }
-
-    continuing {
-      let x_414 : i32 = m;
-      m = (2 * x_414);
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.hlsl
deleted file mode 100644
index 074ee65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,109 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_77 = int2(0, 0);
-  int2 x_110 = int2(0, 0);
-  int x_116 = 0;
-  int2 x_77_phi = int2(0, 0);
-  int x_80_phi = 0;
-  int2 x_111_phi = int2(0, 0);
-  int2 x_113_phi = int2(0, 0);
-  const float4 x_56 = gl_FragCoord;
-  const float2 x_59 = asfloat(x_6[0].xy);
-  const float2 x_60 = (float2(x_56.x, x_56.y) / x_59);
-  const int x_63 = int((x_60.x * 8.0f));
-  const int x_66 = int((x_60.y * 8.0f));
-  const int2 x_75 = int2(((((x_63 & 5) | (x_66 & 10)) * 8) + ((x_66 & 5) | (x_63 & 10))), 0);
-  x_77_phi = x_75;
-  x_80_phi = 0;
-  while (true) {
-    int2 x_91 = int2(0, 0);
-    int2 x_99 = int2(0, 0);
-    int x_81 = 0;
-    int2 x_92_phi = int2(0, 0);
-    int2 x_100_phi = int2(0, 0);
-    x_77 = x_77_phi;
-    const int x_80 = x_80_phi;
-    if ((x_80 < 100)) {
-    } else {
-      break;
-    }
-    x_92_phi = x_77;
-    if ((x_77.x > 0)) {
-      x_91 = x_77;
-      x_91.y = (x_77.y - 1);
-      x_92_phi = x_91;
-    }
-    const int2 x_92 = x_92_phi;
-    x_100_phi = x_92;
-    if ((x_92.x < 0)) {
-      x_99 = x_92;
-      x_99.y = (x_92.y + 1);
-      x_100_phi = x_99;
-    }
-    const int2 x_100 = x_100_phi;
-    int2 x_78_1 = x_100;
-    x_78_1.x = (x_100.x + (x_100.y / 2));
-    const int2 x_78 = x_78_1;
-    {
-      x_81 = (x_80 + 1);
-      x_77_phi = x_78;
-      x_80_phi = x_81;
-    }
-  }
-  const int x_105 = x_77.x;
-  x_111_phi = x_77;
-  if ((x_105 < 0)) {
-    x_110 = int2(0, 0);
-    x_110.x = -(x_105);
-    x_111_phi = x_110;
-  }
-  x_113_phi = x_111_phi;
-  while (true) {
-    int2 x_114 = int2(0, 0);
-    x_116 = x_113_phi.x;
-    if ((x_116 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_114 = int2(0, 0);
-      x_114.x = asint((x_116 - asint(16)));
-      x_113_phi = x_114;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_121 = indexable[x_116];
-  x_GLF_color = x_121;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.msl
deleted file mode 100644
index c7cd04d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.msl
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int2 x_77 = 0;
-  int2 x_110 = 0;
-  int x_116 = 0;
-  int2 x_77_phi = 0;
-  int x_80_phi = 0;
-  int2 x_111_phi = 0;
-  int2 x_113_phi = 0;
-  float4 const x_56 = *(tint_symbol_4);
-  float2 const x_59 = x_6.resolution;
-  float2 const x_60 = (float2(x_56.x, x_56.y) / x_59);
-  int const x_63 = int((x_60.x * 8.0f));
-  int const x_66 = int((x_60.y * 8.0f));
-  int2 const x_75 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_63 & 5) | (x_66 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_66 & 5) | (x_63 & 10))))), 0);
-  x_77_phi = x_75;
-  x_80_phi = 0;
-  while (true) {
-    int2 x_91 = 0;
-    int2 x_99 = 0;
-    int x_81 = 0;
-    int2 x_92_phi = 0;
-    int2 x_100_phi = 0;
-    x_77 = x_77_phi;
-    int const x_80 = x_80_phi;
-    if ((x_80 < 100)) {
-    } else {
-      break;
-    }
-    x_92_phi = x_77;
-    if ((x_77.x > 0)) {
-      x_91 = x_77;
-      x_91.y = as_type<int>((as_type<uint>(x_77.y) - as_type<uint>(1)));
-      x_92_phi = x_91;
-    }
-    int2 const x_92 = x_92_phi;
-    x_100_phi = x_92;
-    if ((x_92.x < 0)) {
-      x_99 = x_92;
-      x_99.y = as_type<int>((as_type<uint>(x_92.y) + as_type<uint>(1)));
-      x_100_phi = x_99;
-    }
-    int2 const x_100 = x_100_phi;
-    int2 x_78_1 = x_100;
-    x_78_1.x = as_type<int>((as_type<uint>(x_100.x) + as_type<uint>((x_100.y / 2))));
-    int2 const x_78 = x_78_1;
-    {
-      x_81 = as_type<int>((as_type<uint>(x_80) + as_type<uint>(1)));
-      x_77_phi = x_78;
-      x_80_phi = x_81;
-    }
-  }
-  int const x_105 = x_77.x;
-  x_111_phi = x_77;
-  if ((x_105 < 0)) {
-    x_110 = int2(0, 0);
-    x_110.x = tint_unary_minus(x_105);
-    x_111_phi = x_110;
-  }
-  int2 const x_111 = x_111_phi;
-  x_113_phi = x_111;
-  while (true) {
-    int2 x_114 = 0;
-    int2 const x_113 = x_113_phi;
-    x_116 = x_113.x;
-    if ((x_116 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_114 = int2(0, 0);
-      x_114.x = as_type<int>(as_type<int>((as_type<uint>(x_116) - as_type<uint>(as_type<int>(16)))));
-      x_113_phi = x_114;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_121 = indexable.arr[x_116];
-  *(tint_symbol_5) = x_121;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.spvasm
deleted file mode 100644
index 1040dc6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,292 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 185
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_77 "x_77"
-               OpName %x_110 "x_110"
-               OpName %x_116 "x_116"
-               OpName %x_77_phi "x_77_phi"
-               OpName %x_80_phi "x_80_phi"
-               OpName %x_111_phi "x_111_phi"
-               OpName %x_113_phi "x_113_phi"
-               OpName %x_91 "x_91"
-               OpName %x_99 "x_99"
-               OpName %x_81 "x_81"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_100_phi "x_100_phi"
-               OpName %x_78_1 "x_78_1"
-               OpName %x_114 "x_114"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-        %124 = OpConstantComposite %v2int %int_0 %int_0
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %172 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_77 = OpVariable %_ptr_Function_v2int Function %29
-      %x_110 = OpVariable %_ptr_Function_v2int Function %29
-      %x_116 = OpVariable %_ptr_Function_int Function %33
-   %x_77_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_80_phi = OpVariable %_ptr_Function_int Function %33
-  %x_111_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_113_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_91 = OpVariable %_ptr_Function_v2int Function %29
-       %x_99 = OpVariable %_ptr_Function_v2int Function %29
-       %x_81 = OpVariable %_ptr_Function_int Function %33
-   %x_92_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_100_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_78_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_114 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_77_phi %66
-               OpStore %x_80_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_77_phi
-               OpStore %x_77 %76
-         %77 = OpLoad %int %x_80_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_77
-               OpStore %x_92_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_77 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_77
-               OpStore %x_91 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_91 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_77 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_91
-               OpStore %x_92_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_92_phi
-               OpStore %x_100_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_99 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_99 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_99
-               OpStore %x_100_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_100_phi
-               OpStore %x_78_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_78_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_78_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_81 %116
-               OpStore %x_77_phi %115
-        %117 = OpLoad %int %x_81
-               OpStore %x_80_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_77 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_77
-               OpStore %x_111_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-               OpStore %x_110 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_110 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_110
-               OpStore %x_111_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_111_phi
-               OpStore %x_113_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_113_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_116 %135
-        %136 = OpLoad %int %x_116
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_114 %124
-        %142 = OpAccessChain %_ptr_Function_int %x_114 %uint_0
-        %144 = OpLoad %int %x_116
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_114
-               OpStore %x_113_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %int %x_116
-        %170 = OpAccessChain %_ptr_Function_v4float %indexable %168
-        %171 = OpLoad %v4float %170
-               OpStore %x_GLF_color %171
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %172
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %176 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %177 = OpFunctionCall %void %main_1
-        %178 = OpLoad %v4float %x_GLF_color
-        %179 = OpCompositeConstruct %main_out %178
-               OpReturnValue %179
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %181 = OpLabel
-        %183 = OpLoad %v4float %gl_FragCoord_param_1
-        %182 = OpFunctionCall %main_out %main_inner %183
-        %184 = OpCompositeExtract %v4float %182 0
-               OpStore %x_GLF_color_1_1 %184
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.wgsl
deleted file mode 100644
index be331aa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,105 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_77 : vec2<i32>;
-  var x_110 : vec2<i32>;
-  var x_116 : i32;
-  var x_77_phi : vec2<i32>;
-  var x_80_phi : i32;
-  var x_111_phi : vec2<i32>;
-  var x_113_phi : vec2<i32>;
-  let x_56 : vec4<f32> = gl_FragCoord;
-  let x_59 : vec2<f32> = x_6.resolution;
-  let x_60 : vec2<f32> = (vec2<f32>(x_56.x, x_56.y) / x_59);
-  let x_63 : i32 = i32((x_60.x * 8.0));
-  let x_66 : i32 = i32((x_60.y * 8.0));
-  let x_75 : vec2<i32> = vec2<i32>(((((x_63 & 5) | (x_66 & 10)) * 8) + ((x_66 & 5) | (x_63 & 10))), 0);
-  x_77_phi = x_75;
-  x_80_phi = 0;
-  loop {
-    var x_91 : vec2<i32>;
-    var x_99 : vec2<i32>;
-    var x_81 : i32;
-    var x_92_phi : vec2<i32>;
-    var x_100_phi : vec2<i32>;
-    x_77 = x_77_phi;
-    let x_80 : i32 = x_80_phi;
-    if ((x_80 < 100)) {
-    } else {
-      break;
-    }
-    x_92_phi = x_77;
-    if ((x_77.x > 0)) {
-      x_91 = x_77;
-      x_91.y = (x_77.y - 1);
-      x_92_phi = x_91;
-    }
-    let x_92 : vec2<i32> = x_92_phi;
-    x_100_phi = x_92;
-    if ((x_92.x < 0)) {
-      x_99 = x_92;
-      x_99.y = (x_92.y + 1);
-      x_100_phi = x_99;
-    }
-    let x_100 : vec2<i32> = x_100_phi;
-    var x_78_1 : vec2<i32> = x_100;
-    x_78_1.x = (x_100.x + (x_100.y / 2));
-    let x_78 : vec2<i32> = x_78_1;
-
-    continuing {
-      x_81 = (x_80 + 1);
-      x_77_phi = x_78;
-      x_80_phi = x_81;
-    }
-  }
-  let x_105 : i32 = x_77.x;
-  x_111_phi = x_77;
-  if ((x_105 < 0)) {
-    x_110 = vec2<i32>(0, 0);
-    x_110.x = -(x_105);
-    x_111_phi = x_110;
-  }
-  let x_111 : vec2<i32> = x_111_phi;
-  x_113_phi = x_111;
-  loop {
-    var x_114 : vec2<i32>;
-    let x_113 : vec2<i32> = x_113_phi;
-    x_116 = x_113.x;
-    if ((x_116 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_114 = vec2<i32>(0, 0);
-      x_114.x = bitcast<i32>((x_116 - bitcast<i32>(16)));
-      x_113_phi = x_114;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_121 : vec4<f32> = indexable[x_116];
-  x_GLF_color = x_121;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.hlsl
deleted file mode 100644
index 074ee65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,109 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_77 = int2(0, 0);
-  int2 x_110 = int2(0, 0);
-  int x_116 = 0;
-  int2 x_77_phi = int2(0, 0);
-  int x_80_phi = 0;
-  int2 x_111_phi = int2(0, 0);
-  int2 x_113_phi = int2(0, 0);
-  const float4 x_56 = gl_FragCoord;
-  const float2 x_59 = asfloat(x_6[0].xy);
-  const float2 x_60 = (float2(x_56.x, x_56.y) / x_59);
-  const int x_63 = int((x_60.x * 8.0f));
-  const int x_66 = int((x_60.y * 8.0f));
-  const int2 x_75 = int2(((((x_63 & 5) | (x_66 & 10)) * 8) + ((x_66 & 5) | (x_63 & 10))), 0);
-  x_77_phi = x_75;
-  x_80_phi = 0;
-  while (true) {
-    int2 x_91 = int2(0, 0);
-    int2 x_99 = int2(0, 0);
-    int x_81 = 0;
-    int2 x_92_phi = int2(0, 0);
-    int2 x_100_phi = int2(0, 0);
-    x_77 = x_77_phi;
-    const int x_80 = x_80_phi;
-    if ((x_80 < 100)) {
-    } else {
-      break;
-    }
-    x_92_phi = x_77;
-    if ((x_77.x > 0)) {
-      x_91 = x_77;
-      x_91.y = (x_77.y - 1);
-      x_92_phi = x_91;
-    }
-    const int2 x_92 = x_92_phi;
-    x_100_phi = x_92;
-    if ((x_92.x < 0)) {
-      x_99 = x_92;
-      x_99.y = (x_92.y + 1);
-      x_100_phi = x_99;
-    }
-    const int2 x_100 = x_100_phi;
-    int2 x_78_1 = x_100;
-    x_78_1.x = (x_100.x + (x_100.y / 2));
-    const int2 x_78 = x_78_1;
-    {
-      x_81 = (x_80 + 1);
-      x_77_phi = x_78;
-      x_80_phi = x_81;
-    }
-  }
-  const int x_105 = x_77.x;
-  x_111_phi = x_77;
-  if ((x_105 < 0)) {
-    x_110 = int2(0, 0);
-    x_110.x = -(x_105);
-    x_111_phi = x_110;
-  }
-  x_113_phi = x_111_phi;
-  while (true) {
-    int2 x_114 = int2(0, 0);
-    x_116 = x_113_phi.x;
-    if ((x_116 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_114 = int2(0, 0);
-      x_114.x = asint((x_116 - asint(16)));
-      x_113_phi = x_114;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_121 = indexable[x_116];
-  x_GLF_color = x_121;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.msl
deleted file mode 100644
index c7cd04d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.msl
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int2 x_77 = 0;
-  int2 x_110 = 0;
-  int x_116 = 0;
-  int2 x_77_phi = 0;
-  int x_80_phi = 0;
-  int2 x_111_phi = 0;
-  int2 x_113_phi = 0;
-  float4 const x_56 = *(tint_symbol_4);
-  float2 const x_59 = x_6.resolution;
-  float2 const x_60 = (float2(x_56.x, x_56.y) / x_59);
-  int const x_63 = int((x_60.x * 8.0f));
-  int const x_66 = int((x_60.y * 8.0f));
-  int2 const x_75 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_63 & 5) | (x_66 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_66 & 5) | (x_63 & 10))))), 0);
-  x_77_phi = x_75;
-  x_80_phi = 0;
-  while (true) {
-    int2 x_91 = 0;
-    int2 x_99 = 0;
-    int x_81 = 0;
-    int2 x_92_phi = 0;
-    int2 x_100_phi = 0;
-    x_77 = x_77_phi;
-    int const x_80 = x_80_phi;
-    if ((x_80 < 100)) {
-    } else {
-      break;
-    }
-    x_92_phi = x_77;
-    if ((x_77.x > 0)) {
-      x_91 = x_77;
-      x_91.y = as_type<int>((as_type<uint>(x_77.y) - as_type<uint>(1)));
-      x_92_phi = x_91;
-    }
-    int2 const x_92 = x_92_phi;
-    x_100_phi = x_92;
-    if ((x_92.x < 0)) {
-      x_99 = x_92;
-      x_99.y = as_type<int>((as_type<uint>(x_92.y) + as_type<uint>(1)));
-      x_100_phi = x_99;
-    }
-    int2 const x_100 = x_100_phi;
-    int2 x_78_1 = x_100;
-    x_78_1.x = as_type<int>((as_type<uint>(x_100.x) + as_type<uint>((x_100.y / 2))));
-    int2 const x_78 = x_78_1;
-    {
-      x_81 = as_type<int>((as_type<uint>(x_80) + as_type<uint>(1)));
-      x_77_phi = x_78;
-      x_80_phi = x_81;
-    }
-  }
-  int const x_105 = x_77.x;
-  x_111_phi = x_77;
-  if ((x_105 < 0)) {
-    x_110 = int2(0, 0);
-    x_110.x = tint_unary_minus(x_105);
-    x_111_phi = x_110;
-  }
-  int2 const x_111 = x_111_phi;
-  x_113_phi = x_111;
-  while (true) {
-    int2 x_114 = 0;
-    int2 const x_113 = x_113_phi;
-    x_116 = x_113.x;
-    if ((x_116 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_114 = int2(0, 0);
-      x_114.x = as_type<int>(as_type<int>((as_type<uint>(x_116) - as_type<uint>(as_type<int>(16)))));
-      x_113_phi = x_114;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_121 = indexable.arr[x_116];
-  *(tint_symbol_5) = x_121;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.spvasm
deleted file mode 100644
index 1040dc6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,292 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 185
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_77 "x_77"
-               OpName %x_110 "x_110"
-               OpName %x_116 "x_116"
-               OpName %x_77_phi "x_77_phi"
-               OpName %x_80_phi "x_80_phi"
-               OpName %x_111_phi "x_111_phi"
-               OpName %x_113_phi "x_113_phi"
-               OpName %x_91 "x_91"
-               OpName %x_99 "x_99"
-               OpName %x_81 "x_81"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_100_phi "x_100_phi"
-               OpName %x_78_1 "x_78_1"
-               OpName %x_114 "x_114"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-        %124 = OpConstantComposite %v2int %int_0 %int_0
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %172 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_77 = OpVariable %_ptr_Function_v2int Function %29
-      %x_110 = OpVariable %_ptr_Function_v2int Function %29
-      %x_116 = OpVariable %_ptr_Function_int Function %33
-   %x_77_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_80_phi = OpVariable %_ptr_Function_int Function %33
-  %x_111_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_113_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_91 = OpVariable %_ptr_Function_v2int Function %29
-       %x_99 = OpVariable %_ptr_Function_v2int Function %29
-       %x_81 = OpVariable %_ptr_Function_int Function %33
-   %x_92_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_100_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_78_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_114 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_77_phi %66
-               OpStore %x_80_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_77_phi
-               OpStore %x_77 %76
-         %77 = OpLoad %int %x_80_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_77
-               OpStore %x_92_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_77 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_77
-               OpStore %x_91 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_91 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_77 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_91
-               OpStore %x_92_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_92_phi
-               OpStore %x_100_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_99 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_99 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_99
-               OpStore %x_100_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_100_phi
-               OpStore %x_78_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_78_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_78_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_81 %116
-               OpStore %x_77_phi %115
-        %117 = OpLoad %int %x_81
-               OpStore %x_80_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_77 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_77
-               OpStore %x_111_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-               OpStore %x_110 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_110 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_110
-               OpStore %x_111_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_111_phi
-               OpStore %x_113_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_113_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_116 %135
-        %136 = OpLoad %int %x_116
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_114 %124
-        %142 = OpAccessChain %_ptr_Function_int %x_114 %uint_0
-        %144 = OpLoad %int %x_116
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_114
-               OpStore %x_113_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %int %x_116
-        %170 = OpAccessChain %_ptr_Function_v4float %indexable %168
-        %171 = OpLoad %v4float %170
-               OpStore %x_GLF_color %171
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %172
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %176 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %177 = OpFunctionCall %void %main_1
-        %178 = OpLoad %v4float %x_GLF_color
-        %179 = OpCompositeConstruct %main_out %178
-               OpReturnValue %179
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %181 = OpLabel
-        %183 = OpLoad %v4float %gl_FragCoord_param_1
-        %182 = OpFunctionCall %main_out %main_inner %183
-        %184 = OpCompositeExtract %v4float %182 0
-               OpStore %x_GLF_color_1_1 %184
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.wgsl
deleted file mode 100644
index be331aa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,105 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_77 : vec2<i32>;
-  var x_110 : vec2<i32>;
-  var x_116 : i32;
-  var x_77_phi : vec2<i32>;
-  var x_80_phi : i32;
-  var x_111_phi : vec2<i32>;
-  var x_113_phi : vec2<i32>;
-  let x_56 : vec4<f32> = gl_FragCoord;
-  let x_59 : vec2<f32> = x_6.resolution;
-  let x_60 : vec2<f32> = (vec2<f32>(x_56.x, x_56.y) / x_59);
-  let x_63 : i32 = i32((x_60.x * 8.0));
-  let x_66 : i32 = i32((x_60.y * 8.0));
-  let x_75 : vec2<i32> = vec2<i32>(((((x_63 & 5) | (x_66 & 10)) * 8) + ((x_66 & 5) | (x_63 & 10))), 0);
-  x_77_phi = x_75;
-  x_80_phi = 0;
-  loop {
-    var x_91 : vec2<i32>;
-    var x_99 : vec2<i32>;
-    var x_81 : i32;
-    var x_92_phi : vec2<i32>;
-    var x_100_phi : vec2<i32>;
-    x_77 = x_77_phi;
-    let x_80 : i32 = x_80_phi;
-    if ((x_80 < 100)) {
-    } else {
-      break;
-    }
-    x_92_phi = x_77;
-    if ((x_77.x > 0)) {
-      x_91 = x_77;
-      x_91.y = (x_77.y - 1);
-      x_92_phi = x_91;
-    }
-    let x_92 : vec2<i32> = x_92_phi;
-    x_100_phi = x_92;
-    if ((x_92.x < 0)) {
-      x_99 = x_92;
-      x_99.y = (x_92.y + 1);
-      x_100_phi = x_99;
-    }
-    let x_100 : vec2<i32> = x_100_phi;
-    var x_78_1 : vec2<i32> = x_100;
-    x_78_1.x = (x_100.x + (x_100.y / 2));
-    let x_78 : vec2<i32> = x_78_1;
-
-    continuing {
-      x_81 = (x_80 + 1);
-      x_77_phi = x_78;
-      x_80_phi = x_81;
-    }
-  }
-  let x_105 : i32 = x_77.x;
-  x_111_phi = x_77;
-  if ((x_105 < 0)) {
-    x_110 = vec2<i32>(0, 0);
-    x_110.x = -(x_105);
-    x_111_phi = x_110;
-  }
-  let x_111 : vec2<i32> = x_111_phi;
-  x_113_phi = x_111;
-  loop {
-    var x_114 : vec2<i32>;
-    let x_113 : vec2<i32> = x_113_phi;
-    x_116 = x_113.x;
-    if ((x_116 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_114 = vec2<i32>(0, 0);
-      x_114.x = bitcast<i32>((x_116 - bitcast<i32>(16)));
-      x_113_phi = x_114;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_121 : vec4<f32> = indexable[x_116];
-  x_GLF_color = x_121;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.hlsl
deleted file mode 100644
index 9e536da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,113 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_80 = int2(0, 0);
-  int2 x_113 = int2(0, 0);
-  int x_119 = 0;
-  int2 x_80_phi = int2(0, 0);
-  int x_83_phi = 0;
-  int2 x_114_phi = int2(0, 0);
-  int2 x_116_phi = int2(0, 0);
-  const float4 x_59 = gl_FragCoord;
-  const float2 x_62 = asfloat(x_6[0].xy);
-  const float2 x_63 = (float2(x_59.x, x_59.y) / x_62);
-  const int x_66 = int((x_63.x * 8.0f));
-  const int x_69 = int((x_63.y * 8.0f));
-  const int2 x_78 = int2(((((x_66 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_66 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = int2(0, 0);
-    int2 x_102 = int2(0, 0);
-    int x_84 = 0;
-    int2 x_95_phi = int2(0, 0);
-    int2 x_103_phi = int2(0, 0);
-    x_80 = x_80_phi;
-    const int x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    const int2 x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    const int2 x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    const int2 x_81 = x_81_1;
-    {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  const int x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = int2(0, 0);
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  x_116_phi = x_114_phi;
-  while (true) {
-    int2 x_117 = int2(0, 0);
-    x_119 = x_116_phi.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = int2(0, 0);
-      x_117.x = asint((x_119 - asint(16)));
-      x_116_phi = x_117;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_123[16] = indexable;
-  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  indexable = tint_symbol_5;
-  indexable = x_123;
-  const float4 x_125 = indexable[x_119];
-  x_GLF_color = x_125;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.msl
deleted file mode 100644
index 33cf6cc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.msl
+++ /dev/null
@@ -1,123 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  tint_array_wrapper indexable = {};
-  int2 x_80 = 0;
-  int2 x_113 = 0;
-  int x_119 = 0;
-  int2 x_80_phi = 0;
-  int x_83_phi = 0;
-  int2 x_114_phi = 0;
-  int2 x_116_phi = 0;
-  float4 const x_59 = *(tint_symbol_5);
-  float2 const x_62 = x_6.resolution;
-  float2 const x_63 = (float2(x_59.x, x_59.y) / x_62);
-  int const x_66 = int((x_63.x * 8.0f));
-  int const x_69 = int((x_63.y * 8.0f));
-  int2 const x_78 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_66 & 5) | (x_69 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_69 & 5) | (x_66 & 10))))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = 0;
-    int2 x_102 = 0;
-    int x_84 = 0;
-    int2 x_95_phi = 0;
-    int2 x_103_phi = 0;
-    x_80 = x_80_phi;
-    int const x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = as_type<int>((as_type<uint>(x_80.y) - as_type<uint>(1)));
-      x_95_phi = x_94;
-    }
-    int2 const x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = as_type<int>((as_type<uint>(x_95.y) + as_type<uint>(1)));
-      x_103_phi = x_102;
-    }
-    int2 const x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = as_type<int>((as_type<uint>(x_103.x) + as_type<uint>((x_103.y / 2))));
-    int2 const x_81 = x_81_1;
-    {
-      x_84 = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  int const x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = int2(0, 0);
-    x_113.x = tint_unary_minus(x_108);
-    x_114_phi = x_113;
-  }
-  int2 const x_114 = x_114_phi;
-  x_116_phi = x_114;
-  while (true) {
-    int2 x_117 = 0;
-    int2 const x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = int2(0, 0);
-      x_117.x = as_type<int>(as_type<int>((as_type<uint>(x_119) - as_type<uint>(as_type<int>(16)))));
-      x_116_phi = x_117;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  tint_array_wrapper const x_123 = indexable;
-  tint_array_wrapper const tint_symbol_3 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  indexable = tint_symbol_3;
-  indexable = x_123;
-  float4 const x_125 = indexable.arr[x_119];
-  *(tint_symbol_6) = x_125;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.spvasm
deleted file mode 100644
index 56656ad..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,297 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 188
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_80 "x_80"
-               OpName %x_113 "x_113"
-               OpName %x_119 "x_119"
-               OpName %x_80_phi "x_80_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_116_phi "x_116_phi"
-               OpName %x_94 "x_94"
-               OpName %x_102 "x_102"
-               OpName %x_84 "x_84"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_81_1 "x_81_1"
-               OpName %x_117 "x_117"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-        %124 = OpConstantComposite %v2int %int_0 %int_0
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-        %169 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %170 = OpConstantComposite %_arr_v4float_uint_16 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %175 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_80 = OpVariable %_ptr_Function_v2int Function %29
-      %x_113 = OpVariable %_ptr_Function_v2int Function %29
-      %x_119 = OpVariable %_ptr_Function_int Function %33
-   %x_80_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_83_phi = OpVariable %_ptr_Function_int Function %33
-  %x_114_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_116_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_94 = OpVariable %_ptr_Function_v2int Function %29
-      %x_102 = OpVariable %_ptr_Function_v2int Function %29
-       %x_84 = OpVariable %_ptr_Function_int Function %33
-   %x_95_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_103_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_81_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_117 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_80_phi %66
-               OpStore %x_83_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_80_phi
-               OpStore %x_80 %76
-         %77 = OpLoad %int %x_83_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_80
-               OpStore %x_95_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_80
-               OpStore %x_94 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_94 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_80 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_94
-               OpStore %x_95_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_95_phi
-               OpStore %x_103_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_102 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_102 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_102
-               OpStore %x_103_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_103_phi
-               OpStore %x_81_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_81_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_81_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_84 %116
-               OpStore %x_80_phi %115
-        %117 = OpLoad %int %x_84
-               OpStore %x_83_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_80
-               OpStore %x_114_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-               OpStore %x_113 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_113 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_113
-               OpStore %x_114_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_114_phi
-               OpStore %x_116_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_116_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_119 %135
-        %136 = OpLoad %int %x_119
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_117 %124
-        %142 = OpAccessChain %_ptr_Function_int %x_117 %uint_0
-        %144 = OpLoad %int %x_119
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_117
-               OpStore %x_116_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %_arr_v4float_uint_16 %indexable
-               OpStore %indexable %170
-               OpStore %indexable %168
-        %171 = OpLoad %int %x_119
-        %173 = OpAccessChain %_ptr_Function_v4float %indexable %171
-        %174 = OpLoad %v4float %173
-               OpStore %x_GLF_color %174
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %175
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %179 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %180 = OpFunctionCall %void %main_1
-        %181 = OpLoad %v4float %x_GLF_color
-        %182 = OpCompositeConstruct %main_out %181
-               OpReturnValue %182
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %184 = OpLabel
-        %186 = OpLoad %v4float %gl_FragCoord_param_1
-        %185 = OpFunctionCall %main_out %main_inner %186
-        %187 = OpCompositeExtract %v4float %185 0
-               OpStore %x_GLF_color_1_1 %187
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.wgsl
deleted file mode 100644
index 0424d49..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,108 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_80 : vec2<i32>;
-  var x_113 : vec2<i32>;
-  var x_119 : i32;
-  var x_80_phi : vec2<i32>;
-  var x_83_phi : i32;
-  var x_114_phi : vec2<i32>;
-  var x_116_phi : vec2<i32>;
-  let x_59 : vec4<f32> = gl_FragCoord;
-  let x_62 : vec2<f32> = x_6.resolution;
-  let x_63 : vec2<f32> = (vec2<f32>(x_59.x, x_59.y) / x_62);
-  let x_66 : i32 = i32((x_63.x * 8.0));
-  let x_69 : i32 = i32((x_63.y * 8.0));
-  let x_78 : vec2<i32> = vec2<i32>(((((x_66 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_66 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  loop {
-    var x_94 : vec2<i32>;
-    var x_102 : vec2<i32>;
-    var x_84 : i32;
-    var x_95_phi : vec2<i32>;
-    var x_103_phi : vec2<i32>;
-    x_80 = x_80_phi;
-    let x_83 : i32 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    let x_95 : vec2<i32> = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    let x_103 : vec2<i32> = x_103_phi;
-    var x_81_1 : vec2<i32> = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    let x_81 : vec2<i32> = x_81_1;
-
-    continuing {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  let x_108 : i32 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = vec2<i32>(0, 0);
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  let x_114 : vec2<i32> = x_114_phi;
-  x_116_phi = x_114;
-  loop {
-    var x_117 : vec2<i32>;
-    let x_116 : vec2<i32> = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_117 = vec2<i32>(0, 0);
-      x_117.x = bitcast<i32>((x_119 - bitcast<i32>(16)));
-      x_116_phi = x_117;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_123 : array<vec4<f32>, 16> = indexable;
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  indexable = x_123;
-  let x_125 : vec4<f32> = indexable[x_119];
-  x_GLF_color = x_125;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.hlsl
deleted file mode 100644
index 9e536da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,113 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_80 = int2(0, 0);
-  int2 x_113 = int2(0, 0);
-  int x_119 = 0;
-  int2 x_80_phi = int2(0, 0);
-  int x_83_phi = 0;
-  int2 x_114_phi = int2(0, 0);
-  int2 x_116_phi = int2(0, 0);
-  const float4 x_59 = gl_FragCoord;
-  const float2 x_62 = asfloat(x_6[0].xy);
-  const float2 x_63 = (float2(x_59.x, x_59.y) / x_62);
-  const int x_66 = int((x_63.x * 8.0f));
-  const int x_69 = int((x_63.y * 8.0f));
-  const int2 x_78 = int2(((((x_66 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_66 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = int2(0, 0);
-    int2 x_102 = int2(0, 0);
-    int x_84 = 0;
-    int2 x_95_phi = int2(0, 0);
-    int2 x_103_phi = int2(0, 0);
-    x_80 = x_80_phi;
-    const int x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    const int2 x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    const int2 x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    const int2 x_81 = x_81_1;
-    {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  const int x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = int2(0, 0);
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  x_116_phi = x_114_phi;
-  while (true) {
-    int2 x_117 = int2(0, 0);
-    x_119 = x_116_phi.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = int2(0, 0);
-      x_117.x = asint((x_119 - asint(16)));
-      x_116_phi = x_117;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_123[16] = indexable;
-  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  indexable = tint_symbol_5;
-  indexable = x_123;
-  const float4 x_125 = indexable[x_119];
-  x_GLF_color = x_125;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.msl
deleted file mode 100644
index 33cf6cc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.msl
+++ /dev/null
@@ -1,123 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  tint_array_wrapper indexable = {};
-  int2 x_80 = 0;
-  int2 x_113 = 0;
-  int x_119 = 0;
-  int2 x_80_phi = 0;
-  int x_83_phi = 0;
-  int2 x_114_phi = 0;
-  int2 x_116_phi = 0;
-  float4 const x_59 = *(tint_symbol_5);
-  float2 const x_62 = x_6.resolution;
-  float2 const x_63 = (float2(x_59.x, x_59.y) / x_62);
-  int const x_66 = int((x_63.x * 8.0f));
-  int const x_69 = int((x_63.y * 8.0f));
-  int2 const x_78 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_66 & 5) | (x_69 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_69 & 5) | (x_66 & 10))))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = 0;
-    int2 x_102 = 0;
-    int x_84 = 0;
-    int2 x_95_phi = 0;
-    int2 x_103_phi = 0;
-    x_80 = x_80_phi;
-    int const x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = as_type<int>((as_type<uint>(x_80.y) - as_type<uint>(1)));
-      x_95_phi = x_94;
-    }
-    int2 const x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = as_type<int>((as_type<uint>(x_95.y) + as_type<uint>(1)));
-      x_103_phi = x_102;
-    }
-    int2 const x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = as_type<int>((as_type<uint>(x_103.x) + as_type<uint>((x_103.y / 2))));
-    int2 const x_81 = x_81_1;
-    {
-      x_84 = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  int const x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = int2(0, 0);
-    x_113.x = tint_unary_minus(x_108);
-    x_114_phi = x_113;
-  }
-  int2 const x_114 = x_114_phi;
-  x_116_phi = x_114;
-  while (true) {
-    int2 x_117 = 0;
-    int2 const x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = int2(0, 0);
-      x_117.x = as_type<int>(as_type<int>((as_type<uint>(x_119) - as_type<uint>(as_type<int>(16)))));
-      x_116_phi = x_117;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  tint_array_wrapper const x_123 = indexable;
-  tint_array_wrapper const tint_symbol_3 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  indexable = tint_symbol_3;
-  indexable = x_123;
-  float4 const x_125 = indexable.arr[x_119];
-  *(tint_symbol_6) = x_125;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.spvasm
deleted file mode 100644
index 56656ad..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,297 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 188
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_80 "x_80"
-               OpName %x_113 "x_113"
-               OpName %x_119 "x_119"
-               OpName %x_80_phi "x_80_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_116_phi "x_116_phi"
-               OpName %x_94 "x_94"
-               OpName %x_102 "x_102"
-               OpName %x_84 "x_84"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_81_1 "x_81_1"
-               OpName %x_117 "x_117"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-        %124 = OpConstantComposite %v2int %int_0 %int_0
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-        %169 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %170 = OpConstantComposite %_arr_v4float_uint_16 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %175 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_80 = OpVariable %_ptr_Function_v2int Function %29
-      %x_113 = OpVariable %_ptr_Function_v2int Function %29
-      %x_119 = OpVariable %_ptr_Function_int Function %33
-   %x_80_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_83_phi = OpVariable %_ptr_Function_int Function %33
-  %x_114_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_116_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_94 = OpVariable %_ptr_Function_v2int Function %29
-      %x_102 = OpVariable %_ptr_Function_v2int Function %29
-       %x_84 = OpVariable %_ptr_Function_int Function %33
-   %x_95_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_103_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_81_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_117 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_80_phi %66
-               OpStore %x_83_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_80_phi
-               OpStore %x_80 %76
-         %77 = OpLoad %int %x_83_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_80
-               OpStore %x_95_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_80
-               OpStore %x_94 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_94 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_80 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_94
-               OpStore %x_95_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_95_phi
-               OpStore %x_103_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_102 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_102 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_102
-               OpStore %x_103_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_103_phi
-               OpStore %x_81_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_81_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_81_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_84 %116
-               OpStore %x_80_phi %115
-        %117 = OpLoad %int %x_84
-               OpStore %x_83_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_80
-               OpStore %x_114_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-               OpStore %x_113 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_113 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_113
-               OpStore %x_114_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_114_phi
-               OpStore %x_116_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_116_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_119 %135
-        %136 = OpLoad %int %x_119
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_117 %124
-        %142 = OpAccessChain %_ptr_Function_int %x_117 %uint_0
-        %144 = OpLoad %int %x_119
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_117
-               OpStore %x_116_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %_arr_v4float_uint_16 %indexable
-               OpStore %indexable %170
-               OpStore %indexable %168
-        %171 = OpLoad %int %x_119
-        %173 = OpAccessChain %_ptr_Function_v4float %indexable %171
-        %174 = OpLoad %v4float %173
-               OpStore %x_GLF_color %174
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %175
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %179 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %180 = OpFunctionCall %void %main_1
-        %181 = OpLoad %v4float %x_GLF_color
-        %182 = OpCompositeConstruct %main_out %181
-               OpReturnValue %182
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %184 = OpLabel
-        %186 = OpLoad %v4float %gl_FragCoord_param_1
-        %185 = OpFunctionCall %main_out %main_inner %186
-        %187 = OpCompositeExtract %v4float %185 0
-               OpStore %x_GLF_color_1_1 %187
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.wgsl
deleted file mode 100644
index 0424d49..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,108 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_80 : vec2<i32>;
-  var x_113 : vec2<i32>;
-  var x_119 : i32;
-  var x_80_phi : vec2<i32>;
-  var x_83_phi : i32;
-  var x_114_phi : vec2<i32>;
-  var x_116_phi : vec2<i32>;
-  let x_59 : vec4<f32> = gl_FragCoord;
-  let x_62 : vec2<f32> = x_6.resolution;
-  let x_63 : vec2<f32> = (vec2<f32>(x_59.x, x_59.y) / x_62);
-  let x_66 : i32 = i32((x_63.x * 8.0));
-  let x_69 : i32 = i32((x_63.y * 8.0));
-  let x_78 : vec2<i32> = vec2<i32>(((((x_66 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_66 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  loop {
-    var x_94 : vec2<i32>;
-    var x_102 : vec2<i32>;
-    var x_84 : i32;
-    var x_95_phi : vec2<i32>;
-    var x_103_phi : vec2<i32>;
-    x_80 = x_80_phi;
-    let x_83 : i32 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    let x_95 : vec2<i32> = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    let x_103 : vec2<i32> = x_103_phi;
-    var x_81_1 : vec2<i32> = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    let x_81 : vec2<i32> = x_81_1;
-
-    continuing {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  let x_108 : i32 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = vec2<i32>(0, 0);
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  let x_114 : vec2<i32> = x_114_phi;
-  x_116_phi = x_114;
-  loop {
-    var x_117 : vec2<i32>;
-    let x_116 : vec2<i32> = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_117 = vec2<i32>(0, 0);
-      x_117.x = bitcast<i32>((x_119 - bitcast<i32>(16)));
-      x_116_phi = x_117;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_123 : array<vec4<f32>, 16> = indexable;
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  indexable = x_123;
-  let x_125 : vec4<f32> = indexable[x_119];
-  x_GLF_color = x_125;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.hlsl
deleted file mode 100644
index f697ee2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_76 = int2(0, 0);
-  int2 x_109 = int2(0, 0);
-  int x_115 = 0;
-  int2 x_76_phi = int2(0, 0);
-  int x_79_phi = 0;
-  int2 x_110_phi = int2(0, 0);
-  int2 x_112_phi = int2(0, 0);
-  const float4 x_55 = gl_FragCoord;
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_59 = (float2(x_55.x, x_55.y) / x_58);
-  const int x_62 = int((x_59.x * 8.0f));
-  const int x_65 = int((x_59.y * 8.0f));
-  const int2 x_74 = int2(((((x_62 & 5) | (x_65 & 10)) * 8) + ((x_65 & 5) | (x_62 & 10))), 0);
-  x_76_phi = x_74;
-  x_79_phi = 0;
-  while (true) {
-    int2 x_90 = int2(0, 0);
-    int2 x_98 = int2(0, 0);
-    int x_80 = 0;
-    int2 x_91_phi = int2(0, 0);
-    int2 x_99_phi = int2(0, 0);
-    x_76 = x_76_phi;
-    const int x_79 = x_79_phi;
-    if ((x_79 < 100)) {
-    } else {
-      break;
-    }
-    x_91_phi = x_76;
-    if ((x_76.x > 0)) {
-      x_90 = x_76;
-      x_90.y = (x_76.y - 1);
-      x_91_phi = x_90;
-    }
-    const int2 x_91 = x_91_phi;
-    x_99_phi = x_91;
-    if ((x_91.x < 0)) {
-      x_98 = x_91;
-      x_98.y = (x_91.y + 1);
-      x_99_phi = x_98;
-    }
-    const int2 x_99 = x_99_phi;
-    int2 x_77_1 = x_99;
-    x_77_1.x = (x_99.x + (x_99.y / 2));
-    const int2 x_77 = x_77_1;
-    {
-      x_80 = (x_79 + 1);
-      x_76_phi = x_77;
-      x_79_phi = x_80;
-    }
-  }
-  const int x_104 = x_76.x;
-  x_110_phi = x_76;
-  if ((x_104 < 0)) {
-    x_109 = x_76;
-    x_109.x = -(x_104);
-    x_110_phi = x_109;
-  }
-  x_112_phi = x_110_phi;
-  while (true) {
-    int2 x_113 = int2(0, 0);
-    const int2 x_112 = x_112_phi;
-    x_115 = x_112.x;
-    if ((x_115 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_113 = x_112;
-      x_113.x = asint((x_115 - asint(16)));
-      x_112_phi = x_113;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_120 = indexable[x_115];
-  x_GLF_color = x_120;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.msl
deleted file mode 100644
index 50cfb2c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.msl
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int2 x_76 = 0;
-  int2 x_109 = 0;
-  int x_115 = 0;
-  int2 x_76_phi = 0;
-  int x_79_phi = 0;
-  int2 x_110_phi = 0;
-  int2 x_112_phi = 0;
-  float4 const x_55 = *(tint_symbol_4);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_59 = (float2(x_55.x, x_55.y) / x_58);
-  int const x_62 = int((x_59.x * 8.0f));
-  int const x_65 = int((x_59.y * 8.0f));
-  int2 const x_74 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_62 & 5) | (x_65 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_65 & 5) | (x_62 & 10))))), 0);
-  x_76_phi = x_74;
-  x_79_phi = 0;
-  while (true) {
-    int2 x_90 = 0;
-    int2 x_98 = 0;
-    int x_80 = 0;
-    int2 x_91_phi = 0;
-    int2 x_99_phi = 0;
-    x_76 = x_76_phi;
-    int const x_79 = x_79_phi;
-    if ((x_79 < 100)) {
-    } else {
-      break;
-    }
-    x_91_phi = x_76;
-    if ((x_76.x > 0)) {
-      x_90 = x_76;
-      x_90.y = as_type<int>((as_type<uint>(x_76.y) - as_type<uint>(1)));
-      x_91_phi = x_90;
-    }
-    int2 const x_91 = x_91_phi;
-    x_99_phi = x_91;
-    if ((x_91.x < 0)) {
-      x_98 = x_91;
-      x_98.y = as_type<int>((as_type<uint>(x_91.y) + as_type<uint>(1)));
-      x_99_phi = x_98;
-    }
-    int2 const x_99 = x_99_phi;
-    int2 x_77_1 = x_99;
-    x_77_1.x = as_type<int>((as_type<uint>(x_99.x) + as_type<uint>((x_99.y / 2))));
-    int2 const x_77 = x_77_1;
-    {
-      x_80 = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-      x_76_phi = x_77;
-      x_79_phi = x_80;
-    }
-  }
-  int const x_104 = x_76.x;
-  x_110_phi = x_76;
-  if ((x_104 < 0)) {
-    x_109 = x_76;
-    x_109.x = tint_unary_minus(x_104);
-    x_110_phi = x_109;
-  }
-  int2 const x_110 = x_110_phi;
-  x_112_phi = x_110;
-  while (true) {
-    int2 x_113 = 0;
-    int2 const x_112 = x_112_phi;
-    x_115 = x_112.x;
-    if ((x_115 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_113 = x_112;
-      x_113.x = as_type<int>(as_type<int>((as_type<uint>(x_115) - as_type<uint>(as_type<int>(16)))));
-      x_112_phi = x_113;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_120 = indexable.arr[x_115];
-  *(tint_symbol_5) = x_120;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.spvasm
deleted file mode 100644
index 4dc817a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,292 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 185
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_76 "x_76"
-               OpName %x_109 "x_109"
-               OpName %x_115 "x_115"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_79_phi "x_79_phi"
-               OpName %x_110_phi "x_110_phi"
-               OpName %x_112_phi "x_112_phi"
-               OpName %x_90 "x_90"
-               OpName %x_98 "x_98"
-               OpName %x_80 "x_80"
-               OpName %x_91_phi "x_91_phi"
-               OpName %x_99_phi "x_99_phi"
-               OpName %x_77_1 "x_77_1"
-               OpName %x_113 "x_113"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %172 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_76 = OpVariable %_ptr_Function_v2int Function %29
-      %x_109 = OpVariable %_ptr_Function_v2int Function %29
-      %x_115 = OpVariable %_ptr_Function_int Function %33
-   %x_76_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_79_phi = OpVariable %_ptr_Function_int Function %33
-  %x_110_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_112_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_90 = OpVariable %_ptr_Function_v2int Function %29
-       %x_98 = OpVariable %_ptr_Function_v2int Function %29
-       %x_80 = OpVariable %_ptr_Function_int Function %33
-   %x_91_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_99_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_77_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_113 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_76_phi %66
-               OpStore %x_79_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_76_phi
-               OpStore %x_76 %76
-         %77 = OpLoad %int %x_79_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_76
-               OpStore %x_91_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_76 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_76
-               OpStore %x_90 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_90 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_76 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_90
-               OpStore %x_91_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_91_phi
-               OpStore %x_99_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_98 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_98 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_98
-               OpStore %x_99_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_99_phi
-               OpStore %x_77_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_77_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_77_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_80 %116
-               OpStore %x_76_phi %115
-        %117 = OpLoad %int %x_80
-               OpStore %x_79_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_76 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_76
-               OpStore %x_110_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-        %124 = OpLoad %v2int %x_76
-               OpStore %x_109 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_109 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_109
-               OpStore %x_110_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_110_phi
-               OpStore %x_112_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_112_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_115 %135
-        %136 = OpLoad %int %x_115
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_113 %134
-        %142 = OpAccessChain %_ptr_Function_int %x_113 %uint_0
-        %144 = OpLoad %int %x_115
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_113
-               OpStore %x_112_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %int %x_115
-        %170 = OpAccessChain %_ptr_Function_v4float %indexable %168
-        %171 = OpLoad %v4float %170
-               OpStore %x_GLF_color %171
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %172
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %176 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %177 = OpFunctionCall %void %main_1
-        %178 = OpLoad %v4float %x_GLF_color
-        %179 = OpCompositeConstruct %main_out %178
-               OpReturnValue %179
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %181 = OpLabel
-        %183 = OpLoad %v4float %gl_FragCoord_param_1
-        %182 = OpFunctionCall %main_out %main_inner %183
-        %184 = OpCompositeExtract %v4float %182 0
-               OpStore %x_GLF_color_1_1 %184
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.wgsl
deleted file mode 100644
index 8fe4ab4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,105 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_76 : vec2<i32>;
-  var x_109 : vec2<i32>;
-  var x_115 : i32;
-  var x_76_phi : vec2<i32>;
-  var x_79_phi : i32;
-  var x_110_phi : vec2<i32>;
-  var x_112_phi : vec2<i32>;
-  let x_55 : vec4<f32> = gl_FragCoord;
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_59 : vec2<f32> = (vec2<f32>(x_55.x, x_55.y) / x_58);
-  let x_62 : i32 = i32((x_59.x * 8.0));
-  let x_65 : i32 = i32((x_59.y * 8.0));
-  let x_74 : vec2<i32> = vec2<i32>(((((x_62 & 5) | (x_65 & 10)) * 8) + ((x_65 & 5) | (x_62 & 10))), 0);
-  x_76_phi = x_74;
-  x_79_phi = 0;
-  loop {
-    var x_90 : vec2<i32>;
-    var x_98 : vec2<i32>;
-    var x_80 : i32;
-    var x_91_phi : vec2<i32>;
-    var x_99_phi : vec2<i32>;
-    x_76 = x_76_phi;
-    let x_79 : i32 = x_79_phi;
-    if ((x_79 < 100)) {
-    } else {
-      break;
-    }
-    x_91_phi = x_76;
-    if ((x_76.x > 0)) {
-      x_90 = x_76;
-      x_90.y = (x_76.y - 1);
-      x_91_phi = x_90;
-    }
-    let x_91 : vec2<i32> = x_91_phi;
-    x_99_phi = x_91;
-    if ((x_91.x < 0)) {
-      x_98 = x_91;
-      x_98.y = (x_91.y + 1);
-      x_99_phi = x_98;
-    }
-    let x_99 : vec2<i32> = x_99_phi;
-    var x_77_1 : vec2<i32> = x_99;
-    x_77_1.x = (x_99.x + (x_99.y / 2));
-    let x_77 : vec2<i32> = x_77_1;
-
-    continuing {
-      x_80 = (x_79 + 1);
-      x_76_phi = x_77;
-      x_79_phi = x_80;
-    }
-  }
-  let x_104 : i32 = x_76.x;
-  x_110_phi = x_76;
-  if ((x_104 < 0)) {
-    x_109 = x_76;
-    x_109.x = -(x_104);
-    x_110_phi = x_109;
-  }
-  let x_110 : vec2<i32> = x_110_phi;
-  x_112_phi = x_110;
-  loop {
-    var x_113 : vec2<i32>;
-    let x_112 : vec2<i32> = x_112_phi;
-    x_115 = x_112.x;
-    if ((x_115 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_113 = x_112;
-      x_113.x = bitcast<i32>((x_115 - bitcast<i32>(16)));
-      x_112_phi = x_113;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_120 : vec4<f32> = indexable[x_115];
-  x_GLF_color = x_120;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.hlsl
deleted file mode 100644
index f697ee2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_76 = int2(0, 0);
-  int2 x_109 = int2(0, 0);
-  int x_115 = 0;
-  int2 x_76_phi = int2(0, 0);
-  int x_79_phi = 0;
-  int2 x_110_phi = int2(0, 0);
-  int2 x_112_phi = int2(0, 0);
-  const float4 x_55 = gl_FragCoord;
-  const float2 x_58 = asfloat(x_6[0].xy);
-  const float2 x_59 = (float2(x_55.x, x_55.y) / x_58);
-  const int x_62 = int((x_59.x * 8.0f));
-  const int x_65 = int((x_59.y * 8.0f));
-  const int2 x_74 = int2(((((x_62 & 5) | (x_65 & 10)) * 8) + ((x_65 & 5) | (x_62 & 10))), 0);
-  x_76_phi = x_74;
-  x_79_phi = 0;
-  while (true) {
-    int2 x_90 = int2(0, 0);
-    int2 x_98 = int2(0, 0);
-    int x_80 = 0;
-    int2 x_91_phi = int2(0, 0);
-    int2 x_99_phi = int2(0, 0);
-    x_76 = x_76_phi;
-    const int x_79 = x_79_phi;
-    if ((x_79 < 100)) {
-    } else {
-      break;
-    }
-    x_91_phi = x_76;
-    if ((x_76.x > 0)) {
-      x_90 = x_76;
-      x_90.y = (x_76.y - 1);
-      x_91_phi = x_90;
-    }
-    const int2 x_91 = x_91_phi;
-    x_99_phi = x_91;
-    if ((x_91.x < 0)) {
-      x_98 = x_91;
-      x_98.y = (x_91.y + 1);
-      x_99_phi = x_98;
-    }
-    const int2 x_99 = x_99_phi;
-    int2 x_77_1 = x_99;
-    x_77_1.x = (x_99.x + (x_99.y / 2));
-    const int2 x_77 = x_77_1;
-    {
-      x_80 = (x_79 + 1);
-      x_76_phi = x_77;
-      x_79_phi = x_80;
-    }
-  }
-  const int x_104 = x_76.x;
-  x_110_phi = x_76;
-  if ((x_104 < 0)) {
-    x_109 = x_76;
-    x_109.x = -(x_104);
-    x_110_phi = x_109;
-  }
-  x_112_phi = x_110_phi;
-  while (true) {
-    int2 x_113 = int2(0, 0);
-    const int2 x_112 = x_112_phi;
-    x_115 = x_112.x;
-    if ((x_115 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_113 = x_112;
-      x_113.x = asint((x_115 - asint(16)));
-      x_112_phi = x_113;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_120 = indexable[x_115];
-  x_GLF_color = x_120;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.msl
deleted file mode 100644
index 50cfb2c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.msl
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int2 x_76 = 0;
-  int2 x_109 = 0;
-  int x_115 = 0;
-  int2 x_76_phi = 0;
-  int x_79_phi = 0;
-  int2 x_110_phi = 0;
-  int2 x_112_phi = 0;
-  float4 const x_55 = *(tint_symbol_4);
-  float2 const x_58 = x_6.resolution;
-  float2 const x_59 = (float2(x_55.x, x_55.y) / x_58);
-  int const x_62 = int((x_59.x * 8.0f));
-  int const x_65 = int((x_59.y * 8.0f));
-  int2 const x_74 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_62 & 5) | (x_65 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_65 & 5) | (x_62 & 10))))), 0);
-  x_76_phi = x_74;
-  x_79_phi = 0;
-  while (true) {
-    int2 x_90 = 0;
-    int2 x_98 = 0;
-    int x_80 = 0;
-    int2 x_91_phi = 0;
-    int2 x_99_phi = 0;
-    x_76 = x_76_phi;
-    int const x_79 = x_79_phi;
-    if ((x_79 < 100)) {
-    } else {
-      break;
-    }
-    x_91_phi = x_76;
-    if ((x_76.x > 0)) {
-      x_90 = x_76;
-      x_90.y = as_type<int>((as_type<uint>(x_76.y) - as_type<uint>(1)));
-      x_91_phi = x_90;
-    }
-    int2 const x_91 = x_91_phi;
-    x_99_phi = x_91;
-    if ((x_91.x < 0)) {
-      x_98 = x_91;
-      x_98.y = as_type<int>((as_type<uint>(x_91.y) + as_type<uint>(1)));
-      x_99_phi = x_98;
-    }
-    int2 const x_99 = x_99_phi;
-    int2 x_77_1 = x_99;
-    x_77_1.x = as_type<int>((as_type<uint>(x_99.x) + as_type<uint>((x_99.y / 2))));
-    int2 const x_77 = x_77_1;
-    {
-      x_80 = as_type<int>((as_type<uint>(x_79) + as_type<uint>(1)));
-      x_76_phi = x_77;
-      x_79_phi = x_80;
-    }
-  }
-  int const x_104 = x_76.x;
-  x_110_phi = x_76;
-  if ((x_104 < 0)) {
-    x_109 = x_76;
-    x_109.x = tint_unary_minus(x_104);
-    x_110_phi = x_109;
-  }
-  int2 const x_110 = x_110_phi;
-  x_112_phi = x_110;
-  while (true) {
-    int2 x_113 = 0;
-    int2 const x_112 = x_112_phi;
-    x_115 = x_112.x;
-    if ((x_115 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_113 = x_112;
-      x_113.x = as_type<int>(as_type<int>((as_type<uint>(x_115) - as_type<uint>(as_type<int>(16)))));
-      x_112_phi = x_113;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_120 = indexable.arr[x_115];
-  *(tint_symbol_5) = x_120;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.spvasm
deleted file mode 100644
index 4dc817a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,292 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 185
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_76 "x_76"
-               OpName %x_109 "x_109"
-               OpName %x_115 "x_115"
-               OpName %x_76_phi "x_76_phi"
-               OpName %x_79_phi "x_79_phi"
-               OpName %x_110_phi "x_110_phi"
-               OpName %x_112_phi "x_112_phi"
-               OpName %x_90 "x_90"
-               OpName %x_98 "x_98"
-               OpName %x_80 "x_80"
-               OpName %x_91_phi "x_91_phi"
-               OpName %x_99_phi "x_99_phi"
-               OpName %x_77_1 "x_77_1"
-               OpName %x_113 "x_113"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %172 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_76 = OpVariable %_ptr_Function_v2int Function %29
-      %x_109 = OpVariable %_ptr_Function_v2int Function %29
-      %x_115 = OpVariable %_ptr_Function_int Function %33
-   %x_76_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_79_phi = OpVariable %_ptr_Function_int Function %33
-  %x_110_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_112_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_90 = OpVariable %_ptr_Function_v2int Function %29
-       %x_98 = OpVariable %_ptr_Function_v2int Function %29
-       %x_80 = OpVariable %_ptr_Function_int Function %33
-   %x_91_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_99_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_77_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_113 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_76_phi %66
-               OpStore %x_79_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_76_phi
-               OpStore %x_76 %76
-         %77 = OpLoad %int %x_79_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_76
-               OpStore %x_91_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_76 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_76
-               OpStore %x_90 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_90 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_76 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_90
-               OpStore %x_91_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_91_phi
-               OpStore %x_99_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_98 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_98 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_98
-               OpStore %x_99_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_99_phi
-               OpStore %x_77_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_77_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_77_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_80 %116
-               OpStore %x_76_phi %115
-        %117 = OpLoad %int %x_80
-               OpStore %x_79_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_76 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_76
-               OpStore %x_110_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-        %124 = OpLoad %v2int %x_76
-               OpStore %x_109 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_109 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_109
-               OpStore %x_110_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_110_phi
-               OpStore %x_112_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_112_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_115 %135
-        %136 = OpLoad %int %x_115
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_113 %134
-        %142 = OpAccessChain %_ptr_Function_int %x_113 %uint_0
-        %144 = OpLoad %int %x_115
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_113
-               OpStore %x_112_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %int %x_115
-        %170 = OpAccessChain %_ptr_Function_v4float %indexable %168
-        %171 = OpLoad %v4float %170
-               OpStore %x_GLF_color %171
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %172
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %176 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %177 = OpFunctionCall %void %main_1
-        %178 = OpLoad %v4float %x_GLF_color
-        %179 = OpCompositeConstruct %main_out %178
-               OpReturnValue %179
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %181 = OpLabel
-        %183 = OpLoad %v4float %gl_FragCoord_param_1
-        %182 = OpFunctionCall %main_out %main_inner %183
-        %184 = OpCompositeExtract %v4float %182 0
-               OpStore %x_GLF_color_1_1 %184
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.wgsl
deleted file mode 100644
index 8fe4ab4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,105 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_76 : vec2<i32>;
-  var x_109 : vec2<i32>;
-  var x_115 : i32;
-  var x_76_phi : vec2<i32>;
-  var x_79_phi : i32;
-  var x_110_phi : vec2<i32>;
-  var x_112_phi : vec2<i32>;
-  let x_55 : vec4<f32> = gl_FragCoord;
-  let x_58 : vec2<f32> = x_6.resolution;
-  let x_59 : vec2<f32> = (vec2<f32>(x_55.x, x_55.y) / x_58);
-  let x_62 : i32 = i32((x_59.x * 8.0));
-  let x_65 : i32 = i32((x_59.y * 8.0));
-  let x_74 : vec2<i32> = vec2<i32>(((((x_62 & 5) | (x_65 & 10)) * 8) + ((x_65 & 5) | (x_62 & 10))), 0);
-  x_76_phi = x_74;
-  x_79_phi = 0;
-  loop {
-    var x_90 : vec2<i32>;
-    var x_98 : vec2<i32>;
-    var x_80 : i32;
-    var x_91_phi : vec2<i32>;
-    var x_99_phi : vec2<i32>;
-    x_76 = x_76_phi;
-    let x_79 : i32 = x_79_phi;
-    if ((x_79 < 100)) {
-    } else {
-      break;
-    }
-    x_91_phi = x_76;
-    if ((x_76.x > 0)) {
-      x_90 = x_76;
-      x_90.y = (x_76.y - 1);
-      x_91_phi = x_90;
-    }
-    let x_91 : vec2<i32> = x_91_phi;
-    x_99_phi = x_91;
-    if ((x_91.x < 0)) {
-      x_98 = x_91;
-      x_98.y = (x_91.y + 1);
-      x_99_phi = x_98;
-    }
-    let x_99 : vec2<i32> = x_99_phi;
-    var x_77_1 : vec2<i32> = x_99;
-    x_77_1.x = (x_99.x + (x_99.y / 2));
-    let x_77 : vec2<i32> = x_77_1;
-
-    continuing {
-      x_80 = (x_79 + 1);
-      x_76_phi = x_77;
-      x_79_phi = x_80;
-    }
-  }
-  let x_104 : i32 = x_76.x;
-  x_110_phi = x_76;
-  if ((x_104 < 0)) {
-    x_109 = x_76;
-    x_109.x = -(x_104);
-    x_110_phi = x_109;
-  }
-  let x_110 : vec2<i32> = x_110_phi;
-  x_112_phi = x_110;
-  loop {
-    var x_113 : vec2<i32>;
-    let x_112 : vec2<i32> = x_112_phi;
-    x_115 = x_112.x;
-    if ((x_115 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_113 = x_112;
-      x_113.x = bitcast<i32>((x_115 - bitcast<i32>(16)));
-      x_112_phi = x_113;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_120 : vec4<f32> = indexable[x_115];
-  x_GLF_color = x_120;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.hlsl
deleted file mode 100644
index 7136ec9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,114 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_80 = int2(0, 0);
-  int2 x_113 = int2(0, 0);
-  int x_119 = 0;
-  int2 x_80_phi = int2(0, 0);
-  int x_83_phi = 0;
-  int2 x_114_phi = int2(0, 0);
-  int2 x_116_phi = int2(0, 0);
-  const float4 x_58 = gl_FragCoord;
-  const float2 x_61 = asfloat(x_6[0].xy);
-  const float2 x_62 = (float2(x_58.x, x_58.y) / x_61);
-  const int x_65 = int((x_62.x * 8.0f));
-  const int x_69 = int((x_62.y * 8.0f));
-  const int2 x_78 = int2(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = int2(0, 0);
-    int2 x_102 = int2(0, 0);
-    int x_84 = 0;
-    int2 x_95_phi = int2(0, 0);
-    int2 x_103_phi = int2(0, 0);
-    x_80 = x_80_phi;
-    const int x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    const int2 x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    const int2 x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    const int2 x_81 = x_81_1;
-    {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  const int x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  x_116_phi = x_114_phi;
-  while (true) {
-    int2 x_117 = int2(0, 0);
-    const int2 x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = x_116;
-      x_117.x = asint((x_119 - asint(16)));
-      x_116_phi = x_117;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_124[16] = indexable;
-  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  indexable = tint_symbol_5;
-  indexable = x_124;
-  const float4 x_125 = indexable[x_119];
-  x_GLF_color = x_125;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.msl
deleted file mode 100644
index 441c536..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.msl
+++ /dev/null
@@ -1,123 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  tint_array_wrapper indexable = {};
-  int2 x_80 = 0;
-  int2 x_113 = 0;
-  int x_119 = 0;
-  int2 x_80_phi = 0;
-  int x_83_phi = 0;
-  int2 x_114_phi = 0;
-  int2 x_116_phi = 0;
-  float4 const x_58 = *(tint_symbol_5);
-  float2 const x_61 = x_6.resolution;
-  float2 const x_62 = (float2(x_58.x, x_58.y) / x_61);
-  int const x_65 = int((x_62.x * 8.0f));
-  int const x_69 = int((x_62.y * 8.0f));
-  int2 const x_78 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_65 & 5) | (x_69 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_69 & 5) | (x_65 & 10))))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = 0;
-    int2 x_102 = 0;
-    int x_84 = 0;
-    int2 x_95_phi = 0;
-    int2 x_103_phi = 0;
-    x_80 = x_80_phi;
-    int const x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = as_type<int>((as_type<uint>(x_80.y) - as_type<uint>(1)));
-      x_95_phi = x_94;
-    }
-    int2 const x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = as_type<int>((as_type<uint>(x_95.y) + as_type<uint>(1)));
-      x_103_phi = x_102;
-    }
-    int2 const x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = as_type<int>((as_type<uint>(x_103.x) + as_type<uint>((x_103.y / 2))));
-    int2 const x_81 = x_81_1;
-    {
-      x_84 = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  int const x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = tint_unary_minus(x_108);
-    x_114_phi = x_113;
-  }
-  int2 const x_114 = x_114_phi;
-  x_116_phi = x_114;
-  while (true) {
-    int2 x_117 = 0;
-    int2 const x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = x_116;
-      x_117.x = as_type<int>(as_type<int>((as_type<uint>(x_119) - as_type<uint>(as_type<int>(16)))));
-      x_116_phi = x_117;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  tint_array_wrapper const x_124 = indexable;
-  tint_array_wrapper const tint_symbol_3 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  indexable = tint_symbol_3;
-  indexable = x_124;
-  float4 const x_125 = indexable.arr[x_119];
-  *(tint_symbol_6) = x_125;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.spvasm
deleted file mode 100644
index ab775fd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,297 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 188
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_80 "x_80"
-               OpName %x_113 "x_113"
-               OpName %x_119 "x_119"
-               OpName %x_80_phi "x_80_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_116_phi "x_116_phi"
-               OpName %x_94 "x_94"
-               OpName %x_102 "x_102"
-               OpName %x_84 "x_84"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_81_1 "x_81_1"
-               OpName %x_117 "x_117"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-        %169 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %170 = OpConstantComposite %_arr_v4float_uint_16 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %175 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_80 = OpVariable %_ptr_Function_v2int Function %29
-      %x_113 = OpVariable %_ptr_Function_v2int Function %29
-      %x_119 = OpVariable %_ptr_Function_int Function %33
-   %x_80_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_83_phi = OpVariable %_ptr_Function_int Function %33
-  %x_114_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_116_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_94 = OpVariable %_ptr_Function_v2int Function %29
-      %x_102 = OpVariable %_ptr_Function_v2int Function %29
-       %x_84 = OpVariable %_ptr_Function_int Function %33
-   %x_95_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_103_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_81_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_117 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_80_phi %66
-               OpStore %x_83_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_80_phi
-               OpStore %x_80 %76
-         %77 = OpLoad %int %x_83_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_80
-               OpStore %x_95_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_80
-               OpStore %x_94 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_94 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_80 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_94
-               OpStore %x_95_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_95_phi
-               OpStore %x_103_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_102 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_102 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_102
-               OpStore %x_103_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_103_phi
-               OpStore %x_81_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_81_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_81_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_84 %116
-               OpStore %x_80_phi %115
-        %117 = OpLoad %int %x_84
-               OpStore %x_83_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_80
-               OpStore %x_114_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-        %124 = OpLoad %v2int %x_80
-               OpStore %x_113 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_113 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_113
-               OpStore %x_114_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_114_phi
-               OpStore %x_116_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_116_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_119 %135
-        %136 = OpLoad %int %x_119
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_117 %134
-        %142 = OpAccessChain %_ptr_Function_int %x_117 %uint_0
-        %144 = OpLoad %int %x_119
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_117
-               OpStore %x_116_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %_arr_v4float_uint_16 %indexable
-               OpStore %indexable %170
-               OpStore %indexable %168
-        %171 = OpLoad %int %x_119
-        %173 = OpAccessChain %_ptr_Function_v4float %indexable %171
-        %174 = OpLoad %v4float %173
-               OpStore %x_GLF_color %174
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %175
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %179 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %180 = OpFunctionCall %void %main_1
-        %181 = OpLoad %v4float %x_GLF_color
-        %182 = OpCompositeConstruct %main_out %181
-               OpReturnValue %182
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %184 = OpLabel
-        %186 = OpLoad %v4float %gl_FragCoord_param_1
-        %185 = OpFunctionCall %main_out %main_inner %186
-        %187 = OpCompositeExtract %v4float %185 0
-               OpStore %x_GLF_color_1_1 %187
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.wgsl
deleted file mode 100644
index f0b6447..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,109 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_80 : vec2<i32>;
-  var x_113 : vec2<i32>;
-  var x_119 : i32;
-  var x_80_phi : vec2<i32>;
-  var x_83_phi : i32;
-  var x_114_phi : vec2<i32>;
-  var x_116_phi : vec2<i32>;
-  let x_58 : vec4<f32> = gl_FragCoord;
-  let x_61 : vec2<f32> = x_6.resolution;
-  let x_62 : vec2<f32> = (vec2<f32>(x_58.x, x_58.y) / x_61);
-  let x_65 : i32 = i32((x_62.x * 8.0));
-  let x_66 : ptr<function, array<vec4<f32>, 16>> = &(indexable);
-  let x_69 : i32 = i32((x_62.y * 8.0));
-  let x_78 : vec2<i32> = vec2<i32>(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  loop {
-    var x_94 : vec2<i32>;
-    var x_102 : vec2<i32>;
-    var x_84 : i32;
-    var x_95_phi : vec2<i32>;
-    var x_103_phi : vec2<i32>;
-    x_80 = x_80_phi;
-    let x_83 : i32 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    let x_95 : vec2<i32> = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    let x_103 : vec2<i32> = x_103_phi;
-    var x_81_1 : vec2<i32> = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    let x_81 : vec2<i32> = x_81_1;
-
-    continuing {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  let x_108 : i32 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  let x_114 : vec2<i32> = x_114_phi;
-  x_116_phi = x_114;
-  loop {
-    var x_117 : vec2<i32>;
-    let x_116 : vec2<i32> = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_117 = x_116;
-      x_117.x = bitcast<i32>((x_119 - bitcast<i32>(16)));
-      x_116_phi = x_117;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_124 : array<vec4<f32>, 16> = *(x_66);
-  *(x_66) = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  *(x_66) = x_124;
-  let x_125 : vec4<f32> = indexable[x_119];
-  x_GLF_color = x_125;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.hlsl
deleted file mode 100644
index 7136ec9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,114 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_80 = int2(0, 0);
-  int2 x_113 = int2(0, 0);
-  int x_119 = 0;
-  int2 x_80_phi = int2(0, 0);
-  int x_83_phi = 0;
-  int2 x_114_phi = int2(0, 0);
-  int2 x_116_phi = int2(0, 0);
-  const float4 x_58 = gl_FragCoord;
-  const float2 x_61 = asfloat(x_6[0].xy);
-  const float2 x_62 = (float2(x_58.x, x_58.y) / x_61);
-  const int x_65 = int((x_62.x * 8.0f));
-  const int x_69 = int((x_62.y * 8.0f));
-  const int2 x_78 = int2(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = int2(0, 0);
-    int2 x_102 = int2(0, 0);
-    int x_84 = 0;
-    int2 x_95_phi = int2(0, 0);
-    int2 x_103_phi = int2(0, 0);
-    x_80 = x_80_phi;
-    const int x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    const int2 x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    const int2 x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    const int2 x_81 = x_81_1;
-    {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  const int x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  x_116_phi = x_114_phi;
-  while (true) {
-    int2 x_117 = int2(0, 0);
-    const int2 x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = x_116;
-      x_117.x = asint((x_119 - asint(16)));
-      x_116_phi = x_117;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_124[16] = indexable;
-  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  indexable = tint_symbol_5;
-  indexable = x_124;
-  const float4 x_125 = indexable[x_119];
-  x_GLF_color = x_125;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.msl
deleted file mode 100644
index 441c536..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.msl
+++ /dev/null
@@ -1,123 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  tint_array_wrapper indexable = {};
-  int2 x_80 = 0;
-  int2 x_113 = 0;
-  int x_119 = 0;
-  int2 x_80_phi = 0;
-  int x_83_phi = 0;
-  int2 x_114_phi = 0;
-  int2 x_116_phi = 0;
-  float4 const x_58 = *(tint_symbol_5);
-  float2 const x_61 = x_6.resolution;
-  float2 const x_62 = (float2(x_58.x, x_58.y) / x_61);
-  int const x_65 = int((x_62.x * 8.0f));
-  int const x_69 = int((x_62.y * 8.0f));
-  int2 const x_78 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_65 & 5) | (x_69 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_69 & 5) | (x_65 & 10))))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = 0;
-    int2 x_102 = 0;
-    int x_84 = 0;
-    int2 x_95_phi = 0;
-    int2 x_103_phi = 0;
-    x_80 = x_80_phi;
-    int const x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = as_type<int>((as_type<uint>(x_80.y) - as_type<uint>(1)));
-      x_95_phi = x_94;
-    }
-    int2 const x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = as_type<int>((as_type<uint>(x_95.y) + as_type<uint>(1)));
-      x_103_phi = x_102;
-    }
-    int2 const x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = as_type<int>((as_type<uint>(x_103.x) + as_type<uint>((x_103.y / 2))));
-    int2 const x_81 = x_81_1;
-    {
-      x_84 = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  int const x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = tint_unary_minus(x_108);
-    x_114_phi = x_113;
-  }
-  int2 const x_114 = x_114_phi;
-  x_116_phi = x_114;
-  while (true) {
-    int2 x_117 = 0;
-    int2 const x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = x_116;
-      x_117.x = as_type<int>(as_type<int>((as_type<uint>(x_119) - as_type<uint>(as_type<int>(16)))));
-      x_116_phi = x_117;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  tint_array_wrapper const x_124 = indexable;
-  tint_array_wrapper const tint_symbol_3 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  indexable = tint_symbol_3;
-  indexable = x_124;
-  float4 const x_125 = indexable.arr[x_119];
-  *(tint_symbol_6) = x_125;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.spvasm
deleted file mode 100644
index ab775fd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,297 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 188
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_80 "x_80"
-               OpName %x_113 "x_113"
-               OpName %x_119 "x_119"
-               OpName %x_80_phi "x_80_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_116_phi "x_116_phi"
-               OpName %x_94 "x_94"
-               OpName %x_102 "x_102"
-               OpName %x_84 "x_84"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_81_1 "x_81_1"
-               OpName %x_117 "x_117"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-        %169 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-        %170 = OpConstantComposite %_arr_v4float_uint_16 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169 %169
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %175 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_80 = OpVariable %_ptr_Function_v2int Function %29
-      %x_113 = OpVariable %_ptr_Function_v2int Function %29
-      %x_119 = OpVariable %_ptr_Function_int Function %33
-   %x_80_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_83_phi = OpVariable %_ptr_Function_int Function %33
-  %x_114_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_116_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_94 = OpVariable %_ptr_Function_v2int Function %29
-      %x_102 = OpVariable %_ptr_Function_v2int Function %29
-       %x_84 = OpVariable %_ptr_Function_int Function %33
-   %x_95_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_103_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_81_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_117 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_80_phi %66
-               OpStore %x_83_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_80_phi
-               OpStore %x_80 %76
-         %77 = OpLoad %int %x_83_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_80
-               OpStore %x_95_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_80
-               OpStore %x_94 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_94 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_80 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_94
-               OpStore %x_95_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_95_phi
-               OpStore %x_103_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_102 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_102 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_102
-               OpStore %x_103_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_103_phi
-               OpStore %x_81_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_81_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_81_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_84 %116
-               OpStore %x_80_phi %115
-        %117 = OpLoad %int %x_84
-               OpStore %x_83_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_80
-               OpStore %x_114_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-        %124 = OpLoad %v2int %x_80
-               OpStore %x_113 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_113 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_113
-               OpStore %x_114_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_114_phi
-               OpStore %x_116_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_116_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_119 %135
-        %136 = OpLoad %int %x_119
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_117 %134
-        %142 = OpAccessChain %_ptr_Function_int %x_117 %uint_0
-        %144 = OpLoad %int %x_119
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_117
-               OpStore %x_116_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %_arr_v4float_uint_16 %indexable
-               OpStore %indexable %170
-               OpStore %indexable %168
-        %171 = OpLoad %int %x_119
-        %173 = OpAccessChain %_ptr_Function_v4float %indexable %171
-        %174 = OpLoad %v4float %173
-               OpStore %x_GLF_color %174
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %175
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %179 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %180 = OpFunctionCall %void %main_1
-        %181 = OpLoad %v4float %x_GLF_color
-        %182 = OpCompositeConstruct %main_out %181
-               OpReturnValue %182
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %184 = OpLabel
-        %186 = OpLoad %v4float %gl_FragCoord_param_1
-        %185 = OpFunctionCall %main_out %main_inner %186
-        %187 = OpCompositeExtract %v4float %185 0
-               OpStore %x_GLF_color_1_1 %187
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.wgsl
deleted file mode 100644
index f0b6447..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,109 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_80 : vec2<i32>;
-  var x_113 : vec2<i32>;
-  var x_119 : i32;
-  var x_80_phi : vec2<i32>;
-  var x_83_phi : i32;
-  var x_114_phi : vec2<i32>;
-  var x_116_phi : vec2<i32>;
-  let x_58 : vec4<f32> = gl_FragCoord;
-  let x_61 : vec2<f32> = x_6.resolution;
-  let x_62 : vec2<f32> = (vec2<f32>(x_58.x, x_58.y) / x_61);
-  let x_65 : i32 = i32((x_62.x * 8.0));
-  let x_66 : ptr<function, array<vec4<f32>, 16>> = &(indexable);
-  let x_69 : i32 = i32((x_62.y * 8.0));
-  let x_78 : vec2<i32> = vec2<i32>(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  loop {
-    var x_94 : vec2<i32>;
-    var x_102 : vec2<i32>;
-    var x_84 : i32;
-    var x_95_phi : vec2<i32>;
-    var x_103_phi : vec2<i32>;
-    x_80 = x_80_phi;
-    let x_83 : i32 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    let x_95 : vec2<i32> = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    let x_103 : vec2<i32> = x_103_phi;
-    var x_81_1 : vec2<i32> = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    let x_81 : vec2<i32> = x_81_1;
-
-    continuing {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  let x_108 : i32 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  let x_114 : vec2<i32> = x_114_phi;
-  x_116_phi = x_114;
-  loop {
-    var x_117 : vec2<i32>;
-    let x_116 : vec2<i32> = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_117 = x_116;
-      x_117.x = bitcast<i32>((x_119 - bitcast<i32>(16)));
-      x_116_phi = x_117;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_124 : array<vec4<f32>, 16> = *(x_66);
-  *(x_66) = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  *(x_66) = x_124;
-  let x_125 : vec4<f32> = indexable[x_119];
-  x_GLF_color = x_125;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.hlsl
deleted file mode 100644
index 8ee9d11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_80 = int2(0, 0);
-  int2 x_113 = int2(0, 0);
-  int x_119 = 0;
-  int2 x_80_phi = int2(0, 0);
-  int x_83_phi = 0;
-  int2 x_114_phi = int2(0, 0);
-  int2 x_116_phi = int2(0, 0);
-  const float4 x_58 = gl_FragCoord;
-  const float2 x_61 = asfloat(x_6[0].xy);
-  const float2 x_62 = (float2(x_58.x, x_58.y) / x_61);
-  const int x_65 = int((x_62.x * 8.0f));
-  const int x_69 = int((x_62.y * 8.0f));
-  const int2 x_78 = int2(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = int2(0, 0);
-    int2 x_102 = int2(0, 0);
-    int x_84 = 0;
-    int2 x_95_phi = int2(0, 0);
-    int2 x_103_phi = int2(0, 0);
-    x_80 = x_80_phi;
-    const int x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    const int2 x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    const int2 x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    const int2 x_81 = x_81_1;
-    {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  const int x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  x_116_phi = x_114_phi;
-  while (true) {
-    int2 x_117 = int2(0, 0);
-    const int2 x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = x_116;
-      x_117.x = asint((x_119 - asint(16)));
-      x_116_phi = x_117;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_124 = indexable[x_119];
-  x_GLF_color = x_124;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.msl
deleted file mode 100644
index d53364e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.msl
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int2 x_80 = 0;
-  int2 x_113 = 0;
-  int x_119 = 0;
-  int2 x_80_phi = 0;
-  int x_83_phi = 0;
-  int2 x_114_phi = 0;
-  int2 x_116_phi = 0;
-  float4 const x_58 = *(tint_symbol_4);
-  float2 const x_61 = x_6.resolution;
-  float2 const x_62 = (float2(x_58.x, x_58.y) / x_61);
-  int const x_65 = int((x_62.x * 8.0f));
-  int const x_69 = int((x_62.y * 8.0f));
-  int2 const x_78 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_65 & 5) | (x_69 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_69 & 5) | (x_65 & 10))))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = 0;
-    int2 x_102 = 0;
-    int x_84 = 0;
-    int2 x_95_phi = 0;
-    int2 x_103_phi = 0;
-    x_80 = x_80_phi;
-    int const x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = as_type<int>((as_type<uint>(x_80.y) - as_type<uint>(1)));
-      x_95_phi = x_94;
-    }
-    int2 const x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = as_type<int>((as_type<uint>(x_95.y) + as_type<uint>(1)));
-      x_103_phi = x_102;
-    }
-    int2 const x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = as_type<int>((as_type<uint>(x_103.x) + as_type<uint>((x_103.y / 2))));
-    int2 const x_81 = x_81_1;
-    {
-      x_84 = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  int const x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = tint_unary_minus(x_108);
-    x_114_phi = x_113;
-  }
-  int2 const x_114 = x_114_phi;
-  x_116_phi = x_114;
-  while (true) {
-    int2 x_117 = 0;
-    int2 const x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = x_116;
-      x_117.x = as_type<int>(as_type<int>((as_type<uint>(x_119) - as_type<uint>(as_type<int>(16)))));
-      x_116_phi = x_117;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_124 = indexable.arr[x_119];
-  *(tint_symbol_5) = x_124;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.spvasm
deleted file mode 100644
index b6999e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,292 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 185
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_80 "x_80"
-               OpName %x_113 "x_113"
-               OpName %x_119 "x_119"
-               OpName %x_80_phi "x_80_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_116_phi "x_116_phi"
-               OpName %x_94 "x_94"
-               OpName %x_102 "x_102"
-               OpName %x_84 "x_84"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_81_1 "x_81_1"
-               OpName %x_117 "x_117"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %172 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_80 = OpVariable %_ptr_Function_v2int Function %29
-      %x_113 = OpVariable %_ptr_Function_v2int Function %29
-      %x_119 = OpVariable %_ptr_Function_int Function %33
-   %x_80_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_83_phi = OpVariable %_ptr_Function_int Function %33
-  %x_114_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_116_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_94 = OpVariable %_ptr_Function_v2int Function %29
-      %x_102 = OpVariable %_ptr_Function_v2int Function %29
-       %x_84 = OpVariable %_ptr_Function_int Function %33
-   %x_95_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_103_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_81_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_117 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_80_phi %66
-               OpStore %x_83_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_80_phi
-               OpStore %x_80 %76
-         %77 = OpLoad %int %x_83_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_80
-               OpStore %x_95_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_80
-               OpStore %x_94 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_94 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_80 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_94
-               OpStore %x_95_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_95_phi
-               OpStore %x_103_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_102 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_102 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_102
-               OpStore %x_103_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_103_phi
-               OpStore %x_81_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_81_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_81_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_84 %116
-               OpStore %x_80_phi %115
-        %117 = OpLoad %int %x_84
-               OpStore %x_83_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_80
-               OpStore %x_114_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-        %124 = OpLoad %v2int %x_80
-               OpStore %x_113 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_113 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_113
-               OpStore %x_114_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_114_phi
-               OpStore %x_116_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_116_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_119 %135
-        %136 = OpLoad %int %x_119
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_117 %134
-        %142 = OpAccessChain %_ptr_Function_int %x_117 %uint_0
-        %144 = OpLoad %int %x_119
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_117
-               OpStore %x_116_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %int %x_119
-        %170 = OpAccessChain %_ptr_Function_v4float %indexable %168
-        %171 = OpLoad %v4float %170
-               OpStore %x_GLF_color %171
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %172
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %176 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %177 = OpFunctionCall %void %main_1
-        %178 = OpLoad %v4float %x_GLF_color
-        %179 = OpCompositeConstruct %main_out %178
-               OpReturnValue %179
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %181 = OpLabel
-        %183 = OpLoad %v4float %gl_FragCoord_param_1
-        %182 = OpFunctionCall %main_out %main_inner %183
-        %184 = OpCompositeExtract %v4float %182 0
-               OpStore %x_GLF_color_1_1 %184
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.wgsl
deleted file mode 100644
index 55f9a36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,106 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_80 : vec2<i32>;
-  var x_113 : vec2<i32>;
-  var x_119 : i32;
-  var x_80_phi : vec2<i32>;
-  var x_83_phi : i32;
-  var x_114_phi : vec2<i32>;
-  var x_116_phi : vec2<i32>;
-  let x_58 : vec4<f32> = gl_FragCoord;
-  let x_61 : vec2<f32> = x_6.resolution;
-  let x_62 : vec2<f32> = (vec2<f32>(x_58.x, x_58.y) / x_61);
-  let x_65 : i32 = i32((x_62.x * 8.0));
-  let x_66 : ptr<function, array<vec4<f32>, 16>> = &(indexable);
-  let x_69 : i32 = i32((x_62.y * 8.0));
-  let x_78 : vec2<i32> = vec2<i32>(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  loop {
-    var x_94 : vec2<i32>;
-    var x_102 : vec2<i32>;
-    var x_84 : i32;
-    var x_95_phi : vec2<i32>;
-    var x_103_phi : vec2<i32>;
-    x_80 = x_80_phi;
-    let x_83 : i32 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    let x_95 : vec2<i32> = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    let x_103 : vec2<i32> = x_103_phi;
-    var x_81_1 : vec2<i32> = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    let x_81 : vec2<i32> = x_81_1;
-
-    continuing {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  let x_108 : i32 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  let x_114 : vec2<i32> = x_114_phi;
-  x_116_phi = x_114;
-  loop {
-    var x_117 : vec2<i32>;
-    let x_116 : vec2<i32> = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_117 = x_116;
-      x_117.x = bitcast<i32>((x_119 - bitcast<i32>(16)));
-      x_116_phi = x_117;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_124 : vec4<f32> = indexable[x_119];
-  x_GLF_color = x_124;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.hlsl
deleted file mode 100644
index 8ee9d11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 indexable[16] = (float4[16])0;
-  int2 x_80 = int2(0, 0);
-  int2 x_113 = int2(0, 0);
-  int x_119 = 0;
-  int2 x_80_phi = int2(0, 0);
-  int x_83_phi = 0;
-  int2 x_114_phi = int2(0, 0);
-  int2 x_116_phi = int2(0, 0);
-  const float4 x_58 = gl_FragCoord;
-  const float2 x_61 = asfloat(x_6[0].xy);
-  const float2 x_62 = (float2(x_58.x, x_58.y) / x_61);
-  const int x_65 = int((x_62.x * 8.0f));
-  const int x_69 = int((x_62.y * 8.0f));
-  const int2 x_78 = int2(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = int2(0, 0);
-    int2 x_102 = int2(0, 0);
-    int x_84 = 0;
-    int2 x_95_phi = int2(0, 0);
-    int2 x_103_phi = int2(0, 0);
-    x_80 = x_80_phi;
-    const int x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    const int2 x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    const int2 x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    const int2 x_81 = x_81_1;
-    {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  const int x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  x_116_phi = x_114_phi;
-  while (true) {
-    int2 x_117 = int2(0, 0);
-    const int2 x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = x_116;
-      x_117.x = asint((x_119 - asint(16)));
-      x_116_phi = x_117;
-    }
-  }
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_124 = indexable[x_119];
-  x_GLF_color = x_124;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.msl
deleted file mode 100644
index d53364e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.msl
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  tint_array_wrapper indexable = {};
-  int2 x_80 = 0;
-  int2 x_113 = 0;
-  int x_119 = 0;
-  int2 x_80_phi = 0;
-  int x_83_phi = 0;
-  int2 x_114_phi = 0;
-  int2 x_116_phi = 0;
-  float4 const x_58 = *(tint_symbol_4);
-  float2 const x_61 = x_6.resolution;
-  float2 const x_62 = (float2(x_58.x, x_58.y) / x_61);
-  int const x_65 = int((x_62.x * 8.0f));
-  int const x_69 = int((x_62.y * 8.0f));
-  int2 const x_78 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_65 & 5) | (x_69 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_69 & 5) | (x_65 & 10))))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  while (true) {
-    int2 x_94 = 0;
-    int2 x_102 = 0;
-    int x_84 = 0;
-    int2 x_95_phi = 0;
-    int2 x_103_phi = 0;
-    x_80 = x_80_phi;
-    int const x_83 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = as_type<int>((as_type<uint>(x_80.y) - as_type<uint>(1)));
-      x_95_phi = x_94;
-    }
-    int2 const x_95 = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = as_type<int>((as_type<uint>(x_95.y) + as_type<uint>(1)));
-      x_103_phi = x_102;
-    }
-    int2 const x_103 = x_103_phi;
-    int2 x_81_1 = x_103;
-    x_81_1.x = as_type<int>((as_type<uint>(x_103.x) + as_type<uint>((x_103.y / 2))));
-    int2 const x_81 = x_81_1;
-    {
-      x_84 = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  int const x_108 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = tint_unary_minus(x_108);
-    x_114_phi = x_113;
-  }
-  int2 const x_114 = x_114_phi;
-  x_116_phi = x_114;
-  while (true) {
-    int2 x_117 = 0;
-    int2 const x_116 = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-    {
-      x_117 = x_116;
-      x_117.x = as_type<int>(as_type<int>((as_type<uint>(x_119) - as_type<uint>(as_type<int>(16)))));
-      x_116_phi = x_117;
-    }
-  }
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_124 = indexable.arr[x_119];
-  *(tint_symbol_5) = x_124;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.spvasm
deleted file mode 100644
index b6999e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.spvasm
+++ /dev/null
@@ -1,292 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 185
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %indexable "indexable"
-               OpName %x_80 "x_80"
-               OpName %x_113 "x_113"
-               OpName %x_119 "x_119"
-               OpName %x_80_phi "x_80_phi"
-               OpName %x_83_phi "x_83_phi"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_116_phi "x_116_phi"
-               OpName %x_94 "x_94"
-               OpName %x_102 "x_102"
-               OpName %x_84 "x_84"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_81_1 "x_81_1"
-               OpName %x_117 "x_117"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %24 = OpConstantNull %_arr_v4float_uint_16
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %29 = OpConstantNull %v2int
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-      %int_5 = OpConstant %int 5
-     %int_10 = OpConstant %int 10
-      %int_8 = OpConstant %int 8
-      %int_0 = OpConstant %int 0
-    %int_100 = OpConstant %int 100
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-     %int_15 = OpConstant %int 15
-     %int_16 = OpConstant %int 16
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %153 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %154 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %155 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %157 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %158 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %159 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %160 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %161 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %162 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %163 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %164 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %165 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %167 = OpConstantComposite %_arr_v4float_uint_16 %151 %153 %154 %155 %156 %157 %158 %159 %151 %160 %161 %162 %163 %164 %165 %166
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %172 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %24
-       %x_80 = OpVariable %_ptr_Function_v2int Function %29
-      %x_113 = OpVariable %_ptr_Function_v2int Function %29
-      %x_119 = OpVariable %_ptr_Function_int Function %33
-   %x_80_phi = OpVariable %_ptr_Function_v2int Function %29
-   %x_83_phi = OpVariable %_ptr_Function_int Function %33
-  %x_114_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_116_phi = OpVariable %_ptr_Function_v2int Function %29
-       %x_94 = OpVariable %_ptr_Function_v2int Function %29
-      %x_102 = OpVariable %_ptr_Function_v2int Function %29
-       %x_84 = OpVariable %_ptr_Function_int Function %33
-   %x_95_phi = OpVariable %_ptr_Function_v2int Function %29
-  %x_103_phi = OpVariable %_ptr_Function_v2int Function %29
-     %x_81_1 = OpVariable %_ptr_Function_v2int Function %29
-      %x_117 = OpVariable %_ptr_Function_v2int Function %29
-         %38 = OpLoad %v4float %gl_FragCoord
-         %41 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %42 = OpLoad %v2float %41
-         %43 = OpCompositeExtract %float %38 0
-         %44 = OpCompositeExtract %float %38 1
-         %45 = OpCompositeConstruct %v2float %43 %44
-         %46 = OpFDiv %v2float %45 %42
-         %48 = OpCompositeExtract %float %46 0
-         %50 = OpFMul %float %48 %float_8
-         %47 = OpConvertFToS %int %50
-         %52 = OpCompositeExtract %float %46 1
-         %53 = OpFMul %float %52 %float_8
-         %51 = OpConvertFToS %int %53
-         %55 = OpBitwiseAnd %int %47 %int_5
-         %57 = OpBitwiseAnd %int %51 %int_10
-         %58 = OpBitwiseOr %int %55 %57
-         %60 = OpIMul %int %58 %int_8
-         %61 = OpBitwiseAnd %int %51 %int_5
-         %62 = OpBitwiseAnd %int %47 %int_10
-         %63 = OpBitwiseOr %int %61 %62
-         %64 = OpIAdd %int %60 %63
-         %66 = OpCompositeConstruct %v2int %64 %int_0
-               OpStore %x_80_phi %66
-               OpStore %x_83_phi %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %76 = OpLoad %v2int %x_80_phi
-               OpStore %x_80 %76
-         %77 = OpLoad %int %x_83_phi
-         %79 = OpSLessThan %bool %77 %int_100
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %68
-         %81 = OpLabel
-         %84 = OpLoad %v2int %x_80
-               OpStore %x_95_phi %84
-         %85 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-         %86 = OpLoad %int %85
-         %87 = OpSGreaterThan %bool %86 %int_0
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-         %90 = OpLoad %v2int %x_80
-               OpStore %x_94 %90
-         %92 = OpAccessChain %_ptr_Function_int %x_94 %uint_1
-         %93 = OpAccessChain %_ptr_Function_int %x_80 %uint_1
-         %94 = OpLoad %int %93
-         %96 = OpISub %int %94 %int_1
-               OpStore %92 %96
-         %97 = OpLoad %v2int %x_94
-               OpStore %x_95_phi %97
-               OpBranch %88
-         %88 = OpLabel
-         %98 = OpLoad %v2int %x_95_phi
-               OpStore %x_103_phi %98
-         %99 = OpCompositeExtract %int %98 0
-        %100 = OpSLessThan %bool %99 %int_0
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %101
-        %102 = OpLabel
-               OpStore %x_102 %98
-        %103 = OpAccessChain %_ptr_Function_int %x_102 %uint_1
-        %104 = OpCompositeExtract %int %98 1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %103 %105
-        %106 = OpLoad %v2int %x_102
-               OpStore %x_103_phi %106
-               OpBranch %101
-        %101 = OpLabel
-        %107 = OpLoad %v2int %x_103_phi
-               OpStore %x_81_1 %107
-        %109 = OpAccessChain %_ptr_Function_int %x_81_1 %uint_0
-        %110 = OpCompositeExtract %int %107 0
-        %111 = OpCompositeExtract %int %107 1
-        %113 = OpSDiv %int %111 %int_2
-        %114 = OpIAdd %int %110 %113
-               OpStore %109 %114
-        %115 = OpLoad %v2int %x_81_1
-               OpBranch %69
-         %69 = OpLabel
-        %116 = OpIAdd %int %77 %int_1
-               OpStore %x_84 %116
-               OpStore %x_80_phi %115
-        %117 = OpLoad %int %x_84
-               OpStore %x_83_phi %117
-               OpBranch %67
-         %68 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %x_80 %uint_0
-        %119 = OpLoad %int %118
-        %120 = OpLoad %v2int %x_80
-               OpStore %x_114_phi %120
-        %121 = OpSLessThan %bool %119 %int_0
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %122
-        %123 = OpLabel
-        %124 = OpLoad %v2int %x_80
-               OpStore %x_113 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_113 %uint_0
-        %126 = OpSNegate %int %119
-               OpStore %125 %126
-        %127 = OpLoad %v2int %x_113
-               OpStore %x_114_phi %127
-               OpBranch %122
-        %122 = OpLabel
-        %128 = OpLoad %v2int %x_114_phi
-               OpStore %x_116_phi %128
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %134 = OpLoad %v2int %x_116_phi
-        %135 = OpCompositeExtract %int %134 0
-               OpStore %x_119 %135
-        %136 = OpLoad %int %x_119
-        %138 = OpSGreaterThan %bool %136 %int_15
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %141
-        %140 = OpLabel
-               OpBranch %139
-        %141 = OpLabel
-               OpBranch %130
-        %139 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-               OpStore %x_117 %134
-        %142 = OpAccessChain %_ptr_Function_int %x_117 %uint_0
-        %144 = OpLoad %int %x_119
-        %145 = OpCopyObject %int %int_16
-        %147 = OpISub %int %144 %145
-        %143 = OpCopyObject %int %147
-               OpStore %142 %143
-        %148 = OpLoad %v2int %x_117
-               OpStore %x_116_phi %148
-               OpBranch %129
-        %130 = OpLabel
-               OpStore %indexable %167
-        %168 = OpLoad %int %x_119
-        %170 = OpAccessChain %_ptr_Function_v4float %indexable %168
-        %171 = OpLoad %v4float %170
-               OpStore %x_GLF_color %171
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %172
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %176 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %177 = OpFunctionCall %void %main_1
-        %178 = OpLoad %v4float %x_GLF_color
-        %179 = OpCompositeConstruct %main_out %178
-               OpReturnValue %179
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %181 = OpLabel
-        %183 = OpLoad %v4float %gl_FragCoord_param_1
-        %182 = OpFunctionCall %main_out %main_inner %183
-        %184 = OpCompositeExtract %v4float %182 0
-               OpStore %x_GLF_color_1_1 %184
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.wgsl
deleted file mode 100644
index 55f9a36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.wgsl
+++ /dev/null
@@ -1,106 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var indexable : array<vec4<f32>, 16>;
-  var x_80 : vec2<i32>;
-  var x_113 : vec2<i32>;
-  var x_119 : i32;
-  var x_80_phi : vec2<i32>;
-  var x_83_phi : i32;
-  var x_114_phi : vec2<i32>;
-  var x_116_phi : vec2<i32>;
-  let x_58 : vec4<f32> = gl_FragCoord;
-  let x_61 : vec2<f32> = x_6.resolution;
-  let x_62 : vec2<f32> = (vec2<f32>(x_58.x, x_58.y) / x_61);
-  let x_65 : i32 = i32((x_62.x * 8.0));
-  let x_66 : ptr<function, array<vec4<f32>, 16>> = &(indexable);
-  let x_69 : i32 = i32((x_62.y * 8.0));
-  let x_78 : vec2<i32> = vec2<i32>(((((x_65 & 5) | (x_69 & 10)) * 8) + ((x_69 & 5) | (x_65 & 10))), 0);
-  x_80_phi = x_78;
-  x_83_phi = 0;
-  loop {
-    var x_94 : vec2<i32>;
-    var x_102 : vec2<i32>;
-    var x_84 : i32;
-    var x_95_phi : vec2<i32>;
-    var x_103_phi : vec2<i32>;
-    x_80 = x_80_phi;
-    let x_83 : i32 = x_83_phi;
-    if ((x_83 < 100)) {
-    } else {
-      break;
-    }
-    x_95_phi = x_80;
-    if ((x_80.x > 0)) {
-      x_94 = x_80;
-      x_94.y = (x_80.y - 1);
-      x_95_phi = x_94;
-    }
-    let x_95 : vec2<i32> = x_95_phi;
-    x_103_phi = x_95;
-    if ((x_95.x < 0)) {
-      x_102 = x_95;
-      x_102.y = (x_95.y + 1);
-      x_103_phi = x_102;
-    }
-    let x_103 : vec2<i32> = x_103_phi;
-    var x_81_1 : vec2<i32> = x_103;
-    x_81_1.x = (x_103.x + (x_103.y / 2));
-    let x_81 : vec2<i32> = x_81_1;
-
-    continuing {
-      x_84 = (x_83 + 1);
-      x_80_phi = x_81;
-      x_83_phi = x_84;
-    }
-  }
-  let x_108 : i32 = x_80.x;
-  x_114_phi = x_80;
-  if ((x_108 < 0)) {
-    x_113 = x_80;
-    x_113.x = -(x_108);
-    x_114_phi = x_113;
-  }
-  let x_114 : vec2<i32> = x_114_phi;
-  x_116_phi = x_114;
-  loop {
-    var x_117 : vec2<i32>;
-    let x_116 : vec2<i32> = x_116_phi;
-    x_119 = x_116.x;
-    if ((x_119 > 15)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_117 = x_116;
-      x_117.x = bitcast<i32>((x_119 - bitcast<i32>(16)));
-      x_116_phi = x_117;
-    }
-  }
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_124 : vec4<f32> = indexable[x_119];
-  x_GLF_color = x_124;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.hlsl
deleted file mode 100644
index 83b3b09..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,113 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_196[256] = (int[256])0;
-  int x_197[256] = (int[256])0;
-  int x_198[256] = (int[256])0;
-  int2 x_210 = int2(0, 0);
-  float4 x_251 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_253 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int2 x_214_phi = int2(0, 0);
-  float4 x_253_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_254_phi = false;
-  float4 x_256_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_199 = gl_FragCoord;
-  const float2 x_202 = asfloat(x_6[0].xy);
-  const float2 x_203 = (float2(x_199.x, x_199.y) / x_202);
-  x_210 = int2(int((x_203.x * 256.0f)), int((x_203.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      while (true) {
-        int x_233 = 0;
-        int x_234 = 0;
-        int x_235_phi = 0;
-        bool x_241_phi = false;
-        const int2 x_214 = x_214_phi;
-        const int x_217 = x_214.y;
-        x_253_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_254_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        const int x_221 = x_214.x;
-        const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-        x_196 = tint_symbol_4;
-        const int x_223 = x_196[x_217];
-        const bool x_225 = (x_221 < (x_223 + 15));
-        if (x_225) {
-          const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_197 = tint_symbol_5;
-        }
-        if (x_225) {
-          x_233 = x_197[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        const bool x_237 = (x_221 > (x_235_phi - 15));
-        if (x_225) {
-          x_241_phi = x_237;
-        } else {
-          x_241_phi = x_225;
-        }
-        if (x_241_phi) {
-          const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_198 = tint_symbol_6;
-          const int x_245 = x_198[x_217];
-          const float x_250 = ((15.0f - abs(float((x_221 - x_245)))) * 0.06666667f);
-          x_251 = float4(x_250, x_250, x_250, 1.0f);
-          x_253_phi = x_251;
-          x_254_phi = true;
-          break;
-        }
-        int2 x_215_1 = x_214;
-        x_215_1.y = (x_217 + 1);
-        const int2 x_215 = x_215_1;
-        {
-          x_214_phi = x_215;
-        }
-      }
-      x_253 = x_253_phi;
-      const bool x_254 = x_254_phi;
-      x_256_phi = x_253;
-      if (x_254) {
-        break;
-      }
-      x_256_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  x_GLF_color = x_256_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.msl
deleted file mode 100644
index 51771e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.msl
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper x_196 = {};
-  tint_array_wrapper x_197 = {};
-  tint_array_wrapper x_198 = {};
-  int2 x_210 = 0;
-  float4 x_251 = 0.0f;
-  float4 x_253 = 0.0f;
-  int2 x_214_phi = 0;
-  float4 x_253_phi = 0.0f;
-  bool x_254_phi = false;
-  float4 x_256_phi = 0.0f;
-  float4 const x_199 = *(tint_symbol_6);
-  float2 const x_202 = x_6.resolution;
-  float2 const x_203 = (float2(x_199.x, x_199.y) / x_202);
-  x_210 = int2(int((x_203.x * 256.0f)), int((x_203.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      while (true) {
-        int x_233 = 0;
-        int x_234 = 0;
-        int x_235_phi = 0;
-        bool x_241_phi = false;
-        int2 const x_214 = x_214_phi;
-        int const x_217 = x_214.y;
-        x_253_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_254_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        int const x_221 = x_214.x;
-        tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-        x_196 = tint_symbol_2;
-        int const x_223 = x_196.arr[x_217];
-        bool const x_225 = (x_221 < as_type<int>((as_type<uint>(x_223) + as_type<uint>(15))));
-        if (x_225) {
-          tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_197 = tint_symbol_3;
-        }
-        if (x_225) {
-          x_233 = x_197.arr[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        int const x_235 = x_235_phi;
-        bool const x_237 = (x_221 > as_type<int>((as_type<uint>(x_235) - as_type<uint>(15))));
-        if (x_225) {
-          x_241_phi = x_237;
-        } else {
-          x_241_phi = x_225;
-        }
-        bool const x_241 = x_241_phi;
-        if (x_241) {
-          tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_198 = tint_symbol_4;
-          int const x_245 = x_198.arr[x_217];
-          float const x_250 = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_221) - as_type<uint>(x_245)))))) * 0.06666667f);
-          x_251 = float4(x_250, x_250, x_250, 1.0f);
-          x_253_phi = x_251;
-          x_254_phi = true;
-          break;
-        }
-        int2 x_215_1 = x_214;
-        x_215_1.y = as_type<int>((as_type<uint>(x_217) + as_type<uint>(1)));
-        int2 const x_215 = x_215_1;
-        {
-          x_214_phi = x_215;
-        }
-      }
-      x_253 = x_253_phi;
-      bool const x_254 = x_254_phi;
-      x_256_phi = x_253;
-      if (x_254) {
-        break;
-      }
-      x_256_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  float4 const x_256 = x_256_phi;
-  *(tint_symbol_7) = x_256;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.spvasm
deleted file mode 100644
index d649091..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,408 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 303
-; Schema: 0
-               OpCapability Shader
-        %267 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_196 "x_196"
-               OpName %x_197 "x_197"
-               OpName %x_198 "x_198"
-               OpName %x_210 "x_210"
-               OpName %x_251 "x_251"
-               OpName %x_253 "x_253"
-               OpName %x_214_phi "x_214_phi"
-               OpName %x_253_phi "x_253_phi"
-               OpName %x_254_phi "x_254_phi"
-               OpName %x_256_phi "x_256_phi"
-               OpName %x_233 "x_233"
-               OpName %x_234 "x_234"
-               OpName %x_235_phi "x_235_phi"
-               OpName %x_241_phi "x_241_phi"
-               OpName %x_215_1 "x_215_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %25 = OpConstantNull %_arr_int_uint_256
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-%_ptr_Function_int = OpTypePointer Function %int
-         %68 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %75 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-    %int_256 = OpConstant %int 256
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %240 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-   %float_15 = OpConstant %float 15
-%float_0_0666666701 = OpConstant %float 0.0666666701
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-        %288 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %290 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %x_196 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_197 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_198 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_210 = OpVariable %_ptr_Function_v2int Function %31
-      %x_251 = OpVariable %_ptr_Function_v4float Function %7
-      %x_253 = OpVariable %_ptr_Function_v4float Function %7
-  %x_214_phi = OpVariable %_ptr_Function_v2int Function %31
-  %x_253_phi = OpVariable %_ptr_Function_v4float Function %7
-  %x_254_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_256_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_233 = OpVariable %_ptr_Function_int Function %68
-      %x_234 = OpVariable %_ptr_Function_int Function %68
-  %x_235_phi = OpVariable %_ptr_Function_int Function %68
-  %x_241_phi = OpVariable %_ptr_Function_bool Function %40
-    %x_215_1 = OpVariable %_ptr_Function_v2int Function %31
-         %42 = OpLoad %v4float %gl_FragCoord
-         %45 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %46 = OpLoad %v2float %45
-         %47 = OpCompositeExtract %float %42 0
-         %48 = OpCompositeExtract %float %42 1
-         %49 = OpCompositeConstruct %v2float %47 %48
-         %50 = OpFDiv %v2float %49 %46
-         %52 = OpCompositeExtract %float %50 0
-         %54 = OpFMul %float %52 %float_256
-         %51 = OpConvertFToS %int %54
-         %56 = OpCompositeExtract %float %50 1
-         %57 = OpFMul %float %56 %float_256
-         %55 = OpConvertFToS %int %57
-         %58 = OpCompositeConstruct %v2int %51 %55
-               OpStore %x_210 %58
-               OpSelectionMerge %59 None
-               OpSwitch %uint_0 %60
-         %60 = OpLabel
-         %61 = OpLoad %v2int %x_210
-               OpStore %x_214_phi %61
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %72 = OpLoad %v2int %x_214_phi
-         %73 = OpCompositeExtract %int %72 1
-               OpStore %x_253_phi %75
-               OpStore %x_254_phi %false
-         %78 = OpINotEqual %bool %73 %int_256
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %63
-         %79 = OpLabel
-         %82 = OpCompositeExtract %int %72 0
-               OpStore %x_196 %240
-        %241 = OpAccessChain %_ptr_Function_int %x_196 %73
-        %242 = OpLoad %int %241
-        %243 = OpIAdd %int %242 %int_15
-        %244 = OpSLessThan %bool %82 %243
-               OpSelectionMerge %245 None
-               OpBranchConditional %244 %246 %245
-        %246 = OpLabel
-               OpStore %x_197 %240
-               OpBranch %245
-        %245 = OpLabel
-               OpSelectionMerge %247 None
-               OpBranchConditional %244 %248 %249
-        %248 = OpLabel
-        %250 = OpAccessChain %_ptr_Function_int %x_197 %73
-        %251 = OpLoad %int %250
-               OpStore %x_233 %251
-        %252 = OpLoad %int %x_233
-               OpStore %x_235_phi %252
-               OpBranch %247
-        %249 = OpLabel
-               OpStore %x_234 %int_0
-        %253 = OpLoad %int %x_234
-               OpStore %x_235_phi %253
-               OpBranch %247
-        %247 = OpLabel
-        %254 = OpLoad %int %x_235_phi
-        %255 = OpISub %int %254 %int_15
-        %256 = OpSGreaterThan %bool %82 %255
-               OpSelectionMerge %257 None
-               OpBranchConditional %244 %258 %259
-        %258 = OpLabel
-               OpStore %x_241_phi %256
-               OpBranch %257
-        %259 = OpLabel
-               OpStore %x_241_phi %244
-               OpBranch %257
-        %257 = OpLabel
-        %260 = OpLoad %bool %x_241_phi
-               OpSelectionMerge %261 None
-               OpBranchConditional %260 %262 %261
-        %262 = OpLabel
-               OpStore %x_198 %240
-        %263 = OpAccessChain %_ptr_Function_int %x_198 %73
-        %264 = OpLoad %int %263
-        %269 = OpISub %int %82 %264
-        %268 = OpConvertSToF %float %269
-        %266 = OpExtInst %float %267 FAbs %268
-        %270 = OpFSub %float %float_15 %266
-        %272 = OpFMul %float %270 %float_0_0666666701
-        %274 = OpCompositeConstruct %v4float %272 %272 %272 %float_1
-               OpStore %x_251 %274
-        %275 = OpLoad %v4float %x_251
-               OpStore %x_253_phi %275
-               OpStore %x_254_phi %true
-               OpBranch %63
-        %261 = OpLabel
-               OpStore %x_215_1 %72
-        %279 = OpAccessChain %_ptr_Function_int %x_215_1 %uint_1
-        %281 = OpIAdd %int %73 %int_1
-               OpStore %279 %281
-        %282 = OpLoad %v2int %x_215_1
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %x_214_phi %282
-               OpBranch %62
-         %63 = OpLabel
-        %283 = OpLoad %v4float %x_253_phi
-               OpStore %x_253 %283
-        %284 = OpLoad %bool %x_254_phi
-        %285 = OpLoad %v4float %x_253
-               OpStore %x_256_phi %285
-               OpSelectionMerge %286 None
-               OpBranchConditional %284 %287 %286
-        %287 = OpLabel
-               OpBranch %59
-        %286 = OpLabel
-               OpStore %x_256_phi %288
-               OpBranch %59
-         %59 = OpLabel
-        %289 = OpLoad %v4float %x_256_phi
-               OpStore %x_GLF_color %289
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %290
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %294 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %295 = OpFunctionCall %void %main_1
-        %296 = OpLoad %v4float %x_GLF_color
-        %297 = OpCompositeConstruct %main_out %296
-               OpReturnValue %297
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %299 = OpLabel
-        %301 = OpLoad %v4float %gl_FragCoord_param_1
-        %300 = OpFunctionCall %main_out %main_inner %301
-        %302 = OpCompositeExtract %v4float %300 0
-               OpStore %x_GLF_color_1_1 %302
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.wgsl
deleted file mode 100644
index 43a6481..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,106 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_196 : array<i32, 256>;
-  var x_197 : array<i32, 256>;
-  var x_198 : array<i32, 256>;
-  var x_210 : vec2<i32>;
-  var x_251 : vec4<f32>;
-  var x_253 : vec4<f32>;
-  var x_214_phi : vec2<i32>;
-  var x_253_phi : vec4<f32>;
-  var x_254_phi : bool;
-  var x_256_phi : vec4<f32>;
-  let x_199 : vec4<f32> = gl_FragCoord;
-  let x_202 : vec2<f32> = x_6.resolution;
-  let x_203 : vec2<f32> = (vec2<f32>(x_199.x, x_199.y) / x_202);
-  x_210 = vec2<i32>(i32((x_203.x * 256.0)), i32((x_203.y * 256.0)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      loop {
-        var x_233 : i32;
-        var x_234 : i32;
-        var x_235_phi : i32;
-        var x_241_phi : bool;
-        let x_214 : vec2<i32> = x_214_phi;
-        let x_217 : i32 = x_214.y;
-        x_253_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_254_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        let x_221 : i32 = x_214.x;
-        x_196 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        let x_223 : i32 = x_196[x_217];
-        let x_225 : bool = (x_221 < (x_223 + 15));
-        if (x_225) {
-          x_197 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        }
-        if (x_225) {
-          x_233 = x_197[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        let x_235 : i32 = x_235_phi;
-        let x_237 : bool = (x_221 > (x_235 - 15));
-        if (x_225) {
-          x_241_phi = x_237;
-        } else {
-          x_241_phi = x_225;
-        }
-        let x_241 : bool = x_241_phi;
-        if (x_241) {
-          x_198 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_245 : i32 = x_198[x_217];
-          let x_250 : f32 = ((15.0 - abs(f32((x_221 - x_245)))) * 0.06666667);
-          x_251 = vec4<f32>(x_250, x_250, x_250, 1.0);
-          x_253_phi = x_251;
-          x_254_phi = true;
-          break;
-        }
-        var x_215_1 : vec2<i32> = x_214;
-        x_215_1.y = (x_217 + 1);
-        let x_215 : vec2<i32> = x_215_1;
-
-        continuing {
-          x_214_phi = x_215;
-        }
-      }
-      x_253 = x_253_phi;
-      let x_254 : bool = x_254_phi;
-      x_256_phi = x_253;
-      if (x_254) {
-        break;
-      }
-      x_256_phi = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-  }
-  let x_256 : vec4<f32> = x_256_phi;
-  x_GLF_color = x_256;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.hlsl
deleted file mode 100644
index 83b3b09..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,113 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_196[256] = (int[256])0;
-  int x_197[256] = (int[256])0;
-  int x_198[256] = (int[256])0;
-  int2 x_210 = int2(0, 0);
-  float4 x_251 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_253 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int2 x_214_phi = int2(0, 0);
-  float4 x_253_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_254_phi = false;
-  float4 x_256_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_199 = gl_FragCoord;
-  const float2 x_202 = asfloat(x_6[0].xy);
-  const float2 x_203 = (float2(x_199.x, x_199.y) / x_202);
-  x_210 = int2(int((x_203.x * 256.0f)), int((x_203.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      while (true) {
-        int x_233 = 0;
-        int x_234 = 0;
-        int x_235_phi = 0;
-        bool x_241_phi = false;
-        const int2 x_214 = x_214_phi;
-        const int x_217 = x_214.y;
-        x_253_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_254_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        const int x_221 = x_214.x;
-        const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-        x_196 = tint_symbol_4;
-        const int x_223 = x_196[x_217];
-        const bool x_225 = (x_221 < (x_223 + 15));
-        if (x_225) {
-          const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_197 = tint_symbol_5;
-        }
-        if (x_225) {
-          x_233 = x_197[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        const bool x_237 = (x_221 > (x_235_phi - 15));
-        if (x_225) {
-          x_241_phi = x_237;
-        } else {
-          x_241_phi = x_225;
-        }
-        if (x_241_phi) {
-          const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_198 = tint_symbol_6;
-          const int x_245 = x_198[x_217];
-          const float x_250 = ((15.0f - abs(float((x_221 - x_245)))) * 0.06666667f);
-          x_251 = float4(x_250, x_250, x_250, 1.0f);
-          x_253_phi = x_251;
-          x_254_phi = true;
-          break;
-        }
-        int2 x_215_1 = x_214;
-        x_215_1.y = (x_217 + 1);
-        const int2 x_215 = x_215_1;
-        {
-          x_214_phi = x_215;
-        }
-      }
-      x_253 = x_253_phi;
-      const bool x_254 = x_254_phi;
-      x_256_phi = x_253;
-      if (x_254) {
-        break;
-      }
-      x_256_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  x_GLF_color = x_256_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.msl
deleted file mode 100644
index 51771e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.msl
+++ /dev/null
@@ -1,119 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper x_196 = {};
-  tint_array_wrapper x_197 = {};
-  tint_array_wrapper x_198 = {};
-  int2 x_210 = 0;
-  float4 x_251 = 0.0f;
-  float4 x_253 = 0.0f;
-  int2 x_214_phi = 0;
-  float4 x_253_phi = 0.0f;
-  bool x_254_phi = false;
-  float4 x_256_phi = 0.0f;
-  float4 const x_199 = *(tint_symbol_6);
-  float2 const x_202 = x_6.resolution;
-  float2 const x_203 = (float2(x_199.x, x_199.y) / x_202);
-  x_210 = int2(int((x_203.x * 256.0f)), int((x_203.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      while (true) {
-        int x_233 = 0;
-        int x_234 = 0;
-        int x_235_phi = 0;
-        bool x_241_phi = false;
-        int2 const x_214 = x_214_phi;
-        int const x_217 = x_214.y;
-        x_253_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_254_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        int const x_221 = x_214.x;
-        tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-        x_196 = tint_symbol_2;
-        int const x_223 = x_196.arr[x_217];
-        bool const x_225 = (x_221 < as_type<int>((as_type<uint>(x_223) + as_type<uint>(15))));
-        if (x_225) {
-          tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_197 = tint_symbol_3;
-        }
-        if (x_225) {
-          x_233 = x_197.arr[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        int const x_235 = x_235_phi;
-        bool const x_237 = (x_221 > as_type<int>((as_type<uint>(x_235) - as_type<uint>(15))));
-        if (x_225) {
-          x_241_phi = x_237;
-        } else {
-          x_241_phi = x_225;
-        }
-        bool const x_241 = x_241_phi;
-        if (x_241) {
-          tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_198 = tint_symbol_4;
-          int const x_245 = x_198.arr[x_217];
-          float const x_250 = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_221) - as_type<uint>(x_245)))))) * 0.06666667f);
-          x_251 = float4(x_250, x_250, x_250, 1.0f);
-          x_253_phi = x_251;
-          x_254_phi = true;
-          break;
-        }
-        int2 x_215_1 = x_214;
-        x_215_1.y = as_type<int>((as_type<uint>(x_217) + as_type<uint>(1)));
-        int2 const x_215 = x_215_1;
-        {
-          x_214_phi = x_215;
-        }
-      }
-      x_253 = x_253_phi;
-      bool const x_254 = x_254_phi;
-      x_256_phi = x_253;
-      if (x_254) {
-        break;
-      }
-      x_256_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  float4 const x_256 = x_256_phi;
-  *(tint_symbol_7) = x_256;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.spvasm
deleted file mode 100644
index d649091..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,408 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 303
-; Schema: 0
-               OpCapability Shader
-        %267 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_196 "x_196"
-               OpName %x_197 "x_197"
-               OpName %x_198 "x_198"
-               OpName %x_210 "x_210"
-               OpName %x_251 "x_251"
-               OpName %x_253 "x_253"
-               OpName %x_214_phi "x_214_phi"
-               OpName %x_253_phi "x_253_phi"
-               OpName %x_254_phi "x_254_phi"
-               OpName %x_256_phi "x_256_phi"
-               OpName %x_233 "x_233"
-               OpName %x_234 "x_234"
-               OpName %x_235_phi "x_235_phi"
-               OpName %x_241_phi "x_241_phi"
-               OpName %x_215_1 "x_215_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %25 = OpConstantNull %_arr_int_uint_256
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-%_ptr_Function_int = OpTypePointer Function %int
-         %68 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %75 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-    %int_256 = OpConstant %int 256
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %240 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-   %float_15 = OpConstant %float 15
-%float_0_0666666701 = OpConstant %float 0.0666666701
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-        %288 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %290 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %x_196 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_197 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_198 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_210 = OpVariable %_ptr_Function_v2int Function %31
-      %x_251 = OpVariable %_ptr_Function_v4float Function %7
-      %x_253 = OpVariable %_ptr_Function_v4float Function %7
-  %x_214_phi = OpVariable %_ptr_Function_v2int Function %31
-  %x_253_phi = OpVariable %_ptr_Function_v4float Function %7
-  %x_254_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_256_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_233 = OpVariable %_ptr_Function_int Function %68
-      %x_234 = OpVariable %_ptr_Function_int Function %68
-  %x_235_phi = OpVariable %_ptr_Function_int Function %68
-  %x_241_phi = OpVariable %_ptr_Function_bool Function %40
-    %x_215_1 = OpVariable %_ptr_Function_v2int Function %31
-         %42 = OpLoad %v4float %gl_FragCoord
-         %45 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %46 = OpLoad %v2float %45
-         %47 = OpCompositeExtract %float %42 0
-         %48 = OpCompositeExtract %float %42 1
-         %49 = OpCompositeConstruct %v2float %47 %48
-         %50 = OpFDiv %v2float %49 %46
-         %52 = OpCompositeExtract %float %50 0
-         %54 = OpFMul %float %52 %float_256
-         %51 = OpConvertFToS %int %54
-         %56 = OpCompositeExtract %float %50 1
-         %57 = OpFMul %float %56 %float_256
-         %55 = OpConvertFToS %int %57
-         %58 = OpCompositeConstruct %v2int %51 %55
-               OpStore %x_210 %58
-               OpSelectionMerge %59 None
-               OpSwitch %uint_0 %60
-         %60 = OpLabel
-         %61 = OpLoad %v2int %x_210
-               OpStore %x_214_phi %61
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %72 = OpLoad %v2int %x_214_phi
-         %73 = OpCompositeExtract %int %72 1
-               OpStore %x_253_phi %75
-               OpStore %x_254_phi %false
-         %78 = OpINotEqual %bool %73 %int_256
-               OpSelectionMerge %79 None
-               OpBranchConditional %78 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %63
-         %79 = OpLabel
-         %82 = OpCompositeExtract %int %72 0
-               OpStore %x_196 %240
-        %241 = OpAccessChain %_ptr_Function_int %x_196 %73
-        %242 = OpLoad %int %241
-        %243 = OpIAdd %int %242 %int_15
-        %244 = OpSLessThan %bool %82 %243
-               OpSelectionMerge %245 None
-               OpBranchConditional %244 %246 %245
-        %246 = OpLabel
-               OpStore %x_197 %240
-               OpBranch %245
-        %245 = OpLabel
-               OpSelectionMerge %247 None
-               OpBranchConditional %244 %248 %249
-        %248 = OpLabel
-        %250 = OpAccessChain %_ptr_Function_int %x_197 %73
-        %251 = OpLoad %int %250
-               OpStore %x_233 %251
-        %252 = OpLoad %int %x_233
-               OpStore %x_235_phi %252
-               OpBranch %247
-        %249 = OpLabel
-               OpStore %x_234 %int_0
-        %253 = OpLoad %int %x_234
-               OpStore %x_235_phi %253
-               OpBranch %247
-        %247 = OpLabel
-        %254 = OpLoad %int %x_235_phi
-        %255 = OpISub %int %254 %int_15
-        %256 = OpSGreaterThan %bool %82 %255
-               OpSelectionMerge %257 None
-               OpBranchConditional %244 %258 %259
-        %258 = OpLabel
-               OpStore %x_241_phi %256
-               OpBranch %257
-        %259 = OpLabel
-               OpStore %x_241_phi %244
-               OpBranch %257
-        %257 = OpLabel
-        %260 = OpLoad %bool %x_241_phi
-               OpSelectionMerge %261 None
-               OpBranchConditional %260 %262 %261
-        %262 = OpLabel
-               OpStore %x_198 %240
-        %263 = OpAccessChain %_ptr_Function_int %x_198 %73
-        %264 = OpLoad %int %263
-        %269 = OpISub %int %82 %264
-        %268 = OpConvertSToF %float %269
-        %266 = OpExtInst %float %267 FAbs %268
-        %270 = OpFSub %float %float_15 %266
-        %272 = OpFMul %float %270 %float_0_0666666701
-        %274 = OpCompositeConstruct %v4float %272 %272 %272 %float_1
-               OpStore %x_251 %274
-        %275 = OpLoad %v4float %x_251
-               OpStore %x_253_phi %275
-               OpStore %x_254_phi %true
-               OpBranch %63
-        %261 = OpLabel
-               OpStore %x_215_1 %72
-        %279 = OpAccessChain %_ptr_Function_int %x_215_1 %uint_1
-        %281 = OpIAdd %int %73 %int_1
-               OpStore %279 %281
-        %282 = OpLoad %v2int %x_215_1
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %x_214_phi %282
-               OpBranch %62
-         %63 = OpLabel
-        %283 = OpLoad %v4float %x_253_phi
-               OpStore %x_253 %283
-        %284 = OpLoad %bool %x_254_phi
-        %285 = OpLoad %v4float %x_253
-               OpStore %x_256_phi %285
-               OpSelectionMerge %286 None
-               OpBranchConditional %284 %287 %286
-        %287 = OpLabel
-               OpBranch %59
-        %286 = OpLabel
-               OpStore %x_256_phi %288
-               OpBranch %59
-         %59 = OpLabel
-        %289 = OpLoad %v4float %x_256_phi
-               OpStore %x_GLF_color %289
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %290
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %294 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %295 = OpFunctionCall %void %main_1
-        %296 = OpLoad %v4float %x_GLF_color
-        %297 = OpCompositeConstruct %main_out %296
-               OpReturnValue %297
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %299 = OpLabel
-        %301 = OpLoad %v4float %gl_FragCoord_param_1
-        %300 = OpFunctionCall %main_out %main_inner %301
-        %302 = OpCompositeExtract %v4float %300 0
-               OpStore %x_GLF_color_1_1 %302
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.wgsl
deleted file mode 100644
index 43a6481..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,106 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_196 : array<i32, 256>;
-  var x_197 : array<i32, 256>;
-  var x_198 : array<i32, 256>;
-  var x_210 : vec2<i32>;
-  var x_251 : vec4<f32>;
-  var x_253 : vec4<f32>;
-  var x_214_phi : vec2<i32>;
-  var x_253_phi : vec4<f32>;
-  var x_254_phi : bool;
-  var x_256_phi : vec4<f32>;
-  let x_199 : vec4<f32> = gl_FragCoord;
-  let x_202 : vec2<f32> = x_6.resolution;
-  let x_203 : vec2<f32> = (vec2<f32>(x_199.x, x_199.y) / x_202);
-  x_210 = vec2<i32>(i32((x_203.x * 256.0)), i32((x_203.y * 256.0)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      loop {
-        var x_233 : i32;
-        var x_234 : i32;
-        var x_235_phi : i32;
-        var x_241_phi : bool;
-        let x_214 : vec2<i32> = x_214_phi;
-        let x_217 : i32 = x_214.y;
-        x_253_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_254_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        let x_221 : i32 = x_214.x;
-        x_196 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        let x_223 : i32 = x_196[x_217];
-        let x_225 : bool = (x_221 < (x_223 + 15));
-        if (x_225) {
-          x_197 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        }
-        if (x_225) {
-          x_233 = x_197[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        let x_235 : i32 = x_235_phi;
-        let x_237 : bool = (x_221 > (x_235 - 15));
-        if (x_225) {
-          x_241_phi = x_237;
-        } else {
-          x_241_phi = x_225;
-        }
-        let x_241 : bool = x_241_phi;
-        if (x_241) {
-          x_198 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_245 : i32 = x_198[x_217];
-          let x_250 : f32 = ((15.0 - abs(f32((x_221 - x_245)))) * 0.06666667);
-          x_251 = vec4<f32>(x_250, x_250, x_250, 1.0);
-          x_253_phi = x_251;
-          x_254_phi = true;
-          break;
-        }
-        var x_215_1 : vec2<i32> = x_214;
-        x_215_1.y = (x_217 + 1);
-        let x_215 : vec2<i32> = x_215_1;
-
-        continuing {
-          x_214_phi = x_215;
-        }
-      }
-      x_253 = x_253_phi;
-      let x_254 : bool = x_254_phi;
-      x_256_phi = x_253;
-      if (x_254) {
-        break;
-      }
-      x_256_phi = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-  }
-  let x_256 : vec4<f32> = x_256_phi;
-  x_GLF_color = x_256;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.hlsl
deleted file mode 100644
index b185dbb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,107 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_196[256] = (int[256])0;
-  int x_197[256] = (int[256])0;
-  int x_198[256] = (int[256])0;
-  int2 x_210 = int2(0, 0);
-  float4 x_249 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_251 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int2 x_214_phi = int2(0, 0);
-  float4 x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_252_phi = false;
-  float4 x_254_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_199 = gl_FragCoord;
-  const float2 x_202 = asfloat(x_6[0].xy);
-  const float2 x_203 = (float2(x_199.x, x_199.y) / x_202);
-  x_210 = int2(int((x_203.x * 256.0f)), int((x_203.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      while (true) {
-        int x_233 = 0;
-        int x_234 = 0;
-        int x_235_phi = 0;
-        const int2 x_214 = x_214_phi;
-        const int x_217 = x_214.y;
-        x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_252_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        const int x_221 = x_214.x;
-        const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-        x_196 = tint_symbol_4;
-        const int x_223 = x_196[x_217];
-        const bool x_225 = (x_221 < (x_223 + 15));
-        if (x_225) {
-          const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_197 = tint_symbol_5;
-        }
-        if (x_225) {
-          x_233 = x_197[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        const bool x_237 = (x_221 > (x_235_phi - 15));
-        if ((x_225 ? x_237 : x_225)) {
-          const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_198 = tint_symbol_6;
-          const int x_243 = x_198[x_217];
-          const float x_248 = ((15.0f - abs(float((x_221 - x_243)))) * 0.06666667f);
-          x_249 = float4(x_248, x_248, x_248, 1.0f);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        int2 x_215_1 = x_214;
-        x_215_1.y = (x_217 + 1);
-        const int2 x_215 = x_215_1;
-        {
-          x_214_phi = x_215;
-        }
-      }
-      x_251 = x_251_phi;
-      const bool x_252 = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  x_GLF_color = x_254_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.msl
deleted file mode 100644
index 37734f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper x_196 = {};
-  tint_array_wrapper x_197 = {};
-  tint_array_wrapper x_198 = {};
-  int2 x_210 = 0;
-  float4 x_249 = 0.0f;
-  float4 x_251 = 0.0f;
-  int2 x_214_phi = 0;
-  float4 x_251_phi = 0.0f;
-  bool x_252_phi = false;
-  float4 x_254_phi = 0.0f;
-  float4 const x_199 = *(tint_symbol_6);
-  float2 const x_202 = x_6.resolution;
-  float2 const x_203 = (float2(x_199.x, x_199.y) / x_202);
-  x_210 = int2(int((x_203.x * 256.0f)), int((x_203.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      while (true) {
-        int x_233 = 0;
-        int x_234 = 0;
-        int x_235_phi = 0;
-        int2 const x_214 = x_214_phi;
-        int const x_217 = x_214.y;
-        x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_252_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        int const x_221 = x_214.x;
-        tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-        x_196 = tint_symbol_2;
-        int const x_223 = x_196.arr[x_217];
-        bool const x_225 = (x_221 < as_type<int>((as_type<uint>(x_223) + as_type<uint>(15))));
-        if (x_225) {
-          tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_197 = tint_symbol_3;
-        }
-        if (x_225) {
-          x_233 = x_197.arr[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        int const x_235 = x_235_phi;
-        bool const x_237 = (x_221 > as_type<int>((as_type<uint>(x_235) - as_type<uint>(15))));
-        if (select(x_225, x_237, x_225)) {
-          tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_198 = tint_symbol_4;
-          int const x_243 = x_198.arr[x_217];
-          float const x_248 = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_221) - as_type<uint>(x_243)))))) * 0.06666667f);
-          x_249 = float4(x_248, x_248, x_248, 1.0f);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        int2 x_215_1 = x_214;
-        x_215_1.y = as_type<int>((as_type<uint>(x_217) + as_type<uint>(1)));
-        int2 const x_215 = x_215_1;
-        {
-          x_214_phi = x_215;
-        }
-      }
-      x_251 = x_251_phi;
-      bool const x_252 = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  float4 const x_254 = x_254_phi;
-  *(tint_symbol_7) = x_254;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.spvasm
deleted file mode 100644
index cbcac4d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,397 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 299
-; Schema: 0
-               OpCapability Shader
-        %263 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_196 "x_196"
-               OpName %x_197 "x_197"
-               OpName %x_198 "x_198"
-               OpName %x_210 "x_210"
-               OpName %x_249 "x_249"
-               OpName %x_251 "x_251"
-               OpName %x_214_phi "x_214_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_252_phi "x_252_phi"
-               OpName %x_254_phi "x_254_phi"
-               OpName %x_233 "x_233"
-               OpName %x_234 "x_234"
-               OpName %x_235_phi "x_235_phi"
-               OpName %x_215_1 "x_215_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %25 = OpConstantNull %_arr_int_uint_256
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-%_ptr_Function_int = OpTypePointer Function %int
-         %68 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %74 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-    %int_256 = OpConstant %int 256
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %239 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-   %float_15 = OpConstant %float 15
-%float_0_0666666701 = OpConstant %float 0.0666666701
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-        %284 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %286 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %x_196 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_197 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_198 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_210 = OpVariable %_ptr_Function_v2int Function %31
-      %x_249 = OpVariable %_ptr_Function_v4float Function %7
-      %x_251 = OpVariable %_ptr_Function_v4float Function %7
-  %x_214_phi = OpVariable %_ptr_Function_v2int Function %31
-  %x_251_phi = OpVariable %_ptr_Function_v4float Function %7
-  %x_252_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_254_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_233 = OpVariable %_ptr_Function_int Function %68
-      %x_234 = OpVariable %_ptr_Function_int Function %68
-  %x_235_phi = OpVariable %_ptr_Function_int Function %68
-    %x_215_1 = OpVariable %_ptr_Function_v2int Function %31
-         %42 = OpLoad %v4float %gl_FragCoord
-         %45 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %46 = OpLoad %v2float %45
-         %47 = OpCompositeExtract %float %42 0
-         %48 = OpCompositeExtract %float %42 1
-         %49 = OpCompositeConstruct %v2float %47 %48
-         %50 = OpFDiv %v2float %49 %46
-         %52 = OpCompositeExtract %float %50 0
-         %54 = OpFMul %float %52 %float_256
-         %51 = OpConvertFToS %int %54
-         %56 = OpCompositeExtract %float %50 1
-         %57 = OpFMul %float %56 %float_256
-         %55 = OpConvertFToS %int %57
-         %58 = OpCompositeConstruct %v2int %51 %55
-               OpStore %x_210 %58
-               OpSelectionMerge %59 None
-               OpSwitch %uint_0 %60
-         %60 = OpLabel
-         %61 = OpLoad %v2int %x_210
-               OpStore %x_214_phi %61
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %71 = OpLoad %v2int %x_214_phi
-         %72 = OpCompositeExtract %int %71 1
-               OpStore %x_251_phi %74
-               OpStore %x_252_phi %false
-         %77 = OpINotEqual %bool %72 %int_256
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-               OpBranch %63
-         %78 = OpLabel
-         %81 = OpCompositeExtract %int %71 0
-               OpStore %x_196 %239
-        %240 = OpAccessChain %_ptr_Function_int %x_196 %72
-        %241 = OpLoad %int %240
-        %242 = OpIAdd %int %241 %int_15
-        %243 = OpSLessThan %bool %81 %242
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-               OpStore %x_197 %239
-               OpBranch %244
-        %244 = OpLabel
-               OpSelectionMerge %246 None
-               OpBranchConditional %243 %247 %248
-        %247 = OpLabel
-        %249 = OpAccessChain %_ptr_Function_int %x_197 %72
-        %250 = OpLoad %int %249
-               OpStore %x_233 %250
-        %251 = OpLoad %int %x_233
-               OpStore %x_235_phi %251
-               OpBranch %246
-        %248 = OpLabel
-               OpStore %x_234 %int_0
-        %252 = OpLoad %int %x_234
-               OpStore %x_235_phi %252
-               OpBranch %246
-        %246 = OpLabel
-        %253 = OpLoad %int %x_235_phi
-        %254 = OpISub %int %253 %int_15
-        %255 = OpSGreaterThan %bool %81 %254
-        %256 = OpSelect %bool %243 %255 %243
-               OpSelectionMerge %257 None
-               OpBranchConditional %256 %258 %257
-        %258 = OpLabel
-               OpStore %x_198 %239
-        %259 = OpAccessChain %_ptr_Function_int %x_198 %72
-        %260 = OpLoad %int %259
-        %265 = OpISub %int %81 %260
-        %264 = OpConvertSToF %float %265
-        %262 = OpExtInst %float %263 FAbs %264
-        %266 = OpFSub %float %float_15 %262
-        %268 = OpFMul %float %266 %float_0_0666666701
-        %270 = OpCompositeConstruct %v4float %268 %268 %268 %float_1
-               OpStore %x_249 %270
-        %271 = OpLoad %v4float %x_249
-               OpStore %x_251_phi %271
-               OpStore %x_252_phi %true
-               OpBranch %63
-        %257 = OpLabel
-               OpStore %x_215_1 %71
-        %275 = OpAccessChain %_ptr_Function_int %x_215_1 %uint_1
-        %277 = OpIAdd %int %72 %int_1
-               OpStore %275 %277
-        %278 = OpLoad %v2int %x_215_1
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %x_214_phi %278
-               OpBranch %62
-         %63 = OpLabel
-        %279 = OpLoad %v4float %x_251_phi
-               OpStore %x_251 %279
-        %280 = OpLoad %bool %x_252_phi
-        %281 = OpLoad %v4float %x_251
-               OpStore %x_254_phi %281
-               OpSelectionMerge %282 None
-               OpBranchConditional %280 %283 %282
-        %283 = OpLabel
-               OpBranch %59
-        %282 = OpLabel
-               OpStore %x_254_phi %284
-               OpBranch %59
-         %59 = OpLabel
-        %285 = OpLoad %v4float %x_254_phi
-               OpStore %x_GLF_color %285
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %286
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %290 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %291 = OpFunctionCall %void %main_1
-        %292 = OpLoad %v4float %x_GLF_color
-        %293 = OpCompositeConstruct %main_out %292
-               OpReturnValue %293
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %295 = OpLabel
-        %297 = OpLoad %v4float %gl_FragCoord_param_1
-        %296 = OpFunctionCall %main_out %main_inner %297
-        %298 = OpCompositeExtract %v4float %296 0
-               OpStore %x_GLF_color_1_1 %298
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.wgsl
deleted file mode 100644
index b52da64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_196 : array<i32, 256>;
-  var x_197 : array<i32, 256>;
-  var x_198 : array<i32, 256>;
-  var x_210 : vec2<i32>;
-  var x_249 : vec4<f32>;
-  var x_251 : vec4<f32>;
-  var x_214_phi : vec2<i32>;
-  var x_251_phi : vec4<f32>;
-  var x_252_phi : bool;
-  var x_254_phi : vec4<f32>;
-  let x_199 : vec4<f32> = gl_FragCoord;
-  let x_202 : vec2<f32> = x_6.resolution;
-  let x_203 : vec2<f32> = (vec2<f32>(x_199.x, x_199.y) / x_202);
-  x_210 = vec2<i32>(i32((x_203.x * 256.0)), i32((x_203.y * 256.0)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      loop {
-        var x_233 : i32;
-        var x_234 : i32;
-        var x_235_phi : i32;
-        let x_214 : vec2<i32> = x_214_phi;
-        let x_217 : i32 = x_214.y;
-        x_251_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_252_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        let x_221 : i32 = x_214.x;
-        x_196 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        let x_223 : i32 = x_196[x_217];
-        let x_225 : bool = (x_221 < (x_223 + 15));
-        if (x_225) {
-          x_197 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        }
-        if (x_225) {
-          x_233 = x_197[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        let x_235 : i32 = x_235_phi;
-        let x_237 : bool = (x_221 > (x_235 - 15));
-        if (select(x_225, x_237, x_225)) {
-          x_198 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_243 : i32 = x_198[x_217];
-          let x_248 : f32 = ((15.0 - abs(f32((x_221 - x_243)))) * 0.06666667);
-          x_249 = vec4<f32>(x_248, x_248, x_248, 1.0);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        var x_215_1 : vec2<i32> = x_214;
-        x_215_1.y = (x_217 + 1);
-        let x_215 : vec2<i32> = x_215_1;
-
-        continuing {
-          x_214_phi = x_215;
-        }
-      }
-      x_251 = x_251_phi;
-      let x_252 : bool = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-  }
-  let x_254 : vec4<f32> = x_254_phi;
-  x_GLF_color = x_254;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.hlsl
deleted file mode 100644
index b185dbb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,107 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_196[256] = (int[256])0;
-  int x_197[256] = (int[256])0;
-  int x_198[256] = (int[256])0;
-  int2 x_210 = int2(0, 0);
-  float4 x_249 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_251 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int2 x_214_phi = int2(0, 0);
-  float4 x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  bool x_252_phi = false;
-  float4 x_254_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float4 x_199 = gl_FragCoord;
-  const float2 x_202 = asfloat(x_6[0].xy);
-  const float2 x_203 = (float2(x_199.x, x_199.y) / x_202);
-  x_210 = int2(int((x_203.x * 256.0f)), int((x_203.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      while (true) {
-        int x_233 = 0;
-        int x_234 = 0;
-        int x_235_phi = 0;
-        const int2 x_214 = x_214_phi;
-        const int x_217 = x_214.y;
-        x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_252_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        const int x_221 = x_214.x;
-        const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-        x_196 = tint_symbol_4;
-        const int x_223 = x_196[x_217];
-        const bool x_225 = (x_221 < (x_223 + 15));
-        if (x_225) {
-          const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_197 = tint_symbol_5;
-        }
-        if (x_225) {
-          x_233 = x_197[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        const bool x_237 = (x_221 > (x_235_phi - 15));
-        if ((x_225 ? x_237 : x_225)) {
-          const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-          x_198 = tint_symbol_6;
-          const int x_243 = x_198[x_217];
-          const float x_248 = ((15.0f - abs(float((x_221 - x_243)))) * 0.06666667f);
-          x_249 = float4(x_248, x_248, x_248, 1.0f);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        int2 x_215_1 = x_214;
-        x_215_1.y = (x_217 + 1);
-        const int2 x_215 = x_215_1;
-        {
-          x_214_phi = x_215;
-        }
-      }
-      x_251 = x_251_phi;
-      const bool x_252 = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  x_GLF_color = x_254_phi;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.msl
deleted file mode 100644
index 37734f4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  tint_array_wrapper x_196 = {};
-  tint_array_wrapper x_197 = {};
-  tint_array_wrapper x_198 = {};
-  int2 x_210 = 0;
-  float4 x_249 = 0.0f;
-  float4 x_251 = 0.0f;
-  int2 x_214_phi = 0;
-  float4 x_251_phi = 0.0f;
-  bool x_252_phi = false;
-  float4 x_254_phi = 0.0f;
-  float4 const x_199 = *(tint_symbol_6);
-  float2 const x_202 = x_6.resolution;
-  float2 const x_203 = (float2(x_199.x, x_199.y) / x_202);
-  x_210 = int2(int((x_203.x * 256.0f)), int((x_203.y * 256.0f)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      while (true) {
-        int x_233 = 0;
-        int x_234 = 0;
-        int x_235_phi = 0;
-        int2 const x_214 = x_214_phi;
-        int const x_217 = x_214.y;
-        x_251_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-        x_252_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        int const x_221 = x_214.x;
-        tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-        x_196 = tint_symbol_2;
-        int const x_223 = x_196.arr[x_217];
-        bool const x_225 = (x_221 < as_type<int>((as_type<uint>(x_223) + as_type<uint>(15))));
-        if (x_225) {
-          tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_197 = tint_symbol_3;
-        }
-        if (x_225) {
-          x_233 = x_197.arr[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        int const x_235 = x_235_phi;
-        bool const x_237 = (x_221 > as_type<int>((as_type<uint>(x_235) - as_type<uint>(15))));
-        if (select(x_225, x_237, x_225)) {
-          tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-          x_198 = tint_symbol_4;
-          int const x_243 = x_198.arr[x_217];
-          float const x_248 = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_221) - as_type<uint>(x_243)))))) * 0.06666667f);
-          x_249 = float4(x_248, x_248, x_248, 1.0f);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        int2 x_215_1 = x_214;
-        x_215_1.y = as_type<int>((as_type<uint>(x_217) + as_type<uint>(1)));
-        int2 const x_215 = x_215_1;
-        {
-          x_214_phi = x_215;
-        }
-      }
-      x_251 = x_251_phi;
-      bool const x_252 = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-  }
-  float4 const x_254 = x_254_phi;
-  *(tint_symbol_7) = x_254;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.spvasm
deleted file mode 100644
index cbcac4d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.spvasm
+++ /dev/null
@@ -1,397 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 299
-; Schema: 0
-               OpCapability Shader
-        %263 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_196 "x_196"
-               OpName %x_197 "x_197"
-               OpName %x_198 "x_198"
-               OpName %x_210 "x_210"
-               OpName %x_249 "x_249"
-               OpName %x_251 "x_251"
-               OpName %x_214_phi "x_214_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_252_phi "x_252_phi"
-               OpName %x_254_phi "x_254_phi"
-               OpName %x_233 "x_233"
-               OpName %x_234 "x_234"
-               OpName %x_235_phi "x_235_phi"
-               OpName %x_215_1 "x_215_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %25 = OpConstantNull %_arr_int_uint_256
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-%_ptr_Function_int = OpTypePointer Function %int
-         %68 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %74 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-    %int_256 = OpConstant %int 256
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %239 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-   %float_15 = OpConstant %float 15
-%float_0_0666666701 = OpConstant %float 0.0666666701
-    %float_1 = OpConstant %float 1
-       %true = OpConstantTrue %bool
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-        %284 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %286 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-      %x_196 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_197 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_198 = OpVariable %_ptr_Function__arr_int_uint_256 Function %25
-      %x_210 = OpVariable %_ptr_Function_v2int Function %31
-      %x_249 = OpVariable %_ptr_Function_v4float Function %7
-      %x_251 = OpVariable %_ptr_Function_v4float Function %7
-  %x_214_phi = OpVariable %_ptr_Function_v2int Function %31
-  %x_251_phi = OpVariable %_ptr_Function_v4float Function %7
-  %x_252_phi = OpVariable %_ptr_Function_bool Function %40
-  %x_254_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_233 = OpVariable %_ptr_Function_int Function %68
-      %x_234 = OpVariable %_ptr_Function_int Function %68
-  %x_235_phi = OpVariable %_ptr_Function_int Function %68
-    %x_215_1 = OpVariable %_ptr_Function_v2int Function %31
-         %42 = OpLoad %v4float %gl_FragCoord
-         %45 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %46 = OpLoad %v2float %45
-         %47 = OpCompositeExtract %float %42 0
-         %48 = OpCompositeExtract %float %42 1
-         %49 = OpCompositeConstruct %v2float %47 %48
-         %50 = OpFDiv %v2float %49 %46
-         %52 = OpCompositeExtract %float %50 0
-         %54 = OpFMul %float %52 %float_256
-         %51 = OpConvertFToS %int %54
-         %56 = OpCompositeExtract %float %50 1
-         %57 = OpFMul %float %56 %float_256
-         %55 = OpConvertFToS %int %57
-         %58 = OpCompositeConstruct %v2int %51 %55
-               OpStore %x_210 %58
-               OpSelectionMerge %59 None
-               OpSwitch %uint_0 %60
-         %60 = OpLabel
-         %61 = OpLoad %v2int %x_210
-               OpStore %x_214_phi %61
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %71 = OpLoad %v2int %x_214_phi
-         %72 = OpCompositeExtract %int %71 1
-               OpStore %x_251_phi %74
-               OpStore %x_252_phi %false
-         %77 = OpINotEqual %bool %72 %int_256
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-               OpBranch %63
-         %78 = OpLabel
-         %81 = OpCompositeExtract %int %71 0
-               OpStore %x_196 %239
-        %240 = OpAccessChain %_ptr_Function_int %x_196 %72
-        %241 = OpLoad %int %240
-        %242 = OpIAdd %int %241 %int_15
-        %243 = OpSLessThan %bool %81 %242
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-               OpStore %x_197 %239
-               OpBranch %244
-        %244 = OpLabel
-               OpSelectionMerge %246 None
-               OpBranchConditional %243 %247 %248
-        %247 = OpLabel
-        %249 = OpAccessChain %_ptr_Function_int %x_197 %72
-        %250 = OpLoad %int %249
-               OpStore %x_233 %250
-        %251 = OpLoad %int %x_233
-               OpStore %x_235_phi %251
-               OpBranch %246
-        %248 = OpLabel
-               OpStore %x_234 %int_0
-        %252 = OpLoad %int %x_234
-               OpStore %x_235_phi %252
-               OpBranch %246
-        %246 = OpLabel
-        %253 = OpLoad %int %x_235_phi
-        %254 = OpISub %int %253 %int_15
-        %255 = OpSGreaterThan %bool %81 %254
-        %256 = OpSelect %bool %243 %255 %243
-               OpSelectionMerge %257 None
-               OpBranchConditional %256 %258 %257
-        %258 = OpLabel
-               OpStore %x_198 %239
-        %259 = OpAccessChain %_ptr_Function_int %x_198 %72
-        %260 = OpLoad %int %259
-        %265 = OpISub %int %81 %260
-        %264 = OpConvertSToF %float %265
-        %262 = OpExtInst %float %263 FAbs %264
-        %266 = OpFSub %float %float_15 %262
-        %268 = OpFMul %float %266 %float_0_0666666701
-        %270 = OpCompositeConstruct %v4float %268 %268 %268 %float_1
-               OpStore %x_249 %270
-        %271 = OpLoad %v4float %x_249
-               OpStore %x_251_phi %271
-               OpStore %x_252_phi %true
-               OpBranch %63
-        %257 = OpLabel
-               OpStore %x_215_1 %71
-        %275 = OpAccessChain %_ptr_Function_int %x_215_1 %uint_1
-        %277 = OpIAdd %int %72 %int_1
-               OpStore %275 %277
-        %278 = OpLoad %v2int %x_215_1
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %x_214_phi %278
-               OpBranch %62
-         %63 = OpLabel
-        %279 = OpLoad %v4float %x_251_phi
-               OpStore %x_251 %279
-        %280 = OpLoad %bool %x_252_phi
-        %281 = OpLoad %v4float %x_251
-               OpStore %x_254_phi %281
-               OpSelectionMerge %282 None
-               OpBranchConditional %280 %283 %282
-        %283 = OpLabel
-               OpBranch %59
-        %282 = OpLabel
-               OpStore %x_254_phi %284
-               OpBranch %59
-         %59 = OpLabel
-        %285 = OpLoad %v4float %x_254_phi
-               OpStore %x_GLF_color %285
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %286
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %290 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %291 = OpFunctionCall %void %main_1
-        %292 = OpLoad %v4float %x_GLF_color
-        %293 = OpCompositeConstruct %main_out %292
-               OpReturnValue %293
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %295 = OpLabel
-        %297 = OpLoad %v4float %gl_FragCoord_param_1
-        %296 = OpFunctionCall %main_out %main_inner %297
-        %298 = OpCompositeExtract %v4float %296 0
-               OpStore %x_GLF_color_1_1 %298
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.wgsl
deleted file mode 100644
index b52da64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-O-op-select-to-op-phi/2.wgsl.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_196 : array<i32, 256>;
-  var x_197 : array<i32, 256>;
-  var x_198 : array<i32, 256>;
-  var x_210 : vec2<i32>;
-  var x_249 : vec4<f32>;
-  var x_251 : vec4<f32>;
-  var x_214_phi : vec2<i32>;
-  var x_251_phi : vec4<f32>;
-  var x_252_phi : bool;
-  var x_254_phi : vec4<f32>;
-  let x_199 : vec4<f32> = gl_FragCoord;
-  let x_202 : vec2<f32> = x_6.resolution;
-  let x_203 : vec2<f32> = (vec2<f32>(x_199.x, x_199.y) / x_202);
-  x_210 = vec2<i32>(i32((x_203.x * 256.0)), i32((x_203.y * 256.0)));
-  switch(0u) {
-    default: {
-      x_214_phi = x_210;
-      loop {
-        var x_233 : i32;
-        var x_234 : i32;
-        var x_235_phi : i32;
-        let x_214 : vec2<i32> = x_214_phi;
-        let x_217 : i32 = x_214.y;
-        x_251_phi = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-        x_252_phi = false;
-        if ((x_217 != 256)) {
-        } else {
-          break;
-        }
-        let x_221 : i32 = x_214.x;
-        x_196 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        let x_223 : i32 = x_196[x_217];
-        let x_225 : bool = (x_221 < (x_223 + 15));
-        if (x_225) {
-          x_197 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-        }
-        if (x_225) {
-          x_233 = x_197[x_217];
-          x_235_phi = x_233;
-        } else {
-          x_234 = 0;
-          x_235_phi = x_234;
-        }
-        let x_235 : i32 = x_235_phi;
-        let x_237 : bool = (x_221 > (x_235 - 15));
-        if (select(x_225, x_237, x_225)) {
-          x_198 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-          let x_243 : i32 = x_198[x_217];
-          let x_248 : f32 = ((15.0 - abs(f32((x_221 - x_243)))) * 0.06666667);
-          x_249 = vec4<f32>(x_248, x_248, x_248, 1.0);
-          x_251_phi = x_249;
-          x_252_phi = true;
-          break;
-        }
-        var x_215_1 : vec2<i32> = x_214;
-        x_215_1.y = (x_217 + 1);
-        let x_215 : vec2<i32> = x_215_1;
-
-        continuing {
-          x_214_phi = x_215;
-        }
-      }
-      x_251 = x_251_phi;
-      let x_252 : bool = x_252_phi;
-      x_254_phi = x_251;
-      if (x_252) {
-        break;
-      }
-      x_254_phi = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-    }
-  }
-  let x_254 : vec4<f32> = x_254_phi;
-  x_GLF_color = x_254;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.hlsl
deleted file mode 100644
index 687698f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,89 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 trace_vi2_(inout int2 pos) {
-  int indexable[256] = (int[256])0;
-  int indexable_1[256] = (int[256])0;
-  float p = 0.0f;
-  int indexable_2[256] = (int[256])0;
-  while (true) {
-    bool x_247 = false;
-    bool x_248_phi = false;
-    const int x_227 = pos.y;
-    if ((x_227 != 256)) {
-    } else {
-      break;
-    }
-    const int x_231 = pos.x;
-    const int x_233 = pos.y;
-    const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-    indexable = tint_symbol_4;
-    const int x_235 = indexable[x_233];
-    const bool x_237 = (x_231 < (x_235 + 15));
-    x_248_phi = x_237;
-    if (x_237) {
-      const int x_241 = pos.x;
-      const int x_243 = pos.y;
-      const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-      indexable_1 = tint_symbol_5;
-      const int x_245 = indexable_1[x_243];
-      x_247 = (x_241 > (x_245 - 15));
-      x_248_phi = x_247;
-    }
-    if (x_248_phi) {
-      const int x_252 = pos.x;
-      const int x_254 = pos.y;
-      const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-      indexable_2 = tint_symbol_6;
-      const int x_256 = indexable_2[x_254];
-      p = ((15.0f - abs(float((x_252 - x_256)))) / 15.0f);
-      return float4(p, p, p, 1.0f);
-    }
-    const int x_267 = pos.y;
-    pos.y = (x_267 + 1);
-  }
-  return float4(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1() {
-  float2 pos_1 = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int2 param = int2(0, 0);
-  const float4 x_205 = gl_FragCoord;
-  const float2 x_208 = asfloat(x_13[0].xy);
-  pos_1 = (float2(x_205.x, x_205.y) / x_208);
-  const float x_211 = pos_1.x;
-  const float x_215 = pos_1.y;
-  ipos = int2(int((x_211 * 256.0f)), int((x_215 * 256.0f)));
-  param = ipos;
-  const float4 x_220 = trace_vi2_(param);
-  x_GLF_color = x_220;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.msl
deleted file mode 100644
index 0384463..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 trace_vi2_(thread int2* const pos) {
-  tint_array_wrapper indexable = {};
-  tint_array_wrapper indexable_1 = {};
-  float p = 0.0f;
-  tint_array_wrapper indexable_2 = {};
-  while (true) {
-    bool x_247 = false;
-    bool x_248_phi = false;
-    int const x_227 = (*(pos)).y;
-    if ((x_227 != 256)) {
-    } else {
-      break;
-    }
-    int const x_231 = (*(pos)).x;
-    int const x_233 = (*(pos)).y;
-    tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-    indexable = tint_symbol_2;
-    int const x_235 = indexable.arr[x_233];
-    bool const x_237 = (x_231 < as_type<int>((as_type<uint>(x_235) + as_type<uint>(15))));
-    x_248_phi = x_237;
-    if (x_237) {
-      int const x_241 = (*(pos)).x;
-      int const x_243 = (*(pos)).y;
-      tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-      indexable_1 = tint_symbol_3;
-      int const x_245 = indexable_1.arr[x_243];
-      x_247 = (x_241 > as_type<int>((as_type<uint>(x_245) - as_type<uint>(15))));
-      x_248_phi = x_247;
-    }
-    bool const x_248 = x_248_phi;
-    if (x_248) {
-      int const x_252 = (*(pos)).x;
-      int const x_254 = (*(pos)).y;
-      tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-      indexable_2 = tint_symbol_4;
-      int const x_256 = indexable_2.arr[x_254];
-      p = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_252) - as_type<uint>(x_256)))))) / 15.0f);
-      float const x_262 = p;
-      float const x_263 = p;
-      float const x_264 = p;
-      return float4(x_262, x_263, x_264, 1.0f);
-    }
-    int const x_267 = (*(pos)).y;
-    (*(pos)).y = as_type<int>((as_type<uint>(x_267) + as_type<uint>(1)));
-  }
-  return float4(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1(constant buf0& x_13, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float2 pos_1 = 0.0f;
-  int2 ipos = 0;
-  int2 param = 0;
-  float4 const x_205 = *(tint_symbol_6);
-  float2 const x_208 = x_13.resolution;
-  pos_1 = (float2(x_205.x, x_205.y) / x_208);
-  float const x_211 = pos_1.x;
-  float const x_215 = pos_1.y;
-  ipos = int2(int((x_211 * 256.0f)), int((x_215 * 256.0f)));
-  int2 const x_219 = ipos;
-  param = x_219;
-  float4 const x_220 = trace_vi2_(&(param));
-  *(tint_symbol_7) = x_220;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_13, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.spvasm
deleted file mode 100644
index 0c45b13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,378 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 310
-; Schema: 0
-               OpCapability Shader
-        %247 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %trace_vi2_ "trace_vi2_"
-               OpName %pos "pos"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %p "p"
-               OpName %indexable_2 "indexable_2"
-               OpName %x_247 "x_247"
-               OpName %x_248_phi "x_248_phi"
-               OpName %main_1 "main_1"
-               OpName %pos_1 "pos_1"
-               OpName %ipos "ipos"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %15 = OpTypeFunction %v4float %_ptr_Function_v2int
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %27 = OpConstantNull %_arr_int_uint_256
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-    %int_256 = OpConstant %int 256
-     %uint_0 = OpConstant %uint 0
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %216 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-   %float_15 = OpConstant %float 15
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-        %265 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-       %void = OpTypeVoid
-        %266 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %272 = OpConstantNull %v2float
-        %274 = OpConstantNull %v2int
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-   %main_out = OpTypeStruct %v4float
-        %297 = OpTypeFunction %main_out %v4float
- %trace_vi2_ = OpFunction %v4float None %15
-        %pos = OpFunctionParameter %_ptr_Function_v2int
-         %21 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-%indexable_1 = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-          %p = OpVariable %_ptr_Function_float Function %31
-%indexable_2 = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-      %x_247 = OpVariable %_ptr_Function_bool Function %40
-  %x_248_phi = OpVariable %_ptr_Function_bool Function %40
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_int %pos %uint_1
-         %46 = OpLoad %int %45
-         %48 = OpINotEqual %bool %46 %int_256
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %34
-         %49 = OpLabel
-         %54 = OpAccessChain %_ptr_Function_int %pos %uint_0
-         %55 = OpLoad %int %54
-         %57 = OpAccessChain %_ptr_Function_int %pos %uint_1
-         %58 = OpLoad %int %57
-               OpStore %indexable %216
-        %217 = OpAccessChain %_ptr_Function_int %indexable %58
-        %218 = OpLoad %int %217
-        %219 = OpIAdd %int %218 %int_15
-        %220 = OpSLessThan %bool %55 %219
-               OpStore %x_248_phi %220
-               OpSelectionMerge %221 None
-               OpBranchConditional %220 %222 %221
-        %222 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_int %pos %uint_0
-        %225 = OpLoad %int %224
-        %227 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %228 = OpLoad %int %227
-               OpStore %indexable_1 %216
-        %229 = OpAccessChain %_ptr_Function_int %indexable_1 %228
-        %230 = OpLoad %int %229
-        %231 = OpISub %int %230 %int_15
-        %232 = OpSGreaterThan %bool %225 %231
-               OpStore %x_247 %232
-        %233 = OpLoad %bool %x_247
-               OpStore %x_248_phi %233
-               OpBranch %221
-        %221 = OpLabel
-        %234 = OpLoad %bool %x_248_phi
-               OpSelectionMerge %235 None
-               OpBranchConditional %234 %236 %235
-        %236 = OpLabel
-        %238 = OpAccessChain %_ptr_Function_int %pos %uint_0
-        %239 = OpLoad %int %238
-        %241 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %242 = OpLoad %int %241
-               OpStore %indexable_2 %216
-        %243 = OpAccessChain %_ptr_Function_int %indexable_2 %242
-        %244 = OpLoad %int %243
-        %249 = OpISub %int %239 %244
-        %248 = OpConvertSToF %float %249
-        %246 = OpExtInst %float %247 FAbs %248
-        %250 = OpFSub %float %float_15 %246
-        %251 = OpFDiv %float %250 %float_15
-               OpStore %p %251
-        %252 = OpLoad %float %p
-        %253 = OpLoad %float %p
-        %254 = OpLoad %float %p
-        %256 = OpCompositeConstruct %v4float %252 %253 %254 %float_1
-               OpReturnValue %256
-        %235 = OpLabel
-        %258 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %259 = OpLoad %int %258
-        %261 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %263 = OpIAdd %int %259 %int_1
-               OpStore %261 %263
-               OpBranch %35
-         %35 = OpLabel
-               OpBranch %33
-         %34 = OpLabel
-               OpReturnValue %265
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %266
-        %269 = OpLabel
-      %pos_1 = OpVariable %_ptr_Function_v2float Function %272
-       %ipos = OpVariable %_ptr_Function_v2int Function %274
-      %param = OpVariable %_ptr_Function_v2int Function %274
-        %276 = OpLoad %v4float %gl_FragCoord
-        %278 = OpAccessChain %_ptr_Uniform_v2float %x_13 %uint_0
-        %279 = OpLoad %v2float %278
-        %280 = OpCompositeExtract %float %276 0
-        %281 = OpCompositeExtract %float %276 1
-        %282 = OpCompositeConstruct %v2float %280 %281
-        %283 = OpFDiv %v2float %282 %279
-               OpStore %pos_1 %283
-        %284 = OpAccessChain %_ptr_Function_float %pos_1 %uint_0
-        %285 = OpLoad %float %284
-        %286 = OpAccessChain %_ptr_Function_float %pos_1 %uint_1
-        %287 = OpLoad %float %286
-        %290 = OpFMul %float %285 %float_256
-        %288 = OpConvertFToS %int %290
-        %292 = OpFMul %float %287 %float_256
-        %291 = OpConvertFToS %int %292
-        %293 = OpCompositeConstruct %v2int %288 %291
-               OpStore %ipos %293
-        %294 = OpLoad %v2int %ipos
-               OpStore %param %294
-        %295 = OpFunctionCall %v4float %trace_vi2_ %param
-               OpStore %x_GLF_color %295
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %297
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %301 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %302 = OpFunctionCall %void %main_1
-        %303 = OpLoad %v4float %x_GLF_color
-        %304 = OpCompositeConstruct %main_out %303
-               OpReturnValue %304
-               OpFunctionEnd
-       %main = OpFunction %void None %266
-        %306 = OpLabel
-        %308 = OpLoad %v4float %gl_FragCoord_param_1
-        %307 = OpFunctionCall %main_out %main_inner %308
-        %309 = OpCompositeExtract %v4float %307 0
-               OpStore %x_GLF_color_1_1 %309
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.wgsl
deleted file mode 100644
index 5e10336..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,85 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn trace_vi2_(pos : ptr<function, vec2<i32>>) -> vec4<f32> {
-  var indexable : array<i32, 256>;
-  var indexable_1 : array<i32, 256>;
-  var p : f32;
-  var indexable_2 : array<i32, 256>;
-  loop {
-    var x_247 : bool;
-    var x_248_phi : bool;
-    let x_227 : i32 = (*(pos)).y;
-    if ((x_227 != 256)) {
-    } else {
-      break;
-    }
-    let x_231 : i32 = (*(pos)).x;
-    let x_233 : i32 = (*(pos)).y;
-    indexable = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-    let x_235 : i32 = indexable[x_233];
-    let x_237 : bool = (x_231 < (x_235 + 15));
-    x_248_phi = x_237;
-    if (x_237) {
-      let x_241 : i32 = (*(pos)).x;
-      let x_243 : i32 = (*(pos)).y;
-      indexable_1 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-      let x_245 : i32 = indexable_1[x_243];
-      x_247 = (x_241 > (x_245 - 15));
-      x_248_phi = x_247;
-    }
-    let x_248 : bool = x_248_phi;
-    if (x_248) {
-      let x_252 : i32 = (*(pos)).x;
-      let x_254 : i32 = (*(pos)).y;
-      indexable_2 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-      let x_256 : i32 = indexable_2[x_254];
-      p = ((15.0 - abs(f32((x_252 - x_256)))) / 15.0);
-      let x_262 : f32 = p;
-      let x_263 : f32 = p;
-      let x_264 : f32 = p;
-      return vec4<f32>(x_262, x_263, x_264, 1.0);
-    }
-    let x_266 : ptr<function, i32> = &((*(pos)).y);
-    let x_267 : i32 = *(x_266);
-    *(x_266) = (x_267 + 1);
-  }
-  return vec4<f32>(0.0, 0.0, 0.0, 1.0);
-}
-
-fn main_1() {
-  var pos_1 : vec2<f32>;
-  var ipos : vec2<i32>;
-  var param : vec2<i32>;
-  let x_205 : vec4<f32> = gl_FragCoord;
-  let x_208 : vec2<f32> = x_13.resolution;
-  pos_1 = (vec2<f32>(x_205.x, x_205.y) / x_208);
-  let x_211 : f32 = pos_1.x;
-  let x_215 : f32 = pos_1.y;
-  ipos = vec2<i32>(i32((x_211 * 256.0)), i32((x_215 * 256.0)));
-  let x_219 : vec2<i32> = ipos;
-  param = x_219;
-  let x_220 : vec4<f32> = trace_vi2_(&(param));
-  x_GLF_color = x_220;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.hlsl
deleted file mode 100644
index 687698f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,89 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 trace_vi2_(inout int2 pos) {
-  int indexable[256] = (int[256])0;
-  int indexable_1[256] = (int[256])0;
-  float p = 0.0f;
-  int indexable_2[256] = (int[256])0;
-  while (true) {
-    bool x_247 = false;
-    bool x_248_phi = false;
-    const int x_227 = pos.y;
-    if ((x_227 != 256)) {
-    } else {
-      break;
-    }
-    const int x_231 = pos.x;
-    const int x_233 = pos.y;
-    const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-    indexable = tint_symbol_4;
-    const int x_235 = indexable[x_233];
-    const bool x_237 = (x_231 < (x_235 + 15));
-    x_248_phi = x_237;
-    if (x_237) {
-      const int x_241 = pos.x;
-      const int x_243 = pos.y;
-      const int tint_symbol_5[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-      indexable_1 = tint_symbol_5;
-      const int x_245 = indexable_1[x_243];
-      x_247 = (x_241 > (x_245 - 15));
-      x_248_phi = x_247;
-    }
-    if (x_248_phi) {
-      const int x_252 = pos.x;
-      const int x_254 = pos.y;
-      const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-      indexable_2 = tint_symbol_6;
-      const int x_256 = indexable_2[x_254];
-      p = ((15.0f - abs(float((x_252 - x_256)))) / 15.0f);
-      return float4(p, p, p, 1.0f);
-    }
-    const int x_267 = pos.y;
-    pos.y = (x_267 + 1);
-  }
-  return float4(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1() {
-  float2 pos_1 = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int2 param = int2(0, 0);
-  const float4 x_205 = gl_FragCoord;
-  const float2 x_208 = asfloat(x_13[0].xy);
-  pos_1 = (float2(x_205.x, x_205.y) / x_208);
-  const float x_211 = pos_1.x;
-  const float x_215 = pos_1.y;
-  ipos = int2(int((x_211 * 256.0f)), int((x_215 * 256.0f)));
-  param = ipos;
-  const float4 x_220 = trace_vi2_(param);
-  x_GLF_color = x_220;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_7 = {x_GLF_color};
-  return tint_symbol_7;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.msl
deleted file mode 100644
index 0384463..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.msl
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 trace_vi2_(thread int2* const pos) {
-  tint_array_wrapper indexable = {};
-  tint_array_wrapper indexable_1 = {};
-  float p = 0.0f;
-  tint_array_wrapper indexable_2 = {};
-  while (true) {
-    bool x_247 = false;
-    bool x_248_phi = false;
-    int const x_227 = (*(pos)).y;
-    if ((x_227 != 256)) {
-    } else {
-      break;
-    }
-    int const x_231 = (*(pos)).x;
-    int const x_233 = (*(pos)).y;
-    tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-    indexable = tint_symbol_2;
-    int const x_235 = indexable.arr[x_233];
-    bool const x_237 = (x_231 < as_type<int>((as_type<uint>(x_235) + as_type<uint>(15))));
-    x_248_phi = x_237;
-    if (x_237) {
-      int const x_241 = (*(pos)).x;
-      int const x_243 = (*(pos)).y;
-      tint_array_wrapper const tint_symbol_3 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-      indexable_1 = tint_symbol_3;
-      int const x_245 = indexable_1.arr[x_243];
-      x_247 = (x_241 > as_type<int>((as_type<uint>(x_245) - as_type<uint>(15))));
-      x_248_phi = x_247;
-    }
-    bool const x_248 = x_248_phi;
-    if (x_248) {
-      int const x_252 = (*(pos)).x;
-      int const x_254 = (*(pos)).y;
-      tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-      indexable_2 = tint_symbol_4;
-      int const x_256 = indexable_2.arr[x_254];
-      p = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_252) - as_type<uint>(x_256)))))) / 15.0f);
-      float const x_262 = p;
-      float const x_263 = p;
-      float const x_264 = p;
-      return float4(x_262, x_263, x_264, 1.0f);
-    }
-    int const x_267 = (*(pos)).y;
-    (*(pos)).y = as_type<int>((as_type<uint>(x_267) + as_type<uint>(1)));
-  }
-  return float4(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1(constant buf0& x_13, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float2 pos_1 = 0.0f;
-  int2 ipos = 0;
-  int2 param = 0;
-  float4 const x_205 = *(tint_symbol_6);
-  float2 const x_208 = x_13.resolution;
-  pos_1 = (float2(x_205.x, x_205.y) / x_208);
-  float const x_211 = pos_1.x;
-  float const x_215 = pos_1.y;
-  ipos = int2(int((x_211 * 256.0f)), int((x_215 * 256.0f)));
-  int2 const x_219 = ipos;
-  param = x_219;
-  float4 const x_220 = trace_vi2_(&(param));
-  *(tint_symbol_7) = x_220;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(x_13, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_9)};
-  return tint_symbol_5;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, gl_FragCoord_param, &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.spvasm
deleted file mode 100644
index 0c45b13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,378 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 310
-; Schema: 0
-               OpCapability Shader
-        %247 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %trace_vi2_ "trace_vi2_"
-               OpName %pos "pos"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %p "p"
-               OpName %indexable_2 "indexable_2"
-               OpName %x_247 "x_247"
-               OpName %x_248_phi "x_248_phi"
-               OpName %main_1 "main_1"
-               OpName %pos_1 "pos_1"
-               OpName %ipos "ipos"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %15 = OpTypeFunction %v4float %_ptr_Function_v2int
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %27 = OpConstantNull %_arr_int_uint_256
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-    %int_256 = OpConstant %int 256
-     %uint_0 = OpConstant %uint 0
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %216 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-   %float_15 = OpConstant %float 15
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-        %265 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-       %void = OpTypeVoid
-        %266 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %272 = OpConstantNull %v2float
-        %274 = OpConstantNull %v2int
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-   %main_out = OpTypeStruct %v4float
-        %297 = OpTypeFunction %main_out %v4float
- %trace_vi2_ = OpFunction %v4float None %15
-        %pos = OpFunctionParameter %_ptr_Function_v2int
-         %21 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-%indexable_1 = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-          %p = OpVariable %_ptr_Function_float Function %31
-%indexable_2 = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-      %x_247 = OpVariable %_ptr_Function_bool Function %40
-  %x_248_phi = OpVariable %_ptr_Function_bool Function %40
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_int %pos %uint_1
-         %46 = OpLoad %int %45
-         %48 = OpINotEqual %bool %46 %int_256
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %34
-         %49 = OpLabel
-         %54 = OpAccessChain %_ptr_Function_int %pos %uint_0
-         %55 = OpLoad %int %54
-         %57 = OpAccessChain %_ptr_Function_int %pos %uint_1
-         %58 = OpLoad %int %57
-               OpStore %indexable %216
-        %217 = OpAccessChain %_ptr_Function_int %indexable %58
-        %218 = OpLoad %int %217
-        %219 = OpIAdd %int %218 %int_15
-        %220 = OpSLessThan %bool %55 %219
-               OpStore %x_248_phi %220
-               OpSelectionMerge %221 None
-               OpBranchConditional %220 %222 %221
-        %222 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_int %pos %uint_0
-        %225 = OpLoad %int %224
-        %227 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %228 = OpLoad %int %227
-               OpStore %indexable_1 %216
-        %229 = OpAccessChain %_ptr_Function_int %indexable_1 %228
-        %230 = OpLoad %int %229
-        %231 = OpISub %int %230 %int_15
-        %232 = OpSGreaterThan %bool %225 %231
-               OpStore %x_247 %232
-        %233 = OpLoad %bool %x_247
-               OpStore %x_248_phi %233
-               OpBranch %221
-        %221 = OpLabel
-        %234 = OpLoad %bool %x_248_phi
-               OpSelectionMerge %235 None
-               OpBranchConditional %234 %236 %235
-        %236 = OpLabel
-        %238 = OpAccessChain %_ptr_Function_int %pos %uint_0
-        %239 = OpLoad %int %238
-        %241 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %242 = OpLoad %int %241
-               OpStore %indexable_2 %216
-        %243 = OpAccessChain %_ptr_Function_int %indexable_2 %242
-        %244 = OpLoad %int %243
-        %249 = OpISub %int %239 %244
-        %248 = OpConvertSToF %float %249
-        %246 = OpExtInst %float %247 FAbs %248
-        %250 = OpFSub %float %float_15 %246
-        %251 = OpFDiv %float %250 %float_15
-               OpStore %p %251
-        %252 = OpLoad %float %p
-        %253 = OpLoad %float %p
-        %254 = OpLoad %float %p
-        %256 = OpCompositeConstruct %v4float %252 %253 %254 %float_1
-               OpReturnValue %256
-        %235 = OpLabel
-        %258 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %259 = OpLoad %int %258
-        %261 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %263 = OpIAdd %int %259 %int_1
-               OpStore %261 %263
-               OpBranch %35
-         %35 = OpLabel
-               OpBranch %33
-         %34 = OpLabel
-               OpReturnValue %265
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %266
-        %269 = OpLabel
-      %pos_1 = OpVariable %_ptr_Function_v2float Function %272
-       %ipos = OpVariable %_ptr_Function_v2int Function %274
-      %param = OpVariable %_ptr_Function_v2int Function %274
-        %276 = OpLoad %v4float %gl_FragCoord
-        %278 = OpAccessChain %_ptr_Uniform_v2float %x_13 %uint_0
-        %279 = OpLoad %v2float %278
-        %280 = OpCompositeExtract %float %276 0
-        %281 = OpCompositeExtract %float %276 1
-        %282 = OpCompositeConstruct %v2float %280 %281
-        %283 = OpFDiv %v2float %282 %279
-               OpStore %pos_1 %283
-        %284 = OpAccessChain %_ptr_Function_float %pos_1 %uint_0
-        %285 = OpLoad %float %284
-        %286 = OpAccessChain %_ptr_Function_float %pos_1 %uint_1
-        %287 = OpLoad %float %286
-        %290 = OpFMul %float %285 %float_256
-        %288 = OpConvertFToS %int %290
-        %292 = OpFMul %float %287 %float_256
-        %291 = OpConvertFToS %int %292
-        %293 = OpCompositeConstruct %v2int %288 %291
-               OpStore %ipos %293
-        %294 = OpLoad %v2int %ipos
-               OpStore %param %294
-        %295 = OpFunctionCall %v4float %trace_vi2_ %param
-               OpStore %x_GLF_color %295
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %297
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %301 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %302 = OpFunctionCall %void %main_1
-        %303 = OpLoad %v4float %x_GLF_color
-        %304 = OpCompositeConstruct %main_out %303
-               OpReturnValue %304
-               OpFunctionEnd
-       %main = OpFunction %void None %266
-        %306 = OpLabel
-        %308 = OpLoad %v4float %gl_FragCoord_param_1
-        %307 = OpFunctionCall %main_out %main_inner %308
-        %309 = OpCompositeExtract %v4float %307 0
-               OpStore %x_GLF_color_1_1 %309
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.wgsl
deleted file mode 100644
index 5e10336..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,85 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn trace_vi2_(pos : ptr<function, vec2<i32>>) -> vec4<f32> {
-  var indexable : array<i32, 256>;
-  var indexable_1 : array<i32, 256>;
-  var p : f32;
-  var indexable_2 : array<i32, 256>;
-  loop {
-    var x_247 : bool;
-    var x_248_phi : bool;
-    let x_227 : i32 = (*(pos)).y;
-    if ((x_227 != 256)) {
-    } else {
-      break;
-    }
-    let x_231 : i32 = (*(pos)).x;
-    let x_233 : i32 = (*(pos)).y;
-    indexable = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-    let x_235 : i32 = indexable[x_233];
-    let x_237 : bool = (x_231 < (x_235 + 15));
-    x_248_phi = x_237;
-    if (x_237) {
-      let x_241 : i32 = (*(pos)).x;
-      let x_243 : i32 = (*(pos)).y;
-      indexable_1 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-      let x_245 : i32 = indexable_1[x_243];
-      x_247 = (x_241 > (x_245 - 15));
-      x_248_phi = x_247;
-    }
-    let x_248 : bool = x_248_phi;
-    if (x_248) {
-      let x_252 : i32 = (*(pos)).x;
-      let x_254 : i32 = (*(pos)).y;
-      indexable_2 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-      let x_256 : i32 = indexable_2[x_254];
-      p = ((15.0 - abs(f32((x_252 - x_256)))) / 15.0);
-      let x_262 : f32 = p;
-      let x_263 : f32 = p;
-      let x_264 : f32 = p;
-      return vec4<f32>(x_262, x_263, x_264, 1.0);
-    }
-    let x_266 : ptr<function, i32> = &((*(pos)).y);
-    let x_267 : i32 = *(x_266);
-    *(x_266) = (x_267 + 1);
-  }
-  return vec4<f32>(0.0, 0.0, 0.0, 1.0);
-}
-
-fn main_1() {
-  var pos_1 : vec2<f32>;
-  var ipos : vec2<i32>;
-  var param : vec2<i32>;
-  let x_205 : vec4<f32> = gl_FragCoord;
-  let x_208 : vec2<f32> = x_13.resolution;
-  pos_1 = (vec2<f32>(x_205.x, x_205.y) / x_208);
-  let x_211 : f32 = pos_1.x;
-  let x_215 : f32 = pos_1.y;
-  ipos = vec2<i32>(i32((x_211 * 256.0)), i32((x_215 * 256.0)));
-  let x_219 : vec2<i32> = ipos;
-  param = x_219;
-  let x_220 : vec4<f32> = trace_vi2_(&(param));
-  x_GLF_color = x_220;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.hlsl
deleted file mode 100644
index ac064f2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,96 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 trace_vi2_(inout int2 pos) {
-  int indexable[256] = (int[256])0;
-  int indexable_1[256] = (int[256])0;
-  float p = 0.0f;
-  int indexable_2[256] = (int[256])0;
-  while (true) {
-    bool x_251 = false;
-    bool x_252_phi = false;
-    const int x_229 = pos.y;
-    if ((x_229 != 256)) {
-    } else {
-      break;
-    }
-    const int x_233 = pos.x;
-    const int x_235 = pos.y;
-    const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-    indexable = tint_symbol_4;
-    const int x_237 = indexable[x_235];
-    const int x_238[256] = indexable;
-    const int tint_symbol_5[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-    indexable = tint_symbol_5;
-    const int x_239 = pos.y;
-    pos.y = 0;
-    pos.y = x_239;
-    indexable = x_238;
-    const bool x_241 = (x_233 < (x_237 + 15));
-    x_252_phi = x_241;
-    if (x_241) {
-      const int x_245 = pos.x;
-      const int x_247 = pos.y;
-      const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-      indexable_1 = tint_symbol_6;
-      const int x_249 = indexable_1[x_247];
-      x_251 = (x_245 > (x_249 - 15));
-      x_252_phi = x_251;
-    }
-    if (x_252_phi) {
-      const int x_256 = pos.x;
-      const int x_258 = pos.y;
-      const int tint_symbol_7[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-      indexable_2 = tint_symbol_7;
-      const int x_260 = indexable_2[x_258];
-      p = ((15.0f - abs(float((x_256 - x_260)))) / 15.0f);
-      return float4(p, p, p, 1.0f);
-    }
-    const int x_271 = pos.y;
-    pos.y = (x_271 + 1);
-  }
-  return float4(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1() {
-  float2 pos_1 = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int2 param = int2(0, 0);
-  const float4 x_207 = gl_FragCoord;
-  const float2 x_210 = asfloat(x_13[0].xy);
-  pos_1 = (float2(x_207.x, x_207.y) / x_210);
-  const float x_213 = pos_1.x;
-  const float x_217 = pos_1.y;
-  ipos = int2(int((x_213 * 256.0f)), int((x_217 * 256.0f)));
-  param = ipos;
-  const float4 x_222 = trace_vi2_(param);
-  x_GLF_color = x_222;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.msl
deleted file mode 100644
index f6b6b10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.msl
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 trace_vi2_(thread int2* const pos) {
-  tint_array_wrapper indexable = {};
-  tint_array_wrapper indexable_1 = {};
-  float p = 0.0f;
-  tint_array_wrapper indexable_2 = {};
-  while (true) {
-    bool x_251 = false;
-    bool x_252_phi = false;
-    int const x_229 = (*(pos)).y;
-    if ((x_229 != 256)) {
-    } else {
-      break;
-    }
-    int const x_233 = (*(pos)).x;
-    int const x_235 = (*(pos)).y;
-    tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-    indexable = tint_symbol_2;
-    int const x_237 = indexable.arr[x_235];
-    tint_array_wrapper const x_238 = indexable;
-    tint_array_wrapper const tint_symbol_3 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    indexable = tint_symbol_3;
-    int const x_239 = (*(pos)).y;
-    (*(pos)).y = 0;
-    (*(pos)).y = x_239;
-    indexable = x_238;
-    bool const x_241 = (x_233 < as_type<int>((as_type<uint>(x_237) + as_type<uint>(15))));
-    x_252_phi = x_241;
-    if (x_241) {
-      int const x_245 = (*(pos)).x;
-      int const x_247 = (*(pos)).y;
-      tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-      indexable_1 = tint_symbol_4;
-      int const x_249 = indexable_1.arr[x_247];
-      x_251 = (x_245 > as_type<int>((as_type<uint>(x_249) - as_type<uint>(15))));
-      x_252_phi = x_251;
-    }
-    bool const x_252 = x_252_phi;
-    if (x_252) {
-      int const x_256 = (*(pos)).x;
-      int const x_258 = (*(pos)).y;
-      tint_array_wrapper const tint_symbol_5 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-      indexable_2 = tint_symbol_5;
-      int const x_260 = indexable_2.arr[x_258];
-      p = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_256) - as_type<uint>(x_260)))))) / 15.0f);
-      float const x_266 = p;
-      float const x_267 = p;
-      float const x_268 = p;
-      return float4(x_266, x_267, x_268, 1.0f);
-    }
-    int const x_271 = (*(pos)).y;
-    (*(pos)).y = as_type<int>((as_type<uint>(x_271) + as_type<uint>(1)));
-  }
-  return float4(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1(constant buf0& x_13, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  float2 pos_1 = 0.0f;
-  int2 ipos = 0;
-  int2 param = 0;
-  float4 const x_207 = *(tint_symbol_7);
-  float2 const x_210 = x_13.resolution;
-  pos_1 = (float2(x_207.x, x_207.y) / x_210);
-  float const x_213 = pos_1.x;
-  float const x_217 = pos_1.y;
-  ipos = int2(int((x_213 * 256.0f)), int((x_217 * 256.0f)));
-  int2 const x_221 = ipos;
-  param = x_221;
-  float4 const x_222 = trace_vi2_(&(param));
-  *(tint_symbol_8) = x_222;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_13, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.spvasm
deleted file mode 100644
index da642c3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,388 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 319
-; Schema: 0
-               OpCapability Shader
-        %256 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %trace_vi2_ "trace_vi2_"
-               OpName %pos "pos"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %p "p"
-               OpName %indexable_2 "indexable_2"
-               OpName %x_251 "x_251"
-               OpName %x_252_phi "x_252_phi"
-               OpName %main_1 "main_1"
-               OpName %pos_1 "pos_1"
-               OpName %ipos "ipos"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %15 = OpTypeFunction %v4float %_ptr_Function_v2int
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %27 = OpConstantNull %_arr_int_uint_256
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-    %int_256 = OpConstant %int 256
-     %uint_0 = OpConstant %uint 0
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %216 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-        %220 = OpConstantComposite %_arr_int_uint_256 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-   %float_15 = OpConstant %float 15
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-        %274 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-       %void = OpTypeVoid
-        %275 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %281 = OpConstantNull %v2float
-        %283 = OpConstantNull %v2int
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-   %main_out = OpTypeStruct %v4float
-        %306 = OpTypeFunction %main_out %v4float
- %trace_vi2_ = OpFunction %v4float None %15
-        %pos = OpFunctionParameter %_ptr_Function_v2int
-         %21 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-%indexable_1 = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-          %p = OpVariable %_ptr_Function_float Function %31
-%indexable_2 = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-      %x_251 = OpVariable %_ptr_Function_bool Function %40
-  %x_252_phi = OpVariable %_ptr_Function_bool Function %40
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_int %pos %uint_1
-         %46 = OpLoad %int %45
-         %48 = OpINotEqual %bool %46 %int_256
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %34
-         %49 = OpLabel
-         %54 = OpAccessChain %_ptr_Function_int %pos %uint_0
-         %55 = OpLoad %int %54
-         %57 = OpAccessChain %_ptr_Function_int %pos %uint_1
-         %58 = OpLoad %int %57
-               OpStore %indexable %216
-        %217 = OpAccessChain %_ptr_Function_int %indexable %58
-        %218 = OpLoad %int %217
-        %219 = OpLoad %_arr_int_uint_256 %indexable
-               OpStore %indexable %220
-        %222 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %223 = OpLoad %int %222
-        %225 = OpAccessChain %_ptr_Function_int %pos %uint_1
-               OpStore %225 %int_0
-        %227 = OpAccessChain %_ptr_Function_int %pos %uint_1
-               OpStore %227 %223
-               OpStore %indexable %219
-        %228 = OpIAdd %int %218 %int_15
-        %229 = OpSLessThan %bool %55 %228
-               OpStore %x_252_phi %229
-               OpSelectionMerge %230 None
-               OpBranchConditional %229 %231 %230
-        %231 = OpLabel
-        %233 = OpAccessChain %_ptr_Function_int %pos %uint_0
-        %234 = OpLoad %int %233
-        %236 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %237 = OpLoad %int %236
-               OpStore %indexable_1 %216
-        %238 = OpAccessChain %_ptr_Function_int %indexable_1 %237
-        %239 = OpLoad %int %238
-        %240 = OpISub %int %239 %int_15
-        %241 = OpSGreaterThan %bool %234 %240
-               OpStore %x_251 %241
-        %242 = OpLoad %bool %x_251
-               OpStore %x_252_phi %242
-               OpBranch %230
-        %230 = OpLabel
-        %243 = OpLoad %bool %x_252_phi
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-        %247 = OpAccessChain %_ptr_Function_int %pos %uint_0
-        %248 = OpLoad %int %247
-        %250 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %251 = OpLoad %int %250
-               OpStore %indexable_2 %216
-        %252 = OpAccessChain %_ptr_Function_int %indexable_2 %251
-        %253 = OpLoad %int %252
-        %258 = OpISub %int %248 %253
-        %257 = OpConvertSToF %float %258
-        %255 = OpExtInst %float %256 FAbs %257
-        %259 = OpFSub %float %float_15 %255
-        %260 = OpFDiv %float %259 %float_15
-               OpStore %p %260
-        %261 = OpLoad %float %p
-        %262 = OpLoad %float %p
-        %263 = OpLoad %float %p
-        %265 = OpCompositeConstruct %v4float %261 %262 %263 %float_1
-               OpReturnValue %265
-        %244 = OpLabel
-        %267 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %268 = OpLoad %int %267
-        %270 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %272 = OpIAdd %int %268 %int_1
-               OpStore %270 %272
-               OpBranch %35
-         %35 = OpLabel
-               OpBranch %33
-         %34 = OpLabel
-               OpReturnValue %274
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %275
-        %278 = OpLabel
-      %pos_1 = OpVariable %_ptr_Function_v2float Function %281
-       %ipos = OpVariable %_ptr_Function_v2int Function %283
-      %param = OpVariable %_ptr_Function_v2int Function %283
-        %285 = OpLoad %v4float %gl_FragCoord
-        %287 = OpAccessChain %_ptr_Uniform_v2float %x_13 %uint_0
-        %288 = OpLoad %v2float %287
-        %289 = OpCompositeExtract %float %285 0
-        %290 = OpCompositeExtract %float %285 1
-        %291 = OpCompositeConstruct %v2float %289 %290
-        %292 = OpFDiv %v2float %291 %288
-               OpStore %pos_1 %292
-        %293 = OpAccessChain %_ptr_Function_float %pos_1 %uint_0
-        %294 = OpLoad %float %293
-        %295 = OpAccessChain %_ptr_Function_float %pos_1 %uint_1
-        %296 = OpLoad %float %295
-        %299 = OpFMul %float %294 %float_256
-        %297 = OpConvertFToS %int %299
-        %301 = OpFMul %float %296 %float_256
-        %300 = OpConvertFToS %int %301
-        %302 = OpCompositeConstruct %v2int %297 %300
-               OpStore %ipos %302
-        %303 = OpLoad %v2int %ipos
-               OpStore %param %303
-        %304 = OpFunctionCall %v4float %trace_vi2_ %param
-               OpStore %x_GLF_color %304
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %306
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %310 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %311 = OpFunctionCall %void %main_1
-        %312 = OpLoad %v4float %x_GLF_color
-        %313 = OpCompositeConstruct %main_out %312
-               OpReturnValue %313
-               OpFunctionEnd
-       %main = OpFunction %void None %275
-        %315 = OpLabel
-        %317 = OpLoad %v4float %gl_FragCoord_param_1
-        %316 = OpFunctionCall %main_out %main_inner %317
-        %318 = OpCompositeExtract %v4float %316 0
-               OpStore %x_GLF_color_1_1 %318
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.wgsl
deleted file mode 100644
index 3970047..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,92 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn trace_vi2_(pos : ptr<function, vec2<i32>>) -> vec4<f32> {
-  var indexable : array<i32, 256>;
-  var indexable_1 : array<i32, 256>;
-  var p : f32;
-  var indexable_2 : array<i32, 256>;
-  loop {
-    var x_251 : bool;
-    var x_252_phi : bool;
-    let x_228 : ptr<function, i32> = &((*(pos)).y);
-    let x_229 : i32 = *(x_228);
-    if ((x_229 != 256)) {
-    } else {
-      break;
-    }
-    let x_233 : i32 = (*(pos)).x;
-    let x_235 : i32 = (*(pos)).y;
-    indexable = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-    let x_237 : i32 = indexable[x_235];
-    let x_238 : array<i32, 256> = indexable;
-    indexable = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-    let x_239 : i32 = *(x_228);
-    *(x_228) = 0;
-    *(x_228) = x_239;
-    indexable = x_238;
-    let x_241 : bool = (x_233 < (x_237 + 15));
-    x_252_phi = x_241;
-    if (x_241) {
-      let x_245 : i32 = (*(pos)).x;
-      let x_247 : i32 = (*(pos)).y;
-      indexable_1 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-      let x_249 : i32 = indexable_1[x_247];
-      x_251 = (x_245 > (x_249 - 15));
-      x_252_phi = x_251;
-    }
-    let x_252 : bool = x_252_phi;
-    if (x_252) {
-      let x_256 : i32 = (*(pos)).x;
-      let x_258 : i32 = (*(pos)).y;
-      indexable_2 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-      let x_260 : i32 = indexable_2[x_258];
-      p = ((15.0 - abs(f32((x_256 - x_260)))) / 15.0);
-      let x_266 : f32 = p;
-      let x_267 : f32 = p;
-      let x_268 : f32 = p;
-      return vec4<f32>(x_266, x_267, x_268, 1.0);
-    }
-    let x_270 : ptr<function, i32> = &((*(pos)).y);
-    let x_271 : i32 = *(x_270);
-    *(x_270) = (x_271 + 1);
-  }
-  return vec4<f32>(0.0, 0.0, 0.0, 1.0);
-}
-
-fn main_1() {
-  var pos_1 : vec2<f32>;
-  var ipos : vec2<i32>;
-  var param : vec2<i32>;
-  let x_207 : vec4<f32> = gl_FragCoord;
-  let x_210 : vec2<f32> = x_13.resolution;
-  pos_1 = (vec2<f32>(x_207.x, x_207.y) / x_210);
-  let x_213 : f32 = pos_1.x;
-  let x_217 : f32 = pos_1.y;
-  ipos = vec2<i32>(i32((x_213 * 256.0)), i32((x_217 * 256.0)));
-  let x_221 : vec2<i32> = ipos;
-  param = x_221;
-  let x_222 : vec4<f32> = trace_vi2_(&(param));
-  x_GLF_color = x_222;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.hlsl
deleted file mode 100644
index ac064f2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,96 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float4 trace_vi2_(inout int2 pos) {
-  int indexable[256] = (int[256])0;
-  int indexable_1[256] = (int[256])0;
-  float p = 0.0f;
-  int indexable_2[256] = (int[256])0;
-  while (true) {
-    bool x_251 = false;
-    bool x_252_phi = false;
-    const int x_229 = pos.y;
-    if ((x_229 != 256)) {
-    } else {
-      break;
-    }
-    const int x_233 = pos.x;
-    const int x_235 = pos.y;
-    const int tint_symbol_4[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-    indexable = tint_symbol_4;
-    const int x_237 = indexable[x_235];
-    const int x_238[256] = indexable;
-    const int tint_symbol_5[256] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-    indexable = tint_symbol_5;
-    const int x_239 = pos.y;
-    pos.y = 0;
-    pos.y = x_239;
-    indexable = x_238;
-    const bool x_241 = (x_233 < (x_237 + 15));
-    x_252_phi = x_241;
-    if (x_241) {
-      const int x_245 = pos.x;
-      const int x_247 = pos.y;
-      const int tint_symbol_6[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-      indexable_1 = tint_symbol_6;
-      const int x_249 = indexable_1[x_247];
-      x_251 = (x_245 > (x_249 - 15));
-      x_252_phi = x_251;
-    }
-    if (x_252_phi) {
-      const int x_256 = pos.x;
-      const int x_258 = pos.y;
-      const int tint_symbol_7[256] = {115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94};
-      indexable_2 = tint_symbol_7;
-      const int x_260 = indexable_2[x_258];
-      p = ((15.0f - abs(float((x_256 - x_260)))) / 15.0f);
-      return float4(p, p, p, 1.0f);
-    }
-    const int x_271 = pos.y;
-    pos.y = (x_271 + 1);
-  }
-  return float4(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1() {
-  float2 pos_1 = float2(0.0f, 0.0f);
-  int2 ipos = int2(0, 0);
-  int2 param = int2(0, 0);
-  const float4 x_207 = gl_FragCoord;
-  const float2 x_210 = asfloat(x_13[0].xy);
-  pos_1 = (float2(x_207.x, x_207.y) / x_210);
-  const float x_213 = pos_1.x;
-  const float x_217 = pos_1.y;
-  ipos = int2(int((x_213 * 256.0f)), int((x_217 * 256.0f)));
-  param = ipos;
-  const float4 x_222 = trace_vi2_(param);
-  x_GLF_color = x_222;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.msl
deleted file mode 100644
index f6b6b10..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.msl
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  int arr[256];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float4 trace_vi2_(thread int2* const pos) {
-  tint_array_wrapper indexable = {};
-  tint_array_wrapper indexable_1 = {};
-  float p = 0.0f;
-  tint_array_wrapper indexable_2 = {};
-  while (true) {
-    bool x_251 = false;
-    bool x_252_phi = false;
-    int const x_229 = (*(pos)).y;
-    if ((x_229 != 256)) {
-    } else {
-      break;
-    }
-    int const x_233 = (*(pos)).x;
-    int const x_235 = (*(pos)).y;
-    tint_array_wrapper const tint_symbol_2 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-    indexable = tint_symbol_2;
-    int const x_237 = indexable.arr[x_235];
-    tint_array_wrapper const x_238 = indexable;
-    tint_array_wrapper const tint_symbol_3 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
-    indexable = tint_symbol_3;
-    int const x_239 = (*(pos)).y;
-    (*(pos)).y = 0;
-    (*(pos)).y = x_239;
-    indexable = x_238;
-    bool const x_241 = (x_233 < as_type<int>((as_type<uint>(x_237) + as_type<uint>(15))));
-    x_252_phi = x_241;
-    if (x_241) {
-      int const x_245 = (*(pos)).x;
-      int const x_247 = (*(pos)).y;
-      tint_array_wrapper const tint_symbol_4 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-      indexable_1 = tint_symbol_4;
-      int const x_249 = indexable_1.arr[x_247];
-      x_251 = (x_245 > as_type<int>((as_type<uint>(x_249) - as_type<uint>(15))));
-      x_252_phi = x_251;
-    }
-    bool const x_252 = x_252_phi;
-    if (x_252) {
-      int const x_256 = (*(pos)).x;
-      int const x_258 = (*(pos)).y;
-      tint_array_wrapper const tint_symbol_5 = {.arr={115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94}};
-      indexable_2 = tint_symbol_5;
-      int const x_260 = indexable_2.arr[x_258];
-      p = ((15.0f - fabs(float(as_type<int>((as_type<uint>(x_256) - as_type<uint>(x_260)))))) / 15.0f);
-      float const x_266 = p;
-      float const x_267 = p;
-      float const x_268 = p;
-      return float4(x_266, x_267, x_268, 1.0f);
-    }
-    int const x_271 = (*(pos)).y;
-    (*(pos)).y = as_type<int>((as_type<uint>(x_271) + as_type<uint>(1)));
-  }
-  return float4(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void main_1(constant buf0& x_13, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  float2 pos_1 = 0.0f;
-  int2 ipos = 0;
-  int2 param = 0;
-  float4 const x_207 = *(tint_symbol_7);
-  float2 const x_210 = x_13.resolution;
-  pos_1 = (float2(x_207.x, x_207.y) / x_210);
-  float const x_213 = pos_1.x;
-  float const x_217 = pos_1.y;
-  ipos = int2(int((x_213 * 256.0f)), int((x_217 * 256.0f)));
-  int2 const x_221 = ipos;
-  param = x_221;
-  float4 const x_222 = trace_vi2_(&(param));
-  *(tint_symbol_8) = x_222;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_13, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.spvasm
deleted file mode 100644
index da642c3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,388 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 319
-; Schema: 0
-               OpCapability Shader
-        %256 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %trace_vi2_ "trace_vi2_"
-               OpName %pos "pos"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %p "p"
-               OpName %indexable_2 "indexable_2"
-               OpName %x_251 "x_251"
-               OpName %x_252_phi "x_252_phi"
-               OpName %main_1 "main_1"
-               OpName %pos_1 "pos_1"
-               OpName %ipos "ipos"
-               OpName %param "param"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %_arr_int_uint_256 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %15 = OpTypeFunction %v4float %_ptr_Function_v2int
-       %uint = OpTypeInt 32 0
-   %uint_256 = OpConstant %uint 256
-%_arr_int_uint_256 = OpTypeArray %int %uint_256
-%_ptr_Function__arr_int_uint_256 = OpTypePointer Function %_arr_int_uint_256
-         %27 = OpConstantNull %_arr_int_uint_256
-%_ptr_Function_float = OpTypePointer Function %float
-         %31 = OpConstantNull %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_int = OpTypePointer Function %int
-    %int_256 = OpConstant %int 256
-     %uint_0 = OpConstant %uint 0
-    %int_115 = OpConstant %int 115
-    %int_133 = OpConstant %int 133
-    %int_150 = OpConstant %int 150
-    %int_164 = OpConstant %int 164
-    %int_176 = OpConstant %int 176
-    %int_184 = OpConstant %int 184
-    %int_190 = OpConstant %int 190
-    %int_192 = OpConstant %int 192
-    %int_191 = OpConstant %int 191
-    %int_187 = OpConstant %int 187
-    %int_181 = OpConstant %int 181
-    %int_172 = OpConstant %int 172
-    %int_163 = OpConstant %int 163
-    %int_153 = OpConstant %int 153
-    %int_143 = OpConstant %int 143
-    %int_134 = OpConstant %int 134
-    %int_126 = OpConstant %int 126
-    %int_120 = OpConstant %int 120
-    %int_116 = OpConstant %int 116
-    %int_114 = OpConstant %int 114
-    %int_117 = OpConstant %int 117
-    %int_121 = OpConstant %int 121
-    %int_127 = OpConstant %int 127
-    %int_141 = OpConstant %int 141
-    %int_148 = OpConstant %int 148
-    %int_154 = OpConstant %int 154
-    %int_159 = OpConstant %int 159
-    %int_162 = OpConstant %int 162
-    %int_161 = OpConstant %int 161
-    %int_157 = OpConstant %int 157
-    %int_151 = OpConstant %int 151
-    %int_124 = OpConstant %int 124
-    %int_113 = OpConstant %int 113
-    %int_103 = OpConstant %int 103
-     %int_94 = OpConstant %int 94
-     %int_87 = OpConstant %int 87
-     %int_82 = OpConstant %int 82
-     %int_79 = OpConstant %int 79
-     %int_80 = OpConstant %int 80
-     %int_84 = OpConstant %int 84
-     %int_91 = OpConstant %int 91
-    %int_101 = OpConstant %int 101
-    %int_130 = OpConstant %int 130
-    %int_146 = OpConstant %int 146
-    %int_182 = OpConstant %int 182
-    %int_199 = OpConstant %int 199
-    %int_215 = OpConstant %int 215
-    %int_229 = OpConstant %int 229
-    %int_240 = OpConstant %int 240
-    %int_249 = OpConstant %int 249
-    %int_254 = OpConstant %int 254
-    %int_250 = OpConstant %int 250
-    %int_243 = OpConstant %int 243
-    %int_233 = OpConstant %int 233
-    %int_223 = OpConstant %int 223
-    %int_212 = OpConstant %int 212
-    %int_200 = OpConstant %int 200
-    %int_180 = OpConstant %int 180
-    %int_166 = OpConstant %int 166
-    %int_169 = OpConstant %int 169
-    %int_174 = OpConstant %int 174
-    %int_179 = OpConstant %int 179
-    %int_185 = OpConstant %int 185
-    %int_193 = OpConstant %int 193
-    %int_195 = OpConstant %int 195
-    %int_188 = OpConstant %int 188
-    %int_171 = OpConstant %int 171
-    %int_149 = OpConstant %int 149
-    %int_137 = OpConstant %int 137
-    %int_125 = OpConstant %int 125
-    %int_105 = OpConstant %int 105
-     %int_97 = OpConstant %int 97
-     %int_93 = OpConstant %int 93
-     %int_98 = OpConstant %int 98
-    %int_106 = OpConstant %int 106
-    %int_145 = OpConstant %int 145
-    %int_177 = OpConstant %int 177
-    %int_208 = OpConstant %int 208
-    %int_221 = OpConstant %int 221
-    %int_231 = OpConstant %int 231
-    %int_239 = OpConstant %int 239
-    %int_244 = OpConstant %int 244
-    %int_242 = OpConstant %int 242
-    %int_236 = OpConstant %int 236
-    %int_228 = OpConstant %int 228
-    %int_218 = OpConstant %int 218
-    %int_207 = OpConstant %int 207
-    %int_194 = OpConstant %int 194
-    %int_158 = OpConstant %int 158
-    %int_135 = OpConstant %int 135
-    %int_132 = OpConstant %int 132
-    %int_131 = OpConstant %int 131
-    %int_138 = OpConstant %int 138
-    %int_147 = OpConstant %int 147
-    %int_155 = OpConstant %int 155
-    %int_152 = OpConstant %int 152
-    %int_139 = OpConstant %int 139
-    %int_129 = OpConstant %int 129
-    %int_118 = OpConstant %int 118
-     %int_68 = OpConstant %int 68
-     %int_58 = OpConstant %int 58
-     %int_49 = OpConstant %int 49
-     %int_43 = OpConstant %int 43
-     %int_40 = OpConstant %int 40
-     %int_41 = OpConstant %int 41
-     %int_44 = OpConstant %int 44
-     %int_51 = OpConstant %int 51
-     %int_61 = OpConstant %int 61
-     %int_73 = OpConstant %int 73
-    %int_119 = OpConstant %int 119
-    %int_173 = OpConstant %int 173
-    %int_186 = OpConstant %int 186
-    %int_128 = OpConstant %int 128
-    %int_104 = OpConstant %int 104
-     %int_86 = OpConstant %int 86
-     %int_81 = OpConstant %int 81
-     %int_77 = OpConstant %int 77
-     %int_76 = OpConstant %int 76
-     %int_89 = OpConstant %int 89
-    %int_102 = OpConstant %int 102
-     %int_92 = OpConstant %int 92
-     %int_83 = OpConstant %int 83
-     %int_62 = OpConstant %int 62
-     %int_50 = OpConstant %int 50
-     %int_38 = OpConstant %int 38
-     %int_26 = OpConstant %int 26
-     %int_16 = OpConstant %int 16
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-     %int_11 = OpConstant %int 11
-     %int_21 = OpConstant %int 21
-     %int_33 = OpConstant %int 33
-     %int_48 = OpConstant %int 48
-     %int_64 = OpConstant %int 64
-    %int_144 = OpConstant %int 144
-    %int_123 = OpConstant %int 123
-    %int_112 = OpConstant %int 112
-    %int_100 = OpConstant %int 100
-     %int_90 = OpConstant %int 90
-     %int_65 = OpConstant %int 65
-     %int_67 = OpConstant %int 67
-     %int_70 = OpConstant %int 70
-     %int_75 = OpConstant %int 75
-     %int_95 = OpConstant %int 95
-     %int_88 = OpConstant %int 88
-     %int_69 = OpConstant %int 69
-     %int_47 = OpConstant %int 47
-     %int_36 = OpConstant %int 36
-     %int_18 = OpConstant %int 18
-     %int_13 = OpConstant %int 13
-     %int_15 = OpConstant %int 15
-     %int_22 = OpConstant %int 22
-     %int_32 = OpConstant %int 32
-     %int_45 = OpConstant %int 45
-     %int_60 = OpConstant %int 60
-        %216 = OpConstantComposite %_arr_int_uint_256 %int_115 %int_133 %int_150 %int_164 %int_176 %int_184 %int_190 %int_192 %int_191 %int_187 %int_181 %int_172 %int_163 %int_153 %int_143 %int_134 %int_126 %int_120 %int_116 %int_114 %int_114 %int_117 %int_121 %int_127 %int_134 %int_141 %int_148 %int_154 %int_159 %int_162 %int_163 %int_161 %int_157 %int_151 %int_143 %int_134 %int_124 %int_113 %int_103 %int_94 %int_87 %int_82 %int_79 %int_80 %int_84 %int_91 %int_101 %int_114 %int_130 %int_146 %int_164 %int_182 %int_199 %int_215 %int_229 %int_240 %int_249 %int_254 %int_256 %int_254 %int_250 %int_243 %int_233 %int_223 %int_212 %int_200 %int_190 %int_180 %int_172 %int_166 %int_163 %int_161 %int_162 %int_164 %int_169 %int_174 %int_179 %int_185 %int_190 %int_193 %int_195 %int_195 %int_192 %int_188 %int_180 %int_171 %int_161 %int_149 %int_137 %int_125 %int_114 %int_105 %int_97 %int_93 %int_91 %int_93 %int_98 %int_106 %int_117 %int_130 %int_145 %int_161 %int_177 %int_193 %int_208 %int_221 %int_231 %int_239 %int_243 %int_244 %int_242 %int_236 %int_228 %int_218 %int_207 %int_194 %int_181 %int_169 %int_158 %int_148 %int_141 %int_135 %int_132 %int_131 %int_132 %int_135 %int_138 %int_143 %int_147 %int_151 %int_154 %int_155 %int_155 %int_152 %int_146 %int_139 %int_129 %int_118 %int_106 %int_93 %int_80 %int_68 %int_58 %int_49 %int_43 %int_40 %int_41 %int_44 %int_51 %int_61 %int_73 %int_87 %int_103 %int_119 %int_134 %int_149 %int_162 %int_173 %int_181 %int_186 %int_188 %int_186 %int_181 %int_174 %int_164 %int_153 %int_141 %int_128 %int_116 %int_104 %int_94 %int_86 %int_81 %int_77 %int_76 %int_77 %int_80 %int_84 %int_89 %int_94 %int_98 %int_102 %int_104 %int_104 %int_102 %int_98 %int_92 %int_83 %int_73 %int_62 %int_50 %int_38 %int_26 %int_16 %int_8 %int_2 %int_0 %int_0 %int_4 %int_11 %int_21 %int_33 %int_48 %int_64 %int_81 %int_98 %int_114 %int_129 %int_141 %int_151 %int_158 %int_161 %int_161 %int_158 %int_152 %int_144 %int_134 %int_123 %int_112 %int_100 %int_90 %int_81 %int_73 %int_68 %int_65 %int_65 %int_67 %int_70 %int_75 %int_81 %int_87 %int_92 %int_97 %int_101 %int_103 %int_102 %int_100 %int_95 %int_88 %int_79 %int_69 %int_58 %int_47 %int_36 %int_26 %int_18 %int_13 %int_11 %int_11 %int_15 %int_22 %int_32 %int_45 %int_60 %int_77 %int_94
-        %220 = OpConstantComposite %_arr_int_uint_256 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
-   %float_15 = OpConstant %float 15
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-        %274 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-       %void = OpTypeVoid
-        %275 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %281 = OpConstantNull %v2float
-        %283 = OpConstantNull %v2int
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-  %float_256 = OpConstant %float 256
-   %main_out = OpTypeStruct %v4float
-        %306 = OpTypeFunction %main_out %v4float
- %trace_vi2_ = OpFunction %v4float None %15
-        %pos = OpFunctionParameter %_ptr_Function_v2int
-         %21 = OpLabel
-  %indexable = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-%indexable_1 = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-          %p = OpVariable %_ptr_Function_float Function %31
-%indexable_2 = OpVariable %_ptr_Function__arr_int_uint_256 Function %27
-      %x_251 = OpVariable %_ptr_Function_bool Function %40
-  %x_252_phi = OpVariable %_ptr_Function_bool Function %40
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %45 = OpAccessChain %_ptr_Function_int %pos %uint_1
-         %46 = OpLoad %int %45
-         %48 = OpINotEqual %bool %46 %int_256
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %34
-         %49 = OpLabel
-         %54 = OpAccessChain %_ptr_Function_int %pos %uint_0
-         %55 = OpLoad %int %54
-         %57 = OpAccessChain %_ptr_Function_int %pos %uint_1
-         %58 = OpLoad %int %57
-               OpStore %indexable %216
-        %217 = OpAccessChain %_ptr_Function_int %indexable %58
-        %218 = OpLoad %int %217
-        %219 = OpLoad %_arr_int_uint_256 %indexable
-               OpStore %indexable %220
-        %222 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %223 = OpLoad %int %222
-        %225 = OpAccessChain %_ptr_Function_int %pos %uint_1
-               OpStore %225 %int_0
-        %227 = OpAccessChain %_ptr_Function_int %pos %uint_1
-               OpStore %227 %223
-               OpStore %indexable %219
-        %228 = OpIAdd %int %218 %int_15
-        %229 = OpSLessThan %bool %55 %228
-               OpStore %x_252_phi %229
-               OpSelectionMerge %230 None
-               OpBranchConditional %229 %231 %230
-        %231 = OpLabel
-        %233 = OpAccessChain %_ptr_Function_int %pos %uint_0
-        %234 = OpLoad %int %233
-        %236 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %237 = OpLoad %int %236
-               OpStore %indexable_1 %216
-        %238 = OpAccessChain %_ptr_Function_int %indexable_1 %237
-        %239 = OpLoad %int %238
-        %240 = OpISub %int %239 %int_15
-        %241 = OpSGreaterThan %bool %234 %240
-               OpStore %x_251 %241
-        %242 = OpLoad %bool %x_251
-               OpStore %x_252_phi %242
-               OpBranch %230
-        %230 = OpLabel
-        %243 = OpLoad %bool %x_252_phi
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-        %247 = OpAccessChain %_ptr_Function_int %pos %uint_0
-        %248 = OpLoad %int %247
-        %250 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %251 = OpLoad %int %250
-               OpStore %indexable_2 %216
-        %252 = OpAccessChain %_ptr_Function_int %indexable_2 %251
-        %253 = OpLoad %int %252
-        %258 = OpISub %int %248 %253
-        %257 = OpConvertSToF %float %258
-        %255 = OpExtInst %float %256 FAbs %257
-        %259 = OpFSub %float %float_15 %255
-        %260 = OpFDiv %float %259 %float_15
-               OpStore %p %260
-        %261 = OpLoad %float %p
-        %262 = OpLoad %float %p
-        %263 = OpLoad %float %p
-        %265 = OpCompositeConstruct %v4float %261 %262 %263 %float_1
-               OpReturnValue %265
-        %244 = OpLabel
-        %267 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %268 = OpLoad %int %267
-        %270 = OpAccessChain %_ptr_Function_int %pos %uint_1
-        %272 = OpIAdd %int %268 %int_1
-               OpStore %270 %272
-               OpBranch %35
-         %35 = OpLabel
-               OpBranch %33
-         %34 = OpLabel
-               OpReturnValue %274
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %275
-        %278 = OpLabel
-      %pos_1 = OpVariable %_ptr_Function_v2float Function %281
-       %ipos = OpVariable %_ptr_Function_v2int Function %283
-      %param = OpVariable %_ptr_Function_v2int Function %283
-        %285 = OpLoad %v4float %gl_FragCoord
-        %287 = OpAccessChain %_ptr_Uniform_v2float %x_13 %uint_0
-        %288 = OpLoad %v2float %287
-        %289 = OpCompositeExtract %float %285 0
-        %290 = OpCompositeExtract %float %285 1
-        %291 = OpCompositeConstruct %v2float %289 %290
-        %292 = OpFDiv %v2float %291 %288
-               OpStore %pos_1 %292
-        %293 = OpAccessChain %_ptr_Function_float %pos_1 %uint_0
-        %294 = OpLoad %float %293
-        %295 = OpAccessChain %_ptr_Function_float %pos_1 %uint_1
-        %296 = OpLoad %float %295
-        %299 = OpFMul %float %294 %float_256
-        %297 = OpConvertFToS %int %299
-        %301 = OpFMul %float %296 %float_256
-        %300 = OpConvertFToS %int %301
-        %302 = OpCompositeConstruct %v2int %297 %300
-               OpStore %ipos %302
-        %303 = OpLoad %v2int %ipos
-               OpStore %param %303
-        %304 = OpFunctionCall %v4float %trace_vi2_ %param
-               OpStore %x_GLF_color %304
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %306
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %310 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %311 = OpFunctionCall %void %main_1
-        %312 = OpLoad %v4float %x_GLF_color
-        %313 = OpCompositeConstruct %main_out %312
-               OpReturnValue %313
-               OpFunctionEnd
-       %main = OpFunction %void None %275
-        %315 = OpLabel
-        %317 = OpLoad %v4float %gl_FragCoord_param_1
-        %316 = OpFunctionCall %main_out %main_inner %317
-        %318 = OpCompositeExtract %v4float %316 0
-               OpStore %x_GLF_color_1_1 %318
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.wgsl
deleted file mode 100644
index 3970047..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-pillars-volatile-nontemporal-store/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,92 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn trace_vi2_(pos : ptr<function, vec2<i32>>) -> vec4<f32> {
-  var indexable : array<i32, 256>;
-  var indexable_1 : array<i32, 256>;
-  var p : f32;
-  var indexable_2 : array<i32, 256>;
-  loop {
-    var x_251 : bool;
-    var x_252_phi : bool;
-    let x_228 : ptr<function, i32> = &((*(pos)).y);
-    let x_229 : i32 = *(x_228);
-    if ((x_229 != 256)) {
-    } else {
-      break;
-    }
-    let x_233 : i32 = (*(pos)).x;
-    let x_235 : i32 = (*(pos)).y;
-    indexable = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-    let x_237 : i32 = indexable[x_235];
-    let x_238 : array<i32, 256> = indexable;
-    indexable = array<i32, 256>(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-    let x_239 : i32 = *(x_228);
-    *(x_228) = 0;
-    *(x_228) = x_239;
-    indexable = x_238;
-    let x_241 : bool = (x_233 < (x_237 + 15));
-    x_252_phi = x_241;
-    if (x_241) {
-      let x_245 : i32 = (*(pos)).x;
-      let x_247 : i32 = (*(pos)).y;
-      indexable_1 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-      let x_249 : i32 = indexable_1[x_247];
-      x_251 = (x_245 > (x_249 - 15));
-      x_252_phi = x_251;
-    }
-    let x_252 : bool = x_252_phi;
-    if (x_252) {
-      let x_256 : i32 = (*(pos)).x;
-      let x_258 : i32 = (*(pos)).y;
-      indexable_2 = array<i32, 256>(115, 133, 150, 164, 176, 184, 190, 192, 191, 187, 181, 172, 163, 153, 143, 134, 126, 120, 116, 114, 114, 117, 121, 127, 134, 141, 148, 154, 159, 162, 163, 161, 157, 151, 143, 134, 124, 113, 103, 94, 87, 82, 79, 80, 84, 91, 101, 114, 130, 146, 164, 182, 199, 215, 229, 240, 249, 254, 256, 254, 250, 243, 233, 223, 212, 200, 190, 180, 172, 166, 163, 161, 162, 164, 169, 174, 179, 185, 190, 193, 195, 195, 192, 188, 180, 171, 161, 149, 137, 125, 114, 105, 97, 93, 91, 93, 98, 106, 117, 130, 145, 161, 177, 193, 208, 221, 231, 239, 243, 244, 242, 236, 228, 218, 207, 194, 181, 169, 158, 148, 141, 135, 132, 131, 132, 135, 138, 143, 147, 151, 154, 155, 155, 152, 146, 139, 129, 118, 106, 93, 80, 68, 58, 49, 43, 40, 41, 44, 51, 61, 73, 87, 103, 119, 134, 149, 162, 173, 181, 186, 188, 186, 181, 174, 164, 153, 141, 128, 116, 104, 94, 86, 81, 77, 76, 77, 80, 84, 89, 94, 98, 102, 104, 104, 102, 98, 92, 83, 73, 62, 50, 38, 26, 16, 8, 2, 0, 0, 4, 11, 21, 33, 48, 64, 81, 98, 114, 129, 141, 151, 158, 161, 161, 158, 152, 144, 134, 123, 112, 100, 90, 81, 73, 68, 65, 65, 67, 70, 75, 81, 87, 92, 97, 101, 103, 102, 100, 95, 88, 79, 69, 58, 47, 36, 26, 18, 13, 11, 11, 15, 22, 32, 45, 60, 77, 94);
-      let x_260 : i32 = indexable_2[x_258];
-      p = ((15.0 - abs(f32((x_256 - x_260)))) / 15.0);
-      let x_266 : f32 = p;
-      let x_267 : f32 = p;
-      let x_268 : f32 = p;
-      return vec4<f32>(x_266, x_267, x_268, 1.0);
-    }
-    let x_270 : ptr<function, i32> = &((*(pos)).y);
-    let x_271 : i32 = *(x_270);
-    *(x_270) = (x_271 + 1);
-  }
-  return vec4<f32>(0.0, 0.0, 0.0, 1.0);
-}
-
-fn main_1() {
-  var pos_1 : vec2<f32>;
-  var ipos : vec2<i32>;
-  var param : vec2<i32>;
-  let x_207 : vec4<f32> = gl_FragCoord;
-  let x_210 : vec2<f32> = x_13.resolution;
-  pos_1 = (vec2<f32>(x_207.x, x_207.y) / x_210);
-  let x_213 : f32 = pos_1.x;
-  let x_217 : f32 = pos_1.y;
-  ipos = vec2<i32>(i32((x_213 * 256.0)), i32((x_217 * 256.0)));
-  let x_221 : vec2<i32> = ipos;
-  param = x_221;
-  let x_222 : vec4<f32> = trace_vi2_(&(param));
-  x_GLF_color = x_222;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 766e0f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,219 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b0, space0) {
-  uint4 x_32[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_225 = i;
-  const int x_227 = obj.numbers[x_225];
-  temp = x_227;
-  const int x_228 = i;
-  const int x_229 = j;
-  const int x_231 = obj.numbers[x_229];
-  obj.numbers[x_228] = x_231;
-  const int x_233 = j;
-  obj.numbers[x_233] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_237 = h;
-  const int x_239 = obj.numbers[x_237];
-  pivot = x_239;
-  const int x_240 = l;
-  i_1 = (x_240 - 1);
-  const int x_242 = l;
-  j_1 = x_242;
-  while (true) {
-    const int x_247 = j_1;
-    const int x_248 = h;
-    if ((x_247 <= (x_248 - 1))) {
-    } else {
-      break;
-    }
-    const int x_254 = obj.numbers[j_1];
-    if ((x_254 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  i_1 = (i_1 + 1);
-  param_2 = i_1;
-  const int x_269 = h;
-  param_3 = x_269;
-  swap_i1_i1_(param_2, param_3);
-  return i_1;
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_274 = (top + 1);
-  top = x_274;
-  stack[x_274] = l_1;
-  const int x_278 = (top + 1);
-  top = x_278;
-  stack[x_278] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_288 = top;
-    top = (x_288 - 1);
-    const int x_291 = stack[x_288];
-    h_1 = x_291;
-    const int x_292 = top;
-    top = (x_292 - 1);
-    const int x_295 = stack[x_292];
-    l_1 = x_295;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_298 = performPartition_i1_i1_(param_4, param_5);
-    p = x_298;
-    if (((p - 1) > l_1)) {
-      const int x_306 = (top + 1);
-      top = x_306;
-      stack[x_306] = l_1;
-      const int x_310 = (top + 1);
-      top = x_310;
-      stack[x_310] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_321 = (top + 1);
-      top = x_321;
-      stack[x_321] = (p + 1);
-      const int x_326 = (top + 1);
-      top = x_326;
-      stack[x_326] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_92 = i_2;
-      const int x_95 = obj.numbers[i_2];
-      const int x_98 = obj.numbers[i_2];
-      obj.numbers[x_92] = (x_95 * x_98);
-    }
-  }
-  quicksort_();
-  const float4 x_104 = gl_FragCoord;
-  const float2 x_107 = asfloat(x_32[0].xy);
-  uv = (float2(x_104.x, x_104.y) / x_107);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_110 = obj.numbers[0];
-  const float x_113 = color.x;
-  color.x = (x_113 + float(x_110));
-  const float x_117 = uv.x;
-  if ((x_117 > 0.25f)) {
-    const int x_122 = obj.numbers[1];
-    const float x_125 = color.x;
-    color.x = (x_125 + float(x_122));
-  }
-  const float x_129 = uv.x;
-  if ((x_129 > 0.5f)) {
-    const int x_134 = obj.numbers[2];
-    const float x_137 = color.y;
-    color.y = (x_137 + float(x_134));
-  }
-  const float x_141 = uv.x;
-  if ((x_141 > 0.75f)) {
-    const int x_146 = obj.numbers[3];
-    const float x_149 = color.z;
-    color.z = (x_149 + float(x_146));
-  }
-  const int x_153 = obj.numbers[4];
-  const float x_156 = color.y;
-  color.y = (x_156 + float(x_153));
-  const float x_160 = uv.y;
-  if ((x_160 > 0.25f)) {
-    const int x_165 = obj.numbers[5];
-    const float x_168 = color.x;
-    color.x = (x_168 + float(x_165));
-  }
-  const float x_172 = uv.y;
-  if ((x_172 > 0.5f)) {
-    const int x_177 = obj.numbers[6];
-    const float x_180 = color.y;
-    color.y = (x_180 + float(x_177));
-  }
-  const float x_184 = uv.y;
-  if ((x_184 > 0.75f)) {
-    const int x_189 = obj.numbers[7];
-    const float x_192 = color.z;
-    color.z = (x_192 + float(x_189));
-  }
-  const int x_196 = obj.numbers[8];
-  const float x_199 = color.z;
-  color.z = (x_199 + float(x_196));
-  const float x_203 = uv.x;
-  const float x_205 = uv.y;
-  if ((abs((x_203 - x_205)) < 0.25f)) {
-    const int x_212 = obj.numbers[9];
-    const float x_215 = color.x;
-    color.x = (x_215 + float(x_212));
-  }
-  const float3 x_219 = normalize(color);
-  x_GLF_color = float4(x_219.x, x_219.y, x_219.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.msl
deleted file mode 100644
index 91fb695..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,262 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_3) {
-  int temp = 0;
-  int const x_225 = *(i);
-  int const x_227 = (*(tint_symbol_3)).numbers.arr[x_225];
-  temp = x_227;
-  int const x_228 = *(i);
-  int const x_229 = *(j);
-  int const x_231 = (*(tint_symbol_3)).numbers.arr[x_229];
-  (*(tint_symbol_3)).numbers.arr[x_228] = x_231;
-  int const x_233 = *(j);
-  int const x_234 = temp;
-  (*(tint_symbol_3)).numbers.arr[x_233] = x_234;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_4) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_237 = *(h);
-  int const x_239 = (*(tint_symbol_4)).numbers.arr[x_237];
-  pivot = x_239;
-  int const x_240 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_240) - as_type<uint>(1)));
-  int const x_242 = *(l);
-  j_1 = x_242;
-  while (true) {
-    int const x_247 = j_1;
-    int const x_248 = *(h);
-    if ((x_247 <= as_type<int>((as_type<uint>(x_248) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_252 = j_1;
-    int const x_254 = (*(tint_symbol_4)).numbers.arr[x_252];
-    int const x_255 = pivot;
-    if ((x_254 <= x_255)) {
-      int const x_259 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_259) + as_type<uint>(1)));
-      int const x_261 = i_1;
-      param = x_261;
-      int const x_262 = j_1;
-      param_1 = x_262;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_4);
-    }
-    {
-      int const x_264 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-    }
-  }
-  int const x_266 = i_1;
-  i_1 = as_type<int>((as_type<uint>(x_266) + as_type<uint>(1)));
-  int const x_268 = i_1;
-  param_2 = x_268;
-  int const x_269 = *(h);
-  param_3 = x_269;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_4);
-  int const x_271 = i_1;
-  return x_271;
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_5) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_273 = top;
-  int const x_274 = as_type<int>((as_type<uint>(x_273) + as_type<uint>(1)));
-  top = x_274;
-  int const x_275 = l_1;
-  stack.arr[x_274] = x_275;
-  int const x_277 = top;
-  int const x_278 = as_type<int>((as_type<uint>(x_277) + as_type<uint>(1)));
-  top = x_278;
-  int const x_279 = h_1;
-  stack.arr[x_278] = x_279;
-  while (true) {
-    int const x_285 = top;
-    if ((x_285 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_288 = top;
-    top = as_type<int>((as_type<uint>(x_288) - as_type<uint>(1)));
-    int const x_291 = stack.arr[x_288];
-    h_1 = x_291;
-    int const x_292 = top;
-    top = as_type<int>((as_type<uint>(x_292) - as_type<uint>(1)));
-    int const x_295 = stack.arr[x_292];
-    l_1 = x_295;
-    int const x_296 = l_1;
-    param_4 = x_296;
-    int const x_297 = h_1;
-    param_5 = x_297;
-    int const x_298 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_5);
-    p = x_298;
-    int const x_299 = p;
-    int const x_301 = l_1;
-    if ((as_type<int>((as_type<uint>(x_299) - as_type<uint>(1))) > x_301)) {
-      int const x_305 = top;
-      int const x_306 = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
-      top = x_306;
-      int const x_307 = l_1;
-      stack.arr[x_306] = x_307;
-      int const x_309 = top;
-      int const x_310 = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
-      top = x_310;
-      int const x_311 = p;
-      stack.arr[x_310] = as_type<int>((as_type<uint>(x_311) - as_type<uint>(1)));
-    }
-    int const x_314 = p;
-    int const x_316 = h_1;
-    if ((as_type<int>((as_type<uint>(x_314) + as_type<uint>(1))) < x_316)) {
-      int const x_320 = top;
-      int const x_321 = as_type<int>((as_type<uint>(x_320) + as_type<uint>(1)));
-      top = x_321;
-      int const x_322 = p;
-      stack.arr[x_321] = as_type<int>((as_type<uint>(x_322) + as_type<uint>(1)));
-      int const x_325 = top;
-      int const x_326 = as_type<int>((as_type<uint>(x_325) + as_type<uint>(1)));
-      top = x_326;
-      int const x_327 = h_1;
-      stack.arr[x_326] = x_327;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_32, thread QuicksortObject* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  i_2 = 0;
-  while (true) {
-    int const x_85 = i_2;
-    if ((x_85 < 10)) {
-    } else {
-      break;
-    }
-    int const x_88 = i_2;
-    int const x_89 = i_2;
-    (*(tint_symbol_6)).numbers.arr[x_88] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_89)));
-    int const x_92 = i_2;
-    int const x_93 = i_2;
-    int const x_95 = (*(tint_symbol_6)).numbers.arr[x_93];
-    int const x_96 = i_2;
-    int const x_98 = (*(tint_symbol_6)).numbers.arr[x_96];
-    (*(tint_symbol_6)).numbers.arr[x_92] = as_type<int>((as_type<uint>(x_95) * as_type<uint>(x_98)));
-    {
-      int const x_101 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_6);
-  float4 const x_104 = *(tint_symbol_7);
-  float2 const x_107 = x_32.resolution;
-  uv = (float2(x_104.x, x_104.y) / x_107);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_110 = (*(tint_symbol_6)).numbers.arr[0];
-  float const x_113 = color.x;
-  color.x = (x_113 + float(x_110));
-  float const x_117 = uv.x;
-  if ((x_117 > 0.25f)) {
-    int const x_122 = (*(tint_symbol_6)).numbers.arr[1];
-    float const x_125 = color.x;
-    color.x = (x_125 + float(x_122));
-  }
-  float const x_129 = uv.x;
-  if ((x_129 > 0.5f)) {
-    int const x_134 = (*(tint_symbol_6)).numbers.arr[2];
-    float const x_137 = color.y;
-    color.y = (x_137 + float(x_134));
-  }
-  float const x_141 = uv.x;
-  if ((x_141 > 0.75f)) {
-    int const x_146 = (*(tint_symbol_6)).numbers.arr[3];
-    float const x_149 = color.z;
-    color.z = (x_149 + float(x_146));
-  }
-  int const x_153 = (*(tint_symbol_6)).numbers.arr[4];
-  float const x_156 = color.y;
-  color.y = (x_156 + float(x_153));
-  float const x_160 = uv.y;
-  if ((x_160 > 0.25f)) {
-    int const x_165 = (*(tint_symbol_6)).numbers.arr[5];
-    float const x_168 = color.x;
-    color.x = (x_168 + float(x_165));
-  }
-  float const x_172 = uv.y;
-  if ((x_172 > 0.5f)) {
-    int const x_177 = (*(tint_symbol_6)).numbers.arr[6];
-    float const x_180 = color.y;
-    color.y = (x_180 + float(x_177));
-  }
-  float const x_184 = uv.y;
-  if ((x_184 > 0.75f)) {
-    int const x_189 = (*(tint_symbol_6)).numbers.arr[7];
-    float const x_192 = color.z;
-    color.z = (x_192 + float(x_189));
-  }
-  int const x_196 = (*(tint_symbol_6)).numbers.arr[8];
-  float const x_199 = color.z;
-  color.z = (x_199 + float(x_196));
-  float const x_203 = uv.x;
-  float const x_205 = uv.y;
-  if ((fabs((x_203 - x_205)) < 0.25f)) {
-    int const x_212 = (*(tint_symbol_6)).numbers.arr[9];
-    float const x_215 = color.x;
-    color.x = (x_215 + float(x_212));
-  }
-  float3 const x_218 = color;
-  float3 const x_219 = normalize(x_218);
-  *(tint_symbol_8) = float4(x_219.x, x_219.y, x_219.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_32, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_32, tint_symbol_10, tint_symbol_9, tint_symbol_11);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_32 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread QuicksortObject tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_32, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1685711..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,541 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 374
-; Schema: 0
-               OpCapability Shader
-        %343 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %15 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_32 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %31 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %49 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %109 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %117 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %189 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %193 = OpConstantNull %v3float
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %231 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float
-        %361 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %23
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %29 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %31
-         %33 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Private_int %obj %uint_0 %33
-         %37 = OpLoad %int %36
-               OpStore %temp %37
-         %39 = OpLoad %int %i
-         %41 = OpLoad %int %j
-         %42 = OpAccessChain %_ptr_Private_int %obj %uint_0 %41
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Private_int %obj %uint_0 %39
-               OpStore %44 %43
-         %46 = OpLoad %int %j
-         %47 = OpLoad %int %temp
-         %48 = OpAccessChain %_ptr_Private_int %obj %uint_0 %46
-               OpStore %48 %47
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %49
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %53 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %31
-        %i_1 = OpVariable %_ptr_Function_int Function %31
-        %j_1 = OpVariable %_ptr_Function_int Function %31
-      %param = OpVariable %_ptr_Function_int Function %31
-    %param_1 = OpVariable %_ptr_Function_int Function %31
-    %param_2 = OpVariable %_ptr_Function_int Function %31
-    %param_3 = OpVariable %_ptr_Function_int Function %31
-         %62 = OpLoad %int %h
-         %63 = OpAccessChain %_ptr_Private_int %obj %uint_0 %62
-         %64 = OpLoad %int %63
-               OpStore %pivot %64
-         %66 = OpLoad %int %l
-         %68 = OpISub %int %66 %int_1
-               OpStore %i_1 %68
-         %70 = OpLoad %int %l
-               OpStore %j_1 %70
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %j_1
-         %77 = OpLoad %int %h
-         %78 = OpISub %int %77 %int_1
-         %79 = OpSLessThanEqual %bool %75 %78
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %72
-         %81 = OpLabel
-         %84 = OpLoad %int %j_1
-         %85 = OpAccessChain %_ptr_Private_int %obj %uint_0 %84
-         %86 = OpLoad %int %85
-         %87 = OpLoad %int %pivot
-         %88 = OpSLessThanEqual %bool %86 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %89
-         %90 = OpLabel
-         %91 = OpLoad %int %i_1
-         %92 = OpIAdd %int %91 %int_1
-               OpStore %i_1 %92
-         %93 = OpLoad %int %i_1
-               OpStore %param %93
-         %94 = OpLoad %int %j_1
-               OpStore %param_1 %94
-         %95 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %89
-         %89 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-         %98 = OpLoad %int %j_1
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %j_1 %99
-               OpBranch %71
-         %72 = OpLabel
-        %100 = OpLoad %int %i_1
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %i_1 %101
-        %102 = OpLoad %int %i_1
-               OpStore %param_2 %102
-        %104 = OpLoad %int %h
-               OpStore %param_3 %104
-        %105 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %108 = OpLoad %int %i_1
-               OpReturnValue %108
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %109
-        %111 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %31
-        %h_1 = OpVariable %_ptr_Function_int Function %31
-        %top = OpVariable %_ptr_Function_int Function %31
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %117
-          %p = OpVariable %_ptr_Function_int Function %31
-    %param_4 = OpVariable %_ptr_Function_int Function %31
-    %param_5 = OpVariable %_ptr_Function_int Function %31
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %124 = OpLoad %int %top
-        %125 = OpIAdd %int %124 %int_1
-               OpStore %top %125
-        %126 = OpLoad %int %l_1
-        %127 = OpAccessChain %_ptr_Function_int %stack %125
-               OpStore %127 %126
-        %128 = OpLoad %int %top
-        %129 = OpIAdd %int %128 %int_1
-               OpStore %top %129
-        %130 = OpLoad %int %h_1
-        %131 = OpAccessChain %_ptr_Function_int %stack %129
-               OpStore %131 %130
-               OpBranch %132
-        %132 = OpLabel
-               OpLoopMerge %133 %134 None
-               OpBranch %135
-        %135 = OpLabel
-        %136 = OpLoad %int %top
-        %137 = OpSGreaterThanEqual %bool %136 %int_0
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %140
-        %139 = OpLabel
-               OpBranch %138
-        %140 = OpLabel
-               OpBranch %133
-        %138 = OpLabel
-        %141 = OpLoad %int %top
-        %142 = OpISub %int %141 %int_1
-               OpStore %top %142
-        %143 = OpAccessChain %_ptr_Function_int %stack %141
-        %144 = OpLoad %int %143
-               OpStore %h_1 %144
-        %145 = OpLoad %int %top
-        %146 = OpISub %int %145 %int_1
-               OpStore %top %146
-        %147 = OpAccessChain %_ptr_Function_int %stack %145
-        %148 = OpLoad %int %147
-               OpStore %l_1 %148
-        %149 = OpLoad %int %l_1
-               OpStore %param_4 %149
-        %150 = OpLoad %int %h_1
-               OpStore %param_5 %150
-        %151 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %151
-        %154 = OpLoad %int %p
-        %155 = OpLoad %int %l_1
-        %156 = OpISub %int %154 %int_1
-        %157 = OpSGreaterThan %bool %156 %155
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %158
-        %159 = OpLabel
-        %160 = OpLoad %int %top
-        %161 = OpIAdd %int %160 %int_1
-               OpStore %top %161
-        %162 = OpLoad %int %l_1
-        %163 = OpAccessChain %_ptr_Function_int %stack %161
-               OpStore %163 %162
-        %164 = OpLoad %int %top
-        %165 = OpIAdd %int %164 %int_1
-               OpStore %top %165
-        %166 = OpLoad %int %p
-        %167 = OpAccessChain %_ptr_Function_int %stack %165
-        %168 = OpISub %int %166 %int_1
-               OpStore %167 %168
-               OpBranch %158
-        %158 = OpLabel
-        %169 = OpLoad %int %p
-        %170 = OpLoad %int %h_1
-        %171 = OpIAdd %int %169 %int_1
-        %172 = OpSLessThan %bool %171 %170
-               OpSelectionMerge %173 None
-               OpBranchConditional %172 %174 %173
-        %174 = OpLabel
-        %175 = OpLoad %int %top
-        %176 = OpIAdd %int %175 %int_1
-               OpStore %top %176
-        %177 = OpLoad %int %p
-        %178 = OpAccessChain %_ptr_Function_int %stack %176
-        %179 = OpIAdd %int %177 %int_1
-               OpStore %178 %179
-        %180 = OpLoad %int %top
-        %181 = OpIAdd %int %180 %int_1
-               OpStore %top %181
-        %182 = OpLoad %int %h_1
-        %183 = OpAccessChain %_ptr_Function_int %stack %181
-               OpStore %183 %182
-               OpBranch %173
-        %173 = OpLabel
-               OpBranch %134
-        %134 = OpLabel
-               OpBranch %132
-        %133 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %109
-        %185 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %31
-         %uv = OpVariable %_ptr_Function_v2float Function %189
-      %color = OpVariable %_ptr_Function_v3float Function %193
-               OpStore %i_2 %int_0
-               OpBranch %194
-        %194 = OpLabel
-               OpLoopMerge %195 %196 None
-               OpBranch %197
-        %197 = OpLabel
-        %198 = OpLoad %int %i_2
-        %200 = OpSLessThan %bool %198 %int_10
-               OpSelectionMerge %201 None
-               OpBranchConditional %200 %202 %203
-        %202 = OpLabel
-               OpBranch %201
-        %203 = OpLabel
-               OpBranch %195
-        %201 = OpLabel
-        %204 = OpLoad %int %i_2
-        %205 = OpLoad %int %i_2
-        %206 = OpAccessChain %_ptr_Private_int %obj %uint_0 %204
-        %207 = OpISub %int %int_10 %205
-               OpStore %206 %207
-        %208 = OpLoad %int %i_2
-        %209 = OpLoad %int %i_2
-        %210 = OpAccessChain %_ptr_Private_int %obj %uint_0 %209
-        %211 = OpLoad %int %210
-        %212 = OpLoad %int %i_2
-        %213 = OpAccessChain %_ptr_Private_int %obj %uint_0 %212
-        %214 = OpLoad %int %213
-        %215 = OpAccessChain %_ptr_Private_int %obj %uint_0 %208
-        %216 = OpIMul %int %211 %214
-               OpStore %215 %216
-               OpBranch %196
-        %196 = OpLabel
-        %217 = OpLoad %int %i_2
-        %218 = OpIAdd %int %217 %int_1
-               OpStore %i_2 %218
-               OpBranch %194
-        %195 = OpLabel
-        %219 = OpFunctionCall %void %quicksort_
-        %220 = OpLoad %v4float %gl_FragCoord
-        %222 = OpAccessChain %_ptr_Uniform_v2float %x_32 %uint_0
-        %223 = OpLoad %v2float %222
-        %224 = OpCompositeExtract %float %220 0
-        %225 = OpCompositeExtract %float %220 1
-        %226 = OpCompositeConstruct %v2float %224 %225
-        %227 = OpFDiv %v2float %226 %223
-               OpStore %uv %227
-               OpStore %color %231
-        %232 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %233 = OpLoad %int %232
-        %235 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %236 = OpLoad %float %235
-        %237 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %238 = OpConvertSToF %float %233
-        %239 = OpFAdd %float %236 %238
-               OpStore %237 %239
-        %240 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %241 = OpLoad %float %240
-        %243 = OpFOrdGreaterThan %bool %241 %float_0_25
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-        %246 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %247 = OpLoad %int %246
-        %248 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %249 = OpLoad %float %248
-        %250 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %251 = OpConvertSToF %float %247
-        %252 = OpFAdd %float %249 %251
-               OpStore %250 %252
-               OpBranch %244
-        %244 = OpLabel
-        %253 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %254 = OpLoad %float %253
-        %256 = OpFOrdGreaterThan %bool %254 %float_0_5
-               OpSelectionMerge %257 None
-               OpBranchConditional %256 %258 %257
-        %258 = OpLabel
-        %260 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %261 = OpLoad %int %260
-        %263 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %264 = OpLoad %float %263
-        %265 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %266 = OpConvertSToF %float %261
-        %267 = OpFAdd %float %264 %266
-               OpStore %265 %267
-               OpBranch %257
-        %257 = OpLabel
-        %268 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %269 = OpLoad %float %268
-        %271 = OpFOrdGreaterThan %bool %269 %float_0_75
-               OpSelectionMerge %272 None
-               OpBranchConditional %271 %273 %272
-        %273 = OpLabel
-        %275 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %276 = OpLoad %int %275
-        %278 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %279 = OpLoad %float %278
-        %280 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %281 = OpConvertSToF %float %276
-        %282 = OpFAdd %float %279 %281
-               OpStore %280 %282
-               OpBranch %272
-        %272 = OpLabel
-        %284 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %285 = OpLoad %int %284
-        %286 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %287 = OpLoad %float %286
-        %288 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %289 = OpConvertSToF %float %285
-        %290 = OpFAdd %float %287 %289
-               OpStore %288 %290
-        %291 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %292 = OpLoad %float %291
-        %293 = OpFOrdGreaterThan %bool %292 %float_0_25
-               OpSelectionMerge %294 None
-               OpBranchConditional %293 %295 %294
-        %295 = OpLabel
-        %297 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %298 = OpLoad %int %297
-        %299 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %300 = OpLoad %float %299
-        %301 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %302 = OpConvertSToF %float %298
-        %303 = OpFAdd %float %300 %302
-               OpStore %301 %303
-               OpBranch %294
-        %294 = OpLabel
-        %304 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %305 = OpLoad %float %304
-        %306 = OpFOrdGreaterThan %bool %305 %float_0_5
-               OpSelectionMerge %307 None
-               OpBranchConditional %306 %308 %307
-        %308 = OpLabel
-        %310 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %311 = OpLoad %int %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %313 = OpLoad %float %312
-        %314 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %315 = OpConvertSToF %float %311
-        %316 = OpFAdd %float %313 %315
-               OpStore %314 %316
-               OpBranch %307
-        %307 = OpLabel
-        %317 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %318 = OpLoad %float %317
-        %319 = OpFOrdGreaterThan %bool %318 %float_0_75
-               OpSelectionMerge %320 None
-               OpBranchConditional %319 %321 %320
-        %321 = OpLabel
-        %323 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %324 = OpLoad %int %323
-        %325 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %326 = OpLoad %float %325
-        %327 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %328 = OpConvertSToF %float %324
-        %329 = OpFAdd %float %326 %328
-               OpStore %327 %329
-               OpBranch %320
-        %320 = OpLabel
-        %331 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %332 = OpLoad %int %331
-        %333 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %334 = OpLoad %float %333
-        %335 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %336 = OpConvertSToF %float %332
-        %337 = OpFAdd %float %334 %336
-               OpStore %335 %337
-        %338 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %339 = OpLoad %float %338
-        %340 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %341 = OpLoad %float %340
-        %344 = OpFSub %float %339 %341
-        %342 = OpExtInst %float %343 FAbs %344
-        %345 = OpFOrdLessThan %bool %342 %float_0_25
-               OpSelectionMerge %346 None
-               OpBranchConditional %345 %347 %346
-        %347 = OpLabel
-        %348 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %349 = OpLoad %int %348
-        %350 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %351 = OpLoad %float %350
-        %352 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %353 = OpConvertSToF %float %349
-        %354 = OpFAdd %float %351 %353
-               OpStore %352 %354
-               OpBranch %346
-        %346 = OpLabel
-        %355 = OpLoad %v3float %color
-        %356 = OpExtInst %v3float %343 Normalize %355
-        %357 = OpCompositeExtract %float %356 0
-        %358 = OpCompositeExtract %float %356 1
-        %359 = OpCompositeExtract %float %356 2
-        %360 = OpCompositeConstruct %v4float %357 %358 %359 %float_1
-               OpStore %x_GLF_color %360
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %361
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %365 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %366 = OpFunctionCall %void %main_1
-        %367 = OpLoad %v4float %x_GLF_color
-        %368 = OpCompositeConstruct %main_out %367
-               OpReturnValue %368
-               OpFunctionEnd
-       %main = OpFunction %void None %109
-        %370 = OpLabel
-        %372 = OpLoad %v4float %gl_FragCoord_param_1
-        %371 = OpFunctionCall %main_out %main_inner %372
-        %373 = OpCompositeExtract %v4float %371 0
-               OpStore %x_GLF_color_1_1 %373
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index df70a1d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,256 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_32 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_225 : i32 = *(i);
-  let x_227 : i32 = obj.numbers[x_225];
-  temp = x_227;
-  let x_228 : i32 = *(i);
-  let x_229 : i32 = *(j);
-  let x_231 : i32 = obj.numbers[x_229];
-  obj.numbers[x_228] = x_231;
-  let x_233 : i32 = *(j);
-  let x_234 : i32 = temp;
-  obj.numbers[x_233] = x_234;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_237 : i32 = *(h);
-  let x_239 : i32 = obj.numbers[x_237];
-  pivot = x_239;
-  let x_240 : i32 = *(l);
-  i_1 = (x_240 - 1);
-  let x_242 : i32 = *(l);
-  j_1 = x_242;
-  loop {
-    let x_247 : i32 = j_1;
-    let x_248 : i32 = *(h);
-    if ((x_247 <= (x_248 - 1))) {
-    } else {
-      break;
-    }
-    let x_252 : i32 = j_1;
-    let x_254 : i32 = obj.numbers[x_252];
-    let x_255 : i32 = pivot;
-    if ((x_254 <= x_255)) {
-      let x_259 : i32 = i_1;
-      i_1 = (x_259 + 1);
-      let x_261 : i32 = i_1;
-      param = x_261;
-      let x_262 : i32 = j_1;
-      param_1 = x_262;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_264 : i32 = j_1;
-      j_1 = (x_264 + 1);
-    }
-  }
-  let x_266 : i32 = i_1;
-  i_1 = (x_266 + 1);
-  let x_268 : i32 = i_1;
-  param_2 = x_268;
-  let x_269 : i32 = *(h);
-  param_3 = x_269;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_271 : i32 = i_1;
-  return x_271;
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_273 : i32 = top;
-  let x_274 : i32 = (x_273 + 1);
-  top = x_274;
-  let x_275 : i32 = l_1;
-  stack[x_274] = x_275;
-  let x_277 : i32 = top;
-  let x_278 : i32 = (x_277 + 1);
-  top = x_278;
-  let x_279 : i32 = h_1;
-  stack[x_278] = x_279;
-  loop {
-    let x_285 : i32 = top;
-    if ((x_285 >= 0)) {
-    } else {
-      break;
-    }
-    let x_288 : i32 = top;
-    top = (x_288 - 1);
-    let x_291 : i32 = stack[x_288];
-    h_1 = x_291;
-    let x_292 : i32 = top;
-    top = (x_292 - 1);
-    let x_295 : i32 = stack[x_292];
-    l_1 = x_295;
-    let x_296 : i32 = l_1;
-    param_4 = x_296;
-    let x_297 : i32 = h_1;
-    param_5 = x_297;
-    let x_298 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_298;
-    let x_299 : i32 = p;
-    let x_301 : i32 = l_1;
-    if (((x_299 - 1) > x_301)) {
-      let x_305 : i32 = top;
-      let x_306 : i32 = (x_305 + 1);
-      top = x_306;
-      let x_307 : i32 = l_1;
-      stack[x_306] = x_307;
-      let x_309 : i32 = top;
-      let x_310 : i32 = (x_309 + 1);
-      top = x_310;
-      let x_311 : i32 = p;
-      stack[x_310] = (x_311 - 1);
-    }
-    let x_314 : i32 = p;
-    let x_316 : i32 = h_1;
-    if (((x_314 + 1) < x_316)) {
-      let x_320 : i32 = top;
-      let x_321 : i32 = (x_320 + 1);
-      top = x_321;
-      let x_322 : i32 = p;
-      stack[x_321] = (x_322 + 1);
-      let x_325 : i32 = top;
-      let x_326 : i32 = (x_325 + 1);
-      top = x_326;
-      let x_327 : i32 = h_1;
-      stack[x_326] = x_327;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  i_2 = 0;
-  loop {
-    let x_85 : i32 = i_2;
-    if ((x_85 < 10)) {
-    } else {
-      break;
-    }
-    let x_88 : i32 = i_2;
-    let x_89 : i32 = i_2;
-    obj.numbers[x_88] = (10 - x_89);
-    let x_92 : i32 = i_2;
-    let x_93 : i32 = i_2;
-    let x_95 : i32 = obj.numbers[x_93];
-    let x_96 : i32 = i_2;
-    let x_98 : i32 = obj.numbers[x_96];
-    obj.numbers[x_92] = (x_95 * x_98);
-
-    continuing {
-      let x_101 : i32 = i_2;
-      i_2 = (x_101 + 1);
-    }
-  }
-  quicksort_();
-  let x_104 : vec4<f32> = gl_FragCoord;
-  let x_107 : vec2<f32> = x_32.resolution;
-  uv = (vec2<f32>(x_104.x, x_104.y) / x_107);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_110 : i32 = obj.numbers[0];
-  let x_113 : f32 = color.x;
-  color.x = (x_113 + f32(x_110));
-  let x_117 : f32 = uv.x;
-  if ((x_117 > 0.25)) {
-    let x_122 : i32 = obj.numbers[1];
-    let x_125 : f32 = color.x;
-    color.x = (x_125 + f32(x_122));
-  }
-  let x_129 : f32 = uv.x;
-  if ((x_129 > 0.5)) {
-    let x_134 : i32 = obj.numbers[2];
-    let x_137 : f32 = color.y;
-    color.y = (x_137 + f32(x_134));
-  }
-  let x_141 : f32 = uv.x;
-  if ((x_141 > 0.75)) {
-    let x_146 : i32 = obj.numbers[3];
-    let x_149 : f32 = color.z;
-    color.z = (x_149 + f32(x_146));
-  }
-  let x_153 : i32 = obj.numbers[4];
-  let x_156 : f32 = color.y;
-  color.y = (x_156 + f32(x_153));
-  let x_160 : f32 = uv.y;
-  if ((x_160 > 0.25)) {
-    let x_165 : i32 = obj.numbers[5];
-    let x_168 : f32 = color.x;
-    color.x = (x_168 + f32(x_165));
-  }
-  let x_172 : f32 = uv.y;
-  if ((x_172 > 0.5)) {
-    let x_177 : i32 = obj.numbers[6];
-    let x_180 : f32 = color.y;
-    color.y = (x_180 + f32(x_177));
-  }
-  let x_184 : f32 = uv.y;
-  if ((x_184 > 0.75)) {
-    let x_189 : i32 = obj.numbers[7];
-    let x_192 : f32 = color.z;
-    color.z = (x_192 + f32(x_189));
-  }
-  let x_196 : i32 = obj.numbers[8];
-  let x_199 : f32 = color.z;
-  color.z = (x_199 + f32(x_196));
-  let x_203 : f32 = uv.x;
-  let x_205 : f32 = uv.y;
-  if ((abs((x_203 - x_205)) < 0.25)) {
-    let x_212 : i32 = obj.numbers[9];
-    let x_215 : f32 = color.x;
-    color.x = (x_215 + f32(x_212));
-  }
-  let x_218 : vec3<f32> = color;
-  let x_219 : vec3<f32> = normalize(x_218);
-  x_GLF_color = vec4<f32>(x_219.x, x_219.y, x_219.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 766e0f8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,219 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b0, space0) {
-  uint4 x_32[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_225 = i;
-  const int x_227 = obj.numbers[x_225];
-  temp = x_227;
-  const int x_228 = i;
-  const int x_229 = j;
-  const int x_231 = obj.numbers[x_229];
-  obj.numbers[x_228] = x_231;
-  const int x_233 = j;
-  obj.numbers[x_233] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_237 = h;
-  const int x_239 = obj.numbers[x_237];
-  pivot = x_239;
-  const int x_240 = l;
-  i_1 = (x_240 - 1);
-  const int x_242 = l;
-  j_1 = x_242;
-  while (true) {
-    const int x_247 = j_1;
-    const int x_248 = h;
-    if ((x_247 <= (x_248 - 1))) {
-    } else {
-      break;
-    }
-    const int x_254 = obj.numbers[j_1];
-    if ((x_254 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  i_1 = (i_1 + 1);
-  param_2 = i_1;
-  const int x_269 = h;
-  param_3 = x_269;
-  swap_i1_i1_(param_2, param_3);
-  return i_1;
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_274 = (top + 1);
-  top = x_274;
-  stack[x_274] = l_1;
-  const int x_278 = (top + 1);
-  top = x_278;
-  stack[x_278] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_288 = top;
-    top = (x_288 - 1);
-    const int x_291 = stack[x_288];
-    h_1 = x_291;
-    const int x_292 = top;
-    top = (x_292 - 1);
-    const int x_295 = stack[x_292];
-    l_1 = x_295;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_298 = performPartition_i1_i1_(param_4, param_5);
-    p = x_298;
-    if (((p - 1) > l_1)) {
-      const int x_306 = (top + 1);
-      top = x_306;
-      stack[x_306] = l_1;
-      const int x_310 = (top + 1);
-      top = x_310;
-      stack[x_310] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_321 = (top + 1);
-      top = x_321;
-      stack[x_321] = (p + 1);
-      const int x_326 = (top + 1);
-      top = x_326;
-      stack[x_326] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_92 = i_2;
-      const int x_95 = obj.numbers[i_2];
-      const int x_98 = obj.numbers[i_2];
-      obj.numbers[x_92] = (x_95 * x_98);
-    }
-  }
-  quicksort_();
-  const float4 x_104 = gl_FragCoord;
-  const float2 x_107 = asfloat(x_32[0].xy);
-  uv = (float2(x_104.x, x_104.y) / x_107);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_110 = obj.numbers[0];
-  const float x_113 = color.x;
-  color.x = (x_113 + float(x_110));
-  const float x_117 = uv.x;
-  if ((x_117 > 0.25f)) {
-    const int x_122 = obj.numbers[1];
-    const float x_125 = color.x;
-    color.x = (x_125 + float(x_122));
-  }
-  const float x_129 = uv.x;
-  if ((x_129 > 0.5f)) {
-    const int x_134 = obj.numbers[2];
-    const float x_137 = color.y;
-    color.y = (x_137 + float(x_134));
-  }
-  const float x_141 = uv.x;
-  if ((x_141 > 0.75f)) {
-    const int x_146 = obj.numbers[3];
-    const float x_149 = color.z;
-    color.z = (x_149 + float(x_146));
-  }
-  const int x_153 = obj.numbers[4];
-  const float x_156 = color.y;
-  color.y = (x_156 + float(x_153));
-  const float x_160 = uv.y;
-  if ((x_160 > 0.25f)) {
-    const int x_165 = obj.numbers[5];
-    const float x_168 = color.x;
-    color.x = (x_168 + float(x_165));
-  }
-  const float x_172 = uv.y;
-  if ((x_172 > 0.5f)) {
-    const int x_177 = obj.numbers[6];
-    const float x_180 = color.y;
-    color.y = (x_180 + float(x_177));
-  }
-  const float x_184 = uv.y;
-  if ((x_184 > 0.75f)) {
-    const int x_189 = obj.numbers[7];
-    const float x_192 = color.z;
-    color.z = (x_192 + float(x_189));
-  }
-  const int x_196 = obj.numbers[8];
-  const float x_199 = color.z;
-  color.z = (x_199 + float(x_196));
-  const float x_203 = uv.x;
-  const float x_205 = uv.y;
-  if ((abs((x_203 - x_205)) < 0.25f)) {
-    const int x_212 = obj.numbers[9];
-    const float x_215 = color.x;
-    color.x = (x_215 + float(x_212));
-  }
-  const float3 x_219 = normalize(color);
-  x_GLF_color = float4(x_219.x, x_219.y, x_219.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.msl
deleted file mode 100644
index 91fb695..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,262 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_3) {
-  int temp = 0;
-  int const x_225 = *(i);
-  int const x_227 = (*(tint_symbol_3)).numbers.arr[x_225];
-  temp = x_227;
-  int const x_228 = *(i);
-  int const x_229 = *(j);
-  int const x_231 = (*(tint_symbol_3)).numbers.arr[x_229];
-  (*(tint_symbol_3)).numbers.arr[x_228] = x_231;
-  int const x_233 = *(j);
-  int const x_234 = temp;
-  (*(tint_symbol_3)).numbers.arr[x_233] = x_234;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_4) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_237 = *(h);
-  int const x_239 = (*(tint_symbol_4)).numbers.arr[x_237];
-  pivot = x_239;
-  int const x_240 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_240) - as_type<uint>(1)));
-  int const x_242 = *(l);
-  j_1 = x_242;
-  while (true) {
-    int const x_247 = j_1;
-    int const x_248 = *(h);
-    if ((x_247 <= as_type<int>((as_type<uint>(x_248) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_252 = j_1;
-    int const x_254 = (*(tint_symbol_4)).numbers.arr[x_252];
-    int const x_255 = pivot;
-    if ((x_254 <= x_255)) {
-      int const x_259 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_259) + as_type<uint>(1)));
-      int const x_261 = i_1;
-      param = x_261;
-      int const x_262 = j_1;
-      param_1 = x_262;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_4);
-    }
-    {
-      int const x_264 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-    }
-  }
-  int const x_266 = i_1;
-  i_1 = as_type<int>((as_type<uint>(x_266) + as_type<uint>(1)));
-  int const x_268 = i_1;
-  param_2 = x_268;
-  int const x_269 = *(h);
-  param_3 = x_269;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_4);
-  int const x_271 = i_1;
-  return x_271;
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_5) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_273 = top;
-  int const x_274 = as_type<int>((as_type<uint>(x_273) + as_type<uint>(1)));
-  top = x_274;
-  int const x_275 = l_1;
-  stack.arr[x_274] = x_275;
-  int const x_277 = top;
-  int const x_278 = as_type<int>((as_type<uint>(x_277) + as_type<uint>(1)));
-  top = x_278;
-  int const x_279 = h_1;
-  stack.arr[x_278] = x_279;
-  while (true) {
-    int const x_285 = top;
-    if ((x_285 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_288 = top;
-    top = as_type<int>((as_type<uint>(x_288) - as_type<uint>(1)));
-    int const x_291 = stack.arr[x_288];
-    h_1 = x_291;
-    int const x_292 = top;
-    top = as_type<int>((as_type<uint>(x_292) - as_type<uint>(1)));
-    int const x_295 = stack.arr[x_292];
-    l_1 = x_295;
-    int const x_296 = l_1;
-    param_4 = x_296;
-    int const x_297 = h_1;
-    param_5 = x_297;
-    int const x_298 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_5);
-    p = x_298;
-    int const x_299 = p;
-    int const x_301 = l_1;
-    if ((as_type<int>((as_type<uint>(x_299) - as_type<uint>(1))) > x_301)) {
-      int const x_305 = top;
-      int const x_306 = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
-      top = x_306;
-      int const x_307 = l_1;
-      stack.arr[x_306] = x_307;
-      int const x_309 = top;
-      int const x_310 = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
-      top = x_310;
-      int const x_311 = p;
-      stack.arr[x_310] = as_type<int>((as_type<uint>(x_311) - as_type<uint>(1)));
-    }
-    int const x_314 = p;
-    int const x_316 = h_1;
-    if ((as_type<int>((as_type<uint>(x_314) + as_type<uint>(1))) < x_316)) {
-      int const x_320 = top;
-      int const x_321 = as_type<int>((as_type<uint>(x_320) + as_type<uint>(1)));
-      top = x_321;
-      int const x_322 = p;
-      stack.arr[x_321] = as_type<int>((as_type<uint>(x_322) + as_type<uint>(1)));
-      int const x_325 = top;
-      int const x_326 = as_type<int>((as_type<uint>(x_325) + as_type<uint>(1)));
-      top = x_326;
-      int const x_327 = h_1;
-      stack.arr[x_326] = x_327;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_32, thread QuicksortObject* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  i_2 = 0;
-  while (true) {
-    int const x_85 = i_2;
-    if ((x_85 < 10)) {
-    } else {
-      break;
-    }
-    int const x_88 = i_2;
-    int const x_89 = i_2;
-    (*(tint_symbol_6)).numbers.arr[x_88] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_89)));
-    int const x_92 = i_2;
-    int const x_93 = i_2;
-    int const x_95 = (*(tint_symbol_6)).numbers.arr[x_93];
-    int const x_96 = i_2;
-    int const x_98 = (*(tint_symbol_6)).numbers.arr[x_96];
-    (*(tint_symbol_6)).numbers.arr[x_92] = as_type<int>((as_type<uint>(x_95) * as_type<uint>(x_98)));
-    {
-      int const x_101 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_6);
-  float4 const x_104 = *(tint_symbol_7);
-  float2 const x_107 = x_32.resolution;
-  uv = (float2(x_104.x, x_104.y) / x_107);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_110 = (*(tint_symbol_6)).numbers.arr[0];
-  float const x_113 = color.x;
-  color.x = (x_113 + float(x_110));
-  float const x_117 = uv.x;
-  if ((x_117 > 0.25f)) {
-    int const x_122 = (*(tint_symbol_6)).numbers.arr[1];
-    float const x_125 = color.x;
-    color.x = (x_125 + float(x_122));
-  }
-  float const x_129 = uv.x;
-  if ((x_129 > 0.5f)) {
-    int const x_134 = (*(tint_symbol_6)).numbers.arr[2];
-    float const x_137 = color.y;
-    color.y = (x_137 + float(x_134));
-  }
-  float const x_141 = uv.x;
-  if ((x_141 > 0.75f)) {
-    int const x_146 = (*(tint_symbol_6)).numbers.arr[3];
-    float const x_149 = color.z;
-    color.z = (x_149 + float(x_146));
-  }
-  int const x_153 = (*(tint_symbol_6)).numbers.arr[4];
-  float const x_156 = color.y;
-  color.y = (x_156 + float(x_153));
-  float const x_160 = uv.y;
-  if ((x_160 > 0.25f)) {
-    int const x_165 = (*(tint_symbol_6)).numbers.arr[5];
-    float const x_168 = color.x;
-    color.x = (x_168 + float(x_165));
-  }
-  float const x_172 = uv.y;
-  if ((x_172 > 0.5f)) {
-    int const x_177 = (*(tint_symbol_6)).numbers.arr[6];
-    float const x_180 = color.y;
-    color.y = (x_180 + float(x_177));
-  }
-  float const x_184 = uv.y;
-  if ((x_184 > 0.75f)) {
-    int const x_189 = (*(tint_symbol_6)).numbers.arr[7];
-    float const x_192 = color.z;
-    color.z = (x_192 + float(x_189));
-  }
-  int const x_196 = (*(tint_symbol_6)).numbers.arr[8];
-  float const x_199 = color.z;
-  color.z = (x_199 + float(x_196));
-  float const x_203 = uv.x;
-  float const x_205 = uv.y;
-  if ((fabs((x_203 - x_205)) < 0.25f)) {
-    int const x_212 = (*(tint_symbol_6)).numbers.arr[9];
-    float const x_215 = color.x;
-    color.x = (x_215 + float(x_212));
-  }
-  float3 const x_218 = color;
-  float3 const x_219 = normalize(x_218);
-  *(tint_symbol_8) = float4(x_219.x, x_219.y, x_219.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_32, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_32, tint_symbol_10, tint_symbol_9, tint_symbol_11);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_32 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread QuicksortObject tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_32, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1685711..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,541 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 374
-; Schema: 0
-               OpCapability Shader
-        %343 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %15 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_32 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %31 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %49 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %109 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %117 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %189 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %193 = OpConstantNull %v3float
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %231 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float
-        %361 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %23
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %29 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %31
-         %33 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Private_int %obj %uint_0 %33
-         %37 = OpLoad %int %36
-               OpStore %temp %37
-         %39 = OpLoad %int %i
-         %41 = OpLoad %int %j
-         %42 = OpAccessChain %_ptr_Private_int %obj %uint_0 %41
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Private_int %obj %uint_0 %39
-               OpStore %44 %43
-         %46 = OpLoad %int %j
-         %47 = OpLoad %int %temp
-         %48 = OpAccessChain %_ptr_Private_int %obj %uint_0 %46
-               OpStore %48 %47
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %49
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %53 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %31
-        %i_1 = OpVariable %_ptr_Function_int Function %31
-        %j_1 = OpVariable %_ptr_Function_int Function %31
-      %param = OpVariable %_ptr_Function_int Function %31
-    %param_1 = OpVariable %_ptr_Function_int Function %31
-    %param_2 = OpVariable %_ptr_Function_int Function %31
-    %param_3 = OpVariable %_ptr_Function_int Function %31
-         %62 = OpLoad %int %h
-         %63 = OpAccessChain %_ptr_Private_int %obj %uint_0 %62
-         %64 = OpLoad %int %63
-               OpStore %pivot %64
-         %66 = OpLoad %int %l
-         %68 = OpISub %int %66 %int_1
-               OpStore %i_1 %68
-         %70 = OpLoad %int %l
-               OpStore %j_1 %70
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %j_1
-         %77 = OpLoad %int %h
-         %78 = OpISub %int %77 %int_1
-         %79 = OpSLessThanEqual %bool %75 %78
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %72
-         %81 = OpLabel
-         %84 = OpLoad %int %j_1
-         %85 = OpAccessChain %_ptr_Private_int %obj %uint_0 %84
-         %86 = OpLoad %int %85
-         %87 = OpLoad %int %pivot
-         %88 = OpSLessThanEqual %bool %86 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %89
-         %90 = OpLabel
-         %91 = OpLoad %int %i_1
-         %92 = OpIAdd %int %91 %int_1
-               OpStore %i_1 %92
-         %93 = OpLoad %int %i_1
-               OpStore %param %93
-         %94 = OpLoad %int %j_1
-               OpStore %param_1 %94
-         %95 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %89
-         %89 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-         %98 = OpLoad %int %j_1
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %j_1 %99
-               OpBranch %71
-         %72 = OpLabel
-        %100 = OpLoad %int %i_1
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %i_1 %101
-        %102 = OpLoad %int %i_1
-               OpStore %param_2 %102
-        %104 = OpLoad %int %h
-               OpStore %param_3 %104
-        %105 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %108 = OpLoad %int %i_1
-               OpReturnValue %108
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %109
-        %111 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %31
-        %h_1 = OpVariable %_ptr_Function_int Function %31
-        %top = OpVariable %_ptr_Function_int Function %31
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %117
-          %p = OpVariable %_ptr_Function_int Function %31
-    %param_4 = OpVariable %_ptr_Function_int Function %31
-    %param_5 = OpVariable %_ptr_Function_int Function %31
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %124 = OpLoad %int %top
-        %125 = OpIAdd %int %124 %int_1
-               OpStore %top %125
-        %126 = OpLoad %int %l_1
-        %127 = OpAccessChain %_ptr_Function_int %stack %125
-               OpStore %127 %126
-        %128 = OpLoad %int %top
-        %129 = OpIAdd %int %128 %int_1
-               OpStore %top %129
-        %130 = OpLoad %int %h_1
-        %131 = OpAccessChain %_ptr_Function_int %stack %129
-               OpStore %131 %130
-               OpBranch %132
-        %132 = OpLabel
-               OpLoopMerge %133 %134 None
-               OpBranch %135
-        %135 = OpLabel
-        %136 = OpLoad %int %top
-        %137 = OpSGreaterThanEqual %bool %136 %int_0
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %140
-        %139 = OpLabel
-               OpBranch %138
-        %140 = OpLabel
-               OpBranch %133
-        %138 = OpLabel
-        %141 = OpLoad %int %top
-        %142 = OpISub %int %141 %int_1
-               OpStore %top %142
-        %143 = OpAccessChain %_ptr_Function_int %stack %141
-        %144 = OpLoad %int %143
-               OpStore %h_1 %144
-        %145 = OpLoad %int %top
-        %146 = OpISub %int %145 %int_1
-               OpStore %top %146
-        %147 = OpAccessChain %_ptr_Function_int %stack %145
-        %148 = OpLoad %int %147
-               OpStore %l_1 %148
-        %149 = OpLoad %int %l_1
-               OpStore %param_4 %149
-        %150 = OpLoad %int %h_1
-               OpStore %param_5 %150
-        %151 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %151
-        %154 = OpLoad %int %p
-        %155 = OpLoad %int %l_1
-        %156 = OpISub %int %154 %int_1
-        %157 = OpSGreaterThan %bool %156 %155
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %158
-        %159 = OpLabel
-        %160 = OpLoad %int %top
-        %161 = OpIAdd %int %160 %int_1
-               OpStore %top %161
-        %162 = OpLoad %int %l_1
-        %163 = OpAccessChain %_ptr_Function_int %stack %161
-               OpStore %163 %162
-        %164 = OpLoad %int %top
-        %165 = OpIAdd %int %164 %int_1
-               OpStore %top %165
-        %166 = OpLoad %int %p
-        %167 = OpAccessChain %_ptr_Function_int %stack %165
-        %168 = OpISub %int %166 %int_1
-               OpStore %167 %168
-               OpBranch %158
-        %158 = OpLabel
-        %169 = OpLoad %int %p
-        %170 = OpLoad %int %h_1
-        %171 = OpIAdd %int %169 %int_1
-        %172 = OpSLessThan %bool %171 %170
-               OpSelectionMerge %173 None
-               OpBranchConditional %172 %174 %173
-        %174 = OpLabel
-        %175 = OpLoad %int %top
-        %176 = OpIAdd %int %175 %int_1
-               OpStore %top %176
-        %177 = OpLoad %int %p
-        %178 = OpAccessChain %_ptr_Function_int %stack %176
-        %179 = OpIAdd %int %177 %int_1
-               OpStore %178 %179
-        %180 = OpLoad %int %top
-        %181 = OpIAdd %int %180 %int_1
-               OpStore %top %181
-        %182 = OpLoad %int %h_1
-        %183 = OpAccessChain %_ptr_Function_int %stack %181
-               OpStore %183 %182
-               OpBranch %173
-        %173 = OpLabel
-               OpBranch %134
-        %134 = OpLabel
-               OpBranch %132
-        %133 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %109
-        %185 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %31
-         %uv = OpVariable %_ptr_Function_v2float Function %189
-      %color = OpVariable %_ptr_Function_v3float Function %193
-               OpStore %i_2 %int_0
-               OpBranch %194
-        %194 = OpLabel
-               OpLoopMerge %195 %196 None
-               OpBranch %197
-        %197 = OpLabel
-        %198 = OpLoad %int %i_2
-        %200 = OpSLessThan %bool %198 %int_10
-               OpSelectionMerge %201 None
-               OpBranchConditional %200 %202 %203
-        %202 = OpLabel
-               OpBranch %201
-        %203 = OpLabel
-               OpBranch %195
-        %201 = OpLabel
-        %204 = OpLoad %int %i_2
-        %205 = OpLoad %int %i_2
-        %206 = OpAccessChain %_ptr_Private_int %obj %uint_0 %204
-        %207 = OpISub %int %int_10 %205
-               OpStore %206 %207
-        %208 = OpLoad %int %i_2
-        %209 = OpLoad %int %i_2
-        %210 = OpAccessChain %_ptr_Private_int %obj %uint_0 %209
-        %211 = OpLoad %int %210
-        %212 = OpLoad %int %i_2
-        %213 = OpAccessChain %_ptr_Private_int %obj %uint_0 %212
-        %214 = OpLoad %int %213
-        %215 = OpAccessChain %_ptr_Private_int %obj %uint_0 %208
-        %216 = OpIMul %int %211 %214
-               OpStore %215 %216
-               OpBranch %196
-        %196 = OpLabel
-        %217 = OpLoad %int %i_2
-        %218 = OpIAdd %int %217 %int_1
-               OpStore %i_2 %218
-               OpBranch %194
-        %195 = OpLabel
-        %219 = OpFunctionCall %void %quicksort_
-        %220 = OpLoad %v4float %gl_FragCoord
-        %222 = OpAccessChain %_ptr_Uniform_v2float %x_32 %uint_0
-        %223 = OpLoad %v2float %222
-        %224 = OpCompositeExtract %float %220 0
-        %225 = OpCompositeExtract %float %220 1
-        %226 = OpCompositeConstruct %v2float %224 %225
-        %227 = OpFDiv %v2float %226 %223
-               OpStore %uv %227
-               OpStore %color %231
-        %232 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %233 = OpLoad %int %232
-        %235 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %236 = OpLoad %float %235
-        %237 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %238 = OpConvertSToF %float %233
-        %239 = OpFAdd %float %236 %238
-               OpStore %237 %239
-        %240 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %241 = OpLoad %float %240
-        %243 = OpFOrdGreaterThan %bool %241 %float_0_25
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-        %246 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %247 = OpLoad %int %246
-        %248 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %249 = OpLoad %float %248
-        %250 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %251 = OpConvertSToF %float %247
-        %252 = OpFAdd %float %249 %251
-               OpStore %250 %252
-               OpBranch %244
-        %244 = OpLabel
-        %253 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %254 = OpLoad %float %253
-        %256 = OpFOrdGreaterThan %bool %254 %float_0_5
-               OpSelectionMerge %257 None
-               OpBranchConditional %256 %258 %257
-        %258 = OpLabel
-        %260 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %261 = OpLoad %int %260
-        %263 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %264 = OpLoad %float %263
-        %265 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %266 = OpConvertSToF %float %261
-        %267 = OpFAdd %float %264 %266
-               OpStore %265 %267
-               OpBranch %257
-        %257 = OpLabel
-        %268 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %269 = OpLoad %float %268
-        %271 = OpFOrdGreaterThan %bool %269 %float_0_75
-               OpSelectionMerge %272 None
-               OpBranchConditional %271 %273 %272
-        %273 = OpLabel
-        %275 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %276 = OpLoad %int %275
-        %278 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %279 = OpLoad %float %278
-        %280 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %281 = OpConvertSToF %float %276
-        %282 = OpFAdd %float %279 %281
-               OpStore %280 %282
-               OpBranch %272
-        %272 = OpLabel
-        %284 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %285 = OpLoad %int %284
-        %286 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %287 = OpLoad %float %286
-        %288 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %289 = OpConvertSToF %float %285
-        %290 = OpFAdd %float %287 %289
-               OpStore %288 %290
-        %291 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %292 = OpLoad %float %291
-        %293 = OpFOrdGreaterThan %bool %292 %float_0_25
-               OpSelectionMerge %294 None
-               OpBranchConditional %293 %295 %294
-        %295 = OpLabel
-        %297 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %298 = OpLoad %int %297
-        %299 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %300 = OpLoad %float %299
-        %301 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %302 = OpConvertSToF %float %298
-        %303 = OpFAdd %float %300 %302
-               OpStore %301 %303
-               OpBranch %294
-        %294 = OpLabel
-        %304 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %305 = OpLoad %float %304
-        %306 = OpFOrdGreaterThan %bool %305 %float_0_5
-               OpSelectionMerge %307 None
-               OpBranchConditional %306 %308 %307
-        %308 = OpLabel
-        %310 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %311 = OpLoad %int %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %313 = OpLoad %float %312
-        %314 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %315 = OpConvertSToF %float %311
-        %316 = OpFAdd %float %313 %315
-               OpStore %314 %316
-               OpBranch %307
-        %307 = OpLabel
-        %317 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %318 = OpLoad %float %317
-        %319 = OpFOrdGreaterThan %bool %318 %float_0_75
-               OpSelectionMerge %320 None
-               OpBranchConditional %319 %321 %320
-        %321 = OpLabel
-        %323 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %324 = OpLoad %int %323
-        %325 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %326 = OpLoad %float %325
-        %327 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %328 = OpConvertSToF %float %324
-        %329 = OpFAdd %float %326 %328
-               OpStore %327 %329
-               OpBranch %320
-        %320 = OpLabel
-        %331 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %332 = OpLoad %int %331
-        %333 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %334 = OpLoad %float %333
-        %335 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %336 = OpConvertSToF %float %332
-        %337 = OpFAdd %float %334 %336
-               OpStore %335 %337
-        %338 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %339 = OpLoad %float %338
-        %340 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %341 = OpLoad %float %340
-        %344 = OpFSub %float %339 %341
-        %342 = OpExtInst %float %343 FAbs %344
-        %345 = OpFOrdLessThan %bool %342 %float_0_25
-               OpSelectionMerge %346 None
-               OpBranchConditional %345 %347 %346
-        %347 = OpLabel
-        %348 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %349 = OpLoad %int %348
-        %350 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %351 = OpLoad %float %350
-        %352 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %353 = OpConvertSToF %float %349
-        %354 = OpFAdd %float %351 %353
-               OpStore %352 %354
-               OpBranch %346
-        %346 = OpLabel
-        %355 = OpLoad %v3float %color
-        %356 = OpExtInst %v3float %343 Normalize %355
-        %357 = OpCompositeExtract %float %356 0
-        %358 = OpCompositeExtract %float %356 1
-        %359 = OpCompositeExtract %float %356 2
-        %360 = OpCompositeConstruct %v4float %357 %358 %359 %float_1
-               OpStore %x_GLF_color %360
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %361
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %365 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %366 = OpFunctionCall %void %main_1
-        %367 = OpLoad %v4float %x_GLF_color
-        %368 = OpCompositeConstruct %main_out %367
-               OpReturnValue %368
-               OpFunctionEnd
-       %main = OpFunction %void None %109
-        %370 = OpLabel
-        %372 = OpLoad %v4float %gl_FragCoord_param_1
-        %371 = OpFunctionCall %main_out %main_inner %372
-        %373 = OpCompositeExtract %v4float %371 0
-               OpStore %x_GLF_color_1_1 %373
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index df70a1d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,256 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_32 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_225 : i32 = *(i);
-  let x_227 : i32 = obj.numbers[x_225];
-  temp = x_227;
-  let x_228 : i32 = *(i);
-  let x_229 : i32 = *(j);
-  let x_231 : i32 = obj.numbers[x_229];
-  obj.numbers[x_228] = x_231;
-  let x_233 : i32 = *(j);
-  let x_234 : i32 = temp;
-  obj.numbers[x_233] = x_234;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_237 : i32 = *(h);
-  let x_239 : i32 = obj.numbers[x_237];
-  pivot = x_239;
-  let x_240 : i32 = *(l);
-  i_1 = (x_240 - 1);
-  let x_242 : i32 = *(l);
-  j_1 = x_242;
-  loop {
-    let x_247 : i32 = j_1;
-    let x_248 : i32 = *(h);
-    if ((x_247 <= (x_248 - 1))) {
-    } else {
-      break;
-    }
-    let x_252 : i32 = j_1;
-    let x_254 : i32 = obj.numbers[x_252];
-    let x_255 : i32 = pivot;
-    if ((x_254 <= x_255)) {
-      let x_259 : i32 = i_1;
-      i_1 = (x_259 + 1);
-      let x_261 : i32 = i_1;
-      param = x_261;
-      let x_262 : i32 = j_1;
-      param_1 = x_262;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_264 : i32 = j_1;
-      j_1 = (x_264 + 1);
-    }
-  }
-  let x_266 : i32 = i_1;
-  i_1 = (x_266 + 1);
-  let x_268 : i32 = i_1;
-  param_2 = x_268;
-  let x_269 : i32 = *(h);
-  param_3 = x_269;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_271 : i32 = i_1;
-  return x_271;
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_273 : i32 = top;
-  let x_274 : i32 = (x_273 + 1);
-  top = x_274;
-  let x_275 : i32 = l_1;
-  stack[x_274] = x_275;
-  let x_277 : i32 = top;
-  let x_278 : i32 = (x_277 + 1);
-  top = x_278;
-  let x_279 : i32 = h_1;
-  stack[x_278] = x_279;
-  loop {
-    let x_285 : i32 = top;
-    if ((x_285 >= 0)) {
-    } else {
-      break;
-    }
-    let x_288 : i32 = top;
-    top = (x_288 - 1);
-    let x_291 : i32 = stack[x_288];
-    h_1 = x_291;
-    let x_292 : i32 = top;
-    top = (x_292 - 1);
-    let x_295 : i32 = stack[x_292];
-    l_1 = x_295;
-    let x_296 : i32 = l_1;
-    param_4 = x_296;
-    let x_297 : i32 = h_1;
-    param_5 = x_297;
-    let x_298 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_298;
-    let x_299 : i32 = p;
-    let x_301 : i32 = l_1;
-    if (((x_299 - 1) > x_301)) {
-      let x_305 : i32 = top;
-      let x_306 : i32 = (x_305 + 1);
-      top = x_306;
-      let x_307 : i32 = l_1;
-      stack[x_306] = x_307;
-      let x_309 : i32 = top;
-      let x_310 : i32 = (x_309 + 1);
-      top = x_310;
-      let x_311 : i32 = p;
-      stack[x_310] = (x_311 - 1);
-    }
-    let x_314 : i32 = p;
-    let x_316 : i32 = h_1;
-    if (((x_314 + 1) < x_316)) {
-      let x_320 : i32 = top;
-      let x_321 : i32 = (x_320 + 1);
-      top = x_321;
-      let x_322 : i32 = p;
-      stack[x_321] = (x_322 + 1);
-      let x_325 : i32 = top;
-      let x_326 : i32 = (x_325 + 1);
-      top = x_326;
-      let x_327 : i32 = h_1;
-      stack[x_326] = x_327;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  i_2 = 0;
-  loop {
-    let x_85 : i32 = i_2;
-    if ((x_85 < 10)) {
-    } else {
-      break;
-    }
-    let x_88 : i32 = i_2;
-    let x_89 : i32 = i_2;
-    obj.numbers[x_88] = (10 - x_89);
-    let x_92 : i32 = i_2;
-    let x_93 : i32 = i_2;
-    let x_95 : i32 = obj.numbers[x_93];
-    let x_96 : i32 = i_2;
-    let x_98 : i32 = obj.numbers[x_96];
-    obj.numbers[x_92] = (x_95 * x_98);
-
-    continuing {
-      let x_101 : i32 = i_2;
-      i_2 = (x_101 + 1);
-    }
-  }
-  quicksort_();
-  let x_104 : vec4<f32> = gl_FragCoord;
-  let x_107 : vec2<f32> = x_32.resolution;
-  uv = (vec2<f32>(x_104.x, x_104.y) / x_107);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_110 : i32 = obj.numbers[0];
-  let x_113 : f32 = color.x;
-  color.x = (x_113 + f32(x_110));
-  let x_117 : f32 = uv.x;
-  if ((x_117 > 0.25)) {
-    let x_122 : i32 = obj.numbers[1];
-    let x_125 : f32 = color.x;
-    color.x = (x_125 + f32(x_122));
-  }
-  let x_129 : f32 = uv.x;
-  if ((x_129 > 0.5)) {
-    let x_134 : i32 = obj.numbers[2];
-    let x_137 : f32 = color.y;
-    color.y = (x_137 + f32(x_134));
-  }
-  let x_141 : f32 = uv.x;
-  if ((x_141 > 0.75)) {
-    let x_146 : i32 = obj.numbers[3];
-    let x_149 : f32 = color.z;
-    color.z = (x_149 + f32(x_146));
-  }
-  let x_153 : i32 = obj.numbers[4];
-  let x_156 : f32 = color.y;
-  color.y = (x_156 + f32(x_153));
-  let x_160 : f32 = uv.y;
-  if ((x_160 > 0.25)) {
-    let x_165 : i32 = obj.numbers[5];
-    let x_168 : f32 = color.x;
-    color.x = (x_168 + f32(x_165));
-  }
-  let x_172 : f32 = uv.y;
-  if ((x_172 > 0.5)) {
-    let x_177 : i32 = obj.numbers[6];
-    let x_180 : f32 = color.y;
-    color.y = (x_180 + f32(x_177));
-  }
-  let x_184 : f32 = uv.y;
-  if ((x_184 > 0.75)) {
-    let x_189 : i32 = obj.numbers[7];
-    let x_192 : f32 = color.z;
-    color.z = (x_192 + f32(x_189));
-  }
-  let x_196 : i32 = obj.numbers[8];
-  let x_199 : f32 = color.z;
-  color.z = (x_199 + f32(x_196));
-  let x_203 : f32 = uv.x;
-  let x_205 : f32 = uv.y;
-  if ((abs((x_203 - x_205)) < 0.25)) {
-    let x_212 : i32 = obj.numbers[9];
-    let x_215 : f32 = color.x;
-    color.x = (x_215 + f32(x_212));
-  }
-  let x_218 : vec3<f32> = color;
-  let x_219 : vec3<f32> = normalize(x_218);
-  x_GLF_color = vec4<f32>(x_219.x, x_219.y, x_219.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.hlsl
deleted file mode 100644
index c8248eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,219 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b0, space0) {
-  uint4 x_32[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j, float3x3 x_228) {
-  int temp = 0;
-  const int x_230 = i;
-  const int x_232 = obj.numbers[x_230];
-  temp = x_232;
-  const int x_233 = i;
-  const int x_234 = j;
-  const int x_236 = obj.numbers[x_234];
-  obj.numbers[x_233] = x_236;
-  const int x_238 = j;
-  obj.numbers[x_238] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_242 = h;
-  const int x_244 = obj.numbers[x_242];
-  pivot = x_244;
-  const int x_245 = l;
-  i_1 = (x_245 - 1);
-  const int x_247 = l;
-  j_1 = x_247;
-  while (true) {
-    const int x_252 = j_1;
-    const int x_253 = h;
-    if ((x_252 <= (x_253 - 1))) {
-    } else {
-      break;
-    }
-    const int x_259 = obj.numbers[j_1];
-    if ((x_259 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1, float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)));
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  i_1 = (i_1 + 1);
-  param_2 = i_1;
-  const int x_274 = h;
-  param_3 = x_274;
-  swap_i1_i1_(param_2, param_3, float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)));
-  return i_1;
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_279 = (top + 1);
-  top = x_279;
-  stack[x_279] = l_1;
-  const int x_283 = (top + 1);
-  top = x_283;
-  stack[x_283] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_293 = top;
-    top = (x_293 - 1);
-    const int x_296 = stack[x_293];
-    h_1 = x_296;
-    const int x_297 = top;
-    top = (x_297 - 1);
-    const int x_300 = stack[x_297];
-    l_1 = x_300;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_303 = performPartition_i1_i1_(param_4, param_5);
-    p = x_303;
-    if (((p - 1) > l_1)) {
-      const int x_311 = (top + 1);
-      top = x_311;
-      stack[x_311] = l_1;
-      const int x_315 = (top + 1);
-      top = x_315;
-      stack[x_315] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_326 = (top + 1);
-      top = x_326;
-      stack[x_326] = (p + 1);
-      const int x_331 = (top + 1);
-      top = x_331;
-      stack[x_331] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_96 = i_2;
-      const int x_99 = obj.numbers[i_2];
-      const int x_102 = obj.numbers[i_2];
-      obj.numbers[x_96] = (x_99 * x_102);
-    }
-  }
-  quicksort_();
-  const float4 x_108 = gl_FragCoord;
-  const float2 x_111 = asfloat(x_32[0].xy);
-  uv = (float2(x_108.x, x_108.y) / x_111);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_114 = obj.numbers[0];
-  const float x_117 = color.x;
-  color.x = (x_117 + float(x_114));
-  const float x_121 = uv.x;
-  if ((x_121 > 0.25f)) {
-    const int x_126 = obj.numbers[1];
-    const float x_129 = color.x;
-    color.x = (x_129 + float(x_126));
-  }
-  const float x_133 = uv.x;
-  if ((x_133 > 0.5f)) {
-    const int x_138 = obj.numbers[2];
-    const float x_141 = color.y;
-    color.y = (x_141 + float(x_138));
-  }
-  const float x_145 = uv.x;
-  if ((x_145 > 0.75f)) {
-    const int x_150 = obj.numbers[3];
-    const float x_153 = color.z;
-    color.z = (x_153 + float(x_150));
-  }
-  const int x_157 = obj.numbers[4];
-  const float x_160 = color.y;
-  color.y = (x_160 + float(x_157));
-  const float x_164 = uv.y;
-  if ((x_164 > 0.25f)) {
-    const int x_169 = obj.numbers[5];
-    const float x_172 = color.x;
-    color.x = (x_172 + float(x_169));
-  }
-  const float x_176 = uv.y;
-  if ((x_176 > 0.5f)) {
-    const int x_181 = obj.numbers[6];
-    const float x_184 = color.y;
-    color.y = (x_184 + float(x_181));
-  }
-  const float x_188 = uv.y;
-  if ((x_188 > 0.75f)) {
-    const int x_193 = obj.numbers[7];
-    const float x_196 = color.z;
-    color.z = (x_196 + float(x_193));
-  }
-  const int x_200 = obj.numbers[8];
-  const float x_203 = color.z;
-  color.z = (x_203 + float(x_200));
-  const float x_207 = uv.x;
-  const float x_209 = uv.y;
-  if ((abs((x_207 - x_209)) < 0.25f)) {
-    const int x_216 = obj.numbers[9];
-    const float x_219 = color.x;
-    color.x = (x_219 + float(x_216));
-  }
-  const float3 x_223 = normalize(color);
-  x_GLF_color = float4(x_223.x, x_223.y, x_223.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.msl
deleted file mode 100644
index a628729..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.msl
+++ /dev/null
@@ -1,262 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, float3x3 x_228, thread QuicksortObject* const tint_symbol_3) {
-  int temp = 0;
-  int const x_230 = *(i);
-  int const x_232 = (*(tint_symbol_3)).numbers.arr[x_230];
-  temp = x_232;
-  int const x_233 = *(i);
-  int const x_234 = *(j);
-  int const x_236 = (*(tint_symbol_3)).numbers.arr[x_234];
-  (*(tint_symbol_3)).numbers.arr[x_233] = x_236;
-  int const x_238 = *(j);
-  int const x_239 = temp;
-  (*(tint_symbol_3)).numbers.arr[x_238] = x_239;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_4) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_242 = *(h);
-  int const x_244 = (*(tint_symbol_4)).numbers.arr[x_242];
-  pivot = x_244;
-  int const x_245 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_245) - as_type<uint>(1)));
-  int const x_247 = *(l);
-  j_1 = x_247;
-  while (true) {
-    int const x_252 = j_1;
-    int const x_253 = *(h);
-    if ((x_252 <= as_type<int>((as_type<uint>(x_253) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_257 = j_1;
-    int const x_259 = (*(tint_symbol_4)).numbers.arr[x_257];
-    int const x_260 = pivot;
-    if ((x_259 <= x_260)) {
-      int const x_264 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-      int const x_266 = i_1;
-      param = x_266;
-      int const x_267 = j_1;
-      param_1 = x_267;
-      swap_i1_i1_(&(param), &(param_1), float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)), tint_symbol_4);
-    }
-    {
-      int const x_269 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_269) + as_type<uint>(1)));
-    }
-  }
-  int const x_271 = i_1;
-  i_1 = as_type<int>((as_type<uint>(x_271) + as_type<uint>(1)));
-  int const x_273 = i_1;
-  param_2 = x_273;
-  int const x_274 = *(h);
-  param_3 = x_274;
-  swap_i1_i1_(&(param_2), &(param_3), float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)), tint_symbol_4);
-  int const x_276 = i_1;
-  return x_276;
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_5) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_278 = top;
-  int const x_279 = as_type<int>((as_type<uint>(x_278) + as_type<uint>(1)));
-  top = x_279;
-  int const x_280 = l_1;
-  stack.arr[x_279] = x_280;
-  int const x_282 = top;
-  int const x_283 = as_type<int>((as_type<uint>(x_282) + as_type<uint>(1)));
-  top = x_283;
-  int const x_284 = h_1;
-  stack.arr[x_283] = x_284;
-  while (true) {
-    int const x_290 = top;
-    if ((x_290 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_293 = top;
-    top = as_type<int>((as_type<uint>(x_293) - as_type<uint>(1)));
-    int const x_296 = stack.arr[x_293];
-    h_1 = x_296;
-    int const x_297 = top;
-    top = as_type<int>((as_type<uint>(x_297) - as_type<uint>(1)));
-    int const x_300 = stack.arr[x_297];
-    l_1 = x_300;
-    int const x_301 = l_1;
-    param_4 = x_301;
-    int const x_302 = h_1;
-    param_5 = x_302;
-    int const x_303 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_5);
-    p = x_303;
-    int const x_304 = p;
-    int const x_306 = l_1;
-    if ((as_type<int>((as_type<uint>(x_304) - as_type<uint>(1))) > x_306)) {
-      int const x_310 = top;
-      int const x_311 = as_type<int>((as_type<uint>(x_310) + as_type<uint>(1)));
-      top = x_311;
-      int const x_312 = l_1;
-      stack.arr[x_311] = x_312;
-      int const x_314 = top;
-      int const x_315 = as_type<int>((as_type<uint>(x_314) + as_type<uint>(1)));
-      top = x_315;
-      int const x_316 = p;
-      stack.arr[x_315] = as_type<int>((as_type<uint>(x_316) - as_type<uint>(1)));
-    }
-    int const x_319 = p;
-    int const x_321 = h_1;
-    if ((as_type<int>((as_type<uint>(x_319) + as_type<uint>(1))) < x_321)) {
-      int const x_325 = top;
-      int const x_326 = as_type<int>((as_type<uint>(x_325) + as_type<uint>(1)));
-      top = x_326;
-      int const x_327 = p;
-      stack.arr[x_326] = as_type<int>((as_type<uint>(x_327) + as_type<uint>(1)));
-      int const x_330 = top;
-      int const x_331 = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
-      top = x_331;
-      int const x_332 = h_1;
-      stack.arr[x_331] = x_332;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_32, thread QuicksortObject* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  i_2 = 0;
-  while (true) {
-    int const x_89 = i_2;
-    if ((x_89 < 10)) {
-    } else {
-      break;
-    }
-    int const x_92 = i_2;
-    int const x_93 = i_2;
-    (*(tint_symbol_6)).numbers.arr[x_92] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_93)));
-    int const x_96 = i_2;
-    int const x_97 = i_2;
-    int const x_99 = (*(tint_symbol_6)).numbers.arr[x_97];
-    int const x_100 = i_2;
-    int const x_102 = (*(tint_symbol_6)).numbers.arr[x_100];
-    (*(tint_symbol_6)).numbers.arr[x_96] = as_type<int>((as_type<uint>(x_99) * as_type<uint>(x_102)));
-    {
-      int const x_105 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_6);
-  float4 const x_108 = *(tint_symbol_7);
-  float2 const x_111 = x_32.resolution;
-  uv = (float2(x_108.x, x_108.y) / x_111);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_114 = (*(tint_symbol_6)).numbers.arr[0];
-  float const x_117 = color.x;
-  color.x = (x_117 + float(x_114));
-  float const x_121 = uv.x;
-  if ((x_121 > 0.25f)) {
-    int const x_126 = (*(tint_symbol_6)).numbers.arr[1];
-    float const x_129 = color.x;
-    color.x = (x_129 + float(x_126));
-  }
-  float const x_133 = uv.x;
-  if ((x_133 > 0.5f)) {
-    int const x_138 = (*(tint_symbol_6)).numbers.arr[2];
-    float const x_141 = color.y;
-    color.y = (x_141 + float(x_138));
-  }
-  float const x_145 = uv.x;
-  if ((x_145 > 0.75f)) {
-    int const x_150 = (*(tint_symbol_6)).numbers.arr[3];
-    float const x_153 = color.z;
-    color.z = (x_153 + float(x_150));
-  }
-  int const x_157 = (*(tint_symbol_6)).numbers.arr[4];
-  float const x_160 = color.y;
-  color.y = (x_160 + float(x_157));
-  float const x_164 = uv.y;
-  if ((x_164 > 0.25f)) {
-    int const x_169 = (*(tint_symbol_6)).numbers.arr[5];
-    float const x_172 = color.x;
-    color.x = (x_172 + float(x_169));
-  }
-  float const x_176 = uv.y;
-  if ((x_176 > 0.5f)) {
-    int const x_181 = (*(tint_symbol_6)).numbers.arr[6];
-    float const x_184 = color.y;
-    color.y = (x_184 + float(x_181));
-  }
-  float const x_188 = uv.y;
-  if ((x_188 > 0.75f)) {
-    int const x_193 = (*(tint_symbol_6)).numbers.arr[7];
-    float const x_196 = color.z;
-    color.z = (x_196 + float(x_193));
-  }
-  int const x_200 = (*(tint_symbol_6)).numbers.arr[8];
-  float const x_203 = color.z;
-  color.z = (x_203 + float(x_200));
-  float const x_207 = uv.x;
-  float const x_209 = uv.y;
-  if ((fabs((x_207 - x_209)) < 0.25f)) {
-    int const x_216 = (*(tint_symbol_6)).numbers.arr[9];
-    float const x_219 = color.x;
-    color.x = (x_219 + float(x_216));
-  }
-  float3 const x_222 = color;
-  float3 const x_223 = normalize(x_222);
-  *(tint_symbol_8) = float4(x_223.x, x_223.y, x_223.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_32, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_32, tint_symbol_10, tint_symbol_9, tint_symbol_11);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_32 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread QuicksortObject tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_32, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.spvasm
deleted file mode 100644
index c09bea6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,547 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 379
-; Schema: 0
-               OpCapability Shader
-        %348 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %x_228 "x_228"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %15 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_32 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-    %v3float = OpTypeVector %float 3
-%mat3v3float = OpTypeMatrix %v3float 3
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %mat3v3float
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %52 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-        %102 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-        %103 = OpConstantComposite %mat3v3float %102 %102 %102
-        %115 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %123 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %195 = OpConstantNull %v2float
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %198 = OpConstantNull %v3float
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %236 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float
-        %366 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %23
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-      %x_228 = OpFunctionParameter %mat3v3float
-         %32 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %34
-         %36 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Private_int %obj %uint_0 %36
-         %40 = OpLoad %int %39
-               OpStore %temp %40
-         %42 = OpLoad %int %i
-         %44 = OpLoad %int %j
-         %45 = OpAccessChain %_ptr_Private_int %obj %uint_0 %44
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
-               OpStore %47 %46
-         %49 = OpLoad %int %j
-         %50 = OpLoad %int %temp
-         %51 = OpAccessChain %_ptr_Private_int %obj %uint_0 %49
-               OpStore %51 %50
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %52
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %56 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %34
-        %i_1 = OpVariable %_ptr_Function_int Function %34
-        %j_1 = OpVariable %_ptr_Function_int Function %34
-      %param = OpVariable %_ptr_Function_int Function %34
-    %param_1 = OpVariable %_ptr_Function_int Function %34
-    %param_2 = OpVariable %_ptr_Function_int Function %34
-    %param_3 = OpVariable %_ptr_Function_int Function %34
-         %65 = OpLoad %int %h
-         %66 = OpAccessChain %_ptr_Private_int %obj %uint_0 %65
-         %67 = OpLoad %int %66
-               OpStore %pivot %67
-         %69 = OpLoad %int %l
-         %71 = OpISub %int %69 %int_1
-               OpStore %i_1 %71
-         %73 = OpLoad %int %l
-               OpStore %j_1 %73
-               OpBranch %74
-         %74 = OpLabel
-               OpLoopMerge %75 %76 None
-               OpBranch %77
-         %77 = OpLabel
-         %78 = OpLoad %int %j_1
-         %80 = OpLoad %int %h
-         %81 = OpISub %int %80 %int_1
-         %82 = OpSLessThanEqual %bool %78 %81
-               OpSelectionMerge %84 None
-               OpBranchConditional %82 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %75
-         %84 = OpLabel
-         %87 = OpLoad %int %j_1
-         %88 = OpAccessChain %_ptr_Private_int %obj %uint_0 %87
-         %89 = OpLoad %int %88
-         %90 = OpLoad %int %pivot
-         %91 = OpSLessThanEqual %bool %89 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %92
-         %93 = OpLabel
-         %94 = OpLoad %int %i_1
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %i_1 %95
-         %96 = OpLoad %int %i_1
-               OpStore %param %96
-         %97 = OpLoad %int %j_1
-               OpStore %param_1 %97
-         %98 = OpFunctionCall %void %swap_i1_i1_ %param %param_1 %103
-               OpBranch %92
-         %92 = OpLabel
-               OpBranch %76
-         %76 = OpLabel
-        %104 = OpLoad %int %j_1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %j_1 %105
-               OpBranch %74
-         %75 = OpLabel
-        %106 = OpLoad %int %i_1
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %i_1 %107
-        %108 = OpLoad %int %i_1
-               OpStore %param_2 %108
-        %110 = OpLoad %int %h
-               OpStore %param_3 %110
-        %111 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3 %103
-        %114 = OpLoad %int %i_1
-               OpReturnValue %114
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %115
-        %117 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %34
-        %h_1 = OpVariable %_ptr_Function_int Function %34
-        %top = OpVariable %_ptr_Function_int Function %34
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %123
-          %p = OpVariable %_ptr_Function_int Function %34
-    %param_4 = OpVariable %_ptr_Function_int Function %34
-    %param_5 = OpVariable %_ptr_Function_int Function %34
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %130 = OpLoad %int %top
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %top %131
-        %132 = OpLoad %int %l_1
-        %133 = OpAccessChain %_ptr_Function_int %stack %131
-               OpStore %133 %132
-        %134 = OpLoad %int %top
-        %135 = OpIAdd %int %134 %int_1
-               OpStore %top %135
-        %136 = OpLoad %int %h_1
-        %137 = OpAccessChain %_ptr_Function_int %stack %135
-               OpStore %137 %136
-               OpBranch %138
-        %138 = OpLabel
-               OpLoopMerge %139 %140 None
-               OpBranch %141
-        %141 = OpLabel
-        %142 = OpLoad %int %top
-        %143 = OpSGreaterThanEqual %bool %142 %int_0
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %146
-        %145 = OpLabel
-               OpBranch %144
-        %146 = OpLabel
-               OpBranch %139
-        %144 = OpLabel
-        %147 = OpLoad %int %top
-        %148 = OpISub %int %147 %int_1
-               OpStore %top %148
-        %149 = OpAccessChain %_ptr_Function_int %stack %147
-        %150 = OpLoad %int %149
-               OpStore %h_1 %150
-        %151 = OpLoad %int %top
-        %152 = OpISub %int %151 %int_1
-               OpStore %top %152
-        %153 = OpAccessChain %_ptr_Function_int %stack %151
-        %154 = OpLoad %int %153
-               OpStore %l_1 %154
-        %155 = OpLoad %int %l_1
-               OpStore %param_4 %155
-        %156 = OpLoad %int %h_1
-               OpStore %param_5 %156
-        %157 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %157
-        %160 = OpLoad %int %p
-        %161 = OpLoad %int %l_1
-        %162 = OpISub %int %160 %int_1
-        %163 = OpSGreaterThan %bool %162 %161
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %164
-        %165 = OpLabel
-        %166 = OpLoad %int %top
-        %167 = OpIAdd %int %166 %int_1
-               OpStore %top %167
-        %168 = OpLoad %int %l_1
-        %169 = OpAccessChain %_ptr_Function_int %stack %167
-               OpStore %169 %168
-        %170 = OpLoad %int %top
-        %171 = OpIAdd %int %170 %int_1
-               OpStore %top %171
-        %172 = OpLoad %int %p
-        %173 = OpAccessChain %_ptr_Function_int %stack %171
-        %174 = OpISub %int %172 %int_1
-               OpStore %173 %174
-               OpBranch %164
-        %164 = OpLabel
-        %175 = OpLoad %int %p
-        %176 = OpLoad %int %h_1
-        %177 = OpIAdd %int %175 %int_1
-        %178 = OpSLessThan %bool %177 %176
-               OpSelectionMerge %179 None
-               OpBranchConditional %178 %180 %179
-        %180 = OpLabel
-        %181 = OpLoad %int %top
-        %182 = OpIAdd %int %181 %int_1
-               OpStore %top %182
-        %183 = OpLoad %int %p
-        %184 = OpAccessChain %_ptr_Function_int %stack %182
-        %185 = OpIAdd %int %183 %int_1
-               OpStore %184 %185
-        %186 = OpLoad %int %top
-        %187 = OpIAdd %int %186 %int_1
-               OpStore %top %187
-        %188 = OpLoad %int %h_1
-        %189 = OpAccessChain %_ptr_Function_int %stack %187
-               OpStore %189 %188
-               OpBranch %179
-        %179 = OpLabel
-               OpBranch %140
-        %140 = OpLabel
-               OpBranch %138
-        %139 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %115
-        %191 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %34
-         %uv = OpVariable %_ptr_Function_v2float Function %195
-      %color = OpVariable %_ptr_Function_v3float Function %198
-               OpStore %i_2 %int_0
-               OpBranch %199
-        %199 = OpLabel
-               OpLoopMerge %200 %201 None
-               OpBranch %202
-        %202 = OpLabel
-        %203 = OpLoad %int %i_2
-        %205 = OpSLessThan %bool %203 %int_10
-               OpSelectionMerge %206 None
-               OpBranchConditional %205 %207 %208
-        %207 = OpLabel
-               OpBranch %206
-        %208 = OpLabel
-               OpBranch %200
-        %206 = OpLabel
-        %209 = OpLoad %int %i_2
-        %210 = OpLoad %int %i_2
-        %211 = OpAccessChain %_ptr_Private_int %obj %uint_0 %209
-        %212 = OpISub %int %int_10 %210
-               OpStore %211 %212
-        %213 = OpLoad %int %i_2
-        %214 = OpLoad %int %i_2
-        %215 = OpAccessChain %_ptr_Private_int %obj %uint_0 %214
-        %216 = OpLoad %int %215
-        %217 = OpLoad %int %i_2
-        %218 = OpAccessChain %_ptr_Private_int %obj %uint_0 %217
-        %219 = OpLoad %int %218
-        %220 = OpAccessChain %_ptr_Private_int %obj %uint_0 %213
-        %221 = OpIMul %int %216 %219
-               OpStore %220 %221
-               OpBranch %201
-        %201 = OpLabel
-        %222 = OpLoad %int %i_2
-        %223 = OpIAdd %int %222 %int_1
-               OpStore %i_2 %223
-               OpBranch %199
-        %200 = OpLabel
-        %224 = OpFunctionCall %void %quicksort_
-        %225 = OpLoad %v4float %gl_FragCoord
-        %227 = OpAccessChain %_ptr_Uniform_v2float %x_32 %uint_0
-        %228 = OpLoad %v2float %227
-        %229 = OpCompositeExtract %float %225 0
-        %230 = OpCompositeExtract %float %225 1
-        %231 = OpCompositeConstruct %v2float %229 %230
-        %232 = OpFDiv %v2float %231 %228
-               OpStore %uv %232
-               OpStore %color %236
-        %237 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %238 = OpLoad %int %237
-        %240 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %241 = OpLoad %float %240
-        %242 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %243 = OpConvertSToF %float %238
-        %244 = OpFAdd %float %241 %243
-               OpStore %242 %244
-        %245 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %246 = OpLoad %float %245
-        %248 = OpFOrdGreaterThan %bool %246 %float_0_25
-               OpSelectionMerge %249 None
-               OpBranchConditional %248 %250 %249
-        %250 = OpLabel
-        %251 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %252 = OpLoad %int %251
-        %253 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %254 = OpLoad %float %253
-        %255 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %256 = OpConvertSToF %float %252
-        %257 = OpFAdd %float %254 %256
-               OpStore %255 %257
-               OpBranch %249
-        %249 = OpLabel
-        %258 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %259 = OpLoad %float %258
-        %261 = OpFOrdGreaterThan %bool %259 %float_0_5
-               OpSelectionMerge %262 None
-               OpBranchConditional %261 %263 %262
-        %263 = OpLabel
-        %265 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %266 = OpLoad %int %265
-        %268 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %269 = OpLoad %float %268
-        %270 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %271 = OpConvertSToF %float %266
-        %272 = OpFAdd %float %269 %271
-               OpStore %270 %272
-               OpBranch %262
-        %262 = OpLabel
-        %273 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %274 = OpLoad %float %273
-        %276 = OpFOrdGreaterThan %bool %274 %float_0_75
-               OpSelectionMerge %277 None
-               OpBranchConditional %276 %278 %277
-        %278 = OpLabel
-        %280 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %281 = OpLoad %int %280
-        %283 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %284 = OpLoad %float %283
-        %285 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %286 = OpConvertSToF %float %281
-        %287 = OpFAdd %float %284 %286
-               OpStore %285 %287
-               OpBranch %277
-        %277 = OpLabel
-        %289 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %290 = OpLoad %int %289
-        %291 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %292 = OpLoad %float %291
-        %293 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %294 = OpConvertSToF %float %290
-        %295 = OpFAdd %float %292 %294
-               OpStore %293 %295
-        %296 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %297 = OpLoad %float %296
-        %298 = OpFOrdGreaterThan %bool %297 %float_0_25
-               OpSelectionMerge %299 None
-               OpBranchConditional %298 %300 %299
-        %300 = OpLabel
-        %302 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %303 = OpLoad %int %302
-        %304 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %305 = OpLoad %float %304
-        %306 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %307 = OpConvertSToF %float %303
-        %308 = OpFAdd %float %305 %307
-               OpStore %306 %308
-               OpBranch %299
-        %299 = OpLabel
-        %309 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %310 = OpLoad %float %309
-        %311 = OpFOrdGreaterThan %bool %310 %float_0_5
-               OpSelectionMerge %312 None
-               OpBranchConditional %311 %313 %312
-        %313 = OpLabel
-        %315 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %316 = OpLoad %int %315
-        %317 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %318 = OpLoad %float %317
-        %319 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %320 = OpConvertSToF %float %316
-        %321 = OpFAdd %float %318 %320
-               OpStore %319 %321
-               OpBranch %312
-        %312 = OpLabel
-        %322 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %323 = OpLoad %float %322
-        %324 = OpFOrdGreaterThan %bool %323 %float_0_75
-               OpSelectionMerge %325 None
-               OpBranchConditional %324 %326 %325
-        %326 = OpLabel
-        %328 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %329 = OpLoad %int %328
-        %330 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %331 = OpLoad %float %330
-        %332 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %333 = OpConvertSToF %float %329
-        %334 = OpFAdd %float %331 %333
-               OpStore %332 %334
-               OpBranch %325
-        %325 = OpLabel
-        %336 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %337 = OpLoad %int %336
-        %338 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %339 = OpLoad %float %338
-        %340 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %341 = OpConvertSToF %float %337
-        %342 = OpFAdd %float %339 %341
-               OpStore %340 %342
-        %343 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %344 = OpLoad %float %343
-        %345 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %346 = OpLoad %float %345
-        %349 = OpFSub %float %344 %346
-        %347 = OpExtInst %float %348 FAbs %349
-        %350 = OpFOrdLessThan %bool %347 %float_0_25
-               OpSelectionMerge %351 None
-               OpBranchConditional %350 %352 %351
-        %352 = OpLabel
-        %353 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %354 = OpLoad %int %353
-        %355 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %356 = OpLoad %float %355
-        %357 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %358 = OpConvertSToF %float %354
-        %359 = OpFAdd %float %356 %358
-               OpStore %357 %359
-               OpBranch %351
-        %351 = OpLabel
-        %360 = OpLoad %v3float %color
-        %361 = OpExtInst %v3float %348 Normalize %360
-        %362 = OpCompositeExtract %float %361 0
-        %363 = OpCompositeExtract %float %361 1
-        %364 = OpCompositeExtract %float %361 2
-        %365 = OpCompositeConstruct %v4float %362 %363 %364 %float_1
-               OpStore %x_GLF_color %365
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %366
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %370 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %371 = OpFunctionCall %void %main_1
-        %372 = OpLoad %v4float %x_GLF_color
-        %373 = OpCompositeConstruct %main_out %372
-               OpReturnValue %373
-               OpFunctionEnd
-       %main = OpFunction %void None %115
-        %375 = OpLabel
-        %377 = OpLoad %v4float %gl_FragCoord_param_1
-        %376 = OpFunctionCall %main_out %main_inner %377
-        %378 = OpCompositeExtract %v4float %376 0
-               OpStore %x_GLF_color_1_1 %378
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.wgsl
deleted file mode 100644
index af97bb8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,256 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_32 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>, x_228 : mat3x3<f32>) {
-  var temp : i32;
-  let x_230 : i32 = *(i);
-  let x_232 : i32 = obj.numbers[x_230];
-  temp = x_232;
-  let x_233 : i32 = *(i);
-  let x_234 : i32 = *(j);
-  let x_236 : i32 = obj.numbers[x_234];
-  obj.numbers[x_233] = x_236;
-  let x_238 : i32 = *(j);
-  let x_239 : i32 = temp;
-  obj.numbers[x_238] = x_239;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_242 : i32 = *(h);
-  let x_244 : i32 = obj.numbers[x_242];
-  pivot = x_244;
-  let x_245 : i32 = *(l);
-  i_1 = (x_245 - 1);
-  let x_247 : i32 = *(l);
-  j_1 = x_247;
-  loop {
-    let x_252 : i32 = j_1;
-    let x_253 : i32 = *(h);
-    if ((x_252 <= (x_253 - 1))) {
-    } else {
-      break;
-    }
-    let x_257 : i32 = j_1;
-    let x_259 : i32 = obj.numbers[x_257];
-    let x_260 : i32 = pivot;
-    if ((x_259 <= x_260)) {
-      let x_264 : i32 = i_1;
-      i_1 = (x_264 + 1);
-      let x_266 : i32 = i_1;
-      param = x_266;
-      let x_267 : i32 = j_1;
-      param_1 = x_267;
-      swap_i1_i1_(&(param), &(param_1), mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
-    }
-
-    continuing {
-      let x_269 : i32 = j_1;
-      j_1 = (x_269 + 1);
-    }
-  }
-  let x_271 : i32 = i_1;
-  i_1 = (x_271 + 1);
-  let x_273 : i32 = i_1;
-  param_2 = x_273;
-  let x_274 : i32 = *(h);
-  param_3 = x_274;
-  swap_i1_i1_(&(param_2), &(param_3), mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
-  let x_276 : i32 = i_1;
-  return x_276;
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_278 : i32 = top;
-  let x_279 : i32 = (x_278 + 1);
-  top = x_279;
-  let x_280 : i32 = l_1;
-  stack[x_279] = x_280;
-  let x_282 : i32 = top;
-  let x_283 : i32 = (x_282 + 1);
-  top = x_283;
-  let x_284 : i32 = h_1;
-  stack[x_283] = x_284;
-  loop {
-    let x_290 : i32 = top;
-    if ((x_290 >= 0)) {
-    } else {
-      break;
-    }
-    let x_293 : i32 = top;
-    top = (x_293 - 1);
-    let x_296 : i32 = stack[x_293];
-    h_1 = x_296;
-    let x_297 : i32 = top;
-    top = (x_297 - 1);
-    let x_300 : i32 = stack[x_297];
-    l_1 = x_300;
-    let x_301 : i32 = l_1;
-    param_4 = x_301;
-    let x_302 : i32 = h_1;
-    param_5 = x_302;
-    let x_303 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_303;
-    let x_304 : i32 = p;
-    let x_306 : i32 = l_1;
-    if (((x_304 - 1) > x_306)) {
-      let x_310 : i32 = top;
-      let x_311 : i32 = (x_310 + 1);
-      top = x_311;
-      let x_312 : i32 = l_1;
-      stack[x_311] = x_312;
-      let x_314 : i32 = top;
-      let x_315 : i32 = (x_314 + 1);
-      top = x_315;
-      let x_316 : i32 = p;
-      stack[x_315] = (x_316 - 1);
-    }
-    let x_319 : i32 = p;
-    let x_321 : i32 = h_1;
-    if (((x_319 + 1) < x_321)) {
-      let x_325 : i32 = top;
-      let x_326 : i32 = (x_325 + 1);
-      top = x_326;
-      let x_327 : i32 = p;
-      stack[x_326] = (x_327 + 1);
-      let x_330 : i32 = top;
-      let x_331 : i32 = (x_330 + 1);
-      top = x_331;
-      let x_332 : i32 = h_1;
-      stack[x_331] = x_332;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  i_2 = 0;
-  loop {
-    let x_89 : i32 = i_2;
-    if ((x_89 < 10)) {
-    } else {
-      break;
-    }
-    let x_92 : i32 = i_2;
-    let x_93 : i32 = i_2;
-    obj.numbers[x_92] = (10 - x_93);
-    let x_96 : i32 = i_2;
-    let x_97 : i32 = i_2;
-    let x_99 : i32 = obj.numbers[x_97];
-    let x_100 : i32 = i_2;
-    let x_102 : i32 = obj.numbers[x_100];
-    obj.numbers[x_96] = (x_99 * x_102);
-
-    continuing {
-      let x_105 : i32 = i_2;
-      i_2 = (x_105 + 1);
-    }
-  }
-  quicksort_();
-  let x_108 : vec4<f32> = gl_FragCoord;
-  let x_111 : vec2<f32> = x_32.resolution;
-  uv = (vec2<f32>(x_108.x, x_108.y) / x_111);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_114 : i32 = obj.numbers[0];
-  let x_117 : f32 = color.x;
-  color.x = (x_117 + f32(x_114));
-  let x_121 : f32 = uv.x;
-  if ((x_121 > 0.25)) {
-    let x_126 : i32 = obj.numbers[1];
-    let x_129 : f32 = color.x;
-    color.x = (x_129 + f32(x_126));
-  }
-  let x_133 : f32 = uv.x;
-  if ((x_133 > 0.5)) {
-    let x_138 : i32 = obj.numbers[2];
-    let x_141 : f32 = color.y;
-    color.y = (x_141 + f32(x_138));
-  }
-  let x_145 : f32 = uv.x;
-  if ((x_145 > 0.75)) {
-    let x_150 : i32 = obj.numbers[3];
-    let x_153 : f32 = color.z;
-    color.z = (x_153 + f32(x_150));
-  }
-  let x_157 : i32 = obj.numbers[4];
-  let x_160 : f32 = color.y;
-  color.y = (x_160 + f32(x_157));
-  let x_164 : f32 = uv.y;
-  if ((x_164 > 0.25)) {
-    let x_169 : i32 = obj.numbers[5];
-    let x_172 : f32 = color.x;
-    color.x = (x_172 + f32(x_169));
-  }
-  let x_176 : f32 = uv.y;
-  if ((x_176 > 0.5)) {
-    let x_181 : i32 = obj.numbers[6];
-    let x_184 : f32 = color.y;
-    color.y = (x_184 + f32(x_181));
-  }
-  let x_188 : f32 = uv.y;
-  if ((x_188 > 0.75)) {
-    let x_193 : i32 = obj.numbers[7];
-    let x_196 : f32 = color.z;
-    color.z = (x_196 + f32(x_193));
-  }
-  let x_200 : i32 = obj.numbers[8];
-  let x_203 : f32 = color.z;
-  color.z = (x_203 + f32(x_200));
-  let x_207 : f32 = uv.x;
-  let x_209 : f32 = uv.y;
-  if ((abs((x_207 - x_209)) < 0.25)) {
-    let x_216 : i32 = obj.numbers[9];
-    let x_219 : f32 = color.x;
-    color.x = (x_219 + f32(x_216));
-  }
-  let x_222 : vec3<f32> = color;
-  let x_223 : vec3<f32> = normalize(x_222);
-  x_GLF_color = vec4<f32>(x_223.x, x_223.y, x_223.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.hlsl
deleted file mode 100644
index c8248eb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,219 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b0, space0) {
-  uint4 x_32[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j, float3x3 x_228) {
-  int temp = 0;
-  const int x_230 = i;
-  const int x_232 = obj.numbers[x_230];
-  temp = x_232;
-  const int x_233 = i;
-  const int x_234 = j;
-  const int x_236 = obj.numbers[x_234];
-  obj.numbers[x_233] = x_236;
-  const int x_238 = j;
-  obj.numbers[x_238] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_242 = h;
-  const int x_244 = obj.numbers[x_242];
-  pivot = x_244;
-  const int x_245 = l;
-  i_1 = (x_245 - 1);
-  const int x_247 = l;
-  j_1 = x_247;
-  while (true) {
-    const int x_252 = j_1;
-    const int x_253 = h;
-    if ((x_252 <= (x_253 - 1))) {
-    } else {
-      break;
-    }
-    const int x_259 = obj.numbers[j_1];
-    if ((x_259 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1, float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)));
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  i_1 = (i_1 + 1);
-  param_2 = i_1;
-  const int x_274 = h;
-  param_3 = x_274;
-  swap_i1_i1_(param_2, param_3, float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)));
-  return i_1;
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_279 = (top + 1);
-  top = x_279;
-  stack[x_279] = l_1;
-  const int x_283 = (top + 1);
-  top = x_283;
-  stack[x_283] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_293 = top;
-    top = (x_293 - 1);
-    const int x_296 = stack[x_293];
-    h_1 = x_296;
-    const int x_297 = top;
-    top = (x_297 - 1);
-    const int x_300 = stack[x_297];
-    l_1 = x_300;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_303 = performPartition_i1_i1_(param_4, param_5);
-    p = x_303;
-    if (((p - 1) > l_1)) {
-      const int x_311 = (top + 1);
-      top = x_311;
-      stack[x_311] = l_1;
-      const int x_315 = (top + 1);
-      top = x_315;
-      stack[x_315] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_326 = (top + 1);
-      top = x_326;
-      stack[x_326] = (p + 1);
-      const int x_331 = (top + 1);
-      top = x_331;
-      stack[x_331] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_96 = i_2;
-      const int x_99 = obj.numbers[i_2];
-      const int x_102 = obj.numbers[i_2];
-      obj.numbers[x_96] = (x_99 * x_102);
-    }
-  }
-  quicksort_();
-  const float4 x_108 = gl_FragCoord;
-  const float2 x_111 = asfloat(x_32[0].xy);
-  uv = (float2(x_108.x, x_108.y) / x_111);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_114 = obj.numbers[0];
-  const float x_117 = color.x;
-  color.x = (x_117 + float(x_114));
-  const float x_121 = uv.x;
-  if ((x_121 > 0.25f)) {
-    const int x_126 = obj.numbers[1];
-    const float x_129 = color.x;
-    color.x = (x_129 + float(x_126));
-  }
-  const float x_133 = uv.x;
-  if ((x_133 > 0.5f)) {
-    const int x_138 = obj.numbers[2];
-    const float x_141 = color.y;
-    color.y = (x_141 + float(x_138));
-  }
-  const float x_145 = uv.x;
-  if ((x_145 > 0.75f)) {
-    const int x_150 = obj.numbers[3];
-    const float x_153 = color.z;
-    color.z = (x_153 + float(x_150));
-  }
-  const int x_157 = obj.numbers[4];
-  const float x_160 = color.y;
-  color.y = (x_160 + float(x_157));
-  const float x_164 = uv.y;
-  if ((x_164 > 0.25f)) {
-    const int x_169 = obj.numbers[5];
-    const float x_172 = color.x;
-    color.x = (x_172 + float(x_169));
-  }
-  const float x_176 = uv.y;
-  if ((x_176 > 0.5f)) {
-    const int x_181 = obj.numbers[6];
-    const float x_184 = color.y;
-    color.y = (x_184 + float(x_181));
-  }
-  const float x_188 = uv.y;
-  if ((x_188 > 0.75f)) {
-    const int x_193 = obj.numbers[7];
-    const float x_196 = color.z;
-    color.z = (x_196 + float(x_193));
-  }
-  const int x_200 = obj.numbers[8];
-  const float x_203 = color.z;
-  color.z = (x_203 + float(x_200));
-  const float x_207 = uv.x;
-  const float x_209 = uv.y;
-  if ((abs((x_207 - x_209)) < 0.25f)) {
-    const int x_216 = obj.numbers[9];
-    const float x_219 = color.x;
-    color.x = (x_219 + float(x_216));
-  }
-  const float3 x_223 = normalize(color);
-  x_GLF_color = float4(x_223.x, x_223.y, x_223.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.msl
deleted file mode 100644
index a628729..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.msl
+++ /dev/null
@@ -1,262 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, float3x3 x_228, thread QuicksortObject* const tint_symbol_3) {
-  int temp = 0;
-  int const x_230 = *(i);
-  int const x_232 = (*(tint_symbol_3)).numbers.arr[x_230];
-  temp = x_232;
-  int const x_233 = *(i);
-  int const x_234 = *(j);
-  int const x_236 = (*(tint_symbol_3)).numbers.arr[x_234];
-  (*(tint_symbol_3)).numbers.arr[x_233] = x_236;
-  int const x_238 = *(j);
-  int const x_239 = temp;
-  (*(tint_symbol_3)).numbers.arr[x_238] = x_239;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_4) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_242 = *(h);
-  int const x_244 = (*(tint_symbol_4)).numbers.arr[x_242];
-  pivot = x_244;
-  int const x_245 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_245) - as_type<uint>(1)));
-  int const x_247 = *(l);
-  j_1 = x_247;
-  while (true) {
-    int const x_252 = j_1;
-    int const x_253 = *(h);
-    if ((x_252 <= as_type<int>((as_type<uint>(x_253) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_257 = j_1;
-    int const x_259 = (*(tint_symbol_4)).numbers.arr[x_257];
-    int const x_260 = pivot;
-    if ((x_259 <= x_260)) {
-      int const x_264 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-      int const x_266 = i_1;
-      param = x_266;
-      int const x_267 = j_1;
-      param_1 = x_267;
-      swap_i1_i1_(&(param), &(param_1), float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)), tint_symbol_4);
-    }
-    {
-      int const x_269 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_269) + as_type<uint>(1)));
-    }
-  }
-  int const x_271 = i_1;
-  i_1 = as_type<int>((as_type<uint>(x_271) + as_type<uint>(1)));
-  int const x_273 = i_1;
-  param_2 = x_273;
-  int const x_274 = *(h);
-  param_3 = x_274;
-  swap_i1_i1_(&(param_2), &(param_3), float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)), tint_symbol_4);
-  int const x_276 = i_1;
-  return x_276;
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_5) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_278 = top;
-  int const x_279 = as_type<int>((as_type<uint>(x_278) + as_type<uint>(1)));
-  top = x_279;
-  int const x_280 = l_1;
-  stack.arr[x_279] = x_280;
-  int const x_282 = top;
-  int const x_283 = as_type<int>((as_type<uint>(x_282) + as_type<uint>(1)));
-  top = x_283;
-  int const x_284 = h_1;
-  stack.arr[x_283] = x_284;
-  while (true) {
-    int const x_290 = top;
-    if ((x_290 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_293 = top;
-    top = as_type<int>((as_type<uint>(x_293) - as_type<uint>(1)));
-    int const x_296 = stack.arr[x_293];
-    h_1 = x_296;
-    int const x_297 = top;
-    top = as_type<int>((as_type<uint>(x_297) - as_type<uint>(1)));
-    int const x_300 = stack.arr[x_297];
-    l_1 = x_300;
-    int const x_301 = l_1;
-    param_4 = x_301;
-    int const x_302 = h_1;
-    param_5 = x_302;
-    int const x_303 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_5);
-    p = x_303;
-    int const x_304 = p;
-    int const x_306 = l_1;
-    if ((as_type<int>((as_type<uint>(x_304) - as_type<uint>(1))) > x_306)) {
-      int const x_310 = top;
-      int const x_311 = as_type<int>((as_type<uint>(x_310) + as_type<uint>(1)));
-      top = x_311;
-      int const x_312 = l_1;
-      stack.arr[x_311] = x_312;
-      int const x_314 = top;
-      int const x_315 = as_type<int>((as_type<uint>(x_314) + as_type<uint>(1)));
-      top = x_315;
-      int const x_316 = p;
-      stack.arr[x_315] = as_type<int>((as_type<uint>(x_316) - as_type<uint>(1)));
-    }
-    int const x_319 = p;
-    int const x_321 = h_1;
-    if ((as_type<int>((as_type<uint>(x_319) + as_type<uint>(1))) < x_321)) {
-      int const x_325 = top;
-      int const x_326 = as_type<int>((as_type<uint>(x_325) + as_type<uint>(1)));
-      top = x_326;
-      int const x_327 = p;
-      stack.arr[x_326] = as_type<int>((as_type<uint>(x_327) + as_type<uint>(1)));
-      int const x_330 = top;
-      int const x_331 = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
-      top = x_331;
-      int const x_332 = h_1;
-      stack.arr[x_331] = x_332;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_32, thread QuicksortObject* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  i_2 = 0;
-  while (true) {
-    int const x_89 = i_2;
-    if ((x_89 < 10)) {
-    } else {
-      break;
-    }
-    int const x_92 = i_2;
-    int const x_93 = i_2;
-    (*(tint_symbol_6)).numbers.arr[x_92] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_93)));
-    int const x_96 = i_2;
-    int const x_97 = i_2;
-    int const x_99 = (*(tint_symbol_6)).numbers.arr[x_97];
-    int const x_100 = i_2;
-    int const x_102 = (*(tint_symbol_6)).numbers.arr[x_100];
-    (*(tint_symbol_6)).numbers.arr[x_96] = as_type<int>((as_type<uint>(x_99) * as_type<uint>(x_102)));
-    {
-      int const x_105 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_6);
-  float4 const x_108 = *(tint_symbol_7);
-  float2 const x_111 = x_32.resolution;
-  uv = (float2(x_108.x, x_108.y) / x_111);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_114 = (*(tint_symbol_6)).numbers.arr[0];
-  float const x_117 = color.x;
-  color.x = (x_117 + float(x_114));
-  float const x_121 = uv.x;
-  if ((x_121 > 0.25f)) {
-    int const x_126 = (*(tint_symbol_6)).numbers.arr[1];
-    float const x_129 = color.x;
-    color.x = (x_129 + float(x_126));
-  }
-  float const x_133 = uv.x;
-  if ((x_133 > 0.5f)) {
-    int const x_138 = (*(tint_symbol_6)).numbers.arr[2];
-    float const x_141 = color.y;
-    color.y = (x_141 + float(x_138));
-  }
-  float const x_145 = uv.x;
-  if ((x_145 > 0.75f)) {
-    int const x_150 = (*(tint_symbol_6)).numbers.arr[3];
-    float const x_153 = color.z;
-    color.z = (x_153 + float(x_150));
-  }
-  int const x_157 = (*(tint_symbol_6)).numbers.arr[4];
-  float const x_160 = color.y;
-  color.y = (x_160 + float(x_157));
-  float const x_164 = uv.y;
-  if ((x_164 > 0.25f)) {
-    int const x_169 = (*(tint_symbol_6)).numbers.arr[5];
-    float const x_172 = color.x;
-    color.x = (x_172 + float(x_169));
-  }
-  float const x_176 = uv.y;
-  if ((x_176 > 0.5f)) {
-    int const x_181 = (*(tint_symbol_6)).numbers.arr[6];
-    float const x_184 = color.y;
-    color.y = (x_184 + float(x_181));
-  }
-  float const x_188 = uv.y;
-  if ((x_188 > 0.75f)) {
-    int const x_193 = (*(tint_symbol_6)).numbers.arr[7];
-    float const x_196 = color.z;
-    color.z = (x_196 + float(x_193));
-  }
-  int const x_200 = (*(tint_symbol_6)).numbers.arr[8];
-  float const x_203 = color.z;
-  color.z = (x_203 + float(x_200));
-  float const x_207 = uv.x;
-  float const x_209 = uv.y;
-  if ((fabs((x_207 - x_209)) < 0.25f)) {
-    int const x_216 = (*(tint_symbol_6)).numbers.arr[9];
-    float const x_219 = color.x;
-    color.x = (x_219 + float(x_216));
-  }
-  float3 const x_222 = color;
-  float3 const x_223 = normalize(x_222);
-  *(tint_symbol_8) = float4(x_223.x, x_223.y, x_223.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_32, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_32, tint_symbol_10, tint_symbol_9, tint_symbol_11);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_32 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread QuicksortObject tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_32, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.spvasm
deleted file mode 100644
index c09bea6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,547 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 379
-; Schema: 0
-               OpCapability Shader
-        %348 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_32 "x_32"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %x_228 "x_228"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_32 NonWritable
-               OpDecorate %x_32 DescriptorSet 0
-               OpDecorate %x_32 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %15 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_32 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-    %v3float = OpTypeVector %float 3
-%mat3v3float = OpTypeMatrix %v3float 3
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %mat3v3float
-         %34 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %52 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-        %102 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-        %103 = OpConstantComposite %mat3v3float %102 %102 %102
-        %115 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %123 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %195 = OpConstantNull %v2float
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %198 = OpConstantNull %v3float
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %236 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float
-        %366 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %23
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-      %x_228 = OpFunctionParameter %mat3v3float
-         %32 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %34
-         %36 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Private_int %obj %uint_0 %36
-         %40 = OpLoad %int %39
-               OpStore %temp %40
-         %42 = OpLoad %int %i
-         %44 = OpLoad %int %j
-         %45 = OpAccessChain %_ptr_Private_int %obj %uint_0 %44
-         %46 = OpLoad %int %45
-         %47 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
-               OpStore %47 %46
-         %49 = OpLoad %int %j
-         %50 = OpLoad %int %temp
-         %51 = OpAccessChain %_ptr_Private_int %obj %uint_0 %49
-               OpStore %51 %50
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %52
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %56 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %34
-        %i_1 = OpVariable %_ptr_Function_int Function %34
-        %j_1 = OpVariable %_ptr_Function_int Function %34
-      %param = OpVariable %_ptr_Function_int Function %34
-    %param_1 = OpVariable %_ptr_Function_int Function %34
-    %param_2 = OpVariable %_ptr_Function_int Function %34
-    %param_3 = OpVariable %_ptr_Function_int Function %34
-         %65 = OpLoad %int %h
-         %66 = OpAccessChain %_ptr_Private_int %obj %uint_0 %65
-         %67 = OpLoad %int %66
-               OpStore %pivot %67
-         %69 = OpLoad %int %l
-         %71 = OpISub %int %69 %int_1
-               OpStore %i_1 %71
-         %73 = OpLoad %int %l
-               OpStore %j_1 %73
-               OpBranch %74
-         %74 = OpLabel
-               OpLoopMerge %75 %76 None
-               OpBranch %77
-         %77 = OpLabel
-         %78 = OpLoad %int %j_1
-         %80 = OpLoad %int %h
-         %81 = OpISub %int %80 %int_1
-         %82 = OpSLessThanEqual %bool %78 %81
-               OpSelectionMerge %84 None
-               OpBranchConditional %82 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %75
-         %84 = OpLabel
-         %87 = OpLoad %int %j_1
-         %88 = OpAccessChain %_ptr_Private_int %obj %uint_0 %87
-         %89 = OpLoad %int %88
-         %90 = OpLoad %int %pivot
-         %91 = OpSLessThanEqual %bool %89 %90
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %92
-         %93 = OpLabel
-         %94 = OpLoad %int %i_1
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %i_1 %95
-         %96 = OpLoad %int %i_1
-               OpStore %param %96
-         %97 = OpLoad %int %j_1
-               OpStore %param_1 %97
-         %98 = OpFunctionCall %void %swap_i1_i1_ %param %param_1 %103
-               OpBranch %92
-         %92 = OpLabel
-               OpBranch %76
-         %76 = OpLabel
-        %104 = OpLoad %int %j_1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %j_1 %105
-               OpBranch %74
-         %75 = OpLabel
-        %106 = OpLoad %int %i_1
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %i_1 %107
-        %108 = OpLoad %int %i_1
-               OpStore %param_2 %108
-        %110 = OpLoad %int %h
-               OpStore %param_3 %110
-        %111 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3 %103
-        %114 = OpLoad %int %i_1
-               OpReturnValue %114
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %115
-        %117 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %34
-        %h_1 = OpVariable %_ptr_Function_int Function %34
-        %top = OpVariable %_ptr_Function_int Function %34
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %123
-          %p = OpVariable %_ptr_Function_int Function %34
-    %param_4 = OpVariable %_ptr_Function_int Function %34
-    %param_5 = OpVariable %_ptr_Function_int Function %34
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %130 = OpLoad %int %top
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %top %131
-        %132 = OpLoad %int %l_1
-        %133 = OpAccessChain %_ptr_Function_int %stack %131
-               OpStore %133 %132
-        %134 = OpLoad %int %top
-        %135 = OpIAdd %int %134 %int_1
-               OpStore %top %135
-        %136 = OpLoad %int %h_1
-        %137 = OpAccessChain %_ptr_Function_int %stack %135
-               OpStore %137 %136
-               OpBranch %138
-        %138 = OpLabel
-               OpLoopMerge %139 %140 None
-               OpBranch %141
-        %141 = OpLabel
-        %142 = OpLoad %int %top
-        %143 = OpSGreaterThanEqual %bool %142 %int_0
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %146
-        %145 = OpLabel
-               OpBranch %144
-        %146 = OpLabel
-               OpBranch %139
-        %144 = OpLabel
-        %147 = OpLoad %int %top
-        %148 = OpISub %int %147 %int_1
-               OpStore %top %148
-        %149 = OpAccessChain %_ptr_Function_int %stack %147
-        %150 = OpLoad %int %149
-               OpStore %h_1 %150
-        %151 = OpLoad %int %top
-        %152 = OpISub %int %151 %int_1
-               OpStore %top %152
-        %153 = OpAccessChain %_ptr_Function_int %stack %151
-        %154 = OpLoad %int %153
-               OpStore %l_1 %154
-        %155 = OpLoad %int %l_1
-               OpStore %param_4 %155
-        %156 = OpLoad %int %h_1
-               OpStore %param_5 %156
-        %157 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %157
-        %160 = OpLoad %int %p
-        %161 = OpLoad %int %l_1
-        %162 = OpISub %int %160 %int_1
-        %163 = OpSGreaterThan %bool %162 %161
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %164
-        %165 = OpLabel
-        %166 = OpLoad %int %top
-        %167 = OpIAdd %int %166 %int_1
-               OpStore %top %167
-        %168 = OpLoad %int %l_1
-        %169 = OpAccessChain %_ptr_Function_int %stack %167
-               OpStore %169 %168
-        %170 = OpLoad %int %top
-        %171 = OpIAdd %int %170 %int_1
-               OpStore %top %171
-        %172 = OpLoad %int %p
-        %173 = OpAccessChain %_ptr_Function_int %stack %171
-        %174 = OpISub %int %172 %int_1
-               OpStore %173 %174
-               OpBranch %164
-        %164 = OpLabel
-        %175 = OpLoad %int %p
-        %176 = OpLoad %int %h_1
-        %177 = OpIAdd %int %175 %int_1
-        %178 = OpSLessThan %bool %177 %176
-               OpSelectionMerge %179 None
-               OpBranchConditional %178 %180 %179
-        %180 = OpLabel
-        %181 = OpLoad %int %top
-        %182 = OpIAdd %int %181 %int_1
-               OpStore %top %182
-        %183 = OpLoad %int %p
-        %184 = OpAccessChain %_ptr_Function_int %stack %182
-        %185 = OpIAdd %int %183 %int_1
-               OpStore %184 %185
-        %186 = OpLoad %int %top
-        %187 = OpIAdd %int %186 %int_1
-               OpStore %top %187
-        %188 = OpLoad %int %h_1
-        %189 = OpAccessChain %_ptr_Function_int %stack %187
-               OpStore %189 %188
-               OpBranch %179
-        %179 = OpLabel
-               OpBranch %140
-        %140 = OpLabel
-               OpBranch %138
-        %139 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %115
-        %191 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %34
-         %uv = OpVariable %_ptr_Function_v2float Function %195
-      %color = OpVariable %_ptr_Function_v3float Function %198
-               OpStore %i_2 %int_0
-               OpBranch %199
-        %199 = OpLabel
-               OpLoopMerge %200 %201 None
-               OpBranch %202
-        %202 = OpLabel
-        %203 = OpLoad %int %i_2
-        %205 = OpSLessThan %bool %203 %int_10
-               OpSelectionMerge %206 None
-               OpBranchConditional %205 %207 %208
-        %207 = OpLabel
-               OpBranch %206
-        %208 = OpLabel
-               OpBranch %200
-        %206 = OpLabel
-        %209 = OpLoad %int %i_2
-        %210 = OpLoad %int %i_2
-        %211 = OpAccessChain %_ptr_Private_int %obj %uint_0 %209
-        %212 = OpISub %int %int_10 %210
-               OpStore %211 %212
-        %213 = OpLoad %int %i_2
-        %214 = OpLoad %int %i_2
-        %215 = OpAccessChain %_ptr_Private_int %obj %uint_0 %214
-        %216 = OpLoad %int %215
-        %217 = OpLoad %int %i_2
-        %218 = OpAccessChain %_ptr_Private_int %obj %uint_0 %217
-        %219 = OpLoad %int %218
-        %220 = OpAccessChain %_ptr_Private_int %obj %uint_0 %213
-        %221 = OpIMul %int %216 %219
-               OpStore %220 %221
-               OpBranch %201
-        %201 = OpLabel
-        %222 = OpLoad %int %i_2
-        %223 = OpIAdd %int %222 %int_1
-               OpStore %i_2 %223
-               OpBranch %199
-        %200 = OpLabel
-        %224 = OpFunctionCall %void %quicksort_
-        %225 = OpLoad %v4float %gl_FragCoord
-        %227 = OpAccessChain %_ptr_Uniform_v2float %x_32 %uint_0
-        %228 = OpLoad %v2float %227
-        %229 = OpCompositeExtract %float %225 0
-        %230 = OpCompositeExtract %float %225 1
-        %231 = OpCompositeConstruct %v2float %229 %230
-        %232 = OpFDiv %v2float %231 %228
-               OpStore %uv %232
-               OpStore %color %236
-        %237 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %238 = OpLoad %int %237
-        %240 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %241 = OpLoad %float %240
-        %242 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %243 = OpConvertSToF %float %238
-        %244 = OpFAdd %float %241 %243
-               OpStore %242 %244
-        %245 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %246 = OpLoad %float %245
-        %248 = OpFOrdGreaterThan %bool %246 %float_0_25
-               OpSelectionMerge %249 None
-               OpBranchConditional %248 %250 %249
-        %250 = OpLabel
-        %251 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %252 = OpLoad %int %251
-        %253 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %254 = OpLoad %float %253
-        %255 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %256 = OpConvertSToF %float %252
-        %257 = OpFAdd %float %254 %256
-               OpStore %255 %257
-               OpBranch %249
-        %249 = OpLabel
-        %258 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %259 = OpLoad %float %258
-        %261 = OpFOrdGreaterThan %bool %259 %float_0_5
-               OpSelectionMerge %262 None
-               OpBranchConditional %261 %263 %262
-        %263 = OpLabel
-        %265 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %266 = OpLoad %int %265
-        %268 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %269 = OpLoad %float %268
-        %270 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %271 = OpConvertSToF %float %266
-        %272 = OpFAdd %float %269 %271
-               OpStore %270 %272
-               OpBranch %262
-        %262 = OpLabel
-        %273 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %274 = OpLoad %float %273
-        %276 = OpFOrdGreaterThan %bool %274 %float_0_75
-               OpSelectionMerge %277 None
-               OpBranchConditional %276 %278 %277
-        %278 = OpLabel
-        %280 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %281 = OpLoad %int %280
-        %283 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %284 = OpLoad %float %283
-        %285 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %286 = OpConvertSToF %float %281
-        %287 = OpFAdd %float %284 %286
-               OpStore %285 %287
-               OpBranch %277
-        %277 = OpLabel
-        %289 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %290 = OpLoad %int %289
-        %291 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %292 = OpLoad %float %291
-        %293 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %294 = OpConvertSToF %float %290
-        %295 = OpFAdd %float %292 %294
-               OpStore %293 %295
-        %296 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %297 = OpLoad %float %296
-        %298 = OpFOrdGreaterThan %bool %297 %float_0_25
-               OpSelectionMerge %299 None
-               OpBranchConditional %298 %300 %299
-        %300 = OpLabel
-        %302 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %303 = OpLoad %int %302
-        %304 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %305 = OpLoad %float %304
-        %306 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %307 = OpConvertSToF %float %303
-        %308 = OpFAdd %float %305 %307
-               OpStore %306 %308
-               OpBranch %299
-        %299 = OpLabel
-        %309 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %310 = OpLoad %float %309
-        %311 = OpFOrdGreaterThan %bool %310 %float_0_5
-               OpSelectionMerge %312 None
-               OpBranchConditional %311 %313 %312
-        %313 = OpLabel
-        %315 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %316 = OpLoad %int %315
-        %317 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %318 = OpLoad %float %317
-        %319 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %320 = OpConvertSToF %float %316
-        %321 = OpFAdd %float %318 %320
-               OpStore %319 %321
-               OpBranch %312
-        %312 = OpLabel
-        %322 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %323 = OpLoad %float %322
-        %324 = OpFOrdGreaterThan %bool %323 %float_0_75
-               OpSelectionMerge %325 None
-               OpBranchConditional %324 %326 %325
-        %326 = OpLabel
-        %328 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %329 = OpLoad %int %328
-        %330 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %331 = OpLoad %float %330
-        %332 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %333 = OpConvertSToF %float %329
-        %334 = OpFAdd %float %331 %333
-               OpStore %332 %334
-               OpBranch %325
-        %325 = OpLabel
-        %336 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %337 = OpLoad %int %336
-        %338 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %339 = OpLoad %float %338
-        %340 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %341 = OpConvertSToF %float %337
-        %342 = OpFAdd %float %339 %341
-               OpStore %340 %342
-        %343 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %344 = OpLoad %float %343
-        %345 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %346 = OpLoad %float %345
-        %349 = OpFSub %float %344 %346
-        %347 = OpExtInst %float %348 FAbs %349
-        %350 = OpFOrdLessThan %bool %347 %float_0_25
-               OpSelectionMerge %351 None
-               OpBranchConditional %350 %352 %351
-        %352 = OpLabel
-        %353 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %354 = OpLoad %int %353
-        %355 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %356 = OpLoad %float %355
-        %357 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %358 = OpConvertSToF %float %354
-        %359 = OpFAdd %float %356 %358
-               OpStore %357 %359
-               OpBranch %351
-        %351 = OpLabel
-        %360 = OpLoad %v3float %color
-        %361 = OpExtInst %v3float %348 Normalize %360
-        %362 = OpCompositeExtract %float %361 0
-        %363 = OpCompositeExtract %float %361 1
-        %364 = OpCompositeExtract %float %361 2
-        %365 = OpCompositeConstruct %v4float %362 %363 %364 %float_1
-               OpStore %x_GLF_color %365
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %366
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %370 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %371 = OpFunctionCall %void %main_1
-        %372 = OpLoad %v4float %x_GLF_color
-        %373 = OpCompositeConstruct %main_out %372
-               OpReturnValue %373
-               OpFunctionEnd
-       %main = OpFunction %void None %115
-        %375 = OpLabel
-        %377 = OpLoad %v4float %gl_FragCoord_param_1
-        %376 = OpFunctionCall %main_out %main_inner %377
-        %378 = OpCompositeExtract %v4float %376 0
-               OpStore %x_GLF_color_1_1 %378
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.wgsl
deleted file mode 100644
index af97bb8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,256 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_32 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>, x_228 : mat3x3<f32>) {
-  var temp : i32;
-  let x_230 : i32 = *(i);
-  let x_232 : i32 = obj.numbers[x_230];
-  temp = x_232;
-  let x_233 : i32 = *(i);
-  let x_234 : i32 = *(j);
-  let x_236 : i32 = obj.numbers[x_234];
-  obj.numbers[x_233] = x_236;
-  let x_238 : i32 = *(j);
-  let x_239 : i32 = temp;
-  obj.numbers[x_238] = x_239;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_242 : i32 = *(h);
-  let x_244 : i32 = obj.numbers[x_242];
-  pivot = x_244;
-  let x_245 : i32 = *(l);
-  i_1 = (x_245 - 1);
-  let x_247 : i32 = *(l);
-  j_1 = x_247;
-  loop {
-    let x_252 : i32 = j_1;
-    let x_253 : i32 = *(h);
-    if ((x_252 <= (x_253 - 1))) {
-    } else {
-      break;
-    }
-    let x_257 : i32 = j_1;
-    let x_259 : i32 = obj.numbers[x_257];
-    let x_260 : i32 = pivot;
-    if ((x_259 <= x_260)) {
-      let x_264 : i32 = i_1;
-      i_1 = (x_264 + 1);
-      let x_266 : i32 = i_1;
-      param = x_266;
-      let x_267 : i32 = j_1;
-      param_1 = x_267;
-      swap_i1_i1_(&(param), &(param_1), mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
-    }
-
-    continuing {
-      let x_269 : i32 = j_1;
-      j_1 = (x_269 + 1);
-    }
-  }
-  let x_271 : i32 = i_1;
-  i_1 = (x_271 + 1);
-  let x_273 : i32 = i_1;
-  param_2 = x_273;
-  let x_274 : i32 = *(h);
-  param_3 = x_274;
-  swap_i1_i1_(&(param_2), &(param_3), mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0)));
-  let x_276 : i32 = i_1;
-  return x_276;
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_278 : i32 = top;
-  let x_279 : i32 = (x_278 + 1);
-  top = x_279;
-  let x_280 : i32 = l_1;
-  stack[x_279] = x_280;
-  let x_282 : i32 = top;
-  let x_283 : i32 = (x_282 + 1);
-  top = x_283;
-  let x_284 : i32 = h_1;
-  stack[x_283] = x_284;
-  loop {
-    let x_290 : i32 = top;
-    if ((x_290 >= 0)) {
-    } else {
-      break;
-    }
-    let x_293 : i32 = top;
-    top = (x_293 - 1);
-    let x_296 : i32 = stack[x_293];
-    h_1 = x_296;
-    let x_297 : i32 = top;
-    top = (x_297 - 1);
-    let x_300 : i32 = stack[x_297];
-    l_1 = x_300;
-    let x_301 : i32 = l_1;
-    param_4 = x_301;
-    let x_302 : i32 = h_1;
-    param_5 = x_302;
-    let x_303 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_303;
-    let x_304 : i32 = p;
-    let x_306 : i32 = l_1;
-    if (((x_304 - 1) > x_306)) {
-      let x_310 : i32 = top;
-      let x_311 : i32 = (x_310 + 1);
-      top = x_311;
-      let x_312 : i32 = l_1;
-      stack[x_311] = x_312;
-      let x_314 : i32 = top;
-      let x_315 : i32 = (x_314 + 1);
-      top = x_315;
-      let x_316 : i32 = p;
-      stack[x_315] = (x_316 - 1);
-    }
-    let x_319 : i32 = p;
-    let x_321 : i32 = h_1;
-    if (((x_319 + 1) < x_321)) {
-      let x_325 : i32 = top;
-      let x_326 : i32 = (x_325 + 1);
-      top = x_326;
-      let x_327 : i32 = p;
-      stack[x_326] = (x_327 + 1);
-      let x_330 : i32 = top;
-      let x_331 : i32 = (x_330 + 1);
-      top = x_331;
-      let x_332 : i32 = h_1;
-      stack[x_331] = x_332;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  i_2 = 0;
-  loop {
-    let x_89 : i32 = i_2;
-    if ((x_89 < 10)) {
-    } else {
-      break;
-    }
-    let x_92 : i32 = i_2;
-    let x_93 : i32 = i_2;
-    obj.numbers[x_92] = (10 - x_93);
-    let x_96 : i32 = i_2;
-    let x_97 : i32 = i_2;
-    let x_99 : i32 = obj.numbers[x_97];
-    let x_100 : i32 = i_2;
-    let x_102 : i32 = obj.numbers[x_100];
-    obj.numbers[x_96] = (x_99 * x_102);
-
-    continuing {
-      let x_105 : i32 = i_2;
-      i_2 = (x_105 + 1);
-    }
-  }
-  quicksort_();
-  let x_108 : vec4<f32> = gl_FragCoord;
-  let x_111 : vec2<f32> = x_32.resolution;
-  uv = (vec2<f32>(x_108.x, x_108.y) / x_111);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_114 : i32 = obj.numbers[0];
-  let x_117 : f32 = color.x;
-  color.x = (x_117 + f32(x_114));
-  let x_121 : f32 = uv.x;
-  if ((x_121 > 0.25)) {
-    let x_126 : i32 = obj.numbers[1];
-    let x_129 : f32 = color.x;
-    color.x = (x_129 + f32(x_126));
-  }
-  let x_133 : f32 = uv.x;
-  if ((x_133 > 0.5)) {
-    let x_138 : i32 = obj.numbers[2];
-    let x_141 : f32 = color.y;
-    color.y = (x_141 + f32(x_138));
-  }
-  let x_145 : f32 = uv.x;
-  if ((x_145 > 0.75)) {
-    let x_150 : i32 = obj.numbers[3];
-    let x_153 : f32 = color.z;
-    color.z = (x_153 + f32(x_150));
-  }
-  let x_157 : i32 = obj.numbers[4];
-  let x_160 : f32 = color.y;
-  color.y = (x_160 + f32(x_157));
-  let x_164 : f32 = uv.y;
-  if ((x_164 > 0.25)) {
-    let x_169 : i32 = obj.numbers[5];
-    let x_172 : f32 = color.x;
-    color.x = (x_172 + f32(x_169));
-  }
-  let x_176 : f32 = uv.y;
-  if ((x_176 > 0.5)) {
-    let x_181 : i32 = obj.numbers[6];
-    let x_184 : f32 = color.y;
-    color.y = (x_184 + f32(x_181));
-  }
-  let x_188 : f32 = uv.y;
-  if ((x_188 > 0.75)) {
-    let x_193 : i32 = obj.numbers[7];
-    let x_196 : f32 = color.z;
-    color.z = (x_196 + f32(x_193));
-  }
-  let x_200 : i32 = obj.numbers[8];
-  let x_203 : f32 = color.z;
-  color.z = (x_203 + f32(x_200));
-  let x_207 : f32 = uv.x;
-  let x_209 : f32 = uv.y;
-  if ((abs((x_207 - x_209)) < 0.25)) {
-    let x_216 : i32 = obj.numbers[9];
-    let x_219 : f32 = color.x;
-    color.x = (x_219 + f32(x_216));
-  }
-  let x_222 : vec3<f32> = color;
-  let x_223 : vec3<f32> = normalize(x_222);
-  x_GLF_color = vec4<f32>(x_223.x, x_223.y, x_223.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.hlsl
deleted file mode 100644
index d73c39b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,115 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 x_81[8] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  float4 x_82[8] = (float4[8])0;
-  float4 x_83[8] = (float4[8])0;
-  float4 x_84[8] = (float4[8])0;
-  float4 x_85[16] = (float4[16])0;
-  float4 x_95 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_95_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_98_phi = 0;
-  const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-  x_81 = tint_symbol_4;
-  const float4 x_86[8] = x_81;
-  const float4 x_87 = gl_FragCoord;
-  const float2 x_90 = asfloat(x_6[0].xy);
-  const float2 x_93 = floor(((float2(x_87.x, x_87.y) / x_90) * 32.0f));
-  x_95_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_98_phi = 0;
-  while (true) {
-    float4 x_143 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_99 = 0;
-    bool x_127_phi = false;
-    float4 x_96_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_95 = x_95_phi;
-    const int x_98 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_104 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_82 = x_86;
-    x_104 = x_82[x_98];
-    switch(0u) {
-      default: {
-        const float x_107 = x_93.x;
-        const float x_108 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        const float x_112 = x_93.y;
-        const float x_113 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-        break;
-      }
-    }
-    const bool x_127 = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_83 = tint_symbol_5;
-      const float x_131 = x_83[x_98].x;
-      const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_84 = tint_symbol_6;
-      const float x_134 = x_84[x_98].y;
-      const float4 x_135[8] = x_81;
-      const float4 tint_symbol_7[8] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-      x_81 = tint_symbol_7;
-      x_81 = x_135;
-      const float4 tint_symbol_8[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-      x_85 = tint_symbol_8;
-      x_143 = x_85[((((int(x_131) * int(x_134)) + (x_98 * 9)) + 11) % 16)];
-      x_96_phi = x_143;
-    }
-    const float4 x_96 = x_96_phi;
-    {
-      x_99 = (x_98 + 1);
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  x_GLF_color = x_95;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_9 = {x_GLF_color};
-  return tint_symbol_9;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.msl
deleted file mode 100644
index 2ab8863..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.msl
+++ /dev/null
@@ -1,121 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[8];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  tint_array_wrapper x_81 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  tint_array_wrapper x_82 = {};
-  tint_array_wrapper x_83 = {};
-  tint_array_wrapper x_84 = {};
-  tint_array_wrapper_1 x_85 = {};
-  float4 x_95 = 0.0f;
-  float4 x_95_phi = 0.0f;
-  int x_98_phi = 0;
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-  x_81 = tint_symbol_2;
-  tint_array_wrapper const x_86 = x_81;
-  float4 const x_87 = *(tint_symbol_8);
-  float2 const x_90 = x_6.resolution;
-  float2 const x_93 = floor(((float2(x_87.x, x_87.y) / x_90) * 32.0f));
-  x_95_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_98_phi = 0;
-  while (true) {
-    float4 x_143 = 0.0f;
-    int x_99 = 0;
-    bool x_127_phi = false;
-    float4 x_96_phi = 0.0f;
-    x_95 = x_95_phi;
-    int const x_98 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_104 = 0.0f;
-    x_82 = x_86;
-    x_104 = x_82.arr[x_98];
-    switch(0u) {
-      default: {
-        float const x_107 = x_93.x;
-        float const x_108 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        float const x_112 = x_93.y;
-        float const x_113 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-        break;
-      }
-    }
-    bool const x_127 = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      tint_array_wrapper const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_83 = tint_symbol_3;
-      float const x_131 = x_83.arr[x_98].x;
-      tint_array_wrapper const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_84 = tint_symbol_4;
-      float const x_134 = x_84.arr[x_98].y;
-      tint_array_wrapper const x_135 = x_81;
-      tint_array_wrapper const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-      x_81 = tint_symbol_5;
-      x_81 = x_135;
-      tint_array_wrapper_1 const tint_symbol_6 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      x_85 = tint_symbol_6;
-      x_143 = x_85.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_131)) * as_type<uint>(int(x_134))))) + as_type<uint>(as_type<int>((as_type<uint>(x_98) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      x_96_phi = x_143;
-    }
-    float4 const x_96 = x_96_phi;
-    {
-      x_99 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  *(tint_symbol_9) = x_95;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_10, tint_symbol_11);
-  main_out const tint_symbol_7 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_7;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.spvasm
deleted file mode 100644
index 7ae9ae4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,290 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 187
-; Schema: 0
-               OpCapability Shader
-         %67 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_81 "x_81"
-               OpName %x_82 "x_82"
-               OpName %x_83 "x_83"
-               OpName %x_84 "x_84"
-               OpName %x_85 "x_85"
-               OpName %x_95 "x_95"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_143 "x_143"
-               OpName %x_99 "x_99"
-               OpName %x_127_phi "x_127_phi"
-               OpName %x_96_phi "x_96_phi"
-               OpName %x_104 "x_104"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-    %float_0 = OpConstant %float 0
-         %23 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %24 = OpConstantComposite %_arr_v4float_uint_8 %23 %23 %23 %23 %23 %23 %23 %23
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %27 = OpConstantNull %_arr_v4float_uint_8
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %35 = OpConstantNull %_arr_v4float_uint_16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %42 = OpConstantNull %int
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-         %45 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-         %46 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-         %47 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-         %49 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-         %52 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-         %54 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-         %56 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-         %58 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-         %59 = OpConstantComposite %_arr_v4float_uint_8 %45 %46 %47 %49 %52 %54 %56 %58
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-         %76 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %87 = OpConstantNull %bool
-      %int_8 = OpConstant %int 8
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-        %140 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %141 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %142 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %143 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %144 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %145 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %146 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %147 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %148 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %149 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %150 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %152 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %153 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %154 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %155 = OpConstantComposite %_arr_v4float_uint_16 %140 %141 %142 %143 %144 %145 %146 %147 %140 %148 %149 %150 %151 %152 %153 %154
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %174 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_81 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_82 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_83 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_84 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_85 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %35
-       %x_95 = OpVariable %_ptr_Function_v4float Function %7
-   %x_95_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_98_phi = OpVariable %_ptr_Function_int Function %42
-      %x_143 = OpVariable %_ptr_Function_v4float Function %7
-       %x_99 = OpVariable %_ptr_Function_int Function %42
-  %x_127_phi = OpVariable %_ptr_Function_bool Function %87
-   %x_96_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_104 = OpVariable %_ptr_Function_v4float Function %7
-               OpStore %x_81 %24
-               OpStore %x_81 %59
-         %60 = OpLoad %_arr_v4float_uint_8 %x_81
-         %61 = OpLoad %v4float %gl_FragCoord
-         %64 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %65 = OpLoad %v2float %64
-         %68 = OpCompositeExtract %float %61 0
-         %69 = OpCompositeExtract %float %61 1
-         %70 = OpCompositeConstruct %v2float %68 %69
-         %71 = OpFDiv %v2float %70 %65
-         %73 = OpVectorTimesScalar %v2float %71 %float_32
-         %66 = OpExtInst %v2float %67 Floor %73
-               OpStore %x_95_phi %76
-               OpStore %x_98_phi %int_0
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %89 = OpLoad %v4float %x_95_phi
-               OpStore %x_95 %89
-         %90 = OpLoad %int %x_98_phi
-         %92 = OpSLessThan %bool %90 %int_8
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpBranch %93
-         %95 = OpLabel
-               OpBranch %79
-         %93 = OpLabel
-               OpStore %x_82 %60
-         %97 = OpAccessChain %_ptr_Function_v4float %x_82 %90
-         %98 = OpLoad %v4float %97
-               OpStore %x_104 %98
-               OpSelectionMerge %99 None
-               OpSwitch %uint_0 %100
-        %100 = OpLabel
-        %101 = OpCompositeExtract %float %66 0
-        %103 = OpAccessChain %_ptr_Function_float %x_104 %uint_0
-        %104 = OpLoad %float %103
-        %105 = OpFOrdLessThan %bool %101 %104
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %106
-        %107 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %106 = OpLabel
-        %109 = OpCompositeExtract %float %66 1
-        %111 = OpAccessChain %_ptr_Function_float %x_104 %uint_1
-        %112 = OpLoad %float %111
-        %113 = OpFOrdLessThan %bool %109 %112
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %114 = OpLabel
-        %117 = OpAccessChain %_ptr_Function_float %x_104 %uint_2
-        %118 = OpLoad %float %117
-        %119 = OpFAdd %float %104 %118
-        %120 = OpFOrdGreaterThan %bool %101 %119
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %121
-        %122 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %121 = OpLabel
-        %124 = OpAccessChain %_ptr_Function_float %x_104 %uint_3
-        %125 = OpLoad %float %124
-        %126 = OpFAdd %float %112 %125
-        %127 = OpFOrdGreaterThan %bool %109 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %128
-        %129 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %128 = OpLabel
-               OpStore %x_127_phi %true
-               OpBranch %99
-         %99 = OpLabel
-        %131 = OpLoad %bool %x_127_phi
-        %132 = OpLoad %v4float %x_95
-               OpStore %x_96_phi %132
-               OpSelectionMerge %133 None
-               OpBranchConditional %131 %134 %133
-        %134 = OpLabel
-               OpStore %x_83 %59
-        %135 = OpAccessChain %_ptr_Function_float %x_83 %90 %uint_0
-        %136 = OpLoad %float %135
-               OpStore %x_84 %59
-        %137 = OpAccessChain %_ptr_Function_float %x_84 %90 %uint_1
-        %138 = OpLoad %float %137
-        %139 = OpLoad %_arr_v4float_uint_8 %x_81
-               OpStore %x_81 %24
-               OpStore %x_81 %139
-               OpStore %x_85 %155
-        %156 = OpConvertFToS %int %136
-        %157 = OpConvertFToS %int %138
-        %158 = OpIMul %int %156 %157
-        %160 = OpIMul %int %90 %int_9
-        %161 = OpIAdd %int %158 %160
-        %163 = OpIAdd %int %161 %int_11
-        %165 = OpSMod %int %163 %int_16
-        %166 = OpAccessChain %_ptr_Function_v4float %x_85 %165
-        %167 = OpLoad %v4float %166
-               OpStore %x_143 %167
-        %168 = OpLoad %v4float %x_143
-               OpStore %x_96_phi %168
-               OpBranch %133
-        %133 = OpLabel
-        %169 = OpLoad %v4float %x_96_phi
-               OpBranch %80
-         %80 = OpLabel
-        %171 = OpIAdd %int %90 %int_1
-               OpStore %x_99 %171
-               OpStore %x_95_phi %169
-        %172 = OpLoad %int %x_99
-               OpStore %x_98_phi %172
-               OpBranch %78
-         %79 = OpLabel
-        %173 = OpLoad %v4float %x_95
-               OpStore %x_GLF_color %173
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %174
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %178 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %179 = OpFunctionCall %void %main_1
-        %180 = OpLoad %v4float %x_GLF_color
-        %181 = OpCompositeConstruct %main_out %180
-               OpReturnValue %181
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %183 = OpLabel
-        %185 = OpLoad %v4float %gl_FragCoord_param_1
-        %184 = OpFunctionCall %main_out %main_inner %185
-        %186 = OpCompositeExtract %v4float %184 0
-               OpStore %x_GLF_color_1_1 %186
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.wgsl
deleted file mode 100644
index 8f0982f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,103 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_81 : array<vec4<f32>, 8> = array<vec4<f32>, 8>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  var x_82 : array<vec4<f32>, 8>;
-  var x_83 : array<vec4<f32>, 8>;
-  var x_84 : array<vec4<f32>, 8>;
-  var x_85 : array<vec4<f32>, 16>;
-  var x_95 : vec4<f32>;
-  var x_95_phi : vec4<f32>;
-  var x_98_phi : i32;
-  x_81 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-  let x_86 : array<vec4<f32>, 8> = x_81;
-  let x_87 : vec4<f32> = gl_FragCoord;
-  let x_90 : vec2<f32> = x_6.resolution;
-  let x_93 : vec2<f32> = floor(((vec2<f32>(x_87.x, x_87.y) / x_90) * 32.0));
-  x_95_phi = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  x_98_phi = 0;
-  loop {
-    var x_143 : vec4<f32>;
-    var x_99 : i32;
-    var x_127_phi : bool;
-    var x_96_phi : vec4<f32>;
-    x_95 = x_95_phi;
-    let x_98 : i32 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    var x_104 : vec4<f32>;
-    x_82 = x_86;
-    x_104 = x_82[x_98];
-    switch(0u) {
-      default: {
-        let x_107 : f32 = x_93.x;
-        let x_108 : f32 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        let x_112 : f32 = x_93.y;
-        let x_113 : f32 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-      }
-    }
-    let x_127 : bool = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      x_83 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_131 : f32 = x_83[x_98].x;
-      x_84 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_134 : f32 = x_84[x_98].y;
-      let x_135 : array<vec4<f32>, 8> = x_81;
-      x_81 = array<vec4<f32>, 8>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-      x_81 = x_135;
-      x_85 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      x_143 = x_85[((((i32(x_131) * i32(x_134)) + (x_98 * 9)) + 11) % 16)];
-      x_96_phi = x_143;
-    }
-    let x_96 : vec4<f32> = x_96_phi;
-
-    continuing {
-      x_99 = (x_98 + 1);
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  x_GLF_color = x_95;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.hlsl
deleted file mode 100644
index d73c39b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,115 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 x_81[8] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  float4 x_82[8] = (float4[8])0;
-  float4 x_83[8] = (float4[8])0;
-  float4 x_84[8] = (float4[8])0;
-  float4 x_85[16] = (float4[16])0;
-  float4 x_95 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_95_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_98_phi = 0;
-  const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-  x_81 = tint_symbol_4;
-  const float4 x_86[8] = x_81;
-  const float4 x_87 = gl_FragCoord;
-  const float2 x_90 = asfloat(x_6[0].xy);
-  const float2 x_93 = floor(((float2(x_87.x, x_87.y) / x_90) * 32.0f));
-  x_95_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_98_phi = 0;
-  while (true) {
-    float4 x_143 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_99 = 0;
-    bool x_127_phi = false;
-    float4 x_96_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_95 = x_95_phi;
-    const int x_98 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_104 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_82 = x_86;
-    x_104 = x_82[x_98];
-    switch(0u) {
-      default: {
-        const float x_107 = x_93.x;
-        const float x_108 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        const float x_112 = x_93.y;
-        const float x_113 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-        break;
-      }
-    }
-    const bool x_127 = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_83 = tint_symbol_5;
-      const float x_131 = x_83[x_98].x;
-      const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_84 = tint_symbol_6;
-      const float x_134 = x_84[x_98].y;
-      const float4 x_135[8] = x_81;
-      const float4 tint_symbol_7[8] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-      x_81 = tint_symbol_7;
-      x_81 = x_135;
-      const float4 tint_symbol_8[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-      x_85 = tint_symbol_8;
-      x_143 = x_85[((((int(x_131) * int(x_134)) + (x_98 * 9)) + 11) % 16)];
-      x_96_phi = x_143;
-    }
-    const float4 x_96 = x_96_phi;
-    {
-      x_99 = (x_98 + 1);
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  x_GLF_color = x_95;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_9 = {x_GLF_color};
-  return tint_symbol_9;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.msl
deleted file mode 100644
index 2ab8863..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.msl
+++ /dev/null
@@ -1,121 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[8];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  tint_array_wrapper x_81 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  tint_array_wrapper x_82 = {};
-  tint_array_wrapper x_83 = {};
-  tint_array_wrapper x_84 = {};
-  tint_array_wrapper_1 x_85 = {};
-  float4 x_95 = 0.0f;
-  float4 x_95_phi = 0.0f;
-  int x_98_phi = 0;
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-  x_81 = tint_symbol_2;
-  tint_array_wrapper const x_86 = x_81;
-  float4 const x_87 = *(tint_symbol_8);
-  float2 const x_90 = x_6.resolution;
-  float2 const x_93 = floor(((float2(x_87.x, x_87.y) / x_90) * 32.0f));
-  x_95_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_98_phi = 0;
-  while (true) {
-    float4 x_143 = 0.0f;
-    int x_99 = 0;
-    bool x_127_phi = false;
-    float4 x_96_phi = 0.0f;
-    x_95 = x_95_phi;
-    int const x_98 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_104 = 0.0f;
-    x_82 = x_86;
-    x_104 = x_82.arr[x_98];
-    switch(0u) {
-      default: {
-        float const x_107 = x_93.x;
-        float const x_108 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        float const x_112 = x_93.y;
-        float const x_113 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-        break;
-      }
-    }
-    bool const x_127 = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      tint_array_wrapper const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_83 = tint_symbol_3;
-      float const x_131 = x_83.arr[x_98].x;
-      tint_array_wrapper const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_84 = tint_symbol_4;
-      float const x_134 = x_84.arr[x_98].y;
-      tint_array_wrapper const x_135 = x_81;
-      tint_array_wrapper const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-      x_81 = tint_symbol_5;
-      x_81 = x_135;
-      tint_array_wrapper_1 const tint_symbol_6 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      x_85 = tint_symbol_6;
-      x_143 = x_85.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_131)) * as_type<uint>(int(x_134))))) + as_type<uint>(as_type<int>((as_type<uint>(x_98) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      x_96_phi = x_143;
-    }
-    float4 const x_96 = x_96_phi;
-    {
-      x_99 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  *(tint_symbol_9) = x_95;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_10, tint_symbol_11);
-  main_out const tint_symbol_7 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_7;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.spvasm
deleted file mode 100644
index 7ae9ae4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,290 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 187
-; Schema: 0
-               OpCapability Shader
-         %67 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_81 "x_81"
-               OpName %x_82 "x_82"
-               OpName %x_83 "x_83"
-               OpName %x_84 "x_84"
-               OpName %x_85 "x_85"
-               OpName %x_95 "x_95"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_143 "x_143"
-               OpName %x_99 "x_99"
-               OpName %x_127_phi "x_127_phi"
-               OpName %x_96_phi "x_96_phi"
-               OpName %x_104 "x_104"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-    %float_0 = OpConstant %float 0
-         %23 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %24 = OpConstantComposite %_arr_v4float_uint_8 %23 %23 %23 %23 %23 %23 %23 %23
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %27 = OpConstantNull %_arr_v4float_uint_8
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %35 = OpConstantNull %_arr_v4float_uint_16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %42 = OpConstantNull %int
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-         %45 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-         %46 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-         %47 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-         %49 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-         %52 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-         %54 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-         %56 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-         %58 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-         %59 = OpConstantComposite %_arr_v4float_uint_8 %45 %46 %47 %49 %52 %54 %56 %58
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-         %76 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %87 = OpConstantNull %bool
-      %int_8 = OpConstant %int 8
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-        %140 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %141 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %142 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %143 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %144 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %145 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %146 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %147 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %148 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %149 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %150 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %151 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %152 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %153 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %154 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %155 = OpConstantComposite %_arr_v4float_uint_16 %140 %141 %142 %143 %144 %145 %146 %147 %140 %148 %149 %150 %151 %152 %153 %154
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %174 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_81 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_82 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_83 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_84 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_85 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %35
-       %x_95 = OpVariable %_ptr_Function_v4float Function %7
-   %x_95_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_98_phi = OpVariable %_ptr_Function_int Function %42
-      %x_143 = OpVariable %_ptr_Function_v4float Function %7
-       %x_99 = OpVariable %_ptr_Function_int Function %42
-  %x_127_phi = OpVariable %_ptr_Function_bool Function %87
-   %x_96_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_104 = OpVariable %_ptr_Function_v4float Function %7
-               OpStore %x_81 %24
-               OpStore %x_81 %59
-         %60 = OpLoad %_arr_v4float_uint_8 %x_81
-         %61 = OpLoad %v4float %gl_FragCoord
-         %64 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %65 = OpLoad %v2float %64
-         %68 = OpCompositeExtract %float %61 0
-         %69 = OpCompositeExtract %float %61 1
-         %70 = OpCompositeConstruct %v2float %68 %69
-         %71 = OpFDiv %v2float %70 %65
-         %73 = OpVectorTimesScalar %v2float %71 %float_32
-         %66 = OpExtInst %v2float %67 Floor %73
-               OpStore %x_95_phi %76
-               OpStore %x_98_phi %int_0
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %89 = OpLoad %v4float %x_95_phi
-               OpStore %x_95 %89
-         %90 = OpLoad %int %x_98_phi
-         %92 = OpSLessThan %bool %90 %int_8
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpBranch %93
-         %95 = OpLabel
-               OpBranch %79
-         %93 = OpLabel
-               OpStore %x_82 %60
-         %97 = OpAccessChain %_ptr_Function_v4float %x_82 %90
-         %98 = OpLoad %v4float %97
-               OpStore %x_104 %98
-               OpSelectionMerge %99 None
-               OpSwitch %uint_0 %100
-        %100 = OpLabel
-        %101 = OpCompositeExtract %float %66 0
-        %103 = OpAccessChain %_ptr_Function_float %x_104 %uint_0
-        %104 = OpLoad %float %103
-        %105 = OpFOrdLessThan %bool %101 %104
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %106
-        %107 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %106 = OpLabel
-        %109 = OpCompositeExtract %float %66 1
-        %111 = OpAccessChain %_ptr_Function_float %x_104 %uint_1
-        %112 = OpLoad %float %111
-        %113 = OpFOrdLessThan %bool %109 %112
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %114 = OpLabel
-        %117 = OpAccessChain %_ptr_Function_float %x_104 %uint_2
-        %118 = OpLoad %float %117
-        %119 = OpFAdd %float %104 %118
-        %120 = OpFOrdGreaterThan %bool %101 %119
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %121
-        %122 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %121 = OpLabel
-        %124 = OpAccessChain %_ptr_Function_float %x_104 %uint_3
-        %125 = OpLoad %float %124
-        %126 = OpFAdd %float %112 %125
-        %127 = OpFOrdGreaterThan %bool %109 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %128
-        %129 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %128 = OpLabel
-               OpStore %x_127_phi %true
-               OpBranch %99
-         %99 = OpLabel
-        %131 = OpLoad %bool %x_127_phi
-        %132 = OpLoad %v4float %x_95
-               OpStore %x_96_phi %132
-               OpSelectionMerge %133 None
-               OpBranchConditional %131 %134 %133
-        %134 = OpLabel
-               OpStore %x_83 %59
-        %135 = OpAccessChain %_ptr_Function_float %x_83 %90 %uint_0
-        %136 = OpLoad %float %135
-               OpStore %x_84 %59
-        %137 = OpAccessChain %_ptr_Function_float %x_84 %90 %uint_1
-        %138 = OpLoad %float %137
-        %139 = OpLoad %_arr_v4float_uint_8 %x_81
-               OpStore %x_81 %24
-               OpStore %x_81 %139
-               OpStore %x_85 %155
-        %156 = OpConvertFToS %int %136
-        %157 = OpConvertFToS %int %138
-        %158 = OpIMul %int %156 %157
-        %160 = OpIMul %int %90 %int_9
-        %161 = OpIAdd %int %158 %160
-        %163 = OpIAdd %int %161 %int_11
-        %165 = OpSMod %int %163 %int_16
-        %166 = OpAccessChain %_ptr_Function_v4float %x_85 %165
-        %167 = OpLoad %v4float %166
-               OpStore %x_143 %167
-        %168 = OpLoad %v4float %x_143
-               OpStore %x_96_phi %168
-               OpBranch %133
-        %133 = OpLabel
-        %169 = OpLoad %v4float %x_96_phi
-               OpBranch %80
-         %80 = OpLabel
-        %171 = OpIAdd %int %90 %int_1
-               OpStore %x_99 %171
-               OpStore %x_95_phi %169
-        %172 = OpLoad %int %x_99
-               OpStore %x_98_phi %172
-               OpBranch %78
-         %79 = OpLabel
-        %173 = OpLoad %v4float %x_95
-               OpStore %x_GLF_color %173
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %174
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %178 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %179 = OpFunctionCall %void %main_1
-        %180 = OpLoad %v4float %x_GLF_color
-        %181 = OpCompositeConstruct %main_out %180
-               OpReturnValue %181
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %183 = OpLabel
-        %185 = OpLoad %v4float %gl_FragCoord_param_1
-        %184 = OpFunctionCall %main_out %main_inner %185
-        %186 = OpCompositeExtract %v4float %184 0
-               OpStore %x_GLF_color_1_1 %186
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.wgsl
deleted file mode 100644
index 8f0982f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,103 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_81 : array<vec4<f32>, 8> = array<vec4<f32>, 8>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  var x_82 : array<vec4<f32>, 8>;
-  var x_83 : array<vec4<f32>, 8>;
-  var x_84 : array<vec4<f32>, 8>;
-  var x_85 : array<vec4<f32>, 16>;
-  var x_95 : vec4<f32>;
-  var x_95_phi : vec4<f32>;
-  var x_98_phi : i32;
-  x_81 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-  let x_86 : array<vec4<f32>, 8> = x_81;
-  let x_87 : vec4<f32> = gl_FragCoord;
-  let x_90 : vec2<f32> = x_6.resolution;
-  let x_93 : vec2<f32> = floor(((vec2<f32>(x_87.x, x_87.y) / x_90) * 32.0));
-  x_95_phi = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  x_98_phi = 0;
-  loop {
-    var x_143 : vec4<f32>;
-    var x_99 : i32;
-    var x_127_phi : bool;
-    var x_96_phi : vec4<f32>;
-    x_95 = x_95_phi;
-    let x_98 : i32 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    var x_104 : vec4<f32>;
-    x_82 = x_86;
-    x_104 = x_82[x_98];
-    switch(0u) {
-      default: {
-        let x_107 : f32 = x_93.x;
-        let x_108 : f32 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        let x_112 : f32 = x_93.y;
-        let x_113 : f32 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-      }
-    }
-    let x_127 : bool = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      x_83 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_131 : f32 = x_83[x_98].x;
-      x_84 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_134 : f32 = x_84[x_98].y;
-      let x_135 : array<vec4<f32>, 8> = x_81;
-      x_81 = array<vec4<f32>, 8>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-      x_81 = x_135;
-      x_85 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      x_143 = x_85[((((i32(x_131) * i32(x_134)) + (x_98 * 9)) + 11) % 16)];
-      x_96_phi = x_143;
-    }
-    let x_96 : vec4<f32> = x_96_phi;
-
-    continuing {
-      x_99 = (x_98 + 1);
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  x_GLF_color = x_95;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.hlsl
deleted file mode 100644
index 2f6304b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,111 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 x_81[8] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  float4 x_82[8] = (float4[8])0;
-  float4 x_83[8] = (float4[8])0;
-  float4 x_84[8] = (float4[8])0;
-  float4 x_85[16] = (float4[16])0;
-  float4 x_95 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_95_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_98_phi = 0;
-  const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-  x_81 = tint_symbol_4;
-  const float4 x_86[8] = x_81;
-  const float4 x_87 = gl_FragCoord;
-  const float2 x_90 = asfloat(x_6[0].xy);
-  const float2 x_93 = floor(((float2(x_87.x, x_87.y) / x_90) * 32.0f));
-  x_95_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_98_phi = 0;
-  while (true) {
-    float4 x_142 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_99 = 0;
-    bool x_127_phi = false;
-    float4 x_96_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_95 = x_95_phi;
-    const int x_98 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_104 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_82 = x_86;
-    x_104 = x_82[x_98];
-    switch(0u) {
-      default: {
-        const float x_107 = x_93.x;
-        const float x_108 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        const float x_112 = x_93.y;
-        const float x_113 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-        break;
-      }
-    }
-    const bool x_127 = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_83 = tint_symbol_5;
-      const float x_131 = x_83[x_98].x;
-      const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_84 = tint_symbol_6;
-      const float x_134 = x_84[x_98].y;
-      const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-      x_85 = tint_symbol_7;
-      x_142 = x_85[((((int(x_131) * int(x_134)) + (x_98 * 9)) + 11) % 16)];
-      x_96_phi = x_142;
-    }
-    const float4 x_96 = x_96_phi;
-    {
-      x_99 = (x_98 + 1);
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  x_GLF_color = x_95;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.msl
deleted file mode 100644
index c762439..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.msl
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[8];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  tint_array_wrapper x_81 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  tint_array_wrapper x_82 = {};
-  tint_array_wrapper x_83 = {};
-  tint_array_wrapper x_84 = {};
-  tint_array_wrapper_1 x_85 = {};
-  float4 x_95 = 0.0f;
-  float4 x_95_phi = 0.0f;
-  int x_98_phi = 0;
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-  x_81 = tint_symbol_2;
-  tint_array_wrapper const x_86 = x_81;
-  float4 const x_87 = *(tint_symbol_7);
-  float2 const x_90 = x_6.resolution;
-  float2 const x_93 = floor(((float2(x_87.x, x_87.y) / x_90) * 32.0f));
-  x_95_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_98_phi = 0;
-  while (true) {
-    float4 x_142 = 0.0f;
-    int x_99 = 0;
-    bool x_127_phi = false;
-    float4 x_96_phi = 0.0f;
-    x_95 = x_95_phi;
-    int const x_98 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_104 = 0.0f;
-    x_82 = x_86;
-    x_104 = x_82.arr[x_98];
-    switch(0u) {
-      default: {
-        float const x_107 = x_93.x;
-        float const x_108 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        float const x_112 = x_93.y;
-        float const x_113 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-        break;
-      }
-    }
-    bool const x_127 = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      tint_array_wrapper const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_83 = tint_symbol_3;
-      float const x_131 = x_83.arr[x_98].x;
-      tint_array_wrapper const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_84 = tint_symbol_4;
-      float const x_134 = x_84.arr[x_98].y;
-      tint_array_wrapper_1 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      x_85 = tint_symbol_5;
-      x_142 = x_85.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_131)) * as_type<uint>(int(x_134))))) + as_type<uint>(as_type<int>((as_type<uint>(x_98) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      x_96_phi = x_142;
-    }
-    float4 const x_96 = x_96_phi;
-    {
-      x_99 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  *(tint_symbol_8) = x_95;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.spvasm
deleted file mode 100644
index f0b1639..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,287 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 186
-; Schema: 0
-               OpCapability Shader
-         %67 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_81 "x_81"
-               OpName %x_82 "x_82"
-               OpName %x_83 "x_83"
-               OpName %x_84 "x_84"
-               OpName %x_85 "x_85"
-               OpName %x_95 "x_95"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_142 "x_142"
-               OpName %x_99 "x_99"
-               OpName %x_127_phi "x_127_phi"
-               OpName %x_96_phi "x_96_phi"
-               OpName %x_104 "x_104"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-    %float_0 = OpConstant %float 0
-         %23 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %24 = OpConstantComposite %_arr_v4float_uint_8 %23 %23 %23 %23 %23 %23 %23 %23
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %27 = OpConstantNull %_arr_v4float_uint_8
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %35 = OpConstantNull %_arr_v4float_uint_16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %42 = OpConstantNull %int
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-         %45 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-         %46 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-         %47 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-         %49 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-         %52 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-         %54 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-         %56 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-         %58 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-         %59 = OpConstantComposite %_arr_v4float_uint_8 %45 %46 %47 %49 %52 %54 %56 %58
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-         %76 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %87 = OpConstantNull %bool
-      %int_8 = OpConstant %int 8
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-        %139 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %140 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %141 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %142 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %143 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %144 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %145 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %146 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %147 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %148 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %149 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %150 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %151 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %152 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %153 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %154 = OpConstantComposite %_arr_v4float_uint_16 %139 %140 %141 %142 %143 %144 %145 %146 %139 %147 %148 %149 %150 %151 %152 %153
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %173 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_81 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_82 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_83 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_84 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_85 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %35
-       %x_95 = OpVariable %_ptr_Function_v4float Function %7
-   %x_95_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_98_phi = OpVariable %_ptr_Function_int Function %42
-      %x_142 = OpVariable %_ptr_Function_v4float Function %7
-       %x_99 = OpVariable %_ptr_Function_int Function %42
-  %x_127_phi = OpVariable %_ptr_Function_bool Function %87
-   %x_96_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_104 = OpVariable %_ptr_Function_v4float Function %7
-               OpStore %x_81 %24
-               OpStore %x_81 %59
-         %60 = OpLoad %_arr_v4float_uint_8 %x_81
-         %61 = OpLoad %v4float %gl_FragCoord
-         %64 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %65 = OpLoad %v2float %64
-         %68 = OpCompositeExtract %float %61 0
-         %69 = OpCompositeExtract %float %61 1
-         %70 = OpCompositeConstruct %v2float %68 %69
-         %71 = OpFDiv %v2float %70 %65
-         %73 = OpVectorTimesScalar %v2float %71 %float_32
-         %66 = OpExtInst %v2float %67 Floor %73
-               OpStore %x_95_phi %76
-               OpStore %x_98_phi %int_0
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %89 = OpLoad %v4float %x_95_phi
-               OpStore %x_95 %89
-         %90 = OpLoad %int %x_98_phi
-         %92 = OpSLessThan %bool %90 %int_8
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpBranch %93
-         %95 = OpLabel
-               OpBranch %79
-         %93 = OpLabel
-               OpStore %x_82 %60
-         %97 = OpAccessChain %_ptr_Function_v4float %x_82 %90
-         %98 = OpLoad %v4float %97
-               OpStore %x_104 %98
-               OpSelectionMerge %99 None
-               OpSwitch %uint_0 %100
-        %100 = OpLabel
-        %101 = OpCompositeExtract %float %66 0
-        %103 = OpAccessChain %_ptr_Function_float %x_104 %uint_0
-        %104 = OpLoad %float %103
-        %105 = OpFOrdLessThan %bool %101 %104
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %106
-        %107 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %106 = OpLabel
-        %109 = OpCompositeExtract %float %66 1
-        %111 = OpAccessChain %_ptr_Function_float %x_104 %uint_1
-        %112 = OpLoad %float %111
-        %113 = OpFOrdLessThan %bool %109 %112
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %114 = OpLabel
-        %117 = OpAccessChain %_ptr_Function_float %x_104 %uint_2
-        %118 = OpLoad %float %117
-        %119 = OpFAdd %float %104 %118
-        %120 = OpFOrdGreaterThan %bool %101 %119
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %121
-        %122 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %121 = OpLabel
-        %124 = OpAccessChain %_ptr_Function_float %x_104 %uint_3
-        %125 = OpLoad %float %124
-        %126 = OpFAdd %float %112 %125
-        %127 = OpFOrdGreaterThan %bool %109 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %128
-        %129 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %128 = OpLabel
-               OpStore %x_127_phi %true
-               OpBranch %99
-         %99 = OpLabel
-        %131 = OpLoad %bool %x_127_phi
-        %132 = OpLoad %v4float %x_95
-               OpStore %x_96_phi %132
-               OpSelectionMerge %133 None
-               OpBranchConditional %131 %134 %133
-        %134 = OpLabel
-               OpStore %x_83 %59
-        %135 = OpAccessChain %_ptr_Function_float %x_83 %90 %uint_0
-        %136 = OpLoad %float %135
-               OpStore %x_84 %59
-        %137 = OpAccessChain %_ptr_Function_float %x_84 %90 %uint_1
-        %138 = OpLoad %float %137
-               OpStore %x_85 %154
-        %155 = OpConvertFToS %int %136
-        %156 = OpConvertFToS %int %138
-        %157 = OpIMul %int %155 %156
-        %159 = OpIMul %int %90 %int_9
-        %160 = OpIAdd %int %157 %159
-        %162 = OpIAdd %int %160 %int_11
-        %164 = OpSMod %int %162 %int_16
-        %165 = OpAccessChain %_ptr_Function_v4float %x_85 %164
-        %166 = OpLoad %v4float %165
-               OpStore %x_142 %166
-        %167 = OpLoad %v4float %x_142
-               OpStore %x_96_phi %167
-               OpBranch %133
-        %133 = OpLabel
-        %168 = OpLoad %v4float %x_96_phi
-               OpBranch %80
-         %80 = OpLabel
-        %170 = OpIAdd %int %90 %int_1
-               OpStore %x_99 %170
-               OpStore %x_95_phi %168
-        %171 = OpLoad %int %x_99
-               OpStore %x_98_phi %171
-               OpBranch %78
-         %79 = OpLabel
-        %172 = OpLoad %v4float %x_95
-               OpStore %x_GLF_color %172
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %173
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %177 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %178 = OpFunctionCall %void %main_1
-        %179 = OpLoad %v4float %x_GLF_color
-        %180 = OpCompositeConstruct %main_out %179
-               OpReturnValue %180
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %182 = OpLabel
-        %184 = OpLoad %v4float %gl_FragCoord_param_1
-        %183 = OpFunctionCall %main_out %main_inner %184
-        %185 = OpCompositeExtract %v4float %183 0
-               OpStore %x_GLF_color_1_1 %185
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.wgsl
deleted file mode 100644
index 1bf1c72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,100 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_81 : array<vec4<f32>, 8> = array<vec4<f32>, 8>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  var x_82 : array<vec4<f32>, 8>;
-  var x_83 : array<vec4<f32>, 8>;
-  var x_84 : array<vec4<f32>, 8>;
-  var x_85 : array<vec4<f32>, 16>;
-  var x_95 : vec4<f32>;
-  var x_95_phi : vec4<f32>;
-  var x_98_phi : i32;
-  x_81 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-  let x_86 : array<vec4<f32>, 8> = x_81;
-  let x_87 : vec4<f32> = gl_FragCoord;
-  let x_90 : vec2<f32> = x_6.resolution;
-  let x_93 : vec2<f32> = floor(((vec2<f32>(x_87.x, x_87.y) / x_90) * 32.0));
-  x_95_phi = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  x_98_phi = 0;
-  loop {
-    var x_142 : vec4<f32>;
-    var x_99 : i32;
-    var x_127_phi : bool;
-    var x_96_phi : vec4<f32>;
-    x_95 = x_95_phi;
-    let x_98 : i32 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    var x_104 : vec4<f32>;
-    x_82 = x_86;
-    x_104 = x_82[x_98];
-    switch(0u) {
-      default: {
-        let x_107 : f32 = x_93.x;
-        let x_108 : f32 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        let x_112 : f32 = x_93.y;
-        let x_113 : f32 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-      }
-    }
-    let x_127 : bool = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      x_83 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_131 : f32 = x_83[x_98].x;
-      x_84 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_134 : f32 = x_84[x_98].y;
-      x_85 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      x_142 = x_85[((((i32(x_131) * i32(x_134)) + (x_98 * 9)) + 11) % 16)];
-      x_96_phi = x_142;
-    }
-    let x_96 : vec4<f32> = x_96_phi;
-
-    continuing {
-      x_99 = (x_98 + 1);
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  x_GLF_color = x_95;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.hlsl
deleted file mode 100644
index 2f6304b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,111 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 x_81[8] = {float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  float4 x_82[8] = (float4[8])0;
-  float4 x_83[8] = (float4[8])0;
-  float4 x_84[8] = (float4[8])0;
-  float4 x_85[16] = (float4[16])0;
-  float4 x_95 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_95_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int x_98_phi = 0;
-  const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-  x_81 = tint_symbol_4;
-  const float4 x_86[8] = x_81;
-  const float4 x_87 = gl_FragCoord;
-  const float2 x_90 = asfloat(x_6[0].xy);
-  const float2 x_93 = floor(((float2(x_87.x, x_87.y) / x_90) * 32.0f));
-  x_95_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_98_phi = 0;
-  while (true) {
-    float4 x_142 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    int x_99 = 0;
-    bool x_127_phi = false;
-    float4 x_96_phi = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_95 = x_95_phi;
-    const int x_98 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_104 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-    x_82 = x_86;
-    x_104 = x_82[x_98];
-    switch(0u) {
-      default: {
-        const float x_107 = x_93.x;
-        const float x_108 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        const float x_112 = x_93.y;
-        const float x_113 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-        break;
-      }
-    }
-    const bool x_127 = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_83 = tint_symbol_5;
-      const float x_131 = x_83[x_98].x;
-      const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      x_84 = tint_symbol_6;
-      const float x_134 = x_84[x_98].y;
-      const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-      x_85 = tint_symbol_7;
-      x_142 = x_85[((((int(x_131) * int(x_134)) + (x_98 * 9)) + 11) % 16)];
-      x_96_phi = x_142;
-    }
-    const float4 x_96 = x_96_phi;
-    {
-      x_99 = (x_98 + 1);
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  x_GLF_color = x_95;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.msl
deleted file mode 100644
index c762439..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.msl
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[8];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  tint_array_wrapper x_81 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
-  tint_array_wrapper x_82 = {};
-  tint_array_wrapper x_83 = {};
-  tint_array_wrapper x_84 = {};
-  tint_array_wrapper_1 x_85 = {};
-  float4 x_95 = 0.0f;
-  float4 x_95_phi = 0.0f;
-  int x_98_phi = 0;
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-  x_81 = tint_symbol_2;
-  tint_array_wrapper const x_86 = x_81;
-  float4 const x_87 = *(tint_symbol_7);
-  float2 const x_90 = x_6.resolution;
-  float2 const x_93 = floor(((float2(x_87.x, x_87.y) / x_90) * 32.0f));
-  x_95_phi = float4(0.5f, 0.5f, 1.0f, 1.0f);
-  x_98_phi = 0;
-  while (true) {
-    float4 x_142 = 0.0f;
-    int x_99 = 0;
-    bool x_127_phi = false;
-    float4 x_96_phi = 0.0f;
-    x_95 = x_95_phi;
-    int const x_98 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    float4 x_104 = 0.0f;
-    x_82 = x_86;
-    x_104 = x_82.arr[x_98];
-    switch(0u) {
-      default: {
-        float const x_107 = x_93.x;
-        float const x_108 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        float const x_112 = x_93.y;
-        float const x_113 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-        break;
-      }
-    }
-    bool const x_127 = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      tint_array_wrapper const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_83 = tint_symbol_3;
-      float const x_131 = x_83.arr[x_98].x;
-      tint_array_wrapper const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      x_84 = tint_symbol_4;
-      float const x_134 = x_84.arr[x_98].y;
-      tint_array_wrapper_1 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      x_85 = tint_symbol_5;
-      x_142 = x_85.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_131)) * as_type<uint>(int(x_134))))) + as_type<uint>(as_type<int>((as_type<uint>(x_98) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      x_96_phi = x_142;
-    }
-    float4 const x_96 = x_96_phi;
-    {
-      x_99 = as_type<int>((as_type<uint>(x_98) + as_type<uint>(1)));
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  *(tint_symbol_8) = x_95;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_9) = gl_FragCoord_param;
-  main_1(x_6, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.spvasm
deleted file mode 100644
index f0b1639..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.spvasm
+++ /dev/null
@@ -1,287 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 186
-; Schema: 0
-               OpCapability Shader
-         %67 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_81 "x_81"
-               OpName %x_82 "x_82"
-               OpName %x_83 "x_83"
-               OpName %x_84 "x_84"
-               OpName %x_85 "x_85"
-               OpName %x_95 "x_95"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_98_phi "x_98_phi"
-               OpName %x_142 "x_142"
-               OpName %x_99 "x_99"
-               OpName %x_127_phi "x_127_phi"
-               OpName %x_96_phi "x_96_phi"
-               OpName %x_104 "x_104"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-    %float_0 = OpConstant %float 0
-         %23 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %24 = OpConstantComposite %_arr_v4float_uint_8 %23 %23 %23 %23 %23 %23 %23 %23
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %27 = OpConstantNull %_arr_v4float_uint_8
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %35 = OpConstantNull %_arr_v4float_uint_16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %42 = OpConstantNull %int
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-         %45 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-         %46 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-         %47 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-         %49 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-         %52 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-         %54 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-         %56 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-         %58 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-         %59 = OpConstantComposite %_arr_v4float_uint_8 %45 %46 %47 %49 %52 %54 %56 %58
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-         %76 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %87 = OpConstantNull %bool
-      %int_8 = OpConstant %int 8
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-        %139 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %140 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %141 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %142 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %143 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %144 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %145 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %146 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %147 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %148 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %149 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %150 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %151 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %152 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %153 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %154 = OpConstantComposite %_arr_v4float_uint_16 %139 %140 %141 %142 %143 %144 %145 %146 %139 %147 %148 %149 %150 %151 %152 %153
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-        %173 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %x_81 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_82 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_83 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_84 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %27
-       %x_85 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %35
-       %x_95 = OpVariable %_ptr_Function_v4float Function %7
-   %x_95_phi = OpVariable %_ptr_Function_v4float Function %7
-   %x_98_phi = OpVariable %_ptr_Function_int Function %42
-      %x_142 = OpVariable %_ptr_Function_v4float Function %7
-       %x_99 = OpVariable %_ptr_Function_int Function %42
-  %x_127_phi = OpVariable %_ptr_Function_bool Function %87
-   %x_96_phi = OpVariable %_ptr_Function_v4float Function %7
-      %x_104 = OpVariable %_ptr_Function_v4float Function %7
-               OpStore %x_81 %24
-               OpStore %x_81 %59
-         %60 = OpLoad %_arr_v4float_uint_8 %x_81
-         %61 = OpLoad %v4float %gl_FragCoord
-         %64 = OpAccessChain %_ptr_Uniform_v2float %x_6 %uint_0
-         %65 = OpLoad %v2float %64
-         %68 = OpCompositeExtract %float %61 0
-         %69 = OpCompositeExtract %float %61 1
-         %70 = OpCompositeConstruct %v2float %68 %69
-         %71 = OpFDiv %v2float %70 %65
-         %73 = OpVectorTimesScalar %v2float %71 %float_32
-         %66 = OpExtInst %v2float %67 Floor %73
-               OpStore %x_95_phi %76
-               OpStore %x_98_phi %int_0
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %89 = OpLoad %v4float %x_95_phi
-               OpStore %x_95 %89
-         %90 = OpLoad %int %x_98_phi
-         %92 = OpSLessThan %bool %90 %int_8
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-               OpBranch %93
-         %95 = OpLabel
-               OpBranch %79
-         %93 = OpLabel
-               OpStore %x_82 %60
-         %97 = OpAccessChain %_ptr_Function_v4float %x_82 %90
-         %98 = OpLoad %v4float %97
-               OpStore %x_104 %98
-               OpSelectionMerge %99 None
-               OpSwitch %uint_0 %100
-        %100 = OpLabel
-        %101 = OpCompositeExtract %float %66 0
-        %103 = OpAccessChain %_ptr_Function_float %x_104 %uint_0
-        %104 = OpLoad %float %103
-        %105 = OpFOrdLessThan %bool %101 %104
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %106
-        %107 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %106 = OpLabel
-        %109 = OpCompositeExtract %float %66 1
-        %111 = OpAccessChain %_ptr_Function_float %x_104 %uint_1
-        %112 = OpLoad %float %111
-        %113 = OpFOrdLessThan %bool %109 %112
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %114 = OpLabel
-        %117 = OpAccessChain %_ptr_Function_float %x_104 %uint_2
-        %118 = OpLoad %float %117
-        %119 = OpFAdd %float %104 %118
-        %120 = OpFOrdGreaterThan %bool %101 %119
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %121
-        %122 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %121 = OpLabel
-        %124 = OpAccessChain %_ptr_Function_float %x_104 %uint_3
-        %125 = OpLoad %float %124
-        %126 = OpFAdd %float %112 %125
-        %127 = OpFOrdGreaterThan %bool %109 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %128
-        %129 = OpLabel
-               OpStore %x_127_phi %false
-               OpBranch %99
-        %128 = OpLabel
-               OpStore %x_127_phi %true
-               OpBranch %99
-         %99 = OpLabel
-        %131 = OpLoad %bool %x_127_phi
-        %132 = OpLoad %v4float %x_95
-               OpStore %x_96_phi %132
-               OpSelectionMerge %133 None
-               OpBranchConditional %131 %134 %133
-        %134 = OpLabel
-               OpStore %x_83 %59
-        %135 = OpAccessChain %_ptr_Function_float %x_83 %90 %uint_0
-        %136 = OpLoad %float %135
-               OpStore %x_84 %59
-        %137 = OpAccessChain %_ptr_Function_float %x_84 %90 %uint_1
-        %138 = OpLoad %float %137
-               OpStore %x_85 %154
-        %155 = OpConvertFToS %int %136
-        %156 = OpConvertFToS %int %138
-        %157 = OpIMul %int %155 %156
-        %159 = OpIMul %int %90 %int_9
-        %160 = OpIAdd %int %157 %159
-        %162 = OpIAdd %int %160 %int_11
-        %164 = OpSMod %int %162 %int_16
-        %165 = OpAccessChain %_ptr_Function_v4float %x_85 %164
-        %166 = OpLoad %v4float %165
-               OpStore %x_142 %166
-        %167 = OpLoad %v4float %x_142
-               OpStore %x_96_phi %167
-               OpBranch %133
-        %133 = OpLabel
-        %168 = OpLoad %v4float %x_96_phi
-               OpBranch %80
-         %80 = OpLabel
-        %170 = OpIAdd %int %90 %int_1
-               OpStore %x_99 %170
-               OpStore %x_95_phi %168
-        %171 = OpLoad %int %x_99
-               OpStore %x_98_phi %171
-               OpBranch %78
-         %79 = OpLabel
-        %172 = OpLoad %v4float %x_95
-               OpStore %x_GLF_color %172
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %173
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %177 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %178 = OpFunctionCall %void %main_1
-        %179 = OpLoad %v4float %x_GLF_color
-        %180 = OpCompositeConstruct %main_out %179
-               OpReturnValue %180
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %182 = OpLabel
-        %184 = OpLoad %v4float %gl_FragCoord_param_1
-        %183 = OpFunctionCall %main_out %main_inner %184
-        %185 = OpCompositeExtract %v4float %183 0
-               OpStore %x_GLF_color_1_1 %185
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.wgsl
deleted file mode 100644
index 1bf1c72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.wgsl
+++ /dev/null
@@ -1,100 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_81 : array<vec4<f32>, 8> = array<vec4<f32>, 8>(vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  var x_82 : array<vec4<f32>, 8>;
-  var x_83 : array<vec4<f32>, 8>;
-  var x_84 : array<vec4<f32>, 8>;
-  var x_85 : array<vec4<f32>, 16>;
-  var x_95 : vec4<f32>;
-  var x_95_phi : vec4<f32>;
-  var x_98_phi : i32;
-  x_81 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-  let x_86 : array<vec4<f32>, 8> = x_81;
-  let x_87 : vec4<f32> = gl_FragCoord;
-  let x_90 : vec2<f32> = x_6.resolution;
-  let x_93 : vec2<f32> = floor(((vec2<f32>(x_87.x, x_87.y) / x_90) * 32.0));
-  x_95_phi = vec4<f32>(0.5, 0.5, 1.0, 1.0);
-  x_98_phi = 0;
-  loop {
-    var x_142 : vec4<f32>;
-    var x_99 : i32;
-    var x_127_phi : bool;
-    var x_96_phi : vec4<f32>;
-    x_95 = x_95_phi;
-    let x_98 : i32 = x_98_phi;
-    if ((x_98 < 8)) {
-    } else {
-      break;
-    }
-    var x_104 : vec4<f32>;
-    x_82 = x_86;
-    x_104 = x_82[x_98];
-    switch(0u) {
-      default: {
-        let x_107 : f32 = x_93.x;
-        let x_108 : f32 = x_104.x;
-        if ((x_107 < x_108)) {
-          x_127_phi = false;
-          break;
-        }
-        let x_112 : f32 = x_93.y;
-        let x_113 : f32 = x_104.y;
-        if ((x_112 < x_113)) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_107 > (x_108 + x_104.z))) {
-          x_127_phi = false;
-          break;
-        }
-        if ((x_112 > (x_113 + x_104.w))) {
-          x_127_phi = false;
-          break;
-        }
-        x_127_phi = true;
-      }
-    }
-    let x_127 : bool = x_127_phi;
-    x_96_phi = x_95;
-    if (x_127) {
-      x_83 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_131 : f32 = x_83[x_98].x;
-      x_84 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_134 : f32 = x_84[x_98].y;
-      x_85 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      x_142 = x_85[((((i32(x_131) * i32(x_134)) + (x_98 * 9)) + 11) % 16)];
-      x_96_phi = x_142;
-    }
-    let x_96 : vec4<f32> = x_96_phi;
-
-    continuing {
-      x_99 = (x_98 + 1);
-      x_95_phi = x_96;
-      x_98_phi = x_99;
-    }
-  }
-  x_GLF_color = x_95;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.hlsl
deleted file mode 100644
index 5f9933f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,754 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  BST tree[10] = (BST[10])0;
-  int x_356 = 0;
-  int x_58_phi = 0;
-  bool x_86_phi = false;
-  int x_353_phi = 0;
-  int x_356_phi = 0;
-  int x_358_phi = 0;
-  const BST tint_symbol_1 = {9, -1, -1};
-  tree[0] = tint_symbol_1;
-  switch(0u) {
-    default: {
-      x_58_phi = 0;
-      while (true) {
-        int x_84 = 0;
-        int x_76 = 0;
-        int x_59 = 0;
-        int x_59_phi = 0;
-        const int x_58 = x_58_phi;
-        x_86_phi = false;
-        if ((x_58 <= 1)) {
-        } else {
-          break;
-        }
-        const int x_65 = tree[x_58].data;
-        if ((5 <= x_65)) {
-          const int x_78_save = x_58;
-          const int x_79 = tree[x_78_save].leftIndex;
-          if ((x_79 == -1)) {
-            tree[x_78_save].leftIndex = 1;
-            const BST tint_symbol_2 = {5, -1, -1};
-            tree[1] = tint_symbol_2;
-            x_86_phi = true;
-            break;
-          } else {
-            x_84 = tree[x_78_save].leftIndex;
-            x_59_phi = x_84;
-            {
-              x_59 = x_59_phi;
-              x_58_phi = x_59;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_70_save = x_58;
-          const int x_71 = tree[x_70_save].rightIndex;
-          if ((x_71 == -1)) {
-            tree[x_70_save].rightIndex = 1;
-            const BST tint_symbol_3 = {5, -1, -1};
-            tree[1] = tint_symbol_3;
-            x_86_phi = true;
-            break;
-          } else {
-            x_76 = tree[x_70_save].rightIndex;
-            x_59_phi = x_76;
-            {
-              x_59 = x_59_phi;
-              x_58_phi = x_59;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_59 = x_59_phi;
-          x_58_phi = x_59;
-        }
-      }
-      if (x_86_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_91_phi = 0;
-  bool x_119_phi = false;
-  switch(0u) {
-    default: {
-      x_91_phi = 0;
-      while (true) {
-        int x_117 = 0;
-        int x_109 = 0;
-        int x_92 = 0;
-        int x_92_phi = 0;
-        const int x_91 = x_91_phi;
-        x_119_phi = false;
-        if ((x_91 <= 2)) {
-        } else {
-          break;
-        }
-        const int x_98 = tree[x_91].data;
-        if ((12 <= x_98)) {
-          const int x_111_save = x_91;
-          const int x_112 = tree[x_111_save].leftIndex;
-          if ((x_112 == -1)) {
-            tree[x_111_save].leftIndex = 2;
-            const BST tint_symbol_4 = {12, -1, -1};
-            tree[2] = tint_symbol_4;
-            x_119_phi = true;
-            break;
-          } else {
-            x_117 = tree[x_111_save].leftIndex;
-            x_92_phi = x_117;
-            {
-              x_92 = x_92_phi;
-              x_91_phi = x_92;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_103_save = x_91;
-          const int x_104 = tree[x_103_save].rightIndex;
-          if ((x_104 == -1)) {
-            tree[x_103_save].rightIndex = 2;
-            const BST tint_symbol_5 = {12, -1, -1};
-            tree[2] = tint_symbol_5;
-            x_119_phi = true;
-            break;
-          } else {
-            x_109 = tree[x_103_save].rightIndex;
-            x_92_phi = x_109;
-            {
-              x_92 = x_92_phi;
-              x_91_phi = x_92;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_92 = x_92_phi;
-          x_91_phi = x_92;
-        }
-      }
-      if (x_119_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_124_phi = 0;
-  bool x_152_phi = false;
-  switch(0u) {
-    default: {
-      x_124_phi = 0;
-      while (true) {
-        int x_150 = 0;
-        int x_142 = 0;
-        int x_125 = 0;
-        int x_125_phi = 0;
-        const int x_124 = x_124_phi;
-        x_152_phi = false;
-        if ((x_124 <= 3)) {
-        } else {
-          break;
-        }
-        const int x_131 = tree[x_124].data;
-        if ((15 <= x_131)) {
-          const int x_144_save = x_124;
-          const int x_145 = tree[x_144_save].leftIndex;
-          if ((x_145 == -1)) {
-            tree[x_144_save].leftIndex = 3;
-            const BST tint_symbol_6 = {15, -1, -1};
-            tree[3] = tint_symbol_6;
-            x_152_phi = true;
-            break;
-          } else {
-            x_150 = tree[x_144_save].leftIndex;
-            x_125_phi = x_150;
-            {
-              x_125 = x_125_phi;
-              x_124_phi = x_125;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_136_save = x_124;
-          const int x_137 = tree[x_136_save].rightIndex;
-          if ((x_137 == -1)) {
-            tree[x_136_save].rightIndex = 3;
-            const BST tint_symbol_7 = {15, -1, -1};
-            tree[3] = tint_symbol_7;
-            x_152_phi = true;
-            break;
-          } else {
-            x_142 = tree[x_136_save].rightIndex;
-            x_125_phi = x_142;
-            {
-              x_125 = x_125_phi;
-              x_124_phi = x_125;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_125 = x_125_phi;
-          x_124_phi = x_125;
-        }
-      }
-      if (x_152_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_157_phi = 0;
-  bool x_185_phi = false;
-  switch(0u) {
-    default: {
-      x_157_phi = 0;
-      while (true) {
-        int x_183 = 0;
-        int x_175 = 0;
-        int x_158 = 0;
-        int x_158_phi = 0;
-        const int x_157 = x_157_phi;
-        x_185_phi = false;
-        if ((x_157 <= 4)) {
-        } else {
-          break;
-        }
-        const int x_164 = tree[x_157].data;
-        if ((7 <= x_164)) {
-          const int x_177_save = x_157;
-          const int x_178 = tree[x_177_save].leftIndex;
-          if ((x_178 == -1)) {
-            tree[x_177_save].leftIndex = 4;
-            const BST tint_symbol_8 = {7, -1, -1};
-            tree[4] = tint_symbol_8;
-            x_185_phi = true;
-            break;
-          } else {
-            x_183 = tree[x_177_save].leftIndex;
-            x_158_phi = x_183;
-            {
-              x_158 = x_158_phi;
-              x_157_phi = x_158;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_169_save = x_157;
-          const int x_170 = tree[x_169_save].rightIndex;
-          if ((x_170 == -1)) {
-            tree[x_169_save].rightIndex = 4;
-            const BST tint_symbol_9 = {7, -1, -1};
-            tree[4] = tint_symbol_9;
-            x_185_phi = true;
-            break;
-          } else {
-            x_175 = tree[x_169_save].rightIndex;
-            x_158_phi = x_175;
-            {
-              x_158 = x_158_phi;
-              x_157_phi = x_158;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_158 = x_158_phi;
-          x_157_phi = x_158;
-        }
-      }
-      if (x_185_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_190_phi = 0;
-  bool x_218_phi = false;
-  switch(0u) {
-    default: {
-      x_190_phi = 0;
-      while (true) {
-        int x_216 = 0;
-        int x_208 = 0;
-        int x_191 = 0;
-        int x_191_phi = 0;
-        const int x_190 = x_190_phi;
-        x_218_phi = false;
-        if ((x_190 <= 5)) {
-        } else {
-          break;
-        }
-        const int x_197 = tree[x_190].data;
-        if ((8 <= x_197)) {
-          const int x_210_save = x_190;
-          const int x_211 = tree[x_210_save].leftIndex;
-          if ((x_211 == -1)) {
-            tree[x_210_save].leftIndex = 5;
-            const BST tint_symbol_10 = {8, -1, -1};
-            tree[5] = tint_symbol_10;
-            x_218_phi = true;
-            break;
-          } else {
-            x_216 = tree[x_210_save].leftIndex;
-            x_191_phi = x_216;
-            {
-              x_191 = x_191_phi;
-              x_190_phi = x_191;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_202_save = x_190;
-          const int x_203 = tree[x_202_save].rightIndex;
-          if ((x_203 == -1)) {
-            tree[x_202_save].rightIndex = 5;
-            const BST tint_symbol_11 = {8, -1, -1};
-            tree[5] = tint_symbol_11;
-            x_218_phi = true;
-            break;
-          } else {
-            x_208 = tree[x_202_save].rightIndex;
-            x_191_phi = x_208;
-            {
-              x_191 = x_191_phi;
-              x_190_phi = x_191;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_191 = x_191_phi;
-          x_190_phi = x_191;
-        }
-      }
-      if (x_218_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_223_phi = 0;
-  bool x_251_phi = false;
-  switch(0u) {
-    default: {
-      x_223_phi = 0;
-      while (true) {
-        int x_249 = 0;
-        int x_241 = 0;
-        int x_224 = 0;
-        int x_224_phi = 0;
-        const int x_223 = x_223_phi;
-        x_251_phi = false;
-        if ((x_223 <= 6)) {
-        } else {
-          break;
-        }
-        const int x_230 = tree[x_223].data;
-        if ((2 <= x_230)) {
-          const int x_243_save = x_223;
-          const int x_244 = tree[x_243_save].leftIndex;
-          if ((x_244 == -1)) {
-            tree[x_243_save].leftIndex = 6;
-            const BST tint_symbol_12 = {2, -1, -1};
-            tree[6] = tint_symbol_12;
-            x_251_phi = true;
-            break;
-          } else {
-            x_249 = tree[x_243_save].leftIndex;
-            x_224_phi = x_249;
-            {
-              x_224 = x_224_phi;
-              x_223_phi = x_224;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_235_save = x_223;
-          const int x_236 = tree[x_235_save].rightIndex;
-          if ((x_236 == -1)) {
-            tree[x_235_save].rightIndex = 6;
-            const BST tint_symbol_13 = {2, -1, -1};
-            tree[6] = tint_symbol_13;
-            x_251_phi = true;
-            break;
-          } else {
-            x_241 = tree[x_235_save].rightIndex;
-            x_224_phi = x_241;
-            {
-              x_224 = x_224_phi;
-              x_223_phi = x_224;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_224 = x_224_phi;
-          x_223_phi = x_224;
-        }
-      }
-      if (x_251_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_256_phi = 0;
-  bool x_284_phi = false;
-  switch(0u) {
-    default: {
-      x_256_phi = 0;
-      while (true) {
-        int x_282 = 0;
-        int x_274 = 0;
-        int x_257 = 0;
-        int x_257_phi = 0;
-        const int x_256 = x_256_phi;
-        x_284_phi = false;
-        if ((x_256 <= 7)) {
-        } else {
-          break;
-        }
-        const int x_263 = tree[x_256].data;
-        if ((6 <= x_263)) {
-          const int x_276_save = x_256;
-          const int x_277 = tree[x_276_save].leftIndex;
-          if ((x_277 == -1)) {
-            tree[x_276_save].leftIndex = 7;
-            const BST tint_symbol_14 = {6, -1, -1};
-            tree[7] = tint_symbol_14;
-            x_284_phi = true;
-            break;
-          } else {
-            x_282 = tree[x_276_save].leftIndex;
-            x_257_phi = x_282;
-            {
-              x_257 = x_257_phi;
-              x_256_phi = x_257;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_268_save = x_256;
-          const int x_269 = tree[x_268_save].rightIndex;
-          if ((x_269 == -1)) {
-            tree[x_268_save].rightIndex = 7;
-            const BST tint_symbol_15 = {6, -1, -1};
-            tree[7] = tint_symbol_15;
-            x_284_phi = true;
-            break;
-          } else {
-            x_274 = tree[x_268_save].rightIndex;
-            x_257_phi = x_274;
-            {
-              x_257 = x_257_phi;
-              x_256_phi = x_257;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_257 = x_257_phi;
-          x_256_phi = x_257;
-        }
-      }
-      if (x_284_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_289_phi = 0;
-  bool x_317_phi = false;
-  switch(0u) {
-    default: {
-      x_289_phi = 0;
-      while (true) {
-        int x_315 = 0;
-        int x_307 = 0;
-        int x_290 = 0;
-        int x_290_phi = 0;
-        const int x_289 = x_289_phi;
-        x_317_phi = false;
-        if ((x_289 <= 8)) {
-        } else {
-          break;
-        }
-        const int x_296 = tree[x_289].data;
-        if ((17 <= x_296)) {
-          const int x_309_save = x_289;
-          const int x_310 = tree[x_309_save].leftIndex;
-          if ((x_310 == -1)) {
-            tree[x_309_save].leftIndex = 8;
-            const BST tint_symbol_16 = {17, -1, -1};
-            tree[8] = tint_symbol_16;
-            x_317_phi = true;
-            break;
-          } else {
-            x_315 = tree[x_309_save].leftIndex;
-            x_290_phi = x_315;
-            {
-              x_290 = x_290_phi;
-              x_289_phi = x_290;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_301_save = x_289;
-          const int x_302 = tree[x_301_save].rightIndex;
-          if ((x_302 == -1)) {
-            tree[x_301_save].rightIndex = 8;
-            const BST tint_symbol_17 = {17, -1, -1};
-            tree[8] = tint_symbol_17;
-            x_317_phi = true;
-            break;
-          } else {
-            x_307 = tree[x_301_save].rightIndex;
-            x_290_phi = x_307;
-            {
-              x_290 = x_290_phi;
-              x_289_phi = x_290;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_290 = x_290_phi;
-          x_289_phi = x_290;
-        }
-      }
-      if (x_317_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_322_phi = 0;
-  bool x_350_phi = false;
-  switch(0u) {
-    default: {
-      x_322_phi = 0;
-      while (true) {
-        int x_348 = 0;
-        int x_340 = 0;
-        int x_323 = 0;
-        int x_323_phi = 0;
-        const int x_322 = x_322_phi;
-        x_350_phi = false;
-        if ((x_322 <= 9)) {
-        } else {
-          break;
-        }
-        const int x_329 = tree[x_322].data;
-        if ((13 <= x_329)) {
-          const int x_342_save = x_322;
-          const int x_343 = tree[x_342_save].leftIndex;
-          if ((x_343 == -1)) {
-            tree[x_342_save].leftIndex = 9;
-            const BST tint_symbol_18 = {13, -1, -1};
-            tree[9] = tint_symbol_18;
-            x_350_phi = true;
-            break;
-          } else {
-            x_348 = tree[x_342_save].leftIndex;
-            x_323_phi = x_348;
-            {
-              x_323 = x_323_phi;
-              x_322_phi = x_323;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_334_save = x_322;
-          const int x_335 = tree[x_334_save].rightIndex;
-          if ((x_335 == -1)) {
-            tree[x_334_save].rightIndex = 9;
-            const BST tint_symbol_19 = {13, -1, -1};
-            tree[9] = tint_symbol_19;
-            x_350_phi = true;
-            break;
-          } else {
-            x_340 = tree[x_334_save].rightIndex;
-            x_323_phi = x_340;
-            {
-              x_323 = x_323_phi;
-              x_322_phi = x_323;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_323 = x_323_phi;
-          x_322_phi = x_323;
-        }
-      }
-      if (x_350_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  x_353_phi = 0;
-  x_356_phi = 0;
-  x_358_phi = 0;
-  while (true) {
-    int x_381 = 0;
-    int x_391 = 0;
-    int x_396 = 0;
-    int x_359 = 0;
-    int x_354_phi = 0;
-    int x_357_phi = 0;
-    const int x_353 = x_353_phi;
-    x_356 = x_356_phi;
-    const int x_358 = x_358_phi;
-    if ((x_358 < 20)) {
-    } else {
-      break;
-    }
-    int x_366_phi = 0;
-    int x_381_phi = 0;
-    bool x_382_phi = false;
-    switch(0u) {
-      default: {
-        x_366_phi = 0;
-        while (true) {
-          const int x_366 = x_366_phi;
-          x_381_phi = x_353;
-          x_382_phi = false;
-          if ((x_366 != -1)) {
-          } else {
-            break;
-          }
-          const BST x_373 = tree[x_366];
-          const int x_374 = x_373.data;
-          const int x_375 = x_373.leftIndex;
-          const int x_376 = x_373.rightIndex;
-          if ((x_374 == x_358)) {
-            x_381_phi = x_358;
-            x_382_phi = true;
-            break;
-          }
-          {
-            x_366_phi = ((x_358 > x_374) ? x_376 : x_375);
-          }
-        }
-        x_381 = x_381_phi;
-        const bool x_382 = x_382_phi;
-        x_354_phi = x_381;
-        if (x_382) {
-          break;
-        }
-        x_354_phi = -1;
-        break;
-      }
-    }
-    int x_354 = 0;
-    int x_390 = 0;
-    int x_395 = 0;
-    int x_391_phi = 0;
-    int x_396_phi = 0;
-    x_354 = x_354_phi;
-    switch(x_358) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_391_phi = x_356;
-        if ((x_354 == asint(x_358))) {
-          x_390 = asint((x_356 + asint(1)));
-          x_391_phi = x_390;
-        }
-        x_391 = x_391_phi;
-        x_357_phi = x_391;
-        break;
-      }
-      default: {
-        x_396_phi = x_356;
-        if ((x_354 == asint(-1))) {
-          x_395 = asint((x_356 + asint(1)));
-          x_396_phi = x_395;
-        }
-        x_396 = x_396_phi;
-        x_357_phi = x_396;
-        break;
-      }
-    }
-    const int x_357 = x_357_phi;
-    {
-      x_359 = (x_358 + 1);
-      x_353_phi = x_354;
-      x_356_phi = x_357;
-      x_358_phi = x_359;
-    }
-  }
-  if ((x_356 == asint(20))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_20 = {x_GLF_color};
-  return tint_symbol_20;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.msl
deleted file mode 100644
index 3338c66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,768 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_22) {
-  tint_array_wrapper tree = {};
-  int x_356 = 0;
-  int x_58_phi = 0;
-  bool x_86_phi = false;
-  int x_353_phi = 0;
-  int x_356_phi = 0;
-  int x_358_phi = 0;
-  BST const tint_symbol_2 = {.data=9, .leftIndex=-1, .rightIndex=-1};
-  tree.arr[0] = tint_symbol_2;
-  switch(0u) {
-    default: {
-      x_58_phi = 0;
-      while (true) {
-        int x_84 = 0;
-        int x_76 = 0;
-        int x_59 = 0;
-        int x_59_phi = 0;
-        int const x_58 = x_58_phi;
-        x_86_phi = false;
-        if ((x_58 <= 1)) {
-        } else {
-          break;
-        }
-        int const x_65 = tree.arr[x_58].data;
-        if ((5 <= x_65)) {
-          int const x_78_save = x_58;
-          int const x_79 = tree.arr[x_78_save].leftIndex;
-          if ((x_79 == -1)) {
-            tree.arr[x_78_save].leftIndex = 1;
-            BST const tint_symbol_3 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_3;
-            x_86_phi = true;
-            break;
-          } else {
-            x_84 = tree.arr[x_78_save].leftIndex;
-            x_59_phi = x_84;
-            {
-              x_59 = x_59_phi;
-              x_58_phi = x_59;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_70_save = x_58;
-          int const x_71 = tree.arr[x_70_save].rightIndex;
-          if ((x_71 == -1)) {
-            tree.arr[x_70_save].rightIndex = 1;
-            BST const tint_symbol_4 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_4;
-            x_86_phi = true;
-            break;
-          } else {
-            x_76 = tree.arr[x_70_save].rightIndex;
-            x_59_phi = x_76;
-            {
-              x_59 = x_59_phi;
-              x_58_phi = x_59;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_59 = x_59_phi;
-          x_58_phi = x_59;
-        }
-      }
-      bool const x_86 = x_86_phi;
-      if (x_86) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_91_phi = 0;
-  bool x_119_phi = false;
-  switch(0u) {
-    default: {
-      x_91_phi = 0;
-      while (true) {
-        int x_117 = 0;
-        int x_109 = 0;
-        int x_92 = 0;
-        int x_92_phi = 0;
-        int const x_91 = x_91_phi;
-        x_119_phi = false;
-        if ((x_91 <= 2)) {
-        } else {
-          break;
-        }
-        int const x_98 = tree.arr[x_91].data;
-        if ((12 <= x_98)) {
-          int const x_111_save = x_91;
-          int const x_112 = tree.arr[x_111_save].leftIndex;
-          if ((x_112 == -1)) {
-            tree.arr[x_111_save].leftIndex = 2;
-            BST const tint_symbol_5 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[2] = tint_symbol_5;
-            x_119_phi = true;
-            break;
-          } else {
-            x_117 = tree.arr[x_111_save].leftIndex;
-            x_92_phi = x_117;
-            {
-              x_92 = x_92_phi;
-              x_91_phi = x_92;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_103_save = x_91;
-          int const x_104 = tree.arr[x_103_save].rightIndex;
-          if ((x_104 == -1)) {
-            tree.arr[x_103_save].rightIndex = 2;
-            BST const tint_symbol_6 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[2] = tint_symbol_6;
-            x_119_phi = true;
-            break;
-          } else {
-            x_109 = tree.arr[x_103_save].rightIndex;
-            x_92_phi = x_109;
-            {
-              x_92 = x_92_phi;
-              x_91_phi = x_92;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_92 = x_92_phi;
-          x_91_phi = x_92;
-        }
-      }
-      bool const x_119 = x_119_phi;
-      if (x_119) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_124_phi = 0;
-  bool x_152_phi = false;
-  switch(0u) {
-    default: {
-      x_124_phi = 0;
-      while (true) {
-        int x_150 = 0;
-        int x_142 = 0;
-        int x_125 = 0;
-        int x_125_phi = 0;
-        int const x_124 = x_124_phi;
-        x_152_phi = false;
-        if ((x_124 <= 3)) {
-        } else {
-          break;
-        }
-        int const x_131 = tree.arr[x_124].data;
-        if ((15 <= x_131)) {
-          int const x_144_save = x_124;
-          int const x_145 = tree.arr[x_144_save].leftIndex;
-          if ((x_145 == -1)) {
-            tree.arr[x_144_save].leftIndex = 3;
-            BST const tint_symbol_7 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_7;
-            x_152_phi = true;
-            break;
-          } else {
-            x_150 = tree.arr[x_144_save].leftIndex;
-            x_125_phi = x_150;
-            {
-              x_125 = x_125_phi;
-              x_124_phi = x_125;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_136_save = x_124;
-          int const x_137 = tree.arr[x_136_save].rightIndex;
-          if ((x_137 == -1)) {
-            tree.arr[x_136_save].rightIndex = 3;
-            BST const tint_symbol_8 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_8;
-            x_152_phi = true;
-            break;
-          } else {
-            x_142 = tree.arr[x_136_save].rightIndex;
-            x_125_phi = x_142;
-            {
-              x_125 = x_125_phi;
-              x_124_phi = x_125;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_125 = x_125_phi;
-          x_124_phi = x_125;
-        }
-      }
-      bool const x_152 = x_152_phi;
-      if (x_152) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_157_phi = 0;
-  bool x_185_phi = false;
-  switch(0u) {
-    default: {
-      x_157_phi = 0;
-      while (true) {
-        int x_183 = 0;
-        int x_175 = 0;
-        int x_158 = 0;
-        int x_158_phi = 0;
-        int const x_157 = x_157_phi;
-        x_185_phi = false;
-        if ((x_157 <= 4)) {
-        } else {
-          break;
-        }
-        int const x_164 = tree.arr[x_157].data;
-        if ((7 <= x_164)) {
-          int const x_177_save = x_157;
-          int const x_178 = tree.arr[x_177_save].leftIndex;
-          if ((x_178 == -1)) {
-            tree.arr[x_177_save].leftIndex = 4;
-            BST const tint_symbol_9 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_9;
-            x_185_phi = true;
-            break;
-          } else {
-            x_183 = tree.arr[x_177_save].leftIndex;
-            x_158_phi = x_183;
-            {
-              x_158 = x_158_phi;
-              x_157_phi = x_158;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_169_save = x_157;
-          int const x_170 = tree.arr[x_169_save].rightIndex;
-          if ((x_170 == -1)) {
-            tree.arr[x_169_save].rightIndex = 4;
-            BST const tint_symbol_10 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_10;
-            x_185_phi = true;
-            break;
-          } else {
-            x_175 = tree.arr[x_169_save].rightIndex;
-            x_158_phi = x_175;
-            {
-              x_158 = x_158_phi;
-              x_157_phi = x_158;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_158 = x_158_phi;
-          x_157_phi = x_158;
-        }
-      }
-      bool const x_185 = x_185_phi;
-      if (x_185) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_190_phi = 0;
-  bool x_218_phi = false;
-  switch(0u) {
-    default: {
-      x_190_phi = 0;
-      while (true) {
-        int x_216 = 0;
-        int x_208 = 0;
-        int x_191 = 0;
-        int x_191_phi = 0;
-        int const x_190 = x_190_phi;
-        x_218_phi = false;
-        if ((x_190 <= 5)) {
-        } else {
-          break;
-        }
-        int const x_197 = tree.arr[x_190].data;
-        if ((8 <= x_197)) {
-          int const x_210_save = x_190;
-          int const x_211 = tree.arr[x_210_save].leftIndex;
-          if ((x_211 == -1)) {
-            tree.arr[x_210_save].leftIndex = 5;
-            BST const tint_symbol_11 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_11;
-            x_218_phi = true;
-            break;
-          } else {
-            x_216 = tree.arr[x_210_save].leftIndex;
-            x_191_phi = x_216;
-            {
-              x_191 = x_191_phi;
-              x_190_phi = x_191;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_202_save = x_190;
-          int const x_203 = tree.arr[x_202_save].rightIndex;
-          if ((x_203 == -1)) {
-            tree.arr[x_202_save].rightIndex = 5;
-            BST const tint_symbol_12 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_12;
-            x_218_phi = true;
-            break;
-          } else {
-            x_208 = tree.arr[x_202_save].rightIndex;
-            x_191_phi = x_208;
-            {
-              x_191 = x_191_phi;
-              x_190_phi = x_191;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_191 = x_191_phi;
-          x_190_phi = x_191;
-        }
-      }
-      bool const x_218 = x_218_phi;
-      if (x_218) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_223_phi = 0;
-  bool x_251_phi = false;
-  switch(0u) {
-    default: {
-      x_223_phi = 0;
-      while (true) {
-        int x_249 = 0;
-        int x_241 = 0;
-        int x_224 = 0;
-        int x_224_phi = 0;
-        int const x_223 = x_223_phi;
-        x_251_phi = false;
-        if ((x_223 <= 6)) {
-        } else {
-          break;
-        }
-        int const x_230 = tree.arr[x_223].data;
-        if ((2 <= x_230)) {
-          int const x_243_save = x_223;
-          int const x_244 = tree.arr[x_243_save].leftIndex;
-          if ((x_244 == -1)) {
-            tree.arr[x_243_save].leftIndex = 6;
-            BST const tint_symbol_13 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_13;
-            x_251_phi = true;
-            break;
-          } else {
-            x_249 = tree.arr[x_243_save].leftIndex;
-            x_224_phi = x_249;
-            {
-              x_224 = x_224_phi;
-              x_223_phi = x_224;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_235_save = x_223;
-          int const x_236 = tree.arr[x_235_save].rightIndex;
-          if ((x_236 == -1)) {
-            tree.arr[x_235_save].rightIndex = 6;
-            BST const tint_symbol_14 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_14;
-            x_251_phi = true;
-            break;
-          } else {
-            x_241 = tree.arr[x_235_save].rightIndex;
-            x_224_phi = x_241;
-            {
-              x_224 = x_224_phi;
-              x_223_phi = x_224;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_224 = x_224_phi;
-          x_223_phi = x_224;
-        }
-      }
-      bool const x_251 = x_251_phi;
-      if (x_251) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_256_phi = 0;
-  bool x_284_phi = false;
-  switch(0u) {
-    default: {
-      x_256_phi = 0;
-      while (true) {
-        int x_282 = 0;
-        int x_274 = 0;
-        int x_257 = 0;
-        int x_257_phi = 0;
-        int const x_256 = x_256_phi;
-        x_284_phi = false;
-        if ((x_256 <= 7)) {
-        } else {
-          break;
-        }
-        int const x_263 = tree.arr[x_256].data;
-        if ((6 <= x_263)) {
-          int const x_276_save = x_256;
-          int const x_277 = tree.arr[x_276_save].leftIndex;
-          if ((x_277 == -1)) {
-            tree.arr[x_276_save].leftIndex = 7;
-            BST const tint_symbol_15 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_15;
-            x_284_phi = true;
-            break;
-          } else {
-            x_282 = tree.arr[x_276_save].leftIndex;
-            x_257_phi = x_282;
-            {
-              x_257 = x_257_phi;
-              x_256_phi = x_257;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_268_save = x_256;
-          int const x_269 = tree.arr[x_268_save].rightIndex;
-          if ((x_269 == -1)) {
-            tree.arr[x_268_save].rightIndex = 7;
-            BST const tint_symbol_16 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_16;
-            x_284_phi = true;
-            break;
-          } else {
-            x_274 = tree.arr[x_268_save].rightIndex;
-            x_257_phi = x_274;
-            {
-              x_257 = x_257_phi;
-              x_256_phi = x_257;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_257 = x_257_phi;
-          x_256_phi = x_257;
-        }
-      }
-      bool const x_284 = x_284_phi;
-      if (x_284) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_289_phi = 0;
-  bool x_317_phi = false;
-  switch(0u) {
-    default: {
-      x_289_phi = 0;
-      while (true) {
-        int x_315 = 0;
-        int x_307 = 0;
-        int x_290 = 0;
-        int x_290_phi = 0;
-        int const x_289 = x_289_phi;
-        x_317_phi = false;
-        if ((x_289 <= 8)) {
-        } else {
-          break;
-        }
-        int const x_296 = tree.arr[x_289].data;
-        if ((17 <= x_296)) {
-          int const x_309_save = x_289;
-          int const x_310 = tree.arr[x_309_save].leftIndex;
-          if ((x_310 == -1)) {
-            tree.arr[x_309_save].leftIndex = 8;
-            BST const tint_symbol_17 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_17;
-            x_317_phi = true;
-            break;
-          } else {
-            x_315 = tree.arr[x_309_save].leftIndex;
-            x_290_phi = x_315;
-            {
-              x_290 = x_290_phi;
-              x_289_phi = x_290;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_301_save = x_289;
-          int const x_302 = tree.arr[x_301_save].rightIndex;
-          if ((x_302 == -1)) {
-            tree.arr[x_301_save].rightIndex = 8;
-            BST const tint_symbol_18 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_18;
-            x_317_phi = true;
-            break;
-          } else {
-            x_307 = tree.arr[x_301_save].rightIndex;
-            x_290_phi = x_307;
-            {
-              x_290 = x_290_phi;
-              x_289_phi = x_290;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_290 = x_290_phi;
-          x_289_phi = x_290;
-        }
-      }
-      bool const x_317 = x_317_phi;
-      if (x_317) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_322_phi = 0;
-  bool x_350_phi = false;
-  switch(0u) {
-    default: {
-      x_322_phi = 0;
-      while (true) {
-        int x_348 = 0;
-        int x_340 = 0;
-        int x_323 = 0;
-        int x_323_phi = 0;
-        int const x_322 = x_322_phi;
-        x_350_phi = false;
-        if ((x_322 <= 9)) {
-        } else {
-          break;
-        }
-        int const x_329 = tree.arr[x_322].data;
-        if ((13 <= x_329)) {
-          int const x_342_save = x_322;
-          int const x_343 = tree.arr[x_342_save].leftIndex;
-          if ((x_343 == -1)) {
-            tree.arr[x_342_save].leftIndex = 9;
-            BST const tint_symbol_19 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_19;
-            x_350_phi = true;
-            break;
-          } else {
-            x_348 = tree.arr[x_342_save].leftIndex;
-            x_323_phi = x_348;
-            {
-              x_323 = x_323_phi;
-              x_322_phi = x_323;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_334_save = x_322;
-          int const x_335 = tree.arr[x_334_save].rightIndex;
-          if ((x_335 == -1)) {
-            tree.arr[x_334_save].rightIndex = 9;
-            BST const tint_symbol_20 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_20;
-            x_350_phi = true;
-            break;
-          } else {
-            x_340 = tree.arr[x_334_save].rightIndex;
-            x_323_phi = x_340;
-            {
-              x_323 = x_323_phi;
-              x_322_phi = x_323;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_323 = x_323_phi;
-          x_322_phi = x_323;
-        }
-      }
-      bool const x_350 = x_350_phi;
-      if (x_350) {
-        break;
-      }
-      break;
-    }
-  }
-  x_353_phi = 0;
-  x_356_phi = 0;
-  x_358_phi = 0;
-  while (true) {
-    int x_381 = 0;
-    int x_391 = 0;
-    int x_396 = 0;
-    int x_359 = 0;
-    int x_354_phi = 0;
-    int x_357_phi = 0;
-    int const x_353 = x_353_phi;
-    x_356 = x_356_phi;
-    int const x_358 = x_358_phi;
-    if ((x_358 < 20)) {
-    } else {
-      break;
-    }
-    int x_366_phi = 0;
-    int x_381_phi = 0;
-    bool x_382_phi = false;
-    switch(0u) {
-      default: {
-        x_366_phi = 0;
-        while (true) {
-          int const x_366 = x_366_phi;
-          x_381_phi = x_353;
-          x_382_phi = false;
-          if ((x_366 != -1)) {
-          } else {
-            break;
-          }
-          BST const x_373 = tree.arr[x_366];
-          int const x_374 = x_373.data;
-          int const x_375 = x_373.leftIndex;
-          int const x_376 = x_373.rightIndex;
-          if ((x_374 == x_358)) {
-            x_381_phi = x_358;
-            x_382_phi = true;
-            break;
-          }
-          {
-            x_366_phi = select(x_375, x_376, (x_358 > x_374));
-          }
-        }
-        x_381 = x_381_phi;
-        bool const x_382 = x_382_phi;
-        x_354_phi = x_381;
-        if (x_382) {
-          break;
-        }
-        x_354_phi = -1;
-        break;
-      }
-    }
-    int x_354 = 0;
-    int x_390 = 0;
-    int x_395 = 0;
-    int x_391_phi = 0;
-    int x_396_phi = 0;
-    x_354 = x_354_phi;
-    switch(x_358) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_391_phi = x_356;
-        if ((x_354 == as_type<int>(x_358))) {
-          x_390 = as_type<int>(as_type<int>((as_type<uint>(x_356) + as_type<uint>(as_type<int>(1)))));
-          x_391_phi = x_390;
-        }
-        x_391 = x_391_phi;
-        x_357_phi = x_391;
-        break;
-      }
-      default: {
-        x_396_phi = x_356;
-        if ((x_354 == as_type<int>(-1))) {
-          x_395 = as_type<int>(as_type<int>((as_type<uint>(x_356) + as_type<uint>(as_type<int>(1)))));
-          x_396_phi = x_395;
-        }
-        x_396 = x_396_phi;
-        x_357_phi = x_396;
-        break;
-      }
-    }
-    int const x_357 = x_357_phi;
-    {
-      x_359 = as_type<int>((as_type<uint>(x_358) + as_type<uint>(1)));
-      x_353_phi = x_354;
-      x_356_phi = x_357;
-      x_358_phi = x_359;
-    }
-  }
-  if ((x_356 == as_type<int>(20))) {
-    *(tint_symbol_22) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_22) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_23) {
-  main_1(tint_symbol_23);
-  main_out const tint_symbol_21 = {.x_GLF_color_1=*(tint_symbol_23)};
-  return tint_symbol_21;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_24 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_24));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index 2b27a7a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,1164 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 618
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %x_356 "x_356"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_353_phi "x_353_phi"
-               OpName %x_356_phi "x_356_phi"
-               OpName %x_358_phi "x_358_phi"
-               OpName %x_84 "x_84"
-               OpName %x_76 "x_76"
-               OpName %x_59 "x_59"
-               OpName %x_59_phi "x_59_phi"
-               OpName %x_91_phi "x_91_phi"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_117 "x_117"
-               OpName %x_109 "x_109"
-               OpName %x_92 "x_92"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_124_phi "x_124_phi"
-               OpName %x_152_phi "x_152_phi"
-               OpName %x_150 "x_150"
-               OpName %x_142 "x_142"
-               OpName %x_125 "x_125"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_157_phi "x_157_phi"
-               OpName %x_185_phi "x_185_phi"
-               OpName %x_183 "x_183"
-               OpName %x_175 "x_175"
-               OpName %x_158 "x_158"
-               OpName %x_158_phi "x_158_phi"
-               OpName %x_190_phi "x_190_phi"
-               OpName %x_218_phi "x_218_phi"
-               OpName %x_216 "x_216"
-               OpName %x_208 "x_208"
-               OpName %x_191 "x_191"
-               OpName %x_191_phi "x_191_phi"
-               OpName %x_223_phi "x_223_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_249 "x_249"
-               OpName %x_241 "x_241"
-               OpName %x_224 "x_224"
-               OpName %x_224_phi "x_224_phi"
-               OpName %x_256_phi "x_256_phi"
-               OpName %x_284_phi "x_284_phi"
-               OpName %x_282 "x_282"
-               OpName %x_274 "x_274"
-               OpName %x_257 "x_257"
-               OpName %x_257_phi "x_257_phi"
-               OpName %x_289_phi "x_289_phi"
-               OpName %x_317_phi "x_317_phi"
-               OpName %x_315 "x_315"
-               OpName %x_307 "x_307"
-               OpName %x_290 "x_290"
-               OpName %x_290_phi "x_290_phi"
-               OpName %x_322_phi "x_322_phi"
-               OpName %x_350_phi "x_350_phi"
-               OpName %x_348 "x_348"
-               OpName %x_340 "x_340"
-               OpName %x_323 "x_323"
-               OpName %x_323_phi "x_323_phi"
-               OpName %x_381 "x_381"
-               OpName %x_391 "x_391"
-               OpName %x_396 "x_396"
-               OpName %x_359 "x_359"
-               OpName %x_354_phi "x_354_phi"
-               OpName %x_357_phi "x_357_phi"
-               OpName %x_366_phi "x_366_phi"
-               OpName %x_381_phi "x_381_phi"
-               OpName %x_382_phi "x_382_phi"
-               OpName %x_354 "x_354"
-               OpName %x_390 "x_390"
-               OpName %x_395 "x_395"
-               OpName %x_391_phi "x_391_phi"
-               OpName %x_396_phi "x_396_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Function__arr_BST_uint_10 = OpTypePointer Function %_arr_BST_uint_10
-         %19 = OpConstantNull %_arr_BST_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-%_ptr_Function_BST = OpTypePointer Function %BST
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-         %36 = OpConstantComposite %BST %int_9 %int_n1 %int_n1
-     %uint_0 = OpConstant %uint 0
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-         %71 = OpConstantComposite %BST %int_5 %int_n1 %int_n1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %int_2 = OpConstant %int 2
-     %int_12 = OpConstant %int 12
-        %126 = OpConstantComposite %BST %int_12 %int_n1 %int_n1
-      %int_3 = OpConstant %int 3
-     %int_15 = OpConstant %int 15
-        %179 = OpConstantComposite %BST %int_15 %int_n1 %int_n1
-      %int_4 = OpConstant %int 4
-      %int_7 = OpConstant %int 7
-        %232 = OpConstantComposite %BST %int_7 %int_n1 %int_n1
-      %int_8 = OpConstant %int 8
-        %284 = OpConstantComposite %BST %int_8 %int_n1 %int_n1
-      %int_6 = OpConstant %int 6
-        %336 = OpConstantComposite %BST %int_2 %int_n1 %int_n1
-        %387 = OpConstantComposite %BST %int_6 %int_n1 %int_n1
-     %int_17 = OpConstant %int 17
-        %439 = OpConstantComposite %BST %int_17 %int_n1 %int_n1
-     %int_13 = OpConstant %int 13
-        %491 = OpConstantComposite %BST %int_13 %int_n1 %int_n1
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %605 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %606 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %607 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %tree = OpVariable %_ptr_Function__arr_BST_uint_10 Function %19
-      %x_356 = OpVariable %_ptr_Function_int Function %22
-   %x_58_phi = OpVariable %_ptr_Function_int Function %22
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %27
-  %x_353_phi = OpVariable %_ptr_Function_int Function %22
-  %x_356_phi = OpVariable %_ptr_Function_int Function %22
-  %x_358_phi = OpVariable %_ptr_Function_int Function %22
-       %x_84 = OpVariable %_ptr_Function_int Function %22
-       %x_76 = OpVariable %_ptr_Function_int Function %22
-       %x_59 = OpVariable %_ptr_Function_int Function %22
-   %x_59_phi = OpVariable %_ptr_Function_int Function %22
-   %x_91_phi = OpVariable %_ptr_Function_int Function %22
-  %x_119_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_117 = OpVariable %_ptr_Function_int Function %22
-      %x_109 = OpVariable %_ptr_Function_int Function %22
-       %x_92 = OpVariable %_ptr_Function_int Function %22
-   %x_92_phi = OpVariable %_ptr_Function_int Function %22
-  %x_124_phi = OpVariable %_ptr_Function_int Function %22
-  %x_152_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_150 = OpVariable %_ptr_Function_int Function %22
-      %x_142 = OpVariable %_ptr_Function_int Function %22
-      %x_125 = OpVariable %_ptr_Function_int Function %22
-  %x_125_phi = OpVariable %_ptr_Function_int Function %22
-  %x_157_phi = OpVariable %_ptr_Function_int Function %22
-  %x_185_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_183 = OpVariable %_ptr_Function_int Function %22
-      %x_175 = OpVariable %_ptr_Function_int Function %22
-      %x_158 = OpVariable %_ptr_Function_int Function %22
-  %x_158_phi = OpVariable %_ptr_Function_int Function %22
-  %x_190_phi = OpVariable %_ptr_Function_int Function %22
-  %x_218_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_216 = OpVariable %_ptr_Function_int Function %22
-      %x_208 = OpVariable %_ptr_Function_int Function %22
-      %x_191 = OpVariable %_ptr_Function_int Function %22
-  %x_191_phi = OpVariable %_ptr_Function_int Function %22
-  %x_223_phi = OpVariable %_ptr_Function_int Function %22
-  %x_251_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_249 = OpVariable %_ptr_Function_int Function %22
-      %x_241 = OpVariable %_ptr_Function_int Function %22
-      %x_224 = OpVariable %_ptr_Function_int Function %22
-  %x_224_phi = OpVariable %_ptr_Function_int Function %22
-  %x_256_phi = OpVariable %_ptr_Function_int Function %22
-  %x_284_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_282 = OpVariable %_ptr_Function_int Function %22
-      %x_274 = OpVariable %_ptr_Function_int Function %22
-      %x_257 = OpVariable %_ptr_Function_int Function %22
-  %x_257_phi = OpVariable %_ptr_Function_int Function %22
-  %x_289_phi = OpVariable %_ptr_Function_int Function %22
-  %x_317_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_315 = OpVariable %_ptr_Function_int Function %22
-      %x_307 = OpVariable %_ptr_Function_int Function %22
-      %x_290 = OpVariable %_ptr_Function_int Function %22
-  %x_290_phi = OpVariable %_ptr_Function_int Function %22
-  %x_322_phi = OpVariable %_ptr_Function_int Function %22
-  %x_350_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_348 = OpVariable %_ptr_Function_int Function %22
-      %x_340 = OpVariable %_ptr_Function_int Function %22
-      %x_323 = OpVariable %_ptr_Function_int Function %22
-  %x_323_phi = OpVariable %_ptr_Function_int Function %22
-      %x_381 = OpVariable %_ptr_Function_int Function %22
-      %x_391 = OpVariable %_ptr_Function_int Function %22
-      %x_396 = OpVariable %_ptr_Function_int Function %22
-      %x_359 = OpVariable %_ptr_Function_int Function %22
-  %x_354_phi = OpVariable %_ptr_Function_int Function %22
-  %x_357_phi = OpVariable %_ptr_Function_int Function %22
-  %x_366_phi = OpVariable %_ptr_Function_int Function %22
-  %x_381_phi = OpVariable %_ptr_Function_int Function %22
-  %x_382_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_354 = OpVariable %_ptr_Function_int Function %22
-      %x_390 = OpVariable %_ptr_Function_int Function %22
-      %x_395 = OpVariable %_ptr_Function_int Function %22
-  %x_391_phi = OpVariable %_ptr_Function_int Function %22
-  %x_396_phi = OpVariable %_ptr_Function_int Function %22
-         %33 = OpAccessChain %_ptr_Function_BST %tree %int_0
-               OpStore %33 %36
-               OpSelectionMerge %37 None
-               OpSwitch %uint_0 %39
-         %39 = OpLabel
-               OpStore %x_58_phi %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %48 = OpLoad %int %x_58_phi
-               OpStore %x_86_phi %false
-         %51 = OpSLessThanEqual %bool %48 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %41
-         %52 = OpLabel
-         %55 = OpAccessChain %_ptr_Function_int %tree %48 %uint_0
-         %56 = OpLoad %int %55
-         %58 = OpSLessThanEqual %bool %int_5 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-         %64 = OpLoad %int %63
-         %65 = OpIEqual %bool %64 %int_n1
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-         %69 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-               OpStore %69 %int_1
-         %70 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %70 %71
-               OpStore %x_86_phi %true
-               OpBranch %41
-         %68 = OpLabel
-         %73 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-         %74 = OpLoad %int %73
-               OpStore %x_84 %74
-         %75 = OpLoad %int %x_84
-               OpStore %x_59_phi %75
-               OpBranch %42
-         %66 = OpLabel
-               OpReturn
-         %61 = OpLabel
-         %77 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-         %78 = OpLoad %int %77
-         %79 = OpIEqual %bool %78 %int_n1
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-               OpStore %83 %int_1
-         %84 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %84 %71
-               OpStore %x_86_phi %true
-               OpBranch %41
-         %82 = OpLabel
-         %85 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-         %86 = OpLoad %int %85
-               OpStore %x_76 %86
-         %87 = OpLoad %int %x_76
-               OpStore %x_59_phi %87
-               OpBranch %42
-         %80 = OpLabel
-               OpReturn
-         %59 = OpLabel
-               OpReturn
-         %42 = OpLabel
-         %88 = OpLoad %int %x_59_phi
-               OpStore %x_59 %88
-         %89 = OpLoad %int %x_59
-               OpStore %x_58_phi %89
-               OpBranch %40
-         %41 = OpLabel
-         %90 = OpLoad %bool %x_86_phi
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %91
-         %92 = OpLabel
-               OpBranch %37
-         %91 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpSelectionMerge %95 None
-               OpSwitch %uint_0 %96
-         %96 = OpLabel
-               OpStore %x_91_phi %int_0
-               OpBranch %97
-         %97 = OpLabel
-               OpLoopMerge %98 %99 None
-               OpBranch %100
-        %100 = OpLabel
-        %105 = OpLoad %int %x_91_phi
-               OpStore %x_119_phi %false
-        %107 = OpSLessThanEqual %bool %105 %int_2
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %110
-        %109 = OpLabel
-               OpBranch %108
-        %110 = OpLabel
-               OpBranch %98
-        %108 = OpLabel
-        %111 = OpAccessChain %_ptr_Function_int %tree %105 %uint_0
-        %112 = OpLoad %int %111
-        %114 = OpSLessThanEqual %bool %int_12 %112
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-        %119 = OpLoad %int %118
-        %120 = OpIEqual %bool %119 %int_n1
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-        %124 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-               OpStore %124 %int_2
-        %125 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %125 %126
-               OpStore %x_119_phi %true
-               OpBranch %98
-        %123 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-        %128 = OpLoad %int %127
-               OpStore %x_117 %128
-        %129 = OpLoad %int %x_117
-               OpStore %x_92_phi %129
-               OpBranch %99
-        %121 = OpLabel
-               OpReturn
-        %117 = OpLabel
-        %130 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-        %131 = OpLoad %int %130
-        %132 = OpIEqual %bool %131 %int_n1
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %135
-        %134 = OpLabel
-        %136 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-               OpStore %136 %int_2
-        %137 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %137 %126
-               OpStore %x_119_phi %true
-               OpBranch %98
-        %135 = OpLabel
-        %138 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-        %139 = OpLoad %int %138
-               OpStore %x_109 %139
-        %140 = OpLoad %int %x_109
-               OpStore %x_92_phi %140
-               OpBranch %99
-        %133 = OpLabel
-               OpReturn
-        %115 = OpLabel
-               OpReturn
-         %99 = OpLabel
-        %141 = OpLoad %int %x_92_phi
-               OpStore %x_92 %141
-        %142 = OpLoad %int %x_92
-               OpStore %x_91_phi %142
-               OpBranch %97
-         %98 = OpLabel
-        %143 = OpLoad %bool %x_119_phi
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %144
-        %145 = OpLabel
-               OpBranch %95
-        %144 = OpLabel
-               OpBranch %95
-         %95 = OpLabel
-               OpSelectionMerge %148 None
-               OpSwitch %uint_0 %149
-        %149 = OpLabel
-               OpStore %x_124_phi %int_0
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %158 = OpLoad %int %x_124_phi
-               OpStore %x_152_phi %false
-        %160 = OpSLessThanEqual %bool %158 %int_3
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %163
-        %162 = OpLabel
-               OpBranch %161
-        %163 = OpLabel
-               OpBranch %151
-        %161 = OpLabel
-        %164 = OpAccessChain %_ptr_Function_int %tree %158 %uint_0
-        %165 = OpLoad %int %164
-        %167 = OpSLessThanEqual %bool %int_15 %165
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-        %171 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-        %172 = OpLoad %int %171
-        %173 = OpIEqual %bool %172 %int_n1
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-        %177 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-               OpStore %177 %int_3
-        %178 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %178 %179
-               OpStore %x_152_phi %true
-               OpBranch %151
-        %176 = OpLabel
-        %180 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-        %181 = OpLoad %int %180
-               OpStore %x_150 %181
-        %182 = OpLoad %int %x_150
-               OpStore %x_125_phi %182
-               OpBranch %152
-        %174 = OpLabel
-               OpReturn
-        %170 = OpLabel
-        %183 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-        %184 = OpLoad %int %183
-        %185 = OpIEqual %bool %184 %int_n1
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-        %189 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-               OpStore %189 %int_3
-        %190 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %190 %179
-               OpStore %x_152_phi %true
-               OpBranch %151
-        %188 = OpLabel
-        %191 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-        %192 = OpLoad %int %191
-               OpStore %x_142 %192
-        %193 = OpLoad %int %x_142
-               OpStore %x_125_phi %193
-               OpBranch %152
-        %186 = OpLabel
-               OpReturn
-        %168 = OpLabel
-               OpReturn
-        %152 = OpLabel
-        %194 = OpLoad %int %x_125_phi
-               OpStore %x_125 %194
-        %195 = OpLoad %int %x_125
-               OpStore %x_124_phi %195
-               OpBranch %150
-        %151 = OpLabel
-        %196 = OpLoad %bool %x_152_phi
-               OpSelectionMerge %197 None
-               OpBranchConditional %196 %198 %197
-        %198 = OpLabel
-               OpBranch %148
-        %197 = OpLabel
-               OpBranch %148
-        %148 = OpLabel
-               OpSelectionMerge %201 None
-               OpSwitch %uint_0 %202
-        %202 = OpLabel
-               OpStore %x_157_phi %int_0
-               OpBranch %203
-        %203 = OpLabel
-               OpLoopMerge %204 %205 None
-               OpBranch %206
-        %206 = OpLabel
-        %211 = OpLoad %int %x_157_phi
-               OpStore %x_185_phi %false
-        %213 = OpSLessThanEqual %bool %211 %int_4
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-               OpBranch %204
-        %214 = OpLabel
-        %217 = OpAccessChain %_ptr_Function_int %tree %211 %uint_0
-        %218 = OpLoad %int %217
-        %220 = OpSLessThanEqual %bool %int_7 %218
-               OpSelectionMerge %221 None
-               OpBranchConditional %220 %222 %223
-        %222 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-        %225 = OpLoad %int %224
-        %226 = OpIEqual %bool %225 %int_n1
-               OpSelectionMerge %227 None
-               OpBranchConditional %226 %228 %229
-        %228 = OpLabel
-        %230 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-               OpStore %230 %int_4
-        %231 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %231 %232
-               OpStore %x_185_phi %true
-               OpBranch %204
-        %229 = OpLabel
-        %233 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-        %234 = OpLoad %int %233
-               OpStore %x_183 %234
-        %235 = OpLoad %int %x_183
-               OpStore %x_158_phi %235
-               OpBranch %205
-        %227 = OpLabel
-               OpReturn
-        %223 = OpLabel
-        %236 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-        %237 = OpLoad %int %236
-        %238 = OpIEqual %bool %237 %int_n1
-               OpSelectionMerge %239 None
-               OpBranchConditional %238 %240 %241
-        %240 = OpLabel
-        %242 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-               OpStore %242 %int_4
-        %243 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %243 %232
-               OpStore %x_185_phi %true
-               OpBranch %204
-        %241 = OpLabel
-        %244 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-        %245 = OpLoad %int %244
-               OpStore %x_175 %245
-        %246 = OpLoad %int %x_175
-               OpStore %x_158_phi %246
-               OpBranch %205
-        %239 = OpLabel
-               OpReturn
-        %221 = OpLabel
-               OpReturn
-        %205 = OpLabel
-        %247 = OpLoad %int %x_158_phi
-               OpStore %x_158 %247
-        %248 = OpLoad %int %x_158
-               OpStore %x_157_phi %248
-               OpBranch %203
-        %204 = OpLabel
-        %249 = OpLoad %bool %x_185_phi
-               OpSelectionMerge %250 None
-               OpBranchConditional %249 %251 %250
-        %251 = OpLabel
-               OpBranch %201
-        %250 = OpLabel
-               OpBranch %201
-        %201 = OpLabel
-               OpSelectionMerge %254 None
-               OpSwitch %uint_0 %255
-        %255 = OpLabel
-               OpStore %x_190_phi %int_0
-               OpBranch %256
-        %256 = OpLabel
-               OpLoopMerge %257 %258 None
-               OpBranch %259
-        %259 = OpLabel
-        %264 = OpLoad %int %x_190_phi
-               OpStore %x_218_phi %false
-        %265 = OpSLessThanEqual %bool %264 %int_5
-               OpSelectionMerge %266 None
-               OpBranchConditional %265 %267 %268
-        %267 = OpLabel
-               OpBranch %266
-        %268 = OpLabel
-               OpBranch %257
-        %266 = OpLabel
-        %269 = OpAccessChain %_ptr_Function_int %tree %264 %uint_0
-        %270 = OpLoad %int %269
-        %272 = OpSLessThanEqual %bool %int_8 %270
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %275
-        %274 = OpLabel
-        %276 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-        %277 = OpLoad %int %276
-        %278 = OpIEqual %bool %277 %int_n1
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
-        %282 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-               OpStore %282 %int_5
-        %283 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %283 %284
-               OpStore %x_218_phi %true
-               OpBranch %257
-        %281 = OpLabel
-        %285 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-        %286 = OpLoad %int %285
-               OpStore %x_216 %286
-        %287 = OpLoad %int %x_216
-               OpStore %x_191_phi %287
-               OpBranch %258
-        %279 = OpLabel
-               OpReturn
-        %275 = OpLabel
-        %288 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-        %289 = OpLoad %int %288
-        %290 = OpIEqual %bool %289 %int_n1
-               OpSelectionMerge %291 None
-               OpBranchConditional %290 %292 %293
-        %292 = OpLabel
-        %294 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-               OpStore %294 %int_5
-        %295 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %295 %284
-               OpStore %x_218_phi %true
-               OpBranch %257
-        %293 = OpLabel
-        %296 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-        %297 = OpLoad %int %296
-               OpStore %x_208 %297
-        %298 = OpLoad %int %x_208
-               OpStore %x_191_phi %298
-               OpBranch %258
-        %291 = OpLabel
-               OpReturn
-        %273 = OpLabel
-               OpReturn
-        %258 = OpLabel
-        %299 = OpLoad %int %x_191_phi
-               OpStore %x_191 %299
-        %300 = OpLoad %int %x_191
-               OpStore %x_190_phi %300
-               OpBranch %256
-        %257 = OpLabel
-        %301 = OpLoad %bool %x_218_phi
-               OpSelectionMerge %302 None
-               OpBranchConditional %301 %303 %302
-        %303 = OpLabel
-               OpBranch %254
-        %302 = OpLabel
-               OpBranch %254
-        %254 = OpLabel
-               OpSelectionMerge %306 None
-               OpSwitch %uint_0 %307
-        %307 = OpLabel
-               OpStore %x_223_phi %int_0
-               OpBranch %308
-        %308 = OpLabel
-               OpLoopMerge %309 %310 None
-               OpBranch %311
-        %311 = OpLabel
-        %316 = OpLoad %int %x_223_phi
-               OpStore %x_251_phi %false
-        %318 = OpSLessThanEqual %bool %316 %int_6
-               OpSelectionMerge %319 None
-               OpBranchConditional %318 %320 %321
-        %320 = OpLabel
-               OpBranch %319
-        %321 = OpLabel
-               OpBranch %309
-        %319 = OpLabel
-        %322 = OpAccessChain %_ptr_Function_int %tree %316 %uint_0
-        %323 = OpLoad %int %322
-        %324 = OpSLessThanEqual %bool %int_2 %323
-               OpSelectionMerge %325 None
-               OpBranchConditional %324 %326 %327
-        %326 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-        %329 = OpLoad %int %328
-        %330 = OpIEqual %bool %329 %int_n1
-               OpSelectionMerge %331 None
-               OpBranchConditional %330 %332 %333
-        %332 = OpLabel
-        %334 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-               OpStore %334 %int_6
-        %335 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %335 %336
-               OpStore %x_251_phi %true
-               OpBranch %309
-        %333 = OpLabel
-        %337 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-        %338 = OpLoad %int %337
-               OpStore %x_249 %338
-        %339 = OpLoad %int %x_249
-               OpStore %x_224_phi %339
-               OpBranch %310
-        %331 = OpLabel
-               OpReturn
-        %327 = OpLabel
-        %340 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-        %341 = OpLoad %int %340
-        %342 = OpIEqual %bool %341 %int_n1
-               OpSelectionMerge %343 None
-               OpBranchConditional %342 %344 %345
-        %344 = OpLabel
-        %346 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-               OpStore %346 %int_6
-        %347 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %347 %336
-               OpStore %x_251_phi %true
-               OpBranch %309
-        %345 = OpLabel
-        %348 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-        %349 = OpLoad %int %348
-               OpStore %x_241 %349
-        %350 = OpLoad %int %x_241
-               OpStore %x_224_phi %350
-               OpBranch %310
-        %343 = OpLabel
-               OpReturn
-        %325 = OpLabel
-               OpReturn
-        %310 = OpLabel
-        %351 = OpLoad %int %x_224_phi
-               OpStore %x_224 %351
-        %352 = OpLoad %int %x_224
-               OpStore %x_223_phi %352
-               OpBranch %308
-        %309 = OpLabel
-        %353 = OpLoad %bool %x_251_phi
-               OpSelectionMerge %354 None
-               OpBranchConditional %353 %355 %354
-        %355 = OpLabel
-               OpBranch %306
-        %354 = OpLabel
-               OpBranch %306
-        %306 = OpLabel
-               OpSelectionMerge %358 None
-               OpSwitch %uint_0 %359
-        %359 = OpLabel
-               OpStore %x_256_phi %int_0
-               OpBranch %360
-        %360 = OpLabel
-               OpLoopMerge %361 %362 None
-               OpBranch %363
-        %363 = OpLabel
-        %368 = OpLoad %int %x_256_phi
-               OpStore %x_284_phi %false
-        %369 = OpSLessThanEqual %bool %368 %int_7
-               OpSelectionMerge %370 None
-               OpBranchConditional %369 %371 %372
-        %371 = OpLabel
-               OpBranch %370
-        %372 = OpLabel
-               OpBranch %361
-        %370 = OpLabel
-        %373 = OpAccessChain %_ptr_Function_int %tree %368 %uint_0
-        %374 = OpLoad %int %373
-        %375 = OpSLessThanEqual %bool %int_6 %374
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %378
-        %377 = OpLabel
-        %379 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-        %380 = OpLoad %int %379
-        %381 = OpIEqual %bool %380 %int_n1
-               OpSelectionMerge %382 None
-               OpBranchConditional %381 %383 %384
-        %383 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-               OpStore %385 %int_7
-        %386 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %386 %387
-               OpStore %x_284_phi %true
-               OpBranch %361
-        %384 = OpLabel
-        %388 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-        %389 = OpLoad %int %388
-               OpStore %x_282 %389
-        %390 = OpLoad %int %x_282
-               OpStore %x_257_phi %390
-               OpBranch %362
-        %382 = OpLabel
-               OpReturn
-        %378 = OpLabel
-        %391 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-        %392 = OpLoad %int %391
-        %393 = OpIEqual %bool %392 %int_n1
-               OpSelectionMerge %394 None
-               OpBranchConditional %393 %395 %396
-        %395 = OpLabel
-        %397 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-               OpStore %397 %int_7
-        %398 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %398 %387
-               OpStore %x_284_phi %true
-               OpBranch %361
-        %396 = OpLabel
-        %399 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-        %400 = OpLoad %int %399
-               OpStore %x_274 %400
-        %401 = OpLoad %int %x_274
-               OpStore %x_257_phi %401
-               OpBranch %362
-        %394 = OpLabel
-               OpReturn
-        %376 = OpLabel
-               OpReturn
-        %362 = OpLabel
-        %402 = OpLoad %int %x_257_phi
-               OpStore %x_257 %402
-        %403 = OpLoad %int %x_257
-               OpStore %x_256_phi %403
-               OpBranch %360
-        %361 = OpLabel
-        %404 = OpLoad %bool %x_284_phi
-               OpSelectionMerge %405 None
-               OpBranchConditional %404 %406 %405
-        %406 = OpLabel
-               OpBranch %358
-        %405 = OpLabel
-               OpBranch %358
-        %358 = OpLabel
-               OpSelectionMerge %409 None
-               OpSwitch %uint_0 %410
-        %410 = OpLabel
-               OpStore %x_289_phi %int_0
-               OpBranch %411
-        %411 = OpLabel
-               OpLoopMerge %412 %413 None
-               OpBranch %414
-        %414 = OpLabel
-        %419 = OpLoad %int %x_289_phi
-               OpStore %x_317_phi %false
-        %420 = OpSLessThanEqual %bool %419 %int_8
-               OpSelectionMerge %421 None
-               OpBranchConditional %420 %422 %423
-        %422 = OpLabel
-               OpBranch %421
-        %423 = OpLabel
-               OpBranch %412
-        %421 = OpLabel
-        %424 = OpAccessChain %_ptr_Function_int %tree %419 %uint_0
-        %425 = OpLoad %int %424
-        %427 = OpSLessThanEqual %bool %int_17 %425
-               OpSelectionMerge %428 None
-               OpBranchConditional %427 %429 %430
-        %429 = OpLabel
-        %431 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-        %432 = OpLoad %int %431
-        %433 = OpIEqual %bool %432 %int_n1
-               OpSelectionMerge %434 None
-               OpBranchConditional %433 %435 %436
-        %435 = OpLabel
-        %437 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-               OpStore %437 %int_8
-        %438 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %438 %439
-               OpStore %x_317_phi %true
-               OpBranch %412
-        %436 = OpLabel
-        %440 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-        %441 = OpLoad %int %440
-               OpStore %x_315 %441
-        %442 = OpLoad %int %x_315
-               OpStore %x_290_phi %442
-               OpBranch %413
-        %434 = OpLabel
-               OpReturn
-        %430 = OpLabel
-        %443 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-        %444 = OpLoad %int %443
-        %445 = OpIEqual %bool %444 %int_n1
-               OpSelectionMerge %446 None
-               OpBranchConditional %445 %447 %448
-        %447 = OpLabel
-        %449 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-               OpStore %449 %int_8
-        %450 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %450 %439
-               OpStore %x_317_phi %true
-               OpBranch %412
-        %448 = OpLabel
-        %451 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-        %452 = OpLoad %int %451
-               OpStore %x_307 %452
-        %453 = OpLoad %int %x_307
-               OpStore %x_290_phi %453
-               OpBranch %413
-        %446 = OpLabel
-               OpReturn
-        %428 = OpLabel
-               OpReturn
-        %413 = OpLabel
-        %454 = OpLoad %int %x_290_phi
-               OpStore %x_290 %454
-        %455 = OpLoad %int %x_290
-               OpStore %x_289_phi %455
-               OpBranch %411
-        %412 = OpLabel
-        %456 = OpLoad %bool %x_317_phi
-               OpSelectionMerge %457 None
-               OpBranchConditional %456 %458 %457
-        %458 = OpLabel
-               OpBranch %409
-        %457 = OpLabel
-               OpBranch %409
-        %409 = OpLabel
-               OpSelectionMerge %461 None
-               OpSwitch %uint_0 %462
-        %462 = OpLabel
-               OpStore %x_322_phi %int_0
-               OpBranch %463
-        %463 = OpLabel
-               OpLoopMerge %464 %465 None
-               OpBranch %466
-        %466 = OpLabel
-        %471 = OpLoad %int %x_322_phi
-               OpStore %x_350_phi %false
-        %472 = OpSLessThanEqual %bool %471 %int_9
-               OpSelectionMerge %473 None
-               OpBranchConditional %472 %474 %475
-        %474 = OpLabel
-               OpBranch %473
-        %475 = OpLabel
-               OpBranch %464
-        %473 = OpLabel
-        %476 = OpAccessChain %_ptr_Function_int %tree %471 %uint_0
-        %477 = OpLoad %int %476
-        %479 = OpSLessThanEqual %bool %int_13 %477
-               OpSelectionMerge %480 None
-               OpBranchConditional %479 %481 %482
-        %481 = OpLabel
-        %483 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-        %484 = OpLoad %int %483
-        %485 = OpIEqual %bool %484 %int_n1
-               OpSelectionMerge %486 None
-               OpBranchConditional %485 %487 %488
-        %487 = OpLabel
-        %489 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-               OpStore %489 %int_9
-        %490 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %490 %491
-               OpStore %x_350_phi %true
-               OpBranch %464
-        %488 = OpLabel
-        %492 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-        %493 = OpLoad %int %492
-               OpStore %x_348 %493
-        %494 = OpLoad %int %x_348
-               OpStore %x_323_phi %494
-               OpBranch %465
-        %486 = OpLabel
-               OpReturn
-        %482 = OpLabel
-        %495 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-        %496 = OpLoad %int %495
-        %497 = OpIEqual %bool %496 %int_n1
-               OpSelectionMerge %498 None
-               OpBranchConditional %497 %499 %500
-        %499 = OpLabel
-        %501 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-               OpStore %501 %int_9
-        %502 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %502 %491
-               OpStore %x_350_phi %true
-               OpBranch %464
-        %500 = OpLabel
-        %503 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-        %504 = OpLoad %int %503
-               OpStore %x_340 %504
-        %505 = OpLoad %int %x_340
-               OpStore %x_323_phi %505
-               OpBranch %465
-        %498 = OpLabel
-               OpReturn
-        %480 = OpLabel
-               OpReturn
-        %465 = OpLabel
-        %506 = OpLoad %int %x_323_phi
-               OpStore %x_323 %506
-        %507 = OpLoad %int %x_323
-               OpStore %x_322_phi %507
-               OpBranch %463
-        %464 = OpLabel
-        %508 = OpLoad %bool %x_350_phi
-               OpSelectionMerge %509 None
-               OpBranchConditional %508 %510 %509
-        %510 = OpLabel
-               OpBranch %461
-        %509 = OpLabel
-               OpBranch %461
-        %461 = OpLabel
-               OpStore %x_353_phi %int_0
-               OpStore %x_356_phi %int_0
-               OpStore %x_358_phi %int_0
-               OpBranch %511
-        %511 = OpLabel
-               OpLoopMerge %512 %513 None
-               OpBranch %514
-        %514 = OpLabel
-        %521 = OpLoad %int %x_353_phi
-        %522 = OpLoad %int %x_356_phi
-               OpStore %x_356 %522
-        %523 = OpLoad %int %x_358_phi
-        %525 = OpSLessThan %bool %523 %int_20
-               OpSelectionMerge %526 None
-               OpBranchConditional %525 %527 %528
-        %527 = OpLabel
-               OpBranch %526
-        %528 = OpLabel
-               OpBranch %512
-        %526 = OpLabel
-               OpSelectionMerge %532 None
-               OpSwitch %uint_0 %533
-        %533 = OpLabel
-               OpStore %x_366_phi %int_0
-               OpBranch %534
-        %534 = OpLabel
-               OpLoopMerge %535 %536 None
-               OpBranch %537
-        %537 = OpLabel
-        %538 = OpLoad %int %x_366_phi
-               OpStore %x_381_phi %521
-               OpStore %x_382_phi %false
-        %539 = OpINotEqual %bool %538 %int_n1
-               OpSelectionMerge %540 None
-               OpBranchConditional %539 %541 %542
-        %541 = OpLabel
-               OpBranch %540
-        %542 = OpLabel
-               OpBranch %535
-        %540 = OpLabel
-        %543 = OpAccessChain %_ptr_Function_BST %tree %538
-        %544 = OpLoad %BST %543
-        %545 = OpCompositeExtract %int %544 0
-        %546 = OpCompositeExtract %int %544 1
-        %547 = OpCompositeExtract %int %544 2
-        %548 = OpIEqual %bool %545 %523
-               OpSelectionMerge %549 None
-               OpBranchConditional %548 %550 %549
-        %550 = OpLabel
-               OpStore %x_381_phi %523
-               OpStore %x_382_phi %true
-               OpBranch %535
-        %549 = OpLabel
-               OpBranch %536
-        %536 = OpLabel
-        %552 = OpSGreaterThan %bool %523 %545
-        %551 = OpSelect %int %552 %547 %546
-               OpStore %x_366_phi %551
-               OpBranch %534
-        %535 = OpLabel
-        %553 = OpLoad %int %x_381_phi
-               OpStore %x_381 %553
-        %554 = OpLoad %bool %x_382_phi
-        %555 = OpLoad %int %x_381
-               OpStore %x_354_phi %555
-               OpSelectionMerge %556 None
-               OpBranchConditional %554 %557 %556
-        %557 = OpLabel
-               OpBranch %532
-        %556 = OpLabel
-               OpStore %x_354_phi %int_n1
-               OpBranch %532
-        %532 = OpLabel
-        %563 = OpLoad %int %x_354_phi
-               OpStore %x_354 %563
-               OpSelectionMerge %564 None
-               OpSwitch %523 %565 2 %566 5 %566 6 %566 7 %566 8 %566 9 %566 12 %566 13 %566 15 %566 17 %566
-        %566 = OpLabel
-        %567 = OpLoad %int %x_356
-               OpStore %x_391_phi %567
-        %568 = OpLoad %int %x_354
-        %569 = OpCopyObject %int %523
-        %570 = OpIEqual %bool %568 %569
-               OpSelectionMerge %571 None
-               OpBranchConditional %570 %572 %571
-        %572 = OpLabel
-        %574 = OpLoad %int %x_356
-        %575 = OpCopyObject %int %int_1
-        %576 = OpIAdd %int %574 %575
-        %573 = OpCopyObject %int %576
-               OpStore %x_390 %573
-        %577 = OpLoad %int %x_390
-               OpStore %x_391_phi %577
-               OpBranch %571
-        %571 = OpLabel
-        %578 = OpLoad %int %x_391_phi
-               OpStore %x_391 %578
-        %579 = OpLoad %int %x_391
-               OpStore %x_357_phi %579
-               OpBranch %564
-        %565 = OpLabel
-        %580 = OpLoad %int %x_356
-               OpStore %x_396_phi %580
-        %581 = OpLoad %int %x_354
-        %582 = OpCopyObject %int %int_n1
-        %583 = OpIEqual %bool %581 %582
-               OpSelectionMerge %584 None
-               OpBranchConditional %583 %585 %584
-        %585 = OpLabel
-        %587 = OpLoad %int %x_356
-        %588 = OpCopyObject %int %int_1
-        %589 = OpIAdd %int %587 %588
-        %586 = OpCopyObject %int %589
-               OpStore %x_395 %586
-        %590 = OpLoad %int %x_395
-               OpStore %x_396_phi %590
-               OpBranch %584
-        %584 = OpLabel
-        %591 = OpLoad %int %x_396_phi
-               OpStore %x_396 %591
-        %592 = OpLoad %int %x_396
-               OpStore %x_357_phi %592
-               OpBranch %564
-        %564 = OpLabel
-        %593 = OpLoad %int %x_357_phi
-               OpBranch %513
-        %513 = OpLabel
-        %594 = OpIAdd %int %523 %int_1
-               OpStore %x_359 %594
-        %595 = OpLoad %int %x_354
-               OpStore %x_353_phi %595
-               OpStore %x_356_phi %593
-        %596 = OpLoad %int %x_359
-               OpStore %x_358_phi %596
-               OpBranch %511
-        %512 = OpLabel
-        %597 = OpLoad %int %x_356
-        %598 = OpCopyObject %int %int_20
-        %599 = OpIEqual %bool %597 %598
-               OpSelectionMerge %600 None
-               OpBranchConditional %599 %601 %602
-        %601 = OpLabel
-               OpStore %x_GLF_color %605
-               OpBranch %600
-        %602 = OpLabel
-               OpStore %x_GLF_color %606
-               OpBranch %600
-        %600 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %607
-        %610 = OpLabel
-        %611 = OpFunctionCall %void %main_1
-        %612 = OpLoad %v4float %x_GLF_color
-        %613 = OpCompositeConstruct %main_out %612
-               OpReturnValue %613
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-        %615 = OpLabel
-        %616 = OpFunctionCall %main_out %main_inner
-        %617 = OpCompositeExtract %v4float %616 0
-               OpStore %x_GLF_color_1_1 %617
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index 76d569e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,653 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var tree : array<BST, 10>;
-  var x_356 : i32;
-  var x_58_phi : i32;
-  var x_86_phi : bool;
-  var x_353_phi : i32;
-  var x_356_phi : i32;
-  var x_358_phi : i32;
-  tree[0] = BST(9, -1, -1);
-  switch(0u) {
-    default: {
-      x_58_phi = 0;
-      loop {
-        var x_84 : i32;
-        var x_76 : i32;
-        var x_59 : i32;
-        var x_59_phi : i32;
-        let x_58 : i32 = x_58_phi;
-        x_86_phi = false;
-        if ((x_58 <= 1)) {
-        } else {
-          break;
-        }
-        let x_65 : i32 = tree[x_58].data;
-        if ((5 <= x_65)) {
-          let x_78 : ptr<function, i32> = &(tree[x_58].leftIndex);
-          let x_79 : i32 = *(x_78);
-          if ((x_79 == -1)) {
-            *(x_78) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_86_phi = true;
-            break;
-          } else {
-            x_84 = *(x_78);
-            x_59_phi = x_84;
-            continue;
-          }
-          return;
-        } else {
-          let x_70 : ptr<function, i32> = &(tree[x_58].rightIndex);
-          let x_71 : i32 = *(x_70);
-          if ((x_71 == -1)) {
-            *(x_70) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_86_phi = true;
-            break;
-          } else {
-            x_76 = *(x_70);
-            x_59_phi = x_76;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_59 = x_59_phi;
-          x_58_phi = x_59;
-        }
-      }
-      let x_86 : bool = x_86_phi;
-      if (x_86) {
-        break;
-      }
-    }
-  }
-  var x_91_phi : i32;
-  var x_119_phi : bool;
-  switch(0u) {
-    default: {
-      x_91_phi = 0;
-      loop {
-        var x_117 : i32;
-        var x_109 : i32;
-        var x_92 : i32;
-        var x_92_phi : i32;
-        let x_91 : i32 = x_91_phi;
-        x_119_phi = false;
-        if ((x_91 <= 2)) {
-        } else {
-          break;
-        }
-        let x_98 : i32 = tree[x_91].data;
-        if ((12 <= x_98)) {
-          let x_111 : ptr<function, i32> = &(tree[x_91].leftIndex);
-          let x_112 : i32 = *(x_111);
-          if ((x_112 == -1)) {
-            *(x_111) = 2;
-            tree[2] = BST(12, -1, -1);
-            x_119_phi = true;
-            break;
-          } else {
-            x_117 = *(x_111);
-            x_92_phi = x_117;
-            continue;
-          }
-          return;
-        } else {
-          let x_103 : ptr<function, i32> = &(tree[x_91].rightIndex);
-          let x_104 : i32 = *(x_103);
-          if ((x_104 == -1)) {
-            *(x_103) = 2;
-            tree[2] = BST(12, -1, -1);
-            x_119_phi = true;
-            break;
-          } else {
-            x_109 = *(x_103);
-            x_92_phi = x_109;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_92 = x_92_phi;
-          x_91_phi = x_92;
-        }
-      }
-      let x_119 : bool = x_119_phi;
-      if (x_119) {
-        break;
-      }
-    }
-  }
-  var x_124_phi : i32;
-  var x_152_phi : bool;
-  switch(0u) {
-    default: {
-      x_124_phi = 0;
-      loop {
-        var x_150 : i32;
-        var x_142 : i32;
-        var x_125 : i32;
-        var x_125_phi : i32;
-        let x_124 : i32 = x_124_phi;
-        x_152_phi = false;
-        if ((x_124 <= 3)) {
-        } else {
-          break;
-        }
-        let x_131 : i32 = tree[x_124].data;
-        if ((15 <= x_131)) {
-          let x_144 : ptr<function, i32> = &(tree[x_124].leftIndex);
-          let x_145 : i32 = *(x_144);
-          if ((x_145 == -1)) {
-            *(x_144) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_152_phi = true;
-            break;
-          } else {
-            x_150 = *(x_144);
-            x_125_phi = x_150;
-            continue;
-          }
-          return;
-        } else {
-          let x_136 : ptr<function, i32> = &(tree[x_124].rightIndex);
-          let x_137 : i32 = *(x_136);
-          if ((x_137 == -1)) {
-            *(x_136) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_152_phi = true;
-            break;
-          } else {
-            x_142 = *(x_136);
-            x_125_phi = x_142;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_125 = x_125_phi;
-          x_124_phi = x_125;
-        }
-      }
-      let x_152 : bool = x_152_phi;
-      if (x_152) {
-        break;
-      }
-    }
-  }
-  var x_157_phi : i32;
-  var x_185_phi : bool;
-  switch(0u) {
-    default: {
-      x_157_phi = 0;
-      loop {
-        var x_183 : i32;
-        var x_175 : i32;
-        var x_158 : i32;
-        var x_158_phi : i32;
-        let x_157 : i32 = x_157_phi;
-        x_185_phi = false;
-        if ((x_157 <= 4)) {
-        } else {
-          break;
-        }
-        let x_164 : i32 = tree[x_157].data;
-        if ((7 <= x_164)) {
-          let x_177 : ptr<function, i32> = &(tree[x_157].leftIndex);
-          let x_178 : i32 = *(x_177);
-          if ((x_178 == -1)) {
-            *(x_177) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_185_phi = true;
-            break;
-          } else {
-            x_183 = *(x_177);
-            x_158_phi = x_183;
-            continue;
-          }
-          return;
-        } else {
-          let x_169 : ptr<function, i32> = &(tree[x_157].rightIndex);
-          let x_170 : i32 = *(x_169);
-          if ((x_170 == -1)) {
-            *(x_169) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_185_phi = true;
-            break;
-          } else {
-            x_175 = *(x_169);
-            x_158_phi = x_175;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_158 = x_158_phi;
-          x_157_phi = x_158;
-        }
-      }
-      let x_185 : bool = x_185_phi;
-      if (x_185) {
-        break;
-      }
-    }
-  }
-  var x_190_phi : i32;
-  var x_218_phi : bool;
-  switch(0u) {
-    default: {
-      x_190_phi = 0;
-      loop {
-        var x_216 : i32;
-        var x_208 : i32;
-        var x_191 : i32;
-        var x_191_phi : i32;
-        let x_190 : i32 = x_190_phi;
-        x_218_phi = false;
-        if ((x_190 <= 5)) {
-        } else {
-          break;
-        }
-        let x_197 : i32 = tree[x_190].data;
-        if ((8 <= x_197)) {
-          let x_210 : ptr<function, i32> = &(tree[x_190].leftIndex);
-          let x_211 : i32 = *(x_210);
-          if ((x_211 == -1)) {
-            *(x_210) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_218_phi = true;
-            break;
-          } else {
-            x_216 = *(x_210);
-            x_191_phi = x_216;
-            continue;
-          }
-          return;
-        } else {
-          let x_202 : ptr<function, i32> = &(tree[x_190].rightIndex);
-          let x_203 : i32 = *(x_202);
-          if ((x_203 == -1)) {
-            *(x_202) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_218_phi = true;
-            break;
-          } else {
-            x_208 = *(x_202);
-            x_191_phi = x_208;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_191 = x_191_phi;
-          x_190_phi = x_191;
-        }
-      }
-      let x_218 : bool = x_218_phi;
-      if (x_218) {
-        break;
-      }
-    }
-  }
-  var x_223_phi : i32;
-  var x_251_phi : bool;
-  switch(0u) {
-    default: {
-      x_223_phi = 0;
-      loop {
-        var x_249 : i32;
-        var x_241 : i32;
-        var x_224 : i32;
-        var x_224_phi : i32;
-        let x_223 : i32 = x_223_phi;
-        x_251_phi = false;
-        if ((x_223 <= 6)) {
-        } else {
-          break;
-        }
-        let x_230 : i32 = tree[x_223].data;
-        if ((2 <= x_230)) {
-          let x_243 : ptr<function, i32> = &(tree[x_223].leftIndex);
-          let x_244 : i32 = *(x_243);
-          if ((x_244 == -1)) {
-            *(x_243) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_251_phi = true;
-            break;
-          } else {
-            x_249 = *(x_243);
-            x_224_phi = x_249;
-            continue;
-          }
-          return;
-        } else {
-          let x_235 : ptr<function, i32> = &(tree[x_223].rightIndex);
-          let x_236 : i32 = *(x_235);
-          if ((x_236 == -1)) {
-            *(x_235) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_251_phi = true;
-            break;
-          } else {
-            x_241 = *(x_235);
-            x_224_phi = x_241;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_224 = x_224_phi;
-          x_223_phi = x_224;
-        }
-      }
-      let x_251 : bool = x_251_phi;
-      if (x_251) {
-        break;
-      }
-    }
-  }
-  var x_256_phi : i32;
-  var x_284_phi : bool;
-  switch(0u) {
-    default: {
-      x_256_phi = 0;
-      loop {
-        var x_282 : i32;
-        var x_274 : i32;
-        var x_257 : i32;
-        var x_257_phi : i32;
-        let x_256 : i32 = x_256_phi;
-        x_284_phi = false;
-        if ((x_256 <= 7)) {
-        } else {
-          break;
-        }
-        let x_263 : i32 = tree[x_256].data;
-        if ((6 <= x_263)) {
-          let x_276 : ptr<function, i32> = &(tree[x_256].leftIndex);
-          let x_277 : i32 = *(x_276);
-          if ((x_277 == -1)) {
-            *(x_276) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_284_phi = true;
-            break;
-          } else {
-            x_282 = *(x_276);
-            x_257_phi = x_282;
-            continue;
-          }
-          return;
-        } else {
-          let x_268 : ptr<function, i32> = &(tree[x_256].rightIndex);
-          let x_269 : i32 = *(x_268);
-          if ((x_269 == -1)) {
-            *(x_268) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_284_phi = true;
-            break;
-          } else {
-            x_274 = *(x_268);
-            x_257_phi = x_274;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_257 = x_257_phi;
-          x_256_phi = x_257;
-        }
-      }
-      let x_284 : bool = x_284_phi;
-      if (x_284) {
-        break;
-      }
-    }
-  }
-  var x_289_phi : i32;
-  var x_317_phi : bool;
-  switch(0u) {
-    default: {
-      x_289_phi = 0;
-      loop {
-        var x_315 : i32;
-        var x_307 : i32;
-        var x_290 : i32;
-        var x_290_phi : i32;
-        let x_289 : i32 = x_289_phi;
-        x_317_phi = false;
-        if ((x_289 <= 8)) {
-        } else {
-          break;
-        }
-        let x_296 : i32 = tree[x_289].data;
-        if ((17 <= x_296)) {
-          let x_309 : ptr<function, i32> = &(tree[x_289].leftIndex);
-          let x_310 : i32 = *(x_309);
-          if ((x_310 == -1)) {
-            *(x_309) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_317_phi = true;
-            break;
-          } else {
-            x_315 = *(x_309);
-            x_290_phi = x_315;
-            continue;
-          }
-          return;
-        } else {
-          let x_301 : ptr<function, i32> = &(tree[x_289].rightIndex);
-          let x_302 : i32 = *(x_301);
-          if ((x_302 == -1)) {
-            *(x_301) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_317_phi = true;
-            break;
-          } else {
-            x_307 = *(x_301);
-            x_290_phi = x_307;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_290 = x_290_phi;
-          x_289_phi = x_290;
-        }
-      }
-      let x_317 : bool = x_317_phi;
-      if (x_317) {
-        break;
-      }
-    }
-  }
-  var x_322_phi : i32;
-  var x_350_phi : bool;
-  switch(0u) {
-    default: {
-      x_322_phi = 0;
-      loop {
-        var x_348 : i32;
-        var x_340 : i32;
-        var x_323 : i32;
-        var x_323_phi : i32;
-        let x_322 : i32 = x_322_phi;
-        x_350_phi = false;
-        if ((x_322 <= 9)) {
-        } else {
-          break;
-        }
-        let x_329 : i32 = tree[x_322].data;
-        if ((13 <= x_329)) {
-          let x_342 : ptr<function, i32> = &(tree[x_322].leftIndex);
-          let x_343 : i32 = *(x_342);
-          if ((x_343 == -1)) {
-            *(x_342) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_350_phi = true;
-            break;
-          } else {
-            x_348 = *(x_342);
-            x_323_phi = x_348;
-            continue;
-          }
-          return;
-        } else {
-          let x_334 : ptr<function, i32> = &(tree[x_322].rightIndex);
-          let x_335 : i32 = *(x_334);
-          if ((x_335 == -1)) {
-            *(x_334) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_350_phi = true;
-            break;
-          } else {
-            x_340 = *(x_334);
-            x_323_phi = x_340;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_323 = x_323_phi;
-          x_322_phi = x_323;
-        }
-      }
-      let x_350 : bool = x_350_phi;
-      if (x_350) {
-        break;
-      }
-    }
-  }
-  x_353_phi = 0;
-  x_356_phi = 0;
-  x_358_phi = 0;
-  loop {
-    var x_381 : i32;
-    var x_391 : i32;
-    var x_396 : i32;
-    var x_359 : i32;
-    var x_354_phi : i32;
-    var x_357_phi : i32;
-    let x_353 : i32 = x_353_phi;
-    x_356 = x_356_phi;
-    let x_358 : i32 = x_358_phi;
-    if ((x_358 < 20)) {
-    } else {
-      break;
-    }
-    var x_366_phi : i32;
-    var x_381_phi : i32;
-    var x_382_phi : bool;
-    switch(0u) {
-      default: {
-        x_366_phi = 0;
-        loop {
-          let x_366 : i32 = x_366_phi;
-          x_381_phi = x_353;
-          x_382_phi = false;
-          if ((x_366 != -1)) {
-          } else {
-            break;
-          }
-          let x_373 : BST = tree[x_366];
-          let x_374 : i32 = x_373.data;
-          let x_375 : i32 = x_373.leftIndex;
-          let x_376 : i32 = x_373.rightIndex;
-          if ((x_374 == x_358)) {
-            x_381_phi = x_358;
-            x_382_phi = true;
-            break;
-          }
-
-          continuing {
-            x_366_phi = select(x_375, x_376, (x_358 > x_374));
-          }
-        }
-        x_381 = x_381_phi;
-        let x_382 : bool = x_382_phi;
-        x_354_phi = x_381;
-        if (x_382) {
-          break;
-        }
-        x_354_phi = -1;
-      }
-    }
-    var x_354 : i32;
-    var x_390 : i32;
-    var x_395 : i32;
-    var x_391_phi : i32;
-    var x_396_phi : i32;
-    x_354 = x_354_phi;
-    switch(x_358) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        x_391_phi = x_356;
-        if ((x_354 == bitcast<i32>(x_358))) {
-          x_390 = bitcast<i32>((x_356 + bitcast<i32>(1)));
-          x_391_phi = x_390;
-        }
-        x_391 = x_391_phi;
-        x_357_phi = x_391;
-      }
-      default: {
-        x_396_phi = x_356;
-        if ((x_354 == bitcast<i32>(-1))) {
-          x_395 = bitcast<i32>((x_356 + bitcast<i32>(1)));
-          x_396_phi = x_395;
-        }
-        x_396 = x_396_phi;
-        x_357_phi = x_396;
-      }
-    }
-    let x_357 : i32 = x_357_phi;
-
-    continuing {
-      x_359 = (x_358 + 1);
-      x_353_phi = x_354;
-      x_356_phi = x_357;
-      x_358_phi = x_359;
-    }
-  }
-  if ((x_356 == bitcast<i32>(20))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.hlsl
deleted file mode 100644
index 5f9933f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,754 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  BST tree[10] = (BST[10])0;
-  int x_356 = 0;
-  int x_58_phi = 0;
-  bool x_86_phi = false;
-  int x_353_phi = 0;
-  int x_356_phi = 0;
-  int x_358_phi = 0;
-  const BST tint_symbol_1 = {9, -1, -1};
-  tree[0] = tint_symbol_1;
-  switch(0u) {
-    default: {
-      x_58_phi = 0;
-      while (true) {
-        int x_84 = 0;
-        int x_76 = 0;
-        int x_59 = 0;
-        int x_59_phi = 0;
-        const int x_58 = x_58_phi;
-        x_86_phi = false;
-        if ((x_58 <= 1)) {
-        } else {
-          break;
-        }
-        const int x_65 = tree[x_58].data;
-        if ((5 <= x_65)) {
-          const int x_78_save = x_58;
-          const int x_79 = tree[x_78_save].leftIndex;
-          if ((x_79 == -1)) {
-            tree[x_78_save].leftIndex = 1;
-            const BST tint_symbol_2 = {5, -1, -1};
-            tree[1] = tint_symbol_2;
-            x_86_phi = true;
-            break;
-          } else {
-            x_84 = tree[x_78_save].leftIndex;
-            x_59_phi = x_84;
-            {
-              x_59 = x_59_phi;
-              x_58_phi = x_59;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_70_save = x_58;
-          const int x_71 = tree[x_70_save].rightIndex;
-          if ((x_71 == -1)) {
-            tree[x_70_save].rightIndex = 1;
-            const BST tint_symbol_3 = {5, -1, -1};
-            tree[1] = tint_symbol_3;
-            x_86_phi = true;
-            break;
-          } else {
-            x_76 = tree[x_70_save].rightIndex;
-            x_59_phi = x_76;
-            {
-              x_59 = x_59_phi;
-              x_58_phi = x_59;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_59 = x_59_phi;
-          x_58_phi = x_59;
-        }
-      }
-      if (x_86_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_91_phi = 0;
-  bool x_119_phi = false;
-  switch(0u) {
-    default: {
-      x_91_phi = 0;
-      while (true) {
-        int x_117 = 0;
-        int x_109 = 0;
-        int x_92 = 0;
-        int x_92_phi = 0;
-        const int x_91 = x_91_phi;
-        x_119_phi = false;
-        if ((x_91 <= 2)) {
-        } else {
-          break;
-        }
-        const int x_98 = tree[x_91].data;
-        if ((12 <= x_98)) {
-          const int x_111_save = x_91;
-          const int x_112 = tree[x_111_save].leftIndex;
-          if ((x_112 == -1)) {
-            tree[x_111_save].leftIndex = 2;
-            const BST tint_symbol_4 = {12, -1, -1};
-            tree[2] = tint_symbol_4;
-            x_119_phi = true;
-            break;
-          } else {
-            x_117 = tree[x_111_save].leftIndex;
-            x_92_phi = x_117;
-            {
-              x_92 = x_92_phi;
-              x_91_phi = x_92;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_103_save = x_91;
-          const int x_104 = tree[x_103_save].rightIndex;
-          if ((x_104 == -1)) {
-            tree[x_103_save].rightIndex = 2;
-            const BST tint_symbol_5 = {12, -1, -1};
-            tree[2] = tint_symbol_5;
-            x_119_phi = true;
-            break;
-          } else {
-            x_109 = tree[x_103_save].rightIndex;
-            x_92_phi = x_109;
-            {
-              x_92 = x_92_phi;
-              x_91_phi = x_92;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_92 = x_92_phi;
-          x_91_phi = x_92;
-        }
-      }
-      if (x_119_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_124_phi = 0;
-  bool x_152_phi = false;
-  switch(0u) {
-    default: {
-      x_124_phi = 0;
-      while (true) {
-        int x_150 = 0;
-        int x_142 = 0;
-        int x_125 = 0;
-        int x_125_phi = 0;
-        const int x_124 = x_124_phi;
-        x_152_phi = false;
-        if ((x_124 <= 3)) {
-        } else {
-          break;
-        }
-        const int x_131 = tree[x_124].data;
-        if ((15 <= x_131)) {
-          const int x_144_save = x_124;
-          const int x_145 = tree[x_144_save].leftIndex;
-          if ((x_145 == -1)) {
-            tree[x_144_save].leftIndex = 3;
-            const BST tint_symbol_6 = {15, -1, -1};
-            tree[3] = tint_symbol_6;
-            x_152_phi = true;
-            break;
-          } else {
-            x_150 = tree[x_144_save].leftIndex;
-            x_125_phi = x_150;
-            {
-              x_125 = x_125_phi;
-              x_124_phi = x_125;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_136_save = x_124;
-          const int x_137 = tree[x_136_save].rightIndex;
-          if ((x_137 == -1)) {
-            tree[x_136_save].rightIndex = 3;
-            const BST tint_symbol_7 = {15, -1, -1};
-            tree[3] = tint_symbol_7;
-            x_152_phi = true;
-            break;
-          } else {
-            x_142 = tree[x_136_save].rightIndex;
-            x_125_phi = x_142;
-            {
-              x_125 = x_125_phi;
-              x_124_phi = x_125;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_125 = x_125_phi;
-          x_124_phi = x_125;
-        }
-      }
-      if (x_152_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_157_phi = 0;
-  bool x_185_phi = false;
-  switch(0u) {
-    default: {
-      x_157_phi = 0;
-      while (true) {
-        int x_183 = 0;
-        int x_175 = 0;
-        int x_158 = 0;
-        int x_158_phi = 0;
-        const int x_157 = x_157_phi;
-        x_185_phi = false;
-        if ((x_157 <= 4)) {
-        } else {
-          break;
-        }
-        const int x_164 = tree[x_157].data;
-        if ((7 <= x_164)) {
-          const int x_177_save = x_157;
-          const int x_178 = tree[x_177_save].leftIndex;
-          if ((x_178 == -1)) {
-            tree[x_177_save].leftIndex = 4;
-            const BST tint_symbol_8 = {7, -1, -1};
-            tree[4] = tint_symbol_8;
-            x_185_phi = true;
-            break;
-          } else {
-            x_183 = tree[x_177_save].leftIndex;
-            x_158_phi = x_183;
-            {
-              x_158 = x_158_phi;
-              x_157_phi = x_158;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_169_save = x_157;
-          const int x_170 = tree[x_169_save].rightIndex;
-          if ((x_170 == -1)) {
-            tree[x_169_save].rightIndex = 4;
-            const BST tint_symbol_9 = {7, -1, -1};
-            tree[4] = tint_symbol_9;
-            x_185_phi = true;
-            break;
-          } else {
-            x_175 = tree[x_169_save].rightIndex;
-            x_158_phi = x_175;
-            {
-              x_158 = x_158_phi;
-              x_157_phi = x_158;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_158 = x_158_phi;
-          x_157_phi = x_158;
-        }
-      }
-      if (x_185_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_190_phi = 0;
-  bool x_218_phi = false;
-  switch(0u) {
-    default: {
-      x_190_phi = 0;
-      while (true) {
-        int x_216 = 0;
-        int x_208 = 0;
-        int x_191 = 0;
-        int x_191_phi = 0;
-        const int x_190 = x_190_phi;
-        x_218_phi = false;
-        if ((x_190 <= 5)) {
-        } else {
-          break;
-        }
-        const int x_197 = tree[x_190].data;
-        if ((8 <= x_197)) {
-          const int x_210_save = x_190;
-          const int x_211 = tree[x_210_save].leftIndex;
-          if ((x_211 == -1)) {
-            tree[x_210_save].leftIndex = 5;
-            const BST tint_symbol_10 = {8, -1, -1};
-            tree[5] = tint_symbol_10;
-            x_218_phi = true;
-            break;
-          } else {
-            x_216 = tree[x_210_save].leftIndex;
-            x_191_phi = x_216;
-            {
-              x_191 = x_191_phi;
-              x_190_phi = x_191;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_202_save = x_190;
-          const int x_203 = tree[x_202_save].rightIndex;
-          if ((x_203 == -1)) {
-            tree[x_202_save].rightIndex = 5;
-            const BST tint_symbol_11 = {8, -1, -1};
-            tree[5] = tint_symbol_11;
-            x_218_phi = true;
-            break;
-          } else {
-            x_208 = tree[x_202_save].rightIndex;
-            x_191_phi = x_208;
-            {
-              x_191 = x_191_phi;
-              x_190_phi = x_191;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_191 = x_191_phi;
-          x_190_phi = x_191;
-        }
-      }
-      if (x_218_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_223_phi = 0;
-  bool x_251_phi = false;
-  switch(0u) {
-    default: {
-      x_223_phi = 0;
-      while (true) {
-        int x_249 = 0;
-        int x_241 = 0;
-        int x_224 = 0;
-        int x_224_phi = 0;
-        const int x_223 = x_223_phi;
-        x_251_phi = false;
-        if ((x_223 <= 6)) {
-        } else {
-          break;
-        }
-        const int x_230 = tree[x_223].data;
-        if ((2 <= x_230)) {
-          const int x_243_save = x_223;
-          const int x_244 = tree[x_243_save].leftIndex;
-          if ((x_244 == -1)) {
-            tree[x_243_save].leftIndex = 6;
-            const BST tint_symbol_12 = {2, -1, -1};
-            tree[6] = tint_symbol_12;
-            x_251_phi = true;
-            break;
-          } else {
-            x_249 = tree[x_243_save].leftIndex;
-            x_224_phi = x_249;
-            {
-              x_224 = x_224_phi;
-              x_223_phi = x_224;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_235_save = x_223;
-          const int x_236 = tree[x_235_save].rightIndex;
-          if ((x_236 == -1)) {
-            tree[x_235_save].rightIndex = 6;
-            const BST tint_symbol_13 = {2, -1, -1};
-            tree[6] = tint_symbol_13;
-            x_251_phi = true;
-            break;
-          } else {
-            x_241 = tree[x_235_save].rightIndex;
-            x_224_phi = x_241;
-            {
-              x_224 = x_224_phi;
-              x_223_phi = x_224;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_224 = x_224_phi;
-          x_223_phi = x_224;
-        }
-      }
-      if (x_251_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_256_phi = 0;
-  bool x_284_phi = false;
-  switch(0u) {
-    default: {
-      x_256_phi = 0;
-      while (true) {
-        int x_282 = 0;
-        int x_274 = 0;
-        int x_257 = 0;
-        int x_257_phi = 0;
-        const int x_256 = x_256_phi;
-        x_284_phi = false;
-        if ((x_256 <= 7)) {
-        } else {
-          break;
-        }
-        const int x_263 = tree[x_256].data;
-        if ((6 <= x_263)) {
-          const int x_276_save = x_256;
-          const int x_277 = tree[x_276_save].leftIndex;
-          if ((x_277 == -1)) {
-            tree[x_276_save].leftIndex = 7;
-            const BST tint_symbol_14 = {6, -1, -1};
-            tree[7] = tint_symbol_14;
-            x_284_phi = true;
-            break;
-          } else {
-            x_282 = tree[x_276_save].leftIndex;
-            x_257_phi = x_282;
-            {
-              x_257 = x_257_phi;
-              x_256_phi = x_257;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_268_save = x_256;
-          const int x_269 = tree[x_268_save].rightIndex;
-          if ((x_269 == -1)) {
-            tree[x_268_save].rightIndex = 7;
-            const BST tint_symbol_15 = {6, -1, -1};
-            tree[7] = tint_symbol_15;
-            x_284_phi = true;
-            break;
-          } else {
-            x_274 = tree[x_268_save].rightIndex;
-            x_257_phi = x_274;
-            {
-              x_257 = x_257_phi;
-              x_256_phi = x_257;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_257 = x_257_phi;
-          x_256_phi = x_257;
-        }
-      }
-      if (x_284_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_289_phi = 0;
-  bool x_317_phi = false;
-  switch(0u) {
-    default: {
-      x_289_phi = 0;
-      while (true) {
-        int x_315 = 0;
-        int x_307 = 0;
-        int x_290 = 0;
-        int x_290_phi = 0;
-        const int x_289 = x_289_phi;
-        x_317_phi = false;
-        if ((x_289 <= 8)) {
-        } else {
-          break;
-        }
-        const int x_296 = tree[x_289].data;
-        if ((17 <= x_296)) {
-          const int x_309_save = x_289;
-          const int x_310 = tree[x_309_save].leftIndex;
-          if ((x_310 == -1)) {
-            tree[x_309_save].leftIndex = 8;
-            const BST tint_symbol_16 = {17, -1, -1};
-            tree[8] = tint_symbol_16;
-            x_317_phi = true;
-            break;
-          } else {
-            x_315 = tree[x_309_save].leftIndex;
-            x_290_phi = x_315;
-            {
-              x_290 = x_290_phi;
-              x_289_phi = x_290;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_301_save = x_289;
-          const int x_302 = tree[x_301_save].rightIndex;
-          if ((x_302 == -1)) {
-            tree[x_301_save].rightIndex = 8;
-            const BST tint_symbol_17 = {17, -1, -1};
-            tree[8] = tint_symbol_17;
-            x_317_phi = true;
-            break;
-          } else {
-            x_307 = tree[x_301_save].rightIndex;
-            x_290_phi = x_307;
-            {
-              x_290 = x_290_phi;
-              x_289_phi = x_290;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_290 = x_290_phi;
-          x_289_phi = x_290;
-        }
-      }
-      if (x_317_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_322_phi = 0;
-  bool x_350_phi = false;
-  switch(0u) {
-    default: {
-      x_322_phi = 0;
-      while (true) {
-        int x_348 = 0;
-        int x_340 = 0;
-        int x_323 = 0;
-        int x_323_phi = 0;
-        const int x_322 = x_322_phi;
-        x_350_phi = false;
-        if ((x_322 <= 9)) {
-        } else {
-          break;
-        }
-        const int x_329 = tree[x_322].data;
-        if ((13 <= x_329)) {
-          const int x_342_save = x_322;
-          const int x_343 = tree[x_342_save].leftIndex;
-          if ((x_343 == -1)) {
-            tree[x_342_save].leftIndex = 9;
-            const BST tint_symbol_18 = {13, -1, -1};
-            tree[9] = tint_symbol_18;
-            x_350_phi = true;
-            break;
-          } else {
-            x_348 = tree[x_342_save].leftIndex;
-            x_323_phi = x_348;
-            {
-              x_323 = x_323_phi;
-              x_322_phi = x_323;
-            }
-            continue;
-          }
-          return;
-        } else {
-          const int x_334_save = x_322;
-          const int x_335 = tree[x_334_save].rightIndex;
-          if ((x_335 == -1)) {
-            tree[x_334_save].rightIndex = 9;
-            const BST tint_symbol_19 = {13, -1, -1};
-            tree[9] = tint_symbol_19;
-            x_350_phi = true;
-            break;
-          } else {
-            x_340 = tree[x_334_save].rightIndex;
-            x_323_phi = x_340;
-            {
-              x_323 = x_323_phi;
-              x_322_phi = x_323;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_323 = x_323_phi;
-          x_322_phi = x_323;
-        }
-      }
-      if (x_350_phi) {
-        break;
-      }
-      break;
-    }
-  }
-  x_353_phi = 0;
-  x_356_phi = 0;
-  x_358_phi = 0;
-  while (true) {
-    int x_381 = 0;
-    int x_391 = 0;
-    int x_396 = 0;
-    int x_359 = 0;
-    int x_354_phi = 0;
-    int x_357_phi = 0;
-    const int x_353 = x_353_phi;
-    x_356 = x_356_phi;
-    const int x_358 = x_358_phi;
-    if ((x_358 < 20)) {
-    } else {
-      break;
-    }
-    int x_366_phi = 0;
-    int x_381_phi = 0;
-    bool x_382_phi = false;
-    switch(0u) {
-      default: {
-        x_366_phi = 0;
-        while (true) {
-          const int x_366 = x_366_phi;
-          x_381_phi = x_353;
-          x_382_phi = false;
-          if ((x_366 != -1)) {
-          } else {
-            break;
-          }
-          const BST x_373 = tree[x_366];
-          const int x_374 = x_373.data;
-          const int x_375 = x_373.leftIndex;
-          const int x_376 = x_373.rightIndex;
-          if ((x_374 == x_358)) {
-            x_381_phi = x_358;
-            x_382_phi = true;
-            break;
-          }
-          {
-            x_366_phi = ((x_358 > x_374) ? x_376 : x_375);
-          }
-        }
-        x_381 = x_381_phi;
-        const bool x_382 = x_382_phi;
-        x_354_phi = x_381;
-        if (x_382) {
-          break;
-        }
-        x_354_phi = -1;
-        break;
-      }
-    }
-    int x_354 = 0;
-    int x_390 = 0;
-    int x_395 = 0;
-    int x_391_phi = 0;
-    int x_396_phi = 0;
-    x_354 = x_354_phi;
-    switch(x_358) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_391_phi = x_356;
-        if ((x_354 == asint(x_358))) {
-          x_390 = asint((x_356 + asint(1)));
-          x_391_phi = x_390;
-        }
-        x_391 = x_391_phi;
-        x_357_phi = x_391;
-        break;
-      }
-      default: {
-        x_396_phi = x_356;
-        if ((x_354 == asint(-1))) {
-          x_395 = asint((x_356 + asint(1)));
-          x_396_phi = x_395;
-        }
-        x_396 = x_396_phi;
-        x_357_phi = x_396;
-        break;
-      }
-    }
-    const int x_357 = x_357_phi;
-    {
-      x_359 = (x_358 + 1);
-      x_353_phi = x_354;
-      x_356_phi = x_357;
-      x_358_phi = x_359;
-    }
-  }
-  if ((x_356 == asint(20))) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_20 = {x_GLF_color};
-  return tint_symbol_20;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.msl
deleted file mode 100644
index 3338c66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,768 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_22) {
-  tint_array_wrapper tree = {};
-  int x_356 = 0;
-  int x_58_phi = 0;
-  bool x_86_phi = false;
-  int x_353_phi = 0;
-  int x_356_phi = 0;
-  int x_358_phi = 0;
-  BST const tint_symbol_2 = {.data=9, .leftIndex=-1, .rightIndex=-1};
-  tree.arr[0] = tint_symbol_2;
-  switch(0u) {
-    default: {
-      x_58_phi = 0;
-      while (true) {
-        int x_84 = 0;
-        int x_76 = 0;
-        int x_59 = 0;
-        int x_59_phi = 0;
-        int const x_58 = x_58_phi;
-        x_86_phi = false;
-        if ((x_58 <= 1)) {
-        } else {
-          break;
-        }
-        int const x_65 = tree.arr[x_58].data;
-        if ((5 <= x_65)) {
-          int const x_78_save = x_58;
-          int const x_79 = tree.arr[x_78_save].leftIndex;
-          if ((x_79 == -1)) {
-            tree.arr[x_78_save].leftIndex = 1;
-            BST const tint_symbol_3 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_3;
-            x_86_phi = true;
-            break;
-          } else {
-            x_84 = tree.arr[x_78_save].leftIndex;
-            x_59_phi = x_84;
-            {
-              x_59 = x_59_phi;
-              x_58_phi = x_59;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_70_save = x_58;
-          int const x_71 = tree.arr[x_70_save].rightIndex;
-          if ((x_71 == -1)) {
-            tree.arr[x_70_save].rightIndex = 1;
-            BST const tint_symbol_4 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_4;
-            x_86_phi = true;
-            break;
-          } else {
-            x_76 = tree.arr[x_70_save].rightIndex;
-            x_59_phi = x_76;
-            {
-              x_59 = x_59_phi;
-              x_58_phi = x_59;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_59 = x_59_phi;
-          x_58_phi = x_59;
-        }
-      }
-      bool const x_86 = x_86_phi;
-      if (x_86) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_91_phi = 0;
-  bool x_119_phi = false;
-  switch(0u) {
-    default: {
-      x_91_phi = 0;
-      while (true) {
-        int x_117 = 0;
-        int x_109 = 0;
-        int x_92 = 0;
-        int x_92_phi = 0;
-        int const x_91 = x_91_phi;
-        x_119_phi = false;
-        if ((x_91 <= 2)) {
-        } else {
-          break;
-        }
-        int const x_98 = tree.arr[x_91].data;
-        if ((12 <= x_98)) {
-          int const x_111_save = x_91;
-          int const x_112 = tree.arr[x_111_save].leftIndex;
-          if ((x_112 == -1)) {
-            tree.arr[x_111_save].leftIndex = 2;
-            BST const tint_symbol_5 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[2] = tint_symbol_5;
-            x_119_phi = true;
-            break;
-          } else {
-            x_117 = tree.arr[x_111_save].leftIndex;
-            x_92_phi = x_117;
-            {
-              x_92 = x_92_phi;
-              x_91_phi = x_92;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_103_save = x_91;
-          int const x_104 = tree.arr[x_103_save].rightIndex;
-          if ((x_104 == -1)) {
-            tree.arr[x_103_save].rightIndex = 2;
-            BST const tint_symbol_6 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[2] = tint_symbol_6;
-            x_119_phi = true;
-            break;
-          } else {
-            x_109 = tree.arr[x_103_save].rightIndex;
-            x_92_phi = x_109;
-            {
-              x_92 = x_92_phi;
-              x_91_phi = x_92;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_92 = x_92_phi;
-          x_91_phi = x_92;
-        }
-      }
-      bool const x_119 = x_119_phi;
-      if (x_119) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_124_phi = 0;
-  bool x_152_phi = false;
-  switch(0u) {
-    default: {
-      x_124_phi = 0;
-      while (true) {
-        int x_150 = 0;
-        int x_142 = 0;
-        int x_125 = 0;
-        int x_125_phi = 0;
-        int const x_124 = x_124_phi;
-        x_152_phi = false;
-        if ((x_124 <= 3)) {
-        } else {
-          break;
-        }
-        int const x_131 = tree.arr[x_124].data;
-        if ((15 <= x_131)) {
-          int const x_144_save = x_124;
-          int const x_145 = tree.arr[x_144_save].leftIndex;
-          if ((x_145 == -1)) {
-            tree.arr[x_144_save].leftIndex = 3;
-            BST const tint_symbol_7 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_7;
-            x_152_phi = true;
-            break;
-          } else {
-            x_150 = tree.arr[x_144_save].leftIndex;
-            x_125_phi = x_150;
-            {
-              x_125 = x_125_phi;
-              x_124_phi = x_125;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_136_save = x_124;
-          int const x_137 = tree.arr[x_136_save].rightIndex;
-          if ((x_137 == -1)) {
-            tree.arr[x_136_save].rightIndex = 3;
-            BST const tint_symbol_8 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_8;
-            x_152_phi = true;
-            break;
-          } else {
-            x_142 = tree.arr[x_136_save].rightIndex;
-            x_125_phi = x_142;
-            {
-              x_125 = x_125_phi;
-              x_124_phi = x_125;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_125 = x_125_phi;
-          x_124_phi = x_125;
-        }
-      }
-      bool const x_152 = x_152_phi;
-      if (x_152) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_157_phi = 0;
-  bool x_185_phi = false;
-  switch(0u) {
-    default: {
-      x_157_phi = 0;
-      while (true) {
-        int x_183 = 0;
-        int x_175 = 0;
-        int x_158 = 0;
-        int x_158_phi = 0;
-        int const x_157 = x_157_phi;
-        x_185_phi = false;
-        if ((x_157 <= 4)) {
-        } else {
-          break;
-        }
-        int const x_164 = tree.arr[x_157].data;
-        if ((7 <= x_164)) {
-          int const x_177_save = x_157;
-          int const x_178 = tree.arr[x_177_save].leftIndex;
-          if ((x_178 == -1)) {
-            tree.arr[x_177_save].leftIndex = 4;
-            BST const tint_symbol_9 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_9;
-            x_185_phi = true;
-            break;
-          } else {
-            x_183 = tree.arr[x_177_save].leftIndex;
-            x_158_phi = x_183;
-            {
-              x_158 = x_158_phi;
-              x_157_phi = x_158;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_169_save = x_157;
-          int const x_170 = tree.arr[x_169_save].rightIndex;
-          if ((x_170 == -1)) {
-            tree.arr[x_169_save].rightIndex = 4;
-            BST const tint_symbol_10 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_10;
-            x_185_phi = true;
-            break;
-          } else {
-            x_175 = tree.arr[x_169_save].rightIndex;
-            x_158_phi = x_175;
-            {
-              x_158 = x_158_phi;
-              x_157_phi = x_158;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_158 = x_158_phi;
-          x_157_phi = x_158;
-        }
-      }
-      bool const x_185 = x_185_phi;
-      if (x_185) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_190_phi = 0;
-  bool x_218_phi = false;
-  switch(0u) {
-    default: {
-      x_190_phi = 0;
-      while (true) {
-        int x_216 = 0;
-        int x_208 = 0;
-        int x_191 = 0;
-        int x_191_phi = 0;
-        int const x_190 = x_190_phi;
-        x_218_phi = false;
-        if ((x_190 <= 5)) {
-        } else {
-          break;
-        }
-        int const x_197 = tree.arr[x_190].data;
-        if ((8 <= x_197)) {
-          int const x_210_save = x_190;
-          int const x_211 = tree.arr[x_210_save].leftIndex;
-          if ((x_211 == -1)) {
-            tree.arr[x_210_save].leftIndex = 5;
-            BST const tint_symbol_11 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_11;
-            x_218_phi = true;
-            break;
-          } else {
-            x_216 = tree.arr[x_210_save].leftIndex;
-            x_191_phi = x_216;
-            {
-              x_191 = x_191_phi;
-              x_190_phi = x_191;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_202_save = x_190;
-          int const x_203 = tree.arr[x_202_save].rightIndex;
-          if ((x_203 == -1)) {
-            tree.arr[x_202_save].rightIndex = 5;
-            BST const tint_symbol_12 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_12;
-            x_218_phi = true;
-            break;
-          } else {
-            x_208 = tree.arr[x_202_save].rightIndex;
-            x_191_phi = x_208;
-            {
-              x_191 = x_191_phi;
-              x_190_phi = x_191;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_191 = x_191_phi;
-          x_190_phi = x_191;
-        }
-      }
-      bool const x_218 = x_218_phi;
-      if (x_218) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_223_phi = 0;
-  bool x_251_phi = false;
-  switch(0u) {
-    default: {
-      x_223_phi = 0;
-      while (true) {
-        int x_249 = 0;
-        int x_241 = 0;
-        int x_224 = 0;
-        int x_224_phi = 0;
-        int const x_223 = x_223_phi;
-        x_251_phi = false;
-        if ((x_223 <= 6)) {
-        } else {
-          break;
-        }
-        int const x_230 = tree.arr[x_223].data;
-        if ((2 <= x_230)) {
-          int const x_243_save = x_223;
-          int const x_244 = tree.arr[x_243_save].leftIndex;
-          if ((x_244 == -1)) {
-            tree.arr[x_243_save].leftIndex = 6;
-            BST const tint_symbol_13 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_13;
-            x_251_phi = true;
-            break;
-          } else {
-            x_249 = tree.arr[x_243_save].leftIndex;
-            x_224_phi = x_249;
-            {
-              x_224 = x_224_phi;
-              x_223_phi = x_224;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_235_save = x_223;
-          int const x_236 = tree.arr[x_235_save].rightIndex;
-          if ((x_236 == -1)) {
-            tree.arr[x_235_save].rightIndex = 6;
-            BST const tint_symbol_14 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_14;
-            x_251_phi = true;
-            break;
-          } else {
-            x_241 = tree.arr[x_235_save].rightIndex;
-            x_224_phi = x_241;
-            {
-              x_224 = x_224_phi;
-              x_223_phi = x_224;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_224 = x_224_phi;
-          x_223_phi = x_224;
-        }
-      }
-      bool const x_251 = x_251_phi;
-      if (x_251) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_256_phi = 0;
-  bool x_284_phi = false;
-  switch(0u) {
-    default: {
-      x_256_phi = 0;
-      while (true) {
-        int x_282 = 0;
-        int x_274 = 0;
-        int x_257 = 0;
-        int x_257_phi = 0;
-        int const x_256 = x_256_phi;
-        x_284_phi = false;
-        if ((x_256 <= 7)) {
-        } else {
-          break;
-        }
-        int const x_263 = tree.arr[x_256].data;
-        if ((6 <= x_263)) {
-          int const x_276_save = x_256;
-          int const x_277 = tree.arr[x_276_save].leftIndex;
-          if ((x_277 == -1)) {
-            tree.arr[x_276_save].leftIndex = 7;
-            BST const tint_symbol_15 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_15;
-            x_284_phi = true;
-            break;
-          } else {
-            x_282 = tree.arr[x_276_save].leftIndex;
-            x_257_phi = x_282;
-            {
-              x_257 = x_257_phi;
-              x_256_phi = x_257;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_268_save = x_256;
-          int const x_269 = tree.arr[x_268_save].rightIndex;
-          if ((x_269 == -1)) {
-            tree.arr[x_268_save].rightIndex = 7;
-            BST const tint_symbol_16 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_16;
-            x_284_phi = true;
-            break;
-          } else {
-            x_274 = tree.arr[x_268_save].rightIndex;
-            x_257_phi = x_274;
-            {
-              x_257 = x_257_phi;
-              x_256_phi = x_257;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_257 = x_257_phi;
-          x_256_phi = x_257;
-        }
-      }
-      bool const x_284 = x_284_phi;
-      if (x_284) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_289_phi = 0;
-  bool x_317_phi = false;
-  switch(0u) {
-    default: {
-      x_289_phi = 0;
-      while (true) {
-        int x_315 = 0;
-        int x_307 = 0;
-        int x_290 = 0;
-        int x_290_phi = 0;
-        int const x_289 = x_289_phi;
-        x_317_phi = false;
-        if ((x_289 <= 8)) {
-        } else {
-          break;
-        }
-        int const x_296 = tree.arr[x_289].data;
-        if ((17 <= x_296)) {
-          int const x_309_save = x_289;
-          int const x_310 = tree.arr[x_309_save].leftIndex;
-          if ((x_310 == -1)) {
-            tree.arr[x_309_save].leftIndex = 8;
-            BST const tint_symbol_17 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_17;
-            x_317_phi = true;
-            break;
-          } else {
-            x_315 = tree.arr[x_309_save].leftIndex;
-            x_290_phi = x_315;
-            {
-              x_290 = x_290_phi;
-              x_289_phi = x_290;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_301_save = x_289;
-          int const x_302 = tree.arr[x_301_save].rightIndex;
-          if ((x_302 == -1)) {
-            tree.arr[x_301_save].rightIndex = 8;
-            BST const tint_symbol_18 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_18;
-            x_317_phi = true;
-            break;
-          } else {
-            x_307 = tree.arr[x_301_save].rightIndex;
-            x_290_phi = x_307;
-            {
-              x_290 = x_290_phi;
-              x_289_phi = x_290;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_290 = x_290_phi;
-          x_289_phi = x_290;
-        }
-      }
-      bool const x_317 = x_317_phi;
-      if (x_317) {
-        break;
-      }
-      break;
-    }
-  }
-  int x_322_phi = 0;
-  bool x_350_phi = false;
-  switch(0u) {
-    default: {
-      x_322_phi = 0;
-      while (true) {
-        int x_348 = 0;
-        int x_340 = 0;
-        int x_323 = 0;
-        int x_323_phi = 0;
-        int const x_322 = x_322_phi;
-        x_350_phi = false;
-        if ((x_322 <= 9)) {
-        } else {
-          break;
-        }
-        int const x_329 = tree.arr[x_322].data;
-        if ((13 <= x_329)) {
-          int const x_342_save = x_322;
-          int const x_343 = tree.arr[x_342_save].leftIndex;
-          if ((x_343 == -1)) {
-            tree.arr[x_342_save].leftIndex = 9;
-            BST const tint_symbol_19 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_19;
-            x_350_phi = true;
-            break;
-          } else {
-            x_348 = tree.arr[x_342_save].leftIndex;
-            x_323_phi = x_348;
-            {
-              x_323 = x_323_phi;
-              x_322_phi = x_323;
-            }
-            continue;
-          }
-          return;
-        } else {
-          int const x_334_save = x_322;
-          int const x_335 = tree.arr[x_334_save].rightIndex;
-          if ((x_335 == -1)) {
-            tree.arr[x_334_save].rightIndex = 9;
-            BST const tint_symbol_20 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_20;
-            x_350_phi = true;
-            break;
-          } else {
-            x_340 = tree.arr[x_334_save].rightIndex;
-            x_323_phi = x_340;
-            {
-              x_323 = x_323_phi;
-              x_322_phi = x_323;
-            }
-            continue;
-          }
-          return;
-        }
-        return;
-        {
-          x_323 = x_323_phi;
-          x_322_phi = x_323;
-        }
-      }
-      bool const x_350 = x_350_phi;
-      if (x_350) {
-        break;
-      }
-      break;
-    }
-  }
-  x_353_phi = 0;
-  x_356_phi = 0;
-  x_358_phi = 0;
-  while (true) {
-    int x_381 = 0;
-    int x_391 = 0;
-    int x_396 = 0;
-    int x_359 = 0;
-    int x_354_phi = 0;
-    int x_357_phi = 0;
-    int const x_353 = x_353_phi;
-    x_356 = x_356_phi;
-    int const x_358 = x_358_phi;
-    if ((x_358 < 20)) {
-    } else {
-      break;
-    }
-    int x_366_phi = 0;
-    int x_381_phi = 0;
-    bool x_382_phi = false;
-    switch(0u) {
-      default: {
-        x_366_phi = 0;
-        while (true) {
-          int const x_366 = x_366_phi;
-          x_381_phi = x_353;
-          x_382_phi = false;
-          if ((x_366 != -1)) {
-          } else {
-            break;
-          }
-          BST const x_373 = tree.arr[x_366];
-          int const x_374 = x_373.data;
-          int const x_375 = x_373.leftIndex;
-          int const x_376 = x_373.rightIndex;
-          if ((x_374 == x_358)) {
-            x_381_phi = x_358;
-            x_382_phi = true;
-            break;
-          }
-          {
-            x_366_phi = select(x_375, x_376, (x_358 > x_374));
-          }
-        }
-        x_381 = x_381_phi;
-        bool const x_382 = x_382_phi;
-        x_354_phi = x_381;
-        if (x_382) {
-          break;
-        }
-        x_354_phi = -1;
-        break;
-      }
-    }
-    int x_354 = 0;
-    int x_390 = 0;
-    int x_395 = 0;
-    int x_391_phi = 0;
-    int x_396_phi = 0;
-    x_354 = x_354_phi;
-    switch(x_358) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_391_phi = x_356;
-        if ((x_354 == as_type<int>(x_358))) {
-          x_390 = as_type<int>(as_type<int>((as_type<uint>(x_356) + as_type<uint>(as_type<int>(1)))));
-          x_391_phi = x_390;
-        }
-        x_391 = x_391_phi;
-        x_357_phi = x_391;
-        break;
-      }
-      default: {
-        x_396_phi = x_356;
-        if ((x_354 == as_type<int>(-1))) {
-          x_395 = as_type<int>(as_type<int>((as_type<uint>(x_356) + as_type<uint>(as_type<int>(1)))));
-          x_396_phi = x_395;
-        }
-        x_396 = x_396_phi;
-        x_357_phi = x_396;
-        break;
-      }
-    }
-    int const x_357 = x_357_phi;
-    {
-      x_359 = as_type<int>((as_type<uint>(x_358) + as_type<uint>(1)));
-      x_353_phi = x_354;
-      x_356_phi = x_357;
-      x_358_phi = x_359;
-    }
-  }
-  if ((x_356 == as_type<int>(20))) {
-    *(tint_symbol_22) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_22) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_23) {
-  main_1(tint_symbol_23);
-  main_out const tint_symbol_21 = {.x_GLF_color_1=*(tint_symbol_23)};
-  return tint_symbol_21;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_24 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_24));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index 2b27a7a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,1164 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 618
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %x_356 "x_356"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_86_phi "x_86_phi"
-               OpName %x_353_phi "x_353_phi"
-               OpName %x_356_phi "x_356_phi"
-               OpName %x_358_phi "x_358_phi"
-               OpName %x_84 "x_84"
-               OpName %x_76 "x_76"
-               OpName %x_59 "x_59"
-               OpName %x_59_phi "x_59_phi"
-               OpName %x_91_phi "x_91_phi"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_117 "x_117"
-               OpName %x_109 "x_109"
-               OpName %x_92 "x_92"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_124_phi "x_124_phi"
-               OpName %x_152_phi "x_152_phi"
-               OpName %x_150 "x_150"
-               OpName %x_142 "x_142"
-               OpName %x_125 "x_125"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_157_phi "x_157_phi"
-               OpName %x_185_phi "x_185_phi"
-               OpName %x_183 "x_183"
-               OpName %x_175 "x_175"
-               OpName %x_158 "x_158"
-               OpName %x_158_phi "x_158_phi"
-               OpName %x_190_phi "x_190_phi"
-               OpName %x_218_phi "x_218_phi"
-               OpName %x_216 "x_216"
-               OpName %x_208 "x_208"
-               OpName %x_191 "x_191"
-               OpName %x_191_phi "x_191_phi"
-               OpName %x_223_phi "x_223_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_249 "x_249"
-               OpName %x_241 "x_241"
-               OpName %x_224 "x_224"
-               OpName %x_224_phi "x_224_phi"
-               OpName %x_256_phi "x_256_phi"
-               OpName %x_284_phi "x_284_phi"
-               OpName %x_282 "x_282"
-               OpName %x_274 "x_274"
-               OpName %x_257 "x_257"
-               OpName %x_257_phi "x_257_phi"
-               OpName %x_289_phi "x_289_phi"
-               OpName %x_317_phi "x_317_phi"
-               OpName %x_315 "x_315"
-               OpName %x_307 "x_307"
-               OpName %x_290 "x_290"
-               OpName %x_290_phi "x_290_phi"
-               OpName %x_322_phi "x_322_phi"
-               OpName %x_350_phi "x_350_phi"
-               OpName %x_348 "x_348"
-               OpName %x_340 "x_340"
-               OpName %x_323 "x_323"
-               OpName %x_323_phi "x_323_phi"
-               OpName %x_381 "x_381"
-               OpName %x_391 "x_391"
-               OpName %x_396 "x_396"
-               OpName %x_359 "x_359"
-               OpName %x_354_phi "x_354_phi"
-               OpName %x_357_phi "x_357_phi"
-               OpName %x_366_phi "x_366_phi"
-               OpName %x_381_phi "x_381_phi"
-               OpName %x_382_phi "x_382_phi"
-               OpName %x_354 "x_354"
-               OpName %x_390 "x_390"
-               OpName %x_395 "x_395"
-               OpName %x_391_phi "x_391_phi"
-               OpName %x_396_phi "x_396_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Function__arr_BST_uint_10 = OpTypePointer Function %_arr_BST_uint_10
-         %19 = OpConstantNull %_arr_BST_uint_10
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %27 = OpConstantNull %bool
-      %int_0 = OpConstant %int 0
-%_ptr_Function_BST = OpTypePointer Function %BST
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-         %36 = OpConstantComposite %BST %int_9 %int_n1 %int_n1
-     %uint_0 = OpConstant %uint 0
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-         %71 = OpConstantComposite %BST %int_5 %int_n1 %int_n1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %int_2 = OpConstant %int 2
-     %int_12 = OpConstant %int 12
-        %126 = OpConstantComposite %BST %int_12 %int_n1 %int_n1
-      %int_3 = OpConstant %int 3
-     %int_15 = OpConstant %int 15
-        %179 = OpConstantComposite %BST %int_15 %int_n1 %int_n1
-      %int_4 = OpConstant %int 4
-      %int_7 = OpConstant %int 7
-        %232 = OpConstantComposite %BST %int_7 %int_n1 %int_n1
-      %int_8 = OpConstant %int 8
-        %284 = OpConstantComposite %BST %int_8 %int_n1 %int_n1
-      %int_6 = OpConstant %int 6
-        %336 = OpConstantComposite %BST %int_2 %int_n1 %int_n1
-        %387 = OpConstantComposite %BST %int_6 %int_n1 %int_n1
-     %int_17 = OpConstant %int 17
-        %439 = OpConstantComposite %BST %int_17 %int_n1 %int_n1
-     %int_13 = OpConstant %int 13
-        %491 = OpConstantComposite %BST %int_13 %int_n1 %int_n1
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %605 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %606 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %607 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-       %tree = OpVariable %_ptr_Function__arr_BST_uint_10 Function %19
-      %x_356 = OpVariable %_ptr_Function_int Function %22
-   %x_58_phi = OpVariable %_ptr_Function_int Function %22
-   %x_86_phi = OpVariable %_ptr_Function_bool Function %27
-  %x_353_phi = OpVariable %_ptr_Function_int Function %22
-  %x_356_phi = OpVariable %_ptr_Function_int Function %22
-  %x_358_phi = OpVariable %_ptr_Function_int Function %22
-       %x_84 = OpVariable %_ptr_Function_int Function %22
-       %x_76 = OpVariable %_ptr_Function_int Function %22
-       %x_59 = OpVariable %_ptr_Function_int Function %22
-   %x_59_phi = OpVariable %_ptr_Function_int Function %22
-   %x_91_phi = OpVariable %_ptr_Function_int Function %22
-  %x_119_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_117 = OpVariable %_ptr_Function_int Function %22
-      %x_109 = OpVariable %_ptr_Function_int Function %22
-       %x_92 = OpVariable %_ptr_Function_int Function %22
-   %x_92_phi = OpVariable %_ptr_Function_int Function %22
-  %x_124_phi = OpVariable %_ptr_Function_int Function %22
-  %x_152_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_150 = OpVariable %_ptr_Function_int Function %22
-      %x_142 = OpVariable %_ptr_Function_int Function %22
-      %x_125 = OpVariable %_ptr_Function_int Function %22
-  %x_125_phi = OpVariable %_ptr_Function_int Function %22
-  %x_157_phi = OpVariable %_ptr_Function_int Function %22
-  %x_185_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_183 = OpVariable %_ptr_Function_int Function %22
-      %x_175 = OpVariable %_ptr_Function_int Function %22
-      %x_158 = OpVariable %_ptr_Function_int Function %22
-  %x_158_phi = OpVariable %_ptr_Function_int Function %22
-  %x_190_phi = OpVariable %_ptr_Function_int Function %22
-  %x_218_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_216 = OpVariable %_ptr_Function_int Function %22
-      %x_208 = OpVariable %_ptr_Function_int Function %22
-      %x_191 = OpVariable %_ptr_Function_int Function %22
-  %x_191_phi = OpVariable %_ptr_Function_int Function %22
-  %x_223_phi = OpVariable %_ptr_Function_int Function %22
-  %x_251_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_249 = OpVariable %_ptr_Function_int Function %22
-      %x_241 = OpVariable %_ptr_Function_int Function %22
-      %x_224 = OpVariable %_ptr_Function_int Function %22
-  %x_224_phi = OpVariable %_ptr_Function_int Function %22
-  %x_256_phi = OpVariable %_ptr_Function_int Function %22
-  %x_284_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_282 = OpVariable %_ptr_Function_int Function %22
-      %x_274 = OpVariable %_ptr_Function_int Function %22
-      %x_257 = OpVariable %_ptr_Function_int Function %22
-  %x_257_phi = OpVariable %_ptr_Function_int Function %22
-  %x_289_phi = OpVariable %_ptr_Function_int Function %22
-  %x_317_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_315 = OpVariable %_ptr_Function_int Function %22
-      %x_307 = OpVariable %_ptr_Function_int Function %22
-      %x_290 = OpVariable %_ptr_Function_int Function %22
-  %x_290_phi = OpVariable %_ptr_Function_int Function %22
-  %x_322_phi = OpVariable %_ptr_Function_int Function %22
-  %x_350_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_348 = OpVariable %_ptr_Function_int Function %22
-      %x_340 = OpVariable %_ptr_Function_int Function %22
-      %x_323 = OpVariable %_ptr_Function_int Function %22
-  %x_323_phi = OpVariable %_ptr_Function_int Function %22
-      %x_381 = OpVariable %_ptr_Function_int Function %22
-      %x_391 = OpVariable %_ptr_Function_int Function %22
-      %x_396 = OpVariable %_ptr_Function_int Function %22
-      %x_359 = OpVariable %_ptr_Function_int Function %22
-  %x_354_phi = OpVariable %_ptr_Function_int Function %22
-  %x_357_phi = OpVariable %_ptr_Function_int Function %22
-  %x_366_phi = OpVariable %_ptr_Function_int Function %22
-  %x_381_phi = OpVariable %_ptr_Function_int Function %22
-  %x_382_phi = OpVariable %_ptr_Function_bool Function %27
-      %x_354 = OpVariable %_ptr_Function_int Function %22
-      %x_390 = OpVariable %_ptr_Function_int Function %22
-      %x_395 = OpVariable %_ptr_Function_int Function %22
-  %x_391_phi = OpVariable %_ptr_Function_int Function %22
-  %x_396_phi = OpVariable %_ptr_Function_int Function %22
-         %33 = OpAccessChain %_ptr_Function_BST %tree %int_0
-               OpStore %33 %36
-               OpSelectionMerge %37 None
-               OpSwitch %uint_0 %39
-         %39 = OpLabel
-               OpStore %x_58_phi %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpLoopMerge %41 %42 None
-               OpBranch %43
-         %43 = OpLabel
-         %48 = OpLoad %int %x_58_phi
-               OpStore %x_86_phi %false
-         %51 = OpSLessThanEqual %bool %48 %int_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %41
-         %52 = OpLabel
-         %55 = OpAccessChain %_ptr_Function_int %tree %48 %uint_0
-         %56 = OpLoad %int %55
-         %58 = OpSLessThanEqual %bool %int_5 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-         %63 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-         %64 = OpLoad %int %63
-         %65 = OpIEqual %bool %64 %int_n1
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-         %69 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-               OpStore %69 %int_1
-         %70 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %70 %71
-               OpStore %x_86_phi %true
-               OpBranch %41
-         %68 = OpLabel
-         %73 = OpAccessChain %_ptr_Function_int %tree %48 %uint_1
-         %74 = OpLoad %int %73
-               OpStore %x_84 %74
-         %75 = OpLoad %int %x_84
-               OpStore %x_59_phi %75
-               OpBranch %42
-         %66 = OpLabel
-               OpReturn
-         %61 = OpLabel
-         %77 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-         %78 = OpLoad %int %77
-         %79 = OpIEqual %bool %78 %int_n1
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-               OpStore %83 %int_1
-         %84 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %84 %71
-               OpStore %x_86_phi %true
-               OpBranch %41
-         %82 = OpLabel
-         %85 = OpAccessChain %_ptr_Function_int %tree %48 %uint_2
-         %86 = OpLoad %int %85
-               OpStore %x_76 %86
-         %87 = OpLoad %int %x_76
-               OpStore %x_59_phi %87
-               OpBranch %42
-         %80 = OpLabel
-               OpReturn
-         %59 = OpLabel
-               OpReturn
-         %42 = OpLabel
-         %88 = OpLoad %int %x_59_phi
-               OpStore %x_59 %88
-         %89 = OpLoad %int %x_59
-               OpStore %x_58_phi %89
-               OpBranch %40
-         %41 = OpLabel
-         %90 = OpLoad %bool %x_86_phi
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %91
-         %92 = OpLabel
-               OpBranch %37
-         %91 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpSelectionMerge %95 None
-               OpSwitch %uint_0 %96
-         %96 = OpLabel
-               OpStore %x_91_phi %int_0
-               OpBranch %97
-         %97 = OpLabel
-               OpLoopMerge %98 %99 None
-               OpBranch %100
-        %100 = OpLabel
-        %105 = OpLoad %int %x_91_phi
-               OpStore %x_119_phi %false
-        %107 = OpSLessThanEqual %bool %105 %int_2
-               OpSelectionMerge %108 None
-               OpBranchConditional %107 %109 %110
-        %109 = OpLabel
-               OpBranch %108
-        %110 = OpLabel
-               OpBranch %98
-        %108 = OpLabel
-        %111 = OpAccessChain %_ptr_Function_int %tree %105 %uint_0
-        %112 = OpLoad %int %111
-        %114 = OpSLessThanEqual %bool %int_12 %112
-               OpSelectionMerge %115 None
-               OpBranchConditional %114 %116 %117
-        %116 = OpLabel
-        %118 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-        %119 = OpLoad %int %118
-        %120 = OpIEqual %bool %119 %int_n1
-               OpSelectionMerge %121 None
-               OpBranchConditional %120 %122 %123
-        %122 = OpLabel
-        %124 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-               OpStore %124 %int_2
-        %125 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %125 %126
-               OpStore %x_119_phi %true
-               OpBranch %98
-        %123 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %tree %105 %uint_1
-        %128 = OpLoad %int %127
-               OpStore %x_117 %128
-        %129 = OpLoad %int %x_117
-               OpStore %x_92_phi %129
-               OpBranch %99
-        %121 = OpLabel
-               OpReturn
-        %117 = OpLabel
-        %130 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-        %131 = OpLoad %int %130
-        %132 = OpIEqual %bool %131 %int_n1
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %135
-        %134 = OpLabel
-        %136 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-               OpStore %136 %int_2
-        %137 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %137 %126
-               OpStore %x_119_phi %true
-               OpBranch %98
-        %135 = OpLabel
-        %138 = OpAccessChain %_ptr_Function_int %tree %105 %uint_2
-        %139 = OpLoad %int %138
-               OpStore %x_109 %139
-        %140 = OpLoad %int %x_109
-               OpStore %x_92_phi %140
-               OpBranch %99
-        %133 = OpLabel
-               OpReturn
-        %115 = OpLabel
-               OpReturn
-         %99 = OpLabel
-        %141 = OpLoad %int %x_92_phi
-               OpStore %x_92 %141
-        %142 = OpLoad %int %x_92
-               OpStore %x_91_phi %142
-               OpBranch %97
-         %98 = OpLabel
-        %143 = OpLoad %bool %x_119_phi
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %144
-        %145 = OpLabel
-               OpBranch %95
-        %144 = OpLabel
-               OpBranch %95
-         %95 = OpLabel
-               OpSelectionMerge %148 None
-               OpSwitch %uint_0 %149
-        %149 = OpLabel
-               OpStore %x_124_phi %int_0
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %158 = OpLoad %int %x_124_phi
-               OpStore %x_152_phi %false
-        %160 = OpSLessThanEqual %bool %158 %int_3
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %163
-        %162 = OpLabel
-               OpBranch %161
-        %163 = OpLabel
-               OpBranch %151
-        %161 = OpLabel
-        %164 = OpAccessChain %_ptr_Function_int %tree %158 %uint_0
-        %165 = OpLoad %int %164
-        %167 = OpSLessThanEqual %bool %int_15 %165
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-        %171 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-        %172 = OpLoad %int %171
-        %173 = OpIEqual %bool %172 %int_n1
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-        %177 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-               OpStore %177 %int_3
-        %178 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %178 %179
-               OpStore %x_152_phi %true
-               OpBranch %151
-        %176 = OpLabel
-        %180 = OpAccessChain %_ptr_Function_int %tree %158 %uint_1
-        %181 = OpLoad %int %180
-               OpStore %x_150 %181
-        %182 = OpLoad %int %x_150
-               OpStore %x_125_phi %182
-               OpBranch %152
-        %174 = OpLabel
-               OpReturn
-        %170 = OpLabel
-        %183 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-        %184 = OpLoad %int %183
-        %185 = OpIEqual %bool %184 %int_n1
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-        %189 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-               OpStore %189 %int_3
-        %190 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %190 %179
-               OpStore %x_152_phi %true
-               OpBranch %151
-        %188 = OpLabel
-        %191 = OpAccessChain %_ptr_Function_int %tree %158 %uint_2
-        %192 = OpLoad %int %191
-               OpStore %x_142 %192
-        %193 = OpLoad %int %x_142
-               OpStore %x_125_phi %193
-               OpBranch %152
-        %186 = OpLabel
-               OpReturn
-        %168 = OpLabel
-               OpReturn
-        %152 = OpLabel
-        %194 = OpLoad %int %x_125_phi
-               OpStore %x_125 %194
-        %195 = OpLoad %int %x_125
-               OpStore %x_124_phi %195
-               OpBranch %150
-        %151 = OpLabel
-        %196 = OpLoad %bool %x_152_phi
-               OpSelectionMerge %197 None
-               OpBranchConditional %196 %198 %197
-        %198 = OpLabel
-               OpBranch %148
-        %197 = OpLabel
-               OpBranch %148
-        %148 = OpLabel
-               OpSelectionMerge %201 None
-               OpSwitch %uint_0 %202
-        %202 = OpLabel
-               OpStore %x_157_phi %int_0
-               OpBranch %203
-        %203 = OpLabel
-               OpLoopMerge %204 %205 None
-               OpBranch %206
-        %206 = OpLabel
-        %211 = OpLoad %int %x_157_phi
-               OpStore %x_185_phi %false
-        %213 = OpSLessThanEqual %bool %211 %int_4
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-               OpBranch %204
-        %214 = OpLabel
-        %217 = OpAccessChain %_ptr_Function_int %tree %211 %uint_0
-        %218 = OpLoad %int %217
-        %220 = OpSLessThanEqual %bool %int_7 %218
-               OpSelectionMerge %221 None
-               OpBranchConditional %220 %222 %223
-        %222 = OpLabel
-        %224 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-        %225 = OpLoad %int %224
-        %226 = OpIEqual %bool %225 %int_n1
-               OpSelectionMerge %227 None
-               OpBranchConditional %226 %228 %229
-        %228 = OpLabel
-        %230 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-               OpStore %230 %int_4
-        %231 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %231 %232
-               OpStore %x_185_phi %true
-               OpBranch %204
-        %229 = OpLabel
-        %233 = OpAccessChain %_ptr_Function_int %tree %211 %uint_1
-        %234 = OpLoad %int %233
-               OpStore %x_183 %234
-        %235 = OpLoad %int %x_183
-               OpStore %x_158_phi %235
-               OpBranch %205
-        %227 = OpLabel
-               OpReturn
-        %223 = OpLabel
-        %236 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-        %237 = OpLoad %int %236
-        %238 = OpIEqual %bool %237 %int_n1
-               OpSelectionMerge %239 None
-               OpBranchConditional %238 %240 %241
-        %240 = OpLabel
-        %242 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-               OpStore %242 %int_4
-        %243 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %243 %232
-               OpStore %x_185_phi %true
-               OpBranch %204
-        %241 = OpLabel
-        %244 = OpAccessChain %_ptr_Function_int %tree %211 %uint_2
-        %245 = OpLoad %int %244
-               OpStore %x_175 %245
-        %246 = OpLoad %int %x_175
-               OpStore %x_158_phi %246
-               OpBranch %205
-        %239 = OpLabel
-               OpReturn
-        %221 = OpLabel
-               OpReturn
-        %205 = OpLabel
-        %247 = OpLoad %int %x_158_phi
-               OpStore %x_158 %247
-        %248 = OpLoad %int %x_158
-               OpStore %x_157_phi %248
-               OpBranch %203
-        %204 = OpLabel
-        %249 = OpLoad %bool %x_185_phi
-               OpSelectionMerge %250 None
-               OpBranchConditional %249 %251 %250
-        %251 = OpLabel
-               OpBranch %201
-        %250 = OpLabel
-               OpBranch %201
-        %201 = OpLabel
-               OpSelectionMerge %254 None
-               OpSwitch %uint_0 %255
-        %255 = OpLabel
-               OpStore %x_190_phi %int_0
-               OpBranch %256
-        %256 = OpLabel
-               OpLoopMerge %257 %258 None
-               OpBranch %259
-        %259 = OpLabel
-        %264 = OpLoad %int %x_190_phi
-               OpStore %x_218_phi %false
-        %265 = OpSLessThanEqual %bool %264 %int_5
-               OpSelectionMerge %266 None
-               OpBranchConditional %265 %267 %268
-        %267 = OpLabel
-               OpBranch %266
-        %268 = OpLabel
-               OpBranch %257
-        %266 = OpLabel
-        %269 = OpAccessChain %_ptr_Function_int %tree %264 %uint_0
-        %270 = OpLoad %int %269
-        %272 = OpSLessThanEqual %bool %int_8 %270
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %275
-        %274 = OpLabel
-        %276 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-        %277 = OpLoad %int %276
-        %278 = OpIEqual %bool %277 %int_n1
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
-        %282 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-               OpStore %282 %int_5
-        %283 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %283 %284
-               OpStore %x_218_phi %true
-               OpBranch %257
-        %281 = OpLabel
-        %285 = OpAccessChain %_ptr_Function_int %tree %264 %uint_1
-        %286 = OpLoad %int %285
-               OpStore %x_216 %286
-        %287 = OpLoad %int %x_216
-               OpStore %x_191_phi %287
-               OpBranch %258
-        %279 = OpLabel
-               OpReturn
-        %275 = OpLabel
-        %288 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-        %289 = OpLoad %int %288
-        %290 = OpIEqual %bool %289 %int_n1
-               OpSelectionMerge %291 None
-               OpBranchConditional %290 %292 %293
-        %292 = OpLabel
-        %294 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-               OpStore %294 %int_5
-        %295 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %295 %284
-               OpStore %x_218_phi %true
-               OpBranch %257
-        %293 = OpLabel
-        %296 = OpAccessChain %_ptr_Function_int %tree %264 %uint_2
-        %297 = OpLoad %int %296
-               OpStore %x_208 %297
-        %298 = OpLoad %int %x_208
-               OpStore %x_191_phi %298
-               OpBranch %258
-        %291 = OpLabel
-               OpReturn
-        %273 = OpLabel
-               OpReturn
-        %258 = OpLabel
-        %299 = OpLoad %int %x_191_phi
-               OpStore %x_191 %299
-        %300 = OpLoad %int %x_191
-               OpStore %x_190_phi %300
-               OpBranch %256
-        %257 = OpLabel
-        %301 = OpLoad %bool %x_218_phi
-               OpSelectionMerge %302 None
-               OpBranchConditional %301 %303 %302
-        %303 = OpLabel
-               OpBranch %254
-        %302 = OpLabel
-               OpBranch %254
-        %254 = OpLabel
-               OpSelectionMerge %306 None
-               OpSwitch %uint_0 %307
-        %307 = OpLabel
-               OpStore %x_223_phi %int_0
-               OpBranch %308
-        %308 = OpLabel
-               OpLoopMerge %309 %310 None
-               OpBranch %311
-        %311 = OpLabel
-        %316 = OpLoad %int %x_223_phi
-               OpStore %x_251_phi %false
-        %318 = OpSLessThanEqual %bool %316 %int_6
-               OpSelectionMerge %319 None
-               OpBranchConditional %318 %320 %321
-        %320 = OpLabel
-               OpBranch %319
-        %321 = OpLabel
-               OpBranch %309
-        %319 = OpLabel
-        %322 = OpAccessChain %_ptr_Function_int %tree %316 %uint_0
-        %323 = OpLoad %int %322
-        %324 = OpSLessThanEqual %bool %int_2 %323
-               OpSelectionMerge %325 None
-               OpBranchConditional %324 %326 %327
-        %326 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-        %329 = OpLoad %int %328
-        %330 = OpIEqual %bool %329 %int_n1
-               OpSelectionMerge %331 None
-               OpBranchConditional %330 %332 %333
-        %332 = OpLabel
-        %334 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-               OpStore %334 %int_6
-        %335 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %335 %336
-               OpStore %x_251_phi %true
-               OpBranch %309
-        %333 = OpLabel
-        %337 = OpAccessChain %_ptr_Function_int %tree %316 %uint_1
-        %338 = OpLoad %int %337
-               OpStore %x_249 %338
-        %339 = OpLoad %int %x_249
-               OpStore %x_224_phi %339
-               OpBranch %310
-        %331 = OpLabel
-               OpReturn
-        %327 = OpLabel
-        %340 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-        %341 = OpLoad %int %340
-        %342 = OpIEqual %bool %341 %int_n1
-               OpSelectionMerge %343 None
-               OpBranchConditional %342 %344 %345
-        %344 = OpLabel
-        %346 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-               OpStore %346 %int_6
-        %347 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %347 %336
-               OpStore %x_251_phi %true
-               OpBranch %309
-        %345 = OpLabel
-        %348 = OpAccessChain %_ptr_Function_int %tree %316 %uint_2
-        %349 = OpLoad %int %348
-               OpStore %x_241 %349
-        %350 = OpLoad %int %x_241
-               OpStore %x_224_phi %350
-               OpBranch %310
-        %343 = OpLabel
-               OpReturn
-        %325 = OpLabel
-               OpReturn
-        %310 = OpLabel
-        %351 = OpLoad %int %x_224_phi
-               OpStore %x_224 %351
-        %352 = OpLoad %int %x_224
-               OpStore %x_223_phi %352
-               OpBranch %308
-        %309 = OpLabel
-        %353 = OpLoad %bool %x_251_phi
-               OpSelectionMerge %354 None
-               OpBranchConditional %353 %355 %354
-        %355 = OpLabel
-               OpBranch %306
-        %354 = OpLabel
-               OpBranch %306
-        %306 = OpLabel
-               OpSelectionMerge %358 None
-               OpSwitch %uint_0 %359
-        %359 = OpLabel
-               OpStore %x_256_phi %int_0
-               OpBranch %360
-        %360 = OpLabel
-               OpLoopMerge %361 %362 None
-               OpBranch %363
-        %363 = OpLabel
-        %368 = OpLoad %int %x_256_phi
-               OpStore %x_284_phi %false
-        %369 = OpSLessThanEqual %bool %368 %int_7
-               OpSelectionMerge %370 None
-               OpBranchConditional %369 %371 %372
-        %371 = OpLabel
-               OpBranch %370
-        %372 = OpLabel
-               OpBranch %361
-        %370 = OpLabel
-        %373 = OpAccessChain %_ptr_Function_int %tree %368 %uint_0
-        %374 = OpLoad %int %373
-        %375 = OpSLessThanEqual %bool %int_6 %374
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %378
-        %377 = OpLabel
-        %379 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-        %380 = OpLoad %int %379
-        %381 = OpIEqual %bool %380 %int_n1
-               OpSelectionMerge %382 None
-               OpBranchConditional %381 %383 %384
-        %383 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-               OpStore %385 %int_7
-        %386 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %386 %387
-               OpStore %x_284_phi %true
-               OpBranch %361
-        %384 = OpLabel
-        %388 = OpAccessChain %_ptr_Function_int %tree %368 %uint_1
-        %389 = OpLoad %int %388
-               OpStore %x_282 %389
-        %390 = OpLoad %int %x_282
-               OpStore %x_257_phi %390
-               OpBranch %362
-        %382 = OpLabel
-               OpReturn
-        %378 = OpLabel
-        %391 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-        %392 = OpLoad %int %391
-        %393 = OpIEqual %bool %392 %int_n1
-               OpSelectionMerge %394 None
-               OpBranchConditional %393 %395 %396
-        %395 = OpLabel
-        %397 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-               OpStore %397 %int_7
-        %398 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %398 %387
-               OpStore %x_284_phi %true
-               OpBranch %361
-        %396 = OpLabel
-        %399 = OpAccessChain %_ptr_Function_int %tree %368 %uint_2
-        %400 = OpLoad %int %399
-               OpStore %x_274 %400
-        %401 = OpLoad %int %x_274
-               OpStore %x_257_phi %401
-               OpBranch %362
-        %394 = OpLabel
-               OpReturn
-        %376 = OpLabel
-               OpReturn
-        %362 = OpLabel
-        %402 = OpLoad %int %x_257_phi
-               OpStore %x_257 %402
-        %403 = OpLoad %int %x_257
-               OpStore %x_256_phi %403
-               OpBranch %360
-        %361 = OpLabel
-        %404 = OpLoad %bool %x_284_phi
-               OpSelectionMerge %405 None
-               OpBranchConditional %404 %406 %405
-        %406 = OpLabel
-               OpBranch %358
-        %405 = OpLabel
-               OpBranch %358
-        %358 = OpLabel
-               OpSelectionMerge %409 None
-               OpSwitch %uint_0 %410
-        %410 = OpLabel
-               OpStore %x_289_phi %int_0
-               OpBranch %411
-        %411 = OpLabel
-               OpLoopMerge %412 %413 None
-               OpBranch %414
-        %414 = OpLabel
-        %419 = OpLoad %int %x_289_phi
-               OpStore %x_317_phi %false
-        %420 = OpSLessThanEqual %bool %419 %int_8
-               OpSelectionMerge %421 None
-               OpBranchConditional %420 %422 %423
-        %422 = OpLabel
-               OpBranch %421
-        %423 = OpLabel
-               OpBranch %412
-        %421 = OpLabel
-        %424 = OpAccessChain %_ptr_Function_int %tree %419 %uint_0
-        %425 = OpLoad %int %424
-        %427 = OpSLessThanEqual %bool %int_17 %425
-               OpSelectionMerge %428 None
-               OpBranchConditional %427 %429 %430
-        %429 = OpLabel
-        %431 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-        %432 = OpLoad %int %431
-        %433 = OpIEqual %bool %432 %int_n1
-               OpSelectionMerge %434 None
-               OpBranchConditional %433 %435 %436
-        %435 = OpLabel
-        %437 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-               OpStore %437 %int_8
-        %438 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %438 %439
-               OpStore %x_317_phi %true
-               OpBranch %412
-        %436 = OpLabel
-        %440 = OpAccessChain %_ptr_Function_int %tree %419 %uint_1
-        %441 = OpLoad %int %440
-               OpStore %x_315 %441
-        %442 = OpLoad %int %x_315
-               OpStore %x_290_phi %442
-               OpBranch %413
-        %434 = OpLabel
-               OpReturn
-        %430 = OpLabel
-        %443 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-        %444 = OpLoad %int %443
-        %445 = OpIEqual %bool %444 %int_n1
-               OpSelectionMerge %446 None
-               OpBranchConditional %445 %447 %448
-        %447 = OpLabel
-        %449 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-               OpStore %449 %int_8
-        %450 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %450 %439
-               OpStore %x_317_phi %true
-               OpBranch %412
-        %448 = OpLabel
-        %451 = OpAccessChain %_ptr_Function_int %tree %419 %uint_2
-        %452 = OpLoad %int %451
-               OpStore %x_307 %452
-        %453 = OpLoad %int %x_307
-               OpStore %x_290_phi %453
-               OpBranch %413
-        %446 = OpLabel
-               OpReturn
-        %428 = OpLabel
-               OpReturn
-        %413 = OpLabel
-        %454 = OpLoad %int %x_290_phi
-               OpStore %x_290 %454
-        %455 = OpLoad %int %x_290
-               OpStore %x_289_phi %455
-               OpBranch %411
-        %412 = OpLabel
-        %456 = OpLoad %bool %x_317_phi
-               OpSelectionMerge %457 None
-               OpBranchConditional %456 %458 %457
-        %458 = OpLabel
-               OpBranch %409
-        %457 = OpLabel
-               OpBranch %409
-        %409 = OpLabel
-               OpSelectionMerge %461 None
-               OpSwitch %uint_0 %462
-        %462 = OpLabel
-               OpStore %x_322_phi %int_0
-               OpBranch %463
-        %463 = OpLabel
-               OpLoopMerge %464 %465 None
-               OpBranch %466
-        %466 = OpLabel
-        %471 = OpLoad %int %x_322_phi
-               OpStore %x_350_phi %false
-        %472 = OpSLessThanEqual %bool %471 %int_9
-               OpSelectionMerge %473 None
-               OpBranchConditional %472 %474 %475
-        %474 = OpLabel
-               OpBranch %473
-        %475 = OpLabel
-               OpBranch %464
-        %473 = OpLabel
-        %476 = OpAccessChain %_ptr_Function_int %tree %471 %uint_0
-        %477 = OpLoad %int %476
-        %479 = OpSLessThanEqual %bool %int_13 %477
-               OpSelectionMerge %480 None
-               OpBranchConditional %479 %481 %482
-        %481 = OpLabel
-        %483 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-        %484 = OpLoad %int %483
-        %485 = OpIEqual %bool %484 %int_n1
-               OpSelectionMerge %486 None
-               OpBranchConditional %485 %487 %488
-        %487 = OpLabel
-        %489 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-               OpStore %489 %int_9
-        %490 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %490 %491
-               OpStore %x_350_phi %true
-               OpBranch %464
-        %488 = OpLabel
-        %492 = OpAccessChain %_ptr_Function_int %tree %471 %uint_1
-        %493 = OpLoad %int %492
-               OpStore %x_348 %493
-        %494 = OpLoad %int %x_348
-               OpStore %x_323_phi %494
-               OpBranch %465
-        %486 = OpLabel
-               OpReturn
-        %482 = OpLabel
-        %495 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-        %496 = OpLoad %int %495
-        %497 = OpIEqual %bool %496 %int_n1
-               OpSelectionMerge %498 None
-               OpBranchConditional %497 %499 %500
-        %499 = OpLabel
-        %501 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-               OpStore %501 %int_9
-        %502 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %502 %491
-               OpStore %x_350_phi %true
-               OpBranch %464
-        %500 = OpLabel
-        %503 = OpAccessChain %_ptr_Function_int %tree %471 %uint_2
-        %504 = OpLoad %int %503
-               OpStore %x_340 %504
-        %505 = OpLoad %int %x_340
-               OpStore %x_323_phi %505
-               OpBranch %465
-        %498 = OpLabel
-               OpReturn
-        %480 = OpLabel
-               OpReturn
-        %465 = OpLabel
-        %506 = OpLoad %int %x_323_phi
-               OpStore %x_323 %506
-        %507 = OpLoad %int %x_323
-               OpStore %x_322_phi %507
-               OpBranch %463
-        %464 = OpLabel
-        %508 = OpLoad %bool %x_350_phi
-               OpSelectionMerge %509 None
-               OpBranchConditional %508 %510 %509
-        %510 = OpLabel
-               OpBranch %461
-        %509 = OpLabel
-               OpBranch %461
-        %461 = OpLabel
-               OpStore %x_353_phi %int_0
-               OpStore %x_356_phi %int_0
-               OpStore %x_358_phi %int_0
-               OpBranch %511
-        %511 = OpLabel
-               OpLoopMerge %512 %513 None
-               OpBranch %514
-        %514 = OpLabel
-        %521 = OpLoad %int %x_353_phi
-        %522 = OpLoad %int %x_356_phi
-               OpStore %x_356 %522
-        %523 = OpLoad %int %x_358_phi
-        %525 = OpSLessThan %bool %523 %int_20
-               OpSelectionMerge %526 None
-               OpBranchConditional %525 %527 %528
-        %527 = OpLabel
-               OpBranch %526
-        %528 = OpLabel
-               OpBranch %512
-        %526 = OpLabel
-               OpSelectionMerge %532 None
-               OpSwitch %uint_0 %533
-        %533 = OpLabel
-               OpStore %x_366_phi %int_0
-               OpBranch %534
-        %534 = OpLabel
-               OpLoopMerge %535 %536 None
-               OpBranch %537
-        %537 = OpLabel
-        %538 = OpLoad %int %x_366_phi
-               OpStore %x_381_phi %521
-               OpStore %x_382_phi %false
-        %539 = OpINotEqual %bool %538 %int_n1
-               OpSelectionMerge %540 None
-               OpBranchConditional %539 %541 %542
-        %541 = OpLabel
-               OpBranch %540
-        %542 = OpLabel
-               OpBranch %535
-        %540 = OpLabel
-        %543 = OpAccessChain %_ptr_Function_BST %tree %538
-        %544 = OpLoad %BST %543
-        %545 = OpCompositeExtract %int %544 0
-        %546 = OpCompositeExtract %int %544 1
-        %547 = OpCompositeExtract %int %544 2
-        %548 = OpIEqual %bool %545 %523
-               OpSelectionMerge %549 None
-               OpBranchConditional %548 %550 %549
-        %550 = OpLabel
-               OpStore %x_381_phi %523
-               OpStore %x_382_phi %true
-               OpBranch %535
-        %549 = OpLabel
-               OpBranch %536
-        %536 = OpLabel
-        %552 = OpSGreaterThan %bool %523 %545
-        %551 = OpSelect %int %552 %547 %546
-               OpStore %x_366_phi %551
-               OpBranch %534
-        %535 = OpLabel
-        %553 = OpLoad %int %x_381_phi
-               OpStore %x_381 %553
-        %554 = OpLoad %bool %x_382_phi
-        %555 = OpLoad %int %x_381
-               OpStore %x_354_phi %555
-               OpSelectionMerge %556 None
-               OpBranchConditional %554 %557 %556
-        %557 = OpLabel
-               OpBranch %532
-        %556 = OpLabel
-               OpStore %x_354_phi %int_n1
-               OpBranch %532
-        %532 = OpLabel
-        %563 = OpLoad %int %x_354_phi
-               OpStore %x_354 %563
-               OpSelectionMerge %564 None
-               OpSwitch %523 %565 2 %566 5 %566 6 %566 7 %566 8 %566 9 %566 12 %566 13 %566 15 %566 17 %566
-        %566 = OpLabel
-        %567 = OpLoad %int %x_356
-               OpStore %x_391_phi %567
-        %568 = OpLoad %int %x_354
-        %569 = OpCopyObject %int %523
-        %570 = OpIEqual %bool %568 %569
-               OpSelectionMerge %571 None
-               OpBranchConditional %570 %572 %571
-        %572 = OpLabel
-        %574 = OpLoad %int %x_356
-        %575 = OpCopyObject %int %int_1
-        %576 = OpIAdd %int %574 %575
-        %573 = OpCopyObject %int %576
-               OpStore %x_390 %573
-        %577 = OpLoad %int %x_390
-               OpStore %x_391_phi %577
-               OpBranch %571
-        %571 = OpLabel
-        %578 = OpLoad %int %x_391_phi
-               OpStore %x_391 %578
-        %579 = OpLoad %int %x_391
-               OpStore %x_357_phi %579
-               OpBranch %564
-        %565 = OpLabel
-        %580 = OpLoad %int %x_356
-               OpStore %x_396_phi %580
-        %581 = OpLoad %int %x_354
-        %582 = OpCopyObject %int %int_n1
-        %583 = OpIEqual %bool %581 %582
-               OpSelectionMerge %584 None
-               OpBranchConditional %583 %585 %584
-        %585 = OpLabel
-        %587 = OpLoad %int %x_356
-        %588 = OpCopyObject %int %int_1
-        %589 = OpIAdd %int %587 %588
-        %586 = OpCopyObject %int %589
-               OpStore %x_395 %586
-        %590 = OpLoad %int %x_395
-               OpStore %x_396_phi %590
-               OpBranch %584
-        %584 = OpLabel
-        %591 = OpLoad %int %x_396_phi
-               OpStore %x_396 %591
-        %592 = OpLoad %int %x_396
-               OpStore %x_357_phi %592
-               OpBranch %564
-        %564 = OpLabel
-        %593 = OpLoad %int %x_357_phi
-               OpBranch %513
-        %513 = OpLabel
-        %594 = OpIAdd %int %523 %int_1
-               OpStore %x_359 %594
-        %595 = OpLoad %int %x_354
-               OpStore %x_353_phi %595
-               OpStore %x_356_phi %593
-        %596 = OpLoad %int %x_359
-               OpStore %x_358_phi %596
-               OpBranch %511
-        %512 = OpLabel
-        %597 = OpLoad %int %x_356
-        %598 = OpCopyObject %int %int_20
-        %599 = OpIEqual %bool %597 %598
-               OpSelectionMerge %600 None
-               OpBranchConditional %599 %601 %602
-        %601 = OpLabel
-               OpStore %x_GLF_color %605
-               OpBranch %600
-        %602 = OpLabel
-               OpStore %x_GLF_color %606
-               OpBranch %600
-        %600 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %607
-        %610 = OpLabel
-        %611 = OpFunctionCall %void %main_1
-        %612 = OpLoad %v4float %x_GLF_color
-        %613 = OpCompositeConstruct %main_out %612
-               OpReturnValue %613
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-        %615 = OpLabel
-        %616 = OpFunctionCall %main_out %main_inner
-        %617 = OpCompositeExtract %v4float %616 0
-               OpStore %x_GLF_color_1_1 %617
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index 76d569e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,653 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var tree : array<BST, 10>;
-  var x_356 : i32;
-  var x_58_phi : i32;
-  var x_86_phi : bool;
-  var x_353_phi : i32;
-  var x_356_phi : i32;
-  var x_358_phi : i32;
-  tree[0] = BST(9, -1, -1);
-  switch(0u) {
-    default: {
-      x_58_phi = 0;
-      loop {
-        var x_84 : i32;
-        var x_76 : i32;
-        var x_59 : i32;
-        var x_59_phi : i32;
-        let x_58 : i32 = x_58_phi;
-        x_86_phi = false;
-        if ((x_58 <= 1)) {
-        } else {
-          break;
-        }
-        let x_65 : i32 = tree[x_58].data;
-        if ((5 <= x_65)) {
-          let x_78 : ptr<function, i32> = &(tree[x_58].leftIndex);
-          let x_79 : i32 = *(x_78);
-          if ((x_79 == -1)) {
-            *(x_78) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_86_phi = true;
-            break;
-          } else {
-            x_84 = *(x_78);
-            x_59_phi = x_84;
-            continue;
-          }
-          return;
-        } else {
-          let x_70 : ptr<function, i32> = &(tree[x_58].rightIndex);
-          let x_71 : i32 = *(x_70);
-          if ((x_71 == -1)) {
-            *(x_70) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_86_phi = true;
-            break;
-          } else {
-            x_76 = *(x_70);
-            x_59_phi = x_76;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_59 = x_59_phi;
-          x_58_phi = x_59;
-        }
-      }
-      let x_86 : bool = x_86_phi;
-      if (x_86) {
-        break;
-      }
-    }
-  }
-  var x_91_phi : i32;
-  var x_119_phi : bool;
-  switch(0u) {
-    default: {
-      x_91_phi = 0;
-      loop {
-        var x_117 : i32;
-        var x_109 : i32;
-        var x_92 : i32;
-        var x_92_phi : i32;
-        let x_91 : i32 = x_91_phi;
-        x_119_phi = false;
-        if ((x_91 <= 2)) {
-        } else {
-          break;
-        }
-        let x_98 : i32 = tree[x_91].data;
-        if ((12 <= x_98)) {
-          let x_111 : ptr<function, i32> = &(tree[x_91].leftIndex);
-          let x_112 : i32 = *(x_111);
-          if ((x_112 == -1)) {
-            *(x_111) = 2;
-            tree[2] = BST(12, -1, -1);
-            x_119_phi = true;
-            break;
-          } else {
-            x_117 = *(x_111);
-            x_92_phi = x_117;
-            continue;
-          }
-          return;
-        } else {
-          let x_103 : ptr<function, i32> = &(tree[x_91].rightIndex);
-          let x_104 : i32 = *(x_103);
-          if ((x_104 == -1)) {
-            *(x_103) = 2;
-            tree[2] = BST(12, -1, -1);
-            x_119_phi = true;
-            break;
-          } else {
-            x_109 = *(x_103);
-            x_92_phi = x_109;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_92 = x_92_phi;
-          x_91_phi = x_92;
-        }
-      }
-      let x_119 : bool = x_119_phi;
-      if (x_119) {
-        break;
-      }
-    }
-  }
-  var x_124_phi : i32;
-  var x_152_phi : bool;
-  switch(0u) {
-    default: {
-      x_124_phi = 0;
-      loop {
-        var x_150 : i32;
-        var x_142 : i32;
-        var x_125 : i32;
-        var x_125_phi : i32;
-        let x_124 : i32 = x_124_phi;
-        x_152_phi = false;
-        if ((x_124 <= 3)) {
-        } else {
-          break;
-        }
-        let x_131 : i32 = tree[x_124].data;
-        if ((15 <= x_131)) {
-          let x_144 : ptr<function, i32> = &(tree[x_124].leftIndex);
-          let x_145 : i32 = *(x_144);
-          if ((x_145 == -1)) {
-            *(x_144) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_152_phi = true;
-            break;
-          } else {
-            x_150 = *(x_144);
-            x_125_phi = x_150;
-            continue;
-          }
-          return;
-        } else {
-          let x_136 : ptr<function, i32> = &(tree[x_124].rightIndex);
-          let x_137 : i32 = *(x_136);
-          if ((x_137 == -1)) {
-            *(x_136) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_152_phi = true;
-            break;
-          } else {
-            x_142 = *(x_136);
-            x_125_phi = x_142;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_125 = x_125_phi;
-          x_124_phi = x_125;
-        }
-      }
-      let x_152 : bool = x_152_phi;
-      if (x_152) {
-        break;
-      }
-    }
-  }
-  var x_157_phi : i32;
-  var x_185_phi : bool;
-  switch(0u) {
-    default: {
-      x_157_phi = 0;
-      loop {
-        var x_183 : i32;
-        var x_175 : i32;
-        var x_158 : i32;
-        var x_158_phi : i32;
-        let x_157 : i32 = x_157_phi;
-        x_185_phi = false;
-        if ((x_157 <= 4)) {
-        } else {
-          break;
-        }
-        let x_164 : i32 = tree[x_157].data;
-        if ((7 <= x_164)) {
-          let x_177 : ptr<function, i32> = &(tree[x_157].leftIndex);
-          let x_178 : i32 = *(x_177);
-          if ((x_178 == -1)) {
-            *(x_177) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_185_phi = true;
-            break;
-          } else {
-            x_183 = *(x_177);
-            x_158_phi = x_183;
-            continue;
-          }
-          return;
-        } else {
-          let x_169 : ptr<function, i32> = &(tree[x_157].rightIndex);
-          let x_170 : i32 = *(x_169);
-          if ((x_170 == -1)) {
-            *(x_169) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_185_phi = true;
-            break;
-          } else {
-            x_175 = *(x_169);
-            x_158_phi = x_175;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_158 = x_158_phi;
-          x_157_phi = x_158;
-        }
-      }
-      let x_185 : bool = x_185_phi;
-      if (x_185) {
-        break;
-      }
-    }
-  }
-  var x_190_phi : i32;
-  var x_218_phi : bool;
-  switch(0u) {
-    default: {
-      x_190_phi = 0;
-      loop {
-        var x_216 : i32;
-        var x_208 : i32;
-        var x_191 : i32;
-        var x_191_phi : i32;
-        let x_190 : i32 = x_190_phi;
-        x_218_phi = false;
-        if ((x_190 <= 5)) {
-        } else {
-          break;
-        }
-        let x_197 : i32 = tree[x_190].data;
-        if ((8 <= x_197)) {
-          let x_210 : ptr<function, i32> = &(tree[x_190].leftIndex);
-          let x_211 : i32 = *(x_210);
-          if ((x_211 == -1)) {
-            *(x_210) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_218_phi = true;
-            break;
-          } else {
-            x_216 = *(x_210);
-            x_191_phi = x_216;
-            continue;
-          }
-          return;
-        } else {
-          let x_202 : ptr<function, i32> = &(tree[x_190].rightIndex);
-          let x_203 : i32 = *(x_202);
-          if ((x_203 == -1)) {
-            *(x_202) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_218_phi = true;
-            break;
-          } else {
-            x_208 = *(x_202);
-            x_191_phi = x_208;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_191 = x_191_phi;
-          x_190_phi = x_191;
-        }
-      }
-      let x_218 : bool = x_218_phi;
-      if (x_218) {
-        break;
-      }
-    }
-  }
-  var x_223_phi : i32;
-  var x_251_phi : bool;
-  switch(0u) {
-    default: {
-      x_223_phi = 0;
-      loop {
-        var x_249 : i32;
-        var x_241 : i32;
-        var x_224 : i32;
-        var x_224_phi : i32;
-        let x_223 : i32 = x_223_phi;
-        x_251_phi = false;
-        if ((x_223 <= 6)) {
-        } else {
-          break;
-        }
-        let x_230 : i32 = tree[x_223].data;
-        if ((2 <= x_230)) {
-          let x_243 : ptr<function, i32> = &(tree[x_223].leftIndex);
-          let x_244 : i32 = *(x_243);
-          if ((x_244 == -1)) {
-            *(x_243) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_251_phi = true;
-            break;
-          } else {
-            x_249 = *(x_243);
-            x_224_phi = x_249;
-            continue;
-          }
-          return;
-        } else {
-          let x_235 : ptr<function, i32> = &(tree[x_223].rightIndex);
-          let x_236 : i32 = *(x_235);
-          if ((x_236 == -1)) {
-            *(x_235) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_251_phi = true;
-            break;
-          } else {
-            x_241 = *(x_235);
-            x_224_phi = x_241;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_224 = x_224_phi;
-          x_223_phi = x_224;
-        }
-      }
-      let x_251 : bool = x_251_phi;
-      if (x_251) {
-        break;
-      }
-    }
-  }
-  var x_256_phi : i32;
-  var x_284_phi : bool;
-  switch(0u) {
-    default: {
-      x_256_phi = 0;
-      loop {
-        var x_282 : i32;
-        var x_274 : i32;
-        var x_257 : i32;
-        var x_257_phi : i32;
-        let x_256 : i32 = x_256_phi;
-        x_284_phi = false;
-        if ((x_256 <= 7)) {
-        } else {
-          break;
-        }
-        let x_263 : i32 = tree[x_256].data;
-        if ((6 <= x_263)) {
-          let x_276 : ptr<function, i32> = &(tree[x_256].leftIndex);
-          let x_277 : i32 = *(x_276);
-          if ((x_277 == -1)) {
-            *(x_276) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_284_phi = true;
-            break;
-          } else {
-            x_282 = *(x_276);
-            x_257_phi = x_282;
-            continue;
-          }
-          return;
-        } else {
-          let x_268 : ptr<function, i32> = &(tree[x_256].rightIndex);
-          let x_269 : i32 = *(x_268);
-          if ((x_269 == -1)) {
-            *(x_268) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_284_phi = true;
-            break;
-          } else {
-            x_274 = *(x_268);
-            x_257_phi = x_274;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_257 = x_257_phi;
-          x_256_phi = x_257;
-        }
-      }
-      let x_284 : bool = x_284_phi;
-      if (x_284) {
-        break;
-      }
-    }
-  }
-  var x_289_phi : i32;
-  var x_317_phi : bool;
-  switch(0u) {
-    default: {
-      x_289_phi = 0;
-      loop {
-        var x_315 : i32;
-        var x_307 : i32;
-        var x_290 : i32;
-        var x_290_phi : i32;
-        let x_289 : i32 = x_289_phi;
-        x_317_phi = false;
-        if ((x_289 <= 8)) {
-        } else {
-          break;
-        }
-        let x_296 : i32 = tree[x_289].data;
-        if ((17 <= x_296)) {
-          let x_309 : ptr<function, i32> = &(tree[x_289].leftIndex);
-          let x_310 : i32 = *(x_309);
-          if ((x_310 == -1)) {
-            *(x_309) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_317_phi = true;
-            break;
-          } else {
-            x_315 = *(x_309);
-            x_290_phi = x_315;
-            continue;
-          }
-          return;
-        } else {
-          let x_301 : ptr<function, i32> = &(tree[x_289].rightIndex);
-          let x_302 : i32 = *(x_301);
-          if ((x_302 == -1)) {
-            *(x_301) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_317_phi = true;
-            break;
-          } else {
-            x_307 = *(x_301);
-            x_290_phi = x_307;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_290 = x_290_phi;
-          x_289_phi = x_290;
-        }
-      }
-      let x_317 : bool = x_317_phi;
-      if (x_317) {
-        break;
-      }
-    }
-  }
-  var x_322_phi : i32;
-  var x_350_phi : bool;
-  switch(0u) {
-    default: {
-      x_322_phi = 0;
-      loop {
-        var x_348 : i32;
-        var x_340 : i32;
-        var x_323 : i32;
-        var x_323_phi : i32;
-        let x_322 : i32 = x_322_phi;
-        x_350_phi = false;
-        if ((x_322 <= 9)) {
-        } else {
-          break;
-        }
-        let x_329 : i32 = tree[x_322].data;
-        if ((13 <= x_329)) {
-          let x_342 : ptr<function, i32> = &(tree[x_322].leftIndex);
-          let x_343 : i32 = *(x_342);
-          if ((x_343 == -1)) {
-            *(x_342) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_350_phi = true;
-            break;
-          } else {
-            x_348 = *(x_342);
-            x_323_phi = x_348;
-            continue;
-          }
-          return;
-        } else {
-          let x_334 : ptr<function, i32> = &(tree[x_322].rightIndex);
-          let x_335 : i32 = *(x_334);
-          if ((x_335 == -1)) {
-            *(x_334) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_350_phi = true;
-            break;
-          } else {
-            x_340 = *(x_334);
-            x_323_phi = x_340;
-            continue;
-          }
-          return;
-        }
-        return;
-
-        continuing {
-          x_323 = x_323_phi;
-          x_322_phi = x_323;
-        }
-      }
-      let x_350 : bool = x_350_phi;
-      if (x_350) {
-        break;
-      }
-    }
-  }
-  x_353_phi = 0;
-  x_356_phi = 0;
-  x_358_phi = 0;
-  loop {
-    var x_381 : i32;
-    var x_391 : i32;
-    var x_396 : i32;
-    var x_359 : i32;
-    var x_354_phi : i32;
-    var x_357_phi : i32;
-    let x_353 : i32 = x_353_phi;
-    x_356 = x_356_phi;
-    let x_358 : i32 = x_358_phi;
-    if ((x_358 < 20)) {
-    } else {
-      break;
-    }
-    var x_366_phi : i32;
-    var x_381_phi : i32;
-    var x_382_phi : bool;
-    switch(0u) {
-      default: {
-        x_366_phi = 0;
-        loop {
-          let x_366 : i32 = x_366_phi;
-          x_381_phi = x_353;
-          x_382_phi = false;
-          if ((x_366 != -1)) {
-          } else {
-            break;
-          }
-          let x_373 : BST = tree[x_366];
-          let x_374 : i32 = x_373.data;
-          let x_375 : i32 = x_373.leftIndex;
-          let x_376 : i32 = x_373.rightIndex;
-          if ((x_374 == x_358)) {
-            x_381_phi = x_358;
-            x_382_phi = true;
-            break;
-          }
-
-          continuing {
-            x_366_phi = select(x_375, x_376, (x_358 > x_374));
-          }
-        }
-        x_381 = x_381_phi;
-        let x_382 : bool = x_382_phi;
-        x_354_phi = x_381;
-        if (x_382) {
-          break;
-        }
-        x_354_phi = -1;
-      }
-    }
-    var x_354 : i32;
-    var x_390 : i32;
-    var x_395 : i32;
-    var x_391_phi : i32;
-    var x_396_phi : i32;
-    x_354 = x_354_phi;
-    switch(x_358) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        x_391_phi = x_356;
-        if ((x_354 == bitcast<i32>(x_358))) {
-          x_390 = bitcast<i32>((x_356 + bitcast<i32>(1)));
-          x_391_phi = x_390;
-        }
-        x_391 = x_391_phi;
-        x_357_phi = x_391;
-      }
-      default: {
-        x_396_phi = x_356;
-        if ((x_354 == bitcast<i32>(-1))) {
-          x_395 = bitcast<i32>((x_356 + bitcast<i32>(1)));
-          x_396_phi = x_395;
-        }
-        x_396 = x_396_phi;
-        x_357_phi = x_396;
-      }
-    }
-    let x_357 : i32 = x_357_phi;
-
-    continuing {
-      x_359 = (x_358 + 1);
-      x_353_phi = x_354;
-      x_356_phi = x_357;
-      x_358_phi = x_359;
-    }
-  }
-  if ((x_356 == bitcast<i32>(20))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.msl
deleted file mode 100644
index 95ce08a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.msl
+++ /dev/null
@@ -1,1122 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_22, thread float4* const tint_symbol_23) {
-  tint_array_wrapper tree = {};
-  bool x_67 = false;
-  bool x_114 = false;
-  int x_572 = 0;
-  bool x_67_phi = false;
-  int x_70_phi = 0;
-  bool x_116_phi = false;
-  int x_119_phi = 0;
-  int x_569_phi = 0;
-  int x_572_phi = 0;
-  int x_574_phi = 0;
-  BST const tint_symbol_2 = {.data=9, .leftIndex=-1, .rightIndex=-1};
-  tree.arr[0] = tint_symbol_2;
-  switch(0u) {
-    default: {
-      x_67_phi = false;
-      x_70_phi = 0;
-      while (true) {
-        int x_95 = 0;
-        int x_87 = 0;
-        bool x_68 = false;
-        int x_71 = 0;
-        bool x_68_phi = false;
-        int x_71_phi = 0;
-        x_67 = x_67_phi;
-        int const x_70 = x_70_phi;
-        x_116_phi = x_67;
-        if ((x_70 <= 1)) {
-        } else {
-          break;
-        }
-        int const x_76 = tree.arr[x_70].data;
-        if ((5 <= x_76)) {
-          bool x_114_phi = false;
-          int const x_89_save = x_70;
-          int const x_90 = tree.arr[x_89_save].leftIndex;
-          if ((x_90 == -1)) {
-            float const x_97 = x_8.injectionSwitch.y;
-            float const x_99 = x_8.injectionSwitch.x;
-            if ((x_97 < x_99)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_89_save].leftIndex = 1;
-            BST const tint_symbol_3 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_3;
-            while (true) {
-              x_114_phi = x_67;
-              if ((0 < int(x_97))) {
-              } else {
-                break;
-              }
-              x_114_phi = true;
-              break;
-            }
-            x_114 = x_114_phi;
-            x_116_phi = x_114;
-            if (x_114) {
-              break;
-            }
-          } else {
-            x_95 = tree.arr[x_89_save].leftIndex;
-            x_68_phi = x_67;
-            x_71_phi = x_95;
-            {
-              x_68 = x_68_phi;
-              x_71 = x_71_phi;
-              x_67_phi = x_68;
-              x_70_phi = x_71;
-            }
-            continue;
-          }
-        } else {
-          int const x_81_save = x_70;
-          int const x_82 = tree.arr[x_81_save].rightIndex;
-          if ((x_82 == -1)) {
-            tree.arr[x_81_save].rightIndex = 1;
-            BST const tint_symbol_4 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_4;
-            x_116_phi = true;
-            break;
-          } else {
-            x_87 = tree.arr[x_81_save].rightIndex;
-            x_68_phi = x_67;
-            x_71_phi = x_87;
-            {
-              x_68 = x_68_phi;
-              x_71 = x_71_phi;
-              x_67_phi = x_68;
-              x_70_phi = x_71;
-            }
-            continue;
-          }
-          return;
-        }
-        x_68_phi = x_114;
-        x_71_phi = x_70;
-        {
-          x_68 = x_68_phi;
-          x_71 = x_71_phi;
-          x_67_phi = x_68;
-          x_70_phi = x_71;
-        }
-      }
-      bool const x_116 = x_116_phi;
-      if (x_116) {
-        break;
-      }
-      break;
-    }
-  }
-  x_119_phi = 0;
-  while (true) {
-    bool x_133 = false;
-    int x_120 = 0;
-    bool x_134_phi = false;
-    int const x_119 = x_119_phi;
-    float const x_125 = (*(tint_symbol_22)).y;
-    bool const x_126 = (x_125 < 0.0f);
-    x_134_phi = x_126;
-    if (!(x_126)) {
-      float const x_131 = x_8.injectionSwitch.y;
-      x_133 = (x_119 != int(x_131));
-      x_134_phi = x_133;
-    }
-    bool const x_134 = x_134_phi;
-    if (x_134) {
-    } else {
-      break;
-    }
-    bool x_139 = false;
-    bool x_186 = false;
-    bool x_139_phi = false;
-    int x_142_phi = 0;
-    bool x_188_phi = false;
-    switch(0u) {
-      default: {
-        x_139_phi = false;
-        x_142_phi = 0;
-        while (true) {
-          int x_167 = 0;
-          int x_159 = 0;
-          bool x_140 = false;
-          int x_143 = 0;
-          bool x_140_phi = false;
-          int x_143_phi = 0;
-          x_139 = x_139_phi;
-          int const x_142 = x_142_phi;
-          x_188_phi = x_139;
-          if ((x_142 <= 2)) {
-          } else {
-            break;
-          }
-          int const x_148 = tree.arr[x_142].data;
-          if ((12 <= x_148)) {
-            bool x_186_phi = false;
-            int const x_161_save = x_142;
-            int const x_162 = tree.arr[x_161_save].leftIndex;
-            if ((x_162 == -1)) {
-              float const x_169 = x_8.injectionSwitch.y;
-              float const x_171 = x_8.injectionSwitch.x;
-              if ((x_169 < x_171)) {
-                while (true) {
-                  discard_fragment();
-                }
-                return;
-              }
-              tree.arr[x_161_save].leftIndex = 2;
-              BST const tint_symbol_5 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-              tree.arr[2] = tint_symbol_5;
-              while (true) {
-                x_186_phi = x_139;
-                if ((0 < int(x_169))) {
-                } else {
-                  break;
-                }
-                x_186_phi = true;
-                break;
-              }
-              x_186 = x_186_phi;
-              x_188_phi = x_186;
-              if (x_186) {
-                break;
-              }
-            } else {
-              x_167 = tree.arr[x_161_save].leftIndex;
-              x_140_phi = x_139;
-              x_143_phi = x_167;
-              {
-                x_140 = x_140_phi;
-                x_143 = x_143_phi;
-                x_139_phi = x_140;
-                x_142_phi = x_143;
-              }
-              continue;
-            }
-          } else {
-            int const x_153_save = x_142;
-            int const x_154 = tree.arr[x_153_save].rightIndex;
-            if ((x_154 == -1)) {
-              tree.arr[x_153_save].rightIndex = 2;
-              BST const tint_symbol_6 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-              tree.arr[2] = tint_symbol_6;
-              x_188_phi = true;
-              break;
-            } else {
-              x_159 = tree.arr[x_153_save].rightIndex;
-              x_140_phi = x_139;
-              x_143_phi = x_159;
-              {
-                x_140 = x_140_phi;
-                x_143 = x_143_phi;
-                x_139_phi = x_140;
-                x_142_phi = x_143;
-              }
-              continue;
-            }
-            return;
-          }
-          x_140_phi = x_186;
-          x_143_phi = x_142;
-          {
-            x_140 = x_140_phi;
-            x_143 = x_143_phi;
-            x_139_phi = x_140;
-            x_142_phi = x_143;
-          }
-        }
-        bool const x_188 = x_188_phi;
-        if (x_188) {
-          break;
-        }
-        break;
-      }
-    }
-    {
-      x_120 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-      x_119_phi = x_120;
-    }
-  }
-  bool x_193 = false;
-  bool x_240 = false;
-  bool x_193_phi = false;
-  int x_196_phi = 0;
-  bool x_242_phi = false;
-  switch(0u) {
-    default: {
-      x_193_phi = false;
-      x_196_phi = 0;
-      while (true) {
-        int x_221 = 0;
-        int x_213 = 0;
-        bool x_194 = false;
-        int x_197 = 0;
-        bool x_194_phi = false;
-        int x_197_phi = 0;
-        x_193 = x_193_phi;
-        int const x_196 = x_196_phi;
-        x_242_phi = x_193;
-        if ((x_196 <= 3)) {
-        } else {
-          break;
-        }
-        int const x_202 = tree.arr[x_196].data;
-        if ((15 <= x_202)) {
-          bool x_240_phi = false;
-          int const x_215_save = x_196;
-          int const x_216 = tree.arr[x_215_save].leftIndex;
-          if ((x_216 == -1)) {
-            float const x_223 = x_8.injectionSwitch.y;
-            float const x_225 = x_8.injectionSwitch.x;
-            if ((x_223 < x_225)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_215_save].leftIndex = 3;
-            BST const tint_symbol_7 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_7;
-            while (true) {
-              x_240_phi = x_193;
-              if ((0 < int(x_223))) {
-              } else {
-                break;
-              }
-              x_240_phi = true;
-              break;
-            }
-            x_240 = x_240_phi;
-            x_242_phi = x_240;
-            if (x_240) {
-              break;
-            }
-          } else {
-            x_221 = tree.arr[x_215_save].leftIndex;
-            x_194_phi = x_193;
-            x_197_phi = x_221;
-            {
-              x_194 = x_194_phi;
-              x_197 = x_197_phi;
-              x_193_phi = x_194;
-              x_196_phi = x_197;
-            }
-            continue;
-          }
-        } else {
-          int const x_207_save = x_196;
-          int const x_208 = tree.arr[x_207_save].rightIndex;
-          if ((x_208 == -1)) {
-            tree.arr[x_207_save].rightIndex = 3;
-            BST const tint_symbol_8 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_8;
-            x_242_phi = true;
-            break;
-          } else {
-            x_213 = tree.arr[x_207_save].rightIndex;
-            x_194_phi = x_193;
-            x_197_phi = x_213;
-            {
-              x_194 = x_194_phi;
-              x_197 = x_197_phi;
-              x_193_phi = x_194;
-              x_196_phi = x_197;
-            }
-            continue;
-          }
-          return;
-        }
-        x_194_phi = x_240;
-        x_197_phi = x_196;
-        {
-          x_194 = x_194_phi;
-          x_197 = x_197_phi;
-          x_193_phi = x_194;
-          x_196_phi = x_197;
-        }
-      }
-      bool const x_242 = x_242_phi;
-      if (x_242) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_247 = false;
-  bool x_294 = false;
-  bool x_247_phi = false;
-  int x_250_phi = 0;
-  bool x_296_phi = false;
-  switch(0u) {
-    default: {
-      x_247_phi = false;
-      x_250_phi = 0;
-      while (true) {
-        int x_275 = 0;
-        int x_267 = 0;
-        bool x_248 = false;
-        int x_251 = 0;
-        bool x_248_phi = false;
-        int x_251_phi = 0;
-        x_247 = x_247_phi;
-        int const x_250 = x_250_phi;
-        x_296_phi = x_247;
-        if ((x_250 <= 4)) {
-        } else {
-          break;
-        }
-        int const x_256 = tree.arr[x_250].data;
-        if ((7 <= x_256)) {
-          bool x_294_phi = false;
-          int const x_269_save = x_250;
-          int const x_270 = tree.arr[x_269_save].leftIndex;
-          if ((x_270 == -1)) {
-            float const x_277 = x_8.injectionSwitch.y;
-            float const x_279 = x_8.injectionSwitch.x;
-            if ((x_277 < x_279)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_269_save].leftIndex = 4;
-            BST const tint_symbol_9 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_9;
-            while (true) {
-              x_294_phi = x_247;
-              if ((0 < int(x_277))) {
-              } else {
-                break;
-              }
-              x_294_phi = true;
-              break;
-            }
-            x_294 = x_294_phi;
-            x_296_phi = x_294;
-            if (x_294) {
-              break;
-            }
-          } else {
-            x_275 = tree.arr[x_269_save].leftIndex;
-            x_248_phi = x_247;
-            x_251_phi = x_275;
-            {
-              x_248 = x_248_phi;
-              x_251 = x_251_phi;
-              x_247_phi = x_248;
-              x_250_phi = x_251;
-            }
-            continue;
-          }
-        } else {
-          int const x_261_save = x_250;
-          int const x_262 = tree.arr[x_261_save].rightIndex;
-          if ((x_262 == -1)) {
-            tree.arr[x_261_save].rightIndex = 4;
-            BST const tint_symbol_10 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_10;
-            x_296_phi = true;
-            break;
-          } else {
-            x_267 = tree.arr[x_261_save].rightIndex;
-            x_248_phi = x_247;
-            x_251_phi = x_267;
-            {
-              x_248 = x_248_phi;
-              x_251 = x_251_phi;
-              x_247_phi = x_248;
-              x_250_phi = x_251;
-            }
-            continue;
-          }
-          return;
-        }
-        x_248_phi = x_294;
-        x_251_phi = x_250;
-        {
-          x_248 = x_248_phi;
-          x_251 = x_251_phi;
-          x_247_phi = x_248;
-          x_250_phi = x_251;
-        }
-      }
-      bool const x_296 = x_296_phi;
-      if (x_296) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_301 = false;
-  bool x_348 = false;
-  bool x_301_phi = false;
-  int x_304_phi = 0;
-  bool x_350_phi = false;
-  switch(0u) {
-    default: {
-      x_301_phi = false;
-      x_304_phi = 0;
-      while (true) {
-        int x_329 = 0;
-        int x_321 = 0;
-        bool x_302 = false;
-        int x_305 = 0;
-        bool x_302_phi = false;
-        int x_305_phi = 0;
-        x_301 = x_301_phi;
-        int const x_304 = x_304_phi;
-        x_350_phi = x_301;
-        if ((x_304 <= 5)) {
-        } else {
-          break;
-        }
-        int const x_310 = tree.arr[x_304].data;
-        if ((8 <= x_310)) {
-          bool x_348_phi = false;
-          int const x_323_save = x_304;
-          int const x_324 = tree.arr[x_323_save].leftIndex;
-          if ((x_324 == -1)) {
-            float const x_331 = x_8.injectionSwitch.y;
-            float const x_333 = x_8.injectionSwitch.x;
-            if ((x_331 < x_333)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_323_save].leftIndex = 5;
-            BST const tint_symbol_11 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_11;
-            while (true) {
-              x_348_phi = x_301;
-              if ((0 < int(x_331))) {
-              } else {
-                break;
-              }
-              x_348_phi = true;
-              break;
-            }
-            x_348 = x_348_phi;
-            x_350_phi = x_348;
-            if (x_348) {
-              break;
-            }
-          } else {
-            x_329 = tree.arr[x_323_save].leftIndex;
-            x_302_phi = x_301;
-            x_305_phi = x_329;
-            {
-              x_302 = x_302_phi;
-              x_305 = x_305_phi;
-              x_301_phi = x_302;
-              x_304_phi = x_305;
-            }
-            continue;
-          }
-        } else {
-          int const x_315_save = x_304;
-          int const x_316 = tree.arr[x_315_save].rightIndex;
-          if ((x_316 == -1)) {
-            tree.arr[x_315_save].rightIndex = 5;
-            BST const tint_symbol_12 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_12;
-            x_350_phi = true;
-            break;
-          } else {
-            x_321 = tree.arr[x_315_save].rightIndex;
-            x_302_phi = x_301;
-            x_305_phi = x_321;
-            {
-              x_302 = x_302_phi;
-              x_305 = x_305_phi;
-              x_301_phi = x_302;
-              x_304_phi = x_305;
-            }
-            continue;
-          }
-          return;
-        }
-        x_302_phi = x_348;
-        x_305_phi = x_304;
-        {
-          x_302 = x_302_phi;
-          x_305 = x_305_phi;
-          x_301_phi = x_302;
-          x_304_phi = x_305;
-        }
-      }
-      bool const x_350 = x_350_phi;
-      if (x_350) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_355 = false;
-  bool x_402 = false;
-  bool x_355_phi = false;
-  int x_358_phi = 0;
-  bool x_404_phi = false;
-  switch(0u) {
-    default: {
-      x_355_phi = false;
-      x_358_phi = 0;
-      while (true) {
-        int x_383 = 0;
-        int x_375 = 0;
-        bool x_356 = false;
-        int x_359 = 0;
-        bool x_356_phi = false;
-        int x_359_phi = 0;
-        x_355 = x_355_phi;
-        int const x_358 = x_358_phi;
-        x_404_phi = x_355;
-        if ((x_358 <= 6)) {
-        } else {
-          break;
-        }
-        int const x_364 = tree.arr[x_358].data;
-        if ((2 <= x_364)) {
-          bool x_402_phi = false;
-          int const x_377_save = x_358;
-          int const x_378 = tree.arr[x_377_save].leftIndex;
-          if ((x_378 == -1)) {
-            float const x_385 = x_8.injectionSwitch.y;
-            float const x_387 = x_8.injectionSwitch.x;
-            if ((x_385 < x_387)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_377_save].leftIndex = 6;
-            BST const tint_symbol_13 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_13;
-            while (true) {
-              x_402_phi = x_355;
-              if ((0 < int(x_385))) {
-              } else {
-                break;
-              }
-              x_402_phi = true;
-              break;
-            }
-            x_402 = x_402_phi;
-            x_404_phi = x_402;
-            if (x_402) {
-              break;
-            }
-          } else {
-            x_383 = tree.arr[x_377_save].leftIndex;
-            x_356_phi = x_355;
-            x_359_phi = x_383;
-            {
-              x_356 = x_356_phi;
-              x_359 = x_359_phi;
-              x_355_phi = x_356;
-              x_358_phi = x_359;
-            }
-            continue;
-          }
-        } else {
-          int const x_369_save = x_358;
-          int const x_370 = tree.arr[x_369_save].rightIndex;
-          if ((x_370 == -1)) {
-            tree.arr[x_369_save].rightIndex = 6;
-            BST const tint_symbol_14 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_14;
-            x_404_phi = true;
-            break;
-          } else {
-            x_375 = tree.arr[x_369_save].rightIndex;
-            x_356_phi = x_355;
-            x_359_phi = x_375;
-            {
-              x_356 = x_356_phi;
-              x_359 = x_359_phi;
-              x_355_phi = x_356;
-              x_358_phi = x_359;
-            }
-            continue;
-          }
-          return;
-        }
-        x_356_phi = x_402;
-        x_359_phi = x_358;
-        {
-          x_356 = x_356_phi;
-          x_359 = x_359_phi;
-          x_355_phi = x_356;
-          x_358_phi = x_359;
-        }
-      }
-      bool const x_404 = x_404_phi;
-      if (x_404) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_409 = false;
-  bool x_456 = false;
-  bool x_409_phi = false;
-  int x_412_phi = 0;
-  bool x_458_phi = false;
-  switch(0u) {
-    default: {
-      x_409_phi = false;
-      x_412_phi = 0;
-      while (true) {
-        int x_437 = 0;
-        int x_429 = 0;
-        bool x_410 = false;
-        int x_413 = 0;
-        bool x_410_phi = false;
-        int x_413_phi = 0;
-        x_409 = x_409_phi;
-        int const x_412 = x_412_phi;
-        x_458_phi = x_409;
-        if ((x_412 <= 7)) {
-        } else {
-          break;
-        }
-        int const x_418 = tree.arr[x_412].data;
-        if ((6 <= x_418)) {
-          bool x_456_phi = false;
-          int const x_431_save = x_412;
-          int const x_432 = tree.arr[x_431_save].leftIndex;
-          if ((x_432 == -1)) {
-            float const x_439 = x_8.injectionSwitch.y;
-            float const x_441 = x_8.injectionSwitch.x;
-            if ((x_439 < x_441)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_431_save].leftIndex = 7;
-            BST const tint_symbol_15 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_15;
-            while (true) {
-              x_456_phi = x_409;
-              if ((0 < int(x_439))) {
-              } else {
-                break;
-              }
-              x_456_phi = true;
-              break;
-            }
-            x_456 = x_456_phi;
-            x_458_phi = x_456;
-            if (x_456) {
-              break;
-            }
-          } else {
-            x_437 = tree.arr[x_431_save].leftIndex;
-            x_410_phi = x_409;
-            x_413_phi = x_437;
-            {
-              x_410 = x_410_phi;
-              x_413 = x_413_phi;
-              x_409_phi = x_410;
-              x_412_phi = x_413;
-            }
-            continue;
-          }
-        } else {
-          int const x_423_save = x_412;
-          int const x_424 = tree.arr[x_423_save].rightIndex;
-          if ((x_424 == -1)) {
-            tree.arr[x_423_save].rightIndex = 7;
-            BST const tint_symbol_16 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_16;
-            x_458_phi = true;
-            break;
-          } else {
-            x_429 = tree.arr[x_423_save].rightIndex;
-            x_410_phi = x_409;
-            x_413_phi = x_429;
-            {
-              x_410 = x_410_phi;
-              x_413 = x_413_phi;
-              x_409_phi = x_410;
-              x_412_phi = x_413;
-            }
-            continue;
-          }
-          return;
-        }
-        x_410_phi = x_456;
-        x_413_phi = x_412;
-        {
-          x_410 = x_410_phi;
-          x_413 = x_413_phi;
-          x_409_phi = x_410;
-          x_412_phi = x_413;
-        }
-      }
-      bool const x_458 = x_458_phi;
-      if (x_458) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_463 = false;
-  bool x_510 = false;
-  bool x_463_phi = false;
-  int x_466_phi = 0;
-  bool x_512_phi = false;
-  switch(0u) {
-    default: {
-      x_463_phi = false;
-      x_466_phi = 0;
-      while (true) {
-        int x_491 = 0;
-        int x_483 = 0;
-        bool x_464 = false;
-        int x_467 = 0;
-        bool x_464_phi = false;
-        int x_467_phi = 0;
-        x_463 = x_463_phi;
-        int const x_466 = x_466_phi;
-        x_512_phi = x_463;
-        if ((x_466 <= 8)) {
-        } else {
-          break;
-        }
-        int const x_472 = tree.arr[x_466].data;
-        if ((17 <= x_472)) {
-          bool x_510_phi = false;
-          int const x_485_save = x_466;
-          int const x_486 = tree.arr[x_485_save].leftIndex;
-          if ((x_486 == -1)) {
-            float const x_493 = x_8.injectionSwitch.y;
-            float const x_495 = x_8.injectionSwitch.x;
-            if ((x_493 < x_495)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_485_save].leftIndex = 8;
-            BST const tint_symbol_17 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_17;
-            while (true) {
-              x_510_phi = x_463;
-              if ((0 < int(x_493))) {
-              } else {
-                break;
-              }
-              x_510_phi = true;
-              break;
-            }
-            x_510 = x_510_phi;
-            x_512_phi = x_510;
-            if (x_510) {
-              break;
-            }
-          } else {
-            x_491 = tree.arr[x_485_save].leftIndex;
-            x_464_phi = x_463;
-            x_467_phi = x_491;
-            {
-              x_464 = x_464_phi;
-              x_467 = x_467_phi;
-              x_463_phi = x_464;
-              x_466_phi = x_467;
-            }
-            continue;
-          }
-        } else {
-          int const x_477_save = x_466;
-          int const x_478 = tree.arr[x_477_save].rightIndex;
-          if ((x_478 == -1)) {
-            tree.arr[x_477_save].rightIndex = 8;
-            BST const tint_symbol_18 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_18;
-            x_512_phi = true;
-            break;
-          } else {
-            x_483 = tree.arr[x_477_save].rightIndex;
-            x_464_phi = x_463;
-            x_467_phi = x_483;
-            {
-              x_464 = x_464_phi;
-              x_467 = x_467_phi;
-              x_463_phi = x_464;
-              x_466_phi = x_467;
-            }
-            continue;
-          }
-          return;
-        }
-        x_464_phi = x_510;
-        x_467_phi = x_466;
-        {
-          x_464 = x_464_phi;
-          x_467 = x_467_phi;
-          x_463_phi = x_464;
-          x_466_phi = x_467;
-        }
-      }
-      bool const x_512 = x_512_phi;
-      if (x_512) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_517 = false;
-  bool x_564 = false;
-  bool x_517_phi = false;
-  int x_520_phi = 0;
-  bool x_566_phi = false;
-  switch(0u) {
-    default: {
-      x_517_phi = false;
-      x_520_phi = 0;
-      while (true) {
-        int x_545 = 0;
-        int x_537 = 0;
-        bool x_518 = false;
-        int x_521 = 0;
-        bool x_518_phi = false;
-        int x_521_phi = 0;
-        x_517 = x_517_phi;
-        int const x_520 = x_520_phi;
-        x_566_phi = x_517;
-        if ((x_520 <= 9)) {
-        } else {
-          break;
-        }
-        int const x_526 = tree.arr[x_520].data;
-        if ((13 <= x_526)) {
-          bool x_564_phi = false;
-          int const x_539_save = x_520;
-          int const x_540 = tree.arr[x_539_save].leftIndex;
-          if ((x_540 == -1)) {
-            float const x_547 = x_8.injectionSwitch.y;
-            float const x_549 = x_8.injectionSwitch.x;
-            if ((x_547 < x_549)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_539_save].leftIndex = 9;
-            BST const tint_symbol_19 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_19;
-            while (true) {
-              x_564_phi = x_517;
-              if ((0 < int(x_547))) {
-              } else {
-                break;
-              }
-              x_564_phi = true;
-              break;
-            }
-            x_564 = x_564_phi;
-            x_566_phi = x_564;
-            if (x_564) {
-              break;
-            }
-          } else {
-            x_545 = tree.arr[x_539_save].leftIndex;
-            x_518_phi = x_517;
-            x_521_phi = x_545;
-            {
-              x_518 = x_518_phi;
-              x_521 = x_521_phi;
-              x_517_phi = x_518;
-              x_520_phi = x_521;
-            }
-            continue;
-          }
-        } else {
-          int const x_531_save = x_520;
-          int const x_532 = tree.arr[x_531_save].rightIndex;
-          if ((x_532 == -1)) {
-            tree.arr[x_531_save].rightIndex = 9;
-            BST const tint_symbol_20 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_20;
-            x_566_phi = true;
-            break;
-          } else {
-            x_537 = tree.arr[x_531_save].rightIndex;
-            x_518_phi = x_517;
-            x_521_phi = x_537;
-            {
-              x_518 = x_518_phi;
-              x_521 = x_521_phi;
-              x_517_phi = x_518;
-              x_520_phi = x_521;
-            }
-            continue;
-          }
-          return;
-        }
-        x_518_phi = x_564;
-        x_521_phi = x_520;
-        {
-          x_518 = x_518_phi;
-          x_521 = x_521_phi;
-          x_517_phi = x_518;
-          x_520_phi = x_521;
-        }
-      }
-      bool const x_566 = x_566_phi;
-      if (x_566) {
-        break;
-      }
-      break;
-    }
-  }
-  x_569_phi = 0;
-  x_572_phi = 0;
-  x_574_phi = 0;
-  while (true) {
-    int x_597 = 0;
-    int x_607 = 0;
-    int x_612 = 0;
-    int x_575 = 0;
-    int x_570_phi = 0;
-    int x_573_phi = 0;
-    int const x_569 = x_569_phi;
-    x_572 = x_572_phi;
-    int const x_574 = x_574_phi;
-    if ((x_574 < 20)) {
-    } else {
-      break;
-    }
-    int x_582_phi = 0;
-    int x_597_phi = 0;
-    bool x_598_phi = false;
-    switch(0u) {
-      default: {
-        x_582_phi = 0;
-        while (true) {
-          int const x_582 = x_582_phi;
-          x_597_phi = x_569;
-          x_598_phi = false;
-          if ((x_582 != -1)) {
-          } else {
-            break;
-          }
-          BST const x_589 = tree.arr[x_582];
-          int const x_590 = x_589.data;
-          int const x_591 = x_589.leftIndex;
-          int const x_592 = x_589.rightIndex;
-          if ((x_590 == x_574)) {
-            x_597_phi = x_574;
-            x_598_phi = true;
-            break;
-          }
-          {
-            x_582_phi = select(x_591, x_592, (x_574 > x_590));
-          }
-        }
-        x_597 = x_597_phi;
-        bool const x_598 = x_598_phi;
-        x_570_phi = x_597;
-        if (x_598) {
-          break;
-        }
-        x_570_phi = -1;
-        break;
-      }
-    }
-    int x_570 = 0;
-    int x_606 = 0;
-    int x_611 = 0;
-    int x_607_phi = 0;
-    int x_612_phi = 0;
-    x_570 = x_570_phi;
-    switch(x_574) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_607_phi = x_572;
-        if ((x_570 == as_type<int>(x_574))) {
-          x_606 = as_type<int>(as_type<int>((as_type<uint>(x_572) + as_type<uint>(as_type<int>(1)))));
-          x_607_phi = x_606;
-        }
-        x_607 = x_607_phi;
-        x_573_phi = x_607;
-        break;
-      }
-      default: {
-        x_612_phi = x_572;
-        if ((x_570 == as_type<int>(-1))) {
-          x_611 = as_type<int>(as_type<int>((as_type<uint>(x_572) + as_type<uint>(as_type<int>(1)))));
-          x_612_phi = x_611;
-        }
-        x_612 = x_612_phi;
-        x_573_phi = x_612;
-        break;
-      }
-    }
-    int const x_573 = x_573_phi;
-    {
-      x_575 = as_type<int>((as_type<uint>(x_574) + as_type<uint>(1)));
-      x_569_phi = x_570;
-      x_572_phi = x_573;
-      x_574_phi = x_575;
-    }
-  }
-  if ((x_572 == as_type<int>(20))) {
-    *(tint_symbol_23) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_23) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_24, thread float4* const tint_symbol_25) {
-  *(tint_symbol_24) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_24, tint_symbol_25);
-  main_out const tint_symbol_21 = {.x_GLF_color_1=*(tint_symbol_25)};
-  return tint_symbol_21;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_26 = 0.0f;
-  thread float4 tint_symbol_27 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_26), &(tint_symbol_27));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.spvasm
deleted file mode 100644
index 15d09a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,1920 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 1006
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %x_67 "x_67"
-               OpName %x_114 "x_114"
-               OpName %x_572 "x_572"
-               OpName %x_67_phi "x_67_phi"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_116_phi "x_116_phi"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_569_phi "x_569_phi"
-               OpName %x_572_phi "x_572_phi"
-               OpName %x_574_phi "x_574_phi"
-               OpName %x_95 "x_95"
-               OpName %x_87 "x_87"
-               OpName %x_68 "x_68"
-               OpName %x_71 "x_71"
-               OpName %x_68_phi "x_68_phi"
-               OpName %x_71_phi "x_71_phi"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_133 "x_133"
-               OpName %x_120 "x_120"
-               OpName %x_134_phi "x_134_phi"
-               OpName %x_139 "x_139"
-               OpName %x_186 "x_186"
-               OpName %x_139_phi "x_139_phi"
-               OpName %x_142_phi "x_142_phi"
-               OpName %x_188_phi "x_188_phi"
-               OpName %x_167 "x_167"
-               OpName %x_159 "x_159"
-               OpName %x_140 "x_140"
-               OpName %x_143 "x_143"
-               OpName %x_140_phi "x_140_phi"
-               OpName %x_143_phi "x_143_phi"
-               OpName %x_186_phi "x_186_phi"
-               OpName %x_193 "x_193"
-               OpName %x_240 "x_240"
-               OpName %x_193_phi "x_193_phi"
-               OpName %x_196_phi "x_196_phi"
-               OpName %x_242_phi "x_242_phi"
-               OpName %x_221 "x_221"
-               OpName %x_213 "x_213"
-               OpName %x_194 "x_194"
-               OpName %x_197 "x_197"
-               OpName %x_194_phi "x_194_phi"
-               OpName %x_197_phi "x_197_phi"
-               OpName %x_240_phi "x_240_phi"
-               OpName %x_247 "x_247"
-               OpName %x_294 "x_294"
-               OpName %x_247_phi "x_247_phi"
-               OpName %x_250_phi "x_250_phi"
-               OpName %x_296_phi "x_296_phi"
-               OpName %x_275 "x_275"
-               OpName %x_267 "x_267"
-               OpName %x_248 "x_248"
-               OpName %x_251 "x_251"
-               OpName %x_248_phi "x_248_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_294_phi "x_294_phi"
-               OpName %x_301 "x_301"
-               OpName %x_348 "x_348"
-               OpName %x_301_phi "x_301_phi"
-               OpName %x_304_phi "x_304_phi"
-               OpName %x_350_phi "x_350_phi"
-               OpName %x_329 "x_329"
-               OpName %x_321 "x_321"
-               OpName %x_302 "x_302"
-               OpName %x_305 "x_305"
-               OpName %x_302_phi "x_302_phi"
-               OpName %x_305_phi "x_305_phi"
-               OpName %x_348_phi "x_348_phi"
-               OpName %x_355 "x_355"
-               OpName %x_402 "x_402"
-               OpName %x_355_phi "x_355_phi"
-               OpName %x_358_phi "x_358_phi"
-               OpName %x_404_phi "x_404_phi"
-               OpName %x_383 "x_383"
-               OpName %x_375 "x_375"
-               OpName %x_356 "x_356"
-               OpName %x_359 "x_359"
-               OpName %x_356_phi "x_356_phi"
-               OpName %x_359_phi "x_359_phi"
-               OpName %x_402_phi "x_402_phi"
-               OpName %x_409 "x_409"
-               OpName %x_456 "x_456"
-               OpName %x_409_phi "x_409_phi"
-               OpName %x_412_phi "x_412_phi"
-               OpName %x_458_phi "x_458_phi"
-               OpName %x_437 "x_437"
-               OpName %x_429 "x_429"
-               OpName %x_410 "x_410"
-               OpName %x_413 "x_413"
-               OpName %x_410_phi "x_410_phi"
-               OpName %x_413_phi "x_413_phi"
-               OpName %x_456_phi "x_456_phi"
-               OpName %x_463 "x_463"
-               OpName %x_510 "x_510"
-               OpName %x_463_phi "x_463_phi"
-               OpName %x_466_phi "x_466_phi"
-               OpName %x_512_phi "x_512_phi"
-               OpName %x_491 "x_491"
-               OpName %x_483 "x_483"
-               OpName %x_464 "x_464"
-               OpName %x_467 "x_467"
-               OpName %x_464_phi "x_464_phi"
-               OpName %x_467_phi "x_467_phi"
-               OpName %x_510_phi "x_510_phi"
-               OpName %x_517 "x_517"
-               OpName %x_564 "x_564"
-               OpName %x_517_phi "x_517_phi"
-               OpName %x_520_phi "x_520_phi"
-               OpName %x_566_phi "x_566_phi"
-               OpName %x_545 "x_545"
-               OpName %x_537 "x_537"
-               OpName %x_518 "x_518"
-               OpName %x_521 "x_521"
-               OpName %x_518_phi "x_518_phi"
-               OpName %x_521_phi "x_521_phi"
-               OpName %x_564_phi "x_564_phi"
-               OpName %x_597 "x_597"
-               OpName %x_607 "x_607"
-               OpName %x_612 "x_612"
-               OpName %x_575 "x_575"
-               OpName %x_570_phi "x_570_phi"
-               OpName %x_573_phi "x_573_phi"
-               OpName %x_582_phi "x_582_phi"
-               OpName %x_597_phi "x_597_phi"
-               OpName %x_598_phi "x_598_phi"
-               OpName %x_570 "x_570"
-               OpName %x_606 "x_606"
-               OpName %x_611 "x_611"
-               OpName %x_607_phi "x_607_phi"
-               OpName %x_612_phi "x_612_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Function__arr_BST_uint_10 = OpTypePointer Function %_arr_BST_uint_10
-         %26 = OpConstantNull %_arr_BST_uint_10
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-%_ptr_Function_BST = OpTypePointer Function %BST
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-         %47 = OpConstantComposite %BST %int_9 %int_n1 %int_n1
-     %uint_0 = OpConstant %uint 0
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-         %99 = OpConstantComposite %BST %int_5 %int_n1 %int_n1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-     %int_12 = OpConstant %int 12
-        %218 = OpConstantComposite %BST %int_12 %int_n1 %int_n1
-      %int_3 = OpConstant %int 3
-     %int_15 = OpConstant %int 15
-        %312 = OpConstantComposite %BST %int_15 %int_n1 %int_n1
-      %int_4 = OpConstant %int 4
-      %int_7 = OpConstant %int 7
-        %404 = OpConstantComposite %BST %int_7 %int_n1 %int_n1
-      %int_8 = OpConstant %int 8
-        %495 = OpConstantComposite %BST %int_8 %int_n1 %int_n1
-      %int_6 = OpConstant %int 6
-        %586 = OpConstantComposite %BST %int_2 %int_n1 %int_n1
-        %676 = OpConstantComposite %BST %int_6 %int_n1 %int_n1
-     %int_17 = OpConstant %int 17
-        %767 = OpConstantComposite %BST %int_17 %int_n1 %int_n1
-     %int_13 = OpConstant %int 13
-        %858 = OpConstantComposite %BST %int_13 %int_n1 %int_n1
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-        %991 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %992 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %993 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %tree = OpVariable %_ptr_Function__arr_BST_uint_10 Function %26
-       %x_67 = OpVariable %_ptr_Function_bool Function %30
-      %x_114 = OpVariable %_ptr_Function_bool Function %30
-      %x_572 = OpVariable %_ptr_Function_int Function %34
-   %x_67_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_70_phi = OpVariable %_ptr_Function_int Function %34
-  %x_116_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_119_phi = OpVariable %_ptr_Function_int Function %34
-  %x_569_phi = OpVariable %_ptr_Function_int Function %34
-  %x_572_phi = OpVariable %_ptr_Function_int Function %34
-  %x_574_phi = OpVariable %_ptr_Function_int Function %34
-       %x_95 = OpVariable %_ptr_Function_int Function %34
-       %x_87 = OpVariable %_ptr_Function_int Function %34
-       %x_68 = OpVariable %_ptr_Function_bool Function %30
-       %x_71 = OpVariable %_ptr_Function_int Function %34
-   %x_68_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_71_phi = OpVariable %_ptr_Function_int Function %34
-  %x_114_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_133 = OpVariable %_ptr_Function_bool Function %30
-      %x_120 = OpVariable %_ptr_Function_int Function %34
-  %x_134_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_139 = OpVariable %_ptr_Function_bool Function %30
-      %x_186 = OpVariable %_ptr_Function_bool Function %30
-  %x_139_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_142_phi = OpVariable %_ptr_Function_int Function %34
-  %x_188_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_167 = OpVariable %_ptr_Function_int Function %34
-      %x_159 = OpVariable %_ptr_Function_int Function %34
-      %x_140 = OpVariable %_ptr_Function_bool Function %30
-      %x_143 = OpVariable %_ptr_Function_int Function %34
-  %x_140_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_143_phi = OpVariable %_ptr_Function_int Function %34
-  %x_186_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_193 = OpVariable %_ptr_Function_bool Function %30
-      %x_240 = OpVariable %_ptr_Function_bool Function %30
-  %x_193_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_196_phi = OpVariable %_ptr_Function_int Function %34
-  %x_242_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_221 = OpVariable %_ptr_Function_int Function %34
-      %x_213 = OpVariable %_ptr_Function_int Function %34
-      %x_194 = OpVariable %_ptr_Function_bool Function %30
-      %x_197 = OpVariable %_ptr_Function_int Function %34
-  %x_194_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_197_phi = OpVariable %_ptr_Function_int Function %34
-  %x_240_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_247 = OpVariable %_ptr_Function_bool Function %30
-      %x_294 = OpVariable %_ptr_Function_bool Function %30
-  %x_247_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_250_phi = OpVariable %_ptr_Function_int Function %34
-  %x_296_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_275 = OpVariable %_ptr_Function_int Function %34
-      %x_267 = OpVariable %_ptr_Function_int Function %34
-      %x_248 = OpVariable %_ptr_Function_bool Function %30
-      %x_251 = OpVariable %_ptr_Function_int Function %34
-  %x_248_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_251_phi = OpVariable %_ptr_Function_int Function %34
-  %x_294_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_301 = OpVariable %_ptr_Function_bool Function %30
-      %x_348 = OpVariable %_ptr_Function_bool Function %30
-  %x_301_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_304_phi = OpVariable %_ptr_Function_int Function %34
-  %x_350_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_329 = OpVariable %_ptr_Function_int Function %34
-      %x_321 = OpVariable %_ptr_Function_int Function %34
-      %x_302 = OpVariable %_ptr_Function_bool Function %30
-      %x_305 = OpVariable %_ptr_Function_int Function %34
-  %x_302_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_305_phi = OpVariable %_ptr_Function_int Function %34
-  %x_348_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_355 = OpVariable %_ptr_Function_bool Function %30
-      %x_402 = OpVariable %_ptr_Function_bool Function %30
-  %x_355_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_358_phi = OpVariable %_ptr_Function_int Function %34
-  %x_404_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_383 = OpVariable %_ptr_Function_int Function %34
-      %x_375 = OpVariable %_ptr_Function_int Function %34
-      %x_356 = OpVariable %_ptr_Function_bool Function %30
-      %x_359 = OpVariable %_ptr_Function_int Function %34
-  %x_356_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_359_phi = OpVariable %_ptr_Function_int Function %34
-  %x_402_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_409 = OpVariable %_ptr_Function_bool Function %30
-      %x_456 = OpVariable %_ptr_Function_bool Function %30
-  %x_409_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_412_phi = OpVariable %_ptr_Function_int Function %34
-  %x_458_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_437 = OpVariable %_ptr_Function_int Function %34
-      %x_429 = OpVariable %_ptr_Function_int Function %34
-      %x_410 = OpVariable %_ptr_Function_bool Function %30
-      %x_413 = OpVariable %_ptr_Function_int Function %34
-  %x_410_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_413_phi = OpVariable %_ptr_Function_int Function %34
-  %x_456_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_463 = OpVariable %_ptr_Function_bool Function %30
-      %x_510 = OpVariable %_ptr_Function_bool Function %30
-  %x_463_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_466_phi = OpVariable %_ptr_Function_int Function %34
-  %x_512_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_491 = OpVariable %_ptr_Function_int Function %34
-      %x_483 = OpVariable %_ptr_Function_int Function %34
-      %x_464 = OpVariable %_ptr_Function_bool Function %30
-      %x_467 = OpVariable %_ptr_Function_int Function %34
-  %x_464_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_467_phi = OpVariable %_ptr_Function_int Function %34
-  %x_510_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_517 = OpVariable %_ptr_Function_bool Function %30
-      %x_564 = OpVariable %_ptr_Function_bool Function %30
-  %x_517_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_520_phi = OpVariable %_ptr_Function_int Function %34
-  %x_566_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_545 = OpVariable %_ptr_Function_int Function %34
-      %x_537 = OpVariable %_ptr_Function_int Function %34
-      %x_518 = OpVariable %_ptr_Function_bool Function %30
-      %x_521 = OpVariable %_ptr_Function_int Function %34
-  %x_518_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_521_phi = OpVariable %_ptr_Function_int Function %34
-  %x_564_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_597 = OpVariable %_ptr_Function_int Function %34
-      %x_607 = OpVariable %_ptr_Function_int Function %34
-      %x_612 = OpVariable %_ptr_Function_int Function %34
-      %x_575 = OpVariable %_ptr_Function_int Function %34
-  %x_570_phi = OpVariable %_ptr_Function_int Function %34
-  %x_573_phi = OpVariable %_ptr_Function_int Function %34
-  %x_582_phi = OpVariable %_ptr_Function_int Function %34
-  %x_597_phi = OpVariable %_ptr_Function_int Function %34
-  %x_598_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_570 = OpVariable %_ptr_Function_int Function %34
-      %x_606 = OpVariable %_ptr_Function_int Function %34
-      %x_611 = OpVariable %_ptr_Function_int Function %34
-  %x_607_phi = OpVariable %_ptr_Function_int Function %34
-  %x_612_phi = OpVariable %_ptr_Function_int Function %34
-         %44 = OpAccessChain %_ptr_Function_BST %tree %int_0
-               OpStore %44 %47
-               OpSelectionMerge %48 None
-               OpSwitch %uint_0 %50
-         %50 = OpLabel
-               OpStore %x_67_phi %false
-               OpStore %x_70_phi %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %62 = OpLoad %bool %x_67_phi
-               OpStore %x_67 %62
-         %63 = OpLoad %int %x_70_phi
-         %64 = OpLoad %bool %x_67
-               OpStore %x_116_phi %64
-         %66 = OpSLessThanEqual %bool %63 %int_1
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %53
-         %67 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_int %tree %63 %uint_0
-         %71 = OpLoad %int %70
-         %73 = OpSLessThanEqual %bool %int_5 %71
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_int %tree %63 %uint_1
-         %80 = OpLoad %int %79
-         %81 = OpIEqual %bool %80 %int_n1
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-         %86 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %89 = OpLoad %float %88
-         %90 = OpFOrdLessThan %bool %87 %89
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %91
-         %92 = OpLabel
-               OpBranch %93
-         %93 = OpLabel
-               OpLoopMerge %94 %95 None
-               OpBranch %96
-         %96 = OpLabel
-               OpKill
-         %95 = OpLabel
-               OpBranch %93
-         %94 = OpLabel
-               OpReturn
-         %91 = OpLabel
-         %97 = OpAccessChain %_ptr_Function_int %tree %63 %uint_1
-               OpStore %97 %int_1
-         %98 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %98 %99
-               OpBranch %100
-        %100 = OpLabel
-               OpLoopMerge %101 %102 None
-               OpBranch %103
-        %103 = OpLabel
-        %104 = OpLoad %bool %x_67
-               OpStore %x_114_phi %104
-        %105 = OpConvertFToS %int %87
-        %106 = OpSLessThan %bool %int_0 %105
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %109
-        %108 = OpLabel
-               OpBranch %107
-        %109 = OpLabel
-               OpBranch %101
-        %107 = OpLabel
-               OpStore %x_114_phi %true
-               OpBranch %101
-        %102 = OpLabel
-               OpBranch %100
-        %101 = OpLabel
-        %111 = OpLoad %bool %x_114_phi
-               OpStore %x_114 %111
-        %112 = OpLoad %bool %x_114
-               OpStore %x_116_phi %112
-        %113 = OpLoad %bool %x_114
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-               OpBranch %53
-        %114 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-        %116 = OpAccessChain %_ptr_Function_int %tree %63 %uint_1
-        %117 = OpLoad %int %116
-               OpStore %x_95 %117
-        %118 = OpLoad %bool %x_67
-               OpStore %x_68_phi %118
-        %119 = OpLoad %int %x_95
-               OpStore %x_71_phi %119
-               OpBranch %54
-         %82 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-        %121 = OpAccessChain %_ptr_Function_int %tree %63 %uint_2
-        %122 = OpLoad %int %121
-        %123 = OpIEqual %bool %122 %int_n1
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %126
-        %125 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %tree %63 %uint_2
-               OpStore %127 %int_1
-        %128 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %128 %99
-               OpStore %x_116_phi %true
-               OpBranch %53
-        %126 = OpLabel
-        %129 = OpAccessChain %_ptr_Function_int %tree %63 %uint_2
-        %130 = OpLoad %int %129
-               OpStore %x_87 %130
-        %131 = OpLoad %bool %x_67
-               OpStore %x_68_phi %131
-        %132 = OpLoad %int %x_87
-               OpStore %x_71_phi %132
-               OpBranch %54
-        %124 = OpLabel
-               OpReturn
-         %74 = OpLabel
-        %133 = OpLoad %bool %x_114
-               OpStore %x_68_phi %133
-               OpStore %x_71_phi %63
-               OpBranch %54
-         %54 = OpLabel
-        %134 = OpLoad %bool %x_68_phi
-               OpStore %x_68 %134
-        %135 = OpLoad %int %x_71_phi
-               OpStore %x_71 %135
-        %136 = OpLoad %bool %x_68
-               OpStore %x_67_phi %136
-        %137 = OpLoad %int %x_71
-               OpStore %x_70_phi %137
-               OpBranch %52
-         %53 = OpLabel
-        %138 = OpLoad %bool %x_116_phi
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-               OpBranch %48
-        %139 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-               OpStore %x_119_phi %int_0
-               OpBranch %141
-        %141 = OpLabel
-               OpLoopMerge %142 %143 None
-               OpBranch %144
-        %144 = OpLabel
-        %148 = OpLoad %int %x_119_phi
-        %150 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %151 = OpLoad %float %150
-        %153 = OpFOrdLessThan %bool %151 %float_0
-               OpStore %x_134_phi %153
-        %154 = OpLogicalNot %bool %153
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %155
-        %156 = OpLabel
-        %157 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %158 = OpLoad %float %157
-        %159 = OpConvertFToS %int %158
-        %160 = OpINotEqual %bool %148 %159
-               OpStore %x_133 %160
-        %161 = OpLoad %bool %x_133
-               OpStore %x_134_phi %161
-               OpBranch %155
-        %155 = OpLabel
-        %162 = OpLoad %bool %x_134_phi
-               OpSelectionMerge %163 None
-               OpBranchConditional %162 %164 %165
-        %164 = OpLabel
-               OpBranch %163
-        %165 = OpLabel
-               OpBranch %142
-        %163 = OpLabel
-               OpSelectionMerge %171 None
-               OpSwitch %uint_0 %172
-        %172 = OpLabel
-               OpStore %x_139_phi %false
-               OpStore %x_142_phi %int_0
-               OpBranch %173
-        %173 = OpLabel
-               OpLoopMerge %174 %175 None
-               OpBranch %176
-        %176 = OpLabel
-        %183 = OpLoad %bool %x_139_phi
-               OpStore %x_139 %183
-        %184 = OpLoad %int %x_142_phi
-        %185 = OpLoad %bool %x_139
-               OpStore %x_188_phi %185
-        %187 = OpSLessThanEqual %bool %184 %int_2
-               OpSelectionMerge %188 None
-               OpBranchConditional %187 %189 %190
-        %189 = OpLabel
-               OpBranch %188
-        %190 = OpLabel
-               OpBranch %174
-        %188 = OpLabel
-        %191 = OpAccessChain %_ptr_Function_int %tree %184 %uint_0
-        %192 = OpLoad %int %191
-        %194 = OpSLessThanEqual %bool %int_12 %192
-               OpSelectionMerge %195 None
-               OpBranchConditional %194 %196 %197
-        %196 = OpLabel
-        %199 = OpAccessChain %_ptr_Function_int %tree %184 %uint_1
-        %200 = OpLoad %int %199
-        %201 = OpIEqual %bool %200 %int_n1
-               OpSelectionMerge %202 None
-               OpBranchConditional %201 %203 %204
-        %203 = OpLabel
-        %205 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %206 = OpLoad %float %205
-        %207 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %208 = OpLoad %float %207
-        %209 = OpFOrdLessThan %bool %206 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %210
-        %211 = OpLabel
-               OpBranch %212
-        %212 = OpLabel
-               OpLoopMerge %213 %214 None
-               OpBranch %215
-        %215 = OpLabel
-               OpKill
-        %214 = OpLabel
-               OpBranch %212
-        %213 = OpLabel
-               OpReturn
-        %210 = OpLabel
-        %216 = OpAccessChain %_ptr_Function_int %tree %184 %uint_1
-               OpStore %216 %int_2
-        %217 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %217 %218
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %223 = OpLoad %bool %x_139
-               OpStore %x_186_phi %223
-        %224 = OpConvertFToS %int %206
-        %225 = OpSLessThan %bool %int_0 %224
-               OpSelectionMerge %226 None
-               OpBranchConditional %225 %227 %228
-        %227 = OpLabel
-               OpBranch %226
-        %228 = OpLabel
-               OpBranch %220
-        %226 = OpLabel
-               OpStore %x_186_phi %true
-               OpBranch %220
-        %221 = OpLabel
-               OpBranch %219
-        %220 = OpLabel
-        %229 = OpLoad %bool %x_186_phi
-               OpStore %x_186 %229
-        %230 = OpLoad %bool %x_186
-               OpStore %x_188_phi %230
-        %231 = OpLoad %bool %x_186
-               OpSelectionMerge %232 None
-               OpBranchConditional %231 %233 %232
-        %233 = OpLabel
-               OpBranch %174
-        %232 = OpLabel
-               OpBranch %202
-        %204 = OpLabel
-        %234 = OpAccessChain %_ptr_Function_int %tree %184 %uint_1
-        %235 = OpLoad %int %234
-               OpStore %x_167 %235
-        %236 = OpLoad %bool %x_139
-               OpStore %x_140_phi %236
-        %237 = OpLoad %int %x_167
-               OpStore %x_143_phi %237
-               OpBranch %175
-        %202 = OpLabel
-               OpBranch %195
-        %197 = OpLabel
-        %238 = OpAccessChain %_ptr_Function_int %tree %184 %uint_2
-        %239 = OpLoad %int %238
-        %240 = OpIEqual %bool %239 %int_n1
-               OpSelectionMerge %241 None
-               OpBranchConditional %240 %242 %243
-        %242 = OpLabel
-        %244 = OpAccessChain %_ptr_Function_int %tree %184 %uint_2
-               OpStore %244 %int_2
-        %245 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %245 %218
-               OpStore %x_188_phi %true
-               OpBranch %174
-        %243 = OpLabel
-        %246 = OpAccessChain %_ptr_Function_int %tree %184 %uint_2
-        %247 = OpLoad %int %246
-               OpStore %x_159 %247
-        %248 = OpLoad %bool %x_139
-               OpStore %x_140_phi %248
-        %249 = OpLoad %int %x_159
-               OpStore %x_143_phi %249
-               OpBranch %175
-        %241 = OpLabel
-               OpReturn
-        %195 = OpLabel
-        %250 = OpLoad %bool %x_186
-               OpStore %x_140_phi %250
-               OpStore %x_143_phi %184
-               OpBranch %175
-        %175 = OpLabel
-        %251 = OpLoad %bool %x_140_phi
-               OpStore %x_140 %251
-        %252 = OpLoad %int %x_143_phi
-               OpStore %x_143 %252
-        %253 = OpLoad %bool %x_140
-               OpStore %x_139_phi %253
-        %254 = OpLoad %int %x_143
-               OpStore %x_142_phi %254
-               OpBranch %173
-        %174 = OpLabel
-        %255 = OpLoad %bool %x_188_phi
-               OpSelectionMerge %256 None
-               OpBranchConditional %255 %257 %256
-        %257 = OpLabel
-               OpBranch %171
-        %256 = OpLabel
-               OpBranch %171
-        %171 = OpLabel
-               OpBranch %143
-        %143 = OpLabel
-        %258 = OpIAdd %int %148 %int_1
-               OpStore %x_120 %258
-        %259 = OpLoad %int %x_120
-               OpStore %x_119_phi %259
-               OpBranch %141
-        %142 = OpLabel
-               OpSelectionMerge %265 None
-               OpSwitch %uint_0 %266
-        %266 = OpLabel
-               OpStore %x_193_phi %false
-               OpStore %x_196_phi %int_0
-               OpBranch %267
-        %267 = OpLabel
-               OpLoopMerge %268 %269 None
-               OpBranch %270
-        %270 = OpLabel
-        %277 = OpLoad %bool %x_193_phi
-               OpStore %x_193 %277
-        %278 = OpLoad %int %x_196_phi
-        %279 = OpLoad %bool %x_193
-               OpStore %x_242_phi %279
-        %281 = OpSLessThanEqual %bool %278 %int_3
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %284
-        %283 = OpLabel
-               OpBranch %282
-        %284 = OpLabel
-               OpBranch %268
-        %282 = OpLabel
-        %285 = OpAccessChain %_ptr_Function_int %tree %278 %uint_0
-        %286 = OpLoad %int %285
-        %288 = OpSLessThanEqual %bool %int_15 %286
-               OpSelectionMerge %289 None
-               OpBranchConditional %288 %290 %291
-        %290 = OpLabel
-        %293 = OpAccessChain %_ptr_Function_int %tree %278 %uint_1
-        %294 = OpLoad %int %293
-        %295 = OpIEqual %bool %294 %int_n1
-               OpSelectionMerge %296 None
-               OpBranchConditional %295 %297 %298
-        %297 = OpLabel
-        %299 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %300 = OpLoad %float %299
-        %301 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %302 = OpLoad %float %301
-        %303 = OpFOrdLessThan %bool %300 %302
-               OpSelectionMerge %304 None
-               OpBranchConditional %303 %305 %304
-        %305 = OpLabel
-               OpBranch %306
-        %306 = OpLabel
-               OpLoopMerge %307 %308 None
-               OpBranch %309
-        %309 = OpLabel
-               OpKill
-        %308 = OpLabel
-               OpBranch %306
-        %307 = OpLabel
-               OpReturn
-        %304 = OpLabel
-        %310 = OpAccessChain %_ptr_Function_int %tree %278 %uint_1
-               OpStore %310 %int_3
-        %311 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %311 %312
-               OpBranch %313
-        %313 = OpLabel
-               OpLoopMerge %314 %315 None
-               OpBranch %316
-        %316 = OpLabel
-        %317 = OpLoad %bool %x_193
-               OpStore %x_240_phi %317
-        %318 = OpConvertFToS %int %300
-        %319 = OpSLessThan %bool %int_0 %318
-               OpSelectionMerge %320 None
-               OpBranchConditional %319 %321 %322
-        %321 = OpLabel
-               OpBranch %320
-        %322 = OpLabel
-               OpBranch %314
-        %320 = OpLabel
-               OpStore %x_240_phi %true
-               OpBranch %314
-        %315 = OpLabel
-               OpBranch %313
-        %314 = OpLabel
-        %323 = OpLoad %bool %x_240_phi
-               OpStore %x_240 %323
-        %324 = OpLoad %bool %x_240
-               OpStore %x_242_phi %324
-        %325 = OpLoad %bool %x_240
-               OpSelectionMerge %326 None
-               OpBranchConditional %325 %327 %326
-        %327 = OpLabel
-               OpBranch %268
-        %326 = OpLabel
-               OpBranch %296
-        %298 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_int %tree %278 %uint_1
-        %329 = OpLoad %int %328
-               OpStore %x_221 %329
-        %330 = OpLoad %bool %x_193
-               OpStore %x_194_phi %330
-        %331 = OpLoad %int %x_221
-               OpStore %x_197_phi %331
-               OpBranch %269
-        %296 = OpLabel
-               OpBranch %289
-        %291 = OpLabel
-        %332 = OpAccessChain %_ptr_Function_int %tree %278 %uint_2
-        %333 = OpLoad %int %332
-        %334 = OpIEqual %bool %333 %int_n1
-               OpSelectionMerge %335 None
-               OpBranchConditional %334 %336 %337
-        %336 = OpLabel
-        %338 = OpAccessChain %_ptr_Function_int %tree %278 %uint_2
-               OpStore %338 %int_3
-        %339 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %339 %312
-               OpStore %x_242_phi %true
-               OpBranch %268
-        %337 = OpLabel
-        %340 = OpAccessChain %_ptr_Function_int %tree %278 %uint_2
-        %341 = OpLoad %int %340
-               OpStore %x_213 %341
-        %342 = OpLoad %bool %x_193
-               OpStore %x_194_phi %342
-        %343 = OpLoad %int %x_213
-               OpStore %x_197_phi %343
-               OpBranch %269
-        %335 = OpLabel
-               OpReturn
-        %289 = OpLabel
-        %344 = OpLoad %bool %x_240
-               OpStore %x_194_phi %344
-               OpStore %x_197_phi %278
-               OpBranch %269
-        %269 = OpLabel
-        %345 = OpLoad %bool %x_194_phi
-               OpStore %x_194 %345
-        %346 = OpLoad %int %x_197_phi
-               OpStore %x_197 %346
-        %347 = OpLoad %bool %x_194
-               OpStore %x_193_phi %347
-        %348 = OpLoad %int %x_197
-               OpStore %x_196_phi %348
-               OpBranch %267
-        %268 = OpLabel
-        %349 = OpLoad %bool %x_242_phi
-               OpSelectionMerge %350 None
-               OpBranchConditional %349 %351 %350
-        %351 = OpLabel
-               OpBranch %265
-        %350 = OpLabel
-               OpBranch %265
-        %265 = OpLabel
-               OpSelectionMerge %357 None
-               OpSwitch %uint_0 %358
-        %358 = OpLabel
-               OpStore %x_247_phi %false
-               OpStore %x_250_phi %int_0
-               OpBranch %359
-        %359 = OpLabel
-               OpLoopMerge %360 %361 None
-               OpBranch %362
-        %362 = OpLabel
-        %369 = OpLoad %bool %x_247_phi
-               OpStore %x_247 %369
-        %370 = OpLoad %int %x_250_phi
-        %371 = OpLoad %bool %x_247
-               OpStore %x_296_phi %371
-        %373 = OpSLessThanEqual %bool %370 %int_4
-               OpSelectionMerge %374 None
-               OpBranchConditional %373 %375 %376
-        %375 = OpLabel
-               OpBranch %374
-        %376 = OpLabel
-               OpBranch %360
-        %374 = OpLabel
-        %377 = OpAccessChain %_ptr_Function_int %tree %370 %uint_0
-        %378 = OpLoad %int %377
-        %380 = OpSLessThanEqual %bool %int_7 %378
-               OpSelectionMerge %381 None
-               OpBranchConditional %380 %382 %383
-        %382 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %tree %370 %uint_1
-        %386 = OpLoad %int %385
-        %387 = OpIEqual %bool %386 %int_n1
-               OpSelectionMerge %388 None
-               OpBranchConditional %387 %389 %390
-        %389 = OpLabel
-        %391 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %392 = OpLoad %float %391
-        %393 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %394 = OpLoad %float %393
-        %395 = OpFOrdLessThan %bool %392 %394
-               OpSelectionMerge %396 None
-               OpBranchConditional %395 %397 %396
-        %397 = OpLabel
-               OpBranch %398
-        %398 = OpLabel
-               OpLoopMerge %399 %400 None
-               OpBranch %401
-        %401 = OpLabel
-               OpKill
-        %400 = OpLabel
-               OpBranch %398
-        %399 = OpLabel
-               OpReturn
-        %396 = OpLabel
-        %402 = OpAccessChain %_ptr_Function_int %tree %370 %uint_1
-               OpStore %402 %int_4
-        %403 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %403 %404
-               OpBranch %405
-        %405 = OpLabel
-               OpLoopMerge %406 %407 None
-               OpBranch %408
-        %408 = OpLabel
-        %409 = OpLoad %bool %x_247
-               OpStore %x_294_phi %409
-        %410 = OpConvertFToS %int %392
-        %411 = OpSLessThan %bool %int_0 %410
-               OpSelectionMerge %412 None
-               OpBranchConditional %411 %413 %414
-        %413 = OpLabel
-               OpBranch %412
-        %414 = OpLabel
-               OpBranch %406
-        %412 = OpLabel
-               OpStore %x_294_phi %true
-               OpBranch %406
-        %407 = OpLabel
-               OpBranch %405
-        %406 = OpLabel
-        %415 = OpLoad %bool %x_294_phi
-               OpStore %x_294 %415
-        %416 = OpLoad %bool %x_294
-               OpStore %x_296_phi %416
-        %417 = OpLoad %bool %x_294
-               OpSelectionMerge %418 None
-               OpBranchConditional %417 %419 %418
-        %419 = OpLabel
-               OpBranch %360
-        %418 = OpLabel
-               OpBranch %388
-        %390 = OpLabel
-        %420 = OpAccessChain %_ptr_Function_int %tree %370 %uint_1
-        %421 = OpLoad %int %420
-               OpStore %x_275 %421
-        %422 = OpLoad %bool %x_247
-               OpStore %x_248_phi %422
-        %423 = OpLoad %int %x_275
-               OpStore %x_251_phi %423
-               OpBranch %361
-        %388 = OpLabel
-               OpBranch %381
-        %383 = OpLabel
-        %424 = OpAccessChain %_ptr_Function_int %tree %370 %uint_2
-        %425 = OpLoad %int %424
-        %426 = OpIEqual %bool %425 %int_n1
-               OpSelectionMerge %427 None
-               OpBranchConditional %426 %428 %429
-        %428 = OpLabel
-        %430 = OpAccessChain %_ptr_Function_int %tree %370 %uint_2
-               OpStore %430 %int_4
-        %431 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %431 %404
-               OpStore %x_296_phi %true
-               OpBranch %360
-        %429 = OpLabel
-        %432 = OpAccessChain %_ptr_Function_int %tree %370 %uint_2
-        %433 = OpLoad %int %432
-               OpStore %x_267 %433
-        %434 = OpLoad %bool %x_247
-               OpStore %x_248_phi %434
-        %435 = OpLoad %int %x_267
-               OpStore %x_251_phi %435
-               OpBranch %361
-        %427 = OpLabel
-               OpReturn
-        %381 = OpLabel
-        %436 = OpLoad %bool %x_294
-               OpStore %x_248_phi %436
-               OpStore %x_251_phi %370
-               OpBranch %361
-        %361 = OpLabel
-        %437 = OpLoad %bool %x_248_phi
-               OpStore %x_248 %437
-        %438 = OpLoad %int %x_251_phi
-               OpStore %x_251 %438
-        %439 = OpLoad %bool %x_248
-               OpStore %x_247_phi %439
-        %440 = OpLoad %int %x_251
-               OpStore %x_250_phi %440
-               OpBranch %359
-        %360 = OpLabel
-        %441 = OpLoad %bool %x_296_phi
-               OpSelectionMerge %442 None
-               OpBranchConditional %441 %443 %442
-        %443 = OpLabel
-               OpBranch %357
-        %442 = OpLabel
-               OpBranch %357
-        %357 = OpLabel
-               OpSelectionMerge %449 None
-               OpSwitch %uint_0 %450
-        %450 = OpLabel
-               OpStore %x_301_phi %false
-               OpStore %x_304_phi %int_0
-               OpBranch %451
-        %451 = OpLabel
-               OpLoopMerge %452 %453 None
-               OpBranch %454
-        %454 = OpLabel
-        %461 = OpLoad %bool %x_301_phi
-               OpStore %x_301 %461
-        %462 = OpLoad %int %x_304_phi
-        %463 = OpLoad %bool %x_301
-               OpStore %x_350_phi %463
-        %464 = OpSLessThanEqual %bool %462 %int_5
-               OpSelectionMerge %465 None
-               OpBranchConditional %464 %466 %467
-        %466 = OpLabel
-               OpBranch %465
-        %467 = OpLabel
-               OpBranch %452
-        %465 = OpLabel
-        %468 = OpAccessChain %_ptr_Function_int %tree %462 %uint_0
-        %469 = OpLoad %int %468
-        %471 = OpSLessThanEqual %bool %int_8 %469
-               OpSelectionMerge %472 None
-               OpBranchConditional %471 %473 %474
-        %473 = OpLabel
-        %476 = OpAccessChain %_ptr_Function_int %tree %462 %uint_1
-        %477 = OpLoad %int %476
-        %478 = OpIEqual %bool %477 %int_n1
-               OpSelectionMerge %479 None
-               OpBranchConditional %478 %480 %481
-        %480 = OpLabel
-        %482 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %483 = OpLoad %float %482
-        %484 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %485 = OpLoad %float %484
-        %486 = OpFOrdLessThan %bool %483 %485
-               OpSelectionMerge %487 None
-               OpBranchConditional %486 %488 %487
-        %488 = OpLabel
-               OpBranch %489
-        %489 = OpLabel
-               OpLoopMerge %490 %491 None
-               OpBranch %492
-        %492 = OpLabel
-               OpKill
-        %491 = OpLabel
-               OpBranch %489
-        %490 = OpLabel
-               OpReturn
-        %487 = OpLabel
-        %493 = OpAccessChain %_ptr_Function_int %tree %462 %uint_1
-               OpStore %493 %int_5
-        %494 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %494 %495
-               OpBranch %496
-        %496 = OpLabel
-               OpLoopMerge %497 %498 None
-               OpBranch %499
-        %499 = OpLabel
-        %500 = OpLoad %bool %x_301
-               OpStore %x_348_phi %500
-        %501 = OpConvertFToS %int %483
-        %502 = OpSLessThan %bool %int_0 %501
-               OpSelectionMerge %503 None
-               OpBranchConditional %502 %504 %505
-        %504 = OpLabel
-               OpBranch %503
-        %505 = OpLabel
-               OpBranch %497
-        %503 = OpLabel
-               OpStore %x_348_phi %true
-               OpBranch %497
-        %498 = OpLabel
-               OpBranch %496
-        %497 = OpLabel
-        %506 = OpLoad %bool %x_348_phi
-               OpStore %x_348 %506
-        %507 = OpLoad %bool %x_348
-               OpStore %x_350_phi %507
-        %508 = OpLoad %bool %x_348
-               OpSelectionMerge %509 None
-               OpBranchConditional %508 %510 %509
-        %510 = OpLabel
-               OpBranch %452
-        %509 = OpLabel
-               OpBranch %479
-        %481 = OpLabel
-        %511 = OpAccessChain %_ptr_Function_int %tree %462 %uint_1
-        %512 = OpLoad %int %511
-               OpStore %x_329 %512
-        %513 = OpLoad %bool %x_301
-               OpStore %x_302_phi %513
-        %514 = OpLoad %int %x_329
-               OpStore %x_305_phi %514
-               OpBranch %453
-        %479 = OpLabel
-               OpBranch %472
-        %474 = OpLabel
-        %515 = OpAccessChain %_ptr_Function_int %tree %462 %uint_2
-        %516 = OpLoad %int %515
-        %517 = OpIEqual %bool %516 %int_n1
-               OpSelectionMerge %518 None
-               OpBranchConditional %517 %519 %520
-        %519 = OpLabel
-        %521 = OpAccessChain %_ptr_Function_int %tree %462 %uint_2
-               OpStore %521 %int_5
-        %522 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %522 %495
-               OpStore %x_350_phi %true
-               OpBranch %452
-        %520 = OpLabel
-        %523 = OpAccessChain %_ptr_Function_int %tree %462 %uint_2
-        %524 = OpLoad %int %523
-               OpStore %x_321 %524
-        %525 = OpLoad %bool %x_301
-               OpStore %x_302_phi %525
-        %526 = OpLoad %int %x_321
-               OpStore %x_305_phi %526
-               OpBranch %453
-        %518 = OpLabel
-               OpReturn
-        %472 = OpLabel
-        %527 = OpLoad %bool %x_348
-               OpStore %x_302_phi %527
-               OpStore %x_305_phi %462
-               OpBranch %453
-        %453 = OpLabel
-        %528 = OpLoad %bool %x_302_phi
-               OpStore %x_302 %528
-        %529 = OpLoad %int %x_305_phi
-               OpStore %x_305 %529
-        %530 = OpLoad %bool %x_302
-               OpStore %x_301_phi %530
-        %531 = OpLoad %int %x_305
-               OpStore %x_304_phi %531
-               OpBranch %451
-        %452 = OpLabel
-        %532 = OpLoad %bool %x_350_phi
-               OpSelectionMerge %533 None
-               OpBranchConditional %532 %534 %533
-        %534 = OpLabel
-               OpBranch %449
-        %533 = OpLabel
-               OpBranch %449
-        %449 = OpLabel
-               OpSelectionMerge %540 None
-               OpSwitch %uint_0 %541
-        %541 = OpLabel
-               OpStore %x_355_phi %false
-               OpStore %x_358_phi %int_0
-               OpBranch %542
-        %542 = OpLabel
-               OpLoopMerge %543 %544 None
-               OpBranch %545
-        %545 = OpLabel
-        %552 = OpLoad %bool %x_355_phi
-               OpStore %x_355 %552
-        %553 = OpLoad %int %x_358_phi
-        %554 = OpLoad %bool %x_355
-               OpStore %x_404_phi %554
-        %556 = OpSLessThanEqual %bool %553 %int_6
-               OpSelectionMerge %557 None
-               OpBranchConditional %556 %558 %559
-        %558 = OpLabel
-               OpBranch %557
-        %559 = OpLabel
-               OpBranch %543
-        %557 = OpLabel
-        %560 = OpAccessChain %_ptr_Function_int %tree %553 %uint_0
-        %561 = OpLoad %int %560
-        %562 = OpSLessThanEqual %bool %int_2 %561
-               OpSelectionMerge %563 None
-               OpBranchConditional %562 %564 %565
-        %564 = OpLabel
-        %567 = OpAccessChain %_ptr_Function_int %tree %553 %uint_1
-        %568 = OpLoad %int %567
-        %569 = OpIEqual %bool %568 %int_n1
-               OpSelectionMerge %570 None
-               OpBranchConditional %569 %571 %572
-        %571 = OpLabel
-        %573 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %574 = OpLoad %float %573
-        %575 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %576 = OpLoad %float %575
-        %577 = OpFOrdLessThan %bool %574 %576
-               OpSelectionMerge %578 None
-               OpBranchConditional %577 %579 %578
-        %579 = OpLabel
-               OpBranch %580
-        %580 = OpLabel
-               OpLoopMerge %581 %582 None
-               OpBranch %583
-        %583 = OpLabel
-               OpKill
-        %582 = OpLabel
-               OpBranch %580
-        %581 = OpLabel
-               OpReturn
-        %578 = OpLabel
-        %584 = OpAccessChain %_ptr_Function_int %tree %553 %uint_1
-               OpStore %584 %int_6
-        %585 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %585 %586
-               OpBranch %587
-        %587 = OpLabel
-               OpLoopMerge %588 %589 None
-               OpBranch %590
-        %590 = OpLabel
-        %591 = OpLoad %bool %x_355
-               OpStore %x_402_phi %591
-        %592 = OpConvertFToS %int %574
-        %593 = OpSLessThan %bool %int_0 %592
-               OpSelectionMerge %594 None
-               OpBranchConditional %593 %595 %596
-        %595 = OpLabel
-               OpBranch %594
-        %596 = OpLabel
-               OpBranch %588
-        %594 = OpLabel
-               OpStore %x_402_phi %true
-               OpBranch %588
-        %589 = OpLabel
-               OpBranch %587
-        %588 = OpLabel
-        %597 = OpLoad %bool %x_402_phi
-               OpStore %x_402 %597
-        %598 = OpLoad %bool %x_402
-               OpStore %x_404_phi %598
-        %599 = OpLoad %bool %x_402
-               OpSelectionMerge %600 None
-               OpBranchConditional %599 %601 %600
-        %601 = OpLabel
-               OpBranch %543
-        %600 = OpLabel
-               OpBranch %570
-        %572 = OpLabel
-        %602 = OpAccessChain %_ptr_Function_int %tree %553 %uint_1
-        %603 = OpLoad %int %602
-               OpStore %x_383 %603
-        %604 = OpLoad %bool %x_355
-               OpStore %x_356_phi %604
-        %605 = OpLoad %int %x_383
-               OpStore %x_359_phi %605
-               OpBranch %544
-        %570 = OpLabel
-               OpBranch %563
-        %565 = OpLabel
-        %606 = OpAccessChain %_ptr_Function_int %tree %553 %uint_2
-        %607 = OpLoad %int %606
-        %608 = OpIEqual %bool %607 %int_n1
-               OpSelectionMerge %609 None
-               OpBranchConditional %608 %610 %611
-        %610 = OpLabel
-        %612 = OpAccessChain %_ptr_Function_int %tree %553 %uint_2
-               OpStore %612 %int_6
-        %613 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %613 %586
-               OpStore %x_404_phi %true
-               OpBranch %543
-        %611 = OpLabel
-        %614 = OpAccessChain %_ptr_Function_int %tree %553 %uint_2
-        %615 = OpLoad %int %614
-               OpStore %x_375 %615
-        %616 = OpLoad %bool %x_355
-               OpStore %x_356_phi %616
-        %617 = OpLoad %int %x_375
-               OpStore %x_359_phi %617
-               OpBranch %544
-        %609 = OpLabel
-               OpReturn
-        %563 = OpLabel
-        %618 = OpLoad %bool %x_402
-               OpStore %x_356_phi %618
-               OpStore %x_359_phi %553
-               OpBranch %544
-        %544 = OpLabel
-        %619 = OpLoad %bool %x_356_phi
-               OpStore %x_356 %619
-        %620 = OpLoad %int %x_359_phi
-               OpStore %x_359 %620
-        %621 = OpLoad %bool %x_356
-               OpStore %x_355_phi %621
-        %622 = OpLoad %int %x_359
-               OpStore %x_358_phi %622
-               OpBranch %542
-        %543 = OpLabel
-        %623 = OpLoad %bool %x_404_phi
-               OpSelectionMerge %624 None
-               OpBranchConditional %623 %625 %624
-        %625 = OpLabel
-               OpBranch %540
-        %624 = OpLabel
-               OpBranch %540
-        %540 = OpLabel
-               OpSelectionMerge %631 None
-               OpSwitch %uint_0 %632
-        %632 = OpLabel
-               OpStore %x_409_phi %false
-               OpStore %x_412_phi %int_0
-               OpBranch %633
-        %633 = OpLabel
-               OpLoopMerge %634 %635 None
-               OpBranch %636
-        %636 = OpLabel
-        %643 = OpLoad %bool %x_409_phi
-               OpStore %x_409 %643
-        %644 = OpLoad %int %x_412_phi
-        %645 = OpLoad %bool %x_409
-               OpStore %x_458_phi %645
-        %646 = OpSLessThanEqual %bool %644 %int_7
-               OpSelectionMerge %647 None
-               OpBranchConditional %646 %648 %649
-        %648 = OpLabel
-               OpBranch %647
-        %649 = OpLabel
-               OpBranch %634
-        %647 = OpLabel
-        %650 = OpAccessChain %_ptr_Function_int %tree %644 %uint_0
-        %651 = OpLoad %int %650
-        %652 = OpSLessThanEqual %bool %int_6 %651
-               OpSelectionMerge %653 None
-               OpBranchConditional %652 %654 %655
-        %654 = OpLabel
-        %657 = OpAccessChain %_ptr_Function_int %tree %644 %uint_1
-        %658 = OpLoad %int %657
-        %659 = OpIEqual %bool %658 %int_n1
-               OpSelectionMerge %660 None
-               OpBranchConditional %659 %661 %662
-        %661 = OpLabel
-        %663 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %664 = OpLoad %float %663
-        %665 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %666 = OpLoad %float %665
-        %667 = OpFOrdLessThan %bool %664 %666
-               OpSelectionMerge %668 None
-               OpBranchConditional %667 %669 %668
-        %669 = OpLabel
-               OpBranch %670
-        %670 = OpLabel
-               OpLoopMerge %671 %672 None
-               OpBranch %673
-        %673 = OpLabel
-               OpKill
-        %672 = OpLabel
-               OpBranch %670
-        %671 = OpLabel
-               OpReturn
-        %668 = OpLabel
-        %674 = OpAccessChain %_ptr_Function_int %tree %644 %uint_1
-               OpStore %674 %int_7
-        %675 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %675 %676
-               OpBranch %677
-        %677 = OpLabel
-               OpLoopMerge %678 %679 None
-               OpBranch %680
-        %680 = OpLabel
-        %681 = OpLoad %bool %x_409
-               OpStore %x_456_phi %681
-        %682 = OpConvertFToS %int %664
-        %683 = OpSLessThan %bool %int_0 %682
-               OpSelectionMerge %684 None
-               OpBranchConditional %683 %685 %686
-        %685 = OpLabel
-               OpBranch %684
-        %686 = OpLabel
-               OpBranch %678
-        %684 = OpLabel
-               OpStore %x_456_phi %true
-               OpBranch %678
-        %679 = OpLabel
-               OpBranch %677
-        %678 = OpLabel
-        %687 = OpLoad %bool %x_456_phi
-               OpStore %x_456 %687
-        %688 = OpLoad %bool %x_456
-               OpStore %x_458_phi %688
-        %689 = OpLoad %bool %x_456
-               OpSelectionMerge %690 None
-               OpBranchConditional %689 %691 %690
-        %691 = OpLabel
-               OpBranch %634
-        %690 = OpLabel
-               OpBranch %660
-        %662 = OpLabel
-        %692 = OpAccessChain %_ptr_Function_int %tree %644 %uint_1
-        %693 = OpLoad %int %692
-               OpStore %x_437 %693
-        %694 = OpLoad %bool %x_409
-               OpStore %x_410_phi %694
-        %695 = OpLoad %int %x_437
-               OpStore %x_413_phi %695
-               OpBranch %635
-        %660 = OpLabel
-               OpBranch %653
-        %655 = OpLabel
-        %696 = OpAccessChain %_ptr_Function_int %tree %644 %uint_2
-        %697 = OpLoad %int %696
-        %698 = OpIEqual %bool %697 %int_n1
-               OpSelectionMerge %699 None
-               OpBranchConditional %698 %700 %701
-        %700 = OpLabel
-        %702 = OpAccessChain %_ptr_Function_int %tree %644 %uint_2
-               OpStore %702 %int_7
-        %703 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %703 %676
-               OpStore %x_458_phi %true
-               OpBranch %634
-        %701 = OpLabel
-        %704 = OpAccessChain %_ptr_Function_int %tree %644 %uint_2
-        %705 = OpLoad %int %704
-               OpStore %x_429 %705
-        %706 = OpLoad %bool %x_409
-               OpStore %x_410_phi %706
-        %707 = OpLoad %int %x_429
-               OpStore %x_413_phi %707
-               OpBranch %635
-        %699 = OpLabel
-               OpReturn
-        %653 = OpLabel
-        %708 = OpLoad %bool %x_456
-               OpStore %x_410_phi %708
-               OpStore %x_413_phi %644
-               OpBranch %635
-        %635 = OpLabel
-        %709 = OpLoad %bool %x_410_phi
-               OpStore %x_410 %709
-        %710 = OpLoad %int %x_413_phi
-               OpStore %x_413 %710
-        %711 = OpLoad %bool %x_410
-               OpStore %x_409_phi %711
-        %712 = OpLoad %int %x_413
-               OpStore %x_412_phi %712
-               OpBranch %633
-        %634 = OpLabel
-        %713 = OpLoad %bool %x_458_phi
-               OpSelectionMerge %714 None
-               OpBranchConditional %713 %715 %714
-        %715 = OpLabel
-               OpBranch %631
-        %714 = OpLabel
-               OpBranch %631
-        %631 = OpLabel
-               OpSelectionMerge %721 None
-               OpSwitch %uint_0 %722
-        %722 = OpLabel
-               OpStore %x_463_phi %false
-               OpStore %x_466_phi %int_0
-               OpBranch %723
-        %723 = OpLabel
-               OpLoopMerge %724 %725 None
-               OpBranch %726
-        %726 = OpLabel
-        %733 = OpLoad %bool %x_463_phi
-               OpStore %x_463 %733
-        %734 = OpLoad %int %x_466_phi
-        %735 = OpLoad %bool %x_463
-               OpStore %x_512_phi %735
-        %736 = OpSLessThanEqual %bool %734 %int_8
-               OpSelectionMerge %737 None
-               OpBranchConditional %736 %738 %739
-        %738 = OpLabel
-               OpBranch %737
-        %739 = OpLabel
-               OpBranch %724
-        %737 = OpLabel
-        %740 = OpAccessChain %_ptr_Function_int %tree %734 %uint_0
-        %741 = OpLoad %int %740
-        %743 = OpSLessThanEqual %bool %int_17 %741
-               OpSelectionMerge %744 None
-               OpBranchConditional %743 %745 %746
-        %745 = OpLabel
-        %748 = OpAccessChain %_ptr_Function_int %tree %734 %uint_1
-        %749 = OpLoad %int %748
-        %750 = OpIEqual %bool %749 %int_n1
-               OpSelectionMerge %751 None
-               OpBranchConditional %750 %752 %753
-        %752 = OpLabel
-        %754 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %755 = OpLoad %float %754
-        %756 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %757 = OpLoad %float %756
-        %758 = OpFOrdLessThan %bool %755 %757
-               OpSelectionMerge %759 None
-               OpBranchConditional %758 %760 %759
-        %760 = OpLabel
-               OpBranch %761
-        %761 = OpLabel
-               OpLoopMerge %762 %763 None
-               OpBranch %764
-        %764 = OpLabel
-               OpKill
-        %763 = OpLabel
-               OpBranch %761
-        %762 = OpLabel
-               OpReturn
-        %759 = OpLabel
-        %765 = OpAccessChain %_ptr_Function_int %tree %734 %uint_1
-               OpStore %765 %int_8
-        %766 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %766 %767
-               OpBranch %768
-        %768 = OpLabel
-               OpLoopMerge %769 %770 None
-               OpBranch %771
-        %771 = OpLabel
-        %772 = OpLoad %bool %x_463
-               OpStore %x_510_phi %772
-        %773 = OpConvertFToS %int %755
-        %774 = OpSLessThan %bool %int_0 %773
-               OpSelectionMerge %775 None
-               OpBranchConditional %774 %776 %777
-        %776 = OpLabel
-               OpBranch %775
-        %777 = OpLabel
-               OpBranch %769
-        %775 = OpLabel
-               OpStore %x_510_phi %true
-               OpBranch %769
-        %770 = OpLabel
-               OpBranch %768
-        %769 = OpLabel
-        %778 = OpLoad %bool %x_510_phi
-               OpStore %x_510 %778
-        %779 = OpLoad %bool %x_510
-               OpStore %x_512_phi %779
-        %780 = OpLoad %bool %x_510
-               OpSelectionMerge %781 None
-               OpBranchConditional %780 %782 %781
-        %782 = OpLabel
-               OpBranch %724
-        %781 = OpLabel
-               OpBranch %751
-        %753 = OpLabel
-        %783 = OpAccessChain %_ptr_Function_int %tree %734 %uint_1
-        %784 = OpLoad %int %783
-               OpStore %x_491 %784
-        %785 = OpLoad %bool %x_463
-               OpStore %x_464_phi %785
-        %786 = OpLoad %int %x_491
-               OpStore %x_467_phi %786
-               OpBranch %725
-        %751 = OpLabel
-               OpBranch %744
-        %746 = OpLabel
-        %787 = OpAccessChain %_ptr_Function_int %tree %734 %uint_2
-        %788 = OpLoad %int %787
-        %789 = OpIEqual %bool %788 %int_n1
-               OpSelectionMerge %790 None
-               OpBranchConditional %789 %791 %792
-        %791 = OpLabel
-        %793 = OpAccessChain %_ptr_Function_int %tree %734 %uint_2
-               OpStore %793 %int_8
-        %794 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %794 %767
-               OpStore %x_512_phi %true
-               OpBranch %724
-        %792 = OpLabel
-        %795 = OpAccessChain %_ptr_Function_int %tree %734 %uint_2
-        %796 = OpLoad %int %795
-               OpStore %x_483 %796
-        %797 = OpLoad %bool %x_463
-               OpStore %x_464_phi %797
-        %798 = OpLoad %int %x_483
-               OpStore %x_467_phi %798
-               OpBranch %725
-        %790 = OpLabel
-               OpReturn
-        %744 = OpLabel
-        %799 = OpLoad %bool %x_510
-               OpStore %x_464_phi %799
-               OpStore %x_467_phi %734
-               OpBranch %725
-        %725 = OpLabel
-        %800 = OpLoad %bool %x_464_phi
-               OpStore %x_464 %800
-        %801 = OpLoad %int %x_467_phi
-               OpStore %x_467 %801
-        %802 = OpLoad %bool %x_464
-               OpStore %x_463_phi %802
-        %803 = OpLoad %int %x_467
-               OpStore %x_466_phi %803
-               OpBranch %723
-        %724 = OpLabel
-        %804 = OpLoad %bool %x_512_phi
-               OpSelectionMerge %805 None
-               OpBranchConditional %804 %806 %805
-        %806 = OpLabel
-               OpBranch %721
-        %805 = OpLabel
-               OpBranch %721
-        %721 = OpLabel
-               OpSelectionMerge %812 None
-               OpSwitch %uint_0 %813
-        %813 = OpLabel
-               OpStore %x_517_phi %false
-               OpStore %x_520_phi %int_0
-               OpBranch %814
-        %814 = OpLabel
-               OpLoopMerge %815 %816 None
-               OpBranch %817
-        %817 = OpLabel
-        %824 = OpLoad %bool %x_517_phi
-               OpStore %x_517 %824
-        %825 = OpLoad %int %x_520_phi
-        %826 = OpLoad %bool %x_517
-               OpStore %x_566_phi %826
-        %827 = OpSLessThanEqual %bool %825 %int_9
-               OpSelectionMerge %828 None
-               OpBranchConditional %827 %829 %830
-        %829 = OpLabel
-               OpBranch %828
-        %830 = OpLabel
-               OpBranch %815
-        %828 = OpLabel
-        %831 = OpAccessChain %_ptr_Function_int %tree %825 %uint_0
-        %832 = OpLoad %int %831
-        %834 = OpSLessThanEqual %bool %int_13 %832
-               OpSelectionMerge %835 None
-               OpBranchConditional %834 %836 %837
-        %836 = OpLabel
-        %839 = OpAccessChain %_ptr_Function_int %tree %825 %uint_1
-        %840 = OpLoad %int %839
-        %841 = OpIEqual %bool %840 %int_n1
-               OpSelectionMerge %842 None
-               OpBranchConditional %841 %843 %844
-        %843 = OpLabel
-        %845 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %846 = OpLoad %float %845
-        %847 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %848 = OpLoad %float %847
-        %849 = OpFOrdLessThan %bool %846 %848
-               OpSelectionMerge %850 None
-               OpBranchConditional %849 %851 %850
-        %851 = OpLabel
-               OpBranch %852
-        %852 = OpLabel
-               OpLoopMerge %853 %854 None
-               OpBranch %855
-        %855 = OpLabel
-               OpKill
-        %854 = OpLabel
-               OpBranch %852
-        %853 = OpLabel
-               OpReturn
-        %850 = OpLabel
-        %856 = OpAccessChain %_ptr_Function_int %tree %825 %uint_1
-               OpStore %856 %int_9
-        %857 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %857 %858
-               OpBranch %859
-        %859 = OpLabel
-               OpLoopMerge %860 %861 None
-               OpBranch %862
-        %862 = OpLabel
-        %863 = OpLoad %bool %x_517
-               OpStore %x_564_phi %863
-        %864 = OpConvertFToS %int %846
-        %865 = OpSLessThan %bool %int_0 %864
-               OpSelectionMerge %866 None
-               OpBranchConditional %865 %867 %868
-        %867 = OpLabel
-               OpBranch %866
-        %868 = OpLabel
-               OpBranch %860
-        %866 = OpLabel
-               OpStore %x_564_phi %true
-               OpBranch %860
-        %861 = OpLabel
-               OpBranch %859
-        %860 = OpLabel
-        %869 = OpLoad %bool %x_564_phi
-               OpStore %x_564 %869
-        %870 = OpLoad %bool %x_564
-               OpStore %x_566_phi %870
-        %871 = OpLoad %bool %x_564
-               OpSelectionMerge %872 None
-               OpBranchConditional %871 %873 %872
-        %873 = OpLabel
-               OpBranch %815
-        %872 = OpLabel
-               OpBranch %842
-        %844 = OpLabel
-        %874 = OpAccessChain %_ptr_Function_int %tree %825 %uint_1
-        %875 = OpLoad %int %874
-               OpStore %x_545 %875
-        %876 = OpLoad %bool %x_517
-               OpStore %x_518_phi %876
-        %877 = OpLoad %int %x_545
-               OpStore %x_521_phi %877
-               OpBranch %816
-        %842 = OpLabel
-               OpBranch %835
-        %837 = OpLabel
-        %878 = OpAccessChain %_ptr_Function_int %tree %825 %uint_2
-        %879 = OpLoad %int %878
-        %880 = OpIEqual %bool %879 %int_n1
-               OpSelectionMerge %881 None
-               OpBranchConditional %880 %882 %883
-        %882 = OpLabel
-        %884 = OpAccessChain %_ptr_Function_int %tree %825 %uint_2
-               OpStore %884 %int_9
-        %885 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %885 %858
-               OpStore %x_566_phi %true
-               OpBranch %815
-        %883 = OpLabel
-        %886 = OpAccessChain %_ptr_Function_int %tree %825 %uint_2
-        %887 = OpLoad %int %886
-               OpStore %x_537 %887
-        %888 = OpLoad %bool %x_517
-               OpStore %x_518_phi %888
-        %889 = OpLoad %int %x_537
-               OpStore %x_521_phi %889
-               OpBranch %816
-        %881 = OpLabel
-               OpReturn
-        %835 = OpLabel
-        %890 = OpLoad %bool %x_564
-               OpStore %x_518_phi %890
-               OpStore %x_521_phi %825
-               OpBranch %816
-        %816 = OpLabel
-        %891 = OpLoad %bool %x_518_phi
-               OpStore %x_518 %891
-        %892 = OpLoad %int %x_521_phi
-               OpStore %x_521 %892
-        %893 = OpLoad %bool %x_518
-               OpStore %x_517_phi %893
-        %894 = OpLoad %int %x_521
-               OpStore %x_520_phi %894
-               OpBranch %814
-        %815 = OpLabel
-        %895 = OpLoad %bool %x_566_phi
-               OpSelectionMerge %896 None
-               OpBranchConditional %895 %897 %896
-        %897 = OpLabel
-               OpBranch %812
-        %896 = OpLabel
-               OpBranch %812
-        %812 = OpLabel
-               OpStore %x_569_phi %int_0
-               OpStore %x_572_phi %int_0
-               OpStore %x_574_phi %int_0
-               OpBranch %898
-        %898 = OpLabel
-               OpLoopMerge %899 %900 None
-               OpBranch %901
-        %901 = OpLabel
-        %908 = OpLoad %int %x_569_phi
-        %909 = OpLoad %int %x_572_phi
-               OpStore %x_572 %909
-        %910 = OpLoad %int %x_574_phi
-        %912 = OpSLessThan %bool %910 %int_20
-               OpSelectionMerge %913 None
-               OpBranchConditional %912 %914 %915
-        %914 = OpLabel
-               OpBranch %913
-        %915 = OpLabel
-               OpBranch %899
-        %913 = OpLabel
-               OpSelectionMerge %919 None
-               OpSwitch %uint_0 %920
-        %920 = OpLabel
-               OpStore %x_582_phi %int_0
-               OpBranch %921
-        %921 = OpLabel
-               OpLoopMerge %922 %923 None
-               OpBranch %924
-        %924 = OpLabel
-        %925 = OpLoad %int %x_582_phi
-               OpStore %x_597_phi %908
-               OpStore %x_598_phi %false
-        %926 = OpINotEqual %bool %925 %int_n1
-               OpSelectionMerge %927 None
-               OpBranchConditional %926 %928 %929
-        %928 = OpLabel
-               OpBranch %927
-        %929 = OpLabel
-               OpBranch %922
-        %927 = OpLabel
-        %930 = OpAccessChain %_ptr_Function_BST %tree %925
-        %931 = OpLoad %BST %930
-        %932 = OpCompositeExtract %int %931 0
-        %933 = OpCompositeExtract %int %931 1
-        %934 = OpCompositeExtract %int %931 2
-        %935 = OpIEqual %bool %932 %910
-               OpSelectionMerge %936 None
-               OpBranchConditional %935 %937 %936
-        %937 = OpLabel
-               OpStore %x_597_phi %910
-               OpStore %x_598_phi %true
-               OpBranch %922
-        %936 = OpLabel
-               OpBranch %923
-        %923 = OpLabel
-        %939 = OpSGreaterThan %bool %910 %932
-        %938 = OpSelect %int %939 %934 %933
-               OpStore %x_582_phi %938
-               OpBranch %921
-        %922 = OpLabel
-        %940 = OpLoad %int %x_597_phi
-               OpStore %x_597 %940
-        %941 = OpLoad %bool %x_598_phi
-        %942 = OpLoad %int %x_597
-               OpStore %x_570_phi %942
-               OpSelectionMerge %943 None
-               OpBranchConditional %941 %944 %943
-        %944 = OpLabel
-               OpBranch %919
-        %943 = OpLabel
-               OpStore %x_570_phi %int_n1
-               OpBranch %919
-        %919 = OpLabel
-        %950 = OpLoad %int %x_570_phi
-               OpStore %x_570 %950
-               OpSelectionMerge %951 None
-               OpSwitch %910 %952 2 %953 5 %953 6 %953 7 %953 8 %953 9 %953 12 %953 13 %953 15 %953 17 %953
-        %953 = OpLabel
-        %954 = OpLoad %int %x_572
-               OpStore %x_607_phi %954
-        %955 = OpLoad %int %x_570
-        %956 = OpCopyObject %int %910
-        %957 = OpIEqual %bool %955 %956
-               OpSelectionMerge %958 None
-               OpBranchConditional %957 %959 %958
-        %959 = OpLabel
-        %961 = OpLoad %int %x_572
-        %962 = OpCopyObject %int %int_1
-        %963 = OpIAdd %int %961 %962
-        %960 = OpCopyObject %int %963
-               OpStore %x_606 %960
-        %964 = OpLoad %int %x_606
-               OpStore %x_607_phi %964
-               OpBranch %958
-        %958 = OpLabel
-        %965 = OpLoad %int %x_607_phi
-               OpStore %x_607 %965
-        %966 = OpLoad %int %x_607
-               OpStore %x_573_phi %966
-               OpBranch %951
-        %952 = OpLabel
-        %967 = OpLoad %int %x_572
-               OpStore %x_612_phi %967
-        %968 = OpLoad %int %x_570
-        %969 = OpCopyObject %int %int_n1
-        %970 = OpIEqual %bool %968 %969
-               OpSelectionMerge %971 None
-               OpBranchConditional %970 %972 %971
-        %972 = OpLabel
-        %974 = OpLoad %int %x_572
-        %975 = OpCopyObject %int %int_1
-        %976 = OpIAdd %int %974 %975
-        %973 = OpCopyObject %int %976
-               OpStore %x_611 %973
-        %977 = OpLoad %int %x_611
-               OpStore %x_612_phi %977
-               OpBranch %971
-        %971 = OpLabel
-        %978 = OpLoad %int %x_612_phi
-               OpStore %x_612 %978
-        %979 = OpLoad %int %x_612
-               OpStore %x_573_phi %979
-               OpBranch %951
-        %951 = OpLabel
-        %980 = OpLoad %int %x_573_phi
-               OpBranch %900
-        %900 = OpLabel
-        %981 = OpIAdd %int %910 %int_1
-               OpStore %x_575 %981
-        %982 = OpLoad %int %x_570
-               OpStore %x_569_phi %982
-               OpStore %x_572_phi %980
-        %983 = OpLoad %int %x_575
-               OpStore %x_574_phi %983
-               OpBranch %898
-        %899 = OpLabel
-        %984 = OpLoad %int %x_572
-        %985 = OpCopyObject %int %int_20
-        %986 = OpIEqual %bool %984 %985
-               OpSelectionMerge %987 None
-               OpBranchConditional %986 %988 %989
-        %988 = OpLabel
-               OpStore %x_GLF_color %991
-               OpBranch %987
-        %989 = OpLabel
-               OpStore %x_GLF_color %992
-               OpBranch %987
-        %987 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %993
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %997 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %998 = OpFunctionCall %void %main_1
-        %999 = OpLoad %v4float %x_GLF_color
-       %1000 = OpCompositeConstruct %main_out %999
-               OpReturnValue %1000
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-       %1002 = OpLabel
-       %1004 = OpLoad %v4float %gl_FragCoord_param_1
-       %1003 = OpFunctionCall %main_out %main_inner %1004
-       %1005 = OpCompositeExtract %v4float %1003 0
-               OpStore %x_GLF_color_1_1 %1005
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.wgsl
deleted file mode 100644
index c4e135a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,977 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var tree : array<BST, 10>;
-  var x_67 : bool;
-  var x_114 : bool;
-  var x_572 : i32;
-  var x_67_phi : bool;
-  var x_70_phi : i32;
-  var x_116_phi : bool;
-  var x_119_phi : i32;
-  var x_569_phi : i32;
-  var x_572_phi : i32;
-  var x_574_phi : i32;
-  tree[0] = BST(9, -1, -1);
-  switch(0u) {
-    default: {
-      x_67_phi = false;
-      x_70_phi = 0;
-      loop {
-        var x_95 : i32;
-        var x_87 : i32;
-        var x_68 : bool;
-        var x_71 : i32;
-        var x_68_phi : bool;
-        var x_71_phi : i32;
-        x_67 = x_67_phi;
-        let x_70 : i32 = x_70_phi;
-        x_116_phi = x_67;
-        if ((x_70 <= 1)) {
-        } else {
-          break;
-        }
-        let x_76 : i32 = tree[x_70].data;
-        if ((5 <= x_76)) {
-          var x_114_phi : bool;
-          let x_89 : ptr<function, i32> = &(tree[x_70].leftIndex);
-          let x_90 : i32 = *(x_89);
-          if ((x_90 == -1)) {
-            let x_97 : f32 = x_8.injectionSwitch.y;
-            let x_99 : f32 = x_8.injectionSwitch.x;
-            if ((x_97 < x_99)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_89) = 1;
-            tree[1] = BST(5, -1, -1);
-            loop {
-              x_114_phi = x_67;
-              if ((0 < i32(x_97))) {
-              } else {
-                break;
-              }
-              x_114_phi = true;
-              break;
-            }
-            x_114 = x_114_phi;
-            x_116_phi = x_114;
-            if (x_114) {
-              break;
-            }
-          } else {
-            x_95 = *(x_89);
-            x_68_phi = x_67;
-            x_71_phi = x_95;
-            continue;
-          }
-        } else {
-          let x_81 : ptr<function, i32> = &(tree[x_70].rightIndex);
-          let x_82 : i32 = *(x_81);
-          if ((x_82 == -1)) {
-            *(x_81) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_116_phi = true;
-            break;
-          } else {
-            x_87 = *(x_81);
-            x_68_phi = x_67;
-            x_71_phi = x_87;
-            continue;
-          }
-          return;
-        }
-        x_68_phi = x_114;
-        x_71_phi = x_70;
-
-        continuing {
-          x_68 = x_68_phi;
-          x_71 = x_71_phi;
-          x_67_phi = x_68;
-          x_70_phi = x_71;
-        }
-      }
-      let x_116 : bool = x_116_phi;
-      if (x_116) {
-        break;
-      }
-    }
-  }
-  x_119_phi = 0;
-  loop {
-    var x_133 : bool;
-    var x_120 : i32;
-    var x_134_phi : bool;
-    let x_119 : i32 = x_119_phi;
-    let x_125 : f32 = gl_FragCoord.y;
-    let x_126 : bool = (x_125 < 0.0);
-    x_134_phi = x_126;
-    if (!(x_126)) {
-      let x_131 : f32 = x_8.injectionSwitch.y;
-      x_133 = (x_119 != i32(x_131));
-      x_134_phi = x_133;
-    }
-    let x_134 : bool = x_134_phi;
-    if (x_134) {
-    } else {
-      break;
-    }
-    var x_139 : bool;
-    var x_186 : bool;
-    var x_139_phi : bool;
-    var x_142_phi : i32;
-    var x_188_phi : bool;
-    switch(0u) {
-      default: {
-        x_139_phi = false;
-        x_142_phi = 0;
-        loop {
-          var x_167 : i32;
-          var x_159 : i32;
-          var x_140 : bool;
-          var x_143 : i32;
-          var x_140_phi : bool;
-          var x_143_phi : i32;
-          x_139 = x_139_phi;
-          let x_142 : i32 = x_142_phi;
-          x_188_phi = x_139;
-          if ((x_142 <= 2)) {
-          } else {
-            break;
-          }
-          let x_148 : i32 = tree[x_142].data;
-          if ((12 <= x_148)) {
-            var x_186_phi : bool;
-            let x_161 : ptr<function, i32> = &(tree[x_142].leftIndex);
-            let x_162 : i32 = *(x_161);
-            if ((x_162 == -1)) {
-              let x_169 : f32 = x_8.injectionSwitch.y;
-              let x_171 : f32 = x_8.injectionSwitch.x;
-              if ((x_169 < x_171)) {
-                loop {
-                  discard;
-                }
-                return;
-              }
-              *(x_161) = 2;
-              tree[2] = BST(12, -1, -1);
-              loop {
-                x_186_phi = x_139;
-                if ((0 < i32(x_169))) {
-                } else {
-                  break;
-                }
-                x_186_phi = true;
-                break;
-              }
-              x_186 = x_186_phi;
-              x_188_phi = x_186;
-              if (x_186) {
-                break;
-              }
-            } else {
-              x_167 = *(x_161);
-              x_140_phi = x_139;
-              x_143_phi = x_167;
-              continue;
-            }
-          } else {
-            let x_153 : ptr<function, i32> = &(tree[x_142].rightIndex);
-            let x_154 : i32 = *(x_153);
-            if ((x_154 == -1)) {
-              *(x_153) = 2;
-              tree[2] = BST(12, -1, -1);
-              x_188_phi = true;
-              break;
-            } else {
-              x_159 = *(x_153);
-              x_140_phi = x_139;
-              x_143_phi = x_159;
-              continue;
-            }
-            return;
-          }
-          x_140_phi = x_186;
-          x_143_phi = x_142;
-
-          continuing {
-            x_140 = x_140_phi;
-            x_143 = x_143_phi;
-            x_139_phi = x_140;
-            x_142_phi = x_143;
-          }
-        }
-        let x_188 : bool = x_188_phi;
-        if (x_188) {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      x_120 = (x_119 + 1);
-      x_119_phi = x_120;
-    }
-  }
-  var x_193 : bool;
-  var x_240 : bool;
-  var x_193_phi : bool;
-  var x_196_phi : i32;
-  var x_242_phi : bool;
-  switch(0u) {
-    default: {
-      x_193_phi = false;
-      x_196_phi = 0;
-      loop {
-        var x_221 : i32;
-        var x_213 : i32;
-        var x_194 : bool;
-        var x_197 : i32;
-        var x_194_phi : bool;
-        var x_197_phi : i32;
-        x_193 = x_193_phi;
-        let x_196 : i32 = x_196_phi;
-        x_242_phi = x_193;
-        if ((x_196 <= 3)) {
-        } else {
-          break;
-        }
-        let x_202 : i32 = tree[x_196].data;
-        if ((15 <= x_202)) {
-          var x_240_phi : bool;
-          let x_215 : ptr<function, i32> = &(tree[x_196].leftIndex);
-          let x_216 : i32 = *(x_215);
-          if ((x_216 == -1)) {
-            let x_223 : f32 = x_8.injectionSwitch.y;
-            let x_225 : f32 = x_8.injectionSwitch.x;
-            if ((x_223 < x_225)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_215) = 3;
-            tree[3] = BST(15, -1, -1);
-            loop {
-              x_240_phi = x_193;
-              if ((0 < i32(x_223))) {
-              } else {
-                break;
-              }
-              x_240_phi = true;
-              break;
-            }
-            x_240 = x_240_phi;
-            x_242_phi = x_240;
-            if (x_240) {
-              break;
-            }
-          } else {
-            x_221 = *(x_215);
-            x_194_phi = x_193;
-            x_197_phi = x_221;
-            continue;
-          }
-        } else {
-          let x_207 : ptr<function, i32> = &(tree[x_196].rightIndex);
-          let x_208 : i32 = *(x_207);
-          if ((x_208 == -1)) {
-            *(x_207) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_242_phi = true;
-            break;
-          } else {
-            x_213 = *(x_207);
-            x_194_phi = x_193;
-            x_197_phi = x_213;
-            continue;
-          }
-          return;
-        }
-        x_194_phi = x_240;
-        x_197_phi = x_196;
-
-        continuing {
-          x_194 = x_194_phi;
-          x_197 = x_197_phi;
-          x_193_phi = x_194;
-          x_196_phi = x_197;
-        }
-      }
-      let x_242 : bool = x_242_phi;
-      if (x_242) {
-        break;
-      }
-    }
-  }
-  var x_247 : bool;
-  var x_294 : bool;
-  var x_247_phi : bool;
-  var x_250_phi : i32;
-  var x_296_phi : bool;
-  switch(0u) {
-    default: {
-      x_247_phi = false;
-      x_250_phi = 0;
-      loop {
-        var x_275 : i32;
-        var x_267 : i32;
-        var x_248 : bool;
-        var x_251 : i32;
-        var x_248_phi : bool;
-        var x_251_phi : i32;
-        x_247 = x_247_phi;
-        let x_250 : i32 = x_250_phi;
-        x_296_phi = x_247;
-        if ((x_250 <= 4)) {
-        } else {
-          break;
-        }
-        let x_256 : i32 = tree[x_250].data;
-        if ((7 <= x_256)) {
-          var x_294_phi : bool;
-          let x_269 : ptr<function, i32> = &(tree[x_250].leftIndex);
-          let x_270 : i32 = *(x_269);
-          if ((x_270 == -1)) {
-            let x_277 : f32 = x_8.injectionSwitch.y;
-            let x_279 : f32 = x_8.injectionSwitch.x;
-            if ((x_277 < x_279)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_269) = 4;
-            tree[4] = BST(7, -1, -1);
-            loop {
-              x_294_phi = x_247;
-              if ((0 < i32(x_277))) {
-              } else {
-                break;
-              }
-              x_294_phi = true;
-              break;
-            }
-            x_294 = x_294_phi;
-            x_296_phi = x_294;
-            if (x_294) {
-              break;
-            }
-          } else {
-            x_275 = *(x_269);
-            x_248_phi = x_247;
-            x_251_phi = x_275;
-            continue;
-          }
-        } else {
-          let x_261 : ptr<function, i32> = &(tree[x_250].rightIndex);
-          let x_262 : i32 = *(x_261);
-          if ((x_262 == -1)) {
-            *(x_261) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_296_phi = true;
-            break;
-          } else {
-            x_267 = *(x_261);
-            x_248_phi = x_247;
-            x_251_phi = x_267;
-            continue;
-          }
-          return;
-        }
-        x_248_phi = x_294;
-        x_251_phi = x_250;
-
-        continuing {
-          x_248 = x_248_phi;
-          x_251 = x_251_phi;
-          x_247_phi = x_248;
-          x_250_phi = x_251;
-        }
-      }
-      let x_296 : bool = x_296_phi;
-      if (x_296) {
-        break;
-      }
-    }
-  }
-  var x_301 : bool;
-  var x_348 : bool;
-  var x_301_phi : bool;
-  var x_304_phi : i32;
-  var x_350_phi : bool;
-  switch(0u) {
-    default: {
-      x_301_phi = false;
-      x_304_phi = 0;
-      loop {
-        var x_329 : i32;
-        var x_321 : i32;
-        var x_302 : bool;
-        var x_305 : i32;
-        var x_302_phi : bool;
-        var x_305_phi : i32;
-        x_301 = x_301_phi;
-        let x_304 : i32 = x_304_phi;
-        x_350_phi = x_301;
-        if ((x_304 <= 5)) {
-        } else {
-          break;
-        }
-        let x_310 : i32 = tree[x_304].data;
-        if ((8 <= x_310)) {
-          var x_348_phi : bool;
-          let x_323 : ptr<function, i32> = &(tree[x_304].leftIndex);
-          let x_324 : i32 = *(x_323);
-          if ((x_324 == -1)) {
-            let x_331 : f32 = x_8.injectionSwitch.y;
-            let x_333 : f32 = x_8.injectionSwitch.x;
-            if ((x_331 < x_333)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_323) = 5;
-            tree[5] = BST(8, -1, -1);
-            loop {
-              x_348_phi = x_301;
-              if ((0 < i32(x_331))) {
-              } else {
-                break;
-              }
-              x_348_phi = true;
-              break;
-            }
-            x_348 = x_348_phi;
-            x_350_phi = x_348;
-            if (x_348) {
-              break;
-            }
-          } else {
-            x_329 = *(x_323);
-            x_302_phi = x_301;
-            x_305_phi = x_329;
-            continue;
-          }
-        } else {
-          let x_315 : ptr<function, i32> = &(tree[x_304].rightIndex);
-          let x_316 : i32 = *(x_315);
-          if ((x_316 == -1)) {
-            *(x_315) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_350_phi = true;
-            break;
-          } else {
-            x_321 = *(x_315);
-            x_302_phi = x_301;
-            x_305_phi = x_321;
-            continue;
-          }
-          return;
-        }
-        x_302_phi = x_348;
-        x_305_phi = x_304;
-
-        continuing {
-          x_302 = x_302_phi;
-          x_305 = x_305_phi;
-          x_301_phi = x_302;
-          x_304_phi = x_305;
-        }
-      }
-      let x_350 : bool = x_350_phi;
-      if (x_350) {
-        break;
-      }
-    }
-  }
-  var x_355 : bool;
-  var x_402 : bool;
-  var x_355_phi : bool;
-  var x_358_phi : i32;
-  var x_404_phi : bool;
-  switch(0u) {
-    default: {
-      x_355_phi = false;
-      x_358_phi = 0;
-      loop {
-        var x_383 : i32;
-        var x_375 : i32;
-        var x_356 : bool;
-        var x_359 : i32;
-        var x_356_phi : bool;
-        var x_359_phi : i32;
-        x_355 = x_355_phi;
-        let x_358 : i32 = x_358_phi;
-        x_404_phi = x_355;
-        if ((x_358 <= 6)) {
-        } else {
-          break;
-        }
-        let x_364 : i32 = tree[x_358].data;
-        if ((2 <= x_364)) {
-          var x_402_phi : bool;
-          let x_377 : ptr<function, i32> = &(tree[x_358].leftIndex);
-          let x_378 : i32 = *(x_377);
-          if ((x_378 == -1)) {
-            let x_385 : f32 = x_8.injectionSwitch.y;
-            let x_387 : f32 = x_8.injectionSwitch.x;
-            if ((x_385 < x_387)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_377) = 6;
-            tree[6] = BST(2, -1, -1);
-            loop {
-              x_402_phi = x_355;
-              if ((0 < i32(x_385))) {
-              } else {
-                break;
-              }
-              x_402_phi = true;
-              break;
-            }
-            x_402 = x_402_phi;
-            x_404_phi = x_402;
-            if (x_402) {
-              break;
-            }
-          } else {
-            x_383 = *(x_377);
-            x_356_phi = x_355;
-            x_359_phi = x_383;
-            continue;
-          }
-        } else {
-          let x_369 : ptr<function, i32> = &(tree[x_358].rightIndex);
-          let x_370 : i32 = *(x_369);
-          if ((x_370 == -1)) {
-            *(x_369) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_404_phi = true;
-            break;
-          } else {
-            x_375 = *(x_369);
-            x_356_phi = x_355;
-            x_359_phi = x_375;
-            continue;
-          }
-          return;
-        }
-        x_356_phi = x_402;
-        x_359_phi = x_358;
-
-        continuing {
-          x_356 = x_356_phi;
-          x_359 = x_359_phi;
-          x_355_phi = x_356;
-          x_358_phi = x_359;
-        }
-      }
-      let x_404 : bool = x_404_phi;
-      if (x_404) {
-        break;
-      }
-    }
-  }
-  var x_409 : bool;
-  var x_456 : bool;
-  var x_409_phi : bool;
-  var x_412_phi : i32;
-  var x_458_phi : bool;
-  switch(0u) {
-    default: {
-      x_409_phi = false;
-      x_412_phi = 0;
-      loop {
-        var x_437 : i32;
-        var x_429 : i32;
-        var x_410 : bool;
-        var x_413 : i32;
-        var x_410_phi : bool;
-        var x_413_phi : i32;
-        x_409 = x_409_phi;
-        let x_412 : i32 = x_412_phi;
-        x_458_phi = x_409;
-        if ((x_412 <= 7)) {
-        } else {
-          break;
-        }
-        let x_418 : i32 = tree[x_412].data;
-        if ((6 <= x_418)) {
-          var x_456_phi : bool;
-          let x_431 : ptr<function, i32> = &(tree[x_412].leftIndex);
-          let x_432 : i32 = *(x_431);
-          if ((x_432 == -1)) {
-            let x_439 : f32 = x_8.injectionSwitch.y;
-            let x_441 : f32 = x_8.injectionSwitch.x;
-            if ((x_439 < x_441)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_431) = 7;
-            tree[7] = BST(6, -1, -1);
-            loop {
-              x_456_phi = x_409;
-              if ((0 < i32(x_439))) {
-              } else {
-                break;
-              }
-              x_456_phi = true;
-              break;
-            }
-            x_456 = x_456_phi;
-            x_458_phi = x_456;
-            if (x_456) {
-              break;
-            }
-          } else {
-            x_437 = *(x_431);
-            x_410_phi = x_409;
-            x_413_phi = x_437;
-            continue;
-          }
-        } else {
-          let x_423 : ptr<function, i32> = &(tree[x_412].rightIndex);
-          let x_424 : i32 = *(x_423);
-          if ((x_424 == -1)) {
-            *(x_423) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_458_phi = true;
-            break;
-          } else {
-            x_429 = *(x_423);
-            x_410_phi = x_409;
-            x_413_phi = x_429;
-            continue;
-          }
-          return;
-        }
-        x_410_phi = x_456;
-        x_413_phi = x_412;
-
-        continuing {
-          x_410 = x_410_phi;
-          x_413 = x_413_phi;
-          x_409_phi = x_410;
-          x_412_phi = x_413;
-        }
-      }
-      let x_458 : bool = x_458_phi;
-      if (x_458) {
-        break;
-      }
-    }
-  }
-  var x_463 : bool;
-  var x_510 : bool;
-  var x_463_phi : bool;
-  var x_466_phi : i32;
-  var x_512_phi : bool;
-  switch(0u) {
-    default: {
-      x_463_phi = false;
-      x_466_phi = 0;
-      loop {
-        var x_491 : i32;
-        var x_483 : i32;
-        var x_464 : bool;
-        var x_467 : i32;
-        var x_464_phi : bool;
-        var x_467_phi : i32;
-        x_463 = x_463_phi;
-        let x_466 : i32 = x_466_phi;
-        x_512_phi = x_463;
-        if ((x_466 <= 8)) {
-        } else {
-          break;
-        }
-        let x_472 : i32 = tree[x_466].data;
-        if ((17 <= x_472)) {
-          var x_510_phi : bool;
-          let x_485 : ptr<function, i32> = &(tree[x_466].leftIndex);
-          let x_486 : i32 = *(x_485);
-          if ((x_486 == -1)) {
-            let x_493 : f32 = x_8.injectionSwitch.y;
-            let x_495 : f32 = x_8.injectionSwitch.x;
-            if ((x_493 < x_495)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_485) = 8;
-            tree[8] = BST(17, -1, -1);
-            loop {
-              x_510_phi = x_463;
-              if ((0 < i32(x_493))) {
-              } else {
-                break;
-              }
-              x_510_phi = true;
-              break;
-            }
-            x_510 = x_510_phi;
-            x_512_phi = x_510;
-            if (x_510) {
-              break;
-            }
-          } else {
-            x_491 = *(x_485);
-            x_464_phi = x_463;
-            x_467_phi = x_491;
-            continue;
-          }
-        } else {
-          let x_477 : ptr<function, i32> = &(tree[x_466].rightIndex);
-          let x_478 : i32 = *(x_477);
-          if ((x_478 == -1)) {
-            *(x_477) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_512_phi = true;
-            break;
-          } else {
-            x_483 = *(x_477);
-            x_464_phi = x_463;
-            x_467_phi = x_483;
-            continue;
-          }
-          return;
-        }
-        x_464_phi = x_510;
-        x_467_phi = x_466;
-
-        continuing {
-          x_464 = x_464_phi;
-          x_467 = x_467_phi;
-          x_463_phi = x_464;
-          x_466_phi = x_467;
-        }
-      }
-      let x_512 : bool = x_512_phi;
-      if (x_512) {
-        break;
-      }
-    }
-  }
-  var x_517 : bool;
-  var x_564 : bool;
-  var x_517_phi : bool;
-  var x_520_phi : i32;
-  var x_566_phi : bool;
-  switch(0u) {
-    default: {
-      x_517_phi = false;
-      x_520_phi = 0;
-      loop {
-        var x_545 : i32;
-        var x_537 : i32;
-        var x_518 : bool;
-        var x_521 : i32;
-        var x_518_phi : bool;
-        var x_521_phi : i32;
-        x_517 = x_517_phi;
-        let x_520 : i32 = x_520_phi;
-        x_566_phi = x_517;
-        if ((x_520 <= 9)) {
-        } else {
-          break;
-        }
-        let x_526 : i32 = tree[x_520].data;
-        if ((13 <= x_526)) {
-          var x_564_phi : bool;
-          let x_539 : ptr<function, i32> = &(tree[x_520].leftIndex);
-          let x_540 : i32 = *(x_539);
-          if ((x_540 == -1)) {
-            let x_547 : f32 = x_8.injectionSwitch.y;
-            let x_549 : f32 = x_8.injectionSwitch.x;
-            if ((x_547 < x_549)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_539) = 9;
-            tree[9] = BST(13, -1, -1);
-            loop {
-              x_564_phi = x_517;
-              if ((0 < i32(x_547))) {
-              } else {
-                break;
-              }
-              x_564_phi = true;
-              break;
-            }
-            x_564 = x_564_phi;
-            x_566_phi = x_564;
-            if (x_564) {
-              break;
-            }
-          } else {
-            x_545 = *(x_539);
-            x_518_phi = x_517;
-            x_521_phi = x_545;
-            continue;
-          }
-        } else {
-          let x_531 : ptr<function, i32> = &(tree[x_520].rightIndex);
-          let x_532 : i32 = *(x_531);
-          if ((x_532 == -1)) {
-            *(x_531) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_566_phi = true;
-            break;
-          } else {
-            x_537 = *(x_531);
-            x_518_phi = x_517;
-            x_521_phi = x_537;
-            continue;
-          }
-          return;
-        }
-        x_518_phi = x_564;
-        x_521_phi = x_520;
-
-        continuing {
-          x_518 = x_518_phi;
-          x_521 = x_521_phi;
-          x_517_phi = x_518;
-          x_520_phi = x_521;
-        }
-      }
-      let x_566 : bool = x_566_phi;
-      if (x_566) {
-        break;
-      }
-    }
-  }
-  x_569_phi = 0;
-  x_572_phi = 0;
-  x_574_phi = 0;
-  loop {
-    var x_597 : i32;
-    var x_607 : i32;
-    var x_612 : i32;
-    var x_575 : i32;
-    var x_570_phi : i32;
-    var x_573_phi : i32;
-    let x_569 : i32 = x_569_phi;
-    x_572 = x_572_phi;
-    let x_574 : i32 = x_574_phi;
-    if ((x_574 < 20)) {
-    } else {
-      break;
-    }
-    var x_582_phi : i32;
-    var x_597_phi : i32;
-    var x_598_phi : bool;
-    switch(0u) {
-      default: {
-        x_582_phi = 0;
-        loop {
-          let x_582 : i32 = x_582_phi;
-          x_597_phi = x_569;
-          x_598_phi = false;
-          if ((x_582 != -1)) {
-          } else {
-            break;
-          }
-          let x_589 : BST = tree[x_582];
-          let x_590 : i32 = x_589.data;
-          let x_591 : i32 = x_589.leftIndex;
-          let x_592 : i32 = x_589.rightIndex;
-          if ((x_590 == x_574)) {
-            x_597_phi = x_574;
-            x_598_phi = true;
-            break;
-          }
-
-          continuing {
-            x_582_phi = select(x_591, x_592, (x_574 > x_590));
-          }
-        }
-        x_597 = x_597_phi;
-        let x_598 : bool = x_598_phi;
-        x_570_phi = x_597;
-        if (x_598) {
-          break;
-        }
-        x_570_phi = -1;
-      }
-    }
-    var x_570 : i32;
-    var x_606 : i32;
-    var x_611 : i32;
-    var x_607_phi : i32;
-    var x_612_phi : i32;
-    x_570 = x_570_phi;
-    switch(x_574) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        x_607_phi = x_572;
-        if ((x_570 == bitcast<i32>(x_574))) {
-          x_606 = bitcast<i32>((x_572 + bitcast<i32>(1)));
-          x_607_phi = x_606;
-        }
-        x_607 = x_607_phi;
-        x_573_phi = x_607;
-      }
-      default: {
-        x_612_phi = x_572;
-        if ((x_570 == bitcast<i32>(-1))) {
-          x_611 = bitcast<i32>((x_572 + bitcast<i32>(1)));
-          x_612_phi = x_611;
-        }
-        x_612 = x_612_phi;
-        x_573_phi = x_612;
-      }
-    }
-    let x_573 : i32 = x_573_phi;
-
-    continuing {
-      x_575 = (x_574 + 1);
-      x_569_phi = x_570;
-      x_572_phi = x_573;
-      x_574_phi = x_575;
-    }
-  }
-  if ((x_572 == bitcast<i32>(20))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.msl
deleted file mode 100644
index 95ce08a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.msl
+++ /dev/null
@@ -1,1122 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_22, thread float4* const tint_symbol_23) {
-  tint_array_wrapper tree = {};
-  bool x_67 = false;
-  bool x_114 = false;
-  int x_572 = 0;
-  bool x_67_phi = false;
-  int x_70_phi = 0;
-  bool x_116_phi = false;
-  int x_119_phi = 0;
-  int x_569_phi = 0;
-  int x_572_phi = 0;
-  int x_574_phi = 0;
-  BST const tint_symbol_2 = {.data=9, .leftIndex=-1, .rightIndex=-1};
-  tree.arr[0] = tint_symbol_2;
-  switch(0u) {
-    default: {
-      x_67_phi = false;
-      x_70_phi = 0;
-      while (true) {
-        int x_95 = 0;
-        int x_87 = 0;
-        bool x_68 = false;
-        int x_71 = 0;
-        bool x_68_phi = false;
-        int x_71_phi = 0;
-        x_67 = x_67_phi;
-        int const x_70 = x_70_phi;
-        x_116_phi = x_67;
-        if ((x_70 <= 1)) {
-        } else {
-          break;
-        }
-        int const x_76 = tree.arr[x_70].data;
-        if ((5 <= x_76)) {
-          bool x_114_phi = false;
-          int const x_89_save = x_70;
-          int const x_90 = tree.arr[x_89_save].leftIndex;
-          if ((x_90 == -1)) {
-            float const x_97 = x_8.injectionSwitch.y;
-            float const x_99 = x_8.injectionSwitch.x;
-            if ((x_97 < x_99)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_89_save].leftIndex = 1;
-            BST const tint_symbol_3 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_3;
-            while (true) {
-              x_114_phi = x_67;
-              if ((0 < int(x_97))) {
-              } else {
-                break;
-              }
-              x_114_phi = true;
-              break;
-            }
-            x_114 = x_114_phi;
-            x_116_phi = x_114;
-            if (x_114) {
-              break;
-            }
-          } else {
-            x_95 = tree.arr[x_89_save].leftIndex;
-            x_68_phi = x_67;
-            x_71_phi = x_95;
-            {
-              x_68 = x_68_phi;
-              x_71 = x_71_phi;
-              x_67_phi = x_68;
-              x_70_phi = x_71;
-            }
-            continue;
-          }
-        } else {
-          int const x_81_save = x_70;
-          int const x_82 = tree.arr[x_81_save].rightIndex;
-          if ((x_82 == -1)) {
-            tree.arr[x_81_save].rightIndex = 1;
-            BST const tint_symbol_4 = {.data=5, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[1] = tint_symbol_4;
-            x_116_phi = true;
-            break;
-          } else {
-            x_87 = tree.arr[x_81_save].rightIndex;
-            x_68_phi = x_67;
-            x_71_phi = x_87;
-            {
-              x_68 = x_68_phi;
-              x_71 = x_71_phi;
-              x_67_phi = x_68;
-              x_70_phi = x_71;
-            }
-            continue;
-          }
-          return;
-        }
-        x_68_phi = x_114;
-        x_71_phi = x_70;
-        {
-          x_68 = x_68_phi;
-          x_71 = x_71_phi;
-          x_67_phi = x_68;
-          x_70_phi = x_71;
-        }
-      }
-      bool const x_116 = x_116_phi;
-      if (x_116) {
-        break;
-      }
-      break;
-    }
-  }
-  x_119_phi = 0;
-  while (true) {
-    bool x_133 = false;
-    int x_120 = 0;
-    bool x_134_phi = false;
-    int const x_119 = x_119_phi;
-    float const x_125 = (*(tint_symbol_22)).y;
-    bool const x_126 = (x_125 < 0.0f);
-    x_134_phi = x_126;
-    if (!(x_126)) {
-      float const x_131 = x_8.injectionSwitch.y;
-      x_133 = (x_119 != int(x_131));
-      x_134_phi = x_133;
-    }
-    bool const x_134 = x_134_phi;
-    if (x_134) {
-    } else {
-      break;
-    }
-    bool x_139 = false;
-    bool x_186 = false;
-    bool x_139_phi = false;
-    int x_142_phi = 0;
-    bool x_188_phi = false;
-    switch(0u) {
-      default: {
-        x_139_phi = false;
-        x_142_phi = 0;
-        while (true) {
-          int x_167 = 0;
-          int x_159 = 0;
-          bool x_140 = false;
-          int x_143 = 0;
-          bool x_140_phi = false;
-          int x_143_phi = 0;
-          x_139 = x_139_phi;
-          int const x_142 = x_142_phi;
-          x_188_phi = x_139;
-          if ((x_142 <= 2)) {
-          } else {
-            break;
-          }
-          int const x_148 = tree.arr[x_142].data;
-          if ((12 <= x_148)) {
-            bool x_186_phi = false;
-            int const x_161_save = x_142;
-            int const x_162 = tree.arr[x_161_save].leftIndex;
-            if ((x_162 == -1)) {
-              float const x_169 = x_8.injectionSwitch.y;
-              float const x_171 = x_8.injectionSwitch.x;
-              if ((x_169 < x_171)) {
-                while (true) {
-                  discard_fragment();
-                }
-                return;
-              }
-              tree.arr[x_161_save].leftIndex = 2;
-              BST const tint_symbol_5 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-              tree.arr[2] = tint_symbol_5;
-              while (true) {
-                x_186_phi = x_139;
-                if ((0 < int(x_169))) {
-                } else {
-                  break;
-                }
-                x_186_phi = true;
-                break;
-              }
-              x_186 = x_186_phi;
-              x_188_phi = x_186;
-              if (x_186) {
-                break;
-              }
-            } else {
-              x_167 = tree.arr[x_161_save].leftIndex;
-              x_140_phi = x_139;
-              x_143_phi = x_167;
-              {
-                x_140 = x_140_phi;
-                x_143 = x_143_phi;
-                x_139_phi = x_140;
-                x_142_phi = x_143;
-              }
-              continue;
-            }
-          } else {
-            int const x_153_save = x_142;
-            int const x_154 = tree.arr[x_153_save].rightIndex;
-            if ((x_154 == -1)) {
-              tree.arr[x_153_save].rightIndex = 2;
-              BST const tint_symbol_6 = {.data=12, .leftIndex=-1, .rightIndex=-1};
-              tree.arr[2] = tint_symbol_6;
-              x_188_phi = true;
-              break;
-            } else {
-              x_159 = tree.arr[x_153_save].rightIndex;
-              x_140_phi = x_139;
-              x_143_phi = x_159;
-              {
-                x_140 = x_140_phi;
-                x_143 = x_143_phi;
-                x_139_phi = x_140;
-                x_142_phi = x_143;
-              }
-              continue;
-            }
-            return;
-          }
-          x_140_phi = x_186;
-          x_143_phi = x_142;
-          {
-            x_140 = x_140_phi;
-            x_143 = x_143_phi;
-            x_139_phi = x_140;
-            x_142_phi = x_143;
-          }
-        }
-        bool const x_188 = x_188_phi;
-        if (x_188) {
-          break;
-        }
-        break;
-      }
-    }
-    {
-      x_120 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-      x_119_phi = x_120;
-    }
-  }
-  bool x_193 = false;
-  bool x_240 = false;
-  bool x_193_phi = false;
-  int x_196_phi = 0;
-  bool x_242_phi = false;
-  switch(0u) {
-    default: {
-      x_193_phi = false;
-      x_196_phi = 0;
-      while (true) {
-        int x_221 = 0;
-        int x_213 = 0;
-        bool x_194 = false;
-        int x_197 = 0;
-        bool x_194_phi = false;
-        int x_197_phi = 0;
-        x_193 = x_193_phi;
-        int const x_196 = x_196_phi;
-        x_242_phi = x_193;
-        if ((x_196 <= 3)) {
-        } else {
-          break;
-        }
-        int const x_202 = tree.arr[x_196].data;
-        if ((15 <= x_202)) {
-          bool x_240_phi = false;
-          int const x_215_save = x_196;
-          int const x_216 = tree.arr[x_215_save].leftIndex;
-          if ((x_216 == -1)) {
-            float const x_223 = x_8.injectionSwitch.y;
-            float const x_225 = x_8.injectionSwitch.x;
-            if ((x_223 < x_225)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_215_save].leftIndex = 3;
-            BST const tint_symbol_7 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_7;
-            while (true) {
-              x_240_phi = x_193;
-              if ((0 < int(x_223))) {
-              } else {
-                break;
-              }
-              x_240_phi = true;
-              break;
-            }
-            x_240 = x_240_phi;
-            x_242_phi = x_240;
-            if (x_240) {
-              break;
-            }
-          } else {
-            x_221 = tree.arr[x_215_save].leftIndex;
-            x_194_phi = x_193;
-            x_197_phi = x_221;
-            {
-              x_194 = x_194_phi;
-              x_197 = x_197_phi;
-              x_193_phi = x_194;
-              x_196_phi = x_197;
-            }
-            continue;
-          }
-        } else {
-          int const x_207_save = x_196;
-          int const x_208 = tree.arr[x_207_save].rightIndex;
-          if ((x_208 == -1)) {
-            tree.arr[x_207_save].rightIndex = 3;
-            BST const tint_symbol_8 = {.data=15, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[3] = tint_symbol_8;
-            x_242_phi = true;
-            break;
-          } else {
-            x_213 = tree.arr[x_207_save].rightIndex;
-            x_194_phi = x_193;
-            x_197_phi = x_213;
-            {
-              x_194 = x_194_phi;
-              x_197 = x_197_phi;
-              x_193_phi = x_194;
-              x_196_phi = x_197;
-            }
-            continue;
-          }
-          return;
-        }
-        x_194_phi = x_240;
-        x_197_phi = x_196;
-        {
-          x_194 = x_194_phi;
-          x_197 = x_197_phi;
-          x_193_phi = x_194;
-          x_196_phi = x_197;
-        }
-      }
-      bool const x_242 = x_242_phi;
-      if (x_242) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_247 = false;
-  bool x_294 = false;
-  bool x_247_phi = false;
-  int x_250_phi = 0;
-  bool x_296_phi = false;
-  switch(0u) {
-    default: {
-      x_247_phi = false;
-      x_250_phi = 0;
-      while (true) {
-        int x_275 = 0;
-        int x_267 = 0;
-        bool x_248 = false;
-        int x_251 = 0;
-        bool x_248_phi = false;
-        int x_251_phi = 0;
-        x_247 = x_247_phi;
-        int const x_250 = x_250_phi;
-        x_296_phi = x_247;
-        if ((x_250 <= 4)) {
-        } else {
-          break;
-        }
-        int const x_256 = tree.arr[x_250].data;
-        if ((7 <= x_256)) {
-          bool x_294_phi = false;
-          int const x_269_save = x_250;
-          int const x_270 = tree.arr[x_269_save].leftIndex;
-          if ((x_270 == -1)) {
-            float const x_277 = x_8.injectionSwitch.y;
-            float const x_279 = x_8.injectionSwitch.x;
-            if ((x_277 < x_279)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_269_save].leftIndex = 4;
-            BST const tint_symbol_9 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_9;
-            while (true) {
-              x_294_phi = x_247;
-              if ((0 < int(x_277))) {
-              } else {
-                break;
-              }
-              x_294_phi = true;
-              break;
-            }
-            x_294 = x_294_phi;
-            x_296_phi = x_294;
-            if (x_294) {
-              break;
-            }
-          } else {
-            x_275 = tree.arr[x_269_save].leftIndex;
-            x_248_phi = x_247;
-            x_251_phi = x_275;
-            {
-              x_248 = x_248_phi;
-              x_251 = x_251_phi;
-              x_247_phi = x_248;
-              x_250_phi = x_251;
-            }
-            continue;
-          }
-        } else {
-          int const x_261_save = x_250;
-          int const x_262 = tree.arr[x_261_save].rightIndex;
-          if ((x_262 == -1)) {
-            tree.arr[x_261_save].rightIndex = 4;
-            BST const tint_symbol_10 = {.data=7, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[4] = tint_symbol_10;
-            x_296_phi = true;
-            break;
-          } else {
-            x_267 = tree.arr[x_261_save].rightIndex;
-            x_248_phi = x_247;
-            x_251_phi = x_267;
-            {
-              x_248 = x_248_phi;
-              x_251 = x_251_phi;
-              x_247_phi = x_248;
-              x_250_phi = x_251;
-            }
-            continue;
-          }
-          return;
-        }
-        x_248_phi = x_294;
-        x_251_phi = x_250;
-        {
-          x_248 = x_248_phi;
-          x_251 = x_251_phi;
-          x_247_phi = x_248;
-          x_250_phi = x_251;
-        }
-      }
-      bool const x_296 = x_296_phi;
-      if (x_296) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_301 = false;
-  bool x_348 = false;
-  bool x_301_phi = false;
-  int x_304_phi = 0;
-  bool x_350_phi = false;
-  switch(0u) {
-    default: {
-      x_301_phi = false;
-      x_304_phi = 0;
-      while (true) {
-        int x_329 = 0;
-        int x_321 = 0;
-        bool x_302 = false;
-        int x_305 = 0;
-        bool x_302_phi = false;
-        int x_305_phi = 0;
-        x_301 = x_301_phi;
-        int const x_304 = x_304_phi;
-        x_350_phi = x_301;
-        if ((x_304 <= 5)) {
-        } else {
-          break;
-        }
-        int const x_310 = tree.arr[x_304].data;
-        if ((8 <= x_310)) {
-          bool x_348_phi = false;
-          int const x_323_save = x_304;
-          int const x_324 = tree.arr[x_323_save].leftIndex;
-          if ((x_324 == -1)) {
-            float const x_331 = x_8.injectionSwitch.y;
-            float const x_333 = x_8.injectionSwitch.x;
-            if ((x_331 < x_333)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_323_save].leftIndex = 5;
-            BST const tint_symbol_11 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_11;
-            while (true) {
-              x_348_phi = x_301;
-              if ((0 < int(x_331))) {
-              } else {
-                break;
-              }
-              x_348_phi = true;
-              break;
-            }
-            x_348 = x_348_phi;
-            x_350_phi = x_348;
-            if (x_348) {
-              break;
-            }
-          } else {
-            x_329 = tree.arr[x_323_save].leftIndex;
-            x_302_phi = x_301;
-            x_305_phi = x_329;
-            {
-              x_302 = x_302_phi;
-              x_305 = x_305_phi;
-              x_301_phi = x_302;
-              x_304_phi = x_305;
-            }
-            continue;
-          }
-        } else {
-          int const x_315_save = x_304;
-          int const x_316 = tree.arr[x_315_save].rightIndex;
-          if ((x_316 == -1)) {
-            tree.arr[x_315_save].rightIndex = 5;
-            BST const tint_symbol_12 = {.data=8, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[5] = tint_symbol_12;
-            x_350_phi = true;
-            break;
-          } else {
-            x_321 = tree.arr[x_315_save].rightIndex;
-            x_302_phi = x_301;
-            x_305_phi = x_321;
-            {
-              x_302 = x_302_phi;
-              x_305 = x_305_phi;
-              x_301_phi = x_302;
-              x_304_phi = x_305;
-            }
-            continue;
-          }
-          return;
-        }
-        x_302_phi = x_348;
-        x_305_phi = x_304;
-        {
-          x_302 = x_302_phi;
-          x_305 = x_305_phi;
-          x_301_phi = x_302;
-          x_304_phi = x_305;
-        }
-      }
-      bool const x_350 = x_350_phi;
-      if (x_350) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_355 = false;
-  bool x_402 = false;
-  bool x_355_phi = false;
-  int x_358_phi = 0;
-  bool x_404_phi = false;
-  switch(0u) {
-    default: {
-      x_355_phi = false;
-      x_358_phi = 0;
-      while (true) {
-        int x_383 = 0;
-        int x_375 = 0;
-        bool x_356 = false;
-        int x_359 = 0;
-        bool x_356_phi = false;
-        int x_359_phi = 0;
-        x_355 = x_355_phi;
-        int const x_358 = x_358_phi;
-        x_404_phi = x_355;
-        if ((x_358 <= 6)) {
-        } else {
-          break;
-        }
-        int const x_364 = tree.arr[x_358].data;
-        if ((2 <= x_364)) {
-          bool x_402_phi = false;
-          int const x_377_save = x_358;
-          int const x_378 = tree.arr[x_377_save].leftIndex;
-          if ((x_378 == -1)) {
-            float const x_385 = x_8.injectionSwitch.y;
-            float const x_387 = x_8.injectionSwitch.x;
-            if ((x_385 < x_387)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_377_save].leftIndex = 6;
-            BST const tint_symbol_13 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_13;
-            while (true) {
-              x_402_phi = x_355;
-              if ((0 < int(x_385))) {
-              } else {
-                break;
-              }
-              x_402_phi = true;
-              break;
-            }
-            x_402 = x_402_phi;
-            x_404_phi = x_402;
-            if (x_402) {
-              break;
-            }
-          } else {
-            x_383 = tree.arr[x_377_save].leftIndex;
-            x_356_phi = x_355;
-            x_359_phi = x_383;
-            {
-              x_356 = x_356_phi;
-              x_359 = x_359_phi;
-              x_355_phi = x_356;
-              x_358_phi = x_359;
-            }
-            continue;
-          }
-        } else {
-          int const x_369_save = x_358;
-          int const x_370 = tree.arr[x_369_save].rightIndex;
-          if ((x_370 == -1)) {
-            tree.arr[x_369_save].rightIndex = 6;
-            BST const tint_symbol_14 = {.data=2, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[6] = tint_symbol_14;
-            x_404_phi = true;
-            break;
-          } else {
-            x_375 = tree.arr[x_369_save].rightIndex;
-            x_356_phi = x_355;
-            x_359_phi = x_375;
-            {
-              x_356 = x_356_phi;
-              x_359 = x_359_phi;
-              x_355_phi = x_356;
-              x_358_phi = x_359;
-            }
-            continue;
-          }
-          return;
-        }
-        x_356_phi = x_402;
-        x_359_phi = x_358;
-        {
-          x_356 = x_356_phi;
-          x_359 = x_359_phi;
-          x_355_phi = x_356;
-          x_358_phi = x_359;
-        }
-      }
-      bool const x_404 = x_404_phi;
-      if (x_404) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_409 = false;
-  bool x_456 = false;
-  bool x_409_phi = false;
-  int x_412_phi = 0;
-  bool x_458_phi = false;
-  switch(0u) {
-    default: {
-      x_409_phi = false;
-      x_412_phi = 0;
-      while (true) {
-        int x_437 = 0;
-        int x_429 = 0;
-        bool x_410 = false;
-        int x_413 = 0;
-        bool x_410_phi = false;
-        int x_413_phi = 0;
-        x_409 = x_409_phi;
-        int const x_412 = x_412_phi;
-        x_458_phi = x_409;
-        if ((x_412 <= 7)) {
-        } else {
-          break;
-        }
-        int const x_418 = tree.arr[x_412].data;
-        if ((6 <= x_418)) {
-          bool x_456_phi = false;
-          int const x_431_save = x_412;
-          int const x_432 = tree.arr[x_431_save].leftIndex;
-          if ((x_432 == -1)) {
-            float const x_439 = x_8.injectionSwitch.y;
-            float const x_441 = x_8.injectionSwitch.x;
-            if ((x_439 < x_441)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_431_save].leftIndex = 7;
-            BST const tint_symbol_15 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_15;
-            while (true) {
-              x_456_phi = x_409;
-              if ((0 < int(x_439))) {
-              } else {
-                break;
-              }
-              x_456_phi = true;
-              break;
-            }
-            x_456 = x_456_phi;
-            x_458_phi = x_456;
-            if (x_456) {
-              break;
-            }
-          } else {
-            x_437 = tree.arr[x_431_save].leftIndex;
-            x_410_phi = x_409;
-            x_413_phi = x_437;
-            {
-              x_410 = x_410_phi;
-              x_413 = x_413_phi;
-              x_409_phi = x_410;
-              x_412_phi = x_413;
-            }
-            continue;
-          }
-        } else {
-          int const x_423_save = x_412;
-          int const x_424 = tree.arr[x_423_save].rightIndex;
-          if ((x_424 == -1)) {
-            tree.arr[x_423_save].rightIndex = 7;
-            BST const tint_symbol_16 = {.data=6, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[7] = tint_symbol_16;
-            x_458_phi = true;
-            break;
-          } else {
-            x_429 = tree.arr[x_423_save].rightIndex;
-            x_410_phi = x_409;
-            x_413_phi = x_429;
-            {
-              x_410 = x_410_phi;
-              x_413 = x_413_phi;
-              x_409_phi = x_410;
-              x_412_phi = x_413;
-            }
-            continue;
-          }
-          return;
-        }
-        x_410_phi = x_456;
-        x_413_phi = x_412;
-        {
-          x_410 = x_410_phi;
-          x_413 = x_413_phi;
-          x_409_phi = x_410;
-          x_412_phi = x_413;
-        }
-      }
-      bool const x_458 = x_458_phi;
-      if (x_458) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_463 = false;
-  bool x_510 = false;
-  bool x_463_phi = false;
-  int x_466_phi = 0;
-  bool x_512_phi = false;
-  switch(0u) {
-    default: {
-      x_463_phi = false;
-      x_466_phi = 0;
-      while (true) {
-        int x_491 = 0;
-        int x_483 = 0;
-        bool x_464 = false;
-        int x_467 = 0;
-        bool x_464_phi = false;
-        int x_467_phi = 0;
-        x_463 = x_463_phi;
-        int const x_466 = x_466_phi;
-        x_512_phi = x_463;
-        if ((x_466 <= 8)) {
-        } else {
-          break;
-        }
-        int const x_472 = tree.arr[x_466].data;
-        if ((17 <= x_472)) {
-          bool x_510_phi = false;
-          int const x_485_save = x_466;
-          int const x_486 = tree.arr[x_485_save].leftIndex;
-          if ((x_486 == -1)) {
-            float const x_493 = x_8.injectionSwitch.y;
-            float const x_495 = x_8.injectionSwitch.x;
-            if ((x_493 < x_495)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_485_save].leftIndex = 8;
-            BST const tint_symbol_17 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_17;
-            while (true) {
-              x_510_phi = x_463;
-              if ((0 < int(x_493))) {
-              } else {
-                break;
-              }
-              x_510_phi = true;
-              break;
-            }
-            x_510 = x_510_phi;
-            x_512_phi = x_510;
-            if (x_510) {
-              break;
-            }
-          } else {
-            x_491 = tree.arr[x_485_save].leftIndex;
-            x_464_phi = x_463;
-            x_467_phi = x_491;
-            {
-              x_464 = x_464_phi;
-              x_467 = x_467_phi;
-              x_463_phi = x_464;
-              x_466_phi = x_467;
-            }
-            continue;
-          }
-        } else {
-          int const x_477_save = x_466;
-          int const x_478 = tree.arr[x_477_save].rightIndex;
-          if ((x_478 == -1)) {
-            tree.arr[x_477_save].rightIndex = 8;
-            BST const tint_symbol_18 = {.data=17, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[8] = tint_symbol_18;
-            x_512_phi = true;
-            break;
-          } else {
-            x_483 = tree.arr[x_477_save].rightIndex;
-            x_464_phi = x_463;
-            x_467_phi = x_483;
-            {
-              x_464 = x_464_phi;
-              x_467 = x_467_phi;
-              x_463_phi = x_464;
-              x_466_phi = x_467;
-            }
-            continue;
-          }
-          return;
-        }
-        x_464_phi = x_510;
-        x_467_phi = x_466;
-        {
-          x_464 = x_464_phi;
-          x_467 = x_467_phi;
-          x_463_phi = x_464;
-          x_466_phi = x_467;
-        }
-      }
-      bool const x_512 = x_512_phi;
-      if (x_512) {
-        break;
-      }
-      break;
-    }
-  }
-  bool x_517 = false;
-  bool x_564 = false;
-  bool x_517_phi = false;
-  int x_520_phi = 0;
-  bool x_566_phi = false;
-  switch(0u) {
-    default: {
-      x_517_phi = false;
-      x_520_phi = 0;
-      while (true) {
-        int x_545 = 0;
-        int x_537 = 0;
-        bool x_518 = false;
-        int x_521 = 0;
-        bool x_518_phi = false;
-        int x_521_phi = 0;
-        x_517 = x_517_phi;
-        int const x_520 = x_520_phi;
-        x_566_phi = x_517;
-        if ((x_520 <= 9)) {
-        } else {
-          break;
-        }
-        int const x_526 = tree.arr[x_520].data;
-        if ((13 <= x_526)) {
-          bool x_564_phi = false;
-          int const x_539_save = x_520;
-          int const x_540 = tree.arr[x_539_save].leftIndex;
-          if ((x_540 == -1)) {
-            float const x_547 = x_8.injectionSwitch.y;
-            float const x_549 = x_8.injectionSwitch.x;
-            if ((x_547 < x_549)) {
-              while (true) {
-                discard_fragment();
-              }
-              return;
-            }
-            tree.arr[x_539_save].leftIndex = 9;
-            BST const tint_symbol_19 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_19;
-            while (true) {
-              x_564_phi = x_517;
-              if ((0 < int(x_547))) {
-              } else {
-                break;
-              }
-              x_564_phi = true;
-              break;
-            }
-            x_564 = x_564_phi;
-            x_566_phi = x_564;
-            if (x_564) {
-              break;
-            }
-          } else {
-            x_545 = tree.arr[x_539_save].leftIndex;
-            x_518_phi = x_517;
-            x_521_phi = x_545;
-            {
-              x_518 = x_518_phi;
-              x_521 = x_521_phi;
-              x_517_phi = x_518;
-              x_520_phi = x_521;
-            }
-            continue;
-          }
-        } else {
-          int const x_531_save = x_520;
-          int const x_532 = tree.arr[x_531_save].rightIndex;
-          if ((x_532 == -1)) {
-            tree.arr[x_531_save].rightIndex = 9;
-            BST const tint_symbol_20 = {.data=13, .leftIndex=-1, .rightIndex=-1};
-            tree.arr[9] = tint_symbol_20;
-            x_566_phi = true;
-            break;
-          } else {
-            x_537 = tree.arr[x_531_save].rightIndex;
-            x_518_phi = x_517;
-            x_521_phi = x_537;
-            {
-              x_518 = x_518_phi;
-              x_521 = x_521_phi;
-              x_517_phi = x_518;
-              x_520_phi = x_521;
-            }
-            continue;
-          }
-          return;
-        }
-        x_518_phi = x_564;
-        x_521_phi = x_520;
-        {
-          x_518 = x_518_phi;
-          x_521 = x_521_phi;
-          x_517_phi = x_518;
-          x_520_phi = x_521;
-        }
-      }
-      bool const x_566 = x_566_phi;
-      if (x_566) {
-        break;
-      }
-      break;
-    }
-  }
-  x_569_phi = 0;
-  x_572_phi = 0;
-  x_574_phi = 0;
-  while (true) {
-    int x_597 = 0;
-    int x_607 = 0;
-    int x_612 = 0;
-    int x_575 = 0;
-    int x_570_phi = 0;
-    int x_573_phi = 0;
-    int const x_569 = x_569_phi;
-    x_572 = x_572_phi;
-    int const x_574 = x_574_phi;
-    if ((x_574 < 20)) {
-    } else {
-      break;
-    }
-    int x_582_phi = 0;
-    int x_597_phi = 0;
-    bool x_598_phi = false;
-    switch(0u) {
-      default: {
-        x_582_phi = 0;
-        while (true) {
-          int const x_582 = x_582_phi;
-          x_597_phi = x_569;
-          x_598_phi = false;
-          if ((x_582 != -1)) {
-          } else {
-            break;
-          }
-          BST const x_589 = tree.arr[x_582];
-          int const x_590 = x_589.data;
-          int const x_591 = x_589.leftIndex;
-          int const x_592 = x_589.rightIndex;
-          if ((x_590 == x_574)) {
-            x_597_phi = x_574;
-            x_598_phi = true;
-            break;
-          }
-          {
-            x_582_phi = select(x_591, x_592, (x_574 > x_590));
-          }
-        }
-        x_597 = x_597_phi;
-        bool const x_598 = x_598_phi;
-        x_570_phi = x_597;
-        if (x_598) {
-          break;
-        }
-        x_570_phi = -1;
-        break;
-      }
-    }
-    int x_570 = 0;
-    int x_606 = 0;
-    int x_611 = 0;
-    int x_607_phi = 0;
-    int x_612_phi = 0;
-    x_570 = x_570_phi;
-    switch(x_574) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        x_607_phi = x_572;
-        if ((x_570 == as_type<int>(x_574))) {
-          x_606 = as_type<int>(as_type<int>((as_type<uint>(x_572) + as_type<uint>(as_type<int>(1)))));
-          x_607_phi = x_606;
-        }
-        x_607 = x_607_phi;
-        x_573_phi = x_607;
-        break;
-      }
-      default: {
-        x_612_phi = x_572;
-        if ((x_570 == as_type<int>(-1))) {
-          x_611 = as_type<int>(as_type<int>((as_type<uint>(x_572) + as_type<uint>(as_type<int>(1)))));
-          x_612_phi = x_611;
-        }
-        x_612 = x_612_phi;
-        x_573_phi = x_612;
-        break;
-      }
-    }
-    int const x_573 = x_573_phi;
-    {
-      x_575 = as_type<int>((as_type<uint>(x_574) + as_type<uint>(1)));
-      x_569_phi = x_570;
-      x_572_phi = x_573;
-      x_574_phi = x_575;
-    }
-  }
-  if ((x_572 == as_type<int>(20))) {
-    *(tint_symbol_23) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_23) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_24, thread float4* const tint_symbol_25) {
-  *(tint_symbol_24) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_24, tint_symbol_25);
-  main_out const tint_symbol_21 = {.x_GLF_color_1=*(tint_symbol_25)};
-  return tint_symbol_21;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_26 = 0.0f;
-  thread float4 tint_symbol_27 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_26), &(tint_symbol_27));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.spvasm
deleted file mode 100644
index 15d09a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,1920 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 1006
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %x_67 "x_67"
-               OpName %x_114 "x_114"
-               OpName %x_572 "x_572"
-               OpName %x_67_phi "x_67_phi"
-               OpName %x_70_phi "x_70_phi"
-               OpName %x_116_phi "x_116_phi"
-               OpName %x_119_phi "x_119_phi"
-               OpName %x_569_phi "x_569_phi"
-               OpName %x_572_phi "x_572_phi"
-               OpName %x_574_phi "x_574_phi"
-               OpName %x_95 "x_95"
-               OpName %x_87 "x_87"
-               OpName %x_68 "x_68"
-               OpName %x_71 "x_71"
-               OpName %x_68_phi "x_68_phi"
-               OpName %x_71_phi "x_71_phi"
-               OpName %x_114_phi "x_114_phi"
-               OpName %x_133 "x_133"
-               OpName %x_120 "x_120"
-               OpName %x_134_phi "x_134_phi"
-               OpName %x_139 "x_139"
-               OpName %x_186 "x_186"
-               OpName %x_139_phi "x_139_phi"
-               OpName %x_142_phi "x_142_phi"
-               OpName %x_188_phi "x_188_phi"
-               OpName %x_167 "x_167"
-               OpName %x_159 "x_159"
-               OpName %x_140 "x_140"
-               OpName %x_143 "x_143"
-               OpName %x_140_phi "x_140_phi"
-               OpName %x_143_phi "x_143_phi"
-               OpName %x_186_phi "x_186_phi"
-               OpName %x_193 "x_193"
-               OpName %x_240 "x_240"
-               OpName %x_193_phi "x_193_phi"
-               OpName %x_196_phi "x_196_phi"
-               OpName %x_242_phi "x_242_phi"
-               OpName %x_221 "x_221"
-               OpName %x_213 "x_213"
-               OpName %x_194 "x_194"
-               OpName %x_197 "x_197"
-               OpName %x_194_phi "x_194_phi"
-               OpName %x_197_phi "x_197_phi"
-               OpName %x_240_phi "x_240_phi"
-               OpName %x_247 "x_247"
-               OpName %x_294 "x_294"
-               OpName %x_247_phi "x_247_phi"
-               OpName %x_250_phi "x_250_phi"
-               OpName %x_296_phi "x_296_phi"
-               OpName %x_275 "x_275"
-               OpName %x_267 "x_267"
-               OpName %x_248 "x_248"
-               OpName %x_251 "x_251"
-               OpName %x_248_phi "x_248_phi"
-               OpName %x_251_phi "x_251_phi"
-               OpName %x_294_phi "x_294_phi"
-               OpName %x_301 "x_301"
-               OpName %x_348 "x_348"
-               OpName %x_301_phi "x_301_phi"
-               OpName %x_304_phi "x_304_phi"
-               OpName %x_350_phi "x_350_phi"
-               OpName %x_329 "x_329"
-               OpName %x_321 "x_321"
-               OpName %x_302 "x_302"
-               OpName %x_305 "x_305"
-               OpName %x_302_phi "x_302_phi"
-               OpName %x_305_phi "x_305_phi"
-               OpName %x_348_phi "x_348_phi"
-               OpName %x_355 "x_355"
-               OpName %x_402 "x_402"
-               OpName %x_355_phi "x_355_phi"
-               OpName %x_358_phi "x_358_phi"
-               OpName %x_404_phi "x_404_phi"
-               OpName %x_383 "x_383"
-               OpName %x_375 "x_375"
-               OpName %x_356 "x_356"
-               OpName %x_359 "x_359"
-               OpName %x_356_phi "x_356_phi"
-               OpName %x_359_phi "x_359_phi"
-               OpName %x_402_phi "x_402_phi"
-               OpName %x_409 "x_409"
-               OpName %x_456 "x_456"
-               OpName %x_409_phi "x_409_phi"
-               OpName %x_412_phi "x_412_phi"
-               OpName %x_458_phi "x_458_phi"
-               OpName %x_437 "x_437"
-               OpName %x_429 "x_429"
-               OpName %x_410 "x_410"
-               OpName %x_413 "x_413"
-               OpName %x_410_phi "x_410_phi"
-               OpName %x_413_phi "x_413_phi"
-               OpName %x_456_phi "x_456_phi"
-               OpName %x_463 "x_463"
-               OpName %x_510 "x_510"
-               OpName %x_463_phi "x_463_phi"
-               OpName %x_466_phi "x_466_phi"
-               OpName %x_512_phi "x_512_phi"
-               OpName %x_491 "x_491"
-               OpName %x_483 "x_483"
-               OpName %x_464 "x_464"
-               OpName %x_467 "x_467"
-               OpName %x_464_phi "x_464_phi"
-               OpName %x_467_phi "x_467_phi"
-               OpName %x_510_phi "x_510_phi"
-               OpName %x_517 "x_517"
-               OpName %x_564 "x_564"
-               OpName %x_517_phi "x_517_phi"
-               OpName %x_520_phi "x_520_phi"
-               OpName %x_566_phi "x_566_phi"
-               OpName %x_545 "x_545"
-               OpName %x_537 "x_537"
-               OpName %x_518 "x_518"
-               OpName %x_521 "x_521"
-               OpName %x_518_phi "x_518_phi"
-               OpName %x_521_phi "x_521_phi"
-               OpName %x_564_phi "x_564_phi"
-               OpName %x_597 "x_597"
-               OpName %x_607 "x_607"
-               OpName %x_612 "x_612"
-               OpName %x_575 "x_575"
-               OpName %x_570_phi "x_570_phi"
-               OpName %x_573_phi "x_573_phi"
-               OpName %x_582_phi "x_582_phi"
-               OpName %x_597_phi "x_597_phi"
-               OpName %x_598_phi "x_598_phi"
-               OpName %x_570 "x_570"
-               OpName %x_606 "x_606"
-               OpName %x_611 "x_611"
-               OpName %x_607_phi "x_607_phi"
-               OpName %x_612_phi "x_612_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Function__arr_BST_uint_10 = OpTypePointer Function %_arr_BST_uint_10
-         %26 = OpConstantNull %_arr_BST_uint_10
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %30 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %34 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-%_ptr_Function_BST = OpTypePointer Function %BST
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-         %47 = OpConstantComposite %BST %int_9 %int_n1 %int_n1
-     %uint_0 = OpConstant %uint 0
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-         %99 = OpConstantComposite %BST %int_5 %int_n1 %int_n1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-     %int_12 = OpConstant %int 12
-        %218 = OpConstantComposite %BST %int_12 %int_n1 %int_n1
-      %int_3 = OpConstant %int 3
-     %int_15 = OpConstant %int 15
-        %312 = OpConstantComposite %BST %int_15 %int_n1 %int_n1
-      %int_4 = OpConstant %int 4
-      %int_7 = OpConstant %int 7
-        %404 = OpConstantComposite %BST %int_7 %int_n1 %int_n1
-      %int_8 = OpConstant %int 8
-        %495 = OpConstantComposite %BST %int_8 %int_n1 %int_n1
-      %int_6 = OpConstant %int 6
-        %586 = OpConstantComposite %BST %int_2 %int_n1 %int_n1
-        %676 = OpConstantComposite %BST %int_6 %int_n1 %int_n1
-     %int_17 = OpConstant %int 17
-        %767 = OpConstantComposite %BST %int_17 %int_n1 %int_n1
-     %int_13 = OpConstant %int 13
-        %858 = OpConstantComposite %BST %int_13 %int_n1 %int_n1
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-        %991 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %992 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %993 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %tree = OpVariable %_ptr_Function__arr_BST_uint_10 Function %26
-       %x_67 = OpVariable %_ptr_Function_bool Function %30
-      %x_114 = OpVariable %_ptr_Function_bool Function %30
-      %x_572 = OpVariable %_ptr_Function_int Function %34
-   %x_67_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_70_phi = OpVariable %_ptr_Function_int Function %34
-  %x_116_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_119_phi = OpVariable %_ptr_Function_int Function %34
-  %x_569_phi = OpVariable %_ptr_Function_int Function %34
-  %x_572_phi = OpVariable %_ptr_Function_int Function %34
-  %x_574_phi = OpVariable %_ptr_Function_int Function %34
-       %x_95 = OpVariable %_ptr_Function_int Function %34
-       %x_87 = OpVariable %_ptr_Function_int Function %34
-       %x_68 = OpVariable %_ptr_Function_bool Function %30
-       %x_71 = OpVariable %_ptr_Function_int Function %34
-   %x_68_phi = OpVariable %_ptr_Function_bool Function %30
-   %x_71_phi = OpVariable %_ptr_Function_int Function %34
-  %x_114_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_133 = OpVariable %_ptr_Function_bool Function %30
-      %x_120 = OpVariable %_ptr_Function_int Function %34
-  %x_134_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_139 = OpVariable %_ptr_Function_bool Function %30
-      %x_186 = OpVariable %_ptr_Function_bool Function %30
-  %x_139_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_142_phi = OpVariable %_ptr_Function_int Function %34
-  %x_188_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_167 = OpVariable %_ptr_Function_int Function %34
-      %x_159 = OpVariable %_ptr_Function_int Function %34
-      %x_140 = OpVariable %_ptr_Function_bool Function %30
-      %x_143 = OpVariable %_ptr_Function_int Function %34
-  %x_140_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_143_phi = OpVariable %_ptr_Function_int Function %34
-  %x_186_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_193 = OpVariable %_ptr_Function_bool Function %30
-      %x_240 = OpVariable %_ptr_Function_bool Function %30
-  %x_193_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_196_phi = OpVariable %_ptr_Function_int Function %34
-  %x_242_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_221 = OpVariable %_ptr_Function_int Function %34
-      %x_213 = OpVariable %_ptr_Function_int Function %34
-      %x_194 = OpVariable %_ptr_Function_bool Function %30
-      %x_197 = OpVariable %_ptr_Function_int Function %34
-  %x_194_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_197_phi = OpVariable %_ptr_Function_int Function %34
-  %x_240_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_247 = OpVariable %_ptr_Function_bool Function %30
-      %x_294 = OpVariable %_ptr_Function_bool Function %30
-  %x_247_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_250_phi = OpVariable %_ptr_Function_int Function %34
-  %x_296_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_275 = OpVariable %_ptr_Function_int Function %34
-      %x_267 = OpVariable %_ptr_Function_int Function %34
-      %x_248 = OpVariable %_ptr_Function_bool Function %30
-      %x_251 = OpVariable %_ptr_Function_int Function %34
-  %x_248_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_251_phi = OpVariable %_ptr_Function_int Function %34
-  %x_294_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_301 = OpVariable %_ptr_Function_bool Function %30
-      %x_348 = OpVariable %_ptr_Function_bool Function %30
-  %x_301_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_304_phi = OpVariable %_ptr_Function_int Function %34
-  %x_350_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_329 = OpVariable %_ptr_Function_int Function %34
-      %x_321 = OpVariable %_ptr_Function_int Function %34
-      %x_302 = OpVariable %_ptr_Function_bool Function %30
-      %x_305 = OpVariable %_ptr_Function_int Function %34
-  %x_302_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_305_phi = OpVariable %_ptr_Function_int Function %34
-  %x_348_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_355 = OpVariable %_ptr_Function_bool Function %30
-      %x_402 = OpVariable %_ptr_Function_bool Function %30
-  %x_355_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_358_phi = OpVariable %_ptr_Function_int Function %34
-  %x_404_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_383 = OpVariable %_ptr_Function_int Function %34
-      %x_375 = OpVariable %_ptr_Function_int Function %34
-      %x_356 = OpVariable %_ptr_Function_bool Function %30
-      %x_359 = OpVariable %_ptr_Function_int Function %34
-  %x_356_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_359_phi = OpVariable %_ptr_Function_int Function %34
-  %x_402_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_409 = OpVariable %_ptr_Function_bool Function %30
-      %x_456 = OpVariable %_ptr_Function_bool Function %30
-  %x_409_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_412_phi = OpVariable %_ptr_Function_int Function %34
-  %x_458_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_437 = OpVariable %_ptr_Function_int Function %34
-      %x_429 = OpVariable %_ptr_Function_int Function %34
-      %x_410 = OpVariable %_ptr_Function_bool Function %30
-      %x_413 = OpVariable %_ptr_Function_int Function %34
-  %x_410_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_413_phi = OpVariable %_ptr_Function_int Function %34
-  %x_456_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_463 = OpVariable %_ptr_Function_bool Function %30
-      %x_510 = OpVariable %_ptr_Function_bool Function %30
-  %x_463_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_466_phi = OpVariable %_ptr_Function_int Function %34
-  %x_512_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_491 = OpVariable %_ptr_Function_int Function %34
-      %x_483 = OpVariable %_ptr_Function_int Function %34
-      %x_464 = OpVariable %_ptr_Function_bool Function %30
-      %x_467 = OpVariable %_ptr_Function_int Function %34
-  %x_464_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_467_phi = OpVariable %_ptr_Function_int Function %34
-  %x_510_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_517 = OpVariable %_ptr_Function_bool Function %30
-      %x_564 = OpVariable %_ptr_Function_bool Function %30
-  %x_517_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_520_phi = OpVariable %_ptr_Function_int Function %34
-  %x_566_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_545 = OpVariable %_ptr_Function_int Function %34
-      %x_537 = OpVariable %_ptr_Function_int Function %34
-      %x_518 = OpVariable %_ptr_Function_bool Function %30
-      %x_521 = OpVariable %_ptr_Function_int Function %34
-  %x_518_phi = OpVariable %_ptr_Function_bool Function %30
-  %x_521_phi = OpVariable %_ptr_Function_int Function %34
-  %x_564_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_597 = OpVariable %_ptr_Function_int Function %34
-      %x_607 = OpVariable %_ptr_Function_int Function %34
-      %x_612 = OpVariable %_ptr_Function_int Function %34
-      %x_575 = OpVariable %_ptr_Function_int Function %34
-  %x_570_phi = OpVariable %_ptr_Function_int Function %34
-  %x_573_phi = OpVariable %_ptr_Function_int Function %34
-  %x_582_phi = OpVariable %_ptr_Function_int Function %34
-  %x_597_phi = OpVariable %_ptr_Function_int Function %34
-  %x_598_phi = OpVariable %_ptr_Function_bool Function %30
-      %x_570 = OpVariable %_ptr_Function_int Function %34
-      %x_606 = OpVariable %_ptr_Function_int Function %34
-      %x_611 = OpVariable %_ptr_Function_int Function %34
-  %x_607_phi = OpVariable %_ptr_Function_int Function %34
-  %x_612_phi = OpVariable %_ptr_Function_int Function %34
-         %44 = OpAccessChain %_ptr_Function_BST %tree %int_0
-               OpStore %44 %47
-               OpSelectionMerge %48 None
-               OpSwitch %uint_0 %50
-         %50 = OpLabel
-               OpStore %x_67_phi %false
-               OpStore %x_70_phi %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %62 = OpLoad %bool %x_67_phi
-               OpStore %x_67 %62
-         %63 = OpLoad %int %x_70_phi
-         %64 = OpLoad %bool %x_67
-               OpStore %x_116_phi %64
-         %66 = OpSLessThanEqual %bool %63 %int_1
-               OpSelectionMerge %67 None
-               OpBranchConditional %66 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %53
-         %67 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_int %tree %63 %uint_0
-         %71 = OpLoad %int %70
-         %73 = OpSLessThanEqual %bool %int_5 %71
-               OpSelectionMerge %74 None
-               OpBranchConditional %73 %75 %76
-         %75 = OpLabel
-         %79 = OpAccessChain %_ptr_Function_int %tree %63 %uint_1
-         %80 = OpLoad %int %79
-         %81 = OpIEqual %bool %80 %int_n1
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %84
-         %83 = OpLabel
-         %86 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %87 = OpLoad %float %86
-         %88 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %89 = OpLoad %float %88
-         %90 = OpFOrdLessThan %bool %87 %89
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %91
-         %92 = OpLabel
-               OpBranch %93
-         %93 = OpLabel
-               OpLoopMerge %94 %95 None
-               OpBranch %96
-         %96 = OpLabel
-               OpKill
-         %95 = OpLabel
-               OpBranch %93
-         %94 = OpLabel
-               OpReturn
-         %91 = OpLabel
-         %97 = OpAccessChain %_ptr_Function_int %tree %63 %uint_1
-               OpStore %97 %int_1
-         %98 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %98 %99
-               OpBranch %100
-        %100 = OpLabel
-               OpLoopMerge %101 %102 None
-               OpBranch %103
-        %103 = OpLabel
-        %104 = OpLoad %bool %x_67
-               OpStore %x_114_phi %104
-        %105 = OpConvertFToS %int %87
-        %106 = OpSLessThan %bool %int_0 %105
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %109
-        %108 = OpLabel
-               OpBranch %107
-        %109 = OpLabel
-               OpBranch %101
-        %107 = OpLabel
-               OpStore %x_114_phi %true
-               OpBranch %101
-        %102 = OpLabel
-               OpBranch %100
-        %101 = OpLabel
-        %111 = OpLoad %bool %x_114_phi
-               OpStore %x_114 %111
-        %112 = OpLoad %bool %x_114
-               OpStore %x_116_phi %112
-        %113 = OpLoad %bool %x_114
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %114
-        %115 = OpLabel
-               OpBranch %53
-        %114 = OpLabel
-               OpBranch %82
-         %84 = OpLabel
-        %116 = OpAccessChain %_ptr_Function_int %tree %63 %uint_1
-        %117 = OpLoad %int %116
-               OpStore %x_95 %117
-        %118 = OpLoad %bool %x_67
-               OpStore %x_68_phi %118
-        %119 = OpLoad %int %x_95
-               OpStore %x_71_phi %119
-               OpBranch %54
-         %82 = OpLabel
-               OpBranch %74
-         %76 = OpLabel
-        %121 = OpAccessChain %_ptr_Function_int %tree %63 %uint_2
-        %122 = OpLoad %int %121
-        %123 = OpIEqual %bool %122 %int_n1
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %126
-        %125 = OpLabel
-        %127 = OpAccessChain %_ptr_Function_int %tree %63 %uint_2
-               OpStore %127 %int_1
-        %128 = OpAccessChain %_ptr_Function_BST %tree %int_1
-               OpStore %128 %99
-               OpStore %x_116_phi %true
-               OpBranch %53
-        %126 = OpLabel
-        %129 = OpAccessChain %_ptr_Function_int %tree %63 %uint_2
-        %130 = OpLoad %int %129
-               OpStore %x_87 %130
-        %131 = OpLoad %bool %x_67
-               OpStore %x_68_phi %131
-        %132 = OpLoad %int %x_87
-               OpStore %x_71_phi %132
-               OpBranch %54
-        %124 = OpLabel
-               OpReturn
-         %74 = OpLabel
-        %133 = OpLoad %bool %x_114
-               OpStore %x_68_phi %133
-               OpStore %x_71_phi %63
-               OpBranch %54
-         %54 = OpLabel
-        %134 = OpLoad %bool %x_68_phi
-               OpStore %x_68 %134
-        %135 = OpLoad %int %x_71_phi
-               OpStore %x_71 %135
-        %136 = OpLoad %bool %x_68
-               OpStore %x_67_phi %136
-        %137 = OpLoad %int %x_71
-               OpStore %x_70_phi %137
-               OpBranch %52
-         %53 = OpLabel
-        %138 = OpLoad %bool %x_116_phi
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-               OpBranch %48
-        %139 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-               OpStore %x_119_phi %int_0
-               OpBranch %141
-        %141 = OpLabel
-               OpLoopMerge %142 %143 None
-               OpBranch %144
-        %144 = OpLabel
-        %148 = OpLoad %int %x_119_phi
-        %150 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %151 = OpLoad %float %150
-        %153 = OpFOrdLessThan %bool %151 %float_0
-               OpStore %x_134_phi %153
-        %154 = OpLogicalNot %bool %153
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %155
-        %156 = OpLabel
-        %157 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %158 = OpLoad %float %157
-        %159 = OpConvertFToS %int %158
-        %160 = OpINotEqual %bool %148 %159
-               OpStore %x_133 %160
-        %161 = OpLoad %bool %x_133
-               OpStore %x_134_phi %161
-               OpBranch %155
-        %155 = OpLabel
-        %162 = OpLoad %bool %x_134_phi
-               OpSelectionMerge %163 None
-               OpBranchConditional %162 %164 %165
-        %164 = OpLabel
-               OpBranch %163
-        %165 = OpLabel
-               OpBranch %142
-        %163 = OpLabel
-               OpSelectionMerge %171 None
-               OpSwitch %uint_0 %172
-        %172 = OpLabel
-               OpStore %x_139_phi %false
-               OpStore %x_142_phi %int_0
-               OpBranch %173
-        %173 = OpLabel
-               OpLoopMerge %174 %175 None
-               OpBranch %176
-        %176 = OpLabel
-        %183 = OpLoad %bool %x_139_phi
-               OpStore %x_139 %183
-        %184 = OpLoad %int %x_142_phi
-        %185 = OpLoad %bool %x_139
-               OpStore %x_188_phi %185
-        %187 = OpSLessThanEqual %bool %184 %int_2
-               OpSelectionMerge %188 None
-               OpBranchConditional %187 %189 %190
-        %189 = OpLabel
-               OpBranch %188
-        %190 = OpLabel
-               OpBranch %174
-        %188 = OpLabel
-        %191 = OpAccessChain %_ptr_Function_int %tree %184 %uint_0
-        %192 = OpLoad %int %191
-        %194 = OpSLessThanEqual %bool %int_12 %192
-               OpSelectionMerge %195 None
-               OpBranchConditional %194 %196 %197
-        %196 = OpLabel
-        %199 = OpAccessChain %_ptr_Function_int %tree %184 %uint_1
-        %200 = OpLoad %int %199
-        %201 = OpIEqual %bool %200 %int_n1
-               OpSelectionMerge %202 None
-               OpBranchConditional %201 %203 %204
-        %203 = OpLabel
-        %205 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %206 = OpLoad %float %205
-        %207 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %208 = OpLoad %float %207
-        %209 = OpFOrdLessThan %bool %206 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %210
-        %211 = OpLabel
-               OpBranch %212
-        %212 = OpLabel
-               OpLoopMerge %213 %214 None
-               OpBranch %215
-        %215 = OpLabel
-               OpKill
-        %214 = OpLabel
-               OpBranch %212
-        %213 = OpLabel
-               OpReturn
-        %210 = OpLabel
-        %216 = OpAccessChain %_ptr_Function_int %tree %184 %uint_1
-               OpStore %216 %int_2
-        %217 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %217 %218
-               OpBranch %219
-        %219 = OpLabel
-               OpLoopMerge %220 %221 None
-               OpBranch %222
-        %222 = OpLabel
-        %223 = OpLoad %bool %x_139
-               OpStore %x_186_phi %223
-        %224 = OpConvertFToS %int %206
-        %225 = OpSLessThan %bool %int_0 %224
-               OpSelectionMerge %226 None
-               OpBranchConditional %225 %227 %228
-        %227 = OpLabel
-               OpBranch %226
-        %228 = OpLabel
-               OpBranch %220
-        %226 = OpLabel
-               OpStore %x_186_phi %true
-               OpBranch %220
-        %221 = OpLabel
-               OpBranch %219
-        %220 = OpLabel
-        %229 = OpLoad %bool %x_186_phi
-               OpStore %x_186 %229
-        %230 = OpLoad %bool %x_186
-               OpStore %x_188_phi %230
-        %231 = OpLoad %bool %x_186
-               OpSelectionMerge %232 None
-               OpBranchConditional %231 %233 %232
-        %233 = OpLabel
-               OpBranch %174
-        %232 = OpLabel
-               OpBranch %202
-        %204 = OpLabel
-        %234 = OpAccessChain %_ptr_Function_int %tree %184 %uint_1
-        %235 = OpLoad %int %234
-               OpStore %x_167 %235
-        %236 = OpLoad %bool %x_139
-               OpStore %x_140_phi %236
-        %237 = OpLoad %int %x_167
-               OpStore %x_143_phi %237
-               OpBranch %175
-        %202 = OpLabel
-               OpBranch %195
-        %197 = OpLabel
-        %238 = OpAccessChain %_ptr_Function_int %tree %184 %uint_2
-        %239 = OpLoad %int %238
-        %240 = OpIEqual %bool %239 %int_n1
-               OpSelectionMerge %241 None
-               OpBranchConditional %240 %242 %243
-        %242 = OpLabel
-        %244 = OpAccessChain %_ptr_Function_int %tree %184 %uint_2
-               OpStore %244 %int_2
-        %245 = OpAccessChain %_ptr_Function_BST %tree %int_2
-               OpStore %245 %218
-               OpStore %x_188_phi %true
-               OpBranch %174
-        %243 = OpLabel
-        %246 = OpAccessChain %_ptr_Function_int %tree %184 %uint_2
-        %247 = OpLoad %int %246
-               OpStore %x_159 %247
-        %248 = OpLoad %bool %x_139
-               OpStore %x_140_phi %248
-        %249 = OpLoad %int %x_159
-               OpStore %x_143_phi %249
-               OpBranch %175
-        %241 = OpLabel
-               OpReturn
-        %195 = OpLabel
-        %250 = OpLoad %bool %x_186
-               OpStore %x_140_phi %250
-               OpStore %x_143_phi %184
-               OpBranch %175
-        %175 = OpLabel
-        %251 = OpLoad %bool %x_140_phi
-               OpStore %x_140 %251
-        %252 = OpLoad %int %x_143_phi
-               OpStore %x_143 %252
-        %253 = OpLoad %bool %x_140
-               OpStore %x_139_phi %253
-        %254 = OpLoad %int %x_143
-               OpStore %x_142_phi %254
-               OpBranch %173
-        %174 = OpLabel
-        %255 = OpLoad %bool %x_188_phi
-               OpSelectionMerge %256 None
-               OpBranchConditional %255 %257 %256
-        %257 = OpLabel
-               OpBranch %171
-        %256 = OpLabel
-               OpBranch %171
-        %171 = OpLabel
-               OpBranch %143
-        %143 = OpLabel
-        %258 = OpIAdd %int %148 %int_1
-               OpStore %x_120 %258
-        %259 = OpLoad %int %x_120
-               OpStore %x_119_phi %259
-               OpBranch %141
-        %142 = OpLabel
-               OpSelectionMerge %265 None
-               OpSwitch %uint_0 %266
-        %266 = OpLabel
-               OpStore %x_193_phi %false
-               OpStore %x_196_phi %int_0
-               OpBranch %267
-        %267 = OpLabel
-               OpLoopMerge %268 %269 None
-               OpBranch %270
-        %270 = OpLabel
-        %277 = OpLoad %bool %x_193_phi
-               OpStore %x_193 %277
-        %278 = OpLoad %int %x_196_phi
-        %279 = OpLoad %bool %x_193
-               OpStore %x_242_phi %279
-        %281 = OpSLessThanEqual %bool %278 %int_3
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %284
-        %283 = OpLabel
-               OpBranch %282
-        %284 = OpLabel
-               OpBranch %268
-        %282 = OpLabel
-        %285 = OpAccessChain %_ptr_Function_int %tree %278 %uint_0
-        %286 = OpLoad %int %285
-        %288 = OpSLessThanEqual %bool %int_15 %286
-               OpSelectionMerge %289 None
-               OpBranchConditional %288 %290 %291
-        %290 = OpLabel
-        %293 = OpAccessChain %_ptr_Function_int %tree %278 %uint_1
-        %294 = OpLoad %int %293
-        %295 = OpIEqual %bool %294 %int_n1
-               OpSelectionMerge %296 None
-               OpBranchConditional %295 %297 %298
-        %297 = OpLabel
-        %299 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %300 = OpLoad %float %299
-        %301 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %302 = OpLoad %float %301
-        %303 = OpFOrdLessThan %bool %300 %302
-               OpSelectionMerge %304 None
-               OpBranchConditional %303 %305 %304
-        %305 = OpLabel
-               OpBranch %306
-        %306 = OpLabel
-               OpLoopMerge %307 %308 None
-               OpBranch %309
-        %309 = OpLabel
-               OpKill
-        %308 = OpLabel
-               OpBranch %306
-        %307 = OpLabel
-               OpReturn
-        %304 = OpLabel
-        %310 = OpAccessChain %_ptr_Function_int %tree %278 %uint_1
-               OpStore %310 %int_3
-        %311 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %311 %312
-               OpBranch %313
-        %313 = OpLabel
-               OpLoopMerge %314 %315 None
-               OpBranch %316
-        %316 = OpLabel
-        %317 = OpLoad %bool %x_193
-               OpStore %x_240_phi %317
-        %318 = OpConvertFToS %int %300
-        %319 = OpSLessThan %bool %int_0 %318
-               OpSelectionMerge %320 None
-               OpBranchConditional %319 %321 %322
-        %321 = OpLabel
-               OpBranch %320
-        %322 = OpLabel
-               OpBranch %314
-        %320 = OpLabel
-               OpStore %x_240_phi %true
-               OpBranch %314
-        %315 = OpLabel
-               OpBranch %313
-        %314 = OpLabel
-        %323 = OpLoad %bool %x_240_phi
-               OpStore %x_240 %323
-        %324 = OpLoad %bool %x_240
-               OpStore %x_242_phi %324
-        %325 = OpLoad %bool %x_240
-               OpSelectionMerge %326 None
-               OpBranchConditional %325 %327 %326
-        %327 = OpLabel
-               OpBranch %268
-        %326 = OpLabel
-               OpBranch %296
-        %298 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_int %tree %278 %uint_1
-        %329 = OpLoad %int %328
-               OpStore %x_221 %329
-        %330 = OpLoad %bool %x_193
-               OpStore %x_194_phi %330
-        %331 = OpLoad %int %x_221
-               OpStore %x_197_phi %331
-               OpBranch %269
-        %296 = OpLabel
-               OpBranch %289
-        %291 = OpLabel
-        %332 = OpAccessChain %_ptr_Function_int %tree %278 %uint_2
-        %333 = OpLoad %int %332
-        %334 = OpIEqual %bool %333 %int_n1
-               OpSelectionMerge %335 None
-               OpBranchConditional %334 %336 %337
-        %336 = OpLabel
-        %338 = OpAccessChain %_ptr_Function_int %tree %278 %uint_2
-               OpStore %338 %int_3
-        %339 = OpAccessChain %_ptr_Function_BST %tree %int_3
-               OpStore %339 %312
-               OpStore %x_242_phi %true
-               OpBranch %268
-        %337 = OpLabel
-        %340 = OpAccessChain %_ptr_Function_int %tree %278 %uint_2
-        %341 = OpLoad %int %340
-               OpStore %x_213 %341
-        %342 = OpLoad %bool %x_193
-               OpStore %x_194_phi %342
-        %343 = OpLoad %int %x_213
-               OpStore %x_197_phi %343
-               OpBranch %269
-        %335 = OpLabel
-               OpReturn
-        %289 = OpLabel
-        %344 = OpLoad %bool %x_240
-               OpStore %x_194_phi %344
-               OpStore %x_197_phi %278
-               OpBranch %269
-        %269 = OpLabel
-        %345 = OpLoad %bool %x_194_phi
-               OpStore %x_194 %345
-        %346 = OpLoad %int %x_197_phi
-               OpStore %x_197 %346
-        %347 = OpLoad %bool %x_194
-               OpStore %x_193_phi %347
-        %348 = OpLoad %int %x_197
-               OpStore %x_196_phi %348
-               OpBranch %267
-        %268 = OpLabel
-        %349 = OpLoad %bool %x_242_phi
-               OpSelectionMerge %350 None
-               OpBranchConditional %349 %351 %350
-        %351 = OpLabel
-               OpBranch %265
-        %350 = OpLabel
-               OpBranch %265
-        %265 = OpLabel
-               OpSelectionMerge %357 None
-               OpSwitch %uint_0 %358
-        %358 = OpLabel
-               OpStore %x_247_phi %false
-               OpStore %x_250_phi %int_0
-               OpBranch %359
-        %359 = OpLabel
-               OpLoopMerge %360 %361 None
-               OpBranch %362
-        %362 = OpLabel
-        %369 = OpLoad %bool %x_247_phi
-               OpStore %x_247 %369
-        %370 = OpLoad %int %x_250_phi
-        %371 = OpLoad %bool %x_247
-               OpStore %x_296_phi %371
-        %373 = OpSLessThanEqual %bool %370 %int_4
-               OpSelectionMerge %374 None
-               OpBranchConditional %373 %375 %376
-        %375 = OpLabel
-               OpBranch %374
-        %376 = OpLabel
-               OpBranch %360
-        %374 = OpLabel
-        %377 = OpAccessChain %_ptr_Function_int %tree %370 %uint_0
-        %378 = OpLoad %int %377
-        %380 = OpSLessThanEqual %bool %int_7 %378
-               OpSelectionMerge %381 None
-               OpBranchConditional %380 %382 %383
-        %382 = OpLabel
-        %385 = OpAccessChain %_ptr_Function_int %tree %370 %uint_1
-        %386 = OpLoad %int %385
-        %387 = OpIEqual %bool %386 %int_n1
-               OpSelectionMerge %388 None
-               OpBranchConditional %387 %389 %390
-        %389 = OpLabel
-        %391 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %392 = OpLoad %float %391
-        %393 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %394 = OpLoad %float %393
-        %395 = OpFOrdLessThan %bool %392 %394
-               OpSelectionMerge %396 None
-               OpBranchConditional %395 %397 %396
-        %397 = OpLabel
-               OpBranch %398
-        %398 = OpLabel
-               OpLoopMerge %399 %400 None
-               OpBranch %401
-        %401 = OpLabel
-               OpKill
-        %400 = OpLabel
-               OpBranch %398
-        %399 = OpLabel
-               OpReturn
-        %396 = OpLabel
-        %402 = OpAccessChain %_ptr_Function_int %tree %370 %uint_1
-               OpStore %402 %int_4
-        %403 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %403 %404
-               OpBranch %405
-        %405 = OpLabel
-               OpLoopMerge %406 %407 None
-               OpBranch %408
-        %408 = OpLabel
-        %409 = OpLoad %bool %x_247
-               OpStore %x_294_phi %409
-        %410 = OpConvertFToS %int %392
-        %411 = OpSLessThan %bool %int_0 %410
-               OpSelectionMerge %412 None
-               OpBranchConditional %411 %413 %414
-        %413 = OpLabel
-               OpBranch %412
-        %414 = OpLabel
-               OpBranch %406
-        %412 = OpLabel
-               OpStore %x_294_phi %true
-               OpBranch %406
-        %407 = OpLabel
-               OpBranch %405
-        %406 = OpLabel
-        %415 = OpLoad %bool %x_294_phi
-               OpStore %x_294 %415
-        %416 = OpLoad %bool %x_294
-               OpStore %x_296_phi %416
-        %417 = OpLoad %bool %x_294
-               OpSelectionMerge %418 None
-               OpBranchConditional %417 %419 %418
-        %419 = OpLabel
-               OpBranch %360
-        %418 = OpLabel
-               OpBranch %388
-        %390 = OpLabel
-        %420 = OpAccessChain %_ptr_Function_int %tree %370 %uint_1
-        %421 = OpLoad %int %420
-               OpStore %x_275 %421
-        %422 = OpLoad %bool %x_247
-               OpStore %x_248_phi %422
-        %423 = OpLoad %int %x_275
-               OpStore %x_251_phi %423
-               OpBranch %361
-        %388 = OpLabel
-               OpBranch %381
-        %383 = OpLabel
-        %424 = OpAccessChain %_ptr_Function_int %tree %370 %uint_2
-        %425 = OpLoad %int %424
-        %426 = OpIEqual %bool %425 %int_n1
-               OpSelectionMerge %427 None
-               OpBranchConditional %426 %428 %429
-        %428 = OpLabel
-        %430 = OpAccessChain %_ptr_Function_int %tree %370 %uint_2
-               OpStore %430 %int_4
-        %431 = OpAccessChain %_ptr_Function_BST %tree %int_4
-               OpStore %431 %404
-               OpStore %x_296_phi %true
-               OpBranch %360
-        %429 = OpLabel
-        %432 = OpAccessChain %_ptr_Function_int %tree %370 %uint_2
-        %433 = OpLoad %int %432
-               OpStore %x_267 %433
-        %434 = OpLoad %bool %x_247
-               OpStore %x_248_phi %434
-        %435 = OpLoad %int %x_267
-               OpStore %x_251_phi %435
-               OpBranch %361
-        %427 = OpLabel
-               OpReturn
-        %381 = OpLabel
-        %436 = OpLoad %bool %x_294
-               OpStore %x_248_phi %436
-               OpStore %x_251_phi %370
-               OpBranch %361
-        %361 = OpLabel
-        %437 = OpLoad %bool %x_248_phi
-               OpStore %x_248 %437
-        %438 = OpLoad %int %x_251_phi
-               OpStore %x_251 %438
-        %439 = OpLoad %bool %x_248
-               OpStore %x_247_phi %439
-        %440 = OpLoad %int %x_251
-               OpStore %x_250_phi %440
-               OpBranch %359
-        %360 = OpLabel
-        %441 = OpLoad %bool %x_296_phi
-               OpSelectionMerge %442 None
-               OpBranchConditional %441 %443 %442
-        %443 = OpLabel
-               OpBranch %357
-        %442 = OpLabel
-               OpBranch %357
-        %357 = OpLabel
-               OpSelectionMerge %449 None
-               OpSwitch %uint_0 %450
-        %450 = OpLabel
-               OpStore %x_301_phi %false
-               OpStore %x_304_phi %int_0
-               OpBranch %451
-        %451 = OpLabel
-               OpLoopMerge %452 %453 None
-               OpBranch %454
-        %454 = OpLabel
-        %461 = OpLoad %bool %x_301_phi
-               OpStore %x_301 %461
-        %462 = OpLoad %int %x_304_phi
-        %463 = OpLoad %bool %x_301
-               OpStore %x_350_phi %463
-        %464 = OpSLessThanEqual %bool %462 %int_5
-               OpSelectionMerge %465 None
-               OpBranchConditional %464 %466 %467
-        %466 = OpLabel
-               OpBranch %465
-        %467 = OpLabel
-               OpBranch %452
-        %465 = OpLabel
-        %468 = OpAccessChain %_ptr_Function_int %tree %462 %uint_0
-        %469 = OpLoad %int %468
-        %471 = OpSLessThanEqual %bool %int_8 %469
-               OpSelectionMerge %472 None
-               OpBranchConditional %471 %473 %474
-        %473 = OpLabel
-        %476 = OpAccessChain %_ptr_Function_int %tree %462 %uint_1
-        %477 = OpLoad %int %476
-        %478 = OpIEqual %bool %477 %int_n1
-               OpSelectionMerge %479 None
-               OpBranchConditional %478 %480 %481
-        %480 = OpLabel
-        %482 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %483 = OpLoad %float %482
-        %484 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %485 = OpLoad %float %484
-        %486 = OpFOrdLessThan %bool %483 %485
-               OpSelectionMerge %487 None
-               OpBranchConditional %486 %488 %487
-        %488 = OpLabel
-               OpBranch %489
-        %489 = OpLabel
-               OpLoopMerge %490 %491 None
-               OpBranch %492
-        %492 = OpLabel
-               OpKill
-        %491 = OpLabel
-               OpBranch %489
-        %490 = OpLabel
-               OpReturn
-        %487 = OpLabel
-        %493 = OpAccessChain %_ptr_Function_int %tree %462 %uint_1
-               OpStore %493 %int_5
-        %494 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %494 %495
-               OpBranch %496
-        %496 = OpLabel
-               OpLoopMerge %497 %498 None
-               OpBranch %499
-        %499 = OpLabel
-        %500 = OpLoad %bool %x_301
-               OpStore %x_348_phi %500
-        %501 = OpConvertFToS %int %483
-        %502 = OpSLessThan %bool %int_0 %501
-               OpSelectionMerge %503 None
-               OpBranchConditional %502 %504 %505
-        %504 = OpLabel
-               OpBranch %503
-        %505 = OpLabel
-               OpBranch %497
-        %503 = OpLabel
-               OpStore %x_348_phi %true
-               OpBranch %497
-        %498 = OpLabel
-               OpBranch %496
-        %497 = OpLabel
-        %506 = OpLoad %bool %x_348_phi
-               OpStore %x_348 %506
-        %507 = OpLoad %bool %x_348
-               OpStore %x_350_phi %507
-        %508 = OpLoad %bool %x_348
-               OpSelectionMerge %509 None
-               OpBranchConditional %508 %510 %509
-        %510 = OpLabel
-               OpBranch %452
-        %509 = OpLabel
-               OpBranch %479
-        %481 = OpLabel
-        %511 = OpAccessChain %_ptr_Function_int %tree %462 %uint_1
-        %512 = OpLoad %int %511
-               OpStore %x_329 %512
-        %513 = OpLoad %bool %x_301
-               OpStore %x_302_phi %513
-        %514 = OpLoad %int %x_329
-               OpStore %x_305_phi %514
-               OpBranch %453
-        %479 = OpLabel
-               OpBranch %472
-        %474 = OpLabel
-        %515 = OpAccessChain %_ptr_Function_int %tree %462 %uint_2
-        %516 = OpLoad %int %515
-        %517 = OpIEqual %bool %516 %int_n1
-               OpSelectionMerge %518 None
-               OpBranchConditional %517 %519 %520
-        %519 = OpLabel
-        %521 = OpAccessChain %_ptr_Function_int %tree %462 %uint_2
-               OpStore %521 %int_5
-        %522 = OpAccessChain %_ptr_Function_BST %tree %int_5
-               OpStore %522 %495
-               OpStore %x_350_phi %true
-               OpBranch %452
-        %520 = OpLabel
-        %523 = OpAccessChain %_ptr_Function_int %tree %462 %uint_2
-        %524 = OpLoad %int %523
-               OpStore %x_321 %524
-        %525 = OpLoad %bool %x_301
-               OpStore %x_302_phi %525
-        %526 = OpLoad %int %x_321
-               OpStore %x_305_phi %526
-               OpBranch %453
-        %518 = OpLabel
-               OpReturn
-        %472 = OpLabel
-        %527 = OpLoad %bool %x_348
-               OpStore %x_302_phi %527
-               OpStore %x_305_phi %462
-               OpBranch %453
-        %453 = OpLabel
-        %528 = OpLoad %bool %x_302_phi
-               OpStore %x_302 %528
-        %529 = OpLoad %int %x_305_phi
-               OpStore %x_305 %529
-        %530 = OpLoad %bool %x_302
-               OpStore %x_301_phi %530
-        %531 = OpLoad %int %x_305
-               OpStore %x_304_phi %531
-               OpBranch %451
-        %452 = OpLabel
-        %532 = OpLoad %bool %x_350_phi
-               OpSelectionMerge %533 None
-               OpBranchConditional %532 %534 %533
-        %534 = OpLabel
-               OpBranch %449
-        %533 = OpLabel
-               OpBranch %449
-        %449 = OpLabel
-               OpSelectionMerge %540 None
-               OpSwitch %uint_0 %541
-        %541 = OpLabel
-               OpStore %x_355_phi %false
-               OpStore %x_358_phi %int_0
-               OpBranch %542
-        %542 = OpLabel
-               OpLoopMerge %543 %544 None
-               OpBranch %545
-        %545 = OpLabel
-        %552 = OpLoad %bool %x_355_phi
-               OpStore %x_355 %552
-        %553 = OpLoad %int %x_358_phi
-        %554 = OpLoad %bool %x_355
-               OpStore %x_404_phi %554
-        %556 = OpSLessThanEqual %bool %553 %int_6
-               OpSelectionMerge %557 None
-               OpBranchConditional %556 %558 %559
-        %558 = OpLabel
-               OpBranch %557
-        %559 = OpLabel
-               OpBranch %543
-        %557 = OpLabel
-        %560 = OpAccessChain %_ptr_Function_int %tree %553 %uint_0
-        %561 = OpLoad %int %560
-        %562 = OpSLessThanEqual %bool %int_2 %561
-               OpSelectionMerge %563 None
-               OpBranchConditional %562 %564 %565
-        %564 = OpLabel
-        %567 = OpAccessChain %_ptr_Function_int %tree %553 %uint_1
-        %568 = OpLoad %int %567
-        %569 = OpIEqual %bool %568 %int_n1
-               OpSelectionMerge %570 None
-               OpBranchConditional %569 %571 %572
-        %571 = OpLabel
-        %573 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %574 = OpLoad %float %573
-        %575 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %576 = OpLoad %float %575
-        %577 = OpFOrdLessThan %bool %574 %576
-               OpSelectionMerge %578 None
-               OpBranchConditional %577 %579 %578
-        %579 = OpLabel
-               OpBranch %580
-        %580 = OpLabel
-               OpLoopMerge %581 %582 None
-               OpBranch %583
-        %583 = OpLabel
-               OpKill
-        %582 = OpLabel
-               OpBranch %580
-        %581 = OpLabel
-               OpReturn
-        %578 = OpLabel
-        %584 = OpAccessChain %_ptr_Function_int %tree %553 %uint_1
-               OpStore %584 %int_6
-        %585 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %585 %586
-               OpBranch %587
-        %587 = OpLabel
-               OpLoopMerge %588 %589 None
-               OpBranch %590
-        %590 = OpLabel
-        %591 = OpLoad %bool %x_355
-               OpStore %x_402_phi %591
-        %592 = OpConvertFToS %int %574
-        %593 = OpSLessThan %bool %int_0 %592
-               OpSelectionMerge %594 None
-               OpBranchConditional %593 %595 %596
-        %595 = OpLabel
-               OpBranch %594
-        %596 = OpLabel
-               OpBranch %588
-        %594 = OpLabel
-               OpStore %x_402_phi %true
-               OpBranch %588
-        %589 = OpLabel
-               OpBranch %587
-        %588 = OpLabel
-        %597 = OpLoad %bool %x_402_phi
-               OpStore %x_402 %597
-        %598 = OpLoad %bool %x_402
-               OpStore %x_404_phi %598
-        %599 = OpLoad %bool %x_402
-               OpSelectionMerge %600 None
-               OpBranchConditional %599 %601 %600
-        %601 = OpLabel
-               OpBranch %543
-        %600 = OpLabel
-               OpBranch %570
-        %572 = OpLabel
-        %602 = OpAccessChain %_ptr_Function_int %tree %553 %uint_1
-        %603 = OpLoad %int %602
-               OpStore %x_383 %603
-        %604 = OpLoad %bool %x_355
-               OpStore %x_356_phi %604
-        %605 = OpLoad %int %x_383
-               OpStore %x_359_phi %605
-               OpBranch %544
-        %570 = OpLabel
-               OpBranch %563
-        %565 = OpLabel
-        %606 = OpAccessChain %_ptr_Function_int %tree %553 %uint_2
-        %607 = OpLoad %int %606
-        %608 = OpIEqual %bool %607 %int_n1
-               OpSelectionMerge %609 None
-               OpBranchConditional %608 %610 %611
-        %610 = OpLabel
-        %612 = OpAccessChain %_ptr_Function_int %tree %553 %uint_2
-               OpStore %612 %int_6
-        %613 = OpAccessChain %_ptr_Function_BST %tree %int_6
-               OpStore %613 %586
-               OpStore %x_404_phi %true
-               OpBranch %543
-        %611 = OpLabel
-        %614 = OpAccessChain %_ptr_Function_int %tree %553 %uint_2
-        %615 = OpLoad %int %614
-               OpStore %x_375 %615
-        %616 = OpLoad %bool %x_355
-               OpStore %x_356_phi %616
-        %617 = OpLoad %int %x_375
-               OpStore %x_359_phi %617
-               OpBranch %544
-        %609 = OpLabel
-               OpReturn
-        %563 = OpLabel
-        %618 = OpLoad %bool %x_402
-               OpStore %x_356_phi %618
-               OpStore %x_359_phi %553
-               OpBranch %544
-        %544 = OpLabel
-        %619 = OpLoad %bool %x_356_phi
-               OpStore %x_356 %619
-        %620 = OpLoad %int %x_359_phi
-               OpStore %x_359 %620
-        %621 = OpLoad %bool %x_356
-               OpStore %x_355_phi %621
-        %622 = OpLoad %int %x_359
-               OpStore %x_358_phi %622
-               OpBranch %542
-        %543 = OpLabel
-        %623 = OpLoad %bool %x_404_phi
-               OpSelectionMerge %624 None
-               OpBranchConditional %623 %625 %624
-        %625 = OpLabel
-               OpBranch %540
-        %624 = OpLabel
-               OpBranch %540
-        %540 = OpLabel
-               OpSelectionMerge %631 None
-               OpSwitch %uint_0 %632
-        %632 = OpLabel
-               OpStore %x_409_phi %false
-               OpStore %x_412_phi %int_0
-               OpBranch %633
-        %633 = OpLabel
-               OpLoopMerge %634 %635 None
-               OpBranch %636
-        %636 = OpLabel
-        %643 = OpLoad %bool %x_409_phi
-               OpStore %x_409 %643
-        %644 = OpLoad %int %x_412_phi
-        %645 = OpLoad %bool %x_409
-               OpStore %x_458_phi %645
-        %646 = OpSLessThanEqual %bool %644 %int_7
-               OpSelectionMerge %647 None
-               OpBranchConditional %646 %648 %649
-        %648 = OpLabel
-               OpBranch %647
-        %649 = OpLabel
-               OpBranch %634
-        %647 = OpLabel
-        %650 = OpAccessChain %_ptr_Function_int %tree %644 %uint_0
-        %651 = OpLoad %int %650
-        %652 = OpSLessThanEqual %bool %int_6 %651
-               OpSelectionMerge %653 None
-               OpBranchConditional %652 %654 %655
-        %654 = OpLabel
-        %657 = OpAccessChain %_ptr_Function_int %tree %644 %uint_1
-        %658 = OpLoad %int %657
-        %659 = OpIEqual %bool %658 %int_n1
-               OpSelectionMerge %660 None
-               OpBranchConditional %659 %661 %662
-        %661 = OpLabel
-        %663 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %664 = OpLoad %float %663
-        %665 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %666 = OpLoad %float %665
-        %667 = OpFOrdLessThan %bool %664 %666
-               OpSelectionMerge %668 None
-               OpBranchConditional %667 %669 %668
-        %669 = OpLabel
-               OpBranch %670
-        %670 = OpLabel
-               OpLoopMerge %671 %672 None
-               OpBranch %673
-        %673 = OpLabel
-               OpKill
-        %672 = OpLabel
-               OpBranch %670
-        %671 = OpLabel
-               OpReturn
-        %668 = OpLabel
-        %674 = OpAccessChain %_ptr_Function_int %tree %644 %uint_1
-               OpStore %674 %int_7
-        %675 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %675 %676
-               OpBranch %677
-        %677 = OpLabel
-               OpLoopMerge %678 %679 None
-               OpBranch %680
-        %680 = OpLabel
-        %681 = OpLoad %bool %x_409
-               OpStore %x_456_phi %681
-        %682 = OpConvertFToS %int %664
-        %683 = OpSLessThan %bool %int_0 %682
-               OpSelectionMerge %684 None
-               OpBranchConditional %683 %685 %686
-        %685 = OpLabel
-               OpBranch %684
-        %686 = OpLabel
-               OpBranch %678
-        %684 = OpLabel
-               OpStore %x_456_phi %true
-               OpBranch %678
-        %679 = OpLabel
-               OpBranch %677
-        %678 = OpLabel
-        %687 = OpLoad %bool %x_456_phi
-               OpStore %x_456 %687
-        %688 = OpLoad %bool %x_456
-               OpStore %x_458_phi %688
-        %689 = OpLoad %bool %x_456
-               OpSelectionMerge %690 None
-               OpBranchConditional %689 %691 %690
-        %691 = OpLabel
-               OpBranch %634
-        %690 = OpLabel
-               OpBranch %660
-        %662 = OpLabel
-        %692 = OpAccessChain %_ptr_Function_int %tree %644 %uint_1
-        %693 = OpLoad %int %692
-               OpStore %x_437 %693
-        %694 = OpLoad %bool %x_409
-               OpStore %x_410_phi %694
-        %695 = OpLoad %int %x_437
-               OpStore %x_413_phi %695
-               OpBranch %635
-        %660 = OpLabel
-               OpBranch %653
-        %655 = OpLabel
-        %696 = OpAccessChain %_ptr_Function_int %tree %644 %uint_2
-        %697 = OpLoad %int %696
-        %698 = OpIEqual %bool %697 %int_n1
-               OpSelectionMerge %699 None
-               OpBranchConditional %698 %700 %701
-        %700 = OpLabel
-        %702 = OpAccessChain %_ptr_Function_int %tree %644 %uint_2
-               OpStore %702 %int_7
-        %703 = OpAccessChain %_ptr_Function_BST %tree %int_7
-               OpStore %703 %676
-               OpStore %x_458_phi %true
-               OpBranch %634
-        %701 = OpLabel
-        %704 = OpAccessChain %_ptr_Function_int %tree %644 %uint_2
-        %705 = OpLoad %int %704
-               OpStore %x_429 %705
-        %706 = OpLoad %bool %x_409
-               OpStore %x_410_phi %706
-        %707 = OpLoad %int %x_429
-               OpStore %x_413_phi %707
-               OpBranch %635
-        %699 = OpLabel
-               OpReturn
-        %653 = OpLabel
-        %708 = OpLoad %bool %x_456
-               OpStore %x_410_phi %708
-               OpStore %x_413_phi %644
-               OpBranch %635
-        %635 = OpLabel
-        %709 = OpLoad %bool %x_410_phi
-               OpStore %x_410 %709
-        %710 = OpLoad %int %x_413_phi
-               OpStore %x_413 %710
-        %711 = OpLoad %bool %x_410
-               OpStore %x_409_phi %711
-        %712 = OpLoad %int %x_413
-               OpStore %x_412_phi %712
-               OpBranch %633
-        %634 = OpLabel
-        %713 = OpLoad %bool %x_458_phi
-               OpSelectionMerge %714 None
-               OpBranchConditional %713 %715 %714
-        %715 = OpLabel
-               OpBranch %631
-        %714 = OpLabel
-               OpBranch %631
-        %631 = OpLabel
-               OpSelectionMerge %721 None
-               OpSwitch %uint_0 %722
-        %722 = OpLabel
-               OpStore %x_463_phi %false
-               OpStore %x_466_phi %int_0
-               OpBranch %723
-        %723 = OpLabel
-               OpLoopMerge %724 %725 None
-               OpBranch %726
-        %726 = OpLabel
-        %733 = OpLoad %bool %x_463_phi
-               OpStore %x_463 %733
-        %734 = OpLoad %int %x_466_phi
-        %735 = OpLoad %bool %x_463
-               OpStore %x_512_phi %735
-        %736 = OpSLessThanEqual %bool %734 %int_8
-               OpSelectionMerge %737 None
-               OpBranchConditional %736 %738 %739
-        %738 = OpLabel
-               OpBranch %737
-        %739 = OpLabel
-               OpBranch %724
-        %737 = OpLabel
-        %740 = OpAccessChain %_ptr_Function_int %tree %734 %uint_0
-        %741 = OpLoad %int %740
-        %743 = OpSLessThanEqual %bool %int_17 %741
-               OpSelectionMerge %744 None
-               OpBranchConditional %743 %745 %746
-        %745 = OpLabel
-        %748 = OpAccessChain %_ptr_Function_int %tree %734 %uint_1
-        %749 = OpLoad %int %748
-        %750 = OpIEqual %bool %749 %int_n1
-               OpSelectionMerge %751 None
-               OpBranchConditional %750 %752 %753
-        %752 = OpLabel
-        %754 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %755 = OpLoad %float %754
-        %756 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %757 = OpLoad %float %756
-        %758 = OpFOrdLessThan %bool %755 %757
-               OpSelectionMerge %759 None
-               OpBranchConditional %758 %760 %759
-        %760 = OpLabel
-               OpBranch %761
-        %761 = OpLabel
-               OpLoopMerge %762 %763 None
-               OpBranch %764
-        %764 = OpLabel
-               OpKill
-        %763 = OpLabel
-               OpBranch %761
-        %762 = OpLabel
-               OpReturn
-        %759 = OpLabel
-        %765 = OpAccessChain %_ptr_Function_int %tree %734 %uint_1
-               OpStore %765 %int_8
-        %766 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %766 %767
-               OpBranch %768
-        %768 = OpLabel
-               OpLoopMerge %769 %770 None
-               OpBranch %771
-        %771 = OpLabel
-        %772 = OpLoad %bool %x_463
-               OpStore %x_510_phi %772
-        %773 = OpConvertFToS %int %755
-        %774 = OpSLessThan %bool %int_0 %773
-               OpSelectionMerge %775 None
-               OpBranchConditional %774 %776 %777
-        %776 = OpLabel
-               OpBranch %775
-        %777 = OpLabel
-               OpBranch %769
-        %775 = OpLabel
-               OpStore %x_510_phi %true
-               OpBranch %769
-        %770 = OpLabel
-               OpBranch %768
-        %769 = OpLabel
-        %778 = OpLoad %bool %x_510_phi
-               OpStore %x_510 %778
-        %779 = OpLoad %bool %x_510
-               OpStore %x_512_phi %779
-        %780 = OpLoad %bool %x_510
-               OpSelectionMerge %781 None
-               OpBranchConditional %780 %782 %781
-        %782 = OpLabel
-               OpBranch %724
-        %781 = OpLabel
-               OpBranch %751
-        %753 = OpLabel
-        %783 = OpAccessChain %_ptr_Function_int %tree %734 %uint_1
-        %784 = OpLoad %int %783
-               OpStore %x_491 %784
-        %785 = OpLoad %bool %x_463
-               OpStore %x_464_phi %785
-        %786 = OpLoad %int %x_491
-               OpStore %x_467_phi %786
-               OpBranch %725
-        %751 = OpLabel
-               OpBranch %744
-        %746 = OpLabel
-        %787 = OpAccessChain %_ptr_Function_int %tree %734 %uint_2
-        %788 = OpLoad %int %787
-        %789 = OpIEqual %bool %788 %int_n1
-               OpSelectionMerge %790 None
-               OpBranchConditional %789 %791 %792
-        %791 = OpLabel
-        %793 = OpAccessChain %_ptr_Function_int %tree %734 %uint_2
-               OpStore %793 %int_8
-        %794 = OpAccessChain %_ptr_Function_BST %tree %int_8
-               OpStore %794 %767
-               OpStore %x_512_phi %true
-               OpBranch %724
-        %792 = OpLabel
-        %795 = OpAccessChain %_ptr_Function_int %tree %734 %uint_2
-        %796 = OpLoad %int %795
-               OpStore %x_483 %796
-        %797 = OpLoad %bool %x_463
-               OpStore %x_464_phi %797
-        %798 = OpLoad %int %x_483
-               OpStore %x_467_phi %798
-               OpBranch %725
-        %790 = OpLabel
-               OpReturn
-        %744 = OpLabel
-        %799 = OpLoad %bool %x_510
-               OpStore %x_464_phi %799
-               OpStore %x_467_phi %734
-               OpBranch %725
-        %725 = OpLabel
-        %800 = OpLoad %bool %x_464_phi
-               OpStore %x_464 %800
-        %801 = OpLoad %int %x_467_phi
-               OpStore %x_467 %801
-        %802 = OpLoad %bool %x_464
-               OpStore %x_463_phi %802
-        %803 = OpLoad %int %x_467
-               OpStore %x_466_phi %803
-               OpBranch %723
-        %724 = OpLabel
-        %804 = OpLoad %bool %x_512_phi
-               OpSelectionMerge %805 None
-               OpBranchConditional %804 %806 %805
-        %806 = OpLabel
-               OpBranch %721
-        %805 = OpLabel
-               OpBranch %721
-        %721 = OpLabel
-               OpSelectionMerge %812 None
-               OpSwitch %uint_0 %813
-        %813 = OpLabel
-               OpStore %x_517_phi %false
-               OpStore %x_520_phi %int_0
-               OpBranch %814
-        %814 = OpLabel
-               OpLoopMerge %815 %816 None
-               OpBranch %817
-        %817 = OpLabel
-        %824 = OpLoad %bool %x_517_phi
-               OpStore %x_517 %824
-        %825 = OpLoad %int %x_520_phi
-        %826 = OpLoad %bool %x_517
-               OpStore %x_566_phi %826
-        %827 = OpSLessThanEqual %bool %825 %int_9
-               OpSelectionMerge %828 None
-               OpBranchConditional %827 %829 %830
-        %829 = OpLabel
-               OpBranch %828
-        %830 = OpLabel
-               OpBranch %815
-        %828 = OpLabel
-        %831 = OpAccessChain %_ptr_Function_int %tree %825 %uint_0
-        %832 = OpLoad %int %831
-        %834 = OpSLessThanEqual %bool %int_13 %832
-               OpSelectionMerge %835 None
-               OpBranchConditional %834 %836 %837
-        %836 = OpLabel
-        %839 = OpAccessChain %_ptr_Function_int %tree %825 %uint_1
-        %840 = OpLoad %int %839
-        %841 = OpIEqual %bool %840 %int_n1
-               OpSelectionMerge %842 None
-               OpBranchConditional %841 %843 %844
-        %843 = OpLabel
-        %845 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %846 = OpLoad %float %845
-        %847 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %848 = OpLoad %float %847
-        %849 = OpFOrdLessThan %bool %846 %848
-               OpSelectionMerge %850 None
-               OpBranchConditional %849 %851 %850
-        %851 = OpLabel
-               OpBranch %852
-        %852 = OpLabel
-               OpLoopMerge %853 %854 None
-               OpBranch %855
-        %855 = OpLabel
-               OpKill
-        %854 = OpLabel
-               OpBranch %852
-        %853 = OpLabel
-               OpReturn
-        %850 = OpLabel
-        %856 = OpAccessChain %_ptr_Function_int %tree %825 %uint_1
-               OpStore %856 %int_9
-        %857 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %857 %858
-               OpBranch %859
-        %859 = OpLabel
-               OpLoopMerge %860 %861 None
-               OpBranch %862
-        %862 = OpLabel
-        %863 = OpLoad %bool %x_517
-               OpStore %x_564_phi %863
-        %864 = OpConvertFToS %int %846
-        %865 = OpSLessThan %bool %int_0 %864
-               OpSelectionMerge %866 None
-               OpBranchConditional %865 %867 %868
-        %867 = OpLabel
-               OpBranch %866
-        %868 = OpLabel
-               OpBranch %860
-        %866 = OpLabel
-               OpStore %x_564_phi %true
-               OpBranch %860
-        %861 = OpLabel
-               OpBranch %859
-        %860 = OpLabel
-        %869 = OpLoad %bool %x_564_phi
-               OpStore %x_564 %869
-        %870 = OpLoad %bool %x_564
-               OpStore %x_566_phi %870
-        %871 = OpLoad %bool %x_564
-               OpSelectionMerge %872 None
-               OpBranchConditional %871 %873 %872
-        %873 = OpLabel
-               OpBranch %815
-        %872 = OpLabel
-               OpBranch %842
-        %844 = OpLabel
-        %874 = OpAccessChain %_ptr_Function_int %tree %825 %uint_1
-        %875 = OpLoad %int %874
-               OpStore %x_545 %875
-        %876 = OpLoad %bool %x_517
-               OpStore %x_518_phi %876
-        %877 = OpLoad %int %x_545
-               OpStore %x_521_phi %877
-               OpBranch %816
-        %842 = OpLabel
-               OpBranch %835
-        %837 = OpLabel
-        %878 = OpAccessChain %_ptr_Function_int %tree %825 %uint_2
-        %879 = OpLoad %int %878
-        %880 = OpIEqual %bool %879 %int_n1
-               OpSelectionMerge %881 None
-               OpBranchConditional %880 %882 %883
-        %882 = OpLabel
-        %884 = OpAccessChain %_ptr_Function_int %tree %825 %uint_2
-               OpStore %884 %int_9
-        %885 = OpAccessChain %_ptr_Function_BST %tree %int_9
-               OpStore %885 %858
-               OpStore %x_566_phi %true
-               OpBranch %815
-        %883 = OpLabel
-        %886 = OpAccessChain %_ptr_Function_int %tree %825 %uint_2
-        %887 = OpLoad %int %886
-               OpStore %x_537 %887
-        %888 = OpLoad %bool %x_517
-               OpStore %x_518_phi %888
-        %889 = OpLoad %int %x_537
-               OpStore %x_521_phi %889
-               OpBranch %816
-        %881 = OpLabel
-               OpReturn
-        %835 = OpLabel
-        %890 = OpLoad %bool %x_564
-               OpStore %x_518_phi %890
-               OpStore %x_521_phi %825
-               OpBranch %816
-        %816 = OpLabel
-        %891 = OpLoad %bool %x_518_phi
-               OpStore %x_518 %891
-        %892 = OpLoad %int %x_521_phi
-               OpStore %x_521 %892
-        %893 = OpLoad %bool %x_518
-               OpStore %x_517_phi %893
-        %894 = OpLoad %int %x_521
-               OpStore %x_520_phi %894
-               OpBranch %814
-        %815 = OpLabel
-        %895 = OpLoad %bool %x_566_phi
-               OpSelectionMerge %896 None
-               OpBranchConditional %895 %897 %896
-        %897 = OpLabel
-               OpBranch %812
-        %896 = OpLabel
-               OpBranch %812
-        %812 = OpLabel
-               OpStore %x_569_phi %int_0
-               OpStore %x_572_phi %int_0
-               OpStore %x_574_phi %int_0
-               OpBranch %898
-        %898 = OpLabel
-               OpLoopMerge %899 %900 None
-               OpBranch %901
-        %901 = OpLabel
-        %908 = OpLoad %int %x_569_phi
-        %909 = OpLoad %int %x_572_phi
-               OpStore %x_572 %909
-        %910 = OpLoad %int %x_574_phi
-        %912 = OpSLessThan %bool %910 %int_20
-               OpSelectionMerge %913 None
-               OpBranchConditional %912 %914 %915
-        %914 = OpLabel
-               OpBranch %913
-        %915 = OpLabel
-               OpBranch %899
-        %913 = OpLabel
-               OpSelectionMerge %919 None
-               OpSwitch %uint_0 %920
-        %920 = OpLabel
-               OpStore %x_582_phi %int_0
-               OpBranch %921
-        %921 = OpLabel
-               OpLoopMerge %922 %923 None
-               OpBranch %924
-        %924 = OpLabel
-        %925 = OpLoad %int %x_582_phi
-               OpStore %x_597_phi %908
-               OpStore %x_598_phi %false
-        %926 = OpINotEqual %bool %925 %int_n1
-               OpSelectionMerge %927 None
-               OpBranchConditional %926 %928 %929
-        %928 = OpLabel
-               OpBranch %927
-        %929 = OpLabel
-               OpBranch %922
-        %927 = OpLabel
-        %930 = OpAccessChain %_ptr_Function_BST %tree %925
-        %931 = OpLoad %BST %930
-        %932 = OpCompositeExtract %int %931 0
-        %933 = OpCompositeExtract %int %931 1
-        %934 = OpCompositeExtract %int %931 2
-        %935 = OpIEqual %bool %932 %910
-               OpSelectionMerge %936 None
-               OpBranchConditional %935 %937 %936
-        %937 = OpLabel
-               OpStore %x_597_phi %910
-               OpStore %x_598_phi %true
-               OpBranch %922
-        %936 = OpLabel
-               OpBranch %923
-        %923 = OpLabel
-        %939 = OpSGreaterThan %bool %910 %932
-        %938 = OpSelect %int %939 %934 %933
-               OpStore %x_582_phi %938
-               OpBranch %921
-        %922 = OpLabel
-        %940 = OpLoad %int %x_597_phi
-               OpStore %x_597 %940
-        %941 = OpLoad %bool %x_598_phi
-        %942 = OpLoad %int %x_597
-               OpStore %x_570_phi %942
-               OpSelectionMerge %943 None
-               OpBranchConditional %941 %944 %943
-        %944 = OpLabel
-               OpBranch %919
-        %943 = OpLabel
-               OpStore %x_570_phi %int_n1
-               OpBranch %919
-        %919 = OpLabel
-        %950 = OpLoad %int %x_570_phi
-               OpStore %x_570 %950
-               OpSelectionMerge %951 None
-               OpSwitch %910 %952 2 %953 5 %953 6 %953 7 %953 8 %953 9 %953 12 %953 13 %953 15 %953 17 %953
-        %953 = OpLabel
-        %954 = OpLoad %int %x_572
-               OpStore %x_607_phi %954
-        %955 = OpLoad %int %x_570
-        %956 = OpCopyObject %int %910
-        %957 = OpIEqual %bool %955 %956
-               OpSelectionMerge %958 None
-               OpBranchConditional %957 %959 %958
-        %959 = OpLabel
-        %961 = OpLoad %int %x_572
-        %962 = OpCopyObject %int %int_1
-        %963 = OpIAdd %int %961 %962
-        %960 = OpCopyObject %int %963
-               OpStore %x_606 %960
-        %964 = OpLoad %int %x_606
-               OpStore %x_607_phi %964
-               OpBranch %958
-        %958 = OpLabel
-        %965 = OpLoad %int %x_607_phi
-               OpStore %x_607 %965
-        %966 = OpLoad %int %x_607
-               OpStore %x_573_phi %966
-               OpBranch %951
-        %952 = OpLabel
-        %967 = OpLoad %int %x_572
-               OpStore %x_612_phi %967
-        %968 = OpLoad %int %x_570
-        %969 = OpCopyObject %int %int_n1
-        %970 = OpIEqual %bool %968 %969
-               OpSelectionMerge %971 None
-               OpBranchConditional %970 %972 %971
-        %972 = OpLabel
-        %974 = OpLoad %int %x_572
-        %975 = OpCopyObject %int %int_1
-        %976 = OpIAdd %int %974 %975
-        %973 = OpCopyObject %int %976
-               OpStore %x_611 %973
-        %977 = OpLoad %int %x_611
-               OpStore %x_612_phi %977
-               OpBranch %971
-        %971 = OpLabel
-        %978 = OpLoad %int %x_612_phi
-               OpStore %x_612 %978
-        %979 = OpLoad %int %x_612
-               OpStore %x_573_phi %979
-               OpBranch %951
-        %951 = OpLabel
-        %980 = OpLoad %int %x_573_phi
-               OpBranch %900
-        %900 = OpLabel
-        %981 = OpIAdd %int %910 %int_1
-               OpStore %x_575 %981
-        %982 = OpLoad %int %x_570
-               OpStore %x_569_phi %982
-               OpStore %x_572_phi %980
-        %983 = OpLoad %int %x_575
-               OpStore %x_574_phi %983
-               OpBranch %898
-        %899 = OpLabel
-        %984 = OpLoad %int %x_572
-        %985 = OpCopyObject %int %int_20
-        %986 = OpIEqual %bool %984 %985
-               OpSelectionMerge %987 None
-               OpBranchConditional %986 %988 %989
-        %988 = OpLabel
-               OpStore %x_GLF_color %991
-               OpBranch %987
-        %989 = OpLabel
-               OpStore %x_GLF_color %992
-               OpBranch %987
-        %987 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %993
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %997 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %998 = OpFunctionCall %void %main_1
-        %999 = OpLoad %v4float %x_GLF_color
-       %1000 = OpCompositeConstruct %main_out %999
-               OpReturnValue %1000
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-       %1002 = OpLabel
-       %1004 = OpLoad %v4float %gl_FragCoord_param_1
-       %1003 = OpFunctionCall %main_out %main_inner %1004
-       %1005 = OpCompositeExtract %v4float %1003 0
-               OpStore %x_GLF_color_1_1 %1005
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.wgsl
deleted file mode 100644
index c4e135a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,977 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var tree : array<BST, 10>;
-  var x_67 : bool;
-  var x_114 : bool;
-  var x_572 : i32;
-  var x_67_phi : bool;
-  var x_70_phi : i32;
-  var x_116_phi : bool;
-  var x_119_phi : i32;
-  var x_569_phi : i32;
-  var x_572_phi : i32;
-  var x_574_phi : i32;
-  tree[0] = BST(9, -1, -1);
-  switch(0u) {
-    default: {
-      x_67_phi = false;
-      x_70_phi = 0;
-      loop {
-        var x_95 : i32;
-        var x_87 : i32;
-        var x_68 : bool;
-        var x_71 : i32;
-        var x_68_phi : bool;
-        var x_71_phi : i32;
-        x_67 = x_67_phi;
-        let x_70 : i32 = x_70_phi;
-        x_116_phi = x_67;
-        if ((x_70 <= 1)) {
-        } else {
-          break;
-        }
-        let x_76 : i32 = tree[x_70].data;
-        if ((5 <= x_76)) {
-          var x_114_phi : bool;
-          let x_89 : ptr<function, i32> = &(tree[x_70].leftIndex);
-          let x_90 : i32 = *(x_89);
-          if ((x_90 == -1)) {
-            let x_97 : f32 = x_8.injectionSwitch.y;
-            let x_99 : f32 = x_8.injectionSwitch.x;
-            if ((x_97 < x_99)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_89) = 1;
-            tree[1] = BST(5, -1, -1);
-            loop {
-              x_114_phi = x_67;
-              if ((0 < i32(x_97))) {
-              } else {
-                break;
-              }
-              x_114_phi = true;
-              break;
-            }
-            x_114 = x_114_phi;
-            x_116_phi = x_114;
-            if (x_114) {
-              break;
-            }
-          } else {
-            x_95 = *(x_89);
-            x_68_phi = x_67;
-            x_71_phi = x_95;
-            continue;
-          }
-        } else {
-          let x_81 : ptr<function, i32> = &(tree[x_70].rightIndex);
-          let x_82 : i32 = *(x_81);
-          if ((x_82 == -1)) {
-            *(x_81) = 1;
-            tree[1] = BST(5, -1, -1);
-            x_116_phi = true;
-            break;
-          } else {
-            x_87 = *(x_81);
-            x_68_phi = x_67;
-            x_71_phi = x_87;
-            continue;
-          }
-          return;
-        }
-        x_68_phi = x_114;
-        x_71_phi = x_70;
-
-        continuing {
-          x_68 = x_68_phi;
-          x_71 = x_71_phi;
-          x_67_phi = x_68;
-          x_70_phi = x_71;
-        }
-      }
-      let x_116 : bool = x_116_phi;
-      if (x_116) {
-        break;
-      }
-    }
-  }
-  x_119_phi = 0;
-  loop {
-    var x_133 : bool;
-    var x_120 : i32;
-    var x_134_phi : bool;
-    let x_119 : i32 = x_119_phi;
-    let x_125 : f32 = gl_FragCoord.y;
-    let x_126 : bool = (x_125 < 0.0);
-    x_134_phi = x_126;
-    if (!(x_126)) {
-      let x_131 : f32 = x_8.injectionSwitch.y;
-      x_133 = (x_119 != i32(x_131));
-      x_134_phi = x_133;
-    }
-    let x_134 : bool = x_134_phi;
-    if (x_134) {
-    } else {
-      break;
-    }
-    var x_139 : bool;
-    var x_186 : bool;
-    var x_139_phi : bool;
-    var x_142_phi : i32;
-    var x_188_phi : bool;
-    switch(0u) {
-      default: {
-        x_139_phi = false;
-        x_142_phi = 0;
-        loop {
-          var x_167 : i32;
-          var x_159 : i32;
-          var x_140 : bool;
-          var x_143 : i32;
-          var x_140_phi : bool;
-          var x_143_phi : i32;
-          x_139 = x_139_phi;
-          let x_142 : i32 = x_142_phi;
-          x_188_phi = x_139;
-          if ((x_142 <= 2)) {
-          } else {
-            break;
-          }
-          let x_148 : i32 = tree[x_142].data;
-          if ((12 <= x_148)) {
-            var x_186_phi : bool;
-            let x_161 : ptr<function, i32> = &(tree[x_142].leftIndex);
-            let x_162 : i32 = *(x_161);
-            if ((x_162 == -1)) {
-              let x_169 : f32 = x_8.injectionSwitch.y;
-              let x_171 : f32 = x_8.injectionSwitch.x;
-              if ((x_169 < x_171)) {
-                loop {
-                  discard;
-                }
-                return;
-              }
-              *(x_161) = 2;
-              tree[2] = BST(12, -1, -1);
-              loop {
-                x_186_phi = x_139;
-                if ((0 < i32(x_169))) {
-                } else {
-                  break;
-                }
-                x_186_phi = true;
-                break;
-              }
-              x_186 = x_186_phi;
-              x_188_phi = x_186;
-              if (x_186) {
-                break;
-              }
-            } else {
-              x_167 = *(x_161);
-              x_140_phi = x_139;
-              x_143_phi = x_167;
-              continue;
-            }
-          } else {
-            let x_153 : ptr<function, i32> = &(tree[x_142].rightIndex);
-            let x_154 : i32 = *(x_153);
-            if ((x_154 == -1)) {
-              *(x_153) = 2;
-              tree[2] = BST(12, -1, -1);
-              x_188_phi = true;
-              break;
-            } else {
-              x_159 = *(x_153);
-              x_140_phi = x_139;
-              x_143_phi = x_159;
-              continue;
-            }
-            return;
-          }
-          x_140_phi = x_186;
-          x_143_phi = x_142;
-
-          continuing {
-            x_140 = x_140_phi;
-            x_143 = x_143_phi;
-            x_139_phi = x_140;
-            x_142_phi = x_143;
-          }
-        }
-        let x_188 : bool = x_188_phi;
-        if (x_188) {
-          break;
-        }
-      }
-    }
-
-    continuing {
-      x_120 = (x_119 + 1);
-      x_119_phi = x_120;
-    }
-  }
-  var x_193 : bool;
-  var x_240 : bool;
-  var x_193_phi : bool;
-  var x_196_phi : i32;
-  var x_242_phi : bool;
-  switch(0u) {
-    default: {
-      x_193_phi = false;
-      x_196_phi = 0;
-      loop {
-        var x_221 : i32;
-        var x_213 : i32;
-        var x_194 : bool;
-        var x_197 : i32;
-        var x_194_phi : bool;
-        var x_197_phi : i32;
-        x_193 = x_193_phi;
-        let x_196 : i32 = x_196_phi;
-        x_242_phi = x_193;
-        if ((x_196 <= 3)) {
-        } else {
-          break;
-        }
-        let x_202 : i32 = tree[x_196].data;
-        if ((15 <= x_202)) {
-          var x_240_phi : bool;
-          let x_215 : ptr<function, i32> = &(tree[x_196].leftIndex);
-          let x_216 : i32 = *(x_215);
-          if ((x_216 == -1)) {
-            let x_223 : f32 = x_8.injectionSwitch.y;
-            let x_225 : f32 = x_8.injectionSwitch.x;
-            if ((x_223 < x_225)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_215) = 3;
-            tree[3] = BST(15, -1, -1);
-            loop {
-              x_240_phi = x_193;
-              if ((0 < i32(x_223))) {
-              } else {
-                break;
-              }
-              x_240_phi = true;
-              break;
-            }
-            x_240 = x_240_phi;
-            x_242_phi = x_240;
-            if (x_240) {
-              break;
-            }
-          } else {
-            x_221 = *(x_215);
-            x_194_phi = x_193;
-            x_197_phi = x_221;
-            continue;
-          }
-        } else {
-          let x_207 : ptr<function, i32> = &(tree[x_196].rightIndex);
-          let x_208 : i32 = *(x_207);
-          if ((x_208 == -1)) {
-            *(x_207) = 3;
-            tree[3] = BST(15, -1, -1);
-            x_242_phi = true;
-            break;
-          } else {
-            x_213 = *(x_207);
-            x_194_phi = x_193;
-            x_197_phi = x_213;
-            continue;
-          }
-          return;
-        }
-        x_194_phi = x_240;
-        x_197_phi = x_196;
-
-        continuing {
-          x_194 = x_194_phi;
-          x_197 = x_197_phi;
-          x_193_phi = x_194;
-          x_196_phi = x_197;
-        }
-      }
-      let x_242 : bool = x_242_phi;
-      if (x_242) {
-        break;
-      }
-    }
-  }
-  var x_247 : bool;
-  var x_294 : bool;
-  var x_247_phi : bool;
-  var x_250_phi : i32;
-  var x_296_phi : bool;
-  switch(0u) {
-    default: {
-      x_247_phi = false;
-      x_250_phi = 0;
-      loop {
-        var x_275 : i32;
-        var x_267 : i32;
-        var x_248 : bool;
-        var x_251 : i32;
-        var x_248_phi : bool;
-        var x_251_phi : i32;
-        x_247 = x_247_phi;
-        let x_250 : i32 = x_250_phi;
-        x_296_phi = x_247;
-        if ((x_250 <= 4)) {
-        } else {
-          break;
-        }
-        let x_256 : i32 = tree[x_250].data;
-        if ((7 <= x_256)) {
-          var x_294_phi : bool;
-          let x_269 : ptr<function, i32> = &(tree[x_250].leftIndex);
-          let x_270 : i32 = *(x_269);
-          if ((x_270 == -1)) {
-            let x_277 : f32 = x_8.injectionSwitch.y;
-            let x_279 : f32 = x_8.injectionSwitch.x;
-            if ((x_277 < x_279)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_269) = 4;
-            tree[4] = BST(7, -1, -1);
-            loop {
-              x_294_phi = x_247;
-              if ((0 < i32(x_277))) {
-              } else {
-                break;
-              }
-              x_294_phi = true;
-              break;
-            }
-            x_294 = x_294_phi;
-            x_296_phi = x_294;
-            if (x_294) {
-              break;
-            }
-          } else {
-            x_275 = *(x_269);
-            x_248_phi = x_247;
-            x_251_phi = x_275;
-            continue;
-          }
-        } else {
-          let x_261 : ptr<function, i32> = &(tree[x_250].rightIndex);
-          let x_262 : i32 = *(x_261);
-          if ((x_262 == -1)) {
-            *(x_261) = 4;
-            tree[4] = BST(7, -1, -1);
-            x_296_phi = true;
-            break;
-          } else {
-            x_267 = *(x_261);
-            x_248_phi = x_247;
-            x_251_phi = x_267;
-            continue;
-          }
-          return;
-        }
-        x_248_phi = x_294;
-        x_251_phi = x_250;
-
-        continuing {
-          x_248 = x_248_phi;
-          x_251 = x_251_phi;
-          x_247_phi = x_248;
-          x_250_phi = x_251;
-        }
-      }
-      let x_296 : bool = x_296_phi;
-      if (x_296) {
-        break;
-      }
-    }
-  }
-  var x_301 : bool;
-  var x_348 : bool;
-  var x_301_phi : bool;
-  var x_304_phi : i32;
-  var x_350_phi : bool;
-  switch(0u) {
-    default: {
-      x_301_phi = false;
-      x_304_phi = 0;
-      loop {
-        var x_329 : i32;
-        var x_321 : i32;
-        var x_302 : bool;
-        var x_305 : i32;
-        var x_302_phi : bool;
-        var x_305_phi : i32;
-        x_301 = x_301_phi;
-        let x_304 : i32 = x_304_phi;
-        x_350_phi = x_301;
-        if ((x_304 <= 5)) {
-        } else {
-          break;
-        }
-        let x_310 : i32 = tree[x_304].data;
-        if ((8 <= x_310)) {
-          var x_348_phi : bool;
-          let x_323 : ptr<function, i32> = &(tree[x_304].leftIndex);
-          let x_324 : i32 = *(x_323);
-          if ((x_324 == -1)) {
-            let x_331 : f32 = x_8.injectionSwitch.y;
-            let x_333 : f32 = x_8.injectionSwitch.x;
-            if ((x_331 < x_333)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_323) = 5;
-            tree[5] = BST(8, -1, -1);
-            loop {
-              x_348_phi = x_301;
-              if ((0 < i32(x_331))) {
-              } else {
-                break;
-              }
-              x_348_phi = true;
-              break;
-            }
-            x_348 = x_348_phi;
-            x_350_phi = x_348;
-            if (x_348) {
-              break;
-            }
-          } else {
-            x_329 = *(x_323);
-            x_302_phi = x_301;
-            x_305_phi = x_329;
-            continue;
-          }
-        } else {
-          let x_315 : ptr<function, i32> = &(tree[x_304].rightIndex);
-          let x_316 : i32 = *(x_315);
-          if ((x_316 == -1)) {
-            *(x_315) = 5;
-            tree[5] = BST(8, -1, -1);
-            x_350_phi = true;
-            break;
-          } else {
-            x_321 = *(x_315);
-            x_302_phi = x_301;
-            x_305_phi = x_321;
-            continue;
-          }
-          return;
-        }
-        x_302_phi = x_348;
-        x_305_phi = x_304;
-
-        continuing {
-          x_302 = x_302_phi;
-          x_305 = x_305_phi;
-          x_301_phi = x_302;
-          x_304_phi = x_305;
-        }
-      }
-      let x_350 : bool = x_350_phi;
-      if (x_350) {
-        break;
-      }
-    }
-  }
-  var x_355 : bool;
-  var x_402 : bool;
-  var x_355_phi : bool;
-  var x_358_phi : i32;
-  var x_404_phi : bool;
-  switch(0u) {
-    default: {
-      x_355_phi = false;
-      x_358_phi = 0;
-      loop {
-        var x_383 : i32;
-        var x_375 : i32;
-        var x_356 : bool;
-        var x_359 : i32;
-        var x_356_phi : bool;
-        var x_359_phi : i32;
-        x_355 = x_355_phi;
-        let x_358 : i32 = x_358_phi;
-        x_404_phi = x_355;
-        if ((x_358 <= 6)) {
-        } else {
-          break;
-        }
-        let x_364 : i32 = tree[x_358].data;
-        if ((2 <= x_364)) {
-          var x_402_phi : bool;
-          let x_377 : ptr<function, i32> = &(tree[x_358].leftIndex);
-          let x_378 : i32 = *(x_377);
-          if ((x_378 == -1)) {
-            let x_385 : f32 = x_8.injectionSwitch.y;
-            let x_387 : f32 = x_8.injectionSwitch.x;
-            if ((x_385 < x_387)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_377) = 6;
-            tree[6] = BST(2, -1, -1);
-            loop {
-              x_402_phi = x_355;
-              if ((0 < i32(x_385))) {
-              } else {
-                break;
-              }
-              x_402_phi = true;
-              break;
-            }
-            x_402 = x_402_phi;
-            x_404_phi = x_402;
-            if (x_402) {
-              break;
-            }
-          } else {
-            x_383 = *(x_377);
-            x_356_phi = x_355;
-            x_359_phi = x_383;
-            continue;
-          }
-        } else {
-          let x_369 : ptr<function, i32> = &(tree[x_358].rightIndex);
-          let x_370 : i32 = *(x_369);
-          if ((x_370 == -1)) {
-            *(x_369) = 6;
-            tree[6] = BST(2, -1, -1);
-            x_404_phi = true;
-            break;
-          } else {
-            x_375 = *(x_369);
-            x_356_phi = x_355;
-            x_359_phi = x_375;
-            continue;
-          }
-          return;
-        }
-        x_356_phi = x_402;
-        x_359_phi = x_358;
-
-        continuing {
-          x_356 = x_356_phi;
-          x_359 = x_359_phi;
-          x_355_phi = x_356;
-          x_358_phi = x_359;
-        }
-      }
-      let x_404 : bool = x_404_phi;
-      if (x_404) {
-        break;
-      }
-    }
-  }
-  var x_409 : bool;
-  var x_456 : bool;
-  var x_409_phi : bool;
-  var x_412_phi : i32;
-  var x_458_phi : bool;
-  switch(0u) {
-    default: {
-      x_409_phi = false;
-      x_412_phi = 0;
-      loop {
-        var x_437 : i32;
-        var x_429 : i32;
-        var x_410 : bool;
-        var x_413 : i32;
-        var x_410_phi : bool;
-        var x_413_phi : i32;
-        x_409 = x_409_phi;
-        let x_412 : i32 = x_412_phi;
-        x_458_phi = x_409;
-        if ((x_412 <= 7)) {
-        } else {
-          break;
-        }
-        let x_418 : i32 = tree[x_412].data;
-        if ((6 <= x_418)) {
-          var x_456_phi : bool;
-          let x_431 : ptr<function, i32> = &(tree[x_412].leftIndex);
-          let x_432 : i32 = *(x_431);
-          if ((x_432 == -1)) {
-            let x_439 : f32 = x_8.injectionSwitch.y;
-            let x_441 : f32 = x_8.injectionSwitch.x;
-            if ((x_439 < x_441)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_431) = 7;
-            tree[7] = BST(6, -1, -1);
-            loop {
-              x_456_phi = x_409;
-              if ((0 < i32(x_439))) {
-              } else {
-                break;
-              }
-              x_456_phi = true;
-              break;
-            }
-            x_456 = x_456_phi;
-            x_458_phi = x_456;
-            if (x_456) {
-              break;
-            }
-          } else {
-            x_437 = *(x_431);
-            x_410_phi = x_409;
-            x_413_phi = x_437;
-            continue;
-          }
-        } else {
-          let x_423 : ptr<function, i32> = &(tree[x_412].rightIndex);
-          let x_424 : i32 = *(x_423);
-          if ((x_424 == -1)) {
-            *(x_423) = 7;
-            tree[7] = BST(6, -1, -1);
-            x_458_phi = true;
-            break;
-          } else {
-            x_429 = *(x_423);
-            x_410_phi = x_409;
-            x_413_phi = x_429;
-            continue;
-          }
-          return;
-        }
-        x_410_phi = x_456;
-        x_413_phi = x_412;
-
-        continuing {
-          x_410 = x_410_phi;
-          x_413 = x_413_phi;
-          x_409_phi = x_410;
-          x_412_phi = x_413;
-        }
-      }
-      let x_458 : bool = x_458_phi;
-      if (x_458) {
-        break;
-      }
-    }
-  }
-  var x_463 : bool;
-  var x_510 : bool;
-  var x_463_phi : bool;
-  var x_466_phi : i32;
-  var x_512_phi : bool;
-  switch(0u) {
-    default: {
-      x_463_phi = false;
-      x_466_phi = 0;
-      loop {
-        var x_491 : i32;
-        var x_483 : i32;
-        var x_464 : bool;
-        var x_467 : i32;
-        var x_464_phi : bool;
-        var x_467_phi : i32;
-        x_463 = x_463_phi;
-        let x_466 : i32 = x_466_phi;
-        x_512_phi = x_463;
-        if ((x_466 <= 8)) {
-        } else {
-          break;
-        }
-        let x_472 : i32 = tree[x_466].data;
-        if ((17 <= x_472)) {
-          var x_510_phi : bool;
-          let x_485 : ptr<function, i32> = &(tree[x_466].leftIndex);
-          let x_486 : i32 = *(x_485);
-          if ((x_486 == -1)) {
-            let x_493 : f32 = x_8.injectionSwitch.y;
-            let x_495 : f32 = x_8.injectionSwitch.x;
-            if ((x_493 < x_495)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_485) = 8;
-            tree[8] = BST(17, -1, -1);
-            loop {
-              x_510_phi = x_463;
-              if ((0 < i32(x_493))) {
-              } else {
-                break;
-              }
-              x_510_phi = true;
-              break;
-            }
-            x_510 = x_510_phi;
-            x_512_phi = x_510;
-            if (x_510) {
-              break;
-            }
-          } else {
-            x_491 = *(x_485);
-            x_464_phi = x_463;
-            x_467_phi = x_491;
-            continue;
-          }
-        } else {
-          let x_477 : ptr<function, i32> = &(tree[x_466].rightIndex);
-          let x_478 : i32 = *(x_477);
-          if ((x_478 == -1)) {
-            *(x_477) = 8;
-            tree[8] = BST(17, -1, -1);
-            x_512_phi = true;
-            break;
-          } else {
-            x_483 = *(x_477);
-            x_464_phi = x_463;
-            x_467_phi = x_483;
-            continue;
-          }
-          return;
-        }
-        x_464_phi = x_510;
-        x_467_phi = x_466;
-
-        continuing {
-          x_464 = x_464_phi;
-          x_467 = x_467_phi;
-          x_463_phi = x_464;
-          x_466_phi = x_467;
-        }
-      }
-      let x_512 : bool = x_512_phi;
-      if (x_512) {
-        break;
-      }
-    }
-  }
-  var x_517 : bool;
-  var x_564 : bool;
-  var x_517_phi : bool;
-  var x_520_phi : i32;
-  var x_566_phi : bool;
-  switch(0u) {
-    default: {
-      x_517_phi = false;
-      x_520_phi = 0;
-      loop {
-        var x_545 : i32;
-        var x_537 : i32;
-        var x_518 : bool;
-        var x_521 : i32;
-        var x_518_phi : bool;
-        var x_521_phi : i32;
-        x_517 = x_517_phi;
-        let x_520 : i32 = x_520_phi;
-        x_566_phi = x_517;
-        if ((x_520 <= 9)) {
-        } else {
-          break;
-        }
-        let x_526 : i32 = tree[x_520].data;
-        if ((13 <= x_526)) {
-          var x_564_phi : bool;
-          let x_539 : ptr<function, i32> = &(tree[x_520].leftIndex);
-          let x_540 : i32 = *(x_539);
-          if ((x_540 == -1)) {
-            let x_547 : f32 = x_8.injectionSwitch.y;
-            let x_549 : f32 = x_8.injectionSwitch.x;
-            if ((x_547 < x_549)) {
-              loop {
-                discard;
-              }
-              return;
-            }
-            *(x_539) = 9;
-            tree[9] = BST(13, -1, -1);
-            loop {
-              x_564_phi = x_517;
-              if ((0 < i32(x_547))) {
-              } else {
-                break;
-              }
-              x_564_phi = true;
-              break;
-            }
-            x_564 = x_564_phi;
-            x_566_phi = x_564;
-            if (x_564) {
-              break;
-            }
-          } else {
-            x_545 = *(x_539);
-            x_518_phi = x_517;
-            x_521_phi = x_545;
-            continue;
-          }
-        } else {
-          let x_531 : ptr<function, i32> = &(tree[x_520].rightIndex);
-          let x_532 : i32 = *(x_531);
-          if ((x_532 == -1)) {
-            *(x_531) = 9;
-            tree[9] = BST(13, -1, -1);
-            x_566_phi = true;
-            break;
-          } else {
-            x_537 = *(x_531);
-            x_518_phi = x_517;
-            x_521_phi = x_537;
-            continue;
-          }
-          return;
-        }
-        x_518_phi = x_564;
-        x_521_phi = x_520;
-
-        continuing {
-          x_518 = x_518_phi;
-          x_521 = x_521_phi;
-          x_517_phi = x_518;
-          x_520_phi = x_521;
-        }
-      }
-      let x_566 : bool = x_566_phi;
-      if (x_566) {
-        break;
-      }
-    }
-  }
-  x_569_phi = 0;
-  x_572_phi = 0;
-  x_574_phi = 0;
-  loop {
-    var x_597 : i32;
-    var x_607 : i32;
-    var x_612 : i32;
-    var x_575 : i32;
-    var x_570_phi : i32;
-    var x_573_phi : i32;
-    let x_569 : i32 = x_569_phi;
-    x_572 = x_572_phi;
-    let x_574 : i32 = x_574_phi;
-    if ((x_574 < 20)) {
-    } else {
-      break;
-    }
-    var x_582_phi : i32;
-    var x_597_phi : i32;
-    var x_598_phi : bool;
-    switch(0u) {
-      default: {
-        x_582_phi = 0;
-        loop {
-          let x_582 : i32 = x_582_phi;
-          x_597_phi = x_569;
-          x_598_phi = false;
-          if ((x_582 != -1)) {
-          } else {
-            break;
-          }
-          let x_589 : BST = tree[x_582];
-          let x_590 : i32 = x_589.data;
-          let x_591 : i32 = x_589.leftIndex;
-          let x_592 : i32 = x_589.rightIndex;
-          if ((x_590 == x_574)) {
-            x_597_phi = x_574;
-            x_598_phi = true;
-            break;
-          }
-
-          continuing {
-            x_582_phi = select(x_591, x_592, (x_574 > x_590));
-          }
-        }
-        x_597 = x_597_phi;
-        let x_598 : bool = x_598_phi;
-        x_570_phi = x_597;
-        if (x_598) {
-          break;
-        }
-        x_570_phi = -1;
-      }
-    }
-    var x_570 : i32;
-    var x_606 : i32;
-    var x_611 : i32;
-    var x_607_phi : i32;
-    var x_612_phi : i32;
-    x_570 = x_570_phi;
-    switch(x_574) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        x_607_phi = x_572;
-        if ((x_570 == bitcast<i32>(x_574))) {
-          x_606 = bitcast<i32>((x_572 + bitcast<i32>(1)));
-          x_607_phi = x_606;
-        }
-        x_607 = x_607_phi;
-        x_573_phi = x_607;
-      }
-      default: {
-        x_612_phi = x_572;
-        if ((x_570 == bitcast<i32>(-1))) {
-          x_611 = bitcast<i32>((x_572 + bitcast<i32>(1)));
-          x_612_phi = x_611;
-        }
-        x_612 = x_612_phi;
-        x_573_phi = x_612;
-      }
-    }
-    let x_573 : i32 = x_573_phi;
-
-    continuing {
-      x_575 = (x_574 + 1);
-      x_569_phi = x_570;
-      x_572_phi = x_573;
-      x_574_phi = x_575;
-    }
-  }
-  if ((x_572 == bitcast<i32>(20))) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.hlsl
deleted file mode 100644
index 4f182fb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,240 +0,0 @@
-SKIP: FAILED
-
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static BST tree_1[10] = (BST[10])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
-  const int x_158 = data;
-  tree.data = x_158;
-  tree.leftIndex = -1;
-  tree.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_167 = baseIndex;
-    const int x_168 = treeIndex;
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    const int x_171 = data_1;
-    const int x_174 = tree_1[baseIndex].data;
-    if ((x_171 <= x_174)) {
-      const int x_181 = tree_1[baseIndex].leftIndex;
-      if ((x_181 == -1)) {
-        const int x_186 = baseIndex;
-        const int x_187 = treeIndex;
-        tree_1[x_186].leftIndex = x_187;
-        const int x_189 = treeIndex;
-        const BST x_191 = tree_1[x_189];
-        param = x_191;
-        const int x_192 = data_1;
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree_1[x_189] = param;
-        return;
-      } else {
-        const int x_198 = tree_1[baseIndex].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      const int x_201 = tree_1[baseIndex].rightIndex;
-      if ((x_201 == -1)) {
-        const int x_206 = baseIndex;
-        const int x_207 = treeIndex;
-        tree_1[x_206].rightIndex = x_207;
-        const int x_209 = treeIndex;
-        const BST x_211 = tree_1[x_209];
-        param_2 = x_211;
-        const int x_212 = data_1;
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree_1[x_209] = param_2;
-        return;
-      } else {
-        const int x_218 = tree_1[baseIndex].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_220 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_230 = tree_1[index];
-    currentNode = x_230;
-    const int x_232 = currentNode.data;
-    const int x_233 = target;
-    if ((x_232 == x_233)) {
-      const int x_237 = target;
-      return x_237;
-    }
-    const int x_238 = target;
-    const int x_240 = currentNode.data;
-    if ((x_238 > x_240)) {
-      const int x_246 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      const int x_248 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    index = x_220;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  const BST x_84 = tree_1[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree_1[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  count = 0;
-  i = 0;
-  {
-    for(; (i < 20); i = (i + 1)) {
-      param_24 = i;
-      const int x_132 = search_i1_(param_24);
-      result = x_132;
-      switch(i) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          if ((result == i)) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_2 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_2;
-}
-C:\src\tint\test\Shader@0x0000021FA27400C0(25,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x0000021FA27400C0(25,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x0000021FA27400C0(25,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x0000021FA27400C0(25,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-internal error: compilation aborted unexpectedly
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.msl
deleted file mode 100644
index 70b032c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.msl
+++ /dev/null
@@ -1,287 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
-  int const x_158 = *(data);
-  (*(tree)).data = x_158;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_167 = baseIndex;
-    int const x_168 = *(treeIndex);
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    int const x_171 = *(data_1);
-    int const x_172 = baseIndex;
-    int const x_174 = (*(tint_symbol_3)).arr[x_172].data;
-    if ((x_171 <= x_174)) {
-      int const x_179 = baseIndex;
-      int const x_181 = (*(tint_symbol_3)).arr[x_179].leftIndex;
-      if ((x_181 == -1)) {
-        int const x_186 = baseIndex;
-        int const x_187 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_186].leftIndex = x_187;
-        int const x_189 = *(treeIndex);
-        BST const x_191 = (*(tint_symbol_3)).arr[x_189];
-        param = x_191;
-        int const x_192 = *(data_1);
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_194 = param;
-        (*(tint_symbol_3)).arr[x_189] = x_194;
-        return;
-      } else {
-        int const x_196 = baseIndex;
-        int const x_198 = (*(tint_symbol_3)).arr[x_196].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      int const x_199 = baseIndex;
-      int const x_201 = (*(tint_symbol_3)).arr[x_199].rightIndex;
-      if ((x_201 == -1)) {
-        int const x_206 = baseIndex;
-        int const x_207 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_206].rightIndex = x_207;
-        int const x_209 = *(treeIndex);
-        BST const x_211 = (*(tint_symbol_3)).arr[x_209];
-        param_2 = x_211;
-        int const x_212 = *(data_1);
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_214 = param_2;
-        (*(tint_symbol_3)).arr[x_209] = x_214;
-        return;
-      } else {
-        int const x_216 = baseIndex;
-        int const x_218 = (*(tint_symbol_3)).arr[x_216].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_220 = 0;
-  index = 0;
-  while (true) {
-    int const x_225 = index;
-    if ((x_225 != -1)) {
-    } else {
-      break;
-    }
-    int const x_228 = index;
-    BST const x_230 = (*(tint_symbol_4)).arr[x_228];
-    currentNode = x_230;
-    int const x_232 = currentNode.data;
-    int const x_233 = *(target);
-    if ((x_232 == x_233)) {
-      int const x_237 = *(target);
-      return x_237;
-    }
-    int const x_238 = *(target);
-    int const x_240 = currentNode.data;
-    if ((x_238 > x_240)) {
-      int const x_246 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      int const x_248 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    int const x_249 = x_220;
-    index = x_249;
-  }
-  return -1;
-}
-
-void main_1(thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  BST const x_84 = (*(tint_symbol_5)).arr[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_86 = param_4;
-  (*(tint_symbol_5)).arr[0] = x_86;
-  int const x_88 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-  int const x_90 = treeIndex_1;
-  param_6 = x_90;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7), tint_symbol_5);
-  int const x_92 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(1)));
-  int const x_94 = treeIndex_1;
-  param_8 = x_94;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9), tint_symbol_5);
-  int const x_96 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-  int const x_98 = treeIndex_1;
-  param_10 = x_98;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11), tint_symbol_5);
-  int const x_100 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-  int const x_102 = treeIndex_1;
-  param_12 = x_102;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13), tint_symbol_5);
-  int const x_104 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-  int const x_106 = treeIndex_1;
-  param_14 = x_106;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15), tint_symbol_5);
-  int const x_108 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-  int const x_110 = treeIndex_1;
-  param_16 = x_110;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17), tint_symbol_5);
-  int const x_112 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-  int const x_114 = treeIndex_1;
-  param_18 = x_114;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19), tint_symbol_5);
-  int const x_116 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-  int const x_118 = treeIndex_1;
-  param_20 = x_118;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21), tint_symbol_5);
-  int const x_120 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-  int const x_122 = treeIndex_1;
-  param_22 = x_122;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23), tint_symbol_5);
-  count = 0;
-  i = 0;
-  while (true) {
-    int const x_128 = i;
-    if ((x_128 < 20)) {
-    } else {
-      break;
-    }
-    int const x_131 = i;
-    param_24 = x_131;
-    int const x_132 = search_i1_(&(param_24), tint_symbol_5);
-    result = x_132;
-    int const x_133 = i;
-    switch(x_133) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_143 = result;
-        int const x_144 = i;
-        if ((x_143 == x_144)) {
-          int const x_148 = count;
-          count = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_137 = result;
-        if ((x_137 == -1)) {
-          int const x_141 = count;
-          count = as_type<int>((as_type<uint>(x_141) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_150 = i;
-      i = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  int const x_152 = count;
-  if ((x_152 == 20)) {
-    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_6) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_9 = {};
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.spvasm
deleted file mode 100644
index f512823..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,474 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 315
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree_1 "tree_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %tree "tree"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_220 "x_220"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %result "result"
-               OpName %param_24 "param_24"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %13 = OpConstantNull %_arr_BST_uint_10
-     %tree_1 = OpVariable %_ptr_Private__arr_BST_uint_10 Private %13
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %16 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %36 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %42 = OpConstantNull %int
-         %44 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %122 = OpTypeFunction %int %_ptr_Function_int
-        %163 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %302 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %303 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %304 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %16
-       %tree = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %23 = OpLabel
-         %25 = OpLoad %int %data
-         %28 = OpAccessChain %_ptr_Function_int %tree %uint_0
-               OpStore %28 %25
-         %31 = OpAccessChain %_ptr_Function_int %tree %uint_1
-               OpStore %31 %int_n1
-         %35 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %35 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %36
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %40 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %42
-      %param = OpVariable %_ptr_Function_BST Function %44
-    %param_1 = OpVariable %_ptr_Function_int Function %42
-    %param_2 = OpVariable %_ptr_Function_BST Function %44
-    %param_3 = OpVariable %_ptr_Function_int Function %42
-               OpStore %baseIndex %int_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpLoad %int %baseIndex
-         %55 = OpLoad %int %treeIndex
-         %56 = OpSLessThanEqual %bool %53 %55
-               OpSelectionMerge %58 None
-               OpBranchConditional %56 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %50
-         %58 = OpLabel
-         %62 = OpLoad %int %data_1
-         %63 = OpLoad %int %baseIndex
-         %65 = OpAccessChain %_ptr_Private_int %tree_1 %63 %uint_0
-         %66 = OpLoad %int %65
-         %67 = OpSLessThanEqual %bool %62 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %71 = OpLoad %int %baseIndex
-         %72 = OpAccessChain %_ptr_Private_int %tree_1 %71 %uint_1
-         %73 = OpLoad %int %72
-         %74 = OpIEqual %bool %73 %int_n1
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpLoad %int %baseIndex
-         %80 = OpLoad %int %treeIndex
-         %81 = OpAccessChain %_ptr_Private_int %tree_1 %78 %uint_1
-               OpStore %81 %80
-         %83 = OpLoad %int %treeIndex
-         %85 = OpAccessChain %_ptr_Private_BST %tree_1 %83
-         %86 = OpLoad %BST %85
-               OpStore %param %86
-         %88 = OpLoad %int %data_1
-               OpStore %param_1 %88
-         %89 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-         %92 = OpLoad %BST %param
-         %93 = OpAccessChain %_ptr_Private_BST %tree_1 %83
-               OpStore %93 %92
-               OpReturn
-         %77 = OpLabel
-         %94 = OpLoad %int %baseIndex
-         %95 = OpAccessChain %_ptr_Private_int %tree_1 %94 %uint_1
-         %96 = OpLoad %int %95
-               OpStore %baseIndex %96
-               OpBranch %51
-         %75 = OpLabel
-               OpReturn
-         %70 = OpLabel
-         %97 = OpLoad %int %baseIndex
-         %98 = OpAccessChain %_ptr_Private_int %tree_1 %97 %uint_2
-         %99 = OpLoad %int %98
-        %100 = OpIEqual %bool %99 %int_n1
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-        %104 = OpLoad %int %baseIndex
-        %106 = OpLoad %int %treeIndex
-        %107 = OpAccessChain %_ptr_Private_int %tree_1 %104 %uint_2
-               OpStore %107 %106
-        %109 = OpLoad %int %treeIndex
-        %110 = OpAccessChain %_ptr_Private_BST %tree_1 %109
-        %111 = OpLoad %BST %110
-               OpStore %param_2 %111
-        %113 = OpLoad %int %data_1
-               OpStore %param_3 %113
-        %114 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %117 = OpLoad %BST %param_2
-        %118 = OpAccessChain %_ptr_Private_BST %tree_1 %109
-               OpStore %118 %117
-               OpReturn
-        %103 = OpLabel
-        %119 = OpLoad %int %baseIndex
-        %120 = OpAccessChain %_ptr_Private_int %tree_1 %119 %uint_2
-        %121 = OpLoad %int %120
-               OpStore %baseIndex %121
-               OpBranch %51
-        %101 = OpLabel
-               OpReturn
-         %68 = OpLabel
-               OpReturn
-         %51 = OpLabel
-               OpBranch %49
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %122
-     %target = OpFunctionParameter %_ptr_Function_int
-        %125 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %42
-%currentNode = OpVariable %_ptr_Function_BST Function %44
-      %x_220 = OpVariable %_ptr_Function_int Function %42
-               OpStore %index %int_0
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %index
-        %134 = OpINotEqual %bool %133 %int_n1
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %130
-        %135 = OpLabel
-        %138 = OpLoad %int %index
-        %139 = OpAccessChain %_ptr_Private_BST %tree_1 %138
-        %140 = OpLoad %BST %139
-               OpStore %currentNode %140
-        %141 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %142 = OpLoad %int %141
-        %144 = OpLoad %int %target
-        %145 = OpIEqual %bool %142 %144
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %146
-        %147 = OpLabel
-        %149 = OpLoad %int %target
-               OpReturnValue %149
-        %146 = OpLabel
-        %151 = OpLoad %int %target
-        %152 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %153 = OpLoad %int %152
-        %154 = OpSGreaterThan %bool %151 %153
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-        %158 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %159 = OpLoad %int %158
-               OpStore %x_220 %159
-               OpBranch %155
-        %157 = OpLabel
-        %160 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %161 = OpLoad %int %160
-               OpStore %x_220 %161
-               OpBranch %155
-        %155 = OpLabel
-        %162 = OpLoad %int %x_220
-               OpStore %index %162
-               OpBranch %131
-        %131 = OpLabel
-               OpBranch %129
-        %130 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %163
-        %165 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %42
-    %param_4 = OpVariable %_ptr_Function_BST Function %44
-    %param_5 = OpVariable %_ptr_Function_int Function %42
-    %param_6 = OpVariable %_ptr_Function_int Function %42
-    %param_7 = OpVariable %_ptr_Function_int Function %42
-    %param_8 = OpVariable %_ptr_Function_int Function %42
-    %param_9 = OpVariable %_ptr_Function_int Function %42
-   %param_10 = OpVariable %_ptr_Function_int Function %42
-   %param_11 = OpVariable %_ptr_Function_int Function %42
-   %param_12 = OpVariable %_ptr_Function_int Function %42
-   %param_13 = OpVariable %_ptr_Function_int Function %42
-   %param_14 = OpVariable %_ptr_Function_int Function %42
-   %param_15 = OpVariable %_ptr_Function_int Function %42
-   %param_16 = OpVariable %_ptr_Function_int Function %42
-   %param_17 = OpVariable %_ptr_Function_int Function %42
-   %param_18 = OpVariable %_ptr_Function_int Function %42
-   %param_19 = OpVariable %_ptr_Function_int Function %42
-   %param_20 = OpVariable %_ptr_Function_int Function %42
-   %param_21 = OpVariable %_ptr_Function_int Function %42
-   %param_22 = OpVariable %_ptr_Function_int Function %42
-   %param_23 = OpVariable %_ptr_Function_int Function %42
-      %count = OpVariable %_ptr_Function_int Function %42
-          %i = OpVariable %_ptr_Function_int Function %42
-     %result = OpVariable %_ptr_Function_int Function %42
-   %param_24 = OpVariable %_ptr_Function_int Function %42
-               OpStore %treeIndex_1 %int_0
-        %191 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-        %192 = OpLoad %BST %191
-               OpStore %param_4 %192
-               OpStore %param_5 %int_9
-        %194 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %197 = OpLoad %BST %param_4
-        %198 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-               OpStore %198 %197
-        %199 = OpLoad %int %treeIndex_1
-        %201 = OpIAdd %int %199 %int_1
-               OpStore %treeIndex_1 %201
-        %202 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %202
-               OpStore %param_7 %int_5
-        %204 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %207 = OpLoad %int %treeIndex_1
-        %208 = OpIAdd %int %207 %int_1
-               OpStore %treeIndex_1 %208
-        %209 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %209
-               OpStore %param_9 %int_12
-        %211 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %214 = OpLoad %int %treeIndex_1
-        %215 = OpIAdd %int %214 %int_1
-               OpStore %treeIndex_1 %215
-        %216 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %216
-               OpStore %param_11 %int_15
-        %218 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %221 = OpLoad %int %treeIndex_1
-        %222 = OpIAdd %int %221 %int_1
-               OpStore %treeIndex_1 %222
-        %223 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %223
-               OpStore %param_13 %int_7
-        %225 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %228 = OpLoad %int %treeIndex_1
-        %229 = OpIAdd %int %228 %int_1
-               OpStore %treeIndex_1 %229
-        %230 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %230
-               OpStore %param_15 %int_8
-        %232 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %235 = OpLoad %int %treeIndex_1
-        %236 = OpIAdd %int %235 %int_1
-               OpStore %treeIndex_1 %236
-        %237 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %237
-               OpStore %param_17 %int_2
-        %239 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %242 = OpLoad %int %treeIndex_1
-        %243 = OpIAdd %int %242 %int_1
-               OpStore %treeIndex_1 %243
-        %244 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %244
-               OpStore %param_19 %int_6
-        %246 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %249 = OpLoad %int %treeIndex_1
-        %250 = OpIAdd %int %249 %int_1
-               OpStore %treeIndex_1 %250
-        %251 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %251
-               OpStore %param_21 %int_17
-        %253 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %256 = OpLoad %int %treeIndex_1
-        %257 = OpIAdd %int %256 %int_1
-               OpStore %treeIndex_1 %257
-        %258 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %258
-               OpStore %param_23 %int_13
-        %260 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %count %int_0
-               OpStore %i %int_0
-               OpBranch %263
-        %263 = OpLabel
-               OpLoopMerge %264 %265 None
-               OpBranch %266
-        %266 = OpLabel
-        %267 = OpLoad %int %i
-        %269 = OpSLessThan %bool %267 %int_20
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %272
-        %271 = OpLabel
-               OpBranch %270
-        %272 = OpLabel
-               OpBranch %264
-        %270 = OpLabel
-        %273 = OpLoad %int %i
-               OpStore %param_24 %273
-        %274 = OpFunctionCall %int %search_i1_ %param_24
-               OpStore %result %274
-        %276 = OpLoad %int %i
-               OpSelectionMerge %277 None
-               OpSwitch %276 %278 2 %279 5 %279 6 %279 7 %279 8 %279 9 %279 12 %279 13 %279 15 %279 17 %279
-        %279 = OpLabel
-        %280 = OpLoad %int %result
-        %281 = OpLoad %int %i
-        %282 = OpIEqual %bool %280 %281
-               OpSelectionMerge %283 None
-               OpBranchConditional %282 %284 %283
-        %284 = OpLabel
-        %285 = OpLoad %int %count
-        %286 = OpIAdd %int %285 %int_1
-               OpStore %count %286
-               OpBranch %283
-        %283 = OpLabel
-               OpBranch %277
-        %278 = OpLabel
-        %287 = OpLoad %int %result
-        %288 = OpIEqual %bool %287 %int_n1
-               OpSelectionMerge %289 None
-               OpBranchConditional %288 %290 %289
-        %290 = OpLabel
-        %291 = OpLoad %int %count
-        %292 = OpIAdd %int %291 %int_1
-               OpStore %count %292
-               OpBranch %289
-        %289 = OpLabel
-               OpBranch %277
-        %277 = OpLabel
-               OpBranch %265
-        %265 = OpLabel
-        %293 = OpLoad %int %i
-        %294 = OpIAdd %int %293 %int_1
-               OpStore %i %294
-               OpBranch %263
-        %264 = OpLabel
-        %295 = OpLoad %int %count
-        %296 = OpIEqual %bool %295 %int_20
-               OpSelectionMerge %297 None
-               OpBranchConditional %296 %298 %299
-        %298 = OpLabel
-               OpStore %x_GLF_color %302
-               OpBranch %297
-        %299 = OpLabel
-               OpStore %x_GLF_color %303
-               OpBranch %297
-        %297 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %304
-        %307 = OpLabel
-        %308 = OpFunctionCall %void %main_1
-        %309 = OpLoad %v4float %x_GLF_color
-        %310 = OpCompositeConstruct %main_out %309
-               OpReturnValue %310
-               OpFunctionEnd
-       %main = OpFunction %void None %163
-        %312 = OpLabel
-        %313 = OpFunctionCall %main_out %main_inner
-        %314 = OpCompositeExtract %v4float %313 0
-               OpStore %x_GLF_color_1_1 %314
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.wgsl
deleted file mode 100644
index 0016d4c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,264 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> tree_1 : array<BST, 10>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_158 : i32 = *(data);
-  (*(tree)).data = x_158;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_167 : i32 = baseIndex;
-    let x_168 : i32 = *(treeIndex);
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    let x_171 : i32 = *(data_1);
-    let x_172 : i32 = baseIndex;
-    let x_174 : i32 = tree_1[x_172].data;
-    if ((x_171 <= x_174)) {
-      let x_179 : i32 = baseIndex;
-      let x_181 : i32 = tree_1[x_179].leftIndex;
-      if ((x_181 == -1)) {
-        let x_186 : i32 = baseIndex;
-        let x_187 : i32 = *(treeIndex);
-        tree_1[x_186].leftIndex = x_187;
-        let x_189 : i32 = *(treeIndex);
-        let x_191 : BST = tree_1[x_189];
-        param = x_191;
-        let x_192 : i32 = *(data_1);
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_194 : BST = param;
-        tree_1[x_189] = x_194;
-        return;
-      } else {
-        let x_196 : i32 = baseIndex;
-        let x_198 : i32 = tree_1[x_196].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      let x_199 : i32 = baseIndex;
-      let x_201 : i32 = tree_1[x_199].rightIndex;
-      if ((x_201 == -1)) {
-        let x_206 : i32 = baseIndex;
-        let x_207 : i32 = *(treeIndex);
-        tree_1[x_206].rightIndex = x_207;
-        let x_209 : i32 = *(treeIndex);
-        let x_211 : BST = tree_1[x_209];
-        param_2 = x_211;
-        let x_212 : i32 = *(data_1);
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_214 : BST = param_2;
-        tree_1[x_209] = x_214;
-        return;
-      } else {
-        let x_216 : i32 = baseIndex;
-        let x_218 : i32 = tree_1[x_216].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_220 : i32;
-  index = 0;
-  loop {
-    let x_225 : i32 = index;
-    if ((x_225 != -1)) {
-    } else {
-      break;
-    }
-    let x_228 : i32 = index;
-    let x_230 : BST = tree_1[x_228];
-    currentNode = x_230;
-    let x_232 : i32 = currentNode.data;
-    let x_233 : i32 = *(target);
-    if ((x_232 == x_233)) {
-      let x_237 : i32 = *(target);
-      return x_237;
-    }
-    let x_238 : i32 = *(target);
-    let x_240 : i32 = currentNode.data;
-    if ((x_238 > x_240)) {
-      let x_246 : i32 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      let x_248 : i32 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    let x_249 : i32 = x_220;
-    index = x_249;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var count : i32;
-  var i : i32;
-  var result : i32;
-  var param_24 : i32;
-  treeIndex_1 = 0;
-  let x_84 : BST = tree_1[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_86 : BST = param_4;
-  tree_1[0] = x_86;
-  let x_88 : i32 = treeIndex_1;
-  treeIndex_1 = (x_88 + 1);
-  let x_90 : i32 = treeIndex_1;
-  param_6 = x_90;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_92 : i32 = treeIndex_1;
-  treeIndex_1 = (x_92 + 1);
-  let x_94 : i32 = treeIndex_1;
-  param_8 = x_94;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_96 : i32 = treeIndex_1;
-  treeIndex_1 = (x_96 + 1);
-  let x_98 : i32 = treeIndex_1;
-  param_10 = x_98;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_100 : i32 = treeIndex_1;
-  treeIndex_1 = (x_100 + 1);
-  let x_102 : i32 = treeIndex_1;
-  param_12 = x_102;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_104 : i32 = treeIndex_1;
-  treeIndex_1 = (x_104 + 1);
-  let x_106 : i32 = treeIndex_1;
-  param_14 = x_106;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_108 : i32 = treeIndex_1;
-  treeIndex_1 = (x_108 + 1);
-  let x_110 : i32 = treeIndex_1;
-  param_16 = x_110;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_112 : i32 = treeIndex_1;
-  treeIndex_1 = (x_112 + 1);
-  let x_114 : i32 = treeIndex_1;
-  param_18 = x_114;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_116 : i32 = treeIndex_1;
-  treeIndex_1 = (x_116 + 1);
-  let x_118 : i32 = treeIndex_1;
-  param_20 = x_118;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_120 : i32 = treeIndex_1;
-  treeIndex_1 = (x_120 + 1);
-  let x_122 : i32 = treeIndex_1;
-  param_22 = x_122;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  count = 0;
-  i = 0;
-  loop {
-    let x_128 : i32 = i;
-    if ((x_128 < 20)) {
-    } else {
-      break;
-    }
-    let x_131 : i32 = i;
-    param_24 = x_131;
-    let x_132 : i32 = search_i1_(&(param_24));
-    result = x_132;
-    let x_133 : i32 = i;
-    switch(x_133) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_143 : i32 = result;
-        let x_144 : i32 = i;
-        if ((x_143 == x_144)) {
-          let x_148 : i32 = count;
-          count = (x_148 + 1);
-        }
-      }
-      default: {
-        let x_137 : i32 = result;
-        if ((x_137 == -1)) {
-          let x_141 : i32 = count;
-          count = (x_141 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_150 : i32 = i;
-      i = (x_150 + 1);
-    }
-  }
-  let x_152 : i32 = count;
-  if ((x_152 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.hlsl
deleted file mode 100644
index 05f41b9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,240 +0,0 @@
-SKIP: FAILED
-
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static BST tree_1[10] = (BST[10])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
-  const int x_158 = data;
-  tree.data = x_158;
-  tree.leftIndex = -1;
-  tree.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_167 = baseIndex;
-    const int x_168 = treeIndex;
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    const int x_171 = data_1;
-    const int x_174 = tree_1[baseIndex].data;
-    if ((x_171 <= x_174)) {
-      const int x_181 = tree_1[baseIndex].leftIndex;
-      if ((x_181 == -1)) {
-        const int x_186 = baseIndex;
-        const int x_187 = treeIndex;
-        tree_1[x_186].leftIndex = x_187;
-        const int x_189 = treeIndex;
-        const BST x_191 = tree_1[x_189];
-        param = x_191;
-        const int x_192 = data_1;
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree_1[x_189] = param;
-        return;
-      } else {
-        const int x_198 = tree_1[baseIndex].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      const int x_201 = tree_1[baseIndex].rightIndex;
-      if ((x_201 == -1)) {
-        const int x_206 = baseIndex;
-        const int x_207 = treeIndex;
-        tree_1[x_206].rightIndex = x_207;
-        const int x_209 = treeIndex;
-        const BST x_211 = tree_1[x_209];
-        param_2 = x_211;
-        const int x_212 = data_1;
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree_1[x_209] = param_2;
-        return;
-      } else {
-        const int x_218 = tree_1[baseIndex].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_220 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_230 = tree_1[index];
-    currentNode = x_230;
-    const int x_232 = currentNode.data;
-    const int x_233 = target;
-    if ((x_232 == x_233)) {
-      const int x_237 = target;
-      return x_237;
-    }
-    const int x_238 = target;
-    const int x_240 = currentNode.data;
-    if ((x_238 > x_240)) {
-      const int x_246 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      const int x_248 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    index = x_220;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  const BST x_84 = tree_1[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree_1[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  count = 0;
-  i = 0;
-  {
-    for(; (i < 20); i = (i + 1)) {
-      param_24 = i;
-      const int x_132 = search_i1_(param_24);
-      result = x_132;
-      switch(i) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          if ((result == i)) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_2 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_2;
-}
-C:\src\tint\test\Shader@0x00000210665C00D0(25,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x00000210665C00D0(25,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x00000210665C00D0(25,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x00000210665C00D0(25,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-internal error: compilation aborted unexpectedly
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.msl
deleted file mode 100644
index 70b032c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.msl
+++ /dev/null
@@ -1,287 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
-  int const x_158 = *(data);
-  (*(tree)).data = x_158;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_167 = baseIndex;
-    int const x_168 = *(treeIndex);
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    int const x_171 = *(data_1);
-    int const x_172 = baseIndex;
-    int const x_174 = (*(tint_symbol_3)).arr[x_172].data;
-    if ((x_171 <= x_174)) {
-      int const x_179 = baseIndex;
-      int const x_181 = (*(tint_symbol_3)).arr[x_179].leftIndex;
-      if ((x_181 == -1)) {
-        int const x_186 = baseIndex;
-        int const x_187 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_186].leftIndex = x_187;
-        int const x_189 = *(treeIndex);
-        BST const x_191 = (*(tint_symbol_3)).arr[x_189];
-        param = x_191;
-        int const x_192 = *(data_1);
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_194 = param;
-        (*(tint_symbol_3)).arr[x_189] = x_194;
-        return;
-      } else {
-        int const x_196 = baseIndex;
-        int const x_198 = (*(tint_symbol_3)).arr[x_196].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      int const x_199 = baseIndex;
-      int const x_201 = (*(tint_symbol_3)).arr[x_199].rightIndex;
-      if ((x_201 == -1)) {
-        int const x_206 = baseIndex;
-        int const x_207 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_206].rightIndex = x_207;
-        int const x_209 = *(treeIndex);
-        BST const x_211 = (*(tint_symbol_3)).arr[x_209];
-        param_2 = x_211;
-        int const x_212 = *(data_1);
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_214 = param_2;
-        (*(tint_symbol_3)).arr[x_209] = x_214;
-        return;
-      } else {
-        int const x_216 = baseIndex;
-        int const x_218 = (*(tint_symbol_3)).arr[x_216].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_220 = 0;
-  index = 0;
-  while (true) {
-    int const x_225 = index;
-    if ((x_225 != -1)) {
-    } else {
-      break;
-    }
-    int const x_228 = index;
-    BST const x_230 = (*(tint_symbol_4)).arr[x_228];
-    currentNode = x_230;
-    int const x_232 = currentNode.data;
-    int const x_233 = *(target);
-    if ((x_232 == x_233)) {
-      int const x_237 = *(target);
-      return x_237;
-    }
-    int const x_238 = *(target);
-    int const x_240 = currentNode.data;
-    if ((x_238 > x_240)) {
-      int const x_246 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      int const x_248 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    int const x_249 = x_220;
-    index = x_249;
-  }
-  return -1;
-}
-
-void main_1(thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  BST const x_84 = (*(tint_symbol_5)).arr[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_86 = param_4;
-  (*(tint_symbol_5)).arr[0] = x_86;
-  int const x_88 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-  int const x_90 = treeIndex_1;
-  param_6 = x_90;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7), tint_symbol_5);
-  int const x_92 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(1)));
-  int const x_94 = treeIndex_1;
-  param_8 = x_94;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9), tint_symbol_5);
-  int const x_96 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-  int const x_98 = treeIndex_1;
-  param_10 = x_98;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11), tint_symbol_5);
-  int const x_100 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-  int const x_102 = treeIndex_1;
-  param_12 = x_102;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13), tint_symbol_5);
-  int const x_104 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-  int const x_106 = treeIndex_1;
-  param_14 = x_106;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15), tint_symbol_5);
-  int const x_108 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-  int const x_110 = treeIndex_1;
-  param_16 = x_110;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17), tint_symbol_5);
-  int const x_112 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-  int const x_114 = treeIndex_1;
-  param_18 = x_114;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19), tint_symbol_5);
-  int const x_116 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-  int const x_118 = treeIndex_1;
-  param_20 = x_118;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21), tint_symbol_5);
-  int const x_120 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-  int const x_122 = treeIndex_1;
-  param_22 = x_122;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23), tint_symbol_5);
-  count = 0;
-  i = 0;
-  while (true) {
-    int const x_128 = i;
-    if ((x_128 < 20)) {
-    } else {
-      break;
-    }
-    int const x_131 = i;
-    param_24 = x_131;
-    int const x_132 = search_i1_(&(param_24), tint_symbol_5);
-    result = x_132;
-    int const x_133 = i;
-    switch(x_133) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_143 = result;
-        int const x_144 = i;
-        if ((x_143 == x_144)) {
-          int const x_148 = count;
-          count = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_137 = result;
-        if ((x_137 == -1)) {
-          int const x_141 = count;
-          count = as_type<int>((as_type<uint>(x_141) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_150 = i;
-      i = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  int const x_152 = count;
-  if ((x_152 == 20)) {
-    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_6) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_9 = {};
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.spvasm
deleted file mode 100644
index f512823..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,474 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 315
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree_1 "tree_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %tree "tree"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_220 "x_220"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %result "result"
-               OpName %param_24 "param_24"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %13 = OpConstantNull %_arr_BST_uint_10
-     %tree_1 = OpVariable %_ptr_Private__arr_BST_uint_10 Private %13
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %16 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %36 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %42 = OpConstantNull %int
-         %44 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %122 = OpTypeFunction %int %_ptr_Function_int
-        %163 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %302 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %303 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %304 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %16
-       %tree = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %23 = OpLabel
-         %25 = OpLoad %int %data
-         %28 = OpAccessChain %_ptr_Function_int %tree %uint_0
-               OpStore %28 %25
-         %31 = OpAccessChain %_ptr_Function_int %tree %uint_1
-               OpStore %31 %int_n1
-         %35 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %35 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %36
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %40 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %42
-      %param = OpVariable %_ptr_Function_BST Function %44
-    %param_1 = OpVariable %_ptr_Function_int Function %42
-    %param_2 = OpVariable %_ptr_Function_BST Function %44
-    %param_3 = OpVariable %_ptr_Function_int Function %42
-               OpStore %baseIndex %int_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpLoad %int %baseIndex
-         %55 = OpLoad %int %treeIndex
-         %56 = OpSLessThanEqual %bool %53 %55
-               OpSelectionMerge %58 None
-               OpBranchConditional %56 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %50
-         %58 = OpLabel
-         %62 = OpLoad %int %data_1
-         %63 = OpLoad %int %baseIndex
-         %65 = OpAccessChain %_ptr_Private_int %tree_1 %63 %uint_0
-         %66 = OpLoad %int %65
-         %67 = OpSLessThanEqual %bool %62 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %71 = OpLoad %int %baseIndex
-         %72 = OpAccessChain %_ptr_Private_int %tree_1 %71 %uint_1
-         %73 = OpLoad %int %72
-         %74 = OpIEqual %bool %73 %int_n1
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpLoad %int %baseIndex
-         %80 = OpLoad %int %treeIndex
-         %81 = OpAccessChain %_ptr_Private_int %tree_1 %78 %uint_1
-               OpStore %81 %80
-         %83 = OpLoad %int %treeIndex
-         %85 = OpAccessChain %_ptr_Private_BST %tree_1 %83
-         %86 = OpLoad %BST %85
-               OpStore %param %86
-         %88 = OpLoad %int %data_1
-               OpStore %param_1 %88
-         %89 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-         %92 = OpLoad %BST %param
-         %93 = OpAccessChain %_ptr_Private_BST %tree_1 %83
-               OpStore %93 %92
-               OpReturn
-         %77 = OpLabel
-         %94 = OpLoad %int %baseIndex
-         %95 = OpAccessChain %_ptr_Private_int %tree_1 %94 %uint_1
-         %96 = OpLoad %int %95
-               OpStore %baseIndex %96
-               OpBranch %51
-         %75 = OpLabel
-               OpReturn
-         %70 = OpLabel
-         %97 = OpLoad %int %baseIndex
-         %98 = OpAccessChain %_ptr_Private_int %tree_1 %97 %uint_2
-         %99 = OpLoad %int %98
-        %100 = OpIEqual %bool %99 %int_n1
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-        %104 = OpLoad %int %baseIndex
-        %106 = OpLoad %int %treeIndex
-        %107 = OpAccessChain %_ptr_Private_int %tree_1 %104 %uint_2
-               OpStore %107 %106
-        %109 = OpLoad %int %treeIndex
-        %110 = OpAccessChain %_ptr_Private_BST %tree_1 %109
-        %111 = OpLoad %BST %110
-               OpStore %param_2 %111
-        %113 = OpLoad %int %data_1
-               OpStore %param_3 %113
-        %114 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %117 = OpLoad %BST %param_2
-        %118 = OpAccessChain %_ptr_Private_BST %tree_1 %109
-               OpStore %118 %117
-               OpReturn
-        %103 = OpLabel
-        %119 = OpLoad %int %baseIndex
-        %120 = OpAccessChain %_ptr_Private_int %tree_1 %119 %uint_2
-        %121 = OpLoad %int %120
-               OpStore %baseIndex %121
-               OpBranch %51
-        %101 = OpLabel
-               OpReturn
-         %68 = OpLabel
-               OpReturn
-         %51 = OpLabel
-               OpBranch %49
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %122
-     %target = OpFunctionParameter %_ptr_Function_int
-        %125 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %42
-%currentNode = OpVariable %_ptr_Function_BST Function %44
-      %x_220 = OpVariable %_ptr_Function_int Function %42
-               OpStore %index %int_0
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %index
-        %134 = OpINotEqual %bool %133 %int_n1
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %130
-        %135 = OpLabel
-        %138 = OpLoad %int %index
-        %139 = OpAccessChain %_ptr_Private_BST %tree_1 %138
-        %140 = OpLoad %BST %139
-               OpStore %currentNode %140
-        %141 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %142 = OpLoad %int %141
-        %144 = OpLoad %int %target
-        %145 = OpIEqual %bool %142 %144
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %146
-        %147 = OpLabel
-        %149 = OpLoad %int %target
-               OpReturnValue %149
-        %146 = OpLabel
-        %151 = OpLoad %int %target
-        %152 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %153 = OpLoad %int %152
-        %154 = OpSGreaterThan %bool %151 %153
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-        %158 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %159 = OpLoad %int %158
-               OpStore %x_220 %159
-               OpBranch %155
-        %157 = OpLabel
-        %160 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %161 = OpLoad %int %160
-               OpStore %x_220 %161
-               OpBranch %155
-        %155 = OpLabel
-        %162 = OpLoad %int %x_220
-               OpStore %index %162
-               OpBranch %131
-        %131 = OpLabel
-               OpBranch %129
-        %130 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %163
-        %165 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %42
-    %param_4 = OpVariable %_ptr_Function_BST Function %44
-    %param_5 = OpVariable %_ptr_Function_int Function %42
-    %param_6 = OpVariable %_ptr_Function_int Function %42
-    %param_7 = OpVariable %_ptr_Function_int Function %42
-    %param_8 = OpVariable %_ptr_Function_int Function %42
-    %param_9 = OpVariable %_ptr_Function_int Function %42
-   %param_10 = OpVariable %_ptr_Function_int Function %42
-   %param_11 = OpVariable %_ptr_Function_int Function %42
-   %param_12 = OpVariable %_ptr_Function_int Function %42
-   %param_13 = OpVariable %_ptr_Function_int Function %42
-   %param_14 = OpVariable %_ptr_Function_int Function %42
-   %param_15 = OpVariable %_ptr_Function_int Function %42
-   %param_16 = OpVariable %_ptr_Function_int Function %42
-   %param_17 = OpVariable %_ptr_Function_int Function %42
-   %param_18 = OpVariable %_ptr_Function_int Function %42
-   %param_19 = OpVariable %_ptr_Function_int Function %42
-   %param_20 = OpVariable %_ptr_Function_int Function %42
-   %param_21 = OpVariable %_ptr_Function_int Function %42
-   %param_22 = OpVariable %_ptr_Function_int Function %42
-   %param_23 = OpVariable %_ptr_Function_int Function %42
-      %count = OpVariable %_ptr_Function_int Function %42
-          %i = OpVariable %_ptr_Function_int Function %42
-     %result = OpVariable %_ptr_Function_int Function %42
-   %param_24 = OpVariable %_ptr_Function_int Function %42
-               OpStore %treeIndex_1 %int_0
-        %191 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-        %192 = OpLoad %BST %191
-               OpStore %param_4 %192
-               OpStore %param_5 %int_9
-        %194 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %197 = OpLoad %BST %param_4
-        %198 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-               OpStore %198 %197
-        %199 = OpLoad %int %treeIndex_1
-        %201 = OpIAdd %int %199 %int_1
-               OpStore %treeIndex_1 %201
-        %202 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %202
-               OpStore %param_7 %int_5
-        %204 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %207 = OpLoad %int %treeIndex_1
-        %208 = OpIAdd %int %207 %int_1
-               OpStore %treeIndex_1 %208
-        %209 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %209
-               OpStore %param_9 %int_12
-        %211 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %214 = OpLoad %int %treeIndex_1
-        %215 = OpIAdd %int %214 %int_1
-               OpStore %treeIndex_1 %215
-        %216 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %216
-               OpStore %param_11 %int_15
-        %218 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %221 = OpLoad %int %treeIndex_1
-        %222 = OpIAdd %int %221 %int_1
-               OpStore %treeIndex_1 %222
-        %223 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %223
-               OpStore %param_13 %int_7
-        %225 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %228 = OpLoad %int %treeIndex_1
-        %229 = OpIAdd %int %228 %int_1
-               OpStore %treeIndex_1 %229
-        %230 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %230
-               OpStore %param_15 %int_8
-        %232 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %235 = OpLoad %int %treeIndex_1
-        %236 = OpIAdd %int %235 %int_1
-               OpStore %treeIndex_1 %236
-        %237 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %237
-               OpStore %param_17 %int_2
-        %239 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %242 = OpLoad %int %treeIndex_1
-        %243 = OpIAdd %int %242 %int_1
-               OpStore %treeIndex_1 %243
-        %244 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %244
-               OpStore %param_19 %int_6
-        %246 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %249 = OpLoad %int %treeIndex_1
-        %250 = OpIAdd %int %249 %int_1
-               OpStore %treeIndex_1 %250
-        %251 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %251
-               OpStore %param_21 %int_17
-        %253 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %256 = OpLoad %int %treeIndex_1
-        %257 = OpIAdd %int %256 %int_1
-               OpStore %treeIndex_1 %257
-        %258 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %258
-               OpStore %param_23 %int_13
-        %260 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %count %int_0
-               OpStore %i %int_0
-               OpBranch %263
-        %263 = OpLabel
-               OpLoopMerge %264 %265 None
-               OpBranch %266
-        %266 = OpLabel
-        %267 = OpLoad %int %i
-        %269 = OpSLessThan %bool %267 %int_20
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %272
-        %271 = OpLabel
-               OpBranch %270
-        %272 = OpLabel
-               OpBranch %264
-        %270 = OpLabel
-        %273 = OpLoad %int %i
-               OpStore %param_24 %273
-        %274 = OpFunctionCall %int %search_i1_ %param_24
-               OpStore %result %274
-        %276 = OpLoad %int %i
-               OpSelectionMerge %277 None
-               OpSwitch %276 %278 2 %279 5 %279 6 %279 7 %279 8 %279 9 %279 12 %279 13 %279 15 %279 17 %279
-        %279 = OpLabel
-        %280 = OpLoad %int %result
-        %281 = OpLoad %int %i
-        %282 = OpIEqual %bool %280 %281
-               OpSelectionMerge %283 None
-               OpBranchConditional %282 %284 %283
-        %284 = OpLabel
-        %285 = OpLoad %int %count
-        %286 = OpIAdd %int %285 %int_1
-               OpStore %count %286
-               OpBranch %283
-        %283 = OpLabel
-               OpBranch %277
-        %278 = OpLabel
-        %287 = OpLoad %int %result
-        %288 = OpIEqual %bool %287 %int_n1
-               OpSelectionMerge %289 None
-               OpBranchConditional %288 %290 %289
-        %290 = OpLabel
-        %291 = OpLoad %int %count
-        %292 = OpIAdd %int %291 %int_1
-               OpStore %count %292
-               OpBranch %289
-        %289 = OpLabel
-               OpBranch %277
-        %277 = OpLabel
-               OpBranch %265
-        %265 = OpLabel
-        %293 = OpLoad %int %i
-        %294 = OpIAdd %int %293 %int_1
-               OpStore %i %294
-               OpBranch %263
-        %264 = OpLabel
-        %295 = OpLoad %int %count
-        %296 = OpIEqual %bool %295 %int_20
-               OpSelectionMerge %297 None
-               OpBranchConditional %296 %298 %299
-        %298 = OpLabel
-               OpStore %x_GLF_color %302
-               OpBranch %297
-        %299 = OpLabel
-               OpStore %x_GLF_color %303
-               OpBranch %297
-        %297 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %304
-        %307 = OpLabel
-        %308 = OpFunctionCall %void %main_1
-        %309 = OpLoad %v4float %x_GLF_color
-        %310 = OpCompositeConstruct %main_out %309
-               OpReturnValue %310
-               OpFunctionEnd
-       %main = OpFunction %void None %163
-        %312 = OpLabel
-        %313 = OpFunctionCall %main_out %main_inner
-        %314 = OpCompositeExtract %v4float %313 0
-               OpStore %x_GLF_color_1_1 %314
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.wgsl
deleted file mode 100644
index 0016d4c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,264 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> tree_1 : array<BST, 10>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_158 : i32 = *(data);
-  (*(tree)).data = x_158;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_167 : i32 = baseIndex;
-    let x_168 : i32 = *(treeIndex);
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    let x_171 : i32 = *(data_1);
-    let x_172 : i32 = baseIndex;
-    let x_174 : i32 = tree_1[x_172].data;
-    if ((x_171 <= x_174)) {
-      let x_179 : i32 = baseIndex;
-      let x_181 : i32 = tree_1[x_179].leftIndex;
-      if ((x_181 == -1)) {
-        let x_186 : i32 = baseIndex;
-        let x_187 : i32 = *(treeIndex);
-        tree_1[x_186].leftIndex = x_187;
-        let x_189 : i32 = *(treeIndex);
-        let x_191 : BST = tree_1[x_189];
-        param = x_191;
-        let x_192 : i32 = *(data_1);
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_194 : BST = param;
-        tree_1[x_189] = x_194;
-        return;
-      } else {
-        let x_196 : i32 = baseIndex;
-        let x_198 : i32 = tree_1[x_196].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      let x_199 : i32 = baseIndex;
-      let x_201 : i32 = tree_1[x_199].rightIndex;
-      if ((x_201 == -1)) {
-        let x_206 : i32 = baseIndex;
-        let x_207 : i32 = *(treeIndex);
-        tree_1[x_206].rightIndex = x_207;
-        let x_209 : i32 = *(treeIndex);
-        let x_211 : BST = tree_1[x_209];
-        param_2 = x_211;
-        let x_212 : i32 = *(data_1);
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_214 : BST = param_2;
-        tree_1[x_209] = x_214;
-        return;
-      } else {
-        let x_216 : i32 = baseIndex;
-        let x_218 : i32 = tree_1[x_216].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_220 : i32;
-  index = 0;
-  loop {
-    let x_225 : i32 = index;
-    if ((x_225 != -1)) {
-    } else {
-      break;
-    }
-    let x_228 : i32 = index;
-    let x_230 : BST = tree_1[x_228];
-    currentNode = x_230;
-    let x_232 : i32 = currentNode.data;
-    let x_233 : i32 = *(target);
-    if ((x_232 == x_233)) {
-      let x_237 : i32 = *(target);
-      return x_237;
-    }
-    let x_238 : i32 = *(target);
-    let x_240 : i32 = currentNode.data;
-    if ((x_238 > x_240)) {
-      let x_246 : i32 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      let x_248 : i32 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    let x_249 : i32 = x_220;
-    index = x_249;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var count : i32;
-  var i : i32;
-  var result : i32;
-  var param_24 : i32;
-  treeIndex_1 = 0;
-  let x_84 : BST = tree_1[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_86 : BST = param_4;
-  tree_1[0] = x_86;
-  let x_88 : i32 = treeIndex_1;
-  treeIndex_1 = (x_88 + 1);
-  let x_90 : i32 = treeIndex_1;
-  param_6 = x_90;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_92 : i32 = treeIndex_1;
-  treeIndex_1 = (x_92 + 1);
-  let x_94 : i32 = treeIndex_1;
-  param_8 = x_94;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_96 : i32 = treeIndex_1;
-  treeIndex_1 = (x_96 + 1);
-  let x_98 : i32 = treeIndex_1;
-  param_10 = x_98;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_100 : i32 = treeIndex_1;
-  treeIndex_1 = (x_100 + 1);
-  let x_102 : i32 = treeIndex_1;
-  param_12 = x_102;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_104 : i32 = treeIndex_1;
-  treeIndex_1 = (x_104 + 1);
-  let x_106 : i32 = treeIndex_1;
-  param_14 = x_106;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_108 : i32 = treeIndex_1;
-  treeIndex_1 = (x_108 + 1);
-  let x_110 : i32 = treeIndex_1;
-  param_16 = x_110;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_112 : i32 = treeIndex_1;
-  treeIndex_1 = (x_112 + 1);
-  let x_114 : i32 = treeIndex_1;
-  param_18 = x_114;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_116 : i32 = treeIndex_1;
-  treeIndex_1 = (x_116 + 1);
-  let x_118 : i32 = treeIndex_1;
-  param_20 = x_118;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_120 : i32 = treeIndex_1;
-  treeIndex_1 = (x_120 + 1);
-  let x_122 : i32 = treeIndex_1;
-  param_22 = x_122;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  count = 0;
-  i = 0;
-  loop {
-    let x_128 : i32 = i;
-    if ((x_128 < 20)) {
-    } else {
-      break;
-    }
-    let x_131 : i32 = i;
-    param_24 = x_131;
-    let x_132 : i32 = search_i1_(&(param_24));
-    result = x_132;
-    let x_133 : i32 = i;
-    switch(x_133) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_143 : i32 = result;
-        let x_144 : i32 = i;
-        if ((x_143 == x_144)) {
-          let x_148 : i32 = count;
-          count = (x_148 + 1);
-        }
-      }
-      default: {
-        let x_137 : i32 = result;
-        if ((x_137 == -1)) {
-          let x_141 : i32 = count;
-          count = (x_141 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_150 : i32 = i;
-      i = (x_150 + 1);
-    }
-  }
-  let x_152 : i32 = count;
-  if ((x_152 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.hlsl
deleted file mode 100644
index 306359b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,255 +0,0 @@
-SKIP: FAILED
-
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static BST tree_1[10] = (BST[10])0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
-  const int x_169 = data;
-  tree.data = x_169;
-  tree.leftIndex = -1;
-  tree.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_178 = baseIndex;
-    const int x_179 = treeIndex;
-    if ((x_178 <= x_179)) {
-    } else {
-      break;
-    }
-    const int x_182 = data_1;
-    const int x_185 = tree_1[baseIndex].data;
-    if ((x_182 <= x_185)) {
-      const int x_192 = tree_1[baseIndex].leftIndex;
-      if ((x_192 == -1)) {
-        const int x_197 = baseIndex;
-        const int x_198 = treeIndex;
-        tree_1[x_197].leftIndex = x_198;
-        const int x_200 = treeIndex;
-        const BST x_202 = tree_1[x_200];
-        param = x_202;
-        const int x_203 = data_1;
-        param_1 = x_203;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree_1[x_200] = param;
-        return;
-      } else {
-        const int x_209 = tree_1[baseIndex].leftIndex;
-        baseIndex = x_209;
-        continue;
-      }
-      return;
-    } else {
-      const int x_212 = tree_1[baseIndex].rightIndex;
-      if ((x_212 == -1)) {
-        const int x_217 = baseIndex;
-        const int x_218 = treeIndex;
-        tree_1[x_217].rightIndex = x_218;
-        const int x_220 = treeIndex;
-        const BST x_222 = tree_1[x_220];
-        param_2 = x_222;
-        const int x_223 = data_1;
-        param_3 = x_223;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree_1[x_220] = param_2;
-        return;
-      } else {
-        const int x_229 = tree_1[baseIndex].rightIndex;
-        baseIndex = x_229;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_231 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_241 = tree_1[index];
-    currentNode = x_241;
-    const int x_243 = currentNode.data;
-    const int x_244 = target;
-    if ((x_243 == x_244)) {
-      const int x_248 = target;
-      return x_248;
-    }
-    const int x_249 = target;
-    const int x_251 = currentNode.data;
-    if ((x_249 > x_251)) {
-      const int x_257 = currentNode.rightIndex;
-      x_231 = x_257;
-    } else {
-      const int x_259 = currentNode.leftIndex;
-      x_231 = x_259;
-    }
-    index = x_231;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  const BST x_88 = tree_1[0];
-  param_4 = x_88;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree_1[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  count = 0;
-  i = 0;
-  {
-    for(; (i < 20); i = (i + 1)) {
-      bool x_155 = false;
-      bool x_156_phi = false;
-      param_24 = i;
-      const int x_136 = search_i1_(param_24);
-      result = x_136;
-      switch(i) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          const bool x_149 = (result == i);
-          x_156_phi = x_149;
-          if (!(x_149)) {
-            const float x_154 = gl_FragCoord.x;
-            x_155 = (x_154 < 0.0f);
-            x_156_phi = x_155;
-          }
-          if (x_156_phi) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_4 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_4;
-}
-C:\src\tint\test\Shader@0x000001B9F45EF8C0(26,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001B9F45EF8C0(26,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001B9F45EF8C0(26,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001B9F45EF8C0(26,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-internal error: compilation aborted unexpectedly
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.msl
deleted file mode 100644
index 2597e37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.msl
+++ /dev/null
@@ -1,299 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
-  int const x_169 = *(data);
-  (*(tree)).data = x_169;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_178 = baseIndex;
-    int const x_179 = *(treeIndex);
-    if ((x_178 <= x_179)) {
-    } else {
-      break;
-    }
-    int const x_182 = *(data_1);
-    int const x_183 = baseIndex;
-    int const x_185 = (*(tint_symbol_3)).arr[x_183].data;
-    if ((x_182 <= x_185)) {
-      int const x_190 = baseIndex;
-      int const x_192 = (*(tint_symbol_3)).arr[x_190].leftIndex;
-      if ((x_192 == -1)) {
-        int const x_197 = baseIndex;
-        int const x_198 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_197].leftIndex = x_198;
-        int const x_200 = *(treeIndex);
-        BST const x_202 = (*(tint_symbol_3)).arr[x_200];
-        param = x_202;
-        int const x_203 = *(data_1);
-        param_1 = x_203;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_205 = param;
-        (*(tint_symbol_3)).arr[x_200] = x_205;
-        return;
-      } else {
-        int const x_207 = baseIndex;
-        int const x_209 = (*(tint_symbol_3)).arr[x_207].leftIndex;
-        baseIndex = x_209;
-        continue;
-      }
-      return;
-    } else {
-      int const x_210 = baseIndex;
-      int const x_212 = (*(tint_symbol_3)).arr[x_210].rightIndex;
-      if ((x_212 == -1)) {
-        int const x_217 = baseIndex;
-        int const x_218 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_217].rightIndex = x_218;
-        int const x_220 = *(treeIndex);
-        BST const x_222 = (*(tint_symbol_3)).arr[x_220];
-        param_2 = x_222;
-        int const x_223 = *(data_1);
-        param_3 = x_223;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_225 = param_2;
-        (*(tint_symbol_3)).arr[x_220] = x_225;
-        return;
-      } else {
-        int const x_227 = baseIndex;
-        int const x_229 = (*(tint_symbol_3)).arr[x_227].rightIndex;
-        baseIndex = x_229;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_231 = 0;
-  index = 0;
-  while (true) {
-    int const x_236 = index;
-    if ((x_236 != -1)) {
-    } else {
-      break;
-    }
-    int const x_239 = index;
-    BST const x_241 = (*(tint_symbol_4)).arr[x_239];
-    currentNode = x_241;
-    int const x_243 = currentNode.data;
-    int const x_244 = *(target);
-    if ((x_243 == x_244)) {
-      int const x_248 = *(target);
-      return x_248;
-    }
-    int const x_249 = *(target);
-    int const x_251 = currentNode.data;
-    if ((x_249 > x_251)) {
-      int const x_257 = currentNode.rightIndex;
-      x_231 = x_257;
-    } else {
-      int const x_259 = currentNode.leftIndex;
-      x_231 = x_259;
-    }
-    int const x_260 = x_231;
-    index = x_260;
-  }
-  return -1;
-}
-
-void main_1(thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  BST const x_88 = (*(tint_symbol_5)).arr[0];
-  param_4 = x_88;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_90 = param_4;
-  (*(tint_symbol_5)).arr[0] = x_90;
-  int const x_92 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(1)));
-  int const x_94 = treeIndex_1;
-  param_6 = x_94;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7), tint_symbol_5);
-  int const x_96 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-  int const x_98 = treeIndex_1;
-  param_8 = x_98;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9), tint_symbol_5);
-  int const x_100 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-  int const x_102 = treeIndex_1;
-  param_10 = x_102;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11), tint_symbol_5);
-  int const x_104 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-  int const x_106 = treeIndex_1;
-  param_12 = x_106;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13), tint_symbol_5);
-  int const x_108 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-  int const x_110 = treeIndex_1;
-  param_14 = x_110;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15), tint_symbol_5);
-  int const x_112 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-  int const x_114 = treeIndex_1;
-  param_16 = x_114;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17), tint_symbol_5);
-  int const x_116 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-  int const x_118 = treeIndex_1;
-  param_18 = x_118;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19), tint_symbol_5);
-  int const x_120 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-  int const x_122 = treeIndex_1;
-  param_20 = x_122;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21), tint_symbol_5);
-  int const x_124 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-  int const x_126 = treeIndex_1;
-  param_22 = x_126;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23), tint_symbol_5);
-  count = 0;
-  i = 0;
-  while (true) {
-    int const x_132 = i;
-    if ((x_132 < 20)) {
-    } else {
-      break;
-    }
-    bool x_155 = false;
-    bool x_156_phi = false;
-    int const x_135 = i;
-    param_24 = x_135;
-    int const x_136 = search_i1_(&(param_24), tint_symbol_5);
-    result = x_136;
-    int const x_137 = i;
-    switch(x_137) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_147 = result;
-        int const x_148 = i;
-        bool const x_149 = (x_147 == x_148);
-        x_156_phi = x_149;
-        if (!(x_149)) {
-          float const x_154 = (*(tint_symbol_6)).x;
-          x_155 = (x_154 < 0.0f);
-          x_156_phi = x_155;
-        }
-        bool const x_156 = x_156_phi;
-        if (x_156) {
-          int const x_159 = count;
-          count = as_type<int>((as_type<uint>(x_159) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_141 = result;
-        if ((x_141 == -1)) {
-          int const x_145 = count;
-          count = as_type<int>((as_type<uint>(x_145) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_161 = i;
-      i = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
-    }
-  }
-  int const x_163 = count;
-  if ((x_163 == 20)) {
-    *(tint_symbol_7) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_7) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(tint_symbol_9, tint_symbol_8, tint_symbol_10);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread tint_array_wrapper tint_symbol_12 = {};
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.spvasm
deleted file mode 100644
index 1173db6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,505 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 333
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree_1 "tree_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %tree "tree"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_231 "x_231"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %result "result"
-               OpName %param_24 "param_24"
-               OpName %x_155 "x_155"
-               OpName %x_156_phi "x_156_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %15 = OpConstantNull %_arr_BST_uint_10
-     %tree_1 = OpVariable %_ptr_Private__arr_BST_uint_10 Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %39 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %45 = OpConstantNull %int
-         %47 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %125 = OpTypeFunction %int %_ptr_Function_int
-        %166 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_20 = OpConstant %int 20
-%_ptr_Function_bool = OpTypePointer Function %bool
-        %278 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %318 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %319 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %320 = OpTypeFunction %main_out %v4float
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %19
-       %tree = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %26 = OpLabel
-         %28 = OpLoad %int %data
-         %31 = OpAccessChain %_ptr_Function_int %tree %uint_0
-               OpStore %31 %28
-         %34 = OpAccessChain %_ptr_Function_int %tree %uint_1
-               OpStore %34 %int_n1
-         %38 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %38 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %39
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %43 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %45
-      %param = OpVariable %_ptr_Function_BST Function %47
-    %param_1 = OpVariable %_ptr_Function_int Function %45
-    %param_2 = OpVariable %_ptr_Function_BST Function %47
-    %param_3 = OpVariable %_ptr_Function_int Function %45
-               OpStore %baseIndex %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %baseIndex
-         %58 = OpLoad %int %treeIndex
-         %59 = OpSLessThanEqual %bool %56 %58
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %53
-         %61 = OpLabel
-         %65 = OpLoad %int %data_1
-         %66 = OpLoad %int %baseIndex
-         %68 = OpAccessChain %_ptr_Private_int %tree_1 %66 %uint_0
-         %69 = OpLoad %int %68
-         %70 = OpSLessThanEqual %bool %65 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpLoad %int %baseIndex
-         %75 = OpAccessChain %_ptr_Private_int %tree_1 %74 %uint_1
-         %76 = OpLoad %int %75
-         %77 = OpIEqual %bool %76 %int_n1
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpLoad %int %baseIndex
-         %83 = OpLoad %int %treeIndex
-         %84 = OpAccessChain %_ptr_Private_int %tree_1 %81 %uint_1
-               OpStore %84 %83
-         %86 = OpLoad %int %treeIndex
-         %88 = OpAccessChain %_ptr_Private_BST %tree_1 %86
-         %89 = OpLoad %BST %88
-               OpStore %param %89
-         %91 = OpLoad %int %data_1
-               OpStore %param_1 %91
-         %92 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-         %95 = OpLoad %BST %param
-         %96 = OpAccessChain %_ptr_Private_BST %tree_1 %86
-               OpStore %96 %95
-               OpReturn
-         %80 = OpLabel
-         %97 = OpLoad %int %baseIndex
-         %98 = OpAccessChain %_ptr_Private_int %tree_1 %97 %uint_1
-         %99 = OpLoad %int %98
-               OpStore %baseIndex %99
-               OpBranch %54
-         %78 = OpLabel
-               OpReturn
-         %73 = OpLabel
-        %100 = OpLoad %int %baseIndex
-        %101 = OpAccessChain %_ptr_Private_int %tree_1 %100 %uint_2
-        %102 = OpLoad %int %101
-        %103 = OpIEqual %bool %102 %int_n1
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %106
-        %105 = OpLabel
-        %107 = OpLoad %int %baseIndex
-        %109 = OpLoad %int %treeIndex
-        %110 = OpAccessChain %_ptr_Private_int %tree_1 %107 %uint_2
-               OpStore %110 %109
-        %112 = OpLoad %int %treeIndex
-        %113 = OpAccessChain %_ptr_Private_BST %tree_1 %112
-        %114 = OpLoad %BST %113
-               OpStore %param_2 %114
-        %116 = OpLoad %int %data_1
-               OpStore %param_3 %116
-        %117 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %120 = OpLoad %BST %param_2
-        %121 = OpAccessChain %_ptr_Private_BST %tree_1 %112
-               OpStore %121 %120
-               OpReturn
-        %106 = OpLabel
-        %122 = OpLoad %int %baseIndex
-        %123 = OpAccessChain %_ptr_Private_int %tree_1 %122 %uint_2
-        %124 = OpLoad %int %123
-               OpStore %baseIndex %124
-               OpBranch %54
-        %104 = OpLabel
-               OpReturn
-         %71 = OpLabel
-               OpReturn
-         %54 = OpLabel
-               OpBranch %52
-         %53 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %125
-     %target = OpFunctionParameter %_ptr_Function_int
-        %128 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %45
-%currentNode = OpVariable %_ptr_Function_BST Function %47
-      %x_231 = OpVariable %_ptr_Function_int Function %45
-               OpStore %index %int_0
-               OpBranch %132
-        %132 = OpLabel
-               OpLoopMerge %133 %134 None
-               OpBranch %135
-        %135 = OpLabel
-        %136 = OpLoad %int %index
-        %137 = OpINotEqual %bool %136 %int_n1
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %140
-        %139 = OpLabel
-               OpBranch %138
-        %140 = OpLabel
-               OpBranch %133
-        %138 = OpLabel
-        %141 = OpLoad %int %index
-        %142 = OpAccessChain %_ptr_Private_BST %tree_1 %141
-        %143 = OpLoad %BST %142
-               OpStore %currentNode %143
-        %144 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %145 = OpLoad %int %144
-        %147 = OpLoad %int %target
-        %148 = OpIEqual %bool %145 %147
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %149
-        %150 = OpLabel
-        %152 = OpLoad %int %target
-               OpReturnValue %152
-        %149 = OpLabel
-        %154 = OpLoad %int %target
-        %155 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %156 = OpLoad %int %155
-        %157 = OpSGreaterThan %bool %154 %156
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %160
-        %159 = OpLabel
-        %161 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %162 = OpLoad %int %161
-               OpStore %x_231 %162
-               OpBranch %158
-        %160 = OpLabel
-        %163 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %164 = OpLoad %int %163
-               OpStore %x_231 %164
-               OpBranch %158
-        %158 = OpLabel
-        %165 = OpLoad %int %x_231
-               OpStore %index %165
-               OpBranch %134
-        %134 = OpLabel
-               OpBranch %132
-        %133 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %166
-        %168 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %45
-    %param_4 = OpVariable %_ptr_Function_BST Function %47
-    %param_5 = OpVariable %_ptr_Function_int Function %45
-    %param_6 = OpVariable %_ptr_Function_int Function %45
-    %param_7 = OpVariable %_ptr_Function_int Function %45
-    %param_8 = OpVariable %_ptr_Function_int Function %45
-    %param_9 = OpVariable %_ptr_Function_int Function %45
-   %param_10 = OpVariable %_ptr_Function_int Function %45
-   %param_11 = OpVariable %_ptr_Function_int Function %45
-   %param_12 = OpVariable %_ptr_Function_int Function %45
-   %param_13 = OpVariable %_ptr_Function_int Function %45
-   %param_14 = OpVariable %_ptr_Function_int Function %45
-   %param_15 = OpVariable %_ptr_Function_int Function %45
-   %param_16 = OpVariable %_ptr_Function_int Function %45
-   %param_17 = OpVariable %_ptr_Function_int Function %45
-   %param_18 = OpVariable %_ptr_Function_int Function %45
-   %param_19 = OpVariable %_ptr_Function_int Function %45
-   %param_20 = OpVariable %_ptr_Function_int Function %45
-   %param_21 = OpVariable %_ptr_Function_int Function %45
-   %param_22 = OpVariable %_ptr_Function_int Function %45
-   %param_23 = OpVariable %_ptr_Function_int Function %45
-      %count = OpVariable %_ptr_Function_int Function %45
-          %i = OpVariable %_ptr_Function_int Function %45
-     %result = OpVariable %_ptr_Function_int Function %45
-   %param_24 = OpVariable %_ptr_Function_int Function %45
-      %x_155 = OpVariable %_ptr_Function_bool Function %278
-  %x_156_phi = OpVariable %_ptr_Function_bool Function %278
-               OpStore %treeIndex_1 %int_0
-        %194 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-        %195 = OpLoad %BST %194
-               OpStore %param_4 %195
-               OpStore %param_5 %int_9
-        %197 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %200 = OpLoad %BST %param_4
-        %201 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-               OpStore %201 %200
-        %202 = OpLoad %int %treeIndex_1
-        %204 = OpIAdd %int %202 %int_1
-               OpStore %treeIndex_1 %204
-        %205 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %205
-               OpStore %param_7 %int_5
-        %207 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %210 = OpLoad %int %treeIndex_1
-        %211 = OpIAdd %int %210 %int_1
-               OpStore %treeIndex_1 %211
-        %212 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %212
-               OpStore %param_9 %int_12
-        %214 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %217 = OpLoad %int %treeIndex_1
-        %218 = OpIAdd %int %217 %int_1
-               OpStore %treeIndex_1 %218
-        %219 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %219
-               OpStore %param_11 %int_15
-        %221 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %224 = OpLoad %int %treeIndex_1
-        %225 = OpIAdd %int %224 %int_1
-               OpStore %treeIndex_1 %225
-        %226 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %226
-               OpStore %param_13 %int_7
-        %228 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %231 = OpLoad %int %treeIndex_1
-        %232 = OpIAdd %int %231 %int_1
-               OpStore %treeIndex_1 %232
-        %233 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %233
-               OpStore %param_15 %int_8
-        %235 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %238 = OpLoad %int %treeIndex_1
-        %239 = OpIAdd %int %238 %int_1
-               OpStore %treeIndex_1 %239
-        %240 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %240
-               OpStore %param_17 %int_2
-        %242 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %245 = OpLoad %int %treeIndex_1
-        %246 = OpIAdd %int %245 %int_1
-               OpStore %treeIndex_1 %246
-        %247 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %247
-               OpStore %param_19 %int_6
-        %249 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %252 = OpLoad %int %treeIndex_1
-        %253 = OpIAdd %int %252 %int_1
-               OpStore %treeIndex_1 %253
-        %254 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %254
-               OpStore %param_21 %int_17
-        %256 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %259 = OpLoad %int %treeIndex_1
-        %260 = OpIAdd %int %259 %int_1
-               OpStore %treeIndex_1 %260
-        %261 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %261
-               OpStore %param_23 %int_13
-        %263 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %count %int_0
-               OpStore %i %int_0
-               OpBranch %266
-        %266 = OpLabel
-               OpLoopMerge %267 %268 None
-               OpBranch %269
-        %269 = OpLabel
-        %270 = OpLoad %int %i
-        %272 = OpSLessThan %bool %270 %int_20
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %275
-        %274 = OpLabel
-               OpBranch %273
-        %275 = OpLabel
-               OpBranch %267
-        %273 = OpLabel
-        %280 = OpLoad %int %i
-               OpStore %param_24 %280
-        %281 = OpFunctionCall %int %search_i1_ %param_24
-               OpStore %result %281
-        %283 = OpLoad %int %i
-               OpSelectionMerge %284 None
-               OpSwitch %283 %285 2 %286 5 %286 6 %286 7 %286 8 %286 9 %286 12 %286 13 %286 15 %286 17 %286
-        %286 = OpLabel
-        %287 = OpLoad %int %result
-        %288 = OpLoad %int %i
-        %289 = OpIEqual %bool %287 %288
-               OpStore %x_156_phi %289
-        %290 = OpLogicalNot %bool %289
-               OpSelectionMerge %291 None
-               OpBranchConditional %290 %292 %291
-        %292 = OpLabel
-        %294 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %295 = OpLoad %float %294
-        %297 = OpFOrdLessThan %bool %295 %float_0
-               OpStore %x_155 %297
-        %298 = OpLoad %bool %x_155
-               OpStore %x_156_phi %298
-               OpBranch %291
-        %291 = OpLabel
-        %299 = OpLoad %bool %x_156_phi
-               OpSelectionMerge %300 None
-               OpBranchConditional %299 %301 %300
-        %301 = OpLabel
-        %302 = OpLoad %int %count
-        %303 = OpIAdd %int %302 %int_1
-               OpStore %count %303
-               OpBranch %300
-        %300 = OpLabel
-               OpBranch %284
-        %285 = OpLabel
-        %304 = OpLoad %int %result
-        %305 = OpIEqual %bool %304 %int_n1
-               OpSelectionMerge %306 None
-               OpBranchConditional %305 %307 %306
-        %307 = OpLabel
-        %308 = OpLoad %int %count
-        %309 = OpIAdd %int %308 %int_1
-               OpStore %count %309
-               OpBranch %306
-        %306 = OpLabel
-               OpBranch %284
-        %284 = OpLabel
-               OpBranch %268
-        %268 = OpLabel
-        %310 = OpLoad %int %i
-        %311 = OpIAdd %int %310 %int_1
-               OpStore %i %311
-               OpBranch %266
-        %267 = OpLabel
-        %312 = OpLoad %int %count
-        %313 = OpIEqual %bool %312 %int_20
-               OpSelectionMerge %314 None
-               OpBranchConditional %313 %315 %316
-        %315 = OpLabel
-               OpStore %x_GLF_color %318
-               OpBranch %314
-        %316 = OpLabel
-               OpStore %x_GLF_color %319
-               OpBranch %314
-        %314 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %320
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %324 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %325 = OpFunctionCall %void %main_1
-        %326 = OpLoad %v4float %x_GLF_color
-        %327 = OpCompositeConstruct %main_out %326
-               OpReturnValue %327
-               OpFunctionEnd
-       %main = OpFunction %void None %166
-        %329 = OpLabel
-        %331 = OpLoad %v4float %gl_FragCoord_param_1
-        %330 = OpFunctionCall %main_out %main_inner %331
-        %332 = OpCompositeExtract %v4float %330 0
-               OpStore %x_GLF_color_1_1 %332
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.wgsl
deleted file mode 100644
index 4d268f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,277 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> tree_1 : array<BST, 10>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_169 : i32 = *(data);
-  (*(tree)).data = x_169;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_178 : i32 = baseIndex;
-    let x_179 : i32 = *(treeIndex);
-    if ((x_178 <= x_179)) {
-    } else {
-      break;
-    }
-    let x_182 : i32 = *(data_1);
-    let x_183 : i32 = baseIndex;
-    let x_185 : i32 = tree_1[x_183].data;
-    if ((x_182 <= x_185)) {
-      let x_190 : i32 = baseIndex;
-      let x_192 : i32 = tree_1[x_190].leftIndex;
-      if ((x_192 == -1)) {
-        let x_197 : i32 = baseIndex;
-        let x_198 : i32 = *(treeIndex);
-        tree_1[x_197].leftIndex = x_198;
-        let x_200 : i32 = *(treeIndex);
-        let x_202 : BST = tree_1[x_200];
-        param = x_202;
-        let x_203 : i32 = *(data_1);
-        param_1 = x_203;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_205 : BST = param;
-        tree_1[x_200] = x_205;
-        return;
-      } else {
-        let x_207 : i32 = baseIndex;
-        let x_209 : i32 = tree_1[x_207].leftIndex;
-        baseIndex = x_209;
-        continue;
-      }
-      return;
-    } else {
-      let x_210 : i32 = baseIndex;
-      let x_212 : i32 = tree_1[x_210].rightIndex;
-      if ((x_212 == -1)) {
-        let x_217 : i32 = baseIndex;
-        let x_218 : i32 = *(treeIndex);
-        tree_1[x_217].rightIndex = x_218;
-        let x_220 : i32 = *(treeIndex);
-        let x_222 : BST = tree_1[x_220];
-        param_2 = x_222;
-        let x_223 : i32 = *(data_1);
-        param_3 = x_223;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_225 : BST = param_2;
-        tree_1[x_220] = x_225;
-        return;
-      } else {
-        let x_227 : i32 = baseIndex;
-        let x_229 : i32 = tree_1[x_227].rightIndex;
-        baseIndex = x_229;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_231 : i32;
-  index = 0;
-  loop {
-    let x_236 : i32 = index;
-    if ((x_236 != -1)) {
-    } else {
-      break;
-    }
-    let x_239 : i32 = index;
-    let x_241 : BST = tree_1[x_239];
-    currentNode = x_241;
-    let x_243 : i32 = currentNode.data;
-    let x_244 : i32 = *(target);
-    if ((x_243 == x_244)) {
-      let x_248 : i32 = *(target);
-      return x_248;
-    }
-    let x_249 : i32 = *(target);
-    let x_251 : i32 = currentNode.data;
-    if ((x_249 > x_251)) {
-      let x_257 : i32 = currentNode.rightIndex;
-      x_231 = x_257;
-    } else {
-      let x_259 : i32 = currentNode.leftIndex;
-      x_231 = x_259;
-    }
-    let x_260 : i32 = x_231;
-    index = x_260;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var count : i32;
-  var i : i32;
-  var result : i32;
-  var param_24 : i32;
-  treeIndex_1 = 0;
-  let x_88 : BST = tree_1[0];
-  param_4 = x_88;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_90 : BST = param_4;
-  tree_1[0] = x_90;
-  let x_92 : i32 = treeIndex_1;
-  treeIndex_1 = (x_92 + 1);
-  let x_94 : i32 = treeIndex_1;
-  param_6 = x_94;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_96 : i32 = treeIndex_1;
-  treeIndex_1 = (x_96 + 1);
-  let x_98 : i32 = treeIndex_1;
-  param_8 = x_98;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_100 : i32 = treeIndex_1;
-  treeIndex_1 = (x_100 + 1);
-  let x_102 : i32 = treeIndex_1;
-  param_10 = x_102;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_104 : i32 = treeIndex_1;
-  treeIndex_1 = (x_104 + 1);
-  let x_106 : i32 = treeIndex_1;
-  param_12 = x_106;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_108 : i32 = treeIndex_1;
-  treeIndex_1 = (x_108 + 1);
-  let x_110 : i32 = treeIndex_1;
-  param_14 = x_110;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_112 : i32 = treeIndex_1;
-  treeIndex_1 = (x_112 + 1);
-  let x_114 : i32 = treeIndex_1;
-  param_16 = x_114;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_116 : i32 = treeIndex_1;
-  treeIndex_1 = (x_116 + 1);
-  let x_118 : i32 = treeIndex_1;
-  param_18 = x_118;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_120 : i32 = treeIndex_1;
-  treeIndex_1 = (x_120 + 1);
-  let x_122 : i32 = treeIndex_1;
-  param_20 = x_122;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_124 : i32 = treeIndex_1;
-  treeIndex_1 = (x_124 + 1);
-  let x_126 : i32 = treeIndex_1;
-  param_22 = x_126;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  count = 0;
-  i = 0;
-  loop {
-    let x_132 : i32 = i;
-    if ((x_132 < 20)) {
-    } else {
-      break;
-    }
-    var x_155 : bool;
-    var x_156_phi : bool;
-    let x_135 : i32 = i;
-    param_24 = x_135;
-    let x_136 : i32 = search_i1_(&(param_24));
-    result = x_136;
-    let x_137 : i32 = i;
-    switch(x_137) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_147 : i32 = result;
-        let x_148 : i32 = i;
-        let x_149 : bool = (x_147 == x_148);
-        x_156_phi = x_149;
-        if (!(x_149)) {
-          let x_154 : f32 = gl_FragCoord.x;
-          x_155 = (x_154 < 0.0);
-          x_156_phi = x_155;
-        }
-        let x_156 : bool = x_156_phi;
-        if (x_156) {
-          let x_159 : i32 = count;
-          count = (x_159 + 1);
-        }
-      }
-      default: {
-        let x_141 : i32 = result;
-        if ((x_141 == -1)) {
-          let x_145 : i32 = count;
-          count = (x_145 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_161 : i32 = i;
-      i = (x_161 + 1);
-    }
-  }
-  let x_163 : i32 = count;
-  if ((x_163 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.hlsl
deleted file mode 100644
index 390b21a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,255 +0,0 @@
-SKIP: FAILED
-
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static BST tree_1[10] = (BST[10])0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
-  const int x_169 = data;
-  tree.data = x_169;
-  tree.leftIndex = -1;
-  tree.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_178 = baseIndex;
-    const int x_179 = treeIndex;
-    if ((x_178 <= x_179)) {
-    } else {
-      break;
-    }
-    const int x_182 = data_1;
-    const int x_185 = tree_1[baseIndex].data;
-    if ((x_182 <= x_185)) {
-      const int x_192 = tree_1[baseIndex].leftIndex;
-      if ((x_192 == -1)) {
-        const int x_197 = baseIndex;
-        const int x_198 = treeIndex;
-        tree_1[x_197].leftIndex = x_198;
-        const int x_200 = treeIndex;
-        const BST x_202 = tree_1[x_200];
-        param = x_202;
-        const int x_203 = data_1;
-        param_1 = x_203;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree_1[x_200] = param;
-        return;
-      } else {
-        const int x_209 = tree_1[baseIndex].leftIndex;
-        baseIndex = x_209;
-        continue;
-      }
-      return;
-    } else {
-      const int x_212 = tree_1[baseIndex].rightIndex;
-      if ((x_212 == -1)) {
-        const int x_217 = baseIndex;
-        const int x_218 = treeIndex;
-        tree_1[x_217].rightIndex = x_218;
-        const int x_220 = treeIndex;
-        const BST x_222 = tree_1[x_220];
-        param_2 = x_222;
-        const int x_223 = data_1;
-        param_3 = x_223;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree_1[x_220] = param_2;
-        return;
-      } else {
-        const int x_229 = tree_1[baseIndex].rightIndex;
-        baseIndex = x_229;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_231 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_241 = tree_1[index];
-    currentNode = x_241;
-    const int x_243 = currentNode.data;
-    const int x_244 = target;
-    if ((x_243 == x_244)) {
-      const int x_248 = target;
-      return x_248;
-    }
-    const int x_249 = target;
-    const int x_251 = currentNode.data;
-    if ((x_249 > x_251)) {
-      const int x_257 = currentNode.rightIndex;
-      x_231 = x_257;
-    } else {
-      const int x_259 = currentNode.leftIndex;
-      x_231 = x_259;
-    }
-    index = x_231;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  const BST x_88 = tree_1[0];
-  param_4 = x_88;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree_1[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  count = 0;
-  i = 0;
-  {
-    for(; (i < 20); i = (i + 1)) {
-      bool x_155 = false;
-      bool x_156_phi = false;
-      param_24 = i;
-      const int x_136 = search_i1_(param_24);
-      result = x_136;
-      switch(i) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          const bool x_149 = (result == i);
-          x_156_phi = x_149;
-          if (!(x_149)) {
-            const float x_154 = gl_FragCoord.x;
-            x_155 = (x_154 < 0.0f);
-            x_156_phi = x_155;
-          }
-          if (x_156_phi) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_4 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_4;
-}
-C:\src\tint\test\Shader@0x0000023E291817E0(26,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x0000023E291817E0(26,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x0000023E291817E0(26,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x0000023E291817E0(26,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-internal error: compilation aborted unexpectedly
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.msl
deleted file mode 100644
index 2597e37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.msl
+++ /dev/null
@@ -1,299 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
-  int const x_169 = *(data);
-  (*(tree)).data = x_169;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_178 = baseIndex;
-    int const x_179 = *(treeIndex);
-    if ((x_178 <= x_179)) {
-    } else {
-      break;
-    }
-    int const x_182 = *(data_1);
-    int const x_183 = baseIndex;
-    int const x_185 = (*(tint_symbol_3)).arr[x_183].data;
-    if ((x_182 <= x_185)) {
-      int const x_190 = baseIndex;
-      int const x_192 = (*(tint_symbol_3)).arr[x_190].leftIndex;
-      if ((x_192 == -1)) {
-        int const x_197 = baseIndex;
-        int const x_198 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_197].leftIndex = x_198;
-        int const x_200 = *(treeIndex);
-        BST const x_202 = (*(tint_symbol_3)).arr[x_200];
-        param = x_202;
-        int const x_203 = *(data_1);
-        param_1 = x_203;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_205 = param;
-        (*(tint_symbol_3)).arr[x_200] = x_205;
-        return;
-      } else {
-        int const x_207 = baseIndex;
-        int const x_209 = (*(tint_symbol_3)).arr[x_207].leftIndex;
-        baseIndex = x_209;
-        continue;
-      }
-      return;
-    } else {
-      int const x_210 = baseIndex;
-      int const x_212 = (*(tint_symbol_3)).arr[x_210].rightIndex;
-      if ((x_212 == -1)) {
-        int const x_217 = baseIndex;
-        int const x_218 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_217].rightIndex = x_218;
-        int const x_220 = *(treeIndex);
-        BST const x_222 = (*(tint_symbol_3)).arr[x_220];
-        param_2 = x_222;
-        int const x_223 = *(data_1);
-        param_3 = x_223;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_225 = param_2;
-        (*(tint_symbol_3)).arr[x_220] = x_225;
-        return;
-      } else {
-        int const x_227 = baseIndex;
-        int const x_229 = (*(tint_symbol_3)).arr[x_227].rightIndex;
-        baseIndex = x_229;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_231 = 0;
-  index = 0;
-  while (true) {
-    int const x_236 = index;
-    if ((x_236 != -1)) {
-    } else {
-      break;
-    }
-    int const x_239 = index;
-    BST const x_241 = (*(tint_symbol_4)).arr[x_239];
-    currentNode = x_241;
-    int const x_243 = currentNode.data;
-    int const x_244 = *(target);
-    if ((x_243 == x_244)) {
-      int const x_248 = *(target);
-      return x_248;
-    }
-    int const x_249 = *(target);
-    int const x_251 = currentNode.data;
-    if ((x_249 > x_251)) {
-      int const x_257 = currentNode.rightIndex;
-      x_231 = x_257;
-    } else {
-      int const x_259 = currentNode.leftIndex;
-      x_231 = x_259;
-    }
-    int const x_260 = x_231;
-    index = x_260;
-  }
-  return -1;
-}
-
-void main_1(thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  BST const x_88 = (*(tint_symbol_5)).arr[0];
-  param_4 = x_88;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_90 = param_4;
-  (*(tint_symbol_5)).arr[0] = x_90;
-  int const x_92 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(1)));
-  int const x_94 = treeIndex_1;
-  param_6 = x_94;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7), tint_symbol_5);
-  int const x_96 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-  int const x_98 = treeIndex_1;
-  param_8 = x_98;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9), tint_symbol_5);
-  int const x_100 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-  int const x_102 = treeIndex_1;
-  param_10 = x_102;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11), tint_symbol_5);
-  int const x_104 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-  int const x_106 = treeIndex_1;
-  param_12 = x_106;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13), tint_symbol_5);
-  int const x_108 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-  int const x_110 = treeIndex_1;
-  param_14 = x_110;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15), tint_symbol_5);
-  int const x_112 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-  int const x_114 = treeIndex_1;
-  param_16 = x_114;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17), tint_symbol_5);
-  int const x_116 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-  int const x_118 = treeIndex_1;
-  param_18 = x_118;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19), tint_symbol_5);
-  int const x_120 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-  int const x_122 = treeIndex_1;
-  param_20 = x_122;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21), tint_symbol_5);
-  int const x_124 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-  int const x_126 = treeIndex_1;
-  param_22 = x_126;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23), tint_symbol_5);
-  count = 0;
-  i = 0;
-  while (true) {
-    int const x_132 = i;
-    if ((x_132 < 20)) {
-    } else {
-      break;
-    }
-    bool x_155 = false;
-    bool x_156_phi = false;
-    int const x_135 = i;
-    param_24 = x_135;
-    int const x_136 = search_i1_(&(param_24), tint_symbol_5);
-    result = x_136;
-    int const x_137 = i;
-    switch(x_137) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_147 = result;
-        int const x_148 = i;
-        bool const x_149 = (x_147 == x_148);
-        x_156_phi = x_149;
-        if (!(x_149)) {
-          float const x_154 = (*(tint_symbol_6)).x;
-          x_155 = (x_154 < 0.0f);
-          x_156_phi = x_155;
-        }
-        bool const x_156 = x_156_phi;
-        if (x_156) {
-          int const x_159 = count;
-          count = as_type<int>((as_type<uint>(x_159) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_141 = result;
-        if ((x_141 == -1)) {
-          int const x_145 = count;
-          count = as_type<int>((as_type<uint>(x_145) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_161 = i;
-      i = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
-    }
-  }
-  int const x_163 = count;
-  if ((x_163 == 20)) {
-    *(tint_symbol_7) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_7) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = gl_FragCoord_param;
-  main_1(tint_symbol_9, tint_symbol_8, tint_symbol_10);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread tint_array_wrapper tint_symbol_12 = {};
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.spvasm
deleted file mode 100644
index 1173db6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,505 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 333
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree_1 "tree_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %tree "tree"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_231 "x_231"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %result "result"
-               OpName %param_24 "param_24"
-               OpName %x_155 "x_155"
-               OpName %x_156_phi "x_156_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %15 = OpConstantNull %_arr_BST_uint_10
-     %tree_1 = OpVariable %_ptr_Private__arr_BST_uint_10 Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %39 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %45 = OpConstantNull %int
-         %47 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %125 = OpTypeFunction %int %_ptr_Function_int
-        %166 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_20 = OpConstant %int 20
-%_ptr_Function_bool = OpTypePointer Function %bool
-        %278 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %318 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %319 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %320 = OpTypeFunction %main_out %v4float
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %19
-       %tree = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %26 = OpLabel
-         %28 = OpLoad %int %data
-         %31 = OpAccessChain %_ptr_Function_int %tree %uint_0
-               OpStore %31 %28
-         %34 = OpAccessChain %_ptr_Function_int %tree %uint_1
-               OpStore %34 %int_n1
-         %38 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %38 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %39
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %43 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %45
-      %param = OpVariable %_ptr_Function_BST Function %47
-    %param_1 = OpVariable %_ptr_Function_int Function %45
-    %param_2 = OpVariable %_ptr_Function_BST Function %47
-    %param_3 = OpVariable %_ptr_Function_int Function %45
-               OpStore %baseIndex %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %baseIndex
-         %58 = OpLoad %int %treeIndex
-         %59 = OpSLessThanEqual %bool %56 %58
-               OpSelectionMerge %61 None
-               OpBranchConditional %59 %62 %63
-         %62 = OpLabel
-               OpBranch %61
-         %63 = OpLabel
-               OpBranch %53
-         %61 = OpLabel
-         %65 = OpLoad %int %data_1
-         %66 = OpLoad %int %baseIndex
-         %68 = OpAccessChain %_ptr_Private_int %tree_1 %66 %uint_0
-         %69 = OpLoad %int %68
-         %70 = OpSLessThanEqual %bool %65 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpLoad %int %baseIndex
-         %75 = OpAccessChain %_ptr_Private_int %tree_1 %74 %uint_1
-         %76 = OpLoad %int %75
-         %77 = OpIEqual %bool %76 %int_n1
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-         %81 = OpLoad %int %baseIndex
-         %83 = OpLoad %int %treeIndex
-         %84 = OpAccessChain %_ptr_Private_int %tree_1 %81 %uint_1
-               OpStore %84 %83
-         %86 = OpLoad %int %treeIndex
-         %88 = OpAccessChain %_ptr_Private_BST %tree_1 %86
-         %89 = OpLoad %BST %88
-               OpStore %param %89
-         %91 = OpLoad %int %data_1
-               OpStore %param_1 %91
-         %92 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-         %95 = OpLoad %BST %param
-         %96 = OpAccessChain %_ptr_Private_BST %tree_1 %86
-               OpStore %96 %95
-               OpReturn
-         %80 = OpLabel
-         %97 = OpLoad %int %baseIndex
-         %98 = OpAccessChain %_ptr_Private_int %tree_1 %97 %uint_1
-         %99 = OpLoad %int %98
-               OpStore %baseIndex %99
-               OpBranch %54
-         %78 = OpLabel
-               OpReturn
-         %73 = OpLabel
-        %100 = OpLoad %int %baseIndex
-        %101 = OpAccessChain %_ptr_Private_int %tree_1 %100 %uint_2
-        %102 = OpLoad %int %101
-        %103 = OpIEqual %bool %102 %int_n1
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %106
-        %105 = OpLabel
-        %107 = OpLoad %int %baseIndex
-        %109 = OpLoad %int %treeIndex
-        %110 = OpAccessChain %_ptr_Private_int %tree_1 %107 %uint_2
-               OpStore %110 %109
-        %112 = OpLoad %int %treeIndex
-        %113 = OpAccessChain %_ptr_Private_BST %tree_1 %112
-        %114 = OpLoad %BST %113
-               OpStore %param_2 %114
-        %116 = OpLoad %int %data_1
-               OpStore %param_3 %116
-        %117 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %120 = OpLoad %BST %param_2
-        %121 = OpAccessChain %_ptr_Private_BST %tree_1 %112
-               OpStore %121 %120
-               OpReturn
-        %106 = OpLabel
-        %122 = OpLoad %int %baseIndex
-        %123 = OpAccessChain %_ptr_Private_int %tree_1 %122 %uint_2
-        %124 = OpLoad %int %123
-               OpStore %baseIndex %124
-               OpBranch %54
-        %104 = OpLabel
-               OpReturn
-         %71 = OpLabel
-               OpReturn
-         %54 = OpLabel
-               OpBranch %52
-         %53 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %125
-     %target = OpFunctionParameter %_ptr_Function_int
-        %128 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %45
-%currentNode = OpVariable %_ptr_Function_BST Function %47
-      %x_231 = OpVariable %_ptr_Function_int Function %45
-               OpStore %index %int_0
-               OpBranch %132
-        %132 = OpLabel
-               OpLoopMerge %133 %134 None
-               OpBranch %135
-        %135 = OpLabel
-        %136 = OpLoad %int %index
-        %137 = OpINotEqual %bool %136 %int_n1
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %140
-        %139 = OpLabel
-               OpBranch %138
-        %140 = OpLabel
-               OpBranch %133
-        %138 = OpLabel
-        %141 = OpLoad %int %index
-        %142 = OpAccessChain %_ptr_Private_BST %tree_1 %141
-        %143 = OpLoad %BST %142
-               OpStore %currentNode %143
-        %144 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %145 = OpLoad %int %144
-        %147 = OpLoad %int %target
-        %148 = OpIEqual %bool %145 %147
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %149
-        %150 = OpLabel
-        %152 = OpLoad %int %target
-               OpReturnValue %152
-        %149 = OpLabel
-        %154 = OpLoad %int %target
-        %155 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %156 = OpLoad %int %155
-        %157 = OpSGreaterThan %bool %154 %156
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %160
-        %159 = OpLabel
-        %161 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %162 = OpLoad %int %161
-               OpStore %x_231 %162
-               OpBranch %158
-        %160 = OpLabel
-        %163 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %164 = OpLoad %int %163
-               OpStore %x_231 %164
-               OpBranch %158
-        %158 = OpLabel
-        %165 = OpLoad %int %x_231
-               OpStore %index %165
-               OpBranch %134
-        %134 = OpLabel
-               OpBranch %132
-        %133 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %166
-        %168 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %45
-    %param_4 = OpVariable %_ptr_Function_BST Function %47
-    %param_5 = OpVariable %_ptr_Function_int Function %45
-    %param_6 = OpVariable %_ptr_Function_int Function %45
-    %param_7 = OpVariable %_ptr_Function_int Function %45
-    %param_8 = OpVariable %_ptr_Function_int Function %45
-    %param_9 = OpVariable %_ptr_Function_int Function %45
-   %param_10 = OpVariable %_ptr_Function_int Function %45
-   %param_11 = OpVariable %_ptr_Function_int Function %45
-   %param_12 = OpVariable %_ptr_Function_int Function %45
-   %param_13 = OpVariable %_ptr_Function_int Function %45
-   %param_14 = OpVariable %_ptr_Function_int Function %45
-   %param_15 = OpVariable %_ptr_Function_int Function %45
-   %param_16 = OpVariable %_ptr_Function_int Function %45
-   %param_17 = OpVariable %_ptr_Function_int Function %45
-   %param_18 = OpVariable %_ptr_Function_int Function %45
-   %param_19 = OpVariable %_ptr_Function_int Function %45
-   %param_20 = OpVariable %_ptr_Function_int Function %45
-   %param_21 = OpVariable %_ptr_Function_int Function %45
-   %param_22 = OpVariable %_ptr_Function_int Function %45
-   %param_23 = OpVariable %_ptr_Function_int Function %45
-      %count = OpVariable %_ptr_Function_int Function %45
-          %i = OpVariable %_ptr_Function_int Function %45
-     %result = OpVariable %_ptr_Function_int Function %45
-   %param_24 = OpVariable %_ptr_Function_int Function %45
-      %x_155 = OpVariable %_ptr_Function_bool Function %278
-  %x_156_phi = OpVariable %_ptr_Function_bool Function %278
-               OpStore %treeIndex_1 %int_0
-        %194 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-        %195 = OpLoad %BST %194
-               OpStore %param_4 %195
-               OpStore %param_5 %int_9
-        %197 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %200 = OpLoad %BST %param_4
-        %201 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-               OpStore %201 %200
-        %202 = OpLoad %int %treeIndex_1
-        %204 = OpIAdd %int %202 %int_1
-               OpStore %treeIndex_1 %204
-        %205 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %205
-               OpStore %param_7 %int_5
-        %207 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %210 = OpLoad %int %treeIndex_1
-        %211 = OpIAdd %int %210 %int_1
-               OpStore %treeIndex_1 %211
-        %212 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %212
-               OpStore %param_9 %int_12
-        %214 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %217 = OpLoad %int %treeIndex_1
-        %218 = OpIAdd %int %217 %int_1
-               OpStore %treeIndex_1 %218
-        %219 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %219
-               OpStore %param_11 %int_15
-        %221 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %224 = OpLoad %int %treeIndex_1
-        %225 = OpIAdd %int %224 %int_1
-               OpStore %treeIndex_1 %225
-        %226 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %226
-               OpStore %param_13 %int_7
-        %228 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %231 = OpLoad %int %treeIndex_1
-        %232 = OpIAdd %int %231 %int_1
-               OpStore %treeIndex_1 %232
-        %233 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %233
-               OpStore %param_15 %int_8
-        %235 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %238 = OpLoad %int %treeIndex_1
-        %239 = OpIAdd %int %238 %int_1
-               OpStore %treeIndex_1 %239
-        %240 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %240
-               OpStore %param_17 %int_2
-        %242 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %245 = OpLoad %int %treeIndex_1
-        %246 = OpIAdd %int %245 %int_1
-               OpStore %treeIndex_1 %246
-        %247 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %247
-               OpStore %param_19 %int_6
-        %249 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %252 = OpLoad %int %treeIndex_1
-        %253 = OpIAdd %int %252 %int_1
-               OpStore %treeIndex_1 %253
-        %254 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %254
-               OpStore %param_21 %int_17
-        %256 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %259 = OpLoad %int %treeIndex_1
-        %260 = OpIAdd %int %259 %int_1
-               OpStore %treeIndex_1 %260
-        %261 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %261
-               OpStore %param_23 %int_13
-        %263 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %count %int_0
-               OpStore %i %int_0
-               OpBranch %266
-        %266 = OpLabel
-               OpLoopMerge %267 %268 None
-               OpBranch %269
-        %269 = OpLabel
-        %270 = OpLoad %int %i
-        %272 = OpSLessThan %bool %270 %int_20
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %275
-        %274 = OpLabel
-               OpBranch %273
-        %275 = OpLabel
-               OpBranch %267
-        %273 = OpLabel
-        %280 = OpLoad %int %i
-               OpStore %param_24 %280
-        %281 = OpFunctionCall %int %search_i1_ %param_24
-               OpStore %result %281
-        %283 = OpLoad %int %i
-               OpSelectionMerge %284 None
-               OpSwitch %283 %285 2 %286 5 %286 6 %286 7 %286 8 %286 9 %286 12 %286 13 %286 15 %286 17 %286
-        %286 = OpLabel
-        %287 = OpLoad %int %result
-        %288 = OpLoad %int %i
-        %289 = OpIEqual %bool %287 %288
-               OpStore %x_156_phi %289
-        %290 = OpLogicalNot %bool %289
-               OpSelectionMerge %291 None
-               OpBranchConditional %290 %292 %291
-        %292 = OpLabel
-        %294 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %295 = OpLoad %float %294
-        %297 = OpFOrdLessThan %bool %295 %float_0
-               OpStore %x_155 %297
-        %298 = OpLoad %bool %x_155
-               OpStore %x_156_phi %298
-               OpBranch %291
-        %291 = OpLabel
-        %299 = OpLoad %bool %x_156_phi
-               OpSelectionMerge %300 None
-               OpBranchConditional %299 %301 %300
-        %301 = OpLabel
-        %302 = OpLoad %int %count
-        %303 = OpIAdd %int %302 %int_1
-               OpStore %count %303
-               OpBranch %300
-        %300 = OpLabel
-               OpBranch %284
-        %285 = OpLabel
-        %304 = OpLoad %int %result
-        %305 = OpIEqual %bool %304 %int_n1
-               OpSelectionMerge %306 None
-               OpBranchConditional %305 %307 %306
-        %307 = OpLabel
-        %308 = OpLoad %int %count
-        %309 = OpIAdd %int %308 %int_1
-               OpStore %count %309
-               OpBranch %306
-        %306 = OpLabel
-               OpBranch %284
-        %284 = OpLabel
-               OpBranch %268
-        %268 = OpLabel
-        %310 = OpLoad %int %i
-        %311 = OpIAdd %int %310 %int_1
-               OpStore %i %311
-               OpBranch %266
-        %267 = OpLabel
-        %312 = OpLoad %int %count
-        %313 = OpIEqual %bool %312 %int_20
-               OpSelectionMerge %314 None
-               OpBranchConditional %313 %315 %316
-        %315 = OpLabel
-               OpStore %x_GLF_color %318
-               OpBranch %314
-        %316 = OpLabel
-               OpStore %x_GLF_color %319
-               OpBranch %314
-        %314 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %320
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %324 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %325 = OpFunctionCall %void %main_1
-        %326 = OpLoad %v4float %x_GLF_color
-        %327 = OpCompositeConstruct %main_out %326
-               OpReturnValue %327
-               OpFunctionEnd
-       %main = OpFunction %void None %166
-        %329 = OpLabel
-        %331 = OpLoad %v4float %gl_FragCoord_param_1
-        %330 = OpFunctionCall %main_out %main_inner %331
-        %332 = OpCompositeExtract %v4float %330 0
-               OpStore %x_GLF_color_1_1 %332
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.wgsl
deleted file mode 100644
index 4d268f6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,277 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> tree_1 : array<BST, 10>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_169 : i32 = *(data);
-  (*(tree)).data = x_169;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_178 : i32 = baseIndex;
-    let x_179 : i32 = *(treeIndex);
-    if ((x_178 <= x_179)) {
-    } else {
-      break;
-    }
-    let x_182 : i32 = *(data_1);
-    let x_183 : i32 = baseIndex;
-    let x_185 : i32 = tree_1[x_183].data;
-    if ((x_182 <= x_185)) {
-      let x_190 : i32 = baseIndex;
-      let x_192 : i32 = tree_1[x_190].leftIndex;
-      if ((x_192 == -1)) {
-        let x_197 : i32 = baseIndex;
-        let x_198 : i32 = *(treeIndex);
-        tree_1[x_197].leftIndex = x_198;
-        let x_200 : i32 = *(treeIndex);
-        let x_202 : BST = tree_1[x_200];
-        param = x_202;
-        let x_203 : i32 = *(data_1);
-        param_1 = x_203;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_205 : BST = param;
-        tree_1[x_200] = x_205;
-        return;
-      } else {
-        let x_207 : i32 = baseIndex;
-        let x_209 : i32 = tree_1[x_207].leftIndex;
-        baseIndex = x_209;
-        continue;
-      }
-      return;
-    } else {
-      let x_210 : i32 = baseIndex;
-      let x_212 : i32 = tree_1[x_210].rightIndex;
-      if ((x_212 == -1)) {
-        let x_217 : i32 = baseIndex;
-        let x_218 : i32 = *(treeIndex);
-        tree_1[x_217].rightIndex = x_218;
-        let x_220 : i32 = *(treeIndex);
-        let x_222 : BST = tree_1[x_220];
-        param_2 = x_222;
-        let x_223 : i32 = *(data_1);
-        param_3 = x_223;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_225 : BST = param_2;
-        tree_1[x_220] = x_225;
-        return;
-      } else {
-        let x_227 : i32 = baseIndex;
-        let x_229 : i32 = tree_1[x_227].rightIndex;
-        baseIndex = x_229;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_231 : i32;
-  index = 0;
-  loop {
-    let x_236 : i32 = index;
-    if ((x_236 != -1)) {
-    } else {
-      break;
-    }
-    let x_239 : i32 = index;
-    let x_241 : BST = tree_1[x_239];
-    currentNode = x_241;
-    let x_243 : i32 = currentNode.data;
-    let x_244 : i32 = *(target);
-    if ((x_243 == x_244)) {
-      let x_248 : i32 = *(target);
-      return x_248;
-    }
-    let x_249 : i32 = *(target);
-    let x_251 : i32 = currentNode.data;
-    if ((x_249 > x_251)) {
-      let x_257 : i32 = currentNode.rightIndex;
-      x_231 = x_257;
-    } else {
-      let x_259 : i32 = currentNode.leftIndex;
-      x_231 = x_259;
-    }
-    let x_260 : i32 = x_231;
-    index = x_260;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var count : i32;
-  var i : i32;
-  var result : i32;
-  var param_24 : i32;
-  treeIndex_1 = 0;
-  let x_88 : BST = tree_1[0];
-  param_4 = x_88;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_90 : BST = param_4;
-  tree_1[0] = x_90;
-  let x_92 : i32 = treeIndex_1;
-  treeIndex_1 = (x_92 + 1);
-  let x_94 : i32 = treeIndex_1;
-  param_6 = x_94;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_96 : i32 = treeIndex_1;
-  treeIndex_1 = (x_96 + 1);
-  let x_98 : i32 = treeIndex_1;
-  param_8 = x_98;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_100 : i32 = treeIndex_1;
-  treeIndex_1 = (x_100 + 1);
-  let x_102 : i32 = treeIndex_1;
-  param_10 = x_102;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_104 : i32 = treeIndex_1;
-  treeIndex_1 = (x_104 + 1);
-  let x_106 : i32 = treeIndex_1;
-  param_12 = x_106;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_108 : i32 = treeIndex_1;
-  treeIndex_1 = (x_108 + 1);
-  let x_110 : i32 = treeIndex_1;
-  param_14 = x_110;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_112 : i32 = treeIndex_1;
-  treeIndex_1 = (x_112 + 1);
-  let x_114 : i32 = treeIndex_1;
-  param_16 = x_114;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_116 : i32 = treeIndex_1;
-  treeIndex_1 = (x_116 + 1);
-  let x_118 : i32 = treeIndex_1;
-  param_18 = x_118;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_120 : i32 = treeIndex_1;
-  treeIndex_1 = (x_120 + 1);
-  let x_122 : i32 = treeIndex_1;
-  param_20 = x_122;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_124 : i32 = treeIndex_1;
-  treeIndex_1 = (x_124 + 1);
-  let x_126 : i32 = treeIndex_1;
-  param_22 = x_126;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  count = 0;
-  i = 0;
-  loop {
-    let x_132 : i32 = i;
-    if ((x_132 < 20)) {
-    } else {
-      break;
-    }
-    var x_155 : bool;
-    var x_156_phi : bool;
-    let x_135 : i32 = i;
-    param_24 = x_135;
-    let x_136 : i32 = search_i1_(&(param_24));
-    result = x_136;
-    let x_137 : i32 = i;
-    switch(x_137) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_147 : i32 = result;
-        let x_148 : i32 = i;
-        let x_149 : bool = (x_147 == x_148);
-        x_156_phi = x_149;
-        if (!(x_149)) {
-          let x_154 : f32 = gl_FragCoord.x;
-          x_155 = (x_154 < 0.0);
-          x_156_phi = x_155;
-        }
-        let x_156 : bool = x_156_phi;
-        if (x_156) {
-          let x_159 : i32 = count;
-          count = (x_159 + 1);
-        }
-      }
-      default: {
-        let x_141 : i32 = result;
-        if ((x_141 == -1)) {
-          let x_145 : i32 = count;
-          count = (x_145 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_161 : i32 = i;
-      i = (x_161 + 1);
-    }
-  }
-  let x_163 : i32 = count;
-  if ((x_163 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.hlsl
deleted file mode 100644
index 249e7a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,261 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static BST tree_1[10] = (BST[10])0;
-cbuffer cbuffer_x_16 : register(b0, space0) {
-  uint4 x_16[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
-  const int x_165 = data;
-  tree.data = x_165;
-  tree.leftIndex = -1;
-  tree.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  int x_170 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_175 = baseIndex;
-    const int x_176 = treeIndex;
-    if ((x_175 <= x_176)) {
-    } else {
-      break;
-    }
-    const int x_179 = data_1;
-    const int x_182 = tree_1[baseIndex].data;
-    if ((x_179 <= x_182)) {
-      const int x_189 = tree_1[baseIndex].leftIndex;
-      if ((x_189 == -1)) {
-        const int x_194 = baseIndex;
-        const int x_195 = treeIndex;
-        tree_1[x_194].leftIndex = x_195;
-        const float x_198 = asfloat(x_16[0].x);
-        const float x_200 = asfloat(x_16[0].y);
-        if ((x_198 < x_200)) {
-          const int x_204 = treeIndex;
-          const BST x_206 = tree_1[x_204];
-          param = x_206;
-          const int x_207 = data_1;
-          param_1 = x_207;
-          makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-          tree_1[x_204] = param;
-        }
-        const float x_212 = asfloat(x_16[0].x);
-        const float x_214 = asfloat(x_16[0].y);
-        if ((x_212 < x_214)) {
-          return;
-        }
-      } else {
-        const int x_220 = tree_1[baseIndex].leftIndex;
-        baseIndex = x_220;
-        continue;
-      }
-    } else {
-      const float x_222 = asfloat(x_16[0].x);
-      const float x_224 = asfloat(x_16[0].y);
-      if ((x_222 < x_224)) {
-        const int x_231 = tree_1[baseIndex].rightIndex;
-        x_170 = x_231;
-      } else {
-        const int x_234 = tree_1[baseIndex].rightIndex;
-        x_170 = x_234;
-      }
-      if ((x_170 == -1)) {
-        const int x_240 = baseIndex;
-        const int x_241 = treeIndex;
-        tree_1[x_240].rightIndex = x_241;
-        const int x_243 = treeIndex;
-        const BST x_245 = tree_1[x_243];
-        param_2 = x_245;
-        const int x_246 = data_1;
-        param_3 = x_246;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree_1[x_243] = param_2;
-        return;
-      } else {
-        const int x_252 = tree_1[baseIndex].rightIndex;
-        baseIndex = x_252;
-        continue;
-      }
-      return;
-    }
-    const float x_254 = asfloat(x_16[0].x);
-    const float x_256 = asfloat(x_16[0].y);
-    if ((x_254 > x_256)) {
-      return;
-    }
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_261 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_271 = tree_1[index];
-    currentNode = x_271;
-    const int x_273 = currentNode.data;
-    const int x_274 = target;
-    if ((x_273 == x_274)) {
-      const int x_278 = target;
-      return x_278;
-    }
-    const int x_279 = target;
-    const int x_281 = currentNode.data;
-    if ((x_279 > x_281)) {
-      const int x_287 = currentNode.rightIndex;
-      x_261 = x_287;
-    } else {
-      const int x_289 = currentNode.leftIndex;
-      x_261 = x_289;
-    }
-    index = x_261;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  const BST x_91 = tree_1[0];
-  param_4 = x_91;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree_1[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  count = 0;
-  i = 0;
-  {
-    for(; (i < 20); i = (i + 1)) {
-      param_24 = i;
-      const int x_139 = search_i1_(param_24);
-      result = x_139;
-      switch(i) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          if ((result == i)) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.msl
deleted file mode 100644
index 0054917..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.msl
+++ /dev/null
@@ -1,312 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
-  int const x_165 = *(data);
-  (*(tree)).data = x_165;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(constant buf0& x_16, thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  int x_170 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_175 = baseIndex;
-    int const x_176 = *(treeIndex);
-    if ((x_175 <= x_176)) {
-    } else {
-      break;
-    }
-    int const x_179 = *(data_1);
-    int const x_180 = baseIndex;
-    int const x_182 = (*(tint_symbol_3)).arr[x_180].data;
-    if ((x_179 <= x_182)) {
-      int const x_187 = baseIndex;
-      int const x_189 = (*(tint_symbol_3)).arr[x_187].leftIndex;
-      if ((x_189 == -1)) {
-        int const x_194 = baseIndex;
-        int const x_195 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_194].leftIndex = x_195;
-        float const x_198 = x_16.injectionSwitch.x;
-        float const x_200 = x_16.injectionSwitch.y;
-        if ((x_198 < x_200)) {
-          int const x_204 = *(treeIndex);
-          BST const x_206 = (*(tint_symbol_3)).arr[x_204];
-          param = x_206;
-          int const x_207 = *(data_1);
-          param_1 = x_207;
-          makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-          BST const x_209 = param;
-          (*(tint_symbol_3)).arr[x_204] = x_209;
-        }
-        float const x_212 = x_16.injectionSwitch.x;
-        float const x_214 = x_16.injectionSwitch.y;
-        if ((x_212 < x_214)) {
-          return;
-        }
-      } else {
-        int const x_218 = baseIndex;
-        int const x_220 = (*(tint_symbol_3)).arr[x_218].leftIndex;
-        baseIndex = x_220;
-        continue;
-      }
-    } else {
-      float const x_222 = x_16.injectionSwitch.x;
-      float const x_224 = x_16.injectionSwitch.y;
-      if ((x_222 < x_224)) {
-        int const x_229 = baseIndex;
-        int const x_231 = (*(tint_symbol_3)).arr[x_229].rightIndex;
-        x_170 = x_231;
-      } else {
-        int const x_232 = baseIndex;
-        int const x_234 = (*(tint_symbol_3)).arr[x_232].rightIndex;
-        x_170 = x_234;
-      }
-      int const x_235 = x_170;
-      if ((x_235 == -1)) {
-        int const x_240 = baseIndex;
-        int const x_241 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_240].rightIndex = x_241;
-        int const x_243 = *(treeIndex);
-        BST const x_245 = (*(tint_symbol_3)).arr[x_243];
-        param_2 = x_245;
-        int const x_246 = *(data_1);
-        param_3 = x_246;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_248 = param_2;
-        (*(tint_symbol_3)).arr[x_243] = x_248;
-        return;
-      } else {
-        int const x_250 = baseIndex;
-        int const x_252 = (*(tint_symbol_3)).arr[x_250].rightIndex;
-        baseIndex = x_252;
-        continue;
-      }
-      return;
-    }
-    float const x_254 = x_16.injectionSwitch.x;
-    float const x_256 = x_16.injectionSwitch.y;
-    if ((x_254 > x_256)) {
-      return;
-    }
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_261 = 0;
-  index = 0;
-  while (true) {
-    int const x_266 = index;
-    if ((x_266 != -1)) {
-    } else {
-      break;
-    }
-    int const x_269 = index;
-    BST const x_271 = (*(tint_symbol_4)).arr[x_269];
-    currentNode = x_271;
-    int const x_273 = currentNode.data;
-    int const x_274 = *(target);
-    if ((x_273 == x_274)) {
-      int const x_278 = *(target);
-      return x_278;
-    }
-    int const x_279 = *(target);
-    int const x_281 = currentNode.data;
-    if ((x_279 > x_281)) {
-      int const x_287 = currentNode.rightIndex;
-      x_261 = x_287;
-    } else {
-      int const x_289 = currentNode.leftIndex;
-      x_261 = x_289;
-    }
-    int const x_290 = x_261;
-    index = x_290;
-  }
-  return -1;
-}
-
-void main_1(constant buf0& x_16, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  BST const x_91 = (*(tint_symbol_5)).arr[0];
-  param_4 = x_91;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_93 = param_4;
-  (*(tint_symbol_5)).arr[0] = x_93;
-  int const x_95 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
-  int const x_97 = treeIndex_1;
-  param_6 = x_97;
-  param_7 = 5;
-  insert_i1_i1_(x_16, &(param_6), &(param_7), tint_symbol_5);
-  int const x_99 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_99) + as_type<uint>(1)));
-  int const x_101 = treeIndex_1;
-  param_8 = x_101;
-  param_9 = 12;
-  insert_i1_i1_(x_16, &(param_8), &(param_9), tint_symbol_5);
-  int const x_103 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-  int const x_105 = treeIndex_1;
-  param_10 = x_105;
-  param_11 = 15;
-  insert_i1_i1_(x_16, &(param_10), &(param_11), tint_symbol_5);
-  int const x_107 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)));
-  int const x_109 = treeIndex_1;
-  param_12 = x_109;
-  param_13 = 7;
-  insert_i1_i1_(x_16, &(param_12), &(param_13), tint_symbol_5);
-  int const x_111 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_111) + as_type<uint>(1)));
-  int const x_113 = treeIndex_1;
-  param_14 = x_113;
-  param_15 = 8;
-  insert_i1_i1_(x_16, &(param_14), &(param_15), tint_symbol_5);
-  int const x_115 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
-  int const x_117 = treeIndex_1;
-  param_16 = x_117;
-  param_17 = 2;
-  insert_i1_i1_(x_16, &(param_16), &(param_17), tint_symbol_5);
-  int const x_119 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-  int const x_121 = treeIndex_1;
-  param_18 = x_121;
-  param_19 = 6;
-  insert_i1_i1_(x_16, &(param_18), &(param_19), tint_symbol_5);
-  int const x_123 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
-  int const x_125 = treeIndex_1;
-  param_20 = x_125;
-  param_21 = 17;
-  insert_i1_i1_(x_16, &(param_20), &(param_21), tint_symbol_5);
-  int const x_127 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
-  int const x_129 = treeIndex_1;
-  param_22 = x_129;
-  param_23 = 13;
-  insert_i1_i1_(x_16, &(param_22), &(param_23), tint_symbol_5);
-  count = 0;
-  i = 0;
-  while (true) {
-    int const x_135 = i;
-    if ((x_135 < 20)) {
-    } else {
-      break;
-    }
-    int const x_138 = i;
-    param_24 = x_138;
-    int const x_139 = search_i1_(&(param_24), tint_symbol_5);
-    result = x_139;
-    int const x_140 = i;
-    switch(x_140) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_150 = result;
-        int const x_151 = i;
-        if ((x_150 == x_151)) {
-          int const x_155 = count;
-          count = as_type<int>((as_type<uint>(x_155) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_144 = result;
-        if ((x_144 == -1)) {
-          int const x_148 = count;
-          count = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_157 = i;
-      i = as_type<int>((as_type<uint>(x_157) + as_type<uint>(1)));
-    }
-  }
-  int const x_159 = count;
-  if ((x_159 == 20)) {
-    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_6) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_16, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  main_1(x_16, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_16 [[buffer(0)]]) {
-  thread tint_array_wrapper tint_symbol_9 = {};
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_16, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.spvasm
deleted file mode 100644
index 25d57df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,537 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 354
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree_1 "tree_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_16 "x_16"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %tree "tree"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %x_170 "x_170"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_261 "x_261"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %result "result"
-               OpName %param_24 "param_24"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_16 NonWritable
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %13 = OpConstantNull %_arr_BST_uint_10
-     %tree_1 = OpVariable %_ptr_Private__arr_BST_uint_10 Private %13
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_16 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %40 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %46 = OpConstantNull %int
-         %48 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %161 = OpTypeFunction %int %_ptr_Function_int
-        %202 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %341 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %342 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %343 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %20
-       %tree = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %27 = OpLabel
-         %29 = OpLoad %int %data
-         %32 = OpAccessChain %_ptr_Function_int %tree %uint_0
-               OpStore %32 %29
-         %35 = OpAccessChain %_ptr_Function_int %tree %uint_1
-               OpStore %35 %int_n1
-         %39 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %39 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %40
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %44 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %46
-      %param = OpVariable %_ptr_Function_BST Function %48
-    %param_1 = OpVariable %_ptr_Function_int Function %46
-      %x_170 = OpVariable %_ptr_Function_int Function %46
-    %param_2 = OpVariable %_ptr_Function_BST Function %48
-    %param_3 = OpVariable %_ptr_Function_int Function %46
-               OpStore %baseIndex %int_0
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %58 = OpLoad %int %baseIndex
-         %60 = OpLoad %int %treeIndex
-         %61 = OpSLessThanEqual %bool %58 %60
-               OpSelectionMerge %63 None
-               OpBranchConditional %61 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %55
-         %63 = OpLabel
-         %67 = OpLoad %int %data_1
-         %68 = OpLoad %int %baseIndex
-         %70 = OpAccessChain %_ptr_Private_int %tree_1 %68 %uint_0
-         %71 = OpLoad %int %70
-         %72 = OpSLessThanEqual %bool %67 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpLoad %int %baseIndex
-         %77 = OpAccessChain %_ptr_Private_int %tree_1 %76 %uint_1
-         %78 = OpLoad %int %77
-         %79 = OpIEqual %bool %78 %int_n1
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpLoad %int %baseIndex
-         %85 = OpLoad %int %treeIndex
-         %86 = OpAccessChain %_ptr_Private_int %tree_1 %83 %uint_1
-               OpStore %86 %85
-         %88 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-         %89 = OpLoad %float %88
-         %90 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-         %91 = OpLoad %float %90
-         %92 = OpFOrdLessThan %bool %89 %91
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-         %96 = OpLoad %int %treeIndex
-         %98 = OpAccessChain %_ptr_Private_BST %tree_1 %96
-         %99 = OpLoad %BST %98
-               OpStore %param %99
-        %101 = OpLoad %int %data_1
-               OpStore %param_1 %101
-        %102 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-        %105 = OpLoad %BST %param
-        %106 = OpAccessChain %_ptr_Private_BST %tree_1 %96
-               OpStore %106 %105
-               OpBranch %93
-         %93 = OpLabel
-        %107 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-        %108 = OpLoad %float %107
-        %109 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-        %110 = OpLoad %float %109
-        %111 = OpFOrdLessThan %bool %108 %110
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %112
-        %113 = OpLabel
-               OpReturn
-        %112 = OpLabel
-               OpBranch %80
-         %82 = OpLabel
-        %114 = OpLoad %int %baseIndex
-        %115 = OpAccessChain %_ptr_Private_int %tree_1 %114 %uint_1
-        %116 = OpLoad %int %115
-               OpStore %baseIndex %116
-               OpBranch %56
-         %80 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-        %117 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-        %118 = OpLoad %float %117
-        %119 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-        %120 = OpLoad %float %119
-        %121 = OpFOrdLessThan %bool %118 %120
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-        %125 = OpLoad %int %baseIndex
-        %126 = OpAccessChain %_ptr_Private_int %tree_1 %125 %uint_2
-        %127 = OpLoad %int %126
-               OpStore %x_170 %127
-               OpBranch %122
-        %124 = OpLabel
-        %128 = OpLoad %int %baseIndex
-        %129 = OpAccessChain %_ptr_Private_int %tree_1 %128 %uint_2
-        %130 = OpLoad %int %129
-               OpStore %x_170 %130
-               OpBranch %122
-        %122 = OpLabel
-        %131 = OpLoad %int %x_170
-        %132 = OpIEqual %bool %131 %int_n1
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %135
-        %134 = OpLabel
-        %136 = OpLoad %int %baseIndex
-        %138 = OpLoad %int %treeIndex
-        %139 = OpAccessChain %_ptr_Private_int %tree_1 %136 %uint_2
-               OpStore %139 %138
-        %141 = OpLoad %int %treeIndex
-        %142 = OpAccessChain %_ptr_Private_BST %tree_1 %141
-        %143 = OpLoad %BST %142
-               OpStore %param_2 %143
-        %145 = OpLoad %int %data_1
-               OpStore %param_3 %145
-        %146 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %149 = OpLoad %BST %param_2
-        %150 = OpAccessChain %_ptr_Private_BST %tree_1 %141
-               OpStore %150 %149
-               OpReturn
-        %135 = OpLabel
-        %151 = OpLoad %int %baseIndex
-        %152 = OpAccessChain %_ptr_Private_int %tree_1 %151 %uint_2
-        %153 = OpLoad %int %152
-               OpStore %baseIndex %153
-               OpBranch %56
-        %133 = OpLabel
-               OpReturn
-         %73 = OpLabel
-        %154 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-        %155 = OpLoad %float %154
-        %156 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-        %157 = OpLoad %float %156
-        %158 = OpFOrdGreaterThan %bool %155 %157
-               OpSelectionMerge %159 None
-               OpBranchConditional %158 %160 %159
-        %160 = OpLabel
-               OpReturn
-        %159 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %54
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %161
-     %target = OpFunctionParameter %_ptr_Function_int
-        %164 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %46
-%currentNode = OpVariable %_ptr_Function_BST Function %48
-      %x_261 = OpVariable %_ptr_Function_int Function %46
-               OpStore %index %int_0
-               OpBranch %168
-        %168 = OpLabel
-               OpLoopMerge %169 %170 None
-               OpBranch %171
-        %171 = OpLabel
-        %172 = OpLoad %int %index
-        %173 = OpINotEqual %bool %172 %int_n1
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-               OpBranch %174
-        %176 = OpLabel
-               OpBranch %169
-        %174 = OpLabel
-        %177 = OpLoad %int %index
-        %178 = OpAccessChain %_ptr_Private_BST %tree_1 %177
-        %179 = OpLoad %BST %178
-               OpStore %currentNode %179
-        %180 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %181 = OpLoad %int %180
-        %183 = OpLoad %int %target
-        %184 = OpIEqual %bool %181 %183
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %185
-        %186 = OpLabel
-        %188 = OpLoad %int %target
-               OpReturnValue %188
-        %185 = OpLabel
-        %190 = OpLoad %int %target
-        %191 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %192 = OpLoad %int %191
-        %193 = OpSGreaterThan %bool %190 %192
-               OpSelectionMerge %194 None
-               OpBranchConditional %193 %195 %196
-        %195 = OpLabel
-        %197 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %198 = OpLoad %int %197
-               OpStore %x_261 %198
-               OpBranch %194
-        %196 = OpLabel
-        %199 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %200 = OpLoad %int %199
-               OpStore %x_261 %200
-               OpBranch %194
-        %194 = OpLabel
-        %201 = OpLoad %int %x_261
-               OpStore %index %201
-               OpBranch %170
-        %170 = OpLabel
-               OpBranch %168
-        %169 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %202
-        %204 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %46
-    %param_4 = OpVariable %_ptr_Function_BST Function %48
-    %param_5 = OpVariable %_ptr_Function_int Function %46
-    %param_6 = OpVariable %_ptr_Function_int Function %46
-    %param_7 = OpVariable %_ptr_Function_int Function %46
-    %param_8 = OpVariable %_ptr_Function_int Function %46
-    %param_9 = OpVariable %_ptr_Function_int Function %46
-   %param_10 = OpVariable %_ptr_Function_int Function %46
-   %param_11 = OpVariable %_ptr_Function_int Function %46
-   %param_12 = OpVariable %_ptr_Function_int Function %46
-   %param_13 = OpVariable %_ptr_Function_int Function %46
-   %param_14 = OpVariable %_ptr_Function_int Function %46
-   %param_15 = OpVariable %_ptr_Function_int Function %46
-   %param_16 = OpVariable %_ptr_Function_int Function %46
-   %param_17 = OpVariable %_ptr_Function_int Function %46
-   %param_18 = OpVariable %_ptr_Function_int Function %46
-   %param_19 = OpVariable %_ptr_Function_int Function %46
-   %param_20 = OpVariable %_ptr_Function_int Function %46
-   %param_21 = OpVariable %_ptr_Function_int Function %46
-   %param_22 = OpVariable %_ptr_Function_int Function %46
-   %param_23 = OpVariable %_ptr_Function_int Function %46
-      %count = OpVariable %_ptr_Function_int Function %46
-          %i = OpVariable %_ptr_Function_int Function %46
-     %result = OpVariable %_ptr_Function_int Function %46
-   %param_24 = OpVariable %_ptr_Function_int Function %46
-               OpStore %treeIndex_1 %int_0
-        %230 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-        %231 = OpLoad %BST %230
-               OpStore %param_4 %231
-               OpStore %param_5 %int_9
-        %233 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %236 = OpLoad %BST %param_4
-        %237 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-               OpStore %237 %236
-        %238 = OpLoad %int %treeIndex_1
-        %240 = OpIAdd %int %238 %int_1
-               OpStore %treeIndex_1 %240
-        %241 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %241
-               OpStore %param_7 %int_5
-        %243 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %246 = OpLoad %int %treeIndex_1
-        %247 = OpIAdd %int %246 %int_1
-               OpStore %treeIndex_1 %247
-        %248 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %248
-               OpStore %param_9 %int_12
-        %250 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %253 = OpLoad %int %treeIndex_1
-        %254 = OpIAdd %int %253 %int_1
-               OpStore %treeIndex_1 %254
-        %255 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %255
-               OpStore %param_11 %int_15
-        %257 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %260 = OpLoad %int %treeIndex_1
-        %261 = OpIAdd %int %260 %int_1
-               OpStore %treeIndex_1 %261
-        %262 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %262
-               OpStore %param_13 %int_7
-        %264 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %267 = OpLoad %int %treeIndex_1
-        %268 = OpIAdd %int %267 %int_1
-               OpStore %treeIndex_1 %268
-        %269 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %269
-               OpStore %param_15 %int_8
-        %271 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %274 = OpLoad %int %treeIndex_1
-        %275 = OpIAdd %int %274 %int_1
-               OpStore %treeIndex_1 %275
-        %276 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %276
-               OpStore %param_17 %int_2
-        %278 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %281 = OpLoad %int %treeIndex_1
-        %282 = OpIAdd %int %281 %int_1
-               OpStore %treeIndex_1 %282
-        %283 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %283
-               OpStore %param_19 %int_6
-        %285 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %288 = OpLoad %int %treeIndex_1
-        %289 = OpIAdd %int %288 %int_1
-               OpStore %treeIndex_1 %289
-        %290 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %290
-               OpStore %param_21 %int_17
-        %292 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %295 = OpLoad %int %treeIndex_1
-        %296 = OpIAdd %int %295 %int_1
-               OpStore %treeIndex_1 %296
-        %297 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %297
-               OpStore %param_23 %int_13
-        %299 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %count %int_0
-               OpStore %i %int_0
-               OpBranch %302
-        %302 = OpLabel
-               OpLoopMerge %303 %304 None
-               OpBranch %305
-        %305 = OpLabel
-        %306 = OpLoad %int %i
-        %308 = OpSLessThan %bool %306 %int_20
-               OpSelectionMerge %309 None
-               OpBranchConditional %308 %310 %311
-        %310 = OpLabel
-               OpBranch %309
-        %311 = OpLabel
-               OpBranch %303
-        %309 = OpLabel
-        %312 = OpLoad %int %i
-               OpStore %param_24 %312
-        %313 = OpFunctionCall %int %search_i1_ %param_24
-               OpStore %result %313
-        %315 = OpLoad %int %i
-               OpSelectionMerge %316 None
-               OpSwitch %315 %317 2 %318 5 %318 6 %318 7 %318 8 %318 9 %318 12 %318 13 %318 15 %318 17 %318
-        %318 = OpLabel
-        %319 = OpLoad %int %result
-        %320 = OpLoad %int %i
-        %321 = OpIEqual %bool %319 %320
-               OpSelectionMerge %322 None
-               OpBranchConditional %321 %323 %322
-        %323 = OpLabel
-        %324 = OpLoad %int %count
-        %325 = OpIAdd %int %324 %int_1
-               OpStore %count %325
-               OpBranch %322
-        %322 = OpLabel
-               OpBranch %316
-        %317 = OpLabel
-        %326 = OpLoad %int %result
-        %327 = OpIEqual %bool %326 %int_n1
-               OpSelectionMerge %328 None
-               OpBranchConditional %327 %329 %328
-        %329 = OpLabel
-        %330 = OpLoad %int %count
-        %331 = OpIAdd %int %330 %int_1
-               OpStore %count %331
-               OpBranch %328
-        %328 = OpLabel
-               OpBranch %316
-        %316 = OpLabel
-               OpBranch %304
-        %304 = OpLabel
-        %332 = OpLoad %int %i
-        %333 = OpIAdd %int %332 %int_1
-               OpStore %i %333
-               OpBranch %302
-        %303 = OpLabel
-        %334 = OpLoad %int %count
-        %335 = OpIEqual %bool %334 %int_20
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %338
-        %337 = OpLabel
-               OpStore %x_GLF_color %341
-               OpBranch %336
-        %338 = OpLabel
-               OpStore %x_GLF_color %342
-               OpBranch %336
-        %336 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %343
-        %346 = OpLabel
-        %347 = OpFunctionCall %void %main_1
-        %348 = OpLoad %v4float %x_GLF_color
-        %349 = OpCompositeConstruct %main_out %348
-               OpReturnValue %349
-               OpFunctionEnd
-       %main = OpFunction %void None %202
-        %351 = OpLabel
-        %352 = OpFunctionCall %main_out %main_inner
-        %353 = OpCompositeExtract %v4float %352 0
-               OpStore %x_GLF_color_1_1 %353
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.wgsl
deleted file mode 100644
index 06f95bb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,293 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> tree_1 : array<BST, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_16 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_165 : i32 = *(data);
-  (*(tree)).data = x_165;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var x_170 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_175 : i32 = baseIndex;
-    let x_176 : i32 = *(treeIndex);
-    if ((x_175 <= x_176)) {
-    } else {
-      break;
-    }
-    let x_179 : i32 = *(data_1);
-    let x_180 : i32 = baseIndex;
-    let x_182 : i32 = tree_1[x_180].data;
-    if ((x_179 <= x_182)) {
-      let x_187 : i32 = baseIndex;
-      let x_189 : i32 = tree_1[x_187].leftIndex;
-      if ((x_189 == -1)) {
-        let x_194 : i32 = baseIndex;
-        let x_195 : i32 = *(treeIndex);
-        tree_1[x_194].leftIndex = x_195;
-        let x_198 : f32 = x_16.injectionSwitch.x;
-        let x_200 : f32 = x_16.injectionSwitch.y;
-        if ((x_198 < x_200)) {
-          let x_204 : i32 = *(treeIndex);
-          let x_206 : BST = tree_1[x_204];
-          param = x_206;
-          let x_207 : i32 = *(data_1);
-          param_1 = x_207;
-          makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-          let x_209 : BST = param;
-          tree_1[x_204] = x_209;
-        }
-        let x_212 : f32 = x_16.injectionSwitch.x;
-        let x_214 : f32 = x_16.injectionSwitch.y;
-        if ((x_212 < x_214)) {
-          return;
-        }
-      } else {
-        let x_218 : i32 = baseIndex;
-        let x_220 : i32 = tree_1[x_218].leftIndex;
-        baseIndex = x_220;
-        continue;
-      }
-    } else {
-      let x_222 : f32 = x_16.injectionSwitch.x;
-      let x_224 : f32 = x_16.injectionSwitch.y;
-      if ((x_222 < x_224)) {
-        let x_229 : i32 = baseIndex;
-        let x_231 : i32 = tree_1[x_229].rightIndex;
-        x_170 = x_231;
-      } else {
-        let x_232 : i32 = baseIndex;
-        let x_234 : i32 = tree_1[x_232].rightIndex;
-        x_170 = x_234;
-      }
-      let x_235 : i32 = x_170;
-      if ((x_235 == -1)) {
-        let x_240 : i32 = baseIndex;
-        let x_241 : i32 = *(treeIndex);
-        tree_1[x_240].rightIndex = x_241;
-        let x_243 : i32 = *(treeIndex);
-        let x_245 : BST = tree_1[x_243];
-        param_2 = x_245;
-        let x_246 : i32 = *(data_1);
-        param_3 = x_246;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_248 : BST = param_2;
-        tree_1[x_243] = x_248;
-        return;
-      } else {
-        let x_250 : i32 = baseIndex;
-        let x_252 : i32 = tree_1[x_250].rightIndex;
-        baseIndex = x_252;
-        continue;
-      }
-      return;
-    }
-    let x_254 : f32 = x_16.injectionSwitch.x;
-    let x_256 : f32 = x_16.injectionSwitch.y;
-    if ((x_254 > x_256)) {
-      return;
-    }
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_261 : i32;
-  index = 0;
-  loop {
-    let x_266 : i32 = index;
-    if ((x_266 != -1)) {
-    } else {
-      break;
-    }
-    let x_269 : i32 = index;
-    let x_271 : BST = tree_1[x_269];
-    currentNode = x_271;
-    let x_273 : i32 = currentNode.data;
-    let x_274 : i32 = *(target);
-    if ((x_273 == x_274)) {
-      let x_278 : i32 = *(target);
-      return x_278;
-    }
-    let x_279 : i32 = *(target);
-    let x_281 : i32 = currentNode.data;
-    if ((x_279 > x_281)) {
-      let x_287 : i32 = currentNode.rightIndex;
-      x_261 = x_287;
-    } else {
-      let x_289 : i32 = currentNode.leftIndex;
-      x_261 = x_289;
-    }
-    let x_290 : i32 = x_261;
-    index = x_290;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var count : i32;
-  var i : i32;
-  var result : i32;
-  var param_24 : i32;
-  treeIndex_1 = 0;
-  let x_91 : BST = tree_1[0];
-  param_4 = x_91;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_93 : BST = param_4;
-  tree_1[0] = x_93;
-  let x_95 : i32 = treeIndex_1;
-  treeIndex_1 = (x_95 + 1);
-  let x_97 : i32 = treeIndex_1;
-  param_6 = x_97;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_99 : i32 = treeIndex_1;
-  treeIndex_1 = (x_99 + 1);
-  let x_101 : i32 = treeIndex_1;
-  param_8 = x_101;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_103 : i32 = treeIndex_1;
-  treeIndex_1 = (x_103 + 1);
-  let x_105 : i32 = treeIndex_1;
-  param_10 = x_105;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_107 : i32 = treeIndex_1;
-  treeIndex_1 = (x_107 + 1);
-  let x_109 : i32 = treeIndex_1;
-  param_12 = x_109;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_111 : i32 = treeIndex_1;
-  treeIndex_1 = (x_111 + 1);
-  let x_113 : i32 = treeIndex_1;
-  param_14 = x_113;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_115 : i32 = treeIndex_1;
-  treeIndex_1 = (x_115 + 1);
-  let x_117 : i32 = treeIndex_1;
-  param_16 = x_117;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_119 : i32 = treeIndex_1;
-  treeIndex_1 = (x_119 + 1);
-  let x_121 : i32 = treeIndex_1;
-  param_18 = x_121;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_123 : i32 = treeIndex_1;
-  treeIndex_1 = (x_123 + 1);
-  let x_125 : i32 = treeIndex_1;
-  param_20 = x_125;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_127 : i32 = treeIndex_1;
-  treeIndex_1 = (x_127 + 1);
-  let x_129 : i32 = treeIndex_1;
-  param_22 = x_129;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  count = 0;
-  i = 0;
-  loop {
-    let x_135 : i32 = i;
-    if ((x_135 < 20)) {
-    } else {
-      break;
-    }
-    let x_138 : i32 = i;
-    param_24 = x_138;
-    let x_139 : i32 = search_i1_(&(param_24));
-    result = x_139;
-    let x_140 : i32 = i;
-    switch(x_140) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_150 : i32 = result;
-        let x_151 : i32 = i;
-        if ((x_150 == x_151)) {
-          let x_155 : i32 = count;
-          count = (x_155 + 1);
-        }
-      }
-      default: {
-        let x_144 : i32 = result;
-        if ((x_144 == -1)) {
-          let x_148 : i32 = count;
-          count = (x_148 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_157 : i32 = i;
-      i = (x_157 + 1);
-    }
-  }
-  let x_159 : i32 = count;
-  if ((x_159 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.hlsl
deleted file mode 100644
index 249e7a6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,261 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static BST tree_1[10] = (BST[10])0;
-cbuffer cbuffer_x_16 : register(b0, space0) {
-  uint4 x_16[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
-  const int x_165 = data;
-  tree.data = x_165;
-  tree.leftIndex = -1;
-  tree.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  int x_170 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_175 = baseIndex;
-    const int x_176 = treeIndex;
-    if ((x_175 <= x_176)) {
-    } else {
-      break;
-    }
-    const int x_179 = data_1;
-    const int x_182 = tree_1[baseIndex].data;
-    if ((x_179 <= x_182)) {
-      const int x_189 = tree_1[baseIndex].leftIndex;
-      if ((x_189 == -1)) {
-        const int x_194 = baseIndex;
-        const int x_195 = treeIndex;
-        tree_1[x_194].leftIndex = x_195;
-        const float x_198 = asfloat(x_16[0].x);
-        const float x_200 = asfloat(x_16[0].y);
-        if ((x_198 < x_200)) {
-          const int x_204 = treeIndex;
-          const BST x_206 = tree_1[x_204];
-          param = x_206;
-          const int x_207 = data_1;
-          param_1 = x_207;
-          makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-          tree_1[x_204] = param;
-        }
-        const float x_212 = asfloat(x_16[0].x);
-        const float x_214 = asfloat(x_16[0].y);
-        if ((x_212 < x_214)) {
-          return;
-        }
-      } else {
-        const int x_220 = tree_1[baseIndex].leftIndex;
-        baseIndex = x_220;
-        continue;
-      }
-    } else {
-      const float x_222 = asfloat(x_16[0].x);
-      const float x_224 = asfloat(x_16[0].y);
-      if ((x_222 < x_224)) {
-        const int x_231 = tree_1[baseIndex].rightIndex;
-        x_170 = x_231;
-      } else {
-        const int x_234 = tree_1[baseIndex].rightIndex;
-        x_170 = x_234;
-      }
-      if ((x_170 == -1)) {
-        const int x_240 = baseIndex;
-        const int x_241 = treeIndex;
-        tree_1[x_240].rightIndex = x_241;
-        const int x_243 = treeIndex;
-        const BST x_245 = tree_1[x_243];
-        param_2 = x_245;
-        const int x_246 = data_1;
-        param_3 = x_246;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree_1[x_243] = param_2;
-        return;
-      } else {
-        const int x_252 = tree_1[baseIndex].rightIndex;
-        baseIndex = x_252;
-        continue;
-      }
-      return;
-    }
-    const float x_254 = asfloat(x_16[0].x);
-    const float x_256 = asfloat(x_16[0].y);
-    if ((x_254 > x_256)) {
-      return;
-    }
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_261 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_271 = tree_1[index];
-    currentNode = x_271;
-    const int x_273 = currentNode.data;
-    const int x_274 = target;
-    if ((x_273 == x_274)) {
-      const int x_278 = target;
-      return x_278;
-    }
-    const int x_279 = target;
-    const int x_281 = currentNode.data;
-    if ((x_279 > x_281)) {
-      const int x_287 = currentNode.rightIndex;
-      x_261 = x_287;
-    } else {
-      const int x_289 = currentNode.leftIndex;
-      x_261 = x_289;
-    }
-    index = x_261;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  const BST x_91 = tree_1[0];
-  param_4 = x_91;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree_1[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  count = 0;
-  i = 0;
-  {
-    for(; (i < 20); i = (i + 1)) {
-      param_24 = i;
-      const int x_139 = search_i1_(param_24);
-      result = x_139;
-      switch(i) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          if ((result == i)) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.msl
deleted file mode 100644
index 0054917..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.msl
+++ /dev/null
@@ -1,312 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
-  int const x_165 = *(data);
-  (*(tree)).data = x_165;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(constant buf0& x_16, thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  int x_170 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_175 = baseIndex;
-    int const x_176 = *(treeIndex);
-    if ((x_175 <= x_176)) {
-    } else {
-      break;
-    }
-    int const x_179 = *(data_1);
-    int const x_180 = baseIndex;
-    int const x_182 = (*(tint_symbol_3)).arr[x_180].data;
-    if ((x_179 <= x_182)) {
-      int const x_187 = baseIndex;
-      int const x_189 = (*(tint_symbol_3)).arr[x_187].leftIndex;
-      if ((x_189 == -1)) {
-        int const x_194 = baseIndex;
-        int const x_195 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_194].leftIndex = x_195;
-        float const x_198 = x_16.injectionSwitch.x;
-        float const x_200 = x_16.injectionSwitch.y;
-        if ((x_198 < x_200)) {
-          int const x_204 = *(treeIndex);
-          BST const x_206 = (*(tint_symbol_3)).arr[x_204];
-          param = x_206;
-          int const x_207 = *(data_1);
-          param_1 = x_207;
-          makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-          BST const x_209 = param;
-          (*(tint_symbol_3)).arr[x_204] = x_209;
-        }
-        float const x_212 = x_16.injectionSwitch.x;
-        float const x_214 = x_16.injectionSwitch.y;
-        if ((x_212 < x_214)) {
-          return;
-        }
-      } else {
-        int const x_218 = baseIndex;
-        int const x_220 = (*(tint_symbol_3)).arr[x_218].leftIndex;
-        baseIndex = x_220;
-        continue;
-      }
-    } else {
-      float const x_222 = x_16.injectionSwitch.x;
-      float const x_224 = x_16.injectionSwitch.y;
-      if ((x_222 < x_224)) {
-        int const x_229 = baseIndex;
-        int const x_231 = (*(tint_symbol_3)).arr[x_229].rightIndex;
-        x_170 = x_231;
-      } else {
-        int const x_232 = baseIndex;
-        int const x_234 = (*(tint_symbol_3)).arr[x_232].rightIndex;
-        x_170 = x_234;
-      }
-      int const x_235 = x_170;
-      if ((x_235 == -1)) {
-        int const x_240 = baseIndex;
-        int const x_241 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_240].rightIndex = x_241;
-        int const x_243 = *(treeIndex);
-        BST const x_245 = (*(tint_symbol_3)).arr[x_243];
-        param_2 = x_245;
-        int const x_246 = *(data_1);
-        param_3 = x_246;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_248 = param_2;
-        (*(tint_symbol_3)).arr[x_243] = x_248;
-        return;
-      } else {
-        int const x_250 = baseIndex;
-        int const x_252 = (*(tint_symbol_3)).arr[x_250].rightIndex;
-        baseIndex = x_252;
-        continue;
-      }
-      return;
-    }
-    float const x_254 = x_16.injectionSwitch.x;
-    float const x_256 = x_16.injectionSwitch.y;
-    if ((x_254 > x_256)) {
-      return;
-    }
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_261 = 0;
-  index = 0;
-  while (true) {
-    int const x_266 = index;
-    if ((x_266 != -1)) {
-    } else {
-      break;
-    }
-    int const x_269 = index;
-    BST const x_271 = (*(tint_symbol_4)).arr[x_269];
-    currentNode = x_271;
-    int const x_273 = currentNode.data;
-    int const x_274 = *(target);
-    if ((x_273 == x_274)) {
-      int const x_278 = *(target);
-      return x_278;
-    }
-    int const x_279 = *(target);
-    int const x_281 = currentNode.data;
-    if ((x_279 > x_281)) {
-      int const x_287 = currentNode.rightIndex;
-      x_261 = x_287;
-    } else {
-      int const x_289 = currentNode.leftIndex;
-      x_261 = x_289;
-    }
-    int const x_290 = x_261;
-    index = x_290;
-  }
-  return -1;
-}
-
-void main_1(constant buf0& x_16, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  BST const x_91 = (*(tint_symbol_5)).arr[0];
-  param_4 = x_91;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_93 = param_4;
-  (*(tint_symbol_5)).arr[0] = x_93;
-  int const x_95 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_95) + as_type<uint>(1)));
-  int const x_97 = treeIndex_1;
-  param_6 = x_97;
-  param_7 = 5;
-  insert_i1_i1_(x_16, &(param_6), &(param_7), tint_symbol_5);
-  int const x_99 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_99) + as_type<uint>(1)));
-  int const x_101 = treeIndex_1;
-  param_8 = x_101;
-  param_9 = 12;
-  insert_i1_i1_(x_16, &(param_8), &(param_9), tint_symbol_5);
-  int const x_103 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-  int const x_105 = treeIndex_1;
-  param_10 = x_105;
-  param_11 = 15;
-  insert_i1_i1_(x_16, &(param_10), &(param_11), tint_symbol_5);
-  int const x_107 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)));
-  int const x_109 = treeIndex_1;
-  param_12 = x_109;
-  param_13 = 7;
-  insert_i1_i1_(x_16, &(param_12), &(param_13), tint_symbol_5);
-  int const x_111 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_111) + as_type<uint>(1)));
-  int const x_113 = treeIndex_1;
-  param_14 = x_113;
-  param_15 = 8;
-  insert_i1_i1_(x_16, &(param_14), &(param_15), tint_symbol_5);
-  int const x_115 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_115) + as_type<uint>(1)));
-  int const x_117 = treeIndex_1;
-  param_16 = x_117;
-  param_17 = 2;
-  insert_i1_i1_(x_16, &(param_16), &(param_17), tint_symbol_5);
-  int const x_119 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-  int const x_121 = treeIndex_1;
-  param_18 = x_121;
-  param_19 = 6;
-  insert_i1_i1_(x_16, &(param_18), &(param_19), tint_symbol_5);
-  int const x_123 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
-  int const x_125 = treeIndex_1;
-  param_20 = x_125;
-  param_21 = 17;
-  insert_i1_i1_(x_16, &(param_20), &(param_21), tint_symbol_5);
-  int const x_127 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
-  int const x_129 = treeIndex_1;
-  param_22 = x_129;
-  param_23 = 13;
-  insert_i1_i1_(x_16, &(param_22), &(param_23), tint_symbol_5);
-  count = 0;
-  i = 0;
-  while (true) {
-    int const x_135 = i;
-    if ((x_135 < 20)) {
-    } else {
-      break;
-    }
-    int const x_138 = i;
-    param_24 = x_138;
-    int const x_139 = search_i1_(&(param_24), tint_symbol_5);
-    result = x_139;
-    int const x_140 = i;
-    switch(x_140) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_150 = result;
-        int const x_151 = i;
-        if ((x_150 == x_151)) {
-          int const x_155 = count;
-          count = as_type<int>((as_type<uint>(x_155) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_144 = result;
-        if ((x_144 == -1)) {
-          int const x_148 = count;
-          count = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_157 = i;
-      i = as_type<int>((as_type<uint>(x_157) + as_type<uint>(1)));
-    }
-  }
-  int const x_159 = count;
-  if ((x_159 == 20)) {
-    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_6) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_16, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  main_1(x_16, tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_16 [[buffer(0)]]) {
-  thread tint_array_wrapper tint_symbol_9 = {};
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_16, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.spvasm
deleted file mode 100644
index 25d57df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,537 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 354
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree_1 "tree_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_16 "x_16"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %tree "tree"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %x_170 "x_170"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_261 "x_261"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %result "result"
-               OpName %param_24 "param_24"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_16 NonWritable
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %13 = OpConstantNull %_arr_BST_uint_10
-     %tree_1 = OpVariable %_ptr_Private__arr_BST_uint_10 Private %13
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_16 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %40 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %46 = OpConstantNull %int
-         %48 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %161 = OpTypeFunction %int %_ptr_Function_int
-        %202 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %341 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %342 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %343 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %20
-       %tree = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %27 = OpLabel
-         %29 = OpLoad %int %data
-         %32 = OpAccessChain %_ptr_Function_int %tree %uint_0
-               OpStore %32 %29
-         %35 = OpAccessChain %_ptr_Function_int %tree %uint_1
-               OpStore %35 %int_n1
-         %39 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %39 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %40
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %44 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %46
-      %param = OpVariable %_ptr_Function_BST Function %48
-    %param_1 = OpVariable %_ptr_Function_int Function %46
-      %x_170 = OpVariable %_ptr_Function_int Function %46
-    %param_2 = OpVariable %_ptr_Function_BST Function %48
-    %param_3 = OpVariable %_ptr_Function_int Function %46
-               OpStore %baseIndex %int_0
-               OpBranch %54
-         %54 = OpLabel
-               OpLoopMerge %55 %56 None
-               OpBranch %57
-         %57 = OpLabel
-         %58 = OpLoad %int %baseIndex
-         %60 = OpLoad %int %treeIndex
-         %61 = OpSLessThanEqual %bool %58 %60
-               OpSelectionMerge %63 None
-               OpBranchConditional %61 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %55
-         %63 = OpLabel
-         %67 = OpLoad %int %data_1
-         %68 = OpLoad %int %baseIndex
-         %70 = OpAccessChain %_ptr_Private_int %tree_1 %68 %uint_0
-         %71 = OpLoad %int %70
-         %72 = OpSLessThanEqual %bool %67 %71
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpLoad %int %baseIndex
-         %77 = OpAccessChain %_ptr_Private_int %tree_1 %76 %uint_1
-         %78 = OpLoad %int %77
-         %79 = OpIEqual %bool %78 %int_n1
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpLoad %int %baseIndex
-         %85 = OpLoad %int %treeIndex
-         %86 = OpAccessChain %_ptr_Private_int %tree_1 %83 %uint_1
-               OpStore %86 %85
-         %88 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-         %89 = OpLoad %float %88
-         %90 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-         %91 = OpLoad %float %90
-         %92 = OpFOrdLessThan %bool %89 %91
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %93
-         %94 = OpLabel
-         %96 = OpLoad %int %treeIndex
-         %98 = OpAccessChain %_ptr_Private_BST %tree_1 %96
-         %99 = OpLoad %BST %98
-               OpStore %param %99
-        %101 = OpLoad %int %data_1
-               OpStore %param_1 %101
-        %102 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-        %105 = OpLoad %BST %param
-        %106 = OpAccessChain %_ptr_Private_BST %tree_1 %96
-               OpStore %106 %105
-               OpBranch %93
-         %93 = OpLabel
-        %107 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-        %108 = OpLoad %float %107
-        %109 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-        %110 = OpLoad %float %109
-        %111 = OpFOrdLessThan %bool %108 %110
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %112
-        %113 = OpLabel
-               OpReturn
-        %112 = OpLabel
-               OpBranch %80
-         %82 = OpLabel
-        %114 = OpLoad %int %baseIndex
-        %115 = OpAccessChain %_ptr_Private_int %tree_1 %114 %uint_1
-        %116 = OpLoad %int %115
-               OpStore %baseIndex %116
-               OpBranch %56
-         %80 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-        %117 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-        %118 = OpLoad %float %117
-        %119 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-        %120 = OpLoad %float %119
-        %121 = OpFOrdLessThan %bool %118 %120
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-        %125 = OpLoad %int %baseIndex
-        %126 = OpAccessChain %_ptr_Private_int %tree_1 %125 %uint_2
-        %127 = OpLoad %int %126
-               OpStore %x_170 %127
-               OpBranch %122
-        %124 = OpLabel
-        %128 = OpLoad %int %baseIndex
-        %129 = OpAccessChain %_ptr_Private_int %tree_1 %128 %uint_2
-        %130 = OpLoad %int %129
-               OpStore %x_170 %130
-               OpBranch %122
-        %122 = OpLabel
-        %131 = OpLoad %int %x_170
-        %132 = OpIEqual %bool %131 %int_n1
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %135
-        %134 = OpLabel
-        %136 = OpLoad %int %baseIndex
-        %138 = OpLoad %int %treeIndex
-        %139 = OpAccessChain %_ptr_Private_int %tree_1 %136 %uint_2
-               OpStore %139 %138
-        %141 = OpLoad %int %treeIndex
-        %142 = OpAccessChain %_ptr_Private_BST %tree_1 %141
-        %143 = OpLoad %BST %142
-               OpStore %param_2 %143
-        %145 = OpLoad %int %data_1
-               OpStore %param_3 %145
-        %146 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %149 = OpLoad %BST %param_2
-        %150 = OpAccessChain %_ptr_Private_BST %tree_1 %141
-               OpStore %150 %149
-               OpReturn
-        %135 = OpLabel
-        %151 = OpLoad %int %baseIndex
-        %152 = OpAccessChain %_ptr_Private_int %tree_1 %151 %uint_2
-        %153 = OpLoad %int %152
-               OpStore %baseIndex %153
-               OpBranch %56
-        %133 = OpLabel
-               OpReturn
-         %73 = OpLabel
-        %154 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-        %155 = OpLoad %float %154
-        %156 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-        %157 = OpLoad %float %156
-        %158 = OpFOrdGreaterThan %bool %155 %157
-               OpSelectionMerge %159 None
-               OpBranchConditional %158 %160 %159
-        %160 = OpLabel
-               OpReturn
-        %159 = OpLabel
-               OpBranch %56
-         %56 = OpLabel
-               OpBranch %54
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %161
-     %target = OpFunctionParameter %_ptr_Function_int
-        %164 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %46
-%currentNode = OpVariable %_ptr_Function_BST Function %48
-      %x_261 = OpVariable %_ptr_Function_int Function %46
-               OpStore %index %int_0
-               OpBranch %168
-        %168 = OpLabel
-               OpLoopMerge %169 %170 None
-               OpBranch %171
-        %171 = OpLabel
-        %172 = OpLoad %int %index
-        %173 = OpINotEqual %bool %172 %int_n1
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-               OpBranch %174
-        %176 = OpLabel
-               OpBranch %169
-        %174 = OpLabel
-        %177 = OpLoad %int %index
-        %178 = OpAccessChain %_ptr_Private_BST %tree_1 %177
-        %179 = OpLoad %BST %178
-               OpStore %currentNode %179
-        %180 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %181 = OpLoad %int %180
-        %183 = OpLoad %int %target
-        %184 = OpIEqual %bool %181 %183
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %185
-        %186 = OpLabel
-        %188 = OpLoad %int %target
-               OpReturnValue %188
-        %185 = OpLabel
-        %190 = OpLoad %int %target
-        %191 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %192 = OpLoad %int %191
-        %193 = OpSGreaterThan %bool %190 %192
-               OpSelectionMerge %194 None
-               OpBranchConditional %193 %195 %196
-        %195 = OpLabel
-        %197 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %198 = OpLoad %int %197
-               OpStore %x_261 %198
-               OpBranch %194
-        %196 = OpLabel
-        %199 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %200 = OpLoad %int %199
-               OpStore %x_261 %200
-               OpBranch %194
-        %194 = OpLabel
-        %201 = OpLoad %int %x_261
-               OpStore %index %201
-               OpBranch %170
-        %170 = OpLabel
-               OpBranch %168
-        %169 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %202
-        %204 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %46
-    %param_4 = OpVariable %_ptr_Function_BST Function %48
-    %param_5 = OpVariable %_ptr_Function_int Function %46
-    %param_6 = OpVariable %_ptr_Function_int Function %46
-    %param_7 = OpVariable %_ptr_Function_int Function %46
-    %param_8 = OpVariable %_ptr_Function_int Function %46
-    %param_9 = OpVariable %_ptr_Function_int Function %46
-   %param_10 = OpVariable %_ptr_Function_int Function %46
-   %param_11 = OpVariable %_ptr_Function_int Function %46
-   %param_12 = OpVariable %_ptr_Function_int Function %46
-   %param_13 = OpVariable %_ptr_Function_int Function %46
-   %param_14 = OpVariable %_ptr_Function_int Function %46
-   %param_15 = OpVariable %_ptr_Function_int Function %46
-   %param_16 = OpVariable %_ptr_Function_int Function %46
-   %param_17 = OpVariable %_ptr_Function_int Function %46
-   %param_18 = OpVariable %_ptr_Function_int Function %46
-   %param_19 = OpVariable %_ptr_Function_int Function %46
-   %param_20 = OpVariable %_ptr_Function_int Function %46
-   %param_21 = OpVariable %_ptr_Function_int Function %46
-   %param_22 = OpVariable %_ptr_Function_int Function %46
-   %param_23 = OpVariable %_ptr_Function_int Function %46
-      %count = OpVariable %_ptr_Function_int Function %46
-          %i = OpVariable %_ptr_Function_int Function %46
-     %result = OpVariable %_ptr_Function_int Function %46
-   %param_24 = OpVariable %_ptr_Function_int Function %46
-               OpStore %treeIndex_1 %int_0
-        %230 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-        %231 = OpLoad %BST %230
-               OpStore %param_4 %231
-               OpStore %param_5 %int_9
-        %233 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %236 = OpLoad %BST %param_4
-        %237 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-               OpStore %237 %236
-        %238 = OpLoad %int %treeIndex_1
-        %240 = OpIAdd %int %238 %int_1
-               OpStore %treeIndex_1 %240
-        %241 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %241
-               OpStore %param_7 %int_5
-        %243 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %246 = OpLoad %int %treeIndex_1
-        %247 = OpIAdd %int %246 %int_1
-               OpStore %treeIndex_1 %247
-        %248 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %248
-               OpStore %param_9 %int_12
-        %250 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %253 = OpLoad %int %treeIndex_1
-        %254 = OpIAdd %int %253 %int_1
-               OpStore %treeIndex_1 %254
-        %255 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %255
-               OpStore %param_11 %int_15
-        %257 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %260 = OpLoad %int %treeIndex_1
-        %261 = OpIAdd %int %260 %int_1
-               OpStore %treeIndex_1 %261
-        %262 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %262
-               OpStore %param_13 %int_7
-        %264 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %267 = OpLoad %int %treeIndex_1
-        %268 = OpIAdd %int %267 %int_1
-               OpStore %treeIndex_1 %268
-        %269 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %269
-               OpStore %param_15 %int_8
-        %271 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %274 = OpLoad %int %treeIndex_1
-        %275 = OpIAdd %int %274 %int_1
-               OpStore %treeIndex_1 %275
-        %276 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %276
-               OpStore %param_17 %int_2
-        %278 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %281 = OpLoad %int %treeIndex_1
-        %282 = OpIAdd %int %281 %int_1
-               OpStore %treeIndex_1 %282
-        %283 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %283
-               OpStore %param_19 %int_6
-        %285 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %288 = OpLoad %int %treeIndex_1
-        %289 = OpIAdd %int %288 %int_1
-               OpStore %treeIndex_1 %289
-        %290 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %290
-               OpStore %param_21 %int_17
-        %292 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %295 = OpLoad %int %treeIndex_1
-        %296 = OpIAdd %int %295 %int_1
-               OpStore %treeIndex_1 %296
-        %297 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %297
-               OpStore %param_23 %int_13
-        %299 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %count %int_0
-               OpStore %i %int_0
-               OpBranch %302
-        %302 = OpLabel
-               OpLoopMerge %303 %304 None
-               OpBranch %305
-        %305 = OpLabel
-        %306 = OpLoad %int %i
-        %308 = OpSLessThan %bool %306 %int_20
-               OpSelectionMerge %309 None
-               OpBranchConditional %308 %310 %311
-        %310 = OpLabel
-               OpBranch %309
-        %311 = OpLabel
-               OpBranch %303
-        %309 = OpLabel
-        %312 = OpLoad %int %i
-               OpStore %param_24 %312
-        %313 = OpFunctionCall %int %search_i1_ %param_24
-               OpStore %result %313
-        %315 = OpLoad %int %i
-               OpSelectionMerge %316 None
-               OpSwitch %315 %317 2 %318 5 %318 6 %318 7 %318 8 %318 9 %318 12 %318 13 %318 15 %318 17 %318
-        %318 = OpLabel
-        %319 = OpLoad %int %result
-        %320 = OpLoad %int %i
-        %321 = OpIEqual %bool %319 %320
-               OpSelectionMerge %322 None
-               OpBranchConditional %321 %323 %322
-        %323 = OpLabel
-        %324 = OpLoad %int %count
-        %325 = OpIAdd %int %324 %int_1
-               OpStore %count %325
-               OpBranch %322
-        %322 = OpLabel
-               OpBranch %316
-        %317 = OpLabel
-        %326 = OpLoad %int %result
-        %327 = OpIEqual %bool %326 %int_n1
-               OpSelectionMerge %328 None
-               OpBranchConditional %327 %329 %328
-        %329 = OpLabel
-        %330 = OpLoad %int %count
-        %331 = OpIAdd %int %330 %int_1
-               OpStore %count %331
-               OpBranch %328
-        %328 = OpLabel
-               OpBranch %316
-        %316 = OpLabel
-               OpBranch %304
-        %304 = OpLabel
-        %332 = OpLoad %int %i
-        %333 = OpIAdd %int %332 %int_1
-               OpStore %i %333
-               OpBranch %302
-        %303 = OpLabel
-        %334 = OpLoad %int %count
-        %335 = OpIEqual %bool %334 %int_20
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %338
-        %337 = OpLabel
-               OpStore %x_GLF_color %341
-               OpBranch %336
-        %338 = OpLabel
-               OpStore %x_GLF_color %342
-               OpBranch %336
-        %336 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %343
-        %346 = OpLabel
-        %347 = OpFunctionCall %void %main_1
-        %348 = OpLoad %v4float %x_GLF_color
-        %349 = OpCompositeConstruct %main_out %348
-               OpReturnValue %349
-               OpFunctionEnd
-       %main = OpFunction %void None %202
-        %351 = OpLabel
-        %352 = OpFunctionCall %main_out %main_inner
-        %353 = OpCompositeExtract %v4float %352 0
-               OpStore %x_GLF_color_1_1 %353
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.wgsl
deleted file mode 100644
index 06f95bb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-nested-if-and-conditional/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,293 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> tree_1 : array<BST, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_16 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_165 : i32 = *(data);
-  (*(tree)).data = x_165;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var x_170 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_175 : i32 = baseIndex;
-    let x_176 : i32 = *(treeIndex);
-    if ((x_175 <= x_176)) {
-    } else {
-      break;
-    }
-    let x_179 : i32 = *(data_1);
-    let x_180 : i32 = baseIndex;
-    let x_182 : i32 = tree_1[x_180].data;
-    if ((x_179 <= x_182)) {
-      let x_187 : i32 = baseIndex;
-      let x_189 : i32 = tree_1[x_187].leftIndex;
-      if ((x_189 == -1)) {
-        let x_194 : i32 = baseIndex;
-        let x_195 : i32 = *(treeIndex);
-        tree_1[x_194].leftIndex = x_195;
-        let x_198 : f32 = x_16.injectionSwitch.x;
-        let x_200 : f32 = x_16.injectionSwitch.y;
-        if ((x_198 < x_200)) {
-          let x_204 : i32 = *(treeIndex);
-          let x_206 : BST = tree_1[x_204];
-          param = x_206;
-          let x_207 : i32 = *(data_1);
-          param_1 = x_207;
-          makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-          let x_209 : BST = param;
-          tree_1[x_204] = x_209;
-        }
-        let x_212 : f32 = x_16.injectionSwitch.x;
-        let x_214 : f32 = x_16.injectionSwitch.y;
-        if ((x_212 < x_214)) {
-          return;
-        }
-      } else {
-        let x_218 : i32 = baseIndex;
-        let x_220 : i32 = tree_1[x_218].leftIndex;
-        baseIndex = x_220;
-        continue;
-      }
-    } else {
-      let x_222 : f32 = x_16.injectionSwitch.x;
-      let x_224 : f32 = x_16.injectionSwitch.y;
-      if ((x_222 < x_224)) {
-        let x_229 : i32 = baseIndex;
-        let x_231 : i32 = tree_1[x_229].rightIndex;
-        x_170 = x_231;
-      } else {
-        let x_232 : i32 = baseIndex;
-        let x_234 : i32 = tree_1[x_232].rightIndex;
-        x_170 = x_234;
-      }
-      let x_235 : i32 = x_170;
-      if ((x_235 == -1)) {
-        let x_240 : i32 = baseIndex;
-        let x_241 : i32 = *(treeIndex);
-        tree_1[x_240].rightIndex = x_241;
-        let x_243 : i32 = *(treeIndex);
-        let x_245 : BST = tree_1[x_243];
-        param_2 = x_245;
-        let x_246 : i32 = *(data_1);
-        param_3 = x_246;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_248 : BST = param_2;
-        tree_1[x_243] = x_248;
-        return;
-      } else {
-        let x_250 : i32 = baseIndex;
-        let x_252 : i32 = tree_1[x_250].rightIndex;
-        baseIndex = x_252;
-        continue;
-      }
-      return;
-    }
-    let x_254 : f32 = x_16.injectionSwitch.x;
-    let x_256 : f32 = x_16.injectionSwitch.y;
-    if ((x_254 > x_256)) {
-      return;
-    }
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_261 : i32;
-  index = 0;
-  loop {
-    let x_266 : i32 = index;
-    if ((x_266 != -1)) {
-    } else {
-      break;
-    }
-    let x_269 : i32 = index;
-    let x_271 : BST = tree_1[x_269];
-    currentNode = x_271;
-    let x_273 : i32 = currentNode.data;
-    let x_274 : i32 = *(target);
-    if ((x_273 == x_274)) {
-      let x_278 : i32 = *(target);
-      return x_278;
-    }
-    let x_279 : i32 = *(target);
-    let x_281 : i32 = currentNode.data;
-    if ((x_279 > x_281)) {
-      let x_287 : i32 = currentNode.rightIndex;
-      x_261 = x_287;
-    } else {
-      let x_289 : i32 = currentNode.leftIndex;
-      x_261 = x_289;
-    }
-    let x_290 : i32 = x_261;
-    index = x_290;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var count : i32;
-  var i : i32;
-  var result : i32;
-  var param_24 : i32;
-  treeIndex_1 = 0;
-  let x_91 : BST = tree_1[0];
-  param_4 = x_91;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_93 : BST = param_4;
-  tree_1[0] = x_93;
-  let x_95 : i32 = treeIndex_1;
-  treeIndex_1 = (x_95 + 1);
-  let x_97 : i32 = treeIndex_1;
-  param_6 = x_97;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_99 : i32 = treeIndex_1;
-  treeIndex_1 = (x_99 + 1);
-  let x_101 : i32 = treeIndex_1;
-  param_8 = x_101;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_103 : i32 = treeIndex_1;
-  treeIndex_1 = (x_103 + 1);
-  let x_105 : i32 = treeIndex_1;
-  param_10 = x_105;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_107 : i32 = treeIndex_1;
-  treeIndex_1 = (x_107 + 1);
-  let x_109 : i32 = treeIndex_1;
-  param_12 = x_109;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_111 : i32 = treeIndex_1;
-  treeIndex_1 = (x_111 + 1);
-  let x_113 : i32 = treeIndex_1;
-  param_14 = x_113;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_115 : i32 = treeIndex_1;
-  treeIndex_1 = (x_115 + 1);
-  let x_117 : i32 = treeIndex_1;
-  param_16 = x_117;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_119 : i32 = treeIndex_1;
-  treeIndex_1 = (x_119 + 1);
-  let x_121 : i32 = treeIndex_1;
-  param_18 = x_121;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_123 : i32 = treeIndex_1;
-  treeIndex_1 = (x_123 + 1);
-  let x_125 : i32 = treeIndex_1;
-  param_20 = x_125;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_127 : i32 = treeIndex_1;
-  treeIndex_1 = (x_127 + 1);
-  let x_129 : i32 = treeIndex_1;
-  param_22 = x_129;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  count = 0;
-  i = 0;
-  loop {
-    let x_135 : i32 = i;
-    if ((x_135 < 20)) {
-    } else {
-      break;
-    }
-    let x_138 : i32 = i;
-    param_24 = x_138;
-    let x_139 : i32 = search_i1_(&(param_24));
-    result = x_139;
-    let x_140 : i32 = i;
-    switch(x_140) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_150 : i32 = result;
-        let x_151 : i32 = i;
-        if ((x_150 == x_151)) {
-          let x_155 : i32 = count;
-          count = (x_155 + 1);
-        }
-      }
-      default: {
-        let x_144 : i32 = result;
-        if ((x_144 == -1)) {
-          let x_148 : i32 = count;
-          count = (x_148 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_157 : i32 = i;
-      i = (x_157 + 1);
-    }
-  }
-  let x_159 : i32 = count;
-  if ((x_159 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 0005017..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,240 +0,0 @@
-SKIP: FAILED
-
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static BST tree[10] = (BST[10])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST node, inout int data) {
-  const int x_158 = data;
-  node.data = x_158;
-  node.leftIndex = -1;
-  node.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_167 = baseIndex;
-    const int x_168 = treeIndex;
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    const int x_171 = data_1;
-    const int x_174 = tree[baseIndex].data;
-    if ((x_171 <= x_174)) {
-      const int x_181 = tree[baseIndex].leftIndex;
-      if ((x_181 == -1)) {
-        const int x_186 = baseIndex;
-        const int x_187 = treeIndex;
-        tree[x_186].leftIndex = x_187;
-        const int x_189 = treeIndex;
-        const BST x_191 = tree[x_189];
-        param = x_191;
-        const int x_192 = data_1;
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree[x_189] = param;
-        return;
-      } else {
-        const int x_198 = tree[baseIndex].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      const int x_201 = tree[baseIndex].rightIndex;
-      if ((x_201 == -1)) {
-        const int x_206 = baseIndex;
-        const int x_207 = treeIndex;
-        tree[x_206].rightIndex = x_207;
-        const int x_209 = treeIndex;
-        const BST x_211 = tree[x_209];
-        param_2 = x_211;
-        const int x_212 = data_1;
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree[x_209] = param_2;
-        return;
-      } else {
-        const int x_218 = tree[baseIndex].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_220 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_230 = tree[index];
-    currentNode = x_230;
-    const int x_232 = currentNode.data;
-    const int x_233 = target;
-    if ((x_232 == x_233)) {
-      const int x_237 = target;
-      return x_237;
-    }
-    const int x_238 = target;
-    const int x_240 = currentNode.data;
-    if ((x_238 > x_240)) {
-      const int x_246 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      const int x_248 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    index = x_220;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  const BST x_84 = tree[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  count = 0;
-  i = 0;
-  {
-    for(; (i < 20); i = (i + 1)) {
-      param_24 = i;
-      const int x_132 = search_i1_(param_24);
-      result = x_132;
-      switch(i) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          if ((result == i)) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_2 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_2;
-}
-C:\src\tint\test\Shader@0x000001759DB96E70(25,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001759DB96E70(25,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001759DB96E70(25,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001759DB96E70(25,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-internal error: compilation aborted unexpectedly
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.msl
deleted file mode 100644
index 58102cc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,287 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const node, thread int* const data) {
-  int const x_158 = *(data);
-  (*(node)).data = x_158;
-  (*(node)).leftIndex = -1;
-  (*(node)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_167 = baseIndex;
-    int const x_168 = *(treeIndex);
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    int const x_171 = *(data_1);
-    int const x_172 = baseIndex;
-    int const x_174 = (*(tint_symbol_3)).arr[x_172].data;
-    if ((x_171 <= x_174)) {
-      int const x_179 = baseIndex;
-      int const x_181 = (*(tint_symbol_3)).arr[x_179].leftIndex;
-      if ((x_181 == -1)) {
-        int const x_186 = baseIndex;
-        int const x_187 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_186].leftIndex = x_187;
-        int const x_189 = *(treeIndex);
-        BST const x_191 = (*(tint_symbol_3)).arr[x_189];
-        param = x_191;
-        int const x_192 = *(data_1);
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_194 = param;
-        (*(tint_symbol_3)).arr[x_189] = x_194;
-        return;
-      } else {
-        int const x_196 = baseIndex;
-        int const x_198 = (*(tint_symbol_3)).arr[x_196].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      int const x_199 = baseIndex;
-      int const x_201 = (*(tint_symbol_3)).arr[x_199].rightIndex;
-      if ((x_201 == -1)) {
-        int const x_206 = baseIndex;
-        int const x_207 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_206].rightIndex = x_207;
-        int const x_209 = *(treeIndex);
-        BST const x_211 = (*(tint_symbol_3)).arr[x_209];
-        param_2 = x_211;
-        int const x_212 = *(data_1);
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_214 = param_2;
-        (*(tint_symbol_3)).arr[x_209] = x_214;
-        return;
-      } else {
-        int const x_216 = baseIndex;
-        int const x_218 = (*(tint_symbol_3)).arr[x_216].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_220 = 0;
-  index = 0;
-  while (true) {
-    int const x_225 = index;
-    if ((x_225 != -1)) {
-    } else {
-      break;
-    }
-    int const x_228 = index;
-    BST const x_230 = (*(tint_symbol_4)).arr[x_228];
-    currentNode = x_230;
-    int const x_232 = currentNode.data;
-    int const x_233 = *(target);
-    if ((x_232 == x_233)) {
-      int const x_237 = *(target);
-      return x_237;
-    }
-    int const x_238 = *(target);
-    int const x_240 = currentNode.data;
-    if ((x_238 > x_240)) {
-      int const x_246 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      int const x_248 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    int const x_249 = x_220;
-    index = x_249;
-  }
-  return -1;
-}
-
-void main_1(thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  BST const x_84 = (*(tint_symbol_5)).arr[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_86 = param_4;
-  (*(tint_symbol_5)).arr[0] = x_86;
-  int const x_88 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-  int const x_90 = treeIndex_1;
-  param_6 = x_90;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7), tint_symbol_5);
-  int const x_92 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(1)));
-  int const x_94 = treeIndex_1;
-  param_8 = x_94;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9), tint_symbol_5);
-  int const x_96 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-  int const x_98 = treeIndex_1;
-  param_10 = x_98;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11), tint_symbol_5);
-  int const x_100 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-  int const x_102 = treeIndex_1;
-  param_12 = x_102;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13), tint_symbol_5);
-  int const x_104 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-  int const x_106 = treeIndex_1;
-  param_14 = x_106;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15), tint_symbol_5);
-  int const x_108 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-  int const x_110 = treeIndex_1;
-  param_16 = x_110;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17), tint_symbol_5);
-  int const x_112 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-  int const x_114 = treeIndex_1;
-  param_18 = x_114;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19), tint_symbol_5);
-  int const x_116 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-  int const x_118 = treeIndex_1;
-  param_20 = x_118;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21), tint_symbol_5);
-  int const x_120 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-  int const x_122 = treeIndex_1;
-  param_22 = x_122;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23), tint_symbol_5);
-  count = 0;
-  i = 0;
-  while (true) {
-    int const x_128 = i;
-    if ((x_128 < 20)) {
-    } else {
-      break;
-    }
-    int const x_131 = i;
-    param_24 = x_131;
-    int const x_132 = search_i1_(&(param_24), tint_symbol_5);
-    result = x_132;
-    int const x_133 = i;
-    switch(x_133) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_143 = result;
-        int const x_144 = i;
-        if ((x_143 == x_144)) {
-          int const x_148 = count;
-          count = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_137 = result;
-        if ((x_137 == -1)) {
-          int const x_141 = count;
-          count = as_type<int>((as_type<uint>(x_141) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_150 = i;
-      i = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  int const x_152 = count;
-  if ((x_152 == 20)) {
-    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_6) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_9 = {};
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0f01d3e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,474 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 315
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %node "node"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_220 "x_220"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %result "result"
-               OpName %param_24 "param_24"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %13 = OpConstantNull %_arr_BST_uint_10
-       %tree = OpVariable %_ptr_Private__arr_BST_uint_10 Private %13
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %16 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %36 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %42 = OpConstantNull %int
-         %44 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %122 = OpTypeFunction %int %_ptr_Function_int
-        %163 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %302 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %303 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %304 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %16
-       %node = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %23 = OpLabel
-         %25 = OpLoad %int %data
-         %28 = OpAccessChain %_ptr_Function_int %node %uint_0
-               OpStore %28 %25
-         %31 = OpAccessChain %_ptr_Function_int %node %uint_1
-               OpStore %31 %int_n1
-         %35 = OpAccessChain %_ptr_Function_int %node %uint_2
-               OpStore %35 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %36
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %40 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %42
-      %param = OpVariable %_ptr_Function_BST Function %44
-    %param_1 = OpVariable %_ptr_Function_int Function %42
-    %param_2 = OpVariable %_ptr_Function_BST Function %44
-    %param_3 = OpVariable %_ptr_Function_int Function %42
-               OpStore %baseIndex %int_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpLoad %int %baseIndex
-         %55 = OpLoad %int %treeIndex
-         %56 = OpSLessThanEqual %bool %53 %55
-               OpSelectionMerge %58 None
-               OpBranchConditional %56 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %50
-         %58 = OpLabel
-         %62 = OpLoad %int %data_1
-         %63 = OpLoad %int %baseIndex
-         %65 = OpAccessChain %_ptr_Private_int %tree %63 %uint_0
-         %66 = OpLoad %int %65
-         %67 = OpSLessThanEqual %bool %62 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %71 = OpLoad %int %baseIndex
-         %72 = OpAccessChain %_ptr_Private_int %tree %71 %uint_1
-         %73 = OpLoad %int %72
-         %74 = OpIEqual %bool %73 %int_n1
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpLoad %int %baseIndex
-         %80 = OpLoad %int %treeIndex
-         %81 = OpAccessChain %_ptr_Private_int %tree %78 %uint_1
-               OpStore %81 %80
-         %83 = OpLoad %int %treeIndex
-         %85 = OpAccessChain %_ptr_Private_BST %tree %83
-         %86 = OpLoad %BST %85
-               OpStore %param %86
-         %88 = OpLoad %int %data_1
-               OpStore %param_1 %88
-         %89 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-         %92 = OpLoad %BST %param
-         %93 = OpAccessChain %_ptr_Private_BST %tree %83
-               OpStore %93 %92
-               OpReturn
-         %77 = OpLabel
-         %94 = OpLoad %int %baseIndex
-         %95 = OpAccessChain %_ptr_Private_int %tree %94 %uint_1
-         %96 = OpLoad %int %95
-               OpStore %baseIndex %96
-               OpBranch %51
-         %75 = OpLabel
-               OpReturn
-         %70 = OpLabel
-         %97 = OpLoad %int %baseIndex
-         %98 = OpAccessChain %_ptr_Private_int %tree %97 %uint_2
-         %99 = OpLoad %int %98
-        %100 = OpIEqual %bool %99 %int_n1
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-        %104 = OpLoad %int %baseIndex
-        %106 = OpLoad %int %treeIndex
-        %107 = OpAccessChain %_ptr_Private_int %tree %104 %uint_2
-               OpStore %107 %106
-        %109 = OpLoad %int %treeIndex
-        %110 = OpAccessChain %_ptr_Private_BST %tree %109
-        %111 = OpLoad %BST %110
-               OpStore %param_2 %111
-        %113 = OpLoad %int %data_1
-               OpStore %param_3 %113
-        %114 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %117 = OpLoad %BST %param_2
-        %118 = OpAccessChain %_ptr_Private_BST %tree %109
-               OpStore %118 %117
-               OpReturn
-        %103 = OpLabel
-        %119 = OpLoad %int %baseIndex
-        %120 = OpAccessChain %_ptr_Private_int %tree %119 %uint_2
-        %121 = OpLoad %int %120
-               OpStore %baseIndex %121
-               OpBranch %51
-        %101 = OpLabel
-               OpReturn
-         %68 = OpLabel
-               OpReturn
-         %51 = OpLabel
-               OpBranch %49
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %122
-     %target = OpFunctionParameter %_ptr_Function_int
-        %125 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %42
-%currentNode = OpVariable %_ptr_Function_BST Function %44
-      %x_220 = OpVariable %_ptr_Function_int Function %42
-               OpStore %index %int_0
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %index
-        %134 = OpINotEqual %bool %133 %int_n1
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %130
-        %135 = OpLabel
-        %138 = OpLoad %int %index
-        %139 = OpAccessChain %_ptr_Private_BST %tree %138
-        %140 = OpLoad %BST %139
-               OpStore %currentNode %140
-        %141 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %142 = OpLoad %int %141
-        %144 = OpLoad %int %target
-        %145 = OpIEqual %bool %142 %144
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %146
-        %147 = OpLabel
-        %149 = OpLoad %int %target
-               OpReturnValue %149
-        %146 = OpLabel
-        %151 = OpLoad %int %target
-        %152 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %153 = OpLoad %int %152
-        %154 = OpSGreaterThan %bool %151 %153
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-        %158 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %159 = OpLoad %int %158
-               OpStore %x_220 %159
-               OpBranch %155
-        %157 = OpLabel
-        %160 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %161 = OpLoad %int %160
-               OpStore %x_220 %161
-               OpBranch %155
-        %155 = OpLabel
-        %162 = OpLoad %int %x_220
-               OpStore %index %162
-               OpBranch %131
-        %131 = OpLabel
-               OpBranch %129
-        %130 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %163
-        %165 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %42
-    %param_4 = OpVariable %_ptr_Function_BST Function %44
-    %param_5 = OpVariable %_ptr_Function_int Function %42
-    %param_6 = OpVariable %_ptr_Function_int Function %42
-    %param_7 = OpVariable %_ptr_Function_int Function %42
-    %param_8 = OpVariable %_ptr_Function_int Function %42
-    %param_9 = OpVariable %_ptr_Function_int Function %42
-   %param_10 = OpVariable %_ptr_Function_int Function %42
-   %param_11 = OpVariable %_ptr_Function_int Function %42
-   %param_12 = OpVariable %_ptr_Function_int Function %42
-   %param_13 = OpVariable %_ptr_Function_int Function %42
-   %param_14 = OpVariable %_ptr_Function_int Function %42
-   %param_15 = OpVariable %_ptr_Function_int Function %42
-   %param_16 = OpVariable %_ptr_Function_int Function %42
-   %param_17 = OpVariable %_ptr_Function_int Function %42
-   %param_18 = OpVariable %_ptr_Function_int Function %42
-   %param_19 = OpVariable %_ptr_Function_int Function %42
-   %param_20 = OpVariable %_ptr_Function_int Function %42
-   %param_21 = OpVariable %_ptr_Function_int Function %42
-   %param_22 = OpVariable %_ptr_Function_int Function %42
-   %param_23 = OpVariable %_ptr_Function_int Function %42
-      %count = OpVariable %_ptr_Function_int Function %42
-          %i = OpVariable %_ptr_Function_int Function %42
-     %result = OpVariable %_ptr_Function_int Function %42
-   %param_24 = OpVariable %_ptr_Function_int Function %42
-               OpStore %treeIndex_1 %int_0
-        %191 = OpAccessChain %_ptr_Private_BST %tree %int_0
-        %192 = OpLoad %BST %191
-               OpStore %param_4 %192
-               OpStore %param_5 %int_9
-        %194 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %197 = OpLoad %BST %param_4
-        %198 = OpAccessChain %_ptr_Private_BST %tree %int_0
-               OpStore %198 %197
-        %199 = OpLoad %int %treeIndex_1
-        %201 = OpIAdd %int %199 %int_1
-               OpStore %treeIndex_1 %201
-        %202 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %202
-               OpStore %param_7 %int_5
-        %204 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %207 = OpLoad %int %treeIndex_1
-        %208 = OpIAdd %int %207 %int_1
-               OpStore %treeIndex_1 %208
-        %209 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %209
-               OpStore %param_9 %int_12
-        %211 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %214 = OpLoad %int %treeIndex_1
-        %215 = OpIAdd %int %214 %int_1
-               OpStore %treeIndex_1 %215
-        %216 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %216
-               OpStore %param_11 %int_15
-        %218 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %221 = OpLoad %int %treeIndex_1
-        %222 = OpIAdd %int %221 %int_1
-               OpStore %treeIndex_1 %222
-        %223 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %223
-               OpStore %param_13 %int_7
-        %225 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %228 = OpLoad %int %treeIndex_1
-        %229 = OpIAdd %int %228 %int_1
-               OpStore %treeIndex_1 %229
-        %230 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %230
-               OpStore %param_15 %int_8
-        %232 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %235 = OpLoad %int %treeIndex_1
-        %236 = OpIAdd %int %235 %int_1
-               OpStore %treeIndex_1 %236
-        %237 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %237
-               OpStore %param_17 %int_2
-        %239 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %242 = OpLoad %int %treeIndex_1
-        %243 = OpIAdd %int %242 %int_1
-               OpStore %treeIndex_1 %243
-        %244 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %244
-               OpStore %param_19 %int_6
-        %246 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %249 = OpLoad %int %treeIndex_1
-        %250 = OpIAdd %int %249 %int_1
-               OpStore %treeIndex_1 %250
-        %251 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %251
-               OpStore %param_21 %int_17
-        %253 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %256 = OpLoad %int %treeIndex_1
-        %257 = OpIAdd %int %256 %int_1
-               OpStore %treeIndex_1 %257
-        %258 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %258
-               OpStore %param_23 %int_13
-        %260 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %count %int_0
-               OpStore %i %int_0
-               OpBranch %263
-        %263 = OpLabel
-               OpLoopMerge %264 %265 None
-               OpBranch %266
-        %266 = OpLabel
-        %267 = OpLoad %int %i
-        %269 = OpSLessThan %bool %267 %int_20
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %272
-        %271 = OpLabel
-               OpBranch %270
-        %272 = OpLabel
-               OpBranch %264
-        %270 = OpLabel
-        %273 = OpLoad %int %i
-               OpStore %param_24 %273
-        %274 = OpFunctionCall %int %search_i1_ %param_24
-               OpStore %result %274
-        %276 = OpLoad %int %i
-               OpSelectionMerge %277 None
-               OpSwitch %276 %278 2 %279 5 %279 6 %279 7 %279 8 %279 9 %279 12 %279 13 %279 15 %279 17 %279
-        %279 = OpLabel
-        %280 = OpLoad %int %result
-        %281 = OpLoad %int %i
-        %282 = OpIEqual %bool %280 %281
-               OpSelectionMerge %283 None
-               OpBranchConditional %282 %284 %283
-        %284 = OpLabel
-        %285 = OpLoad %int %count
-        %286 = OpIAdd %int %285 %int_1
-               OpStore %count %286
-               OpBranch %283
-        %283 = OpLabel
-               OpBranch %277
-        %278 = OpLabel
-        %287 = OpLoad %int %result
-        %288 = OpIEqual %bool %287 %int_n1
-               OpSelectionMerge %289 None
-               OpBranchConditional %288 %290 %289
-        %290 = OpLabel
-        %291 = OpLoad %int %count
-        %292 = OpIAdd %int %291 %int_1
-               OpStore %count %292
-               OpBranch %289
-        %289 = OpLabel
-               OpBranch %277
-        %277 = OpLabel
-               OpBranch %265
-        %265 = OpLabel
-        %293 = OpLoad %int %i
-        %294 = OpIAdd %int %293 %int_1
-               OpStore %i %294
-               OpBranch %263
-        %264 = OpLabel
-        %295 = OpLoad %int %count
-        %296 = OpIEqual %bool %295 %int_20
-               OpSelectionMerge %297 None
-               OpBranchConditional %296 %298 %299
-        %298 = OpLabel
-               OpStore %x_GLF_color %302
-               OpBranch %297
-        %299 = OpLabel
-               OpStore %x_GLF_color %303
-               OpBranch %297
-        %297 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %304
-        %307 = OpLabel
-        %308 = OpFunctionCall %void %main_1
-        %309 = OpLoad %v4float %x_GLF_color
-        %310 = OpCompositeConstruct %main_out %309
-               OpReturnValue %310
-               OpFunctionEnd
-       %main = OpFunction %void None %163
-        %312 = OpLabel
-        %313 = OpFunctionCall %main_out %main_inner
-        %314 = OpCompositeExtract %v4float %313 0
-               OpStore %x_GLF_color_1_1 %314
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 19d6c9d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,264 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> tree : array<BST, 10>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(node : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_158 : i32 = *(data);
-  (*(node)).data = x_158;
-  (*(node)).leftIndex = -1;
-  (*(node)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_167 : i32 = baseIndex;
-    let x_168 : i32 = *(treeIndex);
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    let x_171 : i32 = *(data_1);
-    let x_172 : i32 = baseIndex;
-    let x_174 : i32 = tree[x_172].data;
-    if ((x_171 <= x_174)) {
-      let x_179 : i32 = baseIndex;
-      let x_181 : i32 = tree[x_179].leftIndex;
-      if ((x_181 == -1)) {
-        let x_186 : i32 = baseIndex;
-        let x_187 : i32 = *(treeIndex);
-        tree[x_186].leftIndex = x_187;
-        let x_189 : i32 = *(treeIndex);
-        let x_191 : BST = tree[x_189];
-        param = x_191;
-        let x_192 : i32 = *(data_1);
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_194 : BST = param;
-        tree[x_189] = x_194;
-        return;
-      } else {
-        let x_196 : i32 = baseIndex;
-        let x_198 : i32 = tree[x_196].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      let x_199 : i32 = baseIndex;
-      let x_201 : i32 = tree[x_199].rightIndex;
-      if ((x_201 == -1)) {
-        let x_206 : i32 = baseIndex;
-        let x_207 : i32 = *(treeIndex);
-        tree[x_206].rightIndex = x_207;
-        let x_209 : i32 = *(treeIndex);
-        let x_211 : BST = tree[x_209];
-        param_2 = x_211;
-        let x_212 : i32 = *(data_1);
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_214 : BST = param_2;
-        tree[x_209] = x_214;
-        return;
-      } else {
-        let x_216 : i32 = baseIndex;
-        let x_218 : i32 = tree[x_216].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_220 : i32;
-  index = 0;
-  loop {
-    let x_225 : i32 = index;
-    if ((x_225 != -1)) {
-    } else {
-      break;
-    }
-    let x_228 : i32 = index;
-    let x_230 : BST = tree[x_228];
-    currentNode = x_230;
-    let x_232 : i32 = currentNode.data;
-    let x_233 : i32 = *(target);
-    if ((x_232 == x_233)) {
-      let x_237 : i32 = *(target);
-      return x_237;
-    }
-    let x_238 : i32 = *(target);
-    let x_240 : i32 = currentNode.data;
-    if ((x_238 > x_240)) {
-      let x_246 : i32 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      let x_248 : i32 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    let x_249 : i32 = x_220;
-    index = x_249;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var count : i32;
-  var i : i32;
-  var result : i32;
-  var param_24 : i32;
-  treeIndex_1 = 0;
-  let x_84 : BST = tree[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_86 : BST = param_4;
-  tree[0] = x_86;
-  let x_88 : i32 = treeIndex_1;
-  treeIndex_1 = (x_88 + 1);
-  let x_90 : i32 = treeIndex_1;
-  param_6 = x_90;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_92 : i32 = treeIndex_1;
-  treeIndex_1 = (x_92 + 1);
-  let x_94 : i32 = treeIndex_1;
-  param_8 = x_94;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_96 : i32 = treeIndex_1;
-  treeIndex_1 = (x_96 + 1);
-  let x_98 : i32 = treeIndex_1;
-  param_10 = x_98;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_100 : i32 = treeIndex_1;
-  treeIndex_1 = (x_100 + 1);
-  let x_102 : i32 = treeIndex_1;
-  param_12 = x_102;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_104 : i32 = treeIndex_1;
-  treeIndex_1 = (x_104 + 1);
-  let x_106 : i32 = treeIndex_1;
-  param_14 = x_106;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_108 : i32 = treeIndex_1;
-  treeIndex_1 = (x_108 + 1);
-  let x_110 : i32 = treeIndex_1;
-  param_16 = x_110;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_112 : i32 = treeIndex_1;
-  treeIndex_1 = (x_112 + 1);
-  let x_114 : i32 = treeIndex_1;
-  param_18 = x_114;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_116 : i32 = treeIndex_1;
-  treeIndex_1 = (x_116 + 1);
-  let x_118 : i32 = treeIndex_1;
-  param_20 = x_118;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_120 : i32 = treeIndex_1;
-  treeIndex_1 = (x_120 + 1);
-  let x_122 : i32 = treeIndex_1;
-  param_22 = x_122;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  count = 0;
-  i = 0;
-  loop {
-    let x_128 : i32 = i;
-    if ((x_128 < 20)) {
-    } else {
-      break;
-    }
-    let x_131 : i32 = i;
-    param_24 = x_131;
-    let x_132 : i32 = search_i1_(&(param_24));
-    result = x_132;
-    let x_133 : i32 = i;
-    switch(x_133) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_143 : i32 = result;
-        let x_144 : i32 = i;
-        if ((x_143 == x_144)) {
-          let x_148 : i32 = count;
-          count = (x_148 + 1);
-        }
-      }
-      default: {
-        let x_137 : i32 = result;
-        if ((x_137 == -1)) {
-          let x_141 : i32 = count;
-          count = (x_141 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_150 : i32 = i;
-      i = (x_150 + 1);
-    }
-  }
-  let x_152 : i32 = count;
-  if ((x_152 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index adebc99..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,240 +0,0 @@
-SKIP: FAILED
-
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static BST tree[10] = (BST[10])0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST node, inout int data) {
-  const int x_158 = data;
-  node.data = x_158;
-  node.leftIndex = -1;
-  node.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_167 = baseIndex;
-    const int x_168 = treeIndex;
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    const int x_171 = data_1;
-    const int x_174 = tree[baseIndex].data;
-    if ((x_171 <= x_174)) {
-      const int x_181 = tree[baseIndex].leftIndex;
-      if ((x_181 == -1)) {
-        const int x_186 = baseIndex;
-        const int x_187 = treeIndex;
-        tree[x_186].leftIndex = x_187;
-        const int x_189 = treeIndex;
-        const BST x_191 = tree[x_189];
-        param = x_191;
-        const int x_192 = data_1;
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree[x_189] = param;
-        return;
-      } else {
-        const int x_198 = tree[baseIndex].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      const int x_201 = tree[baseIndex].rightIndex;
-      if ((x_201 == -1)) {
-        const int x_206 = baseIndex;
-        const int x_207 = treeIndex;
-        tree[x_206].rightIndex = x_207;
-        const int x_209 = treeIndex;
-        const BST x_211 = tree[x_209];
-        param_2 = x_211;
-        const int x_212 = data_1;
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree[x_209] = param_2;
-        return;
-      } else {
-        const int x_218 = tree[baseIndex].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_220 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_230 = tree[index];
-    currentNode = x_230;
-    const int x_232 = currentNode.data;
-    const int x_233 = target;
-    if ((x_232 == x_233)) {
-      const int x_237 = target;
-      return x_237;
-    }
-    const int x_238 = target;
-    const int x_240 = currentNode.data;
-    if ((x_238 > x_240)) {
-      const int x_246 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      const int x_248 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    index = x_220;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  const BST x_84 = tree[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  count = 0;
-  i = 0;
-  {
-    for(; (i < 20); i = (i + 1)) {
-      param_24 = i;
-      const int x_132 = search_i1_(param_24);
-      result = x_132;
-      switch(i) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          if ((result == i)) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_2 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_2;
-}
-C:\src\tint\test\Shader@0x000001C35344C010(25,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001C35344C010(25,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001C35344C010(25,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000001C35344C010(25,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-internal error: compilation aborted unexpectedly
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.msl
deleted file mode 100644
index 58102cc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,287 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const node, thread int* const data) {
-  int const x_158 = *(data);
-  (*(node)).data = x_158;
-  (*(node)).leftIndex = -1;
-  (*(node)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_167 = baseIndex;
-    int const x_168 = *(treeIndex);
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    int const x_171 = *(data_1);
-    int const x_172 = baseIndex;
-    int const x_174 = (*(tint_symbol_3)).arr[x_172].data;
-    if ((x_171 <= x_174)) {
-      int const x_179 = baseIndex;
-      int const x_181 = (*(tint_symbol_3)).arr[x_179].leftIndex;
-      if ((x_181 == -1)) {
-        int const x_186 = baseIndex;
-        int const x_187 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_186].leftIndex = x_187;
-        int const x_189 = *(treeIndex);
-        BST const x_191 = (*(tint_symbol_3)).arr[x_189];
-        param = x_191;
-        int const x_192 = *(data_1);
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_194 = param;
-        (*(tint_symbol_3)).arr[x_189] = x_194;
-        return;
-      } else {
-        int const x_196 = baseIndex;
-        int const x_198 = (*(tint_symbol_3)).arr[x_196].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      int const x_199 = baseIndex;
-      int const x_201 = (*(tint_symbol_3)).arr[x_199].rightIndex;
-      if ((x_201 == -1)) {
-        int const x_206 = baseIndex;
-        int const x_207 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_206].rightIndex = x_207;
-        int const x_209 = *(treeIndex);
-        BST const x_211 = (*(tint_symbol_3)).arr[x_209];
-        param_2 = x_211;
-        int const x_212 = *(data_1);
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_214 = param_2;
-        (*(tint_symbol_3)).arr[x_209] = x_214;
-        return;
-      } else {
-        int const x_216 = baseIndex;
-        int const x_218 = (*(tint_symbol_3)).arr[x_216].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_220 = 0;
-  index = 0;
-  while (true) {
-    int const x_225 = index;
-    if ((x_225 != -1)) {
-    } else {
-      break;
-    }
-    int const x_228 = index;
-    BST const x_230 = (*(tint_symbol_4)).arr[x_228];
-    currentNode = x_230;
-    int const x_232 = currentNode.data;
-    int const x_233 = *(target);
-    if ((x_232 == x_233)) {
-      int const x_237 = *(target);
-      return x_237;
-    }
-    int const x_238 = *(target);
-    int const x_240 = currentNode.data;
-    if ((x_238 > x_240)) {
-      int const x_246 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      int const x_248 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    int const x_249 = x_220;
-    index = x_249;
-  }
-  return -1;
-}
-
-void main_1(thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int count = 0;
-  int i = 0;
-  int result = 0;
-  int param_24 = 0;
-  treeIndex_1 = 0;
-  BST const x_84 = (*(tint_symbol_5)).arr[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_86 = param_4;
-  (*(tint_symbol_5)).arr[0] = x_86;
-  int const x_88 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-  int const x_90 = treeIndex_1;
-  param_6 = x_90;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7), tint_symbol_5);
-  int const x_92 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_92) + as_type<uint>(1)));
-  int const x_94 = treeIndex_1;
-  param_8 = x_94;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9), tint_symbol_5);
-  int const x_96 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_96) + as_type<uint>(1)));
-  int const x_98 = treeIndex_1;
-  param_10 = x_98;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11), tint_symbol_5);
-  int const x_100 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_100) + as_type<uint>(1)));
-  int const x_102 = treeIndex_1;
-  param_12 = x_102;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13), tint_symbol_5);
-  int const x_104 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_104) + as_type<uint>(1)));
-  int const x_106 = treeIndex_1;
-  param_14 = x_106;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15), tint_symbol_5);
-  int const x_108 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-  int const x_110 = treeIndex_1;
-  param_16 = x_110;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17), tint_symbol_5);
-  int const x_112 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-  int const x_114 = treeIndex_1;
-  param_18 = x_114;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19), tint_symbol_5);
-  int const x_116 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-  int const x_118 = treeIndex_1;
-  param_20 = x_118;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21), tint_symbol_5);
-  int const x_120 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_120) + as_type<uint>(1)));
-  int const x_122 = treeIndex_1;
-  param_22 = x_122;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23), tint_symbol_5);
-  count = 0;
-  i = 0;
-  while (true) {
-    int const x_128 = i;
-    if ((x_128 < 20)) {
-    } else {
-      break;
-    }
-    int const x_131 = i;
-    param_24 = x_131;
-    int const x_132 = search_i1_(&(param_24), tint_symbol_5);
-    result = x_132;
-    int const x_133 = i;
-    switch(x_133) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_143 = result;
-        int const x_144 = i;
-        if ((x_143 == x_144)) {
-          int const x_148 = count;
-          count = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_137 = result;
-        if ((x_137 == -1)) {
-          int const x_141 = count;
-          count = as_type<int>((as_type<uint>(x_141) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_150 = i;
-      i = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  int const x_152 = count;
-  if ((x_152 == 20)) {
-    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_6) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread tint_array_wrapper tint_symbol_9 = {};
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0f01d3e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,474 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 315
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %node "node"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_220 "x_220"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %count "count"
-               OpName %i "i"
-               OpName %result "result"
-               OpName %param_24 "param_24"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %13 = OpConstantNull %_arr_BST_uint_10
-       %tree = OpVariable %_ptr_Private__arr_BST_uint_10 Private %13
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %16 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %36 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %42 = OpConstantNull %int
-         %44 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %122 = OpTypeFunction %int %_ptr_Function_int
-        %163 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %302 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %303 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %304 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %16
-       %node = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %23 = OpLabel
-         %25 = OpLoad %int %data
-         %28 = OpAccessChain %_ptr_Function_int %node %uint_0
-               OpStore %28 %25
-         %31 = OpAccessChain %_ptr_Function_int %node %uint_1
-               OpStore %31 %int_n1
-         %35 = OpAccessChain %_ptr_Function_int %node %uint_2
-               OpStore %35 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %36
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %40 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %42
-      %param = OpVariable %_ptr_Function_BST Function %44
-    %param_1 = OpVariable %_ptr_Function_int Function %42
-    %param_2 = OpVariable %_ptr_Function_BST Function %44
-    %param_3 = OpVariable %_ptr_Function_int Function %42
-               OpStore %baseIndex %int_0
-               OpBranch %49
-         %49 = OpLabel
-               OpLoopMerge %50 %51 None
-               OpBranch %52
-         %52 = OpLabel
-         %53 = OpLoad %int %baseIndex
-         %55 = OpLoad %int %treeIndex
-         %56 = OpSLessThanEqual %bool %53 %55
-               OpSelectionMerge %58 None
-               OpBranchConditional %56 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %50
-         %58 = OpLabel
-         %62 = OpLoad %int %data_1
-         %63 = OpLoad %int %baseIndex
-         %65 = OpAccessChain %_ptr_Private_int %tree %63 %uint_0
-         %66 = OpLoad %int %65
-         %67 = OpSLessThanEqual %bool %62 %66
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %70
-         %69 = OpLabel
-         %71 = OpLoad %int %baseIndex
-         %72 = OpAccessChain %_ptr_Private_int %tree %71 %uint_1
-         %73 = OpLoad %int %72
-         %74 = OpIEqual %bool %73 %int_n1
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpLoad %int %baseIndex
-         %80 = OpLoad %int %treeIndex
-         %81 = OpAccessChain %_ptr_Private_int %tree %78 %uint_1
-               OpStore %81 %80
-         %83 = OpLoad %int %treeIndex
-         %85 = OpAccessChain %_ptr_Private_BST %tree %83
-         %86 = OpLoad %BST %85
-               OpStore %param %86
-         %88 = OpLoad %int %data_1
-               OpStore %param_1 %88
-         %89 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-         %92 = OpLoad %BST %param
-         %93 = OpAccessChain %_ptr_Private_BST %tree %83
-               OpStore %93 %92
-               OpReturn
-         %77 = OpLabel
-         %94 = OpLoad %int %baseIndex
-         %95 = OpAccessChain %_ptr_Private_int %tree %94 %uint_1
-         %96 = OpLoad %int %95
-               OpStore %baseIndex %96
-               OpBranch %51
-         %75 = OpLabel
-               OpReturn
-         %70 = OpLabel
-         %97 = OpLoad %int %baseIndex
-         %98 = OpAccessChain %_ptr_Private_int %tree %97 %uint_2
-         %99 = OpLoad %int %98
-        %100 = OpIEqual %bool %99 %int_n1
-               OpSelectionMerge %101 None
-               OpBranchConditional %100 %102 %103
-        %102 = OpLabel
-        %104 = OpLoad %int %baseIndex
-        %106 = OpLoad %int %treeIndex
-        %107 = OpAccessChain %_ptr_Private_int %tree %104 %uint_2
-               OpStore %107 %106
-        %109 = OpLoad %int %treeIndex
-        %110 = OpAccessChain %_ptr_Private_BST %tree %109
-        %111 = OpLoad %BST %110
-               OpStore %param_2 %111
-        %113 = OpLoad %int %data_1
-               OpStore %param_3 %113
-        %114 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %117 = OpLoad %BST %param_2
-        %118 = OpAccessChain %_ptr_Private_BST %tree %109
-               OpStore %118 %117
-               OpReturn
-        %103 = OpLabel
-        %119 = OpLoad %int %baseIndex
-        %120 = OpAccessChain %_ptr_Private_int %tree %119 %uint_2
-        %121 = OpLoad %int %120
-               OpStore %baseIndex %121
-               OpBranch %51
-        %101 = OpLabel
-               OpReturn
-         %68 = OpLabel
-               OpReturn
-         %51 = OpLabel
-               OpBranch %49
-         %50 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %122
-     %target = OpFunctionParameter %_ptr_Function_int
-        %125 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %42
-%currentNode = OpVariable %_ptr_Function_BST Function %44
-      %x_220 = OpVariable %_ptr_Function_int Function %42
-               OpStore %index %int_0
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %index
-        %134 = OpINotEqual %bool %133 %int_n1
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %130
-        %135 = OpLabel
-        %138 = OpLoad %int %index
-        %139 = OpAccessChain %_ptr_Private_BST %tree %138
-        %140 = OpLoad %BST %139
-               OpStore %currentNode %140
-        %141 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %142 = OpLoad %int %141
-        %144 = OpLoad %int %target
-        %145 = OpIEqual %bool %142 %144
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %146
-        %147 = OpLabel
-        %149 = OpLoad %int %target
-               OpReturnValue %149
-        %146 = OpLabel
-        %151 = OpLoad %int %target
-        %152 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %153 = OpLoad %int %152
-        %154 = OpSGreaterThan %bool %151 %153
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-        %158 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %159 = OpLoad %int %158
-               OpStore %x_220 %159
-               OpBranch %155
-        %157 = OpLabel
-        %160 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %161 = OpLoad %int %160
-               OpStore %x_220 %161
-               OpBranch %155
-        %155 = OpLabel
-        %162 = OpLoad %int %x_220
-               OpStore %index %162
-               OpBranch %131
-        %131 = OpLabel
-               OpBranch %129
-        %130 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %163
-        %165 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %42
-    %param_4 = OpVariable %_ptr_Function_BST Function %44
-    %param_5 = OpVariable %_ptr_Function_int Function %42
-    %param_6 = OpVariable %_ptr_Function_int Function %42
-    %param_7 = OpVariable %_ptr_Function_int Function %42
-    %param_8 = OpVariable %_ptr_Function_int Function %42
-    %param_9 = OpVariable %_ptr_Function_int Function %42
-   %param_10 = OpVariable %_ptr_Function_int Function %42
-   %param_11 = OpVariable %_ptr_Function_int Function %42
-   %param_12 = OpVariable %_ptr_Function_int Function %42
-   %param_13 = OpVariable %_ptr_Function_int Function %42
-   %param_14 = OpVariable %_ptr_Function_int Function %42
-   %param_15 = OpVariable %_ptr_Function_int Function %42
-   %param_16 = OpVariable %_ptr_Function_int Function %42
-   %param_17 = OpVariable %_ptr_Function_int Function %42
-   %param_18 = OpVariable %_ptr_Function_int Function %42
-   %param_19 = OpVariable %_ptr_Function_int Function %42
-   %param_20 = OpVariable %_ptr_Function_int Function %42
-   %param_21 = OpVariable %_ptr_Function_int Function %42
-   %param_22 = OpVariable %_ptr_Function_int Function %42
-   %param_23 = OpVariable %_ptr_Function_int Function %42
-      %count = OpVariable %_ptr_Function_int Function %42
-          %i = OpVariable %_ptr_Function_int Function %42
-     %result = OpVariable %_ptr_Function_int Function %42
-   %param_24 = OpVariable %_ptr_Function_int Function %42
-               OpStore %treeIndex_1 %int_0
-        %191 = OpAccessChain %_ptr_Private_BST %tree %int_0
-        %192 = OpLoad %BST %191
-               OpStore %param_4 %192
-               OpStore %param_5 %int_9
-        %194 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %197 = OpLoad %BST %param_4
-        %198 = OpAccessChain %_ptr_Private_BST %tree %int_0
-               OpStore %198 %197
-        %199 = OpLoad %int %treeIndex_1
-        %201 = OpIAdd %int %199 %int_1
-               OpStore %treeIndex_1 %201
-        %202 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %202
-               OpStore %param_7 %int_5
-        %204 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %207 = OpLoad %int %treeIndex_1
-        %208 = OpIAdd %int %207 %int_1
-               OpStore %treeIndex_1 %208
-        %209 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %209
-               OpStore %param_9 %int_12
-        %211 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %214 = OpLoad %int %treeIndex_1
-        %215 = OpIAdd %int %214 %int_1
-               OpStore %treeIndex_1 %215
-        %216 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %216
-               OpStore %param_11 %int_15
-        %218 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %221 = OpLoad %int %treeIndex_1
-        %222 = OpIAdd %int %221 %int_1
-               OpStore %treeIndex_1 %222
-        %223 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %223
-               OpStore %param_13 %int_7
-        %225 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %228 = OpLoad %int %treeIndex_1
-        %229 = OpIAdd %int %228 %int_1
-               OpStore %treeIndex_1 %229
-        %230 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %230
-               OpStore %param_15 %int_8
-        %232 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %235 = OpLoad %int %treeIndex_1
-        %236 = OpIAdd %int %235 %int_1
-               OpStore %treeIndex_1 %236
-        %237 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %237
-               OpStore %param_17 %int_2
-        %239 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %242 = OpLoad %int %treeIndex_1
-        %243 = OpIAdd %int %242 %int_1
-               OpStore %treeIndex_1 %243
-        %244 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %244
-               OpStore %param_19 %int_6
-        %246 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %249 = OpLoad %int %treeIndex_1
-        %250 = OpIAdd %int %249 %int_1
-               OpStore %treeIndex_1 %250
-        %251 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %251
-               OpStore %param_21 %int_17
-        %253 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %256 = OpLoad %int %treeIndex_1
-        %257 = OpIAdd %int %256 %int_1
-               OpStore %treeIndex_1 %257
-        %258 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %258
-               OpStore %param_23 %int_13
-        %260 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %count %int_0
-               OpStore %i %int_0
-               OpBranch %263
-        %263 = OpLabel
-               OpLoopMerge %264 %265 None
-               OpBranch %266
-        %266 = OpLabel
-        %267 = OpLoad %int %i
-        %269 = OpSLessThan %bool %267 %int_20
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %272
-        %271 = OpLabel
-               OpBranch %270
-        %272 = OpLabel
-               OpBranch %264
-        %270 = OpLabel
-        %273 = OpLoad %int %i
-               OpStore %param_24 %273
-        %274 = OpFunctionCall %int %search_i1_ %param_24
-               OpStore %result %274
-        %276 = OpLoad %int %i
-               OpSelectionMerge %277 None
-               OpSwitch %276 %278 2 %279 5 %279 6 %279 7 %279 8 %279 9 %279 12 %279 13 %279 15 %279 17 %279
-        %279 = OpLabel
-        %280 = OpLoad %int %result
-        %281 = OpLoad %int %i
-        %282 = OpIEqual %bool %280 %281
-               OpSelectionMerge %283 None
-               OpBranchConditional %282 %284 %283
-        %284 = OpLabel
-        %285 = OpLoad %int %count
-        %286 = OpIAdd %int %285 %int_1
-               OpStore %count %286
-               OpBranch %283
-        %283 = OpLabel
-               OpBranch %277
-        %278 = OpLabel
-        %287 = OpLoad %int %result
-        %288 = OpIEqual %bool %287 %int_n1
-               OpSelectionMerge %289 None
-               OpBranchConditional %288 %290 %289
-        %290 = OpLabel
-        %291 = OpLoad %int %count
-        %292 = OpIAdd %int %291 %int_1
-               OpStore %count %292
-               OpBranch %289
-        %289 = OpLabel
-               OpBranch %277
-        %277 = OpLabel
-               OpBranch %265
-        %265 = OpLabel
-        %293 = OpLoad %int %i
-        %294 = OpIAdd %int %293 %int_1
-               OpStore %i %294
-               OpBranch %263
-        %264 = OpLabel
-        %295 = OpLoad %int %count
-        %296 = OpIEqual %bool %295 %int_20
-               OpSelectionMerge %297 None
-               OpBranchConditional %296 %298 %299
-        %298 = OpLabel
-               OpStore %x_GLF_color %302
-               OpBranch %297
-        %299 = OpLabel
-               OpStore %x_GLF_color %303
-               OpBranch %297
-        %297 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %304
-        %307 = OpLabel
-        %308 = OpFunctionCall %void %main_1
-        %309 = OpLoad %v4float %x_GLF_color
-        %310 = OpCompositeConstruct %main_out %309
-               OpReturnValue %310
-               OpFunctionEnd
-       %main = OpFunction %void None %163
-        %312 = OpLabel
-        %313 = OpFunctionCall %main_out %main_inner
-        %314 = OpCompositeExtract %v4float %313 0
-               OpStore %x_GLF_color_1_1 %314
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 19d6c9d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,264 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> tree : array<BST, 10>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(node : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_158 : i32 = *(data);
-  (*(node)).data = x_158;
-  (*(node)).leftIndex = -1;
-  (*(node)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_167 : i32 = baseIndex;
-    let x_168 : i32 = *(treeIndex);
-    if ((x_167 <= x_168)) {
-    } else {
-      break;
-    }
-    let x_171 : i32 = *(data_1);
-    let x_172 : i32 = baseIndex;
-    let x_174 : i32 = tree[x_172].data;
-    if ((x_171 <= x_174)) {
-      let x_179 : i32 = baseIndex;
-      let x_181 : i32 = tree[x_179].leftIndex;
-      if ((x_181 == -1)) {
-        let x_186 : i32 = baseIndex;
-        let x_187 : i32 = *(treeIndex);
-        tree[x_186].leftIndex = x_187;
-        let x_189 : i32 = *(treeIndex);
-        let x_191 : BST = tree[x_189];
-        param = x_191;
-        let x_192 : i32 = *(data_1);
-        param_1 = x_192;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_194 : BST = param;
-        tree[x_189] = x_194;
-        return;
-      } else {
-        let x_196 : i32 = baseIndex;
-        let x_198 : i32 = tree[x_196].leftIndex;
-        baseIndex = x_198;
-        continue;
-      }
-      return;
-    } else {
-      let x_199 : i32 = baseIndex;
-      let x_201 : i32 = tree[x_199].rightIndex;
-      if ((x_201 == -1)) {
-        let x_206 : i32 = baseIndex;
-        let x_207 : i32 = *(treeIndex);
-        tree[x_206].rightIndex = x_207;
-        let x_209 : i32 = *(treeIndex);
-        let x_211 : BST = tree[x_209];
-        param_2 = x_211;
-        let x_212 : i32 = *(data_1);
-        param_3 = x_212;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_214 : BST = param_2;
-        tree[x_209] = x_214;
-        return;
-      } else {
-        let x_216 : i32 = baseIndex;
-        let x_218 : i32 = tree[x_216].rightIndex;
-        baseIndex = x_218;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_220 : i32;
-  index = 0;
-  loop {
-    let x_225 : i32 = index;
-    if ((x_225 != -1)) {
-    } else {
-      break;
-    }
-    let x_228 : i32 = index;
-    let x_230 : BST = tree[x_228];
-    currentNode = x_230;
-    let x_232 : i32 = currentNode.data;
-    let x_233 : i32 = *(target);
-    if ((x_232 == x_233)) {
-      let x_237 : i32 = *(target);
-      return x_237;
-    }
-    let x_238 : i32 = *(target);
-    let x_240 : i32 = currentNode.data;
-    if ((x_238 > x_240)) {
-      let x_246 : i32 = currentNode.rightIndex;
-      x_220 = x_246;
-    } else {
-      let x_248 : i32 = currentNode.leftIndex;
-      x_220 = x_248;
-    }
-    let x_249 : i32 = x_220;
-    index = x_249;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var count : i32;
-  var i : i32;
-  var result : i32;
-  var param_24 : i32;
-  treeIndex_1 = 0;
-  let x_84 : BST = tree[0];
-  param_4 = x_84;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_86 : BST = param_4;
-  tree[0] = x_86;
-  let x_88 : i32 = treeIndex_1;
-  treeIndex_1 = (x_88 + 1);
-  let x_90 : i32 = treeIndex_1;
-  param_6 = x_90;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_92 : i32 = treeIndex_1;
-  treeIndex_1 = (x_92 + 1);
-  let x_94 : i32 = treeIndex_1;
-  param_8 = x_94;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_96 : i32 = treeIndex_1;
-  treeIndex_1 = (x_96 + 1);
-  let x_98 : i32 = treeIndex_1;
-  param_10 = x_98;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_100 : i32 = treeIndex_1;
-  treeIndex_1 = (x_100 + 1);
-  let x_102 : i32 = treeIndex_1;
-  param_12 = x_102;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_104 : i32 = treeIndex_1;
-  treeIndex_1 = (x_104 + 1);
-  let x_106 : i32 = treeIndex_1;
-  param_14 = x_106;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_108 : i32 = treeIndex_1;
-  treeIndex_1 = (x_108 + 1);
-  let x_110 : i32 = treeIndex_1;
-  param_16 = x_110;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_112 : i32 = treeIndex_1;
-  treeIndex_1 = (x_112 + 1);
-  let x_114 : i32 = treeIndex_1;
-  param_18 = x_114;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_116 : i32 = treeIndex_1;
-  treeIndex_1 = (x_116 + 1);
-  let x_118 : i32 = treeIndex_1;
-  param_20 = x_118;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_120 : i32 = treeIndex_1;
-  treeIndex_1 = (x_120 + 1);
-  let x_122 : i32 = treeIndex_1;
-  param_22 = x_122;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  count = 0;
-  i = 0;
-  loop {
-    let x_128 : i32 = i;
-    if ((x_128 < 20)) {
-    } else {
-      break;
-    }
-    let x_131 : i32 = i;
-    param_24 = x_131;
-    let x_132 : i32 = search_i1_(&(param_24));
-    result = x_132;
-    let x_133 : i32 = i;
-    switch(x_133) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_143 : i32 = result;
-        let x_144 : i32 = i;
-        if ((x_143 == x_144)) {
-          let x_148 : i32 = count;
-          count = (x_148 + 1);
-        }
-      }
-      default: {
-        let x_137 : i32 = result;
-        if ((x_137 == -1)) {
-          let x_141 : i32 = count;
-          count = (x_141 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_150 : i32 = i;
-      i = (x_150 + 1);
-    }
-  }
-  let x_152 : i32 = count;
-  if ((x_152 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.hlsl
deleted file mode 100644
index b843916..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,280 +0,0 @@
-SKIP: FAILED
-
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static BST tree[10] = (BST[10])0;
-cbuffer cbuffer_x_50 : register(b0, space0) {
-  uint4 x_50[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST node, inout int data) {
-  const int x_208 = data;
-  node.data = x_208;
-  node.leftIndex = -1;
-  node.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_217 = baseIndex;
-    const int x_218 = treeIndex;
-    if ((x_217 <= x_218)) {
-    } else {
-      break;
-    }
-    const int x_221 = data_1;
-    const int x_224 = tree[baseIndex].data;
-    if ((x_221 <= x_224)) {
-      const int x_231 = tree[baseIndex].leftIndex;
-      if ((x_231 == -1)) {
-        const int x_236 = baseIndex;
-        const int x_237 = treeIndex;
-        tree[x_236].leftIndex = x_237;
-        const int x_239 = treeIndex;
-        const BST x_241 = tree[x_239];
-        param = x_241;
-        const int x_242 = data_1;
-        param_1 = x_242;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree[x_239] = param;
-        return;
-      } else {
-        const int x_248 = tree[baseIndex].leftIndex;
-        baseIndex = x_248;
-        continue;
-      }
-      return;
-    } else {
-      const int x_251 = tree[baseIndex].rightIndex;
-      if ((x_251 == -1)) {
-        const int x_256 = baseIndex;
-        const int x_257 = treeIndex;
-        tree[x_256].rightIndex = x_257;
-        const int x_259 = treeIndex;
-        const BST x_261 = tree[x_259];
-        param_2 = x_261;
-        const int x_262 = data_1;
-        param_3 = x_262;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree[x_259] = param_2;
-        return;
-      } else {
-        const int x_268 = tree[baseIndex].rightIndex;
-        baseIndex = x_268;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int identity_i1_(inout int a) {
-  const int x_202 = a;
-  const int x_203 = a;
-  obj.numbers[x_202] = x_203;
-  const int x_206 = obj.numbers[2];
-  return x_206;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_270 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_280 = tree[index];
-    currentNode = x_280;
-    const int x_282 = currentNode.data;
-    const int x_283 = target;
-    if ((x_282 == x_283)) {
-      const int x_287 = target;
-      return x_287;
-    }
-    const int x_288 = target;
-    const int x_290 = currentNode.data;
-    if ((x_288 > x_290)) {
-      const int x_296 = currentNode.rightIndex;
-      x_270 = x_296;
-    } else {
-      const int x_298 = currentNode.leftIndex;
-      x_270 = x_298;
-    }
-    index = x_270;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int pp = 0;
-  int looplimiter0 = 0;
-  int i = 0;
-  int param_24 = 0;
-  int count = 0;
-  int i_1 = 0;
-  int result = 0;
-  int param_25 = 0;
-  treeIndex_1 = 0;
-  const BST x_101 = tree[0];
-  param_4 = x_101;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  pp = 0;
-  looplimiter0 = 0;
-  i = 0;
-  {
-    for(; (i < 10000); i = (i + 1)) {
-      const int x_148 = looplimiter0;
-      const float x_150 = asfloat(x_50[0].y);
-      if ((x_148 >= int(x_150))) {
-        const float x_156 = asfloat(x_50[0].y);
-        param_24 = (1 + int(x_156));
-        const int x_159 = identity_i1_(param_24);
-        pp = x_159;
-        break;
-      }
-      looplimiter0 = (looplimiter0 + 1);
-    }
-  }
-  if ((pp != 2)) {
-    return;
-  }
-  count = 0;
-  i_1 = 0;
-  {
-    for(; (i_1 < 20); i_1 = (i_1 + 1)) {
-      param_25 = i_1;
-      const int x_176 = search_i1_(param_25);
-      result = x_176;
-      switch(i_1) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          if ((result == i_1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x00000206698D4050(32,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x00000206698D4050(32,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x00000206698D4050(32,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x00000206698D4050(32,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x00000206698D4050(90,3-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x00000206698D4050(203,5-35): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.msl
deleted file mode 100644
index 786e864..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.msl
+++ /dev/null
@@ -1,338 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper_1 {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const node, thread int* const data) {
-  int const x_208 = *(data);
-  (*(node)).data = x_208;
-  (*(node)).leftIndex = -1;
-  (*(node)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper_1* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_217 = baseIndex;
-    int const x_218 = *(treeIndex);
-    if ((x_217 <= x_218)) {
-    } else {
-      break;
-    }
-    int const x_221 = *(data_1);
-    int const x_222 = baseIndex;
-    int const x_224 = (*(tint_symbol_3)).arr[x_222].data;
-    if ((x_221 <= x_224)) {
-      int const x_229 = baseIndex;
-      int const x_231 = (*(tint_symbol_3)).arr[x_229].leftIndex;
-      if ((x_231 == -1)) {
-        int const x_236 = baseIndex;
-        int const x_237 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_236].leftIndex = x_237;
-        int const x_239 = *(treeIndex);
-        BST const x_241 = (*(tint_symbol_3)).arr[x_239];
-        param = x_241;
-        int const x_242 = *(data_1);
-        param_1 = x_242;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_244 = param;
-        (*(tint_symbol_3)).arr[x_239] = x_244;
-        return;
-      } else {
-        int const x_246 = baseIndex;
-        int const x_248 = (*(tint_symbol_3)).arr[x_246].leftIndex;
-        baseIndex = x_248;
-        continue;
-      }
-      return;
-    } else {
-      int const x_249 = baseIndex;
-      int const x_251 = (*(tint_symbol_3)).arr[x_249].rightIndex;
-      if ((x_251 == -1)) {
-        int const x_256 = baseIndex;
-        int const x_257 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_256].rightIndex = x_257;
-        int const x_259 = *(treeIndex);
-        BST const x_261 = (*(tint_symbol_3)).arr[x_259];
-        param_2 = x_261;
-        int const x_262 = *(data_1);
-        param_3 = x_262;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_264 = param_2;
-        (*(tint_symbol_3)).arr[x_259] = x_264;
-        return;
-      } else {
-        int const x_266 = baseIndex;
-        int const x_268 = (*(tint_symbol_3)).arr[x_266].rightIndex;
-        baseIndex = x_268;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int identity_i1_(thread int* const a, thread QuicksortObject* const tint_symbol_4) {
-  int const x_202 = *(a);
-  int const x_203 = *(a);
-  (*(tint_symbol_4)).numbers.arr[x_202] = x_203;
-  int const x_206 = (*(tint_symbol_4)).numbers.arr[2];
-  return x_206;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper_1* const tint_symbol_5) {
-  int index = 0;
-  BST currentNode = {};
-  int x_270 = 0;
-  index = 0;
-  while (true) {
-    int const x_275 = index;
-    if ((x_275 != -1)) {
-    } else {
-      break;
-    }
-    int const x_278 = index;
-    BST const x_280 = (*(tint_symbol_5)).arr[x_278];
-    currentNode = x_280;
-    int const x_282 = currentNode.data;
-    int const x_283 = *(target);
-    if ((x_282 == x_283)) {
-      int const x_287 = *(target);
-      return x_287;
-    }
-    int const x_288 = *(target);
-    int const x_290 = currentNode.data;
-    if ((x_288 > x_290)) {
-      int const x_296 = currentNode.rightIndex;
-      x_270 = x_296;
-    } else {
-      int const x_298 = currentNode.leftIndex;
-      x_270 = x_298;
-    }
-    int const x_299 = x_270;
-    index = x_299;
-  }
-  return -1;
-}
-
-void main_1(constant buf0& x_50, thread tint_array_wrapper_1* const tint_symbol_6, thread QuicksortObject* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int pp = 0;
-  int looplimiter0 = 0;
-  int i = 0;
-  int param_24 = 0;
-  int count = 0;
-  int i_1 = 0;
-  int result = 0;
-  int param_25 = 0;
-  treeIndex_1 = 0;
-  BST const x_101 = (*(tint_symbol_6)).arr[0];
-  param_4 = x_101;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_103 = param_4;
-  (*(tint_symbol_6)).arr[0] = x_103;
-  int const x_105 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)));
-  int const x_107 = treeIndex_1;
-  param_6 = x_107;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7), tint_symbol_6);
-  int const x_109 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(1)));
-  int const x_111 = treeIndex_1;
-  param_8 = x_111;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9), tint_symbol_6);
-  int const x_113 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-  int const x_115 = treeIndex_1;
-  param_10 = x_115;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11), tint_symbol_6);
-  int const x_117 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-  int const x_119 = treeIndex_1;
-  param_12 = x_119;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13), tint_symbol_6);
-  int const x_121 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
-  int const x_123 = treeIndex_1;
-  param_14 = x_123;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15), tint_symbol_6);
-  int const x_125 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_125) + as_type<uint>(1)));
-  int const x_127 = treeIndex_1;
-  param_16 = x_127;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17), tint_symbol_6);
-  int const x_129 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_129) + as_type<uint>(1)));
-  int const x_131 = treeIndex_1;
-  param_18 = x_131;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19), tint_symbol_6);
-  int const x_133 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
-  int const x_135 = treeIndex_1;
-  param_20 = x_135;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21), tint_symbol_6);
-  int const x_137 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_137) + as_type<uint>(1)));
-  int const x_139 = treeIndex_1;
-  param_22 = x_139;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23), tint_symbol_6);
-  pp = 0;
-  looplimiter0 = 0;
-  i = 0;
-  while (true) {
-    int const x_145 = i;
-    if ((x_145 < 10000)) {
-    } else {
-      break;
-    }
-    int const x_148 = looplimiter0;
-    float const x_150 = x_50.injectionSwitch.y;
-    if ((x_148 >= int(x_150))) {
-      float const x_156 = x_50.injectionSwitch.y;
-      param_24 = as_type<int>((as_type<uint>(1) + as_type<uint>(int(x_156))));
-      int const x_159 = identity_i1_(&(param_24), tint_symbol_7);
-      pp = x_159;
-      break;
-    }
-    int const x_160 = looplimiter0;
-    looplimiter0 = as_type<int>((as_type<uint>(x_160) + as_type<uint>(1)));
-    {
-      int const x_162 = i;
-      i = as_type<int>((as_type<uint>(x_162) + as_type<uint>(1)));
-    }
-  }
-  int const x_164 = pp;
-  if ((x_164 != 2)) {
-    return;
-  }
-  count = 0;
-  i_1 = 0;
-  while (true) {
-    int const x_172 = i_1;
-    if ((x_172 < 20)) {
-    } else {
-      break;
-    }
-    int const x_175 = i_1;
-    param_25 = x_175;
-    int const x_176 = search_i1_(&(param_25), tint_symbol_6);
-    result = x_176;
-    int const x_177 = i_1;
-    switch(x_177) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_187 = result;
-        int const x_188 = i_1;
-        if ((x_187 == x_188)) {
-          int const x_192 = count;
-          count = as_type<int>((as_type<uint>(x_192) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_181 = result;
-        if ((x_181 == -1)) {
-          int const x_185 = count;
-          count = as_type<int>((as_type<uint>(x_185) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_194 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_194) + as_type<uint>(1)));
-    }
-  }
-  int const x_196 = count;
-  if ((x_196 == 20)) {
-    *(tint_symbol_8) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_8) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_50, thread tint_array_wrapper_1* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  main_1(x_50, tint_symbol_9, tint_symbol_10, tint_symbol_11);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_50 [[buffer(0)]]) {
-  thread tint_array_wrapper_1 tint_symbol_12 = {};
-  thread QuicksortObject tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_50, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.spvasm
deleted file mode 100644
index b8f0ad9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,570 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 370
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_50 "x_50"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %node "node"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %identity_i1_ "identity_i1_"
-               OpName %a "a"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_270 "x_270"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %pp "pp"
-               OpName %looplimiter0 "looplimiter0"
-               OpName %i "i"
-               OpName %param_24 "param_24"
-               OpName %count "count"
-               OpName %i_1 "i_1"
-               OpName %result "result"
-               OpName %param_25 "param_25"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_50 NonWritable
-               OpDecorate %x_50 DescriptorSet 0
-               OpDecorate %x_50 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %13 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %13
-        %BST = OpTypeStruct %int %int %int
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %18 = OpConstantNull %_arr_BST_uint_10
-       %tree = OpVariable %_ptr_Private__arr_BST_uint_10 Private %18
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_50 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %45 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %51 = OpConstantNull %int
-         %53 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %131 = OpTypeFunction %int %_ptr_Function_int
-      %int_2 = OpConstant %int 2
-        %183 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-  %int_10000 = OpConstant %int 10000
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %357 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %358 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %359 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %25
-       %node = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %32 = OpLabel
-         %34 = OpLoad %int %data
-         %37 = OpAccessChain %_ptr_Function_int %node %uint_0
-               OpStore %37 %34
-         %40 = OpAccessChain %_ptr_Function_int %node %uint_1
-               OpStore %40 %int_n1
-         %44 = OpAccessChain %_ptr_Function_int %node %uint_2
-               OpStore %44 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %45
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %49 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %51
-      %param = OpVariable %_ptr_Function_BST Function %53
-    %param_1 = OpVariable %_ptr_Function_int Function %51
-    %param_2 = OpVariable %_ptr_Function_BST Function %53
-    %param_3 = OpVariable %_ptr_Function_int Function %51
-               OpStore %baseIndex %int_0
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-         %62 = OpLoad %int %baseIndex
-         %64 = OpLoad %int %treeIndex
-         %65 = OpSLessThanEqual %bool %62 %64
-               OpSelectionMerge %67 None
-               OpBranchConditional %65 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %59
-         %67 = OpLabel
-         %71 = OpLoad %int %data_1
-         %72 = OpLoad %int %baseIndex
-         %74 = OpAccessChain %_ptr_Private_int %tree %72 %uint_0
-         %75 = OpLoad %int %74
-         %76 = OpSLessThanEqual %bool %71 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-         %80 = OpLoad %int %baseIndex
-         %81 = OpAccessChain %_ptr_Private_int %tree %80 %uint_1
-         %82 = OpLoad %int %81
-         %83 = OpIEqual %bool %82 %int_n1
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-         %87 = OpLoad %int %baseIndex
-         %89 = OpLoad %int %treeIndex
-         %90 = OpAccessChain %_ptr_Private_int %tree %87 %uint_1
-               OpStore %90 %89
-         %92 = OpLoad %int %treeIndex
-         %94 = OpAccessChain %_ptr_Private_BST %tree %92
-         %95 = OpLoad %BST %94
-               OpStore %param %95
-         %97 = OpLoad %int %data_1
-               OpStore %param_1 %97
-         %98 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-        %101 = OpLoad %BST %param
-        %102 = OpAccessChain %_ptr_Private_BST %tree %92
-               OpStore %102 %101
-               OpReturn
-         %86 = OpLabel
-        %103 = OpLoad %int %baseIndex
-        %104 = OpAccessChain %_ptr_Private_int %tree %103 %uint_1
-        %105 = OpLoad %int %104
-               OpStore %baseIndex %105
-               OpBranch %60
-         %84 = OpLabel
-               OpReturn
-         %79 = OpLabel
-        %106 = OpLoad %int %baseIndex
-        %107 = OpAccessChain %_ptr_Private_int %tree %106 %uint_2
-        %108 = OpLoad %int %107
-        %109 = OpIEqual %bool %108 %int_n1
-               OpSelectionMerge %110 None
-               OpBranchConditional %109 %111 %112
-        %111 = OpLabel
-        %113 = OpLoad %int %baseIndex
-        %115 = OpLoad %int %treeIndex
-        %116 = OpAccessChain %_ptr_Private_int %tree %113 %uint_2
-               OpStore %116 %115
-        %118 = OpLoad %int %treeIndex
-        %119 = OpAccessChain %_ptr_Private_BST %tree %118
-        %120 = OpLoad %BST %119
-               OpStore %param_2 %120
-        %122 = OpLoad %int %data_1
-               OpStore %param_3 %122
-        %123 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %126 = OpLoad %BST %param_2
-        %127 = OpAccessChain %_ptr_Private_BST %tree %118
-               OpStore %127 %126
-               OpReturn
-        %112 = OpLabel
-        %128 = OpLoad %int %baseIndex
-        %129 = OpAccessChain %_ptr_Private_int %tree %128 %uint_2
-        %130 = OpLoad %int %129
-               OpStore %baseIndex %130
-               OpBranch %60
-        %110 = OpLabel
-               OpReturn
-         %77 = OpLabel
-               OpReturn
-         %60 = OpLabel
-               OpBranch %58
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
-%identity_i1_ = OpFunction %int None %131
-          %a = OpFunctionParameter %_ptr_Function_int
-        %134 = OpLabel
-        %136 = OpLoad %int %a
-        %138 = OpLoad %int %a
-        %139 = OpAccessChain %_ptr_Private_int %obj %uint_0 %136
-               OpStore %139 %138
-        %141 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %142 = OpLoad %int %141
-               OpReturnValue %142
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %131
-     %target = OpFunctionParameter %_ptr_Function_int
-        %145 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %51
-%currentNode = OpVariable %_ptr_Function_BST Function %53
-      %x_270 = OpVariable %_ptr_Function_int Function %51
-               OpStore %index %int_0
-               OpBranch %149
-        %149 = OpLabel
-               OpLoopMerge %150 %151 None
-               OpBranch %152
-        %152 = OpLabel
-        %153 = OpLoad %int %index
-        %154 = OpINotEqual %bool %153 %int_n1
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-               OpBranch %155
-        %157 = OpLabel
-               OpBranch %150
-        %155 = OpLabel
-        %158 = OpLoad %int %index
-        %159 = OpAccessChain %_ptr_Private_BST %tree %158
-        %160 = OpLoad %BST %159
-               OpStore %currentNode %160
-        %161 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %162 = OpLoad %int %161
-        %164 = OpLoad %int %target
-        %165 = OpIEqual %bool %162 %164
-               OpSelectionMerge %166 None
-               OpBranchConditional %165 %167 %166
-        %167 = OpLabel
-        %169 = OpLoad %int %target
-               OpReturnValue %169
-        %166 = OpLabel
-        %171 = OpLoad %int %target
-        %172 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %173 = OpLoad %int %172
-        %174 = OpSGreaterThan %bool %171 %173
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %177
-        %176 = OpLabel
-        %178 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %179 = OpLoad %int %178
-               OpStore %x_270 %179
-               OpBranch %175
-        %177 = OpLabel
-        %180 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %181 = OpLoad %int %180
-               OpStore %x_270 %181
-               OpBranch %175
-        %175 = OpLabel
-        %182 = OpLoad %int %x_270
-               OpStore %index %182
-               OpBranch %151
-        %151 = OpLabel
-               OpBranch %149
-        %150 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %183
-        %185 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %51
-    %param_4 = OpVariable %_ptr_Function_BST Function %53
-    %param_5 = OpVariable %_ptr_Function_int Function %51
-    %param_6 = OpVariable %_ptr_Function_int Function %51
-    %param_7 = OpVariable %_ptr_Function_int Function %51
-    %param_8 = OpVariable %_ptr_Function_int Function %51
-    %param_9 = OpVariable %_ptr_Function_int Function %51
-   %param_10 = OpVariable %_ptr_Function_int Function %51
-   %param_11 = OpVariable %_ptr_Function_int Function %51
-   %param_12 = OpVariable %_ptr_Function_int Function %51
-   %param_13 = OpVariable %_ptr_Function_int Function %51
-   %param_14 = OpVariable %_ptr_Function_int Function %51
-   %param_15 = OpVariable %_ptr_Function_int Function %51
-   %param_16 = OpVariable %_ptr_Function_int Function %51
-   %param_17 = OpVariable %_ptr_Function_int Function %51
-   %param_18 = OpVariable %_ptr_Function_int Function %51
-   %param_19 = OpVariable %_ptr_Function_int Function %51
-   %param_20 = OpVariable %_ptr_Function_int Function %51
-   %param_21 = OpVariable %_ptr_Function_int Function %51
-   %param_22 = OpVariable %_ptr_Function_int Function %51
-   %param_23 = OpVariable %_ptr_Function_int Function %51
-         %pp = OpVariable %_ptr_Function_int Function %51
-%looplimiter0 = OpVariable %_ptr_Function_int Function %51
-          %i = OpVariable %_ptr_Function_int Function %51
-   %param_24 = OpVariable %_ptr_Function_int Function %51
-      %count = OpVariable %_ptr_Function_int Function %51
-        %i_1 = OpVariable %_ptr_Function_int Function %51
-     %result = OpVariable %_ptr_Function_int Function %51
-   %param_25 = OpVariable %_ptr_Function_int Function %51
-               OpStore %treeIndex_1 %int_0
-        %215 = OpAccessChain %_ptr_Private_BST %tree %int_0
-        %216 = OpLoad %BST %215
-               OpStore %param_4 %216
-               OpStore %param_5 %int_9
-        %218 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %221 = OpLoad %BST %param_4
-        %222 = OpAccessChain %_ptr_Private_BST %tree %int_0
-               OpStore %222 %221
-        %223 = OpLoad %int %treeIndex_1
-        %225 = OpIAdd %int %223 %int_1
-               OpStore %treeIndex_1 %225
-        %226 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %226
-               OpStore %param_7 %int_5
-        %228 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %231 = OpLoad %int %treeIndex_1
-        %232 = OpIAdd %int %231 %int_1
-               OpStore %treeIndex_1 %232
-        %233 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %233
-               OpStore %param_9 %int_12
-        %235 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %238 = OpLoad %int %treeIndex_1
-        %239 = OpIAdd %int %238 %int_1
-               OpStore %treeIndex_1 %239
-        %240 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %240
-               OpStore %param_11 %int_15
-        %242 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %245 = OpLoad %int %treeIndex_1
-        %246 = OpIAdd %int %245 %int_1
-               OpStore %treeIndex_1 %246
-        %247 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %247
-               OpStore %param_13 %int_7
-        %249 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %252 = OpLoad %int %treeIndex_1
-        %253 = OpIAdd %int %252 %int_1
-               OpStore %treeIndex_1 %253
-        %254 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %254
-               OpStore %param_15 %int_8
-        %256 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %259 = OpLoad %int %treeIndex_1
-        %260 = OpIAdd %int %259 %int_1
-               OpStore %treeIndex_1 %260
-        %261 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %261
-               OpStore %param_17 %int_2
-        %262 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %265 = OpLoad %int %treeIndex_1
-        %266 = OpIAdd %int %265 %int_1
-               OpStore %treeIndex_1 %266
-        %267 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %267
-               OpStore %param_19 %int_6
-        %269 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %272 = OpLoad %int %treeIndex_1
-        %273 = OpIAdd %int %272 %int_1
-               OpStore %treeIndex_1 %273
-        %274 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %274
-               OpStore %param_21 %int_17
-        %276 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %279 = OpLoad %int %treeIndex_1
-        %280 = OpIAdd %int %279 %int_1
-               OpStore %treeIndex_1 %280
-        %281 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %281
-               OpStore %param_23 %int_13
-        %283 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %pp %int_0
-               OpStore %looplimiter0 %int_0
-               OpStore %i %int_0
-               OpBranch %286
-        %286 = OpLabel
-               OpLoopMerge %287 %288 None
-               OpBranch %289
-        %289 = OpLabel
-        %290 = OpLoad %int %i
-        %292 = OpSLessThan %bool %290 %int_10000
-               OpSelectionMerge %293 None
-               OpBranchConditional %292 %294 %295
-        %294 = OpLabel
-               OpBranch %293
-        %295 = OpLabel
-               OpBranch %287
-        %293 = OpLabel
-        %296 = OpLoad %int %looplimiter0
-        %298 = OpAccessChain %_ptr_Uniform_float %x_50 %uint_0 %uint_1
-        %299 = OpLoad %float %298
-        %300 = OpConvertFToS %int %299
-        %301 = OpSGreaterThanEqual %bool %296 %300
-               OpSelectionMerge %302 None
-               OpBranchConditional %301 %303 %302
-        %303 = OpLabel
-        %304 = OpAccessChain %_ptr_Uniform_float %x_50 %uint_0 %uint_1
-        %305 = OpLoad %float %304
-        %306 = OpConvertFToS %int %305
-        %307 = OpIAdd %int %int_1 %306
-               OpStore %param_24 %307
-        %308 = OpFunctionCall %int %identity_i1_ %param_24
-               OpStore %pp %308
-               OpBranch %287
-        %302 = OpLabel
-        %310 = OpLoad %int %looplimiter0
-        %311 = OpIAdd %int %310 %int_1
-               OpStore %looplimiter0 %311
-               OpBranch %288
-        %288 = OpLabel
-        %312 = OpLoad %int %i
-        %313 = OpIAdd %int %312 %int_1
-               OpStore %i %313
-               OpBranch %286
-        %287 = OpLabel
-        %314 = OpLoad %int %pp
-        %315 = OpINotEqual %bool %314 %int_2
-               OpSelectionMerge %316 None
-               OpBranchConditional %315 %317 %316
-        %317 = OpLabel
-               OpReturn
-        %316 = OpLabel
-               OpStore %count %int_0
-               OpStore %i_1 %int_0
-               OpBranch %318
-        %318 = OpLabel
-               OpLoopMerge %319 %320 None
-               OpBranch %321
-        %321 = OpLabel
-        %322 = OpLoad %int %i_1
-        %324 = OpSLessThan %bool %322 %int_20
-               OpSelectionMerge %325 None
-               OpBranchConditional %324 %326 %327
-        %326 = OpLabel
-               OpBranch %325
-        %327 = OpLabel
-               OpBranch %319
-        %325 = OpLabel
-        %328 = OpLoad %int %i_1
-               OpStore %param_25 %328
-        %329 = OpFunctionCall %int %search_i1_ %param_25
-               OpStore %result %329
-        %331 = OpLoad %int %i_1
-               OpSelectionMerge %332 None
-               OpSwitch %331 %333 2 %334 5 %334 6 %334 7 %334 8 %334 9 %334 12 %334 13 %334 15 %334 17 %334
-        %334 = OpLabel
-        %335 = OpLoad %int %result
-        %336 = OpLoad %int %i_1
-        %337 = OpIEqual %bool %335 %336
-               OpSelectionMerge %338 None
-               OpBranchConditional %337 %339 %338
-        %339 = OpLabel
-        %340 = OpLoad %int %count
-        %341 = OpIAdd %int %340 %int_1
-               OpStore %count %341
-               OpBranch %338
-        %338 = OpLabel
-               OpBranch %332
-        %333 = OpLabel
-        %342 = OpLoad %int %result
-        %343 = OpIEqual %bool %342 %int_n1
-               OpSelectionMerge %344 None
-               OpBranchConditional %343 %345 %344
-        %345 = OpLabel
-        %346 = OpLoad %int %count
-        %347 = OpIAdd %int %346 %int_1
-               OpStore %count %347
-               OpBranch %344
-        %344 = OpLabel
-               OpBranch %332
-        %332 = OpLabel
-               OpBranch %320
-        %320 = OpLabel
-        %348 = OpLoad %int %i_1
-        %349 = OpIAdd %int %348 %int_1
-               OpStore %i_1 %349
-               OpBranch %318
-        %319 = OpLabel
-        %350 = OpLoad %int %count
-        %351 = OpIEqual %bool %350 %int_20
-               OpSelectionMerge %352 None
-               OpBranchConditional %351 %353 %354
-        %353 = OpLabel
-               OpStore %x_GLF_color %357
-               OpBranch %352
-        %354 = OpLabel
-               OpStore %x_GLF_color %358
-               OpBranch %352
-        %352 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %359
-        %362 = OpLabel
-        %363 = OpFunctionCall %void %main_1
-        %364 = OpLoad %v4float %x_GLF_color
-        %365 = OpCompositeConstruct %main_out %364
-               OpReturnValue %365
-               OpFunctionEnd
-       %main = OpFunction %void None %183
-        %367 = OpLabel
-        %368 = OpFunctionCall %main_out %main_inner
-        %369 = OpCompositeExtract %v4float %368 0
-               OpStore %x_GLF_color_1_1 %369
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.wgsl
deleted file mode 100644
index cd61e29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,319 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> tree : array<BST, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_50 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(node : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_208 : i32 = *(data);
-  (*(node)).data = x_208;
-  (*(node)).leftIndex = -1;
-  (*(node)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_217 : i32 = baseIndex;
-    let x_218 : i32 = *(treeIndex);
-    if ((x_217 <= x_218)) {
-    } else {
-      break;
-    }
-    let x_221 : i32 = *(data_1);
-    let x_222 : i32 = baseIndex;
-    let x_224 : i32 = tree[x_222].data;
-    if ((x_221 <= x_224)) {
-      let x_229 : i32 = baseIndex;
-      let x_231 : i32 = tree[x_229].leftIndex;
-      if ((x_231 == -1)) {
-        let x_236 : i32 = baseIndex;
-        let x_237 : i32 = *(treeIndex);
-        tree[x_236].leftIndex = x_237;
-        let x_239 : i32 = *(treeIndex);
-        let x_241 : BST = tree[x_239];
-        param = x_241;
-        let x_242 : i32 = *(data_1);
-        param_1 = x_242;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_244 : BST = param;
-        tree[x_239] = x_244;
-        return;
-      } else {
-        let x_246 : i32 = baseIndex;
-        let x_248 : i32 = tree[x_246].leftIndex;
-        baseIndex = x_248;
-        continue;
-      }
-      return;
-    } else {
-      let x_249 : i32 = baseIndex;
-      let x_251 : i32 = tree[x_249].rightIndex;
-      if ((x_251 == -1)) {
-        let x_256 : i32 = baseIndex;
-        let x_257 : i32 = *(treeIndex);
-        tree[x_256].rightIndex = x_257;
-        let x_259 : i32 = *(treeIndex);
-        let x_261 : BST = tree[x_259];
-        param_2 = x_261;
-        let x_262 : i32 = *(data_1);
-        param_3 = x_262;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_264 : BST = param_2;
-        tree[x_259] = x_264;
-        return;
-      } else {
-        let x_266 : i32 = baseIndex;
-        let x_268 : i32 = tree[x_266].rightIndex;
-        baseIndex = x_268;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-fn identity_i1_(a : ptr<function, i32>) -> i32 {
-  let x_202 : i32 = *(a);
-  let x_203 : i32 = *(a);
-  obj.numbers[x_202] = x_203;
-  let x_206 : i32 = obj.numbers[2];
-  return x_206;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_270 : i32;
-  index = 0;
-  loop {
-    let x_275 : i32 = index;
-    if ((x_275 != -1)) {
-    } else {
-      break;
-    }
-    let x_278 : i32 = index;
-    let x_280 : BST = tree[x_278];
-    currentNode = x_280;
-    let x_282 : i32 = currentNode.data;
-    let x_283 : i32 = *(target);
-    if ((x_282 == x_283)) {
-      let x_287 : i32 = *(target);
-      return x_287;
-    }
-    let x_288 : i32 = *(target);
-    let x_290 : i32 = currentNode.data;
-    if ((x_288 > x_290)) {
-      let x_296 : i32 = currentNode.rightIndex;
-      x_270 = x_296;
-    } else {
-      let x_298 : i32 = currentNode.leftIndex;
-      x_270 = x_298;
-    }
-    let x_299 : i32 = x_270;
-    index = x_299;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var pp : i32;
-  var looplimiter0 : i32;
-  var i : i32;
-  var param_24 : i32;
-  var count : i32;
-  var i_1 : i32;
-  var result : i32;
-  var param_25 : i32;
-  treeIndex_1 = 0;
-  let x_101 : BST = tree[0];
-  param_4 = x_101;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_103 : BST = param_4;
-  tree[0] = x_103;
-  let x_105 : i32 = treeIndex_1;
-  treeIndex_1 = (x_105 + 1);
-  let x_107 : i32 = treeIndex_1;
-  param_6 = x_107;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_109 : i32 = treeIndex_1;
-  treeIndex_1 = (x_109 + 1);
-  let x_111 : i32 = treeIndex_1;
-  param_8 = x_111;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_113 : i32 = treeIndex_1;
-  treeIndex_1 = (x_113 + 1);
-  let x_115 : i32 = treeIndex_1;
-  param_10 = x_115;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_117 : i32 = treeIndex_1;
-  treeIndex_1 = (x_117 + 1);
-  let x_119 : i32 = treeIndex_1;
-  param_12 = x_119;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_121 : i32 = treeIndex_1;
-  treeIndex_1 = (x_121 + 1);
-  let x_123 : i32 = treeIndex_1;
-  param_14 = x_123;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_125 : i32 = treeIndex_1;
-  treeIndex_1 = (x_125 + 1);
-  let x_127 : i32 = treeIndex_1;
-  param_16 = x_127;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_129 : i32 = treeIndex_1;
-  treeIndex_1 = (x_129 + 1);
-  let x_131 : i32 = treeIndex_1;
-  param_18 = x_131;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_133 : i32 = treeIndex_1;
-  treeIndex_1 = (x_133 + 1);
-  let x_135 : i32 = treeIndex_1;
-  param_20 = x_135;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_137 : i32 = treeIndex_1;
-  treeIndex_1 = (x_137 + 1);
-  let x_139 : i32 = treeIndex_1;
-  param_22 = x_139;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  pp = 0;
-  looplimiter0 = 0;
-  i = 0;
-  loop {
-    let x_145 : i32 = i;
-    if ((x_145 < 10000)) {
-    } else {
-      break;
-    }
-    let x_148 : i32 = looplimiter0;
-    let x_150 : f32 = x_50.injectionSwitch.y;
-    if ((x_148 >= i32(x_150))) {
-      let x_156 : f32 = x_50.injectionSwitch.y;
-      param_24 = (1 + i32(x_156));
-      let x_159 : i32 = identity_i1_(&(param_24));
-      pp = x_159;
-      break;
-    }
-    let x_160 : i32 = looplimiter0;
-    looplimiter0 = (x_160 + 1);
-
-    continuing {
-      let x_162 : i32 = i;
-      i = (x_162 + 1);
-    }
-  }
-  let x_164 : i32 = pp;
-  if ((x_164 != 2)) {
-    return;
-  }
-  count = 0;
-  i_1 = 0;
-  loop {
-    let x_172 : i32 = i_1;
-    if ((x_172 < 20)) {
-    } else {
-      break;
-    }
-    let x_175 : i32 = i_1;
-    param_25 = x_175;
-    let x_176 : i32 = search_i1_(&(param_25));
-    result = x_176;
-    let x_177 : i32 = i_1;
-    switch(x_177) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_187 : i32 = result;
-        let x_188 : i32 = i_1;
-        if ((x_187 == x_188)) {
-          let x_192 : i32 = count;
-          count = (x_192 + 1);
-        }
-      }
-      default: {
-        let x_181 : i32 = result;
-        if ((x_181 == -1)) {
-          let x_185 : i32 = count;
-          count = (x_185 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_194 : i32 = i_1;
-      i_1 = (x_194 + 1);
-    }
-  }
-  let x_196 : i32 = count;
-  if ((x_196 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.hlsl
deleted file mode 100644
index 53667a8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,280 +0,0 @@
-SKIP: FAILED
-
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static BST tree[10] = (BST[10])0;
-cbuffer cbuffer_x_50 : register(b0, space0) {
-  uint4 x_50[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST node, inout int data) {
-  const int x_208 = data;
-  node.data = x_208;
-  node.leftIndex = -1;
-  node.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    const int x_217 = baseIndex;
-    const int x_218 = treeIndex;
-    if ((x_217 <= x_218)) {
-    } else {
-      break;
-    }
-    const int x_221 = data_1;
-    const int x_224 = tree[baseIndex].data;
-    if ((x_221 <= x_224)) {
-      const int x_231 = tree[baseIndex].leftIndex;
-      if ((x_231 == -1)) {
-        const int x_236 = baseIndex;
-        const int x_237 = treeIndex;
-        tree[x_236].leftIndex = x_237;
-        const int x_239 = treeIndex;
-        const BST x_241 = tree[x_239];
-        param = x_241;
-        const int x_242 = data_1;
-        param_1 = x_242;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree[x_239] = param;
-        return;
-      } else {
-        const int x_248 = tree[baseIndex].leftIndex;
-        baseIndex = x_248;
-        continue;
-      }
-      return;
-    } else {
-      const int x_251 = tree[baseIndex].rightIndex;
-      if ((x_251 == -1)) {
-        const int x_256 = baseIndex;
-        const int x_257 = treeIndex;
-        tree[x_256].rightIndex = x_257;
-        const int x_259 = treeIndex;
-        const BST x_261 = tree[x_259];
-        param_2 = x_261;
-        const int x_262 = data_1;
-        param_3 = x_262;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree[x_259] = param_2;
-        return;
-      } else {
-        const int x_268 = tree[baseIndex].rightIndex;
-        baseIndex = x_268;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int identity_i1_(inout int a) {
-  const int x_202 = a;
-  const int x_203 = a;
-  obj.numbers[x_202] = x_203;
-  const int x_206 = obj.numbers[2];
-  return x_206;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_270 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_280 = tree[index];
-    currentNode = x_280;
-    const int x_282 = currentNode.data;
-    const int x_283 = target;
-    if ((x_282 == x_283)) {
-      const int x_287 = target;
-      return x_287;
-    }
-    const int x_288 = target;
-    const int x_290 = currentNode.data;
-    if ((x_288 > x_290)) {
-      const int x_296 = currentNode.rightIndex;
-      x_270 = x_296;
-    } else {
-      const int x_298 = currentNode.leftIndex;
-      x_270 = x_298;
-    }
-    index = x_270;
-  }
-  return -1;
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_4 = (BST)0;
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int pp = 0;
-  int looplimiter0 = 0;
-  int i = 0;
-  int param_24 = 0;
-  int count = 0;
-  int i_1 = 0;
-  int result = 0;
-  int param_25 = 0;
-  treeIndex_1 = 0;
-  const BST x_101 = tree[0];
-  param_4 = x_101;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_4, param_5);
-  tree[0] = param_4;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_6 = treeIndex_1;
-  param_7 = 5;
-  insert_i1_i1_(param_6, param_7);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_8 = treeIndex_1;
-  param_9 = 12;
-  insert_i1_i1_(param_8, param_9);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 15;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_12 = treeIndex_1;
-  param_13 = 7;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 8;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 2;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 6;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 17;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 13;
-  insert_i1_i1_(param_22, param_23);
-  pp = 0;
-  looplimiter0 = 0;
-  i = 0;
-  {
-    for(; (i < 10000); i = (i + 1)) {
-      const int x_148 = looplimiter0;
-      const float x_150 = asfloat(x_50[0].y);
-      if ((x_148 >= int(x_150))) {
-        const float x_156 = asfloat(x_50[0].y);
-        param_24 = (1 + int(x_156));
-        const int x_159 = identity_i1_(param_24);
-        pp = x_159;
-        break;
-      }
-      looplimiter0 = (looplimiter0 + 1);
-    }
-  }
-  if ((pp != 2)) {
-    return;
-  }
-  count = 0;
-  i_1 = 0;
-  {
-    for(; (i_1 < 20); i_1 = (i_1 + 1)) {
-      param_25 = i_1;
-      const int x_176 = search_i1_(param_25);
-      result = x_176;
-      switch(i_1) {
-        case 2:
-        case 5:
-        case 6:
-        case 7:
-        case 8:
-        case 9:
-        case 12:
-        case 13:
-        case 15:
-        case 17: {
-          if ((result == i_1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-        default: {
-          if ((result == -1)) {
-            count = (count + 1);
-          }
-          break;
-        }
-      }
-    }
-  }
-  if ((count == 20)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-C:\src\tint\test\Shader@0x000002670FAA27F0(32,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002670FAA27F0(32,3-14): warning X3557: loop only executes for 0 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002670FAA27F0(32,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002670FAA27F0(32,3-14): warning X3557: loop only executes for 1 iteration(s), forcing loop to unroll
-C:\src\tint\test\Shader@0x000002670FAA27F0(90,3-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x000002670FAA27F0(203,5-35): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.msl
deleted file mode 100644
index 786e864..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.msl
+++ /dev/null
@@ -1,338 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper_1 {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const node, thread int* const data) {
-  int const x_208 = *(data);
-  (*(node)).data = x_208;
-  (*(node)).leftIndex = -1;
-  (*(node)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper_1* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  baseIndex = 0;
-  while (true) {
-    int const x_217 = baseIndex;
-    int const x_218 = *(treeIndex);
-    if ((x_217 <= x_218)) {
-    } else {
-      break;
-    }
-    int const x_221 = *(data_1);
-    int const x_222 = baseIndex;
-    int const x_224 = (*(tint_symbol_3)).arr[x_222].data;
-    if ((x_221 <= x_224)) {
-      int const x_229 = baseIndex;
-      int const x_231 = (*(tint_symbol_3)).arr[x_229].leftIndex;
-      if ((x_231 == -1)) {
-        int const x_236 = baseIndex;
-        int const x_237 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_236].leftIndex = x_237;
-        int const x_239 = *(treeIndex);
-        BST const x_241 = (*(tint_symbol_3)).arr[x_239];
-        param = x_241;
-        int const x_242 = *(data_1);
-        param_1 = x_242;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_244 = param;
-        (*(tint_symbol_3)).arr[x_239] = x_244;
-        return;
-      } else {
-        int const x_246 = baseIndex;
-        int const x_248 = (*(tint_symbol_3)).arr[x_246].leftIndex;
-        baseIndex = x_248;
-        continue;
-      }
-      return;
-    } else {
-      int const x_249 = baseIndex;
-      int const x_251 = (*(tint_symbol_3)).arr[x_249].rightIndex;
-      if ((x_251 == -1)) {
-        int const x_256 = baseIndex;
-        int const x_257 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_256].rightIndex = x_257;
-        int const x_259 = *(treeIndex);
-        BST const x_261 = (*(tint_symbol_3)).arr[x_259];
-        param_2 = x_261;
-        int const x_262 = *(data_1);
-        param_3 = x_262;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_264 = param_2;
-        (*(tint_symbol_3)).arr[x_259] = x_264;
-        return;
-      } else {
-        int const x_266 = baseIndex;
-        int const x_268 = (*(tint_symbol_3)).arr[x_266].rightIndex;
-        baseIndex = x_268;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-int identity_i1_(thread int* const a, thread QuicksortObject* const tint_symbol_4) {
-  int const x_202 = *(a);
-  int const x_203 = *(a);
-  (*(tint_symbol_4)).numbers.arr[x_202] = x_203;
-  int const x_206 = (*(tint_symbol_4)).numbers.arr[2];
-  return x_206;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper_1* const tint_symbol_5) {
-  int index = 0;
-  BST currentNode = {};
-  int x_270 = 0;
-  index = 0;
-  while (true) {
-    int const x_275 = index;
-    if ((x_275 != -1)) {
-    } else {
-      break;
-    }
-    int const x_278 = index;
-    BST const x_280 = (*(tint_symbol_5)).arr[x_278];
-    currentNode = x_280;
-    int const x_282 = currentNode.data;
-    int const x_283 = *(target);
-    if ((x_282 == x_283)) {
-      int const x_287 = *(target);
-      return x_287;
-    }
-    int const x_288 = *(target);
-    int const x_290 = currentNode.data;
-    if ((x_288 > x_290)) {
-      int const x_296 = currentNode.rightIndex;
-      x_270 = x_296;
-    } else {
-      int const x_298 = currentNode.leftIndex;
-      x_270 = x_298;
-    }
-    int const x_299 = x_270;
-    index = x_299;
-  }
-  return -1;
-}
-
-void main_1(constant buf0& x_50, thread tint_array_wrapper_1* const tint_symbol_6, thread QuicksortObject* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int treeIndex_1 = 0;
-  BST param_4 = {};
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  int param_8 = 0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int pp = 0;
-  int looplimiter0 = 0;
-  int i = 0;
-  int param_24 = 0;
-  int count = 0;
-  int i_1 = 0;
-  int result = 0;
-  int param_25 = 0;
-  treeIndex_1 = 0;
-  BST const x_101 = (*(tint_symbol_6)).arr[0];
-  param_4 = x_101;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  BST const x_103 = param_4;
-  (*(tint_symbol_6)).arr[0] = x_103;
-  int const x_105 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)));
-  int const x_107 = treeIndex_1;
-  param_6 = x_107;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7), tint_symbol_6);
-  int const x_109 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(1)));
-  int const x_111 = treeIndex_1;
-  param_8 = x_111;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9), tint_symbol_6);
-  int const x_113 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-  int const x_115 = treeIndex_1;
-  param_10 = x_115;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11), tint_symbol_6);
-  int const x_117 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-  int const x_119 = treeIndex_1;
-  param_12 = x_119;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13), tint_symbol_6);
-  int const x_121 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
-  int const x_123 = treeIndex_1;
-  param_14 = x_123;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15), tint_symbol_6);
-  int const x_125 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_125) + as_type<uint>(1)));
-  int const x_127 = treeIndex_1;
-  param_16 = x_127;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17), tint_symbol_6);
-  int const x_129 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_129) + as_type<uint>(1)));
-  int const x_131 = treeIndex_1;
-  param_18 = x_131;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19), tint_symbol_6);
-  int const x_133 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
-  int const x_135 = treeIndex_1;
-  param_20 = x_135;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21), tint_symbol_6);
-  int const x_137 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_137) + as_type<uint>(1)));
-  int const x_139 = treeIndex_1;
-  param_22 = x_139;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23), tint_symbol_6);
-  pp = 0;
-  looplimiter0 = 0;
-  i = 0;
-  while (true) {
-    int const x_145 = i;
-    if ((x_145 < 10000)) {
-    } else {
-      break;
-    }
-    int const x_148 = looplimiter0;
-    float const x_150 = x_50.injectionSwitch.y;
-    if ((x_148 >= int(x_150))) {
-      float const x_156 = x_50.injectionSwitch.y;
-      param_24 = as_type<int>((as_type<uint>(1) + as_type<uint>(int(x_156))));
-      int const x_159 = identity_i1_(&(param_24), tint_symbol_7);
-      pp = x_159;
-      break;
-    }
-    int const x_160 = looplimiter0;
-    looplimiter0 = as_type<int>((as_type<uint>(x_160) + as_type<uint>(1)));
-    {
-      int const x_162 = i;
-      i = as_type<int>((as_type<uint>(x_162) + as_type<uint>(1)));
-    }
-  }
-  int const x_164 = pp;
-  if ((x_164 != 2)) {
-    return;
-  }
-  count = 0;
-  i_1 = 0;
-  while (true) {
-    int const x_172 = i_1;
-    if ((x_172 < 20)) {
-    } else {
-      break;
-    }
-    int const x_175 = i_1;
-    param_25 = x_175;
-    int const x_176 = search_i1_(&(param_25), tint_symbol_6);
-    result = x_176;
-    int const x_177 = i_1;
-    switch(x_177) {
-      case 2:
-      case 5:
-      case 6:
-      case 7:
-      case 8:
-      case 9:
-      case 12:
-      case 13:
-      case 15:
-      case 17: {
-        int const x_187 = result;
-        int const x_188 = i_1;
-        if ((x_187 == x_188)) {
-          int const x_192 = count;
-          count = as_type<int>((as_type<uint>(x_192) + as_type<uint>(1)));
-        }
-        break;
-      }
-      default: {
-        int const x_181 = result;
-        if ((x_181 == -1)) {
-          int const x_185 = count;
-          count = as_type<int>((as_type<uint>(x_185) + as_type<uint>(1)));
-        }
-        break;
-      }
-    }
-    {
-      int const x_194 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_194) + as_type<uint>(1)));
-    }
-  }
-  int const x_196 = count;
-  if ((x_196 == 20)) {
-    *(tint_symbol_8) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_8) = float4(0.0f, 0.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_50, thread tint_array_wrapper_1* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  main_1(x_50, tint_symbol_9, tint_symbol_10, tint_symbol_11);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_50 [[buffer(0)]]) {
-  thread tint_array_wrapper_1 tint_symbol_12 = {};
-  thread QuicksortObject tint_symbol_13 = {};
-  thread float4 tint_symbol_14 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_50, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.spvasm
deleted file mode 100644
index b8f0ad9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,570 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 370
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree "tree"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_50 "x_50"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %node "node"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %identity_i1_ "identity_i1_"
-               OpName %a "a"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_270 "x_270"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %pp "pp"
-               OpName %looplimiter0 "looplimiter0"
-               OpName %i "i"
-               OpName %param_24 "param_24"
-               OpName %count "count"
-               OpName %i_1 "i_1"
-               OpName %result "result"
-               OpName %param_25 "param_25"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_50 NonWritable
-               OpDecorate %x_50 DescriptorSet 0
-               OpDecorate %x_50 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %13 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %13
-        %BST = OpTypeStruct %int %int %int
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %18 = OpConstantNull %_arr_BST_uint_10
-       %tree = OpVariable %_ptr_Private__arr_BST_uint_10 Private %18
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_50 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %25 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %45 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %51 = OpConstantNull %int
-         %53 = OpConstantNull %BST
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-        %131 = OpTypeFunction %int %_ptr_Function_int
-      %int_2 = OpConstant %int 2
-        %183 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-     %int_12 = OpConstant %int 12
-     %int_15 = OpConstant %int 15
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-      %int_6 = OpConstant %int 6
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-  %int_10000 = OpConstant %int 10000
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %357 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %358 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %359 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %25
-       %node = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %32 = OpLabel
-         %34 = OpLoad %int %data
-         %37 = OpAccessChain %_ptr_Function_int %node %uint_0
-               OpStore %37 %34
-         %40 = OpAccessChain %_ptr_Function_int %node %uint_1
-               OpStore %40 %int_n1
-         %44 = OpAccessChain %_ptr_Function_int %node %uint_2
-               OpStore %44 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %45
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %49 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %51
-      %param = OpVariable %_ptr_Function_BST Function %53
-    %param_1 = OpVariable %_ptr_Function_int Function %51
-    %param_2 = OpVariable %_ptr_Function_BST Function %53
-    %param_3 = OpVariable %_ptr_Function_int Function %51
-               OpStore %baseIndex %int_0
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-         %62 = OpLoad %int %baseIndex
-         %64 = OpLoad %int %treeIndex
-         %65 = OpSLessThanEqual %bool %62 %64
-               OpSelectionMerge %67 None
-               OpBranchConditional %65 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %59
-         %67 = OpLabel
-         %71 = OpLoad %int %data_1
-         %72 = OpLoad %int %baseIndex
-         %74 = OpAccessChain %_ptr_Private_int %tree %72 %uint_0
-         %75 = OpLoad %int %74
-         %76 = OpSLessThanEqual %bool %71 %75
-               OpSelectionMerge %77 None
-               OpBranchConditional %76 %78 %79
-         %78 = OpLabel
-         %80 = OpLoad %int %baseIndex
-         %81 = OpAccessChain %_ptr_Private_int %tree %80 %uint_1
-         %82 = OpLoad %int %81
-         %83 = OpIEqual %bool %82 %int_n1
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-         %87 = OpLoad %int %baseIndex
-         %89 = OpLoad %int %treeIndex
-         %90 = OpAccessChain %_ptr_Private_int %tree %87 %uint_1
-               OpStore %90 %89
-         %92 = OpLoad %int %treeIndex
-         %94 = OpAccessChain %_ptr_Private_BST %tree %92
-         %95 = OpLoad %BST %94
-               OpStore %param %95
-         %97 = OpLoad %int %data_1
-               OpStore %param_1 %97
-         %98 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-        %101 = OpLoad %BST %param
-        %102 = OpAccessChain %_ptr_Private_BST %tree %92
-               OpStore %102 %101
-               OpReturn
-         %86 = OpLabel
-        %103 = OpLoad %int %baseIndex
-        %104 = OpAccessChain %_ptr_Private_int %tree %103 %uint_1
-        %105 = OpLoad %int %104
-               OpStore %baseIndex %105
-               OpBranch %60
-         %84 = OpLabel
-               OpReturn
-         %79 = OpLabel
-        %106 = OpLoad %int %baseIndex
-        %107 = OpAccessChain %_ptr_Private_int %tree %106 %uint_2
-        %108 = OpLoad %int %107
-        %109 = OpIEqual %bool %108 %int_n1
-               OpSelectionMerge %110 None
-               OpBranchConditional %109 %111 %112
-        %111 = OpLabel
-        %113 = OpLoad %int %baseIndex
-        %115 = OpLoad %int %treeIndex
-        %116 = OpAccessChain %_ptr_Private_int %tree %113 %uint_2
-               OpStore %116 %115
-        %118 = OpLoad %int %treeIndex
-        %119 = OpAccessChain %_ptr_Private_BST %tree %118
-        %120 = OpLoad %BST %119
-               OpStore %param_2 %120
-        %122 = OpLoad %int %data_1
-               OpStore %param_3 %122
-        %123 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %126 = OpLoad %BST %param_2
-        %127 = OpAccessChain %_ptr_Private_BST %tree %118
-               OpStore %127 %126
-               OpReturn
-        %112 = OpLabel
-        %128 = OpLoad %int %baseIndex
-        %129 = OpAccessChain %_ptr_Private_int %tree %128 %uint_2
-        %130 = OpLoad %int %129
-               OpStore %baseIndex %130
-               OpBranch %60
-        %110 = OpLabel
-               OpReturn
-         %77 = OpLabel
-               OpReturn
-         %60 = OpLabel
-               OpBranch %58
-         %59 = OpLabel
-               OpReturn
-               OpFunctionEnd
-%identity_i1_ = OpFunction %int None %131
-          %a = OpFunctionParameter %_ptr_Function_int
-        %134 = OpLabel
-        %136 = OpLoad %int %a
-        %138 = OpLoad %int %a
-        %139 = OpAccessChain %_ptr_Private_int %obj %uint_0 %136
-               OpStore %139 %138
-        %141 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %142 = OpLoad %int %141
-               OpReturnValue %142
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %131
-     %target = OpFunctionParameter %_ptr_Function_int
-        %145 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %51
-%currentNode = OpVariable %_ptr_Function_BST Function %53
-      %x_270 = OpVariable %_ptr_Function_int Function %51
-               OpStore %index %int_0
-               OpBranch %149
-        %149 = OpLabel
-               OpLoopMerge %150 %151 None
-               OpBranch %152
-        %152 = OpLabel
-        %153 = OpLoad %int %index
-        %154 = OpINotEqual %bool %153 %int_n1
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %157
-        %156 = OpLabel
-               OpBranch %155
-        %157 = OpLabel
-               OpBranch %150
-        %155 = OpLabel
-        %158 = OpLoad %int %index
-        %159 = OpAccessChain %_ptr_Private_BST %tree %158
-        %160 = OpLoad %BST %159
-               OpStore %currentNode %160
-        %161 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %162 = OpLoad %int %161
-        %164 = OpLoad %int %target
-        %165 = OpIEqual %bool %162 %164
-               OpSelectionMerge %166 None
-               OpBranchConditional %165 %167 %166
-        %167 = OpLabel
-        %169 = OpLoad %int %target
-               OpReturnValue %169
-        %166 = OpLabel
-        %171 = OpLoad %int %target
-        %172 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %173 = OpLoad %int %172
-        %174 = OpSGreaterThan %bool %171 %173
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %177
-        %176 = OpLabel
-        %178 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %179 = OpLoad %int %178
-               OpStore %x_270 %179
-               OpBranch %175
-        %177 = OpLabel
-        %180 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %181 = OpLoad %int %180
-               OpStore %x_270 %181
-               OpBranch %175
-        %175 = OpLabel
-        %182 = OpLoad %int %x_270
-               OpStore %index %182
-               OpBranch %151
-        %151 = OpLabel
-               OpBranch %149
-        %150 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %183
-        %185 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %51
-    %param_4 = OpVariable %_ptr_Function_BST Function %53
-    %param_5 = OpVariable %_ptr_Function_int Function %51
-    %param_6 = OpVariable %_ptr_Function_int Function %51
-    %param_7 = OpVariable %_ptr_Function_int Function %51
-    %param_8 = OpVariable %_ptr_Function_int Function %51
-    %param_9 = OpVariable %_ptr_Function_int Function %51
-   %param_10 = OpVariable %_ptr_Function_int Function %51
-   %param_11 = OpVariable %_ptr_Function_int Function %51
-   %param_12 = OpVariable %_ptr_Function_int Function %51
-   %param_13 = OpVariable %_ptr_Function_int Function %51
-   %param_14 = OpVariable %_ptr_Function_int Function %51
-   %param_15 = OpVariable %_ptr_Function_int Function %51
-   %param_16 = OpVariable %_ptr_Function_int Function %51
-   %param_17 = OpVariable %_ptr_Function_int Function %51
-   %param_18 = OpVariable %_ptr_Function_int Function %51
-   %param_19 = OpVariable %_ptr_Function_int Function %51
-   %param_20 = OpVariable %_ptr_Function_int Function %51
-   %param_21 = OpVariable %_ptr_Function_int Function %51
-   %param_22 = OpVariable %_ptr_Function_int Function %51
-   %param_23 = OpVariable %_ptr_Function_int Function %51
-         %pp = OpVariable %_ptr_Function_int Function %51
-%looplimiter0 = OpVariable %_ptr_Function_int Function %51
-          %i = OpVariable %_ptr_Function_int Function %51
-   %param_24 = OpVariable %_ptr_Function_int Function %51
-      %count = OpVariable %_ptr_Function_int Function %51
-        %i_1 = OpVariable %_ptr_Function_int Function %51
-     %result = OpVariable %_ptr_Function_int Function %51
-   %param_25 = OpVariable %_ptr_Function_int Function %51
-               OpStore %treeIndex_1 %int_0
-        %215 = OpAccessChain %_ptr_Private_BST %tree %int_0
-        %216 = OpLoad %BST %215
-               OpStore %param_4 %216
-               OpStore %param_5 %int_9
-        %218 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_4 %param_5
-        %221 = OpLoad %BST %param_4
-        %222 = OpAccessChain %_ptr_Private_BST %tree %int_0
-               OpStore %222 %221
-        %223 = OpLoad %int %treeIndex_1
-        %225 = OpIAdd %int %223 %int_1
-               OpStore %treeIndex_1 %225
-        %226 = OpLoad %int %treeIndex_1
-               OpStore %param_6 %226
-               OpStore %param_7 %int_5
-        %228 = OpFunctionCall %void %insert_i1_i1_ %param_6 %param_7
-        %231 = OpLoad %int %treeIndex_1
-        %232 = OpIAdd %int %231 %int_1
-               OpStore %treeIndex_1 %232
-        %233 = OpLoad %int %treeIndex_1
-               OpStore %param_8 %233
-               OpStore %param_9 %int_12
-        %235 = OpFunctionCall %void %insert_i1_i1_ %param_8 %param_9
-        %238 = OpLoad %int %treeIndex_1
-        %239 = OpIAdd %int %238 %int_1
-               OpStore %treeIndex_1 %239
-        %240 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %240
-               OpStore %param_11 %int_15
-        %242 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %245 = OpLoad %int %treeIndex_1
-        %246 = OpIAdd %int %245 %int_1
-               OpStore %treeIndex_1 %246
-        %247 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %247
-               OpStore %param_13 %int_7
-        %249 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %252 = OpLoad %int %treeIndex_1
-        %253 = OpIAdd %int %252 %int_1
-               OpStore %treeIndex_1 %253
-        %254 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %254
-               OpStore %param_15 %int_8
-        %256 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %259 = OpLoad %int %treeIndex_1
-        %260 = OpIAdd %int %259 %int_1
-               OpStore %treeIndex_1 %260
-        %261 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %261
-               OpStore %param_17 %int_2
-        %262 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %265 = OpLoad %int %treeIndex_1
-        %266 = OpIAdd %int %265 %int_1
-               OpStore %treeIndex_1 %266
-        %267 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %267
-               OpStore %param_19 %int_6
-        %269 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %272 = OpLoad %int %treeIndex_1
-        %273 = OpIAdd %int %272 %int_1
-               OpStore %treeIndex_1 %273
-        %274 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %274
-               OpStore %param_21 %int_17
-        %276 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %279 = OpLoad %int %treeIndex_1
-        %280 = OpIAdd %int %279 %int_1
-               OpStore %treeIndex_1 %280
-        %281 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %281
-               OpStore %param_23 %int_13
-        %283 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-               OpStore %pp %int_0
-               OpStore %looplimiter0 %int_0
-               OpStore %i %int_0
-               OpBranch %286
-        %286 = OpLabel
-               OpLoopMerge %287 %288 None
-               OpBranch %289
-        %289 = OpLabel
-        %290 = OpLoad %int %i
-        %292 = OpSLessThan %bool %290 %int_10000
-               OpSelectionMerge %293 None
-               OpBranchConditional %292 %294 %295
-        %294 = OpLabel
-               OpBranch %293
-        %295 = OpLabel
-               OpBranch %287
-        %293 = OpLabel
-        %296 = OpLoad %int %looplimiter0
-        %298 = OpAccessChain %_ptr_Uniform_float %x_50 %uint_0 %uint_1
-        %299 = OpLoad %float %298
-        %300 = OpConvertFToS %int %299
-        %301 = OpSGreaterThanEqual %bool %296 %300
-               OpSelectionMerge %302 None
-               OpBranchConditional %301 %303 %302
-        %303 = OpLabel
-        %304 = OpAccessChain %_ptr_Uniform_float %x_50 %uint_0 %uint_1
-        %305 = OpLoad %float %304
-        %306 = OpConvertFToS %int %305
-        %307 = OpIAdd %int %int_1 %306
-               OpStore %param_24 %307
-        %308 = OpFunctionCall %int %identity_i1_ %param_24
-               OpStore %pp %308
-               OpBranch %287
-        %302 = OpLabel
-        %310 = OpLoad %int %looplimiter0
-        %311 = OpIAdd %int %310 %int_1
-               OpStore %looplimiter0 %311
-               OpBranch %288
-        %288 = OpLabel
-        %312 = OpLoad %int %i
-        %313 = OpIAdd %int %312 %int_1
-               OpStore %i %313
-               OpBranch %286
-        %287 = OpLabel
-        %314 = OpLoad %int %pp
-        %315 = OpINotEqual %bool %314 %int_2
-               OpSelectionMerge %316 None
-               OpBranchConditional %315 %317 %316
-        %317 = OpLabel
-               OpReturn
-        %316 = OpLabel
-               OpStore %count %int_0
-               OpStore %i_1 %int_0
-               OpBranch %318
-        %318 = OpLabel
-               OpLoopMerge %319 %320 None
-               OpBranch %321
-        %321 = OpLabel
-        %322 = OpLoad %int %i_1
-        %324 = OpSLessThan %bool %322 %int_20
-               OpSelectionMerge %325 None
-               OpBranchConditional %324 %326 %327
-        %326 = OpLabel
-               OpBranch %325
-        %327 = OpLabel
-               OpBranch %319
-        %325 = OpLabel
-        %328 = OpLoad %int %i_1
-               OpStore %param_25 %328
-        %329 = OpFunctionCall %int %search_i1_ %param_25
-               OpStore %result %329
-        %331 = OpLoad %int %i_1
-               OpSelectionMerge %332 None
-               OpSwitch %331 %333 2 %334 5 %334 6 %334 7 %334 8 %334 9 %334 12 %334 13 %334 15 %334 17 %334
-        %334 = OpLabel
-        %335 = OpLoad %int %result
-        %336 = OpLoad %int %i_1
-        %337 = OpIEqual %bool %335 %336
-               OpSelectionMerge %338 None
-               OpBranchConditional %337 %339 %338
-        %339 = OpLabel
-        %340 = OpLoad %int %count
-        %341 = OpIAdd %int %340 %int_1
-               OpStore %count %341
-               OpBranch %338
-        %338 = OpLabel
-               OpBranch %332
-        %333 = OpLabel
-        %342 = OpLoad %int %result
-        %343 = OpIEqual %bool %342 %int_n1
-               OpSelectionMerge %344 None
-               OpBranchConditional %343 %345 %344
-        %345 = OpLabel
-        %346 = OpLoad %int %count
-        %347 = OpIAdd %int %346 %int_1
-               OpStore %count %347
-               OpBranch %344
-        %344 = OpLabel
-               OpBranch %332
-        %332 = OpLabel
-               OpBranch %320
-        %320 = OpLabel
-        %348 = OpLoad %int %i_1
-        %349 = OpIAdd %int %348 %int_1
-               OpStore %i_1 %349
-               OpBranch %318
-        %319 = OpLabel
-        %350 = OpLoad %int %count
-        %351 = OpIEqual %bool %350 %int_20
-               OpSelectionMerge %352 None
-               OpBranchConditional %351 %353 %354
-        %353 = OpLabel
-               OpStore %x_GLF_color %357
-               OpBranch %352
-        %354 = OpLabel
-               OpStore %x_GLF_color %358
-               OpBranch %352
-        %352 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %359
-        %362 = OpLabel
-        %363 = OpFunctionCall %void %main_1
-        %364 = OpLoad %v4float %x_GLF_color
-        %365 = OpCompositeConstruct %main_out %364
-               OpReturnValue %365
-               OpFunctionEnd
-       %main = OpFunction %void None %183
-        %367 = OpLabel
-        %368 = OpFunctionCall %main_out %main_inner
-        %369 = OpCompositeExtract %v4float %368 0
-               OpStore %x_GLF_color_1_1 %369
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.wgsl
deleted file mode 100644
index cd61e29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,319 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> tree : array<BST, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_50 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(node : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_208 : i32 = *(data);
-  (*(node)).data = x_208;
-  (*(node)).leftIndex = -1;
-  (*(node)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  baseIndex = 0;
-  loop {
-    let x_217 : i32 = baseIndex;
-    let x_218 : i32 = *(treeIndex);
-    if ((x_217 <= x_218)) {
-    } else {
-      break;
-    }
-    let x_221 : i32 = *(data_1);
-    let x_222 : i32 = baseIndex;
-    let x_224 : i32 = tree[x_222].data;
-    if ((x_221 <= x_224)) {
-      let x_229 : i32 = baseIndex;
-      let x_231 : i32 = tree[x_229].leftIndex;
-      if ((x_231 == -1)) {
-        let x_236 : i32 = baseIndex;
-        let x_237 : i32 = *(treeIndex);
-        tree[x_236].leftIndex = x_237;
-        let x_239 : i32 = *(treeIndex);
-        let x_241 : BST = tree[x_239];
-        param = x_241;
-        let x_242 : i32 = *(data_1);
-        param_1 = x_242;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_244 : BST = param;
-        tree[x_239] = x_244;
-        return;
-      } else {
-        let x_246 : i32 = baseIndex;
-        let x_248 : i32 = tree[x_246].leftIndex;
-        baseIndex = x_248;
-        continue;
-      }
-      return;
-    } else {
-      let x_249 : i32 = baseIndex;
-      let x_251 : i32 = tree[x_249].rightIndex;
-      if ((x_251 == -1)) {
-        let x_256 : i32 = baseIndex;
-        let x_257 : i32 = *(treeIndex);
-        tree[x_256].rightIndex = x_257;
-        let x_259 : i32 = *(treeIndex);
-        let x_261 : BST = tree[x_259];
-        param_2 = x_261;
-        let x_262 : i32 = *(data_1);
-        param_3 = x_262;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_264 : BST = param_2;
-        tree[x_259] = x_264;
-        return;
-      } else {
-        let x_266 : i32 = baseIndex;
-        let x_268 : i32 = tree[x_266].rightIndex;
-        baseIndex = x_268;
-        continue;
-      }
-      return;
-    }
-    return;
-  }
-  return;
-}
-
-fn identity_i1_(a : ptr<function, i32>) -> i32 {
-  let x_202 : i32 = *(a);
-  let x_203 : i32 = *(a);
-  obj.numbers[x_202] = x_203;
-  let x_206 : i32 = obj.numbers[2];
-  return x_206;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_270 : i32;
-  index = 0;
-  loop {
-    let x_275 : i32 = index;
-    if ((x_275 != -1)) {
-    } else {
-      break;
-    }
-    let x_278 : i32 = index;
-    let x_280 : BST = tree[x_278];
-    currentNode = x_280;
-    let x_282 : i32 = currentNode.data;
-    let x_283 : i32 = *(target);
-    if ((x_282 == x_283)) {
-      let x_287 : i32 = *(target);
-      return x_287;
-    }
-    let x_288 : i32 = *(target);
-    let x_290 : i32 = currentNode.data;
-    if ((x_288 > x_290)) {
-      let x_296 : i32 = currentNode.rightIndex;
-      x_270 = x_296;
-    } else {
-      let x_298 : i32 = currentNode.leftIndex;
-      x_270 = x_298;
-    }
-    let x_299 : i32 = x_270;
-    index = x_299;
-  }
-  return -1;
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_4 : BST;
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  var param_8 : i32;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var pp : i32;
-  var looplimiter0 : i32;
-  var i : i32;
-  var param_24 : i32;
-  var count : i32;
-  var i_1 : i32;
-  var result : i32;
-  var param_25 : i32;
-  treeIndex_1 = 0;
-  let x_101 : BST = tree[0];
-  param_4 = x_101;
-  param_5 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_4), &(param_5));
-  let x_103 : BST = param_4;
-  tree[0] = x_103;
-  let x_105 : i32 = treeIndex_1;
-  treeIndex_1 = (x_105 + 1);
-  let x_107 : i32 = treeIndex_1;
-  param_6 = x_107;
-  param_7 = 5;
-  insert_i1_i1_(&(param_6), &(param_7));
-  let x_109 : i32 = treeIndex_1;
-  treeIndex_1 = (x_109 + 1);
-  let x_111 : i32 = treeIndex_1;
-  param_8 = x_111;
-  param_9 = 12;
-  insert_i1_i1_(&(param_8), &(param_9));
-  let x_113 : i32 = treeIndex_1;
-  treeIndex_1 = (x_113 + 1);
-  let x_115 : i32 = treeIndex_1;
-  param_10 = x_115;
-  param_11 = 15;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_117 : i32 = treeIndex_1;
-  treeIndex_1 = (x_117 + 1);
-  let x_119 : i32 = treeIndex_1;
-  param_12 = x_119;
-  param_13 = 7;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_121 : i32 = treeIndex_1;
-  treeIndex_1 = (x_121 + 1);
-  let x_123 : i32 = treeIndex_1;
-  param_14 = x_123;
-  param_15 = 8;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_125 : i32 = treeIndex_1;
-  treeIndex_1 = (x_125 + 1);
-  let x_127 : i32 = treeIndex_1;
-  param_16 = x_127;
-  param_17 = 2;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_129 : i32 = treeIndex_1;
-  treeIndex_1 = (x_129 + 1);
-  let x_131 : i32 = treeIndex_1;
-  param_18 = x_131;
-  param_19 = 6;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_133 : i32 = treeIndex_1;
-  treeIndex_1 = (x_133 + 1);
-  let x_135 : i32 = treeIndex_1;
-  param_20 = x_135;
-  param_21 = 17;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_137 : i32 = treeIndex_1;
-  treeIndex_1 = (x_137 + 1);
-  let x_139 : i32 = treeIndex_1;
-  param_22 = x_139;
-  param_23 = 13;
-  insert_i1_i1_(&(param_22), &(param_23));
-  pp = 0;
-  looplimiter0 = 0;
-  i = 0;
-  loop {
-    let x_145 : i32 = i;
-    if ((x_145 < 10000)) {
-    } else {
-      break;
-    }
-    let x_148 : i32 = looplimiter0;
-    let x_150 : f32 = x_50.injectionSwitch.y;
-    if ((x_148 >= i32(x_150))) {
-      let x_156 : f32 = x_50.injectionSwitch.y;
-      param_24 = (1 + i32(x_156));
-      let x_159 : i32 = identity_i1_(&(param_24));
-      pp = x_159;
-      break;
-    }
-    let x_160 : i32 = looplimiter0;
-    looplimiter0 = (x_160 + 1);
-
-    continuing {
-      let x_162 : i32 = i;
-      i = (x_162 + 1);
-    }
-  }
-  let x_164 : i32 = pp;
-  if ((x_164 != 2)) {
-    return;
-  }
-  count = 0;
-  i_1 = 0;
-  loop {
-    let x_172 : i32 = i_1;
-    if ((x_172 < 20)) {
-    } else {
-      break;
-    }
-    let x_175 : i32 = i_1;
-    param_25 = x_175;
-    let x_176 : i32 = search_i1_(&(param_25));
-    result = x_176;
-    let x_177 : i32 = i_1;
-    switch(x_177) {
-      case 2, 5, 6, 7, 8, 9, 12, 13, 15, 17: {
-        let x_187 : i32 = result;
-        let x_188 : i32 = i_1;
-        if ((x_187 == x_188)) {
-          let x_192 : i32 = count;
-          count = (x_192 + 1);
-        }
-      }
-      default: {
-        let x_181 : i32 = result;
-        if ((x_181 == -1)) {
-          let x_185 : i32 = count;
-          count = (x_185 + 1);
-        }
-      }
-    }
-
-    continuing {
-      let x_194 : i32 = i_1;
-      i_1 = (x_194 + 1);
-    }
-  }
-  let x_196 : i32 = count;
-  if ((x_196 == 20)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.hlsl
deleted file mode 100644
index dcab7e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int collatz_i1_(inout int v) {
-  int count = 0;
-  count = 0;
-  while (true) {
-    const int x_89 = v;
-    if ((x_89 > 1)) {
-    } else {
-      break;
-    }
-    const int x_92 = v;
-    if (((x_92 & 1) == 1)) {
-      const int x_98 = v;
-      v = ((3 * x_98) + 1);
-    } else {
-      const int x_101 = v;
-      v = (x_101 / 2);
-    }
-    count = (count + 1);
-  }
-  return count;
-}
-
-void main_1() {
-  float2 lin = float2(0.0f, 0.0f);
-  int v_1 = 0;
-  int param = 0;
-  float4 indexable[16] = (float4[16])0;
-  const float4 x_63 = gl_FragCoord;
-  const float2 x_66 = asfloat(x_10[0].xy);
-  lin = (float2(x_63.x, x_63.y) / x_66);
-  lin = floor((lin * 8.0f));
-  const float x_72 = lin.x;
-  const float x_76 = lin.y;
-  v_1 = ((int(x_72) * 8) + int(x_76));
-  param = v_1;
-  const int x_80 = collatz_i1_(param);
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_83 = indexable[(x_80 % 16)];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.msl
deleted file mode 100644
index 2555b63..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.msl
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int collatz_i1_(thread int* const v) {
-  int count = 0;
-  count = 0;
-  while (true) {
-    int const x_89 = *(v);
-    if ((x_89 > 1)) {
-    } else {
-      break;
-    }
-    int const x_92 = *(v);
-    if (((x_92 & 1) == 1)) {
-      int const x_98 = *(v);
-      *(v) = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(3) * as_type<uint>(x_98)))) + as_type<uint>(1)));
-    } else {
-      int const x_101 = *(v);
-      *(v) = (x_101 / 2);
-    }
-    int const x_103 = count;
-    count = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-  }
-  int const x_105 = count;
-  return x_105;
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float2 lin = 0.0f;
-  int v_1 = 0;
-  int param = 0;
-  tint_array_wrapper indexable = {};
-  float4 const x_63 = *(tint_symbol_4);
-  float2 const x_66 = x_10.resolution;
-  lin = (float2(x_63.x, x_63.y) / x_66);
-  float2 const x_68 = lin;
-  lin = floor((x_68 * 8.0f));
-  float const x_72 = lin.x;
-  float const x_76 = lin.y;
-  v_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_72)) * as_type<uint>(8)))) + as_type<uint>(int(x_76))));
-  int const x_79 = v_1;
-  param = x_79;
-  int const x_80 = collatz_i1_(&(param));
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_83 = indexable.arr[(x_80 % 16)];
-  *(tint_symbol_5) = x_83;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_10, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.spvasm
deleted file mode 100644
index 4742393..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,200 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 137
-; Schema: 0
-               OpCapability Shader
-         %83 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %collatz_i1_ "collatz_i1_"
-               OpName %v "v"
-               OpName %count "count"
-               OpName %main_1 "main_1"
-               OpName %lin "lin"
-               OpName %v_1 "v_1"
-               OpName %param "param"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpTypeFunction %int %_ptr_Function_int
-         %22 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %57 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %63 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %71 = OpConstantNull %_arr_v4float_uint_16
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-      %int_8 = OpConstant %int 8
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %102 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %104 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %105 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %106 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %107 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %108 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %109 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %110 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %111 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %112 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %113 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %114 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %115 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %116 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %117 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %118 = OpConstantComposite %_arr_v4float_uint_16 %102 %104 %105 %106 %107 %108 %109 %110 %102 %111 %112 %113 %114 %115 %116 %117
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %124 = OpTypeFunction %main_out %v4float
-%collatz_i1_ = OpFunction %int None %15
-          %v = OpFunctionParameter %_ptr_Function_int
-         %20 = OpLabel
-      %count = OpVariable %_ptr_Function_int Function %22
-               OpStore %count %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %29 = OpLoad %int %v
-         %31 = OpSGreaterThan %bool %29 %int_1
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %35
-         %34 = OpLabel
-               OpBranch %33
-         %35 = OpLabel
-               OpBranch %25
-         %33 = OpLabel
-         %37 = OpLoad %int %v
-         %38 = OpBitwiseAnd %int %37 %int_1
-         %39 = OpIEqual %bool %38 %int_1
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %42
-         %41 = OpLabel
-         %44 = OpLoad %int %v
-         %47 = OpIMul %int %int_3 %44
-         %48 = OpIAdd %int %47 %int_1
-               OpStore %v %48
-               OpBranch %40
-         %42 = OpLabel
-         %50 = OpLoad %int %v
-         %53 = OpSDiv %int %50 %int_2
-               OpStore %v %53
-               OpBranch %40
-         %40 = OpLabel
-         %54 = OpLoad %int %count
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %count %55
-               OpBranch %26
-         %26 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-         %56 = OpLoad %int %count
-               OpReturnValue %56
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %57
-         %60 = OpLabel
-        %lin = OpVariable %_ptr_Function_v2float Function %63
-        %v_1 = OpVariable %_ptr_Function_int Function %22
-      %param = OpVariable %_ptr_Function_int Function %22
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %71
-         %72 = OpLoad %v4float %gl_FragCoord
-         %75 = OpAccessChain %_ptr_Uniform_v2float %x_10 %uint_0
-         %76 = OpLoad %v2float %75
-         %77 = OpCompositeExtract %float %72 0
-         %78 = OpCompositeExtract %float %72 1
-         %79 = OpCompositeConstruct %v2float %77 %78
-         %80 = OpFDiv %v2float %79 %76
-               OpStore %lin %80
-         %81 = OpLoad %v2float %lin
-         %85 = OpVectorTimesScalar %v2float %81 %float_8
-         %82 = OpExtInst %v2float %83 Floor %85
-               OpStore %lin %82
-         %87 = OpAccessChain %_ptr_Function_float %lin %uint_0
-         %88 = OpLoad %float %87
-         %90 = OpAccessChain %_ptr_Function_float %lin %uint_1
-         %91 = OpLoad %float %90
-         %92 = OpConvertFToS %int %88
-         %94 = OpIMul %int %92 %int_8
-         %95 = OpConvertFToS %int %91
-         %96 = OpIAdd %int %94 %95
-               OpStore %v_1 %96
-         %97 = OpLoad %int %v_1
-               OpStore %param %97
-         %98 = OpFunctionCall %int %collatz_i1_ %param
-               OpStore %indexable %118
-        %120 = OpSMod %int %98 %int_16
-        %122 = OpAccessChain %_ptr_Function_v4float %indexable %120
-        %123 = OpLoad %v4float %122
-               OpStore %x_GLF_color %123
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %124
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %128 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %129 = OpFunctionCall %void %main_1
-        %130 = OpLoad %v4float %x_GLF_color
-        %131 = OpCompositeConstruct %main_out %130
-               OpReturnValue %131
-               OpFunctionEnd
-       %main = OpFunction %void None %57
-        %133 = OpLabel
-        %135 = OpLoad %v4float %gl_FragCoord_param_1
-        %134 = OpFunctionCall %main_out %main_inner %135
-        %136 = OpCompositeExtract %v4float %134 0
-               OpStore %x_GLF_color_1_1 %136
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.wgsl
deleted file mode 100644
index 10f5505..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,68 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn collatz_i1_(v : ptr<function, i32>) -> i32 {
-  var count : i32;
-  count = 0;
-  loop {
-    let x_89 : i32 = *(v);
-    if ((x_89 > 1)) {
-    } else {
-      break;
-    }
-    let x_92 : i32 = *(v);
-    if (((x_92 & 1) == 1)) {
-      let x_98 : i32 = *(v);
-      *(v) = ((3 * x_98) + 1);
-    } else {
-      let x_101 : i32 = *(v);
-      *(v) = (x_101 / 2);
-    }
-    let x_103 : i32 = count;
-    count = (x_103 + 1);
-  }
-  let x_105 : i32 = count;
-  return x_105;
-}
-
-fn main_1() {
-  var lin : vec2<f32>;
-  var v_1 : i32;
-  var param : i32;
-  var indexable : array<vec4<f32>, 16>;
-  let x_63 : vec4<f32> = gl_FragCoord;
-  let x_66 : vec2<f32> = x_10.resolution;
-  lin = (vec2<f32>(x_63.x, x_63.y) / x_66);
-  let x_68 : vec2<f32> = lin;
-  lin = floor((x_68 * 8.0));
-  let x_72 : f32 = lin.x;
-  let x_76 : f32 = lin.y;
-  v_1 = ((i32(x_72) * 8) + i32(x_76));
-  let x_79 : i32 = v_1;
-  param = x_79;
-  let x_80 : i32 = collatz_i1_(&(param));
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_83 : vec4<f32> = indexable[(x_80 % 16)];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.hlsl
deleted file mode 100644
index dcab7e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int collatz_i1_(inout int v) {
-  int count = 0;
-  count = 0;
-  while (true) {
-    const int x_89 = v;
-    if ((x_89 > 1)) {
-    } else {
-      break;
-    }
-    const int x_92 = v;
-    if (((x_92 & 1) == 1)) {
-      const int x_98 = v;
-      v = ((3 * x_98) + 1);
-    } else {
-      const int x_101 = v;
-      v = (x_101 / 2);
-    }
-    count = (count + 1);
-  }
-  return count;
-}
-
-void main_1() {
-  float2 lin = float2(0.0f, 0.0f);
-  int v_1 = 0;
-  int param = 0;
-  float4 indexable[16] = (float4[16])0;
-  const float4 x_63 = gl_FragCoord;
-  const float2 x_66 = asfloat(x_10[0].xy);
-  lin = (float2(x_63.x, x_63.y) / x_66);
-  lin = floor((lin * 8.0f));
-  const float x_72 = lin.x;
-  const float x_76 = lin.y;
-  v_1 = ((int(x_72) * 8) + int(x_76));
-  param = v_1;
-  const int x_80 = collatz_i1_(param);
-  const float4 tint_symbol_4[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-  indexable = tint_symbol_4;
-  const float4 x_83 = indexable[(x_80 % 16)];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.msl
deleted file mode 100644
index 2555b63..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.msl
+++ /dev/null
@@ -1,79 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int collatz_i1_(thread int* const v) {
-  int count = 0;
-  count = 0;
-  while (true) {
-    int const x_89 = *(v);
-    if ((x_89 > 1)) {
-    } else {
-      break;
-    }
-    int const x_92 = *(v);
-    if (((x_92 & 1) == 1)) {
-      int const x_98 = *(v);
-      *(v) = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(3) * as_type<uint>(x_98)))) + as_type<uint>(1)));
-    } else {
-      int const x_101 = *(v);
-      *(v) = (x_101 / 2);
-    }
-    int const x_103 = count;
-    count = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-  }
-  int const x_105 = count;
-  return x_105;
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float2 lin = 0.0f;
-  int v_1 = 0;
-  int param = 0;
-  tint_array_wrapper indexable = {};
-  float4 const x_63 = *(tint_symbol_4);
-  float2 const x_66 = x_10.resolution;
-  lin = (float2(x_63.x, x_63.y) / x_66);
-  float2 const x_68 = lin;
-  lin = floor((x_68 * 8.0f));
-  float const x_72 = lin.x;
-  float const x_76 = lin.y;
-  v_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_72)) * as_type<uint>(8)))) + as_type<uint>(int(x_76))));
-  int const x_79 = v_1;
-  param = x_79;
-  int const x_80 = collatz_i1_(&(param));
-  tint_array_wrapper const tint_symbol_2 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-  indexable = tint_symbol_2;
-  float4 const x_83 = indexable.arr[(x_80 % 16)];
-  *(tint_symbol_5) = x_83;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_10, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.spvasm
deleted file mode 100644
index 4742393..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,200 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 137
-; Schema: 0
-               OpCapability Shader
-         %83 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %collatz_i1_ "collatz_i1_"
-               OpName %v "v"
-               OpName %count "count"
-               OpName %main_1 "main_1"
-               OpName %lin "lin"
-               OpName %v_1 "v_1"
-               OpName %param "param"
-               OpName %indexable "indexable"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpTypeFunction %int %_ptr_Function_int
-         %22 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-      %int_2 = OpConstant %int 2
-       %void = OpTypeVoid
-         %57 = OpTypeFunction %void
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %63 = OpConstantNull %v2float
-       %uint = OpTypeInt 32 0
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-         %71 = OpConstantNull %_arr_v4float_uint_16
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_8 = OpConstant %float 8
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-      %int_8 = OpConstant %int 8
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-        %102 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-        %104 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %105 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %106 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %107 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %108 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %109 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %110 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %111 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %112 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %113 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %114 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %115 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %116 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %117 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %118 = OpConstantComposite %_arr_v4float_uint_16 %102 %104 %105 %106 %107 %108 %109 %110 %102 %111 %112 %113 %114 %115 %116 %117
-     %int_16 = OpConstant %int 16
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-        %124 = OpTypeFunction %main_out %v4float
-%collatz_i1_ = OpFunction %int None %15
-          %v = OpFunctionParameter %_ptr_Function_int
-         %20 = OpLabel
-      %count = OpVariable %_ptr_Function_int Function %22
-               OpStore %count %int_0
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %29 = OpLoad %int %v
-         %31 = OpSGreaterThan %bool %29 %int_1
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %35
-         %34 = OpLabel
-               OpBranch %33
-         %35 = OpLabel
-               OpBranch %25
-         %33 = OpLabel
-         %37 = OpLoad %int %v
-         %38 = OpBitwiseAnd %int %37 %int_1
-         %39 = OpIEqual %bool %38 %int_1
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %42
-         %41 = OpLabel
-         %44 = OpLoad %int %v
-         %47 = OpIMul %int %int_3 %44
-         %48 = OpIAdd %int %47 %int_1
-               OpStore %v %48
-               OpBranch %40
-         %42 = OpLabel
-         %50 = OpLoad %int %v
-         %53 = OpSDiv %int %50 %int_2
-               OpStore %v %53
-               OpBranch %40
-         %40 = OpLabel
-         %54 = OpLoad %int %count
-         %55 = OpIAdd %int %54 %int_1
-               OpStore %count %55
-               OpBranch %26
-         %26 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-         %56 = OpLoad %int %count
-               OpReturnValue %56
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %57
-         %60 = OpLabel
-        %lin = OpVariable %_ptr_Function_v2float Function %63
-        %v_1 = OpVariable %_ptr_Function_int Function %22
-      %param = OpVariable %_ptr_Function_int Function %22
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %71
-         %72 = OpLoad %v4float %gl_FragCoord
-         %75 = OpAccessChain %_ptr_Uniform_v2float %x_10 %uint_0
-         %76 = OpLoad %v2float %75
-         %77 = OpCompositeExtract %float %72 0
-         %78 = OpCompositeExtract %float %72 1
-         %79 = OpCompositeConstruct %v2float %77 %78
-         %80 = OpFDiv %v2float %79 %76
-               OpStore %lin %80
-         %81 = OpLoad %v2float %lin
-         %85 = OpVectorTimesScalar %v2float %81 %float_8
-         %82 = OpExtInst %v2float %83 Floor %85
-               OpStore %lin %82
-         %87 = OpAccessChain %_ptr_Function_float %lin %uint_0
-         %88 = OpLoad %float %87
-         %90 = OpAccessChain %_ptr_Function_float %lin %uint_1
-         %91 = OpLoad %float %90
-         %92 = OpConvertFToS %int %88
-         %94 = OpIMul %int %92 %int_8
-         %95 = OpConvertFToS %int %91
-         %96 = OpIAdd %int %94 %95
-               OpStore %v_1 %96
-         %97 = OpLoad %int %v_1
-               OpStore %param %97
-         %98 = OpFunctionCall %int %collatz_i1_ %param
-               OpStore %indexable %118
-        %120 = OpSMod %int %98 %int_16
-        %122 = OpAccessChain %_ptr_Function_v4float %indexable %120
-        %123 = OpLoad %v4float %122
-               OpStore %x_GLF_color %123
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %124
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %128 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %129 = OpFunctionCall %void %main_1
-        %130 = OpLoad %v4float %x_GLF_color
-        %131 = OpCompositeConstruct %main_out %130
-               OpReturnValue %131
-               OpFunctionEnd
-       %main = OpFunction %void None %57
-        %133 = OpLabel
-        %135 = OpLoad %v4float %gl_FragCoord_param_1
-        %134 = OpFunctionCall %main_out %main_inner %135
-        %136 = OpCompositeExtract %v4float %134 0
-               OpStore %x_GLF_color_1_1 %136
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.wgsl
deleted file mode 100644
index 10f5505..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,68 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn collatz_i1_(v : ptr<function, i32>) -> i32 {
-  var count : i32;
-  count = 0;
-  loop {
-    let x_89 : i32 = *(v);
-    if ((x_89 > 1)) {
-    } else {
-      break;
-    }
-    let x_92 : i32 = *(v);
-    if (((x_92 & 1) == 1)) {
-      let x_98 : i32 = *(v);
-      *(v) = ((3 * x_98) + 1);
-    } else {
-      let x_101 : i32 = *(v);
-      *(v) = (x_101 / 2);
-    }
-    let x_103 : i32 = count;
-    count = (x_103 + 1);
-  }
-  let x_105 : i32 = count;
-  return x_105;
-}
-
-fn main_1() {
-  var lin : vec2<f32>;
-  var v_1 : i32;
-  var param : i32;
-  var indexable : array<vec4<f32>, 16>;
-  let x_63 : vec4<f32> = gl_FragCoord;
-  let x_66 : vec2<f32> = x_10.resolution;
-  lin = (vec2<f32>(x_63.x, x_63.y) / x_66);
-  let x_68 : vec2<f32> = lin;
-  lin = floor((x_68 * 8.0));
-  let x_72 : f32 = lin.x;
-  let x_76 : f32 = lin.y;
-  v_1 = ((i32(x_72) * 8) + i32(x_76));
-  let x_79 : i32 = v_1;
-  param = x_79;
-  let x_80 : i32 = collatz_i1_(&(param));
-  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-  let x_83 : vec4<f32> = indexable[(x_80 % 16)];
-  x_GLF_color = x_83;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.hlsl
deleted file mode 100644
index bd31e20..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,225 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float x_54 = 0.0f;
-  float x_58 = 0.0f;
-  float x_59 = 0.0f;
-  float x_91 = 0.0f;
-  float x_92 = 0.0f;
-  float x_135 = 0.0f;
-  float x_136 = 0.0f;
-  float x_58_phi = 0.0f;
-  int x_61_phi = 0;
-  float x_91_phi = 0.0f;
-  float x_92_phi = 0.0f;
-  bool x_93_phi = false;
-  float x_95_phi = 0.0f;
-  float x_139_phi = 0.0f;
-  int x_146_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_50 = asfloat(x_9[0].x);
-  const float x_52 = round((x_50 * 0.125f));
-  x_54 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_58_phi = -0.5f;
-      x_61_phi = 1;
-      while (true) {
-        float x_71 = 0.0f;
-        float x_79 = 0.0f;
-        int x_62 = 0;
-        float x_59_phi = 0.0f;
-        x_58 = x_58_phi;
-        const int x_61 = x_61_phi;
-        x_91_phi = 0.0f;
-        x_92_phi = x_58;
-        x_93_phi = false;
-        if ((x_61 < 800)) {
-        } else {
-          break;
-        }
-        float x_78 = 0.0f;
-        float x_79_phi = 0.0f;
-        if (((x_61 % 32) == 0)) {
-          x_71 = (x_58 + 0.400000006f);
-          x_59_phi = x_71;
-        } else {
-          x_79_phi = x_58;
-          if (((float(x_61) - (round(x_52) * floor((float(x_61) / round(x_52))))) <= 0.01f)) {
-            x_78 = (x_58 + 100.0f);
-            x_79_phi = x_78;
-          }
-          x_79 = x_79_phi;
-          const float x_81 = asfloat(x_6[0].x);
-          const float x_83 = asfloat(x_6[0].y);
-          if ((x_81 > x_83)) {
-            discard;
-          }
-          x_59_phi = x_79;
-        }
-        x_59 = x_59_phi;
-        if ((float(x_61) >= x_54)) {
-          x_91_phi = x_59;
-          x_92_phi = x_59;
-          x_93_phi = true;
-          break;
-        }
-        {
-          x_62 = (x_61 + 1);
-          x_58_phi = x_59;
-          x_61_phi = x_62;
-        }
-      }
-      x_91 = x_91_phi;
-      x_92 = x_92_phi;
-      const bool x_93 = x_93_phi;
-      x_95_phi = x_91;
-      if (x_93) {
-        break;
-      }
-      x_95_phi = x_92;
-      break;
-    }
-  }
-  float x_98 = 0.0f;
-  float x_102 = 0.0f;
-  float x_103 = 0.0f;
-  float x_102_phi = 0.0f;
-  int x_105_phi = 0;
-  float x_135_phi = 0.0f;
-  float x_136_phi = 0.0f;
-  bool x_137_phi = false;
-  const float x_95 = x_95_phi;
-  c.x = x_95;
-  x_98 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_102_phi = -0.5f;
-      x_105_phi = 1;
-      while (true) {
-        float x_115 = 0.0f;
-        float x_123 = 0.0f;
-        int x_106 = 0;
-        float x_103_phi = 0.0f;
-        x_102 = x_102_phi;
-        const int x_105 = x_105_phi;
-        x_135_phi = 0.0f;
-        x_136_phi = x_102;
-        x_137_phi = false;
-        if ((x_105 < 800)) {
-        } else {
-          break;
-        }
-        float x_122 = 0.0f;
-        float x_123_phi = 0.0f;
-        if (((x_105 % 32) == 0)) {
-          x_115 = (x_102 + 0.400000006f);
-          x_103_phi = x_115;
-        } else {
-          x_123_phi = x_102;
-          if (((float(x_105) - (round(x_52) * floor((float(x_105) / round(x_52))))) <= 0.01f)) {
-            x_122 = (x_102 + 100.0f);
-            x_123_phi = x_122;
-          }
-          x_123 = x_123_phi;
-          const float x_125 = asfloat(x_6[0].x);
-          const float x_127 = asfloat(x_6[0].y);
-          if ((x_125 > x_127)) {
-            discard;
-          }
-          x_103_phi = x_123;
-        }
-        x_103 = x_103_phi;
-        if ((float(x_105) >= x_98)) {
-          x_135_phi = x_103;
-          x_136_phi = x_103;
-          x_137_phi = true;
-          break;
-        }
-        {
-          x_106 = (x_105 + 1);
-          x_102_phi = x_103;
-          x_105_phi = x_106;
-        }
-      }
-      x_135 = x_135_phi;
-      x_136 = x_136_phi;
-      const bool x_137 = x_137_phi;
-      x_139_phi = x_135;
-      if (x_137) {
-        break;
-      }
-      x_139_phi = x_136;
-      break;
-    }
-  }
-  const float x_139 = x_139_phi;
-  c.y = x_139;
-  const float x_141 = c.x;
-  const float x_142 = c.y;
-  c.z = (x_141 + x_142);
-  x_146_phi = 0;
-  while (true) {
-    int x_147 = 0;
-    const int x_146 = x_146_phi;
-    if ((x_146 < 3)) {
-    } else {
-      break;
-    }
-    const int x_152_save = x_146;
-    const float x_153 = c[x_152_save];
-    if ((x_153 >= 1.0f)) {
-      const float x_157 = c[x_152_save];
-      const float x_158 = c[x_152_save];
-      set_float3(c, x_152_save, (x_157 * x_158));
-      const float x_161 = asfloat(x_6[0].x);
-      const float x_163 = asfloat(x_6[0].y);
-      if ((x_161 > x_163)) {
-        discard;
-      }
-    }
-    {
-      x_147 = (x_146 + 1);
-      x_146_phi = x_147;
-    }
-  }
-  const float3 x_169 = normalize(abs(c));
-  x_GLF_color = float4(x_169.x, x_169.y, x_169.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.msl
deleted file mode 100755
index 1465f73..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.msl
+++ /dev/null
@@ -1,222 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, constant buf1& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float x_54 = 0.0f;
-  float x_58 = 0.0f;
-  float x_59 = 0.0f;
-  float x_91 = 0.0f;
-  float x_92 = 0.0f;
-  float x_135 = 0.0f;
-  float x_136 = 0.0f;
-  float x_58_phi = 0.0f;
-  int x_61_phi = 0;
-  float x_91_phi = 0.0f;
-  float x_92_phi = 0.0f;
-  bool x_93_phi = false;
-  float x_95_phi = 0.0f;
-  float x_139_phi = 0.0f;
-  int x_146_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_50 = x_9.resolution.x;
-  float const x_52 = rint((x_50 * 0.125f));
-  x_54 = (*(tint_symbol_3)).x;
-  switch(0u) {
-    default: {
-      x_58_phi = -0.5f;
-      x_61_phi = 1;
-      while (true) {
-        float x_71 = 0.0f;
-        float x_79 = 0.0f;
-        int x_62 = 0;
-        float x_59_phi = 0.0f;
-        x_58 = x_58_phi;
-        int const x_61 = x_61_phi;
-        x_91_phi = 0.0f;
-        x_92_phi = x_58;
-        x_93_phi = false;
-        if ((x_61 < 800)) {
-        } else {
-          break;
-        }
-        float x_78 = 0.0f;
-        float x_79_phi = 0.0f;
-        if (((x_61 % 32) == 0)) {
-          x_71 = (x_58 + 0.400000006f);
-          x_59_phi = x_71;
-        } else {
-          x_79_phi = x_58;
-          if (((float(x_61) - (rint(x_52) * floor((float(x_61) / rint(x_52))))) <= 0.01f)) {
-            x_78 = (x_58 + 100.0f);
-            x_79_phi = x_78;
-          }
-          x_79 = x_79_phi;
-          float const x_81 = x_6.injectionSwitch.x;
-          float const x_83 = x_6.injectionSwitch.y;
-          if ((x_81 > x_83)) {
-            discard_fragment();
-          }
-          x_59_phi = x_79;
-        }
-        x_59 = x_59_phi;
-        if ((float(x_61) >= x_54)) {
-          x_91_phi = x_59;
-          x_92_phi = x_59;
-          x_93_phi = true;
-          break;
-        }
-        {
-          x_62 = as_type<int>((as_type<uint>(x_61) + as_type<uint>(1)));
-          x_58_phi = x_59;
-          x_61_phi = x_62;
-        }
-      }
-      x_91 = x_91_phi;
-      x_92 = x_92_phi;
-      bool const x_93 = x_93_phi;
-      x_95_phi = x_91;
-      if (x_93) {
-        break;
-      }
-      x_95_phi = x_92;
-      break;
-    }
-  }
-  float x_98 = 0.0f;
-  float x_102 = 0.0f;
-  float x_103 = 0.0f;
-  float x_102_phi = 0.0f;
-  int x_105_phi = 0;
-  float x_135_phi = 0.0f;
-  float x_136_phi = 0.0f;
-  bool x_137_phi = false;
-  float const x_95 = x_95_phi;
-  c.x = x_95;
-  x_98 = (*(tint_symbol_3)).y;
-  switch(0u) {
-    default: {
-      x_102_phi = -0.5f;
-      x_105_phi = 1;
-      while (true) {
-        float x_115 = 0.0f;
-        float x_123 = 0.0f;
-        int x_106 = 0;
-        float x_103_phi = 0.0f;
-        x_102 = x_102_phi;
-        int const x_105 = x_105_phi;
-        x_135_phi = 0.0f;
-        x_136_phi = x_102;
-        x_137_phi = false;
-        if ((x_105 < 800)) {
-        } else {
-          break;
-        }
-        float x_122 = 0.0f;
-        float x_123_phi = 0.0f;
-        if (((x_105 % 32) == 0)) {
-          x_115 = (x_102 + 0.400000006f);
-          x_103_phi = x_115;
-        } else {
-          x_123_phi = x_102;
-          if (((float(x_105) - (rint(x_52) * floor((float(x_105) / rint(x_52))))) <= 0.01f)) {
-            x_122 = (x_102 + 100.0f);
-            x_123_phi = x_122;
-          }
-          x_123 = x_123_phi;
-          float const x_125 = x_6.injectionSwitch.x;
-          float const x_127 = x_6.injectionSwitch.y;
-          if ((x_125 > x_127)) {
-            discard_fragment();
-          }
-          x_103_phi = x_123;
-        }
-        x_103 = x_103_phi;
-        if ((float(x_105) >= x_98)) {
-          x_135_phi = x_103;
-          x_136_phi = x_103;
-          x_137_phi = true;
-          break;
-        }
-        {
-          x_106 = as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)));
-          x_102_phi = x_103;
-          x_105_phi = x_106;
-        }
-      }
-      x_135 = x_135_phi;
-      x_136 = x_136_phi;
-      bool const x_137 = x_137_phi;
-      x_139_phi = x_135;
-      if (x_137) {
-        break;
-      }
-      x_139_phi = x_136;
-      break;
-    }
-  }
-  float const x_139 = x_139_phi;
-  c.y = x_139;
-  float const x_141 = c.x;
-  float const x_142 = c.y;
-  c.z = (x_141 + x_142);
-  x_146_phi = 0;
-  while (true) {
-    int x_147 = 0;
-    int const x_146 = x_146_phi;
-    if ((x_146 < 3)) {
-    } else {
-      break;
-    }
-    int const x_152_save = x_146;
-    float const x_153 = c[x_152_save];
-    if ((x_153 >= 1.0f)) {
-      float const x_157 = c[x_152_save];
-      float const x_158 = c[x_152_save];
-      c[x_152_save] = (x_157 * x_158);
-      float const x_161 = x_6.injectionSwitch.x;
-      float const x_163 = x_6.injectionSwitch.y;
-      if ((x_161 > x_163)) {
-        discard_fragment();
-      }
-    }
-    {
-      x_147 = as_type<int>((as_type<uint>(x_146) + as_type<uint>(1)));
-      x_146_phi = x_147;
-    }
-  }
-  float3 const x_167 = c;
-  float3 const x_169 = normalize(fabs(x_167));
-  *(tint_symbol_4) = float4(x_169.x, x_169.y, x_169.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, constant buf1& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]], constant buf1& x_6 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.spvasm
deleted file mode 100644
index f86cae1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,500 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 288
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_9 "x_9"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %x_54 "x_54"
-               OpName %x_58 "x_58"
-               OpName %x_59 "x_59"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_135 "x_135"
-               OpName %x_136 "x_136"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_61_phi "x_61_phi"
-               OpName %x_91_phi "x_91_phi"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_139_phi "x_139_phi"
-               OpName %x_146_phi "x_146_phi"
-               OpName %x_71 "x_71"
-               OpName %x_79 "x_79"
-               OpName %x_62 "x_62"
-               OpName %x_59_phi "x_59_phi"
-               OpName %x_78 "x_78"
-               OpName %x_79_phi "x_79_phi"
-               OpName %x_98 "x_98"
-               OpName %x_102 "x_102"
-               OpName %x_103 "x_103"
-               OpName %x_102_phi "x_102_phi"
-               OpName %x_105_phi "x_105_phi"
-               OpName %x_135_phi "x_135_phi"
-               OpName %x_136_phi "x_136_phi"
-               OpName %x_137_phi "x_137_phi"
-               OpName %x_115 "x_115"
-               OpName %x_123 "x_123"
-               OpName %x_106 "x_106"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_122 "x_122"
-               OpName %x_123_phi "x_123_phi"
-               OpName %x_147 "x_147"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %25 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %39 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %45 = OpConstantNull %bool
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %52 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-    %int_800 = OpConstant %int 800
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-     %uint_1 = OpConstant %uint 1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %275 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %25
-       %x_54 = OpVariable %_ptr_Function_float Function %28
-       %x_58 = OpVariable %_ptr_Function_float Function %28
-       %x_59 = OpVariable %_ptr_Function_float Function %28
-       %x_91 = OpVariable %_ptr_Function_float Function %28
-       %x_92 = OpVariable %_ptr_Function_float Function %28
-      %x_135 = OpVariable %_ptr_Function_float Function %28
-      %x_136 = OpVariable %_ptr_Function_float Function %28
-   %x_58_phi = OpVariable %_ptr_Function_float Function %28
-   %x_61_phi = OpVariable %_ptr_Function_int Function %39
-   %x_91_phi = OpVariable %_ptr_Function_float Function %28
-   %x_92_phi = OpVariable %_ptr_Function_float Function %28
-   %x_93_phi = OpVariable %_ptr_Function_bool Function %45
-   %x_95_phi = OpVariable %_ptr_Function_float Function %28
-  %x_139_phi = OpVariable %_ptr_Function_float Function %28
-  %x_146_phi = OpVariable %_ptr_Function_int Function %39
-       %x_71 = OpVariable %_ptr_Function_float Function %28
-       %x_79 = OpVariable %_ptr_Function_float Function %28
-       %x_62 = OpVariable %_ptr_Function_int Function %39
-   %x_59_phi = OpVariable %_ptr_Function_float Function %28
-       %x_78 = OpVariable %_ptr_Function_float Function %28
-   %x_79_phi = OpVariable %_ptr_Function_float Function %28
-       %x_98 = OpVariable %_ptr_Function_float Function %28
-      %x_102 = OpVariable %_ptr_Function_float Function %28
-      %x_103 = OpVariable %_ptr_Function_float Function %28
-  %x_102_phi = OpVariable %_ptr_Function_float Function %28
-  %x_105_phi = OpVariable %_ptr_Function_int Function %39
-  %x_135_phi = OpVariable %_ptr_Function_float Function %28
-  %x_136_phi = OpVariable %_ptr_Function_float Function %28
-  %x_137_phi = OpVariable %_ptr_Function_bool Function %45
-      %x_115 = OpVariable %_ptr_Function_float Function %28
-      %x_123 = OpVariable %_ptr_Function_float Function %28
-      %x_106 = OpVariable %_ptr_Function_int Function %39
-  %x_103_phi = OpVariable %_ptr_Function_float Function %28
-      %x_122 = OpVariable %_ptr_Function_float Function %28
-  %x_123_phi = OpVariable %_ptr_Function_float Function %28
-      %x_147 = OpVariable %_ptr_Function_int Function %39
-               OpStore %c %52
-         %56 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %57 = OpLoad %float %56
-         %61 = OpFMul %float %57 %float_0_125
-         %58 = OpExtInst %float %59 RoundEven %61
-         %63 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %64 = OpLoad %float %63
-               OpStore %x_54 %64
-               OpSelectionMerge %65 None
-               OpSwitch %uint_0 %66
-         %66 = OpLabel
-               OpStore %x_58_phi %float_n0_5
-               OpStore %x_61_phi %int_1
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %77 = OpLoad %float %x_58_phi
-               OpStore %x_58 %77
-         %78 = OpLoad %int %x_61_phi
-               OpStore %x_91_phi %float_0
-         %80 = OpLoad %float %x_58
-               OpStore %x_92_phi %80
-               OpStore %x_93_phi %false
-         %83 = OpSLessThan %bool %78 %int_800
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %70
-         %84 = OpLabel
-         %90 = OpSMod %int %78 %int_32
-         %92 = OpIEqual %bool %90 %int_0
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-         %96 = OpLoad %float %x_58
-         %98 = OpFAdd %float %96 %float_0_400000006
-               OpStore %x_71 %98
-         %99 = OpLoad %float %x_71
-               OpStore %x_59_phi %99
-               OpBranch %93
-         %95 = OpLabel
-        %100 = OpLoad %float %x_58
-               OpStore %x_79_phi %100
-        %101 = OpConvertSToF %float %78
-        %102 = OpExtInst %float %59 RoundEven %58
-        %104 = OpConvertSToF %float %78
-        %105 = OpExtInst %float %59 RoundEven %58
-        %106 = OpFDiv %float %104 %105
-        %103 = OpExtInst %float %59 Floor %106
-        %107 = OpFMul %float %102 %103
-        %108 = OpFSub %float %101 %107
-        %110 = OpFOrdLessThanEqual %bool %108 %float_0_00999999978
-               OpSelectionMerge %111 None
-               OpBranchConditional %110 %112 %111
-        %112 = OpLabel
-        %113 = OpLoad %float %x_58
-        %115 = OpFAdd %float %113 %float_100
-               OpStore %x_78 %115
-        %116 = OpLoad %float %x_78
-               OpStore %x_79_phi %116
-               OpBranch %111
-        %111 = OpLabel
-        %117 = OpLoad %float %x_79_phi
-               OpStore %x_79 %117
-        %118 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %119 = OpLoad %float %118
-        %121 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %122 = OpLoad %float %121
-        %123 = OpFOrdGreaterThan %bool %119 %122
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %124
-        %125 = OpLabel
-               OpKill
-        %124 = OpLabel
-        %126 = OpLoad %float %x_79
-               OpStore %x_59_phi %126
-               OpBranch %93
-         %93 = OpLabel
-        %127 = OpLoad %float %x_59_phi
-               OpStore %x_59 %127
-        %128 = OpConvertSToF %float %78
-        %129 = OpLoad %float %x_54
-        %130 = OpFOrdGreaterThanEqual %bool %128 %129
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %131
-        %132 = OpLabel
-        %133 = OpLoad %float %x_59
-               OpStore %x_91_phi %133
-        %134 = OpLoad %float %x_59
-               OpStore %x_92_phi %134
-               OpStore %x_93_phi %true
-               OpBranch %70
-        %131 = OpLabel
-               OpBranch %71
-         %71 = OpLabel
-        %136 = OpIAdd %int %78 %int_1
-               OpStore %x_62 %136
-        %137 = OpLoad %float %x_59
-               OpStore %x_58_phi %137
-        %138 = OpLoad %int %x_62
-               OpStore %x_61_phi %138
-               OpBranch %69
-         %70 = OpLabel
-        %139 = OpLoad %float %x_91_phi
-               OpStore %x_91 %139
-        %140 = OpLoad %float %x_92_phi
-               OpStore %x_92 %140
-        %141 = OpLoad %bool %x_93_phi
-        %142 = OpLoad %float %x_91
-               OpStore %x_95_phi %142
-               OpSelectionMerge %143 None
-               OpBranchConditional %141 %144 %143
-        %144 = OpLabel
-               OpBranch %65
-        %143 = OpLabel
-        %145 = OpLoad %float %x_92
-               OpStore %x_95_phi %145
-               OpBranch %65
-         %65 = OpLabel
-        %154 = OpLoad %float %x_95_phi
-        %155 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %155 %154
-        %156 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %157 = OpLoad %float %156
-               OpStore %x_98 %157
-               OpSelectionMerge %158 None
-               OpSwitch %uint_0 %159
-        %159 = OpLabel
-               OpStore %x_102_phi %float_n0_5
-               OpStore %x_105_phi %int_1
-               OpBranch %160
-        %160 = OpLabel
-               OpLoopMerge %161 %162 None
-               OpBranch %163
-        %163 = OpLabel
-        %168 = OpLoad %float %x_102_phi
-               OpStore %x_102 %168
-        %169 = OpLoad %int %x_105_phi
-               OpStore %x_135_phi %float_0
-        %170 = OpLoad %float %x_102
-               OpStore %x_136_phi %170
-               OpStore %x_137_phi %false
-        %171 = OpSLessThan %bool %169 %int_800
-               OpSelectionMerge %172 None
-               OpBranchConditional %171 %173 %174
-        %173 = OpLabel
-               OpBranch %172
-        %174 = OpLabel
-               OpBranch %161
-        %172 = OpLabel
-        %177 = OpSMod %int %169 %int_32
-        %178 = OpIEqual %bool %177 %int_0
-               OpSelectionMerge %179 None
-               OpBranchConditional %178 %180 %181
-        %180 = OpLabel
-        %182 = OpLoad %float %x_102
-        %183 = OpFAdd %float %182 %float_0_400000006
-               OpStore %x_115 %183
-        %184 = OpLoad %float %x_115
-               OpStore %x_103_phi %184
-               OpBranch %179
-        %181 = OpLabel
-        %185 = OpLoad %float %x_102
-               OpStore %x_123_phi %185
-        %186 = OpConvertSToF %float %169
-        %187 = OpExtInst %float %59 RoundEven %58
-        %189 = OpConvertSToF %float %169
-        %190 = OpExtInst %float %59 RoundEven %58
-        %191 = OpFDiv %float %189 %190
-        %188 = OpExtInst %float %59 Floor %191
-        %192 = OpFMul %float %187 %188
-        %193 = OpFSub %float %186 %192
-        %194 = OpFOrdLessThanEqual %bool %193 %float_0_00999999978
-               OpSelectionMerge %195 None
-               OpBranchConditional %194 %196 %195
-        %196 = OpLabel
-        %197 = OpLoad %float %x_102
-        %198 = OpFAdd %float %197 %float_100
-               OpStore %x_122 %198
-        %199 = OpLoad %float %x_122
-               OpStore %x_123_phi %199
-               OpBranch %195
-        %195 = OpLabel
-        %200 = OpLoad %float %x_123_phi
-               OpStore %x_123 %200
-        %201 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %202 = OpLoad %float %201
-        %203 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %204 = OpLoad %float %203
-        %205 = OpFOrdGreaterThan %bool %202 %204
-               OpSelectionMerge %206 None
-               OpBranchConditional %205 %207 %206
-        %207 = OpLabel
-               OpKill
-        %206 = OpLabel
-        %208 = OpLoad %float %x_123
-               OpStore %x_103_phi %208
-               OpBranch %179
-        %179 = OpLabel
-        %209 = OpLoad %float %x_103_phi
-               OpStore %x_103 %209
-        %210 = OpConvertSToF %float %169
-        %211 = OpLoad %float %x_98
-        %212 = OpFOrdGreaterThanEqual %bool %210 %211
-               OpSelectionMerge %213 None
-               OpBranchConditional %212 %214 %213
-        %214 = OpLabel
-        %215 = OpLoad %float %x_103
-               OpStore %x_135_phi %215
-        %216 = OpLoad %float %x_103
-               OpStore %x_136_phi %216
-               OpStore %x_137_phi %true
-               OpBranch %161
-        %213 = OpLabel
-               OpBranch %162
-        %162 = OpLabel
-        %217 = OpIAdd %int %169 %int_1
-               OpStore %x_106 %217
-        %218 = OpLoad %float %x_103
-               OpStore %x_102_phi %218
-        %219 = OpLoad %int %x_106
-               OpStore %x_105_phi %219
-               OpBranch %160
-        %161 = OpLabel
-        %220 = OpLoad %float %x_135_phi
-               OpStore %x_135 %220
-        %221 = OpLoad %float %x_136_phi
-               OpStore %x_136 %221
-        %222 = OpLoad %bool %x_137_phi
-        %223 = OpLoad %float %x_135
-               OpStore %x_139_phi %223
-               OpSelectionMerge %224 None
-               OpBranchConditional %222 %225 %224
-        %225 = OpLabel
-               OpBranch %158
-        %224 = OpLabel
-        %226 = OpLoad %float %x_136
-               OpStore %x_139_phi %226
-               OpBranch %158
-        %158 = OpLabel
-        %227 = OpLoad %float %x_139_phi
-        %228 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %228 %227
-        %229 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %230 = OpLoad %float %229
-        %231 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %232 = OpLoad %float %231
-        %234 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %235 = OpFAdd %float %230 %232
-               OpStore %234 %235
-               OpStore %x_146_phi %int_0
-               OpBranch %236
-        %236 = OpLabel
-               OpLoopMerge %237 %238 None
-               OpBranch %239
-        %239 = OpLabel
-        %241 = OpLoad %int %x_146_phi
-        %243 = OpSLessThan %bool %241 %int_3
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %246
-        %245 = OpLabel
-               OpBranch %244
-        %246 = OpLabel
-               OpBranch %237
-        %244 = OpLabel
-        %247 = OpAccessChain %_ptr_Function_float %c %241
-        %248 = OpLoad %float %247
-        %250 = OpFOrdGreaterThanEqual %bool %248 %float_1
-               OpSelectionMerge %251 None
-               OpBranchConditional %250 %252 %251
-        %252 = OpLabel
-        %253 = OpAccessChain %_ptr_Function_float %c %241
-        %254 = OpLoad %float %253
-        %255 = OpAccessChain %_ptr_Function_float %c %241
-        %256 = OpLoad %float %255
-        %257 = OpAccessChain %_ptr_Function_float %c %241
-        %258 = OpFMul %float %254 %256
-               OpStore %257 %258
-        %259 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %260 = OpLoad %float %259
-        %261 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %262 = OpLoad %float %261
-        %263 = OpFOrdGreaterThan %bool %260 %262
-               OpSelectionMerge %264 None
-               OpBranchConditional %263 %265 %264
-        %265 = OpLabel
-               OpKill
-        %264 = OpLabel
-               OpBranch %251
-        %251 = OpLabel
-               OpBranch %238
-        %238 = OpLabel
-        %266 = OpIAdd %int %241 %int_1
-               OpStore %x_147 %266
-        %267 = OpLoad %int %x_147
-               OpStore %x_146_phi %267
-               OpBranch %236
-        %237 = OpLabel
-        %268 = OpLoad %v3float %c
-        %270 = OpExtInst %v3float %59 FAbs %268
-        %269 = OpExtInst %v3float %59 Normalize %270
-        %271 = OpCompositeExtract %float %269 0
-        %272 = OpCompositeExtract %float %269 1
-        %273 = OpCompositeExtract %float %269 2
-        %274 = OpCompositeConstruct %v4float %271 %272 %273 %float_1
-               OpStore %x_GLF_color %274
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %275
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %279 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %280 = OpFunctionCall %void %main_1
-        %281 = OpLoad %v4float %x_GLF_color
-        %282 = OpCompositeConstruct %main_out %281
-               OpReturnValue %282
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %284 = OpLabel
-        %286 = OpLoad %v4float %gl_FragCoord_param_1
-        %285 = OpFunctionCall %main_out %main_inner %286
-        %287 = OpCompositeExtract %v4float %285 0
-               OpStore %x_GLF_color_1_1 %287
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.wgsl
deleted file mode 100644
index e8c696d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,222 +0,0 @@
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec3<f32>;
-  var x_54 : f32;
-  var x_58 : f32;
-  var x_59 : f32;
-  var x_91 : f32;
-  var x_92 : f32;
-  var x_135 : f32;
-  var x_136 : f32;
-  var x_58_phi : f32;
-  var x_61_phi : i32;
-  var x_91_phi : f32;
-  var x_92_phi : f32;
-  var x_93_phi : bool;
-  var x_95_phi : f32;
-  var x_139_phi : f32;
-  var x_146_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_50 : f32 = x_9.resolution.x;
-  let x_52 : f32 = round((x_50 * 0.125));
-  x_54 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_58_phi = -0.5;
-      x_61_phi = 1;
-      loop {
-        var x_71 : f32;
-        var x_79 : f32;
-        var x_62 : i32;
-        var x_59_phi : f32;
-        x_58 = x_58_phi;
-        let x_61 : i32 = x_61_phi;
-        x_91_phi = 0.0;
-        x_92_phi = x_58;
-        x_93_phi = false;
-        if ((x_61 < 800)) {
-        } else {
-          break;
-        }
-        var x_78 : f32;
-        var x_79_phi : f32;
-        if (((x_61 % 32) == 0)) {
-          x_71 = (x_58 + 0.400000006);
-          x_59_phi = x_71;
-        } else {
-          x_79_phi = x_58;
-          if (((f32(x_61) - (round(x_52) * floor((f32(x_61) / round(x_52))))) <= 0.01)) {
-            x_78 = (x_58 + 100.0);
-            x_79_phi = x_78;
-          }
-          x_79 = x_79_phi;
-          let x_81 : f32 = x_6.injectionSwitch.x;
-          let x_83 : f32 = x_6.injectionSwitch.y;
-          if ((x_81 > x_83)) {
-            discard;
-          }
-          x_59_phi = x_79;
-        }
-        x_59 = x_59_phi;
-        if ((f32(x_61) >= x_54)) {
-          x_91_phi = x_59;
-          x_92_phi = x_59;
-          x_93_phi = true;
-          break;
-        }
-
-        continuing {
-          x_62 = (x_61 + 1);
-          x_58_phi = x_59;
-          x_61_phi = x_62;
-        }
-      }
-      x_91 = x_91_phi;
-      x_92 = x_92_phi;
-      let x_93 : bool = x_93_phi;
-      x_95_phi = x_91;
-      if (x_93) {
-        break;
-      }
-      x_95_phi = x_92;
-    }
-  }
-  var x_98 : f32;
-  var x_102 : f32;
-  var x_103 : f32;
-  var x_102_phi : f32;
-  var x_105_phi : i32;
-  var x_135_phi : f32;
-  var x_136_phi : f32;
-  var x_137_phi : bool;
-  let x_95 : f32 = x_95_phi;
-  let x_96 : ptr<function, f32> = &(c.x);
-  *(x_96) = x_95;
-  x_98 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_102_phi = -0.5;
-      x_105_phi = 1;
-      loop {
-        var x_115 : f32;
-        var x_123 : f32;
-        var x_106 : i32;
-        var x_103_phi : f32;
-        x_102 = x_102_phi;
-        let x_105 : i32 = x_105_phi;
-        x_135_phi = 0.0;
-        x_136_phi = x_102;
-        x_137_phi = false;
-        if ((x_105 < 800)) {
-        } else {
-          break;
-        }
-        var x_122 : f32;
-        var x_123_phi : f32;
-        if (((x_105 % 32) == 0)) {
-          x_115 = (x_102 + 0.400000006);
-          x_103_phi = x_115;
-        } else {
-          x_123_phi = x_102;
-          if (((f32(x_105) - (round(x_52) * floor((f32(x_105) / round(x_52))))) <= 0.01)) {
-            x_122 = (x_102 + 100.0);
-            x_123_phi = x_122;
-          }
-          x_123 = x_123_phi;
-          let x_125 : f32 = x_6.injectionSwitch.x;
-          let x_127 : f32 = x_6.injectionSwitch.y;
-          if ((x_125 > x_127)) {
-            discard;
-          }
-          x_103_phi = x_123;
-        }
-        x_103 = x_103_phi;
-        if ((f32(x_105) >= x_98)) {
-          x_135_phi = x_103;
-          x_136_phi = x_103;
-          x_137_phi = true;
-          break;
-        }
-
-        continuing {
-          x_106 = (x_105 + 1);
-          x_102_phi = x_103;
-          x_105_phi = x_106;
-        }
-      }
-      x_135 = x_135_phi;
-      x_136 = x_136_phi;
-      let x_137 : bool = x_137_phi;
-      x_139_phi = x_135;
-      if (x_137) {
-        break;
-      }
-      x_139_phi = x_136;
-    }
-  }
-  let x_139 : f32 = x_139_phi;
-  let x_140 : ptr<function, f32> = &(c.y);
-  *(x_140) = x_139;
-  let x_141 : f32 = *(x_96);
-  let x_142 : f32 = *(x_140);
-  c.z = (x_141 + x_142);
-  x_146_phi = 0;
-  loop {
-    var x_147 : i32;
-    let x_146 : i32 = x_146_phi;
-    if ((x_146 < 3)) {
-    } else {
-      break;
-    }
-    let x_152 : ptr<function, f32> = &(c[x_146]);
-    let x_153 : f32 = *(x_152);
-    if ((x_153 >= 1.0)) {
-      let x_157 : f32 = *(x_152);
-      let x_158 : f32 = *(x_152);
-      *(x_152) = (x_157 * x_158);
-      let x_161 : f32 = x_6.injectionSwitch.x;
-      let x_163 : f32 = x_6.injectionSwitch.y;
-      if ((x_161 > x_163)) {
-        discard;
-      }
-    }
-
-    continuing {
-      x_147 = (x_146 + 1);
-      x_146_phi = x_147;
-    }
-  }
-  let x_167 : vec3<f32> = c;
-  let x_169 : vec3<f32> = normalize(abs(x_167));
-  x_GLF_color = vec4<f32>(x_169.x, x_169.y, x_169.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.hlsl
deleted file mode 100644
index 8282858..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,225 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_6 : register(b1, space0) {
-  uint4 x_6[1];
-};
-cbuffer cbuffer_x_9 : register(b0, space0) {
-  uint4 x_9[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float x_54 = 0.0f;
-  float x_58 = 0.0f;
-  float x_59 = 0.0f;
-  float x_91 = 0.0f;
-  float x_92 = 0.0f;
-  float x_135 = 0.0f;
-  float x_136 = 0.0f;
-  float x_58_phi = 0.0f;
-  int x_61_phi = 0;
-  float x_91_phi = 0.0f;
-  float x_92_phi = 0.0f;
-  bool x_93_phi = false;
-  float x_95_phi = 0.0f;
-  float x_139_phi = 0.0f;
-  int x_146_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_50 = asfloat(x_9[0].x);
-  const float x_52 = round((x_50 * 0.125f));
-  x_54 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_58_phi = -0.5f;
-      x_61_phi = 1;
-      while (true) {
-        float x_71 = 0.0f;
-        float x_79 = 0.0f;
-        int x_62 = 0;
-        float x_59_phi = 0.0f;
-        x_58 = x_58_phi;
-        const int x_61 = x_61_phi;
-        x_91_phi = 0.0f;
-        x_92_phi = x_58;
-        x_93_phi = false;
-        if ((x_61 < 800)) {
-        } else {
-          break;
-        }
-        float x_78 = 0.0f;
-        float x_79_phi = 0.0f;
-        if (((x_61 % 32) == 0)) {
-          x_71 = (x_58 + 0.400000006f);
-          x_59_phi = x_71;
-        } else {
-          x_79_phi = x_58;
-          if (((float(x_61) % round(x_52)) <= 0.01f)) {
-            x_78 = (x_58 + 100.0f);
-            x_79_phi = x_78;
-          }
-          x_79 = x_79_phi;
-          const float x_81 = asfloat(x_6[0].x);
-          const float x_83 = asfloat(x_6[0].y);
-          if ((x_81 > x_83)) {
-            discard;
-          }
-          x_59_phi = x_79;
-        }
-        x_59 = x_59_phi;
-        if ((float(x_61) >= x_54)) {
-          x_91_phi = x_59;
-          x_92_phi = x_59;
-          x_93_phi = true;
-          break;
-        }
-        {
-          x_62 = (x_61 + 1);
-          x_58_phi = x_59;
-          x_61_phi = x_62;
-        }
-      }
-      x_91 = x_91_phi;
-      x_92 = x_92_phi;
-      const bool x_93 = x_93_phi;
-      x_95_phi = x_91;
-      if (x_93) {
-        break;
-      }
-      x_95_phi = x_92;
-      break;
-    }
-  }
-  float x_98 = 0.0f;
-  float x_102 = 0.0f;
-  float x_103 = 0.0f;
-  float x_102_phi = 0.0f;
-  int x_105_phi = 0;
-  float x_135_phi = 0.0f;
-  float x_136_phi = 0.0f;
-  bool x_137_phi = false;
-  const float x_95 = x_95_phi;
-  c.x = x_95;
-  x_98 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_102_phi = -0.5f;
-      x_105_phi = 1;
-      while (true) {
-        float x_115 = 0.0f;
-        float x_123 = 0.0f;
-        int x_106 = 0;
-        float x_103_phi = 0.0f;
-        x_102 = x_102_phi;
-        const int x_105 = x_105_phi;
-        x_135_phi = 0.0f;
-        x_136_phi = x_102;
-        x_137_phi = false;
-        if ((x_105 < 800)) {
-        } else {
-          break;
-        }
-        float x_122 = 0.0f;
-        float x_123_phi = 0.0f;
-        if (((x_105 % 32) == 0)) {
-          x_115 = (x_102 + 0.400000006f);
-          x_103_phi = x_115;
-        } else {
-          x_123_phi = x_102;
-          if (((float(x_105) % round(x_52)) <= 0.01f)) {
-            x_122 = (x_102 + 100.0f);
-            x_123_phi = x_122;
-          }
-          x_123 = x_123_phi;
-          const float x_125 = asfloat(x_6[0].x);
-          const float x_127 = asfloat(x_6[0].y);
-          if ((x_125 > x_127)) {
-            discard;
-          }
-          x_103_phi = x_123;
-        }
-        x_103 = x_103_phi;
-        if ((float(x_105) >= x_98)) {
-          x_135_phi = x_103;
-          x_136_phi = x_103;
-          x_137_phi = true;
-          break;
-        }
-        {
-          x_106 = (x_105 + 1);
-          x_102_phi = x_103;
-          x_105_phi = x_106;
-        }
-      }
-      x_135 = x_135_phi;
-      x_136 = x_136_phi;
-      const bool x_137 = x_137_phi;
-      x_139_phi = x_135;
-      if (x_137) {
-        break;
-      }
-      x_139_phi = x_136;
-      break;
-    }
-  }
-  const float x_139 = x_139_phi;
-  c.y = x_139;
-  const float x_141 = c.x;
-  const float x_142 = c.y;
-  c.z = (x_141 + x_142);
-  x_146_phi = 0;
-  while (true) {
-    int x_147 = 0;
-    const int x_146 = x_146_phi;
-    if ((x_146 < 3)) {
-    } else {
-      break;
-    }
-    const int x_152_save = x_146;
-    const float x_153 = c[x_152_save];
-    if ((x_153 >= 1.0f)) {
-      const float x_157 = c[x_152_save];
-      const float x_158 = c[x_152_save];
-      set_float3(c, x_152_save, (x_157 * x_158));
-      const float x_161 = asfloat(x_6[0].x);
-      const float x_163 = asfloat(x_6[0].y);
-      if ((x_161 > x_163)) {
-        discard;
-      }
-    }
-    {
-      x_147 = (x_146 + 1);
-      x_146_phi = x_147;
-    }
-  }
-  const float3 x_169 = normalize(abs(c));
-  x_GLF_color = float4(x_169.x, x_169.y, x_169.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.msl
deleted file mode 100755
index 83118e7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.msl
+++ /dev/null
@@ -1,222 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, constant buf1& x_6, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float x_54 = 0.0f;
-  float x_58 = 0.0f;
-  float x_59 = 0.0f;
-  float x_91 = 0.0f;
-  float x_92 = 0.0f;
-  float x_135 = 0.0f;
-  float x_136 = 0.0f;
-  float x_58_phi = 0.0f;
-  int x_61_phi = 0;
-  float x_91_phi = 0.0f;
-  float x_92_phi = 0.0f;
-  bool x_93_phi = false;
-  float x_95_phi = 0.0f;
-  float x_139_phi = 0.0f;
-  int x_146_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_50 = x_9.resolution.x;
-  float const x_52 = rint((x_50 * 0.125f));
-  x_54 = (*(tint_symbol_3)).x;
-  switch(0u) {
-    default: {
-      x_58_phi = -0.5f;
-      x_61_phi = 1;
-      while (true) {
-        float x_71 = 0.0f;
-        float x_79 = 0.0f;
-        int x_62 = 0;
-        float x_59_phi = 0.0f;
-        x_58 = x_58_phi;
-        int const x_61 = x_61_phi;
-        x_91_phi = 0.0f;
-        x_92_phi = x_58;
-        x_93_phi = false;
-        if ((x_61 < 800)) {
-        } else {
-          break;
-        }
-        float x_78 = 0.0f;
-        float x_79_phi = 0.0f;
-        if (((x_61 % 32) == 0)) {
-          x_71 = (x_58 + 0.400000006f);
-          x_59_phi = x_71;
-        } else {
-          x_79_phi = x_58;
-          if ((fmod(float(x_61), rint(x_52)) <= 0.01f)) {
-            x_78 = (x_58 + 100.0f);
-            x_79_phi = x_78;
-          }
-          x_79 = x_79_phi;
-          float const x_81 = x_6.injectionSwitch.x;
-          float const x_83 = x_6.injectionSwitch.y;
-          if ((x_81 > x_83)) {
-            discard_fragment();
-          }
-          x_59_phi = x_79;
-        }
-        x_59 = x_59_phi;
-        if ((float(x_61) >= x_54)) {
-          x_91_phi = x_59;
-          x_92_phi = x_59;
-          x_93_phi = true;
-          break;
-        }
-        {
-          x_62 = as_type<int>((as_type<uint>(x_61) + as_type<uint>(1)));
-          x_58_phi = x_59;
-          x_61_phi = x_62;
-        }
-      }
-      x_91 = x_91_phi;
-      x_92 = x_92_phi;
-      bool const x_93 = x_93_phi;
-      x_95_phi = x_91;
-      if (x_93) {
-        break;
-      }
-      x_95_phi = x_92;
-      break;
-    }
-  }
-  float x_98 = 0.0f;
-  float x_102 = 0.0f;
-  float x_103 = 0.0f;
-  float x_102_phi = 0.0f;
-  int x_105_phi = 0;
-  float x_135_phi = 0.0f;
-  float x_136_phi = 0.0f;
-  bool x_137_phi = false;
-  float const x_95 = x_95_phi;
-  c.x = x_95;
-  x_98 = (*(tint_symbol_3)).y;
-  switch(0u) {
-    default: {
-      x_102_phi = -0.5f;
-      x_105_phi = 1;
-      while (true) {
-        float x_115 = 0.0f;
-        float x_123 = 0.0f;
-        int x_106 = 0;
-        float x_103_phi = 0.0f;
-        x_102 = x_102_phi;
-        int const x_105 = x_105_phi;
-        x_135_phi = 0.0f;
-        x_136_phi = x_102;
-        x_137_phi = false;
-        if ((x_105 < 800)) {
-        } else {
-          break;
-        }
-        float x_122 = 0.0f;
-        float x_123_phi = 0.0f;
-        if (((x_105 % 32) == 0)) {
-          x_115 = (x_102 + 0.400000006f);
-          x_103_phi = x_115;
-        } else {
-          x_123_phi = x_102;
-          if ((fmod(float(x_105), rint(x_52)) <= 0.01f)) {
-            x_122 = (x_102 + 100.0f);
-            x_123_phi = x_122;
-          }
-          x_123 = x_123_phi;
-          float const x_125 = x_6.injectionSwitch.x;
-          float const x_127 = x_6.injectionSwitch.y;
-          if ((x_125 > x_127)) {
-            discard_fragment();
-          }
-          x_103_phi = x_123;
-        }
-        x_103 = x_103_phi;
-        if ((float(x_105) >= x_98)) {
-          x_135_phi = x_103;
-          x_136_phi = x_103;
-          x_137_phi = true;
-          break;
-        }
-        {
-          x_106 = as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)));
-          x_102_phi = x_103;
-          x_105_phi = x_106;
-        }
-      }
-      x_135 = x_135_phi;
-      x_136 = x_136_phi;
-      bool const x_137 = x_137_phi;
-      x_139_phi = x_135;
-      if (x_137) {
-        break;
-      }
-      x_139_phi = x_136;
-      break;
-    }
-  }
-  float const x_139 = x_139_phi;
-  c.y = x_139;
-  float const x_141 = c.x;
-  float const x_142 = c.y;
-  c.z = (x_141 + x_142);
-  x_146_phi = 0;
-  while (true) {
-    int x_147 = 0;
-    int const x_146 = x_146_phi;
-    if ((x_146 < 3)) {
-    } else {
-      break;
-    }
-    int const x_152_save = x_146;
-    float const x_153 = c[x_152_save];
-    if ((x_153 >= 1.0f)) {
-      float const x_157 = c[x_152_save];
-      float const x_158 = c[x_152_save];
-      c[x_152_save] = (x_157 * x_158);
-      float const x_161 = x_6.injectionSwitch.x;
-      float const x_163 = x_6.injectionSwitch.y;
-      if ((x_161 > x_163)) {
-        discard_fragment();
-      }
-    }
-    {
-      x_147 = as_type<int>((as_type<uint>(x_146) + as_type<uint>(1)));
-      x_146_phi = x_147;
-    }
-  }
-  float3 const x_167 = c;
-  float3 const x_169 = normalize(fabs(x_167));
-  *(tint_symbol_4) = float4(x_169.x, x_169.y, x_169.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, constant buf1& x_6, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_9, x_6, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_9 [[buffer(0)]], constant buf1& x_6 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, x_6, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.spvasm
deleted file mode 100644
index be70146..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,490 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 278
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_9 "x_9"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %x_54 "x_54"
-               OpName %x_58 "x_58"
-               OpName %x_59 "x_59"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_135 "x_135"
-               OpName %x_136 "x_136"
-               OpName %x_58_phi "x_58_phi"
-               OpName %x_61_phi "x_61_phi"
-               OpName %x_91_phi "x_91_phi"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_95_phi "x_95_phi"
-               OpName %x_139_phi "x_139_phi"
-               OpName %x_146_phi "x_146_phi"
-               OpName %x_71 "x_71"
-               OpName %x_79 "x_79"
-               OpName %x_62 "x_62"
-               OpName %x_59_phi "x_59_phi"
-               OpName %x_78 "x_78"
-               OpName %x_79_phi "x_79_phi"
-               OpName %x_98 "x_98"
-               OpName %x_102 "x_102"
-               OpName %x_103 "x_103"
-               OpName %x_102_phi "x_102_phi"
-               OpName %x_105_phi "x_105_phi"
-               OpName %x_135_phi "x_135_phi"
-               OpName %x_136_phi "x_136_phi"
-               OpName %x_137_phi "x_137_phi"
-               OpName %x_115 "x_115"
-               OpName %x_123 "x_123"
-               OpName %x_106 "x_106"
-               OpName %x_103_phi "x_103_phi"
-               OpName %x_122 "x_122"
-               OpName %x_123_phi "x_123_phi"
-               OpName %x_147 "x_147"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-        %x_6 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %18 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %25 = OpConstantNull %v3float
-%_ptr_Function_float = OpTypePointer Function %float
-         %28 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %39 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %45 = OpConstantNull %bool
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %52 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-    %int_800 = OpConstant %int 800
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-     %uint_1 = OpConstant %uint 1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %265 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %18
-         %21 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %25
-       %x_54 = OpVariable %_ptr_Function_float Function %28
-       %x_58 = OpVariable %_ptr_Function_float Function %28
-       %x_59 = OpVariable %_ptr_Function_float Function %28
-       %x_91 = OpVariable %_ptr_Function_float Function %28
-       %x_92 = OpVariable %_ptr_Function_float Function %28
-      %x_135 = OpVariable %_ptr_Function_float Function %28
-      %x_136 = OpVariable %_ptr_Function_float Function %28
-   %x_58_phi = OpVariable %_ptr_Function_float Function %28
-   %x_61_phi = OpVariable %_ptr_Function_int Function %39
-   %x_91_phi = OpVariable %_ptr_Function_float Function %28
-   %x_92_phi = OpVariable %_ptr_Function_float Function %28
-   %x_93_phi = OpVariable %_ptr_Function_bool Function %45
-   %x_95_phi = OpVariable %_ptr_Function_float Function %28
-  %x_139_phi = OpVariable %_ptr_Function_float Function %28
-  %x_146_phi = OpVariable %_ptr_Function_int Function %39
-       %x_71 = OpVariable %_ptr_Function_float Function %28
-       %x_79 = OpVariable %_ptr_Function_float Function %28
-       %x_62 = OpVariable %_ptr_Function_int Function %39
-   %x_59_phi = OpVariable %_ptr_Function_float Function %28
-       %x_78 = OpVariable %_ptr_Function_float Function %28
-   %x_79_phi = OpVariable %_ptr_Function_float Function %28
-       %x_98 = OpVariable %_ptr_Function_float Function %28
-      %x_102 = OpVariable %_ptr_Function_float Function %28
-      %x_103 = OpVariable %_ptr_Function_float Function %28
-  %x_102_phi = OpVariable %_ptr_Function_float Function %28
-  %x_105_phi = OpVariable %_ptr_Function_int Function %39
-  %x_135_phi = OpVariable %_ptr_Function_float Function %28
-  %x_136_phi = OpVariable %_ptr_Function_float Function %28
-  %x_137_phi = OpVariable %_ptr_Function_bool Function %45
-      %x_115 = OpVariable %_ptr_Function_float Function %28
-      %x_123 = OpVariable %_ptr_Function_float Function %28
-      %x_106 = OpVariable %_ptr_Function_int Function %39
-  %x_103_phi = OpVariable %_ptr_Function_float Function %28
-      %x_122 = OpVariable %_ptr_Function_float Function %28
-  %x_123_phi = OpVariable %_ptr_Function_float Function %28
-      %x_147 = OpVariable %_ptr_Function_int Function %39
-               OpStore %c %52
-         %56 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %57 = OpLoad %float %56
-         %61 = OpFMul %float %57 %float_0_125
-         %58 = OpExtInst %float %59 RoundEven %61
-         %63 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %64 = OpLoad %float %63
-               OpStore %x_54 %64
-               OpSelectionMerge %65 None
-               OpSwitch %uint_0 %66
-         %66 = OpLabel
-               OpStore %x_58_phi %float_n0_5
-               OpStore %x_61_phi %int_1
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %77 = OpLoad %float %x_58_phi
-               OpStore %x_58 %77
-         %78 = OpLoad %int %x_61_phi
-               OpStore %x_91_phi %float_0
-         %80 = OpLoad %float %x_58
-               OpStore %x_92_phi %80
-               OpStore %x_93_phi %false
-         %83 = OpSLessThan %bool %78 %int_800
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %70
-         %84 = OpLabel
-         %90 = OpSMod %int %78 %int_32
-         %92 = OpIEqual %bool %90 %int_0
-               OpSelectionMerge %93 None
-               OpBranchConditional %92 %94 %95
-         %94 = OpLabel
-         %96 = OpLoad %float %x_58
-         %98 = OpFAdd %float %96 %float_0_400000006
-               OpStore %x_71 %98
-         %99 = OpLoad %float %x_71
-               OpStore %x_59_phi %99
-               OpBranch %93
-         %95 = OpLabel
-        %100 = OpLoad %float %x_58
-               OpStore %x_79_phi %100
-        %101 = OpConvertSToF %float %78
-        %102 = OpExtInst %float %59 RoundEven %58
-        %103 = OpFRem %float %101 %102
-        %105 = OpFOrdLessThanEqual %bool %103 %float_0_00999999978
-               OpSelectionMerge %106 None
-               OpBranchConditional %105 %107 %106
-        %107 = OpLabel
-        %108 = OpLoad %float %x_58
-        %110 = OpFAdd %float %108 %float_100
-               OpStore %x_78 %110
-        %111 = OpLoad %float %x_78
-               OpStore %x_79_phi %111
-               OpBranch %106
-        %106 = OpLabel
-        %112 = OpLoad %float %x_79_phi
-               OpStore %x_79 %112
-        %113 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %114 = OpLoad %float %113
-        %116 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %117 = OpLoad %float %116
-        %118 = OpFOrdGreaterThan %bool %114 %117
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpKill
-        %119 = OpLabel
-        %121 = OpLoad %float %x_79
-               OpStore %x_59_phi %121
-               OpBranch %93
-         %93 = OpLabel
-        %122 = OpLoad %float %x_59_phi
-               OpStore %x_59 %122
-        %123 = OpConvertSToF %float %78
-        %124 = OpLoad %float %x_54
-        %125 = OpFOrdGreaterThanEqual %bool %123 %124
-               OpSelectionMerge %126 None
-               OpBranchConditional %125 %127 %126
-        %127 = OpLabel
-        %128 = OpLoad %float %x_59
-               OpStore %x_91_phi %128
-        %129 = OpLoad %float %x_59
-               OpStore %x_92_phi %129
-               OpStore %x_93_phi %true
-               OpBranch %70
-        %126 = OpLabel
-               OpBranch %71
-         %71 = OpLabel
-        %131 = OpIAdd %int %78 %int_1
-               OpStore %x_62 %131
-        %132 = OpLoad %float %x_59
-               OpStore %x_58_phi %132
-        %133 = OpLoad %int %x_62
-               OpStore %x_61_phi %133
-               OpBranch %69
-         %70 = OpLabel
-        %134 = OpLoad %float %x_91_phi
-               OpStore %x_91 %134
-        %135 = OpLoad %float %x_92_phi
-               OpStore %x_92 %135
-        %136 = OpLoad %bool %x_93_phi
-        %137 = OpLoad %float %x_91
-               OpStore %x_95_phi %137
-               OpSelectionMerge %138 None
-               OpBranchConditional %136 %139 %138
-        %139 = OpLabel
-               OpBranch %65
-        %138 = OpLabel
-        %140 = OpLoad %float %x_92
-               OpStore %x_95_phi %140
-               OpBranch %65
-         %65 = OpLabel
-        %149 = OpLoad %float %x_95_phi
-        %150 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %150 %149
-        %151 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %152 = OpLoad %float %151
-               OpStore %x_98 %152
-               OpSelectionMerge %153 None
-               OpSwitch %uint_0 %154
-        %154 = OpLabel
-               OpStore %x_102_phi %float_n0_5
-               OpStore %x_105_phi %int_1
-               OpBranch %155
-        %155 = OpLabel
-               OpLoopMerge %156 %157 None
-               OpBranch %158
-        %158 = OpLabel
-        %163 = OpLoad %float %x_102_phi
-               OpStore %x_102 %163
-        %164 = OpLoad %int %x_105_phi
-               OpStore %x_135_phi %float_0
-        %165 = OpLoad %float %x_102
-               OpStore %x_136_phi %165
-               OpStore %x_137_phi %false
-        %166 = OpSLessThan %bool %164 %int_800
-               OpSelectionMerge %167 None
-               OpBranchConditional %166 %168 %169
-        %168 = OpLabel
-               OpBranch %167
-        %169 = OpLabel
-               OpBranch %156
-        %167 = OpLabel
-        %172 = OpSMod %int %164 %int_32
-        %173 = OpIEqual %bool %172 %int_0
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-        %177 = OpLoad %float %x_102
-        %178 = OpFAdd %float %177 %float_0_400000006
-               OpStore %x_115 %178
-        %179 = OpLoad %float %x_115
-               OpStore %x_103_phi %179
-               OpBranch %174
-        %176 = OpLabel
-        %180 = OpLoad %float %x_102
-               OpStore %x_123_phi %180
-        %181 = OpConvertSToF %float %164
-        %182 = OpExtInst %float %59 RoundEven %58
-        %183 = OpFRem %float %181 %182
-        %184 = OpFOrdLessThanEqual %bool %183 %float_0_00999999978
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %185
-        %186 = OpLabel
-        %187 = OpLoad %float %x_102
-        %188 = OpFAdd %float %187 %float_100
-               OpStore %x_122 %188
-        %189 = OpLoad %float %x_122
-               OpStore %x_123_phi %189
-               OpBranch %185
-        %185 = OpLabel
-        %190 = OpLoad %float %x_123_phi
-               OpStore %x_123 %190
-        %191 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %192 = OpLoad %float %191
-        %193 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %194 = OpLoad %float %193
-        %195 = OpFOrdGreaterThan %bool %192 %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %196
-        %197 = OpLabel
-               OpKill
-        %196 = OpLabel
-        %198 = OpLoad %float %x_123
-               OpStore %x_103_phi %198
-               OpBranch %174
-        %174 = OpLabel
-        %199 = OpLoad %float %x_103_phi
-               OpStore %x_103 %199
-        %200 = OpConvertSToF %float %164
-        %201 = OpLoad %float %x_98
-        %202 = OpFOrdGreaterThanEqual %bool %200 %201
-               OpSelectionMerge %203 None
-               OpBranchConditional %202 %204 %203
-        %204 = OpLabel
-        %205 = OpLoad %float %x_103
-               OpStore %x_135_phi %205
-        %206 = OpLoad %float %x_103
-               OpStore %x_136_phi %206
-               OpStore %x_137_phi %true
-               OpBranch %156
-        %203 = OpLabel
-               OpBranch %157
-        %157 = OpLabel
-        %207 = OpIAdd %int %164 %int_1
-               OpStore %x_106 %207
-        %208 = OpLoad %float %x_103
-               OpStore %x_102_phi %208
-        %209 = OpLoad %int %x_106
-               OpStore %x_105_phi %209
-               OpBranch %155
-        %156 = OpLabel
-        %210 = OpLoad %float %x_135_phi
-               OpStore %x_135 %210
-        %211 = OpLoad %float %x_136_phi
-               OpStore %x_136 %211
-        %212 = OpLoad %bool %x_137_phi
-        %213 = OpLoad %float %x_135
-               OpStore %x_139_phi %213
-               OpSelectionMerge %214 None
-               OpBranchConditional %212 %215 %214
-        %215 = OpLabel
-               OpBranch %153
-        %214 = OpLabel
-        %216 = OpLoad %float %x_136
-               OpStore %x_139_phi %216
-               OpBranch %153
-        %153 = OpLabel
-        %217 = OpLoad %float %x_139_phi
-        %218 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %218 %217
-        %219 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %220 = OpLoad %float %219
-        %221 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %222 = OpLoad %float %221
-        %224 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %225 = OpFAdd %float %220 %222
-               OpStore %224 %225
-               OpStore %x_146_phi %int_0
-               OpBranch %226
-        %226 = OpLabel
-               OpLoopMerge %227 %228 None
-               OpBranch %229
-        %229 = OpLabel
-        %231 = OpLoad %int %x_146_phi
-        %233 = OpSLessThan %bool %231 %int_3
-               OpSelectionMerge %234 None
-               OpBranchConditional %233 %235 %236
-        %235 = OpLabel
-               OpBranch %234
-        %236 = OpLabel
-               OpBranch %227
-        %234 = OpLabel
-        %237 = OpAccessChain %_ptr_Function_float %c %231
-        %238 = OpLoad %float %237
-        %240 = OpFOrdGreaterThanEqual %bool %238 %float_1
-               OpSelectionMerge %241 None
-               OpBranchConditional %240 %242 %241
-        %242 = OpLabel
-        %243 = OpAccessChain %_ptr_Function_float %c %231
-        %244 = OpLoad %float %243
-        %245 = OpAccessChain %_ptr_Function_float %c %231
-        %246 = OpLoad %float %245
-        %247 = OpAccessChain %_ptr_Function_float %c %231
-        %248 = OpFMul %float %244 %246
-               OpStore %247 %248
-        %249 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-        %250 = OpLoad %float %249
-        %251 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-        %252 = OpLoad %float %251
-        %253 = OpFOrdGreaterThan %bool %250 %252
-               OpSelectionMerge %254 None
-               OpBranchConditional %253 %255 %254
-        %255 = OpLabel
-               OpKill
-        %254 = OpLabel
-               OpBranch %241
-        %241 = OpLabel
-               OpBranch %228
-        %228 = OpLabel
-        %256 = OpIAdd %int %231 %int_1
-               OpStore %x_147 %256
-        %257 = OpLoad %int %x_147
-               OpStore %x_146_phi %257
-               OpBranch %226
-        %227 = OpLabel
-        %258 = OpLoad %v3float %c
-        %260 = OpExtInst %v3float %59 FAbs %258
-        %259 = OpExtInst %v3float %59 Normalize %260
-        %261 = OpCompositeExtract %float %259 0
-        %262 = OpCompositeExtract %float %259 1
-        %263 = OpCompositeExtract %float %259 2
-        %264 = OpCompositeConstruct %v4float %261 %262 %263 %float_1
-               OpStore %x_GLF_color %264
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %265
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %269 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %270 = OpFunctionCall %void %main_1
-        %271 = OpLoad %v4float %x_GLF_color
-        %272 = OpCompositeConstruct %main_out %271
-               OpReturnValue %272
-               OpFunctionEnd
-       %main = OpFunction %void None %18
-        %274 = OpLabel
-        %276 = OpLoad %v4float %gl_FragCoord_param_1
-        %275 = OpFunctionCall %main_out %main_inner %276
-        %277 = OpCompositeExtract %v4float %275 0
-               OpStore %x_GLF_color_1_1 %277
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.wgsl
deleted file mode 100644
index 5688188..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-double-always-false-discard/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,222 +0,0 @@
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(1)]] var<uniform> x_6 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c : vec3<f32>;
-  var x_54 : f32;
-  var x_58 : f32;
-  var x_59 : f32;
-  var x_91 : f32;
-  var x_92 : f32;
-  var x_135 : f32;
-  var x_136 : f32;
-  var x_58_phi : f32;
-  var x_61_phi : i32;
-  var x_91_phi : f32;
-  var x_92_phi : f32;
-  var x_93_phi : bool;
-  var x_95_phi : f32;
-  var x_139_phi : f32;
-  var x_146_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_50 : f32 = x_9.resolution.x;
-  let x_52 : f32 = round((x_50 * 0.125));
-  x_54 = gl_FragCoord.x;
-  switch(0u) {
-    default: {
-      x_58_phi = -0.5;
-      x_61_phi = 1;
-      loop {
-        var x_71 : f32;
-        var x_79 : f32;
-        var x_62 : i32;
-        var x_59_phi : f32;
-        x_58 = x_58_phi;
-        let x_61 : i32 = x_61_phi;
-        x_91_phi = 0.0;
-        x_92_phi = x_58;
-        x_93_phi = false;
-        if ((x_61 < 800)) {
-        } else {
-          break;
-        }
-        var x_78 : f32;
-        var x_79_phi : f32;
-        if (((x_61 % 32) == 0)) {
-          x_71 = (x_58 + 0.400000006);
-          x_59_phi = x_71;
-        } else {
-          x_79_phi = x_58;
-          if (((f32(x_61) % round(x_52)) <= 0.01)) {
-            x_78 = (x_58 + 100.0);
-            x_79_phi = x_78;
-          }
-          x_79 = x_79_phi;
-          let x_81 : f32 = x_6.injectionSwitch.x;
-          let x_83 : f32 = x_6.injectionSwitch.y;
-          if ((x_81 > x_83)) {
-            discard;
-          }
-          x_59_phi = x_79;
-        }
-        x_59 = x_59_phi;
-        if ((f32(x_61) >= x_54)) {
-          x_91_phi = x_59;
-          x_92_phi = x_59;
-          x_93_phi = true;
-          break;
-        }
-
-        continuing {
-          x_62 = (x_61 + 1);
-          x_58_phi = x_59;
-          x_61_phi = x_62;
-        }
-      }
-      x_91 = x_91_phi;
-      x_92 = x_92_phi;
-      let x_93 : bool = x_93_phi;
-      x_95_phi = x_91;
-      if (x_93) {
-        break;
-      }
-      x_95_phi = x_92;
-    }
-  }
-  var x_98 : f32;
-  var x_102 : f32;
-  var x_103 : f32;
-  var x_102_phi : f32;
-  var x_105_phi : i32;
-  var x_135_phi : f32;
-  var x_136_phi : f32;
-  var x_137_phi : bool;
-  let x_95 : f32 = x_95_phi;
-  let x_96 : ptr<function, f32> = &(c.x);
-  *(x_96) = x_95;
-  x_98 = gl_FragCoord.y;
-  switch(0u) {
-    default: {
-      x_102_phi = -0.5;
-      x_105_phi = 1;
-      loop {
-        var x_115 : f32;
-        var x_123 : f32;
-        var x_106 : i32;
-        var x_103_phi : f32;
-        x_102 = x_102_phi;
-        let x_105 : i32 = x_105_phi;
-        x_135_phi = 0.0;
-        x_136_phi = x_102;
-        x_137_phi = false;
-        if ((x_105 < 800)) {
-        } else {
-          break;
-        }
-        var x_122 : f32;
-        var x_123_phi : f32;
-        if (((x_105 % 32) == 0)) {
-          x_115 = (x_102 + 0.400000006);
-          x_103_phi = x_115;
-        } else {
-          x_123_phi = x_102;
-          if (((f32(x_105) % round(x_52)) <= 0.01)) {
-            x_122 = (x_102 + 100.0);
-            x_123_phi = x_122;
-          }
-          x_123 = x_123_phi;
-          let x_125 : f32 = x_6.injectionSwitch.x;
-          let x_127 : f32 = x_6.injectionSwitch.y;
-          if ((x_125 > x_127)) {
-            discard;
-          }
-          x_103_phi = x_123;
-        }
-        x_103 = x_103_phi;
-        if ((f32(x_105) >= x_98)) {
-          x_135_phi = x_103;
-          x_136_phi = x_103;
-          x_137_phi = true;
-          break;
-        }
-
-        continuing {
-          x_106 = (x_105 + 1);
-          x_102_phi = x_103;
-          x_105_phi = x_106;
-        }
-      }
-      x_135 = x_135_phi;
-      x_136 = x_136_phi;
-      let x_137 : bool = x_137_phi;
-      x_139_phi = x_135;
-      if (x_137) {
-        break;
-      }
-      x_139_phi = x_136;
-    }
-  }
-  let x_139 : f32 = x_139_phi;
-  let x_140 : ptr<function, f32> = &(c.y);
-  *(x_140) = x_139;
-  let x_141 : f32 = *(x_96);
-  let x_142 : f32 = *(x_140);
-  c.z = (x_141 + x_142);
-  x_146_phi = 0;
-  loop {
-    var x_147 : i32;
-    let x_146 : i32 = x_146_phi;
-    if ((x_146 < 3)) {
-    } else {
-      break;
-    }
-    let x_152 : ptr<function, f32> = &(c[x_146]);
-    let x_153 : f32 = *(x_152);
-    if ((x_153 >= 1.0)) {
-      let x_157 : f32 = *(x_152);
-      let x_158 : f32 = *(x_152);
-      *(x_152) = (x_157 * x_158);
-      let x_161 : f32 = x_6.injectionSwitch.x;
-      let x_163 : f32 = x_6.injectionSwitch.y;
-      if ((x_161 > x_163)) {
-        discard;
-      }
-    }
-
-    continuing {
-      x_147 = (x_146 + 1);
-      x_146_phi = x_147;
-    }
-  }
-  let x_167 : vec3<f32> = c;
-  let x_169 : vec3<f32> = normalize(abs(x_167));
-  x_GLF_color = vec4<f32>(x_169.x, x_169.y, x_169.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.hlsl
deleted file mode 100644
index 4e2b4d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,100 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  {
-    for(; (i < 800); i = (i + 1)) {
-      if (((i % 32) == 0)) {
-        result = (result + 0.400000006f);
-      } else {
-        const int x_122 = i;
-        const float x_124 = thirty_two;
-        if (((float(x_122) - (round(x_124) * floor((float(x_122) / round(x_124))))) <= 0.01f)) {
-          result = (result + 100.0f);
-        }
-      }
-      const int x_132 = i;
-      const float x_134 = limit;
-      if ((float(x_132) >= x_134)) {
-        return result;
-      }
-    }
-  }
-  return result;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_56 = asfloat(x_13[0].x);
-  thirty_two_1 = round((x_56 / 8.0f));
-  const float x_60 = gl_FragCoord.x;
-  param = x_60;
-  param_1 = thirty_two_1;
-  const float x_62 = compute_value_f1_f1_(param, param_1);
-  c.x = x_62;
-  const float x_65 = gl_FragCoord.y;
-  param_2 = x_65;
-  param_3 = thirty_two_1;
-  const float x_67 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_67;
-  const float x_70 = c.x;
-  const float x_72 = c.y;
-  c.z = (x_70 + x_72);
-  i_1 = 0;
-  {
-    for(; (i_1 < 3); i_1 = (i_1 + 1)) {
-      const float x_84 = c[i_1];
-      if ((x_84 >= 1.0f)) {
-        const int x_88 = i_1;
-        const float x_91 = c[i_1];
-        const float x_94 = c[i_1];
-        set_float3(c, x_88, (x_91 * x_94));
-      }
-    }
-  }
-  const float3 x_101 = normalize(abs(c));
-  x_GLF_color = float4(x_101.x, x_101.y, x_101.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.msl
deleted file mode 100755
index 8641e11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.msl
+++ /dev/null
@@ -1,121 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  while (true) {
-    int const x_111 = i;
-    if ((x_111 < 800)) {
-    } else {
-      break;
-    }
-    int const x_114 = i;
-    if (((x_114 % 32) == 0)) {
-      float const x_120 = result;
-      result = (x_120 + 0.400000006f);
-    } else {
-      int const x_122 = i;
-      float const x_124 = *(thirty_two);
-      if (((float(x_122) - (rint(x_124) * floor((float(x_122) / rint(x_124))))) <= 0.01f)) {
-        float const x_130 = result;
-        result = (x_130 + 100.0f);
-      }
-    }
-    int const x_132 = i;
-    float const x_134 = *(limit);
-    if ((float(x_132) >= x_134)) {
-      float const x_138 = result;
-      return x_138;
-    }
-    {
-      int const x_139 = i;
-      i = as_type<int>((as_type<uint>(x_139) + as_type<uint>(1)));
-    }
-  }
-  float const x_141 = result;
-  return x_141;
-}
-
-void main_1(constant buf0& x_13, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_56 = x_13.resolution.x;
-  thirty_two_1 = rint((x_56 / 8.0f));
-  float const x_60 = (*(tint_symbol_3)).x;
-  param = x_60;
-  float const x_61 = thirty_two_1;
-  param_1 = x_61;
-  float const x_62 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_62;
-  float const x_65 = (*(tint_symbol_3)).y;
-  param_2 = x_65;
-  float const x_66 = thirty_two_1;
-  param_3 = x_66;
-  float const x_67 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_67;
-  float const x_70 = c.x;
-  float const x_72 = c.y;
-  c.z = (x_70 + x_72);
-  i_1 = 0;
-  while (true) {
-    int const x_79 = i_1;
-    if ((x_79 < 3)) {
-    } else {
-      break;
-    }
-    int const x_82 = i_1;
-    float const x_84 = c[x_82];
-    if ((x_84 >= 1.0f)) {
-      int const x_88 = i_1;
-      int const x_89 = i_1;
-      float const x_91 = c[x_89];
-      int const x_92 = i_1;
-      float const x_94 = c[x_92];
-      c[x_88] = (x_91 * x_94);
-    }
-    {
-      int const x_97 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_99 = c;
-  float3 const x_101 = normalize(fabs(x_99));
-  *(tint_symbol_4) = float4(x_101.x, x_101.y, x_101.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_13, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.spvasm
deleted file mode 100644
index d9bbe00..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,271 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 177
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %result "result"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %thirty_two_1 "thirty_two_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %22 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %81 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %88 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %98 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %164 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %15
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %20 = OpLabel
-     %result = OpVariable %_ptr_Function_float Function %22
-          %i = OpVariable %_ptr_Function_int Function %26
-               OpStore %result %float_n0_5
-               OpStore %i %int_1
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %i
-         %35 = OpSLessThan %bool %33 %int_800
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %30
-         %37 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpSMod %int %40 %int_32
-         %44 = OpIEqual %bool %42 %int_0
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %47
-         %46 = OpLabel
-         %48 = OpLoad %float %result
-         %50 = OpFAdd %float %48 %float_0_400000006
-               OpStore %result %50
-               OpBranch %45
-         %47 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %float %thirty_two
-         %54 = OpConvertSToF %float %51
-         %55 = OpExtInst %float %56 RoundEven %53
-         %58 = OpConvertSToF %float %51
-         %59 = OpExtInst %float %56 RoundEven %53
-         %60 = OpFDiv %float %58 %59
-         %57 = OpExtInst %float %56 Floor %60
-         %61 = OpFMul %float %55 %57
-         %62 = OpFSub %float %54 %61
-         %64 = OpFOrdLessThanEqual %bool %62 %float_0_00999999978
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-         %67 = OpLoad %float %result
-         %69 = OpFAdd %float %67 %float_100
-               OpStore %result %69
-               OpBranch %65
-         %65 = OpLabel
-               OpBranch %45
-         %45 = OpLabel
-         %70 = OpLoad %int %i
-         %72 = OpLoad %float %limit
-         %73 = OpConvertSToF %float %70
-         %74 = OpFOrdGreaterThanEqual %bool %73 %72
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-         %77 = OpLoad %float %result
-               OpReturnValue %77
-         %75 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %78 = OpLoad %int %i
-         %79 = OpIAdd %int %78 %int_1
-               OpStore %i %79
-               OpBranch %29
-         %30 = OpLabel
-         %80 = OpLoad %float %result
-               OpReturnValue %80
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %81
-         %84 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %88
-%thirty_two_1 = OpVariable %_ptr_Function_float Function %22
-      %param = OpVariable %_ptr_Function_float Function %22
-    %param_1 = OpVariable %_ptr_Function_float Function %22
-    %param_2 = OpVariable %_ptr_Function_float Function %22
-    %param_3 = OpVariable %_ptr_Function_float Function %22
-        %i_1 = OpVariable %_ptr_Function_int Function %26
-               OpStore %c %98
-        %102 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-        %103 = OpLoad %float %102
-        %105 = OpFDiv %float %103 %float_8
-        %104 = OpExtInst %float %56 RoundEven %105
-               OpStore %thirty_two_1 %104
-        %107 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %108 = OpLoad %float %107
-               OpStore %param %108
-        %109 = OpLoad %float %thirty_two_1
-               OpStore %param_1 %109
-        %110 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %113 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %113 %110
-        %115 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %116 = OpLoad %float %115
-               OpStore %param_2 %116
-        %117 = OpLoad %float %thirty_two_1
-               OpStore %param_3 %117
-        %118 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %121 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %121 %118
-        %122 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %125 = OpLoad %float %124
-        %127 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %128 = OpFAdd %float %123 %125
-               OpStore %127 %128
-               OpStore %i_1 %int_0
-               OpBranch %129
-        %129 = OpLabel
-               OpLoopMerge %130 %131 None
-               OpBranch %132
-        %132 = OpLabel
-        %133 = OpLoad %int %i_1
-        %135 = OpSLessThan %bool %133 %int_3
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %138
-        %137 = OpLabel
-               OpBranch %136
-        %138 = OpLabel
-               OpBranch %130
-        %136 = OpLabel
-        %139 = OpLoad %int %i_1
-        %140 = OpAccessChain %_ptr_Function_float %c %139
-        %141 = OpLoad %float %140
-        %143 = OpFOrdGreaterThanEqual %bool %141 %float_1
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %144
-        %145 = OpLabel
-        %146 = OpLoad %int %i_1
-        %147 = OpLoad %int %i_1
-        %148 = OpAccessChain %_ptr_Function_float %c %147
-        %149 = OpLoad %float %148
-        %150 = OpLoad %int %i_1
-        %151 = OpAccessChain %_ptr_Function_float %c %150
-        %152 = OpLoad %float %151
-        %153 = OpAccessChain %_ptr_Function_float %c %146
-        %154 = OpFMul %float %149 %152
-               OpStore %153 %154
-               OpBranch %144
-        %144 = OpLabel
-               OpBranch %131
-        %131 = OpLabel
-        %155 = OpLoad %int %i_1
-        %156 = OpIAdd %int %155 %int_1
-               OpStore %i_1 %156
-               OpBranch %129
-        %130 = OpLabel
-        %157 = OpLoad %v3float %c
-        %159 = OpExtInst %v3float %56 FAbs %157
-        %158 = OpExtInst %v3float %56 Normalize %159
-        %160 = OpCompositeExtract %float %158 0
-        %161 = OpCompositeExtract %float %158 1
-        %162 = OpCompositeExtract %float %158 2
-        %163 = OpCompositeConstruct %v4float %160 %161 %162 %float_1
-               OpStore %x_GLF_color %163
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %164
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %168 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %169 = OpFunctionCall %void %main_1
-        %170 = OpLoad %v4float %x_GLF_color
-        %171 = OpCompositeConstruct %main_out %170
-               OpReturnValue %171
-               OpFunctionEnd
-       %main = OpFunction %void None %81
-        %173 = OpLabel
-        %175 = OpLoad %v4float %gl_FragCoord_param_1
-        %174 = OpFunctionCall %main_out %main_inner %175
-        %176 = OpCompositeExtract %v4float %174 0
-               OpStore %x_GLF_color_1_1 %176
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.wgsl
deleted file mode 100644
index f3b8b01..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,116 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var result : f32;
-  var i : i32;
-  result = -0.5;
-  i = 1;
-  loop {
-    let x_111 : i32 = i;
-    if ((x_111 < 800)) {
-    } else {
-      break;
-    }
-    let x_114 : i32 = i;
-    if (((x_114 % 32) == 0)) {
-      let x_120 : f32 = result;
-      result = (x_120 + 0.400000006);
-    } else {
-      let x_122 : i32 = i;
-      let x_124 : f32 = *(thirty_two);
-      if (((f32(x_122) - (round(x_124) * floor((f32(x_122) / round(x_124))))) <= 0.01)) {
-        let x_130 : f32 = result;
-        result = (x_130 + 100.0);
-      }
-    }
-    let x_132 : i32 = i;
-    let x_134 : f32 = *(limit);
-    if ((f32(x_132) >= x_134)) {
-      let x_138 : f32 = result;
-      return x_138;
-    }
-
-    continuing {
-      let x_139 : i32 = i;
-      i = (x_139 + 1);
-    }
-  }
-  let x_141 : f32 = result;
-  return x_141;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var thirty_two_1 : f32;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var i_1 : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_56 : f32 = x_13.resolution.x;
-  thirty_two_1 = round((x_56 / 8.0));
-  let x_60 : f32 = gl_FragCoord.x;
-  param = x_60;
-  let x_61 : f32 = thirty_two_1;
-  param_1 = x_61;
-  let x_62 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_62;
-  let x_65 : f32 = gl_FragCoord.y;
-  param_2 = x_65;
-  let x_66 : f32 = thirty_two_1;
-  param_3 = x_66;
-  let x_67 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_67;
-  let x_70 : f32 = c.x;
-  let x_72 : f32 = c.y;
-  c.z = (x_70 + x_72);
-  i_1 = 0;
-  loop {
-    let x_79 : i32 = i_1;
-    if ((x_79 < 3)) {
-    } else {
-      break;
-    }
-    let x_82 : i32 = i_1;
-    let x_84 : f32 = c[x_82];
-    if ((x_84 >= 1.0)) {
-      let x_88 : i32 = i_1;
-      let x_89 : i32 = i_1;
-      let x_91 : f32 = c[x_89];
-      let x_92 : i32 = i_1;
-      let x_94 : f32 = c[x_92];
-      c[x_88] = (x_91 * x_94);
-    }
-
-    continuing {
-      let x_97 : i32 = i_1;
-      i_1 = (x_97 + 1);
-    }
-  }
-  let x_99 : vec3<f32> = c;
-  let x_101 : vec3<f32> = normalize(abs(x_99));
-  x_GLF_color = vec4<f32>(x_101.x, x_101.y, x_101.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.hlsl
deleted file mode 100644
index 86962b9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,100 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  {
-    for(; (i < 800); i = (i + 1)) {
-      if (((i % 32) == 0)) {
-        result = (result + 0.400000006f);
-      } else {
-        const int x_122 = i;
-        const float x_124 = thirty_two;
-        if (((float(x_122) % round(x_124)) <= 0.01f)) {
-          result = (result + 100.0f);
-        }
-      }
-      const int x_132 = i;
-      const float x_134 = limit;
-      if ((float(x_132) >= x_134)) {
-        return result;
-      }
-    }
-  }
-  return result;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_56 = asfloat(x_13[0].x);
-  thirty_two_1 = round((x_56 / 8.0f));
-  const float x_60 = gl_FragCoord.x;
-  param = x_60;
-  param_1 = thirty_two_1;
-  const float x_62 = compute_value_f1_f1_(param, param_1);
-  c.x = x_62;
-  const float x_65 = gl_FragCoord.y;
-  param_2 = x_65;
-  param_3 = thirty_two_1;
-  const float x_67 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_67;
-  const float x_70 = c.x;
-  const float x_72 = c.y;
-  c.z = (x_70 + x_72);
-  i_1 = 0;
-  {
-    for(; (i_1 < 3); i_1 = (i_1 + 1)) {
-      const float x_84 = c[i_1];
-      if ((x_84 >= 1.0f)) {
-        const int x_88 = i_1;
-        const float x_91 = c[i_1];
-        const float x_94 = c[i_1];
-        set_float3(c, x_88, (x_91 * x_94));
-      }
-    }
-  }
-  const float3 x_101 = normalize(abs(c));
-  x_GLF_color = float4(x_101.x, x_101.y, x_101.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.msl
deleted file mode 100755
index 9ce5a97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.msl
+++ /dev/null
@@ -1,121 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  while (true) {
-    int const x_111 = i;
-    if ((x_111 < 800)) {
-    } else {
-      break;
-    }
-    int const x_114 = i;
-    if (((x_114 % 32) == 0)) {
-      float const x_120 = result;
-      result = (x_120 + 0.400000006f);
-    } else {
-      int const x_122 = i;
-      float const x_124 = *(thirty_two);
-      if ((fmod(float(x_122), rint(x_124)) <= 0.01f)) {
-        float const x_130 = result;
-        result = (x_130 + 100.0f);
-      }
-    }
-    int const x_132 = i;
-    float const x_134 = *(limit);
-    if ((float(x_132) >= x_134)) {
-      float const x_138 = result;
-      return x_138;
-    }
-    {
-      int const x_139 = i;
-      i = as_type<int>((as_type<uint>(x_139) + as_type<uint>(1)));
-    }
-  }
-  float const x_141 = result;
-  return x_141;
-}
-
-void main_1(constant buf0& x_13, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_56 = x_13.resolution.x;
-  thirty_two_1 = rint((x_56 / 8.0f));
-  float const x_60 = (*(tint_symbol_3)).x;
-  param = x_60;
-  float const x_61 = thirty_two_1;
-  param_1 = x_61;
-  float const x_62 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_62;
-  float const x_65 = (*(tint_symbol_3)).y;
-  param_2 = x_65;
-  float const x_66 = thirty_two_1;
-  param_3 = x_66;
-  float const x_67 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_67;
-  float const x_70 = c.x;
-  float const x_72 = c.y;
-  c.z = (x_70 + x_72);
-  i_1 = 0;
-  while (true) {
-    int const x_79 = i_1;
-    if ((x_79 < 3)) {
-    } else {
-      break;
-    }
-    int const x_82 = i_1;
-    float const x_84 = c[x_82];
-    if ((x_84 >= 1.0f)) {
-      int const x_88 = i_1;
-      int const x_89 = i_1;
-      float const x_91 = c[x_89];
-      int const x_92 = i_1;
-      float const x_94 = c[x_92];
-      c[x_88] = (x_91 * x_94);
-    }
-    {
-      int const x_97 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_99 = c;
-  float3 const x_101 = normalize(fabs(x_99));
-  *(tint_symbol_4) = float4(x_101.x, x_101.y, x_101.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_13, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.spvasm
deleted file mode 100644
index c64868a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,266 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 172
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %result "result"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %thirty_two_1 "thirty_two_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %22 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %76 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %83 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %93 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %159 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %15
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %20 = OpLabel
-     %result = OpVariable %_ptr_Function_float Function %22
-          %i = OpVariable %_ptr_Function_int Function %26
-               OpStore %result %float_n0_5
-               OpStore %i %int_1
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %i
-         %35 = OpSLessThan %bool %33 %int_800
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %30
-         %37 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpSMod %int %40 %int_32
-         %44 = OpIEqual %bool %42 %int_0
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %47
-         %46 = OpLabel
-         %48 = OpLoad %float %result
-         %50 = OpFAdd %float %48 %float_0_400000006
-               OpStore %result %50
-               OpBranch %45
-         %47 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %float %thirty_two
-         %54 = OpConvertSToF %float %51
-         %55 = OpExtInst %float %56 RoundEven %53
-         %57 = OpFRem %float %54 %55
-         %59 = OpFOrdLessThanEqual %bool %57 %float_0_00999999978
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %60
-         %61 = OpLabel
-         %62 = OpLoad %float %result
-         %64 = OpFAdd %float %62 %float_100
-               OpStore %result %64
-               OpBranch %60
-         %60 = OpLabel
-               OpBranch %45
-         %45 = OpLabel
-         %65 = OpLoad %int %i
-         %67 = OpLoad %float %limit
-         %68 = OpConvertSToF %float %65
-         %69 = OpFOrdGreaterThanEqual %bool %68 %67
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %float %result
-               OpReturnValue %72
-         %70 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %73 = OpLoad %int %i
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %i %74
-               OpBranch %29
-         %30 = OpLabel
-         %75 = OpLoad %float %result
-               OpReturnValue %75
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %76
-         %79 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %83
-%thirty_two_1 = OpVariable %_ptr_Function_float Function %22
-      %param = OpVariable %_ptr_Function_float Function %22
-    %param_1 = OpVariable %_ptr_Function_float Function %22
-    %param_2 = OpVariable %_ptr_Function_float Function %22
-    %param_3 = OpVariable %_ptr_Function_float Function %22
-        %i_1 = OpVariable %_ptr_Function_int Function %26
-               OpStore %c %93
-         %97 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-         %98 = OpLoad %float %97
-        %100 = OpFDiv %float %98 %float_8
-         %99 = OpExtInst %float %56 RoundEven %100
-               OpStore %thirty_two_1 %99
-        %102 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %103 = OpLoad %float %102
-               OpStore %param %103
-        %104 = OpLoad %float %thirty_two_1
-               OpStore %param_1 %104
-        %105 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %108 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %108 %105
-        %110 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %111 = OpLoad %float %110
-               OpStore %param_2 %111
-        %112 = OpLoad %float %thirty_two_1
-               OpStore %param_3 %112
-        %113 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %116 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %116 %113
-        %117 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %118 = OpLoad %float %117
-        %119 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %120 = OpLoad %float %119
-        %122 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %123 = OpFAdd %float %118 %120
-               OpStore %122 %123
-               OpStore %i_1 %int_0
-               OpBranch %124
-        %124 = OpLabel
-               OpLoopMerge %125 %126 None
-               OpBranch %127
-        %127 = OpLabel
-        %128 = OpLoad %int %i_1
-        %130 = OpSLessThan %bool %128 %int_3
-               OpSelectionMerge %131 None
-               OpBranchConditional %130 %132 %133
-        %132 = OpLabel
-               OpBranch %131
-        %133 = OpLabel
-               OpBranch %125
-        %131 = OpLabel
-        %134 = OpLoad %int %i_1
-        %135 = OpAccessChain %_ptr_Function_float %c %134
-        %136 = OpLoad %float %135
-        %138 = OpFOrdGreaterThanEqual %bool %136 %float_1
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %int %i_1
-        %142 = OpLoad %int %i_1
-        %143 = OpAccessChain %_ptr_Function_float %c %142
-        %144 = OpLoad %float %143
-        %145 = OpLoad %int %i_1
-        %146 = OpAccessChain %_ptr_Function_float %c %145
-        %147 = OpLoad %float %146
-        %148 = OpAccessChain %_ptr_Function_float %c %141
-        %149 = OpFMul %float %144 %147
-               OpStore %148 %149
-               OpBranch %139
-        %139 = OpLabel
-               OpBranch %126
-        %126 = OpLabel
-        %150 = OpLoad %int %i_1
-        %151 = OpIAdd %int %150 %int_1
-               OpStore %i_1 %151
-               OpBranch %124
-        %125 = OpLabel
-        %152 = OpLoad %v3float %c
-        %154 = OpExtInst %v3float %56 FAbs %152
-        %153 = OpExtInst %v3float %56 Normalize %154
-        %155 = OpCompositeExtract %float %153 0
-        %156 = OpCompositeExtract %float %153 1
-        %157 = OpCompositeExtract %float %153 2
-        %158 = OpCompositeConstruct %v4float %155 %156 %157 %float_1
-               OpStore %x_GLF_color %158
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %159
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %163 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %164 = OpFunctionCall %void %main_1
-        %165 = OpLoad %v4float %x_GLF_color
-        %166 = OpCompositeConstruct %main_out %165
-               OpReturnValue %166
-               OpFunctionEnd
-       %main = OpFunction %void None %76
-        %168 = OpLabel
-        %170 = OpLoad %v4float %gl_FragCoord_param_1
-        %169 = OpFunctionCall %main_out %main_inner %170
-        %171 = OpCompositeExtract %v4float %169 0
-               OpStore %x_GLF_color_1_1 %171
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.wgsl
deleted file mode 100644
index 82eab45..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-float-mat-determinant-clamp/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,116 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var result : f32;
-  var i : i32;
-  result = -0.5;
-  i = 1;
-  loop {
-    let x_111 : i32 = i;
-    if ((x_111 < 800)) {
-    } else {
-      break;
-    }
-    let x_114 : i32 = i;
-    if (((x_114 % 32) == 0)) {
-      let x_120 : f32 = result;
-      result = (x_120 + 0.400000006);
-    } else {
-      let x_122 : i32 = i;
-      let x_124 : f32 = *(thirty_two);
-      if (((f32(x_122) % round(x_124)) <= 0.01)) {
-        let x_130 : f32 = result;
-        result = (x_130 + 100.0);
-      }
-    }
-    let x_132 : i32 = i;
-    let x_134 : f32 = *(limit);
-    if ((f32(x_132) >= x_134)) {
-      let x_138 : f32 = result;
-      return x_138;
-    }
-
-    continuing {
-      let x_139 : i32 = i;
-      i = (x_139 + 1);
-    }
-  }
-  let x_141 : f32 = result;
-  return x_141;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var thirty_two_1 : f32;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var i_1 : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_56 : f32 = x_13.resolution.x;
-  thirty_two_1 = round((x_56 / 8.0));
-  let x_60 : f32 = gl_FragCoord.x;
-  param = x_60;
-  let x_61 : f32 = thirty_two_1;
-  param_1 = x_61;
-  let x_62 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_62;
-  let x_65 : f32 = gl_FragCoord.y;
-  param_2 = x_65;
-  let x_66 : f32 = thirty_two_1;
-  param_3 = x_66;
-  let x_67 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_67;
-  let x_70 : f32 = c.x;
-  let x_72 : f32 = c.y;
-  c.z = (x_70 + x_72);
-  i_1 = 0;
-  loop {
-    let x_79 : i32 = i_1;
-    if ((x_79 < 3)) {
-    } else {
-      break;
-    }
-    let x_82 : i32 = i_1;
-    let x_84 : f32 = c[x_82];
-    if ((x_84 >= 1.0)) {
-      let x_88 : i32 = i_1;
-      let x_89 : i32 = i_1;
-      let x_91 : f32 = c[x_89];
-      let x_92 : i32 = i_1;
-      let x_94 : f32 = c[x_92];
-      c[x_88] = (x_91 * x_94);
-    }
-
-    continuing {
-      let x_97 : i32 = i_1;
-      i_1 = (x_97 + 1);
-    }
-  }
-  let x_99 : vec3<f32> = c;
-  let x_101 : vec3<f32> = normalize(abs(x_99));
-  x_GLF_color = vec4<f32>(x_101.x, x_101.y, x_101.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.hlsl
deleted file mode 100644
index 7baccd8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,111 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_20 : register(b1, space0) {
-  uint4 x_20[1];
-};
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  {
-    for(; (i < 800); i = (i + 1)) {
-      if (((i % 32) == 0)) {
-        result = (result + 0.400000006f);
-      } else {
-        const int x_136 = i;
-        const float x_138 = thirty_two;
-        if (((float(x_136) - (round(x_138) * floor((float(x_136) / round(x_138))))) <= 0.01f)) {
-          result = (result + 100.0f);
-        }
-      }
-      const int x_146 = i;
-      const float x_148 = limit;
-      if ((float(x_146) >= x_148)) {
-        return result;
-      }
-    }
-  }
-  return result;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  float3 x_58 = float3(0.0f, 0.0f, 0.0f);
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_60 = asfloat(x_13[0].x);
-  thirty_two_1 = round((x_60 / 8.0f));
-  const float x_64 = gl_FragCoord.x;
-  param = x_64;
-  param_1 = thirty_two_1;
-  const float x_66 = compute_value_f1_f1_(param, param_1);
-  c.x = x_66;
-  const float x_69 = gl_FragCoord.y;
-  param_2 = x_69;
-  param_3 = thirty_two_1;
-  const float x_71 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_71;
-  const float x_74 = c.x;
-  const float x_76 = c.y;
-  c.z = (x_74 + x_76);
-  i_1 = 0;
-  {
-    for(; (i_1 < 3); i_1 = (i_1 + 1)) {
-      const float x_88 = c[i_1];
-      if ((x_88 >= 1.0f)) {
-        const int x_92 = i_1;
-        const float x_95 = c[i_1];
-        const float x_98 = c[i_1];
-        set_float3(c, x_92, (x_95 * x_98));
-      }
-    }
-  }
-  const float x_104 = asfloat(x_20[0].x);
-  const float x_106 = asfloat(x_20[0].y);
-  if ((x_104 < x_106)) {
-    x_58 = abs(c);
-  } else {
-    x_58 = c;
-  }
-  const float3 x_115 = normalize(x_58);
-  x_GLF_color = float4(x_115.x, x_115.y, x_115.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.msl
deleted file mode 100755
index a11f78a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.msl
+++ /dev/null
@@ -1,134 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  while (true) {
-    int const x_125 = i;
-    if ((x_125 < 800)) {
-    } else {
-      break;
-    }
-    int const x_128 = i;
-    if (((x_128 % 32) == 0)) {
-      float const x_134 = result;
-      result = (x_134 + 0.400000006f);
-    } else {
-      int const x_136 = i;
-      float const x_138 = *(thirty_two);
-      if (((float(x_136) - (rint(x_138) * floor((float(x_136) / rint(x_138))))) <= 0.01f)) {
-        float const x_144 = result;
-        result = (x_144 + 100.0f);
-      }
-    }
-    int const x_146 = i;
-    float const x_148 = *(limit);
-    if ((float(x_146) >= x_148)) {
-      float const x_152 = result;
-      return x_152;
-    }
-    {
-      int const x_153 = i;
-      i = as_type<int>((as_type<uint>(x_153) + as_type<uint>(1)));
-    }
-  }
-  float const x_155 = result;
-  return x_155;
-}
-
-void main_1(constant buf0& x_13, constant buf1& x_20, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  float3 x_58 = 0.0f;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_60 = x_13.resolution.x;
-  thirty_two_1 = rint((x_60 / 8.0f));
-  float const x_64 = (*(tint_symbol_3)).x;
-  param = x_64;
-  float const x_65 = thirty_two_1;
-  param_1 = x_65;
-  float const x_66 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_66;
-  float const x_69 = (*(tint_symbol_3)).y;
-  param_2 = x_69;
-  float const x_70 = thirty_two_1;
-  param_3 = x_70;
-  float const x_71 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_71;
-  float const x_74 = c.x;
-  float const x_76 = c.y;
-  c.z = (x_74 + x_76);
-  i_1 = 0;
-  while (true) {
-    int const x_83 = i_1;
-    if ((x_83 < 3)) {
-    } else {
-      break;
-    }
-    int const x_86 = i_1;
-    float const x_88 = c[x_86];
-    if ((x_88 >= 1.0f)) {
-      int const x_92 = i_1;
-      int const x_93 = i_1;
-      float const x_95 = c[x_93];
-      int const x_96 = i_1;
-      float const x_98 = c[x_96];
-      c[x_92] = (x_95 * x_98);
-    }
-    {
-      int const x_101 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-    }
-  }
-  float const x_104 = x_20.injectionSwitch.x;
-  float const x_106 = x_20.injectionSwitch.y;
-  if ((x_104 < x_106)) {
-    float3 const x_111 = c;
-    x_58 = fabs(x_111);
-  } else {
-    float3 const x_113 = c;
-    x_58 = x_113;
-  }
-  float3 const x_114 = x_58;
-  float3 const x_115 = normalize(x_114);
-  *(tint_symbol_4) = float4(x_115.x, x_115.y, x_115.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, constant buf1& x_20, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_13, x_20, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]], constant buf1& x_20 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, x_20, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.spvasm
deleted file mode 100644
index 21e010e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,300 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 191
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_20 "x_20"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %result "result"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %thirty_two_1 "thirty_two_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %i_1 "i_1"
-               OpName %x_58 "x_58"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_20 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %84 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %91 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-        %102 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %178 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %18
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %23 = OpLabel
-     %result = OpVariable %_ptr_Function_float Function %25
-          %i = OpVariable %_ptr_Function_int Function %29
-               OpStore %result %float_n0_5
-               OpStore %i %int_1
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %38 = OpSLessThan %bool %36 %int_800
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %33
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpSMod %int %43 %int_32
-         %47 = OpIEqual %bool %45 %int_0
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-         %51 = OpLoad %float %result
-         %53 = OpFAdd %float %51 %float_0_400000006
-               OpStore %result %53
-               OpBranch %48
-         %50 = OpLabel
-         %54 = OpLoad %int %i
-         %56 = OpLoad %float %thirty_two
-         %57 = OpConvertSToF %float %54
-         %58 = OpExtInst %float %59 RoundEven %56
-         %61 = OpConvertSToF %float %54
-         %62 = OpExtInst %float %59 RoundEven %56
-         %63 = OpFDiv %float %61 %62
-         %60 = OpExtInst %float %59 Floor %63
-         %64 = OpFMul %float %58 %60
-         %65 = OpFSub %float %57 %64
-         %67 = OpFOrdLessThanEqual %bool %65 %float_0_00999999978
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %70 = OpLoad %float %result
-         %72 = OpFAdd %float %70 %float_100
-               OpStore %result %72
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-         %73 = OpLoad %int %i
-         %75 = OpLoad %float %limit
-         %76 = OpConvertSToF %float %73
-         %77 = OpFOrdGreaterThanEqual %bool %76 %75
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %78
-         %79 = OpLabel
-         %80 = OpLoad %float %result
-               OpReturnValue %80
-         %78 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-         %81 = OpLoad %int %i
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %i %82
-               OpBranch %32
-         %33 = OpLabel
-         %83 = OpLoad %float %result
-               OpReturnValue %83
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %84
-         %87 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %91
-%thirty_two_1 = OpVariable %_ptr_Function_float Function %25
-      %param = OpVariable %_ptr_Function_float Function %25
-    %param_1 = OpVariable %_ptr_Function_float Function %25
-    %param_2 = OpVariable %_ptr_Function_float Function %25
-    %param_3 = OpVariable %_ptr_Function_float Function %25
-        %i_1 = OpVariable %_ptr_Function_int Function %29
-       %x_58 = OpVariable %_ptr_Function_v3float Function %91
-               OpStore %c %102
-        %106 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-        %107 = OpLoad %float %106
-        %109 = OpFDiv %float %107 %float_8
-        %108 = OpExtInst %float %59 RoundEven %109
-               OpStore %thirty_two_1 %108
-        %111 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %112 = OpLoad %float %111
-               OpStore %param %112
-        %113 = OpLoad %float %thirty_two_1
-               OpStore %param_1 %113
-        %114 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %117 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %117 %114
-        %119 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %120 = OpLoad %float %119
-               OpStore %param_2 %120
-        %121 = OpLoad %float %thirty_two_1
-               OpStore %param_3 %121
-        %122 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %125 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %125 %122
-        %126 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %127 = OpLoad %float %126
-        %128 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %129 = OpLoad %float %128
-        %131 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %132 = OpFAdd %float %127 %129
-               OpStore %131 %132
-               OpStore %i_1 %int_0
-               OpBranch %133
-        %133 = OpLabel
-               OpLoopMerge %134 %135 None
-               OpBranch %136
-        %136 = OpLabel
-        %137 = OpLoad %int %i_1
-        %139 = OpSLessThan %bool %137 %int_3
-               OpSelectionMerge %140 None
-               OpBranchConditional %139 %141 %142
-        %141 = OpLabel
-               OpBranch %140
-        %142 = OpLabel
-               OpBranch %134
-        %140 = OpLabel
-        %143 = OpLoad %int %i_1
-        %144 = OpAccessChain %_ptr_Function_float %c %143
-        %145 = OpLoad %float %144
-        %147 = OpFOrdGreaterThanEqual %bool %145 %float_1
-               OpSelectionMerge %148 None
-               OpBranchConditional %147 %149 %148
-        %149 = OpLabel
-        %150 = OpLoad %int %i_1
-        %151 = OpLoad %int %i_1
-        %152 = OpAccessChain %_ptr_Function_float %c %151
-        %153 = OpLoad %float %152
-        %154 = OpLoad %int %i_1
-        %155 = OpAccessChain %_ptr_Function_float %c %154
-        %156 = OpLoad %float %155
-        %157 = OpAccessChain %_ptr_Function_float %c %150
-        %158 = OpFMul %float %153 %156
-               OpStore %157 %158
-               OpBranch %148
-        %148 = OpLabel
-               OpBranch %135
-        %135 = OpLabel
-        %159 = OpLoad %int %i_1
-        %160 = OpIAdd %int %159 %int_1
-               OpStore %i_1 %160
-               OpBranch %133
-        %134 = OpLabel
-        %161 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_0 %uint_0
-        %162 = OpLoad %float %161
-        %163 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_0 %uint_1
-        %164 = OpLoad %float %163
-        %165 = OpFOrdLessThan %bool %162 %164
-               OpSelectionMerge %166 None
-               OpBranchConditional %165 %167 %168
-        %167 = OpLabel
-        %169 = OpLoad %v3float %c
-        %170 = OpExtInst %v3float %59 FAbs %169
-               OpStore %x_58 %170
-               OpBranch %166
-        %168 = OpLabel
-        %171 = OpLoad %v3float %c
-               OpStore %x_58 %171
-               OpBranch %166
-        %166 = OpLabel
-        %172 = OpLoad %v3float %x_58
-        %173 = OpExtInst %v3float %59 Normalize %172
-        %174 = OpCompositeExtract %float %173 0
-        %175 = OpCompositeExtract %float %173 1
-        %176 = OpCompositeExtract %float %173 2
-        %177 = OpCompositeConstruct %v4float %174 %175 %176 %float_1
-               OpStore %x_GLF_color %177
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %178
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %182 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %183 = OpFunctionCall %void %main_1
-        %184 = OpLoad %v4float %x_GLF_color
-        %185 = OpCompositeConstruct %main_out %184
-               OpReturnValue %185
-               OpFunctionEnd
-       %main = OpFunction %void None %84
-        %187 = OpLabel
-        %189 = OpLoad %v4float %gl_FragCoord_param_1
-        %188 = OpFunctionCall %main_out %main_inner %189
-        %190 = OpCompositeExtract %v4float %188 0
-               OpStore %x_GLF_color_1_1 %190
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.wgsl
deleted file mode 100644
index b3b5f7c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,133 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_20 : buf1;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var result : f32;
-  var i : i32;
-  result = -0.5;
-  i = 1;
-  loop {
-    let x_125 : i32 = i;
-    if ((x_125 < 800)) {
-    } else {
-      break;
-    }
-    let x_128 : i32 = i;
-    if (((x_128 % 32) == 0)) {
-      let x_134 : f32 = result;
-      result = (x_134 + 0.400000006);
-    } else {
-      let x_136 : i32 = i;
-      let x_138 : f32 = *(thirty_two);
-      if (((f32(x_136) - (round(x_138) * floor((f32(x_136) / round(x_138))))) <= 0.01)) {
-        let x_144 : f32 = result;
-        result = (x_144 + 100.0);
-      }
-    }
-    let x_146 : i32 = i;
-    let x_148 : f32 = *(limit);
-    if ((f32(x_146) >= x_148)) {
-      let x_152 : f32 = result;
-      return x_152;
-    }
-
-    continuing {
-      let x_153 : i32 = i;
-      i = (x_153 + 1);
-    }
-  }
-  let x_155 : f32 = result;
-  return x_155;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var thirty_two_1 : f32;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var i_1 : i32;
-  var x_58 : vec3<f32>;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_60 : f32 = x_13.resolution.x;
-  thirty_two_1 = round((x_60 / 8.0));
-  let x_64 : f32 = gl_FragCoord.x;
-  param = x_64;
-  let x_65 : f32 = thirty_two_1;
-  param_1 = x_65;
-  let x_66 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_66;
-  let x_69 : f32 = gl_FragCoord.y;
-  param_2 = x_69;
-  let x_70 : f32 = thirty_two_1;
-  param_3 = x_70;
-  let x_71 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_71;
-  let x_74 : f32 = c.x;
-  let x_76 : f32 = c.y;
-  c.z = (x_74 + x_76);
-  i_1 = 0;
-  loop {
-    let x_83 : i32 = i_1;
-    if ((x_83 < 3)) {
-    } else {
-      break;
-    }
-    let x_86 : i32 = i_1;
-    let x_88 : f32 = c[x_86];
-    if ((x_88 >= 1.0)) {
-      let x_92 : i32 = i_1;
-      let x_93 : i32 = i_1;
-      let x_95 : f32 = c[x_93];
-      let x_96 : i32 = i_1;
-      let x_98 : f32 = c[x_96];
-      c[x_92] = (x_95 * x_98);
-    }
-
-    continuing {
-      let x_101 : i32 = i_1;
-      i_1 = (x_101 + 1);
-    }
-  }
-  let x_104 : f32 = x_20.injectionSwitch.x;
-  let x_106 : f32 = x_20.injectionSwitch.y;
-  if ((x_104 < x_106)) {
-    let x_111 : vec3<f32> = c;
-    x_58 = abs(x_111);
-  } else {
-    let x_113 : vec3<f32> = c;
-    x_58 = x_113;
-  }
-  let x_114 : vec3<f32> = x_58;
-  let x_115 : vec3<f32> = normalize(x_114);
-  x_GLF_color = vec4<f32>(x_115.x, x_115.y, x_115.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.hlsl
deleted file mode 100644
index 93d5a9d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,111 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_20 : register(b1, space0) {
-  uint4 x_20[1];
-};
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  {
-    for(; (i < 800); i = (i + 1)) {
-      if (((i % 32) == 0)) {
-        result = (result + 0.400000006f);
-      } else {
-        const int x_136 = i;
-        const float x_138 = thirty_two;
-        if (((float(x_136) % round(x_138)) <= 0.01f)) {
-          result = (result + 100.0f);
-        }
-      }
-      const int x_146 = i;
-      const float x_148 = limit;
-      if ((float(x_146) >= x_148)) {
-        return result;
-      }
-    }
-  }
-  return result;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  float3 x_58 = float3(0.0f, 0.0f, 0.0f);
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_60 = asfloat(x_13[0].x);
-  thirty_two_1 = round((x_60 / 8.0f));
-  const float x_64 = gl_FragCoord.x;
-  param = x_64;
-  param_1 = thirty_two_1;
-  const float x_66 = compute_value_f1_f1_(param, param_1);
-  c.x = x_66;
-  const float x_69 = gl_FragCoord.y;
-  param_2 = x_69;
-  param_3 = thirty_two_1;
-  const float x_71 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_71;
-  const float x_74 = c.x;
-  const float x_76 = c.y;
-  c.z = (x_74 + x_76);
-  i_1 = 0;
-  {
-    for(; (i_1 < 3); i_1 = (i_1 + 1)) {
-      const float x_88 = c[i_1];
-      if ((x_88 >= 1.0f)) {
-        const int x_92 = i_1;
-        const float x_95 = c[i_1];
-        const float x_98 = c[i_1];
-        set_float3(c, x_92, (x_95 * x_98));
-      }
-    }
-  }
-  const float x_104 = asfloat(x_20[0].x);
-  const float x_106 = asfloat(x_20[0].y);
-  if ((x_104 < x_106)) {
-    x_58 = abs(c);
-  } else {
-    x_58 = c;
-  }
-  const float3 x_115 = normalize(x_58);
-  x_GLF_color = float4(x_115.x, x_115.y, x_115.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.msl
deleted file mode 100755
index 5416651..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.msl
+++ /dev/null
@@ -1,134 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  while (true) {
-    int const x_125 = i;
-    if ((x_125 < 800)) {
-    } else {
-      break;
-    }
-    int const x_128 = i;
-    if (((x_128 % 32) == 0)) {
-      float const x_134 = result;
-      result = (x_134 + 0.400000006f);
-    } else {
-      int const x_136 = i;
-      float const x_138 = *(thirty_two);
-      if ((fmod(float(x_136), rint(x_138)) <= 0.01f)) {
-        float const x_144 = result;
-        result = (x_144 + 100.0f);
-      }
-    }
-    int const x_146 = i;
-    float const x_148 = *(limit);
-    if ((float(x_146) >= x_148)) {
-      float const x_152 = result;
-      return x_152;
-    }
-    {
-      int const x_153 = i;
-      i = as_type<int>((as_type<uint>(x_153) + as_type<uint>(1)));
-    }
-  }
-  float const x_155 = result;
-  return x_155;
-}
-
-void main_1(constant buf0& x_13, constant buf1& x_20, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  float3 x_58 = 0.0f;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_60 = x_13.resolution.x;
-  thirty_two_1 = rint((x_60 / 8.0f));
-  float const x_64 = (*(tint_symbol_3)).x;
-  param = x_64;
-  float const x_65 = thirty_two_1;
-  param_1 = x_65;
-  float const x_66 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_66;
-  float const x_69 = (*(tint_symbol_3)).y;
-  param_2 = x_69;
-  float const x_70 = thirty_two_1;
-  param_3 = x_70;
-  float const x_71 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_71;
-  float const x_74 = c.x;
-  float const x_76 = c.y;
-  c.z = (x_74 + x_76);
-  i_1 = 0;
-  while (true) {
-    int const x_83 = i_1;
-    if ((x_83 < 3)) {
-    } else {
-      break;
-    }
-    int const x_86 = i_1;
-    float const x_88 = c[x_86];
-    if ((x_88 >= 1.0f)) {
-      int const x_92 = i_1;
-      int const x_93 = i_1;
-      float const x_95 = c[x_93];
-      int const x_96 = i_1;
-      float const x_98 = c[x_96];
-      c[x_92] = (x_95 * x_98);
-    }
-    {
-      int const x_101 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-    }
-  }
-  float const x_104 = x_20.injectionSwitch.x;
-  float const x_106 = x_20.injectionSwitch.y;
-  if ((x_104 < x_106)) {
-    float3 const x_111 = c;
-    x_58 = fabs(x_111);
-  } else {
-    float3 const x_113 = c;
-    x_58 = x_113;
-  }
-  float3 const x_114 = x_58;
-  float3 const x_115 = normalize(x_114);
-  *(tint_symbol_4) = float4(x_115.x, x_115.y, x_115.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, constant buf1& x_20, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_13, x_20, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]], constant buf1& x_20 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, x_20, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.spvasm
deleted file mode 100644
index b918afc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,295 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 186
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_20 "x_20"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %result "result"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %thirty_two_1 "thirty_two_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %i_1 "i_1"
-               OpName %x_58 "x_58"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_20 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %79 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %86 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %97 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %173 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %18
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %23 = OpLabel
-     %result = OpVariable %_ptr_Function_float Function %25
-          %i = OpVariable %_ptr_Function_int Function %29
-               OpStore %result %float_n0_5
-               OpStore %i %int_1
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %38 = OpSLessThan %bool %36 %int_800
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %33
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpSMod %int %43 %int_32
-         %47 = OpIEqual %bool %45 %int_0
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-         %51 = OpLoad %float %result
-         %53 = OpFAdd %float %51 %float_0_400000006
-               OpStore %result %53
-               OpBranch %48
-         %50 = OpLabel
-         %54 = OpLoad %int %i
-         %56 = OpLoad %float %thirty_two
-         %57 = OpConvertSToF %float %54
-         %58 = OpExtInst %float %59 RoundEven %56
-         %60 = OpFRem %float %57 %58
-         %62 = OpFOrdLessThanEqual %bool %60 %float_0_00999999978
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %63
-         %64 = OpLabel
-         %65 = OpLoad %float %result
-         %67 = OpFAdd %float %65 %float_100
-               OpStore %result %67
-               OpBranch %63
-         %63 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-         %68 = OpLoad %int %i
-         %70 = OpLoad %float %limit
-         %71 = OpConvertSToF %float %68
-         %72 = OpFOrdGreaterThanEqual %bool %71 %70
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpLoad %float %result
-               OpReturnValue %75
-         %73 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-         %76 = OpLoad %int %i
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %i %77
-               OpBranch %32
-         %33 = OpLabel
-         %78 = OpLoad %float %result
-               OpReturnValue %78
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %79
-         %82 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %86
-%thirty_two_1 = OpVariable %_ptr_Function_float Function %25
-      %param = OpVariable %_ptr_Function_float Function %25
-    %param_1 = OpVariable %_ptr_Function_float Function %25
-    %param_2 = OpVariable %_ptr_Function_float Function %25
-    %param_3 = OpVariable %_ptr_Function_float Function %25
-        %i_1 = OpVariable %_ptr_Function_int Function %29
-       %x_58 = OpVariable %_ptr_Function_v3float Function %86
-               OpStore %c %97
-        %101 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-        %102 = OpLoad %float %101
-        %104 = OpFDiv %float %102 %float_8
-        %103 = OpExtInst %float %59 RoundEven %104
-               OpStore %thirty_two_1 %103
-        %106 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %107 = OpLoad %float %106
-               OpStore %param %107
-        %108 = OpLoad %float %thirty_two_1
-               OpStore %param_1 %108
-        %109 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %112 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %112 %109
-        %114 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %115 = OpLoad %float %114
-               OpStore %param_2 %115
-        %116 = OpLoad %float %thirty_two_1
-               OpStore %param_3 %116
-        %117 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %120 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %120 %117
-        %121 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %122 = OpLoad %float %121
-        %123 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %124 = OpLoad %float %123
-        %126 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %127 = OpFAdd %float %122 %124
-               OpStore %126 %127
-               OpStore %i_1 %int_0
-               OpBranch %128
-        %128 = OpLabel
-               OpLoopMerge %129 %130 None
-               OpBranch %131
-        %131 = OpLabel
-        %132 = OpLoad %int %i_1
-        %134 = OpSLessThan %bool %132 %int_3
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %137
-        %136 = OpLabel
-               OpBranch %135
-        %137 = OpLabel
-               OpBranch %129
-        %135 = OpLabel
-        %138 = OpLoad %int %i_1
-        %139 = OpAccessChain %_ptr_Function_float %c %138
-        %140 = OpLoad %float %139
-        %142 = OpFOrdGreaterThanEqual %bool %140 %float_1
-               OpSelectionMerge %143 None
-               OpBranchConditional %142 %144 %143
-        %144 = OpLabel
-        %145 = OpLoad %int %i_1
-        %146 = OpLoad %int %i_1
-        %147 = OpAccessChain %_ptr_Function_float %c %146
-        %148 = OpLoad %float %147
-        %149 = OpLoad %int %i_1
-        %150 = OpAccessChain %_ptr_Function_float %c %149
-        %151 = OpLoad %float %150
-        %152 = OpAccessChain %_ptr_Function_float %c %145
-        %153 = OpFMul %float %148 %151
-               OpStore %152 %153
-               OpBranch %143
-        %143 = OpLabel
-               OpBranch %130
-        %130 = OpLabel
-        %154 = OpLoad %int %i_1
-        %155 = OpIAdd %int %154 %int_1
-               OpStore %i_1 %155
-               OpBranch %128
-        %129 = OpLabel
-        %156 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_0 %uint_0
-        %157 = OpLoad %float %156
-        %158 = OpAccessChain %_ptr_Uniform_float %x_20 %uint_0 %uint_1
-        %159 = OpLoad %float %158
-        %160 = OpFOrdLessThan %bool %157 %159
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %163
-        %162 = OpLabel
-        %164 = OpLoad %v3float %c
-        %165 = OpExtInst %v3float %59 FAbs %164
-               OpStore %x_58 %165
-               OpBranch %161
-        %163 = OpLabel
-        %166 = OpLoad %v3float %c
-               OpStore %x_58 %166
-               OpBranch %161
-        %161 = OpLabel
-        %167 = OpLoad %v3float %x_58
-        %168 = OpExtInst %v3float %59 Normalize %167
-        %169 = OpCompositeExtract %float %168 0
-        %170 = OpCompositeExtract %float %168 1
-        %171 = OpCompositeExtract %float %168 2
-        %172 = OpCompositeConstruct %v4float %169 %170 %171 %float_1
-               OpStore %x_GLF_color %172
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %173
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %177 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %178 = OpFunctionCall %void %main_1
-        %179 = OpLoad %v4float %x_GLF_color
-        %180 = OpCompositeConstruct %main_out %179
-               OpReturnValue %180
-               OpFunctionEnd
-       %main = OpFunction %void None %79
-        %182 = OpLabel
-        %184 = OpLoad %v4float %gl_FragCoord_param_1
-        %183 = OpFunctionCall %main_out %main_inner %184
-        %185 = OpCompositeExtract %v4float %183 0
-               OpStore %x_GLF_color_1_1 %185
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.wgsl
deleted file mode 100644
index 60de1ab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-injected-conditional-true/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,133 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_20 : buf1;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var result : f32;
-  var i : i32;
-  result = -0.5;
-  i = 1;
-  loop {
-    let x_125 : i32 = i;
-    if ((x_125 < 800)) {
-    } else {
-      break;
-    }
-    let x_128 : i32 = i;
-    if (((x_128 % 32) == 0)) {
-      let x_134 : f32 = result;
-      result = (x_134 + 0.400000006);
-    } else {
-      let x_136 : i32 = i;
-      let x_138 : f32 = *(thirty_two);
-      if (((f32(x_136) % round(x_138)) <= 0.01)) {
-        let x_144 : f32 = result;
-        result = (x_144 + 100.0);
-      }
-    }
-    let x_146 : i32 = i;
-    let x_148 : f32 = *(limit);
-    if ((f32(x_146) >= x_148)) {
-      let x_152 : f32 = result;
-      return x_152;
-    }
-
-    continuing {
-      let x_153 : i32 = i;
-      i = (x_153 + 1);
-    }
-  }
-  let x_155 : f32 = result;
-  return x_155;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var thirty_two_1 : f32;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var i_1 : i32;
-  var x_58 : vec3<f32>;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_60 : f32 = x_13.resolution.x;
-  thirty_two_1 = round((x_60 / 8.0));
-  let x_64 : f32 = gl_FragCoord.x;
-  param = x_64;
-  let x_65 : f32 = thirty_two_1;
-  param_1 = x_65;
-  let x_66 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_66;
-  let x_69 : f32 = gl_FragCoord.y;
-  param_2 = x_69;
-  let x_70 : f32 = thirty_two_1;
-  param_3 = x_70;
-  let x_71 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_71;
-  let x_74 : f32 = c.x;
-  let x_76 : f32 = c.y;
-  c.z = (x_74 + x_76);
-  i_1 = 0;
-  loop {
-    let x_83 : i32 = i_1;
-    if ((x_83 < 3)) {
-    } else {
-      break;
-    }
-    let x_86 : i32 = i_1;
-    let x_88 : f32 = c[x_86];
-    if ((x_88 >= 1.0)) {
-      let x_92 : i32 = i_1;
-      let x_93 : i32 = i_1;
-      let x_95 : f32 = c[x_93];
-      let x_96 : i32 = i_1;
-      let x_98 : f32 = c[x_96];
-      c[x_92] = (x_95 * x_98);
-    }
-
-    continuing {
-      let x_101 : i32 = i_1;
-      i_1 = (x_101 + 1);
-    }
-  }
-  let x_104 : f32 = x_20.injectionSwitch.x;
-  let x_106 : f32 = x_20.injectionSwitch.y;
-  if ((x_104 < x_106)) {
-    let x_111 : vec3<f32> = c;
-    x_58 = abs(x_111);
-  } else {
-    let x_113 : vec3<f32> = c;
-    x_58 = x_113;
-  }
-  let x_114 : vec3<f32> = x_58;
-  let x_115 : vec3<f32> = normalize(x_114);
-  x_GLF_color = vec4<f32>(x_115.x, x_115.y, x_115.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f1fa426..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,128 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float x_91 = 0.0f;
-  float x_91_phi = 0.0f;
-  int x_94_phi = 0;
-  x_91_phi = -0.5f;
-  x_94_phi = 1;
-  while (true) {
-    float x_104 = 0.0f;
-    float x_113 = 0.0f;
-    int x_95 = 0;
-    float x_92_phi = 0.0f;
-    x_91 = x_91_phi;
-    const int x_94 = x_94_phi;
-    if ((x_94 < 800)) {
-    } else {
-      break;
-    }
-    float x_112 = 0.0f;
-    float x_113_phi = 0.0f;
-    if (((x_94 % 32) == 0)) {
-      x_104 = (x_91 + 0.400000006f);
-      x_92_phi = x_104;
-    } else {
-      const float x_106 = thirty_two;
-      x_113_phi = x_91;
-      if (((float(x_94) - (round(x_106) * floor((float(x_94) / round(x_106))))) <= 0.01f)) {
-        x_112 = (x_91 + 100.0f);
-        x_113_phi = x_112;
-      }
-      x_113 = x_113_phi;
-      x_92_phi = x_113;
-    }
-    float x_92 = 0.0f;
-    x_92 = x_92_phi;
-    const float x_115 = limit;
-    if ((float(x_94) >= x_115)) {
-      return x_92;
-    }
-    {
-      x_95 = (x_94 + 1);
-      x_91_phi = x_92;
-      x_94_phi = x_95;
-    }
-  }
-  return x_91;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int x_68_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_52 = asfloat(x_10[0].x);
-  const float x_54 = round((x_52 * 0.125f));
-  const float x_56 = gl_FragCoord.x;
-  param = x_56;
-  param_1 = x_54;
-  const float x_57 = compute_value_f1_f1_(param, param_1);
-  c.x = x_57;
-  const float x_60 = gl_FragCoord.y;
-  param_2 = x_60;
-  param_3 = x_54;
-  const float x_61 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_61;
-  const float x_63 = c.x;
-  const float x_64 = c.y;
-  c.z = (x_63 + x_64);
-  x_68_phi = 0;
-  while (true) {
-    int x_69 = 0;
-    const int x_68 = x_68_phi;
-    if ((x_68 < 3)) {
-    } else {
-      break;
-    }
-    const int x_74_save = x_68;
-    const float x_75 = c[x_74_save];
-    if ((x_75 >= 1.0f)) {
-      const float x_79 = c[x_74_save];
-      const float x_80 = c[x_74_save];
-      set_float3(c, x_74_save, (x_79 * x_80));
-    }
-    {
-      x_69 = (x_68 + 1);
-      x_68_phi = x_69;
-    }
-  }
-  const float3 x_84 = normalize(abs(c));
-  x_GLF_color = float4(x_84.x, x_84.y, x_84.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.msl
deleted file mode 100755
index 758aceb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,125 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float x_91 = 0.0f;
-  float x_91_phi = 0.0f;
-  int x_94_phi = 0;
-  x_91_phi = -0.5f;
-  x_94_phi = 1;
-  while (true) {
-    float x_104 = 0.0f;
-    float x_113 = 0.0f;
-    int x_95 = 0;
-    float x_92_phi = 0.0f;
-    x_91 = x_91_phi;
-    int const x_94 = x_94_phi;
-    if ((x_94 < 800)) {
-    } else {
-      break;
-    }
-    float x_112 = 0.0f;
-    float x_113_phi = 0.0f;
-    if (((x_94 % 32) == 0)) {
-      x_104 = (x_91 + 0.400000006f);
-      x_92_phi = x_104;
-    } else {
-      float const x_106 = *(thirty_two);
-      x_113_phi = x_91;
-      if (((float(x_94) - (rint(x_106) * floor((float(x_94) / rint(x_106))))) <= 0.01f)) {
-        x_112 = (x_91 + 100.0f);
-        x_113_phi = x_112;
-      }
-      x_113 = x_113_phi;
-      x_92_phi = x_113;
-    }
-    float x_92 = 0.0f;
-    x_92 = x_92_phi;
-    float const x_115 = *(limit);
-    if ((float(x_94) >= x_115)) {
-      return x_92;
-    }
-    {
-      x_95 = as_type<int>((as_type<uint>(x_94) + as_type<uint>(1)));
-      x_91_phi = x_92;
-      x_94_phi = x_95;
-    }
-  }
-  return x_91;
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int x_68_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_52 = x_10.resolution.x;
-  float const x_54 = rint((x_52 * 0.125f));
-  float const x_56 = (*(tint_symbol_3)).x;
-  param = x_56;
-  param_1 = x_54;
-  float const x_57 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_57;
-  float const x_60 = (*(tint_symbol_3)).y;
-  param_2 = x_60;
-  param_3 = x_54;
-  float const x_61 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_61;
-  float const x_63 = c.x;
-  float const x_64 = c.y;
-  c.z = (x_63 + x_64);
-  x_68_phi = 0;
-  while (true) {
-    int x_69 = 0;
-    int const x_68 = x_68_phi;
-    if ((x_68 < 3)) {
-    } else {
-      break;
-    }
-    int const x_74_save = x_68;
-    float const x_75 = c[x_74_save];
-    if ((x_75 >= 1.0f)) {
-      float const x_79 = c[x_74_save];
-      float const x_80 = c[x_74_save];
-      c[x_74_save] = (x_79 * x_80);
-    }
-    {
-      x_69 = as_type<int>((as_type<uint>(x_68) + as_type<uint>(1)));
-      x_68_phi = x_69;
-    }
-  }
-  float3 const x_82 = c;
-  float3 const x_84 = normalize(fabs(x_82));
-  *(tint_symbol_4) = float4(x_84.x, x_84.y, x_84.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 7a51a84..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,296 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 185
-; Schema: 0
-               OpCapability Shader
-         %64 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %x_91 "x_91"
-               OpName %x_91_phi "x_91_phi"
-               OpName %x_94_phi "x_94_phi"
-               OpName %x_104 "x_104"
-               OpName %x_113 "x_113"
-               OpName %x_95 "x_95"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_112 "x_112"
-               OpName %x_113_phi "x_113_phi"
-               OpName %x_92 "x_92"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %x_68_phi "x_68_phi"
-               OpName %x_69 "x_69"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %22 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %27 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %94 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %101 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-        %110 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %172 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %15
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %20 = OpLabel
-       %x_91 = OpVariable %_ptr_Function_float Function %22
-   %x_91_phi = OpVariable %_ptr_Function_float Function %22
-   %x_94_phi = OpVariable %_ptr_Function_int Function %27
-      %x_104 = OpVariable %_ptr_Function_float Function %22
-      %x_113 = OpVariable %_ptr_Function_float Function %22
-       %x_95 = OpVariable %_ptr_Function_int Function %27
-   %x_92_phi = OpVariable %_ptr_Function_float Function %22
-      %x_112 = OpVariable %_ptr_Function_float Function %22
-  %x_113_phi = OpVariable %_ptr_Function_float Function %22
-       %x_92 = OpVariable %_ptr_Function_float Function %22
-               OpStore %x_91_phi %float_n0_5
-               OpStore %x_94_phi %int_1
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %38 = OpLoad %float %x_91_phi
-               OpStore %x_91 %38
-         %39 = OpLoad %int %x_94_phi
-         %41 = OpSLessThan %bool %39 %int_800
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %31
-         %43 = OpLabel
-         %49 = OpSMod %int %39 %int_32
-         %51 = OpIEqual %bool %49 %int_0
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-         %55 = OpLoad %float %x_91
-         %57 = OpFAdd %float %55 %float_0_400000006
-               OpStore %x_104 %57
-         %58 = OpLoad %float %x_104
-               OpStore %x_92_phi %58
-               OpBranch %52
-         %54 = OpLabel
-         %60 = OpLoad %float %thirty_two
-         %61 = OpLoad %float %x_91
-               OpStore %x_113_phi %61
-         %62 = OpConvertSToF %float %39
-         %63 = OpExtInst %float %64 RoundEven %60
-         %66 = OpConvertSToF %float %39
-         %67 = OpExtInst %float %64 RoundEven %60
-         %68 = OpFDiv %float %66 %67
-         %65 = OpExtInst %float %64 Floor %68
-         %69 = OpFMul %float %63 %65
-         %70 = OpFSub %float %62 %69
-         %72 = OpFOrdLessThanEqual %bool %70 %float_0_00999999978
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpLoad %float %x_91
-         %77 = OpFAdd %float %75 %float_100
-               OpStore %x_112 %77
-         %78 = OpLoad %float %x_112
-               OpStore %x_113_phi %78
-               OpBranch %73
-         %73 = OpLabel
-         %79 = OpLoad %float %x_113_phi
-               OpStore %x_113 %79
-         %80 = OpLoad %float %x_113
-               OpStore %x_92_phi %80
-               OpBranch %52
-         %52 = OpLabel
-         %82 = OpLoad %float %x_92_phi
-               OpStore %x_92 %82
-         %84 = OpLoad %float %limit
-         %85 = OpConvertSToF %float %39
-         %86 = OpFOrdGreaterThanEqual %bool %85 %84
-               OpSelectionMerge %87 None
-               OpBranchConditional %86 %88 %87
-         %88 = OpLabel
-         %89 = OpLoad %float %x_92
-               OpReturnValue %89
-         %87 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %90 = OpIAdd %int %39 %int_1
-               OpStore %x_95 %90
-         %91 = OpLoad %float %x_92
-               OpStore %x_91_phi %91
-         %92 = OpLoad %int %x_95
-               OpStore %x_94_phi %92
-               OpBranch %30
-         %31 = OpLabel
-         %93 = OpLoad %float %x_91
-               OpReturnValue %93
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %94
-         %97 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %101
-      %param = OpVariable %_ptr_Function_float Function %22
-    %param_1 = OpVariable %_ptr_Function_float Function %22
-    %param_2 = OpVariable %_ptr_Function_float Function %22
-    %param_3 = OpVariable %_ptr_Function_float Function %22
-   %x_68_phi = OpVariable %_ptr_Function_int Function %27
-       %x_69 = OpVariable %_ptr_Function_int Function %27
-               OpStore %c %110
-        %114 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %115 = OpLoad %float %114
-        %118 = OpFMul %float %115 %float_0_125
-        %116 = OpExtInst %float %64 RoundEven %118
-        %120 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %121 = OpLoad %float %120
-               OpStore %param %121
-               OpStore %param_1 %116
-        %122 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %125 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %125 %122
-        %127 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %128 = OpLoad %float %127
-               OpStore %param_2 %128
-               OpStore %param_3 %116
-        %129 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %132 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %132 %129
-        %133 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %134 = OpLoad %float %133
-        %135 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %136 = OpLoad %float %135
-        %138 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %139 = OpFAdd %float %134 %136
-               OpStore %138 %139
-               OpStore %x_68_phi %int_0
-               OpBranch %140
-        %140 = OpLabel
-               OpLoopMerge %141 %142 None
-               OpBranch %143
-        %143 = OpLabel
-        %145 = OpLoad %int %x_68_phi
-        %147 = OpSLessThan %bool %145 %int_3
-               OpSelectionMerge %148 None
-               OpBranchConditional %147 %149 %150
-        %149 = OpLabel
-               OpBranch %148
-        %150 = OpLabel
-               OpBranch %141
-        %148 = OpLabel
-        %151 = OpAccessChain %_ptr_Function_float %c %145
-        %152 = OpLoad %float %151
-        %154 = OpFOrdGreaterThanEqual %bool %152 %float_1
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %155
-        %156 = OpLabel
-        %157 = OpAccessChain %_ptr_Function_float %c %145
-        %158 = OpLoad %float %157
-        %159 = OpAccessChain %_ptr_Function_float %c %145
-        %160 = OpLoad %float %159
-        %161 = OpAccessChain %_ptr_Function_float %c %145
-        %162 = OpFMul %float %158 %160
-               OpStore %161 %162
-               OpBranch %155
-        %155 = OpLabel
-               OpBranch %142
-        %142 = OpLabel
-        %163 = OpIAdd %int %145 %int_1
-               OpStore %x_69 %163
-        %164 = OpLoad %int %x_69
-               OpStore %x_68_phi %164
-               OpBranch %140
-        %141 = OpLabel
-        %165 = OpLoad %v3float %c
-        %167 = OpExtInst %v3float %64 FAbs %165
-        %166 = OpExtInst %v3float %64 Normalize %167
-        %168 = OpCompositeExtract %float %166 0
-        %169 = OpCompositeExtract %float %166 1
-        %170 = OpCompositeExtract %float %166 2
-        %171 = OpCompositeConstruct %v4float %168 %169 %170 %float_1
-               OpStore %x_GLF_color %171
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %172
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %176 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %177 = OpFunctionCall %void %main_1
-        %178 = OpLoad %v4float %x_GLF_color
-        %179 = OpCompositeConstruct %main_out %178
-               OpReturnValue %179
-               OpFunctionEnd
-       %main = OpFunction %void None %94
-        %181 = OpLabel
-        %183 = OpLoad %v4float %gl_FragCoord_param_1
-        %182 = OpFunctionCall %main_out %main_inner %183
-        %184 = OpCompositeExtract %v4float %182 0
-               OpStore %x_GLF_color_1_1 %184
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5452729..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,122 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var x_91 : f32;
-  var x_91_phi : f32;
-  var x_94_phi : i32;
-  x_91_phi = -0.5;
-  x_94_phi = 1;
-  loop {
-    var x_104 : f32;
-    var x_113 : f32;
-    var x_95 : i32;
-    var x_92_phi : f32;
-    x_91 = x_91_phi;
-    let x_94 : i32 = x_94_phi;
-    if ((x_94 < 800)) {
-    } else {
-      break;
-    }
-    var x_112 : f32;
-    var x_113_phi : f32;
-    if (((x_94 % 32) == 0)) {
-      x_104 = (x_91 + 0.400000006);
-      x_92_phi = x_104;
-    } else {
-      let x_106 : f32 = *(thirty_two);
-      x_113_phi = x_91;
-      if (((f32(x_94) - (round(x_106) * floor((f32(x_94) / round(x_106))))) <= 0.01)) {
-        x_112 = (x_91 + 100.0);
-        x_113_phi = x_112;
-      }
-      x_113 = x_113_phi;
-      x_92_phi = x_113;
-    }
-    var x_92 : f32;
-    x_92 = x_92_phi;
-    let x_115 : f32 = *(limit);
-    if ((f32(x_94) >= x_115)) {
-      return x_92;
-    }
-
-    continuing {
-      x_95 = (x_94 + 1);
-      x_91_phi = x_92;
-      x_94_phi = x_95;
-    }
-  }
-  return x_91;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var x_68_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_52 : f32 = x_10.resolution.x;
-  let x_54 : f32 = round((x_52 * 0.125));
-  let x_56 : f32 = gl_FragCoord.x;
-  param = x_56;
-  param_1 = x_54;
-  let x_57 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  let x_58 : ptr<function, f32> = &(c.x);
-  *(x_58) = x_57;
-  let x_60 : f32 = gl_FragCoord.y;
-  param_2 = x_60;
-  param_3 = x_54;
-  let x_61 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  let x_62 : ptr<function, f32> = &(c.y);
-  *(x_62) = x_61;
-  let x_63 : f32 = *(x_58);
-  let x_64 : f32 = *(x_62);
-  c.z = (x_63 + x_64);
-  x_68_phi = 0;
-  loop {
-    var x_69 : i32;
-    let x_68 : i32 = x_68_phi;
-    if ((x_68 < 3)) {
-    } else {
-      break;
-    }
-    let x_74 : ptr<function, f32> = &(c[x_68]);
-    let x_75 : f32 = *(x_74);
-    if ((x_75 >= 1.0)) {
-      let x_79 : f32 = *(x_74);
-      let x_80 : f32 = *(x_74);
-      *(x_74) = (x_79 * x_80);
-    }
-
-    continuing {
-      x_69 = (x_68 + 1);
-      x_68_phi = x_69;
-    }
-  }
-  let x_82 : vec3<f32> = c;
-  let x_84 : vec3<f32> = normalize(abs(x_82));
-  x_GLF_color = vec4<f32>(x_84.x, x_84.y, x_84.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 591ca1b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,128 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float x_91 = 0.0f;
-  float x_91_phi = 0.0f;
-  int x_94_phi = 0;
-  x_91_phi = -0.5f;
-  x_94_phi = 1;
-  while (true) {
-    float x_104 = 0.0f;
-    float x_113 = 0.0f;
-    int x_95 = 0;
-    float x_92_phi = 0.0f;
-    x_91 = x_91_phi;
-    const int x_94 = x_94_phi;
-    if ((x_94 < 800)) {
-    } else {
-      break;
-    }
-    float x_112 = 0.0f;
-    float x_113_phi = 0.0f;
-    if (((x_94 % 32) == 0)) {
-      x_104 = (x_91 + 0.400000006f);
-      x_92_phi = x_104;
-    } else {
-      const float x_106 = thirty_two;
-      x_113_phi = x_91;
-      if (((float(x_94) % round(x_106)) <= 0.01f)) {
-        x_112 = (x_91 + 100.0f);
-        x_113_phi = x_112;
-      }
-      x_113 = x_113_phi;
-      x_92_phi = x_113;
-    }
-    float x_92 = 0.0f;
-    x_92 = x_92_phi;
-    const float x_115 = limit;
-    if ((float(x_94) >= x_115)) {
-      return x_92;
-    }
-    {
-      x_95 = (x_94 + 1);
-      x_91_phi = x_92;
-      x_94_phi = x_95;
-    }
-  }
-  return x_91;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int x_68_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_52 = asfloat(x_10[0].x);
-  const float x_54 = round((x_52 * 0.125f));
-  const float x_56 = gl_FragCoord.x;
-  param = x_56;
-  param_1 = x_54;
-  const float x_57 = compute_value_f1_f1_(param, param_1);
-  c.x = x_57;
-  const float x_60 = gl_FragCoord.y;
-  param_2 = x_60;
-  param_3 = x_54;
-  const float x_61 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_61;
-  const float x_63 = c.x;
-  const float x_64 = c.y;
-  c.z = (x_63 + x_64);
-  x_68_phi = 0;
-  while (true) {
-    int x_69 = 0;
-    const int x_68 = x_68_phi;
-    if ((x_68 < 3)) {
-    } else {
-      break;
-    }
-    const int x_74_save = x_68;
-    const float x_75 = c[x_74_save];
-    if ((x_75 >= 1.0f)) {
-      const float x_79 = c[x_74_save];
-      const float x_80 = c[x_74_save];
-      set_float3(c, x_74_save, (x_79 * x_80));
-    }
-    {
-      x_69 = (x_68 + 1);
-      x_68_phi = x_69;
-    }
-  }
-  const float3 x_84 = normalize(abs(c));
-  x_GLF_color = float4(x_84.x, x_84.y, x_84.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.msl
deleted file mode 100755
index 702ff62..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,125 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float x_91 = 0.0f;
-  float x_91_phi = 0.0f;
-  int x_94_phi = 0;
-  x_91_phi = -0.5f;
-  x_94_phi = 1;
-  while (true) {
-    float x_104 = 0.0f;
-    float x_113 = 0.0f;
-    int x_95 = 0;
-    float x_92_phi = 0.0f;
-    x_91 = x_91_phi;
-    int const x_94 = x_94_phi;
-    if ((x_94 < 800)) {
-    } else {
-      break;
-    }
-    float x_112 = 0.0f;
-    float x_113_phi = 0.0f;
-    if (((x_94 % 32) == 0)) {
-      x_104 = (x_91 + 0.400000006f);
-      x_92_phi = x_104;
-    } else {
-      float const x_106 = *(thirty_two);
-      x_113_phi = x_91;
-      if ((fmod(float(x_94), rint(x_106)) <= 0.01f)) {
-        x_112 = (x_91 + 100.0f);
-        x_113_phi = x_112;
-      }
-      x_113 = x_113_phi;
-      x_92_phi = x_113;
-    }
-    float x_92 = 0.0f;
-    x_92 = x_92_phi;
-    float const x_115 = *(limit);
-    if ((float(x_94) >= x_115)) {
-      return x_92;
-    }
-    {
-      x_95 = as_type<int>((as_type<uint>(x_94) + as_type<uint>(1)));
-      x_91_phi = x_92;
-      x_94_phi = x_95;
-    }
-  }
-  return x_91;
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int x_68_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_52 = x_10.resolution.x;
-  float const x_54 = rint((x_52 * 0.125f));
-  float const x_56 = (*(tint_symbol_3)).x;
-  param = x_56;
-  param_1 = x_54;
-  float const x_57 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_57;
-  float const x_60 = (*(tint_symbol_3)).y;
-  param_2 = x_60;
-  param_3 = x_54;
-  float const x_61 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_61;
-  float const x_63 = c.x;
-  float const x_64 = c.y;
-  c.z = (x_63 + x_64);
-  x_68_phi = 0;
-  while (true) {
-    int x_69 = 0;
-    int const x_68 = x_68_phi;
-    if ((x_68 < 3)) {
-    } else {
-      break;
-    }
-    int const x_74_save = x_68;
-    float const x_75 = c[x_74_save];
-    if ((x_75 >= 1.0f)) {
-      float const x_79 = c[x_74_save];
-      float const x_80 = c[x_74_save];
-      c[x_74_save] = (x_79 * x_80);
-    }
-    {
-      x_69 = as_type<int>((as_type<uint>(x_68) + as_type<uint>(1)));
-      x_68_phi = x_69;
-    }
-  }
-  float3 const x_82 = c;
-  float3 const x_84 = normalize(fabs(x_82));
-  *(tint_symbol_4) = float4(x_84.x, x_84.y, x_84.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_10, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b82742a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,291 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 180
-; Schema: 0
-               OpCapability Shader
-         %64 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %x_91 "x_91"
-               OpName %x_91_phi "x_91_phi"
-               OpName %x_94_phi "x_94_phi"
-               OpName %x_104 "x_104"
-               OpName %x_113 "x_113"
-               OpName %x_95 "x_95"
-               OpName %x_92_phi "x_92_phi"
-               OpName %x_112 "x_112"
-               OpName %x_113_phi "x_113_phi"
-               OpName %x_92 "x_92"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %x_68_phi "x_68_phi"
-               OpName %x_69 "x_69"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %22 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %27 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %89 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %96 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-        %105 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %167 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %15
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %20 = OpLabel
-       %x_91 = OpVariable %_ptr_Function_float Function %22
-   %x_91_phi = OpVariable %_ptr_Function_float Function %22
-   %x_94_phi = OpVariable %_ptr_Function_int Function %27
-      %x_104 = OpVariable %_ptr_Function_float Function %22
-      %x_113 = OpVariable %_ptr_Function_float Function %22
-       %x_95 = OpVariable %_ptr_Function_int Function %27
-   %x_92_phi = OpVariable %_ptr_Function_float Function %22
-      %x_112 = OpVariable %_ptr_Function_float Function %22
-  %x_113_phi = OpVariable %_ptr_Function_float Function %22
-       %x_92 = OpVariable %_ptr_Function_float Function %22
-               OpStore %x_91_phi %float_n0_5
-               OpStore %x_94_phi %int_1
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %38 = OpLoad %float %x_91_phi
-               OpStore %x_91 %38
-         %39 = OpLoad %int %x_94_phi
-         %41 = OpSLessThan %bool %39 %int_800
-               OpSelectionMerge %43 None
-               OpBranchConditional %41 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %31
-         %43 = OpLabel
-         %49 = OpSMod %int %39 %int_32
-         %51 = OpIEqual %bool %49 %int_0
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-         %55 = OpLoad %float %x_91
-         %57 = OpFAdd %float %55 %float_0_400000006
-               OpStore %x_104 %57
-         %58 = OpLoad %float %x_104
-               OpStore %x_92_phi %58
-               OpBranch %52
-         %54 = OpLabel
-         %60 = OpLoad %float %thirty_two
-         %61 = OpLoad %float %x_91
-               OpStore %x_113_phi %61
-         %62 = OpConvertSToF %float %39
-         %63 = OpExtInst %float %64 RoundEven %60
-         %65 = OpFRem %float %62 %63
-         %67 = OpFOrdLessThanEqual %bool %65 %float_0_00999999978
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %70 = OpLoad %float %x_91
-         %72 = OpFAdd %float %70 %float_100
-               OpStore %x_112 %72
-         %73 = OpLoad %float %x_112
-               OpStore %x_113_phi %73
-               OpBranch %68
-         %68 = OpLabel
-         %74 = OpLoad %float %x_113_phi
-               OpStore %x_113 %74
-         %75 = OpLoad %float %x_113
-               OpStore %x_92_phi %75
-               OpBranch %52
-         %52 = OpLabel
-         %77 = OpLoad %float %x_92_phi
-               OpStore %x_92 %77
-         %79 = OpLoad %float %limit
-         %80 = OpConvertSToF %float %39
-         %81 = OpFOrdGreaterThanEqual %bool %80 %79
-               OpSelectionMerge %82 None
-               OpBranchConditional %81 %83 %82
-         %83 = OpLabel
-         %84 = OpLoad %float %x_92
-               OpReturnValue %84
-         %82 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %85 = OpIAdd %int %39 %int_1
-               OpStore %x_95 %85
-         %86 = OpLoad %float %x_92
-               OpStore %x_91_phi %86
-         %87 = OpLoad %int %x_95
-               OpStore %x_94_phi %87
-               OpBranch %30
-         %31 = OpLabel
-         %88 = OpLoad %float %x_91
-               OpReturnValue %88
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %89
-         %92 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %96
-      %param = OpVariable %_ptr_Function_float Function %22
-    %param_1 = OpVariable %_ptr_Function_float Function %22
-    %param_2 = OpVariable %_ptr_Function_float Function %22
-    %param_3 = OpVariable %_ptr_Function_float Function %22
-   %x_68_phi = OpVariable %_ptr_Function_int Function %27
-       %x_69 = OpVariable %_ptr_Function_int Function %27
-               OpStore %c %105
-        %109 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %110 = OpLoad %float %109
-        %113 = OpFMul %float %110 %float_0_125
-        %111 = OpExtInst %float %64 RoundEven %113
-        %115 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %116 = OpLoad %float %115
-               OpStore %param %116
-               OpStore %param_1 %111
-        %117 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %120 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %120 %117
-        %122 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %123 = OpLoad %float %122
-               OpStore %param_2 %123
-               OpStore %param_3 %111
-        %124 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %127 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %127 %124
-        %128 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %129 = OpLoad %float %128
-        %130 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %131 = OpLoad %float %130
-        %133 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %134 = OpFAdd %float %129 %131
-               OpStore %133 %134
-               OpStore %x_68_phi %int_0
-               OpBranch %135
-        %135 = OpLabel
-               OpLoopMerge %136 %137 None
-               OpBranch %138
-        %138 = OpLabel
-        %140 = OpLoad %int %x_68_phi
-        %142 = OpSLessThan %bool %140 %int_3
-               OpSelectionMerge %143 None
-               OpBranchConditional %142 %144 %145
-        %144 = OpLabel
-               OpBranch %143
-        %145 = OpLabel
-               OpBranch %136
-        %143 = OpLabel
-        %146 = OpAccessChain %_ptr_Function_float %c %140
-        %147 = OpLoad %float %146
-        %149 = OpFOrdGreaterThanEqual %bool %147 %float_1
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %150
-        %151 = OpLabel
-        %152 = OpAccessChain %_ptr_Function_float %c %140
-        %153 = OpLoad %float %152
-        %154 = OpAccessChain %_ptr_Function_float %c %140
-        %155 = OpLoad %float %154
-        %156 = OpAccessChain %_ptr_Function_float %c %140
-        %157 = OpFMul %float %153 %155
-               OpStore %156 %157
-               OpBranch %150
-        %150 = OpLabel
-               OpBranch %137
-        %137 = OpLabel
-        %158 = OpIAdd %int %140 %int_1
-               OpStore %x_69 %158
-        %159 = OpLoad %int %x_69
-               OpStore %x_68_phi %159
-               OpBranch %135
-        %136 = OpLabel
-        %160 = OpLoad %v3float %c
-        %162 = OpExtInst %v3float %64 FAbs %160
-        %161 = OpExtInst %v3float %64 Normalize %162
-        %163 = OpCompositeExtract %float %161 0
-        %164 = OpCompositeExtract %float %161 1
-        %165 = OpCompositeExtract %float %161 2
-        %166 = OpCompositeConstruct %v4float %163 %164 %165 %float_1
-               OpStore %x_GLF_color %166
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %167
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %171 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %172 = OpFunctionCall %void %main_1
-        %173 = OpLoad %v4float %x_GLF_color
-        %174 = OpCompositeConstruct %main_out %173
-               OpReturnValue %174
-               OpFunctionEnd
-       %main = OpFunction %void None %89
-        %176 = OpLabel
-        %178 = OpLoad %v4float %gl_FragCoord_param_1
-        %177 = OpFunctionCall %main_out %main_inner %178
-        %179 = OpCompositeExtract %v4float %177 0
-               OpStore %x_GLF_color_1_1 %179
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ba37d91..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,122 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var x_91 : f32;
-  var x_91_phi : f32;
-  var x_94_phi : i32;
-  x_91_phi = -0.5;
-  x_94_phi = 1;
-  loop {
-    var x_104 : f32;
-    var x_113 : f32;
-    var x_95 : i32;
-    var x_92_phi : f32;
-    x_91 = x_91_phi;
-    let x_94 : i32 = x_94_phi;
-    if ((x_94 < 800)) {
-    } else {
-      break;
-    }
-    var x_112 : f32;
-    var x_113_phi : f32;
-    if (((x_94 % 32) == 0)) {
-      x_104 = (x_91 + 0.400000006);
-      x_92_phi = x_104;
-    } else {
-      let x_106 : f32 = *(thirty_two);
-      x_113_phi = x_91;
-      if (((f32(x_94) % round(x_106)) <= 0.01)) {
-        x_112 = (x_91 + 100.0);
-        x_113_phi = x_112;
-      }
-      x_113 = x_113_phi;
-      x_92_phi = x_113;
-    }
-    var x_92 : f32;
-    x_92 = x_92_phi;
-    let x_115 : f32 = *(limit);
-    if ((f32(x_94) >= x_115)) {
-      return x_92;
-    }
-
-    continuing {
-      x_95 = (x_94 + 1);
-      x_91_phi = x_92;
-      x_94_phi = x_95;
-    }
-  }
-  return x_91;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var x_68_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_52 : f32 = x_10.resolution.x;
-  let x_54 : f32 = round((x_52 * 0.125));
-  let x_56 : f32 = gl_FragCoord.x;
-  param = x_56;
-  param_1 = x_54;
-  let x_57 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  let x_58 : ptr<function, f32> = &(c.x);
-  *(x_58) = x_57;
-  let x_60 : f32 = gl_FragCoord.y;
-  param_2 = x_60;
-  param_3 = x_54;
-  let x_61 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  let x_62 : ptr<function, f32> = &(c.y);
-  *(x_62) = x_61;
-  let x_63 : f32 = *(x_58);
-  let x_64 : f32 = *(x_62);
-  c.z = (x_63 + x_64);
-  x_68_phi = 0;
-  loop {
-    var x_69 : i32;
-    let x_68 : i32 = x_68_phi;
-    if ((x_68 < 3)) {
-    } else {
-      break;
-    }
-    let x_74 : ptr<function, f32> = &(c[x_68]);
-    let x_75 : f32 = *(x_74);
-    if ((x_75 >= 1.0)) {
-      let x_79 : f32 = *(x_74);
-      let x_80 : f32 = *(x_74);
-      *(x_74) = (x_79 * x_80);
-    }
-
-    continuing {
-      x_69 = (x_68 + 1);
-      x_68_phi = x_69;
-    }
-  }
-  let x_82 : vec3<f32> = c;
-  let x_84 : vec3<f32> = normalize(abs(x_82));
-  x_GLF_color = vec4<f32>(x_84.x, x_84.y, x_84.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.hlsl
deleted file mode 100644
index b9f1d3e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,138 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_16 : register(b1, space0) {
-  uint4 x_16[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float x_104 = 0.0f;
-  float x_104_phi = 0.0f;
-  int x_107_phi = 0;
-  x_104_phi = -0.5f;
-  x_107_phi = 1;
-  while (true) {
-    float x_126 = 0.0f;
-    float x_125 = 0.0f;
-    int x_108 = 0;
-    float x_105_phi = 0.0f;
-    x_104 = x_104_phi;
-    const int x_107 = x_107_phi;
-    if ((x_107 < 800)) {
-    } else {
-      break;
-    }
-    float x_124 = 0.0f;
-    float x_125_phi = 0.0f;
-    if (((x_107 % 32) == 0)) {
-      x_126 = (x_104 + 0.400000006f);
-      x_105_phi = x_126;
-    } else {
-      const float x_118 = thirty_two;
-      x_125_phi = x_104;
-      if (((float(x_107) - (round(x_118) * floor((float(x_107) / round(x_118))))) <= 0.01f)) {
-        x_124 = (x_104 + 100.0f);
-        x_125_phi = x_124;
-      }
-      x_125 = x_125_phi;
-      x_105_phi = x_125;
-    }
-    float x_105 = 0.0f;
-    x_105 = x_105_phi;
-    const float x_128 = limit;
-    if ((float(x_107) >= x_128)) {
-      return x_105;
-    }
-    {
-      x_108 = (x_107 + 1);
-      x_104_phi = x_105;
-      x_107_phi = x_108;
-    }
-  }
-  return x_104;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  float3 x_54 = float3(0.0f, 0.0f, 0.0f);
-  int x_74_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_56 = asfloat(x_10[0].x);
-  const float x_58 = round((x_56 * 0.125f));
-  const float x_60 = gl_FragCoord.x;
-  param = x_60;
-  param_1 = x_58;
-  const float x_61 = compute_value_f1_f1_(param, param_1);
-  c.x = x_61;
-  const float x_64 = gl_FragCoord.y;
-  param_2 = x_64;
-  param_3 = x_58;
-  const float x_65 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_65;
-  const float x_67 = c.x;
-  x_54 = c;
-  const float x_70 = x_54.y;
-  c.z = (x_67 + x_70);
-  x_74_phi = 0;
-  while (true) {
-    int x_75 = 0;
-    const int x_74 = x_74_phi;
-    if ((x_74 < 3)) {
-    } else {
-      break;
-    }
-    const int x_80_save = x_74;
-    const float x_81 = c[x_80_save];
-    if ((x_81 >= 1.0f)) {
-      const float x_86 = asfloat(x_16[0].x);
-      const float x_88 = asfloat(x_16[0].y);
-      if ((x_86 > x_88)) {
-        discard;
-      }
-      const float x_92 = c[x_80_save];
-      const float x_93 = c[x_80_save];
-      set_float3(c, x_80_save, (x_92 * x_93));
-    }
-    {
-      x_75 = (x_74 + 1);
-      x_74_phi = x_75;
-    }
-  }
-  const float3 x_97 = normalize(abs(c));
-  x_GLF_color = float4(x_97.x, x_97.y, x_97.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.msl
deleted file mode 100755
index 082ddb1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.msl
+++ /dev/null
@@ -1,136 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float x_104 = 0.0f;
-  float x_104_phi = 0.0f;
-  int x_107_phi = 0;
-  x_104_phi = -0.5f;
-  x_107_phi = 1;
-  while (true) {
-    float x_126 = 0.0f;
-    float x_125 = 0.0f;
-    int x_108 = 0;
-    float x_105_phi = 0.0f;
-    x_104 = x_104_phi;
-    int const x_107 = x_107_phi;
-    if ((x_107 < 800)) {
-    } else {
-      break;
-    }
-    float x_124 = 0.0f;
-    float x_125_phi = 0.0f;
-    if (((x_107 % 32) == 0)) {
-      x_126 = (x_104 + 0.400000006f);
-      x_105_phi = x_126;
-    } else {
-      float const x_118 = *(thirty_two);
-      x_125_phi = x_104;
-      if (((float(x_107) - (rint(x_118) * floor((float(x_107) / rint(x_118))))) <= 0.01f)) {
-        x_124 = (x_104 + 100.0f);
-        x_125_phi = x_124;
-      }
-      x_125 = x_125_phi;
-      x_105_phi = x_125;
-    }
-    float x_105 = 0.0f;
-    x_105 = x_105_phi;
-    float const x_128 = *(limit);
-    if ((float(x_107) >= x_128)) {
-      return x_105;
-    }
-    {
-      x_108 = as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)));
-      x_104_phi = x_105;
-      x_107_phi = x_108;
-    }
-  }
-  return x_104;
-}
-
-void main_1(constant buf0& x_10, constant buf1& x_16, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  float3 x_54 = 0.0f;
-  int x_74_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_56 = x_10.resolution.x;
-  float const x_58 = rint((x_56 * 0.125f));
-  float const x_60 = (*(tint_symbol_3)).x;
-  param = x_60;
-  param_1 = x_58;
-  float const x_61 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_61;
-  float const x_64 = (*(tint_symbol_3)).y;
-  param_2 = x_64;
-  param_3 = x_58;
-  float const x_65 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_65;
-  float const x_67 = c.x;
-  float3 const x_68 = c;
-  x_54 = x_68;
-  float const x_70 = x_54.y;
-  c.z = (x_67 + x_70);
-  x_74_phi = 0;
-  while (true) {
-    int x_75 = 0;
-    int const x_74 = x_74_phi;
-    if ((x_74 < 3)) {
-    } else {
-      break;
-    }
-    int const x_80_save = x_74;
-    float const x_81 = c[x_80_save];
-    if ((x_81 >= 1.0f)) {
-      float const x_86 = x_16.injectionSwitch.x;
-      float const x_88 = x_16.injectionSwitch.y;
-      if ((x_86 > x_88)) {
-        discard_fragment();
-      }
-      float const x_92 = c[x_80_save];
-      float const x_93 = c[x_80_save];
-      c[x_80_save] = (x_92 * x_93);
-    }
-    {
-      x_75 = as_type<int>((as_type<uint>(x_74) + as_type<uint>(1)));
-      x_74_phi = x_75;
-    }
-  }
-  float3 const x_95 = c;
-  float3 const x_97 = normalize(fabs(x_95));
-  *(tint_symbol_4) = float4(x_97.x, x_97.y, x_97.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, constant buf1& x_16, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_10, x_16, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]], constant buf1& x_16 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, x_16, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.spvasm
deleted file mode 100644
index 7219acd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,321 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 197
-; Schema: 0
-               OpCapability Shader
-         %67 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_16 "x_16"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %x_104 "x_104"
-               OpName %x_104_phi "x_104_phi"
-               OpName %x_107_phi "x_107_phi"
-               OpName %x_126 "x_126"
-               OpName %x_125 "x_125"
-               OpName %x_108 "x_108"
-               OpName %x_105_phi "x_105_phi"
-               OpName %x_124 "x_124"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_105 "x_105"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %x_54 "x_54"
-               OpName %x_74_phi "x_74_phi"
-               OpName %x_75 "x_75"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_16 NonWritable
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_16 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %97 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %104 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-        %114 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %184 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %18
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %23 = OpLabel
-      %x_104 = OpVariable %_ptr_Function_float Function %25
-  %x_104_phi = OpVariable %_ptr_Function_float Function %25
-  %x_107_phi = OpVariable %_ptr_Function_int Function %30
-      %x_126 = OpVariable %_ptr_Function_float Function %25
-      %x_125 = OpVariable %_ptr_Function_float Function %25
-      %x_108 = OpVariable %_ptr_Function_int Function %30
-  %x_105_phi = OpVariable %_ptr_Function_float Function %25
-      %x_124 = OpVariable %_ptr_Function_float Function %25
-  %x_125_phi = OpVariable %_ptr_Function_float Function %25
-      %x_105 = OpVariable %_ptr_Function_float Function %25
-               OpStore %x_104_phi %float_n0_5
-               OpStore %x_107_phi %int_1
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %41 = OpLoad %float %x_104_phi
-               OpStore %x_104 %41
-         %42 = OpLoad %int %x_107_phi
-         %44 = OpSLessThan %bool %42 %int_800
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %34
-         %46 = OpLabel
-         %52 = OpSMod %int %42 %int_32
-         %54 = OpIEqual %bool %52 %int_0
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-         %58 = OpLoad %float %x_104
-         %60 = OpFAdd %float %58 %float_0_400000006
-               OpStore %x_126 %60
-         %61 = OpLoad %float %x_126
-               OpStore %x_105_phi %61
-               OpBranch %55
-         %57 = OpLabel
-         %63 = OpLoad %float %thirty_two
-         %64 = OpLoad %float %x_104
-               OpStore %x_125_phi %64
-         %65 = OpConvertSToF %float %42
-         %66 = OpExtInst %float %67 RoundEven %63
-         %69 = OpConvertSToF %float %42
-         %70 = OpExtInst %float %67 RoundEven %63
-         %71 = OpFDiv %float %69 %70
-         %68 = OpExtInst %float %67 Floor %71
-         %72 = OpFMul %float %66 %68
-         %73 = OpFSub %float %65 %72
-         %75 = OpFOrdLessThanEqual %bool %73 %float_0_00999999978
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-         %78 = OpLoad %float %x_104
-         %80 = OpFAdd %float %78 %float_100
-               OpStore %x_124 %80
-         %81 = OpLoad %float %x_124
-               OpStore %x_125_phi %81
-               OpBranch %76
-         %76 = OpLabel
-         %82 = OpLoad %float %x_125_phi
-               OpStore %x_125 %82
-         %83 = OpLoad %float %x_125
-               OpStore %x_105_phi %83
-               OpBranch %55
-         %55 = OpLabel
-         %85 = OpLoad %float %x_105_phi
-               OpStore %x_105 %85
-         %87 = OpLoad %float %limit
-         %88 = OpConvertSToF %float %42
-         %89 = OpFOrdGreaterThanEqual %bool %88 %87
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %90
-         %91 = OpLabel
-         %92 = OpLoad %float %x_105
-               OpReturnValue %92
-         %90 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-         %93 = OpIAdd %int %42 %int_1
-               OpStore %x_108 %93
-         %94 = OpLoad %float %x_105
-               OpStore %x_104_phi %94
-         %95 = OpLoad %int %x_108
-               OpStore %x_107_phi %95
-               OpBranch %33
-         %34 = OpLabel
-         %96 = OpLoad %float %x_104
-               OpReturnValue %96
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %97
-        %100 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %104
-      %param = OpVariable %_ptr_Function_float Function %25
-    %param_1 = OpVariable %_ptr_Function_float Function %25
-    %param_2 = OpVariable %_ptr_Function_float Function %25
-    %param_3 = OpVariable %_ptr_Function_float Function %25
-       %x_54 = OpVariable %_ptr_Function_v3float Function %104
-   %x_74_phi = OpVariable %_ptr_Function_int Function %30
-       %x_75 = OpVariable %_ptr_Function_int Function %30
-               OpStore %c %114
-        %118 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %119 = OpLoad %float %118
-        %122 = OpFMul %float %119 %float_0_125
-        %120 = OpExtInst %float %67 RoundEven %122
-        %124 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %125 = OpLoad %float %124
-               OpStore %param %125
-               OpStore %param_1 %120
-        %126 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %129 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %129 %126
-        %131 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %132 = OpLoad %float %131
-               OpStore %param_2 %132
-               OpStore %param_3 %120
-        %133 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %136 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %136 %133
-        %137 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %138 = OpLoad %float %137
-        %139 = OpLoad %v3float %c
-               OpStore %x_54 %139
-        %140 = OpAccessChain %_ptr_Function_float %x_54 %uint_1
-        %141 = OpLoad %float %140
-        %143 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %144 = OpFAdd %float %138 %141
-               OpStore %143 %144
-               OpStore %x_74_phi %int_0
-               OpBranch %145
-        %145 = OpLabel
-               OpLoopMerge %146 %147 None
-               OpBranch %148
-        %148 = OpLabel
-        %150 = OpLoad %int %x_74_phi
-        %152 = OpSLessThan %bool %150 %int_3
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %155
-        %154 = OpLabel
-               OpBranch %153
-        %155 = OpLabel
-               OpBranch %146
-        %153 = OpLabel
-        %156 = OpAccessChain %_ptr_Function_float %c %150
-        %157 = OpLoad %float %156
-        %159 = OpFOrdGreaterThanEqual %bool %157 %float_1
-               OpSelectionMerge %160 None
-               OpBranchConditional %159 %161 %160
-        %161 = OpLabel
-        %162 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-        %163 = OpLoad %float %162
-        %164 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-        %165 = OpLoad %float %164
-        %166 = OpFOrdGreaterThan %bool %163 %165
-               OpSelectionMerge %167 None
-               OpBranchConditional %166 %168 %167
-        %168 = OpLabel
-               OpKill
-        %167 = OpLabel
-        %169 = OpAccessChain %_ptr_Function_float %c %150
-        %170 = OpLoad %float %169
-        %171 = OpAccessChain %_ptr_Function_float %c %150
-        %172 = OpLoad %float %171
-        %173 = OpAccessChain %_ptr_Function_float %c %150
-        %174 = OpFMul %float %170 %172
-               OpStore %173 %174
-               OpBranch %160
-        %160 = OpLabel
-               OpBranch %147
-        %147 = OpLabel
-        %175 = OpIAdd %int %150 %int_1
-               OpStore %x_75 %175
-        %176 = OpLoad %int %x_75
-               OpStore %x_74_phi %176
-               OpBranch %145
-        %146 = OpLabel
-        %177 = OpLoad %v3float %c
-        %179 = OpExtInst %v3float %67 FAbs %177
-        %178 = OpExtInst %v3float %67 Normalize %179
-        %180 = OpCompositeExtract %float %178 0
-        %181 = OpCompositeExtract %float %178 1
-        %182 = OpCompositeExtract %float %178 2
-        %183 = OpCompositeConstruct %v4float %180 %181 %182 %float_1
-               OpStore %x_GLF_color %183
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %184
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %188 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %189 = OpFunctionCall %void %main_1
-        %190 = OpLoad %v4float %x_GLF_color
-        %191 = OpCompositeConstruct %main_out %190
-               OpReturnValue %191
-               OpFunctionEnd
-       %main = OpFunction %void None %97
-        %193 = OpLabel
-        %195 = OpLoad %v4float %gl_FragCoord_param_1
-        %194 = OpFunctionCall %main_out %main_inner %195
-        %196 = OpCompositeExtract %v4float %194 0
-               OpStore %x_GLF_color_1_1 %196
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.wgsl
deleted file mode 100644
index 76b1a5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,136 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_16 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var x_104 : f32;
-  var x_104_phi : f32;
-  var x_107_phi : i32;
-  x_104_phi = -0.5;
-  x_107_phi = 1;
-  loop {
-    var x_126 : f32;
-    var x_125 : f32;
-    var x_108 : i32;
-    var x_105_phi : f32;
-    x_104 = x_104_phi;
-    let x_107 : i32 = x_107_phi;
-    if ((x_107 < 800)) {
-    } else {
-      break;
-    }
-    var x_124 : f32;
-    var x_125_phi : f32;
-    if (((x_107 % 32) == 0)) {
-      x_126 = (x_104 + 0.400000006);
-      x_105_phi = x_126;
-    } else {
-      let x_118 : f32 = *(thirty_two);
-      x_125_phi = x_104;
-      if (((f32(x_107) - (round(x_118) * floor((f32(x_107) / round(x_118))))) <= 0.01)) {
-        x_124 = (x_104 + 100.0);
-        x_125_phi = x_124;
-      }
-      x_125 = x_125_phi;
-      x_105_phi = x_125;
-    }
-    var x_105 : f32;
-    x_105 = x_105_phi;
-    let x_128 : f32 = *(limit);
-    if ((f32(x_107) >= x_128)) {
-      return x_105;
-    }
-
-    continuing {
-      x_108 = (x_107 + 1);
-      x_104_phi = x_105;
-      x_107_phi = x_108;
-    }
-  }
-  return x_104;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var x_54 : vec3<f32>;
-  var x_74_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_56 : f32 = x_10.resolution.x;
-  let x_58 : f32 = round((x_56 * 0.125));
-  let x_60 : f32 = gl_FragCoord.x;
-  param = x_60;
-  param_1 = x_58;
-  let x_61 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  let x_62 : ptr<function, f32> = &(c.x);
-  *(x_62) = x_61;
-  let x_64 : f32 = gl_FragCoord.y;
-  param_2 = x_64;
-  param_3 = x_58;
-  let x_65 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_65;
-  let x_67 : f32 = *(x_62);
-  let x_68 : vec3<f32> = c;
-  x_54 = x_68;
-  let x_70 : f32 = x_54.y;
-  c.z = (x_67 + x_70);
-  x_74_phi = 0;
-  loop {
-    var x_75 : i32;
-    let x_74 : i32 = x_74_phi;
-    if ((x_74 < 3)) {
-    } else {
-      break;
-    }
-    let x_80 : ptr<function, f32> = &(c[x_74]);
-    let x_81 : f32 = *(x_80);
-    if ((x_81 >= 1.0)) {
-      let x_86 : f32 = x_16.injectionSwitch.x;
-      let x_88 : f32 = x_16.injectionSwitch.y;
-      if ((x_86 > x_88)) {
-        discard;
-      }
-      let x_92 : f32 = *(x_80);
-      let x_93 : f32 = *(x_80);
-      *(x_80) = (x_92 * x_93);
-    }
-
-    continuing {
-      x_75 = (x_74 + 1);
-      x_74_phi = x_75;
-    }
-  }
-  let x_95 : vec3<f32> = c;
-  let x_97 : vec3<f32> = normalize(abs(x_95));
-  x_GLF_color = vec4<f32>(x_97.x, x_97.y, x_97.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.hlsl
deleted file mode 100644
index 24b43e0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,138 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_16 : register(b1, space0) {
-  uint4 x_16[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float x_104 = 0.0f;
-  float x_104_phi = 0.0f;
-  int x_107_phi = 0;
-  x_104_phi = -0.5f;
-  x_107_phi = 1;
-  while (true) {
-    float x_126 = 0.0f;
-    float x_125 = 0.0f;
-    int x_108 = 0;
-    float x_105_phi = 0.0f;
-    x_104 = x_104_phi;
-    const int x_107 = x_107_phi;
-    if ((x_107 < 800)) {
-    } else {
-      break;
-    }
-    float x_124 = 0.0f;
-    float x_125_phi = 0.0f;
-    if (((x_107 % 32) == 0)) {
-      x_126 = (x_104 + 0.400000006f);
-      x_105_phi = x_126;
-    } else {
-      const float x_118 = thirty_two;
-      x_125_phi = x_104;
-      if (((float(x_107) % round(x_118)) <= 0.01f)) {
-        x_124 = (x_104 + 100.0f);
-        x_125_phi = x_124;
-      }
-      x_125 = x_125_phi;
-      x_105_phi = x_125;
-    }
-    float x_105 = 0.0f;
-    x_105 = x_105_phi;
-    const float x_128 = limit;
-    if ((float(x_107) >= x_128)) {
-      return x_105;
-    }
-    {
-      x_108 = (x_107 + 1);
-      x_104_phi = x_105;
-      x_107_phi = x_108;
-    }
-  }
-  return x_104;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  float3 x_54 = float3(0.0f, 0.0f, 0.0f);
-  int x_74_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_56 = asfloat(x_10[0].x);
-  const float x_58 = round((x_56 * 0.125f));
-  const float x_60 = gl_FragCoord.x;
-  param = x_60;
-  param_1 = x_58;
-  const float x_61 = compute_value_f1_f1_(param, param_1);
-  c.x = x_61;
-  const float x_64 = gl_FragCoord.y;
-  param_2 = x_64;
-  param_3 = x_58;
-  const float x_65 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_65;
-  const float x_67 = c.x;
-  x_54 = c;
-  const float x_70 = x_54.y;
-  c.z = (x_67 + x_70);
-  x_74_phi = 0;
-  while (true) {
-    int x_75 = 0;
-    const int x_74 = x_74_phi;
-    if ((x_74 < 3)) {
-    } else {
-      break;
-    }
-    const int x_80_save = x_74;
-    const float x_81 = c[x_80_save];
-    if ((x_81 >= 1.0f)) {
-      const float x_86 = asfloat(x_16[0].x);
-      const float x_88 = asfloat(x_16[0].y);
-      if ((x_86 > x_88)) {
-        discard;
-      }
-      const float x_92 = c[x_80_save];
-      const float x_93 = c[x_80_save];
-      set_float3(c, x_80_save, (x_92 * x_93));
-    }
-    {
-      x_75 = (x_74 + 1);
-      x_74_phi = x_75;
-    }
-  }
-  const float3 x_97 = normalize(abs(c));
-  x_GLF_color = float4(x_97.x, x_97.y, x_97.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.msl
deleted file mode 100755
index b8ab26f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.msl
+++ /dev/null
@@ -1,136 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float x_104 = 0.0f;
-  float x_104_phi = 0.0f;
-  int x_107_phi = 0;
-  x_104_phi = -0.5f;
-  x_107_phi = 1;
-  while (true) {
-    float x_126 = 0.0f;
-    float x_125 = 0.0f;
-    int x_108 = 0;
-    float x_105_phi = 0.0f;
-    x_104 = x_104_phi;
-    int const x_107 = x_107_phi;
-    if ((x_107 < 800)) {
-    } else {
-      break;
-    }
-    float x_124 = 0.0f;
-    float x_125_phi = 0.0f;
-    if (((x_107 % 32) == 0)) {
-      x_126 = (x_104 + 0.400000006f);
-      x_105_phi = x_126;
-    } else {
-      float const x_118 = *(thirty_two);
-      x_125_phi = x_104;
-      if ((fmod(float(x_107), rint(x_118)) <= 0.01f)) {
-        x_124 = (x_104 + 100.0f);
-        x_125_phi = x_124;
-      }
-      x_125 = x_125_phi;
-      x_105_phi = x_125;
-    }
-    float x_105 = 0.0f;
-    x_105 = x_105_phi;
-    float const x_128 = *(limit);
-    if ((float(x_107) >= x_128)) {
-      return x_105;
-    }
-    {
-      x_108 = as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)));
-      x_104_phi = x_105;
-      x_107_phi = x_108;
-    }
-  }
-  return x_104;
-}
-
-void main_1(constant buf0& x_10, constant buf1& x_16, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  float3 x_54 = 0.0f;
-  int x_74_phi = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_56 = x_10.resolution.x;
-  float const x_58 = rint((x_56 * 0.125f));
-  float const x_60 = (*(tint_symbol_3)).x;
-  param = x_60;
-  param_1 = x_58;
-  float const x_61 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_61;
-  float const x_64 = (*(tint_symbol_3)).y;
-  param_2 = x_64;
-  param_3 = x_58;
-  float const x_65 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_65;
-  float const x_67 = c.x;
-  float3 const x_68 = c;
-  x_54 = x_68;
-  float const x_70 = x_54.y;
-  c.z = (x_67 + x_70);
-  x_74_phi = 0;
-  while (true) {
-    int x_75 = 0;
-    int const x_74 = x_74_phi;
-    if ((x_74 < 3)) {
-    } else {
-      break;
-    }
-    int const x_80_save = x_74;
-    float const x_81 = c[x_80_save];
-    if ((x_81 >= 1.0f)) {
-      float const x_86 = x_16.injectionSwitch.x;
-      float const x_88 = x_16.injectionSwitch.y;
-      if ((x_86 > x_88)) {
-        discard_fragment();
-      }
-      float const x_92 = c[x_80_save];
-      float const x_93 = c[x_80_save];
-      c[x_80_save] = (x_92 * x_93);
-    }
-    {
-      x_75 = as_type<int>((as_type<uint>(x_74) + as_type<uint>(1)));
-      x_74_phi = x_75;
-    }
-  }
-  float3 const x_95 = c;
-  float3 const x_97 = normalize(fabs(x_95));
-  *(tint_symbol_4) = float4(x_97.x, x_97.y, x_97.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, constant buf1& x_16, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_10, x_16, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]], constant buf1& x_16 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, x_16, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.spvasm
deleted file mode 100644
index 4152129..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,316 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 192
-; Schema: 0
-               OpCapability Shader
-         %67 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_10 "x_10"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_16 "x_16"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %x_104 "x_104"
-               OpName %x_104_phi "x_104_phi"
-               OpName %x_107_phi "x_107_phi"
-               OpName %x_126 "x_126"
-               OpName %x_125 "x_125"
-               OpName %x_108 "x_108"
-               OpName %x_105_phi "x_105_phi"
-               OpName %x_124 "x_124"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_105 "x_105"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %x_54 "x_54"
-               OpName %x_74_phi "x_74_phi"
-               OpName %x_75 "x_75"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_16 NonWritable
-               OpDecorate %x_16 DescriptorSet 0
-               OpDecorate %x_16 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_16 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %92 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %99 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-        %109 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%float_0_125 = OpConstant %float 0.125
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %179 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %18
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %23 = OpLabel
-      %x_104 = OpVariable %_ptr_Function_float Function %25
-  %x_104_phi = OpVariable %_ptr_Function_float Function %25
-  %x_107_phi = OpVariable %_ptr_Function_int Function %30
-      %x_126 = OpVariable %_ptr_Function_float Function %25
-      %x_125 = OpVariable %_ptr_Function_float Function %25
-      %x_108 = OpVariable %_ptr_Function_int Function %30
-  %x_105_phi = OpVariable %_ptr_Function_float Function %25
-      %x_124 = OpVariable %_ptr_Function_float Function %25
-  %x_125_phi = OpVariable %_ptr_Function_float Function %25
-      %x_105 = OpVariable %_ptr_Function_float Function %25
-               OpStore %x_104_phi %float_n0_5
-               OpStore %x_107_phi %int_1
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %41 = OpLoad %float %x_104_phi
-               OpStore %x_104 %41
-         %42 = OpLoad %int %x_107_phi
-         %44 = OpSLessThan %bool %42 %int_800
-               OpSelectionMerge %46 None
-               OpBranchConditional %44 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %34
-         %46 = OpLabel
-         %52 = OpSMod %int %42 %int_32
-         %54 = OpIEqual %bool %52 %int_0
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-         %58 = OpLoad %float %x_104
-         %60 = OpFAdd %float %58 %float_0_400000006
-               OpStore %x_126 %60
-         %61 = OpLoad %float %x_126
-               OpStore %x_105_phi %61
-               OpBranch %55
-         %57 = OpLabel
-         %63 = OpLoad %float %thirty_two
-         %64 = OpLoad %float %x_104
-               OpStore %x_125_phi %64
-         %65 = OpConvertSToF %float %42
-         %66 = OpExtInst %float %67 RoundEven %63
-         %68 = OpFRem %float %65 %66
-         %70 = OpFOrdLessThanEqual %bool %68 %float_0_00999999978
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %71
-         %72 = OpLabel
-         %73 = OpLoad %float %x_104
-         %75 = OpFAdd %float %73 %float_100
-               OpStore %x_124 %75
-         %76 = OpLoad %float %x_124
-               OpStore %x_125_phi %76
-               OpBranch %71
-         %71 = OpLabel
-         %77 = OpLoad %float %x_125_phi
-               OpStore %x_125 %77
-         %78 = OpLoad %float %x_125
-               OpStore %x_105_phi %78
-               OpBranch %55
-         %55 = OpLabel
-         %80 = OpLoad %float %x_105_phi
-               OpStore %x_105 %80
-         %82 = OpLoad %float %limit
-         %83 = OpConvertSToF %float %42
-         %84 = OpFOrdGreaterThanEqual %bool %83 %82
-               OpSelectionMerge %85 None
-               OpBranchConditional %84 %86 %85
-         %86 = OpLabel
-         %87 = OpLoad %float %x_105
-               OpReturnValue %87
-         %85 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-         %88 = OpIAdd %int %42 %int_1
-               OpStore %x_108 %88
-         %89 = OpLoad %float %x_105
-               OpStore %x_104_phi %89
-         %90 = OpLoad %int %x_108
-               OpStore %x_107_phi %90
-               OpBranch %33
-         %34 = OpLabel
-         %91 = OpLoad %float %x_104
-               OpReturnValue %91
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %92
-         %95 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %99
-      %param = OpVariable %_ptr_Function_float Function %25
-    %param_1 = OpVariable %_ptr_Function_float Function %25
-    %param_2 = OpVariable %_ptr_Function_float Function %25
-    %param_3 = OpVariable %_ptr_Function_float Function %25
-       %x_54 = OpVariable %_ptr_Function_v3float Function %99
-   %x_74_phi = OpVariable %_ptr_Function_int Function %30
-       %x_75 = OpVariable %_ptr_Function_int Function %30
-               OpStore %c %109
-        %113 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %114 = OpLoad %float %113
-        %117 = OpFMul %float %114 %float_0_125
-        %115 = OpExtInst %float %67 RoundEven %117
-        %119 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %120 = OpLoad %float %119
-               OpStore %param %120
-               OpStore %param_1 %115
-        %121 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %124 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %124 %121
-        %126 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %127 = OpLoad %float %126
-               OpStore %param_2 %127
-               OpStore %param_3 %115
-        %128 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %131 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %131 %128
-        %132 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %133 = OpLoad %float %132
-        %134 = OpLoad %v3float %c
-               OpStore %x_54 %134
-        %135 = OpAccessChain %_ptr_Function_float %x_54 %uint_1
-        %136 = OpLoad %float %135
-        %138 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %139 = OpFAdd %float %133 %136
-               OpStore %138 %139
-               OpStore %x_74_phi %int_0
-               OpBranch %140
-        %140 = OpLabel
-               OpLoopMerge %141 %142 None
-               OpBranch %143
-        %143 = OpLabel
-        %145 = OpLoad %int %x_74_phi
-        %147 = OpSLessThan %bool %145 %int_3
-               OpSelectionMerge %148 None
-               OpBranchConditional %147 %149 %150
-        %149 = OpLabel
-               OpBranch %148
-        %150 = OpLabel
-               OpBranch %141
-        %148 = OpLabel
-        %151 = OpAccessChain %_ptr_Function_float %c %145
-        %152 = OpLoad %float %151
-        %154 = OpFOrdGreaterThanEqual %bool %152 %float_1
-               OpSelectionMerge %155 None
-               OpBranchConditional %154 %156 %155
-        %156 = OpLabel
-        %157 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_0
-        %158 = OpLoad %float %157
-        %159 = OpAccessChain %_ptr_Uniform_float %x_16 %uint_0 %uint_1
-        %160 = OpLoad %float %159
-        %161 = OpFOrdGreaterThan %bool %158 %160
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %162
-        %163 = OpLabel
-               OpKill
-        %162 = OpLabel
-        %164 = OpAccessChain %_ptr_Function_float %c %145
-        %165 = OpLoad %float %164
-        %166 = OpAccessChain %_ptr_Function_float %c %145
-        %167 = OpLoad %float %166
-        %168 = OpAccessChain %_ptr_Function_float %c %145
-        %169 = OpFMul %float %165 %167
-               OpStore %168 %169
-               OpBranch %155
-        %155 = OpLabel
-               OpBranch %142
-        %142 = OpLabel
-        %170 = OpIAdd %int %145 %int_1
-               OpStore %x_75 %170
-        %171 = OpLoad %int %x_75
-               OpStore %x_74_phi %171
-               OpBranch %140
-        %141 = OpLabel
-        %172 = OpLoad %v3float %c
-        %174 = OpExtInst %v3float %67 FAbs %172
-        %173 = OpExtInst %v3float %67 Normalize %174
-        %175 = OpCompositeExtract %float %173 0
-        %176 = OpCompositeExtract %float %173 1
-        %177 = OpCompositeExtract %float %173 2
-        %178 = OpCompositeConstruct %v4float %175 %176 %177 %float_1
-               OpStore %x_GLF_color %178
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %179
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %183 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %184 = OpFunctionCall %void %main_1
-        %185 = OpLoad %v4float %x_GLF_color
-        %186 = OpCompositeConstruct %main_out %185
-               OpReturnValue %186
-               OpFunctionEnd
-       %main = OpFunction %void None %92
-        %188 = OpLabel
-        %190 = OpLoad %v4float %gl_FragCoord_param_1
-        %189 = OpFunctionCall %main_out %main_inner %190
-        %191 = OpCompositeExtract %v4float %189 0
-               OpStore %x_GLF_color_1_1 %191
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.wgsl
deleted file mode 100644
index 57edb9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-divided-1/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,136 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_16 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var x_104 : f32;
-  var x_104_phi : f32;
-  var x_107_phi : i32;
-  x_104_phi = -0.5;
-  x_107_phi = 1;
-  loop {
-    var x_126 : f32;
-    var x_125 : f32;
-    var x_108 : i32;
-    var x_105_phi : f32;
-    x_104 = x_104_phi;
-    let x_107 : i32 = x_107_phi;
-    if ((x_107 < 800)) {
-    } else {
-      break;
-    }
-    var x_124 : f32;
-    var x_125_phi : f32;
-    if (((x_107 % 32) == 0)) {
-      x_126 = (x_104 + 0.400000006);
-      x_105_phi = x_126;
-    } else {
-      let x_118 : f32 = *(thirty_two);
-      x_125_phi = x_104;
-      if (((f32(x_107) % round(x_118)) <= 0.01)) {
-        x_124 = (x_104 + 100.0);
-        x_125_phi = x_124;
-      }
-      x_125 = x_125_phi;
-      x_105_phi = x_125;
-    }
-    var x_105 : f32;
-    x_105 = x_105_phi;
-    let x_128 : f32 = *(limit);
-    if ((f32(x_107) >= x_128)) {
-      return x_105;
-    }
-
-    continuing {
-      x_108 = (x_107 + 1);
-      x_104_phi = x_105;
-      x_107_phi = x_108;
-    }
-  }
-  return x_104;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var x_54 : vec3<f32>;
-  var x_74_phi : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_56 : f32 = x_10.resolution.x;
-  let x_58 : f32 = round((x_56 * 0.125));
-  let x_60 : f32 = gl_FragCoord.x;
-  param = x_60;
-  param_1 = x_58;
-  let x_61 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  let x_62 : ptr<function, f32> = &(c.x);
-  *(x_62) = x_61;
-  let x_64 : f32 = gl_FragCoord.y;
-  param_2 = x_64;
-  param_3 = x_58;
-  let x_65 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_65;
-  let x_67 : f32 = *(x_62);
-  let x_68 : vec3<f32> = c;
-  x_54 = x_68;
-  let x_70 : f32 = x_54.y;
-  c.z = (x_67 + x_70);
-  x_74_phi = 0;
-  loop {
-    var x_75 : i32;
-    let x_74 : i32 = x_74_phi;
-    if ((x_74 < 3)) {
-    } else {
-      break;
-    }
-    let x_80 : ptr<function, f32> = &(c[x_74]);
-    let x_81 : f32 = *(x_80);
-    if ((x_81 >= 1.0)) {
-      let x_86 : f32 = x_16.injectionSwitch.x;
-      let x_88 : f32 = x_16.injectionSwitch.y;
-      if ((x_86 > x_88)) {
-        discard;
-      }
-      let x_92 : f32 = *(x_80);
-      let x_93 : f32 = *(x_80);
-      *(x_80) = (x_92 * x_93);
-    }
-
-    continuing {
-      x_75 = (x_74 + 1);
-      x_74_phi = x_75;
-    }
-  }
-  let x_95 : vec3<f32> = c;
-  let x_97 : vec3<f32> = normalize(abs(x_95));
-  x_GLF_color = vec4<f32>(x_97.x, x_97.y, x_97.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.hlsl
deleted file mode 100644
index e4ca124..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,127 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_19 : register(b1, space0) {
-  uint4 x_19[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  {
-    for(; (i < 800); i = (i + 1)) {
-      if (((i % 32) == 0)) {
-        result = (result + 0.400000006f);
-      } else {
-        const int x_155 = i;
-        const float x_157 = thirty_two;
-        if (((float(x_155) - (round(x_157) * floor((float(x_155) / round(x_157))))) <= 0.01f)) {
-          result = (result + 100.0f);
-        }
-      }
-      const int x_165 = i;
-      const float x_167 = limit;
-      if ((float(x_165) >= x_167)) {
-        return result;
-      }
-    }
-  }
-  return result;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  float3 x_61 = float3(0.0f, 0.0f, 0.0f);
-  int i_1 = 0;
-  float j = 0.0f;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_63 = asfloat(x_13[0].x);
-  thirty_two_1 = round((x_63 / 8.0f));
-  const float x_67 = gl_FragCoord.x;
-  param = x_67;
-  param_1 = thirty_two_1;
-  const float x_69 = compute_value_f1_f1_(param, param_1);
-  c.x = x_69;
-  const float x_72 = gl_FragCoord.y;
-  param_2 = x_72;
-  param_3 = thirty_two_1;
-  const float x_74 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_74;
-  const float x_77 = c.x;
-  if (true) {
-    x_61 = c;
-  } else {
-    const float3 x_82 = c;
-    const float x_84 = asfloat(x_19[0].x);
-    x_61 = (x_82 * x_84);
-  }
-  const float x_87 = x_61.y;
-  c.z = (x_77 + x_87);
-  i_1 = 0;
-  {
-    for(; (i_1 < 3); i_1 = (i_1 + 1)) {
-      const float x_99 = c[i_1];
-      if ((x_99 >= 1.0f)) {
-        const int x_103 = i_1;
-        const float x_106 = c[i_1];
-        const float x_109 = c[i_1];
-        set_float3(c, x_103, (x_106 * x_109));
-      }
-      j = 0.0f;
-      while (true) {
-        const float x_117 = asfloat(x_19[0].x);
-        const float x_119 = asfloat(x_19[0].y);
-        if ((x_117 > x_119)) {
-        } else {
-          break;
-        }
-        const float x_122 = j;
-        const float x_124 = asfloat(x_19[0].x);
-        if ((x_122 >= x_124)) {
-          break;
-        }
-        j = (j + 1.0f);
-      }
-    }
-  }
-  const float3 x_134 = normalize(abs(c));
-  x_GLF_color = float4(x_134.x, x_134.y, x_134.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.msl
deleted file mode 100755
index 63c7926..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.msl
+++ /dev/null
@@ -1,150 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  while (true) {
-    int const x_144 = i;
-    if ((x_144 < 800)) {
-    } else {
-      break;
-    }
-    int const x_147 = i;
-    if (((x_147 % 32) == 0)) {
-      float const x_153 = result;
-      result = (x_153 + 0.400000006f);
-    } else {
-      int const x_155 = i;
-      float const x_157 = *(thirty_two);
-      if (((float(x_155) - (rint(x_157) * floor((float(x_155) / rint(x_157))))) <= 0.01f)) {
-        float const x_163 = result;
-        result = (x_163 + 100.0f);
-      }
-    }
-    int const x_165 = i;
-    float const x_167 = *(limit);
-    if ((float(x_165) >= x_167)) {
-      float const x_171 = result;
-      return x_171;
-    }
-    {
-      int const x_172 = i;
-      i = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
-    }
-  }
-  float const x_174 = result;
-  return x_174;
-}
-
-void main_1(constant buf0& x_13, constant buf1& x_19, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  float3 x_61 = 0.0f;
-  int i_1 = 0;
-  float j = 0.0f;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_63 = x_13.resolution.x;
-  thirty_two_1 = rint((x_63 / 8.0f));
-  float const x_67 = (*(tint_symbol_3)).x;
-  param = x_67;
-  float const x_68 = thirty_two_1;
-  param_1 = x_68;
-  float const x_69 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_69;
-  float const x_72 = (*(tint_symbol_3)).y;
-  param_2 = x_72;
-  float const x_73 = thirty_two_1;
-  param_3 = x_73;
-  float const x_74 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_74;
-  float const x_77 = c.x;
-  if (true) {
-    float3 const x_81 = c;
-    x_61 = x_81;
-  } else {
-    float3 const x_82 = c;
-    float const x_84 = x_19.injectionSwitch.x;
-    x_61 = (x_82 * x_84);
-  }
-  float const x_87 = x_61.y;
-  c.z = (x_77 + x_87);
-  i_1 = 0;
-  while (true) {
-    int const x_94 = i_1;
-    if ((x_94 < 3)) {
-    } else {
-      break;
-    }
-    int const x_97 = i_1;
-    float const x_99 = c[x_97];
-    if ((x_99 >= 1.0f)) {
-      int const x_103 = i_1;
-      int const x_104 = i_1;
-      float const x_106 = c[x_104];
-      int const x_107 = i_1;
-      float const x_109 = c[x_107];
-      c[x_103] = (x_106 * x_109);
-    }
-    j = 0.0f;
-    while (true) {
-      float const x_117 = x_19.injectionSwitch.x;
-      float const x_119 = x_19.injectionSwitch.y;
-      if ((x_117 > x_119)) {
-      } else {
-        break;
-      }
-      float const x_122 = j;
-      float const x_124 = x_19.injectionSwitch.x;
-      if ((x_122 >= x_124)) {
-        break;
-      }
-      float const x_128 = j;
-      j = (x_128 + 1.0f);
-    }
-    {
-      int const x_130 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_130) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_132 = c;
-  float3 const x_134 = normalize(fabs(x_132));
-  *(tint_symbol_4) = float4(x_134.x, x_134.y, x_134.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, constant buf1& x_19, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_13, x_19, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]], constant buf1& x_19 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, x_19, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.spvasm
deleted file mode 100644
index 9f31452..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,336 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 212
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_19 "x_19"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %result "result"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %thirty_two_1 "thirty_two_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %x_61 "x_61"
-               OpName %i_1 "i_1"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_19 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %84 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %91 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-        %103 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-        %199 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %18
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %23 = OpLabel
-     %result = OpVariable %_ptr_Function_float Function %25
-          %i = OpVariable %_ptr_Function_int Function %29
-               OpStore %result %float_n0_5
-               OpStore %i %int_1
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %38 = OpSLessThan %bool %36 %int_800
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %33
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpSMod %int %43 %int_32
-         %47 = OpIEqual %bool %45 %int_0
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-         %51 = OpLoad %float %result
-         %53 = OpFAdd %float %51 %float_0_400000006
-               OpStore %result %53
-               OpBranch %48
-         %50 = OpLabel
-         %54 = OpLoad %int %i
-         %56 = OpLoad %float %thirty_two
-         %57 = OpConvertSToF %float %54
-         %58 = OpExtInst %float %59 RoundEven %56
-         %61 = OpConvertSToF %float %54
-         %62 = OpExtInst %float %59 RoundEven %56
-         %63 = OpFDiv %float %61 %62
-         %60 = OpExtInst %float %59 Floor %63
-         %64 = OpFMul %float %58 %60
-         %65 = OpFSub %float %57 %64
-         %67 = OpFOrdLessThanEqual %bool %65 %float_0_00999999978
-               OpSelectionMerge %68 None
-               OpBranchConditional %67 %69 %68
-         %69 = OpLabel
-         %70 = OpLoad %float %result
-         %72 = OpFAdd %float %70 %float_100
-               OpStore %result %72
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-         %73 = OpLoad %int %i
-         %75 = OpLoad %float %limit
-         %76 = OpConvertSToF %float %73
-         %77 = OpFOrdGreaterThanEqual %bool %76 %75
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %78
-         %79 = OpLabel
-         %80 = OpLoad %float %result
-               OpReturnValue %80
-         %78 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-         %81 = OpLoad %int %i
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %i %82
-               OpBranch %32
-         %33 = OpLabel
-         %83 = OpLoad %float %result
-               OpReturnValue %83
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %84
-         %87 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %91
-%thirty_two_1 = OpVariable %_ptr_Function_float Function %25
-      %param = OpVariable %_ptr_Function_float Function %25
-    %param_1 = OpVariable %_ptr_Function_float Function %25
-    %param_2 = OpVariable %_ptr_Function_float Function %25
-    %param_3 = OpVariable %_ptr_Function_float Function %25
-       %x_61 = OpVariable %_ptr_Function_v3float Function %91
-        %i_1 = OpVariable %_ptr_Function_int Function %29
-          %j = OpVariable %_ptr_Function_float Function %25
-               OpStore %c %103
-        %107 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-        %108 = OpLoad %float %107
-        %110 = OpFDiv %float %108 %float_8
-        %109 = OpExtInst %float %59 RoundEven %110
-               OpStore %thirty_two_1 %109
-        %112 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %113 = OpLoad %float %112
-               OpStore %param %113
-        %114 = OpLoad %float %thirty_two_1
-               OpStore %param_1 %114
-        %115 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %118 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %118 %115
-        %120 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %121 = OpLoad %float %120
-               OpStore %param_2 %121
-        %122 = OpLoad %float %thirty_two_1
-               OpStore %param_3 %122
-        %123 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %126 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %126 %123
-        %127 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %128 = OpLoad %float %127
-               OpSelectionMerge %130 None
-               OpBranchConditional %true %131 %132
-        %131 = OpLabel
-        %133 = OpLoad %v3float %c
-               OpStore %x_61 %133
-               OpBranch %130
-        %132 = OpLabel
-        %134 = OpLoad %v3float %c
-        %135 = OpAccessChain %_ptr_Uniform_float %x_19 %uint_0 %uint_0
-        %136 = OpLoad %float %135
-        %137 = OpVectorTimesScalar %v3float %134 %136
-               OpStore %x_61 %137
-               OpBranch %130
-        %130 = OpLabel
-        %138 = OpAccessChain %_ptr_Function_float %x_61 %uint_1
-        %139 = OpLoad %float %138
-        %141 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %142 = OpFAdd %float %128 %139
-               OpStore %141 %142
-               OpStore %i_1 %int_0
-               OpBranch %143
-        %143 = OpLabel
-               OpLoopMerge %144 %145 None
-               OpBranch %146
-        %146 = OpLabel
-        %147 = OpLoad %int %i_1
-        %149 = OpSLessThan %bool %147 %int_3
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %152
-        %151 = OpLabel
-               OpBranch %150
-        %152 = OpLabel
-               OpBranch %144
-        %150 = OpLabel
-        %153 = OpLoad %int %i_1
-        %154 = OpAccessChain %_ptr_Function_float %c %153
-        %155 = OpLoad %float %154
-        %157 = OpFOrdGreaterThanEqual %bool %155 %float_1
-               OpSelectionMerge %158 None
-               OpBranchConditional %157 %159 %158
-        %159 = OpLabel
-        %160 = OpLoad %int %i_1
-        %161 = OpLoad %int %i_1
-        %162 = OpAccessChain %_ptr_Function_float %c %161
-        %163 = OpLoad %float %162
-        %164 = OpLoad %int %i_1
-        %165 = OpAccessChain %_ptr_Function_float %c %164
-        %166 = OpLoad %float %165
-        %167 = OpAccessChain %_ptr_Function_float %c %160
-        %168 = OpFMul %float %163 %166
-               OpStore %167 %168
-               OpBranch %158
-        %158 = OpLabel
-               OpStore %j %float_0
-               OpBranch %170
-        %170 = OpLabel
-               OpLoopMerge %171 %172 None
-               OpBranch %173
-        %173 = OpLabel
-        %174 = OpAccessChain %_ptr_Uniform_float %x_19 %uint_0 %uint_0
-        %175 = OpLoad %float %174
-        %176 = OpAccessChain %_ptr_Uniform_float %x_19 %uint_0 %uint_1
-        %177 = OpLoad %float %176
-        %178 = OpFOrdGreaterThan %bool %175 %177
-               OpSelectionMerge %179 None
-               OpBranchConditional %178 %180 %181
-        %180 = OpLabel
-               OpBranch %179
-        %181 = OpLabel
-               OpBranch %171
-        %179 = OpLabel
-        %182 = OpLoad %float %j
-        %183 = OpAccessChain %_ptr_Uniform_float %x_19 %uint_0 %uint_0
-        %184 = OpLoad %float %183
-        %185 = OpFOrdGreaterThanEqual %bool %182 %184
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %186
-        %187 = OpLabel
-               OpBranch %171
-        %186 = OpLabel
-        %188 = OpLoad %float %j
-        %189 = OpFAdd %float %188 %float_1
-               OpStore %j %189
-               OpBranch %172
-        %172 = OpLabel
-               OpBranch %170
-        %171 = OpLabel
-               OpBranch %145
-        %145 = OpLabel
-        %190 = OpLoad %int %i_1
-        %191 = OpIAdd %int %190 %int_1
-               OpStore %i_1 %191
-               OpBranch %143
-        %144 = OpLabel
-        %192 = OpLoad %v3float %c
-        %194 = OpExtInst %v3float %59 FAbs %192
-        %193 = OpExtInst %v3float %59 Normalize %194
-        %195 = OpCompositeExtract %float %193 0
-        %196 = OpCompositeExtract %float %193 1
-        %197 = OpCompositeExtract %float %193 2
-        %198 = OpCompositeConstruct %v4float %195 %196 %197 %float_1
-               OpStore %x_GLF_color %198
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %199
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %203 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %204 = OpFunctionCall %void %main_1
-        %205 = OpLoad %v4float %x_GLF_color
-        %206 = OpCompositeConstruct %main_out %205
-               OpReturnValue %206
-               OpFunctionEnd
-       %main = OpFunction %void None %84
-        %208 = OpLabel
-        %210 = OpLoad %v4float %gl_FragCoord_param_1
-        %209 = OpFunctionCall %main_out %main_inner %210
-        %211 = OpCompositeExtract %v4float %209 0
-               OpStore %x_GLF_color_1_1 %211
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.wgsl
deleted file mode 100644
index 4920c6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,149 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_19 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var result : f32;
-  var i : i32;
-  result = -0.5;
-  i = 1;
-  loop {
-    let x_144 : i32 = i;
-    if ((x_144 < 800)) {
-    } else {
-      break;
-    }
-    let x_147 : i32 = i;
-    if (((x_147 % 32) == 0)) {
-      let x_153 : f32 = result;
-      result = (x_153 + 0.400000006);
-    } else {
-      let x_155 : i32 = i;
-      let x_157 : f32 = *(thirty_two);
-      if (((f32(x_155) - (round(x_157) * floor((f32(x_155) / round(x_157))))) <= 0.01)) {
-        let x_163 : f32 = result;
-        result = (x_163 + 100.0);
-      }
-    }
-    let x_165 : i32 = i;
-    let x_167 : f32 = *(limit);
-    if ((f32(x_165) >= x_167)) {
-      let x_171 : f32 = result;
-      return x_171;
-    }
-
-    continuing {
-      let x_172 : i32 = i;
-      i = (x_172 + 1);
-    }
-  }
-  let x_174 : f32 = result;
-  return x_174;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var thirty_two_1 : f32;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var x_61 : vec3<f32>;
-  var i_1 : i32;
-  var j : f32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_63 : f32 = x_13.resolution.x;
-  thirty_two_1 = round((x_63 / 8.0));
-  let x_67 : f32 = gl_FragCoord.x;
-  param = x_67;
-  let x_68 : f32 = thirty_two_1;
-  param_1 = x_68;
-  let x_69 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_69;
-  let x_72 : f32 = gl_FragCoord.y;
-  param_2 = x_72;
-  let x_73 : f32 = thirty_two_1;
-  param_3 = x_73;
-  let x_74 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_74;
-  let x_77 : f32 = c.x;
-  if (true) {
-    let x_81 : vec3<f32> = c;
-    x_61 = x_81;
-  } else {
-    let x_82 : vec3<f32> = c;
-    let x_84 : f32 = x_19.injectionSwitch.x;
-    x_61 = (x_82 * x_84);
-  }
-  let x_87 : f32 = x_61.y;
-  c.z = (x_77 + x_87);
-  i_1 = 0;
-  loop {
-    let x_94 : i32 = i_1;
-    if ((x_94 < 3)) {
-    } else {
-      break;
-    }
-    let x_97 : i32 = i_1;
-    let x_99 : f32 = c[x_97];
-    if ((x_99 >= 1.0)) {
-      let x_103 : i32 = i_1;
-      let x_104 : i32 = i_1;
-      let x_106 : f32 = c[x_104];
-      let x_107 : i32 = i_1;
-      let x_109 : f32 = c[x_107];
-      c[x_103] = (x_106 * x_109);
-    }
-    j = 0.0;
-    loop {
-      let x_117 : f32 = x_19.injectionSwitch.x;
-      let x_119 : f32 = x_19.injectionSwitch.y;
-      if ((x_117 > x_119)) {
-      } else {
-        break;
-      }
-      let x_122 : f32 = j;
-      let x_124 : f32 = x_19.injectionSwitch.x;
-      if ((x_122 >= x_124)) {
-        break;
-      }
-      let x_128 : f32 = j;
-      j = (x_128 + 1.0);
-    }
-
-    continuing {
-      let x_130 : i32 = i_1;
-      i_1 = (x_130 + 1);
-    }
-  }
-  let x_132 : vec3<f32> = c;
-  let x_134 : vec3<f32> = normalize(abs(x_132));
-  x_GLF_color = vec4<f32>(x_134.x, x_134.y, x_134.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.hlsl
deleted file mode 100644
index abec6b6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,127 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_19 : register(b1, space0) {
-  uint4 x_19[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  {
-    for(; (i < 800); i = (i + 1)) {
-      if (((i % 32) == 0)) {
-        result = (result + 0.400000006f);
-      } else {
-        const int x_155 = i;
-        const float x_157 = thirty_two;
-        if (((float(x_155) % round(x_157)) <= 0.01f)) {
-          result = (result + 100.0f);
-        }
-      }
-      const int x_165 = i;
-      const float x_167 = limit;
-      if ((float(x_165) >= x_167)) {
-        return result;
-      }
-    }
-  }
-  return result;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  float3 x_61 = float3(0.0f, 0.0f, 0.0f);
-  int i_1 = 0;
-  float j = 0.0f;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_63 = asfloat(x_13[0].x);
-  thirty_two_1 = round((x_63 / 8.0f));
-  const float x_67 = gl_FragCoord.x;
-  param = x_67;
-  param_1 = thirty_two_1;
-  const float x_69 = compute_value_f1_f1_(param, param_1);
-  c.x = x_69;
-  const float x_72 = gl_FragCoord.y;
-  param_2 = x_72;
-  param_3 = thirty_two_1;
-  const float x_74 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_74;
-  const float x_77 = c.x;
-  if (true) {
-    x_61 = c;
-  } else {
-    const float3 x_82 = c;
-    const float x_84 = asfloat(x_19[0].x);
-    x_61 = (x_82 * x_84);
-  }
-  const float x_87 = x_61.y;
-  c.z = (x_77 + x_87);
-  i_1 = 0;
-  {
-    for(; (i_1 < 3); i_1 = (i_1 + 1)) {
-      const float x_99 = c[i_1];
-      if ((x_99 >= 1.0f)) {
-        const int x_103 = i_1;
-        const float x_106 = c[i_1];
-        const float x_109 = c[i_1];
-        set_float3(c, x_103, (x_106 * x_109));
-      }
-      j = 0.0f;
-      while (true) {
-        const float x_117 = asfloat(x_19[0].x);
-        const float x_119 = asfloat(x_19[0].y);
-        if ((x_117 > x_119)) {
-        } else {
-          break;
-        }
-        const float x_122 = j;
-        const float x_124 = asfloat(x_19[0].x);
-        if ((x_122 >= x_124)) {
-          break;
-        }
-        j = (j + 1.0f);
-      }
-    }
-  }
-  const float3 x_134 = normalize(abs(c));
-  x_GLF_color = float4(x_134.x, x_134.y, x_134.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.msl
deleted file mode 100755
index 4d25eda..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.msl
+++ /dev/null
@@ -1,150 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  while (true) {
-    int const x_144 = i;
-    if ((x_144 < 800)) {
-    } else {
-      break;
-    }
-    int const x_147 = i;
-    if (((x_147 % 32) == 0)) {
-      float const x_153 = result;
-      result = (x_153 + 0.400000006f);
-    } else {
-      int const x_155 = i;
-      float const x_157 = *(thirty_two);
-      if ((fmod(float(x_155), rint(x_157)) <= 0.01f)) {
-        float const x_163 = result;
-        result = (x_163 + 100.0f);
-      }
-    }
-    int const x_165 = i;
-    float const x_167 = *(limit);
-    if ((float(x_165) >= x_167)) {
-      float const x_171 = result;
-      return x_171;
-    }
-    {
-      int const x_172 = i;
-      i = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
-    }
-  }
-  float const x_174 = result;
-  return x_174;
-}
-
-void main_1(constant buf0& x_13, constant buf1& x_19, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  float3 x_61 = 0.0f;
-  int i_1 = 0;
-  float j = 0.0f;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_63 = x_13.resolution.x;
-  thirty_two_1 = rint((x_63 / 8.0f));
-  float const x_67 = (*(tint_symbol_3)).x;
-  param = x_67;
-  float const x_68 = thirty_two_1;
-  param_1 = x_68;
-  float const x_69 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_69;
-  float const x_72 = (*(tint_symbol_3)).y;
-  param_2 = x_72;
-  float const x_73 = thirty_two_1;
-  param_3 = x_73;
-  float const x_74 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_74;
-  float const x_77 = c.x;
-  if (true) {
-    float3 const x_81 = c;
-    x_61 = x_81;
-  } else {
-    float3 const x_82 = c;
-    float const x_84 = x_19.injectionSwitch.x;
-    x_61 = (x_82 * x_84);
-  }
-  float const x_87 = x_61.y;
-  c.z = (x_77 + x_87);
-  i_1 = 0;
-  while (true) {
-    int const x_94 = i_1;
-    if ((x_94 < 3)) {
-    } else {
-      break;
-    }
-    int const x_97 = i_1;
-    float const x_99 = c[x_97];
-    if ((x_99 >= 1.0f)) {
-      int const x_103 = i_1;
-      int const x_104 = i_1;
-      float const x_106 = c[x_104];
-      int const x_107 = i_1;
-      float const x_109 = c[x_107];
-      c[x_103] = (x_106 * x_109);
-    }
-    j = 0.0f;
-    while (true) {
-      float const x_117 = x_19.injectionSwitch.x;
-      float const x_119 = x_19.injectionSwitch.y;
-      if ((x_117 > x_119)) {
-      } else {
-        break;
-      }
-      float const x_122 = j;
-      float const x_124 = x_19.injectionSwitch.x;
-      if ((x_122 >= x_124)) {
-        break;
-      }
-      float const x_128 = j;
-      j = (x_128 + 1.0f);
-    }
-    {
-      int const x_130 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_130) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_132 = c;
-  float3 const x_134 = normalize(fabs(x_132));
-  *(tint_symbol_4) = float4(x_134.x, x_134.y, x_134.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, constant buf1& x_19, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_13, x_19, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]], constant buf1& x_19 [[buffer(1)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, x_19, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.spvasm
deleted file mode 100644
index f050722..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,331 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 207
-; Schema: 0
-               OpCapability Shader
-         %59 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_19 "x_19"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %result "result"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %thirty_two_1 "thirty_two_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %x_61 "x_61"
-               OpName %i_1 "i_1"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_19 = OpVariable %_ptr_Uniform_buf1 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %25 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %79 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %86 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %98 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-       %true = OpConstantTrue %bool
-     %uint_2 = OpConstant %uint 2
-      %int_3 = OpConstant %int 3
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-        %194 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %18
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %23 = OpLabel
-     %result = OpVariable %_ptr_Function_float Function %25
-          %i = OpVariable %_ptr_Function_int Function %29
-               OpStore %result %float_n0_5
-               OpStore %i %int_1
-               OpBranch %32
-         %32 = OpLabel
-               OpLoopMerge %33 %34 None
-               OpBranch %35
-         %35 = OpLabel
-         %36 = OpLoad %int %i
-         %38 = OpSLessThan %bool %36 %int_800
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %42
-         %41 = OpLabel
-               OpBranch %40
-         %42 = OpLabel
-               OpBranch %33
-         %40 = OpLabel
-         %43 = OpLoad %int %i
-         %45 = OpSMod %int %43 %int_32
-         %47 = OpIEqual %bool %45 %int_0
-               OpSelectionMerge %48 None
-               OpBranchConditional %47 %49 %50
-         %49 = OpLabel
-         %51 = OpLoad %float %result
-         %53 = OpFAdd %float %51 %float_0_400000006
-               OpStore %result %53
-               OpBranch %48
-         %50 = OpLabel
-         %54 = OpLoad %int %i
-         %56 = OpLoad %float %thirty_two
-         %57 = OpConvertSToF %float %54
-         %58 = OpExtInst %float %59 RoundEven %56
-         %60 = OpFRem %float %57 %58
-         %62 = OpFOrdLessThanEqual %bool %60 %float_0_00999999978
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %63
-         %64 = OpLabel
-         %65 = OpLoad %float %result
-         %67 = OpFAdd %float %65 %float_100
-               OpStore %result %67
-               OpBranch %63
-         %63 = OpLabel
-               OpBranch %48
-         %48 = OpLabel
-         %68 = OpLoad %int %i
-         %70 = OpLoad %float %limit
-         %71 = OpConvertSToF %float %68
-         %72 = OpFOrdGreaterThanEqual %bool %71 %70
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %73
-         %74 = OpLabel
-         %75 = OpLoad %float %result
-               OpReturnValue %75
-         %73 = OpLabel
-               OpBranch %34
-         %34 = OpLabel
-         %76 = OpLoad %int %i
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %i %77
-               OpBranch %32
-         %33 = OpLabel
-         %78 = OpLoad %float %result
-               OpReturnValue %78
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %79
-         %82 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %86
-%thirty_two_1 = OpVariable %_ptr_Function_float Function %25
-      %param = OpVariable %_ptr_Function_float Function %25
-    %param_1 = OpVariable %_ptr_Function_float Function %25
-    %param_2 = OpVariable %_ptr_Function_float Function %25
-    %param_3 = OpVariable %_ptr_Function_float Function %25
-       %x_61 = OpVariable %_ptr_Function_v3float Function %86
-        %i_1 = OpVariable %_ptr_Function_int Function %29
-          %j = OpVariable %_ptr_Function_float Function %25
-               OpStore %c %98
-        %102 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-        %103 = OpLoad %float %102
-        %105 = OpFDiv %float %103 %float_8
-        %104 = OpExtInst %float %59 RoundEven %105
-               OpStore %thirty_two_1 %104
-        %107 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %108 = OpLoad %float %107
-               OpStore %param %108
-        %109 = OpLoad %float %thirty_two_1
-               OpStore %param_1 %109
-        %110 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %113 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %113 %110
-        %115 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %116 = OpLoad %float %115
-               OpStore %param_2 %116
-        %117 = OpLoad %float %thirty_two_1
-               OpStore %param_3 %117
-        %118 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %121 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %121 %118
-        %122 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %123 = OpLoad %float %122
-               OpSelectionMerge %125 None
-               OpBranchConditional %true %126 %127
-        %126 = OpLabel
-        %128 = OpLoad %v3float %c
-               OpStore %x_61 %128
-               OpBranch %125
-        %127 = OpLabel
-        %129 = OpLoad %v3float %c
-        %130 = OpAccessChain %_ptr_Uniform_float %x_19 %uint_0 %uint_0
-        %131 = OpLoad %float %130
-        %132 = OpVectorTimesScalar %v3float %129 %131
-               OpStore %x_61 %132
-               OpBranch %125
-        %125 = OpLabel
-        %133 = OpAccessChain %_ptr_Function_float %x_61 %uint_1
-        %134 = OpLoad %float %133
-        %136 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %137 = OpFAdd %float %123 %134
-               OpStore %136 %137
-               OpStore %i_1 %int_0
-               OpBranch %138
-        %138 = OpLabel
-               OpLoopMerge %139 %140 None
-               OpBranch %141
-        %141 = OpLabel
-        %142 = OpLoad %int %i_1
-        %144 = OpSLessThan %bool %142 %int_3
-               OpSelectionMerge %145 None
-               OpBranchConditional %144 %146 %147
-        %146 = OpLabel
-               OpBranch %145
-        %147 = OpLabel
-               OpBranch %139
-        %145 = OpLabel
-        %148 = OpLoad %int %i_1
-        %149 = OpAccessChain %_ptr_Function_float %c %148
-        %150 = OpLoad %float %149
-        %152 = OpFOrdGreaterThanEqual %bool %150 %float_1
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %153
-        %154 = OpLabel
-        %155 = OpLoad %int %i_1
-        %156 = OpLoad %int %i_1
-        %157 = OpAccessChain %_ptr_Function_float %c %156
-        %158 = OpLoad %float %157
-        %159 = OpLoad %int %i_1
-        %160 = OpAccessChain %_ptr_Function_float %c %159
-        %161 = OpLoad %float %160
-        %162 = OpAccessChain %_ptr_Function_float %c %155
-        %163 = OpFMul %float %158 %161
-               OpStore %162 %163
-               OpBranch %153
-        %153 = OpLabel
-               OpStore %j %float_0
-               OpBranch %165
-        %165 = OpLabel
-               OpLoopMerge %166 %167 None
-               OpBranch %168
-        %168 = OpLabel
-        %169 = OpAccessChain %_ptr_Uniform_float %x_19 %uint_0 %uint_0
-        %170 = OpLoad %float %169
-        %171 = OpAccessChain %_ptr_Uniform_float %x_19 %uint_0 %uint_1
-        %172 = OpLoad %float %171
-        %173 = OpFOrdGreaterThan %bool %170 %172
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-               OpBranch %174
-        %176 = OpLabel
-               OpBranch %166
-        %174 = OpLabel
-        %177 = OpLoad %float %j
-        %178 = OpAccessChain %_ptr_Uniform_float %x_19 %uint_0 %uint_0
-        %179 = OpLoad %float %178
-        %180 = OpFOrdGreaterThanEqual %bool %177 %179
-               OpSelectionMerge %181 None
-               OpBranchConditional %180 %182 %181
-        %182 = OpLabel
-               OpBranch %166
-        %181 = OpLabel
-        %183 = OpLoad %float %j
-        %184 = OpFAdd %float %183 %float_1
-               OpStore %j %184
-               OpBranch %167
-        %167 = OpLabel
-               OpBranch %165
-        %166 = OpLabel
-               OpBranch %140
-        %140 = OpLabel
-        %185 = OpLoad %int %i_1
-        %186 = OpIAdd %int %185 %int_1
-               OpStore %i_1 %186
-               OpBranch %138
-        %139 = OpLabel
-        %187 = OpLoad %v3float %c
-        %189 = OpExtInst %v3float %59 FAbs %187
-        %188 = OpExtInst %v3float %59 Normalize %189
-        %190 = OpCompositeExtract %float %188 0
-        %191 = OpCompositeExtract %float %188 1
-        %192 = OpCompositeExtract %float %188 2
-        %193 = OpCompositeConstruct %v4float %190 %191 %192 %float_1
-               OpStore %x_GLF_color %193
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %194
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %198 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %199 = OpFunctionCall %void %main_1
-        %200 = OpLoad %v4float %x_GLF_color
-        %201 = OpCompositeConstruct %main_out %200
-               OpReturnValue %201
-               OpFunctionEnd
-       %main = OpFunction %void None %79
-        %203 = OpLabel
-        %205 = OpLoad %v4float %gl_FragCoord_param_1
-        %204 = OpFunctionCall %main_out %main_inner %205
-        %206 = OpCompositeExtract %v4float %204 0
-               OpStore %x_GLF_color_1_1 %206
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.wgsl
deleted file mode 100644
index 97ffaf9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-true-conditional-simple-loop/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,149 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_19 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var result : f32;
-  var i : i32;
-  result = -0.5;
-  i = 1;
-  loop {
-    let x_144 : i32 = i;
-    if ((x_144 < 800)) {
-    } else {
-      break;
-    }
-    let x_147 : i32 = i;
-    if (((x_147 % 32) == 0)) {
-      let x_153 : f32 = result;
-      result = (x_153 + 0.400000006);
-    } else {
-      let x_155 : i32 = i;
-      let x_157 : f32 = *(thirty_two);
-      if (((f32(x_155) % round(x_157)) <= 0.01)) {
-        let x_163 : f32 = result;
-        result = (x_163 + 100.0);
-      }
-    }
-    let x_165 : i32 = i;
-    let x_167 : f32 = *(limit);
-    if ((f32(x_165) >= x_167)) {
-      let x_171 : f32 = result;
-      return x_171;
-    }
-
-    continuing {
-      let x_172 : i32 = i;
-      i = (x_172 + 1);
-    }
-  }
-  let x_174 : f32 = result;
-  return x_174;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var thirty_two_1 : f32;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var x_61 : vec3<f32>;
-  var i_1 : i32;
-  var j : f32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_63 : f32 = x_13.resolution.x;
-  thirty_two_1 = round((x_63 / 8.0));
-  let x_67 : f32 = gl_FragCoord.x;
-  param = x_67;
-  let x_68 : f32 = thirty_two_1;
-  param_1 = x_68;
-  let x_69 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_69;
-  let x_72 : f32 = gl_FragCoord.y;
-  param_2 = x_72;
-  let x_73 : f32 = thirty_two_1;
-  param_3 = x_73;
-  let x_74 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_74;
-  let x_77 : f32 = c.x;
-  if (true) {
-    let x_81 : vec3<f32> = c;
-    x_61 = x_81;
-  } else {
-    let x_82 : vec3<f32> = c;
-    let x_84 : f32 = x_19.injectionSwitch.x;
-    x_61 = (x_82 * x_84);
-  }
-  let x_87 : f32 = x_61.y;
-  c.z = (x_77 + x_87);
-  i_1 = 0;
-  loop {
-    let x_94 : i32 = i_1;
-    if ((x_94 < 3)) {
-    } else {
-      break;
-    }
-    let x_97 : i32 = i_1;
-    let x_99 : f32 = c[x_97];
-    if ((x_99 >= 1.0)) {
-      let x_103 : i32 = i_1;
-      let x_104 : i32 = i_1;
-      let x_106 : f32 = c[x_104];
-      let x_107 : i32 = i_1;
-      let x_109 : f32 = c[x_107];
-      c[x_103] = (x_106 * x_109);
-    }
-    j = 0.0;
-    loop {
-      let x_117 : f32 = x_19.injectionSwitch.x;
-      let x_119 : f32 = x_19.injectionSwitch.y;
-      if ((x_117 > x_119)) {
-      } else {
-        break;
-      }
-      let x_122 : f32 = j;
-      let x_124 : f32 = x_19.injectionSwitch.x;
-      if ((x_122 >= x_124)) {
-        break;
-      }
-      let x_128 : f32 = j;
-      j = (x_128 + 1.0);
-    }
-
-    continuing {
-      let x_130 : i32 = i_1;
-      i_1 = (x_130 + 1);
-    }
-  }
-  let x_132 : vec3<f32> = c;
-  let x_134 : vec3<f32> = normalize(abs(x_132));
-  x_GLF_color = vec4<f32>(x_134.x, x_134.y, x_134.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.hlsl
deleted file mode 100644
index 66fe270..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  {
-    for(; (i < 800); i = (i + 1)) {
-      if (((i % 32) == 0)) {
-        result = (result + 0.400000006f);
-      } else {
-        const int x_147 = i;
-        const float x_149 = thirty_two;
-        if (((float(x_147) - (round(x_149) * floor((float(x_147) / round(x_149))))) <= 0.01f)) {
-          result = (result + 100.0f);
-        }
-      }
-      const int x_157 = i;
-      const float x_159 = limit;
-      if ((float(x_157) >= x_159)) {
-        return result;
-      }
-    }
-  }
-  return result;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_63 = asfloat(x_13[0].x);
-  thirty_two_1 = round((x_63 / 8.0f));
-  const float x_67 = gl_FragCoord.x;
-  param = x_67;
-  param_1 = thirty_two_1;
-  const float x_69 = compute_value_f1_f1_(param, param_1);
-  c.x = x_69;
-  const float x_72 = gl_FragCoord.y;
-  param_2 = x_72;
-  param_3 = thirty_two_1;
-  const float x_74 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_74;
-  const float3 x_76 = c;
-  const float3 x_79 = c;
-  const float4x2 x_87 = float4x2(float2(x_79.x, x_79.y), float2(x_79.z, 1.0f), float2(1.0f, 0.0f), float2(1.0f, 0.0f));
-  c.z = (mul(float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f)), x_76).x + float3(x_87[0u].x, x_87[0u].y, x_87[1u].x).y);
-  i_1 = 0;
-  {
-    for(; (i_1 < 3); i_1 = (i_1 + 1)) {
-      const float x_104 = c[i_1];
-      if ((x_104 >= 1.0f)) {
-        const int x_108 = i_1;
-        const float x_111 = c[i_1];
-        const float x_114 = c[i_1];
-        set_float3(c, x_108, (x_111 * x_114));
-        const float x_118 = gl_FragCoord.y;
-        if ((x_118 < 0.0f)) {
-          break;
-        }
-      }
-    }
-  }
-  const float3 x_126 = normalize(abs(c));
-  x_GLF_color = float4(x_126.x, x_126.y, x_126.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.msl
deleted file mode 100755
index b1830a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.msl
+++ /dev/null
@@ -1,126 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  while (true) {
-    int const x_136 = i;
-    if ((x_136 < 800)) {
-    } else {
-      break;
-    }
-    int const x_139 = i;
-    if (((x_139 % 32) == 0)) {
-      float const x_145 = result;
-      result = (x_145 + 0.400000006f);
-    } else {
-      int const x_147 = i;
-      float const x_149 = *(thirty_two);
-      if (((float(x_147) - (rint(x_149) * floor((float(x_147) / rint(x_149))))) <= 0.01f)) {
-        float const x_155 = result;
-        result = (x_155 + 100.0f);
-      }
-    }
-    int const x_157 = i;
-    float const x_159 = *(limit);
-    if ((float(x_157) >= x_159)) {
-      float const x_163 = result;
-      return x_163;
-    }
-    {
-      int const x_164 = i;
-      i = as_type<int>((as_type<uint>(x_164) + as_type<uint>(1)));
-    }
-  }
-  float const x_166 = result;
-  return x_166;
-}
-
-void main_1(constant buf0& x_13, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_63 = x_13.resolution.x;
-  thirty_two_1 = rint((x_63 / 8.0f));
-  float const x_67 = (*(tint_symbol_3)).x;
-  param = x_67;
-  float const x_68 = thirty_two_1;
-  param_1 = x_68;
-  float const x_69 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_69;
-  float const x_72 = (*(tint_symbol_3)).y;
-  param_2 = x_72;
-  float const x_73 = thirty_two_1;
-  param_3 = x_73;
-  float const x_74 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_74;
-  float3 const x_76 = c;
-  float3 const x_79 = c;
-  float4x2 const x_87 = float4x2(float2(x_79.x, x_79.y), float2(x_79.z, 1.0f), float2(1.0f, 0.0f), float2(1.0f, 0.0f));
-  c.z = (((x_76 * float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f)))).x + float3(x_87[0u].x, x_87[0u].y, x_87[1u].x).y);
-  i_1 = 0;
-  while (true) {
-    int const x_99 = i_1;
-    if ((x_99 < 3)) {
-    } else {
-      break;
-    }
-    int const x_102 = i_1;
-    float const x_104 = c[x_102];
-    if ((x_104 >= 1.0f)) {
-      int const x_108 = i_1;
-      int const x_109 = i_1;
-      float const x_111 = c[x_109];
-      int const x_112 = i_1;
-      float const x_114 = c[x_112];
-      c[x_108] = (x_111 * x_114);
-      float const x_118 = (*(tint_symbol_3)).y;
-      if ((x_118 < 0.0f)) {
-        break;
-      }
-    }
-    {
-      int const x_122 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_122) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_124 = c;
-  float3 const x_126 = normalize(fabs(x_124));
-  *(tint_symbol_4) = float4(x_126.x, x_126.y, x_126.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_13, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.spvasm
deleted file mode 100644
index 7900ede..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,301 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 204
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %result "result"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %thirty_two_1 "thirty_two_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %22 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %81 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %88 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %98 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-%mat4v2float = OpTypeMatrix %v2float 4
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %132 = OpConstantComposite %v2float %float_1 %float_0
-     %uint_2 = OpConstant %uint 2
-%mat3v3float = OpTypeMatrix %v3float 3
-        %137 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-        %138 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-        %139 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-        %140 = OpConstantComposite %mat3v3float %137 %138 %139
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %191 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %15
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %20 = OpLabel
-     %result = OpVariable %_ptr_Function_float Function %22
-          %i = OpVariable %_ptr_Function_int Function %26
-               OpStore %result %float_n0_5
-               OpStore %i %int_1
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %i
-         %35 = OpSLessThan %bool %33 %int_800
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %30
-         %37 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpSMod %int %40 %int_32
-         %44 = OpIEqual %bool %42 %int_0
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %47
-         %46 = OpLabel
-         %48 = OpLoad %float %result
-         %50 = OpFAdd %float %48 %float_0_400000006
-               OpStore %result %50
-               OpBranch %45
-         %47 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %float %thirty_two
-         %54 = OpConvertSToF %float %51
-         %55 = OpExtInst %float %56 RoundEven %53
-         %58 = OpConvertSToF %float %51
-         %59 = OpExtInst %float %56 RoundEven %53
-         %60 = OpFDiv %float %58 %59
-         %57 = OpExtInst %float %56 Floor %60
-         %61 = OpFMul %float %55 %57
-         %62 = OpFSub %float %54 %61
-         %64 = OpFOrdLessThanEqual %bool %62 %float_0_00999999978
-               OpSelectionMerge %65 None
-               OpBranchConditional %64 %66 %65
-         %66 = OpLabel
-         %67 = OpLoad %float %result
-         %69 = OpFAdd %float %67 %float_100
-               OpStore %result %69
-               OpBranch %65
-         %65 = OpLabel
-               OpBranch %45
-         %45 = OpLabel
-         %70 = OpLoad %int %i
-         %72 = OpLoad %float %limit
-         %73 = OpConvertSToF %float %70
-         %74 = OpFOrdGreaterThanEqual %bool %73 %72
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-         %77 = OpLoad %float %result
-               OpReturnValue %77
-         %75 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %78 = OpLoad %int %i
-         %79 = OpIAdd %int %78 %int_1
-               OpStore %i %79
-               OpBranch %29
-         %30 = OpLabel
-         %80 = OpLoad %float %result
-               OpReturnValue %80
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %81
-         %84 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %88
-%thirty_two_1 = OpVariable %_ptr_Function_float Function %22
-      %param = OpVariable %_ptr_Function_float Function %22
-    %param_1 = OpVariable %_ptr_Function_float Function %22
-    %param_2 = OpVariable %_ptr_Function_float Function %22
-    %param_3 = OpVariable %_ptr_Function_float Function %22
-        %i_1 = OpVariable %_ptr_Function_int Function %26
-               OpStore %c %98
-        %102 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-        %103 = OpLoad %float %102
-        %105 = OpFDiv %float %103 %float_8
-        %104 = OpExtInst %float %56 RoundEven %105
-               OpStore %thirty_two_1 %104
-        %107 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %108 = OpLoad %float %107
-               OpStore %param %108
-        %109 = OpLoad %float %thirty_two_1
-               OpStore %param_1 %109
-        %110 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %113 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %113 %110
-        %115 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %116 = OpLoad %float %115
-               OpStore %param_2 %116
-        %117 = OpLoad %float %thirty_two_1
-               OpStore %param_3 %117
-        %118 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %121 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %121 %118
-        %122 = OpLoad %v3float %c
-        %123 = OpLoad %v3float %c
-        %125 = OpCompositeExtract %float %123 0
-        %126 = OpCompositeExtract %float %123 1
-        %127 = OpCompositeConstruct %v2float %125 %126
-        %128 = OpCompositeExtract %float %123 2
-        %130 = OpCompositeConstruct %v2float %128 %float_1
-        %133 = OpCompositeConstruct %mat4v2float %127 %130 %132 %132
-        %135 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %141 = OpVectorTimesMatrix %v3float %122 %140
-        %142 = OpCompositeExtract %float %141 0
-        %143 = OpCompositeExtract %v2float %133 0
-        %144 = OpCompositeExtract %float %143 0
-        %145 = OpCompositeExtract %v2float %133 0
-        %146 = OpCompositeExtract %float %145 1
-        %147 = OpCompositeExtract %v2float %133 1
-        %148 = OpCompositeExtract %float %147 0
-        %149 = OpCompositeConstruct %v3float %144 %146 %148
-        %150 = OpCompositeExtract %float %149 1
-        %151 = OpFAdd %float %142 %150
-               OpStore %135 %151
-               OpStore %i_1 %int_0
-               OpBranch %152
-        %152 = OpLabel
-               OpLoopMerge %153 %154 None
-               OpBranch %155
-        %155 = OpLabel
-        %156 = OpLoad %int %i_1
-        %158 = OpSLessThan %bool %156 %int_3
-               OpSelectionMerge %159 None
-               OpBranchConditional %158 %160 %161
-        %160 = OpLabel
-               OpBranch %159
-        %161 = OpLabel
-               OpBranch %153
-        %159 = OpLabel
-        %162 = OpLoad %int %i_1
-        %163 = OpAccessChain %_ptr_Function_float %c %162
-        %164 = OpLoad %float %163
-        %165 = OpFOrdGreaterThanEqual %bool %164 %float_1
-               OpSelectionMerge %166 None
-               OpBranchConditional %165 %167 %166
-        %167 = OpLabel
-        %168 = OpLoad %int %i_1
-        %169 = OpLoad %int %i_1
-        %170 = OpAccessChain %_ptr_Function_float %c %169
-        %171 = OpLoad %float %170
-        %172 = OpLoad %int %i_1
-        %173 = OpAccessChain %_ptr_Function_float %c %172
-        %174 = OpLoad %float %173
-        %175 = OpAccessChain %_ptr_Function_float %c %168
-        %176 = OpFMul %float %171 %174
-               OpStore %175 %176
-        %177 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %178 = OpLoad %float %177
-        %179 = OpFOrdLessThan %bool %178 %float_0
-               OpSelectionMerge %180 None
-               OpBranchConditional %179 %181 %180
-        %181 = OpLabel
-               OpBranch %153
-        %180 = OpLabel
-               OpBranch %166
-        %166 = OpLabel
-               OpBranch %154
-        %154 = OpLabel
-        %182 = OpLoad %int %i_1
-        %183 = OpIAdd %int %182 %int_1
-               OpStore %i_1 %183
-               OpBranch %152
-        %153 = OpLabel
-        %184 = OpLoad %v3float %c
-        %186 = OpExtInst %v3float %56 FAbs %184
-        %185 = OpExtInst %v3float %56 Normalize %186
-        %187 = OpCompositeExtract %float %185 0
-        %188 = OpCompositeExtract %float %185 1
-        %189 = OpCompositeExtract %float %185 2
-        %190 = OpCompositeConstruct %v4float %187 %188 %189 %float_1
-               OpStore %x_GLF_color %190
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %191
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %195 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %196 = OpFunctionCall %void %main_1
-        %197 = OpLoad %v4float %x_GLF_color
-        %198 = OpCompositeConstruct %main_out %197
-               OpReturnValue %198
-               OpFunctionEnd
-       %main = OpFunction %void None %81
-        %200 = OpLabel
-        %202 = OpLoad %v4float %gl_FragCoord_param_1
-        %201 = OpFunctionCall %main_out %main_inner %202
-        %203 = OpCompositeExtract %v4float %201 0
-               OpStore %x_GLF_color_1_1 %203
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.wgsl
deleted file mode 100644
index 6d227b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,121 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var result : f32;
-  var i : i32;
-  result = -0.5;
-  i = 1;
-  loop {
-    let x_136 : i32 = i;
-    if ((x_136 < 800)) {
-    } else {
-      break;
-    }
-    let x_139 : i32 = i;
-    if (((x_139 % 32) == 0)) {
-      let x_145 : f32 = result;
-      result = (x_145 + 0.400000006);
-    } else {
-      let x_147 : i32 = i;
-      let x_149 : f32 = *(thirty_two);
-      if (((f32(x_147) - (round(x_149) * floor((f32(x_147) / round(x_149))))) <= 0.01)) {
-        let x_155 : f32 = result;
-        result = (x_155 + 100.0);
-      }
-    }
-    let x_157 : i32 = i;
-    let x_159 : f32 = *(limit);
-    if ((f32(x_157) >= x_159)) {
-      let x_163 : f32 = result;
-      return x_163;
-    }
-
-    continuing {
-      let x_164 : i32 = i;
-      i = (x_164 + 1);
-    }
-  }
-  let x_166 : f32 = result;
-  return x_166;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var thirty_two_1 : f32;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var i_1 : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_63 : f32 = x_13.resolution.x;
-  thirty_two_1 = round((x_63 / 8.0));
-  let x_67 : f32 = gl_FragCoord.x;
-  param = x_67;
-  let x_68 : f32 = thirty_two_1;
-  param_1 = x_68;
-  let x_69 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_69;
-  let x_72 : f32 = gl_FragCoord.y;
-  param_2 = x_72;
-  let x_73 : f32 = thirty_two_1;
-  param_3 = x_73;
-  let x_74 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_74;
-  let x_76 : vec3<f32> = c;
-  let x_79 : vec3<f32> = c;
-  let x_87 : mat4x2<f32> = mat4x2<f32>(vec2<f32>(x_79.x, x_79.y), vec2<f32>(x_79.z, 1.0), vec2<f32>(1.0, 0.0), vec2<f32>(1.0, 0.0));
-  c.z = (((x_76 * mat3x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0)))).x + vec3<f32>(x_87[0u].x, x_87[0u].y, x_87[1u].x).y);
-  i_1 = 0;
-  loop {
-    let x_99 : i32 = i_1;
-    if ((x_99 < 3)) {
-    } else {
-      break;
-    }
-    let x_102 : i32 = i_1;
-    let x_104 : f32 = c[x_102];
-    if ((x_104 >= 1.0)) {
-      let x_108 : i32 = i_1;
-      let x_109 : i32 = i_1;
-      let x_111 : f32 = c[x_109];
-      let x_112 : i32 = i_1;
-      let x_114 : f32 = c[x_112];
-      c[x_108] = (x_111 * x_114);
-      let x_118 : f32 = gl_FragCoord.y;
-      if ((x_118 < 0.0)) {
-        break;
-      }
-    }
-
-    continuing {
-      let x_122 : i32 = i_1;
-      i_1 = (x_122 + 1);
-    }
-  }
-  let x_124 : vec3<f32> = c;
-  let x_126 : vec3<f32> = normalize(abs(x_124));
-  x_GLF_color = vec4<f32>(x_126.x, x_126.y, x_126.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.hlsl
deleted file mode 100644
index 579ca64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,105 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-cbuffer cbuffer_x_13 : register(b0, space0) {
-  uint4 x_13[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float compute_value_f1_f1_(inout float limit, inout float thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  {
-    for(; (i < 800); i = (i + 1)) {
-      if (((i % 32) == 0)) {
-        result = (result + 0.400000006f);
-      } else {
-        const int x_147 = i;
-        const float x_149 = thirty_two;
-        if (((float(x_147) % round(x_149)) <= 0.01f)) {
-          result = (result + 100.0f);
-        }
-      }
-      const int x_157 = i;
-      const float x_159 = limit;
-      if ((float(x_157) >= x_159)) {
-        return result;
-      }
-    }
-  }
-  return result;
-}
-
-void main_1() {
-  float3 c = float3(0.0f, 0.0f, 0.0f);
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  const float x_63 = asfloat(x_13[0].x);
-  thirty_two_1 = round((x_63 / 8.0f));
-  const float x_67 = gl_FragCoord.x;
-  param = x_67;
-  param_1 = thirty_two_1;
-  const float x_69 = compute_value_f1_f1_(param, param_1);
-  c.x = x_69;
-  const float x_72 = gl_FragCoord.y;
-  param_2 = x_72;
-  param_3 = thirty_two_1;
-  const float x_74 = compute_value_f1_f1_(param_2, param_3);
-  c.y = x_74;
-  const float3 x_76 = c;
-  const float3 x_79 = c;
-  const float4x2 x_87 = float4x2(float2(x_79.x, x_79.y), float2(x_79.z, 1.0f), float2(1.0f, 0.0f), float2(1.0f, 0.0f));
-  c.z = (mul(float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f)), x_76).x + float3(x_87[0u].x, x_87[0u].y, x_87[1u].x).y);
-  i_1 = 0;
-  {
-    for(; (i_1 < 3); i_1 = (i_1 + 1)) {
-      const float x_104 = c[i_1];
-      if ((x_104 >= 1.0f)) {
-        const int x_108 = i_1;
-        const float x_111 = c[i_1];
-        const float x_114 = c[i_1];
-        set_float3(c, x_108, (x_111 * x_114));
-        const float x_118 = gl_FragCoord.y;
-        if ((x_118 < 0.0f)) {
-          break;
-        }
-      }
-    }
-  }
-  const float3 x_126 = normalize(abs(c));
-  x_GLF_color = float4(x_126.x, x_126.y, x_126.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.msl
deleted file mode 100755
index eef1996..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.msl
+++ /dev/null
@@ -1,126 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float compute_value_f1_f1_(thread float* const limit, thread float* const thirty_two) {
-  float result = 0.0f;
-  int i = 0;
-  result = -0.5f;
-  i = 1;
-  while (true) {
-    int const x_136 = i;
-    if ((x_136 < 800)) {
-    } else {
-      break;
-    }
-    int const x_139 = i;
-    if (((x_139 % 32) == 0)) {
-      float const x_145 = result;
-      result = (x_145 + 0.400000006f);
-    } else {
-      int const x_147 = i;
-      float const x_149 = *(thirty_two);
-      if ((fmod(float(x_147), rint(x_149)) <= 0.01f)) {
-        float const x_155 = result;
-        result = (x_155 + 100.0f);
-      }
-    }
-    int const x_157 = i;
-    float const x_159 = *(limit);
-    if ((float(x_157) >= x_159)) {
-      float const x_163 = result;
-      return x_163;
-    }
-    {
-      int const x_164 = i;
-      i = as_type<int>((as_type<uint>(x_164) + as_type<uint>(1)));
-    }
-  }
-  float const x_166 = result;
-  return x_166;
-}
-
-void main_1(constant buf0& x_13, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float3 c = 0.0f;
-  float thirty_two_1 = 0.0f;
-  float param = 0.0f;
-  float param_1 = 0.0f;
-  float param_2 = 0.0f;
-  float param_3 = 0.0f;
-  int i_1 = 0;
-  c = float3(7.0f, 8.0f, 9.0f);
-  float const x_63 = x_13.resolution.x;
-  thirty_two_1 = rint((x_63 / 8.0f));
-  float const x_67 = (*(tint_symbol_3)).x;
-  param = x_67;
-  float const x_68 = thirty_two_1;
-  param_1 = x_68;
-  float const x_69 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_69;
-  float const x_72 = (*(tint_symbol_3)).y;
-  param_2 = x_72;
-  float const x_73 = thirty_two_1;
-  param_3 = x_73;
-  float const x_74 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_74;
-  float3 const x_76 = c;
-  float3 const x_79 = c;
-  float4x2 const x_87 = float4x2(float2(x_79.x, x_79.y), float2(x_79.z, 1.0f), float2(1.0f, 0.0f), float2(1.0f, 0.0f));
-  c.z = (((x_76 * float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f)))).x + float3(x_87[0u].x, x_87[0u].y, x_87[1u].x).y);
-  i_1 = 0;
-  while (true) {
-    int const x_99 = i_1;
-    if ((x_99 < 3)) {
-    } else {
-      break;
-    }
-    int const x_102 = i_1;
-    float const x_104 = c[x_102];
-    if ((x_104 >= 1.0f)) {
-      int const x_108 = i_1;
-      int const x_109 = i_1;
-      float const x_111 = c[x_109];
-      int const x_112 = i_1;
-      float const x_114 = c[x_112];
-      c[x_108] = (x_111 * x_114);
-      float const x_118 = (*(tint_symbol_3)).y;
-      if ((x_118 < 0.0f)) {
-        break;
-      }
-    }
-    {
-      int const x_122 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_122) + as_type<uint>(1)));
-    }
-  }
-  float3 const x_124 = c;
-  float3 const x_126 = normalize(fabs(x_124));
-  *(tint_symbol_4) = float4(x_126.x, x_126.y, x_126.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_13, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_13, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_13 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_13, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.spvasm
deleted file mode 100644
index 03f2676..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,296 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 199
-; Schema: 0
-               OpCapability Shader
-         %56 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %compute_value_f1_f1_ "compute_value_f1_f1_"
-               OpName %limit "limit"
-               OpName %thirty_two "thirty_two"
-               OpName %result "result"
-               OpName %i "i"
-               OpName %main_1 "main_1"
-               OpName %c "c"
-               OpName %thirty_two_1 "thirty_two_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_13 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_float = OpTypePointer Function %float
-         %15 = OpTypeFunction %float %_ptr_Function_float %_ptr_Function_float
-         %22 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
- %float_n0_5 = OpConstant %float -0.5
-      %int_1 = OpConstant %int 1
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-     %int_32 = OpConstant %int 32
-      %int_0 = OpConstant %int 0
-%float_0_400000006 = OpConstant %float 0.400000006
-%float_0_00999999978 = OpConstant %float 0.00999999978
-  %float_100 = OpConstant %float 100
-       %void = OpTypeVoid
-         %76 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %83 = OpConstantNull %v3float
-    %float_7 = OpConstant %float 7
-    %float_8 = OpConstant %float 8
-    %float_9 = OpConstant %float 9
-         %93 = OpConstantComposite %v3float %float_7 %float_8 %float_9
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-%mat4v2float = OpTypeMatrix %v2float 4
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %127 = OpConstantComposite %v2float %float_1 %float_0
-     %uint_2 = OpConstant %uint 2
-%mat3v3float = OpTypeMatrix %v3float 3
-        %132 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-        %133 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-        %134 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-        %135 = OpConstantComposite %mat3v3float %132 %133 %134
-      %int_3 = OpConstant %int 3
-   %main_out = OpTypeStruct %v4float
-        %186 = OpTypeFunction %main_out %v4float
-%compute_value_f1_f1_ = OpFunction %float None %15
-      %limit = OpFunctionParameter %_ptr_Function_float
- %thirty_two = OpFunctionParameter %_ptr_Function_float
-         %20 = OpLabel
-     %result = OpVariable %_ptr_Function_float Function %22
-          %i = OpVariable %_ptr_Function_int Function %26
-               OpStore %result %float_n0_5
-               OpStore %i %int_1
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %i
-         %35 = OpSLessThan %bool %33 %int_800
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-               OpBranch %30
-         %37 = OpLabel
-         %40 = OpLoad %int %i
-         %42 = OpSMod %int %40 %int_32
-         %44 = OpIEqual %bool %42 %int_0
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %47
-         %46 = OpLabel
-         %48 = OpLoad %float %result
-         %50 = OpFAdd %float %48 %float_0_400000006
-               OpStore %result %50
-               OpBranch %45
-         %47 = OpLabel
-         %51 = OpLoad %int %i
-         %53 = OpLoad %float %thirty_two
-         %54 = OpConvertSToF %float %51
-         %55 = OpExtInst %float %56 RoundEven %53
-         %57 = OpFRem %float %54 %55
-         %59 = OpFOrdLessThanEqual %bool %57 %float_0_00999999978
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %60
-         %61 = OpLabel
-         %62 = OpLoad %float %result
-         %64 = OpFAdd %float %62 %float_100
-               OpStore %result %64
-               OpBranch %60
-         %60 = OpLabel
-               OpBranch %45
-         %45 = OpLabel
-         %65 = OpLoad %int %i
-         %67 = OpLoad %float %limit
-         %68 = OpConvertSToF %float %65
-         %69 = OpFOrdGreaterThanEqual %bool %68 %67
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %70
-         %71 = OpLabel
-         %72 = OpLoad %float %result
-               OpReturnValue %72
-         %70 = OpLabel
-               OpBranch %31
-         %31 = OpLabel
-         %73 = OpLoad %int %i
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %i %74
-               OpBranch %29
-         %30 = OpLabel
-         %75 = OpLoad %float %result
-               OpReturnValue %75
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %76
-         %79 = OpLabel
-          %c = OpVariable %_ptr_Function_v3float Function %83
-%thirty_two_1 = OpVariable %_ptr_Function_float Function %22
-      %param = OpVariable %_ptr_Function_float Function %22
-    %param_1 = OpVariable %_ptr_Function_float Function %22
-    %param_2 = OpVariable %_ptr_Function_float Function %22
-    %param_3 = OpVariable %_ptr_Function_float Function %22
-        %i_1 = OpVariable %_ptr_Function_int Function %26
-               OpStore %c %93
-         %97 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-         %98 = OpLoad %float %97
-        %100 = OpFDiv %float %98 %float_8
-         %99 = OpExtInst %float %56 RoundEven %100
-               OpStore %thirty_two_1 %99
-        %102 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %103 = OpLoad %float %102
-               OpStore %param %103
-        %104 = OpLoad %float %thirty_two_1
-               OpStore %param_1 %104
-        %105 = OpFunctionCall %float %compute_value_f1_f1_ %param %param_1
-        %108 = OpAccessChain %_ptr_Function_float %c %uint_0
-               OpStore %108 %105
-        %110 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %111 = OpLoad %float %110
-               OpStore %param_2 %111
-        %112 = OpLoad %float %thirty_two_1
-               OpStore %param_3 %112
-        %113 = OpFunctionCall %float %compute_value_f1_f1_ %param_2 %param_3
-        %116 = OpAccessChain %_ptr_Function_float %c %uint_1
-               OpStore %116 %113
-        %117 = OpLoad %v3float %c
-        %118 = OpLoad %v3float %c
-        %120 = OpCompositeExtract %float %118 0
-        %121 = OpCompositeExtract %float %118 1
-        %122 = OpCompositeConstruct %v2float %120 %121
-        %123 = OpCompositeExtract %float %118 2
-        %125 = OpCompositeConstruct %v2float %123 %float_1
-        %128 = OpCompositeConstruct %mat4v2float %122 %125 %127 %127
-        %130 = OpAccessChain %_ptr_Function_float %c %uint_2
-        %136 = OpVectorTimesMatrix %v3float %117 %135
-        %137 = OpCompositeExtract %float %136 0
-        %138 = OpCompositeExtract %v2float %128 0
-        %139 = OpCompositeExtract %float %138 0
-        %140 = OpCompositeExtract %v2float %128 0
-        %141 = OpCompositeExtract %float %140 1
-        %142 = OpCompositeExtract %v2float %128 1
-        %143 = OpCompositeExtract %float %142 0
-        %144 = OpCompositeConstruct %v3float %139 %141 %143
-        %145 = OpCompositeExtract %float %144 1
-        %146 = OpFAdd %float %137 %145
-               OpStore %130 %146
-               OpStore %i_1 %int_0
-               OpBranch %147
-        %147 = OpLabel
-               OpLoopMerge %148 %149 None
-               OpBranch %150
-        %150 = OpLabel
-        %151 = OpLoad %int %i_1
-        %153 = OpSLessThan %bool %151 %int_3
-               OpSelectionMerge %154 None
-               OpBranchConditional %153 %155 %156
-        %155 = OpLabel
-               OpBranch %154
-        %156 = OpLabel
-               OpBranch %148
-        %154 = OpLabel
-        %157 = OpLoad %int %i_1
-        %158 = OpAccessChain %_ptr_Function_float %c %157
-        %159 = OpLoad %float %158
-        %160 = OpFOrdGreaterThanEqual %bool %159 %float_1
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %161
-        %162 = OpLabel
-        %163 = OpLoad %int %i_1
-        %164 = OpLoad %int %i_1
-        %165 = OpAccessChain %_ptr_Function_float %c %164
-        %166 = OpLoad %float %165
-        %167 = OpLoad %int %i_1
-        %168 = OpAccessChain %_ptr_Function_float %c %167
-        %169 = OpLoad %float %168
-        %170 = OpAccessChain %_ptr_Function_float %c %163
-        %171 = OpFMul %float %166 %169
-               OpStore %170 %171
-        %172 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %173 = OpLoad %float %172
-        %174 = OpFOrdLessThan %bool %173 %float_0
-               OpSelectionMerge %175 None
-               OpBranchConditional %174 %176 %175
-        %176 = OpLabel
-               OpBranch %148
-        %175 = OpLabel
-               OpBranch %161
-        %161 = OpLabel
-               OpBranch %149
-        %149 = OpLabel
-        %177 = OpLoad %int %i_1
-        %178 = OpIAdd %int %177 %int_1
-               OpStore %i_1 %178
-               OpBranch %147
-        %148 = OpLabel
-        %179 = OpLoad %v3float %c
-        %181 = OpExtInst %v3float %56 FAbs %179
-        %180 = OpExtInst %v3float %56 Normalize %181
-        %182 = OpCompositeExtract %float %180 0
-        %183 = OpCompositeExtract %float %180 1
-        %184 = OpCompositeExtract %float %180 2
-        %185 = OpCompositeConstruct %v4float %182 %183 %184 %float_1
-               OpStore %x_GLF_color %185
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %186
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %190 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %191 = OpFunctionCall %void %main_1
-        %192 = OpLoad %v4float %x_GLF_color
-        %193 = OpCompositeConstruct %main_out %192
-               OpReturnValue %193
-               OpFunctionEnd
-       %main = OpFunction %void None %76
-        %195 = OpLabel
-        %197 = OpLoad %v4float %gl_FragCoord_param_1
-        %196 = OpFunctionCall %main_out %main_inner %197
-        %198 = OpCompositeExtract %v4float %196 0
-               OpStore %x_GLF_color_1_1 %198
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.wgsl
deleted file mode 100644
index ee16548..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-colorgrid-modulo-vec3-values-from-matrix/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,121 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_13 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
-  var result : f32;
-  var i : i32;
-  result = -0.5;
-  i = 1;
-  loop {
-    let x_136 : i32 = i;
-    if ((x_136 < 800)) {
-    } else {
-      break;
-    }
-    let x_139 : i32 = i;
-    if (((x_139 % 32) == 0)) {
-      let x_145 : f32 = result;
-      result = (x_145 + 0.400000006);
-    } else {
-      let x_147 : i32 = i;
-      let x_149 : f32 = *(thirty_two);
-      if (((f32(x_147) % round(x_149)) <= 0.01)) {
-        let x_155 : f32 = result;
-        result = (x_155 + 100.0);
-      }
-    }
-    let x_157 : i32 = i;
-    let x_159 : f32 = *(limit);
-    if ((f32(x_157) >= x_159)) {
-      let x_163 : f32 = result;
-      return x_163;
-    }
-
-    continuing {
-      let x_164 : i32 = i;
-      i = (x_164 + 1);
-    }
-  }
-  let x_166 : f32 = result;
-  return x_166;
-}
-
-fn main_1() {
-  var c : vec3<f32>;
-  var thirty_two_1 : f32;
-  var param : f32;
-  var param_1 : f32;
-  var param_2 : f32;
-  var param_3 : f32;
-  var i_1 : i32;
-  c = vec3<f32>(7.0, 8.0, 9.0);
-  let x_63 : f32 = x_13.resolution.x;
-  thirty_two_1 = round((x_63 / 8.0));
-  let x_67 : f32 = gl_FragCoord.x;
-  param = x_67;
-  let x_68 : f32 = thirty_two_1;
-  param_1 = x_68;
-  let x_69 : f32 = compute_value_f1_f1_(&(param), &(param_1));
-  c.x = x_69;
-  let x_72 : f32 = gl_FragCoord.y;
-  param_2 = x_72;
-  let x_73 : f32 = thirty_two_1;
-  param_3 = x_73;
-  let x_74 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
-  c.y = x_74;
-  let x_76 : vec3<f32> = c;
-  let x_79 : vec3<f32> = c;
-  let x_87 : mat4x2<f32> = mat4x2<f32>(vec2<f32>(x_79.x, x_79.y), vec2<f32>(x_79.z, 1.0), vec2<f32>(1.0, 0.0), vec2<f32>(1.0, 0.0));
-  c.z = (((x_76 * mat3x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0)))).x + vec3<f32>(x_87[0u].x, x_87[0u].y, x_87[1u].x).y);
-  i_1 = 0;
-  loop {
-    let x_99 : i32 = i_1;
-    if ((x_99 < 3)) {
-    } else {
-      break;
-    }
-    let x_102 : i32 = i_1;
-    let x_104 : f32 = c[x_102];
-    if ((x_104 >= 1.0)) {
-      let x_108 : i32 = i_1;
-      let x_109 : i32 = i_1;
-      let x_111 : f32 = c[x_109];
-      let x_112 : i32 = i_1;
-      let x_114 : f32 = c[x_112];
-      c[x_108] = (x_111 * x_114);
-      let x_118 : f32 = gl_FragCoord.y;
-      if ((x_118 < 0.0)) {
-        break;
-      }
-    }
-
-    continuing {
-      let x_122 : i32 = i_1;
-      i_1 = (x_122 + 1);
-    }
-  }
-  let x_124 : vec3<f32> = c;
-  let x_126 : vec3<f32> = normalize(abs(x_124));
-  x_GLF_color = vec4<f32>(x_126.x, x_126.y, x_126.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.hlsl
deleted file mode 100644
index a2853d8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,299 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_260 = from;
-  k = x_260;
-  const int x_261 = from;
-  i = x_261;
-  const int x_262 = mid;
-  j = (x_262 + 1);
-  while (true) {
-    const int x_268 = i;
-    const int x_269 = mid;
-    const int x_271 = j;
-    const int x_272 = to;
-    if (((x_268 <= x_269) & (x_271 <= x_272))) {
-    } else {
-      break;
-    }
-    const int x_278 = data[i];
-    const int x_281 = data[j];
-    if ((x_278 < x_281)) {
-      const int x_286 = k;
-      k = (x_286 + 1);
-      const int x_288 = i;
-      i = (x_288 + 1);
-      const int x_291 = data[x_288];
-      temp[x_286] = x_291;
-    } else {
-      const int x_293 = k;
-      k = (x_293 + 1);
-      const int x_295 = j;
-      j = (x_295 + 1);
-      const int x_298 = data[x_295];
-      temp[x_293] = x_298;
-    }
-  }
-  while (true) {
-    const int x_304 = i;
-    const int x_306 = i;
-    const int x_307 = mid;
-    if (((x_304 < 10) & (x_306 <= x_307))) {
-    } else {
-      break;
-    }
-    const int x_311 = k;
-    k = (x_311 + 1);
-    const int x_313 = i;
-    i = (x_313 + 1);
-    const int x_316 = data[x_313];
-    temp[x_311] = x_316;
-  }
-  const int x_318 = from;
-  i_1 = x_318;
-  while (true) {
-    const int x_323 = i_1;
-    const int x_324 = to;
-    if ((x_323 <= x_324)) {
-    } else {
-      break;
-    }
-    const int x_327 = i_1;
-    const int x_330 = temp[i_1];
-    data[x_327] = x_330;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-int func_i1_i1_(inout int m, inout int high) {
-  int x = 0;
-  int x_335 = 0;
-  int x_336 = 0;
-  const float x_338 = gl_FragCoord.x;
-  if ((x_338 >= 0.0f)) {
-    if (false) {
-      const int x_346 = high;
-      x_336 = (x_346 << asuint(0));
-    } else {
-      x_336 = 4;
-    }
-    x_335 = (1 << asuint(x_336));
-  } else {
-    x_335 = 1;
-  }
-  x = x_335;
-  x = (x >> asuint(4));
-  const int x_353 = m;
-  const int x_355 = m;
-  const int x_357 = m;
-  return clamp((2 * x_353), (2 * x_355), ((2 * x_357) / x));
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high_1 = 0;
-  int m_1 = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int param_4 = 0;
-  low = 0;
-  high_1 = 9;
-  m_1 = 1;
-  {
-    for(; (m_1 <= high_1); m_1 = (2 * m_1)) {
-      i_2 = low;
-      while (true) {
-        if ((i_2 < high_1)) {
-        } else {
-          break;
-        }
-        from_1 = i_2;
-        mid_1 = ((i_2 + m_1) - 1);
-        to_1 = min(((i_2 + (2 * m_1)) - 1), high_1);
-        param = from_1;
-        param_1 = mid_1;
-        param_2 = to_1;
-        merge_i1_i1_i1_(param, param_1, param_2);
-        {
-          param_3 = m_1;
-          param_4 = high_1;
-          const int x_398 = func_i1_i1_(param_3, param_4);
-          i_2 = (i_2 + x_398);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_93 = asfloat(x_34[0].x);
-  i_3 = int(x_93);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_142 = j_1;
-      const int x_145 = data[j_1];
-      temp[x_142] = x_145;
-    }
-  }
-  mergeSort_();
-  const float x_151 = gl_FragCoord.y;
-  if ((int(x_151) < 30)) {
-    const int x_158 = data[0];
-    grey = (0.5f + (float(x_158) / 10.0f));
-  } else {
-    const float x_163 = gl_FragCoord.y;
-    if ((int(x_163) < 60)) {
-      const int x_170 = data[1];
-      grey = (0.5f + (float(x_170) / 10.0f));
-    } else {
-      const float x_175 = gl_FragCoord.y;
-      if ((int(x_175) < 90)) {
-        const int x_182 = data[2];
-        grey = (0.5f + (float(x_182) / 10.0f));
-      } else {
-        const float x_187 = gl_FragCoord.y;
-        if ((int(x_187) < 120)) {
-          const int x_194 = data[3];
-          grey = (0.5f + (float(x_194) / 10.0f));
-        } else {
-          const float x_199 = gl_FragCoord.y;
-          if ((int(x_199) < 150)) {
-            discard;
-          } else {
-            const float x_206 = gl_FragCoord.y;
-            if ((int(x_206) < 180)) {
-              const int x_213 = data[5];
-              grey = (0.5f + (float(x_213) / 10.0f));
-            } else {
-              const float x_218 = gl_FragCoord.y;
-              if ((int(x_218) < 210)) {
-                const int x_225 = data[6];
-                grey = (0.5f + (float(x_225) / 10.0f));
-              } else {
-                const float x_230 = gl_FragCoord.y;
-                if ((int(x_230) < 240)) {
-                  const int x_237 = data[7];
-                  grey = (0.5f + (float(x_237) / 10.0f));
-                } else {
-                  const float x_242 = gl_FragCoord.y;
-                  if ((int(x_242) < 270)) {
-                    const int x_249 = data[8];
-                    grey = (0.5f + (float(x_249) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_253 = grey;
-  const float3 x_254 = float3(x_253, x_253, x_253);
-  x_GLF_color = float4(x_254.x, x_254.y, x_254.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.msl
deleted file mode 100644
index d0cde33..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.msl
+++ /dev/null
@@ -1,354 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_260 = *(from);
-  k = x_260;
-  int const x_261 = *(from);
-  i = x_261;
-  int const x_262 = *(mid);
-  j = as_type<int>((as_type<uint>(x_262) + as_type<uint>(1)));
-  while (true) {
-    int const x_268 = i;
-    int const x_269 = *(mid);
-    int const x_271 = j;
-    int const x_272 = *(to);
-    if (((x_268 <= x_269) & (x_271 <= x_272))) {
-    } else {
-      break;
-    }
-    int const x_276 = i;
-    int const x_278 = (*(tint_symbol_3)).arr[x_276];
-    int const x_279 = j;
-    int const x_281 = (*(tint_symbol_3)).arr[x_279];
-    if ((x_278 < x_281)) {
-      int const x_286 = k;
-      k = as_type<int>((as_type<uint>(x_286) + as_type<uint>(1)));
-      int const x_288 = i;
-      i = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
-      int const x_291 = (*(tint_symbol_3)).arr[x_288];
-      (*(tint_symbol_4)).arr[x_286] = x_291;
-    } else {
-      int const x_293 = k;
-      k = as_type<int>((as_type<uint>(x_293) + as_type<uint>(1)));
-      int const x_295 = j;
-      j = as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
-      int const x_298 = (*(tint_symbol_3)).arr[x_295];
-      (*(tint_symbol_4)).arr[x_293] = x_298;
-    }
-  }
-  while (true) {
-    int const x_304 = i;
-    int const x_306 = i;
-    int const x_307 = *(mid);
-    if (((x_304 < 10) & (x_306 <= x_307))) {
-    } else {
-      break;
-    }
-    int const x_311 = k;
-    k = as_type<int>((as_type<uint>(x_311) + as_type<uint>(1)));
-    int const x_313 = i;
-    i = as_type<int>((as_type<uint>(x_313) + as_type<uint>(1)));
-    int const x_316 = (*(tint_symbol_3)).arr[x_313];
-    (*(tint_symbol_4)).arr[x_311] = x_316;
-  }
-  int const x_318 = *(from);
-  i_1 = x_318;
-  while (true) {
-    int const x_323 = i_1;
-    int const x_324 = *(to);
-    if ((x_323 <= x_324)) {
-    } else {
-      break;
-    }
-    int const x_327 = i_1;
-    int const x_328 = i_1;
-    int const x_330 = (*(tint_symbol_4)).arr[x_328];
-    (*(tint_symbol_3)).arr[x_327] = x_330;
-    {
-      int const x_332 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_332) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-int func_i1_i1_(thread int* const m, thread int* const high, thread float4* const tint_symbol_5) {
-  int x = 0;
-  int x_335 = 0;
-  int x_336 = 0;
-  float const x_338 = (*(tint_symbol_5)).x;
-  if ((x_338 >= 0.0f)) {
-    if (false) {
-      int const x_346 = *(high);
-      x_336 = as_type<int>((as_type<uint>(x_346) << as_type<uint>(0)));
-    } else {
-      x_336 = 4;
-    }
-    int const x_348 = x_336;
-    x_335 = as_type<int>((as_type<uint>(1) << as_type<uint>(x_348)));
-  } else {
-    x_335 = 1;
-  }
-  int const x_350 = x_335;
-  x = x_350;
-  int const x_351 = x;
-  x = (x_351 >> as_type<uint>(4));
-  int const x_353 = *(m);
-  int const x_355 = *(m);
-  int const x_357 = *(m);
-  int const x_359 = x;
-  return clamp(as_type<int>((as_type<uint>(2) * as_type<uint>(x_353))), as_type<int>((as_type<uint>(2) * as_type<uint>(x_355))), (as_type<int>((as_type<uint>(2) * as_type<uint>(x_357))) / x_359));
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int low = 0;
-  int high_1 = 0;
-  int m_1 = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int param_4 = 0;
-  low = 0;
-  high_1 = 9;
-  m_1 = 1;
-  while (true) {
-    int const x_367 = m_1;
-    int const x_368 = high_1;
-    if ((x_367 <= x_368)) {
-    } else {
-      break;
-    }
-    int const x_371 = low;
-    i_2 = x_371;
-    while (true) {
-      int const x_376 = i_2;
-      int const x_377 = high_1;
-      if ((x_376 < x_377)) {
-      } else {
-        break;
-      }
-      int const x_380 = i_2;
-      from_1 = x_380;
-      int const x_381 = i_2;
-      int const x_382 = m_1;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_381) + as_type<uint>(x_382)))) - as_type<uint>(1)));
-      int const x_385 = i_2;
-      int const x_386 = m_1;
-      int const x_390 = high_1;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_385) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_386))))))) - as_type<uint>(1))), x_390);
-      int const x_392 = from_1;
-      param = x_392;
-      int const x_393 = mid_1;
-      param_1 = x_393;
-      int const x_394 = to_1;
-      param_2 = x_394;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_6, tint_symbol_7);
-      {
-        int const x_396 = m_1;
-        param_3 = x_396;
-        int const x_397 = high_1;
-        param_4 = x_397;
-        int const x_398 = func_i1_i1_(&(param_3), &(param_4), tint_symbol_8);
-        int const x_399 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_399) + as_type<uint>(x_398)));
-      }
-    }
-    {
-      int const x_401 = m_1;
-      m_1 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_401)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_34, thread tint_array_wrapper* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_93 = x_34.injectionSwitch.x;
-  i_3 = int(x_93);
-  while (true) {
-    int const x_99 = i_3;
-    switch(x_99) {
-      case 9: {
-        int const x_129 = i_3;
-        (*(tint_symbol_9)).arr[x_129] = -5;
-        break;
-      }
-      case 8: {
-        int const x_127 = i_3;
-        (*(tint_symbol_9)).arr[x_127] = -4;
-        break;
-      }
-      case 7: {
-        int const x_125 = i_3;
-        (*(tint_symbol_9)).arr[x_125] = -3;
-        break;
-      }
-      case 6: {
-        int const x_123 = i_3;
-        (*(tint_symbol_9)).arr[x_123] = -2;
-        break;
-      }
-      case 5: {
-        int const x_121 = i_3;
-        (*(tint_symbol_9)).arr[x_121] = -1;
-        break;
-      }
-      case 4: {
-        int const x_119 = i_3;
-        (*(tint_symbol_9)).arr[x_119] = 0;
-        break;
-      }
-      case 3: {
-        int const x_117 = i_3;
-        (*(tint_symbol_9)).arr[x_117] = 1;
-        break;
-      }
-      case 2: {
-        int const x_115 = i_3;
-        (*(tint_symbol_9)).arr[x_115] = 2;
-        break;
-      }
-      case 1: {
-        int const x_113 = i_3;
-        (*(tint_symbol_9)).arr[x_113] = 3;
-        break;
-      }
-      case 0: {
-        int const x_111 = i_3;
-        (*(tint_symbol_9)).arr[x_111] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_131 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_131) + as_type<uint>(1)));
-    {
-      int const x_133 = i_3;
-      if ((x_133 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_139 = j_1;
-    if ((x_139 < 10)) {
-    } else {
-      break;
-    }
-    int const x_142 = j_1;
-    int const x_143 = j_1;
-    int const x_145 = (*(tint_symbol_9)).arr[x_143];
-    (*(tint_symbol_10)).arr[x_142] = x_145;
-    {
-      int const x_147 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_147) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_9, tint_symbol_10, tint_symbol_11);
-  float const x_151 = (*(tint_symbol_11)).y;
-  if ((int(x_151) < 30)) {
-    int const x_158 = (*(tint_symbol_9)).arr[0];
-    grey = (0.5f + (float(x_158) / 10.0f));
-  } else {
-    float const x_163 = (*(tint_symbol_11)).y;
-    if ((int(x_163) < 60)) {
-      int const x_170 = (*(tint_symbol_9)).arr[1];
-      grey = (0.5f + (float(x_170) / 10.0f));
-    } else {
-      float const x_175 = (*(tint_symbol_11)).y;
-      if ((int(x_175) < 90)) {
-        int const x_182 = (*(tint_symbol_9)).arr[2];
-        grey = (0.5f + (float(x_182) / 10.0f));
-      } else {
-        float const x_187 = (*(tint_symbol_11)).y;
-        if ((int(x_187) < 120)) {
-          int const x_194 = (*(tint_symbol_9)).arr[3];
-          grey = (0.5f + (float(x_194) / 10.0f));
-        } else {
-          float const x_199 = (*(tint_symbol_11)).y;
-          if ((int(x_199) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_206 = (*(tint_symbol_11)).y;
-            if ((int(x_206) < 180)) {
-              int const x_213 = (*(tint_symbol_9)).arr[5];
-              grey = (0.5f + (float(x_213) / 10.0f));
-            } else {
-              float const x_218 = (*(tint_symbol_11)).y;
-              if ((int(x_218) < 210)) {
-                int const x_225 = (*(tint_symbol_9)).arr[6];
-                grey = (0.5f + (float(x_225) / 10.0f));
-              } else {
-                float const x_230 = (*(tint_symbol_11)).y;
-                if ((int(x_230) < 240)) {
-                  int const x_237 = (*(tint_symbol_9)).arr[7];
-                  grey = (0.5f + (float(x_237) / 10.0f));
-                } else {
-                  float const x_242 = (*(tint_symbol_11)).y;
-                  if ((int(x_242) < 270)) {
-                    int const x_249 = (*(tint_symbol_9)).arr[8];
-                    grey = (0.5f + (float(x_249) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_253 = grey;
-  float3 const x_254 = float3(x_253, x_253, x_253);
-  *(tint_symbol_12) = float4(x_254.x, x_254.y, x_254.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 gl_FragCoord_param, thread float4* const tint_symbol_13, thread tint_array_wrapper* const tint_symbol_14, thread tint_array_wrapper* const tint_symbol_15, thread float4* const tint_symbol_16) {
-  *(tint_symbol_13) = gl_FragCoord_param;
-  main_1(x_34, tint_symbol_14, tint_symbol_15, tint_symbol_13, tint_symbol_16);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_16)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_17 = 0.0f;
-  thread tint_array_wrapper tint_symbol_18 = {};
-  thread tint_array_wrapper tint_symbol_19 = {};
-  thread float4 tint_symbol_20 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, gl_FragCoord_param, &(tint_symbol_17), &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.spvasm
deleted file mode 100644
index b288e67..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,694 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 456
-; Schema: 0
-               OpCapability Shader
-        %170 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_34 "x_34"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %func_i1_i1_ "func_i1_i1_"
-               OpName %m "m"
-               OpName %high "high"
-               OpName %x "x"
-               OpName %x_335 "x_335"
-               OpName %x_336 "x_336"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high_1 "high_1"
-               OpName %m_1 "m_1"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %param_4 "param_4"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %128 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-      %int_2 = OpConstant %int 2
-        %176 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-%_ptr_Function_float = OpTypePointer Function %float
-        %247 = OpConstantNull %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-     %uint_1 = OpConstant %uint 1
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %443 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-         %56 = OpSLessThanEqual %bool %51 %53
-         %57 = OpLogicalAnd %bool %54 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %45
-         %58 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Private_int %data %61
-         %64 = OpLoad %int %63
-         %65 = OpLoad %int %j
-         %66 = OpAccessChain %_ptr_Private_int %data %65
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpLoad %int %k
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %k %73
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-         %76 = OpAccessChain %_ptr_Private_int %data %74
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Private_int %temp %72
-               OpStore %78 %77
-               OpBranch %69
-         %71 = OpLabel
-         %79 = OpLoad %int %k
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %k %80
-         %81 = OpLoad %int %j
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %j %82
-         %83 = OpAccessChain %_ptr_Private_int %data %81
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Private_int %temp %79
-               OpStore %85 %84
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i
-         %91 = OpLoad %int %i
-         %93 = OpLoad %int %mid
-         %95 = OpSLessThan %bool %90 %int_10
-         %96 = OpSLessThanEqual %bool %91 %93
-         %97 = OpLogicalAnd %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-               OpBranch %98
-        %100 = OpLabel
-               OpBranch %87
-         %98 = OpLabel
-        %101 = OpLoad %int %k
-        %102 = OpIAdd %int %101 %int_1
-               OpStore %k %102
-        %103 = OpLoad %int %i
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %i %104
-        %105 = OpAccessChain %_ptr_Private_int %data %103
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Private_int %temp %101
-               OpStore %107 %106
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %86
-         %87 = OpLabel
-        %109 = OpLoad %int %from
-               OpStore %i_1 %109
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %i_1
-        %116 = OpLoad %int %to
-        %117 = OpSLessThanEqual %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-               OpBranch %118
-        %120 = OpLabel
-               OpBranch %111
-        %118 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpLoad %int %i_1
-        %123 = OpAccessChain %_ptr_Private_int %temp %122
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Private_int %data %121
-               OpStore %125 %124
-               OpBranch %112
-        %112 = OpLabel
-        %126 = OpLoad %int %i_1
-        %127 = OpIAdd %int %126 %int_1
-               OpStore %i_1 %127
-               OpBranch %110
-        %111 = OpLabel
-               OpReturn
-               OpFunctionEnd
-%func_i1_i1_ = OpFunction %int None %128
-          %m = OpFunctionParameter %_ptr_Function_int
-       %high = OpFunctionParameter %_ptr_Function_int
-        %132 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %32
-      %x_335 = OpVariable %_ptr_Function_int Function %32
-      %x_336 = OpVariable %_ptr_Function_int Function %32
-        %138 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %139 = OpLoad %float %138
-        %141 = OpFOrdGreaterThanEqual %bool %139 %float_0
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %144
-        %143 = OpLabel
-               OpSelectionMerge %146 None
-               OpBranchConditional %false %147 %148
-        %147 = OpLabel
-        %150 = OpLoad %int %high
-        %151 = OpBitcast %uint %int_0
-        %153 = OpShiftLeftLogical %int %150 %151
-               OpStore %x_336 %153
-               OpBranch %146
-        %148 = OpLabel
-               OpStore %x_336 %int_4
-               OpBranch %146
-        %146 = OpLabel
-        %155 = OpLoad %int %x_336
-        %156 = OpBitcast %uint %155
-        %157 = OpShiftLeftLogical %int %int_1 %156
-               OpStore %x_335 %157
-               OpBranch %142
-        %144 = OpLabel
-               OpStore %x_335 %int_1
-               OpBranch %142
-        %142 = OpLabel
-        %158 = OpLoad %int %x_335
-               OpStore %x %158
-        %159 = OpLoad %int %x
-        %160 = OpBitcast %uint %int_4
-        %161 = OpShiftRightArithmetic %int %159 %160
-               OpStore %x %161
-        %163 = OpLoad %int %m
-        %165 = OpLoad %int %m
-        %167 = OpLoad %int %m
-        %168 = OpLoad %int %x
-        %172 = OpIMul %int %int_2 %163
-        %173 = OpIMul %int %int_2 %165
-        %174 = OpIMul %int %int_2 %167
-        %175 = OpSDiv %int %174 %168
-        %169 = OpExtInst %int %170 SClamp %172 %173 %175
-               OpReturnValue %169
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %176
-        %178 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-     %high_1 = OpVariable %_ptr_Function_int Function %32
-        %m_1 = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-    %param_3 = OpVariable %_ptr_Function_int Function %32
-    %param_4 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high_1 %int_9
-               OpStore %m_1 %int_1
-               OpBranch %192
-        %192 = OpLabel
-               OpLoopMerge %193 %194 None
-               OpBranch %195
-        %195 = OpLabel
-        %196 = OpLoad %int %m_1
-        %197 = OpLoad %int %high_1
-        %198 = OpSLessThanEqual %bool %196 %197
-               OpSelectionMerge %199 None
-               OpBranchConditional %198 %200 %201
-        %200 = OpLabel
-               OpBranch %199
-        %201 = OpLabel
-               OpBranch %193
-        %199 = OpLabel
-        %202 = OpLoad %int %low
-               OpStore %i_2 %202
-               OpBranch %203
-        %203 = OpLabel
-               OpLoopMerge %204 %205 None
-               OpBranch %206
-        %206 = OpLabel
-        %207 = OpLoad %int %i_2
-        %208 = OpLoad %int %high_1
-        %209 = OpSLessThan %bool %207 %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %212
-        %211 = OpLabel
-               OpBranch %210
-        %212 = OpLabel
-               OpBranch %204
-        %210 = OpLabel
-        %213 = OpLoad %int %i_2
-               OpStore %from_1 %213
-        %214 = OpLoad %int %i_2
-        %215 = OpLoad %int %m_1
-        %216 = OpIAdd %int %214 %215
-        %217 = OpISub %int %216 %int_1
-               OpStore %mid_1 %217
-        %218 = OpLoad %int %i_2
-        %219 = OpLoad %int %m_1
-        %220 = OpLoad %int %high_1
-        %222 = OpIMul %int %int_2 %219
-        %223 = OpIAdd %int %218 %222
-        %224 = OpISub %int %223 %int_1
-        %221 = OpExtInst %int %170 SMin %224 %220
-               OpStore %to_1 %221
-        %225 = OpLoad %int %from_1
-               OpStore %param %225
-        %226 = OpLoad %int %mid_1
-               OpStore %param_1 %226
-        %227 = OpLoad %int %to_1
-               OpStore %param_2 %227
-        %228 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %205
-        %205 = OpLabel
-        %232 = OpLoad %int %m_1
-               OpStore %param_3 %232
-        %233 = OpLoad %int %high_1
-               OpStore %param_4 %233
-        %234 = OpFunctionCall %int %func_i1_i1_ %param_3 %param_4
-        %237 = OpLoad %int %i_2
-        %238 = OpIAdd %int %237 %234
-               OpStore %i_2 %238
-               OpBranch %203
-        %204 = OpLabel
-               OpBranch %194
-        %194 = OpLabel
-        %239 = OpLoad %int %m_1
-        %240 = OpIMul %int %int_2 %239
-               OpStore %m_1 %240
-               OpBranch %192
-        %193 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %176
-        %242 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %247
-        %249 = OpAccessChain %_ptr_Uniform_float %x_34 %uint_0 %uint_0
-        %250 = OpLoad %float %249
-        %251 = OpConvertFToS %int %250
-               OpStore %i_3 %251
-               OpBranch %252
-        %252 = OpLabel
-               OpLoopMerge %253 %254 None
-               OpBranch %255
-        %255 = OpLabel
-        %256 = OpLoad %int %i_3
-               OpSelectionMerge %257 None
-               OpSwitch %256 %258 9 %259 8 %260 7 %261 6 %262 5 %263 4 %264 3 %265 2 %266 1 %267 0 %268
-        %259 = OpLabel
-        %269 = OpLoad %int %i_3
-        %270 = OpAccessChain %_ptr_Private_int %data %269
-               OpStore %270 %int_n5
-               OpBranch %257
-        %260 = OpLabel
-        %272 = OpLoad %int %i_3
-        %273 = OpAccessChain %_ptr_Private_int %data %272
-               OpStore %273 %int_n4
-               OpBranch %257
-        %261 = OpLabel
-        %275 = OpLoad %int %i_3
-        %276 = OpAccessChain %_ptr_Private_int %data %275
-               OpStore %276 %int_n3
-               OpBranch %257
-        %262 = OpLabel
-        %278 = OpLoad %int %i_3
-        %279 = OpAccessChain %_ptr_Private_int %data %278
-               OpStore %279 %int_n2
-               OpBranch %257
-        %263 = OpLabel
-        %281 = OpLoad %int %i_3
-        %282 = OpAccessChain %_ptr_Private_int %data %281
-               OpStore %282 %int_n1
-               OpBranch %257
-        %264 = OpLabel
-        %284 = OpLoad %int %i_3
-        %285 = OpAccessChain %_ptr_Private_int %data %284
-               OpStore %285 %int_0
-               OpBranch %257
-        %265 = OpLabel
-        %286 = OpLoad %int %i_3
-        %287 = OpAccessChain %_ptr_Private_int %data %286
-               OpStore %287 %int_1
-               OpBranch %257
-        %266 = OpLabel
-        %288 = OpLoad %int %i_3
-        %289 = OpAccessChain %_ptr_Private_int %data %288
-               OpStore %289 %int_2
-               OpBranch %257
-        %267 = OpLabel
-        %290 = OpLoad %int %i_3
-        %291 = OpAccessChain %_ptr_Private_int %data %290
-               OpStore %291 %int_3
-               OpBranch %257
-        %268 = OpLabel
-        %293 = OpLoad %int %i_3
-        %294 = OpAccessChain %_ptr_Private_int %data %293
-               OpStore %294 %int_4
-               OpBranch %257
-        %258 = OpLabel
-               OpBranch %257
-        %257 = OpLabel
-        %295 = OpLoad %int %i_3
-        %296 = OpIAdd %int %295 %int_1
-               OpStore %i_3 %296
-               OpBranch %254
-        %254 = OpLabel
-        %297 = OpLoad %int %i_3
-        %298 = OpSLessThan %bool %297 %int_10
-               OpBranchConditional %298 %252 %253
-        %253 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %299
-        %299 = OpLabel
-               OpLoopMerge %300 %301 None
-               OpBranch %302
-        %302 = OpLabel
-        %303 = OpLoad %int %j_1
-        %304 = OpSLessThan %bool %303 %int_10
-               OpSelectionMerge %305 None
-               OpBranchConditional %304 %306 %307
-        %306 = OpLabel
-               OpBranch %305
-        %307 = OpLabel
-               OpBranch %300
-        %305 = OpLabel
-        %308 = OpLoad %int %j_1
-        %309 = OpLoad %int %j_1
-        %310 = OpAccessChain %_ptr_Private_int %data %309
-        %311 = OpLoad %int %310
-        %312 = OpAccessChain %_ptr_Private_int %temp %308
-               OpStore %312 %311
-               OpBranch %301
-        %301 = OpLabel
-        %313 = OpLoad %int %j_1
-        %314 = OpIAdd %int %313 %int_1
-               OpStore %j_1 %314
-               OpBranch %299
-        %300 = OpLabel
-        %315 = OpFunctionCall %void %mergeSort_
-        %317 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %318 = OpLoad %float %317
-        %319 = OpConvertFToS %int %318
-        %321 = OpSLessThan %bool %319 %int_30
-               OpSelectionMerge %322 None
-               OpBranchConditional %321 %323 %324
-        %323 = OpLabel
-        %325 = OpAccessChain %_ptr_Private_int %data %int_0
-        %326 = OpLoad %int %325
-        %328 = OpConvertSToF %float %326
-        %330 = OpFDiv %float %328 %float_10
-        %331 = OpFAdd %float %float_0_5 %330
-               OpStore %grey %331
-               OpBranch %322
-        %324 = OpLabel
-        %332 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %333 = OpLoad %float %332
-        %334 = OpConvertFToS %int %333
-        %336 = OpSLessThan %bool %334 %int_60
-               OpSelectionMerge %337 None
-               OpBranchConditional %336 %338 %339
-        %338 = OpLabel
-        %340 = OpAccessChain %_ptr_Private_int %data %int_1
-        %341 = OpLoad %int %340
-        %342 = OpConvertSToF %float %341
-        %343 = OpFDiv %float %342 %float_10
-        %344 = OpFAdd %float %float_0_5 %343
-               OpStore %grey %344
-               OpBranch %337
-        %339 = OpLabel
-        %345 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %346 = OpLoad %float %345
-        %347 = OpConvertFToS %int %346
-        %349 = OpSLessThan %bool %347 %int_90
-               OpSelectionMerge %350 None
-               OpBranchConditional %349 %351 %352
-        %351 = OpLabel
-        %353 = OpAccessChain %_ptr_Private_int %data %int_2
-        %354 = OpLoad %int %353
-        %355 = OpConvertSToF %float %354
-        %356 = OpFDiv %float %355 %float_10
-        %357 = OpFAdd %float %float_0_5 %356
-               OpStore %grey %357
-               OpBranch %350
-        %352 = OpLabel
-        %358 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %359 = OpLoad %float %358
-        %360 = OpConvertFToS %int %359
-        %362 = OpSLessThan %bool %360 %int_120
-               OpSelectionMerge %363 None
-               OpBranchConditional %362 %364 %365
-        %364 = OpLabel
-        %366 = OpAccessChain %_ptr_Private_int %data %int_3
-        %367 = OpLoad %int %366
-        %368 = OpConvertSToF %float %367
-        %369 = OpFDiv %float %368 %float_10
-        %370 = OpFAdd %float %float_0_5 %369
-               OpStore %grey %370
-               OpBranch %363
-        %365 = OpLabel
-        %371 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %372 = OpLoad %float %371
-        %373 = OpConvertFToS %int %372
-        %375 = OpSLessThan %bool %373 %int_150
-               OpSelectionMerge %376 None
-               OpBranchConditional %375 %377 %378
-        %377 = OpLabel
-               OpKill
-        %378 = OpLabel
-        %379 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %380 = OpLoad %float %379
-        %381 = OpConvertFToS %int %380
-        %383 = OpSLessThan %bool %381 %int_180
-               OpSelectionMerge %384 None
-               OpBranchConditional %383 %385 %386
-        %385 = OpLabel
-        %388 = OpAccessChain %_ptr_Private_int %data %int_5
-        %389 = OpLoad %int %388
-        %390 = OpConvertSToF %float %389
-        %391 = OpFDiv %float %390 %float_10
-        %392 = OpFAdd %float %float_0_5 %391
-               OpStore %grey %392
-               OpBranch %384
-        %386 = OpLabel
-        %393 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %394 = OpLoad %float %393
-        %395 = OpConvertFToS %int %394
-        %397 = OpSLessThan %bool %395 %int_210
-               OpSelectionMerge %398 None
-               OpBranchConditional %397 %399 %400
-        %399 = OpLabel
-        %402 = OpAccessChain %_ptr_Private_int %data %int_6
-        %403 = OpLoad %int %402
-        %404 = OpConvertSToF %float %403
-        %405 = OpFDiv %float %404 %float_10
-        %406 = OpFAdd %float %float_0_5 %405
-               OpStore %grey %406
-               OpBranch %398
-        %400 = OpLabel
-        %407 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %408 = OpLoad %float %407
-        %409 = OpConvertFToS %int %408
-        %411 = OpSLessThan %bool %409 %int_240
-               OpSelectionMerge %412 None
-               OpBranchConditional %411 %413 %414
-        %413 = OpLabel
-        %416 = OpAccessChain %_ptr_Private_int %data %int_7
-        %417 = OpLoad %int %416
-        %418 = OpConvertSToF %float %417
-        %419 = OpFDiv %float %418 %float_10
-        %420 = OpFAdd %float %float_0_5 %419
-               OpStore %grey %420
-               OpBranch %412
-        %414 = OpLabel
-        %421 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %422 = OpLoad %float %421
-        %423 = OpConvertFToS %int %422
-        %425 = OpSLessThan %bool %423 %int_270
-               OpSelectionMerge %426 None
-               OpBranchConditional %425 %427 %428
-        %427 = OpLabel
-        %430 = OpAccessChain %_ptr_Private_int %data %int_8
-        %431 = OpLoad %int %430
-        %432 = OpConvertSToF %float %431
-        %433 = OpFDiv %float %432 %float_10
-        %434 = OpFAdd %float %float_0_5 %433
-               OpStore %grey %434
-               OpBranch %426
-        %428 = OpLabel
-               OpKill
-        %426 = OpLabel
-               OpBranch %412
-        %412 = OpLabel
-               OpBranch %398
-        %398 = OpLabel
-               OpBranch %384
-        %384 = OpLabel
-               OpBranch %376
-        %376 = OpLabel
-               OpBranch %363
-        %363 = OpLabel
-               OpBranch %350
-        %350 = OpLabel
-               OpBranch %337
-        %337 = OpLabel
-               OpBranch %322
-        %322 = OpLabel
-        %435 = OpLoad %float %grey
-        %437 = OpCompositeConstruct %v3float %435 %435 %435
-        %438 = OpCompositeExtract %float %437 0
-        %439 = OpCompositeExtract %float %437 1
-        %440 = OpCompositeExtract %float %437 2
-        %442 = OpCompositeConstruct %v4float %438 %439 %440 %float_1
-               OpStore %x_GLF_color %442
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %443
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %447 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %448 = OpFunctionCall %void %main_1
-        %449 = OpLoad %v4float %x_GLF_color
-        %450 = OpCompositeConstruct %main_out %449
-               OpReturnValue %450
-               OpFunctionEnd
-       %main = OpFunction %void None %176
-        %452 = OpLabel
-        %454 = OpLoad %v4float %gl_FragCoord_param_1
-        %453 = OpFunctionCall %main_out %main_inner %454
-        %455 = OpCompositeExtract %v4float %453 0
-               OpStore %x_GLF_color_1_1 %455
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.wgsl
deleted file mode 100644
index da0de00..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,340 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_260 : i32 = *(from);
-  k = x_260;
-  let x_261 : i32 = *(from);
-  i = x_261;
-  let x_262 : i32 = *(mid);
-  j = (x_262 + 1);
-  loop {
-    let x_268 : i32 = i;
-    let x_269 : i32 = *(mid);
-    let x_271 : i32 = j;
-    let x_272 : i32 = *(to);
-    if (((x_268 <= x_269) & (x_271 <= x_272))) {
-    } else {
-      break;
-    }
-    let x_276 : i32 = i;
-    let x_278 : i32 = data[x_276];
-    let x_279 : i32 = j;
-    let x_281 : i32 = data[x_279];
-    if ((x_278 < x_281)) {
-      let x_286 : i32 = k;
-      k = (x_286 + 1);
-      let x_288 : i32 = i;
-      i = (x_288 + 1);
-      let x_291 : i32 = data[x_288];
-      temp[x_286] = x_291;
-    } else {
-      let x_293 : i32 = k;
-      k = (x_293 + 1);
-      let x_295 : i32 = j;
-      j = (x_295 + 1);
-      let x_298 : i32 = data[x_295];
-      temp[x_293] = x_298;
-    }
-  }
-  loop {
-    let x_304 : i32 = i;
-    let x_306 : i32 = i;
-    let x_307 : i32 = *(mid);
-    if (((x_304 < 10) & (x_306 <= x_307))) {
-    } else {
-      break;
-    }
-    let x_311 : i32 = k;
-    k = (x_311 + 1);
-    let x_313 : i32 = i;
-    i = (x_313 + 1);
-    let x_316 : i32 = data[x_313];
-    temp[x_311] = x_316;
-  }
-  let x_318 : i32 = *(from);
-  i_1 = x_318;
-  loop {
-    let x_323 : i32 = i_1;
-    let x_324 : i32 = *(to);
-    if ((x_323 <= x_324)) {
-    } else {
-      break;
-    }
-    let x_327 : i32 = i_1;
-    let x_328 : i32 = i_1;
-    let x_330 : i32 = temp[x_328];
-    data[x_327] = x_330;
-
-    continuing {
-      let x_332 : i32 = i_1;
-      i_1 = (x_332 + 1);
-    }
-  }
-  return;
-}
-
-fn func_i1_i1_(m : ptr<function, i32>, high : ptr<function, i32>) -> i32 {
-  var x : i32;
-  var x_335 : i32;
-  var x_336 : i32;
-  let x_338 : f32 = gl_FragCoord.x;
-  if ((x_338 >= 0.0)) {
-    if (false) {
-      let x_346 : i32 = *(high);
-      x_336 = (x_346 << bitcast<u32>(0));
-    } else {
-      x_336 = 4;
-    }
-    let x_348 : i32 = x_336;
-    x_335 = (1 << bitcast<u32>(x_348));
-  } else {
-    x_335 = 1;
-  }
-  let x_350 : i32 = x_335;
-  x = x_350;
-  let x_351 : i32 = x;
-  x = (x_351 >> bitcast<u32>(4));
-  let x_353 : i32 = *(m);
-  let x_355 : i32 = *(m);
-  let x_357 : i32 = *(m);
-  let x_359 : i32 = x;
-  return clamp((2 * x_353), (2 * x_355), ((2 * x_357) / x_359));
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high_1 : i32;
-  var m_1 : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  var param_4 : i32;
-  low = 0;
-  high_1 = 9;
-  m_1 = 1;
-  loop {
-    let x_367 : i32 = m_1;
-    let x_368 : i32 = high_1;
-    if ((x_367 <= x_368)) {
-    } else {
-      break;
-    }
-    let x_371 : i32 = low;
-    i_2 = x_371;
-    loop {
-      let x_376 : i32 = i_2;
-      let x_377 : i32 = high_1;
-      if ((x_376 < x_377)) {
-      } else {
-        break;
-      }
-      let x_380 : i32 = i_2;
-      from_1 = x_380;
-      let x_381 : i32 = i_2;
-      let x_382 : i32 = m_1;
-      mid_1 = ((x_381 + x_382) - 1);
-      let x_385 : i32 = i_2;
-      let x_386 : i32 = m_1;
-      let x_390 : i32 = high_1;
-      to_1 = min(((x_385 + (2 * x_386)) - 1), x_390);
-      let x_392 : i32 = from_1;
-      param = x_392;
-      let x_393 : i32 = mid_1;
-      param_1 = x_393;
-      let x_394 : i32 = to_1;
-      param_2 = x_394;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_396 : i32 = m_1;
-        param_3 = x_396;
-        let x_397 : i32 = high_1;
-        param_4 = x_397;
-        let x_398 : i32 = func_i1_i1_(&(param_3), &(param_4));
-        let x_399 : i32 = i_2;
-        i_2 = (x_399 + x_398);
-      }
-    }
-
-    continuing {
-      let x_401 : i32 = m_1;
-      m_1 = (2 * x_401);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_93 : f32 = x_34.injectionSwitch.x;
-  i_3 = i32(x_93);
-  loop {
-    let x_99 : i32 = i_3;
-    switch(x_99) {
-      case 9: {
-        let x_129 : i32 = i_3;
-        data[x_129] = -5;
-      }
-      case 8: {
-        let x_127 : i32 = i_3;
-        data[x_127] = -4;
-      }
-      case 7: {
-        let x_125 : i32 = i_3;
-        data[x_125] = -3;
-      }
-      case 6: {
-        let x_123 : i32 = i_3;
-        data[x_123] = -2;
-      }
-      case 5: {
-        let x_121 : i32 = i_3;
-        data[x_121] = -1;
-      }
-      case 4: {
-        let x_119 : i32 = i_3;
-        data[x_119] = 0;
-      }
-      case 3: {
-        let x_117 : i32 = i_3;
-        data[x_117] = 1;
-      }
-      case 2: {
-        let x_115 : i32 = i_3;
-        data[x_115] = 2;
-      }
-      case 1: {
-        let x_113 : i32 = i_3;
-        data[x_113] = 3;
-      }
-      case 0: {
-        let x_111 : i32 = i_3;
-        data[x_111] = 4;
-      }
-      default: {
-      }
-    }
-    let x_131 : i32 = i_3;
-    i_3 = (x_131 + 1);
-
-    continuing {
-      let x_133 : i32 = i_3;
-      if ((x_133 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_139 : i32 = j_1;
-    if ((x_139 < 10)) {
-    } else {
-      break;
-    }
-    let x_142 : i32 = j_1;
-    let x_143 : i32 = j_1;
-    let x_145 : i32 = data[x_143];
-    temp[x_142] = x_145;
-
-    continuing {
-      let x_147 : i32 = j_1;
-      j_1 = (x_147 + 1);
-    }
-  }
-  mergeSort_();
-  let x_151 : f32 = gl_FragCoord.y;
-  if ((i32(x_151) < 30)) {
-    let x_158 : i32 = data[0];
-    grey = (0.5 + (f32(x_158) / 10.0));
-  } else {
-    let x_163 : f32 = gl_FragCoord.y;
-    if ((i32(x_163) < 60)) {
-      let x_170 : i32 = data[1];
-      grey = (0.5 + (f32(x_170) / 10.0));
-    } else {
-      let x_175 : f32 = gl_FragCoord.y;
-      if ((i32(x_175) < 90)) {
-        let x_182 : i32 = data[2];
-        grey = (0.5 + (f32(x_182) / 10.0));
-      } else {
-        let x_187 : f32 = gl_FragCoord.y;
-        if ((i32(x_187) < 120)) {
-          let x_194 : i32 = data[3];
-          grey = (0.5 + (f32(x_194) / 10.0));
-        } else {
-          let x_199 : f32 = gl_FragCoord.y;
-          if ((i32(x_199) < 150)) {
-            discard;
-          } else {
-            let x_206 : f32 = gl_FragCoord.y;
-            if ((i32(x_206) < 180)) {
-              let x_213 : i32 = data[5];
-              grey = (0.5 + (f32(x_213) / 10.0));
-            } else {
-              let x_218 : f32 = gl_FragCoord.y;
-              if ((i32(x_218) < 210)) {
-                let x_225 : i32 = data[6];
-                grey = (0.5 + (f32(x_225) / 10.0));
-              } else {
-                let x_230 : f32 = gl_FragCoord.y;
-                if ((i32(x_230) < 240)) {
-                  let x_237 : i32 = data[7];
-                  grey = (0.5 + (f32(x_237) / 10.0));
-                } else {
-                  let x_242 : f32 = gl_FragCoord.y;
-                  if ((i32(x_242) < 270)) {
-                    let x_249 : i32 = data[8];
-                    grey = (0.5 + (f32(x_249) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_253 : f32 = grey;
-  let x_254 : vec3<f32> = vec3<f32>(x_253, x_253, x_253);
-  x_GLF_color = vec4<f32>(x_254.x, x_254.y, x_254.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.hlsl
deleted file mode 100644
index 14daa85..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,307 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_260 = from;
-  k = x_260;
-  const int x_261 = from;
-  i = x_261;
-  const int x_262 = mid;
-  j = (x_262 + 1);
-  while (true) {
-    const int x_268 = i;
-    const int x_269 = mid;
-    const int x_271 = j;
-    const int x_272 = to;
-    bool tint_tmp = (x_268 <= x_269);
-    if (tint_tmp) {
-      tint_tmp = (x_271 <= x_272);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_278 = data[i];
-    const int x_281 = data[j];
-    if ((x_278 < x_281)) {
-      const int x_286 = k;
-      k = (x_286 + 1);
-      const int x_288 = i;
-      i = (x_288 + 1);
-      const int x_291 = data[x_288];
-      temp[x_286] = x_291;
-    } else {
-      const int x_293 = k;
-      k = (x_293 + 1);
-      const int x_295 = j;
-      j = (x_295 + 1);
-      const int x_298 = data[x_295];
-      temp[x_293] = x_298;
-    }
-  }
-  while (true) {
-    const int x_304 = i;
-    const int x_306 = i;
-    const int x_307 = mid;
-    bool tint_tmp_1 = (x_304 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_306 <= x_307);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_311 = k;
-    k = (x_311 + 1);
-    const int x_313 = i;
-    i = (x_313 + 1);
-    const int x_316 = data[x_313];
-    temp[x_311] = x_316;
-  }
-  const int x_318 = from;
-  i_1 = x_318;
-  while (true) {
-    const int x_323 = i_1;
-    const int x_324 = to;
-    if ((x_323 <= x_324)) {
-    } else {
-      break;
-    }
-    const int x_327 = i_1;
-    const int x_330 = temp[i_1];
-    data[x_327] = x_330;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-int func_i1_i1_(inout int m, inout int high) {
-  int x = 0;
-  int x_335 = 0;
-  int x_336 = 0;
-  const float x_338 = gl_FragCoord.x;
-  if ((x_338 >= 0.0f)) {
-    if (false) {
-      const int x_346 = high;
-      x_336 = (x_346 << asuint(0));
-    } else {
-      x_336 = 4;
-    }
-    x_335 = (1 << asuint(x_336));
-  } else {
-    x_335 = 1;
-  }
-  x = x_335;
-  x = (x >> asuint(4));
-  const int x_353 = m;
-  const int x_355 = m;
-  const int x_357 = m;
-  return clamp((2 * x_353), (2 * x_355), ((2 * x_357) / x));
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high_1 = 0;
-  int m_1 = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int param_4 = 0;
-  low = 0;
-  high_1 = 9;
-  m_1 = 1;
-  {
-    for(; (m_1 <= high_1); m_1 = (2 * m_1)) {
-      i_2 = low;
-      while (true) {
-        if ((i_2 < high_1)) {
-        } else {
-          break;
-        }
-        from_1 = i_2;
-        mid_1 = ((i_2 + m_1) - 1);
-        to_1 = min(((i_2 + (2 * m_1)) - 1), high_1);
-        param = from_1;
-        param_1 = mid_1;
-        param_2 = to_1;
-        merge_i1_i1_i1_(param, param_1, param_2);
-        {
-          param_3 = m_1;
-          param_4 = high_1;
-          const int x_398 = func_i1_i1_(param_3, param_4);
-          i_2 = (i_2 + x_398);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  const float x_93 = asfloat(x_34[0].x);
-  i_3 = int(x_93);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_142 = j_1;
-      const int x_145 = data[j_1];
-      temp[x_142] = x_145;
-    }
-  }
-  mergeSort_();
-  const float x_151 = gl_FragCoord.y;
-  if ((int(x_151) < 30)) {
-    const int x_158 = data[0];
-    grey = (0.5f + (float(x_158) / 10.0f));
-  } else {
-    const float x_163 = gl_FragCoord.y;
-    if ((int(x_163) < 60)) {
-      const int x_170 = data[1];
-      grey = (0.5f + (float(x_170) / 10.0f));
-    } else {
-      const float x_175 = gl_FragCoord.y;
-      if ((int(x_175) < 90)) {
-        const int x_182 = data[2];
-        grey = (0.5f + (float(x_182) / 10.0f));
-      } else {
-        const float x_187 = gl_FragCoord.y;
-        if ((int(x_187) < 120)) {
-          const int x_194 = data[3];
-          grey = (0.5f + (float(x_194) / 10.0f));
-        } else {
-          const float x_199 = gl_FragCoord.y;
-          if ((int(x_199) < 150)) {
-            discard;
-          } else {
-            const float x_206 = gl_FragCoord.y;
-            if ((int(x_206) < 180)) {
-              const int x_213 = data[5];
-              grey = (0.5f + (float(x_213) / 10.0f));
-            } else {
-              const float x_218 = gl_FragCoord.y;
-              if ((int(x_218) < 210)) {
-                const int x_225 = data[6];
-                grey = (0.5f + (float(x_225) / 10.0f));
-              } else {
-                const float x_230 = gl_FragCoord.y;
-                if ((int(x_230) < 240)) {
-                  const int x_237 = data[7];
-                  grey = (0.5f + (float(x_237) / 10.0f));
-                } else {
-                  const float x_242 = gl_FragCoord.y;
-                  if ((int(x_242) < 270)) {
-                    const int x_249 = data[8];
-                    grey = (0.5f + (float(x_249) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_253 = grey;
-  const float3 x_254 = float3(x_253, x_253, x_253);
-  x_GLF_color = float4(x_254.x, x_254.y, x_254.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.msl
deleted file mode 100644
index ca9c1aa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.msl
+++ /dev/null
@@ -1,354 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_260 = *(from);
-  k = x_260;
-  int const x_261 = *(from);
-  i = x_261;
-  int const x_262 = *(mid);
-  j = as_type<int>((as_type<uint>(x_262) + as_type<uint>(1)));
-  while (true) {
-    int const x_268 = i;
-    int const x_269 = *(mid);
-    int const x_271 = j;
-    int const x_272 = *(to);
-    if (((x_268 <= x_269) && (x_271 <= x_272))) {
-    } else {
-      break;
-    }
-    int const x_276 = i;
-    int const x_278 = (*(tint_symbol_3)).arr[x_276];
-    int const x_279 = j;
-    int const x_281 = (*(tint_symbol_3)).arr[x_279];
-    if ((x_278 < x_281)) {
-      int const x_286 = k;
-      k = as_type<int>((as_type<uint>(x_286) + as_type<uint>(1)));
-      int const x_288 = i;
-      i = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
-      int const x_291 = (*(tint_symbol_3)).arr[x_288];
-      (*(tint_symbol_4)).arr[x_286] = x_291;
-    } else {
-      int const x_293 = k;
-      k = as_type<int>((as_type<uint>(x_293) + as_type<uint>(1)));
-      int const x_295 = j;
-      j = as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
-      int const x_298 = (*(tint_symbol_3)).arr[x_295];
-      (*(tint_symbol_4)).arr[x_293] = x_298;
-    }
-  }
-  while (true) {
-    int const x_304 = i;
-    int const x_306 = i;
-    int const x_307 = *(mid);
-    if (((x_304 < 10) && (x_306 <= x_307))) {
-    } else {
-      break;
-    }
-    int const x_311 = k;
-    k = as_type<int>((as_type<uint>(x_311) + as_type<uint>(1)));
-    int const x_313 = i;
-    i = as_type<int>((as_type<uint>(x_313) + as_type<uint>(1)));
-    int const x_316 = (*(tint_symbol_3)).arr[x_313];
-    (*(tint_symbol_4)).arr[x_311] = x_316;
-  }
-  int const x_318 = *(from);
-  i_1 = x_318;
-  while (true) {
-    int const x_323 = i_1;
-    int const x_324 = *(to);
-    if ((x_323 <= x_324)) {
-    } else {
-      break;
-    }
-    int const x_327 = i_1;
-    int const x_328 = i_1;
-    int const x_330 = (*(tint_symbol_4)).arr[x_328];
-    (*(tint_symbol_3)).arr[x_327] = x_330;
-    {
-      int const x_332 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_332) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-int func_i1_i1_(thread int* const m, thread int* const high, thread float4* const tint_symbol_5) {
-  int x = 0;
-  int x_335 = 0;
-  int x_336 = 0;
-  float const x_338 = (*(tint_symbol_5)).x;
-  if ((x_338 >= 0.0f)) {
-    if (false) {
-      int const x_346 = *(high);
-      x_336 = as_type<int>((as_type<uint>(x_346) << as_type<uint>(0)));
-    } else {
-      x_336 = 4;
-    }
-    int const x_348 = x_336;
-    x_335 = as_type<int>((as_type<uint>(1) << as_type<uint>(x_348)));
-  } else {
-    x_335 = 1;
-  }
-  int const x_350 = x_335;
-  x = x_350;
-  int const x_351 = x;
-  x = (x_351 >> as_type<uint>(4));
-  int const x_353 = *(m);
-  int const x_355 = *(m);
-  int const x_357 = *(m);
-  int const x_359 = x;
-  return clamp(as_type<int>((as_type<uint>(2) * as_type<uint>(x_353))), as_type<int>((as_type<uint>(2) * as_type<uint>(x_355))), (as_type<int>((as_type<uint>(2) * as_type<uint>(x_357))) / x_359));
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int low = 0;
-  int high_1 = 0;
-  int m_1 = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int param_4 = 0;
-  low = 0;
-  high_1 = 9;
-  m_1 = 1;
-  while (true) {
-    int const x_367 = m_1;
-    int const x_368 = high_1;
-    if ((x_367 <= x_368)) {
-    } else {
-      break;
-    }
-    int const x_371 = low;
-    i_2 = x_371;
-    while (true) {
-      int const x_376 = i_2;
-      int const x_377 = high_1;
-      if ((x_376 < x_377)) {
-      } else {
-        break;
-      }
-      int const x_380 = i_2;
-      from_1 = x_380;
-      int const x_381 = i_2;
-      int const x_382 = m_1;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_381) + as_type<uint>(x_382)))) - as_type<uint>(1)));
-      int const x_385 = i_2;
-      int const x_386 = m_1;
-      int const x_390 = high_1;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_385) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_386))))))) - as_type<uint>(1))), x_390);
-      int const x_392 = from_1;
-      param = x_392;
-      int const x_393 = mid_1;
-      param_1 = x_393;
-      int const x_394 = to_1;
-      param_2 = x_394;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_6, tint_symbol_7);
-      {
-        int const x_396 = m_1;
-        param_3 = x_396;
-        int const x_397 = high_1;
-        param_4 = x_397;
-        int const x_398 = func_i1_i1_(&(param_3), &(param_4), tint_symbol_8);
-        int const x_399 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_399) + as_type<uint>(x_398)));
-      }
-    }
-    {
-      int const x_401 = m_1;
-      m_1 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_401)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_34, thread tint_array_wrapper* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  float const x_93 = x_34.injectionSwitch.x;
-  i_3 = int(x_93);
-  while (true) {
-    int const x_99 = i_3;
-    switch(x_99) {
-      case 9: {
-        int const x_129 = i_3;
-        (*(tint_symbol_9)).arr[x_129] = -5;
-        break;
-      }
-      case 8: {
-        int const x_127 = i_3;
-        (*(tint_symbol_9)).arr[x_127] = -4;
-        break;
-      }
-      case 7: {
-        int const x_125 = i_3;
-        (*(tint_symbol_9)).arr[x_125] = -3;
-        break;
-      }
-      case 6: {
-        int const x_123 = i_3;
-        (*(tint_symbol_9)).arr[x_123] = -2;
-        break;
-      }
-      case 5: {
-        int const x_121 = i_3;
-        (*(tint_symbol_9)).arr[x_121] = -1;
-        break;
-      }
-      case 4: {
-        int const x_119 = i_3;
-        (*(tint_symbol_9)).arr[x_119] = 0;
-        break;
-      }
-      case 3: {
-        int const x_117 = i_3;
-        (*(tint_symbol_9)).arr[x_117] = 1;
-        break;
-      }
-      case 2: {
-        int const x_115 = i_3;
-        (*(tint_symbol_9)).arr[x_115] = 2;
-        break;
-      }
-      case 1: {
-        int const x_113 = i_3;
-        (*(tint_symbol_9)).arr[x_113] = 3;
-        break;
-      }
-      case 0: {
-        int const x_111 = i_3;
-        (*(tint_symbol_9)).arr[x_111] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_131 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_131) + as_type<uint>(1)));
-    {
-      int const x_133 = i_3;
-      if ((x_133 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_139 = j_1;
-    if ((x_139 < 10)) {
-    } else {
-      break;
-    }
-    int const x_142 = j_1;
-    int const x_143 = j_1;
-    int const x_145 = (*(tint_symbol_9)).arr[x_143];
-    (*(tint_symbol_10)).arr[x_142] = x_145;
-    {
-      int const x_147 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_147) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_9, tint_symbol_10, tint_symbol_11);
-  float const x_151 = (*(tint_symbol_11)).y;
-  if ((int(x_151) < 30)) {
-    int const x_158 = (*(tint_symbol_9)).arr[0];
-    grey = (0.5f + (float(x_158) / 10.0f));
-  } else {
-    float const x_163 = (*(tint_symbol_11)).y;
-    if ((int(x_163) < 60)) {
-      int const x_170 = (*(tint_symbol_9)).arr[1];
-      grey = (0.5f + (float(x_170) / 10.0f));
-    } else {
-      float const x_175 = (*(tint_symbol_11)).y;
-      if ((int(x_175) < 90)) {
-        int const x_182 = (*(tint_symbol_9)).arr[2];
-        grey = (0.5f + (float(x_182) / 10.0f));
-      } else {
-        float const x_187 = (*(tint_symbol_11)).y;
-        if ((int(x_187) < 120)) {
-          int const x_194 = (*(tint_symbol_9)).arr[3];
-          grey = (0.5f + (float(x_194) / 10.0f));
-        } else {
-          float const x_199 = (*(tint_symbol_11)).y;
-          if ((int(x_199) < 150)) {
-            discard_fragment();
-          } else {
-            float const x_206 = (*(tint_symbol_11)).y;
-            if ((int(x_206) < 180)) {
-              int const x_213 = (*(tint_symbol_9)).arr[5];
-              grey = (0.5f + (float(x_213) / 10.0f));
-            } else {
-              float const x_218 = (*(tint_symbol_11)).y;
-              if ((int(x_218) < 210)) {
-                int const x_225 = (*(tint_symbol_9)).arr[6];
-                grey = (0.5f + (float(x_225) / 10.0f));
-              } else {
-                float const x_230 = (*(tint_symbol_11)).y;
-                if ((int(x_230) < 240)) {
-                  int const x_237 = (*(tint_symbol_9)).arr[7];
-                  grey = (0.5f + (float(x_237) / 10.0f));
-                } else {
-                  float const x_242 = (*(tint_symbol_11)).y;
-                  if ((int(x_242) < 270)) {
-                    int const x_249 = (*(tint_symbol_9)).arr[8];
-                    grey = (0.5f + (float(x_249) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_253 = grey;
-  float3 const x_254 = float3(x_253, x_253, x_253);
-  *(tint_symbol_12) = float4(x_254.x, x_254.y, x_254.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 gl_FragCoord_param, thread float4* const tint_symbol_13, thread tint_array_wrapper* const tint_symbol_14, thread tint_array_wrapper* const tint_symbol_15, thread float4* const tint_symbol_16) {
-  *(tint_symbol_13) = gl_FragCoord_param;
-  main_1(x_34, tint_symbol_14, tint_symbol_15, tint_symbol_13, tint_symbol_16);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_16)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_17 = 0.0f;
-  thread tint_array_wrapper tint_symbol_18 = {};
-  thread tint_array_wrapper tint_symbol_19 = {};
-  thread float4 tint_symbol_20 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, gl_FragCoord_param, &(tint_symbol_17), &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.spvasm
deleted file mode 100644
index a8c12dd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,704 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 460
-; Schema: 0
-               OpCapability Shader
-        %174 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_34 "x_34"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %func_i1_i1_ "func_i1_i1_"
-               OpName %m "m"
-               OpName %high "high"
-               OpName %x "x"
-               OpName %x_335 "x_335"
-               OpName %x_336 "x_336"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high_1 "high_1"
-               OpName %m_1 "m_1"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %param_4 "param_4"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %132 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-      %int_2 = OpConstant %int 2
-        %180 = OpTypeFunction %void
-      %int_9 = OpConstant %int 9
-%_ptr_Function_float = OpTypePointer Function %float
-        %251 = OpConstantNull %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-     %uint_1 = OpConstant %uint 1
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %447 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %56
-         %57 = OpLabel
-         %58 = OpSLessThanEqual %bool %51 %53
-               OpBranch %56
-         %56 = OpLabel
-         %59 = OpPhi %bool %54 %47 %58 %57
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %45
-         %60 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Private_int %data %63
-         %66 = OpLoad %int %65
-         %67 = OpLoad %int %j
-         %68 = OpAccessChain %_ptr_Private_int %data %67
-         %69 = OpLoad %int %68
-         %70 = OpSLessThan %bool %66 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpLoad %int %k
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %k %75
-         %76 = OpLoad %int %i
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %i %77
-         %78 = OpAccessChain %_ptr_Private_int %data %76
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Private_int %temp %74
-               OpStore %80 %79
-               OpBranch %71
-         %73 = OpLabel
-         %81 = OpLoad %int %k
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %k %82
-         %83 = OpLoad %int %j
-         %84 = OpIAdd %int %83 %int_1
-               OpStore %j %84
-         %85 = OpAccessChain %_ptr_Private_int %data %83
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Private_int %temp %81
-               OpStore %87 %86
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-               OpLoopMerge %89 %90 None
-               OpBranch %91
-         %91 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpLoad %int %i
-         %95 = OpLoad %int %mid
-         %97 = OpSLessThan %bool %92 %int_10
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpSLessThanEqual %bool %93 %95
-               OpBranch %98
-         %98 = OpLabel
-        %101 = OpPhi %bool %97 %91 %100 %99
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpBranch %102
-        %104 = OpLabel
-               OpBranch %89
-        %102 = OpLabel
-        %105 = OpLoad %int %k
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %k %106
-        %107 = OpLoad %int %i
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %i %108
-        %109 = OpAccessChain %_ptr_Private_int %data %107
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Private_int %temp %105
-               OpStore %111 %110
-               OpBranch %90
-         %90 = OpLabel
-               OpBranch %88
-         %89 = OpLabel
-        %113 = OpLoad %int %from
-               OpStore %i_1 %113
-               OpBranch %114
-        %114 = OpLabel
-               OpLoopMerge %115 %116 None
-               OpBranch %117
-        %117 = OpLabel
-        %118 = OpLoad %int %i_1
-        %120 = OpLoad %int %to
-        %121 = OpSLessThanEqual %bool %118 %120
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-               OpBranch %122
-        %124 = OpLabel
-               OpBranch %115
-        %122 = OpLabel
-        %125 = OpLoad %int %i_1
-        %126 = OpLoad %int %i_1
-        %127 = OpAccessChain %_ptr_Private_int %temp %126
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Private_int %data %125
-               OpStore %129 %128
-               OpBranch %116
-        %116 = OpLabel
-        %130 = OpLoad %int %i_1
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %i_1 %131
-               OpBranch %114
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
-%func_i1_i1_ = OpFunction %int None %132
-          %m = OpFunctionParameter %_ptr_Function_int
-       %high = OpFunctionParameter %_ptr_Function_int
-        %136 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %32
-      %x_335 = OpVariable %_ptr_Function_int Function %32
-      %x_336 = OpVariable %_ptr_Function_int Function %32
-        %142 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %143 = OpLoad %float %142
-        %145 = OpFOrdGreaterThanEqual %bool %143 %float_0
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %148
-        %147 = OpLabel
-               OpSelectionMerge %150 None
-               OpBranchConditional %false %151 %152
-        %151 = OpLabel
-        %154 = OpLoad %int %high
-        %155 = OpBitcast %uint %int_0
-        %157 = OpShiftLeftLogical %int %154 %155
-               OpStore %x_336 %157
-               OpBranch %150
-        %152 = OpLabel
-               OpStore %x_336 %int_4
-               OpBranch %150
-        %150 = OpLabel
-        %159 = OpLoad %int %x_336
-        %160 = OpBitcast %uint %159
-        %161 = OpShiftLeftLogical %int %int_1 %160
-               OpStore %x_335 %161
-               OpBranch %146
-        %148 = OpLabel
-               OpStore %x_335 %int_1
-               OpBranch %146
-        %146 = OpLabel
-        %162 = OpLoad %int %x_335
-               OpStore %x %162
-        %163 = OpLoad %int %x
-        %164 = OpBitcast %uint %int_4
-        %165 = OpShiftRightArithmetic %int %163 %164
-               OpStore %x %165
-        %167 = OpLoad %int %m
-        %169 = OpLoad %int %m
-        %171 = OpLoad %int %m
-        %172 = OpLoad %int %x
-        %176 = OpIMul %int %int_2 %167
-        %177 = OpIMul %int %int_2 %169
-        %178 = OpIMul %int %int_2 %171
-        %179 = OpSDiv %int %178 %172
-        %173 = OpExtInst %int %174 SClamp %176 %177 %179
-               OpReturnValue %173
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %180
-        %182 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-     %high_1 = OpVariable %_ptr_Function_int Function %32
-        %m_1 = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-    %param_3 = OpVariable %_ptr_Function_int Function %32
-    %param_4 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high_1 %int_9
-               OpStore %m_1 %int_1
-               OpBranch %196
-        %196 = OpLabel
-               OpLoopMerge %197 %198 None
-               OpBranch %199
-        %199 = OpLabel
-        %200 = OpLoad %int %m_1
-        %201 = OpLoad %int %high_1
-        %202 = OpSLessThanEqual %bool %200 %201
-               OpSelectionMerge %203 None
-               OpBranchConditional %202 %204 %205
-        %204 = OpLabel
-               OpBranch %203
-        %205 = OpLabel
-               OpBranch %197
-        %203 = OpLabel
-        %206 = OpLoad %int %low
-               OpStore %i_2 %206
-               OpBranch %207
-        %207 = OpLabel
-               OpLoopMerge %208 %209 None
-               OpBranch %210
-        %210 = OpLabel
-        %211 = OpLoad %int %i_2
-        %212 = OpLoad %int %high_1
-        %213 = OpSLessThan %bool %211 %212
-               OpSelectionMerge %214 None
-               OpBranchConditional %213 %215 %216
-        %215 = OpLabel
-               OpBranch %214
-        %216 = OpLabel
-               OpBranch %208
-        %214 = OpLabel
-        %217 = OpLoad %int %i_2
-               OpStore %from_1 %217
-        %218 = OpLoad %int %i_2
-        %219 = OpLoad %int %m_1
-        %220 = OpIAdd %int %218 %219
-        %221 = OpISub %int %220 %int_1
-               OpStore %mid_1 %221
-        %222 = OpLoad %int %i_2
-        %223 = OpLoad %int %m_1
-        %224 = OpLoad %int %high_1
-        %226 = OpIMul %int %int_2 %223
-        %227 = OpIAdd %int %222 %226
-        %228 = OpISub %int %227 %int_1
-        %225 = OpExtInst %int %174 SMin %228 %224
-               OpStore %to_1 %225
-        %229 = OpLoad %int %from_1
-               OpStore %param %229
-        %230 = OpLoad %int %mid_1
-               OpStore %param_1 %230
-        %231 = OpLoad %int %to_1
-               OpStore %param_2 %231
-        %232 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %209
-        %209 = OpLabel
-        %236 = OpLoad %int %m_1
-               OpStore %param_3 %236
-        %237 = OpLoad %int %high_1
-               OpStore %param_4 %237
-        %238 = OpFunctionCall %int %func_i1_i1_ %param_3 %param_4
-        %241 = OpLoad %int %i_2
-        %242 = OpIAdd %int %241 %238
-               OpStore %i_2 %242
-               OpBranch %207
-        %208 = OpLabel
-               OpBranch %198
-        %198 = OpLabel
-        %243 = OpLoad %int %m_1
-        %244 = OpIMul %int %int_2 %243
-               OpStore %m_1 %244
-               OpBranch %196
-        %197 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %180
-        %246 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %251
-        %253 = OpAccessChain %_ptr_Uniform_float %x_34 %uint_0 %uint_0
-        %254 = OpLoad %float %253
-        %255 = OpConvertFToS %int %254
-               OpStore %i_3 %255
-               OpBranch %256
-        %256 = OpLabel
-               OpLoopMerge %257 %258 None
-               OpBranch %259
-        %259 = OpLabel
-        %260 = OpLoad %int %i_3
-               OpSelectionMerge %261 None
-               OpSwitch %260 %262 9 %263 8 %264 7 %265 6 %266 5 %267 4 %268 3 %269 2 %270 1 %271 0 %272
-        %263 = OpLabel
-        %273 = OpLoad %int %i_3
-        %274 = OpAccessChain %_ptr_Private_int %data %273
-               OpStore %274 %int_n5
-               OpBranch %261
-        %264 = OpLabel
-        %276 = OpLoad %int %i_3
-        %277 = OpAccessChain %_ptr_Private_int %data %276
-               OpStore %277 %int_n4
-               OpBranch %261
-        %265 = OpLabel
-        %279 = OpLoad %int %i_3
-        %280 = OpAccessChain %_ptr_Private_int %data %279
-               OpStore %280 %int_n3
-               OpBranch %261
-        %266 = OpLabel
-        %282 = OpLoad %int %i_3
-        %283 = OpAccessChain %_ptr_Private_int %data %282
-               OpStore %283 %int_n2
-               OpBranch %261
-        %267 = OpLabel
-        %285 = OpLoad %int %i_3
-        %286 = OpAccessChain %_ptr_Private_int %data %285
-               OpStore %286 %int_n1
-               OpBranch %261
-        %268 = OpLabel
-        %288 = OpLoad %int %i_3
-        %289 = OpAccessChain %_ptr_Private_int %data %288
-               OpStore %289 %int_0
-               OpBranch %261
-        %269 = OpLabel
-        %290 = OpLoad %int %i_3
-        %291 = OpAccessChain %_ptr_Private_int %data %290
-               OpStore %291 %int_1
-               OpBranch %261
-        %270 = OpLabel
-        %292 = OpLoad %int %i_3
-        %293 = OpAccessChain %_ptr_Private_int %data %292
-               OpStore %293 %int_2
-               OpBranch %261
-        %271 = OpLabel
-        %294 = OpLoad %int %i_3
-        %295 = OpAccessChain %_ptr_Private_int %data %294
-               OpStore %295 %int_3
-               OpBranch %261
-        %272 = OpLabel
-        %297 = OpLoad %int %i_3
-        %298 = OpAccessChain %_ptr_Private_int %data %297
-               OpStore %298 %int_4
-               OpBranch %261
-        %262 = OpLabel
-               OpBranch %261
-        %261 = OpLabel
-        %299 = OpLoad %int %i_3
-        %300 = OpIAdd %int %299 %int_1
-               OpStore %i_3 %300
-               OpBranch %258
-        %258 = OpLabel
-        %301 = OpLoad %int %i_3
-        %302 = OpSLessThan %bool %301 %int_10
-               OpBranchConditional %302 %256 %257
-        %257 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %303
-        %303 = OpLabel
-               OpLoopMerge %304 %305 None
-               OpBranch %306
-        %306 = OpLabel
-        %307 = OpLoad %int %j_1
-        %308 = OpSLessThan %bool %307 %int_10
-               OpSelectionMerge %309 None
-               OpBranchConditional %308 %310 %311
-        %310 = OpLabel
-               OpBranch %309
-        %311 = OpLabel
-               OpBranch %304
-        %309 = OpLabel
-        %312 = OpLoad %int %j_1
-        %313 = OpLoad %int %j_1
-        %314 = OpAccessChain %_ptr_Private_int %data %313
-        %315 = OpLoad %int %314
-        %316 = OpAccessChain %_ptr_Private_int %temp %312
-               OpStore %316 %315
-               OpBranch %305
-        %305 = OpLabel
-        %317 = OpLoad %int %j_1
-        %318 = OpIAdd %int %317 %int_1
-               OpStore %j_1 %318
-               OpBranch %303
-        %304 = OpLabel
-        %319 = OpFunctionCall %void %mergeSort_
-        %321 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %322 = OpLoad %float %321
-        %323 = OpConvertFToS %int %322
-        %325 = OpSLessThan %bool %323 %int_30
-               OpSelectionMerge %326 None
-               OpBranchConditional %325 %327 %328
-        %327 = OpLabel
-        %329 = OpAccessChain %_ptr_Private_int %data %int_0
-        %330 = OpLoad %int %329
-        %332 = OpConvertSToF %float %330
-        %334 = OpFDiv %float %332 %float_10
-        %335 = OpFAdd %float %float_0_5 %334
-               OpStore %grey %335
-               OpBranch %326
-        %328 = OpLabel
-        %336 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %337 = OpLoad %float %336
-        %338 = OpConvertFToS %int %337
-        %340 = OpSLessThan %bool %338 %int_60
-               OpSelectionMerge %341 None
-               OpBranchConditional %340 %342 %343
-        %342 = OpLabel
-        %344 = OpAccessChain %_ptr_Private_int %data %int_1
-        %345 = OpLoad %int %344
-        %346 = OpConvertSToF %float %345
-        %347 = OpFDiv %float %346 %float_10
-        %348 = OpFAdd %float %float_0_5 %347
-               OpStore %grey %348
-               OpBranch %341
-        %343 = OpLabel
-        %349 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %350 = OpLoad %float %349
-        %351 = OpConvertFToS %int %350
-        %353 = OpSLessThan %bool %351 %int_90
-               OpSelectionMerge %354 None
-               OpBranchConditional %353 %355 %356
-        %355 = OpLabel
-        %357 = OpAccessChain %_ptr_Private_int %data %int_2
-        %358 = OpLoad %int %357
-        %359 = OpConvertSToF %float %358
-        %360 = OpFDiv %float %359 %float_10
-        %361 = OpFAdd %float %float_0_5 %360
-               OpStore %grey %361
-               OpBranch %354
-        %356 = OpLabel
-        %362 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %363 = OpLoad %float %362
-        %364 = OpConvertFToS %int %363
-        %366 = OpSLessThan %bool %364 %int_120
-               OpSelectionMerge %367 None
-               OpBranchConditional %366 %368 %369
-        %368 = OpLabel
-        %370 = OpAccessChain %_ptr_Private_int %data %int_3
-        %371 = OpLoad %int %370
-        %372 = OpConvertSToF %float %371
-        %373 = OpFDiv %float %372 %float_10
-        %374 = OpFAdd %float %float_0_5 %373
-               OpStore %grey %374
-               OpBranch %367
-        %369 = OpLabel
-        %375 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %376 = OpLoad %float %375
-        %377 = OpConvertFToS %int %376
-        %379 = OpSLessThan %bool %377 %int_150
-               OpSelectionMerge %380 None
-               OpBranchConditional %379 %381 %382
-        %381 = OpLabel
-               OpKill
-        %382 = OpLabel
-        %383 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %384 = OpLoad %float %383
-        %385 = OpConvertFToS %int %384
-        %387 = OpSLessThan %bool %385 %int_180
-               OpSelectionMerge %388 None
-               OpBranchConditional %387 %389 %390
-        %389 = OpLabel
-        %392 = OpAccessChain %_ptr_Private_int %data %int_5
-        %393 = OpLoad %int %392
-        %394 = OpConvertSToF %float %393
-        %395 = OpFDiv %float %394 %float_10
-        %396 = OpFAdd %float %float_0_5 %395
-               OpStore %grey %396
-               OpBranch %388
-        %390 = OpLabel
-        %397 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %398 = OpLoad %float %397
-        %399 = OpConvertFToS %int %398
-        %401 = OpSLessThan %bool %399 %int_210
-               OpSelectionMerge %402 None
-               OpBranchConditional %401 %403 %404
-        %403 = OpLabel
-        %406 = OpAccessChain %_ptr_Private_int %data %int_6
-        %407 = OpLoad %int %406
-        %408 = OpConvertSToF %float %407
-        %409 = OpFDiv %float %408 %float_10
-        %410 = OpFAdd %float %float_0_5 %409
-               OpStore %grey %410
-               OpBranch %402
-        %404 = OpLabel
-        %411 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %412 = OpLoad %float %411
-        %413 = OpConvertFToS %int %412
-        %415 = OpSLessThan %bool %413 %int_240
-               OpSelectionMerge %416 None
-               OpBranchConditional %415 %417 %418
-        %417 = OpLabel
-        %420 = OpAccessChain %_ptr_Private_int %data %int_7
-        %421 = OpLoad %int %420
-        %422 = OpConvertSToF %float %421
-        %423 = OpFDiv %float %422 %float_10
-        %424 = OpFAdd %float %float_0_5 %423
-               OpStore %grey %424
-               OpBranch %416
-        %418 = OpLabel
-        %425 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %426 = OpLoad %float %425
-        %427 = OpConvertFToS %int %426
-        %429 = OpSLessThan %bool %427 %int_270
-               OpSelectionMerge %430 None
-               OpBranchConditional %429 %431 %432
-        %431 = OpLabel
-        %434 = OpAccessChain %_ptr_Private_int %data %int_8
-        %435 = OpLoad %int %434
-        %436 = OpConvertSToF %float %435
-        %437 = OpFDiv %float %436 %float_10
-        %438 = OpFAdd %float %float_0_5 %437
-               OpStore %grey %438
-               OpBranch %430
-        %432 = OpLabel
-               OpKill
-        %430 = OpLabel
-               OpBranch %416
-        %416 = OpLabel
-               OpBranch %402
-        %402 = OpLabel
-               OpBranch %388
-        %388 = OpLabel
-               OpBranch %380
-        %380 = OpLabel
-               OpBranch %367
-        %367 = OpLabel
-               OpBranch %354
-        %354 = OpLabel
-               OpBranch %341
-        %341 = OpLabel
-               OpBranch %326
-        %326 = OpLabel
-        %439 = OpLoad %float %grey
-        %441 = OpCompositeConstruct %v3float %439 %439 %439
-        %442 = OpCompositeExtract %float %441 0
-        %443 = OpCompositeExtract %float %441 1
-        %444 = OpCompositeExtract %float %441 2
-        %446 = OpCompositeConstruct %v4float %442 %443 %444 %float_1
-               OpStore %x_GLF_color %446
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %447
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %451 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %452 = OpFunctionCall %void %main_1
-        %453 = OpLoad %v4float %x_GLF_color
-        %454 = OpCompositeConstruct %main_out %453
-               OpReturnValue %454
-               OpFunctionEnd
-       %main = OpFunction %void None %180
-        %456 = OpLabel
-        %458 = OpLoad %v4float %gl_FragCoord_param_1
-        %457 = OpFunctionCall %main_out %main_inner %458
-        %459 = OpCompositeExtract %v4float %457 0
-               OpStore %x_GLF_color_1_1 %459
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.wgsl
deleted file mode 100644
index 460ad4b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-clamped-conditional-bit-shift/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,340 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_260 : i32 = *(from);
-  k = x_260;
-  let x_261 : i32 = *(from);
-  i = x_261;
-  let x_262 : i32 = *(mid);
-  j = (x_262 + 1);
-  loop {
-    let x_268 : i32 = i;
-    let x_269 : i32 = *(mid);
-    let x_271 : i32 = j;
-    let x_272 : i32 = *(to);
-    if (((x_268 <= x_269) && (x_271 <= x_272))) {
-    } else {
-      break;
-    }
-    let x_276 : i32 = i;
-    let x_278 : i32 = data[x_276];
-    let x_279 : i32 = j;
-    let x_281 : i32 = data[x_279];
-    if ((x_278 < x_281)) {
-      let x_286 : i32 = k;
-      k = (x_286 + 1);
-      let x_288 : i32 = i;
-      i = (x_288 + 1);
-      let x_291 : i32 = data[x_288];
-      temp[x_286] = x_291;
-    } else {
-      let x_293 : i32 = k;
-      k = (x_293 + 1);
-      let x_295 : i32 = j;
-      j = (x_295 + 1);
-      let x_298 : i32 = data[x_295];
-      temp[x_293] = x_298;
-    }
-  }
-  loop {
-    let x_304 : i32 = i;
-    let x_306 : i32 = i;
-    let x_307 : i32 = *(mid);
-    if (((x_304 < 10) && (x_306 <= x_307))) {
-    } else {
-      break;
-    }
-    let x_311 : i32 = k;
-    k = (x_311 + 1);
-    let x_313 : i32 = i;
-    i = (x_313 + 1);
-    let x_316 : i32 = data[x_313];
-    temp[x_311] = x_316;
-  }
-  let x_318 : i32 = *(from);
-  i_1 = x_318;
-  loop {
-    let x_323 : i32 = i_1;
-    let x_324 : i32 = *(to);
-    if ((x_323 <= x_324)) {
-    } else {
-      break;
-    }
-    let x_327 : i32 = i_1;
-    let x_328 : i32 = i_1;
-    let x_330 : i32 = temp[x_328];
-    data[x_327] = x_330;
-
-    continuing {
-      let x_332 : i32 = i_1;
-      i_1 = (x_332 + 1);
-    }
-  }
-  return;
-}
-
-fn func_i1_i1_(m : ptr<function, i32>, high : ptr<function, i32>) -> i32 {
-  var x : i32;
-  var x_335 : i32;
-  var x_336 : i32;
-  let x_338 : f32 = gl_FragCoord.x;
-  if ((x_338 >= 0.0)) {
-    if (false) {
-      let x_346 : i32 = *(high);
-      x_336 = (x_346 << bitcast<u32>(0));
-    } else {
-      x_336 = 4;
-    }
-    let x_348 : i32 = x_336;
-    x_335 = (1 << bitcast<u32>(x_348));
-  } else {
-    x_335 = 1;
-  }
-  let x_350 : i32 = x_335;
-  x = x_350;
-  let x_351 : i32 = x;
-  x = (x_351 >> bitcast<u32>(4));
-  let x_353 : i32 = *(m);
-  let x_355 : i32 = *(m);
-  let x_357 : i32 = *(m);
-  let x_359 : i32 = x;
-  return clamp((2 * x_353), (2 * x_355), ((2 * x_357) / x_359));
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high_1 : i32;
-  var m_1 : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  var param_4 : i32;
-  low = 0;
-  high_1 = 9;
-  m_1 = 1;
-  loop {
-    let x_367 : i32 = m_1;
-    let x_368 : i32 = high_1;
-    if ((x_367 <= x_368)) {
-    } else {
-      break;
-    }
-    let x_371 : i32 = low;
-    i_2 = x_371;
-    loop {
-      let x_376 : i32 = i_2;
-      let x_377 : i32 = high_1;
-      if ((x_376 < x_377)) {
-      } else {
-        break;
-      }
-      let x_380 : i32 = i_2;
-      from_1 = x_380;
-      let x_381 : i32 = i_2;
-      let x_382 : i32 = m_1;
-      mid_1 = ((x_381 + x_382) - 1);
-      let x_385 : i32 = i_2;
-      let x_386 : i32 = m_1;
-      let x_390 : i32 = high_1;
-      to_1 = min(((x_385 + (2 * x_386)) - 1), x_390);
-      let x_392 : i32 = from_1;
-      param = x_392;
-      let x_393 : i32 = mid_1;
-      param_1 = x_393;
-      let x_394 : i32 = to_1;
-      param_2 = x_394;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_396 : i32 = m_1;
-        param_3 = x_396;
-        let x_397 : i32 = high_1;
-        param_4 = x_397;
-        let x_398 : i32 = func_i1_i1_(&(param_3), &(param_4));
-        let x_399 : i32 = i_2;
-        i_2 = (x_399 + x_398);
-      }
-    }
-
-    continuing {
-      let x_401 : i32 = m_1;
-      m_1 = (2 * x_401);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  let x_93 : f32 = x_34.injectionSwitch.x;
-  i_3 = i32(x_93);
-  loop {
-    let x_99 : i32 = i_3;
-    switch(x_99) {
-      case 9: {
-        let x_129 : i32 = i_3;
-        data[x_129] = -5;
-      }
-      case 8: {
-        let x_127 : i32 = i_3;
-        data[x_127] = -4;
-      }
-      case 7: {
-        let x_125 : i32 = i_3;
-        data[x_125] = -3;
-      }
-      case 6: {
-        let x_123 : i32 = i_3;
-        data[x_123] = -2;
-      }
-      case 5: {
-        let x_121 : i32 = i_3;
-        data[x_121] = -1;
-      }
-      case 4: {
-        let x_119 : i32 = i_3;
-        data[x_119] = 0;
-      }
-      case 3: {
-        let x_117 : i32 = i_3;
-        data[x_117] = 1;
-      }
-      case 2: {
-        let x_115 : i32 = i_3;
-        data[x_115] = 2;
-      }
-      case 1: {
-        let x_113 : i32 = i_3;
-        data[x_113] = 3;
-      }
-      case 0: {
-        let x_111 : i32 = i_3;
-        data[x_111] = 4;
-      }
-      default: {
-      }
-    }
-    let x_131 : i32 = i_3;
-    i_3 = (x_131 + 1);
-
-    continuing {
-      let x_133 : i32 = i_3;
-      if ((x_133 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_139 : i32 = j_1;
-    if ((x_139 < 10)) {
-    } else {
-      break;
-    }
-    let x_142 : i32 = j_1;
-    let x_143 : i32 = j_1;
-    let x_145 : i32 = data[x_143];
-    temp[x_142] = x_145;
-
-    continuing {
-      let x_147 : i32 = j_1;
-      j_1 = (x_147 + 1);
-    }
-  }
-  mergeSort_();
-  let x_151 : f32 = gl_FragCoord.y;
-  if ((i32(x_151) < 30)) {
-    let x_158 : i32 = data[0];
-    grey = (0.5 + (f32(x_158) / 10.0));
-  } else {
-    let x_163 : f32 = gl_FragCoord.y;
-    if ((i32(x_163) < 60)) {
-      let x_170 : i32 = data[1];
-      grey = (0.5 + (f32(x_170) / 10.0));
-    } else {
-      let x_175 : f32 = gl_FragCoord.y;
-      if ((i32(x_175) < 90)) {
-        let x_182 : i32 = data[2];
-        grey = (0.5 + (f32(x_182) / 10.0));
-      } else {
-        let x_187 : f32 = gl_FragCoord.y;
-        if ((i32(x_187) < 120)) {
-          let x_194 : i32 = data[3];
-          grey = (0.5 + (f32(x_194) / 10.0));
-        } else {
-          let x_199 : f32 = gl_FragCoord.y;
-          if ((i32(x_199) < 150)) {
-            discard;
-          } else {
-            let x_206 : f32 = gl_FragCoord.y;
-            if ((i32(x_206) < 180)) {
-              let x_213 : i32 = data[5];
-              grey = (0.5 + (f32(x_213) / 10.0));
-            } else {
-              let x_218 : f32 = gl_FragCoord.y;
-              if ((i32(x_218) < 210)) {
-                let x_225 : i32 = data[6];
-                grey = (0.5 + (f32(x_225) / 10.0));
-              } else {
-                let x_230 : f32 = gl_FragCoord.y;
-                if ((i32(x_230) < 240)) {
-                  let x_237 : i32 = data[7];
-                  grey = (0.5 + (f32(x_237) / 10.0));
-                } else {
-                  let x_242 : f32 = gl_FragCoord.y;
-                  if ((i32(x_242) < 270)) {
-                    let x_249 : i32 = data[8];
-                    grey = (0.5 + (f32(x_249) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_253 : f32 = grey;
-  let x_254 : vec3<f32> = vec3<f32>(x_253, x_253, x_253);
-  x_GLF_color = vec4<f32>(x_254.x, x_254.y, x_254.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.hlsl
deleted file mode 100644
index 318b26f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,354 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int temp[10] = (int[10])0;
-  int data[10] = (int[10])0;
-  float x_180 = 0.0f;
-  float x_279 = 0.0f;
-  int x_65_phi = 0;
-  int x_93_phi = 0;
-  int x_102_phi = 0;
-  float x_280_phi = 0.0f;
-  const float x_62 = asfloat(x_8[0].x);
-  const int x_63 = int(x_62);
-  x_65_phi = x_63;
-  while (true) {
-    const int x_65 = x_65_phi;
-    switch(x_65) {
-      case 9: {
-        data[x_65] = -5;
-        break;
-      }
-      case 8: {
-        data[x_65] = -4;
-        break;
-      }
-      case 7: {
-        data[x_65] = -3;
-        break;
-      }
-      case 6: {
-        data[x_65] = -2;
-        break;
-      }
-      case 5: {
-        data[x_65] = -1;
-        break;
-      }
-      case 4: {
-        data[x_65] = 0;
-        break;
-      }
-      case 3: {
-        data[x_65] = 1;
-        break;
-      }
-      case 2: {
-        data[x_65] = 2;
-        break;
-      }
-      case 1: {
-        data[x_65] = 3;
-        break;
-      }
-      case 0: {
-        data[x_65] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    const int x_66 = (x_65 + 1);
-    {
-      x_65_phi = x_66;
-      if ((x_66 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_93_phi = 0;
-  while (true) {
-    int x_94 = 0;
-    const int x_93 = x_93_phi;
-    if ((x_93 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const int x_99 = data[x_93];
-      temp[x_93] = x_99;
-      x_94 = (x_93 + 1);
-      x_93_phi = x_94;
-    }
-  }
-  x_102_phi = 1;
-  while (true) {
-    int x_103 = 0;
-    int x_109_phi = 0;
-    const int x_102 = x_102_phi;
-    if ((x_102 <= 9)) {
-    } else {
-      break;
-    }
-    x_109_phi = 0;
-    while (true) {
-      int x_121 = 0;
-      int x_126 = 0;
-      int x_121_phi = 0;
-      int x_124_phi = 0;
-      int x_126_phi = 0;
-      int x_148_phi = 0;
-      int x_151_phi = 0;
-      int x_161_phi = 0;
-      const int x_109 = x_109_phi;
-      if ((x_109 < 9)) {
-      } else {
-        break;
-      }
-      const int x_115 = (x_109 + x_102);
-      const int x_116 = (x_115 - 1);
-      const int x_110 = (x_109 + (2 * x_102));
-      const int x_119 = min((x_110 - 1), 9);
-      x_121_phi = x_109;
-      x_124_phi = x_115;
-      x_126_phi = x_109;
-      while (true) {
-        int x_141 = 0;
-        int x_144 = 0;
-        int x_125_phi = 0;
-        int x_127_phi = 0;
-        x_121 = x_121_phi;
-        const int x_124 = x_124_phi;
-        x_126 = x_126_phi;
-        if (((x_126 <= x_116) & (x_124 <= x_119))) {
-        } else {
-          break;
-        }
-        const int x_133_save = x_126;
-        const int x_134 = data[x_133_save];
-        const int x_135_save = x_124;
-        const int x_136 = data[x_135_save];
-        const int x_122 = asint((x_121 + asint(1)));
-        if ((x_134 < x_136)) {
-          x_141 = asint((x_126 + asint(1)));
-          const int x_142 = data[x_133_save];
-          temp[x_121] = x_142;
-          x_125_phi = x_124;
-          x_127_phi = x_141;
-        } else {
-          x_144 = (x_124 + 1);
-          const int x_145 = data[x_135_save];
-          temp[x_121] = x_145;
-          x_125_phi = x_144;
-          x_127_phi = x_126;
-        }
-        const int x_125 = x_125_phi;
-        const int x_127 = x_127_phi;
-        {
-          x_121_phi = x_122;
-          x_124_phi = x_125;
-          x_126_phi = x_127;
-        }
-      }
-      x_148_phi = x_121;
-      x_151_phi = x_126;
-      while (true) {
-        int x_149 = 0;
-        int x_152 = 0;
-        const int x_148 = x_148_phi;
-        const int x_151 = x_151_phi;
-        if (((x_151 < 10) & (x_151 <= x_116))) {
-        } else {
-          break;
-        }
-        {
-          x_149 = (x_148 + 1);
-          x_152 = (x_151 + 1);
-          const int x_158 = data[x_151];
-          temp[x_148] = x_158;
-          x_148_phi = x_149;
-          x_151_phi = x_152;
-        }
-      }
-      x_161_phi = x_109;
-      while (true) {
-        int x_162 = 0;
-        const int x_161 = x_161_phi;
-        if ((x_161 <= x_119)) {
-        } else {
-          break;
-        }
-        {
-          const int x_167 = temp[x_161];
-          data[x_161] = x_167;
-          x_162 = (x_161 + 1);
-          x_161_phi = x_162;
-        }
-      }
-      {
-        x_109_phi = x_110;
-      }
-    }
-    {
-      x_103 = (2 * x_102);
-      x_102_phi = x_103;
-    }
-  }
-  int x_171 = 0;
-  float x_189 = 0.0f;
-  float x_278 = 0.0f;
-  float x_279_phi = 0.0f;
-  const float x_170 = gl_FragCoord.y;
-  x_171 = int(x_170);
-  if ((x_171 < 30)) {
-    const int x_177 = data[0];
-    x_180 = (0.5f + (float(x_177) * 0.100000001f));
-    x_280_phi = x_180;
-  } else {
-    float x_198 = 0.0f;
-    float x_277 = 0.0f;
-    float x_278_phi = 0.0f;
-    if ((x_171 < 60)) {
-      const int x_186 = data[1];
-      x_189 = (0.5f + (float(x_186) * 0.100000001f));
-      x_279_phi = x_189;
-    } else {
-      float x_207 = 0.0f;
-      float x_249 = 0.0f;
-      float x_277_phi = 0.0f;
-      if ((x_171 < 90)) {
-        const int x_195 = data[2];
-        x_198 = (0.5f + (float(x_195) * 0.100000001f));
-        x_278_phi = x_198;
-      } else {
-        if ((x_171 < 120)) {
-          const int x_204 = data[3];
-          x_207 = (0.5f + (float(x_204) * 0.100000001f));
-          x_277_phi = x_207;
-        } else {
-          float x_220 = 0.0f;
-          float x_248 = 0.0f;
-          float x_249_phi = 0.0f;
-          float2 x_256_phi = float2(0.0f, 0.0f);
-          int x_259_phi = 0;
-          if ((x_171 < 150)) {
-            discard;
-          } else {
-            float x_229 = 0.0f;
-            float x_247 = 0.0f;
-            float x_248_phi = 0.0f;
-            if ((x_171 < 180)) {
-              const int x_217 = data[5];
-              x_220 = (0.5f + (float(x_217) * 0.100000001f));
-              x_249_phi = x_220;
-            } else {
-              float x_238 = 0.0f;
-              float x_246 = 0.0f;
-              float x_247_phi = 0.0f;
-              if ((x_171 < 210)) {
-                const int x_226 = data[6];
-                x_229 = (0.5f + (float(x_226) * 0.100000001f));
-                x_248_phi = x_229;
-              } else {
-                if ((x_171 < 240)) {
-                  const int x_235 = data[7];
-                  x_238 = (0.5f + (float(x_235) * 0.100000001f));
-                  x_247_phi = x_238;
-                } else {
-                  if ((x_171 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  const int x_243 = data[8];
-                  x_246 = (0.5f + (float(x_243) * 0.100000001f));
-                  x_247_phi = x_246;
-                }
-                x_247 = x_247_phi;
-                x_248_phi = x_247;
-              }
-              x_248 = x_248_phi;
-              x_249_phi = x_248;
-            }
-            x_249 = x_249_phi;
-            const float x_251 = asfloat(x_8[0].y);
-            const bool x_252 = (x_62 > x_251);
-            if (x_252) {
-              x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-            }
-            x_256_phi = float2(1.0f, 1.0f);
-            x_259_phi = 0;
-            while (true) {
-              float2 x_272 = float2(0.0f, 0.0f);
-              int x_260 = 0;
-              float2 x_273_phi = float2(0.0f, 0.0f);
-              const float2 x_256 = x_256_phi;
-              const int x_259 = x_259_phi;
-              if ((x_259 <= 32)) {
-              } else {
-                break;
-              }
-              x_273_phi = x_256;
-              if ((x_256.x < 0.0f)) {
-                if (x_252) {
-                  discard;
-                }
-                x_272 = x_256;
-                x_272.y = (x_256.y + 1.0f);
-                x_273_phi = x_272;
-              }
-              const float2 x_273 = x_273_phi;
-              float2 x_257_1 = x_273;
-              x_257_1.x = (x_273.x + x_273.y);
-              const float2 x_257 = x_257_1;
-              {
-                x_260 = (x_259 + 1);
-                x_256_phi = x_257;
-                x_259_phi = x_260;
-              }
-            }
-          }
-          x_277_phi = x_249;
-        }
-        x_277 = x_277_phi;
-        x_278_phi = x_277;
-      }
-      x_278 = x_278_phi;
-      x_279_phi = x_278;
-    }
-    x_279 = x_279_phi;
-    x_280_phi = x_279;
-  }
-  const float x_280 = x_280_phi;
-  x_GLF_color = float4(x_280, x_280, x_280, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.msl
deleted file mode 100644
index 74e6b33..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.msl
+++ /dev/null
@@ -1,357 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  tint_array_wrapper temp = {};
-  tint_array_wrapper data = {};
-  float x_180 = 0.0f;
-  float x_279 = 0.0f;
-  int x_65_phi = 0;
-  int x_93_phi = 0;
-  int x_102_phi = 0;
-  float x_280_phi = 0.0f;
-  float const x_62 = x_8.injectionSwitch.x;
-  int const x_63 = int(x_62);
-  x_65_phi = x_63;
-  while (true) {
-    int const x_65 = x_65_phi;
-    switch(x_65) {
-      case 9: {
-        data.arr[x_65] = -5;
-        break;
-      }
-      case 8: {
-        data.arr[x_65] = -4;
-        break;
-      }
-      case 7: {
-        data.arr[x_65] = -3;
-        break;
-      }
-      case 6: {
-        data.arr[x_65] = -2;
-        break;
-      }
-      case 5: {
-        data.arr[x_65] = -1;
-        break;
-      }
-      case 4: {
-        data.arr[x_65] = 0;
-        break;
-      }
-      case 3: {
-        data.arr[x_65] = 1;
-        break;
-      }
-      case 2: {
-        data.arr[x_65] = 2;
-        break;
-      }
-      case 1: {
-        data.arr[x_65] = 3;
-        break;
-      }
-      case 0: {
-        data.arr[x_65] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_66 = as_type<int>((as_type<uint>(x_65) + as_type<uint>(1)));
-    {
-      x_65_phi = x_66;
-      if ((x_66 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_93_phi = 0;
-  while (true) {
-    int x_94 = 0;
-    int const x_93 = x_93_phi;
-    if ((x_93 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_99 = data.arr[x_93];
-      temp.arr[x_93] = x_99;
-      x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(1)));
-      x_93_phi = x_94;
-    }
-  }
-  x_102_phi = 1;
-  while (true) {
-    int x_103 = 0;
-    int x_109_phi = 0;
-    int const x_102 = x_102_phi;
-    if ((x_102 <= 9)) {
-    } else {
-      break;
-    }
-    x_109_phi = 0;
-    while (true) {
-      int x_121 = 0;
-      int x_126 = 0;
-      int x_121_phi = 0;
-      int x_124_phi = 0;
-      int x_126_phi = 0;
-      int x_148_phi = 0;
-      int x_151_phi = 0;
-      int x_161_phi = 0;
-      int const x_109 = x_109_phi;
-      if ((x_109 < 9)) {
-      } else {
-        break;
-      }
-      int const x_115 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(x_102)));
-      int const x_116 = as_type<int>((as_type<uint>(x_115) - as_type<uint>(1)));
-      int const x_110 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_102))))));
-      int const x_119 = min(as_type<int>((as_type<uint>(x_110) - as_type<uint>(1))), 9);
-      x_121_phi = x_109;
-      x_124_phi = x_115;
-      x_126_phi = x_109;
-      while (true) {
-        int x_141 = 0;
-        int x_144 = 0;
-        int x_125_phi = 0;
-        int x_127_phi = 0;
-        x_121 = x_121_phi;
-        int const x_124 = x_124_phi;
-        x_126 = x_126_phi;
-        if (((x_126 <= x_116) & (x_124 <= x_119))) {
-        } else {
-          break;
-        }
-        int const x_133_save = x_126;
-        int const x_134 = data.arr[x_133_save];
-        int const x_135_save = x_124;
-        int const x_136 = data.arr[x_135_save];
-        int const x_122 = as_type<int>(as_type<int>((as_type<uint>(x_121) + as_type<uint>(as_type<int>(1)))));
-        if ((x_134 < x_136)) {
-          x_141 = as_type<int>(as_type<int>((as_type<uint>(x_126) + as_type<uint>(as_type<int>(1)))));
-          int const x_142 = data.arr[x_133_save];
-          temp.arr[x_121] = x_142;
-          x_125_phi = x_124;
-          x_127_phi = x_141;
-        } else {
-          x_144 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-          int const x_145 = data.arr[x_135_save];
-          temp.arr[x_121] = x_145;
-          x_125_phi = x_144;
-          x_127_phi = x_126;
-        }
-        int const x_125 = x_125_phi;
-        int const x_127 = x_127_phi;
-        {
-          x_121_phi = x_122;
-          x_124_phi = x_125;
-          x_126_phi = x_127;
-        }
-      }
-      x_148_phi = x_121;
-      x_151_phi = x_126;
-      while (true) {
-        int x_149 = 0;
-        int x_152 = 0;
-        int const x_148 = x_148_phi;
-        int const x_151 = x_151_phi;
-        if (((x_151 < 10) & (x_151 <= x_116))) {
-        } else {
-          break;
-        }
-        {
-          x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-          x_152 = as_type<int>((as_type<uint>(x_151) + as_type<uint>(1)));
-          int const x_158 = data.arr[x_151];
-          temp.arr[x_148] = x_158;
-          x_148_phi = x_149;
-          x_151_phi = x_152;
-        }
-      }
-      x_161_phi = x_109;
-      while (true) {
-        int x_162 = 0;
-        int const x_161 = x_161_phi;
-        if ((x_161 <= x_119)) {
-        } else {
-          break;
-        }
-        {
-          int const x_167 = temp.arr[x_161];
-          data.arr[x_161] = x_167;
-          x_162 = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
-          x_161_phi = x_162;
-        }
-      }
-      {
-        x_109_phi = x_110;
-      }
-    }
-    {
-      x_103 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_102)));
-      x_102_phi = x_103;
-    }
-  }
-  int x_171 = 0;
-  float x_189 = 0.0f;
-  float x_278 = 0.0f;
-  float x_279_phi = 0.0f;
-  float const x_170 = (*(tint_symbol_3)).y;
-  x_171 = int(x_170);
-  if ((x_171 < 30)) {
-    int const x_177 = data.arr[0];
-    x_180 = (0.5f + (float(x_177) * 0.100000001f));
-    x_280_phi = x_180;
-  } else {
-    float x_198 = 0.0f;
-    float x_277 = 0.0f;
-    float x_278_phi = 0.0f;
-    if ((x_171 < 60)) {
-      int const x_186 = data.arr[1];
-      x_189 = (0.5f + (float(x_186) * 0.100000001f));
-      x_279_phi = x_189;
-    } else {
-      float x_207 = 0.0f;
-      float x_249 = 0.0f;
-      float x_277_phi = 0.0f;
-      if ((x_171 < 90)) {
-        int const x_195 = data.arr[2];
-        x_198 = (0.5f + (float(x_195) * 0.100000001f));
-        x_278_phi = x_198;
-      } else {
-        if ((x_171 < 120)) {
-          int const x_204 = data.arr[3];
-          x_207 = (0.5f + (float(x_204) * 0.100000001f));
-          x_277_phi = x_207;
-        } else {
-          float x_220 = 0.0f;
-          float x_248 = 0.0f;
-          float x_249_phi = 0.0f;
-          float2 x_256_phi = 0.0f;
-          int x_259_phi = 0;
-          if ((x_171 < 150)) {
-            discard_fragment();
-          } else {
-            float x_229 = 0.0f;
-            float x_247 = 0.0f;
-            float x_248_phi = 0.0f;
-            if ((x_171 < 180)) {
-              int const x_217 = data.arr[5];
-              x_220 = (0.5f + (float(x_217) * 0.100000001f));
-              x_249_phi = x_220;
-            } else {
-              float x_238 = 0.0f;
-              float x_246 = 0.0f;
-              float x_247_phi = 0.0f;
-              if ((x_171 < 210)) {
-                int const x_226 = data.arr[6];
-                x_229 = (0.5f + (float(x_226) * 0.100000001f));
-                x_248_phi = x_229;
-              } else {
-                if ((x_171 < 240)) {
-                  int const x_235 = data.arr[7];
-                  x_238 = (0.5f + (float(x_235) * 0.100000001f));
-                  x_247_phi = x_238;
-                } else {
-                  if ((x_171 < 270)) {
-                  } else {
-                    discard_fragment();
-                  }
-                  int const x_243 = data.arr[8];
-                  x_246 = (0.5f + (float(x_243) * 0.100000001f));
-                  x_247_phi = x_246;
-                }
-                x_247 = x_247_phi;
-                x_248_phi = x_247;
-              }
-              x_248 = x_248_phi;
-              x_249_phi = x_248;
-            }
-            x_249 = x_249_phi;
-            float const x_251 = x_8.injectionSwitch.y;
-            bool const x_252 = (x_62 > x_251);
-            if (x_252) {
-              *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-            }
-            x_256_phi = float2(1.0f, 1.0f);
-            x_259_phi = 0;
-            while (true) {
-              float2 x_272 = 0.0f;
-              int x_260 = 0;
-              float2 x_273_phi = 0.0f;
-              float2 const x_256 = x_256_phi;
-              int const x_259 = x_259_phi;
-              if ((x_259 <= 32)) {
-              } else {
-                break;
-              }
-              x_273_phi = x_256;
-              if ((x_256.x < 0.0f)) {
-                if (x_252) {
-                  discard_fragment();
-                }
-                x_272 = x_256;
-                x_272.y = (x_256.y + 1.0f);
-                x_273_phi = x_272;
-              }
-              float2 const x_273 = x_273_phi;
-              float2 x_257_1 = x_273;
-              x_257_1.x = (x_273.x + x_273.y);
-              float2 const x_257 = x_257_1;
-              {
-                x_260 = as_type<int>((as_type<uint>(x_259) + as_type<uint>(1)));
-                x_256_phi = x_257;
-                x_259_phi = x_260;
-              }
-            }
-          }
-          x_277_phi = x_249;
-        }
-        x_277 = x_277_phi;
-        x_278_phi = x_277;
-      }
-      x_278 = x_278_phi;
-      x_279_phi = x_278;
-    }
-    x_279 = x_279_phi;
-    x_280_phi = x_279;
-  }
-  float const x_280 = x_280_phi;
-  *(tint_symbol_4) = float4(x_280, x_280, x_280, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.spvasm
deleted file mode 100644
index 6f744f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,737 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 428
-; Schema: 0
-               OpCapability Shader
-        %132 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %temp "temp"
-               OpName %data "data"
-               OpName %x_180 "x_180"
-               OpName %x_279 "x_279"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %x_280_phi "x_280_phi"
-               OpName %x_94 "x_94"
-               OpName %x_103 "x_103"
-               OpName %x_109_phi "x_109_phi"
-               OpName %x_121 "x_121"
-               OpName %x_126 "x_126"
-               OpName %x_121_phi "x_121_phi"
-               OpName %x_124_phi "x_124_phi"
-               OpName %x_126_phi "x_126_phi"
-               OpName %x_148_phi "x_148_phi"
-               OpName %x_151_phi "x_151_phi"
-               OpName %x_161_phi "x_161_phi"
-               OpName %x_141 "x_141"
-               OpName %x_144 "x_144"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_127_phi "x_127_phi"
-               OpName %x_149 "x_149"
-               OpName %x_152 "x_152"
-               OpName %x_162 "x_162"
-               OpName %x_171 "x_171"
-               OpName %x_189 "x_189"
-               OpName %x_278 "x_278"
-               OpName %x_279_phi "x_279_phi"
-               OpName %x_198 "x_198"
-               OpName %x_277 "x_277"
-               OpName %x_278_phi "x_278_phi"
-               OpName %x_207 "x_207"
-               OpName %x_249 "x_249"
-               OpName %x_277_phi "x_277_phi"
-               OpName %x_220 "x_220"
-               OpName %x_248 "x_248"
-               OpName %x_249_phi "x_249_phi"
-               OpName %x_256_phi "x_256_phi"
-               OpName %x_259_phi "x_259_phi"
-               OpName %x_229 "x_229"
-               OpName %x_247 "x_247"
-               OpName %x_248_phi "x_248_phi"
-               OpName %x_238 "x_238"
-               OpName %x_246 "x_246"
-               OpName %x_247_phi "x_247_phi"
-               OpName %x_272 "x_272"
-               OpName %x_260 "x_260"
-               OpName %x_273_phi "x_273_phi"
-               OpName %x_257_1 "x_257_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %25 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-%float_0_100000001 = OpConstant %float 0.100000001
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %293 = OpConstantNull %v2float
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-        %370 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %371 = OpConstantComposite %v2float %float_1 %float_1
-     %int_32 = OpConstant %int 32
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-        %415 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %temp = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-       %data = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-      %x_180 = OpVariable %_ptr_Function_float Function %29
-      %x_279 = OpVariable %_ptr_Function_float Function %29
-   %x_65_phi = OpVariable %_ptr_Function_int Function %33
-   %x_93_phi = OpVariable %_ptr_Function_int Function %33
-  %x_102_phi = OpVariable %_ptr_Function_int Function %33
-  %x_280_phi = OpVariable %_ptr_Function_float Function %29
-       %x_94 = OpVariable %_ptr_Function_int Function %33
-      %x_103 = OpVariable %_ptr_Function_int Function %33
-  %x_109_phi = OpVariable %_ptr_Function_int Function %33
-      %x_121 = OpVariable %_ptr_Function_int Function %33
-      %x_126 = OpVariable %_ptr_Function_int Function %33
-  %x_121_phi = OpVariable %_ptr_Function_int Function %33
-  %x_124_phi = OpVariable %_ptr_Function_int Function %33
-  %x_126_phi = OpVariable %_ptr_Function_int Function %33
-  %x_148_phi = OpVariable %_ptr_Function_int Function %33
-  %x_151_phi = OpVariable %_ptr_Function_int Function %33
-  %x_161_phi = OpVariable %_ptr_Function_int Function %33
-      %x_141 = OpVariable %_ptr_Function_int Function %33
-      %x_144 = OpVariable %_ptr_Function_int Function %33
-  %x_125_phi = OpVariable %_ptr_Function_int Function %33
-  %x_127_phi = OpVariable %_ptr_Function_int Function %33
-      %x_149 = OpVariable %_ptr_Function_int Function %33
-      %x_152 = OpVariable %_ptr_Function_int Function %33
-      %x_162 = OpVariable %_ptr_Function_int Function %33
-      %x_171 = OpVariable %_ptr_Function_int Function %33
-      %x_189 = OpVariable %_ptr_Function_float Function %29
-      %x_278 = OpVariable %_ptr_Function_float Function %29
-  %x_279_phi = OpVariable %_ptr_Function_float Function %29
-      %x_198 = OpVariable %_ptr_Function_float Function %29
-      %x_277 = OpVariable %_ptr_Function_float Function %29
-  %x_278_phi = OpVariable %_ptr_Function_float Function %29
-      %x_207 = OpVariable %_ptr_Function_float Function %29
-      %x_249 = OpVariable %_ptr_Function_float Function %29
-  %x_277_phi = OpVariable %_ptr_Function_float Function %29
-      %x_220 = OpVariable %_ptr_Function_float Function %29
-      %x_248 = OpVariable %_ptr_Function_float Function %29
-  %x_249_phi = OpVariable %_ptr_Function_float Function %29
-  %x_256_phi = OpVariable %_ptr_Function_v2float Function %293
-  %x_259_phi = OpVariable %_ptr_Function_int Function %33
-      %x_229 = OpVariable %_ptr_Function_float Function %29
-      %x_247 = OpVariable %_ptr_Function_float Function %29
-  %x_248_phi = OpVariable %_ptr_Function_float Function %29
-      %x_238 = OpVariable %_ptr_Function_float Function %29
-      %x_246 = OpVariable %_ptr_Function_float Function %29
-  %x_247_phi = OpVariable %_ptr_Function_float Function %29
-      %x_272 = OpVariable %_ptr_Function_v2float Function %293
-      %x_260 = OpVariable %_ptr_Function_int Function %33
-  %x_273_phi = OpVariable %_ptr_Function_v2float Function %293
-    %x_257_1 = OpVariable %_ptr_Function_v2float Function %293
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-               OpStore %x_65_phi %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %46 = OpLoad %int %x_65_phi
-               OpSelectionMerge %47 None
-               OpSwitch %46 %48 9 %49 8 %50 7 %51 6 %52 5 %53 4 %54 3 %55 2 %56 1 %57 0 %58
-         %49 = OpLabel
-         %59 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %59 %int_n5
-               OpBranch %47
-         %50 = OpLabel
-         %61 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %61 %int_n4
-               OpBranch %47
-         %51 = OpLabel
-         %63 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %63 %int_n3
-               OpBranch %47
-         %52 = OpLabel
-         %65 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %65 %int_n2
-               OpBranch %47
-         %53 = OpLabel
-         %67 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %67 %int_n1
-               OpBranch %47
-         %54 = OpLabel
-         %69 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %69 %int_0
-               OpBranch %47
-         %55 = OpLabel
-         %71 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %71 %int_1
-               OpBranch %47
-         %56 = OpLabel
-         %73 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %73 %int_2
-               OpBranch %47
-         %57 = OpLabel
-         %75 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %75 %int_3
-               OpBranch %47
-         %58 = OpLabel
-         %77 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %77 %int_4
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-         %79 = OpIAdd %int %46 %int_1
-               OpBranch %44
-         %44 = OpLabel
-               OpStore %x_65_phi %79
-         %81 = OpSLessThan %bool %79 %int_10
-               OpBranchConditional %81 %42 %43
-         %43 = OpLabel
-               OpStore %x_93_phi %int_0
-               OpBranch %83
-         %83 = OpLabel
-               OpLoopMerge %84 %85 None
-               OpBranch %86
-         %86 = OpLabel
-         %88 = OpLoad %int %x_93_phi
-         %89 = OpSLessThan %bool %88 %int_10
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %84
-         %90 = OpLabel
-               OpBranch %85
-         %85 = OpLabel
-         %93 = OpAccessChain %_ptr_Function_int %data %88
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Function_int %temp %88
-               OpStore %95 %94
-         %96 = OpIAdd %int %88 %int_1
-               OpStore %x_94 %96
-         %97 = OpLoad %int %x_94
-               OpStore %x_93_phi %97
-               OpBranch %83
-         %84 = OpLabel
-               OpStore %x_102_phi %int_1
-               OpBranch %98
-         %98 = OpLabel
-               OpLoopMerge %99 %100 None
-               OpBranch %101
-        %101 = OpLabel
-        %104 = OpLoad %int %x_102_phi
-        %106 = OpSLessThanEqual %bool %104 %int_9
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %109
-        %108 = OpLabel
-               OpBranch %107
-        %109 = OpLabel
-               OpBranch %99
-        %107 = OpLabel
-               OpStore %x_109_phi %int_0
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %122 = OpLoad %int %x_109_phi
-        %123 = OpSLessThan %bool %122 %int_9
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %126
-        %125 = OpLabel
-               OpBranch %124
-        %126 = OpLabel
-               OpBranch %111
-        %124 = OpLabel
-        %127 = OpIAdd %int %122 %104
-        %128 = OpISub %int %127 %int_1
-        %129 = OpIMul %int %int_2 %104
-        %130 = OpIAdd %int %122 %129
-        %133 = OpISub %int %130 %int_1
-        %131 = OpExtInst %int %132 SMin %133 %int_9
-               OpStore %x_121_phi %122
-               OpStore %x_124_phi %127
-               OpStore %x_126_phi %122
-               OpBranch %134
-        %134 = OpLabel
-               OpLoopMerge %135 %136 None
-               OpBranch %137
-        %137 = OpLabel
-        %142 = OpLoad %int %x_121_phi
-               OpStore %x_121 %142
-        %143 = OpLoad %int %x_124_phi
-        %144 = OpLoad %int %x_126_phi
-               OpStore %x_126 %144
-        %145 = OpLoad %int %x_126
-        %146 = OpSLessThanEqual %bool %145 %128
-        %147 = OpSLessThanEqual %bool %143 %131
-        %148 = OpLogicalAnd %bool %146 %147
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %151
-        %150 = OpLabel
-               OpBranch %149
-        %151 = OpLabel
-               OpBranch %135
-        %149 = OpLabel
-        %152 = OpLoad %int %x_126
-        %153 = OpAccessChain %_ptr_Function_int %data %152
-        %154 = OpLoad %int %153
-        %155 = OpAccessChain %_ptr_Function_int %data %143
-        %156 = OpLoad %int %155
-        %158 = OpLoad %int %x_121
-        %159 = OpCopyObject %int %int_1
-        %160 = OpIAdd %int %158 %159
-        %157 = OpCopyObject %int %160
-        %161 = OpSLessThan %bool %154 %156
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %164
-        %163 = OpLabel
-        %166 = OpLoad %int %x_126
-        %167 = OpCopyObject %int %int_1
-        %168 = OpIAdd %int %166 %167
-        %165 = OpCopyObject %int %168
-               OpStore %x_141 %165
-        %169 = OpAccessChain %_ptr_Function_int %data %152
-        %170 = OpLoad %int %169
-        %171 = OpLoad %int %x_121
-        %172 = OpAccessChain %_ptr_Function_int %temp %171
-               OpStore %172 %170
-               OpStore %x_125_phi %143
-        %173 = OpLoad %int %x_141
-               OpStore %x_127_phi %173
-               OpBranch %162
-        %164 = OpLabel
-        %174 = OpIAdd %int %143 %int_1
-               OpStore %x_144 %174
-        %175 = OpAccessChain %_ptr_Function_int %data %143
-        %176 = OpLoad %int %175
-        %177 = OpLoad %int %x_121
-        %178 = OpAccessChain %_ptr_Function_int %temp %177
-               OpStore %178 %176
-        %179 = OpLoad %int %x_144
-               OpStore %x_125_phi %179
-        %180 = OpLoad %int %x_126
-               OpStore %x_127_phi %180
-               OpBranch %162
-        %162 = OpLabel
-        %181 = OpLoad %int %x_125_phi
-        %182 = OpLoad %int %x_127_phi
-               OpBranch %136
-        %136 = OpLabel
-               OpStore %x_121_phi %157
-               OpStore %x_124_phi %181
-               OpStore %x_126_phi %182
-               OpBranch %134
-        %135 = OpLabel
-        %183 = OpLoad %int %x_121
-               OpStore %x_148_phi %183
-        %184 = OpLoad %int %x_126
-               OpStore %x_151_phi %184
-               OpBranch %185
-        %185 = OpLabel
-               OpLoopMerge %186 %187 None
-               OpBranch %188
-        %188 = OpLabel
-        %191 = OpLoad %int %x_148_phi
-        %192 = OpLoad %int %x_151_phi
-        %193 = OpSLessThan %bool %192 %int_10
-        %194 = OpSLessThanEqual %bool %192 %128
-        %195 = OpLogicalAnd %bool %193 %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %198
-        %197 = OpLabel
-               OpBranch %196
-        %198 = OpLabel
-               OpBranch %186
-        %196 = OpLabel
-               OpBranch %187
-        %187 = OpLabel
-        %199 = OpIAdd %int %191 %int_1
-               OpStore %x_149 %199
-        %200 = OpIAdd %int %192 %int_1
-               OpStore %x_152 %200
-        %201 = OpAccessChain %_ptr_Function_int %data %192
-        %202 = OpLoad %int %201
-        %203 = OpAccessChain %_ptr_Function_int %temp %191
-               OpStore %203 %202
-        %204 = OpLoad %int %x_149
-               OpStore %x_148_phi %204
-        %205 = OpLoad %int %x_152
-               OpStore %x_151_phi %205
-               OpBranch %185
-        %186 = OpLabel
-               OpStore %x_161_phi %122
-               OpBranch %206
-        %206 = OpLabel
-               OpLoopMerge %207 %208 None
-               OpBranch %209
-        %209 = OpLabel
-        %211 = OpLoad %int %x_161_phi
-        %212 = OpSLessThanEqual %bool %211 %131
-               OpSelectionMerge %213 None
-               OpBranchConditional %212 %214 %215
-        %214 = OpLabel
-               OpBranch %213
-        %215 = OpLabel
-               OpBranch %207
-        %213 = OpLabel
-               OpBranch %208
-        %208 = OpLabel
-        %216 = OpAccessChain %_ptr_Function_int %temp %211
-        %217 = OpLoad %int %216
-        %218 = OpAccessChain %_ptr_Function_int %data %211
-               OpStore %218 %217
-        %219 = OpIAdd %int %211 %int_1
-               OpStore %x_162 %219
-        %220 = OpLoad %int %x_162
-               OpStore %x_161_phi %220
-               OpBranch %206
-        %207 = OpLabel
-               OpBranch %112
-        %112 = OpLabel
-               OpStore %x_109_phi %130
-               OpBranch %110
-        %111 = OpLabel
-               OpBranch %100
-        %100 = OpLabel
-        %221 = OpIMul %int %int_2 %104
-               OpStore %x_103 %221
-        %222 = OpLoad %int %x_103
-               OpStore %x_102_phi %222
-               OpBranch %98
-         %99 = OpLabel
-        %229 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %230 = OpLoad %float %229
-        %231 = OpConvertFToS %int %230
-               OpStore %x_171 %231
-        %232 = OpLoad %int %x_171
-        %234 = OpSLessThan %bool %232 %int_30
-               OpSelectionMerge %235 None
-               OpBranchConditional %234 %236 %237
-        %236 = OpLabel
-        %238 = OpAccessChain %_ptr_Function_int %data %int_0
-        %239 = OpLoad %int %238
-        %241 = OpConvertSToF %float %239
-        %243 = OpFMul %float %241 %float_0_100000001
-        %244 = OpFAdd %float %float_0_5 %243
-               OpStore %x_180 %244
-        %245 = OpLoad %float %x_180
-               OpStore %x_280_phi %245
-               OpBranch %235
-        %237 = OpLabel
-        %249 = OpLoad %int %x_171
-        %251 = OpSLessThan %bool %249 %int_60
-               OpSelectionMerge %252 None
-               OpBranchConditional %251 %253 %254
-        %253 = OpLabel
-        %255 = OpAccessChain %_ptr_Function_int %data %int_1
-        %256 = OpLoad %int %255
-        %257 = OpConvertSToF %float %256
-        %258 = OpFMul %float %257 %float_0_100000001
-        %259 = OpFAdd %float %float_0_5 %258
-               OpStore %x_189 %259
-        %260 = OpLoad %float %x_189
-               OpStore %x_279_phi %260
-               OpBranch %252
-        %254 = OpLabel
-        %264 = OpLoad %int %x_171
-        %266 = OpSLessThan %bool %264 %int_90
-               OpSelectionMerge %267 None
-               OpBranchConditional %266 %268 %269
-        %268 = OpLabel
-        %270 = OpAccessChain %_ptr_Function_int %data %int_2
-        %271 = OpLoad %int %270
-        %272 = OpConvertSToF %float %271
-        %273 = OpFMul %float %272 %float_0_100000001
-        %274 = OpFAdd %float %float_0_5 %273
-               OpStore %x_198 %274
-        %275 = OpLoad %float %x_198
-               OpStore %x_278_phi %275
-               OpBranch %267
-        %269 = OpLabel
-        %276 = OpLoad %int %x_171
-        %278 = OpSLessThan %bool %276 %int_120
-               OpSelectionMerge %279 None
-               OpBranchConditional %278 %280 %281
-        %280 = OpLabel
-        %282 = OpAccessChain %_ptr_Function_int %data %int_3
-        %283 = OpLoad %int %282
-        %284 = OpConvertSToF %float %283
-        %285 = OpFMul %float %284 %float_0_100000001
-        %286 = OpFAdd %float %float_0_5 %285
-               OpStore %x_207 %286
-        %287 = OpLoad %float %x_207
-               OpStore %x_277_phi %287
-               OpBranch %279
-        %281 = OpLabel
-        %295 = OpLoad %int %x_171
-        %297 = OpSLessThan %bool %295 %int_150
-               OpSelectionMerge %298 None
-               OpBranchConditional %297 %299 %300
-        %299 = OpLabel
-               OpKill
-        %300 = OpLabel
-        %304 = OpLoad %int %x_171
-        %306 = OpSLessThan %bool %304 %int_180
-               OpSelectionMerge %307 None
-               OpBranchConditional %306 %308 %309
-        %308 = OpLabel
-        %311 = OpAccessChain %_ptr_Function_int %data %int_5
-        %312 = OpLoad %int %311
-        %313 = OpConvertSToF %float %312
-        %314 = OpFMul %float %313 %float_0_100000001
-        %315 = OpFAdd %float %float_0_5 %314
-               OpStore %x_220 %315
-        %316 = OpLoad %float %x_220
-               OpStore %x_249_phi %316
-               OpBranch %307
-        %309 = OpLabel
-        %320 = OpLoad %int %x_171
-        %322 = OpSLessThan %bool %320 %int_210
-               OpSelectionMerge %323 None
-               OpBranchConditional %322 %324 %325
-        %324 = OpLabel
-        %327 = OpAccessChain %_ptr_Function_int %data %int_6
-        %328 = OpLoad %int %327
-        %329 = OpConvertSToF %float %328
-        %330 = OpFMul %float %329 %float_0_100000001
-        %331 = OpFAdd %float %float_0_5 %330
-               OpStore %x_229 %331
-        %332 = OpLoad %float %x_229
-               OpStore %x_248_phi %332
-               OpBranch %323
-        %325 = OpLabel
-        %333 = OpLoad %int %x_171
-        %335 = OpSLessThan %bool %333 %int_240
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %338
-        %337 = OpLabel
-        %340 = OpAccessChain %_ptr_Function_int %data %int_7
-        %341 = OpLoad %int %340
-        %342 = OpConvertSToF %float %341
-        %343 = OpFMul %float %342 %float_0_100000001
-        %344 = OpFAdd %float %float_0_5 %343
-               OpStore %x_238 %344
-        %345 = OpLoad %float %x_238
-               OpStore %x_247_phi %345
-               OpBranch %336
-        %338 = OpLabel
-        %346 = OpLoad %int %x_171
-        %348 = OpSLessThan %bool %346 %int_270
-               OpSelectionMerge %349 None
-               OpBranchConditional %348 %350 %351
-        %350 = OpLabel
-               OpBranch %349
-        %351 = OpLabel
-               OpKill
-        %349 = OpLabel
-        %353 = OpAccessChain %_ptr_Function_int %data %int_8
-        %354 = OpLoad %int %353
-        %355 = OpConvertSToF %float %354
-        %356 = OpFMul %float %355 %float_0_100000001
-        %357 = OpFAdd %float %float_0_5 %356
-               OpStore %x_246 %357
-        %358 = OpLoad %float %x_246
-               OpStore %x_247_phi %358
-               OpBranch %336
-        %336 = OpLabel
-        %359 = OpLoad %float %x_247_phi
-               OpStore %x_247 %359
-        %360 = OpLoad %float %x_247
-               OpStore %x_248_phi %360
-               OpBranch %323
-        %323 = OpLabel
-        %361 = OpLoad %float %x_248_phi
-               OpStore %x_248 %361
-        %362 = OpLoad %float %x_248
-               OpStore %x_249_phi %362
-               OpBranch %307
-        %307 = OpLabel
-        %363 = OpLoad %float %x_249_phi
-               OpStore %x_249 %363
-        %364 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %365 = OpLoad %float %364
-        %366 = OpFOrdGreaterThan %bool %40 %365
-               OpSelectionMerge %367 None
-               OpBranchConditional %366 %368 %367
-        %368 = OpLabel
-               OpStore %x_GLF_color %370
-               OpBranch %367
-        %367 = OpLabel
-               OpStore %x_256_phi %371
-               OpStore %x_259_phi %int_0
-               OpBranch %372
-        %372 = OpLabel
-               OpLoopMerge %373 %374 None
-               OpBranch %375
-        %375 = OpLabel
-        %379 = OpLoad %v2float %x_256_phi
-        %380 = OpLoad %int %x_259_phi
-        %382 = OpSLessThanEqual %bool %380 %int_32
-               OpSelectionMerge %383 None
-               OpBranchConditional %382 %384 %385
-        %384 = OpLabel
-               OpBranch %383
-        %385 = OpLabel
-               OpBranch %373
-        %383 = OpLabel
-               OpStore %x_273_phi %379
-        %386 = OpCompositeExtract %float %379 0
-        %388 = OpFOrdLessThan %bool %386 %float_0
-               OpSelectionMerge %389 None
-               OpBranchConditional %388 %390 %389
-        %390 = OpLabel
-               OpSelectionMerge %391 None
-               OpBranchConditional %366 %392 %391
-        %392 = OpLabel
-               OpKill
-        %391 = OpLabel
-               OpStore %x_272 %379
-        %393 = OpAccessChain %_ptr_Function_float %x_272 %uint_1
-        %394 = OpCompositeExtract %float %379 1
-        %395 = OpFAdd %float %394 %float_1
-               OpStore %393 %395
-        %396 = OpLoad %v2float %x_272
-               OpStore %x_273_phi %396
-               OpBranch %389
-        %389 = OpLabel
-        %397 = OpLoad %v2float %x_273_phi
-               OpStore %x_257_1 %397
-        %399 = OpAccessChain %_ptr_Function_float %x_257_1 %uint_0
-        %400 = OpCompositeExtract %float %397 0
-        %401 = OpCompositeExtract %float %397 1
-        %402 = OpFAdd %float %400 %401
-               OpStore %399 %402
-        %403 = OpLoad %v2float %x_257_1
-               OpBranch %374
-        %374 = OpLabel
-        %404 = OpIAdd %int %380 %int_1
-               OpStore %x_260 %404
-               OpStore %x_256_phi %403
-        %405 = OpLoad %int %x_260
-               OpStore %x_259_phi %405
-               OpBranch %372
-        %373 = OpLabel
-               OpBranch %298
-        %298 = OpLabel
-        %406 = OpLoad %float %x_249
-               OpStore %x_277_phi %406
-               OpBranch %279
-        %279 = OpLabel
-        %407 = OpLoad %float %x_277_phi
-               OpStore %x_277 %407
-        %408 = OpLoad %float %x_277
-               OpStore %x_278_phi %408
-               OpBranch %267
-        %267 = OpLabel
-        %409 = OpLoad %float %x_278_phi
-               OpStore %x_278 %409
-        %410 = OpLoad %float %x_278
-               OpStore %x_279_phi %410
-               OpBranch %252
-        %252 = OpLabel
-        %411 = OpLoad %float %x_279_phi
-               OpStore %x_279 %411
-        %412 = OpLoad %float %x_279
-               OpStore %x_280_phi %412
-               OpBranch %235
-        %235 = OpLabel
-        %413 = OpLoad %float %x_280_phi
-        %414 = OpCompositeConstruct %v4float %413 %413 %413 %float_1
-               OpStore %x_GLF_color %414
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %415
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %419 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %420 = OpFunctionCall %void %main_1
-        %421 = OpLoad %v4float %x_GLF_color
-        %422 = OpCompositeConstruct %main_out %421
-               OpReturnValue %422
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %424 = OpLabel
-        %426 = OpLoad %v4float %gl_FragCoord_param_1
-        %425 = OpFunctionCall %main_out %main_inner %426
-        %427 = OpCompositeExtract %v4float %425 0
-               OpStore %x_GLF_color_1_1 %427
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.wgsl
deleted file mode 100644
index 81c3d6c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,344 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var temp : array<i32, 10>;
-  var data : array<i32, 10>;
-  var x_180 : f32;
-  var x_279 : f32;
-  var x_65_phi : i32;
-  var x_93_phi : i32;
-  var x_102_phi : i32;
-  var x_280_phi : f32;
-  let x_62 : f32 = x_8.injectionSwitch.x;
-  let x_63 : i32 = i32(x_62);
-  x_65_phi = x_63;
-  loop {
-    let x_65 : i32 = x_65_phi;
-    switch(x_65) {
-      case 9: {
-        data[x_65] = -5;
-      }
-      case 8: {
-        data[x_65] = -4;
-      }
-      case 7: {
-        data[x_65] = -3;
-      }
-      case 6: {
-        data[x_65] = -2;
-      }
-      case 5: {
-        data[x_65] = -1;
-      }
-      case 4: {
-        data[x_65] = 0;
-      }
-      case 3: {
-        data[x_65] = 1;
-      }
-      case 2: {
-        data[x_65] = 2;
-      }
-      case 1: {
-        data[x_65] = 3;
-      }
-      case 0: {
-        data[x_65] = 4;
-      }
-      default: {
-      }
-    }
-    let x_66 : i32 = (x_65 + 1);
-
-    continuing {
-      x_65_phi = x_66;
-      if ((x_66 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_93_phi = 0;
-  loop {
-    var x_94 : i32;
-    let x_93 : i32 = x_93_phi;
-    if ((x_93 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_99 : i32 = data[x_93];
-      temp[x_93] = x_99;
-      x_94 = (x_93 + 1);
-      x_93_phi = x_94;
-    }
-  }
-  x_102_phi = 1;
-  loop {
-    var x_103 : i32;
-    var x_109_phi : i32;
-    let x_102 : i32 = x_102_phi;
-    if ((x_102 <= 9)) {
-    } else {
-      break;
-    }
-    x_109_phi = 0;
-    loop {
-      var x_121 : i32;
-      var x_126 : i32;
-      var x_121_phi : i32;
-      var x_124_phi : i32;
-      var x_126_phi : i32;
-      var x_148_phi : i32;
-      var x_151_phi : i32;
-      var x_161_phi : i32;
-      let x_109 : i32 = x_109_phi;
-      if ((x_109 < 9)) {
-      } else {
-        break;
-      }
-      let x_115 : i32 = (x_109 + x_102);
-      let x_116 : i32 = (x_115 - 1);
-      let x_110 : i32 = (x_109 + (2 * x_102));
-      let x_119 : i32 = min((x_110 - 1), 9);
-      x_121_phi = x_109;
-      x_124_phi = x_115;
-      x_126_phi = x_109;
-      loop {
-        var x_141 : i32;
-        var x_144 : i32;
-        var x_125_phi : i32;
-        var x_127_phi : i32;
-        x_121 = x_121_phi;
-        let x_124 : i32 = x_124_phi;
-        x_126 = x_126_phi;
-        if (((x_126 <= x_116) & (x_124 <= x_119))) {
-        } else {
-          break;
-        }
-        let x_133 : ptr<function, i32> = &(data[x_126]);
-        let x_134 : i32 = *(x_133);
-        let x_135 : ptr<function, i32> = &(data[x_124]);
-        let x_136 : i32 = *(x_135);
-        let x_122 : i32 = bitcast<i32>((x_121 + bitcast<i32>(1)));
-        if ((x_134 < x_136)) {
-          x_141 = bitcast<i32>((x_126 + bitcast<i32>(1)));
-          let x_142 : i32 = *(x_133);
-          temp[x_121] = x_142;
-          x_125_phi = x_124;
-          x_127_phi = x_141;
-        } else {
-          x_144 = (x_124 + 1);
-          let x_145 : i32 = *(x_135);
-          temp[x_121] = x_145;
-          x_125_phi = x_144;
-          x_127_phi = x_126;
-        }
-        let x_125 : i32 = x_125_phi;
-        let x_127 : i32 = x_127_phi;
-
-        continuing {
-          x_121_phi = x_122;
-          x_124_phi = x_125;
-          x_126_phi = x_127;
-        }
-      }
-      x_148_phi = x_121;
-      x_151_phi = x_126;
-      loop {
-        var x_149 : i32;
-        var x_152 : i32;
-        let x_148 : i32 = x_148_phi;
-        let x_151 : i32 = x_151_phi;
-        if (((x_151 < 10) & (x_151 <= x_116))) {
-        } else {
-          break;
-        }
-
-        continuing {
-          x_149 = (x_148 + 1);
-          x_152 = (x_151 + 1);
-          let x_158 : i32 = data[x_151];
-          temp[x_148] = x_158;
-          x_148_phi = x_149;
-          x_151_phi = x_152;
-        }
-      }
-      x_161_phi = x_109;
-      loop {
-        var x_162 : i32;
-        let x_161 : i32 = x_161_phi;
-        if ((x_161 <= x_119)) {
-        } else {
-          break;
-        }
-
-        continuing {
-          let x_167 : i32 = temp[x_161];
-          data[x_161] = x_167;
-          x_162 = (x_161 + 1);
-          x_161_phi = x_162;
-        }
-      }
-
-      continuing {
-        x_109_phi = x_110;
-      }
-    }
-
-    continuing {
-      x_103 = (2 * x_102);
-      x_102_phi = x_103;
-    }
-  }
-  var x_171 : i32;
-  var x_189 : f32;
-  var x_278 : f32;
-  var x_279_phi : f32;
-  let x_170 : f32 = gl_FragCoord.y;
-  x_171 = i32(x_170);
-  if ((x_171 < 30)) {
-    let x_177 : i32 = data[0];
-    x_180 = (0.5 + (f32(x_177) * 0.100000001));
-    x_280_phi = x_180;
-  } else {
-    var x_198 : f32;
-    var x_277 : f32;
-    var x_278_phi : f32;
-    if ((x_171 < 60)) {
-      let x_186 : i32 = data[1];
-      x_189 = (0.5 + (f32(x_186) * 0.100000001));
-      x_279_phi = x_189;
-    } else {
-      var x_207 : f32;
-      var x_249 : f32;
-      var x_277_phi : f32;
-      if ((x_171 < 90)) {
-        let x_195 : i32 = data[2];
-        x_198 = (0.5 + (f32(x_195) * 0.100000001));
-        x_278_phi = x_198;
-      } else {
-        if ((x_171 < 120)) {
-          let x_204 : i32 = data[3];
-          x_207 = (0.5 + (f32(x_204) * 0.100000001));
-          x_277_phi = x_207;
-        } else {
-          var x_220 : f32;
-          var x_248 : f32;
-          var x_249_phi : f32;
-          var x_256_phi : vec2<f32>;
-          var x_259_phi : i32;
-          if ((x_171 < 150)) {
-            discard;
-          } else {
-            var x_229 : f32;
-            var x_247 : f32;
-            var x_248_phi : f32;
-            if ((x_171 < 180)) {
-              let x_217 : i32 = data[5];
-              x_220 = (0.5 + (f32(x_217) * 0.100000001));
-              x_249_phi = x_220;
-            } else {
-              var x_238 : f32;
-              var x_246 : f32;
-              var x_247_phi : f32;
-              if ((x_171 < 210)) {
-                let x_226 : i32 = data[6];
-                x_229 = (0.5 + (f32(x_226) * 0.100000001));
-                x_248_phi = x_229;
-              } else {
-                if ((x_171 < 240)) {
-                  let x_235 : i32 = data[7];
-                  x_238 = (0.5 + (f32(x_235) * 0.100000001));
-                  x_247_phi = x_238;
-                } else {
-                  if ((x_171 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  let x_243 : i32 = data[8];
-                  x_246 = (0.5 + (f32(x_243) * 0.100000001));
-                  x_247_phi = x_246;
-                }
-                x_247 = x_247_phi;
-                x_248_phi = x_247;
-              }
-              x_248 = x_248_phi;
-              x_249_phi = x_248;
-            }
-            x_249 = x_249_phi;
-            let x_251 : f32 = x_8.injectionSwitch.y;
-            let x_252 : bool = (x_62 > x_251);
-            if (x_252) {
-              x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-            }
-            x_256_phi = vec2<f32>(1.0, 1.0);
-            x_259_phi = 0;
-            loop {
-              var x_272 : vec2<f32>;
-              var x_260 : i32;
-              var x_273_phi : vec2<f32>;
-              let x_256 : vec2<f32> = x_256_phi;
-              let x_259 : i32 = x_259_phi;
-              if ((x_259 <= 32)) {
-              } else {
-                break;
-              }
-              x_273_phi = x_256;
-              if ((x_256.x < 0.0)) {
-                if (x_252) {
-                  discard;
-                }
-                x_272 = x_256;
-                x_272.y = (x_256.y + 1.0);
-                x_273_phi = x_272;
-              }
-              let x_273 : vec2<f32> = x_273_phi;
-              var x_257_1 : vec2<f32> = x_273;
-              x_257_1.x = (x_273.x + x_273.y);
-              let x_257 : vec2<f32> = x_257_1;
-
-              continuing {
-                x_260 = (x_259 + 1);
-                x_256_phi = x_257;
-                x_259_phi = x_260;
-              }
-            }
-          }
-          x_277_phi = x_249;
-        }
-        x_277 = x_277_phi;
-        x_278_phi = x_277;
-      }
-      x_278 = x_278_phi;
-      x_279_phi = x_278;
-    }
-    x_279 = x_279_phi;
-    x_280_phi = x_279;
-  }
-  let x_280 : f32 = x_280_phi;
-  x_GLF_color = vec4<f32>(x_280, x_280, x_280, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.hlsl
deleted file mode 100644
index 44ed754..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,362 +0,0 @@
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int temp[10] = (int[10])0;
-  int data[10] = (int[10])0;
-  float x_180 = 0.0f;
-  float x_279 = 0.0f;
-  int x_65_phi = 0;
-  int x_93_phi = 0;
-  int x_102_phi = 0;
-  float x_280_phi = 0.0f;
-  const float x_62 = asfloat(x_8[0].x);
-  const int x_63 = int(x_62);
-  x_65_phi = x_63;
-  while (true) {
-    const int x_65 = x_65_phi;
-    switch(x_65) {
-      case 9: {
-        data[x_65] = -5;
-        break;
-      }
-      case 8: {
-        data[x_65] = -4;
-        break;
-      }
-      case 7: {
-        data[x_65] = -3;
-        break;
-      }
-      case 6: {
-        data[x_65] = -2;
-        break;
-      }
-      case 5: {
-        data[x_65] = -1;
-        break;
-      }
-      case 4: {
-        data[x_65] = 0;
-        break;
-      }
-      case 3: {
-        data[x_65] = 1;
-        break;
-      }
-      case 2: {
-        data[x_65] = 2;
-        break;
-      }
-      case 1: {
-        data[x_65] = 3;
-        break;
-      }
-      case 0: {
-        data[x_65] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    const int x_66 = (x_65 + 1);
-    {
-      x_65_phi = x_66;
-      if ((x_66 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_93_phi = 0;
-  while (true) {
-    int x_94 = 0;
-    const int x_93 = x_93_phi;
-    if ((x_93 < 10)) {
-    } else {
-      break;
-    }
-    {
-      const int x_99 = data[x_93];
-      temp[x_93] = x_99;
-      x_94 = (x_93 + 1);
-      x_93_phi = x_94;
-    }
-  }
-  x_102_phi = 1;
-  while (true) {
-    int x_103 = 0;
-    int x_109_phi = 0;
-    const int x_102 = x_102_phi;
-    if ((x_102 <= 9)) {
-    } else {
-      break;
-    }
-    x_109_phi = 0;
-    while (true) {
-      int x_121 = 0;
-      int x_126 = 0;
-      int x_121_phi = 0;
-      int x_124_phi = 0;
-      int x_126_phi = 0;
-      int x_148_phi = 0;
-      int x_151_phi = 0;
-      int x_161_phi = 0;
-      const int x_109 = x_109_phi;
-      if ((x_109 < 9)) {
-      } else {
-        break;
-      }
-      const int x_115 = (x_109 + x_102);
-      const int x_116 = (x_115 - 1);
-      const int x_110 = (x_109 + (2 * x_102));
-      const int x_119 = min((x_110 - 1), 9);
-      x_121_phi = x_109;
-      x_124_phi = x_115;
-      x_126_phi = x_109;
-      while (true) {
-        int x_141 = 0;
-        int x_144 = 0;
-        int x_125_phi = 0;
-        int x_127_phi = 0;
-        x_121 = x_121_phi;
-        const int x_124 = x_124_phi;
-        x_126 = x_126_phi;
-        bool tint_tmp = (x_126 <= x_116);
-        if (tint_tmp) {
-          tint_tmp = (x_124 <= x_119);
-        }
-        if ((tint_tmp)) {
-        } else {
-          break;
-        }
-        const int x_133_save = x_126;
-        const int x_134 = data[x_133_save];
-        const int x_135_save = x_124;
-        const int x_136 = data[x_135_save];
-        const int x_122 = asint((x_121 + asint(1)));
-        if ((x_134 < x_136)) {
-          x_141 = asint((x_126 + asint(1)));
-          const int x_142 = data[x_133_save];
-          temp[x_121] = x_142;
-          x_125_phi = x_124;
-          x_127_phi = x_141;
-        } else {
-          x_144 = (x_124 + 1);
-          const int x_145 = data[x_135_save];
-          temp[x_121] = x_145;
-          x_125_phi = x_144;
-          x_127_phi = x_126;
-        }
-        const int x_125 = x_125_phi;
-        const int x_127 = x_127_phi;
-        {
-          x_121_phi = x_122;
-          x_124_phi = x_125;
-          x_126_phi = x_127;
-        }
-      }
-      x_148_phi = x_121;
-      x_151_phi = x_126;
-      while (true) {
-        int x_149 = 0;
-        int x_152 = 0;
-        const int x_148 = x_148_phi;
-        const int x_151 = x_151_phi;
-        bool tint_tmp_1 = (x_151 < 10);
-        if (tint_tmp_1) {
-          tint_tmp_1 = (x_151 <= x_116);
-        }
-        if ((tint_tmp_1)) {
-        } else {
-          break;
-        }
-        {
-          x_149 = (x_148 + 1);
-          x_152 = (x_151 + 1);
-          const int x_158 = data[x_151];
-          temp[x_148] = x_158;
-          x_148_phi = x_149;
-          x_151_phi = x_152;
-        }
-      }
-      x_161_phi = x_109;
-      while (true) {
-        int x_162 = 0;
-        const int x_161 = x_161_phi;
-        if ((x_161 <= x_119)) {
-        } else {
-          break;
-        }
-        {
-          const int x_167 = temp[x_161];
-          data[x_161] = x_167;
-          x_162 = (x_161 + 1);
-          x_161_phi = x_162;
-        }
-      }
-      {
-        x_109_phi = x_110;
-      }
-    }
-    {
-      x_103 = (2 * x_102);
-      x_102_phi = x_103;
-    }
-  }
-  int x_171 = 0;
-  float x_189 = 0.0f;
-  float x_278 = 0.0f;
-  float x_279_phi = 0.0f;
-  const float x_170 = gl_FragCoord.y;
-  x_171 = int(x_170);
-  if ((x_171 < 30)) {
-    const int x_177 = data[0];
-    x_180 = (0.5f + (float(x_177) * 0.100000001f));
-    x_280_phi = x_180;
-  } else {
-    float x_198 = 0.0f;
-    float x_277 = 0.0f;
-    float x_278_phi = 0.0f;
-    if ((x_171 < 60)) {
-      const int x_186 = data[1];
-      x_189 = (0.5f + (float(x_186) * 0.100000001f));
-      x_279_phi = x_189;
-    } else {
-      float x_207 = 0.0f;
-      float x_249 = 0.0f;
-      float x_277_phi = 0.0f;
-      if ((x_171 < 90)) {
-        const int x_195 = data[2];
-        x_198 = (0.5f + (float(x_195) * 0.100000001f));
-        x_278_phi = x_198;
-      } else {
-        if ((x_171 < 120)) {
-          const int x_204 = data[3];
-          x_207 = (0.5f + (float(x_204) * 0.100000001f));
-          x_277_phi = x_207;
-        } else {
-          float x_220 = 0.0f;
-          float x_248 = 0.0f;
-          float x_249_phi = 0.0f;
-          float2 x_256_phi = float2(0.0f, 0.0f);
-          int x_259_phi = 0;
-          if ((x_171 < 150)) {
-            discard;
-          } else {
-            float x_229 = 0.0f;
-            float x_247 = 0.0f;
-            float x_248_phi = 0.0f;
-            if ((x_171 < 180)) {
-              const int x_217 = data[5];
-              x_220 = (0.5f + (float(x_217) * 0.100000001f));
-              x_249_phi = x_220;
-            } else {
-              float x_238 = 0.0f;
-              float x_246 = 0.0f;
-              float x_247_phi = 0.0f;
-              if ((x_171 < 210)) {
-                const int x_226 = data[6];
-                x_229 = (0.5f + (float(x_226) * 0.100000001f));
-                x_248_phi = x_229;
-              } else {
-                if ((x_171 < 240)) {
-                  const int x_235 = data[7];
-                  x_238 = (0.5f + (float(x_235) * 0.100000001f));
-                  x_247_phi = x_238;
-                } else {
-                  if ((x_171 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  const int x_243 = data[8];
-                  x_246 = (0.5f + (float(x_243) * 0.100000001f));
-                  x_247_phi = x_246;
-                }
-                x_247 = x_247_phi;
-                x_248_phi = x_247;
-              }
-              x_248 = x_248_phi;
-              x_249_phi = x_248;
-            }
-            x_249 = x_249_phi;
-            const float x_251 = asfloat(x_8[0].y);
-            const bool x_252 = (x_62 > x_251);
-            if (x_252) {
-              x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-            }
-            x_256_phi = float2(1.0f, 1.0f);
-            x_259_phi = 0;
-            while (true) {
-              float2 x_272 = float2(0.0f, 0.0f);
-              int x_260 = 0;
-              float2 x_273_phi = float2(0.0f, 0.0f);
-              const float2 x_256 = x_256_phi;
-              const int x_259 = x_259_phi;
-              if ((x_259 <= 32)) {
-              } else {
-                break;
-              }
-              x_273_phi = x_256;
-              if ((x_256.x < 0.0f)) {
-                if (x_252) {
-                  discard;
-                }
-                x_272 = x_256;
-                x_272.y = (x_256.y + 1.0f);
-                x_273_phi = x_272;
-              }
-              const float2 x_273 = x_273_phi;
-              float2 x_257_1 = x_273;
-              x_257_1.x = (x_273.x + x_273.y);
-              const float2 x_257 = x_257_1;
-              {
-                x_260 = (x_259 + 1);
-                x_256_phi = x_257;
-                x_259_phi = x_260;
-              }
-            }
-          }
-          x_277_phi = x_249;
-        }
-        x_277 = x_277_phi;
-        x_278_phi = x_277;
-      }
-      x_278 = x_278_phi;
-      x_279_phi = x_278;
-    }
-    x_279 = x_279_phi;
-    x_280_phi = x_279;
-  }
-  const float x_280 = x_280_phi;
-  x_GLF_color = float4(x_280, x_280, x_280, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.msl
deleted file mode 100644
index b28eeb1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.msl
+++ /dev/null
@@ -1,357 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  tint_array_wrapper temp = {};
-  tint_array_wrapper data = {};
-  float x_180 = 0.0f;
-  float x_279 = 0.0f;
-  int x_65_phi = 0;
-  int x_93_phi = 0;
-  int x_102_phi = 0;
-  float x_280_phi = 0.0f;
-  float const x_62 = x_8.injectionSwitch.x;
-  int const x_63 = int(x_62);
-  x_65_phi = x_63;
-  while (true) {
-    int const x_65 = x_65_phi;
-    switch(x_65) {
-      case 9: {
-        data.arr[x_65] = -5;
-        break;
-      }
-      case 8: {
-        data.arr[x_65] = -4;
-        break;
-      }
-      case 7: {
-        data.arr[x_65] = -3;
-        break;
-      }
-      case 6: {
-        data.arr[x_65] = -2;
-        break;
-      }
-      case 5: {
-        data.arr[x_65] = -1;
-        break;
-      }
-      case 4: {
-        data.arr[x_65] = 0;
-        break;
-      }
-      case 3: {
-        data.arr[x_65] = 1;
-        break;
-      }
-      case 2: {
-        data.arr[x_65] = 2;
-        break;
-      }
-      case 1: {
-        data.arr[x_65] = 3;
-        break;
-      }
-      case 0: {
-        data.arr[x_65] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_66 = as_type<int>((as_type<uint>(x_65) + as_type<uint>(1)));
-    {
-      x_65_phi = x_66;
-      if ((x_66 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_93_phi = 0;
-  while (true) {
-    int x_94 = 0;
-    int const x_93 = x_93_phi;
-    if ((x_93 < 10)) {
-    } else {
-      break;
-    }
-    {
-      int const x_99 = data.arr[x_93];
-      temp.arr[x_93] = x_99;
-      x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(1)));
-      x_93_phi = x_94;
-    }
-  }
-  x_102_phi = 1;
-  while (true) {
-    int x_103 = 0;
-    int x_109_phi = 0;
-    int const x_102 = x_102_phi;
-    if ((x_102 <= 9)) {
-    } else {
-      break;
-    }
-    x_109_phi = 0;
-    while (true) {
-      int x_121 = 0;
-      int x_126 = 0;
-      int x_121_phi = 0;
-      int x_124_phi = 0;
-      int x_126_phi = 0;
-      int x_148_phi = 0;
-      int x_151_phi = 0;
-      int x_161_phi = 0;
-      int const x_109 = x_109_phi;
-      if ((x_109 < 9)) {
-      } else {
-        break;
-      }
-      int const x_115 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(x_102)));
-      int const x_116 = as_type<int>((as_type<uint>(x_115) - as_type<uint>(1)));
-      int const x_110 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_102))))));
-      int const x_119 = min(as_type<int>((as_type<uint>(x_110) - as_type<uint>(1))), 9);
-      x_121_phi = x_109;
-      x_124_phi = x_115;
-      x_126_phi = x_109;
-      while (true) {
-        int x_141 = 0;
-        int x_144 = 0;
-        int x_125_phi = 0;
-        int x_127_phi = 0;
-        x_121 = x_121_phi;
-        int const x_124 = x_124_phi;
-        x_126 = x_126_phi;
-        if (((x_126 <= x_116) && (x_124 <= x_119))) {
-        } else {
-          break;
-        }
-        int const x_133_save = x_126;
-        int const x_134 = data.arr[x_133_save];
-        int const x_135_save = x_124;
-        int const x_136 = data.arr[x_135_save];
-        int const x_122 = as_type<int>(as_type<int>((as_type<uint>(x_121) + as_type<uint>(as_type<int>(1)))));
-        if ((x_134 < x_136)) {
-          x_141 = as_type<int>(as_type<int>((as_type<uint>(x_126) + as_type<uint>(as_type<int>(1)))));
-          int const x_142 = data.arr[x_133_save];
-          temp.arr[x_121] = x_142;
-          x_125_phi = x_124;
-          x_127_phi = x_141;
-        } else {
-          x_144 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-          int const x_145 = data.arr[x_135_save];
-          temp.arr[x_121] = x_145;
-          x_125_phi = x_144;
-          x_127_phi = x_126;
-        }
-        int const x_125 = x_125_phi;
-        int const x_127 = x_127_phi;
-        {
-          x_121_phi = x_122;
-          x_124_phi = x_125;
-          x_126_phi = x_127;
-        }
-      }
-      x_148_phi = x_121;
-      x_151_phi = x_126;
-      while (true) {
-        int x_149 = 0;
-        int x_152 = 0;
-        int const x_148 = x_148_phi;
-        int const x_151 = x_151_phi;
-        if (((x_151 < 10) && (x_151 <= x_116))) {
-        } else {
-          break;
-        }
-        {
-          x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
-          x_152 = as_type<int>((as_type<uint>(x_151) + as_type<uint>(1)));
-          int const x_158 = data.arr[x_151];
-          temp.arr[x_148] = x_158;
-          x_148_phi = x_149;
-          x_151_phi = x_152;
-        }
-      }
-      x_161_phi = x_109;
-      while (true) {
-        int x_162 = 0;
-        int const x_161 = x_161_phi;
-        if ((x_161 <= x_119)) {
-        } else {
-          break;
-        }
-        {
-          int const x_167 = temp.arr[x_161];
-          data.arr[x_161] = x_167;
-          x_162 = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
-          x_161_phi = x_162;
-        }
-      }
-      {
-        x_109_phi = x_110;
-      }
-    }
-    {
-      x_103 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_102)));
-      x_102_phi = x_103;
-    }
-  }
-  int x_171 = 0;
-  float x_189 = 0.0f;
-  float x_278 = 0.0f;
-  float x_279_phi = 0.0f;
-  float const x_170 = (*(tint_symbol_3)).y;
-  x_171 = int(x_170);
-  if ((x_171 < 30)) {
-    int const x_177 = data.arr[0];
-    x_180 = (0.5f + (float(x_177) * 0.100000001f));
-    x_280_phi = x_180;
-  } else {
-    float x_198 = 0.0f;
-    float x_277 = 0.0f;
-    float x_278_phi = 0.0f;
-    if ((x_171 < 60)) {
-      int const x_186 = data.arr[1];
-      x_189 = (0.5f + (float(x_186) * 0.100000001f));
-      x_279_phi = x_189;
-    } else {
-      float x_207 = 0.0f;
-      float x_249 = 0.0f;
-      float x_277_phi = 0.0f;
-      if ((x_171 < 90)) {
-        int const x_195 = data.arr[2];
-        x_198 = (0.5f + (float(x_195) * 0.100000001f));
-        x_278_phi = x_198;
-      } else {
-        if ((x_171 < 120)) {
-          int const x_204 = data.arr[3];
-          x_207 = (0.5f + (float(x_204) * 0.100000001f));
-          x_277_phi = x_207;
-        } else {
-          float x_220 = 0.0f;
-          float x_248 = 0.0f;
-          float x_249_phi = 0.0f;
-          float2 x_256_phi = 0.0f;
-          int x_259_phi = 0;
-          if ((x_171 < 150)) {
-            discard_fragment();
-          } else {
-            float x_229 = 0.0f;
-            float x_247 = 0.0f;
-            float x_248_phi = 0.0f;
-            if ((x_171 < 180)) {
-              int const x_217 = data.arr[5];
-              x_220 = (0.5f + (float(x_217) * 0.100000001f));
-              x_249_phi = x_220;
-            } else {
-              float x_238 = 0.0f;
-              float x_246 = 0.0f;
-              float x_247_phi = 0.0f;
-              if ((x_171 < 210)) {
-                int const x_226 = data.arr[6];
-                x_229 = (0.5f + (float(x_226) * 0.100000001f));
-                x_248_phi = x_229;
-              } else {
-                if ((x_171 < 240)) {
-                  int const x_235 = data.arr[7];
-                  x_238 = (0.5f + (float(x_235) * 0.100000001f));
-                  x_247_phi = x_238;
-                } else {
-                  if ((x_171 < 270)) {
-                  } else {
-                    discard_fragment();
-                  }
-                  int const x_243 = data.arr[8];
-                  x_246 = (0.5f + (float(x_243) * 0.100000001f));
-                  x_247_phi = x_246;
-                }
-                x_247 = x_247_phi;
-                x_248_phi = x_247;
-              }
-              x_248 = x_248_phi;
-              x_249_phi = x_248;
-            }
-            x_249 = x_249_phi;
-            float const x_251 = x_8.injectionSwitch.y;
-            bool const x_252 = (x_62 > x_251);
-            if (x_252) {
-              *(tint_symbol_4) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-            }
-            x_256_phi = float2(1.0f, 1.0f);
-            x_259_phi = 0;
-            while (true) {
-              float2 x_272 = 0.0f;
-              int x_260 = 0;
-              float2 x_273_phi = 0.0f;
-              float2 const x_256 = x_256_phi;
-              int const x_259 = x_259_phi;
-              if ((x_259 <= 32)) {
-              } else {
-                break;
-              }
-              x_273_phi = x_256;
-              if ((x_256.x < 0.0f)) {
-                if (x_252) {
-                  discard_fragment();
-                }
-                x_272 = x_256;
-                x_272.y = (x_256.y + 1.0f);
-                x_273_phi = x_272;
-              }
-              float2 const x_273 = x_273_phi;
-              float2 x_257_1 = x_273;
-              x_257_1.x = (x_273.x + x_273.y);
-              float2 const x_257 = x_257_1;
-              {
-                x_260 = as_type<int>((as_type<uint>(x_259) + as_type<uint>(1)));
-                x_256_phi = x_257;
-                x_259_phi = x_260;
-              }
-            }
-          }
-          x_277_phi = x_249;
-        }
-        x_277 = x_277_phi;
-        x_278_phi = x_277;
-      }
-      x_278 = x_278_phi;
-      x_279_phi = x_278;
-    }
-    x_279 = x_279_phi;
-    x_280_phi = x_279;
-  }
-  float const x_280 = x_280_phi;
-  *(tint_symbol_4) = float4(x_280, x_280, x_280, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.spvasm
deleted file mode 100644
index 0c9763f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,747 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 432
-; Schema: 0
-               OpCapability Shader
-        %132 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %temp "temp"
-               OpName %data "data"
-               OpName %x_180 "x_180"
-               OpName %x_279 "x_279"
-               OpName %x_65_phi "x_65_phi"
-               OpName %x_93_phi "x_93_phi"
-               OpName %x_102_phi "x_102_phi"
-               OpName %x_280_phi "x_280_phi"
-               OpName %x_94 "x_94"
-               OpName %x_103 "x_103"
-               OpName %x_109_phi "x_109_phi"
-               OpName %x_121 "x_121"
-               OpName %x_126 "x_126"
-               OpName %x_121_phi "x_121_phi"
-               OpName %x_124_phi "x_124_phi"
-               OpName %x_126_phi "x_126_phi"
-               OpName %x_148_phi "x_148_phi"
-               OpName %x_151_phi "x_151_phi"
-               OpName %x_161_phi "x_161_phi"
-               OpName %x_141 "x_141"
-               OpName %x_144 "x_144"
-               OpName %x_125_phi "x_125_phi"
-               OpName %x_127_phi "x_127_phi"
-               OpName %x_149 "x_149"
-               OpName %x_152 "x_152"
-               OpName %x_162 "x_162"
-               OpName %x_171 "x_171"
-               OpName %x_189 "x_189"
-               OpName %x_278 "x_278"
-               OpName %x_279_phi "x_279_phi"
-               OpName %x_198 "x_198"
-               OpName %x_277 "x_277"
-               OpName %x_278_phi "x_278_phi"
-               OpName %x_207 "x_207"
-               OpName %x_249 "x_249"
-               OpName %x_277_phi "x_277_phi"
-               OpName %x_220 "x_220"
-               OpName %x_248 "x_248"
-               OpName %x_249_phi "x_249_phi"
-               OpName %x_256_phi "x_256_phi"
-               OpName %x_259_phi "x_259_phi"
-               OpName %x_229 "x_229"
-               OpName %x_247 "x_247"
-               OpName %x_248_phi "x_248_phi"
-               OpName %x_238 "x_238"
-               OpName %x_246 "x_246"
-               OpName %x_247_phi "x_247_phi"
-               OpName %x_272 "x_272"
-               OpName %x_260 "x_260"
-               OpName %x_273_phi "x_273_phi"
-               OpName %x_257_1 "x_257_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %25 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-%_ptr_Function_int = OpTypePointer Function %int
-         %33 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-%float_0_100000001 = OpConstant %float 0.100000001
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %297 = OpConstantNull %v2float
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %float_1 = OpConstant %float 1
-        %374 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %375 = OpConstantComposite %v2float %float_1 %float_1
-     %int_32 = OpConstant %int 32
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-        %419 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-       %temp = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-       %data = OpVariable %_ptr_Function__arr_int_uint_10 Function %25
-      %x_180 = OpVariable %_ptr_Function_float Function %29
-      %x_279 = OpVariable %_ptr_Function_float Function %29
-   %x_65_phi = OpVariable %_ptr_Function_int Function %33
-   %x_93_phi = OpVariable %_ptr_Function_int Function %33
-  %x_102_phi = OpVariable %_ptr_Function_int Function %33
-  %x_280_phi = OpVariable %_ptr_Function_float Function %29
-       %x_94 = OpVariable %_ptr_Function_int Function %33
-      %x_103 = OpVariable %_ptr_Function_int Function %33
-  %x_109_phi = OpVariable %_ptr_Function_int Function %33
-      %x_121 = OpVariable %_ptr_Function_int Function %33
-      %x_126 = OpVariable %_ptr_Function_int Function %33
-  %x_121_phi = OpVariable %_ptr_Function_int Function %33
-  %x_124_phi = OpVariable %_ptr_Function_int Function %33
-  %x_126_phi = OpVariable %_ptr_Function_int Function %33
-  %x_148_phi = OpVariable %_ptr_Function_int Function %33
-  %x_151_phi = OpVariable %_ptr_Function_int Function %33
-  %x_161_phi = OpVariable %_ptr_Function_int Function %33
-      %x_141 = OpVariable %_ptr_Function_int Function %33
-      %x_144 = OpVariable %_ptr_Function_int Function %33
-  %x_125_phi = OpVariable %_ptr_Function_int Function %33
-  %x_127_phi = OpVariable %_ptr_Function_int Function %33
-      %x_149 = OpVariable %_ptr_Function_int Function %33
-      %x_152 = OpVariable %_ptr_Function_int Function %33
-      %x_162 = OpVariable %_ptr_Function_int Function %33
-      %x_171 = OpVariable %_ptr_Function_int Function %33
-      %x_189 = OpVariable %_ptr_Function_float Function %29
-      %x_278 = OpVariable %_ptr_Function_float Function %29
-  %x_279_phi = OpVariable %_ptr_Function_float Function %29
-      %x_198 = OpVariable %_ptr_Function_float Function %29
-      %x_277 = OpVariable %_ptr_Function_float Function %29
-  %x_278_phi = OpVariable %_ptr_Function_float Function %29
-      %x_207 = OpVariable %_ptr_Function_float Function %29
-      %x_249 = OpVariable %_ptr_Function_float Function %29
-  %x_277_phi = OpVariable %_ptr_Function_float Function %29
-      %x_220 = OpVariable %_ptr_Function_float Function %29
-      %x_248 = OpVariable %_ptr_Function_float Function %29
-  %x_249_phi = OpVariable %_ptr_Function_float Function %29
-  %x_256_phi = OpVariable %_ptr_Function_v2float Function %297
-  %x_259_phi = OpVariable %_ptr_Function_int Function %33
-      %x_229 = OpVariable %_ptr_Function_float Function %29
-      %x_247 = OpVariable %_ptr_Function_float Function %29
-  %x_248_phi = OpVariable %_ptr_Function_float Function %29
-      %x_238 = OpVariable %_ptr_Function_float Function %29
-      %x_246 = OpVariable %_ptr_Function_float Function %29
-  %x_247_phi = OpVariable %_ptr_Function_float Function %29
-      %x_272 = OpVariable %_ptr_Function_v2float Function %297
-      %x_260 = OpVariable %_ptr_Function_int Function %33
-  %x_273_phi = OpVariable %_ptr_Function_v2float Function %297
-    %x_257_1 = OpVariable %_ptr_Function_v2float Function %297
-         %39 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %40 = OpLoad %float %39
-         %41 = OpConvertFToS %int %40
-               OpStore %x_65_phi %41
-               OpBranch %42
-         %42 = OpLabel
-               OpLoopMerge %43 %44 None
-               OpBranch %45
-         %45 = OpLabel
-         %46 = OpLoad %int %x_65_phi
-               OpSelectionMerge %47 None
-               OpSwitch %46 %48 9 %49 8 %50 7 %51 6 %52 5 %53 4 %54 3 %55 2 %56 1 %57 0 %58
-         %49 = OpLabel
-         %59 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %59 %int_n5
-               OpBranch %47
-         %50 = OpLabel
-         %61 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %61 %int_n4
-               OpBranch %47
-         %51 = OpLabel
-         %63 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %63 %int_n3
-               OpBranch %47
-         %52 = OpLabel
-         %65 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %65 %int_n2
-               OpBranch %47
-         %53 = OpLabel
-         %67 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %67 %int_n1
-               OpBranch %47
-         %54 = OpLabel
-         %69 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %69 %int_0
-               OpBranch %47
-         %55 = OpLabel
-         %71 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %71 %int_1
-               OpBranch %47
-         %56 = OpLabel
-         %73 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %73 %int_2
-               OpBranch %47
-         %57 = OpLabel
-         %75 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %75 %int_3
-               OpBranch %47
-         %58 = OpLabel
-         %77 = OpAccessChain %_ptr_Function_int %data %46
-               OpStore %77 %int_4
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-         %79 = OpIAdd %int %46 %int_1
-               OpBranch %44
-         %44 = OpLabel
-               OpStore %x_65_phi %79
-         %81 = OpSLessThan %bool %79 %int_10
-               OpBranchConditional %81 %42 %43
-         %43 = OpLabel
-               OpStore %x_93_phi %int_0
-               OpBranch %83
-         %83 = OpLabel
-               OpLoopMerge %84 %85 None
-               OpBranch %86
-         %86 = OpLabel
-         %88 = OpLoad %int %x_93_phi
-         %89 = OpSLessThan %bool %88 %int_10
-               OpSelectionMerge %90 None
-               OpBranchConditional %89 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %84
-         %90 = OpLabel
-               OpBranch %85
-         %85 = OpLabel
-         %93 = OpAccessChain %_ptr_Function_int %data %88
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Function_int %temp %88
-               OpStore %95 %94
-         %96 = OpIAdd %int %88 %int_1
-               OpStore %x_94 %96
-         %97 = OpLoad %int %x_94
-               OpStore %x_93_phi %97
-               OpBranch %83
-         %84 = OpLabel
-               OpStore %x_102_phi %int_1
-               OpBranch %98
-         %98 = OpLabel
-               OpLoopMerge %99 %100 None
-               OpBranch %101
-        %101 = OpLabel
-        %104 = OpLoad %int %x_102_phi
-        %106 = OpSLessThanEqual %bool %104 %int_9
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %109
-        %108 = OpLabel
-               OpBranch %107
-        %109 = OpLabel
-               OpBranch %99
-        %107 = OpLabel
-               OpStore %x_109_phi %int_0
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %122 = OpLoad %int %x_109_phi
-        %123 = OpSLessThan %bool %122 %int_9
-               OpSelectionMerge %124 None
-               OpBranchConditional %123 %125 %126
-        %125 = OpLabel
-               OpBranch %124
-        %126 = OpLabel
-               OpBranch %111
-        %124 = OpLabel
-        %127 = OpIAdd %int %122 %104
-        %128 = OpISub %int %127 %int_1
-        %129 = OpIMul %int %int_2 %104
-        %130 = OpIAdd %int %122 %129
-        %133 = OpISub %int %130 %int_1
-        %131 = OpExtInst %int %132 SMin %133 %int_9
-               OpStore %x_121_phi %122
-               OpStore %x_124_phi %127
-               OpStore %x_126_phi %122
-               OpBranch %134
-        %134 = OpLabel
-               OpLoopMerge %135 %136 None
-               OpBranch %137
-        %137 = OpLabel
-        %142 = OpLoad %int %x_121_phi
-               OpStore %x_121 %142
-        %143 = OpLoad %int %x_124_phi
-        %144 = OpLoad %int %x_126_phi
-               OpStore %x_126 %144
-        %145 = OpLoad %int %x_126
-        %146 = OpSLessThanEqual %bool %145 %128
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-        %149 = OpSLessThanEqual %bool %143 %131
-               OpBranch %147
-        %147 = OpLabel
-        %150 = OpPhi %bool %146 %137 %149 %148
-               OpSelectionMerge %151 None
-               OpBranchConditional %150 %152 %153
-        %152 = OpLabel
-               OpBranch %151
-        %153 = OpLabel
-               OpBranch %135
-        %151 = OpLabel
-        %154 = OpLoad %int %x_126
-        %155 = OpAccessChain %_ptr_Function_int %data %154
-        %156 = OpLoad %int %155
-        %157 = OpAccessChain %_ptr_Function_int %data %143
-        %158 = OpLoad %int %157
-        %160 = OpLoad %int %x_121
-        %161 = OpCopyObject %int %int_1
-        %162 = OpIAdd %int %160 %161
-        %159 = OpCopyObject %int %162
-        %163 = OpSLessThan %bool %156 %158
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %166
-        %165 = OpLabel
-        %168 = OpLoad %int %x_126
-        %169 = OpCopyObject %int %int_1
-        %170 = OpIAdd %int %168 %169
-        %167 = OpCopyObject %int %170
-               OpStore %x_141 %167
-        %171 = OpAccessChain %_ptr_Function_int %data %154
-        %172 = OpLoad %int %171
-        %173 = OpLoad %int %x_121
-        %174 = OpAccessChain %_ptr_Function_int %temp %173
-               OpStore %174 %172
-               OpStore %x_125_phi %143
-        %175 = OpLoad %int %x_141
-               OpStore %x_127_phi %175
-               OpBranch %164
-        %166 = OpLabel
-        %176 = OpIAdd %int %143 %int_1
-               OpStore %x_144 %176
-        %177 = OpAccessChain %_ptr_Function_int %data %143
-        %178 = OpLoad %int %177
-        %179 = OpLoad %int %x_121
-        %180 = OpAccessChain %_ptr_Function_int %temp %179
-               OpStore %180 %178
-        %181 = OpLoad %int %x_144
-               OpStore %x_125_phi %181
-        %182 = OpLoad %int %x_126
-               OpStore %x_127_phi %182
-               OpBranch %164
-        %164 = OpLabel
-        %183 = OpLoad %int %x_125_phi
-        %184 = OpLoad %int %x_127_phi
-               OpBranch %136
-        %136 = OpLabel
-               OpStore %x_121_phi %159
-               OpStore %x_124_phi %183
-               OpStore %x_126_phi %184
-               OpBranch %134
-        %135 = OpLabel
-        %185 = OpLoad %int %x_121
-               OpStore %x_148_phi %185
-        %186 = OpLoad %int %x_126
-               OpStore %x_151_phi %186
-               OpBranch %187
-        %187 = OpLabel
-               OpLoopMerge %188 %189 None
-               OpBranch %190
-        %190 = OpLabel
-        %193 = OpLoad %int %x_148_phi
-        %194 = OpLoad %int %x_151_phi
-        %195 = OpSLessThan %bool %194 %int_10
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %196
-        %197 = OpLabel
-        %198 = OpSLessThanEqual %bool %194 %128
-               OpBranch %196
-        %196 = OpLabel
-        %199 = OpPhi %bool %195 %190 %198 %197
-               OpSelectionMerge %200 None
-               OpBranchConditional %199 %201 %202
-        %201 = OpLabel
-               OpBranch %200
-        %202 = OpLabel
-               OpBranch %188
-        %200 = OpLabel
-               OpBranch %189
-        %189 = OpLabel
-        %203 = OpIAdd %int %193 %int_1
-               OpStore %x_149 %203
-        %204 = OpIAdd %int %194 %int_1
-               OpStore %x_152 %204
-        %205 = OpAccessChain %_ptr_Function_int %data %194
-        %206 = OpLoad %int %205
-        %207 = OpAccessChain %_ptr_Function_int %temp %193
-               OpStore %207 %206
-        %208 = OpLoad %int %x_149
-               OpStore %x_148_phi %208
-        %209 = OpLoad %int %x_152
-               OpStore %x_151_phi %209
-               OpBranch %187
-        %188 = OpLabel
-               OpStore %x_161_phi %122
-               OpBranch %210
-        %210 = OpLabel
-               OpLoopMerge %211 %212 None
-               OpBranch %213
-        %213 = OpLabel
-        %215 = OpLoad %int %x_161_phi
-        %216 = OpSLessThanEqual %bool %215 %131
-               OpSelectionMerge %217 None
-               OpBranchConditional %216 %218 %219
-        %218 = OpLabel
-               OpBranch %217
-        %219 = OpLabel
-               OpBranch %211
-        %217 = OpLabel
-               OpBranch %212
-        %212 = OpLabel
-        %220 = OpAccessChain %_ptr_Function_int %temp %215
-        %221 = OpLoad %int %220
-        %222 = OpAccessChain %_ptr_Function_int %data %215
-               OpStore %222 %221
-        %223 = OpIAdd %int %215 %int_1
-               OpStore %x_162 %223
-        %224 = OpLoad %int %x_162
-               OpStore %x_161_phi %224
-               OpBranch %210
-        %211 = OpLabel
-               OpBranch %112
-        %112 = OpLabel
-               OpStore %x_109_phi %130
-               OpBranch %110
-        %111 = OpLabel
-               OpBranch %100
-        %100 = OpLabel
-        %225 = OpIMul %int %int_2 %104
-               OpStore %x_103 %225
-        %226 = OpLoad %int %x_103
-               OpStore %x_102_phi %226
-               OpBranch %98
-         %99 = OpLabel
-        %233 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %234 = OpLoad %float %233
-        %235 = OpConvertFToS %int %234
-               OpStore %x_171 %235
-        %236 = OpLoad %int %x_171
-        %238 = OpSLessThan %bool %236 %int_30
-               OpSelectionMerge %239 None
-               OpBranchConditional %238 %240 %241
-        %240 = OpLabel
-        %242 = OpAccessChain %_ptr_Function_int %data %int_0
-        %243 = OpLoad %int %242
-        %245 = OpConvertSToF %float %243
-        %247 = OpFMul %float %245 %float_0_100000001
-        %248 = OpFAdd %float %float_0_5 %247
-               OpStore %x_180 %248
-        %249 = OpLoad %float %x_180
-               OpStore %x_280_phi %249
-               OpBranch %239
-        %241 = OpLabel
-        %253 = OpLoad %int %x_171
-        %255 = OpSLessThan %bool %253 %int_60
-               OpSelectionMerge %256 None
-               OpBranchConditional %255 %257 %258
-        %257 = OpLabel
-        %259 = OpAccessChain %_ptr_Function_int %data %int_1
-        %260 = OpLoad %int %259
-        %261 = OpConvertSToF %float %260
-        %262 = OpFMul %float %261 %float_0_100000001
-        %263 = OpFAdd %float %float_0_5 %262
-               OpStore %x_189 %263
-        %264 = OpLoad %float %x_189
-               OpStore %x_279_phi %264
-               OpBranch %256
-        %258 = OpLabel
-        %268 = OpLoad %int %x_171
-        %270 = OpSLessThan %bool %268 %int_90
-               OpSelectionMerge %271 None
-               OpBranchConditional %270 %272 %273
-        %272 = OpLabel
-        %274 = OpAccessChain %_ptr_Function_int %data %int_2
-        %275 = OpLoad %int %274
-        %276 = OpConvertSToF %float %275
-        %277 = OpFMul %float %276 %float_0_100000001
-        %278 = OpFAdd %float %float_0_5 %277
-               OpStore %x_198 %278
-        %279 = OpLoad %float %x_198
-               OpStore %x_278_phi %279
-               OpBranch %271
-        %273 = OpLabel
-        %280 = OpLoad %int %x_171
-        %282 = OpSLessThan %bool %280 %int_120
-               OpSelectionMerge %283 None
-               OpBranchConditional %282 %284 %285
-        %284 = OpLabel
-        %286 = OpAccessChain %_ptr_Function_int %data %int_3
-        %287 = OpLoad %int %286
-        %288 = OpConvertSToF %float %287
-        %289 = OpFMul %float %288 %float_0_100000001
-        %290 = OpFAdd %float %float_0_5 %289
-               OpStore %x_207 %290
-        %291 = OpLoad %float %x_207
-               OpStore %x_277_phi %291
-               OpBranch %283
-        %285 = OpLabel
-        %299 = OpLoad %int %x_171
-        %301 = OpSLessThan %bool %299 %int_150
-               OpSelectionMerge %302 None
-               OpBranchConditional %301 %303 %304
-        %303 = OpLabel
-               OpKill
-        %304 = OpLabel
-        %308 = OpLoad %int %x_171
-        %310 = OpSLessThan %bool %308 %int_180
-               OpSelectionMerge %311 None
-               OpBranchConditional %310 %312 %313
-        %312 = OpLabel
-        %315 = OpAccessChain %_ptr_Function_int %data %int_5
-        %316 = OpLoad %int %315
-        %317 = OpConvertSToF %float %316
-        %318 = OpFMul %float %317 %float_0_100000001
-        %319 = OpFAdd %float %float_0_5 %318
-               OpStore %x_220 %319
-        %320 = OpLoad %float %x_220
-               OpStore %x_249_phi %320
-               OpBranch %311
-        %313 = OpLabel
-        %324 = OpLoad %int %x_171
-        %326 = OpSLessThan %bool %324 %int_210
-               OpSelectionMerge %327 None
-               OpBranchConditional %326 %328 %329
-        %328 = OpLabel
-        %331 = OpAccessChain %_ptr_Function_int %data %int_6
-        %332 = OpLoad %int %331
-        %333 = OpConvertSToF %float %332
-        %334 = OpFMul %float %333 %float_0_100000001
-        %335 = OpFAdd %float %float_0_5 %334
-               OpStore %x_229 %335
-        %336 = OpLoad %float %x_229
-               OpStore %x_248_phi %336
-               OpBranch %327
-        %329 = OpLabel
-        %337 = OpLoad %int %x_171
-        %339 = OpSLessThan %bool %337 %int_240
-               OpSelectionMerge %340 None
-               OpBranchConditional %339 %341 %342
-        %341 = OpLabel
-        %344 = OpAccessChain %_ptr_Function_int %data %int_7
-        %345 = OpLoad %int %344
-        %346 = OpConvertSToF %float %345
-        %347 = OpFMul %float %346 %float_0_100000001
-        %348 = OpFAdd %float %float_0_5 %347
-               OpStore %x_238 %348
-        %349 = OpLoad %float %x_238
-               OpStore %x_247_phi %349
-               OpBranch %340
-        %342 = OpLabel
-        %350 = OpLoad %int %x_171
-        %352 = OpSLessThan %bool %350 %int_270
-               OpSelectionMerge %353 None
-               OpBranchConditional %352 %354 %355
-        %354 = OpLabel
-               OpBranch %353
-        %355 = OpLabel
-               OpKill
-        %353 = OpLabel
-        %357 = OpAccessChain %_ptr_Function_int %data %int_8
-        %358 = OpLoad %int %357
-        %359 = OpConvertSToF %float %358
-        %360 = OpFMul %float %359 %float_0_100000001
-        %361 = OpFAdd %float %float_0_5 %360
-               OpStore %x_246 %361
-        %362 = OpLoad %float %x_246
-               OpStore %x_247_phi %362
-               OpBranch %340
-        %340 = OpLabel
-        %363 = OpLoad %float %x_247_phi
-               OpStore %x_247 %363
-        %364 = OpLoad %float %x_247
-               OpStore %x_248_phi %364
-               OpBranch %327
-        %327 = OpLabel
-        %365 = OpLoad %float %x_248_phi
-               OpStore %x_248 %365
-        %366 = OpLoad %float %x_248
-               OpStore %x_249_phi %366
-               OpBranch %311
-        %311 = OpLabel
-        %367 = OpLoad %float %x_249_phi
-               OpStore %x_249 %367
-        %368 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %369 = OpLoad %float %368
-        %370 = OpFOrdGreaterThan %bool %40 %369
-               OpSelectionMerge %371 None
-               OpBranchConditional %370 %372 %371
-        %372 = OpLabel
-               OpStore %x_GLF_color %374
-               OpBranch %371
-        %371 = OpLabel
-               OpStore %x_256_phi %375
-               OpStore %x_259_phi %int_0
-               OpBranch %376
-        %376 = OpLabel
-               OpLoopMerge %377 %378 None
-               OpBranch %379
-        %379 = OpLabel
-        %383 = OpLoad %v2float %x_256_phi
-        %384 = OpLoad %int %x_259_phi
-        %386 = OpSLessThanEqual %bool %384 %int_32
-               OpSelectionMerge %387 None
-               OpBranchConditional %386 %388 %389
-        %388 = OpLabel
-               OpBranch %387
-        %389 = OpLabel
-               OpBranch %377
-        %387 = OpLabel
-               OpStore %x_273_phi %383
-        %390 = OpCompositeExtract %float %383 0
-        %392 = OpFOrdLessThan %bool %390 %float_0
-               OpSelectionMerge %393 None
-               OpBranchConditional %392 %394 %393
-        %394 = OpLabel
-               OpSelectionMerge %395 None
-               OpBranchConditional %370 %396 %395
-        %396 = OpLabel
-               OpKill
-        %395 = OpLabel
-               OpStore %x_272 %383
-        %397 = OpAccessChain %_ptr_Function_float %x_272 %uint_1
-        %398 = OpCompositeExtract %float %383 1
-        %399 = OpFAdd %float %398 %float_1
-               OpStore %397 %399
-        %400 = OpLoad %v2float %x_272
-               OpStore %x_273_phi %400
-               OpBranch %393
-        %393 = OpLabel
-        %401 = OpLoad %v2float %x_273_phi
-               OpStore %x_257_1 %401
-        %403 = OpAccessChain %_ptr_Function_float %x_257_1 %uint_0
-        %404 = OpCompositeExtract %float %401 0
-        %405 = OpCompositeExtract %float %401 1
-        %406 = OpFAdd %float %404 %405
-               OpStore %403 %406
-        %407 = OpLoad %v2float %x_257_1
-               OpBranch %378
-        %378 = OpLabel
-        %408 = OpIAdd %int %384 %int_1
-               OpStore %x_260 %408
-               OpStore %x_256_phi %407
-        %409 = OpLoad %int %x_260
-               OpStore %x_259_phi %409
-               OpBranch %376
-        %377 = OpLabel
-               OpBranch %302
-        %302 = OpLabel
-        %410 = OpLoad %float %x_249
-               OpStore %x_277_phi %410
-               OpBranch %283
-        %283 = OpLabel
-        %411 = OpLoad %float %x_277_phi
-               OpStore %x_277 %411
-        %412 = OpLoad %float %x_277
-               OpStore %x_278_phi %412
-               OpBranch %271
-        %271 = OpLabel
-        %413 = OpLoad %float %x_278_phi
-               OpStore %x_278 %413
-        %414 = OpLoad %float %x_278
-               OpStore %x_279_phi %414
-               OpBranch %256
-        %256 = OpLabel
-        %415 = OpLoad %float %x_279_phi
-               OpStore %x_279 %415
-        %416 = OpLoad %float %x_279
-               OpStore %x_280_phi %416
-               OpBranch %239
-        %239 = OpLabel
-        %417 = OpLoad %float %x_280_phi
-        %418 = OpCompositeConstruct %v4float %417 %417 %417 %float_1
-               OpStore %x_GLF_color %418
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %419
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %423 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %424 = OpFunctionCall %void %main_1
-        %425 = OpLoad %v4float %x_GLF_color
-        %426 = OpCompositeConstruct %main_out %425
-               OpReturnValue %426
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %428 = OpLabel
-        %430 = OpLoad %v4float %gl_FragCoord_param_1
-        %429 = OpFunctionCall %main_out %main_inner %430
-        %431 = OpCompositeExtract %v4float %429 0
-               OpStore %x_GLF_color_1_1 %431
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.wgsl
deleted file mode 100644
index eb23a41..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-for-always-false-if-discard/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,344 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var temp : array<i32, 10>;
-  var data : array<i32, 10>;
-  var x_180 : f32;
-  var x_279 : f32;
-  var x_65_phi : i32;
-  var x_93_phi : i32;
-  var x_102_phi : i32;
-  var x_280_phi : f32;
-  let x_62 : f32 = x_8.injectionSwitch.x;
-  let x_63 : i32 = i32(x_62);
-  x_65_phi = x_63;
-  loop {
-    let x_65 : i32 = x_65_phi;
-    switch(x_65) {
-      case 9: {
-        data[x_65] = -5;
-      }
-      case 8: {
-        data[x_65] = -4;
-      }
-      case 7: {
-        data[x_65] = -3;
-      }
-      case 6: {
-        data[x_65] = -2;
-      }
-      case 5: {
-        data[x_65] = -1;
-      }
-      case 4: {
-        data[x_65] = 0;
-      }
-      case 3: {
-        data[x_65] = 1;
-      }
-      case 2: {
-        data[x_65] = 2;
-      }
-      case 1: {
-        data[x_65] = 3;
-      }
-      case 0: {
-        data[x_65] = 4;
-      }
-      default: {
-      }
-    }
-    let x_66 : i32 = (x_65 + 1);
-
-    continuing {
-      x_65_phi = x_66;
-      if ((x_66 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  x_93_phi = 0;
-  loop {
-    var x_94 : i32;
-    let x_93 : i32 = x_93_phi;
-    if ((x_93 < 10)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_99 : i32 = data[x_93];
-      temp[x_93] = x_99;
-      x_94 = (x_93 + 1);
-      x_93_phi = x_94;
-    }
-  }
-  x_102_phi = 1;
-  loop {
-    var x_103 : i32;
-    var x_109_phi : i32;
-    let x_102 : i32 = x_102_phi;
-    if ((x_102 <= 9)) {
-    } else {
-      break;
-    }
-    x_109_phi = 0;
-    loop {
-      var x_121 : i32;
-      var x_126 : i32;
-      var x_121_phi : i32;
-      var x_124_phi : i32;
-      var x_126_phi : i32;
-      var x_148_phi : i32;
-      var x_151_phi : i32;
-      var x_161_phi : i32;
-      let x_109 : i32 = x_109_phi;
-      if ((x_109 < 9)) {
-      } else {
-        break;
-      }
-      let x_115 : i32 = (x_109 + x_102);
-      let x_116 : i32 = (x_115 - 1);
-      let x_110 : i32 = (x_109 + (2 * x_102));
-      let x_119 : i32 = min((x_110 - 1), 9);
-      x_121_phi = x_109;
-      x_124_phi = x_115;
-      x_126_phi = x_109;
-      loop {
-        var x_141 : i32;
-        var x_144 : i32;
-        var x_125_phi : i32;
-        var x_127_phi : i32;
-        x_121 = x_121_phi;
-        let x_124 : i32 = x_124_phi;
-        x_126 = x_126_phi;
-        if (((x_126 <= x_116) && (x_124 <= x_119))) {
-        } else {
-          break;
-        }
-        let x_133 : ptr<function, i32> = &(data[x_126]);
-        let x_134 : i32 = *(x_133);
-        let x_135 : ptr<function, i32> = &(data[x_124]);
-        let x_136 : i32 = *(x_135);
-        let x_122 : i32 = bitcast<i32>((x_121 + bitcast<i32>(1)));
-        if ((x_134 < x_136)) {
-          x_141 = bitcast<i32>((x_126 + bitcast<i32>(1)));
-          let x_142 : i32 = *(x_133);
-          temp[x_121] = x_142;
-          x_125_phi = x_124;
-          x_127_phi = x_141;
-        } else {
-          x_144 = (x_124 + 1);
-          let x_145 : i32 = *(x_135);
-          temp[x_121] = x_145;
-          x_125_phi = x_144;
-          x_127_phi = x_126;
-        }
-        let x_125 : i32 = x_125_phi;
-        let x_127 : i32 = x_127_phi;
-
-        continuing {
-          x_121_phi = x_122;
-          x_124_phi = x_125;
-          x_126_phi = x_127;
-        }
-      }
-      x_148_phi = x_121;
-      x_151_phi = x_126;
-      loop {
-        var x_149 : i32;
-        var x_152 : i32;
-        let x_148 : i32 = x_148_phi;
-        let x_151 : i32 = x_151_phi;
-        if (((x_151 < 10) && (x_151 <= x_116))) {
-        } else {
-          break;
-        }
-
-        continuing {
-          x_149 = (x_148 + 1);
-          x_152 = (x_151 + 1);
-          let x_158 : i32 = data[x_151];
-          temp[x_148] = x_158;
-          x_148_phi = x_149;
-          x_151_phi = x_152;
-        }
-      }
-      x_161_phi = x_109;
-      loop {
-        var x_162 : i32;
-        let x_161 : i32 = x_161_phi;
-        if ((x_161 <= x_119)) {
-        } else {
-          break;
-        }
-
-        continuing {
-          let x_167 : i32 = temp[x_161];
-          data[x_161] = x_167;
-          x_162 = (x_161 + 1);
-          x_161_phi = x_162;
-        }
-      }
-
-      continuing {
-        x_109_phi = x_110;
-      }
-    }
-
-    continuing {
-      x_103 = (2 * x_102);
-      x_102_phi = x_103;
-    }
-  }
-  var x_171 : i32;
-  var x_189 : f32;
-  var x_278 : f32;
-  var x_279_phi : f32;
-  let x_170 : f32 = gl_FragCoord.y;
-  x_171 = i32(x_170);
-  if ((x_171 < 30)) {
-    let x_177 : i32 = data[0];
-    x_180 = (0.5 + (f32(x_177) * 0.100000001));
-    x_280_phi = x_180;
-  } else {
-    var x_198 : f32;
-    var x_277 : f32;
-    var x_278_phi : f32;
-    if ((x_171 < 60)) {
-      let x_186 : i32 = data[1];
-      x_189 = (0.5 + (f32(x_186) * 0.100000001));
-      x_279_phi = x_189;
-    } else {
-      var x_207 : f32;
-      var x_249 : f32;
-      var x_277_phi : f32;
-      if ((x_171 < 90)) {
-        let x_195 : i32 = data[2];
-        x_198 = (0.5 + (f32(x_195) * 0.100000001));
-        x_278_phi = x_198;
-      } else {
-        if ((x_171 < 120)) {
-          let x_204 : i32 = data[3];
-          x_207 = (0.5 + (f32(x_204) * 0.100000001));
-          x_277_phi = x_207;
-        } else {
-          var x_220 : f32;
-          var x_248 : f32;
-          var x_249_phi : f32;
-          var x_256_phi : vec2<f32>;
-          var x_259_phi : i32;
-          if ((x_171 < 150)) {
-            discard;
-          } else {
-            var x_229 : f32;
-            var x_247 : f32;
-            var x_248_phi : f32;
-            if ((x_171 < 180)) {
-              let x_217 : i32 = data[5];
-              x_220 = (0.5 + (f32(x_217) * 0.100000001));
-              x_249_phi = x_220;
-            } else {
-              var x_238 : f32;
-              var x_246 : f32;
-              var x_247_phi : f32;
-              if ((x_171 < 210)) {
-                let x_226 : i32 = data[6];
-                x_229 = (0.5 + (f32(x_226) * 0.100000001));
-                x_248_phi = x_229;
-              } else {
-                if ((x_171 < 240)) {
-                  let x_235 : i32 = data[7];
-                  x_238 = (0.5 + (f32(x_235) * 0.100000001));
-                  x_247_phi = x_238;
-                } else {
-                  if ((x_171 < 270)) {
-                  } else {
-                    discard;
-                  }
-                  let x_243 : i32 = data[8];
-                  x_246 = (0.5 + (f32(x_243) * 0.100000001));
-                  x_247_phi = x_246;
-                }
-                x_247 = x_247_phi;
-                x_248_phi = x_247;
-              }
-              x_248 = x_248_phi;
-              x_249_phi = x_248;
-            }
-            x_249 = x_249_phi;
-            let x_251 : f32 = x_8.injectionSwitch.y;
-            let x_252 : bool = (x_62 > x_251);
-            if (x_252) {
-              x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-            }
-            x_256_phi = vec2<f32>(1.0, 1.0);
-            x_259_phi = 0;
-            loop {
-              var x_272 : vec2<f32>;
-              var x_260 : i32;
-              var x_273_phi : vec2<f32>;
-              let x_256 : vec2<f32> = x_256_phi;
-              let x_259 : i32 = x_259_phi;
-              if ((x_259 <= 32)) {
-              } else {
-                break;
-              }
-              x_273_phi = x_256;
-              if ((x_256.x < 0.0)) {
-                if (x_252) {
-                  discard;
-                }
-                x_272 = x_256;
-                x_272.y = (x_256.y + 1.0);
-                x_273_phi = x_272;
-              }
-              let x_273 : vec2<f32> = x_273_phi;
-              var x_257_1 : vec2<f32> = x_273;
-              x_257_1.x = (x_273.x + x_273.y);
-              let x_257 : vec2<f32> = x_257_1;
-
-              continuing {
-                x_260 = (x_259 + 1);
-                x_256_phi = x_257;
-                x_259_phi = x_260;
-              }
-            }
-          }
-          x_277_phi = x_249;
-        }
-        x_277 = x_277_phi;
-        x_278_phi = x_277;
-      }
-      x_278 = x_278_phi;
-      x_279_phi = x_278;
-    }
-    x_279 = x_279_phi;
-    x_280_phi = x_279;
-  }
-  let x_280 : f32 = x_280_phi;
-  x_GLF_color = vec4<f32>(x_280, x_280, x_280, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.hlsl
deleted file mode 100644
index 3f27cea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,275 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_262 = from;
-  k = x_262;
-  const int x_263 = from;
-  i = x_263;
-  const int x_264 = mid;
-  j = (x_264 + 1);
-  while (true) {
-    const int x_270 = i;
-    const int x_271 = mid;
-    const int x_273 = j;
-    const int x_274 = to;
-    if (((x_270 <= x_271) & (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    const int x_280 = data[i];
-    const int x_283 = data[j];
-    if ((x_280 < x_283)) {
-      const int x_288 = k;
-      k = (x_288 + 1);
-      const int x_290 = i;
-      i = (x_290 + 1);
-      const int x_293 = data[x_290];
-      temp[x_288] = x_293;
-    } else {
-      const int x_295 = k;
-      k = (x_295 + 1);
-      const int x_297 = j;
-      j = (x_297 + 1);
-      const int x_300 = data[x_297];
-      temp[x_295] = x_300;
-    }
-  }
-  while (true) {
-    const int x_306 = i;
-    const int x_308 = i;
-    const int x_309 = mid;
-    if (((x_306 < 10) & (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    const int x_313 = k;
-    k = (x_313 + 1);
-    const int x_315 = i;
-    i = (x_315 + 1);
-    const int x_318 = data[x_315];
-    temp[x_313] = x_318;
-  }
-  const int x_320 = from;
-  i_1 = x_320;
-  while (true) {
-    const int x_325 = i_1;
-    const int x_326 = to;
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    const int x_329 = i_1;
-    const int x_332 = temp[i_1];
-    data[x_329] = x_332;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  int int_i = 0;
-  const float x_85 = asfloat(x_28[0].x);
-  i_3 = int(x_85);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_134 = j_1;
-      const int x_137 = data[j_1];
-      temp[x_134] = x_137;
-    }
-  }
-  mergeSort_();
-  const float x_143 = gl_FragCoord.y;
-  if ((int(x_143) < 30)) {
-    const int x_150 = data[0];
-    grey = (0.5f + (float(x_150) / 10.0f));
-  } else {
-    const float x_155 = gl_FragCoord.y;
-    if ((int(x_155) < 60)) {
-      const int x_162 = data[1];
-      grey = (0.5f + (float(x_162) / 10.0f));
-    } else {
-      const float x_167 = gl_FragCoord.y;
-      if ((int(x_167) < 90)) {
-        const int x_174 = data[2];
-        grey = (0.5f + (float(x_174) / 10.0f));
-      } else {
-        const float x_179 = gl_FragCoord.y;
-        if ((int(x_179) < 120)) {
-          const int x_186 = data[3];
-          grey = (0.5f + (float(x_186) / 10.0f));
-        } else {
-          const float x_191 = gl_FragCoord.y;
-          if ((int(x_191) < 150)) {
-            int_i = 1;
-            while (true) {
-              const int x_201 = int_i;
-              const float x_203 = asfloat(x_28[0].x);
-              if ((x_201 > int(x_203))) {
-              } else {
-                break;
-              }
-              discard;
-            }
-          } else {
-            const float x_208 = gl_FragCoord.y;
-            if ((int(x_208) < 180)) {
-              const int x_215 = data[5];
-              grey = (0.5f + (float(x_215) / 10.0f));
-            } else {
-              const float x_220 = gl_FragCoord.y;
-              if ((int(x_220) < 210)) {
-                const int x_227 = data[6];
-                grey = (0.5f + (float(x_227) / 10.0f));
-              } else {
-                const float x_232 = gl_FragCoord.y;
-                if ((int(x_232) < 240)) {
-                  const int x_239 = data[7];
-                  grey = (0.5f + (float(x_239) / 10.0f));
-                } else {
-                  const float x_244 = gl_FragCoord.y;
-                  if ((int(x_244) < 270)) {
-                    const int x_251 = data[8];
-                    grey = (0.5f + (float(x_251) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_255 = grey;
-  const float3 x_256 = float3(x_255, x_255, x_255);
-  x_GLF_color = float4(x_256.x, x_256.y, x_256.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.msl
deleted file mode 100644
index c59a7c7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.msl
+++ /dev/null
@@ -1,330 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_262 = *(from);
-  k = x_262;
-  int const x_263 = *(from);
-  i = x_263;
-  int const x_264 = *(mid);
-  j = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-  while (true) {
-    int const x_270 = i;
-    int const x_271 = *(mid);
-    int const x_273 = j;
-    int const x_274 = *(to);
-    if (((x_270 <= x_271) & (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    int const x_278 = i;
-    int const x_280 = (*(tint_symbol_3)).arr[x_278];
-    int const x_281 = j;
-    int const x_283 = (*(tint_symbol_3)).arr[x_281];
-    if ((x_280 < x_283)) {
-      int const x_288 = k;
-      k = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
-      int const x_290 = i;
-      i = as_type<int>((as_type<uint>(x_290) + as_type<uint>(1)));
-      int const x_293 = (*(tint_symbol_3)).arr[x_290];
-      (*(tint_symbol_4)).arr[x_288] = x_293;
-    } else {
-      int const x_295 = k;
-      k = as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
-      int const x_297 = j;
-      j = as_type<int>((as_type<uint>(x_297) + as_type<uint>(1)));
-      int const x_300 = (*(tint_symbol_3)).arr[x_297];
-      (*(tint_symbol_4)).arr[x_295] = x_300;
-    }
-  }
-  while (true) {
-    int const x_306 = i;
-    int const x_308 = i;
-    int const x_309 = *(mid);
-    if (((x_306 < 10) & (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    int const x_313 = k;
-    k = as_type<int>((as_type<uint>(x_313) + as_type<uint>(1)));
-    int const x_315 = i;
-    i = as_type<int>((as_type<uint>(x_315) + as_type<uint>(1)));
-    int const x_318 = (*(tint_symbol_3)).arr[x_315];
-    (*(tint_symbol_4)).arr[x_313] = x_318;
-  }
-  int const x_320 = *(from);
-  i_1 = x_320;
-  while (true) {
-    int const x_325 = i_1;
-    int const x_326 = *(to);
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    int const x_329 = i_1;
-    int const x_330 = i_1;
-    int const x_332 = (*(tint_symbol_4)).arr[x_330];
-    (*(tint_symbol_3)).arr[x_329] = x_332;
-    {
-      int const x_334 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_341 = m;
-    int const x_342 = high;
-    if ((x_341 <= x_342)) {
-    } else {
-      break;
-    }
-    int const x_345 = low;
-    i_2 = x_345;
-    while (true) {
-      int const x_350 = i_2;
-      int const x_351 = high;
-      if ((x_350 < x_351)) {
-      } else {
-        break;
-      }
-      int const x_354 = i_2;
-      from_1 = x_354;
-      int const x_355 = i_2;
-      int const x_356 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(x_356)))) - as_type<uint>(1)));
-      int const x_359 = i_2;
-      int const x_360 = m;
-      int const x_364 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_359) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_360))))))) - as_type<uint>(1))), x_364);
-      int const x_366 = from_1;
-      param = x_366;
-      int const x_367 = mid_1;
-      param_1 = x_367;
-      int const x_368 = to_1;
-      param_2 = x_368;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_370 = m;
-        int const x_372 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_372) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_370))))));
-      }
-    }
-    {
-      int const x_374 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_374)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  int int_i = 0;
-  float const x_85 = x_28.injectionSwitch.x;
-  i_3 = int(x_85);
-  while (true) {
-    int const x_91 = i_3;
-    switch(x_91) {
-      case 9: {
-        int const x_121 = i_3;
-        (*(tint_symbol_7)).arr[x_121] = -5;
-        break;
-      }
-      case 8: {
-        int const x_119 = i_3;
-        (*(tint_symbol_7)).arr[x_119] = -4;
-        break;
-      }
-      case 7: {
-        int const x_117 = i_3;
-        (*(tint_symbol_7)).arr[x_117] = -3;
-        break;
-      }
-      case 6: {
-        int const x_115 = i_3;
-        (*(tint_symbol_7)).arr[x_115] = -2;
-        break;
-      }
-      case 5: {
-        int const x_113 = i_3;
-        (*(tint_symbol_7)).arr[x_113] = -1;
-        break;
-      }
-      case 4: {
-        int const x_111 = i_3;
-        (*(tint_symbol_7)).arr[x_111] = 0;
-        break;
-      }
-      case 3: {
-        int const x_109 = i_3;
-        (*(tint_symbol_7)).arr[x_109] = 1;
-        break;
-      }
-      case 2: {
-        int const x_107 = i_3;
-        (*(tint_symbol_7)).arr[x_107] = 2;
-        break;
-      }
-      case 1: {
-        int const x_105 = i_3;
-        (*(tint_symbol_7)).arr[x_105] = 3;
-        break;
-      }
-      case 0: {
-        int const x_103 = i_3;
-        (*(tint_symbol_7)).arr[x_103] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_123 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
-    {
-      int const x_125 = i_3;
-      if ((x_125 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_131 = j_1;
-    if ((x_131 < 10)) {
-    } else {
-      break;
-    }
-    int const x_134 = j_1;
-    int const x_135 = j_1;
-    int const x_137 = (*(tint_symbol_7)).arr[x_135];
-    (*(tint_symbol_8)).arr[x_134] = x_137;
-    {
-      int const x_139 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_139) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_143 = (*(tint_symbol_9)).y;
-  if ((int(x_143) < 30)) {
-    int const x_150 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_150) / 10.0f));
-  } else {
-    float const x_155 = (*(tint_symbol_9)).y;
-    if ((int(x_155) < 60)) {
-      int const x_162 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_162) / 10.0f));
-    } else {
-      float const x_167 = (*(tint_symbol_9)).y;
-      if ((int(x_167) < 90)) {
-        int const x_174 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_174) / 10.0f));
-      } else {
-        float const x_179 = (*(tint_symbol_9)).y;
-        if ((int(x_179) < 120)) {
-          int const x_186 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_186) / 10.0f));
-        } else {
-          float const x_191 = (*(tint_symbol_9)).y;
-          if ((int(x_191) < 150)) {
-            int_i = 1;
-            while (true) {
-              int const x_201 = int_i;
-              float const x_203 = x_28.injectionSwitch.x;
-              if ((x_201 > int(x_203))) {
-              } else {
-                break;
-              }
-              discard_fragment();
-            }
-          } else {
-            float const x_208 = (*(tint_symbol_9)).y;
-            if ((int(x_208) < 180)) {
-              int const x_215 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_215) / 10.0f));
-            } else {
-              float const x_220 = (*(tint_symbol_9)).y;
-              if ((int(x_220) < 210)) {
-                int const x_227 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_227) / 10.0f));
-              } else {
-                float const x_232 = (*(tint_symbol_9)).y;
-                if ((int(x_232) < 240)) {
-                  int const x_239 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_239) / 10.0f));
-                } else {
-                  float const x_244 = (*(tint_symbol_9)).y;
-                  if ((int(x_244) < 270)) {
-                    int const x_251 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_251) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_255 = grey;
-  float3 const x_256 = float3(x_255, x_255, x_255);
-  *(tint_symbol_10) = float4(x_256.x, x_256.y, x_256.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.spvasm
deleted file mode 100644
index 2021b39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,651 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 422
-; Schema: 0
-               OpCapability Shader
-        %173 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %int_i "int_i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %128 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %197 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %409 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-         %56 = OpSLessThanEqual %bool %51 %53
-         %57 = OpLogicalAnd %bool %54 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %60
-         %59 = OpLabel
-               OpBranch %58
-         %60 = OpLabel
-               OpBranch %45
-         %58 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpAccessChain %_ptr_Private_int %data %61
-         %64 = OpLoad %int %63
-         %65 = OpLoad %int %j
-         %66 = OpAccessChain %_ptr_Private_int %data %65
-         %67 = OpLoad %int %66
-         %68 = OpSLessThan %bool %64 %67
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %71
-         %70 = OpLabel
-         %72 = OpLoad %int %k
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %k %73
-         %74 = OpLoad %int %i
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %i %75
-         %76 = OpAccessChain %_ptr_Private_int %data %74
-         %77 = OpLoad %int %76
-         %78 = OpAccessChain %_ptr_Private_int %temp %72
-               OpStore %78 %77
-               OpBranch %69
-         %71 = OpLabel
-         %79 = OpLoad %int %k
-         %80 = OpIAdd %int %79 %int_1
-               OpStore %k %80
-         %81 = OpLoad %int %j
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %j %82
-         %83 = OpAccessChain %_ptr_Private_int %data %81
-         %84 = OpLoad %int %83
-         %85 = OpAccessChain %_ptr_Private_int %temp %79
-               OpStore %85 %84
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %86
-         %86 = OpLabel
-               OpLoopMerge %87 %88 None
-               OpBranch %89
-         %89 = OpLabel
-         %90 = OpLoad %int %i
-         %91 = OpLoad %int %i
-         %93 = OpLoad %int %mid
-         %95 = OpSLessThan %bool %90 %int_10
-         %96 = OpSLessThanEqual %bool %91 %93
-         %97 = OpLogicalAnd %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-               OpBranch %98
-        %100 = OpLabel
-               OpBranch %87
-         %98 = OpLabel
-        %101 = OpLoad %int %k
-        %102 = OpIAdd %int %101 %int_1
-               OpStore %k %102
-        %103 = OpLoad %int %i
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %i %104
-        %105 = OpAccessChain %_ptr_Private_int %data %103
-        %106 = OpLoad %int %105
-        %107 = OpAccessChain %_ptr_Private_int %temp %101
-               OpStore %107 %106
-               OpBranch %88
-         %88 = OpLabel
-               OpBranch %86
-         %87 = OpLabel
-        %109 = OpLoad %int %from
-               OpStore %i_1 %109
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %i_1
-        %116 = OpLoad %int %to
-        %117 = OpSLessThanEqual %bool %114 %116
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %120
-        %119 = OpLabel
-               OpBranch %118
-        %120 = OpLabel
-               OpBranch %111
-        %118 = OpLabel
-        %121 = OpLoad %int %i_1
-        %122 = OpLoad %int %i_1
-        %123 = OpAccessChain %_ptr_Private_int %temp %122
-        %124 = OpLoad %int %123
-        %125 = OpAccessChain %_ptr_Private_int %data %121
-               OpStore %125 %124
-               OpBranch %112
-        %112 = OpLabel
-        %126 = OpLoad %int %i_1
-        %127 = OpIAdd %int %126 %int_1
-               OpStore %i_1 %127
-               OpBranch %110
-        %111 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %128
-        %130 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %143
-        %143 = OpLabel
-               OpLoopMerge %144 %145 None
-               OpBranch %146
-        %146 = OpLabel
-        %147 = OpLoad %int %m
-        %148 = OpLoad %int %high
-        %149 = OpSLessThanEqual %bool %147 %148
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %152
-        %151 = OpLabel
-               OpBranch %150
-        %152 = OpLabel
-               OpBranch %144
-        %150 = OpLabel
-        %153 = OpLoad %int %low
-               OpStore %i_2 %153
-               OpBranch %154
-        %154 = OpLabel
-               OpLoopMerge %155 %156 None
-               OpBranch %157
-        %157 = OpLabel
-        %158 = OpLoad %int %i_2
-        %159 = OpLoad %int %high
-        %160 = OpSLessThan %bool %158 %159
-               OpSelectionMerge %161 None
-               OpBranchConditional %160 %162 %163
-        %162 = OpLabel
-               OpBranch %161
-        %163 = OpLabel
-               OpBranch %155
-        %161 = OpLabel
-        %164 = OpLoad %int %i_2
-               OpStore %from_1 %164
-        %165 = OpLoad %int %i_2
-        %166 = OpLoad %int %m
-        %167 = OpIAdd %int %165 %166
-        %168 = OpISub %int %167 %int_1
-               OpStore %mid_1 %168
-        %169 = OpLoad %int %i_2
-        %170 = OpLoad %int %m
-        %171 = OpLoad %int %high
-        %175 = OpIMul %int %int_2 %170
-        %176 = OpIAdd %int %169 %175
-        %177 = OpISub %int %176 %int_1
-        %172 = OpExtInst %int %173 SMin %177 %171
-               OpStore %to_1 %172
-        %178 = OpLoad %int %from_1
-               OpStore %param %178
-        %179 = OpLoad %int %mid_1
-               OpStore %param_1 %179
-        %180 = OpLoad %int %to_1
-               OpStore %param_2 %180
-        %181 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %156
-        %156 = OpLabel
-        %185 = OpLoad %int %m
-        %186 = OpLoad %int %i_2
-        %187 = OpIMul %int %int_2 %185
-        %188 = OpIAdd %int %186 %187
-               OpStore %i_2 %188
-               OpBranch %154
-        %155 = OpLabel
-               OpBranch %145
-        %145 = OpLabel
-        %189 = OpLoad %int %m
-        %190 = OpIMul %int %int_2 %189
-               OpStore %m %190
-               OpBranch %143
-        %144 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %128
-        %192 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %197
-      %int_i = OpVariable %_ptr_Function_int Function %32
-        %201 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %202 = OpLoad %float %201
-        %203 = OpConvertFToS %int %202
-               OpStore %i_3 %203
-               OpBranch %204
-        %204 = OpLabel
-               OpLoopMerge %205 %206 None
-               OpBranch %207
-        %207 = OpLabel
-        %208 = OpLoad %int %i_3
-               OpSelectionMerge %209 None
-               OpSwitch %208 %210 9 %211 8 %212 7 %213 6 %214 5 %215 4 %216 3 %217 2 %218 1 %219 0 %220
-        %211 = OpLabel
-        %221 = OpLoad %int %i_3
-        %222 = OpAccessChain %_ptr_Private_int %data %221
-               OpStore %222 %int_n5
-               OpBranch %209
-        %212 = OpLabel
-        %224 = OpLoad %int %i_3
-        %225 = OpAccessChain %_ptr_Private_int %data %224
-               OpStore %225 %int_n4
-               OpBranch %209
-        %213 = OpLabel
-        %227 = OpLoad %int %i_3
-        %228 = OpAccessChain %_ptr_Private_int %data %227
-               OpStore %228 %int_n3
-               OpBranch %209
-        %214 = OpLabel
-        %230 = OpLoad %int %i_3
-        %231 = OpAccessChain %_ptr_Private_int %data %230
-               OpStore %231 %int_n2
-               OpBranch %209
-        %215 = OpLabel
-        %233 = OpLoad %int %i_3
-        %234 = OpAccessChain %_ptr_Private_int %data %233
-               OpStore %234 %int_n1
-               OpBranch %209
-        %216 = OpLabel
-        %236 = OpLoad %int %i_3
-        %237 = OpAccessChain %_ptr_Private_int %data %236
-               OpStore %237 %int_0
-               OpBranch %209
-        %217 = OpLabel
-        %238 = OpLoad %int %i_3
-        %239 = OpAccessChain %_ptr_Private_int %data %238
-               OpStore %239 %int_1
-               OpBranch %209
-        %218 = OpLabel
-        %240 = OpLoad %int %i_3
-        %241 = OpAccessChain %_ptr_Private_int %data %240
-               OpStore %241 %int_2
-               OpBranch %209
-        %219 = OpLabel
-        %242 = OpLoad %int %i_3
-        %243 = OpAccessChain %_ptr_Private_int %data %242
-               OpStore %243 %int_3
-               OpBranch %209
-        %220 = OpLabel
-        %245 = OpLoad %int %i_3
-        %246 = OpAccessChain %_ptr_Private_int %data %245
-               OpStore %246 %int_4
-               OpBranch %209
-        %210 = OpLabel
-               OpBranch %209
-        %209 = OpLabel
-        %248 = OpLoad %int %i_3
-        %249 = OpIAdd %int %248 %int_1
-               OpStore %i_3 %249
-               OpBranch %206
-        %206 = OpLabel
-        %250 = OpLoad %int %i_3
-        %251 = OpSLessThan %bool %250 %int_10
-               OpBranchConditional %251 %204 %205
-        %205 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %252
-        %252 = OpLabel
-               OpLoopMerge %253 %254 None
-               OpBranch %255
-        %255 = OpLabel
-        %256 = OpLoad %int %j_1
-        %257 = OpSLessThan %bool %256 %int_10
-               OpSelectionMerge %258 None
-               OpBranchConditional %257 %259 %260
-        %259 = OpLabel
-               OpBranch %258
-        %260 = OpLabel
-               OpBranch %253
-        %258 = OpLabel
-        %261 = OpLoad %int %j_1
-        %262 = OpLoad %int %j_1
-        %263 = OpAccessChain %_ptr_Private_int %data %262
-        %264 = OpLoad %int %263
-        %265 = OpAccessChain %_ptr_Private_int %temp %261
-               OpStore %265 %264
-               OpBranch %254
-        %254 = OpLabel
-        %266 = OpLoad %int %j_1
-        %267 = OpIAdd %int %266 %int_1
-               OpStore %j_1 %267
-               OpBranch %252
-        %253 = OpLabel
-        %268 = OpFunctionCall %void %mergeSort_
-        %271 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %272 = OpLoad %float %271
-        %273 = OpConvertFToS %int %272
-        %275 = OpSLessThan %bool %273 %int_30
-               OpSelectionMerge %276 None
-               OpBranchConditional %275 %277 %278
-        %277 = OpLabel
-        %279 = OpAccessChain %_ptr_Private_int %data %int_0
-        %280 = OpLoad %int %279
-        %282 = OpConvertSToF %float %280
-        %284 = OpFDiv %float %282 %float_10
-        %285 = OpFAdd %float %float_0_5 %284
-               OpStore %grey %285
-               OpBranch %276
-        %278 = OpLabel
-        %286 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %287 = OpLoad %float %286
-        %288 = OpConvertFToS %int %287
-        %290 = OpSLessThan %bool %288 %int_60
-               OpSelectionMerge %291 None
-               OpBranchConditional %290 %292 %293
-        %292 = OpLabel
-        %294 = OpAccessChain %_ptr_Private_int %data %int_1
-        %295 = OpLoad %int %294
-        %296 = OpConvertSToF %float %295
-        %297 = OpFDiv %float %296 %float_10
-        %298 = OpFAdd %float %float_0_5 %297
-               OpStore %grey %298
-               OpBranch %291
-        %293 = OpLabel
-        %299 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %300 = OpLoad %float %299
-        %301 = OpConvertFToS %int %300
-        %303 = OpSLessThan %bool %301 %int_90
-               OpSelectionMerge %304 None
-               OpBranchConditional %303 %305 %306
-        %305 = OpLabel
-        %307 = OpAccessChain %_ptr_Private_int %data %int_2
-        %308 = OpLoad %int %307
-        %309 = OpConvertSToF %float %308
-        %310 = OpFDiv %float %309 %float_10
-        %311 = OpFAdd %float %float_0_5 %310
-               OpStore %grey %311
-               OpBranch %304
-        %306 = OpLabel
-        %312 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %313 = OpLoad %float %312
-        %314 = OpConvertFToS %int %313
-        %316 = OpSLessThan %bool %314 %int_120
-               OpSelectionMerge %317 None
-               OpBranchConditional %316 %318 %319
-        %318 = OpLabel
-        %320 = OpAccessChain %_ptr_Private_int %data %int_3
-        %321 = OpLoad %int %320
-        %322 = OpConvertSToF %float %321
-        %323 = OpFDiv %float %322 %float_10
-        %324 = OpFAdd %float %float_0_5 %323
-               OpStore %grey %324
-               OpBranch %317
-        %319 = OpLabel
-        %325 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %326 = OpLoad %float %325
-        %327 = OpConvertFToS %int %326
-        %329 = OpSLessThan %bool %327 %int_150
-               OpSelectionMerge %330 None
-               OpBranchConditional %329 %331 %332
-        %331 = OpLabel
-               OpStore %int_i %int_1
-               OpBranch %333
-        %333 = OpLabel
-               OpLoopMerge %334 %335 None
-               OpBranch %336
-        %336 = OpLabel
-        %337 = OpLoad %int %int_i
-        %338 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %339 = OpLoad %float %338
-        %340 = OpConvertFToS %int %339
-        %341 = OpSGreaterThan %bool %337 %340
-               OpSelectionMerge %342 None
-               OpBranchConditional %341 %343 %344
-        %343 = OpLabel
-               OpBranch %342
-        %344 = OpLabel
-               OpBranch %334
-        %342 = OpLabel
-               OpKill
-        %335 = OpLabel
-               OpBranch %333
-        %334 = OpLabel
-               OpBranch %330
-        %332 = OpLabel
-        %345 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %346 = OpLoad %float %345
-        %347 = OpConvertFToS %int %346
-        %349 = OpSLessThan %bool %347 %int_180
-               OpSelectionMerge %350 None
-               OpBranchConditional %349 %351 %352
-        %351 = OpLabel
-        %354 = OpAccessChain %_ptr_Private_int %data %int_5
-        %355 = OpLoad %int %354
-        %356 = OpConvertSToF %float %355
-        %357 = OpFDiv %float %356 %float_10
-        %358 = OpFAdd %float %float_0_5 %357
-               OpStore %grey %358
-               OpBranch %350
-        %352 = OpLabel
-        %359 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %360 = OpLoad %float %359
-        %361 = OpConvertFToS %int %360
-        %363 = OpSLessThan %bool %361 %int_210
-               OpSelectionMerge %364 None
-               OpBranchConditional %363 %365 %366
-        %365 = OpLabel
-        %368 = OpAccessChain %_ptr_Private_int %data %int_6
-        %369 = OpLoad %int %368
-        %370 = OpConvertSToF %float %369
-        %371 = OpFDiv %float %370 %float_10
-        %372 = OpFAdd %float %float_0_5 %371
-               OpStore %grey %372
-               OpBranch %364
-        %366 = OpLabel
-        %373 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %374 = OpLoad %float %373
-        %375 = OpConvertFToS %int %374
-        %377 = OpSLessThan %bool %375 %int_240
-               OpSelectionMerge %378 None
-               OpBranchConditional %377 %379 %380
-        %379 = OpLabel
-        %382 = OpAccessChain %_ptr_Private_int %data %int_7
-        %383 = OpLoad %int %382
-        %384 = OpConvertSToF %float %383
-        %385 = OpFDiv %float %384 %float_10
-        %386 = OpFAdd %float %float_0_5 %385
-               OpStore %grey %386
-               OpBranch %378
-        %380 = OpLabel
-        %387 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %388 = OpLoad %float %387
-        %389 = OpConvertFToS %int %388
-        %391 = OpSLessThan %bool %389 %int_270
-               OpSelectionMerge %392 None
-               OpBranchConditional %391 %393 %394
-        %393 = OpLabel
-        %396 = OpAccessChain %_ptr_Private_int %data %int_8
-        %397 = OpLoad %int %396
-        %398 = OpConvertSToF %float %397
-        %399 = OpFDiv %float %398 %float_10
-        %400 = OpFAdd %float %float_0_5 %399
-               OpStore %grey %400
-               OpBranch %392
-        %394 = OpLabel
-               OpKill
-        %392 = OpLabel
-               OpBranch %378
-        %378 = OpLabel
-               OpBranch %364
-        %364 = OpLabel
-               OpBranch %350
-        %350 = OpLabel
-               OpBranch %330
-        %330 = OpLabel
-               OpBranch %317
-        %317 = OpLabel
-               OpBranch %304
-        %304 = OpLabel
-               OpBranch %291
-        %291 = OpLabel
-               OpBranch %276
-        %276 = OpLabel
-        %401 = OpLoad %float %grey
-        %403 = OpCompositeConstruct %v3float %401 %401 %401
-        %404 = OpCompositeExtract %float %403 0
-        %405 = OpCompositeExtract %float %403 1
-        %406 = OpCompositeExtract %float %403 2
-        %408 = OpCompositeConstruct %v4float %404 %405 %406 %float_1
-               OpStore %x_GLF_color %408
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %409
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %413 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %414 = OpFunctionCall %void %main_1
-        %415 = OpLoad %v4float %x_GLF_color
-        %416 = OpCompositeConstruct %main_out %415
-               OpReturnValue %416
-               OpFunctionEnd
-       %main = OpFunction %void None %128
-        %418 = OpLabel
-        %420 = OpLoad %v4float %gl_FragCoord_param_1
-        %419 = OpFunctionCall %main_out %main_inner %420
-        %421 = OpCompositeExtract %v4float %419 0
-               OpStore %x_GLF_color_1_1 %421
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.wgsl
deleted file mode 100644
index 1649944..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,316 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_262 : i32 = *(from);
-  k = x_262;
-  let x_263 : i32 = *(from);
-  i = x_263;
-  let x_264 : i32 = *(mid);
-  j = (x_264 + 1);
-  loop {
-    let x_270 : i32 = i;
-    let x_271 : i32 = *(mid);
-    let x_273 : i32 = j;
-    let x_274 : i32 = *(to);
-    if (((x_270 <= x_271) & (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    let x_278 : i32 = i;
-    let x_280 : i32 = data[x_278];
-    let x_281 : i32 = j;
-    let x_283 : i32 = data[x_281];
-    if ((x_280 < x_283)) {
-      let x_288 : i32 = k;
-      k = (x_288 + 1);
-      let x_290 : i32 = i;
-      i = (x_290 + 1);
-      let x_293 : i32 = data[x_290];
-      temp[x_288] = x_293;
-    } else {
-      let x_295 : i32 = k;
-      k = (x_295 + 1);
-      let x_297 : i32 = j;
-      j = (x_297 + 1);
-      let x_300 : i32 = data[x_297];
-      temp[x_295] = x_300;
-    }
-  }
-  loop {
-    let x_306 : i32 = i;
-    let x_308 : i32 = i;
-    let x_309 : i32 = *(mid);
-    if (((x_306 < 10) & (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    let x_313 : i32 = k;
-    k = (x_313 + 1);
-    let x_315 : i32 = i;
-    i = (x_315 + 1);
-    let x_318 : i32 = data[x_315];
-    temp[x_313] = x_318;
-  }
-  let x_320 : i32 = *(from);
-  i_1 = x_320;
-  loop {
-    let x_325 : i32 = i_1;
-    let x_326 : i32 = *(to);
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    let x_329 : i32 = i_1;
-    let x_330 : i32 = i_1;
-    let x_332 : i32 = temp[x_330];
-    data[x_329] = x_332;
-
-    continuing {
-      let x_334 : i32 = i_1;
-      i_1 = (x_334 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_341 : i32 = m;
-    let x_342 : i32 = high;
-    if ((x_341 <= x_342)) {
-    } else {
-      break;
-    }
-    let x_345 : i32 = low;
-    i_2 = x_345;
-    loop {
-      let x_350 : i32 = i_2;
-      let x_351 : i32 = high;
-      if ((x_350 < x_351)) {
-      } else {
-        break;
-      }
-      let x_354 : i32 = i_2;
-      from_1 = x_354;
-      let x_355 : i32 = i_2;
-      let x_356 : i32 = m;
-      mid_1 = ((x_355 + x_356) - 1);
-      let x_359 : i32 = i_2;
-      let x_360 : i32 = m;
-      let x_364 : i32 = high;
-      to_1 = min(((x_359 + (2 * x_360)) - 1), x_364);
-      let x_366 : i32 = from_1;
-      param = x_366;
-      let x_367 : i32 = mid_1;
-      param_1 = x_367;
-      let x_368 : i32 = to_1;
-      param_2 = x_368;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_370 : i32 = m;
-        let x_372 : i32 = i_2;
-        i_2 = (x_372 + (2 * x_370));
-      }
-    }
-
-    continuing {
-      let x_374 : i32 = m;
-      m = (2 * x_374);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  var int_i : i32;
-  let x_85 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_85);
-  loop {
-    let x_91 : i32 = i_3;
-    switch(x_91) {
-      case 9: {
-        let x_121 : i32 = i_3;
-        data[x_121] = -5;
-      }
-      case 8: {
-        let x_119 : i32 = i_3;
-        data[x_119] = -4;
-      }
-      case 7: {
-        let x_117 : i32 = i_3;
-        data[x_117] = -3;
-      }
-      case 6: {
-        let x_115 : i32 = i_3;
-        data[x_115] = -2;
-      }
-      case 5: {
-        let x_113 : i32 = i_3;
-        data[x_113] = -1;
-      }
-      case 4: {
-        let x_111 : i32 = i_3;
-        data[x_111] = 0;
-      }
-      case 3: {
-        let x_109 : i32 = i_3;
-        data[x_109] = 1;
-      }
-      case 2: {
-        let x_107 : i32 = i_3;
-        data[x_107] = 2;
-      }
-      case 1: {
-        let x_105 : i32 = i_3;
-        data[x_105] = 3;
-      }
-      case 0: {
-        let x_103 : i32 = i_3;
-        data[x_103] = 4;
-      }
-      default: {
-      }
-    }
-    let x_123 : i32 = i_3;
-    i_3 = (x_123 + 1);
-
-    continuing {
-      let x_125 : i32 = i_3;
-      if ((x_125 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_131 : i32 = j_1;
-    if ((x_131 < 10)) {
-    } else {
-      break;
-    }
-    let x_134 : i32 = j_1;
-    let x_135 : i32 = j_1;
-    let x_137 : i32 = data[x_135];
-    temp[x_134] = x_137;
-
-    continuing {
-      let x_139 : i32 = j_1;
-      j_1 = (x_139 + 1);
-    }
-  }
-  mergeSort_();
-  let x_143 : f32 = gl_FragCoord.y;
-  if ((i32(x_143) < 30)) {
-    let x_150 : i32 = data[0];
-    grey = (0.5 + (f32(x_150) / 10.0));
-  } else {
-    let x_155 : f32 = gl_FragCoord.y;
-    if ((i32(x_155) < 60)) {
-      let x_162 : i32 = data[1];
-      grey = (0.5 + (f32(x_162) / 10.0));
-    } else {
-      let x_167 : f32 = gl_FragCoord.y;
-      if ((i32(x_167) < 90)) {
-        let x_174 : i32 = data[2];
-        grey = (0.5 + (f32(x_174) / 10.0));
-      } else {
-        let x_179 : f32 = gl_FragCoord.y;
-        if ((i32(x_179) < 120)) {
-          let x_186 : i32 = data[3];
-          grey = (0.5 + (f32(x_186) / 10.0));
-        } else {
-          let x_191 : f32 = gl_FragCoord.y;
-          if ((i32(x_191) < 150)) {
-            int_i = 1;
-            loop {
-              let x_201 : i32 = int_i;
-              let x_203 : f32 = x_28.injectionSwitch.x;
-              if ((x_201 > i32(x_203))) {
-              } else {
-                break;
-              }
-              discard;
-            }
-          } else {
-            let x_208 : f32 = gl_FragCoord.y;
-            if ((i32(x_208) < 180)) {
-              let x_215 : i32 = data[5];
-              grey = (0.5 + (f32(x_215) / 10.0));
-            } else {
-              let x_220 : f32 = gl_FragCoord.y;
-              if ((i32(x_220) < 210)) {
-                let x_227 : i32 = data[6];
-                grey = (0.5 + (f32(x_227) / 10.0));
-              } else {
-                let x_232 : f32 = gl_FragCoord.y;
-                if ((i32(x_232) < 240)) {
-                  let x_239 : i32 = data[7];
-                  grey = (0.5 + (f32(x_239) / 10.0));
-                } else {
-                  let x_244 : f32 = gl_FragCoord.y;
-                  if ((i32(x_244) < 270)) {
-                    let x_251 : i32 = data[8];
-                    grey = (0.5 + (f32(x_251) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_255 : f32 = grey;
-  let x_256 : vec3<f32> = vec3<f32>(x_255, x_255, x_255);
-  x_GLF_color = vec4<f32>(x_256.x, x_256.y, x_256.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.hlsl
deleted file mode 100644
index a889d31..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,283 +0,0 @@
-static int data[10] = (int[10])0;
-static int temp[10] = (int[10])0;
-cbuffer cbuffer_x_28 : register(b0, space0) {
-  uint4 x_28[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void merge_i1_i1_i1_(inout int from, inout int mid, inout int to) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  const int x_262 = from;
-  k = x_262;
-  const int x_263 = from;
-  i = x_263;
-  const int x_264 = mid;
-  j = (x_264 + 1);
-  while (true) {
-    const int x_270 = i;
-    const int x_271 = mid;
-    const int x_273 = j;
-    const int x_274 = to;
-    bool tint_tmp = (x_270 <= x_271);
-    if (tint_tmp) {
-      tint_tmp = (x_273 <= x_274);
-    }
-    if ((tint_tmp)) {
-    } else {
-      break;
-    }
-    const int x_280 = data[i];
-    const int x_283 = data[j];
-    if ((x_280 < x_283)) {
-      const int x_288 = k;
-      k = (x_288 + 1);
-      const int x_290 = i;
-      i = (x_290 + 1);
-      const int x_293 = data[x_290];
-      temp[x_288] = x_293;
-    } else {
-      const int x_295 = k;
-      k = (x_295 + 1);
-      const int x_297 = j;
-      j = (x_297 + 1);
-      const int x_300 = data[x_297];
-      temp[x_295] = x_300;
-    }
-  }
-  while (true) {
-    const int x_306 = i;
-    const int x_308 = i;
-    const int x_309 = mid;
-    bool tint_tmp_1 = (x_306 < 10);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_308 <= x_309);
-    }
-    if ((tint_tmp_1)) {
-    } else {
-      break;
-    }
-    const int x_313 = k;
-    k = (x_313 + 1);
-    const int x_315 = i;
-    i = (x_315 + 1);
-    const int x_318 = data[x_315];
-    temp[x_313] = x_318;
-  }
-  const int x_320 = from;
-  i_1 = x_320;
-  while (true) {
-    const int x_325 = i_1;
-    const int x_326 = to;
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    const int x_329 = i_1;
-    const int x_332 = temp[i_1];
-    data[x_329] = x_332;
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  return;
-}
-
-void mergeSort_() {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  {
-    for(; (m <= high); m = (2 * m)) {
-      i_2 = low;
-      {
-        for(; (i_2 < high); i_2 = (i_2 + (2 * m))) {
-          from_1 = i_2;
-          mid_1 = ((i_2 + m) - 1);
-          to_1 = min(((i_2 + (2 * m)) - 1), high);
-          param = from_1;
-          param_1 = mid_1;
-          param_2 = to_1;
-          merge_i1_i1_i1_(param, param_1, param_2);
-        }
-      }
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  int int_i = 0;
-  const float x_85 = asfloat(x_28[0].x);
-  i_3 = int(x_85);
-  while (true) {
-    switch(i_3) {
-      case 9: {
-        data[i_3] = -5;
-        break;
-      }
-      case 8: {
-        data[i_3] = -4;
-        break;
-      }
-      case 7: {
-        data[i_3] = -3;
-        break;
-      }
-      case 6: {
-        data[i_3] = -2;
-        break;
-      }
-      case 5: {
-        data[i_3] = -1;
-        break;
-      }
-      case 4: {
-        data[i_3] = 0;
-        break;
-      }
-      case 3: {
-        data[i_3] = 1;
-        break;
-      }
-      case 2: {
-        data[i_3] = 2;
-        break;
-      }
-      case 1: {
-        data[i_3] = 3;
-        break;
-      }
-      case 0: {
-        data[i_3] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    i_3 = (i_3 + 1);
-    {
-      if ((i_3 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  {
-    for(; (j_1 < 10); j_1 = (j_1 + 1)) {
-      const int x_134 = j_1;
-      const int x_137 = data[j_1];
-      temp[x_134] = x_137;
-    }
-  }
-  mergeSort_();
-  const float x_143 = gl_FragCoord.y;
-  if ((int(x_143) < 30)) {
-    const int x_150 = data[0];
-    grey = (0.5f + (float(x_150) / 10.0f));
-  } else {
-    const float x_155 = gl_FragCoord.y;
-    if ((int(x_155) < 60)) {
-      const int x_162 = data[1];
-      grey = (0.5f + (float(x_162) / 10.0f));
-    } else {
-      const float x_167 = gl_FragCoord.y;
-      if ((int(x_167) < 90)) {
-        const int x_174 = data[2];
-        grey = (0.5f + (float(x_174) / 10.0f));
-      } else {
-        const float x_179 = gl_FragCoord.y;
-        if ((int(x_179) < 120)) {
-          const int x_186 = data[3];
-          grey = (0.5f + (float(x_186) / 10.0f));
-        } else {
-          const float x_191 = gl_FragCoord.y;
-          if ((int(x_191) < 150)) {
-            int_i = 1;
-            while (true) {
-              const int x_201 = int_i;
-              const float x_203 = asfloat(x_28[0].x);
-              if ((x_201 > int(x_203))) {
-              } else {
-                break;
-              }
-              discard;
-            }
-          } else {
-            const float x_208 = gl_FragCoord.y;
-            if ((int(x_208) < 180)) {
-              const int x_215 = data[5];
-              grey = (0.5f + (float(x_215) / 10.0f));
-            } else {
-              const float x_220 = gl_FragCoord.y;
-              if ((int(x_220) < 210)) {
-                const int x_227 = data[6];
-                grey = (0.5f + (float(x_227) / 10.0f));
-              } else {
-                const float x_232 = gl_FragCoord.y;
-                if ((int(x_232) < 240)) {
-                  const int x_239 = data[7];
-                  grey = (0.5f + (float(x_239) / 10.0f));
-                } else {
-                  const float x_244 = gl_FragCoord.y;
-                  if ((int(x_244) < 270)) {
-                    const int x_251 = data[8];
-                    grey = (0.5f + (float(x_251) / 10.0f));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  const float x_255 = grey;
-  const float3 x_256 = float3(x_255, x_255, x_255);
-  x_GLF_color = float4(x_256.x, x_256.y, x_256.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.msl
deleted file mode 100644
index 80349e3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.msl
+++ /dev/null
@@ -1,330 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4) {
-  int k = 0;
-  int i = 0;
-  int j = 0;
-  int i_1 = 0;
-  int const x_262 = *(from);
-  k = x_262;
-  int const x_263 = *(from);
-  i = x_263;
-  int const x_264 = *(mid);
-  j = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-  while (true) {
-    int const x_270 = i;
-    int const x_271 = *(mid);
-    int const x_273 = j;
-    int const x_274 = *(to);
-    if (((x_270 <= x_271) && (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    int const x_278 = i;
-    int const x_280 = (*(tint_symbol_3)).arr[x_278];
-    int const x_281 = j;
-    int const x_283 = (*(tint_symbol_3)).arr[x_281];
-    if ((x_280 < x_283)) {
-      int const x_288 = k;
-      k = as_type<int>((as_type<uint>(x_288) + as_type<uint>(1)));
-      int const x_290 = i;
-      i = as_type<int>((as_type<uint>(x_290) + as_type<uint>(1)));
-      int const x_293 = (*(tint_symbol_3)).arr[x_290];
-      (*(tint_symbol_4)).arr[x_288] = x_293;
-    } else {
-      int const x_295 = k;
-      k = as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
-      int const x_297 = j;
-      j = as_type<int>((as_type<uint>(x_297) + as_type<uint>(1)));
-      int const x_300 = (*(tint_symbol_3)).arr[x_297];
-      (*(tint_symbol_4)).arr[x_295] = x_300;
-    }
-  }
-  while (true) {
-    int const x_306 = i;
-    int const x_308 = i;
-    int const x_309 = *(mid);
-    if (((x_306 < 10) && (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    int const x_313 = k;
-    k = as_type<int>((as_type<uint>(x_313) + as_type<uint>(1)));
-    int const x_315 = i;
-    i = as_type<int>((as_type<uint>(x_315) + as_type<uint>(1)));
-    int const x_318 = (*(tint_symbol_3)).arr[x_315];
-    (*(tint_symbol_4)).arr[x_313] = x_318;
-  }
-  int const x_320 = *(from);
-  i_1 = x_320;
-  while (true) {
-    int const x_325 = i_1;
-    int const x_326 = *(to);
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    int const x_329 = i_1;
-    int const x_330 = i_1;
-    int const x_332 = (*(tint_symbol_4)).arr[x_330];
-    (*(tint_symbol_3)).arr[x_329] = x_332;
-    {
-      int const x_334 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void mergeSort_(thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
-  int low = 0;
-  int high = 0;
-  int m = 0;
-  int i_2 = 0;
-  int from_1 = 0;
-  int mid_1 = 0;
-  int to_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  low = 0;
-  high = 9;
-  m = 1;
-  while (true) {
-    int const x_341 = m;
-    int const x_342 = high;
-    if ((x_341 <= x_342)) {
-    } else {
-      break;
-    }
-    int const x_345 = low;
-    i_2 = x_345;
-    while (true) {
-      int const x_350 = i_2;
-      int const x_351 = high;
-      if ((x_350 < x_351)) {
-      } else {
-        break;
-      }
-      int const x_354 = i_2;
-      from_1 = x_354;
-      int const x_355 = i_2;
-      int const x_356 = m;
-      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_355) + as_type<uint>(x_356)))) - as_type<uint>(1)));
-      int const x_359 = i_2;
-      int const x_360 = m;
-      int const x_364 = high;
-      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_359) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_360))))))) - as_type<uint>(1))), x_364);
-      int const x_366 = from_1;
-      param = x_366;
-      int const x_367 = mid_1;
-      param_1 = x_367;
-      int const x_368 = to_1;
-      param_2 = x_368;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
-      {
-        int const x_370 = m;
-        int const x_372 = i_2;
-        i_2 = as_type<int>((as_type<uint>(x_372) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_370))))));
-      }
-    }
-    {
-      int const x_374 = m;
-      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_374)));
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int i_3 = 0;
-  int j_1 = 0;
-  float grey = 0.0f;
-  int int_i = 0;
-  float const x_85 = x_28.injectionSwitch.x;
-  i_3 = int(x_85);
-  while (true) {
-    int const x_91 = i_3;
-    switch(x_91) {
-      case 9: {
-        int const x_121 = i_3;
-        (*(tint_symbol_7)).arr[x_121] = -5;
-        break;
-      }
-      case 8: {
-        int const x_119 = i_3;
-        (*(tint_symbol_7)).arr[x_119] = -4;
-        break;
-      }
-      case 7: {
-        int const x_117 = i_3;
-        (*(tint_symbol_7)).arr[x_117] = -3;
-        break;
-      }
-      case 6: {
-        int const x_115 = i_3;
-        (*(tint_symbol_7)).arr[x_115] = -2;
-        break;
-      }
-      case 5: {
-        int const x_113 = i_3;
-        (*(tint_symbol_7)).arr[x_113] = -1;
-        break;
-      }
-      case 4: {
-        int const x_111 = i_3;
-        (*(tint_symbol_7)).arr[x_111] = 0;
-        break;
-      }
-      case 3: {
-        int const x_109 = i_3;
-        (*(tint_symbol_7)).arr[x_109] = 1;
-        break;
-      }
-      case 2: {
-        int const x_107 = i_3;
-        (*(tint_symbol_7)).arr[x_107] = 2;
-        break;
-      }
-      case 1: {
-        int const x_105 = i_3;
-        (*(tint_symbol_7)).arr[x_105] = 3;
-        break;
-      }
-      case 0: {
-        int const x_103 = i_3;
-        (*(tint_symbol_7)).arr[x_103] = 4;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    int const x_123 = i_3;
-    i_3 = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
-    {
-      int const x_125 = i_3;
-      if ((x_125 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  while (true) {
-    int const x_131 = j_1;
-    if ((x_131 < 10)) {
-    } else {
-      break;
-    }
-    int const x_134 = j_1;
-    int const x_135 = j_1;
-    int const x_137 = (*(tint_symbol_7)).arr[x_135];
-    (*(tint_symbol_8)).arr[x_134] = x_137;
-    {
-      int const x_139 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_139) + as_type<uint>(1)));
-    }
-  }
-  mergeSort_(tint_symbol_7, tint_symbol_8);
-  float const x_143 = (*(tint_symbol_9)).y;
-  if ((int(x_143) < 30)) {
-    int const x_150 = (*(tint_symbol_7)).arr[0];
-    grey = (0.5f + (float(x_150) / 10.0f));
-  } else {
-    float const x_155 = (*(tint_symbol_9)).y;
-    if ((int(x_155) < 60)) {
-      int const x_162 = (*(tint_symbol_7)).arr[1];
-      grey = (0.5f + (float(x_162) / 10.0f));
-    } else {
-      float const x_167 = (*(tint_symbol_9)).y;
-      if ((int(x_167) < 90)) {
-        int const x_174 = (*(tint_symbol_7)).arr[2];
-        grey = (0.5f + (float(x_174) / 10.0f));
-      } else {
-        float const x_179 = (*(tint_symbol_9)).y;
-        if ((int(x_179) < 120)) {
-          int const x_186 = (*(tint_symbol_7)).arr[3];
-          grey = (0.5f + (float(x_186) / 10.0f));
-        } else {
-          float const x_191 = (*(tint_symbol_9)).y;
-          if ((int(x_191) < 150)) {
-            int_i = 1;
-            while (true) {
-              int const x_201 = int_i;
-              float const x_203 = x_28.injectionSwitch.x;
-              if ((x_201 > int(x_203))) {
-              } else {
-                break;
-              }
-              discard_fragment();
-            }
-          } else {
-            float const x_208 = (*(tint_symbol_9)).y;
-            if ((int(x_208) < 180)) {
-              int const x_215 = (*(tint_symbol_7)).arr[5];
-              grey = (0.5f + (float(x_215) / 10.0f));
-            } else {
-              float const x_220 = (*(tint_symbol_9)).y;
-              if ((int(x_220) < 210)) {
-                int const x_227 = (*(tint_symbol_7)).arr[6];
-                grey = (0.5f + (float(x_227) / 10.0f));
-              } else {
-                float const x_232 = (*(tint_symbol_9)).y;
-                if ((int(x_232) < 240)) {
-                  int const x_239 = (*(tint_symbol_7)).arr[7];
-                  grey = (0.5f + (float(x_239) / 10.0f));
-                } else {
-                  float const x_244 = (*(tint_symbol_9)).y;
-                  if ((int(x_244) < 270)) {
-                    int const x_251 = (*(tint_symbol_7)).arr[8];
-                    grey = (0.5f + (float(x_251) / 10.0f));
-                  } else {
-                    discard_fragment();
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  float const x_255 = grey;
-  float3 const x_256 = float3(x_255, x_255, x_255);
-  *(tint_symbol_10) = float4(x_256.x, x_256.y, x_256.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_11) = gl_FragCoord_param;
-  main_1(x_28, tint_symbol_12, tint_symbol_13, tint_symbol_11, tint_symbol_14);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_14)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread tint_array_wrapper tint_symbol_16 = {};
-  thread tint_array_wrapper tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.spvasm
deleted file mode 100644
index 942a899..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,661 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 426
-; Schema: 0
-               OpCapability Shader
-        %177 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %data "data"
-               OpName %temp "temp"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_28 "x_28"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_i1_i1_i1_ "merge_i1_i1_i1_"
-               OpName %from "from"
-               OpName %mid "mid"
-               OpName %to "to"
-               OpName %k "k"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %i_1 "i_1"
-               OpName %mergeSort_ "mergeSort_"
-               OpName %low "low"
-               OpName %high "high"
-               OpName %m "m"
-               OpName %i_2 "i_2"
-               OpName %from_1 "from_1"
-               OpName %mid_1 "mid_1"
-               OpName %to_1 "to_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %main_1 "main_1"
-               OpName %i_3 "i_3"
-               OpName %j_1 "j_1"
-               OpName %grey "grey"
-               OpName %int_i "int_i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_28 NonWritable
-               OpDecorate %x_28 DescriptorSet 0
-               OpDecorate %x_28 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%_ptr_Private__arr_int_uint_10 = OpTypePointer Private %_arr_int_uint_10
-         %14 = OpConstantNull %_arr_int_uint_10
-       %data = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-       %temp = OpVariable %_ptr_Private__arr_int_uint_10 Private %14
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_28 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int %_ptr_Function_int
-         %32 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-     %int_10 = OpConstant %int 10
-        %132 = OpTypeFunction %void
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-      %int_2 = OpConstant %int 2
-%_ptr_Function_float = OpTypePointer Function %float
-        %201 = OpConstantNull %float
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %int_n5 = OpConstant %int -5
-     %int_n4 = OpConstant %int -4
-     %int_n3 = OpConstant %int -3
-     %int_n2 = OpConstant %int -2
-     %int_n1 = OpConstant %int -1
-      %int_3 = OpConstant %int 3
-      %int_4 = OpConstant %int 4
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-     %int_30 = OpConstant %int 30
-  %float_0_5 = OpConstant %float 0.5
-   %float_10 = OpConstant %float 10
-     %int_60 = OpConstant %int 60
-     %int_90 = OpConstant %int 90
-    %int_120 = OpConstant %int 120
-    %int_150 = OpConstant %int 150
-    %int_180 = OpConstant %int 180
-      %int_5 = OpConstant %int 5
-    %int_210 = OpConstant %int 210
-      %int_6 = OpConstant %int 6
-    %int_240 = OpConstant %int 240
-      %int_7 = OpConstant %int 7
-    %int_270 = OpConstant %int 270
-      %int_8 = OpConstant %int 8
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-        %413 = OpTypeFunction %main_out %v4float
-%merge_i1_i1_i1_ = OpFunction %void None %23
-       %from = OpFunctionParameter %_ptr_Function_int
-        %mid = OpFunctionParameter %_ptr_Function_int
-         %to = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %32
-          %i = OpVariable %_ptr_Function_int Function %32
-          %j = OpVariable %_ptr_Function_int Function %32
-        %i_1 = OpVariable %_ptr_Function_int Function %32
-         %37 = OpLoad %int %from
-               OpStore %k %37
-         %39 = OpLoad %int %from
-               OpStore %i %39
-         %41 = OpLoad %int %mid
-         %43 = OpIAdd %int %41 %int_1
-               OpStore %j %43
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %mid
-         %51 = OpLoad %int %j
-         %53 = OpLoad %int %to
-         %54 = OpSLessThanEqual %bool %48 %50
-               OpSelectionMerge %56 None
-               OpBranchConditional %54 %57 %56
-         %57 = OpLabel
-         %58 = OpSLessThanEqual %bool %51 %53
-               OpBranch %56
-         %56 = OpLabel
-         %59 = OpPhi %bool %54 %47 %58 %57
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %45
-         %60 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpAccessChain %_ptr_Private_int %data %63
-         %66 = OpLoad %int %65
-         %67 = OpLoad %int %j
-         %68 = OpAccessChain %_ptr_Private_int %data %67
-         %69 = OpLoad %int %68
-         %70 = OpSLessThan %bool %66 %69
-               OpSelectionMerge %71 None
-               OpBranchConditional %70 %72 %73
-         %72 = OpLabel
-         %74 = OpLoad %int %k
-         %75 = OpIAdd %int %74 %int_1
-               OpStore %k %75
-         %76 = OpLoad %int %i
-         %77 = OpIAdd %int %76 %int_1
-               OpStore %i %77
-         %78 = OpAccessChain %_ptr_Private_int %data %76
-         %79 = OpLoad %int %78
-         %80 = OpAccessChain %_ptr_Private_int %temp %74
-               OpStore %80 %79
-               OpBranch %71
-         %73 = OpLabel
-         %81 = OpLoad %int %k
-         %82 = OpIAdd %int %81 %int_1
-               OpStore %k %82
-         %83 = OpLoad %int %j
-         %84 = OpIAdd %int %83 %int_1
-               OpStore %j %84
-         %85 = OpAccessChain %_ptr_Private_int %data %83
-         %86 = OpLoad %int %85
-         %87 = OpAccessChain %_ptr_Private_int %temp %81
-               OpStore %87 %86
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %88
-         %88 = OpLabel
-               OpLoopMerge %89 %90 None
-               OpBranch %91
-         %91 = OpLabel
-         %92 = OpLoad %int %i
-         %93 = OpLoad %int %i
-         %95 = OpLoad %int %mid
-         %97 = OpSLessThan %bool %92 %int_10
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpSLessThanEqual %bool %93 %95
-               OpBranch %98
-         %98 = OpLabel
-        %101 = OpPhi %bool %97 %91 %100 %99
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %104
-        %103 = OpLabel
-               OpBranch %102
-        %104 = OpLabel
-               OpBranch %89
-        %102 = OpLabel
-        %105 = OpLoad %int %k
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %k %106
-        %107 = OpLoad %int %i
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %i %108
-        %109 = OpAccessChain %_ptr_Private_int %data %107
-        %110 = OpLoad %int %109
-        %111 = OpAccessChain %_ptr_Private_int %temp %105
-               OpStore %111 %110
-               OpBranch %90
-         %90 = OpLabel
-               OpBranch %88
-         %89 = OpLabel
-        %113 = OpLoad %int %from
-               OpStore %i_1 %113
-               OpBranch %114
-        %114 = OpLabel
-               OpLoopMerge %115 %116 None
-               OpBranch %117
-        %117 = OpLabel
-        %118 = OpLoad %int %i_1
-        %120 = OpLoad %int %to
-        %121 = OpSLessThanEqual %bool %118 %120
-               OpSelectionMerge %122 None
-               OpBranchConditional %121 %123 %124
-        %123 = OpLabel
-               OpBranch %122
-        %124 = OpLabel
-               OpBranch %115
-        %122 = OpLabel
-        %125 = OpLoad %int %i_1
-        %126 = OpLoad %int %i_1
-        %127 = OpAccessChain %_ptr_Private_int %temp %126
-        %128 = OpLoad %int %127
-        %129 = OpAccessChain %_ptr_Private_int %data %125
-               OpStore %129 %128
-               OpBranch %116
-        %116 = OpLabel
-        %130 = OpLoad %int %i_1
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %i_1 %131
-               OpBranch %114
-        %115 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %mergeSort_ = OpFunction %void None %132
-        %134 = OpLabel
-        %low = OpVariable %_ptr_Function_int Function %32
-       %high = OpVariable %_ptr_Function_int Function %32
-          %m = OpVariable %_ptr_Function_int Function %32
-        %i_2 = OpVariable %_ptr_Function_int Function %32
-     %from_1 = OpVariable %_ptr_Function_int Function %32
-      %mid_1 = OpVariable %_ptr_Function_int Function %32
-       %to_1 = OpVariable %_ptr_Function_int Function %32
-      %param = OpVariable %_ptr_Function_int Function %32
-    %param_1 = OpVariable %_ptr_Function_int Function %32
-    %param_2 = OpVariable %_ptr_Function_int Function %32
-               OpStore %low %int_0
-               OpStore %high %int_9
-               OpStore %m %int_1
-               OpBranch %147
-        %147 = OpLabel
-               OpLoopMerge %148 %149 None
-               OpBranch %150
-        %150 = OpLabel
-        %151 = OpLoad %int %m
-        %152 = OpLoad %int %high
-        %153 = OpSLessThanEqual %bool %151 %152
-               OpSelectionMerge %154 None
-               OpBranchConditional %153 %155 %156
-        %155 = OpLabel
-               OpBranch %154
-        %156 = OpLabel
-               OpBranch %148
-        %154 = OpLabel
-        %157 = OpLoad %int %low
-               OpStore %i_2 %157
-               OpBranch %158
-        %158 = OpLabel
-               OpLoopMerge %159 %160 None
-               OpBranch %161
-        %161 = OpLabel
-        %162 = OpLoad %int %i_2
-        %163 = OpLoad %int %high
-        %164 = OpSLessThan %bool %162 %163
-               OpSelectionMerge %165 None
-               OpBranchConditional %164 %166 %167
-        %166 = OpLabel
-               OpBranch %165
-        %167 = OpLabel
-               OpBranch %159
-        %165 = OpLabel
-        %168 = OpLoad %int %i_2
-               OpStore %from_1 %168
-        %169 = OpLoad %int %i_2
-        %170 = OpLoad %int %m
-        %171 = OpIAdd %int %169 %170
-        %172 = OpISub %int %171 %int_1
-               OpStore %mid_1 %172
-        %173 = OpLoad %int %i_2
-        %174 = OpLoad %int %m
-        %175 = OpLoad %int %high
-        %179 = OpIMul %int %int_2 %174
-        %180 = OpIAdd %int %173 %179
-        %181 = OpISub %int %180 %int_1
-        %176 = OpExtInst %int %177 SMin %181 %175
-               OpStore %to_1 %176
-        %182 = OpLoad %int %from_1
-               OpStore %param %182
-        %183 = OpLoad %int %mid_1
-               OpStore %param_1 %183
-        %184 = OpLoad %int %to_1
-               OpStore %param_2 %184
-        %185 = OpFunctionCall %void %merge_i1_i1_i1_ %param %param_1 %param_2
-               OpBranch %160
-        %160 = OpLabel
-        %189 = OpLoad %int %m
-        %190 = OpLoad %int %i_2
-        %191 = OpIMul %int %int_2 %189
-        %192 = OpIAdd %int %190 %191
-               OpStore %i_2 %192
-               OpBranch %158
-        %159 = OpLabel
-               OpBranch %149
-        %149 = OpLabel
-        %193 = OpLoad %int %m
-        %194 = OpIMul %int %int_2 %193
-               OpStore %m %194
-               OpBranch %147
-        %148 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %132
-        %196 = OpLabel
-        %i_3 = OpVariable %_ptr_Function_int Function %32
-        %j_1 = OpVariable %_ptr_Function_int Function %32
-       %grey = OpVariable %_ptr_Function_float Function %201
-      %int_i = OpVariable %_ptr_Function_int Function %32
-        %205 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %206 = OpLoad %float %205
-        %207 = OpConvertFToS %int %206
-               OpStore %i_3 %207
-               OpBranch %208
-        %208 = OpLabel
-               OpLoopMerge %209 %210 None
-               OpBranch %211
-        %211 = OpLabel
-        %212 = OpLoad %int %i_3
-               OpSelectionMerge %213 None
-               OpSwitch %212 %214 9 %215 8 %216 7 %217 6 %218 5 %219 4 %220 3 %221 2 %222 1 %223 0 %224
-        %215 = OpLabel
-        %225 = OpLoad %int %i_3
-        %226 = OpAccessChain %_ptr_Private_int %data %225
-               OpStore %226 %int_n5
-               OpBranch %213
-        %216 = OpLabel
-        %228 = OpLoad %int %i_3
-        %229 = OpAccessChain %_ptr_Private_int %data %228
-               OpStore %229 %int_n4
-               OpBranch %213
-        %217 = OpLabel
-        %231 = OpLoad %int %i_3
-        %232 = OpAccessChain %_ptr_Private_int %data %231
-               OpStore %232 %int_n3
-               OpBranch %213
-        %218 = OpLabel
-        %234 = OpLoad %int %i_3
-        %235 = OpAccessChain %_ptr_Private_int %data %234
-               OpStore %235 %int_n2
-               OpBranch %213
-        %219 = OpLabel
-        %237 = OpLoad %int %i_3
-        %238 = OpAccessChain %_ptr_Private_int %data %237
-               OpStore %238 %int_n1
-               OpBranch %213
-        %220 = OpLabel
-        %240 = OpLoad %int %i_3
-        %241 = OpAccessChain %_ptr_Private_int %data %240
-               OpStore %241 %int_0
-               OpBranch %213
-        %221 = OpLabel
-        %242 = OpLoad %int %i_3
-        %243 = OpAccessChain %_ptr_Private_int %data %242
-               OpStore %243 %int_1
-               OpBranch %213
-        %222 = OpLabel
-        %244 = OpLoad %int %i_3
-        %245 = OpAccessChain %_ptr_Private_int %data %244
-               OpStore %245 %int_2
-               OpBranch %213
-        %223 = OpLabel
-        %246 = OpLoad %int %i_3
-        %247 = OpAccessChain %_ptr_Private_int %data %246
-               OpStore %247 %int_3
-               OpBranch %213
-        %224 = OpLabel
-        %249 = OpLoad %int %i_3
-        %250 = OpAccessChain %_ptr_Private_int %data %249
-               OpStore %250 %int_4
-               OpBranch %213
-        %214 = OpLabel
-               OpBranch %213
-        %213 = OpLabel
-        %252 = OpLoad %int %i_3
-        %253 = OpIAdd %int %252 %int_1
-               OpStore %i_3 %253
-               OpBranch %210
-        %210 = OpLabel
-        %254 = OpLoad %int %i_3
-        %255 = OpSLessThan %bool %254 %int_10
-               OpBranchConditional %255 %208 %209
-        %209 = OpLabel
-               OpStore %j_1 %int_0
-               OpBranch %256
-        %256 = OpLabel
-               OpLoopMerge %257 %258 None
-               OpBranch %259
-        %259 = OpLabel
-        %260 = OpLoad %int %j_1
-        %261 = OpSLessThan %bool %260 %int_10
-               OpSelectionMerge %262 None
-               OpBranchConditional %261 %263 %264
-        %263 = OpLabel
-               OpBranch %262
-        %264 = OpLabel
-               OpBranch %257
-        %262 = OpLabel
-        %265 = OpLoad %int %j_1
-        %266 = OpLoad %int %j_1
-        %267 = OpAccessChain %_ptr_Private_int %data %266
-        %268 = OpLoad %int %267
-        %269 = OpAccessChain %_ptr_Private_int %temp %265
-               OpStore %269 %268
-               OpBranch %258
-        %258 = OpLabel
-        %270 = OpLoad %int %j_1
-        %271 = OpIAdd %int %270 %int_1
-               OpStore %j_1 %271
-               OpBranch %256
-        %257 = OpLabel
-        %272 = OpFunctionCall %void %mergeSort_
-        %275 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %276 = OpLoad %float %275
-        %277 = OpConvertFToS %int %276
-        %279 = OpSLessThan %bool %277 %int_30
-               OpSelectionMerge %280 None
-               OpBranchConditional %279 %281 %282
-        %281 = OpLabel
-        %283 = OpAccessChain %_ptr_Private_int %data %int_0
-        %284 = OpLoad %int %283
-        %286 = OpConvertSToF %float %284
-        %288 = OpFDiv %float %286 %float_10
-        %289 = OpFAdd %float %float_0_5 %288
-               OpStore %grey %289
-               OpBranch %280
-        %282 = OpLabel
-        %290 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %291 = OpLoad %float %290
-        %292 = OpConvertFToS %int %291
-        %294 = OpSLessThan %bool %292 %int_60
-               OpSelectionMerge %295 None
-               OpBranchConditional %294 %296 %297
-        %296 = OpLabel
-        %298 = OpAccessChain %_ptr_Private_int %data %int_1
-        %299 = OpLoad %int %298
-        %300 = OpConvertSToF %float %299
-        %301 = OpFDiv %float %300 %float_10
-        %302 = OpFAdd %float %float_0_5 %301
-               OpStore %grey %302
-               OpBranch %295
-        %297 = OpLabel
-        %303 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %304 = OpLoad %float %303
-        %305 = OpConvertFToS %int %304
-        %307 = OpSLessThan %bool %305 %int_90
-               OpSelectionMerge %308 None
-               OpBranchConditional %307 %309 %310
-        %309 = OpLabel
-        %311 = OpAccessChain %_ptr_Private_int %data %int_2
-        %312 = OpLoad %int %311
-        %313 = OpConvertSToF %float %312
-        %314 = OpFDiv %float %313 %float_10
-        %315 = OpFAdd %float %float_0_5 %314
-               OpStore %grey %315
-               OpBranch %308
-        %310 = OpLabel
-        %316 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %317 = OpLoad %float %316
-        %318 = OpConvertFToS %int %317
-        %320 = OpSLessThan %bool %318 %int_120
-               OpSelectionMerge %321 None
-               OpBranchConditional %320 %322 %323
-        %322 = OpLabel
-        %324 = OpAccessChain %_ptr_Private_int %data %int_3
-        %325 = OpLoad %int %324
-        %326 = OpConvertSToF %float %325
-        %327 = OpFDiv %float %326 %float_10
-        %328 = OpFAdd %float %float_0_5 %327
-               OpStore %grey %328
-               OpBranch %321
-        %323 = OpLabel
-        %329 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %330 = OpLoad %float %329
-        %331 = OpConvertFToS %int %330
-        %333 = OpSLessThan %bool %331 %int_150
-               OpSelectionMerge %334 None
-               OpBranchConditional %333 %335 %336
-        %335 = OpLabel
-               OpStore %int_i %int_1
-               OpBranch %337
-        %337 = OpLabel
-               OpLoopMerge %338 %339 None
-               OpBranch %340
-        %340 = OpLabel
-        %341 = OpLoad %int %int_i
-        %342 = OpAccessChain %_ptr_Uniform_float %x_28 %uint_0 %uint_0
-        %343 = OpLoad %float %342
-        %344 = OpConvertFToS %int %343
-        %345 = OpSGreaterThan %bool %341 %344
-               OpSelectionMerge %346 None
-               OpBranchConditional %345 %347 %348
-        %347 = OpLabel
-               OpBranch %346
-        %348 = OpLabel
-               OpBranch %338
-        %346 = OpLabel
-               OpKill
-        %339 = OpLabel
-               OpBranch %337
-        %338 = OpLabel
-               OpBranch %334
-        %336 = OpLabel
-        %349 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %350 = OpLoad %float %349
-        %351 = OpConvertFToS %int %350
-        %353 = OpSLessThan %bool %351 %int_180
-               OpSelectionMerge %354 None
-               OpBranchConditional %353 %355 %356
-        %355 = OpLabel
-        %358 = OpAccessChain %_ptr_Private_int %data %int_5
-        %359 = OpLoad %int %358
-        %360 = OpConvertSToF %float %359
-        %361 = OpFDiv %float %360 %float_10
-        %362 = OpFAdd %float %float_0_5 %361
-               OpStore %grey %362
-               OpBranch %354
-        %356 = OpLabel
-        %363 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %364 = OpLoad %float %363
-        %365 = OpConvertFToS %int %364
-        %367 = OpSLessThan %bool %365 %int_210
-               OpSelectionMerge %368 None
-               OpBranchConditional %367 %369 %370
-        %369 = OpLabel
-        %372 = OpAccessChain %_ptr_Private_int %data %int_6
-        %373 = OpLoad %int %372
-        %374 = OpConvertSToF %float %373
-        %375 = OpFDiv %float %374 %float_10
-        %376 = OpFAdd %float %float_0_5 %375
-               OpStore %grey %376
-               OpBranch %368
-        %370 = OpLabel
-        %377 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %378 = OpLoad %float %377
-        %379 = OpConvertFToS %int %378
-        %381 = OpSLessThan %bool %379 %int_240
-               OpSelectionMerge %382 None
-               OpBranchConditional %381 %383 %384
-        %383 = OpLabel
-        %386 = OpAccessChain %_ptr_Private_int %data %int_7
-        %387 = OpLoad %int %386
-        %388 = OpConvertSToF %float %387
-        %389 = OpFDiv %float %388 %float_10
-        %390 = OpFAdd %float %float_0_5 %389
-               OpStore %grey %390
-               OpBranch %382
-        %384 = OpLabel
-        %391 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %392 = OpLoad %float %391
-        %393 = OpConvertFToS %int %392
-        %395 = OpSLessThan %bool %393 %int_270
-               OpSelectionMerge %396 None
-               OpBranchConditional %395 %397 %398
-        %397 = OpLabel
-        %400 = OpAccessChain %_ptr_Private_int %data %int_8
-        %401 = OpLoad %int %400
-        %402 = OpConvertSToF %float %401
-        %403 = OpFDiv %float %402 %float_10
-        %404 = OpFAdd %float %float_0_5 %403
-               OpStore %grey %404
-               OpBranch %396
-        %398 = OpLabel
-               OpKill
-        %396 = OpLabel
-               OpBranch %382
-        %382 = OpLabel
-               OpBranch %368
-        %368 = OpLabel
-               OpBranch %354
-        %354 = OpLabel
-               OpBranch %334
-        %334 = OpLabel
-               OpBranch %321
-        %321 = OpLabel
-               OpBranch %308
-        %308 = OpLabel
-               OpBranch %295
-        %295 = OpLabel
-               OpBranch %280
-        %280 = OpLabel
-        %405 = OpLoad %float %grey
-        %407 = OpCompositeConstruct %v3float %405 %405 %405
-        %408 = OpCompositeExtract %float %407 0
-        %409 = OpCompositeExtract %float %407 1
-        %410 = OpCompositeExtract %float %407 2
-        %412 = OpCompositeConstruct %v4float %408 %409 %410 %float_1
-               OpStore %x_GLF_color %412
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %413
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %417 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %418 = OpFunctionCall %void %main_1
-        %419 = OpLoad %v4float %x_GLF_color
-        %420 = OpCompositeConstruct %main_out %419
-               OpReturnValue %420
-               OpFunctionEnd
-       %main = OpFunction %void None %132
-        %422 = OpLabel
-        %424 = OpLoad %v4float %gl_FragCoord_param_1
-        %423 = OpFunctionCall %main_out %main_inner %424
-        %425 = OpCompositeExtract %v4float %423 0
-               OpStore %x_GLF_color_1_1 %425
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.wgsl
deleted file mode 100644
index c64c646..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-mergesort-reversed-for-loop/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,316 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> data : array<i32, 10>;
-
-var<private> temp : array<i32, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_28 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
-  var k : i32;
-  var i : i32;
-  var j : i32;
-  var i_1 : i32;
-  let x_262 : i32 = *(from);
-  k = x_262;
-  let x_263 : i32 = *(from);
-  i = x_263;
-  let x_264 : i32 = *(mid);
-  j = (x_264 + 1);
-  loop {
-    let x_270 : i32 = i;
-    let x_271 : i32 = *(mid);
-    let x_273 : i32 = j;
-    let x_274 : i32 = *(to);
-    if (((x_270 <= x_271) && (x_273 <= x_274))) {
-    } else {
-      break;
-    }
-    let x_278 : i32 = i;
-    let x_280 : i32 = data[x_278];
-    let x_281 : i32 = j;
-    let x_283 : i32 = data[x_281];
-    if ((x_280 < x_283)) {
-      let x_288 : i32 = k;
-      k = (x_288 + 1);
-      let x_290 : i32 = i;
-      i = (x_290 + 1);
-      let x_293 : i32 = data[x_290];
-      temp[x_288] = x_293;
-    } else {
-      let x_295 : i32 = k;
-      k = (x_295 + 1);
-      let x_297 : i32 = j;
-      j = (x_297 + 1);
-      let x_300 : i32 = data[x_297];
-      temp[x_295] = x_300;
-    }
-  }
-  loop {
-    let x_306 : i32 = i;
-    let x_308 : i32 = i;
-    let x_309 : i32 = *(mid);
-    if (((x_306 < 10) && (x_308 <= x_309))) {
-    } else {
-      break;
-    }
-    let x_313 : i32 = k;
-    k = (x_313 + 1);
-    let x_315 : i32 = i;
-    i = (x_315 + 1);
-    let x_318 : i32 = data[x_315];
-    temp[x_313] = x_318;
-  }
-  let x_320 : i32 = *(from);
-  i_1 = x_320;
-  loop {
-    let x_325 : i32 = i_1;
-    let x_326 : i32 = *(to);
-    if ((x_325 <= x_326)) {
-    } else {
-      break;
-    }
-    let x_329 : i32 = i_1;
-    let x_330 : i32 = i_1;
-    let x_332 : i32 = temp[x_330];
-    data[x_329] = x_332;
-
-    continuing {
-      let x_334 : i32 = i_1;
-      i_1 = (x_334 + 1);
-    }
-  }
-  return;
-}
-
-fn mergeSort_() {
-  var low : i32;
-  var high : i32;
-  var m : i32;
-  var i_2 : i32;
-  var from_1 : i32;
-  var mid_1 : i32;
-  var to_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  low = 0;
-  high = 9;
-  m = 1;
-  loop {
-    let x_341 : i32 = m;
-    let x_342 : i32 = high;
-    if ((x_341 <= x_342)) {
-    } else {
-      break;
-    }
-    let x_345 : i32 = low;
-    i_2 = x_345;
-    loop {
-      let x_350 : i32 = i_2;
-      let x_351 : i32 = high;
-      if ((x_350 < x_351)) {
-      } else {
-        break;
-      }
-      let x_354 : i32 = i_2;
-      from_1 = x_354;
-      let x_355 : i32 = i_2;
-      let x_356 : i32 = m;
-      mid_1 = ((x_355 + x_356) - 1);
-      let x_359 : i32 = i_2;
-      let x_360 : i32 = m;
-      let x_364 : i32 = high;
-      to_1 = min(((x_359 + (2 * x_360)) - 1), x_364);
-      let x_366 : i32 = from_1;
-      param = x_366;
-      let x_367 : i32 = mid_1;
-      param_1 = x_367;
-      let x_368 : i32 = to_1;
-      param_2 = x_368;
-      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));
-
-      continuing {
-        let x_370 : i32 = m;
-        let x_372 : i32 = i_2;
-        i_2 = (x_372 + (2 * x_370));
-      }
-    }
-
-    continuing {
-      let x_374 : i32 = m;
-      m = (2 * x_374);
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_3 : i32;
-  var j_1 : i32;
-  var grey : f32;
-  var int_i : i32;
-  let x_85 : f32 = x_28.injectionSwitch.x;
-  i_3 = i32(x_85);
-  loop {
-    let x_91 : i32 = i_3;
-    switch(x_91) {
-      case 9: {
-        let x_121 : i32 = i_3;
-        data[x_121] = -5;
-      }
-      case 8: {
-        let x_119 : i32 = i_3;
-        data[x_119] = -4;
-      }
-      case 7: {
-        let x_117 : i32 = i_3;
-        data[x_117] = -3;
-      }
-      case 6: {
-        let x_115 : i32 = i_3;
-        data[x_115] = -2;
-      }
-      case 5: {
-        let x_113 : i32 = i_3;
-        data[x_113] = -1;
-      }
-      case 4: {
-        let x_111 : i32 = i_3;
-        data[x_111] = 0;
-      }
-      case 3: {
-        let x_109 : i32 = i_3;
-        data[x_109] = 1;
-      }
-      case 2: {
-        let x_107 : i32 = i_3;
-        data[x_107] = 2;
-      }
-      case 1: {
-        let x_105 : i32 = i_3;
-        data[x_105] = 3;
-      }
-      case 0: {
-        let x_103 : i32 = i_3;
-        data[x_103] = 4;
-      }
-      default: {
-      }
-    }
-    let x_123 : i32 = i_3;
-    i_3 = (x_123 + 1);
-
-    continuing {
-      let x_125 : i32 = i_3;
-      if ((x_125 < 10)) {
-      } else {
-        break;
-      }
-    }
-  }
-  j_1 = 0;
-  loop {
-    let x_131 : i32 = j_1;
-    if ((x_131 < 10)) {
-    } else {
-      break;
-    }
-    let x_134 : i32 = j_1;
-    let x_135 : i32 = j_1;
-    let x_137 : i32 = data[x_135];
-    temp[x_134] = x_137;
-
-    continuing {
-      let x_139 : i32 = j_1;
-      j_1 = (x_139 + 1);
-    }
-  }
-  mergeSort_();
-  let x_143 : f32 = gl_FragCoord.y;
-  if ((i32(x_143) < 30)) {
-    let x_150 : i32 = data[0];
-    grey = (0.5 + (f32(x_150) / 10.0));
-  } else {
-    let x_155 : f32 = gl_FragCoord.y;
-    if ((i32(x_155) < 60)) {
-      let x_162 : i32 = data[1];
-      grey = (0.5 + (f32(x_162) / 10.0));
-    } else {
-      let x_167 : f32 = gl_FragCoord.y;
-      if ((i32(x_167) < 90)) {
-        let x_174 : i32 = data[2];
-        grey = (0.5 + (f32(x_174) / 10.0));
-      } else {
-        let x_179 : f32 = gl_FragCoord.y;
-        if ((i32(x_179) < 120)) {
-          let x_186 : i32 = data[3];
-          grey = (0.5 + (f32(x_186) / 10.0));
-        } else {
-          let x_191 : f32 = gl_FragCoord.y;
-          if ((i32(x_191) < 150)) {
-            int_i = 1;
-            loop {
-              let x_201 : i32 = int_i;
-              let x_203 : f32 = x_28.injectionSwitch.x;
-              if ((x_201 > i32(x_203))) {
-              } else {
-                break;
-              }
-              discard;
-            }
-          } else {
-            let x_208 : f32 = gl_FragCoord.y;
-            if ((i32(x_208) < 180)) {
-              let x_215 : i32 = data[5];
-              grey = (0.5 + (f32(x_215) / 10.0));
-            } else {
-              let x_220 : f32 = gl_FragCoord.y;
-              if ((i32(x_220) < 210)) {
-                let x_227 : i32 = data[6];
-                grey = (0.5 + (f32(x_227) / 10.0));
-              } else {
-                let x_232 : f32 = gl_FragCoord.y;
-                if ((i32(x_232) < 240)) {
-                  let x_239 : i32 = data[7];
-                  grey = (0.5 + (f32(x_239) / 10.0));
-                } else {
-                  let x_244 : f32 = gl_FragCoord.y;
-                  if ((i32(x_244) < 270)) {
-                    let x_251 : i32 = data[8];
-                    grey = (0.5 + (f32(x_251) / 10.0));
-                  } else {
-                    discard;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  let x_255 : f32 = grey;
-  let x_256 : vec3<f32> = vec3<f32>(x_255, x_255, x_255);
-  x_GLF_color = vec4<f32>(x_256.x, x_256.y, x_256.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.hlsl
deleted file mode 100644
index c39795d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,240 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_230 = i;
-  const int x_232 = obj.numbers[x_230];
-  temp = x_232;
-  const int x_233 = i;
-  const int x_234 = j;
-  const int x_236 = obj.numbers[x_234];
-  obj.numbers[x_233] = x_236;
-  const int x_238 = j;
-  obj.numbers[x_238] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_242 = h;
-  const int x_244 = obj.numbers[x_242];
-  pivot = x_244;
-  const int x_245 = l;
-  i_1 = (x_245 - 1);
-  const int x_247 = l;
-  j_1 = x_247;
-  while (true) {
-    const int x_252 = j_1;
-    const int x_253 = h;
-    if ((x_252 <= (x_253 - 1))) {
-    } else {
-      break;
-    }
-    const int x_259 = obj.numbers[j_1];
-    if ((x_259 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  i_1 = (i_1 + 1);
-  param_2 = i_1;
-  const int x_274 = h;
-  param_3 = x_274;
-  swap_i1_i1_(param_2, param_3);
-  return i_1;
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int int_a = 0;
-  int x_278 = 0;
-  int x_279 = 0;
-  int clamp_a = 0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_281 = (top + 1);
-  top = x_281;
-  stack[x_281] = l_1;
-  const float x_285 = gl_FragCoord.y;
-  if ((x_285 >= 0.0f)) {
-    const int x_290 = h_1;
-    if (false) {
-      x_279 = 1;
-    } else {
-      x_279 = (h_1 << asuint(0));
-    }
-    x_278 = (x_290 | x_279);
-  } else {
-    x_278 = 1;
-  }
-  int_a = x_278;
-  clamp_a = clamp(h_1, h_1, int_a);
-  const int x_304 = (top + 1);
-  top = x_304;
-  stack[x_304] = (clamp_a / 1);
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_315 = top;
-    top = (x_315 - 1);
-    const int x_318 = stack[x_315];
-    h_1 = x_318;
-    const int x_319 = top;
-    top = (x_319 - 1);
-    const int x_322 = stack[x_319];
-    l_1 = x_322;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_325 = performPartition_i1_i1_(param_4, param_5);
-    p = x_325;
-    if (((p - 1) > l_1)) {
-      const int x_333 = (top + 1);
-      top = x_333;
-      stack[x_333] = l_1;
-      const int x_337 = (top + 1);
-      top = x_337;
-      stack[x_337] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_348 = (top + 1);
-      top = x_348;
-      stack[x_348] = (p + 1);
-      const int x_353 = (top + 1);
-      top = x_353;
-      stack[x_353] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_97 = i_2;
-      const int x_100 = obj.numbers[i_2];
-      const int x_103 = obj.numbers[i_2];
-      obj.numbers[x_97] = (x_100 * x_103);
-    }
-  }
-  quicksort_();
-  const float4 x_109 = gl_FragCoord;
-  const float2 x_112 = asfloat(x_34[0].xy);
-  uv = (float2(x_109.x, x_109.y) / x_112);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_115 = obj.numbers[0];
-  const float x_118 = color.x;
-  color.x = (x_118 + float(x_115));
-  const float x_122 = uv.x;
-  if ((x_122 > 0.25f)) {
-    const int x_127 = obj.numbers[1];
-    const float x_130 = color.x;
-    color.x = (x_130 + float(x_127));
-  }
-  const float x_134 = uv.x;
-  if ((x_134 > 0.5f)) {
-    const int x_139 = obj.numbers[2];
-    const float x_142 = color.y;
-    color.y = (x_142 + float(x_139));
-  }
-  const float x_146 = uv.x;
-  if ((x_146 > 0.75f)) {
-    const int x_151 = obj.numbers[3];
-    const float x_154 = color.z;
-    color.z = (x_154 + float(x_151));
-  }
-  const int x_158 = obj.numbers[4];
-  const float x_161 = color.y;
-  color.y = (x_161 + float(x_158));
-  const float x_165 = uv.y;
-  if ((x_165 > 0.25f)) {
-    const int x_170 = obj.numbers[5];
-    const float x_173 = color.x;
-    color.x = (x_173 + float(x_170));
-  }
-  const float x_177 = uv.y;
-  if ((x_177 > 0.5f)) {
-    const int x_182 = obj.numbers[6];
-    const float x_185 = color.y;
-    color.y = (x_185 + float(x_182));
-  }
-  const float x_189 = uv.y;
-  if ((x_189 > 0.75f)) {
-    const int x_194 = obj.numbers[7];
-    const float x_197 = color.z;
-    color.z = (x_197 + float(x_194));
-  }
-  const int x_201 = obj.numbers[8];
-  const float x_204 = color.z;
-  color.z = (x_204 + float(x_201));
-  const float x_208 = uv.x;
-  const float x_210 = uv.y;
-  if ((abs((x_208 - x_210)) < 0.25f)) {
-    const int x_217 = obj.numbers[9];
-    const float x_220 = color.x;
-    color.x = (x_220 + float(x_217));
-  }
-  const float3 x_224 = normalize(color);
-  x_GLF_color = float4(x_224.x, x_224.y, x_224.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_5 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x00000212422D4360(146,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x00000212422D4360(101,19-29): warning X3556: integer divides may be much slower, try using uints if possible.
-C:\src\tint\test\Shader@0x00000212422D4360(20,3-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x00000212422D4360(41,3-14): error X3511: forced to unroll loop, but unrolling failed.
-C:\src\tint\test\Shader@0x00000212422D4360(102,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.msl
deleted file mode 100644
index 04887e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.msl
+++ /dev/null
@@ -1,286 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_3) {
-  int temp = 0;
-  int const x_230 = *(i);
-  int const x_232 = (*(tint_symbol_3)).numbers.arr[x_230];
-  temp = x_232;
-  int const x_233 = *(i);
-  int const x_234 = *(j);
-  int const x_236 = (*(tint_symbol_3)).numbers.arr[x_234];
-  (*(tint_symbol_3)).numbers.arr[x_233] = x_236;
-  int const x_238 = *(j);
-  int const x_239 = temp;
-  (*(tint_symbol_3)).numbers.arr[x_238] = x_239;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_4) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_242 = *(h);
-  int const x_244 = (*(tint_symbol_4)).numbers.arr[x_242];
-  pivot = x_244;
-  int const x_245 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_245) - as_type<uint>(1)));
-  int const x_247 = *(l);
-  j_1 = x_247;
-  while (true) {
-    int const x_252 = j_1;
-    int const x_253 = *(h);
-    if ((x_252 <= as_type<int>((as_type<uint>(x_253) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_257 = j_1;
-    int const x_259 = (*(tint_symbol_4)).numbers.arr[x_257];
-    int const x_260 = pivot;
-    if ((x_259 <= x_260)) {
-      int const x_264 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-      int const x_266 = i_1;
-      param = x_266;
-      int const x_267 = j_1;
-      param_1 = x_267;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_4);
-    }
-    {
-      int const x_269 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_269) + as_type<uint>(1)));
-    }
-  }
-  int const x_271 = i_1;
-  i_1 = as_type<int>((as_type<uint>(x_271) + as_type<uint>(1)));
-  int const x_273 = i_1;
-  param_2 = x_273;
-  int const x_274 = *(h);
-  param_3 = x_274;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_4);
-  int const x_276 = i_1;
-  return x_276;
-}
-
-void quicksort_(thread float4* const tint_symbol_5, thread QuicksortObject* const tint_symbol_6) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int int_a = 0;
-  int x_278 = 0;
-  int x_279 = 0;
-  int clamp_a = 0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_280 = top;
-  int const x_281 = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
-  top = x_281;
-  int const x_282 = l_1;
-  stack.arr[x_281] = x_282;
-  float const x_285 = (*(tint_symbol_5)).y;
-  if ((x_285 >= 0.0f)) {
-    int const x_290 = h_1;
-    if (false) {
-      x_279 = 1;
-    } else {
-      int const x_294 = h_1;
-      x_279 = as_type<int>((as_type<uint>(x_294) << as_type<uint>(0)));
-    }
-    int const x_296 = x_279;
-    x_278 = (x_290 | x_296);
-  } else {
-    x_278 = 1;
-  }
-  int const x_298 = x_278;
-  int_a = x_298;
-  int const x_299 = h_1;
-  int const x_300 = h_1;
-  int const x_301 = int_a;
-  clamp_a = clamp(x_299, x_300, x_301);
-  int const x_303 = top;
-  int const x_304 = as_type<int>((as_type<uint>(x_303) + as_type<uint>(1)));
-  top = x_304;
-  int const x_305 = clamp_a;
-  stack.arr[x_304] = (x_305 / 1);
-  while (true) {
-    int const x_312 = top;
-    if ((x_312 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_315 = top;
-    top = as_type<int>((as_type<uint>(x_315) - as_type<uint>(1)));
-    int const x_318 = stack.arr[x_315];
-    h_1 = x_318;
-    int const x_319 = top;
-    top = as_type<int>((as_type<uint>(x_319) - as_type<uint>(1)));
-    int const x_322 = stack.arr[x_319];
-    l_1 = x_322;
-    int const x_323 = l_1;
-    param_4 = x_323;
-    int const x_324 = h_1;
-    param_5 = x_324;
-    int const x_325 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_6);
-    p = x_325;
-    int const x_326 = p;
-    int const x_328 = l_1;
-    if ((as_type<int>((as_type<uint>(x_326) - as_type<uint>(1))) > x_328)) {
-      int const x_332 = top;
-      int const x_333 = as_type<int>((as_type<uint>(x_332) + as_type<uint>(1)));
-      top = x_333;
-      int const x_334 = l_1;
-      stack.arr[x_333] = x_334;
-      int const x_336 = top;
-      int const x_337 = as_type<int>((as_type<uint>(x_336) + as_type<uint>(1)));
-      top = x_337;
-      int const x_338 = p;
-      stack.arr[x_337] = as_type<int>((as_type<uint>(x_338) - as_type<uint>(1)));
-    }
-    int const x_341 = p;
-    int const x_343 = h_1;
-    if ((as_type<int>((as_type<uint>(x_341) + as_type<uint>(1))) < x_343)) {
-      int const x_347 = top;
-      int const x_348 = as_type<int>((as_type<uint>(x_347) + as_type<uint>(1)));
-      top = x_348;
-      int const x_349 = p;
-      stack.arr[x_348] = as_type<int>((as_type<uint>(x_349) + as_type<uint>(1)));
-      int const x_352 = top;
-      int const x_353 = as_type<int>((as_type<uint>(x_352) + as_type<uint>(1)));
-      top = x_353;
-      int const x_354 = h_1;
-      stack.arr[x_353] = x_354;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_34, thread QuicksortObject* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  i_2 = 0;
-  while (true) {
-    int const x_90 = i_2;
-    if ((x_90 < 10)) {
-    } else {
-      break;
-    }
-    int const x_93 = i_2;
-    int const x_94 = i_2;
-    (*(tint_symbol_7)).numbers.arr[x_93] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_94)));
-    int const x_97 = i_2;
-    int const x_98 = i_2;
-    int const x_100 = (*(tint_symbol_7)).numbers.arr[x_98];
-    int const x_101 = i_2;
-    int const x_103 = (*(tint_symbol_7)).numbers.arr[x_101];
-    (*(tint_symbol_7)).numbers.arr[x_97] = as_type<int>((as_type<uint>(x_100) * as_type<uint>(x_103)));
-    {
-      int const x_106 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_8, tint_symbol_7);
-  float4 const x_109 = *(tint_symbol_8);
-  float2 const x_112 = x_34.resolution;
-  uv = (float2(x_109.x, x_109.y) / x_112);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_115 = (*(tint_symbol_7)).numbers.arr[0];
-  float const x_118 = color.x;
-  color.x = (x_118 + float(x_115));
-  float const x_122 = uv.x;
-  if ((x_122 > 0.25f)) {
-    int const x_127 = (*(tint_symbol_7)).numbers.arr[1];
-    float const x_130 = color.x;
-    color.x = (x_130 + float(x_127));
-  }
-  float const x_134 = uv.x;
-  if ((x_134 > 0.5f)) {
-    int const x_139 = (*(tint_symbol_7)).numbers.arr[2];
-    float const x_142 = color.y;
-    color.y = (x_142 + float(x_139));
-  }
-  float const x_146 = uv.x;
-  if ((x_146 > 0.75f)) {
-    int const x_151 = (*(tint_symbol_7)).numbers.arr[3];
-    float const x_154 = color.z;
-    color.z = (x_154 + float(x_151));
-  }
-  int const x_158 = (*(tint_symbol_7)).numbers.arr[4];
-  float const x_161 = color.y;
-  color.y = (x_161 + float(x_158));
-  float const x_165 = uv.y;
-  if ((x_165 > 0.25f)) {
-    int const x_170 = (*(tint_symbol_7)).numbers.arr[5];
-    float const x_173 = color.x;
-    color.x = (x_173 + float(x_170));
-  }
-  float const x_177 = uv.y;
-  if ((x_177 > 0.5f)) {
-    int const x_182 = (*(tint_symbol_7)).numbers.arr[6];
-    float const x_185 = color.y;
-    color.y = (x_185 + float(x_182));
-  }
-  float const x_189 = uv.y;
-  if ((x_189 > 0.75f)) {
-    int const x_194 = (*(tint_symbol_7)).numbers.arr[7];
-    float const x_197 = color.z;
-    color.z = (x_197 + float(x_194));
-  }
-  int const x_201 = (*(tint_symbol_7)).numbers.arr[8];
-  float const x_204 = color.z;
-  color.z = (x_204 + float(x_201));
-  float const x_208 = uv.x;
-  float const x_210 = uv.y;
-  if ((fabs((x_208 - x_210)) < 0.25f)) {
-    int const x_217 = (*(tint_symbol_7)).numbers.arr[9];
-    float const x_220 = color.x;
-    color.x = (x_220 + float(x_217));
-  }
-  float3 const x_223 = color;
-  float3 const x_224 = normalize(x_223);
-  *(tint_symbol_9) = float4(x_224.x, x_224.y, x_224.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread QuicksortObject* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_34, tint_symbol_11, tint_symbol_10, tint_symbol_12);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_12)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_13 = 0.0f;
-  thread QuicksortObject tint_symbol_14 = {};
-  thread float4 tint_symbol_15 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, gl_FragCoord_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.spvasm
deleted file mode 100644
index 6e69563..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,587 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 402
-; Schema: 0
-               OpCapability Shader
-        %156 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %int_a "int_a"
-               OpName %x_278 "x_278"
-               OpName %x_279 "x_279"
-               OpName %clamp_a "clamp_a"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %15 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %31 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %49 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %109 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %117 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %219 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %223 = OpConstantNull %v3float
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %261 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float
-        %389 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %23
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %29 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %31
-         %33 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Private_int %obj %uint_0 %33
-         %37 = OpLoad %int %36
-               OpStore %temp %37
-         %39 = OpLoad %int %i
-         %41 = OpLoad %int %j
-         %42 = OpAccessChain %_ptr_Private_int %obj %uint_0 %41
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Private_int %obj %uint_0 %39
-               OpStore %44 %43
-         %46 = OpLoad %int %j
-         %47 = OpLoad %int %temp
-         %48 = OpAccessChain %_ptr_Private_int %obj %uint_0 %46
-               OpStore %48 %47
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %49
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %53 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %31
-        %i_1 = OpVariable %_ptr_Function_int Function %31
-        %j_1 = OpVariable %_ptr_Function_int Function %31
-      %param = OpVariable %_ptr_Function_int Function %31
-    %param_1 = OpVariable %_ptr_Function_int Function %31
-    %param_2 = OpVariable %_ptr_Function_int Function %31
-    %param_3 = OpVariable %_ptr_Function_int Function %31
-         %62 = OpLoad %int %h
-         %63 = OpAccessChain %_ptr_Private_int %obj %uint_0 %62
-         %64 = OpLoad %int %63
-               OpStore %pivot %64
-         %66 = OpLoad %int %l
-         %68 = OpISub %int %66 %int_1
-               OpStore %i_1 %68
-         %70 = OpLoad %int %l
-               OpStore %j_1 %70
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %j_1
-         %77 = OpLoad %int %h
-         %78 = OpISub %int %77 %int_1
-         %79 = OpSLessThanEqual %bool %75 %78
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %72
-         %81 = OpLabel
-         %84 = OpLoad %int %j_1
-         %85 = OpAccessChain %_ptr_Private_int %obj %uint_0 %84
-         %86 = OpLoad %int %85
-         %87 = OpLoad %int %pivot
-         %88 = OpSLessThanEqual %bool %86 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %89
-         %90 = OpLabel
-         %91 = OpLoad %int %i_1
-         %92 = OpIAdd %int %91 %int_1
-               OpStore %i_1 %92
-         %93 = OpLoad %int %i_1
-               OpStore %param %93
-         %94 = OpLoad %int %j_1
-               OpStore %param_1 %94
-         %95 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %89
-         %89 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-         %98 = OpLoad %int %j_1
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %j_1 %99
-               OpBranch %71
-         %72 = OpLabel
-        %100 = OpLoad %int %i_1
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %i_1 %101
-        %102 = OpLoad %int %i_1
-               OpStore %param_2 %102
-        %104 = OpLoad %int %h
-               OpStore %param_3 %104
-        %105 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %108 = OpLoad %int %i_1
-               OpReturnValue %108
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %109
-        %111 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %31
-        %h_1 = OpVariable %_ptr_Function_int Function %31
-        %top = OpVariable %_ptr_Function_int Function %31
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %117
-      %int_a = OpVariable %_ptr_Function_int Function %31
-      %x_278 = OpVariable %_ptr_Function_int Function %31
-      %x_279 = OpVariable %_ptr_Function_int Function %31
-    %clamp_a = OpVariable %_ptr_Function_int Function %31
-          %p = OpVariable %_ptr_Function_int Function %31
-    %param_4 = OpVariable %_ptr_Function_int Function %31
-    %param_5 = OpVariable %_ptr_Function_int Function %31
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %128 = OpLoad %int %top
-        %129 = OpIAdd %int %128 %int_1
-               OpStore %top %129
-        %130 = OpLoad %int %l_1
-        %131 = OpAccessChain %_ptr_Function_int %stack %129
-               OpStore %131 %130
-        %134 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %135 = OpLoad %float %134
-        %137 = OpFOrdGreaterThanEqual %bool %135 %float_0
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %140
-        %139 = OpLabel
-        %141 = OpLoad %int %h_1
-               OpSelectionMerge %143 None
-               OpBranchConditional %false %144 %145
-        %144 = OpLabel
-               OpStore %x_279 %int_1
-               OpBranch %143
-        %145 = OpLabel
-        %146 = OpLoad %int %h_1
-        %147 = OpBitcast %uint %int_0
-        %148 = OpShiftLeftLogical %int %146 %147
-               OpStore %x_279 %148
-               OpBranch %143
-        %143 = OpLabel
-        %149 = OpLoad %int %x_279
-        %150 = OpBitwiseOr %int %141 %149
-               OpStore %x_278 %150
-               OpBranch %138
-        %140 = OpLabel
-               OpStore %x_278 %int_1
-               OpBranch %138
-        %138 = OpLabel
-        %151 = OpLoad %int %x_278
-               OpStore %int_a %151
-        %152 = OpLoad %int %h_1
-        %153 = OpLoad %int %h_1
-        %154 = OpLoad %int %int_a
-        %155 = OpExtInst %int %156 SClamp %152 %153 %154
-               OpStore %clamp_a %155
-        %157 = OpLoad %int %top
-        %158 = OpIAdd %int %157 %int_1
-               OpStore %top %158
-        %159 = OpLoad %int %clamp_a
-        %160 = OpAccessChain %_ptr_Function_int %stack %158
-        %161 = OpSDiv %int %159 %int_1
-               OpStore %160 %161
-               OpBranch %162
-        %162 = OpLabel
-               OpLoopMerge %163 %164 None
-               OpBranch %165
-        %165 = OpLabel
-        %166 = OpLoad %int %top
-        %167 = OpSGreaterThanEqual %bool %166 %int_0
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %163
-        %168 = OpLabel
-        %171 = OpLoad %int %top
-        %172 = OpISub %int %171 %int_1
-               OpStore %top %172
-        %173 = OpAccessChain %_ptr_Function_int %stack %171
-        %174 = OpLoad %int %173
-               OpStore %h_1 %174
-        %175 = OpLoad %int %top
-        %176 = OpISub %int %175 %int_1
-               OpStore %top %176
-        %177 = OpAccessChain %_ptr_Function_int %stack %175
-        %178 = OpLoad %int %177
-               OpStore %l_1 %178
-        %179 = OpLoad %int %l_1
-               OpStore %param_4 %179
-        %180 = OpLoad %int %h_1
-               OpStore %param_5 %180
-        %181 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %181
-        %184 = OpLoad %int %p
-        %185 = OpLoad %int %l_1
-        %186 = OpISub %int %184 %int_1
-        %187 = OpSGreaterThan %bool %186 %185
-               OpSelectionMerge %188 None
-               OpBranchConditional %187 %189 %188
-        %189 = OpLabel
-        %190 = OpLoad %int %top
-        %191 = OpIAdd %int %190 %int_1
-               OpStore %top %191
-        %192 = OpLoad %int %l_1
-        %193 = OpAccessChain %_ptr_Function_int %stack %191
-               OpStore %193 %192
-        %194 = OpLoad %int %top
-        %195 = OpIAdd %int %194 %int_1
-               OpStore %top %195
-        %196 = OpLoad %int %p
-        %197 = OpAccessChain %_ptr_Function_int %stack %195
-        %198 = OpISub %int %196 %int_1
-               OpStore %197 %198
-               OpBranch %188
-        %188 = OpLabel
-        %199 = OpLoad %int %p
-        %200 = OpLoad %int %h_1
-        %201 = OpIAdd %int %199 %int_1
-        %202 = OpSLessThan %bool %201 %200
-               OpSelectionMerge %203 None
-               OpBranchConditional %202 %204 %203
-        %204 = OpLabel
-        %205 = OpLoad %int %top
-        %206 = OpIAdd %int %205 %int_1
-               OpStore %top %206
-        %207 = OpLoad %int %p
-        %208 = OpAccessChain %_ptr_Function_int %stack %206
-        %209 = OpIAdd %int %207 %int_1
-               OpStore %208 %209
-        %210 = OpLoad %int %top
-        %211 = OpIAdd %int %210 %int_1
-               OpStore %top %211
-        %212 = OpLoad %int %h_1
-        %213 = OpAccessChain %_ptr_Function_int %stack %211
-               OpStore %213 %212
-               OpBranch %203
-        %203 = OpLabel
-               OpBranch %164
-        %164 = OpLabel
-               OpBranch %162
-        %163 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %109
-        %215 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %31
-         %uv = OpVariable %_ptr_Function_v2float Function %219
-      %color = OpVariable %_ptr_Function_v3float Function %223
-               OpStore %i_2 %int_0
-               OpBranch %224
-        %224 = OpLabel
-               OpLoopMerge %225 %226 None
-               OpBranch %227
-        %227 = OpLabel
-        %228 = OpLoad %int %i_2
-        %230 = OpSLessThan %bool %228 %int_10
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %233
-        %232 = OpLabel
-               OpBranch %231
-        %233 = OpLabel
-               OpBranch %225
-        %231 = OpLabel
-        %234 = OpLoad %int %i_2
-        %235 = OpLoad %int %i_2
-        %236 = OpAccessChain %_ptr_Private_int %obj %uint_0 %234
-        %237 = OpISub %int %int_10 %235
-               OpStore %236 %237
-        %238 = OpLoad %int %i_2
-        %239 = OpLoad %int %i_2
-        %240 = OpAccessChain %_ptr_Private_int %obj %uint_0 %239
-        %241 = OpLoad %int %240
-        %242 = OpLoad %int %i_2
-        %243 = OpAccessChain %_ptr_Private_int %obj %uint_0 %242
-        %244 = OpLoad %int %243
-        %245 = OpAccessChain %_ptr_Private_int %obj %uint_0 %238
-        %246 = OpIMul %int %241 %244
-               OpStore %245 %246
-               OpBranch %226
-        %226 = OpLabel
-        %247 = OpLoad %int %i_2
-        %248 = OpIAdd %int %247 %int_1
-               OpStore %i_2 %248
-               OpBranch %224
-        %225 = OpLabel
-        %249 = OpFunctionCall %void %quicksort_
-        %250 = OpLoad %v4float %gl_FragCoord
-        %252 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %253 = OpLoad %v2float %252
-        %254 = OpCompositeExtract %float %250 0
-        %255 = OpCompositeExtract %float %250 1
-        %256 = OpCompositeConstruct %v2float %254 %255
-        %257 = OpFDiv %v2float %256 %253
-               OpStore %uv %257
-               OpStore %color %261
-        %262 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %263 = OpLoad %int %262
-        %265 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %266 = OpLoad %float %265
-        %267 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %268 = OpConvertSToF %float %263
-        %269 = OpFAdd %float %266 %268
-               OpStore %267 %269
-        %270 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %271 = OpLoad %float %270
-        %273 = OpFOrdGreaterThan %bool %271 %float_0_25
-               OpSelectionMerge %274 None
-               OpBranchConditional %273 %275 %274
-        %275 = OpLabel
-        %276 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %277 = OpLoad %int %276
-        %278 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %279 = OpLoad %float %278
-        %280 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %281 = OpConvertSToF %float %277
-        %282 = OpFAdd %float %279 %281
-               OpStore %280 %282
-               OpBranch %274
-        %274 = OpLabel
-        %283 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %284 = OpLoad %float %283
-        %286 = OpFOrdGreaterThan %bool %284 %float_0_5
-               OpSelectionMerge %287 None
-               OpBranchConditional %286 %288 %287
-        %288 = OpLabel
-        %290 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %291 = OpLoad %int %290
-        %292 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %293 = OpLoad %float %292
-        %294 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %295 = OpConvertSToF %float %291
-        %296 = OpFAdd %float %293 %295
-               OpStore %294 %296
-               OpBranch %287
-        %287 = OpLabel
-        %297 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %298 = OpLoad %float %297
-        %300 = OpFOrdGreaterThan %bool %298 %float_0_75
-               OpSelectionMerge %301 None
-               OpBranchConditional %300 %302 %301
-        %302 = OpLabel
-        %304 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %305 = OpLoad %int %304
-        %307 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %308 = OpLoad %float %307
-        %309 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %310 = OpConvertSToF %float %305
-        %311 = OpFAdd %float %308 %310
-               OpStore %309 %311
-               OpBranch %301
-        %301 = OpLabel
-        %313 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %314 = OpLoad %int %313
-        %315 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %316 = OpLoad %float %315
-        %317 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %318 = OpConvertSToF %float %314
-        %319 = OpFAdd %float %316 %318
-               OpStore %317 %319
-        %320 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %321 = OpLoad %float %320
-        %322 = OpFOrdGreaterThan %bool %321 %float_0_25
-               OpSelectionMerge %323 None
-               OpBranchConditional %322 %324 %323
-        %324 = OpLabel
-        %326 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %327 = OpLoad %int %326
-        %328 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %329 = OpLoad %float %328
-        %330 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %331 = OpConvertSToF %float %327
-        %332 = OpFAdd %float %329 %331
-               OpStore %330 %332
-               OpBranch %323
-        %323 = OpLabel
-        %333 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %334 = OpLoad %float %333
-        %335 = OpFOrdGreaterThan %bool %334 %float_0_5
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %336
-        %337 = OpLabel
-        %339 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %340 = OpLoad %int %339
-        %341 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %342 = OpLoad %float %341
-        %343 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %344 = OpConvertSToF %float %340
-        %345 = OpFAdd %float %342 %344
-               OpStore %343 %345
-               OpBranch %336
-        %336 = OpLabel
-        %346 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %347 = OpLoad %float %346
-        %348 = OpFOrdGreaterThan %bool %347 %float_0_75
-               OpSelectionMerge %349 None
-               OpBranchConditional %348 %350 %349
-        %350 = OpLabel
-        %352 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %353 = OpLoad %int %352
-        %354 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %355 = OpLoad %float %354
-        %356 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %357 = OpConvertSToF %float %353
-        %358 = OpFAdd %float %355 %357
-               OpStore %356 %358
-               OpBranch %349
-        %349 = OpLabel
-        %360 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %361 = OpLoad %int %360
-        %362 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %363 = OpLoad %float %362
-        %364 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %365 = OpConvertSToF %float %361
-        %366 = OpFAdd %float %363 %365
-               OpStore %364 %366
-        %367 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %368 = OpLoad %float %367
-        %369 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %370 = OpLoad %float %369
-        %372 = OpFSub %float %368 %370
-        %371 = OpExtInst %float %156 FAbs %372
-        %373 = OpFOrdLessThan %bool %371 %float_0_25
-               OpSelectionMerge %374 None
-               OpBranchConditional %373 %375 %374
-        %375 = OpLabel
-        %376 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %377 = OpLoad %int %376
-        %378 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %379 = OpLoad %float %378
-        %380 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %381 = OpConvertSToF %float %377
-        %382 = OpFAdd %float %379 %381
-               OpStore %380 %382
-               OpBranch %374
-        %374 = OpLabel
-        %383 = OpLoad %v3float %color
-        %384 = OpExtInst %v3float %156 Normalize %383
-        %385 = OpCompositeExtract %float %384 0
-        %386 = OpCompositeExtract %float %384 1
-        %387 = OpCompositeExtract %float %384 2
-        %388 = OpCompositeConstruct %v4float %385 %386 %387 %float_1
-               OpStore %x_GLF_color %388
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %389
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %393 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %394 = OpFunctionCall %void %main_1
-        %395 = OpLoad %v4float %x_GLF_color
-        %396 = OpCompositeConstruct %main_out %395
-               OpReturnValue %396
-               OpFunctionEnd
-       %main = OpFunction %void None %109
-        %398 = OpLabel
-        %400 = OpLoad %v4float %gl_FragCoord_param_1
-        %399 = OpFunctionCall %main_out %main_inner %400
-        %401 = OpCompositeExtract %v4float %399 0
-               OpStore %x_GLF_color_1_1 %401
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.wgsl
deleted file mode 100644
index 68052db..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,280 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_230 : i32 = *(i);
-  let x_232 : i32 = obj.numbers[x_230];
-  temp = x_232;
-  let x_233 : i32 = *(i);
-  let x_234 : i32 = *(j);
-  let x_236 : i32 = obj.numbers[x_234];
-  obj.numbers[x_233] = x_236;
-  let x_238 : i32 = *(j);
-  let x_239 : i32 = temp;
-  obj.numbers[x_238] = x_239;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_242 : i32 = *(h);
-  let x_244 : i32 = obj.numbers[x_242];
-  pivot = x_244;
-  let x_245 : i32 = *(l);
-  i_1 = (x_245 - 1);
-  let x_247 : i32 = *(l);
-  j_1 = x_247;
-  loop {
-    let x_252 : i32 = j_1;
-    let x_253 : i32 = *(h);
-    if ((x_252 <= (x_253 - 1))) {
-    } else {
-      break;
-    }
-    let x_257 : i32 = j_1;
-    let x_259 : i32 = obj.numbers[x_257];
-    let x_260 : i32 = pivot;
-    if ((x_259 <= x_260)) {
-      let x_264 : i32 = i_1;
-      i_1 = (x_264 + 1);
-      let x_266 : i32 = i_1;
-      param = x_266;
-      let x_267 : i32 = j_1;
-      param_1 = x_267;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_269 : i32 = j_1;
-      j_1 = (x_269 + 1);
-    }
-  }
-  let x_271 : i32 = i_1;
-  i_1 = (x_271 + 1);
-  let x_273 : i32 = i_1;
-  param_2 = x_273;
-  let x_274 : i32 = *(h);
-  param_3 = x_274;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_276 : i32 = i_1;
-  return x_276;
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var int_a : i32;
-  var x_278 : i32;
-  var x_279 : i32;
-  var clamp_a : i32;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_280 : i32 = top;
-  let x_281 : i32 = (x_280 + 1);
-  top = x_281;
-  let x_282 : i32 = l_1;
-  stack[x_281] = x_282;
-  let x_285 : f32 = gl_FragCoord.y;
-  if ((x_285 >= 0.0)) {
-    let x_290 : i32 = h_1;
-    if (false) {
-      x_279 = 1;
-    } else {
-      let x_294 : i32 = h_1;
-      x_279 = (x_294 << bitcast<u32>(0));
-    }
-    let x_296 : i32 = x_279;
-    x_278 = (x_290 | x_296);
-  } else {
-    x_278 = 1;
-  }
-  let x_298 : i32 = x_278;
-  int_a = x_298;
-  let x_299 : i32 = h_1;
-  let x_300 : i32 = h_1;
-  let x_301 : i32 = int_a;
-  clamp_a = clamp(x_299, x_300, x_301);
-  let x_303 : i32 = top;
-  let x_304 : i32 = (x_303 + 1);
-  top = x_304;
-  let x_305 : i32 = clamp_a;
-  stack[x_304] = (x_305 / 1);
-  loop {
-    let x_312 : i32 = top;
-    if ((x_312 >= 0)) {
-    } else {
-      break;
-    }
-    let x_315 : i32 = top;
-    top = (x_315 - 1);
-    let x_318 : i32 = stack[x_315];
-    h_1 = x_318;
-    let x_319 : i32 = top;
-    top = (x_319 - 1);
-    let x_322 : i32 = stack[x_319];
-    l_1 = x_322;
-    let x_323 : i32 = l_1;
-    param_4 = x_323;
-    let x_324 : i32 = h_1;
-    param_5 = x_324;
-    let x_325 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_325;
-    let x_326 : i32 = p;
-    let x_328 : i32 = l_1;
-    if (((x_326 - 1) > x_328)) {
-      let x_332 : i32 = top;
-      let x_333 : i32 = (x_332 + 1);
-      top = x_333;
-      let x_334 : i32 = l_1;
-      stack[x_333] = x_334;
-      let x_336 : i32 = top;
-      let x_337 : i32 = (x_336 + 1);
-      top = x_337;
-      let x_338 : i32 = p;
-      stack[x_337] = (x_338 - 1);
-    }
-    let x_341 : i32 = p;
-    let x_343 : i32 = h_1;
-    if (((x_341 + 1) < x_343)) {
-      let x_347 : i32 = top;
-      let x_348 : i32 = (x_347 + 1);
-      top = x_348;
-      let x_349 : i32 = p;
-      stack[x_348] = (x_349 + 1);
-      let x_352 : i32 = top;
-      let x_353 : i32 = (x_352 + 1);
-      top = x_353;
-      let x_354 : i32 = h_1;
-      stack[x_353] = x_354;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  i_2 = 0;
-  loop {
-    let x_90 : i32 = i_2;
-    if ((x_90 < 10)) {
-    } else {
-      break;
-    }
-    let x_93 : i32 = i_2;
-    let x_94 : i32 = i_2;
-    obj.numbers[x_93] = (10 - x_94);
-    let x_97 : i32 = i_2;
-    let x_98 : i32 = i_2;
-    let x_100 : i32 = obj.numbers[x_98];
-    let x_101 : i32 = i_2;
-    let x_103 : i32 = obj.numbers[x_101];
-    obj.numbers[x_97] = (x_100 * x_103);
-
-    continuing {
-      let x_106 : i32 = i_2;
-      i_2 = (x_106 + 1);
-    }
-  }
-  quicksort_();
-  let x_109 : vec4<f32> = gl_FragCoord;
-  let x_112 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_109.x, x_109.y) / x_112);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_115 : i32 = obj.numbers[0];
-  let x_118 : f32 = color.x;
-  color.x = (x_118 + f32(x_115));
-  let x_122 : f32 = uv.x;
-  if ((x_122 > 0.25)) {
-    let x_127 : i32 = obj.numbers[1];
-    let x_130 : f32 = color.x;
-    color.x = (x_130 + f32(x_127));
-  }
-  let x_134 : f32 = uv.x;
-  if ((x_134 > 0.5)) {
-    let x_139 : i32 = obj.numbers[2];
-    let x_142 : f32 = color.y;
-    color.y = (x_142 + f32(x_139));
-  }
-  let x_146 : f32 = uv.x;
-  if ((x_146 > 0.75)) {
-    let x_151 : i32 = obj.numbers[3];
-    let x_154 : f32 = color.z;
-    color.z = (x_154 + f32(x_151));
-  }
-  let x_158 : i32 = obj.numbers[4];
-  let x_161 : f32 = color.y;
-  color.y = (x_161 + f32(x_158));
-  let x_165 : f32 = uv.y;
-  if ((x_165 > 0.25)) {
-    let x_170 : i32 = obj.numbers[5];
-    let x_173 : f32 = color.x;
-    color.x = (x_173 + f32(x_170));
-  }
-  let x_177 : f32 = uv.y;
-  if ((x_177 > 0.5)) {
-    let x_182 : i32 = obj.numbers[6];
-    let x_185 : f32 = color.y;
-    color.y = (x_185 + f32(x_182));
-  }
-  let x_189 : f32 = uv.y;
-  if ((x_189 > 0.75)) {
-    let x_194 : i32 = obj.numbers[7];
-    let x_197 : f32 = color.z;
-    color.z = (x_197 + f32(x_194));
-  }
-  let x_201 : i32 = obj.numbers[8];
-  let x_204 : f32 = color.z;
-  color.z = (x_204 + f32(x_201));
-  let x_208 : f32 = uv.x;
-  let x_210 : f32 = uv.y;
-  if ((abs((x_208 - x_210)) < 0.25)) {
-    let x_217 : i32 = obj.numbers[9];
-    let x_220 : f32 = color.x;
-    color.x = (x_220 + f32(x_217));
-  }
-  let x_223 : vec3<f32> = color;
-  let x_224 : vec3<f32> = normalize(x_223);
-  x_GLF_color = vec4<f32>(x_224.x, x_224.y, x_224.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.hlsl
deleted file mode 100644
index 757f119..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,240 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_230 = i;
-  const int x_232 = obj.numbers[x_230];
-  temp = x_232;
-  const int x_233 = i;
-  const int x_234 = j;
-  const int x_236 = obj.numbers[x_234];
-  obj.numbers[x_233] = x_236;
-  const int x_238 = j;
-  obj.numbers[x_238] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_242 = h;
-  const int x_244 = obj.numbers[x_242];
-  pivot = x_244;
-  const int x_245 = l;
-  i_1 = (x_245 - 1);
-  const int x_247 = l;
-  j_1 = x_247;
-  while (true) {
-    const int x_252 = j_1;
-    const int x_253 = h;
-    if ((x_252 <= (x_253 - 1))) {
-    } else {
-      break;
-    }
-    const int x_259 = obj.numbers[j_1];
-    if ((x_259 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  i_1 = (i_1 + 1);
-  param_2 = i_1;
-  const int x_274 = h;
-  param_3 = x_274;
-  swap_i1_i1_(param_2, param_3);
-  return i_1;
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int int_a = 0;
-  int x_278 = 0;
-  int x_279 = 0;
-  int clamp_a = 0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_281 = (top + 1);
-  top = x_281;
-  stack[x_281] = l_1;
-  const float x_285 = gl_FragCoord.y;
-  if ((x_285 >= 0.0f)) {
-    const int x_290 = h_1;
-    if (false) {
-      x_279 = 1;
-    } else {
-      x_279 = (h_1 << asuint(0));
-    }
-    x_278 = (x_290 | x_279);
-  } else {
-    x_278 = 1;
-  }
-  int_a = x_278;
-  clamp_a = clamp(h_1, h_1, int_a);
-  const int x_304 = (top + 1);
-  top = x_304;
-  stack[x_304] = (clamp_a / 1);
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_315 = top;
-    top = (x_315 - 1);
-    const int x_318 = stack[x_315];
-    h_1 = x_318;
-    const int x_319 = top;
-    top = (x_319 - 1);
-    const int x_322 = stack[x_319];
-    l_1 = x_322;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_325 = performPartition_i1_i1_(param_4, param_5);
-    p = x_325;
-    if (((p - 1) > l_1)) {
-      const int x_333 = (top + 1);
-      top = x_333;
-      stack[x_333] = l_1;
-      const int x_337 = (top + 1);
-      top = x_337;
-      stack[x_337] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_348 = (top + 1);
-      top = x_348;
-      stack[x_348] = (p + 1);
-      const int x_353 = (top + 1);
-      top = x_353;
-      stack[x_353] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_97 = i_2;
-      const int x_100 = obj.numbers[i_2];
-      const int x_103 = obj.numbers[i_2];
-      obj.numbers[x_97] = (x_100 * x_103);
-    }
-  }
-  quicksort_();
-  const float4 x_109 = gl_FragCoord;
-  const float2 x_112 = asfloat(x_34[0].xy);
-  uv = (float2(x_109.x, x_109.y) / x_112);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_115 = obj.numbers[0];
-  const float x_118 = color.x;
-  color.x = (x_118 + float(x_115));
-  const float x_122 = uv.x;
-  if ((x_122 > 0.25f)) {
-    const int x_127 = obj.numbers[1];
-    const float x_130 = color.x;
-    color.x = (x_130 + float(x_127));
-  }
-  const float x_134 = uv.x;
-  if ((x_134 > 0.5f)) {
-    const int x_139 = obj.numbers[2];
-    const float x_142 = color.y;
-    color.y = (x_142 + float(x_139));
-  }
-  const float x_146 = uv.x;
-  if ((x_146 > 0.75f)) {
-    const int x_151 = obj.numbers[3];
-    const float x_154 = color.z;
-    color.z = (x_154 + float(x_151));
-  }
-  const int x_158 = obj.numbers[4];
-  const float x_161 = color.y;
-  color.y = (x_161 + float(x_158));
-  const float x_165 = uv.y;
-  if ((x_165 > 0.25f)) {
-    const int x_170 = obj.numbers[5];
-    const float x_173 = color.x;
-    color.x = (x_173 + float(x_170));
-  }
-  const float x_177 = uv.y;
-  if ((x_177 > 0.5f)) {
-    const int x_182 = obj.numbers[6];
-    const float x_185 = color.y;
-    color.y = (x_185 + float(x_182));
-  }
-  const float x_189 = uv.y;
-  if ((x_189 > 0.75f)) {
-    const int x_194 = obj.numbers[7];
-    const float x_197 = color.z;
-    color.z = (x_197 + float(x_194));
-  }
-  const int x_201 = obj.numbers[8];
-  const float x_204 = color.z;
-  color.z = (x_204 + float(x_201));
-  const float x_208 = uv.x;
-  const float x_210 = uv.y;
-  if ((abs((x_208 - x_210)) < 0.25f)) {
-    const int x_217 = obj.numbers[9];
-    const float x_220 = color.x;
-    color.x = (x_220 + float(x_217));
-  }
-  const float3 x_224 = normalize(color);
-  x_GLF_color = float4(x_224.x, x_224.y, x_224.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  const tint_symbol_2 tint_symbol_5 = {tint_symbol_3.x_GLF_color_1};
-  return tint_symbol_5;
-}
-C:\src\tint\test\Shader@0x000002356DF3F300(146,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000002356DF3F300(101,19-29): warning X3556: integer divides may be much slower, try using uints if possible.
-C:\src\tint\test\Shader@0x000002356DF3F300(20,3-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x000002356DF3F300(41,3-14): error X3511: forced to unroll loop, but unrolling failed.
-C:\src\tint\test\Shader@0x000002356DF3F300(102,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.msl
deleted file mode 100644
index 04887e8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.msl
+++ /dev/null
@@ -1,286 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_3) {
-  int temp = 0;
-  int const x_230 = *(i);
-  int const x_232 = (*(tint_symbol_3)).numbers.arr[x_230];
-  temp = x_232;
-  int const x_233 = *(i);
-  int const x_234 = *(j);
-  int const x_236 = (*(tint_symbol_3)).numbers.arr[x_234];
-  (*(tint_symbol_3)).numbers.arr[x_233] = x_236;
-  int const x_238 = *(j);
-  int const x_239 = temp;
-  (*(tint_symbol_3)).numbers.arr[x_238] = x_239;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_4) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_242 = *(h);
-  int const x_244 = (*(tint_symbol_4)).numbers.arr[x_242];
-  pivot = x_244;
-  int const x_245 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_245) - as_type<uint>(1)));
-  int const x_247 = *(l);
-  j_1 = x_247;
-  while (true) {
-    int const x_252 = j_1;
-    int const x_253 = *(h);
-    if ((x_252 <= as_type<int>((as_type<uint>(x_253) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_257 = j_1;
-    int const x_259 = (*(tint_symbol_4)).numbers.arr[x_257];
-    int const x_260 = pivot;
-    if ((x_259 <= x_260)) {
-      int const x_264 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_264) + as_type<uint>(1)));
-      int const x_266 = i_1;
-      param = x_266;
-      int const x_267 = j_1;
-      param_1 = x_267;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_4);
-    }
-    {
-      int const x_269 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_269) + as_type<uint>(1)));
-    }
-  }
-  int const x_271 = i_1;
-  i_1 = as_type<int>((as_type<uint>(x_271) + as_type<uint>(1)));
-  int const x_273 = i_1;
-  param_2 = x_273;
-  int const x_274 = *(h);
-  param_3 = x_274;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_4);
-  int const x_276 = i_1;
-  return x_276;
-}
-
-void quicksort_(thread float4* const tint_symbol_5, thread QuicksortObject* const tint_symbol_6) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int int_a = 0;
-  int x_278 = 0;
-  int x_279 = 0;
-  int clamp_a = 0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_280 = top;
-  int const x_281 = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
-  top = x_281;
-  int const x_282 = l_1;
-  stack.arr[x_281] = x_282;
-  float const x_285 = (*(tint_symbol_5)).y;
-  if ((x_285 >= 0.0f)) {
-    int const x_290 = h_1;
-    if (false) {
-      x_279 = 1;
-    } else {
-      int const x_294 = h_1;
-      x_279 = as_type<int>((as_type<uint>(x_294) << as_type<uint>(0)));
-    }
-    int const x_296 = x_279;
-    x_278 = (x_290 | x_296);
-  } else {
-    x_278 = 1;
-  }
-  int const x_298 = x_278;
-  int_a = x_298;
-  int const x_299 = h_1;
-  int const x_300 = h_1;
-  int const x_301 = int_a;
-  clamp_a = clamp(x_299, x_300, x_301);
-  int const x_303 = top;
-  int const x_304 = as_type<int>((as_type<uint>(x_303) + as_type<uint>(1)));
-  top = x_304;
-  int const x_305 = clamp_a;
-  stack.arr[x_304] = (x_305 / 1);
-  while (true) {
-    int const x_312 = top;
-    if ((x_312 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_315 = top;
-    top = as_type<int>((as_type<uint>(x_315) - as_type<uint>(1)));
-    int const x_318 = stack.arr[x_315];
-    h_1 = x_318;
-    int const x_319 = top;
-    top = as_type<int>((as_type<uint>(x_319) - as_type<uint>(1)));
-    int const x_322 = stack.arr[x_319];
-    l_1 = x_322;
-    int const x_323 = l_1;
-    param_4 = x_323;
-    int const x_324 = h_1;
-    param_5 = x_324;
-    int const x_325 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_6);
-    p = x_325;
-    int const x_326 = p;
-    int const x_328 = l_1;
-    if ((as_type<int>((as_type<uint>(x_326) - as_type<uint>(1))) > x_328)) {
-      int const x_332 = top;
-      int const x_333 = as_type<int>((as_type<uint>(x_332) + as_type<uint>(1)));
-      top = x_333;
-      int const x_334 = l_1;
-      stack.arr[x_333] = x_334;
-      int const x_336 = top;
-      int const x_337 = as_type<int>((as_type<uint>(x_336) + as_type<uint>(1)));
-      top = x_337;
-      int const x_338 = p;
-      stack.arr[x_337] = as_type<int>((as_type<uint>(x_338) - as_type<uint>(1)));
-    }
-    int const x_341 = p;
-    int const x_343 = h_1;
-    if ((as_type<int>((as_type<uint>(x_341) + as_type<uint>(1))) < x_343)) {
-      int const x_347 = top;
-      int const x_348 = as_type<int>((as_type<uint>(x_347) + as_type<uint>(1)));
-      top = x_348;
-      int const x_349 = p;
-      stack.arr[x_348] = as_type<int>((as_type<uint>(x_349) + as_type<uint>(1)));
-      int const x_352 = top;
-      int const x_353 = as_type<int>((as_type<uint>(x_352) + as_type<uint>(1)));
-      top = x_353;
-      int const x_354 = h_1;
-      stack.arr[x_353] = x_354;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_34, thread QuicksortObject* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  i_2 = 0;
-  while (true) {
-    int const x_90 = i_2;
-    if ((x_90 < 10)) {
-    } else {
-      break;
-    }
-    int const x_93 = i_2;
-    int const x_94 = i_2;
-    (*(tint_symbol_7)).numbers.arr[x_93] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_94)));
-    int const x_97 = i_2;
-    int const x_98 = i_2;
-    int const x_100 = (*(tint_symbol_7)).numbers.arr[x_98];
-    int const x_101 = i_2;
-    int const x_103 = (*(tint_symbol_7)).numbers.arr[x_101];
-    (*(tint_symbol_7)).numbers.arr[x_97] = as_type<int>((as_type<uint>(x_100) * as_type<uint>(x_103)));
-    {
-      int const x_106 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_8, tint_symbol_7);
-  float4 const x_109 = *(tint_symbol_8);
-  float2 const x_112 = x_34.resolution;
-  uv = (float2(x_109.x, x_109.y) / x_112);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_115 = (*(tint_symbol_7)).numbers.arr[0];
-  float const x_118 = color.x;
-  color.x = (x_118 + float(x_115));
-  float const x_122 = uv.x;
-  if ((x_122 > 0.25f)) {
-    int const x_127 = (*(tint_symbol_7)).numbers.arr[1];
-    float const x_130 = color.x;
-    color.x = (x_130 + float(x_127));
-  }
-  float const x_134 = uv.x;
-  if ((x_134 > 0.5f)) {
-    int const x_139 = (*(tint_symbol_7)).numbers.arr[2];
-    float const x_142 = color.y;
-    color.y = (x_142 + float(x_139));
-  }
-  float const x_146 = uv.x;
-  if ((x_146 > 0.75f)) {
-    int const x_151 = (*(tint_symbol_7)).numbers.arr[3];
-    float const x_154 = color.z;
-    color.z = (x_154 + float(x_151));
-  }
-  int const x_158 = (*(tint_symbol_7)).numbers.arr[4];
-  float const x_161 = color.y;
-  color.y = (x_161 + float(x_158));
-  float const x_165 = uv.y;
-  if ((x_165 > 0.25f)) {
-    int const x_170 = (*(tint_symbol_7)).numbers.arr[5];
-    float const x_173 = color.x;
-    color.x = (x_173 + float(x_170));
-  }
-  float const x_177 = uv.y;
-  if ((x_177 > 0.5f)) {
-    int const x_182 = (*(tint_symbol_7)).numbers.arr[6];
-    float const x_185 = color.y;
-    color.y = (x_185 + float(x_182));
-  }
-  float const x_189 = uv.y;
-  if ((x_189 > 0.75f)) {
-    int const x_194 = (*(tint_symbol_7)).numbers.arr[7];
-    float const x_197 = color.z;
-    color.z = (x_197 + float(x_194));
-  }
-  int const x_201 = (*(tint_symbol_7)).numbers.arr[8];
-  float const x_204 = color.z;
-  color.z = (x_204 + float(x_201));
-  float const x_208 = uv.x;
-  float const x_210 = uv.y;
-  if ((fabs((x_208 - x_210)) < 0.25f)) {
-    int const x_217 = (*(tint_symbol_7)).numbers.arr[9];
-    float const x_220 = color.x;
-    color.x = (x_220 + float(x_217));
-  }
-  float3 const x_223 = color;
-  float3 const x_224 = normalize(x_223);
-  *(tint_symbol_9) = float4(x_224.x, x_224.y, x_224.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread QuicksortObject* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_34, tint_symbol_11, tint_symbol_10, tint_symbol_12);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_12)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_13 = 0.0f;
-  thread QuicksortObject tint_symbol_14 = {};
-  thread float4 tint_symbol_15 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, gl_FragCoord_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.spvasm
deleted file mode 100644
index 6e69563..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,587 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 402
-; Schema: 0
-               OpCapability Shader
-        %156 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %int_a "int_a"
-               OpName %x_278 "x_278"
-               OpName %x_279 "x_279"
-               OpName %clamp_a "clamp_a"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %15 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %15
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %31 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %49 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %109 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %117 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-      %false = OpConstantFalse %bool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %219 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %223 = OpConstantNull %v3float
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_1 = OpConstant %float 1
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %261 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float
-        %389 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %23
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %29 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %31
-         %33 = OpLoad %int %i
-         %36 = OpAccessChain %_ptr_Private_int %obj %uint_0 %33
-         %37 = OpLoad %int %36
-               OpStore %temp %37
-         %39 = OpLoad %int %i
-         %41 = OpLoad %int %j
-         %42 = OpAccessChain %_ptr_Private_int %obj %uint_0 %41
-         %43 = OpLoad %int %42
-         %44 = OpAccessChain %_ptr_Private_int %obj %uint_0 %39
-               OpStore %44 %43
-         %46 = OpLoad %int %j
-         %47 = OpLoad %int %temp
-         %48 = OpAccessChain %_ptr_Private_int %obj %uint_0 %46
-               OpStore %48 %47
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %49
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %53 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %31
-        %i_1 = OpVariable %_ptr_Function_int Function %31
-        %j_1 = OpVariable %_ptr_Function_int Function %31
-      %param = OpVariable %_ptr_Function_int Function %31
-    %param_1 = OpVariable %_ptr_Function_int Function %31
-    %param_2 = OpVariable %_ptr_Function_int Function %31
-    %param_3 = OpVariable %_ptr_Function_int Function %31
-         %62 = OpLoad %int %h
-         %63 = OpAccessChain %_ptr_Private_int %obj %uint_0 %62
-         %64 = OpLoad %int %63
-               OpStore %pivot %64
-         %66 = OpLoad %int %l
-         %68 = OpISub %int %66 %int_1
-               OpStore %i_1 %68
-         %70 = OpLoad %int %l
-               OpStore %j_1 %70
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %j_1
-         %77 = OpLoad %int %h
-         %78 = OpISub %int %77 %int_1
-         %79 = OpSLessThanEqual %bool %75 %78
-               OpSelectionMerge %81 None
-               OpBranchConditional %79 %82 %83
-         %82 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-               OpBranch %72
-         %81 = OpLabel
-         %84 = OpLoad %int %j_1
-         %85 = OpAccessChain %_ptr_Private_int %obj %uint_0 %84
-         %86 = OpLoad %int %85
-         %87 = OpLoad %int %pivot
-         %88 = OpSLessThanEqual %bool %86 %87
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %89
-         %90 = OpLabel
-         %91 = OpLoad %int %i_1
-         %92 = OpIAdd %int %91 %int_1
-               OpStore %i_1 %92
-         %93 = OpLoad %int %i_1
-               OpStore %param %93
-         %94 = OpLoad %int %j_1
-               OpStore %param_1 %94
-         %95 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %89
-         %89 = OpLabel
-               OpBranch %73
-         %73 = OpLabel
-         %98 = OpLoad %int %j_1
-         %99 = OpIAdd %int %98 %int_1
-               OpStore %j_1 %99
-               OpBranch %71
-         %72 = OpLabel
-        %100 = OpLoad %int %i_1
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %i_1 %101
-        %102 = OpLoad %int %i_1
-               OpStore %param_2 %102
-        %104 = OpLoad %int %h
-               OpStore %param_3 %104
-        %105 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %108 = OpLoad %int %i_1
-               OpReturnValue %108
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %109
-        %111 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %31
-        %h_1 = OpVariable %_ptr_Function_int Function %31
-        %top = OpVariable %_ptr_Function_int Function %31
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %117
-      %int_a = OpVariable %_ptr_Function_int Function %31
-      %x_278 = OpVariable %_ptr_Function_int Function %31
-      %x_279 = OpVariable %_ptr_Function_int Function %31
-    %clamp_a = OpVariable %_ptr_Function_int Function %31
-          %p = OpVariable %_ptr_Function_int Function %31
-    %param_4 = OpVariable %_ptr_Function_int Function %31
-    %param_5 = OpVariable %_ptr_Function_int Function %31
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %128 = OpLoad %int %top
-        %129 = OpIAdd %int %128 %int_1
-               OpStore %top %129
-        %130 = OpLoad %int %l_1
-        %131 = OpAccessChain %_ptr_Function_int %stack %129
-               OpStore %131 %130
-        %134 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-        %135 = OpLoad %float %134
-        %137 = OpFOrdGreaterThanEqual %bool %135 %float_0
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %140
-        %139 = OpLabel
-        %141 = OpLoad %int %h_1
-               OpSelectionMerge %143 None
-               OpBranchConditional %false %144 %145
-        %144 = OpLabel
-               OpStore %x_279 %int_1
-               OpBranch %143
-        %145 = OpLabel
-        %146 = OpLoad %int %h_1
-        %147 = OpBitcast %uint %int_0
-        %148 = OpShiftLeftLogical %int %146 %147
-               OpStore %x_279 %148
-               OpBranch %143
-        %143 = OpLabel
-        %149 = OpLoad %int %x_279
-        %150 = OpBitwiseOr %int %141 %149
-               OpStore %x_278 %150
-               OpBranch %138
-        %140 = OpLabel
-               OpStore %x_278 %int_1
-               OpBranch %138
-        %138 = OpLabel
-        %151 = OpLoad %int %x_278
-               OpStore %int_a %151
-        %152 = OpLoad %int %h_1
-        %153 = OpLoad %int %h_1
-        %154 = OpLoad %int %int_a
-        %155 = OpExtInst %int %156 SClamp %152 %153 %154
-               OpStore %clamp_a %155
-        %157 = OpLoad %int %top
-        %158 = OpIAdd %int %157 %int_1
-               OpStore %top %158
-        %159 = OpLoad %int %clamp_a
-        %160 = OpAccessChain %_ptr_Function_int %stack %158
-        %161 = OpSDiv %int %159 %int_1
-               OpStore %160 %161
-               OpBranch %162
-        %162 = OpLabel
-               OpLoopMerge %163 %164 None
-               OpBranch %165
-        %165 = OpLabel
-        %166 = OpLoad %int %top
-        %167 = OpSGreaterThanEqual %bool %166 %int_0
-               OpSelectionMerge %168 None
-               OpBranchConditional %167 %169 %170
-        %169 = OpLabel
-               OpBranch %168
-        %170 = OpLabel
-               OpBranch %163
-        %168 = OpLabel
-        %171 = OpLoad %int %top
-        %172 = OpISub %int %171 %int_1
-               OpStore %top %172
-        %173 = OpAccessChain %_ptr_Function_int %stack %171
-        %174 = OpLoad %int %173
-               OpStore %h_1 %174
-        %175 = OpLoad %int %top
-        %176 = OpISub %int %175 %int_1
-               OpStore %top %176
-        %177 = OpAccessChain %_ptr_Function_int %stack %175
-        %178 = OpLoad %int %177
-               OpStore %l_1 %178
-        %179 = OpLoad %int %l_1
-               OpStore %param_4 %179
-        %180 = OpLoad %int %h_1
-               OpStore %param_5 %180
-        %181 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %181
-        %184 = OpLoad %int %p
-        %185 = OpLoad %int %l_1
-        %186 = OpISub %int %184 %int_1
-        %187 = OpSGreaterThan %bool %186 %185
-               OpSelectionMerge %188 None
-               OpBranchConditional %187 %189 %188
-        %189 = OpLabel
-        %190 = OpLoad %int %top
-        %191 = OpIAdd %int %190 %int_1
-               OpStore %top %191
-        %192 = OpLoad %int %l_1
-        %193 = OpAccessChain %_ptr_Function_int %stack %191
-               OpStore %193 %192
-        %194 = OpLoad %int %top
-        %195 = OpIAdd %int %194 %int_1
-               OpStore %top %195
-        %196 = OpLoad %int %p
-        %197 = OpAccessChain %_ptr_Function_int %stack %195
-        %198 = OpISub %int %196 %int_1
-               OpStore %197 %198
-               OpBranch %188
-        %188 = OpLabel
-        %199 = OpLoad %int %p
-        %200 = OpLoad %int %h_1
-        %201 = OpIAdd %int %199 %int_1
-        %202 = OpSLessThan %bool %201 %200
-               OpSelectionMerge %203 None
-               OpBranchConditional %202 %204 %203
-        %204 = OpLabel
-        %205 = OpLoad %int %top
-        %206 = OpIAdd %int %205 %int_1
-               OpStore %top %206
-        %207 = OpLoad %int %p
-        %208 = OpAccessChain %_ptr_Function_int %stack %206
-        %209 = OpIAdd %int %207 %int_1
-               OpStore %208 %209
-        %210 = OpLoad %int %top
-        %211 = OpIAdd %int %210 %int_1
-               OpStore %top %211
-        %212 = OpLoad %int %h_1
-        %213 = OpAccessChain %_ptr_Function_int %stack %211
-               OpStore %213 %212
-               OpBranch %203
-        %203 = OpLabel
-               OpBranch %164
-        %164 = OpLabel
-               OpBranch %162
-        %163 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %109
-        %215 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %31
-         %uv = OpVariable %_ptr_Function_v2float Function %219
-      %color = OpVariable %_ptr_Function_v3float Function %223
-               OpStore %i_2 %int_0
-               OpBranch %224
-        %224 = OpLabel
-               OpLoopMerge %225 %226 None
-               OpBranch %227
-        %227 = OpLabel
-        %228 = OpLoad %int %i_2
-        %230 = OpSLessThan %bool %228 %int_10
-               OpSelectionMerge %231 None
-               OpBranchConditional %230 %232 %233
-        %232 = OpLabel
-               OpBranch %231
-        %233 = OpLabel
-               OpBranch %225
-        %231 = OpLabel
-        %234 = OpLoad %int %i_2
-        %235 = OpLoad %int %i_2
-        %236 = OpAccessChain %_ptr_Private_int %obj %uint_0 %234
-        %237 = OpISub %int %int_10 %235
-               OpStore %236 %237
-        %238 = OpLoad %int %i_2
-        %239 = OpLoad %int %i_2
-        %240 = OpAccessChain %_ptr_Private_int %obj %uint_0 %239
-        %241 = OpLoad %int %240
-        %242 = OpLoad %int %i_2
-        %243 = OpAccessChain %_ptr_Private_int %obj %uint_0 %242
-        %244 = OpLoad %int %243
-        %245 = OpAccessChain %_ptr_Private_int %obj %uint_0 %238
-        %246 = OpIMul %int %241 %244
-               OpStore %245 %246
-               OpBranch %226
-        %226 = OpLabel
-        %247 = OpLoad %int %i_2
-        %248 = OpIAdd %int %247 %int_1
-               OpStore %i_2 %248
-               OpBranch %224
-        %225 = OpLabel
-        %249 = OpFunctionCall %void %quicksort_
-        %250 = OpLoad %v4float %gl_FragCoord
-        %252 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %253 = OpLoad %v2float %252
-        %254 = OpCompositeExtract %float %250 0
-        %255 = OpCompositeExtract %float %250 1
-        %256 = OpCompositeConstruct %v2float %254 %255
-        %257 = OpFDiv %v2float %256 %253
-               OpStore %uv %257
-               OpStore %color %261
-        %262 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %263 = OpLoad %int %262
-        %265 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %266 = OpLoad %float %265
-        %267 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %268 = OpConvertSToF %float %263
-        %269 = OpFAdd %float %266 %268
-               OpStore %267 %269
-        %270 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %271 = OpLoad %float %270
-        %273 = OpFOrdGreaterThan %bool %271 %float_0_25
-               OpSelectionMerge %274 None
-               OpBranchConditional %273 %275 %274
-        %275 = OpLabel
-        %276 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %277 = OpLoad %int %276
-        %278 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %279 = OpLoad %float %278
-        %280 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %281 = OpConvertSToF %float %277
-        %282 = OpFAdd %float %279 %281
-               OpStore %280 %282
-               OpBranch %274
-        %274 = OpLabel
-        %283 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %284 = OpLoad %float %283
-        %286 = OpFOrdGreaterThan %bool %284 %float_0_5
-               OpSelectionMerge %287 None
-               OpBranchConditional %286 %288 %287
-        %288 = OpLabel
-        %290 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %291 = OpLoad %int %290
-        %292 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %293 = OpLoad %float %292
-        %294 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %295 = OpConvertSToF %float %291
-        %296 = OpFAdd %float %293 %295
-               OpStore %294 %296
-               OpBranch %287
-        %287 = OpLabel
-        %297 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %298 = OpLoad %float %297
-        %300 = OpFOrdGreaterThan %bool %298 %float_0_75
-               OpSelectionMerge %301 None
-               OpBranchConditional %300 %302 %301
-        %302 = OpLabel
-        %304 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %305 = OpLoad %int %304
-        %307 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %308 = OpLoad %float %307
-        %309 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %310 = OpConvertSToF %float %305
-        %311 = OpFAdd %float %308 %310
-               OpStore %309 %311
-               OpBranch %301
-        %301 = OpLabel
-        %313 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %314 = OpLoad %int %313
-        %315 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %316 = OpLoad %float %315
-        %317 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %318 = OpConvertSToF %float %314
-        %319 = OpFAdd %float %316 %318
-               OpStore %317 %319
-        %320 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %321 = OpLoad %float %320
-        %322 = OpFOrdGreaterThan %bool %321 %float_0_25
-               OpSelectionMerge %323 None
-               OpBranchConditional %322 %324 %323
-        %324 = OpLabel
-        %326 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %327 = OpLoad %int %326
-        %328 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %329 = OpLoad %float %328
-        %330 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %331 = OpConvertSToF %float %327
-        %332 = OpFAdd %float %329 %331
-               OpStore %330 %332
-               OpBranch %323
-        %323 = OpLabel
-        %333 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %334 = OpLoad %float %333
-        %335 = OpFOrdGreaterThan %bool %334 %float_0_5
-               OpSelectionMerge %336 None
-               OpBranchConditional %335 %337 %336
-        %337 = OpLabel
-        %339 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %340 = OpLoad %int %339
-        %341 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %342 = OpLoad %float %341
-        %343 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %344 = OpConvertSToF %float %340
-        %345 = OpFAdd %float %342 %344
-               OpStore %343 %345
-               OpBranch %336
-        %336 = OpLabel
-        %346 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %347 = OpLoad %float %346
-        %348 = OpFOrdGreaterThan %bool %347 %float_0_75
-               OpSelectionMerge %349 None
-               OpBranchConditional %348 %350 %349
-        %350 = OpLabel
-        %352 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %353 = OpLoad %int %352
-        %354 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %355 = OpLoad %float %354
-        %356 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %357 = OpConvertSToF %float %353
-        %358 = OpFAdd %float %355 %357
-               OpStore %356 %358
-               OpBranch %349
-        %349 = OpLabel
-        %360 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %361 = OpLoad %int %360
-        %362 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %363 = OpLoad %float %362
-        %364 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %365 = OpConvertSToF %float %361
-        %366 = OpFAdd %float %363 %365
-               OpStore %364 %366
-        %367 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %368 = OpLoad %float %367
-        %369 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %370 = OpLoad %float %369
-        %372 = OpFSub %float %368 %370
-        %371 = OpExtInst %float %156 FAbs %372
-        %373 = OpFOrdLessThan %bool %371 %float_0_25
-               OpSelectionMerge %374 None
-               OpBranchConditional %373 %375 %374
-        %375 = OpLabel
-        %376 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %377 = OpLoad %int %376
-        %378 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %379 = OpLoad %float %378
-        %380 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %381 = OpConvertSToF %float %377
-        %382 = OpFAdd %float %379 %381
-               OpStore %380 %382
-               OpBranch %374
-        %374 = OpLabel
-        %383 = OpLoad %v3float %color
-        %384 = OpExtInst %v3float %156 Normalize %383
-        %385 = OpCompositeExtract %float %384 0
-        %386 = OpCompositeExtract %float %384 1
-        %387 = OpCompositeExtract %float %384 2
-        %388 = OpCompositeConstruct %v4float %385 %386 %387 %float_1
-               OpStore %x_GLF_color %388
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %389
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %393 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %394 = OpFunctionCall %void %main_1
-        %395 = OpLoad %v4float %x_GLF_color
-        %396 = OpCompositeConstruct %main_out %395
-               OpReturnValue %396
-               OpFunctionEnd
-       %main = OpFunction %void None %109
-        %398 = OpLabel
-        %400 = OpLoad %v4float %gl_FragCoord_param_1
-        %399 = OpFunctionCall %main_out %main_inner %400
-        %401 = OpCompositeExtract %v4float %399 0
-               OpStore %x_GLF_color_1_1 %401
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.wgsl
deleted file mode 100644
index 68052db..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,280 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_230 : i32 = *(i);
-  let x_232 : i32 = obj.numbers[x_230];
-  temp = x_232;
-  let x_233 : i32 = *(i);
-  let x_234 : i32 = *(j);
-  let x_236 : i32 = obj.numbers[x_234];
-  obj.numbers[x_233] = x_236;
-  let x_238 : i32 = *(j);
-  let x_239 : i32 = temp;
-  obj.numbers[x_238] = x_239;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_242 : i32 = *(h);
-  let x_244 : i32 = obj.numbers[x_242];
-  pivot = x_244;
-  let x_245 : i32 = *(l);
-  i_1 = (x_245 - 1);
-  let x_247 : i32 = *(l);
-  j_1 = x_247;
-  loop {
-    let x_252 : i32 = j_1;
-    let x_253 : i32 = *(h);
-    if ((x_252 <= (x_253 - 1))) {
-    } else {
-      break;
-    }
-    let x_257 : i32 = j_1;
-    let x_259 : i32 = obj.numbers[x_257];
-    let x_260 : i32 = pivot;
-    if ((x_259 <= x_260)) {
-      let x_264 : i32 = i_1;
-      i_1 = (x_264 + 1);
-      let x_266 : i32 = i_1;
-      param = x_266;
-      let x_267 : i32 = j_1;
-      param_1 = x_267;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_269 : i32 = j_1;
-      j_1 = (x_269 + 1);
-    }
-  }
-  let x_271 : i32 = i_1;
-  i_1 = (x_271 + 1);
-  let x_273 : i32 = i_1;
-  param_2 = x_273;
-  let x_274 : i32 = *(h);
-  param_3 = x_274;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_276 : i32 = i_1;
-  return x_276;
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var int_a : i32;
-  var x_278 : i32;
-  var x_279 : i32;
-  var clamp_a : i32;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_280 : i32 = top;
-  let x_281 : i32 = (x_280 + 1);
-  top = x_281;
-  let x_282 : i32 = l_1;
-  stack[x_281] = x_282;
-  let x_285 : f32 = gl_FragCoord.y;
-  if ((x_285 >= 0.0)) {
-    let x_290 : i32 = h_1;
-    if (false) {
-      x_279 = 1;
-    } else {
-      let x_294 : i32 = h_1;
-      x_279 = (x_294 << bitcast<u32>(0));
-    }
-    let x_296 : i32 = x_279;
-    x_278 = (x_290 | x_296);
-  } else {
-    x_278 = 1;
-  }
-  let x_298 : i32 = x_278;
-  int_a = x_298;
-  let x_299 : i32 = h_1;
-  let x_300 : i32 = h_1;
-  let x_301 : i32 = int_a;
-  clamp_a = clamp(x_299, x_300, x_301);
-  let x_303 : i32 = top;
-  let x_304 : i32 = (x_303 + 1);
-  top = x_304;
-  let x_305 : i32 = clamp_a;
-  stack[x_304] = (x_305 / 1);
-  loop {
-    let x_312 : i32 = top;
-    if ((x_312 >= 0)) {
-    } else {
-      break;
-    }
-    let x_315 : i32 = top;
-    top = (x_315 - 1);
-    let x_318 : i32 = stack[x_315];
-    h_1 = x_318;
-    let x_319 : i32 = top;
-    top = (x_319 - 1);
-    let x_322 : i32 = stack[x_319];
-    l_1 = x_322;
-    let x_323 : i32 = l_1;
-    param_4 = x_323;
-    let x_324 : i32 = h_1;
-    param_5 = x_324;
-    let x_325 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_325;
-    let x_326 : i32 = p;
-    let x_328 : i32 = l_1;
-    if (((x_326 - 1) > x_328)) {
-      let x_332 : i32 = top;
-      let x_333 : i32 = (x_332 + 1);
-      top = x_333;
-      let x_334 : i32 = l_1;
-      stack[x_333] = x_334;
-      let x_336 : i32 = top;
-      let x_337 : i32 = (x_336 + 1);
-      top = x_337;
-      let x_338 : i32 = p;
-      stack[x_337] = (x_338 - 1);
-    }
-    let x_341 : i32 = p;
-    let x_343 : i32 = h_1;
-    if (((x_341 + 1) < x_343)) {
-      let x_347 : i32 = top;
-      let x_348 : i32 = (x_347 + 1);
-      top = x_348;
-      let x_349 : i32 = p;
-      stack[x_348] = (x_349 + 1);
-      let x_352 : i32 = top;
-      let x_353 : i32 = (x_352 + 1);
-      top = x_353;
-      let x_354 : i32 = h_1;
-      stack[x_353] = x_354;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  i_2 = 0;
-  loop {
-    let x_90 : i32 = i_2;
-    if ((x_90 < 10)) {
-    } else {
-      break;
-    }
-    let x_93 : i32 = i_2;
-    let x_94 : i32 = i_2;
-    obj.numbers[x_93] = (10 - x_94);
-    let x_97 : i32 = i_2;
-    let x_98 : i32 = i_2;
-    let x_100 : i32 = obj.numbers[x_98];
-    let x_101 : i32 = i_2;
-    let x_103 : i32 = obj.numbers[x_101];
-    obj.numbers[x_97] = (x_100 * x_103);
-
-    continuing {
-      let x_106 : i32 = i_2;
-      i_2 = (x_106 + 1);
-    }
-  }
-  quicksort_();
-  let x_109 : vec4<f32> = gl_FragCoord;
-  let x_112 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_109.x, x_109.y) / x_112);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_115 : i32 = obj.numbers[0];
-  let x_118 : f32 = color.x;
-  color.x = (x_118 + f32(x_115));
-  let x_122 : f32 = uv.x;
-  if ((x_122 > 0.25)) {
-    let x_127 : i32 = obj.numbers[1];
-    let x_130 : f32 = color.x;
-    color.x = (x_130 + f32(x_127));
-  }
-  let x_134 : f32 = uv.x;
-  if ((x_134 > 0.5)) {
-    let x_139 : i32 = obj.numbers[2];
-    let x_142 : f32 = color.y;
-    color.y = (x_142 + f32(x_139));
-  }
-  let x_146 : f32 = uv.x;
-  if ((x_146 > 0.75)) {
-    let x_151 : i32 = obj.numbers[3];
-    let x_154 : f32 = color.z;
-    color.z = (x_154 + f32(x_151));
-  }
-  let x_158 : i32 = obj.numbers[4];
-  let x_161 : f32 = color.y;
-  color.y = (x_161 + f32(x_158));
-  let x_165 : f32 = uv.y;
-  if ((x_165 > 0.25)) {
-    let x_170 : i32 = obj.numbers[5];
-    let x_173 : f32 = color.x;
-    color.x = (x_173 + f32(x_170));
-  }
-  let x_177 : f32 = uv.y;
-  if ((x_177 > 0.5)) {
-    let x_182 : i32 = obj.numbers[6];
-    let x_185 : f32 = color.y;
-    color.y = (x_185 + f32(x_182));
-  }
-  let x_189 : f32 = uv.y;
-  if ((x_189 > 0.75)) {
-    let x_194 : i32 = obj.numbers[7];
-    let x_197 : f32 = color.z;
-    color.z = (x_197 + f32(x_194));
-  }
-  let x_201 : i32 = obj.numbers[8];
-  let x_204 : f32 = color.z;
-  color.z = (x_204 + f32(x_201));
-  let x_208 : f32 = uv.x;
-  let x_210 : f32 = uv.y;
-  if ((abs((x_208 - x_210)) < 0.25)) {
-    let x_217 : i32 = obj.numbers[9];
-    let x_220 : f32 = color.x;
-    color.x = (x_220 + f32(x_217));
-  }
-  let x_223 : vec3<f32> = color;
-  let x_224 : vec3<f32> = normalize(x_223);
-  x_GLF_color = vec4<f32>(x_224.x, x_224.y, x_224.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d58db35..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,225 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_239 = i;
-  const int x_241 = obj.numbers[x_239];
-  temp = x_241;
-  const int x_242 = i;
-  const int x_243 = j;
-  const int x_245 = obj.numbers[x_243];
-  obj.numbers[x_242] = x_245;
-  const int x_247 = j;
-  obj.numbers[x_247] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_251 = h;
-  const int x_253 = obj.numbers[x_251];
-  pivot = x_253;
-  const int x_254 = l;
-  i_1 = (x_254 - 1);
-  const int x_256 = l;
-  j_1 = x_256;
-  while (true) {
-    const int x_261 = j_1;
-    const int x_262 = h;
-    if ((x_261 <= (x_262 - 1))) {
-    } else {
-      break;
-    }
-    const int x_268 = obj.numbers[j_1];
-    if ((x_268 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_282 = h;
-  param_3 = x_282;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_288 = (top + 1);
-  top = x_288;
-  stack[x_288] = l_1;
-  const int x_292 = (top + 1);
-  top = x_292;
-  stack[x_292] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_302 = top;
-    top = (x_302 - 1);
-    const int x_305 = stack[x_302];
-    h_1 = x_305;
-    const int x_306 = top;
-    top = (x_306 - 1);
-    const int x_309 = stack[x_306];
-    l_1 = x_309;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_312 = performPartition_i1_i1_(param_4, param_5);
-    p = x_312;
-    if (((p - 1) > l_1)) {
-      const int x_320 = (top + 1);
-      top = x_320;
-      stack[x_320] = l_1;
-      const int x_324 = (top + 1);
-      top = x_324;
-      stack[x_324] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_335 = (top + 1);
-      top = x_335;
-      stack[x_335] = (p + 1);
-      const int x_340 = (top + 1);
-      top = x_340;
-      stack[x_340] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_104 = i_2;
-      const int x_107 = obj.numbers[i_2];
-      const int x_110 = obj.numbers[i_2];
-      obj.numbers[x_104] = (x_107 * x_110);
-    }
-  }
-  quicksort_();
-  const float4 x_116 = x_GLF_FragCoord;
-  const float2 x_119 = asfloat(x_34[0].xy);
-  uv = (float2(x_116.x, x_116.y) / x_119);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_122 = obj.numbers[0];
-  const float x_125 = color.x;
-  color.x = (x_125 + float(x_122));
-  const float x_129 = uv.x;
-  if ((x_129 > 0.25f)) {
-    const int x_134 = obj.numbers[1];
-    const float x_137 = color.x;
-    color.x = (x_137 + float(x_134));
-  }
-  const float x_141 = uv.x;
-  if ((x_141 > 0.5f)) {
-    const int x_146 = obj.numbers[2];
-    const float x_149 = color.y;
-    color.y = (x_149 + float(x_146));
-  }
-  const float x_153 = uv.x;
-  if ((x_153 > 0.75f)) {
-    const int x_158 = obj.numbers[3];
-    const float x_161 = color.z;
-    color.z = (x_161 + float(x_158));
-  }
-  const int x_165 = obj.numbers[4];
-  const float x_168 = color.y;
-  color.y = (x_168 + float(x_165));
-  const float x_172 = uv.y;
-  if ((x_172 > 0.25f)) {
-    const int x_177 = obj.numbers[5];
-    const float x_180 = color.x;
-    color.x = (x_180 + float(x_177));
-  }
-  const float x_184 = uv.y;
-  if ((x_184 > 0.5f)) {
-    const int x_189 = obj.numbers[6];
-    const float x_192 = color.y;
-    color.y = (x_192 + float(x_189));
-  }
-  const float x_196 = uv.y;
-  if ((x_196 > 0.75f)) {
-    const int x_201 = obj.numbers[7];
-    const float x_204 = color.z;
-    color.z = (x_204 + float(x_201));
-  }
-  const int x_208 = obj.numbers[8];
-  const float x_211 = color.z;
-  color.z = (x_211 + float(x_208));
-  const float x_215 = uv.x;
-  const float x_217 = uv.y;
-  if ((abs((x_215 - x_217)) < 0.25f)) {
-    const int x_224 = obj.numbers[9];
-    const float x_227 = color.x;
-    color.x = (x_227 + float(x_224));
-  }
-  const float3 x_231 = normalize(color);
-  frag_color = float4(x_231.x, x_231.y, x_231.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_4 = {frag_color, gl_Position};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.msl
deleted file mode 100644
index 31785aa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,272 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_5) {
-  int temp = 0;
-  int const x_239 = *(i);
-  int const x_241 = (*(tint_symbol_5)).numbers.arr[x_239];
-  temp = x_241;
-  int const x_242 = *(i);
-  int const x_243 = *(j);
-  int const x_245 = (*(tint_symbol_5)).numbers.arr[x_243];
-  (*(tint_symbol_5)).numbers.arr[x_242] = x_245;
-  int const x_247 = *(j);
-  int const x_248 = temp;
-  (*(tint_symbol_5)).numbers.arr[x_247] = x_248;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_6) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_251 = *(h);
-  int const x_253 = (*(tint_symbol_6)).numbers.arr[x_251];
-  pivot = x_253;
-  int const x_254 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_254) - as_type<uint>(1)));
-  int const x_256 = *(l);
-  j_1 = x_256;
-  while (true) {
-    int const x_261 = j_1;
-    int const x_262 = *(h);
-    if ((x_261 <= as_type<int>((as_type<uint>(x_262) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_266 = j_1;
-    int const x_268 = (*(tint_symbol_6)).numbers.arr[x_266];
-    int const x_269 = pivot;
-    if ((x_268 <= x_269)) {
-      int const x_273 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_273) + as_type<uint>(1)));
-      int const x_275 = i_1;
-      param = x_275;
-      int const x_276 = j_1;
-      param_1 = x_276;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_6);
-    }
-    {
-      int const x_278 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_278) + as_type<uint>(1)));
-    }
-  }
-  int const x_280 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
-  int const x_282 = *(h);
-  param_3 = x_282;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_6);
-  int const x_284 = i_1;
-  return as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_7) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_287 = top;
-  int const x_288 = as_type<int>((as_type<uint>(x_287) + as_type<uint>(1)));
-  top = x_288;
-  int const x_289 = l_1;
-  stack.arr[x_288] = x_289;
-  int const x_291 = top;
-  int const x_292 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
-  top = x_292;
-  int const x_293 = h_1;
-  stack.arr[x_292] = x_293;
-  while (true) {
-    int const x_299 = top;
-    if ((x_299 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_302 = top;
-    top = as_type<int>((as_type<uint>(x_302) - as_type<uint>(1)));
-    int const x_305 = stack.arr[x_302];
-    h_1 = x_305;
-    int const x_306 = top;
-    top = as_type<int>((as_type<uint>(x_306) - as_type<uint>(1)));
-    int const x_309 = stack.arr[x_306];
-    l_1 = x_309;
-    int const x_310 = l_1;
-    param_4 = x_310;
-    int const x_311 = h_1;
-    param_5 = x_311;
-    int const x_312 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_7);
-    p = x_312;
-    int const x_313 = p;
-    int const x_315 = l_1;
-    if ((as_type<int>((as_type<uint>(x_313) - as_type<uint>(1))) > x_315)) {
-      int const x_319 = top;
-      int const x_320 = as_type<int>((as_type<uint>(x_319) + as_type<uint>(1)));
-      top = x_320;
-      int const x_321 = l_1;
-      stack.arr[x_320] = x_321;
-      int const x_323 = top;
-      int const x_324 = as_type<int>((as_type<uint>(x_323) + as_type<uint>(1)));
-      top = x_324;
-      int const x_325 = p;
-      stack.arr[x_324] = as_type<int>((as_type<uint>(x_325) - as_type<uint>(1)));
-    }
-    int const x_328 = p;
-    int const x_330 = h_1;
-    if ((as_type<int>((as_type<uint>(x_328) + as_type<uint>(1))) < x_330)) {
-      int const x_334 = top;
-      int const x_335 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
-      top = x_335;
-      int const x_336 = p;
-      stack.arr[x_335] = as_type<int>((as_type<uint>(x_336) + as_type<uint>(1)));
-      int const x_339 = top;
-      int const x_340 = as_type<int>((as_type<uint>(x_339) + as_type<uint>(1)));
-      top = x_340;
-      int const x_341 = h_1;
-      stack.arr[x_340] = x_341;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_34, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_90 = *(tint_symbol_8);
-  *(tint_symbol_9) = ((x_90 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_97 = i_2;
-    if ((x_97 < 10)) {
-    } else {
-      break;
-    }
-    int const x_100 = i_2;
-    int const x_101 = i_2;
-    (*(tint_symbol_10)).numbers.arr[x_100] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_101)));
-    int const x_104 = i_2;
-    int const x_105 = i_2;
-    int const x_107 = (*(tint_symbol_10)).numbers.arr[x_105];
-    int const x_108 = i_2;
-    int const x_110 = (*(tint_symbol_10)).numbers.arr[x_108];
-    (*(tint_symbol_10)).numbers.arr[x_104] = as_type<int>((as_type<uint>(x_107) * as_type<uint>(x_110)));
-    {
-      int const x_113 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_10);
-  float4 const x_116 = *(tint_symbol_9);
-  float2 const x_119 = x_34.resolution;
-  uv = (float2(x_116.x, x_116.y) / x_119);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_122 = (*(tint_symbol_10)).numbers.arr[0];
-  float const x_125 = color.x;
-  color.x = (x_125 + float(x_122));
-  float const x_129 = uv.x;
-  if ((x_129 > 0.25f)) {
-    int const x_134 = (*(tint_symbol_10)).numbers.arr[1];
-    float const x_137 = color.x;
-    color.x = (x_137 + float(x_134));
-  }
-  float const x_141 = uv.x;
-  if ((x_141 > 0.5f)) {
-    int const x_146 = (*(tint_symbol_10)).numbers.arr[2];
-    float const x_149 = color.y;
-    color.y = (x_149 + float(x_146));
-  }
-  float const x_153 = uv.x;
-  if ((x_153 > 0.75f)) {
-    int const x_158 = (*(tint_symbol_10)).numbers.arr[3];
-    float const x_161 = color.z;
-    color.z = (x_161 + float(x_158));
-  }
-  int const x_165 = (*(tint_symbol_10)).numbers.arr[4];
-  float const x_168 = color.y;
-  color.y = (x_168 + float(x_165));
-  float const x_172 = uv.y;
-  if ((x_172 > 0.25f)) {
-    int const x_177 = (*(tint_symbol_10)).numbers.arr[5];
-    float const x_180 = color.x;
-    color.x = (x_180 + float(x_177));
-  }
-  float const x_184 = uv.y;
-  if ((x_184 > 0.5f)) {
-    int const x_189 = (*(tint_symbol_10)).numbers.arr[6];
-    float const x_192 = color.y;
-    color.y = (x_192 + float(x_189));
-  }
-  float const x_196 = uv.y;
-  if ((x_196 > 0.75f)) {
-    int const x_201 = (*(tint_symbol_10)).numbers.arr[7];
-    float const x_204 = color.z;
-    color.z = (x_204 + float(x_201));
-  }
-  int const x_208 = (*(tint_symbol_10)).numbers.arr[8];
-  float const x_211 = color.z;
-  color.z = (x_211 + float(x_208));
-  float const x_215 = uv.x;
-  float const x_217 = uv.y;
-  if ((fabs((x_215 - x_217)) < 0.25f)) {
-    int const x_224 = (*(tint_symbol_10)).numbers.arr[9];
-    float const x_227 = color.x;
-    color.x = (x_227 + float(x_224));
-  }
-  float3 const x_230 = color;
-  float3 const x_231 = normalize(x_230);
-  *(tint_symbol_11) = float4(x_231.x, x_231.y, x_231.z, 1.0f);
-  float4 const x_236 = *(tint_symbol_8);
-  *(tint_symbol_12) = x_236;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 x_GLF_pos_param, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14, thread QuicksortObject* const tint_symbol_15, thread float4* const tint_symbol_16, thread float4* const tint_symbol_17) {
-  *(tint_symbol_13) = x_GLF_pos_param;
-  main_1(x_34, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16, tint_symbol_17);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_16), .gl_Position=*(tint_symbol_17)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_18 = 0.0f;
-  thread float4 tint_symbol_19 = 0.0f;
-  thread QuicksortObject tint_symbol_20 = {};
-  thread float4 tint_symbol_21 = 0.0f;
-  thread float4 tint_symbol_22 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20), &(tint_symbol_21), &(tint_symbol_22));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0841a47..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,567 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 390
-; Schema: 0
-               OpCapability Shader
-        %356 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %37 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %55 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %115 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %123 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %195 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %199 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %203 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-        %206 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %244 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %375 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %29
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %35 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %37
-         %39 = OpLoad %int %i
-         %42 = OpAccessChain %_ptr_Private_int %obj %uint_0 %39
-         %43 = OpLoad %int %42
-               OpStore %temp %43
-         %45 = OpLoad %int %i
-         %47 = OpLoad %int %j
-         %48 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
-               OpStore %50 %49
-         %52 = OpLoad %int %j
-         %53 = OpLoad %int %temp
-         %54 = OpAccessChain %_ptr_Private_int %obj %uint_0 %52
-               OpStore %54 %53
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %55
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %59 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %37
-        %i_1 = OpVariable %_ptr_Function_int Function %37
-        %j_1 = OpVariable %_ptr_Function_int Function %37
-      %param = OpVariable %_ptr_Function_int Function %37
-    %param_1 = OpVariable %_ptr_Function_int Function %37
-    %param_2 = OpVariable %_ptr_Function_int Function %37
-    %param_3 = OpVariable %_ptr_Function_int Function %37
-         %68 = OpLoad %int %h
-         %69 = OpAccessChain %_ptr_Private_int %obj %uint_0 %68
-         %70 = OpLoad %int %69
-               OpStore %pivot %70
-         %72 = OpLoad %int %l
-         %74 = OpISub %int %72 %int_1
-               OpStore %i_1 %74
-         %76 = OpLoad %int %l
-               OpStore %j_1 %76
-               OpBranch %77
-         %77 = OpLabel
-               OpLoopMerge %78 %79 None
-               OpBranch %80
-         %80 = OpLabel
-         %81 = OpLoad %int %j_1
-         %83 = OpLoad %int %h
-         %84 = OpISub %int %83 %int_1
-         %85 = OpSLessThanEqual %bool %81 %84
-               OpSelectionMerge %87 None
-               OpBranchConditional %85 %88 %89
-         %88 = OpLabel
-               OpBranch %87
-         %89 = OpLabel
-               OpBranch %78
-         %87 = OpLabel
-         %90 = OpLoad %int %j_1
-         %91 = OpAccessChain %_ptr_Private_int %obj %uint_0 %90
-         %92 = OpLoad %int %91
-         %93 = OpLoad %int %pivot
-         %94 = OpSLessThanEqual %bool %92 %93
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-         %97 = OpLoad %int %i_1
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %i_1 %98
-         %99 = OpLoad %int %i_1
-               OpStore %param %99
-        %100 = OpLoad %int %j_1
-               OpStore %param_1 %100
-        %101 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %95
-         %95 = OpLabel
-               OpBranch %79
-         %79 = OpLabel
-        %104 = OpLoad %int %j_1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %j_1 %105
-               OpBranch %77
-         %78 = OpLabel
-        %106 = OpLoad %int %i_1
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %param_2 %107
-        %109 = OpLoad %int %h
-               OpStore %param_3 %109
-        %110 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %113 = OpLoad %int %i_1
-        %114 = OpIAdd %int %113 %int_1
-               OpReturnValue %114
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %115
-        %117 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %37
-        %h_1 = OpVariable %_ptr_Function_int Function %37
-        %top = OpVariable %_ptr_Function_int Function %37
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %123
-          %p = OpVariable %_ptr_Function_int Function %37
-    %param_4 = OpVariable %_ptr_Function_int Function %37
-    %param_5 = OpVariable %_ptr_Function_int Function %37
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %130 = OpLoad %int %top
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %top %131
-        %132 = OpLoad %int %l_1
-        %133 = OpAccessChain %_ptr_Function_int %stack %131
-               OpStore %133 %132
-        %134 = OpLoad %int %top
-        %135 = OpIAdd %int %134 %int_1
-               OpStore %top %135
-        %136 = OpLoad %int %h_1
-        %137 = OpAccessChain %_ptr_Function_int %stack %135
-               OpStore %137 %136
-               OpBranch %138
-        %138 = OpLabel
-               OpLoopMerge %139 %140 None
-               OpBranch %141
-        %141 = OpLabel
-        %142 = OpLoad %int %top
-        %143 = OpSGreaterThanEqual %bool %142 %int_0
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %146
-        %145 = OpLabel
-               OpBranch %144
-        %146 = OpLabel
-               OpBranch %139
-        %144 = OpLabel
-        %147 = OpLoad %int %top
-        %148 = OpISub %int %147 %int_1
-               OpStore %top %148
-        %149 = OpAccessChain %_ptr_Function_int %stack %147
-        %150 = OpLoad %int %149
-               OpStore %h_1 %150
-        %151 = OpLoad %int %top
-        %152 = OpISub %int %151 %int_1
-               OpStore %top %152
-        %153 = OpAccessChain %_ptr_Function_int %stack %151
-        %154 = OpLoad %int %153
-               OpStore %l_1 %154
-        %155 = OpLoad %int %l_1
-               OpStore %param_4 %155
-        %156 = OpLoad %int %h_1
-               OpStore %param_5 %156
-        %157 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %157
-        %160 = OpLoad %int %p
-        %161 = OpLoad %int %l_1
-        %162 = OpISub %int %160 %int_1
-        %163 = OpSGreaterThan %bool %162 %161
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %164
-        %165 = OpLabel
-        %166 = OpLoad %int %top
-        %167 = OpIAdd %int %166 %int_1
-               OpStore %top %167
-        %168 = OpLoad %int %l_1
-        %169 = OpAccessChain %_ptr_Function_int %stack %167
-               OpStore %169 %168
-        %170 = OpLoad %int %top
-        %171 = OpIAdd %int %170 %int_1
-               OpStore %top %171
-        %172 = OpLoad %int %p
-        %173 = OpAccessChain %_ptr_Function_int %stack %171
-        %174 = OpISub %int %172 %int_1
-               OpStore %173 %174
-               OpBranch %164
-        %164 = OpLabel
-        %175 = OpLoad %int %p
-        %176 = OpLoad %int %h_1
-        %177 = OpIAdd %int %175 %int_1
-        %178 = OpSLessThan %bool %177 %176
-               OpSelectionMerge %179 None
-               OpBranchConditional %178 %180 %179
-        %180 = OpLabel
-        %181 = OpLoad %int %top
-        %182 = OpIAdd %int %181 %int_1
-               OpStore %top %182
-        %183 = OpLoad %int %p
-        %184 = OpAccessChain %_ptr_Function_int %stack %182
-        %185 = OpIAdd %int %183 %int_1
-               OpStore %184 %185
-        %186 = OpLoad %int %top
-        %187 = OpIAdd %int %186 %int_1
-               OpStore %top %187
-        %188 = OpLoad %int %h_1
-        %189 = OpAccessChain %_ptr_Function_int %stack %187
-               OpStore %189 %188
-               OpBranch %179
-        %179 = OpLabel
-               OpBranch %140
-        %140 = OpLabel
-               OpBranch %138
-        %139 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %115
-        %191 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %37
-         %uv = OpVariable %_ptr_Function_v2float Function %195
-      %color = OpVariable %_ptr_Function_v3float Function %199
-        %200 = OpLoad %v4float %x_GLF_pos
-        %204 = OpFAdd %v4float %200 %203
-        %207 = OpFMul %v4float %204 %206
-               OpStore %x_GLF_FragCoord %207
-               OpStore %i_2 %int_0
-               OpBranch %208
-        %208 = OpLabel
-               OpLoopMerge %209 %210 None
-               OpBranch %211
-        %211 = OpLabel
-        %212 = OpLoad %int %i_2
-        %214 = OpSLessThan %bool %212 %int_10
-               OpSelectionMerge %215 None
-               OpBranchConditional %214 %216 %217
-        %216 = OpLabel
-               OpBranch %215
-        %217 = OpLabel
-               OpBranch %209
-        %215 = OpLabel
-        %218 = OpLoad %int %i_2
-        %219 = OpLoad %int %i_2
-        %220 = OpAccessChain %_ptr_Private_int %obj %uint_0 %218
-        %221 = OpISub %int %int_10 %219
-               OpStore %220 %221
-        %222 = OpLoad %int %i_2
-        %223 = OpLoad %int %i_2
-        %224 = OpAccessChain %_ptr_Private_int %obj %uint_0 %223
-        %225 = OpLoad %int %224
-        %226 = OpLoad %int %i_2
-        %227 = OpAccessChain %_ptr_Private_int %obj %uint_0 %226
-        %228 = OpLoad %int %227
-        %229 = OpAccessChain %_ptr_Private_int %obj %uint_0 %222
-        %230 = OpIMul %int %225 %228
-               OpStore %229 %230
-               OpBranch %210
-        %210 = OpLabel
-        %231 = OpLoad %int %i_2
-        %232 = OpIAdd %int %231 %int_1
-               OpStore %i_2 %232
-               OpBranch %208
-        %209 = OpLabel
-        %233 = OpFunctionCall %void %quicksort_
-        %234 = OpLoad %v4float %x_GLF_FragCoord
-        %236 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %237 = OpLoad %v2float %236
-        %238 = OpCompositeExtract %float %234 0
-        %239 = OpCompositeExtract %float %234 1
-        %240 = OpCompositeConstruct %v2float %238 %239
-        %241 = OpFDiv %v2float %240 %237
-               OpStore %uv %241
-               OpStore %color %244
-        %245 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %246 = OpLoad %int %245
-        %248 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %249 = OpLoad %float %248
-        %250 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %251 = OpConvertSToF %float %246
-        %252 = OpFAdd %float %249 %251
-               OpStore %250 %252
-        %253 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %254 = OpLoad %float %253
-        %256 = OpFOrdGreaterThan %bool %254 %float_0_25
-               OpSelectionMerge %257 None
-               OpBranchConditional %256 %258 %257
-        %258 = OpLabel
-        %259 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %260 = OpLoad %int %259
-        %261 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %262 = OpLoad %float %261
-        %263 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %264 = OpConvertSToF %float %260
-        %265 = OpFAdd %float %262 %264
-               OpStore %263 %265
-               OpBranch %257
-        %257 = OpLabel
-        %266 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %267 = OpLoad %float %266
-        %269 = OpFOrdGreaterThan %bool %267 %float_0_5
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %270
-        %271 = OpLabel
-        %273 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %274 = OpLoad %int %273
-        %276 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %277 = OpLoad %float %276
-        %278 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %279 = OpConvertSToF %float %274
-        %280 = OpFAdd %float %277 %279
-               OpStore %278 %280
-               OpBranch %270
-        %270 = OpLabel
-        %281 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %282 = OpLoad %float %281
-        %284 = OpFOrdGreaterThan %bool %282 %float_0_75
-               OpSelectionMerge %285 None
-               OpBranchConditional %284 %286 %285
-        %286 = OpLabel
-        %288 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %289 = OpLoad %int %288
-        %291 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %292 = OpLoad %float %291
-        %293 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %294 = OpConvertSToF %float %289
-        %295 = OpFAdd %float %292 %294
-               OpStore %293 %295
-               OpBranch %285
-        %285 = OpLabel
-        %297 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %298 = OpLoad %int %297
-        %299 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %300 = OpLoad %float %299
-        %301 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %302 = OpConvertSToF %float %298
-        %303 = OpFAdd %float %300 %302
-               OpStore %301 %303
-        %304 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %305 = OpLoad %float %304
-        %306 = OpFOrdGreaterThan %bool %305 %float_0_25
-               OpSelectionMerge %307 None
-               OpBranchConditional %306 %308 %307
-        %308 = OpLabel
-        %310 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %311 = OpLoad %int %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %313 = OpLoad %float %312
-        %314 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %315 = OpConvertSToF %float %311
-        %316 = OpFAdd %float %313 %315
-               OpStore %314 %316
-               OpBranch %307
-        %307 = OpLabel
-        %317 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %318 = OpLoad %float %317
-        %319 = OpFOrdGreaterThan %bool %318 %float_0_5
-               OpSelectionMerge %320 None
-               OpBranchConditional %319 %321 %320
-        %321 = OpLabel
-        %323 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %324 = OpLoad %int %323
-        %325 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %326 = OpLoad %float %325
-        %327 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %328 = OpConvertSToF %float %324
-        %329 = OpFAdd %float %326 %328
-               OpStore %327 %329
-               OpBranch %320
-        %320 = OpLabel
-        %330 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %331 = OpLoad %float %330
-        %332 = OpFOrdGreaterThan %bool %331 %float_0_75
-               OpSelectionMerge %333 None
-               OpBranchConditional %332 %334 %333
-        %334 = OpLabel
-        %336 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %337 = OpLoad %int %336
-        %338 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %339 = OpLoad %float %338
-        %340 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %341 = OpConvertSToF %float %337
-        %342 = OpFAdd %float %339 %341
-               OpStore %340 %342
-               OpBranch %333
-        %333 = OpLabel
-        %344 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %345 = OpLoad %int %344
-        %346 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %347 = OpLoad %float %346
-        %348 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %349 = OpConvertSToF %float %345
-        %350 = OpFAdd %float %347 %349
-               OpStore %348 %350
-        %351 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %352 = OpLoad %float %351
-        %353 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %354 = OpLoad %float %353
-        %357 = OpFSub %float %352 %354
-        %355 = OpExtInst %float %356 FAbs %357
-        %358 = OpFOrdLessThan %bool %355 %float_0_25
-               OpSelectionMerge %359 None
-               OpBranchConditional %358 %360 %359
-        %360 = OpLabel
-        %361 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %362 = OpLoad %int %361
-        %363 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %364 = OpLoad %float %363
-        %365 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %366 = OpConvertSToF %float %362
-        %367 = OpFAdd %float %364 %366
-               OpStore %365 %367
-               OpBranch %359
-        %359 = OpLabel
-        %368 = OpLoad %v3float %color
-        %369 = OpExtInst %v3float %356 Normalize %368
-        %370 = OpCompositeExtract %float %369 0
-        %371 = OpCompositeExtract %float %369 1
-        %372 = OpCompositeExtract %float %369 2
-        %373 = OpCompositeConstruct %v4float %370 %371 %372 %float_1
-               OpStore %frag_color %373
-        %374 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %374
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %375
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %379 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %380 = OpFunctionCall %void %main_1
-        %381 = OpLoad %v4float %frag_color
-        %382 = OpLoad %v4float %gl_Position
-        %383 = OpCompositeConstruct %main_out %381 %382
-               OpReturnValue %383
-               OpFunctionEnd
-       %main = OpFunction %void None %115
-        %385 = OpLabel
-        %387 = OpLoad %v4float %x_GLF_pos_param_1
-        %386 = OpFunctionCall %main_out %main_inner %387
-        %388 = OpCompositeExtract %v4float %386 0
-               OpStore %frag_color_1_1 %388
-        %389 = OpCompositeExtract %v4float %386 1
-               OpStore %gl_Position_1 %389
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 134b77f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,264 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_239 : i32 = *(i);
-  let x_241 : i32 = obj.numbers[x_239];
-  temp = x_241;
-  let x_242 : i32 = *(i);
-  let x_243 : i32 = *(j);
-  let x_245 : i32 = obj.numbers[x_243];
-  obj.numbers[x_242] = x_245;
-  let x_247 : i32 = *(j);
-  let x_248 : i32 = temp;
-  obj.numbers[x_247] = x_248;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_251 : i32 = *(h);
-  let x_253 : i32 = obj.numbers[x_251];
-  pivot = x_253;
-  let x_254 : i32 = *(l);
-  i_1 = (x_254 - 1);
-  let x_256 : i32 = *(l);
-  j_1 = x_256;
-  loop {
-    let x_261 : i32 = j_1;
-    let x_262 : i32 = *(h);
-    if ((x_261 <= (x_262 - 1))) {
-    } else {
-      break;
-    }
-    let x_266 : i32 = j_1;
-    let x_268 : i32 = obj.numbers[x_266];
-    let x_269 : i32 = pivot;
-    if ((x_268 <= x_269)) {
-      let x_273 : i32 = i_1;
-      i_1 = (x_273 + 1);
-      let x_275 : i32 = i_1;
-      param = x_275;
-      let x_276 : i32 = j_1;
-      param_1 = x_276;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_278 : i32 = j_1;
-      j_1 = (x_278 + 1);
-    }
-  }
-  let x_280 : i32 = i_1;
-  param_2 = (x_280 + 1);
-  let x_282 : i32 = *(h);
-  param_3 = x_282;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_284 : i32 = i_1;
-  return (x_284 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_287 : i32 = top;
-  let x_288 : i32 = (x_287 + 1);
-  top = x_288;
-  let x_289 : i32 = l_1;
-  stack[x_288] = x_289;
-  let x_291 : i32 = top;
-  let x_292 : i32 = (x_291 + 1);
-  top = x_292;
-  let x_293 : i32 = h_1;
-  stack[x_292] = x_293;
-  loop {
-    let x_299 : i32 = top;
-    if ((x_299 >= 0)) {
-    } else {
-      break;
-    }
-    let x_302 : i32 = top;
-    top = (x_302 - 1);
-    let x_305 : i32 = stack[x_302];
-    h_1 = x_305;
-    let x_306 : i32 = top;
-    top = (x_306 - 1);
-    let x_309 : i32 = stack[x_306];
-    l_1 = x_309;
-    let x_310 : i32 = l_1;
-    param_4 = x_310;
-    let x_311 : i32 = h_1;
-    param_5 = x_311;
-    let x_312 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_312;
-    let x_313 : i32 = p;
-    let x_315 : i32 = l_1;
-    if (((x_313 - 1) > x_315)) {
-      let x_319 : i32 = top;
-      let x_320 : i32 = (x_319 + 1);
-      top = x_320;
-      let x_321 : i32 = l_1;
-      stack[x_320] = x_321;
-      let x_323 : i32 = top;
-      let x_324 : i32 = (x_323 + 1);
-      top = x_324;
-      let x_325 : i32 = p;
-      stack[x_324] = (x_325 - 1);
-    }
-    let x_328 : i32 = p;
-    let x_330 : i32 = h_1;
-    if (((x_328 + 1) < x_330)) {
-      let x_334 : i32 = top;
-      let x_335 : i32 = (x_334 + 1);
-      top = x_335;
-      let x_336 : i32 = p;
-      stack[x_335] = (x_336 + 1);
-      let x_339 : i32 = top;
-      let x_340 : i32 = (x_339 + 1);
-      top = x_340;
-      let x_341 : i32 = h_1;
-      stack[x_340] = x_341;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_90 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_90 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_97 : i32 = i_2;
-    if ((x_97 < 10)) {
-    } else {
-      break;
-    }
-    let x_100 : i32 = i_2;
-    let x_101 : i32 = i_2;
-    obj.numbers[x_100] = (10 - x_101);
-    let x_104 : i32 = i_2;
-    let x_105 : i32 = i_2;
-    let x_107 : i32 = obj.numbers[x_105];
-    let x_108 : i32 = i_2;
-    let x_110 : i32 = obj.numbers[x_108];
-    obj.numbers[x_104] = (x_107 * x_110);
-
-    continuing {
-      let x_113 : i32 = i_2;
-      i_2 = (x_113 + 1);
-    }
-  }
-  quicksort_();
-  let x_116 : vec4<f32> = x_GLF_FragCoord;
-  let x_119 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_116.x, x_116.y) / x_119);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_122 : i32 = obj.numbers[0];
-  let x_125 : f32 = color.x;
-  color.x = (x_125 + f32(x_122));
-  let x_129 : f32 = uv.x;
-  if ((x_129 > 0.25)) {
-    let x_134 : i32 = obj.numbers[1];
-    let x_137 : f32 = color.x;
-    color.x = (x_137 + f32(x_134));
-  }
-  let x_141 : f32 = uv.x;
-  if ((x_141 > 0.5)) {
-    let x_146 : i32 = obj.numbers[2];
-    let x_149 : f32 = color.y;
-    color.y = (x_149 + f32(x_146));
-  }
-  let x_153 : f32 = uv.x;
-  if ((x_153 > 0.75)) {
-    let x_158 : i32 = obj.numbers[3];
-    let x_161 : f32 = color.z;
-    color.z = (x_161 + f32(x_158));
-  }
-  let x_165 : i32 = obj.numbers[4];
-  let x_168 : f32 = color.y;
-  color.y = (x_168 + f32(x_165));
-  let x_172 : f32 = uv.y;
-  if ((x_172 > 0.25)) {
-    let x_177 : i32 = obj.numbers[5];
-    let x_180 : f32 = color.x;
-    color.x = (x_180 + f32(x_177));
-  }
-  let x_184 : f32 = uv.y;
-  if ((x_184 > 0.5)) {
-    let x_189 : i32 = obj.numbers[6];
-    let x_192 : f32 = color.y;
-    color.y = (x_192 + f32(x_189));
-  }
-  let x_196 : f32 = uv.y;
-  if ((x_196 > 0.75)) {
-    let x_201 : i32 = obj.numbers[7];
-    let x_204 : f32 = color.z;
-    color.z = (x_204 + f32(x_201));
-  }
-  let x_208 : i32 = obj.numbers[8];
-  let x_211 : f32 = color.z;
-  color.z = (x_211 + f32(x_208));
-  let x_215 : f32 = uv.x;
-  let x_217 : f32 = uv.y;
-  if ((abs((x_215 - x_217)) < 0.25)) {
-    let x_224 : i32 = obj.numbers[9];
-    let x_227 : f32 = color.x;
-    color.x = (x_227 + f32(x_224));
-  }
-  let x_230 : vec3<f32> = color;
-  let x_231 : vec3<f32> = normalize(x_230);
-  frag_color = vec4<f32>(x_231.x, x_231.y, x_231.z, 1.0);
-  let x_236 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_236;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d58db35..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,225 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_239 = i;
-  const int x_241 = obj.numbers[x_239];
-  temp = x_241;
-  const int x_242 = i;
-  const int x_243 = j;
-  const int x_245 = obj.numbers[x_243];
-  obj.numbers[x_242] = x_245;
-  const int x_247 = j;
-  obj.numbers[x_247] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_251 = h;
-  const int x_253 = obj.numbers[x_251];
-  pivot = x_253;
-  const int x_254 = l;
-  i_1 = (x_254 - 1);
-  const int x_256 = l;
-  j_1 = x_256;
-  while (true) {
-    const int x_261 = j_1;
-    const int x_262 = h;
-    if ((x_261 <= (x_262 - 1))) {
-    } else {
-      break;
-    }
-    const int x_268 = obj.numbers[j_1];
-    if ((x_268 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_282 = h;
-  param_3 = x_282;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_288 = (top + 1);
-  top = x_288;
-  stack[x_288] = l_1;
-  const int x_292 = (top + 1);
-  top = x_292;
-  stack[x_292] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_302 = top;
-    top = (x_302 - 1);
-    const int x_305 = stack[x_302];
-    h_1 = x_305;
-    const int x_306 = top;
-    top = (x_306 - 1);
-    const int x_309 = stack[x_306];
-    l_1 = x_309;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_312 = performPartition_i1_i1_(param_4, param_5);
-    p = x_312;
-    if (((p - 1) > l_1)) {
-      const int x_320 = (top + 1);
-      top = x_320;
-      stack[x_320] = l_1;
-      const int x_324 = (top + 1);
-      top = x_324;
-      stack[x_324] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_335 = (top + 1);
-      top = x_335;
-      stack[x_335] = (p + 1);
-      const int x_340 = (top + 1);
-      top = x_340;
-      stack[x_340] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_104 = i_2;
-      const int x_107 = obj.numbers[i_2];
-      const int x_110 = obj.numbers[i_2];
-      obj.numbers[x_104] = (x_107 * x_110);
-    }
-  }
-  quicksort_();
-  const float4 x_116 = x_GLF_FragCoord;
-  const float2 x_119 = asfloat(x_34[0].xy);
-  uv = (float2(x_116.x, x_116.y) / x_119);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_122 = obj.numbers[0];
-  const float x_125 = color.x;
-  color.x = (x_125 + float(x_122));
-  const float x_129 = uv.x;
-  if ((x_129 > 0.25f)) {
-    const int x_134 = obj.numbers[1];
-    const float x_137 = color.x;
-    color.x = (x_137 + float(x_134));
-  }
-  const float x_141 = uv.x;
-  if ((x_141 > 0.5f)) {
-    const int x_146 = obj.numbers[2];
-    const float x_149 = color.y;
-    color.y = (x_149 + float(x_146));
-  }
-  const float x_153 = uv.x;
-  if ((x_153 > 0.75f)) {
-    const int x_158 = obj.numbers[3];
-    const float x_161 = color.z;
-    color.z = (x_161 + float(x_158));
-  }
-  const int x_165 = obj.numbers[4];
-  const float x_168 = color.y;
-  color.y = (x_168 + float(x_165));
-  const float x_172 = uv.y;
-  if ((x_172 > 0.25f)) {
-    const int x_177 = obj.numbers[5];
-    const float x_180 = color.x;
-    color.x = (x_180 + float(x_177));
-  }
-  const float x_184 = uv.y;
-  if ((x_184 > 0.5f)) {
-    const int x_189 = obj.numbers[6];
-    const float x_192 = color.y;
-    color.y = (x_192 + float(x_189));
-  }
-  const float x_196 = uv.y;
-  if ((x_196 > 0.75f)) {
-    const int x_201 = obj.numbers[7];
-    const float x_204 = color.z;
-    color.z = (x_204 + float(x_201));
-  }
-  const int x_208 = obj.numbers[8];
-  const float x_211 = color.z;
-  color.z = (x_211 + float(x_208));
-  const float x_215 = uv.x;
-  const float x_217 = uv.y;
-  if ((abs((x_215 - x_217)) < 0.25f)) {
-    const int x_224 = obj.numbers[9];
-    const float x_227 = color.x;
-    color.x = (x_227 + float(x_224));
-  }
-  const float3 x_231 = normalize(color);
-  frag_color = float4(x_231.x, x_231.y, x_231.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_4 = {frag_color, gl_Position};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.msl
deleted file mode 100644
index 31785aa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,272 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_5) {
-  int temp = 0;
-  int const x_239 = *(i);
-  int const x_241 = (*(tint_symbol_5)).numbers.arr[x_239];
-  temp = x_241;
-  int const x_242 = *(i);
-  int const x_243 = *(j);
-  int const x_245 = (*(tint_symbol_5)).numbers.arr[x_243];
-  (*(tint_symbol_5)).numbers.arr[x_242] = x_245;
-  int const x_247 = *(j);
-  int const x_248 = temp;
-  (*(tint_symbol_5)).numbers.arr[x_247] = x_248;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_6) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_251 = *(h);
-  int const x_253 = (*(tint_symbol_6)).numbers.arr[x_251];
-  pivot = x_253;
-  int const x_254 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_254) - as_type<uint>(1)));
-  int const x_256 = *(l);
-  j_1 = x_256;
-  while (true) {
-    int const x_261 = j_1;
-    int const x_262 = *(h);
-    if ((x_261 <= as_type<int>((as_type<uint>(x_262) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_266 = j_1;
-    int const x_268 = (*(tint_symbol_6)).numbers.arr[x_266];
-    int const x_269 = pivot;
-    if ((x_268 <= x_269)) {
-      int const x_273 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_273) + as_type<uint>(1)));
-      int const x_275 = i_1;
-      param = x_275;
-      int const x_276 = j_1;
-      param_1 = x_276;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_6);
-    }
-    {
-      int const x_278 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_278) + as_type<uint>(1)));
-    }
-  }
-  int const x_280 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_280) + as_type<uint>(1)));
-  int const x_282 = *(h);
-  param_3 = x_282;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_6);
-  int const x_284 = i_1;
-  return as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_7) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_287 = top;
-  int const x_288 = as_type<int>((as_type<uint>(x_287) + as_type<uint>(1)));
-  top = x_288;
-  int const x_289 = l_1;
-  stack.arr[x_288] = x_289;
-  int const x_291 = top;
-  int const x_292 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
-  top = x_292;
-  int const x_293 = h_1;
-  stack.arr[x_292] = x_293;
-  while (true) {
-    int const x_299 = top;
-    if ((x_299 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_302 = top;
-    top = as_type<int>((as_type<uint>(x_302) - as_type<uint>(1)));
-    int const x_305 = stack.arr[x_302];
-    h_1 = x_305;
-    int const x_306 = top;
-    top = as_type<int>((as_type<uint>(x_306) - as_type<uint>(1)));
-    int const x_309 = stack.arr[x_306];
-    l_1 = x_309;
-    int const x_310 = l_1;
-    param_4 = x_310;
-    int const x_311 = h_1;
-    param_5 = x_311;
-    int const x_312 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_7);
-    p = x_312;
-    int const x_313 = p;
-    int const x_315 = l_1;
-    if ((as_type<int>((as_type<uint>(x_313) - as_type<uint>(1))) > x_315)) {
-      int const x_319 = top;
-      int const x_320 = as_type<int>((as_type<uint>(x_319) + as_type<uint>(1)));
-      top = x_320;
-      int const x_321 = l_1;
-      stack.arr[x_320] = x_321;
-      int const x_323 = top;
-      int const x_324 = as_type<int>((as_type<uint>(x_323) + as_type<uint>(1)));
-      top = x_324;
-      int const x_325 = p;
-      stack.arr[x_324] = as_type<int>((as_type<uint>(x_325) - as_type<uint>(1)));
-    }
-    int const x_328 = p;
-    int const x_330 = h_1;
-    if ((as_type<int>((as_type<uint>(x_328) + as_type<uint>(1))) < x_330)) {
-      int const x_334 = top;
-      int const x_335 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
-      top = x_335;
-      int const x_336 = p;
-      stack.arr[x_335] = as_type<int>((as_type<uint>(x_336) + as_type<uint>(1)));
-      int const x_339 = top;
-      int const x_340 = as_type<int>((as_type<uint>(x_339) + as_type<uint>(1)));
-      top = x_340;
-      int const x_341 = h_1;
-      stack.arr[x_340] = x_341;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_34, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_90 = *(tint_symbol_8);
-  *(tint_symbol_9) = ((x_90 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_97 = i_2;
-    if ((x_97 < 10)) {
-    } else {
-      break;
-    }
-    int const x_100 = i_2;
-    int const x_101 = i_2;
-    (*(tint_symbol_10)).numbers.arr[x_100] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_101)));
-    int const x_104 = i_2;
-    int const x_105 = i_2;
-    int const x_107 = (*(tint_symbol_10)).numbers.arr[x_105];
-    int const x_108 = i_2;
-    int const x_110 = (*(tint_symbol_10)).numbers.arr[x_108];
-    (*(tint_symbol_10)).numbers.arr[x_104] = as_type<int>((as_type<uint>(x_107) * as_type<uint>(x_110)));
-    {
-      int const x_113 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_10);
-  float4 const x_116 = *(tint_symbol_9);
-  float2 const x_119 = x_34.resolution;
-  uv = (float2(x_116.x, x_116.y) / x_119);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_122 = (*(tint_symbol_10)).numbers.arr[0];
-  float const x_125 = color.x;
-  color.x = (x_125 + float(x_122));
-  float const x_129 = uv.x;
-  if ((x_129 > 0.25f)) {
-    int const x_134 = (*(tint_symbol_10)).numbers.arr[1];
-    float const x_137 = color.x;
-    color.x = (x_137 + float(x_134));
-  }
-  float const x_141 = uv.x;
-  if ((x_141 > 0.5f)) {
-    int const x_146 = (*(tint_symbol_10)).numbers.arr[2];
-    float const x_149 = color.y;
-    color.y = (x_149 + float(x_146));
-  }
-  float const x_153 = uv.x;
-  if ((x_153 > 0.75f)) {
-    int const x_158 = (*(tint_symbol_10)).numbers.arr[3];
-    float const x_161 = color.z;
-    color.z = (x_161 + float(x_158));
-  }
-  int const x_165 = (*(tint_symbol_10)).numbers.arr[4];
-  float const x_168 = color.y;
-  color.y = (x_168 + float(x_165));
-  float const x_172 = uv.y;
-  if ((x_172 > 0.25f)) {
-    int const x_177 = (*(tint_symbol_10)).numbers.arr[5];
-    float const x_180 = color.x;
-    color.x = (x_180 + float(x_177));
-  }
-  float const x_184 = uv.y;
-  if ((x_184 > 0.5f)) {
-    int const x_189 = (*(tint_symbol_10)).numbers.arr[6];
-    float const x_192 = color.y;
-    color.y = (x_192 + float(x_189));
-  }
-  float const x_196 = uv.y;
-  if ((x_196 > 0.75f)) {
-    int const x_201 = (*(tint_symbol_10)).numbers.arr[7];
-    float const x_204 = color.z;
-    color.z = (x_204 + float(x_201));
-  }
-  int const x_208 = (*(tint_symbol_10)).numbers.arr[8];
-  float const x_211 = color.z;
-  color.z = (x_211 + float(x_208));
-  float const x_215 = uv.x;
-  float const x_217 = uv.y;
-  if ((fabs((x_215 - x_217)) < 0.25f)) {
-    int const x_224 = (*(tint_symbol_10)).numbers.arr[9];
-    float const x_227 = color.x;
-    color.x = (x_227 + float(x_224));
-  }
-  float3 const x_230 = color;
-  float3 const x_231 = normalize(x_230);
-  *(tint_symbol_11) = float4(x_231.x, x_231.y, x_231.z, 1.0f);
-  float4 const x_236 = *(tint_symbol_8);
-  *(tint_symbol_12) = x_236;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 x_GLF_pos_param, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14, thread QuicksortObject* const tint_symbol_15, thread float4* const tint_symbol_16, thread float4* const tint_symbol_17) {
-  *(tint_symbol_13) = x_GLF_pos_param;
-  main_1(x_34, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16, tint_symbol_17);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_16), .gl_Position=*(tint_symbol_17)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_18 = 0.0f;
-  thread float4 tint_symbol_19 = 0.0f;
-  thread QuicksortObject tint_symbol_20 = {};
-  thread float4 tint_symbol_21 = 0.0f;
-  thread float4 tint_symbol_22 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20), &(tint_symbol_21), &(tint_symbol_22));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0841a47..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,567 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 390
-; Schema: 0
-               OpCapability Shader
-        %356 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %37 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %55 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %115 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %123 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %195 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %199 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %203 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-        %206 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %244 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %375 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %29
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %35 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %37
-         %39 = OpLoad %int %i
-         %42 = OpAccessChain %_ptr_Private_int %obj %uint_0 %39
-         %43 = OpLoad %int %42
-               OpStore %temp %43
-         %45 = OpLoad %int %i
-         %47 = OpLoad %int %j
-         %48 = OpAccessChain %_ptr_Private_int %obj %uint_0 %47
-         %49 = OpLoad %int %48
-         %50 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
-               OpStore %50 %49
-         %52 = OpLoad %int %j
-         %53 = OpLoad %int %temp
-         %54 = OpAccessChain %_ptr_Private_int %obj %uint_0 %52
-               OpStore %54 %53
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %55
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %59 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %37
-        %i_1 = OpVariable %_ptr_Function_int Function %37
-        %j_1 = OpVariable %_ptr_Function_int Function %37
-      %param = OpVariable %_ptr_Function_int Function %37
-    %param_1 = OpVariable %_ptr_Function_int Function %37
-    %param_2 = OpVariable %_ptr_Function_int Function %37
-    %param_3 = OpVariable %_ptr_Function_int Function %37
-         %68 = OpLoad %int %h
-         %69 = OpAccessChain %_ptr_Private_int %obj %uint_0 %68
-         %70 = OpLoad %int %69
-               OpStore %pivot %70
-         %72 = OpLoad %int %l
-         %74 = OpISub %int %72 %int_1
-               OpStore %i_1 %74
-         %76 = OpLoad %int %l
-               OpStore %j_1 %76
-               OpBranch %77
-         %77 = OpLabel
-               OpLoopMerge %78 %79 None
-               OpBranch %80
-         %80 = OpLabel
-         %81 = OpLoad %int %j_1
-         %83 = OpLoad %int %h
-         %84 = OpISub %int %83 %int_1
-         %85 = OpSLessThanEqual %bool %81 %84
-               OpSelectionMerge %87 None
-               OpBranchConditional %85 %88 %89
-         %88 = OpLabel
-               OpBranch %87
-         %89 = OpLabel
-               OpBranch %78
-         %87 = OpLabel
-         %90 = OpLoad %int %j_1
-         %91 = OpAccessChain %_ptr_Private_int %obj %uint_0 %90
-         %92 = OpLoad %int %91
-         %93 = OpLoad %int %pivot
-         %94 = OpSLessThanEqual %bool %92 %93
-               OpSelectionMerge %95 None
-               OpBranchConditional %94 %96 %95
-         %96 = OpLabel
-         %97 = OpLoad %int %i_1
-         %98 = OpIAdd %int %97 %int_1
-               OpStore %i_1 %98
-         %99 = OpLoad %int %i_1
-               OpStore %param %99
-        %100 = OpLoad %int %j_1
-               OpStore %param_1 %100
-        %101 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %95
-         %95 = OpLabel
-               OpBranch %79
-         %79 = OpLabel
-        %104 = OpLoad %int %j_1
-        %105 = OpIAdd %int %104 %int_1
-               OpStore %j_1 %105
-               OpBranch %77
-         %78 = OpLabel
-        %106 = OpLoad %int %i_1
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %param_2 %107
-        %109 = OpLoad %int %h
-               OpStore %param_3 %109
-        %110 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %113 = OpLoad %int %i_1
-        %114 = OpIAdd %int %113 %int_1
-               OpReturnValue %114
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %115
-        %117 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %37
-        %h_1 = OpVariable %_ptr_Function_int Function %37
-        %top = OpVariable %_ptr_Function_int Function %37
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %123
-          %p = OpVariable %_ptr_Function_int Function %37
-    %param_4 = OpVariable %_ptr_Function_int Function %37
-    %param_5 = OpVariable %_ptr_Function_int Function %37
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %130 = OpLoad %int %top
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %top %131
-        %132 = OpLoad %int %l_1
-        %133 = OpAccessChain %_ptr_Function_int %stack %131
-               OpStore %133 %132
-        %134 = OpLoad %int %top
-        %135 = OpIAdd %int %134 %int_1
-               OpStore %top %135
-        %136 = OpLoad %int %h_1
-        %137 = OpAccessChain %_ptr_Function_int %stack %135
-               OpStore %137 %136
-               OpBranch %138
-        %138 = OpLabel
-               OpLoopMerge %139 %140 None
-               OpBranch %141
-        %141 = OpLabel
-        %142 = OpLoad %int %top
-        %143 = OpSGreaterThanEqual %bool %142 %int_0
-               OpSelectionMerge %144 None
-               OpBranchConditional %143 %145 %146
-        %145 = OpLabel
-               OpBranch %144
-        %146 = OpLabel
-               OpBranch %139
-        %144 = OpLabel
-        %147 = OpLoad %int %top
-        %148 = OpISub %int %147 %int_1
-               OpStore %top %148
-        %149 = OpAccessChain %_ptr_Function_int %stack %147
-        %150 = OpLoad %int %149
-               OpStore %h_1 %150
-        %151 = OpLoad %int %top
-        %152 = OpISub %int %151 %int_1
-               OpStore %top %152
-        %153 = OpAccessChain %_ptr_Function_int %stack %151
-        %154 = OpLoad %int %153
-               OpStore %l_1 %154
-        %155 = OpLoad %int %l_1
-               OpStore %param_4 %155
-        %156 = OpLoad %int %h_1
-               OpStore %param_5 %156
-        %157 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %157
-        %160 = OpLoad %int %p
-        %161 = OpLoad %int %l_1
-        %162 = OpISub %int %160 %int_1
-        %163 = OpSGreaterThan %bool %162 %161
-               OpSelectionMerge %164 None
-               OpBranchConditional %163 %165 %164
-        %165 = OpLabel
-        %166 = OpLoad %int %top
-        %167 = OpIAdd %int %166 %int_1
-               OpStore %top %167
-        %168 = OpLoad %int %l_1
-        %169 = OpAccessChain %_ptr_Function_int %stack %167
-               OpStore %169 %168
-        %170 = OpLoad %int %top
-        %171 = OpIAdd %int %170 %int_1
-               OpStore %top %171
-        %172 = OpLoad %int %p
-        %173 = OpAccessChain %_ptr_Function_int %stack %171
-        %174 = OpISub %int %172 %int_1
-               OpStore %173 %174
-               OpBranch %164
-        %164 = OpLabel
-        %175 = OpLoad %int %p
-        %176 = OpLoad %int %h_1
-        %177 = OpIAdd %int %175 %int_1
-        %178 = OpSLessThan %bool %177 %176
-               OpSelectionMerge %179 None
-               OpBranchConditional %178 %180 %179
-        %180 = OpLabel
-        %181 = OpLoad %int %top
-        %182 = OpIAdd %int %181 %int_1
-               OpStore %top %182
-        %183 = OpLoad %int %p
-        %184 = OpAccessChain %_ptr_Function_int %stack %182
-        %185 = OpIAdd %int %183 %int_1
-               OpStore %184 %185
-        %186 = OpLoad %int %top
-        %187 = OpIAdd %int %186 %int_1
-               OpStore %top %187
-        %188 = OpLoad %int %h_1
-        %189 = OpAccessChain %_ptr_Function_int %stack %187
-               OpStore %189 %188
-               OpBranch %179
-        %179 = OpLabel
-               OpBranch %140
-        %140 = OpLabel
-               OpBranch %138
-        %139 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %115
-        %191 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %37
-         %uv = OpVariable %_ptr_Function_v2float Function %195
-      %color = OpVariable %_ptr_Function_v3float Function %199
-        %200 = OpLoad %v4float %x_GLF_pos
-        %204 = OpFAdd %v4float %200 %203
-        %207 = OpFMul %v4float %204 %206
-               OpStore %x_GLF_FragCoord %207
-               OpStore %i_2 %int_0
-               OpBranch %208
-        %208 = OpLabel
-               OpLoopMerge %209 %210 None
-               OpBranch %211
-        %211 = OpLabel
-        %212 = OpLoad %int %i_2
-        %214 = OpSLessThan %bool %212 %int_10
-               OpSelectionMerge %215 None
-               OpBranchConditional %214 %216 %217
-        %216 = OpLabel
-               OpBranch %215
-        %217 = OpLabel
-               OpBranch %209
-        %215 = OpLabel
-        %218 = OpLoad %int %i_2
-        %219 = OpLoad %int %i_2
-        %220 = OpAccessChain %_ptr_Private_int %obj %uint_0 %218
-        %221 = OpISub %int %int_10 %219
-               OpStore %220 %221
-        %222 = OpLoad %int %i_2
-        %223 = OpLoad %int %i_2
-        %224 = OpAccessChain %_ptr_Private_int %obj %uint_0 %223
-        %225 = OpLoad %int %224
-        %226 = OpLoad %int %i_2
-        %227 = OpAccessChain %_ptr_Private_int %obj %uint_0 %226
-        %228 = OpLoad %int %227
-        %229 = OpAccessChain %_ptr_Private_int %obj %uint_0 %222
-        %230 = OpIMul %int %225 %228
-               OpStore %229 %230
-               OpBranch %210
-        %210 = OpLabel
-        %231 = OpLoad %int %i_2
-        %232 = OpIAdd %int %231 %int_1
-               OpStore %i_2 %232
-               OpBranch %208
-        %209 = OpLabel
-        %233 = OpFunctionCall %void %quicksort_
-        %234 = OpLoad %v4float %x_GLF_FragCoord
-        %236 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %237 = OpLoad %v2float %236
-        %238 = OpCompositeExtract %float %234 0
-        %239 = OpCompositeExtract %float %234 1
-        %240 = OpCompositeConstruct %v2float %238 %239
-        %241 = OpFDiv %v2float %240 %237
-               OpStore %uv %241
-               OpStore %color %244
-        %245 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %246 = OpLoad %int %245
-        %248 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %249 = OpLoad %float %248
-        %250 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %251 = OpConvertSToF %float %246
-        %252 = OpFAdd %float %249 %251
-               OpStore %250 %252
-        %253 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %254 = OpLoad %float %253
-        %256 = OpFOrdGreaterThan %bool %254 %float_0_25
-               OpSelectionMerge %257 None
-               OpBranchConditional %256 %258 %257
-        %258 = OpLabel
-        %259 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %260 = OpLoad %int %259
-        %261 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %262 = OpLoad %float %261
-        %263 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %264 = OpConvertSToF %float %260
-        %265 = OpFAdd %float %262 %264
-               OpStore %263 %265
-               OpBranch %257
-        %257 = OpLabel
-        %266 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %267 = OpLoad %float %266
-        %269 = OpFOrdGreaterThan %bool %267 %float_0_5
-               OpSelectionMerge %270 None
-               OpBranchConditional %269 %271 %270
-        %271 = OpLabel
-        %273 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %274 = OpLoad %int %273
-        %276 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %277 = OpLoad %float %276
-        %278 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %279 = OpConvertSToF %float %274
-        %280 = OpFAdd %float %277 %279
-               OpStore %278 %280
-               OpBranch %270
-        %270 = OpLabel
-        %281 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %282 = OpLoad %float %281
-        %284 = OpFOrdGreaterThan %bool %282 %float_0_75
-               OpSelectionMerge %285 None
-               OpBranchConditional %284 %286 %285
-        %286 = OpLabel
-        %288 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %289 = OpLoad %int %288
-        %291 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %292 = OpLoad %float %291
-        %293 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %294 = OpConvertSToF %float %289
-        %295 = OpFAdd %float %292 %294
-               OpStore %293 %295
-               OpBranch %285
-        %285 = OpLabel
-        %297 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %298 = OpLoad %int %297
-        %299 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %300 = OpLoad %float %299
-        %301 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %302 = OpConvertSToF %float %298
-        %303 = OpFAdd %float %300 %302
-               OpStore %301 %303
-        %304 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %305 = OpLoad %float %304
-        %306 = OpFOrdGreaterThan %bool %305 %float_0_25
-               OpSelectionMerge %307 None
-               OpBranchConditional %306 %308 %307
-        %308 = OpLabel
-        %310 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %311 = OpLoad %int %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %313 = OpLoad %float %312
-        %314 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %315 = OpConvertSToF %float %311
-        %316 = OpFAdd %float %313 %315
-               OpStore %314 %316
-               OpBranch %307
-        %307 = OpLabel
-        %317 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %318 = OpLoad %float %317
-        %319 = OpFOrdGreaterThan %bool %318 %float_0_5
-               OpSelectionMerge %320 None
-               OpBranchConditional %319 %321 %320
-        %321 = OpLabel
-        %323 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %324 = OpLoad %int %323
-        %325 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %326 = OpLoad %float %325
-        %327 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %328 = OpConvertSToF %float %324
-        %329 = OpFAdd %float %326 %328
-               OpStore %327 %329
-               OpBranch %320
-        %320 = OpLabel
-        %330 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %331 = OpLoad %float %330
-        %332 = OpFOrdGreaterThan %bool %331 %float_0_75
-               OpSelectionMerge %333 None
-               OpBranchConditional %332 %334 %333
-        %334 = OpLabel
-        %336 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %337 = OpLoad %int %336
-        %338 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %339 = OpLoad %float %338
-        %340 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %341 = OpConvertSToF %float %337
-        %342 = OpFAdd %float %339 %341
-               OpStore %340 %342
-               OpBranch %333
-        %333 = OpLabel
-        %344 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %345 = OpLoad %int %344
-        %346 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %347 = OpLoad %float %346
-        %348 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %349 = OpConvertSToF %float %345
-        %350 = OpFAdd %float %347 %349
-               OpStore %348 %350
-        %351 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %352 = OpLoad %float %351
-        %353 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %354 = OpLoad %float %353
-        %357 = OpFSub %float %352 %354
-        %355 = OpExtInst %float %356 FAbs %357
-        %358 = OpFOrdLessThan %bool %355 %float_0_25
-               OpSelectionMerge %359 None
-               OpBranchConditional %358 %360 %359
-        %360 = OpLabel
-        %361 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %362 = OpLoad %int %361
-        %363 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %364 = OpLoad %float %363
-        %365 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %366 = OpConvertSToF %float %362
-        %367 = OpFAdd %float %364 %366
-               OpStore %365 %367
-               OpBranch %359
-        %359 = OpLabel
-        %368 = OpLoad %v3float %color
-        %369 = OpExtInst %v3float %356 Normalize %368
-        %370 = OpCompositeExtract %float %369 0
-        %371 = OpCompositeExtract %float %369 1
-        %372 = OpCompositeExtract %float %369 2
-        %373 = OpCompositeConstruct %v4float %370 %371 %372 %float_1
-               OpStore %frag_color %373
-        %374 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %374
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %375
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %379 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %380 = OpFunctionCall %void %main_1
-        %381 = OpLoad %v4float %frag_color
-        %382 = OpLoad %v4float %gl_Position
-        %383 = OpCompositeConstruct %main_out %381 %382
-               OpReturnValue %383
-               OpFunctionEnd
-       %main = OpFunction %void None %115
-        %385 = OpLabel
-        %387 = OpLoad %v4float %x_GLF_pos_param_1
-        %386 = OpFunctionCall %main_out %main_inner %387
-        %388 = OpCompositeExtract %v4float %386 0
-               OpStore %frag_color_1_1 %388
-        %389 = OpCompositeExtract %v4float %386 1
-               OpStore %gl_Position_1 %389
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 134b77f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,264 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_239 : i32 = *(i);
-  let x_241 : i32 = obj.numbers[x_239];
-  temp = x_241;
-  let x_242 : i32 = *(i);
-  let x_243 : i32 = *(j);
-  let x_245 : i32 = obj.numbers[x_243];
-  obj.numbers[x_242] = x_245;
-  let x_247 : i32 = *(j);
-  let x_248 : i32 = temp;
-  obj.numbers[x_247] = x_248;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_251 : i32 = *(h);
-  let x_253 : i32 = obj.numbers[x_251];
-  pivot = x_253;
-  let x_254 : i32 = *(l);
-  i_1 = (x_254 - 1);
-  let x_256 : i32 = *(l);
-  j_1 = x_256;
-  loop {
-    let x_261 : i32 = j_1;
-    let x_262 : i32 = *(h);
-    if ((x_261 <= (x_262 - 1))) {
-    } else {
-      break;
-    }
-    let x_266 : i32 = j_1;
-    let x_268 : i32 = obj.numbers[x_266];
-    let x_269 : i32 = pivot;
-    if ((x_268 <= x_269)) {
-      let x_273 : i32 = i_1;
-      i_1 = (x_273 + 1);
-      let x_275 : i32 = i_1;
-      param = x_275;
-      let x_276 : i32 = j_1;
-      param_1 = x_276;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_278 : i32 = j_1;
-      j_1 = (x_278 + 1);
-    }
-  }
-  let x_280 : i32 = i_1;
-  param_2 = (x_280 + 1);
-  let x_282 : i32 = *(h);
-  param_3 = x_282;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_284 : i32 = i_1;
-  return (x_284 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_287 : i32 = top;
-  let x_288 : i32 = (x_287 + 1);
-  top = x_288;
-  let x_289 : i32 = l_1;
-  stack[x_288] = x_289;
-  let x_291 : i32 = top;
-  let x_292 : i32 = (x_291 + 1);
-  top = x_292;
-  let x_293 : i32 = h_1;
-  stack[x_292] = x_293;
-  loop {
-    let x_299 : i32 = top;
-    if ((x_299 >= 0)) {
-    } else {
-      break;
-    }
-    let x_302 : i32 = top;
-    top = (x_302 - 1);
-    let x_305 : i32 = stack[x_302];
-    h_1 = x_305;
-    let x_306 : i32 = top;
-    top = (x_306 - 1);
-    let x_309 : i32 = stack[x_306];
-    l_1 = x_309;
-    let x_310 : i32 = l_1;
-    param_4 = x_310;
-    let x_311 : i32 = h_1;
-    param_5 = x_311;
-    let x_312 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_312;
-    let x_313 : i32 = p;
-    let x_315 : i32 = l_1;
-    if (((x_313 - 1) > x_315)) {
-      let x_319 : i32 = top;
-      let x_320 : i32 = (x_319 + 1);
-      top = x_320;
-      let x_321 : i32 = l_1;
-      stack[x_320] = x_321;
-      let x_323 : i32 = top;
-      let x_324 : i32 = (x_323 + 1);
-      top = x_324;
-      let x_325 : i32 = p;
-      stack[x_324] = (x_325 - 1);
-    }
-    let x_328 : i32 = p;
-    let x_330 : i32 = h_1;
-    if (((x_328 + 1) < x_330)) {
-      let x_334 : i32 = top;
-      let x_335 : i32 = (x_334 + 1);
-      top = x_335;
-      let x_336 : i32 = p;
-      stack[x_335] = (x_336 + 1);
-      let x_339 : i32 = top;
-      let x_340 : i32 = (x_339 + 1);
-      top = x_340;
-      let x_341 : i32 = h_1;
-      stack[x_340] = x_341;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_90 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_90 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_97 : i32 = i_2;
-    if ((x_97 < 10)) {
-    } else {
-      break;
-    }
-    let x_100 : i32 = i_2;
-    let x_101 : i32 = i_2;
-    obj.numbers[x_100] = (10 - x_101);
-    let x_104 : i32 = i_2;
-    let x_105 : i32 = i_2;
-    let x_107 : i32 = obj.numbers[x_105];
-    let x_108 : i32 = i_2;
-    let x_110 : i32 = obj.numbers[x_108];
-    obj.numbers[x_104] = (x_107 * x_110);
-
-    continuing {
-      let x_113 : i32 = i_2;
-      i_2 = (x_113 + 1);
-    }
-  }
-  quicksort_();
-  let x_116 : vec4<f32> = x_GLF_FragCoord;
-  let x_119 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_116.x, x_116.y) / x_119);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_122 : i32 = obj.numbers[0];
-  let x_125 : f32 = color.x;
-  color.x = (x_125 + f32(x_122));
-  let x_129 : f32 = uv.x;
-  if ((x_129 > 0.25)) {
-    let x_134 : i32 = obj.numbers[1];
-    let x_137 : f32 = color.x;
-    color.x = (x_137 + f32(x_134));
-  }
-  let x_141 : f32 = uv.x;
-  if ((x_141 > 0.5)) {
-    let x_146 : i32 = obj.numbers[2];
-    let x_149 : f32 = color.y;
-    color.y = (x_149 + f32(x_146));
-  }
-  let x_153 : f32 = uv.x;
-  if ((x_153 > 0.75)) {
-    let x_158 : i32 = obj.numbers[3];
-    let x_161 : f32 = color.z;
-    color.z = (x_161 + f32(x_158));
-  }
-  let x_165 : i32 = obj.numbers[4];
-  let x_168 : f32 = color.y;
-  color.y = (x_168 + f32(x_165));
-  let x_172 : f32 = uv.y;
-  if ((x_172 > 0.25)) {
-    let x_177 : i32 = obj.numbers[5];
-    let x_180 : f32 = color.x;
-    color.x = (x_180 + f32(x_177));
-  }
-  let x_184 : f32 = uv.y;
-  if ((x_184 > 0.5)) {
-    let x_189 : i32 = obj.numbers[6];
-    let x_192 : f32 = color.y;
-    color.y = (x_192 + f32(x_189));
-  }
-  let x_196 : f32 = uv.y;
-  if ((x_196 > 0.75)) {
-    let x_201 : i32 = obj.numbers[7];
-    let x_204 : f32 = color.z;
-    color.z = (x_204 + f32(x_201));
-  }
-  let x_208 : i32 = obj.numbers[8];
-  let x_211 : f32 = color.z;
-  color.z = (x_211 + f32(x_208));
-  let x_215 : f32 = uv.x;
-  let x_217 : f32 = uv.y;
-  if ((abs((x_215 - x_217)) < 0.25)) {
-    let x_224 : i32 = obj.numbers[9];
-    let x_227 : f32 = color.x;
-    color.x = (x_227 + f32(x_224));
-  }
-  let x_230 : vec3<f32> = color;
-  let x_231 : vec3<f32> = normalize(x_230);
-  frag_color = vec4<f32>(x_231.x, x_231.y, x_231.z, 1.0);
-  let x_236 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_236;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.hlsl
deleted file mode 100644
index 8dba20c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_GLF_color = frag_color;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 frag_color_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 frag_color_param) {
-  frag_color = frag_color_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.frag_color_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.msl
deleted file mode 100644
index c305a2b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_2 {
-  float4 frag_color_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_12 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_12;
-  return;
-}
-
-main_out tint_symbol_inner(float4 frag_color_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = frag_color_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.frag_color_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.spvasm
deleted file mode 100644
index 4c129a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %frag_color_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %frag_color_param_1 "frag_color_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %frag_color "frag_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %frag_color_param "frag_color_param"
-               OpName %main "main"
-               OpDecorate %frag_color_param_1 Location 0
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%frag_color_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %16 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %15 = OpLoad %v4float %frag_color
-               OpStore %x_GLF_color %15
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %16
-%frag_color_param = OpFunctionParameter %v4float
-         %20 = OpLabel
-               OpStore %frag_color %frag_color_param
-         %21 = OpFunctionCall %void %main_1
-         %22 = OpLoad %v4float %x_GLF_color
-         %23 = OpCompositeConstruct %main_out %22
-               OpReturnValue %23
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %27 = OpLoad %v4float %frag_color_param_1
-         %26 = OpFunctionCall %main_out %main_inner %27
-         %28 = OpCompositeExtract %v4float %26 0
-               OpStore %x_GLF_color_1_1 %28
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.wgsl
deleted file mode 100644
index b7d3ed1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> frag_color : vec4<f32>;
-
-fn main_1() {
-  let x_12 : vec4<f32> = frag_color;
-  x_GLF_color = x_12;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[location(0)]] frag_color_param : vec4<f32>) -> main_out {
-  frag_color = frag_color_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.hlsl
deleted file mode 100644
index 8dba20c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  x_GLF_color = frag_color;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 frag_color_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 frag_color_param) {
-  frag_color = frag_color_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.frag_color_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.msl
deleted file mode 100644
index c305a2b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_2 {
-  float4 frag_color_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_12 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_12;
-  return;
-}
-
-main_out tint_symbol_inner(float4 frag_color_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = frag_color_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.x_GLF_color_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.frag_color_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.spvasm
deleted file mode 100644
index 4c129a5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %frag_color_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %frag_color_param_1 "frag_color_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %frag_color "frag_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %frag_color_param "frag_color_param"
-               OpName %main "main"
-               OpDecorate %frag_color_param_1 Location 0
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%frag_color_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %16 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %15 = OpLoad %v4float %frag_color
-               OpStore %x_GLF_color %15
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %16
-%frag_color_param = OpFunctionParameter %v4float
-         %20 = OpLabel
-               OpStore %frag_color %frag_color_param
-         %21 = OpFunctionCall %void %main_1
-         %22 = OpLoad %v4float %x_GLF_color
-         %23 = OpCompositeConstruct %main_out %22
-               OpReturnValue %23
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %27 = OpLoad %v4float %frag_color_param_1
-         %26 = OpFunctionCall %main_out %main_inner %27
-         %28 = OpCompositeExtract %v4float %26 0
-               OpStore %x_GLF_color_1_1 %28
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.wgsl
deleted file mode 100644
index b7d3ed1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> frag_color : vec4<f32>;
-
-fn main_1() {
-  let x_12 : vec4<f32> = frag_color;
-  x_GLF_color = x_12;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[location(0)]] frag_color_param : vec4<f32>) -> main_out {
-  frag_color = frag_color_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6e863ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,234 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_33 : register(b0, space0) {
-  uint4 x_33[1];
-};
-cbuffer cbuffer_x_36 : register(b1, space0) {
-  uint4 x_36[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_250 = i;
-  const int x_252 = obj.numbers[x_250];
-  temp = x_252;
-  const int x_253 = i;
-  const int x_254 = j;
-  const int x_256 = obj.numbers[x_254];
-  obj.numbers[x_253] = x_256;
-  const int x_258 = j;
-  obj.numbers[x_258] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_262 = h;
-  const int x_264 = obj.numbers[x_262];
-  pivot = x_264;
-  const int x_265 = l;
-  i_1 = (x_265 - 1);
-  const int x_267 = l;
-  j_1 = x_267;
-  while (true) {
-    const int x_272 = j_1;
-    const int x_273 = h;
-    if ((x_272 <= (x_273 - 1))) {
-    } else {
-      break;
-    }
-    const int x_279 = obj.numbers[j_1];
-    if ((x_279 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_293 = h;
-  param_3 = x_293;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_299 = (top + 1);
-  top = x_299;
-  stack[x_299] = l_1;
-  const int x_303 = (top + 1);
-  top = x_303;
-  stack[x_303] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_313 = top;
-    top = (x_313 - 1);
-    const int x_316 = stack[x_313];
-    h_1 = x_316;
-    const int x_317 = top;
-    top = (x_317 - 1);
-    const int x_320 = stack[x_317];
-    l_1 = x_320;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_323 = performPartition_i1_i1_(param_4, param_5);
-    p = x_323;
-    if (((p - 1) > l_1)) {
-      const int x_331 = (top + 1);
-      top = x_331;
-      stack[x_331] = l_1;
-      const int x_335 = (top + 1);
-      top = x_335;
-      stack[x_335] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_346 = (top + 1);
-      top = x_346;
-      stack[x_346] = (p + 1);
-      const int x_351 = (top + 1);
-      top = x_351;
-      stack[x_351] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const float x_109 = asfloat(x_33[0].x);
-      const float x_111 = asfloat(x_33[0].y);
-      if ((x_109 > x_111)) {
-        break;
-      }
-      const int x_115 = i_2;
-      const int x_118 = obj.numbers[i_2];
-      const int x_121 = obj.numbers[i_2];
-      obj.numbers[x_115] = (x_118 * x_121);
-    }
-  }
-  quicksort_();
-  const float4 x_127 = x_GLF_FragCoord;
-  const float2 x_130 = asfloat(x_36[0].xy);
-  uv = (float2(x_127.x, x_127.y) / x_130);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_133 = obj.numbers[0];
-  const float x_136 = color.x;
-  color.x = (x_136 + float(x_133));
-  const float x_140 = uv.x;
-  if ((x_140 > 0.25f)) {
-    const int x_145 = obj.numbers[1];
-    const float x_148 = color.x;
-    color.x = (x_148 + float(x_145));
-  }
-  const float x_152 = uv.x;
-  if ((x_152 > 0.5f)) {
-    const int x_157 = obj.numbers[2];
-    const float x_160 = color.y;
-    color.y = (x_160 + float(x_157));
-  }
-  const float x_164 = uv.x;
-  if ((x_164 > 0.75f)) {
-    const int x_169 = obj.numbers[3];
-    const float x_172 = color.z;
-    color.z = (x_172 + float(x_169));
-  }
-  const int x_176 = obj.numbers[4];
-  const float x_179 = color.y;
-  color.y = (x_179 + float(x_176));
-  const float x_183 = uv.y;
-  if ((x_183 > 0.25f)) {
-    const int x_188 = obj.numbers[5];
-    const float x_191 = color.x;
-    color.x = (x_191 + float(x_188));
-  }
-  const float x_195 = uv.y;
-  if ((x_195 > 0.5f)) {
-    const int x_200 = obj.numbers[6];
-    const float x_203 = color.y;
-    color.y = (x_203 + float(x_200));
-  }
-  const float x_207 = uv.y;
-  if ((x_207 > 0.75f)) {
-    const int x_212 = obj.numbers[7];
-    const float x_215 = color.z;
-    color.z = (x_215 + float(x_212));
-  }
-  const int x_219 = obj.numbers[8];
-  const float x_222 = color.z;
-  color.z = (x_222 + float(x_219));
-  const float x_226 = uv.x;
-  const float x_228 = uv.y;
-  if ((abs((x_226 - x_228)) < 0.25f)) {
-    const int x_235 = obj.numbers[9];
-    const float x_238 = color.x;
-    color.x = (x_238 + float(x_235));
-  }
-  const float3 x_242 = normalize(color);
-  frag_color = float4(x_242.x, x_242.y, x_242.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 x_GLF_pos_param = tint_symbol.x_GLF_pos_param;
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_3 = {frag_color, gl_Position};
-  const tint_symbol_2 tint_symbol_6 = {tint_symbol_3.frag_color_1, tint_symbol_3.gl_Position};
-  return tint_symbol_6;
-}
-C:\src\tint\test\Shader@0x000001CC31585100(133,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001CC31585100(25,3-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x000001CC31585100(46,3-14): error X3511: forced to unroll loop, but unrolling failed.
-C:\src\tint\test\Shader@0x000001CC31585100(88,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.msl
deleted file mode 100644
index f8ffe93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,280 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_5) {
-  int temp = 0;
-  int const x_250 = *(i);
-  int const x_252 = (*(tint_symbol_5)).numbers.arr[x_250];
-  temp = x_252;
-  int const x_253 = *(i);
-  int const x_254 = *(j);
-  int const x_256 = (*(tint_symbol_5)).numbers.arr[x_254];
-  (*(tint_symbol_5)).numbers.arr[x_253] = x_256;
-  int const x_258 = *(j);
-  int const x_259 = temp;
-  (*(tint_symbol_5)).numbers.arr[x_258] = x_259;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_6) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_262 = *(h);
-  int const x_264 = (*(tint_symbol_6)).numbers.arr[x_262];
-  pivot = x_264;
-  int const x_265 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_265) - as_type<uint>(1)));
-  int const x_267 = *(l);
-  j_1 = x_267;
-  while (true) {
-    int const x_272 = j_1;
-    int const x_273 = *(h);
-    if ((x_272 <= as_type<int>((as_type<uint>(x_273) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_277 = j_1;
-    int const x_279 = (*(tint_symbol_6)).numbers.arr[x_277];
-    int const x_280 = pivot;
-    if ((x_279 <= x_280)) {
-      int const x_284 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
-      int const x_286 = i_1;
-      param = x_286;
-      int const x_287 = j_1;
-      param_1 = x_287;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_6);
-    }
-    {
-      int const x_289 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_289) + as_type<uint>(1)));
-    }
-  }
-  int const x_291 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
-  int const x_293 = *(h);
-  param_3 = x_293;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_6);
-  int const x_295 = i_1;
-  return as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_7) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_298 = top;
-  int const x_299 = as_type<int>((as_type<uint>(x_298) + as_type<uint>(1)));
-  top = x_299;
-  int const x_300 = l_1;
-  stack.arr[x_299] = x_300;
-  int const x_302 = top;
-  int const x_303 = as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
-  top = x_303;
-  int const x_304 = h_1;
-  stack.arr[x_303] = x_304;
-  while (true) {
-    int const x_310 = top;
-    if ((x_310 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_313 = top;
-    top = as_type<int>((as_type<uint>(x_313) - as_type<uint>(1)));
-    int const x_316 = stack.arr[x_313];
-    h_1 = x_316;
-    int const x_317 = top;
-    top = as_type<int>((as_type<uint>(x_317) - as_type<uint>(1)));
-    int const x_320 = stack.arr[x_317];
-    l_1 = x_320;
-    int const x_321 = l_1;
-    param_4 = x_321;
-    int const x_322 = h_1;
-    param_5 = x_322;
-    int const x_323 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_7);
-    p = x_323;
-    int const x_324 = p;
-    int const x_326 = l_1;
-    if ((as_type<int>((as_type<uint>(x_324) - as_type<uint>(1))) > x_326)) {
-      int const x_330 = top;
-      int const x_331 = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
-      top = x_331;
-      int const x_332 = l_1;
-      stack.arr[x_331] = x_332;
-      int const x_334 = top;
-      int const x_335 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
-      top = x_335;
-      int const x_336 = p;
-      stack.arr[x_335] = as_type<int>((as_type<uint>(x_336) - as_type<uint>(1)));
-    }
-    int const x_339 = p;
-    int const x_341 = h_1;
-    if ((as_type<int>((as_type<uint>(x_339) + as_type<uint>(1))) < x_341)) {
-      int const x_345 = top;
-      int const x_346 = as_type<int>((as_type<uint>(x_345) + as_type<uint>(1)));
-      top = x_346;
-      int const x_347 = p;
-      stack.arr[x_346] = as_type<int>((as_type<uint>(x_347) + as_type<uint>(1)));
-      int const x_350 = top;
-      int const x_351 = as_type<int>((as_type<uint>(x_350) + as_type<uint>(1)));
-      top = x_351;
-      int const x_352 = h_1;
-      stack.arr[x_351] = x_352;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_33, constant buf1& x_36, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_94 = *(tint_symbol_8);
-  *(tint_symbol_9) = ((x_94 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_101 = i_2;
-    if ((x_101 < 10)) {
-    } else {
-      break;
-    }
-    int const x_104 = i_2;
-    int const x_105 = i_2;
-    (*(tint_symbol_10)).numbers.arr[x_104] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_105)));
-    float const x_109 = x_33.injectionSwitch.x;
-    float const x_111 = x_33.injectionSwitch.y;
-    if ((x_109 > x_111)) {
-      break;
-    }
-    int const x_115 = i_2;
-    int const x_116 = i_2;
-    int const x_118 = (*(tint_symbol_10)).numbers.arr[x_116];
-    int const x_119 = i_2;
-    int const x_121 = (*(tint_symbol_10)).numbers.arr[x_119];
-    (*(tint_symbol_10)).numbers.arr[x_115] = as_type<int>((as_type<uint>(x_118) * as_type<uint>(x_121)));
-    {
-      int const x_124 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_10);
-  float4 const x_127 = *(tint_symbol_9);
-  float2 const x_130 = x_36.resolution;
-  uv = (float2(x_127.x, x_127.y) / x_130);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_133 = (*(tint_symbol_10)).numbers.arr[0];
-  float const x_136 = color.x;
-  color.x = (x_136 + float(x_133));
-  float const x_140 = uv.x;
-  if ((x_140 > 0.25f)) {
-    int const x_145 = (*(tint_symbol_10)).numbers.arr[1];
-    float const x_148 = color.x;
-    color.x = (x_148 + float(x_145));
-  }
-  float const x_152 = uv.x;
-  if ((x_152 > 0.5f)) {
-    int const x_157 = (*(tint_symbol_10)).numbers.arr[2];
-    float const x_160 = color.y;
-    color.y = (x_160 + float(x_157));
-  }
-  float const x_164 = uv.x;
-  if ((x_164 > 0.75f)) {
-    int const x_169 = (*(tint_symbol_10)).numbers.arr[3];
-    float const x_172 = color.z;
-    color.z = (x_172 + float(x_169));
-  }
-  int const x_176 = (*(tint_symbol_10)).numbers.arr[4];
-  float const x_179 = color.y;
-  color.y = (x_179 + float(x_176));
-  float const x_183 = uv.y;
-  if ((x_183 > 0.25f)) {
-    int const x_188 = (*(tint_symbol_10)).numbers.arr[5];
-    float const x_191 = color.x;
-    color.x = (x_191 + float(x_188));
-  }
-  float const x_195 = uv.y;
-  if ((x_195 > 0.5f)) {
-    int const x_200 = (*(tint_symbol_10)).numbers.arr[6];
-    float const x_203 = color.y;
-    color.y = (x_203 + float(x_200));
-  }
-  float const x_207 = uv.y;
-  if ((x_207 > 0.75f)) {
-    int const x_212 = (*(tint_symbol_10)).numbers.arr[7];
-    float const x_215 = color.z;
-    color.z = (x_215 + float(x_212));
-  }
-  int const x_219 = (*(tint_symbol_10)).numbers.arr[8];
-  float const x_222 = color.z;
-  color.z = (x_222 + float(x_219));
-  float const x_226 = uv.x;
-  float const x_228 = uv.y;
-  if ((fabs((x_226 - x_228)) < 0.25f)) {
-    int const x_235 = (*(tint_symbol_10)).numbers.arr[9];
-    float const x_238 = color.x;
-    color.x = (x_238 + float(x_235));
-  }
-  float3 const x_241 = color;
-  float3 const x_242 = normalize(x_241);
-  *(tint_symbol_11) = float4(x_242.x, x_242.y, x_242.z, 1.0f);
-  float4 const x_247 = *(tint_symbol_8);
-  *(tint_symbol_12) = x_247;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_33, constant buf1& x_36, float4 x_GLF_pos_param, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14, thread QuicksortObject* const tint_symbol_15, thread float4* const tint_symbol_16, thread float4* const tint_symbol_17) {
-  *(tint_symbol_13) = x_GLF_pos_param;
-  main_1(x_33, x_36, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16, tint_symbol_17);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_16), .gl_Position=*(tint_symbol_17)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_33 [[buffer(0)]], constant buf1& x_36 [[buffer(1)]]) {
-  thread float4 tint_symbol_18 = 0.0f;
-  thread float4 tint_symbol_19 = 0.0f;
-  thread QuicksortObject tint_symbol_20 = {};
-  thread float4 tint_symbol_21 = 0.0f;
-  thread float4 tint_symbol_22 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_33, x_36, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20), &(tint_symbol_21), &(tint_symbol_22));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8156ab9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,589 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 401
-; Schema: 0
-               OpCapability Shader
-        %367 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_33 "x_33"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_36 "x_36"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_33 NonWritable
-               OpDecorate %x_33 DescriptorSet 0
-               OpDecorate %x_33 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_36 NonWritable
-               OpDecorate %x_36 DescriptorSet 0
-               OpDecorate %x_36 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_33 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_36 = OpVariable %_ptr_Uniform_buf1 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %40 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %58 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %118 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %126 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %198 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %202 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %206 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-        %209 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %256 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %386 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %32
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %38 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %40
-         %42 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
-         %46 = OpLoad %int %45
-               OpStore %temp %46
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %j
-         %51 = OpAccessChain %_ptr_Private_int %obj %uint_0 %50
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
-               OpStore %53 %52
-         %55 = OpLoad %int %j
-         %56 = OpLoad %int %temp
-         %57 = OpAccessChain %_ptr_Private_int %obj %uint_0 %55
-               OpStore %57 %56
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %58
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %62 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %40
-        %i_1 = OpVariable %_ptr_Function_int Function %40
-        %j_1 = OpVariable %_ptr_Function_int Function %40
-      %param = OpVariable %_ptr_Function_int Function %40
-    %param_1 = OpVariable %_ptr_Function_int Function %40
-    %param_2 = OpVariable %_ptr_Function_int Function %40
-    %param_3 = OpVariable %_ptr_Function_int Function %40
-         %71 = OpLoad %int %h
-         %72 = OpAccessChain %_ptr_Private_int %obj %uint_0 %71
-         %73 = OpLoad %int %72
-               OpStore %pivot %73
-         %75 = OpLoad %int %l
-         %77 = OpISub %int %75 %int_1
-               OpStore %i_1 %77
-         %79 = OpLoad %int %l
-               OpStore %j_1 %79
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %j_1
-         %86 = OpLoad %int %h
-         %87 = OpISub %int %86 %int_1
-         %88 = OpSLessThanEqual %bool %84 %87
-               OpSelectionMerge %90 None
-               OpBranchConditional %88 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %81
-         %90 = OpLabel
-         %93 = OpLoad %int %j_1
-         %94 = OpAccessChain %_ptr_Private_int %obj %uint_0 %93
-         %95 = OpLoad %int %94
-         %96 = OpLoad %int %pivot
-         %97 = OpSLessThanEqual %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpLoad %int %i_1
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %i_1 %101
-        %102 = OpLoad %int %i_1
-               OpStore %param %102
-        %103 = OpLoad %int %j_1
-               OpStore %param_1 %103
-        %104 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %98
-         %98 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-        %107 = OpLoad %int %j_1
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %j_1 %108
-               OpBranch %80
-         %81 = OpLabel
-        %109 = OpLoad %int %i_1
-        %110 = OpIAdd %int %109 %int_1
-               OpStore %param_2 %110
-        %112 = OpLoad %int %h
-               OpStore %param_3 %112
-        %113 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %116 = OpLoad %int %i_1
-        %117 = OpIAdd %int %116 %int_1
-               OpReturnValue %117
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %118
-        %120 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %40
-        %h_1 = OpVariable %_ptr_Function_int Function %40
-        %top = OpVariable %_ptr_Function_int Function %40
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %126
-          %p = OpVariable %_ptr_Function_int Function %40
-    %param_4 = OpVariable %_ptr_Function_int Function %40
-    %param_5 = OpVariable %_ptr_Function_int Function %40
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %133 = OpLoad %int %top
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %top %134
-        %135 = OpLoad %int %l_1
-        %136 = OpAccessChain %_ptr_Function_int %stack %134
-               OpStore %136 %135
-        %137 = OpLoad %int %top
-        %138 = OpIAdd %int %137 %int_1
-               OpStore %top %138
-        %139 = OpLoad %int %h_1
-        %140 = OpAccessChain %_ptr_Function_int %stack %138
-               OpStore %140 %139
-               OpBranch %141
-        %141 = OpLabel
-               OpLoopMerge %142 %143 None
-               OpBranch %144
-        %144 = OpLabel
-        %145 = OpLoad %int %top
-        %146 = OpSGreaterThanEqual %bool %145 %int_0
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %149
-        %148 = OpLabel
-               OpBranch %147
-        %149 = OpLabel
-               OpBranch %142
-        %147 = OpLabel
-        %150 = OpLoad %int %top
-        %151 = OpISub %int %150 %int_1
-               OpStore %top %151
-        %152 = OpAccessChain %_ptr_Function_int %stack %150
-        %153 = OpLoad %int %152
-               OpStore %h_1 %153
-        %154 = OpLoad %int %top
-        %155 = OpISub %int %154 %int_1
-               OpStore %top %155
-        %156 = OpAccessChain %_ptr_Function_int %stack %154
-        %157 = OpLoad %int %156
-               OpStore %l_1 %157
-        %158 = OpLoad %int %l_1
-               OpStore %param_4 %158
-        %159 = OpLoad %int %h_1
-               OpStore %param_5 %159
-        %160 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %160
-        %163 = OpLoad %int %p
-        %164 = OpLoad %int %l_1
-        %165 = OpISub %int %163 %int_1
-        %166 = OpSGreaterThan %bool %165 %164
-               OpSelectionMerge %167 None
-               OpBranchConditional %166 %168 %167
-        %168 = OpLabel
-        %169 = OpLoad %int %top
-        %170 = OpIAdd %int %169 %int_1
-               OpStore %top %170
-        %171 = OpLoad %int %l_1
-        %172 = OpAccessChain %_ptr_Function_int %stack %170
-               OpStore %172 %171
-        %173 = OpLoad %int %top
-        %174 = OpIAdd %int %173 %int_1
-               OpStore %top %174
-        %175 = OpLoad %int %p
-        %176 = OpAccessChain %_ptr_Function_int %stack %174
-        %177 = OpISub %int %175 %int_1
-               OpStore %176 %177
-               OpBranch %167
-        %167 = OpLabel
-        %178 = OpLoad %int %p
-        %179 = OpLoad %int %h_1
-        %180 = OpIAdd %int %178 %int_1
-        %181 = OpSLessThan %bool %180 %179
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %top
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %top %185
-        %186 = OpLoad %int %p
-        %187 = OpAccessChain %_ptr_Function_int %stack %185
-        %188 = OpIAdd %int %186 %int_1
-               OpStore %187 %188
-        %189 = OpLoad %int %top
-        %190 = OpIAdd %int %189 %int_1
-               OpStore %top %190
-        %191 = OpLoad %int %h_1
-        %192 = OpAccessChain %_ptr_Function_int %stack %190
-               OpStore %192 %191
-               OpBranch %182
-        %182 = OpLabel
-               OpBranch %143
-        %143 = OpLabel
-               OpBranch %141
-        %142 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %118
-        %194 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %40
-         %uv = OpVariable %_ptr_Function_v2float Function %198
-      %color = OpVariable %_ptr_Function_v3float Function %202
-        %203 = OpLoad %v4float %x_GLF_pos
-        %207 = OpFAdd %v4float %203 %206
-        %210 = OpFMul %v4float %207 %209
-               OpStore %x_GLF_FragCoord %210
-               OpStore %i_2 %int_0
-               OpBranch %211
-        %211 = OpLabel
-               OpLoopMerge %212 %213 None
-               OpBranch %214
-        %214 = OpLabel
-        %215 = OpLoad %int %i_2
-        %217 = OpSLessThan %bool %215 %int_10
-               OpSelectionMerge %218 None
-               OpBranchConditional %217 %219 %220
-        %219 = OpLabel
-               OpBranch %218
-        %220 = OpLabel
-               OpBranch %212
-        %218 = OpLabel
-        %221 = OpLoad %int %i_2
-        %222 = OpLoad %int %i_2
-        %223 = OpAccessChain %_ptr_Private_int %obj %uint_0 %221
-        %224 = OpISub %int %int_10 %222
-               OpStore %223 %224
-        %226 = OpAccessChain %_ptr_Uniform_float %x_33 %uint_0 %uint_0
-        %227 = OpLoad %float %226
-        %229 = OpAccessChain %_ptr_Uniform_float %x_33 %uint_0 %uint_1
-        %230 = OpLoad %float %229
-        %231 = OpFOrdGreaterThan %bool %227 %230
-               OpSelectionMerge %232 None
-               OpBranchConditional %231 %233 %232
-        %233 = OpLabel
-               OpBranch %212
-        %232 = OpLabel
-        %234 = OpLoad %int %i_2
-        %235 = OpLoad %int %i_2
-        %236 = OpAccessChain %_ptr_Private_int %obj %uint_0 %235
-        %237 = OpLoad %int %236
-        %238 = OpLoad %int %i_2
-        %239 = OpAccessChain %_ptr_Private_int %obj %uint_0 %238
-        %240 = OpLoad %int %239
-        %241 = OpAccessChain %_ptr_Private_int %obj %uint_0 %234
-        %242 = OpIMul %int %237 %240
-               OpStore %241 %242
-               OpBranch %213
-        %213 = OpLabel
-        %243 = OpLoad %int %i_2
-        %244 = OpIAdd %int %243 %int_1
-               OpStore %i_2 %244
-               OpBranch %211
-        %212 = OpLabel
-        %245 = OpFunctionCall %void %quicksort_
-        %246 = OpLoad %v4float %x_GLF_FragCoord
-        %248 = OpAccessChain %_ptr_Uniform_v2float %x_36 %uint_0
-        %249 = OpLoad %v2float %248
-        %250 = OpCompositeExtract %float %246 0
-        %251 = OpCompositeExtract %float %246 1
-        %252 = OpCompositeConstruct %v2float %250 %251
-        %253 = OpFDiv %v2float %252 %249
-               OpStore %uv %253
-               OpStore %color %256
-        %257 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %258 = OpLoad %int %257
-        %260 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %261 = OpLoad %float %260
-        %262 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %263 = OpConvertSToF %float %258
-        %264 = OpFAdd %float %261 %263
-               OpStore %262 %264
-        %265 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %266 = OpLoad %float %265
-        %268 = OpFOrdGreaterThan %bool %266 %float_0_25
-               OpSelectionMerge %269 None
-               OpBranchConditional %268 %270 %269
-        %270 = OpLabel
-        %271 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %272 = OpLoad %int %271
-        %273 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %274 = OpLoad %float %273
-        %275 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %276 = OpConvertSToF %float %272
-        %277 = OpFAdd %float %274 %276
-               OpStore %275 %277
-               OpBranch %269
-        %269 = OpLabel
-        %278 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %279 = OpLoad %float %278
-        %281 = OpFOrdGreaterThan %bool %279 %float_0_5
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %282
-        %283 = OpLabel
-        %285 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %286 = OpLoad %int %285
-        %287 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %288 = OpLoad %float %287
-        %289 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %290 = OpConvertSToF %float %286
-        %291 = OpFAdd %float %288 %290
-               OpStore %289 %291
-               OpBranch %282
-        %282 = OpLabel
-        %292 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %293 = OpLoad %float %292
-        %295 = OpFOrdGreaterThan %bool %293 %float_0_75
-               OpSelectionMerge %296 None
-               OpBranchConditional %295 %297 %296
-        %297 = OpLabel
-        %299 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %300 = OpLoad %int %299
-        %302 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %303 = OpLoad %float %302
-        %304 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %305 = OpConvertSToF %float %300
-        %306 = OpFAdd %float %303 %305
-               OpStore %304 %306
-               OpBranch %296
-        %296 = OpLabel
-        %308 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %309 = OpLoad %int %308
-        %310 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %311 = OpLoad %float %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %313 = OpConvertSToF %float %309
-        %314 = OpFAdd %float %311 %313
-               OpStore %312 %314
-        %315 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %316 = OpLoad %float %315
-        %317 = OpFOrdGreaterThan %bool %316 %float_0_25
-               OpSelectionMerge %318 None
-               OpBranchConditional %317 %319 %318
-        %319 = OpLabel
-        %321 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %322 = OpLoad %int %321
-        %323 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %324 = OpLoad %float %323
-        %325 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %326 = OpConvertSToF %float %322
-        %327 = OpFAdd %float %324 %326
-               OpStore %325 %327
-               OpBranch %318
-        %318 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %329 = OpLoad %float %328
-        %330 = OpFOrdGreaterThan %bool %329 %float_0_5
-               OpSelectionMerge %331 None
-               OpBranchConditional %330 %332 %331
-        %332 = OpLabel
-        %334 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %335 = OpLoad %int %334
-        %336 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %337 = OpLoad %float %336
-        %338 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %339 = OpConvertSToF %float %335
-        %340 = OpFAdd %float %337 %339
-               OpStore %338 %340
-               OpBranch %331
-        %331 = OpLabel
-        %341 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %342 = OpLoad %float %341
-        %343 = OpFOrdGreaterThan %bool %342 %float_0_75
-               OpSelectionMerge %344 None
-               OpBranchConditional %343 %345 %344
-        %345 = OpLabel
-        %347 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %348 = OpLoad %int %347
-        %349 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %350 = OpLoad %float %349
-        %351 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %352 = OpConvertSToF %float %348
-        %353 = OpFAdd %float %350 %352
-               OpStore %351 %353
-               OpBranch %344
-        %344 = OpLabel
-        %355 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %356 = OpLoad %int %355
-        %357 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %358 = OpLoad %float %357
-        %359 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %360 = OpConvertSToF %float %356
-        %361 = OpFAdd %float %358 %360
-               OpStore %359 %361
-        %362 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %363 = OpLoad %float %362
-        %364 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %365 = OpLoad %float %364
-        %368 = OpFSub %float %363 %365
-        %366 = OpExtInst %float %367 FAbs %368
-        %369 = OpFOrdLessThan %bool %366 %float_0_25
-               OpSelectionMerge %370 None
-               OpBranchConditional %369 %371 %370
-        %371 = OpLabel
-        %372 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %373 = OpLoad %int %372
-        %374 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %375 = OpLoad %float %374
-        %376 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %377 = OpConvertSToF %float %373
-        %378 = OpFAdd %float %375 %377
-               OpStore %376 %378
-               OpBranch %370
-        %370 = OpLabel
-        %379 = OpLoad %v3float %color
-        %380 = OpExtInst %v3float %367 Normalize %379
-        %381 = OpCompositeExtract %float %380 0
-        %382 = OpCompositeExtract %float %380 1
-        %383 = OpCompositeExtract %float %380 2
-        %384 = OpCompositeConstruct %v4float %381 %382 %383 %float_1
-               OpStore %frag_color %384
-        %385 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %385
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %386
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %390 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %391 = OpFunctionCall %void %main_1
-        %392 = OpLoad %v4float %frag_color
-        %393 = OpLoad %v4float %gl_Position
-        %394 = OpCompositeConstruct %main_out %392 %393
-               OpReturnValue %394
-               OpFunctionEnd
-       %main = OpFunction %void None %118
-        %396 = OpLabel
-        %398 = OpLoad %v4float %x_GLF_pos_param_1
-        %397 = OpFunctionCall %main_out %main_inner %398
-        %399 = OpCompositeExtract %v4float %397 0
-               OpStore %frag_color_1_1 %399
-        %400 = OpCompositeExtract %v4float %397 1
-               OpStore %gl_Position_1 %400
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.wgsl
deleted file mode 100644
index b0ecbc4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,276 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_33 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_36 : buf1;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_250 : i32 = *(i);
-  let x_252 : i32 = obj.numbers[x_250];
-  temp = x_252;
-  let x_253 : i32 = *(i);
-  let x_254 : i32 = *(j);
-  let x_256 : i32 = obj.numbers[x_254];
-  obj.numbers[x_253] = x_256;
-  let x_258 : i32 = *(j);
-  let x_259 : i32 = temp;
-  obj.numbers[x_258] = x_259;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_262 : i32 = *(h);
-  let x_264 : i32 = obj.numbers[x_262];
-  pivot = x_264;
-  let x_265 : i32 = *(l);
-  i_1 = (x_265 - 1);
-  let x_267 : i32 = *(l);
-  j_1 = x_267;
-  loop {
-    let x_272 : i32 = j_1;
-    let x_273 : i32 = *(h);
-    if ((x_272 <= (x_273 - 1))) {
-    } else {
-      break;
-    }
-    let x_277 : i32 = j_1;
-    let x_279 : i32 = obj.numbers[x_277];
-    let x_280 : i32 = pivot;
-    if ((x_279 <= x_280)) {
-      let x_284 : i32 = i_1;
-      i_1 = (x_284 + 1);
-      let x_286 : i32 = i_1;
-      param = x_286;
-      let x_287 : i32 = j_1;
-      param_1 = x_287;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_289 : i32 = j_1;
-      j_1 = (x_289 + 1);
-    }
-  }
-  let x_291 : i32 = i_1;
-  param_2 = (x_291 + 1);
-  let x_293 : i32 = *(h);
-  param_3 = x_293;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_295 : i32 = i_1;
-  return (x_295 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_298 : i32 = top;
-  let x_299 : i32 = (x_298 + 1);
-  top = x_299;
-  let x_300 : i32 = l_1;
-  stack[x_299] = x_300;
-  let x_302 : i32 = top;
-  let x_303 : i32 = (x_302 + 1);
-  top = x_303;
-  let x_304 : i32 = h_1;
-  stack[x_303] = x_304;
-  loop {
-    let x_310 : i32 = top;
-    if ((x_310 >= 0)) {
-    } else {
-      break;
-    }
-    let x_313 : i32 = top;
-    top = (x_313 - 1);
-    let x_316 : i32 = stack[x_313];
-    h_1 = x_316;
-    let x_317 : i32 = top;
-    top = (x_317 - 1);
-    let x_320 : i32 = stack[x_317];
-    l_1 = x_320;
-    let x_321 : i32 = l_1;
-    param_4 = x_321;
-    let x_322 : i32 = h_1;
-    param_5 = x_322;
-    let x_323 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_323;
-    let x_324 : i32 = p;
-    let x_326 : i32 = l_1;
-    if (((x_324 - 1) > x_326)) {
-      let x_330 : i32 = top;
-      let x_331 : i32 = (x_330 + 1);
-      top = x_331;
-      let x_332 : i32 = l_1;
-      stack[x_331] = x_332;
-      let x_334 : i32 = top;
-      let x_335 : i32 = (x_334 + 1);
-      top = x_335;
-      let x_336 : i32 = p;
-      stack[x_335] = (x_336 - 1);
-    }
-    let x_339 : i32 = p;
-    let x_341 : i32 = h_1;
-    if (((x_339 + 1) < x_341)) {
-      let x_345 : i32 = top;
-      let x_346 : i32 = (x_345 + 1);
-      top = x_346;
-      let x_347 : i32 = p;
-      stack[x_346] = (x_347 + 1);
-      let x_350 : i32 = top;
-      let x_351 : i32 = (x_350 + 1);
-      top = x_351;
-      let x_352 : i32 = h_1;
-      stack[x_351] = x_352;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_94 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_94 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_101 : i32 = i_2;
-    if ((x_101 < 10)) {
-    } else {
-      break;
-    }
-    let x_104 : i32 = i_2;
-    let x_105 : i32 = i_2;
-    obj.numbers[x_104] = (10 - x_105);
-    let x_109 : f32 = x_33.injectionSwitch.x;
-    let x_111 : f32 = x_33.injectionSwitch.y;
-    if ((x_109 > x_111)) {
-      break;
-    }
-    let x_115 : i32 = i_2;
-    let x_116 : i32 = i_2;
-    let x_118 : i32 = obj.numbers[x_116];
-    let x_119 : i32 = i_2;
-    let x_121 : i32 = obj.numbers[x_119];
-    obj.numbers[x_115] = (x_118 * x_121);
-
-    continuing {
-      let x_124 : i32 = i_2;
-      i_2 = (x_124 + 1);
-    }
-  }
-  quicksort_();
-  let x_127 : vec4<f32> = x_GLF_FragCoord;
-  let x_130 : vec2<f32> = x_36.resolution;
-  uv = (vec2<f32>(x_127.x, x_127.y) / x_130);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_133 : i32 = obj.numbers[0];
-  let x_136 : f32 = color.x;
-  color.x = (x_136 + f32(x_133));
-  let x_140 : f32 = uv.x;
-  if ((x_140 > 0.25)) {
-    let x_145 : i32 = obj.numbers[1];
-    let x_148 : f32 = color.x;
-    color.x = (x_148 + f32(x_145));
-  }
-  let x_152 : f32 = uv.x;
-  if ((x_152 > 0.5)) {
-    let x_157 : i32 = obj.numbers[2];
-    let x_160 : f32 = color.y;
-    color.y = (x_160 + f32(x_157));
-  }
-  let x_164 : f32 = uv.x;
-  if ((x_164 > 0.75)) {
-    let x_169 : i32 = obj.numbers[3];
-    let x_172 : f32 = color.z;
-    color.z = (x_172 + f32(x_169));
-  }
-  let x_176 : i32 = obj.numbers[4];
-  let x_179 : f32 = color.y;
-  color.y = (x_179 + f32(x_176));
-  let x_183 : f32 = uv.y;
-  if ((x_183 > 0.25)) {
-    let x_188 : i32 = obj.numbers[5];
-    let x_191 : f32 = color.x;
-    color.x = (x_191 + f32(x_188));
-  }
-  let x_195 : f32 = uv.y;
-  if ((x_195 > 0.5)) {
-    let x_200 : i32 = obj.numbers[6];
-    let x_203 : f32 = color.y;
-    color.y = (x_203 + f32(x_200));
-  }
-  let x_207 : f32 = uv.y;
-  if ((x_207 > 0.75)) {
-    let x_212 : i32 = obj.numbers[7];
-    let x_215 : f32 = color.z;
-    color.z = (x_215 + f32(x_212));
-  }
-  let x_219 : i32 = obj.numbers[8];
-  let x_222 : f32 = color.z;
-  color.z = (x_222 + f32(x_219));
-  let x_226 : f32 = uv.x;
-  let x_228 : f32 = uv.y;
-  if ((abs((x_226 - x_228)) < 0.25)) {
-    let x_235 : i32 = obj.numbers[9];
-    let x_238 : f32 = color.x;
-    color.x = (x_238 + f32(x_235));
-  }
-  let x_241 : vec3<f32> = color;
-  let x_242 : vec3<f32> = normalize(x_241);
-  frag_color = vec4<f32>(x_242.x, x_242.y, x_242.z, 1.0);
-  let x_247 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_247;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.hlsl
deleted file mode 100644
index 29e705c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,234 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_33 : register(b0, space0) {
-  uint4 x_33[1];
-};
-cbuffer cbuffer_x_36 : register(b1, space0) {
-  uint4 x_36[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_250 = i;
-  const int x_252 = obj.numbers[x_250];
-  temp = x_252;
-  const int x_253 = i;
-  const int x_254 = j;
-  const int x_256 = obj.numbers[x_254];
-  obj.numbers[x_253] = x_256;
-  const int x_258 = j;
-  obj.numbers[x_258] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_262 = h;
-  const int x_264 = obj.numbers[x_262];
-  pivot = x_264;
-  const int x_265 = l;
-  i_1 = (x_265 - 1);
-  const int x_267 = l;
-  j_1 = x_267;
-  while (true) {
-    const int x_272 = j_1;
-    const int x_273 = h;
-    if ((x_272 <= (x_273 - 1))) {
-    } else {
-      break;
-    }
-    const int x_279 = obj.numbers[j_1];
-    if ((x_279 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_293 = h;
-  param_3 = x_293;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_299 = (top + 1);
-  top = x_299;
-  stack[x_299] = l_1;
-  const int x_303 = (top + 1);
-  top = x_303;
-  stack[x_303] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_313 = top;
-    top = (x_313 - 1);
-    const int x_316 = stack[x_313];
-    h_1 = x_316;
-    const int x_317 = top;
-    top = (x_317 - 1);
-    const int x_320 = stack[x_317];
-    l_1 = x_320;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_323 = performPartition_i1_i1_(param_4, param_5);
-    p = x_323;
-    if (((p - 1) > l_1)) {
-      const int x_331 = (top + 1);
-      top = x_331;
-      stack[x_331] = l_1;
-      const int x_335 = (top + 1);
-      top = x_335;
-      stack[x_335] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_346 = (top + 1);
-      top = x_346;
-      stack[x_346] = (p + 1);
-      const int x_351 = (top + 1);
-      top = x_351;
-      stack[x_351] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const float x_109 = asfloat(x_33[0].x);
-      const float x_111 = asfloat(x_33[0].y);
-      if ((x_109 > x_111)) {
-        break;
-      }
-      const int x_115 = i_2;
-      const int x_118 = obj.numbers[i_2];
-      const int x_121 = obj.numbers[i_2];
-      obj.numbers[x_115] = (x_118 * x_121);
-    }
-  }
-  quicksort_();
-  const float4 x_127 = x_GLF_FragCoord;
-  const float2 x_130 = asfloat(x_36[0].xy);
-  uv = (float2(x_127.x, x_127.y) / x_130);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_133 = obj.numbers[0];
-  const float x_136 = color.x;
-  color.x = (x_136 + float(x_133));
-  const float x_140 = uv.x;
-  if ((x_140 > 0.25f)) {
-    const int x_145 = obj.numbers[1];
-    const float x_148 = color.x;
-    color.x = (x_148 + float(x_145));
-  }
-  const float x_152 = uv.x;
-  if ((x_152 > 0.5f)) {
-    const int x_157 = obj.numbers[2];
-    const float x_160 = color.y;
-    color.y = (x_160 + float(x_157));
-  }
-  const float x_164 = uv.x;
-  if ((x_164 > 0.75f)) {
-    const int x_169 = obj.numbers[3];
-    const float x_172 = color.z;
-    color.z = (x_172 + float(x_169));
-  }
-  const int x_176 = obj.numbers[4];
-  const float x_179 = color.y;
-  color.y = (x_179 + float(x_176));
-  const float x_183 = uv.y;
-  if ((x_183 > 0.25f)) {
-    const int x_188 = obj.numbers[5];
-    const float x_191 = color.x;
-    color.x = (x_191 + float(x_188));
-  }
-  const float x_195 = uv.y;
-  if ((x_195 > 0.5f)) {
-    const int x_200 = obj.numbers[6];
-    const float x_203 = color.y;
-    color.y = (x_203 + float(x_200));
-  }
-  const float x_207 = uv.y;
-  if ((x_207 > 0.75f)) {
-    const int x_212 = obj.numbers[7];
-    const float x_215 = color.z;
-    color.z = (x_215 + float(x_212));
-  }
-  const int x_219 = obj.numbers[8];
-  const float x_222 = color.z;
-  color.z = (x_222 + float(x_219));
-  const float x_226 = uv.x;
-  const float x_228 = uv.y;
-  if ((abs((x_226 - x_228)) < 0.25f)) {
-    const int x_235 = obj.numbers[9];
-    const float x_238 = color.x;
-    color.x = (x_238 + float(x_235));
-  }
-  const float3 x_242 = normalize(color);
-  frag_color = float4(x_242.x, x_242.y, x_242.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const float4 x_GLF_pos_param = tint_symbol.x_GLF_pos_param;
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_3 = {frag_color, gl_Position};
-  const tint_symbol_2 tint_symbol_6 = {tint_symbol_3.frag_color_1, tint_symbol_3.gl_Position};
-  return tint_symbol_6;
-}
-C:\src\tint\test\Shader@0x000001C13FF693E0(133,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001C13FF693E0(25,3-20): error X3500: array reference cannot be used as an l-value; not natively addressable
-C:\src\tint\test\Shader@0x000001C13FF693E0(46,3-14): error X3511: forced to unroll loop, but unrolling failed.
-C:\src\tint\test\Shader@0x000001C13FF693E0(88,3-14): error X3511: forced to unroll loop, but unrolling failed.
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.msl
deleted file mode 100644
index f8ffe93..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,280 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_5) {
-  int temp = 0;
-  int const x_250 = *(i);
-  int const x_252 = (*(tint_symbol_5)).numbers.arr[x_250];
-  temp = x_252;
-  int const x_253 = *(i);
-  int const x_254 = *(j);
-  int const x_256 = (*(tint_symbol_5)).numbers.arr[x_254];
-  (*(tint_symbol_5)).numbers.arr[x_253] = x_256;
-  int const x_258 = *(j);
-  int const x_259 = temp;
-  (*(tint_symbol_5)).numbers.arr[x_258] = x_259;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_6) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_262 = *(h);
-  int const x_264 = (*(tint_symbol_6)).numbers.arr[x_262];
-  pivot = x_264;
-  int const x_265 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_265) - as_type<uint>(1)));
-  int const x_267 = *(l);
-  j_1 = x_267;
-  while (true) {
-    int const x_272 = j_1;
-    int const x_273 = *(h);
-    if ((x_272 <= as_type<int>((as_type<uint>(x_273) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_277 = j_1;
-    int const x_279 = (*(tint_symbol_6)).numbers.arr[x_277];
-    int const x_280 = pivot;
-    if ((x_279 <= x_280)) {
-      int const x_284 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
-      int const x_286 = i_1;
-      param = x_286;
-      int const x_287 = j_1;
-      param_1 = x_287;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_6);
-    }
-    {
-      int const x_289 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_289) + as_type<uint>(1)));
-    }
-  }
-  int const x_291 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
-  int const x_293 = *(h);
-  param_3 = x_293;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_6);
-  int const x_295 = i_1;
-  return as_type<int>((as_type<uint>(x_295) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_7) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_298 = top;
-  int const x_299 = as_type<int>((as_type<uint>(x_298) + as_type<uint>(1)));
-  top = x_299;
-  int const x_300 = l_1;
-  stack.arr[x_299] = x_300;
-  int const x_302 = top;
-  int const x_303 = as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
-  top = x_303;
-  int const x_304 = h_1;
-  stack.arr[x_303] = x_304;
-  while (true) {
-    int const x_310 = top;
-    if ((x_310 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_313 = top;
-    top = as_type<int>((as_type<uint>(x_313) - as_type<uint>(1)));
-    int const x_316 = stack.arr[x_313];
-    h_1 = x_316;
-    int const x_317 = top;
-    top = as_type<int>((as_type<uint>(x_317) - as_type<uint>(1)));
-    int const x_320 = stack.arr[x_317];
-    l_1 = x_320;
-    int const x_321 = l_1;
-    param_4 = x_321;
-    int const x_322 = h_1;
-    param_5 = x_322;
-    int const x_323 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_7);
-    p = x_323;
-    int const x_324 = p;
-    int const x_326 = l_1;
-    if ((as_type<int>((as_type<uint>(x_324) - as_type<uint>(1))) > x_326)) {
-      int const x_330 = top;
-      int const x_331 = as_type<int>((as_type<uint>(x_330) + as_type<uint>(1)));
-      top = x_331;
-      int const x_332 = l_1;
-      stack.arr[x_331] = x_332;
-      int const x_334 = top;
-      int const x_335 = as_type<int>((as_type<uint>(x_334) + as_type<uint>(1)));
-      top = x_335;
-      int const x_336 = p;
-      stack.arr[x_335] = as_type<int>((as_type<uint>(x_336) - as_type<uint>(1)));
-    }
-    int const x_339 = p;
-    int const x_341 = h_1;
-    if ((as_type<int>((as_type<uint>(x_339) + as_type<uint>(1))) < x_341)) {
-      int const x_345 = top;
-      int const x_346 = as_type<int>((as_type<uint>(x_345) + as_type<uint>(1)));
-      top = x_346;
-      int const x_347 = p;
-      stack.arr[x_346] = as_type<int>((as_type<uint>(x_347) + as_type<uint>(1)));
-      int const x_350 = top;
-      int const x_351 = as_type<int>((as_type<uint>(x_350) + as_type<uint>(1)));
-      top = x_351;
-      int const x_352 = h_1;
-      stack.arr[x_351] = x_352;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf0& x_33, constant buf1& x_36, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_94 = *(tint_symbol_8);
-  *(tint_symbol_9) = ((x_94 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_101 = i_2;
-    if ((x_101 < 10)) {
-    } else {
-      break;
-    }
-    int const x_104 = i_2;
-    int const x_105 = i_2;
-    (*(tint_symbol_10)).numbers.arr[x_104] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_105)));
-    float const x_109 = x_33.injectionSwitch.x;
-    float const x_111 = x_33.injectionSwitch.y;
-    if ((x_109 > x_111)) {
-      break;
-    }
-    int const x_115 = i_2;
-    int const x_116 = i_2;
-    int const x_118 = (*(tint_symbol_10)).numbers.arr[x_116];
-    int const x_119 = i_2;
-    int const x_121 = (*(tint_symbol_10)).numbers.arr[x_119];
-    (*(tint_symbol_10)).numbers.arr[x_115] = as_type<int>((as_type<uint>(x_118) * as_type<uint>(x_121)));
-    {
-      int const x_124 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_10);
-  float4 const x_127 = *(tint_symbol_9);
-  float2 const x_130 = x_36.resolution;
-  uv = (float2(x_127.x, x_127.y) / x_130);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_133 = (*(tint_symbol_10)).numbers.arr[0];
-  float const x_136 = color.x;
-  color.x = (x_136 + float(x_133));
-  float const x_140 = uv.x;
-  if ((x_140 > 0.25f)) {
-    int const x_145 = (*(tint_symbol_10)).numbers.arr[1];
-    float const x_148 = color.x;
-    color.x = (x_148 + float(x_145));
-  }
-  float const x_152 = uv.x;
-  if ((x_152 > 0.5f)) {
-    int const x_157 = (*(tint_symbol_10)).numbers.arr[2];
-    float const x_160 = color.y;
-    color.y = (x_160 + float(x_157));
-  }
-  float const x_164 = uv.x;
-  if ((x_164 > 0.75f)) {
-    int const x_169 = (*(tint_symbol_10)).numbers.arr[3];
-    float const x_172 = color.z;
-    color.z = (x_172 + float(x_169));
-  }
-  int const x_176 = (*(tint_symbol_10)).numbers.arr[4];
-  float const x_179 = color.y;
-  color.y = (x_179 + float(x_176));
-  float const x_183 = uv.y;
-  if ((x_183 > 0.25f)) {
-    int const x_188 = (*(tint_symbol_10)).numbers.arr[5];
-    float const x_191 = color.x;
-    color.x = (x_191 + float(x_188));
-  }
-  float const x_195 = uv.y;
-  if ((x_195 > 0.5f)) {
-    int const x_200 = (*(tint_symbol_10)).numbers.arr[6];
-    float const x_203 = color.y;
-    color.y = (x_203 + float(x_200));
-  }
-  float const x_207 = uv.y;
-  if ((x_207 > 0.75f)) {
-    int const x_212 = (*(tint_symbol_10)).numbers.arr[7];
-    float const x_215 = color.z;
-    color.z = (x_215 + float(x_212));
-  }
-  int const x_219 = (*(tint_symbol_10)).numbers.arr[8];
-  float const x_222 = color.z;
-  color.z = (x_222 + float(x_219));
-  float const x_226 = uv.x;
-  float const x_228 = uv.y;
-  if ((fabs((x_226 - x_228)) < 0.25f)) {
-    int const x_235 = (*(tint_symbol_10)).numbers.arr[9];
-    float const x_238 = color.x;
-    color.x = (x_238 + float(x_235));
-  }
-  float3 const x_241 = color;
-  float3 const x_242 = normalize(x_241);
-  *(tint_symbol_11) = float4(x_242.x, x_242.y, x_242.z, 1.0f);
-  float4 const x_247 = *(tint_symbol_8);
-  *(tint_symbol_12) = x_247;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_33, constant buf1& x_36, float4 x_GLF_pos_param, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14, thread QuicksortObject* const tint_symbol_15, thread float4* const tint_symbol_16, thread float4* const tint_symbol_17) {
-  *(tint_symbol_13) = x_GLF_pos_param;
-  main_1(x_33, x_36, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16, tint_symbol_17);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_16), .gl_Position=*(tint_symbol_17)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_33 [[buffer(0)]], constant buf1& x_36 [[buffer(1)]]) {
-  thread float4 tint_symbol_18 = 0.0f;
-  thread float4 tint_symbol_19 = 0.0f;
-  thread QuicksortObject tint_symbol_20 = {};
-  thread float4 tint_symbol_21 = 0.0f;
-  thread float4 tint_symbol_22 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_33, x_36, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20), &(tint_symbol_21), &(tint_symbol_22));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8156ab9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,589 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 401
-; Schema: 0
-               OpCapability Shader
-        %367 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_33 "x_33"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_36 "x_36"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_33 NonWritable
-               OpDecorate %x_33 DescriptorSet 0
-               OpDecorate %x_33 Binding 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_36 NonWritable
-               OpDecorate %x_36 DescriptorSet 0
-               OpDecorate %x_36 Binding 1
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_33 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_36 = OpVariable %_ptr_Uniform_buf1 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %40 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %58 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %118 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %126 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %198 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %202 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %206 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-        %209 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %256 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %386 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %32
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %38 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %40
-         %42 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
-         %46 = OpLoad %int %45
-               OpStore %temp %46
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %j
-         %51 = OpAccessChain %_ptr_Private_int %obj %uint_0 %50
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
-               OpStore %53 %52
-         %55 = OpLoad %int %j
-         %56 = OpLoad %int %temp
-         %57 = OpAccessChain %_ptr_Private_int %obj %uint_0 %55
-               OpStore %57 %56
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %58
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %62 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %40
-        %i_1 = OpVariable %_ptr_Function_int Function %40
-        %j_1 = OpVariable %_ptr_Function_int Function %40
-      %param = OpVariable %_ptr_Function_int Function %40
-    %param_1 = OpVariable %_ptr_Function_int Function %40
-    %param_2 = OpVariable %_ptr_Function_int Function %40
-    %param_3 = OpVariable %_ptr_Function_int Function %40
-         %71 = OpLoad %int %h
-         %72 = OpAccessChain %_ptr_Private_int %obj %uint_0 %71
-         %73 = OpLoad %int %72
-               OpStore %pivot %73
-         %75 = OpLoad %int %l
-         %77 = OpISub %int %75 %int_1
-               OpStore %i_1 %77
-         %79 = OpLoad %int %l
-               OpStore %j_1 %79
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %j_1
-         %86 = OpLoad %int %h
-         %87 = OpISub %int %86 %int_1
-         %88 = OpSLessThanEqual %bool %84 %87
-               OpSelectionMerge %90 None
-               OpBranchConditional %88 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %81
-         %90 = OpLabel
-         %93 = OpLoad %int %j_1
-         %94 = OpAccessChain %_ptr_Private_int %obj %uint_0 %93
-         %95 = OpLoad %int %94
-         %96 = OpLoad %int %pivot
-         %97 = OpSLessThanEqual %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpLoad %int %i_1
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %i_1 %101
-        %102 = OpLoad %int %i_1
-               OpStore %param %102
-        %103 = OpLoad %int %j_1
-               OpStore %param_1 %103
-        %104 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %98
-         %98 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-        %107 = OpLoad %int %j_1
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %j_1 %108
-               OpBranch %80
-         %81 = OpLabel
-        %109 = OpLoad %int %i_1
-        %110 = OpIAdd %int %109 %int_1
-               OpStore %param_2 %110
-        %112 = OpLoad %int %h
-               OpStore %param_3 %112
-        %113 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %116 = OpLoad %int %i_1
-        %117 = OpIAdd %int %116 %int_1
-               OpReturnValue %117
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %118
-        %120 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %40
-        %h_1 = OpVariable %_ptr_Function_int Function %40
-        %top = OpVariable %_ptr_Function_int Function %40
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %126
-          %p = OpVariable %_ptr_Function_int Function %40
-    %param_4 = OpVariable %_ptr_Function_int Function %40
-    %param_5 = OpVariable %_ptr_Function_int Function %40
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %133 = OpLoad %int %top
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %top %134
-        %135 = OpLoad %int %l_1
-        %136 = OpAccessChain %_ptr_Function_int %stack %134
-               OpStore %136 %135
-        %137 = OpLoad %int %top
-        %138 = OpIAdd %int %137 %int_1
-               OpStore %top %138
-        %139 = OpLoad %int %h_1
-        %140 = OpAccessChain %_ptr_Function_int %stack %138
-               OpStore %140 %139
-               OpBranch %141
-        %141 = OpLabel
-               OpLoopMerge %142 %143 None
-               OpBranch %144
-        %144 = OpLabel
-        %145 = OpLoad %int %top
-        %146 = OpSGreaterThanEqual %bool %145 %int_0
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %149
-        %148 = OpLabel
-               OpBranch %147
-        %149 = OpLabel
-               OpBranch %142
-        %147 = OpLabel
-        %150 = OpLoad %int %top
-        %151 = OpISub %int %150 %int_1
-               OpStore %top %151
-        %152 = OpAccessChain %_ptr_Function_int %stack %150
-        %153 = OpLoad %int %152
-               OpStore %h_1 %153
-        %154 = OpLoad %int %top
-        %155 = OpISub %int %154 %int_1
-               OpStore %top %155
-        %156 = OpAccessChain %_ptr_Function_int %stack %154
-        %157 = OpLoad %int %156
-               OpStore %l_1 %157
-        %158 = OpLoad %int %l_1
-               OpStore %param_4 %158
-        %159 = OpLoad %int %h_1
-               OpStore %param_5 %159
-        %160 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %160
-        %163 = OpLoad %int %p
-        %164 = OpLoad %int %l_1
-        %165 = OpISub %int %163 %int_1
-        %166 = OpSGreaterThan %bool %165 %164
-               OpSelectionMerge %167 None
-               OpBranchConditional %166 %168 %167
-        %168 = OpLabel
-        %169 = OpLoad %int %top
-        %170 = OpIAdd %int %169 %int_1
-               OpStore %top %170
-        %171 = OpLoad %int %l_1
-        %172 = OpAccessChain %_ptr_Function_int %stack %170
-               OpStore %172 %171
-        %173 = OpLoad %int %top
-        %174 = OpIAdd %int %173 %int_1
-               OpStore %top %174
-        %175 = OpLoad %int %p
-        %176 = OpAccessChain %_ptr_Function_int %stack %174
-        %177 = OpISub %int %175 %int_1
-               OpStore %176 %177
-               OpBranch %167
-        %167 = OpLabel
-        %178 = OpLoad %int %p
-        %179 = OpLoad %int %h_1
-        %180 = OpIAdd %int %178 %int_1
-        %181 = OpSLessThan %bool %180 %179
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %top
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %top %185
-        %186 = OpLoad %int %p
-        %187 = OpAccessChain %_ptr_Function_int %stack %185
-        %188 = OpIAdd %int %186 %int_1
-               OpStore %187 %188
-        %189 = OpLoad %int %top
-        %190 = OpIAdd %int %189 %int_1
-               OpStore %top %190
-        %191 = OpLoad %int %h_1
-        %192 = OpAccessChain %_ptr_Function_int %stack %190
-               OpStore %192 %191
-               OpBranch %182
-        %182 = OpLabel
-               OpBranch %143
-        %143 = OpLabel
-               OpBranch %141
-        %142 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %118
-        %194 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %40
-         %uv = OpVariable %_ptr_Function_v2float Function %198
-      %color = OpVariable %_ptr_Function_v3float Function %202
-        %203 = OpLoad %v4float %x_GLF_pos
-        %207 = OpFAdd %v4float %203 %206
-        %210 = OpFMul %v4float %207 %209
-               OpStore %x_GLF_FragCoord %210
-               OpStore %i_2 %int_0
-               OpBranch %211
-        %211 = OpLabel
-               OpLoopMerge %212 %213 None
-               OpBranch %214
-        %214 = OpLabel
-        %215 = OpLoad %int %i_2
-        %217 = OpSLessThan %bool %215 %int_10
-               OpSelectionMerge %218 None
-               OpBranchConditional %217 %219 %220
-        %219 = OpLabel
-               OpBranch %218
-        %220 = OpLabel
-               OpBranch %212
-        %218 = OpLabel
-        %221 = OpLoad %int %i_2
-        %222 = OpLoad %int %i_2
-        %223 = OpAccessChain %_ptr_Private_int %obj %uint_0 %221
-        %224 = OpISub %int %int_10 %222
-               OpStore %223 %224
-        %226 = OpAccessChain %_ptr_Uniform_float %x_33 %uint_0 %uint_0
-        %227 = OpLoad %float %226
-        %229 = OpAccessChain %_ptr_Uniform_float %x_33 %uint_0 %uint_1
-        %230 = OpLoad %float %229
-        %231 = OpFOrdGreaterThan %bool %227 %230
-               OpSelectionMerge %232 None
-               OpBranchConditional %231 %233 %232
-        %233 = OpLabel
-               OpBranch %212
-        %232 = OpLabel
-        %234 = OpLoad %int %i_2
-        %235 = OpLoad %int %i_2
-        %236 = OpAccessChain %_ptr_Private_int %obj %uint_0 %235
-        %237 = OpLoad %int %236
-        %238 = OpLoad %int %i_2
-        %239 = OpAccessChain %_ptr_Private_int %obj %uint_0 %238
-        %240 = OpLoad %int %239
-        %241 = OpAccessChain %_ptr_Private_int %obj %uint_0 %234
-        %242 = OpIMul %int %237 %240
-               OpStore %241 %242
-               OpBranch %213
-        %213 = OpLabel
-        %243 = OpLoad %int %i_2
-        %244 = OpIAdd %int %243 %int_1
-               OpStore %i_2 %244
-               OpBranch %211
-        %212 = OpLabel
-        %245 = OpFunctionCall %void %quicksort_
-        %246 = OpLoad %v4float %x_GLF_FragCoord
-        %248 = OpAccessChain %_ptr_Uniform_v2float %x_36 %uint_0
-        %249 = OpLoad %v2float %248
-        %250 = OpCompositeExtract %float %246 0
-        %251 = OpCompositeExtract %float %246 1
-        %252 = OpCompositeConstruct %v2float %250 %251
-        %253 = OpFDiv %v2float %252 %249
-               OpStore %uv %253
-               OpStore %color %256
-        %257 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %258 = OpLoad %int %257
-        %260 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %261 = OpLoad %float %260
-        %262 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %263 = OpConvertSToF %float %258
-        %264 = OpFAdd %float %261 %263
-               OpStore %262 %264
-        %265 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %266 = OpLoad %float %265
-        %268 = OpFOrdGreaterThan %bool %266 %float_0_25
-               OpSelectionMerge %269 None
-               OpBranchConditional %268 %270 %269
-        %270 = OpLabel
-        %271 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %272 = OpLoad %int %271
-        %273 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %274 = OpLoad %float %273
-        %275 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %276 = OpConvertSToF %float %272
-        %277 = OpFAdd %float %274 %276
-               OpStore %275 %277
-               OpBranch %269
-        %269 = OpLabel
-        %278 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %279 = OpLoad %float %278
-        %281 = OpFOrdGreaterThan %bool %279 %float_0_5
-               OpSelectionMerge %282 None
-               OpBranchConditional %281 %283 %282
-        %283 = OpLabel
-        %285 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %286 = OpLoad %int %285
-        %287 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %288 = OpLoad %float %287
-        %289 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %290 = OpConvertSToF %float %286
-        %291 = OpFAdd %float %288 %290
-               OpStore %289 %291
-               OpBranch %282
-        %282 = OpLabel
-        %292 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %293 = OpLoad %float %292
-        %295 = OpFOrdGreaterThan %bool %293 %float_0_75
-               OpSelectionMerge %296 None
-               OpBranchConditional %295 %297 %296
-        %297 = OpLabel
-        %299 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %300 = OpLoad %int %299
-        %302 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %303 = OpLoad %float %302
-        %304 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %305 = OpConvertSToF %float %300
-        %306 = OpFAdd %float %303 %305
-               OpStore %304 %306
-               OpBranch %296
-        %296 = OpLabel
-        %308 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %309 = OpLoad %int %308
-        %310 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %311 = OpLoad %float %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %313 = OpConvertSToF %float %309
-        %314 = OpFAdd %float %311 %313
-               OpStore %312 %314
-        %315 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %316 = OpLoad %float %315
-        %317 = OpFOrdGreaterThan %bool %316 %float_0_25
-               OpSelectionMerge %318 None
-               OpBranchConditional %317 %319 %318
-        %319 = OpLabel
-        %321 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %322 = OpLoad %int %321
-        %323 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %324 = OpLoad %float %323
-        %325 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %326 = OpConvertSToF %float %322
-        %327 = OpFAdd %float %324 %326
-               OpStore %325 %327
-               OpBranch %318
-        %318 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %329 = OpLoad %float %328
-        %330 = OpFOrdGreaterThan %bool %329 %float_0_5
-               OpSelectionMerge %331 None
-               OpBranchConditional %330 %332 %331
-        %332 = OpLabel
-        %334 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %335 = OpLoad %int %334
-        %336 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %337 = OpLoad %float %336
-        %338 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %339 = OpConvertSToF %float %335
-        %340 = OpFAdd %float %337 %339
-               OpStore %338 %340
-               OpBranch %331
-        %331 = OpLabel
-        %341 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %342 = OpLoad %float %341
-        %343 = OpFOrdGreaterThan %bool %342 %float_0_75
-               OpSelectionMerge %344 None
-               OpBranchConditional %343 %345 %344
-        %345 = OpLabel
-        %347 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %348 = OpLoad %int %347
-        %349 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %350 = OpLoad %float %349
-        %351 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %352 = OpConvertSToF %float %348
-        %353 = OpFAdd %float %350 %352
-               OpStore %351 %353
-               OpBranch %344
-        %344 = OpLabel
-        %355 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %356 = OpLoad %int %355
-        %357 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %358 = OpLoad %float %357
-        %359 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %360 = OpConvertSToF %float %356
-        %361 = OpFAdd %float %358 %360
-               OpStore %359 %361
-        %362 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %363 = OpLoad %float %362
-        %364 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %365 = OpLoad %float %364
-        %368 = OpFSub %float %363 %365
-        %366 = OpExtInst %float %367 FAbs %368
-        %369 = OpFOrdLessThan %bool %366 %float_0_25
-               OpSelectionMerge %370 None
-               OpBranchConditional %369 %371 %370
-        %371 = OpLabel
-        %372 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %373 = OpLoad %int %372
-        %374 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %375 = OpLoad %float %374
-        %376 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %377 = OpConvertSToF %float %373
-        %378 = OpFAdd %float %375 %377
-               OpStore %376 %378
-               OpBranch %370
-        %370 = OpLabel
-        %379 = OpLoad %v3float %color
-        %380 = OpExtInst %v3float %367 Normalize %379
-        %381 = OpCompositeExtract %float %380 0
-        %382 = OpCompositeExtract %float %380 1
-        %383 = OpCompositeExtract %float %380 2
-        %384 = OpCompositeConstruct %v4float %381 %382 %383 %float_1
-               OpStore %frag_color %384
-        %385 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %385
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %386
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %390 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %391 = OpFunctionCall %void %main_1
-        %392 = OpLoad %v4float %frag_color
-        %393 = OpLoad %v4float %gl_Position
-        %394 = OpCompositeConstruct %main_out %392 %393
-               OpReturnValue %394
-               OpFunctionEnd
-       %main = OpFunction %void None %118
-        %396 = OpLabel
-        %398 = OpLoad %v4float %x_GLF_pos_param_1
-        %397 = OpFunctionCall %main_out %main_inner %398
-        %399 = OpCompositeExtract %v4float %397 0
-               OpStore %frag_color_1_1 %399
-        %400 = OpCompositeExtract %v4float %397 1
-               OpStore %gl_Position_1 %400
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.wgsl
deleted file mode 100644
index b0ecbc4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,276 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_33 : buf0;
-
-[[group(0), binding(1)]] var<uniform> x_36 : buf1;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_250 : i32 = *(i);
-  let x_252 : i32 = obj.numbers[x_250];
-  temp = x_252;
-  let x_253 : i32 = *(i);
-  let x_254 : i32 = *(j);
-  let x_256 : i32 = obj.numbers[x_254];
-  obj.numbers[x_253] = x_256;
-  let x_258 : i32 = *(j);
-  let x_259 : i32 = temp;
-  obj.numbers[x_258] = x_259;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_262 : i32 = *(h);
-  let x_264 : i32 = obj.numbers[x_262];
-  pivot = x_264;
-  let x_265 : i32 = *(l);
-  i_1 = (x_265 - 1);
-  let x_267 : i32 = *(l);
-  j_1 = x_267;
-  loop {
-    let x_272 : i32 = j_1;
-    let x_273 : i32 = *(h);
-    if ((x_272 <= (x_273 - 1))) {
-    } else {
-      break;
-    }
-    let x_277 : i32 = j_1;
-    let x_279 : i32 = obj.numbers[x_277];
-    let x_280 : i32 = pivot;
-    if ((x_279 <= x_280)) {
-      let x_284 : i32 = i_1;
-      i_1 = (x_284 + 1);
-      let x_286 : i32 = i_1;
-      param = x_286;
-      let x_287 : i32 = j_1;
-      param_1 = x_287;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_289 : i32 = j_1;
-      j_1 = (x_289 + 1);
-    }
-  }
-  let x_291 : i32 = i_1;
-  param_2 = (x_291 + 1);
-  let x_293 : i32 = *(h);
-  param_3 = x_293;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_295 : i32 = i_1;
-  return (x_295 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_298 : i32 = top;
-  let x_299 : i32 = (x_298 + 1);
-  top = x_299;
-  let x_300 : i32 = l_1;
-  stack[x_299] = x_300;
-  let x_302 : i32 = top;
-  let x_303 : i32 = (x_302 + 1);
-  top = x_303;
-  let x_304 : i32 = h_1;
-  stack[x_303] = x_304;
-  loop {
-    let x_310 : i32 = top;
-    if ((x_310 >= 0)) {
-    } else {
-      break;
-    }
-    let x_313 : i32 = top;
-    top = (x_313 - 1);
-    let x_316 : i32 = stack[x_313];
-    h_1 = x_316;
-    let x_317 : i32 = top;
-    top = (x_317 - 1);
-    let x_320 : i32 = stack[x_317];
-    l_1 = x_320;
-    let x_321 : i32 = l_1;
-    param_4 = x_321;
-    let x_322 : i32 = h_1;
-    param_5 = x_322;
-    let x_323 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_323;
-    let x_324 : i32 = p;
-    let x_326 : i32 = l_1;
-    if (((x_324 - 1) > x_326)) {
-      let x_330 : i32 = top;
-      let x_331 : i32 = (x_330 + 1);
-      top = x_331;
-      let x_332 : i32 = l_1;
-      stack[x_331] = x_332;
-      let x_334 : i32 = top;
-      let x_335 : i32 = (x_334 + 1);
-      top = x_335;
-      let x_336 : i32 = p;
-      stack[x_335] = (x_336 - 1);
-    }
-    let x_339 : i32 = p;
-    let x_341 : i32 = h_1;
-    if (((x_339 + 1) < x_341)) {
-      let x_345 : i32 = top;
-      let x_346 : i32 = (x_345 + 1);
-      top = x_346;
-      let x_347 : i32 = p;
-      stack[x_346] = (x_347 + 1);
-      let x_350 : i32 = top;
-      let x_351 : i32 = (x_350 + 1);
-      top = x_351;
-      let x_352 : i32 = h_1;
-      stack[x_351] = x_352;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_94 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_94 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_101 : i32 = i_2;
-    if ((x_101 < 10)) {
-    } else {
-      break;
-    }
-    let x_104 : i32 = i_2;
-    let x_105 : i32 = i_2;
-    obj.numbers[x_104] = (10 - x_105);
-    let x_109 : f32 = x_33.injectionSwitch.x;
-    let x_111 : f32 = x_33.injectionSwitch.y;
-    if ((x_109 > x_111)) {
-      break;
-    }
-    let x_115 : i32 = i_2;
-    let x_116 : i32 = i_2;
-    let x_118 : i32 = obj.numbers[x_116];
-    let x_119 : i32 = i_2;
-    let x_121 : i32 = obj.numbers[x_119];
-    obj.numbers[x_115] = (x_118 * x_121);
-
-    continuing {
-      let x_124 : i32 = i_2;
-      i_2 = (x_124 + 1);
-    }
-  }
-  quicksort_();
-  let x_127 : vec4<f32> = x_GLF_FragCoord;
-  let x_130 : vec2<f32> = x_36.resolution;
-  uv = (vec2<f32>(x_127.x, x_127.y) / x_130);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_133 : i32 = obj.numbers[0];
-  let x_136 : f32 = color.x;
-  color.x = (x_136 + f32(x_133));
-  let x_140 : f32 = uv.x;
-  if ((x_140 > 0.25)) {
-    let x_145 : i32 = obj.numbers[1];
-    let x_148 : f32 = color.x;
-    color.x = (x_148 + f32(x_145));
-  }
-  let x_152 : f32 = uv.x;
-  if ((x_152 > 0.5)) {
-    let x_157 : i32 = obj.numbers[2];
-    let x_160 : f32 = color.y;
-    color.y = (x_160 + f32(x_157));
-  }
-  let x_164 : f32 = uv.x;
-  if ((x_164 > 0.75)) {
-    let x_169 : i32 = obj.numbers[3];
-    let x_172 : f32 = color.z;
-    color.z = (x_172 + f32(x_169));
-  }
-  let x_176 : i32 = obj.numbers[4];
-  let x_179 : f32 = color.y;
-  color.y = (x_179 + f32(x_176));
-  let x_183 : f32 = uv.y;
-  if ((x_183 > 0.25)) {
-    let x_188 : i32 = obj.numbers[5];
-    let x_191 : f32 = color.x;
-    color.x = (x_191 + f32(x_188));
-  }
-  let x_195 : f32 = uv.y;
-  if ((x_195 > 0.5)) {
-    let x_200 : i32 = obj.numbers[6];
-    let x_203 : f32 = color.y;
-    color.y = (x_203 + f32(x_200));
-  }
-  let x_207 : f32 = uv.y;
-  if ((x_207 > 0.75)) {
-    let x_212 : i32 = obj.numbers[7];
-    let x_215 : f32 = color.z;
-    color.z = (x_215 + f32(x_212));
-  }
-  let x_219 : i32 = obj.numbers[8];
-  let x_222 : f32 = color.z;
-  color.z = (x_222 + f32(x_219));
-  let x_226 : f32 = uv.x;
-  let x_228 : f32 = uv.y;
-  if ((abs((x_226 - x_228)) < 0.25)) {
-    let x_235 : i32 = obj.numbers[9];
-    let x_238 : f32 = color.x;
-    color.x = (x_238 + f32(x_235));
-  }
-  let x_241 : vec3<f32> = color;
-  let x_242 : vec3<f32> = normalize(x_241);
-  frag_color = vec4<f32>(x_242.x, x_242.y, x_242.z, 1.0);
-  let x_247 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_247;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.hlsl
deleted file mode 100644
index 2d65bff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,312 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int x_95 = 0;
-  int x_96 = 0;
-  int x_97 = 0;
-  int x_98 = 0;
-  int x_99 = 0;
-  int x_100 = 0;
-  int x_101 = 0;
-  int x_102 = 0;
-  int x_103[10] = (int[10])0;
-  int x_104 = 0;
-  int x_105 = 0;
-  int x_106 = 0;
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_121 = i_2;
-      const int x_124 = obj.numbers[i_2];
-      const int x_127 = obj.numbers[i_2];
-      obj.numbers[x_121] = (x_124 * x_127);
-    }
-  }
-  x_100 = 0;
-  x_101 = 9;
-  x_102 = -1;
-  const int x_133 = (x_102 + 1);
-  x_102 = x_133;
-  x_103[x_133] = x_100;
-  const int x_137 = (x_102 + 1);
-  x_102 = x_137;
-  x_103[x_137] = x_101;
-  while (true) {
-    if ((x_102 >= 0)) {
-    } else {
-      break;
-    }
-    const int x_147 = x_102;
-    x_102 = (x_147 - 1);
-    const int x_150 = x_103[x_147];
-    x_101 = x_150;
-    const int x_151 = x_102;
-    x_102 = (x_151 - 1);
-    const int x_154 = x_103[x_151];
-    x_100 = x_154;
-    x_105 = x_100;
-    x_106 = x_101;
-    const int x_159 = obj.numbers[x_106];
-    x_92 = x_159;
-    x_93 = (x_105 - 1);
-    x_94 = x_105;
-    {
-      for(; (x_94 <= (x_106 - 1)); x_94 = (x_94 + 1)) {
-        const int x_174 = obj.numbers[x_94];
-        if ((x_174 <= x_92)) {
-          x_93 = (x_93 + 1);
-          x_95 = x_93;
-          x_96 = x_94;
-          const int x_185 = obj.numbers[x_95];
-          x_91 = x_185;
-          const int x_186 = x_95;
-          const int x_189 = obj.numbers[x_96];
-          obj.numbers[x_186] = x_189;
-          obj.numbers[x_96] = x_91;
-        }
-      }
-    }
-    x_97 = (x_93 + 1);
-    x_98 = x_106;
-    const int x_201 = obj.numbers[x_97];
-    x_90 = x_201;
-    const int x_202 = x_97;
-    const int x_205 = obj.numbers[x_98];
-    obj.numbers[x_202] = x_205;
-    obj.numbers[x_98] = x_90;
-    x_99 = (x_93 + 1);
-    x_104 = x_99;
-    if (((x_104 - 1) > x_100)) {
-      const int x_220 = (x_102 + 1);
-      x_102 = x_220;
-      x_103[x_220] = x_100;
-      const int x_224 = (x_102 + 1);
-      x_102 = x_224;
-      x_103[x_224] = (x_104 - 1);
-    }
-    if (((x_104 + 1) < x_101)) {
-      const int x_235 = (x_102 + 1);
-      x_102 = x_235;
-      x_103[x_235] = (x_104 + 1);
-      const int x_240 = (x_102 + 1);
-      x_102 = x_240;
-      x_103[x_240] = x_101;
-    }
-  }
-  const float4 x_243 = x_GLF_FragCoord;
-  const float2 x_246 = asfloat(x_34[0].xy);
-  uv = (float2(x_243.x, x_243.y) / x_246);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_249 = obj.numbers[0];
-  const float x_252 = color.x;
-  color.x = (x_252 + float(x_249));
-  const float x_256 = uv.x;
-  if ((x_256 > 0.25f)) {
-    const int x_261 = obj.numbers[1];
-    const float x_264 = color.x;
-    color.x = (x_264 + float(x_261));
-  }
-  const float x_268 = uv.x;
-  if ((x_268 > 0.5f)) {
-    const int x_273 = obj.numbers[2];
-    const float x_276 = color.y;
-    color.y = (x_276 + float(x_273));
-  }
-  const float x_280 = uv.x;
-  if ((x_280 > 0.75f)) {
-    const int x_285 = obj.numbers[3];
-    const float x_288 = color.z;
-    color.z = (x_288 + float(x_285));
-  }
-  const int x_292 = obj.numbers[4];
-  const float x_295 = color.y;
-  color.y = (x_295 + float(x_292));
-  const float x_299 = uv.y;
-  if ((x_299 > 0.25f)) {
-    const int x_304 = obj.numbers[5];
-    const float x_307 = color.x;
-    color.x = (x_307 + float(x_304));
-  }
-  const float x_311 = uv.y;
-  if ((x_311 > 0.5f)) {
-    const int x_316 = obj.numbers[6];
-    const float x_319 = color.y;
-    color.y = (x_319 + float(x_316));
-  }
-  const float x_323 = uv.y;
-  if ((x_323 > 0.75f)) {
-    const int x_328 = obj.numbers[7];
-    const float x_331 = color.z;
-    color.z = (x_331 + float(x_328));
-  }
-  const int x_335 = obj.numbers[8];
-  const float x_338 = color.z;
-  color.z = (x_338 + float(x_335));
-  const float x_342 = uv.x;
-  const float x_344 = uv.y;
-  if ((abs((x_342 - x_344)) < 0.25f)) {
-    const int x_351 = obj.numbers[9];
-    const float x_354 = color.x;
-    color.x = (x_354 + float(x_351));
-  }
-  const float3 x_358 = normalize(color);
-  frag_color = float4(x_358.x, x_358.y, x_358.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_4 = {frag_color, gl_Position};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_366 = i;
-  const int x_368 = obj.numbers[x_366];
-  temp = x_368;
-  const int x_369 = i;
-  const int x_370 = j;
-  const int x_372 = obj.numbers[x_370];
-  obj.numbers[x_369] = x_372;
-  const int x_374 = j;
-  obj.numbers[x_374] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_378 = h;
-  const int x_380 = obj.numbers[x_378];
-  pivot = x_380;
-  const int x_381 = l;
-  i_1 = (x_381 - 1);
-  const int x_383 = l;
-  j_1 = x_383;
-  while (true) {
-    const int x_388 = j_1;
-    const int x_389 = h;
-    if ((x_388 <= (x_389 - 1))) {
-    } else {
-      break;
-    }
-    const int x_395 = obj.numbers[j_1];
-    if ((x_395 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_409 = h;
-  param_3 = x_409;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_415 = (top + 1);
-  top = x_415;
-  stack[x_415] = l_1;
-  const int x_419 = (top + 1);
-  top = x_419;
-  stack[x_419] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_429 = top;
-    top = (x_429 - 1);
-    const int x_432 = stack[x_429];
-    h_1 = x_432;
-    const int x_433 = top;
-    top = (x_433 - 1);
-    const int x_436 = stack[x_433];
-    l_1 = x_436;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_439 = performPartition_i1_i1_(param_4, param_5);
-    p = x_439;
-    if (((p - 1) > l_1)) {
-      const int x_447 = (top + 1);
-      top = x_447;
-      stack[x_447] = l_1;
-      const int x_451 = (top + 1);
-      top = x_451;
-      stack[x_451] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_462 = (top + 1);
-      top = x_462;
-      stack[x_462] = (p + 1);
-      const int x_467 = (top + 1);
-      top = x_467;
-      stack[x_467] = h_1;
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.msl
deleted file mode 100644
index c68e490..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.msl
+++ /dev/null
@@ -1,406 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(constant buf0& x_34, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6, thread QuicksortObject* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int x_95 = 0;
-  int x_96 = 0;
-  int x_97 = 0;
-  int x_98 = 0;
-  int x_99 = 0;
-  int x_100 = 0;
-  int x_101 = 0;
-  int x_102 = 0;
-  tint_array_wrapper x_103 = {};
-  int x_104 = 0;
-  int x_105 = 0;
-  int x_106 = 0;
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_107 = *(tint_symbol_5);
-  *(tint_symbol_6) = ((x_107 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_114 = i_2;
-    if ((x_114 < 10)) {
-    } else {
-      break;
-    }
-    int const x_117 = i_2;
-    int const x_118 = i_2;
-    (*(tint_symbol_7)).numbers.arr[x_117] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_118)));
-    int const x_121 = i_2;
-    int const x_122 = i_2;
-    int const x_124 = (*(tint_symbol_7)).numbers.arr[x_122];
-    int const x_125 = i_2;
-    int const x_127 = (*(tint_symbol_7)).numbers.arr[x_125];
-    (*(tint_symbol_7)).numbers.arr[x_121] = as_type<int>((as_type<uint>(x_124) * as_type<uint>(x_127)));
-    {
-      int const x_130 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_130) + as_type<uint>(1)));
-    }
-  }
-  x_100 = 0;
-  x_101 = 9;
-  x_102 = -1;
-  int const x_132 = x_102;
-  int const x_133 = as_type<int>((as_type<uint>(x_132) + as_type<uint>(1)));
-  x_102 = x_133;
-  int const x_134 = x_100;
-  x_103.arr[x_133] = x_134;
-  int const x_136 = x_102;
-  int const x_137 = as_type<int>((as_type<uint>(x_136) + as_type<uint>(1)));
-  x_102 = x_137;
-  int const x_138 = x_101;
-  x_103.arr[x_137] = x_138;
-  while (true) {
-    int const x_144 = x_102;
-    if ((x_144 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_147 = x_102;
-    x_102 = as_type<int>((as_type<uint>(x_147) - as_type<uint>(1)));
-    int const x_150 = x_103.arr[x_147];
-    x_101 = x_150;
-    int const x_151 = x_102;
-    x_102 = as_type<int>((as_type<uint>(x_151) - as_type<uint>(1)));
-    int const x_154 = x_103.arr[x_151];
-    x_100 = x_154;
-    int const x_155 = x_100;
-    x_105 = x_155;
-    int const x_156 = x_101;
-    x_106 = x_156;
-    int const x_157 = x_106;
-    int const x_159 = (*(tint_symbol_7)).numbers.arr[x_157];
-    x_92 = x_159;
-    int const x_160 = x_105;
-    x_93 = as_type<int>((as_type<uint>(x_160) - as_type<uint>(1)));
-    int const x_162 = x_105;
-    x_94 = x_162;
-    while (true) {
-      int const x_167 = x_94;
-      int const x_168 = x_106;
-      if ((x_167 <= as_type<int>((as_type<uint>(x_168) - as_type<uint>(1))))) {
-      } else {
-        break;
-      }
-      int const x_172 = x_94;
-      int const x_174 = (*(tint_symbol_7)).numbers.arr[x_172];
-      int const x_175 = x_92;
-      if ((x_174 <= x_175)) {
-        int const x_179 = x_93;
-        x_93 = as_type<int>((as_type<uint>(x_179) + as_type<uint>(1)));
-        int const x_181 = x_93;
-        x_95 = x_181;
-        int const x_182 = x_94;
-        x_96 = x_182;
-        int const x_183 = x_95;
-        int const x_185 = (*(tint_symbol_7)).numbers.arr[x_183];
-        x_91 = x_185;
-        int const x_186 = x_95;
-        int const x_187 = x_96;
-        int const x_189 = (*(tint_symbol_7)).numbers.arr[x_187];
-        (*(tint_symbol_7)).numbers.arr[x_186] = x_189;
-        int const x_191 = x_96;
-        int const x_192 = x_91;
-        (*(tint_symbol_7)).numbers.arr[x_191] = x_192;
-      }
-      {
-        int const x_194 = x_94;
-        x_94 = as_type<int>((as_type<uint>(x_194) + as_type<uint>(1)));
-      }
-    }
-    int const x_196 = x_93;
-    x_97 = as_type<int>((as_type<uint>(x_196) + as_type<uint>(1)));
-    int const x_198 = x_106;
-    x_98 = x_198;
-    int const x_199 = x_97;
-    int const x_201 = (*(tint_symbol_7)).numbers.arr[x_199];
-    x_90 = x_201;
-    int const x_202 = x_97;
-    int const x_203 = x_98;
-    int const x_205 = (*(tint_symbol_7)).numbers.arr[x_203];
-    (*(tint_symbol_7)).numbers.arr[x_202] = x_205;
-    int const x_207 = x_98;
-    int const x_208 = x_90;
-    (*(tint_symbol_7)).numbers.arr[x_207] = x_208;
-    int const x_210 = x_93;
-    x_99 = as_type<int>((as_type<uint>(x_210) + as_type<uint>(1)));
-    int const x_212 = x_99;
-    x_104 = x_212;
-    int const x_213 = x_104;
-    int const x_215 = x_100;
-    if ((as_type<int>((as_type<uint>(x_213) - as_type<uint>(1))) > x_215)) {
-      int const x_219 = x_102;
-      int const x_220 = as_type<int>((as_type<uint>(x_219) + as_type<uint>(1)));
-      x_102 = x_220;
-      int const x_221 = x_100;
-      x_103.arr[x_220] = x_221;
-      int const x_223 = x_102;
-      int const x_224 = as_type<int>((as_type<uint>(x_223) + as_type<uint>(1)));
-      x_102 = x_224;
-      int const x_225 = x_104;
-      x_103.arr[x_224] = as_type<int>((as_type<uint>(x_225) - as_type<uint>(1)));
-    }
-    int const x_228 = x_104;
-    int const x_230 = x_101;
-    if ((as_type<int>((as_type<uint>(x_228) + as_type<uint>(1))) < x_230)) {
-      int const x_234 = x_102;
-      int const x_235 = as_type<int>((as_type<uint>(x_234) + as_type<uint>(1)));
-      x_102 = x_235;
-      int const x_236 = x_104;
-      x_103.arr[x_235] = as_type<int>((as_type<uint>(x_236) + as_type<uint>(1)));
-      int const x_239 = x_102;
-      int const x_240 = as_type<int>((as_type<uint>(x_239) + as_type<uint>(1)));
-      x_102 = x_240;
-      int const x_241 = x_101;
-      x_103.arr[x_240] = x_241;
-    }
-  }
-  float4 const x_243 = *(tint_symbol_6);
-  float2 const x_246 = x_34.resolution;
-  uv = (float2(x_243.x, x_243.y) / x_246);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_249 = (*(tint_symbol_7)).numbers.arr[0];
-  float const x_252 = color.x;
-  color.x = (x_252 + float(x_249));
-  float const x_256 = uv.x;
-  if ((x_256 > 0.25f)) {
-    int const x_261 = (*(tint_symbol_7)).numbers.arr[1];
-    float const x_264 = color.x;
-    color.x = (x_264 + float(x_261));
-  }
-  float const x_268 = uv.x;
-  if ((x_268 > 0.5f)) {
-    int const x_273 = (*(tint_symbol_7)).numbers.arr[2];
-    float const x_276 = color.y;
-    color.y = (x_276 + float(x_273));
-  }
-  float const x_280 = uv.x;
-  if ((x_280 > 0.75f)) {
-    int const x_285 = (*(tint_symbol_7)).numbers.arr[3];
-    float const x_288 = color.z;
-    color.z = (x_288 + float(x_285));
-  }
-  int const x_292 = (*(tint_symbol_7)).numbers.arr[4];
-  float const x_295 = color.y;
-  color.y = (x_295 + float(x_292));
-  float const x_299 = uv.y;
-  if ((x_299 > 0.25f)) {
-    int const x_304 = (*(tint_symbol_7)).numbers.arr[5];
-    float const x_307 = color.x;
-    color.x = (x_307 + float(x_304));
-  }
-  float const x_311 = uv.y;
-  if ((x_311 > 0.5f)) {
-    int const x_316 = (*(tint_symbol_7)).numbers.arr[6];
-    float const x_319 = color.y;
-    color.y = (x_319 + float(x_316));
-  }
-  float const x_323 = uv.y;
-  if ((x_323 > 0.75f)) {
-    int const x_328 = (*(tint_symbol_7)).numbers.arr[7];
-    float const x_331 = color.z;
-    color.z = (x_331 + float(x_328));
-  }
-  int const x_335 = (*(tint_symbol_7)).numbers.arr[8];
-  float const x_338 = color.z;
-  color.z = (x_338 + float(x_335));
-  float const x_342 = uv.x;
-  float const x_344 = uv.y;
-  if ((fabs((x_342 - x_344)) < 0.25f)) {
-    int const x_351 = (*(tint_symbol_7)).numbers.arr[9];
-    float const x_354 = color.x;
-    color.x = (x_354 + float(x_351));
-  }
-  float3 const x_357 = color;
-  float3 const x_358 = normalize(x_357);
-  *(tint_symbol_8) = float4(x_358.x, x_358.y, x_358.z, 1.0f);
-  float4 const x_363 = *(tint_symbol_5);
-  *(tint_symbol_9) = x_363;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 x_GLF_pos_param, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11, thread QuicksortObject* const tint_symbol_12, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_10) = x_GLF_pos_param;
-  main_1(x_34, tint_symbol_10, tint_symbol_11, tint_symbol_12, tint_symbol_13, tint_symbol_14);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_13), .gl_Position=*(tint_symbol_14)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread float4 tint_symbol_16 = 0.0f;
-  thread QuicksortObject tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  thread float4 tint_symbol_19 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18), &(tint_symbol_19));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_20) {
-  int temp = 0;
-  int const x_366 = *(i);
-  int const x_368 = (*(tint_symbol_20)).numbers.arr[x_366];
-  temp = x_368;
-  int const x_369 = *(i);
-  int const x_370 = *(j);
-  int const x_372 = (*(tint_symbol_20)).numbers.arr[x_370];
-  (*(tint_symbol_20)).numbers.arr[x_369] = x_372;
-  int const x_374 = *(j);
-  int const x_375 = temp;
-  (*(tint_symbol_20)).numbers.arr[x_374] = x_375;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_21) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_378 = *(h);
-  int const x_380 = (*(tint_symbol_21)).numbers.arr[x_378];
-  pivot = x_380;
-  int const x_381 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_381) - as_type<uint>(1)));
-  int const x_383 = *(l);
-  j_1 = x_383;
-  while (true) {
-    int const x_388 = j_1;
-    int const x_389 = *(h);
-    if ((x_388 <= as_type<int>((as_type<uint>(x_389) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_393 = j_1;
-    int const x_395 = (*(tint_symbol_21)).numbers.arr[x_393];
-    int const x_396 = pivot;
-    if ((x_395 <= x_396)) {
-      int const x_400 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_400) + as_type<uint>(1)));
-      int const x_402 = i_1;
-      param = x_402;
-      int const x_403 = j_1;
-      param_1 = x_403;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_21);
-    }
-    {
-      int const x_405 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_405) + as_type<uint>(1)));
-    }
-  }
-  int const x_407 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_407) + as_type<uint>(1)));
-  int const x_409 = *(h);
-  param_3 = x_409;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_21);
-  int const x_411 = i_1;
-  return as_type<int>((as_type<uint>(x_411) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_22) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_414 = top;
-  int const x_415 = as_type<int>((as_type<uint>(x_414) + as_type<uint>(1)));
-  top = x_415;
-  int const x_416 = l_1;
-  stack.arr[x_415] = x_416;
-  int const x_418 = top;
-  int const x_419 = as_type<int>((as_type<uint>(x_418) + as_type<uint>(1)));
-  top = x_419;
-  int const x_420 = h_1;
-  stack.arr[x_419] = x_420;
-  while (true) {
-    int const x_426 = top;
-    if ((x_426 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_429 = top;
-    top = as_type<int>((as_type<uint>(x_429) - as_type<uint>(1)));
-    int const x_432 = stack.arr[x_429];
-    h_1 = x_432;
-    int const x_433 = top;
-    top = as_type<int>((as_type<uint>(x_433) - as_type<uint>(1)));
-    int const x_436 = stack.arr[x_433];
-    l_1 = x_436;
-    int const x_437 = l_1;
-    param_4 = x_437;
-    int const x_438 = h_1;
-    param_5 = x_438;
-    int const x_439 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_22);
-    p = x_439;
-    int const x_440 = p;
-    int const x_442 = l_1;
-    if ((as_type<int>((as_type<uint>(x_440) - as_type<uint>(1))) > x_442)) {
-      int const x_446 = top;
-      int const x_447 = as_type<int>((as_type<uint>(x_446) + as_type<uint>(1)));
-      top = x_447;
-      int const x_448 = l_1;
-      stack.arr[x_447] = x_448;
-      int const x_450 = top;
-      int const x_451 = as_type<int>((as_type<uint>(x_450) + as_type<uint>(1)));
-      top = x_451;
-      int const x_452 = p;
-      stack.arr[x_451] = as_type<int>((as_type<uint>(x_452) - as_type<uint>(1)));
-    }
-    int const x_455 = p;
-    int const x_457 = h_1;
-    if ((as_type<int>((as_type<uint>(x_455) + as_type<uint>(1))) < x_457)) {
-      int const x_461 = top;
-      int const x_462 = as_type<int>((as_type<uint>(x_461) + as_type<uint>(1)));
-      top = x_462;
-      int const x_463 = p;
-      stack.arr[x_462] = as_type<int>((as_type<uint>(x_463) + as_type<uint>(1)));
-      int const x_466 = top;
-      int const x_467 = as_type<int>((as_type<uint>(x_466) + as_type<uint>(1)));
-      top = x_467;
-      int const x_468 = h_1;
-      stack.arr[x_467] = x_468;
-    }
-  }
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.spvasm
deleted file mode 100644
index 4dded40..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,780 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 521
-; Schema: 0
-               OpCapability Shader
-        %339 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %x_90 "x_90"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %x_95 "x_95"
-               OpName %x_96 "x_96"
-               OpName %x_97 "x_97"
-               OpName %x_98 "x_98"
-               OpName %x_99 "x_99"
-               OpName %x_100 "x_100"
-               OpName %x_101 "x_101"
-               OpName %x_102 "x_102"
-               OpName %x_103 "x_103"
-               OpName %x_104 "x_104"
-               OpName %x_105 "x_105"
-               OpName %x_106 "x_106"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %29 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %50 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %57 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %61 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %65 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-         %68 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %227 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %358 = OpTypeFunction %main_out %v4float
-        %373 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-        %394 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-     %main_1 = OpFunction %void None %29
-         %32 = OpLabel
-       %x_90 = OpVariable %_ptr_Function_int Function %35
-       %x_91 = OpVariable %_ptr_Function_int Function %35
-       %x_92 = OpVariable %_ptr_Function_int Function %35
-       %x_93 = OpVariable %_ptr_Function_int Function %35
-       %x_94 = OpVariable %_ptr_Function_int Function %35
-       %x_95 = OpVariable %_ptr_Function_int Function %35
-       %x_96 = OpVariable %_ptr_Function_int Function %35
-       %x_97 = OpVariable %_ptr_Function_int Function %35
-       %x_98 = OpVariable %_ptr_Function_int Function %35
-       %x_99 = OpVariable %_ptr_Function_int Function %35
-      %x_100 = OpVariable %_ptr_Function_int Function %35
-      %x_101 = OpVariable %_ptr_Function_int Function %35
-      %x_102 = OpVariable %_ptr_Function_int Function %35
-      %x_103 = OpVariable %_ptr_Function__arr_int_uint_10 Function %50
-      %x_104 = OpVariable %_ptr_Function_int Function %35
-      %x_105 = OpVariable %_ptr_Function_int Function %35
-      %x_106 = OpVariable %_ptr_Function_int Function %35
-        %i_2 = OpVariable %_ptr_Function_int Function %35
-         %uv = OpVariable %_ptr_Function_v2float Function %57
-      %color = OpVariable %_ptr_Function_v3float Function %61
-         %62 = OpLoad %v4float %x_GLF_pos
-         %66 = OpFAdd %v4float %62 %65
-         %69 = OpFMul %v4float %66 %68
-               OpStore %x_GLF_FragCoord %69
-               OpStore %i_2 %int_0
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %i_2
-         %77 = OpSLessThan %bool %75 %int_10
-               OpSelectionMerge %79 None
-               OpBranchConditional %77 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %72
-         %79 = OpLabel
-         %82 = OpLoad %int %i_2
-         %83 = OpLoad %int %i_2
-         %86 = OpAccessChain %_ptr_Private_int %obj %uint_0 %82
-         %87 = OpISub %int %int_10 %83
-               OpStore %86 %87
-         %88 = OpLoad %int %i_2
-         %89 = OpLoad %int %i_2
-         %90 = OpAccessChain %_ptr_Private_int %obj %uint_0 %89
-         %91 = OpLoad %int %90
-         %92 = OpLoad %int %i_2
-         %93 = OpAccessChain %_ptr_Private_int %obj %uint_0 %92
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Private_int %obj %uint_0 %88
-         %96 = OpIMul %int %91 %94
-               OpStore %95 %96
-               OpBranch %73
-         %73 = OpLabel
-         %97 = OpLoad %int %i_2
-         %99 = OpIAdd %int %97 %int_1
-               OpStore %i_2 %99
-               OpBranch %71
-         %72 = OpLabel
-               OpStore %x_100 %int_0
-               OpStore %x_101 %int_9
-               OpStore %x_102 %int_n1
-        %102 = OpLoad %int %x_102
-        %103 = OpIAdd %int %102 %int_1
-               OpStore %x_102 %103
-        %104 = OpLoad %int %x_100
-        %105 = OpAccessChain %_ptr_Function_int %x_103 %103
-               OpStore %105 %104
-        %106 = OpLoad %int %x_102
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %x_102 %107
-        %108 = OpLoad %int %x_101
-        %109 = OpAccessChain %_ptr_Function_int %x_103 %107
-               OpStore %109 %108
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %x_102
-        %115 = OpSGreaterThanEqual %bool %114 %int_0
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-               OpBranch %116
-        %118 = OpLabel
-               OpBranch %111
-        %116 = OpLabel
-        %119 = OpLoad %int %x_102
-        %120 = OpISub %int %119 %int_1
-               OpStore %x_102 %120
-        %121 = OpAccessChain %_ptr_Function_int %x_103 %119
-        %122 = OpLoad %int %121
-               OpStore %x_101 %122
-        %123 = OpLoad %int %x_102
-        %124 = OpISub %int %123 %int_1
-               OpStore %x_102 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_103 %123
-        %126 = OpLoad %int %125
-               OpStore %x_100 %126
-        %127 = OpLoad %int %x_100
-               OpStore %x_105 %127
-        %128 = OpLoad %int %x_101
-               OpStore %x_106 %128
-        %129 = OpLoad %int %x_106
-        %130 = OpAccessChain %_ptr_Private_int %obj %uint_0 %129
-        %131 = OpLoad %int %130
-               OpStore %x_92 %131
-        %132 = OpLoad %int %x_105
-        %133 = OpISub %int %132 %int_1
-               OpStore %x_93 %133
-        %134 = OpLoad %int %x_105
-               OpStore %x_94 %134
-               OpBranch %135
-        %135 = OpLabel
-               OpLoopMerge %136 %137 None
-               OpBranch %138
-        %138 = OpLabel
-        %139 = OpLoad %int %x_94
-        %140 = OpLoad %int %x_106
-        %141 = OpISub %int %140 %int_1
-        %142 = OpSLessThanEqual %bool %139 %141
-               OpSelectionMerge %143 None
-               OpBranchConditional %142 %144 %145
-        %144 = OpLabel
-               OpBranch %143
-        %145 = OpLabel
-               OpBranch %136
-        %143 = OpLabel
-        %146 = OpLoad %int %x_94
-        %147 = OpAccessChain %_ptr_Private_int %obj %uint_0 %146
-        %148 = OpLoad %int %147
-        %149 = OpLoad %int %x_92
-        %150 = OpSLessThanEqual %bool %148 %149
-               OpSelectionMerge %151 None
-               OpBranchConditional %150 %152 %151
-        %152 = OpLabel
-        %153 = OpLoad %int %x_93
-        %154 = OpIAdd %int %153 %int_1
-               OpStore %x_93 %154
-        %155 = OpLoad %int %x_93
-               OpStore %x_95 %155
-        %156 = OpLoad %int %x_94
-               OpStore %x_96 %156
-        %157 = OpLoad %int %x_95
-        %158 = OpAccessChain %_ptr_Private_int %obj %uint_0 %157
-        %159 = OpLoad %int %158
-               OpStore %x_91 %159
-        %160 = OpLoad %int %x_95
-        %161 = OpLoad %int %x_96
-        %162 = OpAccessChain %_ptr_Private_int %obj %uint_0 %161
-        %163 = OpLoad %int %162
-        %164 = OpAccessChain %_ptr_Private_int %obj %uint_0 %160
-               OpStore %164 %163
-        %165 = OpLoad %int %x_96
-        %166 = OpLoad %int %x_91
-        %167 = OpAccessChain %_ptr_Private_int %obj %uint_0 %165
-               OpStore %167 %166
-               OpBranch %151
-        %151 = OpLabel
-               OpBranch %137
-        %137 = OpLabel
-        %168 = OpLoad %int %x_94
-        %169 = OpIAdd %int %168 %int_1
-               OpStore %x_94 %169
-               OpBranch %135
-        %136 = OpLabel
-        %170 = OpLoad %int %x_93
-        %171 = OpIAdd %int %170 %int_1
-               OpStore %x_97 %171
-        %172 = OpLoad %int %x_106
-               OpStore %x_98 %172
-        %173 = OpLoad %int %x_97
-        %174 = OpAccessChain %_ptr_Private_int %obj %uint_0 %173
-        %175 = OpLoad %int %174
-               OpStore %x_90 %175
-        %176 = OpLoad %int %x_97
-        %177 = OpLoad %int %x_98
-        %178 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
-        %179 = OpLoad %int %178
-        %180 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-               OpStore %180 %179
-        %181 = OpLoad %int %x_98
-        %182 = OpLoad %int %x_90
-        %183 = OpAccessChain %_ptr_Private_int %obj %uint_0 %181
-               OpStore %183 %182
-        %184 = OpLoad %int %x_93
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %x_99 %185
-        %186 = OpLoad %int %x_99
-               OpStore %x_104 %186
-        %187 = OpLoad %int %x_104
-        %188 = OpLoad %int %x_100
-        %189 = OpISub %int %187 %int_1
-        %190 = OpSGreaterThan %bool %189 %188
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %191
-        %192 = OpLabel
-        %193 = OpLoad %int %x_102
-        %194 = OpIAdd %int %193 %int_1
-               OpStore %x_102 %194
-        %195 = OpLoad %int %x_100
-        %196 = OpAccessChain %_ptr_Function_int %x_103 %194
-               OpStore %196 %195
-        %197 = OpLoad %int %x_102
-        %198 = OpIAdd %int %197 %int_1
-               OpStore %x_102 %198
-        %199 = OpLoad %int %x_104
-        %200 = OpAccessChain %_ptr_Function_int %x_103 %198
-        %201 = OpISub %int %199 %int_1
-               OpStore %200 %201
-               OpBranch %191
-        %191 = OpLabel
-        %202 = OpLoad %int %x_104
-        %203 = OpLoad %int %x_101
-        %204 = OpIAdd %int %202 %int_1
-        %205 = OpSLessThan %bool %204 %203
-               OpSelectionMerge %206 None
-               OpBranchConditional %205 %207 %206
-        %207 = OpLabel
-        %208 = OpLoad %int %x_102
-        %209 = OpIAdd %int %208 %int_1
-               OpStore %x_102 %209
-        %210 = OpLoad %int %x_104
-        %211 = OpAccessChain %_ptr_Function_int %x_103 %209
-        %212 = OpIAdd %int %210 %int_1
-               OpStore %211 %212
-        %213 = OpLoad %int %x_102
-        %214 = OpIAdd %int %213 %int_1
-               OpStore %x_102 %214
-        %215 = OpLoad %int %x_101
-        %216 = OpAccessChain %_ptr_Function_int %x_103 %214
-               OpStore %216 %215
-               OpBranch %206
-        %206 = OpLabel
-               OpBranch %112
-        %112 = OpLabel
-               OpBranch %110
-        %111 = OpLabel
-        %217 = OpLoad %v4float %x_GLF_FragCoord
-        %219 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %220 = OpLoad %v2float %219
-        %221 = OpCompositeExtract %float %217 0
-        %222 = OpCompositeExtract %float %217 1
-        %223 = OpCompositeConstruct %v2float %221 %222
-        %224 = OpFDiv %v2float %223 %220
-               OpStore %uv %224
-               OpStore %color %227
-        %228 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %229 = OpLoad %int %228
-        %231 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %232 = OpLoad %float %231
-        %233 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %234 = OpConvertSToF %float %229
-        %235 = OpFAdd %float %232 %234
-               OpStore %233 %235
-        %236 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %237 = OpLoad %float %236
-        %239 = OpFOrdGreaterThan %bool %237 %float_0_25
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %240
-        %241 = OpLabel
-        %242 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %243 = OpLoad %int %242
-        %244 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %245 = OpLoad %float %244
-        %246 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %247 = OpConvertSToF %float %243
-        %248 = OpFAdd %float %245 %247
-               OpStore %246 %248
-               OpBranch %240
-        %240 = OpLabel
-        %249 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %250 = OpLoad %float %249
-        %252 = OpFOrdGreaterThan %bool %250 %float_0_5
-               OpSelectionMerge %253 None
-               OpBranchConditional %252 %254 %253
-        %254 = OpLabel
-        %256 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %257 = OpLoad %int %256
-        %259 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %260 = OpLoad %float %259
-        %261 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %262 = OpConvertSToF %float %257
-        %263 = OpFAdd %float %260 %262
-               OpStore %261 %263
-               OpBranch %253
-        %253 = OpLabel
-        %264 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %265 = OpLoad %float %264
-        %267 = OpFOrdGreaterThan %bool %265 %float_0_75
-               OpSelectionMerge %268 None
-               OpBranchConditional %267 %269 %268
-        %269 = OpLabel
-        %271 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %272 = OpLoad %int %271
-        %274 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %275 = OpLoad %float %274
-        %276 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %277 = OpConvertSToF %float %272
-        %278 = OpFAdd %float %275 %277
-               OpStore %276 %278
-               OpBranch %268
-        %268 = OpLabel
-        %280 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %281 = OpLoad %int %280
-        %282 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %283 = OpLoad %float %282
-        %284 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %285 = OpConvertSToF %float %281
-        %286 = OpFAdd %float %283 %285
-               OpStore %284 %286
-        %287 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %288 = OpLoad %float %287
-        %289 = OpFOrdGreaterThan %bool %288 %float_0_25
-               OpSelectionMerge %290 None
-               OpBranchConditional %289 %291 %290
-        %291 = OpLabel
-        %293 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %294 = OpLoad %int %293
-        %295 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %296 = OpLoad %float %295
-        %297 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %298 = OpConvertSToF %float %294
-        %299 = OpFAdd %float %296 %298
-               OpStore %297 %299
-               OpBranch %290
-        %290 = OpLabel
-        %300 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %301 = OpLoad %float %300
-        %302 = OpFOrdGreaterThan %bool %301 %float_0_5
-               OpSelectionMerge %303 None
-               OpBranchConditional %302 %304 %303
-        %304 = OpLabel
-        %306 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %307 = OpLoad %int %306
-        %308 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %309 = OpLoad %float %308
-        %310 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %311 = OpConvertSToF %float %307
-        %312 = OpFAdd %float %309 %311
-               OpStore %310 %312
-               OpBranch %303
-        %303 = OpLabel
-        %313 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %314 = OpLoad %float %313
-        %315 = OpFOrdGreaterThan %bool %314 %float_0_75
-               OpSelectionMerge %316 None
-               OpBranchConditional %315 %317 %316
-        %317 = OpLabel
-        %319 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %320 = OpLoad %int %319
-        %321 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %322 = OpLoad %float %321
-        %323 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %324 = OpConvertSToF %float %320
-        %325 = OpFAdd %float %322 %324
-               OpStore %323 %325
-               OpBranch %316
-        %316 = OpLabel
-        %327 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %328 = OpLoad %int %327
-        %329 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %330 = OpLoad %float %329
-        %331 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %332 = OpConvertSToF %float %328
-        %333 = OpFAdd %float %330 %332
-               OpStore %331 %333
-        %334 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %335 = OpLoad %float %334
-        %336 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %337 = OpLoad %float %336
-        %340 = OpFSub %float %335 %337
-        %338 = OpExtInst %float %339 FAbs %340
-        %341 = OpFOrdLessThan %bool %338 %float_0_25
-               OpSelectionMerge %342 None
-               OpBranchConditional %341 %343 %342
-        %343 = OpLabel
-        %344 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %345 = OpLoad %int %344
-        %346 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %347 = OpLoad %float %346
-        %348 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %349 = OpConvertSToF %float %345
-        %350 = OpFAdd %float %347 %349
-               OpStore %348 %350
-               OpBranch %342
-        %342 = OpLabel
-        %351 = OpLoad %v3float %color
-        %352 = OpExtInst %v3float %339 Normalize %351
-        %353 = OpCompositeExtract %float %352 0
-        %354 = OpCompositeExtract %float %352 1
-        %355 = OpCompositeExtract %float %352 2
-        %356 = OpCompositeConstruct %v4float %353 %354 %355 %float_1
-               OpStore %frag_color %356
-        %357 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %357
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %358
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %362 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %363 = OpFunctionCall %void %main_1
-        %364 = OpLoad %v4float %frag_color
-        %365 = OpLoad %v4float %gl_Position
-        %366 = OpCompositeConstruct %main_out %364 %365
-               OpReturnValue %366
-               OpFunctionEnd
-       %main = OpFunction %void None %29
-        %368 = OpLabel
-        %370 = OpLoad %v4float %x_GLF_pos_param_1
-        %369 = OpFunctionCall %main_out %main_inner %370
-        %371 = OpCompositeExtract %v4float %369 0
-               OpStore %frag_color_1_1 %371
-        %372 = OpCompositeExtract %v4float %369 1
-               OpStore %gl_Position_1 %372
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
-%swap_i1_i1_ = OpFunction %void None %373
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-        %377 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %35
-        %380 = OpLoad %int %i
-        %381 = OpAccessChain %_ptr_Private_int %obj %uint_0 %380
-        %382 = OpLoad %int %381
-               OpStore %temp %382
-        %384 = OpLoad %int %i
-        %386 = OpLoad %int %j
-        %387 = OpAccessChain %_ptr_Private_int %obj %uint_0 %386
-        %388 = OpLoad %int %387
-        %389 = OpAccessChain %_ptr_Private_int %obj %uint_0 %384
-               OpStore %389 %388
-        %391 = OpLoad %int %j
-        %392 = OpLoad %int %temp
-        %393 = OpAccessChain %_ptr_Private_int %obj %uint_0 %391
-               OpStore %393 %392
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %394
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-        %398 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %35
-        %i_1 = OpVariable %_ptr_Function_int Function %35
-        %j_1 = OpVariable %_ptr_Function_int Function %35
-      %param = OpVariable %_ptr_Function_int Function %35
-    %param_1 = OpVariable %_ptr_Function_int Function %35
-    %param_2 = OpVariable %_ptr_Function_int Function %35
-    %param_3 = OpVariable %_ptr_Function_int Function %35
-        %407 = OpLoad %int %h
-        %408 = OpAccessChain %_ptr_Private_int %obj %uint_0 %407
-        %409 = OpLoad %int %408
-               OpStore %pivot %409
-        %411 = OpLoad %int %l
-        %412 = OpISub %int %411 %int_1
-               OpStore %i_1 %412
-        %414 = OpLoad %int %l
-               OpStore %j_1 %414
-               OpBranch %415
-        %415 = OpLabel
-               OpLoopMerge %416 %417 None
-               OpBranch %418
-        %418 = OpLabel
-        %419 = OpLoad %int %j_1
-        %421 = OpLoad %int %h
-        %422 = OpISub %int %421 %int_1
-        %423 = OpSLessThanEqual %bool %419 %422
-               OpSelectionMerge %424 None
-               OpBranchConditional %423 %425 %426
-        %425 = OpLabel
-               OpBranch %424
-        %426 = OpLabel
-               OpBranch %416
-        %424 = OpLabel
-        %427 = OpLoad %int %j_1
-        %428 = OpAccessChain %_ptr_Private_int %obj %uint_0 %427
-        %429 = OpLoad %int %428
-        %430 = OpLoad %int %pivot
-        %431 = OpSLessThanEqual %bool %429 %430
-               OpSelectionMerge %432 None
-               OpBranchConditional %431 %433 %432
-        %433 = OpLabel
-        %434 = OpLoad %int %i_1
-        %435 = OpIAdd %int %434 %int_1
-               OpStore %i_1 %435
-        %436 = OpLoad %int %i_1
-               OpStore %param %436
-        %437 = OpLoad %int %j_1
-               OpStore %param_1 %437
-        %438 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %432
-        %432 = OpLabel
-               OpBranch %417
-        %417 = OpLabel
-        %441 = OpLoad %int %j_1
-        %442 = OpIAdd %int %441 %int_1
-               OpStore %j_1 %442
-               OpBranch %415
-        %416 = OpLabel
-        %443 = OpLoad %int %i_1
-        %444 = OpIAdd %int %443 %int_1
-               OpStore %param_2 %444
-        %446 = OpLoad %int %h
-               OpStore %param_3 %446
-        %447 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %450 = OpLoad %int %i_1
-        %451 = OpIAdd %int %450 %int_1
-               OpReturnValue %451
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %29
-        %453 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %35
-        %h_1 = OpVariable %_ptr_Function_int Function %35
-        %top = OpVariable %_ptr_Function_int Function %35
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %50
-          %p = OpVariable %_ptr_Function_int Function %35
-    %param_4 = OpVariable %_ptr_Function_int Function %35
-    %param_5 = OpVariable %_ptr_Function_int Function %35
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %461 = OpLoad %int %top
-        %462 = OpIAdd %int %461 %int_1
-               OpStore %top %462
-        %463 = OpLoad %int %l_1
-        %464 = OpAccessChain %_ptr_Function_int %stack %462
-               OpStore %464 %463
-        %465 = OpLoad %int %top
-        %466 = OpIAdd %int %465 %int_1
-               OpStore %top %466
-        %467 = OpLoad %int %h_1
-        %468 = OpAccessChain %_ptr_Function_int %stack %466
-               OpStore %468 %467
-               OpBranch %469
-        %469 = OpLabel
-               OpLoopMerge %470 %471 None
-               OpBranch %472
-        %472 = OpLabel
-        %473 = OpLoad %int %top
-        %474 = OpSGreaterThanEqual %bool %473 %int_0
-               OpSelectionMerge %475 None
-               OpBranchConditional %474 %476 %477
-        %476 = OpLabel
-               OpBranch %475
-        %477 = OpLabel
-               OpBranch %470
-        %475 = OpLabel
-        %478 = OpLoad %int %top
-        %479 = OpISub %int %478 %int_1
-               OpStore %top %479
-        %480 = OpAccessChain %_ptr_Function_int %stack %478
-        %481 = OpLoad %int %480
-               OpStore %h_1 %481
-        %482 = OpLoad %int %top
-        %483 = OpISub %int %482 %int_1
-               OpStore %top %483
-        %484 = OpAccessChain %_ptr_Function_int %stack %482
-        %485 = OpLoad %int %484
-               OpStore %l_1 %485
-        %486 = OpLoad %int %l_1
-               OpStore %param_4 %486
-        %487 = OpLoad %int %h_1
-               OpStore %param_5 %487
-        %488 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %488
-        %491 = OpLoad %int %p
-        %492 = OpLoad %int %l_1
-        %493 = OpISub %int %491 %int_1
-        %494 = OpSGreaterThan %bool %493 %492
-               OpSelectionMerge %495 None
-               OpBranchConditional %494 %496 %495
-        %496 = OpLabel
-        %497 = OpLoad %int %top
-        %498 = OpIAdd %int %497 %int_1
-               OpStore %top %498
-        %499 = OpLoad %int %l_1
-        %500 = OpAccessChain %_ptr_Function_int %stack %498
-               OpStore %500 %499
-        %501 = OpLoad %int %top
-        %502 = OpIAdd %int %501 %int_1
-               OpStore %top %502
-        %503 = OpLoad %int %p
-        %504 = OpAccessChain %_ptr_Function_int %stack %502
-        %505 = OpISub %int %503 %int_1
-               OpStore %504 %505
-               OpBranch %495
-        %495 = OpLabel
-        %506 = OpLoad %int %p
-        %507 = OpLoad %int %h_1
-        %508 = OpIAdd %int %506 %int_1
-        %509 = OpSLessThan %bool %508 %507
-               OpSelectionMerge %510 None
-               OpBranchConditional %509 %511 %510
-        %511 = OpLabel
-        %512 = OpLoad %int %top
-        %513 = OpIAdd %int %512 %int_1
-               OpStore %top %513
-        %514 = OpLoad %int %p
-        %515 = OpAccessChain %_ptr_Function_int %stack %513
-        %516 = OpIAdd %int %514 %int_1
-               OpStore %515 %516
-        %517 = OpLoad %int %top
-        %518 = OpIAdd %int %517 %int_1
-               OpStore %top %518
-        %519 = OpLoad %int %h_1
-        %520 = OpAccessChain %_ptr_Function_int %stack %518
-               OpStore %520 %519
-               OpBranch %510
-        %510 = OpLabel
-               OpBranch %471
-        %471 = OpLabel
-               OpBranch %469
-        %470 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.wgsl
deleted file mode 100644
index dcc0835..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,399 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  var x_90 : i32;
-  var x_91 : i32;
-  var x_92 : i32;
-  var x_93 : i32;
-  var x_94 : i32;
-  var x_95 : i32;
-  var x_96 : i32;
-  var x_97 : i32;
-  var x_98 : i32;
-  var x_99 : i32;
-  var x_100 : i32;
-  var x_101 : i32;
-  var x_102 : i32;
-  var x_103 : array<i32, 10>;
-  var x_104 : i32;
-  var x_105 : i32;
-  var x_106 : i32;
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_107 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_107 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_114 : i32 = i_2;
-    if ((x_114 < 10)) {
-    } else {
-      break;
-    }
-    let x_117 : i32 = i_2;
-    let x_118 : i32 = i_2;
-    obj.numbers[x_117] = (10 - x_118);
-    let x_121 : i32 = i_2;
-    let x_122 : i32 = i_2;
-    let x_124 : i32 = obj.numbers[x_122];
-    let x_125 : i32 = i_2;
-    let x_127 : i32 = obj.numbers[x_125];
-    obj.numbers[x_121] = (x_124 * x_127);
-
-    continuing {
-      let x_130 : i32 = i_2;
-      i_2 = (x_130 + 1);
-    }
-  }
-  x_100 = 0;
-  x_101 = 9;
-  x_102 = -1;
-  let x_132 : i32 = x_102;
-  let x_133 : i32 = (x_132 + 1);
-  x_102 = x_133;
-  let x_134 : i32 = x_100;
-  x_103[x_133] = x_134;
-  let x_136 : i32 = x_102;
-  let x_137 : i32 = (x_136 + 1);
-  x_102 = x_137;
-  let x_138 : i32 = x_101;
-  x_103[x_137] = x_138;
-  loop {
-    let x_144 : i32 = x_102;
-    if ((x_144 >= 0)) {
-    } else {
-      break;
-    }
-    let x_147 : i32 = x_102;
-    x_102 = (x_147 - 1);
-    let x_150 : i32 = x_103[x_147];
-    x_101 = x_150;
-    let x_151 : i32 = x_102;
-    x_102 = (x_151 - 1);
-    let x_154 : i32 = x_103[x_151];
-    x_100 = x_154;
-    let x_155 : i32 = x_100;
-    x_105 = x_155;
-    let x_156 : i32 = x_101;
-    x_106 = x_156;
-    let x_157 : i32 = x_106;
-    let x_159 : i32 = obj.numbers[x_157];
-    x_92 = x_159;
-    let x_160 : i32 = x_105;
-    x_93 = (x_160 - 1);
-    let x_162 : i32 = x_105;
-    x_94 = x_162;
-    loop {
-      let x_167 : i32 = x_94;
-      let x_168 : i32 = x_106;
-      if ((x_167 <= (x_168 - 1))) {
-      } else {
-        break;
-      }
-      let x_172 : i32 = x_94;
-      let x_174 : i32 = obj.numbers[x_172];
-      let x_175 : i32 = x_92;
-      if ((x_174 <= x_175)) {
-        let x_179 : i32 = x_93;
-        x_93 = (x_179 + 1);
-        let x_181 : i32 = x_93;
-        x_95 = x_181;
-        let x_182 : i32 = x_94;
-        x_96 = x_182;
-        let x_183 : i32 = x_95;
-        let x_185 : i32 = obj.numbers[x_183];
-        x_91 = x_185;
-        let x_186 : i32 = x_95;
-        let x_187 : i32 = x_96;
-        let x_189 : i32 = obj.numbers[x_187];
-        obj.numbers[x_186] = x_189;
-        let x_191 : i32 = x_96;
-        let x_192 : i32 = x_91;
-        obj.numbers[x_191] = x_192;
-      }
-
-      continuing {
-        let x_194 : i32 = x_94;
-        x_94 = (x_194 + 1);
-      }
-    }
-    let x_196 : i32 = x_93;
-    x_97 = (x_196 + 1);
-    let x_198 : i32 = x_106;
-    x_98 = x_198;
-    let x_199 : i32 = x_97;
-    let x_201 : i32 = obj.numbers[x_199];
-    x_90 = x_201;
-    let x_202 : i32 = x_97;
-    let x_203 : i32 = x_98;
-    let x_205 : i32 = obj.numbers[x_203];
-    obj.numbers[x_202] = x_205;
-    let x_207 : i32 = x_98;
-    let x_208 : i32 = x_90;
-    obj.numbers[x_207] = x_208;
-    let x_210 : i32 = x_93;
-    x_99 = (x_210 + 1);
-    let x_212 : i32 = x_99;
-    x_104 = x_212;
-    let x_213 : i32 = x_104;
-    let x_215 : i32 = x_100;
-    if (((x_213 - 1) > x_215)) {
-      let x_219 : i32 = x_102;
-      let x_220 : i32 = (x_219 + 1);
-      x_102 = x_220;
-      let x_221 : i32 = x_100;
-      x_103[x_220] = x_221;
-      let x_223 : i32 = x_102;
-      let x_224 : i32 = (x_223 + 1);
-      x_102 = x_224;
-      let x_225 : i32 = x_104;
-      x_103[x_224] = (x_225 - 1);
-    }
-    let x_228 : i32 = x_104;
-    let x_230 : i32 = x_101;
-    if (((x_228 + 1) < x_230)) {
-      let x_234 : i32 = x_102;
-      let x_235 : i32 = (x_234 + 1);
-      x_102 = x_235;
-      let x_236 : i32 = x_104;
-      x_103[x_235] = (x_236 + 1);
-      let x_239 : i32 = x_102;
-      let x_240 : i32 = (x_239 + 1);
-      x_102 = x_240;
-      let x_241 : i32 = x_101;
-      x_103[x_240] = x_241;
-    }
-  }
-  let x_243 : vec4<f32> = x_GLF_FragCoord;
-  let x_246 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_243.x, x_243.y) / x_246);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_249 : i32 = obj.numbers[0];
-  let x_252 : f32 = color.x;
-  color.x = (x_252 + f32(x_249));
-  let x_256 : f32 = uv.x;
-  if ((x_256 > 0.25)) {
-    let x_261 : i32 = obj.numbers[1];
-    let x_264 : f32 = color.x;
-    color.x = (x_264 + f32(x_261));
-  }
-  let x_268 : f32 = uv.x;
-  if ((x_268 > 0.5)) {
-    let x_273 : i32 = obj.numbers[2];
-    let x_276 : f32 = color.y;
-    color.y = (x_276 + f32(x_273));
-  }
-  let x_280 : f32 = uv.x;
-  if ((x_280 > 0.75)) {
-    let x_285 : i32 = obj.numbers[3];
-    let x_288 : f32 = color.z;
-    color.z = (x_288 + f32(x_285));
-  }
-  let x_292 : i32 = obj.numbers[4];
-  let x_295 : f32 = color.y;
-  color.y = (x_295 + f32(x_292));
-  let x_299 : f32 = uv.y;
-  if ((x_299 > 0.25)) {
-    let x_304 : i32 = obj.numbers[5];
-    let x_307 : f32 = color.x;
-    color.x = (x_307 + f32(x_304));
-  }
-  let x_311 : f32 = uv.y;
-  if ((x_311 > 0.5)) {
-    let x_316 : i32 = obj.numbers[6];
-    let x_319 : f32 = color.y;
-    color.y = (x_319 + f32(x_316));
-  }
-  let x_323 : f32 = uv.y;
-  if ((x_323 > 0.75)) {
-    let x_328 : i32 = obj.numbers[7];
-    let x_331 : f32 = color.z;
-    color.z = (x_331 + f32(x_328));
-  }
-  let x_335 : i32 = obj.numbers[8];
-  let x_338 : f32 = color.z;
-  color.z = (x_338 + f32(x_335));
-  let x_342 : f32 = uv.x;
-  let x_344 : f32 = uv.y;
-  if ((abs((x_342 - x_344)) < 0.25)) {
-    let x_351 : i32 = obj.numbers[9];
-    let x_354 : f32 = color.x;
-    color.x = (x_354 + f32(x_351));
-  }
-  let x_357 : vec3<f32> = color;
-  let x_358 : vec3<f32> = normalize(x_357);
-  frag_color = vec4<f32>(x_358.x, x_358.y, x_358.z, 1.0);
-  let x_363 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_363;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_366 : i32 = *(i);
-  let x_368 : i32 = obj.numbers[x_366];
-  temp = x_368;
-  let x_369 : i32 = *(i);
-  let x_370 : i32 = *(j);
-  let x_372 : i32 = obj.numbers[x_370];
-  obj.numbers[x_369] = x_372;
-  let x_374 : i32 = *(j);
-  let x_375 : i32 = temp;
-  obj.numbers[x_374] = x_375;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_378 : i32 = *(h);
-  let x_380 : i32 = obj.numbers[x_378];
-  pivot = x_380;
-  let x_381 : i32 = *(l);
-  i_1 = (x_381 - 1);
-  let x_383 : i32 = *(l);
-  j_1 = x_383;
-  loop {
-    let x_388 : i32 = j_1;
-    let x_389 : i32 = *(h);
-    if ((x_388 <= (x_389 - 1))) {
-    } else {
-      break;
-    }
-    let x_393 : i32 = j_1;
-    let x_395 : i32 = obj.numbers[x_393];
-    let x_396 : i32 = pivot;
-    if ((x_395 <= x_396)) {
-      let x_400 : i32 = i_1;
-      i_1 = (x_400 + 1);
-      let x_402 : i32 = i_1;
-      param = x_402;
-      let x_403 : i32 = j_1;
-      param_1 = x_403;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_405 : i32 = j_1;
-      j_1 = (x_405 + 1);
-    }
-  }
-  let x_407 : i32 = i_1;
-  param_2 = (x_407 + 1);
-  let x_409 : i32 = *(h);
-  param_3 = x_409;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_411 : i32 = i_1;
-  return (x_411 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_414 : i32 = top;
-  let x_415 : i32 = (x_414 + 1);
-  top = x_415;
-  let x_416 : i32 = l_1;
-  stack[x_415] = x_416;
-  let x_418 : i32 = top;
-  let x_419 : i32 = (x_418 + 1);
-  top = x_419;
-  let x_420 : i32 = h_1;
-  stack[x_419] = x_420;
-  loop {
-    let x_426 : i32 = top;
-    if ((x_426 >= 0)) {
-    } else {
-      break;
-    }
-    let x_429 : i32 = top;
-    top = (x_429 - 1);
-    let x_432 : i32 = stack[x_429];
-    h_1 = x_432;
-    let x_433 : i32 = top;
-    top = (x_433 - 1);
-    let x_436 : i32 = stack[x_433];
-    l_1 = x_436;
-    let x_437 : i32 = l_1;
-    param_4 = x_437;
-    let x_438 : i32 = h_1;
-    param_5 = x_438;
-    let x_439 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_439;
-    let x_440 : i32 = p;
-    let x_442 : i32 = l_1;
-    if (((x_440 - 1) > x_442)) {
-      let x_446 : i32 = top;
-      let x_447 : i32 = (x_446 + 1);
-      top = x_447;
-      let x_448 : i32 = l_1;
-      stack[x_447] = x_448;
-      let x_450 : i32 = top;
-      let x_451 : i32 = (x_450 + 1);
-      top = x_451;
-      let x_452 : i32 = p;
-      stack[x_451] = (x_452 - 1);
-    }
-    let x_455 : i32 = p;
-    let x_457 : i32 = h_1;
-    if (((x_455 + 1) < x_457)) {
-      let x_461 : i32 = top;
-      let x_462 : i32 = (x_461 + 1);
-      top = x_462;
-      let x_463 : i32 = p;
-      stack[x_462] = (x_463 + 1);
-      let x_466 : i32 = top;
-      let x_467 : i32 = (x_466 + 1);
-      top = x_467;
-      let x_468 : i32 = h_1;
-      stack[x_467] = x_468;
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.hlsl
deleted file mode 100644
index 2d65bff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,312 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int x_95 = 0;
-  int x_96 = 0;
-  int x_97 = 0;
-  int x_98 = 0;
-  int x_99 = 0;
-  int x_100 = 0;
-  int x_101 = 0;
-  int x_102 = 0;
-  int x_103[10] = (int[10])0;
-  int x_104 = 0;
-  int x_105 = 0;
-  int x_106 = 0;
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_121 = i_2;
-      const int x_124 = obj.numbers[i_2];
-      const int x_127 = obj.numbers[i_2];
-      obj.numbers[x_121] = (x_124 * x_127);
-    }
-  }
-  x_100 = 0;
-  x_101 = 9;
-  x_102 = -1;
-  const int x_133 = (x_102 + 1);
-  x_102 = x_133;
-  x_103[x_133] = x_100;
-  const int x_137 = (x_102 + 1);
-  x_102 = x_137;
-  x_103[x_137] = x_101;
-  while (true) {
-    if ((x_102 >= 0)) {
-    } else {
-      break;
-    }
-    const int x_147 = x_102;
-    x_102 = (x_147 - 1);
-    const int x_150 = x_103[x_147];
-    x_101 = x_150;
-    const int x_151 = x_102;
-    x_102 = (x_151 - 1);
-    const int x_154 = x_103[x_151];
-    x_100 = x_154;
-    x_105 = x_100;
-    x_106 = x_101;
-    const int x_159 = obj.numbers[x_106];
-    x_92 = x_159;
-    x_93 = (x_105 - 1);
-    x_94 = x_105;
-    {
-      for(; (x_94 <= (x_106 - 1)); x_94 = (x_94 + 1)) {
-        const int x_174 = obj.numbers[x_94];
-        if ((x_174 <= x_92)) {
-          x_93 = (x_93 + 1);
-          x_95 = x_93;
-          x_96 = x_94;
-          const int x_185 = obj.numbers[x_95];
-          x_91 = x_185;
-          const int x_186 = x_95;
-          const int x_189 = obj.numbers[x_96];
-          obj.numbers[x_186] = x_189;
-          obj.numbers[x_96] = x_91;
-        }
-      }
-    }
-    x_97 = (x_93 + 1);
-    x_98 = x_106;
-    const int x_201 = obj.numbers[x_97];
-    x_90 = x_201;
-    const int x_202 = x_97;
-    const int x_205 = obj.numbers[x_98];
-    obj.numbers[x_202] = x_205;
-    obj.numbers[x_98] = x_90;
-    x_99 = (x_93 + 1);
-    x_104 = x_99;
-    if (((x_104 - 1) > x_100)) {
-      const int x_220 = (x_102 + 1);
-      x_102 = x_220;
-      x_103[x_220] = x_100;
-      const int x_224 = (x_102 + 1);
-      x_102 = x_224;
-      x_103[x_224] = (x_104 - 1);
-    }
-    if (((x_104 + 1) < x_101)) {
-      const int x_235 = (x_102 + 1);
-      x_102 = x_235;
-      x_103[x_235] = (x_104 + 1);
-      const int x_240 = (x_102 + 1);
-      x_102 = x_240;
-      x_103[x_240] = x_101;
-    }
-  }
-  const float4 x_243 = x_GLF_FragCoord;
-  const float2 x_246 = asfloat(x_34[0].xy);
-  uv = (float2(x_243.x, x_243.y) / x_246);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_249 = obj.numbers[0];
-  const float x_252 = color.x;
-  color.x = (x_252 + float(x_249));
-  const float x_256 = uv.x;
-  if ((x_256 > 0.25f)) {
-    const int x_261 = obj.numbers[1];
-    const float x_264 = color.x;
-    color.x = (x_264 + float(x_261));
-  }
-  const float x_268 = uv.x;
-  if ((x_268 > 0.5f)) {
-    const int x_273 = obj.numbers[2];
-    const float x_276 = color.y;
-    color.y = (x_276 + float(x_273));
-  }
-  const float x_280 = uv.x;
-  if ((x_280 > 0.75f)) {
-    const int x_285 = obj.numbers[3];
-    const float x_288 = color.z;
-    color.z = (x_288 + float(x_285));
-  }
-  const int x_292 = obj.numbers[4];
-  const float x_295 = color.y;
-  color.y = (x_295 + float(x_292));
-  const float x_299 = uv.y;
-  if ((x_299 > 0.25f)) {
-    const int x_304 = obj.numbers[5];
-    const float x_307 = color.x;
-    color.x = (x_307 + float(x_304));
-  }
-  const float x_311 = uv.y;
-  if ((x_311 > 0.5f)) {
-    const int x_316 = obj.numbers[6];
-    const float x_319 = color.y;
-    color.y = (x_319 + float(x_316));
-  }
-  const float x_323 = uv.y;
-  if ((x_323 > 0.75f)) {
-    const int x_328 = obj.numbers[7];
-    const float x_331 = color.z;
-    color.z = (x_331 + float(x_328));
-  }
-  const int x_335 = obj.numbers[8];
-  const float x_338 = color.z;
-  color.z = (x_338 + float(x_335));
-  const float x_342 = uv.x;
-  const float x_344 = uv.y;
-  if ((abs((x_342 - x_344)) < 0.25f)) {
-    const int x_351 = obj.numbers[9];
-    const float x_354 = color.x;
-    color.x = (x_354 + float(x_351));
-  }
-  const float3 x_358 = normalize(color);
-  frag_color = float4(x_358.x, x_358.y, x_358.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_4 = {frag_color, gl_Position};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_366 = i;
-  const int x_368 = obj.numbers[x_366];
-  temp = x_368;
-  const int x_369 = i;
-  const int x_370 = j;
-  const int x_372 = obj.numbers[x_370];
-  obj.numbers[x_369] = x_372;
-  const int x_374 = j;
-  obj.numbers[x_374] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_378 = h;
-  const int x_380 = obj.numbers[x_378];
-  pivot = x_380;
-  const int x_381 = l;
-  i_1 = (x_381 - 1);
-  const int x_383 = l;
-  j_1 = x_383;
-  while (true) {
-    const int x_388 = j_1;
-    const int x_389 = h;
-    if ((x_388 <= (x_389 - 1))) {
-    } else {
-      break;
-    }
-    const int x_395 = obj.numbers[j_1];
-    if ((x_395 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_409 = h;
-  param_3 = x_409;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_415 = (top + 1);
-  top = x_415;
-  stack[x_415] = l_1;
-  const int x_419 = (top + 1);
-  top = x_419;
-  stack[x_419] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_429 = top;
-    top = (x_429 - 1);
-    const int x_432 = stack[x_429];
-    h_1 = x_432;
-    const int x_433 = top;
-    top = (x_433 - 1);
-    const int x_436 = stack[x_433];
-    l_1 = x_436;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_439 = performPartition_i1_i1_(param_4, param_5);
-    p = x_439;
-    if (((p - 1) > l_1)) {
-      const int x_447 = (top + 1);
-      top = x_447;
-      stack[x_447] = l_1;
-      const int x_451 = (top + 1);
-      top = x_451;
-      stack[x_451] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_462 = (top + 1);
-      top = x_462;
-      stack[x_462] = (p + 1);
-      const int x_467 = (top + 1);
-      top = x_467;
-      stack[x_467] = h_1;
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.msl
deleted file mode 100644
index c68e490..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.msl
+++ /dev/null
@@ -1,406 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(constant buf0& x_34, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6, thread QuicksortObject* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int x_90 = 0;
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94 = 0;
-  int x_95 = 0;
-  int x_96 = 0;
-  int x_97 = 0;
-  int x_98 = 0;
-  int x_99 = 0;
-  int x_100 = 0;
-  int x_101 = 0;
-  int x_102 = 0;
-  tint_array_wrapper x_103 = {};
-  int x_104 = 0;
-  int x_105 = 0;
-  int x_106 = 0;
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_107 = *(tint_symbol_5);
-  *(tint_symbol_6) = ((x_107 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_114 = i_2;
-    if ((x_114 < 10)) {
-    } else {
-      break;
-    }
-    int const x_117 = i_2;
-    int const x_118 = i_2;
-    (*(tint_symbol_7)).numbers.arr[x_117] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_118)));
-    int const x_121 = i_2;
-    int const x_122 = i_2;
-    int const x_124 = (*(tint_symbol_7)).numbers.arr[x_122];
-    int const x_125 = i_2;
-    int const x_127 = (*(tint_symbol_7)).numbers.arr[x_125];
-    (*(tint_symbol_7)).numbers.arr[x_121] = as_type<int>((as_type<uint>(x_124) * as_type<uint>(x_127)));
-    {
-      int const x_130 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_130) + as_type<uint>(1)));
-    }
-  }
-  x_100 = 0;
-  x_101 = 9;
-  x_102 = -1;
-  int const x_132 = x_102;
-  int const x_133 = as_type<int>((as_type<uint>(x_132) + as_type<uint>(1)));
-  x_102 = x_133;
-  int const x_134 = x_100;
-  x_103.arr[x_133] = x_134;
-  int const x_136 = x_102;
-  int const x_137 = as_type<int>((as_type<uint>(x_136) + as_type<uint>(1)));
-  x_102 = x_137;
-  int const x_138 = x_101;
-  x_103.arr[x_137] = x_138;
-  while (true) {
-    int const x_144 = x_102;
-    if ((x_144 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_147 = x_102;
-    x_102 = as_type<int>((as_type<uint>(x_147) - as_type<uint>(1)));
-    int const x_150 = x_103.arr[x_147];
-    x_101 = x_150;
-    int const x_151 = x_102;
-    x_102 = as_type<int>((as_type<uint>(x_151) - as_type<uint>(1)));
-    int const x_154 = x_103.arr[x_151];
-    x_100 = x_154;
-    int const x_155 = x_100;
-    x_105 = x_155;
-    int const x_156 = x_101;
-    x_106 = x_156;
-    int const x_157 = x_106;
-    int const x_159 = (*(tint_symbol_7)).numbers.arr[x_157];
-    x_92 = x_159;
-    int const x_160 = x_105;
-    x_93 = as_type<int>((as_type<uint>(x_160) - as_type<uint>(1)));
-    int const x_162 = x_105;
-    x_94 = x_162;
-    while (true) {
-      int const x_167 = x_94;
-      int const x_168 = x_106;
-      if ((x_167 <= as_type<int>((as_type<uint>(x_168) - as_type<uint>(1))))) {
-      } else {
-        break;
-      }
-      int const x_172 = x_94;
-      int const x_174 = (*(tint_symbol_7)).numbers.arr[x_172];
-      int const x_175 = x_92;
-      if ((x_174 <= x_175)) {
-        int const x_179 = x_93;
-        x_93 = as_type<int>((as_type<uint>(x_179) + as_type<uint>(1)));
-        int const x_181 = x_93;
-        x_95 = x_181;
-        int const x_182 = x_94;
-        x_96 = x_182;
-        int const x_183 = x_95;
-        int const x_185 = (*(tint_symbol_7)).numbers.arr[x_183];
-        x_91 = x_185;
-        int const x_186 = x_95;
-        int const x_187 = x_96;
-        int const x_189 = (*(tint_symbol_7)).numbers.arr[x_187];
-        (*(tint_symbol_7)).numbers.arr[x_186] = x_189;
-        int const x_191 = x_96;
-        int const x_192 = x_91;
-        (*(tint_symbol_7)).numbers.arr[x_191] = x_192;
-      }
-      {
-        int const x_194 = x_94;
-        x_94 = as_type<int>((as_type<uint>(x_194) + as_type<uint>(1)));
-      }
-    }
-    int const x_196 = x_93;
-    x_97 = as_type<int>((as_type<uint>(x_196) + as_type<uint>(1)));
-    int const x_198 = x_106;
-    x_98 = x_198;
-    int const x_199 = x_97;
-    int const x_201 = (*(tint_symbol_7)).numbers.arr[x_199];
-    x_90 = x_201;
-    int const x_202 = x_97;
-    int const x_203 = x_98;
-    int const x_205 = (*(tint_symbol_7)).numbers.arr[x_203];
-    (*(tint_symbol_7)).numbers.arr[x_202] = x_205;
-    int const x_207 = x_98;
-    int const x_208 = x_90;
-    (*(tint_symbol_7)).numbers.arr[x_207] = x_208;
-    int const x_210 = x_93;
-    x_99 = as_type<int>((as_type<uint>(x_210) + as_type<uint>(1)));
-    int const x_212 = x_99;
-    x_104 = x_212;
-    int const x_213 = x_104;
-    int const x_215 = x_100;
-    if ((as_type<int>((as_type<uint>(x_213) - as_type<uint>(1))) > x_215)) {
-      int const x_219 = x_102;
-      int const x_220 = as_type<int>((as_type<uint>(x_219) + as_type<uint>(1)));
-      x_102 = x_220;
-      int const x_221 = x_100;
-      x_103.arr[x_220] = x_221;
-      int const x_223 = x_102;
-      int const x_224 = as_type<int>((as_type<uint>(x_223) + as_type<uint>(1)));
-      x_102 = x_224;
-      int const x_225 = x_104;
-      x_103.arr[x_224] = as_type<int>((as_type<uint>(x_225) - as_type<uint>(1)));
-    }
-    int const x_228 = x_104;
-    int const x_230 = x_101;
-    if ((as_type<int>((as_type<uint>(x_228) + as_type<uint>(1))) < x_230)) {
-      int const x_234 = x_102;
-      int const x_235 = as_type<int>((as_type<uint>(x_234) + as_type<uint>(1)));
-      x_102 = x_235;
-      int const x_236 = x_104;
-      x_103.arr[x_235] = as_type<int>((as_type<uint>(x_236) + as_type<uint>(1)));
-      int const x_239 = x_102;
-      int const x_240 = as_type<int>((as_type<uint>(x_239) + as_type<uint>(1)));
-      x_102 = x_240;
-      int const x_241 = x_101;
-      x_103.arr[x_240] = x_241;
-    }
-  }
-  float4 const x_243 = *(tint_symbol_6);
-  float2 const x_246 = x_34.resolution;
-  uv = (float2(x_243.x, x_243.y) / x_246);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_249 = (*(tint_symbol_7)).numbers.arr[0];
-  float const x_252 = color.x;
-  color.x = (x_252 + float(x_249));
-  float const x_256 = uv.x;
-  if ((x_256 > 0.25f)) {
-    int const x_261 = (*(tint_symbol_7)).numbers.arr[1];
-    float const x_264 = color.x;
-    color.x = (x_264 + float(x_261));
-  }
-  float const x_268 = uv.x;
-  if ((x_268 > 0.5f)) {
-    int const x_273 = (*(tint_symbol_7)).numbers.arr[2];
-    float const x_276 = color.y;
-    color.y = (x_276 + float(x_273));
-  }
-  float const x_280 = uv.x;
-  if ((x_280 > 0.75f)) {
-    int const x_285 = (*(tint_symbol_7)).numbers.arr[3];
-    float const x_288 = color.z;
-    color.z = (x_288 + float(x_285));
-  }
-  int const x_292 = (*(tint_symbol_7)).numbers.arr[4];
-  float const x_295 = color.y;
-  color.y = (x_295 + float(x_292));
-  float const x_299 = uv.y;
-  if ((x_299 > 0.25f)) {
-    int const x_304 = (*(tint_symbol_7)).numbers.arr[5];
-    float const x_307 = color.x;
-    color.x = (x_307 + float(x_304));
-  }
-  float const x_311 = uv.y;
-  if ((x_311 > 0.5f)) {
-    int const x_316 = (*(tint_symbol_7)).numbers.arr[6];
-    float const x_319 = color.y;
-    color.y = (x_319 + float(x_316));
-  }
-  float const x_323 = uv.y;
-  if ((x_323 > 0.75f)) {
-    int const x_328 = (*(tint_symbol_7)).numbers.arr[7];
-    float const x_331 = color.z;
-    color.z = (x_331 + float(x_328));
-  }
-  int const x_335 = (*(tint_symbol_7)).numbers.arr[8];
-  float const x_338 = color.z;
-  color.z = (x_338 + float(x_335));
-  float const x_342 = uv.x;
-  float const x_344 = uv.y;
-  if ((fabs((x_342 - x_344)) < 0.25f)) {
-    int const x_351 = (*(tint_symbol_7)).numbers.arr[9];
-    float const x_354 = color.x;
-    color.x = (x_354 + float(x_351));
-  }
-  float3 const x_357 = color;
-  float3 const x_358 = normalize(x_357);
-  *(tint_symbol_8) = float4(x_358.x, x_358.y, x_358.z, 1.0f);
-  float4 const x_363 = *(tint_symbol_5);
-  *(tint_symbol_9) = x_363;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 x_GLF_pos_param, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11, thread QuicksortObject* const tint_symbol_12, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14) {
-  *(tint_symbol_10) = x_GLF_pos_param;
-  main_1(x_34, tint_symbol_10, tint_symbol_11, tint_symbol_12, tint_symbol_13, tint_symbol_14);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_13), .gl_Position=*(tint_symbol_14)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_15 = 0.0f;
-  thread float4 tint_symbol_16 = 0.0f;
-  thread QuicksortObject tint_symbol_17 = {};
-  thread float4 tint_symbol_18 = 0.0f;
-  thread float4 tint_symbol_19 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18), &(tint_symbol_19));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_20) {
-  int temp = 0;
-  int const x_366 = *(i);
-  int const x_368 = (*(tint_symbol_20)).numbers.arr[x_366];
-  temp = x_368;
-  int const x_369 = *(i);
-  int const x_370 = *(j);
-  int const x_372 = (*(tint_symbol_20)).numbers.arr[x_370];
-  (*(tint_symbol_20)).numbers.arr[x_369] = x_372;
-  int const x_374 = *(j);
-  int const x_375 = temp;
-  (*(tint_symbol_20)).numbers.arr[x_374] = x_375;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_21) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_378 = *(h);
-  int const x_380 = (*(tint_symbol_21)).numbers.arr[x_378];
-  pivot = x_380;
-  int const x_381 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_381) - as_type<uint>(1)));
-  int const x_383 = *(l);
-  j_1 = x_383;
-  while (true) {
-    int const x_388 = j_1;
-    int const x_389 = *(h);
-    if ((x_388 <= as_type<int>((as_type<uint>(x_389) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_393 = j_1;
-    int const x_395 = (*(tint_symbol_21)).numbers.arr[x_393];
-    int const x_396 = pivot;
-    if ((x_395 <= x_396)) {
-      int const x_400 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_400) + as_type<uint>(1)));
-      int const x_402 = i_1;
-      param = x_402;
-      int const x_403 = j_1;
-      param_1 = x_403;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_21);
-    }
-    {
-      int const x_405 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_405) + as_type<uint>(1)));
-    }
-  }
-  int const x_407 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_407) + as_type<uint>(1)));
-  int const x_409 = *(h);
-  param_3 = x_409;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_21);
-  int const x_411 = i_1;
-  return as_type<int>((as_type<uint>(x_411) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_22) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_414 = top;
-  int const x_415 = as_type<int>((as_type<uint>(x_414) + as_type<uint>(1)));
-  top = x_415;
-  int const x_416 = l_1;
-  stack.arr[x_415] = x_416;
-  int const x_418 = top;
-  int const x_419 = as_type<int>((as_type<uint>(x_418) + as_type<uint>(1)));
-  top = x_419;
-  int const x_420 = h_1;
-  stack.arr[x_419] = x_420;
-  while (true) {
-    int const x_426 = top;
-    if ((x_426 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_429 = top;
-    top = as_type<int>((as_type<uint>(x_429) - as_type<uint>(1)));
-    int const x_432 = stack.arr[x_429];
-    h_1 = x_432;
-    int const x_433 = top;
-    top = as_type<int>((as_type<uint>(x_433) - as_type<uint>(1)));
-    int const x_436 = stack.arr[x_433];
-    l_1 = x_436;
-    int const x_437 = l_1;
-    param_4 = x_437;
-    int const x_438 = h_1;
-    param_5 = x_438;
-    int const x_439 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_22);
-    p = x_439;
-    int const x_440 = p;
-    int const x_442 = l_1;
-    if ((as_type<int>((as_type<uint>(x_440) - as_type<uint>(1))) > x_442)) {
-      int const x_446 = top;
-      int const x_447 = as_type<int>((as_type<uint>(x_446) + as_type<uint>(1)));
-      top = x_447;
-      int const x_448 = l_1;
-      stack.arr[x_447] = x_448;
-      int const x_450 = top;
-      int const x_451 = as_type<int>((as_type<uint>(x_450) + as_type<uint>(1)));
-      top = x_451;
-      int const x_452 = p;
-      stack.arr[x_451] = as_type<int>((as_type<uint>(x_452) - as_type<uint>(1)));
-    }
-    int const x_455 = p;
-    int const x_457 = h_1;
-    if ((as_type<int>((as_type<uint>(x_455) + as_type<uint>(1))) < x_457)) {
-      int const x_461 = top;
-      int const x_462 = as_type<int>((as_type<uint>(x_461) + as_type<uint>(1)));
-      top = x_462;
-      int const x_463 = p;
-      stack.arr[x_462] = as_type<int>((as_type<uint>(x_463) + as_type<uint>(1)));
-      int const x_466 = top;
-      int const x_467 = as_type<int>((as_type<uint>(x_466) + as_type<uint>(1)));
-      top = x_467;
-      int const x_468 = h_1;
-      stack.arr[x_467] = x_468;
-    }
-  }
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.spvasm
deleted file mode 100644
index 4dded40..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,780 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 521
-; Schema: 0
-               OpCapability Shader
-        %339 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %x_90 "x_90"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %x_95 "x_95"
-               OpName %x_96 "x_96"
-               OpName %x_97 "x_97"
-               OpName %x_98 "x_98"
-               OpName %x_99 "x_99"
-               OpName %x_100 "x_100"
-               OpName %x_101 "x_101"
-               OpName %x_102 "x_102"
-               OpName %x_103 "x_103"
-               OpName %x_104 "x_104"
-               OpName %x_105 "x_105"
-               OpName %x_106 "x_106"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %29 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %35 = OpConstantNull %int
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-         %50 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %57 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %61 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %65 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-         %68 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-      %int_0 = OpConstant %int 0
-     %int_10 = OpConstant %int 10
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %227 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %358 = OpTypeFunction %main_out %v4float
-        %373 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-        %394 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-     %main_1 = OpFunction %void None %29
-         %32 = OpLabel
-       %x_90 = OpVariable %_ptr_Function_int Function %35
-       %x_91 = OpVariable %_ptr_Function_int Function %35
-       %x_92 = OpVariable %_ptr_Function_int Function %35
-       %x_93 = OpVariable %_ptr_Function_int Function %35
-       %x_94 = OpVariable %_ptr_Function_int Function %35
-       %x_95 = OpVariable %_ptr_Function_int Function %35
-       %x_96 = OpVariable %_ptr_Function_int Function %35
-       %x_97 = OpVariable %_ptr_Function_int Function %35
-       %x_98 = OpVariable %_ptr_Function_int Function %35
-       %x_99 = OpVariable %_ptr_Function_int Function %35
-      %x_100 = OpVariable %_ptr_Function_int Function %35
-      %x_101 = OpVariable %_ptr_Function_int Function %35
-      %x_102 = OpVariable %_ptr_Function_int Function %35
-      %x_103 = OpVariable %_ptr_Function__arr_int_uint_10 Function %50
-      %x_104 = OpVariable %_ptr_Function_int Function %35
-      %x_105 = OpVariable %_ptr_Function_int Function %35
-      %x_106 = OpVariable %_ptr_Function_int Function %35
-        %i_2 = OpVariable %_ptr_Function_int Function %35
-         %uv = OpVariable %_ptr_Function_v2float Function %57
-      %color = OpVariable %_ptr_Function_v3float Function %61
-         %62 = OpLoad %v4float %x_GLF_pos
-         %66 = OpFAdd %v4float %62 %65
-         %69 = OpFMul %v4float %66 %68
-               OpStore %x_GLF_FragCoord %69
-               OpStore %i_2 %int_0
-               OpBranch %71
-         %71 = OpLabel
-               OpLoopMerge %72 %73 None
-               OpBranch %74
-         %74 = OpLabel
-         %75 = OpLoad %int %i_2
-         %77 = OpSLessThan %bool %75 %int_10
-               OpSelectionMerge %79 None
-               OpBranchConditional %77 %80 %81
-         %80 = OpLabel
-               OpBranch %79
-         %81 = OpLabel
-               OpBranch %72
-         %79 = OpLabel
-         %82 = OpLoad %int %i_2
-         %83 = OpLoad %int %i_2
-         %86 = OpAccessChain %_ptr_Private_int %obj %uint_0 %82
-         %87 = OpISub %int %int_10 %83
-               OpStore %86 %87
-         %88 = OpLoad %int %i_2
-         %89 = OpLoad %int %i_2
-         %90 = OpAccessChain %_ptr_Private_int %obj %uint_0 %89
-         %91 = OpLoad %int %90
-         %92 = OpLoad %int %i_2
-         %93 = OpAccessChain %_ptr_Private_int %obj %uint_0 %92
-         %94 = OpLoad %int %93
-         %95 = OpAccessChain %_ptr_Private_int %obj %uint_0 %88
-         %96 = OpIMul %int %91 %94
-               OpStore %95 %96
-               OpBranch %73
-         %73 = OpLabel
-         %97 = OpLoad %int %i_2
-         %99 = OpIAdd %int %97 %int_1
-               OpStore %i_2 %99
-               OpBranch %71
-         %72 = OpLabel
-               OpStore %x_100 %int_0
-               OpStore %x_101 %int_9
-               OpStore %x_102 %int_n1
-        %102 = OpLoad %int %x_102
-        %103 = OpIAdd %int %102 %int_1
-               OpStore %x_102 %103
-        %104 = OpLoad %int %x_100
-        %105 = OpAccessChain %_ptr_Function_int %x_103 %103
-               OpStore %105 %104
-        %106 = OpLoad %int %x_102
-        %107 = OpIAdd %int %106 %int_1
-               OpStore %x_102 %107
-        %108 = OpLoad %int %x_101
-        %109 = OpAccessChain %_ptr_Function_int %x_103 %107
-               OpStore %109 %108
-               OpBranch %110
-        %110 = OpLabel
-               OpLoopMerge %111 %112 None
-               OpBranch %113
-        %113 = OpLabel
-        %114 = OpLoad %int %x_102
-        %115 = OpSGreaterThanEqual %bool %114 %int_0
-               OpSelectionMerge %116 None
-               OpBranchConditional %115 %117 %118
-        %117 = OpLabel
-               OpBranch %116
-        %118 = OpLabel
-               OpBranch %111
-        %116 = OpLabel
-        %119 = OpLoad %int %x_102
-        %120 = OpISub %int %119 %int_1
-               OpStore %x_102 %120
-        %121 = OpAccessChain %_ptr_Function_int %x_103 %119
-        %122 = OpLoad %int %121
-               OpStore %x_101 %122
-        %123 = OpLoad %int %x_102
-        %124 = OpISub %int %123 %int_1
-               OpStore %x_102 %124
-        %125 = OpAccessChain %_ptr_Function_int %x_103 %123
-        %126 = OpLoad %int %125
-               OpStore %x_100 %126
-        %127 = OpLoad %int %x_100
-               OpStore %x_105 %127
-        %128 = OpLoad %int %x_101
-               OpStore %x_106 %128
-        %129 = OpLoad %int %x_106
-        %130 = OpAccessChain %_ptr_Private_int %obj %uint_0 %129
-        %131 = OpLoad %int %130
-               OpStore %x_92 %131
-        %132 = OpLoad %int %x_105
-        %133 = OpISub %int %132 %int_1
-               OpStore %x_93 %133
-        %134 = OpLoad %int %x_105
-               OpStore %x_94 %134
-               OpBranch %135
-        %135 = OpLabel
-               OpLoopMerge %136 %137 None
-               OpBranch %138
-        %138 = OpLabel
-        %139 = OpLoad %int %x_94
-        %140 = OpLoad %int %x_106
-        %141 = OpISub %int %140 %int_1
-        %142 = OpSLessThanEqual %bool %139 %141
-               OpSelectionMerge %143 None
-               OpBranchConditional %142 %144 %145
-        %144 = OpLabel
-               OpBranch %143
-        %145 = OpLabel
-               OpBranch %136
-        %143 = OpLabel
-        %146 = OpLoad %int %x_94
-        %147 = OpAccessChain %_ptr_Private_int %obj %uint_0 %146
-        %148 = OpLoad %int %147
-        %149 = OpLoad %int %x_92
-        %150 = OpSLessThanEqual %bool %148 %149
-               OpSelectionMerge %151 None
-               OpBranchConditional %150 %152 %151
-        %152 = OpLabel
-        %153 = OpLoad %int %x_93
-        %154 = OpIAdd %int %153 %int_1
-               OpStore %x_93 %154
-        %155 = OpLoad %int %x_93
-               OpStore %x_95 %155
-        %156 = OpLoad %int %x_94
-               OpStore %x_96 %156
-        %157 = OpLoad %int %x_95
-        %158 = OpAccessChain %_ptr_Private_int %obj %uint_0 %157
-        %159 = OpLoad %int %158
-               OpStore %x_91 %159
-        %160 = OpLoad %int %x_95
-        %161 = OpLoad %int %x_96
-        %162 = OpAccessChain %_ptr_Private_int %obj %uint_0 %161
-        %163 = OpLoad %int %162
-        %164 = OpAccessChain %_ptr_Private_int %obj %uint_0 %160
-               OpStore %164 %163
-        %165 = OpLoad %int %x_96
-        %166 = OpLoad %int %x_91
-        %167 = OpAccessChain %_ptr_Private_int %obj %uint_0 %165
-               OpStore %167 %166
-               OpBranch %151
-        %151 = OpLabel
-               OpBranch %137
-        %137 = OpLabel
-        %168 = OpLoad %int %x_94
-        %169 = OpIAdd %int %168 %int_1
-               OpStore %x_94 %169
-               OpBranch %135
-        %136 = OpLabel
-        %170 = OpLoad %int %x_93
-        %171 = OpIAdd %int %170 %int_1
-               OpStore %x_97 %171
-        %172 = OpLoad %int %x_106
-               OpStore %x_98 %172
-        %173 = OpLoad %int %x_97
-        %174 = OpAccessChain %_ptr_Private_int %obj %uint_0 %173
-        %175 = OpLoad %int %174
-               OpStore %x_90 %175
-        %176 = OpLoad %int %x_97
-        %177 = OpLoad %int %x_98
-        %178 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
-        %179 = OpLoad %int %178
-        %180 = OpAccessChain %_ptr_Private_int %obj %uint_0 %176
-               OpStore %180 %179
-        %181 = OpLoad %int %x_98
-        %182 = OpLoad %int %x_90
-        %183 = OpAccessChain %_ptr_Private_int %obj %uint_0 %181
-               OpStore %183 %182
-        %184 = OpLoad %int %x_93
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %x_99 %185
-        %186 = OpLoad %int %x_99
-               OpStore %x_104 %186
-        %187 = OpLoad %int %x_104
-        %188 = OpLoad %int %x_100
-        %189 = OpISub %int %187 %int_1
-        %190 = OpSGreaterThan %bool %189 %188
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %191
-        %192 = OpLabel
-        %193 = OpLoad %int %x_102
-        %194 = OpIAdd %int %193 %int_1
-               OpStore %x_102 %194
-        %195 = OpLoad %int %x_100
-        %196 = OpAccessChain %_ptr_Function_int %x_103 %194
-               OpStore %196 %195
-        %197 = OpLoad %int %x_102
-        %198 = OpIAdd %int %197 %int_1
-               OpStore %x_102 %198
-        %199 = OpLoad %int %x_104
-        %200 = OpAccessChain %_ptr_Function_int %x_103 %198
-        %201 = OpISub %int %199 %int_1
-               OpStore %200 %201
-               OpBranch %191
-        %191 = OpLabel
-        %202 = OpLoad %int %x_104
-        %203 = OpLoad %int %x_101
-        %204 = OpIAdd %int %202 %int_1
-        %205 = OpSLessThan %bool %204 %203
-               OpSelectionMerge %206 None
-               OpBranchConditional %205 %207 %206
-        %207 = OpLabel
-        %208 = OpLoad %int %x_102
-        %209 = OpIAdd %int %208 %int_1
-               OpStore %x_102 %209
-        %210 = OpLoad %int %x_104
-        %211 = OpAccessChain %_ptr_Function_int %x_103 %209
-        %212 = OpIAdd %int %210 %int_1
-               OpStore %211 %212
-        %213 = OpLoad %int %x_102
-        %214 = OpIAdd %int %213 %int_1
-               OpStore %x_102 %214
-        %215 = OpLoad %int %x_101
-        %216 = OpAccessChain %_ptr_Function_int %x_103 %214
-               OpStore %216 %215
-               OpBranch %206
-        %206 = OpLabel
-               OpBranch %112
-        %112 = OpLabel
-               OpBranch %110
-        %111 = OpLabel
-        %217 = OpLoad %v4float %x_GLF_FragCoord
-        %219 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %220 = OpLoad %v2float %219
-        %221 = OpCompositeExtract %float %217 0
-        %222 = OpCompositeExtract %float %217 1
-        %223 = OpCompositeConstruct %v2float %221 %222
-        %224 = OpFDiv %v2float %223 %220
-               OpStore %uv %224
-               OpStore %color %227
-        %228 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %229 = OpLoad %int %228
-        %231 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %232 = OpLoad %float %231
-        %233 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %234 = OpConvertSToF %float %229
-        %235 = OpFAdd %float %232 %234
-               OpStore %233 %235
-        %236 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %237 = OpLoad %float %236
-        %239 = OpFOrdGreaterThan %bool %237 %float_0_25
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %240
-        %241 = OpLabel
-        %242 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %243 = OpLoad %int %242
-        %244 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %245 = OpLoad %float %244
-        %246 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %247 = OpConvertSToF %float %243
-        %248 = OpFAdd %float %245 %247
-               OpStore %246 %248
-               OpBranch %240
-        %240 = OpLabel
-        %249 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %250 = OpLoad %float %249
-        %252 = OpFOrdGreaterThan %bool %250 %float_0_5
-               OpSelectionMerge %253 None
-               OpBranchConditional %252 %254 %253
-        %254 = OpLabel
-        %256 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %257 = OpLoad %int %256
-        %259 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %260 = OpLoad %float %259
-        %261 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %262 = OpConvertSToF %float %257
-        %263 = OpFAdd %float %260 %262
-               OpStore %261 %263
-               OpBranch %253
-        %253 = OpLabel
-        %264 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %265 = OpLoad %float %264
-        %267 = OpFOrdGreaterThan %bool %265 %float_0_75
-               OpSelectionMerge %268 None
-               OpBranchConditional %267 %269 %268
-        %269 = OpLabel
-        %271 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %272 = OpLoad %int %271
-        %274 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %275 = OpLoad %float %274
-        %276 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %277 = OpConvertSToF %float %272
-        %278 = OpFAdd %float %275 %277
-               OpStore %276 %278
-               OpBranch %268
-        %268 = OpLabel
-        %280 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %281 = OpLoad %int %280
-        %282 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %283 = OpLoad %float %282
-        %284 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %285 = OpConvertSToF %float %281
-        %286 = OpFAdd %float %283 %285
-               OpStore %284 %286
-        %287 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %288 = OpLoad %float %287
-        %289 = OpFOrdGreaterThan %bool %288 %float_0_25
-               OpSelectionMerge %290 None
-               OpBranchConditional %289 %291 %290
-        %291 = OpLabel
-        %293 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %294 = OpLoad %int %293
-        %295 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %296 = OpLoad %float %295
-        %297 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %298 = OpConvertSToF %float %294
-        %299 = OpFAdd %float %296 %298
-               OpStore %297 %299
-               OpBranch %290
-        %290 = OpLabel
-        %300 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %301 = OpLoad %float %300
-        %302 = OpFOrdGreaterThan %bool %301 %float_0_5
-               OpSelectionMerge %303 None
-               OpBranchConditional %302 %304 %303
-        %304 = OpLabel
-        %306 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %307 = OpLoad %int %306
-        %308 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %309 = OpLoad %float %308
-        %310 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %311 = OpConvertSToF %float %307
-        %312 = OpFAdd %float %309 %311
-               OpStore %310 %312
-               OpBranch %303
-        %303 = OpLabel
-        %313 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %314 = OpLoad %float %313
-        %315 = OpFOrdGreaterThan %bool %314 %float_0_75
-               OpSelectionMerge %316 None
-               OpBranchConditional %315 %317 %316
-        %317 = OpLabel
-        %319 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %320 = OpLoad %int %319
-        %321 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %322 = OpLoad %float %321
-        %323 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %324 = OpConvertSToF %float %320
-        %325 = OpFAdd %float %322 %324
-               OpStore %323 %325
-               OpBranch %316
-        %316 = OpLabel
-        %327 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %328 = OpLoad %int %327
-        %329 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %330 = OpLoad %float %329
-        %331 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %332 = OpConvertSToF %float %328
-        %333 = OpFAdd %float %330 %332
-               OpStore %331 %333
-        %334 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %335 = OpLoad %float %334
-        %336 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %337 = OpLoad %float %336
-        %340 = OpFSub %float %335 %337
-        %338 = OpExtInst %float %339 FAbs %340
-        %341 = OpFOrdLessThan %bool %338 %float_0_25
-               OpSelectionMerge %342 None
-               OpBranchConditional %341 %343 %342
-        %343 = OpLabel
-        %344 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %345 = OpLoad %int %344
-        %346 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %347 = OpLoad %float %346
-        %348 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %349 = OpConvertSToF %float %345
-        %350 = OpFAdd %float %347 %349
-               OpStore %348 %350
-               OpBranch %342
-        %342 = OpLabel
-        %351 = OpLoad %v3float %color
-        %352 = OpExtInst %v3float %339 Normalize %351
-        %353 = OpCompositeExtract %float %352 0
-        %354 = OpCompositeExtract %float %352 1
-        %355 = OpCompositeExtract %float %352 2
-        %356 = OpCompositeConstruct %v4float %353 %354 %355 %float_1
-               OpStore %frag_color %356
-        %357 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %357
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %358
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %362 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %363 = OpFunctionCall %void %main_1
-        %364 = OpLoad %v4float %frag_color
-        %365 = OpLoad %v4float %gl_Position
-        %366 = OpCompositeConstruct %main_out %364 %365
-               OpReturnValue %366
-               OpFunctionEnd
-       %main = OpFunction %void None %29
-        %368 = OpLabel
-        %370 = OpLoad %v4float %x_GLF_pos_param_1
-        %369 = OpFunctionCall %main_out %main_inner %370
-        %371 = OpCompositeExtract %v4float %369 0
-               OpStore %frag_color_1_1 %371
-        %372 = OpCompositeExtract %v4float %369 1
-               OpStore %gl_Position_1 %372
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
-%swap_i1_i1_ = OpFunction %void None %373
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-        %377 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %35
-        %380 = OpLoad %int %i
-        %381 = OpAccessChain %_ptr_Private_int %obj %uint_0 %380
-        %382 = OpLoad %int %381
-               OpStore %temp %382
-        %384 = OpLoad %int %i
-        %386 = OpLoad %int %j
-        %387 = OpAccessChain %_ptr_Private_int %obj %uint_0 %386
-        %388 = OpLoad %int %387
-        %389 = OpAccessChain %_ptr_Private_int %obj %uint_0 %384
-               OpStore %389 %388
-        %391 = OpLoad %int %j
-        %392 = OpLoad %int %temp
-        %393 = OpAccessChain %_ptr_Private_int %obj %uint_0 %391
-               OpStore %393 %392
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %394
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-        %398 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %35
-        %i_1 = OpVariable %_ptr_Function_int Function %35
-        %j_1 = OpVariable %_ptr_Function_int Function %35
-      %param = OpVariable %_ptr_Function_int Function %35
-    %param_1 = OpVariable %_ptr_Function_int Function %35
-    %param_2 = OpVariable %_ptr_Function_int Function %35
-    %param_3 = OpVariable %_ptr_Function_int Function %35
-        %407 = OpLoad %int %h
-        %408 = OpAccessChain %_ptr_Private_int %obj %uint_0 %407
-        %409 = OpLoad %int %408
-               OpStore %pivot %409
-        %411 = OpLoad %int %l
-        %412 = OpISub %int %411 %int_1
-               OpStore %i_1 %412
-        %414 = OpLoad %int %l
-               OpStore %j_1 %414
-               OpBranch %415
-        %415 = OpLabel
-               OpLoopMerge %416 %417 None
-               OpBranch %418
-        %418 = OpLabel
-        %419 = OpLoad %int %j_1
-        %421 = OpLoad %int %h
-        %422 = OpISub %int %421 %int_1
-        %423 = OpSLessThanEqual %bool %419 %422
-               OpSelectionMerge %424 None
-               OpBranchConditional %423 %425 %426
-        %425 = OpLabel
-               OpBranch %424
-        %426 = OpLabel
-               OpBranch %416
-        %424 = OpLabel
-        %427 = OpLoad %int %j_1
-        %428 = OpAccessChain %_ptr_Private_int %obj %uint_0 %427
-        %429 = OpLoad %int %428
-        %430 = OpLoad %int %pivot
-        %431 = OpSLessThanEqual %bool %429 %430
-               OpSelectionMerge %432 None
-               OpBranchConditional %431 %433 %432
-        %433 = OpLabel
-        %434 = OpLoad %int %i_1
-        %435 = OpIAdd %int %434 %int_1
-               OpStore %i_1 %435
-        %436 = OpLoad %int %i_1
-               OpStore %param %436
-        %437 = OpLoad %int %j_1
-               OpStore %param_1 %437
-        %438 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %432
-        %432 = OpLabel
-               OpBranch %417
-        %417 = OpLabel
-        %441 = OpLoad %int %j_1
-        %442 = OpIAdd %int %441 %int_1
-               OpStore %j_1 %442
-               OpBranch %415
-        %416 = OpLabel
-        %443 = OpLoad %int %i_1
-        %444 = OpIAdd %int %443 %int_1
-               OpStore %param_2 %444
-        %446 = OpLoad %int %h
-               OpStore %param_3 %446
-        %447 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %450 = OpLoad %int %i_1
-        %451 = OpIAdd %int %450 %int_1
-               OpReturnValue %451
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %29
-        %453 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %35
-        %h_1 = OpVariable %_ptr_Function_int Function %35
-        %top = OpVariable %_ptr_Function_int Function %35
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %50
-          %p = OpVariable %_ptr_Function_int Function %35
-    %param_4 = OpVariable %_ptr_Function_int Function %35
-    %param_5 = OpVariable %_ptr_Function_int Function %35
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %461 = OpLoad %int %top
-        %462 = OpIAdd %int %461 %int_1
-               OpStore %top %462
-        %463 = OpLoad %int %l_1
-        %464 = OpAccessChain %_ptr_Function_int %stack %462
-               OpStore %464 %463
-        %465 = OpLoad %int %top
-        %466 = OpIAdd %int %465 %int_1
-               OpStore %top %466
-        %467 = OpLoad %int %h_1
-        %468 = OpAccessChain %_ptr_Function_int %stack %466
-               OpStore %468 %467
-               OpBranch %469
-        %469 = OpLabel
-               OpLoopMerge %470 %471 None
-               OpBranch %472
-        %472 = OpLabel
-        %473 = OpLoad %int %top
-        %474 = OpSGreaterThanEqual %bool %473 %int_0
-               OpSelectionMerge %475 None
-               OpBranchConditional %474 %476 %477
-        %476 = OpLabel
-               OpBranch %475
-        %477 = OpLabel
-               OpBranch %470
-        %475 = OpLabel
-        %478 = OpLoad %int %top
-        %479 = OpISub %int %478 %int_1
-               OpStore %top %479
-        %480 = OpAccessChain %_ptr_Function_int %stack %478
-        %481 = OpLoad %int %480
-               OpStore %h_1 %481
-        %482 = OpLoad %int %top
-        %483 = OpISub %int %482 %int_1
-               OpStore %top %483
-        %484 = OpAccessChain %_ptr_Function_int %stack %482
-        %485 = OpLoad %int %484
-               OpStore %l_1 %485
-        %486 = OpLoad %int %l_1
-               OpStore %param_4 %486
-        %487 = OpLoad %int %h_1
-               OpStore %param_5 %487
-        %488 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %488
-        %491 = OpLoad %int %p
-        %492 = OpLoad %int %l_1
-        %493 = OpISub %int %491 %int_1
-        %494 = OpSGreaterThan %bool %493 %492
-               OpSelectionMerge %495 None
-               OpBranchConditional %494 %496 %495
-        %496 = OpLabel
-        %497 = OpLoad %int %top
-        %498 = OpIAdd %int %497 %int_1
-               OpStore %top %498
-        %499 = OpLoad %int %l_1
-        %500 = OpAccessChain %_ptr_Function_int %stack %498
-               OpStore %500 %499
-        %501 = OpLoad %int %top
-        %502 = OpIAdd %int %501 %int_1
-               OpStore %top %502
-        %503 = OpLoad %int %p
-        %504 = OpAccessChain %_ptr_Function_int %stack %502
-        %505 = OpISub %int %503 %int_1
-               OpStore %504 %505
-               OpBranch %495
-        %495 = OpLabel
-        %506 = OpLoad %int %p
-        %507 = OpLoad %int %h_1
-        %508 = OpIAdd %int %506 %int_1
-        %509 = OpSLessThan %bool %508 %507
-               OpSelectionMerge %510 None
-               OpBranchConditional %509 %511 %510
-        %511 = OpLabel
-        %512 = OpLoad %int %top
-        %513 = OpIAdd %int %512 %int_1
-               OpStore %top %513
-        %514 = OpLoad %int %p
-        %515 = OpAccessChain %_ptr_Function_int %stack %513
-        %516 = OpIAdd %int %514 %int_1
-               OpStore %515 %516
-        %517 = OpLoad %int %top
-        %518 = OpIAdd %int %517 %int_1
-               OpStore %top %518
-        %519 = OpLoad %int %h_1
-        %520 = OpAccessChain %_ptr_Function_int %stack %518
-               OpStore %520 %519
-               OpBranch %510
-        %510 = OpLabel
-               OpBranch %471
-        %471 = OpLabel
-               OpBranch %469
-        %470 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.wgsl
deleted file mode 100644
index dcc0835..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,399 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  var x_90 : i32;
-  var x_91 : i32;
-  var x_92 : i32;
-  var x_93 : i32;
-  var x_94 : i32;
-  var x_95 : i32;
-  var x_96 : i32;
-  var x_97 : i32;
-  var x_98 : i32;
-  var x_99 : i32;
-  var x_100 : i32;
-  var x_101 : i32;
-  var x_102 : i32;
-  var x_103 : array<i32, 10>;
-  var x_104 : i32;
-  var x_105 : i32;
-  var x_106 : i32;
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_107 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_107 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_114 : i32 = i_2;
-    if ((x_114 < 10)) {
-    } else {
-      break;
-    }
-    let x_117 : i32 = i_2;
-    let x_118 : i32 = i_2;
-    obj.numbers[x_117] = (10 - x_118);
-    let x_121 : i32 = i_2;
-    let x_122 : i32 = i_2;
-    let x_124 : i32 = obj.numbers[x_122];
-    let x_125 : i32 = i_2;
-    let x_127 : i32 = obj.numbers[x_125];
-    obj.numbers[x_121] = (x_124 * x_127);
-
-    continuing {
-      let x_130 : i32 = i_2;
-      i_2 = (x_130 + 1);
-    }
-  }
-  x_100 = 0;
-  x_101 = 9;
-  x_102 = -1;
-  let x_132 : i32 = x_102;
-  let x_133 : i32 = (x_132 + 1);
-  x_102 = x_133;
-  let x_134 : i32 = x_100;
-  x_103[x_133] = x_134;
-  let x_136 : i32 = x_102;
-  let x_137 : i32 = (x_136 + 1);
-  x_102 = x_137;
-  let x_138 : i32 = x_101;
-  x_103[x_137] = x_138;
-  loop {
-    let x_144 : i32 = x_102;
-    if ((x_144 >= 0)) {
-    } else {
-      break;
-    }
-    let x_147 : i32 = x_102;
-    x_102 = (x_147 - 1);
-    let x_150 : i32 = x_103[x_147];
-    x_101 = x_150;
-    let x_151 : i32 = x_102;
-    x_102 = (x_151 - 1);
-    let x_154 : i32 = x_103[x_151];
-    x_100 = x_154;
-    let x_155 : i32 = x_100;
-    x_105 = x_155;
-    let x_156 : i32 = x_101;
-    x_106 = x_156;
-    let x_157 : i32 = x_106;
-    let x_159 : i32 = obj.numbers[x_157];
-    x_92 = x_159;
-    let x_160 : i32 = x_105;
-    x_93 = (x_160 - 1);
-    let x_162 : i32 = x_105;
-    x_94 = x_162;
-    loop {
-      let x_167 : i32 = x_94;
-      let x_168 : i32 = x_106;
-      if ((x_167 <= (x_168 - 1))) {
-      } else {
-        break;
-      }
-      let x_172 : i32 = x_94;
-      let x_174 : i32 = obj.numbers[x_172];
-      let x_175 : i32 = x_92;
-      if ((x_174 <= x_175)) {
-        let x_179 : i32 = x_93;
-        x_93 = (x_179 + 1);
-        let x_181 : i32 = x_93;
-        x_95 = x_181;
-        let x_182 : i32 = x_94;
-        x_96 = x_182;
-        let x_183 : i32 = x_95;
-        let x_185 : i32 = obj.numbers[x_183];
-        x_91 = x_185;
-        let x_186 : i32 = x_95;
-        let x_187 : i32 = x_96;
-        let x_189 : i32 = obj.numbers[x_187];
-        obj.numbers[x_186] = x_189;
-        let x_191 : i32 = x_96;
-        let x_192 : i32 = x_91;
-        obj.numbers[x_191] = x_192;
-      }
-
-      continuing {
-        let x_194 : i32 = x_94;
-        x_94 = (x_194 + 1);
-      }
-    }
-    let x_196 : i32 = x_93;
-    x_97 = (x_196 + 1);
-    let x_198 : i32 = x_106;
-    x_98 = x_198;
-    let x_199 : i32 = x_97;
-    let x_201 : i32 = obj.numbers[x_199];
-    x_90 = x_201;
-    let x_202 : i32 = x_97;
-    let x_203 : i32 = x_98;
-    let x_205 : i32 = obj.numbers[x_203];
-    obj.numbers[x_202] = x_205;
-    let x_207 : i32 = x_98;
-    let x_208 : i32 = x_90;
-    obj.numbers[x_207] = x_208;
-    let x_210 : i32 = x_93;
-    x_99 = (x_210 + 1);
-    let x_212 : i32 = x_99;
-    x_104 = x_212;
-    let x_213 : i32 = x_104;
-    let x_215 : i32 = x_100;
-    if (((x_213 - 1) > x_215)) {
-      let x_219 : i32 = x_102;
-      let x_220 : i32 = (x_219 + 1);
-      x_102 = x_220;
-      let x_221 : i32 = x_100;
-      x_103[x_220] = x_221;
-      let x_223 : i32 = x_102;
-      let x_224 : i32 = (x_223 + 1);
-      x_102 = x_224;
-      let x_225 : i32 = x_104;
-      x_103[x_224] = (x_225 - 1);
-    }
-    let x_228 : i32 = x_104;
-    let x_230 : i32 = x_101;
-    if (((x_228 + 1) < x_230)) {
-      let x_234 : i32 = x_102;
-      let x_235 : i32 = (x_234 + 1);
-      x_102 = x_235;
-      let x_236 : i32 = x_104;
-      x_103[x_235] = (x_236 + 1);
-      let x_239 : i32 = x_102;
-      let x_240 : i32 = (x_239 + 1);
-      x_102 = x_240;
-      let x_241 : i32 = x_101;
-      x_103[x_240] = x_241;
-    }
-  }
-  let x_243 : vec4<f32> = x_GLF_FragCoord;
-  let x_246 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_243.x, x_243.y) / x_246);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_249 : i32 = obj.numbers[0];
-  let x_252 : f32 = color.x;
-  color.x = (x_252 + f32(x_249));
-  let x_256 : f32 = uv.x;
-  if ((x_256 > 0.25)) {
-    let x_261 : i32 = obj.numbers[1];
-    let x_264 : f32 = color.x;
-    color.x = (x_264 + f32(x_261));
-  }
-  let x_268 : f32 = uv.x;
-  if ((x_268 > 0.5)) {
-    let x_273 : i32 = obj.numbers[2];
-    let x_276 : f32 = color.y;
-    color.y = (x_276 + f32(x_273));
-  }
-  let x_280 : f32 = uv.x;
-  if ((x_280 > 0.75)) {
-    let x_285 : i32 = obj.numbers[3];
-    let x_288 : f32 = color.z;
-    color.z = (x_288 + f32(x_285));
-  }
-  let x_292 : i32 = obj.numbers[4];
-  let x_295 : f32 = color.y;
-  color.y = (x_295 + f32(x_292));
-  let x_299 : f32 = uv.y;
-  if ((x_299 > 0.25)) {
-    let x_304 : i32 = obj.numbers[5];
-    let x_307 : f32 = color.x;
-    color.x = (x_307 + f32(x_304));
-  }
-  let x_311 : f32 = uv.y;
-  if ((x_311 > 0.5)) {
-    let x_316 : i32 = obj.numbers[6];
-    let x_319 : f32 = color.y;
-    color.y = (x_319 + f32(x_316));
-  }
-  let x_323 : f32 = uv.y;
-  if ((x_323 > 0.75)) {
-    let x_328 : i32 = obj.numbers[7];
-    let x_331 : f32 = color.z;
-    color.z = (x_331 + f32(x_328));
-  }
-  let x_335 : i32 = obj.numbers[8];
-  let x_338 : f32 = color.z;
-  color.z = (x_338 + f32(x_335));
-  let x_342 : f32 = uv.x;
-  let x_344 : f32 = uv.y;
-  if ((abs((x_342 - x_344)) < 0.25)) {
-    let x_351 : i32 = obj.numbers[9];
-    let x_354 : f32 = color.x;
-    color.x = (x_354 + f32(x_351));
-  }
-  let x_357 : vec3<f32> = color;
-  let x_358 : vec3<f32> = normalize(x_357);
-  frag_color = vec4<f32>(x_358.x, x_358.y, x_358.z, 1.0);
-  let x_363 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_363;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_366 : i32 = *(i);
-  let x_368 : i32 = obj.numbers[x_366];
-  temp = x_368;
-  let x_369 : i32 = *(i);
-  let x_370 : i32 = *(j);
-  let x_372 : i32 = obj.numbers[x_370];
-  obj.numbers[x_369] = x_372;
-  let x_374 : i32 = *(j);
-  let x_375 : i32 = temp;
-  obj.numbers[x_374] = x_375;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_378 : i32 = *(h);
-  let x_380 : i32 = obj.numbers[x_378];
-  pivot = x_380;
-  let x_381 : i32 = *(l);
-  i_1 = (x_381 - 1);
-  let x_383 : i32 = *(l);
-  j_1 = x_383;
-  loop {
-    let x_388 : i32 = j_1;
-    let x_389 : i32 = *(h);
-    if ((x_388 <= (x_389 - 1))) {
-    } else {
-      break;
-    }
-    let x_393 : i32 = j_1;
-    let x_395 : i32 = obj.numbers[x_393];
-    let x_396 : i32 = pivot;
-    if ((x_395 <= x_396)) {
-      let x_400 : i32 = i_1;
-      i_1 = (x_400 + 1);
-      let x_402 : i32 = i_1;
-      param = x_402;
-      let x_403 : i32 = j_1;
-      param_1 = x_403;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_405 : i32 = j_1;
-      j_1 = (x_405 + 1);
-    }
-  }
-  let x_407 : i32 = i_1;
-  param_2 = (x_407 + 1);
-  let x_409 : i32 = *(h);
-  param_3 = x_409;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_411 : i32 = i_1;
-  return (x_411 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_414 : i32 = top;
-  let x_415 : i32 = (x_414 + 1);
-  top = x_415;
-  let x_416 : i32 = l_1;
-  stack[x_415] = x_416;
-  let x_418 : i32 = top;
-  let x_419 : i32 = (x_418 + 1);
-  top = x_419;
-  let x_420 : i32 = h_1;
-  stack[x_419] = x_420;
-  loop {
-    let x_426 : i32 = top;
-    if ((x_426 >= 0)) {
-    } else {
-      break;
-    }
-    let x_429 : i32 = top;
-    top = (x_429 - 1);
-    let x_432 : i32 = stack[x_429];
-    h_1 = x_432;
-    let x_433 : i32 = top;
-    top = (x_433 - 1);
-    let x_436 : i32 = stack[x_433];
-    l_1 = x_436;
-    let x_437 : i32 = l_1;
-    param_4 = x_437;
-    let x_438 : i32 = h_1;
-    param_5 = x_438;
-    let x_439 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_439;
-    let x_440 : i32 = p;
-    let x_442 : i32 = l_1;
-    if (((x_440 - 1) > x_442)) {
-      let x_446 : i32 = top;
-      let x_447 : i32 = (x_446 + 1);
-      top = x_447;
-      let x_448 : i32 = l_1;
-      stack[x_447] = x_448;
-      let x_450 : i32 = top;
-      let x_451 : i32 = (x_450 + 1);
-      top = x_451;
-      let x_452 : i32 = p;
-      stack[x_451] = (x_452 - 1);
-    }
-    let x_455 : i32 = p;
-    let x_457 : i32 = h_1;
-    if (((x_455 + 1) < x_457)) {
-      let x_461 : i32 = top;
-      let x_462 : i32 = (x_461 + 1);
-      top = x_462;
-      let x_463 : i32 = p;
-      stack[x_462] = (x_463 + 1);
-      let x_466 : i32 = top;
-      let x_467 : i32 = (x_466 + 1);
-      top = x_467;
-      let x_468 : i32 = h_1;
-      stack[x_467] = x_468;
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.hlsl
deleted file mode 100644
index 53c62af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,290 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int x_314 = 0;
-  int x_315 = 0;
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_316 = h;
-  const int x_318 = obj.numbers[x_316];
-  pivot = x_318;
-  const int x_319 = l;
-  i_1 = (x_319 - 1);
-  const int x_321 = l;
-  j_1 = x_321;
-  while (true) {
-    const int x_326 = j_1;
-    const int x_327 = h;
-    if ((x_326 <= (x_327 - 1))) {
-    } else {
-      break;
-    }
-    const int x_333 = obj.numbers[j_1];
-    if ((x_333 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      const int x_344 = obj.numbers[param];
-      x_315 = x_344;
-      const int x_345 = param;
-      const int x_348 = obj.numbers[param_1];
-      obj.numbers[x_345] = x_348;
-      obj.numbers[param_1] = x_315;
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_357 = h;
-  param_3 = x_357;
-  const int x_360 = obj.numbers[param_2];
-  x_314 = x_360;
-  const int x_361 = param_2;
-  const int x_364 = obj.numbers[param_3];
-  obj.numbers[x_361] = x_364;
-  obj.numbers[param_3] = x_314;
-  if (false) {
-  } else {
-    return (i_1 + 1);
-  }
-  return 0;
-}
-
-void main_1() {
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94[10] = (int[10])0;
-  int x_95 = 0;
-  int x_96 = 0;
-  int x_97 = 0;
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_112 = i_2;
-      const int x_115 = obj.numbers[i_2];
-      const int x_118 = obj.numbers[i_2];
-      obj.numbers[x_112] = (x_115 * x_118);
-    }
-  }
-  x_91 = 0;
-  x_92 = 9;
-  x_93 = -1;
-  const int x_124 = (x_93 + 1);
-  x_93 = x_124;
-  x_94[x_124] = x_91;
-  const int x_128 = (x_93 + 1);
-  x_93 = x_128;
-  x_94[x_128] = x_92;
-  while (true) {
-    if ((x_93 >= 0)) {
-    } else {
-      break;
-    }
-    const int x_138 = x_93;
-    x_93 = (x_138 - 1);
-    const int x_141 = x_94[x_138];
-    x_92 = x_141;
-    const int x_142 = x_93;
-    x_93 = (x_142 - 1);
-    const int x_145 = x_94[x_142];
-    x_91 = x_145;
-    x_96 = x_91;
-    x_97 = x_92;
-    const int x_148 = performPartition_i1_i1_(x_96, x_97);
-    x_95 = x_148;
-    if (((x_95 - 1) > x_91)) {
-      const int x_156 = (x_93 + 1);
-      x_93 = x_156;
-      x_94[x_156] = x_91;
-      const int x_160 = (x_93 + 1);
-      x_93 = x_160;
-      x_94[x_160] = (x_95 - 1);
-    }
-    if (((x_95 + 1) < x_92)) {
-      const int x_171 = (x_93 + 1);
-      x_93 = x_171;
-      x_94[x_171] = (x_95 + 1);
-      const int x_176 = (x_93 + 1);
-      x_93 = x_176;
-      x_94[x_176] = x_92;
-    }
-  }
-  const float4 x_179 = x_GLF_FragCoord;
-  const float2 x_182 = asfloat(x_34[0].xy);
-  uv = (float2(x_179.x, x_179.y) / x_182);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_185 = obj.numbers[0];
-  const float x_188 = color.x;
-  color.x = (x_188 + float(x_185));
-  const float x_192 = uv.x;
-  if ((x_192 > 0.25f)) {
-    const int x_197 = obj.numbers[1];
-    const float x_200 = color.x;
-    color.x = (x_200 + float(x_197));
-  }
-  const float x_204 = uv.x;
-  if ((x_204 > 0.5f)) {
-    const int x_209 = obj.numbers[2];
-    const float x_212 = color.y;
-    color.y = (x_212 + float(x_209));
-  }
-  const float x_216 = uv.x;
-  if ((x_216 > 0.75f)) {
-    const int x_221 = obj.numbers[3];
-    const float x_224 = color.z;
-    color.z = (x_224 + float(x_221));
-  }
-  const int x_228 = obj.numbers[4];
-  const float x_231 = color.y;
-  color.y = (x_231 + float(x_228));
-  const float x_235 = uv.y;
-  if ((x_235 > 0.25f)) {
-    const int x_240 = obj.numbers[5];
-    const float x_243 = color.x;
-    color.x = (x_243 + float(x_240));
-  }
-  const float x_247 = uv.y;
-  if ((x_247 > 0.5f)) {
-    const int x_252 = obj.numbers[6];
-    const float x_255 = color.y;
-    color.y = (x_255 + float(x_252));
-  }
-  const float x_259 = uv.y;
-  if ((x_259 > 0.75f)) {
-    const int x_264 = obj.numbers[7];
-    const float x_267 = color.z;
-    color.z = (x_267 + float(x_264));
-  }
-  const int x_271 = obj.numbers[8];
-  const float x_274 = color.z;
-  color.z = (x_274 + float(x_271));
-  const float x_278 = uv.x;
-  const float x_280 = uv.y;
-  if ((abs((x_278 - x_280)) < 0.25f)) {
-    const int x_287 = obj.numbers[9];
-    const float x_290 = color.x;
-    color.x = (x_290 + float(x_287));
-  }
-  const float3 x_294 = normalize(color);
-  frag_color = float4(x_294.x, x_294.y, x_294.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_4 = {frag_color, gl_Position};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_302 = i;
-  const int x_304 = obj.numbers[x_302];
-  temp = x_304;
-  const int x_305 = i;
-  const int x_306 = j;
-  const int x_308 = obj.numbers[x_306];
-  obj.numbers[x_305] = x_308;
-  const int x_310 = j;
-  obj.numbers[x_310] = temp;
-  return;
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_377 = (top + 1);
-  top = x_377;
-  stack[x_377] = l_1;
-  const int x_381 = (top + 1);
-  top = x_381;
-  stack[x_381] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_391 = top;
-    top = (x_391 - 1);
-    const int x_394 = stack[x_391];
-    h_1 = x_394;
-    const int x_395 = top;
-    top = (x_395 - 1);
-    const int x_398 = stack[x_395];
-    l_1 = x_398;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_401 = performPartition_i1_i1_(param_4, param_5);
-    p = x_401;
-    if (((p - 1) > l_1)) {
-      const int x_409 = (top + 1);
-      top = x_409;
-      stack[x_409] = l_1;
-      const int x_413 = (top + 1);
-      top = x_413;
-      stack[x_413] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_424 = (top + 1);
-      top = x_424;
-      stack[x_424] = (p + 1);
-      const int x_429 = (top + 1);
-      top = x_429;
-      stack[x_429] = h_1;
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.msl
deleted file mode 100644
index c2fe24a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.msl
+++ /dev/null
@@ -1,364 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_5) {
-  int x_314 = 0;
-  int x_315 = 0;
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_316 = *(h);
-  int const x_318 = (*(tint_symbol_5)).numbers.arr[x_316];
-  pivot = x_318;
-  int const x_319 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_319) - as_type<uint>(1)));
-  int const x_321 = *(l);
-  j_1 = x_321;
-  while (true) {
-    int const x_326 = j_1;
-    int const x_327 = *(h);
-    if ((x_326 <= as_type<int>((as_type<uint>(x_327) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_331 = j_1;
-    int const x_333 = (*(tint_symbol_5)).numbers.arr[x_331];
-    int const x_334 = pivot;
-    if ((x_333 <= x_334)) {
-      int const x_338 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_338) + as_type<uint>(1)));
-      int const x_340 = i_1;
-      param = x_340;
-      int const x_341 = j_1;
-      param_1 = x_341;
-      int const x_342 = param;
-      int const x_344 = (*(tint_symbol_5)).numbers.arr[x_342];
-      x_315 = x_344;
-      int const x_345 = param;
-      int const x_346 = param_1;
-      int const x_348 = (*(tint_symbol_5)).numbers.arr[x_346];
-      (*(tint_symbol_5)).numbers.arr[x_345] = x_348;
-      int const x_350 = param_1;
-      int const x_351 = x_315;
-      (*(tint_symbol_5)).numbers.arr[x_350] = x_351;
-    }
-    {
-      int const x_353 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_353) + as_type<uint>(1)));
-    }
-  }
-  int const x_355 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_355) + as_type<uint>(1)));
-  int const x_357 = *(h);
-  param_3 = x_357;
-  int const x_358 = param_2;
-  int const x_360 = (*(tint_symbol_5)).numbers.arr[x_358];
-  x_314 = x_360;
-  int const x_361 = param_2;
-  int const x_362 = param_3;
-  int const x_364 = (*(tint_symbol_5)).numbers.arr[x_362];
-  (*(tint_symbol_5)).numbers.arr[x_361] = x_364;
-  int const x_366 = param_3;
-  int const x_367 = x_314;
-  (*(tint_symbol_5)).numbers.arr[x_366] = x_367;
-  if (false) {
-  } else {
-    int const x_372 = i_1;
-    return as_type<int>((as_type<uint>(x_372) + as_type<uint>(1)));
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_34, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7, thread QuicksortObject* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  tint_array_wrapper x_94 = {};
-  int x_95 = 0;
-  int x_96 = 0;
-  int x_97 = 0;
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_98 = *(tint_symbol_6);
-  *(tint_symbol_7) = ((x_98 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_105 = i_2;
-    if ((x_105 < 10)) {
-    } else {
-      break;
-    }
-    int const x_108 = i_2;
-    int const x_109 = i_2;
-    (*(tint_symbol_8)).numbers.arr[x_108] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_109)));
-    int const x_112 = i_2;
-    int const x_113 = i_2;
-    int const x_115 = (*(tint_symbol_8)).numbers.arr[x_113];
-    int const x_116 = i_2;
-    int const x_118 = (*(tint_symbol_8)).numbers.arr[x_116];
-    (*(tint_symbol_8)).numbers.arr[x_112] = as_type<int>((as_type<uint>(x_115) * as_type<uint>(x_118)));
-    {
-      int const x_121 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
-    }
-  }
-  x_91 = 0;
-  x_92 = 9;
-  x_93 = -1;
-  int const x_123 = x_93;
-  int const x_124 = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
-  x_93 = x_124;
-  int const x_125 = x_91;
-  x_94.arr[x_124] = x_125;
-  int const x_127 = x_93;
-  int const x_128 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
-  x_93 = x_128;
-  int const x_129 = x_92;
-  x_94.arr[x_128] = x_129;
-  while (true) {
-    int const x_135 = x_93;
-    if ((x_135 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_138 = x_93;
-    x_93 = as_type<int>((as_type<uint>(x_138) - as_type<uint>(1)));
-    int const x_141 = x_94.arr[x_138];
-    x_92 = x_141;
-    int const x_142 = x_93;
-    x_93 = as_type<int>((as_type<uint>(x_142) - as_type<uint>(1)));
-    int const x_145 = x_94.arr[x_142];
-    x_91 = x_145;
-    int const x_146 = x_91;
-    x_96 = x_146;
-    int const x_147 = x_92;
-    x_97 = x_147;
-    int const x_148 = performPartition_i1_i1_(&(x_96), &(x_97), tint_symbol_8);
-    x_95 = x_148;
-    int const x_149 = x_95;
-    int const x_151 = x_91;
-    if ((as_type<int>((as_type<uint>(x_149) - as_type<uint>(1))) > x_151)) {
-      int const x_155 = x_93;
-      int const x_156 = as_type<int>((as_type<uint>(x_155) + as_type<uint>(1)));
-      x_93 = x_156;
-      int const x_157 = x_91;
-      x_94.arr[x_156] = x_157;
-      int const x_159 = x_93;
-      int const x_160 = as_type<int>((as_type<uint>(x_159) + as_type<uint>(1)));
-      x_93 = x_160;
-      int const x_161 = x_95;
-      x_94.arr[x_160] = as_type<int>((as_type<uint>(x_161) - as_type<uint>(1)));
-    }
-    int const x_164 = x_95;
-    int const x_166 = x_92;
-    if ((as_type<int>((as_type<uint>(x_164) + as_type<uint>(1))) < x_166)) {
-      int const x_170 = x_93;
-      int const x_171 = as_type<int>((as_type<uint>(x_170) + as_type<uint>(1)));
-      x_93 = x_171;
-      int const x_172 = x_95;
-      x_94.arr[x_171] = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
-      int const x_175 = x_93;
-      int const x_176 = as_type<int>((as_type<uint>(x_175) + as_type<uint>(1)));
-      x_93 = x_176;
-      int const x_177 = x_92;
-      x_94.arr[x_176] = x_177;
-    }
-  }
-  float4 const x_179 = *(tint_symbol_7);
-  float2 const x_182 = x_34.resolution;
-  uv = (float2(x_179.x, x_179.y) / x_182);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_185 = (*(tint_symbol_8)).numbers.arr[0];
-  float const x_188 = color.x;
-  color.x = (x_188 + float(x_185));
-  float const x_192 = uv.x;
-  if ((x_192 > 0.25f)) {
-    int const x_197 = (*(tint_symbol_8)).numbers.arr[1];
-    float const x_200 = color.x;
-    color.x = (x_200 + float(x_197));
-  }
-  float const x_204 = uv.x;
-  if ((x_204 > 0.5f)) {
-    int const x_209 = (*(tint_symbol_8)).numbers.arr[2];
-    float const x_212 = color.y;
-    color.y = (x_212 + float(x_209));
-  }
-  float const x_216 = uv.x;
-  if ((x_216 > 0.75f)) {
-    int const x_221 = (*(tint_symbol_8)).numbers.arr[3];
-    float const x_224 = color.z;
-    color.z = (x_224 + float(x_221));
-  }
-  int const x_228 = (*(tint_symbol_8)).numbers.arr[4];
-  float const x_231 = color.y;
-  color.y = (x_231 + float(x_228));
-  float const x_235 = uv.y;
-  if ((x_235 > 0.25f)) {
-    int const x_240 = (*(tint_symbol_8)).numbers.arr[5];
-    float const x_243 = color.x;
-    color.x = (x_243 + float(x_240));
-  }
-  float const x_247 = uv.y;
-  if ((x_247 > 0.5f)) {
-    int const x_252 = (*(tint_symbol_8)).numbers.arr[6];
-    float const x_255 = color.y;
-    color.y = (x_255 + float(x_252));
-  }
-  float const x_259 = uv.y;
-  if ((x_259 > 0.75f)) {
-    int const x_264 = (*(tint_symbol_8)).numbers.arr[7];
-    float const x_267 = color.z;
-    color.z = (x_267 + float(x_264));
-  }
-  int const x_271 = (*(tint_symbol_8)).numbers.arr[8];
-  float const x_274 = color.z;
-  color.z = (x_274 + float(x_271));
-  float const x_278 = uv.x;
-  float const x_280 = uv.y;
-  if ((fabs((x_278 - x_280)) < 0.25f)) {
-    int const x_287 = (*(tint_symbol_8)).numbers.arr[9];
-    float const x_290 = color.x;
-    color.x = (x_290 + float(x_287));
-  }
-  float3 const x_293 = color;
-  float3 const x_294 = normalize(x_293);
-  *(tint_symbol_9) = float4(x_294.x, x_294.y, x_294.z, 1.0f);
-  float4 const x_299 = *(tint_symbol_6);
-  *(tint_symbol_10) = x_299;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 x_GLF_pos_param, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12, thread QuicksortObject* const tint_symbol_13, thread float4* const tint_symbol_14, thread float4* const tint_symbol_15) {
-  *(tint_symbol_11) = x_GLF_pos_param;
-  main_1(x_34, tint_symbol_11, tint_symbol_12, tint_symbol_13, tint_symbol_14, tint_symbol_15);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_14), .gl_Position=*(tint_symbol_15)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_16 = 0.0f;
-  thread float4 tint_symbol_17 = 0.0f;
-  thread QuicksortObject tint_symbol_18 = {};
-  thread float4 tint_symbol_19 = 0.0f;
-  thread float4 tint_symbol_20 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_21) {
-  int temp = 0;
-  int const x_302 = *(i);
-  int const x_304 = (*(tint_symbol_21)).numbers.arr[x_302];
-  temp = x_304;
-  int const x_305 = *(i);
-  int const x_306 = *(j);
-  int const x_308 = (*(tint_symbol_21)).numbers.arr[x_306];
-  (*(tint_symbol_21)).numbers.arr[x_305] = x_308;
-  int const x_310 = *(j);
-  int const x_311 = temp;
-  (*(tint_symbol_21)).numbers.arr[x_310] = x_311;
-  return;
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_22) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_376 = top;
-  int const x_377 = as_type<int>((as_type<uint>(x_376) + as_type<uint>(1)));
-  top = x_377;
-  int const x_378 = l_1;
-  stack.arr[x_377] = x_378;
-  int const x_380 = top;
-  int const x_381 = as_type<int>((as_type<uint>(x_380) + as_type<uint>(1)));
-  top = x_381;
-  int const x_382 = h_1;
-  stack.arr[x_381] = x_382;
-  while (true) {
-    int const x_388 = top;
-    if ((x_388 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_391 = top;
-    top = as_type<int>((as_type<uint>(x_391) - as_type<uint>(1)));
-    int const x_394 = stack.arr[x_391];
-    h_1 = x_394;
-    int const x_395 = top;
-    top = as_type<int>((as_type<uint>(x_395) - as_type<uint>(1)));
-    int const x_398 = stack.arr[x_395];
-    l_1 = x_398;
-    int const x_399 = l_1;
-    param_4 = x_399;
-    int const x_400 = h_1;
-    param_5 = x_400;
-    int const x_401 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_22);
-    p = x_401;
-    int const x_402 = p;
-    int const x_404 = l_1;
-    if ((as_type<int>((as_type<uint>(x_402) - as_type<uint>(1))) > x_404)) {
-      int const x_408 = top;
-      int const x_409 = as_type<int>((as_type<uint>(x_408) + as_type<uint>(1)));
-      top = x_409;
-      int const x_410 = l_1;
-      stack.arr[x_409] = x_410;
-      int const x_412 = top;
-      int const x_413 = as_type<int>((as_type<uint>(x_412) + as_type<uint>(1)));
-      top = x_413;
-      int const x_414 = p;
-      stack.arr[x_413] = as_type<int>((as_type<uint>(x_414) - as_type<uint>(1)));
-    }
-    int const x_417 = p;
-    int const x_419 = h_1;
-    if ((as_type<int>((as_type<uint>(x_417) + as_type<uint>(1))) < x_419)) {
-      int const x_423 = top;
-      int const x_424 = as_type<int>((as_type<uint>(x_423) + as_type<uint>(1)));
-      top = x_424;
-      int const x_425 = p;
-      stack.arr[x_424] = as_type<int>((as_type<uint>(x_425) + as_type<uint>(1)));
-      int const x_428 = top;
-      int const x_429 = as_type<int>((as_type<uint>(x_428) + as_type<uint>(1)));
-      top = x_429;
-      int const x_430 = h_1;
-      stack.arr[x_429] = x_430;
-    }
-  }
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.spvasm
deleted file mode 100644
index d044f62..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.spvasm
+++ /dev/null
@@ -1,713 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 478
-; Schema: 0
-               OpCapability Shader
-        %354 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %x_314 "x_314"
-               OpName %x_315 "x_315"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %main_1 "main_1"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %x_95 "x_95"
-               OpName %x_96 "x_96"
-               OpName %x_97 "x_97"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-         %36 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-        %116 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %125 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %132 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %136 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %140 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-        %143 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-     %int_10 = OpConstant %int 10
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %242 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %373 = OpTypeFunction %main_out %v4float
-        %388 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-%performPartition_i1_i1_ = OpFunction %int None %29
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %34 = OpLabel
-      %x_314 = OpVariable %_ptr_Function_int Function %36
-      %x_315 = OpVariable %_ptr_Function_int Function %36
-      %pivot = OpVariable %_ptr_Function_int Function %36
-        %i_1 = OpVariable %_ptr_Function_int Function %36
-        %j_1 = OpVariable %_ptr_Function_int Function %36
-      %param = OpVariable %_ptr_Function_int Function %36
-    %param_1 = OpVariable %_ptr_Function_int Function %36
-    %param_2 = OpVariable %_ptr_Function_int Function %36
-    %param_3 = OpVariable %_ptr_Function_int Function %36
-         %46 = OpLoad %int %h
-         %49 = OpAccessChain %_ptr_Private_int %obj %uint_0 %46
-         %50 = OpLoad %int %49
-               OpStore %pivot %50
-         %52 = OpLoad %int %l
-         %54 = OpISub %int %52 %int_1
-               OpStore %i_1 %54
-         %56 = OpLoad %int %l
-               OpStore %j_1 %56
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %j_1
-         %63 = OpLoad %int %h
-         %64 = OpISub %int %63 %int_1
-         %65 = OpSLessThanEqual %bool %61 %64
-               OpSelectionMerge %67 None
-               OpBranchConditional %65 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %58
-         %67 = OpLabel
-         %70 = OpLoad %int %j_1
-         %71 = OpAccessChain %_ptr_Private_int %obj %uint_0 %70
-         %72 = OpLoad %int %71
-         %73 = OpLoad %int %pivot
-         %74 = OpSLessThanEqual %bool %72 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-         %77 = OpLoad %int %i_1
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %i_1 %78
-         %79 = OpLoad %int %i_1
-               OpStore %param %79
-         %80 = OpLoad %int %j_1
-               OpStore %param_1 %80
-         %81 = OpLoad %int %param
-         %82 = OpAccessChain %_ptr_Private_int %obj %uint_0 %81
-         %83 = OpLoad %int %82
-               OpStore %x_315 %83
-         %84 = OpLoad %int %param
-         %85 = OpLoad %int %param_1
-         %86 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Private_int %obj %uint_0 %84
-               OpStore %88 %87
-         %89 = OpLoad %int %param_1
-         %90 = OpLoad %int %x_315
-         %91 = OpAccessChain %_ptr_Private_int %obj %uint_0 %89
-               OpStore %91 %90
-               OpBranch %75
-         %75 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-         %92 = OpLoad %int %j_1
-         %93 = OpIAdd %int %92 %int_1
-               OpStore %j_1 %93
-               OpBranch %57
-         %58 = OpLabel
-         %94 = OpLoad %int %i_1
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %param_2 %95
-         %97 = OpLoad %int %h
-               OpStore %param_3 %97
-         %98 = OpLoad %int %param_2
-         %99 = OpAccessChain %_ptr_Private_int %obj %uint_0 %98
-        %100 = OpLoad %int %99
-               OpStore %x_314 %100
-        %101 = OpLoad %int %param_2
-        %102 = OpLoad %int %param_3
-        %103 = OpAccessChain %_ptr_Private_int %obj %uint_0 %102
-        %104 = OpLoad %int %103
-        %105 = OpAccessChain %_ptr_Private_int %obj %uint_0 %101
-               OpStore %105 %104
-        %106 = OpLoad %int %param_3
-        %107 = OpLoad %int %x_314
-        %108 = OpAccessChain %_ptr_Private_int %obj %uint_0 %106
-               OpStore %108 %107
-               OpSelectionMerge %110 None
-               OpBranchConditional %false %111 %112
-        %111 = OpLabel
-               OpBranch %110
-        %112 = OpLabel
-        %113 = OpLoad %int %i_1
-        %114 = OpIAdd %int %113 %int_1
-               OpReturnValue %114
-        %110 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %116
-        %119 = OpLabel
-       %x_91 = OpVariable %_ptr_Function_int Function %36
-       %x_92 = OpVariable %_ptr_Function_int Function %36
-       %x_93 = OpVariable %_ptr_Function_int Function %36
-       %x_94 = OpVariable %_ptr_Function__arr_int_uint_10 Function %125
-       %x_95 = OpVariable %_ptr_Function_int Function %36
-       %x_96 = OpVariable %_ptr_Function_int Function %36
-       %x_97 = OpVariable %_ptr_Function_int Function %36
-        %i_2 = OpVariable %_ptr_Function_int Function %36
-         %uv = OpVariable %_ptr_Function_v2float Function %132
-      %color = OpVariable %_ptr_Function_v3float Function %136
-        %137 = OpLoad %v4float %x_GLF_pos
-        %141 = OpFAdd %v4float %137 %140
-        %144 = OpFMul %v4float %141 %143
-               OpStore %x_GLF_FragCoord %144
-               OpStore %i_2 %int_0
-               OpBranch %145
-        %145 = OpLabel
-               OpLoopMerge %146 %147 None
-               OpBranch %148
-        %148 = OpLabel
-        %149 = OpLoad %int %i_2
-        %151 = OpSLessThan %bool %149 %int_10
-               OpSelectionMerge %152 None
-               OpBranchConditional %151 %153 %154
-        %153 = OpLabel
-               OpBranch %152
-        %154 = OpLabel
-               OpBranch %146
-        %152 = OpLabel
-        %155 = OpLoad %int %i_2
-        %156 = OpLoad %int %i_2
-        %157 = OpAccessChain %_ptr_Private_int %obj %uint_0 %155
-        %158 = OpISub %int %int_10 %156
-               OpStore %157 %158
-        %159 = OpLoad %int %i_2
-        %160 = OpLoad %int %i_2
-        %161 = OpAccessChain %_ptr_Private_int %obj %uint_0 %160
-        %162 = OpLoad %int %161
-        %163 = OpLoad %int %i_2
-        %164 = OpAccessChain %_ptr_Private_int %obj %uint_0 %163
-        %165 = OpLoad %int %164
-        %166 = OpAccessChain %_ptr_Private_int %obj %uint_0 %159
-        %167 = OpIMul %int %162 %165
-               OpStore %166 %167
-               OpBranch %147
-        %147 = OpLabel
-        %168 = OpLoad %int %i_2
-        %169 = OpIAdd %int %168 %int_1
-               OpStore %i_2 %169
-               OpBranch %145
-        %146 = OpLabel
-               OpStore %x_91 %int_0
-               OpStore %x_92 %int_9
-               OpStore %x_93 %int_n1
-        %172 = OpLoad %int %x_93
-        %173 = OpIAdd %int %172 %int_1
-               OpStore %x_93 %173
-        %174 = OpLoad %int %x_91
-        %175 = OpAccessChain %_ptr_Function_int %x_94 %173
-               OpStore %175 %174
-        %176 = OpLoad %int %x_93
-        %177 = OpIAdd %int %176 %int_1
-               OpStore %x_93 %177
-        %178 = OpLoad %int %x_92
-        %179 = OpAccessChain %_ptr_Function_int %x_94 %177
-               OpStore %179 %178
-               OpBranch %180
-        %180 = OpLabel
-               OpLoopMerge %181 %182 None
-               OpBranch %183
-        %183 = OpLabel
-        %184 = OpLoad %int %x_93
-        %185 = OpSGreaterThanEqual %bool %184 %int_0
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-               OpBranch %186
-        %188 = OpLabel
-               OpBranch %181
-        %186 = OpLabel
-        %189 = OpLoad %int %x_93
-        %190 = OpISub %int %189 %int_1
-               OpStore %x_93 %190
-        %191 = OpAccessChain %_ptr_Function_int %x_94 %189
-        %192 = OpLoad %int %191
-               OpStore %x_92 %192
-        %193 = OpLoad %int %x_93
-        %194 = OpISub %int %193 %int_1
-               OpStore %x_93 %194
-        %195 = OpAccessChain %_ptr_Function_int %x_94 %193
-        %196 = OpLoad %int %195
-               OpStore %x_91 %196
-        %197 = OpLoad %int %x_91
-               OpStore %x_96 %197
-        %198 = OpLoad %int %x_92
-               OpStore %x_97 %198
-        %199 = OpFunctionCall %int %performPartition_i1_i1_ %x_96 %x_97
-               OpStore %x_95 %199
-        %202 = OpLoad %int %x_95
-        %203 = OpLoad %int %x_91
-        %204 = OpISub %int %202 %int_1
-        %205 = OpSGreaterThan %bool %204 %203
-               OpSelectionMerge %206 None
-               OpBranchConditional %205 %207 %206
-        %207 = OpLabel
-        %208 = OpLoad %int %x_93
-        %209 = OpIAdd %int %208 %int_1
-               OpStore %x_93 %209
-        %210 = OpLoad %int %x_91
-        %211 = OpAccessChain %_ptr_Function_int %x_94 %209
-               OpStore %211 %210
-        %212 = OpLoad %int %x_93
-        %213 = OpIAdd %int %212 %int_1
-               OpStore %x_93 %213
-        %214 = OpLoad %int %x_95
-        %215 = OpAccessChain %_ptr_Function_int %x_94 %213
-        %216 = OpISub %int %214 %int_1
-               OpStore %215 %216
-               OpBranch %206
-        %206 = OpLabel
-        %217 = OpLoad %int %x_95
-        %218 = OpLoad %int %x_92
-        %219 = OpIAdd %int %217 %int_1
-        %220 = OpSLessThan %bool %219 %218
-               OpSelectionMerge %221 None
-               OpBranchConditional %220 %222 %221
-        %222 = OpLabel
-        %223 = OpLoad %int %x_93
-        %224 = OpIAdd %int %223 %int_1
-               OpStore %x_93 %224
-        %225 = OpLoad %int %x_95
-        %226 = OpAccessChain %_ptr_Function_int %x_94 %224
-        %227 = OpIAdd %int %225 %int_1
-               OpStore %226 %227
-        %228 = OpLoad %int %x_93
-        %229 = OpIAdd %int %228 %int_1
-               OpStore %x_93 %229
-        %230 = OpLoad %int %x_92
-        %231 = OpAccessChain %_ptr_Function_int %x_94 %229
-               OpStore %231 %230
-               OpBranch %221
-        %221 = OpLabel
-               OpBranch %182
-        %182 = OpLabel
-               OpBranch %180
-        %181 = OpLabel
-        %232 = OpLoad %v4float %x_GLF_FragCoord
-        %234 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %235 = OpLoad %v2float %234
-        %236 = OpCompositeExtract %float %232 0
-        %237 = OpCompositeExtract %float %232 1
-        %238 = OpCompositeConstruct %v2float %236 %237
-        %239 = OpFDiv %v2float %238 %235
-               OpStore %uv %239
-               OpStore %color %242
-        %243 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %244 = OpLoad %int %243
-        %246 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %247 = OpLoad %float %246
-        %248 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %249 = OpConvertSToF %float %244
-        %250 = OpFAdd %float %247 %249
-               OpStore %248 %250
-        %251 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %252 = OpLoad %float %251
-        %254 = OpFOrdGreaterThan %bool %252 %float_0_25
-               OpSelectionMerge %255 None
-               OpBranchConditional %254 %256 %255
-        %256 = OpLabel
-        %257 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %258 = OpLoad %int %257
-        %259 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %260 = OpLoad %float %259
-        %261 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %262 = OpConvertSToF %float %258
-        %263 = OpFAdd %float %260 %262
-               OpStore %261 %263
-               OpBranch %255
-        %255 = OpLabel
-        %264 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %265 = OpLoad %float %264
-        %267 = OpFOrdGreaterThan %bool %265 %float_0_5
-               OpSelectionMerge %268 None
-               OpBranchConditional %267 %269 %268
-        %269 = OpLabel
-        %271 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %272 = OpLoad %int %271
-        %274 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %275 = OpLoad %float %274
-        %276 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %277 = OpConvertSToF %float %272
-        %278 = OpFAdd %float %275 %277
-               OpStore %276 %278
-               OpBranch %268
-        %268 = OpLabel
-        %279 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %280 = OpLoad %float %279
-        %282 = OpFOrdGreaterThan %bool %280 %float_0_75
-               OpSelectionMerge %283 None
-               OpBranchConditional %282 %284 %283
-        %284 = OpLabel
-        %286 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %287 = OpLoad %int %286
-        %289 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %290 = OpLoad %float %289
-        %291 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %292 = OpConvertSToF %float %287
-        %293 = OpFAdd %float %290 %292
-               OpStore %291 %293
-               OpBranch %283
-        %283 = OpLabel
-        %295 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %296 = OpLoad %int %295
-        %297 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %298 = OpLoad %float %297
-        %299 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %300 = OpConvertSToF %float %296
-        %301 = OpFAdd %float %298 %300
-               OpStore %299 %301
-        %302 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %303 = OpLoad %float %302
-        %304 = OpFOrdGreaterThan %bool %303 %float_0_25
-               OpSelectionMerge %305 None
-               OpBranchConditional %304 %306 %305
-        %306 = OpLabel
-        %308 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %309 = OpLoad %int %308
-        %310 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %311 = OpLoad %float %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %313 = OpConvertSToF %float %309
-        %314 = OpFAdd %float %311 %313
-               OpStore %312 %314
-               OpBranch %305
-        %305 = OpLabel
-        %315 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %316 = OpLoad %float %315
-        %317 = OpFOrdGreaterThan %bool %316 %float_0_5
-               OpSelectionMerge %318 None
-               OpBranchConditional %317 %319 %318
-        %319 = OpLabel
-        %321 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %322 = OpLoad %int %321
-        %323 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %324 = OpLoad %float %323
-        %325 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %326 = OpConvertSToF %float %322
-        %327 = OpFAdd %float %324 %326
-               OpStore %325 %327
-               OpBranch %318
-        %318 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %329 = OpLoad %float %328
-        %330 = OpFOrdGreaterThan %bool %329 %float_0_75
-               OpSelectionMerge %331 None
-               OpBranchConditional %330 %332 %331
-        %332 = OpLabel
-        %334 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %335 = OpLoad %int %334
-        %336 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %337 = OpLoad %float %336
-        %338 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %339 = OpConvertSToF %float %335
-        %340 = OpFAdd %float %337 %339
-               OpStore %338 %340
-               OpBranch %331
-        %331 = OpLabel
-        %342 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %343 = OpLoad %int %342
-        %344 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %345 = OpLoad %float %344
-        %346 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %347 = OpConvertSToF %float %343
-        %348 = OpFAdd %float %345 %347
-               OpStore %346 %348
-        %349 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %350 = OpLoad %float %349
-        %351 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %352 = OpLoad %float %351
-        %355 = OpFSub %float %350 %352
-        %353 = OpExtInst %float %354 FAbs %355
-        %356 = OpFOrdLessThan %bool %353 %float_0_25
-               OpSelectionMerge %357 None
-               OpBranchConditional %356 %358 %357
-        %358 = OpLabel
-        %359 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %360 = OpLoad %int %359
-        %361 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %362 = OpLoad %float %361
-        %363 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %364 = OpConvertSToF %float %360
-        %365 = OpFAdd %float %362 %364
-               OpStore %363 %365
-               OpBranch %357
-        %357 = OpLabel
-        %366 = OpLoad %v3float %color
-        %367 = OpExtInst %v3float %354 Normalize %366
-        %368 = OpCompositeExtract %float %367 0
-        %369 = OpCompositeExtract %float %367 1
-        %370 = OpCompositeExtract %float %367 2
-        %371 = OpCompositeConstruct %v4float %368 %369 %370 %float_1
-               OpStore %frag_color %371
-        %372 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %372
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %373
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %377 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %378 = OpFunctionCall %void %main_1
-        %379 = OpLoad %v4float %frag_color
-        %380 = OpLoad %v4float %gl_Position
-        %381 = OpCompositeConstruct %main_out %379 %380
-               OpReturnValue %381
-               OpFunctionEnd
-       %main = OpFunction %void None %116
-        %383 = OpLabel
-        %385 = OpLoad %v4float %x_GLF_pos_param_1
-        %384 = OpFunctionCall %main_out %main_inner %385
-        %386 = OpCompositeExtract %v4float %384 0
-               OpStore %frag_color_1_1 %386
-        %387 = OpCompositeExtract %v4float %384 1
-               OpStore %gl_Position_1 %387
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
-%swap_i1_i1_ = OpFunction %void None %388
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-        %392 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %36
-        %395 = OpLoad %int %i
-        %396 = OpAccessChain %_ptr_Private_int %obj %uint_0 %395
-        %397 = OpLoad %int %396
-               OpStore %temp %397
-        %399 = OpLoad %int %i
-        %401 = OpLoad %int %j
-        %402 = OpAccessChain %_ptr_Private_int %obj %uint_0 %401
-        %403 = OpLoad %int %402
-        %404 = OpAccessChain %_ptr_Private_int %obj %uint_0 %399
-               OpStore %404 %403
-        %406 = OpLoad %int %j
-        %407 = OpLoad %int %temp
-        %408 = OpAccessChain %_ptr_Private_int %obj %uint_0 %406
-               OpStore %408 %407
-               OpReturn
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %116
-        %410 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %36
-        %h_1 = OpVariable %_ptr_Function_int Function %36
-        %top = OpVariable %_ptr_Function_int Function %36
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %125
-          %p = OpVariable %_ptr_Function_int Function %36
-    %param_4 = OpVariable %_ptr_Function_int Function %36
-    %param_5 = OpVariable %_ptr_Function_int Function %36
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %418 = OpLoad %int %top
-        %419 = OpIAdd %int %418 %int_1
-               OpStore %top %419
-        %420 = OpLoad %int %l_1
-        %421 = OpAccessChain %_ptr_Function_int %stack %419
-               OpStore %421 %420
-        %422 = OpLoad %int %top
-        %423 = OpIAdd %int %422 %int_1
-               OpStore %top %423
-        %424 = OpLoad %int %h_1
-        %425 = OpAccessChain %_ptr_Function_int %stack %423
-               OpStore %425 %424
-               OpBranch %426
-        %426 = OpLabel
-               OpLoopMerge %427 %428 None
-               OpBranch %429
-        %429 = OpLabel
-        %430 = OpLoad %int %top
-        %431 = OpSGreaterThanEqual %bool %430 %int_0
-               OpSelectionMerge %432 None
-               OpBranchConditional %431 %433 %434
-        %433 = OpLabel
-               OpBranch %432
-        %434 = OpLabel
-               OpBranch %427
-        %432 = OpLabel
-        %435 = OpLoad %int %top
-        %436 = OpISub %int %435 %int_1
-               OpStore %top %436
-        %437 = OpAccessChain %_ptr_Function_int %stack %435
-        %438 = OpLoad %int %437
-               OpStore %h_1 %438
-        %439 = OpLoad %int %top
-        %440 = OpISub %int %439 %int_1
-               OpStore %top %440
-        %441 = OpAccessChain %_ptr_Function_int %stack %439
-        %442 = OpLoad %int %441
-               OpStore %l_1 %442
-        %443 = OpLoad %int %l_1
-               OpStore %param_4 %443
-        %444 = OpLoad %int %h_1
-               OpStore %param_5 %444
-        %445 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %445
-        %448 = OpLoad %int %p
-        %449 = OpLoad %int %l_1
-        %450 = OpISub %int %448 %int_1
-        %451 = OpSGreaterThan %bool %450 %449
-               OpSelectionMerge %452 None
-               OpBranchConditional %451 %453 %452
-        %453 = OpLabel
-        %454 = OpLoad %int %top
-        %455 = OpIAdd %int %454 %int_1
-               OpStore %top %455
-        %456 = OpLoad %int %l_1
-        %457 = OpAccessChain %_ptr_Function_int %stack %455
-               OpStore %457 %456
-        %458 = OpLoad %int %top
-        %459 = OpIAdd %int %458 %int_1
-               OpStore %top %459
-        %460 = OpLoad %int %p
-        %461 = OpAccessChain %_ptr_Function_int %stack %459
-        %462 = OpISub %int %460 %int_1
-               OpStore %461 %462
-               OpBranch %452
-        %452 = OpLabel
-        %463 = OpLoad %int %p
-        %464 = OpLoad %int %h_1
-        %465 = OpIAdd %int %463 %int_1
-        %466 = OpSLessThan %bool %465 %464
-               OpSelectionMerge %467 None
-               OpBranchConditional %466 %468 %467
-        %468 = OpLabel
-        %469 = OpLoad %int %top
-        %470 = OpIAdd %int %469 %int_1
-               OpStore %top %470
-        %471 = OpLoad %int %p
-        %472 = OpAccessChain %_ptr_Function_int %stack %470
-        %473 = OpIAdd %int %471 %int_1
-               OpStore %472 %473
-        %474 = OpLoad %int %top
-        %475 = OpIAdd %int %474 %int_1
-               OpStore %top %475
-        %476 = OpLoad %int %h_1
-        %477 = OpAccessChain %_ptr_Function_int %stack %475
-               OpStore %477 %476
-               OpBranch %467
-        %467 = OpLabel
-               OpBranch %428
-        %428 = OpLabel
-               OpBranch %426
-        %427 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.wgsl
deleted file mode 100644
index 7c15a5c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.wgsl
+++ /dev/null
@@ -1,356 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var x_314 : i32;
-  var x_315 : i32;
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_316 : i32 = *(h);
-  let x_318 : i32 = obj.numbers[x_316];
-  pivot = x_318;
-  let x_319 : i32 = *(l);
-  i_1 = (x_319 - 1);
-  let x_321 : i32 = *(l);
-  j_1 = x_321;
-  loop {
-    let x_326 : i32 = j_1;
-    let x_327 : i32 = *(h);
-    if ((x_326 <= (x_327 - 1))) {
-    } else {
-      break;
-    }
-    let x_331 : i32 = j_1;
-    let x_333 : i32 = obj.numbers[x_331];
-    let x_334 : i32 = pivot;
-    if ((x_333 <= x_334)) {
-      let x_338 : i32 = i_1;
-      i_1 = (x_338 + 1);
-      let x_340 : i32 = i_1;
-      param = x_340;
-      let x_341 : i32 = j_1;
-      param_1 = x_341;
-      let x_342 : i32 = param;
-      let x_344 : i32 = obj.numbers[x_342];
-      x_315 = x_344;
-      let x_345 : i32 = param;
-      let x_346 : i32 = param_1;
-      let x_348 : i32 = obj.numbers[x_346];
-      obj.numbers[x_345] = x_348;
-      let x_350 : i32 = param_1;
-      let x_351 : i32 = x_315;
-      obj.numbers[x_350] = x_351;
-    }
-
-    continuing {
-      let x_353 : i32 = j_1;
-      j_1 = (x_353 + 1);
-    }
-  }
-  let x_355 : i32 = i_1;
-  param_2 = (x_355 + 1);
-  let x_357 : i32 = *(h);
-  param_3 = x_357;
-  let x_358 : i32 = param_2;
-  let x_360 : i32 = obj.numbers[x_358];
-  x_314 = x_360;
-  let x_361 : i32 = param_2;
-  let x_362 : i32 = param_3;
-  let x_364 : i32 = obj.numbers[x_362];
-  obj.numbers[x_361] = x_364;
-  let x_366 : i32 = param_3;
-  let x_367 : i32 = x_314;
-  obj.numbers[x_366] = x_367;
-  if (false) {
-  } else {
-    let x_372 : i32 = i_1;
-    return (x_372 + 1);
-  }
-  return 0;
-}
-
-fn main_1() {
-  var x_91 : i32;
-  var x_92 : i32;
-  var x_93 : i32;
-  var x_94 : array<i32, 10>;
-  var x_95 : i32;
-  var x_96 : i32;
-  var x_97 : i32;
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_98 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_98 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_105 : i32 = i_2;
-    if ((x_105 < 10)) {
-    } else {
-      break;
-    }
-    let x_108 : i32 = i_2;
-    let x_109 : i32 = i_2;
-    obj.numbers[x_108] = (10 - x_109);
-    let x_112 : i32 = i_2;
-    let x_113 : i32 = i_2;
-    let x_115 : i32 = obj.numbers[x_113];
-    let x_116 : i32 = i_2;
-    let x_118 : i32 = obj.numbers[x_116];
-    obj.numbers[x_112] = (x_115 * x_118);
-
-    continuing {
-      let x_121 : i32 = i_2;
-      i_2 = (x_121 + 1);
-    }
-  }
-  x_91 = 0;
-  x_92 = 9;
-  x_93 = -1;
-  let x_123 : i32 = x_93;
-  let x_124 : i32 = (x_123 + 1);
-  x_93 = x_124;
-  let x_125 : i32 = x_91;
-  x_94[x_124] = x_125;
-  let x_127 : i32 = x_93;
-  let x_128 : i32 = (x_127 + 1);
-  x_93 = x_128;
-  let x_129 : i32 = x_92;
-  x_94[x_128] = x_129;
-  loop {
-    let x_135 : i32 = x_93;
-    if ((x_135 >= 0)) {
-    } else {
-      break;
-    }
-    let x_138 : i32 = x_93;
-    x_93 = (x_138 - 1);
-    let x_141 : i32 = x_94[x_138];
-    x_92 = x_141;
-    let x_142 : i32 = x_93;
-    x_93 = (x_142 - 1);
-    let x_145 : i32 = x_94[x_142];
-    x_91 = x_145;
-    let x_146 : i32 = x_91;
-    x_96 = x_146;
-    let x_147 : i32 = x_92;
-    x_97 = x_147;
-    let x_148 : i32 = performPartition_i1_i1_(&(x_96), &(x_97));
-    x_95 = x_148;
-    let x_149 : i32 = x_95;
-    let x_151 : i32 = x_91;
-    if (((x_149 - 1) > x_151)) {
-      let x_155 : i32 = x_93;
-      let x_156 : i32 = (x_155 + 1);
-      x_93 = x_156;
-      let x_157 : i32 = x_91;
-      x_94[x_156] = x_157;
-      let x_159 : i32 = x_93;
-      let x_160 : i32 = (x_159 + 1);
-      x_93 = x_160;
-      let x_161 : i32 = x_95;
-      x_94[x_160] = (x_161 - 1);
-    }
-    let x_164 : i32 = x_95;
-    let x_166 : i32 = x_92;
-    if (((x_164 + 1) < x_166)) {
-      let x_170 : i32 = x_93;
-      let x_171 : i32 = (x_170 + 1);
-      x_93 = x_171;
-      let x_172 : i32 = x_95;
-      x_94[x_171] = (x_172 + 1);
-      let x_175 : i32 = x_93;
-      let x_176 : i32 = (x_175 + 1);
-      x_93 = x_176;
-      let x_177 : i32 = x_92;
-      x_94[x_176] = x_177;
-    }
-  }
-  let x_179 : vec4<f32> = x_GLF_FragCoord;
-  let x_182 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_179.x, x_179.y) / x_182);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_185 : i32 = obj.numbers[0];
-  let x_188 : f32 = color.x;
-  color.x = (x_188 + f32(x_185));
-  let x_192 : f32 = uv.x;
-  if ((x_192 > 0.25)) {
-    let x_197 : i32 = obj.numbers[1];
-    let x_200 : f32 = color.x;
-    color.x = (x_200 + f32(x_197));
-  }
-  let x_204 : f32 = uv.x;
-  if ((x_204 > 0.5)) {
-    let x_209 : i32 = obj.numbers[2];
-    let x_212 : f32 = color.y;
-    color.y = (x_212 + f32(x_209));
-  }
-  let x_216 : f32 = uv.x;
-  if ((x_216 > 0.75)) {
-    let x_221 : i32 = obj.numbers[3];
-    let x_224 : f32 = color.z;
-    color.z = (x_224 + f32(x_221));
-  }
-  let x_228 : i32 = obj.numbers[4];
-  let x_231 : f32 = color.y;
-  color.y = (x_231 + f32(x_228));
-  let x_235 : f32 = uv.y;
-  if ((x_235 > 0.25)) {
-    let x_240 : i32 = obj.numbers[5];
-    let x_243 : f32 = color.x;
-    color.x = (x_243 + f32(x_240));
-  }
-  let x_247 : f32 = uv.y;
-  if ((x_247 > 0.5)) {
-    let x_252 : i32 = obj.numbers[6];
-    let x_255 : f32 = color.y;
-    color.y = (x_255 + f32(x_252));
-  }
-  let x_259 : f32 = uv.y;
-  if ((x_259 > 0.75)) {
-    let x_264 : i32 = obj.numbers[7];
-    let x_267 : f32 = color.z;
-    color.z = (x_267 + f32(x_264));
-  }
-  let x_271 : i32 = obj.numbers[8];
-  let x_274 : f32 = color.z;
-  color.z = (x_274 + f32(x_271));
-  let x_278 : f32 = uv.x;
-  let x_280 : f32 = uv.y;
-  if ((abs((x_278 - x_280)) < 0.25)) {
-    let x_287 : i32 = obj.numbers[9];
-    let x_290 : f32 = color.x;
-    color.x = (x_290 + f32(x_287));
-  }
-  let x_293 : vec3<f32> = color;
-  let x_294 : vec3<f32> = normalize(x_293);
-  frag_color = vec4<f32>(x_294.x, x_294.y, x_294.z, 1.0);
-  let x_299 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_299;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_302 : i32 = *(i);
-  let x_304 : i32 = obj.numbers[x_302];
-  temp = x_304;
-  let x_305 : i32 = *(i);
-  let x_306 : i32 = *(j);
-  let x_308 : i32 = obj.numbers[x_306];
-  obj.numbers[x_305] = x_308;
-  let x_310 : i32 = *(j);
-  let x_311 : i32 = temp;
-  obj.numbers[x_310] = x_311;
-  return;
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_376 : i32 = top;
-  let x_377 : i32 = (x_376 + 1);
-  top = x_377;
-  let x_378 : i32 = l_1;
-  stack[x_377] = x_378;
-  let x_380 : i32 = top;
-  let x_381 : i32 = (x_380 + 1);
-  top = x_381;
-  let x_382 : i32 = h_1;
-  stack[x_381] = x_382;
-  loop {
-    let x_388 : i32 = top;
-    if ((x_388 >= 0)) {
-    } else {
-      break;
-    }
-    let x_391 : i32 = top;
-    top = (x_391 - 1);
-    let x_394 : i32 = stack[x_391];
-    h_1 = x_394;
-    let x_395 : i32 = top;
-    top = (x_395 - 1);
-    let x_398 : i32 = stack[x_395];
-    l_1 = x_398;
-    let x_399 : i32 = l_1;
-    param_4 = x_399;
-    let x_400 : i32 = h_1;
-    param_5 = x_400;
-    let x_401 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_401;
-    let x_402 : i32 = p;
-    let x_404 : i32 = l_1;
-    if (((x_402 - 1) > x_404)) {
-      let x_408 : i32 = top;
-      let x_409 : i32 = (x_408 + 1);
-      top = x_409;
-      let x_410 : i32 = l_1;
-      stack[x_409] = x_410;
-      let x_412 : i32 = top;
-      let x_413 : i32 = (x_412 + 1);
-      top = x_413;
-      let x_414 : i32 = p;
-      stack[x_413] = (x_414 - 1);
-    }
-    let x_417 : i32 = p;
-    let x_419 : i32 = h_1;
-    if (((x_417 + 1) < x_419)) {
-      let x_423 : i32 = top;
-      let x_424 : i32 = (x_423 + 1);
-      top = x_424;
-      let x_425 : i32 = p;
-      stack[x_424] = (x_425 + 1);
-      let x_428 : i32 = top;
-      let x_429 : i32 = (x_428 + 1);
-      top = x_429;
-      let x_430 : i32 = h_1;
-      stack[x_429] = x_430;
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.hlsl
deleted file mode 100644
index 53c62af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,290 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
-  uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int x_314 = 0;
-  int x_315 = 0;
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_316 = h;
-  const int x_318 = obj.numbers[x_316];
-  pivot = x_318;
-  const int x_319 = l;
-  i_1 = (x_319 - 1);
-  const int x_321 = l;
-  j_1 = x_321;
-  while (true) {
-    const int x_326 = j_1;
-    const int x_327 = h;
-    if ((x_326 <= (x_327 - 1))) {
-    } else {
-      break;
-    }
-    const int x_333 = obj.numbers[j_1];
-    if ((x_333 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      const int x_344 = obj.numbers[param];
-      x_315 = x_344;
-      const int x_345 = param;
-      const int x_348 = obj.numbers[param_1];
-      obj.numbers[x_345] = x_348;
-      obj.numbers[param_1] = x_315;
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_357 = h;
-  param_3 = x_357;
-  const int x_360 = obj.numbers[param_2];
-  x_314 = x_360;
-  const int x_361 = param_2;
-  const int x_364 = obj.numbers[param_3];
-  obj.numbers[x_361] = x_364;
-  obj.numbers[param_3] = x_314;
-  if (false) {
-  } else {
-    return (i_1 + 1);
-  }
-  return 0;
-}
-
-void main_1() {
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  int x_94[10] = (int[10])0;
-  int x_95 = 0;
-  int x_96 = 0;
-  int x_97 = 0;
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_112 = i_2;
-      const int x_115 = obj.numbers[i_2];
-      const int x_118 = obj.numbers[i_2];
-      obj.numbers[x_112] = (x_115 * x_118);
-    }
-  }
-  x_91 = 0;
-  x_92 = 9;
-  x_93 = -1;
-  const int x_124 = (x_93 + 1);
-  x_93 = x_124;
-  x_94[x_124] = x_91;
-  const int x_128 = (x_93 + 1);
-  x_93 = x_128;
-  x_94[x_128] = x_92;
-  while (true) {
-    if ((x_93 >= 0)) {
-    } else {
-      break;
-    }
-    const int x_138 = x_93;
-    x_93 = (x_138 - 1);
-    const int x_141 = x_94[x_138];
-    x_92 = x_141;
-    const int x_142 = x_93;
-    x_93 = (x_142 - 1);
-    const int x_145 = x_94[x_142];
-    x_91 = x_145;
-    x_96 = x_91;
-    x_97 = x_92;
-    const int x_148 = performPartition_i1_i1_(x_96, x_97);
-    x_95 = x_148;
-    if (((x_95 - 1) > x_91)) {
-      const int x_156 = (x_93 + 1);
-      x_93 = x_156;
-      x_94[x_156] = x_91;
-      const int x_160 = (x_93 + 1);
-      x_93 = x_160;
-      x_94[x_160] = (x_95 - 1);
-    }
-    if (((x_95 + 1) < x_92)) {
-      const int x_171 = (x_93 + 1);
-      x_93 = x_171;
-      x_94[x_171] = (x_95 + 1);
-      const int x_176 = (x_93 + 1);
-      x_93 = x_176;
-      x_94[x_176] = x_92;
-    }
-  }
-  const float4 x_179 = x_GLF_FragCoord;
-  const float2 x_182 = asfloat(x_34[0].xy);
-  uv = (float2(x_179.x, x_179.y) / x_182);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_185 = obj.numbers[0];
-  const float x_188 = color.x;
-  color.x = (x_188 + float(x_185));
-  const float x_192 = uv.x;
-  if ((x_192 > 0.25f)) {
-    const int x_197 = obj.numbers[1];
-    const float x_200 = color.x;
-    color.x = (x_200 + float(x_197));
-  }
-  const float x_204 = uv.x;
-  if ((x_204 > 0.5f)) {
-    const int x_209 = obj.numbers[2];
-    const float x_212 = color.y;
-    color.y = (x_212 + float(x_209));
-  }
-  const float x_216 = uv.x;
-  if ((x_216 > 0.75f)) {
-    const int x_221 = obj.numbers[3];
-    const float x_224 = color.z;
-    color.z = (x_224 + float(x_221));
-  }
-  const int x_228 = obj.numbers[4];
-  const float x_231 = color.y;
-  color.y = (x_231 + float(x_228));
-  const float x_235 = uv.y;
-  if ((x_235 > 0.25f)) {
-    const int x_240 = obj.numbers[5];
-    const float x_243 = color.x;
-    color.x = (x_243 + float(x_240));
-  }
-  const float x_247 = uv.y;
-  if ((x_247 > 0.5f)) {
-    const int x_252 = obj.numbers[6];
-    const float x_255 = color.y;
-    color.y = (x_255 + float(x_252));
-  }
-  const float x_259 = uv.y;
-  if ((x_259 > 0.75f)) {
-    const int x_264 = obj.numbers[7];
-    const float x_267 = color.z;
-    color.z = (x_267 + float(x_264));
-  }
-  const int x_271 = obj.numbers[8];
-  const float x_274 = color.z;
-  color.z = (x_274 + float(x_271));
-  const float x_278 = uv.x;
-  const float x_280 = uv.y;
-  if ((abs((x_278 - x_280)) < 0.25f)) {
-    const int x_287 = obj.numbers[9];
-    const float x_290 = color.x;
-    color.x = (x_290 + float(x_287));
-  }
-  const float3 x_294 = normalize(color);
-  frag_color = float4(x_294.x, x_294.y, x_294.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_4 = {frag_color, gl_Position};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_302 = i;
-  const int x_304 = obj.numbers[x_302];
-  temp = x_304;
-  const int x_305 = i;
-  const int x_306 = j;
-  const int x_308 = obj.numbers[x_306];
-  obj.numbers[x_305] = x_308;
-  const int x_310 = j;
-  obj.numbers[x_310] = temp;
-  return;
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_377 = (top + 1);
-  top = x_377;
-  stack[x_377] = l_1;
-  const int x_381 = (top + 1);
-  top = x_381;
-  stack[x_381] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_391 = top;
-    top = (x_391 - 1);
-    const int x_394 = stack[x_391];
-    h_1 = x_394;
-    const int x_395 = top;
-    top = (x_395 - 1);
-    const int x_398 = stack[x_395];
-    l_1 = x_398;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_401 = performPartition_i1_i1_(param_4, param_5);
-    p = x_401;
-    if (((p - 1) > l_1)) {
-      const int x_409 = (top + 1);
-      top = x_409;
-      stack[x_409] = l_1;
-      const int x_413 = (top + 1);
-      top = x_413;
-      stack[x_413] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_424 = (top + 1);
-      top = x_424;
-      stack[x_424] = (p + 1);
-      const int x_429 = (top + 1);
-      top = x_429;
-      stack[x_429] = h_1;
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.msl
deleted file mode 100644
index c2fe24a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.msl
+++ /dev/null
@@ -1,364 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_5) {
-  int x_314 = 0;
-  int x_315 = 0;
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_316 = *(h);
-  int const x_318 = (*(tint_symbol_5)).numbers.arr[x_316];
-  pivot = x_318;
-  int const x_319 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_319) - as_type<uint>(1)));
-  int const x_321 = *(l);
-  j_1 = x_321;
-  while (true) {
-    int const x_326 = j_1;
-    int const x_327 = *(h);
-    if ((x_326 <= as_type<int>((as_type<uint>(x_327) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_331 = j_1;
-    int const x_333 = (*(tint_symbol_5)).numbers.arr[x_331];
-    int const x_334 = pivot;
-    if ((x_333 <= x_334)) {
-      int const x_338 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_338) + as_type<uint>(1)));
-      int const x_340 = i_1;
-      param = x_340;
-      int const x_341 = j_1;
-      param_1 = x_341;
-      int const x_342 = param;
-      int const x_344 = (*(tint_symbol_5)).numbers.arr[x_342];
-      x_315 = x_344;
-      int const x_345 = param;
-      int const x_346 = param_1;
-      int const x_348 = (*(tint_symbol_5)).numbers.arr[x_346];
-      (*(tint_symbol_5)).numbers.arr[x_345] = x_348;
-      int const x_350 = param_1;
-      int const x_351 = x_315;
-      (*(tint_symbol_5)).numbers.arr[x_350] = x_351;
-    }
-    {
-      int const x_353 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_353) + as_type<uint>(1)));
-    }
-  }
-  int const x_355 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_355) + as_type<uint>(1)));
-  int const x_357 = *(h);
-  param_3 = x_357;
-  int const x_358 = param_2;
-  int const x_360 = (*(tint_symbol_5)).numbers.arr[x_358];
-  x_314 = x_360;
-  int const x_361 = param_2;
-  int const x_362 = param_3;
-  int const x_364 = (*(tint_symbol_5)).numbers.arr[x_362];
-  (*(tint_symbol_5)).numbers.arr[x_361] = x_364;
-  int const x_366 = param_3;
-  int const x_367 = x_314;
-  (*(tint_symbol_5)).numbers.arr[x_366] = x_367;
-  if (false) {
-  } else {
-    int const x_372 = i_1;
-    return as_type<int>((as_type<uint>(x_372) + as_type<uint>(1)));
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_34, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7, thread QuicksortObject* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  int x_91 = 0;
-  int x_92 = 0;
-  int x_93 = 0;
-  tint_array_wrapper x_94 = {};
-  int x_95 = 0;
-  int x_96 = 0;
-  int x_97 = 0;
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_98 = *(tint_symbol_6);
-  *(tint_symbol_7) = ((x_98 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_105 = i_2;
-    if ((x_105 < 10)) {
-    } else {
-      break;
-    }
-    int const x_108 = i_2;
-    int const x_109 = i_2;
-    (*(tint_symbol_8)).numbers.arr[x_108] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_109)));
-    int const x_112 = i_2;
-    int const x_113 = i_2;
-    int const x_115 = (*(tint_symbol_8)).numbers.arr[x_113];
-    int const x_116 = i_2;
-    int const x_118 = (*(tint_symbol_8)).numbers.arr[x_116];
-    (*(tint_symbol_8)).numbers.arr[x_112] = as_type<int>((as_type<uint>(x_115) * as_type<uint>(x_118)));
-    {
-      int const x_121 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
-    }
-  }
-  x_91 = 0;
-  x_92 = 9;
-  x_93 = -1;
-  int const x_123 = x_93;
-  int const x_124 = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
-  x_93 = x_124;
-  int const x_125 = x_91;
-  x_94.arr[x_124] = x_125;
-  int const x_127 = x_93;
-  int const x_128 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
-  x_93 = x_128;
-  int const x_129 = x_92;
-  x_94.arr[x_128] = x_129;
-  while (true) {
-    int const x_135 = x_93;
-    if ((x_135 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_138 = x_93;
-    x_93 = as_type<int>((as_type<uint>(x_138) - as_type<uint>(1)));
-    int const x_141 = x_94.arr[x_138];
-    x_92 = x_141;
-    int const x_142 = x_93;
-    x_93 = as_type<int>((as_type<uint>(x_142) - as_type<uint>(1)));
-    int const x_145 = x_94.arr[x_142];
-    x_91 = x_145;
-    int const x_146 = x_91;
-    x_96 = x_146;
-    int const x_147 = x_92;
-    x_97 = x_147;
-    int const x_148 = performPartition_i1_i1_(&(x_96), &(x_97), tint_symbol_8);
-    x_95 = x_148;
-    int const x_149 = x_95;
-    int const x_151 = x_91;
-    if ((as_type<int>((as_type<uint>(x_149) - as_type<uint>(1))) > x_151)) {
-      int const x_155 = x_93;
-      int const x_156 = as_type<int>((as_type<uint>(x_155) + as_type<uint>(1)));
-      x_93 = x_156;
-      int const x_157 = x_91;
-      x_94.arr[x_156] = x_157;
-      int const x_159 = x_93;
-      int const x_160 = as_type<int>((as_type<uint>(x_159) + as_type<uint>(1)));
-      x_93 = x_160;
-      int const x_161 = x_95;
-      x_94.arr[x_160] = as_type<int>((as_type<uint>(x_161) - as_type<uint>(1)));
-    }
-    int const x_164 = x_95;
-    int const x_166 = x_92;
-    if ((as_type<int>((as_type<uint>(x_164) + as_type<uint>(1))) < x_166)) {
-      int const x_170 = x_93;
-      int const x_171 = as_type<int>((as_type<uint>(x_170) + as_type<uint>(1)));
-      x_93 = x_171;
-      int const x_172 = x_95;
-      x_94.arr[x_171] = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
-      int const x_175 = x_93;
-      int const x_176 = as_type<int>((as_type<uint>(x_175) + as_type<uint>(1)));
-      x_93 = x_176;
-      int const x_177 = x_92;
-      x_94.arr[x_176] = x_177;
-    }
-  }
-  float4 const x_179 = *(tint_symbol_7);
-  float2 const x_182 = x_34.resolution;
-  uv = (float2(x_179.x, x_179.y) / x_182);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_185 = (*(tint_symbol_8)).numbers.arr[0];
-  float const x_188 = color.x;
-  color.x = (x_188 + float(x_185));
-  float const x_192 = uv.x;
-  if ((x_192 > 0.25f)) {
-    int const x_197 = (*(tint_symbol_8)).numbers.arr[1];
-    float const x_200 = color.x;
-    color.x = (x_200 + float(x_197));
-  }
-  float const x_204 = uv.x;
-  if ((x_204 > 0.5f)) {
-    int const x_209 = (*(tint_symbol_8)).numbers.arr[2];
-    float const x_212 = color.y;
-    color.y = (x_212 + float(x_209));
-  }
-  float const x_216 = uv.x;
-  if ((x_216 > 0.75f)) {
-    int const x_221 = (*(tint_symbol_8)).numbers.arr[3];
-    float const x_224 = color.z;
-    color.z = (x_224 + float(x_221));
-  }
-  int const x_228 = (*(tint_symbol_8)).numbers.arr[4];
-  float const x_231 = color.y;
-  color.y = (x_231 + float(x_228));
-  float const x_235 = uv.y;
-  if ((x_235 > 0.25f)) {
-    int const x_240 = (*(tint_symbol_8)).numbers.arr[5];
-    float const x_243 = color.x;
-    color.x = (x_243 + float(x_240));
-  }
-  float const x_247 = uv.y;
-  if ((x_247 > 0.5f)) {
-    int const x_252 = (*(tint_symbol_8)).numbers.arr[6];
-    float const x_255 = color.y;
-    color.y = (x_255 + float(x_252));
-  }
-  float const x_259 = uv.y;
-  if ((x_259 > 0.75f)) {
-    int const x_264 = (*(tint_symbol_8)).numbers.arr[7];
-    float const x_267 = color.z;
-    color.z = (x_267 + float(x_264));
-  }
-  int const x_271 = (*(tint_symbol_8)).numbers.arr[8];
-  float const x_274 = color.z;
-  color.z = (x_274 + float(x_271));
-  float const x_278 = uv.x;
-  float const x_280 = uv.y;
-  if ((fabs((x_278 - x_280)) < 0.25f)) {
-    int const x_287 = (*(tint_symbol_8)).numbers.arr[9];
-    float const x_290 = color.x;
-    color.x = (x_290 + float(x_287));
-  }
-  float3 const x_293 = color;
-  float3 const x_294 = normalize(x_293);
-  *(tint_symbol_9) = float4(x_294.x, x_294.y, x_294.z, 1.0f);
-  float4 const x_299 = *(tint_symbol_6);
-  *(tint_symbol_10) = x_299;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_34, float4 x_GLF_pos_param, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12, thread QuicksortObject* const tint_symbol_13, thread float4* const tint_symbol_14, thread float4* const tint_symbol_15) {
-  *(tint_symbol_11) = x_GLF_pos_param;
-  main_1(x_34, tint_symbol_11, tint_symbol_12, tint_symbol_13, tint_symbol_14, tint_symbol_15);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_14), .gl_Position=*(tint_symbol_15)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
-  thread float4 tint_symbol_16 = 0.0f;
-  thread float4 tint_symbol_17 = 0.0f;
-  thread QuicksortObject tint_symbol_18 = {};
-  thread float4 tint_symbol_19 = 0.0f;
-  thread float4 tint_symbol_20 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_21) {
-  int temp = 0;
-  int const x_302 = *(i);
-  int const x_304 = (*(tint_symbol_21)).numbers.arr[x_302];
-  temp = x_304;
-  int const x_305 = *(i);
-  int const x_306 = *(j);
-  int const x_308 = (*(tint_symbol_21)).numbers.arr[x_306];
-  (*(tint_symbol_21)).numbers.arr[x_305] = x_308;
-  int const x_310 = *(j);
-  int const x_311 = temp;
-  (*(tint_symbol_21)).numbers.arr[x_310] = x_311;
-  return;
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_22) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_376 = top;
-  int const x_377 = as_type<int>((as_type<uint>(x_376) + as_type<uint>(1)));
-  top = x_377;
-  int const x_378 = l_1;
-  stack.arr[x_377] = x_378;
-  int const x_380 = top;
-  int const x_381 = as_type<int>((as_type<uint>(x_380) + as_type<uint>(1)));
-  top = x_381;
-  int const x_382 = h_1;
-  stack.arr[x_381] = x_382;
-  while (true) {
-    int const x_388 = top;
-    if ((x_388 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_391 = top;
-    top = as_type<int>((as_type<uint>(x_391) - as_type<uint>(1)));
-    int const x_394 = stack.arr[x_391];
-    h_1 = x_394;
-    int const x_395 = top;
-    top = as_type<int>((as_type<uint>(x_395) - as_type<uint>(1)));
-    int const x_398 = stack.arr[x_395];
-    l_1 = x_398;
-    int const x_399 = l_1;
-    param_4 = x_399;
-    int const x_400 = h_1;
-    param_5 = x_400;
-    int const x_401 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_22);
-    p = x_401;
-    int const x_402 = p;
-    int const x_404 = l_1;
-    if ((as_type<int>((as_type<uint>(x_402) - as_type<uint>(1))) > x_404)) {
-      int const x_408 = top;
-      int const x_409 = as_type<int>((as_type<uint>(x_408) + as_type<uint>(1)));
-      top = x_409;
-      int const x_410 = l_1;
-      stack.arr[x_409] = x_410;
-      int const x_412 = top;
-      int const x_413 = as_type<int>((as_type<uint>(x_412) + as_type<uint>(1)));
-      top = x_413;
-      int const x_414 = p;
-      stack.arr[x_413] = as_type<int>((as_type<uint>(x_414) - as_type<uint>(1)));
-    }
-    int const x_417 = p;
-    int const x_419 = h_1;
-    if ((as_type<int>((as_type<uint>(x_417) + as_type<uint>(1))) < x_419)) {
-      int const x_423 = top;
-      int const x_424 = as_type<int>((as_type<uint>(x_423) + as_type<uint>(1)));
-      top = x_424;
-      int const x_425 = p;
-      stack.arr[x_424] = as_type<int>((as_type<uint>(x_425) + as_type<uint>(1)));
-      int const x_428 = top;
-      int const x_429 = as_type<int>((as_type<uint>(x_428) + as_type<uint>(1)));
-      top = x_429;
-      int const x_430 = h_1;
-      stack.arr[x_429] = x_430;
-    }
-  }
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.spvasm
deleted file mode 100644
index d044f62..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.spvasm
+++ /dev/null
@@ -1,713 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 478
-; Schema: 0
-               OpCapability Shader
-        %354 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %x_314 "x_314"
-               OpName %x_315 "x_315"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %main_1 "main_1"
-               OpName %x_91 "x_91"
-               OpName %x_92 "x_92"
-               OpName %x_93 "x_93"
-               OpName %x_94 "x_94"
-               OpName %x_95 "x_95"
-               OpName %x_96 "x_96"
-               OpName %x_97 "x_97"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_34 = OpVariable %_ptr_Uniform_buf0 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_int = OpTypePointer Function %int
-         %29 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-         %36 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-        %116 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %125 = OpConstantNull %_arr_int_uint_10
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %132 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %136 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %140 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-        %143 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-     %int_10 = OpConstant %int 10
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %242 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-      %int_2 = OpConstant %int 2
-     %uint_1 = OpConstant %uint 1
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %373 = OpTypeFunction %main_out %v4float
-        %388 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-%performPartition_i1_i1_ = OpFunction %int None %29
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %34 = OpLabel
-      %x_314 = OpVariable %_ptr_Function_int Function %36
-      %x_315 = OpVariable %_ptr_Function_int Function %36
-      %pivot = OpVariable %_ptr_Function_int Function %36
-        %i_1 = OpVariable %_ptr_Function_int Function %36
-        %j_1 = OpVariable %_ptr_Function_int Function %36
-      %param = OpVariable %_ptr_Function_int Function %36
-    %param_1 = OpVariable %_ptr_Function_int Function %36
-    %param_2 = OpVariable %_ptr_Function_int Function %36
-    %param_3 = OpVariable %_ptr_Function_int Function %36
-         %46 = OpLoad %int %h
-         %49 = OpAccessChain %_ptr_Private_int %obj %uint_0 %46
-         %50 = OpLoad %int %49
-               OpStore %pivot %50
-         %52 = OpLoad %int %l
-         %54 = OpISub %int %52 %int_1
-               OpStore %i_1 %54
-         %56 = OpLoad %int %l
-               OpStore %j_1 %56
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %j_1
-         %63 = OpLoad %int %h
-         %64 = OpISub %int %63 %int_1
-         %65 = OpSLessThanEqual %bool %61 %64
-               OpSelectionMerge %67 None
-               OpBranchConditional %65 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %58
-         %67 = OpLabel
-         %70 = OpLoad %int %j_1
-         %71 = OpAccessChain %_ptr_Private_int %obj %uint_0 %70
-         %72 = OpLoad %int %71
-         %73 = OpLoad %int %pivot
-         %74 = OpSLessThanEqual %bool %72 %73
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-         %77 = OpLoad %int %i_1
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %i_1 %78
-         %79 = OpLoad %int %i_1
-               OpStore %param %79
-         %80 = OpLoad %int %j_1
-               OpStore %param_1 %80
-         %81 = OpLoad %int %param
-         %82 = OpAccessChain %_ptr_Private_int %obj %uint_0 %81
-         %83 = OpLoad %int %82
-               OpStore %x_315 %83
-         %84 = OpLoad %int %param
-         %85 = OpLoad %int %param_1
-         %86 = OpAccessChain %_ptr_Private_int %obj %uint_0 %85
-         %87 = OpLoad %int %86
-         %88 = OpAccessChain %_ptr_Private_int %obj %uint_0 %84
-               OpStore %88 %87
-         %89 = OpLoad %int %param_1
-         %90 = OpLoad %int %x_315
-         %91 = OpAccessChain %_ptr_Private_int %obj %uint_0 %89
-               OpStore %91 %90
-               OpBranch %75
-         %75 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-         %92 = OpLoad %int %j_1
-         %93 = OpIAdd %int %92 %int_1
-               OpStore %j_1 %93
-               OpBranch %57
-         %58 = OpLabel
-         %94 = OpLoad %int %i_1
-         %95 = OpIAdd %int %94 %int_1
-               OpStore %param_2 %95
-         %97 = OpLoad %int %h
-               OpStore %param_3 %97
-         %98 = OpLoad %int %param_2
-         %99 = OpAccessChain %_ptr_Private_int %obj %uint_0 %98
-        %100 = OpLoad %int %99
-               OpStore %x_314 %100
-        %101 = OpLoad %int %param_2
-        %102 = OpLoad %int %param_3
-        %103 = OpAccessChain %_ptr_Private_int %obj %uint_0 %102
-        %104 = OpLoad %int %103
-        %105 = OpAccessChain %_ptr_Private_int %obj %uint_0 %101
-               OpStore %105 %104
-        %106 = OpLoad %int %param_3
-        %107 = OpLoad %int %x_314
-        %108 = OpAccessChain %_ptr_Private_int %obj %uint_0 %106
-               OpStore %108 %107
-               OpSelectionMerge %110 None
-               OpBranchConditional %false %111 %112
-        %111 = OpLabel
-               OpBranch %110
-        %112 = OpLabel
-        %113 = OpLoad %int %i_1
-        %114 = OpIAdd %int %113 %int_1
-               OpReturnValue %114
-        %110 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %116
-        %119 = OpLabel
-       %x_91 = OpVariable %_ptr_Function_int Function %36
-       %x_92 = OpVariable %_ptr_Function_int Function %36
-       %x_93 = OpVariable %_ptr_Function_int Function %36
-       %x_94 = OpVariable %_ptr_Function__arr_int_uint_10 Function %125
-       %x_95 = OpVariable %_ptr_Function_int Function %36
-       %x_96 = OpVariable %_ptr_Function_int Function %36
-       %x_97 = OpVariable %_ptr_Function_int Function %36
-        %i_2 = OpVariable %_ptr_Function_int Function %36
-         %uv = OpVariable %_ptr_Function_v2float Function %132
-      %color = OpVariable %_ptr_Function_v3float Function %136
-        %137 = OpLoad %v4float %x_GLF_pos
-        %141 = OpFAdd %v4float %137 %140
-        %144 = OpFMul %v4float %141 %143
-               OpStore %x_GLF_FragCoord %144
-               OpStore %i_2 %int_0
-               OpBranch %145
-        %145 = OpLabel
-               OpLoopMerge %146 %147 None
-               OpBranch %148
-        %148 = OpLabel
-        %149 = OpLoad %int %i_2
-        %151 = OpSLessThan %bool %149 %int_10
-               OpSelectionMerge %152 None
-               OpBranchConditional %151 %153 %154
-        %153 = OpLabel
-               OpBranch %152
-        %154 = OpLabel
-               OpBranch %146
-        %152 = OpLabel
-        %155 = OpLoad %int %i_2
-        %156 = OpLoad %int %i_2
-        %157 = OpAccessChain %_ptr_Private_int %obj %uint_0 %155
-        %158 = OpISub %int %int_10 %156
-               OpStore %157 %158
-        %159 = OpLoad %int %i_2
-        %160 = OpLoad %int %i_2
-        %161 = OpAccessChain %_ptr_Private_int %obj %uint_0 %160
-        %162 = OpLoad %int %161
-        %163 = OpLoad %int %i_2
-        %164 = OpAccessChain %_ptr_Private_int %obj %uint_0 %163
-        %165 = OpLoad %int %164
-        %166 = OpAccessChain %_ptr_Private_int %obj %uint_0 %159
-        %167 = OpIMul %int %162 %165
-               OpStore %166 %167
-               OpBranch %147
-        %147 = OpLabel
-        %168 = OpLoad %int %i_2
-        %169 = OpIAdd %int %168 %int_1
-               OpStore %i_2 %169
-               OpBranch %145
-        %146 = OpLabel
-               OpStore %x_91 %int_0
-               OpStore %x_92 %int_9
-               OpStore %x_93 %int_n1
-        %172 = OpLoad %int %x_93
-        %173 = OpIAdd %int %172 %int_1
-               OpStore %x_93 %173
-        %174 = OpLoad %int %x_91
-        %175 = OpAccessChain %_ptr_Function_int %x_94 %173
-               OpStore %175 %174
-        %176 = OpLoad %int %x_93
-        %177 = OpIAdd %int %176 %int_1
-               OpStore %x_93 %177
-        %178 = OpLoad %int %x_92
-        %179 = OpAccessChain %_ptr_Function_int %x_94 %177
-               OpStore %179 %178
-               OpBranch %180
-        %180 = OpLabel
-               OpLoopMerge %181 %182 None
-               OpBranch %183
-        %183 = OpLabel
-        %184 = OpLoad %int %x_93
-        %185 = OpSGreaterThanEqual %bool %184 %int_0
-               OpSelectionMerge %186 None
-               OpBranchConditional %185 %187 %188
-        %187 = OpLabel
-               OpBranch %186
-        %188 = OpLabel
-               OpBranch %181
-        %186 = OpLabel
-        %189 = OpLoad %int %x_93
-        %190 = OpISub %int %189 %int_1
-               OpStore %x_93 %190
-        %191 = OpAccessChain %_ptr_Function_int %x_94 %189
-        %192 = OpLoad %int %191
-               OpStore %x_92 %192
-        %193 = OpLoad %int %x_93
-        %194 = OpISub %int %193 %int_1
-               OpStore %x_93 %194
-        %195 = OpAccessChain %_ptr_Function_int %x_94 %193
-        %196 = OpLoad %int %195
-               OpStore %x_91 %196
-        %197 = OpLoad %int %x_91
-               OpStore %x_96 %197
-        %198 = OpLoad %int %x_92
-               OpStore %x_97 %198
-        %199 = OpFunctionCall %int %performPartition_i1_i1_ %x_96 %x_97
-               OpStore %x_95 %199
-        %202 = OpLoad %int %x_95
-        %203 = OpLoad %int %x_91
-        %204 = OpISub %int %202 %int_1
-        %205 = OpSGreaterThan %bool %204 %203
-               OpSelectionMerge %206 None
-               OpBranchConditional %205 %207 %206
-        %207 = OpLabel
-        %208 = OpLoad %int %x_93
-        %209 = OpIAdd %int %208 %int_1
-               OpStore %x_93 %209
-        %210 = OpLoad %int %x_91
-        %211 = OpAccessChain %_ptr_Function_int %x_94 %209
-               OpStore %211 %210
-        %212 = OpLoad %int %x_93
-        %213 = OpIAdd %int %212 %int_1
-               OpStore %x_93 %213
-        %214 = OpLoad %int %x_95
-        %215 = OpAccessChain %_ptr_Function_int %x_94 %213
-        %216 = OpISub %int %214 %int_1
-               OpStore %215 %216
-               OpBranch %206
-        %206 = OpLabel
-        %217 = OpLoad %int %x_95
-        %218 = OpLoad %int %x_92
-        %219 = OpIAdd %int %217 %int_1
-        %220 = OpSLessThan %bool %219 %218
-               OpSelectionMerge %221 None
-               OpBranchConditional %220 %222 %221
-        %222 = OpLabel
-        %223 = OpLoad %int %x_93
-        %224 = OpIAdd %int %223 %int_1
-               OpStore %x_93 %224
-        %225 = OpLoad %int %x_95
-        %226 = OpAccessChain %_ptr_Function_int %x_94 %224
-        %227 = OpIAdd %int %225 %int_1
-               OpStore %226 %227
-        %228 = OpLoad %int %x_93
-        %229 = OpIAdd %int %228 %int_1
-               OpStore %x_93 %229
-        %230 = OpLoad %int %x_92
-        %231 = OpAccessChain %_ptr_Function_int %x_94 %229
-               OpStore %231 %230
-               OpBranch %221
-        %221 = OpLabel
-               OpBranch %182
-        %182 = OpLabel
-               OpBranch %180
-        %181 = OpLabel
-        %232 = OpLoad %v4float %x_GLF_FragCoord
-        %234 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %235 = OpLoad %v2float %234
-        %236 = OpCompositeExtract %float %232 0
-        %237 = OpCompositeExtract %float %232 1
-        %238 = OpCompositeConstruct %v2float %236 %237
-        %239 = OpFDiv %v2float %238 %235
-               OpStore %uv %239
-               OpStore %color %242
-        %243 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %244 = OpLoad %int %243
-        %246 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %247 = OpLoad %float %246
-        %248 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %249 = OpConvertSToF %float %244
-        %250 = OpFAdd %float %247 %249
-               OpStore %248 %250
-        %251 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %252 = OpLoad %float %251
-        %254 = OpFOrdGreaterThan %bool %252 %float_0_25
-               OpSelectionMerge %255 None
-               OpBranchConditional %254 %256 %255
-        %256 = OpLabel
-        %257 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %258 = OpLoad %int %257
-        %259 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %260 = OpLoad %float %259
-        %261 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %262 = OpConvertSToF %float %258
-        %263 = OpFAdd %float %260 %262
-               OpStore %261 %263
-               OpBranch %255
-        %255 = OpLabel
-        %264 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %265 = OpLoad %float %264
-        %267 = OpFOrdGreaterThan %bool %265 %float_0_5
-               OpSelectionMerge %268 None
-               OpBranchConditional %267 %269 %268
-        %269 = OpLabel
-        %271 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_2
-        %272 = OpLoad %int %271
-        %274 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %275 = OpLoad %float %274
-        %276 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %277 = OpConvertSToF %float %272
-        %278 = OpFAdd %float %275 %277
-               OpStore %276 %278
-               OpBranch %268
-        %268 = OpLabel
-        %279 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %280 = OpLoad %float %279
-        %282 = OpFOrdGreaterThan %bool %280 %float_0_75
-               OpSelectionMerge %283 None
-               OpBranchConditional %282 %284 %283
-        %284 = OpLabel
-        %286 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %287 = OpLoad %int %286
-        %289 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %290 = OpLoad %float %289
-        %291 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %292 = OpConvertSToF %float %287
-        %293 = OpFAdd %float %290 %292
-               OpStore %291 %293
-               OpBranch %283
-        %283 = OpLabel
-        %295 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %296 = OpLoad %int %295
-        %297 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %298 = OpLoad %float %297
-        %299 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %300 = OpConvertSToF %float %296
-        %301 = OpFAdd %float %298 %300
-               OpStore %299 %301
-        %302 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %303 = OpLoad %float %302
-        %304 = OpFOrdGreaterThan %bool %303 %float_0_25
-               OpSelectionMerge %305 None
-               OpBranchConditional %304 %306 %305
-        %306 = OpLabel
-        %308 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %309 = OpLoad %int %308
-        %310 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %311 = OpLoad %float %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %313 = OpConvertSToF %float %309
-        %314 = OpFAdd %float %311 %313
-               OpStore %312 %314
-               OpBranch %305
-        %305 = OpLabel
-        %315 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %316 = OpLoad %float %315
-        %317 = OpFOrdGreaterThan %bool %316 %float_0_5
-               OpSelectionMerge %318 None
-               OpBranchConditional %317 %319 %318
-        %319 = OpLabel
-        %321 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %322 = OpLoad %int %321
-        %323 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %324 = OpLoad %float %323
-        %325 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %326 = OpConvertSToF %float %322
-        %327 = OpFAdd %float %324 %326
-               OpStore %325 %327
-               OpBranch %318
-        %318 = OpLabel
-        %328 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %329 = OpLoad %float %328
-        %330 = OpFOrdGreaterThan %bool %329 %float_0_75
-               OpSelectionMerge %331 None
-               OpBranchConditional %330 %332 %331
-        %332 = OpLabel
-        %334 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %335 = OpLoad %int %334
-        %336 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %337 = OpLoad %float %336
-        %338 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %339 = OpConvertSToF %float %335
-        %340 = OpFAdd %float %337 %339
-               OpStore %338 %340
-               OpBranch %331
-        %331 = OpLabel
-        %342 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %343 = OpLoad %int %342
-        %344 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %345 = OpLoad %float %344
-        %346 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %347 = OpConvertSToF %float %343
-        %348 = OpFAdd %float %345 %347
-               OpStore %346 %348
-        %349 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %350 = OpLoad %float %349
-        %351 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %352 = OpLoad %float %351
-        %355 = OpFSub %float %350 %352
-        %353 = OpExtInst %float %354 FAbs %355
-        %356 = OpFOrdLessThan %bool %353 %float_0_25
-               OpSelectionMerge %357 None
-               OpBranchConditional %356 %358 %357
-        %358 = OpLabel
-        %359 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %360 = OpLoad %int %359
-        %361 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %362 = OpLoad %float %361
-        %363 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %364 = OpConvertSToF %float %360
-        %365 = OpFAdd %float %362 %364
-               OpStore %363 %365
-               OpBranch %357
-        %357 = OpLabel
-        %366 = OpLoad %v3float %color
-        %367 = OpExtInst %v3float %354 Normalize %366
-        %368 = OpCompositeExtract %float %367 0
-        %369 = OpCompositeExtract %float %367 1
-        %370 = OpCompositeExtract %float %367 2
-        %371 = OpCompositeConstruct %v4float %368 %369 %370 %float_1
-               OpStore %frag_color %371
-        %372 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %372
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %373
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %377 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %378 = OpFunctionCall %void %main_1
-        %379 = OpLoad %v4float %frag_color
-        %380 = OpLoad %v4float %gl_Position
-        %381 = OpCompositeConstruct %main_out %379 %380
-               OpReturnValue %381
-               OpFunctionEnd
-       %main = OpFunction %void None %116
-        %383 = OpLabel
-        %385 = OpLoad %v4float %x_GLF_pos_param_1
-        %384 = OpFunctionCall %main_out %main_inner %385
-        %386 = OpCompositeExtract %v4float %384 0
-               OpStore %frag_color_1_1 %386
-        %387 = OpCompositeExtract %v4float %384 1
-               OpStore %gl_Position_1 %387
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
-%swap_i1_i1_ = OpFunction %void None %388
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-        %392 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %36
-        %395 = OpLoad %int %i
-        %396 = OpAccessChain %_ptr_Private_int %obj %uint_0 %395
-        %397 = OpLoad %int %396
-               OpStore %temp %397
-        %399 = OpLoad %int %i
-        %401 = OpLoad %int %j
-        %402 = OpAccessChain %_ptr_Private_int %obj %uint_0 %401
-        %403 = OpLoad %int %402
-        %404 = OpAccessChain %_ptr_Private_int %obj %uint_0 %399
-               OpStore %404 %403
-        %406 = OpLoad %int %j
-        %407 = OpLoad %int %temp
-        %408 = OpAccessChain %_ptr_Private_int %obj %uint_0 %406
-               OpStore %408 %407
-               OpReturn
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %116
-        %410 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %36
-        %h_1 = OpVariable %_ptr_Function_int Function %36
-        %top = OpVariable %_ptr_Function_int Function %36
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %125
-          %p = OpVariable %_ptr_Function_int Function %36
-    %param_4 = OpVariable %_ptr_Function_int Function %36
-    %param_5 = OpVariable %_ptr_Function_int Function %36
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %418 = OpLoad %int %top
-        %419 = OpIAdd %int %418 %int_1
-               OpStore %top %419
-        %420 = OpLoad %int %l_1
-        %421 = OpAccessChain %_ptr_Function_int %stack %419
-               OpStore %421 %420
-        %422 = OpLoad %int %top
-        %423 = OpIAdd %int %422 %int_1
-               OpStore %top %423
-        %424 = OpLoad %int %h_1
-        %425 = OpAccessChain %_ptr_Function_int %stack %423
-               OpStore %425 %424
-               OpBranch %426
-        %426 = OpLabel
-               OpLoopMerge %427 %428 None
-               OpBranch %429
-        %429 = OpLabel
-        %430 = OpLoad %int %top
-        %431 = OpSGreaterThanEqual %bool %430 %int_0
-               OpSelectionMerge %432 None
-               OpBranchConditional %431 %433 %434
-        %433 = OpLabel
-               OpBranch %432
-        %434 = OpLabel
-               OpBranch %427
-        %432 = OpLabel
-        %435 = OpLoad %int %top
-        %436 = OpISub %int %435 %int_1
-               OpStore %top %436
-        %437 = OpAccessChain %_ptr_Function_int %stack %435
-        %438 = OpLoad %int %437
-               OpStore %h_1 %438
-        %439 = OpLoad %int %top
-        %440 = OpISub %int %439 %int_1
-               OpStore %top %440
-        %441 = OpAccessChain %_ptr_Function_int %stack %439
-        %442 = OpLoad %int %441
-               OpStore %l_1 %442
-        %443 = OpLoad %int %l_1
-               OpStore %param_4 %443
-        %444 = OpLoad %int %h_1
-               OpStore %param_5 %444
-        %445 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %445
-        %448 = OpLoad %int %p
-        %449 = OpLoad %int %l_1
-        %450 = OpISub %int %448 %int_1
-        %451 = OpSGreaterThan %bool %450 %449
-               OpSelectionMerge %452 None
-               OpBranchConditional %451 %453 %452
-        %453 = OpLabel
-        %454 = OpLoad %int %top
-        %455 = OpIAdd %int %454 %int_1
-               OpStore %top %455
-        %456 = OpLoad %int %l_1
-        %457 = OpAccessChain %_ptr_Function_int %stack %455
-               OpStore %457 %456
-        %458 = OpLoad %int %top
-        %459 = OpIAdd %int %458 %int_1
-               OpStore %top %459
-        %460 = OpLoad %int %p
-        %461 = OpAccessChain %_ptr_Function_int %stack %459
-        %462 = OpISub %int %460 %int_1
-               OpStore %461 %462
-               OpBranch %452
-        %452 = OpLabel
-        %463 = OpLoad %int %p
-        %464 = OpLoad %int %h_1
-        %465 = OpIAdd %int %463 %int_1
-        %466 = OpSLessThan %bool %465 %464
-               OpSelectionMerge %467 None
-               OpBranchConditional %466 %468 %467
-        %468 = OpLabel
-        %469 = OpLoad %int %top
-        %470 = OpIAdd %int %469 %int_1
-               OpStore %top %470
-        %471 = OpLoad %int %p
-        %472 = OpAccessChain %_ptr_Function_int %stack %470
-        %473 = OpIAdd %int %471 %int_1
-               OpStore %472 %473
-        %474 = OpLoad %int %top
-        %475 = OpIAdd %int %474 %int_1
-               OpStore %top %475
-        %476 = OpLoad %int %h_1
-        %477 = OpAccessChain %_ptr_Function_int %stack %475
-               OpStore %477 %476
-               OpBranch %467
-        %467 = OpLabel
-               OpBranch %428
-        %428 = OpLabel
-               OpBranch %426
-        %427 = OpLabel
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.wgsl
deleted file mode 100644
index 7c15a5c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.wgsl
+++ /dev/null
@@ -1,356 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_34 : buf0;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var x_314 : i32;
-  var x_315 : i32;
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_316 : i32 = *(h);
-  let x_318 : i32 = obj.numbers[x_316];
-  pivot = x_318;
-  let x_319 : i32 = *(l);
-  i_1 = (x_319 - 1);
-  let x_321 : i32 = *(l);
-  j_1 = x_321;
-  loop {
-    let x_326 : i32 = j_1;
-    let x_327 : i32 = *(h);
-    if ((x_326 <= (x_327 - 1))) {
-    } else {
-      break;
-    }
-    let x_331 : i32 = j_1;
-    let x_333 : i32 = obj.numbers[x_331];
-    let x_334 : i32 = pivot;
-    if ((x_333 <= x_334)) {
-      let x_338 : i32 = i_1;
-      i_1 = (x_338 + 1);
-      let x_340 : i32 = i_1;
-      param = x_340;
-      let x_341 : i32 = j_1;
-      param_1 = x_341;
-      let x_342 : i32 = param;
-      let x_344 : i32 = obj.numbers[x_342];
-      x_315 = x_344;
-      let x_345 : i32 = param;
-      let x_346 : i32 = param_1;
-      let x_348 : i32 = obj.numbers[x_346];
-      obj.numbers[x_345] = x_348;
-      let x_350 : i32 = param_1;
-      let x_351 : i32 = x_315;
-      obj.numbers[x_350] = x_351;
-    }
-
-    continuing {
-      let x_353 : i32 = j_1;
-      j_1 = (x_353 + 1);
-    }
-  }
-  let x_355 : i32 = i_1;
-  param_2 = (x_355 + 1);
-  let x_357 : i32 = *(h);
-  param_3 = x_357;
-  let x_358 : i32 = param_2;
-  let x_360 : i32 = obj.numbers[x_358];
-  x_314 = x_360;
-  let x_361 : i32 = param_2;
-  let x_362 : i32 = param_3;
-  let x_364 : i32 = obj.numbers[x_362];
-  obj.numbers[x_361] = x_364;
-  let x_366 : i32 = param_3;
-  let x_367 : i32 = x_314;
-  obj.numbers[x_366] = x_367;
-  if (false) {
-  } else {
-    let x_372 : i32 = i_1;
-    return (x_372 + 1);
-  }
-  return 0;
-}
-
-fn main_1() {
-  var x_91 : i32;
-  var x_92 : i32;
-  var x_93 : i32;
-  var x_94 : array<i32, 10>;
-  var x_95 : i32;
-  var x_96 : i32;
-  var x_97 : i32;
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_98 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_98 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_105 : i32 = i_2;
-    if ((x_105 < 10)) {
-    } else {
-      break;
-    }
-    let x_108 : i32 = i_2;
-    let x_109 : i32 = i_2;
-    obj.numbers[x_108] = (10 - x_109);
-    let x_112 : i32 = i_2;
-    let x_113 : i32 = i_2;
-    let x_115 : i32 = obj.numbers[x_113];
-    let x_116 : i32 = i_2;
-    let x_118 : i32 = obj.numbers[x_116];
-    obj.numbers[x_112] = (x_115 * x_118);
-
-    continuing {
-      let x_121 : i32 = i_2;
-      i_2 = (x_121 + 1);
-    }
-  }
-  x_91 = 0;
-  x_92 = 9;
-  x_93 = -1;
-  let x_123 : i32 = x_93;
-  let x_124 : i32 = (x_123 + 1);
-  x_93 = x_124;
-  let x_125 : i32 = x_91;
-  x_94[x_124] = x_125;
-  let x_127 : i32 = x_93;
-  let x_128 : i32 = (x_127 + 1);
-  x_93 = x_128;
-  let x_129 : i32 = x_92;
-  x_94[x_128] = x_129;
-  loop {
-    let x_135 : i32 = x_93;
-    if ((x_135 >= 0)) {
-    } else {
-      break;
-    }
-    let x_138 : i32 = x_93;
-    x_93 = (x_138 - 1);
-    let x_141 : i32 = x_94[x_138];
-    x_92 = x_141;
-    let x_142 : i32 = x_93;
-    x_93 = (x_142 - 1);
-    let x_145 : i32 = x_94[x_142];
-    x_91 = x_145;
-    let x_146 : i32 = x_91;
-    x_96 = x_146;
-    let x_147 : i32 = x_92;
-    x_97 = x_147;
-    let x_148 : i32 = performPartition_i1_i1_(&(x_96), &(x_97));
-    x_95 = x_148;
-    let x_149 : i32 = x_95;
-    let x_151 : i32 = x_91;
-    if (((x_149 - 1) > x_151)) {
-      let x_155 : i32 = x_93;
-      let x_156 : i32 = (x_155 + 1);
-      x_93 = x_156;
-      let x_157 : i32 = x_91;
-      x_94[x_156] = x_157;
-      let x_159 : i32 = x_93;
-      let x_160 : i32 = (x_159 + 1);
-      x_93 = x_160;
-      let x_161 : i32 = x_95;
-      x_94[x_160] = (x_161 - 1);
-    }
-    let x_164 : i32 = x_95;
-    let x_166 : i32 = x_92;
-    if (((x_164 + 1) < x_166)) {
-      let x_170 : i32 = x_93;
-      let x_171 : i32 = (x_170 + 1);
-      x_93 = x_171;
-      let x_172 : i32 = x_95;
-      x_94[x_171] = (x_172 + 1);
-      let x_175 : i32 = x_93;
-      let x_176 : i32 = (x_175 + 1);
-      x_93 = x_176;
-      let x_177 : i32 = x_92;
-      x_94[x_176] = x_177;
-    }
-  }
-  let x_179 : vec4<f32> = x_GLF_FragCoord;
-  let x_182 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_179.x, x_179.y) / x_182);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_185 : i32 = obj.numbers[0];
-  let x_188 : f32 = color.x;
-  color.x = (x_188 + f32(x_185));
-  let x_192 : f32 = uv.x;
-  if ((x_192 > 0.25)) {
-    let x_197 : i32 = obj.numbers[1];
-    let x_200 : f32 = color.x;
-    color.x = (x_200 + f32(x_197));
-  }
-  let x_204 : f32 = uv.x;
-  if ((x_204 > 0.5)) {
-    let x_209 : i32 = obj.numbers[2];
-    let x_212 : f32 = color.y;
-    color.y = (x_212 + f32(x_209));
-  }
-  let x_216 : f32 = uv.x;
-  if ((x_216 > 0.75)) {
-    let x_221 : i32 = obj.numbers[3];
-    let x_224 : f32 = color.z;
-    color.z = (x_224 + f32(x_221));
-  }
-  let x_228 : i32 = obj.numbers[4];
-  let x_231 : f32 = color.y;
-  color.y = (x_231 + f32(x_228));
-  let x_235 : f32 = uv.y;
-  if ((x_235 > 0.25)) {
-    let x_240 : i32 = obj.numbers[5];
-    let x_243 : f32 = color.x;
-    color.x = (x_243 + f32(x_240));
-  }
-  let x_247 : f32 = uv.y;
-  if ((x_247 > 0.5)) {
-    let x_252 : i32 = obj.numbers[6];
-    let x_255 : f32 = color.y;
-    color.y = (x_255 + f32(x_252));
-  }
-  let x_259 : f32 = uv.y;
-  if ((x_259 > 0.75)) {
-    let x_264 : i32 = obj.numbers[7];
-    let x_267 : f32 = color.z;
-    color.z = (x_267 + f32(x_264));
-  }
-  let x_271 : i32 = obj.numbers[8];
-  let x_274 : f32 = color.z;
-  color.z = (x_274 + f32(x_271));
-  let x_278 : f32 = uv.x;
-  let x_280 : f32 = uv.y;
-  if ((abs((x_278 - x_280)) < 0.25)) {
-    let x_287 : i32 = obj.numbers[9];
-    let x_290 : f32 = color.x;
-    color.x = (x_290 + f32(x_287));
-  }
-  let x_293 : vec3<f32> = color;
-  let x_294 : vec3<f32> = normalize(x_293);
-  frag_color = vec4<f32>(x_294.x, x_294.y, x_294.z, 1.0);
-  let x_299 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_299;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_302 : i32 = *(i);
-  let x_304 : i32 = obj.numbers[x_302];
-  temp = x_304;
-  let x_305 : i32 = *(i);
-  let x_306 : i32 = *(j);
-  let x_308 : i32 = obj.numbers[x_306];
-  obj.numbers[x_305] = x_308;
-  let x_310 : i32 = *(j);
-  let x_311 : i32 = temp;
-  obj.numbers[x_310] = x_311;
-  return;
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_376 : i32 = top;
-  let x_377 : i32 = (x_376 + 1);
-  top = x_377;
-  let x_378 : i32 = l_1;
-  stack[x_377] = x_378;
-  let x_380 : i32 = top;
-  let x_381 : i32 = (x_380 + 1);
-  top = x_381;
-  let x_382 : i32 = h_1;
-  stack[x_381] = x_382;
-  loop {
-    let x_388 : i32 = top;
-    if ((x_388 >= 0)) {
-    } else {
-      break;
-    }
-    let x_391 : i32 = top;
-    top = (x_391 - 1);
-    let x_394 : i32 = stack[x_391];
-    h_1 = x_394;
-    let x_395 : i32 = top;
-    top = (x_395 - 1);
-    let x_398 : i32 = stack[x_395];
-    l_1 = x_398;
-    let x_399 : i32 = l_1;
-    param_4 = x_399;
-    let x_400 : i32 = h_1;
-    param_5 = x_400;
-    let x_401 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_401;
-    let x_402 : i32 = p;
-    let x_404 : i32 = l_1;
-    if (((x_402 - 1) > x_404)) {
-      let x_408 : i32 = top;
-      let x_409 : i32 = (x_408 + 1);
-      top = x_409;
-      let x_410 : i32 = l_1;
-      stack[x_409] = x_410;
-      let x_412 : i32 = top;
-      let x_413 : i32 = (x_412 + 1);
-      top = x_413;
-      let x_414 : i32 = p;
-      stack[x_413] = (x_414 - 1);
-    }
-    let x_417 : i32 = p;
-    let x_419 : i32 = h_1;
-    if (((x_417 + 1) < x_419)) {
-      let x_423 : i32 = top;
-      let x_424 : i32 = (x_423 + 1);
-      top = x_424;
-      let x_425 : i32 = p;
-      stack[x_424] = (x_425 + 1);
-      let x_428 : i32 = top;
-      let x_429 : i32 = (x_428 + 1);
-      top = x_429;
-      let x_430 : i32 = h_1;
-      stack[x_429] = x_430;
-    }
-  }
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.hlsl
deleted file mode 100644
index 070307a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,231 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b1, space0) {
-  uint4 x_34[1];
-};
-cbuffer cbuffer_x_37 : register(b0, space0) {
-  uint4 x_37[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_257 = i;
-  const int x_259 = obj.numbers[x_257];
-  temp = x_259;
-  const int x_260 = i;
-  const int x_261 = j;
-  const int x_263 = obj.numbers[x_261];
-  obj.numbers[x_260] = x_263;
-  const int x_265 = j;
-  obj.numbers[x_265] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_269 = h;
-  const int x_271 = obj.numbers[x_269];
-  pivot = x_271;
-  const int x_272 = l;
-  i_1 = (x_272 - 1);
-  const int x_274 = l;
-  j_1 = x_274;
-  while (true) {
-    const int x_279 = j_1;
-    const int x_280 = h;
-    if ((x_279 <= (x_280 - 1))) {
-    } else {
-      break;
-    }
-    const int x_286 = obj.numbers[j_1];
-    if ((x_286 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_300 = h;
-  param_3 = x_300;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_306 = (top + 1);
-  top = x_306;
-  stack[x_306] = l_1;
-  const int x_310 = (top + 1);
-  top = x_310;
-  stack[x_310] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_320 = top;
-    top = (x_320 - 1);
-    const int x_323 = stack[x_320];
-    h_1 = x_323;
-    const int x_324 = top;
-    top = (x_324 - 1);
-    const int x_327 = stack[x_324];
-    l_1 = x_327;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_330 = performPartition_i1_i1_(param_4, param_5);
-    p = x_330;
-    if (((p - 1) > l_1)) {
-      const int x_338 = (top + 1);
-      top = x_338;
-      stack[x_338] = l_1;
-      const int x_342 = (top + 1);
-      top = x_342;
-      stack[x_342] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_353 = (top + 1);
-      top = x_353;
-      stack[x_353] = (p + 1);
-      const int x_358 = (top + 1);
-      top = x_358;
-      stack[x_358] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_108 = i_2;
-      const int x_111 = obj.numbers[i_2];
-      const int x_114 = obj.numbers[i_2];
-      obj.numbers[x_108] = (x_111 * x_114);
-    }
-  }
-  quicksort_();
-  const float4 x_120 = x_GLF_FragCoord;
-  const float2 x_123 = asfloat(x_34[0].xy);
-  uv = (float2(x_120.x, x_120.y) / x_123);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_126 = obj.numbers[0];
-  const float x_129 = color.x;
-  color.x = (x_129 + float(x_126));
-  const float x_133 = uv.x;
-  if ((x_133 > 0.25f)) {
-    const int x_138 = obj.numbers[1];
-    const float x_141 = color.x;
-    color.x = (x_141 + float(x_138));
-  }
-  const float x_145 = uv.x;
-  if ((x_145 > 0.5f)) {
-    const float x_150 = asfloat(x_37[0].y);
-    const int x_155 = obj.numbers[max((2 * int(x_150)), 2)];
-    const float x_158 = asfloat(x_37[0].y);
-    const int x_163 = obj.numbers[max((2 * int(x_158)), 2)];
-    const float x_167 = color.y;
-    color.y = (x_167 + max(float(x_155), float(x_163)));
-  }
-  const float x_171 = uv.x;
-  if ((x_171 > 0.75f)) {
-    const int x_176 = obj.numbers[3];
-    const float x_179 = color.z;
-    color.z = (x_179 + float(x_176));
-  }
-  const int x_183 = obj.numbers[4];
-  const float x_186 = color.y;
-  color.y = (x_186 + float(x_183));
-  const float x_190 = uv.y;
-  if ((x_190 > 0.25f)) {
-    const int x_195 = obj.numbers[5];
-    const float x_198 = color.x;
-    color.x = (x_198 + float(x_195));
-  }
-  const float x_202 = uv.y;
-  if ((x_202 > 0.5f)) {
-    const int x_207 = obj.numbers[6];
-    const float x_210 = color.y;
-    color.y = (x_210 + float(x_207));
-  }
-  const float x_214 = uv.y;
-  if ((x_214 > 0.75f)) {
-    const int x_219 = obj.numbers[7];
-    const float x_222 = color.z;
-    color.z = (x_222 + float(x_219));
-  }
-  const int x_226 = obj.numbers[8];
-  const float x_229 = color.z;
-  color.z = (x_229 + float(x_226));
-  const float x_233 = uv.x;
-  const float x_235 = uv.y;
-  if ((abs((x_233 - x_235)) < 0.25f)) {
-    const int x_242 = obj.numbers[9];
-    const float x_245 = color.x;
-    color.x = (x_245 + float(x_242));
-  }
-  const float3 x_249 = normalize(color);
-  frag_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_5 = {frag_color, gl_Position};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.msl
deleted file mode 100644
index a05603d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,278 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_5) {
-  int temp = 0;
-  int const x_257 = *(i);
-  int const x_259 = (*(tint_symbol_5)).numbers.arr[x_257];
-  temp = x_259;
-  int const x_260 = *(i);
-  int const x_261 = *(j);
-  int const x_263 = (*(tint_symbol_5)).numbers.arr[x_261];
-  (*(tint_symbol_5)).numbers.arr[x_260] = x_263;
-  int const x_265 = *(j);
-  int const x_266 = temp;
-  (*(tint_symbol_5)).numbers.arr[x_265] = x_266;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_6) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_269 = *(h);
-  int const x_271 = (*(tint_symbol_6)).numbers.arr[x_269];
-  pivot = x_271;
-  int const x_272 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_272) - as_type<uint>(1)));
-  int const x_274 = *(l);
-  j_1 = x_274;
-  while (true) {
-    int const x_279 = j_1;
-    int const x_280 = *(h);
-    if ((x_279 <= as_type<int>((as_type<uint>(x_280) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_284 = j_1;
-    int const x_286 = (*(tint_symbol_6)).numbers.arr[x_284];
-    int const x_287 = pivot;
-    if ((x_286 <= x_287)) {
-      int const x_291 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
-      int const x_293 = i_1;
-      param = x_293;
-      int const x_294 = j_1;
-      param_1 = x_294;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_6);
-    }
-    {
-      int const x_296 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_296) + as_type<uint>(1)));
-    }
-  }
-  int const x_298 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_298) + as_type<uint>(1)));
-  int const x_300 = *(h);
-  param_3 = x_300;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_6);
-  int const x_302 = i_1;
-  return as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_7) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_305 = top;
-  int const x_306 = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
-  top = x_306;
-  int const x_307 = l_1;
-  stack.arr[x_306] = x_307;
-  int const x_309 = top;
-  int const x_310 = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
-  top = x_310;
-  int const x_311 = h_1;
-  stack.arr[x_310] = x_311;
-  while (true) {
-    int const x_317 = top;
-    if ((x_317 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_320 = top;
-    top = as_type<int>((as_type<uint>(x_320) - as_type<uint>(1)));
-    int const x_323 = stack.arr[x_320];
-    h_1 = x_323;
-    int const x_324 = top;
-    top = as_type<int>((as_type<uint>(x_324) - as_type<uint>(1)));
-    int const x_327 = stack.arr[x_324];
-    l_1 = x_327;
-    int const x_328 = l_1;
-    param_4 = x_328;
-    int const x_329 = h_1;
-    param_5 = x_329;
-    int const x_330 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_7);
-    p = x_330;
-    int const x_331 = p;
-    int const x_333 = l_1;
-    if ((as_type<int>((as_type<uint>(x_331) - as_type<uint>(1))) > x_333)) {
-      int const x_337 = top;
-      int const x_338 = as_type<int>((as_type<uint>(x_337) + as_type<uint>(1)));
-      top = x_338;
-      int const x_339 = l_1;
-      stack.arr[x_338] = x_339;
-      int const x_341 = top;
-      int const x_342 = as_type<int>((as_type<uint>(x_341) + as_type<uint>(1)));
-      top = x_342;
-      int const x_343 = p;
-      stack.arr[x_342] = as_type<int>((as_type<uint>(x_343) - as_type<uint>(1)));
-    }
-    int const x_346 = p;
-    int const x_348 = h_1;
-    if ((as_type<int>((as_type<uint>(x_346) + as_type<uint>(1))) < x_348)) {
-      int const x_352 = top;
-      int const x_353 = as_type<int>((as_type<uint>(x_352) + as_type<uint>(1)));
-      top = x_353;
-      int const x_354 = p;
-      stack.arr[x_353] = as_type<int>((as_type<uint>(x_354) + as_type<uint>(1)));
-      int const x_357 = top;
-      int const x_358 = as_type<int>((as_type<uint>(x_357) + as_type<uint>(1)));
-      top = x_358;
-      int const x_359 = h_1;
-      stack.arr[x_358] = x_359;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf1& x_34, constant buf0& x_37, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_94 = *(tint_symbol_8);
-  *(tint_symbol_9) = ((x_94 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_101 = i_2;
-    if ((x_101 < 10)) {
-    } else {
-      break;
-    }
-    int const x_104 = i_2;
-    int const x_105 = i_2;
-    (*(tint_symbol_10)).numbers.arr[x_104] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_105)));
-    int const x_108 = i_2;
-    int const x_109 = i_2;
-    int const x_111 = (*(tint_symbol_10)).numbers.arr[x_109];
-    int const x_112 = i_2;
-    int const x_114 = (*(tint_symbol_10)).numbers.arr[x_112];
-    (*(tint_symbol_10)).numbers.arr[x_108] = as_type<int>((as_type<uint>(x_111) * as_type<uint>(x_114)));
-    {
-      int const x_117 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_10);
-  float4 const x_120 = *(tint_symbol_9);
-  float2 const x_123 = x_34.resolution;
-  uv = (float2(x_120.x, x_120.y) / x_123);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_126 = (*(tint_symbol_10)).numbers.arr[0];
-  float const x_129 = color.x;
-  color.x = (x_129 + float(x_126));
-  float const x_133 = uv.x;
-  if ((x_133 > 0.25f)) {
-    int const x_138 = (*(tint_symbol_10)).numbers.arr[1];
-    float const x_141 = color.x;
-    color.x = (x_141 + float(x_138));
-  }
-  float const x_145 = uv.x;
-  if ((x_145 > 0.5f)) {
-    float const x_150 = x_37.injectionSwitch.y;
-    int const x_155 = (*(tint_symbol_10)).numbers.arr[max(as_type<int>((as_type<uint>(2) * as_type<uint>(int(x_150)))), 2)];
-    float const x_158 = x_37.injectionSwitch.y;
-    int const x_163 = (*(tint_symbol_10)).numbers.arr[max(as_type<int>((as_type<uint>(2) * as_type<uint>(int(x_158)))), 2)];
-    float const x_167 = color.y;
-    color.y = (x_167 + fmax(float(x_155), float(x_163)));
-  }
-  float const x_171 = uv.x;
-  if ((x_171 > 0.75f)) {
-    int const x_176 = (*(tint_symbol_10)).numbers.arr[3];
-    float const x_179 = color.z;
-    color.z = (x_179 + float(x_176));
-  }
-  int const x_183 = (*(tint_symbol_10)).numbers.arr[4];
-  float const x_186 = color.y;
-  color.y = (x_186 + float(x_183));
-  float const x_190 = uv.y;
-  if ((x_190 > 0.25f)) {
-    int const x_195 = (*(tint_symbol_10)).numbers.arr[5];
-    float const x_198 = color.x;
-    color.x = (x_198 + float(x_195));
-  }
-  float const x_202 = uv.y;
-  if ((x_202 > 0.5f)) {
-    int const x_207 = (*(tint_symbol_10)).numbers.arr[6];
-    float const x_210 = color.y;
-    color.y = (x_210 + float(x_207));
-  }
-  float const x_214 = uv.y;
-  if ((x_214 > 0.75f)) {
-    int const x_219 = (*(tint_symbol_10)).numbers.arr[7];
-    float const x_222 = color.z;
-    color.z = (x_222 + float(x_219));
-  }
-  int const x_226 = (*(tint_symbol_10)).numbers.arr[8];
-  float const x_229 = color.z;
-  color.z = (x_229 + float(x_226));
-  float const x_233 = uv.x;
-  float const x_235 = uv.y;
-  if ((fabs((x_233 - x_235)) < 0.25f)) {
-    int const x_242 = (*(tint_symbol_10)).numbers.arr[9];
-    float const x_245 = color.x;
-    color.x = (x_245 + float(x_242));
-  }
-  float3 const x_248 = color;
-  float3 const x_249 = normalize(x_248);
-  *(tint_symbol_11) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  float4 const x_254 = *(tint_symbol_8);
-  *(tint_symbol_12) = x_254;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_34, constant buf0& x_37, float4 x_GLF_pos_param, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14, thread QuicksortObject* const tint_symbol_15, thread float4* const tint_symbol_16, thread float4* const tint_symbol_17) {
-  *(tint_symbol_13) = x_GLF_pos_param;
-  main_1(x_34, x_37, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16, tint_symbol_17);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_16), .gl_Position=*(tint_symbol_17)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf1& x_34 [[buffer(0)]], constant buf0& x_37 [[buffer(1)]]) {
-  thread float4 tint_symbol_18 = 0.0f;
-  thread float4 tint_symbol_19 = 0.0f;
-  thread QuicksortObject tint_symbol_20 = {};
-  thread float4 tint_symbol_21 = 0.0f;
-  thread float4 tint_symbol_22 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, x_37, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20), &(tint_symbol_21), &(tint_symbol_22));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.spvasm
deleted file mode 100644
index e255866..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,593 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 408
-; Schema: 0
-               OpCapability Shader
-        %280 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_37 "x_37"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_37 NonWritable
-               OpDecorate %x_37 DescriptorSet 0
-               OpDecorate %x_37 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_34 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_37 = OpVariable %_ptr_Uniform_buf0 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %40 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %58 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %118 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %126 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %198 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %202 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %206 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-        %209 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %247 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %393 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %32
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %38 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %40
-         %42 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
-         %46 = OpLoad %int %45
-               OpStore %temp %46
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %j
-         %51 = OpAccessChain %_ptr_Private_int %obj %uint_0 %50
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
-               OpStore %53 %52
-         %55 = OpLoad %int %j
-         %56 = OpLoad %int %temp
-         %57 = OpAccessChain %_ptr_Private_int %obj %uint_0 %55
-               OpStore %57 %56
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %58
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %62 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %40
-        %i_1 = OpVariable %_ptr_Function_int Function %40
-        %j_1 = OpVariable %_ptr_Function_int Function %40
-      %param = OpVariable %_ptr_Function_int Function %40
-    %param_1 = OpVariable %_ptr_Function_int Function %40
-    %param_2 = OpVariable %_ptr_Function_int Function %40
-    %param_3 = OpVariable %_ptr_Function_int Function %40
-         %71 = OpLoad %int %h
-         %72 = OpAccessChain %_ptr_Private_int %obj %uint_0 %71
-         %73 = OpLoad %int %72
-               OpStore %pivot %73
-         %75 = OpLoad %int %l
-         %77 = OpISub %int %75 %int_1
-               OpStore %i_1 %77
-         %79 = OpLoad %int %l
-               OpStore %j_1 %79
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %j_1
-         %86 = OpLoad %int %h
-         %87 = OpISub %int %86 %int_1
-         %88 = OpSLessThanEqual %bool %84 %87
-               OpSelectionMerge %90 None
-               OpBranchConditional %88 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %81
-         %90 = OpLabel
-         %93 = OpLoad %int %j_1
-         %94 = OpAccessChain %_ptr_Private_int %obj %uint_0 %93
-         %95 = OpLoad %int %94
-         %96 = OpLoad %int %pivot
-         %97 = OpSLessThanEqual %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpLoad %int %i_1
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %i_1 %101
-        %102 = OpLoad %int %i_1
-               OpStore %param %102
-        %103 = OpLoad %int %j_1
-               OpStore %param_1 %103
-        %104 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %98
-         %98 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-        %107 = OpLoad %int %j_1
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %j_1 %108
-               OpBranch %80
-         %81 = OpLabel
-        %109 = OpLoad %int %i_1
-        %110 = OpIAdd %int %109 %int_1
-               OpStore %param_2 %110
-        %112 = OpLoad %int %h
-               OpStore %param_3 %112
-        %113 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %116 = OpLoad %int %i_1
-        %117 = OpIAdd %int %116 %int_1
-               OpReturnValue %117
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %118
-        %120 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %40
-        %h_1 = OpVariable %_ptr_Function_int Function %40
-        %top = OpVariable %_ptr_Function_int Function %40
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %126
-          %p = OpVariable %_ptr_Function_int Function %40
-    %param_4 = OpVariable %_ptr_Function_int Function %40
-    %param_5 = OpVariable %_ptr_Function_int Function %40
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %133 = OpLoad %int %top
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %top %134
-        %135 = OpLoad %int %l_1
-        %136 = OpAccessChain %_ptr_Function_int %stack %134
-               OpStore %136 %135
-        %137 = OpLoad %int %top
-        %138 = OpIAdd %int %137 %int_1
-               OpStore %top %138
-        %139 = OpLoad %int %h_1
-        %140 = OpAccessChain %_ptr_Function_int %stack %138
-               OpStore %140 %139
-               OpBranch %141
-        %141 = OpLabel
-               OpLoopMerge %142 %143 None
-               OpBranch %144
-        %144 = OpLabel
-        %145 = OpLoad %int %top
-        %146 = OpSGreaterThanEqual %bool %145 %int_0
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %149
-        %148 = OpLabel
-               OpBranch %147
-        %149 = OpLabel
-               OpBranch %142
-        %147 = OpLabel
-        %150 = OpLoad %int %top
-        %151 = OpISub %int %150 %int_1
-               OpStore %top %151
-        %152 = OpAccessChain %_ptr_Function_int %stack %150
-        %153 = OpLoad %int %152
-               OpStore %h_1 %153
-        %154 = OpLoad %int %top
-        %155 = OpISub %int %154 %int_1
-               OpStore %top %155
-        %156 = OpAccessChain %_ptr_Function_int %stack %154
-        %157 = OpLoad %int %156
-               OpStore %l_1 %157
-        %158 = OpLoad %int %l_1
-               OpStore %param_4 %158
-        %159 = OpLoad %int %h_1
-               OpStore %param_5 %159
-        %160 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %160
-        %163 = OpLoad %int %p
-        %164 = OpLoad %int %l_1
-        %165 = OpISub %int %163 %int_1
-        %166 = OpSGreaterThan %bool %165 %164
-               OpSelectionMerge %167 None
-               OpBranchConditional %166 %168 %167
-        %168 = OpLabel
-        %169 = OpLoad %int %top
-        %170 = OpIAdd %int %169 %int_1
-               OpStore %top %170
-        %171 = OpLoad %int %l_1
-        %172 = OpAccessChain %_ptr_Function_int %stack %170
-               OpStore %172 %171
-        %173 = OpLoad %int %top
-        %174 = OpIAdd %int %173 %int_1
-               OpStore %top %174
-        %175 = OpLoad %int %p
-        %176 = OpAccessChain %_ptr_Function_int %stack %174
-        %177 = OpISub %int %175 %int_1
-               OpStore %176 %177
-               OpBranch %167
-        %167 = OpLabel
-        %178 = OpLoad %int %p
-        %179 = OpLoad %int %h_1
-        %180 = OpIAdd %int %178 %int_1
-        %181 = OpSLessThan %bool %180 %179
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %top
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %top %185
-        %186 = OpLoad %int %p
-        %187 = OpAccessChain %_ptr_Function_int %stack %185
-        %188 = OpIAdd %int %186 %int_1
-               OpStore %187 %188
-        %189 = OpLoad %int %top
-        %190 = OpIAdd %int %189 %int_1
-               OpStore %top %190
-        %191 = OpLoad %int %h_1
-        %192 = OpAccessChain %_ptr_Function_int %stack %190
-               OpStore %192 %191
-               OpBranch %182
-        %182 = OpLabel
-               OpBranch %143
-        %143 = OpLabel
-               OpBranch %141
-        %142 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %118
-        %194 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %40
-         %uv = OpVariable %_ptr_Function_v2float Function %198
-      %color = OpVariable %_ptr_Function_v3float Function %202
-        %203 = OpLoad %v4float %x_GLF_pos
-        %207 = OpFAdd %v4float %203 %206
-        %210 = OpFMul %v4float %207 %209
-               OpStore %x_GLF_FragCoord %210
-               OpStore %i_2 %int_0
-               OpBranch %211
-        %211 = OpLabel
-               OpLoopMerge %212 %213 None
-               OpBranch %214
-        %214 = OpLabel
-        %215 = OpLoad %int %i_2
-        %217 = OpSLessThan %bool %215 %int_10
-               OpSelectionMerge %218 None
-               OpBranchConditional %217 %219 %220
-        %219 = OpLabel
-               OpBranch %218
-        %220 = OpLabel
-               OpBranch %212
-        %218 = OpLabel
-        %221 = OpLoad %int %i_2
-        %222 = OpLoad %int %i_2
-        %223 = OpAccessChain %_ptr_Private_int %obj %uint_0 %221
-        %224 = OpISub %int %int_10 %222
-               OpStore %223 %224
-        %225 = OpLoad %int %i_2
-        %226 = OpLoad %int %i_2
-        %227 = OpAccessChain %_ptr_Private_int %obj %uint_0 %226
-        %228 = OpLoad %int %227
-        %229 = OpLoad %int %i_2
-        %230 = OpAccessChain %_ptr_Private_int %obj %uint_0 %229
-        %231 = OpLoad %int %230
-        %232 = OpAccessChain %_ptr_Private_int %obj %uint_0 %225
-        %233 = OpIMul %int %228 %231
-               OpStore %232 %233
-               OpBranch %213
-        %213 = OpLabel
-        %234 = OpLoad %int %i_2
-        %235 = OpIAdd %int %234 %int_1
-               OpStore %i_2 %235
-               OpBranch %211
-        %212 = OpLabel
-        %236 = OpFunctionCall %void %quicksort_
-        %237 = OpLoad %v4float %x_GLF_FragCoord
-        %239 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %240 = OpLoad %v2float %239
-        %241 = OpCompositeExtract %float %237 0
-        %242 = OpCompositeExtract %float %237 1
-        %243 = OpCompositeConstruct %v2float %241 %242
-        %244 = OpFDiv %v2float %243 %240
-               OpStore %uv %244
-               OpStore %color %247
-        %248 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %249 = OpLoad %int %248
-        %251 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %252 = OpLoad %float %251
-        %253 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %254 = OpConvertSToF %float %249
-        %255 = OpFAdd %float %252 %254
-               OpStore %253 %255
-        %256 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %257 = OpLoad %float %256
-        %259 = OpFOrdGreaterThan %bool %257 %float_0_25
-               OpSelectionMerge %260 None
-               OpBranchConditional %259 %261 %260
-        %261 = OpLabel
-        %262 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %263 = OpLoad %int %262
-        %264 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %265 = OpLoad %float %264
-        %266 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %267 = OpConvertSToF %float %263
-        %268 = OpFAdd %float %265 %267
-               OpStore %266 %268
-               OpBranch %260
-        %260 = OpLabel
-        %269 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %270 = OpLoad %float %269
-        %272 = OpFOrdGreaterThan %bool %270 %float_0_5
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %273
-        %274 = OpLabel
-        %277 = OpAccessChain %_ptr_Uniform_float %x_37 %uint_0 %uint_1
-        %278 = OpLoad %float %277
-        %282 = OpConvertFToS %int %278
-        %283 = OpIMul %int %int_2 %282
-        %279 = OpExtInst %int %280 SMax %283 %int_2
-        %284 = OpAccessChain %_ptr_Private_int %obj %uint_0 %279
-        %285 = OpLoad %int %284
-        %286 = OpAccessChain %_ptr_Uniform_float %x_37 %uint_0 %uint_1
-        %287 = OpLoad %float %286
-        %289 = OpConvertFToS %int %287
-        %290 = OpIMul %int %int_2 %289
-        %288 = OpExtInst %int %280 SMax %290 %int_2
-        %291 = OpAccessChain %_ptr_Private_int %obj %uint_0 %288
-        %292 = OpLoad %int %291
-        %293 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %294 = OpLoad %float %293
-        %295 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %297 = OpConvertSToF %float %285
-        %298 = OpConvertSToF %float %292
-        %296 = OpExtInst %float %280 NMax %297 %298
-        %299 = OpFAdd %float %294 %296
-               OpStore %295 %299
-               OpBranch %273
-        %273 = OpLabel
-        %300 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %301 = OpLoad %float %300
-        %303 = OpFOrdGreaterThan %bool %301 %float_0_75
-               OpSelectionMerge %304 None
-               OpBranchConditional %303 %305 %304
-        %305 = OpLabel
-        %307 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %308 = OpLoad %int %307
-        %310 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %311 = OpLoad %float %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %313 = OpConvertSToF %float %308
-        %314 = OpFAdd %float %311 %313
-               OpStore %312 %314
-               OpBranch %304
-        %304 = OpLabel
-        %316 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %317 = OpLoad %int %316
-        %318 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %319 = OpLoad %float %318
-        %320 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %321 = OpConvertSToF %float %317
-        %322 = OpFAdd %float %319 %321
-               OpStore %320 %322
-        %323 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %324 = OpLoad %float %323
-        %325 = OpFOrdGreaterThan %bool %324 %float_0_25
-               OpSelectionMerge %326 None
-               OpBranchConditional %325 %327 %326
-        %327 = OpLabel
-        %329 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %330 = OpLoad %int %329
-        %331 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %332 = OpLoad %float %331
-        %333 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %334 = OpConvertSToF %float %330
-        %335 = OpFAdd %float %332 %334
-               OpStore %333 %335
-               OpBranch %326
-        %326 = OpLabel
-        %336 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %337 = OpLoad %float %336
-        %338 = OpFOrdGreaterThan %bool %337 %float_0_5
-               OpSelectionMerge %339 None
-               OpBranchConditional %338 %340 %339
-        %340 = OpLabel
-        %342 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %343 = OpLoad %int %342
-        %344 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %345 = OpLoad %float %344
-        %346 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %347 = OpConvertSToF %float %343
-        %348 = OpFAdd %float %345 %347
-               OpStore %346 %348
-               OpBranch %339
-        %339 = OpLabel
-        %349 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %350 = OpLoad %float %349
-        %351 = OpFOrdGreaterThan %bool %350 %float_0_75
-               OpSelectionMerge %352 None
-               OpBranchConditional %351 %353 %352
-        %353 = OpLabel
-        %355 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %356 = OpLoad %int %355
-        %357 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %358 = OpLoad %float %357
-        %359 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %360 = OpConvertSToF %float %356
-        %361 = OpFAdd %float %358 %360
-               OpStore %359 %361
-               OpBranch %352
-        %352 = OpLabel
-        %363 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %364 = OpLoad %int %363
-        %365 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %366 = OpLoad %float %365
-        %367 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %368 = OpConvertSToF %float %364
-        %369 = OpFAdd %float %366 %368
-               OpStore %367 %369
-        %370 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %371 = OpLoad %float %370
-        %372 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %373 = OpLoad %float %372
-        %375 = OpFSub %float %371 %373
-        %374 = OpExtInst %float %280 FAbs %375
-        %376 = OpFOrdLessThan %bool %374 %float_0_25
-               OpSelectionMerge %377 None
-               OpBranchConditional %376 %378 %377
-        %378 = OpLabel
-        %379 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %380 = OpLoad %int %379
-        %381 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %382 = OpLoad %float %381
-        %383 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %384 = OpConvertSToF %float %380
-        %385 = OpFAdd %float %382 %384
-               OpStore %383 %385
-               OpBranch %377
-        %377 = OpLabel
-        %386 = OpLoad %v3float %color
-        %387 = OpExtInst %v3float %280 Normalize %386
-        %388 = OpCompositeExtract %float %387 0
-        %389 = OpCompositeExtract %float %387 1
-        %390 = OpCompositeExtract %float %387 2
-        %391 = OpCompositeConstruct %v4float %388 %389 %390 %float_1
-               OpStore %frag_color %391
-        %392 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %392
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %393
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %397 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %398 = OpFunctionCall %void %main_1
-        %399 = OpLoad %v4float %frag_color
-        %400 = OpLoad %v4float %gl_Position
-        %401 = OpCompositeConstruct %main_out %399 %400
-               OpReturnValue %401
-               OpFunctionEnd
-       %main = OpFunction %void None %118
-        %403 = OpLabel
-        %405 = OpLoad %v4float %x_GLF_pos_param_1
-        %404 = OpFunctionCall %main_out %main_inner %405
-        %406 = OpCompositeExtract %v4float %404 0
-               OpStore %frag_color_1_1 %406
-        %407 = OpCompositeExtract %v4float %404 1
-               OpStore %gl_Position_1 %407
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3d6cec0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,274 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_34 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_37 : buf0;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_257 : i32 = *(i);
-  let x_259 : i32 = obj.numbers[x_257];
-  temp = x_259;
-  let x_260 : i32 = *(i);
-  let x_261 : i32 = *(j);
-  let x_263 : i32 = obj.numbers[x_261];
-  obj.numbers[x_260] = x_263;
-  let x_265 : i32 = *(j);
-  let x_266 : i32 = temp;
-  obj.numbers[x_265] = x_266;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_269 : i32 = *(h);
-  let x_271 : i32 = obj.numbers[x_269];
-  pivot = x_271;
-  let x_272 : i32 = *(l);
-  i_1 = (x_272 - 1);
-  let x_274 : i32 = *(l);
-  j_1 = x_274;
-  loop {
-    let x_279 : i32 = j_1;
-    let x_280 : i32 = *(h);
-    if ((x_279 <= (x_280 - 1))) {
-    } else {
-      break;
-    }
-    let x_284 : i32 = j_1;
-    let x_286 : i32 = obj.numbers[x_284];
-    let x_287 : i32 = pivot;
-    if ((x_286 <= x_287)) {
-      let x_291 : i32 = i_1;
-      i_1 = (x_291 + 1);
-      let x_293 : i32 = i_1;
-      param = x_293;
-      let x_294 : i32 = j_1;
-      param_1 = x_294;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_296 : i32 = j_1;
-      j_1 = (x_296 + 1);
-    }
-  }
-  let x_298 : i32 = i_1;
-  param_2 = (x_298 + 1);
-  let x_300 : i32 = *(h);
-  param_3 = x_300;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_302 : i32 = i_1;
-  return (x_302 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_305 : i32 = top;
-  let x_306 : i32 = (x_305 + 1);
-  top = x_306;
-  let x_307 : i32 = l_1;
-  stack[x_306] = x_307;
-  let x_309 : i32 = top;
-  let x_310 : i32 = (x_309 + 1);
-  top = x_310;
-  let x_311 : i32 = h_1;
-  stack[x_310] = x_311;
-  loop {
-    let x_317 : i32 = top;
-    if ((x_317 >= 0)) {
-    } else {
-      break;
-    }
-    let x_320 : i32 = top;
-    top = (x_320 - 1);
-    let x_323 : i32 = stack[x_320];
-    h_1 = x_323;
-    let x_324 : i32 = top;
-    top = (x_324 - 1);
-    let x_327 : i32 = stack[x_324];
-    l_1 = x_327;
-    let x_328 : i32 = l_1;
-    param_4 = x_328;
-    let x_329 : i32 = h_1;
-    param_5 = x_329;
-    let x_330 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_330;
-    let x_331 : i32 = p;
-    let x_333 : i32 = l_1;
-    if (((x_331 - 1) > x_333)) {
-      let x_337 : i32 = top;
-      let x_338 : i32 = (x_337 + 1);
-      top = x_338;
-      let x_339 : i32 = l_1;
-      stack[x_338] = x_339;
-      let x_341 : i32 = top;
-      let x_342 : i32 = (x_341 + 1);
-      top = x_342;
-      let x_343 : i32 = p;
-      stack[x_342] = (x_343 - 1);
-    }
-    let x_346 : i32 = p;
-    let x_348 : i32 = h_1;
-    if (((x_346 + 1) < x_348)) {
-      let x_352 : i32 = top;
-      let x_353 : i32 = (x_352 + 1);
-      top = x_353;
-      let x_354 : i32 = p;
-      stack[x_353] = (x_354 + 1);
-      let x_357 : i32 = top;
-      let x_358 : i32 = (x_357 + 1);
-      top = x_358;
-      let x_359 : i32 = h_1;
-      stack[x_358] = x_359;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_94 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_94 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_101 : i32 = i_2;
-    if ((x_101 < 10)) {
-    } else {
-      break;
-    }
-    let x_104 : i32 = i_2;
-    let x_105 : i32 = i_2;
-    obj.numbers[x_104] = (10 - x_105);
-    let x_108 : i32 = i_2;
-    let x_109 : i32 = i_2;
-    let x_111 : i32 = obj.numbers[x_109];
-    let x_112 : i32 = i_2;
-    let x_114 : i32 = obj.numbers[x_112];
-    obj.numbers[x_108] = (x_111 * x_114);
-
-    continuing {
-      let x_117 : i32 = i_2;
-      i_2 = (x_117 + 1);
-    }
-  }
-  quicksort_();
-  let x_120 : vec4<f32> = x_GLF_FragCoord;
-  let x_123 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_120.x, x_120.y) / x_123);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_126 : i32 = obj.numbers[0];
-  let x_129 : f32 = color.x;
-  color.x = (x_129 + f32(x_126));
-  let x_133 : f32 = uv.x;
-  if ((x_133 > 0.25)) {
-    let x_138 : i32 = obj.numbers[1];
-    let x_141 : f32 = color.x;
-    color.x = (x_141 + f32(x_138));
-  }
-  let x_145 : f32 = uv.x;
-  if ((x_145 > 0.5)) {
-    let x_150 : f32 = x_37.injectionSwitch.y;
-    let x_155 : i32 = obj.numbers[max((2 * i32(x_150)), 2)];
-    let x_158 : f32 = x_37.injectionSwitch.y;
-    let x_163 : i32 = obj.numbers[max((2 * i32(x_158)), 2)];
-    let x_167 : f32 = color.y;
-    color.y = (x_167 + max(f32(x_155), f32(x_163)));
-  }
-  let x_171 : f32 = uv.x;
-  if ((x_171 > 0.75)) {
-    let x_176 : i32 = obj.numbers[3];
-    let x_179 : f32 = color.z;
-    color.z = (x_179 + f32(x_176));
-  }
-  let x_183 : i32 = obj.numbers[4];
-  let x_186 : f32 = color.y;
-  color.y = (x_186 + f32(x_183));
-  let x_190 : f32 = uv.y;
-  if ((x_190 > 0.25)) {
-    let x_195 : i32 = obj.numbers[5];
-    let x_198 : f32 = color.x;
-    color.x = (x_198 + f32(x_195));
-  }
-  let x_202 : f32 = uv.y;
-  if ((x_202 > 0.5)) {
-    let x_207 : i32 = obj.numbers[6];
-    let x_210 : f32 = color.y;
-    color.y = (x_210 + f32(x_207));
-  }
-  let x_214 : f32 = uv.y;
-  if ((x_214 > 0.75)) {
-    let x_219 : i32 = obj.numbers[7];
-    let x_222 : f32 = color.z;
-    color.z = (x_222 + f32(x_219));
-  }
-  let x_226 : i32 = obj.numbers[8];
-  let x_229 : f32 = color.z;
-  color.z = (x_229 + f32(x_226));
-  let x_233 : f32 = uv.x;
-  let x_235 : f32 = uv.y;
-  if ((abs((x_233 - x_235)) < 0.25)) {
-    let x_242 : i32 = obj.numbers[9];
-    let x_245 : f32 = color.x;
-    color.x = (x_245 + f32(x_242));
-  }
-  let x_248 : vec3<f32> = color;
-  let x_249 : vec3<f32> = normalize(x_248);
-  frag_color = vec4<f32>(x_249.x, x_249.y, x_249.z, 1.0);
-  let x_254 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_254;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.hlsl
deleted file mode 100644
index 070307a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,231 +0,0 @@
-struct QuicksortObject {
-  int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b1, space0) {
-  uint4 x_34[1];
-};
-cbuffer cbuffer_x_37 : register(b0, space0) {
-  uint4 x_37[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
-  int temp = 0;
-  const int x_257 = i;
-  const int x_259 = obj.numbers[x_257];
-  temp = x_259;
-  const int x_260 = i;
-  const int x_261 = j;
-  const int x_263 = obj.numbers[x_261];
-  obj.numbers[x_260] = x_263;
-  const int x_265 = j;
-  obj.numbers[x_265] = temp;
-  return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  const int x_269 = h;
-  const int x_271 = obj.numbers[x_269];
-  pivot = x_271;
-  const int x_272 = l;
-  i_1 = (x_272 - 1);
-  const int x_274 = l;
-  j_1 = x_274;
-  while (true) {
-    const int x_279 = j_1;
-    const int x_280 = h;
-    if ((x_279 <= (x_280 - 1))) {
-    } else {
-      break;
-    }
-    const int x_286 = obj.numbers[j_1];
-    if ((x_286 <= pivot)) {
-      i_1 = (i_1 + 1);
-      param = i_1;
-      param_1 = j_1;
-      swap_i1_i1_(param, param_1);
-    }
-    {
-      j_1 = (j_1 + 1);
-    }
-  }
-  param_2 = (i_1 + 1);
-  const int x_300 = h;
-  param_3 = x_300;
-  swap_i1_i1_(param_2, param_3);
-  return (i_1 + 1);
-}
-
-void quicksort_() {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  int stack[10] = (int[10])0;
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  const int x_306 = (top + 1);
-  top = x_306;
-  stack[x_306] = l_1;
-  const int x_310 = (top + 1);
-  top = x_310;
-  stack[x_310] = h_1;
-  while (true) {
-    if ((top >= 0)) {
-    } else {
-      break;
-    }
-    const int x_320 = top;
-    top = (x_320 - 1);
-    const int x_323 = stack[x_320];
-    h_1 = x_323;
-    const int x_324 = top;
-    top = (x_324 - 1);
-    const int x_327 = stack[x_324];
-    l_1 = x_327;
-    param_4 = l_1;
-    param_5 = h_1;
-    const int x_330 = performPartition_i1_i1_(param_4, param_5);
-    p = x_330;
-    if (((p - 1) > l_1)) {
-      const int x_338 = (top + 1);
-      top = x_338;
-      stack[x_338] = l_1;
-      const int x_342 = (top + 1);
-      top = x_342;
-      stack[x_342] = (p - 1);
-    }
-    if (((p + 1) < h_1)) {
-      const int x_353 = (top + 1);
-      top = x_353;
-      stack[x_353] = (p + 1);
-      const int x_358 = (top + 1);
-      top = x_358;
-      stack[x_358] = h_1;
-    }
-  }
-  return;
-}
-
-void main_1() {
-  int i_2 = 0;
-  float2 uv = float2(0.0f, 0.0f);
-  float3 color = float3(0.0f, 0.0f, 0.0f);
-  x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  {
-    for(; (i_2 < 10); i_2 = (i_2 + 1)) {
-      obj.numbers[i_2] = (10 - i_2);
-      const int x_108 = i_2;
-      const int x_111 = obj.numbers[i_2];
-      const int x_114 = obj.numbers[i_2];
-      obj.numbers[x_108] = (x_111 * x_114);
-    }
-  }
-  quicksort_();
-  const float4 x_120 = x_GLF_FragCoord;
-  const float2 x_123 = asfloat(x_34[0].xy);
-  uv = (float2(x_120.x, x_120.y) / x_123);
-  color = float3(1.0f, 2.0f, 3.0f);
-  const int x_126 = obj.numbers[0];
-  const float x_129 = color.x;
-  color.x = (x_129 + float(x_126));
-  const float x_133 = uv.x;
-  if ((x_133 > 0.25f)) {
-    const int x_138 = obj.numbers[1];
-    const float x_141 = color.x;
-    color.x = (x_141 + float(x_138));
-  }
-  const float x_145 = uv.x;
-  if ((x_145 > 0.5f)) {
-    const float x_150 = asfloat(x_37[0].y);
-    const int x_155 = obj.numbers[max((2 * int(x_150)), 2)];
-    const float x_158 = asfloat(x_37[0].y);
-    const int x_163 = obj.numbers[max((2 * int(x_158)), 2)];
-    const float x_167 = color.y;
-    color.y = (x_167 + max(float(x_155), float(x_163)));
-  }
-  const float x_171 = uv.x;
-  if ((x_171 > 0.75f)) {
-    const int x_176 = obj.numbers[3];
-    const float x_179 = color.z;
-    color.z = (x_179 + float(x_176));
-  }
-  const int x_183 = obj.numbers[4];
-  const float x_186 = color.y;
-  color.y = (x_186 + float(x_183));
-  const float x_190 = uv.y;
-  if ((x_190 > 0.25f)) {
-    const int x_195 = obj.numbers[5];
-    const float x_198 = color.x;
-    color.x = (x_198 + float(x_195));
-  }
-  const float x_202 = uv.y;
-  if ((x_202 > 0.5f)) {
-    const int x_207 = obj.numbers[6];
-    const float x_210 = color.y;
-    color.y = (x_210 + float(x_207));
-  }
-  const float x_214 = uv.y;
-  if ((x_214 > 0.75f)) {
-    const int x_219 = obj.numbers[7];
-    const float x_222 = color.z;
-    color.z = (x_222 + float(x_219));
-  }
-  const int x_226 = obj.numbers[8];
-  const float x_229 = color.z;
-  color.z = (x_229 + float(x_226));
-  const float x_233 = uv.x;
-  const float x_235 = uv.y;
-  if ((abs((x_233 - x_235)) < 0.25f)) {
-    const int x_242 = obj.numbers[9];
-    const float x_245 = color.x;
-    color.x = (x_245 + float(x_242));
-  }
-  const float3 x_249 = normalize(color);
-  frag_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  gl_Position = x_GLF_pos;
-  return;
-}
-
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 frag_color_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  const main_out tint_symbol_5 = {frag_color, gl_Position};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.msl
deleted file mode 100644
index a05603d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,278 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  int arr[10];
-};
-struct QuicksortObject {
-  tint_array_wrapper numbers;
-};
-struct buf1 {
-  /* 0x0000 */ float2 resolution;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 frag_color_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_pos_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 frag_color_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_5) {
-  int temp = 0;
-  int const x_257 = *(i);
-  int const x_259 = (*(tint_symbol_5)).numbers.arr[x_257];
-  temp = x_259;
-  int const x_260 = *(i);
-  int const x_261 = *(j);
-  int const x_263 = (*(tint_symbol_5)).numbers.arr[x_261];
-  (*(tint_symbol_5)).numbers.arr[x_260] = x_263;
-  int const x_265 = *(j);
-  int const x_266 = temp;
-  (*(tint_symbol_5)).numbers.arr[x_265] = x_266;
-  return;
-}
-
-int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_6) {
-  int pivot = 0;
-  int i_1 = 0;
-  int j_1 = 0;
-  int param = 0;
-  int param_1 = 0;
-  int param_2 = 0;
-  int param_3 = 0;
-  int const x_269 = *(h);
-  int const x_271 = (*(tint_symbol_6)).numbers.arr[x_269];
-  pivot = x_271;
-  int const x_272 = *(l);
-  i_1 = as_type<int>((as_type<uint>(x_272) - as_type<uint>(1)));
-  int const x_274 = *(l);
-  j_1 = x_274;
-  while (true) {
-    int const x_279 = j_1;
-    int const x_280 = *(h);
-    if ((x_279 <= as_type<int>((as_type<uint>(x_280) - as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_284 = j_1;
-    int const x_286 = (*(tint_symbol_6)).numbers.arr[x_284];
-    int const x_287 = pivot;
-    if ((x_286 <= x_287)) {
-      int const x_291 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_291) + as_type<uint>(1)));
-      int const x_293 = i_1;
-      param = x_293;
-      int const x_294 = j_1;
-      param_1 = x_294;
-      swap_i1_i1_(&(param), &(param_1), tint_symbol_6);
-    }
-    {
-      int const x_296 = j_1;
-      j_1 = as_type<int>((as_type<uint>(x_296) + as_type<uint>(1)));
-    }
-  }
-  int const x_298 = i_1;
-  param_2 = as_type<int>((as_type<uint>(x_298) + as_type<uint>(1)));
-  int const x_300 = *(h);
-  param_3 = x_300;
-  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_6);
-  int const x_302 = i_1;
-  return as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
-}
-
-void quicksort_(thread QuicksortObject* const tint_symbol_7) {
-  int l_1 = 0;
-  int h_1 = 0;
-  int top = 0;
-  tint_array_wrapper stack = {};
-  int p = 0;
-  int param_4 = 0;
-  int param_5 = 0;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  int const x_305 = top;
-  int const x_306 = as_type<int>((as_type<uint>(x_305) + as_type<uint>(1)));
-  top = x_306;
-  int const x_307 = l_1;
-  stack.arr[x_306] = x_307;
-  int const x_309 = top;
-  int const x_310 = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
-  top = x_310;
-  int const x_311 = h_1;
-  stack.arr[x_310] = x_311;
-  while (true) {
-    int const x_317 = top;
-    if ((x_317 >= 0)) {
-    } else {
-      break;
-    }
-    int const x_320 = top;
-    top = as_type<int>((as_type<uint>(x_320) - as_type<uint>(1)));
-    int const x_323 = stack.arr[x_320];
-    h_1 = x_323;
-    int const x_324 = top;
-    top = as_type<int>((as_type<uint>(x_324) - as_type<uint>(1)));
-    int const x_327 = stack.arr[x_324];
-    l_1 = x_327;
-    int const x_328 = l_1;
-    param_4 = x_328;
-    int const x_329 = h_1;
-    param_5 = x_329;
-    int const x_330 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_7);
-    p = x_330;
-    int const x_331 = p;
-    int const x_333 = l_1;
-    if ((as_type<int>((as_type<uint>(x_331) - as_type<uint>(1))) > x_333)) {
-      int const x_337 = top;
-      int const x_338 = as_type<int>((as_type<uint>(x_337) + as_type<uint>(1)));
-      top = x_338;
-      int const x_339 = l_1;
-      stack.arr[x_338] = x_339;
-      int const x_341 = top;
-      int const x_342 = as_type<int>((as_type<uint>(x_341) + as_type<uint>(1)));
-      top = x_342;
-      int const x_343 = p;
-      stack.arr[x_342] = as_type<int>((as_type<uint>(x_343) - as_type<uint>(1)));
-    }
-    int const x_346 = p;
-    int const x_348 = h_1;
-    if ((as_type<int>((as_type<uint>(x_346) + as_type<uint>(1))) < x_348)) {
-      int const x_352 = top;
-      int const x_353 = as_type<int>((as_type<uint>(x_352) + as_type<uint>(1)));
-      top = x_353;
-      int const x_354 = p;
-      stack.arr[x_353] = as_type<int>((as_type<uint>(x_354) + as_type<uint>(1)));
-      int const x_357 = top;
-      int const x_358 = as_type<int>((as_type<uint>(x_357) + as_type<uint>(1)));
-      top = x_358;
-      int const x_359 = h_1;
-      stack.arr[x_358] = x_359;
-    }
-  }
-  return;
-}
-
-void main_1(constant buf1& x_34, constant buf0& x_37, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread QuicksortObject* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  int i_2 = 0;
-  float2 uv = 0.0f;
-  float3 color = 0.0f;
-  float4 const x_94 = *(tint_symbol_8);
-  *(tint_symbol_9) = ((x_94 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
-  i_2 = 0;
-  while (true) {
-    int const x_101 = i_2;
-    if ((x_101 < 10)) {
-    } else {
-      break;
-    }
-    int const x_104 = i_2;
-    int const x_105 = i_2;
-    (*(tint_symbol_10)).numbers.arr[x_104] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_105)));
-    int const x_108 = i_2;
-    int const x_109 = i_2;
-    int const x_111 = (*(tint_symbol_10)).numbers.arr[x_109];
-    int const x_112 = i_2;
-    int const x_114 = (*(tint_symbol_10)).numbers.arr[x_112];
-    (*(tint_symbol_10)).numbers.arr[x_108] = as_type<int>((as_type<uint>(x_111) * as_type<uint>(x_114)));
-    {
-      int const x_117 = i_2;
-      i_2 = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-    }
-  }
-  quicksort_(tint_symbol_10);
-  float4 const x_120 = *(tint_symbol_9);
-  float2 const x_123 = x_34.resolution;
-  uv = (float2(x_120.x, x_120.y) / x_123);
-  color = float3(1.0f, 2.0f, 3.0f);
-  int const x_126 = (*(tint_symbol_10)).numbers.arr[0];
-  float const x_129 = color.x;
-  color.x = (x_129 + float(x_126));
-  float const x_133 = uv.x;
-  if ((x_133 > 0.25f)) {
-    int const x_138 = (*(tint_symbol_10)).numbers.arr[1];
-    float const x_141 = color.x;
-    color.x = (x_141 + float(x_138));
-  }
-  float const x_145 = uv.x;
-  if ((x_145 > 0.5f)) {
-    float const x_150 = x_37.injectionSwitch.y;
-    int const x_155 = (*(tint_symbol_10)).numbers.arr[max(as_type<int>((as_type<uint>(2) * as_type<uint>(int(x_150)))), 2)];
-    float const x_158 = x_37.injectionSwitch.y;
-    int const x_163 = (*(tint_symbol_10)).numbers.arr[max(as_type<int>((as_type<uint>(2) * as_type<uint>(int(x_158)))), 2)];
-    float const x_167 = color.y;
-    color.y = (x_167 + fmax(float(x_155), float(x_163)));
-  }
-  float const x_171 = uv.x;
-  if ((x_171 > 0.75f)) {
-    int const x_176 = (*(tint_symbol_10)).numbers.arr[3];
-    float const x_179 = color.z;
-    color.z = (x_179 + float(x_176));
-  }
-  int const x_183 = (*(tint_symbol_10)).numbers.arr[4];
-  float const x_186 = color.y;
-  color.y = (x_186 + float(x_183));
-  float const x_190 = uv.y;
-  if ((x_190 > 0.25f)) {
-    int const x_195 = (*(tint_symbol_10)).numbers.arr[5];
-    float const x_198 = color.x;
-    color.x = (x_198 + float(x_195));
-  }
-  float const x_202 = uv.y;
-  if ((x_202 > 0.5f)) {
-    int const x_207 = (*(tint_symbol_10)).numbers.arr[6];
-    float const x_210 = color.y;
-    color.y = (x_210 + float(x_207));
-  }
-  float const x_214 = uv.y;
-  if ((x_214 > 0.75f)) {
-    int const x_219 = (*(tint_symbol_10)).numbers.arr[7];
-    float const x_222 = color.z;
-    color.z = (x_222 + float(x_219));
-  }
-  int const x_226 = (*(tint_symbol_10)).numbers.arr[8];
-  float const x_229 = color.z;
-  color.z = (x_229 + float(x_226));
-  float const x_233 = uv.x;
-  float const x_235 = uv.y;
-  if ((fabs((x_233 - x_235)) < 0.25f)) {
-    int const x_242 = (*(tint_symbol_10)).numbers.arr[9];
-    float const x_245 = color.x;
-    color.x = (x_245 + float(x_242));
-  }
-  float3 const x_248 = color;
-  float3 const x_249 = normalize(x_248);
-  *(tint_symbol_11) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
-  float4 const x_254 = *(tint_symbol_8);
-  *(tint_symbol_12) = x_254;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf1& x_34, constant buf0& x_37, float4 x_GLF_pos_param, thread float4* const tint_symbol_13, thread float4* const tint_symbol_14, thread QuicksortObject* const tint_symbol_15, thread float4* const tint_symbol_16, thread float4* const tint_symbol_17) {
-  *(tint_symbol_13) = x_GLF_pos_param;
-  main_1(x_34, x_37, tint_symbol_13, tint_symbol_14, tint_symbol_15, tint_symbol_16, tint_symbol_17);
-  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_16), .gl_Position=*(tint_symbol_17)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf1& x_34 [[buffer(0)]], constant buf0& x_37 [[buffer(1)]]) {
-  thread float4 tint_symbol_18 = 0.0f;
-  thread float4 tint_symbol_19 = 0.0f;
-  thread QuicksortObject tint_symbol_20 = {};
-  thread float4 tint_symbol_21 = 0.0f;
-  thread float4 tint_symbol_22 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_34, x_37, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20), &(tint_symbol_21), &(tint_symbol_22));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.frag_color_1 = inner_result.frag_color_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.spvasm
deleted file mode 100644
index e255866..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,593 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 408
-; Schema: 0
-               OpCapability Shader
-        %280 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_GLF_pos_param_1 %frag_color_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_GLF_pos_param_1 "x_GLF_pos_param_1"
-               OpName %frag_color_1_1 "frag_color_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %QuicksortObject "QuicksortObject"
-               OpMemberName %QuicksortObject 0 "numbers"
-               OpName %obj "obj"
-               OpName %x_GLF_FragCoord "x_GLF_FragCoord"
-               OpName %x_GLF_pos "x_GLF_pos"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "resolution"
-               OpName %x_34 "x_34"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_37 "x_37"
-               OpName %frag_color "frag_color"
-               OpName %gl_Position "gl_Position"
-               OpName %swap_i1_i1_ "swap_i1_i1_"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %temp "temp"
-               OpName %performPartition_i1_i1_ "performPartition_i1_i1_"
-               OpName %l "l"
-               OpName %h "h"
-               OpName %pivot "pivot"
-               OpName %i_1 "i_1"
-               OpName %j_1 "j_1"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %quicksort_ "quicksort_"
-               OpName %l_1 "l_1"
-               OpName %h_1 "h_1"
-               OpName %top "top"
-               OpName %stack "stack"
-               OpName %p "p"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %main_1 "main_1"
-               OpName %i_2 "i_2"
-               OpName %uv "uv"
-               OpName %color "color"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "frag_color_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_GLF_pos_param "x_GLF_pos_param"
-               OpName %main "main"
-               OpDecorate %x_GLF_pos_param_1 Location 0
-               OpDecorate %frag_color_1_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %QuicksortObject 0 Offset 0
-               OpDecorate %_arr_int_uint_10 ArrayStride 4
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_34 NonWritable
-               OpDecorate %x_34 DescriptorSet 0
-               OpDecorate %x_34 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_37 NonWritable
-               OpDecorate %x_37 DescriptorSet 0
-               OpDecorate %x_37 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_GLF_pos_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%frag_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-        %int = OpTypeInt 32 1
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_int_uint_10 = OpTypeArray %int %uint_10
-%QuicksortObject = OpTypeStruct %_arr_int_uint_10
-%_ptr_Private_QuicksortObject = OpTypePointer Private %QuicksortObject
-         %19 = OpConstantNull %QuicksortObject
-        %obj = OpVariable %_ptr_Private_QuicksortObject Private %19
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-  %x_GLF_pos = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_34 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_37 = OpVariable %_ptr_Uniform_buf0 Uniform
- %frag_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %40 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_int = OpTypePointer Private %int
-         %58 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-        %118 = OpTypeFunction %void
-%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
-        %126 = OpConstantNull %_arr_int_uint_10
-      %int_0 = OpConstant %int 0
-      %int_9 = OpConstant %int 9
-     %int_n1 = OpConstant %int -1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %198 = OpConstantNull %v2float
-    %v3float = OpTypeVector %float 3
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %202 = OpConstantNull %v3float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-        %206 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_0
-  %float_128 = OpConstant %float 128
-        %209 = OpConstantComposite %v4float %float_128 %float_128 %float_1 %float_1
-     %int_10 = OpConstant %int 10
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-    %float_3 = OpConstant %float 3
-        %247 = OpConstantComposite %v3float %float_1 %float_2 %float_3
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-  %float_0_5 = OpConstant %float 0.5
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
- %float_0_75 = OpConstant %float 0.75
-      %int_3 = OpConstant %int 3
-     %uint_2 = OpConstant %uint 2
-      %int_4 = OpConstant %int 4
-      %int_5 = OpConstant %int 5
-      %int_6 = OpConstant %int 6
-      %int_7 = OpConstant %int 7
-      %int_8 = OpConstant %int 8
-   %main_out = OpTypeStruct %v4float %v4float
-        %393 = OpTypeFunction %main_out %v4float
-%swap_i1_i1_ = OpFunction %void None %32
-          %i = OpFunctionParameter %_ptr_Function_int
-          %j = OpFunctionParameter %_ptr_Function_int
-         %38 = OpLabel
-       %temp = OpVariable %_ptr_Function_int Function %40
-         %42 = OpLoad %int %i
-         %45 = OpAccessChain %_ptr_Private_int %obj %uint_0 %42
-         %46 = OpLoad %int %45
-               OpStore %temp %46
-         %48 = OpLoad %int %i
-         %50 = OpLoad %int %j
-         %51 = OpAccessChain %_ptr_Private_int %obj %uint_0 %50
-         %52 = OpLoad %int %51
-         %53 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
-               OpStore %53 %52
-         %55 = OpLoad %int %j
-         %56 = OpLoad %int %temp
-         %57 = OpAccessChain %_ptr_Private_int %obj %uint_0 %55
-               OpStore %57 %56
-               OpReturn
-               OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %58
-          %l = OpFunctionParameter %_ptr_Function_int
-          %h = OpFunctionParameter %_ptr_Function_int
-         %62 = OpLabel
-      %pivot = OpVariable %_ptr_Function_int Function %40
-        %i_1 = OpVariable %_ptr_Function_int Function %40
-        %j_1 = OpVariable %_ptr_Function_int Function %40
-      %param = OpVariable %_ptr_Function_int Function %40
-    %param_1 = OpVariable %_ptr_Function_int Function %40
-    %param_2 = OpVariable %_ptr_Function_int Function %40
-    %param_3 = OpVariable %_ptr_Function_int Function %40
-         %71 = OpLoad %int %h
-         %72 = OpAccessChain %_ptr_Private_int %obj %uint_0 %71
-         %73 = OpLoad %int %72
-               OpStore %pivot %73
-         %75 = OpLoad %int %l
-         %77 = OpISub %int %75 %int_1
-               OpStore %i_1 %77
-         %79 = OpLoad %int %l
-               OpStore %j_1 %79
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %j_1
-         %86 = OpLoad %int %h
-         %87 = OpISub %int %86 %int_1
-         %88 = OpSLessThanEqual %bool %84 %87
-               OpSelectionMerge %90 None
-               OpBranchConditional %88 %91 %92
-         %91 = OpLabel
-               OpBranch %90
-         %92 = OpLabel
-               OpBranch %81
-         %90 = OpLabel
-         %93 = OpLoad %int %j_1
-         %94 = OpAccessChain %_ptr_Private_int %obj %uint_0 %93
-         %95 = OpLoad %int %94
-         %96 = OpLoad %int %pivot
-         %97 = OpSLessThanEqual %bool %95 %96
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %98
-         %99 = OpLabel
-        %100 = OpLoad %int %i_1
-        %101 = OpIAdd %int %100 %int_1
-               OpStore %i_1 %101
-        %102 = OpLoad %int %i_1
-               OpStore %param %102
-        %103 = OpLoad %int %j_1
-               OpStore %param_1 %103
-        %104 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
-               OpBranch %98
-         %98 = OpLabel
-               OpBranch %82
-         %82 = OpLabel
-        %107 = OpLoad %int %j_1
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %j_1 %108
-               OpBranch %80
-         %81 = OpLabel
-        %109 = OpLoad %int %i_1
-        %110 = OpIAdd %int %109 %int_1
-               OpStore %param_2 %110
-        %112 = OpLoad %int %h
-               OpStore %param_3 %112
-        %113 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
-        %116 = OpLoad %int %i_1
-        %117 = OpIAdd %int %116 %int_1
-               OpReturnValue %117
-               OpFunctionEnd
- %quicksort_ = OpFunction %void None %118
-        %120 = OpLabel
-        %l_1 = OpVariable %_ptr_Function_int Function %40
-        %h_1 = OpVariable %_ptr_Function_int Function %40
-        %top = OpVariable %_ptr_Function_int Function %40
-      %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %126
-          %p = OpVariable %_ptr_Function_int Function %40
-    %param_4 = OpVariable %_ptr_Function_int Function %40
-    %param_5 = OpVariable %_ptr_Function_int Function %40
-               OpStore %l_1 %int_0
-               OpStore %h_1 %int_9
-               OpStore %top %int_n1
-        %133 = OpLoad %int %top
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %top %134
-        %135 = OpLoad %int %l_1
-        %136 = OpAccessChain %_ptr_Function_int %stack %134
-               OpStore %136 %135
-        %137 = OpLoad %int %top
-        %138 = OpIAdd %int %137 %int_1
-               OpStore %top %138
-        %139 = OpLoad %int %h_1
-        %140 = OpAccessChain %_ptr_Function_int %stack %138
-               OpStore %140 %139
-               OpBranch %141
-        %141 = OpLabel
-               OpLoopMerge %142 %143 None
-               OpBranch %144
-        %144 = OpLabel
-        %145 = OpLoad %int %top
-        %146 = OpSGreaterThanEqual %bool %145 %int_0
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %149
-        %148 = OpLabel
-               OpBranch %147
-        %149 = OpLabel
-               OpBranch %142
-        %147 = OpLabel
-        %150 = OpLoad %int %top
-        %151 = OpISub %int %150 %int_1
-               OpStore %top %151
-        %152 = OpAccessChain %_ptr_Function_int %stack %150
-        %153 = OpLoad %int %152
-               OpStore %h_1 %153
-        %154 = OpLoad %int %top
-        %155 = OpISub %int %154 %int_1
-               OpStore %top %155
-        %156 = OpAccessChain %_ptr_Function_int %stack %154
-        %157 = OpLoad %int %156
-               OpStore %l_1 %157
-        %158 = OpLoad %int %l_1
-               OpStore %param_4 %158
-        %159 = OpLoad %int %h_1
-               OpStore %param_5 %159
-        %160 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
-               OpStore %p %160
-        %163 = OpLoad %int %p
-        %164 = OpLoad %int %l_1
-        %165 = OpISub %int %163 %int_1
-        %166 = OpSGreaterThan %bool %165 %164
-               OpSelectionMerge %167 None
-               OpBranchConditional %166 %168 %167
-        %168 = OpLabel
-        %169 = OpLoad %int %top
-        %170 = OpIAdd %int %169 %int_1
-               OpStore %top %170
-        %171 = OpLoad %int %l_1
-        %172 = OpAccessChain %_ptr_Function_int %stack %170
-               OpStore %172 %171
-        %173 = OpLoad %int %top
-        %174 = OpIAdd %int %173 %int_1
-               OpStore %top %174
-        %175 = OpLoad %int %p
-        %176 = OpAccessChain %_ptr_Function_int %stack %174
-        %177 = OpISub %int %175 %int_1
-               OpStore %176 %177
-               OpBranch %167
-        %167 = OpLabel
-        %178 = OpLoad %int %p
-        %179 = OpLoad %int %h_1
-        %180 = OpIAdd %int %178 %int_1
-        %181 = OpSLessThan %bool %180 %179
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %int %top
-        %185 = OpIAdd %int %184 %int_1
-               OpStore %top %185
-        %186 = OpLoad %int %p
-        %187 = OpAccessChain %_ptr_Function_int %stack %185
-        %188 = OpIAdd %int %186 %int_1
-               OpStore %187 %188
-        %189 = OpLoad %int %top
-        %190 = OpIAdd %int %189 %int_1
-               OpStore %top %190
-        %191 = OpLoad %int %h_1
-        %192 = OpAccessChain %_ptr_Function_int %stack %190
-               OpStore %192 %191
-               OpBranch %182
-        %182 = OpLabel
-               OpBranch %143
-        %143 = OpLabel
-               OpBranch %141
-        %142 = OpLabel
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %118
-        %194 = OpLabel
-        %i_2 = OpVariable %_ptr_Function_int Function %40
-         %uv = OpVariable %_ptr_Function_v2float Function %198
-      %color = OpVariable %_ptr_Function_v3float Function %202
-        %203 = OpLoad %v4float %x_GLF_pos
-        %207 = OpFAdd %v4float %203 %206
-        %210 = OpFMul %v4float %207 %209
-               OpStore %x_GLF_FragCoord %210
-               OpStore %i_2 %int_0
-               OpBranch %211
-        %211 = OpLabel
-               OpLoopMerge %212 %213 None
-               OpBranch %214
-        %214 = OpLabel
-        %215 = OpLoad %int %i_2
-        %217 = OpSLessThan %bool %215 %int_10
-               OpSelectionMerge %218 None
-               OpBranchConditional %217 %219 %220
-        %219 = OpLabel
-               OpBranch %218
-        %220 = OpLabel
-               OpBranch %212
-        %218 = OpLabel
-        %221 = OpLoad %int %i_2
-        %222 = OpLoad %int %i_2
-        %223 = OpAccessChain %_ptr_Private_int %obj %uint_0 %221
-        %224 = OpISub %int %int_10 %222
-               OpStore %223 %224
-        %225 = OpLoad %int %i_2
-        %226 = OpLoad %int %i_2
-        %227 = OpAccessChain %_ptr_Private_int %obj %uint_0 %226
-        %228 = OpLoad %int %227
-        %229 = OpLoad %int %i_2
-        %230 = OpAccessChain %_ptr_Private_int %obj %uint_0 %229
-        %231 = OpLoad %int %230
-        %232 = OpAccessChain %_ptr_Private_int %obj %uint_0 %225
-        %233 = OpIMul %int %228 %231
-               OpStore %232 %233
-               OpBranch %213
-        %213 = OpLabel
-        %234 = OpLoad %int %i_2
-        %235 = OpIAdd %int %234 %int_1
-               OpStore %i_2 %235
-               OpBranch %211
-        %212 = OpLabel
-        %236 = OpFunctionCall %void %quicksort_
-        %237 = OpLoad %v4float %x_GLF_FragCoord
-        %239 = OpAccessChain %_ptr_Uniform_v2float %x_34 %uint_0
-        %240 = OpLoad %v2float %239
-        %241 = OpCompositeExtract %float %237 0
-        %242 = OpCompositeExtract %float %237 1
-        %243 = OpCompositeConstruct %v2float %241 %242
-        %244 = OpFDiv %v2float %243 %240
-               OpStore %uv %244
-               OpStore %color %247
-        %248 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_0
-        %249 = OpLoad %int %248
-        %251 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %252 = OpLoad %float %251
-        %253 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %254 = OpConvertSToF %float %249
-        %255 = OpFAdd %float %252 %254
-               OpStore %253 %255
-        %256 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %257 = OpLoad %float %256
-        %259 = OpFOrdGreaterThan %bool %257 %float_0_25
-               OpSelectionMerge %260 None
-               OpBranchConditional %259 %261 %260
-        %261 = OpLabel
-        %262 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
-        %263 = OpLoad %int %262
-        %264 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %265 = OpLoad %float %264
-        %266 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %267 = OpConvertSToF %float %263
-        %268 = OpFAdd %float %265 %267
-               OpStore %266 %268
-               OpBranch %260
-        %260 = OpLabel
-        %269 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %270 = OpLoad %float %269
-        %272 = OpFOrdGreaterThan %bool %270 %float_0_5
-               OpSelectionMerge %273 None
-               OpBranchConditional %272 %274 %273
-        %274 = OpLabel
-        %277 = OpAccessChain %_ptr_Uniform_float %x_37 %uint_0 %uint_1
-        %278 = OpLoad %float %277
-        %282 = OpConvertFToS %int %278
-        %283 = OpIMul %int %int_2 %282
-        %279 = OpExtInst %int %280 SMax %283 %int_2
-        %284 = OpAccessChain %_ptr_Private_int %obj %uint_0 %279
-        %285 = OpLoad %int %284
-        %286 = OpAccessChain %_ptr_Uniform_float %x_37 %uint_0 %uint_1
-        %287 = OpLoad %float %286
-        %289 = OpConvertFToS %int %287
-        %290 = OpIMul %int %int_2 %289
-        %288 = OpExtInst %int %280 SMax %290 %int_2
-        %291 = OpAccessChain %_ptr_Private_int %obj %uint_0 %288
-        %292 = OpLoad %int %291
-        %293 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %294 = OpLoad %float %293
-        %295 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %297 = OpConvertSToF %float %285
-        %298 = OpConvertSToF %float %292
-        %296 = OpExtInst %float %280 NMax %297 %298
-        %299 = OpFAdd %float %294 %296
-               OpStore %295 %299
-               OpBranch %273
-        %273 = OpLabel
-        %300 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %301 = OpLoad %float %300
-        %303 = OpFOrdGreaterThan %bool %301 %float_0_75
-               OpSelectionMerge %304 None
-               OpBranchConditional %303 %305 %304
-        %305 = OpLabel
-        %307 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
-        %308 = OpLoad %int %307
-        %310 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %311 = OpLoad %float %310
-        %312 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %313 = OpConvertSToF %float %308
-        %314 = OpFAdd %float %311 %313
-               OpStore %312 %314
-               OpBranch %304
-        %304 = OpLabel
-        %316 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
-        %317 = OpLoad %int %316
-        %318 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %319 = OpLoad %float %318
-        %320 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %321 = OpConvertSToF %float %317
-        %322 = OpFAdd %float %319 %321
-               OpStore %320 %322
-        %323 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %324 = OpLoad %float %323
-        %325 = OpFOrdGreaterThan %bool %324 %float_0_25
-               OpSelectionMerge %326 None
-               OpBranchConditional %325 %327 %326
-        %327 = OpLabel
-        %329 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_5
-        %330 = OpLoad %int %329
-        %331 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %332 = OpLoad %float %331
-        %333 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %334 = OpConvertSToF %float %330
-        %335 = OpFAdd %float %332 %334
-               OpStore %333 %335
-               OpBranch %326
-        %326 = OpLabel
-        %336 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %337 = OpLoad %float %336
-        %338 = OpFOrdGreaterThan %bool %337 %float_0_5
-               OpSelectionMerge %339 None
-               OpBranchConditional %338 %340 %339
-        %340 = OpLabel
-        %342 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_6
-        %343 = OpLoad %int %342
-        %344 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %345 = OpLoad %float %344
-        %346 = OpAccessChain %_ptr_Function_float %color %uint_1
-        %347 = OpConvertSToF %float %343
-        %348 = OpFAdd %float %345 %347
-               OpStore %346 %348
-               OpBranch %339
-        %339 = OpLabel
-        %349 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %350 = OpLoad %float %349
-        %351 = OpFOrdGreaterThan %bool %350 %float_0_75
-               OpSelectionMerge %352 None
-               OpBranchConditional %351 %353 %352
-        %353 = OpLabel
-        %355 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
-        %356 = OpLoad %int %355
-        %357 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %358 = OpLoad %float %357
-        %359 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %360 = OpConvertSToF %float %356
-        %361 = OpFAdd %float %358 %360
-               OpStore %359 %361
-               OpBranch %352
-        %352 = OpLabel
-        %363 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
-        %364 = OpLoad %int %363
-        %365 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %366 = OpLoad %float %365
-        %367 = OpAccessChain %_ptr_Function_float %color %uint_2
-        %368 = OpConvertSToF %float %364
-        %369 = OpFAdd %float %366 %368
-               OpStore %367 %369
-        %370 = OpAccessChain %_ptr_Function_float %uv %uint_0
-        %371 = OpLoad %float %370
-        %372 = OpAccessChain %_ptr_Function_float %uv %uint_1
-        %373 = OpLoad %float %372
-        %375 = OpFSub %float %371 %373
-        %374 = OpExtInst %float %280 FAbs %375
-        %376 = OpFOrdLessThan %bool %374 %float_0_25
-               OpSelectionMerge %377 None
-               OpBranchConditional %376 %378 %377
-        %378 = OpLabel
-        %379 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_9
-        %380 = OpLoad %int %379
-        %381 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %382 = OpLoad %float %381
-        %383 = OpAccessChain %_ptr_Function_float %color %uint_0
-        %384 = OpConvertSToF %float %380
-        %385 = OpFAdd %float %382 %384
-               OpStore %383 %385
-               OpBranch %377
-        %377 = OpLabel
-        %386 = OpLoad %v3float %color
-        %387 = OpExtInst %v3float %280 Normalize %386
-        %388 = OpCompositeExtract %float %387 0
-        %389 = OpCompositeExtract %float %387 1
-        %390 = OpCompositeExtract %float %387 2
-        %391 = OpCompositeConstruct %v4float %388 %389 %390 %float_1
-               OpStore %frag_color %391
-        %392 = OpLoad %v4float %x_GLF_pos
-               OpStore %gl_Position %392
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %393
-%x_GLF_pos_param = OpFunctionParameter %v4float
-        %397 = OpLabel
-               OpStore %x_GLF_pos %x_GLF_pos_param
-        %398 = OpFunctionCall %void %main_1
-        %399 = OpLoad %v4float %frag_color
-        %400 = OpLoad %v4float %gl_Position
-        %401 = OpCompositeConstruct %main_out %399 %400
-               OpReturnValue %401
-               OpFunctionEnd
-       %main = OpFunction %void None %118
-        %403 = OpLabel
-        %405 = OpLoad %v4float %x_GLF_pos_param_1
-        %404 = OpFunctionCall %main_out %main_inner %405
-        %406 = OpCompositeExtract %v4float %404 0
-               OpStore %frag_color_1_1 %406
-        %407 = OpCompositeExtract %v4float %404 1
-               OpStore %gl_Position_1 %407
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3d6cec0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,274 +0,0 @@
-struct QuicksortObject {
-  numbers : array<i32, 10>;
-};
-
-[[block]]
-struct buf1 {
-  resolution : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> obj : QuicksortObject;
-
-var<private> x_GLF_FragCoord : vec4<f32>;
-
-var<private> x_GLF_pos : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_34 : buf1;
-
-[[group(0), binding(0)]] var<uniform> x_37 : buf0;
-
-var<private> frag_color : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
-  var temp : i32;
-  let x_257 : i32 = *(i);
-  let x_259 : i32 = obj.numbers[x_257];
-  temp = x_259;
-  let x_260 : i32 = *(i);
-  let x_261 : i32 = *(j);
-  let x_263 : i32 = obj.numbers[x_261];
-  obj.numbers[x_260] = x_263;
-  let x_265 : i32 = *(j);
-  let x_266 : i32 = temp;
-  obj.numbers[x_265] = x_266;
-  return;
-}
-
-fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
-  var pivot : i32;
-  var i_1 : i32;
-  var j_1 : i32;
-  var param : i32;
-  var param_1 : i32;
-  var param_2 : i32;
-  var param_3 : i32;
-  let x_269 : i32 = *(h);
-  let x_271 : i32 = obj.numbers[x_269];
-  pivot = x_271;
-  let x_272 : i32 = *(l);
-  i_1 = (x_272 - 1);
-  let x_274 : i32 = *(l);
-  j_1 = x_274;
-  loop {
-    let x_279 : i32 = j_1;
-    let x_280 : i32 = *(h);
-    if ((x_279 <= (x_280 - 1))) {
-    } else {
-      break;
-    }
-    let x_284 : i32 = j_1;
-    let x_286 : i32 = obj.numbers[x_284];
-    let x_287 : i32 = pivot;
-    if ((x_286 <= x_287)) {
-      let x_291 : i32 = i_1;
-      i_1 = (x_291 + 1);
-      let x_293 : i32 = i_1;
-      param = x_293;
-      let x_294 : i32 = j_1;
-      param_1 = x_294;
-      swap_i1_i1_(&(param), &(param_1));
-    }
-
-    continuing {
-      let x_296 : i32 = j_1;
-      j_1 = (x_296 + 1);
-    }
-  }
-  let x_298 : i32 = i_1;
-  param_2 = (x_298 + 1);
-  let x_300 : i32 = *(h);
-  param_3 = x_300;
-  swap_i1_i1_(&(param_2), &(param_3));
-  let x_302 : i32 = i_1;
-  return (x_302 + 1);
-}
-
-fn quicksort_() {
-  var l_1 : i32;
-  var h_1 : i32;
-  var top : i32;
-  var stack : array<i32, 10>;
-  var p : i32;
-  var param_4 : i32;
-  var param_5 : i32;
-  l_1 = 0;
-  h_1 = 9;
-  top = -1;
-  let x_305 : i32 = top;
-  let x_306 : i32 = (x_305 + 1);
-  top = x_306;
-  let x_307 : i32 = l_1;
-  stack[x_306] = x_307;
-  let x_309 : i32 = top;
-  let x_310 : i32 = (x_309 + 1);
-  top = x_310;
-  let x_311 : i32 = h_1;
-  stack[x_310] = x_311;
-  loop {
-    let x_317 : i32 = top;
-    if ((x_317 >= 0)) {
-    } else {
-      break;
-    }
-    let x_320 : i32 = top;
-    top = (x_320 - 1);
-    let x_323 : i32 = stack[x_320];
-    h_1 = x_323;
-    let x_324 : i32 = top;
-    top = (x_324 - 1);
-    let x_327 : i32 = stack[x_324];
-    l_1 = x_327;
-    let x_328 : i32 = l_1;
-    param_4 = x_328;
-    let x_329 : i32 = h_1;
-    param_5 = x_329;
-    let x_330 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
-    p = x_330;
-    let x_331 : i32 = p;
-    let x_333 : i32 = l_1;
-    if (((x_331 - 1) > x_333)) {
-      let x_337 : i32 = top;
-      let x_338 : i32 = (x_337 + 1);
-      top = x_338;
-      let x_339 : i32 = l_1;
-      stack[x_338] = x_339;
-      let x_341 : i32 = top;
-      let x_342 : i32 = (x_341 + 1);
-      top = x_342;
-      let x_343 : i32 = p;
-      stack[x_342] = (x_343 - 1);
-    }
-    let x_346 : i32 = p;
-    let x_348 : i32 = h_1;
-    if (((x_346 + 1) < x_348)) {
-      let x_352 : i32 = top;
-      let x_353 : i32 = (x_352 + 1);
-      top = x_353;
-      let x_354 : i32 = p;
-      stack[x_353] = (x_354 + 1);
-      let x_357 : i32 = top;
-      let x_358 : i32 = (x_357 + 1);
-      top = x_358;
-      let x_359 : i32 = h_1;
-      stack[x_358] = x_359;
-    }
-  }
-  return;
-}
-
-fn main_1() {
-  var i_2 : i32;
-  var uv : vec2<f32>;
-  var color : vec3<f32>;
-  let x_94 : vec4<f32> = x_GLF_pos;
-  x_GLF_FragCoord = ((x_94 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
-  i_2 = 0;
-  loop {
-    let x_101 : i32 = i_2;
-    if ((x_101 < 10)) {
-    } else {
-      break;
-    }
-    let x_104 : i32 = i_2;
-    let x_105 : i32 = i_2;
-    obj.numbers[x_104] = (10 - x_105);
-    let x_108 : i32 = i_2;
-    let x_109 : i32 = i_2;
-    let x_111 : i32 = obj.numbers[x_109];
-    let x_112 : i32 = i_2;
-    let x_114 : i32 = obj.numbers[x_112];
-    obj.numbers[x_108] = (x_111 * x_114);
-
-    continuing {
-      let x_117 : i32 = i_2;
-      i_2 = (x_117 + 1);
-    }
-  }
-  quicksort_();
-  let x_120 : vec4<f32> = x_GLF_FragCoord;
-  let x_123 : vec2<f32> = x_34.resolution;
-  uv = (vec2<f32>(x_120.x, x_120.y) / x_123);
-  color = vec3<f32>(1.0, 2.0, 3.0);
-  let x_126 : i32 = obj.numbers[0];
-  let x_129 : f32 = color.x;
-  color.x = (x_129 + f32(x_126));
-  let x_133 : f32 = uv.x;
-  if ((x_133 > 0.25)) {
-    let x_138 : i32 = obj.numbers[1];
-    let x_141 : f32 = color.x;
-    color.x = (x_141 + f32(x_138));
-  }
-  let x_145 : f32 = uv.x;
-  if ((x_145 > 0.5)) {
-    let x_150 : f32 = x_37.injectionSwitch.y;
-    let x_155 : i32 = obj.numbers[max((2 * i32(x_150)), 2)];
-    let x_158 : f32 = x_37.injectionSwitch.y;
-    let x_163 : i32 = obj.numbers[max((2 * i32(x_158)), 2)];
-    let x_167 : f32 = color.y;
-    color.y = (x_167 + max(f32(x_155), f32(x_163)));
-  }
-  let x_171 : f32 = uv.x;
-  if ((x_171 > 0.75)) {
-    let x_176 : i32 = obj.numbers[3];
-    let x_179 : f32 = color.z;
-    color.z = (x_179 + f32(x_176));
-  }
-  let x_183 : i32 = obj.numbers[4];
-  let x_186 : f32 = color.y;
-  color.y = (x_186 + f32(x_183));
-  let x_190 : f32 = uv.y;
-  if ((x_190 > 0.25)) {
-    let x_195 : i32 = obj.numbers[5];
-    let x_198 : f32 = color.x;
-    color.x = (x_198 + f32(x_195));
-  }
-  let x_202 : f32 = uv.y;
-  if ((x_202 > 0.5)) {
-    let x_207 : i32 = obj.numbers[6];
-    let x_210 : f32 = color.y;
-    color.y = (x_210 + f32(x_207));
-  }
-  let x_214 : f32 = uv.y;
-  if ((x_214 > 0.75)) {
-    let x_219 : i32 = obj.numbers[7];
-    let x_222 : f32 = color.z;
-    color.z = (x_222 + f32(x_219));
-  }
-  let x_226 : i32 = obj.numbers[8];
-  let x_229 : f32 = color.z;
-  color.z = (x_229 + f32(x_226));
-  let x_233 : f32 = uv.x;
-  let x_235 : f32 = uv.y;
-  if ((abs((x_233 - x_235)) < 0.25)) {
-    let x_242 : i32 = obj.numbers[9];
-    let x_245 : f32 = color.x;
-    color.x = (x_245 + f32(x_242));
-  }
-  let x_248 : vec3<f32> = color;
-  let x_249 : vec3<f32> = normalize(x_248);
-  frag_color = vec4<f32>(x_249.x, x_249.y, x_249.z, 1.0);
-  let x_254 : vec4<f32> = x_GLF_pos;
-  gl_Position = x_254;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  frag_color_1 : vec4<f32>;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
-  x_GLF_pos = x_GLF_pos_param;
-  main_1();
-  return main_out(frag_color, gl_Position);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.hlsl
deleted file mode 100644
index f5639d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,124 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_20 : register(b0, space0) {
-  uint4 x_20[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-bool collision_vf2_vf4_(inout float2 pos, inout float4 quad) {
-  const float x_110 = pos.x;
-  const float x_112 = quad.x;
-  if ((x_110 < x_112)) {
-    return false;
-  }
-  const float x_117 = pos.y;
-  const float x_119 = quad.y;
-  if ((x_117 < x_119)) {
-    return false;
-  }
-  const float x_124 = pos.x;
-  const float x_126 = quad.x;
-  const float x_128 = quad.z;
-  if ((x_124 > (x_126 + x_128))) {
-    return false;
-  }
-  const float x_134 = pos.y;
-  const float x_136 = quad.y;
-  const float x_138 = quad.w;
-  if ((x_134 > (x_136 + x_138))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(inout float2 pos_1) {
-  float4 res = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float x_144 = 0.0f;
-  float x_145 = 0.0f;
-  int i = 0;
-  float2 param = float2(0.0f, 0.0f);
-  float4 param_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 indexable[8] = (float4[8])0;
-  float4 indexable_1[8] = (float4[8])0;
-  float4 indexable_2[8] = (float4[8])0;
-  float4 indexable_3[16] = (float4[16])0;
-  const float x_147 = gl_FragCoord.x;
-  if ((x_147 < 0.0f)) {
-    x_144 = -1.0f;
-  } else {
-    const float x_153 = gl_FragCoord.x;
-    if ((x_153 >= 0.0f)) {
-      const float x_159 = gl_FragCoord.x;
-      x_145 = ((x_159 >= 0.0f) ? 0.5f : 1.0f);
-    } else {
-      x_145 = 1.0f;
-    }
-    x_144 = min(x_145, 0.5f);
-  }
-  res = float4(clamp(0.5f, 0.5f, x_144), 0.5f, 1.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 8); i = (i + 1)) {
-      const int x_174 = i;
-      const float2 x_175 = pos_1;
-      param = x_175;
-      const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      indexable = tint_symbol_4;
-      const float4 x_177 = indexable[x_174];
-      param_1 = x_177;
-      const bool x_178 = collision_vf2_vf4_(param, param_1);
-      if (x_178) {
-        const int x_181 = i;
-        const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_1 = tint_symbol_5;
-        const float x_183 = indexable_1[x_181].x;
-        const int x_185 = i;
-        const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_2 = tint_symbol_6;
-        const float x_187 = indexable_2[x_185].y;
-        const int x_190 = i;
-        const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-        indexable_3 = tint_symbol_7;
-        const float4 x_196 = indexable_3[((((int(x_183) * int(x_187)) + (x_190 * 9)) + 11) % 16)];
-        res = x_196;
-      }
-    }
-  }
-  return res;
-}
-
-void main_1() {
-  float2 lin = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  const float4 x_98 = gl_FragCoord;
-  const float2 x_101 = asfloat(x_20[0].xy);
-  lin = (float2(x_98.x, x_98.y) / x_101);
-  lin = floor((lin * 32.0f));
-  param_2 = lin;
-  const float4 x_107 = match_vf2_(param_2);
-  x_GLF_color = x_107;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.msl
deleted file mode 100644
index 601d433..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.msl
+++ /dev/null
@@ -1,142 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[8];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool collision_vf2_vf4_(thread float2* const pos, thread float4* const quad) {
-  float const x_110 = (*(pos)).x;
-  float const x_112 = (*(quad)).x;
-  if ((x_110 < x_112)) {
-    return false;
-  }
-  float const x_117 = (*(pos)).y;
-  float const x_119 = (*(quad)).y;
-  if ((x_117 < x_119)) {
-    return false;
-  }
-  float const x_124 = (*(pos)).x;
-  float const x_126 = (*(quad)).x;
-  float const x_128 = (*(quad)).z;
-  if ((x_124 > (x_126 + x_128))) {
-    return false;
-  }
-  float const x_134 = (*(pos)).y;
-  float const x_136 = (*(quad)).y;
-  float const x_138 = (*(quad)).w;
-  if ((x_134 > (x_136 + x_138))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(thread float2* const pos_1, thread float4* const tint_symbol_7) {
-  float4 res = 0.0f;
-  float x_144 = 0.0f;
-  float x_145 = 0.0f;
-  int i = 0;
-  float2 param = 0.0f;
-  float4 param_1 = 0.0f;
-  tint_array_wrapper indexable = {};
-  tint_array_wrapper indexable_1 = {};
-  tint_array_wrapper indexable_2 = {};
-  tint_array_wrapper_1 indexable_3 = {};
-  float const x_147 = (*(tint_symbol_7)).x;
-  if ((x_147 < 0.0f)) {
-    x_144 = -1.0f;
-  } else {
-    float const x_153 = (*(tint_symbol_7)).x;
-    if ((x_153 >= 0.0f)) {
-      float const x_159 = (*(tint_symbol_7)).x;
-      x_145 = select(1.0f, 0.5f, (x_159 >= 0.0f));
-    } else {
-      x_145 = 1.0f;
-    }
-    float const x_162 = x_145;
-    x_144 = fmin(x_162, 0.5f);
-  }
-  float const x_164 = x_144;
-  res = float4(clamp(0.5f, 0.5f, x_164), 0.5f, 1.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_171 = i;
-    if ((x_171 < 8)) {
-    } else {
-      break;
-    }
-    int const x_174 = i;
-    float2 const x_175 = *(pos_1);
-    param = x_175;
-    tint_array_wrapper const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-    indexable = tint_symbol_2;
-    float4 const x_177 = indexable.arr[x_174];
-    param_1 = x_177;
-    bool const x_178 = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_178) {
-      int const x_181 = i;
-      tint_array_wrapper const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_1 = tint_symbol_3;
-      float const x_183 = indexable_1.arr[x_181].x;
-      int const x_185 = i;
-      tint_array_wrapper const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_2 = tint_symbol_4;
-      float const x_187 = indexable_2.arr[x_185].y;
-      int const x_190 = i;
-      tint_array_wrapper_1 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      indexable_3 = tint_symbol_5;
-      float4 const x_196 = indexable_3.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_183)) * as_type<uint>(int(x_187))))) + as_type<uint>(as_type<int>((as_type<uint>(x_190) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      res = x_196;
-    }
-    {
-      int const x_197 = i;
-      i = as_type<int>((as_type<uint>(x_197) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_199 = res;
-  return x_199;
-}
-
-void main_1(constant buf0& x_20, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  float2 lin = 0.0f;
-  float2 param_2 = 0.0f;
-  float4 const x_98 = *(tint_symbol_8);
-  float2 const x_101 = x_20.resolution;
-  lin = (float2(x_98.x, x_98.y) / x_101);
-  float2 const x_103 = lin;
-  lin = floor((x_103 * 32.0f));
-  float2 const x_106 = lin;
-  param_2 = x_106;
-  float4 const x_107 = match_vf2_(&(param_2), tint_symbol_8);
-  *(tint_symbol_9) = x_107;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_20, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_20, tint_symbol_10, tint_symbol_11);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_20 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_20, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.spvasm
deleted file mode 100644
index 7581de0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,336 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 240
-; Schema: 0
-               OpCapability Shader
-        %125 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_20 "x_20"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %collision_vf2_vf4_ "collision_vf2_vf4_"
-               OpName %pos "pos"
-               OpName %quad "quad"
-               OpName %match_vf2_ "match_vf2_"
-               OpName %pos_1 "pos_1"
-               OpName %res "res"
-               OpName %x_144 "x_144"
-               OpName %x_145 "x_145"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %indexable_2 "indexable_2"
-               OpName %indexable_3 "indexable_3"
-               OpName %main_1 "main_1"
-               OpName %lin "lin"
-               OpName %param_2 "param_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_20 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %bool = OpTypeBool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %15 = OpTypeFunction %bool %_ptr_Function_v2float %_ptr_Function_v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-         %75 = OpTypeFunction %v4float %_ptr_Function_v2float
-         %81 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %86 = OpConstantNull %int
-         %88 = OpConstantNull %v2float
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %94 = OpConstantNull %_arr_v4float_uint_8
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-        %101 = OpConstantNull %_arr_v4float_uint_16
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-   %float_n1 = OpConstant %float -1
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-      %int_0 = OpConstant %int 0
-      %int_8 = OpConstant %int 8
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-        %145 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-        %146 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-        %147 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-        %149 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-        %152 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-        %154 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-        %156 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-        %158 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-        %159 = OpConstantComposite %_arr_v4float_uint_8 %145 %146 %147 %149 %152 %154 %156 %158
-        %174 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %175 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %176 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %177 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %178 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %179 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %180 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %181 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %182 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %183 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %184 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %185 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %186 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %187 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %188 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %189 = OpConstantComposite %_arr_v4float_uint_16 %174 %175 %176 %177 %178 %179 %180 %181 %174 %182 %183 %184 %185 %186 %187 %188
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %206 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-   %main_out = OpTypeStruct %v4float
-        %227 = OpTypeFunction %main_out %v4float
-%collision_vf2_vf4_ = OpFunction %bool None %15
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-       %quad = OpFunctionParameter %_ptr_Function_v4float
-         %22 = OpLabel
-         %27 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %28 = OpLoad %float %27
-         %30 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %31 = OpLoad %float %30
-         %32 = OpFOrdLessThan %bool %28 %31
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %33
-         %34 = OpLabel
-               OpReturnValue %false
-         %33 = OpLabel
-         %38 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %39 = OpLoad %float %38
-         %41 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %42 = OpLoad %float %41
-         %43 = OpFOrdLessThan %bool %39 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpReturnValue %false
-         %44 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %48 = OpLoad %float %47
-         %50 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %51 = OpLoad %float %50
-         %54 = OpAccessChain %_ptr_Function_float %quad %uint_2
-         %55 = OpLoad %float %54
-         %56 = OpFAdd %float %51 %55
-         %57 = OpFOrdGreaterThan %bool %48 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpReturnValue %false
-         %58 = OpLabel
-         %61 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %62 = OpLoad %float %61
-         %64 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %65 = OpLoad %float %64
-         %68 = OpAccessChain %_ptr_Function_float %quad %uint_3
-         %69 = OpLoad %float %68
-         %70 = OpFAdd %float %65 %69
-         %71 = OpFOrdGreaterThan %bool %62 %70
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturnValue %false
-         %72 = OpLabel
-               OpReturnValue %true
-               OpFunctionEnd
- %match_vf2_ = OpFunction %v4float None %75
-      %pos_1 = OpFunctionParameter %_ptr_Function_v2float
-         %78 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %7
-      %x_144 = OpVariable %_ptr_Function_float Function %81
-      %x_145 = OpVariable %_ptr_Function_float Function %81
-          %i = OpVariable %_ptr_Function_int Function %86
-      %param = OpVariable %_ptr_Function_v2float Function %88
-    %param_1 = OpVariable %_ptr_Function_v4float Function %7
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %94
-%indexable_1 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %94
-%indexable_2 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %94
-%indexable_3 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %101
-        %103 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpFOrdLessThan %bool %104 %float_0
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %109
-        %108 = OpLabel
-               OpStore %x_144 %float_n1
-               OpBranch %107
-        %109 = OpLabel
-        %111 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %112 = OpLoad %float %111
-        %113 = OpFOrdGreaterThanEqual %bool %112 %float_0
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %116
-        %115 = OpLabel
-        %117 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %118 = OpLoad %float %117
-        %120 = OpFOrdGreaterThanEqual %bool %118 %float_0
-        %119 = OpSelect %float %120 %float_0_5 %float_1
-               OpStore %x_145 %119
-               OpBranch %114
-        %116 = OpLabel
-               OpStore %x_145 %float_1
-               OpBranch %114
-        %114 = OpLabel
-        %123 = OpLoad %float %x_145
-        %124 = OpExtInst %float %125 NMin %123 %float_0_5
-               OpStore %x_144 %124
-               OpBranch %107
-        %107 = OpLabel
-        %126 = OpLoad %float %x_144
-        %127 = OpExtInst %float %125 NClamp %float_0_5 %float_0_5 %126
-        %128 = OpCompositeConstruct %v4float %127 %float_0_5 %float_1 %float_1
-               OpStore %res %128
-               OpStore %i %int_0
-               OpBranch %130
-        %130 = OpLabel
-               OpLoopMerge %131 %132 None
-               OpBranch %133
-        %133 = OpLabel
-        %134 = OpLoad %int %i
-        %136 = OpSLessThan %bool %134 %int_8
-               OpSelectionMerge %137 None
-               OpBranchConditional %136 %138 %139
-        %138 = OpLabel
-               OpBranch %137
-        %139 = OpLabel
-               OpBranch %131
-        %137 = OpLabel
-        %140 = OpLoad %int %i
-        %142 = OpLoad %v2float %pos_1
-               OpStore %param %142
-               OpStore %indexable %159
-        %160 = OpAccessChain %_ptr_Function_v4float %indexable %140
-        %161 = OpLoad %v4float %160
-               OpStore %param_1 %161
-        %162 = OpFunctionCall %bool %collision_vf2_vf4_ %param %param_1
-               OpSelectionMerge %165 None
-               OpBranchConditional %162 %166 %165
-        %166 = OpLabel
-        %167 = OpLoad %int %i
-               OpStore %indexable_1 %159
-        %168 = OpAccessChain %_ptr_Function_float %indexable_1 %167 %uint_0
-        %169 = OpLoad %float %168
-        %170 = OpLoad %int %i
-               OpStore %indexable_2 %159
-        %171 = OpAccessChain %_ptr_Function_float %indexable_2 %170 %uint_1
-        %172 = OpLoad %float %171
-        %173 = OpLoad %int %i
-               OpStore %indexable_3 %189
-        %190 = OpConvertFToS %int %169
-        %191 = OpConvertFToS %int %172
-        %192 = OpIMul %int %190 %191
-        %194 = OpIMul %int %173 %int_9
-        %195 = OpIAdd %int %192 %194
-        %197 = OpIAdd %int %195 %int_11
-        %199 = OpSMod %int %197 %int_16
-        %200 = OpAccessChain %_ptr_Function_v4float %indexable_3 %199
-        %201 = OpLoad %v4float %200
-               OpStore %res %201
-               OpBranch %165
-        %165 = OpLabel
-               OpBranch %132
-        %132 = OpLabel
-        %202 = OpLoad %int %i
-        %204 = OpIAdd %int %202 %int_1
-               OpStore %i %204
-               OpBranch %130
-        %131 = OpLabel
-        %205 = OpLoad %v4float %res
-               OpReturnValue %205
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %206
-        %209 = OpLabel
-        %lin = OpVariable %_ptr_Function_v2float Function %88
-    %param_2 = OpVariable %_ptr_Function_v2float Function %88
-        %212 = OpLoad %v4float %gl_FragCoord
-        %214 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_0
-        %215 = OpLoad %v2float %214
-        %216 = OpCompositeExtract %float %212 0
-        %217 = OpCompositeExtract %float %212 1
-        %218 = OpCompositeConstruct %v2float %216 %217
-        %219 = OpFDiv %v2float %218 %215
-               OpStore %lin %219
-        %220 = OpLoad %v2float %lin
-        %223 = OpVectorTimesScalar %v2float %220 %float_32
-        %221 = OpExtInst %v2float %125 Floor %223
-               OpStore %lin %221
-        %224 = OpLoad %v2float %lin
-               OpStore %param_2 %224
-        %225 = OpFunctionCall %v4float %match_vf2_ %param_2
-               OpStore %x_GLF_color %225
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %227
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %231 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %232 = OpFunctionCall %void %main_1
-        %233 = OpLoad %v4float %x_GLF_color
-        %234 = OpCompositeConstruct %main_out %233
-               OpReturnValue %234
-               OpFunctionEnd
-       %main = OpFunction %void None %206
-        %236 = OpLabel
-        %238 = OpLoad %v4float %gl_FragCoord_param_1
-        %237 = OpFunctionCall %main_out %main_inner %238
-        %239 = OpCompositeExtract %v4float %237 0
-               OpStore %x_GLF_color_1_1 %239
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.wgsl
deleted file mode 100644
index 4b3b3b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,126 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn collision_vf2_vf4_(pos : ptr<function, vec2<f32>>, quad : ptr<function, vec4<f32>>) -> bool {
-  let x_110 : f32 = (*(pos)).x;
-  let x_112 : f32 = (*(quad)).x;
-  if ((x_110 < x_112)) {
-    return false;
-  }
-  let x_117 : f32 = (*(pos)).y;
-  let x_119 : f32 = (*(quad)).y;
-  if ((x_117 < x_119)) {
-    return false;
-  }
-  let x_124 : f32 = (*(pos)).x;
-  let x_126 : f32 = (*(quad)).x;
-  let x_128 : f32 = (*(quad)).z;
-  if ((x_124 > (x_126 + x_128))) {
-    return false;
-  }
-  let x_134 : f32 = (*(pos)).y;
-  let x_136 : f32 = (*(quad)).y;
-  let x_138 : f32 = (*(quad)).w;
-  if ((x_134 > (x_136 + x_138))) {
-    return false;
-  }
-  return true;
-}
-
-fn match_vf2_(pos_1 : ptr<function, vec2<f32>>) -> vec4<f32> {
-  var res : vec4<f32>;
-  var x_144 : f32;
-  var x_145 : f32;
-  var i : i32;
-  var param : vec2<f32>;
-  var param_1 : vec4<f32>;
-  var indexable : array<vec4<f32>, 8>;
-  var indexable_1 : array<vec4<f32>, 8>;
-  var indexable_2 : array<vec4<f32>, 8>;
-  var indexable_3 : array<vec4<f32>, 16>;
-  let x_147 : f32 = gl_FragCoord.x;
-  if ((x_147 < 0.0)) {
-    x_144 = -1.0;
-  } else {
-    let x_153 : f32 = gl_FragCoord.x;
-    if ((x_153 >= 0.0)) {
-      let x_159 : f32 = gl_FragCoord.x;
-      x_145 = select(1.0, 0.5, (x_159 >= 0.0));
-    } else {
-      x_145 = 1.0;
-    }
-    let x_162 : f32 = x_145;
-    x_144 = min(x_162, 0.5);
-  }
-  let x_164 : f32 = x_144;
-  res = vec4<f32>(clamp(0.5, 0.5, x_164), 0.5, 1.0, 1.0);
-  i = 0;
-  loop {
-    let x_171 : i32 = i;
-    if ((x_171 < 8)) {
-    } else {
-      break;
-    }
-    let x_174 : i32 = i;
-    let x_175 : vec2<f32> = *(pos_1);
-    param = x_175;
-    indexable = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-    let x_177 : vec4<f32> = indexable[x_174];
-    param_1 = x_177;
-    let x_178 : bool = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_178) {
-      let x_181 : i32 = i;
-      indexable_1 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_183 : f32 = indexable_1[x_181].x;
-      let x_185 : i32 = i;
-      indexable_2 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_187 : f32 = indexable_2[x_185].y;
-      let x_190 : i32 = i;
-      indexable_3 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      let x_196 : vec4<f32> = indexable_3[((((i32(x_183) * i32(x_187)) + (x_190 * 9)) + 11) % 16)];
-      res = x_196;
-    }
-
-    continuing {
-      let x_197 : i32 = i;
-      i = (x_197 + 1);
-    }
-  }
-  let x_199 : vec4<f32> = res;
-  return x_199;
-}
-
-fn main_1() {
-  var lin : vec2<f32>;
-  var param_2 : vec2<f32>;
-  let x_98 : vec4<f32> = gl_FragCoord;
-  let x_101 : vec2<f32> = x_20.resolution;
-  lin = (vec2<f32>(x_98.x, x_98.y) / x_101);
-  let x_103 : vec2<f32> = lin;
-  lin = floor((x_103 * 32.0));
-  let x_106 : vec2<f32> = lin;
-  param_2 = x_106;
-  let x_107 : vec4<f32> = match_vf2_(&(param_2));
-  x_GLF_color = x_107;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.hlsl
deleted file mode 100644
index f5639d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,124 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_20 : register(b0, space0) {
-  uint4 x_20[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-bool collision_vf2_vf4_(inout float2 pos, inout float4 quad) {
-  const float x_110 = pos.x;
-  const float x_112 = quad.x;
-  if ((x_110 < x_112)) {
-    return false;
-  }
-  const float x_117 = pos.y;
-  const float x_119 = quad.y;
-  if ((x_117 < x_119)) {
-    return false;
-  }
-  const float x_124 = pos.x;
-  const float x_126 = quad.x;
-  const float x_128 = quad.z;
-  if ((x_124 > (x_126 + x_128))) {
-    return false;
-  }
-  const float x_134 = pos.y;
-  const float x_136 = quad.y;
-  const float x_138 = quad.w;
-  if ((x_134 > (x_136 + x_138))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(inout float2 pos_1) {
-  float4 res = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float x_144 = 0.0f;
-  float x_145 = 0.0f;
-  int i = 0;
-  float2 param = float2(0.0f, 0.0f);
-  float4 param_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 indexable[8] = (float4[8])0;
-  float4 indexable_1[8] = (float4[8])0;
-  float4 indexable_2[8] = (float4[8])0;
-  float4 indexable_3[16] = (float4[16])0;
-  const float x_147 = gl_FragCoord.x;
-  if ((x_147 < 0.0f)) {
-    x_144 = -1.0f;
-  } else {
-    const float x_153 = gl_FragCoord.x;
-    if ((x_153 >= 0.0f)) {
-      const float x_159 = gl_FragCoord.x;
-      x_145 = ((x_159 >= 0.0f) ? 0.5f : 1.0f);
-    } else {
-      x_145 = 1.0f;
-    }
-    x_144 = min(x_145, 0.5f);
-  }
-  res = float4(clamp(0.5f, 0.5f, x_144), 0.5f, 1.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 8); i = (i + 1)) {
-      const int x_174 = i;
-      const float2 x_175 = pos_1;
-      param = x_175;
-      const float4 tint_symbol_4[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-      indexable = tint_symbol_4;
-      const float4 x_177 = indexable[x_174];
-      param_1 = x_177;
-      const bool x_178 = collision_vf2_vf4_(param, param_1);
-      if (x_178) {
-        const int x_181 = i;
-        const float4 tint_symbol_5[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_1 = tint_symbol_5;
-        const float x_183 = indexable_1[x_181].x;
-        const int x_185 = i;
-        const float4 tint_symbol_6[8] = {float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)};
-        indexable_2 = tint_symbol_6;
-        const float x_187 = indexable_2[x_185].y;
-        const int x_190 = i;
-        const float4 tint_symbol_7[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
-        indexable_3 = tint_symbol_7;
-        const float4 x_196 = indexable_3[((((int(x_183) * int(x_187)) + (x_190 * 9)) + 11) % 16)];
-        res = x_196;
-      }
-    }
-  }
-  return res;
-}
-
-void main_1() {
-  float2 lin = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  const float4 x_98 = gl_FragCoord;
-  const float2 x_101 = asfloat(x_20[0].xy);
-  lin = (float2(x_98.x, x_98.y) / x_101);
-  lin = floor((lin * 32.0f));
-  param_2 = lin;
-  const float4 x_107 = match_vf2_(param_2);
-  x_GLF_color = x_107;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_8 = {x_GLF_color};
-  return tint_symbol_8;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.msl
deleted file mode 100644
index 601d433..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.msl
+++ /dev/null
@@ -1,142 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct tint_array_wrapper {
-  float4 arr[8];
-};
-struct tint_array_wrapper_1 {
-  float4 arr[16];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-bool collision_vf2_vf4_(thread float2* const pos, thread float4* const quad) {
-  float const x_110 = (*(pos)).x;
-  float const x_112 = (*(quad)).x;
-  if ((x_110 < x_112)) {
-    return false;
-  }
-  float const x_117 = (*(pos)).y;
-  float const x_119 = (*(quad)).y;
-  if ((x_117 < x_119)) {
-    return false;
-  }
-  float const x_124 = (*(pos)).x;
-  float const x_126 = (*(quad)).x;
-  float const x_128 = (*(quad)).z;
-  if ((x_124 > (x_126 + x_128))) {
-    return false;
-  }
-  float const x_134 = (*(pos)).y;
-  float const x_136 = (*(quad)).y;
-  float const x_138 = (*(quad)).w;
-  if ((x_134 > (x_136 + x_138))) {
-    return false;
-  }
-  return true;
-}
-
-float4 match_vf2_(thread float2* const pos_1, thread float4* const tint_symbol_7) {
-  float4 res = 0.0f;
-  float x_144 = 0.0f;
-  float x_145 = 0.0f;
-  int i = 0;
-  float2 param = 0.0f;
-  float4 param_1 = 0.0f;
-  tint_array_wrapper indexable = {};
-  tint_array_wrapper indexable_1 = {};
-  tint_array_wrapper indexable_2 = {};
-  tint_array_wrapper_1 indexable_3 = {};
-  float const x_147 = (*(tint_symbol_7)).x;
-  if ((x_147 < 0.0f)) {
-    x_144 = -1.0f;
-  } else {
-    float const x_153 = (*(tint_symbol_7)).x;
-    if ((x_153 >= 0.0f)) {
-      float const x_159 = (*(tint_symbol_7)).x;
-      x_145 = select(1.0f, 0.5f, (x_159 >= 0.0f));
-    } else {
-      x_145 = 1.0f;
-    }
-    float const x_162 = x_145;
-    x_144 = fmin(x_162, 0.5f);
-  }
-  float const x_164 = x_144;
-  res = float4(clamp(0.5f, 0.5f, x_164), 0.5f, 1.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_171 = i;
-    if ((x_171 < 8)) {
-    } else {
-      break;
-    }
-    int const x_174 = i;
-    float2 const x_175 = *(pos_1);
-    param = x_175;
-    tint_array_wrapper const tint_symbol_2 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-    indexable = tint_symbol_2;
-    float4 const x_177 = indexable.arr[x_174];
-    param_1 = x_177;
-    bool const x_178 = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_178) {
-      int const x_181 = i;
-      tint_array_wrapper const tint_symbol_3 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_1 = tint_symbol_3;
-      float const x_183 = indexable_1.arr[x_181].x;
-      int const x_185 = i;
-      tint_array_wrapper const tint_symbol_4 = {.arr={float4(4.0f, 4.0f, 20.0f, 4.0f), float4(4.0f, 4.0f, 4.0f, 20.0f), float4(4.0f, 20.0f, 20.0f, 4.0f), float4(20.0f, 4.0f, 4.0f, 8.0f), float4(8.0f, 6.0f, 4.0f, 2.0f), float4(2.0f, 12.0f, 2.0f, 4.0f), float4(16.0f, 2.0f, 4.0f, 4.0f), float4(12.0f, 22.0f, 4.0f, 4.0f)}};
-      indexable_2 = tint_symbol_4;
-      float const x_187 = indexable_2.arr[x_185].y;
-      int const x_190 = i;
-      tint_array_wrapper_1 const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
-      indexable_3 = tint_symbol_5;
-      float4 const x_196 = indexable_3.arr[(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(int(x_183)) * as_type<uint>(int(x_187))))) + as_type<uint>(as_type<int>((as_type<uint>(x_190) * as_type<uint>(9))))))) + as_type<uint>(11))) % 16)];
-      res = x_196;
-    }
-    {
-      int const x_197 = i;
-      i = as_type<int>((as_type<uint>(x_197) + as_type<uint>(1)));
-    }
-  }
-  float4 const x_199 = res;
-  return x_199;
-}
-
-void main_1(constant buf0& x_20, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  float2 lin = 0.0f;
-  float2 param_2 = 0.0f;
-  float4 const x_98 = *(tint_symbol_8);
-  float2 const x_101 = x_20.resolution;
-  lin = (float2(x_98.x, x_98.y) / x_101);
-  float2 const x_103 = lin;
-  lin = floor((x_103 * 32.0f));
-  float2 const x_106 = lin;
-  param_2 = x_106;
-  float4 const x_107 = match_vf2_(&(param_2), tint_symbol_8);
-  *(tint_symbol_9) = x_107;
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_20, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread float4* const tint_symbol_11) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_20, tint_symbol_10, tint_symbol_11);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_11)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_20 [[buffer(0)]]) {
-  thread float4 tint_symbol_12 = 0.0f;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_20, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.spvasm
deleted file mode 100644
index 7581de0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,336 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 240
-; Schema: 0
-               OpCapability Shader
-        %125 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_20 "x_20"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %collision_vf2_vf4_ "collision_vf2_vf4_"
-               OpName %pos "pos"
-               OpName %quad "quad"
-               OpName %match_vf2_ "match_vf2_"
-               OpName %pos_1 "pos_1"
-               OpName %res "res"
-               OpName %x_144 "x_144"
-               OpName %x_145 "x_145"
-               OpName %i "i"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %indexable "indexable"
-               OpName %indexable_1 "indexable_1"
-               OpName %indexable_2 "indexable_2"
-               OpName %indexable_3 "indexable_3"
-               OpName %main_1 "main_1"
-               OpName %lin "lin"
-               OpName %param_2 "param_2"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_20 NonWritable
-               OpDecorate %x_20 DescriptorSet 0
-               OpDecorate %x_20 Binding 0
-               OpDecorate %_arr_v4float_uint_8 ArrayStride 16
-               OpDecorate %_arr_v4float_uint_16 ArrayStride 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_20 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %bool = OpTypeBool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %15 = OpTypeFunction %bool %_ptr_Function_v2float %_ptr_Function_v4float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-     %uint_1 = OpConstant %uint 1
-     %uint_2 = OpConstant %uint 2
-     %uint_3 = OpConstant %uint 3
-       %true = OpConstantTrue %bool
-         %75 = OpTypeFunction %v4float %_ptr_Function_v2float
-         %81 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %86 = OpConstantNull %int
-         %88 = OpConstantNull %v2float
-     %uint_8 = OpConstant %uint 8
-%_arr_v4float_uint_8 = OpTypeArray %v4float %uint_8
-%_ptr_Function__arr_v4float_uint_8 = OpTypePointer Function %_arr_v4float_uint_8
-         %94 = OpConstantNull %_arr_v4float_uint_8
-    %uint_16 = OpConstant %uint 16
-%_arr_v4float_uint_16 = OpTypeArray %v4float %uint_16
-%_ptr_Function__arr_v4float_uint_16 = OpTypePointer Function %_arr_v4float_uint_16
-        %101 = OpConstantNull %_arr_v4float_uint_16
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_0 = OpConstant %float 0
-   %float_n1 = OpConstant %float -1
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-      %int_0 = OpConstant %int 0
-      %int_8 = OpConstant %int 8
-    %float_4 = OpConstant %float 4
-   %float_20 = OpConstant %float 20
-        %145 = OpConstantComposite %v4float %float_4 %float_4 %float_20 %float_4
-        %146 = OpConstantComposite %v4float %float_4 %float_4 %float_4 %float_20
-        %147 = OpConstantComposite %v4float %float_4 %float_20 %float_20 %float_4
-    %float_8 = OpConstant %float 8
-        %149 = OpConstantComposite %v4float %float_20 %float_4 %float_4 %float_8
-    %float_6 = OpConstant %float 6
-    %float_2 = OpConstant %float 2
-        %152 = OpConstantComposite %v4float %float_8 %float_6 %float_4 %float_2
-   %float_12 = OpConstant %float 12
-        %154 = OpConstantComposite %v4float %float_2 %float_12 %float_2 %float_4
-   %float_16 = OpConstant %float 16
-        %156 = OpConstantComposite %v4float %float_16 %float_2 %float_4 %float_4
-   %float_22 = OpConstant %float 22
-        %158 = OpConstantComposite %v4float %float_12 %float_22 %float_4 %float_4
-        %159 = OpConstantComposite %_arr_v4float_uint_8 %145 %146 %147 %149 %152 %154 %156 %158
-        %174 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-        %175 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0 %float_1
-        %176 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
-        %177 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0 %float_1
-        %178 = OpConstantComposite %v4float %float_0 %float_0 %float_0_5 %float_1
-        %179 = OpConstantComposite %v4float %float_0_5 %float_0 %float_0_5 %float_1
-        %180 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0_5 %float_1
-        %181 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
-        %182 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %183 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
-        %184 = OpConstantComposite %v4float %float_1 %float_1 %float_0 %float_1
-        %185 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
-        %186 = OpConstantComposite %v4float %float_1 %float_0 %float_1 %float_1
-        %187 = OpConstantComposite %v4float %float_0 %float_1 %float_1 %float_1
-        %188 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-        %189 = OpConstantComposite %_arr_v4float_uint_16 %174 %175 %176 %177 %178 %179 %180 %181 %174 %182 %183 %184 %185 %186 %187 %188
-      %int_9 = OpConstant %int 9
-     %int_11 = OpConstant %int 11
-     %int_16 = OpConstant %int 16
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %206 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-   %float_32 = OpConstant %float 32
-   %main_out = OpTypeStruct %v4float
-        %227 = OpTypeFunction %main_out %v4float
-%collision_vf2_vf4_ = OpFunction %bool None %15
-        %pos = OpFunctionParameter %_ptr_Function_v2float
-       %quad = OpFunctionParameter %_ptr_Function_v4float
-         %22 = OpLabel
-         %27 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %28 = OpLoad %float %27
-         %30 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %31 = OpLoad %float %30
-         %32 = OpFOrdLessThan %bool %28 %31
-               OpSelectionMerge %33 None
-               OpBranchConditional %32 %34 %33
-         %34 = OpLabel
-               OpReturnValue %false
-         %33 = OpLabel
-         %38 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %39 = OpLoad %float %38
-         %41 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %42 = OpLoad %float %41
-         %43 = OpFOrdLessThan %bool %39 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpReturnValue %false
-         %44 = OpLabel
-         %47 = OpAccessChain %_ptr_Function_float %pos %uint_0
-         %48 = OpLoad %float %47
-         %50 = OpAccessChain %_ptr_Function_float %quad %uint_0
-         %51 = OpLoad %float %50
-         %54 = OpAccessChain %_ptr_Function_float %quad %uint_2
-         %55 = OpLoad %float %54
-         %56 = OpFAdd %float %51 %55
-         %57 = OpFOrdGreaterThan %bool %48 %56
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpReturnValue %false
-         %58 = OpLabel
-         %61 = OpAccessChain %_ptr_Function_float %pos %uint_1
-         %62 = OpLoad %float %61
-         %64 = OpAccessChain %_ptr_Function_float %quad %uint_1
-         %65 = OpLoad %float %64
-         %68 = OpAccessChain %_ptr_Function_float %quad %uint_3
-         %69 = OpLoad %float %68
-         %70 = OpFAdd %float %65 %69
-         %71 = OpFOrdGreaterThan %bool %62 %70
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %72
-         %73 = OpLabel
-               OpReturnValue %false
-         %72 = OpLabel
-               OpReturnValue %true
-               OpFunctionEnd
- %match_vf2_ = OpFunction %v4float None %75
-      %pos_1 = OpFunctionParameter %_ptr_Function_v2float
-         %78 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %7
-      %x_144 = OpVariable %_ptr_Function_float Function %81
-      %x_145 = OpVariable %_ptr_Function_float Function %81
-          %i = OpVariable %_ptr_Function_int Function %86
-      %param = OpVariable %_ptr_Function_v2float Function %88
-    %param_1 = OpVariable %_ptr_Function_v4float Function %7
-  %indexable = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %94
-%indexable_1 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %94
-%indexable_2 = OpVariable %_ptr_Function__arr_v4float_uint_8 Function %94
-%indexable_3 = OpVariable %_ptr_Function__arr_v4float_uint_16 Function %101
-        %103 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpFOrdLessThan %bool %104 %float_0
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %109
-        %108 = OpLabel
-               OpStore %x_144 %float_n1
-               OpBranch %107
-        %109 = OpLabel
-        %111 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %112 = OpLoad %float %111
-        %113 = OpFOrdGreaterThanEqual %bool %112 %float_0
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %116
-        %115 = OpLabel
-        %117 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-        %118 = OpLoad %float %117
-        %120 = OpFOrdGreaterThanEqual %bool %118 %float_0
-        %119 = OpSelect %float %120 %float_0_5 %float_1
-               OpStore %x_145 %119
-               OpBranch %114
-        %116 = OpLabel
-               OpStore %x_145 %float_1
-               OpBranch %114
-        %114 = OpLabel
-        %123 = OpLoad %float %x_145
-        %124 = OpExtInst %float %125 NMin %123 %float_0_5
-               OpStore %x_144 %124
-               OpBranch %107
-        %107 = OpLabel
-        %126 = OpLoad %float %x_144
-        %127 = OpExtInst %float %125 NClamp %float_0_5 %float_0_5 %126
-        %128 = OpCompositeConstruct %v4float %127 %float_0_5 %float_1 %float_1
-               OpStore %res %128
-               OpStore %i %int_0
-               OpBranch %130
-        %130 = OpLabel
-               OpLoopMerge %131 %132 None
-               OpBranch %133
-        %133 = OpLabel
-        %134 = OpLoad %int %i
-        %136 = OpSLessThan %bool %134 %int_8
-               OpSelectionMerge %137 None
-               OpBranchConditional %136 %138 %139
-        %138 = OpLabel
-               OpBranch %137
-        %139 = OpLabel
-               OpBranch %131
-        %137 = OpLabel
-        %140 = OpLoad %int %i
-        %142 = OpLoad %v2float %pos_1
-               OpStore %param %142
-               OpStore %indexable %159
-        %160 = OpAccessChain %_ptr_Function_v4float %indexable %140
-        %161 = OpLoad %v4float %160
-               OpStore %param_1 %161
-        %162 = OpFunctionCall %bool %collision_vf2_vf4_ %param %param_1
-               OpSelectionMerge %165 None
-               OpBranchConditional %162 %166 %165
-        %166 = OpLabel
-        %167 = OpLoad %int %i
-               OpStore %indexable_1 %159
-        %168 = OpAccessChain %_ptr_Function_float %indexable_1 %167 %uint_0
-        %169 = OpLoad %float %168
-        %170 = OpLoad %int %i
-               OpStore %indexable_2 %159
-        %171 = OpAccessChain %_ptr_Function_float %indexable_2 %170 %uint_1
-        %172 = OpLoad %float %171
-        %173 = OpLoad %int %i
-               OpStore %indexable_3 %189
-        %190 = OpConvertFToS %int %169
-        %191 = OpConvertFToS %int %172
-        %192 = OpIMul %int %190 %191
-        %194 = OpIMul %int %173 %int_9
-        %195 = OpIAdd %int %192 %194
-        %197 = OpIAdd %int %195 %int_11
-        %199 = OpSMod %int %197 %int_16
-        %200 = OpAccessChain %_ptr_Function_v4float %indexable_3 %199
-        %201 = OpLoad %v4float %200
-               OpStore %res %201
-               OpBranch %165
-        %165 = OpLabel
-               OpBranch %132
-        %132 = OpLabel
-        %202 = OpLoad %int %i
-        %204 = OpIAdd %int %202 %int_1
-               OpStore %i %204
-               OpBranch %130
-        %131 = OpLabel
-        %205 = OpLoad %v4float %res
-               OpReturnValue %205
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %206
-        %209 = OpLabel
-        %lin = OpVariable %_ptr_Function_v2float Function %88
-    %param_2 = OpVariable %_ptr_Function_v2float Function %88
-        %212 = OpLoad %v4float %gl_FragCoord
-        %214 = OpAccessChain %_ptr_Uniform_v2float %x_20 %uint_0
-        %215 = OpLoad %v2float %214
-        %216 = OpCompositeExtract %float %212 0
-        %217 = OpCompositeExtract %float %212 1
-        %218 = OpCompositeConstruct %v2float %216 %217
-        %219 = OpFDiv %v2float %218 %215
-               OpStore %lin %219
-        %220 = OpLoad %v2float %lin
-        %223 = OpVectorTimesScalar %v2float %220 %float_32
-        %221 = OpExtInst %v2float %125 Floor %223
-               OpStore %lin %221
-        %224 = OpLoad %v2float %lin
-               OpStore %param_2 %224
-        %225 = OpFunctionCall %v4float %match_vf2_ %param_2
-               OpStore %x_GLF_color %225
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %227
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %231 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %232 = OpFunctionCall %void %main_1
-        %233 = OpLoad %v4float %x_GLF_color
-        %234 = OpCompositeConstruct %main_out %233
-               OpReturnValue %234
-               OpFunctionEnd
-       %main = OpFunction %void None %206
-        %236 = OpLabel
-        %238 = OpLoad %v4float %gl_FragCoord_param_1
-        %237 = OpFunctionCall %main_out %main_inner %238
-        %239 = OpCompositeExtract %v4float %237 0
-               OpStore %x_GLF_color_1_1 %239
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.wgsl
deleted file mode 100644
index 4b3b3b5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,126 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_20 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn collision_vf2_vf4_(pos : ptr<function, vec2<f32>>, quad : ptr<function, vec4<f32>>) -> bool {
-  let x_110 : f32 = (*(pos)).x;
-  let x_112 : f32 = (*(quad)).x;
-  if ((x_110 < x_112)) {
-    return false;
-  }
-  let x_117 : f32 = (*(pos)).y;
-  let x_119 : f32 = (*(quad)).y;
-  if ((x_117 < x_119)) {
-    return false;
-  }
-  let x_124 : f32 = (*(pos)).x;
-  let x_126 : f32 = (*(quad)).x;
-  let x_128 : f32 = (*(quad)).z;
-  if ((x_124 > (x_126 + x_128))) {
-    return false;
-  }
-  let x_134 : f32 = (*(pos)).y;
-  let x_136 : f32 = (*(quad)).y;
-  let x_138 : f32 = (*(quad)).w;
-  if ((x_134 > (x_136 + x_138))) {
-    return false;
-  }
-  return true;
-}
-
-fn match_vf2_(pos_1 : ptr<function, vec2<f32>>) -> vec4<f32> {
-  var res : vec4<f32>;
-  var x_144 : f32;
-  var x_145 : f32;
-  var i : i32;
-  var param : vec2<f32>;
-  var param_1 : vec4<f32>;
-  var indexable : array<vec4<f32>, 8>;
-  var indexable_1 : array<vec4<f32>, 8>;
-  var indexable_2 : array<vec4<f32>, 8>;
-  var indexable_3 : array<vec4<f32>, 16>;
-  let x_147 : f32 = gl_FragCoord.x;
-  if ((x_147 < 0.0)) {
-    x_144 = -1.0;
-  } else {
-    let x_153 : f32 = gl_FragCoord.x;
-    if ((x_153 >= 0.0)) {
-      let x_159 : f32 = gl_FragCoord.x;
-      x_145 = select(1.0, 0.5, (x_159 >= 0.0));
-    } else {
-      x_145 = 1.0;
-    }
-    let x_162 : f32 = x_145;
-    x_144 = min(x_162, 0.5);
-  }
-  let x_164 : f32 = x_144;
-  res = vec4<f32>(clamp(0.5, 0.5, x_164), 0.5, 1.0, 1.0);
-  i = 0;
-  loop {
-    let x_171 : i32 = i;
-    if ((x_171 < 8)) {
-    } else {
-      break;
-    }
-    let x_174 : i32 = i;
-    let x_175 : vec2<f32> = *(pos_1);
-    param = x_175;
-    indexable = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-    let x_177 : vec4<f32> = indexable[x_174];
-    param_1 = x_177;
-    let x_178 : bool = collision_vf2_vf4_(&(param), &(param_1));
-    if (x_178) {
-      let x_181 : i32 = i;
-      indexable_1 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_183 : f32 = indexable_1[x_181].x;
-      let x_185 : i32 = i;
-      indexable_2 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
-      let x_187 : f32 = indexable_2[x_185].y;
-      let x_190 : i32 = i;
-      indexable_3 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
-      let x_196 : vec4<f32> = indexable_3[((((i32(x_183) * i32(x_187)) + (x_190 * 9)) + 11) % 16)];
-      res = x_196;
-    }
-
-    continuing {
-      let x_197 : i32 = i;
-      i = (x_197 + 1);
-    }
-  }
-  let x_199 : vec4<f32> = res;
-  return x_199;
-}
-
-fn main_1() {
-  var lin : vec2<f32>;
-  var param_2 : vec2<f32>;
-  let x_98 : vec4<f32> = gl_FragCoord;
-  let x_101 : vec2<f32> = x_20.resolution;
-  lin = (vec2<f32>(x_98.x, x_98.y) / x_101);
-  let x_103 : vec2<f32> = lin;
-  lin = floor((x_103 * 32.0));
-  let x_106 : vec2<f32> = lin;
-  param_2 = x_106;
-  let x_107 : vec4<f32> = match_vf2_(&(param_2));
-  x_GLF_color = x_107;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e9c7854..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,148 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_24 : register(b0, space0) {
-  uint4 x_24[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
-  const float x_79 = a.x;
-  const float x_81 = b.y;
-  const float x_84 = b.x;
-  const float x_86 = a.y;
-  return ((x_79 * x_81) - (x_84 * x_86));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
-  bool x_90 = false;
-  int x_91 = 0;
-  float pab = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float pbc = 0.0f;
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float pca = 0.0f;
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_140 = false;
-  bool x_168 = false;
-  bool x_141_phi = false;
-  bool x_169_phi = false;
-  int x_173_phi = 0;
-  switch(0u) {
-    default: {
-      const float x_95 = p.x;
-      const float x_97 = a_1.x;
-      const float x_100 = p.y;
-      const float x_102 = a_1.y;
-      const float x_106 = b_1.x;
-      const float x_107 = a_1.x;
-      const float x_110 = b_1.y;
-      const float x_111 = a_1.y;
-      param = float2((x_95 - x_97), (x_100 - x_102));
-      param_1 = float2((x_106 - x_107), (x_110 - x_111));
-      const float x_114 = cross2d_vf2_vf2_(param, param_1);
-      pab = x_114;
-      const float x_115 = p.x;
-      const float x_116 = b_1.x;
-      const float x_118 = p.y;
-      const float x_119 = b_1.y;
-      const float x_123 = c.x;
-      const float x_124 = b_1.x;
-      const float x_127 = c.y;
-      const float x_128 = b_1.y;
-      param_2 = float2((x_115 - x_116), (x_118 - x_119));
-      param_3 = float2((x_123 - x_124), (x_127 - x_128));
-      const float x_131 = cross2d_vf2_vf2_(param_2, param_3);
-      pbc = x_131;
-      const bool x_134 = ((x_114 < 0.0f) & (x_131 < 0.0f));
-      x_141_phi = x_134;
-      if (!(x_134)) {
-        x_140 = ((x_114 >= 0.0f) & (x_131 >= 0.0f));
-        x_141_phi = x_140;
-      }
-      if (!(x_141_phi)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      const float x_145 = p.x;
-      const float x_146 = c.x;
-      const float x_148 = p.y;
-      const float x_149 = c.y;
-      const float x_152 = a_1.x;
-      const float x_153 = c.x;
-      const float x_155 = a_1.y;
-      const float x_156 = c.y;
-      param_4 = float2((x_145 - x_146), (x_148 - x_149));
-      param_5 = float2((x_152 - x_153), (x_155 - x_156));
-      const float x_159 = cross2d_vf2_vf2_(param_4, param_5);
-      pca = x_159;
-      const bool x_162 = ((x_114 < 0.0f) & (x_159 < 0.0f));
-      x_169_phi = x_162;
-      if (!(x_162)) {
-        x_168 = ((x_114 >= 0.0f) & (x_159 >= 0.0f));
-        x_169_phi = x_168;
-      }
-      if (!(x_169_phi)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      x_90 = true;
-      x_91 = 1;
-      x_173_phi = 1;
-      break;
-    }
-  }
-  return x_173_phi;
-}
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_67 = gl_FragCoord;
-  const float2 x_70 = asfloat(x_24[0].xy);
-  const float2 x_71 = (float2(x_67.x, x_67.y) / x_70);
-  pos = x_71;
-  param_6 = x_71;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_72 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_72 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 130bc87..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,151 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
-  float const x_79 = (*(a)).x;
-  float const x_81 = (*(b)).y;
-  float const x_84 = (*(b)).x;
-  float const x_86 = (*(a)).y;
-  return ((x_79 * x_81) - (x_84 * x_86));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(thread float2* const p, thread float2* const a_1, thread float2* const b_1, thread float2* const c) {
-  bool x_90 = false;
-  int x_91 = 0;
-  float pab = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float pbc = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float pca = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_140 = false;
-  bool x_168 = false;
-  bool x_141_phi = false;
-  bool x_169_phi = false;
-  int x_173_phi = 0;
-  switch(0u) {
-    default: {
-      float const x_95 = (*(p)).x;
-      float const x_97 = (*(a_1)).x;
-      float const x_100 = (*(p)).y;
-      float const x_102 = (*(a_1)).y;
-      float const x_106 = (*(b_1)).x;
-      float const x_107 = (*(a_1)).x;
-      float const x_110 = (*(b_1)).y;
-      float const x_111 = (*(a_1)).y;
-      param = float2((x_95 - x_97), (x_100 - x_102));
-      param_1 = float2((x_106 - x_107), (x_110 - x_111));
-      float const x_114 = cross2d_vf2_vf2_(&(param), &(param_1));
-      pab = x_114;
-      float const x_115 = (*(p)).x;
-      float const x_116 = (*(b_1)).x;
-      float const x_118 = (*(p)).y;
-      float const x_119 = (*(b_1)).y;
-      float const x_123 = (*(c)).x;
-      float const x_124 = (*(b_1)).x;
-      float const x_127 = (*(c)).y;
-      float const x_128 = (*(b_1)).y;
-      param_2 = float2((x_115 - x_116), (x_118 - x_119));
-      param_3 = float2((x_123 - x_124), (x_127 - x_128));
-      float const x_131 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-      pbc = x_131;
-      bool const x_134 = ((x_114 < 0.0f) & (x_131 < 0.0f));
-      x_141_phi = x_134;
-      if (!(x_134)) {
-        x_140 = ((x_114 >= 0.0f) & (x_131 >= 0.0f));
-        x_141_phi = x_140;
-      }
-      bool const x_141 = x_141_phi;
-      if (!(x_141)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      float const x_145 = (*(p)).x;
-      float const x_146 = (*(c)).x;
-      float const x_148 = (*(p)).y;
-      float const x_149 = (*(c)).y;
-      float const x_152 = (*(a_1)).x;
-      float const x_153 = (*(c)).x;
-      float const x_155 = (*(a_1)).y;
-      float const x_156 = (*(c)).y;
-      param_4 = float2((x_145 - x_146), (x_148 - x_149));
-      param_5 = float2((x_152 - x_153), (x_155 - x_156));
-      float const x_159 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-      pca = x_159;
-      bool const x_162 = ((x_114 < 0.0f) & (x_159 < 0.0f));
-      x_169_phi = x_162;
-      if (!(x_162)) {
-        x_168 = ((x_114 >= 0.0f) & (x_159 >= 0.0f));
-        x_169_phi = x_168;
-      }
-      bool const x_169 = x_169_phi;
-      if (!(x_169)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      x_90 = true;
-      x_91 = 1;
-      x_173_phi = 1;
-      break;
-    }
-  }
-  int const x_173 = x_173_phi;
-  return x_173;
-}
-
-void main_1(constant buf0& x_24, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 pos = 0.0f;
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_67 = *(tint_symbol_3);
-  float2 const x_70 = x_24.resolution;
-  float2 const x_71 = (float2(x_67.x, x_67.y) / x_70);
-  pos = x_71;
-  param_6 = x_71;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_72 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_72 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_24, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_24, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_24 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_24, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c6328f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,340 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 257
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_24 "x_24"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %cross2d_vf2_vf2_ "cross2d_vf2_vf2_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a_1 "a_1"
-               OpName %b_1 "b_1"
-               OpName %c "c"
-               OpName %x_90 "x_90"
-               OpName %x_91 "x_91"
-               OpName %pab "pab"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %pbc "pbc"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %pca "pca"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_140 "x_140"
-               OpName %x_168 "x_168"
-               OpName %x_141_phi "x_141_phi"
-               OpName %x_169_phi "x_169_phi"
-               OpName %x_173_phi "x_173_phi"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_24 NonWritable
-               OpDecorate %x_24 DescriptorSet 0
-               OpDecorate %x_24 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_24 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %float %_ptr_Function_v2float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-         %40 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %52 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %55 = OpConstantNull %int
-         %57 = OpConstantNull %float
-         %59 = OpConstantNull %v2float
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %206 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %225 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %228 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %231 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-    %float_1 = OpConstant %float 1
-        %242 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %243 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %244 = OpTypeFunction %main_out %v4float
-%cross2d_vf2_vf2_ = OpFunction %float None %15
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %25 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpLoad %float %25
-         %29 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFMul %float %26 %30
-         %38 = OpFMul %float %33 %36
-         %39 = OpFSub %float %37 %38
-               OpReturnValue %39
-               OpFunctionEnd
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %40
-          %p = OpFunctionParameter %_ptr_Function_v2float
-        %a_1 = OpFunctionParameter %_ptr_Function_v2float
-        %b_1 = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %47 = OpLabel
-       %x_90 = OpVariable %_ptr_Function_bool Function %52
-       %x_91 = OpVariable %_ptr_Function_int Function %55
-        %pab = OpVariable %_ptr_Function_float Function %57
-      %param = OpVariable %_ptr_Function_v2float Function %59
-    %param_1 = OpVariable %_ptr_Function_v2float Function %59
-        %pbc = OpVariable %_ptr_Function_float Function %57
-    %param_2 = OpVariable %_ptr_Function_v2float Function %59
-    %param_3 = OpVariable %_ptr_Function_v2float Function %59
-        %pca = OpVariable %_ptr_Function_float Function %57
-    %param_4 = OpVariable %_ptr_Function_v2float Function %59
-    %param_5 = OpVariable %_ptr_Function_v2float Function %59
-      %x_140 = OpVariable %_ptr_Function_bool Function %52
-      %x_168 = OpVariable %_ptr_Function_bool Function %52
-  %x_141_phi = OpVariable %_ptr_Function_bool Function %52
-  %x_169_phi = OpVariable %_ptr_Function_bool Function %52
-  %x_173_phi = OpVariable %_ptr_Function_int Function %55
-               OpStore %x_90 %false
-               OpSelectionMerge %72 None
-               OpSwitch %uint_0 %73
-         %73 = OpLabel
-         %75 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %76 = OpLoad %float %75
-         %78 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %79 = OpLoad %float %78
-         %81 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %82 = OpLoad %float %81
-         %84 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %85 = OpLoad %float %84
-         %87 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-         %88 = OpLoad %float %87
-         %90 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %91 = OpLoad %float %90
-         %93 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-         %94 = OpLoad %float %93
-         %96 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %97 = OpLoad %float %96
-         %98 = OpFSub %float %76 %79
-         %99 = OpFSub %float %82 %85
-        %100 = OpCompositeConstruct %v2float %98 %99
-               OpStore %param %100
-        %101 = OpFSub %float %88 %91
-        %102 = OpFSub %float %94 %97
-        %103 = OpCompositeConstruct %v2float %101 %102
-               OpStore %param_1 %103
-        %104 = OpFunctionCall %float %cross2d_vf2_vf2_ %param %param_1
-               OpStore %pab %104
-        %108 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %109 = OpLoad %float %108
-        %111 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %112 = OpLoad %float %111
-        %114 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %115 = OpLoad %float %114
-        %117 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %118 = OpLoad %float %117
-        %120 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %121 = OpLoad %float %120
-        %123 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %124 = OpLoad %float %123
-        %126 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %127 = OpLoad %float %126
-        %129 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %130 = OpLoad %float %129
-        %131 = OpFSub %float %109 %112
-        %132 = OpFSub %float %115 %118
-        %133 = OpCompositeConstruct %v2float %131 %132
-               OpStore %param_2 %133
-        %134 = OpFSub %float %121 %124
-        %135 = OpFSub %float %127 %130
-        %136 = OpCompositeConstruct %v2float %134 %135
-               OpStore %param_3 %136
-        %137 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_2 %param_3
-               OpStore %pbc %137
-        %141 = OpFOrdLessThan %bool %104 %float_0
-        %142 = OpFOrdLessThan %bool %137 %float_0
-        %143 = OpLogicalAnd %bool %141 %142
-               OpStore %x_141_phi %143
-        %144 = OpLogicalNot %bool %143
-               OpSelectionMerge %145 None
-               OpBranchConditional %144 %146 %145
-        %146 = OpLabel
-        %147 = OpFOrdGreaterThanEqual %bool %104 %float_0
-        %148 = OpFOrdGreaterThanEqual %bool %137 %float_0
-        %149 = OpLogicalAnd %bool %147 %148
-               OpStore %x_140 %149
-        %150 = OpLoad %bool %x_140
-               OpStore %x_141_phi %150
-               OpBranch %145
-        %145 = OpLabel
-        %151 = OpLoad %bool %x_141_phi
-        %152 = OpLogicalNot %bool %151
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %153
-        %154 = OpLabel
-               OpStore %x_90 %true
-               OpStore %x_91 %int_0
-               OpStore %x_173_phi %int_0
-               OpBranch %72
-        %153 = OpLabel
-        %158 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %159 = OpLoad %float %158
-        %161 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %162 = OpLoad %float %161
-        %164 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %165 = OpLoad %float %164
-        %167 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %168 = OpLoad %float %167
-        %170 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %171 = OpLoad %float %170
-        %173 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %174 = OpLoad %float %173
-        %176 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %177 = OpLoad %float %176
-        %179 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %180 = OpLoad %float %179
-        %181 = OpFSub %float %159 %162
-        %182 = OpFSub %float %165 %168
-        %183 = OpCompositeConstruct %v2float %181 %182
-               OpStore %param_4 %183
-        %184 = OpFSub %float %171 %174
-        %185 = OpFSub %float %177 %180
-        %186 = OpCompositeConstruct %v2float %184 %185
-               OpStore %param_5 %186
-        %187 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_4 %param_5
-               OpStore %pca %187
-        %190 = OpFOrdLessThan %bool %104 %float_0
-        %191 = OpFOrdLessThan %bool %187 %float_0
-        %192 = OpLogicalAnd %bool %190 %191
-               OpStore %x_169_phi %192
-        %193 = OpLogicalNot %bool %192
-               OpSelectionMerge %194 None
-               OpBranchConditional %193 %195 %194
-        %195 = OpLabel
-        %196 = OpFOrdGreaterThanEqual %bool %104 %float_0
-        %197 = OpFOrdGreaterThanEqual %bool %187 %float_0
-        %198 = OpLogicalAnd %bool %196 %197
-               OpStore %x_168 %198
-        %199 = OpLoad %bool %x_168
-               OpStore %x_169_phi %199
-               OpBranch %194
-        %194 = OpLabel
-        %200 = OpLoad %bool %x_169_phi
-        %201 = OpLogicalNot %bool %200
-               OpSelectionMerge %202 None
-               OpBranchConditional %201 %203 %202
-        %203 = OpLabel
-               OpStore %x_90 %true
-               OpStore %x_91 %int_0
-               OpStore %x_173_phi %int_0
-               OpBranch %72
-        %202 = OpLabel
-               OpStore %x_90 %true
-               OpStore %x_91 %int_1
-               OpStore %x_173_phi %int_1
-               OpBranch %72
-         %72 = OpLabel
-        %205 = OpLoad %int %x_173_phi
-               OpReturnValue %205
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %206
-        %209 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %59
-    %param_6 = OpVariable %_ptr_Function_v2float Function %59
-    %param_7 = OpVariable %_ptr_Function_v2float Function %59
-    %param_8 = OpVariable %_ptr_Function_v2float Function %59
-    %param_9 = OpVariable %_ptr_Function_v2float Function %59
-        %215 = OpLoad %v4float %gl_FragCoord
-        %217 = OpAccessChain %_ptr_Uniform_v2float %x_24 %uint_0
-        %218 = OpLoad %v2float %217
-        %219 = OpCompositeExtract %float %215 0
-        %220 = OpCompositeExtract %float %215 1
-        %221 = OpCompositeConstruct %v2float %219 %220
-        %222 = OpFDiv %v2float %221 %218
-               OpStore %pos %222
-               OpStore %param_6 %222
-               OpStore %param_7 %225
-               OpStore %param_8 %228
-               OpStore %param_9 %231
-        %232 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %237 = OpIEqual %bool %232 %int_1
-               OpSelectionMerge %238 None
-               OpBranchConditional %237 %239 %240
-        %239 = OpLabel
-               OpStore %x_GLF_color %242
-               OpBranch %238
-        %240 = OpLabel
-               OpStore %x_GLF_color %243
-               OpBranch %238
-        %238 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %244
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %248 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %249 = OpFunctionCall %void %main_1
-        %250 = OpLoad %v4float %x_GLF_color
-        %251 = OpCompositeConstruct %main_out %250
-               OpReturnValue %251
-               OpFunctionEnd
-       %main = OpFunction %void None %206
-        %253 = OpLabel
-        %255 = OpLoad %v4float %gl_FragCoord_param_1
-        %254 = OpFunctionCall %main_out %main_inner %255
-        %256 = OpCompositeExtract %v4float %254 0
-               OpStore %x_GLF_color_1_1 %256
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bf20547..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,151 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
-  let x_79 : f32 = (*(a)).x;
-  let x_81 : f32 = (*(b)).y;
-  let x_84 : f32 = (*(b)).x;
-  let x_86 : f32 = (*(a)).y;
-  return ((x_79 * x_81) - (x_84 * x_86));
-}
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var x_90 : bool = false;
-  var x_91 : i32;
-  var pab : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var pbc : f32;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var pca : f32;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_140 : bool;
-  var x_168 : bool;
-  var x_141_phi : bool;
-  var x_169_phi : bool;
-  var x_173_phi : i32;
-  switch(0u) {
-    default: {
-      let x_94 : ptr<function, f32> = &((*(p)).x);
-      let x_95 : f32 = *(x_94);
-      let x_96 : ptr<function, f32> = &((*(a_1)).x);
-      let x_97 : f32 = *(x_96);
-      let x_99 : ptr<function, f32> = &((*(p)).y);
-      let x_100 : f32 = *(x_99);
-      let x_101 : ptr<function, f32> = &((*(a_1)).y);
-      let x_102 : f32 = *(x_101);
-      let x_105 : ptr<function, f32> = &((*(b_1)).x);
-      let x_106 : f32 = *(x_105);
-      let x_107 : f32 = *(x_96);
-      let x_109 : ptr<function, f32> = &((*(b_1)).y);
-      let x_110 : f32 = *(x_109);
-      let x_111 : f32 = *(x_101);
-      param = vec2<f32>((x_95 - x_97), (x_100 - x_102));
-      param_1 = vec2<f32>((x_106 - x_107), (x_110 - x_111));
-      let x_114 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
-      pab = x_114;
-      let x_115 : f32 = *(x_94);
-      let x_116 : f32 = *(x_105);
-      let x_118 : f32 = *(x_99);
-      let x_119 : f32 = *(x_109);
-      let x_122 : ptr<function, f32> = &((*(c)).x);
-      let x_123 : f32 = *(x_122);
-      let x_124 : f32 = *(x_105);
-      let x_126 : ptr<function, f32> = &((*(c)).y);
-      let x_127 : f32 = *(x_126);
-      let x_128 : f32 = *(x_109);
-      param_2 = vec2<f32>((x_115 - x_116), (x_118 - x_119));
-      param_3 = vec2<f32>((x_123 - x_124), (x_127 - x_128));
-      let x_131 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-      pbc = x_131;
-      let x_134 : bool = ((x_114 < 0.0) & (x_131 < 0.0));
-      x_141_phi = x_134;
-      if (!(x_134)) {
-        x_140 = ((x_114 >= 0.0) & (x_131 >= 0.0));
-        x_141_phi = x_140;
-      }
-      let x_141 : bool = x_141_phi;
-      if (!(x_141)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      let x_145 : f32 = *(x_94);
-      let x_146 : f32 = *(x_122);
-      let x_148 : f32 = *(x_99);
-      let x_149 : f32 = *(x_126);
-      let x_152 : f32 = *(x_96);
-      let x_153 : f32 = *(x_122);
-      let x_155 : f32 = *(x_101);
-      let x_156 : f32 = *(x_126);
-      param_4 = vec2<f32>((x_145 - x_146), (x_148 - x_149));
-      param_5 = vec2<f32>((x_152 - x_153), (x_155 - x_156));
-      let x_159 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-      pca = x_159;
-      let x_162 : bool = ((x_114 < 0.0) & (x_159 < 0.0));
-      x_169_phi = x_162;
-      if (!(x_162)) {
-        x_168 = ((x_114 >= 0.0) & (x_159 >= 0.0));
-        x_169_phi = x_168;
-      }
-      let x_169 : bool = x_169_phi;
-      if (!(x_169)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      x_90 = true;
-      x_91 = 1;
-      x_173_phi = 1;
-    }
-  }
-  let x_173 : i32 = x_173_phi;
-  return x_173;
-}
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_67 : vec4<f32> = gl_FragCoord;
-  let x_70 : vec2<f32> = x_24.resolution;
-  let x_71 : vec2<f32> = (vec2<f32>(x_67.x, x_67.y) / x_70);
-  pos = x_71;
-  param_6 = x_71;
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_72 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_72 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b3d0880..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,164 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_24 : register(b0, space0) {
-  uint4 x_24[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
-  const float x_79 = a.x;
-  const float x_81 = b.y;
-  const float x_84 = b.x;
-  const float x_86 = a.y;
-  return ((x_79 * x_81) - (x_84 * x_86));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
-  bool x_90 = false;
-  int x_91 = 0;
-  float pab = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float pbc = 0.0f;
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float pca = 0.0f;
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_140 = false;
-  bool x_168 = false;
-  bool x_141_phi = false;
-  bool x_169_phi = false;
-  int x_173_phi = 0;
-  switch(0u) {
-    default: {
-      const float x_95 = p.x;
-      const float x_97 = a_1.x;
-      const float x_100 = p.y;
-      const float x_102 = a_1.y;
-      const float x_106 = b_1.x;
-      const float x_107 = a_1.x;
-      const float x_110 = b_1.y;
-      const float x_111 = a_1.y;
-      param = float2((x_95 - x_97), (x_100 - x_102));
-      param_1 = float2((x_106 - x_107), (x_110 - x_111));
-      const float x_114 = cross2d_vf2_vf2_(param, param_1);
-      pab = x_114;
-      const float x_115 = p.x;
-      const float x_116 = b_1.x;
-      const float x_118 = p.y;
-      const float x_119 = b_1.y;
-      const float x_123 = c.x;
-      const float x_124 = b_1.x;
-      const float x_127 = c.y;
-      const float x_128 = b_1.y;
-      param_2 = float2((x_115 - x_116), (x_118 - x_119));
-      param_3 = float2((x_123 - x_124), (x_127 - x_128));
-      const float x_131 = cross2d_vf2_vf2_(param_2, param_3);
-      pbc = x_131;
-      bool tint_tmp = (x_114 < 0.0f);
-      if (tint_tmp) {
-        tint_tmp = (x_131 < 0.0f);
-      }
-      const bool x_134 = (tint_tmp);
-      x_141_phi = x_134;
-      if (!(x_134)) {
-        bool tint_tmp_1 = (x_114 >= 0.0f);
-        if (tint_tmp_1) {
-          tint_tmp_1 = (x_131 >= 0.0f);
-        }
-        x_140 = (tint_tmp_1);
-        x_141_phi = x_140;
-      }
-      if (!(x_141_phi)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      const float x_145 = p.x;
-      const float x_146 = c.x;
-      const float x_148 = p.y;
-      const float x_149 = c.y;
-      const float x_152 = a_1.x;
-      const float x_153 = c.x;
-      const float x_155 = a_1.y;
-      const float x_156 = c.y;
-      param_4 = float2((x_145 - x_146), (x_148 - x_149));
-      param_5 = float2((x_152 - x_153), (x_155 - x_156));
-      const float x_159 = cross2d_vf2_vf2_(param_4, param_5);
-      pca = x_159;
-      bool tint_tmp_2 = (x_114 < 0.0f);
-      if (tint_tmp_2) {
-        tint_tmp_2 = (x_159 < 0.0f);
-      }
-      const bool x_162 = (tint_tmp_2);
-      x_169_phi = x_162;
-      if (!(x_162)) {
-        bool tint_tmp_3 = (x_114 >= 0.0f);
-        if (tint_tmp_3) {
-          tint_tmp_3 = (x_159 >= 0.0f);
-        }
-        x_168 = (tint_tmp_3);
-        x_169_phi = x_168;
-      }
-      if (!(x_169_phi)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      x_90 = true;
-      x_91 = 1;
-      x_173_phi = 1;
-      break;
-    }
-  }
-  return x_173_phi;
-}
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_67 = gl_FragCoord;
-  const float2 x_70 = asfloat(x_24[0].xy);
-  const float2 x_71 = (float2(x_67.x, x_67.y) / x_70);
-  pos = x_71;
-  param_6 = x_71;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_72 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_72 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 83bdf89..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,151 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
-  float const x_79 = (*(a)).x;
-  float const x_81 = (*(b)).y;
-  float const x_84 = (*(b)).x;
-  float const x_86 = (*(a)).y;
-  return ((x_79 * x_81) - (x_84 * x_86));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(thread float2* const p, thread float2* const a_1, thread float2* const b_1, thread float2* const c) {
-  bool x_90 = false;
-  int x_91 = 0;
-  float pab = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float pbc = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float pca = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_140 = false;
-  bool x_168 = false;
-  bool x_141_phi = false;
-  bool x_169_phi = false;
-  int x_173_phi = 0;
-  switch(0u) {
-    default: {
-      float const x_95 = (*(p)).x;
-      float const x_97 = (*(a_1)).x;
-      float const x_100 = (*(p)).y;
-      float const x_102 = (*(a_1)).y;
-      float const x_106 = (*(b_1)).x;
-      float const x_107 = (*(a_1)).x;
-      float const x_110 = (*(b_1)).y;
-      float const x_111 = (*(a_1)).y;
-      param = float2((x_95 - x_97), (x_100 - x_102));
-      param_1 = float2((x_106 - x_107), (x_110 - x_111));
-      float const x_114 = cross2d_vf2_vf2_(&(param), &(param_1));
-      pab = x_114;
-      float const x_115 = (*(p)).x;
-      float const x_116 = (*(b_1)).x;
-      float const x_118 = (*(p)).y;
-      float const x_119 = (*(b_1)).y;
-      float const x_123 = (*(c)).x;
-      float const x_124 = (*(b_1)).x;
-      float const x_127 = (*(c)).y;
-      float const x_128 = (*(b_1)).y;
-      param_2 = float2((x_115 - x_116), (x_118 - x_119));
-      param_3 = float2((x_123 - x_124), (x_127 - x_128));
-      float const x_131 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-      pbc = x_131;
-      bool const x_134 = ((x_114 < 0.0f) && (x_131 < 0.0f));
-      x_141_phi = x_134;
-      if (!(x_134)) {
-        x_140 = ((x_114 >= 0.0f) && (x_131 >= 0.0f));
-        x_141_phi = x_140;
-      }
-      bool const x_141 = x_141_phi;
-      if (!(x_141)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      float const x_145 = (*(p)).x;
-      float const x_146 = (*(c)).x;
-      float const x_148 = (*(p)).y;
-      float const x_149 = (*(c)).y;
-      float const x_152 = (*(a_1)).x;
-      float const x_153 = (*(c)).x;
-      float const x_155 = (*(a_1)).y;
-      float const x_156 = (*(c)).y;
-      param_4 = float2((x_145 - x_146), (x_148 - x_149));
-      param_5 = float2((x_152 - x_153), (x_155 - x_156));
-      float const x_159 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-      pca = x_159;
-      bool const x_162 = ((x_114 < 0.0f) && (x_159 < 0.0f));
-      x_169_phi = x_162;
-      if (!(x_162)) {
-        x_168 = ((x_114 >= 0.0f) && (x_159 >= 0.0f));
-        x_169_phi = x_168;
-      }
-      bool const x_169 = x_169_phi;
-      if (!(x_169)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      x_90 = true;
-      x_91 = 1;
-      x_173_phi = 1;
-      break;
-    }
-  }
-  int const x_173 = x_173_phi;
-  return x_173;
-}
-
-void main_1(constant buf0& x_24, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 pos = 0.0f;
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_67 = *(tint_symbol_3);
-  float2 const x_70 = x_24.resolution;
-  float2 const x_71 = (float2(x_67.x, x_67.y) / x_70);
-  pos = x_71;
-  param_6 = x_71;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_72 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_72 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_24, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_24, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_24 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_24, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3dbc1da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,360 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 265
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_24 "x_24"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %cross2d_vf2_vf2_ "cross2d_vf2_vf2_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a_1 "a_1"
-               OpName %b_1 "b_1"
-               OpName %c "c"
-               OpName %x_90 "x_90"
-               OpName %x_91 "x_91"
-               OpName %pab "pab"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %pbc "pbc"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %pca "pca"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_140 "x_140"
-               OpName %x_168 "x_168"
-               OpName %x_141_phi "x_141_phi"
-               OpName %x_169_phi "x_169_phi"
-               OpName %x_173_phi "x_173_phi"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_24 NonWritable
-               OpDecorate %x_24 DescriptorSet 0
-               OpDecorate %x_24 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_24 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %float %_ptr_Function_v2float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-         %40 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %52 = OpConstantNull %bool
-%_ptr_Function_int = OpTypePointer Function %int
-         %55 = OpConstantNull %int
-         %57 = OpConstantNull %float
-         %59 = OpConstantNull %v2float
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %214 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %233 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %236 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %239 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-    %float_1 = OpConstant %float 1
-        %250 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %251 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %252 = OpTypeFunction %main_out %v4float
-%cross2d_vf2_vf2_ = OpFunction %float None %15
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %25 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpLoad %float %25
-         %29 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFMul %float %26 %30
-         %38 = OpFMul %float %33 %36
-         %39 = OpFSub %float %37 %38
-               OpReturnValue %39
-               OpFunctionEnd
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %40
-          %p = OpFunctionParameter %_ptr_Function_v2float
-        %a_1 = OpFunctionParameter %_ptr_Function_v2float
-        %b_1 = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %47 = OpLabel
-       %x_90 = OpVariable %_ptr_Function_bool Function %52
-       %x_91 = OpVariable %_ptr_Function_int Function %55
-        %pab = OpVariable %_ptr_Function_float Function %57
-      %param = OpVariable %_ptr_Function_v2float Function %59
-    %param_1 = OpVariable %_ptr_Function_v2float Function %59
-        %pbc = OpVariable %_ptr_Function_float Function %57
-    %param_2 = OpVariable %_ptr_Function_v2float Function %59
-    %param_3 = OpVariable %_ptr_Function_v2float Function %59
-        %pca = OpVariable %_ptr_Function_float Function %57
-    %param_4 = OpVariable %_ptr_Function_v2float Function %59
-    %param_5 = OpVariable %_ptr_Function_v2float Function %59
-      %x_140 = OpVariable %_ptr_Function_bool Function %52
-      %x_168 = OpVariable %_ptr_Function_bool Function %52
-  %x_141_phi = OpVariable %_ptr_Function_bool Function %52
-  %x_169_phi = OpVariable %_ptr_Function_bool Function %52
-  %x_173_phi = OpVariable %_ptr_Function_int Function %55
-               OpStore %x_90 %false
-               OpSelectionMerge %72 None
-               OpSwitch %uint_0 %73
-         %73 = OpLabel
-         %75 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %76 = OpLoad %float %75
-         %78 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %79 = OpLoad %float %78
-         %81 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %82 = OpLoad %float %81
-         %84 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %85 = OpLoad %float %84
-         %87 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-         %88 = OpLoad %float %87
-         %90 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %91 = OpLoad %float %90
-         %93 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-         %94 = OpLoad %float %93
-         %96 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %97 = OpLoad %float %96
-         %98 = OpFSub %float %76 %79
-         %99 = OpFSub %float %82 %85
-        %100 = OpCompositeConstruct %v2float %98 %99
-               OpStore %param %100
-        %101 = OpFSub %float %88 %91
-        %102 = OpFSub %float %94 %97
-        %103 = OpCompositeConstruct %v2float %101 %102
-               OpStore %param_1 %103
-        %104 = OpFunctionCall %float %cross2d_vf2_vf2_ %param %param_1
-               OpStore %pab %104
-        %108 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %109 = OpLoad %float %108
-        %111 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %112 = OpLoad %float %111
-        %114 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %115 = OpLoad %float %114
-        %117 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %118 = OpLoad %float %117
-        %120 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %121 = OpLoad %float %120
-        %123 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %124 = OpLoad %float %123
-        %126 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %127 = OpLoad %float %126
-        %129 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %130 = OpLoad %float %129
-        %131 = OpFSub %float %109 %112
-        %132 = OpFSub %float %115 %118
-        %133 = OpCompositeConstruct %v2float %131 %132
-               OpStore %param_2 %133
-        %134 = OpFSub %float %121 %124
-        %135 = OpFSub %float %127 %130
-        %136 = OpCompositeConstruct %v2float %134 %135
-               OpStore %param_3 %136
-        %137 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_2 %param_3
-               OpStore %pbc %137
-        %141 = OpFOrdLessThan %bool %104 %float_0
-               OpSelectionMerge %142 None
-               OpBranchConditional %141 %143 %142
-        %143 = OpLabel
-        %144 = OpFOrdLessThan %bool %137 %float_0
-               OpBranch %142
-        %142 = OpLabel
-        %145 = OpPhi %bool %141 %73 %144 %143
-               OpStore %x_141_phi %145
-        %146 = OpLogicalNot %bool %145
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-        %149 = OpFOrdGreaterThanEqual %bool %104 %float_0
-               OpSelectionMerge %150 None
-               OpBranchConditional %149 %151 %150
-        %151 = OpLabel
-        %152 = OpFOrdGreaterThanEqual %bool %137 %float_0
-               OpBranch %150
-        %150 = OpLabel
-        %153 = OpPhi %bool %149 %148 %152 %151
-               OpStore %x_140 %153
-        %154 = OpLoad %bool %x_140
-               OpStore %x_141_phi %154
-               OpBranch %147
-        %147 = OpLabel
-        %155 = OpLoad %bool %x_141_phi
-        %156 = OpLogicalNot %bool %155
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %157
-        %158 = OpLabel
-               OpStore %x_90 %true
-               OpStore %x_91 %int_0
-               OpStore %x_173_phi %int_0
-               OpBranch %72
-        %157 = OpLabel
-        %162 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %163 = OpLoad %float %162
-        %165 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %166 = OpLoad %float %165
-        %168 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %169 = OpLoad %float %168
-        %171 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %172 = OpLoad %float %171
-        %174 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %175 = OpLoad %float %174
-        %177 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %178 = OpLoad %float %177
-        %180 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %181 = OpLoad %float %180
-        %183 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %184 = OpLoad %float %183
-        %185 = OpFSub %float %163 %166
-        %186 = OpFSub %float %169 %172
-        %187 = OpCompositeConstruct %v2float %185 %186
-               OpStore %param_4 %187
-        %188 = OpFSub %float %175 %178
-        %189 = OpFSub %float %181 %184
-        %190 = OpCompositeConstruct %v2float %188 %189
-               OpStore %param_5 %190
-        %191 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_4 %param_5
-               OpStore %pca %191
-        %194 = OpFOrdLessThan %bool %104 %float_0
-               OpSelectionMerge %195 None
-               OpBranchConditional %194 %196 %195
-        %196 = OpLabel
-        %197 = OpFOrdLessThan %bool %191 %float_0
-               OpBranch %195
-        %195 = OpLabel
-        %198 = OpPhi %bool %194 %157 %197 %196
-               OpStore %x_169_phi %198
-        %199 = OpLogicalNot %bool %198
-               OpSelectionMerge %200 None
-               OpBranchConditional %199 %201 %200
-        %201 = OpLabel
-        %202 = OpFOrdGreaterThanEqual %bool %104 %float_0
-               OpSelectionMerge %203 None
-               OpBranchConditional %202 %204 %203
-        %204 = OpLabel
-        %205 = OpFOrdGreaterThanEqual %bool %191 %float_0
-               OpBranch %203
-        %203 = OpLabel
-        %206 = OpPhi %bool %202 %201 %205 %204
-               OpStore %x_168 %206
-        %207 = OpLoad %bool %x_168
-               OpStore %x_169_phi %207
-               OpBranch %200
-        %200 = OpLabel
-        %208 = OpLoad %bool %x_169_phi
-        %209 = OpLogicalNot %bool %208
-               OpSelectionMerge %210 None
-               OpBranchConditional %209 %211 %210
-        %211 = OpLabel
-               OpStore %x_90 %true
-               OpStore %x_91 %int_0
-               OpStore %x_173_phi %int_0
-               OpBranch %72
-        %210 = OpLabel
-               OpStore %x_90 %true
-               OpStore %x_91 %int_1
-               OpStore %x_173_phi %int_1
-               OpBranch %72
-         %72 = OpLabel
-        %213 = OpLoad %int %x_173_phi
-               OpReturnValue %213
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %214
-        %217 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %59
-    %param_6 = OpVariable %_ptr_Function_v2float Function %59
-    %param_7 = OpVariable %_ptr_Function_v2float Function %59
-    %param_8 = OpVariable %_ptr_Function_v2float Function %59
-    %param_9 = OpVariable %_ptr_Function_v2float Function %59
-        %223 = OpLoad %v4float %gl_FragCoord
-        %225 = OpAccessChain %_ptr_Uniform_v2float %x_24 %uint_0
-        %226 = OpLoad %v2float %225
-        %227 = OpCompositeExtract %float %223 0
-        %228 = OpCompositeExtract %float %223 1
-        %229 = OpCompositeConstruct %v2float %227 %228
-        %230 = OpFDiv %v2float %229 %226
-               OpStore %pos %230
-               OpStore %param_6 %230
-               OpStore %param_7 %233
-               OpStore %param_8 %236
-               OpStore %param_9 %239
-        %240 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %245 = OpIEqual %bool %240 %int_1
-               OpSelectionMerge %246 None
-               OpBranchConditional %245 %247 %248
-        %247 = OpLabel
-               OpStore %x_GLF_color %250
-               OpBranch %246
-        %248 = OpLabel
-               OpStore %x_GLF_color %251
-               OpBranch %246
-        %246 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %252
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %256 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %257 = OpFunctionCall %void %main_1
-        %258 = OpLoad %v4float %x_GLF_color
-        %259 = OpCompositeConstruct %main_out %258
-               OpReturnValue %259
-               OpFunctionEnd
-       %main = OpFunction %void None %214
-        %261 = OpLabel
-        %263 = OpLoad %v4float %gl_FragCoord_param_1
-        %262 = OpFunctionCall %main_out %main_inner %263
-        %264 = OpCompositeExtract %v4float %262 0
-               OpStore %x_GLF_color_1_1 %264
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d2eec41..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-array-nested-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,151 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
-  let x_79 : f32 = (*(a)).x;
-  let x_81 : f32 = (*(b)).y;
-  let x_84 : f32 = (*(b)).x;
-  let x_86 : f32 = (*(a)).y;
-  return ((x_79 * x_81) - (x_84 * x_86));
-}
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var x_90 : bool = false;
-  var x_91 : i32;
-  var pab : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var pbc : f32;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var pca : f32;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_140 : bool;
-  var x_168 : bool;
-  var x_141_phi : bool;
-  var x_169_phi : bool;
-  var x_173_phi : i32;
-  switch(0u) {
-    default: {
-      let x_94 : ptr<function, f32> = &((*(p)).x);
-      let x_95 : f32 = *(x_94);
-      let x_96 : ptr<function, f32> = &((*(a_1)).x);
-      let x_97 : f32 = *(x_96);
-      let x_99 : ptr<function, f32> = &((*(p)).y);
-      let x_100 : f32 = *(x_99);
-      let x_101 : ptr<function, f32> = &((*(a_1)).y);
-      let x_102 : f32 = *(x_101);
-      let x_105 : ptr<function, f32> = &((*(b_1)).x);
-      let x_106 : f32 = *(x_105);
-      let x_107 : f32 = *(x_96);
-      let x_109 : ptr<function, f32> = &((*(b_1)).y);
-      let x_110 : f32 = *(x_109);
-      let x_111 : f32 = *(x_101);
-      param = vec2<f32>((x_95 - x_97), (x_100 - x_102));
-      param_1 = vec2<f32>((x_106 - x_107), (x_110 - x_111));
-      let x_114 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
-      pab = x_114;
-      let x_115 : f32 = *(x_94);
-      let x_116 : f32 = *(x_105);
-      let x_118 : f32 = *(x_99);
-      let x_119 : f32 = *(x_109);
-      let x_122 : ptr<function, f32> = &((*(c)).x);
-      let x_123 : f32 = *(x_122);
-      let x_124 : f32 = *(x_105);
-      let x_126 : ptr<function, f32> = &((*(c)).y);
-      let x_127 : f32 = *(x_126);
-      let x_128 : f32 = *(x_109);
-      param_2 = vec2<f32>((x_115 - x_116), (x_118 - x_119));
-      param_3 = vec2<f32>((x_123 - x_124), (x_127 - x_128));
-      let x_131 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-      pbc = x_131;
-      let x_134 : bool = ((x_114 < 0.0) && (x_131 < 0.0));
-      x_141_phi = x_134;
-      if (!(x_134)) {
-        x_140 = ((x_114 >= 0.0) && (x_131 >= 0.0));
-        x_141_phi = x_140;
-      }
-      let x_141 : bool = x_141_phi;
-      if (!(x_141)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      let x_145 : f32 = *(x_94);
-      let x_146 : f32 = *(x_122);
-      let x_148 : f32 = *(x_99);
-      let x_149 : f32 = *(x_126);
-      let x_152 : f32 = *(x_96);
-      let x_153 : f32 = *(x_122);
-      let x_155 : f32 = *(x_101);
-      let x_156 : f32 = *(x_126);
-      param_4 = vec2<f32>((x_145 - x_146), (x_148 - x_149));
-      param_5 = vec2<f32>((x_152 - x_153), (x_155 - x_156));
-      let x_159 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-      pca = x_159;
-      let x_162 : bool = ((x_114 < 0.0) && (x_159 < 0.0));
-      x_169_phi = x_162;
-      if (!(x_162)) {
-        x_168 = ((x_114 >= 0.0) && (x_159 >= 0.0));
-        x_169_phi = x_168;
-      }
-      let x_169 : bool = x_169_phi;
-      if (!(x_169)) {
-        x_90 = true;
-        x_91 = 0;
-        x_173_phi = 0;
-        break;
-      }
-      x_90 = true;
-      x_91 = 1;
-      x_173_phi = 1;
-    }
-  }
-  let x_173 : i32 = x_173_phi;
-  return x_173;
-}
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_67 : vec4<f32> = gl_FragCoord;
-  let x_70 : vec2<f32> = x_24.resolution;
-  let x_71 : vec2<f32> = (vec2<f32>(x_67.x, x_67.y) / x_70);
-  pos = x_71;
-  param_6 = x_71;
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_72 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_72 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.hlsl
deleted file mode 100644
index 1bf883a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,130 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_24 : register(b0, space0) {
-  uint4 x_24[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
-  const float x_76 = a.x;
-  const float x_78 = b.y;
-  const float x_81 = b.x;
-  const float x_83 = a.y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
-  float pab = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float pbc = 0.0f;
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float pca = 0.0f;
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_137 = false;
-  bool x_169 = false;
-  bool x_138_phi = false;
-  bool x_170_phi = false;
-  const float x_88 = p.x;
-  const float x_90 = a_1.x;
-  const float x_93 = p.y;
-  const float x_95 = a_1.y;
-  const float x_99 = b_1.x;
-  const float x_100 = a_1.x;
-  const float x_103 = b_1.y;
-  const float x_104 = a_1.y;
-  param = float2((x_88 - x_90), (x_93 - x_95));
-  param_1 = float2((x_99 - x_100), (x_103 - x_104));
-  const float x_107 = cross2d_vf2_vf2_(param, param_1);
-  pab = x_107;
-  const float x_108 = p.x;
-  const float x_109 = b_1.x;
-  const float x_111 = p.y;
-  const float x_112 = b_1.y;
-  const float x_116 = c.x;
-  const float x_117 = b_1.x;
-  const float x_120 = c.y;
-  const float x_121 = b_1.y;
-  param_2 = float2((x_108 - x_109), (x_111 - x_112));
-  param_3 = float2((x_116 - x_117), (x_120 - x_121));
-  const float x_124 = cross2d_vf2_vf2_(param_2, param_3);
-  pbc = x_124;
-  const bool x_129 = ((pab < 0.0f) & (pbc < 0.0f));
-  x_138_phi = x_129;
-  if (!(x_129)) {
-    x_137 = ((pab >= 0.0f) & (pbc >= 0.0f));
-    x_138_phi = x_137;
-  }
-  if (!(x_138_phi)) {
-    return 0;
-  }
-  const float x_142 = p.x;
-  const float x_143 = c.x;
-  const float x_145 = p.y;
-  const float x_146 = c.y;
-  const float x_149 = a_1.x;
-  const float x_150 = c.x;
-  const float x_152 = a_1.y;
-  const float x_153 = c.y;
-  param_4 = float2((x_142 - x_143), (x_145 - x_146));
-  param_5 = float2((x_149 - x_150), (x_152 - x_153));
-  const float x_156 = cross2d_vf2_vf2_(param_4, param_5);
-  pca = x_156;
-  const bool x_161 = ((pab < 0.0f) & (pca < 0.0f));
-  x_170_phi = x_161;
-  if (!(x_161)) {
-    x_169 = ((pab >= 0.0f) & (pca >= 0.0f));
-    x_170_phi = x_169;
-  }
-  if (!(x_170_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_63 = gl_FragCoord;
-  const float2 x_66 = asfloat(x_24[0].xy);
-  pos = (float2(x_63.x, x_63.y) / x_66);
-  param_6 = pos;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_69 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.msl
deleted file mode 100644
index c0e4eae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.msl
+++ /dev/null
@@ -1,141 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
-  float const x_76 = (*(a)).x;
-  float const x_78 = (*(b)).y;
-  float const x_81 = (*(b)).x;
-  float const x_83 = (*(a)).y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(thread float2* const p, thread float2* const a_1, thread float2* const b_1, thread float2* const c) {
-  float pab = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float pbc = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float pca = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_137 = false;
-  bool x_169 = false;
-  bool x_138_phi = false;
-  bool x_170_phi = false;
-  float const x_88 = (*(p)).x;
-  float const x_90 = (*(a_1)).x;
-  float const x_93 = (*(p)).y;
-  float const x_95 = (*(a_1)).y;
-  float const x_99 = (*(b_1)).x;
-  float const x_100 = (*(a_1)).x;
-  float const x_103 = (*(b_1)).y;
-  float const x_104 = (*(a_1)).y;
-  param = float2((x_88 - x_90), (x_93 - x_95));
-  param_1 = float2((x_99 - x_100), (x_103 - x_104));
-  float const x_107 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_107;
-  float const x_108 = (*(p)).x;
-  float const x_109 = (*(b_1)).x;
-  float const x_111 = (*(p)).y;
-  float const x_112 = (*(b_1)).y;
-  float const x_116 = (*(c)).x;
-  float const x_117 = (*(b_1)).x;
-  float const x_120 = (*(c)).y;
-  float const x_121 = (*(b_1)).y;
-  param_2 = float2((x_108 - x_109), (x_111 - x_112));
-  param_3 = float2((x_116 - x_117), (x_120 - x_121));
-  float const x_124 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_124;
-  float const x_125 = pab;
-  float const x_127 = pbc;
-  bool const x_129 = ((x_125 < 0.0f) & (x_127 < 0.0f));
-  x_138_phi = x_129;
-  if (!(x_129)) {
-    float const x_133 = pab;
-    float const x_135 = pbc;
-    x_137 = ((x_133 >= 0.0f) & (x_135 >= 0.0f));
-    x_138_phi = x_137;
-  }
-  bool const x_138 = x_138_phi;
-  if (!(x_138)) {
-    return 0;
-  }
-  float const x_142 = (*(p)).x;
-  float const x_143 = (*(c)).x;
-  float const x_145 = (*(p)).y;
-  float const x_146 = (*(c)).y;
-  float const x_149 = (*(a_1)).x;
-  float const x_150 = (*(c)).x;
-  float const x_152 = (*(a_1)).y;
-  float const x_153 = (*(c)).y;
-  param_4 = float2((x_142 - x_143), (x_145 - x_146));
-  param_5 = float2((x_149 - x_150), (x_152 - x_153));
-  float const x_156 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_156;
-  float const x_157 = pab;
-  float const x_159 = pca;
-  bool const x_161 = ((x_157 < 0.0f) & (x_159 < 0.0f));
-  x_170_phi = x_161;
-  if (!(x_161)) {
-    float const x_165 = pab;
-    float const x_167 = pca;
-    x_169 = ((x_165 >= 0.0f) & (x_167 >= 0.0f));
-    x_170_phi = x_169;
-  }
-  bool const x_170 = x_170_phi;
-  if (!(x_170)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_24, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 pos = 0.0f;
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_63 = *(tint_symbol_3);
-  float2 const x_66 = x_24.resolution;
-  pos = (float2(x_63.x, x_63.y) / x_66);
-  float2 const x_68 = pos;
-  param_6 = x_68;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_69 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_24, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_24, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_24 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_24, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.spvasm
deleted file mode 100644
index a09be33..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,323 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 256
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_24 "x_24"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %cross2d_vf2_vf2_ "cross2d_vf2_vf2_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a_1 "a_1"
-               OpName %b_1 "b_1"
-               OpName %c "c"
-               OpName %pab "pab"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %pbc "pbc"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %pca "pca"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_137 "x_137"
-               OpName %x_169 "x_169"
-               OpName %x_138_phi "x_138_phi"
-               OpName %x_170_phi "x_170_phi"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_24 NonWritable
-               OpDecorate %x_24 DescriptorSet 0
-               OpDecorate %x_24 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_24 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %float %_ptr_Function_v2float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-         %40 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-         %49 = OpConstantNull %float
-         %51 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %62 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %204 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %224 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %227 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %230 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-    %float_1 = OpConstant %float 1
-        %241 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %242 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %243 = OpTypeFunction %main_out %v4float
-%cross2d_vf2_vf2_ = OpFunction %float None %15
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %25 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpLoad %float %25
-         %29 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFMul %float %26 %30
-         %38 = OpFMul %float %33 %36
-         %39 = OpFSub %float %37 %38
-               OpReturnValue %39
-               OpFunctionEnd
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %40
-          %p = OpFunctionParameter %_ptr_Function_v2float
-        %a_1 = OpFunctionParameter %_ptr_Function_v2float
-        %b_1 = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %47 = OpLabel
-        %pab = OpVariable %_ptr_Function_float Function %49
-      %param = OpVariable %_ptr_Function_v2float Function %51
-    %param_1 = OpVariable %_ptr_Function_v2float Function %51
-        %pbc = OpVariable %_ptr_Function_float Function %49
-    %param_2 = OpVariable %_ptr_Function_v2float Function %51
-    %param_3 = OpVariable %_ptr_Function_v2float Function %51
-        %pca = OpVariable %_ptr_Function_float Function %49
-    %param_4 = OpVariable %_ptr_Function_v2float Function %51
-    %param_5 = OpVariable %_ptr_Function_v2float Function %51
-      %x_137 = OpVariable %_ptr_Function_bool Function %62
-      %x_169 = OpVariable %_ptr_Function_bool Function %62
-  %x_138_phi = OpVariable %_ptr_Function_bool Function %62
-  %x_170_phi = OpVariable %_ptr_Function_bool Function %62
-         %67 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %68 = OpLoad %float %67
-         %70 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %74 = OpLoad %float %73
-         %76 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-         %80 = OpLoad %float %79
-         %82 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %83 = OpLoad %float %82
-         %85 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-         %86 = OpLoad %float %85
-         %88 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %89 = OpLoad %float %88
-         %90 = OpFSub %float %68 %71
-         %91 = OpFSub %float %74 %77
-         %92 = OpCompositeConstruct %v2float %90 %91
-               OpStore %param %92
-         %93 = OpFSub %float %80 %83
-         %94 = OpFSub %float %86 %89
-         %95 = OpCompositeConstruct %v2float %93 %94
-               OpStore %param_1 %95
-         %96 = OpFunctionCall %float %cross2d_vf2_vf2_ %param %param_1
-               OpStore %pab %96
-        %100 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %101 = OpLoad %float %100
-        %103 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %107 = OpLoad %float %106
-        %109 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %110 = OpLoad %float %109
-        %112 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %113 = OpLoad %float %112
-        %115 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %116 = OpLoad %float %115
-        %118 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %119 = OpLoad %float %118
-        %121 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %122 = OpLoad %float %121
-        %123 = OpFSub %float %101 %104
-        %124 = OpFSub %float %107 %110
-        %125 = OpCompositeConstruct %v2float %123 %124
-               OpStore %param_2 %125
-        %126 = OpFSub %float %113 %116
-        %127 = OpFSub %float %119 %122
-        %128 = OpCompositeConstruct %v2float %126 %127
-               OpStore %param_3 %128
-        %129 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_2 %param_3
-               OpStore %pbc %129
-        %132 = OpLoad %float %pab
-        %133 = OpLoad %float %pbc
-        %135 = OpFOrdLessThan %bool %132 %float_0
-        %136 = OpFOrdLessThan %bool %133 %float_0
-        %137 = OpLogicalAnd %bool %135 %136
-               OpStore %x_138_phi %137
-        %138 = OpLogicalNot %bool %137
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %float %pab
-        %142 = OpLoad %float %pbc
-        %143 = OpFOrdGreaterThanEqual %bool %141 %float_0
-        %144 = OpFOrdGreaterThanEqual %bool %142 %float_0
-        %145 = OpLogicalAnd %bool %143 %144
-               OpStore %x_137 %145
-        %146 = OpLoad %bool %x_137
-               OpStore %x_138_phi %146
-               OpBranch %139
-        %139 = OpLabel
-        %147 = OpLoad %bool %x_138_phi
-        %148 = OpLogicalNot %bool %147
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %149
-        %150 = OpLabel
-               OpReturnValue %int_0
-        %149 = OpLabel
-        %153 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %154 = OpLoad %float %153
-        %156 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %157 = OpLoad %float %156
-        %159 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %160 = OpLoad %float %159
-        %162 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %163 = OpLoad %float %162
-        %165 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %166 = OpLoad %float %165
-        %168 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %169 = OpLoad %float %168
-        %171 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %172 = OpLoad %float %171
-        %174 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %175 = OpLoad %float %174
-        %176 = OpFSub %float %154 %157
-        %177 = OpFSub %float %160 %163
-        %178 = OpCompositeConstruct %v2float %176 %177
-               OpStore %param_4 %178
-        %179 = OpFSub %float %166 %169
-        %180 = OpFSub %float %172 %175
-        %181 = OpCompositeConstruct %v2float %179 %180
-               OpStore %param_5 %181
-        %182 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_4 %param_5
-               OpStore %pca %182
-        %185 = OpLoad %float %pab
-        %186 = OpLoad %float %pca
-        %187 = OpFOrdLessThan %bool %185 %float_0
-        %188 = OpFOrdLessThan %bool %186 %float_0
-        %189 = OpLogicalAnd %bool %187 %188
-               OpStore %x_170_phi %189
-        %190 = OpLogicalNot %bool %189
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %191
-        %192 = OpLabel
-        %193 = OpLoad %float %pab
-        %194 = OpLoad %float %pca
-        %195 = OpFOrdGreaterThanEqual %bool %193 %float_0
-        %196 = OpFOrdGreaterThanEqual %bool %194 %float_0
-        %197 = OpLogicalAnd %bool %195 %196
-               OpStore %x_169 %197
-        %198 = OpLoad %bool %x_169
-               OpStore %x_170_phi %198
-               OpBranch %191
-        %191 = OpLabel
-        %199 = OpLoad %bool %x_170_phi
-        %200 = OpLogicalNot %bool %199
-               OpSelectionMerge %201 None
-               OpBranchConditional %200 %202 %201
-        %202 = OpLabel
-               OpReturnValue %int_0
-        %201 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %204
-        %207 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %51
-    %param_6 = OpVariable %_ptr_Function_v2float Function %51
-    %param_7 = OpVariable %_ptr_Function_v2float Function %51
-    %param_8 = OpVariable %_ptr_Function_v2float Function %51
-    %param_9 = OpVariable %_ptr_Function_v2float Function %51
-        %213 = OpLoad %v4float %gl_FragCoord
-        %215 = OpAccessChain %_ptr_Uniform_v2float %x_24 %uint_0
-        %216 = OpLoad %v2float %215
-        %217 = OpCompositeExtract %float %213 0
-        %218 = OpCompositeExtract %float %213 1
-        %219 = OpCompositeConstruct %v2float %217 %218
-        %220 = OpFDiv %v2float %219 %216
-               OpStore %pos %220
-        %221 = OpLoad %v2float %pos
-               OpStore %param_6 %221
-               OpStore %param_7 %224
-               OpStore %param_8 %227
-               OpStore %param_9 %230
-        %231 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %236 = OpIEqual %bool %231 %int_1
-               OpSelectionMerge %237 None
-               OpBranchConditional %236 %238 %239
-        %238 = OpLabel
-               OpStore %x_GLF_color %241
-               OpBranch %237
-        %239 = OpLabel
-               OpStore %x_GLF_color %242
-               OpBranch %237
-        %237 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %243
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %247 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %248 = OpFunctionCall %void %main_1
-        %249 = OpLoad %v4float %x_GLF_color
-        %250 = OpCompositeConstruct %main_out %249
-               OpReturnValue %250
-               OpFunctionEnd
-       %main = OpFunction %void None %204
-        %252 = OpLabel
-        %254 = OpLoad %v4float %gl_FragCoord_param_1
-        %253 = OpFunctionCall %main_out %main_inner %254
-        %255 = OpCompositeExtract %v4float %253 0
-               OpStore %x_GLF_color_1_1 %255
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.wgsl
deleted file mode 100644
index f5247c3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,142 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
-  let x_76 : f32 = (*(a)).x;
-  let x_78 : f32 = (*(b)).y;
-  let x_81 : f32 = (*(b)).x;
-  let x_83 : f32 = (*(a)).y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var pab : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var pbc : f32;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var pca : f32;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_137 : bool;
-  var x_169 : bool;
-  var x_138_phi : bool;
-  var x_170_phi : bool;
-  let x_87 : ptr<function, f32> = &((*(p)).x);
-  let x_88 : f32 = *(x_87);
-  let x_89 : ptr<function, f32> = &((*(a_1)).x);
-  let x_90 : f32 = *(x_89);
-  let x_92 : ptr<function, f32> = &((*(p)).y);
-  let x_93 : f32 = *(x_92);
-  let x_94 : ptr<function, f32> = &((*(a_1)).y);
-  let x_95 : f32 = *(x_94);
-  let x_98 : ptr<function, f32> = &((*(b_1)).x);
-  let x_99 : f32 = *(x_98);
-  let x_100 : f32 = *(x_89);
-  let x_102 : ptr<function, f32> = &((*(b_1)).y);
-  let x_103 : f32 = *(x_102);
-  let x_104 : f32 = *(x_94);
-  param = vec2<f32>((x_88 - x_90), (x_93 - x_95));
-  param_1 = vec2<f32>((x_99 - x_100), (x_103 - x_104));
-  let x_107 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_107;
-  let x_108 : f32 = *(x_87);
-  let x_109 : f32 = *(x_98);
-  let x_111 : f32 = *(x_92);
-  let x_112 : f32 = *(x_102);
-  let x_115 : ptr<function, f32> = &((*(c)).x);
-  let x_116 : f32 = *(x_115);
-  let x_117 : f32 = *(x_98);
-  let x_119 : ptr<function, f32> = &((*(c)).y);
-  let x_120 : f32 = *(x_119);
-  let x_121 : f32 = *(x_102);
-  param_2 = vec2<f32>((x_108 - x_109), (x_111 - x_112));
-  param_3 = vec2<f32>((x_116 - x_117), (x_120 - x_121));
-  let x_124 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_124;
-  let x_125 : f32 = pab;
-  let x_127 : f32 = pbc;
-  let x_129 : bool = ((x_125 < 0.0) & (x_127 < 0.0));
-  x_138_phi = x_129;
-  if (!(x_129)) {
-    let x_133 : f32 = pab;
-    let x_135 : f32 = pbc;
-    x_137 = ((x_133 >= 0.0) & (x_135 >= 0.0));
-    x_138_phi = x_137;
-  }
-  let x_138 : bool = x_138_phi;
-  if (!(x_138)) {
-    return 0;
-  }
-  let x_142 : f32 = *(x_87);
-  let x_143 : f32 = *(x_115);
-  let x_145 : f32 = *(x_92);
-  let x_146 : f32 = *(x_119);
-  let x_149 : f32 = *(x_89);
-  let x_150 : f32 = *(x_115);
-  let x_152 : f32 = *(x_94);
-  let x_153 : f32 = *(x_119);
-  param_4 = vec2<f32>((x_142 - x_143), (x_145 - x_146));
-  param_5 = vec2<f32>((x_149 - x_150), (x_152 - x_153));
-  let x_156 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_156;
-  let x_157 : f32 = pab;
-  let x_159 : f32 = pca;
-  let x_161 : bool = ((x_157 < 0.0) & (x_159 < 0.0));
-  x_170_phi = x_161;
-  if (!(x_161)) {
-    let x_165 : f32 = pab;
-    let x_167 : f32 = pca;
-    x_169 = ((x_165 >= 0.0) & (x_167 >= 0.0));
-    x_170_phi = x_169;
-  }
-  let x_170 : bool = x_170_phi;
-  if (!(x_170)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_63 : vec4<f32> = gl_FragCoord;
-  let x_66 : vec2<f32> = x_24.resolution;
-  pos = (vec2<f32>(x_63.x, x_63.y) / x_66);
-  let x_68 : vec2<f32> = pos;
-  param_6 = x_68;
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_69 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_69 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.hlsl
deleted file mode 100644
index 3579c25..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,146 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_24 : register(b0, space0) {
-  uint4 x_24[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
-  const float x_76 = a.x;
-  const float x_78 = b.y;
-  const float x_81 = b.x;
-  const float x_83 = a.y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
-  float pab = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float pbc = 0.0f;
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float pca = 0.0f;
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_137 = false;
-  bool x_169 = false;
-  bool x_138_phi = false;
-  bool x_170_phi = false;
-  const float x_88 = p.x;
-  const float x_90 = a_1.x;
-  const float x_93 = p.y;
-  const float x_95 = a_1.y;
-  const float x_99 = b_1.x;
-  const float x_100 = a_1.x;
-  const float x_103 = b_1.y;
-  const float x_104 = a_1.y;
-  param = float2((x_88 - x_90), (x_93 - x_95));
-  param_1 = float2((x_99 - x_100), (x_103 - x_104));
-  const float x_107 = cross2d_vf2_vf2_(param, param_1);
-  pab = x_107;
-  const float x_108 = p.x;
-  const float x_109 = b_1.x;
-  const float x_111 = p.y;
-  const float x_112 = b_1.y;
-  const float x_116 = c.x;
-  const float x_117 = b_1.x;
-  const float x_120 = c.y;
-  const float x_121 = b_1.y;
-  param_2 = float2((x_108 - x_109), (x_111 - x_112));
-  param_3 = float2((x_116 - x_117), (x_120 - x_121));
-  const float x_124 = cross2d_vf2_vf2_(param_2, param_3);
-  pbc = x_124;
-  bool tint_tmp = (pab < 0.0f);
-  if (tint_tmp) {
-    tint_tmp = (pbc < 0.0f);
-  }
-  const bool x_129 = (tint_tmp);
-  x_138_phi = x_129;
-  if (!(x_129)) {
-    bool tint_tmp_1 = (pab >= 0.0f);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (pbc >= 0.0f);
-    }
-    x_137 = (tint_tmp_1);
-    x_138_phi = x_137;
-  }
-  if (!(x_138_phi)) {
-    return 0;
-  }
-  const float x_142 = p.x;
-  const float x_143 = c.x;
-  const float x_145 = p.y;
-  const float x_146 = c.y;
-  const float x_149 = a_1.x;
-  const float x_150 = c.x;
-  const float x_152 = a_1.y;
-  const float x_153 = c.y;
-  param_4 = float2((x_142 - x_143), (x_145 - x_146));
-  param_5 = float2((x_149 - x_150), (x_152 - x_153));
-  const float x_156 = cross2d_vf2_vf2_(param_4, param_5);
-  pca = x_156;
-  bool tint_tmp_2 = (pab < 0.0f);
-  if (tint_tmp_2) {
-    tint_tmp_2 = (pca < 0.0f);
-  }
-  const bool x_161 = (tint_tmp_2);
-  x_170_phi = x_161;
-  if (!(x_161)) {
-    bool tint_tmp_3 = (pab >= 0.0f);
-    if (tint_tmp_3) {
-      tint_tmp_3 = (pca >= 0.0f);
-    }
-    x_169 = (tint_tmp_3);
-    x_170_phi = x_169;
-  }
-  if (!(x_170_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_63 = gl_FragCoord;
-  const float2 x_66 = asfloat(x_24[0].xy);
-  pos = (float2(x_63.x, x_63.y) / x_66);
-  param_6 = pos;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_69 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.msl
deleted file mode 100644
index 45559fc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.msl
+++ /dev/null
@@ -1,141 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
-  float const x_76 = (*(a)).x;
-  float const x_78 = (*(b)).y;
-  float const x_81 = (*(b)).x;
-  float const x_83 = (*(a)).y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(thread float2* const p, thread float2* const a_1, thread float2* const b_1, thread float2* const c) {
-  float pab = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float pbc = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float pca = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_137 = false;
-  bool x_169 = false;
-  bool x_138_phi = false;
-  bool x_170_phi = false;
-  float const x_88 = (*(p)).x;
-  float const x_90 = (*(a_1)).x;
-  float const x_93 = (*(p)).y;
-  float const x_95 = (*(a_1)).y;
-  float const x_99 = (*(b_1)).x;
-  float const x_100 = (*(a_1)).x;
-  float const x_103 = (*(b_1)).y;
-  float const x_104 = (*(a_1)).y;
-  param = float2((x_88 - x_90), (x_93 - x_95));
-  param_1 = float2((x_99 - x_100), (x_103 - x_104));
-  float const x_107 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_107;
-  float const x_108 = (*(p)).x;
-  float const x_109 = (*(b_1)).x;
-  float const x_111 = (*(p)).y;
-  float const x_112 = (*(b_1)).y;
-  float const x_116 = (*(c)).x;
-  float const x_117 = (*(b_1)).x;
-  float const x_120 = (*(c)).y;
-  float const x_121 = (*(b_1)).y;
-  param_2 = float2((x_108 - x_109), (x_111 - x_112));
-  param_3 = float2((x_116 - x_117), (x_120 - x_121));
-  float const x_124 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_124;
-  float const x_125 = pab;
-  float const x_127 = pbc;
-  bool const x_129 = ((x_125 < 0.0f) && (x_127 < 0.0f));
-  x_138_phi = x_129;
-  if (!(x_129)) {
-    float const x_133 = pab;
-    float const x_135 = pbc;
-    x_137 = ((x_133 >= 0.0f) && (x_135 >= 0.0f));
-    x_138_phi = x_137;
-  }
-  bool const x_138 = x_138_phi;
-  if (!(x_138)) {
-    return 0;
-  }
-  float const x_142 = (*(p)).x;
-  float const x_143 = (*(c)).x;
-  float const x_145 = (*(p)).y;
-  float const x_146 = (*(c)).y;
-  float const x_149 = (*(a_1)).x;
-  float const x_150 = (*(c)).x;
-  float const x_152 = (*(a_1)).y;
-  float const x_153 = (*(c)).y;
-  param_4 = float2((x_142 - x_143), (x_145 - x_146));
-  param_5 = float2((x_149 - x_150), (x_152 - x_153));
-  float const x_156 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_156;
-  float const x_157 = pab;
-  float const x_159 = pca;
-  bool const x_161 = ((x_157 < 0.0f) && (x_159 < 0.0f));
-  x_170_phi = x_161;
-  if (!(x_161)) {
-    float const x_165 = pab;
-    float const x_167 = pca;
-    x_169 = ((x_165 >= 0.0f) && (x_167 >= 0.0f));
-    x_170_phi = x_169;
-  }
-  bool const x_170 = x_170_phi;
-  if (!(x_170)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_24, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 pos = 0.0f;
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_63 = *(tint_symbol_3);
-  float2 const x_66 = x_24.resolution;
-  pos = (float2(x_63.x, x_63.y) / x_66);
-  float2 const x_68 = pos;
-  param_6 = x_68;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_69 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_24, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_24, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_24 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_24, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.spvasm
deleted file mode 100644
index 4b9e486..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,343 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 264
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_24 "x_24"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %cross2d_vf2_vf2_ "cross2d_vf2_vf2_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a_1 "a_1"
-               OpName %b_1 "b_1"
-               OpName %c "c"
-               OpName %pab "pab"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %pbc "pbc"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %pca "pca"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_137 "x_137"
-               OpName %x_169 "x_169"
-               OpName %x_138_phi "x_138_phi"
-               OpName %x_170_phi "x_170_phi"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_24 NonWritable
-               OpDecorate %x_24 DescriptorSet 0
-               OpDecorate %x_24 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_24 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %float %_ptr_Function_v2float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-         %40 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-         %49 = OpConstantNull %float
-         %51 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %62 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %212 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %232 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %235 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %238 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-    %float_1 = OpConstant %float 1
-        %249 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %250 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %251 = OpTypeFunction %main_out %v4float
-%cross2d_vf2_vf2_ = OpFunction %float None %15
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %25 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpLoad %float %25
-         %29 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFMul %float %26 %30
-         %38 = OpFMul %float %33 %36
-         %39 = OpFSub %float %37 %38
-               OpReturnValue %39
-               OpFunctionEnd
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %40
-          %p = OpFunctionParameter %_ptr_Function_v2float
-        %a_1 = OpFunctionParameter %_ptr_Function_v2float
-        %b_1 = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %47 = OpLabel
-        %pab = OpVariable %_ptr_Function_float Function %49
-      %param = OpVariable %_ptr_Function_v2float Function %51
-    %param_1 = OpVariable %_ptr_Function_v2float Function %51
-        %pbc = OpVariable %_ptr_Function_float Function %49
-    %param_2 = OpVariable %_ptr_Function_v2float Function %51
-    %param_3 = OpVariable %_ptr_Function_v2float Function %51
-        %pca = OpVariable %_ptr_Function_float Function %49
-    %param_4 = OpVariable %_ptr_Function_v2float Function %51
-    %param_5 = OpVariable %_ptr_Function_v2float Function %51
-      %x_137 = OpVariable %_ptr_Function_bool Function %62
-      %x_169 = OpVariable %_ptr_Function_bool Function %62
-  %x_138_phi = OpVariable %_ptr_Function_bool Function %62
-  %x_170_phi = OpVariable %_ptr_Function_bool Function %62
-         %67 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %68 = OpLoad %float %67
-         %70 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %74 = OpLoad %float %73
-         %76 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-         %80 = OpLoad %float %79
-         %82 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %83 = OpLoad %float %82
-         %85 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-         %86 = OpLoad %float %85
-         %88 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %89 = OpLoad %float %88
-         %90 = OpFSub %float %68 %71
-         %91 = OpFSub %float %74 %77
-         %92 = OpCompositeConstruct %v2float %90 %91
-               OpStore %param %92
-         %93 = OpFSub %float %80 %83
-         %94 = OpFSub %float %86 %89
-         %95 = OpCompositeConstruct %v2float %93 %94
-               OpStore %param_1 %95
-         %96 = OpFunctionCall %float %cross2d_vf2_vf2_ %param %param_1
-               OpStore %pab %96
-        %100 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %101 = OpLoad %float %100
-        %103 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %107 = OpLoad %float %106
-        %109 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %110 = OpLoad %float %109
-        %112 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %113 = OpLoad %float %112
-        %115 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %116 = OpLoad %float %115
-        %118 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %119 = OpLoad %float %118
-        %121 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %122 = OpLoad %float %121
-        %123 = OpFSub %float %101 %104
-        %124 = OpFSub %float %107 %110
-        %125 = OpCompositeConstruct %v2float %123 %124
-               OpStore %param_2 %125
-        %126 = OpFSub %float %113 %116
-        %127 = OpFSub %float %119 %122
-        %128 = OpCompositeConstruct %v2float %126 %127
-               OpStore %param_3 %128
-        %129 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_2 %param_3
-               OpStore %pbc %129
-        %132 = OpLoad %float %pab
-        %133 = OpLoad %float %pbc
-        %135 = OpFOrdLessThan %bool %132 %float_0
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %136
-        %137 = OpLabel
-        %138 = OpFOrdLessThan %bool %133 %float_0
-               OpBranch %136
-        %136 = OpLabel
-        %139 = OpPhi %bool %135 %47 %138 %137
-               OpStore %x_138_phi %139
-        %140 = OpLogicalNot %bool %139
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %141
-        %142 = OpLabel
-        %143 = OpLoad %float %pab
-        %144 = OpLoad %float %pbc
-        %145 = OpFOrdGreaterThanEqual %bool %143 %float_0
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %146
-        %147 = OpLabel
-        %148 = OpFOrdGreaterThanEqual %bool %144 %float_0
-               OpBranch %146
-        %146 = OpLabel
-        %149 = OpPhi %bool %145 %142 %148 %147
-               OpStore %x_137 %149
-        %150 = OpLoad %bool %x_137
-               OpStore %x_138_phi %150
-               OpBranch %141
-        %141 = OpLabel
-        %151 = OpLoad %bool %x_138_phi
-        %152 = OpLogicalNot %bool %151
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %153
-        %154 = OpLabel
-               OpReturnValue %int_0
-        %153 = OpLabel
-        %157 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %158 = OpLoad %float %157
-        %160 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %161 = OpLoad %float %160
-        %163 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %164 = OpLoad %float %163
-        %166 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %167 = OpLoad %float %166
-        %169 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %170 = OpLoad %float %169
-        %172 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %173 = OpLoad %float %172
-        %175 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %176 = OpLoad %float %175
-        %178 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %179 = OpLoad %float %178
-        %180 = OpFSub %float %158 %161
-        %181 = OpFSub %float %164 %167
-        %182 = OpCompositeConstruct %v2float %180 %181
-               OpStore %param_4 %182
-        %183 = OpFSub %float %170 %173
-        %184 = OpFSub %float %176 %179
-        %185 = OpCompositeConstruct %v2float %183 %184
-               OpStore %param_5 %185
-        %186 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_4 %param_5
-               OpStore %pca %186
-        %189 = OpLoad %float %pab
-        %190 = OpLoad %float %pca
-        %191 = OpFOrdLessThan %bool %189 %float_0
-               OpSelectionMerge %192 None
-               OpBranchConditional %191 %193 %192
-        %193 = OpLabel
-        %194 = OpFOrdLessThan %bool %190 %float_0
-               OpBranch %192
-        %192 = OpLabel
-        %195 = OpPhi %bool %191 %153 %194 %193
-               OpStore %x_170_phi %195
-        %196 = OpLogicalNot %bool %195
-               OpSelectionMerge %197 None
-               OpBranchConditional %196 %198 %197
-        %198 = OpLabel
-        %199 = OpLoad %float %pab
-        %200 = OpLoad %float %pca
-        %201 = OpFOrdGreaterThanEqual %bool %199 %float_0
-               OpSelectionMerge %202 None
-               OpBranchConditional %201 %203 %202
-        %203 = OpLabel
-        %204 = OpFOrdGreaterThanEqual %bool %200 %float_0
-               OpBranch %202
-        %202 = OpLabel
-        %205 = OpPhi %bool %201 %198 %204 %203
-               OpStore %x_169 %205
-        %206 = OpLoad %bool %x_169
-               OpStore %x_170_phi %206
-               OpBranch %197
-        %197 = OpLabel
-        %207 = OpLoad %bool %x_170_phi
-        %208 = OpLogicalNot %bool %207
-               OpSelectionMerge %209 None
-               OpBranchConditional %208 %210 %209
-        %210 = OpLabel
-               OpReturnValue %int_0
-        %209 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %212
-        %215 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %51
-    %param_6 = OpVariable %_ptr_Function_v2float Function %51
-    %param_7 = OpVariable %_ptr_Function_v2float Function %51
-    %param_8 = OpVariable %_ptr_Function_v2float Function %51
-    %param_9 = OpVariable %_ptr_Function_v2float Function %51
-        %221 = OpLoad %v4float %gl_FragCoord
-        %223 = OpAccessChain %_ptr_Uniform_v2float %x_24 %uint_0
-        %224 = OpLoad %v2float %223
-        %225 = OpCompositeExtract %float %221 0
-        %226 = OpCompositeExtract %float %221 1
-        %227 = OpCompositeConstruct %v2float %225 %226
-        %228 = OpFDiv %v2float %227 %224
-               OpStore %pos %228
-        %229 = OpLoad %v2float %pos
-               OpStore %param_6 %229
-               OpStore %param_7 %232
-               OpStore %param_8 %235
-               OpStore %param_9 %238
-        %239 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %244 = OpIEqual %bool %239 %int_1
-               OpSelectionMerge %245 None
-               OpBranchConditional %244 %246 %247
-        %246 = OpLabel
-               OpStore %x_GLF_color %249
-               OpBranch %245
-        %247 = OpLabel
-               OpStore %x_GLF_color %250
-               OpBranch %245
-        %245 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %251
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %255 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %256 = OpFunctionCall %void %main_1
-        %257 = OpLoad %v4float %x_GLF_color
-        %258 = OpCompositeConstruct %main_out %257
-               OpReturnValue %258
-               OpFunctionEnd
-       %main = OpFunction %void None %212
-        %260 = OpLabel
-        %262 = OpLoad %v4float %gl_FragCoord_param_1
-        %261 = OpFunctionCall %main_out %main_inner %262
-        %263 = OpCompositeExtract %v4float %261 0
-               OpStore %x_GLF_color_1_1 %263
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.wgsl
deleted file mode 100644
index 11cfd54..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,142 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
-  let x_76 : f32 = (*(a)).x;
-  let x_78 : f32 = (*(b)).y;
-  let x_81 : f32 = (*(b)).x;
-  let x_83 : f32 = (*(a)).y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var pab : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var pbc : f32;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var pca : f32;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_137 : bool;
-  var x_169 : bool;
-  var x_138_phi : bool;
-  var x_170_phi : bool;
-  let x_87 : ptr<function, f32> = &((*(p)).x);
-  let x_88 : f32 = *(x_87);
-  let x_89 : ptr<function, f32> = &((*(a_1)).x);
-  let x_90 : f32 = *(x_89);
-  let x_92 : ptr<function, f32> = &((*(p)).y);
-  let x_93 : f32 = *(x_92);
-  let x_94 : ptr<function, f32> = &((*(a_1)).y);
-  let x_95 : f32 = *(x_94);
-  let x_98 : ptr<function, f32> = &((*(b_1)).x);
-  let x_99 : f32 = *(x_98);
-  let x_100 : f32 = *(x_89);
-  let x_102 : ptr<function, f32> = &((*(b_1)).y);
-  let x_103 : f32 = *(x_102);
-  let x_104 : f32 = *(x_94);
-  param = vec2<f32>((x_88 - x_90), (x_93 - x_95));
-  param_1 = vec2<f32>((x_99 - x_100), (x_103 - x_104));
-  let x_107 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_107;
-  let x_108 : f32 = *(x_87);
-  let x_109 : f32 = *(x_98);
-  let x_111 : f32 = *(x_92);
-  let x_112 : f32 = *(x_102);
-  let x_115 : ptr<function, f32> = &((*(c)).x);
-  let x_116 : f32 = *(x_115);
-  let x_117 : f32 = *(x_98);
-  let x_119 : ptr<function, f32> = &((*(c)).y);
-  let x_120 : f32 = *(x_119);
-  let x_121 : f32 = *(x_102);
-  param_2 = vec2<f32>((x_108 - x_109), (x_111 - x_112));
-  param_3 = vec2<f32>((x_116 - x_117), (x_120 - x_121));
-  let x_124 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_124;
-  let x_125 : f32 = pab;
-  let x_127 : f32 = pbc;
-  let x_129 : bool = ((x_125 < 0.0) && (x_127 < 0.0));
-  x_138_phi = x_129;
-  if (!(x_129)) {
-    let x_133 : f32 = pab;
-    let x_135 : f32 = pbc;
-    x_137 = ((x_133 >= 0.0) && (x_135 >= 0.0));
-    x_138_phi = x_137;
-  }
-  let x_138 : bool = x_138_phi;
-  if (!(x_138)) {
-    return 0;
-  }
-  let x_142 : f32 = *(x_87);
-  let x_143 : f32 = *(x_115);
-  let x_145 : f32 = *(x_92);
-  let x_146 : f32 = *(x_119);
-  let x_149 : f32 = *(x_89);
-  let x_150 : f32 = *(x_115);
-  let x_152 : f32 = *(x_94);
-  let x_153 : f32 = *(x_119);
-  param_4 = vec2<f32>((x_142 - x_143), (x_145 - x_146));
-  param_5 = vec2<f32>((x_149 - x_150), (x_152 - x_153));
-  let x_156 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_156;
-  let x_157 : f32 = pab;
-  let x_159 : f32 = pca;
-  let x_161 : bool = ((x_157 < 0.0) && (x_159 < 0.0));
-  x_170_phi = x_161;
-  if (!(x_161)) {
-    let x_165 : f32 = pab;
-    let x_167 : f32 = pca;
-    x_169 = ((x_165 >= 0.0) && (x_167 >= 0.0));
-    x_170_phi = x_169;
-  }
-  let x_170 : bool = x_170_phi;
-  if (!(x_170)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_63 : vec4<f32> = gl_FragCoord;
-  let x_66 : vec2<f32> = x_24.resolution;
-  pos = (vec2<f32>(x_63.x, x_63.y) / x_66);
-  let x_68 : vec2<f32> = pos;
-  param_6 = x_68;
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_69 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_69 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.hlsl
deleted file mode 100644
index 870fcb0..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,157 +0,0 @@
-cbuffer cbuffer_x_15 : register(b0, space0) {
-  uint4 x_15[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
-  const float x_85 = a.x;
-  const float x_87 = b.y;
-  const float x_90 = b.x;
-  const float x_92 = a.y;
-  return ((x_85 * x_87) - (x_90 * x_92));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
-  float var_y = 0.0f;
-  float x_96 = 0.0f;
-  float x_97 = 0.0f;
-  float clamp_y = 0.0f;
-  float pab = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float pbc = 0.0f;
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float pca = 0.0f;
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_173 = false;
-  bool x_205 = false;
-  bool x_174_phi = false;
-  bool x_206_phi = false;
-  const float x_99 = asfloat(x_15[0].x);
-  const float x_101 = asfloat(x_15[0].y);
-  if ((x_99 == x_101)) {
-    const float x_107 = c.y;
-    const float2 x_108 = float2(0.0f, x_107);
-    if (true) {
-      const float x_112 = c.y;
-      x_97 = x_112;
-    } else {
-      x_97 = 1.0f;
-    }
-    const float x_113 = x_97;
-    const float x_114 = c.y;
-    const float2 x_116 = float2(1.0f, max(x_113, x_114));
-    const float2 x_117 = float2(x_108.x, x_108.y);
-    x_96 = x_107;
-  } else {
-    x_96 = -1.0f;
-  }
-  var_y = x_96;
-  const float x_120 = c.y;
-  const float x_121 = c.y;
-  clamp_y = clamp(x_120, x_121, var_y);
-  const float x_125 = p.x;
-  const float x_127 = a_1.x;
-  const float x_130 = p.y;
-  const float x_132 = a_1.y;
-  const float x_136 = b_1.x;
-  const float x_137 = a_1.x;
-  const float x_140 = b_1.y;
-  const float x_141 = a_1.y;
-  param = float2((x_125 - x_127), (x_130 - x_132));
-  param_1 = float2((x_136 - x_137), (x_140 - x_141));
-  const float x_144 = cross2d_vf2_vf2_(param, param_1);
-  pab = x_144;
-  const float x_145 = p.x;
-  const float x_146 = b_1.x;
-  const float x_148 = p.y;
-  const float x_149 = b_1.y;
-  const float x_153 = c.x;
-  const float x_154 = b_1.x;
-  const float x_156 = clamp_y;
-  const float x_157 = b_1.y;
-  param_2 = float2((x_145 - x_146), (x_148 - x_149));
-  param_3 = float2((x_153 - x_154), (x_156 - x_157));
-  const float x_160 = cross2d_vf2_vf2_(param_2, param_3);
-  pbc = x_160;
-  const bool x_165 = ((pab < 0.0f) & (pbc < 0.0f));
-  x_174_phi = x_165;
-  if (!(x_165)) {
-    x_173 = ((pab >= 0.0f) & (pbc >= 0.0f));
-    x_174_phi = x_173;
-  }
-  if (!(x_174_phi)) {
-    return 0;
-  }
-  const float x_178 = p.x;
-  const float x_179 = c.x;
-  const float x_181 = p.y;
-  const float x_182 = c.y;
-  const float x_185 = a_1.x;
-  const float x_186 = c.x;
-  const float x_188 = a_1.y;
-  const float x_189 = c.y;
-  param_4 = float2((x_178 - x_179), (x_181 - x_182));
-  param_5 = float2((x_185 - x_186), (x_188 - x_189));
-  const float x_192 = cross2d_vf2_vf2_(param_4, param_5);
-  pca = x_192;
-  const bool x_197 = ((pab < 0.0f) & (pca < 0.0f));
-  x_206_phi = x_197;
-  if (!(x_197)) {
-    x_205 = ((pab >= 0.0f) & (pca >= 0.0f));
-    x_206_phi = x_205;
-  }
-  if (!(x_206_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_72 = gl_FragCoord;
-  const float2 x_75 = asfloat(x_15[0].xy);
-  pos = (float2(x_72.x, x_72.y) / x_75);
-  param_6 = pos;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_78 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_78 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.msl
deleted file mode 100644
index 2889e23..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.msl
+++ /dev/null
@@ -1,170 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
-  float const x_85 = (*(a)).x;
-  float const x_87 = (*(b)).y;
-  float const x_90 = (*(b)).x;
-  float const x_92 = (*(a)).y;
-  return ((x_85 * x_87) - (x_90 * x_92));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(constant buf0& x_15, thread float2* const p, thread float2* const a_1, thread float2* const b_1, thread float2* const c) {
-  float var_y = 0.0f;
-  float x_96 = 0.0f;
-  float x_97 = 0.0f;
-  float clamp_y = 0.0f;
-  float pab = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float pbc = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float pca = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_173 = false;
-  bool x_205 = false;
-  bool x_174_phi = false;
-  bool x_206_phi = false;
-  float const x_99 = x_15.resolution.x;
-  float const x_101 = x_15.resolution.y;
-  if ((x_99 == x_101)) {
-    float const x_107 = (*(c)).y;
-    float2 const x_108 = float2(0.0f, x_107);
-    if (true) {
-      float const x_112 = (*(c)).y;
-      x_97 = x_112;
-    } else {
-      x_97 = 1.0f;
-    }
-    float const x_113 = x_97;
-    float const x_114 = (*(c)).y;
-    float2 const x_116 = float2(1.0f, fmax(x_113, x_114));
-    float2 const x_117 = float2(x_108.x, x_108.y);
-    x_96 = x_107;
-  } else {
-    x_96 = -1.0f;
-  }
-  float const x_118 = x_96;
-  var_y = x_118;
-  float const x_120 = (*(c)).y;
-  float const x_121 = (*(c)).y;
-  float const x_122 = var_y;
-  clamp_y = clamp(x_120, x_121, x_122);
-  float const x_125 = (*(p)).x;
-  float const x_127 = (*(a_1)).x;
-  float const x_130 = (*(p)).y;
-  float const x_132 = (*(a_1)).y;
-  float const x_136 = (*(b_1)).x;
-  float const x_137 = (*(a_1)).x;
-  float const x_140 = (*(b_1)).y;
-  float const x_141 = (*(a_1)).y;
-  param = float2((x_125 - x_127), (x_130 - x_132));
-  param_1 = float2((x_136 - x_137), (x_140 - x_141));
-  float const x_144 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_144;
-  float const x_145 = (*(p)).x;
-  float const x_146 = (*(b_1)).x;
-  float const x_148 = (*(p)).y;
-  float const x_149 = (*(b_1)).y;
-  float const x_153 = (*(c)).x;
-  float const x_154 = (*(b_1)).x;
-  float const x_156 = clamp_y;
-  float const x_157 = (*(b_1)).y;
-  param_2 = float2((x_145 - x_146), (x_148 - x_149));
-  param_3 = float2((x_153 - x_154), (x_156 - x_157));
-  float const x_160 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_160;
-  float const x_161 = pab;
-  float const x_163 = pbc;
-  bool const x_165 = ((x_161 < 0.0f) & (x_163 < 0.0f));
-  x_174_phi = x_165;
-  if (!(x_165)) {
-    float const x_169 = pab;
-    float const x_171 = pbc;
-    x_173 = ((x_169 >= 0.0f) & (x_171 >= 0.0f));
-    x_174_phi = x_173;
-  }
-  bool const x_174 = x_174_phi;
-  if (!(x_174)) {
-    return 0;
-  }
-  float const x_178 = (*(p)).x;
-  float const x_179 = (*(c)).x;
-  float const x_181 = (*(p)).y;
-  float const x_182 = (*(c)).y;
-  float const x_185 = (*(a_1)).x;
-  float const x_186 = (*(c)).x;
-  float const x_188 = (*(a_1)).y;
-  float const x_189 = (*(c)).y;
-  param_4 = float2((x_178 - x_179), (x_181 - x_182));
-  param_5 = float2((x_185 - x_186), (x_188 - x_189));
-  float const x_192 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_192;
-  float const x_193 = pab;
-  float const x_195 = pca;
-  bool const x_197 = ((x_193 < 0.0f) & (x_195 < 0.0f));
-  x_206_phi = x_197;
-  if (!(x_197)) {
-    float const x_201 = pab;
-    float const x_203 = pca;
-    x_205 = ((x_201 >= 0.0f) & (x_203 >= 0.0f));
-    x_206_phi = x_205;
-  }
-  bool const x_206 = x_206_phi;
-  if (!(x_206)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_15, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 pos = 0.0f;
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_72 = *(tint_symbol_3);
-  float2 const x_75 = x_15.resolution;
-  pos = (float2(x_72.x, x_72.y) / x_75);
-  float2 const x_77 = pos;
-  param_6 = x_77;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_78 = pointInTriangle_vf2_vf2_vf2_vf2_(x_15, &(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_78 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_15, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_15, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_15 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_15, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.spvasm
deleted file mode 100644
index 29470fa..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,379 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 298
-; Schema: 0
-               OpCapability Shader
-         %97 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_15 "x_15"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %cross2d_vf2_vf2_ "cross2d_vf2_vf2_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a_1 "a_1"
-               OpName %b_1 "b_1"
-               OpName %c "c"
-               OpName %var_y "var_y"
-               OpName %x_96 "x_96"
-               OpName %x_97 "x_97"
-               OpName %clamp_y "clamp_y"
-               OpName %pab "pab"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %pbc "pbc"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %pca "pca"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_173 "x_173"
-               OpName %x_205 "x_205"
-               OpName %x_174_phi "x_174_phi"
-               OpName %x_206_phi "x_206_phi"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_15 NonWritable
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_15 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %float %_ptr_Function_v2float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-         %40 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-         %49 = OpConstantNull %float
-         %55 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %66 = OpConstantNull %bool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-   %float_n1 = OpConstant %float -1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %247 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %267 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %270 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %273 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-        %283 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %284 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %285 = OpTypeFunction %main_out %v4float
-%cross2d_vf2_vf2_ = OpFunction %float None %15
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %25 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpLoad %float %25
-         %29 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFMul %float %26 %30
-         %38 = OpFMul %float %33 %36
-         %39 = OpFSub %float %37 %38
-               OpReturnValue %39
-               OpFunctionEnd
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %40
-          %p = OpFunctionParameter %_ptr_Function_v2float
-        %a_1 = OpFunctionParameter %_ptr_Function_v2float
-        %b_1 = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %47 = OpLabel
-      %var_y = OpVariable %_ptr_Function_float Function %49
-       %x_96 = OpVariable %_ptr_Function_float Function %49
-       %x_97 = OpVariable %_ptr_Function_float Function %49
-    %clamp_y = OpVariable %_ptr_Function_float Function %49
-        %pab = OpVariable %_ptr_Function_float Function %49
-      %param = OpVariable %_ptr_Function_v2float Function %55
-    %param_1 = OpVariable %_ptr_Function_v2float Function %55
-        %pbc = OpVariable %_ptr_Function_float Function %49
-    %param_2 = OpVariable %_ptr_Function_v2float Function %55
-    %param_3 = OpVariable %_ptr_Function_v2float Function %55
-        %pca = OpVariable %_ptr_Function_float Function %49
-    %param_4 = OpVariable %_ptr_Function_v2float Function %55
-    %param_5 = OpVariable %_ptr_Function_v2float Function %55
-      %x_173 = OpVariable %_ptr_Function_bool Function %66
-      %x_205 = OpVariable %_ptr_Function_bool Function %66
-  %x_174_phi = OpVariable %_ptr_Function_bool Function %66
-  %x_206_phi = OpVariable %_ptr_Function_bool Function %66
-         %71 = OpAccessChain %_ptr_Uniform_float %x_15 %uint_0 %uint_0
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Uniform_float %x_15 %uint_0 %uint_1
-         %74 = OpLoad %float %73
-         %75 = OpFOrdEqual %bool %72 %74
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-         %80 = OpAccessChain %_ptr_Function_float %c %uint_1
-         %81 = OpLoad %float %80
-         %83 = OpCompositeConstruct %v2float %float_0 %81
-               OpSelectionMerge %85 None
-               OpBranchConditional %true %86 %87
-         %86 = OpLabel
-         %89 = OpAccessChain %_ptr_Function_float %c %uint_1
-         %90 = OpLoad %float %89
-               OpStore %x_97 %90
-               OpBranch %85
-         %87 = OpLabel
-               OpStore %x_97 %float_1
-               OpBranch %85
-         %85 = OpLabel
-         %92 = OpLoad %float %x_97
-         %94 = OpAccessChain %_ptr_Function_float %c %uint_1
-         %95 = OpLoad %float %94
-         %96 = OpExtInst %float %97 NMax %92 %95
-         %98 = OpCompositeConstruct %v2float %float_1 %96
-         %99 = OpCompositeExtract %float %83 0
-        %100 = OpCompositeExtract %float %83 1
-        %101 = OpCompositeConstruct %v2float %99 %100
-               OpStore %x_96 %81
-               OpBranch %76
-         %78 = OpLabel
-               OpStore %x_96 %float_n1
-               OpBranch %76
-         %76 = OpLabel
-        %103 = OpLoad %float %x_96
-               OpStore %var_y %103
-        %105 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %106 = OpLoad %float %105
-        %108 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %109 = OpLoad %float %108
-        %110 = OpLoad %float %var_y
-        %111 = OpExtInst %float %97 NClamp %106 %109 %110
-               OpStore %clamp_y %111
-        %113 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %114 = OpLoad %float %113
-        %116 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %117 = OpLoad %float %116
-        %119 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %120 = OpLoad %float %119
-        %122 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %123 = OpLoad %float %122
-        %125 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %126 = OpLoad %float %125
-        %128 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %129 = OpLoad %float %128
-        %131 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %132 = OpLoad %float %131
-        %134 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %135 = OpLoad %float %134
-        %136 = OpFSub %float %114 %117
-        %137 = OpFSub %float %120 %123
-        %138 = OpCompositeConstruct %v2float %136 %137
-               OpStore %param %138
-        %139 = OpFSub %float %126 %129
-        %140 = OpFSub %float %132 %135
-        %141 = OpCompositeConstruct %v2float %139 %140
-               OpStore %param_1 %141
-        %142 = OpFunctionCall %float %cross2d_vf2_vf2_ %param %param_1
-               OpStore %pab %142
-        %146 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %147 = OpLoad %float %146
-        %149 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %150 = OpLoad %float %149
-        %152 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %153 = OpLoad %float %152
-        %155 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %156 = OpLoad %float %155
-        %158 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %159 = OpLoad %float %158
-        %161 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %162 = OpLoad %float %161
-        %163 = OpLoad %float %clamp_y
-        %165 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %166 = OpLoad %float %165
-        %167 = OpFSub %float %147 %150
-        %168 = OpFSub %float %153 %156
-        %169 = OpCompositeConstruct %v2float %167 %168
-               OpStore %param_2 %169
-        %170 = OpFSub %float %159 %162
-        %171 = OpFSub %float %163 %166
-        %172 = OpCompositeConstruct %v2float %170 %171
-               OpStore %param_3 %172
-        %173 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_2 %param_3
-               OpStore %pbc %173
-        %176 = OpLoad %float %pab
-        %177 = OpLoad %float %pbc
-        %178 = OpFOrdLessThan %bool %176 %float_0
-        %179 = OpFOrdLessThan %bool %177 %float_0
-        %180 = OpLogicalAnd %bool %178 %179
-               OpStore %x_174_phi %180
-        %181 = OpLogicalNot %bool %180
-               OpSelectionMerge %182 None
-               OpBranchConditional %181 %183 %182
-        %183 = OpLabel
-        %184 = OpLoad %float %pab
-        %185 = OpLoad %float %pbc
-        %186 = OpFOrdGreaterThanEqual %bool %184 %float_0
-        %187 = OpFOrdGreaterThanEqual %bool %185 %float_0
-        %188 = OpLogicalAnd %bool %186 %187
-               OpStore %x_173 %188
-        %189 = OpLoad %bool %x_173
-               OpStore %x_174_phi %189
-               OpBranch %182
-        %182 = OpLabel
-        %190 = OpLoad %bool %x_174_phi
-        %191 = OpLogicalNot %bool %190
-               OpSelectionMerge %192 None
-               OpBranchConditional %191 %193 %192
-        %193 = OpLabel
-               OpReturnValue %int_0
-        %192 = OpLabel
-        %196 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %197 = OpLoad %float %196
-        %199 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %200 = OpLoad %float %199
-        %202 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %203 = OpLoad %float %202
-        %205 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %206 = OpLoad %float %205
-        %208 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %209 = OpLoad %float %208
-        %211 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %212 = OpLoad %float %211
-        %214 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %215 = OpLoad %float %214
-        %217 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %218 = OpLoad %float %217
-        %219 = OpFSub %float %197 %200
-        %220 = OpFSub %float %203 %206
-        %221 = OpCompositeConstruct %v2float %219 %220
-               OpStore %param_4 %221
-        %222 = OpFSub %float %209 %212
-        %223 = OpFSub %float %215 %218
-        %224 = OpCompositeConstruct %v2float %222 %223
-               OpStore %param_5 %224
-        %225 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_4 %param_5
-               OpStore %pca %225
-        %228 = OpLoad %float %pab
-        %229 = OpLoad %float %pca
-        %230 = OpFOrdLessThan %bool %228 %float_0
-        %231 = OpFOrdLessThan %bool %229 %float_0
-        %232 = OpLogicalAnd %bool %230 %231
-               OpStore %x_206_phi %232
-        %233 = OpLogicalNot %bool %232
-               OpSelectionMerge %234 None
-               OpBranchConditional %233 %235 %234
-        %235 = OpLabel
-        %236 = OpLoad %float %pab
-        %237 = OpLoad %float %pca
-        %238 = OpFOrdGreaterThanEqual %bool %236 %float_0
-        %239 = OpFOrdGreaterThanEqual %bool %237 %float_0
-        %240 = OpLogicalAnd %bool %238 %239
-               OpStore %x_205 %240
-        %241 = OpLoad %bool %x_205
-               OpStore %x_206_phi %241
-               OpBranch %234
-        %234 = OpLabel
-        %242 = OpLoad %bool %x_206_phi
-        %243 = OpLogicalNot %bool %242
-               OpSelectionMerge %244 None
-               OpBranchConditional %243 %245 %244
-        %245 = OpLabel
-               OpReturnValue %int_0
-        %244 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %247
-        %250 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %55
-    %param_6 = OpVariable %_ptr_Function_v2float Function %55
-    %param_7 = OpVariable %_ptr_Function_v2float Function %55
-    %param_8 = OpVariable %_ptr_Function_v2float Function %55
-    %param_9 = OpVariable %_ptr_Function_v2float Function %55
-        %256 = OpLoad %v4float %gl_FragCoord
-        %258 = OpAccessChain %_ptr_Uniform_v2float %x_15 %uint_0
-        %259 = OpLoad %v2float %258
-        %260 = OpCompositeExtract %float %256 0
-        %261 = OpCompositeExtract %float %256 1
-        %262 = OpCompositeConstruct %v2float %260 %261
-        %263 = OpFDiv %v2float %262 %259
-               OpStore %pos %263
-        %264 = OpLoad %v2float %pos
-               OpStore %param_6 %264
-               OpStore %param_7 %267
-               OpStore %param_8 %270
-               OpStore %param_9 %273
-        %274 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %279 = OpIEqual %bool %274 %int_1
-               OpSelectionMerge %280 None
-               OpBranchConditional %279 %281 %282
-        %281 = OpLabel
-               OpStore %x_GLF_color %283
-               OpBranch %280
-        %282 = OpLabel
-               OpStore %x_GLF_color %284
-               OpBranch %280
-        %280 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %285
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %289 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %290 = OpFunctionCall %void %main_1
-        %291 = OpLoad %v4float %x_GLF_color
-        %292 = OpCompositeConstruct %main_out %291
-               OpReturnValue %292
-               OpFunctionEnd
-       %main = OpFunction %void None %247
-        %294 = OpLabel
-        %296 = OpLoad %v4float %gl_FragCoord_param_1
-        %295 = OpFunctionCall %main_out %main_inner %296
-        %297 = OpCompositeExtract %v4float %295 0
-               OpStore %x_GLF_color_1_1 %297
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.wgsl
deleted file mode 100644
index 88c9076..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,172 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
-  let x_85 : f32 = (*(a)).x;
-  let x_87 : f32 = (*(b)).y;
-  let x_90 : f32 = (*(b)).x;
-  let x_92 : f32 = (*(a)).y;
-  return ((x_85 * x_87) - (x_90 * x_92));
-}
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var var_y : f32;
-  var x_96 : f32;
-  var x_97 : f32;
-  var clamp_y : f32;
-  var pab : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var pbc : f32;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var pca : f32;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_173 : bool;
-  var x_205 : bool;
-  var x_174_phi : bool;
-  var x_206_phi : bool;
-  let x_99 : f32 = x_15.resolution.x;
-  let x_101 : f32 = x_15.resolution.y;
-  if ((x_99 == x_101)) {
-    let x_106 : ptr<function, f32> = &((*(c)).y);
-    let x_107 : f32 = *(x_106);
-    let x_108 : vec2<f32> = vec2<f32>(0.0, x_107);
-    if (true) {
-      let x_112 : f32 = *(x_106);
-      x_97 = x_112;
-    } else {
-      x_97 = 1.0;
-    }
-    let x_113 : f32 = x_97;
-    let x_114 : f32 = *(x_106);
-    let x_116 : vec2<f32> = vec2<f32>(1.0, max(x_113, x_114));
-    let x_117 : vec2<f32> = vec2<f32>(x_108.x, x_108.y);
-    x_96 = x_107;
-  } else {
-    x_96 = -1.0;
-  }
-  let x_118 : f32 = x_96;
-  var_y = x_118;
-  let x_119 : ptr<function, f32> = &((*(c)).y);
-  let x_120 : f32 = *(x_119);
-  let x_121 : f32 = *(x_119);
-  let x_122 : f32 = var_y;
-  clamp_y = clamp(x_120, x_121, x_122);
-  let x_124 : ptr<function, f32> = &((*(p)).x);
-  let x_125 : f32 = *(x_124);
-  let x_126 : ptr<function, f32> = &((*(a_1)).x);
-  let x_127 : f32 = *(x_126);
-  let x_129 : ptr<function, f32> = &((*(p)).y);
-  let x_130 : f32 = *(x_129);
-  let x_131 : ptr<function, f32> = &((*(a_1)).y);
-  let x_132 : f32 = *(x_131);
-  let x_135 : ptr<function, f32> = &((*(b_1)).x);
-  let x_136 : f32 = *(x_135);
-  let x_137 : f32 = *(x_126);
-  let x_139 : ptr<function, f32> = &((*(b_1)).y);
-  let x_140 : f32 = *(x_139);
-  let x_141 : f32 = *(x_131);
-  param = vec2<f32>((x_125 - x_127), (x_130 - x_132));
-  param_1 = vec2<f32>((x_136 - x_137), (x_140 - x_141));
-  let x_144 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_144;
-  let x_145 : f32 = *(x_124);
-  let x_146 : f32 = *(x_135);
-  let x_148 : f32 = *(x_129);
-  let x_149 : f32 = *(x_139);
-  let x_152 : ptr<function, f32> = &((*(c)).x);
-  let x_153 : f32 = *(x_152);
-  let x_154 : f32 = *(x_135);
-  let x_156 : f32 = clamp_y;
-  let x_157 : f32 = *(x_139);
-  param_2 = vec2<f32>((x_145 - x_146), (x_148 - x_149));
-  param_3 = vec2<f32>((x_153 - x_154), (x_156 - x_157));
-  let x_160 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_160;
-  let x_161 : f32 = pab;
-  let x_163 : f32 = pbc;
-  let x_165 : bool = ((x_161 < 0.0) & (x_163 < 0.0));
-  x_174_phi = x_165;
-  if (!(x_165)) {
-    let x_169 : f32 = pab;
-    let x_171 : f32 = pbc;
-    x_173 = ((x_169 >= 0.0) & (x_171 >= 0.0));
-    x_174_phi = x_173;
-  }
-  let x_174 : bool = x_174_phi;
-  if (!(x_174)) {
-    return 0;
-  }
-  let x_178 : f32 = *(x_124);
-  let x_179 : f32 = *(x_152);
-  let x_181 : f32 = *(x_129);
-  let x_182 : f32 = *(x_119);
-  let x_185 : f32 = *(x_126);
-  let x_186 : f32 = *(x_152);
-  let x_188 : f32 = *(x_131);
-  let x_189 : f32 = *(x_119);
-  param_4 = vec2<f32>((x_178 - x_179), (x_181 - x_182));
-  param_5 = vec2<f32>((x_185 - x_186), (x_188 - x_189));
-  let x_192 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_192;
-  let x_193 : f32 = pab;
-  let x_195 : f32 = pca;
-  let x_197 : bool = ((x_193 < 0.0) & (x_195 < 0.0));
-  x_206_phi = x_197;
-  if (!(x_197)) {
-    let x_201 : f32 = pab;
-    let x_203 : f32 = pca;
-    x_205 = ((x_201 >= 0.0) & (x_203 >= 0.0));
-    x_206_phi = x_205;
-  }
-  let x_206 : bool = x_206_phi;
-  if (!(x_206)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_72 : vec4<f32> = gl_FragCoord;
-  let x_75 : vec2<f32> = x_15.resolution;
-  pos = (vec2<f32>(x_72.x, x_72.y) / x_75);
-  let x_77 : vec2<f32> = pos;
-  param_6 = x_77;
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_78 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_78 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.hlsl
deleted file mode 100644
index 9e43c5f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,173 +0,0 @@
-cbuffer cbuffer_x_15 : register(b0, space0) {
-  uint4 x_15[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
-  const float x_85 = a.x;
-  const float x_87 = b.y;
-  const float x_90 = b.x;
-  const float x_92 = a.y;
-  return ((x_85 * x_87) - (x_90 * x_92));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
-  float var_y = 0.0f;
-  float x_96 = 0.0f;
-  float x_97 = 0.0f;
-  float clamp_y = 0.0f;
-  float pab = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float pbc = 0.0f;
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float pca = 0.0f;
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_173 = false;
-  bool x_205 = false;
-  bool x_174_phi = false;
-  bool x_206_phi = false;
-  const float x_99 = asfloat(x_15[0].x);
-  const float x_101 = asfloat(x_15[0].y);
-  if ((x_99 == x_101)) {
-    const float x_107 = c.y;
-    const float2 x_108 = float2(0.0f, x_107);
-    if (true) {
-      const float x_112 = c.y;
-      x_97 = x_112;
-    } else {
-      x_97 = 1.0f;
-    }
-    const float x_113 = x_97;
-    const float x_114 = c.y;
-    const float2 x_116 = float2(1.0f, max(x_113, x_114));
-    const float2 x_117 = float2(x_108.x, x_108.y);
-    x_96 = x_107;
-  } else {
-    x_96 = -1.0f;
-  }
-  var_y = x_96;
-  const float x_120 = c.y;
-  const float x_121 = c.y;
-  clamp_y = clamp(x_120, x_121, var_y);
-  const float x_125 = p.x;
-  const float x_127 = a_1.x;
-  const float x_130 = p.y;
-  const float x_132 = a_1.y;
-  const float x_136 = b_1.x;
-  const float x_137 = a_1.x;
-  const float x_140 = b_1.y;
-  const float x_141 = a_1.y;
-  param = float2((x_125 - x_127), (x_130 - x_132));
-  param_1 = float2((x_136 - x_137), (x_140 - x_141));
-  const float x_144 = cross2d_vf2_vf2_(param, param_1);
-  pab = x_144;
-  const float x_145 = p.x;
-  const float x_146 = b_1.x;
-  const float x_148 = p.y;
-  const float x_149 = b_1.y;
-  const float x_153 = c.x;
-  const float x_154 = b_1.x;
-  const float x_156 = clamp_y;
-  const float x_157 = b_1.y;
-  param_2 = float2((x_145 - x_146), (x_148 - x_149));
-  param_3 = float2((x_153 - x_154), (x_156 - x_157));
-  const float x_160 = cross2d_vf2_vf2_(param_2, param_3);
-  pbc = x_160;
-  bool tint_tmp = (pab < 0.0f);
-  if (tint_tmp) {
-    tint_tmp = (pbc < 0.0f);
-  }
-  const bool x_165 = (tint_tmp);
-  x_174_phi = x_165;
-  if (!(x_165)) {
-    bool tint_tmp_1 = (pab >= 0.0f);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (pbc >= 0.0f);
-    }
-    x_173 = (tint_tmp_1);
-    x_174_phi = x_173;
-  }
-  if (!(x_174_phi)) {
-    return 0;
-  }
-  const float x_178 = p.x;
-  const float x_179 = c.x;
-  const float x_181 = p.y;
-  const float x_182 = c.y;
-  const float x_185 = a_1.x;
-  const float x_186 = c.x;
-  const float x_188 = a_1.y;
-  const float x_189 = c.y;
-  param_4 = float2((x_178 - x_179), (x_181 - x_182));
-  param_5 = float2((x_185 - x_186), (x_188 - x_189));
-  const float x_192 = cross2d_vf2_vf2_(param_4, param_5);
-  pca = x_192;
-  bool tint_tmp_2 = (pab < 0.0f);
-  if (tint_tmp_2) {
-    tint_tmp_2 = (pca < 0.0f);
-  }
-  const bool x_197 = (tint_tmp_2);
-  x_206_phi = x_197;
-  if (!(x_197)) {
-    bool tint_tmp_3 = (pab >= 0.0f);
-    if (tint_tmp_3) {
-      tint_tmp_3 = (pca >= 0.0f);
-    }
-    x_205 = (tint_tmp_3);
-    x_206_phi = x_205;
-  }
-  if (!(x_206_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_72 = gl_FragCoord;
-  const float2 x_75 = asfloat(x_15[0].xy);
-  pos = (float2(x_72.x, x_72.y) / x_75);
-  param_6 = pos;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_78 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_78 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.msl
deleted file mode 100644
index be2b17f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.msl
+++ /dev/null
@@ -1,170 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
-  float const x_85 = (*(a)).x;
-  float const x_87 = (*(b)).y;
-  float const x_90 = (*(b)).x;
-  float const x_92 = (*(a)).y;
-  return ((x_85 * x_87) - (x_90 * x_92));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(constant buf0& x_15, thread float2* const p, thread float2* const a_1, thread float2* const b_1, thread float2* const c) {
-  float var_y = 0.0f;
-  float x_96 = 0.0f;
-  float x_97 = 0.0f;
-  float clamp_y = 0.0f;
-  float pab = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float pbc = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float pca = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_173 = false;
-  bool x_205 = false;
-  bool x_174_phi = false;
-  bool x_206_phi = false;
-  float const x_99 = x_15.resolution.x;
-  float const x_101 = x_15.resolution.y;
-  if ((x_99 == x_101)) {
-    float const x_107 = (*(c)).y;
-    float2 const x_108 = float2(0.0f, x_107);
-    if (true) {
-      float const x_112 = (*(c)).y;
-      x_97 = x_112;
-    } else {
-      x_97 = 1.0f;
-    }
-    float const x_113 = x_97;
-    float const x_114 = (*(c)).y;
-    float2 const x_116 = float2(1.0f, fmax(x_113, x_114));
-    float2 const x_117 = float2(x_108.x, x_108.y);
-    x_96 = x_107;
-  } else {
-    x_96 = -1.0f;
-  }
-  float const x_118 = x_96;
-  var_y = x_118;
-  float const x_120 = (*(c)).y;
-  float const x_121 = (*(c)).y;
-  float const x_122 = var_y;
-  clamp_y = clamp(x_120, x_121, x_122);
-  float const x_125 = (*(p)).x;
-  float const x_127 = (*(a_1)).x;
-  float const x_130 = (*(p)).y;
-  float const x_132 = (*(a_1)).y;
-  float const x_136 = (*(b_1)).x;
-  float const x_137 = (*(a_1)).x;
-  float const x_140 = (*(b_1)).y;
-  float const x_141 = (*(a_1)).y;
-  param = float2((x_125 - x_127), (x_130 - x_132));
-  param_1 = float2((x_136 - x_137), (x_140 - x_141));
-  float const x_144 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_144;
-  float const x_145 = (*(p)).x;
-  float const x_146 = (*(b_1)).x;
-  float const x_148 = (*(p)).y;
-  float const x_149 = (*(b_1)).y;
-  float const x_153 = (*(c)).x;
-  float const x_154 = (*(b_1)).x;
-  float const x_156 = clamp_y;
-  float const x_157 = (*(b_1)).y;
-  param_2 = float2((x_145 - x_146), (x_148 - x_149));
-  param_3 = float2((x_153 - x_154), (x_156 - x_157));
-  float const x_160 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_160;
-  float const x_161 = pab;
-  float const x_163 = pbc;
-  bool const x_165 = ((x_161 < 0.0f) && (x_163 < 0.0f));
-  x_174_phi = x_165;
-  if (!(x_165)) {
-    float const x_169 = pab;
-    float const x_171 = pbc;
-    x_173 = ((x_169 >= 0.0f) && (x_171 >= 0.0f));
-    x_174_phi = x_173;
-  }
-  bool const x_174 = x_174_phi;
-  if (!(x_174)) {
-    return 0;
-  }
-  float const x_178 = (*(p)).x;
-  float const x_179 = (*(c)).x;
-  float const x_181 = (*(p)).y;
-  float const x_182 = (*(c)).y;
-  float const x_185 = (*(a_1)).x;
-  float const x_186 = (*(c)).x;
-  float const x_188 = (*(a_1)).y;
-  float const x_189 = (*(c)).y;
-  param_4 = float2((x_178 - x_179), (x_181 - x_182));
-  param_5 = float2((x_185 - x_186), (x_188 - x_189));
-  float const x_192 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_192;
-  float const x_193 = pab;
-  float const x_195 = pca;
-  bool const x_197 = ((x_193 < 0.0f) && (x_195 < 0.0f));
-  x_206_phi = x_197;
-  if (!(x_197)) {
-    float const x_201 = pab;
-    float const x_203 = pca;
-    x_205 = ((x_201 >= 0.0f) && (x_203 >= 0.0f));
-    x_206_phi = x_205;
-  }
-  bool const x_206 = x_206_phi;
-  if (!(x_206)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_15, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 pos = 0.0f;
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_72 = *(tint_symbol_3);
-  float2 const x_75 = x_15.resolution;
-  pos = (float2(x_72.x, x_72.y) / x_75);
-  float2 const x_77 = pos;
-  param_6 = x_77;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_78 = pointInTriangle_vf2_vf2_vf2_vf2_(x_15, &(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_78 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_15, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_15, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_15 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_15, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.spvasm
deleted file mode 100644
index 11326c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,399 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 306
-; Schema: 0
-               OpCapability Shader
-         %97 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_15 "x_15"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %cross2d_vf2_vf2_ "cross2d_vf2_vf2_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a_1 "a_1"
-               OpName %b_1 "b_1"
-               OpName %c "c"
-               OpName %var_y "var_y"
-               OpName %x_96 "x_96"
-               OpName %x_97 "x_97"
-               OpName %clamp_y "clamp_y"
-               OpName %pab "pab"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %pbc "pbc"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %pca "pca"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_173 "x_173"
-               OpName %x_205 "x_205"
-               OpName %x_174_phi "x_174_phi"
-               OpName %x_206_phi "x_206_phi"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_15 NonWritable
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_15 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %float %_ptr_Function_v2float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-         %40 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-         %49 = OpConstantNull %float
-         %55 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %66 = OpConstantNull %bool
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-   %float_n1 = OpConstant %float -1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %255 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %275 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %278 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %281 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-        %291 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %292 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %293 = OpTypeFunction %main_out %v4float
-%cross2d_vf2_vf2_ = OpFunction %float None %15
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %25 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpLoad %float %25
-         %29 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFMul %float %26 %30
-         %38 = OpFMul %float %33 %36
-         %39 = OpFSub %float %37 %38
-               OpReturnValue %39
-               OpFunctionEnd
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %40
-          %p = OpFunctionParameter %_ptr_Function_v2float
-        %a_1 = OpFunctionParameter %_ptr_Function_v2float
-        %b_1 = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %47 = OpLabel
-      %var_y = OpVariable %_ptr_Function_float Function %49
-       %x_96 = OpVariable %_ptr_Function_float Function %49
-       %x_97 = OpVariable %_ptr_Function_float Function %49
-    %clamp_y = OpVariable %_ptr_Function_float Function %49
-        %pab = OpVariable %_ptr_Function_float Function %49
-      %param = OpVariable %_ptr_Function_v2float Function %55
-    %param_1 = OpVariable %_ptr_Function_v2float Function %55
-        %pbc = OpVariable %_ptr_Function_float Function %49
-    %param_2 = OpVariable %_ptr_Function_v2float Function %55
-    %param_3 = OpVariable %_ptr_Function_v2float Function %55
-        %pca = OpVariable %_ptr_Function_float Function %49
-    %param_4 = OpVariable %_ptr_Function_v2float Function %55
-    %param_5 = OpVariable %_ptr_Function_v2float Function %55
-      %x_173 = OpVariable %_ptr_Function_bool Function %66
-      %x_205 = OpVariable %_ptr_Function_bool Function %66
-  %x_174_phi = OpVariable %_ptr_Function_bool Function %66
-  %x_206_phi = OpVariable %_ptr_Function_bool Function %66
-         %71 = OpAccessChain %_ptr_Uniform_float %x_15 %uint_0 %uint_0
-         %72 = OpLoad %float %71
-         %73 = OpAccessChain %_ptr_Uniform_float %x_15 %uint_0 %uint_1
-         %74 = OpLoad %float %73
-         %75 = OpFOrdEqual %bool %72 %74
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %78
-         %77 = OpLabel
-         %80 = OpAccessChain %_ptr_Function_float %c %uint_1
-         %81 = OpLoad %float %80
-         %83 = OpCompositeConstruct %v2float %float_0 %81
-               OpSelectionMerge %85 None
-               OpBranchConditional %true %86 %87
-         %86 = OpLabel
-         %89 = OpAccessChain %_ptr_Function_float %c %uint_1
-         %90 = OpLoad %float %89
-               OpStore %x_97 %90
-               OpBranch %85
-         %87 = OpLabel
-               OpStore %x_97 %float_1
-               OpBranch %85
-         %85 = OpLabel
-         %92 = OpLoad %float %x_97
-         %94 = OpAccessChain %_ptr_Function_float %c %uint_1
-         %95 = OpLoad %float %94
-         %96 = OpExtInst %float %97 NMax %92 %95
-         %98 = OpCompositeConstruct %v2float %float_1 %96
-         %99 = OpCompositeExtract %float %83 0
-        %100 = OpCompositeExtract %float %83 1
-        %101 = OpCompositeConstruct %v2float %99 %100
-               OpStore %x_96 %81
-               OpBranch %76
-         %78 = OpLabel
-               OpStore %x_96 %float_n1
-               OpBranch %76
-         %76 = OpLabel
-        %103 = OpLoad %float %x_96
-               OpStore %var_y %103
-        %105 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %106 = OpLoad %float %105
-        %108 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %109 = OpLoad %float %108
-        %110 = OpLoad %float %var_y
-        %111 = OpExtInst %float %97 NClamp %106 %109 %110
-               OpStore %clamp_y %111
-        %113 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %114 = OpLoad %float %113
-        %116 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %117 = OpLoad %float %116
-        %119 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %120 = OpLoad %float %119
-        %122 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %123 = OpLoad %float %122
-        %125 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %126 = OpLoad %float %125
-        %128 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %129 = OpLoad %float %128
-        %131 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %132 = OpLoad %float %131
-        %134 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %135 = OpLoad %float %134
-        %136 = OpFSub %float %114 %117
-        %137 = OpFSub %float %120 %123
-        %138 = OpCompositeConstruct %v2float %136 %137
-               OpStore %param %138
-        %139 = OpFSub %float %126 %129
-        %140 = OpFSub %float %132 %135
-        %141 = OpCompositeConstruct %v2float %139 %140
-               OpStore %param_1 %141
-        %142 = OpFunctionCall %float %cross2d_vf2_vf2_ %param %param_1
-               OpStore %pab %142
-        %146 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %147 = OpLoad %float %146
-        %149 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %150 = OpLoad %float %149
-        %152 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %153 = OpLoad %float %152
-        %155 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %156 = OpLoad %float %155
-        %158 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %159 = OpLoad %float %158
-        %161 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %162 = OpLoad %float %161
-        %163 = OpLoad %float %clamp_y
-        %165 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %166 = OpLoad %float %165
-        %167 = OpFSub %float %147 %150
-        %168 = OpFSub %float %153 %156
-        %169 = OpCompositeConstruct %v2float %167 %168
-               OpStore %param_2 %169
-        %170 = OpFSub %float %159 %162
-        %171 = OpFSub %float %163 %166
-        %172 = OpCompositeConstruct %v2float %170 %171
-               OpStore %param_3 %172
-        %173 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_2 %param_3
-               OpStore %pbc %173
-        %176 = OpLoad %float %pab
-        %177 = OpLoad %float %pbc
-        %178 = OpFOrdLessThan %bool %176 %float_0
-               OpSelectionMerge %179 None
-               OpBranchConditional %178 %180 %179
-        %180 = OpLabel
-        %181 = OpFOrdLessThan %bool %177 %float_0
-               OpBranch %179
-        %179 = OpLabel
-        %182 = OpPhi %bool %178 %76 %181 %180
-               OpStore %x_174_phi %182
-        %183 = OpLogicalNot %bool %182
-               OpSelectionMerge %184 None
-               OpBranchConditional %183 %185 %184
-        %185 = OpLabel
-        %186 = OpLoad %float %pab
-        %187 = OpLoad %float %pbc
-        %188 = OpFOrdGreaterThanEqual %bool %186 %float_0
-               OpSelectionMerge %189 None
-               OpBranchConditional %188 %190 %189
-        %190 = OpLabel
-        %191 = OpFOrdGreaterThanEqual %bool %187 %float_0
-               OpBranch %189
-        %189 = OpLabel
-        %192 = OpPhi %bool %188 %185 %191 %190
-               OpStore %x_173 %192
-        %193 = OpLoad %bool %x_173
-               OpStore %x_174_phi %193
-               OpBranch %184
-        %184 = OpLabel
-        %194 = OpLoad %bool %x_174_phi
-        %195 = OpLogicalNot %bool %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %196
-        %197 = OpLabel
-               OpReturnValue %int_0
-        %196 = OpLabel
-        %200 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %201 = OpLoad %float %200
-        %203 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %204 = OpLoad %float %203
-        %206 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %207 = OpLoad %float %206
-        %209 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %210 = OpLoad %float %209
-        %212 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %213 = OpLoad %float %212
-        %215 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %216 = OpLoad %float %215
-        %218 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %219 = OpLoad %float %218
-        %221 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %222 = OpLoad %float %221
-        %223 = OpFSub %float %201 %204
-        %224 = OpFSub %float %207 %210
-        %225 = OpCompositeConstruct %v2float %223 %224
-               OpStore %param_4 %225
-        %226 = OpFSub %float %213 %216
-        %227 = OpFSub %float %219 %222
-        %228 = OpCompositeConstruct %v2float %226 %227
-               OpStore %param_5 %228
-        %229 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_4 %param_5
-               OpStore %pca %229
-        %232 = OpLoad %float %pab
-        %233 = OpLoad %float %pca
-        %234 = OpFOrdLessThan %bool %232 %float_0
-               OpSelectionMerge %235 None
-               OpBranchConditional %234 %236 %235
-        %236 = OpLabel
-        %237 = OpFOrdLessThan %bool %233 %float_0
-               OpBranch %235
-        %235 = OpLabel
-        %238 = OpPhi %bool %234 %196 %237 %236
-               OpStore %x_206_phi %238
-        %239 = OpLogicalNot %bool %238
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %240
-        %241 = OpLabel
-        %242 = OpLoad %float %pab
-        %243 = OpLoad %float %pca
-        %244 = OpFOrdGreaterThanEqual %bool %242 %float_0
-               OpSelectionMerge %245 None
-               OpBranchConditional %244 %246 %245
-        %246 = OpLabel
-        %247 = OpFOrdGreaterThanEqual %bool %243 %float_0
-               OpBranch %245
-        %245 = OpLabel
-        %248 = OpPhi %bool %244 %241 %247 %246
-               OpStore %x_205 %248
-        %249 = OpLoad %bool %x_205
-               OpStore %x_206_phi %249
-               OpBranch %240
-        %240 = OpLabel
-        %250 = OpLoad %bool %x_206_phi
-        %251 = OpLogicalNot %bool %250
-               OpSelectionMerge %252 None
-               OpBranchConditional %251 %253 %252
-        %253 = OpLabel
-               OpReturnValue %int_0
-        %252 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %255
-        %258 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %55
-    %param_6 = OpVariable %_ptr_Function_v2float Function %55
-    %param_7 = OpVariable %_ptr_Function_v2float Function %55
-    %param_8 = OpVariable %_ptr_Function_v2float Function %55
-    %param_9 = OpVariable %_ptr_Function_v2float Function %55
-        %264 = OpLoad %v4float %gl_FragCoord
-        %266 = OpAccessChain %_ptr_Uniform_v2float %x_15 %uint_0
-        %267 = OpLoad %v2float %266
-        %268 = OpCompositeExtract %float %264 0
-        %269 = OpCompositeExtract %float %264 1
-        %270 = OpCompositeConstruct %v2float %268 %269
-        %271 = OpFDiv %v2float %270 %267
-               OpStore %pos %271
-        %272 = OpLoad %v2float %pos
-               OpStore %param_6 %272
-               OpStore %param_7 %275
-               OpStore %param_8 %278
-               OpStore %param_9 %281
-        %282 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %287 = OpIEqual %bool %282 %int_1
-               OpSelectionMerge %288 None
-               OpBranchConditional %287 %289 %290
-        %289 = OpLabel
-               OpStore %x_GLF_color %291
-               OpBranch %288
-        %290 = OpLabel
-               OpStore %x_GLF_color %292
-               OpBranch %288
-        %288 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %293
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %297 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %298 = OpFunctionCall %void %main_1
-        %299 = OpLoad %v4float %x_GLF_color
-        %300 = OpCompositeConstruct %main_out %299
-               OpReturnValue %300
-               OpFunctionEnd
-       %main = OpFunction %void None %255
-        %302 = OpLabel
-        %304 = OpLoad %v4float %gl_FragCoord_param_1
-        %303 = OpFunctionCall %main_out %main_inner %304
-        %305 = OpCompositeExtract %v4float %303 0
-               OpStore %x_GLF_color_1_1 %305
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.wgsl
deleted file mode 100644
index d58c35b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-clamp-conditional-mix/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,172 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_15 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
-  let x_85 : f32 = (*(a)).x;
-  let x_87 : f32 = (*(b)).y;
-  let x_90 : f32 = (*(b)).x;
-  let x_92 : f32 = (*(a)).y;
-  return ((x_85 * x_87) - (x_90 * x_92));
-}
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var var_y : f32;
-  var x_96 : f32;
-  var x_97 : f32;
-  var clamp_y : f32;
-  var pab : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var pbc : f32;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var pca : f32;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_173 : bool;
-  var x_205 : bool;
-  var x_174_phi : bool;
-  var x_206_phi : bool;
-  let x_99 : f32 = x_15.resolution.x;
-  let x_101 : f32 = x_15.resolution.y;
-  if ((x_99 == x_101)) {
-    let x_106 : ptr<function, f32> = &((*(c)).y);
-    let x_107 : f32 = *(x_106);
-    let x_108 : vec2<f32> = vec2<f32>(0.0, x_107);
-    if (true) {
-      let x_112 : f32 = *(x_106);
-      x_97 = x_112;
-    } else {
-      x_97 = 1.0;
-    }
-    let x_113 : f32 = x_97;
-    let x_114 : f32 = *(x_106);
-    let x_116 : vec2<f32> = vec2<f32>(1.0, max(x_113, x_114));
-    let x_117 : vec2<f32> = vec2<f32>(x_108.x, x_108.y);
-    x_96 = x_107;
-  } else {
-    x_96 = -1.0;
-  }
-  let x_118 : f32 = x_96;
-  var_y = x_118;
-  let x_119 : ptr<function, f32> = &((*(c)).y);
-  let x_120 : f32 = *(x_119);
-  let x_121 : f32 = *(x_119);
-  let x_122 : f32 = var_y;
-  clamp_y = clamp(x_120, x_121, x_122);
-  let x_124 : ptr<function, f32> = &((*(p)).x);
-  let x_125 : f32 = *(x_124);
-  let x_126 : ptr<function, f32> = &((*(a_1)).x);
-  let x_127 : f32 = *(x_126);
-  let x_129 : ptr<function, f32> = &((*(p)).y);
-  let x_130 : f32 = *(x_129);
-  let x_131 : ptr<function, f32> = &((*(a_1)).y);
-  let x_132 : f32 = *(x_131);
-  let x_135 : ptr<function, f32> = &((*(b_1)).x);
-  let x_136 : f32 = *(x_135);
-  let x_137 : f32 = *(x_126);
-  let x_139 : ptr<function, f32> = &((*(b_1)).y);
-  let x_140 : f32 = *(x_139);
-  let x_141 : f32 = *(x_131);
-  param = vec2<f32>((x_125 - x_127), (x_130 - x_132));
-  param_1 = vec2<f32>((x_136 - x_137), (x_140 - x_141));
-  let x_144 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_144;
-  let x_145 : f32 = *(x_124);
-  let x_146 : f32 = *(x_135);
-  let x_148 : f32 = *(x_129);
-  let x_149 : f32 = *(x_139);
-  let x_152 : ptr<function, f32> = &((*(c)).x);
-  let x_153 : f32 = *(x_152);
-  let x_154 : f32 = *(x_135);
-  let x_156 : f32 = clamp_y;
-  let x_157 : f32 = *(x_139);
-  param_2 = vec2<f32>((x_145 - x_146), (x_148 - x_149));
-  param_3 = vec2<f32>((x_153 - x_154), (x_156 - x_157));
-  let x_160 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_160;
-  let x_161 : f32 = pab;
-  let x_163 : f32 = pbc;
-  let x_165 : bool = ((x_161 < 0.0) && (x_163 < 0.0));
-  x_174_phi = x_165;
-  if (!(x_165)) {
-    let x_169 : f32 = pab;
-    let x_171 : f32 = pbc;
-    x_173 = ((x_169 >= 0.0) && (x_171 >= 0.0));
-    x_174_phi = x_173;
-  }
-  let x_174 : bool = x_174_phi;
-  if (!(x_174)) {
-    return 0;
-  }
-  let x_178 : f32 = *(x_124);
-  let x_179 : f32 = *(x_152);
-  let x_181 : f32 = *(x_129);
-  let x_182 : f32 = *(x_119);
-  let x_185 : f32 = *(x_126);
-  let x_186 : f32 = *(x_152);
-  let x_188 : f32 = *(x_131);
-  let x_189 : f32 = *(x_119);
-  param_4 = vec2<f32>((x_178 - x_179), (x_181 - x_182));
-  param_5 = vec2<f32>((x_185 - x_186), (x_188 - x_189));
-  let x_192 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_192;
-  let x_193 : f32 = pab;
-  let x_195 : f32 = pca;
-  let x_197 : bool = ((x_193 < 0.0) && (x_195 < 0.0));
-  x_206_phi = x_197;
-  if (!(x_197)) {
-    let x_201 : f32 = pab;
-    let x_203 : f32 = pca;
-    x_205 = ((x_201 >= 0.0) && (x_203 >= 0.0));
-    x_206_phi = x_205;
-  }
-  let x_206 : bool = x_206_phi;
-  if (!(x_206)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_72 : vec4<f32> = gl_FragCoord;
-  let x_75 : vec2<f32> = x_15.resolution;
-  pos = (vec2<f32>(x_72.x, x_72.y) / x_75);
-  let x_77 : vec2<f32> = pos;
-  param_6 = x_77;
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_78 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_78 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.hlsl
deleted file mode 100644
index bac141a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,130 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_24 : register(b0, space0) {
-  uint4 x_24[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
-  const float x_76 = a.x;
-  const float x_78 = b.y;
-  const float x_81 = b.x;
-  const float x_83 = a.y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
-  float pab = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float pbc = 0.0f;
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float pca = 0.0f;
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_145 = false;
-  bool x_185 = false;
-  bool x_146_phi = false;
-  bool x_186_phi = false;
-  const float x_88 = p.x;
-  const float x_90 = a_1.x;
-  const float x_93 = p.y;
-  const float x_95 = a_1.y;
-  const float x_99 = b_1.x;
-  const float x_101 = a_1.x;
-  const float x_104 = b_1.y;
-  const float x_106 = a_1.y;
-  param = float2((x_88 - x_90), (x_93 - x_95));
-  param_1 = float2((x_99 - x_101), (x_104 - x_106));
-  const float x_109 = cross2d_vf2_vf2_(param, param_1);
-  pab = x_109;
-  const float x_111 = p.x;
-  const float x_113 = b_1.x;
-  const float x_116 = p.y;
-  const float x_118 = b_1.y;
-  const float x_122 = c.x;
-  const float x_124 = b_1.x;
-  const float x_127 = c.y;
-  const float x_129 = b_1.y;
-  param_2 = float2((x_111 - x_113), (x_116 - x_118));
-  param_3 = float2((x_122 - x_124), (x_127 - x_129));
-  const float x_132 = cross2d_vf2_vf2_(param_2, param_3);
-  pbc = x_132;
-  const bool x_137 = ((pab < 0.0f) & (pbc < 0.0f));
-  x_146_phi = x_137;
-  if (!(x_137)) {
-    x_145 = ((pab >= 0.0f) & (pbc >= 0.0f));
-    x_146_phi = x_145;
-  }
-  if (!(x_146_phi)) {
-    return 0;
-  }
-  const float x_151 = p.x;
-  const float x_153 = c.x;
-  const float x_156 = p.y;
-  const float x_158 = c.y;
-  const float x_162 = a_1.x;
-  const float x_164 = c.x;
-  const float x_167 = a_1.y;
-  const float x_169 = c.y;
-  param_4 = float2((x_151 - x_153), (x_156 - x_158));
-  param_5 = float2((x_162 - x_164), (x_167 - x_169));
-  const float x_172 = cross2d_vf2_vf2_(param_4, param_5);
-  pca = x_172;
-  const bool x_177 = ((pab < 0.0f) & (pca < 0.0f));
-  x_186_phi = x_177;
-  if (!(x_177)) {
-    x_185 = ((pab >= 0.0f) & (pca >= 0.0f));
-    x_186_phi = x_185;
-  }
-  if (!(x_186_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_63 = gl_FragCoord;
-  const float2 x_66 = asfloat(x_24[0].xy);
-  pos = (float2(x_63.x, x_63.y) / x_66);
-  param_6 = pos;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_69 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.msl
deleted file mode 100644
index 4c0073c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.msl
+++ /dev/null
@@ -1,141 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
-  float const x_76 = (*(a)).x;
-  float const x_78 = (*(b)).y;
-  float const x_81 = (*(b)).x;
-  float const x_83 = (*(a)).y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(thread float2* const p, thread float2* const a_1, thread float2* const b_1, thread float2* const c) {
-  float pab = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float pbc = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float pca = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_145 = false;
-  bool x_185 = false;
-  bool x_146_phi = false;
-  bool x_186_phi = false;
-  float const x_88 = (*(p)).x;
-  float const x_90 = (*(a_1)).x;
-  float const x_93 = (*(p)).y;
-  float const x_95 = (*(a_1)).y;
-  float const x_99 = (*(b_1)).x;
-  float const x_101 = (*(a_1)).x;
-  float const x_104 = (*(b_1)).y;
-  float const x_106 = (*(a_1)).y;
-  param = float2((x_88 - x_90), (x_93 - x_95));
-  param_1 = float2((x_99 - x_101), (x_104 - x_106));
-  float const x_109 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_109;
-  float const x_111 = (*(p)).x;
-  float const x_113 = (*(b_1)).x;
-  float const x_116 = (*(p)).y;
-  float const x_118 = (*(b_1)).y;
-  float const x_122 = (*(c)).x;
-  float const x_124 = (*(b_1)).x;
-  float const x_127 = (*(c)).y;
-  float const x_129 = (*(b_1)).y;
-  param_2 = float2((x_111 - x_113), (x_116 - x_118));
-  param_3 = float2((x_122 - x_124), (x_127 - x_129));
-  float const x_132 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_132;
-  float const x_133 = pab;
-  float const x_135 = pbc;
-  bool const x_137 = ((x_133 < 0.0f) & (x_135 < 0.0f));
-  x_146_phi = x_137;
-  if (!(x_137)) {
-    float const x_141 = pab;
-    float const x_143 = pbc;
-    x_145 = ((x_141 >= 0.0f) & (x_143 >= 0.0f));
-    x_146_phi = x_145;
-  }
-  bool const x_146 = x_146_phi;
-  if (!(x_146)) {
-    return 0;
-  }
-  float const x_151 = (*(p)).x;
-  float const x_153 = (*(c)).x;
-  float const x_156 = (*(p)).y;
-  float const x_158 = (*(c)).y;
-  float const x_162 = (*(a_1)).x;
-  float const x_164 = (*(c)).x;
-  float const x_167 = (*(a_1)).y;
-  float const x_169 = (*(c)).y;
-  param_4 = float2((x_151 - x_153), (x_156 - x_158));
-  param_5 = float2((x_162 - x_164), (x_167 - x_169));
-  float const x_172 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_172;
-  float const x_173 = pab;
-  float const x_175 = pca;
-  bool const x_177 = ((x_173 < 0.0f) & (x_175 < 0.0f));
-  x_186_phi = x_177;
-  if (!(x_177)) {
-    float const x_181 = pab;
-    float const x_183 = pca;
-    x_185 = ((x_181 >= 0.0f) & (x_183 >= 0.0f));
-    x_186_phi = x_185;
-  }
-  bool const x_186 = x_186_phi;
-  if (!(x_186)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_24, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 pos = 0.0f;
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_63 = *(tint_symbol_3);
-  float2 const x_66 = x_24.resolution;
-  pos = (float2(x_63.x, x_63.y) / x_66);
-  float2 const x_68 = pos;
-  param_6 = x_68;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_69 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_24, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_24, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_24 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_24, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.spvasm
deleted file mode 100644
index 98d056f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,323 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 256
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_24 "x_24"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %cross2d_vf2_vf2_ "cross2d_vf2_vf2_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a_1 "a_1"
-               OpName %b_1 "b_1"
-               OpName %c "c"
-               OpName %pab "pab"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %pbc "pbc"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %pca "pca"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_145 "x_145"
-               OpName %x_185 "x_185"
-               OpName %x_146_phi "x_146_phi"
-               OpName %x_186_phi "x_186_phi"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_24 NonWritable
-               OpDecorate %x_24 DescriptorSet 0
-               OpDecorate %x_24 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_24 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %float %_ptr_Function_v2float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-         %40 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-         %49 = OpConstantNull %float
-         %51 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %62 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %204 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %224 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %227 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %230 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-    %float_1 = OpConstant %float 1
-        %241 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %242 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %243 = OpTypeFunction %main_out %v4float
-%cross2d_vf2_vf2_ = OpFunction %float None %15
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %25 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpLoad %float %25
-         %29 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFMul %float %26 %30
-         %38 = OpFMul %float %33 %36
-         %39 = OpFSub %float %37 %38
-               OpReturnValue %39
-               OpFunctionEnd
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %40
-          %p = OpFunctionParameter %_ptr_Function_v2float
-        %a_1 = OpFunctionParameter %_ptr_Function_v2float
-        %b_1 = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %47 = OpLabel
-        %pab = OpVariable %_ptr_Function_float Function %49
-      %param = OpVariable %_ptr_Function_v2float Function %51
-    %param_1 = OpVariable %_ptr_Function_v2float Function %51
-        %pbc = OpVariable %_ptr_Function_float Function %49
-    %param_2 = OpVariable %_ptr_Function_v2float Function %51
-    %param_3 = OpVariable %_ptr_Function_v2float Function %51
-        %pca = OpVariable %_ptr_Function_float Function %49
-    %param_4 = OpVariable %_ptr_Function_v2float Function %51
-    %param_5 = OpVariable %_ptr_Function_v2float Function %51
-      %x_145 = OpVariable %_ptr_Function_bool Function %62
-      %x_185 = OpVariable %_ptr_Function_bool Function %62
-  %x_146_phi = OpVariable %_ptr_Function_bool Function %62
-  %x_186_phi = OpVariable %_ptr_Function_bool Function %62
-         %67 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %68 = OpLoad %float %67
-         %70 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %74 = OpLoad %float %73
-         %76 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-         %80 = OpLoad %float %79
-         %82 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %83 = OpLoad %float %82
-         %85 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-         %86 = OpLoad %float %85
-         %88 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %89 = OpLoad %float %88
-         %90 = OpFSub %float %68 %71
-         %91 = OpFSub %float %74 %77
-         %92 = OpCompositeConstruct %v2float %90 %91
-               OpStore %param %92
-         %93 = OpFSub %float %80 %83
-         %94 = OpFSub %float %86 %89
-         %95 = OpCompositeConstruct %v2float %93 %94
-               OpStore %param_1 %95
-         %96 = OpFunctionCall %float %cross2d_vf2_vf2_ %param %param_1
-               OpStore %pab %96
-        %100 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %101 = OpLoad %float %100
-        %103 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %107 = OpLoad %float %106
-        %109 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %110 = OpLoad %float %109
-        %112 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %113 = OpLoad %float %112
-        %115 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %116 = OpLoad %float %115
-        %118 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %119 = OpLoad %float %118
-        %121 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %122 = OpLoad %float %121
-        %123 = OpFSub %float %101 %104
-        %124 = OpFSub %float %107 %110
-        %125 = OpCompositeConstruct %v2float %123 %124
-               OpStore %param_2 %125
-        %126 = OpFSub %float %113 %116
-        %127 = OpFSub %float %119 %122
-        %128 = OpCompositeConstruct %v2float %126 %127
-               OpStore %param_3 %128
-        %129 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_2 %param_3
-               OpStore %pbc %129
-        %132 = OpLoad %float %pab
-        %133 = OpLoad %float %pbc
-        %135 = OpFOrdLessThan %bool %132 %float_0
-        %136 = OpFOrdLessThan %bool %133 %float_0
-        %137 = OpLogicalAnd %bool %135 %136
-               OpStore %x_146_phi %137
-        %138 = OpLogicalNot %bool %137
-               OpSelectionMerge %139 None
-               OpBranchConditional %138 %140 %139
-        %140 = OpLabel
-        %141 = OpLoad %float %pab
-        %142 = OpLoad %float %pbc
-        %143 = OpFOrdGreaterThanEqual %bool %141 %float_0
-        %144 = OpFOrdGreaterThanEqual %bool %142 %float_0
-        %145 = OpLogicalAnd %bool %143 %144
-               OpStore %x_145 %145
-        %146 = OpLoad %bool %x_145
-               OpStore %x_146_phi %146
-               OpBranch %139
-        %139 = OpLabel
-        %147 = OpLoad %bool %x_146_phi
-        %148 = OpLogicalNot %bool %147
-               OpSelectionMerge %149 None
-               OpBranchConditional %148 %150 %149
-        %150 = OpLabel
-               OpReturnValue %int_0
-        %149 = OpLabel
-        %153 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %154 = OpLoad %float %153
-        %156 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %157 = OpLoad %float %156
-        %159 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %160 = OpLoad %float %159
-        %162 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %163 = OpLoad %float %162
-        %165 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %166 = OpLoad %float %165
-        %168 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %169 = OpLoad %float %168
-        %171 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %172 = OpLoad %float %171
-        %174 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %175 = OpLoad %float %174
-        %176 = OpFSub %float %154 %157
-        %177 = OpFSub %float %160 %163
-        %178 = OpCompositeConstruct %v2float %176 %177
-               OpStore %param_4 %178
-        %179 = OpFSub %float %166 %169
-        %180 = OpFSub %float %172 %175
-        %181 = OpCompositeConstruct %v2float %179 %180
-               OpStore %param_5 %181
-        %182 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_4 %param_5
-               OpStore %pca %182
-        %185 = OpLoad %float %pab
-        %186 = OpLoad %float %pca
-        %187 = OpFOrdLessThan %bool %185 %float_0
-        %188 = OpFOrdLessThan %bool %186 %float_0
-        %189 = OpLogicalAnd %bool %187 %188
-               OpStore %x_186_phi %189
-        %190 = OpLogicalNot %bool %189
-               OpSelectionMerge %191 None
-               OpBranchConditional %190 %192 %191
-        %192 = OpLabel
-        %193 = OpLoad %float %pab
-        %194 = OpLoad %float %pca
-        %195 = OpFOrdGreaterThanEqual %bool %193 %float_0
-        %196 = OpFOrdGreaterThanEqual %bool %194 %float_0
-        %197 = OpLogicalAnd %bool %195 %196
-               OpStore %x_185 %197
-        %198 = OpLoad %bool %x_185
-               OpStore %x_186_phi %198
-               OpBranch %191
-        %191 = OpLabel
-        %199 = OpLoad %bool %x_186_phi
-        %200 = OpLogicalNot %bool %199
-               OpSelectionMerge %201 None
-               OpBranchConditional %200 %202 %201
-        %202 = OpLabel
-               OpReturnValue %int_0
-        %201 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %204
-        %207 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %51
-    %param_6 = OpVariable %_ptr_Function_v2float Function %51
-    %param_7 = OpVariable %_ptr_Function_v2float Function %51
-    %param_8 = OpVariable %_ptr_Function_v2float Function %51
-    %param_9 = OpVariable %_ptr_Function_v2float Function %51
-        %213 = OpLoad %v4float %gl_FragCoord
-        %215 = OpAccessChain %_ptr_Uniform_v2float %x_24 %uint_0
-        %216 = OpLoad %v2float %215
-        %217 = OpCompositeExtract %float %213 0
-        %218 = OpCompositeExtract %float %213 1
-        %219 = OpCompositeConstruct %v2float %217 %218
-        %220 = OpFDiv %v2float %219 %216
-               OpStore %pos %220
-        %221 = OpLoad %v2float %pos
-               OpStore %param_6 %221
-               OpStore %param_7 %224
-               OpStore %param_8 %227
-               OpStore %param_9 %230
-        %231 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %236 = OpIEqual %bool %231 %int_1
-               OpSelectionMerge %237 None
-               OpBranchConditional %236 %238 %239
-        %238 = OpLabel
-               OpStore %x_GLF_color %241
-               OpBranch %237
-        %239 = OpLabel
-               OpStore %x_GLF_color %242
-               OpBranch %237
-        %237 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %243
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %247 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %248 = OpFunctionCall %void %main_1
-        %249 = OpLoad %v4float %x_GLF_color
-        %250 = OpCompositeConstruct %main_out %249
-               OpReturnValue %250
-               OpFunctionEnd
-       %main = OpFunction %void None %204
-        %252 = OpLabel
-        %254 = OpLoad %v4float %gl_FragCoord_param_1
-        %253 = OpFunctionCall %main_out %main_inner %254
-        %255 = OpCompositeExtract %v4float %253 0
-               OpStore %x_GLF_color_1_1 %255
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.wgsl
deleted file mode 100644
index 535c1de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,134 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
-  let x_76 : f32 = (*(a)).x;
-  let x_78 : f32 = (*(b)).y;
-  let x_81 : f32 = (*(b)).x;
-  let x_83 : f32 = (*(a)).y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var pab : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var pbc : f32;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var pca : f32;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_145 : bool;
-  var x_185 : bool;
-  var x_146_phi : bool;
-  var x_186_phi : bool;
-  let x_88 : f32 = (*(p)).x;
-  let x_90 : f32 = (*(a_1)).x;
-  let x_93 : f32 = (*(p)).y;
-  let x_95 : f32 = (*(a_1)).y;
-  let x_99 : f32 = (*(b_1)).x;
-  let x_101 : f32 = (*(a_1)).x;
-  let x_104 : f32 = (*(b_1)).y;
-  let x_106 : f32 = (*(a_1)).y;
-  param = vec2<f32>((x_88 - x_90), (x_93 - x_95));
-  param_1 = vec2<f32>((x_99 - x_101), (x_104 - x_106));
-  let x_109 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_109;
-  let x_111 : f32 = (*(p)).x;
-  let x_113 : f32 = (*(b_1)).x;
-  let x_116 : f32 = (*(p)).y;
-  let x_118 : f32 = (*(b_1)).y;
-  let x_122 : f32 = (*(c)).x;
-  let x_124 : f32 = (*(b_1)).x;
-  let x_127 : f32 = (*(c)).y;
-  let x_129 : f32 = (*(b_1)).y;
-  param_2 = vec2<f32>((x_111 - x_113), (x_116 - x_118));
-  param_3 = vec2<f32>((x_122 - x_124), (x_127 - x_129));
-  let x_132 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_132;
-  let x_133 : f32 = pab;
-  let x_135 : f32 = pbc;
-  let x_137 : bool = ((x_133 < 0.0) & (x_135 < 0.0));
-  x_146_phi = x_137;
-  if (!(x_137)) {
-    let x_141 : f32 = pab;
-    let x_143 : f32 = pbc;
-    x_145 = ((x_141 >= 0.0) & (x_143 >= 0.0));
-    x_146_phi = x_145;
-  }
-  let x_146 : bool = x_146_phi;
-  if (!(x_146)) {
-    return 0;
-  }
-  let x_151 : f32 = (*(p)).x;
-  let x_153 : f32 = (*(c)).x;
-  let x_156 : f32 = (*(p)).y;
-  let x_158 : f32 = (*(c)).y;
-  let x_162 : f32 = (*(a_1)).x;
-  let x_164 : f32 = (*(c)).x;
-  let x_167 : f32 = (*(a_1)).y;
-  let x_169 : f32 = (*(c)).y;
-  param_4 = vec2<f32>((x_151 - x_153), (x_156 - x_158));
-  param_5 = vec2<f32>((x_162 - x_164), (x_167 - x_169));
-  let x_172 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_172;
-  let x_173 : f32 = pab;
-  let x_175 : f32 = pca;
-  let x_177 : bool = ((x_173 < 0.0) & (x_175 < 0.0));
-  x_186_phi = x_177;
-  if (!(x_177)) {
-    let x_181 : f32 = pab;
-    let x_183 : f32 = pca;
-    x_185 = ((x_181 >= 0.0) & (x_183 >= 0.0));
-    x_186_phi = x_185;
-  }
-  let x_186 : bool = x_186_phi;
-  if (!(x_186)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_63 : vec4<f32> = gl_FragCoord;
-  let x_66 : vec2<f32> = x_24.resolution;
-  pos = (vec2<f32>(x_63.x, x_63.y) / x_66);
-  let x_68 : vec2<f32> = pos;
-  param_6 = x_68;
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_69 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_69 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.hlsl
deleted file mode 100644
index 62ce0ec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,146 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_24 : register(b0, space0) {
-  uint4 x_24[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float cross2d_vf2_vf2_(inout float2 a, inout float2 b) {
-  const float x_76 = a.x;
-  const float x_78 = b.y;
-  const float x_81 = b.x;
-  const float x_83 = a.y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a_1, inout float2 b_1, inout float2 c) {
-  float pab = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float pbc = 0.0f;
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float pca = 0.0f;
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_145 = false;
-  bool x_185 = false;
-  bool x_146_phi = false;
-  bool x_186_phi = false;
-  const float x_88 = p.x;
-  const float x_90 = a_1.x;
-  const float x_93 = p.y;
-  const float x_95 = a_1.y;
-  const float x_99 = b_1.x;
-  const float x_101 = a_1.x;
-  const float x_104 = b_1.y;
-  const float x_106 = a_1.y;
-  param = float2((x_88 - x_90), (x_93 - x_95));
-  param_1 = float2((x_99 - x_101), (x_104 - x_106));
-  const float x_109 = cross2d_vf2_vf2_(param, param_1);
-  pab = x_109;
-  const float x_111 = p.x;
-  const float x_113 = b_1.x;
-  const float x_116 = p.y;
-  const float x_118 = b_1.y;
-  const float x_122 = c.x;
-  const float x_124 = b_1.x;
-  const float x_127 = c.y;
-  const float x_129 = b_1.y;
-  param_2 = float2((x_111 - x_113), (x_116 - x_118));
-  param_3 = float2((x_122 - x_124), (x_127 - x_129));
-  const float x_132 = cross2d_vf2_vf2_(param_2, param_3);
-  pbc = x_132;
-  bool tint_tmp = (pab < 0.0f);
-  if (tint_tmp) {
-    tint_tmp = (pbc < 0.0f);
-  }
-  const bool x_137 = (tint_tmp);
-  x_146_phi = x_137;
-  if (!(x_137)) {
-    bool tint_tmp_1 = (pab >= 0.0f);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (pbc >= 0.0f);
-    }
-    x_145 = (tint_tmp_1);
-    x_146_phi = x_145;
-  }
-  if (!(x_146_phi)) {
-    return 0;
-  }
-  const float x_151 = p.x;
-  const float x_153 = c.x;
-  const float x_156 = p.y;
-  const float x_158 = c.y;
-  const float x_162 = a_1.x;
-  const float x_164 = c.x;
-  const float x_167 = a_1.y;
-  const float x_169 = c.y;
-  param_4 = float2((x_151 - x_153), (x_156 - x_158));
-  param_5 = float2((x_162 - x_164), (x_167 - x_169));
-  const float x_172 = cross2d_vf2_vf2_(param_4, param_5);
-  pca = x_172;
-  bool tint_tmp_2 = (pab < 0.0f);
-  if (tint_tmp_2) {
-    tint_tmp_2 = (pca < 0.0f);
-  }
-  const bool x_177 = (tint_tmp_2);
-  x_186_phi = x_177;
-  if (!(x_177)) {
-    bool tint_tmp_3 = (pab >= 0.0f);
-    if (tint_tmp_3) {
-      tint_tmp_3 = (pca >= 0.0f);
-    }
-    x_185 = (tint_tmp_3);
-    x_186_phi = x_185;
-  }
-  if (!(x_186_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 pos = float2(0.0f, 0.0f);
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_63 = gl_FragCoord;
-  const float2 x_66 = asfloat(x_24[0].xy);
-  pos = (float2(x_63.x, x_63.y) / x_66);
-  param_6 = pos;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_69 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.msl
deleted file mode 100644
index 78630b3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.msl
+++ /dev/null
@@ -1,141 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
-  float const x_76 = (*(a)).x;
-  float const x_78 = (*(b)).y;
-  float const x_81 = (*(b)).x;
-  float const x_83 = (*(a)).y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(thread float2* const p, thread float2* const a_1, thread float2* const b_1, thread float2* const c) {
-  float pab = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float pbc = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float pca = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_145 = false;
-  bool x_185 = false;
-  bool x_146_phi = false;
-  bool x_186_phi = false;
-  float const x_88 = (*(p)).x;
-  float const x_90 = (*(a_1)).x;
-  float const x_93 = (*(p)).y;
-  float const x_95 = (*(a_1)).y;
-  float const x_99 = (*(b_1)).x;
-  float const x_101 = (*(a_1)).x;
-  float const x_104 = (*(b_1)).y;
-  float const x_106 = (*(a_1)).y;
-  param = float2((x_88 - x_90), (x_93 - x_95));
-  param_1 = float2((x_99 - x_101), (x_104 - x_106));
-  float const x_109 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_109;
-  float const x_111 = (*(p)).x;
-  float const x_113 = (*(b_1)).x;
-  float const x_116 = (*(p)).y;
-  float const x_118 = (*(b_1)).y;
-  float const x_122 = (*(c)).x;
-  float const x_124 = (*(b_1)).x;
-  float const x_127 = (*(c)).y;
-  float const x_129 = (*(b_1)).y;
-  param_2 = float2((x_111 - x_113), (x_116 - x_118));
-  param_3 = float2((x_122 - x_124), (x_127 - x_129));
-  float const x_132 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_132;
-  float const x_133 = pab;
-  float const x_135 = pbc;
-  bool const x_137 = ((x_133 < 0.0f) && (x_135 < 0.0f));
-  x_146_phi = x_137;
-  if (!(x_137)) {
-    float const x_141 = pab;
-    float const x_143 = pbc;
-    x_145 = ((x_141 >= 0.0f) && (x_143 >= 0.0f));
-    x_146_phi = x_145;
-  }
-  bool const x_146 = x_146_phi;
-  if (!(x_146)) {
-    return 0;
-  }
-  float const x_151 = (*(p)).x;
-  float const x_153 = (*(c)).x;
-  float const x_156 = (*(p)).y;
-  float const x_158 = (*(c)).y;
-  float const x_162 = (*(a_1)).x;
-  float const x_164 = (*(c)).x;
-  float const x_167 = (*(a_1)).y;
-  float const x_169 = (*(c)).y;
-  param_4 = float2((x_151 - x_153), (x_156 - x_158));
-  param_5 = float2((x_162 - x_164), (x_167 - x_169));
-  float const x_172 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_172;
-  float const x_173 = pab;
-  float const x_175 = pca;
-  bool const x_177 = ((x_173 < 0.0f) && (x_175 < 0.0f));
-  x_186_phi = x_177;
-  if (!(x_177)) {
-    float const x_181 = pab;
-    float const x_183 = pca;
-    x_185 = ((x_181 >= 0.0f) && (x_183 >= 0.0f));
-    x_186_phi = x_185;
-  }
-  bool const x_186 = x_186_phi;
-  if (!(x_186)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_24, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 pos = 0.0f;
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_63 = *(tint_symbol_3);
-  float2 const x_66 = x_24.resolution;
-  pos = (float2(x_63.x, x_63.y) / x_66);
-  float2 const x_68 = pos;
-  param_6 = x_68;
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_69 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_24, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_24, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_24 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_24, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.spvasm
deleted file mode 100644
index db14570..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,343 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 264
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_24 "x_24"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %cross2d_vf2_vf2_ "cross2d_vf2_vf2_"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a_1 "a_1"
-               OpName %b_1 "b_1"
-               OpName %c "c"
-               OpName %pab "pab"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %pbc "pbc"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %pca "pca"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_145 "x_145"
-               OpName %x_185 "x_185"
-               OpName %x_146_phi "x_146_phi"
-               OpName %x_186_phi "x_186_phi"
-               OpName %main_1 "main_1"
-               OpName %pos "pos"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_24 NonWritable
-               OpDecorate %x_24 DescriptorSet 0
-               OpDecorate %x_24 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_24 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %float %_ptr_Function_v2float %_ptr_Function_v2float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Function_float = OpTypePointer Function %float
-     %uint_1 = OpConstant %uint 1
-        %int = OpTypeInt 32 1
-         %40 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-         %49 = OpConstantNull %float
-         %51 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %62 = OpConstantNull %bool
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %212 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %232 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %235 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %238 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-    %float_1 = OpConstant %float 1
-        %249 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %250 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %251 = OpTypeFunction %main_out %v4float
-%cross2d_vf2_vf2_ = OpFunction %float None %15
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-         %20 = OpLabel
-         %25 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %26 = OpLoad %float %25
-         %29 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %33 = OpLoad %float %32
-         %35 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFMul %float %26 %30
-         %38 = OpFMul %float %33 %36
-         %39 = OpFSub %float %37 %38
-               OpReturnValue %39
-               OpFunctionEnd
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %40
-          %p = OpFunctionParameter %_ptr_Function_v2float
-        %a_1 = OpFunctionParameter %_ptr_Function_v2float
-        %b_1 = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %47 = OpLabel
-        %pab = OpVariable %_ptr_Function_float Function %49
-      %param = OpVariable %_ptr_Function_v2float Function %51
-    %param_1 = OpVariable %_ptr_Function_v2float Function %51
-        %pbc = OpVariable %_ptr_Function_float Function %49
-    %param_2 = OpVariable %_ptr_Function_v2float Function %51
-    %param_3 = OpVariable %_ptr_Function_v2float Function %51
-        %pca = OpVariable %_ptr_Function_float Function %49
-    %param_4 = OpVariable %_ptr_Function_v2float Function %51
-    %param_5 = OpVariable %_ptr_Function_v2float Function %51
-      %x_145 = OpVariable %_ptr_Function_bool Function %62
-      %x_185 = OpVariable %_ptr_Function_bool Function %62
-  %x_146_phi = OpVariable %_ptr_Function_bool Function %62
-  %x_186_phi = OpVariable %_ptr_Function_bool Function %62
-         %67 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %68 = OpLoad %float %67
-         %70 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %71 = OpLoad %float %70
-         %73 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %74 = OpLoad %float %73
-         %76 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %77 = OpLoad %float %76
-         %79 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-         %80 = OpLoad %float %79
-         %82 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-         %83 = OpLoad %float %82
-         %85 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-         %86 = OpLoad %float %85
-         %88 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-         %89 = OpLoad %float %88
-         %90 = OpFSub %float %68 %71
-         %91 = OpFSub %float %74 %77
-         %92 = OpCompositeConstruct %v2float %90 %91
-               OpStore %param %92
-         %93 = OpFSub %float %80 %83
-         %94 = OpFSub %float %86 %89
-         %95 = OpCompositeConstruct %v2float %93 %94
-               OpStore %param_1 %95
-         %96 = OpFunctionCall %float %cross2d_vf2_vf2_ %param %param_1
-               OpStore %pab %96
-        %100 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %101 = OpLoad %float %100
-        %103 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %107 = OpLoad %float %106
-        %109 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %110 = OpLoad %float %109
-        %112 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %113 = OpLoad %float %112
-        %115 = OpAccessChain %_ptr_Function_float %b_1 %uint_0
-        %116 = OpLoad %float %115
-        %118 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %119 = OpLoad %float %118
-        %121 = OpAccessChain %_ptr_Function_float %b_1 %uint_1
-        %122 = OpLoad %float %121
-        %123 = OpFSub %float %101 %104
-        %124 = OpFSub %float %107 %110
-        %125 = OpCompositeConstruct %v2float %123 %124
-               OpStore %param_2 %125
-        %126 = OpFSub %float %113 %116
-        %127 = OpFSub %float %119 %122
-        %128 = OpCompositeConstruct %v2float %126 %127
-               OpStore %param_3 %128
-        %129 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_2 %param_3
-               OpStore %pbc %129
-        %132 = OpLoad %float %pab
-        %133 = OpLoad %float %pbc
-        %135 = OpFOrdLessThan %bool %132 %float_0
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %136
-        %137 = OpLabel
-        %138 = OpFOrdLessThan %bool %133 %float_0
-               OpBranch %136
-        %136 = OpLabel
-        %139 = OpPhi %bool %135 %47 %138 %137
-               OpStore %x_146_phi %139
-        %140 = OpLogicalNot %bool %139
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %141
-        %142 = OpLabel
-        %143 = OpLoad %float %pab
-        %144 = OpLoad %float %pbc
-        %145 = OpFOrdGreaterThanEqual %bool %143 %float_0
-               OpSelectionMerge %146 None
-               OpBranchConditional %145 %147 %146
-        %147 = OpLabel
-        %148 = OpFOrdGreaterThanEqual %bool %144 %float_0
-               OpBranch %146
-        %146 = OpLabel
-        %149 = OpPhi %bool %145 %142 %148 %147
-               OpStore %x_145 %149
-        %150 = OpLoad %bool %x_145
-               OpStore %x_146_phi %150
-               OpBranch %141
-        %141 = OpLabel
-        %151 = OpLoad %bool %x_146_phi
-        %152 = OpLogicalNot %bool %151
-               OpSelectionMerge %153 None
-               OpBranchConditional %152 %154 %153
-        %154 = OpLabel
-               OpReturnValue %int_0
-        %153 = OpLabel
-        %157 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %158 = OpLoad %float %157
-        %160 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %161 = OpLoad %float %160
-        %163 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %164 = OpLoad %float %163
-        %166 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %167 = OpLoad %float %166
-        %169 = OpAccessChain %_ptr_Function_float %a_1 %uint_0
-        %170 = OpLoad %float %169
-        %172 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %173 = OpLoad %float %172
-        %175 = OpAccessChain %_ptr_Function_float %a_1 %uint_1
-        %176 = OpLoad %float %175
-        %178 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %179 = OpLoad %float %178
-        %180 = OpFSub %float %158 %161
-        %181 = OpFSub %float %164 %167
-        %182 = OpCompositeConstruct %v2float %180 %181
-               OpStore %param_4 %182
-        %183 = OpFSub %float %170 %173
-        %184 = OpFSub %float %176 %179
-        %185 = OpCompositeConstruct %v2float %183 %184
-               OpStore %param_5 %185
-        %186 = OpFunctionCall %float %cross2d_vf2_vf2_ %param_4 %param_5
-               OpStore %pca %186
-        %189 = OpLoad %float %pab
-        %190 = OpLoad %float %pca
-        %191 = OpFOrdLessThan %bool %189 %float_0
-               OpSelectionMerge %192 None
-               OpBranchConditional %191 %193 %192
-        %193 = OpLabel
-        %194 = OpFOrdLessThan %bool %190 %float_0
-               OpBranch %192
-        %192 = OpLabel
-        %195 = OpPhi %bool %191 %153 %194 %193
-               OpStore %x_186_phi %195
-        %196 = OpLogicalNot %bool %195
-               OpSelectionMerge %197 None
-               OpBranchConditional %196 %198 %197
-        %198 = OpLabel
-        %199 = OpLoad %float %pab
-        %200 = OpLoad %float %pca
-        %201 = OpFOrdGreaterThanEqual %bool %199 %float_0
-               OpSelectionMerge %202 None
-               OpBranchConditional %201 %203 %202
-        %203 = OpLabel
-        %204 = OpFOrdGreaterThanEqual %bool %200 %float_0
-               OpBranch %202
-        %202 = OpLabel
-        %205 = OpPhi %bool %201 %198 %204 %203
-               OpStore %x_185 %205
-        %206 = OpLoad %bool %x_185
-               OpStore %x_186_phi %206
-               OpBranch %197
-        %197 = OpLabel
-        %207 = OpLoad %bool %x_186_phi
-        %208 = OpLogicalNot %bool %207
-               OpSelectionMerge %209 None
-               OpBranchConditional %208 %210 %209
-        %210 = OpLabel
-               OpReturnValue %int_0
-        %209 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %212
-        %215 = OpLabel
-        %pos = OpVariable %_ptr_Function_v2float Function %51
-    %param_6 = OpVariable %_ptr_Function_v2float Function %51
-    %param_7 = OpVariable %_ptr_Function_v2float Function %51
-    %param_8 = OpVariable %_ptr_Function_v2float Function %51
-    %param_9 = OpVariable %_ptr_Function_v2float Function %51
-        %221 = OpLoad %v4float %gl_FragCoord
-        %223 = OpAccessChain %_ptr_Uniform_v2float %x_24 %uint_0
-        %224 = OpLoad %v2float %223
-        %225 = OpCompositeExtract %float %221 0
-        %226 = OpCompositeExtract %float %221 1
-        %227 = OpCompositeConstruct %v2float %225 %226
-        %228 = OpFDiv %v2float %227 %224
-               OpStore %pos %228
-        %229 = OpLoad %v2float %pos
-               OpStore %param_6 %229
-               OpStore %param_7 %232
-               OpStore %param_8 %235
-               OpStore %param_9 %238
-        %239 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %244 = OpIEqual %bool %239 %int_1
-               OpSelectionMerge %245 None
-               OpBranchConditional %244 %246 %247
-        %246 = OpLabel
-               OpStore %x_GLF_color %249
-               OpBranch %245
-        %247 = OpLabel
-               OpStore %x_GLF_color %250
-               OpBranch %245
-        %245 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %251
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %255 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %256 = OpFunctionCall %void %main_1
-        %257 = OpLoad %v4float %x_GLF_color
-        %258 = OpCompositeConstruct %main_out %257
-               OpReturnValue %258
-               OpFunctionEnd
-       %main = OpFunction %void None %212
-        %260 = OpLabel
-        %262 = OpLoad %v4float %gl_FragCoord_param_1
-        %261 = OpFunctionCall %main_out %main_inner %262
-        %263 = OpCompositeExtract %v4float %261 0
-               OpStore %x_GLF_color_1_1 %263
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.wgsl
deleted file mode 100644
index 33d8a7d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-conditional-clamped-float/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,134 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_24 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
-  let x_76 : f32 = (*(a)).x;
-  let x_78 : f32 = (*(b)).y;
-  let x_81 : f32 = (*(b)).x;
-  let x_83 : f32 = (*(a)).y;
-  return ((x_76 * x_78) - (x_81 * x_83));
-}
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var pab : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var pbc : f32;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var pca : f32;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_145 : bool;
-  var x_185 : bool;
-  var x_146_phi : bool;
-  var x_186_phi : bool;
-  let x_88 : f32 = (*(p)).x;
-  let x_90 : f32 = (*(a_1)).x;
-  let x_93 : f32 = (*(p)).y;
-  let x_95 : f32 = (*(a_1)).y;
-  let x_99 : f32 = (*(b_1)).x;
-  let x_101 : f32 = (*(a_1)).x;
-  let x_104 : f32 = (*(b_1)).y;
-  let x_106 : f32 = (*(a_1)).y;
-  param = vec2<f32>((x_88 - x_90), (x_93 - x_95));
-  param_1 = vec2<f32>((x_99 - x_101), (x_104 - x_106));
-  let x_109 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
-  pab = x_109;
-  let x_111 : f32 = (*(p)).x;
-  let x_113 : f32 = (*(b_1)).x;
-  let x_116 : f32 = (*(p)).y;
-  let x_118 : f32 = (*(b_1)).y;
-  let x_122 : f32 = (*(c)).x;
-  let x_124 : f32 = (*(b_1)).x;
-  let x_127 : f32 = (*(c)).y;
-  let x_129 : f32 = (*(b_1)).y;
-  param_2 = vec2<f32>((x_111 - x_113), (x_116 - x_118));
-  param_3 = vec2<f32>((x_122 - x_124), (x_127 - x_129));
-  let x_132 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
-  pbc = x_132;
-  let x_133 : f32 = pab;
-  let x_135 : f32 = pbc;
-  let x_137 : bool = ((x_133 < 0.0) && (x_135 < 0.0));
-  x_146_phi = x_137;
-  if (!(x_137)) {
-    let x_141 : f32 = pab;
-    let x_143 : f32 = pbc;
-    x_145 = ((x_141 >= 0.0) && (x_143 >= 0.0));
-    x_146_phi = x_145;
-  }
-  let x_146 : bool = x_146_phi;
-  if (!(x_146)) {
-    return 0;
-  }
-  let x_151 : f32 = (*(p)).x;
-  let x_153 : f32 = (*(c)).x;
-  let x_156 : f32 = (*(p)).y;
-  let x_158 : f32 = (*(c)).y;
-  let x_162 : f32 = (*(a_1)).x;
-  let x_164 : f32 = (*(c)).x;
-  let x_167 : f32 = (*(a_1)).y;
-  let x_169 : f32 = (*(c)).y;
-  param_4 = vec2<f32>((x_151 - x_153), (x_156 - x_158));
-  param_5 = vec2<f32>((x_162 - x_164), (x_167 - x_169));
-  let x_172 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
-  pca = x_172;
-  let x_173 : f32 = pab;
-  let x_175 : f32 = pca;
-  let x_177 : bool = ((x_173 < 0.0) && (x_175 < 0.0));
-  x_186_phi = x_177;
-  if (!(x_177)) {
-    let x_181 : f32 = pab;
-    let x_183 : f32 = pca;
-    x_185 = ((x_181 >= 0.0) && (x_183 >= 0.0));
-    x_186_phi = x_185;
-  }
-  let x_186 : bool = x_186_phi;
-  if (!(x_186)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var pos : vec2<f32>;
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_63 : vec4<f32> = gl_FragCoord;
-  let x_66 : vec2<f32> = x_24.resolution;
-  pos = (vec2<f32>(x_63.x, x_63.y) / x_66);
-  let x_68 : vec2<f32> = pos;
-  param_6 = x_68;
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_69 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_69 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.hlsl
deleted file mode 100644
index 22b028b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,133 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_17 : register(b0, space0) {
-  uint4 x_17[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a, inout float2 b, inout float2 c) {
-  float x_66 = 0.0f;
-  float x_67 = 0.0f;
-  float x_68 = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_135 = false;
-  bool x_172 = false;
-  bool x_136_phi = false;
-  bool x_173_phi = false;
-  const float x_70 = p.x;
-  const float x_72 = a.x;
-  const float x_75 = p.y;
-  const float x_77 = a.y;
-  const float x_81 = b.x;
-  const float x_82 = a.x;
-  const float x_85 = b.y;
-  const float x_86 = a.y;
-  param = float2((x_70 - x_72), (x_75 - x_77));
-  param_1 = float2((x_81 - x_82), (x_85 - x_86));
-  const float x_90 = param.x;
-  const float x_92 = param_1.y;
-  const float x_95 = param_1.x;
-  const float x_97 = param.y;
-  const float x_99 = ((x_90 * x_92) - (x_95 * x_97));
-  x_68 = x_99;
-  const float x_100 = p.x;
-  const float x_101 = b.x;
-  const float x_103 = p.y;
-  const float x_104 = b.y;
-  const float x_108 = c.x;
-  const float x_109 = b.x;
-  const float x_112 = c.y;
-  const float x_113 = b.y;
-  param_2 = float2((x_100 - x_101), (x_103 - x_104));
-  param_3 = float2((x_108 - x_109), (x_112 - x_113));
-  const float x_117 = param_2.x;
-  const float x_119 = param_3.y;
-  const float x_122 = param_3.x;
-  const float x_124 = param_2.y;
-  const float x_126 = ((x_117 * x_119) - (x_122 * x_124));
-  x_67 = x_126;
-  const bool x_127 = (x_99 < 0.0f);
-  const bool x_129 = (x_127 & (x_126 < 0.0f));
-  x_136_phi = x_129;
-  if (!(x_129)) {
-    x_135 = ((x_99 >= 0.0f) & (x_126 >= 0.0f));
-    x_136_phi = x_135;
-  }
-  if (!(x_136_phi)) {
-    return 0;
-  }
-  const float x_140 = p.x;
-  const float x_141 = c.x;
-  const float x_143 = p.y;
-  const float x_144 = c.y;
-  const float x_147 = a.x;
-  const float x_148 = c.x;
-  const float x_150 = a.y;
-  const float x_151 = c.y;
-  param_4 = float2((x_140 - x_141), (x_143 - x_144));
-  param_5 = float2((x_147 - x_148), (x_150 - x_151));
-  const float x_155 = param_4.x;
-  const float x_157 = param_5.y;
-  const float x_160 = param_5.x;
-  const float x_162 = param_4.y;
-  const float x_164 = ((x_155 * x_157) - (x_160 * x_162));
-  x_66 = x_164;
-  const bool x_166 = (x_127 & (x_164 < 0.0f));
-  x_173_phi = x_166;
-  if (!(x_166)) {
-    x_172 = ((x_99 >= 0.0f) & (x_164 >= 0.0f));
-    x_173_phi = x_172;
-  }
-  if (!(x_173_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_55 = gl_FragCoord;
-  const float2 x_58 = asfloat(x_17[0].xy);
-  param_6 = (float2(x_55.x, x_55.y) / x_58);
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_60 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_60 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.msl
deleted file mode 100644
index 182686b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.msl
+++ /dev/null
@@ -1,135 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(thread float2* const p, thread float2* const a, thread float2* const b, thread float2* const c) {
-  float x_66 = 0.0f;
-  float x_67 = 0.0f;
-  float x_68 = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_135 = false;
-  bool x_172 = false;
-  bool x_136_phi = false;
-  bool x_173_phi = false;
-  float const x_70 = (*(p)).x;
-  float const x_72 = (*(a)).x;
-  float const x_75 = (*(p)).y;
-  float const x_77 = (*(a)).y;
-  float const x_81 = (*(b)).x;
-  float const x_82 = (*(a)).x;
-  float const x_85 = (*(b)).y;
-  float const x_86 = (*(a)).y;
-  param = float2((x_70 - x_72), (x_75 - x_77));
-  param_1 = float2((x_81 - x_82), (x_85 - x_86));
-  float const x_90 = param.x;
-  float const x_92 = param_1.y;
-  float const x_95 = param_1.x;
-  float const x_97 = param.y;
-  float const x_99 = ((x_90 * x_92) - (x_95 * x_97));
-  x_68 = x_99;
-  float const x_100 = (*(p)).x;
-  float const x_101 = (*(b)).x;
-  float const x_103 = (*(p)).y;
-  float const x_104 = (*(b)).y;
-  float const x_108 = (*(c)).x;
-  float const x_109 = (*(b)).x;
-  float const x_112 = (*(c)).y;
-  float const x_113 = (*(b)).y;
-  param_2 = float2((x_100 - x_101), (x_103 - x_104));
-  param_3 = float2((x_108 - x_109), (x_112 - x_113));
-  float const x_117 = param_2.x;
-  float const x_119 = param_3.y;
-  float const x_122 = param_3.x;
-  float const x_124 = param_2.y;
-  float const x_126 = ((x_117 * x_119) - (x_122 * x_124));
-  x_67 = x_126;
-  bool const x_127 = (x_99 < 0.0f);
-  bool const x_129 = (x_127 & (x_126 < 0.0f));
-  x_136_phi = x_129;
-  if (!(x_129)) {
-    x_135 = ((x_99 >= 0.0f) & (x_126 >= 0.0f));
-    x_136_phi = x_135;
-  }
-  bool const x_136 = x_136_phi;
-  if (!(x_136)) {
-    return 0;
-  }
-  float const x_140 = (*(p)).x;
-  float const x_141 = (*(c)).x;
-  float const x_143 = (*(p)).y;
-  float const x_144 = (*(c)).y;
-  float const x_147 = (*(a)).x;
-  float const x_148 = (*(c)).x;
-  float const x_150 = (*(a)).y;
-  float const x_151 = (*(c)).y;
-  param_4 = float2((x_140 - x_141), (x_143 - x_144));
-  param_5 = float2((x_147 - x_148), (x_150 - x_151));
-  float const x_155 = param_4.x;
-  float const x_157 = param_5.y;
-  float const x_160 = param_5.x;
-  float const x_162 = param_4.y;
-  float const x_164 = ((x_155 * x_157) - (x_160 * x_162));
-  x_66 = x_164;
-  bool const x_166 = (x_127 & (x_164 < 0.0f));
-  x_173_phi = x_166;
-  if (!(x_166)) {
-    x_172 = ((x_99 >= 0.0f) & (x_164 >= 0.0f));
-    x_173_phi = x_172;
-  }
-  bool const x_173 = x_173_phi;
-  if (!(x_173)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_17, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_55 = *(tint_symbol_3);
-  float2 const x_58 = x_17.resolution;
-  param_6 = (float2(x_55.x, x_55.y) / x_58);
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_60 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_60 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_17, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_17, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_17 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_17, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.spvasm
deleted file mode 100644
index b843fea..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,319 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 249
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_17 "x_17"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_66 "x_66"
-               OpName %x_67 "x_67"
-               OpName %x_68 "x_68"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_135 "x_135"
-               OpName %x_172 "x_172"
-               OpName %x_136_phi "x_136_phi"
-               OpName %x_173_phi "x_173_phi"
-               OpName %main_1 "main_1"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_17 NonWritable
-               OpDecorate %x_17 DescriptorSet 0
-               OpDecorate %x_17 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_17 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-         %30 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %39 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %199 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %217 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %220 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %223 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-    %float_1 = OpConstant %float 1
-        %234 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %235 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %236 = OpTypeFunction %main_out %v4float
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %15
-          %p = OpFunctionParameter %_ptr_Function_v2float
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %23 = OpLabel
-       %x_66 = OpVariable %_ptr_Function_float Function %26
-       %x_67 = OpVariable %_ptr_Function_float Function %26
-       %x_68 = OpVariable %_ptr_Function_float Function %26
-      %param = OpVariable %_ptr_Function_v2float Function %30
-    %param_1 = OpVariable %_ptr_Function_v2float Function %30
-    %param_2 = OpVariable %_ptr_Function_v2float Function %30
-    %param_3 = OpVariable %_ptr_Function_v2float Function %30
-    %param_4 = OpVariable %_ptr_Function_v2float Function %30
-    %param_5 = OpVariable %_ptr_Function_v2float Function %30
-      %x_135 = OpVariable %_ptr_Function_bool Function %39
-      %x_172 = OpVariable %_ptr_Function_bool Function %39
-  %x_136_phi = OpVariable %_ptr_Function_bool Function %39
-  %x_173_phi = OpVariable %_ptr_Function_bool Function %39
-         %46 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %47 = OpLoad %float %46
-         %49 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %50 = OpLoad %float %49
-         %53 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %54 = OpLoad %float %53
-         %56 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %60 = OpLoad %float %59
-         %62 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %66 = OpLoad %float %65
-         %68 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %69 = OpLoad %float %68
-         %70 = OpFSub %float %47 %50
-         %71 = OpFSub %float %54 %57
-         %72 = OpCompositeConstruct %v2float %70 %71
-               OpStore %param %72
-         %73 = OpFSub %float %60 %63
-         %74 = OpFSub %float %66 %69
-         %75 = OpCompositeConstruct %v2float %73 %74
-               OpStore %param_1 %75
-         %76 = OpAccessChain %_ptr_Function_float %param %uint_0
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Function_float %param_1 %uint_1
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Function_float %param_1 %uint_0
-         %81 = OpLoad %float %80
-         %82 = OpAccessChain %_ptr_Function_float %param %uint_1
-         %83 = OpLoad %float %82
-         %84 = OpFMul %float %77 %79
-         %85 = OpFMul %float %81 %83
-         %86 = OpFSub %float %84 %85
-               OpStore %x_68 %86
-         %88 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %89 = OpLoad %float %88
-         %91 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %92 = OpLoad %float %91
-         %94 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %95 = OpLoad %float %94
-         %97 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %101 = OpLoad %float %100
-        %103 = OpAccessChain %_ptr_Function_float %b %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %107 = OpLoad %float %106
-        %109 = OpAccessChain %_ptr_Function_float %b %uint_1
-        %110 = OpLoad %float %109
-        %111 = OpFSub %float %89 %92
-        %112 = OpFSub %float %95 %98
-        %113 = OpCompositeConstruct %v2float %111 %112
-               OpStore %param_2 %113
-        %114 = OpFSub %float %101 %104
-        %115 = OpFSub %float %107 %110
-        %116 = OpCompositeConstruct %v2float %114 %115
-               OpStore %param_3 %116
-        %117 = OpAccessChain %_ptr_Function_float %param_2 %uint_0
-        %118 = OpLoad %float %117
-        %119 = OpAccessChain %_ptr_Function_float %param_3 %uint_1
-        %120 = OpLoad %float %119
-        %121 = OpAccessChain %_ptr_Function_float %param_3 %uint_0
-        %122 = OpLoad %float %121
-        %123 = OpAccessChain %_ptr_Function_float %param_2 %uint_1
-        %124 = OpLoad %float %123
-        %125 = OpFMul %float %118 %120
-        %126 = OpFMul %float %122 %124
-        %127 = OpFSub %float %125 %126
-               OpStore %x_67 %127
-        %129 = OpFOrdLessThan %bool %86 %float_0
-        %130 = OpFOrdLessThan %bool %127 %float_0
-        %131 = OpLogicalAnd %bool %129 %130
-               OpStore %x_136_phi %131
-        %132 = OpLogicalNot %bool %131
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %133
-        %134 = OpLabel
-        %135 = OpFOrdGreaterThanEqual %bool %86 %float_0
-        %136 = OpFOrdGreaterThanEqual %bool %127 %float_0
-        %137 = OpLogicalAnd %bool %135 %136
-               OpStore %x_135 %137
-        %138 = OpLoad %bool %x_135
-               OpStore %x_136_phi %138
-               OpBranch %133
-        %133 = OpLabel
-        %139 = OpLoad %bool %x_136_phi
-        %140 = OpLogicalNot %bool %139
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %141
-        %142 = OpLabel
-               OpReturnValue %int_0
-        %141 = OpLabel
-        %145 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %146 = OpLoad %float %145
-        %148 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %149 = OpLoad %float %148
-        %151 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %152 = OpLoad %float %151
-        %154 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %155 = OpLoad %float %154
-        %157 = OpAccessChain %_ptr_Function_float %a %uint_0
-        %158 = OpLoad %float %157
-        %160 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %161 = OpLoad %float %160
-        %163 = OpAccessChain %_ptr_Function_float %a %uint_1
-        %164 = OpLoad %float %163
-        %166 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %167 = OpLoad %float %166
-        %168 = OpFSub %float %146 %149
-        %169 = OpFSub %float %152 %155
-        %170 = OpCompositeConstruct %v2float %168 %169
-               OpStore %param_4 %170
-        %171 = OpFSub %float %158 %161
-        %172 = OpFSub %float %164 %167
-        %173 = OpCompositeConstruct %v2float %171 %172
-               OpStore %param_5 %173
-        %174 = OpAccessChain %_ptr_Function_float %param_4 %uint_0
-        %175 = OpLoad %float %174
-        %176 = OpAccessChain %_ptr_Function_float %param_5 %uint_1
-        %177 = OpLoad %float %176
-        %178 = OpAccessChain %_ptr_Function_float %param_5 %uint_0
-        %179 = OpLoad %float %178
-        %180 = OpAccessChain %_ptr_Function_float %param_4 %uint_1
-        %181 = OpLoad %float %180
-        %182 = OpFMul %float %175 %177
-        %183 = OpFMul %float %179 %181
-        %184 = OpFSub %float %182 %183
-               OpStore %x_66 %184
-        %185 = OpFOrdLessThan %bool %184 %float_0
-        %186 = OpLogicalAnd %bool %129 %185
-               OpStore %x_173_phi %186
-        %187 = OpLogicalNot %bool %186
-               OpSelectionMerge %188 None
-               OpBranchConditional %187 %189 %188
-        %189 = OpLabel
-        %190 = OpFOrdGreaterThanEqual %bool %86 %float_0
-        %191 = OpFOrdGreaterThanEqual %bool %184 %float_0
-        %192 = OpLogicalAnd %bool %190 %191
-               OpStore %x_172 %192
-        %193 = OpLoad %bool %x_172
-               OpStore %x_173_phi %193
-               OpBranch %188
-        %188 = OpLabel
-        %194 = OpLoad %bool %x_173_phi
-        %195 = OpLogicalNot %bool %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %196
-        %197 = OpLabel
-               OpReturnValue %int_0
-        %196 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %199
-        %202 = OpLabel
-    %param_6 = OpVariable %_ptr_Function_v2float Function %30
-    %param_7 = OpVariable %_ptr_Function_v2float Function %30
-    %param_8 = OpVariable %_ptr_Function_v2float Function %30
-    %param_9 = OpVariable %_ptr_Function_v2float Function %30
-        %207 = OpLoad %v4float %gl_FragCoord
-        %209 = OpAccessChain %_ptr_Uniform_v2float %x_17 %uint_0
-        %210 = OpLoad %v2float %209
-        %211 = OpCompositeExtract %float %207 0
-        %212 = OpCompositeExtract %float %207 1
-        %213 = OpCompositeConstruct %v2float %211 %212
-        %214 = OpFDiv %v2float %213 %210
-               OpStore %param_6 %214
-               OpStore %param_7 %217
-               OpStore %param_8 %220
-               OpStore %param_9 %223
-        %224 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %229 = OpIEqual %bool %224 %int_1
-               OpSelectionMerge %230 None
-               OpBranchConditional %229 %231 %232
-        %231 = OpLabel
-               OpStore %x_GLF_color %234
-               OpBranch %230
-        %232 = OpLabel
-               OpStore %x_GLF_color %235
-               OpBranch %230
-        %230 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %236
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %240 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %241 = OpFunctionCall %void %main_1
-        %242 = OpLoad %v4float %x_GLF_color
-        %243 = OpCompositeConstruct %main_out %242
-               OpReturnValue %243
-               OpFunctionEnd
-       %main = OpFunction %void None %199
-        %245 = OpLabel
-        %247 = OpLoad %v4float %gl_FragCoord_param_1
-        %246 = OpFunctionCall %main_out %main_inner %247
-        %248 = OpCompositeExtract %v4float %246 0
-               OpStore %x_GLF_color_1_1 %248
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.wgsl
deleted file mode 100644
index f49e3e9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,136 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_17 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var x_66 : f32;
-  var x_67 : f32;
-  var x_68 : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_135 : bool;
-  var x_172 : bool;
-  var x_136_phi : bool;
-  var x_173_phi : bool;
-  let x_69 : ptr<function, f32> = &((*(p)).x);
-  let x_70 : f32 = *(x_69);
-  let x_71 : ptr<function, f32> = &((*(a)).x);
-  let x_72 : f32 = *(x_71);
-  let x_74 : ptr<function, f32> = &((*(p)).y);
-  let x_75 : f32 = *(x_74);
-  let x_76 : ptr<function, f32> = &((*(a)).y);
-  let x_77 : f32 = *(x_76);
-  let x_80 : ptr<function, f32> = &((*(b)).x);
-  let x_81 : f32 = *(x_80);
-  let x_82 : f32 = *(x_71);
-  let x_84 : ptr<function, f32> = &((*(b)).y);
-  let x_85 : f32 = *(x_84);
-  let x_86 : f32 = *(x_76);
-  param = vec2<f32>((x_70 - x_72), (x_75 - x_77));
-  param_1 = vec2<f32>((x_81 - x_82), (x_85 - x_86));
-  let x_90 : f32 = param.x;
-  let x_92 : f32 = param_1.y;
-  let x_95 : f32 = param_1.x;
-  let x_97 : f32 = param.y;
-  let x_99 : f32 = ((x_90 * x_92) - (x_95 * x_97));
-  x_68 = x_99;
-  let x_100 : f32 = *(x_69);
-  let x_101 : f32 = *(x_80);
-  let x_103 : f32 = *(x_74);
-  let x_104 : f32 = *(x_84);
-  let x_107 : ptr<function, f32> = &((*(c)).x);
-  let x_108 : f32 = *(x_107);
-  let x_109 : f32 = *(x_80);
-  let x_111 : ptr<function, f32> = &((*(c)).y);
-  let x_112 : f32 = *(x_111);
-  let x_113 : f32 = *(x_84);
-  param_2 = vec2<f32>((x_100 - x_101), (x_103 - x_104));
-  param_3 = vec2<f32>((x_108 - x_109), (x_112 - x_113));
-  let x_117 : f32 = param_2.x;
-  let x_119 : f32 = param_3.y;
-  let x_122 : f32 = param_3.x;
-  let x_124 : f32 = param_2.y;
-  let x_126 : f32 = ((x_117 * x_119) - (x_122 * x_124));
-  x_67 = x_126;
-  let x_127 : bool = (x_99 < 0.0);
-  let x_129 : bool = (x_127 & (x_126 < 0.0));
-  x_136_phi = x_129;
-  if (!(x_129)) {
-    x_135 = ((x_99 >= 0.0) & (x_126 >= 0.0));
-    x_136_phi = x_135;
-  }
-  let x_136 : bool = x_136_phi;
-  if (!(x_136)) {
-    return 0;
-  }
-  let x_140 : f32 = *(x_69);
-  let x_141 : f32 = *(x_107);
-  let x_143 : f32 = *(x_74);
-  let x_144 : f32 = *(x_111);
-  let x_147 : f32 = *(x_71);
-  let x_148 : f32 = *(x_107);
-  let x_150 : f32 = *(x_76);
-  let x_151 : f32 = *(x_111);
-  param_4 = vec2<f32>((x_140 - x_141), (x_143 - x_144));
-  param_5 = vec2<f32>((x_147 - x_148), (x_150 - x_151));
-  let x_155 : f32 = param_4.x;
-  let x_157 : f32 = param_5.y;
-  let x_160 : f32 = param_5.x;
-  let x_162 : f32 = param_4.y;
-  let x_164 : f32 = ((x_155 * x_157) - (x_160 * x_162));
-  x_66 = x_164;
-  let x_166 : bool = (x_127 & (x_164 < 0.0));
-  x_173_phi = x_166;
-  if (!(x_166)) {
-    x_172 = ((x_99 >= 0.0) & (x_164 >= 0.0));
-    x_173_phi = x_172;
-  }
-  let x_173 : bool = x_173_phi;
-  if (!(x_173)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_55 : vec4<f32> = gl_FragCoord;
-  let x_58 : vec2<f32> = x_17.resolution;
-  param_6 = (vec2<f32>(x_55.x, x_55.y) / x_58);
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_60 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_60 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.hlsl
deleted file mode 100644
index 6d8725a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,149 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_17 : register(b0, space0) {
-  uint4 x_17[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a, inout float2 b, inout float2 c) {
-  float x_66 = 0.0f;
-  float x_67 = 0.0f;
-  float x_68 = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_135 = false;
-  bool x_172 = false;
-  bool x_136_phi = false;
-  bool x_173_phi = false;
-  const float x_70 = p.x;
-  const float x_72 = a.x;
-  const float x_75 = p.y;
-  const float x_77 = a.y;
-  const float x_81 = b.x;
-  const float x_82 = a.x;
-  const float x_85 = b.y;
-  const float x_86 = a.y;
-  param = float2((x_70 - x_72), (x_75 - x_77));
-  param_1 = float2((x_81 - x_82), (x_85 - x_86));
-  const float x_90 = param.x;
-  const float x_92 = param_1.y;
-  const float x_95 = param_1.x;
-  const float x_97 = param.y;
-  const float x_99 = ((x_90 * x_92) - (x_95 * x_97));
-  x_68 = x_99;
-  const float x_100 = p.x;
-  const float x_101 = b.x;
-  const float x_103 = p.y;
-  const float x_104 = b.y;
-  const float x_108 = c.x;
-  const float x_109 = b.x;
-  const float x_112 = c.y;
-  const float x_113 = b.y;
-  param_2 = float2((x_100 - x_101), (x_103 - x_104));
-  param_3 = float2((x_108 - x_109), (x_112 - x_113));
-  const float x_117 = param_2.x;
-  const float x_119 = param_3.y;
-  const float x_122 = param_3.x;
-  const float x_124 = param_2.y;
-  const float x_126 = ((x_117 * x_119) - (x_122 * x_124));
-  x_67 = x_126;
-  const bool x_127 = (x_99 < 0.0f);
-  bool tint_tmp = x_127;
-  if (tint_tmp) {
-    tint_tmp = (x_126 < 0.0f);
-  }
-  const bool x_129 = (tint_tmp);
-  x_136_phi = x_129;
-  if (!(x_129)) {
-    bool tint_tmp_1 = (x_99 >= 0.0f);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_126 >= 0.0f);
-    }
-    x_135 = (tint_tmp_1);
-    x_136_phi = x_135;
-  }
-  if (!(x_136_phi)) {
-    return 0;
-  }
-  const float x_140 = p.x;
-  const float x_141 = c.x;
-  const float x_143 = p.y;
-  const float x_144 = c.y;
-  const float x_147 = a.x;
-  const float x_148 = c.x;
-  const float x_150 = a.y;
-  const float x_151 = c.y;
-  param_4 = float2((x_140 - x_141), (x_143 - x_144));
-  param_5 = float2((x_147 - x_148), (x_150 - x_151));
-  const float x_155 = param_4.x;
-  const float x_157 = param_5.y;
-  const float x_160 = param_5.x;
-  const float x_162 = param_4.y;
-  const float x_164 = ((x_155 * x_157) - (x_160 * x_162));
-  x_66 = x_164;
-  bool tint_tmp_2 = x_127;
-  if (tint_tmp_2) {
-    tint_tmp_2 = (x_164 < 0.0f);
-  }
-  const bool x_166 = (tint_tmp_2);
-  x_173_phi = x_166;
-  if (!(x_166)) {
-    bool tint_tmp_3 = (x_99 >= 0.0f);
-    if (tint_tmp_3) {
-      tint_tmp_3 = (x_164 >= 0.0f);
-    }
-    x_172 = (tint_tmp_3);
-    x_173_phi = x_172;
-  }
-  if (!(x_173_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_55 = gl_FragCoord;
-  const float2 x_58 = asfloat(x_17[0].xy);
-  param_6 = (float2(x_55.x, x_55.y) / x_58);
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_60 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_60 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.msl
deleted file mode 100644
index f2f0ffb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.msl
+++ /dev/null
@@ -1,135 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(thread float2* const p, thread float2* const a, thread float2* const b, thread float2* const c) {
-  float x_66 = 0.0f;
-  float x_67 = 0.0f;
-  float x_68 = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_135 = false;
-  bool x_172 = false;
-  bool x_136_phi = false;
-  bool x_173_phi = false;
-  float const x_70 = (*(p)).x;
-  float const x_72 = (*(a)).x;
-  float const x_75 = (*(p)).y;
-  float const x_77 = (*(a)).y;
-  float const x_81 = (*(b)).x;
-  float const x_82 = (*(a)).x;
-  float const x_85 = (*(b)).y;
-  float const x_86 = (*(a)).y;
-  param = float2((x_70 - x_72), (x_75 - x_77));
-  param_1 = float2((x_81 - x_82), (x_85 - x_86));
-  float const x_90 = param.x;
-  float const x_92 = param_1.y;
-  float const x_95 = param_1.x;
-  float const x_97 = param.y;
-  float const x_99 = ((x_90 * x_92) - (x_95 * x_97));
-  x_68 = x_99;
-  float const x_100 = (*(p)).x;
-  float const x_101 = (*(b)).x;
-  float const x_103 = (*(p)).y;
-  float const x_104 = (*(b)).y;
-  float const x_108 = (*(c)).x;
-  float const x_109 = (*(b)).x;
-  float const x_112 = (*(c)).y;
-  float const x_113 = (*(b)).y;
-  param_2 = float2((x_100 - x_101), (x_103 - x_104));
-  param_3 = float2((x_108 - x_109), (x_112 - x_113));
-  float const x_117 = param_2.x;
-  float const x_119 = param_3.y;
-  float const x_122 = param_3.x;
-  float const x_124 = param_2.y;
-  float const x_126 = ((x_117 * x_119) - (x_122 * x_124));
-  x_67 = x_126;
-  bool const x_127 = (x_99 < 0.0f);
-  bool const x_129 = (x_127 && (x_126 < 0.0f));
-  x_136_phi = x_129;
-  if (!(x_129)) {
-    x_135 = ((x_99 >= 0.0f) && (x_126 >= 0.0f));
-    x_136_phi = x_135;
-  }
-  bool const x_136 = x_136_phi;
-  if (!(x_136)) {
-    return 0;
-  }
-  float const x_140 = (*(p)).x;
-  float const x_141 = (*(c)).x;
-  float const x_143 = (*(p)).y;
-  float const x_144 = (*(c)).y;
-  float const x_147 = (*(a)).x;
-  float const x_148 = (*(c)).x;
-  float const x_150 = (*(a)).y;
-  float const x_151 = (*(c)).y;
-  param_4 = float2((x_140 - x_141), (x_143 - x_144));
-  param_5 = float2((x_147 - x_148), (x_150 - x_151));
-  float const x_155 = param_4.x;
-  float const x_157 = param_5.y;
-  float const x_160 = param_5.x;
-  float const x_162 = param_4.y;
-  float const x_164 = ((x_155 * x_157) - (x_160 * x_162));
-  x_66 = x_164;
-  bool const x_166 = (x_127 && (x_164 < 0.0f));
-  x_173_phi = x_166;
-  if (!(x_166)) {
-    x_172 = ((x_99 >= 0.0f) && (x_164 >= 0.0f));
-    x_173_phi = x_172;
-  }
-  bool const x_173 = x_173_phi;
-  if (!(x_173)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_17, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_55 = *(tint_symbol_3);
-  float2 const x_58 = x_17.resolution;
-  param_6 = (float2(x_55.x, x_55.y) / x_58);
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_60 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_60 == 1)) {
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_17, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_17, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_17 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_17, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.spvasm
deleted file mode 100644
index 7431763..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,339 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 257
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_17 "x_17"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_66 "x_66"
-               OpName %x_67 "x_67"
-               OpName %x_68 "x_68"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_135 "x_135"
-               OpName %x_172 "x_172"
-               OpName %x_136_phi "x_136_phi"
-               OpName %x_173_phi "x_173_phi"
-               OpName %main_1 "main_1"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_17 NonWritable
-               OpDecorate %x_17 DescriptorSet 0
-               OpDecorate %x_17 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_17 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-        %int = OpTypeInt 32 1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %26 = OpConstantNull %float
-         %30 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %39 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %207 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %225 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %228 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %231 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-    %float_1 = OpConstant %float 1
-        %242 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %243 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %244 = OpTypeFunction %main_out %v4float
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %15
-          %p = OpFunctionParameter %_ptr_Function_v2float
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %23 = OpLabel
-       %x_66 = OpVariable %_ptr_Function_float Function %26
-       %x_67 = OpVariable %_ptr_Function_float Function %26
-       %x_68 = OpVariable %_ptr_Function_float Function %26
-      %param = OpVariable %_ptr_Function_v2float Function %30
-    %param_1 = OpVariable %_ptr_Function_v2float Function %30
-    %param_2 = OpVariable %_ptr_Function_v2float Function %30
-    %param_3 = OpVariable %_ptr_Function_v2float Function %30
-    %param_4 = OpVariable %_ptr_Function_v2float Function %30
-    %param_5 = OpVariable %_ptr_Function_v2float Function %30
-      %x_135 = OpVariable %_ptr_Function_bool Function %39
-      %x_172 = OpVariable %_ptr_Function_bool Function %39
-  %x_136_phi = OpVariable %_ptr_Function_bool Function %39
-  %x_173_phi = OpVariable %_ptr_Function_bool Function %39
-         %46 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %47 = OpLoad %float %46
-         %49 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %50 = OpLoad %float %49
-         %53 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %54 = OpLoad %float %53
-         %56 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %60 = OpLoad %float %59
-         %62 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %66 = OpLoad %float %65
-         %68 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %69 = OpLoad %float %68
-         %70 = OpFSub %float %47 %50
-         %71 = OpFSub %float %54 %57
-         %72 = OpCompositeConstruct %v2float %70 %71
-               OpStore %param %72
-         %73 = OpFSub %float %60 %63
-         %74 = OpFSub %float %66 %69
-         %75 = OpCompositeConstruct %v2float %73 %74
-               OpStore %param_1 %75
-         %76 = OpAccessChain %_ptr_Function_float %param %uint_0
-         %77 = OpLoad %float %76
-         %78 = OpAccessChain %_ptr_Function_float %param_1 %uint_1
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Function_float %param_1 %uint_0
-         %81 = OpLoad %float %80
-         %82 = OpAccessChain %_ptr_Function_float %param %uint_1
-         %83 = OpLoad %float %82
-         %84 = OpFMul %float %77 %79
-         %85 = OpFMul %float %81 %83
-         %86 = OpFSub %float %84 %85
-               OpStore %x_68 %86
-         %88 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %89 = OpLoad %float %88
-         %91 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %92 = OpLoad %float %91
-         %94 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %95 = OpLoad %float %94
-         %97 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %101 = OpLoad %float %100
-        %103 = OpAccessChain %_ptr_Function_float %b %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %107 = OpLoad %float %106
-        %109 = OpAccessChain %_ptr_Function_float %b %uint_1
-        %110 = OpLoad %float %109
-        %111 = OpFSub %float %89 %92
-        %112 = OpFSub %float %95 %98
-        %113 = OpCompositeConstruct %v2float %111 %112
-               OpStore %param_2 %113
-        %114 = OpFSub %float %101 %104
-        %115 = OpFSub %float %107 %110
-        %116 = OpCompositeConstruct %v2float %114 %115
-               OpStore %param_3 %116
-        %117 = OpAccessChain %_ptr_Function_float %param_2 %uint_0
-        %118 = OpLoad %float %117
-        %119 = OpAccessChain %_ptr_Function_float %param_3 %uint_1
-        %120 = OpLoad %float %119
-        %121 = OpAccessChain %_ptr_Function_float %param_3 %uint_0
-        %122 = OpLoad %float %121
-        %123 = OpAccessChain %_ptr_Function_float %param_2 %uint_1
-        %124 = OpLoad %float %123
-        %125 = OpFMul %float %118 %120
-        %126 = OpFMul %float %122 %124
-        %127 = OpFSub %float %125 %126
-               OpStore %x_67 %127
-        %129 = OpFOrdLessThan %bool %86 %float_0
-               OpSelectionMerge %130 None
-               OpBranchConditional %129 %131 %130
-        %131 = OpLabel
-        %132 = OpFOrdLessThan %bool %127 %float_0
-               OpBranch %130
-        %130 = OpLabel
-        %133 = OpPhi %bool %129 %23 %132 %131
-               OpStore %x_136_phi %133
-        %134 = OpLogicalNot %bool %133
-               OpSelectionMerge %135 None
-               OpBranchConditional %134 %136 %135
-        %136 = OpLabel
-        %137 = OpFOrdGreaterThanEqual %bool %86 %float_0
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %138
-        %139 = OpLabel
-        %140 = OpFOrdGreaterThanEqual %bool %127 %float_0
-               OpBranch %138
-        %138 = OpLabel
-        %141 = OpPhi %bool %137 %136 %140 %139
-               OpStore %x_135 %141
-        %142 = OpLoad %bool %x_135
-               OpStore %x_136_phi %142
-               OpBranch %135
-        %135 = OpLabel
-        %143 = OpLoad %bool %x_136_phi
-        %144 = OpLogicalNot %bool %143
-               OpSelectionMerge %145 None
-               OpBranchConditional %144 %146 %145
-        %146 = OpLabel
-               OpReturnValue %int_0
-        %145 = OpLabel
-        %149 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %150 = OpLoad %float %149
-        %152 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %153 = OpLoad %float %152
-        %155 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %156 = OpLoad %float %155
-        %158 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %159 = OpLoad %float %158
-        %161 = OpAccessChain %_ptr_Function_float %a %uint_0
-        %162 = OpLoad %float %161
-        %164 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %165 = OpLoad %float %164
-        %167 = OpAccessChain %_ptr_Function_float %a %uint_1
-        %168 = OpLoad %float %167
-        %170 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %171 = OpLoad %float %170
-        %172 = OpFSub %float %150 %153
-        %173 = OpFSub %float %156 %159
-        %174 = OpCompositeConstruct %v2float %172 %173
-               OpStore %param_4 %174
-        %175 = OpFSub %float %162 %165
-        %176 = OpFSub %float %168 %171
-        %177 = OpCompositeConstruct %v2float %175 %176
-               OpStore %param_5 %177
-        %178 = OpAccessChain %_ptr_Function_float %param_4 %uint_0
-        %179 = OpLoad %float %178
-        %180 = OpAccessChain %_ptr_Function_float %param_5 %uint_1
-        %181 = OpLoad %float %180
-        %182 = OpAccessChain %_ptr_Function_float %param_5 %uint_0
-        %183 = OpLoad %float %182
-        %184 = OpAccessChain %_ptr_Function_float %param_4 %uint_1
-        %185 = OpLoad %float %184
-        %186 = OpFMul %float %179 %181
-        %187 = OpFMul %float %183 %185
-        %188 = OpFSub %float %186 %187
-               OpStore %x_66 %188
-               OpSelectionMerge %189 None
-               OpBranchConditional %129 %190 %189
-        %190 = OpLabel
-        %191 = OpFOrdLessThan %bool %188 %float_0
-               OpBranch %189
-        %189 = OpLabel
-        %192 = OpPhi %bool %129 %145 %191 %190
-               OpStore %x_173_phi %192
-        %193 = OpLogicalNot %bool %192
-               OpSelectionMerge %194 None
-               OpBranchConditional %193 %195 %194
-        %195 = OpLabel
-        %196 = OpFOrdGreaterThanEqual %bool %86 %float_0
-               OpSelectionMerge %197 None
-               OpBranchConditional %196 %198 %197
-        %198 = OpLabel
-        %199 = OpFOrdGreaterThanEqual %bool %188 %float_0
-               OpBranch %197
-        %197 = OpLabel
-        %200 = OpPhi %bool %196 %195 %199 %198
-               OpStore %x_172 %200
-        %201 = OpLoad %bool %x_172
-               OpStore %x_173_phi %201
-               OpBranch %194
-        %194 = OpLabel
-        %202 = OpLoad %bool %x_173_phi
-        %203 = OpLogicalNot %bool %202
-               OpSelectionMerge %204 None
-               OpBranchConditional %203 %205 %204
-        %205 = OpLabel
-               OpReturnValue %int_0
-        %204 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %207
-        %210 = OpLabel
-    %param_6 = OpVariable %_ptr_Function_v2float Function %30
-    %param_7 = OpVariable %_ptr_Function_v2float Function %30
-    %param_8 = OpVariable %_ptr_Function_v2float Function %30
-    %param_9 = OpVariable %_ptr_Function_v2float Function %30
-        %215 = OpLoad %v4float %gl_FragCoord
-        %217 = OpAccessChain %_ptr_Uniform_v2float %x_17 %uint_0
-        %218 = OpLoad %v2float %217
-        %219 = OpCompositeExtract %float %215 0
-        %220 = OpCompositeExtract %float %215 1
-        %221 = OpCompositeConstruct %v2float %219 %220
-        %222 = OpFDiv %v2float %221 %218
-               OpStore %param_6 %222
-               OpStore %param_7 %225
-               OpStore %param_8 %228
-               OpStore %param_9 %231
-        %232 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %237 = OpIEqual %bool %232 %int_1
-               OpSelectionMerge %238 None
-               OpBranchConditional %237 %239 %240
-        %239 = OpLabel
-               OpStore %x_GLF_color %242
-               OpBranch %238
-        %240 = OpLabel
-               OpStore %x_GLF_color %243
-               OpBranch %238
-        %238 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %244
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %248 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %249 = OpFunctionCall %void %main_1
-        %250 = OpLoad %v4float %x_GLF_color
-        %251 = OpCompositeConstruct %main_out %250
-               OpReturnValue %251
-               OpFunctionEnd
-       %main = OpFunction %void None %207
-        %253 = OpLabel
-        %255 = OpLoad %v4float %gl_FragCoord_param_1
-        %254 = OpFunctionCall %main_out %main_inner %255
-        %256 = OpCompositeExtract %v4float %254 0
-               OpStore %x_GLF_color_1_1 %256
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.wgsl
deleted file mode 100644
index 414b559..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,136 +0,0 @@
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_17 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var x_66 : f32;
-  var x_67 : f32;
-  var x_68 : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_135 : bool;
-  var x_172 : bool;
-  var x_136_phi : bool;
-  var x_173_phi : bool;
-  let x_69 : ptr<function, f32> = &((*(p)).x);
-  let x_70 : f32 = *(x_69);
-  let x_71 : ptr<function, f32> = &((*(a)).x);
-  let x_72 : f32 = *(x_71);
-  let x_74 : ptr<function, f32> = &((*(p)).y);
-  let x_75 : f32 = *(x_74);
-  let x_76 : ptr<function, f32> = &((*(a)).y);
-  let x_77 : f32 = *(x_76);
-  let x_80 : ptr<function, f32> = &((*(b)).x);
-  let x_81 : f32 = *(x_80);
-  let x_82 : f32 = *(x_71);
-  let x_84 : ptr<function, f32> = &((*(b)).y);
-  let x_85 : f32 = *(x_84);
-  let x_86 : f32 = *(x_76);
-  param = vec2<f32>((x_70 - x_72), (x_75 - x_77));
-  param_1 = vec2<f32>((x_81 - x_82), (x_85 - x_86));
-  let x_90 : f32 = param.x;
-  let x_92 : f32 = param_1.y;
-  let x_95 : f32 = param_1.x;
-  let x_97 : f32 = param.y;
-  let x_99 : f32 = ((x_90 * x_92) - (x_95 * x_97));
-  x_68 = x_99;
-  let x_100 : f32 = *(x_69);
-  let x_101 : f32 = *(x_80);
-  let x_103 : f32 = *(x_74);
-  let x_104 : f32 = *(x_84);
-  let x_107 : ptr<function, f32> = &((*(c)).x);
-  let x_108 : f32 = *(x_107);
-  let x_109 : f32 = *(x_80);
-  let x_111 : ptr<function, f32> = &((*(c)).y);
-  let x_112 : f32 = *(x_111);
-  let x_113 : f32 = *(x_84);
-  param_2 = vec2<f32>((x_100 - x_101), (x_103 - x_104));
-  param_3 = vec2<f32>((x_108 - x_109), (x_112 - x_113));
-  let x_117 : f32 = param_2.x;
-  let x_119 : f32 = param_3.y;
-  let x_122 : f32 = param_3.x;
-  let x_124 : f32 = param_2.y;
-  let x_126 : f32 = ((x_117 * x_119) - (x_122 * x_124));
-  x_67 = x_126;
-  let x_127 : bool = (x_99 < 0.0);
-  let x_129 : bool = (x_127 && (x_126 < 0.0));
-  x_136_phi = x_129;
-  if (!(x_129)) {
-    x_135 = ((x_99 >= 0.0) && (x_126 >= 0.0));
-    x_136_phi = x_135;
-  }
-  let x_136 : bool = x_136_phi;
-  if (!(x_136)) {
-    return 0;
-  }
-  let x_140 : f32 = *(x_69);
-  let x_141 : f32 = *(x_107);
-  let x_143 : f32 = *(x_74);
-  let x_144 : f32 = *(x_111);
-  let x_147 : f32 = *(x_71);
-  let x_148 : f32 = *(x_107);
-  let x_150 : f32 = *(x_76);
-  let x_151 : f32 = *(x_111);
-  param_4 = vec2<f32>((x_140 - x_141), (x_143 - x_144));
-  param_5 = vec2<f32>((x_147 - x_148), (x_150 - x_151));
-  let x_155 : f32 = param_4.x;
-  let x_157 : f32 = param_5.y;
-  let x_160 : f32 = param_5.x;
-  let x_162 : f32 = param_4.y;
-  let x_164 : f32 = ((x_155 * x_157) - (x_160 * x_162));
-  x_66 = x_164;
-  let x_166 : bool = (x_127 && (x_164 < 0.0));
-  x_173_phi = x_166;
-  if (!(x_166)) {
-    x_172 = ((x_99 >= 0.0) && (x_164 >= 0.0));
-    x_173_phi = x_172;
-  }
-  let x_173 : bool = x_173_phi;
-  if (!(x_173)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_55 : vec4<f32> = gl_FragCoord;
-  let x_58 : vec2<f32> = x_17.resolution;
-  param_6 = (vec2<f32>(x_55.x, x_55.y) / x_58);
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_60 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_60 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.hlsl
deleted file mode 100644
index 3f249ae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,172 +0,0 @@
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_19 : register(b0, space0) {
-  uint4 x_19[1];
-};
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a, inout float2 b, inout float2 c) {
-  float x_78 = 0.0f;
-  float x_79 = 0.0f;
-  float x_80 = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_147 = false;
-  bool x_203 = false;
-  bool x_148_phi = false;
-  bool x_204_phi = false;
-  const float x_82 = p.x;
-  const float x_84 = a.x;
-  const float x_87 = p.y;
-  const float x_89 = a.y;
-  const float x_93 = b.x;
-  const float x_94 = a.x;
-  const float x_97 = b.y;
-  const float x_98 = a.y;
-  param = float2((x_82 - x_84), (x_87 - x_89));
-  param_1 = float2((x_93 - x_94), (x_97 - x_98));
-  const float x_102 = param.x;
-  const float x_104 = param_1.y;
-  const float x_107 = param_1.x;
-  const float x_109 = param.y;
-  const float x_111 = ((x_102 * x_104) - (x_107 * x_109));
-  x_80 = x_111;
-  const float x_112 = p.x;
-  const float x_113 = b.x;
-  const float x_115 = p.y;
-  const float x_116 = b.y;
-  const float x_120 = c.x;
-  const float x_121 = b.x;
-  const float x_124 = c.y;
-  const float x_125 = b.y;
-  param_2 = float2((x_112 - x_113), (x_115 - x_116));
-  param_3 = float2((x_120 - x_121), (x_124 - x_125));
-  const float x_129 = param_2.x;
-  const float x_131 = param_3.y;
-  const float x_134 = param_3.x;
-  const float x_136 = param_2.y;
-  const float x_138 = ((x_129 * x_131) - (x_134 * x_136));
-  x_79 = x_138;
-  const bool x_139 = (x_111 < 0.0f);
-  const bool x_141 = (x_139 & (x_138 < 0.0f));
-  x_148_phi = x_141;
-  if (!(x_141)) {
-    x_147 = ((x_111 >= 0.0f) & (x_138 >= 0.0f));
-    x_148_phi = x_147;
-  }
-  int x_153_phi = 0;
-  if (!(x_148_phi)) {
-    x_153_phi = 0;
-    while (true) {
-      int x_154 = 0;
-      int x_164_phi = 0;
-      const int x_153 = x_153_phi;
-      const float x_159 = asfloat(x_11[0].y);
-      const int x_160 = int(x_159);
-      if ((x_153 < x_160)) {
-      } else {
-        break;
-      }
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      x_164_phi = 0;
-      while (true) {
-        int x_165 = 0;
-        const int x_164 = x_164_phi;
-        if ((x_164 < x_160)) {
-        } else {
-          break;
-        }
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        {
-          x_165 = (x_164 + 1);
-          x_164_phi = x_165;
-        }
-      }
-      {
-        x_154 = (x_153 + 1);
-        x_153_phi = x_154;
-      }
-    }
-    return 0;
-  }
-  const float x_171 = p.x;
-  const float x_172 = c.x;
-  const float x_174 = p.y;
-  const float x_175 = c.y;
-  const float x_178 = a.x;
-  const float x_179 = c.x;
-  const float x_181 = a.y;
-  const float x_182 = c.y;
-  param_4 = float2((x_171 - x_172), (x_174 - x_175));
-  param_5 = float2((x_178 - x_179), (x_181 - x_182));
-  const float x_186 = param_4.x;
-  const float x_188 = param_5.y;
-  const float x_191 = param_5.x;
-  const float x_193 = param_4.y;
-  const float x_195 = ((x_186 * x_188) - (x_191 * x_193));
-  x_78 = x_195;
-  const bool x_197 = (x_139 & (x_195 < 0.0f));
-  x_204_phi = x_197;
-  if (!(x_197)) {
-    x_203 = ((x_111 >= 0.0f) & (x_195 >= 0.0f));
-    x_204_phi = x_203;
-  }
-  if (!(x_204_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_60 = gl_FragCoord;
-  const float2 x_63 = asfloat(x_19[0].xy);
-  param_6 = (float2(x_60.x, x_60.y) / x_63);
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_65 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_65 == 1)) {
-    const float x_71 = asfloat(x_11[0].y);
-    const float x_73 = asfloat(x_11[0].x);
-    if ((x_71 >= x_73)) {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.msl
deleted file mode 100644
index 60e7bc9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.msl
+++ /dev/null
@@ -1,174 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(constant buf1& x_11, thread float2* const p, thread float2* const a, thread float2* const b, thread float2* const c, thread float4* const tint_symbol_3) {
-  float x_78 = 0.0f;
-  float x_79 = 0.0f;
-  float x_80 = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_147 = false;
-  bool x_203 = false;
-  bool x_148_phi = false;
-  bool x_204_phi = false;
-  float const x_82 = (*(p)).x;
-  float const x_84 = (*(a)).x;
-  float const x_87 = (*(p)).y;
-  float const x_89 = (*(a)).y;
-  float const x_93 = (*(b)).x;
-  float const x_94 = (*(a)).x;
-  float const x_97 = (*(b)).y;
-  float const x_98 = (*(a)).y;
-  param = float2((x_82 - x_84), (x_87 - x_89));
-  param_1 = float2((x_93 - x_94), (x_97 - x_98));
-  float const x_102 = param.x;
-  float const x_104 = param_1.y;
-  float const x_107 = param_1.x;
-  float const x_109 = param.y;
-  float const x_111 = ((x_102 * x_104) - (x_107 * x_109));
-  x_80 = x_111;
-  float const x_112 = (*(p)).x;
-  float const x_113 = (*(b)).x;
-  float const x_115 = (*(p)).y;
-  float const x_116 = (*(b)).y;
-  float const x_120 = (*(c)).x;
-  float const x_121 = (*(b)).x;
-  float const x_124 = (*(c)).y;
-  float const x_125 = (*(b)).y;
-  param_2 = float2((x_112 - x_113), (x_115 - x_116));
-  param_3 = float2((x_120 - x_121), (x_124 - x_125));
-  float const x_129 = param_2.x;
-  float const x_131 = param_3.y;
-  float const x_134 = param_3.x;
-  float const x_136 = param_2.y;
-  float const x_138 = ((x_129 * x_131) - (x_134 * x_136));
-  x_79 = x_138;
-  bool const x_139 = (x_111 < 0.0f);
-  bool const x_141 = (x_139 & (x_138 < 0.0f));
-  x_148_phi = x_141;
-  if (!(x_141)) {
-    x_147 = ((x_111 >= 0.0f) & (x_138 >= 0.0f));
-    x_148_phi = x_147;
-  }
-  int x_153_phi = 0;
-  bool const x_148 = x_148_phi;
-  if (!(x_148)) {
-    x_153_phi = 0;
-    while (true) {
-      int x_154 = 0;
-      int x_164_phi = 0;
-      int const x_153 = x_153_phi;
-      float const x_159 = x_11.injectionSwitch.y;
-      int const x_160 = int(x_159);
-      if ((x_153 < x_160)) {
-      } else {
-        break;
-      }
-      *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      x_164_phi = 0;
-      while (true) {
-        int x_165 = 0;
-        int const x_164 = x_164_phi;
-        if ((x_164 < x_160)) {
-        } else {
-          break;
-        }
-        *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        {
-          x_165 = as_type<int>((as_type<uint>(x_164) + as_type<uint>(1)));
-          x_164_phi = x_165;
-        }
-      }
-      {
-        x_154 = as_type<int>((as_type<uint>(x_153) + as_type<uint>(1)));
-        x_153_phi = x_154;
-      }
-    }
-    return 0;
-  }
-  float const x_171 = (*(p)).x;
-  float const x_172 = (*(c)).x;
-  float const x_174 = (*(p)).y;
-  float const x_175 = (*(c)).y;
-  float const x_178 = (*(a)).x;
-  float const x_179 = (*(c)).x;
-  float const x_181 = (*(a)).y;
-  float const x_182 = (*(c)).y;
-  param_4 = float2((x_171 - x_172), (x_174 - x_175));
-  param_5 = float2((x_178 - x_179), (x_181 - x_182));
-  float const x_186 = param_4.x;
-  float const x_188 = param_5.y;
-  float const x_191 = param_5.x;
-  float const x_193 = param_4.y;
-  float const x_195 = ((x_186 * x_188) - (x_191 * x_193));
-  x_78 = x_195;
-  bool const x_197 = (x_139 & (x_195 < 0.0f));
-  x_204_phi = x_197;
-  if (!(x_197)) {
-    x_203 = ((x_111 >= 0.0f) & (x_195 >= 0.0f));
-    x_204_phi = x_203;
-  }
-  bool const x_204 = x_204_phi;
-  if (!(x_204)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_19, constant buf1& x_11, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_60 = *(tint_symbol_4);
-  float2 const x_63 = x_19.resolution;
-  param_6 = (float2(x_60.x, x_60.y) / x_63);
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_65 = pointInTriangle_vf2_vf2_vf2_vf2_(x_11, &(param_6), &(param_7), &(param_8), &(param_9), tint_symbol_5);
-  if ((x_65 == 1)) {
-    float const x_71 = x_11.injectionSwitch.y;
-    float const x_73 = x_11.injectionSwitch.x;
-    if ((x_71 >= x_73)) {
-      *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_19, constant buf1& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_19, x_11, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_19 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_19, x_11, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.spvasm
deleted file mode 100644
index cf14852..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,403 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 292
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_19 "x_19"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_78 "x_78"
-               OpName %x_79 "x_79"
-               OpName %x_80 "x_80"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_147 "x_147"
-               OpName %x_203 "x_203"
-               OpName %x_148_phi "x_148_phi"
-               OpName %x_204_phi "x_204_phi"
-               OpName %x_153_phi "x_153_phi"
-               OpName %x_154 "x_154"
-               OpName %x_164_phi "x_164_phi"
-               OpName %x_165 "x_165"
-               OpName %main_1 "main_1"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_19 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-         %33 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-%_ptr_Function_int = OpTypePointer Function %int
-        %144 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-        %166 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %236 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %254 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %257 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %260 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-        %277 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %278 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %279 = OpTypeFunction %main_out %v4float
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %18
-          %p = OpFunctionParameter %_ptr_Function_v2float
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %26 = OpLabel
-       %x_78 = OpVariable %_ptr_Function_float Function %29
-       %x_79 = OpVariable %_ptr_Function_float Function %29
-       %x_80 = OpVariable %_ptr_Function_float Function %29
-      %param = OpVariable %_ptr_Function_v2float Function %33
-    %param_1 = OpVariable %_ptr_Function_v2float Function %33
-    %param_2 = OpVariable %_ptr_Function_v2float Function %33
-    %param_3 = OpVariable %_ptr_Function_v2float Function %33
-    %param_4 = OpVariable %_ptr_Function_v2float Function %33
-    %param_5 = OpVariable %_ptr_Function_v2float Function %33
-      %x_147 = OpVariable %_ptr_Function_bool Function %42
-      %x_203 = OpVariable %_ptr_Function_bool Function %42
-  %x_148_phi = OpVariable %_ptr_Function_bool Function %42
-  %x_204_phi = OpVariable %_ptr_Function_bool Function %42
-  %x_153_phi = OpVariable %_ptr_Function_int Function %144
-      %x_154 = OpVariable %_ptr_Function_int Function %144
-  %x_164_phi = OpVariable %_ptr_Function_int Function %144
-      %x_165 = OpVariable %_ptr_Function_int Function %144
-         %49 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %53 = OpLoad %float %52
-         %56 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %60 = OpLoad %float %59
-         %62 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %66 = OpLoad %float %65
-         %68 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %72 = OpLoad %float %71
-         %73 = OpFSub %float %50 %53
-         %74 = OpFSub %float %57 %60
-         %75 = OpCompositeConstruct %v2float %73 %74
-               OpStore %param %75
-         %76 = OpFSub %float %63 %66
-         %77 = OpFSub %float %69 %72
-         %78 = OpCompositeConstruct %v2float %76 %77
-               OpStore %param_1 %78
-         %79 = OpAccessChain %_ptr_Function_float %param %uint_0
-         %80 = OpLoad %float %79
-         %81 = OpAccessChain %_ptr_Function_float %param_1 %uint_1
-         %82 = OpLoad %float %81
-         %83 = OpAccessChain %_ptr_Function_float %param_1 %uint_0
-         %84 = OpLoad %float %83
-         %85 = OpAccessChain %_ptr_Function_float %param %uint_1
-         %86 = OpLoad %float %85
-         %87 = OpFMul %float %80 %82
-         %88 = OpFMul %float %84 %86
-         %89 = OpFSub %float %87 %88
-               OpStore %x_80 %89
-         %91 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %92 = OpLoad %float %91
-         %94 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %95 = OpLoad %float %94
-         %97 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpAccessChain %_ptr_Function_float %b %uint_1
-        %101 = OpLoad %float %100
-        %103 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Function_float %b %uint_0
-        %107 = OpLoad %float %106
-        %109 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %110 = OpLoad %float %109
-        %112 = OpAccessChain %_ptr_Function_float %b %uint_1
-        %113 = OpLoad %float %112
-        %114 = OpFSub %float %92 %95
-        %115 = OpFSub %float %98 %101
-        %116 = OpCompositeConstruct %v2float %114 %115
-               OpStore %param_2 %116
-        %117 = OpFSub %float %104 %107
-        %118 = OpFSub %float %110 %113
-        %119 = OpCompositeConstruct %v2float %117 %118
-               OpStore %param_3 %119
-        %120 = OpAccessChain %_ptr_Function_float %param_2 %uint_0
-        %121 = OpLoad %float %120
-        %122 = OpAccessChain %_ptr_Function_float %param_3 %uint_1
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Function_float %param_3 %uint_0
-        %125 = OpLoad %float %124
-        %126 = OpAccessChain %_ptr_Function_float %param_2 %uint_1
-        %127 = OpLoad %float %126
-        %128 = OpFMul %float %121 %123
-        %129 = OpFMul %float %125 %127
-        %130 = OpFSub %float %128 %129
-               OpStore %x_79 %130
-        %132 = OpFOrdLessThan %bool %89 %float_0
-        %133 = OpFOrdLessThan %bool %130 %float_0
-        %134 = OpLogicalAnd %bool %132 %133
-               OpStore %x_148_phi %134
-        %135 = OpLogicalNot %bool %134
-               OpSelectionMerge %136 None
-               OpBranchConditional %135 %137 %136
-        %137 = OpLabel
-        %138 = OpFOrdGreaterThanEqual %bool %89 %float_0
-        %139 = OpFOrdGreaterThanEqual %bool %130 %float_0
-        %140 = OpLogicalAnd %bool %138 %139
-               OpStore %x_147 %140
-        %141 = OpLoad %bool %x_147
-               OpStore %x_148_phi %141
-               OpBranch %136
-        %136 = OpLabel
-        %145 = OpLoad %bool %x_148_phi
-        %146 = OpLogicalNot %bool %145
-               OpSelectionMerge %147 None
-               OpBranchConditional %146 %148 %147
-        %148 = OpLabel
-               OpStore %x_153_phi %int_0
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %156 = OpLoad %int %x_153_phi
-        %158 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_1
-        %159 = OpLoad %float %158
-        %160 = OpConvertFToS %int %159
-        %161 = OpSLessThan %bool %156 %160
-               OpSelectionMerge %162 None
-               OpBranchConditional %161 %163 %164
-        %163 = OpLabel
-               OpBranch %162
-        %164 = OpLabel
-               OpBranch %151
-        %162 = OpLabel
-               OpStore %x_GLF_color %166
-               OpStore %x_164_phi %int_0
-               OpBranch %167
-        %167 = OpLabel
-               OpLoopMerge %168 %169 None
-               OpBranch %170
-        %170 = OpLabel
-        %172 = OpLoad %int %x_164_phi
-        %173 = OpSLessThan %bool %172 %160
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-               OpBranch %174
-        %176 = OpLabel
-               OpBranch %168
-        %174 = OpLabel
-               OpStore %x_GLF_color %166
-               OpBranch %169
-        %169 = OpLabel
-        %178 = OpIAdd %int %172 %int_1
-               OpStore %x_165 %178
-        %179 = OpLoad %int %x_165
-               OpStore %x_164_phi %179
-               OpBranch %167
-        %168 = OpLabel
-               OpBranch %152
-        %152 = OpLabel
-        %180 = OpIAdd %int %156 %int_1
-               OpStore %x_154 %180
-        %181 = OpLoad %int %x_154
-               OpStore %x_153_phi %181
-               OpBranch %150
-        %151 = OpLabel
-               OpReturnValue %int_0
-        %147 = OpLabel
-        %183 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %184 = OpLoad %float %183
-        %186 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %187 = OpLoad %float %186
-        %189 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %190 = OpLoad %float %189
-        %192 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %193 = OpLoad %float %192
-        %195 = OpAccessChain %_ptr_Function_float %a %uint_0
-        %196 = OpLoad %float %195
-        %198 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %199 = OpLoad %float %198
-        %201 = OpAccessChain %_ptr_Function_float %a %uint_1
-        %202 = OpLoad %float %201
-        %204 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %205 = OpLoad %float %204
-        %206 = OpFSub %float %184 %187
-        %207 = OpFSub %float %190 %193
-        %208 = OpCompositeConstruct %v2float %206 %207
-               OpStore %param_4 %208
-        %209 = OpFSub %float %196 %199
-        %210 = OpFSub %float %202 %205
-        %211 = OpCompositeConstruct %v2float %209 %210
-               OpStore %param_5 %211
-        %212 = OpAccessChain %_ptr_Function_float %param_4 %uint_0
-        %213 = OpLoad %float %212
-        %214 = OpAccessChain %_ptr_Function_float %param_5 %uint_1
-        %215 = OpLoad %float %214
-        %216 = OpAccessChain %_ptr_Function_float %param_5 %uint_0
-        %217 = OpLoad %float %216
-        %218 = OpAccessChain %_ptr_Function_float %param_4 %uint_1
-        %219 = OpLoad %float %218
-        %220 = OpFMul %float %213 %215
-        %221 = OpFMul %float %217 %219
-        %222 = OpFSub %float %220 %221
-               OpStore %x_78 %222
-        %223 = OpFOrdLessThan %bool %222 %float_0
-        %224 = OpLogicalAnd %bool %132 %223
-               OpStore %x_204_phi %224
-        %225 = OpLogicalNot %bool %224
-               OpSelectionMerge %226 None
-               OpBranchConditional %225 %227 %226
-        %227 = OpLabel
-        %228 = OpFOrdGreaterThanEqual %bool %89 %float_0
-        %229 = OpFOrdGreaterThanEqual %bool %222 %float_0
-        %230 = OpLogicalAnd %bool %228 %229
-               OpStore %x_203 %230
-        %231 = OpLoad %bool %x_203
-               OpStore %x_204_phi %231
-               OpBranch %226
-        %226 = OpLabel
-        %232 = OpLoad %bool %x_204_phi
-        %233 = OpLogicalNot %bool %232
-               OpSelectionMerge %234 None
-               OpBranchConditional %233 %235 %234
-        %235 = OpLabel
-               OpReturnValue %int_0
-        %234 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %236
-        %239 = OpLabel
-    %param_6 = OpVariable %_ptr_Function_v2float Function %33
-    %param_7 = OpVariable %_ptr_Function_v2float Function %33
-    %param_8 = OpVariable %_ptr_Function_v2float Function %33
-    %param_9 = OpVariable %_ptr_Function_v2float Function %33
-        %244 = OpLoad %v4float %gl_FragCoord
-        %246 = OpAccessChain %_ptr_Uniform_v2float %x_19 %uint_0
-        %247 = OpLoad %v2float %246
-        %248 = OpCompositeExtract %float %244 0
-        %249 = OpCompositeExtract %float %244 1
-        %250 = OpCompositeConstruct %v2float %248 %249
-        %251 = OpFDiv %v2float %250 %247
-               OpStore %param_6 %251
-               OpStore %param_7 %254
-               OpStore %param_8 %257
-               OpStore %param_9 %260
-        %261 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %266 = OpIEqual %bool %261 %int_1
-               OpSelectionMerge %267 None
-               OpBranchConditional %266 %268 %269
-        %268 = OpLabel
-        %270 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_1
-        %271 = OpLoad %float %270
-        %272 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_0
-        %273 = OpLoad %float %272
-        %274 = OpFOrdGreaterThanEqual %bool %271 %273
-               OpSelectionMerge %275 None
-               OpBranchConditional %274 %276 %275
-        %276 = OpLabel
-               OpStore %x_GLF_color %277
-               OpBranch %275
-        %275 = OpLabel
-               OpBranch %267
-        %269 = OpLabel
-               OpStore %x_GLF_color %278
-               OpBranch %267
-        %267 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %279
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %283 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %284 = OpFunctionCall %void %main_1
-        %285 = OpLoad %v4float %x_GLF_color
-        %286 = OpCompositeConstruct %main_out %285
-               OpReturnValue %286
-               OpFunctionEnd
-       %main = OpFunction %void None %236
-        %288 = OpLabel
-        %290 = OpLoad %v4float %gl_FragCoord_param_1
-        %289 = OpFunctionCall %main_out %main_inner %290
-        %291 = OpCompositeExtract %v4float %289 0
-               OpStore %x_GLF_color_1_1 %291
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.wgsl
deleted file mode 100644
index d62e9db..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,181 +0,0 @@
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_19 : buf0;
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var x_78 : f32;
-  var x_79 : f32;
-  var x_80 : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_147 : bool;
-  var x_203 : bool;
-  var x_148_phi : bool;
-  var x_204_phi : bool;
-  let x_81 : ptr<function, f32> = &((*(p)).x);
-  let x_82 : f32 = *(x_81);
-  let x_83 : ptr<function, f32> = &((*(a)).x);
-  let x_84 : f32 = *(x_83);
-  let x_86 : ptr<function, f32> = &((*(p)).y);
-  let x_87 : f32 = *(x_86);
-  let x_88 : ptr<function, f32> = &((*(a)).y);
-  let x_89 : f32 = *(x_88);
-  let x_92 : ptr<function, f32> = &((*(b)).x);
-  let x_93 : f32 = *(x_92);
-  let x_94 : f32 = *(x_83);
-  let x_96 : ptr<function, f32> = &((*(b)).y);
-  let x_97 : f32 = *(x_96);
-  let x_98 : f32 = *(x_88);
-  param = vec2<f32>((x_82 - x_84), (x_87 - x_89));
-  param_1 = vec2<f32>((x_93 - x_94), (x_97 - x_98));
-  let x_102 : f32 = param.x;
-  let x_104 : f32 = param_1.y;
-  let x_107 : f32 = param_1.x;
-  let x_109 : f32 = param.y;
-  let x_111 : f32 = ((x_102 * x_104) - (x_107 * x_109));
-  x_80 = x_111;
-  let x_112 : f32 = *(x_81);
-  let x_113 : f32 = *(x_92);
-  let x_115 : f32 = *(x_86);
-  let x_116 : f32 = *(x_96);
-  let x_119 : ptr<function, f32> = &((*(c)).x);
-  let x_120 : f32 = *(x_119);
-  let x_121 : f32 = *(x_92);
-  let x_123 : ptr<function, f32> = &((*(c)).y);
-  let x_124 : f32 = *(x_123);
-  let x_125 : f32 = *(x_96);
-  param_2 = vec2<f32>((x_112 - x_113), (x_115 - x_116));
-  param_3 = vec2<f32>((x_120 - x_121), (x_124 - x_125));
-  let x_129 : f32 = param_2.x;
-  let x_131 : f32 = param_3.y;
-  let x_134 : f32 = param_3.x;
-  let x_136 : f32 = param_2.y;
-  let x_138 : f32 = ((x_129 * x_131) - (x_134 * x_136));
-  x_79 = x_138;
-  let x_139 : bool = (x_111 < 0.0);
-  let x_141 : bool = (x_139 & (x_138 < 0.0));
-  x_148_phi = x_141;
-  if (!(x_141)) {
-    x_147 = ((x_111 >= 0.0) & (x_138 >= 0.0));
-    x_148_phi = x_147;
-  }
-  var x_153_phi : i32;
-  let x_148 : bool = x_148_phi;
-  if (!(x_148)) {
-    x_153_phi = 0;
-    loop {
-      var x_154 : i32;
-      var x_164_phi : i32;
-      let x_153 : i32 = x_153_phi;
-      let x_159 : f32 = x_11.injectionSwitch.y;
-      let x_160 : i32 = i32(x_159);
-      if ((x_153 < x_160)) {
-      } else {
-        break;
-      }
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      x_164_phi = 0;
-      loop {
-        var x_165 : i32;
-        let x_164 : i32 = x_164_phi;
-        if ((x_164 < x_160)) {
-        } else {
-          break;
-        }
-        x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-
-        continuing {
-          x_165 = (x_164 + 1);
-          x_164_phi = x_165;
-        }
-      }
-
-      continuing {
-        x_154 = (x_153 + 1);
-        x_153_phi = x_154;
-      }
-    }
-    return 0;
-  }
-  let x_171 : f32 = *(x_81);
-  let x_172 : f32 = *(x_119);
-  let x_174 : f32 = *(x_86);
-  let x_175 : f32 = *(x_123);
-  let x_178 : f32 = *(x_83);
-  let x_179 : f32 = *(x_119);
-  let x_181 : f32 = *(x_88);
-  let x_182 : f32 = *(x_123);
-  param_4 = vec2<f32>((x_171 - x_172), (x_174 - x_175));
-  param_5 = vec2<f32>((x_178 - x_179), (x_181 - x_182));
-  let x_186 : f32 = param_4.x;
-  let x_188 : f32 = param_5.y;
-  let x_191 : f32 = param_5.x;
-  let x_193 : f32 = param_4.y;
-  let x_195 : f32 = ((x_186 * x_188) - (x_191 * x_193));
-  x_78 = x_195;
-  let x_197 : bool = (x_139 & (x_195 < 0.0));
-  x_204_phi = x_197;
-  if (!(x_197)) {
-    x_203 = ((x_111 >= 0.0) & (x_195 >= 0.0));
-    x_204_phi = x_203;
-  }
-  let x_204 : bool = x_204_phi;
-  if (!(x_204)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_60 : vec4<f32> = gl_FragCoord;
-  let x_63 : vec2<f32> = x_19.resolution;
-  param_6 = (vec2<f32>(x_60.x, x_60.y) / x_63);
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_65 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_65 == 1)) {
-    let x_71 : f32 = x_11.injectionSwitch.y;
-    let x_73 : f32 = x_11.injectionSwitch.x;
-    if ((x_71 >= x_73)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.hlsl
deleted file mode 100644
index f9a1fa7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,188 +0,0 @@
-cbuffer cbuffer_x_11 : register(b1, space0) {
-  uint4 x_11[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_19 : register(b0, space0) {
-  uint4 x_19[1];
-};
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(inout float2 p, inout float2 a, inout float2 b, inout float2 c) {
-  float x_78 = 0.0f;
-  float x_79 = 0.0f;
-  float x_80 = 0.0f;
-  float2 param = float2(0.0f, 0.0f);
-  float2 param_1 = float2(0.0f, 0.0f);
-  float2 param_2 = float2(0.0f, 0.0f);
-  float2 param_3 = float2(0.0f, 0.0f);
-  float2 param_4 = float2(0.0f, 0.0f);
-  float2 param_5 = float2(0.0f, 0.0f);
-  bool x_147 = false;
-  bool x_203 = false;
-  bool x_148_phi = false;
-  bool x_204_phi = false;
-  const float x_82 = p.x;
-  const float x_84 = a.x;
-  const float x_87 = p.y;
-  const float x_89 = a.y;
-  const float x_93 = b.x;
-  const float x_94 = a.x;
-  const float x_97 = b.y;
-  const float x_98 = a.y;
-  param = float2((x_82 - x_84), (x_87 - x_89));
-  param_1 = float2((x_93 - x_94), (x_97 - x_98));
-  const float x_102 = param.x;
-  const float x_104 = param_1.y;
-  const float x_107 = param_1.x;
-  const float x_109 = param.y;
-  const float x_111 = ((x_102 * x_104) - (x_107 * x_109));
-  x_80 = x_111;
-  const float x_112 = p.x;
-  const float x_113 = b.x;
-  const float x_115 = p.y;
-  const float x_116 = b.y;
-  const float x_120 = c.x;
-  const float x_121 = b.x;
-  const float x_124 = c.y;
-  const float x_125 = b.y;
-  param_2 = float2((x_112 - x_113), (x_115 - x_116));
-  param_3 = float2((x_120 - x_121), (x_124 - x_125));
-  const float x_129 = param_2.x;
-  const float x_131 = param_3.y;
-  const float x_134 = param_3.x;
-  const float x_136 = param_2.y;
-  const float x_138 = ((x_129 * x_131) - (x_134 * x_136));
-  x_79 = x_138;
-  const bool x_139 = (x_111 < 0.0f);
-  bool tint_tmp = x_139;
-  if (tint_tmp) {
-    tint_tmp = (x_138 < 0.0f);
-  }
-  const bool x_141 = (tint_tmp);
-  x_148_phi = x_141;
-  if (!(x_141)) {
-    bool tint_tmp_1 = (x_111 >= 0.0f);
-    if (tint_tmp_1) {
-      tint_tmp_1 = (x_138 >= 0.0f);
-    }
-    x_147 = (tint_tmp_1);
-    x_148_phi = x_147;
-  }
-  int x_153_phi = 0;
-  if (!(x_148_phi)) {
-    x_153_phi = 0;
-    while (true) {
-      int x_154 = 0;
-      int x_164_phi = 0;
-      const int x_153 = x_153_phi;
-      const float x_159 = asfloat(x_11[0].y);
-      const int x_160 = int(x_159);
-      if ((x_153 < x_160)) {
-      } else {
-        break;
-      }
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      x_164_phi = 0;
-      while (true) {
-        int x_165 = 0;
-        const int x_164 = x_164_phi;
-        if ((x_164 < x_160)) {
-        } else {
-          break;
-        }
-        x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        {
-          x_165 = (x_164 + 1);
-          x_164_phi = x_165;
-        }
-      }
-      {
-        x_154 = (x_153 + 1);
-        x_153_phi = x_154;
-      }
-    }
-    return 0;
-  }
-  const float x_171 = p.x;
-  const float x_172 = c.x;
-  const float x_174 = p.y;
-  const float x_175 = c.y;
-  const float x_178 = a.x;
-  const float x_179 = c.x;
-  const float x_181 = a.y;
-  const float x_182 = c.y;
-  param_4 = float2((x_171 - x_172), (x_174 - x_175));
-  param_5 = float2((x_178 - x_179), (x_181 - x_182));
-  const float x_186 = param_4.x;
-  const float x_188 = param_5.y;
-  const float x_191 = param_5.x;
-  const float x_193 = param_4.y;
-  const float x_195 = ((x_186 * x_188) - (x_191 * x_193));
-  x_78 = x_195;
-  bool tint_tmp_2 = x_139;
-  if (tint_tmp_2) {
-    tint_tmp_2 = (x_195 < 0.0f);
-  }
-  const bool x_197 = (tint_tmp_2);
-  x_204_phi = x_197;
-  if (!(x_197)) {
-    bool tint_tmp_3 = (x_111 >= 0.0f);
-    if (tint_tmp_3) {
-      tint_tmp_3 = (x_195 >= 0.0f);
-    }
-    x_203 = (tint_tmp_3);
-    x_204_phi = x_203;
-  }
-  if (!(x_204_phi)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1() {
-  float2 param_6 = float2(0.0f, 0.0f);
-  float2 param_7 = float2(0.0f, 0.0f);
-  float2 param_8 = float2(0.0f, 0.0f);
-  float2 param_9 = float2(0.0f, 0.0f);
-  const float4 x_60 = gl_FragCoord;
-  const float2 x_63 = asfloat(x_19[0].xy);
-  param_6 = (float2(x_60.x, x_60.y) / x_63);
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  const int x_65 = pointInTriangle_vf2_vf2_vf2_vf2_(param_6, param_7, param_8, param_9);
-  if ((x_65 == 1)) {
-    const float x_71 = asfloat(x_11[0].y);
-    const float x_73 = asfloat(x_11[0].x);
-    if ((x_71 >= x_73)) {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.msl
deleted file mode 100644
index f92452f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.msl
+++ /dev/null
@@ -1,174 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf0 {
-  /* 0x0000 */ float2 resolution;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int pointInTriangle_vf2_vf2_vf2_vf2_(constant buf1& x_11, thread float2* const p, thread float2* const a, thread float2* const b, thread float2* const c, thread float4* const tint_symbol_3) {
-  float x_78 = 0.0f;
-  float x_79 = 0.0f;
-  float x_80 = 0.0f;
-  float2 param = 0.0f;
-  float2 param_1 = 0.0f;
-  float2 param_2 = 0.0f;
-  float2 param_3 = 0.0f;
-  float2 param_4 = 0.0f;
-  float2 param_5 = 0.0f;
-  bool x_147 = false;
-  bool x_203 = false;
-  bool x_148_phi = false;
-  bool x_204_phi = false;
-  float const x_82 = (*(p)).x;
-  float const x_84 = (*(a)).x;
-  float const x_87 = (*(p)).y;
-  float const x_89 = (*(a)).y;
-  float const x_93 = (*(b)).x;
-  float const x_94 = (*(a)).x;
-  float const x_97 = (*(b)).y;
-  float const x_98 = (*(a)).y;
-  param = float2((x_82 - x_84), (x_87 - x_89));
-  param_1 = float2((x_93 - x_94), (x_97 - x_98));
-  float const x_102 = param.x;
-  float const x_104 = param_1.y;
-  float const x_107 = param_1.x;
-  float const x_109 = param.y;
-  float const x_111 = ((x_102 * x_104) - (x_107 * x_109));
-  x_80 = x_111;
-  float const x_112 = (*(p)).x;
-  float const x_113 = (*(b)).x;
-  float const x_115 = (*(p)).y;
-  float const x_116 = (*(b)).y;
-  float const x_120 = (*(c)).x;
-  float const x_121 = (*(b)).x;
-  float const x_124 = (*(c)).y;
-  float const x_125 = (*(b)).y;
-  param_2 = float2((x_112 - x_113), (x_115 - x_116));
-  param_3 = float2((x_120 - x_121), (x_124 - x_125));
-  float const x_129 = param_2.x;
-  float const x_131 = param_3.y;
-  float const x_134 = param_3.x;
-  float const x_136 = param_2.y;
-  float const x_138 = ((x_129 * x_131) - (x_134 * x_136));
-  x_79 = x_138;
-  bool const x_139 = (x_111 < 0.0f);
-  bool const x_141 = (x_139 && (x_138 < 0.0f));
-  x_148_phi = x_141;
-  if (!(x_141)) {
-    x_147 = ((x_111 >= 0.0f) && (x_138 >= 0.0f));
-    x_148_phi = x_147;
-  }
-  int x_153_phi = 0;
-  bool const x_148 = x_148_phi;
-  if (!(x_148)) {
-    x_153_phi = 0;
-    while (true) {
-      int x_154 = 0;
-      int x_164_phi = 0;
-      int const x_153 = x_153_phi;
-      float const x_159 = x_11.injectionSwitch.y;
-      int const x_160 = int(x_159);
-      if ((x_153 < x_160)) {
-      } else {
-        break;
-      }
-      *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-      x_164_phi = 0;
-      while (true) {
-        int x_165 = 0;
-        int const x_164 = x_164_phi;
-        if ((x_164 < x_160)) {
-        } else {
-          break;
-        }
-        *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-        {
-          x_165 = as_type<int>((as_type<uint>(x_164) + as_type<uint>(1)));
-          x_164_phi = x_165;
-        }
-      }
-      {
-        x_154 = as_type<int>((as_type<uint>(x_153) + as_type<uint>(1)));
-        x_153_phi = x_154;
-      }
-    }
-    return 0;
-  }
-  float const x_171 = (*(p)).x;
-  float const x_172 = (*(c)).x;
-  float const x_174 = (*(p)).y;
-  float const x_175 = (*(c)).y;
-  float const x_178 = (*(a)).x;
-  float const x_179 = (*(c)).x;
-  float const x_181 = (*(a)).y;
-  float const x_182 = (*(c)).y;
-  param_4 = float2((x_171 - x_172), (x_174 - x_175));
-  param_5 = float2((x_178 - x_179), (x_181 - x_182));
-  float const x_186 = param_4.x;
-  float const x_188 = param_5.y;
-  float const x_191 = param_5.x;
-  float const x_193 = param_4.y;
-  float const x_195 = ((x_186 * x_188) - (x_191 * x_193));
-  x_78 = x_195;
-  bool const x_197 = (x_139 && (x_195 < 0.0f));
-  x_204_phi = x_197;
-  if (!(x_197)) {
-    x_203 = ((x_111 >= 0.0f) && (x_195 >= 0.0f));
-    x_204_phi = x_203;
-  }
-  bool const x_204 = x_204_phi;
-  if (!(x_204)) {
-    return 0;
-  }
-  return 1;
-}
-
-void main_1(constant buf0& x_19, constant buf1& x_11, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  float2 param_6 = 0.0f;
-  float2 param_7 = 0.0f;
-  float2 param_8 = 0.0f;
-  float2 param_9 = 0.0f;
-  float4 const x_60 = *(tint_symbol_4);
-  float2 const x_63 = x_19.resolution;
-  param_6 = (float2(x_60.x, x_60.y) / x_63);
-  param_7 = float2(0.699999988f, 0.300000012f);
-  param_8 = float2(0.5f, 0.899999976f);
-  param_9 = float2(0.100000001f, 0.400000006f);
-  int const x_65 = pointInTriangle_vf2_vf2_vf2_vf2_(x_11, &(param_6), &(param_7), &(param_8), &(param_9), tint_symbol_5);
-  if ((x_65 == 1)) {
-    float const x_71 = x_11.injectionSwitch.y;
-    float const x_73 = x_11.injectionSwitch.x;
-    if ((x_71 >= x_73)) {
-      *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_19, constant buf1& x_11, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_19, x_11, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_19 [[buffer(0)]], constant buf1& x_11 [[buffer(1)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_19, x_11, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.spvasm
deleted file mode 100644
index e436c77..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,423 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 300
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_11 "x_11"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "resolution"
-               OpName %x_19 "x_19"
-               OpName %pointInTriangle_vf2_vf2_vf2_vf2_ "pointInTriangle_vf2_vf2_vf2_vf2_"
-               OpName %p "p"
-               OpName %a "a"
-               OpName %b "b"
-               OpName %c "c"
-               OpName %x_78 "x_78"
-               OpName %x_79 "x_79"
-               OpName %x_80 "x_80"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %param_4 "param_4"
-               OpName %param_5 "param_5"
-               OpName %x_147 "x_147"
-               OpName %x_203 "x_203"
-               OpName %x_148_phi "x_148_phi"
-               OpName %x_204_phi "x_204_phi"
-               OpName %x_153_phi "x_153_phi"
-               OpName %x_154 "x_154"
-               OpName %x_164_phi "x_164_phi"
-               OpName %x_165 "x_165"
-               OpName %main_1 "main_1"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_11 NonWritable
-               OpDecorate %x_11 DescriptorSet 0
-               OpDecorate %x_11 Binding 1
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_11 = OpVariable %_ptr_Uniform_buf1 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_19 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpTypeFunction %int %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float %_ptr_Function_v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %29 = OpConstantNull %float
-         %33 = OpConstantNull %v2float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-%_ptr_Function_int = OpTypePointer Function %int
-        %148 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-        %170 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-        %244 = OpTypeFunction %void
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-%float_0_699999988 = OpConstant %float 0.699999988
-%float_0_300000012 = OpConstant %float 0.300000012
-        %262 = OpConstantComposite %v2float %float_0_699999988 %float_0_300000012
-  %float_0_5 = OpConstant %float 0.5
-%float_0_899999976 = OpConstant %float 0.899999976
-        %265 = OpConstantComposite %v2float %float_0_5 %float_0_899999976
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_0_400000006 = OpConstant %float 0.400000006
-        %268 = OpConstantComposite %v2float %float_0_100000001 %float_0_400000006
-        %285 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %286 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %287 = OpTypeFunction %main_out %v4float
-%pointInTriangle_vf2_vf2_vf2_vf2_ = OpFunction %int None %18
-          %p = OpFunctionParameter %_ptr_Function_v2float
-          %a = OpFunctionParameter %_ptr_Function_v2float
-          %b = OpFunctionParameter %_ptr_Function_v2float
-          %c = OpFunctionParameter %_ptr_Function_v2float
-         %26 = OpLabel
-       %x_78 = OpVariable %_ptr_Function_float Function %29
-       %x_79 = OpVariable %_ptr_Function_float Function %29
-       %x_80 = OpVariable %_ptr_Function_float Function %29
-      %param = OpVariable %_ptr_Function_v2float Function %33
-    %param_1 = OpVariable %_ptr_Function_v2float Function %33
-    %param_2 = OpVariable %_ptr_Function_v2float Function %33
-    %param_3 = OpVariable %_ptr_Function_v2float Function %33
-    %param_4 = OpVariable %_ptr_Function_v2float Function %33
-    %param_5 = OpVariable %_ptr_Function_v2float Function %33
-      %x_147 = OpVariable %_ptr_Function_bool Function %42
-      %x_203 = OpVariable %_ptr_Function_bool Function %42
-  %x_148_phi = OpVariable %_ptr_Function_bool Function %42
-  %x_204_phi = OpVariable %_ptr_Function_bool Function %42
-  %x_153_phi = OpVariable %_ptr_Function_int Function %148
-      %x_154 = OpVariable %_ptr_Function_int Function %148
-  %x_164_phi = OpVariable %_ptr_Function_int Function %148
-      %x_165 = OpVariable %_ptr_Function_int Function %148
-         %49 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %50 = OpLoad %float %49
-         %52 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %53 = OpLoad %float %52
-         %56 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %57 = OpLoad %float %56
-         %59 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %60 = OpLoad %float %59
-         %62 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %63 = OpLoad %float %62
-         %65 = OpAccessChain %_ptr_Function_float %a %uint_0
-         %66 = OpLoad %float %65
-         %68 = OpAccessChain %_ptr_Function_float %b %uint_1
-         %69 = OpLoad %float %68
-         %71 = OpAccessChain %_ptr_Function_float %a %uint_1
-         %72 = OpLoad %float %71
-         %73 = OpFSub %float %50 %53
-         %74 = OpFSub %float %57 %60
-         %75 = OpCompositeConstruct %v2float %73 %74
-               OpStore %param %75
-         %76 = OpFSub %float %63 %66
-         %77 = OpFSub %float %69 %72
-         %78 = OpCompositeConstruct %v2float %76 %77
-               OpStore %param_1 %78
-         %79 = OpAccessChain %_ptr_Function_float %param %uint_0
-         %80 = OpLoad %float %79
-         %81 = OpAccessChain %_ptr_Function_float %param_1 %uint_1
-         %82 = OpLoad %float %81
-         %83 = OpAccessChain %_ptr_Function_float %param_1 %uint_0
-         %84 = OpLoad %float %83
-         %85 = OpAccessChain %_ptr_Function_float %param %uint_1
-         %86 = OpLoad %float %85
-         %87 = OpFMul %float %80 %82
-         %88 = OpFMul %float %84 %86
-         %89 = OpFSub %float %87 %88
-               OpStore %x_80 %89
-         %91 = OpAccessChain %_ptr_Function_float %p %uint_0
-         %92 = OpLoad %float %91
-         %94 = OpAccessChain %_ptr_Function_float %b %uint_0
-         %95 = OpLoad %float %94
-         %97 = OpAccessChain %_ptr_Function_float %p %uint_1
-         %98 = OpLoad %float %97
-        %100 = OpAccessChain %_ptr_Function_float %b %uint_1
-        %101 = OpLoad %float %100
-        %103 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %104 = OpLoad %float %103
-        %106 = OpAccessChain %_ptr_Function_float %b %uint_0
-        %107 = OpLoad %float %106
-        %109 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %110 = OpLoad %float %109
-        %112 = OpAccessChain %_ptr_Function_float %b %uint_1
-        %113 = OpLoad %float %112
-        %114 = OpFSub %float %92 %95
-        %115 = OpFSub %float %98 %101
-        %116 = OpCompositeConstruct %v2float %114 %115
-               OpStore %param_2 %116
-        %117 = OpFSub %float %104 %107
-        %118 = OpFSub %float %110 %113
-        %119 = OpCompositeConstruct %v2float %117 %118
-               OpStore %param_3 %119
-        %120 = OpAccessChain %_ptr_Function_float %param_2 %uint_0
-        %121 = OpLoad %float %120
-        %122 = OpAccessChain %_ptr_Function_float %param_3 %uint_1
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Function_float %param_3 %uint_0
-        %125 = OpLoad %float %124
-        %126 = OpAccessChain %_ptr_Function_float %param_2 %uint_1
-        %127 = OpLoad %float %126
-        %128 = OpFMul %float %121 %123
-        %129 = OpFMul %float %125 %127
-        %130 = OpFSub %float %128 %129
-               OpStore %x_79 %130
-        %132 = OpFOrdLessThan %bool %89 %float_0
-               OpSelectionMerge %133 None
-               OpBranchConditional %132 %134 %133
-        %134 = OpLabel
-        %135 = OpFOrdLessThan %bool %130 %float_0
-               OpBranch %133
-        %133 = OpLabel
-        %136 = OpPhi %bool %132 %26 %135 %134
-               OpStore %x_148_phi %136
-        %137 = OpLogicalNot %bool %136
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %138
-        %139 = OpLabel
-        %140 = OpFOrdGreaterThanEqual %bool %89 %float_0
-               OpSelectionMerge %141 None
-               OpBranchConditional %140 %142 %141
-        %142 = OpLabel
-        %143 = OpFOrdGreaterThanEqual %bool %130 %float_0
-               OpBranch %141
-        %141 = OpLabel
-        %144 = OpPhi %bool %140 %139 %143 %142
-               OpStore %x_147 %144
-        %145 = OpLoad %bool %x_147
-               OpStore %x_148_phi %145
-               OpBranch %138
-        %138 = OpLabel
-        %149 = OpLoad %bool %x_148_phi
-        %150 = OpLogicalNot %bool %149
-               OpSelectionMerge %151 None
-               OpBranchConditional %150 %152 %151
-        %152 = OpLabel
-               OpStore %x_153_phi %int_0
-               OpBranch %154
-        %154 = OpLabel
-               OpLoopMerge %155 %156 None
-               OpBranch %157
-        %157 = OpLabel
-        %160 = OpLoad %int %x_153_phi
-        %162 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_1
-        %163 = OpLoad %float %162
-        %164 = OpConvertFToS %int %163
-        %165 = OpSLessThan %bool %160 %164
-               OpSelectionMerge %166 None
-               OpBranchConditional %165 %167 %168
-        %167 = OpLabel
-               OpBranch %166
-        %168 = OpLabel
-               OpBranch %155
-        %166 = OpLabel
-               OpStore %x_GLF_color %170
-               OpStore %x_164_phi %int_0
-               OpBranch %171
-        %171 = OpLabel
-               OpLoopMerge %172 %173 None
-               OpBranch %174
-        %174 = OpLabel
-        %176 = OpLoad %int %x_164_phi
-        %177 = OpSLessThan %bool %176 %164
-               OpSelectionMerge %178 None
-               OpBranchConditional %177 %179 %180
-        %179 = OpLabel
-               OpBranch %178
-        %180 = OpLabel
-               OpBranch %172
-        %178 = OpLabel
-               OpStore %x_GLF_color %170
-               OpBranch %173
-        %173 = OpLabel
-        %182 = OpIAdd %int %176 %int_1
-               OpStore %x_165 %182
-        %183 = OpLoad %int %x_165
-               OpStore %x_164_phi %183
-               OpBranch %171
-        %172 = OpLabel
-               OpBranch %156
-        %156 = OpLabel
-        %184 = OpIAdd %int %160 %int_1
-               OpStore %x_154 %184
-        %185 = OpLoad %int %x_154
-               OpStore %x_153_phi %185
-               OpBranch %154
-        %155 = OpLabel
-               OpReturnValue %int_0
-        %151 = OpLabel
-        %187 = OpAccessChain %_ptr_Function_float %p %uint_0
-        %188 = OpLoad %float %187
-        %190 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %191 = OpLoad %float %190
-        %193 = OpAccessChain %_ptr_Function_float %p %uint_1
-        %194 = OpLoad %float %193
-        %196 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %197 = OpLoad %float %196
-        %199 = OpAccessChain %_ptr_Function_float %a %uint_0
-        %200 = OpLoad %float %199
-        %202 = OpAccessChain %_ptr_Function_float %c %uint_0
-        %203 = OpLoad %float %202
-        %205 = OpAccessChain %_ptr_Function_float %a %uint_1
-        %206 = OpLoad %float %205
-        %208 = OpAccessChain %_ptr_Function_float %c %uint_1
-        %209 = OpLoad %float %208
-        %210 = OpFSub %float %188 %191
-        %211 = OpFSub %float %194 %197
-        %212 = OpCompositeConstruct %v2float %210 %211
-               OpStore %param_4 %212
-        %213 = OpFSub %float %200 %203
-        %214 = OpFSub %float %206 %209
-        %215 = OpCompositeConstruct %v2float %213 %214
-               OpStore %param_5 %215
-        %216 = OpAccessChain %_ptr_Function_float %param_4 %uint_0
-        %217 = OpLoad %float %216
-        %218 = OpAccessChain %_ptr_Function_float %param_5 %uint_1
-        %219 = OpLoad %float %218
-        %220 = OpAccessChain %_ptr_Function_float %param_5 %uint_0
-        %221 = OpLoad %float %220
-        %222 = OpAccessChain %_ptr_Function_float %param_4 %uint_1
-        %223 = OpLoad %float %222
-        %224 = OpFMul %float %217 %219
-        %225 = OpFMul %float %221 %223
-        %226 = OpFSub %float %224 %225
-               OpStore %x_78 %226
-               OpSelectionMerge %227 None
-               OpBranchConditional %132 %228 %227
-        %228 = OpLabel
-        %229 = OpFOrdLessThan %bool %226 %float_0
-               OpBranch %227
-        %227 = OpLabel
-        %230 = OpPhi %bool %132 %151 %229 %228
-               OpStore %x_204_phi %230
-        %231 = OpLogicalNot %bool %230
-               OpSelectionMerge %232 None
-               OpBranchConditional %231 %233 %232
-        %233 = OpLabel
-        %234 = OpFOrdGreaterThanEqual %bool %89 %float_0
-               OpSelectionMerge %235 None
-               OpBranchConditional %234 %236 %235
-        %236 = OpLabel
-        %237 = OpFOrdGreaterThanEqual %bool %226 %float_0
-               OpBranch %235
-        %235 = OpLabel
-        %238 = OpPhi %bool %234 %233 %237 %236
-               OpStore %x_203 %238
-        %239 = OpLoad %bool %x_203
-               OpStore %x_204_phi %239
-               OpBranch %232
-        %232 = OpLabel
-        %240 = OpLoad %bool %x_204_phi
-        %241 = OpLogicalNot %bool %240
-               OpSelectionMerge %242 None
-               OpBranchConditional %241 %243 %242
-        %243 = OpLabel
-               OpReturnValue %int_0
-        %242 = OpLabel
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %244
-        %247 = OpLabel
-    %param_6 = OpVariable %_ptr_Function_v2float Function %33
-    %param_7 = OpVariable %_ptr_Function_v2float Function %33
-    %param_8 = OpVariable %_ptr_Function_v2float Function %33
-    %param_9 = OpVariable %_ptr_Function_v2float Function %33
-        %252 = OpLoad %v4float %gl_FragCoord
-        %254 = OpAccessChain %_ptr_Uniform_v2float %x_19 %uint_0
-        %255 = OpLoad %v2float %254
-        %256 = OpCompositeExtract %float %252 0
-        %257 = OpCompositeExtract %float %252 1
-        %258 = OpCompositeConstruct %v2float %256 %257
-        %259 = OpFDiv %v2float %258 %255
-               OpStore %param_6 %259
-               OpStore %param_7 %262
-               OpStore %param_8 %265
-               OpStore %param_9 %268
-        %269 = OpFunctionCall %int %pointInTriangle_vf2_vf2_vf2_vf2_ %param_6 %param_7 %param_8 %param_9
-        %274 = OpIEqual %bool %269 %int_1
-               OpSelectionMerge %275 None
-               OpBranchConditional %274 %276 %277
-        %276 = OpLabel
-        %278 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_1
-        %279 = OpLoad %float %278
-        %280 = OpAccessChain %_ptr_Uniform_float %x_11 %uint_0 %uint_0
-        %281 = OpLoad %float %280
-        %282 = OpFOrdGreaterThanEqual %bool %279 %281
-               OpSelectionMerge %283 None
-               OpBranchConditional %282 %284 %283
-        %284 = OpLabel
-               OpStore %x_GLF_color %285
-               OpBranch %283
-        %283 = OpLabel
-               OpBranch %275
-        %277 = OpLabel
-               OpStore %x_GLF_color %286
-               OpBranch %275
-        %275 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %287
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %291 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %292 = OpFunctionCall %void %main_1
-        %293 = OpLoad %v4float %x_GLF_color
-        %294 = OpCompositeConstruct %main_out %293
-               OpReturnValue %294
-               OpFunctionEnd
-       %main = OpFunction %void None %244
-        %296 = OpLabel
-        %298 = OpLoad %v4float %gl_FragCoord_param_1
-        %297 = OpFunctionCall %main_out %main_inner %298
-        %299 = OpCompositeExtract %v4float %297 0
-               OpStore %x_GLF_color_1_1 %299
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.wgsl
deleted file mode 100644
index c9e248c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-triangle-nested-for-loop-and-true-if/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,181 +0,0 @@
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf0 {
-  resolution : vec2<f32>;
-};
-
-[[group(0), binding(1)]] var<uniform> x_11 : buf1;
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_19 : buf0;
-
-fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
-  var x_78 : f32;
-  var x_79 : f32;
-  var x_80 : f32;
-  var param : vec2<f32>;
-  var param_1 : vec2<f32>;
-  var param_2 : vec2<f32>;
-  var param_3 : vec2<f32>;
-  var param_4 : vec2<f32>;
-  var param_5 : vec2<f32>;
-  var x_147 : bool;
-  var x_203 : bool;
-  var x_148_phi : bool;
-  var x_204_phi : bool;
-  let x_81 : ptr<function, f32> = &((*(p)).x);
-  let x_82 : f32 = *(x_81);
-  let x_83 : ptr<function, f32> = &((*(a)).x);
-  let x_84 : f32 = *(x_83);
-  let x_86 : ptr<function, f32> = &((*(p)).y);
-  let x_87 : f32 = *(x_86);
-  let x_88 : ptr<function, f32> = &((*(a)).y);
-  let x_89 : f32 = *(x_88);
-  let x_92 : ptr<function, f32> = &((*(b)).x);
-  let x_93 : f32 = *(x_92);
-  let x_94 : f32 = *(x_83);
-  let x_96 : ptr<function, f32> = &((*(b)).y);
-  let x_97 : f32 = *(x_96);
-  let x_98 : f32 = *(x_88);
-  param = vec2<f32>((x_82 - x_84), (x_87 - x_89));
-  param_1 = vec2<f32>((x_93 - x_94), (x_97 - x_98));
-  let x_102 : f32 = param.x;
-  let x_104 : f32 = param_1.y;
-  let x_107 : f32 = param_1.x;
-  let x_109 : f32 = param.y;
-  let x_111 : f32 = ((x_102 * x_104) - (x_107 * x_109));
-  x_80 = x_111;
-  let x_112 : f32 = *(x_81);
-  let x_113 : f32 = *(x_92);
-  let x_115 : f32 = *(x_86);
-  let x_116 : f32 = *(x_96);
-  let x_119 : ptr<function, f32> = &((*(c)).x);
-  let x_120 : f32 = *(x_119);
-  let x_121 : f32 = *(x_92);
-  let x_123 : ptr<function, f32> = &((*(c)).y);
-  let x_124 : f32 = *(x_123);
-  let x_125 : f32 = *(x_96);
-  param_2 = vec2<f32>((x_112 - x_113), (x_115 - x_116));
-  param_3 = vec2<f32>((x_120 - x_121), (x_124 - x_125));
-  let x_129 : f32 = param_2.x;
-  let x_131 : f32 = param_3.y;
-  let x_134 : f32 = param_3.x;
-  let x_136 : f32 = param_2.y;
-  let x_138 : f32 = ((x_129 * x_131) - (x_134 * x_136));
-  x_79 = x_138;
-  let x_139 : bool = (x_111 < 0.0);
-  let x_141 : bool = (x_139 && (x_138 < 0.0));
-  x_148_phi = x_141;
-  if (!(x_141)) {
-    x_147 = ((x_111 >= 0.0) && (x_138 >= 0.0));
-    x_148_phi = x_147;
-  }
-  var x_153_phi : i32;
-  let x_148 : bool = x_148_phi;
-  if (!(x_148)) {
-    x_153_phi = 0;
-    loop {
-      var x_154 : i32;
-      var x_164_phi : i32;
-      let x_153 : i32 = x_153_phi;
-      let x_159 : f32 = x_11.injectionSwitch.y;
-      let x_160 : i32 = i32(x_159);
-      if ((x_153 < x_160)) {
-      } else {
-        break;
-      }
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-      x_164_phi = 0;
-      loop {
-        var x_165 : i32;
-        let x_164 : i32 = x_164_phi;
-        if ((x_164 < x_160)) {
-        } else {
-          break;
-        }
-        x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-
-        continuing {
-          x_165 = (x_164 + 1);
-          x_164_phi = x_165;
-        }
-      }
-
-      continuing {
-        x_154 = (x_153 + 1);
-        x_153_phi = x_154;
-      }
-    }
-    return 0;
-  }
-  let x_171 : f32 = *(x_81);
-  let x_172 : f32 = *(x_119);
-  let x_174 : f32 = *(x_86);
-  let x_175 : f32 = *(x_123);
-  let x_178 : f32 = *(x_83);
-  let x_179 : f32 = *(x_119);
-  let x_181 : f32 = *(x_88);
-  let x_182 : f32 = *(x_123);
-  param_4 = vec2<f32>((x_171 - x_172), (x_174 - x_175));
-  param_5 = vec2<f32>((x_178 - x_179), (x_181 - x_182));
-  let x_186 : f32 = param_4.x;
-  let x_188 : f32 = param_5.y;
-  let x_191 : f32 = param_5.x;
-  let x_193 : f32 = param_4.y;
-  let x_195 : f32 = ((x_186 * x_188) - (x_191 * x_193));
-  x_78 = x_195;
-  let x_197 : bool = (x_139 && (x_195 < 0.0));
-  x_204_phi = x_197;
-  if (!(x_197)) {
-    x_203 = ((x_111 >= 0.0) && (x_195 >= 0.0));
-    x_204_phi = x_203;
-  }
-  let x_204 : bool = x_204_phi;
-  if (!(x_204)) {
-    return 0;
-  }
-  return 1;
-}
-
-fn main_1() {
-  var param_6 : vec2<f32>;
-  var param_7 : vec2<f32>;
-  var param_8 : vec2<f32>;
-  var param_9 : vec2<f32>;
-  let x_60 : vec4<f32> = gl_FragCoord;
-  let x_63 : vec2<f32> = x_19.resolution;
-  param_6 = (vec2<f32>(x_60.x, x_60.y) / x_63);
-  param_7 = vec2<f32>(0.699999988, 0.300000012);
-  param_8 = vec2<f32>(0.5, 0.899999976);
-  param_9 = vec2<f32>(0.100000001, 0.400000006);
-  let x_65 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
-  if ((x_65 == 1)) {
-    let x_71 : f32 = x_11.injectionSwitch.y;
-    let x_73 : f32 = x_11.injectionSwitch.x;
-    if ((x_71 >= x_73)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.hlsl
deleted file mode 100644
index 3fcb795..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_(inout BST tree) {
-  tree.rightIndex = 1;
-  return;
-}
-
-void main_1() {
-  BST tree_1[10] = (BST[10])0;
-  BST param = (BST)0;
-  param = tree_1[0u];
-  makeTreeNode_struct_BST_i1_i1_i11_(param);
-  const BST x_40 = param;
-  BST x_42_1[10] = tree_1;
-  x_42_1[0u] = x_40;
-  tree_1 = x_42_1;
-  if ((tree_1[0u].rightIndex == 0)) {
-    while (true) {
-    }
-    return;
-  }
-  x_GLF_color = float4(float(tree_1[0u].rightIndex), 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.msl
deleted file mode 100644
index 6631485..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_(thread BST* const tree) {
-  (*(tree)).rightIndex = 1;
-  return;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  tint_array_wrapper tree_1 = {};
-  BST param = {};
-  tint_array_wrapper const x_37 = tree_1;
-  param = x_37.arr[0u];
-  makeTreeNode_struct_BST_i1_i1_i11_(&(param));
-  BST const x_40 = param;
-  tint_array_wrapper const x_41 = tree_1;
-  tint_array_wrapper x_42_1 = x_41;
-  x_42_1.arr[0u] = x_40;
-  tint_array_wrapper const x_42 = x_42_1;
-  tree_1 = x_42;
-  tint_array_wrapper const x_11 = tree_1;
-  if ((x_11.arr[0u].rightIndex == 0)) {
-    while (true) {
-    }
-    return;
-  }
-  tint_array_wrapper const x_12 = tree_1;
-  *(tint_symbol_3) = float4(float(x_12.arr[0u].rightIndex), 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index bbbae28..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_ "makeTreeNode_struct_BST_i1_i1_i11_"
-               OpName %tree "tree"
-               OpName %main_1 "main_1"
-               OpName %tree_1 "tree_1"
-               OpName %param "param"
-               OpName %x_42_1 "x_42_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-%_ptr_Function_BST = OpTypePointer Function %BST
-          %8 = OpTypeFunction %void %_ptr_Function_BST
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-         %22 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Function__arr_BST_uint_10 = OpTypePointer Function %_arr_BST_uint_10
-         %29 = OpConstantNull %_arr_BST_uint_10
-         %31 = OpConstantNull %BST
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %61 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_ = OpFunction %void None %8
-       %tree = OpFunctionParameter %_ptr_Function_BST
-         %15 = OpLabel
-         %20 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %20 %int_1
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %22
-         %24 = OpLabel
-     %tree_1 = OpVariable %_ptr_Function__arr_BST_uint_10 Function %29
-      %param = OpVariable %_ptr_Function_BST Function %31
-     %x_42_1 = OpVariable %_ptr_Function__arr_BST_uint_10 Function %29
-         %32 = OpLoad %_arr_BST_uint_10 %tree_1
-         %34 = OpCompositeExtract %BST %32 0
-               OpStore %param %34
-         %35 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_ %param
-         %37 = OpLoad %BST %param
-         %38 = OpLoad %_arr_BST_uint_10 %tree_1
-               OpStore %x_42_1 %38
-         %40 = OpAccessChain %_ptr_Function_BST %x_42_1 %uint_0
-               OpStore %40 %37
-         %41 = OpLoad %_arr_BST_uint_10 %x_42_1
-               OpStore %tree_1 %41
-         %42 = OpLoad %_arr_BST_uint_10 %tree_1
-         %43 = OpCompositeExtract %BST %42 0
-         %44 = OpCompositeExtract %int %43 2
-         %46 = OpIEqual %bool %44 %int_0
-               OpSelectionMerge %48 None
-               OpBranchConditional %46 %49 %48
-         %49 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-               OpLoopMerge %51 %52 None
-               OpBranch %53
-         %53 = OpLabel
-               OpBranch %52
-         %52 = OpLabel
-               OpBranch %50
-         %51 = OpLabel
-               OpReturn
-         %48 = OpLabel
-         %54 = OpLoad %_arr_BST_uint_10 %tree_1
-         %56 = OpCompositeExtract %BST %54 0
-         %57 = OpCompositeExtract %int %56 2
-         %55 = OpConvertSToF %float %57
-         %60 = OpCompositeConstruct %v4float %55 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %60
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %61
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-         %66 = OpLoad %v4float %x_GLF_color
-         %67 = OpCompositeConstruct %main_out %66
-               OpReturnValue %67
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %69 = OpLabel
-         %70 = OpFunctionCall %main_out %main_inner
-         %71 = OpCompositeExtract %v4float %70 0
-               OpStore %x_GLF_color_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index 974581d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,47 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_(tree : ptr<function, BST>) {
-  (*(tree)).rightIndex = 1;
-  return;
-}
-
-fn main_1() {
-  var tree_1 : array<BST, 10>;
-  var param : BST;
-  let x_37 : array<BST, 10> = tree_1;
-  param = x_37[0u];
-  makeTreeNode_struct_BST_i1_i1_i11_(&(param));
-  let x_40 : BST = param;
-  let x_41 : array<BST, 10> = tree_1;
-  var x_42_1 : array<BST, 10> = x_41;
-  x_42_1[0u] = x_40;
-  let x_42 : array<BST, 10> = x_42_1;
-  tree_1 = x_42;
-  let x_43 : ptr<function, i32> = &(tree_1[0].rightIndex);
-  let x_11 : array<BST, 10> = tree_1;
-  if ((x_11[0u].rightIndex == 0)) {
-    loop {
-    }
-    return;
-  }
-  let x_12 : array<BST, 10> = tree_1;
-  x_GLF_color = vec4<f32>(f32(x_12[0u].rightIndex), 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.hlsl
deleted file mode 100644
index 3fcb795..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_(inout BST tree) {
-  tree.rightIndex = 1;
-  return;
-}
-
-void main_1() {
-  BST tree_1[10] = (BST[10])0;
-  BST param = (BST)0;
-  param = tree_1[0u];
-  makeTreeNode_struct_BST_i1_i1_i11_(param);
-  const BST x_40 = param;
-  BST x_42_1[10] = tree_1;
-  x_42_1[0u] = x_40;
-  tree_1 = x_42_1;
-  if ((tree_1[0u].rightIndex == 0)) {
-    while (true) {
-    }
-    return;
-  }
-  x_GLF_color = float4(float(tree_1[0u].rightIndex), 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.msl
deleted file mode 100644
index 6631485..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct tint_array_wrapper {
-  BST arr[10];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_(thread BST* const tree) {
-  (*(tree)).rightIndex = 1;
-  return;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  tint_array_wrapper tree_1 = {};
-  BST param = {};
-  tint_array_wrapper const x_37 = tree_1;
-  param = x_37.arr[0u];
-  makeTreeNode_struct_BST_i1_i1_i11_(&(param));
-  BST const x_40 = param;
-  tint_array_wrapper const x_41 = tree_1;
-  tint_array_wrapper x_42_1 = x_41;
-  x_42_1.arr[0u] = x_40;
-  tint_array_wrapper const x_42 = x_42_1;
-  tree_1 = x_42;
-  tint_array_wrapper const x_11 = tree_1;
-  if ((x_11.arr[0u].rightIndex == 0)) {
-    while (true) {
-    }
-    return;
-  }
-  tint_array_wrapper const x_12 = tree_1;
-  *(tint_symbol_3) = float4(float(x_12.arr[0u].rightIndex), 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index bbbae28..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,123 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_ "makeTreeNode_struct_BST_i1_i1_i11_"
-               OpName %tree "tree"
-               OpName %main_1 "main_1"
-               OpName %tree_1 "tree_1"
-               OpName %param "param"
-               OpName %x_42_1 "x_42_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-%_ptr_Function_BST = OpTypePointer Function %BST
-          %8 = OpTypeFunction %void %_ptr_Function_BST
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-         %22 = OpTypeFunction %void
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Function__arr_BST_uint_10 = OpTypePointer Function %_arr_BST_uint_10
-         %29 = OpConstantNull %_arr_BST_uint_10
-         %31 = OpConstantNull %BST
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %61 = OpTypeFunction %main_out
-%makeTreeNode_struct_BST_i1_i1_i11_ = OpFunction %void None %8
-       %tree = OpFunctionParameter %_ptr_Function_BST
-         %15 = OpLabel
-         %20 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %20 %int_1
-               OpReturn
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %22
-         %24 = OpLabel
-     %tree_1 = OpVariable %_ptr_Function__arr_BST_uint_10 Function %29
-      %param = OpVariable %_ptr_Function_BST Function %31
-     %x_42_1 = OpVariable %_ptr_Function__arr_BST_uint_10 Function %29
-         %32 = OpLoad %_arr_BST_uint_10 %tree_1
-         %34 = OpCompositeExtract %BST %32 0
-               OpStore %param %34
-         %35 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_ %param
-         %37 = OpLoad %BST %param
-         %38 = OpLoad %_arr_BST_uint_10 %tree_1
-               OpStore %x_42_1 %38
-         %40 = OpAccessChain %_ptr_Function_BST %x_42_1 %uint_0
-               OpStore %40 %37
-         %41 = OpLoad %_arr_BST_uint_10 %x_42_1
-               OpStore %tree_1 %41
-         %42 = OpLoad %_arr_BST_uint_10 %tree_1
-         %43 = OpCompositeExtract %BST %42 0
-         %44 = OpCompositeExtract %int %43 2
-         %46 = OpIEqual %bool %44 %int_0
-               OpSelectionMerge %48 None
-               OpBranchConditional %46 %49 %48
-         %49 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-               OpLoopMerge %51 %52 None
-               OpBranch %53
-         %53 = OpLabel
-               OpBranch %52
-         %52 = OpLabel
-               OpBranch %50
-         %51 = OpLabel
-               OpReturn
-         %48 = OpLabel
-         %54 = OpLoad %_arr_BST_uint_10 %tree_1
-         %56 = OpCompositeExtract %BST %54 0
-         %57 = OpCompositeExtract %int %56 2
-         %55 = OpConvertSToF %float %57
-         %60 = OpCompositeConstruct %v4float %55 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %60
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %61
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-         %66 = OpLoad %v4float %x_GLF_color
-         %67 = OpCompositeConstruct %main_out %66
-               OpReturnValue %67
-               OpFunctionEnd
-       %main = OpFunction %void None %22
-         %69 = OpLabel
-         %70 = OpFunctionCall %main_out %main_inner
-         %71 = OpCompositeExtract %v4float %70 0
-               OpStore %x_GLF_color_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index 974581d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-and-unreachable-infinite-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,47 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_(tree : ptr<function, BST>) {
-  (*(tree)).rightIndex = 1;
-  return;
-}
-
-fn main_1() {
-  var tree_1 : array<BST, 10>;
-  var param : BST;
-  let x_37 : array<BST, 10> = tree_1;
-  param = x_37[0u];
-  makeTreeNode_struct_BST_i1_i1_i11_(&(param));
-  let x_40 : BST = param;
-  let x_41 : array<BST, 10> = tree_1;
-  var x_42_1 : array<BST, 10> = x_41;
-  x_42_1[0u] = x_40;
-  let x_42 : array<BST, 10> = x_42_1;
-  tree_1 = x_42;
-  let x_43 : ptr<function, i32> = &(tree_1[0].rightIndex);
-  let x_11 : array<BST, 10> = tree_1;
-  if ((x_11[0u].rightIndex == 0)) {
-    loop {
-    }
-    return;
-  }
-  let x_12 : array<BST, 10> = tree_1;
-  x_GLF_color = vec4<f32>(f32(x_12[0u].rightIndex), 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.hlsl
deleted file mode 100644
index c7913b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-struct struct_base {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static struct_base struct_array[3] = (struct_base[3])0;
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int index = 0;
-  const struct_base tint_symbol_2 = {1, 1, 1};
-  const struct_base tint_symbol_3 = {1, 1, 1};
-  const struct_base tint_symbol_4 = {1, 1, 1};
-  const struct_base tint_symbol_5[3] = {tint_symbol_2, tint_symbol_3, tint_symbol_4};
-  struct_array = tint_symbol_5;
-  index = 1;
-  struct_array[1].rightIndex = 1;
-  const int x_39 = struct_array[1].leftIndex;
-  if ((x_39 == 1)) {
-    const float x_45 = asfloat(x_8[0].x);
-    const int x_48 = struct_array[int(x_45)].rightIndex;
-    index = x_48;
-  } else {
-    const float x_50 = asfloat(x_8[0].y);
-    const int x_53 = struct_array[int(x_50)].leftIndex;
-    index = x_53;
-  }
-  const int x_55 = struct_array[1].leftIndex;
-  if ((x_55 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.msl
deleted file mode 100644
index 3d50855..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct struct_base {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  struct_base arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int index = 0;
-  struct_base const tint_symbol_2 = {.data=1, .leftIndex=1, .rightIndex=1};
-  struct_base const tint_symbol_3 = {.data=1, .leftIndex=1, .rightIndex=1};
-  struct_base const tint_symbol_4 = {.data=1, .leftIndex=1, .rightIndex=1};
-  tint_array_wrapper const tint_symbol_5 = {.arr={tint_symbol_2, tint_symbol_3, tint_symbol_4}};
-  *(tint_symbol_7) = tint_symbol_5;
-  index = 1;
-  (*(tint_symbol_7)).arr[1].rightIndex = 1;
-  int const x_39 = (*(tint_symbol_7)).arr[1].leftIndex;
-  if ((x_39 == 1)) {
-    float const x_45 = x_8.injectionSwitch.x;
-    int const x_48 = (*(tint_symbol_7)).arr[int(x_45)].rightIndex;
-    index = x_48;
-  } else {
-    float const x_50 = x_8.injectionSwitch.y;
-    int const x_53 = (*(tint_symbol_7)).arr[int(x_50)].leftIndex;
-    index = x_53;
-  }
-  int const x_55 = (*(tint_symbol_7)).arr[1].leftIndex;
-  if ((x_55 == 1)) {
-    *(tint_symbol_8) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_8) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  main_1(x_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread tint_array_wrapper tint_symbol_11 = {};
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.spvasm
deleted file mode 100644
index 63de97c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,131 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 74
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %struct_base "struct_base"
-               OpMemberName %struct_base 0 "data"
-               OpMemberName %struct_base 1 "leftIndex"
-               OpMemberName %struct_base 2 "rightIndex"
-               OpName %struct_array "struct_array"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %index "index"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %struct_base 0 Offset 0
-               OpMemberDecorate %struct_base 1 Offset 4
-               OpMemberDecorate %struct_base 2 Offset 8
-               OpDecorate %_arr_struct_base_uint_3 ArrayStride 12
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%struct_base = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_struct_base_uint_3 = OpTypeArray %struct_base %uint_3
-%_ptr_Private__arr_struct_base_uint_3 = OpTypePointer Private %_arr_struct_base_uint_3
-         %13 = OpConstantNull %_arr_struct_base_uint_3
-%struct_array = OpVariable %_ptr_Private__arr_struct_base_uint_3 Private %13
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-         %28 = OpConstantComposite %struct_base %int_1 %int_1 %int_1
-         %29 = OpConstantComposite %_arr_struct_base_uint_3 %28 %28 %28
-     %uint_2 = OpConstant %uint 2
-%_ptr_Private_int = OpTypePointer Private %int
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %61 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %62 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %63 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %26
-               OpStore %struct_array %29
-               OpStore %index %int_1
-         %32 = OpAccessChain %_ptr_Private_int %struct_array %int_1 %uint_2
-               OpStore %32 %int_1
-         %34 = OpAccessChain %_ptr_Private_int %struct_array %int_1 %uint_1
-         %35 = OpLoad %int %34
-         %36 = OpIEqual %bool %35 %int_1
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %44 = OpLoad %float %43
-         %45 = OpConvertFToS %int %44
-         %46 = OpAccessChain %_ptr_Private_int %struct_array %45 %uint_2
-         %47 = OpLoad %int %46
-               OpStore %index %47
-               OpBranch %38
-         %40 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %49 = OpLoad %float %48
-         %50 = OpConvertFToS %int %49
-         %51 = OpAccessChain %_ptr_Private_int %struct_array %50 %uint_1
-         %52 = OpLoad %int %51
-               OpStore %index %52
-               OpBranch %38
-         %38 = OpLabel
-         %53 = OpAccessChain %_ptr_Private_int %struct_array %int_1 %uint_1
-         %54 = OpLoad %int %53
-         %55 = OpIEqual %bool %54 %int_1
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpStore %x_GLF_color %61
-               OpBranch %56
-         %58 = OpLabel
-               OpStore %x_GLF_color %62
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %71 = OpLabel
-         %72 = OpFunctionCall %main_out %main_inner
-         %73 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %73
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.wgsl
deleted file mode 100644
index 914402c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-struct struct_base {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> struct_array : array<struct_base, 3>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var index : i32;
-  struct_array = array<struct_base, 3>(struct_base(1, 1, 1), struct_base(1, 1, 1), struct_base(1, 1, 1));
-  index = 1;
-  struct_array[1].rightIndex = 1;
-  let x_39 : i32 = struct_array[1].leftIndex;
-  if ((x_39 == 1)) {
-    let x_45 : f32 = x_8.injectionSwitch.x;
-    let x_48 : i32 = struct_array[i32(x_45)].rightIndex;
-    index = x_48;
-  } else {
-    let x_50 : f32 = x_8.injectionSwitch.y;
-    let x_53 : i32 = struct_array[i32(x_50)].leftIndex;
-    index = x_53;
-  }
-  let x_55 : i32 = struct_array[1].leftIndex;
-  if ((x_55 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.hlsl
deleted file mode 100644
index c7913b7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,59 +0,0 @@
-struct struct_base {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-
-static struct_base struct_array[3] = (struct_base[3])0;
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int index = 0;
-  const struct_base tint_symbol_2 = {1, 1, 1};
-  const struct_base tint_symbol_3 = {1, 1, 1};
-  const struct_base tint_symbol_4 = {1, 1, 1};
-  const struct_base tint_symbol_5[3] = {tint_symbol_2, tint_symbol_3, tint_symbol_4};
-  struct_array = tint_symbol_5;
-  index = 1;
-  struct_array[1].rightIndex = 1;
-  const int x_39 = struct_array[1].leftIndex;
-  if ((x_39 == 1)) {
-    const float x_45 = asfloat(x_8[0].x);
-    const int x_48 = struct_array[int(x_45)].rightIndex;
-    index = x_48;
-  } else {
-    const float x_50 = asfloat(x_8[0].y);
-    const int x_53 = struct_array[int(x_50)].leftIndex;
-    index = x_53;
-  }
-  const int x_55 = struct_array[1].leftIndex;
-  if ((x_55 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_6 = {x_GLF_color};
-  return tint_symbol_6;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.msl
deleted file mode 100644
index 3d50855..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct struct_base {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  struct_base arr[3];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  int index = 0;
-  struct_base const tint_symbol_2 = {.data=1, .leftIndex=1, .rightIndex=1};
-  struct_base const tint_symbol_3 = {.data=1, .leftIndex=1, .rightIndex=1};
-  struct_base const tint_symbol_4 = {.data=1, .leftIndex=1, .rightIndex=1};
-  tint_array_wrapper const tint_symbol_5 = {.arr={tint_symbol_2, tint_symbol_3, tint_symbol_4}};
-  *(tint_symbol_7) = tint_symbol_5;
-  index = 1;
-  (*(tint_symbol_7)).arr[1].rightIndex = 1;
-  int const x_39 = (*(tint_symbol_7)).arr[1].leftIndex;
-  if ((x_39 == 1)) {
-    float const x_45 = x_8.injectionSwitch.x;
-    int const x_48 = (*(tint_symbol_7)).arr[int(x_45)].rightIndex;
-    index = x_48;
-  } else {
-    float const x_50 = x_8.injectionSwitch.y;
-    int const x_53 = (*(tint_symbol_7)).arr[int(x_50)].leftIndex;
-    index = x_53;
-  }
-  int const x_55 = (*(tint_symbol_7)).arr[1].leftIndex;
-  if ((x_55 == 1)) {
-    *(tint_symbol_8) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_8) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread tint_array_wrapper* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  main_1(x_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_6 = {.x_GLF_color_1=*(tint_symbol_10)};
-  return tint_symbol_6;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread tint_array_wrapper tint_symbol_11 = {};
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_11), &(tint_symbol_12));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.spvasm
deleted file mode 100644
index 63de97c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,131 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 74
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %struct_base "struct_base"
-               OpMemberName %struct_base 0 "data"
-               OpMemberName %struct_base 1 "leftIndex"
-               OpMemberName %struct_base 2 "rightIndex"
-               OpName %struct_array "struct_array"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %index "index"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %struct_base 0 Offset 0
-               OpMemberDecorate %struct_base 1 Offset 4
-               OpMemberDecorate %struct_base 2 Offset 8
-               OpDecorate %_arr_struct_base_uint_3 ArrayStride 12
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-%struct_base = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-     %uint_3 = OpConstant %uint 3
-%_arr_struct_base_uint_3 = OpTypeArray %struct_base %uint_3
-%_ptr_Private__arr_struct_base_uint_3 = OpTypePointer Private %_arr_struct_base_uint_3
-         %13 = OpConstantNull %_arr_struct_base_uint_3
-%struct_array = OpVariable %_ptr_Private__arr_struct_base_uint_3 Private %13
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-      %int_1 = OpConstant %int 1
-         %28 = OpConstantComposite %struct_base %int_1 %int_1 %int_1
-         %29 = OpConstantComposite %_arr_struct_base_uint_3 %28 %28 %28
-     %uint_2 = OpConstant %uint 2
-%_ptr_Private_int = OpTypePointer Private %int
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %61 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %62 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %63 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %26
-               OpStore %struct_array %29
-               OpStore %index %int_1
-         %32 = OpAccessChain %_ptr_Private_int %struct_array %int_1 %uint_2
-               OpStore %32 %int_1
-         %34 = OpAccessChain %_ptr_Private_int %struct_array %int_1 %uint_1
-         %35 = OpLoad %int %34
-         %36 = OpIEqual %bool %35 %int_1
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-         %43 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %44 = OpLoad %float %43
-         %45 = OpConvertFToS %int %44
-         %46 = OpAccessChain %_ptr_Private_int %struct_array %45 %uint_2
-         %47 = OpLoad %int %46
-               OpStore %index %47
-               OpBranch %38
-         %40 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %49 = OpLoad %float %48
-         %50 = OpConvertFToS %int %49
-         %51 = OpAccessChain %_ptr_Private_int %struct_array %50 %uint_1
-         %52 = OpLoad %int %51
-               OpStore %index %52
-               OpBranch %38
-         %38 = OpLabel
-         %53 = OpAccessChain %_ptr_Private_int %struct_array %int_1 %uint_1
-         %54 = OpLoad %int %53
-         %55 = OpIEqual %bool %54 %int_1
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %58
-         %57 = OpLabel
-               OpStore %x_GLF_color %61
-               OpBranch %56
-         %58 = OpLabel
-               OpStore %x_GLF_color %62
-               OpBranch %56
-         %56 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %63
-         %66 = OpLabel
-         %67 = OpFunctionCall %void %main_1
-         %68 = OpLoad %v4float %x_GLF_color
-         %69 = OpCompositeConstruct %main_out %68
-               OpReturnValue %69
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %71 = OpLabel
-         %72 = OpFunctionCall %main_out %main_inner
-         %73 = OpCompositeExtract %v4float %72 0
-               OpStore %x_GLF_color_1_1 %73
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.wgsl
deleted file mode 100644
index 914402c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,51 +0,0 @@
-struct struct_base {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> struct_array : array<struct_base, 3>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var index : i32;
-  struct_array = array<struct_base, 3>(struct_base(1, 1, 1), struct_base(1, 1, 1), struct_base(1, 1, 1));
-  index = 1;
-  struct_array[1].rightIndex = 1;
-  let x_39 : i32 = struct_array[1].leftIndex;
-  if ((x_39 == 1)) {
-    let x_45 : f32 = x_8.injectionSwitch.x;
-    let x_48 : i32 = struct_array[i32(x_45)].rightIndex;
-    index = x_48;
-  } else {
-    let x_50 : f32 = x_8.injectionSwitch.y;
-    let x_53 : i32 = struct_array[i32(x_50)].leftIndex;
-    index = x_53;
-  }
-  let x_55 : i32 = struct_array[1].leftIndex;
-  if ((x_55 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e93a1af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-struct S {
-  int f0;
-  bool3 f1;
-};
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  S ll = (S)0;
-  float sums[9] = (float[9])0;
-  const S tint_symbol_2 = {0, bool3(true, true, true)};
-  ll = tint_symbol_2;
-  while (true) {
-    const S x_12 = ll;
-    const float x_45 = asfloat(x_7[0].y);
-    if ((x_12.f0 != int(x_45))) {
-    } else {
-      break;
-    }
-    sums[0] = 0.0f;
-    {
-      const S x_13 = ll;
-      S x_51_1 = ll;
-      x_51_1.f0 = (x_13.f0 + 1);
-      ll = x_51_1;
-    }
-  }
-  const float x_53 = sums[0];
-  const float2 x_54 = float2(x_53, x_53);
-  x_GLF_color = float4(1.0f, x_54.x, x_54.y, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0cef996..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int f0;
-  bool3 f1;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  S ll = {};
-  tint_array_wrapper sums = {};
-  S const tint_symbol_2 = {.f0=0, .f1=bool3(true, true, true)};
-  ll = tint_symbol_2;
-  while (true) {
-    S const x_12 = ll;
-    float const x_45 = x_7.injectionSwitch.y;
-    if ((x_12.f0 != int(x_45))) {
-    } else {
-      break;
-    }
-    sums.arr[0] = 0.0f;
-    {
-      S const x_13 = ll;
-      S const x_50 = ll;
-      S x_51_1 = x_50;
-      x_51_1.f0 = as_type<int>((as_type<uint>(x_13.f0) + as_type<uint>(1)));
-      S const x_51 = x_51_1;
-      ll = x_51;
-    }
-  }
-  float const x_53 = sums.arr[0];
-  float2 const x_54 = float2(x_53, x_53);
-  *(tint_symbol_4) = float4(1.0f, x_54.x, x_54.y, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  main_1(x_7, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index d8be20a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "f0"
-               OpMemberName %S 1 "f1"
-               OpName %ll "ll"
-               OpName %sums "sums"
-               OpName %x_51_1 "x_51_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 16
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %v3bool = OpTypeVector %bool 3
-          %S = OpTypeStruct %int %v3bool
-%_ptr_Function_S = OpTypePointer Function %S
-         %22 = OpConstantNull %S
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %28 = OpConstantNull %_arr_float_uint_9
-      %int_0 = OpConstant %int 0
-       %true = OpConstantTrue %bool
-         %31 = OpConstantComposite %v3bool %true %true %true
-         %32 = OpConstantComposite %S %int_0 %31
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_0 = OpConstant %float 0
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %ll = OpVariable %_ptr_Function_S Function %22
-       %sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %28
-     %x_51_1 = OpVariable %_ptr_Function_S Function %22
-               OpStore %ll %32
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %37 = OpLoad %S %ll
-         %41 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %42 = OpLoad %float %41
-         %43 = OpCompositeExtract %int %37 0
-         %44 = OpConvertFToS %int %42
-         %45 = OpINotEqual %bool %43 %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %34
-         %46 = OpLabel
-         %50 = OpAccessChain %_ptr_Function_float %sums %int_0
-               OpStore %50 %float_0
-               OpBranch %35
-         %35 = OpLabel
-         %52 = OpLoad %S %ll
-         %53 = OpLoad %S %ll
-               OpStore %x_51_1 %53
-         %56 = OpAccessChain %_ptr_Function_int %x_51_1 %uint_0
-         %57 = OpCompositeExtract %int %52 0
-         %59 = OpIAdd %int %57 %int_1
-               OpStore %56 %59
-         %60 = OpLoad %S %x_51_1
-               OpStore %ll %60
-               OpBranch %33
-         %34 = OpLabel
-         %61 = OpAccessChain %_ptr_Function_float %sums %int_0
-         %62 = OpLoad %float %61
-         %63 = OpCompositeConstruct %v2float %62 %62
-         %65 = OpCompositeExtract %float %63 0
-         %66 = OpCompositeExtract %float %63 1
-         %67 = OpCompositeConstruct %v4float %float_1 %65 %66 %float_1
-               OpStore %x_GLF_color %67
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-         %71 = OpLabel
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %76 = OpLabel
-         %77 = OpFunctionCall %main_out %main_inner
-         %78 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 863b10c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-struct S {
-  f0 : i32;
-  f1 : vec3<bool>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var ll : S;
-  var sums : array<f32, 9>;
-  ll = S(0, vec3<bool>(true, true, true));
-  loop {
-    let x_12 : S = ll;
-    let x_45 : f32 = x_7.injectionSwitch.y;
-    if ((x_12.f0 != i32(x_45))) {
-    } else {
-      break;
-    }
-    sums[0] = 0.0;
-
-    continuing {
-      let x_13 : S = ll;
-      let x_50 : S = ll;
-      var x_51_1 : S = x_50;
-      x_51_1.f0 = (x_13.f0 + 1);
-      let x_51 : S = x_51_1;
-      ll = x_51;
-    }
-  }
-  let x_53 : f32 = sums[0];
-  let x_54 : vec2<f32> = vec2<f32>(x_53, x_53);
-  x_GLF_color = vec4<f32>(1.0, x_54.x, x_54.y, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e93a1af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-struct S {
-  int f0;
-  bool3 f1;
-};
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  S ll = (S)0;
-  float sums[9] = (float[9])0;
-  const S tint_symbol_2 = {0, bool3(true, true, true)};
-  ll = tint_symbol_2;
-  while (true) {
-    const S x_12 = ll;
-    const float x_45 = asfloat(x_7[0].y);
-    if ((x_12.f0 != int(x_45))) {
-    } else {
-      break;
-    }
-    sums[0] = 0.0f;
-    {
-      const S x_13 = ll;
-      S x_51_1 = ll;
-      x_51_1.f0 = (x_13.f0 + 1);
-      ll = x_51_1;
-    }
-  }
-  const float x_53 = sums[0];
-  const float2 x_54 = float2(x_53, x_53);
-  x_GLF_color = float4(1.0f, x_54.x, x_54.y, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0cef996..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  int f0;
-  bool3 f1;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  S ll = {};
-  tint_array_wrapper sums = {};
-  S const tint_symbol_2 = {.f0=0, .f1=bool3(true, true, true)};
-  ll = tint_symbol_2;
-  while (true) {
-    S const x_12 = ll;
-    float const x_45 = x_7.injectionSwitch.y;
-    if ((x_12.f0 != int(x_45))) {
-    } else {
-      break;
-    }
-    sums.arr[0] = 0.0f;
-    {
-      S const x_13 = ll;
-      S const x_50 = ll;
-      S x_51_1 = x_50;
-      x_51_1.f0 = as_type<int>((as_type<uint>(x_13.f0) + as_type<uint>(1)));
-      S const x_51 = x_51_1;
-      ll = x_51;
-    }
-  }
-  float const x_53 = sums.arr[0];
-  float2 const x_54 = float2(x_53, x_53);
-  *(tint_symbol_4) = float4(1.0f, x_54.x, x_54.y, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  main_1(x_7, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index d8be20a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,135 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 79
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %S "S"
-               OpMemberName %S 0 "f0"
-               OpMemberName %S 1 "f1"
-               OpName %ll "ll"
-               OpName %sums "sums"
-               OpName %x_51_1 "x_51_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %S 0 Offset 0
-               OpMemberDecorate %S 1 Offset 16
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %v3bool = OpTypeVector %bool 3
-          %S = OpTypeStruct %int %v3bool
-%_ptr_Function_S = OpTypePointer Function %S
-         %22 = OpConstantNull %S
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %28 = OpConstantNull %_arr_float_uint_9
-      %int_0 = OpConstant %int 0
-       %true = OpConstantTrue %bool
-         %31 = OpConstantComposite %v3bool %true %true %true
-         %32 = OpConstantComposite %S %int_0 %31
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_0 = OpConstant %float 0
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %68 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %ll = OpVariable %_ptr_Function_S Function %22
-       %sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %28
-     %x_51_1 = OpVariable %_ptr_Function_S Function %22
-               OpStore %ll %32
-               OpBranch %33
-         %33 = OpLabel
-               OpLoopMerge %34 %35 None
-               OpBranch %36
-         %36 = OpLabel
-         %37 = OpLoad %S %ll
-         %41 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %42 = OpLoad %float %41
-         %43 = OpCompositeExtract %int %37 0
-         %44 = OpConvertFToS %int %42
-         %45 = OpINotEqual %bool %43 %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %34
-         %46 = OpLabel
-         %50 = OpAccessChain %_ptr_Function_float %sums %int_0
-               OpStore %50 %float_0
-               OpBranch %35
-         %35 = OpLabel
-         %52 = OpLoad %S %ll
-         %53 = OpLoad %S %ll
-               OpStore %x_51_1 %53
-         %56 = OpAccessChain %_ptr_Function_int %x_51_1 %uint_0
-         %57 = OpCompositeExtract %int %52 0
-         %59 = OpIAdd %int %57 %int_1
-               OpStore %56 %59
-         %60 = OpLoad %S %x_51_1
-               OpStore %ll %60
-               OpBranch %33
-         %34 = OpLabel
-         %61 = OpAccessChain %_ptr_Function_float %sums %int_0
-         %62 = OpLoad %float %61
-         %63 = OpCompositeConstruct %v2float %62 %62
-         %65 = OpCompositeExtract %float %63 0
-         %66 = OpCompositeExtract %float %63 1
-         %67 = OpCompositeConstruct %v4float %float_1 %65 %66 %float_1
-               OpStore %x_GLF_color %67
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %68
-         %71 = OpLabel
-         %72 = OpFunctionCall %void %main_1
-         %73 = OpLoad %v4float %x_GLF_color
-         %74 = OpCompositeConstruct %main_out %73
-               OpReturnValue %74
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %76 = OpLabel
-         %77 = OpFunctionCall %main_out %main_inner
-         %78 = OpCompositeExtract %v4float %77 0
-               OpStore %x_GLF_color_1_1 %78
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 863b10c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-controlled-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,52 +0,0 @@
-struct S {
-  f0 : i32;
-  f1 : vec3<bool>;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var ll : S;
-  var sums : array<f32, 9>;
-  ll = S(0, vec3<bool>(true, true, true));
-  loop {
-    let x_12 : S = ll;
-    let x_45 : f32 = x_7.injectionSwitch.y;
-    if ((x_12.f0 != i32(x_45))) {
-    } else {
-      break;
-    }
-    sums[0] = 0.0;
-
-    continuing {
-      let x_13 : S = ll;
-      let x_50 : S = ll;
-      var x_51_1 : S = x_50;
-      x_51_1.f0 = (x_13.f0 + 1);
-      let x_51 : S = x_51_1;
-      ll = x_51;
-    }
-  }
-  let x_53 : f32 = sums[0];
-  let x_54 : vec2<f32> = vec2<f32>(x_53, x_53);
-  x_GLF_color = vec4<f32>(1.0, x_54.x, x_54.y, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 889d38a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-struct S_1 {
-  float4 field0;
-};
-
-static float4 x_3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  const float4 x_20 = asfloat(x_5[0]);
-  S_1 x_21_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  x_21_1.field0 = x_20;
-  x_3 = x_21_1.field0;
-  return;
-}
-
-struct main_out {
-  float4 x_3_1;
-};
-struct tint_symbol {
-  float4 x_3_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_3};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3df56f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float4 field0;
-};
-struct S_1 {
-  float4 field0;
-};
-struct main_out {
-  float4 x_3_1;
-};
-struct tint_symbol_1 {
-  float4 x_3_1 [[color(0)]];
-};
-
-void main_1(constant S& x_5, thread float4* const tint_symbol_3) {
-  float4 const x_20 = x_5.field0;
-  S_1 x_21_1 = {.field0=float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  x_21_1.field0 = x_20;
-  S_1 const x_21 = x_21_1;
-  *(tint_symbol_3) = x_21.field0;
-  return;
-}
-
-main_out tint_symbol_inner(constant S& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_3_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant S& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 758ec98..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 42
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_3_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_3_1_1 "x_3_1_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %S_1 "S_1"
-               OpMemberName %S_1 0 "field0"
-               OpName %x_21_1 "x_21_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_3_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_3_1_1 Location 0
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %S_1 0 Offset 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-    %x_3_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_3 = OpVariable %_ptr_Private_v4float Private %5
-          %S = OpTypeStruct %v4float
-%_ptr_Uniform_S = OpTypePointer Uniform %S
-        %x_5 = OpVariable %_ptr_Uniform_S Uniform
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
-        %S_1 = OpTypeStruct %v4float
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %23 = OpConstantComposite %S_1 %22
-%_ptr_Function_S_1 = OpTypePointer Function %S_1
-         %26 = OpConstantNull %S_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-         %31 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-     %x_21_1 = OpVariable %_ptr_Function_S_1 Function %26
-         %18 = OpAccessChain %_ptr_Uniform_v4float %x_5 %uint_0
-         %19 = OpLoad %v4float %18
-               OpStore %x_21_1 %23
-         %28 = OpAccessChain %_ptr_Function_v4float %x_21_1 %uint_0
-               OpStore %28 %19
-         %29 = OpLoad %S_1 %x_21_1
-         %30 = OpCompositeExtract %v4float %29 0
-               OpStore %x_3 %30
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %31
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %main_1
-         %36 = OpLoad %v4float %x_3
-         %37 = OpCompositeConstruct %main_out %36
-               OpReturnValue %37
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %39 = OpLabel
-         %40 = OpFunctionCall %main_out %main_inner
-         %41 = OpCompositeExtract %v4float %40 0
-               OpStore %x_3_1_1 %41
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index de69a65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct S {
-  field0 : vec4<f32>;
-};
-
-struct S_1 {
-  field0 : vec4<f32>;
-};
-
-var<private> x_3 : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : S;
-
-fn main_1() {
-  let x_20 : vec4<f32> = x_5.field0;
-  var x_21_1 : S_1 = S_1(vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  x_21_1.field0 = x_20;
-  let x_21 : S_1 = x_21_1;
-  x_3 = x_21.field0;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_3_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_3);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 889d38a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-struct S_1 {
-  float4 field0;
-};
-
-static float4 x_3 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-
-void main_1() {
-  const float4 x_20 = asfloat(x_5[0]);
-  S_1 x_21_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  x_21_1.field0 = x_20;
-  x_3 = x_21_1.field0;
-  return;
-}
-
-struct main_out {
-  float4 x_3_1;
-};
-struct tint_symbol {
-  float4 x_3_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_3};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3df56f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ float4 field0;
-};
-struct S_1 {
-  float4 field0;
-};
-struct main_out {
-  float4 x_3_1;
-};
-struct tint_symbol_1 {
-  float4 x_3_1 [[color(0)]];
-};
-
-void main_1(constant S& x_5, thread float4* const tint_symbol_3) {
-  float4 const x_20 = x_5.field0;
-  S_1 x_21_1 = {.field0=float4(0.0f, 0.0f, 0.0f, 0.0f)};
-  x_21_1.field0 = x_20;
-  S_1 const x_21 = x_21_1;
-  *(tint_symbol_3) = x_21.field0;
-  return;
-}
-
-main_out tint_symbol_inner(constant S& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_3_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant S& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_3_1 = inner_result.x_3_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 758ec98..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 42
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_3_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_3_1_1 "x_3_1_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %S_1 "S_1"
-               OpMemberName %S_1 0 "field0"
-               OpName %x_21_1 "x_21_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_3_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_3_1_1 Location 0
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %S_1 0 Offset 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-    %x_3_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-        %x_3 = OpVariable %_ptr_Private_v4float Private %5
-          %S = OpTypeStruct %v4float
-%_ptr_Uniform_S = OpTypePointer Uniform %S
-        %x_5 = OpVariable %_ptr_Uniform_S Uniform
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
-        %S_1 = OpTypeStruct %v4float
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-         %23 = OpConstantComposite %S_1 %22
-%_ptr_Function_S_1 = OpTypePointer Function %S_1
-         %26 = OpConstantNull %S_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-   %main_out = OpTypeStruct %v4float
-         %31 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-     %x_21_1 = OpVariable %_ptr_Function_S_1 Function %26
-         %18 = OpAccessChain %_ptr_Uniform_v4float %x_5 %uint_0
-         %19 = OpLoad %v4float %18
-               OpStore %x_21_1 %23
-         %28 = OpAccessChain %_ptr_Function_v4float %x_21_1 %uint_0
-               OpStore %28 %19
-         %29 = OpLoad %S_1 %x_21_1
-         %30 = OpCompositeExtract %v4float %29 0
-               OpStore %x_3 %30
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %31
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %main_1
-         %36 = OpLoad %v4float %x_3
-         %37 = OpCompositeConstruct %main_out %36
-               OpReturnValue %37
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %39 = OpLabel
-         %40 = OpFunctionCall %main_out %main_inner
-         %41 = OpCompositeExtract %v4float %40 0
-               OpStore %x_3_1_1 %41
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index de69a65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/struct-used-as-temporary/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-[[block]]
-struct S {
-  field0 : vec4<f32>;
-};
-
-struct S_1 {
-  field0 : vec4<f32>;
-};
-
-var<private> x_3 : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : S;
-
-fn main_1() {
-  let x_20 : vec4<f32> = x_5.field0;
-  var x_21_1 : S_1 = S_1(vec4<f32>(0.0, 0.0, 0.0, 0.0));
-  x_21_1.field0 = x_20;
-  let x_21 : S_1 = x_21_1;
-  x_3 = x_21.field0;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_3_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_3);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4ae6c7c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_25 = asfloat(x_5[0].y);
-  switch(int(x_25)) {
-    case -1: {
-      const float x_30 = asfloat(x_5[0].y);
-      const float x_32 = asfloat(x_5[0].x);
-      if ((x_30 > x_32)) {
-        discard;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.msl
deleted file mode 100644
index f4fc1a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_25 = x_5.injectionSwitch.y;
-  switch(int(x_25)) {
-    case -1: {
-      float const x_30 = x_5.injectionSwitch.y;
-      float const x_32 = x_5.injectionSwitch.x;
-      if ((x_30 > x_32)) {
-        discard_fragment();
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b917ae2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,89 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %37 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %20 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %21 = OpLoad %float %20
-         %23 = OpConvertFToS %int %21
-               OpSelectionMerge %22 None
-               OpSwitch %23 %25 -1 %26
-         %26 = OpLabel
-         %27 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %28 = OpLoad %float %27
-         %29 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %30 = OpLoad %float %29
-         %31 = OpFOrdGreaterThan %bool %28 %30
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %33
-         %34 = OpLabel
-               OpKill
-         %33 = OpLabel
-               OpBranch %22
-         %25 = OpLabel
-               OpBranch %22
-         %22 = OpLabel
-               OpStore %x_GLF_color %37
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2a93d7f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_25 : f32 = x_5.injectionSwitch.y;
-  switch(i32(x_25)) {
-    case -1: {
-      let x_30 : f32 = x_5.injectionSwitch.y;
-      let x_32 : f32 = x_5.injectionSwitch.x;
-      if ((x_30 > x_32)) {
-        discard;
-      }
-    }
-    default: {
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4ae6c7c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_25 = asfloat(x_5[0].y);
-  switch(int(x_25)) {
-    case -1: {
-      const float x_30 = asfloat(x_5[0].y);
-      const float x_32 = asfloat(x_5[0].x);
-      if ((x_30 > x_32)) {
-        discard;
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.msl
deleted file mode 100644
index f4fc1a1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float const x_25 = x_5.injectionSwitch.y;
-  switch(int(x_25)) {
-    case -1: {
-      float const x_30 = x_5.injectionSwitch.y;
-      float const x_32 = x_5.injectionSwitch.x;
-      if ((x_30 > x_32)) {
-        discard_fragment();
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b917ae2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,89 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 49
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %37 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %38 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-         %20 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %21 = OpLoad %float %20
-         %23 = OpConvertFToS %int %21
-               OpSelectionMerge %22 None
-               OpSwitch %23 %25 -1 %26
-         %26 = OpLabel
-         %27 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %28 = OpLoad %float %27
-         %29 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %30 = OpLoad %float %29
-         %31 = OpFOrdGreaterThan %bool %28 %30
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %33
-         %34 = OpLabel
-               OpKill
-         %33 = OpLabel
-               OpBranch %22
-         %25 = OpLabel
-               OpBranch %22
-         %22 = OpLabel
-               OpStore %x_GLF_color %37
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %main_1
-         %43 = OpLoad %v4float %x_GLF_color
-         %44 = OpCompositeConstruct %main_out %43
-               OpReturnValue %44
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %46 = OpLabel
-         %47 = OpFunctionCall %main_out %main_inner
-         %48 = OpCompositeExtract %v4float %47 0
-               OpStore %x_GLF_color_1_1 %48
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2a93d7f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-if-discard/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,36 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  let x_25 : f32 = x_5.injectionSwitch.y;
-  switch(i32(x_25)) {
-    case -1: {
-      let x_30 : f32 = x_5.injectionSwitch.y;
-      let x_32 : f32 = x_5.injectionSwitch.x;
-      if ((x_30 > x_32)) {
-        discard;
-      }
-    }
-    default: {
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6e4aa39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int merge_() {
-  const float x_40 = asfloat(x_6[0].x);
-  if ((x_40 < 0.0f)) {
-    return 0;
-  }
-  return 0;
-}
-
-void main_1() {
-  int res = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    const float x_32 = asfloat(x_6[0].x);
-    switch(int(x_32)) {
-      case 0: {
-        return;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_8 = merge_();
-  res = x_8;
-  const float x_36 = float(res);
-  x_GLF_color = float4(x_36, x_36, x_36, x_36);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0ade69e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int merge_(constant buf0& x_6) {
-  float const x_40 = x_6.zero;
-  if ((x_40 < 0.0f)) {
-    return 0;
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int res = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    float const x_32 = x_6.zero;
-    switch(int(x_32)) {
-      case 0: {
-        return;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_8 = merge_(x_6);
-  res = x_8;
-  int const x_9 = res;
-  float const x_36 = float(x_9);
-  *(tint_symbol_3) = float4(x_36, x_36, x_36, x_36);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 467fed2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_ "merge_"
-               OpName %main_1 "main_1"
-               OpName %res "res"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-         %11 = OpTypeFunction %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %26 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-         %34 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %merge_ = OpFunction %int None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %19 = OpLoad %float %18
-         %21 = OpFOrdLessThan %bool %19 %float_0
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %24 %23
-         %24 = OpLabel
-               OpReturnValue %int_0
-         %23 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %26
-         %29 = OpLabel
-        %res = OpVariable %_ptr_Function_int Function %32
-               OpStore %x_GLF_color %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %40 = OpLoad %float %39
-         %42 = OpConvertFToS %int %40
-               OpSelectionMerge %41 None
-               OpSwitch %42 %43 0 %44
-         %44 = OpLabel
-               OpReturn
-         %43 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpBranchConditional %false %35 %36
-         %36 = OpLabel
-         %46 = OpFunctionCall %int %merge_
-               OpStore %res %46
-         %47 = OpLoad %int %res
-         %48 = OpConvertSToF %float %47
-         %49 = OpCompositeConstruct %v4float %48 %48 %48 %48
-               OpStore %x_GLF_color %49
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %26
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 546668a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_() -> i32 {
-  let x_40 : f32 = x_6.zero;
-  if ((x_40 < 0.0)) {
-    return 0;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var res : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  loop {
-    let x_32 : f32 = x_6.zero;
-    switch(i32(x_32)) {
-      case 0: {
-        return;
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_8 : i32 = merge_();
-  res = x_8;
-  let x_9 : i32 = res;
-  let x_36 : f32 = f32(x_9);
-  x_GLF_color = vec4<f32>(x_36, x_36, x_36, x_36);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6e4aa39..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int merge_() {
-  const float x_40 = asfloat(x_6[0].x);
-  if ((x_40 < 0.0f)) {
-    return 0;
-  }
-  return 0;
-}
-
-void main_1() {
-  int res = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    const float x_32 = asfloat(x_6[0].x);
-    switch(int(x_32)) {
-      case 0: {
-        return;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_8 = merge_();
-  res = x_8;
-  const float x_36 = float(res);
-  x_GLF_color = float4(x_36, x_36, x_36, x_36);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0ade69e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float zero;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int merge_(constant buf0& x_6) {
-  float const x_40 = x_6.zero;
-  if ((x_40 < 0.0f)) {
-    return 0;
-  }
-  return 0;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int res = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    float const x_32 = x_6.zero;
-    switch(int(x_32)) {
-      case 0: {
-        return;
-        break;
-      }
-      default: {
-        break;
-      }
-    }
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_8 = merge_(x_6);
-  res = x_8;
-  int const x_9 = res;
-  float const x_36 = float(x_9);
-  *(tint_symbol_3) = float4(x_36, x_36, x_36, x_36);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 467fed2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "zero"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %merge_ "merge_"
-               OpName %main_1 "main_1"
-               OpName %res "res"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-       %buf0 = OpTypeStruct %float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-         %11 = OpTypeFunction %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-       %void = OpTypeVoid
-         %26 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-         %34 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %merge_ = OpFunction %int None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %19 = OpLoad %float %18
-         %21 = OpFOrdLessThan %bool %19 %float_0
-               OpSelectionMerge %23 None
-               OpBranchConditional %21 %24 %23
-         %24 = OpLabel
-               OpReturnValue %int_0
-         %23 = OpLabel
-               OpReturnValue %int_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %26
-         %29 = OpLabel
-        %res = OpVariable %_ptr_Function_int Function %32
-               OpStore %x_GLF_color %34
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0
-         %40 = OpLoad %float %39
-         %42 = OpConvertFToS %int %40
-               OpSelectionMerge %41 None
-               OpSwitch %42 %43 0 %44
-         %44 = OpLabel
-               OpReturn
-         %43 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpBranchConditional %false %35 %36
-         %36 = OpLabel
-         %46 = OpFunctionCall %int %merge_
-               OpStore %res %46
-         %47 = OpLoad %int %res
-         %48 = OpConvertSToF %float %47
-         %49 = OpCompositeConstruct %v4float %48 %48 %48 %48
-               OpStore %x_GLF_color %49
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %26
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 546668a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-inside-while-always-return/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,55 +0,0 @@
-[[block]]
-struct buf0 {
-  zero : f32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn merge_() -> i32 {
-  let x_40 : f32 = x_6.zero;
-  if ((x_40 < 0.0)) {
-    return 0;
-  }
-  return 0;
-}
-
-fn main_1() {
-  var res : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  loop {
-    let x_32 : f32 = x_6.zero;
-    switch(i32(x_32)) {
-      case 0: {
-        return;
-      }
-      default: {
-      }
-    }
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_8 : i32 = merge_();
-  res = x_8;
-  let x_9 : i32 = res;
-  let x_36 : f32 = f32(x_9);
-  x_GLF_color = vec4<f32>(x_36, x_36, x_36, x_36);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 5c6be43..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,80 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  const float x_51 = asfloat(x_6[0].x);
-  i = int(x_51);
-  switch(i) {
-    case 0: {
-      while (true) {
-        i = (i + 1);
-        switch(i) {
-          case 2: {
-            i = (i + 5);
-            break;
-          }
-          case 1: {
-            {
-              if ((i > 200)) {
-              } else {
-                break;
-              }
-            }
-            continue;
-            break;
-          }
-          default: {
-            i = (i + 7);
-            break;
-          }
-        }
-        {
-          if ((i > 200)) {
-          } else {
-            break;
-          }
-        }
-      }
-      if ((i > 100)) {
-        i = (i - 2);
-        break;
-      }
-      /* fallthrough */
-      {
-        i = (i - 3);
-      }
-      break;
-    }
-    default: {
-      i = (i - 3);
-      break;
-    }
-  }
-  if ((i == -2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-O:\src\chrome\src\third_party\dawn\third_party\tint\test\Shader@0x0000028C1CDAABD0(26,13-21): error X3708: continue cannot be used in a switch
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.msl
deleted file mode 100644
index fb07b37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,92 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  float const x_51 = x_6.injectionSwitch.x;
-  i = int(x_51);
-  int const x_8 = i;
-  switch(x_8) {
-    case 0: {
-      while (true) {
-        int const x_9 = i;
-        i = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-        int const x_11 = i;
-        switch(x_11) {
-          case 2: {
-            int const x_12 = i;
-            i = as_type<int>((as_type<uint>(x_12) + as_type<uint>(5)));
-            break;
-          }
-          case 1: {
-            {
-              int const x_16 = i;
-              if ((x_16 > 200)) {
-              } else {
-                break;
-              }
-            }
-            continue;
-            break;
-          }
-          default: {
-            int const x_14 = i;
-            i = as_type<int>((as_type<uint>(x_14) + as_type<uint>(7)));
-            break;
-          }
-        }
-        {
-          int const x_16 = i;
-          if ((x_16 > 200)) {
-          } else {
-            break;
-          }
-        }
-      }
-      int const x_17 = i;
-      if ((x_17 > 100)) {
-        int const x_18 = i;
-        i = as_type<int>((as_type<uint>(x_18) - as_type<uint>(2)));
-        break;
-      }
-      /* fallthrough */
-    }
-    default: {
-      int const x_20 = i;
-      i = as_type<int>((as_type<uint>(x_20) - as_type<uint>(3)));
-      break;
-    }
-  }
-  int const x_22 = i;
-  if ((x_22 == -2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 7259a72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,146 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 84
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-      %int_7 = OpConstant %int 7
-    %int_200 = OpConstant %int 200
-       %bool = OpTypeBool
-    %int_100 = OpConstant %int 100
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %int_n2 = OpConstant %int -2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %71 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %72 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %73 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %19
-         %23 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %24 = OpLoad %float %23
-         %25 = OpConvertFToS %int %24
-               OpStore %i %25
-         %26 = OpLoad %int %i
-               OpSelectionMerge %27 None
-               OpSwitch %26 %28 0 %29
-         %29 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpIAdd %int %34 %int_1
-               OpStore %i %36
-         %37 = OpLoad %int %i
-               OpSelectionMerge %38 None
-               OpSwitch %37 %39 2 %40 1 %41
-         %40 = OpLabel
-         %42 = OpLoad %int %i
-         %44 = OpIAdd %int %42 %int_5
-               OpStore %i %44
-               OpBranch %38
-         %41 = OpLabel
-               OpBranch %32
-         %39 = OpLabel
-         %45 = OpLoad %int %i
-         %47 = OpIAdd %int %45 %int_7
-               OpStore %i %47
-               OpBranch %38
-         %38 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpSGreaterThan %bool %48 %int_200
-               OpBranchConditional %50 %30 %31
-         %31 = OpLabel
-         %52 = OpLoad %int %i
-         %54 = OpSGreaterThan %bool %52 %int_100
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-         %57 = OpLoad %int %i
-         %59 = OpISub %int %57 %int_2
-               OpStore %i %59
-               OpBranch %27
-         %55 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %60 = OpLoad %int %i
-         %62 = OpISub %int %60 %int_3
-               OpStore %i %62
-               OpBranch %27
-         %27 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpIEqual %bool %63 %int_n2
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-               OpStore %x_GLF_color %71
-               OpBranch %66
-         %68 = OpLabel
-               OpStore %x_GLF_color %72
-               OpBranch %66
-         %66 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %73
-         %76 = OpLabel
-         %77 = OpFunctionCall %void %main_1
-         %78 = OpLoad %v4float %x_GLF_color
-         %79 = OpCompositeConstruct %main_out %78
-               OpReturnValue %79
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %81 = OpLabel
-         %82 = OpFunctionCall %main_out %main_inner
-         %83 = OpCompositeExtract %v4float %82 0
-               OpStore %x_GLF_color_1_1 %83
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 8c6c5d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  let x_51 : f32 = x_6.injectionSwitch.x;
-  i = i32(x_51);
-  let x_8 : i32 = i;
-  switch(x_8) {
-    case 0: {
-      loop {
-        let x_9 : i32 = i;
-        i = (x_9 + 1);
-        let x_11 : i32 = i;
-        switch(x_11) {
-          case 2: {
-            let x_12 : i32 = i;
-            i = (x_12 + 5);
-          }
-          case 1: {
-            continue;
-          }
-          default: {
-            let x_14 : i32 = i;
-            i = (x_14 + 7);
-          }
-        }
-
-        continuing {
-          let x_16 : i32 = i;
-          if ((x_16 > 200)) {
-          } else {
-            break;
-          }
-        }
-      }
-      let x_17 : i32 = i;
-      if ((x_17 > 100)) {
-        let x_18 : i32 = i;
-        i = (x_18 - 2);
-        break;
-      }
-      fallthrough;
-    }
-    default: {
-      let x_20 : i32 = i;
-      i = (x_20 - 3);
-    }
-  }
-  let x_22 : i32 = i;
-  if ((x_22 == -2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 5f8be8e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,80 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  const float x_51 = asfloat(x_6[0].x);
-  i = int(x_51);
-  switch(i) {
-    case 0: {
-      while (true) {
-        i = (i + 1);
-        switch(i) {
-          case 2: {
-            i = (i + 5);
-            break;
-          }
-          case 1: {
-            {
-              if ((i > 200)) {
-              } else {
-                break;
-              }
-            }
-            continue;
-            break;
-          }
-          default: {
-            i = (i + 7);
-            break;
-          }
-        }
-        {
-          if ((i > 200)) {
-          } else {
-            break;
-          }
-        }
-      }
-      if ((i > 100)) {
-        i = (i - 2);
-        break;
-      }
-      /* fallthrough */
-      {
-        i = (i - 3);
-      }
-      break;
-    }
-    default: {
-      i = (i - 3);
-      break;
-    }
-  }
-  if ((i == -2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-tint_symbol main() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
-  return tint_symbol_3;
-}
-O:\src\chrome\src\third_party\dawn\third_party\tint\test\Shader@0x0000015D2C356900(26,13-21): error X3708: continue cannot be used in a switch
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.msl
deleted file mode 100644
index fb07b37..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,92 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  float const x_51 = x_6.injectionSwitch.x;
-  i = int(x_51);
-  int const x_8 = i;
-  switch(x_8) {
-    case 0: {
-      while (true) {
-        int const x_9 = i;
-        i = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-        int const x_11 = i;
-        switch(x_11) {
-          case 2: {
-            int const x_12 = i;
-            i = as_type<int>((as_type<uint>(x_12) + as_type<uint>(5)));
-            break;
-          }
-          case 1: {
-            {
-              int const x_16 = i;
-              if ((x_16 > 200)) {
-              } else {
-                break;
-              }
-            }
-            continue;
-            break;
-          }
-          default: {
-            int const x_14 = i;
-            i = as_type<int>((as_type<uint>(x_14) + as_type<uint>(7)));
-            break;
-          }
-        }
-        {
-          int const x_16 = i;
-          if ((x_16 > 200)) {
-          } else {
-            break;
-          }
-        }
-      }
-      int const x_17 = i;
-      if ((x_17 > 100)) {
-        int const x_18 = i;
-        i = as_type<int>((as_type<uint>(x_18) - as_type<uint>(2)));
-        break;
-      }
-      /* fallthrough */
-    }
-    default: {
-      int const x_20 = i;
-      i = as_type<int>((as_type<uint>(x_20) - as_type<uint>(3)));
-      break;
-    }
-  }
-  int const x_22 = i;
-  if ((x_22 == -2)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 7259a72..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,146 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 84
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %int_5 = OpConstant %int 5
-      %int_7 = OpConstant %int 7
-    %int_200 = OpConstant %int 200
-       %bool = OpTypeBool
-    %int_100 = OpConstant %int 100
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %int_n2 = OpConstant %int -2
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %71 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %72 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %73 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %19
-         %23 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %24 = OpLoad %float %23
-         %25 = OpConvertFToS %int %24
-               OpStore %i %25
-         %26 = OpLoad %int %i
-               OpSelectionMerge %27 None
-               OpSwitch %26 %28 0 %29
-         %29 = OpLabel
-               OpBranch %30
-         %30 = OpLabel
-               OpLoopMerge %31 %32 None
-               OpBranch %33
-         %33 = OpLabel
-         %34 = OpLoad %int %i
-         %36 = OpIAdd %int %34 %int_1
-               OpStore %i %36
-         %37 = OpLoad %int %i
-               OpSelectionMerge %38 None
-               OpSwitch %37 %39 2 %40 1 %41
-         %40 = OpLabel
-         %42 = OpLoad %int %i
-         %44 = OpIAdd %int %42 %int_5
-               OpStore %i %44
-               OpBranch %38
-         %41 = OpLabel
-               OpBranch %32
-         %39 = OpLabel
-         %45 = OpLoad %int %i
-         %47 = OpIAdd %int %45 %int_7
-               OpStore %i %47
-               OpBranch %38
-         %38 = OpLabel
-               OpBranch %32
-         %32 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpSGreaterThan %bool %48 %int_200
-               OpBranchConditional %50 %30 %31
-         %31 = OpLabel
-         %52 = OpLoad %int %i
-         %54 = OpSGreaterThan %bool %52 %int_100
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %55
-         %56 = OpLabel
-         %57 = OpLoad %int %i
-         %59 = OpISub %int %57 %int_2
-               OpStore %i %59
-               OpBranch %27
-         %55 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %60 = OpLoad %int %i
-         %62 = OpISub %int %60 %int_3
-               OpStore %i %62
-               OpBranch %27
-         %27 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpIEqual %bool %63 %int_n2
-               OpSelectionMerge %66 None
-               OpBranchConditional %65 %67 %68
-         %67 = OpLabel
-               OpStore %x_GLF_color %71
-               OpBranch %66
-         %68 = OpLabel
-               OpStore %x_GLF_color %72
-               OpBranch %66
-         %66 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %73
-         %76 = OpLabel
-         %77 = OpFunctionCall %void %main_1
-         %78 = OpLoad %v4float %x_GLF_color
-         %79 = OpCompositeConstruct %main_out %78
-               OpReturnValue %79
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %81 = OpLabel
-         %82 = OpFunctionCall %main_out %main_inner
-         %83 = OpCompositeExtract %v4float %82 0
-               OpStore %x_GLF_color_1_1 %83
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 8c6c5d7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-loop-switch-if/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  let x_51 : f32 = x_6.injectionSwitch.x;
-  i = i32(x_51);
-  let x_8 : i32 = i;
-  switch(x_8) {
-    case 0: {
-      loop {
-        let x_9 : i32 = i;
-        i = (x_9 + 1);
-        let x_11 : i32 = i;
-        switch(x_11) {
-          case 2: {
-            let x_12 : i32 = i;
-            i = (x_12 + 5);
-          }
-          case 1: {
-            continue;
-          }
-          default: {
-            let x_14 : i32 = i;
-            i = (x_14 + 7);
-          }
-        }
-
-        continuing {
-          let x_16 : i32 = i;
-          if ((x_16 > 200)) {
-          } else {
-            break;
-          }
-        }
-      }
-      let x_17 : i32 = i;
-      if ((x_17 > 100)) {
-        let x_18 : i32 = i;
-        i = (x_18 - 2);
-        break;
-      }
-      fallthrough;
-    }
-    default: {
-      let x_20 : i32 = i;
-      i = (x_20 - 3);
-    }
-  }
-  let x_22 : i32 = i;
-  if ((x_22 == -2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.hlsl
deleted file mode 100644
index 7abe1c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  switch(0) {
-    case 0: {
-      if (false) {
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.msl
deleted file mode 100644
index bcf0061..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  switch(0) {
-    case 0: {
-      if (false) {
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.spvasm
deleted file mode 100644
index 03a1bd4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 35
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %23 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %24 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpSelectionMerge %12 None
-               OpSwitch %int_0 %15 0 %16
-         %16 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %false %20 %19
-         %20 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %12
-         %15 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %x_GLF_color %23
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %24
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %main_1
-         %29 = OpLoad %v4float %x_GLF_color
-         %30 = OpCompositeConstruct %main_out %29
-               OpReturnValue %30
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %32 = OpLabel
-         %33 = OpFunctionCall %main_out %main_inner
-         %34 = OpCompositeExtract %v4float %33 0
-               OpStore %x_GLF_color_1_1 %34
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.wgsl
deleted file mode 100644
index cdab78b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  switch(0) {
-    case 0: {
-      if (false) {
-      }
-    }
-    default: {
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.hlsl
deleted file mode 100644
index 7abe1c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  switch(0) {
-    case 0: {
-      if (false) {
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.msl
deleted file mode 100644
index bcf0061..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  switch(0) {
-    case 0: {
-      if (false) {
-      }
-      break;
-    }
-    default: {
-      break;
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.spvasm
deleted file mode 100644
index 03a1bd4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 35
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %23 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %24 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpSelectionMerge %12 None
-               OpSwitch %int_0 %15 0 %16
-         %16 = OpLabel
-               OpSelectionMerge %19 None
-               OpBranchConditional %false %20 %19
-         %20 = OpLabel
-               OpBranch %19
-         %19 = OpLabel
-               OpBranch %12
-         %15 = OpLabel
-               OpBranch %12
-         %12 = OpLabel
-               OpStore %x_GLF_color %23
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %24
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %main_1
-         %29 = OpLoad %v4float %x_GLF_color
-         %30 = OpCompositeConstruct %main_out %29
-               OpReturnValue %30
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %32 = OpLabel
-         %33 = OpFunctionCall %main_out %main_inner
-         %34 = OpCompositeExtract %v4float %33 0
-               OpStore %x_GLF_color_1_1 %34
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.wgsl
deleted file mode 100644
index cdab78b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-empty-if-false/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  switch(0) {
-    case 0: {
-      if (false) {
-      }
-    }
-    default: {
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b914058..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int value = 0;
-  float y = 0.0f;
-  int x_31_phi = 0;
-  i = 0;
-  x_31_phi = 0;
-  while (true) {
-    const int x_31 = x_31_phi;
-    const float x_37 = asfloat(x_6[0].x);
-    if ((x_31 < (2 + int(x_37)))) {
-    } else {
-      break;
-    }
-    float x_55_phi = 0.0f;
-    float x_46_phi = 0.0f;
-    value = x_31;
-    y = 0.5f;
-    x_55_phi = 0.5f;
-    x_46_phi = 0.5f;
-    switch(x_31) {
-      case 0: {
-        const float x_54 = (0.5f + 0.5f);
-        y = x_54;
-        x_55_phi = x_54;
-        /* fallthrough */
-        {
-          const float x_47 = clamp(1.0f, 0.5f, x_55_phi);
-          y = x_47;
-          x_46_phi = x_47;
-          /* fallthrough */
-        }
-        {
-          /* fallthrough */
-        }
-        {
-          if ((x_46_phi == 1.0f)) {
-            x_GLF_color = float4(float((x_31 + 1)), 0.0f, 0.0f, 1.0f);
-            return;
-          }
-        }
-        break;
-      }
-      case 1: {
-        const float x_47 = clamp(1.0f, 0.5f, x_55_phi);
-        y = x_47;
-        x_46_phi = x_47;
-        /* fallthrough */
-        {
-          /* fallthrough */
-        }
-        {
-          if ((x_46_phi == 1.0f)) {
-            x_GLF_color = float4(float((x_31 + 1)), 0.0f, 0.0f, 1.0f);
-            return;
-          }
-        }
-        break;
-      }
-      default: {
-        /* fallthrough */
-        {
-          if ((x_46_phi == 1.0f)) {
-            x_GLF_color = float4(float((x_31 + 1)), 0.0f, 0.0f, 1.0f);
-            return;
-          }
-        }
-        break;
-      }
-      case 2: {
-        if ((x_46_phi == 1.0f)) {
-          x_GLF_color = float4(float((x_31 + 1)), 0.0f, 0.0f, 1.0f);
-          return;
-        }
-        break;
-      }
-    }
-    {
-      const int x_32 = (x_31 + 1);
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.msl
deleted file mode 100644
index 54478d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int value = 0;
-  float y = 0.0f;
-  int x_31_phi = 0;
-  i = 0;
-  x_31_phi = 0;
-  while (true) {
-    int const x_31 = x_31_phi;
-    float const x_37 = x_6.injectionSwitch.x;
-    if ((x_31 < as_type<int>((as_type<uint>(2) + as_type<uint>(int(x_37)))))) {
-    } else {
-      break;
-    }
-    float x_55_phi = 0.0f;
-    float x_46_phi = 0.0f;
-    value = x_31;
-    y = 0.5f;
-    x_55_phi = 0.5f;
-    x_46_phi = 0.5f;
-    switch(x_31) {
-      case 0: {
-        float const x_54 = (0.5f + 0.5f);
-        y = x_54;
-        x_55_phi = x_54;
-        /* fallthrough */
-      }
-      case 1: {
-        float const x_55 = x_55_phi;
-        float const x_47 = clamp(1.0f, 0.5f, x_55);
-        y = x_47;
-        x_46_phi = x_47;
-        /* fallthrough */
-      }
-      default: {
-        /* fallthrough */
-      }
-      case 2: {
-        float const x_46 = x_46_phi;
-        if ((x_46 == 1.0f)) {
-          *(tint_symbol_3) = float4(float(as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)))), 0.0f, 0.0f, 1.0f);
-          return;
-        }
-        break;
-      }
-    }
-    {
-      int const x_32 = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 43d00ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,147 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %55 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %value "value"
-               OpName %y "y"
-               OpName %x_31_phi "x_31_phi"
-               OpName %x_55_phi "x_55_phi"
-               OpName %x_46_phi "x_46_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %23 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %19
-      %value = OpVariable %_ptr_Function_int Function %19
-          %y = OpVariable %_ptr_Function_float Function %23
-   %x_31_phi = OpVariable %_ptr_Function_int Function %19
-   %x_55_phi = OpVariable %_ptr_Function_float Function %23
-   %x_46_phi = OpVariable %_ptr_Function_float Function %23
-               OpStore %i %int_0
-               OpStore %x_31_phi %int_0
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %x_31_phi
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %35 = OpLoad %float %34
-         %37 = OpConvertFToS %int %35
-         %38 = OpIAdd %int %int_2 %37
-         %39 = OpSLessThan %bool %30 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %27
-         %41 = OpLabel
-               OpStore %value %30
-               OpStore %y %float_0_5
-               OpStore %x_55_phi %float_0_5
-               OpStore %x_46_phi %float_0_5
-               OpSelectionMerge %47 None
-               OpSwitch %30 %48 0 %49 1 %50 2 %51
-         %49 = OpLabel
-         %52 = OpFAdd %float %float_0_5 %float_0_5
-               OpStore %y %52
-               OpStore %x_55_phi %52
-               OpBranch %50
-         %50 = OpLabel
-         %53 = OpLoad %float %x_55_phi
-         %54 = OpExtInst %float %55 NClamp %float_1 %float_0_5 %53
-               OpStore %y %54
-               OpStore %x_46_phi %54
-               OpBranch %48
-         %48 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-         %57 = OpLoad %float %x_46_phi
-         %58 = OpFOrdEqual %bool %57 %float_1
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-         %63 = OpIAdd %int %30 %int_1
-         %61 = OpConvertSToF %float %63
-         %65 = OpCompositeConstruct %v4float %61 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %65
-               OpReturn
-         %59 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %66 = OpIAdd %int %30 %int_1
-               OpStore %i %66
-               OpStore %x_31_phi %66
-               OpBranch %26
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index b469ccc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var value : i32;
-  var y : f32;
-  var x_31_phi : i32;
-  i = 0;
-  x_31_phi = 0;
-  loop {
-    let x_31 : i32 = x_31_phi;
-    let x_37 : f32 = x_6.injectionSwitch.x;
-    if ((x_31 < (2 + i32(x_37)))) {
-    } else {
-      break;
-    }
-    var x_55_phi : f32;
-    var x_46_phi : f32;
-    value = x_31;
-    y = 0.5;
-    x_55_phi = 0.5;
-    x_46_phi = 0.5;
-    switch(x_31) {
-      case 0: {
-        let x_54 : f32 = (0.5 + 0.5);
-        y = x_54;
-        x_55_phi = x_54;
-        fallthrough;
-      }
-      case 1: {
-        let x_55 : f32 = x_55_phi;
-        let x_47 : f32 = clamp(1.0, 0.5, x_55);
-        y = x_47;
-        x_46_phi = x_47;
-        fallthrough;
-      }
-      default: {
-        fallthrough;
-      }
-      case 2: {
-        let x_46 : f32 = x_46_phi;
-        if ((x_46 == 1.0)) {
-          x_GLF_color = vec4<f32>(f32((x_31 + 1)), 0.0, 0.0, 1.0);
-          return;
-        }
-      }
-    }
-
-    continuing {
-      let x_32 : i32 = (x_31 + 1);
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b914058..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int value = 0;
-  float y = 0.0f;
-  int x_31_phi = 0;
-  i = 0;
-  x_31_phi = 0;
-  while (true) {
-    const int x_31 = x_31_phi;
-    const float x_37 = asfloat(x_6[0].x);
-    if ((x_31 < (2 + int(x_37)))) {
-    } else {
-      break;
-    }
-    float x_55_phi = 0.0f;
-    float x_46_phi = 0.0f;
-    value = x_31;
-    y = 0.5f;
-    x_55_phi = 0.5f;
-    x_46_phi = 0.5f;
-    switch(x_31) {
-      case 0: {
-        const float x_54 = (0.5f + 0.5f);
-        y = x_54;
-        x_55_phi = x_54;
-        /* fallthrough */
-        {
-          const float x_47 = clamp(1.0f, 0.5f, x_55_phi);
-          y = x_47;
-          x_46_phi = x_47;
-          /* fallthrough */
-        }
-        {
-          /* fallthrough */
-        }
-        {
-          if ((x_46_phi == 1.0f)) {
-            x_GLF_color = float4(float((x_31 + 1)), 0.0f, 0.0f, 1.0f);
-            return;
-          }
-        }
-        break;
-      }
-      case 1: {
-        const float x_47 = clamp(1.0f, 0.5f, x_55_phi);
-        y = x_47;
-        x_46_phi = x_47;
-        /* fallthrough */
-        {
-          /* fallthrough */
-        }
-        {
-          if ((x_46_phi == 1.0f)) {
-            x_GLF_color = float4(float((x_31 + 1)), 0.0f, 0.0f, 1.0f);
-            return;
-          }
-        }
-        break;
-      }
-      default: {
-        /* fallthrough */
-        {
-          if ((x_46_phi == 1.0f)) {
-            x_GLF_color = float4(float((x_31 + 1)), 0.0f, 0.0f, 1.0f);
-            return;
-          }
-        }
-        break;
-      }
-      case 2: {
-        if ((x_46_phi == 1.0f)) {
-          x_GLF_color = float4(float((x_31 + 1)), 0.0f, 0.0f, 1.0f);
-          return;
-        }
-        break;
-      }
-    }
-    {
-      const int x_32 = (x_31 + 1);
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.msl
deleted file mode 100644
index 54478d4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int i = 0;
-  int value = 0;
-  float y = 0.0f;
-  int x_31_phi = 0;
-  i = 0;
-  x_31_phi = 0;
-  while (true) {
-    int const x_31 = x_31_phi;
-    float const x_37 = x_6.injectionSwitch.x;
-    if ((x_31 < as_type<int>((as_type<uint>(2) + as_type<uint>(int(x_37)))))) {
-    } else {
-      break;
-    }
-    float x_55_phi = 0.0f;
-    float x_46_phi = 0.0f;
-    value = x_31;
-    y = 0.5f;
-    x_55_phi = 0.5f;
-    x_46_phi = 0.5f;
-    switch(x_31) {
-      case 0: {
-        float const x_54 = (0.5f + 0.5f);
-        y = x_54;
-        x_55_phi = x_54;
-        /* fallthrough */
-      }
-      case 1: {
-        float const x_55 = x_55_phi;
-        float const x_47 = clamp(1.0f, 0.5f, x_55);
-        y = x_47;
-        x_46_phi = x_47;
-        /* fallthrough */
-      }
-      default: {
-        /* fallthrough */
-      }
-      case 2: {
-        float const x_46 = x_46_phi;
-        if ((x_46 == 1.0f)) {
-          *(tint_symbol_3) = float4(float(as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)))), 0.0f, 0.0f, 1.0f);
-          return;
-        }
-        break;
-      }
-    }
-    {
-      int const x_32 = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 43d00ed..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,147 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-         %55 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %value "value"
-               OpName %y "y"
-               OpName %x_31_phi "x_31_phi"
-               OpName %x_55_phi "x_55_phi"
-               OpName %x_46_phi "x_46_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %23 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %19
-      %value = OpVariable %_ptr_Function_int Function %19
-          %y = OpVariable %_ptr_Function_float Function %23
-   %x_31_phi = OpVariable %_ptr_Function_int Function %19
-   %x_55_phi = OpVariable %_ptr_Function_float Function %23
-   %x_46_phi = OpVariable %_ptr_Function_float Function %23
-               OpStore %i %int_0
-               OpStore %x_31_phi %int_0
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %x_31_phi
-         %34 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %35 = OpLoad %float %34
-         %37 = OpConvertFToS %int %35
-         %38 = OpIAdd %int %int_2 %37
-         %39 = OpSLessThan %bool %30 %38
-               OpSelectionMerge %41 None
-               OpBranchConditional %39 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %27
-         %41 = OpLabel
-               OpStore %value %30
-               OpStore %y %float_0_5
-               OpStore %x_55_phi %float_0_5
-               OpStore %x_46_phi %float_0_5
-               OpSelectionMerge %47 None
-               OpSwitch %30 %48 0 %49 1 %50 2 %51
-         %49 = OpLabel
-         %52 = OpFAdd %float %float_0_5 %float_0_5
-               OpStore %y %52
-               OpStore %x_55_phi %52
-               OpBranch %50
-         %50 = OpLabel
-         %53 = OpLoad %float %x_55_phi
-         %54 = OpExtInst %float %55 NClamp %float_1 %float_0_5 %53
-               OpStore %y %54
-               OpStore %x_46_phi %54
-               OpBranch %48
-         %48 = OpLabel
-               OpBranch %51
-         %51 = OpLabel
-         %57 = OpLoad %float %x_46_phi
-         %58 = OpFOrdEqual %bool %57 %float_1
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-         %63 = OpIAdd %int %30 %int_1
-         %61 = OpConvertSToF %float %63
-         %65 = OpCompositeConstruct %v4float %61 %float_0 %float_0 %float_1
-               OpStore %x_GLF_color %65
-               OpReturn
-         %59 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %66 = OpIAdd %int %30 %int_1
-               OpStore %i %66
-               OpStore %x_31_phi %66
-               OpBranch %26
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index b469ccc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/switch-with-fall-through-cases/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,74 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var value : i32;
-  var y : f32;
-  var x_31_phi : i32;
-  i = 0;
-  x_31_phi = 0;
-  loop {
-    let x_31 : i32 = x_31_phi;
-    let x_37 : f32 = x_6.injectionSwitch.x;
-    if ((x_31 < (2 + i32(x_37)))) {
-    } else {
-      break;
-    }
-    var x_55_phi : f32;
-    var x_46_phi : f32;
-    value = x_31;
-    y = 0.5;
-    x_55_phi = 0.5;
-    x_46_phi = 0.5;
-    switch(x_31) {
-      case 0: {
-        let x_54 : f32 = (0.5 + 0.5);
-        y = x_54;
-        x_55_phi = x_54;
-        fallthrough;
-      }
-      case 1: {
-        let x_55 : f32 = x_55_phi;
-        let x_47 : f32 = clamp(1.0, 0.5, x_55);
-        y = x_47;
-        x_46_phi = x_47;
-        fallthrough;
-      }
-      default: {
-        fallthrough;
-      }
-      case 2: {
-        let x_46 : f32 = x_46_phi;
-        if ((x_46 == 1.0)) {
-          x_GLF_color = vec4<f32>(f32((x_31 + 1)), 0.0, 0.0, 1.0);
-          return;
-        }
-      }
-    }
-
-    continuing {
-      let x_32 : i32 = (x_31 + 1);
-      i = x_32;
-      x_31_phi = x_32;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.hlsl
deleted file mode 100644
index 4a7a33d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,51 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x3 x_37 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float4x3 x_38_phi = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3 x_48_phi = float3(0.0f, 0.0f, 0.0f);
-  const float x_32 = gl_FragCoord.y;
-  if ((x_32 < 1.0f)) {
-    x_38_phi = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  } else {
-    x_37 = transpose(float3x4(float4(1.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 1.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 1.0f, 0.0f)));
-    x_38_phi = x_37;
-  }
-  const float x_40 = transpose(x_38_phi)[0u].y;
-  while (true) {
-    if ((x_40 > 1.0f)) {
-      x_48_phi = float3(0.0f, 0.0f, 0.0f);
-      break;
-    }
-    x_48_phi = float3(1.0f, 0.0f, 0.0f);
-    break;
-  }
-  const float3 x_48 = x_48_phi;
-  x_GLF_color = float4(x_48.x, x_48.y, x_48.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.msl
deleted file mode 100644
index 35079da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4x3 x_37 = float4x3(0.0f);
-  float4x3 x_38_phi = float4x3(0.0f);
-  float3 x_48_phi = 0.0f;
-  float const x_32 = (*(tint_symbol_3)).y;
-  if ((x_32 < 1.0f)) {
-    x_38_phi = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  } else {
-    x_37 = transpose(float3x4(float4(1.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 1.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 1.0f, 0.0f)));
-    x_38_phi = x_37;
-  }
-  float4x3 const x_38 = x_38_phi;
-  float const x_40 = transpose(x_38)[0u].y;
-  while (true) {
-    if ((x_40 > 1.0f)) {
-      x_48_phi = float3(0.0f, 0.0f, 0.0f);
-      break;
-    }
-    x_48_phi = float3(1.0f, 0.0f, 0.0f);
-    break;
-  }
-  float3 const x_48 = x_48_phi;
-  *(tint_symbol_4) = float4(x_48.x, x_48.y, x_48.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.spvasm
deleted file mode 100644
index 11bba6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %x_37 "x_37"
-               OpName %x_38_phi "x_38_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %19 = OpConstantNull %mat4v3float
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %23 = OpConstantNull %v3float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %37 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-         %38 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %40 = OpConstantComposite %mat4v3float %36 %37 %38 %39
-%mat3v4float = OpTypeMatrix %v4float 3
-         %43 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_0
-         %44 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_0
-         %45 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_0
-         %46 = OpConstantComposite %mat3v4float %43 %44 %45
-     %uint_0 = OpConstant %uint 0
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_37 = OpVariable %_ptr_Function_mat4v3float Function %19
-   %x_38_phi = OpVariable %_ptr_Function_mat4v3float Function %19
-   %x_48_phi = OpVariable %_ptr_Function_v3float Function %23
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %28 = OpLoad %float %27
-         %30 = OpFOrdLessThan %bool %28 %float_1
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpStore %x_38_phi %40
-               OpBranch %32
-         %34 = OpLabel
-         %41 = OpTranspose %mat4v3float %46
-               OpStore %x_37 %41
-         %47 = OpLoad %mat4v3float %x_37
-               OpStore %x_38_phi %47
-               OpBranch %32
-         %32 = OpLabel
-         %48 = OpLoad %mat4v3float %x_38_phi
-         %49 = OpTranspose %mat3v4float %48
-         %51 = OpCompositeExtract %v4float %49 0
-         %52 = OpCompositeExtract %float %51 1
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpFOrdGreaterThan %bool %52 %float_1
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpStore %x_48_phi %39
-               OpBranch %54
-         %58 = OpLabel
-               OpStore %x_48_phi %36
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %53
-         %54 = OpLabel
-         %60 = OpLoad %v3float %x_48_phi
-         %61 = OpCompositeExtract %float %60 0
-         %62 = OpCompositeExtract %float %60 1
-         %63 = OpCompositeExtract %float %60 2
-         %64 = OpCompositeConstruct %v4float %61 %62 %63 %float_1
-               OpStore %x_GLF_color %64
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.wgsl
deleted file mode 100644
index cf0d932..0000000
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var x_37 : mat4x3<f32>;
-  var x_38_phi : mat4x3<f32>;
-  var x_48_phi : vec3<f32>;
-  let x_32 : f32 = gl_FragCoord.y;
-  if ((x_32 < 1.0)) {
-    x_38_phi = mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0));
-  } else {
-    x_37 = transpose(mat3x4<f32>(vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 1.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 1.0, 0.0)));
-    x_38_phi = x_37;
-  }
-  let x_38 : mat4x3<f32> = x_38_phi;
-  let x_40 : f32 = transpose(x_38)[0u].y;
-  loop {
-    if ((x_40 > 1.0)) {
-      x_48_phi = vec3<f32>(0.0, 0.0, 0.0);
-      break;
-    }
-    x_48_phi = vec3<f32>(1.0, 0.0, 0.0);
-    break;
-  }
-  let x_48 : vec3<f32> = x_48_phi;
-  x_GLF_color = vec4<f32>(x_48.x, x_48.y, x_48.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.hlsl
deleted file mode 100644
index 4a7a33d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,51 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x3 x_37 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float4x3 x_38_phi = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  float3 x_48_phi = float3(0.0f, 0.0f, 0.0f);
-  const float x_32 = gl_FragCoord.y;
-  if ((x_32 < 1.0f)) {
-    x_38_phi = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  } else {
-    x_37 = transpose(float3x4(float4(1.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 1.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 1.0f, 0.0f)));
-    x_38_phi = x_37;
-  }
-  const float x_40 = transpose(x_38_phi)[0u].y;
-  while (true) {
-    if ((x_40 > 1.0f)) {
-      x_48_phi = float3(0.0f, 0.0f, 0.0f);
-      break;
-    }
-    x_48_phi = float3(1.0f, 0.0f, 0.0f);
-    break;
-  }
-  const float3 x_48 = x_48_phi;
-  x_GLF_color = float4(x_48.x, x_48.y, x_48.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.msl
deleted file mode 100644
index 35079da..0000000
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float4x3 x_37 = float4x3(0.0f);
-  float4x3 x_38_phi = float4x3(0.0f);
-  float3 x_48_phi = 0.0f;
-  float const x_32 = (*(tint_symbol_3)).y;
-  if ((x_32 < 1.0f)) {
-    x_38_phi = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  } else {
-    x_37 = transpose(float3x4(float4(1.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 1.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 1.0f, 0.0f)));
-    x_38_phi = x_37;
-  }
-  float4x3 const x_38 = x_38_phi;
-  float const x_40 = transpose(x_38)[0u].y;
-  while (true) {
-    if ((x_40 > 1.0f)) {
-      x_48_phi = float3(0.0f, 0.0f, 0.0f);
-      break;
-    }
-    x_48_phi = float3(1.0f, 0.0f, 0.0f);
-    break;
-  }
-  float3 const x_48 = x_48_phi;
-  *(tint_symbol_4) = float4(x_48.x, x_48.y, x_48.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.spvasm
deleted file mode 100644
index 11bba6d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,128 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %x_37 "x_37"
-               OpName %x_38_phi "x_38_phi"
-               OpName %x_48_phi "x_48_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %19 = OpConstantNull %mat4v3float
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %23 = OpConstantNull %v3float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Private_float = OpTypePointer Private %float
-    %float_1 = OpConstant %float 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %36 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %37 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-         %38 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %39 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %40 = OpConstantComposite %mat4v3float %36 %37 %38 %39
-%mat3v4float = OpTypeMatrix %v4float 3
-         %43 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_0
-         %44 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_0
-         %45 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_0
-         %46 = OpConstantComposite %mat3v4float %43 %44 %45
-     %uint_0 = OpConstant %uint 0
-   %main_out = OpTypeStruct %v4float
-         %65 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_37 = OpVariable %_ptr_Function_mat4v3float Function %19
-   %x_38_phi = OpVariable %_ptr_Function_mat4v3float Function %19
-   %x_48_phi = OpVariable %_ptr_Function_v3float Function %23
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %28 = OpLoad %float %27
-         %30 = OpFOrdLessThan %bool %28 %float_1
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-               OpStore %x_38_phi %40
-               OpBranch %32
-         %34 = OpLabel
-         %41 = OpTranspose %mat4v3float %46
-               OpStore %x_37 %41
-         %47 = OpLoad %mat4v3float %x_37
-               OpStore %x_38_phi %47
-               OpBranch %32
-         %32 = OpLabel
-         %48 = OpLoad %mat4v3float %x_38_phi
-         %49 = OpTranspose %mat3v4float %48
-         %51 = OpCompositeExtract %v4float %49 0
-         %52 = OpCompositeExtract %float %51 1
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpFOrdGreaterThan %bool %52 %float_1
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpStore %x_48_phi %39
-               OpBranch %54
-         %58 = OpLabel
-               OpStore %x_48_phi %36
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %53
-         %54 = OpLabel
-         %60 = OpLoad %v3float %x_48_phi
-         %61 = OpCompositeExtract %float %60 0
-         %62 = OpCompositeExtract %float %60 1
-         %63 = OpCompositeExtract %float %60 2
-         %64 = OpCompositeConstruct %v4float %61 %62 %63 %float_1
-               OpStore %x_GLF_color %64
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %65
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %69 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %70 = OpFunctionCall %void %main_1
-         %71 = OpLoad %v4float %x_GLF_color
-         %72 = OpCompositeConstruct %main_out %71
-               OpReturnValue %72
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %74 = OpLabel
-         %76 = OpLoad %v4float %gl_FragCoord_param_1
-         %75 = OpFunctionCall %main_out %main_inner %76
-         %77 = OpCompositeExtract %v4float %75 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.wgsl
deleted file mode 100644
index cf0d932..0000000
--- a/test/vk-gl-cts/graphicsfuzz/transpose-rectangular-matrix/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,41 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var x_37 : mat4x3<f32>;
-  var x_38_phi : mat4x3<f32>;
-  var x_48_phi : vec3<f32>;
-  let x_32 : f32 = gl_FragCoord.y;
-  if ((x_32 < 1.0)) {
-    x_38_phi = mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0));
-  } else {
-    x_37 = transpose(mat3x4<f32>(vec4<f32>(1.0, 0.0, 0.0, 0.0), vec4<f32>(0.0, 1.0, 0.0, 0.0), vec4<f32>(0.0, 0.0, 1.0, 0.0)));
-    x_38_phi = x_37;
-  }
-  let x_38 : mat4x3<f32> = x_38_phi;
-  let x_40 : f32 = transpose(x_38)[0u].y;
-  loop {
-    if ((x_40 > 1.0)) {
-      x_48_phi = vec3<f32>(0.0, 0.0, 0.0);
-      break;
-    }
-    x_48_phi = vec3<f32>(1.0, 0.0, 0.0);
-    break;
-  }
-  let x_48 : vec3<f32> = x_48_phi;
-  x_GLF_color = vec4<f32>(x_48.x, x_48.y, x_48.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d0d6cae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,101 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-
-void main_1() {
-  int odd_index = 0;
-  int even_index = 0;
-  int j = 0;
-  int ll = 0;
-  bool x_59 = false;
-  bool x_60_phi = false;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const float x_53 = gl_FragCoord.x;
-  const bool x_54 = (x_53 < 128.0f);
-  x_60_phi = x_54;
-  if (x_54) {
-    const float x_58 = gl_FragCoord.y;
-    x_59 = (x_58 < 128.0f);
-    x_60_phi = x_59;
-  }
-  if (x_60_phi) {
-    return;
-  }
-  odd_index = 0;
-  while (true) {
-    if ((odd_index <= 1)) {
-    } else {
-      break;
-    }
-    const float x_70 = x_GLF_color.x;
-    x_GLF_color.x = (x_70 + 0.25f);
-    odd_index = (odd_index + 1);
-  }
-  even_index = 1;
-  while (true) {
-    if ((even_index >= 0)) {
-    } else {
-      break;
-    }
-    const float x_80 = x_GLF_color.x;
-    x_GLF_color.x = (x_80 + 0.25f);
-    const float x_84 = asfloat(x_8[0].x);
-    const float x_86 = asfloat(x_8[0].y);
-    if ((x_84 > x_86)) {
-      continue;
-    }
-    if ((even_index >= 1)) {
-      discard;
-    }
-    j = 1;
-    {
-      for(; true; j = (j + 1)) {
-        if ((ll >= 3)) {
-          break;
-        }
-        ll = (ll + 1);
-        if ((asuint(j) < 1u)) {
-          continue;
-        }
-        const float x_106 = asfloat(x_8[0].x);
-        const float x_108 = asfloat(x_8[0].y);
-        if ((x_106 > x_108)) {
-          break;
-        }
-      }
-    }
-    const float x_113 = asfloat(x_8[0].x);
-    const float x_115 = asfloat(x_8[0].y);
-    if ((x_113 > x_115)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    }
-    even_index = (even_index - 1);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3c63eb8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,120 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int odd_index = 0;
-  int even_index = 0;
-  int j = 0;
-  int ll = 0;
-  bool x_59 = false;
-  bool x_60_phi = false;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_53 = (*(tint_symbol_4)).x;
-  bool const x_54 = (x_53 < 128.0f);
-  x_60_phi = x_54;
-  if (x_54) {
-    float const x_58 = (*(tint_symbol_4)).y;
-    x_59 = (x_58 < 128.0f);
-    x_60_phi = x_59;
-  }
-  bool const x_60 = x_60_phi;
-  if (x_60) {
-    return;
-  }
-  odd_index = 0;
-  while (true) {
-    int const x_11 = odd_index;
-    if ((x_11 <= 1)) {
-    } else {
-      break;
-    }
-    float const x_70 = (*(tint_symbol_3)).x;
-    (*(tint_symbol_3)).x = (x_70 + 0.25f);
-    int const x_12 = odd_index;
-    odd_index = as_type<int>((as_type<uint>(x_12) + as_type<uint>(1)));
-  }
-  even_index = 1;
-  while (true) {
-    int const x_14 = even_index;
-    if ((x_14 >= 0)) {
-    } else {
-      break;
-    }
-    float const x_80 = (*(tint_symbol_3)).x;
-    (*(tint_symbol_3)).x = (x_80 + 0.25f);
-    float const x_84 = x_8.injectionSwitch.x;
-    float const x_86 = x_8.injectionSwitch.y;
-    if ((x_84 > x_86)) {
-      continue;
-    }
-    int const x_15 = even_index;
-    if ((x_15 >= 1)) {
-      discard_fragment();
-    }
-    j = 1;
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      int const x_16 = ll;
-      if ((x_16 >= 3)) {
-        break;
-      }
-      int const x_17 = ll;
-      ll = as_type<int>((as_type<uint>(x_17) + as_type<uint>(1)));
-      int const x_19 = j;
-      if ((as_type<uint>(x_19) < 1u)) {
-        {
-          int const x_20 = j;
-          j = as_type<int>((as_type<uint>(x_20) + as_type<uint>(1)));
-        }
-        continue;
-      }
-      float const x_106 = x_8.injectionSwitch.x;
-      float const x_108 = x_8.injectionSwitch.y;
-      if ((x_106 > x_108)) {
-        break;
-      }
-      {
-        int const x_20 = j;
-        j = as_type<int>((as_type<uint>(x_20) + as_type<uint>(1)));
-      }
-    }
-    float const x_113 = x_8.injectionSwitch.x;
-    float const x_115 = x_8.injectionSwitch.y;
-    if ((x_113 > x_115)) {
-      *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    }
-    int const x_22 = even_index;
-    even_index = as_type<int>((as_type<uint>(x_22) - as_type<uint>(1)));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 43f37e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,254 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 146
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %odd_index "odd_index"
-               OpName %even_index "even_index"
-               OpName %j "j"
-               OpName %ll "ll"
-               OpName %x_59 "x_59"
-               OpName %x_60_phi "x_60_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %29 = OpConstantNull %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_128 = OpConstant %float 128
-     %uint_1 = OpConstant %uint 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
- %float_0_25 = OpConstant %float 0.25
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-      %int_3 = OpConstant %int 3
-        %130 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %133 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %odd_index = OpVariable %_ptr_Function_int Function %22
- %even_index = OpVariable %_ptr_Function_int Function %22
-          %j = OpVariable %_ptr_Function_int Function %22
-         %ll = OpVariable %_ptr_Function_int Function %22
-       %x_59 = OpVariable %_ptr_Function_bool Function %29
-   %x_60_phi = OpVariable %_ptr_Function_bool Function %29
-               OpStore %x_GLF_color %33
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %40 = OpFOrdLessThan %bool %38 %float_128
-               OpStore %x_60_phi %40
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-         %44 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %45 = OpLoad %float %44
-         %46 = OpFOrdLessThan %bool %45 %float_128
-               OpStore %x_59 %46
-         %47 = OpLoad %bool %x_59
-               OpStore %x_60_phi %47
-               OpBranch %41
-         %41 = OpLabel
-         %48 = OpLoad %bool %x_60_phi
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-               OpReturn
-         %49 = OpLabel
-               OpStore %odd_index %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %odd_index
-         %58 = OpSLessThanEqual %bool %56 %int_1
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpBranch %59
-         %61 = OpLabel
-               OpBranch %53
-         %59 = OpLabel
-         %62 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %63 = OpLoad %float %62
-         %64 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %66 = OpFAdd %float %63 %float_0_25
-               OpStore %64 %66
-         %67 = OpLoad %int %odd_index
-         %68 = OpIAdd %int %67 %int_1
-               OpStore %odd_index %68
-               OpBranch %54
-         %54 = OpLabel
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %even_index %int_1
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %even_index
-         %74 = OpSGreaterThanEqual %bool %73 %int_0
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %70
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %81 = OpFAdd %float %79 %float_0_25
-               OpStore %80 %81
-         %83 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %84 = OpLoad %float %83
-         %85 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %86 = OpLoad %float %85
-         %87 = OpFOrdGreaterThan %bool %84 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpBranch %71
-         %88 = OpLabel
-         %90 = OpLoad %int %even_index
-         %91 = OpSGreaterThanEqual %bool %90 %int_1
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %92
-         %93 = OpLabel
-               OpKill
-         %92 = OpLabel
-               OpStore %j %int_1
-               OpBranch %94
-         %94 = OpLabel
-               OpLoopMerge %95 %96 None
-               OpBranch %97
-         %97 = OpLabel
-               OpSelectionMerge %99 None
-               OpBranchConditional %true %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %95
-         %99 = OpLabel
-        %102 = OpLoad %int %ll
-        %104 = OpSGreaterThanEqual %bool %102 %int_3
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %105
-        %106 = OpLabel
-               OpBranch %95
-        %105 = OpLabel
-        %107 = OpLoad %int %ll
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %ll %108
-        %109 = OpLoad %int %j
-        %110 = OpBitcast %uint %109
-        %111 = OpULessThan %bool %110 %uint_1
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %112
-        %113 = OpLabel
-               OpBranch %96
-        %112 = OpLabel
-        %114 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %115 = OpLoad %float %114
-        %116 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %117 = OpLoad %float %116
-        %118 = OpFOrdGreaterThan %bool %115 %117
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpBranch %95
-        %119 = OpLabel
-               OpBranch %96
-         %96 = OpLabel
-        %121 = OpLoad %int %j
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %j %122
-               OpBranch %94
-         %95 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %124 = OpLoad %float %123
-        %125 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %126 = OpLoad %float %125
-        %127 = OpFOrdGreaterThan %bool %124 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %128
-        %129 = OpLabel
-               OpStore %x_GLF_color %130
-               OpBranch %128
-        %128 = OpLabel
-        %131 = OpLoad %int %even_index
-        %132 = OpISub %int %131 %int_1
-               OpStore %even_index %132
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %69
-         %70 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %133
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %137 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %138 = OpFunctionCall %void %main_1
-        %139 = OpLoad %v4float %x_GLF_color
-        %140 = OpCompositeConstruct %main_out %139
-               OpReturnValue %140
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %142 = OpLabel
-        %144 = OpLoad %v4float %gl_FragCoord_param_1
-        %143 = OpFunctionCall %main_out %main_inner %144
-        %145 = OpCompositeExtract %v4float %143 0
-               OpStore %x_GLF_color_1_1 %145
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index aec3b11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,110 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var odd_index : i32;
-  var even_index : i32;
-  var j : i32;
-  var ll : i32;
-  var x_59 : bool;
-  var x_60_phi : bool;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_53 : f32 = gl_FragCoord.x;
-  let x_54 : bool = (x_53 < 128.0);
-  x_60_phi = x_54;
-  if (x_54) {
-    let x_58 : f32 = gl_FragCoord.y;
-    x_59 = (x_58 < 128.0);
-    x_60_phi = x_59;
-  }
-  let x_60 : bool = x_60_phi;
-  if (x_60) {
-    return;
-  }
-  odd_index = 0;
-  loop {
-    let x_11 : i32 = odd_index;
-    if ((x_11 <= 1)) {
-    } else {
-      break;
-    }
-    let x_70 : f32 = x_GLF_color.x;
-    x_GLF_color.x = (x_70 + 0.25);
-    let x_12 : i32 = odd_index;
-    odd_index = (x_12 + 1);
-  }
-  even_index = 1;
-  loop {
-    let x_14 : i32 = even_index;
-    if ((x_14 >= 0)) {
-    } else {
-      break;
-    }
-    let x_80 : f32 = x_GLF_color.x;
-    x_GLF_color.x = (x_80 + 0.25);
-    let x_84 : f32 = x_8.injectionSwitch.x;
-    let x_86 : f32 = x_8.injectionSwitch.y;
-    if ((x_84 > x_86)) {
-      continue;
-    }
-    let x_15 : i32 = even_index;
-    if ((x_15 >= 1)) {
-      discard;
-    }
-    j = 1;
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-      let x_16 : i32 = ll;
-      if ((x_16 >= 3)) {
-        break;
-      }
-      let x_17 : i32 = ll;
-      ll = (x_17 + 1);
-      let x_19 : i32 = j;
-      if ((bitcast<u32>(x_19) < 1u)) {
-        continue;
-      }
-      let x_106 : f32 = x_8.injectionSwitch.x;
-      let x_108 : f32 = x_8.injectionSwitch.y;
-      if ((x_106 > x_108)) {
-        break;
-      }
-
-      continuing {
-        let x_20 : i32 = j;
-        j = (x_20 + 1);
-      }
-    }
-    let x_113 : f32 = x_8.injectionSwitch.x;
-    let x_115 : f32 = x_8.injectionSwitch.y;
-    if ((x_113 > x_115)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    }
-    let x_22 : i32 = even_index;
-    even_index = (x_22 - 1);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d0d6cae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,101 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[1];
-};
-
-void main_1() {
-  int odd_index = 0;
-  int even_index = 0;
-  int j = 0;
-  int ll = 0;
-  bool x_59 = false;
-  bool x_60_phi = false;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const float x_53 = gl_FragCoord.x;
-  const bool x_54 = (x_53 < 128.0f);
-  x_60_phi = x_54;
-  if (x_54) {
-    const float x_58 = gl_FragCoord.y;
-    x_59 = (x_58 < 128.0f);
-    x_60_phi = x_59;
-  }
-  if (x_60_phi) {
-    return;
-  }
-  odd_index = 0;
-  while (true) {
-    if ((odd_index <= 1)) {
-    } else {
-      break;
-    }
-    const float x_70 = x_GLF_color.x;
-    x_GLF_color.x = (x_70 + 0.25f);
-    odd_index = (odd_index + 1);
-  }
-  even_index = 1;
-  while (true) {
-    if ((even_index >= 0)) {
-    } else {
-      break;
-    }
-    const float x_80 = x_GLF_color.x;
-    x_GLF_color.x = (x_80 + 0.25f);
-    const float x_84 = asfloat(x_8[0].x);
-    const float x_86 = asfloat(x_8[0].y);
-    if ((x_84 > x_86)) {
-      continue;
-    }
-    if ((even_index >= 1)) {
-      discard;
-    }
-    j = 1;
-    {
-      for(; true; j = (j + 1)) {
-        if ((ll >= 3)) {
-          break;
-        }
-        ll = (ll + 1);
-        if ((asuint(j) < 1u)) {
-          continue;
-        }
-        const float x_106 = asfloat(x_8[0].x);
-        const float x_108 = asfloat(x_8[0].y);
-        if ((x_106 > x_108)) {
-          break;
-        }
-      }
-    }
-    const float x_113 = asfloat(x_8[0].x);
-    const float x_115 = asfloat(x_8[0].y);
-    if ((x_113 > x_115)) {
-      x_GLF_color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    }
-    even_index = (even_index - 1);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3c63eb8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,120 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int odd_index = 0;
-  int even_index = 0;
-  int j = 0;
-  int ll = 0;
-  bool x_59 = false;
-  bool x_60_phi = false;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_53 = (*(tint_symbol_4)).x;
-  bool const x_54 = (x_53 < 128.0f);
-  x_60_phi = x_54;
-  if (x_54) {
-    float const x_58 = (*(tint_symbol_4)).y;
-    x_59 = (x_58 < 128.0f);
-    x_60_phi = x_59;
-  }
-  bool const x_60 = x_60_phi;
-  if (x_60) {
-    return;
-  }
-  odd_index = 0;
-  while (true) {
-    int const x_11 = odd_index;
-    if ((x_11 <= 1)) {
-    } else {
-      break;
-    }
-    float const x_70 = (*(tint_symbol_3)).x;
-    (*(tint_symbol_3)).x = (x_70 + 0.25f);
-    int const x_12 = odd_index;
-    odd_index = as_type<int>((as_type<uint>(x_12) + as_type<uint>(1)));
-  }
-  even_index = 1;
-  while (true) {
-    int const x_14 = even_index;
-    if ((x_14 >= 0)) {
-    } else {
-      break;
-    }
-    float const x_80 = (*(tint_symbol_3)).x;
-    (*(tint_symbol_3)).x = (x_80 + 0.25f);
-    float const x_84 = x_8.injectionSwitch.x;
-    float const x_86 = x_8.injectionSwitch.y;
-    if ((x_84 > x_86)) {
-      continue;
-    }
-    int const x_15 = even_index;
-    if ((x_15 >= 1)) {
-      discard_fragment();
-    }
-    j = 1;
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      int const x_16 = ll;
-      if ((x_16 >= 3)) {
-        break;
-      }
-      int const x_17 = ll;
-      ll = as_type<int>((as_type<uint>(x_17) + as_type<uint>(1)));
-      int const x_19 = j;
-      if ((as_type<uint>(x_19) < 1u)) {
-        {
-          int const x_20 = j;
-          j = as_type<int>((as_type<uint>(x_20) + as_type<uint>(1)));
-        }
-        continue;
-      }
-      float const x_106 = x_8.injectionSwitch.x;
-      float const x_108 = x_8.injectionSwitch.y;
-      if ((x_106 > x_108)) {
-        break;
-      }
-      {
-        int const x_20 = j;
-        j = as_type<int>((as_type<uint>(x_20) + as_type<uint>(1)));
-      }
-    }
-    float const x_113 = x_8.injectionSwitch.x;
-    float const x_115 = x_8.injectionSwitch.y;
-    if ((x_113 > x_115)) {
-      *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-    }
-    int const x_22 = even_index;
-    even_index = as_type<int>((as_type<uint>(x_22) - as_type<uint>(1)));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_8, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 43f37e2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,254 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 146
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %odd_index "odd_index"
-               OpName %even_index "even_index"
-               OpName %j "j"
-               OpName %ll "ll"
-               OpName %x_59 "x_59"
-               OpName %x_60_phi "x_60_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %29 = OpConstantNull %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_128 = OpConstant %float 128
-     %uint_1 = OpConstant %uint 1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
- %float_0_25 = OpConstant %float 0.25
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %true = OpConstantTrue %bool
-      %int_3 = OpConstant %int 3
-        %130 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-        %133 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-  %odd_index = OpVariable %_ptr_Function_int Function %22
- %even_index = OpVariable %_ptr_Function_int Function %22
-          %j = OpVariable %_ptr_Function_int Function %22
-         %ll = OpVariable %_ptr_Function_int Function %22
-       %x_59 = OpVariable %_ptr_Function_bool Function %29
-   %x_60_phi = OpVariable %_ptr_Function_bool Function %29
-               OpStore %x_GLF_color %33
-         %37 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %38 = OpLoad %float %37
-         %40 = OpFOrdLessThan %bool %38 %float_128
-               OpStore %x_60_phi %40
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-         %44 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %45 = OpLoad %float %44
-         %46 = OpFOrdLessThan %bool %45 %float_128
-               OpStore %x_59 %46
-         %47 = OpLoad %bool %x_59
-               OpStore %x_60_phi %47
-               OpBranch %41
-         %41 = OpLabel
-         %48 = OpLoad %bool %x_60_phi
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %49
-         %50 = OpLabel
-               OpReturn
-         %49 = OpLabel
-               OpStore %odd_index %int_0
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %odd_index
-         %58 = OpSLessThanEqual %bool %56 %int_1
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpBranch %59
-         %61 = OpLabel
-               OpBranch %53
-         %59 = OpLabel
-         %62 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %63 = OpLoad %float %62
-         %64 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %66 = OpFAdd %float %63 %float_0_25
-               OpStore %64 %66
-         %67 = OpLoad %int %odd_index
-         %68 = OpIAdd %int %67 %int_1
-               OpStore %odd_index %68
-               OpBranch %54
-         %54 = OpLabel
-               OpBranch %52
-         %53 = OpLabel
-               OpStore %even_index %int_1
-               OpBranch %69
-         %69 = OpLabel
-               OpLoopMerge %70 %71 None
-               OpBranch %72
-         %72 = OpLabel
-         %73 = OpLoad %int %even_index
-         %74 = OpSGreaterThanEqual %bool %73 %int_0
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-               OpBranch %75
-         %77 = OpLabel
-               OpBranch %70
-         %75 = OpLabel
-         %78 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %79 = OpLoad %float %78
-         %80 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %81 = OpFAdd %float %79 %float_0_25
-               OpStore %80 %81
-         %83 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-         %84 = OpLoad %float %83
-         %85 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-         %86 = OpLoad %float %85
-         %87 = OpFOrdGreaterThan %bool %84 %86
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %88
-         %89 = OpLabel
-               OpBranch %71
-         %88 = OpLabel
-         %90 = OpLoad %int %even_index
-         %91 = OpSGreaterThanEqual %bool %90 %int_1
-               OpSelectionMerge %92 None
-               OpBranchConditional %91 %93 %92
-         %93 = OpLabel
-               OpKill
-         %92 = OpLabel
-               OpStore %j %int_1
-               OpBranch %94
-         %94 = OpLabel
-               OpLoopMerge %95 %96 None
-               OpBranch %97
-         %97 = OpLabel
-               OpSelectionMerge %99 None
-               OpBranchConditional %true %100 %101
-        %100 = OpLabel
-               OpBranch %99
-        %101 = OpLabel
-               OpBranch %95
-         %99 = OpLabel
-        %102 = OpLoad %int %ll
-        %104 = OpSGreaterThanEqual %bool %102 %int_3
-               OpSelectionMerge %105 None
-               OpBranchConditional %104 %106 %105
-        %106 = OpLabel
-               OpBranch %95
-        %105 = OpLabel
-        %107 = OpLoad %int %ll
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %ll %108
-        %109 = OpLoad %int %j
-        %110 = OpBitcast %uint %109
-        %111 = OpULessThan %bool %110 %uint_1
-               OpSelectionMerge %112 None
-               OpBranchConditional %111 %113 %112
-        %113 = OpLabel
-               OpBranch %96
-        %112 = OpLabel
-        %114 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %115 = OpLoad %float %114
-        %116 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %117 = OpLoad %float %116
-        %118 = OpFOrdGreaterThan %bool %115 %117
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %119
-        %120 = OpLabel
-               OpBranch %95
-        %119 = OpLabel
-               OpBranch %96
-         %96 = OpLabel
-        %121 = OpLoad %int %j
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %j %122
-               OpBranch %94
-         %95 = OpLabel
-        %123 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_0
-        %124 = OpLoad %float %123
-        %125 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %uint_1
-        %126 = OpLoad %float %125
-        %127 = OpFOrdGreaterThan %bool %124 %126
-               OpSelectionMerge %128 None
-               OpBranchConditional %127 %129 %128
-        %129 = OpLabel
-               OpStore %x_GLF_color %130
-               OpBranch %128
-        %128 = OpLabel
-        %131 = OpLoad %int %even_index
-        %132 = OpISub %int %131 %int_1
-               OpStore %even_index %132
-               OpBranch %71
-         %71 = OpLabel
-               OpBranch %69
-         %70 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %133
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %137 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %138 = OpFunctionCall %void %main_1
-        %139 = OpLoad %v4float %x_GLF_color
-        %140 = OpCompositeConstruct %main_out %139
-               OpReturnValue %140
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %142 = OpLabel
-        %144 = OpLoad %v4float %gl_FragCoord_param_1
-        %143 = OpFunctionCall %main_out %main_inner %144
-        %145 = OpCompositeExtract %v4float %143 0
-               OpStore %x_GLF_color_1_1 %145
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index aec3b11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-2-iteration-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,110 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-fn main_1() {
-  var odd_index : i32;
-  var even_index : i32;
-  var j : i32;
-  var ll : i32;
-  var x_59 : bool;
-  var x_60_phi : bool;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_53 : f32 = gl_FragCoord.x;
-  let x_54 : bool = (x_53 < 128.0);
-  x_60_phi = x_54;
-  if (x_54) {
-    let x_58 : f32 = gl_FragCoord.y;
-    x_59 = (x_58 < 128.0);
-    x_60_phi = x_59;
-  }
-  let x_60 : bool = x_60_phi;
-  if (x_60) {
-    return;
-  }
-  odd_index = 0;
-  loop {
-    let x_11 : i32 = odd_index;
-    if ((x_11 <= 1)) {
-    } else {
-      break;
-    }
-    let x_70 : f32 = x_GLF_color.x;
-    x_GLF_color.x = (x_70 + 0.25);
-    let x_12 : i32 = odd_index;
-    odd_index = (x_12 + 1);
-  }
-  even_index = 1;
-  loop {
-    let x_14 : i32 = even_index;
-    if ((x_14 >= 0)) {
-    } else {
-      break;
-    }
-    let x_80 : f32 = x_GLF_color.x;
-    x_GLF_color.x = (x_80 + 0.25);
-    let x_84 : f32 = x_8.injectionSwitch.x;
-    let x_86 : f32 = x_8.injectionSwitch.y;
-    if ((x_84 > x_86)) {
-      continue;
-    }
-    let x_15 : i32 = even_index;
-    if ((x_15 >= 1)) {
-      discard;
-    }
-    j = 1;
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-      let x_16 : i32 = ll;
-      if ((x_16 >= 3)) {
-        break;
-      }
-      let x_17 : i32 = ll;
-      ll = (x_17 + 1);
-      let x_19 : i32 = j;
-      if ((bitcast<u32>(x_19) < 1u)) {
-        continue;
-      }
-      let x_106 : f32 = x_8.injectionSwitch.x;
-      let x_108 : f32 = x_8.injectionSwitch.y;
-      if ((x_106 > x_108)) {
-        break;
-      }
-
-      continuing {
-        let x_20 : i32 = j;
-        j = (x_20 + 1);
-      }
-    }
-    let x_113 : f32 = x_8.injectionSwitch.x;
-    let x_115 : f32 = x_8.injectionSwitch.y;
-    if ((x_113 > x_115)) {
-      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-    }
-    let x_22 : i32 = even_index;
-    even_index = (x_22 - 1);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 054c863..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-static float4 GLF_live2gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-RWByteAddressBuffer x_12 : register(u0, space0);
-
-void main_1() {
-  int GLF_live2_looplimiter1 = 0;
-  int i = 0;
-  int j = 0;
-  float GLF_dead3x = 0.0f;
-  float x_51 = 0.0f;
-  int GLF_dead3k = 0;
-  GLF_live2_looplimiter1 = 0;
-  i = 0;
-  {
-    for(; (i < 1); i = (i + 1)) {
-      if ((GLF_live2_looplimiter1 >= 3)) {
-        j = 0;
-        {
-          for(; (j < 1); j = (j + 1)) {
-            const float x_13 = GLF_live2gl_FragCoord.x;
-            if ((int(x_13) < 120)) {
-            } else {
-              GroupMemoryBarrierWithGroupSync();
-            }
-          }
-        }
-        break;
-      }
-    }
-  }
-  const float x_81 = asfloat(x_9[0].x);
-  const float x_83 = asfloat(x_9[0].y);
-  if ((x_81 > x_83)) {
-    const float x_14 = GLF_live2gl_FragCoord.x;
-    x_51 = x_14;
-  } else {
-    x_51 = 0.0f;
-  }
-  GLF_dead3x = x_51;
-  GLF_dead3k = 0;
-  {
-    for(; (GLF_dead3k < 2); GLF_dead3k = (GLF_dead3k + 1)) {
-      if ((GLF_dead3x > 4.0f)) {
-        break;
-      }
-      const float x_16 = GLF_live2gl_FragCoord.x;
-      GLF_dead3x = x_16;
-      GroupMemoryBarrierWithGroupSync();
-    }
-  }
-  x_12.Store((4u * uint(0)), asuint(42u));
-  return;
-}
-
-[numthreads(1, 18, 6)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.msl
deleted file mode 100644
index e7804bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct doesNotMatter {
-  /* 0x0000 */ uint x_compute_data[1];
-};
-
-void main_1(constant buf0& x_9, device doesNotMatter& x_12, thread float4* const tint_symbol_1) {
-  int GLF_live2_looplimiter1 = 0;
-  int i = 0;
-  int j = 0;
-  float GLF_dead3x = 0.0f;
-  float x_51 = 0.0f;
-  int GLF_dead3k = 0;
-  GLF_live2_looplimiter1 = 0;
-  i = 0;
-  while (true) {
-    int const x_56 = i;
-    if ((x_56 < 1)) {
-    } else {
-      break;
-    }
-    int const x_59 = GLF_live2_looplimiter1;
-    if ((x_59 >= 3)) {
-      j = 0;
-      while (true) {
-        int const x_67 = j;
-        if ((x_67 < 1)) {
-        } else {
-          break;
-        }
-        float const x_13 = (*(tint_symbol_1)).x;
-        if ((int(x_13) < 120)) {
-        } else {
-          threadgroup_barrier(mem_flags::mem_threadgroup);
-        }
-        {
-          int const x_76 = j;
-          j = as_type<int>((as_type<uint>(x_76) + as_type<uint>(1)));
-        }
-      }
-      break;
-    }
-    {
-      int const x_78 = i;
-      i = as_type<int>((as_type<uint>(x_78) + as_type<uint>(1)));
-    }
-  }
-  float const x_81 = x_9.injectionSwitch.x;
-  float const x_83 = x_9.injectionSwitch.y;
-  if ((x_81 > x_83)) {
-    float const x_14 = (*(tint_symbol_1)).x;
-    x_51 = x_14;
-  } else {
-    x_51 = 0.0f;
-  }
-  float const x_15 = x_51;
-  GLF_dead3x = x_15;
-  GLF_dead3k = 0;
-  while (true) {
-    int const x_93 = GLF_dead3k;
-    if ((x_93 < 2)) {
-    } else {
-      break;
-    }
-    float const x_96 = GLF_dead3x;
-    if ((x_96 > 4.0f)) {
-      break;
-    }
-    float const x_16 = (*(tint_symbol_1)).x;
-    GLF_dead3x = x_16;
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    {
-      int const x_101 = GLF_dead3k;
-      GLF_dead3k = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-    }
-  }
-  x_12.x_compute_data[0] = 42u;
-  return;
-}
-
-kernel void tint_symbol(constant buf0& x_9 [[buffer(0)]], device doesNotMatter& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_2 = 0.0f;
-  main_1(x_9, x_12, &(tint_symbol_2));
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 8978ada..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,203 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 113
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 18 6
-               OpName %GLF_live2gl_FragCoord "GLF_live2gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %doesNotMatter "doesNotMatter"
-               OpMemberName %doesNotMatter 0 "x_compute_data"
-               OpName %x_12 "x_12"
-               OpName %main_1 "main_1"
-               OpName %GLF_live2_looplimiter1 "GLF_live2_looplimiter1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %GLF_dead3x "GLF_dead3x"
-               OpName %x_51 "x_51"
-               OpName %GLF_dead3k "GLF_dead3k"
-               OpName %main "main"
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %doesNotMatter Block
-               OpMemberDecorate %doesNotMatter 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-          %5 = OpConstantNull %v4float
-%GLF_live2gl_FragCoord = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-%doesNotMatter = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_doesNotMatter = OpTypePointer StorageBuffer %doesNotMatter
-       %x_12 = OpVariable %_ptr_StorageBuffer_doesNotMatter StorageBuffer
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %27 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %int_120 = OpConstant %int 120
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-    %float_4 = OpConstant %float 4
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-%GLF_live2_looplimiter1 = OpVariable %_ptr_Function_int Function %22
-          %i = OpVariable %_ptr_Function_int Function %22
-          %j = OpVariable %_ptr_Function_int Function %22
- %GLF_dead3x = OpVariable %_ptr_Function_float Function %27
-       %x_51 = OpVariable %_ptr_Function_float Function %27
- %GLF_dead3k = OpVariable %_ptr_Function_int Function %22
-               OpStore %GLF_live2_looplimiter1 %int_0
-               OpStore %i %int_0
-               OpBranch %31
-         %31 = OpLabel
-               OpLoopMerge %32 %33 None
-               OpBranch %34
-         %34 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpSLessThan %bool %35 %int_1
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %32
-         %39 = OpLabel
-         %42 = OpLoad %int %GLF_live2_looplimiter1
-         %44 = OpSGreaterThanEqual %bool %42 %int_3
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-               OpStore %j %int_0
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %j
-         %52 = OpSLessThan %bool %51 %int_1
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %48
-         %53 = OpLabel
-         %58 = OpAccessChain %_ptr_Private_float %GLF_live2gl_FragCoord %uint_0
-         %59 = OpLoad %float %58
-         %60 = OpConvertFToS %int %59
-         %62 = OpSLessThan %bool %60 %int_120
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %63
-         %63 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-         %69 = OpLoad %int %j
-         %70 = OpIAdd %int %69 %int_1
-               OpStore %j %70
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %32
-         %45 = OpLabel
-               OpBranch %33
-         %33 = OpLabel
-         %71 = OpLoad %int %i
-         %72 = OpIAdd %int %71 %int_1
-               OpStore %i %72
-               OpBranch %31
-         %32 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %75 = OpLoad %float %74
-         %77 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %78 = OpLoad %float %77
-         %79 = OpFOrdGreaterThan %bool %75 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Private_float %GLF_live2gl_FragCoord %uint_0
-         %84 = OpLoad %float %83
-               OpStore %x_51 %84
-               OpBranch %80
-         %82 = OpLabel
-               OpStore %x_51 %float_0
-               OpBranch %80
-         %80 = OpLabel
-         %86 = OpLoad %float %x_51
-               OpStore %GLF_dead3x %86
-               OpStore %GLF_dead3k %int_0
-               OpBranch %87
-         %87 = OpLabel
-               OpLoopMerge %88 %89 None
-               OpBranch %90
-         %90 = OpLabel
-         %91 = OpLoad %int %GLF_dead3k
-         %93 = OpSLessThan %bool %91 %int_2
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-               OpBranch %94
-         %96 = OpLabel
-               OpBranch %88
-         %94 = OpLabel
-         %97 = OpLoad %float %GLF_dead3x
-         %99 = OpFOrdGreaterThan %bool %97 %float_4
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %100
-        %101 = OpLabel
-               OpBranch %88
-        %100 = OpLabel
-        %102 = OpAccessChain %_ptr_Private_float %GLF_live2gl_FragCoord %uint_0
-        %103 = OpLoad %float %102
-               OpStore %GLF_dead3x %103
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %89
-         %89 = OpLabel
-        %105 = OpLoad %int %GLF_dead3k
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %GLF_dead3k %106
-               OpBranch %87
-         %88 = OpLabel
-        %108 = OpAccessChain %_ptr_StorageBuffer_uint %x_12 %uint_0 %int_0
-               OpStore %108 %uint_42
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %111 = OpLabel
-        %112 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bc88eb2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct doesNotMatter {
-  x_compute_data : RTArr;
-};
-
-var<private> GLF_live2gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf0;
-
-[[group(0), binding(0)]] var<storage, read_write> x_12 : doesNotMatter;
-
-fn main_1() {
-  var GLF_live2_looplimiter1 : i32;
-  var i : i32;
-  var j : i32;
-  var GLF_dead3x : f32;
-  var x_51 : f32;
-  var GLF_dead3k : i32;
-  GLF_live2_looplimiter1 = 0;
-  i = 0;
-  loop {
-    let x_56 : i32 = i;
-    if ((x_56 < 1)) {
-    } else {
-      break;
-    }
-    let x_59 : i32 = GLF_live2_looplimiter1;
-    if ((x_59 >= 3)) {
-      j = 0;
-      loop {
-        let x_67 : i32 = j;
-        if ((x_67 < 1)) {
-        } else {
-          break;
-        }
-        let x_13 : f32 = GLF_live2gl_FragCoord.x;
-        if ((i32(x_13) < 120)) {
-        } else {
-          workgroupBarrier();
-        }
-
-        continuing {
-          let x_76 : i32 = j;
-          j = (x_76 + 1);
-        }
-      }
-      break;
-    }
-
-    continuing {
-      let x_78 : i32 = i;
-      i = (x_78 + 1);
-    }
-  }
-  let x_81 : f32 = x_9.injectionSwitch.x;
-  let x_83 : f32 = x_9.injectionSwitch.y;
-  if ((x_81 > x_83)) {
-    let x_14 : f32 = GLF_live2gl_FragCoord.x;
-    x_51 = x_14;
-  } else {
-    x_51 = 0.0;
-  }
-  let x_15 : f32 = x_51;
-  GLF_dead3x = x_15;
-  GLF_dead3k = 0;
-  loop {
-    let x_93 : i32 = GLF_dead3k;
-    if ((x_93 < 2)) {
-    } else {
-      break;
-    }
-    let x_96 : f32 = GLF_dead3x;
-    if ((x_96 > 4.0)) {
-      break;
-    }
-    let x_16 : f32 = GLF_live2gl_FragCoord.x;
-    GLF_dead3x = x_16;
-    workgroupBarrier();
-
-    continuing {
-      let x_101 : i32 = GLF_dead3k;
-      GLF_dead3k = (x_101 + 1);
-    }
-  }
-  x_12.x_compute_data[0] = 42u;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 18, 6)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 054c863..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-static float4 GLF_live2gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_9 : register(b1, space0) {
-  uint4 x_9[1];
-};
-RWByteAddressBuffer x_12 : register(u0, space0);
-
-void main_1() {
-  int GLF_live2_looplimiter1 = 0;
-  int i = 0;
-  int j = 0;
-  float GLF_dead3x = 0.0f;
-  float x_51 = 0.0f;
-  int GLF_dead3k = 0;
-  GLF_live2_looplimiter1 = 0;
-  i = 0;
-  {
-    for(; (i < 1); i = (i + 1)) {
-      if ((GLF_live2_looplimiter1 >= 3)) {
-        j = 0;
-        {
-          for(; (j < 1); j = (j + 1)) {
-            const float x_13 = GLF_live2gl_FragCoord.x;
-            if ((int(x_13) < 120)) {
-            } else {
-              GroupMemoryBarrierWithGroupSync();
-            }
-          }
-        }
-        break;
-      }
-    }
-  }
-  const float x_81 = asfloat(x_9[0].x);
-  const float x_83 = asfloat(x_9[0].y);
-  if ((x_81 > x_83)) {
-    const float x_14 = GLF_live2gl_FragCoord.x;
-    x_51 = x_14;
-  } else {
-    x_51 = 0.0f;
-  }
-  GLF_dead3x = x_51;
-  GLF_dead3k = 0;
-  {
-    for(; (GLF_dead3k < 2); GLF_dead3k = (GLF_dead3k + 1)) {
-      if ((GLF_dead3x > 4.0f)) {
-        break;
-      }
-      const float x_16 = GLF_live2gl_FragCoord.x;
-      GLF_dead3x = x_16;
-      GroupMemoryBarrierWithGroupSync();
-    }
-  }
-  x_12.Store((4u * uint(0)), asuint(42u));
-  return;
-}
-
-[numthreads(1, 18, 6)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.msl
deleted file mode 100644
index e7804bf..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct doesNotMatter {
-  /* 0x0000 */ uint x_compute_data[1];
-};
-
-void main_1(constant buf0& x_9, device doesNotMatter& x_12, thread float4* const tint_symbol_1) {
-  int GLF_live2_looplimiter1 = 0;
-  int i = 0;
-  int j = 0;
-  float GLF_dead3x = 0.0f;
-  float x_51 = 0.0f;
-  int GLF_dead3k = 0;
-  GLF_live2_looplimiter1 = 0;
-  i = 0;
-  while (true) {
-    int const x_56 = i;
-    if ((x_56 < 1)) {
-    } else {
-      break;
-    }
-    int const x_59 = GLF_live2_looplimiter1;
-    if ((x_59 >= 3)) {
-      j = 0;
-      while (true) {
-        int const x_67 = j;
-        if ((x_67 < 1)) {
-        } else {
-          break;
-        }
-        float const x_13 = (*(tint_symbol_1)).x;
-        if ((int(x_13) < 120)) {
-        } else {
-          threadgroup_barrier(mem_flags::mem_threadgroup);
-        }
-        {
-          int const x_76 = j;
-          j = as_type<int>((as_type<uint>(x_76) + as_type<uint>(1)));
-        }
-      }
-      break;
-    }
-    {
-      int const x_78 = i;
-      i = as_type<int>((as_type<uint>(x_78) + as_type<uint>(1)));
-    }
-  }
-  float const x_81 = x_9.injectionSwitch.x;
-  float const x_83 = x_9.injectionSwitch.y;
-  if ((x_81 > x_83)) {
-    float const x_14 = (*(tint_symbol_1)).x;
-    x_51 = x_14;
-  } else {
-    x_51 = 0.0f;
-  }
-  float const x_15 = x_51;
-  GLF_dead3x = x_15;
-  GLF_dead3k = 0;
-  while (true) {
-    int const x_93 = GLF_dead3k;
-    if ((x_93 < 2)) {
-    } else {
-      break;
-    }
-    float const x_96 = GLF_dead3x;
-    if ((x_96 > 4.0f)) {
-      break;
-    }
-    float const x_16 = (*(tint_symbol_1)).x;
-    GLF_dead3x = x_16;
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    {
-      int const x_101 = GLF_dead3k;
-      GLF_dead3k = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-    }
-  }
-  x_12.x_compute_data[0] = 42u;
-  return;
-}
-
-kernel void tint_symbol(constant buf0& x_9 [[buffer(0)]], device doesNotMatter& x_12 [[buffer(1)]]) {
-  thread float4 tint_symbol_2 = 0.0f;
-  main_1(x_9, x_12, &(tint_symbol_2));
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 8978ada..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,203 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 113
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 18 6
-               OpName %GLF_live2gl_FragCoord "GLF_live2gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_9 "x_9"
-               OpName %doesNotMatter "doesNotMatter"
-               OpMemberName %doesNotMatter 0 "x_compute_data"
-               OpName %x_12 "x_12"
-               OpName %main_1 "main_1"
-               OpName %GLF_live2_looplimiter1 "GLF_live2_looplimiter1"
-               OpName %i "i"
-               OpName %j "j"
-               OpName %GLF_dead3x "GLF_dead3x"
-               OpName %x_51 "x_51"
-               OpName %GLF_dead3k "GLF_dead3k"
-               OpName %main "main"
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 1
-               OpDecorate %doesNotMatter Block
-               OpMemberDecorate %doesNotMatter 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_12 DescriptorSet 0
-               OpDecorate %x_12 Binding 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-          %5 = OpConstantNull %v4float
-%GLF_live2gl_FragCoord = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-%doesNotMatter = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_doesNotMatter = OpTypePointer StorageBuffer %doesNotMatter
-       %x_12 = OpVariable %_ptr_StorageBuffer_doesNotMatter StorageBuffer
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %27 = OpConstantNull %float
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-    %int_120 = OpConstant %int 120
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-      %int_2 = OpConstant %int 2
-    %float_4 = OpConstant %float 4
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-    %uint_42 = OpConstant %uint 42
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-%GLF_live2_looplimiter1 = OpVariable %_ptr_Function_int Function %22
-          %i = OpVariable %_ptr_Function_int Function %22
-          %j = OpVariable %_ptr_Function_int Function %22
- %GLF_dead3x = OpVariable %_ptr_Function_float Function %27
-       %x_51 = OpVariable %_ptr_Function_float Function %27
- %GLF_dead3k = OpVariable %_ptr_Function_int Function %22
-               OpStore %GLF_live2_looplimiter1 %int_0
-               OpStore %i %int_0
-               OpBranch %31
-         %31 = OpLabel
-               OpLoopMerge %32 %33 None
-               OpBranch %34
-         %34 = OpLabel
-         %35 = OpLoad %int %i
-         %37 = OpSLessThan %bool %35 %int_1
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %41
-         %40 = OpLabel
-               OpBranch %39
-         %41 = OpLabel
-               OpBranch %32
-         %39 = OpLabel
-         %42 = OpLoad %int %GLF_live2_looplimiter1
-         %44 = OpSGreaterThanEqual %bool %42 %int_3
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-               OpStore %j %int_0
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %51 = OpLoad %int %j
-         %52 = OpSLessThan %bool %51 %int_1
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %55
-         %54 = OpLabel
-               OpBranch %53
-         %55 = OpLabel
-               OpBranch %48
-         %53 = OpLabel
-         %58 = OpAccessChain %_ptr_Private_float %GLF_live2gl_FragCoord %uint_0
-         %59 = OpLoad %float %58
-         %60 = OpConvertFToS %int %59
-         %62 = OpSLessThan %bool %60 %int_120
-               OpSelectionMerge %63 None
-               OpBranchConditional %62 %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %63
-         %63 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-         %69 = OpLoad %int %j
-         %70 = OpIAdd %int %69 %int_1
-               OpStore %j %70
-               OpBranch %47
-         %48 = OpLabel
-               OpBranch %32
-         %45 = OpLabel
-               OpBranch %33
-         %33 = OpLabel
-         %71 = OpLoad %int %i
-         %72 = OpIAdd %int %71 %int_1
-               OpStore %i %72
-               OpBranch %31
-         %32 = OpLabel
-         %74 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_0
-         %75 = OpLoad %float %74
-         %77 = OpAccessChain %_ptr_Uniform_float %x_9 %uint_0 %uint_1
-         %78 = OpLoad %float %77
-         %79 = OpFOrdGreaterThan %bool %75 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %82
-         %81 = OpLabel
-         %83 = OpAccessChain %_ptr_Private_float %GLF_live2gl_FragCoord %uint_0
-         %84 = OpLoad %float %83
-               OpStore %x_51 %84
-               OpBranch %80
-         %82 = OpLabel
-               OpStore %x_51 %float_0
-               OpBranch %80
-         %80 = OpLabel
-         %86 = OpLoad %float %x_51
-               OpStore %GLF_dead3x %86
-               OpStore %GLF_dead3k %int_0
-               OpBranch %87
-         %87 = OpLabel
-               OpLoopMerge %88 %89 None
-               OpBranch %90
-         %90 = OpLabel
-         %91 = OpLoad %int %GLF_dead3k
-         %93 = OpSLessThan %bool %91 %int_2
-               OpSelectionMerge %94 None
-               OpBranchConditional %93 %95 %96
-         %95 = OpLabel
-               OpBranch %94
-         %96 = OpLabel
-               OpBranch %88
-         %94 = OpLabel
-         %97 = OpLoad %float %GLF_dead3x
-         %99 = OpFOrdGreaterThan %bool %97 %float_4
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %100
-        %101 = OpLabel
-               OpBranch %88
-        %100 = OpLabel
-        %102 = OpAccessChain %_ptr_Private_float %GLF_live2gl_FragCoord %uint_0
-        %103 = OpLoad %float %102
-               OpStore %GLF_dead3x %103
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %89
-         %89 = OpLabel
-        %105 = OpLoad %int %GLF_dead3k
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %GLF_dead3k %106
-               OpBranch %87
-         %88 = OpLabel
-        %108 = OpAccessChain %_ptr_StorageBuffer_uint %x_12 %uint_0 %int_0
-               OpStore %108 %uint_42
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %111 = OpLabel
-        %112 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index bc88eb2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-for-loops-with-barrier-function/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,99 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct doesNotMatter {
-  x_compute_data : RTArr;
-};
-
-var<private> GLF_live2gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(1)]] var<uniform> x_9 : buf0;
-
-[[group(0), binding(0)]] var<storage, read_write> x_12 : doesNotMatter;
-
-fn main_1() {
-  var GLF_live2_looplimiter1 : i32;
-  var i : i32;
-  var j : i32;
-  var GLF_dead3x : f32;
-  var x_51 : f32;
-  var GLF_dead3k : i32;
-  GLF_live2_looplimiter1 = 0;
-  i = 0;
-  loop {
-    let x_56 : i32 = i;
-    if ((x_56 < 1)) {
-    } else {
-      break;
-    }
-    let x_59 : i32 = GLF_live2_looplimiter1;
-    if ((x_59 >= 3)) {
-      j = 0;
-      loop {
-        let x_67 : i32 = j;
-        if ((x_67 < 1)) {
-        } else {
-          break;
-        }
-        let x_13 : f32 = GLF_live2gl_FragCoord.x;
-        if ((i32(x_13) < 120)) {
-        } else {
-          workgroupBarrier();
-        }
-
-        continuing {
-          let x_76 : i32 = j;
-          j = (x_76 + 1);
-        }
-      }
-      break;
-    }
-
-    continuing {
-      let x_78 : i32 = i;
-      i = (x_78 + 1);
-    }
-  }
-  let x_81 : f32 = x_9.injectionSwitch.x;
-  let x_83 : f32 = x_9.injectionSwitch.y;
-  if ((x_81 > x_83)) {
-    let x_14 : f32 = GLF_live2gl_FragCoord.x;
-    x_51 = x_14;
-  } else {
-    x_51 = 0.0;
-  }
-  let x_15 : f32 = x_51;
-  GLF_dead3x = x_15;
-  GLF_dead3k = 0;
-  loop {
-    let x_93 : i32 = GLF_dead3k;
-    if ((x_93 < 2)) {
-    } else {
-      break;
-    }
-    let x_96 : f32 = GLF_dead3x;
-    if ((x_96 > 4.0)) {
-      break;
-    }
-    let x_16 : f32 = GLF_live2gl_FragCoord.x;
-    GLF_dead3x = x_16;
-    workgroupBarrier();
-
-    continuing {
-      let x_101 : i32 = GLF_dead3k;
-      GLF_dead3k = (x_101 + 1);
-    }
-  }
-  x_12.x_compute_data[0] = 42u;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 18, 6)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.hlsl
deleted file mode 100644
index 9fc8bfb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x = 0;
-  float4 matrix_u = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int b = 0;
-  float4 matrix_b = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_42 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x = 4;
-  {
-    for(; (x >= 1); x = (x - 1)) {
-      set_float4(matrix_u, x, 1.0f);
-    }
-  }
-  b = 4;
-  while (true) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_55 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_55 < -1.0f)) {
-    } else {
-      break;
-    }
-    const int x_14 = b;
-    if ((b > 1)) {
-      x_42 = min(matrix_b, matrix_b);
-    } else {
-      x_42 = matrix_u;
-    }
-    const float x_67 = x_42.y;
-    set_float4(matrix_b, x_14, x_67);
-    {
-      b = (b - 1);
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.msl
deleted file mode 100644
index 001e8ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float4x4 matrix_a_uni;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int x = 0;
-  float4 matrix_u = 0.0f;
-  int b = 0;
-  float4 matrix_b = 0.0f;
-  float4 x_42 = 0.0f;
-  x = 4;
-  while (true) {
-    int const x_10 = x;
-    if ((x_10 >= 1)) {
-    } else {
-      break;
-    }
-    int const x_11 = x;
-    matrix_u[x_11] = 1.0f;
-    {
-      int const x_12 = x;
-      x = as_type<int>((as_type<uint>(x_12) - as_type<uint>(1)));
-    }
-  }
-  b = 4;
-  while (true) {
-    float const x_55 = x_8.matrix_a_uni[0].x;
-    if ((x_55 < -1.0f)) {
-    } else {
-      break;
-    }
-    int const x_14 = b;
-    int const x_15 = b;
-    if ((x_15 > 1)) {
-      float4 const x_62 = matrix_b;
-      float4 const x_63 = matrix_b;
-      x_42 = fmin(x_62, x_63);
-    } else {
-      float4 const x_65 = matrix_u;
-      x_42 = x_65;
-    }
-    float const x_67 = x_42.y;
-    matrix_b[x_14] = x_67;
-    {
-      int const x_16 = b;
-      b = as_type<int>((as_type<uint>(x_16) - as_type<uint>(1)));
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.spvasm
deleted file mode 100644
index 7c2ac86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,158 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-         %67 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "matrix_a_uni"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x "x"
-               OpName %matrix_u "matrix_u"
-               OpName %b "b"
-               OpName %matrix_b "matrix_b"
-               OpName %x_42 "x_42"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpMemberDecorate %buf0 0 ColMajor
-               OpMemberDecorate %buf0 0 MatrixStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%mat4v4float = OpTypeMatrix %v4float 4
-       %buf0 = OpTypeStruct %mat4v4float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-      %int_4 = OpConstant %int 4
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_n1 = OpConstant %float -1
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %76 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %19
-   %matrix_u = OpVariable %_ptr_Function_v4float Function %5
-          %b = OpVariable %_ptr_Function_int Function %19
-   %matrix_b = OpVariable %_ptr_Function_v4float Function %5
-       %x_42 = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %x %int_4
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %x
-         %32 = OpSGreaterThanEqual %bool %30 %int_1
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpBranch %34
-         %36 = OpLabel
-               OpBranch %27
-         %34 = OpLabel
-         %37 = OpLoad %int %x
-         %39 = OpAccessChain %_ptr_Function_float %matrix_u %37
-               OpStore %39 %float_1
-               OpBranch %28
-         %28 = OpLabel
-         %41 = OpLoad %int %x
-         %42 = OpISub %int %41 %int_1
-               OpStore %x %42
-               OpBranch %26
-         %27 = OpLabel
-               OpStore %b %int_4
-               OpBranch %43
-         %43 = OpLabel
-               OpLoopMerge %44 %45 None
-               OpBranch %46
-         %46 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0 %uint_0
-         %52 = OpLoad %float %51
-         %54 = OpFOrdLessThan %bool %52 %float_n1
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %44
-         %55 = OpLabel
-         %58 = OpLoad %int %b
-         %59 = OpLoad %int %b
-         %60 = OpSGreaterThan %bool %59 %int_1
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-         %64 = OpLoad %v4float %matrix_b
-         %65 = OpLoad %v4float %matrix_b
-         %66 = OpExtInst %v4float %67 NMin %64 %65
-               OpStore %x_42 %66
-               OpBranch %61
-         %63 = OpLabel
-         %68 = OpLoad %v4float %matrix_u
-               OpStore %x_42 %68
-               OpBranch %61
-         %61 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %x_42 %uint_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Function_float %matrix_b %58
-               OpStore %72 %71
-               OpBranch %45
-         %45 = OpLabel
-         %73 = OpLoad %int %b
-         %74 = OpISub %int %73 %int_1
-               OpStore %b %74
-               OpBranch %43
-         %44 = OpLabel
-               OpStore %x_GLF_color %76
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.wgsl
deleted file mode 100644
index 71733dd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,69 +0,0 @@
-[[block]]
-struct buf0 {
-  matrix_a_uni : mat4x4<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x : i32;
-  var matrix_u : vec4<f32>;
-  var b : i32;
-  var matrix_b : vec4<f32>;
-  var x_42 : vec4<f32>;
-  x = 4;
-  loop {
-    let x_10 : i32 = x;
-    if ((x_10 >= 1)) {
-    } else {
-      break;
-    }
-    let x_11 : i32 = x;
-    matrix_u[x_11] = 1.0;
-
-    continuing {
-      let x_12 : i32 = x;
-      x = (x_12 - 1);
-    }
-  }
-  b = 4;
-  loop {
-    let x_55 : f32 = x_8.matrix_a_uni[0].x;
-    if ((x_55 < -1.0)) {
-    } else {
-      break;
-    }
-    let x_14 : i32 = b;
-    let x_15 : i32 = b;
-    if ((x_15 > 1)) {
-      let x_62 : vec4<f32> = matrix_b;
-      let x_63 : vec4<f32> = matrix_b;
-      x_42 = min(x_62, x_63);
-    } else {
-      let x_65 : vec4<f32> = matrix_u;
-      x_42 = x_65;
-    }
-    let x_67 : f32 = x_42.y;
-    matrix_b[x_14] = x_67;
-
-    continuing {
-      let x_16 : i32 = b;
-      b = (x_16 - 1);
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.hlsl
deleted file mode 100644
index 9fc8bfb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,64 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
-  uint4 x_8[4];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int x = 0;
-  float4 matrix_u = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int b = 0;
-  float4 matrix_b = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float4 x_42 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  x = 4;
-  {
-    for(; (x >= 1); x = (x - 1)) {
-      set_float4(matrix_u, x, 1.0f);
-    }
-  }
-  b = 4;
-  while (true) {
-    const uint scalar_offset = ((16u * uint(0))) / 4;
-    const float x_55 = asfloat(x_8[scalar_offset / 4][scalar_offset % 4]);
-    if ((x_55 < -1.0f)) {
-    } else {
-      break;
-    }
-    const int x_14 = b;
-    if ((b > 1)) {
-      x_42 = min(matrix_b, matrix_b);
-    } else {
-      x_42 = matrix_u;
-    }
-    const float x_67 = x_42.y;
-    set_float4(matrix_b, x_14, x_67);
-    {
-      b = (b - 1);
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.msl
deleted file mode 100644
index 001e8ee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float4x4 matrix_a_uni;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_8, thread float4* const tint_symbol_3) {
-  int x = 0;
-  float4 matrix_u = 0.0f;
-  int b = 0;
-  float4 matrix_b = 0.0f;
-  float4 x_42 = 0.0f;
-  x = 4;
-  while (true) {
-    int const x_10 = x;
-    if ((x_10 >= 1)) {
-    } else {
-      break;
-    }
-    int const x_11 = x;
-    matrix_u[x_11] = 1.0f;
-    {
-      int const x_12 = x;
-      x = as_type<int>((as_type<uint>(x_12) - as_type<uint>(1)));
-    }
-  }
-  b = 4;
-  while (true) {
-    float const x_55 = x_8.matrix_a_uni[0].x;
-    if ((x_55 < -1.0f)) {
-    } else {
-      break;
-    }
-    int const x_14 = b;
-    int const x_15 = b;
-    if ((x_15 > 1)) {
-      float4 const x_62 = matrix_b;
-      float4 const x_63 = matrix_b;
-      x_42 = fmin(x_62, x_63);
-    } else {
-      float4 const x_65 = matrix_u;
-      x_42 = x_65;
-    }
-    float const x_67 = x_42.y;
-    matrix_b[x_14] = x_67;
-    {
-      int const x_16 = b;
-      b = as_type<int>((as_type<uint>(x_16) - as_type<uint>(1)));
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_8, thread float4* const tint_symbol_4) {
-  main_1(x_8, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_8 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_8, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.spvasm
deleted file mode 100644
index 7c2ac86..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,158 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 88
-; Schema: 0
-               OpCapability Shader
-         %67 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "matrix_a_uni"
-               OpName %x_8 "x_8"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x "x"
-               OpName %matrix_u "matrix_u"
-               OpName %b "b"
-               OpName %matrix_b "matrix_b"
-               OpName %x_42 "x_42"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpMemberDecorate %buf0 0 ColMajor
-               OpMemberDecorate %buf0 0 MatrixStride 16
-               OpDecorate %x_8 NonWritable
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%mat4v4float = OpTypeMatrix %v4float 4
-       %buf0 = OpTypeStruct %mat4v4float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_8 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-      %int_4 = OpConstant %int 4
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-      %int_0 = OpConstant %int 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-   %float_n1 = OpConstant %float -1
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %76 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %77 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %x = OpVariable %_ptr_Function_int Function %19
-   %matrix_u = OpVariable %_ptr_Function_v4float Function %5
-          %b = OpVariable %_ptr_Function_int Function %19
-   %matrix_b = OpVariable %_ptr_Function_v4float Function %5
-       %x_42 = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %x %int_4
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %x
-         %32 = OpSGreaterThanEqual %bool %30 %int_1
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpBranch %34
-         %36 = OpLabel
-               OpBranch %27
-         %34 = OpLabel
-         %37 = OpLoad %int %x
-         %39 = OpAccessChain %_ptr_Function_float %matrix_u %37
-               OpStore %39 %float_1
-               OpBranch %28
-         %28 = OpLabel
-         %41 = OpLoad %int %x
-         %42 = OpISub %int %41 %int_1
-               OpStore %x %42
-               OpBranch %26
-         %27 = OpLabel
-               OpStore %b %int_4
-               OpBranch %43
-         %43 = OpLabel
-               OpLoopMerge %44 %45 None
-               OpBranch %46
-         %46 = OpLabel
-         %51 = OpAccessChain %_ptr_Uniform_float %x_8 %uint_0 %int_0 %uint_0
-         %52 = OpLoad %float %51
-         %54 = OpFOrdLessThan %bool %52 %float_n1
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %44
-         %55 = OpLabel
-         %58 = OpLoad %int %b
-         %59 = OpLoad %int %b
-         %60 = OpSGreaterThan %bool %59 %int_1
-               OpSelectionMerge %61 None
-               OpBranchConditional %60 %62 %63
-         %62 = OpLabel
-         %64 = OpLoad %v4float %matrix_b
-         %65 = OpLoad %v4float %matrix_b
-         %66 = OpExtInst %v4float %67 NMin %64 %65
-               OpStore %x_42 %66
-               OpBranch %61
-         %63 = OpLabel
-         %68 = OpLoad %v4float %matrix_u
-               OpStore %x_42 %68
-               OpBranch %61
-         %61 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %x_42 %uint_1
-         %71 = OpLoad %float %70
-         %72 = OpAccessChain %_ptr_Function_float %matrix_b %58
-               OpStore %72 %71
-               OpBranch %45
-         %45 = OpLabel
-         %73 = OpLoad %int %b
-         %74 = OpISub %int %73 %int_1
-               OpStore %b %74
-               OpBranch %43
-         %44 = OpLabel
-               OpStore %x_GLF_color %76
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %77
-         %80 = OpLabel
-         %81 = OpFunctionCall %void %main_1
-         %82 = OpLoad %v4float %x_GLF_color
-         %83 = OpCompositeConstruct %main_out %82
-               OpReturnValue %83
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %85 = OpLabel
-         %86 = OpFunctionCall %main_out %main_inner
-         %87 = OpCompositeExtract %v4float %86 0
-               OpStore %x_GLF_color_1_1 %87
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.wgsl
deleted file mode 100644
index 71733dd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-matrix/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,69 +0,0 @@
-[[block]]
-struct buf0 {
-  matrix_a_uni : mat4x4<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_8 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x : i32;
-  var matrix_u : vec4<f32>;
-  var b : i32;
-  var matrix_b : vec4<f32>;
-  var x_42 : vec4<f32>;
-  x = 4;
-  loop {
-    let x_10 : i32 = x;
-    if ((x_10 >= 1)) {
-    } else {
-      break;
-    }
-    let x_11 : i32 = x;
-    matrix_u[x_11] = 1.0;
-
-    continuing {
-      let x_12 : i32 = x;
-      x = (x_12 - 1);
-    }
-  }
-  b = 4;
-  loop {
-    let x_55 : f32 = x_8.matrix_a_uni[0].x;
-    if ((x_55 < -1.0)) {
-    } else {
-      break;
-    }
-    let x_14 : i32 = b;
-    let x_15 : i32 = b;
-    if ((x_15 > 1)) {
-      let x_62 : vec4<f32> = matrix_b;
-      let x_63 : vec4<f32> = matrix_b;
-      x_42 = min(x_62, x_63);
-    } else {
-      let x_65 : vec4<f32> = matrix_u;
-      x_42 = x_65;
-    }
-    let x_67 : f32 = x_42.y;
-    matrix_b[x_14] = x_67;
-
-    continuing {
-      let x_16 : i32 = b;
-      b = (x_16 - 1);
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.hlsl
deleted file mode 100644
index 459dc1b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-struct StructType {
-  float3 col;
-  bool4 bbbb;
-};
-
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  StructType x_33 = (StructType)0;
-  int x_38 = 0;
-  StructType x_42 = (StructType)0;
-  StructType x_33_phi = (StructType)0;
-  int x_9_phi = 0;
-  StructType x_42_phi = (StructType)0;
-  int x_10_phi = 0;
-  const StructType tint_symbol_2 = {float3(0.0f, 0.0f, 0.0f), bool4(false, false, false, false)};
-  x_33_phi = tint_symbol_2;
-  x_9_phi = 0;
-  while (true) {
-    StructType x_34 = (StructType)0;
-    int x_7 = 0;
-    x_33 = x_33_phi;
-    const int x_9 = x_9_phi;
-    const float x_37 = asfloat(x_5[0].y);
-    x_38 = int(x_37);
-    if ((x_9 < x_38)) {
-    } else {
-      break;
-    }
-    {
-      x_34 = x_33;
-      x_34.col = float3(1.0f, 0.0f, 0.0f);
-      x_7 = (x_9 + 1);
-      x_33_phi = x_34;
-      x_9_phi = x_7;
-    }
-  }
-  x_42_phi = x_33;
-  x_10_phi = 0;
-  while (true) {
-    StructType x_43 = (StructType)0;
-    int x_8 = 0;
-    x_42 = x_42_phi;
-    const int x_10 = x_10_phi;
-    if ((x_10 < x_38)) {
-    } else {
-      break;
-    }
-    {
-      x_43 = x_42;
-      x_43.col = float3(1.0f, 0.0f, 0.0f);
-      x_8 = (x_10 + 1);
-      x_42_phi = x_43;
-      x_10_phi = x_8;
-    }
-  }
-  const float3 x_47 = x_42.col;
-  x_GLF_color = float4(x_47.x, x_47.y, x_47.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.msl
deleted file mode 100644
index 1ee3b13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct StructType {
-  float3 col;
-  bool4 bbbb;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  StructType x_33 = {};
-  int x_38 = 0;
-  StructType x_42 = {};
-  StructType x_33_phi = {};
-  int x_9_phi = 0;
-  StructType x_42_phi = {};
-  int x_10_phi = 0;
-  StructType const tint_symbol_2 = {.col=float3(0.0f, 0.0f, 0.0f), .bbbb=bool4(false, false, false, false)};
-  x_33_phi = tint_symbol_2;
-  x_9_phi = 0;
-  while (true) {
-    StructType x_34 = {};
-    int x_7 = 0;
-    x_33 = x_33_phi;
-    int const x_9 = x_9_phi;
-    float const x_37 = x_5.injectionSwitch.y;
-    x_38 = int(x_37);
-    if ((x_9 < x_38)) {
-    } else {
-      break;
-    }
-    {
-      x_34 = x_33;
-      x_34.col = float3(1.0f, 0.0f, 0.0f);
-      x_7 = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-      x_33_phi = x_34;
-      x_9_phi = x_7;
-    }
-  }
-  x_42_phi = x_33;
-  x_10_phi = 0;
-  while (true) {
-    StructType x_43 = {};
-    int x_8 = 0;
-    x_42 = x_42_phi;
-    int const x_10 = x_10_phi;
-    if ((x_10 < x_38)) {
-    } else {
-      break;
-    }
-    {
-      x_43 = x_42;
-      x_43.col = float3(1.0f, 0.0f, 0.0f);
-      x_8 = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-      x_42_phi = x_43;
-      x_10_phi = x_8;
-    }
-  }
-  float3 const x_47 = x_42.col;
-  *(tint_symbol_4) = float4(x_47.x, x_47.y, x_47.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_5) {
-  main_1(x_5, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.spvasm
deleted file mode 100644
index 82afbcc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,187 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 103
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %StructType "StructType"
-               OpMemberName %StructType 0 "col"
-               OpMemberName %StructType 1 "bbbb"
-               OpName %x_33 "x_33"
-               OpName %x_38 "x_38"
-               OpName %x_42 "x_42"
-               OpName %x_33_phi "x_33_phi"
-               OpName %x_9_phi "x_9_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %x_10_phi "x_10_phi"
-               OpName %x_34 "x_34"
-               OpName %x_7 "x_7"
-               OpName %x_43 "x_43"
-               OpName %x_8 "x_8"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %StructType 0 Offset 0
-               OpMemberDecorate %StructType 1 Offset 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-       %bool = OpTypeBool
-     %v4bool = OpTypeVector %bool 4
- %StructType = OpTypeStruct %v3float %v4bool
-%_ptr_Function_StructType = OpTypePointer Function %StructType
-         %22 = OpConstantNull %StructType
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-         %35 = OpConstantComposite %v4bool %false %false %false %false
-         %36 = OpConstantComposite %StructType %33 %35
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-    %float_1 = OpConstant %float 1
-         %62 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %92 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_33 = OpVariable %_ptr_Function_StructType Function %22
-       %x_38 = OpVariable %_ptr_Function_int Function %26
-       %x_42 = OpVariable %_ptr_Function_StructType Function %22
-   %x_33_phi = OpVariable %_ptr_Function_StructType Function %22
-    %x_9_phi = OpVariable %_ptr_Function_int Function %26
-   %x_42_phi = OpVariable %_ptr_Function_StructType Function %22
-   %x_10_phi = OpVariable %_ptr_Function_int Function %26
-       %x_34 = OpVariable %_ptr_Function_StructType Function %22
-        %x_7 = OpVariable %_ptr_Function_int Function %26
-       %x_43 = OpVariable %_ptr_Function_StructType Function %22
-        %x_8 = OpVariable %_ptr_Function_int Function %26
-               OpStore %x_33_phi %36
-               OpStore %x_9_phi %int_0
-               OpBranch %38
-         %38 = OpLabel
-               OpLoopMerge %39 %40 None
-               OpBranch %41
-         %41 = OpLabel
-         %44 = OpLoad %StructType %x_33_phi
-               OpStore %x_33 %44
-         %45 = OpLoad %int %x_9_phi
-         %50 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %51 = OpLoad %float %50
-         %52 = OpConvertFToS %int %51
-               OpStore %x_38 %52
-         %53 = OpLoad %int %x_38
-         %54 = OpSLessThan %bool %45 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %39
-         %55 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-         %58 = OpLoad %StructType %x_33
-               OpStore %x_34 %58
-         %60 = OpAccessChain %_ptr_Function_v3float %x_34 %uint_0
-               OpStore %60 %62
-         %64 = OpIAdd %int %45 %int_1
-               OpStore %x_7 %64
-         %65 = OpLoad %StructType %x_34
-               OpStore %x_33_phi %65
-         %66 = OpLoad %int %x_7
-               OpStore %x_9_phi %66
-               OpBranch %38
-         %39 = OpLabel
-         %67 = OpLoad %StructType %x_33
-               OpStore %x_42_phi %67
-               OpStore %x_10_phi %int_0
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %74 = OpLoad %StructType %x_42_phi
-               OpStore %x_42 %74
-         %75 = OpLoad %int %x_10_phi
-         %76 = OpLoad %int %x_38
-         %77 = OpSLessThan %bool %75 %76
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-               OpBranch %69
-         %78 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-         %81 = OpLoad %StructType %x_42
-               OpStore %x_43 %81
-         %82 = OpAccessChain %_ptr_Function_v3float %x_43 %uint_0
-               OpStore %82 %62
-         %83 = OpIAdd %int %75 %int_1
-               OpStore %x_8 %83
-         %84 = OpLoad %StructType %x_43
-               OpStore %x_42_phi %84
-         %85 = OpLoad %int %x_8
-               OpStore %x_10_phi %85
-               OpBranch %68
-         %69 = OpLabel
-         %86 = OpAccessChain %_ptr_Function_v3float %x_42 %uint_0
-         %87 = OpLoad %v3float %86
-         %88 = OpCompositeExtract %float %87 0
-         %89 = OpCompositeExtract %float %87 1
-         %90 = OpCompositeExtract %float %87 2
-         %91 = OpCompositeConstruct %v4float %88 %89 %90 %float_1
-               OpStore %x_GLF_color %91
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %92
-         %95 = OpLabel
-         %96 = OpFunctionCall %void %main_1
-         %97 = OpLoad %v4float %x_GLF_color
-         %98 = OpCompositeConstruct %main_out %97
-               OpReturnValue %98
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %100 = OpLabel
-        %101 = OpFunctionCall %main_out %main_inner
-        %102 = OpCompositeExtract %v4float %101 0
-               OpStore %x_GLF_color_1_1 %102
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.wgsl
deleted file mode 100644
index 187ea36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,79 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-struct StructType {
-  col : vec3<f32>;
-  bbbb : vec4<bool>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_33 : StructType;
-  var x_38 : i32;
-  var x_42 : StructType;
-  var x_33_phi : StructType;
-  var x_9_phi : i32;
-  var x_42_phi : StructType;
-  var x_10_phi : i32;
-  x_33_phi = StructType(vec3<f32>(0.0, 0.0, 0.0), vec4<bool>(false, false, false, false));
-  x_9_phi = 0;
-  loop {
-    var x_34 : StructType;
-    var x_7 : i32;
-    x_33 = x_33_phi;
-    let x_9 : i32 = x_9_phi;
-    let x_37 : f32 = x_5.injectionSwitch.y;
-    x_38 = i32(x_37);
-    if ((x_9 < x_38)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_34 = x_33;
-      x_34.col = vec3<f32>(1.0, 0.0, 0.0);
-      x_7 = (x_9 + 1);
-      x_33_phi = x_34;
-      x_9_phi = x_7;
-    }
-  }
-  x_42_phi = x_33;
-  x_10_phi = 0;
-  loop {
-    var x_43 : StructType;
-    var x_8 : i32;
-    x_42 = x_42_phi;
-    let x_10 : i32 = x_10_phi;
-    if ((x_10 < x_38)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_43 = x_42;
-      x_43.col = vec3<f32>(1.0, 0.0, 0.0);
-      x_8 = (x_10 + 1);
-      x_42_phi = x_43;
-      x_10_phi = x_8;
-    }
-  }
-  let x_47 : vec3<f32> = x_42.col;
-  x_GLF_color = vec4<f32>(x_47.x, x_47.y, x_47.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.hlsl
deleted file mode 100644
index 459dc1b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,83 +0,0 @@
-struct StructType {
-  float3 col;
-  bool4 bbbb;
-};
-
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  StructType x_33 = (StructType)0;
-  int x_38 = 0;
-  StructType x_42 = (StructType)0;
-  StructType x_33_phi = (StructType)0;
-  int x_9_phi = 0;
-  StructType x_42_phi = (StructType)0;
-  int x_10_phi = 0;
-  const StructType tint_symbol_2 = {float3(0.0f, 0.0f, 0.0f), bool4(false, false, false, false)};
-  x_33_phi = tint_symbol_2;
-  x_9_phi = 0;
-  while (true) {
-    StructType x_34 = (StructType)0;
-    int x_7 = 0;
-    x_33 = x_33_phi;
-    const int x_9 = x_9_phi;
-    const float x_37 = asfloat(x_5[0].y);
-    x_38 = int(x_37);
-    if ((x_9 < x_38)) {
-    } else {
-      break;
-    }
-    {
-      x_34 = x_33;
-      x_34.col = float3(1.0f, 0.0f, 0.0f);
-      x_7 = (x_9 + 1);
-      x_33_phi = x_34;
-      x_9_phi = x_7;
-    }
-  }
-  x_42_phi = x_33;
-  x_10_phi = 0;
-  while (true) {
-    StructType x_43 = (StructType)0;
-    int x_8 = 0;
-    x_42 = x_42_phi;
-    const int x_10 = x_10_phi;
-    if ((x_10 < x_38)) {
-    } else {
-      break;
-    }
-    {
-      x_43 = x_42;
-      x_43.col = float3(1.0f, 0.0f, 0.0f);
-      x_8 = (x_10 + 1);
-      x_42_phi = x_43;
-      x_10_phi = x_8;
-    }
-  }
-  const float3 x_47 = x_42.col;
-  x_GLF_color = float4(x_47.x, x_47.y, x_47.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.msl
deleted file mode 100644
index 1ee3b13..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.msl
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct StructType {
-  float3 col;
-  bool4 bbbb;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  StructType x_33 = {};
-  int x_38 = 0;
-  StructType x_42 = {};
-  StructType x_33_phi = {};
-  int x_9_phi = 0;
-  StructType x_42_phi = {};
-  int x_10_phi = 0;
-  StructType const tint_symbol_2 = {.col=float3(0.0f, 0.0f, 0.0f), .bbbb=bool4(false, false, false, false)};
-  x_33_phi = tint_symbol_2;
-  x_9_phi = 0;
-  while (true) {
-    StructType x_34 = {};
-    int x_7 = 0;
-    x_33 = x_33_phi;
-    int const x_9 = x_9_phi;
-    float const x_37 = x_5.injectionSwitch.y;
-    x_38 = int(x_37);
-    if ((x_9 < x_38)) {
-    } else {
-      break;
-    }
-    {
-      x_34 = x_33;
-      x_34.col = float3(1.0f, 0.0f, 0.0f);
-      x_7 = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-      x_33_phi = x_34;
-      x_9_phi = x_7;
-    }
-  }
-  x_42_phi = x_33;
-  x_10_phi = 0;
-  while (true) {
-    StructType x_43 = {};
-    int x_8 = 0;
-    x_42 = x_42_phi;
-    int const x_10 = x_10_phi;
-    if ((x_10 < x_38)) {
-    } else {
-      break;
-    }
-    {
-      x_43 = x_42;
-      x_43.col = float3(1.0f, 0.0f, 0.0f);
-      x_8 = as_type<int>((as_type<uint>(x_10) + as_type<uint>(1)));
-      x_42_phi = x_43;
-      x_10_phi = x_8;
-    }
-  }
-  float3 const x_47 = x_42.col;
-  *(tint_symbol_4) = float4(x_47.x, x_47.y, x_47.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_5) {
-  main_1(x_5, tint_symbol_5);
-  main_out const tint_symbol_3 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.spvasm
deleted file mode 100644
index 82afbcc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,187 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 103
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %StructType "StructType"
-               OpMemberName %StructType 0 "col"
-               OpMemberName %StructType 1 "bbbb"
-               OpName %x_33 "x_33"
-               OpName %x_38 "x_38"
-               OpName %x_42 "x_42"
-               OpName %x_33_phi "x_33_phi"
-               OpName %x_9_phi "x_9_phi"
-               OpName %x_42_phi "x_42_phi"
-               OpName %x_10_phi "x_10_phi"
-               OpName %x_34 "x_34"
-               OpName %x_7 "x_7"
-               OpName %x_43 "x_43"
-               OpName %x_8 "x_8"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %StructType 0 Offset 0
-               OpMemberDecorate %StructType 1 Offset 16
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-       %bool = OpTypeBool
-     %v4bool = OpTypeVector %bool 4
- %StructType = OpTypeStruct %v3float %v4bool
-%_ptr_Function_StructType = OpTypePointer Function %StructType
-         %22 = OpConstantNull %StructType
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %26 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %33 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-      %false = OpConstantFalse %bool
-         %35 = OpConstantComposite %v4bool %false %false %false %false
-         %36 = OpConstantComposite %StructType %33 %35
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-    %float_1 = OpConstant %float 1
-         %62 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %92 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_33 = OpVariable %_ptr_Function_StructType Function %22
-       %x_38 = OpVariable %_ptr_Function_int Function %26
-       %x_42 = OpVariable %_ptr_Function_StructType Function %22
-   %x_33_phi = OpVariable %_ptr_Function_StructType Function %22
-    %x_9_phi = OpVariable %_ptr_Function_int Function %26
-   %x_42_phi = OpVariable %_ptr_Function_StructType Function %22
-   %x_10_phi = OpVariable %_ptr_Function_int Function %26
-       %x_34 = OpVariable %_ptr_Function_StructType Function %22
-        %x_7 = OpVariable %_ptr_Function_int Function %26
-       %x_43 = OpVariable %_ptr_Function_StructType Function %22
-        %x_8 = OpVariable %_ptr_Function_int Function %26
-               OpStore %x_33_phi %36
-               OpStore %x_9_phi %int_0
-               OpBranch %38
-         %38 = OpLabel
-               OpLoopMerge %39 %40 None
-               OpBranch %41
-         %41 = OpLabel
-         %44 = OpLoad %StructType %x_33_phi
-               OpStore %x_33 %44
-         %45 = OpLoad %int %x_9_phi
-         %50 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %51 = OpLoad %float %50
-         %52 = OpConvertFToS %int %51
-               OpStore %x_38 %52
-         %53 = OpLoad %int %x_38
-         %54 = OpSLessThan %bool %45 %53
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpBranch %55
-         %57 = OpLabel
-               OpBranch %39
-         %55 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-         %58 = OpLoad %StructType %x_33
-               OpStore %x_34 %58
-         %60 = OpAccessChain %_ptr_Function_v3float %x_34 %uint_0
-               OpStore %60 %62
-         %64 = OpIAdd %int %45 %int_1
-               OpStore %x_7 %64
-         %65 = OpLoad %StructType %x_34
-               OpStore %x_33_phi %65
-         %66 = OpLoad %int %x_7
-               OpStore %x_9_phi %66
-               OpBranch %38
-         %39 = OpLabel
-         %67 = OpLoad %StructType %x_33
-               OpStore %x_42_phi %67
-               OpStore %x_10_phi %int_0
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %74 = OpLoad %StructType %x_42_phi
-               OpStore %x_42 %74
-         %75 = OpLoad %int %x_10_phi
-         %76 = OpLoad %int %x_38
-         %77 = OpSLessThan %bool %75 %76
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-               OpBranch %69
-         %78 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-         %81 = OpLoad %StructType %x_42
-               OpStore %x_43 %81
-         %82 = OpAccessChain %_ptr_Function_v3float %x_43 %uint_0
-               OpStore %82 %62
-         %83 = OpIAdd %int %75 %int_1
-               OpStore %x_8 %83
-         %84 = OpLoad %StructType %x_43
-               OpStore %x_42_phi %84
-         %85 = OpLoad %int %x_8
-               OpStore %x_10_phi %85
-               OpBranch %68
-         %69 = OpLabel
-         %86 = OpAccessChain %_ptr_Function_v3float %x_42 %uint_0
-         %87 = OpLoad %v3float %86
-         %88 = OpCompositeExtract %float %87 0
-         %89 = OpCompositeExtract %float %87 1
-         %90 = OpCompositeExtract %float %87 2
-         %91 = OpCompositeConstruct %v4float %88 %89 %90 %float_1
-               OpStore %x_GLF_color %91
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %92
-         %95 = OpLabel
-         %96 = OpFunctionCall %void %main_1
-         %97 = OpLoad %v4float %x_GLF_color
-         %98 = OpCompositeConstruct %main_out %97
-               OpReturnValue %98
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %100 = OpLabel
-        %101 = OpFunctionCall %main_out %main_inner
-        %102 = OpCompositeExtract %v4float %101 0
-               OpStore %x_GLF_color_1_1 %102
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.wgsl
deleted file mode 100644
index 187ea36..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-set-struct/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,79 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-struct StructType {
-  col : vec3<f32>;
-  bbbb : vec4<bool>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_33 : StructType;
-  var x_38 : i32;
-  var x_42 : StructType;
-  var x_33_phi : StructType;
-  var x_9_phi : i32;
-  var x_42_phi : StructType;
-  var x_10_phi : i32;
-  x_33_phi = StructType(vec3<f32>(0.0, 0.0, 0.0), vec4<bool>(false, false, false, false));
-  x_9_phi = 0;
-  loop {
-    var x_34 : StructType;
-    var x_7 : i32;
-    x_33 = x_33_phi;
-    let x_9 : i32 = x_9_phi;
-    let x_37 : f32 = x_5.injectionSwitch.y;
-    x_38 = i32(x_37);
-    if ((x_9 < x_38)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_34 = x_33;
-      x_34.col = vec3<f32>(1.0, 0.0, 0.0);
-      x_7 = (x_9 + 1);
-      x_33_phi = x_34;
-      x_9_phi = x_7;
-    }
-  }
-  x_42_phi = x_33;
-  x_10_phi = 0;
-  loop {
-    var x_43 : StructType;
-    var x_8 : i32;
-    x_42 = x_42_phi;
-    let x_10 : i32 = x_10_phi;
-    if ((x_10 < x_38)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      x_43 = x_42;
-      x_43.col = vec3<f32>(1.0, 0.0, 0.0);
-      x_8 = (x_10 + 1);
-      x_42_phi = x_43;
-      x_10_phi = x_8;
-    }
-  }
-  let x_47 : vec3<f32> = x_42.col;
-  x_GLF_color = vec4<f32>(x_47.x, x_47.y, x_47.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 88ec1bb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 GLF_live15c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int GLF_live15i = 0;
-  float4 GLF_live15d = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int GLF_live15i_1 = 0;
-  GLF_live15c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  GLF_live15i = 0;
-  {
-    for(; (GLF_live15i < 4); GLF_live15i = (GLF_live15i + 1)) {
-      if ((GLF_live15i >= 3)) {
-        break;
-      }
-      const float x_49 = GLF_live15c.y;
-      if ((x_49 >= 1.0f)) {
-        set_float4(GLF_live15c, GLF_live15i, 1.0f);
-      }
-    }
-  }
-  GLF_live15d = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  GLF_live15i_1 = 0;
-  {
-    for(; (GLF_live15i_1 < 4); GLF_live15i_1 = (GLF_live15i_1 + 1)) {
-      if ((GLF_live15i_1 >= 3)) {
-        break;
-      }
-      const float x_64 = GLF_live15d.y;
-      if ((x_64 >= 1.0f)) {
-        set_float4(GLF_live15d, GLF_live15i_1, 1.0f);
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.msl
deleted file mode 100644
index 3d21748..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4 GLF_live15c = 0.0f;
-  int GLF_live15i = 0;
-  float4 GLF_live15d = 0.0f;
-  int GLF_live15i_1 = 0;
-  GLF_live15c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  GLF_live15i = 0;
-  while (true) {
-    int const x_8 = GLF_live15i;
-    if ((x_8 < 4)) {
-    } else {
-      break;
-    }
-    int const x_9 = GLF_live15i;
-    if ((x_9 >= 3)) {
-      break;
-    }
-    float const x_49 = GLF_live15c.y;
-    if ((x_49 >= 1.0f)) {
-      int const x_10 = GLF_live15i;
-      GLF_live15c[x_10] = 1.0f;
-    }
-    {
-      int const x_11 = GLF_live15i;
-      GLF_live15i = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-    }
-  }
-  GLF_live15d = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  GLF_live15i_1 = 0;
-  while (true) {
-    int const x_13 = GLF_live15i_1;
-    if ((x_13 < 4)) {
-    } else {
-      break;
-    }
-    int const x_14 = GLF_live15i_1;
-    if ((x_14 >= 3)) {
-      break;
-    }
-    float const x_64 = GLF_live15d.y;
-    if ((x_64 >= 1.0f)) {
-      int const x_15 = GLF_live15i_1;
-      GLF_live15d[x_15] = 1.0f;
-    }
-    {
-      int const x_16 = GLF_live15i_1;
-      GLF_live15i_1 = as_type<int>((as_type<uint>(x_16) + as_type<uint>(1)));
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5901065..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,154 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %GLF_live15c "GLF_live15c"
-               OpName %GLF_live15i "GLF_live15i"
-               OpName %GLF_live15d "GLF_live15d"
-               OpName %GLF_live15i_1 "GLF_live15i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-         %75 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-%GLF_live15c = OpVariable %_ptr_Function_v4float Function %5
-%GLF_live15i = OpVariable %_ptr_Function_int Function %17
-%GLF_live15d = OpVariable %_ptr_Function_v4float Function %5
-%GLF_live15i_1 = OpVariable %_ptr_Function_int Function %17
-               OpStore %GLF_live15c %21
-               OpStore %GLF_live15i %int_0
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %GLF_live15i
-         %29 = OpSLessThan %bool %27 %int_4
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %24
-         %31 = OpLabel
-         %34 = OpLoad %int %GLF_live15i
-         %36 = OpSGreaterThanEqual %bool %34 %int_3
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %37
-         %38 = OpLabel
-               OpBranch %24
-         %37 = OpLabel
-         %42 = OpAccessChain %_ptr_Function_float %GLF_live15c %uint_1
-         %43 = OpLoad %float %42
-         %45 = OpFOrdGreaterThanEqual %bool %43 %float_1
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
-         %48 = OpLoad %int %GLF_live15i
-         %49 = OpAccessChain %_ptr_Function_float %GLF_live15c %48
-               OpStore %49 %float_1
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %25
-         %25 = OpLabel
-         %50 = OpLoad %int %GLF_live15i
-         %52 = OpIAdd %int %50 %int_1
-               OpStore %GLF_live15i %52
-               OpBranch %23
-         %24 = OpLabel
-               OpStore %GLF_live15d %21
-               OpStore %GLF_live15i_1 %int_0
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpLoad %int %GLF_live15i_1
-         %58 = OpSLessThan %bool %57 %int_4
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpBranch %59
-         %61 = OpLabel
-               OpBranch %54
-         %59 = OpLabel
-         %62 = OpLoad %int %GLF_live15i_1
-         %63 = OpSGreaterThanEqual %bool %62 %int_3
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-               OpBranch %54
-         %64 = OpLabel
-         %66 = OpAccessChain %_ptr_Function_float %GLF_live15d %uint_1
-         %67 = OpLoad %float %66
-         %68 = OpFOrdGreaterThanEqual %bool %67 %float_1
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpLoad %int %GLF_live15i_1
-         %72 = OpAccessChain %_ptr_Function_float %GLF_live15d %71
-               OpStore %72 %float_1
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %73 = OpLoad %int %GLF_live15i_1
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %GLF_live15i_1 %74
-               OpBranch %53
-         %54 = OpLabel
-               OpStore %x_GLF_color %75
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a5541a2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var GLF_live15c : vec4<f32>;
-  var GLF_live15i : i32;
-  var GLF_live15d : vec4<f32>;
-  var GLF_live15i_1 : i32;
-  GLF_live15c = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  GLF_live15i = 0;
-  loop {
-    let x_8 : i32 = GLF_live15i;
-    if ((x_8 < 4)) {
-    } else {
-      break;
-    }
-    let x_9 : i32 = GLF_live15i;
-    if ((x_9 >= 3)) {
-      break;
-    }
-    let x_49 : f32 = GLF_live15c.y;
-    if ((x_49 >= 1.0)) {
-      let x_10 : i32 = GLF_live15i;
-      GLF_live15c[x_10] = 1.0;
-    }
-
-    continuing {
-      let x_11 : i32 = GLF_live15i;
-      GLF_live15i = (x_11 + 1);
-    }
-  }
-  GLF_live15d = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  GLF_live15i_1 = 0;
-  loop {
-    let x_13 : i32 = GLF_live15i_1;
-    if ((x_13 < 4)) {
-    } else {
-      break;
-    }
-    let x_14 : i32 = GLF_live15i_1;
-    if ((x_14 >= 3)) {
-      break;
-    }
-    let x_64 : f32 = GLF_live15d.y;
-    if ((x_64 >= 1.0)) {
-      let x_15 : i32 = GLF_live15i_1;
-      GLF_live15d[x_15] = 1.0;
-    }
-
-    continuing {
-      let x_16 : i32 = GLF_live15i_1;
-      GLF_live15i_1 = (x_16 + 1);
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 88ec1bb..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,60 +0,0 @@
-void set_float4(inout float4 vec, int idx, float val) {
-  vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
-}
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4 GLF_live15c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int GLF_live15i = 0;
-  float4 GLF_live15d = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int GLF_live15i_1 = 0;
-  GLF_live15c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  GLF_live15i = 0;
-  {
-    for(; (GLF_live15i < 4); GLF_live15i = (GLF_live15i + 1)) {
-      if ((GLF_live15i >= 3)) {
-        break;
-      }
-      const float x_49 = GLF_live15c.y;
-      if ((x_49 >= 1.0f)) {
-        set_float4(GLF_live15c, GLF_live15i, 1.0f);
-      }
-    }
-  }
-  GLF_live15d = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  GLF_live15i_1 = 0;
-  {
-    for(; (GLF_live15i_1 < 4); GLF_live15i_1 = (GLF_live15i_1 + 1)) {
-      if ((GLF_live15i_1 >= 3)) {
-        break;
-      }
-      const float x_64 = GLF_live15d.y;
-      if ((x_64 >= 1.0f)) {
-        set_float4(GLF_live15d, GLF_live15i_1, 1.0f);
-      }
-    }
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3d21748..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4 GLF_live15c = 0.0f;
-  int GLF_live15i = 0;
-  float4 GLF_live15d = 0.0f;
-  int GLF_live15i_1 = 0;
-  GLF_live15c = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  GLF_live15i = 0;
-  while (true) {
-    int const x_8 = GLF_live15i;
-    if ((x_8 < 4)) {
-    } else {
-      break;
-    }
-    int const x_9 = GLF_live15i;
-    if ((x_9 >= 3)) {
-      break;
-    }
-    float const x_49 = GLF_live15c.y;
-    if ((x_49 >= 1.0f)) {
-      int const x_10 = GLF_live15i;
-      GLF_live15c[x_10] = 1.0f;
-    }
-    {
-      int const x_11 = GLF_live15i;
-      GLF_live15i = as_type<int>((as_type<uint>(x_11) + as_type<uint>(1)));
-    }
-  }
-  GLF_live15d = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  GLF_live15i_1 = 0;
-  while (true) {
-    int const x_13 = GLF_live15i_1;
-    if ((x_13 < 4)) {
-    } else {
-      break;
-    }
-    int const x_14 = GLF_live15i_1;
-    if ((x_14 >= 3)) {
-      break;
-    }
-    float const x_64 = GLF_live15d.y;
-    if ((x_64 >= 1.0f)) {
-      int const x_15 = GLF_live15i_1;
-      GLF_live15d[x_15] = 1.0f;
-    }
-    {
-      int const x_16 = GLF_live15i_1;
-      GLF_live15i_1 = as_type<int>((as_type<uint>(x_16) + as_type<uint>(1)));
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5901065..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,154 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 87
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %GLF_live15c "GLF_live15c"
-               OpName %GLF_live15i "GLF_live15i"
-               OpName %GLF_live15d "GLF_live15d"
-               OpName %GLF_live15i_1 "GLF_live15i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-      %int_0 = OpConstant %int 0
-      %int_4 = OpConstant %int 4
-       %bool = OpTypeBool
-      %int_3 = OpConstant %int 3
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-      %int_1 = OpConstant %int 1
-         %75 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %76 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-%GLF_live15c = OpVariable %_ptr_Function_v4float Function %5
-%GLF_live15i = OpVariable %_ptr_Function_int Function %17
-%GLF_live15d = OpVariable %_ptr_Function_v4float Function %5
-%GLF_live15i_1 = OpVariable %_ptr_Function_int Function %17
-               OpStore %GLF_live15c %21
-               OpStore %GLF_live15i %int_0
-               OpBranch %23
-         %23 = OpLabel
-               OpLoopMerge %24 %25 None
-               OpBranch %26
-         %26 = OpLabel
-         %27 = OpLoad %int %GLF_live15i
-         %29 = OpSLessThan %bool %27 %int_4
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %24
-         %31 = OpLabel
-         %34 = OpLoad %int %GLF_live15i
-         %36 = OpSGreaterThanEqual %bool %34 %int_3
-               OpSelectionMerge %37 None
-               OpBranchConditional %36 %38 %37
-         %38 = OpLabel
-               OpBranch %24
-         %37 = OpLabel
-         %42 = OpAccessChain %_ptr_Function_float %GLF_live15c %uint_1
-         %43 = OpLoad %float %42
-         %45 = OpFOrdGreaterThanEqual %bool %43 %float_1
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
-         %48 = OpLoad %int %GLF_live15i
-         %49 = OpAccessChain %_ptr_Function_float %GLF_live15c %48
-               OpStore %49 %float_1
-               OpBranch %46
-         %46 = OpLabel
-               OpBranch %25
-         %25 = OpLabel
-         %50 = OpLoad %int %GLF_live15i
-         %52 = OpIAdd %int %50 %int_1
-               OpStore %GLF_live15i %52
-               OpBranch %23
-         %24 = OpLabel
-               OpStore %GLF_live15d %21
-               OpStore %GLF_live15i_1 %int_0
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpLoad %int %GLF_live15i_1
-         %58 = OpSLessThan %bool %57 %int_4
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %61
-         %60 = OpLabel
-               OpBranch %59
-         %61 = OpLabel
-               OpBranch %54
-         %59 = OpLabel
-         %62 = OpLoad %int %GLF_live15i_1
-         %63 = OpSGreaterThanEqual %bool %62 %int_3
-               OpSelectionMerge %64 None
-               OpBranchConditional %63 %65 %64
-         %65 = OpLabel
-               OpBranch %54
-         %64 = OpLabel
-         %66 = OpAccessChain %_ptr_Function_float %GLF_live15d %uint_1
-         %67 = OpLoad %float %66
-         %68 = OpFOrdGreaterThanEqual %bool %67 %float_1
-               OpSelectionMerge %69 None
-               OpBranchConditional %68 %70 %69
-         %70 = OpLabel
-         %71 = OpLoad %int %GLF_live15i_1
-         %72 = OpAccessChain %_ptr_Function_float %GLF_live15d %71
-               OpStore %72 %float_1
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %73 = OpLoad %int %GLF_live15i_1
-         %74 = OpIAdd %int %73 %int_1
-               OpStore %GLF_live15i_1 %74
-               OpBranch %53
-         %54 = OpLabel
-               OpStore %x_GLF_color %75
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %76
-         %79 = OpLabel
-         %80 = OpFunctionCall %void %main_1
-         %81 = OpLoad %v4float %x_GLF_color
-         %82 = OpCompositeConstruct %main_out %81
-               OpReturnValue %82
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %84 = OpLabel
-         %85 = OpFunctionCall %main_out %main_inner
-         %86 = OpCompositeExtract %v4float %85 0
-               OpStore %x_GLF_color_1_1 %86
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a5541a2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-loops-with-break/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var GLF_live15c : vec4<f32>;
-  var GLF_live15i : i32;
-  var GLF_live15d : vec4<f32>;
-  var GLF_live15i_1 : i32;
-  GLF_live15c = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  GLF_live15i = 0;
-  loop {
-    let x_8 : i32 = GLF_live15i;
-    if ((x_8 < 4)) {
-    } else {
-      break;
-    }
-    let x_9 : i32 = GLF_live15i;
-    if ((x_9 >= 3)) {
-      break;
-    }
-    let x_49 : f32 = GLF_live15c.y;
-    if ((x_49 >= 1.0)) {
-      let x_10 : i32 = GLF_live15i;
-      GLF_live15c[x_10] = 1.0;
-    }
-
-    continuing {
-      let x_11 : i32 = GLF_live15i;
-      GLF_live15i = (x_11 + 1);
-    }
-  }
-  GLF_live15d = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  GLF_live15i_1 = 0;
-  loop {
-    let x_13 : i32 = GLF_live15i_1;
-    if ((x_13 < 4)) {
-    } else {
-      break;
-    }
-    let x_14 : i32 = GLF_live15i_1;
-    if ((x_14 >= 3)) {
-      break;
-    }
-    let x_64 : f32 = GLF_live15d.y;
-    if ((x_64 >= 1.0)) {
-      let x_15 : i32 = GLF_live15i_1;
-      GLF_live15d[x_15] = 1.0;
-    }
-
-    continuing {
-      let x_16 : i32 = GLF_live15i_1;
-      GLF_live15i_1 = (x_16 + 1);
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a05b43e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,81 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  const float x_35 = asfloat(x_7[0].y);
-  if ((x_35 < 0.0f)) {
-  } else {
-    bool x_42 = false;
-    const float x_41 = gl_FragCoord.y;
-    x_42 = (x_41 < -1.0f);
-    if (x_42) {
-    } else {
-      while (true) {
-        if ((i >= 256)) {
-          break;
-        }
-        while (true) {
-          i_1 = 0;
-          {
-            for(; (i_1 < 1); i_1 = (i_1 + 1)) {
-              if (x_42) {
-                i_2 = 0;
-                {
-                  for(; (i_2 < 1); i_2 = (i_2 + 1)) {
-                  }
-                }
-                continue;
-              }
-              return;
-            }
-          }
-          {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-        }
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.msl
deleted file mode 100644
index 87a02f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,100 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  float const x_35 = x_7.injectionSwitch.y;
-  if ((x_35 < 0.0f)) {
-  } else {
-    bool x_42 = false;
-    float const x_41 = (*(tint_symbol_4)).y;
-    x_42 = (x_41 < -1.0f);
-    if (x_42) {
-    } else {
-      while (true) {
-        int const x_50 = i;
-        if ((x_50 >= 256)) {
-          break;
-        }
-        while (true) {
-          i_1 = 0;
-          while (true) {
-            int const x_58 = i_1;
-            if ((x_58 < 1)) {
-            } else {
-              break;
-            }
-            if (x_42) {
-              i_2 = 0;
-              while (true) {
-                int const x_66 = i_2;
-                if ((x_66 < 1)) {
-                } else {
-                  break;
-                }
-                {
-                  int const x_70 = i_2;
-                  i_2 = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_72 = i_1;
-                i_1 = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-              }
-              continue;
-            }
-            return;
-            {
-              int const x_72 = i_1;
-              i_1 = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-            }
-          }
-          {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-        }
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0be0727..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,195 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 105
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %x_42 "x_42"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %27 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n1 = OpConstant %float -1
-    %int_256 = OpConstant %int 256
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %92 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %22
-        %i_1 = OpVariable %_ptr_Function_int Function %22
-        %i_2 = OpVariable %_ptr_Function_int Function %22
-       %x_42 = OpVariable %_ptr_Function_bool Function %42
-               OpStore %x_GLF_color %27
-               OpStore %i %int_0
-         %33 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %34 = OpLoad %float %33
-         %35 = OpFOrdLessThan %bool %34 %float_0
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-         %44 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %45 = OpLoad %float %44
-         %47 = OpFOrdLessThan %bool %45 %float_n1
-               OpStore %x_42 %47
-         %48 = OpLoad %bool %x_42
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpSGreaterThanEqual %bool %56 %int_256
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpBranch %53
-         %59 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %65
-         %65 = OpLabel
-               OpLoopMerge %66 %67 None
-               OpBranch %68
-         %68 = OpLabel
-         %69 = OpLoad %int %i_1
-         %71 = OpSLessThan %bool %69 %int_1
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-               OpBranch %72
-         %74 = OpLabel
-               OpBranch %66
-         %72 = OpLabel
-         %75 = OpLoad %bool %x_42
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-               OpStore %i_2 %int_0
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %82 = OpLoad %int %i_2
-         %83 = OpSLessThan %bool %82 %int_1
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %79
-         %84 = OpLabel
-               OpBranch %80
-         %80 = OpLabel
-         %87 = OpLoad %int %i_2
-         %88 = OpIAdd %int %87 %int_1
-               OpStore %i_2 %88
-               OpBranch %78
-         %79 = OpLabel
-               OpBranch %67
-         %76 = OpLabel
-               OpReturn
-         %67 = OpLabel
-         %89 = OpLoad %int %i_1
-         %90 = OpIAdd %int %89 %int_1
-               OpStore %i_1 %90
-               OpBranch %65
-         %66 = OpLabel
-               OpBranch %63
-         %63 = OpLabel
-               OpBranchConditional %false %61 %62
-         %62 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-               OpBranchConditional %false %52 %53
-         %53 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %92
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %96 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %97 = OpFunctionCall %void %main_1
-         %98 = OpLoad %v4float %x_GLF_color
-         %99 = OpCompositeConstruct %main_out %98
-               OpReturnValue %99
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %101 = OpLabel
-        %103 = OpLoad %v4float %gl_FragCoord_param_1
-        %102 = OpFunctionCall %main_out %main_inner %103
-        %104 = OpCompositeExtract %v4float %102 0
-               OpStore %x_GLF_color_1_1 %104
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a826fa8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 0;
-  let x_35 : f32 = x_7.injectionSwitch.y;
-  if ((x_35 < 0.0)) {
-  } else {
-    var x_42 : bool;
-    let x_41 : f32 = gl_FragCoord.y;
-    x_42 = (x_41 < -1.0);
-    if (x_42) {
-    } else {
-      loop {
-        let x_50 : i32 = i;
-        if ((x_50 >= 256)) {
-          break;
-        }
-        loop {
-          i_1 = 0;
-          loop {
-            let x_58 : i32 = i_1;
-            if ((x_58 < 1)) {
-            } else {
-              break;
-            }
-            if (x_42) {
-              i_2 = 0;
-              loop {
-                let x_66 : i32 = i_2;
-                if ((x_66 < 1)) {
-                } else {
-                  break;
-                }
-
-                continuing {
-                  let x_70 : i32 = i_2;
-                  i_2 = (x_70 + 1);
-                }
-              }
-              continue;
-            }
-            return;
-
-            continuing {
-              let x_72 : i32 = i_1;
-              i_1 = (x_72 + 1);
-            }
-          }
-
-          continuing {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-        }
-
-        continuing {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a05b43e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,81 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  const float x_35 = asfloat(x_7[0].y);
-  if ((x_35 < 0.0f)) {
-  } else {
-    bool x_42 = false;
-    const float x_41 = gl_FragCoord.y;
-    x_42 = (x_41 < -1.0f);
-    if (x_42) {
-    } else {
-      while (true) {
-        if ((i >= 256)) {
-          break;
-        }
-        while (true) {
-          i_1 = 0;
-          {
-            for(; (i_1 < 1); i_1 = (i_1 + 1)) {
-              if (x_42) {
-                i_2 = 0;
-                {
-                  for(; (i_2 < 1); i_2 = (i_2 + 1)) {
-                  }
-                }
-                continue;
-              }
-              return;
-            }
-          }
-          {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-        }
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.msl
deleted file mode 100644
index 87a02f1..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,100 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  int i = 0;
-  int i_1 = 0;
-  int i_2 = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  float const x_35 = x_7.injectionSwitch.y;
-  if ((x_35 < 0.0f)) {
-  } else {
-    bool x_42 = false;
-    float const x_41 = (*(tint_symbol_4)).y;
-    x_42 = (x_41 < -1.0f);
-    if (x_42) {
-    } else {
-      while (true) {
-        int const x_50 = i;
-        if ((x_50 >= 256)) {
-          break;
-        }
-        while (true) {
-          i_1 = 0;
-          while (true) {
-            int const x_58 = i_1;
-            if ((x_58 < 1)) {
-            } else {
-              break;
-            }
-            if (x_42) {
-              i_2 = 0;
-              while (true) {
-                int const x_66 = i_2;
-                if ((x_66 < 1)) {
-                } else {
-                  break;
-                }
-                {
-                  int const x_70 = i_2;
-                  i_2 = as_type<int>((as_type<uint>(x_70) + as_type<uint>(1)));
-                }
-              }
-              {
-                int const x_72 = i_1;
-                i_1 = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-              }
-              continue;
-            }
-            return;
-            {
-              int const x_72 = i_1;
-              i_1 = as_type<int>((as_type<uint>(x_72) + as_type<uint>(1)));
-            }
-          }
-          {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-        }
-        {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 0be0727..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,195 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 105
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %i_1 "i_1"
-               OpName %i_2 "i_2"
-               OpName %x_42 "x_42"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %22 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %27 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %42 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n1 = OpConstant %float -1
-    %int_256 = OpConstant %int 256
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %92 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %22
-        %i_1 = OpVariable %_ptr_Function_int Function %22
-        %i_2 = OpVariable %_ptr_Function_int Function %22
-       %x_42 = OpVariable %_ptr_Function_bool Function %42
-               OpStore %x_GLF_color %27
-               OpStore %i %int_0
-         %33 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %34 = OpLoad %float %33
-         %35 = OpFOrdLessThan %bool %34 %float_0
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %39
-         %38 = OpLabel
-               OpBranch %37
-         %39 = OpLabel
-         %44 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %45 = OpLoad %float %44
-         %47 = OpFOrdLessThan %bool %45 %float_n1
-               OpStore %x_42 %47
-         %48 = OpLoad %bool %x_42
-               OpSelectionMerge %49 None
-               OpBranchConditional %48 %50 %51
-         %50 = OpLabel
-               OpBranch %49
-         %51 = OpLabel
-               OpBranch %52
-         %52 = OpLabel
-               OpLoopMerge %53 %54 None
-               OpBranch %55
-         %55 = OpLabel
-         %56 = OpLoad %int %i
-         %58 = OpSGreaterThanEqual %bool %56 %int_256
-               OpSelectionMerge %59 None
-               OpBranchConditional %58 %60 %59
-         %60 = OpLabel
-               OpBranch %53
-         %59 = OpLabel
-               OpBranch %61
-         %61 = OpLabel
-               OpLoopMerge %62 %63 None
-               OpBranch %64
-         %64 = OpLabel
-               OpStore %i_1 %int_0
-               OpBranch %65
-         %65 = OpLabel
-               OpLoopMerge %66 %67 None
-               OpBranch %68
-         %68 = OpLabel
-         %69 = OpLoad %int %i_1
-         %71 = OpSLessThan %bool %69 %int_1
-               OpSelectionMerge %72 None
-               OpBranchConditional %71 %73 %74
-         %73 = OpLabel
-               OpBranch %72
-         %74 = OpLabel
-               OpBranch %66
-         %72 = OpLabel
-         %75 = OpLoad %bool %x_42
-               OpSelectionMerge %76 None
-               OpBranchConditional %75 %77 %76
-         %77 = OpLabel
-               OpStore %i_2 %int_0
-               OpBranch %78
-         %78 = OpLabel
-               OpLoopMerge %79 %80 None
-               OpBranch %81
-         %81 = OpLabel
-         %82 = OpLoad %int %i_2
-         %83 = OpSLessThan %bool %82 %int_1
-               OpSelectionMerge %84 None
-               OpBranchConditional %83 %85 %86
-         %85 = OpLabel
-               OpBranch %84
-         %86 = OpLabel
-               OpBranch %79
-         %84 = OpLabel
-               OpBranch %80
-         %80 = OpLabel
-         %87 = OpLoad %int %i_2
-         %88 = OpIAdd %int %87 %int_1
-               OpStore %i_2 %88
-               OpBranch %78
-         %79 = OpLabel
-               OpBranch %67
-         %76 = OpLabel
-               OpReturn
-         %67 = OpLabel
-         %89 = OpLoad %int %i_1
-         %90 = OpIAdd %int %89 %int_1
-               OpStore %i_1 %90
-               OpBranch %65
-         %66 = OpLabel
-               OpBranch %63
-         %63 = OpLabel
-               OpBranchConditional %false %61 %62
-         %62 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-               OpBranchConditional %false %52 %53
-         %53 = OpLabel
-               OpBranch %49
-         %49 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %92
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %96 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %97 = OpFunctionCall %void %main_1
-         %98 = OpLoad %v4float %x_GLF_color
-         %99 = OpCompositeConstruct %main_out %98
-               OpReturnValue %99
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-        %101 = OpLabel
-        %103 = OpLoad %v4float %gl_FragCoord_param_1
-        %102 = OpFunctionCall %main_out %main_inner %103
-        %104 = OpCompositeExtract %v4float %102 0
-               OpStore %x_GLF_color_1_1 %104
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a826fa8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-do-whiles/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,93 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var i_1 : i32;
-  var i_2 : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 0;
-  let x_35 : f32 = x_7.injectionSwitch.y;
-  if ((x_35 < 0.0)) {
-  } else {
-    var x_42 : bool;
-    let x_41 : f32 = gl_FragCoord.y;
-    x_42 = (x_41 < -1.0);
-    if (x_42) {
-    } else {
-      loop {
-        let x_50 : i32 = i;
-        if ((x_50 >= 256)) {
-          break;
-        }
-        loop {
-          i_1 = 0;
-          loop {
-            let x_58 : i32 = i_1;
-            if ((x_58 < 1)) {
-            } else {
-              break;
-            }
-            if (x_42) {
-              i_2 = 0;
-              loop {
-                let x_66 : i32 = i_2;
-                if ((x_66 < 1)) {
-                } else {
-                  break;
-                }
-
-                continuing {
-                  let x_70 : i32 = i_2;
-                  i_2 = (x_70 + 1);
-                }
-              }
-              continue;
-            }
-            return;
-
-            continuing {
-              let x_72 : i32 = i_1;
-              i_1 = (x_72 + 1);
-            }
-          }
-
-          continuing {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-        }
-
-        continuing {
-          if (false) {
-          } else {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 522b92d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-RWByteAddressBuffer x_9 : register(u0, space0);
-
-float nb_mod_() {
-  float s = 0.0f;
-  int i = 0;
-  int GLF_live1i = 0;
-  int GLF_live1_looplimiter2 = 0;
-  float x_51 = 0.0f;
-  float x_56_phi = 0.0f;
-  s = 0.0f;
-  i = 5;
-  while (true) {
-    float x_50 = 0.0f;
-    float x_51_phi = 0.0f;
-    x_56_phi = 0.0f;
-    if ((5 < 800)) {
-    } else {
-      break;
-    }
-    GLF_live1i = 0;
-    while (true) {
-      x_51_phi = 0.0f;
-      if ((0 < 20)) {
-      } else {
-        break;
-      }
-      if ((0 >= 5)) {
-        x_50 = (0.0f + 1.0f);
-        s = x_50;
-        x_51_phi = x_50;
-        break;
-      }
-      return 42.0f;
-    }
-    x_51 = x_51_phi;
-    if ((float(5) <= x_51)) {
-      x_56_phi = x_51;
-      break;
-    }
-    return 42.0f;
-  }
-  return x_56_phi;
-}
-
-void main_1() {
-  const float x_32 = nb_mod_();
-  x_9.Store((4u * uint(0)), asuint(x_32));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.msl
deleted file mode 100644
index d1dd6df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct doesNotMatter {
-  /* 0x0000 */ float x_compute_data[1];
-};
-
-float nb_mod_() {
-  float s = 0.0f;
-  int i = 0;
-  int GLF_live1i = 0;
-  int GLF_live1_looplimiter2 = 0;
-  float x_51 = 0.0f;
-  float x_56_phi = 0.0f;
-  s = 0.0f;
-  i = 5;
-  while (true) {
-    float x_50 = 0.0f;
-    float x_51_phi = 0.0f;
-    x_56_phi = 0.0f;
-    if ((5 < 800)) {
-    } else {
-      break;
-    }
-    GLF_live1i = 0;
-    while (true) {
-      x_51_phi = 0.0f;
-      if ((0 < 20)) {
-      } else {
-        break;
-      }
-      if ((0 >= 5)) {
-        x_50 = (0.0f + 1.0f);
-        s = x_50;
-        x_51_phi = x_50;
-        break;
-      }
-      return 42.0f;
-    }
-    x_51 = x_51_phi;
-    if ((float(5) <= x_51)) {
-      x_56_phi = x_51;
-      break;
-    }
-    return 42.0f;
-  }
-  float const x_56 = x_56_phi;
-  return x_56;
-}
-
-void main_1(device doesNotMatter& x_9) {
-  float const x_32 = nb_mod_();
-  x_9.x_compute_data[0] = x_32;
-  return;
-}
-
-kernel void tint_symbol(device doesNotMatter& x_9 [[buffer(0)]]) {
-  main_1(x_9);
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 6f8894803..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %doesNotMatter "doesNotMatter"
-               OpMemberName %doesNotMatter 0 "x_compute_data"
-               OpName %x_9 "x_9"
-               OpName %nb_mod_ "nb_mod_"
-               OpName %s "s"
-               OpName %i "i"
-               OpName %GLF_live1i "GLF_live1i"
-               OpName %GLF_live1_looplimiter2 "GLF_live1_looplimiter2"
-               OpName %x_51 "x_51"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_50 "x_50"
-               OpName %x_51_phi "x_51_phi"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %doesNotMatter Block
-               OpMemberDecorate %doesNotMatter 0 Offset 0
-               OpDecorate %_runtimearr_float ArrayStride 4
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-      %float = OpTypeFloat 32
-%_runtimearr_float = OpTypeRuntimeArray %float
-%doesNotMatter = OpTypeStruct %_runtimearr_float
-%_ptr_StorageBuffer_doesNotMatter = OpTypePointer StorageBuffer %doesNotMatter
-        %x_9 = OpVariable %_ptr_StorageBuffer_doesNotMatter StorageBuffer
-          %6 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %11 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-      %int_5 = OpConstant %int 5
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-   %float_42 = OpConstant %float 42
-    %float_5 = OpConstant %float 5
-       %void = OpTypeVoid
-         %60 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
-    %nb_mod_ = OpFunction %float None %6
-          %8 = OpLabel
-          %s = OpVariable %_ptr_Function_float Function %11
-          %i = OpVariable %_ptr_Function_int Function %15
- %GLF_live1i = OpVariable %_ptr_Function_int Function %15
-%GLF_live1_looplimiter2 = OpVariable %_ptr_Function_int Function %15
-       %x_51 = OpVariable %_ptr_Function_float Function %11
-   %x_56_phi = OpVariable %_ptr_Function_float Function %11
-       %x_50 = OpVariable %_ptr_Function_float Function %11
-   %x_51_phi = OpVariable %_ptr_Function_float Function %11
-               OpStore %s %float_0
-               OpStore %i %int_5
-               OpBranch %22
-         %22 = OpLabel
-               OpLoopMerge %23 %24 None
-               OpBranch %25
-         %25 = OpLabel
-               OpStore %x_56_phi %float_0
-         %29 = OpSLessThan %bool %int_5 %int_800
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %23
-         %31 = OpLabel
-               OpStore %GLF_live1i %int_0
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-               OpStore %x_51_phi %float_0
-         %40 = OpSLessThan %bool %int_0 %int_20
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %36
-         %41 = OpLabel
-         %44 = OpSGreaterThanEqual %bool %int_0 %int_5
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-         %48 = OpFAdd %float %float_0 %float_1
-               OpStore %x_50 %48
-         %49 = OpLoad %float %x_50
-               OpStore %s %49
-         %50 = OpLoad %float %x_50
-               OpStore %x_51_phi %50
-               OpBranch %36
-         %45 = OpLabel
-               OpReturnValue %float_42
-         %37 = OpLabel
-               OpBranch %35
-         %36 = OpLabel
-         %52 = OpLoad %float %x_51_phi
-               OpStore %x_51 %52
-         %54 = OpLoad %float %x_51
-         %55 = OpFOrdLessThanEqual %bool %float_5 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-         %58 = OpLoad %float %x_51
-               OpStore %x_56_phi %58
-               OpBranch %23
-         %56 = OpLabel
-               OpReturnValue %float_42
-         %24 = OpLabel
-               OpBranch %22
-         %23 = OpLabel
-         %59 = OpLoad %float %x_56_phi
-               OpReturnValue %59
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %float %nb_mod_
-         %68 = OpAccessChain %_ptr_StorageBuffer_float %x_9 %uint_0 %int_0
-               OpStore %68 %64
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %60
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 01d9e68..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,62 +0,0 @@
-type RTArr = [[stride(4)]] array<f32>;
-
-[[block]]
-struct doesNotMatter {
-  x_compute_data : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_9 : doesNotMatter;
-
-fn nb_mod_() -> f32 {
-  var s : f32;
-  var i : i32;
-  var GLF_live1i : i32;
-  var GLF_live1_looplimiter2 : i32;
-  var x_51 : f32;
-  var x_56_phi : f32;
-  s = 0.0;
-  i = 5;
-  loop {
-    var x_50 : f32;
-    var x_51_phi : f32;
-    x_56_phi = 0.0;
-    if ((5 < 800)) {
-    } else {
-      break;
-    }
-    GLF_live1i = 0;
-    loop {
-      x_51_phi = 0.0;
-      if ((0 < 20)) {
-      } else {
-        break;
-      }
-      if ((0 >= 5)) {
-        x_50 = (0.0 + 1.0);
-        s = x_50;
-        x_51_phi = x_50;
-        break;
-      }
-      return 42.0;
-    }
-    x_51 = x_51_phi;
-    if ((f32(5) <= x_51)) {
-      x_56_phi = x_51;
-      break;
-    }
-    return 42.0;
-  }
-  let x_56 : f32 = x_56_phi;
-  return x_56;
-}
-
-fn main_1() {
-  let x_32 : f32 = nb_mod_();
-  x_9.x_compute_data[0] = x_32;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 522b92d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-RWByteAddressBuffer x_9 : register(u0, space0);
-
-float nb_mod_() {
-  float s = 0.0f;
-  int i = 0;
-  int GLF_live1i = 0;
-  int GLF_live1_looplimiter2 = 0;
-  float x_51 = 0.0f;
-  float x_56_phi = 0.0f;
-  s = 0.0f;
-  i = 5;
-  while (true) {
-    float x_50 = 0.0f;
-    float x_51_phi = 0.0f;
-    x_56_phi = 0.0f;
-    if ((5 < 800)) {
-    } else {
-      break;
-    }
-    GLF_live1i = 0;
-    while (true) {
-      x_51_phi = 0.0f;
-      if ((0 < 20)) {
-      } else {
-        break;
-      }
-      if ((0 >= 5)) {
-        x_50 = (0.0f + 1.0f);
-        s = x_50;
-        x_51_phi = x_50;
-        break;
-      }
-      return 42.0f;
-    }
-    x_51 = x_51_phi;
-    if ((float(5) <= x_51)) {
-      x_56_phi = x_51;
-      break;
-    }
-    return 42.0f;
-  }
-  return x_56_phi;
-}
-
-void main_1() {
-  const float x_32 = nb_mod_();
-  x_9.Store((4u * uint(0)), asuint(x_32));
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.msl
deleted file mode 100644
index d1dd6df..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct doesNotMatter {
-  /* 0x0000 */ float x_compute_data[1];
-};
-
-float nb_mod_() {
-  float s = 0.0f;
-  int i = 0;
-  int GLF_live1i = 0;
-  int GLF_live1_looplimiter2 = 0;
-  float x_51 = 0.0f;
-  float x_56_phi = 0.0f;
-  s = 0.0f;
-  i = 5;
-  while (true) {
-    float x_50 = 0.0f;
-    float x_51_phi = 0.0f;
-    x_56_phi = 0.0f;
-    if ((5 < 800)) {
-    } else {
-      break;
-    }
-    GLF_live1i = 0;
-    while (true) {
-      x_51_phi = 0.0f;
-      if ((0 < 20)) {
-      } else {
-        break;
-      }
-      if ((0 >= 5)) {
-        x_50 = (0.0f + 1.0f);
-        s = x_50;
-        x_51_phi = x_50;
-        break;
-      }
-      return 42.0f;
-    }
-    x_51 = x_51_phi;
-    if ((float(5) <= x_51)) {
-      x_56_phi = x_51;
-      break;
-    }
-    return 42.0f;
-  }
-  float const x_56 = x_56_phi;
-  return x_56;
-}
-
-void main_1(device doesNotMatter& x_9) {
-  float const x_32 = nb_mod_();
-  x_9.x_compute_data[0] = x_32;
-  return;
-}
-
-kernel void tint_symbol(device doesNotMatter& x_9 [[buffer(0)]]) {
-  main_1(x_9);
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 6f8894803..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,140 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %doesNotMatter "doesNotMatter"
-               OpMemberName %doesNotMatter 0 "x_compute_data"
-               OpName %x_9 "x_9"
-               OpName %nb_mod_ "nb_mod_"
-               OpName %s "s"
-               OpName %i "i"
-               OpName %GLF_live1i "GLF_live1i"
-               OpName %GLF_live1_looplimiter2 "GLF_live1_looplimiter2"
-               OpName %x_51 "x_51"
-               OpName %x_56_phi "x_56_phi"
-               OpName %x_50 "x_50"
-               OpName %x_51_phi "x_51_phi"
-               OpName %main_1 "main_1"
-               OpName %main "main"
-               OpDecorate %doesNotMatter Block
-               OpMemberDecorate %doesNotMatter 0 Offset 0
-               OpDecorate %_runtimearr_float ArrayStride 4
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-      %float = OpTypeFloat 32
-%_runtimearr_float = OpTypeRuntimeArray %float
-%doesNotMatter = OpTypeStruct %_runtimearr_float
-%_ptr_StorageBuffer_doesNotMatter = OpTypePointer StorageBuffer %doesNotMatter
-        %x_9 = OpVariable %_ptr_StorageBuffer_doesNotMatter StorageBuffer
-          %6 = OpTypeFunction %float
-%_ptr_Function_float = OpTypePointer Function %float
-         %11 = OpConstantNull %float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-    %float_0 = OpConstant %float 0
-      %int_5 = OpConstant %int 5
-    %int_800 = OpConstant %int 800
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-     %int_20 = OpConstant %int 20
-    %float_1 = OpConstant %float 1
-   %float_42 = OpConstant %float 42
-    %float_5 = OpConstant %float 5
-       %void = OpTypeVoid
-         %60 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
-    %nb_mod_ = OpFunction %float None %6
-          %8 = OpLabel
-          %s = OpVariable %_ptr_Function_float Function %11
-          %i = OpVariable %_ptr_Function_int Function %15
- %GLF_live1i = OpVariable %_ptr_Function_int Function %15
-%GLF_live1_looplimiter2 = OpVariable %_ptr_Function_int Function %15
-       %x_51 = OpVariable %_ptr_Function_float Function %11
-   %x_56_phi = OpVariable %_ptr_Function_float Function %11
-       %x_50 = OpVariable %_ptr_Function_float Function %11
-   %x_51_phi = OpVariable %_ptr_Function_float Function %11
-               OpStore %s %float_0
-               OpStore %i %int_5
-               OpBranch %22
-         %22 = OpLabel
-               OpLoopMerge %23 %24 None
-               OpBranch %25
-         %25 = OpLabel
-               OpStore %x_56_phi %float_0
-         %29 = OpSLessThan %bool %int_5 %int_800
-               OpSelectionMerge %31 None
-               OpBranchConditional %29 %32 %33
-         %32 = OpLabel
-               OpBranch %31
-         %33 = OpLabel
-               OpBranch %23
-         %31 = OpLabel
-               OpStore %GLF_live1i %int_0
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-               OpStore %x_51_phi %float_0
-         %40 = OpSLessThan %bool %int_0 %int_20
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %43
-         %42 = OpLabel
-               OpBranch %41
-         %43 = OpLabel
-               OpBranch %36
-         %41 = OpLabel
-         %44 = OpSGreaterThanEqual %bool %int_0 %int_5
-               OpSelectionMerge %45 None
-               OpBranchConditional %44 %46 %45
-         %46 = OpLabel
-         %48 = OpFAdd %float %float_0 %float_1
-               OpStore %x_50 %48
-         %49 = OpLoad %float %x_50
-               OpStore %s %49
-         %50 = OpLoad %float %x_50
-               OpStore %x_51_phi %50
-               OpBranch %36
-         %45 = OpLabel
-               OpReturnValue %float_42
-         %37 = OpLabel
-               OpBranch %35
-         %36 = OpLabel
-         %52 = OpLoad %float %x_51_phi
-               OpStore %x_51 %52
-         %54 = OpLoad %float %x_51
-         %55 = OpFOrdLessThanEqual %bool %float_5 %54
-               OpSelectionMerge %56 None
-               OpBranchConditional %55 %57 %56
-         %57 = OpLabel
-         %58 = OpLoad %float %x_51
-               OpStore %x_56_phi %58
-               OpBranch %23
-         %56 = OpLabel
-               OpReturnValue %float_42
-         %24 = OpLabel
-               OpBranch %22
-         %23 = OpLabel
-         %59 = OpLoad %float %x_56_phi
-               OpReturnValue %59
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %60
-         %63 = OpLabel
-         %64 = OpFunctionCall %float %nb_mod_
-         %68 = OpAccessChain %_ptr_StorageBuffer_float %x_9 %uint_0 %int_0
-               OpStore %68 %64
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %60
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 01d9e68..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-for-loops-with-returns/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,62 +0,0 @@
-type RTArr = [[stride(4)]] array<f32>;
-
-[[block]]
-struct doesNotMatter {
-  x_compute_data : RTArr;
-};
-
-[[group(0), binding(0)]] var<storage, read_write> x_9 : doesNotMatter;
-
-fn nb_mod_() -> f32 {
-  var s : f32;
-  var i : i32;
-  var GLF_live1i : i32;
-  var GLF_live1_looplimiter2 : i32;
-  var x_51 : f32;
-  var x_56_phi : f32;
-  s = 0.0;
-  i = 5;
-  loop {
-    var x_50 : f32;
-    var x_51_phi : f32;
-    x_56_phi = 0.0;
-    if ((5 < 800)) {
-    } else {
-      break;
-    }
-    GLF_live1i = 0;
-    loop {
-      x_51_phi = 0.0;
-      if ((0 < 20)) {
-      } else {
-        break;
-      }
-      if ((0 >= 5)) {
-        x_50 = (0.0 + 1.0);
-        s = x_50;
-        x_51_phi = x_50;
-        break;
-      }
-      return 42.0;
-    }
-    x_51 = x_51_phi;
-    if ((f32(5) <= x_51)) {
-      x_56_phi = x_51;
-      break;
-    }
-    return 42.0;
-  }
-  let x_56 : f32 = x_56_phi;
-  return x_56;
-}
-
-fn main_1() {
-  let x_32 : f32 = nb_mod_();
-  x_9.x_compute_data[0] = x_32;
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.msl
deleted file mode 100644
index bcfbeef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 mand_() {
-  int k = 0;
-  k = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    discard_fragment();
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int j = 0;
-  float const x_37 = x_7.injectionSwitch.x;
-  float const x_39 = x_7.injectionSwitch.y;
-  if ((x_37 > x_39)) {
-    j = 0;
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      {
-        float3 const x_46 = mand_();
-      }
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2ce771a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,130 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %mand_ "mand_"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-         %12 = OpTypeFunction %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-       %void = OpTypeVoid
-         %32 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %57 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-      %mand_ = OpFunction %v3float None %12
-         %15 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %19
-               OpStore %k %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-               OpSelectionMerge %27 None
-               OpBranchConditional %true %28 %29
-         %28 = OpLabel
-               OpBranch %27
-         %29 = OpLabel
-               OpBranch %22
-         %27 = OpLabel
-               OpKill
-         %23 = OpLabel
-               OpBranch %21
-         %22 = OpLabel
-               OpReturnValue %31
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %32
-         %35 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %19
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %41 = OpLoad %float %40
-         %43 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %44 = OpLoad %float %43
-         %45 = OpFOrdGreaterThan %bool %41 %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
-               OpStore %j %int_0
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-               OpSelectionMerge %52 None
-               OpBranchConditional %true %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %49
-         %52 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-         %55 = OpFunctionCall %v3float %mand_
-               OpBranch %48
-         %49 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpStore %x_GLF_color %57
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %32
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 26e8226..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,53 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn mand_() -> vec3<f32> {
-  var k : i32;
-  k = 0;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    discard;
-  }
-  return vec3<f32>(1.0, 1.0, 1.0);
-}
-
-fn main_1() {
-  var j : i32;
-  let x_37 : f32 = x_7.injectionSwitch.x;
-  let x_39 : f32 = x_7.injectionSwitch.y;
-  if ((x_37 > x_39)) {
-    j = 0;
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-
-      continuing {
-        let x_46 : vec3<f32> = mand_();
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.msl
deleted file mode 100644
index bcfbeef..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 mand_() {
-  int k = 0;
-  k = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    discard_fragment();
-  }
-  return float3(1.0f, 1.0f, 1.0f);
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int j = 0;
-  float const x_37 = x_7.injectionSwitch.x;
-  float const x_39 = x_7.injectionSwitch.y;
-  if ((x_37 > x_39)) {
-    j = 0;
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      {
-        float3 const x_46 = mand_();
-      }
-    }
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  main_1(x_7, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2ce771a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,130 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %mand_ "mand_"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-         %12 = OpTypeFunction %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %31 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-       %void = OpTypeVoid
-         %32 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-    %float_0 = OpConstant %float 0
-         %57 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %58 = OpTypeFunction %main_out
-      %mand_ = OpFunction %v3float None %12
-         %15 = OpLabel
-          %k = OpVariable %_ptr_Function_int Function %19
-               OpStore %k %int_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-               OpSelectionMerge %27 None
-               OpBranchConditional %true %28 %29
-         %28 = OpLabel
-               OpBranch %27
-         %29 = OpLabel
-               OpBranch %22
-         %27 = OpLabel
-               OpKill
-         %23 = OpLabel
-               OpBranch %21
-         %22 = OpLabel
-               OpReturnValue %31
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %32
-         %35 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %19
-         %40 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %41 = OpLoad %float %40
-         %43 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %44 = OpLoad %float %43
-         %45 = OpFOrdGreaterThan %bool %41 %44
-               OpSelectionMerge %46 None
-               OpBranchConditional %45 %47 %46
-         %47 = OpLabel
-               OpStore %j %int_0
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-               OpSelectionMerge %52 None
-               OpBranchConditional %true %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %49
-         %52 = OpLabel
-               OpBranch %50
-         %50 = OpLabel
-         %55 = OpFunctionCall %v3float %mand_
-               OpBranch %48
-         %49 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-               OpStore %x_GLF_color %57
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %58
-         %61 = OpLabel
-         %62 = OpFunctionCall %void %main_1
-         %63 = OpLoad %v4float %x_GLF_color
-         %64 = OpCompositeConstruct %main_out %63
-               OpReturnValue %64
-               OpFunctionEnd
-       %main = OpFunction %void None %32
-         %66 = OpLabel
-         %67 = OpFunctionCall %main_out %main_inner
-         %68 = OpCompositeExtract %v4float %67 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 26e8226..0000000
--- a/test/vk-gl-cts/graphicsfuzz/two-nested-infinite-loops-discard/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,53 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn mand_() -> vec3<f32> {
-  var k : i32;
-  k = 0;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    discard;
-  }
-  return vec3<f32>(1.0, 1.0, 1.0);
-}
-
-fn main_1() {
-  var j : i32;
-  let x_37 : f32 = x_7.injectionSwitch.x;
-  let x_39 : f32 = x_7.injectionSwitch.y;
-  if ((x_37 > x_39)) {
-    j = 0;
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-
-      continuing {
-        let x_46 : vec3<f32> = mand_();
-      }
-    }
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.msl
deleted file mode 100644
index 17d233f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int GLF_dead6index = 0;
-  int GLF_dead6currentNode = 0;
-  tint_array_wrapper donor_replacementGLF_dead6tree = {};
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  GLF_dead6index = 0;
-  float const x_34 = x_6.injectionSwitch.y;
-  if ((x_34 < 0.0f)) {
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      int const x_9 = GLF_dead6index;
-      int const x_10 = donor_replacementGLF_dead6tree.arr[x_9];
-      GLF_dead6currentNode = x_10;
-      int const x_11 = GLF_dead6currentNode;
-      GLF_dead6index = x_11;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index 1db59f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %GLF_dead6index "GLF_dead6index"
-               OpName %GLF_dead6currentNode "GLF_dead6currentNode"
-               OpName %donor_replacementGLF_dead6tree "donor_replacementGLF_dead6tree"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Function__arr_int_uint_1 = OpTypePointer Function %_arr_int_uint_1
-         %26 = OpConstantNull %_arr_int_uint_1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %51 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-%GLF_dead6index = OpVariable %_ptr_Function_int Function %19
-%GLF_dead6currentNode = OpVariable %_ptr_Function_int Function %19
-%donor_replacementGLF_dead6tree = OpVariable %_ptr_Function__arr_int_uint_1 Function %26
-               OpStore %x_GLF_color %29
-               OpStore %GLF_dead6index %int_0
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %34 = OpLoad %float %33
-         %35 = OpFOrdLessThan %bool %34 %float_0
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %37
-         %38 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-               OpSelectionMerge %44 None
-               OpBranchConditional %true %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %40
-         %44 = OpLabel
-         %47 = OpLoad %int %GLF_dead6index
-         %48 = OpAccessChain %_ptr_Function_int %donor_replacementGLF_dead6tree %47
-         %49 = OpLoad %int %48
-               OpStore %GLF_dead6currentNode %49
-         %50 = OpLoad %int %GLF_dead6currentNode
-               OpStore %GLF_dead6index %50
-               OpBranch %41
-         %41 = OpLabel
-               OpBranch %39
-         %40 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %51
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %v4float %x_GLF_color
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %59 = OpLabel
-         %60 = OpFunctionCall %main_out %main_inner
-         %61 = OpCompositeExtract %v4float %60 0
-               OpStore %x_GLF_color_1_1 %61
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index eec717f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var GLF_dead6index : i32;
-  var GLF_dead6currentNode : i32;
-  var donor_replacementGLF_dead6tree : array<i32, 1>;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  GLF_dead6index = 0;
-  let x_34 : f32 = x_6.injectionSwitch.y;
-  if ((x_34 < 0.0)) {
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-      let x_9 : i32 = GLF_dead6index;
-      let x_10 : i32 = donor_replacementGLF_dead6tree[x_9];
-      GLF_dead6currentNode = x_10;
-      let x_11 : i32 = GLF_dead6currentNode;
-      GLF_dead6index = x_11;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.msl
deleted file mode 100644
index 17d233f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  int arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int GLF_dead6index = 0;
-  int GLF_dead6currentNode = 0;
-  tint_array_wrapper donor_replacementGLF_dead6tree = {};
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  GLF_dead6index = 0;
-  float const x_34 = x_6.injectionSwitch.y;
-  if ((x_34 < 0.0f)) {
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      int const x_9 = GLF_dead6index;
-      int const x_10 = donor_replacementGLF_dead6tree.arr[x_9];
-      GLF_dead6currentNode = x_10;
-      int const x_11 = GLF_dead6currentNode;
-      GLF_dead6index = x_11;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index 1db59f9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,114 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 62
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %GLF_dead6index "GLF_dead6index"
-               OpName %GLF_dead6currentNode "GLF_dead6currentNode"
-               OpName %donor_replacementGLF_dead6tree "donor_replacementGLF_dead6tree"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %_arr_int_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_int_uint_1 = OpTypeArray %int %uint_1
-%_ptr_Function__arr_int_uint_1 = OpTypePointer Function %_arr_int_uint_1
-         %26 = OpConstantNull %_arr_int_uint_1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %29 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %51 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-%GLF_dead6index = OpVariable %_ptr_Function_int Function %19
-%GLF_dead6currentNode = OpVariable %_ptr_Function_int Function %19
-%donor_replacementGLF_dead6tree = OpVariable %_ptr_Function__arr_int_uint_1 Function %26
-               OpStore %x_GLF_color %29
-               OpStore %GLF_dead6index %int_0
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %34 = OpLoad %float %33
-         %35 = OpFOrdLessThan %bool %34 %float_0
-               OpSelectionMerge %37 None
-               OpBranchConditional %35 %38 %37
-         %38 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-               OpLoopMerge %40 %41 None
-               OpBranch %42
-         %42 = OpLabel
-               OpSelectionMerge %44 None
-               OpBranchConditional %true %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %40
-         %44 = OpLabel
-         %47 = OpLoad %int %GLF_dead6index
-         %48 = OpAccessChain %_ptr_Function_int %donor_replacementGLF_dead6tree %47
-         %49 = OpLoad %int %48
-               OpStore %GLF_dead6currentNode %49
-         %50 = OpLoad %int %GLF_dead6currentNode
-               OpStore %GLF_dead6index %50
-               OpBranch %41
-         %41 = OpLabel
-               OpBranch %39
-         %40 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %51
-         %54 = OpLabel
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %v4float %x_GLF_color
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %59 = OpLabel
-         %60 = OpFunctionCall %main_out %main_inner
-         %61 = OpCompositeExtract %v4float %60 0
-               OpStore %x_GLF_color_1_1 %61
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index eec717f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var GLF_dead6index : i32;
-  var GLF_dead6currentNode : i32;
-  var donor_replacementGLF_dead6tree : array<i32, 1>;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  GLF_dead6index = 0;
-  let x_34 : f32 = x_6.injectionSwitch.y;
-  if ((x_34 < 0.0)) {
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-      let x_9 : i32 = GLF_dead6index;
-      let x_10 : i32 = donor_replacementGLF_dead6tree[x_9];
-      GLF_dead6currentNode = x_10;
-      let x_11 : i32 = GLF_dead6currentNode;
-      GLF_dead6index = x_11;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e683960..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,92 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-int performPartition_() {
-  int GLF_live0i = 0;
-  int i = 0;
-  int x_11 = 0;
-  int x_10_phi = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_10_phi = 0;
-  while (true) {
-    int x_11_phi = 0;
-    const int x_10 = x_10_phi;
-    bool x_42 = false;
-    const float x_41 = asfloat(x_6[0].y);
-    x_42 = (x_41 < 0.0f);
-    if (x_42) {
-      x_11_phi = x_10;
-      {
-        x_11 = x_11_phi;
-        x_10_phi = x_11;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    } else {
-      GLF_live0i = 0;
-      while (true) {
-        const bool x_47 = (0 < 1);
-        if (x_42) {
-          break;
-        }
-        return 1;
-      }
-      if (x_42) {
-        while (true) {
-          return 1;
-        }
-        return 0;
-      }
-      x_11_phi = x_10;
-      {
-        x_11 = x_11_phi;
-        x_10_phi = x_11;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    x_11_phi = 0;
-    {
-      x_11 = x_11_phi;
-      x_10_phi = x_11;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return x_11;
-}
-
-void main_1() {
-  const int x_9 = performPartition_();
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.msl
deleted file mode 100644
index 660a290..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int performPartition_(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int GLF_live0i = 0;
-  int i = 0;
-  int x_11 = 0;
-  int x_10_phi = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_10_phi = 0;
-  while (true) {
-    int x_11_phi = 0;
-    int const x_10 = x_10_phi;
-    bool x_42 = false;
-    float const x_41 = x_6.injectionSwitch.y;
-    x_42 = (x_41 < 0.0f);
-    if (x_42) {
-      x_11_phi = x_10;
-      {
-        x_11 = x_11_phi;
-        x_10_phi = x_11;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    } else {
-      GLF_live0i = 0;
-      while (true) {
-        bool const x_47 = (0 < 1);
-        if (x_42) {
-          break;
-        }
-        return 1;
-      }
-      if (x_42) {
-        while (true) {
-          return 1;
-        }
-        return 0;
-      }
-      x_11_phi = x_10;
-      {
-        x_11 = x_11_phi;
-        x_10_phi = x_11;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    x_11_phi = 0;
-    {
-      x_11 = x_11_phi;
-      x_10_phi = x_11;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return x_11;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  int const x_9 = performPartition_(x_6, tint_symbol_4);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5cee8f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,158 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 83
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %performPartition_ "performPartition_"
-               OpName %GLF_live0i "GLF_live0i"
-               OpName %i "i"
-               OpName %x_11 "x_11"
-               OpName %x_10_phi "x_10_phi"
-               OpName %x_11_phi "x_11_phi"
-               OpName %x_42 "x_42"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-         %12 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %35 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-       %void = OpTypeVoid
-         %67 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-%performPartition_ = OpFunction %int None %12
-         %15 = OpLabel
- %GLF_live0i = OpVariable %_ptr_Function_int Function %18
-          %i = OpVariable %_ptr_Function_int Function %18
-       %x_11 = OpVariable %_ptr_Function_int Function %18
-   %x_10_phi = OpVariable %_ptr_Function_int Function %18
-   %x_11_phi = OpVariable %_ptr_Function_int Function %18
-       %x_42 = OpVariable %_ptr_Function_bool Function %35
-               OpStore %x_GLF_color %24
-               OpStore %x_10_phi %int_0
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %31 = OpLoad %int %x_10_phi
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %41 = OpLoad %float %40
-         %42 = OpFOrdLessThan %bool %41 %float_0
-               OpStore %x_42 %42
-         %43 = OpLoad %bool %x_42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-               OpStore %x_11_phi %31
-               OpBranch %28
-         %46 = OpLabel
-               OpStore %GLF_live0i %int_0
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %52 = OpSLessThan %bool %int_0 %int_1
-         %53 = OpLoad %bool %x_42
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %54
-         %55 = OpLabel
-               OpBranch %48
-         %54 = OpLabel
-               OpReturnValue %int_1
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-         %56 = OpLoad %bool %x_42
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-               OpReturnValue %int_1
-         %61 = OpLabel
-               OpBranch %59
-         %60 = OpLabel
-               OpReturnValue %int_0
-         %57 = OpLabel
-               OpStore %x_11_phi %31
-               OpBranch %28
-         %44 = OpLabel
-               OpStore %x_11_phi %int_0
-               OpBranch %28
-         %28 = OpLabel
-         %63 = OpLoad %int %x_11_phi
-               OpStore %x_11 %63
-         %64 = OpLoad %int %x_11
-               OpStore %x_10_phi %64
-               OpBranchConditional %false %26 %27
-         %27 = OpLabel
-         %66 = OpLoad %int %x_11
-               OpReturnValue %66
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %int %performPartition_
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %67
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 0ddfab8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,72 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn performPartition_() -> i32 {
-  var GLF_live0i : i32;
-  var i : i32;
-  var x_11 : i32;
-  var x_10_phi : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  x_10_phi = 0;
-  loop {
-    var x_11_phi : i32;
-    let x_10 : i32 = x_10_phi;
-    var x_42 : bool;
-    let x_41 : f32 = x_6.injectionSwitch.y;
-    x_42 = (x_41 < 0.0);
-    if (x_42) {
-      x_11_phi = x_10;
-      continue;
-    } else {
-      GLF_live0i = 0;
-      loop {
-        let x_47 : bool = (0 < 1);
-        if (x_42) {
-          break;
-        }
-        return 1;
-      }
-      if (x_42) {
-        loop {
-          return 1;
-        }
-        return 0;
-      }
-      x_11_phi = x_10;
-      continue;
-    }
-    x_11_phi = 0;
-
-    continuing {
-      x_11 = x_11_phi;
-      x_10_phi = x_11;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return x_11;
-}
-
-fn main_1() {
-  let x_9 : i32 = performPartition_();
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e683960..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,92 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-int performPartition_() {
-  int GLF_live0i = 0;
-  int i = 0;
-  int x_11 = 0;
-  int x_10_phi = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_10_phi = 0;
-  while (true) {
-    int x_11_phi = 0;
-    const int x_10 = x_10_phi;
-    bool x_42 = false;
-    const float x_41 = asfloat(x_6[0].y);
-    x_42 = (x_41 < 0.0f);
-    if (x_42) {
-      x_11_phi = x_10;
-      {
-        x_11 = x_11_phi;
-        x_10_phi = x_11;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    } else {
-      GLF_live0i = 0;
-      while (true) {
-        const bool x_47 = (0 < 1);
-        if (x_42) {
-          break;
-        }
-        return 1;
-      }
-      if (x_42) {
-        while (true) {
-          return 1;
-        }
-        return 0;
-      }
-      x_11_phi = x_10;
-      {
-        x_11 = x_11_phi;
-        x_10_phi = x_11;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    x_11_phi = 0;
-    {
-      x_11 = x_11_phi;
-      x_10_phi = x_11;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return x_11;
-}
-
-void main_1() {
-  const int x_9 = performPartition_();
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.msl
deleted file mode 100644
index 660a290..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int performPartition_(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int GLF_live0i = 0;
-  int i = 0;
-  int x_11 = 0;
-  int x_10_phi = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_10_phi = 0;
-  while (true) {
-    int x_11_phi = 0;
-    int const x_10 = x_10_phi;
-    bool x_42 = false;
-    float const x_41 = x_6.injectionSwitch.y;
-    x_42 = (x_41 < 0.0f);
-    if (x_42) {
-      x_11_phi = x_10;
-      {
-        x_11 = x_11_phi;
-        x_10_phi = x_11;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    } else {
-      GLF_live0i = 0;
-      while (true) {
-        bool const x_47 = (0 < 1);
-        if (x_42) {
-          break;
-        }
-        return 1;
-      }
-      if (x_42) {
-        while (true) {
-          return 1;
-        }
-        return 0;
-      }
-      x_11_phi = x_10;
-      {
-        x_11 = x_11_phi;
-        x_10_phi = x_11;
-        if (false) {
-        } else {
-          break;
-        }
-      }
-      continue;
-    }
-    x_11_phi = 0;
-    {
-      x_11 = x_11_phi;
-      x_10_phi = x_11;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return x_11;
-}
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  int const x_9 = performPartition_(x_6, tint_symbol_4);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_5) {
-  main_1(x_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5cee8f7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,158 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 83
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %performPartition_ "performPartition_"
-               OpName %GLF_live0i "GLF_live0i"
-               OpName %i "i"
-               OpName %x_11 "x_11"
-               OpName %x_10_phi "x_10_phi"
-               OpName %x_11_phi "x_11_phi"
-               OpName %x_42 "x_42"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-        %int = OpTypeInt 32 1
-         %12 = OpTypeFunction %int
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %35 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-      %false = OpConstantFalse %bool
-       %void = OpTypeVoid
-         %67 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %72 = OpTypeFunction %main_out
-%performPartition_ = OpFunction %int None %12
-         %15 = OpLabel
- %GLF_live0i = OpVariable %_ptr_Function_int Function %18
-          %i = OpVariable %_ptr_Function_int Function %18
-       %x_11 = OpVariable %_ptr_Function_int Function %18
-   %x_10_phi = OpVariable %_ptr_Function_int Function %18
-   %x_11_phi = OpVariable %_ptr_Function_int Function %18
-       %x_42 = OpVariable %_ptr_Function_bool Function %35
-               OpStore %x_GLF_color %24
-               OpStore %x_10_phi %int_0
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %31 = OpLoad %int %x_10_phi
-         %40 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %41 = OpLoad %float %40
-         %42 = OpFOrdLessThan %bool %41 %float_0
-               OpStore %x_42 %42
-         %43 = OpLoad %bool %x_42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %46
-         %45 = OpLabel
-               OpStore %x_11_phi %31
-               OpBranch %28
-         %46 = OpLabel
-               OpStore %GLF_live0i %int_0
-               OpBranch %47
-         %47 = OpLabel
-               OpLoopMerge %48 %49 None
-               OpBranch %50
-         %50 = OpLabel
-         %52 = OpSLessThan %bool %int_0 %int_1
-         %53 = OpLoad %bool %x_42
-               OpSelectionMerge %54 None
-               OpBranchConditional %53 %55 %54
-         %55 = OpLabel
-               OpBranch %48
-         %54 = OpLabel
-               OpReturnValue %int_1
-         %49 = OpLabel
-               OpBranch %47
-         %48 = OpLabel
-         %56 = OpLoad %bool %x_42
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-               OpReturnValue %int_1
-         %61 = OpLabel
-               OpBranch %59
-         %60 = OpLabel
-               OpReturnValue %int_0
-         %57 = OpLabel
-               OpStore %x_11_phi %31
-               OpBranch %28
-         %44 = OpLabel
-               OpStore %x_11_phi %int_0
-               OpBranch %28
-         %28 = OpLabel
-         %63 = OpLoad %int %x_11_phi
-               OpStore %x_11 %63
-         %64 = OpLoad %int %x_11
-               OpStore %x_10_phi %64
-               OpBranchConditional %false %26 %27
-         %27 = OpLabel
-         %66 = OpLoad %int %x_11
-               OpReturnValue %66
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %int %performPartition_
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %72
-         %75 = OpLabel
-         %76 = OpFunctionCall %void %main_1
-         %77 = OpLoad %v4float %x_GLF_color
-         %78 = OpCompositeConstruct %main_out %77
-               OpReturnValue %78
-               OpFunctionEnd
-       %main = OpFunction %void None %67
-         %80 = OpLabel
-         %81 = OpFunctionCall %main_out %main_inner
-         %82 = OpCompositeExtract %v4float %81 0
-               OpStore %x_GLF_color_1_1 %82
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 0ddfab8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/undefined-integer-in-function/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,72 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn performPartition_() -> i32 {
-  var GLF_live0i : i32;
-  var i : i32;
-  var x_11 : i32;
-  var x_10_phi : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  x_10_phi = 0;
-  loop {
-    var x_11_phi : i32;
-    let x_10 : i32 = x_10_phi;
-    var x_42 : bool;
-    let x_41 : f32 = x_6.injectionSwitch.y;
-    x_42 = (x_41 < 0.0);
-    if (x_42) {
-      x_11_phi = x_10;
-      continue;
-    } else {
-      GLF_live0i = 0;
-      loop {
-        let x_47 : bool = (0 < 1);
-        if (x_42) {
-          break;
-        }
-        return 1;
-      }
-      if (x_42) {
-        loop {
-          return 1;
-        }
-        return 0;
-      }
-      x_11_phi = x_10;
-      continue;
-    }
-    x_11_phi = 0;
-
-    continuing {
-      x_11 = x_11_phi;
-      x_10_phi = x_11;
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  return x_11;
-}
-
-fn main_1() {
-  let x_9 : i32 = performPartition_();
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7fadd48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float x_30 = 0.0f;
-  float x_32_phi = 0.0f;
-  x_32_phi = 0.0f;
-  while (true) {
-    float x_33_phi = 0.0f;
-    x_33_phi = x_32_phi;
-    const float x_33 = x_33_phi;
-    const float x_39 = asfloat(x_5[0].x);
-    const float x_41 = asfloat(x_5[0].y);
-    if ((x_39 < x_41)) {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      return;
-    } else {
-      {
-        x_32_phi = x_33;
-      }
-      continue;
-    }
-    {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.msl
deleted file mode 100644
index 79bd5b2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float x_30 = 0.0f;
-  float x_32_phi = 0.0f;
-  x_32_phi = 0.0f;
-  while (true) {
-    float x_33_phi = 0.0f;
-    float const x_32 = x_32_phi;
-    x_33_phi = x_32;
-    float const x_33 = x_33_phi;
-    float const x_39 = x_5.injectionSwitch.x;
-    float const x_41 = x_5.injectionSwitch.y;
-    if ((x_39 < x_41)) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      return;
-    } else {
-      {
-        x_32_phi = x_33;
-      }
-      continue;
-    }
-    {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index f829f24..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %x_32_phi "x_32_phi"
-               OpName %x_33_phi "x_33_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-    %float_0 = OpConstant %float 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %42 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %43 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_float Function %18
-   %x_32_phi = OpVariable %_ptr_Function_float Function %18
-   %x_33_phi = OpVariable %_ptr_Function_float Function %18
-               OpStore %x_32_phi %float_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %26 = OpLoad %float %x_32_phi
-               OpStore %x_33_phi %26
-         %27 = OpLoad %float %x_33_phi
-         %31 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %32 = OpLoad %float %31
-         %34 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %35 = OpLoad %float %34
-         %36 = OpFOrdLessThan %bool %32 %35
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpStore %x_GLF_color %42
-               OpReturn
-         %40 = OpLabel
-               OpBranch %23
-         %38 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-               OpStore %x_32_phi %27
-               OpBranch %21
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %43
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %main_1
-         %48 = OpLoad %v4float %x_GLF_color
-         %49 = OpCompositeConstruct %main_out %48
-               OpReturnValue %49
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %51 = OpLabel
-         %52 = OpFunctionCall %main_out %main_inner
-         %53 = OpCompositeExtract %v4float %52 0
-               OpStore %x_GLF_color_1_1 %53
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index ee9a420..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_30 : f32;
-  var x_32_phi : f32;
-  x_32_phi = 0.0;
-  loop {
-    var x_33_phi : f32;
-    let x_32 : f32 = x_32_phi;
-    x_33_phi = x_32;
-    let x_33 : f32 = x_33_phi;
-    let x_39 : f32 = x_5.injectionSwitch.x;
-    let x_41 : f32 = x_5.injectionSwitch.y;
-    if ((x_39 < x_41)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      return;
-    } else {
-      continue;
-    }
-
-    continuing {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7fadd48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-cbuffer cbuffer_x_5 : register(b0, space0) {
-  uint4 x_5[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float x_30 = 0.0f;
-  float x_32_phi = 0.0f;
-  x_32_phi = 0.0f;
-  while (true) {
-    float x_33_phi = 0.0f;
-    x_33_phi = x_32_phi;
-    const float x_33 = x_33_phi;
-    const float x_39 = asfloat(x_5[0].x);
-    const float x_41 = asfloat(x_5[0].y);
-    if ((x_39 < x_41)) {
-      x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      return;
-    } else {
-      {
-        x_32_phi = x_33;
-      }
-      continue;
-    }
-    {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.msl
deleted file mode 100644
index 79bd5b2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  float x_30 = 0.0f;
-  float x_32_phi = 0.0f;
-  x_32_phi = 0.0f;
-  while (true) {
-    float x_33_phi = 0.0f;
-    float const x_32 = x_32_phi;
-    x_33_phi = x_32;
-    float const x_33 = x_33_phi;
-    float const x_39 = x_5.injectionSwitch.x;
-    float const x_41 = x_5.injectionSwitch.y;
-    if ((x_39 < x_41)) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      return;
-    } else {
-      {
-        x_32_phi = x_33;
-      }
-      continue;
-    }
-    {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index f829f24..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,102 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_5 "x_5"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %x_32_phi "x_32_phi"
-               OpName %x_33_phi "x_33_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-    %float_0 = OpConstant %float 0
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %float_1 = OpConstant %float 1
-         %42 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %43 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_float Function %18
-   %x_32_phi = OpVariable %_ptr_Function_float Function %18
-   %x_33_phi = OpVariable %_ptr_Function_float Function %18
-               OpStore %x_32_phi %float_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %26 = OpLoad %float %x_32_phi
-               OpStore %x_33_phi %26
-         %27 = OpLoad %float %x_33_phi
-         %31 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %32 = OpLoad %float %31
-         %34 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %35 = OpLoad %float %34
-         %36 = OpFOrdLessThan %bool %32 %35
-               OpSelectionMerge %38 None
-               OpBranchConditional %36 %39 %40
-         %39 = OpLabel
-               OpStore %x_GLF_color %42
-               OpReturn
-         %40 = OpLabel
-               OpBranch %23
-         %38 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-               OpStore %x_32_phi %27
-               OpBranch %21
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %43
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %main_1
-         %48 = OpLoad %v4float %x_GLF_color
-         %49 = OpCompositeConstruct %main_out %48
-               OpReturnValue %49
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %51 = OpLabel
-         %52 = OpFunctionCall %main_out %main_inner
-         %53 = OpCompositeExtract %v4float %52 0
-               OpStore %x_GLF_color_1_1 %53
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index ee9a420..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninit-element-cast-in-loop/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_30 : f32;
-  var x_32_phi : f32;
-  x_32_phi = 0.0;
-  loop {
-    var x_33_phi : f32;
-    let x_32 : f32 = x_32_phi;
-    x_33_phi = x_32;
-    let x_33 : f32 = x_33_phi;
-    let x_39 : f32 = x_5.injectionSwitch.x;
-    let x_41 : f32 = x_5.injectionSwitch.y;
-    if ((x_39 < x_41)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      return;
-    } else {
-      continue;
-    }
-
-    continuing {
-      x_32_phi = x_33;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index e5df2ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float x_30 = 0.0f;
-  uint foo = 0u;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const float x_32 = gl_FragCoord.x;
-  if ((x_32 > -1.0f)) {
-    const float x_38 = x_GLF_color.x;
-    x_30 = x_38;
-  } else {
-    const uint x_7 = (foo - asuint(1));
-    foo = x_7;
-    x_30 = float((178493u + x_7));
-  }
-  x_GLF_color.x = x_30;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.msl
deleted file mode 100644
index 1a14fee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float x_30 = 0.0f;
-  uint foo = 0u;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_32 = (*(tint_symbol_4)).x;
-  if ((x_32 > -1.0f)) {
-    float const x_38 = (*(tint_symbol_3)).x;
-    x_30 = x_38;
-  } else {
-    uint const x_6 = foo;
-    uint const x_7 = (x_6 - as_type<uint>(1));
-    foo = x_7;
-    x_30 = float((178493u + x_7));
-  }
-  float const x_40 = x_30;
-  (*(tint_symbol_3)).x = x_40;
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1428dab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,100 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %foo "foo"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %21 = OpConstantNull %uint
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n1 = OpConstant %float -1
-       %bool = OpTypeBool
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%uint_178493 = OpConstant %uint 178493
-   %main_out = OpTypeStruct %v4float
-         %47 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_float Function %17
-        %foo = OpVariable %_ptr_Function_uint Function %21
-               OpStore %x_GLF_color %24
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %28 = OpLoad %float %27
-         %30 = OpFOrdGreaterThan %bool %28 %float_n1
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %36 = OpLoad %float %35
-               OpStore %x_30 %36
-               OpBranch %32
-         %34 = OpLabel
-         %37 = OpLoad %uint %foo
-         %38 = OpBitcast %uint %int_1
-         %41 = OpISub %uint %37 %38
-               OpStore %foo %41
-         %44 = OpIAdd %uint %uint_178493 %41
-         %42 = OpConvertUToF %float %44
-               OpStore %x_30 %42
-               OpBranch %32
-         %32 = OpLabel
-         %45 = OpLoad %float %x_30
-         %46 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-               OpStore %46 %45
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %47
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %51 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %52 = OpFunctionCall %void %main_1
-         %53 = OpLoad %v4float %x_GLF_color
-         %54 = OpCompositeConstruct %main_out %53
-               OpReturnValue %54
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %56 = OpLabel
-         %58 = OpLoad %v4float %gl_FragCoord_param_1
-         %57 = OpFunctionCall %main_out %main_inner %58
-         %59 = OpCompositeExtract %v4float %57 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3b84978..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var x_30 : f32;
-  var foo : u32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_32 : f32 = gl_FragCoord.x;
-  if ((x_32 > -1.0)) {
-    let x_38 : f32 = x_GLF_color.x;
-    x_30 = x_38;
-  } else {
-    let x_6 : u32 = foo;
-    let x_7 : u32 = (x_6 - bitcast<u32>(1));
-    foo = x_7;
-    x_30 = f32((178493u + x_7));
-  }
-  let x_40 : f32 = x_30;
-  x_GLF_color.x = x_40;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e5df2ff..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float x_30 = 0.0f;
-  uint foo = 0u;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  const float x_32 = gl_FragCoord.x;
-  if ((x_32 > -1.0f)) {
-    const float x_38 = x_GLF_color.x;
-    x_30 = x_38;
-  } else {
-    const uint x_7 = (foo - asuint(1));
-    foo = x_7;
-    x_30 = float((178493u + x_7));
-  }
-  x_GLF_color.x = x_30;
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_GLF_color};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.msl
deleted file mode 100644
index 1a14fee..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float x_30 = 0.0f;
-  uint foo = 0u;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_32 = (*(tint_symbol_4)).x;
-  if ((x_32 > -1.0f)) {
-    float const x_38 = (*(tint_symbol_3)).x;
-    x_30 = x_38;
-  } else {
-    uint const x_6 = foo;
-    uint const x_7 = (x_6 - as_type<uint>(1));
-    foo = x_7;
-    x_30 = float((178493u + x_7));
-  }
-  float const x_40 = x_30;
-  (*(tint_symbol_3)).x = x_40;
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_6, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1428dab..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,100 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %x_30 "x_30"
-               OpName %foo "foo"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %17 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %21 = OpConstantNull %uint
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n1 = OpConstant %float -1
-       %bool = OpTypeBool
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%uint_178493 = OpConstant %uint 178493
-   %main_out = OpTypeStruct %v4float
-         %47 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-       %x_30 = OpVariable %_ptr_Function_float Function %17
-        %foo = OpVariable %_ptr_Function_uint Function %21
-               OpStore %x_GLF_color %24
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %28 = OpLoad %float %27
-         %30 = OpFOrdGreaterThan %bool %28 %float_n1
-               OpSelectionMerge %32 None
-               OpBranchConditional %30 %33 %34
-         %33 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-         %36 = OpLoad %float %35
-               OpStore %x_30 %36
-               OpBranch %32
-         %34 = OpLabel
-         %37 = OpLoad %uint %foo
-         %38 = OpBitcast %uint %int_1
-         %41 = OpISub %uint %37 %38
-               OpStore %foo %41
-         %44 = OpIAdd %uint %uint_178493 %41
-         %42 = OpConvertUToF %float %44
-               OpStore %x_30 %42
-               OpBranch %32
-         %32 = OpLabel
-         %45 = OpLoad %float %x_30
-         %46 = OpAccessChain %_ptr_Private_float %x_GLF_color %uint_0
-               OpStore %46 %45
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %47
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %51 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %52 = OpFunctionCall %void %main_1
-         %53 = OpLoad %v4float %x_GLF_color
-         %54 = OpCompositeConstruct %main_out %53
-               OpReturnValue %54
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %56 = OpLabel
-         %58 = OpLoad %v4float %gl_FragCoord_param_1
-         %57 = OpFunctionCall %main_out %main_inner %58
-         %59 = OpCompositeExtract %v4float %57 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3b84978..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uninitialized-var-decrement-and-add/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  var x_30 : f32;
-  var foo : u32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_32 : f32 = gl_FragCoord.x;
-  if ((x_32 > -1.0)) {
-    let x_38 : f32 = x_GLF_color.x;
-    x_30 = x_38;
-  } else {
-    let x_6 : u32 = foo;
-    let x_7 : u32 = (x_6 - bitcast<u32>(1));
-    foo = x_7;
-    x_30 = f32((178493u + x_7));
-  }
-  let x_40 : f32 = x_30;
-  x_GLF_color.x = x_40;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6b88e19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-static uint3 gl_GlobalInvocationID = uint3(0u, 0u, 0u);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[1];
-};
-cbuffer cbuffer_x_13 : register(b2, space0) {
-  uint4 x_13[1];
-};
-RWByteAddressBuffer x_15 : register(u0, space0);
-
-void main_1() {
-  float A[1] = (float[1])0;
-  int i = 0;
-  float4 value = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int m = 0;
-  int l = 0;
-  int n = 0;
-  A[0] = 0.0f;
-  i = 0;
-  {
-    for(; (i < 50); i = (i + 1)) {
-      if ((i > 0)) {
-        const float x_68 = A[0];
-        const float x_70 = A[0];
-        A[0] = (x_70 + x_68);
-      }
-    }
-  }
-  while (true) {
-    const uint x_80 = gl_GlobalInvocationID.x;
-    if ((x_80 < 100u)) {
-      value = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      m = 0;
-      {
-        for(; (m < 1); m = (m + 1)) {
-          l = 0;
-          {
-            for(; (l < 1); l = (l + 1)) {
-              const float x_100 = asfloat(x_10[0].x);
-              const float x_102 = asfloat(x_10[0].y);
-              if ((x_100 > x_102)) {
-                return;
-              }
-            }
-          }
-        }
-      }
-      n = 0;
-      {
-        for(; (n < 1); n = (n + 1)) {
-          const float x_118 = asfloat(x_10[0].x);
-          const float x_120 = asfloat(x_10[0].y);
-          if ((x_118 > x_120)) {
-            GroupMemoryBarrierWithGroupSync();
-          }
-        }
-      }
-    } else {
-      const uint x_127 = gl_GlobalInvocationID.x;
-      if ((x_127 < 120u)) {
-        const float x_133 = A[0];
-        const float x_135 = asfloat(x_13[0].x);
-        const float x_138 = A[0];
-        const float x_140 = asfloat(x_13[0].y);
-        value = float4((x_133 / x_135), (x_138 / x_140), 0.0f, 1.0f);
-      } else {
-        const float x_144 = asfloat(x_10[0].x);
-        const float x_146 = asfloat(x_10[0].y);
-        if ((x_144 > x_146)) {
-          {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-      }
-    }
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  const float x_151 = value.x;
-  x_15.Store((4u * uint(0)), asuint(int(x_151)));
-  const float x_155 = value.y;
-  x_15.Store(4u, asuint(int(x_155)));
-  const float x_159 = value.z;
-  x_15.Store(8u, asuint(int(x_159)));
-  const float x_163 = value.w;
-  x_15.Store(12u, asuint(int(x_163)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 gl_GlobalInvocationID_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 gl_GlobalInvocationID_param) {
-  gl_GlobalInvocationID = gl_GlobalInvocationID_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_GlobalInvocationID_param);
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index cefc240..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,143 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf2 {
-  /* 0x0000 */ float2 resolution;
-};
-struct doesNotMatter {
-  /* 0x0000 */ int x_compute_data[1];
-};
-struct tint_array_wrapper {
-  float arr[1];
-};
-
-void main_1(constant buf1& x_10, constant buf2& x_13, device doesNotMatter& x_15, thread uint3* const tint_symbol_1) {
-  tint_array_wrapper A = {};
-  int i = 0;
-  float4 value = 0.0f;
-  int m = 0;
-  int l = 0;
-  int n = 0;
-  A.arr[0] = 0.0f;
-  i = 0;
-  while (true) {
-    int const x_60 = i;
-    if ((x_60 < 50)) {
-    } else {
-      break;
-    }
-    int const x_63 = i;
-    if ((x_63 > 0)) {
-      float const x_68 = A.arr[0];
-      float const x_70 = A.arr[0];
-      A.arr[0] = (x_70 + x_68);
-    }
-    {
-      int const x_73 = i;
-      i = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-    }
-  }
-  while (true) {
-    uint const x_80 = (*(tint_symbol_1)).x;
-    if ((x_80 < 100u)) {
-      value = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      m = 0;
-      while (true) {
-        int const x_89 = m;
-        if ((x_89 < 1)) {
-        } else {
-          break;
-        }
-        l = 0;
-        while (true) {
-          int const x_96 = l;
-          if ((x_96 < 1)) {
-          } else {
-            break;
-          }
-          float const x_100 = x_10.injectionSwitch.x;
-          float const x_102 = x_10.injectionSwitch.y;
-          if ((x_100 > x_102)) {
-            return;
-          }
-          {
-            int const x_106 = l;
-            l = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_108 = m;
-          m = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-        }
-      }
-      n = 0;
-      while (true) {
-        int const x_114 = n;
-        if ((x_114 < 1)) {
-        } else {
-          break;
-        }
-        float const x_118 = x_10.injectionSwitch.x;
-        float const x_120 = x_10.injectionSwitch.y;
-        if ((x_118 > x_120)) {
-          threadgroup_barrier(mem_flags::mem_threadgroup);
-        }
-        {
-          int const x_124 = n;
-          n = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-        }
-      }
-    } else {
-      uint const x_127 = (*(tint_symbol_1)).x;
-      if ((x_127 < 120u)) {
-        float const x_133 = A.arr[0];
-        float const x_135 = x_13.resolution.x;
-        float const x_138 = A.arr[0];
-        float const x_140 = x_13.resolution.y;
-        value = float4((x_133 / x_135), (x_138 / x_140), 0.0f, 1.0f);
-      } else {
-        float const x_144 = x_10.injectionSwitch.x;
-        float const x_146 = x_10.injectionSwitch.y;
-        if ((x_144 > x_146)) {
-          {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-      }
-    }
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_151 = value.x;
-  x_15.x_compute_data[0] = int(x_151);
-  float const x_155 = value.y;
-  x_15.x_compute_data[1] = int(x_155);
-  float const x_159 = value.z;
-  x_15.x_compute_data[2] = int(x_159);
-  float const x_163 = value.w;
-  x_15.x_compute_data[3] = int(x_163);
-  return;
-}
-
-void tint_symbol_inner(constant buf1& x_10, constant buf2& x_13, device doesNotMatter& x_15, uint3 gl_GlobalInvocationID_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = gl_GlobalInvocationID_param;
-  main_1(x_10, x_13, x_15, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 gl_GlobalInvocationID_param [[thread_position_in_grid]], constant buf1& x_10 [[buffer(0)]], constant buf2& x_13 [[buffer(1)]], device doesNotMatter& x_15 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_10, x_13, x_15, gl_GlobalInvocationID_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 051ac1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,319 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 189
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %gl_GlobalInvocationID_param_1 "gl_GlobalInvocationID_param_1"
-               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_10 "x_10"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %doesNotMatter "doesNotMatter"
-               OpMemberName %doesNotMatter 0 "x_compute_data"
-               OpName %x_15 "x_15"
-               OpName %main_1 "main_1"
-               OpName %A "A"
-               OpName %i "i"
-               OpName %value "value"
-               OpName %m "m"
-               OpName %l "l"
-               OpName %n "n"
-               OpName %main_inner "main_inner"
-               OpName %gl_GlobalInvocationID_param "gl_GlobalInvocationID_param"
-               OpName %main "main"
-               OpDecorate %gl_GlobalInvocationID_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 2
-               OpDecorate %doesNotMatter Block
-               OpMemberDecorate %doesNotMatter 0 Offset 0
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_GlobalInvocationID_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-%gl_GlobalInvocationID = OpVariable %_ptr_Private_v3uint Private %7
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_13 = OpVariable %_ptr_Uniform_buf2 Uniform
-        %int = OpTypeInt 32 1
-%_runtimearr_int = OpTypeRuntimeArray %int
-%doesNotMatter = OpTypeStruct %_runtimearr_int
-%_ptr_StorageBuffer_doesNotMatter = OpTypePointer StorageBuffer %doesNotMatter
-       %x_15 = OpVariable %_ptr_StorageBuffer_doesNotMatter StorageBuffer
-       %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-%_ptr_Function__arr_float_uint_1 = OpTypePointer Function %_arr_float_uint_1
-         %29 = OpConstantNull %_arr_float_uint_1
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpConstantNull %int
-    %v4float = OpTypeVector %float 4
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %36 = OpConstantNull %v4float
-      %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_0 = OpConstant %float 0
-     %int_50 = OpConstant %int 50
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-   %uint_100 = OpConstant %uint 100
-    %float_1 = OpConstant %float 1
-         %82 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-   %uint_120 = OpConstant %uint 120
-      %false = OpConstantFalse %bool
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_2 = OpConstant %int 2
-     %uint_3 = OpConstant %uint 3
-      %int_3 = OpConstant %int 3
-        %180 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %21
-         %24 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_float_uint_1 Function %29
-          %i = OpVariable %_ptr_Function_int Function %32
-      %value = OpVariable %_ptr_Function_v4float Function %36
-          %m = OpVariable %_ptr_Function_int Function %32
-          %l = OpVariable %_ptr_Function_int Function %32
-          %n = OpVariable %_ptr_Function_int Function %32
-         %42 = OpAccessChain %_ptr_Function_float %A %int_0
-               OpStore %42 %float_0
-               OpStore %i %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpSLessThan %bool %48 %int_50
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %45
-         %52 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpSGreaterThan %bool %55 %int_0
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-         %59 = OpAccessChain %_ptr_Function_float %A %int_0
-         %60 = OpLoad %float %59
-         %61 = OpAccessChain %_ptr_Function_float %A %int_0
-         %62 = OpLoad %float %61
-         %63 = OpAccessChain %_ptr_Function_float %A %int_0
-         %64 = OpFAdd %float %62 %60
-               OpStore %63 %64
-               OpBranch %57
-         %57 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-         %65 = OpLoad %int %i
-         %67 = OpIAdd %int %65 %int_1
-               OpStore %i %67
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %74 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
-         %75 = OpLoad %uint %74
-         %77 = OpULessThan %bool %75 %uint_100
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpStore %value %82
-               OpStore %m %int_0
-               OpBranch %83
-         %83 = OpLabel
-               OpLoopMerge %84 %85 None
-               OpBranch %86
-         %86 = OpLabel
-         %87 = OpLoad %int %m
-         %88 = OpSLessThan %bool %87 %int_1
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-               OpBranch %89
-         %91 = OpLabel
-               OpBranch %84
-         %89 = OpLabel
-               OpStore %l %int_0
-               OpBranch %92
-         %92 = OpLabel
-               OpLoopMerge %93 %94 None
-               OpBranch %95
-         %95 = OpLabel
-         %96 = OpLoad %int %l
-         %97 = OpSLessThan %bool %96 %int_1
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-               OpBranch %98
-        %100 = OpLabel
-               OpBranch %93
-         %98 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-        %105 = OpLoad %float %104
-        %106 = OpFOrdGreaterThan %bool %103 %105
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-               OpReturn
-        %107 = OpLabel
-               OpBranch %94
-         %94 = OpLabel
-        %109 = OpLoad %int %l
-        %110 = OpIAdd %int %109 %int_1
-               OpStore %l %110
-               OpBranch %92
-         %93 = OpLabel
-               OpBranch %85
-         %85 = OpLabel
-        %111 = OpLoad %int %m
-        %112 = OpIAdd %int %111 %int_1
-               OpStore %m %112
-               OpBranch %83
-         %84 = OpLabel
-               OpStore %n %int_0
-               OpBranch %113
-        %113 = OpLabel
-               OpLoopMerge %114 %115 None
-               OpBranch %116
-        %116 = OpLabel
-        %117 = OpLoad %int %n
-        %118 = OpSLessThan %bool %117 %int_1
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %121
-        %120 = OpLabel
-               OpBranch %119
-        %121 = OpLabel
-               OpBranch %114
-        %119 = OpLabel
-        %122 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-        %125 = OpLoad %float %124
-        %126 = OpFOrdGreaterThan %bool %123 %125
-               OpSelectionMerge %127 None
-               OpBranchConditional %126 %128 %127
-        %128 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %127
-        %127 = OpLabel
-               OpBranch %115
-        %115 = OpLabel
-        %132 = OpLoad %int %n
-        %133 = OpIAdd %int %132 %int_1
-               OpStore %n %133
-               OpBranch %113
-        %114 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-        %134 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
-        %135 = OpLoad %uint %134
-        %137 = OpULessThan %bool %135 %uint_120
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %140
-        %139 = OpLabel
-        %141 = OpAccessChain %_ptr_Function_float %A %int_0
-        %142 = OpLoad %float %141
-        %143 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-        %144 = OpLoad %float %143
-        %145 = OpAccessChain %_ptr_Function_float %A %int_0
-        %146 = OpLoad %float %145
-        %147 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_1
-        %148 = OpLoad %float %147
-        %149 = OpFDiv %float %142 %144
-        %150 = OpFDiv %float %146 %148
-        %151 = OpCompositeConstruct %v4float %149 %150 %float_0 %float_1
-               OpStore %value %151
-               OpBranch %138
-        %140 = OpLabel
-        %152 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %153 = OpLoad %float %152
-        %154 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-        %155 = OpLoad %float %154
-        %156 = OpFOrdGreaterThan %bool %153 %155
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %157
-        %158 = OpLabel
-               OpBranch %70
-        %157 = OpLabel
-               OpBranch %138
-        %138 = OpLabel
-               OpBranch %78
-         %78 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-               OpBranchConditional %false %68 %69
-         %69 = OpLabel
-        %160 = OpAccessChain %_ptr_Function_float %value %uint_0
-        %161 = OpLoad %float %160
-        %163 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %int_0
-        %164 = OpConvertFToS %int %161
-               OpStore %163 %164
-        %165 = OpAccessChain %_ptr_Function_float %value %uint_1
-        %166 = OpLoad %float %165
-        %167 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %int_1
-        %168 = OpConvertFToS %int %166
-               OpStore %167 %168
-        %169 = OpAccessChain %_ptr_Function_float %value %uint_2
-        %170 = OpLoad %float %169
-        %172 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %int_2
-        %173 = OpConvertFToS %int %170
-               OpStore %172 %173
-        %175 = OpAccessChain %_ptr_Function_float %value %uint_3
-        %176 = OpLoad %float %175
-        %178 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %int_3
-        %179 = OpConvertFToS %int %176
-               OpStore %178 %179
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %180
-%gl_GlobalInvocationID_param = OpFunctionParameter %v3uint
-        %183 = OpLabel
-               OpStore %gl_GlobalInvocationID %gl_GlobalInvocationID_param
-        %184 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %21
-        %186 = OpLabel
-        %188 = OpLoad %v3uint %gl_GlobalInvocationID_param_1
-        %187 = OpFunctionCall %void %main_inner %188
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2b4eb0e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,145 +0,0 @@
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf2 {
-  resolution : vec2<f32>;
-};
-
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct doesNotMatter {
-  x_compute_data : RTArr;
-};
-
-var<private> gl_GlobalInvocationID : vec3<u32>;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_13 : buf2;
-
-[[group(0), binding(0)]] var<storage, read_write> x_15 : doesNotMatter;
-
-fn main_1() {
-  var A : array<f32, 1>;
-  var i : i32;
-  var value : vec4<f32>;
-  var m : i32;
-  var l : i32;
-  var n : i32;
-  A[0] = 0.0;
-  i = 0;
-  loop {
-    let x_60 : i32 = i;
-    if ((x_60 < 50)) {
-    } else {
-      break;
-    }
-    let x_63 : i32 = i;
-    if ((x_63 > 0)) {
-      let x_68 : f32 = A[0];
-      let x_70 : f32 = A[0];
-      A[0] = (x_70 + x_68);
-    }
-
-    continuing {
-      let x_73 : i32 = i;
-      i = (x_73 + 1);
-    }
-  }
-  loop {
-    let x_80 : u32 = gl_GlobalInvocationID.x;
-    if ((x_80 < 100u)) {
-      value = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-      m = 0;
-      loop {
-        let x_89 : i32 = m;
-        if ((x_89 < 1)) {
-        } else {
-          break;
-        }
-        l = 0;
-        loop {
-          let x_96 : i32 = l;
-          if ((x_96 < 1)) {
-          } else {
-            break;
-          }
-          let x_100 : f32 = x_10.injectionSwitch.x;
-          let x_102 : f32 = x_10.injectionSwitch.y;
-          if ((x_100 > x_102)) {
-            return;
-          }
-
-          continuing {
-            let x_106 : i32 = l;
-            l = (x_106 + 1);
-          }
-        }
-
-        continuing {
-          let x_108 : i32 = m;
-          m = (x_108 + 1);
-        }
-      }
-      n = 0;
-      loop {
-        let x_114 : i32 = n;
-        if ((x_114 < 1)) {
-        } else {
-          break;
-        }
-        let x_118 : f32 = x_10.injectionSwitch.x;
-        let x_120 : f32 = x_10.injectionSwitch.y;
-        if ((x_118 > x_120)) {
-          workgroupBarrier();
-        }
-
-        continuing {
-          let x_124 : i32 = n;
-          n = (x_124 + 1);
-        }
-      }
-    } else {
-      let x_127 : u32 = gl_GlobalInvocationID.x;
-      if ((x_127 < 120u)) {
-        let x_133 : f32 = A[0];
-        let x_135 : f32 = x_13.resolution.x;
-        let x_138 : f32 = A[0];
-        let x_140 : f32 = x_13.resolution.y;
-        value = vec4<f32>((x_133 / x_135), (x_138 / x_140), 0.0, 1.0);
-      } else {
-        let x_144 : f32 = x_10.injectionSwitch.x;
-        let x_146 : f32 = x_10.injectionSwitch.y;
-        if ((x_144 > x_146)) {
-          continue;
-        }
-      }
-    }
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_151 : f32 = value.x;
-  x_15.x_compute_data[0] = i32(x_151);
-  let x_155 : f32 = value.y;
-  x_15.x_compute_data[1] = i32(x_155);
-  let x_159 : f32 = value.z;
-  x_15.x_compute_data[2] = i32(x_159);
-  let x_163 : f32 = value.w;
-  x_15.x_compute_data[3] = i32(x_163);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
-  gl_GlobalInvocationID = gl_GlobalInvocationID_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6b88e19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,110 +0,0 @@
-static uint3 gl_GlobalInvocationID = uint3(0u, 0u, 0u);
-cbuffer cbuffer_x_10 : register(b1, space0) {
-  uint4 x_10[1];
-};
-cbuffer cbuffer_x_13 : register(b2, space0) {
-  uint4 x_13[1];
-};
-RWByteAddressBuffer x_15 : register(u0, space0);
-
-void main_1() {
-  float A[1] = (float[1])0;
-  int i = 0;
-  float4 value = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  int m = 0;
-  int l = 0;
-  int n = 0;
-  A[0] = 0.0f;
-  i = 0;
-  {
-    for(; (i < 50); i = (i + 1)) {
-      if ((i > 0)) {
-        const float x_68 = A[0];
-        const float x_70 = A[0];
-        A[0] = (x_70 + x_68);
-      }
-    }
-  }
-  while (true) {
-    const uint x_80 = gl_GlobalInvocationID.x;
-    if ((x_80 < 100u)) {
-      value = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      m = 0;
-      {
-        for(; (m < 1); m = (m + 1)) {
-          l = 0;
-          {
-            for(; (l < 1); l = (l + 1)) {
-              const float x_100 = asfloat(x_10[0].x);
-              const float x_102 = asfloat(x_10[0].y);
-              if ((x_100 > x_102)) {
-                return;
-              }
-            }
-          }
-        }
-      }
-      n = 0;
-      {
-        for(; (n < 1); n = (n + 1)) {
-          const float x_118 = asfloat(x_10[0].x);
-          const float x_120 = asfloat(x_10[0].y);
-          if ((x_118 > x_120)) {
-            GroupMemoryBarrierWithGroupSync();
-          }
-        }
-      }
-    } else {
-      const uint x_127 = gl_GlobalInvocationID.x;
-      if ((x_127 < 120u)) {
-        const float x_133 = A[0];
-        const float x_135 = asfloat(x_13[0].x);
-        const float x_138 = A[0];
-        const float x_140 = asfloat(x_13[0].y);
-        value = float4((x_133 / x_135), (x_138 / x_140), 0.0f, 1.0f);
-      } else {
-        const float x_144 = asfloat(x_10[0].x);
-        const float x_146 = asfloat(x_10[0].y);
-        if ((x_144 > x_146)) {
-          {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-      }
-    }
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  const float x_151 = value.x;
-  x_15.Store((4u * uint(0)), asuint(int(x_151)));
-  const float x_155 = value.y;
-  x_15.Store(4u, asuint(int(x_155)));
-  const float x_159 = value.z;
-  x_15.Store(8u, asuint(int(x_159)));
-  const float x_163 = value.w;
-  x_15.Store(12u, asuint(int(x_163)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 gl_GlobalInvocationID_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 gl_GlobalInvocationID_param) {
-  gl_GlobalInvocationID = gl_GlobalInvocationID_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_GlobalInvocationID_param);
-  return;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index cefc240..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,143 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf1 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct buf2 {
-  /* 0x0000 */ float2 resolution;
-};
-struct doesNotMatter {
-  /* 0x0000 */ int x_compute_data[1];
-};
-struct tint_array_wrapper {
-  float arr[1];
-};
-
-void main_1(constant buf1& x_10, constant buf2& x_13, device doesNotMatter& x_15, thread uint3* const tint_symbol_1) {
-  tint_array_wrapper A = {};
-  int i = 0;
-  float4 value = 0.0f;
-  int m = 0;
-  int l = 0;
-  int n = 0;
-  A.arr[0] = 0.0f;
-  i = 0;
-  while (true) {
-    int const x_60 = i;
-    if ((x_60 < 50)) {
-    } else {
-      break;
-    }
-    int const x_63 = i;
-    if ((x_63 > 0)) {
-      float const x_68 = A.arr[0];
-      float const x_70 = A.arr[0];
-      A.arr[0] = (x_70 + x_68);
-    }
-    {
-      int const x_73 = i;
-      i = as_type<int>((as_type<uint>(x_73) + as_type<uint>(1)));
-    }
-  }
-  while (true) {
-    uint const x_80 = (*(tint_symbol_1)).x;
-    if ((x_80 < 100u)) {
-      value = float4(0.0f, 0.0f, 0.0f, 1.0f);
-      m = 0;
-      while (true) {
-        int const x_89 = m;
-        if ((x_89 < 1)) {
-        } else {
-          break;
-        }
-        l = 0;
-        while (true) {
-          int const x_96 = l;
-          if ((x_96 < 1)) {
-          } else {
-            break;
-          }
-          float const x_100 = x_10.injectionSwitch.x;
-          float const x_102 = x_10.injectionSwitch.y;
-          if ((x_100 > x_102)) {
-            return;
-          }
-          {
-            int const x_106 = l;
-            l = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
-          }
-        }
-        {
-          int const x_108 = m;
-          m = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
-        }
-      }
-      n = 0;
-      while (true) {
-        int const x_114 = n;
-        if ((x_114 < 1)) {
-        } else {
-          break;
-        }
-        float const x_118 = x_10.injectionSwitch.x;
-        float const x_120 = x_10.injectionSwitch.y;
-        if ((x_118 > x_120)) {
-          threadgroup_barrier(mem_flags::mem_threadgroup);
-        }
-        {
-          int const x_124 = n;
-          n = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-        }
-      }
-    } else {
-      uint const x_127 = (*(tint_symbol_1)).x;
-      if ((x_127 < 120u)) {
-        float const x_133 = A.arr[0];
-        float const x_135 = x_13.resolution.x;
-        float const x_138 = A.arr[0];
-        float const x_140 = x_13.resolution.y;
-        value = float4((x_133 / x_135), (x_138 / x_140), 0.0f, 1.0f);
-      } else {
-        float const x_144 = x_10.injectionSwitch.x;
-        float const x_146 = x_10.injectionSwitch.y;
-        if ((x_144 > x_146)) {
-          {
-            if (false) {
-            } else {
-              break;
-            }
-          }
-          continue;
-        }
-      }
-    }
-    {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  float const x_151 = value.x;
-  x_15.x_compute_data[0] = int(x_151);
-  float const x_155 = value.y;
-  x_15.x_compute_data[1] = int(x_155);
-  float const x_159 = value.z;
-  x_15.x_compute_data[2] = int(x_159);
-  float const x_163 = value.w;
-  x_15.x_compute_data[3] = int(x_163);
-  return;
-}
-
-void tint_symbol_inner(constant buf1& x_10, constant buf2& x_13, device doesNotMatter& x_15, uint3 gl_GlobalInvocationID_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = gl_GlobalInvocationID_param;
-  main_1(x_10, x_13, x_15, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 gl_GlobalInvocationID_param [[thread_position_in_grid]], constant buf1& x_10 [[buffer(0)]], constant buf2& x_13 [[buffer(1)]], device doesNotMatter& x_15 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_10, x_13, x_15, gl_GlobalInvocationID_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 051ac1c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,319 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 189
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_GlobalInvocationID_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %gl_GlobalInvocationID_param_1 "gl_GlobalInvocationID_param_1"
-               OpName %gl_GlobalInvocationID "gl_GlobalInvocationID"
-               OpName %buf1 "buf1"
-               OpMemberName %buf1 0 "injectionSwitch"
-               OpName %x_10 "x_10"
-               OpName %buf2 "buf2"
-               OpMemberName %buf2 0 "resolution"
-               OpName %x_13 "x_13"
-               OpName %doesNotMatter "doesNotMatter"
-               OpMemberName %doesNotMatter 0 "x_compute_data"
-               OpName %x_15 "x_15"
-               OpName %main_1 "main_1"
-               OpName %A "A"
-               OpName %i "i"
-               OpName %value "value"
-               OpName %m "m"
-               OpName %l "l"
-               OpName %n "n"
-               OpName %main_inner "main_inner"
-               OpName %gl_GlobalInvocationID_param "gl_GlobalInvocationID_param"
-               OpName %main "main"
-               OpDecorate %gl_GlobalInvocationID_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %buf1 Block
-               OpMemberDecorate %buf1 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 1
-               OpDecorate %buf2 Block
-               OpMemberDecorate %buf2 0 Offset 0
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 2
-               OpDecorate %doesNotMatter Block
-               OpMemberDecorate %doesNotMatter 0 Offset 0
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 4
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_GlobalInvocationID_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-%gl_GlobalInvocationID = OpVariable %_ptr_Private_v3uint Private %7
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-       %buf1 = OpTypeStruct %v2float
-%_ptr_Uniform_buf1 = OpTypePointer Uniform %buf1
-       %x_10 = OpVariable %_ptr_Uniform_buf1 Uniform
-       %buf2 = OpTypeStruct %v2float
-%_ptr_Uniform_buf2 = OpTypePointer Uniform %buf2
-       %x_13 = OpVariable %_ptr_Uniform_buf2 Uniform
-        %int = OpTypeInt 32 1
-%_runtimearr_int = OpTypeRuntimeArray %int
-%doesNotMatter = OpTypeStruct %_runtimearr_int
-%_ptr_StorageBuffer_doesNotMatter = OpTypePointer StorageBuffer %doesNotMatter
-       %x_15 = OpVariable %_ptr_StorageBuffer_doesNotMatter StorageBuffer
-       %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-%_ptr_Function__arr_float_uint_1 = OpTypePointer Function %_arr_float_uint_1
-         %29 = OpConstantNull %_arr_float_uint_1
-%_ptr_Function_int = OpTypePointer Function %int
-         %32 = OpConstantNull %int
-    %v4float = OpTypeVector %float 4
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %36 = OpConstantNull %v4float
-      %int_0 = OpConstant %int 0
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_0 = OpConstant %float 0
-     %int_50 = OpConstant %int 50
-       %bool = OpTypeBool
-      %int_1 = OpConstant %int 1
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-   %uint_100 = OpConstant %uint 100
-    %float_1 = OpConstant %float 1
-         %82 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_2 = OpConstant %uint 2
-   %uint_264 = OpConstant %uint 264
-   %uint_120 = OpConstant %uint 120
-      %false = OpConstantFalse %bool
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_2 = OpConstant %int 2
-     %uint_3 = OpConstant %uint 3
-      %int_3 = OpConstant %int 3
-        %180 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %21
-         %24 = OpLabel
-          %A = OpVariable %_ptr_Function__arr_float_uint_1 Function %29
-          %i = OpVariable %_ptr_Function_int Function %32
-      %value = OpVariable %_ptr_Function_v4float Function %36
-          %m = OpVariable %_ptr_Function_int Function %32
-          %l = OpVariable %_ptr_Function_int Function %32
-          %n = OpVariable %_ptr_Function_int Function %32
-         %42 = OpAccessChain %_ptr_Function_float %A %int_0
-               OpStore %42 %float_0
-               OpStore %i %int_0
-               OpBranch %44
-         %44 = OpLabel
-               OpLoopMerge %45 %46 None
-               OpBranch %47
-         %47 = OpLabel
-         %48 = OpLoad %int %i
-         %50 = OpSLessThan %bool %48 %int_50
-               OpSelectionMerge %52 None
-               OpBranchConditional %50 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %45
-         %52 = OpLabel
-         %55 = OpLoad %int %i
-         %56 = OpSGreaterThan %bool %55 %int_0
-               OpSelectionMerge %57 None
-               OpBranchConditional %56 %58 %57
-         %58 = OpLabel
-         %59 = OpAccessChain %_ptr_Function_float %A %int_0
-         %60 = OpLoad %float %59
-         %61 = OpAccessChain %_ptr_Function_float %A %int_0
-         %62 = OpLoad %float %61
-         %63 = OpAccessChain %_ptr_Function_float %A %int_0
-         %64 = OpFAdd %float %62 %60
-               OpStore %63 %64
-               OpBranch %57
-         %57 = OpLabel
-               OpBranch %46
-         %46 = OpLabel
-         %65 = OpLoad %int %i
-         %67 = OpIAdd %int %65 %int_1
-               OpStore %i %67
-               OpBranch %44
-         %45 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpLoopMerge %69 %70 None
-               OpBranch %71
-         %71 = OpLabel
-         %74 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
-         %75 = OpLoad %uint %74
-         %77 = OpULessThan %bool %75 %uint_100
-               OpSelectionMerge %78 None
-               OpBranchConditional %77 %79 %80
-         %79 = OpLabel
-               OpStore %value %82
-               OpStore %m %int_0
-               OpBranch %83
-         %83 = OpLabel
-               OpLoopMerge %84 %85 None
-               OpBranch %86
-         %86 = OpLabel
-         %87 = OpLoad %int %m
-         %88 = OpSLessThan %bool %87 %int_1
-               OpSelectionMerge %89 None
-               OpBranchConditional %88 %90 %91
-         %90 = OpLabel
-               OpBranch %89
-         %91 = OpLabel
-               OpBranch %84
-         %89 = OpLabel
-               OpStore %l %int_0
-               OpBranch %92
-         %92 = OpLabel
-               OpLoopMerge %93 %94 None
-               OpBranch %95
-         %95 = OpLabel
-         %96 = OpLoad %int %l
-         %97 = OpSLessThan %bool %96 %int_1
-               OpSelectionMerge %98 None
-               OpBranchConditional %97 %99 %100
-         %99 = OpLabel
-               OpBranch %98
-        %100 = OpLabel
-               OpBranch %93
-         %98 = OpLabel
-        %102 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %103 = OpLoad %float %102
-        %104 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-        %105 = OpLoad %float %104
-        %106 = OpFOrdGreaterThan %bool %103 %105
-               OpSelectionMerge %107 None
-               OpBranchConditional %106 %108 %107
-        %108 = OpLabel
-               OpReturn
-        %107 = OpLabel
-               OpBranch %94
-         %94 = OpLabel
-        %109 = OpLoad %int %l
-        %110 = OpIAdd %int %109 %int_1
-               OpStore %l %110
-               OpBranch %92
-         %93 = OpLabel
-               OpBranch %85
-         %85 = OpLabel
-        %111 = OpLoad %int %m
-        %112 = OpIAdd %int %111 %int_1
-               OpStore %m %112
-               OpBranch %83
-         %84 = OpLabel
-               OpStore %n %int_0
-               OpBranch %113
-        %113 = OpLabel
-               OpLoopMerge %114 %115 None
-               OpBranch %116
-        %116 = OpLabel
-        %117 = OpLoad %int %n
-        %118 = OpSLessThan %bool %117 %int_1
-               OpSelectionMerge %119 None
-               OpBranchConditional %118 %120 %121
-        %120 = OpLabel
-               OpBranch %119
-        %121 = OpLabel
-               OpBranch %114
-        %119 = OpLabel
-        %122 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %123 = OpLoad %float %122
-        %124 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-        %125 = OpLoad %float %124
-        %126 = OpFOrdGreaterThan %bool %123 %125
-               OpSelectionMerge %127 None
-               OpBranchConditional %126 %128 %127
-        %128 = OpLabel
-               OpControlBarrier %uint_2 %uint_2 %uint_264
-               OpBranch %127
-        %127 = OpLabel
-               OpBranch %115
-        %115 = OpLabel
-        %132 = OpLoad %int %n
-        %133 = OpIAdd %int %132 %int_1
-               OpStore %n %133
-               OpBranch %113
-        %114 = OpLabel
-               OpBranch %78
-         %80 = OpLabel
-        %134 = OpAccessChain %_ptr_Private_uint %gl_GlobalInvocationID %uint_0
-        %135 = OpLoad %uint %134
-        %137 = OpULessThan %bool %135 %uint_120
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %140
-        %139 = OpLabel
-        %141 = OpAccessChain %_ptr_Function_float %A %int_0
-        %142 = OpLoad %float %141
-        %143 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_0
-        %144 = OpLoad %float %143
-        %145 = OpAccessChain %_ptr_Function_float %A %int_0
-        %146 = OpLoad %float %145
-        %147 = OpAccessChain %_ptr_Uniform_float %x_13 %uint_0 %uint_1
-        %148 = OpLoad %float %147
-        %149 = OpFDiv %float %142 %144
-        %150 = OpFDiv %float %146 %148
-        %151 = OpCompositeConstruct %v4float %149 %150 %float_0 %float_1
-               OpStore %value %151
-               OpBranch %138
-        %140 = OpLabel
-        %152 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_0
-        %153 = OpLoad %float %152
-        %154 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-        %155 = OpLoad %float %154
-        %156 = OpFOrdGreaterThan %bool %153 %155
-               OpSelectionMerge %157 None
-               OpBranchConditional %156 %158 %157
-        %158 = OpLabel
-               OpBranch %70
-        %157 = OpLabel
-               OpBranch %138
-        %138 = OpLabel
-               OpBranch %78
-         %78 = OpLabel
-               OpBranch %70
-         %70 = OpLabel
-               OpBranchConditional %false %68 %69
-         %69 = OpLabel
-        %160 = OpAccessChain %_ptr_Function_float %value %uint_0
-        %161 = OpLoad %float %160
-        %163 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %int_0
-        %164 = OpConvertFToS %int %161
-               OpStore %163 %164
-        %165 = OpAccessChain %_ptr_Function_float %value %uint_1
-        %166 = OpLoad %float %165
-        %167 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %int_1
-        %168 = OpConvertFToS %int %166
-               OpStore %167 %168
-        %169 = OpAccessChain %_ptr_Function_float %value %uint_2
-        %170 = OpLoad %float %169
-        %172 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %int_2
-        %173 = OpConvertFToS %int %170
-               OpStore %172 %173
-        %175 = OpAccessChain %_ptr_Function_float %value %uint_3
-        %176 = OpLoad %float %175
-        %178 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %int_3
-        %179 = OpConvertFToS %int %176
-               OpStore %178 %179
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %180
-%gl_GlobalInvocationID_param = OpFunctionParameter %v3uint
-        %183 = OpLabel
-               OpStore %gl_GlobalInvocationID %gl_GlobalInvocationID_param
-        %184 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %21
-        %186 = OpLabel
-        %188 = OpLoad %v3uint %gl_GlobalInvocationID_param_1
-        %187 = OpFunctionCall %void %main_inner %188
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2b4eb0e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-barrier-in-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,145 +0,0 @@
-[[block]]
-struct buf1 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[block]]
-struct buf2 {
-  resolution : vec2<f32>;
-};
-
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct doesNotMatter {
-  x_compute_data : RTArr;
-};
-
-var<private> gl_GlobalInvocationID : vec3<u32>;
-
-[[group(0), binding(1)]] var<uniform> x_10 : buf1;
-
-[[group(0), binding(2)]] var<uniform> x_13 : buf2;
-
-[[group(0), binding(0)]] var<storage, read_write> x_15 : doesNotMatter;
-
-fn main_1() {
-  var A : array<f32, 1>;
-  var i : i32;
-  var value : vec4<f32>;
-  var m : i32;
-  var l : i32;
-  var n : i32;
-  A[0] = 0.0;
-  i = 0;
-  loop {
-    let x_60 : i32 = i;
-    if ((x_60 < 50)) {
-    } else {
-      break;
-    }
-    let x_63 : i32 = i;
-    if ((x_63 > 0)) {
-      let x_68 : f32 = A[0];
-      let x_70 : f32 = A[0];
-      A[0] = (x_70 + x_68);
-    }
-
-    continuing {
-      let x_73 : i32 = i;
-      i = (x_73 + 1);
-    }
-  }
-  loop {
-    let x_80 : u32 = gl_GlobalInvocationID.x;
-    if ((x_80 < 100u)) {
-      value = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-      m = 0;
-      loop {
-        let x_89 : i32 = m;
-        if ((x_89 < 1)) {
-        } else {
-          break;
-        }
-        l = 0;
-        loop {
-          let x_96 : i32 = l;
-          if ((x_96 < 1)) {
-          } else {
-            break;
-          }
-          let x_100 : f32 = x_10.injectionSwitch.x;
-          let x_102 : f32 = x_10.injectionSwitch.y;
-          if ((x_100 > x_102)) {
-            return;
-          }
-
-          continuing {
-            let x_106 : i32 = l;
-            l = (x_106 + 1);
-          }
-        }
-
-        continuing {
-          let x_108 : i32 = m;
-          m = (x_108 + 1);
-        }
-      }
-      n = 0;
-      loop {
-        let x_114 : i32 = n;
-        if ((x_114 < 1)) {
-        } else {
-          break;
-        }
-        let x_118 : f32 = x_10.injectionSwitch.x;
-        let x_120 : f32 = x_10.injectionSwitch.y;
-        if ((x_118 > x_120)) {
-          workgroupBarrier();
-        }
-
-        continuing {
-          let x_124 : i32 = n;
-          n = (x_124 + 1);
-        }
-      }
-    } else {
-      let x_127 : u32 = gl_GlobalInvocationID.x;
-      if ((x_127 < 120u)) {
-        let x_133 : f32 = A[0];
-        let x_135 : f32 = x_13.resolution.x;
-        let x_138 : f32 = A[0];
-        let x_140 : f32 = x_13.resolution.y;
-        value = vec4<f32>((x_133 / x_135), (x_138 / x_140), 0.0, 1.0);
-      } else {
-        let x_144 : f32 = x_10.injectionSwitch.x;
-        let x_146 : f32 = x_10.injectionSwitch.y;
-        if ((x_144 > x_146)) {
-          continue;
-        }
-      }
-    }
-
-    continuing {
-      if (false) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_151 : f32 = value.x;
-  x_15.x_compute_data[0] = i32(x_151);
-  let x_155 : f32 = value.y;
-  x_15.x_compute_data[1] = i32(x_155);
-  let x_159 : f32 = value.z;
-  x_15.x_compute_data[2] = i32(x_159);
-  let x_163 : f32 = value.w;
-  x_15.x_compute_data[3] = i32(x_163);
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
-  gl_GlobalInvocationID = gl_GlobalInvocationID_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.hlsl
deleted file mode 100644
index 3c44a6c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-
-float3 computeColor_() {
-  int x_injected_loop_counter = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_injected_loop_counter = 1;
-  while (true) {
-    const float x_38 = asfloat(x_7[0].x);
-    if ((x_38 > 1.0f)) {
-      const float x_43 = asfloat(x_7[0].x);
-      if ((x_43 > 1.0f)) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  const float3 x_31 = computeColor_();
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.msl
deleted file mode 100644
index 0230992..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 computeColor_(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int x_injected_loop_counter = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_injected_loop_counter = 1;
-  while (true) {
-    float const x_38 = x_7.injectionSwitch.x;
-    if ((x_38 > 1.0f)) {
-      float const x_43 = x_7.injectionSwitch.x;
-      if ((x_43 > 1.0f)) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  float3 const x_31 = computeColor_(x_7, tint_symbol_4);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  main_1(x_7, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.spvasm
deleted file mode 100644
index 6ec6c51..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %computeColor_ "computeColor_"
-               OpName %x_injected_loop_counter "x_injected_loop_counter"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v3float = OpTypeVector %float 3
-         %12 = OpTypeFunction %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-         %43 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-         %44 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-%computeColor_ = OpFunction %v3float None %12
-         %15 = OpLabel
-%x_injected_loop_counter = OpVariable %_ptr_Function_int Function %19
-               OpStore %x_GLF_color %22
-               OpStore %x_injected_loop_counter %int_1
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %31 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %32 = OpLoad %float %31
-         %33 = OpFOrdGreaterThan %bool %32 %float_1
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThan %bool %38 %float_1
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %42
-         %41 = OpLabel
-               OpBranch %26
-         %42 = OpLabel
-               OpBranch %26
-         %40 = OpLabel
-               OpBranch %26
-         %35 = OpLabel
-               OpReturnValue %43
-         %26 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-               OpReturnValue %44
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %v3float %computeColor_
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.wgsl
deleted file mode 100644
index 543e524..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-fn computeColor_() -> vec3<f32> {
-  var x_injected_loop_counter : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  x_injected_loop_counter = 1;
-  loop {
-    let x_38 : f32 = x_7.injectionSwitch.x;
-    if ((x_38 > 1.0)) {
-      let x_43 : f32 = x_7.injectionSwitch.x;
-      if ((x_43 > 1.0)) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  let x_31 : vec3<f32> = computeColor_();
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.hlsl
deleted file mode 100644
index 3c44a6c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-
-float3 computeColor_() {
-  int x_injected_loop_counter = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_injected_loop_counter = 1;
-  while (true) {
-    const float x_38 = asfloat(x_7[0].x);
-    if ((x_38 > 1.0f)) {
-      const float x_43 = asfloat(x_7[0].x);
-      if ((x_43 > 1.0f)) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  const float3 x_31 = computeColor_();
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.msl
deleted file mode 100644
index 0230992..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.msl
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 computeColor_(constant buf0& x_7, thread float4* const tint_symbol_3) {
-  int x_injected_loop_counter = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  x_injected_loop_counter = 1;
-  while (true) {
-    float const x_38 = x_7.injectionSwitch.x;
-    if ((x_38 > 1.0f)) {
-      float const x_43 = x_7.injectionSwitch.x;
-      if ((x_43 > 1.0f)) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    return float3(1.0f, 1.0f, 1.0f);
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
-  float3 const x_31 = computeColor_(x_7, tint_symbol_4);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, thread float4* const tint_symbol_5) {
-  main_1(x_7, tint_symbol_5);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_5)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_6 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, &(tint_symbol_6));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.spvasm
deleted file mode 100644
index 6ec6c51..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,111 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %computeColor_ "computeColor_"
-               OpName %x_injected_loop_counter "x_injected_loop_counter"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-    %v3float = OpTypeVector %float 3
-         %12 = OpTypeFunction %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-       %bool = OpTypeBool
-         %43 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-         %44 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %45 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-%computeColor_ = OpFunction %v3float None %12
-         %15 = OpLabel
-%x_injected_loop_counter = OpVariable %_ptr_Function_int Function %19
-               OpStore %x_GLF_color %22
-               OpStore %x_injected_loop_counter %int_1
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-         %31 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %32 = OpLoad %float %31
-         %33 = OpFOrdGreaterThan %bool %32 %float_1
-               OpSelectionMerge %35 None
-               OpBranchConditional %33 %36 %35
-         %36 = OpLabel
-         %37 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %38 = OpLoad %float %37
-         %39 = OpFOrdGreaterThan %bool %38 %float_1
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %42
-         %41 = OpLabel
-               OpBranch %26
-         %42 = OpLabel
-               OpBranch %26
-         %40 = OpLabel
-               OpBranch %26
-         %35 = OpLabel
-               OpReturnValue %43
-         %26 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-               OpReturnValue %44
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %v3float %computeColor_
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %45
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.wgsl
deleted file mode 100644
index 543e524..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-continue-statement/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,44 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-fn computeColor_() -> vec3<f32> {
-  var x_injected_loop_counter : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  x_injected_loop_counter = 1;
-  loop {
-    let x_38 : f32 = x_7.injectionSwitch.x;
-    if ((x_38 > 1.0)) {
-      let x_43 : f32 = x_7.injectionSwitch.x;
-      if ((x_43 > 1.0)) {
-        continue;
-      } else {
-        continue;
-      }
-      continue;
-    }
-    return vec3<f32>(1.0, 1.0, 1.0);
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  let x_31 : vec3<f32> = computeColor_();
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 3afde97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 computePoint_() {
-  const float x_48 = asfloat(x_7[0].x);
-  const float x_50 = asfloat(x_7[0].y);
-  if ((x_48 > x_50)) {
-    discard;
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  bool x_34 = false;
-  while (true) {
-    const float3 x_36 = computePoint_();
-    const float x_41 = gl_FragCoord.x;
-    if ((x_41 < 0.0f)) {
-      x_34 = true;
-      break;
-    }
-    const float3 x_45 = computePoint_();
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    x_34 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.msl
deleted file mode 100644
index 85a481a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 computePoint_(constant buf0& x_7) {
-  float const x_48 = x_7.injectionSwitch.x;
-  float const x_50 = x_7.injectionSwitch.y;
-  if ((x_48 > x_50)) {
-    discard_fragment();
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  bool x_34 = false;
-  while (true) {
-    float3 const x_36 = computePoint_(x_7);
-    float const x_41 = (*(tint_symbol_3)).x;
-    if ((x_41 < 0.0f)) {
-      x_34 = true;
-      break;
-    }
-    float3 const x_45 = computePoint_(x_7);
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    x_34 = true;
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 700fc29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,125 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %computePoint_ "computePoint_"
-               OpName %main_1 "main_1"
-               OpName %x_34 "x_34"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v3float = OpTypeVector %float 3
-         %15 = OpTypeFunction %v3float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %33 = OpTypeFunction %void
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %55 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out %v4float
-%computePoint_ = OpFunction %v3float None %15
-         %18 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %23 = OpLoad %float %22
-         %25 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %26 = OpLoad %float %25
-         %27 = OpFOrdGreaterThan %bool %23 %26
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
-               OpKill
-         %29 = OpLabel
-               OpReturnValue %32
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %33
-         %36 = OpLabel
-       %x_34 = OpVariable %_ptr_Function_bool Function %40
-               OpStore %x_34 %false
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpFunctionCall %v3float %computePoint_
-         %47 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %48 = OpLoad %float %47
-         %49 = OpFOrdLessThan %bool %48 %float_0
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-               OpStore %x_34 %true
-               OpBranch %42
-         %50 = OpLabel
-         %53 = OpFunctionCall %v3float %computePoint_
-               OpStore %x_GLF_color %55
-               OpStore %x_34 %true
-               OpBranch %42
-         %43 = OpLabel
-               OpBranch %41
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %60 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %33
-         %65 = OpLabel
-         %67 = OpLoad %v4float %gl_FragCoord_param_1
-         %66 = OpFunctionCall %main_out %main_inner %67
-         %68 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9873801..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn computePoint_() -> vec3<f32> {
-  let x_48 : f32 = x_7.injectionSwitch.x;
-  let x_50 : f32 = x_7.injectionSwitch.y;
-  if ((x_48 > x_50)) {
-    discard;
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var x_34 : bool = false;
-  loop {
-    let x_36 : vec3<f32> = computePoint_();
-    let x_41 : f32 = gl_FragCoord.x;
-    if ((x_41 < 0.0)) {
-      x_34 = true;
-      break;
-    }
-    let x_45 : vec3<f32> = computePoint_();
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    x_34 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 3afde97..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,55 +0,0 @@
-cbuffer cbuffer_x_7 : register(b0, space0) {
-  uint4 x_7[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 computePoint_() {
-  const float x_48 = asfloat(x_7[0].x);
-  const float x_50 = asfloat(x_7[0].y);
-  if ((x_48 > x_50)) {
-    discard;
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1() {
-  bool x_34 = false;
-  while (true) {
-    const float3 x_36 = computePoint_();
-    const float x_41 = gl_FragCoord.x;
-    if ((x_41 < 0.0f)) {
-      x_34 = true;
-      break;
-    }
-    const float3 x_45 = computePoint_();
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    x_34 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.msl
deleted file mode 100644
index 85a481a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 computePoint_(constant buf0& x_7) {
-  float const x_48 = x_7.injectionSwitch.x;
-  float const x_50 = x_7.injectionSwitch.y;
-  if ((x_48 > x_50)) {
-    discard_fragment();
-  }
-  return float3(0.0f, 0.0f, 0.0f);
-}
-
-void main_1(constant buf0& x_7, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  bool x_34 = false;
-  while (true) {
-    float3 const x_36 = computePoint_(x_7);
-    float const x_41 = (*(tint_symbol_3)).x;
-    if ((x_41 < 0.0f)) {
-      x_34 = true;
-      break;
-    }
-    float3 const x_45 = computePoint_(x_7);
-    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    x_34 = true;
-    break;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(x_7, tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 700fc29..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,125 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 69
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_7 "x_7"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %computePoint_ "computePoint_"
-               OpName %main_1 "main_1"
-               OpName %x_34 "x_34"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_7 NonWritable
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_7 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-    %v3float = OpTypeVector %float 3
-         %15 = OpTypeFunction %v3float
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-    %float_0 = OpConstant %float 0
-         %32 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-       %void = OpTypeVoid
-         %33 = OpTypeFunction %void
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %40 = OpConstantNull %bool
-%_ptr_Private_float = OpTypePointer Private %float
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %55 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %56 = OpTypeFunction %main_out %v4float
-%computePoint_ = OpFunction %v3float None %15
-         %18 = OpLabel
-         %22 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_0
-         %23 = OpLoad %float %22
-         %25 = OpAccessChain %_ptr_Uniform_float %x_7 %uint_0 %uint_1
-         %26 = OpLoad %float %25
-         %27 = OpFOrdGreaterThan %bool %23 %26
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
-               OpKill
-         %29 = OpLabel
-               OpReturnValue %32
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %33
-         %36 = OpLabel
-       %x_34 = OpVariable %_ptr_Function_bool Function %40
-               OpStore %x_34 %false
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %45 = OpFunctionCall %v3float %computePoint_
-         %47 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %48 = OpLoad %float %47
-         %49 = OpFOrdLessThan %bool %48 %float_0
-               OpSelectionMerge %50 None
-               OpBranchConditional %49 %51 %50
-         %51 = OpLabel
-               OpStore %x_34 %true
-               OpBranch %42
-         %50 = OpLabel
-         %53 = OpFunctionCall %v3float %computePoint_
-               OpStore %x_GLF_color %55
-               OpStore %x_34 %true
-               OpBranch %42
-         %43 = OpLabel
-               OpBranch %41
-         %42 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %56
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %60 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %61 = OpFunctionCall %void %main_1
-         %62 = OpLoad %v4float %x_GLF_color
-         %63 = OpCompositeConstruct %main_out %62
-               OpReturnValue %63
-               OpFunctionEnd
-       %main = OpFunction %void None %33
-         %65 = OpLabel
-         %67 = OpLoad %v4float %gl_FragCoord_param_1
-         %66 = OpFunctionCall %main_out %main_inner %67
-         %68 = OpCompositeExtract %v4float %66 0
-               OpStore %x_GLF_color_1_1 %68
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9873801..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement-in-if/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_7 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn computePoint_() -> vec3<f32> {
-  let x_48 : f32 = x_7.injectionSwitch.x;
-  let x_50 : f32 = x_7.injectionSwitch.y;
-  if ((x_48 > x_50)) {
-    discard;
-  }
-  return vec3<f32>(0.0, 0.0, 0.0);
-}
-
-fn main_1() {
-  var x_34 : bool = false;
-  loop {
-    let x_36 : vec3<f32> = computePoint_();
-    let x_41 : f32 = gl_FragCoord.x;
-    if ((x_41 < 0.0)) {
-      x_34 = true;
-      break;
-    }
-    let x_45 : vec3<f32> = computePoint_();
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    x_34 = true;
-    break;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.hlsl
deleted file mode 100644
index ac1e10c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 mand_() {
-  bool x_40 = false;
-  float3 x_41 = float3(0.0f, 0.0f, 0.0f);
-  int k = 0;
-  while (true) {
-    k = 0;
-    while (true) {
-      if ((k < 1000)) {
-      } else {
-        break;
-      }
-      x_40 = true;
-      x_41 = float3(1.0f, 1.0f, 1.0f);
-      break;
-    }
-    if (x_40) {
-      break;
-    }
-    discard;
-  }
-  return x_41;
-}
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  while (true) {
-    if ((i < 4)) {
-    } else {
-      break;
-    }
-    {
-      const float3 x_38 = mand_();
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.msl
deleted file mode 100644
index e2334b4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 mand_() {
-  bool x_40 = false;
-  float3 x_41 = 0.0f;
-  int k = 0;
-  while (true) {
-    k = 0;
-    while (true) {
-      int const x_7 = k;
-      if ((x_7 < 1000)) {
-      } else {
-        break;
-      }
-      x_40 = true;
-      x_41 = float3(1.0f, 1.0f, 1.0f);
-      break;
-    }
-    bool const x_50 = x_40;
-    if (x_50) {
-      break;
-    }
-    discard_fragment();
-  }
-  float3 const x_52 = x_41;
-  return x_52;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_8 = i;
-    if ((x_8 < 4)) {
-    } else {
-      break;
-    }
-    {
-      float3 const x_38 = mand_();
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.spvasm
deleted file mode 100644
index 513a87d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,142 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %mand_ "mand_"
-               OpName %x_40 "x_40"
-               OpName %x_41 "x_41"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %16 = OpConstantNull %bool
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %19 = OpConstantNull %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-   %int_1000 = OpConstant %int 1000
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %41 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-       %void = OpTypeVoid
-         %46 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_4 = OpConstant %int 4
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-      %mand_ = OpFunction %v3float None %8
-         %11 = OpLabel
-       %x_40 = OpVariable %_ptr_Function_bool Function %16
-       %x_41 = OpVariable %_ptr_Function_v3float Function %19
-          %k = OpVariable %_ptr_Function_int Function %23
-               OpStore %x_40 %false
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-               OpStore %k %int_0
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %k
-         %35 = OpSLessThan %bool %33 %int_1000
-               OpSelectionMerge %36 None
-               OpBranchConditional %35 %37 %38
-         %37 = OpLabel
-               OpBranch %36
-         %38 = OpLabel
-               OpBranch %30
-         %36 = OpLabel
-               OpStore %x_40 %true
-               OpStore %x_41 %41
-               OpBranch %30
-         %31 = OpLabel
-               OpBranch %29
-         %30 = OpLabel
-         %42 = OpLoad %bool %x_40
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpBranch %25
-         %43 = OpLabel
-               OpKill
-         %26 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-         %45 = OpLoad %v3float %x_41
-               OpReturnValue %45
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %46
-         %49 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %23
-               OpStore %x_GLF_color %52
-               OpStore %i %int_0
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpLoad %int %i
-         %59 = OpSLessThan %bool %57 %int_4
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %54
-         %60 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %63 = OpFunctionCall %v3float %mand_
-         %64 = OpLoad %int %i
-         %66 = OpIAdd %int %64 %int_1
-               OpStore %i %66
-               OpBranch %53
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %46
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.wgsl
deleted file mode 100644
index 5ad0b89..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,58 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn mand_() -> vec3<f32> {
-  var x_40 : bool = false;
-  var x_41 : vec3<f32>;
-  var k : i32;
-  loop {
-    k = 0;
-    loop {
-      let x_7 : i32 = k;
-      if ((x_7 < 1000)) {
-      } else {
-        break;
-      }
-      x_40 = true;
-      x_41 = vec3<f32>(1.0, 1.0, 1.0);
-      break;
-    }
-    let x_50 : bool = x_40;
-    if (x_50) {
-      break;
-    }
-    discard;
-  }
-  let x_52 : vec3<f32> = x_41;
-  return x_52;
-}
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 0;
-  loop {
-    let x_8 : i32 = i;
-    if ((x_8 < 4)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_38 : vec3<f32> = mand_();
-      let x_9 : i32 = i;
-      i = (x_9 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.hlsl
deleted file mode 100644
index ac1e10c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,61 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float3 mand_() {
-  bool x_40 = false;
-  float3 x_41 = float3(0.0f, 0.0f, 0.0f);
-  int k = 0;
-  while (true) {
-    k = 0;
-    while (true) {
-      if ((k < 1000)) {
-      } else {
-        break;
-      }
-      x_40 = true;
-      x_41 = float3(1.0f, 1.0f, 1.0f);
-      break;
-    }
-    if (x_40) {
-      break;
-    }
-    discard;
-  }
-  return x_41;
-}
-
-void main_1() {
-  int i = 0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  while (true) {
-    if ((i < 4)) {
-    } else {
-      break;
-    }
-    {
-      const float3 x_38 = mand_();
-      i = (i + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.msl
deleted file mode 100644
index e2334b4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.msl
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float3 mand_() {
-  bool x_40 = false;
-  float3 x_41 = 0.0f;
-  int k = 0;
-  while (true) {
-    k = 0;
-    while (true) {
-      int const x_7 = k;
-      if ((x_7 < 1000)) {
-      } else {
-        break;
-      }
-      x_40 = true;
-      x_41 = float3(1.0f, 1.0f, 1.0f);
-      break;
-    }
-    bool const x_50 = x_40;
-    if (x_50) {
-      break;
-    }
-    discard_fragment();
-  }
-  float3 const x_52 = x_41;
-  return x_52;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_8 = i;
-    if ((x_8 < 4)) {
-    } else {
-      break;
-    }
-    {
-      float3 const x_38 = mand_();
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.spvasm
deleted file mode 100644
index 513a87d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,142 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 78
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %mand_ "mand_"
-               OpName %x_40 "x_40"
-               OpName %x_41 "x_41"
-               OpName %k "k"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v3float = OpTypeVector %float 3
-          %8 = OpTypeFunction %v3float
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %16 = OpConstantNull %bool
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %19 = OpConstantNull %v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-      %int_0 = OpConstant %int 0
-   %int_1000 = OpConstant %int 1000
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-         %41 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-       %void = OpTypeVoid
-         %46 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %52 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_4 = OpConstant %int 4
-      %int_1 = OpConstant %int 1
-   %main_out = OpTypeStruct %v4float
-         %67 = OpTypeFunction %main_out
-      %mand_ = OpFunction %v3float None %8
-         %11 = OpLabel
-       %x_40 = OpVariable %_ptr_Function_bool Function %16
-       %x_41 = OpVariable %_ptr_Function_v3float Function %19
-          %k = OpVariable %_ptr_Function_int Function %23
-               OpStore %x_40 %false
-               OpBranch %24
-         %24 = OpLabel
-               OpLoopMerge %25 %26 None
-               OpBranch %27
-         %27 = OpLabel
-               OpStore %k %int_0
-               OpBranch %29
-         %29 = OpLabel
-               OpLoopMerge %30 %31 None
-               OpBranch %32
-         %32 = OpLabel
-         %33 = OpLoad %int %k
-         %35 = OpSLessThan %bool %33 %int_1000
-               OpSelectionMerge %36 None
-               OpBranchConditional %35 %37 %38
-         %37 = OpLabel
-               OpBranch %36
-         %38 = OpLabel
-               OpBranch %30
-         %36 = OpLabel
-               OpStore %x_40 %true
-               OpStore %x_41 %41
-               OpBranch %30
-         %31 = OpLabel
-               OpBranch %29
-         %30 = OpLabel
-         %42 = OpLoad %bool %x_40
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %43
-         %44 = OpLabel
-               OpBranch %25
-         %43 = OpLabel
-               OpKill
-         %26 = OpLabel
-               OpBranch %24
-         %25 = OpLabel
-         %45 = OpLoad %v3float %x_41
-               OpReturnValue %45
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %46
-         %49 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %23
-               OpStore %x_GLF_color %52
-               OpStore %i %int_0
-               OpBranch %53
-         %53 = OpLabel
-               OpLoopMerge %54 %55 None
-               OpBranch %56
-         %56 = OpLabel
-         %57 = OpLoad %int %i
-         %59 = OpSLessThan %bool %57 %int_4
-               OpSelectionMerge %60 None
-               OpBranchConditional %59 %61 %62
-         %61 = OpLabel
-               OpBranch %60
-         %62 = OpLabel
-               OpBranch %54
-         %60 = OpLabel
-               OpBranch %55
-         %55 = OpLabel
-         %63 = OpFunctionCall %v3float %mand_
-         %64 = OpLoad %int %i
-         %66 = OpIAdd %int %64 %int_1
-               OpStore %i %66
-               OpBranch %53
-         %54 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %67
-         %70 = OpLabel
-         %71 = OpFunctionCall %void %main_1
-         %72 = OpLoad %v4float %x_GLF_color
-         %73 = OpCompositeConstruct %main_out %72
-               OpReturnValue %73
-               OpFunctionEnd
-       %main = OpFunction %void None %46
-         %75 = OpLabel
-         %76 = OpFunctionCall %main_out %main_inner
-         %77 = OpCompositeExtract %v4float %76 0
-               OpStore %x_GLF_color_1_1 %77
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.wgsl
deleted file mode 100644
index 5ad0b89..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-discard-statement/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,58 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn mand_() -> vec3<f32> {
-  var x_40 : bool = false;
-  var x_41 : vec3<f32>;
-  var k : i32;
-  loop {
-    k = 0;
-    loop {
-      let x_7 : i32 = k;
-      if ((x_7 < 1000)) {
-      } else {
-        break;
-      }
-      x_40 = true;
-      x_41 = vec3<f32>(1.0, 1.0, 1.0);
-      break;
-    }
-    let x_50 : bool = x_40;
-    if (x_50) {
-      break;
-    }
-    discard;
-  }
-  let x_52 : vec3<f32> = x_41;
-  return x_52;
-}
-
-fn main_1() {
-  var i : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 0;
-  loop {
-    let x_8 : i32 = i;
-    if ((x_8 < 4)) {
-    } else {
-      break;
-    }
-
-    continuing {
-      let x_38 : vec3<f32> = mand_();
-      let x_9 : i32 = i;
-      i = (x_9 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.hlsl
deleted file mode 100644
index 2d66c64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  float data[1] = (float[1])0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 1); i = (i + 1)) {
-      const float x_40 = data[i];
-      const float x_42 = data[0];
-      if ((x_40 < x_42)) {
-        if (false) {
-          if ((float(i) >= 1.0f)) {
-          }
-        }
-        switch(0) {
-          case 1: {
-            while (true) {
-              if (true) {
-              } else {
-                break;
-              }
-            }
-            while (true) {
-            }
-            /* fallthrough */
-            {
-              data[0] = 2.0f;
-            }
-            break;
-          }
-          case 0: {
-            data[0] = 2.0f;
-            break;
-          }
-          default: {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.msl
deleted file mode 100644
index 2ca222e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.msl
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper data = {};
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_6 = i;
-    if ((x_6 < 1)) {
-    } else {
-      break;
-    }
-    int const x_7 = i;
-    float const x_40 = data.arr[x_7];
-    float const x_42 = data.arr[0];
-    if ((x_40 < x_42)) {
-      if (false) {
-        int const x_8 = i;
-        if ((float(x_8) >= 1.0f)) {
-        }
-      }
-      switch(0) {
-        case 1: {
-          while (true) {
-            if (true) {
-            } else {
-              break;
-            }
-          }
-          while (true) {
-          }
-          /* fallthrough */
-        }
-        case 0: {
-          data.arr[0] = 2.0f;
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-    }
-    {
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.spvasm
deleted file mode 100644
index 2bd5729..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-%_ptr_Function__arr_float_uint_1 = OpTypePointer Function %_arr_float_uint_1
-         %21 = OpConstantNull %_arr_float_uint_1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-    %float_2 = OpConstant %float 2
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-       %data = OpVariable %_ptr_Function__arr_float_uint_1 Function %21
-               OpStore %x_GLF_color %24
-               OpStore %i %int_0
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %i
-         %32 = OpSLessThan %bool %30 %int_1
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpBranch %34
-         %36 = OpLabel
-               OpBranch %27
-         %34 = OpLabel
-         %37 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Function_float %data %37
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Function_float %data %int_0
-         %42 = OpLoad %float %41
-         %43 = OpFOrdLessThan %bool %40 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpSelectionMerge %47 None
-               OpBranchConditional %false %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpConvertSToF %float %49
-         %51 = OpFOrdGreaterThanEqual %bool %50 %float_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-               OpBranch %52
-         %52 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpSelectionMerge %54 None
-               OpSwitch %int_0 %55 1 %56 0 %57
-         %56 = OpLabel
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-               OpSelectionMerge %63 None
-               OpBranchConditional %true %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %59
-         %63 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-               OpBranch %58
-         %59 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %66
-         %67 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %data %int_0
-               OpStore %70 %float_2
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %72 = OpLoad %int %i
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %i %73
-               OpBranch %26
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-         %77 = OpLabel
-         %78 = OpFunctionCall %void %main_1
-         %79 = OpLoad %v4float %x_GLF_color
-         %80 = OpCompositeConstruct %main_out %79
-               OpReturnValue %80
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %82 = OpLabel
-         %83 = OpFunctionCall %main_out %main_inner
-         %84 = OpCompositeExtract %v4float %83 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.wgsl
deleted file mode 100644
index 27a00c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var data : array<f32, 1>;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 0;
-  loop {
-    let x_6 : i32 = i;
-    if ((x_6 < 1)) {
-    } else {
-      break;
-    }
-    let x_7 : i32 = i;
-    let x_40 : f32 = data[x_7];
-    let x_42 : f32 = data[0];
-    if ((x_40 < x_42)) {
-      if (false) {
-        let x_8 : i32 = i;
-        if ((f32(x_8) >= 1.0)) {
-        }
-      }
-      switch(0) {
-        case 1: {
-          loop {
-            if (true) {
-            } else {
-              break;
-            }
-          }
-          loop {
-          }
-          fallthrough;
-        }
-        case 0: {
-          data[0] = 2.0;
-        }
-        default: {
-        }
-      }
-    }
-
-    continuing {
-      let x_9 : i32 = i;
-      i = (x_9 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.hlsl
deleted file mode 100644
index 2d66c64..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,65 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  int i = 0;
-  float data[1] = (float[1])0;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  {
-    for(; (i < 1); i = (i + 1)) {
-      const float x_40 = data[i];
-      const float x_42 = data[0];
-      if ((x_40 < x_42)) {
-        if (false) {
-          if ((float(i) >= 1.0f)) {
-          }
-        }
-        switch(0) {
-          case 1: {
-            while (true) {
-              if (true) {
-              } else {
-                break;
-              }
-            }
-            while (true) {
-            }
-            /* fallthrough */
-            {
-              data[0] = 2.0f;
-            }
-            break;
-          }
-          case 0: {
-            data[0] = 2.0f;
-            break;
-          }
-          default: {
-            break;
-          }
-        }
-      }
-    }
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.msl
deleted file mode 100644
index 2ca222e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.msl
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  int i = 0;
-  tint_array_wrapper data = {};
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  i = 0;
-  while (true) {
-    int const x_6 = i;
-    if ((x_6 < 1)) {
-    } else {
-      break;
-    }
-    int const x_7 = i;
-    float const x_40 = data.arr[x_7];
-    float const x_42 = data.arr[0];
-    if ((x_40 < x_42)) {
-      if (false) {
-        int const x_8 = i;
-        if ((float(x_8) >= 1.0f)) {
-        }
-      }
-      switch(0) {
-        case 1: {
-          while (true) {
-            if (true) {
-            } else {
-              break;
-            }
-          }
-          while (true) {
-          }
-          /* fallthrough */
-        }
-        case 0: {
-          data.arr[0] = 2.0f;
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-    }
-    {
-      int const x_9 = i;
-      i = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.spvasm
deleted file mode 100644
index 2bd5729..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,153 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 85
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %data "data"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %15 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-%_ptr_Function__arr_float_uint_1 = OpTypePointer Function %_arr_float_uint_1
-         %21 = OpConstantNull %_arr_float_uint_1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %24 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-%_ptr_Function_float = OpTypePointer Function %float
-      %false = OpConstantFalse %bool
-       %true = OpConstantTrue %bool
-    %float_2 = OpConstant %float 2
-   %main_out = OpTypeStruct %v4float
-         %74 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-          %i = OpVariable %_ptr_Function_int Function %15
-       %data = OpVariable %_ptr_Function__arr_float_uint_1 Function %21
-               OpStore %x_GLF_color %24
-               OpStore %i %int_0
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %30 = OpLoad %int %i
-         %32 = OpSLessThan %bool %30 %int_1
-               OpSelectionMerge %34 None
-               OpBranchConditional %32 %35 %36
-         %35 = OpLabel
-               OpBranch %34
-         %36 = OpLabel
-               OpBranch %27
-         %34 = OpLabel
-         %37 = OpLoad %int %i
-         %39 = OpAccessChain %_ptr_Function_float %data %37
-         %40 = OpLoad %float %39
-         %41 = OpAccessChain %_ptr_Function_float %data %int_0
-         %42 = OpLoad %float %41
-         %43 = OpFOrdLessThan %bool %40 %42
-               OpSelectionMerge %44 None
-               OpBranchConditional %43 %45 %44
-         %45 = OpLabel
-               OpSelectionMerge %47 None
-               OpBranchConditional %false %48 %47
-         %48 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpConvertSToF %float %49
-         %51 = OpFOrdGreaterThanEqual %bool %50 %float_1
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-               OpBranch %52
-         %52 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpSelectionMerge %54 None
-               OpSwitch %int_0 %55 1 %56 0 %57
-         %56 = OpLabel
-               OpBranch %58
-         %58 = OpLabel
-               OpLoopMerge %59 %60 None
-               OpBranch %61
-         %61 = OpLabel
-               OpSelectionMerge %63 None
-               OpBranchConditional %true %64 %65
-         %64 = OpLabel
-               OpBranch %63
-         %65 = OpLabel
-               OpBranch %59
-         %63 = OpLabel
-               OpBranch %60
-         %60 = OpLabel
-               OpBranch %58
-         %59 = OpLabel
-               OpBranch %66
-         %66 = OpLabel
-               OpLoopMerge %67 %68 None
-               OpBranch %69
-         %69 = OpLabel
-               OpBranch %68
-         %68 = OpLabel
-               OpBranch %66
-         %67 = OpLabel
-               OpBranch %57
-         %57 = OpLabel
-         %70 = OpAccessChain %_ptr_Function_float %data %int_0
-               OpStore %70 %float_2
-               OpBranch %54
-         %55 = OpLabel
-               OpBranch %54
-         %54 = OpLabel
-               OpBranch %44
-         %44 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %72 = OpLoad %int %i
-         %73 = OpIAdd %int %72 %int_1
-               OpStore %i %73
-               OpBranch %26
-         %27 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %74
-         %77 = OpLabel
-         %78 = OpFunctionCall %void %main_1
-         %79 = OpLoad %v4float %x_GLF_color
-         %80 = OpCompositeConstruct %main_out %79
-               OpReturnValue %80
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %82 = OpLabel
-         %83 = OpFunctionCall %main_out %main_inner
-         %84 = OpCompositeExtract %v4float %83 0
-               OpStore %x_GLF_color_1_1 %84
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.wgsl
deleted file mode 100644
index 27a00c6..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops-in-switch/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,60 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var i : i32;
-  var data : array<f32, 1>;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  i = 0;
-  loop {
-    let x_6 : i32 = i;
-    if ((x_6 < 1)) {
-    } else {
-      break;
-    }
-    let x_7 : i32 = i;
-    let x_40 : f32 = data[x_7];
-    let x_42 : f32 = data[0];
-    if ((x_40 < x_42)) {
-      if (false) {
-        let x_8 : i32 = i;
-        if ((f32(x_8) >= 1.0)) {
-        }
-      }
-      switch(0) {
-        case 1: {
-          loop {
-            if (true) {
-            } else {
-              break;
-            }
-          }
-          loop {
-          }
-          fallthrough;
-        }
-        case 0: {
-          data[0] = 2.0;
-        }
-        default: {
-        }
-      }
-    }
-
-    continuing {
-      let x_9 : i32 = i;
-      i = (x_9 + 1);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.msl
deleted file mode 100644
index c990590..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injected;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int m = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_30 = x_5.injected.x;
-  float const x_32 = x_5.injected.y;
-  if ((x_30 > x_32)) {
-    while (true) {
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    m = 1;
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 33bdd6f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,113 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injected"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %m = OpVariable %_ptr_Function_int Function %19
-               OpStore %x_GLF_color %22
-         %26 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %27 = OpLoad %float %26
-         %29 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %30 = OpLoad %float %29
-         %31 = OpFOrdGreaterThan %bool %27 %30
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %33
-         %34 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpBranchConditional %false %35 %36
-         %36 = OpLabel
-               OpStore %m %int_1
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-               OpSelectionMerge %46 None
-               OpBranchConditional %true %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %42
-         %46 = OpLabel
-               OpStore %x_GLF_color %22
-               OpBranch %43
-         %43 = OpLabel
-               OpBranch %41
-         %42 = OpLabel
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 204bbae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-[[block]]
-struct buf0 {
-  injected : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var m : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_30 : f32 = x_5.injected.x;
-  let x_32 : f32 = x_5.injected.y;
-  if ((x_30 > x_32)) {
-    loop {
-
-      continuing {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    m = 1;
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.msl
deleted file mode 100644
index c990590..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injected;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_5, thread float4* const tint_symbol_3) {
-  int m = 0;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  float const x_30 = x_5.injected.x;
-  float const x_32 = x_5.injected.y;
-  if ((x_30 > x_32)) {
-    while (true) {
-      {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    m = 1;
-    while (true) {
-      if (true) {
-      } else {
-        break;
-      }
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_5, thread float4* const tint_symbol_4) {
-  main_1(x_5, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_5, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 33bdd6f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,113 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 60
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injected"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %m "m"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_5 NonWritable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_5 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %22 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-     %uint_1 = OpConstant %uint 1
-       %bool = OpTypeBool
-      %false = OpConstantFalse %bool
-      %int_1 = OpConstant %int 1
-       %true = OpConstantTrue %bool
-   %main_out = OpTypeStruct %v4float
-         %49 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %m = OpVariable %_ptr_Function_int Function %19
-               OpStore %x_GLF_color %22
-         %26 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_0
-         %27 = OpLoad %float %26
-         %29 = OpAccessChain %_ptr_Uniform_float %x_5 %uint_0 %uint_1
-         %30 = OpLoad %float %29
-         %31 = OpFOrdGreaterThan %bool %27 %30
-               OpSelectionMerge %33 None
-               OpBranchConditional %31 %34 %33
-         %34 = OpLabel
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-               OpBranch %37
-         %37 = OpLabel
-               OpBranchConditional %false %35 %36
-         %36 = OpLabel
-               OpStore %m %int_1
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-               OpSelectionMerge %46 None
-               OpBranchConditional %true %47 %48
-         %47 = OpLabel
-               OpBranch %46
-         %48 = OpLabel
-               OpBranch %42
-         %46 = OpLabel
-               OpStore %x_GLF_color %22
-               OpBranch %43
-         %43 = OpLabel
-               OpBranch %41
-         %42 = OpLabel
-               OpBranch %33
-         %33 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %void %main_1
-         %54 = OpLoad %v4float %x_GLF_color
-         %55 = OpCompositeConstruct %main_out %54
-               OpReturnValue %55
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %57 = OpLabel
-         %58 = OpFunctionCall %main_out %main_inner
-         %59 = OpCompositeExtract %v4float %58 0
-               OpStore %x_GLF_color_1_1 %59
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 204bbae..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,46 +0,0 @@
-[[block]]
-struct buf0 {
-  injected : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_5 : buf0;
-
-fn main_1() {
-  var m : i32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  let x_30 : f32 = x_5.injected.x;
-  let x_32 : f32 = x_5.injected.y;
-  if ((x_30 > x_32)) {
-    loop {
-
-      continuing {
-        if (false) {
-        } else {
-          break;
-        }
-      }
-    }
-    m = 1;
-    loop {
-      if (true) {
-      } else {
-        break;
-      }
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.msl
deleted file mode 100644
index 1adaed3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.msl
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool x_21_phi = false;
-  x_21_phi = false;
-  while (true) {
-    bool x_25 = false;
-    bool x_25_phi = false;
-    bool x_30_phi = false;
-    bool const x_21 = x_21_phi;
-    x_25_phi = x_21;
-    while (true) {
-      x_25 = x_25_phi;
-      x_30_phi = x_25;
-      if ((1 < 0)) {
-      } else {
-        break;
-      }
-      x_30_phi = true;
-      break;
-      {
-        x_25_phi = false;
-      }
-    }
-    bool const x_30 = x_30_phi;
-    if (x_30) {
-      break;
-    }
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-    {
-      x_21_phi = false;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.spvasm
deleted file mode 100644
index 7c51e65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,109 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_21_phi "x_21_phi"
-               OpName %x_25 "x_25"
-               OpName %x_25_phi "x_25_phi"
-               OpName %x_30_phi "x_30_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %44 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-   %x_21_phi = OpVariable %_ptr_Function_bool Function %15
-       %x_25 = OpVariable %_ptr_Function_bool Function %15
-   %x_25_phi = OpVariable %_ptr_Function_bool Function %15
-   %x_30_phi = OpVariable %_ptr_Function_bool Function %15
-               OpStore %x_21_phi %false
-               OpBranch %17
-         %17 = OpLabel
-               OpLoopMerge %18 %19 None
-               OpBranch %20
-         %20 = OpLabel
-         %24 = OpLoad %bool %x_21_phi
-               OpStore %x_25_phi %24
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %29 = OpLoad %bool %x_25_phi
-               OpStore %x_25 %29
-         %30 = OpLoad %bool %x_25
-               OpStore %x_30_phi %30
-         %34 = OpSLessThan %bool %int_1 %int_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %34 %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %26
-         %35 = OpLabel
-               OpStore %x_30_phi %true
-               OpBranch %26
-         %27 = OpLabel
-               OpStore %x_25_phi %false
-               OpBranch %25
-         %26 = OpLabel
-         %39 = OpLoad %bool %x_30_phi
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-               OpBranch %18
-         %40 = OpLabel
-               OpStore %x_GLF_color %44
-               OpBranch %18
-         %19 = OpLabel
-               OpStore %x_21_phi %false
-               OpBranch %17
-         %18 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.wgsl
deleted file mode 100644
index 005fa19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_21_phi : bool;
-  x_21_phi = false;
-  loop {
-    var x_25 : bool;
-    var x_25_phi : bool;
-    var x_30_phi : bool;
-    let x_21 : bool = x_21_phi;
-    x_25_phi = x_21;
-    loop {
-      x_25 = x_25_phi;
-      x_30_phi = x_25;
-      if ((1 < 0)) {
-      } else {
-        break;
-      }
-      x_30_phi = true;
-      break;
-
-      continuing {
-        x_25_phi = false;
-      }
-    }
-    let x_30 : bool = x_30_phi;
-    if (x_30) {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    break;
-
-    continuing {
-      x_21_phi = false;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.msl
deleted file mode 100644
index 1adaed3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.msl
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool x_21_phi = false;
-  x_21_phi = false;
-  while (true) {
-    bool x_25 = false;
-    bool x_25_phi = false;
-    bool x_30_phi = false;
-    bool const x_21 = x_21_phi;
-    x_25_phi = x_21;
-    while (true) {
-      x_25 = x_25_phi;
-      x_30_phi = x_25;
-      if ((1 < 0)) {
-      } else {
-        break;
-      }
-      x_30_phi = true;
-      break;
-      {
-        x_25_phi = false;
-      }
-    }
-    bool const x_30 = x_30_phi;
-    if (x_30) {
-      break;
-    }
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    break;
-    {
-      x_21_phi = false;
-    }
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.spvasm
deleted file mode 100644
index 7c51e65..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,109 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %x_21_phi "x_21_phi"
-               OpName %x_25 "x_25"
-               OpName %x_25_phi "x_25_phi"
-               OpName %x_30_phi "x_30_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-      %false = OpConstantFalse %bool
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-      %int_0 = OpConstant %int 0
-       %true = OpConstantTrue %bool
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %44 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %45 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-   %x_21_phi = OpVariable %_ptr_Function_bool Function %15
-       %x_25 = OpVariable %_ptr_Function_bool Function %15
-   %x_25_phi = OpVariable %_ptr_Function_bool Function %15
-   %x_30_phi = OpVariable %_ptr_Function_bool Function %15
-               OpStore %x_21_phi %false
-               OpBranch %17
-         %17 = OpLabel
-               OpLoopMerge %18 %19 None
-               OpBranch %20
-         %20 = OpLabel
-         %24 = OpLoad %bool %x_21_phi
-               OpStore %x_25_phi %24
-               OpBranch %25
-         %25 = OpLabel
-               OpLoopMerge %26 %27 None
-               OpBranch %28
-         %28 = OpLabel
-         %29 = OpLoad %bool %x_25_phi
-               OpStore %x_25 %29
-         %30 = OpLoad %bool %x_25
-               OpStore %x_30_phi %30
-         %34 = OpSLessThan %bool %int_1 %int_0
-               OpSelectionMerge %35 None
-               OpBranchConditional %34 %36 %37
-         %36 = OpLabel
-               OpBranch %35
-         %37 = OpLabel
-               OpBranch %26
-         %35 = OpLabel
-               OpStore %x_30_phi %true
-               OpBranch %26
-         %27 = OpLabel
-               OpStore %x_25_phi %false
-               OpBranch %25
-         %26 = OpLabel
-         %39 = OpLoad %bool %x_30_phi
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-               OpBranch %18
-         %40 = OpLabel
-               OpStore %x_GLF_color %44
-               OpBranch %18
-         %19 = OpLabel
-               OpStore %x_21_phi %false
-               OpBranch %17
-         %18 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %v4float %x_GLF_color
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %53 = OpLabel
-         %54 = OpFunctionCall %main_out %main_inner
-         %55 = OpCompositeExtract %v4float %54 0
-               OpStore %x_GLF_color_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.wgsl
deleted file mode 100644
index 005fa19..0000000
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,49 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var x_21_phi : bool;
-  x_21_phi = false;
-  loop {
-    var x_25 : bool;
-    var x_25_phi : bool;
-    var x_30_phi : bool;
-    let x_21 : bool = x_21_phi;
-    x_25_phi = x_21;
-    loop {
-      x_25 = x_25_phi;
-      x_30_phi = x_25;
-      if ((1 < 0)) {
-      } else {
-        break;
-      }
-      x_30_phi = true;
-      break;
-
-      continuing {
-        x_25_phi = false;
-      }
-    }
-    let x_30 : bool = x_30_phi;
-    if (x_30) {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    break;
-
-    continuing {
-      x_21_phi = false;
-    }
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.hlsl
deleted file mode 100644
index d7508b2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool c1 = false;
-  float2 uv = float2(0.0f, 0.0f);
-  int i = 0;
-  bool x_37 = false;
-  bool x_37_phi = false;
-  int x_9_phi = 0;
-  const float x_34 = uv.y;
-  const bool x_35 = (x_34 < 0.25f);
-  c1 = x_35;
-  i = 0;
-  x_37_phi = x_35;
-  x_9_phi = 0;
-  while (true) {
-    x_37 = x_37_phi;
-    if ((x_9_phi < 1)) {
-    } else {
-      break;
-    }
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    return;
-    {
-      i = (i + 1);
-      x_37_phi = false;
-      x_9_phi = 0;
-    }
-  }
-  if (x_37) {
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.msl
deleted file mode 100644
index 92961af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.msl
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool c1 = false;
-  float2 uv = 0.0f;
-  int i = 0;
-  bool x_37 = false;
-  bool x_37_phi = false;
-  int x_9_phi = 0;
-  float const x_34 = uv.y;
-  bool const x_35 = (x_34 < 0.25f);
-  c1 = x_35;
-  i = 0;
-  x_37_phi = x_35;
-  x_9_phi = 0;
-  while (true) {
-    x_37 = x_37_phi;
-    int const x_9 = x_9_phi;
-    if ((x_9 < 1)) {
-    } else {
-      break;
-    }
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    return;
-    {
-      int const x_7 = i;
-      i = as_type<int>((as_type<uint>(x_7) + as_type<uint>(1)));
-      x_37_phi = false;
-      x_9_phi = 0;
-    }
-  }
-  if (x_37) {
-    return;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.spvasm
deleted file mode 100644
index 469fad4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c1 "c1"
-               OpName %uv "uv"
-               OpName %i "i"
-               OpName %x_37 "x_37"
-               OpName %x_37_phi "x_37_phi"
-               OpName %x_9_phi "x_9_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %19 = OpConstantNull %v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %c1 = OpVariable %_ptr_Function_bool Function %15
-         %uv = OpVariable %_ptr_Function_v2float Function %19
-          %i = OpVariable %_ptr_Function_int Function %23
-       %x_37 = OpVariable %_ptr_Function_bool Function %15
-   %x_37_phi = OpVariable %_ptr_Function_bool Function %15
-    %x_9_phi = OpVariable %_ptr_Function_int Function %23
-         %30 = OpAccessChain %_ptr_Function_float %uv %uint_1
-         %31 = OpLoad %float %30
-         %33 = OpFOrdLessThan %bool %31 %float_0_25
-               OpStore %c1 %33
-               OpStore %i %int_0
-               OpStore %x_37_phi %33
-               OpStore %x_9_phi %int_0
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %bool %x_37_phi
-               OpStore %x_37 %39
-         %40 = OpLoad %int %x_9_phi
-         %42 = OpSLessThan %bool %40 %int_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %36
-         %43 = OpLabel
-               OpStore %x_GLF_color %48
-               OpReturn
-         %37 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %i %50
-               OpStore %x_37_phi %false
-               OpStore %x_9_phi %int_0
-               OpBranch %35
-         %36 = OpLabel
-         %52 = OpLoad %bool %x_37
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpReturn
-         %53 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.wgsl
deleted file mode 100644
index bd4cfad..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c1 : bool;
-  var uv : vec2<f32>;
-  var i : i32;
-  var x_37 : bool;
-  var x_37_phi : bool;
-  var x_9_phi : i32;
-  let x_34 : f32 = uv.y;
-  let x_35 : bool = (x_34 < 0.25);
-  c1 = x_35;
-  i = 0;
-  x_37_phi = x_35;
-  x_9_phi = 0;
-  loop {
-    x_37 = x_37_phi;
-    let x_9 : i32 = x_9_phi;
-    if ((x_9 < 1)) {
-    } else {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    return;
-
-    continuing {
-      let x_7 : i32 = i;
-      i = (x_7 + 1);
-      x_37_phi = false;
-      x_9_phi = 0;
-    }
-  }
-  if (x_37) {
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.hlsl
deleted file mode 100644
index d7508b2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,54 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  bool c1 = false;
-  float2 uv = float2(0.0f, 0.0f);
-  int i = 0;
-  bool x_37 = false;
-  bool x_37_phi = false;
-  int x_9_phi = 0;
-  const float x_34 = uv.y;
-  const bool x_35 = (x_34 < 0.25f);
-  c1 = x_35;
-  i = 0;
-  x_37_phi = x_35;
-  x_9_phi = 0;
-  while (true) {
-    x_37 = x_37_phi;
-    if ((x_9_phi < 1)) {
-    } else {
-      break;
-    }
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    return;
-    {
-      i = (i + 1);
-      x_37_phi = false;
-      x_9_phi = 0;
-    }
-  }
-  if (x_37) {
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.msl
deleted file mode 100644
index 92961af..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.msl
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  bool c1 = false;
-  float2 uv = 0.0f;
-  int i = 0;
-  bool x_37 = false;
-  bool x_37_phi = false;
-  int x_9_phi = 0;
-  float const x_34 = uv.y;
-  bool const x_35 = (x_34 < 0.25f);
-  c1 = x_35;
-  i = 0;
-  x_37_phi = x_35;
-  x_9_phi = 0;
-  while (true) {
-    x_37 = x_37_phi;
-    int const x_9 = x_9_phi;
-    if ((x_9 < 1)) {
-    } else {
-      break;
-    }
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    return;
-    {
-      int const x_7 = i;
-      i = as_type<int>((as_type<uint>(x_7) + as_type<uint>(1)));
-      x_37_phi = false;
-      x_9_phi = 0;
-    }
-  }
-  if (x_37) {
-    return;
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.spvasm
deleted file mode 100644
index 469fad4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,117 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 66
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %c1 "c1"
-               OpName %uv "uv"
-               OpName %i "i"
-               OpName %x_37 "x_37"
-               OpName %x_37_phi "x_37_phi"
-               OpName %x_9_phi "x_9_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %15 = OpConstantNull %bool
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %19 = OpConstantNull %v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Function_float = OpTypePointer Function %float
- %float_0_25 = OpConstant %float 0.25
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %48 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %false = OpConstantFalse %bool
-   %main_out = OpTypeStruct %v4float
-         %55 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-         %c1 = OpVariable %_ptr_Function_bool Function %15
-         %uv = OpVariable %_ptr_Function_v2float Function %19
-          %i = OpVariable %_ptr_Function_int Function %23
-       %x_37 = OpVariable %_ptr_Function_bool Function %15
-   %x_37_phi = OpVariable %_ptr_Function_bool Function %15
-    %x_9_phi = OpVariable %_ptr_Function_int Function %23
-         %30 = OpAccessChain %_ptr_Function_float %uv %uint_1
-         %31 = OpLoad %float %30
-         %33 = OpFOrdLessThan %bool %31 %float_0_25
-               OpStore %c1 %33
-               OpStore %i %int_0
-               OpStore %x_37_phi %33
-               OpStore %x_9_phi %int_0
-               OpBranch %35
-         %35 = OpLabel
-               OpLoopMerge %36 %37 None
-               OpBranch %38
-         %38 = OpLabel
-         %39 = OpLoad %bool %x_37_phi
-               OpStore %x_37 %39
-         %40 = OpLoad %int %x_9_phi
-         %42 = OpSLessThan %bool %40 %int_1
-               OpSelectionMerge %43 None
-               OpBranchConditional %42 %44 %45
-         %44 = OpLabel
-               OpBranch %43
-         %45 = OpLabel
-               OpBranch %36
-         %43 = OpLabel
-               OpStore %x_GLF_color %48
-               OpReturn
-         %37 = OpLabel
-         %49 = OpLoad %int %i
-         %50 = OpIAdd %int %49 %int_1
-               OpStore %i %50
-               OpStore %x_37_phi %false
-               OpStore %x_9_phi %int_0
-               OpBranch %35
-         %36 = OpLabel
-         %52 = OpLoad %bool %x_37
-               OpSelectionMerge %53 None
-               OpBranchConditional %52 %54 %53
-         %54 = OpLabel
-               OpReturn
-         %53 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %55
-         %58 = OpLabel
-         %59 = OpFunctionCall %void %main_1
-         %60 = OpLoad %v4float %x_GLF_color
-         %61 = OpCompositeConstruct %main_out %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %63 = OpLabel
-         %64 = OpFunctionCall %main_out %main_inner
-         %65 = OpCompositeExtract %v4float %64 0
-               OpStore %x_GLF_color_1_1 %65
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.wgsl
deleted file mode 100644
index bd4cfad..0000000
--- a/test/vk-gl-cts/graphicsfuzz/uv-value-comparison-as-boolean/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,48 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var c1 : bool;
-  var uv : vec2<f32>;
-  var i : i32;
-  var x_37 : bool;
-  var x_37_phi : bool;
-  var x_9_phi : i32;
-  let x_34 : f32 = uv.y;
-  let x_35 : bool = (x_34 < 0.25);
-  c1 = x_35;
-  i = 0;
-  x_37_phi = x_35;
-  x_9_phi = 0;
-  loop {
-    x_37 = x_37_phi;
-    let x_9 : i32 = x_9_phi;
-    if ((x_9 < 1)) {
-    } else {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    return;
-
-    continuing {
-      let x_7 : i32 = i;
-      i = (x_7 + 1);
-      x_37_phi = false;
-      x_9_phi = 0;
-    }
-  }
-  if (x_37) {
-    return;
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1488543..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,109 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  bool alwaysFalse = false;
-  float4 value = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float2 a = float2(0.0f, 0.0f);
-  int i = 0;
-  bool x_121 = false;
-  bool x_122_phi = false;
-  const float x_71 = gl_FragCoord.x;
-  alwaysFalse = (x_71 < -1.0f);
-  if (alwaysFalse) {
-    const float2 x_76 = a;
-    const float4 x_77 = value;
-    value = float4(x_76.x, x_76.y, x_77.z, x_77.w);
-  }
-  if (!(alwaysFalse)) {
-    const float2 x_84 = asfloat(x_10[0].xy);
-    const float4 x_85 = value;
-    value = float4(x_84.x, x_84.y, x_85.z, x_85.w);
-  }
-  const float4 x_87 = gl_FragCoord;
-  const float4 x_89 = value;
-  const float4 x_93 = value;
-  const float2 x_95 = (((float2(x_87.x, x_87.y) * float2(x_89.x, x_89.y)) * float2(2.0f, 2.0f)) + float2(x_93.x, x_93.y));
-  const float4 x_96 = value;
-  value = float4(x_96.x, x_96.y, x_95.x, x_95.y);
-  i = 0;
-  while (true) {
-    const int x_102 = i;
-    const float x_104 = asfloat(x_10[0].y);
-    if ((x_102 < (int(x_104) + 1))) {
-    } else {
-      break;
-    }
-    value.x = float(i);
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_115 = value.x;
-  const bool x_116 = (x_115 == 1.0f);
-  x_122_phi = x_116;
-  if (x_116) {
-    const float x_120 = value.y;
-    x_121 = (x_120 == 1.0f);
-    x_122_phi = x_121;
-  }
-  if (x_122_phi) {
-    return 1.0f;
-  } else {
-    return 0.0f;
-  }
-  return 0.0f;
-}
-
-void main_1() {
-  int count = 0;
-  int i_1 = 0;
-  count = 0;
-  i_1 = 0;
-  while (true) {
-    const int x_51 = i_1;
-    const float x_53 = asfloat(x_10[0].y);
-    if ((x_51 < (int(x_53) + 1))) {
-    } else {
-      break;
-    }
-    const float x_58 = func_();
-    count = (count + int(x_58));
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  if ((count == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.msl
deleted file mode 100644
index 35aaeb3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(constant buf0& x_10, thread float4* const tint_symbol_3) {
-  bool alwaysFalse = false;
-  float4 value = 0.0f;
-  float2 a = 0.0f;
-  int i = 0;
-  bool x_121 = false;
-  bool x_122_phi = false;
-  float const x_71 = (*(tint_symbol_3)).x;
-  alwaysFalse = (x_71 < -1.0f);
-  bool const x_73 = alwaysFalse;
-  if (x_73) {
-    float2 const x_76 = a;
-    float4 const x_77 = value;
-    value = float4(x_76.x, x_76.y, x_77.z, x_77.w);
-  }
-  bool const x_79 = alwaysFalse;
-  if (!(x_79)) {
-    float2 const x_84 = x_10.injectionSwitch;
-    float4 const x_85 = value;
-    value = float4(x_84.x, x_84.y, x_85.z, x_85.w);
-  }
-  float4 const x_87 = *(tint_symbol_3);
-  float4 const x_89 = value;
-  float4 const x_93 = value;
-  float2 const x_95 = (((float2(x_87.x, x_87.y) * float2(x_89.x, x_89.y)) * float2(2.0f, 2.0f)) + float2(x_93.x, x_93.y));
-  float4 const x_96 = value;
-  value = float4(x_96.x, x_96.y, x_95.x, x_95.y);
-  i = 0;
-  while (true) {
-    int const x_102 = i;
-    float const x_104 = x_10.injectionSwitch.y;
-    if ((x_102 < as_type<int>((as_type<uint>(int(x_104)) + as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_109 = i;
-    value.x = float(x_109);
-    {
-      int const x_112 = i;
-      i = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-    }
-  }
-  float const x_115 = value.x;
-  bool const x_116 = (x_115 == 1.0f);
-  x_122_phi = x_116;
-  if (x_116) {
-    float const x_120 = value.y;
-    x_121 = (x_120 == 1.0f);
-    x_122_phi = x_121;
-  }
-  bool const x_122 = x_122_phi;
-  if (x_122) {
-    return 1.0f;
-  } else {
-    return 0.0f;
-  }
-  return 0.0f;
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int count = 0;
-  int i_1 = 0;
-  count = 0;
-  i_1 = 0;
-  while (true) {
-    int const x_51 = i_1;
-    float const x_53 = x_10.injectionSwitch.y;
-    if ((x_51 < as_type<int>((as_type<uint>(int(x_53)) + as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    float const x_58 = func_(x_10, tint_symbol_4);
-    int const x_60 = count;
-    count = as_type<int>((as_type<uint>(x_60) + as_type<uint>(int(x_58))));
-    {
-      int const x_62 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  int const x_64 = count;
-  if ((x_64 == 2)) {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_10, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 84224dc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,269 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 170
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %alwaysFalse "alwaysFalse"
-               OpName %value "value"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %x_121 "x_121"
-               OpName %x_122_phi "x_122_phi"
-               OpName %main_1 "main_1"
-               OpName %count "count"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %15 = OpTypeFunction %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %21 = OpConstantNull %bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n1 = OpConstant %float -1
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-         %74 = OpConstantComposite %v2float %float_2 %float_2
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-       %void = OpTypeVoid
-        %124 = OpTypeFunction %void
-      %int_2 = OpConstant %int 2
-        %155 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %157 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %float None %15
-         %17 = OpLabel
-%alwaysFalse = OpVariable %_ptr_Function_bool Function %21
-      %value = OpVariable %_ptr_Function_v4float Function %7
-          %a = OpVariable %_ptr_Function_v2float Function %26
-          %i = OpVariable %_ptr_Function_int Function %30
-      %x_121 = OpVariable %_ptr_Function_bool Function %21
-  %x_122_phi = OpVariable %_ptr_Function_bool Function %21
-         %36 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %37 = OpLoad %float %36
-         %39 = OpFOrdLessThan %bool %37 %float_n1
-               OpStore %alwaysFalse %39
-         %40 = OpLoad %bool %alwaysFalse
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-         %43 = OpLoad %v2float %a
-         %44 = OpLoad %v4float %value
-         %45 = OpCompositeExtract %float %43 0
-         %46 = OpCompositeExtract %float %43 1
-         %47 = OpCompositeExtract %float %44 2
-         %48 = OpCompositeExtract %float %44 3
-         %49 = OpCompositeConstruct %v4float %45 %46 %47 %48
-               OpStore %value %49
-               OpBranch %41
-         %41 = OpLabel
-         %50 = OpLoad %bool %alwaysFalse
-         %51 = OpLogicalNot %bool %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_v2float %x_10 %uint_0
-         %56 = OpLoad %v2float %55
-         %57 = OpLoad %v4float %value
-         %58 = OpCompositeExtract %float %56 0
-         %59 = OpCompositeExtract %float %56 1
-         %60 = OpCompositeExtract %float %57 2
-         %61 = OpCompositeExtract %float %57 3
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %value %62
-               OpBranch %52
-         %52 = OpLabel
-         %63 = OpLoad %v4float %gl_FragCoord
-         %64 = OpLoad %v4float %value
-         %65 = OpLoad %v4float %value
-         %66 = OpCompositeExtract %float %63 0
-         %67 = OpCompositeExtract %float %63 1
-         %68 = OpCompositeConstruct %v2float %66 %67
-         %69 = OpCompositeExtract %float %64 0
-         %70 = OpCompositeExtract %float %64 1
-         %71 = OpCompositeConstruct %v2float %69 %70
-         %72 = OpFMul %v2float %68 %71
-         %75 = OpFMul %v2float %72 %74
-         %76 = OpCompositeExtract %float %65 0
-         %77 = OpCompositeExtract %float %65 1
-         %78 = OpCompositeConstruct %v2float %76 %77
-         %79 = OpFAdd %v2float %75 %78
-         %80 = OpLoad %v4float %value
-         %81 = OpCompositeExtract %float %80 0
-         %82 = OpCompositeExtract %float %80 1
-         %83 = OpCompositeExtract %float %79 0
-         %84 = OpCompositeExtract %float %79 1
-         %85 = OpCompositeConstruct %v4float %81 %82 %83 %84
-               OpStore %value %85
-               OpStore %i %int_0
-               OpBranch %87
-         %87 = OpLabel
-               OpLoopMerge %88 %89 None
-               OpBranch %90
-         %90 = OpLabel
-         %91 = OpLoad %int %i
-         %94 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-         %95 = OpLoad %float %94
-         %96 = OpConvertFToS %int %95
-         %98 = OpIAdd %int %96 %int_1
-         %99 = OpSLessThan %bool %91 %98
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %102
-        %101 = OpLabel
-               OpBranch %100
-        %102 = OpLabel
-               OpBranch %88
-        %100 = OpLabel
-        %103 = OpLoad %int %i
-        %105 = OpAccessChain %_ptr_Function_float %value %uint_0
-        %106 = OpConvertSToF %float %103
-               OpStore %105 %106
-               OpBranch %89
-         %89 = OpLabel
-        %107 = OpLoad %int %i
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %i %108
-               OpBranch %87
-         %88 = OpLabel
-        %109 = OpAccessChain %_ptr_Function_float %value %uint_0
-        %110 = OpLoad %float %109
-        %112 = OpFOrdEqual %bool %110 %float_1
-               OpStore %x_122_phi %112
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %113
-        %114 = OpLabel
-        %115 = OpAccessChain %_ptr_Function_float %value %uint_1
-        %116 = OpLoad %float %115
-        %117 = OpFOrdEqual %bool %116 %float_1
-               OpStore %x_121 %117
-        %118 = OpLoad %bool %x_121
-               OpStore %x_122_phi %118
-               OpBranch %113
-        %113 = OpLabel
-        %119 = OpLoad %bool %x_122_phi
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-               OpReturnValue %float_1
-        %122 = OpLabel
-               OpReturnValue %float_0
-        %120 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %124
-        %127 = OpLabel
-      %count = OpVariable %_ptr_Function_int Function %30
-        %i_1 = OpVariable %_ptr_Function_int Function %30
-               OpStore %count %int_0
-               OpStore %i_1 %int_0
-               OpBranch %130
-        %130 = OpLabel
-               OpLoopMerge %131 %132 None
-               OpBranch %133
-        %133 = OpLabel
-        %134 = OpLoad %int %i_1
-        %135 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-        %136 = OpLoad %float %135
-        %137 = OpConvertFToS %int %136
-        %138 = OpIAdd %int %137 %int_1
-        %139 = OpSLessThan %bool %134 %138
-               OpSelectionMerge %140 None
-               OpBranchConditional %139 %141 %142
-        %141 = OpLabel
-               OpBranch %140
-        %142 = OpLabel
-               OpBranch %131
-        %140 = OpLabel
-        %143 = OpFunctionCall %float %func_
-        %144 = OpLoad %int %count
-        %145 = OpConvertFToS %int %143
-        %146 = OpIAdd %int %144 %145
-               OpStore %count %146
-               OpBranch %132
-        %132 = OpLabel
-        %147 = OpLoad %int %i_1
-        %148 = OpIAdd %int %147 %int_1
-               OpStore %i_1 %148
-               OpBranch %130
-        %131 = OpLabel
-        %149 = OpLoad %int %count
-        %151 = OpIEqual %bool %149 %int_2
-               OpSelectionMerge %152 None
-               OpBranchConditional %151 %153 %154
-        %153 = OpLabel
-               OpStore %x_GLF_color %155
-               OpBranch %152
-        %154 = OpLabel
-               OpStore %x_GLF_color %156
-               OpBranch %152
-        %152 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %157
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %161 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %162 = OpFunctionCall %void %main_1
-        %163 = OpLoad %v4float %x_GLF_color
-        %164 = OpCompositeConstruct %main_out %163
-               OpReturnValue %164
-               OpFunctionEnd
-       %main = OpFunction %void None %124
-        %166 = OpLabel
-        %168 = OpLoad %v4float %gl_FragCoord_param_1
-        %167 = OpFunctionCall %main_out %main_inner %168
-        %169 = OpCompositeExtract %v4float %167 0
-               OpStore %x_GLF_color_1_1 %169
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1036f48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,112 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var alwaysFalse : bool;
-  var value : vec4<f32>;
-  var a : vec2<f32>;
-  var i : i32;
-  var x_121 : bool;
-  var x_122_phi : bool;
-  let x_71 : f32 = gl_FragCoord.x;
-  alwaysFalse = (x_71 < -1.0);
-  let x_73 : bool = alwaysFalse;
-  if (x_73) {
-    let x_76 : vec2<f32> = a;
-    let x_77 : vec4<f32> = value;
-    value = vec4<f32>(x_76.x, x_76.y, x_77.z, x_77.w);
-  }
-  let x_79 : bool = alwaysFalse;
-  if (!(x_79)) {
-    let x_84 : vec2<f32> = x_10.injectionSwitch;
-    let x_85 : vec4<f32> = value;
-    value = vec4<f32>(x_84.x, x_84.y, x_85.z, x_85.w);
-  }
-  let x_87 : vec4<f32> = gl_FragCoord;
-  let x_89 : vec4<f32> = value;
-  let x_93 : vec4<f32> = value;
-  let x_95 : vec2<f32> = (((vec2<f32>(x_87.x, x_87.y) * vec2<f32>(x_89.x, x_89.y)) * vec2<f32>(2.0, 2.0)) + vec2<f32>(x_93.x, x_93.y));
-  let x_96 : vec4<f32> = value;
-  value = vec4<f32>(x_96.x, x_96.y, x_95.x, x_95.y);
-  i = 0;
-  loop {
-    let x_102 : i32 = i;
-    let x_104 : f32 = x_10.injectionSwitch.y;
-    if ((x_102 < (i32(x_104) + 1))) {
-    } else {
-      break;
-    }
-    let x_109 : i32 = i;
-    value.x = f32(x_109);
-
-    continuing {
-      let x_112 : i32 = i;
-      i = (x_112 + 1);
-    }
-  }
-  let x_115 : f32 = value.x;
-  let x_116 : bool = (x_115 == 1.0);
-  x_122_phi = x_116;
-  if (x_116) {
-    let x_120 : f32 = value.y;
-    x_121 = (x_120 == 1.0);
-    x_122_phi = x_121;
-  }
-  let x_122 : bool = x_122_phi;
-  if (x_122) {
-    return 1.0;
-  } else {
-    return 0.0;
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var count : i32;
-  var i_1 : i32;
-  count = 0;
-  i_1 = 0;
-  loop {
-    let x_51 : i32 = i_1;
-    let x_53 : f32 = x_10.injectionSwitch.y;
-    if ((x_51 < (i32(x_53) + 1))) {
-    } else {
-      break;
-    }
-    let x_58 : f32 = func_();
-    let x_60 : i32 = count;
-    count = (x_60 + i32(x_58));
-
-    continuing {
-      let x_62 : i32 = i_1;
-      i_1 = (x_62 + 1);
-    }
-  }
-  let x_64 : i32 = count;
-  if ((x_64 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1488543..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,109 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_10 : register(b0, space0) {
-  uint4 x_10[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-float func_() {
-  bool alwaysFalse = false;
-  float4 value = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float2 a = float2(0.0f, 0.0f);
-  int i = 0;
-  bool x_121 = false;
-  bool x_122_phi = false;
-  const float x_71 = gl_FragCoord.x;
-  alwaysFalse = (x_71 < -1.0f);
-  if (alwaysFalse) {
-    const float2 x_76 = a;
-    const float4 x_77 = value;
-    value = float4(x_76.x, x_76.y, x_77.z, x_77.w);
-  }
-  if (!(alwaysFalse)) {
-    const float2 x_84 = asfloat(x_10[0].xy);
-    const float4 x_85 = value;
-    value = float4(x_84.x, x_84.y, x_85.z, x_85.w);
-  }
-  const float4 x_87 = gl_FragCoord;
-  const float4 x_89 = value;
-  const float4 x_93 = value;
-  const float2 x_95 = (((float2(x_87.x, x_87.y) * float2(x_89.x, x_89.y)) * float2(2.0f, 2.0f)) + float2(x_93.x, x_93.y));
-  const float4 x_96 = value;
-  value = float4(x_96.x, x_96.y, x_95.x, x_95.y);
-  i = 0;
-  while (true) {
-    const int x_102 = i;
-    const float x_104 = asfloat(x_10[0].y);
-    if ((x_102 < (int(x_104) + 1))) {
-    } else {
-      break;
-    }
-    value.x = float(i);
-    {
-      i = (i + 1);
-    }
-  }
-  const float x_115 = value.x;
-  const bool x_116 = (x_115 == 1.0f);
-  x_122_phi = x_116;
-  if (x_116) {
-    const float x_120 = value.y;
-    x_121 = (x_120 == 1.0f);
-    x_122_phi = x_121;
-  }
-  if (x_122_phi) {
-    return 1.0f;
-  } else {
-    return 0.0f;
-  }
-  return 0.0f;
-}
-
-void main_1() {
-  int count = 0;
-  int i_1 = 0;
-  count = 0;
-  i_1 = 0;
-  while (true) {
-    const int x_51 = i_1;
-    const float x_53 = asfloat(x_10[0].y);
-    if ((x_51 < (int(x_53) + 1))) {
-    } else {
-      break;
-    }
-    const float x_58 = func_();
-    count = (count + int(x_58));
-    {
-      i_1 = (i_1 + 1);
-    }
-  }
-  if ((count == 2)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_5 = {x_GLF_color};
-  return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.msl
deleted file mode 100644
index 35aaeb3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,117 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-float func_(constant buf0& x_10, thread float4* const tint_symbol_3) {
-  bool alwaysFalse = false;
-  float4 value = 0.0f;
-  float2 a = 0.0f;
-  int i = 0;
-  bool x_121 = false;
-  bool x_122_phi = false;
-  float const x_71 = (*(tint_symbol_3)).x;
-  alwaysFalse = (x_71 < -1.0f);
-  bool const x_73 = alwaysFalse;
-  if (x_73) {
-    float2 const x_76 = a;
-    float4 const x_77 = value;
-    value = float4(x_76.x, x_76.y, x_77.z, x_77.w);
-  }
-  bool const x_79 = alwaysFalse;
-  if (!(x_79)) {
-    float2 const x_84 = x_10.injectionSwitch;
-    float4 const x_85 = value;
-    value = float4(x_84.x, x_84.y, x_85.z, x_85.w);
-  }
-  float4 const x_87 = *(tint_symbol_3);
-  float4 const x_89 = value;
-  float4 const x_93 = value;
-  float2 const x_95 = (((float2(x_87.x, x_87.y) * float2(x_89.x, x_89.y)) * float2(2.0f, 2.0f)) + float2(x_93.x, x_93.y));
-  float4 const x_96 = value;
-  value = float4(x_96.x, x_96.y, x_95.x, x_95.y);
-  i = 0;
-  while (true) {
-    int const x_102 = i;
-    float const x_104 = x_10.injectionSwitch.y;
-    if ((x_102 < as_type<int>((as_type<uint>(int(x_104)) + as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    int const x_109 = i;
-    value.x = float(x_109);
-    {
-      int const x_112 = i;
-      i = as_type<int>((as_type<uint>(x_112) + as_type<uint>(1)));
-    }
-  }
-  float const x_115 = value.x;
-  bool const x_116 = (x_115 == 1.0f);
-  x_122_phi = x_116;
-  if (x_116) {
-    float const x_120 = value.y;
-    x_121 = (x_120 == 1.0f);
-    x_122_phi = x_121;
-  }
-  bool const x_122 = x_122_phi;
-  if (x_122) {
-    return 1.0f;
-  } else {
-    return 0.0f;
-  }
-  return 0.0f;
-}
-
-void main_1(constant buf0& x_10, thread float4* const tint_symbol_4, thread float4* const tint_symbol_5) {
-  int count = 0;
-  int i_1 = 0;
-  count = 0;
-  i_1 = 0;
-  while (true) {
-    int const x_51 = i_1;
-    float const x_53 = x_10.injectionSwitch.y;
-    if ((x_51 < as_type<int>((as_type<uint>(int(x_53)) + as_type<uint>(1))))) {
-    } else {
-      break;
-    }
-    float const x_58 = func_(x_10, tint_symbol_4);
-    int const x_60 = count;
-    count = as_type<int>((as_type<uint>(x_60) + as_type<uint>(int(x_58))));
-    {
-      int const x_62 = i_1;
-      i_1 = as_type<int>((as_type<uint>(x_62) + as_type<uint>(1)));
-    }
-  }
-  int const x_64 = count;
-  if ((x_64 == 2)) {
-    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_10, float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(x_10, tint_symbol_6, tint_symbol_7);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_7)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_10 [[buffer(0)]]) {
-  thread float4 tint_symbol_8 = 0.0f;
-  thread float4 tint_symbol_9 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_10, gl_FragCoord_param, &(tint_symbol_8), &(tint_symbol_9));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 84224dc..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,269 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 170
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_10 "x_10"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %alwaysFalse "alwaysFalse"
-               OpName %value "value"
-               OpName %a "a"
-               OpName %i "i"
-               OpName %x_121 "x_121"
-               OpName %x_122_phi "x_122_phi"
-               OpName %main_1 "main_1"
-               OpName %count "count"
-               OpName %i_1 "i_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_10 NonWritable
-               OpDecorate %x_10 DescriptorSet 0
-               OpDecorate %x_10 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_10 = OpVariable %_ptr_Uniform_buf0 Uniform
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-         %15 = OpTypeFunction %float
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %21 = OpConstantNull %bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %26 = OpConstantNull %v2float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %30 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-   %float_n1 = OpConstant %float -1
-%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
-    %float_2 = OpConstant %float 2
-         %74 = OpConstantComposite %v2float %float_2 %float_2
-      %int_0 = OpConstant %int 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_1 = OpConstant %int 1
-%_ptr_Function_float = OpTypePointer Function %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-       %void = OpTypeVoid
-        %124 = OpTypeFunction %void
-      %int_2 = OpConstant %int 2
-        %155 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-        %156 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-        %157 = OpTypeFunction %main_out %v4float
-      %func_ = OpFunction %float None %15
-         %17 = OpLabel
-%alwaysFalse = OpVariable %_ptr_Function_bool Function %21
-      %value = OpVariable %_ptr_Function_v4float Function %7
-          %a = OpVariable %_ptr_Function_v2float Function %26
-          %i = OpVariable %_ptr_Function_int Function %30
-      %x_121 = OpVariable %_ptr_Function_bool Function %21
-  %x_122_phi = OpVariable %_ptr_Function_bool Function %21
-         %36 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %37 = OpLoad %float %36
-         %39 = OpFOrdLessThan %bool %37 %float_n1
-               OpStore %alwaysFalse %39
-         %40 = OpLoad %bool %alwaysFalse
-               OpSelectionMerge %41 None
-               OpBranchConditional %40 %42 %41
-         %42 = OpLabel
-         %43 = OpLoad %v2float %a
-         %44 = OpLoad %v4float %value
-         %45 = OpCompositeExtract %float %43 0
-         %46 = OpCompositeExtract %float %43 1
-         %47 = OpCompositeExtract %float %44 2
-         %48 = OpCompositeExtract %float %44 3
-         %49 = OpCompositeConstruct %v4float %45 %46 %47 %48
-               OpStore %value %49
-               OpBranch %41
-         %41 = OpLabel
-         %50 = OpLoad %bool %alwaysFalse
-         %51 = OpLogicalNot %bool %50
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %52
-         %53 = OpLabel
-         %55 = OpAccessChain %_ptr_Uniform_v2float %x_10 %uint_0
-         %56 = OpLoad %v2float %55
-         %57 = OpLoad %v4float %value
-         %58 = OpCompositeExtract %float %56 0
-         %59 = OpCompositeExtract %float %56 1
-         %60 = OpCompositeExtract %float %57 2
-         %61 = OpCompositeExtract %float %57 3
-         %62 = OpCompositeConstruct %v4float %58 %59 %60 %61
-               OpStore %value %62
-               OpBranch %52
-         %52 = OpLabel
-         %63 = OpLoad %v4float %gl_FragCoord
-         %64 = OpLoad %v4float %value
-         %65 = OpLoad %v4float %value
-         %66 = OpCompositeExtract %float %63 0
-         %67 = OpCompositeExtract %float %63 1
-         %68 = OpCompositeConstruct %v2float %66 %67
-         %69 = OpCompositeExtract %float %64 0
-         %70 = OpCompositeExtract %float %64 1
-         %71 = OpCompositeConstruct %v2float %69 %70
-         %72 = OpFMul %v2float %68 %71
-         %75 = OpFMul %v2float %72 %74
-         %76 = OpCompositeExtract %float %65 0
-         %77 = OpCompositeExtract %float %65 1
-         %78 = OpCompositeConstruct %v2float %76 %77
-         %79 = OpFAdd %v2float %75 %78
-         %80 = OpLoad %v4float %value
-         %81 = OpCompositeExtract %float %80 0
-         %82 = OpCompositeExtract %float %80 1
-         %83 = OpCompositeExtract %float %79 0
-         %84 = OpCompositeExtract %float %79 1
-         %85 = OpCompositeConstruct %v4float %81 %82 %83 %84
-               OpStore %value %85
-               OpStore %i %int_0
-               OpBranch %87
-         %87 = OpLabel
-               OpLoopMerge %88 %89 None
-               OpBranch %90
-         %90 = OpLabel
-         %91 = OpLoad %int %i
-         %94 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-         %95 = OpLoad %float %94
-         %96 = OpConvertFToS %int %95
-         %98 = OpIAdd %int %96 %int_1
-         %99 = OpSLessThan %bool %91 %98
-               OpSelectionMerge %100 None
-               OpBranchConditional %99 %101 %102
-        %101 = OpLabel
-               OpBranch %100
-        %102 = OpLabel
-               OpBranch %88
-        %100 = OpLabel
-        %103 = OpLoad %int %i
-        %105 = OpAccessChain %_ptr_Function_float %value %uint_0
-        %106 = OpConvertSToF %float %103
-               OpStore %105 %106
-               OpBranch %89
-         %89 = OpLabel
-        %107 = OpLoad %int %i
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %i %108
-               OpBranch %87
-         %88 = OpLabel
-        %109 = OpAccessChain %_ptr_Function_float %value %uint_0
-        %110 = OpLoad %float %109
-        %112 = OpFOrdEqual %bool %110 %float_1
-               OpStore %x_122_phi %112
-               OpSelectionMerge %113 None
-               OpBranchConditional %112 %114 %113
-        %114 = OpLabel
-        %115 = OpAccessChain %_ptr_Function_float %value %uint_1
-        %116 = OpLoad %float %115
-        %117 = OpFOrdEqual %bool %116 %float_1
-               OpStore %x_121 %117
-        %118 = OpLoad %bool %x_121
-               OpStore %x_122_phi %118
-               OpBranch %113
-        %113 = OpLabel
-        %119 = OpLoad %bool %x_122_phi
-               OpSelectionMerge %120 None
-               OpBranchConditional %119 %121 %122
-        %121 = OpLabel
-               OpReturnValue %float_1
-        %122 = OpLabel
-               OpReturnValue %float_0
-        %120 = OpLabel
-               OpReturnValue %float_0
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %124
-        %127 = OpLabel
-      %count = OpVariable %_ptr_Function_int Function %30
-        %i_1 = OpVariable %_ptr_Function_int Function %30
-               OpStore %count %int_0
-               OpStore %i_1 %int_0
-               OpBranch %130
-        %130 = OpLabel
-               OpLoopMerge %131 %132 None
-               OpBranch %133
-        %133 = OpLabel
-        %134 = OpLoad %int %i_1
-        %135 = OpAccessChain %_ptr_Uniform_float %x_10 %uint_0 %uint_1
-        %136 = OpLoad %float %135
-        %137 = OpConvertFToS %int %136
-        %138 = OpIAdd %int %137 %int_1
-        %139 = OpSLessThan %bool %134 %138
-               OpSelectionMerge %140 None
-               OpBranchConditional %139 %141 %142
-        %141 = OpLabel
-               OpBranch %140
-        %142 = OpLabel
-               OpBranch %131
-        %140 = OpLabel
-        %143 = OpFunctionCall %float %func_
-        %144 = OpLoad %int %count
-        %145 = OpConvertFToS %int %143
-        %146 = OpIAdd %int %144 %145
-               OpStore %count %146
-               OpBranch %132
-        %132 = OpLabel
-        %147 = OpLoad %int %i_1
-        %148 = OpIAdd %int %147 %int_1
-               OpStore %i_1 %148
-               OpBranch %130
-        %131 = OpLabel
-        %149 = OpLoad %int %count
-        %151 = OpIEqual %bool %149 %int_2
-               OpSelectionMerge %152 None
-               OpBranchConditional %151 %153 %154
-        %153 = OpLabel
-               OpStore %x_GLF_color %155
-               OpBranch %152
-        %154 = OpLabel
-               OpStore %x_GLF_color %156
-               OpBranch %152
-        %152 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %157
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %161 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %162 = OpFunctionCall %void %main_1
-        %163 = OpLoad %v4float %x_GLF_color
-        %164 = OpCompositeConstruct %main_out %163
-               OpReturnValue %164
-               OpFunctionEnd
-       %main = OpFunction %void None %124
-        %166 = OpLabel
-        %168 = OpLoad %v4float %gl_FragCoord_param_1
-        %167 = OpFunctionCall %main_out %main_inner %168
-        %169 = OpCompositeExtract %v4float %167 0
-               OpStore %x_GLF_color_1_1 %169
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1036f48..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vector-values-multiplied-by-fragcoord/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,112 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> gl_FragCoord : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_10 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> f32 {
-  var alwaysFalse : bool;
-  var value : vec4<f32>;
-  var a : vec2<f32>;
-  var i : i32;
-  var x_121 : bool;
-  var x_122_phi : bool;
-  let x_71 : f32 = gl_FragCoord.x;
-  alwaysFalse = (x_71 < -1.0);
-  let x_73 : bool = alwaysFalse;
-  if (x_73) {
-    let x_76 : vec2<f32> = a;
-    let x_77 : vec4<f32> = value;
-    value = vec4<f32>(x_76.x, x_76.y, x_77.z, x_77.w);
-  }
-  let x_79 : bool = alwaysFalse;
-  if (!(x_79)) {
-    let x_84 : vec2<f32> = x_10.injectionSwitch;
-    let x_85 : vec4<f32> = value;
-    value = vec4<f32>(x_84.x, x_84.y, x_85.z, x_85.w);
-  }
-  let x_87 : vec4<f32> = gl_FragCoord;
-  let x_89 : vec4<f32> = value;
-  let x_93 : vec4<f32> = value;
-  let x_95 : vec2<f32> = (((vec2<f32>(x_87.x, x_87.y) * vec2<f32>(x_89.x, x_89.y)) * vec2<f32>(2.0, 2.0)) + vec2<f32>(x_93.x, x_93.y));
-  let x_96 : vec4<f32> = value;
-  value = vec4<f32>(x_96.x, x_96.y, x_95.x, x_95.y);
-  i = 0;
-  loop {
-    let x_102 : i32 = i;
-    let x_104 : f32 = x_10.injectionSwitch.y;
-    if ((x_102 < (i32(x_104) + 1))) {
-    } else {
-      break;
-    }
-    let x_109 : i32 = i;
-    value.x = f32(x_109);
-
-    continuing {
-      let x_112 : i32 = i;
-      i = (x_112 + 1);
-    }
-  }
-  let x_115 : f32 = value.x;
-  let x_116 : bool = (x_115 == 1.0);
-  x_122_phi = x_116;
-  if (x_116) {
-    let x_120 : f32 = value.y;
-    x_121 = (x_120 == 1.0);
-    x_122_phi = x_121;
-  }
-  let x_122 : bool = x_122_phi;
-  if (x_122) {
-    return 1.0;
-  } else {
-    return 0.0;
-  }
-  return 0.0;
-}
-
-fn main_1() {
-  var count : i32;
-  var i_1 : i32;
-  count = 0;
-  i_1 = 0;
-  loop {
-    let x_51 : i32 = i_1;
-    let x_53 : f32 = x_10.injectionSwitch.y;
-    if ((x_51 < (i32(x_53) + 1))) {
-    } else {
-      break;
-    }
-    let x_58 : f32 = func_();
-    let x_60 : i32 = count;
-    count = (x_60 + i32(x_58));
-
-    continuing {
-      let x_62 : i32 = i_1;
-      i_1 = (x_62 + 1);
-    }
-  }
-  let x_64 : i32 = count;
-  if ((x_64 == 2)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.hlsl
deleted file mode 100644
index 8fef5fd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  float2 coord = float2(0.0f, 0.0f);
-  float tmp3 = 0.0f;
-  float tmp2[1] = (float[1])0;
-  float4 tmp = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float x_48 = 0.0f;
-  coord = float2(1.0f, 1.0f);
-  const float x_41 = coord.y;
-  if ((int(x_41) < 180)) {
-    x_48 = tmp2[0];
-    tmp3 = x_48;
-  } else {
-    discard;
-  }
-  tmp = float4(x_48, x_48, x_48, x_48);
-  return 1;
-}
-
-void main_1() {
-  const int x_9 = func_();
-  if ((x_9 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.msl
deleted file mode 100644
index 9b783f2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_() {
-  float2 coord = 0.0f;
-  float tmp3 = 0.0f;
-  tint_array_wrapper tmp2 = {};
-  float4 tmp = 0.0f;
-  float x_48 = 0.0f;
-  coord = float2(1.0f, 1.0f);
-  float const x_41 = coord.y;
-  if ((int(x_41) < 180)) {
-    x_48 = tmp2.arr[0];
-    tmp3 = x_48;
-  } else {
-    discard_fragment();
-  }
-  tmp = float4(x_48, x_48, x_48, x_48);
-  return 1;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  int const x_9 = func_();
-  if ((x_9 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.spvasm
deleted file mode 100644
index 9199225..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,119 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %coord "coord"
-               OpName %tmp3 "tmp3"
-               OpName %tmp2 "tmp2"
-               OpName %tmp "tmp"
-               OpName %x_48 "x_48"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-          %8 = OpTypeFunction %int
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-%_ptr_Function__arr_float_uint_1 = OpTypePointer Function %_arr_float_uint_1
-         %24 = OpConstantNull %_arr_float_uint_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_1 = OpConstant %float 1
-         %29 = OpConstantComposite %v2float %float_1 %float_1
-    %int_180 = OpConstant %int 180
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %49 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %59 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %60 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %61 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %8
-         %11 = OpLabel
-      %coord = OpVariable %_ptr_Function_v2float Function %15
-       %tmp3 = OpVariable %_ptr_Function_float Function %18
-       %tmp2 = OpVariable %_ptr_Function__arr_float_uint_1 Function %24
-        %tmp = OpVariable %_ptr_Function_v4float Function %5
-       %x_48 = OpVariable %_ptr_Function_float Function %18
-               OpStore %coord %29
-         %30 = OpAccessChain %_ptr_Function_float %coord %uint_1
-         %31 = OpLoad %float %30
-         %32 = OpConvertFToS %int %31
-         %34 = OpSLessThan %bool %32 %int_180
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-         %40 = OpAccessChain %_ptr_Function_float %tmp2 %int_0
-         %41 = OpLoad %float %40
-               OpStore %x_48 %41
-         %42 = OpLoad %float %x_48
-               OpStore %tmp3 %42
-               OpBranch %36
-         %38 = OpLabel
-               OpKill
-         %36 = OpLabel
-         %43 = OpLoad %float %x_48
-         %44 = OpLoad %float %x_48
-         %45 = OpLoad %float %x_48
-         %46 = OpLoad %float %x_48
-         %47 = OpCompositeConstruct %v4float %43 %44 %45 %46
-               OpStore %tmp %47
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %int %func_
-         %54 = OpIEqual %bool %53 %int_1
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpStore %x_GLF_color %59
-               OpBranch %55
-         %57 = OpLabel
-               OpStore %x_GLF_color %60
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %61
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-         %66 = OpLoad %v4float %x_GLF_color
-         %67 = OpCompositeConstruct %main_out %66
-               OpReturnValue %67
-               OpFunctionEnd
-       %main = OpFunction %void None %49
-         %69 = OpLabel
-         %70 = OpFunctionCall %main_out %main_inner
-         %71 = OpCompositeExtract %v4float %70 0
-               OpStore %x_GLF_color_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.wgsl
deleted file mode 100644
index 3461a66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  var coord : vec2<f32>;
-  var tmp3 : f32;
-  var tmp2 : array<f32, 1>;
-  var tmp : vec4<f32>;
-  var x_48 : f32;
-  coord = vec2<f32>(1.0, 1.0);
-  let x_41 : f32 = coord.y;
-  if ((i32(x_41) < 180)) {
-    x_48 = tmp2[0];
-    tmp3 = x_48;
-  } else {
-    discard;
-  }
-  tmp = vec4<f32>(x_48, x_48, x_48, x_48);
-  return 1;
-}
-
-fn main_1() {
-  let x_9 : i32 = func_();
-  if ((x_9 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.hlsl
deleted file mode 100644
index 8fef5fd..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int func_() {
-  float2 coord = float2(0.0f, 0.0f);
-  float tmp3 = 0.0f;
-  float tmp2[1] = (float[1])0;
-  float4 tmp = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float x_48 = 0.0f;
-  coord = float2(1.0f, 1.0f);
-  const float x_41 = coord.y;
-  if ((int(x_41) < 180)) {
-    x_48 = tmp2[0];
-    tmp3 = x_48;
-  } else {
-    discard;
-  }
-  tmp = float4(x_48, x_48, x_48, x_48);
-  return 1;
-}
-
-void main_1() {
-  const int x_9 = func_();
-  if ((x_9 == 1)) {
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    x_GLF_color = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.msl
deleted file mode 100644
index 9b783f2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.msl
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[1];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-int func_() {
-  float2 coord = 0.0f;
-  float tmp3 = 0.0f;
-  tint_array_wrapper tmp2 = {};
-  float4 tmp = 0.0f;
-  float x_48 = 0.0f;
-  coord = float2(1.0f, 1.0f);
-  float const x_41 = coord.y;
-  if ((int(x_41) < 180)) {
-    x_48 = tmp2.arr[0];
-    tmp3 = x_48;
-  } else {
-    discard_fragment();
-  }
-  tmp = float4(x_48, x_48, x_48, x_48);
-  return 1;
-}
-
-void main_1(thread float4* const tint_symbol_3) {
-  int const x_9 = func_();
-  if ((x_9 == 1)) {
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  } else {
-    *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 1.0f);
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.spvasm
deleted file mode 100644
index 9199225..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,119 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %func_ "func_"
-               OpName %coord "coord"
-               OpName %tmp3 "tmp3"
-               OpName %tmp2 "tmp2"
-               OpName %tmp "tmp"
-               OpName %x_48 "x_48"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_1 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-        %int = OpTypeInt 32 1
-          %8 = OpTypeFunction %int
-    %v2float = OpTypeVector %float 2
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %15 = OpConstantNull %v2float
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-       %uint = OpTypeInt 32 0
-     %uint_1 = OpConstant %uint 1
-%_arr_float_uint_1 = OpTypeArray %float %uint_1
-%_ptr_Function__arr_float_uint_1 = OpTypePointer Function %_arr_float_uint_1
-         %24 = OpConstantNull %_arr_float_uint_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-    %float_1 = OpConstant %float 1
-         %29 = OpConstantComposite %v2float %float_1 %float_1
-    %int_180 = OpConstant %int 180
-       %bool = OpTypeBool
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %void = OpTypeVoid
-         %49 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %59 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-         %60 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %61 = OpTypeFunction %main_out
-      %func_ = OpFunction %int None %8
-         %11 = OpLabel
-      %coord = OpVariable %_ptr_Function_v2float Function %15
-       %tmp3 = OpVariable %_ptr_Function_float Function %18
-       %tmp2 = OpVariable %_ptr_Function__arr_float_uint_1 Function %24
-        %tmp = OpVariable %_ptr_Function_v4float Function %5
-       %x_48 = OpVariable %_ptr_Function_float Function %18
-               OpStore %coord %29
-         %30 = OpAccessChain %_ptr_Function_float %coord %uint_1
-         %31 = OpLoad %float %30
-         %32 = OpConvertFToS %int %31
-         %34 = OpSLessThan %bool %32 %int_180
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %38
-         %37 = OpLabel
-         %40 = OpAccessChain %_ptr_Function_float %tmp2 %int_0
-         %41 = OpLoad %float %40
-               OpStore %x_48 %41
-         %42 = OpLoad %float %x_48
-               OpStore %tmp3 %42
-               OpBranch %36
-         %38 = OpLabel
-               OpKill
-         %36 = OpLabel
-         %43 = OpLoad %float %x_48
-         %44 = OpLoad %float %x_48
-         %45 = OpLoad %float %x_48
-         %46 = OpLoad %float %x_48
-         %47 = OpCompositeConstruct %v4float %43 %44 %45 %46
-               OpStore %tmp %47
-               OpReturnValue %int_1
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %49
-         %52 = OpLabel
-         %53 = OpFunctionCall %int %func_
-         %54 = OpIEqual %bool %53 %int_1
-               OpSelectionMerge %55 None
-               OpBranchConditional %54 %56 %57
-         %56 = OpLabel
-               OpStore %x_GLF_color %59
-               OpBranch %55
-         %57 = OpLabel
-               OpStore %x_GLF_color %60
-               OpBranch %55
-         %55 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %61
-         %64 = OpLabel
-         %65 = OpFunctionCall %void %main_1
-         %66 = OpLoad %v4float %x_GLF_color
-         %67 = OpCompositeConstruct %main_out %66
-               OpReturnValue %67
-               OpFunctionEnd
-       %main = OpFunction %void None %49
-         %69 = OpLabel
-         %70 = OpFunctionCall %main_out %main_inner
-         %71 = OpCompositeExtract %v4float %70 0
-               OpStore %x_GLF_color_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.wgsl
deleted file mode 100644
index 3461a66..0000000
--- a/test/vk-gl-cts/graphicsfuzz/vectors-and-discard-in-function/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,40 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn func_() -> i32 {
-  var coord : vec2<f32>;
-  var tmp3 : f32;
-  var tmp2 : array<f32, 1>;
-  var tmp : vec4<f32>;
-  var x_48 : f32;
-  coord = vec2<f32>(1.0, 1.0);
-  let x_41 : f32 = coord.y;
-  if ((i32(x_41) < 180)) {
-    x_48 = tmp2[0];
-    tmp3 = x_48;
-  } else {
-    discard;
-  }
-  tmp = vec4<f32>(x_48, x_48, x_48, x_48);
-  return 1;
-}
-
-fn main_1() {
-  let x_9 : i32 = func_();
-  if ((x_9 == 1)) {
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  } else {
-    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6576af4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  int j = 0;
-  float x_41 = 0.0f;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    const float x_32 = asfloat(x_6[0].x);
-    j = int(x_32);
-    while (true) {
-      if ((j < 2)) {
-      } else {
-        break;
-      }
-      return;
-    }
-    {
-      x_41 = asfloat(x_6[0].y);
-      if ((0.0f > x_41)) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_43 = int(x_41);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.msl
deleted file mode 100644
index 5d47b5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int j = 0;
-  float x_41 = 0.0f;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    float const x_32 = x_6.injectionSwitch.x;
-    j = int(x_32);
-    while (true) {
-      int const x_8 = j;
-      if ((x_8 < 2)) {
-      } else {
-        break;
-      }
-      return;
-    }
-    {
-      x_41 = x_6.injectionSwitch.y;
-      if ((0.0f > x_41)) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_43 = int(x_41);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a927775..0000000
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,116 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %x_41 "x_41"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-         %54 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %19
-       %x_41 = OpVariable %_ptr_Function_float Function %22
-               OpStore %x_GLF_color %25
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %34 = OpLoad %float %33
-         %35 = OpConvertFToS %int %34
-               OpStore %j %35
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %j
-         %42 = OpSLessThan %bool %40 %int_2
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %37
-         %44 = OpLabel
-               OpReturn
-         %38 = OpLabel
-               OpBranch %36
-         %37 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %49 = OpLoad %float %48
-               OpStore %x_41 %49
-         %50 = OpLoad %float %x_41
-         %51 = OpFOrdGreaterThan %bool %float_0 %50
-               OpBranchConditional %51 %26 %27
-         %27 = OpLabel
-         %53 = OpLoad %float %x_41
-         %52 = OpConvertFToS %int %53
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %54
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %62 = OpLabel
-         %63 = OpFunctionCall %main_out %main_inner
-         %64 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 563d5c3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,47 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var j : i32;
-  var x_41 : f32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  loop {
-    let x_32 : f32 = x_6.injectionSwitch.x;
-    j = i32(x_32);
-    loop {
-      let x_8 : i32 = j;
-      if ((x_8 < 2)) {
-      } else {
-        break;
-      }
-      return;
-    }
-
-    continuing {
-      x_41 = x_6.injectionSwitch.y;
-      if ((0.0 > x_41)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_43 : i32 = i32(x_41);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6576af4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,50 +0,0 @@
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-
-void main_1() {
-  int j = 0;
-  float x_41 = 0.0f;
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    const float x_32 = asfloat(x_6[0].x);
-    j = int(x_32);
-    while (true) {
-      if ((j < 2)) {
-      } else {
-        break;
-      }
-      return;
-    }
-    {
-      x_41 = asfloat(x_6[0].y);
-      if ((0.0f > x_41)) {
-      } else {
-        break;
-      }
-    }
-  }
-  const int x_43 = int(x_41);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.msl
deleted file mode 100644
index 5d47b5d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  int j = 0;
-  float x_41 = 0.0f;
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  while (true) {
-    float const x_32 = x_6.injectionSwitch.x;
-    j = int(x_32);
-    while (true) {
-      int const x_8 = j;
-      if ((x_8 < 2)) {
-      } else {
-        break;
-      }
-      return;
-    }
-    {
-      x_41 = x_6.injectionSwitch.y;
-      if ((0.0f > x_41)) {
-      } else {
-        break;
-      }
-    }
-  }
-  int const x_43 = int(x_41);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a927775..0000000
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,116 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 65
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %j "j"
-               OpName %x_41 "x_41"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %19 = OpConstantNull %int
-%_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpConstantNull %float
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %25 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-         %54 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-          %j = OpVariable %_ptr_Function_int Function %19
-       %x_41 = OpVariable %_ptr_Function_float Function %22
-               OpStore %x_GLF_color %25
-               OpBranch %26
-         %26 = OpLabel
-               OpLoopMerge %27 %28 None
-               OpBranch %29
-         %29 = OpLabel
-         %33 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_0
-         %34 = OpLoad %float %33
-         %35 = OpConvertFToS %int %34
-               OpStore %j %35
-               OpBranch %36
-         %36 = OpLabel
-               OpLoopMerge %37 %38 None
-               OpBranch %39
-         %39 = OpLabel
-         %40 = OpLoad %int %j
-         %42 = OpSLessThan %bool %40 %int_2
-               OpSelectionMerge %44 None
-               OpBranchConditional %42 %45 %46
-         %45 = OpLabel
-               OpBranch %44
-         %46 = OpLabel
-               OpBranch %37
-         %44 = OpLabel
-               OpReturn
-         %38 = OpLabel
-               OpBranch %36
-         %37 = OpLabel
-               OpBranch %28
-         %28 = OpLabel
-         %48 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %49 = OpLoad %float %48
-               OpStore %x_41 %49
-         %50 = OpLoad %float %x_41
-         %51 = OpFOrdGreaterThan %bool %float_0 %50
-               OpBranchConditional %51 %26 %27
-         %27 = OpLabel
-         %53 = OpLoad %float %x_41
-         %52 = OpConvertFToS %int %53
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %54
-         %57 = OpLabel
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %v4float %x_GLF_color
-         %60 = OpCompositeConstruct %main_out %59
-               OpReturnValue %60
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %62 = OpLabel
-         %63 = OpFunctionCall %main_out %main_inner
-         %64 = OpCompositeExtract %v4float %63 0
-               OpStore %x_GLF_color_1_1 %64
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 563d5c3..0000000
--- a/test/vk-gl-cts/graphicsfuzz/while-function-always-false/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,47 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-var<private> x_GLF_color : vec4<f32>;
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-fn main_1() {
-  var j : i32;
-  var x_41 : f32;
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  loop {
-    let x_32 : f32 = x_6.injectionSwitch.x;
-    j = i32(x_32);
-    loop {
-      let x_8 : i32 = j;
-      if ((x_8 < 2)) {
-      } else {
-        break;
-      }
-      return;
-    }
-
-    continuing {
-      x_41 = x_6.injectionSwitch.y;
-      if ((0.0 > x_41)) {
-      } else {
-        break;
-      }
-    }
-  }
-  let x_43 : i32 = i32(x_41);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.msl
deleted file mode 100644
index bea72e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int injected;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3) {
-  int idx = 0;
-  float4x3 m43 = float4x3(0.0f);
-  int ll_1 = 0;
-  int GLF_live6rows = 0;
-  int z = 0;
-  int ll_2 = 0;
-  int ctr = 0;
-  float4x3 tempm43 = float4x3(0.0f);
-  int ll_3 = 0;
-  int c = 0;
-  int d = 0;
-  tint_array_wrapper GLF_live6sums = {};
-  idx = 0;
-  m43 = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  ll_1 = 0;
-  GLF_live6rows = 2;
-  while (true) {
-    int const x_18 = ll_1;
-    int const x_19 = x_9.injected;
-    if ((x_18 >= x_19)) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-    int const x_20 = ll_1;
-    ll_1 = as_type<int>((as_type<uint>(x_20) + as_type<uint>(1)));
-    int const x_22 = x_9.injected;
-    z = x_22;
-    ll_2 = 0;
-    ctr = 0;
-    while (true) {
-      int const x_23 = ctr;
-      if ((x_23 < 1)) {
-      } else {
-        break;
-      }
-      int const x_24 = ll_2;
-      int const x_25 = x_9.injected;
-      if ((x_24 >= x_25)) {
-        break;
-      }
-      int const x_26 = ll_2;
-      ll_2 = as_type<int>((as_type<uint>(x_26) + as_type<uint>(1)));
-      float4x3 const x_98 = m43;
-      tempm43 = x_98;
-      ll_3 = 0;
-      c = 0;
-      while (true) {
-        int const x_28 = z;
-        if ((1 < x_28)) {
-        } else {
-          break;
-        }
-        d = 0;
-        int const x_29 = c;
-        int const x_30 = c;
-        int const x_31 = c;
-        int const x_32 = d;
-        int const x_33 = d;
-        int const x_34 = d;
-        tempm43[select(0, x_31, ((x_29 >= 0) & (x_30 < 4)))][select(0, x_34, ((x_32 >= 0) & (x_33 < 3)))] = 1.0f;
-        {
-          int const x_35 = c;
-          c = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-        }
-      }
-      int const x_37 = idx;
-      int const x_38 = idx;
-      int const x_39 = idx;
-      int const x_117 = select(0, x_39, ((x_37 >= 0) & (x_38 < 9)));
-      int const x_40 = ctr;
-      float const x_119 = m43[x_40].y;
-      float const x_121 = GLF_live6sums.arr[x_117];
-      GLF_live6sums.arr[x_117] = (x_121 + x_119);
-      {
-        int const x_41 = ctr;
-        ctr = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
-      }
-    }
-    int const x_43 = idx;
-    idx = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 0e06b9b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,238 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 145
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injected"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %idx "idx"
-               OpName %m43 "m43"
-               OpName %ll_1 "ll_1"
-               OpName %GLF_live6rows "GLF_live6rows"
-               OpName %z "z"
-               OpName %ll_2 "ll_2"
-               OpName %ctr "ctr"
-               OpName %tempm43 "tempm43"
-               OpName %ll_3 "ll_3"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %GLF_live6sums "GLF_live6sums"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %23 = OpConstantNull %mat4v3float
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %38 = OpConstantNull %_arr_float_uint_9
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %42 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %43 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-         %44 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %45 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %46 = OpConstantComposite %mat4v3float %42 %43 %44 %45
-      %int_2 = OpConstant %int 2
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-         %61 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-        %134 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-        %idx = OpVariable %_ptr_Function_int Function %18
-        %m43 = OpVariable %_ptr_Function_mat4v3float Function %23
-       %ll_1 = OpVariable %_ptr_Function_int Function %18
-%GLF_live6rows = OpVariable %_ptr_Function_int Function %18
-          %z = OpVariable %_ptr_Function_int Function %18
-       %ll_2 = OpVariable %_ptr_Function_int Function %18
-        %ctr = OpVariable %_ptr_Function_int Function %18
-    %tempm43 = OpVariable %_ptr_Function_mat4v3float Function %23
-       %ll_3 = OpVariable %_ptr_Function_int Function %18
-          %c = OpVariable %_ptr_Function_int Function %18
-          %d = OpVariable %_ptr_Function_int Function %18
-%GLF_live6sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %38
-               OpStore %idx %int_0
-               OpStore %m43 %46
-               OpStore %ll_1 %int_0
-               OpStore %GLF_live6rows %int_2
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-         %52 = OpLoad %int %ll_1
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %56 = OpLoad %int %55
-         %57 = OpSGreaterThanEqual %bool %52 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %59
-         %60 = OpLabel
-               OpStore %x_GLF_color %61
-               OpBranch %49
-         %59 = OpLabel
-         %62 = OpLoad %int %ll_1
-         %64 = OpIAdd %int %62 %int_1
-               OpStore %ll_1 %64
-         %65 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %66 = OpLoad %int %65
-               OpStore %z %66
-               OpStore %ll_2 %int_0
-               OpStore %ctr %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %ctr
-         %72 = OpSLessThan %bool %71 %int_1
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-               OpBranch %68
-         %73 = OpLabel
-         %76 = OpLoad %int %ll_2
-         %77 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %78 = OpLoad %int %77
-         %79 = OpSGreaterThanEqual %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %80
-         %81 = OpLabel
-               OpBranch %68
-         %80 = OpLabel
-         %82 = OpLoad %int %ll_2
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %ll_2 %83
-         %84 = OpLoad %mat4v3float %m43
-               OpStore %tempm43 %84
-               OpStore %ll_3 %int_0
-               OpStore %c %int_0
-               OpBranch %85
-         %85 = OpLabel
-               OpLoopMerge %86 %87 None
-               OpBranch %88
-         %88 = OpLabel
-         %89 = OpLoad %int %z
-         %90 = OpSLessThan %bool %int_1 %89
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %93
-         %92 = OpLabel
-               OpBranch %91
-         %93 = OpLabel
-               OpBranch %86
-         %91 = OpLabel
-               OpStore %d %int_0
-         %94 = OpLoad %int %c
-         %95 = OpLoad %int %c
-         %96 = OpLoad %int %c
-         %97 = OpLoad %int %d
-         %98 = OpLoad %int %d
-         %99 = OpLoad %int %d
-        %101 = OpSGreaterThanEqual %bool %94 %int_0
-        %103 = OpSLessThan %bool %95 %int_4
-        %104 = OpLogicalAnd %bool %101 %103
-        %100 = OpSelect %int %104 %96 %int_0
-        %106 = OpSGreaterThanEqual %bool %97 %int_0
-        %108 = OpSLessThan %bool %98 %int_3
-        %109 = OpLogicalAnd %bool %106 %108
-        %105 = OpSelect %int %109 %99 %int_0
-        %111 = OpAccessChain %_ptr_Function_float %tempm43 %100 %105
-               OpStore %111 %float_1
-               OpBranch %87
-         %87 = OpLabel
-        %112 = OpLoad %int %c
-        %113 = OpIAdd %int %112 %int_1
-               OpStore %c %113
-               OpBranch %85
-         %86 = OpLabel
-        %114 = OpLoad %int %idx
-        %115 = OpLoad %int %idx
-        %116 = OpLoad %int %idx
-        %118 = OpSGreaterThanEqual %bool %114 %int_0
-        %120 = OpSLessThan %bool %115 %int_9
-        %121 = OpLogicalAnd %bool %118 %120
-        %117 = OpSelect %int %121 %116 %int_0
-        %122 = OpLoad %int %ctr
-        %124 = OpAccessChain %_ptr_Function_float %m43 %122 %uint_1
-        %125 = OpLoad %float %124
-        %126 = OpAccessChain %_ptr_Function_float %GLF_live6sums %117
-        %127 = OpLoad %float %126
-        %128 = OpAccessChain %_ptr_Function_float %GLF_live6sums %117
-        %129 = OpFAdd %float %127 %125
-               OpStore %128 %129
-               OpBranch %69
-         %69 = OpLabel
-        %130 = OpLoad %int %ctr
-        %131 = OpIAdd %int %130 %int_1
-               OpStore %ctr %131
-               OpBranch %67
-         %68 = OpLabel
-        %132 = OpLoad %int %idx
-        %133 = OpIAdd %int %132 %int_1
-               OpStore %idx %133
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %48
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %134
-        %137 = OpLabel
-        %138 = OpFunctionCall %void %main_1
-        %139 = OpLoad %v4float %x_GLF_color
-        %140 = OpCompositeConstruct %main_out %139
-               OpReturnValue %140
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %142 = OpLabel
-        %143 = OpFunctionCall %main_out %main_inner
-        %144 = OpCompositeExtract %v4float %143 0
-               OpStore %x_GLF_color_1_1 %144
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 3cc4eb9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,106 +0,0 @@
-[[block]]
-struct buf0 {
-  injected : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var idx : i32;
-  var m43 : mat4x3<f32>;
-  var ll_1 : i32;
-  var GLF_live6rows : i32;
-  var z : i32;
-  var ll_2 : i32;
-  var ctr : i32;
-  var tempm43 : mat4x3<f32>;
-  var ll_3 : i32;
-  var c : i32;
-  var d : i32;
-  var GLF_live6sums : array<f32, 9>;
-  idx = 0;
-  m43 = mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0));
-  ll_1 = 0;
-  GLF_live6rows = 2;
-  loop {
-    let x_18 : i32 = ll_1;
-    let x_19 : i32 = x_9.injected;
-    if ((x_18 >= x_19)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      break;
-    }
-    let x_20 : i32 = ll_1;
-    ll_1 = (x_20 + 1);
-    let x_22 : i32 = x_9.injected;
-    z = x_22;
-    ll_2 = 0;
-    ctr = 0;
-    loop {
-      let x_23 : i32 = ctr;
-      if ((x_23 < 1)) {
-      } else {
-        break;
-      }
-      let x_24 : i32 = ll_2;
-      let x_25 : i32 = x_9.injected;
-      if ((x_24 >= x_25)) {
-        break;
-      }
-      let x_26 : i32 = ll_2;
-      ll_2 = (x_26 + 1);
-      let x_98 : mat4x3<f32> = m43;
-      tempm43 = x_98;
-      ll_3 = 0;
-      c = 0;
-      loop {
-        let x_28 : i32 = z;
-        if ((1 < x_28)) {
-        } else {
-          break;
-        }
-        d = 0;
-        let x_29 : i32 = c;
-        let x_30 : i32 = c;
-        let x_31 : i32 = c;
-        let x_32 : i32 = d;
-        let x_33 : i32 = d;
-        let x_34 : i32 = d;
-        tempm43[select(0, x_31, ((x_29 >= 0) & (x_30 < 4)))][select(0, x_34, ((x_32 >= 0) & (x_33 < 3)))] = 1.0;
-
-        continuing {
-          let x_35 : i32 = c;
-          c = (x_35 + 1);
-        }
-      }
-      let x_37 : i32 = idx;
-      let x_38 : i32 = idx;
-      let x_39 : i32 = idx;
-      let x_117 : i32 = select(0, x_39, ((x_37 >= 0) & (x_38 < 9)));
-      let x_40 : i32 = ctr;
-      let x_119 : f32 = m43[x_40].y;
-      let x_121 : f32 = GLF_live6sums[x_117];
-      GLF_live6sums[x_117] = (x_121 + x_119);
-
-      continuing {
-        let x_41 : i32 = ctr;
-        ctr = (x_41 + 1);
-      }
-    }
-    let x_43 : i32 = idx;
-    idx = (x_43 + 1);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4075e24..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ int injected;
-};
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_9, thread float4* const tint_symbol_3) {
-  int idx = 0;
-  float4x3 m43 = float4x3(0.0f);
-  int ll_1 = 0;
-  int GLF_live6rows = 0;
-  int z = 0;
-  int ll_2 = 0;
-  int ctr = 0;
-  float4x3 tempm43 = float4x3(0.0f);
-  int ll_3 = 0;
-  int c = 0;
-  int d = 0;
-  tint_array_wrapper GLF_live6sums = {};
-  idx = 0;
-  m43 = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  ll_1 = 0;
-  GLF_live6rows = 2;
-  while (true) {
-    int const x_18 = ll_1;
-    int const x_19 = x_9.injected;
-    if ((x_18 >= x_19)) {
-      *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-      break;
-    }
-    int const x_20 = ll_1;
-    ll_1 = as_type<int>((as_type<uint>(x_20) + as_type<uint>(1)));
-    int const x_22 = x_9.injected;
-    z = x_22;
-    ll_2 = 0;
-    ctr = 0;
-    while (true) {
-      int const x_23 = ctr;
-      if ((x_23 < 1)) {
-      } else {
-        break;
-      }
-      int const x_24 = ll_2;
-      int const x_25 = x_9.injected;
-      if ((x_24 >= x_25)) {
-        break;
-      }
-      int const x_26 = ll_2;
-      ll_2 = as_type<int>((as_type<uint>(x_26) + as_type<uint>(1)));
-      float4x3 const x_98 = m43;
-      tempm43 = x_98;
-      ll_3 = 0;
-      c = 0;
-      while (true) {
-        int const x_28 = z;
-        if ((1 < x_28)) {
-        } else {
-          break;
-        }
-        d = 0;
-        int const x_29 = c;
-        int const x_30 = c;
-        int const x_31 = c;
-        int const x_32 = d;
-        int const x_33 = d;
-        int const x_34 = d;
-        tempm43[select(0, x_31, ((x_29 >= 0) && (x_30 < 4)))][select(0, x_34, ((x_32 >= 0) && (x_33 < 3)))] = 1.0f;
-        {
-          int const x_35 = c;
-          c = as_type<int>((as_type<uint>(x_35) + as_type<uint>(1)));
-        }
-      }
-      int const x_37 = idx;
-      int const x_38 = idx;
-      int const x_39 = idx;
-      int const x_117 = select(0, x_39, ((x_37 >= 0) && (x_38 < 9)));
-      int const x_40 = ctr;
-      float const x_119 = m43[x_40].y;
-      float const x_121 = GLF_live6sums.arr[x_117];
-      GLF_live6sums.arr[x_117] = (x_121 + x_119);
-      {
-        int const x_41 = ctr;
-        ctr = as_type<int>((as_type<uint>(x_41) + as_type<uint>(1)));
-      }
-    }
-    int const x_43 = idx;
-    idx = as_type<int>((as_type<uint>(x_43) + as_type<uint>(1)));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_9, thread float4* const tint_symbol_4) {
-  main_1(x_9, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_9 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_9, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5b39202..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,253 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 151
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injected"
-               OpName %x_9 "x_9"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %idx "idx"
-               OpName %m43 "m43"
-               OpName %ll_1 "ll_1"
-               OpName %GLF_live6rows "GLF_live6rows"
-               OpName %z "z"
-               OpName %ll_2 "ll_2"
-               OpName %ctr "ctr"
-               OpName %tempm43 "tempm43"
-               OpName %ll_3 "ll_3"
-               OpName %c "c"
-               OpName %d "d"
-               OpName %GLF_live6sums "GLF_live6sums"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_9 NonWritable
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-        %int = OpTypeInt 32 1
-       %buf0 = OpTypeStruct %int
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_9 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-         %18 = OpConstantNull %int
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %23 = OpConstantNull %mat4v3float
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %38 = OpConstantNull %_arr_float_uint_9
-      %int_0 = OpConstant %int 0
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %42 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %43 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-         %44 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %45 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %46 = OpConstantComposite %mat4v3float %42 %43 %44 %45
-      %int_2 = OpConstant %int 2
-     %uint_0 = OpConstant %uint 0
-%_ptr_Uniform_int = OpTypePointer Uniform %int
-       %bool = OpTypeBool
-         %61 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_1 = OpConstant %int 1
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-        %140 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-        %idx = OpVariable %_ptr_Function_int Function %18
-        %m43 = OpVariable %_ptr_Function_mat4v3float Function %23
-       %ll_1 = OpVariable %_ptr_Function_int Function %18
-%GLF_live6rows = OpVariable %_ptr_Function_int Function %18
-          %z = OpVariable %_ptr_Function_int Function %18
-       %ll_2 = OpVariable %_ptr_Function_int Function %18
-        %ctr = OpVariable %_ptr_Function_int Function %18
-    %tempm43 = OpVariable %_ptr_Function_mat4v3float Function %23
-       %ll_3 = OpVariable %_ptr_Function_int Function %18
-          %c = OpVariable %_ptr_Function_int Function %18
-          %d = OpVariable %_ptr_Function_int Function %18
-%GLF_live6sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %38
-               OpStore %idx %int_0
-               OpStore %m43 %46
-               OpStore %ll_1 %int_0
-               OpStore %GLF_live6rows %int_2
-               OpBranch %48
-         %48 = OpLabel
-               OpLoopMerge %49 %50 None
-               OpBranch %51
-         %51 = OpLabel
-         %52 = OpLoad %int %ll_1
-         %55 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %56 = OpLoad %int %55
-         %57 = OpSGreaterThanEqual %bool %52 %56
-               OpSelectionMerge %59 None
-               OpBranchConditional %57 %60 %59
-         %60 = OpLabel
-               OpStore %x_GLF_color %61
-               OpBranch %49
-         %59 = OpLabel
-         %62 = OpLoad %int %ll_1
-         %64 = OpIAdd %int %62 %int_1
-               OpStore %ll_1 %64
-         %65 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %66 = OpLoad %int %65
-               OpStore %z %66
-               OpStore %ll_2 %int_0
-               OpStore %ctr %int_0
-               OpBranch %67
-         %67 = OpLabel
-               OpLoopMerge %68 %69 None
-               OpBranch %70
-         %70 = OpLabel
-         %71 = OpLoad %int %ctr
-         %72 = OpSLessThan %bool %71 %int_1
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-               OpBranch %73
-         %75 = OpLabel
-               OpBranch %68
-         %73 = OpLabel
-         %76 = OpLoad %int %ll_2
-         %77 = OpAccessChain %_ptr_Uniform_int %x_9 %uint_0
-         %78 = OpLoad %int %77
-         %79 = OpSGreaterThanEqual %bool %76 %78
-               OpSelectionMerge %80 None
-               OpBranchConditional %79 %81 %80
-         %81 = OpLabel
-               OpBranch %68
-         %80 = OpLabel
-         %82 = OpLoad %int %ll_2
-         %83 = OpIAdd %int %82 %int_1
-               OpStore %ll_2 %83
-         %84 = OpLoad %mat4v3float %m43
-               OpStore %tempm43 %84
-               OpStore %ll_3 %int_0
-               OpStore %c %int_0
-               OpBranch %85
-         %85 = OpLabel
-               OpLoopMerge %86 %87 None
-               OpBranch %88
-         %88 = OpLabel
-         %89 = OpLoad %int %z
-         %90 = OpSLessThan %bool %int_1 %89
-               OpSelectionMerge %91 None
-               OpBranchConditional %90 %92 %93
-         %92 = OpLabel
-               OpBranch %91
-         %93 = OpLabel
-               OpBranch %86
-         %91 = OpLabel
-               OpStore %d %int_0
-         %94 = OpLoad %int %c
-         %95 = OpLoad %int %c
-         %96 = OpLoad %int %c
-         %97 = OpLoad %int %d
-         %98 = OpLoad %int %d
-         %99 = OpLoad %int %d
-        %101 = OpSGreaterThanEqual %bool %94 %int_0
-               OpSelectionMerge %102 None
-               OpBranchConditional %101 %103 %102
-        %103 = OpLabel
-        %105 = OpSLessThan %bool %95 %int_4
-               OpBranch %102
-        %102 = OpLabel
-        %106 = OpPhi %bool %101 %91 %105 %103
-        %100 = OpSelect %int %106 %96 %int_0
-        %108 = OpSGreaterThanEqual %bool %97 %int_0
-               OpSelectionMerge %109 None
-               OpBranchConditional %108 %110 %109
-        %110 = OpLabel
-        %112 = OpSLessThan %bool %98 %int_3
-               OpBranch %109
-        %109 = OpLabel
-        %113 = OpPhi %bool %108 %102 %112 %110
-        %107 = OpSelect %int %113 %99 %int_0
-        %115 = OpAccessChain %_ptr_Function_float %tempm43 %100 %107
-               OpStore %115 %float_1
-               OpBranch %87
-         %87 = OpLabel
-        %116 = OpLoad %int %c
-        %117 = OpIAdd %int %116 %int_1
-               OpStore %c %117
-               OpBranch %85
-         %86 = OpLabel
-        %118 = OpLoad %int %idx
-        %119 = OpLoad %int %idx
-        %120 = OpLoad %int %idx
-        %122 = OpSGreaterThanEqual %bool %118 %int_0
-               OpSelectionMerge %123 None
-               OpBranchConditional %122 %124 %123
-        %124 = OpLabel
-        %126 = OpSLessThan %bool %119 %int_9
-               OpBranch %123
-        %123 = OpLabel
-        %127 = OpPhi %bool %122 %86 %126 %124
-        %121 = OpSelect %int %127 %120 %int_0
-        %128 = OpLoad %int %ctr
-        %130 = OpAccessChain %_ptr_Function_float %m43 %128 %uint_1
-        %131 = OpLoad %float %130
-        %132 = OpAccessChain %_ptr_Function_float %GLF_live6sums %121
-        %133 = OpLoad %float %132
-        %134 = OpAccessChain %_ptr_Function_float %GLF_live6sums %121
-        %135 = OpFAdd %float %133 %131
-               OpStore %134 %135
-               OpBranch %69
-         %69 = OpLabel
-        %136 = OpLoad %int %ctr
-        %137 = OpIAdd %int %136 %int_1
-               OpStore %ctr %137
-               OpBranch %67
-         %68 = OpLabel
-        %138 = OpLoad %int %idx
-        %139 = OpIAdd %int %138 %int_1
-               OpStore %idx %139
-               OpBranch %50
-         %50 = OpLabel
-               OpBranch %48
-         %49 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %140
-        %143 = OpLabel
-        %144 = OpFunctionCall %void %main_1
-        %145 = OpLoad %v4float %x_GLF_color
-        %146 = OpCompositeConstruct %main_out %145
-               OpReturnValue %146
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-        %148 = OpLabel
-        %149 = OpFunctionCall %main_out %main_inner
-        %150 = OpCompositeExtract %v4float %149 0
-               OpStore %x_GLF_color_1_1 %150
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 00e805e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,106 +0,0 @@
-[[block]]
-struct buf0 {
-  injected : i32;
-};
-
-[[group(0), binding(0)]] var<uniform> x_9 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var idx : i32;
-  var m43 : mat4x3<f32>;
-  var ll_1 : i32;
-  var GLF_live6rows : i32;
-  var z : i32;
-  var ll_2 : i32;
-  var ctr : i32;
-  var tempm43 : mat4x3<f32>;
-  var ll_3 : i32;
-  var c : i32;
-  var d : i32;
-  var GLF_live6sums : array<f32, 9>;
-  idx = 0;
-  m43 = mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0));
-  ll_1 = 0;
-  GLF_live6rows = 2;
-  loop {
-    let x_18 : i32 = ll_1;
-    let x_19 : i32 = x_9.injected;
-    if ((x_18 >= x_19)) {
-      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-      break;
-    }
-    let x_20 : i32 = ll_1;
-    ll_1 = (x_20 + 1);
-    let x_22 : i32 = x_9.injected;
-    z = x_22;
-    ll_2 = 0;
-    ctr = 0;
-    loop {
-      let x_23 : i32 = ctr;
-      if ((x_23 < 1)) {
-      } else {
-        break;
-      }
-      let x_24 : i32 = ll_2;
-      let x_25 : i32 = x_9.injected;
-      if ((x_24 >= x_25)) {
-        break;
-      }
-      let x_26 : i32 = ll_2;
-      ll_2 = (x_26 + 1);
-      let x_98 : mat4x3<f32> = m43;
-      tempm43 = x_98;
-      ll_3 = 0;
-      c = 0;
-      loop {
-        let x_28 : i32 = z;
-        if ((1 < x_28)) {
-        } else {
-          break;
-        }
-        d = 0;
-        let x_29 : i32 = c;
-        let x_30 : i32 = c;
-        let x_31 : i32 = c;
-        let x_32 : i32 = d;
-        let x_33 : i32 = d;
-        let x_34 : i32 = d;
-        tempm43[select(0, x_31, ((x_29 >= 0) && (x_30 < 4)))][select(0, x_34, ((x_32 >= 0) && (x_33 < 3)))] = 1.0;
-
-        continuing {
-          let x_35 : i32 = c;
-          c = (x_35 + 1);
-        }
-      }
-      let x_37 : i32 = idx;
-      let x_38 : i32 = idx;
-      let x_39 : i32 = idx;
-      let x_117 : i32 = select(0, x_39, ((x_37 >= 0) && (x_38 < 9)));
-      let x_40 : i32 = ctr;
-      let x_119 : f32 = m43[x_40].y;
-      let x_121 : f32 = GLF_live6sums[x_117];
-      GLF_live6sums[x_117] = (x_121 + x_119);
-
-      continuing {
-        let x_41 : i32 = ctr;
-        ctr = (x_41 + 1);
-      }
-    }
-    let x_43 : i32 = idx;
-    idx = (x_43 + 1);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 38a37c9..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,357 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct Obj {
-  float odd_numbers[10];
-  float even_numbers[10];
-};
-
-static BST tree_1[10] = (BST[10])0;
-cbuffer cbuffer_x_27 : register(b0, space0) {
-  uint4 x_27[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
-  const int x_74 = data;
-  tree.data = x_74;
-  tree.leftIndex = -1;
-  tree.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  int GLF_live8i = 0;
-  float GLF_live8A[50] = (float[50])0;
-  baseIndex = 0;
-  while (true) {
-    const int x_75 = baseIndex;
-    const int x_76 = treeIndex;
-    if ((x_75 <= x_76)) {
-    } else {
-      break;
-    }
-    const int x_77 = data_1;
-    const int x_79 = tree_1[baseIndex].data;
-    if ((x_77 <= x_79)) {
-      const int x_81 = tree_1[baseIndex].leftIndex;
-      if ((x_81 == -1)) {
-        const int x_82 = baseIndex;
-        const int x_83 = treeIndex;
-        tree_1[x_82].leftIndex = x_83;
-        const int x_84 = treeIndex;
-        const BST x_350 = tree_1[x_84];
-        param = x_350;
-        const int x_85 = data_1;
-        param_1 = x_85;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree_1[x_84] = param;
-        return;
-      } else {
-        const int x_87 = tree_1[baseIndex].leftIndex;
-        baseIndex = x_87;
-        continue;
-      }
-    } else {
-      const int x_89 = tree_1[baseIndex].rightIndex;
-      if ((x_89 == -1)) {
-        const int x_90 = baseIndex;
-        const int x_91 = treeIndex;
-        tree_1[x_90].rightIndex = x_91;
-        const int x_92 = treeIndex;
-        const BST x_362 = tree_1[x_92];
-        param_2 = x_362;
-        const int x_93 = data_1;
-        param_3 = x_93;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree_1[x_92] = param_2;
-        return;
-      } else {
-        GLF_live8i = 1;
-        const int x_369 = (((GLF_live8i >= 0) & (GLF_live8i < 50)) ? GLF_live8i : 0);
-        const float x_371 = GLF_live8A[0];
-        const float x_373 = GLF_live8A[x_369];
-        GLF_live8A[x_369] = (x_373 + x_371);
-        while (true) {
-          const int x_98 = tree_1[baseIndex].rightIndex;
-          baseIndex = x_98;
-          {
-            const float x_382 = asfloat(x_27[0].x);
-            const float x_384 = asfloat(x_27[0].y);
-            if ((x_382 > x_384)) {
-            } else {
-              break;
-            }
-          }
-        }
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_387 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_395 = tree_1[index];
-    currentNode = x_395;
-    const int x_101 = currentNode.data;
-    const int x_102 = target;
-    if ((x_101 == x_102)) {
-      const int x_103 = target;
-      return x_103;
-    }
-    const int x_104 = target;
-    const int x_105 = currentNode.data;
-    if ((x_104 > x_105)) {
-      const int x_106 = currentNode.rightIndex;
-      x_387 = x_106;
-    } else {
-      const int x_107 = currentNode.leftIndex;
-      x_387 = x_107;
-    }
-    index = x_387;
-  }
-  return -1;
-}
-
-float makeFrame_f1_(inout float v) {
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  const float x_418 = v;
-  v = (x_418 * 6.5f);
-  const float x_420 = v;
-  if ((x_420 < 1.5f)) {
-    param_5 = 100;
-    const int x_110 = search_i1_(param_5);
-    return float(x_110);
-  }
-  const float x_425 = v;
-  if ((x_425 < 4.0f)) {
-    return 0.0f;
-  }
-  const float x_429 = v;
-  param_6 = 6;
-  const int x_111 = search_i1_(param_6);
-  if ((x_429 < float(x_111))) {
-    return 1.0f;
-  }
-  param_7 = 30;
-  const int x_112 = search_i1_(param_7);
-  return (10.0f + float(x_112));
-}
-
-float3 hueColor_f1_(inout float angle) {
-  float nodeData = 0.0f;
-  int param_4 = 0;
-  param_4 = 15;
-  const int x_109 = search_i1_(param_4);
-  nodeData = float(x_109);
-  const float x_409 = angle;
-  return ((float3(30.0f, 30.0f, 30.0f) + (float3(1.0f, 5.0f, nodeData) * x_409)) / float3(50.0f, 50.0f, 50.0f));
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_8 = (BST)0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int GLF_live1_looplimiter2 = 0;
-  int GLF_live1i = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int GLF_live4_looplimiter3 = 0;
-  int GLF_live4i = 0;
-  int GLF_live4index = 0;
-  Obj GLF_live4obj = (Obj)0;
-  int param_24 = 0;
-  int param_25 = 0;
-  int param_26 = 0;
-  int param_27 = 0;
-  float2 z = float2(0.0f, 0.0f);
-  float x_1 = 0.0f;
-  float param_28 = 0.0f;
-  float y_1 = 0.0f;
-  float param_29 = 0.0f;
-  int sum = 0;
-  int target_1 = 0;
-  int result = 0;
-  int param_30 = 0;
-  float a = 0.0f;
-  float3 x_235 = float3(0.0f, 0.0f, 0.0f);
-  float param_31 = 0.0f;
-  treeIndex_1 = 0;
-  const BST x_237 = tree_1[0];
-  param_8 = x_237;
-  param_9 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_8, param_9);
-  tree_1[0] = param_8;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 5;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  GLF_live1_looplimiter2 = 0;
-  GLF_live1i = 0;
-  {
-    for(; true; GLF_live1i = (GLF_live1i + 1)) {
-      if ((GLF_live1_looplimiter2 >= 7)) {
-        break;
-      }
-      GLF_live1_looplimiter2 = (GLF_live1_looplimiter2 + 1);
-    }
-  }
-  param_12 = treeIndex_1;
-  param_13 = 12;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 15;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 7;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 8;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 2;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 6;
-  insert_i1_i1_(param_22, param_23);
-  treeIndex_1 = (treeIndex_1 + 1);
-  GLF_live4_looplimiter3 = 0;
-  GLF_live4i = 0;
-  {
-    for(; true; GLF_live4i = (GLF_live4i + 1)) {
-      if ((GLF_live4_looplimiter3 >= 3)) {
-        break;
-      }
-      GLF_live4_looplimiter3 = (GLF_live4_looplimiter3 + 1);
-      GLF_live4index = 1;
-      const int x_144 = GLF_live4index;
-      const int x_145 = GLF_live4index;
-      const int x_146 = GLF_live4index;
-      const float x_269 = GLF_live4obj.even_numbers[1];
-      GLF_live4obj.even_numbers[(((x_144 >= 0) & (x_145 < 10)) ? x_146 : 0)] = x_269;
-      GLF_live4obj.even_numbers[(((GLF_live4i >= 0) & (GLF_live4i < 10)) ? GLF_live4i : 0)] = 1.0f;
-    }
-  }
-  param_24 = treeIndex_1;
-  param_25 = 17;
-  insert_i1_i1_(param_24, param_25);
-  const float x_278 = asfloat(x_27[0].x);
-  const float x_280 = asfloat(x_27[0].y);
-  if ((x_278 > x_280)) {
-    return;
-  }
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_26 = treeIndex_1;
-  param_27 = 13;
-  insert_i1_i1_(param_26, param_27);
-  const float4 x_285 = gl_FragCoord;
-  z = (float2(x_285.y, x_285.x) / float2(256.0f, 256.0f));
-  const float x_289 = z.x;
-  param_28 = x_289;
-  const float x_290 = makeFrame_f1_(param_28);
-  x_1 = x_290;
-  const float x_292 = z.y;
-  param_29 = x_292;
-  const float x_293 = makeFrame_f1_(param_29);
-  y_1 = x_293;
-  sum = -100;
-  target_1 = 0;
-  {
-    for(; (target_1 < 20); target_1 = (target_1 + 1)) {
-      param_30 = target_1;
-      const int x_158 = search_i1_(param_30);
-      result = x_158;
-      if ((result > 0)) {
-      } else {
-        switch(result) {
-          case 0: {
-            return;
-            break;
-          }
-          case -1: {
-            sum = (sum + 1);
-            break;
-          }
-          default: {
-            break;
-          }
-        }
-      }
-    }
-  }
-  a = (x_1 + (y_1 * float(sum)));
-  const float x_313 = asfloat(x_27[0].x);
-  const float x_315 = asfloat(x_27[0].y);
-  if ((x_313 < x_315)) {
-    x_235 = float3(1.0f, 0.0f, 0.0f);
-  } else {
-    param_31 = a;
-    const float3 x_321 = hueColor_f1_(param_31);
-    x_235 = x_321;
-  }
-  const float3 x_322 = x_235;
-  x_GLF_color = float4(x_322.x, x_322.y, x_322.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.msl
deleted file mode 100644
index 172584a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,432 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct Obj {
-  tint_array_wrapper odd_numbers;
-  tint_array_wrapper even_numbers;
-};
-struct tint_array_wrapper_1 {
-  BST arr[10];
-};
-struct tint_array_wrapper_2 {
-  float arr[50];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
-  int const x_74 = *(data);
-  (*(tree)).data = x_74;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(constant buf0& x_27, thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper_1* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  int GLF_live8i = 0;
-  tint_array_wrapper_2 GLF_live8A = {};
-  baseIndex = 0;
-  while (true) {
-    int const x_75 = baseIndex;
-    int const x_76 = *(treeIndex);
-    if ((x_75 <= x_76)) {
-    } else {
-      break;
-    }
-    int const x_77 = *(data_1);
-    int const x_78 = baseIndex;
-    int const x_79 = (*(tint_symbol_3)).arr[x_78].data;
-    if ((x_77 <= x_79)) {
-      int const x_80 = baseIndex;
-      int const x_81 = (*(tint_symbol_3)).arr[x_80].leftIndex;
-      if ((x_81 == -1)) {
-        int const x_82 = baseIndex;
-        int const x_83 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_82].leftIndex = x_83;
-        int const x_84 = *(treeIndex);
-        BST const x_350 = (*(tint_symbol_3)).arr[x_84];
-        param = x_350;
-        int const x_85 = *(data_1);
-        param_1 = x_85;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_352 = param;
-        (*(tint_symbol_3)).arr[x_84] = x_352;
-        return;
-      } else {
-        int const x_86 = baseIndex;
-        int const x_87 = (*(tint_symbol_3)).arr[x_86].leftIndex;
-        baseIndex = x_87;
-        continue;
-      }
-    } else {
-      int const x_88 = baseIndex;
-      int const x_89 = (*(tint_symbol_3)).arr[x_88].rightIndex;
-      if ((x_89 == -1)) {
-        int const x_90 = baseIndex;
-        int const x_91 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_90].rightIndex = x_91;
-        int const x_92 = *(treeIndex);
-        BST const x_362 = (*(tint_symbol_3)).arr[x_92];
-        param_2 = x_362;
-        int const x_93 = *(data_1);
-        param_3 = x_93;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_364 = param_2;
-        (*(tint_symbol_3)).arr[x_92] = x_364;
-        return;
-      } else {
-        GLF_live8i = 1;
-        int const x_94 = GLF_live8i;
-        int const x_95 = GLF_live8i;
-        int const x_96 = GLF_live8i;
-        int const x_369 = select(0, x_96, ((x_94 >= 0) & (x_95 < 50)));
-        float const x_371 = GLF_live8A.arr[0];
-        float const x_373 = GLF_live8A.arr[x_369];
-        GLF_live8A.arr[x_369] = (x_373 + x_371);
-        while (true) {
-          int const x_97 = baseIndex;
-          int const x_98 = (*(tint_symbol_3)).arr[x_97].rightIndex;
-          baseIndex = x_98;
-          {
-            float const x_382 = x_27.injectionSwitch.x;
-            float const x_384 = x_27.injectionSwitch.y;
-            if ((x_382 > x_384)) {
-            } else {
-              break;
-            }
-          }
-        }
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper_1* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_387 = 0;
-  index = 0;
-  while (true) {
-    int const x_99 = index;
-    if ((x_99 != -1)) {
-    } else {
-      break;
-    }
-    int const x_100 = index;
-    BST const x_395 = (*(tint_symbol_4)).arr[x_100];
-    currentNode = x_395;
-    int const x_101 = currentNode.data;
-    int const x_102 = *(target);
-    if ((x_101 == x_102)) {
-      int const x_103 = *(target);
-      return x_103;
-    }
-    int const x_104 = *(target);
-    int const x_105 = currentNode.data;
-    if ((x_104 > x_105)) {
-      int const x_106 = currentNode.rightIndex;
-      x_387 = x_106;
-    } else {
-      int const x_107 = currentNode.leftIndex;
-      x_387 = x_107;
-    }
-    int const x_108 = x_387;
-    index = x_108;
-  }
-  return -1;
-}
-
-float makeFrame_f1_(thread float* const v, thread tint_array_wrapper_1* const tint_symbol_5) {
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  float const x_418 = *(v);
-  *(v) = (x_418 * 6.5f);
-  float const x_420 = *(v);
-  if ((x_420 < 1.5f)) {
-    param_5 = 100;
-    int const x_110 = search_i1_(&(param_5), tint_symbol_5);
-    return float(x_110);
-  }
-  float const x_425 = *(v);
-  if ((x_425 < 4.0f)) {
-    return 0.0f;
-  }
-  float const x_429 = *(v);
-  param_6 = 6;
-  int const x_111 = search_i1_(&(param_6), tint_symbol_5);
-  if ((x_429 < float(x_111))) {
-    return 1.0f;
-  }
-  param_7 = 30;
-  int const x_112 = search_i1_(&(param_7), tint_symbol_5);
-  return (10.0f + float(x_112));
-}
-
-float3 hueColor_f1_(thread float* const angle, thread tint_array_wrapper_1* const tint_symbol_6) {
-  float nodeData = 0.0f;
-  int param_4 = 0;
-  param_4 = 15;
-  int const x_109 = search_i1_(&(param_4), tint_symbol_6);
-  nodeData = float(x_109);
-  float const x_409 = *(angle);
-  float const x_410 = nodeData;
-  return ((float3(30.0f, 30.0f, 30.0f) + (float3(1.0f, 5.0f, x_410) * x_409)) / float3(50.0f, 50.0f, 50.0f));
-}
-
-void main_1(constant buf0& x_27, thread tint_array_wrapper_1* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int treeIndex_1 = 0;
-  BST param_8 = {};
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int GLF_live1_looplimiter2 = 0;
-  int GLF_live1i = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int GLF_live4_looplimiter3 = 0;
-  int GLF_live4i = 0;
-  int GLF_live4index = 0;
-  Obj GLF_live4obj = {};
-  int param_24 = 0;
-  int param_25 = 0;
-  int param_26 = 0;
-  int param_27 = 0;
-  float2 z = 0.0f;
-  float x_1 = 0.0f;
-  float param_28 = 0.0f;
-  float y_1 = 0.0f;
-  float param_29 = 0.0f;
-  int sum = 0;
-  int target_1 = 0;
-  int result = 0;
-  int param_30 = 0;
-  float a = 0.0f;
-  float3 x_235 = 0.0f;
-  float param_31 = 0.0f;
-  treeIndex_1 = 0;
-  BST const x_237 = (*(tint_symbol_7)).arr[0];
-  param_8 = x_237;
-  param_9 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_8), &(param_9));
-  BST const x_239 = param_8;
-  (*(tint_symbol_7)).arr[0] = x_239;
-  int const x_113 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-  int const x_115 = treeIndex_1;
-  param_10 = x_115;
-  param_11 = 5;
-  insert_i1_i1_(x_27, &(param_10), &(param_11), tint_symbol_7);
-  int const x_116 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-  GLF_live1_looplimiter2 = 0;
-  GLF_live1i = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    int const x_118 = GLF_live1_looplimiter2;
-    if ((x_118 >= 7)) {
-      break;
-    }
-    int const x_119 = GLF_live1_looplimiter2;
-    GLF_live1_looplimiter2 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-    {
-      int const x_121 = GLF_live1i;
-      GLF_live1i = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
-    }
-  }
-  int const x_123 = treeIndex_1;
-  param_12 = x_123;
-  param_13 = 12;
-  insert_i1_i1_(x_27, &(param_12), &(param_13), tint_symbol_7);
-  int const x_124 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-  int const x_126 = treeIndex_1;
-  param_14 = x_126;
-  param_15 = 15;
-  insert_i1_i1_(x_27, &(param_14), &(param_15), tint_symbol_7);
-  int const x_127 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
-  int const x_129 = treeIndex_1;
-  param_16 = x_129;
-  param_17 = 7;
-  insert_i1_i1_(x_27, &(param_16), &(param_17), tint_symbol_7);
-  int const x_130 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_130) + as_type<uint>(1)));
-  int const x_132 = treeIndex_1;
-  param_18 = x_132;
-  param_19 = 8;
-  insert_i1_i1_(x_27, &(param_18), &(param_19), tint_symbol_7);
-  int const x_133 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
-  int const x_135 = treeIndex_1;
-  param_20 = x_135;
-  param_21 = 2;
-  insert_i1_i1_(x_27, &(param_20), &(param_21), tint_symbol_7);
-  int const x_136 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_136) + as_type<uint>(1)));
-  int const x_138 = treeIndex_1;
-  param_22 = x_138;
-  param_23 = 6;
-  insert_i1_i1_(x_27, &(param_22), &(param_23), tint_symbol_7);
-  int const x_139 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_139) + as_type<uint>(1)));
-  GLF_live4_looplimiter3 = 0;
-  GLF_live4i = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    int const x_141 = GLF_live4_looplimiter3;
-    if ((x_141 >= 3)) {
-      break;
-    }
-    int const x_142 = GLF_live4_looplimiter3;
-    GLF_live4_looplimiter3 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
-    GLF_live4index = 1;
-    int const x_144 = GLF_live4index;
-    int const x_145 = GLF_live4index;
-    int const x_146 = GLF_live4index;
-    float const x_269 = GLF_live4obj.even_numbers.arr[1];
-    GLF_live4obj.even_numbers.arr[select(0, x_146, ((x_144 >= 0) & (x_145 < 10)))] = x_269;
-    int const x_147 = GLF_live4i;
-    int const x_148 = GLF_live4i;
-    int const x_149 = GLF_live4i;
-    GLF_live4obj.even_numbers.arr[select(0, x_149, ((x_147 >= 0) & (x_148 < 10)))] = 1.0f;
-    {
-      int const x_150 = GLF_live4i;
-      GLF_live4i = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  int const x_152 = treeIndex_1;
-  param_24 = x_152;
-  param_25 = 17;
-  insert_i1_i1_(x_27, &(param_24), &(param_25), tint_symbol_7);
-  float const x_278 = x_27.injectionSwitch.x;
-  float const x_280 = x_27.injectionSwitch.y;
-  if ((x_278 > x_280)) {
-    return;
-  }
-  int const x_153 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_153) + as_type<uint>(1)));
-  int const x_155 = treeIndex_1;
-  param_26 = x_155;
-  param_27 = 13;
-  insert_i1_i1_(x_27, &(param_26), &(param_27), tint_symbol_7);
-  float4 const x_285 = *(tint_symbol_8);
-  z = (float2(x_285.y, x_285.x) / float2(256.0f, 256.0f));
-  float const x_289 = z.x;
-  param_28 = x_289;
-  float const x_290 = makeFrame_f1_(&(param_28), tint_symbol_7);
-  x_1 = x_290;
-  float const x_292 = z.y;
-  param_29 = x_292;
-  float const x_293 = makeFrame_f1_(&(param_29), tint_symbol_7);
-  y_1 = x_293;
-  sum = -100;
-  target_1 = 0;
-  while (true) {
-    int const x_156 = target_1;
-    if ((x_156 < 20)) {
-    } else {
-      break;
-    }
-    int const x_157 = target_1;
-    param_30 = x_157;
-    int const x_158 = search_i1_(&(param_30), tint_symbol_7);
-    result = x_158;
-    int const x_159 = result;
-    if ((x_159 > 0)) {
-    } else {
-      int const x_160 = result;
-      switch(x_160) {
-        case 0: {
-          return;
-          break;
-        }
-        case -1: {
-          int const x_161 = sum;
-          sum = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-    }
-    {
-      int const x_163 = target_1;
-      target_1 = as_type<int>((as_type<uint>(x_163) + as_type<uint>(1)));
-    }
-  }
-  float const x_307 = x_1;
-  float const x_308 = y_1;
-  int const x_165 = sum;
-  a = (x_307 + (x_308 * float(x_165)));
-  float const x_313 = x_27.injectionSwitch.x;
-  float const x_315 = x_27.injectionSwitch.y;
-  if ((x_313 < x_315)) {
-    x_235 = float3(1.0f, 0.0f, 0.0f);
-  } else {
-    float const x_320 = a;
-    param_31 = x_320;
-    float3 const x_321 = hueColor_f1_(&(param_31), tint_symbol_7);
-    x_235 = x_321;
-  }
-  float3 const x_322 = x_235;
-  *(tint_symbol_9) = float4(x_322.x, x_322.y, x_322.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_27, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread tint_array_wrapper_1* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_27, tint_symbol_11, tint_symbol_10, tint_symbol_12);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_12)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_27 [[buffer(0)]]) {
-  thread float4 tint_symbol_13 = 0.0f;
-  thread tint_array_wrapper_1 tint_symbol_14 = {};
-  thread float4 tint_symbol_15 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_27, gl_FragCoord_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index fa51685..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,788 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 527
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree_1 "tree_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_27 "x_27"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %tree "tree"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %GLF_live8i "GLF_live8i"
-               OpName %GLF_live8A "GLF_live8A"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_387 "x_387"
-               OpName %makeFrame_f1_ "makeFrame_f1_"
-               OpName %v "v"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %hueColor_f1_ "hueColor_f1_"
-               OpName %angle "angle"
-               OpName %nodeData "nodeData"
-               OpName %param_4 "param_4"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %GLF_live1_looplimiter2 "GLF_live1_looplimiter2"
-               OpName %GLF_live1i "GLF_live1i"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %GLF_live4_looplimiter3 "GLF_live4_looplimiter3"
-               OpName %GLF_live4i "GLF_live4i"
-               OpName %GLF_live4index "GLF_live4index"
-               OpName %Obj "Obj"
-               OpMemberName %Obj 0 "odd_numbers"
-               OpMemberName %Obj 1 "even_numbers"
-               OpName %GLF_live4obj "GLF_live4obj"
-               OpName %param_24 "param_24"
-               OpName %param_25 "param_25"
-               OpName %param_26 "param_26"
-               OpName %param_27 "param_27"
-               OpName %z "z"
-               OpName %x "x"
-               OpName %param_28 "param_28"
-               OpName %y "y"
-               OpName %param_29 "param_29"
-               OpName %sum "sum"
-               OpName %target_1 "target_1"
-               OpName %result "result"
-               OpName %param_30 "param_30"
-               OpName %a "a"
-               OpName %x_235 "x_235"
-               OpName %param_31 "param_31"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_27 NonWritable
-               OpDecorate %x_27 DescriptorSet 0
-               OpDecorate %x_27 Binding 0
-               OpDecorate %_arr_float_uint_50 ArrayStride 4
-               OpMemberDecorate %Obj 0 Offset 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %Obj 1 Offset 40
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %15 = OpConstantNull %_arr_BST_uint_10
-     %tree_1 = OpVariable %_ptr_Private__arr_BST_uint_10 Private %15
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_27 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %43 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %49 = OpConstantNull %int
-         %51 = OpConstantNull %BST
-    %uint_50 = OpConstant %uint 50
-%_arr_float_uint_50 = OpTypeArray %float %uint_50
-%_ptr_Function__arr_float_uint_50 = OpTypePointer Function %_arr_float_uint_50
-         %60 = OpConstantNull %_arr_float_uint_50
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-      %int_1 = OpConstant %int 1
-     %int_50 = OpConstant %int 50
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %161 = OpTypeFunction %int %_ptr_Function_int
-        %202 = OpTypeFunction %float %_ptr_Function_float
-  %float_6_5 = OpConstant %float 6.5
-  %float_1_5 = OpConstant %float 1.5
-    %int_100 = OpConstant %int 100
-    %float_4 = OpConstant %float 4
-    %float_0 = OpConstant %float 0
-      %int_6 = OpConstant %int 6
-    %float_1 = OpConstant %float 1
-     %int_30 = OpConstant %int 30
-   %float_10 = OpConstant %float 10
-    %v3float = OpTypeVector %float 3
-        %247 = OpTypeFunction %v3float %_ptr_Function_float
-        %253 = OpConstantNull %float
-     %int_15 = OpConstant %int 15
-   %float_30 = OpConstant %float 30
-        %263 = OpConstantComposite %v3float %float_30 %float_30 %float_30
-    %float_5 = OpConstant %float 5
-   %float_50 = OpConstant %float 50
-        %269 = OpConstantComposite %v3float %float_50 %float_50 %float_50
-        %271 = OpTypeFunction %void
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-        %Obj = OpTypeStruct %_arr_float_uint_10 %_arr_float_uint_10
-%_ptr_Function_Obj = OpTypePointer Function %Obj
-        %300 = OpConstantNull %Obj
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %307 = OpConstantNull %v2float
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %319 = OpConstantNull %v3float
-      %int_9 = OpConstant %int 9
-      %int_5 = OpConstant %int 5
-       %true = OpConstantTrue %bool
-      %int_7 = OpConstant %int 7
-     %int_12 = OpConstant %int 12
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %int_10 = OpConstant %int 10
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-  %float_256 = OpConstant %float 256
-        %453 = OpConstantComposite %v2float %float_256 %float_256
-   %int_n100 = OpConstant %int -100
-     %int_20 = OpConstant %int 20
-        %505 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %514 = OpTypeFunction %main_out %v4float
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %23
-       %tree = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-         %32 = OpLoad %int %data
-         %35 = OpAccessChain %_ptr_Function_int %tree %uint_0
-               OpStore %35 %32
-         %38 = OpAccessChain %_ptr_Function_int %tree %uint_1
-               OpStore %38 %int_n1
-         %42 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %42 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %43
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %47 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %49
-      %param = OpVariable %_ptr_Function_BST Function %51
-    %param_1 = OpVariable %_ptr_Function_int Function %49
-    %param_2 = OpVariable %_ptr_Function_BST Function %51
-    %param_3 = OpVariable %_ptr_Function_int Function %49
- %GLF_live8i = OpVariable %_ptr_Function_int Function %49
- %GLF_live8A = OpVariable %_ptr_Function__arr_float_uint_50 Function %60
-               OpStore %baseIndex %int_0
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %66 = OpLoad %int %baseIndex
-         %68 = OpLoad %int %treeIndex
-         %69 = OpSLessThanEqual %bool %66 %68
-               OpSelectionMerge %71 None
-               OpBranchConditional %69 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %63
-         %71 = OpLabel
-         %75 = OpLoad %int %data_1
-         %76 = OpLoad %int %baseIndex
-         %78 = OpAccessChain %_ptr_Private_int %tree_1 %76 %uint_0
-         %79 = OpLoad %int %78
-         %80 = OpSLessThanEqual %bool %75 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %84 = OpLoad %int %baseIndex
-         %85 = OpAccessChain %_ptr_Private_int %tree_1 %84 %uint_1
-         %86 = OpLoad %int %85
-         %87 = OpIEqual %bool %86 %int_n1
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-         %91 = OpLoad %int %baseIndex
-         %93 = OpLoad %int %treeIndex
-         %94 = OpAccessChain %_ptr_Private_int %tree_1 %91 %uint_1
-               OpStore %94 %93
-         %96 = OpLoad %int %treeIndex
-         %98 = OpAccessChain %_ptr_Private_BST %tree_1 %96
-         %99 = OpLoad %BST %98
-               OpStore %param %99
-        %101 = OpLoad %int %data_1
-               OpStore %param_1 %101
-        %102 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-        %105 = OpLoad %BST %param
-        %106 = OpAccessChain %_ptr_Private_BST %tree_1 %96
-               OpStore %106 %105
-               OpReturn
-         %90 = OpLabel
-        %107 = OpLoad %int %baseIndex
-        %108 = OpAccessChain %_ptr_Private_int %tree_1 %107 %uint_1
-        %109 = OpLoad %int %108
-               OpStore %baseIndex %109
-               OpBranch %64
-         %88 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-        %110 = OpLoad %int %baseIndex
-        %111 = OpAccessChain %_ptr_Private_int %tree_1 %110 %uint_2
-        %112 = OpLoad %int %111
-        %113 = OpIEqual %bool %112 %int_n1
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %116
-        %115 = OpLabel
-        %117 = OpLoad %int %baseIndex
-        %119 = OpLoad %int %treeIndex
-        %120 = OpAccessChain %_ptr_Private_int %tree_1 %117 %uint_2
-               OpStore %120 %119
-        %122 = OpLoad %int %treeIndex
-        %123 = OpAccessChain %_ptr_Private_BST %tree_1 %122
-        %124 = OpLoad %BST %123
-               OpStore %param_2 %124
-        %126 = OpLoad %int %data_1
-               OpStore %param_3 %126
-        %127 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %130 = OpLoad %BST %param_2
-        %131 = OpAccessChain %_ptr_Private_BST %tree_1 %122
-               OpStore %131 %130
-               OpReturn
-        %116 = OpLabel
-               OpStore %GLF_live8i %int_1
-        %133 = OpLoad %int %GLF_live8i
-        %134 = OpLoad %int %GLF_live8i
-        %135 = OpLoad %int %GLF_live8i
-        %137 = OpSGreaterThanEqual %bool %133 %int_0
-        %139 = OpSLessThan %bool %134 %int_50
-        %140 = OpLogicalAnd %bool %137 %139
-        %136 = OpSelect %int %140 %135 %int_0
-        %142 = OpAccessChain %_ptr_Function_float %GLF_live8A %int_0
-        %143 = OpLoad %float %142
-        %144 = OpAccessChain %_ptr_Function_float %GLF_live8A %136
-        %145 = OpLoad %float %144
-        %146 = OpAccessChain %_ptr_Function_float %GLF_live8A %136
-        %147 = OpFAdd %float %145 %143
-               OpStore %146 %147
-               OpBranch %148
-        %148 = OpLabel
-               OpLoopMerge %149 %150 None
-               OpBranch %151
-        %151 = OpLabel
-        %152 = OpLoad %int %baseIndex
-        %153 = OpAccessChain %_ptr_Private_int %tree_1 %152 %uint_2
-        %154 = OpLoad %int %153
-               OpStore %baseIndex %154
-               OpBranch %150
-        %150 = OpLabel
-        %156 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_0
-        %157 = OpLoad %float %156
-        %158 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_1
-        %159 = OpLoad %float %158
-        %160 = OpFOrdGreaterThan %bool %157 %159
-               OpBranchConditional %160 %148 %149
-        %149 = OpLabel
-               OpBranch %64
-        %114 = OpLabel
-               OpBranch %81
-         %81 = OpLabel
-               OpBranch %64
-         %64 = OpLabel
-               OpBranch %62
-         %63 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %161
-     %target = OpFunctionParameter %_ptr_Function_int
-        %164 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %49
-%currentNode = OpVariable %_ptr_Function_BST Function %51
-      %x_387 = OpVariable %_ptr_Function_int Function %49
-               OpStore %index %int_0
-               OpBranch %168
-        %168 = OpLabel
-               OpLoopMerge %169 %170 None
-               OpBranch %171
-        %171 = OpLabel
-        %172 = OpLoad %int %index
-        %173 = OpINotEqual %bool %172 %int_n1
-               OpSelectionMerge %174 None
-               OpBranchConditional %173 %175 %176
-        %175 = OpLabel
-               OpBranch %174
-        %176 = OpLabel
-               OpBranch %169
-        %174 = OpLabel
-        %177 = OpLoad %int %index
-        %178 = OpAccessChain %_ptr_Private_BST %tree_1 %177
-        %179 = OpLoad %BST %178
-               OpStore %currentNode %179
-        %180 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %181 = OpLoad %int %180
-        %183 = OpLoad %int %target
-        %184 = OpIEqual %bool %181 %183
-               OpSelectionMerge %185 None
-               OpBranchConditional %184 %186 %185
-        %186 = OpLabel
-        %188 = OpLoad %int %target
-               OpReturnValue %188
-        %185 = OpLabel
-        %190 = OpLoad %int %target
-        %191 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %192 = OpLoad %int %191
-        %193 = OpSGreaterThan %bool %190 %192
-               OpSelectionMerge %194 None
-               OpBranchConditional %193 %195 %196
-        %195 = OpLabel
-        %197 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %198 = OpLoad %int %197
-               OpStore %x_387 %198
-               OpBranch %194
-        %196 = OpLabel
-        %199 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %200 = OpLoad %int %199
-               OpStore %x_387 %200
-               OpBranch %194
-        %194 = OpLabel
-        %201 = OpLoad %int %x_387
-               OpStore %index %201
-               OpBranch %170
-        %170 = OpLabel
-               OpBranch %168
-        %169 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-%makeFrame_f1_ = OpFunction %float None %202
-          %v = OpFunctionParameter %_ptr_Function_float
-        %205 = OpLabel
-    %param_5 = OpVariable %_ptr_Function_int Function %49
-    %param_6 = OpVariable %_ptr_Function_int Function %49
-    %param_7 = OpVariable %_ptr_Function_int Function %49
-        %210 = OpLoad %float %v
-        %213 = OpFMul %float %210 %float_6_5
-               OpStore %v %213
-        %215 = OpLoad %float %v
-        %217 = OpFOrdLessThan %bool %215 %float_1_5
-               OpSelectionMerge %218 None
-               OpBranchConditional %217 %219 %218
-        %219 = OpLabel
-               OpStore %param_5 %int_100
-        %221 = OpFunctionCall %int %search_i1_ %param_5
-        %223 = OpConvertSToF %float %221
-               OpReturnValue %223
-        %218 = OpLabel
-        %225 = OpLoad %float %v
-        %227 = OpFOrdLessThan %bool %225 %float_4
-               OpSelectionMerge %228 None
-               OpBranchConditional %227 %229 %228
-        %229 = OpLabel
-               OpReturnValue %float_0
-        %228 = OpLabel
-        %232 = OpLoad %float %v
-               OpStore %param_6 %int_6
-        %234 = OpFunctionCall %int %search_i1_ %param_6
-        %236 = OpConvertSToF %float %234
-        %237 = OpFOrdLessThan %bool %232 %236
-               OpSelectionMerge %238 None
-               OpBranchConditional %237 %239 %238
-        %239 = OpLabel
-               OpReturnValue %float_1
-        %238 = OpLabel
-               OpStore %param_7 %int_30
-        %242 = OpFunctionCall %int %search_i1_ %param_7
-        %245 = OpConvertSToF %float %242
-        %246 = OpFAdd %float %float_10 %245
-               OpReturnValue %246
-               OpFunctionEnd
-%hueColor_f1_ = OpFunction %v3float None %247
-      %angle = OpFunctionParameter %_ptr_Function_float
-        %251 = OpLabel
-   %nodeData = OpVariable %_ptr_Function_float Function %253
-    %param_4 = OpVariable %_ptr_Function_int Function %49
-               OpStore %param_4 %int_15
-        %256 = OpFunctionCall %int %search_i1_ %param_4
-        %258 = OpConvertSToF %float %256
-               OpStore %nodeData %258
-        %260 = OpLoad %float %angle
-        %261 = OpLoad %float %nodeData
-        %265 = OpCompositeConstruct %v3float %float_1 %float_5 %261
-        %266 = OpVectorTimesScalar %v3float %265 %260
-        %267 = OpFAdd %v3float %263 %266
-        %270 = OpFDiv %v3float %267 %269
-               OpReturnValue %270
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %271
-        %273 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %49
-    %param_8 = OpVariable %_ptr_Function_BST Function %51
-    %param_9 = OpVariable %_ptr_Function_int Function %49
-   %param_10 = OpVariable %_ptr_Function_int Function %49
-   %param_11 = OpVariable %_ptr_Function_int Function %49
-%GLF_live1_looplimiter2 = OpVariable %_ptr_Function_int Function %49
- %GLF_live1i = OpVariable %_ptr_Function_int Function %49
-   %param_12 = OpVariable %_ptr_Function_int Function %49
-   %param_13 = OpVariable %_ptr_Function_int Function %49
-   %param_14 = OpVariable %_ptr_Function_int Function %49
-   %param_15 = OpVariable %_ptr_Function_int Function %49
-   %param_16 = OpVariable %_ptr_Function_int Function %49
-   %param_17 = OpVariable %_ptr_Function_int Function %49
-   %param_18 = OpVariable %_ptr_Function_int Function %49
-   %param_19 = OpVariable %_ptr_Function_int Function %49
-   %param_20 = OpVariable %_ptr_Function_int Function %49
-   %param_21 = OpVariable %_ptr_Function_int Function %49
-   %param_22 = OpVariable %_ptr_Function_int Function %49
-   %param_23 = OpVariable %_ptr_Function_int Function %49
-%GLF_live4_looplimiter3 = OpVariable %_ptr_Function_int Function %49
- %GLF_live4i = OpVariable %_ptr_Function_int Function %49
-%GLF_live4index = OpVariable %_ptr_Function_int Function %49
-%GLF_live4obj = OpVariable %_ptr_Function_Obj Function %300
-   %param_24 = OpVariable %_ptr_Function_int Function %49
-   %param_25 = OpVariable %_ptr_Function_int Function %49
-   %param_26 = OpVariable %_ptr_Function_int Function %49
-   %param_27 = OpVariable %_ptr_Function_int Function %49
-          %z = OpVariable %_ptr_Function_v2float Function %307
-          %x = OpVariable %_ptr_Function_float Function %253
-   %param_28 = OpVariable %_ptr_Function_float Function %253
-          %y = OpVariable %_ptr_Function_float Function %253
-   %param_29 = OpVariable %_ptr_Function_float Function %253
-        %sum = OpVariable %_ptr_Function_int Function %49
-   %target_1 = OpVariable %_ptr_Function_int Function %49
-     %result = OpVariable %_ptr_Function_int Function %49
-   %param_30 = OpVariable %_ptr_Function_int Function %49
-          %a = OpVariable %_ptr_Function_float Function %253
-      %x_235 = OpVariable %_ptr_Function_v3float Function %319
-   %param_31 = OpVariable %_ptr_Function_float Function %253
-               OpStore %treeIndex_1 %int_0
-        %321 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-        %322 = OpLoad %BST %321
-               OpStore %param_8 %322
-               OpStore %param_9 %int_9
-        %324 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_8 %param_9
-        %327 = OpLoad %BST %param_8
-        %328 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-               OpStore %328 %327
-        %329 = OpLoad %int %treeIndex_1
-        %330 = OpIAdd %int %329 %int_1
-               OpStore %treeIndex_1 %330
-        %331 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %331
-               OpStore %param_11 %int_5
-        %333 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %336 = OpLoad %int %treeIndex_1
-        %337 = OpIAdd %int %336 %int_1
-               OpStore %treeIndex_1 %337
-               OpStore %GLF_live1_looplimiter2 %int_0
-               OpStore %GLF_live1i %int_0
-               OpBranch %338
-        %338 = OpLabel
-               OpLoopMerge %339 %340 None
-               OpBranch %341
-        %341 = OpLabel
-               OpSelectionMerge %343 None
-               OpBranchConditional %true %344 %345
-        %344 = OpLabel
-               OpBranch %343
-        %345 = OpLabel
-               OpBranch %339
-        %343 = OpLabel
-        %346 = OpLoad %int %GLF_live1_looplimiter2
-        %348 = OpSGreaterThanEqual %bool %346 %int_7
-               OpSelectionMerge %349 None
-               OpBranchConditional %348 %350 %349
-        %350 = OpLabel
-               OpBranch %339
-        %349 = OpLabel
-        %351 = OpLoad %int %GLF_live1_looplimiter2
-        %352 = OpIAdd %int %351 %int_1
-               OpStore %GLF_live1_looplimiter2 %352
-               OpBranch %340
-        %340 = OpLabel
-        %353 = OpLoad %int %GLF_live1i
-        %354 = OpIAdd %int %353 %int_1
-               OpStore %GLF_live1i %354
-               OpBranch %338
-        %339 = OpLabel
-        %355 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %355
-               OpStore %param_13 %int_12
-        %357 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %360 = OpLoad %int %treeIndex_1
-        %361 = OpIAdd %int %360 %int_1
-               OpStore %treeIndex_1 %361
-        %362 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %362
-               OpStore %param_15 %int_15
-        %363 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %366 = OpLoad %int %treeIndex_1
-        %367 = OpIAdd %int %366 %int_1
-               OpStore %treeIndex_1 %367
-        %368 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %368
-               OpStore %param_17 %int_7
-        %369 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %372 = OpLoad %int %treeIndex_1
-        %373 = OpIAdd %int %372 %int_1
-               OpStore %treeIndex_1 %373
-        %374 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %374
-               OpStore %param_19 %int_8
-        %376 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %379 = OpLoad %int %treeIndex_1
-        %380 = OpIAdd %int %379 %int_1
-               OpStore %treeIndex_1 %380
-        %381 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %381
-               OpStore %param_21 %int_2
-        %383 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %386 = OpLoad %int %treeIndex_1
-        %387 = OpIAdd %int %386 %int_1
-               OpStore %treeIndex_1 %387
-        %388 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %388
-               OpStore %param_23 %int_6
-        %389 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-        %392 = OpLoad %int %treeIndex_1
-        %393 = OpIAdd %int %392 %int_1
-               OpStore %treeIndex_1 %393
-               OpStore %GLF_live4_looplimiter3 %int_0
-               OpStore %GLF_live4i %int_0
-               OpBranch %394
-        %394 = OpLabel
-               OpLoopMerge %395 %396 None
-               OpBranch %397
-        %397 = OpLabel
-               OpSelectionMerge %398 None
-               OpBranchConditional %true %399 %400
-        %399 = OpLabel
-               OpBranch %398
-        %400 = OpLabel
-               OpBranch %395
-        %398 = OpLabel
-        %401 = OpLoad %int %GLF_live4_looplimiter3
-        %403 = OpSGreaterThanEqual %bool %401 %int_3
-               OpSelectionMerge %404 None
-               OpBranchConditional %403 %405 %404
-        %405 = OpLabel
-               OpBranch %395
-        %404 = OpLabel
-        %406 = OpLoad %int %GLF_live4_looplimiter3
-        %407 = OpIAdd %int %406 %int_1
-               OpStore %GLF_live4_looplimiter3 %407
-               OpStore %GLF_live4index %int_1
-        %408 = OpLoad %int %GLF_live4index
-        %409 = OpLoad %int %GLF_live4index
-        %410 = OpLoad %int %GLF_live4index
-        %411 = OpAccessChain %_ptr_Function_float %GLF_live4obj %uint_1 %int_1
-        %412 = OpLoad %float %411
-        %414 = OpSGreaterThanEqual %bool %408 %int_0
-        %416 = OpSLessThan %bool %409 %int_10
-        %417 = OpLogicalAnd %bool %414 %416
-        %413 = OpSelect %int %417 %410 %int_0
-        %418 = OpAccessChain %_ptr_Function_float %GLF_live4obj %uint_1 %413
-               OpStore %418 %412
-        %419 = OpLoad %int %GLF_live4i
-        %420 = OpLoad %int %GLF_live4i
-        %421 = OpLoad %int %GLF_live4i
-        %423 = OpSGreaterThanEqual %bool %419 %int_0
-        %424 = OpSLessThan %bool %420 %int_10
-        %425 = OpLogicalAnd %bool %423 %424
-        %422 = OpSelect %int %425 %421 %int_0
-        %426 = OpAccessChain %_ptr_Function_float %GLF_live4obj %uint_1 %422
-               OpStore %426 %float_1
-               OpBranch %396
-        %396 = OpLabel
-        %427 = OpLoad %int %GLF_live4i
-        %428 = OpIAdd %int %427 %int_1
-               OpStore %GLF_live4i %428
-               OpBranch %394
-        %395 = OpLabel
-        %429 = OpLoad %int %treeIndex_1
-               OpStore %param_24 %429
-               OpStore %param_25 %int_17
-        %431 = OpFunctionCall %void %insert_i1_i1_ %param_24 %param_25
-        %434 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_0
-        %435 = OpLoad %float %434
-        %436 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_1
-        %437 = OpLoad %float %436
-        %438 = OpFOrdGreaterThan %bool %435 %437
-               OpSelectionMerge %439 None
-               OpBranchConditional %438 %440 %439
-        %440 = OpLabel
-               OpReturn
-        %439 = OpLabel
-        %441 = OpLoad %int %treeIndex_1
-        %442 = OpIAdd %int %441 %int_1
-               OpStore %treeIndex_1 %442
-        %443 = OpLoad %int %treeIndex_1
-               OpStore %param_26 %443
-               OpStore %param_27 %int_13
-        %445 = OpFunctionCall %void %insert_i1_i1_ %param_26 %param_27
-        %448 = OpLoad %v4float %gl_FragCoord
-        %449 = OpCompositeExtract %float %448 1
-        %450 = OpCompositeExtract %float %448 0
-        %451 = OpCompositeConstruct %v2float %449 %450
-        %454 = OpFDiv %v2float %451 %453
-               OpStore %z %454
-        %455 = OpAccessChain %_ptr_Function_float %z %uint_0
-        %456 = OpLoad %float %455
-               OpStore %param_28 %456
-        %457 = OpFunctionCall %float %makeFrame_f1_ %param_28
-               OpStore %x %457
-        %459 = OpAccessChain %_ptr_Function_float %z %uint_1
-        %460 = OpLoad %float %459
-               OpStore %param_29 %460
-        %461 = OpFunctionCall %float %makeFrame_f1_ %param_29
-               OpStore %y %461
-               OpStore %sum %int_n100
-               OpStore %target_1 %int_0
-               OpBranch %464
-        %464 = OpLabel
-               OpLoopMerge %465 %466 None
-               OpBranch %467
-        %467 = OpLabel
-        %468 = OpLoad %int %target_1
-        %470 = OpSLessThan %bool %468 %int_20
-               OpSelectionMerge %471 None
-               OpBranchConditional %470 %472 %473
-        %472 = OpLabel
-               OpBranch %471
-        %473 = OpLabel
-               OpBranch %465
-        %471 = OpLabel
-        %474 = OpLoad %int %target_1
-               OpStore %param_30 %474
-        %475 = OpFunctionCall %int %search_i1_ %param_30
-               OpStore %result %475
-        %477 = OpLoad %int %result
-        %478 = OpSGreaterThan %bool %477 %int_0
-               OpSelectionMerge %479 None
-               OpBranchConditional %478 %480 %481
-        %480 = OpLabel
-               OpBranch %479
-        %481 = OpLabel
-        %482 = OpLoad %int %result
-               OpSelectionMerge %483 None
-               OpSwitch %482 %484 0 %485 -1 %486
-        %485 = OpLabel
-               OpReturn
-        %486 = OpLabel
-        %487 = OpLoad %int %sum
-        %488 = OpIAdd %int %487 %int_1
-               OpStore %sum %488
-               OpBranch %483
-        %484 = OpLabel
-               OpBranch %483
-        %483 = OpLabel
-               OpBranch %479
-        %479 = OpLabel
-               OpBranch %466
-        %466 = OpLabel
-        %489 = OpLoad %int %target_1
-        %490 = OpIAdd %int %489 %int_1
-               OpStore %target_1 %490
-               OpBranch %464
-        %465 = OpLabel
-        %491 = OpLoad %float %x
-        %492 = OpLoad %float %y
-        %493 = OpLoad %int %sum
-        %494 = OpConvertSToF %float %493
-        %495 = OpFMul %float %492 %494
-        %496 = OpFAdd %float %491 %495
-               OpStore %a %496
-        %497 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_0
-        %498 = OpLoad %float %497
-        %499 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_1
-        %500 = OpLoad %float %499
-        %501 = OpFOrdLessThan %bool %498 %500
-               OpSelectionMerge %502 None
-               OpBranchConditional %501 %503 %504
-        %503 = OpLabel
-               OpStore %x_235 %505
-               OpBranch %502
-        %504 = OpLabel
-        %506 = OpLoad %float %a
-               OpStore %param_31 %506
-        %507 = OpFunctionCall %v3float %hueColor_f1_ %param_31
-               OpStore %x_235 %507
-               OpBranch %502
-        %502 = OpLabel
-        %509 = OpLoad %v3float %x_235
-        %510 = OpCompositeExtract %float %509 0
-        %511 = OpCompositeExtract %float %509 1
-        %512 = OpCompositeExtract %float %509 2
-        %513 = OpCompositeConstruct %v4float %510 %511 %512 %float_1
-               OpStore %x_GLF_color %513
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %514
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %518 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %519 = OpFunctionCall %void %main_1
-        %520 = OpLoad %v4float %x_GLF_color
-        %521 = OpCompositeConstruct %main_out %520
-               OpReturnValue %521
-               OpFunctionEnd
-       %main = OpFunction %void None %271
-        %523 = OpLabel
-        %525 = OpLoad %v4float %gl_FragCoord_param_1
-        %524 = OpFunctionCall %main_out %main_inner %525
-        %526 = OpCompositeExtract %v4float %524 0
-               OpStore %x_GLF_color_1_1 %526
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9264f8a..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,420 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-struct Obj {
-  odd_numbers : array<f32, 10>;
-  even_numbers : array<f32, 10>;
-};
-
-var<private> tree_1 : array<BST, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_27 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_74 : i32 = *(data);
-  (*(tree)).data = x_74;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  var GLF_live8i : i32;
-  var GLF_live8A : array<f32, 50>;
-  baseIndex = 0;
-  loop {
-    let x_75 : i32 = baseIndex;
-    let x_76 : i32 = *(treeIndex);
-    if ((x_75 <= x_76)) {
-    } else {
-      break;
-    }
-    let x_77 : i32 = *(data_1);
-    let x_78 : i32 = baseIndex;
-    let x_79 : i32 = tree_1[x_78].data;
-    if ((x_77 <= x_79)) {
-      let x_80 : i32 = baseIndex;
-      let x_81 : i32 = tree_1[x_80].leftIndex;
-      if ((x_81 == -1)) {
-        let x_82 : i32 = baseIndex;
-        let x_83 : i32 = *(treeIndex);
-        tree_1[x_82].leftIndex = x_83;
-        let x_84 : i32 = *(treeIndex);
-        let x_350 : BST = tree_1[x_84];
-        param = x_350;
-        let x_85 : i32 = *(data_1);
-        param_1 = x_85;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_352 : BST = param;
-        tree_1[x_84] = x_352;
-        return;
-      } else {
-        let x_86 : i32 = baseIndex;
-        let x_87 : i32 = tree_1[x_86].leftIndex;
-        baseIndex = x_87;
-        continue;
-      }
-    } else {
-      let x_88 : i32 = baseIndex;
-      let x_89 : i32 = tree_1[x_88].rightIndex;
-      if ((x_89 == -1)) {
-        let x_90 : i32 = baseIndex;
-        let x_91 : i32 = *(treeIndex);
-        tree_1[x_90].rightIndex = x_91;
-        let x_92 : i32 = *(treeIndex);
-        let x_362 : BST = tree_1[x_92];
-        param_2 = x_362;
-        let x_93 : i32 = *(data_1);
-        param_3 = x_93;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_364 : BST = param_2;
-        tree_1[x_92] = x_364;
-        return;
-      } else {
-        GLF_live8i = 1;
-        let x_94 : i32 = GLF_live8i;
-        let x_95 : i32 = GLF_live8i;
-        let x_96 : i32 = GLF_live8i;
-        let x_369 : i32 = select(0, x_96, ((x_94 >= 0) & (x_95 < 50)));
-        let x_371 : f32 = GLF_live8A[0];
-        let x_373 : f32 = GLF_live8A[x_369];
-        GLF_live8A[x_369] = (x_373 + x_371);
-        loop {
-          let x_97 : i32 = baseIndex;
-          let x_98 : i32 = tree_1[x_97].rightIndex;
-          baseIndex = x_98;
-
-          continuing {
-            let x_382 : f32 = x_27.injectionSwitch.x;
-            let x_384 : f32 = x_27.injectionSwitch.y;
-            if ((x_382 > x_384)) {
-            } else {
-              break;
-            }
-          }
-        }
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_387 : i32;
-  index = 0;
-  loop {
-    let x_99 : i32 = index;
-    if ((x_99 != -1)) {
-    } else {
-      break;
-    }
-    let x_100 : i32 = index;
-    let x_395 : BST = tree_1[x_100];
-    currentNode = x_395;
-    let x_101 : i32 = currentNode.data;
-    let x_102 : i32 = *(target);
-    if ((x_101 == x_102)) {
-      let x_103 : i32 = *(target);
-      return x_103;
-    }
-    let x_104 : i32 = *(target);
-    let x_105 : i32 = currentNode.data;
-    if ((x_104 > x_105)) {
-      let x_106 : i32 = currentNode.rightIndex;
-      x_387 = x_106;
-    } else {
-      let x_107 : i32 = currentNode.leftIndex;
-      x_387 = x_107;
-    }
-    let x_108 : i32 = x_387;
-    index = x_108;
-  }
-  return -1;
-}
-
-fn makeFrame_f1_(v : ptr<function, f32>) -> f32 {
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  let x_418 : f32 = *(v);
-  *(v) = (x_418 * 6.5);
-  let x_420 : f32 = *(v);
-  if ((x_420 < 1.5)) {
-    param_5 = 100;
-    let x_110 : i32 = search_i1_(&(param_5));
-    return f32(x_110);
-  }
-  let x_425 : f32 = *(v);
-  if ((x_425 < 4.0)) {
-    return 0.0;
-  }
-  let x_429 : f32 = *(v);
-  param_6 = 6;
-  let x_111 : i32 = search_i1_(&(param_6));
-  if ((x_429 < f32(x_111))) {
-    return 1.0;
-  }
-  param_7 = 30;
-  let x_112 : i32 = search_i1_(&(param_7));
-  return (10.0 + f32(x_112));
-}
-
-fn hueColor_f1_(angle : ptr<function, f32>) -> vec3<f32> {
-  var nodeData : f32;
-  var param_4 : i32;
-  param_4 = 15;
-  let x_109 : i32 = search_i1_(&(param_4));
-  nodeData = f32(x_109);
-  let x_409 : f32 = *(angle);
-  let x_410 : f32 = nodeData;
-  return ((vec3<f32>(30.0, 30.0, 30.0) + (vec3<f32>(1.0, 5.0, x_410) * x_409)) / vec3<f32>(50.0, 50.0, 50.0));
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_8 : BST;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var GLF_live1_looplimiter2 : i32;
-  var GLF_live1i : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var GLF_live4_looplimiter3 : i32;
-  var GLF_live4i : i32;
-  var GLF_live4index : i32;
-  var GLF_live4obj : Obj;
-  var param_24 : i32;
-  var param_25 : i32;
-  var param_26 : i32;
-  var param_27 : i32;
-  var z : vec2<f32>;
-  var x : f32;
-  var param_28 : f32;
-  var y : f32;
-  var param_29 : f32;
-  var sum : i32;
-  var target_1 : i32;
-  var result : i32;
-  var param_30 : i32;
-  var a : f32;
-  var x_235 : vec3<f32>;
-  var param_31 : f32;
-  treeIndex_1 = 0;
-  let x_237 : BST = tree_1[0];
-  param_8 = x_237;
-  param_9 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_8), &(param_9));
-  let x_239 : BST = param_8;
-  tree_1[0] = x_239;
-  let x_113 : i32 = treeIndex_1;
-  treeIndex_1 = (x_113 + 1);
-  let x_115 : i32 = treeIndex_1;
-  param_10 = x_115;
-  param_11 = 5;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_116 : i32 = treeIndex_1;
-  treeIndex_1 = (x_116 + 1);
-  GLF_live1_looplimiter2 = 0;
-  GLF_live1i = 0;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    let x_118 : i32 = GLF_live1_looplimiter2;
-    if ((x_118 >= 7)) {
-      break;
-    }
-    let x_119 : i32 = GLF_live1_looplimiter2;
-    GLF_live1_looplimiter2 = (x_119 + 1);
-
-    continuing {
-      let x_121 : i32 = GLF_live1i;
-      GLF_live1i = (x_121 + 1);
-    }
-  }
-  let x_123 : i32 = treeIndex_1;
-  param_12 = x_123;
-  param_13 = 12;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_124 : i32 = treeIndex_1;
-  treeIndex_1 = (x_124 + 1);
-  let x_126 : i32 = treeIndex_1;
-  param_14 = x_126;
-  param_15 = 15;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_127 : i32 = treeIndex_1;
-  treeIndex_1 = (x_127 + 1);
-  let x_129 : i32 = treeIndex_1;
-  param_16 = x_129;
-  param_17 = 7;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_130 : i32 = treeIndex_1;
-  treeIndex_1 = (x_130 + 1);
-  let x_132 : i32 = treeIndex_1;
-  param_18 = x_132;
-  param_19 = 8;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_133 : i32 = treeIndex_1;
-  treeIndex_1 = (x_133 + 1);
-  let x_135 : i32 = treeIndex_1;
-  param_20 = x_135;
-  param_21 = 2;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_136 : i32 = treeIndex_1;
-  treeIndex_1 = (x_136 + 1);
-  let x_138 : i32 = treeIndex_1;
-  param_22 = x_138;
-  param_23 = 6;
-  insert_i1_i1_(&(param_22), &(param_23));
-  let x_139 : i32 = treeIndex_1;
-  treeIndex_1 = (x_139 + 1);
-  GLF_live4_looplimiter3 = 0;
-  GLF_live4i = 0;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    let x_141 : i32 = GLF_live4_looplimiter3;
-    if ((x_141 >= 3)) {
-      break;
-    }
-    let x_142 : i32 = GLF_live4_looplimiter3;
-    GLF_live4_looplimiter3 = (x_142 + 1);
-    GLF_live4index = 1;
-    let x_144 : i32 = GLF_live4index;
-    let x_145 : i32 = GLF_live4index;
-    let x_146 : i32 = GLF_live4index;
-    let x_269 : f32 = GLF_live4obj.even_numbers[1];
-    GLF_live4obj.even_numbers[select(0, x_146, ((x_144 >= 0) & (x_145 < 10)))] = x_269;
-    let x_147 : i32 = GLF_live4i;
-    let x_148 : i32 = GLF_live4i;
-    let x_149 : i32 = GLF_live4i;
-    GLF_live4obj.even_numbers[select(0, x_149, ((x_147 >= 0) & (x_148 < 10)))] = 1.0;
-
-    continuing {
-      let x_150 : i32 = GLF_live4i;
-      GLF_live4i = (x_150 + 1);
-    }
-  }
-  let x_152 : i32 = treeIndex_1;
-  param_24 = x_152;
-  param_25 = 17;
-  insert_i1_i1_(&(param_24), &(param_25));
-  let x_278 : f32 = x_27.injectionSwitch.x;
-  let x_280 : f32 = x_27.injectionSwitch.y;
-  if ((x_278 > x_280)) {
-    return;
-  }
-  let x_153 : i32 = treeIndex_1;
-  treeIndex_1 = (x_153 + 1);
-  let x_155 : i32 = treeIndex_1;
-  param_26 = x_155;
-  param_27 = 13;
-  insert_i1_i1_(&(param_26), &(param_27));
-  let x_285 : vec4<f32> = gl_FragCoord;
-  z = (vec2<f32>(x_285.y, x_285.x) / vec2<f32>(256.0, 256.0));
-  let x_289 : f32 = z.x;
-  param_28 = x_289;
-  let x_290 : f32 = makeFrame_f1_(&(param_28));
-  x = x_290;
-  let x_292 : f32 = z.y;
-  param_29 = x_292;
-  let x_293 : f32 = makeFrame_f1_(&(param_29));
-  y = x_293;
-  sum = -100;
-  target_1 = 0;
-  loop {
-    let x_156 : i32 = target_1;
-    if ((x_156 < 20)) {
-    } else {
-      break;
-    }
-    let x_157 : i32 = target_1;
-    param_30 = x_157;
-    let x_158 : i32 = search_i1_(&(param_30));
-    result = x_158;
-    let x_159 : i32 = result;
-    if ((x_159 > 0)) {
-    } else {
-      let x_160 : i32 = result;
-      switch(x_160) {
-        case 0: {
-          return;
-        }
-        case -1: {
-          let x_161 : i32 = sum;
-          sum = (x_161 + 1);
-        }
-        default: {
-        }
-      }
-    }
-
-    continuing {
-      let x_163 : i32 = target_1;
-      target_1 = (x_163 + 1);
-    }
-  }
-  let x_307 : f32 = x;
-  let x_308 : f32 = y;
-  let x_165 : i32 = sum;
-  a = (x_307 + (x_308 * f32(x_165)));
-  let x_313 : f32 = x_27.injectionSwitch.x;
-  let x_315 : f32 = x_27.injectionSwitch.y;
-  if ((x_313 < x_315)) {
-    x_235 = vec3<f32>(1.0, 0.0, 0.0);
-  } else {
-    let x_320 : f32 = a;
-    param_31 = x_320;
-    let x_321 : vec3<f32> = hueColor_f1_(&(param_31));
-    x_235 = x_321;
-  }
-  let x_322 : vec3<f32> = x_235;
-  x_GLF_color = vec4<f32>(x_322.x, x_322.y, x_322.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4e34538..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,369 +0,0 @@
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct Obj {
-  float odd_numbers[10];
-  float even_numbers[10];
-};
-
-static BST tree_1[10] = (BST[10])0;
-cbuffer cbuffer_x_27 : register(b0, space0) {
-  uint4 x_27[1];
-};
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(inout BST tree, inout int data) {
-  const int x_74 = data;
-  tree.data = x_74;
-  tree.leftIndex = -1;
-  tree.rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(inout int treeIndex, inout int data_1) {
-  int baseIndex = 0;
-  BST param = (BST)0;
-  int param_1 = 0;
-  BST param_2 = (BST)0;
-  int param_3 = 0;
-  int GLF_live8i = 0;
-  float GLF_live8A[50] = (float[50])0;
-  baseIndex = 0;
-  while (true) {
-    const int x_75 = baseIndex;
-    const int x_76 = treeIndex;
-    if ((x_75 <= x_76)) {
-    } else {
-      break;
-    }
-    const int x_77 = data_1;
-    const int x_79 = tree_1[baseIndex].data;
-    if ((x_77 <= x_79)) {
-      const int x_81 = tree_1[baseIndex].leftIndex;
-      if ((x_81 == -1)) {
-        const int x_82 = baseIndex;
-        const int x_83 = treeIndex;
-        tree_1[x_82].leftIndex = x_83;
-        const int x_84 = treeIndex;
-        const BST x_350 = tree_1[x_84];
-        param = x_350;
-        const int x_85 = data_1;
-        param_1 = x_85;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param, param_1);
-        tree_1[x_84] = param;
-        return;
-      } else {
-        const int x_87 = tree_1[baseIndex].leftIndex;
-        baseIndex = x_87;
-        continue;
-      }
-    } else {
-      const int x_89 = tree_1[baseIndex].rightIndex;
-      if ((x_89 == -1)) {
-        const int x_90 = baseIndex;
-        const int x_91 = treeIndex;
-        tree_1[x_90].rightIndex = x_91;
-        const int x_92 = treeIndex;
-        const BST x_362 = tree_1[x_92];
-        param_2 = x_362;
-        const int x_93 = data_1;
-        param_3 = x_93;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(param_2, param_3);
-        tree_1[x_92] = param_2;
-        return;
-      } else {
-        GLF_live8i = 1;
-        bool tint_tmp = (GLF_live8i >= 0);
-        if (tint_tmp) {
-          tint_tmp = (GLF_live8i < 50);
-        }
-        const int x_369 = ((tint_tmp) ? GLF_live8i : 0);
-        const float x_371 = GLF_live8A[0];
-        const float x_373 = GLF_live8A[x_369];
-        GLF_live8A[x_369] = (x_373 + x_371);
-        while (true) {
-          const int x_98 = tree_1[baseIndex].rightIndex;
-          baseIndex = x_98;
-          {
-            const float x_382 = asfloat(x_27[0].x);
-            const float x_384 = asfloat(x_27[0].y);
-            if ((x_382 > x_384)) {
-            } else {
-              break;
-            }
-          }
-        }
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-int search_i1_(inout int target) {
-  int index = 0;
-  BST currentNode = (BST)0;
-  int x_387 = 0;
-  index = 0;
-  while (true) {
-    if ((index != -1)) {
-    } else {
-      break;
-    }
-    const BST x_395 = tree_1[index];
-    currentNode = x_395;
-    const int x_101 = currentNode.data;
-    const int x_102 = target;
-    if ((x_101 == x_102)) {
-      const int x_103 = target;
-      return x_103;
-    }
-    const int x_104 = target;
-    const int x_105 = currentNode.data;
-    if ((x_104 > x_105)) {
-      const int x_106 = currentNode.rightIndex;
-      x_387 = x_106;
-    } else {
-      const int x_107 = currentNode.leftIndex;
-      x_387 = x_107;
-    }
-    index = x_387;
-  }
-  return -1;
-}
-
-float makeFrame_f1_(inout float v) {
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  const float x_418 = v;
-  v = (x_418 * 6.5f);
-  const float x_420 = v;
-  if ((x_420 < 1.5f)) {
-    param_5 = 100;
-    const int x_110 = search_i1_(param_5);
-    return float(x_110);
-  }
-  const float x_425 = v;
-  if ((x_425 < 4.0f)) {
-    return 0.0f;
-  }
-  const float x_429 = v;
-  param_6 = 6;
-  const int x_111 = search_i1_(param_6);
-  if ((x_429 < float(x_111))) {
-    return 1.0f;
-  }
-  param_7 = 30;
-  const int x_112 = search_i1_(param_7);
-  return (10.0f + float(x_112));
-}
-
-float3 hueColor_f1_(inout float angle) {
-  float nodeData = 0.0f;
-  int param_4 = 0;
-  param_4 = 15;
-  const int x_109 = search_i1_(param_4);
-  nodeData = float(x_109);
-  const float x_409 = angle;
-  return ((float3(30.0f, 30.0f, 30.0f) + (float3(1.0f, 5.0f, nodeData) * x_409)) / float3(50.0f, 50.0f, 50.0f));
-}
-
-void main_1() {
-  int treeIndex_1 = 0;
-  BST param_8 = (BST)0;
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int GLF_live1_looplimiter2 = 0;
-  int GLF_live1i = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int GLF_live4_looplimiter3 = 0;
-  int GLF_live4i = 0;
-  int GLF_live4index = 0;
-  Obj GLF_live4obj = (Obj)0;
-  int param_24 = 0;
-  int param_25 = 0;
-  int param_26 = 0;
-  int param_27 = 0;
-  float2 z = float2(0.0f, 0.0f);
-  float x_1 = 0.0f;
-  float param_28 = 0.0f;
-  float y_1 = 0.0f;
-  float param_29 = 0.0f;
-  int sum = 0;
-  int target_1 = 0;
-  int result = 0;
-  int param_30 = 0;
-  float a = 0.0f;
-  float3 x_235 = float3(0.0f, 0.0f, 0.0f);
-  float param_31 = 0.0f;
-  treeIndex_1 = 0;
-  const BST x_237 = tree_1[0];
-  param_8 = x_237;
-  param_9 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(param_8, param_9);
-  tree_1[0] = param_8;
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_10 = treeIndex_1;
-  param_11 = 5;
-  insert_i1_i1_(param_10, param_11);
-  treeIndex_1 = (treeIndex_1 + 1);
-  GLF_live1_looplimiter2 = 0;
-  GLF_live1i = 0;
-  {
-    for(; true; GLF_live1i = (GLF_live1i + 1)) {
-      if ((GLF_live1_looplimiter2 >= 7)) {
-        break;
-      }
-      GLF_live1_looplimiter2 = (GLF_live1_looplimiter2 + 1);
-    }
-  }
-  param_12 = treeIndex_1;
-  param_13 = 12;
-  insert_i1_i1_(param_12, param_13);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_14 = treeIndex_1;
-  param_15 = 15;
-  insert_i1_i1_(param_14, param_15);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_16 = treeIndex_1;
-  param_17 = 7;
-  insert_i1_i1_(param_16, param_17);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_18 = treeIndex_1;
-  param_19 = 8;
-  insert_i1_i1_(param_18, param_19);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_20 = treeIndex_1;
-  param_21 = 2;
-  insert_i1_i1_(param_20, param_21);
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_22 = treeIndex_1;
-  param_23 = 6;
-  insert_i1_i1_(param_22, param_23);
-  treeIndex_1 = (treeIndex_1 + 1);
-  GLF_live4_looplimiter3 = 0;
-  GLF_live4i = 0;
-  {
-    for(; true; GLF_live4i = (GLF_live4i + 1)) {
-      if ((GLF_live4_looplimiter3 >= 3)) {
-        break;
-      }
-      GLF_live4_looplimiter3 = (GLF_live4_looplimiter3 + 1);
-      GLF_live4index = 1;
-      const int x_144 = GLF_live4index;
-      const int x_145 = GLF_live4index;
-      const int x_146 = GLF_live4index;
-      const float x_269 = GLF_live4obj.even_numbers[1];
-      bool tint_tmp_1 = (x_144 >= 0);
-      if (tint_tmp_1) {
-        tint_tmp_1 = (x_145 < 10);
-      }
-      GLF_live4obj.even_numbers[((tint_tmp_1) ? x_146 : 0)] = x_269;
-      bool tint_tmp_2 = (GLF_live4i >= 0);
-      if (tint_tmp_2) {
-        tint_tmp_2 = (GLF_live4i < 10);
-      }
-      GLF_live4obj.even_numbers[((tint_tmp_2) ? GLF_live4i : 0)] = 1.0f;
-    }
-  }
-  param_24 = treeIndex_1;
-  param_25 = 17;
-  insert_i1_i1_(param_24, param_25);
-  const float x_278 = asfloat(x_27[0].x);
-  const float x_280 = asfloat(x_27[0].y);
-  if ((x_278 > x_280)) {
-    return;
-  }
-  treeIndex_1 = (treeIndex_1 + 1);
-  param_26 = treeIndex_1;
-  param_27 = 13;
-  insert_i1_i1_(param_26, param_27);
-  const float4 x_285 = gl_FragCoord;
-  z = (float2(x_285.y, x_285.x) / float2(256.0f, 256.0f));
-  const float x_289 = z.x;
-  param_28 = x_289;
-  const float x_290 = makeFrame_f1_(param_28);
-  x_1 = x_290;
-  const float x_292 = z.y;
-  param_29 = x_292;
-  const float x_293 = makeFrame_f1_(param_29);
-  y_1 = x_293;
-  sum = -100;
-  target_1 = 0;
-  {
-    for(; (target_1 < 20); target_1 = (target_1 + 1)) {
-      param_30 = target_1;
-      const int x_158 = search_i1_(param_30);
-      result = x_158;
-      if ((result > 0)) {
-      } else {
-        switch(result) {
-          case 0: {
-            return;
-            break;
-          }
-          case -1: {
-            sum = (sum + 1);
-            break;
-          }
-          default: {
-            break;
-          }
-        }
-      }
-    }
-  }
-  a = (x_1 + (y_1 * float(sum)));
-  const float x_313 = asfloat(x_27[0].x);
-  const float x_315 = asfloat(x_27[0].y);
-  if ((x_313 < x_315)) {
-    x_235 = float3(1.0f, 0.0f, 0.0f);
-  } else {
-    param_31 = a;
-    const float3 x_321 = hueColor_f1_(param_31);
-    x_235 = x_321;
-  }
-  const float3 x_322 = x_235;
-  x_GLF_color = float4(x_322.x, x_322.y, x_322.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_GLF_color};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.msl
deleted file mode 100644
index e752031..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,432 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct BST {
-  int data;
-  int leftIndex;
-  int rightIndex;
-};
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct tint_array_wrapper {
-  float arr[10];
-};
-struct Obj {
-  tint_array_wrapper odd_numbers;
-  tint_array_wrapper even_numbers;
-};
-struct tint_array_wrapper_1 {
-  BST arr[10];
-};
-struct tint_array_wrapper_2 {
-  float arr[50];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void makeTreeNode_struct_BST_i1_i1_i11_i1_(thread BST* const tree, thread int* const data) {
-  int const x_74 = *(data);
-  (*(tree)).data = x_74;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-void insert_i1_i1_(constant buf0& x_27, thread int* const treeIndex, thread int* const data_1, thread tint_array_wrapper_1* const tint_symbol_3) {
-  int baseIndex = 0;
-  BST param = {};
-  int param_1 = 0;
-  BST param_2 = {};
-  int param_3 = 0;
-  int GLF_live8i = 0;
-  tint_array_wrapper_2 GLF_live8A = {};
-  baseIndex = 0;
-  while (true) {
-    int const x_75 = baseIndex;
-    int const x_76 = *(treeIndex);
-    if ((x_75 <= x_76)) {
-    } else {
-      break;
-    }
-    int const x_77 = *(data_1);
-    int const x_78 = baseIndex;
-    int const x_79 = (*(tint_symbol_3)).arr[x_78].data;
-    if ((x_77 <= x_79)) {
-      int const x_80 = baseIndex;
-      int const x_81 = (*(tint_symbol_3)).arr[x_80].leftIndex;
-      if ((x_81 == -1)) {
-        int const x_82 = baseIndex;
-        int const x_83 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_82].leftIndex = x_83;
-        int const x_84 = *(treeIndex);
-        BST const x_350 = (*(tint_symbol_3)).arr[x_84];
-        param = x_350;
-        int const x_85 = *(data_1);
-        param_1 = x_85;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        BST const x_352 = param;
-        (*(tint_symbol_3)).arr[x_84] = x_352;
-        return;
-      } else {
-        int const x_86 = baseIndex;
-        int const x_87 = (*(tint_symbol_3)).arr[x_86].leftIndex;
-        baseIndex = x_87;
-        continue;
-      }
-    } else {
-      int const x_88 = baseIndex;
-      int const x_89 = (*(tint_symbol_3)).arr[x_88].rightIndex;
-      if ((x_89 == -1)) {
-        int const x_90 = baseIndex;
-        int const x_91 = *(treeIndex);
-        (*(tint_symbol_3)).arr[x_90].rightIndex = x_91;
-        int const x_92 = *(treeIndex);
-        BST const x_362 = (*(tint_symbol_3)).arr[x_92];
-        param_2 = x_362;
-        int const x_93 = *(data_1);
-        param_3 = x_93;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        BST const x_364 = param_2;
-        (*(tint_symbol_3)).arr[x_92] = x_364;
-        return;
-      } else {
-        GLF_live8i = 1;
-        int const x_94 = GLF_live8i;
-        int const x_95 = GLF_live8i;
-        int const x_96 = GLF_live8i;
-        int const x_369 = select(0, x_96, ((x_94 >= 0) && (x_95 < 50)));
-        float const x_371 = GLF_live8A.arr[0];
-        float const x_373 = GLF_live8A.arr[x_369];
-        GLF_live8A.arr[x_369] = (x_373 + x_371);
-        while (true) {
-          int const x_97 = baseIndex;
-          int const x_98 = (*(tint_symbol_3)).arr[x_97].rightIndex;
-          baseIndex = x_98;
-          {
-            float const x_382 = x_27.injectionSwitch.x;
-            float const x_384 = x_27.injectionSwitch.y;
-            if ((x_382 > x_384)) {
-            } else {
-              break;
-            }
-          }
-        }
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-int search_i1_(thread int* const target, thread tint_array_wrapper_1* const tint_symbol_4) {
-  int index = 0;
-  BST currentNode = {};
-  int x_387 = 0;
-  index = 0;
-  while (true) {
-    int const x_99 = index;
-    if ((x_99 != -1)) {
-    } else {
-      break;
-    }
-    int const x_100 = index;
-    BST const x_395 = (*(tint_symbol_4)).arr[x_100];
-    currentNode = x_395;
-    int const x_101 = currentNode.data;
-    int const x_102 = *(target);
-    if ((x_101 == x_102)) {
-      int const x_103 = *(target);
-      return x_103;
-    }
-    int const x_104 = *(target);
-    int const x_105 = currentNode.data;
-    if ((x_104 > x_105)) {
-      int const x_106 = currentNode.rightIndex;
-      x_387 = x_106;
-    } else {
-      int const x_107 = currentNode.leftIndex;
-      x_387 = x_107;
-    }
-    int const x_108 = x_387;
-    index = x_108;
-  }
-  return -1;
-}
-
-float makeFrame_f1_(thread float* const v, thread tint_array_wrapper_1* const tint_symbol_5) {
-  int param_5 = 0;
-  int param_6 = 0;
-  int param_7 = 0;
-  float const x_418 = *(v);
-  *(v) = (x_418 * 6.5f);
-  float const x_420 = *(v);
-  if ((x_420 < 1.5f)) {
-    param_5 = 100;
-    int const x_110 = search_i1_(&(param_5), tint_symbol_5);
-    return float(x_110);
-  }
-  float const x_425 = *(v);
-  if ((x_425 < 4.0f)) {
-    return 0.0f;
-  }
-  float const x_429 = *(v);
-  param_6 = 6;
-  int const x_111 = search_i1_(&(param_6), tint_symbol_5);
-  if ((x_429 < float(x_111))) {
-    return 1.0f;
-  }
-  param_7 = 30;
-  int const x_112 = search_i1_(&(param_7), tint_symbol_5);
-  return (10.0f + float(x_112));
-}
-
-float3 hueColor_f1_(thread float* const angle, thread tint_array_wrapper_1* const tint_symbol_6) {
-  float nodeData = 0.0f;
-  int param_4 = 0;
-  param_4 = 15;
-  int const x_109 = search_i1_(&(param_4), tint_symbol_6);
-  nodeData = float(x_109);
-  float const x_409 = *(angle);
-  float const x_410 = nodeData;
-  return ((float3(30.0f, 30.0f, 30.0f) + (float3(1.0f, 5.0f, x_410) * x_409)) / float3(50.0f, 50.0f, 50.0f));
-}
-
-void main_1(constant buf0& x_27, thread tint_array_wrapper_1* const tint_symbol_7, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9) {
-  int treeIndex_1 = 0;
-  BST param_8 = {};
-  int param_9 = 0;
-  int param_10 = 0;
-  int param_11 = 0;
-  int GLF_live1_looplimiter2 = 0;
-  int GLF_live1i = 0;
-  int param_12 = 0;
-  int param_13 = 0;
-  int param_14 = 0;
-  int param_15 = 0;
-  int param_16 = 0;
-  int param_17 = 0;
-  int param_18 = 0;
-  int param_19 = 0;
-  int param_20 = 0;
-  int param_21 = 0;
-  int param_22 = 0;
-  int param_23 = 0;
-  int GLF_live4_looplimiter3 = 0;
-  int GLF_live4i = 0;
-  int GLF_live4index = 0;
-  Obj GLF_live4obj = {};
-  int param_24 = 0;
-  int param_25 = 0;
-  int param_26 = 0;
-  int param_27 = 0;
-  float2 z = 0.0f;
-  float x_1 = 0.0f;
-  float param_28 = 0.0f;
-  float y_1 = 0.0f;
-  float param_29 = 0.0f;
-  int sum = 0;
-  int target_1 = 0;
-  int result = 0;
-  int param_30 = 0;
-  float a = 0.0f;
-  float3 x_235 = 0.0f;
-  float param_31 = 0.0f;
-  treeIndex_1 = 0;
-  BST const x_237 = (*(tint_symbol_7)).arr[0];
-  param_8 = x_237;
-  param_9 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_8), &(param_9));
-  BST const x_239 = param_8;
-  (*(tint_symbol_7)).arr[0] = x_239;
-  int const x_113 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_113) + as_type<uint>(1)));
-  int const x_115 = treeIndex_1;
-  param_10 = x_115;
-  param_11 = 5;
-  insert_i1_i1_(x_27, &(param_10), &(param_11), tint_symbol_7);
-  int const x_116 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_116) + as_type<uint>(1)));
-  GLF_live1_looplimiter2 = 0;
-  GLF_live1i = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    int const x_118 = GLF_live1_looplimiter2;
-    if ((x_118 >= 7)) {
-      break;
-    }
-    int const x_119 = GLF_live1_looplimiter2;
-    GLF_live1_looplimiter2 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-    {
-      int const x_121 = GLF_live1i;
-      GLF_live1i = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
-    }
-  }
-  int const x_123 = treeIndex_1;
-  param_12 = x_123;
-  param_13 = 12;
-  insert_i1_i1_(x_27, &(param_12), &(param_13), tint_symbol_7);
-  int const x_124 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
-  int const x_126 = treeIndex_1;
-  param_14 = x_126;
-  param_15 = 15;
-  insert_i1_i1_(x_27, &(param_14), &(param_15), tint_symbol_7);
-  int const x_127 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
-  int const x_129 = treeIndex_1;
-  param_16 = x_129;
-  param_17 = 7;
-  insert_i1_i1_(x_27, &(param_16), &(param_17), tint_symbol_7);
-  int const x_130 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_130) + as_type<uint>(1)));
-  int const x_132 = treeIndex_1;
-  param_18 = x_132;
-  param_19 = 8;
-  insert_i1_i1_(x_27, &(param_18), &(param_19), tint_symbol_7);
-  int const x_133 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_133) + as_type<uint>(1)));
-  int const x_135 = treeIndex_1;
-  param_20 = x_135;
-  param_21 = 2;
-  insert_i1_i1_(x_27, &(param_20), &(param_21), tint_symbol_7);
-  int const x_136 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_136) + as_type<uint>(1)));
-  int const x_138 = treeIndex_1;
-  param_22 = x_138;
-  param_23 = 6;
-  insert_i1_i1_(x_27, &(param_22), &(param_23), tint_symbol_7);
-  int const x_139 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_139) + as_type<uint>(1)));
-  GLF_live4_looplimiter3 = 0;
-  GLF_live4i = 0;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    int const x_141 = GLF_live4_looplimiter3;
-    if ((x_141 >= 3)) {
-      break;
-    }
-    int const x_142 = GLF_live4_looplimiter3;
-    GLF_live4_looplimiter3 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
-    GLF_live4index = 1;
-    int const x_144 = GLF_live4index;
-    int const x_145 = GLF_live4index;
-    int const x_146 = GLF_live4index;
-    float const x_269 = GLF_live4obj.even_numbers.arr[1];
-    GLF_live4obj.even_numbers.arr[select(0, x_146, ((x_144 >= 0) && (x_145 < 10)))] = x_269;
-    int const x_147 = GLF_live4i;
-    int const x_148 = GLF_live4i;
-    int const x_149 = GLF_live4i;
-    GLF_live4obj.even_numbers.arr[select(0, x_149, ((x_147 >= 0) && (x_148 < 10)))] = 1.0f;
-    {
-      int const x_150 = GLF_live4i;
-      GLF_live4i = as_type<int>((as_type<uint>(x_150) + as_type<uint>(1)));
-    }
-  }
-  int const x_152 = treeIndex_1;
-  param_24 = x_152;
-  param_25 = 17;
-  insert_i1_i1_(x_27, &(param_24), &(param_25), tint_symbol_7);
-  float const x_278 = x_27.injectionSwitch.x;
-  float const x_280 = x_27.injectionSwitch.y;
-  if ((x_278 > x_280)) {
-    return;
-  }
-  int const x_153 = treeIndex_1;
-  treeIndex_1 = as_type<int>((as_type<uint>(x_153) + as_type<uint>(1)));
-  int const x_155 = treeIndex_1;
-  param_26 = x_155;
-  param_27 = 13;
-  insert_i1_i1_(x_27, &(param_26), &(param_27), tint_symbol_7);
-  float4 const x_285 = *(tint_symbol_8);
-  z = (float2(x_285.y, x_285.x) / float2(256.0f, 256.0f));
-  float const x_289 = z.x;
-  param_28 = x_289;
-  float const x_290 = makeFrame_f1_(&(param_28), tint_symbol_7);
-  x_1 = x_290;
-  float const x_292 = z.y;
-  param_29 = x_292;
-  float const x_293 = makeFrame_f1_(&(param_29), tint_symbol_7);
-  y_1 = x_293;
-  sum = -100;
-  target_1 = 0;
-  while (true) {
-    int const x_156 = target_1;
-    if ((x_156 < 20)) {
-    } else {
-      break;
-    }
-    int const x_157 = target_1;
-    param_30 = x_157;
-    int const x_158 = search_i1_(&(param_30), tint_symbol_7);
-    result = x_158;
-    int const x_159 = result;
-    if ((x_159 > 0)) {
-    } else {
-      int const x_160 = result;
-      switch(x_160) {
-        case 0: {
-          return;
-          break;
-        }
-        case -1: {
-          int const x_161 = sum;
-          sum = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
-          break;
-        }
-        default: {
-          break;
-        }
-      }
-    }
-    {
-      int const x_163 = target_1;
-      target_1 = as_type<int>((as_type<uint>(x_163) + as_type<uint>(1)));
-    }
-  }
-  float const x_307 = x_1;
-  float const x_308 = y_1;
-  int const x_165 = sum;
-  a = (x_307 + (x_308 * float(x_165)));
-  float const x_313 = x_27.injectionSwitch.x;
-  float const x_315 = x_27.injectionSwitch.y;
-  if ((x_313 < x_315)) {
-    x_235 = float3(1.0f, 0.0f, 0.0f);
-  } else {
-    float const x_320 = a;
-    param_31 = x_320;
-    float3 const x_321 = hueColor_f1_(&(param_31), tint_symbol_7);
-    x_235 = x_321;
-  }
-  float3 const x_322 = x_235;
-  *(tint_symbol_9) = float4(x_322.x, x_322.y, x_322.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_27, float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread tint_array_wrapper_1* const tint_symbol_11, thread float4* const tint_symbol_12) {
-  *(tint_symbol_10) = gl_FragCoord_param;
-  main_1(x_27, tint_symbol_11, tint_symbol_10, tint_symbol_12);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_12)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_27 [[buffer(0)]]) {
-  thread float4 tint_symbol_13 = 0.0f;
-  thread tint_array_wrapper_1 tint_symbol_14 = {};
-  thread float4 tint_symbol_15 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_27, gl_FragCoord_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 38c7047..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,803 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 533
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %BST "BST"
-               OpMemberName %BST 0 "data"
-               OpMemberName %BST 1 "leftIndex"
-               OpMemberName %BST 2 "rightIndex"
-               OpName %tree_1 "tree_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_27 "x_27"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %makeTreeNode_struct_BST_i1_i1_i11_i1_ "makeTreeNode_struct_BST_i1_i1_i11_i1_"
-               OpName %tree "tree"
-               OpName %data "data"
-               OpName %insert_i1_i1_ "insert_i1_i1_"
-               OpName %treeIndex "treeIndex"
-               OpName %data_1 "data_1"
-               OpName %baseIndex "baseIndex"
-               OpName %param "param"
-               OpName %param_1 "param_1"
-               OpName %param_2 "param_2"
-               OpName %param_3 "param_3"
-               OpName %GLF_live8i "GLF_live8i"
-               OpName %GLF_live8A "GLF_live8A"
-               OpName %search_i1_ "search_i1_"
-               OpName %target "target"
-               OpName %index "index"
-               OpName %currentNode "currentNode"
-               OpName %x_387 "x_387"
-               OpName %makeFrame_f1_ "makeFrame_f1_"
-               OpName %v "v"
-               OpName %param_5 "param_5"
-               OpName %param_6 "param_6"
-               OpName %param_7 "param_7"
-               OpName %hueColor_f1_ "hueColor_f1_"
-               OpName %angle "angle"
-               OpName %nodeData "nodeData"
-               OpName %param_4 "param_4"
-               OpName %main_1 "main_1"
-               OpName %treeIndex_1 "treeIndex_1"
-               OpName %param_8 "param_8"
-               OpName %param_9 "param_9"
-               OpName %param_10 "param_10"
-               OpName %param_11 "param_11"
-               OpName %GLF_live1_looplimiter2 "GLF_live1_looplimiter2"
-               OpName %GLF_live1i "GLF_live1i"
-               OpName %param_12 "param_12"
-               OpName %param_13 "param_13"
-               OpName %param_14 "param_14"
-               OpName %param_15 "param_15"
-               OpName %param_16 "param_16"
-               OpName %param_17 "param_17"
-               OpName %param_18 "param_18"
-               OpName %param_19 "param_19"
-               OpName %param_20 "param_20"
-               OpName %param_21 "param_21"
-               OpName %param_22 "param_22"
-               OpName %param_23 "param_23"
-               OpName %GLF_live4_looplimiter3 "GLF_live4_looplimiter3"
-               OpName %GLF_live4i "GLF_live4i"
-               OpName %GLF_live4index "GLF_live4index"
-               OpName %Obj "Obj"
-               OpMemberName %Obj 0 "odd_numbers"
-               OpMemberName %Obj 1 "even_numbers"
-               OpName %GLF_live4obj "GLF_live4obj"
-               OpName %param_24 "param_24"
-               OpName %param_25 "param_25"
-               OpName %param_26 "param_26"
-               OpName %param_27 "param_27"
-               OpName %z "z"
-               OpName %x "x"
-               OpName %param_28 "param_28"
-               OpName %y "y"
-               OpName %param_29 "param_29"
-               OpName %sum "sum"
-               OpName %target_1 "target_1"
-               OpName %result "result"
-               OpName %param_30 "param_30"
-               OpName %a "a"
-               OpName %x_235 "x_235"
-               OpName %param_31 "param_31"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpMemberDecorate %BST 0 Offset 0
-               OpMemberDecorate %BST 1 Offset 4
-               OpMemberDecorate %BST 2 Offset 8
-               OpDecorate %_arr_BST_uint_10 ArrayStride 12
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_27 NonWritable
-               OpDecorate %x_27 DescriptorSet 0
-               OpDecorate %x_27 Binding 0
-               OpDecorate %_arr_float_uint_50 ArrayStride 4
-               OpMemberDecorate %Obj 0 Offset 0
-               OpDecorate %_arr_float_uint_10 ArrayStride 4
-               OpMemberDecorate %Obj 1 Offset 40
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %7
-        %int = OpTypeInt 32 1
-        %BST = OpTypeStruct %int %int %int
-       %uint = OpTypeInt 32 0
-    %uint_10 = OpConstant %uint 10
-%_arr_BST_uint_10 = OpTypeArray %BST %uint_10
-%_ptr_Private__arr_BST_uint_10 = OpTypePointer Private %_arr_BST_uint_10
-         %15 = OpConstantNull %_arr_BST_uint_10
-     %tree_1 = OpVariable %_ptr_Private__arr_BST_uint_10 Private %15
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-       %x_27 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-%_ptr_Function_BST = OpTypePointer Function %BST
-%_ptr_Function_int = OpTypePointer Function %int
-         %23 = OpTypeFunction %void %_ptr_Function_BST %_ptr_Function_int
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-     %int_n1 = OpConstant %int -1
-     %uint_2 = OpConstant %uint 2
-         %43 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
-         %49 = OpConstantNull %int
-         %51 = OpConstantNull %BST
-    %uint_50 = OpConstant %uint 50
-%_arr_float_uint_50 = OpTypeArray %float %uint_50
-%_ptr_Function__arr_float_uint_50 = OpTypePointer Function %_arr_float_uint_50
-         %60 = OpConstantNull %_arr_float_uint_50
-      %int_0 = OpConstant %int 0
-       %bool = OpTypeBool
-%_ptr_Private_int = OpTypePointer Private %int
-%_ptr_Private_BST = OpTypePointer Private %BST
-      %int_1 = OpConstant %int 1
-     %int_50 = OpConstant %int 50
-%_ptr_Function_float = OpTypePointer Function %float
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-        %163 = OpTypeFunction %int %_ptr_Function_int
-        %204 = OpTypeFunction %float %_ptr_Function_float
-  %float_6_5 = OpConstant %float 6.5
-  %float_1_5 = OpConstant %float 1.5
-    %int_100 = OpConstant %int 100
-    %float_4 = OpConstant %float 4
-    %float_0 = OpConstant %float 0
-      %int_6 = OpConstant %int 6
-    %float_1 = OpConstant %float 1
-     %int_30 = OpConstant %int 30
-   %float_10 = OpConstant %float 10
-    %v3float = OpTypeVector %float 3
-        %249 = OpTypeFunction %v3float %_ptr_Function_float
-        %255 = OpConstantNull %float
-     %int_15 = OpConstant %int 15
-   %float_30 = OpConstant %float 30
-        %265 = OpConstantComposite %v3float %float_30 %float_30 %float_30
-    %float_5 = OpConstant %float 5
-   %float_50 = OpConstant %float 50
-        %271 = OpConstantComposite %v3float %float_50 %float_50 %float_50
-        %273 = OpTypeFunction %void
-%_arr_float_uint_10 = OpTypeArray %float %uint_10
-        %Obj = OpTypeStruct %_arr_float_uint_10 %_arr_float_uint_10
-%_ptr_Function_Obj = OpTypePointer Function %Obj
-        %302 = OpConstantNull %Obj
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-        %309 = OpConstantNull %v2float
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-        %321 = OpConstantNull %v3float
-      %int_9 = OpConstant %int 9
-      %int_5 = OpConstant %int 5
-       %true = OpConstantTrue %bool
-      %int_7 = OpConstant %int 7
-     %int_12 = OpConstant %int 12
-      %int_8 = OpConstant %int 8
-      %int_2 = OpConstant %int 2
-      %int_3 = OpConstant %int 3
-     %int_10 = OpConstant %int 10
-     %int_17 = OpConstant %int 17
-     %int_13 = OpConstant %int 13
-  %float_256 = OpConstant %float 256
-        %459 = OpConstantComposite %v2float %float_256 %float_256
-   %int_n100 = OpConstant %int -100
-     %int_20 = OpConstant %int 20
-        %511 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-   %main_out = OpTypeStruct %v4float
-        %520 = OpTypeFunction %main_out %v4float
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = OpFunction %void None %23
-       %tree = OpFunctionParameter %_ptr_Function_BST
-       %data = OpFunctionParameter %_ptr_Function_int
-         %30 = OpLabel
-         %32 = OpLoad %int %data
-         %35 = OpAccessChain %_ptr_Function_int %tree %uint_0
-               OpStore %35 %32
-         %38 = OpAccessChain %_ptr_Function_int %tree %uint_1
-               OpStore %38 %int_n1
-         %42 = OpAccessChain %_ptr_Function_int %tree %uint_2
-               OpStore %42 %int_n1
-               OpReturn
-               OpFunctionEnd
-%insert_i1_i1_ = OpFunction %void None %43
-  %treeIndex = OpFunctionParameter %_ptr_Function_int
-     %data_1 = OpFunctionParameter %_ptr_Function_int
-         %47 = OpLabel
-  %baseIndex = OpVariable %_ptr_Function_int Function %49
-      %param = OpVariable %_ptr_Function_BST Function %51
-    %param_1 = OpVariable %_ptr_Function_int Function %49
-    %param_2 = OpVariable %_ptr_Function_BST Function %51
-    %param_3 = OpVariable %_ptr_Function_int Function %49
- %GLF_live8i = OpVariable %_ptr_Function_int Function %49
- %GLF_live8A = OpVariable %_ptr_Function__arr_float_uint_50 Function %60
-               OpStore %baseIndex %int_0
-               OpBranch %62
-         %62 = OpLabel
-               OpLoopMerge %63 %64 None
-               OpBranch %65
-         %65 = OpLabel
-         %66 = OpLoad %int %baseIndex
-         %68 = OpLoad %int %treeIndex
-         %69 = OpSLessThanEqual %bool %66 %68
-               OpSelectionMerge %71 None
-               OpBranchConditional %69 %72 %73
-         %72 = OpLabel
-               OpBranch %71
-         %73 = OpLabel
-               OpBranch %63
-         %71 = OpLabel
-         %75 = OpLoad %int %data_1
-         %76 = OpLoad %int %baseIndex
-         %78 = OpAccessChain %_ptr_Private_int %tree_1 %76 %uint_0
-         %79 = OpLoad %int %78
-         %80 = OpSLessThanEqual %bool %75 %79
-               OpSelectionMerge %81 None
-               OpBranchConditional %80 %82 %83
-         %82 = OpLabel
-         %84 = OpLoad %int %baseIndex
-         %85 = OpAccessChain %_ptr_Private_int %tree_1 %84 %uint_1
-         %86 = OpLoad %int %85
-         %87 = OpIEqual %bool %86 %int_n1
-               OpSelectionMerge %88 None
-               OpBranchConditional %87 %89 %90
-         %89 = OpLabel
-         %91 = OpLoad %int %baseIndex
-         %93 = OpLoad %int %treeIndex
-         %94 = OpAccessChain %_ptr_Private_int %tree_1 %91 %uint_1
-               OpStore %94 %93
-         %96 = OpLoad %int %treeIndex
-         %98 = OpAccessChain %_ptr_Private_BST %tree_1 %96
-         %99 = OpLoad %BST %98
-               OpStore %param %99
-        %101 = OpLoad %int %data_1
-               OpStore %param_1 %101
-        %102 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param %param_1
-        %105 = OpLoad %BST %param
-        %106 = OpAccessChain %_ptr_Private_BST %tree_1 %96
-               OpStore %106 %105
-               OpReturn
-         %90 = OpLabel
-        %107 = OpLoad %int %baseIndex
-        %108 = OpAccessChain %_ptr_Private_int %tree_1 %107 %uint_1
-        %109 = OpLoad %int %108
-               OpStore %baseIndex %109
-               OpBranch %64
-         %88 = OpLabel
-               OpBranch %81
-         %83 = OpLabel
-        %110 = OpLoad %int %baseIndex
-        %111 = OpAccessChain %_ptr_Private_int %tree_1 %110 %uint_2
-        %112 = OpLoad %int %111
-        %113 = OpIEqual %bool %112 %int_n1
-               OpSelectionMerge %114 None
-               OpBranchConditional %113 %115 %116
-        %115 = OpLabel
-        %117 = OpLoad %int %baseIndex
-        %119 = OpLoad %int %treeIndex
-        %120 = OpAccessChain %_ptr_Private_int %tree_1 %117 %uint_2
-               OpStore %120 %119
-        %122 = OpLoad %int %treeIndex
-        %123 = OpAccessChain %_ptr_Private_BST %tree_1 %122
-        %124 = OpLoad %BST %123
-               OpStore %param_2 %124
-        %126 = OpLoad %int %data_1
-               OpStore %param_3 %126
-        %127 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_2 %param_3
-        %130 = OpLoad %BST %param_2
-        %131 = OpAccessChain %_ptr_Private_BST %tree_1 %122
-               OpStore %131 %130
-               OpReturn
-        %116 = OpLabel
-               OpStore %GLF_live8i %int_1
-        %133 = OpLoad %int %GLF_live8i
-        %134 = OpLoad %int %GLF_live8i
-        %135 = OpLoad %int %GLF_live8i
-        %137 = OpSGreaterThanEqual %bool %133 %int_0
-               OpSelectionMerge %138 None
-               OpBranchConditional %137 %139 %138
-        %139 = OpLabel
-        %141 = OpSLessThan %bool %134 %int_50
-               OpBranch %138
-        %138 = OpLabel
-        %142 = OpPhi %bool %137 %116 %141 %139
-        %136 = OpSelect %int %142 %135 %int_0
-        %144 = OpAccessChain %_ptr_Function_float %GLF_live8A %int_0
-        %145 = OpLoad %float %144
-        %146 = OpAccessChain %_ptr_Function_float %GLF_live8A %136
-        %147 = OpLoad %float %146
-        %148 = OpAccessChain %_ptr_Function_float %GLF_live8A %136
-        %149 = OpFAdd %float %147 %145
-               OpStore %148 %149
-               OpBranch %150
-        %150 = OpLabel
-               OpLoopMerge %151 %152 None
-               OpBranch %153
-        %153 = OpLabel
-        %154 = OpLoad %int %baseIndex
-        %155 = OpAccessChain %_ptr_Private_int %tree_1 %154 %uint_2
-        %156 = OpLoad %int %155
-               OpStore %baseIndex %156
-               OpBranch %152
-        %152 = OpLabel
-        %158 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_0
-        %159 = OpLoad %float %158
-        %160 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_1
-        %161 = OpLoad %float %160
-        %162 = OpFOrdGreaterThan %bool %159 %161
-               OpBranchConditional %162 %150 %151
-        %151 = OpLabel
-               OpBranch %64
-        %114 = OpLabel
-               OpBranch %81
-         %81 = OpLabel
-               OpBranch %64
-         %64 = OpLabel
-               OpBranch %62
-         %63 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %search_i1_ = OpFunction %int None %163
-     %target = OpFunctionParameter %_ptr_Function_int
-        %166 = OpLabel
-      %index = OpVariable %_ptr_Function_int Function %49
-%currentNode = OpVariable %_ptr_Function_BST Function %51
-      %x_387 = OpVariable %_ptr_Function_int Function %49
-               OpStore %index %int_0
-               OpBranch %170
-        %170 = OpLabel
-               OpLoopMerge %171 %172 None
-               OpBranch %173
-        %173 = OpLabel
-        %174 = OpLoad %int %index
-        %175 = OpINotEqual %bool %174 %int_n1
-               OpSelectionMerge %176 None
-               OpBranchConditional %175 %177 %178
-        %177 = OpLabel
-               OpBranch %176
-        %178 = OpLabel
-               OpBranch %171
-        %176 = OpLabel
-        %179 = OpLoad %int %index
-        %180 = OpAccessChain %_ptr_Private_BST %tree_1 %179
-        %181 = OpLoad %BST %180
-               OpStore %currentNode %181
-        %182 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %183 = OpLoad %int %182
-        %185 = OpLoad %int %target
-        %186 = OpIEqual %bool %183 %185
-               OpSelectionMerge %187 None
-               OpBranchConditional %186 %188 %187
-        %188 = OpLabel
-        %190 = OpLoad %int %target
-               OpReturnValue %190
-        %187 = OpLabel
-        %192 = OpLoad %int %target
-        %193 = OpAccessChain %_ptr_Function_int %currentNode %uint_0
-        %194 = OpLoad %int %193
-        %195 = OpSGreaterThan %bool %192 %194
-               OpSelectionMerge %196 None
-               OpBranchConditional %195 %197 %198
-        %197 = OpLabel
-        %199 = OpAccessChain %_ptr_Function_int %currentNode %uint_2
-        %200 = OpLoad %int %199
-               OpStore %x_387 %200
-               OpBranch %196
-        %198 = OpLabel
-        %201 = OpAccessChain %_ptr_Function_int %currentNode %uint_1
-        %202 = OpLoad %int %201
-               OpStore %x_387 %202
-               OpBranch %196
-        %196 = OpLabel
-        %203 = OpLoad %int %x_387
-               OpStore %index %203
-               OpBranch %172
-        %172 = OpLabel
-               OpBranch %170
-        %171 = OpLabel
-               OpReturnValue %int_n1
-               OpFunctionEnd
-%makeFrame_f1_ = OpFunction %float None %204
-          %v = OpFunctionParameter %_ptr_Function_float
-        %207 = OpLabel
-    %param_5 = OpVariable %_ptr_Function_int Function %49
-    %param_6 = OpVariable %_ptr_Function_int Function %49
-    %param_7 = OpVariable %_ptr_Function_int Function %49
-        %212 = OpLoad %float %v
-        %215 = OpFMul %float %212 %float_6_5
-               OpStore %v %215
-        %217 = OpLoad %float %v
-        %219 = OpFOrdLessThan %bool %217 %float_1_5
-               OpSelectionMerge %220 None
-               OpBranchConditional %219 %221 %220
-        %221 = OpLabel
-               OpStore %param_5 %int_100
-        %223 = OpFunctionCall %int %search_i1_ %param_5
-        %225 = OpConvertSToF %float %223
-               OpReturnValue %225
-        %220 = OpLabel
-        %227 = OpLoad %float %v
-        %229 = OpFOrdLessThan %bool %227 %float_4
-               OpSelectionMerge %230 None
-               OpBranchConditional %229 %231 %230
-        %231 = OpLabel
-               OpReturnValue %float_0
-        %230 = OpLabel
-        %234 = OpLoad %float %v
-               OpStore %param_6 %int_6
-        %236 = OpFunctionCall %int %search_i1_ %param_6
-        %238 = OpConvertSToF %float %236
-        %239 = OpFOrdLessThan %bool %234 %238
-               OpSelectionMerge %240 None
-               OpBranchConditional %239 %241 %240
-        %241 = OpLabel
-               OpReturnValue %float_1
-        %240 = OpLabel
-               OpStore %param_7 %int_30
-        %244 = OpFunctionCall %int %search_i1_ %param_7
-        %247 = OpConvertSToF %float %244
-        %248 = OpFAdd %float %float_10 %247
-               OpReturnValue %248
-               OpFunctionEnd
-%hueColor_f1_ = OpFunction %v3float None %249
-      %angle = OpFunctionParameter %_ptr_Function_float
-        %253 = OpLabel
-   %nodeData = OpVariable %_ptr_Function_float Function %255
-    %param_4 = OpVariable %_ptr_Function_int Function %49
-               OpStore %param_4 %int_15
-        %258 = OpFunctionCall %int %search_i1_ %param_4
-        %260 = OpConvertSToF %float %258
-               OpStore %nodeData %260
-        %262 = OpLoad %float %angle
-        %263 = OpLoad %float %nodeData
-        %267 = OpCompositeConstruct %v3float %float_1 %float_5 %263
-        %268 = OpVectorTimesScalar %v3float %267 %262
-        %269 = OpFAdd %v3float %265 %268
-        %272 = OpFDiv %v3float %269 %271
-               OpReturnValue %272
-               OpFunctionEnd
-     %main_1 = OpFunction %void None %273
-        %275 = OpLabel
-%treeIndex_1 = OpVariable %_ptr_Function_int Function %49
-    %param_8 = OpVariable %_ptr_Function_BST Function %51
-    %param_9 = OpVariable %_ptr_Function_int Function %49
-   %param_10 = OpVariable %_ptr_Function_int Function %49
-   %param_11 = OpVariable %_ptr_Function_int Function %49
-%GLF_live1_looplimiter2 = OpVariable %_ptr_Function_int Function %49
- %GLF_live1i = OpVariable %_ptr_Function_int Function %49
-   %param_12 = OpVariable %_ptr_Function_int Function %49
-   %param_13 = OpVariable %_ptr_Function_int Function %49
-   %param_14 = OpVariable %_ptr_Function_int Function %49
-   %param_15 = OpVariable %_ptr_Function_int Function %49
-   %param_16 = OpVariable %_ptr_Function_int Function %49
-   %param_17 = OpVariable %_ptr_Function_int Function %49
-   %param_18 = OpVariable %_ptr_Function_int Function %49
-   %param_19 = OpVariable %_ptr_Function_int Function %49
-   %param_20 = OpVariable %_ptr_Function_int Function %49
-   %param_21 = OpVariable %_ptr_Function_int Function %49
-   %param_22 = OpVariable %_ptr_Function_int Function %49
-   %param_23 = OpVariable %_ptr_Function_int Function %49
-%GLF_live4_looplimiter3 = OpVariable %_ptr_Function_int Function %49
- %GLF_live4i = OpVariable %_ptr_Function_int Function %49
-%GLF_live4index = OpVariable %_ptr_Function_int Function %49
-%GLF_live4obj = OpVariable %_ptr_Function_Obj Function %302
-   %param_24 = OpVariable %_ptr_Function_int Function %49
-   %param_25 = OpVariable %_ptr_Function_int Function %49
-   %param_26 = OpVariable %_ptr_Function_int Function %49
-   %param_27 = OpVariable %_ptr_Function_int Function %49
-          %z = OpVariable %_ptr_Function_v2float Function %309
-          %x = OpVariable %_ptr_Function_float Function %255
-   %param_28 = OpVariable %_ptr_Function_float Function %255
-          %y = OpVariable %_ptr_Function_float Function %255
-   %param_29 = OpVariable %_ptr_Function_float Function %255
-        %sum = OpVariable %_ptr_Function_int Function %49
-   %target_1 = OpVariable %_ptr_Function_int Function %49
-     %result = OpVariable %_ptr_Function_int Function %49
-   %param_30 = OpVariable %_ptr_Function_int Function %49
-          %a = OpVariable %_ptr_Function_float Function %255
-      %x_235 = OpVariable %_ptr_Function_v3float Function %321
-   %param_31 = OpVariable %_ptr_Function_float Function %255
-               OpStore %treeIndex_1 %int_0
-        %323 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-        %324 = OpLoad %BST %323
-               OpStore %param_8 %324
-               OpStore %param_9 %int_9
-        %326 = OpFunctionCall %void %makeTreeNode_struct_BST_i1_i1_i11_i1_ %param_8 %param_9
-        %329 = OpLoad %BST %param_8
-        %330 = OpAccessChain %_ptr_Private_BST %tree_1 %int_0
-               OpStore %330 %329
-        %331 = OpLoad %int %treeIndex_1
-        %332 = OpIAdd %int %331 %int_1
-               OpStore %treeIndex_1 %332
-        %333 = OpLoad %int %treeIndex_1
-               OpStore %param_10 %333
-               OpStore %param_11 %int_5
-        %335 = OpFunctionCall %void %insert_i1_i1_ %param_10 %param_11
-        %338 = OpLoad %int %treeIndex_1
-        %339 = OpIAdd %int %338 %int_1
-               OpStore %treeIndex_1 %339
-               OpStore %GLF_live1_looplimiter2 %int_0
-               OpStore %GLF_live1i %int_0
-               OpBranch %340
-        %340 = OpLabel
-               OpLoopMerge %341 %342 None
-               OpBranch %343
-        %343 = OpLabel
-               OpSelectionMerge %345 None
-               OpBranchConditional %true %346 %347
-        %346 = OpLabel
-               OpBranch %345
-        %347 = OpLabel
-               OpBranch %341
-        %345 = OpLabel
-        %348 = OpLoad %int %GLF_live1_looplimiter2
-        %350 = OpSGreaterThanEqual %bool %348 %int_7
-               OpSelectionMerge %351 None
-               OpBranchConditional %350 %352 %351
-        %352 = OpLabel
-               OpBranch %341
-        %351 = OpLabel
-        %353 = OpLoad %int %GLF_live1_looplimiter2
-        %354 = OpIAdd %int %353 %int_1
-               OpStore %GLF_live1_looplimiter2 %354
-               OpBranch %342
-        %342 = OpLabel
-        %355 = OpLoad %int %GLF_live1i
-        %356 = OpIAdd %int %355 %int_1
-               OpStore %GLF_live1i %356
-               OpBranch %340
-        %341 = OpLabel
-        %357 = OpLoad %int %treeIndex_1
-               OpStore %param_12 %357
-               OpStore %param_13 %int_12
-        %359 = OpFunctionCall %void %insert_i1_i1_ %param_12 %param_13
-        %362 = OpLoad %int %treeIndex_1
-        %363 = OpIAdd %int %362 %int_1
-               OpStore %treeIndex_1 %363
-        %364 = OpLoad %int %treeIndex_1
-               OpStore %param_14 %364
-               OpStore %param_15 %int_15
-        %365 = OpFunctionCall %void %insert_i1_i1_ %param_14 %param_15
-        %368 = OpLoad %int %treeIndex_1
-        %369 = OpIAdd %int %368 %int_1
-               OpStore %treeIndex_1 %369
-        %370 = OpLoad %int %treeIndex_1
-               OpStore %param_16 %370
-               OpStore %param_17 %int_7
-        %371 = OpFunctionCall %void %insert_i1_i1_ %param_16 %param_17
-        %374 = OpLoad %int %treeIndex_1
-        %375 = OpIAdd %int %374 %int_1
-               OpStore %treeIndex_1 %375
-        %376 = OpLoad %int %treeIndex_1
-               OpStore %param_18 %376
-               OpStore %param_19 %int_8
-        %378 = OpFunctionCall %void %insert_i1_i1_ %param_18 %param_19
-        %381 = OpLoad %int %treeIndex_1
-        %382 = OpIAdd %int %381 %int_1
-               OpStore %treeIndex_1 %382
-        %383 = OpLoad %int %treeIndex_1
-               OpStore %param_20 %383
-               OpStore %param_21 %int_2
-        %385 = OpFunctionCall %void %insert_i1_i1_ %param_20 %param_21
-        %388 = OpLoad %int %treeIndex_1
-        %389 = OpIAdd %int %388 %int_1
-               OpStore %treeIndex_1 %389
-        %390 = OpLoad %int %treeIndex_1
-               OpStore %param_22 %390
-               OpStore %param_23 %int_6
-        %391 = OpFunctionCall %void %insert_i1_i1_ %param_22 %param_23
-        %394 = OpLoad %int %treeIndex_1
-        %395 = OpIAdd %int %394 %int_1
-               OpStore %treeIndex_1 %395
-               OpStore %GLF_live4_looplimiter3 %int_0
-               OpStore %GLF_live4i %int_0
-               OpBranch %396
-        %396 = OpLabel
-               OpLoopMerge %397 %398 None
-               OpBranch %399
-        %399 = OpLabel
-               OpSelectionMerge %400 None
-               OpBranchConditional %true %401 %402
-        %401 = OpLabel
-               OpBranch %400
-        %402 = OpLabel
-               OpBranch %397
-        %400 = OpLabel
-        %403 = OpLoad %int %GLF_live4_looplimiter3
-        %405 = OpSGreaterThanEqual %bool %403 %int_3
-               OpSelectionMerge %406 None
-               OpBranchConditional %405 %407 %406
-        %407 = OpLabel
-               OpBranch %397
-        %406 = OpLabel
-        %408 = OpLoad %int %GLF_live4_looplimiter3
-        %409 = OpIAdd %int %408 %int_1
-               OpStore %GLF_live4_looplimiter3 %409
-               OpStore %GLF_live4index %int_1
-        %410 = OpLoad %int %GLF_live4index
-        %411 = OpLoad %int %GLF_live4index
-        %412 = OpLoad %int %GLF_live4index
-        %413 = OpAccessChain %_ptr_Function_float %GLF_live4obj %uint_1 %int_1
-        %414 = OpLoad %float %413
-        %416 = OpSGreaterThanEqual %bool %410 %int_0
-               OpSelectionMerge %417 None
-               OpBranchConditional %416 %418 %417
-        %418 = OpLabel
-        %420 = OpSLessThan %bool %411 %int_10
-               OpBranch %417
-        %417 = OpLabel
-        %421 = OpPhi %bool %416 %406 %420 %418
-        %415 = OpSelect %int %421 %412 %int_0
-        %422 = OpAccessChain %_ptr_Function_float %GLF_live4obj %uint_1 %415
-               OpStore %422 %414
-        %423 = OpLoad %int %GLF_live4i
-        %424 = OpLoad %int %GLF_live4i
-        %425 = OpLoad %int %GLF_live4i
-        %427 = OpSGreaterThanEqual %bool %423 %int_0
-               OpSelectionMerge %428 None
-               OpBranchConditional %427 %429 %428
-        %429 = OpLabel
-        %430 = OpSLessThan %bool %424 %int_10
-               OpBranch %428
-        %428 = OpLabel
-        %431 = OpPhi %bool %427 %417 %430 %429
-        %426 = OpSelect %int %431 %425 %int_0
-        %432 = OpAccessChain %_ptr_Function_float %GLF_live4obj %uint_1 %426
-               OpStore %432 %float_1
-               OpBranch %398
-        %398 = OpLabel
-        %433 = OpLoad %int %GLF_live4i
-        %434 = OpIAdd %int %433 %int_1
-               OpStore %GLF_live4i %434
-               OpBranch %396
-        %397 = OpLabel
-        %435 = OpLoad %int %treeIndex_1
-               OpStore %param_24 %435
-               OpStore %param_25 %int_17
-        %437 = OpFunctionCall %void %insert_i1_i1_ %param_24 %param_25
-        %440 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_0
-        %441 = OpLoad %float %440
-        %442 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_1
-        %443 = OpLoad %float %442
-        %444 = OpFOrdGreaterThan %bool %441 %443
-               OpSelectionMerge %445 None
-               OpBranchConditional %444 %446 %445
-        %446 = OpLabel
-               OpReturn
-        %445 = OpLabel
-        %447 = OpLoad %int %treeIndex_1
-        %448 = OpIAdd %int %447 %int_1
-               OpStore %treeIndex_1 %448
-        %449 = OpLoad %int %treeIndex_1
-               OpStore %param_26 %449
-               OpStore %param_27 %int_13
-        %451 = OpFunctionCall %void %insert_i1_i1_ %param_26 %param_27
-        %454 = OpLoad %v4float %gl_FragCoord
-        %455 = OpCompositeExtract %float %454 1
-        %456 = OpCompositeExtract %float %454 0
-        %457 = OpCompositeConstruct %v2float %455 %456
-        %460 = OpFDiv %v2float %457 %459
-               OpStore %z %460
-        %461 = OpAccessChain %_ptr_Function_float %z %uint_0
-        %462 = OpLoad %float %461
-               OpStore %param_28 %462
-        %463 = OpFunctionCall %float %makeFrame_f1_ %param_28
-               OpStore %x %463
-        %465 = OpAccessChain %_ptr_Function_float %z %uint_1
-        %466 = OpLoad %float %465
-               OpStore %param_29 %466
-        %467 = OpFunctionCall %float %makeFrame_f1_ %param_29
-               OpStore %y %467
-               OpStore %sum %int_n100
-               OpStore %target_1 %int_0
-               OpBranch %470
-        %470 = OpLabel
-               OpLoopMerge %471 %472 None
-               OpBranch %473
-        %473 = OpLabel
-        %474 = OpLoad %int %target_1
-        %476 = OpSLessThan %bool %474 %int_20
-               OpSelectionMerge %477 None
-               OpBranchConditional %476 %478 %479
-        %478 = OpLabel
-               OpBranch %477
-        %479 = OpLabel
-               OpBranch %471
-        %477 = OpLabel
-        %480 = OpLoad %int %target_1
-               OpStore %param_30 %480
-        %481 = OpFunctionCall %int %search_i1_ %param_30
-               OpStore %result %481
-        %483 = OpLoad %int %result
-        %484 = OpSGreaterThan %bool %483 %int_0
-               OpSelectionMerge %485 None
-               OpBranchConditional %484 %486 %487
-        %486 = OpLabel
-               OpBranch %485
-        %487 = OpLabel
-        %488 = OpLoad %int %result
-               OpSelectionMerge %489 None
-               OpSwitch %488 %490 0 %491 -1 %492
-        %491 = OpLabel
-               OpReturn
-        %492 = OpLabel
-        %493 = OpLoad %int %sum
-        %494 = OpIAdd %int %493 %int_1
-               OpStore %sum %494
-               OpBranch %489
-        %490 = OpLabel
-               OpBranch %489
-        %489 = OpLabel
-               OpBranch %485
-        %485 = OpLabel
-               OpBranch %472
-        %472 = OpLabel
-        %495 = OpLoad %int %target_1
-        %496 = OpIAdd %int %495 %int_1
-               OpStore %target_1 %496
-               OpBranch %470
-        %471 = OpLabel
-        %497 = OpLoad %float %x
-        %498 = OpLoad %float %y
-        %499 = OpLoad %int %sum
-        %500 = OpConvertSToF %float %499
-        %501 = OpFMul %float %498 %500
-        %502 = OpFAdd %float %497 %501
-               OpStore %a %502
-        %503 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_0
-        %504 = OpLoad %float %503
-        %505 = OpAccessChain %_ptr_Uniform_float %x_27 %uint_0 %uint_1
-        %506 = OpLoad %float %505
-        %507 = OpFOrdLessThan %bool %504 %506
-               OpSelectionMerge %508 None
-               OpBranchConditional %507 %509 %510
-        %509 = OpLabel
-               OpStore %x_235 %511
-               OpBranch %508
-        %510 = OpLabel
-        %512 = OpLoad %float %a
-               OpStore %param_31 %512
-        %513 = OpFunctionCall %v3float %hueColor_f1_ %param_31
-               OpStore %x_235 %513
-               OpBranch %508
-        %508 = OpLabel
-        %515 = OpLoad %v3float %x_235
-        %516 = OpCompositeExtract %float %515 0
-        %517 = OpCompositeExtract %float %515 1
-        %518 = OpCompositeExtract %float %515 2
-        %519 = OpCompositeConstruct %v4float %516 %517 %518 %float_1
-               OpStore %x_GLF_color %519
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %520
-%gl_FragCoord_param = OpFunctionParameter %v4float
-        %524 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-        %525 = OpFunctionCall %void %main_1
-        %526 = OpLoad %v4float %x_GLF_color
-        %527 = OpCompositeConstruct %main_out %526
-               OpReturnValue %527
-               OpFunctionEnd
-       %main = OpFunction %void None %273
-        %529 = OpLabel
-        %531 = OpLoad %v4float %gl_FragCoord_param_1
-        %530 = OpFunctionCall %main_out %main_inner %531
-        %532 = OpCompositeExtract %v4float %530 0
-               OpStore %x_GLF_color_1_1 %532
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index eaa0aec..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,420 +0,0 @@
-struct BST {
-  data : i32;
-  leftIndex : i32;
-  rightIndex : i32;
-};
-
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-struct Obj {
-  odd_numbers : array<f32, 10>;
-  even_numbers : array<f32, 10>;
-};
-
-var<private> tree_1 : array<BST, 10>;
-
-[[group(0), binding(0)]] var<uniform> x_27 : buf0;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn makeTreeNode_struct_BST_i1_i1_i11_i1_(tree : ptr<function, BST>, data : ptr<function, i32>) {
-  let x_74 : i32 = *(data);
-  (*(tree)).data = x_74;
-  (*(tree)).leftIndex = -1;
-  (*(tree)).rightIndex = -1;
-  return;
-}
-
-fn insert_i1_i1_(treeIndex : ptr<function, i32>, data_1 : ptr<function, i32>) {
-  var baseIndex : i32;
-  var param : BST;
-  var param_1 : i32;
-  var param_2 : BST;
-  var param_3 : i32;
-  var GLF_live8i : i32;
-  var GLF_live8A : array<f32, 50>;
-  baseIndex = 0;
-  loop {
-    let x_75 : i32 = baseIndex;
-    let x_76 : i32 = *(treeIndex);
-    if ((x_75 <= x_76)) {
-    } else {
-      break;
-    }
-    let x_77 : i32 = *(data_1);
-    let x_78 : i32 = baseIndex;
-    let x_79 : i32 = tree_1[x_78].data;
-    if ((x_77 <= x_79)) {
-      let x_80 : i32 = baseIndex;
-      let x_81 : i32 = tree_1[x_80].leftIndex;
-      if ((x_81 == -1)) {
-        let x_82 : i32 = baseIndex;
-        let x_83 : i32 = *(treeIndex);
-        tree_1[x_82].leftIndex = x_83;
-        let x_84 : i32 = *(treeIndex);
-        let x_350 : BST = tree_1[x_84];
-        param = x_350;
-        let x_85 : i32 = *(data_1);
-        param_1 = x_85;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param), &(param_1));
-        let x_352 : BST = param;
-        tree_1[x_84] = x_352;
-        return;
-      } else {
-        let x_86 : i32 = baseIndex;
-        let x_87 : i32 = tree_1[x_86].leftIndex;
-        baseIndex = x_87;
-        continue;
-      }
-    } else {
-      let x_88 : i32 = baseIndex;
-      let x_89 : i32 = tree_1[x_88].rightIndex;
-      if ((x_89 == -1)) {
-        let x_90 : i32 = baseIndex;
-        let x_91 : i32 = *(treeIndex);
-        tree_1[x_90].rightIndex = x_91;
-        let x_92 : i32 = *(treeIndex);
-        let x_362 : BST = tree_1[x_92];
-        param_2 = x_362;
-        let x_93 : i32 = *(data_1);
-        param_3 = x_93;
-        makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_2), &(param_3));
-        let x_364 : BST = param_2;
-        tree_1[x_92] = x_364;
-        return;
-      } else {
-        GLF_live8i = 1;
-        let x_94 : i32 = GLF_live8i;
-        let x_95 : i32 = GLF_live8i;
-        let x_96 : i32 = GLF_live8i;
-        let x_369 : i32 = select(0, x_96, ((x_94 >= 0) && (x_95 < 50)));
-        let x_371 : f32 = GLF_live8A[0];
-        let x_373 : f32 = GLF_live8A[x_369];
-        GLF_live8A[x_369] = (x_373 + x_371);
-        loop {
-          let x_97 : i32 = baseIndex;
-          let x_98 : i32 = tree_1[x_97].rightIndex;
-          baseIndex = x_98;
-
-          continuing {
-            let x_382 : f32 = x_27.injectionSwitch.x;
-            let x_384 : f32 = x_27.injectionSwitch.y;
-            if ((x_382 > x_384)) {
-            } else {
-              break;
-            }
-          }
-        }
-        continue;
-      }
-    }
-  }
-  return;
-}
-
-fn search_i1_(target : ptr<function, i32>) -> i32 {
-  var index : i32;
-  var currentNode : BST;
-  var x_387 : i32;
-  index = 0;
-  loop {
-    let x_99 : i32 = index;
-    if ((x_99 != -1)) {
-    } else {
-      break;
-    }
-    let x_100 : i32 = index;
-    let x_395 : BST = tree_1[x_100];
-    currentNode = x_395;
-    let x_101 : i32 = currentNode.data;
-    let x_102 : i32 = *(target);
-    if ((x_101 == x_102)) {
-      let x_103 : i32 = *(target);
-      return x_103;
-    }
-    let x_104 : i32 = *(target);
-    let x_105 : i32 = currentNode.data;
-    if ((x_104 > x_105)) {
-      let x_106 : i32 = currentNode.rightIndex;
-      x_387 = x_106;
-    } else {
-      let x_107 : i32 = currentNode.leftIndex;
-      x_387 = x_107;
-    }
-    let x_108 : i32 = x_387;
-    index = x_108;
-  }
-  return -1;
-}
-
-fn makeFrame_f1_(v : ptr<function, f32>) -> f32 {
-  var param_5 : i32;
-  var param_6 : i32;
-  var param_7 : i32;
-  let x_418 : f32 = *(v);
-  *(v) = (x_418 * 6.5);
-  let x_420 : f32 = *(v);
-  if ((x_420 < 1.5)) {
-    param_5 = 100;
-    let x_110 : i32 = search_i1_(&(param_5));
-    return f32(x_110);
-  }
-  let x_425 : f32 = *(v);
-  if ((x_425 < 4.0)) {
-    return 0.0;
-  }
-  let x_429 : f32 = *(v);
-  param_6 = 6;
-  let x_111 : i32 = search_i1_(&(param_6));
-  if ((x_429 < f32(x_111))) {
-    return 1.0;
-  }
-  param_7 = 30;
-  let x_112 : i32 = search_i1_(&(param_7));
-  return (10.0 + f32(x_112));
-}
-
-fn hueColor_f1_(angle : ptr<function, f32>) -> vec3<f32> {
-  var nodeData : f32;
-  var param_4 : i32;
-  param_4 = 15;
-  let x_109 : i32 = search_i1_(&(param_4));
-  nodeData = f32(x_109);
-  let x_409 : f32 = *(angle);
-  let x_410 : f32 = nodeData;
-  return ((vec3<f32>(30.0, 30.0, 30.0) + (vec3<f32>(1.0, 5.0, x_410) * x_409)) / vec3<f32>(50.0, 50.0, 50.0));
-}
-
-fn main_1() {
-  var treeIndex_1 : i32;
-  var param_8 : BST;
-  var param_9 : i32;
-  var param_10 : i32;
-  var param_11 : i32;
-  var GLF_live1_looplimiter2 : i32;
-  var GLF_live1i : i32;
-  var param_12 : i32;
-  var param_13 : i32;
-  var param_14 : i32;
-  var param_15 : i32;
-  var param_16 : i32;
-  var param_17 : i32;
-  var param_18 : i32;
-  var param_19 : i32;
-  var param_20 : i32;
-  var param_21 : i32;
-  var param_22 : i32;
-  var param_23 : i32;
-  var GLF_live4_looplimiter3 : i32;
-  var GLF_live4i : i32;
-  var GLF_live4index : i32;
-  var GLF_live4obj : Obj;
-  var param_24 : i32;
-  var param_25 : i32;
-  var param_26 : i32;
-  var param_27 : i32;
-  var z : vec2<f32>;
-  var x : f32;
-  var param_28 : f32;
-  var y : f32;
-  var param_29 : f32;
-  var sum : i32;
-  var target_1 : i32;
-  var result : i32;
-  var param_30 : i32;
-  var a : f32;
-  var x_235 : vec3<f32>;
-  var param_31 : f32;
-  treeIndex_1 = 0;
-  let x_237 : BST = tree_1[0];
-  param_8 = x_237;
-  param_9 = 9;
-  makeTreeNode_struct_BST_i1_i1_i11_i1_(&(param_8), &(param_9));
-  let x_239 : BST = param_8;
-  tree_1[0] = x_239;
-  let x_113 : i32 = treeIndex_1;
-  treeIndex_1 = (x_113 + 1);
-  let x_115 : i32 = treeIndex_1;
-  param_10 = x_115;
-  param_11 = 5;
-  insert_i1_i1_(&(param_10), &(param_11));
-  let x_116 : i32 = treeIndex_1;
-  treeIndex_1 = (x_116 + 1);
-  GLF_live1_looplimiter2 = 0;
-  GLF_live1i = 0;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    let x_118 : i32 = GLF_live1_looplimiter2;
-    if ((x_118 >= 7)) {
-      break;
-    }
-    let x_119 : i32 = GLF_live1_looplimiter2;
-    GLF_live1_looplimiter2 = (x_119 + 1);
-
-    continuing {
-      let x_121 : i32 = GLF_live1i;
-      GLF_live1i = (x_121 + 1);
-    }
-  }
-  let x_123 : i32 = treeIndex_1;
-  param_12 = x_123;
-  param_13 = 12;
-  insert_i1_i1_(&(param_12), &(param_13));
-  let x_124 : i32 = treeIndex_1;
-  treeIndex_1 = (x_124 + 1);
-  let x_126 : i32 = treeIndex_1;
-  param_14 = x_126;
-  param_15 = 15;
-  insert_i1_i1_(&(param_14), &(param_15));
-  let x_127 : i32 = treeIndex_1;
-  treeIndex_1 = (x_127 + 1);
-  let x_129 : i32 = treeIndex_1;
-  param_16 = x_129;
-  param_17 = 7;
-  insert_i1_i1_(&(param_16), &(param_17));
-  let x_130 : i32 = treeIndex_1;
-  treeIndex_1 = (x_130 + 1);
-  let x_132 : i32 = treeIndex_1;
-  param_18 = x_132;
-  param_19 = 8;
-  insert_i1_i1_(&(param_18), &(param_19));
-  let x_133 : i32 = treeIndex_1;
-  treeIndex_1 = (x_133 + 1);
-  let x_135 : i32 = treeIndex_1;
-  param_20 = x_135;
-  param_21 = 2;
-  insert_i1_i1_(&(param_20), &(param_21));
-  let x_136 : i32 = treeIndex_1;
-  treeIndex_1 = (x_136 + 1);
-  let x_138 : i32 = treeIndex_1;
-  param_22 = x_138;
-  param_23 = 6;
-  insert_i1_i1_(&(param_22), &(param_23));
-  let x_139 : i32 = treeIndex_1;
-  treeIndex_1 = (x_139 + 1);
-  GLF_live4_looplimiter3 = 0;
-  GLF_live4i = 0;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    let x_141 : i32 = GLF_live4_looplimiter3;
-    if ((x_141 >= 3)) {
-      break;
-    }
-    let x_142 : i32 = GLF_live4_looplimiter3;
-    GLF_live4_looplimiter3 = (x_142 + 1);
-    GLF_live4index = 1;
-    let x_144 : i32 = GLF_live4index;
-    let x_145 : i32 = GLF_live4index;
-    let x_146 : i32 = GLF_live4index;
-    let x_269 : f32 = GLF_live4obj.even_numbers[1];
-    GLF_live4obj.even_numbers[select(0, x_146, ((x_144 >= 0) && (x_145 < 10)))] = x_269;
-    let x_147 : i32 = GLF_live4i;
-    let x_148 : i32 = GLF_live4i;
-    let x_149 : i32 = GLF_live4i;
-    GLF_live4obj.even_numbers[select(0, x_149, ((x_147 >= 0) && (x_148 < 10)))] = 1.0;
-
-    continuing {
-      let x_150 : i32 = GLF_live4i;
-      GLF_live4i = (x_150 + 1);
-    }
-  }
-  let x_152 : i32 = treeIndex_1;
-  param_24 = x_152;
-  param_25 = 17;
-  insert_i1_i1_(&(param_24), &(param_25));
-  let x_278 : f32 = x_27.injectionSwitch.x;
-  let x_280 : f32 = x_27.injectionSwitch.y;
-  if ((x_278 > x_280)) {
-    return;
-  }
-  let x_153 : i32 = treeIndex_1;
-  treeIndex_1 = (x_153 + 1);
-  let x_155 : i32 = treeIndex_1;
-  param_26 = x_155;
-  param_27 = 13;
-  insert_i1_i1_(&(param_26), &(param_27));
-  let x_285 : vec4<f32> = gl_FragCoord;
-  z = (vec2<f32>(x_285.y, x_285.x) / vec2<f32>(256.0, 256.0));
-  let x_289 : f32 = z.x;
-  param_28 = x_289;
-  let x_290 : f32 = makeFrame_f1_(&(param_28));
-  x = x_290;
-  let x_292 : f32 = z.y;
-  param_29 = x_292;
-  let x_293 : f32 = makeFrame_f1_(&(param_29));
-  y = x_293;
-  sum = -100;
-  target_1 = 0;
-  loop {
-    let x_156 : i32 = target_1;
-    if ((x_156 < 20)) {
-    } else {
-      break;
-    }
-    let x_157 : i32 = target_1;
-    param_30 = x_157;
-    let x_158 : i32 = search_i1_(&(param_30));
-    result = x_158;
-    let x_159 : i32 = result;
-    if ((x_159 > 0)) {
-    } else {
-      let x_160 : i32 = result;
-      switch(x_160) {
-        case 0: {
-          return;
-        }
-        case -1: {
-          let x_161 : i32 = sum;
-          sum = (x_161 + 1);
-        }
-        default: {
-        }
-      }
-    }
-
-    continuing {
-      let x_163 : i32 = target_1;
-      target_1 = (x_163 + 1);
-    }
-  }
-  let x_307 : f32 = x;
-  let x_308 : f32 = y;
-  let x_165 : i32 = sum;
-  a = (x_307 + (x_308 * f32(x_165)));
-  let x_313 : f32 = x_27.injectionSwitch.x;
-  let x_315 : f32 = x_27.injectionSwitch.y;
-  if ((x_313 < x_315)) {
-    x_235 = vec3<f32>(1.0, 0.0, 0.0);
-  } else {
-    let x_320 : f32 = a;
-    param_31 = x_320;
-    let x_321 : vec3<f32> = hueColor_f1_(&(param_31));
-    x_235 = x_321;
-  }
-  let x_322 : vec3<f32> = x_235;
-  x_GLF_color = vec4<f32>(x_322.x, x_322.y, x_322.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6010365..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,79 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x3 m43 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int ll1 = 0;
-  int rows = 0;
-  int ll4 = 0;
-  int ll2 = 0;
-  int c = 0;
-  float4x3 tempm43 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int ll3 = 0;
-  int d = 0;
-  int r = 0;
-  float sums[9] = (float[9])0;
-  int idx = 0;
-  m43 = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  ll1 = 0;
-  rows = 2;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    if ((ll1 >= 5)) {
-      break;
-    }
-    ll1 = (ll1 + 1);
-    ll4 = 10;
-    ll2 = 0;
-    c = 0;
-    {
-      for(; (c < 1); c = (c + 1)) {
-        if ((ll2 >= 0)) {
-          break;
-        }
-        ll2 = (ll2 + 1);
-        tempm43 = m43;
-        ll3 = 0;
-        d = 0;
-        {
-          for(; (1 < ll4); d = (d + 1)) {
-            set_float3(tempm43[(((d >= 0) & (d < 4)) ? d : 0)], (((r >= 0) & (r < 3)) ? r : 0), 1.0f);
-          }
-        }
-        const int x_111 = (((idx >= 0) & (idx < 9)) ? idx : 0);
-        const float x_113 = m43[c].y;
-        const float x_115 = sums[x_111];
-        sums[x_111] = (x_115 + x_113);
-      }
-    }
-    idx = (idx + 1);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.msl
deleted file mode 100644
index 45a90de..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4x3 m43 = float4x3(0.0f);
-  int ll1 = 0;
-  int rows = 0;
-  int ll4 = 0;
-  int ll2 = 0;
-  int c = 0;
-  float4x3 tempm43 = float4x3(0.0f);
-  int ll3 = 0;
-  int d = 0;
-  int r = 0;
-  tint_array_wrapper sums = {};
-  int idx = 0;
-  m43 = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  ll1 = 0;
-  rows = 2;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    int const x_16 = ll1;
-    if ((x_16 >= 5)) {
-      break;
-    }
-    int const x_17 = ll1;
-    ll1 = as_type<int>((as_type<uint>(x_17) + as_type<uint>(1)));
-    ll4 = 10;
-    ll2 = 0;
-    c = 0;
-    while (true) {
-      int const x_19 = c;
-      if ((x_19 < 1)) {
-      } else {
-        break;
-      }
-      int const x_20 = ll2;
-      if ((x_20 >= 0)) {
-        break;
-      }
-      int const x_21 = ll2;
-      ll2 = as_type<int>((as_type<uint>(x_21) + as_type<uint>(1)));
-      float4x3 const x_92 = m43;
-      tempm43 = x_92;
-      ll3 = 0;
-      d = 0;
-      while (true) {
-        int const x_23 = ll4;
-        if ((1 < x_23)) {
-        } else {
-          break;
-        }
-        int const x_24 = d;
-        int const x_25 = d;
-        int const x_26 = d;
-        int const x_27 = r;
-        int const x_28 = r;
-        int const x_29 = r;
-        tempm43[select(0, x_26, ((x_24 >= 0) & (x_25 < 4)))][select(0, x_29, ((x_27 >= 0) & (x_28 < 3)))] = 1.0f;
-        {
-          int const x_30 = d;
-          d = as_type<int>((as_type<uint>(x_30) + as_type<uint>(1)));
-        }
-      }
-      int const x_32 = idx;
-      int const x_33 = idx;
-      int const x_34 = idx;
-      int const x_111 = select(0, x_34, ((x_32 >= 0) & (x_33 < 9)));
-      int const x_35 = c;
-      float const x_113 = m43[x_35].y;
-      float const x_115 = sums.arr[x_111];
-      sums.arr[x_111] = (x_115 + x_113);
-      {
-        int const x_36 = c;
-        c = as_type<int>((as_type<uint>(x_36) + as_type<uint>(1)));
-      }
-    }
-    int const x_38 = idx;
-    idx = as_type<int>((as_type<uint>(x_38) + as_type<uint>(1)));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 311fb0b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,227 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 140
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m43 "m43"
-               OpName %ll1 "ll1"
-               OpName %rows "rows"
-               OpName %ll4 "ll4"
-               OpName %ll2 "ll2"
-               OpName %c "c"
-               OpName %tempm43 "tempm43"
-               OpName %ll3 "ll3"
-               OpName %d "d"
-               OpName %r "r"
-               OpName %sums "sums"
-               OpName %idx "idx"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %16 = OpConstantNull %mat4v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %34 = OpConstantNull %_arr_float_uint_9
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %39 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-         %40 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %41 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %42 = OpConstantComposite %mat4v3float %38 %39 %40 %41
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_5 = OpConstant %int 5
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-        %129 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-        %m43 = OpVariable %_ptr_Function_mat4v3float Function %16
-        %ll1 = OpVariable %_ptr_Function_int Function %20
-       %rows = OpVariable %_ptr_Function_int Function %20
-        %ll4 = OpVariable %_ptr_Function_int Function %20
-        %ll2 = OpVariable %_ptr_Function_int Function %20
-          %c = OpVariable %_ptr_Function_int Function %20
-    %tempm43 = OpVariable %_ptr_Function_mat4v3float Function %16
-        %ll3 = OpVariable %_ptr_Function_int Function %20
-          %d = OpVariable %_ptr_Function_int Function %20
-          %r = OpVariable %_ptr_Function_int Function %20
-       %sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %34
-        %idx = OpVariable %_ptr_Function_int Function %20
-               OpStore %m43 %42
-               OpStore %ll1 %int_0
-               OpStore %rows %int_2
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-               OpSelectionMerge %51 None
-               OpBranchConditional %true %52 %53
-         %52 = OpLabel
-               OpBranch %51
-         %53 = OpLabel
-               OpBranch %46
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-         %55 = OpLoad %int %ll1
-         %57 = OpSGreaterThanEqual %bool %55 %int_5
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpBranch %46
-         %58 = OpLabel
-         %60 = OpLoad %int %ll1
-         %62 = OpIAdd %int %60 %int_1
-               OpStore %ll1 %62
-               OpStore %ll4 %int_10
-               OpStore %ll2 %int_0
-               OpStore %c %int_0
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %c
-         %69 = OpSLessThan %bool %68 %int_1
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %65
-         %70 = OpLabel
-         %73 = OpLoad %int %ll2
-         %74 = OpSGreaterThanEqual %bool %73 %int_0
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-               OpBranch %65
-         %75 = OpLabel
-         %77 = OpLoad %int %ll2
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %ll2 %78
-         %79 = OpLoad %mat4v3float %m43
-               OpStore %tempm43 %79
-               OpStore %ll3 %int_0
-               OpStore %d %int_0
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %ll4
-         %85 = OpSLessThan %bool %int_1 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-               OpBranch %86
-         %88 = OpLabel
-               OpBranch %81
-         %86 = OpLabel
-         %89 = OpLoad %int %d
-         %90 = OpLoad %int %d
-         %91 = OpLoad %int %d
-         %92 = OpLoad %int %r
-         %93 = OpLoad %int %r
-         %94 = OpLoad %int %r
-         %96 = OpSGreaterThanEqual %bool %89 %int_0
-         %98 = OpSLessThan %bool %90 %int_4
-         %99 = OpLogicalAnd %bool %96 %98
-         %95 = OpSelect %int %99 %91 %int_0
-        %101 = OpSGreaterThanEqual %bool %92 %int_0
-        %103 = OpSLessThan %bool %93 %int_3
-        %104 = OpLogicalAnd %bool %101 %103
-        %100 = OpSelect %int %104 %94 %int_0
-        %106 = OpAccessChain %_ptr_Function_float %tempm43 %95 %100
-               OpStore %106 %float_1
-               OpBranch %82
-         %82 = OpLabel
-        %107 = OpLoad %int %d
-        %108 = OpIAdd %int %107 %int_1
-               OpStore %d %108
-               OpBranch %80
-         %81 = OpLabel
-        %109 = OpLoad %int %idx
-        %110 = OpLoad %int %idx
-        %111 = OpLoad %int %idx
-        %113 = OpSGreaterThanEqual %bool %109 %int_0
-        %115 = OpSLessThan %bool %110 %int_9
-        %116 = OpLogicalAnd %bool %113 %115
-        %112 = OpSelect %int %116 %111 %int_0
-        %117 = OpLoad %int %c
-        %119 = OpAccessChain %_ptr_Function_float %m43 %117 %uint_1
-        %120 = OpLoad %float %119
-        %121 = OpAccessChain %_ptr_Function_float %sums %112
-        %122 = OpLoad %float %121
-        %123 = OpAccessChain %_ptr_Function_float %sums %112
-        %124 = OpFAdd %float %122 %120
-               OpStore %123 %124
-               OpBranch %66
-         %66 = OpLabel
-        %125 = OpLoad %int %c
-        %126 = OpIAdd %int %125 %int_1
-               OpStore %c %126
-               OpBranch %64
-         %65 = OpLabel
-        %127 = OpLoad %int %idx
-        %128 = OpIAdd %int %127 %int_1
-               OpStore %idx %128
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %45
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %129
-        %132 = OpLabel
-        %133 = OpFunctionCall %void %main_1
-        %134 = OpLoad %v4float %x_GLF_color
-        %135 = OpCompositeConstruct %main_out %134
-               OpReturnValue %135
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-        %137 = OpLabel
-        %138 = OpFunctionCall %main_out %main_inner
-        %139 = OpCompositeExtract %v4float %138 0
-               OpStore %x_GLF_color_1_1 %139
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 365856f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,98 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m43 : mat4x3<f32>;
-  var ll1 : i32;
-  var rows : i32;
-  var ll4 : i32;
-  var ll2 : i32;
-  var c : i32;
-  var tempm43 : mat4x3<f32>;
-  var ll3 : i32;
-  var d : i32;
-  var r : i32;
-  var sums : array<f32, 9>;
-  var idx : i32;
-  m43 = mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0));
-  ll1 = 0;
-  rows = 2;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    let x_16 : i32 = ll1;
-    if ((x_16 >= 5)) {
-      break;
-    }
-    let x_17 : i32 = ll1;
-    ll1 = (x_17 + 1);
-    ll4 = 10;
-    ll2 = 0;
-    c = 0;
-    loop {
-      let x_19 : i32 = c;
-      if ((x_19 < 1)) {
-      } else {
-        break;
-      }
-      let x_20 : i32 = ll2;
-      if ((x_20 >= 0)) {
-        break;
-      }
-      let x_21 : i32 = ll2;
-      ll2 = (x_21 + 1);
-      let x_92 : mat4x3<f32> = m43;
-      tempm43 = x_92;
-      ll3 = 0;
-      d = 0;
-      loop {
-        let x_23 : i32 = ll4;
-        if ((1 < x_23)) {
-        } else {
-          break;
-        }
-        let x_24 : i32 = d;
-        let x_25 : i32 = d;
-        let x_26 : i32 = d;
-        let x_27 : i32 = r;
-        let x_28 : i32 = r;
-        let x_29 : i32 = r;
-        tempm43[select(0, x_26, ((x_24 >= 0) & (x_25 < 4)))][select(0, x_29, ((x_27 >= 0) & (x_28 < 3)))] = 1.0;
-
-        continuing {
-          let x_30 : i32 = d;
-          d = (x_30 + 1);
-        }
-      }
-      let x_32 : i32 = idx;
-      let x_33 : i32 = idx;
-      let x_34 : i32 = idx;
-      let x_111 : i32 = select(0, x_34, ((x_32 >= 0) & (x_33 < 9)));
-      let x_35 : i32 = c;
-      let x_113 : f32 = m43[x_35].y;
-      let x_115 : f32 = sums[x_111];
-      sums[x_111] = (x_115 + x_113);
-
-      continuing {
-        let x_36 : i32 = c;
-        c = (x_36 + 1);
-      }
-    }
-    let x_38 : i32 = idx;
-    idx = (x_38 + 1);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 44330e5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,91 +0,0 @@
-void set_float3(inout float3 vec, int idx, float val) {
-  vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
-}
-
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float4x3 m43 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int ll1 = 0;
-  int rows = 0;
-  int ll4 = 0;
-  int ll2 = 0;
-  int c = 0;
-  float4x3 tempm43 = float4x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
-  int ll3 = 0;
-  int d = 0;
-  int r = 0;
-  float sums[9] = (float[9])0;
-  int idx = 0;
-  m43 = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  ll1 = 0;
-  rows = 2;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    if ((ll1 >= 5)) {
-      break;
-    }
-    ll1 = (ll1 + 1);
-    ll4 = 10;
-    ll2 = 0;
-    c = 0;
-    {
-      for(; (c < 1); c = (c + 1)) {
-        if ((ll2 >= 0)) {
-          break;
-        }
-        ll2 = (ll2 + 1);
-        tempm43 = m43;
-        ll3 = 0;
-        d = 0;
-        {
-          for(; (1 < ll4); d = (d + 1)) {
-            bool tint_tmp = (d >= 0);
-            if (tint_tmp) {
-              tint_tmp = (d < 4);
-            }
-            bool tint_tmp_1 = (r >= 0);
-            if (tint_tmp_1) {
-              tint_tmp_1 = (r < 3);
-            }
-            set_float3(tempm43[((tint_tmp) ? d : 0)], ((tint_tmp_1) ? r : 0), 1.0f);
-          }
-        }
-        bool tint_tmp_2 = (idx >= 0);
-        if (tint_tmp_2) {
-          tint_tmp_2 = (idx < 9);
-        }
-        const int x_111 = ((tint_tmp_2) ? idx : 0);
-        const float x_113 = m43[c].y;
-        const float x_115 = sums[x_111];
-        sums[x_111] = (x_115 + x_113);
-      }
-    }
-    idx = (idx + 1);
-  }
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {x_GLF_color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.msl
deleted file mode 100644
index 3187e52..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  float arr[9];
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  float4x3 m43 = float4x3(0.0f);
-  int ll1 = 0;
-  int rows = 0;
-  int ll4 = 0;
-  int ll2 = 0;
-  int c = 0;
-  float4x3 tempm43 = float4x3(0.0f);
-  int ll3 = 0;
-  int d = 0;
-  int r = 0;
-  tint_array_wrapper sums = {};
-  int idx = 0;
-  m43 = float4x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), float3(0.0f, 0.0f, 0.0f));
-  ll1 = 0;
-  rows = 2;
-  while (true) {
-    if (true) {
-    } else {
-      break;
-    }
-    *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-    int const x_16 = ll1;
-    if ((x_16 >= 5)) {
-      break;
-    }
-    int const x_17 = ll1;
-    ll1 = as_type<int>((as_type<uint>(x_17) + as_type<uint>(1)));
-    ll4 = 10;
-    ll2 = 0;
-    c = 0;
-    while (true) {
-      int const x_19 = c;
-      if ((x_19 < 1)) {
-      } else {
-        break;
-      }
-      int const x_20 = ll2;
-      if ((x_20 >= 0)) {
-        break;
-      }
-      int const x_21 = ll2;
-      ll2 = as_type<int>((as_type<uint>(x_21) + as_type<uint>(1)));
-      float4x3 const x_92 = m43;
-      tempm43 = x_92;
-      ll3 = 0;
-      d = 0;
-      while (true) {
-        int const x_23 = ll4;
-        if ((1 < x_23)) {
-        } else {
-          break;
-        }
-        int const x_24 = d;
-        int const x_25 = d;
-        int const x_26 = d;
-        int const x_27 = r;
-        int const x_28 = r;
-        int const x_29 = r;
-        tempm43[select(0, x_26, ((x_24 >= 0) && (x_25 < 4)))][select(0, x_29, ((x_27 >= 0) && (x_28 < 3)))] = 1.0f;
-        {
-          int const x_30 = d;
-          d = as_type<int>((as_type<uint>(x_30) + as_type<uint>(1)));
-        }
-      }
-      int const x_32 = idx;
-      int const x_33 = idx;
-      int const x_34 = idx;
-      int const x_111 = select(0, x_34, ((x_32 >= 0) && (x_33 < 9)));
-      int const x_35 = c;
-      float const x_113 = m43[x_35].y;
-      float const x_115 = sums.arr[x_111];
-      sums.arr[x_111] = (x_115 + x_113);
-      {
-        int const x_36 = c;
-        c = as_type<int>((as_type<uint>(x_36) + as_type<uint>(1)));
-      }
-    }
-    int const x_38 = idx;
-    idx = as_type<int>((as_type<uint>(x_38) + as_type<uint>(1)));
-  }
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3b569c8..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,242 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 146
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %m43 "m43"
-               OpName %ll1 "ll1"
-               OpName %rows "rows"
-               OpName %ll4 "ll4"
-               OpName %ll2 "ll2"
-               OpName %c "c"
-               OpName %tempm43 "tempm43"
-               OpName %ll3 "ll3"
-               OpName %d "d"
-               OpName %r "r"
-               OpName %sums "sums"
-               OpName %idx "idx"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %_arr_float_uint_9 ArrayStride 4
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-%mat4v3float = OpTypeMatrix %v3float 4
-%_ptr_Function_mat4v3float = OpTypePointer Function %mat4v3float
-         %16 = OpConstantNull %mat4v3float
-        %int = OpTypeInt 32 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %20 = OpConstantNull %int
-       %uint = OpTypeInt 32 0
-     %uint_9 = OpConstant %uint 9
-%_arr_float_uint_9 = OpTypeArray %float %uint_9
-%_ptr_Function__arr_float_uint_9 = OpTypePointer Function %_arr_float_uint_9
-         %34 = OpConstantNull %_arr_float_uint_9
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %38 = OpConstantComposite %v3float %float_1 %float_0 %float_0
-         %39 = OpConstantComposite %v3float %float_0 %float_1 %float_0
-         %40 = OpConstantComposite %v3float %float_0 %float_0 %float_1
-         %41 = OpConstantComposite %v3float %float_0 %float_0 %float_0
-         %42 = OpConstantComposite %mat4v3float %38 %39 %40 %41
-      %int_0 = OpConstant %int 0
-      %int_2 = OpConstant %int 2
-       %bool = OpTypeBool
-       %true = OpConstantTrue %bool
-         %54 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-      %int_5 = OpConstant %int 5
-      %int_1 = OpConstant %int 1
-     %int_10 = OpConstant %int 10
-      %int_4 = OpConstant %int 4
-      %int_3 = OpConstant %int 3
-%_ptr_Function_float = OpTypePointer Function %float
-      %int_9 = OpConstant %int 9
-     %uint_1 = OpConstant %uint 1
-   %main_out = OpTypeStruct %v4float
-        %135 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-        %m43 = OpVariable %_ptr_Function_mat4v3float Function %16
-        %ll1 = OpVariable %_ptr_Function_int Function %20
-       %rows = OpVariable %_ptr_Function_int Function %20
-        %ll4 = OpVariable %_ptr_Function_int Function %20
-        %ll2 = OpVariable %_ptr_Function_int Function %20
-          %c = OpVariable %_ptr_Function_int Function %20
-    %tempm43 = OpVariable %_ptr_Function_mat4v3float Function %16
-        %ll3 = OpVariable %_ptr_Function_int Function %20
-          %d = OpVariable %_ptr_Function_int Function %20
-          %r = OpVariable %_ptr_Function_int Function %20
-       %sums = OpVariable %_ptr_Function__arr_float_uint_9 Function %34
-        %idx = OpVariable %_ptr_Function_int Function %20
-               OpStore %m43 %42
-               OpStore %ll1 %int_0
-               OpStore %rows %int_2
-               OpBranch %45
-         %45 = OpLabel
-               OpLoopMerge %46 %47 None
-               OpBranch %48
-         %48 = OpLabel
-               OpSelectionMerge %51 None
-               OpBranchConditional %true %52 %53
-         %52 = OpLabel
-               OpBranch %51
-         %53 = OpLabel
-               OpBranch %46
-         %51 = OpLabel
-               OpStore %x_GLF_color %54
-         %55 = OpLoad %int %ll1
-         %57 = OpSGreaterThanEqual %bool %55 %int_5
-               OpSelectionMerge %58 None
-               OpBranchConditional %57 %59 %58
-         %59 = OpLabel
-               OpBranch %46
-         %58 = OpLabel
-         %60 = OpLoad %int %ll1
-         %62 = OpIAdd %int %60 %int_1
-               OpStore %ll1 %62
-               OpStore %ll4 %int_10
-               OpStore %ll2 %int_0
-               OpStore %c %int_0
-               OpBranch %64
-         %64 = OpLabel
-               OpLoopMerge %65 %66 None
-               OpBranch %67
-         %67 = OpLabel
-         %68 = OpLoad %int %c
-         %69 = OpSLessThan %bool %68 %int_1
-               OpSelectionMerge %70 None
-               OpBranchConditional %69 %71 %72
-         %71 = OpLabel
-               OpBranch %70
-         %72 = OpLabel
-               OpBranch %65
-         %70 = OpLabel
-         %73 = OpLoad %int %ll2
-         %74 = OpSGreaterThanEqual %bool %73 %int_0
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %75
-         %76 = OpLabel
-               OpBranch %65
-         %75 = OpLabel
-         %77 = OpLoad %int %ll2
-         %78 = OpIAdd %int %77 %int_1
-               OpStore %ll2 %78
-         %79 = OpLoad %mat4v3float %m43
-               OpStore %tempm43 %79
-               OpStore %ll3 %int_0
-               OpStore %d %int_0
-               OpBranch %80
-         %80 = OpLabel
-               OpLoopMerge %81 %82 None
-               OpBranch %83
-         %83 = OpLabel
-         %84 = OpLoad %int %ll4
-         %85 = OpSLessThan %bool %int_1 %84
-               OpSelectionMerge %86 None
-               OpBranchConditional %85 %87 %88
-         %87 = OpLabel
-               OpBranch %86
-         %88 = OpLabel
-               OpBranch %81
-         %86 = OpLabel
-         %89 = OpLoad %int %d
-         %90 = OpLoad %int %d
-         %91 = OpLoad %int %d
-         %92 = OpLoad %int %r
-         %93 = OpLoad %int %r
-         %94 = OpLoad %int %r
-         %96 = OpSGreaterThanEqual %bool %89 %int_0
-               OpSelectionMerge %97 None
-               OpBranchConditional %96 %98 %97
-         %98 = OpLabel
-        %100 = OpSLessThan %bool %90 %int_4
-               OpBranch %97
-         %97 = OpLabel
-        %101 = OpPhi %bool %96 %86 %100 %98
-         %95 = OpSelect %int %101 %91 %int_0
-        %103 = OpSGreaterThanEqual %bool %92 %int_0
-               OpSelectionMerge %104 None
-               OpBranchConditional %103 %105 %104
-        %105 = OpLabel
-        %107 = OpSLessThan %bool %93 %int_3
-               OpBranch %104
-        %104 = OpLabel
-        %108 = OpPhi %bool %103 %97 %107 %105
-        %102 = OpSelect %int %108 %94 %int_0
-        %110 = OpAccessChain %_ptr_Function_float %tempm43 %95 %102
-               OpStore %110 %float_1
-               OpBranch %82
-         %82 = OpLabel
-        %111 = OpLoad %int %d
-        %112 = OpIAdd %int %111 %int_1
-               OpStore %d %112
-               OpBranch %80
-         %81 = OpLabel
-        %113 = OpLoad %int %idx
-        %114 = OpLoad %int %idx
-        %115 = OpLoad %int %idx
-        %117 = OpSGreaterThanEqual %bool %113 %int_0
-               OpSelectionMerge %118 None
-               OpBranchConditional %117 %119 %118
-        %119 = OpLabel
-        %121 = OpSLessThan %bool %114 %int_9
-               OpBranch %118
-        %118 = OpLabel
-        %122 = OpPhi %bool %117 %81 %121 %119
-        %116 = OpSelect %int %122 %115 %int_0
-        %123 = OpLoad %int %c
-        %125 = OpAccessChain %_ptr_Function_float %m43 %123 %uint_1
-        %126 = OpLoad %float %125
-        %127 = OpAccessChain %_ptr_Function_float %sums %116
-        %128 = OpLoad %float %127
-        %129 = OpAccessChain %_ptr_Function_float %sums %116
-        %130 = OpFAdd %float %128 %126
-               OpStore %129 %130
-               OpBranch %66
-         %66 = OpLabel
-        %131 = OpLoad %int %c
-        %132 = OpIAdd %int %131 %int_1
-               OpStore %c %132
-               OpBranch %64
-         %65 = OpLabel
-        %133 = OpLoad %int %idx
-        %134 = OpIAdd %int %133 %int_1
-               OpStore %idx %134
-               OpBranch %47
-         %47 = OpLabel
-               OpBranch %45
-         %46 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %135
-        %138 = OpLabel
-        %139 = OpFunctionCall %void %main_1
-        %140 = OpLoad %v4float %x_GLF_color
-        %141 = OpCompositeConstruct %main_out %140
-               OpReturnValue %141
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-        %143 = OpLabel
-        %144 = OpFunctionCall %main_out %main_inner
-        %145 = OpCompositeExtract %v4float %144 0
-               OpStore %x_GLF_color_1_1 %145
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index dd18573..0000000
--- a/test/vk-gl-cts/graphicsfuzz/write-red-in-loop-nest/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,98 +0,0 @@
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var m43 : mat4x3<f32>;
-  var ll1 : i32;
-  var rows : i32;
-  var ll4 : i32;
-  var ll2 : i32;
-  var c : i32;
-  var tempm43 : mat4x3<f32>;
-  var ll3 : i32;
-  var d : i32;
-  var r : i32;
-  var sums : array<f32, 9>;
-  var idx : i32;
-  m43 = mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0));
-  ll1 = 0;
-  rows = 2;
-  loop {
-    if (true) {
-    } else {
-      break;
-    }
-    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-    let x_16 : i32 = ll1;
-    if ((x_16 >= 5)) {
-      break;
-    }
-    let x_17 : i32 = ll1;
-    ll1 = (x_17 + 1);
-    ll4 = 10;
-    ll2 = 0;
-    c = 0;
-    loop {
-      let x_19 : i32 = c;
-      if ((x_19 < 1)) {
-      } else {
-        break;
-      }
-      let x_20 : i32 = ll2;
-      if ((x_20 >= 0)) {
-        break;
-      }
-      let x_21 : i32 = ll2;
-      ll2 = (x_21 + 1);
-      let x_92 : mat4x3<f32> = m43;
-      tempm43 = x_92;
-      ll3 = 0;
-      d = 0;
-      loop {
-        let x_23 : i32 = ll4;
-        if ((1 < x_23)) {
-        } else {
-          break;
-        }
-        let x_24 : i32 = d;
-        let x_25 : i32 = d;
-        let x_26 : i32 = d;
-        let x_27 : i32 = r;
-        let x_28 : i32 = r;
-        let x_29 : i32 = r;
-        tempm43[select(0, x_26, ((x_24 >= 0) && (x_25 < 4)))][select(0, x_29, ((x_27 >= 0) && (x_28 < 3)))] = 1.0;
-
-        continuing {
-          let x_30 : i32 = d;
-          d = (x_30 + 1);
-        }
-      }
-      let x_32 : i32 = idx;
-      let x_33 : i32 = idx;
-      let x_34 : i32 = idx;
-      let x_111 : i32 = select(0, x_34, ((x_32 >= 0) && (x_33 < 9)));
-      let x_35 : i32 = c;
-      let x_113 : f32 = m43[x_35].y;
-      let x_115 : f32 = sums[x_111];
-      sums[x_111] = (x_115 + x_113);
-
-      continuing {
-        let x_36 : i32 = c;
-        c = (x_36 + 1);
-      }
-    }
-    let x_38 : i32 = idx;
-    idx = (x_38 + 1);
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f7d01ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float height = 0.0f;
-  height = 256.0f;
-  const float x_40 = asfloat(x_6[0].y);
-  if ((x_40 < 0.0f)) {
-    x_GLF_color = lerp(float4(30.180000305f, 8840.0f, 469.970001221f, 18.239999771f), float4(9.899999619f, 0.100000001f, 1169.538696289f, 55.790000916f), float4(7612.9453125f, 797.010986328f, height, 9.0f));
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.msl b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9381267..0000000
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float height = 0.0f;
-  height = 256.0f;
-  float const x_40 = x_6.injectionSwitch.y;
-  if ((x_40 < 0.0f)) {
-    float const x_44 = height;
-    *(tint_symbol_3) = mix(float4(30.180000305f, 8840.0f, 469.970001221f, 18.239999771f), float4(9.899999619f, 0.100000001f, 1169.538696289f, 55.790000916f), float4(7612.9453125f, 797.010986328f, x_44, 9.0f));
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index adc3c12..0000000
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,100 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-         %33 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %height "height"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-  %float_256 = OpConstant %float 256
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-%float_30_1800003 = OpConstant %float 30.1800003
- %float_8840 = OpConstant %float 8840
-%float_469_970001 = OpConstant %float 469.970001
-%float_18_2399998 = OpConstant %float 18.2399998
-         %38 = OpConstantComposite %v4float %float_30_1800003 %float_8840 %float_469_970001 %float_18_2399998
-%float_9_89999962 = OpConstant %float 9.89999962
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_1169_5387 = OpConstant %float 1169.5387
-%float_55_7900009 = OpConstant %float 55.7900009
-         %43 = OpConstantComposite %v4float %float_9_89999962 %float_0_100000001 %float_1169_5387 %float_55_7900009
-%float_7612_94531 = OpConstant %float 7612.94531
-%float_797_010986 = OpConstant %float 797.010986
-    %float_9 = OpConstant %float 9
-    %float_1 = OpConstant %float 1
-         %49 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-     %height = OpVariable %_ptr_Function_float Function %18
-               OpStore %height %float_256
-         %24 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %25 = OpLoad %float %24
-         %27 = OpFOrdLessThan %bool %25 %float_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
-         %31 = OpLoad %float %height
-         %47 = OpCompositeConstruct %v4float %float_7612_94531 %float_797_010986 %31 %float_9
-         %32 = OpExtInst %v4float %33 FMix %38 %43 %47
-               OpStore %x_GLF_color %32
-               OpBranch %29
-         %29 = OpLabel
-               OpStore %x_GLF_color %49
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index a5f11f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var height : f32;
-  height = 256.0;
-  let x_40 : f32 = x_6.injectionSwitch.y;
-  if ((x_40 < 0.0)) {
-    let x_44 : f32 = height;
-    x_GLF_color = mix(vec4<f32>(30.180000305, 8840.0, 469.970001221, 18.239999771), vec4<f32>(9.899999619, 0.100000001, 1169.538696289, 55.790000916), vec4<f32>(7612.9453125, 797.010986328, x_44, 9.0));
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f7d01ba..0000000
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-cbuffer cbuffer_x_6 : register(b0, space0) {
-  uint4 x_6[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  float height = 0.0f;
-  height = 256.0f;
-  const float x_40 = asfloat(x_6[0].y);
-  if ((x_40 < 0.0f)) {
-    x_GLF_color = lerp(float4(30.180000305f, 8840.0f, 469.970001221f, 18.239999771f), float4(9.899999619f, 0.100000001f, 1169.538696289f, 55.790000916f), float4(7612.9453125f, 797.010986328f, height, 9.0f));
-  }
-  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol {
-  float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_2 = {x_GLF_color};
-  return tint_symbol_2;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.msl b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9381267..0000000
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct buf0 {
-  /* 0x0000 */ float2 injectionSwitch;
-};
-struct main_out {
-  float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
-  float4 x_GLF_color_1 [[color(0)]];
-};
-
-void main_1(constant buf0& x_6, thread float4* const tint_symbol_3) {
-  float height = 0.0f;
-  height = 256.0f;
-  float const x_40 = x_6.injectionSwitch.y;
-  if ((x_40 < 0.0f)) {
-    float const x_44 = height;
-    *(tint_symbol_3) = mix(float4(30.180000305f, 8840.0f, 469.970001221f, 18.239999771f), float4(9.899999619f, 0.100000001f, 1169.538696289f, 55.790000916f), float4(7612.9453125f, 797.010986328f, x_44, 9.0f));
-  }
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(constant buf0& x_6, thread float4* const tint_symbol_4) {
-  main_1(x_6, tint_symbol_4);
-  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(x_6, &(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index adc3c12..0000000
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,100 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 61
-; Schema: 0
-               OpCapability Shader
-         %33 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_GLF_color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_GLF_color_1_1 "x_GLF_color_1_1"
-               OpName %buf0 "buf0"
-               OpMemberName %buf0 0 "injectionSwitch"
-               OpName %x_6 "x_6"
-               OpName %x_GLF_color "x_GLF_color"
-               OpName %main_1 "main_1"
-               OpName %height "height"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_GLF_color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %x_GLF_color_1_1 Location 0
-               OpDecorate %buf0 Block
-               OpMemberDecorate %buf0 0 Offset 0
-               OpDecorate %x_6 NonWritable
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%x_GLF_color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-    %v2float = OpTypeVector %float 2
-       %buf0 = OpTypeStruct %v2float
-%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
-        %x_6 = OpVariable %_ptr_Uniform_buf0 Uniform
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%x_GLF_color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-         %12 = OpTypeFunction %void
-%_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpConstantNull %float
-  %float_256 = OpConstant %float 256
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-     %uint_1 = OpConstant %uint 1
-%_ptr_Uniform_float = OpTypePointer Uniform %float
-    %float_0 = OpConstant %float 0
-       %bool = OpTypeBool
-%float_30_1800003 = OpConstant %float 30.1800003
- %float_8840 = OpConstant %float 8840
-%float_469_970001 = OpConstant %float 469.970001
-%float_18_2399998 = OpConstant %float 18.2399998
-         %38 = OpConstantComposite %v4float %float_30_1800003 %float_8840 %float_469_970001 %float_18_2399998
-%float_9_89999962 = OpConstant %float 9.89999962
-%float_0_100000001 = OpConstant %float 0.100000001
-%float_1169_5387 = OpConstant %float 1169.5387
-%float_55_7900009 = OpConstant %float 55.7900009
-         %43 = OpConstantComposite %v4float %float_9_89999962 %float_0_100000001 %float_1169_5387 %float_55_7900009
-%float_7612_94531 = OpConstant %float 7612.94531
-%float_797_010986 = OpConstant %float 797.010986
-    %float_9 = OpConstant %float 9
-    %float_1 = OpConstant %float 1
-         %49 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-   %main_out = OpTypeStruct %v4float
-         %50 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %12
-         %15 = OpLabel
-     %height = OpVariable %_ptr_Function_float Function %18
-               OpStore %height %float_256
-         %24 = OpAccessChain %_ptr_Uniform_float %x_6 %uint_0 %uint_1
-         %25 = OpLoad %float %24
-         %27 = OpFOrdLessThan %bool %25 %float_0
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %29
-         %30 = OpLabel
-         %31 = OpLoad %float %height
-         %47 = OpCompositeConstruct %v4float %float_7612_94531 %float_797_010986 %31 %float_9
-         %32 = OpExtInst %v4float %33 FMix %38 %43 %47
-               OpStore %x_GLF_color %32
-               OpBranch %29
-         %29 = OpLabel
-               OpStore %x_GLF_color %49
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %50
-         %53 = OpLabel
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %v4float %x_GLF_color
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %12
-         %58 = OpLabel
-         %59 = OpFunctionCall %main_out %main_inner
-         %60 = OpCompositeExtract %v4float %59 0
-               OpStore %x_GLF_color_1_1 %60
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index a5f11f5..0000000
--- a/test/vk-gl-cts/graphicsfuzz/wrong-color-in-always-false-if/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-[[block]]
-struct buf0 {
-  injectionSwitch : vec2<f32>;
-};
-
-[[group(0), binding(0)]] var<uniform> x_6 : buf0;
-
-var<private> x_GLF_color : vec4<f32>;
-
-fn main_1() {
-  var height : f32;
-  height = 256.0;
-  let x_40 : f32 = x_6.injectionSwitch.y;
-  if ((x_40 < 0.0)) {
-    let x_44 : f32 = height;
-    x_GLF_color = mix(vec4<f32>(30.180000305, 8840.0, 469.970001221, 18.239999771), vec4<f32>(9.899999619, 0.100000001, 1169.538696289, 55.790000916), vec4<f32>(7612.9453125, 797.010986328, x_44, 9.0));
-  }
-  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_GLF_color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(x_GLF_color);
-}
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index c1ab9af..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-static uint3 gl_WorkGroupID = uint3(0u, 0u, 0u);
-ByteAddressBuffer x_13 : register(t2, space0);
-RWByteAddressBuffer x_15 : register(u3, space0);
-ByteAddressBuffer x_17 : register(t1, space0);
-ByteAddressBuffer x_19 : register(t0, space0);
-
-void main_1() {
-  uint base_index_in = 0u;
-  uint base_index_out = 0u;
-  int index_in0 = 0;
-  int index_in1 = 0;
-  int index_out0 = 0;
-  int index_out1 = 0;
-  int condition_index = 0;
-  int i = 0;
-  int temp0 = 0;
-  int temp1 = 0;
-  const uint x_58 = gl_WorkGroupID.x;
-  base_index_in = (128u * x_58);
-  const uint x_61 = gl_WorkGroupID.x;
-  base_index_out = (256u * x_61);
-  index_in0 = 127;
-  index_in1 = 383;
-  index_out0 = 255;
-  index_out1 = 383;
-  condition_index = 0;
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      const int x_72 = asint(x_13.Load((4u * uint(condition_index))));
-      if ((x_72 == 0)) {
-        const uint x_77 = base_index_out;
-        const int x_78 = index_out0;
-        const int x_86 = asint(x_17.Load((4u * (base_index_in + asuint(index_in0)))));
-        x_15.Store((4u * (x_77 + asuint(x_78))), asuint(x_86));
-        index_out0 = (index_out0 - 1);
-        index_in1 = (index_in1 - 1);
-      } else {
-        const uint x_92 = base_index_out;
-        const int x_93 = index_out1;
-        const int x_101 = asint(x_19.Load((4u * (base_index_in + asuint(index_in1)))));
-        x_15.Store((4u * (x_92 + asuint(x_93))), asuint(x_101));
-        index_out1 = (index_out1 - 1);
-        index_in1 = (index_in1 - 1);
-      }
-      const int x_110 = asint(x_13.Load((4u * uint((condition_index + 1)))));
-      condition_index = (condition_index + x_110);
-      temp0 = index_in0;
-      index_in0 = index_in1;
-      index_in1 = temp0;
-      temp1 = index_out0;
-      index_out0 = index_out1;
-      index_out1 = temp1;
-    }
-  }
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 gl_WorkGroupID_param : SV_GroupID;
-};
-
-void main_inner(uint3 gl_WorkGroupID_param) {
-  gl_WorkGroupID = gl_WorkGroupID_param;
-  main_1();
-}
-
-[numthreads(4, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_WorkGroupID_param);
-  return;
-}
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.msl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9e205bf..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  /* 0x0000 */ int arr[8];
-};
-struct In2 {
-  /* 0x0000 */ tint_array_wrapper data_in2;
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ int arr[1024];
-};
-struct Out0 {
-  /* 0x0000 */ tint_array_wrapper_1 data_out0;
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ int arr[512];
-};
-struct In1 {
-  /* 0x0000 */ tint_array_wrapper_2 data_in1;
-};
-struct In0 {
-  /* 0x0000 */ tint_array_wrapper_2 data_in0;
-};
-
-void main_1(const device In2& x_13, const device In1& x_17, device Out0& x_15, const device In0& x_19, thread uint3* const tint_symbol_1) {
-  uint base_index_in = 0u;
-  uint base_index_out = 0u;
-  int index_in0 = 0;
-  int index_in1 = 0;
-  int index_out0 = 0;
-  int index_out1 = 0;
-  int condition_index = 0;
-  int i = 0;
-  int temp0 = 0;
-  int temp1 = 0;
-  uint const x_58 = (*(tint_symbol_1)).x;
-  base_index_in = (128u * x_58);
-  uint const x_61 = (*(tint_symbol_1)).x;
-  base_index_out = (256u * x_61);
-  index_in0 = 127;
-  index_in1 = 383;
-  index_out0 = 255;
-  index_out1 = 383;
-  condition_index = 0;
-  i = 0;
-  while (true) {
-    int const x_67 = i;
-    if ((x_67 < 256)) {
-    } else {
-      break;
-    }
-    int const x_70 = condition_index;
-    int const x_72 = x_13.data_in2.arr[x_70];
-    if ((x_72 == 0)) {
-      uint const x_77 = base_index_out;
-      int const x_78 = index_out0;
-      uint const x_81 = base_index_in;
-      int const x_82 = index_in0;
-      int const x_86 = x_17.data_in1.arr[(x_81 + as_type<uint>(x_82))];
-      x_15.data_out0.arr[(x_77 + as_type<uint>(x_78))] = x_86;
-      int const x_88 = index_out0;
-      index_out0 = as_type<int>((as_type<uint>(x_88) - as_type<uint>(1)));
-      int const x_90 = index_in1;
-      index_in1 = as_type<int>((as_type<uint>(x_90) - as_type<uint>(1)));
-    } else {
-      uint const x_92 = base_index_out;
-      int const x_93 = index_out1;
-      uint const x_96 = base_index_in;
-      int const x_97 = index_in1;
-      int const x_101 = x_19.data_in0.arr[(x_96 + as_type<uint>(x_97))];
-      x_15.data_out0.arr[(x_92 + as_type<uint>(x_93))] = x_101;
-      int const x_103 = index_out1;
-      index_out1 = as_type<int>((as_type<uint>(x_103) - as_type<uint>(1)));
-      int const x_105 = index_in1;
-      index_in1 = as_type<int>((as_type<uint>(x_105) - as_type<uint>(1)));
-    }
-    int const x_107 = condition_index;
-    int const x_110 = x_13.data_in2.arr[as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)))];
-    int const x_111 = condition_index;
-    condition_index = as_type<int>((as_type<uint>(x_111) + as_type<uint>(x_110)));
-    int const x_113 = index_in0;
-    temp0 = x_113;
-    int const x_114 = index_in1;
-    index_in0 = x_114;
-    int const x_115 = temp0;
-    index_in1 = x_115;
-    int const x_116 = index_out0;
-    temp1 = x_116;
-    int const x_117 = index_out1;
-    index_out0 = x_117;
-    int const x_118 = temp1;
-    index_out1 = x_118;
-    {
-      int const x_119 = i;
-      i = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void tint_symbol_inner(const device In2& x_13, const device In1& x_17, device Out0& x_15, const device In0& x_19, uint3 gl_WorkGroupID_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = gl_WorkGroupID_param;
-  main_1(x_13, x_17, x_15, x_19, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 gl_WorkGroupID_param [[threadgroup_position_in_grid]], const device In2& x_13 [[buffer(1)]], const device In1& x_17 [[buffer(2)]], device Out0& x_15 [[buffer(0)]], const device In0& x_19 [[buffer(3)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_13, x_17, x_15, x_19, gl_WorkGroupID_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 2656ff8..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,233 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 132
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_WorkGroupID_param_1
-               OpExecutionMode %main LocalSize 4 1 1
-               OpName %gl_WorkGroupID_param_1 "gl_WorkGroupID_param_1"
-               OpName %gl_WorkGroupID "gl_WorkGroupID"
-               OpName %In2 "In2"
-               OpMemberName %In2 0 "data_in2"
-               OpName %x_13 "x_13"
-               OpName %Out0 "Out0"
-               OpMemberName %Out0 0 "data_out0"
-               OpName %x_15 "x_15"
-               OpName %In1 "In1"
-               OpMemberName %In1 0 "data_in1"
-               OpName %x_17 "x_17"
-               OpName %In0 "In0"
-               OpMemberName %In0 0 "data_in0"
-               OpName %x_19 "x_19"
-               OpName %main_1 "main_1"
-               OpName %base_index_in "base_index_in"
-               OpName %base_index_out "base_index_out"
-               OpName %index_in0 "index_in0"
-               OpName %index_in1 "index_in1"
-               OpName %index_out0 "index_out0"
-               OpName %index_out1 "index_out1"
-               OpName %condition_index "condition_index"
-               OpName %i "i"
-               OpName %temp0 "temp0"
-               OpName %temp1 "temp1"
-               OpName %main_inner "main_inner"
-               OpName %gl_WorkGroupID_param "gl_WorkGroupID_param"
-               OpName %main "main"
-               OpDecorate %gl_WorkGroupID_param_1 BuiltIn WorkgroupId
-               OpDecorate %In2 Block
-               OpMemberDecorate %In2 0 Offset 0
-               OpDecorate %_arr_int_uint_8 ArrayStride 4
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 2
-               OpDecorate %Out0 Block
-               OpMemberDecorate %Out0 0 Offset 0
-               OpDecorate %_arr_int_uint_1024 ArrayStride 4
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 3
-               OpDecorate %In1 Block
-               OpMemberDecorate %In1 0 Offset 0
-               OpDecorate %_arr_int_uint_512 ArrayStride 4
-               OpDecorate %x_17 NonWritable
-               OpDecorate %x_17 DescriptorSet 0
-               OpDecorate %x_17 Binding 1
-               OpDecorate %In0 Block
-               OpMemberDecorate %In0 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 0
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_WorkGroupID_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-%gl_WorkGroupID = OpVariable %_ptr_Private_v3uint Private %7
-        %int = OpTypeInt 32 1
-     %uint_8 = OpConstant %uint 8
-%_arr_int_uint_8 = OpTypeArray %int %uint_8
-        %In2 = OpTypeStruct %_arr_int_uint_8
-%_ptr_StorageBuffer_In2 = OpTypePointer StorageBuffer %In2
-       %x_13 = OpVariable %_ptr_StorageBuffer_In2 StorageBuffer
-  %uint_1024 = OpConstant %uint 1024
-%_arr_int_uint_1024 = OpTypeArray %int %uint_1024
-       %Out0 = OpTypeStruct %_arr_int_uint_1024
-%_ptr_StorageBuffer_Out0 = OpTypePointer StorageBuffer %Out0
-       %x_15 = OpVariable %_ptr_StorageBuffer_Out0 StorageBuffer
-   %uint_512 = OpConstant %uint 512
-%_arr_int_uint_512 = OpTypeArray %int %uint_512
-        %In1 = OpTypeStruct %_arr_int_uint_512
-%_ptr_StorageBuffer_In1 = OpTypePointer StorageBuffer %In1
-       %x_17 = OpVariable %_ptr_StorageBuffer_In1 StorageBuffer
-        %In0 = OpTypeStruct %_arr_int_uint_512
-%_ptr_StorageBuffer_In0 = OpTypePointer StorageBuffer %In0
-       %x_19 = OpVariable %_ptr_StorageBuffer_In0 StorageBuffer
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %33 = OpConstantNull %uint
-%_ptr_Function_int = OpTypePointer Function %int
-         %37 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-   %uint_128 = OpConstant %uint 128
-   %uint_256 = OpConstant %uint 256
-    %int_127 = OpConstant %int 127
-    %int_383 = OpConstant %int 383
-    %int_255 = OpConstant %int 255
-      %int_0 = OpConstant %int 0
-    %int_256 = OpConstant %int 256
-       %bool = OpTypeBool
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_1 = OpConstant %int 1
-        %123 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-%base_index_in = OpVariable %_ptr_Function_uint Function %33
-%base_index_out = OpVariable %_ptr_Function_uint Function %33
-  %index_in0 = OpVariable %_ptr_Function_int Function %37
-  %index_in1 = OpVariable %_ptr_Function_int Function %37
- %index_out0 = OpVariable %_ptr_Function_int Function %37
- %index_out1 = OpVariable %_ptr_Function_int Function %37
-%condition_index = OpVariable %_ptr_Function_int Function %37
-          %i = OpVariable %_ptr_Function_int Function %37
-      %temp0 = OpVariable %_ptr_Function_int Function %37
-      %temp1 = OpVariable %_ptr_Function_int Function %37
-         %47 = OpAccessChain %_ptr_Private_uint %gl_WorkGroupID %uint_0
-         %48 = OpLoad %uint %47
-         %50 = OpIMul %uint %uint_128 %48
-               OpStore %base_index_in %50
-         %51 = OpAccessChain %_ptr_Private_uint %gl_WorkGroupID %uint_0
-         %52 = OpLoad %uint %51
-         %54 = OpIMul %uint %uint_256 %52
-               OpStore %base_index_out %54
-               OpStore %index_in0 %int_127
-               OpStore %index_in1 %int_383
-               OpStore %index_out0 %int_255
-               OpStore %index_out1 %int_383
-               OpStore %condition_index %int_0
-               OpStore %i %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpSLessThan %bool %63 %int_256
-               OpSelectionMerge %67 None
-               OpBranchConditional %65 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %60
-         %67 = OpLabel
-         %70 = OpLoad %int %condition_index
-         %72 = OpAccessChain %_ptr_StorageBuffer_int %x_13 %uint_0 %70
-         %73 = OpLoad %int %72
-         %74 = OpIEqual %bool %73 %int_0
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpLoad %uint %base_index_out
-         %79 = OpLoad %int %index_out0
-         %80 = OpLoad %uint %base_index_in
-         %81 = OpLoad %int %index_in0
-         %82 = OpBitcast %uint %81
-         %83 = OpIAdd %uint %80 %82
-         %84 = OpAccessChain %_ptr_StorageBuffer_int %x_17 %uint_0 %83
-         %85 = OpLoad %int %84
-         %86 = OpBitcast %uint %79
-         %87 = OpIAdd %uint %78 %86
-         %88 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %87
-               OpStore %88 %85
-         %89 = OpLoad %int %index_out0
-         %91 = OpISub %int %89 %int_1
-               OpStore %index_out0 %91
-         %92 = OpLoad %int %index_in1
-         %93 = OpISub %int %92 %int_1
-               OpStore %index_in1 %93
-               OpBranch %75
-         %77 = OpLabel
-         %94 = OpLoad %uint %base_index_out
-         %95 = OpLoad %int %index_out1
-         %96 = OpLoad %uint %base_index_in
-         %97 = OpLoad %int %index_in1
-         %98 = OpBitcast %uint %97
-         %99 = OpIAdd %uint %96 %98
-        %100 = OpAccessChain %_ptr_StorageBuffer_int %x_19 %uint_0 %99
-        %101 = OpLoad %int %100
-        %102 = OpBitcast %uint %95
-        %103 = OpIAdd %uint %94 %102
-        %104 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %103
-               OpStore %104 %101
-        %105 = OpLoad %int %index_out1
-        %106 = OpISub %int %105 %int_1
-               OpStore %index_out1 %106
-        %107 = OpLoad %int %index_in1
-        %108 = OpISub %int %107 %int_1
-               OpStore %index_in1 %108
-               OpBranch %75
-         %75 = OpLabel
-        %109 = OpLoad %int %condition_index
-        %110 = OpIAdd %int %109 %int_1
-        %111 = OpAccessChain %_ptr_StorageBuffer_int %x_13 %uint_0 %110
-        %112 = OpLoad %int %111
-        %113 = OpLoad %int %condition_index
-        %114 = OpIAdd %int %113 %112
-               OpStore %condition_index %114
-        %115 = OpLoad %int %index_in0
-               OpStore %temp0 %115
-        %116 = OpLoad %int %index_in1
-               OpStore %index_in0 %116
-        %117 = OpLoad %int %temp0
-               OpStore %index_in1 %117
-        %118 = OpLoad %int %index_out0
-               OpStore %temp1 %118
-        %119 = OpLoad %int %index_out1
-               OpStore %index_out0 %119
-        %120 = OpLoad %int %temp1
-               OpStore %index_out1 %120
-               OpBranch %61
-         %61 = OpLabel
-        %121 = OpLoad %int %i
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %i %122
-               OpBranch %59
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %123
-%gl_WorkGroupID_param = OpFunctionParameter %v3uint
-        %126 = OpLabel
-               OpStore %gl_WorkGroupID %gl_WorkGroupID_param
-        %127 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-        %129 = OpLabel
-        %131 = OpLoad %v3uint %gl_WorkGroupID_param_1
-        %130 = OpFunctionCall %void %main_inner %131
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e16f3b9..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,120 +0,0 @@
-type Arr = [[stride(4)]] array<i32, 8>;
-
-[[block]]
-struct In2 {
-  data_in2 : Arr;
-};
-
-type Arr_1 = [[stride(4)]] array<i32, 1024>;
-
-[[block]]
-struct Out0 {
-  data_out0 : Arr_1;
-};
-
-type Arr_2 = [[stride(4)]] array<i32, 512>;
-
-type Arr_3 = [[stride(4)]] array<i32, 512>;
-
-[[block]]
-struct In1 {
-  data_in1 : Arr_3;
-};
-
-[[block]]
-struct In0 {
-  data_in0 : Arr_3;
-};
-
-var<private> gl_WorkGroupID : vec3<u32>;
-
-[[group(0), binding(2)]] var<storage, read> x_13 : In2;
-
-[[group(0), binding(3)]] var<storage, read_write> x_15 : Out0;
-
-[[group(0), binding(1)]] var<storage, read> x_17 : In1;
-
-[[group(0), binding(0)]] var<storage, read> x_19 : In0;
-
-fn main_1() {
-  var base_index_in : u32;
-  var base_index_out : u32;
-  var index_in0 : i32;
-  var index_in1 : i32;
-  var index_out0 : i32;
-  var index_out1 : i32;
-  var condition_index : i32;
-  var i : i32;
-  var temp0 : i32;
-  var temp1 : i32;
-  let x_58 : u32 = gl_WorkGroupID.x;
-  base_index_in = (128u * x_58);
-  let x_61 : u32 = gl_WorkGroupID.x;
-  base_index_out = (256u * x_61);
-  index_in0 = 127;
-  index_in1 = 383;
-  index_out0 = 255;
-  index_out1 = 383;
-  condition_index = 0;
-  i = 0;
-  loop {
-    let x_67 : i32 = i;
-    if ((x_67 < 256)) {
-    } else {
-      break;
-    }
-    let x_70 : i32 = condition_index;
-    let x_72 : i32 = x_13.data_in2[x_70];
-    if ((x_72 == 0)) {
-      let x_77 : u32 = base_index_out;
-      let x_78 : i32 = index_out0;
-      let x_81 : u32 = base_index_in;
-      let x_82 : i32 = index_in0;
-      let x_86 : i32 = x_17.data_in1[(x_81 + bitcast<u32>(x_82))];
-      x_15.data_out0[(x_77 + bitcast<u32>(x_78))] = x_86;
-      let x_88 : i32 = index_out0;
-      index_out0 = (x_88 - 1);
-      let x_90 : i32 = index_in1;
-      index_in1 = (x_90 - 1);
-    } else {
-      let x_92 : u32 = base_index_out;
-      let x_93 : i32 = index_out1;
-      let x_96 : u32 = base_index_in;
-      let x_97 : i32 = index_in1;
-      let x_101 : i32 = x_19.data_in0[(x_96 + bitcast<u32>(x_97))];
-      x_15.data_out0[(x_92 + bitcast<u32>(x_93))] = x_101;
-      let x_103 : i32 = index_out1;
-      index_out1 = (x_103 - 1);
-      let x_105 : i32 = index_in1;
-      index_in1 = (x_105 - 1);
-    }
-    let x_107 : i32 = condition_index;
-    let x_110 : i32 = x_13.data_in2[(x_107 + 1)];
-    let x_111 : i32 = condition_index;
-    condition_index = (x_111 + x_110);
-    let x_113 : i32 = index_in0;
-    temp0 = x_113;
-    let x_114 : i32 = index_in1;
-    index_in0 = x_114;
-    let x_115 : i32 = temp0;
-    index_in1 = x_115;
-    let x_116 : i32 = index_out0;
-    temp1 = x_116;
-    let x_117 : i32 = index_out1;
-    index_out0 = x_117;
-    let x_118 : i32 = temp1;
-    index_out1 = x_118;
-
-    continuing {
-      let x_119 : i32 = i;
-      i = (x_119 + 1);
-    }
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(4, 1, 1)]]
-fn main([[builtin(workgroup_id)]] gl_WorkGroupID_param : vec3<u32>) {
-  gl_WorkGroupID = gl_WorkGroupID_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c1ab9af..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-static uint3 gl_WorkGroupID = uint3(0u, 0u, 0u);
-ByteAddressBuffer x_13 : register(t2, space0);
-RWByteAddressBuffer x_15 : register(u3, space0);
-ByteAddressBuffer x_17 : register(t1, space0);
-ByteAddressBuffer x_19 : register(t0, space0);
-
-void main_1() {
-  uint base_index_in = 0u;
-  uint base_index_out = 0u;
-  int index_in0 = 0;
-  int index_in1 = 0;
-  int index_out0 = 0;
-  int index_out1 = 0;
-  int condition_index = 0;
-  int i = 0;
-  int temp0 = 0;
-  int temp1 = 0;
-  const uint x_58 = gl_WorkGroupID.x;
-  base_index_in = (128u * x_58);
-  const uint x_61 = gl_WorkGroupID.x;
-  base_index_out = (256u * x_61);
-  index_in0 = 127;
-  index_in1 = 383;
-  index_out0 = 255;
-  index_out1 = 383;
-  condition_index = 0;
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      const int x_72 = asint(x_13.Load((4u * uint(condition_index))));
-      if ((x_72 == 0)) {
-        const uint x_77 = base_index_out;
-        const int x_78 = index_out0;
-        const int x_86 = asint(x_17.Load((4u * (base_index_in + asuint(index_in0)))));
-        x_15.Store((4u * (x_77 + asuint(x_78))), asuint(x_86));
-        index_out0 = (index_out0 - 1);
-        index_in1 = (index_in1 - 1);
-      } else {
-        const uint x_92 = base_index_out;
-        const int x_93 = index_out1;
-        const int x_101 = asint(x_19.Load((4u * (base_index_in + asuint(index_in1)))));
-        x_15.Store((4u * (x_92 + asuint(x_93))), asuint(x_101));
-        index_out1 = (index_out1 - 1);
-        index_in1 = (index_in1 - 1);
-      }
-      const int x_110 = asint(x_13.Load((4u * uint((condition_index + 1)))));
-      condition_index = (condition_index + x_110);
-      temp0 = index_in0;
-      index_in0 = index_in1;
-      index_in1 = temp0;
-      temp1 = index_out0;
-      index_out0 = index_out1;
-      index_out1 = temp1;
-    }
-  }
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 gl_WorkGroupID_param : SV_GroupID;
-};
-
-void main_inner(uint3 gl_WorkGroupID_param) {
-  gl_WorkGroupID = gl_WorkGroupID_param;
-  main_1();
-}
-
-[numthreads(4, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_WorkGroupID_param);
-  return;
-}
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.msl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9e205bf..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  /* 0x0000 */ int arr[8];
-};
-struct In2 {
-  /* 0x0000 */ tint_array_wrapper data_in2;
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ int arr[1024];
-};
-struct Out0 {
-  /* 0x0000 */ tint_array_wrapper_1 data_out0;
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ int arr[512];
-};
-struct In1 {
-  /* 0x0000 */ tint_array_wrapper_2 data_in1;
-};
-struct In0 {
-  /* 0x0000 */ tint_array_wrapper_2 data_in0;
-};
-
-void main_1(const device In2& x_13, const device In1& x_17, device Out0& x_15, const device In0& x_19, thread uint3* const tint_symbol_1) {
-  uint base_index_in = 0u;
-  uint base_index_out = 0u;
-  int index_in0 = 0;
-  int index_in1 = 0;
-  int index_out0 = 0;
-  int index_out1 = 0;
-  int condition_index = 0;
-  int i = 0;
-  int temp0 = 0;
-  int temp1 = 0;
-  uint const x_58 = (*(tint_symbol_1)).x;
-  base_index_in = (128u * x_58);
-  uint const x_61 = (*(tint_symbol_1)).x;
-  base_index_out = (256u * x_61);
-  index_in0 = 127;
-  index_in1 = 383;
-  index_out0 = 255;
-  index_out1 = 383;
-  condition_index = 0;
-  i = 0;
-  while (true) {
-    int const x_67 = i;
-    if ((x_67 < 256)) {
-    } else {
-      break;
-    }
-    int const x_70 = condition_index;
-    int const x_72 = x_13.data_in2.arr[x_70];
-    if ((x_72 == 0)) {
-      uint const x_77 = base_index_out;
-      int const x_78 = index_out0;
-      uint const x_81 = base_index_in;
-      int const x_82 = index_in0;
-      int const x_86 = x_17.data_in1.arr[(x_81 + as_type<uint>(x_82))];
-      x_15.data_out0.arr[(x_77 + as_type<uint>(x_78))] = x_86;
-      int const x_88 = index_out0;
-      index_out0 = as_type<int>((as_type<uint>(x_88) - as_type<uint>(1)));
-      int const x_90 = index_in1;
-      index_in1 = as_type<int>((as_type<uint>(x_90) - as_type<uint>(1)));
-    } else {
-      uint const x_92 = base_index_out;
-      int const x_93 = index_out1;
-      uint const x_96 = base_index_in;
-      int const x_97 = index_in1;
-      int const x_101 = x_19.data_in0.arr[(x_96 + as_type<uint>(x_97))];
-      x_15.data_out0.arr[(x_92 + as_type<uint>(x_93))] = x_101;
-      int const x_103 = index_out1;
-      index_out1 = as_type<int>((as_type<uint>(x_103) - as_type<uint>(1)));
-      int const x_105 = index_in1;
-      index_in1 = as_type<int>((as_type<uint>(x_105) - as_type<uint>(1)));
-    }
-    int const x_107 = condition_index;
-    int const x_110 = x_13.data_in2.arr[as_type<int>((as_type<uint>(x_107) + as_type<uint>(1)))];
-    int const x_111 = condition_index;
-    condition_index = as_type<int>((as_type<uint>(x_111) + as_type<uint>(x_110)));
-    int const x_113 = index_in0;
-    temp0 = x_113;
-    int const x_114 = index_in1;
-    index_in0 = x_114;
-    int const x_115 = temp0;
-    index_in1 = x_115;
-    int const x_116 = index_out0;
-    temp1 = x_116;
-    int const x_117 = index_out1;
-    index_out0 = x_117;
-    int const x_118 = temp1;
-    index_out1 = x_118;
-    {
-      int const x_119 = i;
-      i = as_type<int>((as_type<uint>(x_119) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void tint_symbol_inner(const device In2& x_13, const device In1& x_17, device Out0& x_15, const device In0& x_19, uint3 gl_WorkGroupID_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = gl_WorkGroupID_param;
-  main_1(x_13, x_17, x_15, x_19, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 gl_WorkGroupID_param [[threadgroup_position_in_grid]], const device In2& x_13 [[buffer(1)]], const device In1& x_17 [[buffer(2)]], device Out0& x_15 [[buffer(0)]], const device In0& x_19 [[buffer(3)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_13, x_17, x_15, x_19, gl_WorkGroupID_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 2656ff8..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,233 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 132
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_WorkGroupID_param_1
-               OpExecutionMode %main LocalSize 4 1 1
-               OpName %gl_WorkGroupID_param_1 "gl_WorkGroupID_param_1"
-               OpName %gl_WorkGroupID "gl_WorkGroupID"
-               OpName %In2 "In2"
-               OpMemberName %In2 0 "data_in2"
-               OpName %x_13 "x_13"
-               OpName %Out0 "Out0"
-               OpMemberName %Out0 0 "data_out0"
-               OpName %x_15 "x_15"
-               OpName %In1 "In1"
-               OpMemberName %In1 0 "data_in1"
-               OpName %x_17 "x_17"
-               OpName %In0 "In0"
-               OpMemberName %In0 0 "data_in0"
-               OpName %x_19 "x_19"
-               OpName %main_1 "main_1"
-               OpName %base_index_in "base_index_in"
-               OpName %base_index_out "base_index_out"
-               OpName %index_in0 "index_in0"
-               OpName %index_in1 "index_in1"
-               OpName %index_out0 "index_out0"
-               OpName %index_out1 "index_out1"
-               OpName %condition_index "condition_index"
-               OpName %i "i"
-               OpName %temp0 "temp0"
-               OpName %temp1 "temp1"
-               OpName %main_inner "main_inner"
-               OpName %gl_WorkGroupID_param "gl_WorkGroupID_param"
-               OpName %main "main"
-               OpDecorate %gl_WorkGroupID_param_1 BuiltIn WorkgroupId
-               OpDecorate %In2 Block
-               OpMemberDecorate %In2 0 Offset 0
-               OpDecorate %_arr_int_uint_8 ArrayStride 4
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 2
-               OpDecorate %Out0 Block
-               OpMemberDecorate %Out0 0 Offset 0
-               OpDecorate %_arr_int_uint_1024 ArrayStride 4
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 3
-               OpDecorate %In1 Block
-               OpMemberDecorate %In1 0 Offset 0
-               OpDecorate %_arr_int_uint_512 ArrayStride 4
-               OpDecorate %x_17 NonWritable
-               OpDecorate %x_17 DescriptorSet 0
-               OpDecorate %x_17 Binding 1
-               OpDecorate %In0 Block
-               OpMemberDecorate %In0 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 0
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_WorkGroupID_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-%gl_WorkGroupID = OpVariable %_ptr_Private_v3uint Private %7
-        %int = OpTypeInt 32 1
-     %uint_8 = OpConstant %uint 8
-%_arr_int_uint_8 = OpTypeArray %int %uint_8
-        %In2 = OpTypeStruct %_arr_int_uint_8
-%_ptr_StorageBuffer_In2 = OpTypePointer StorageBuffer %In2
-       %x_13 = OpVariable %_ptr_StorageBuffer_In2 StorageBuffer
-  %uint_1024 = OpConstant %uint 1024
-%_arr_int_uint_1024 = OpTypeArray %int %uint_1024
-       %Out0 = OpTypeStruct %_arr_int_uint_1024
-%_ptr_StorageBuffer_Out0 = OpTypePointer StorageBuffer %Out0
-       %x_15 = OpVariable %_ptr_StorageBuffer_Out0 StorageBuffer
-   %uint_512 = OpConstant %uint 512
-%_arr_int_uint_512 = OpTypeArray %int %uint_512
-        %In1 = OpTypeStruct %_arr_int_uint_512
-%_ptr_StorageBuffer_In1 = OpTypePointer StorageBuffer %In1
-       %x_17 = OpVariable %_ptr_StorageBuffer_In1 StorageBuffer
-        %In0 = OpTypeStruct %_arr_int_uint_512
-%_ptr_StorageBuffer_In0 = OpTypePointer StorageBuffer %In0
-       %x_19 = OpVariable %_ptr_StorageBuffer_In0 StorageBuffer
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %33 = OpConstantNull %uint
-%_ptr_Function_int = OpTypePointer Function %int
-         %37 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-   %uint_128 = OpConstant %uint 128
-   %uint_256 = OpConstant %uint 256
-    %int_127 = OpConstant %int 127
-    %int_383 = OpConstant %int 383
-    %int_255 = OpConstant %int 255
-      %int_0 = OpConstant %int 0
-    %int_256 = OpConstant %int 256
-       %bool = OpTypeBool
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_1 = OpConstant %int 1
-        %123 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-%base_index_in = OpVariable %_ptr_Function_uint Function %33
-%base_index_out = OpVariable %_ptr_Function_uint Function %33
-  %index_in0 = OpVariable %_ptr_Function_int Function %37
-  %index_in1 = OpVariable %_ptr_Function_int Function %37
- %index_out0 = OpVariable %_ptr_Function_int Function %37
- %index_out1 = OpVariable %_ptr_Function_int Function %37
-%condition_index = OpVariable %_ptr_Function_int Function %37
-          %i = OpVariable %_ptr_Function_int Function %37
-      %temp0 = OpVariable %_ptr_Function_int Function %37
-      %temp1 = OpVariable %_ptr_Function_int Function %37
-         %47 = OpAccessChain %_ptr_Private_uint %gl_WorkGroupID %uint_0
-         %48 = OpLoad %uint %47
-         %50 = OpIMul %uint %uint_128 %48
-               OpStore %base_index_in %50
-         %51 = OpAccessChain %_ptr_Private_uint %gl_WorkGroupID %uint_0
-         %52 = OpLoad %uint %51
-         %54 = OpIMul %uint %uint_256 %52
-               OpStore %base_index_out %54
-               OpStore %index_in0 %int_127
-               OpStore %index_in1 %int_383
-               OpStore %index_out0 %int_255
-               OpStore %index_out1 %int_383
-               OpStore %condition_index %int_0
-               OpStore %i %int_0
-               OpBranch %59
-         %59 = OpLabel
-               OpLoopMerge %60 %61 None
-               OpBranch %62
-         %62 = OpLabel
-         %63 = OpLoad %int %i
-         %65 = OpSLessThan %bool %63 %int_256
-               OpSelectionMerge %67 None
-               OpBranchConditional %65 %68 %69
-         %68 = OpLabel
-               OpBranch %67
-         %69 = OpLabel
-               OpBranch %60
-         %67 = OpLabel
-         %70 = OpLoad %int %condition_index
-         %72 = OpAccessChain %_ptr_StorageBuffer_int %x_13 %uint_0 %70
-         %73 = OpLoad %int %72
-         %74 = OpIEqual %bool %73 %int_0
-               OpSelectionMerge %75 None
-               OpBranchConditional %74 %76 %77
-         %76 = OpLabel
-         %78 = OpLoad %uint %base_index_out
-         %79 = OpLoad %int %index_out0
-         %80 = OpLoad %uint %base_index_in
-         %81 = OpLoad %int %index_in0
-         %82 = OpBitcast %uint %81
-         %83 = OpIAdd %uint %80 %82
-         %84 = OpAccessChain %_ptr_StorageBuffer_int %x_17 %uint_0 %83
-         %85 = OpLoad %int %84
-         %86 = OpBitcast %uint %79
-         %87 = OpIAdd %uint %78 %86
-         %88 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %87
-               OpStore %88 %85
-         %89 = OpLoad %int %index_out0
-         %91 = OpISub %int %89 %int_1
-               OpStore %index_out0 %91
-         %92 = OpLoad %int %index_in1
-         %93 = OpISub %int %92 %int_1
-               OpStore %index_in1 %93
-               OpBranch %75
-         %77 = OpLabel
-         %94 = OpLoad %uint %base_index_out
-         %95 = OpLoad %int %index_out1
-         %96 = OpLoad %uint %base_index_in
-         %97 = OpLoad %int %index_in1
-         %98 = OpBitcast %uint %97
-         %99 = OpIAdd %uint %96 %98
-        %100 = OpAccessChain %_ptr_StorageBuffer_int %x_19 %uint_0 %99
-        %101 = OpLoad %int %100
-        %102 = OpBitcast %uint %95
-        %103 = OpIAdd %uint %94 %102
-        %104 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %103
-               OpStore %104 %101
-        %105 = OpLoad %int %index_out1
-        %106 = OpISub %int %105 %int_1
-               OpStore %index_out1 %106
-        %107 = OpLoad %int %index_in1
-        %108 = OpISub %int %107 %int_1
-               OpStore %index_in1 %108
-               OpBranch %75
-         %75 = OpLabel
-        %109 = OpLoad %int %condition_index
-        %110 = OpIAdd %int %109 %int_1
-        %111 = OpAccessChain %_ptr_StorageBuffer_int %x_13 %uint_0 %110
-        %112 = OpLoad %int %111
-        %113 = OpLoad %int %condition_index
-        %114 = OpIAdd %int %113 %112
-               OpStore %condition_index %114
-        %115 = OpLoad %int %index_in0
-               OpStore %temp0 %115
-        %116 = OpLoad %int %index_in1
-               OpStore %index_in0 %116
-        %117 = OpLoad %int %temp0
-               OpStore %index_in1 %117
-        %118 = OpLoad %int %index_out0
-               OpStore %temp1 %118
-        %119 = OpLoad %int %index_out1
-               OpStore %index_out0 %119
-        %120 = OpLoad %int %temp1
-               OpStore %index_out1 %120
-               OpBranch %61
-         %61 = OpLabel
-        %121 = OpLoad %int %i
-        %122 = OpIAdd %int %121 %int_1
-               OpStore %i %122
-               OpBranch %59
-         %60 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %123
-%gl_WorkGroupID_param = OpFunctionParameter %v3uint
-        %126 = OpLabel
-               OpStore %gl_WorkGroupID %gl_WorkGroupID_param
-        %127 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-        %129 = OpLabel
-        %131 = OpLoad %v3uint %gl_WorkGroupID_param_1
-        %130 = OpFunctionCall %void %main_inner %131
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e16f3b9..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_overflow/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,120 +0,0 @@
-type Arr = [[stride(4)]] array<i32, 8>;
-
-[[block]]
-struct In2 {
-  data_in2 : Arr;
-};
-
-type Arr_1 = [[stride(4)]] array<i32, 1024>;
-
-[[block]]
-struct Out0 {
-  data_out0 : Arr_1;
-};
-
-type Arr_2 = [[stride(4)]] array<i32, 512>;
-
-type Arr_3 = [[stride(4)]] array<i32, 512>;
-
-[[block]]
-struct In1 {
-  data_in1 : Arr_3;
-};
-
-[[block]]
-struct In0 {
-  data_in0 : Arr_3;
-};
-
-var<private> gl_WorkGroupID : vec3<u32>;
-
-[[group(0), binding(2)]] var<storage, read> x_13 : In2;
-
-[[group(0), binding(3)]] var<storage, read_write> x_15 : Out0;
-
-[[group(0), binding(1)]] var<storage, read> x_17 : In1;
-
-[[group(0), binding(0)]] var<storage, read> x_19 : In0;
-
-fn main_1() {
-  var base_index_in : u32;
-  var base_index_out : u32;
-  var index_in0 : i32;
-  var index_in1 : i32;
-  var index_out0 : i32;
-  var index_out1 : i32;
-  var condition_index : i32;
-  var i : i32;
-  var temp0 : i32;
-  var temp1 : i32;
-  let x_58 : u32 = gl_WorkGroupID.x;
-  base_index_in = (128u * x_58);
-  let x_61 : u32 = gl_WorkGroupID.x;
-  base_index_out = (256u * x_61);
-  index_in0 = 127;
-  index_in1 = 383;
-  index_out0 = 255;
-  index_out1 = 383;
-  condition_index = 0;
-  i = 0;
-  loop {
-    let x_67 : i32 = i;
-    if ((x_67 < 256)) {
-    } else {
-      break;
-    }
-    let x_70 : i32 = condition_index;
-    let x_72 : i32 = x_13.data_in2[x_70];
-    if ((x_72 == 0)) {
-      let x_77 : u32 = base_index_out;
-      let x_78 : i32 = index_out0;
-      let x_81 : u32 = base_index_in;
-      let x_82 : i32 = index_in0;
-      let x_86 : i32 = x_17.data_in1[(x_81 + bitcast<u32>(x_82))];
-      x_15.data_out0[(x_77 + bitcast<u32>(x_78))] = x_86;
-      let x_88 : i32 = index_out0;
-      index_out0 = (x_88 - 1);
-      let x_90 : i32 = index_in1;
-      index_in1 = (x_90 - 1);
-    } else {
-      let x_92 : u32 = base_index_out;
-      let x_93 : i32 = index_out1;
-      let x_96 : u32 = base_index_in;
-      let x_97 : i32 = index_in1;
-      let x_101 : i32 = x_19.data_in0[(x_96 + bitcast<u32>(x_97))];
-      x_15.data_out0[(x_92 + bitcast<u32>(x_93))] = x_101;
-      let x_103 : i32 = index_out1;
-      index_out1 = (x_103 - 1);
-      let x_105 : i32 = index_in1;
-      index_in1 = (x_105 - 1);
-    }
-    let x_107 : i32 = condition_index;
-    let x_110 : i32 = x_13.data_in2[(x_107 + 1)];
-    let x_111 : i32 = condition_index;
-    condition_index = (x_111 + x_110);
-    let x_113 : i32 = index_in0;
-    temp0 = x_113;
-    let x_114 : i32 = index_in1;
-    index_in0 = x_114;
-    let x_115 : i32 = temp0;
-    index_in1 = x_115;
-    let x_116 : i32 = index_out0;
-    temp1 = x_116;
-    let x_117 : i32 = index_out1;
-    index_out0 = x_117;
-    let x_118 : i32 = temp1;
-    index_out1 = x_118;
-
-    continuing {
-      let x_119 : i32 = i;
-      i = (x_119 + 1);
-    }
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(4, 1, 1)]]
-fn main([[builtin(workgroup_id)]] gl_WorkGroupID_param : vec3<u32>) {
-  gl_WorkGroupID = gl_WorkGroupID_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 9f68c5d..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-static uint3 gl_WorkGroupID = uint3(0u, 0u, 0u);
-ByteAddressBuffer x_13 : register(t2, space0);
-RWByteAddressBuffer x_15 : register(u3, space0);
-ByteAddressBuffer x_17 : register(t0, space0);
-ByteAddressBuffer x_19 : register(t1, space0);
-
-void main_1() {
-  uint base_index_in = 0u;
-  uint base_index_out = 0u;
-  int index_in0 = 0;
-  int index_in1 = 0;
-  int index_out0 = 0;
-  int index_out1 = 0;
-  int condition_index = 0;
-  int i = 0;
-  int temp0 = 0;
-  int temp1 = 0;
-  const uint x_56 = gl_WorkGroupID.x;
-  base_index_in = (128u * x_56);
-  const uint x_59 = gl_WorkGroupID.x;
-  base_index_out = (256u * x_59);
-  index_in0 = 0;
-  index_in1 = -128;
-  index_out0 = 0;
-  index_out1 = -128;
-  condition_index = 0;
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      const int x_70 = asint(x_13.Load((4u * uint(condition_index))));
-      if ((x_70 == 0)) {
-        const uint x_75 = base_index_out;
-        const int x_76 = index_out0;
-        const int x_84 = asint(x_17.Load((4u * (base_index_in + asuint(index_in0)))));
-        x_15.Store((4u * (x_75 + asuint(x_76))), asuint(x_84));
-        index_out0 = (index_out0 + 1);
-        index_in1 = (index_in1 + 1);
-      } else {
-        const uint x_90 = base_index_out;
-        const int x_91 = index_out1;
-        const int x_99 = asint(x_19.Load((4u * (base_index_in + asuint(index_in1)))));
-        x_15.Store((4u * (x_90 + asuint(x_91))), asuint(x_99));
-        index_out1 = (index_out1 + 1);
-        index_in1 = (index_in1 + 1);
-      }
-      const int x_108 = asint(x_13.Load((4u * uint((condition_index + 1)))));
-      condition_index = (condition_index + x_108);
-      temp0 = index_in0;
-      index_in0 = index_in1;
-      index_in1 = temp0;
-      temp1 = index_out0;
-      index_out0 = index_out1;
-      index_out1 = temp1;
-    }
-  }
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 gl_WorkGroupID_param : SV_GroupID;
-};
-
-void main_inner(uint3 gl_WorkGroupID_param) {
-  gl_WorkGroupID = gl_WorkGroupID_param;
-  main_1();
-}
-
-[numthreads(4, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_WorkGroupID_param);
-  return;
-}
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.msl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.msl
deleted file mode 100644
index eeb4a33..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  /* 0x0000 */ int arr[8];
-};
-struct In2 {
-  /* 0x0000 */ tint_array_wrapper data_in2;
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ int arr[1024];
-};
-struct Out0 {
-  /* 0x0000 */ tint_array_wrapper_1 data_out0;
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ int arr[512];
-};
-struct In0 {
-  /* 0x0000 */ tint_array_wrapper_2 data_in0;
-};
-struct In1 {
-  /* 0x0000 */ tint_array_wrapper_2 data_in1;
-};
-
-void main_1(const device In2& x_13, const device In0& x_17, device Out0& x_15, const device In1& x_19, thread uint3* const tint_symbol_1) {
-  uint base_index_in = 0u;
-  uint base_index_out = 0u;
-  int index_in0 = 0;
-  int index_in1 = 0;
-  int index_out0 = 0;
-  int index_out1 = 0;
-  int condition_index = 0;
-  int i = 0;
-  int temp0 = 0;
-  int temp1 = 0;
-  uint const x_56 = (*(tint_symbol_1)).x;
-  base_index_in = (128u * x_56);
-  uint const x_59 = (*(tint_symbol_1)).x;
-  base_index_out = (256u * x_59);
-  index_in0 = 0;
-  index_in1 = -128;
-  index_out0 = 0;
-  index_out1 = -128;
-  condition_index = 0;
-  i = 0;
-  while (true) {
-    int const x_65 = i;
-    if ((x_65 < 256)) {
-    } else {
-      break;
-    }
-    int const x_68 = condition_index;
-    int const x_70 = x_13.data_in2.arr[x_68];
-    if ((x_70 == 0)) {
-      uint const x_75 = base_index_out;
-      int const x_76 = index_out0;
-      uint const x_79 = base_index_in;
-      int const x_80 = index_in0;
-      int const x_84 = x_17.data_in0.arr[(x_79 + as_type<uint>(x_80))];
-      x_15.data_out0.arr[(x_75 + as_type<uint>(x_76))] = x_84;
-      int const x_86 = index_out0;
-      index_out0 = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-      int const x_88 = index_in1;
-      index_in1 = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    } else {
-      uint const x_90 = base_index_out;
-      int const x_91 = index_out1;
-      uint const x_94 = base_index_in;
-      int const x_95 = index_in1;
-      int const x_99 = x_19.data_in1.arr[(x_94 + as_type<uint>(x_95))];
-      x_15.data_out0.arr[(x_90 + as_type<uint>(x_91))] = x_99;
-      int const x_101 = index_out1;
-      index_out1 = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-      int const x_103 = index_in1;
-      index_in1 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-    }
-    int const x_105 = condition_index;
-    int const x_108 = x_13.data_in2.arr[as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)))];
-    int const x_109 = condition_index;
-    condition_index = as_type<int>((as_type<uint>(x_109) + as_type<uint>(x_108)));
-    int const x_111 = index_in0;
-    temp0 = x_111;
-    int const x_112 = index_in1;
-    index_in0 = x_112;
-    int const x_113 = temp0;
-    index_in1 = x_113;
-    int const x_114 = index_out0;
-    temp1 = x_114;
-    int const x_115 = index_out1;
-    index_out0 = x_115;
-    int const x_116 = temp1;
-    index_out1 = x_116;
-    {
-      int const x_117 = i;
-      i = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void tint_symbol_inner(const device In2& x_13, const device In0& x_17, device Out0& x_15, const device In1& x_19, uint3 gl_WorkGroupID_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = gl_WorkGroupID_param;
-  main_1(x_13, x_17, x_15, x_19, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 gl_WorkGroupID_param [[threadgroup_position_in_grid]], const device In2& x_13 [[buffer(1)]], const device In0& x_17 [[buffer(2)]], device Out0& x_15 [[buffer(0)]], const device In1& x_19 [[buffer(3)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_13, x_17, x_15, x_19, gl_WorkGroupID_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index e9b2b5d..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,231 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_WorkGroupID_param_1
-               OpExecutionMode %main LocalSize 4 1 1
-               OpName %gl_WorkGroupID_param_1 "gl_WorkGroupID_param_1"
-               OpName %gl_WorkGroupID "gl_WorkGroupID"
-               OpName %In2 "In2"
-               OpMemberName %In2 0 "data_in2"
-               OpName %x_13 "x_13"
-               OpName %Out0 "Out0"
-               OpMemberName %Out0 0 "data_out0"
-               OpName %x_15 "x_15"
-               OpName %In0 "In0"
-               OpMemberName %In0 0 "data_in0"
-               OpName %x_17 "x_17"
-               OpName %In1 "In1"
-               OpMemberName %In1 0 "data_in1"
-               OpName %x_19 "x_19"
-               OpName %main_1 "main_1"
-               OpName %base_index_in "base_index_in"
-               OpName %base_index_out "base_index_out"
-               OpName %index_in0 "index_in0"
-               OpName %index_in1 "index_in1"
-               OpName %index_out0 "index_out0"
-               OpName %index_out1 "index_out1"
-               OpName %condition_index "condition_index"
-               OpName %i "i"
-               OpName %temp0 "temp0"
-               OpName %temp1 "temp1"
-               OpName %main_inner "main_inner"
-               OpName %gl_WorkGroupID_param "gl_WorkGroupID_param"
-               OpName %main "main"
-               OpDecorate %gl_WorkGroupID_param_1 BuiltIn WorkgroupId
-               OpDecorate %In2 Block
-               OpMemberDecorate %In2 0 Offset 0
-               OpDecorate %_arr_int_uint_8 ArrayStride 4
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 2
-               OpDecorate %Out0 Block
-               OpMemberDecorate %Out0 0 Offset 0
-               OpDecorate %_arr_int_uint_1024 ArrayStride 4
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 3
-               OpDecorate %In0 Block
-               OpMemberDecorate %In0 0 Offset 0
-               OpDecorate %_arr_int_uint_512 ArrayStride 4
-               OpDecorate %x_17 NonWritable
-               OpDecorate %x_17 DescriptorSet 0
-               OpDecorate %x_17 Binding 0
-               OpDecorate %In1 Block
-               OpMemberDecorate %In1 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 1
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_WorkGroupID_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-%gl_WorkGroupID = OpVariable %_ptr_Private_v3uint Private %7
-        %int = OpTypeInt 32 1
-     %uint_8 = OpConstant %uint 8
-%_arr_int_uint_8 = OpTypeArray %int %uint_8
-        %In2 = OpTypeStruct %_arr_int_uint_8
-%_ptr_StorageBuffer_In2 = OpTypePointer StorageBuffer %In2
-       %x_13 = OpVariable %_ptr_StorageBuffer_In2 StorageBuffer
-  %uint_1024 = OpConstant %uint 1024
-%_arr_int_uint_1024 = OpTypeArray %int %uint_1024
-       %Out0 = OpTypeStruct %_arr_int_uint_1024
-%_ptr_StorageBuffer_Out0 = OpTypePointer StorageBuffer %Out0
-       %x_15 = OpVariable %_ptr_StorageBuffer_Out0 StorageBuffer
-   %uint_512 = OpConstant %uint 512
-%_arr_int_uint_512 = OpTypeArray %int %uint_512
-        %In0 = OpTypeStruct %_arr_int_uint_512
-%_ptr_StorageBuffer_In0 = OpTypePointer StorageBuffer %In0
-       %x_17 = OpVariable %_ptr_StorageBuffer_In0 StorageBuffer
-        %In1 = OpTypeStruct %_arr_int_uint_512
-%_ptr_StorageBuffer_In1 = OpTypePointer StorageBuffer %In1
-       %x_19 = OpVariable %_ptr_StorageBuffer_In1 StorageBuffer
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %33 = OpConstantNull %uint
-%_ptr_Function_int = OpTypePointer Function %int
-         %37 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-   %uint_128 = OpConstant %uint 128
-   %uint_256 = OpConstant %uint 256
-      %int_0 = OpConstant %int 0
-   %int_n128 = OpConstant %int -128
-    %int_256 = OpConstant %int 256
-       %bool = OpTypeBool
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_1 = OpConstant %int 1
-        %121 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-%base_index_in = OpVariable %_ptr_Function_uint Function %33
-%base_index_out = OpVariable %_ptr_Function_uint Function %33
-  %index_in0 = OpVariable %_ptr_Function_int Function %37
-  %index_in1 = OpVariable %_ptr_Function_int Function %37
- %index_out0 = OpVariable %_ptr_Function_int Function %37
- %index_out1 = OpVariable %_ptr_Function_int Function %37
-%condition_index = OpVariable %_ptr_Function_int Function %37
-          %i = OpVariable %_ptr_Function_int Function %37
-      %temp0 = OpVariable %_ptr_Function_int Function %37
-      %temp1 = OpVariable %_ptr_Function_int Function %37
-         %47 = OpAccessChain %_ptr_Private_uint %gl_WorkGroupID %uint_0
-         %48 = OpLoad %uint %47
-         %50 = OpIMul %uint %uint_128 %48
-               OpStore %base_index_in %50
-         %51 = OpAccessChain %_ptr_Private_uint %gl_WorkGroupID %uint_0
-         %52 = OpLoad %uint %51
-         %54 = OpIMul %uint %uint_256 %52
-               OpStore %base_index_out %54
-               OpStore %index_in0 %int_0
-               OpStore %index_in1 %int_n128
-               OpStore %index_out0 %int_0
-               OpStore %index_out1 %int_n128
-               OpStore %condition_index %int_0
-               OpStore %i %int_0
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpSLessThan %bool %61 %int_256
-               OpSelectionMerge %65 None
-               OpBranchConditional %63 %66 %67
-         %66 = OpLabel
-               OpBranch %65
-         %67 = OpLabel
-               OpBranch %58
-         %65 = OpLabel
-         %68 = OpLoad %int %condition_index
-         %70 = OpAccessChain %_ptr_StorageBuffer_int %x_13 %uint_0 %68
-         %71 = OpLoad %int %70
-         %72 = OpIEqual %bool %71 %int_0
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpLoad %uint %base_index_out
-         %77 = OpLoad %int %index_out0
-         %78 = OpLoad %uint %base_index_in
-         %79 = OpLoad %int %index_in0
-         %80 = OpBitcast %uint %79
-         %81 = OpIAdd %uint %78 %80
-         %82 = OpAccessChain %_ptr_StorageBuffer_int %x_17 %uint_0 %81
-         %83 = OpLoad %int %82
-         %84 = OpBitcast %uint %77
-         %85 = OpIAdd %uint %76 %84
-         %86 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %85
-               OpStore %86 %83
-         %87 = OpLoad %int %index_out0
-         %89 = OpIAdd %int %87 %int_1
-               OpStore %index_out0 %89
-         %90 = OpLoad %int %index_in1
-         %91 = OpIAdd %int %90 %int_1
-               OpStore %index_in1 %91
-               OpBranch %73
-         %75 = OpLabel
-         %92 = OpLoad %uint %base_index_out
-         %93 = OpLoad %int %index_out1
-         %94 = OpLoad %uint %base_index_in
-         %95 = OpLoad %int %index_in1
-         %96 = OpBitcast %uint %95
-         %97 = OpIAdd %uint %94 %96
-         %98 = OpAccessChain %_ptr_StorageBuffer_int %x_19 %uint_0 %97
-         %99 = OpLoad %int %98
-        %100 = OpBitcast %uint %93
-        %101 = OpIAdd %uint %92 %100
-        %102 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %101
-               OpStore %102 %99
-        %103 = OpLoad %int %index_out1
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %index_out1 %104
-        %105 = OpLoad %int %index_in1
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %index_in1 %106
-               OpBranch %73
-         %73 = OpLabel
-        %107 = OpLoad %int %condition_index
-        %108 = OpIAdd %int %107 %int_1
-        %109 = OpAccessChain %_ptr_StorageBuffer_int %x_13 %uint_0 %108
-        %110 = OpLoad %int %109
-        %111 = OpLoad %int %condition_index
-        %112 = OpIAdd %int %111 %110
-               OpStore %condition_index %112
-        %113 = OpLoad %int %index_in0
-               OpStore %temp0 %113
-        %114 = OpLoad %int %index_in1
-               OpStore %index_in0 %114
-        %115 = OpLoad %int %temp0
-               OpStore %index_in1 %115
-        %116 = OpLoad %int %index_out0
-               OpStore %temp1 %116
-        %117 = OpLoad %int %index_out1
-               OpStore %index_out0 %117
-        %118 = OpLoad %int %temp1
-               OpStore %index_out1 %118
-               OpBranch %59
-         %59 = OpLabel
-        %119 = OpLoad %int %i
-        %120 = OpIAdd %int %119 %int_1
-               OpStore %i %120
-               OpBranch %57
-         %58 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %121
-%gl_WorkGroupID_param = OpFunctionParameter %v3uint
-        %124 = OpLabel
-               OpStore %gl_WorkGroupID %gl_WorkGroupID_param
-        %125 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-        %127 = OpLabel
-        %129 = OpLoad %v3uint %gl_WorkGroupID_param_1
-        %128 = OpFunctionCall %void %main_inner %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 6aa8659..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,120 +0,0 @@
-type Arr = [[stride(4)]] array<i32, 8>;
-
-[[block]]
-struct In2 {
-  data_in2 : Arr;
-};
-
-type Arr_1 = [[stride(4)]] array<i32, 1024>;
-
-[[block]]
-struct Out0 {
-  data_out0 : Arr_1;
-};
-
-type Arr_2 = [[stride(4)]] array<i32, 512>;
-
-type Arr_3 = [[stride(4)]] array<i32, 512>;
-
-[[block]]
-struct In0 {
-  data_in0 : Arr_3;
-};
-
-[[block]]
-struct In1 {
-  data_in1 : Arr_3;
-};
-
-var<private> gl_WorkGroupID : vec3<u32>;
-
-[[group(0), binding(2)]] var<storage, read> x_13 : In2;
-
-[[group(0), binding(3)]] var<storage, read_write> x_15 : Out0;
-
-[[group(0), binding(0)]] var<storage, read> x_17 : In0;
-
-[[group(0), binding(1)]] var<storage, read> x_19 : In1;
-
-fn main_1() {
-  var base_index_in : u32;
-  var base_index_out : u32;
-  var index_in0 : i32;
-  var index_in1 : i32;
-  var index_out0 : i32;
-  var index_out1 : i32;
-  var condition_index : i32;
-  var i : i32;
-  var temp0 : i32;
-  var temp1 : i32;
-  let x_56 : u32 = gl_WorkGroupID.x;
-  base_index_in = (128u * x_56);
-  let x_59 : u32 = gl_WorkGroupID.x;
-  base_index_out = (256u * x_59);
-  index_in0 = 0;
-  index_in1 = -128;
-  index_out0 = 0;
-  index_out1 = -128;
-  condition_index = 0;
-  i = 0;
-  loop {
-    let x_65 : i32 = i;
-    if ((x_65 < 256)) {
-    } else {
-      break;
-    }
-    let x_68 : i32 = condition_index;
-    let x_70 : i32 = x_13.data_in2[x_68];
-    if ((x_70 == 0)) {
-      let x_75 : u32 = base_index_out;
-      let x_76 : i32 = index_out0;
-      let x_79 : u32 = base_index_in;
-      let x_80 : i32 = index_in0;
-      let x_84 : i32 = x_17.data_in0[(x_79 + bitcast<u32>(x_80))];
-      x_15.data_out0[(x_75 + bitcast<u32>(x_76))] = x_84;
-      let x_86 : i32 = index_out0;
-      index_out0 = (x_86 + 1);
-      let x_88 : i32 = index_in1;
-      index_in1 = (x_88 + 1);
-    } else {
-      let x_90 : u32 = base_index_out;
-      let x_91 : i32 = index_out1;
-      let x_94 : u32 = base_index_in;
-      let x_95 : i32 = index_in1;
-      let x_99 : i32 = x_19.data_in1[(x_94 + bitcast<u32>(x_95))];
-      x_15.data_out0[(x_90 + bitcast<u32>(x_91))] = x_99;
-      let x_101 : i32 = index_out1;
-      index_out1 = (x_101 + 1);
-      let x_103 : i32 = index_in1;
-      index_in1 = (x_103 + 1);
-    }
-    let x_105 : i32 = condition_index;
-    let x_108 : i32 = x_13.data_in2[(x_105 + 1)];
-    let x_109 : i32 = condition_index;
-    condition_index = (x_109 + x_108);
-    let x_111 : i32 = index_in0;
-    temp0 = x_111;
-    let x_112 : i32 = index_in1;
-    index_in0 = x_112;
-    let x_113 : i32 = temp0;
-    index_in1 = x_113;
-    let x_114 : i32 = index_out0;
-    temp1 = x_114;
-    let x_115 : i32 = index_out1;
-    index_out0 = x_115;
-    let x_116 : i32 = temp1;
-    index_out1 = x_116;
-
-    continuing {
-      let x_117 : i32 = i;
-      i = (x_117 + 1);
-    }
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(4, 1, 1)]]
-fn main([[builtin(workgroup_id)]] gl_WorkGroupID_param : vec3<u32>) {
-  gl_WorkGroupID = gl_WorkGroupID_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 9f68c5d..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,72 +0,0 @@
-static uint3 gl_WorkGroupID = uint3(0u, 0u, 0u);
-ByteAddressBuffer x_13 : register(t2, space0);
-RWByteAddressBuffer x_15 : register(u3, space0);
-ByteAddressBuffer x_17 : register(t0, space0);
-ByteAddressBuffer x_19 : register(t1, space0);
-
-void main_1() {
-  uint base_index_in = 0u;
-  uint base_index_out = 0u;
-  int index_in0 = 0;
-  int index_in1 = 0;
-  int index_out0 = 0;
-  int index_out1 = 0;
-  int condition_index = 0;
-  int i = 0;
-  int temp0 = 0;
-  int temp1 = 0;
-  const uint x_56 = gl_WorkGroupID.x;
-  base_index_in = (128u * x_56);
-  const uint x_59 = gl_WorkGroupID.x;
-  base_index_out = (256u * x_59);
-  index_in0 = 0;
-  index_in1 = -128;
-  index_out0 = 0;
-  index_out1 = -128;
-  condition_index = 0;
-  i = 0;
-  {
-    for(; (i < 256); i = (i + 1)) {
-      const int x_70 = asint(x_13.Load((4u * uint(condition_index))));
-      if ((x_70 == 0)) {
-        const uint x_75 = base_index_out;
-        const int x_76 = index_out0;
-        const int x_84 = asint(x_17.Load((4u * (base_index_in + asuint(index_in0)))));
-        x_15.Store((4u * (x_75 + asuint(x_76))), asuint(x_84));
-        index_out0 = (index_out0 + 1);
-        index_in1 = (index_in1 + 1);
-      } else {
-        const uint x_90 = base_index_out;
-        const int x_91 = index_out1;
-        const int x_99 = asint(x_19.Load((4u * (base_index_in + asuint(index_in1)))));
-        x_15.Store((4u * (x_90 + asuint(x_91))), asuint(x_99));
-        index_out1 = (index_out1 + 1);
-        index_in1 = (index_in1 + 1);
-      }
-      const int x_108 = asint(x_13.Load((4u * uint((condition_index + 1)))));
-      condition_index = (condition_index + x_108);
-      temp0 = index_in0;
-      index_in0 = index_in1;
-      index_in1 = temp0;
-      temp1 = index_out0;
-      index_out0 = index_out1;
-      index_out1 = temp1;
-    }
-  }
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 gl_WorkGroupID_param : SV_GroupID;
-};
-
-void main_inner(uint3 gl_WorkGroupID_param) {
-  gl_WorkGroupID = gl_WorkGroupID_param;
-  main_1();
-}
-
-[numthreads(4, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.gl_WorkGroupID_param);
-  return;
-}
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.msl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.msl
deleted file mode 100644
index eeb4a33..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct tint_array_wrapper {
-  /* 0x0000 */ int arr[8];
-};
-struct In2 {
-  /* 0x0000 */ tint_array_wrapper data_in2;
-};
-struct tint_array_wrapper_1 {
-  /* 0x0000 */ int arr[1024];
-};
-struct Out0 {
-  /* 0x0000 */ tint_array_wrapper_1 data_out0;
-};
-struct tint_array_wrapper_2 {
-  /* 0x0000 */ int arr[512];
-};
-struct In0 {
-  /* 0x0000 */ tint_array_wrapper_2 data_in0;
-};
-struct In1 {
-  /* 0x0000 */ tint_array_wrapper_2 data_in1;
-};
-
-void main_1(const device In2& x_13, const device In0& x_17, device Out0& x_15, const device In1& x_19, thread uint3* const tint_symbol_1) {
-  uint base_index_in = 0u;
-  uint base_index_out = 0u;
-  int index_in0 = 0;
-  int index_in1 = 0;
-  int index_out0 = 0;
-  int index_out1 = 0;
-  int condition_index = 0;
-  int i = 0;
-  int temp0 = 0;
-  int temp1 = 0;
-  uint const x_56 = (*(tint_symbol_1)).x;
-  base_index_in = (128u * x_56);
-  uint const x_59 = (*(tint_symbol_1)).x;
-  base_index_out = (256u * x_59);
-  index_in0 = 0;
-  index_in1 = -128;
-  index_out0 = 0;
-  index_out1 = -128;
-  condition_index = 0;
-  i = 0;
-  while (true) {
-    int const x_65 = i;
-    if ((x_65 < 256)) {
-    } else {
-      break;
-    }
-    int const x_68 = condition_index;
-    int const x_70 = x_13.data_in2.arr[x_68];
-    if ((x_70 == 0)) {
-      uint const x_75 = base_index_out;
-      int const x_76 = index_out0;
-      uint const x_79 = base_index_in;
-      int const x_80 = index_in0;
-      int const x_84 = x_17.data_in0.arr[(x_79 + as_type<uint>(x_80))];
-      x_15.data_out0.arr[(x_75 + as_type<uint>(x_76))] = x_84;
-      int const x_86 = index_out0;
-      index_out0 = as_type<int>((as_type<uint>(x_86) + as_type<uint>(1)));
-      int const x_88 = index_in1;
-      index_in1 = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
-    } else {
-      uint const x_90 = base_index_out;
-      int const x_91 = index_out1;
-      uint const x_94 = base_index_in;
-      int const x_95 = index_in1;
-      int const x_99 = x_19.data_in1.arr[(x_94 + as_type<uint>(x_95))];
-      x_15.data_out0.arr[(x_90 + as_type<uint>(x_91))] = x_99;
-      int const x_101 = index_out1;
-      index_out1 = as_type<int>((as_type<uint>(x_101) + as_type<uint>(1)));
-      int const x_103 = index_in1;
-      index_in1 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
-    }
-    int const x_105 = condition_index;
-    int const x_108 = x_13.data_in2.arr[as_type<int>((as_type<uint>(x_105) + as_type<uint>(1)))];
-    int const x_109 = condition_index;
-    condition_index = as_type<int>((as_type<uint>(x_109) + as_type<uint>(x_108)));
-    int const x_111 = index_in0;
-    temp0 = x_111;
-    int const x_112 = index_in1;
-    index_in0 = x_112;
-    int const x_113 = temp0;
-    index_in1 = x_113;
-    int const x_114 = index_out0;
-    temp1 = x_114;
-    int const x_115 = index_out1;
-    index_out0 = x_115;
-    int const x_116 = temp1;
-    index_out1 = x_116;
-    {
-      int const x_117 = i;
-      i = as_type<int>((as_type<uint>(x_117) + as_type<uint>(1)));
-    }
-  }
-  return;
-}
-
-void tint_symbol_inner(const device In2& x_13, const device In0& x_17, device Out0& x_15, const device In1& x_19, uint3 gl_WorkGroupID_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = gl_WorkGroupID_param;
-  main_1(x_13, x_17, x_15, x_19, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 gl_WorkGroupID_param [[threadgroup_position_in_grid]], const device In2& x_13 [[buffer(1)]], const device In0& x_17 [[buffer(2)]], device Out0& x_15 [[buffer(0)]], const device In1& x_19 [[buffer(3)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_13, x_17, x_15, x_19, gl_WorkGroupID_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index e9b2b5d..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,231 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 130
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %gl_WorkGroupID_param_1
-               OpExecutionMode %main LocalSize 4 1 1
-               OpName %gl_WorkGroupID_param_1 "gl_WorkGroupID_param_1"
-               OpName %gl_WorkGroupID "gl_WorkGroupID"
-               OpName %In2 "In2"
-               OpMemberName %In2 0 "data_in2"
-               OpName %x_13 "x_13"
-               OpName %Out0 "Out0"
-               OpMemberName %Out0 0 "data_out0"
-               OpName %x_15 "x_15"
-               OpName %In0 "In0"
-               OpMemberName %In0 0 "data_in0"
-               OpName %x_17 "x_17"
-               OpName %In1 "In1"
-               OpMemberName %In1 0 "data_in1"
-               OpName %x_19 "x_19"
-               OpName %main_1 "main_1"
-               OpName %base_index_in "base_index_in"
-               OpName %base_index_out "base_index_out"
-               OpName %index_in0 "index_in0"
-               OpName %index_in1 "index_in1"
-               OpName %index_out0 "index_out0"
-               OpName %index_out1 "index_out1"
-               OpName %condition_index "condition_index"
-               OpName %i "i"
-               OpName %temp0 "temp0"
-               OpName %temp1 "temp1"
-               OpName %main_inner "main_inner"
-               OpName %gl_WorkGroupID_param "gl_WorkGroupID_param"
-               OpName %main "main"
-               OpDecorate %gl_WorkGroupID_param_1 BuiltIn WorkgroupId
-               OpDecorate %In2 Block
-               OpMemberDecorate %In2 0 Offset 0
-               OpDecorate %_arr_int_uint_8 ArrayStride 4
-               OpDecorate %x_13 NonWritable
-               OpDecorate %x_13 DescriptorSet 0
-               OpDecorate %x_13 Binding 2
-               OpDecorate %Out0 Block
-               OpMemberDecorate %Out0 0 Offset 0
-               OpDecorate %_arr_int_uint_1024 ArrayStride 4
-               OpDecorate %x_15 DescriptorSet 0
-               OpDecorate %x_15 Binding 3
-               OpDecorate %In0 Block
-               OpMemberDecorate %In0 0 Offset 0
-               OpDecorate %_arr_int_uint_512 ArrayStride 4
-               OpDecorate %x_17 NonWritable
-               OpDecorate %x_17 DescriptorSet 0
-               OpDecorate %x_17 Binding 0
-               OpDecorate %In1 Block
-               OpMemberDecorate %In1 0 Offset 0
-               OpDecorate %x_19 NonWritable
-               OpDecorate %x_19 DescriptorSet 0
-               OpDecorate %x_19 Binding 1
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%gl_WorkGroupID_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-%gl_WorkGroupID = OpVariable %_ptr_Private_v3uint Private %7
-        %int = OpTypeInt 32 1
-     %uint_8 = OpConstant %uint 8
-%_arr_int_uint_8 = OpTypeArray %int %uint_8
-        %In2 = OpTypeStruct %_arr_int_uint_8
-%_ptr_StorageBuffer_In2 = OpTypePointer StorageBuffer %In2
-       %x_13 = OpVariable %_ptr_StorageBuffer_In2 StorageBuffer
-  %uint_1024 = OpConstant %uint 1024
-%_arr_int_uint_1024 = OpTypeArray %int %uint_1024
-       %Out0 = OpTypeStruct %_arr_int_uint_1024
-%_ptr_StorageBuffer_Out0 = OpTypePointer StorageBuffer %Out0
-       %x_15 = OpVariable %_ptr_StorageBuffer_Out0 StorageBuffer
-   %uint_512 = OpConstant %uint 512
-%_arr_int_uint_512 = OpTypeArray %int %uint_512
-        %In0 = OpTypeStruct %_arr_int_uint_512
-%_ptr_StorageBuffer_In0 = OpTypePointer StorageBuffer %In0
-       %x_17 = OpVariable %_ptr_StorageBuffer_In0 StorageBuffer
-        %In1 = OpTypeStruct %_arr_int_uint_512
-%_ptr_StorageBuffer_In1 = OpTypePointer StorageBuffer %In1
-       %x_19 = OpVariable %_ptr_StorageBuffer_In1 StorageBuffer
-       %void = OpTypeVoid
-         %27 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %33 = OpConstantNull %uint
-%_ptr_Function_int = OpTypePointer Function %int
-         %37 = OpConstantNull %int
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-   %uint_128 = OpConstant %uint 128
-   %uint_256 = OpConstant %uint 256
-      %int_0 = OpConstant %int 0
-   %int_n128 = OpConstant %int -128
-    %int_256 = OpConstant %int 256
-       %bool = OpTypeBool
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_1 = OpConstant %int 1
-        %121 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %27
-         %30 = OpLabel
-%base_index_in = OpVariable %_ptr_Function_uint Function %33
-%base_index_out = OpVariable %_ptr_Function_uint Function %33
-  %index_in0 = OpVariable %_ptr_Function_int Function %37
-  %index_in1 = OpVariable %_ptr_Function_int Function %37
- %index_out0 = OpVariable %_ptr_Function_int Function %37
- %index_out1 = OpVariable %_ptr_Function_int Function %37
-%condition_index = OpVariable %_ptr_Function_int Function %37
-          %i = OpVariable %_ptr_Function_int Function %37
-      %temp0 = OpVariable %_ptr_Function_int Function %37
-      %temp1 = OpVariable %_ptr_Function_int Function %37
-         %47 = OpAccessChain %_ptr_Private_uint %gl_WorkGroupID %uint_0
-         %48 = OpLoad %uint %47
-         %50 = OpIMul %uint %uint_128 %48
-               OpStore %base_index_in %50
-         %51 = OpAccessChain %_ptr_Private_uint %gl_WorkGroupID %uint_0
-         %52 = OpLoad %uint %51
-         %54 = OpIMul %uint %uint_256 %52
-               OpStore %base_index_out %54
-               OpStore %index_in0 %int_0
-               OpStore %index_in1 %int_n128
-               OpStore %index_out0 %int_0
-               OpStore %index_out1 %int_n128
-               OpStore %condition_index %int_0
-               OpStore %i %int_0
-               OpBranch %57
-         %57 = OpLabel
-               OpLoopMerge %58 %59 None
-               OpBranch %60
-         %60 = OpLabel
-         %61 = OpLoad %int %i
-         %63 = OpSLessThan %bool %61 %int_256
-               OpSelectionMerge %65 None
-               OpBranchConditional %63 %66 %67
-         %66 = OpLabel
-               OpBranch %65
-         %67 = OpLabel
-               OpBranch %58
-         %65 = OpLabel
-         %68 = OpLoad %int %condition_index
-         %70 = OpAccessChain %_ptr_StorageBuffer_int %x_13 %uint_0 %68
-         %71 = OpLoad %int %70
-         %72 = OpIEqual %bool %71 %int_0
-               OpSelectionMerge %73 None
-               OpBranchConditional %72 %74 %75
-         %74 = OpLabel
-         %76 = OpLoad %uint %base_index_out
-         %77 = OpLoad %int %index_out0
-         %78 = OpLoad %uint %base_index_in
-         %79 = OpLoad %int %index_in0
-         %80 = OpBitcast %uint %79
-         %81 = OpIAdd %uint %78 %80
-         %82 = OpAccessChain %_ptr_StorageBuffer_int %x_17 %uint_0 %81
-         %83 = OpLoad %int %82
-         %84 = OpBitcast %uint %77
-         %85 = OpIAdd %uint %76 %84
-         %86 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %85
-               OpStore %86 %83
-         %87 = OpLoad %int %index_out0
-         %89 = OpIAdd %int %87 %int_1
-               OpStore %index_out0 %89
-         %90 = OpLoad %int %index_in1
-         %91 = OpIAdd %int %90 %int_1
-               OpStore %index_in1 %91
-               OpBranch %73
-         %75 = OpLabel
-         %92 = OpLoad %uint %base_index_out
-         %93 = OpLoad %int %index_out1
-         %94 = OpLoad %uint %base_index_in
-         %95 = OpLoad %int %index_in1
-         %96 = OpBitcast %uint %95
-         %97 = OpIAdd %uint %94 %96
-         %98 = OpAccessChain %_ptr_StorageBuffer_int %x_19 %uint_0 %97
-         %99 = OpLoad %int %98
-        %100 = OpBitcast %uint %93
-        %101 = OpIAdd %uint %92 %100
-        %102 = OpAccessChain %_ptr_StorageBuffer_int %x_15 %uint_0 %101
-               OpStore %102 %99
-        %103 = OpLoad %int %index_out1
-        %104 = OpIAdd %int %103 %int_1
-               OpStore %index_out1 %104
-        %105 = OpLoad %int %index_in1
-        %106 = OpIAdd %int %105 %int_1
-               OpStore %index_in1 %106
-               OpBranch %73
-         %73 = OpLabel
-        %107 = OpLoad %int %condition_index
-        %108 = OpIAdd %int %107 %int_1
-        %109 = OpAccessChain %_ptr_StorageBuffer_int %x_13 %uint_0 %108
-        %110 = OpLoad %int %109
-        %111 = OpLoad %int %condition_index
-        %112 = OpIAdd %int %111 %110
-               OpStore %condition_index %112
-        %113 = OpLoad %int %index_in0
-               OpStore %temp0 %113
-        %114 = OpLoad %int %index_in1
-               OpStore %index_in0 %114
-        %115 = OpLoad %int %temp0
-               OpStore %index_in1 %115
-        %116 = OpLoad %int %index_out0
-               OpStore %temp1 %116
-        %117 = OpLoad %int %index_out1
-               OpStore %index_out0 %117
-        %118 = OpLoad %int %temp1
-               OpStore %index_out1 %118
-               OpBranch %59
-         %59 = OpLabel
-        %119 = OpLoad %int %i
-        %120 = OpIAdd %int %119 %int_1
-               OpStore %i %120
-               OpBranch %57
-         %58 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %121
-%gl_WorkGroupID_param = OpFunctionParameter %v3uint
-        %124 = OpLabel
-               OpStore %gl_WorkGroupID %gl_WorkGroupID_param
-        %125 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %27
-        %127 = OpLabel
-        %129 = OpLoad %v3uint %gl_WorkGroupID_param_1
-        %128 = OpFunctionCall %void %main_inner %129
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 6aa8659..0000000
--- a/test/vk-gl-cts/non_robust_buffer_access/unexecuted_oob_underflow/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,120 +0,0 @@
-type Arr = [[stride(4)]] array<i32, 8>;
-
-[[block]]
-struct In2 {
-  data_in2 : Arr;
-};
-
-type Arr_1 = [[stride(4)]] array<i32, 1024>;
-
-[[block]]
-struct Out0 {
-  data_out0 : Arr_1;
-};
-
-type Arr_2 = [[stride(4)]] array<i32, 512>;
-
-type Arr_3 = [[stride(4)]] array<i32, 512>;
-
-[[block]]
-struct In0 {
-  data_in0 : Arr_3;
-};
-
-[[block]]
-struct In1 {
-  data_in1 : Arr_3;
-};
-
-var<private> gl_WorkGroupID : vec3<u32>;
-
-[[group(0), binding(2)]] var<storage, read> x_13 : In2;
-
-[[group(0), binding(3)]] var<storage, read_write> x_15 : Out0;
-
-[[group(0), binding(0)]] var<storage, read> x_17 : In0;
-
-[[group(0), binding(1)]] var<storage, read> x_19 : In1;
-
-fn main_1() {
-  var base_index_in : u32;
-  var base_index_out : u32;
-  var index_in0 : i32;
-  var index_in1 : i32;
-  var index_out0 : i32;
-  var index_out1 : i32;
-  var condition_index : i32;
-  var i : i32;
-  var temp0 : i32;
-  var temp1 : i32;
-  let x_56 : u32 = gl_WorkGroupID.x;
-  base_index_in = (128u * x_56);
-  let x_59 : u32 = gl_WorkGroupID.x;
-  base_index_out = (256u * x_59);
-  index_in0 = 0;
-  index_in1 = -128;
-  index_out0 = 0;
-  index_out1 = -128;
-  condition_index = 0;
-  i = 0;
-  loop {
-    let x_65 : i32 = i;
-    if ((x_65 < 256)) {
-    } else {
-      break;
-    }
-    let x_68 : i32 = condition_index;
-    let x_70 : i32 = x_13.data_in2[x_68];
-    if ((x_70 == 0)) {
-      let x_75 : u32 = base_index_out;
-      let x_76 : i32 = index_out0;
-      let x_79 : u32 = base_index_in;
-      let x_80 : i32 = index_in0;
-      let x_84 : i32 = x_17.data_in0[(x_79 + bitcast<u32>(x_80))];
-      x_15.data_out0[(x_75 + bitcast<u32>(x_76))] = x_84;
-      let x_86 : i32 = index_out0;
-      index_out0 = (x_86 + 1);
-      let x_88 : i32 = index_in1;
-      index_in1 = (x_88 + 1);
-    } else {
-      let x_90 : u32 = base_index_out;
-      let x_91 : i32 = index_out1;
-      let x_94 : u32 = base_index_in;
-      let x_95 : i32 = index_in1;
-      let x_99 : i32 = x_19.data_in1[(x_94 + bitcast<u32>(x_95))];
-      x_15.data_out0[(x_90 + bitcast<u32>(x_91))] = x_99;
-      let x_101 : i32 = index_out1;
-      index_out1 = (x_101 + 1);
-      let x_103 : i32 = index_in1;
-      index_in1 = (x_103 + 1);
-    }
-    let x_105 : i32 = condition_index;
-    let x_108 : i32 = x_13.data_in2[(x_105 + 1)];
-    let x_109 : i32 = condition_index;
-    condition_index = (x_109 + x_108);
-    let x_111 : i32 = index_in0;
-    temp0 = x_111;
-    let x_112 : i32 = index_in1;
-    index_in0 = x_112;
-    let x_113 : i32 = temp0;
-    index_in1 = x_113;
-    let x_114 : i32 = index_out0;
-    temp1 = x_114;
-    let x_115 : i32 = index_out1;
-    index_out0 = x_115;
-    let x_116 : i32 = temp1;
-    index_out1 = x_116;
-
-    continuing {
-      let x_117 : i32 = i;
-      i = (x_117 + 1);
-    }
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(4, 1, 1)]]
-fn main([[builtin(workgroup_id)]] gl_WorkGroupID_param : vec3<u32>) {
-  gl_WorkGroupID = gl_WorkGroupID_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.hlsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.hlsl
deleted file mode 100644
index 3a4d989..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 color_1;
-};
-struct tint_symbol {
-  float4 color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_1 = inner_result.color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.msl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.msl
deleted file mode 100644
index 1bd22a2..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_1;
-};
-struct tint_symbol_1 {
-  float4 color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_1 = inner_result.color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.spvasm b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.spvasm
deleted file mode 100644
index 3331626..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %color_1_1 "color_1_1"
-               OpName %color "color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-  %color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-      %color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-         %13 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %14 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpStore %color %13
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %14
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-         %19 = OpLoad %v4float %color
-         %20 = OpCompositeConstruct %main_out %19
-               OpReturnValue %20
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %22 = OpLabel
-         %23 = OpFunctionCall %main_out %main_inner
-         %24 = OpCompositeExtract %v4float %23 0
-               OpStore %color_1_1 %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.wgsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.wgsl
deleted file mode 100644
index c1d101c..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> color : vec4<f32>;
-
-fn main_1() {
-  color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color);
-}
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.hlsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.hlsl
deleted file mode 100644
index 3a4d989..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,26 +0,0 @@
-static float4 color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  color = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 color_1;
-};
-struct tint_symbol {
-  float4 color_1 : SV_Target0;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_1 = inner_result.color_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.msl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.msl
deleted file mode 100644
index 1bd22a2..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.msl
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_1;
-};
-struct tint_symbol_1 {
-  float4 color_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3) {
-  *(tint_symbol_3) = float4(1.0f, 1.0f, 1.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_4) {
-  main_1(tint_symbol_4);
-  main_out const tint_symbol_2 = {.color_1=*(tint_symbol_4)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_5 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_5));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_1 = inner_result.color_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.spvasm b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.spvasm
deleted file mode 100644
index 3331626..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,50 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 25
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %color_1_1 "color_1_1"
-               OpName %color "color"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-  %color_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-      %color = OpVariable %_ptr_Private_v4float Private %5
-       %void = OpTypeVoid
-          %8 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-         %13 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-   %main_out = OpTypeStruct %v4float
-         %14 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %8
-         %11 = OpLabel
-               OpStore %color %13
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %14
-         %17 = OpLabel
-         %18 = OpFunctionCall %void %main_1
-         %19 = OpLoad %v4float %color
-         %20 = OpCompositeConstruct %main_out %19
-               OpReturnValue %20
-               OpFunctionEnd
-       %main = OpFunction %void None %8
-         %22 = OpLabel
-         %23 = OpFunctionCall %main_out %main_inner
-         %24 = OpCompositeExtract %v4float %23 0
-               OpStore %color_1_1 %24
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.wgsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.wgsl
deleted file mode 100644
index c1d101c..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,17 +0,0 @@
-var<private> color : vec4<f32>;
-
-fn main_1() {
-  color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color);
-}
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.hlsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.hlsl
deleted file mode 100644
index b1179b4..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,35 +0,0 @@
-warning: use of deprecated intrinsic
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-Texture2D<float4> tint_symbol : register(t0, space0);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_19 = gl_FragCoord;
-  const float4 x_22 = tint_symbol.Load(int3(int2(float2(x_19.x, x_19.y)), 0));
-  color_out = x_22;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_2 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_3 {
-  float4 color_out_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {color_out};
-  return tint_symbol_4;
-}
-
-tint_symbol_3 main(tint_symbol_2 tint_symbol_1) {
-  const main_out inner_result = main_inner(tint_symbol_1.gl_FragCoord_param);
-  tint_symbol_3 wrapper_result = (tint_symbol_3)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.msl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.msl
deleted file mode 100644
index 6992835..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-warning: use of deprecated intrinsic
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_2 {
-  float4 color_out_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_4, texture2d<float, access::read> tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_19 = *(tint_symbol_4);
-  float4 const x_22 = tint_symbol_5.read(uint2(int2(float2(x_19.x, x_19.y))));
-  *(tint_symbol_6) = x_22;
-  return;
-}
-
-main_out tint_symbol_1_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_7, texture2d<float, access::read> tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(tint_symbol_7, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_3 = {.color_out_1=*(tint_symbol_9)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_2 tint_symbol_1(texture2d<float, access::read> tint_symbol_11 [[texture(0)]], float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_1_inner(gl_FragCoord_param, &(tint_symbol_10), tint_symbol_11, &(tint_symbol_12));
-  tint_symbol_2 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.spvasm b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.spvasm
deleted file mode 100644
index 673f459..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,76 +0,0 @@
-warning: use of deprecated intrinsic
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %color_out_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %color_out "color_out"
-               OpName %texture "texture"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %texture NonWritable
-               OpDecorate %texture DescriptorSet 0
-               OpDecorate %texture Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %7
-         %12 = OpTypeImage %float 2D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_12 = OpTypePointer UniformConstant %12
-    %texture = OpVariable %_ptr_UniformConstant_12 UniformConstant
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-    %v2float = OpTypeVector %float 2
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %gl_FragCoord
-         %20 = OpLoad %12 %texture
-         %25 = OpCompositeExtract %float %18 0
-         %26 = OpCompositeExtract %float %18 1
-         %27 = OpCompositeConstruct %v2float %25 %26
-         %21 = OpConvertFToS %v2int %27
-         %19 = OpImageRead %v4float %20 %21
-               OpStore %color_out %19
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %color_out
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %gl_FragCoord_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %color_out_1_1 %40
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.wgsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.wgsl
deleted file mode 100644
index 7bb9553..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-warning: use of deprecated intrinsic
-var<private> color_out : vec4<f32>;
-
-[[group(0), binding(0)]] var texture : texture_storage_2d<rgba8unorm, read>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  let x_19 : vec4<f32> = gl_FragCoord;
-  let x_22 : vec4<f32> = textureLoad(texture, vec2<i32>(vec2<f32>(x_19.x, x_19.y)));
-  color_out = x_22;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(color_out);
-}
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.hlsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.hlsl
deleted file mode 100644
index 7edab18..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl:9:26 warning: use of deprecated intrinsic
-  let x_22 : vec4<f32> = textureLoad(texture, vec2<i32>(vec2<f32>(x_19.x, x_19.y)));
-                         ^^^^^^^^^^^
-
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-Texture2D<float4> tint_symbol : register(t0, space0);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_19 = gl_FragCoord;
-  const float4 x_22 = tint_symbol.Load(int3(int2(float2(x_19.x, x_19.y)), 0));
-  color_out = x_22;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_2 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_3 {
-  float4 color_out_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_4 = {color_out};
-  return tint_symbol_4;
-}
-
-tint_symbol_3 main(tint_symbol_2 tint_symbol_1) {
-  const main_out inner_result = main_inner(tint_symbol_1.gl_FragCoord_param);
-  tint_symbol_3 wrapper_result = (tint_symbol_3)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.msl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.msl
deleted file mode 100644
index a1b603f..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl:9:26 warning: use of deprecated intrinsic
-  let x_22 : vec4<f32> = textureLoad(texture, vec2<i32>(vec2<f32>(x_19.x, x_19.y)));
-                         ^^^^^^^^^^^
-
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_2 {
-  float4 color_out_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_4, texture2d<float, access::read> tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_19 = *(tint_symbol_4);
-  float4 const x_22 = tint_symbol_5.read(uint2(int2(float2(x_19.x, x_19.y))));
-  *(tint_symbol_6) = x_22;
-  return;
-}
-
-main_out tint_symbol_1_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_7, texture2d<float, access::read> tint_symbol_8, thread float4* const tint_symbol_9) {
-  *(tint_symbol_7) = gl_FragCoord_param;
-  main_1(tint_symbol_7, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_3 = {.color_out_1=*(tint_symbol_9)};
-  return tint_symbol_3;
-}
-
-fragment tint_symbol_2 tint_symbol_1(texture2d<float, access::read> tint_symbol_11 [[texture(0)]], float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  main_out const inner_result = tint_symbol_1_inner(gl_FragCoord_param, &(tint_symbol_10), tint_symbol_11, &(tint_symbol_12));
-  tint_symbol_2 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.spvasm b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.spvasm
deleted file mode 100644
index 7a720f7..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl:9:26 warning: use of deprecated intrinsic
-  let x_22 : vec4<f32> = textureLoad(texture, vec2<i32>(vec2<f32>(x_19.x, x_19.y)));
-                         ^^^^^^^^^^^
-
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %color_out_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %color_out "color_out"
-               OpName %texture "texture"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %texture NonWritable
-               OpDecorate %texture DescriptorSet 0
-               OpDecorate %texture Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %7
-         %12 = OpTypeImage %float 2D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_12 = OpTypePointer UniformConstant %12
-    %texture = OpVariable %_ptr_UniformConstant_12 UniformConstant
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-    %v2float = OpTypeVector %float 2
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %gl_FragCoord
-         %20 = OpLoad %12 %texture
-         %25 = OpCompositeExtract %float %18 0
-         %26 = OpCompositeExtract %float %18 1
-         %27 = OpCompositeConstruct %v2float %25 %26
-         %21 = OpConvertFToS %v2int %27
-         %19 = OpImageRead %v4float %20 %21
-               OpStore %color_out %19
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %color_out
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %gl_FragCoord_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %color_out_1_1 %40
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.wgsl b/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.wgsl
deleted file mode 100644
index 815443c..0000000
--- a/test/vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-vk-gl-cts/rasterization/line_continuity/line-strip/1.wgsl:9:26 warning: use of deprecated intrinsic
-  let x_22 : vec4<f32> = textureLoad(texture, vec2<i32>(vec2<f32>(x_19.x, x_19.y)));
-                         ^^^^^^^^^^^
-
-var<private> color_out : vec4<f32>;
-
-[[group(0), binding(0)]] var texture : texture_storage_2d<rgba8unorm, read>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  let x_19 : vec4<f32> = gl_FragCoord;
-  let x_22 : vec4<f32> = textureLoad(texture, vec2<i32>(vec2<f32>(x_19.x, x_19.y)));
-  color_out = x_22;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(color_out);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.hlsl
deleted file mode 100644
index db86fa5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,23 +0,0 @@
-RWByteAddressBuffer x_4 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u0, space0);
-
-void main_1() {
-  uint i = 0u;
-  x_4.Store(0u, asuint(1));
-  i = 0u;
-  {
-    for(; (i < 512u); i = (i + asuint(1))) {
-      const uint x_39 = x_7.Load((4u * (i * 2u)));
-      if ((x_39 != i)) {
-        x_4.Store(0u, asuint(0));
-      }
-    }
-  }
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.msl
deleted file mode 100644
index c05e29d..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct Buf1 {
-  /* 0x0000 */ int result;
-};
-struct Buf0 {
-  /* 0x0000 */ uint values[1];
-};
-
-void main_1(device Buf1& x_4, device Buf0& x_7) {
-  uint i = 0u;
-  x_4.result = 1;
-  i = 0u;
-  while (true) {
-    uint const x_33 = i;
-    if ((x_33 < 512u)) {
-    } else {
-      break;
-    }
-    uint const x_36 = i;
-    uint const x_39 = x_7.values[(x_36 * 2u)];
-    uint const x_40 = i;
-    if ((x_39 != x_40)) {
-      x_4.result = 0;
-    }
-    {
-      uint const x_45 = i;
-      i = (x_45 + as_type<uint>(1));
-    }
-  }
-  return;
-}
-
-kernel void tint_symbol(device Buf1& x_4 [[buffer(0)]], device Buf0& x_7 [[buffer(1)]]) {
-  main_1(x_4, x_7);
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.spvasm
deleted file mode 100644
index 9b18e23..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %Buf1 "Buf1"
-               OpMemberName %Buf1 0 "result"
-               OpName %x_4 "x_4"
-               OpName %Buf0 "Buf0"
-               OpMemberName %Buf0 0 "values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main "main"
-               OpDecorate %Buf1 Block
-               OpMemberDecorate %Buf1 0 Offset 0
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 1
-               OpDecorate %Buf0 Block
-               OpMemberDecorate %Buf0 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-        %int = OpTypeInt 32 1
-       %Buf1 = OpTypeStruct %int
-%_ptr_StorageBuffer_Buf1 = OpTypePointer StorageBuffer %Buf1
-        %x_4 = OpVariable %_ptr_StorageBuffer_Buf1 StorageBuffer
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-       %Buf0 = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_Buf0 = OpTypePointer StorageBuffer %Buf0
-        %x_7 = OpVariable %_ptr_StorageBuffer_Buf0 StorageBuffer
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %16 = OpConstantNull %uint
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_1 = OpConstant %int 1
-   %uint_512 = OpConstant %uint 512
-       %bool = OpTypeBool
-     %uint_2 = OpConstant %uint 2
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-          %i = OpVariable %_ptr_Function_uint Function %16
-         %19 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %19 %int_1
-               OpStore %i %uint_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %uint %i
-         %27 = OpULessThan %bool %25 %uint_512
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpBranch %29
-         %31 = OpLabel
-               OpBranch %22
-         %29 = OpLabel
-         %32 = OpLoad %uint %i
-         %34 = OpIMul %uint %32 %uint_2
-         %36 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %34
-         %37 = OpLoad %uint %36
-         %38 = OpLoad %uint %i
-         %39 = OpINotEqual %bool %37 %38
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-         %42 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %42 %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-         %44 = OpLoad %uint %i
-         %45 = OpBitcast %uint %int_1
-         %46 = OpIAdd %uint %44 %45
-               OpStore %i %46
-               OpBranch %21
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.wgsl
deleted file mode 100644
index 8c7af0e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-[[block]]
-struct Buf1 {
-  result : i32;
-};
-
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct Buf0 {
-  values : RTArr;
-};
-
-[[group(0), binding(1)]] var<storage, read_write> x_4 : Buf1;
-
-[[group(0), binding(0)]] var<storage, read_write> x_7 : Buf0;
-
-fn main_1() {
-  var i : u32;
-  x_4.result = 1;
-  i = 0u;
-  loop {
-    let x_33 : u32 = i;
-    if ((x_33 < 512u)) {
-    } else {
-      break;
-    }
-    let x_36 : u32 = i;
-    let x_39 : u32 = x_7.values[(x_36 * 2u)];
-    let x_40 : u32 = i;
-    if ((x_39 != x_40)) {
-      x_4.result = 0;
-    }
-
-    continuing {
-      let x_45 : u32 = i;
-      i = (x_45 + bitcast<u32>(1));
-    }
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.hlsl
deleted file mode 100644
index db86fa5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,23 +0,0 @@
-RWByteAddressBuffer x_4 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u0, space0);
-
-void main_1() {
-  uint i = 0u;
-  x_4.Store(0u, asuint(1));
-  i = 0u;
-  {
-    for(; (i < 512u); i = (i + asuint(1))) {
-      const uint x_39 = x_7.Load((4u * (i * 2u)));
-      if ((x_39 != i)) {
-        x_4.Store(0u, asuint(0));
-      }
-    }
-  }
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void main() {
-  main_1();
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.msl
deleted file mode 100644
index c05e29d..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct Buf1 {
-  /* 0x0000 */ int result;
-};
-struct Buf0 {
-  /* 0x0000 */ uint values[1];
-};
-
-void main_1(device Buf1& x_4, device Buf0& x_7) {
-  uint i = 0u;
-  x_4.result = 1;
-  i = 0u;
-  while (true) {
-    uint const x_33 = i;
-    if ((x_33 < 512u)) {
-    } else {
-      break;
-    }
-    uint const x_36 = i;
-    uint const x_39 = x_7.values[(x_36 * 2u)];
-    uint const x_40 = i;
-    if ((x_39 != x_40)) {
-      x_4.result = 0;
-    }
-    {
-      uint const x_45 = i;
-      i = (x_45 + as_type<uint>(1));
-    }
-  }
-  return;
-}
-
-kernel void tint_symbol(device Buf1& x_4 [[buffer(0)]], device Buf0& x_7 [[buffer(1)]]) {
-  main_1(x_4, x_7);
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.spvasm
deleted file mode 100644
index 9b18e23..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,96 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 50
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main"
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %Buf1 "Buf1"
-               OpMemberName %Buf1 0 "result"
-               OpName %x_4 "x_4"
-               OpName %Buf0 "Buf0"
-               OpMemberName %Buf0 0 "values"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %i "i"
-               OpName %main "main"
-               OpDecorate %Buf1 Block
-               OpMemberDecorate %Buf1 0 Offset 0
-               OpDecorate %x_4 DescriptorSet 0
-               OpDecorate %x_4 Binding 1
-               OpDecorate %Buf0 Block
-               OpMemberDecorate %Buf0 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 0
-        %int = OpTypeInt 32 1
-       %Buf1 = OpTypeStruct %int
-%_ptr_StorageBuffer_Buf1 = OpTypePointer StorageBuffer %Buf1
-        %x_4 = OpVariable %_ptr_StorageBuffer_Buf1 StorageBuffer
-       %uint = OpTypeInt 32 0
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-       %Buf0 = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_Buf0 = OpTypePointer StorageBuffer %Buf0
-        %x_7 = OpVariable %_ptr_StorageBuffer_Buf0 StorageBuffer
-       %void = OpTypeVoid
-         %10 = OpTypeFunction %void
-%_ptr_Function_uint = OpTypePointer Function %uint
-         %16 = OpConstantNull %uint
-     %uint_0 = OpConstant %uint 0
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-      %int_1 = OpConstant %int 1
-   %uint_512 = OpConstant %uint 512
-       %bool = OpTypeBool
-     %uint_2 = OpConstant %uint 2
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-      %int_0 = OpConstant %int 0
-     %main_1 = OpFunction %void None %10
-         %13 = OpLabel
-          %i = OpVariable %_ptr_Function_uint Function %16
-         %19 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %19 %int_1
-               OpStore %i %uint_0
-               OpBranch %21
-         %21 = OpLabel
-               OpLoopMerge %22 %23 None
-               OpBranch %24
-         %24 = OpLabel
-         %25 = OpLoad %uint %i
-         %27 = OpULessThan %bool %25 %uint_512
-               OpSelectionMerge %29 None
-               OpBranchConditional %27 %30 %31
-         %30 = OpLabel
-               OpBranch %29
-         %31 = OpLabel
-               OpBranch %22
-         %29 = OpLabel
-         %32 = OpLoad %uint %i
-         %34 = OpIMul %uint %32 %uint_2
-         %36 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %34
-         %37 = OpLoad %uint %36
-         %38 = OpLoad %uint %i
-         %39 = OpINotEqual %bool %37 %38
-               OpSelectionMerge %40 None
-               OpBranchConditional %39 %41 %40
-         %41 = OpLabel
-         %42 = OpAccessChain %_ptr_StorageBuffer_int %x_4 %uint_0
-               OpStore %42 %int_0
-               OpBranch %40
-         %40 = OpLabel
-               OpBranch %23
-         %23 = OpLabel
-         %44 = OpLoad %uint %i
-         %45 = OpBitcast %uint %int_1
-         %46 = OpIAdd %uint %44 %45
-               OpStore %i %46
-               OpBranch %21
-         %22 = OpLabel
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %10
-         %48 = OpLabel
-         %49 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.wgsl
deleted file mode 100644
index 8c7af0e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/arraylength/array-stride-larger-than-element-size/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,45 +0,0 @@
-[[block]]
-struct Buf1 {
-  result : i32;
-};
-
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct Buf0 {
-  values : RTArr;
-};
-
-[[group(0), binding(1)]] var<storage, read_write> x_4 : Buf1;
-
-[[group(0), binding(0)]] var<storage, read_write> x_7 : Buf0;
-
-fn main_1() {
-  var i : u32;
-  x_4.result = 1;
-  i = 0u;
-  loop {
-    let x_33 : u32 = i;
-    if ((x_33 < 512u)) {
-    } else {
-      break;
-    }
-    let x_36 : u32 = i;
-    let x_39 : u32 = x_7.values[(x_36 * 2u)];
-    let x_40 : u32 = i;
-    if ((x_39 != x_40)) {
-      x_4.result = 0;
-    }
-
-    continuing {
-      let x_45 : u32 = i;
-      i = (x_45 + bitcast<u32>(1));
-    }
-  }
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main() {
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.hlsl
deleted file mode 100644
index 9647507..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_2.x;
-  const uint x_23 = x_5.Load((4u * x_21));
-  const uint x_25 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(((asint(x_23) > asint(x_25)) ? 1u : 0u)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.msl
deleted file mode 100644
index 05c7a31..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_5.field0[x_21];
-  uint const x_25 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) > as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.spvasm
deleted file mode 100644
index 99b735b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-         %35 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSGreaterThan %bool %29 %31
-         %28 = OpSelect %uint %32 %uint_1 %uint_0
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %35
-  %x_2_param = OpFunctionParameter %v3uint
-         %38 = OpLabel
-               OpStore %x_2 %x_2_param
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %41 = OpLabel
-         %43 = OpLoad %v3uint %x_2_param_1
-         %42 = OpFunctionCall %void %main_inner %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.wgsl
deleted file mode 100644
index b5c093a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_2.x;
-  let x_23 : u32 = x_5.field0[x_21];
-  let x_25 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (bitcast<i32>(x_23) > bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.hlsl
deleted file mode 100644
index 9647507..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_2.x;
-  const uint x_23 = x_5.Load((4u * x_21));
-  const uint x_25 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(((asint(x_23) > asint(x_25)) ? 1u : 0u)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.msl
deleted file mode 100644
index 05c7a31..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_5.field0[x_21];
-  uint const x_25 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) > as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.spvasm
deleted file mode 100644
index 99b735b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-         %35 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSGreaterThan %bool %29 %31
-         %28 = OpSelect %uint %32 %uint_1 %uint_0
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %35
-  %x_2_param = OpFunctionParameter %v3uint
-         %38 = OpLabel
-               OpStore %x_2 %x_2_param
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %41 = OpLabel
-         %43 = OpLoad %v3uint %x_2_param_1
-         %42 = OpFunctionCall %void %main_inner %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.wgsl
deleted file mode 100644
index b5c093a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_2.x;
-  let x_23 : u32 = x_5.field0[x_21];
-  let x_25 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (bitcast<i32>(x_23) > bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.hlsl
deleted file mode 100644
index 5eaf81f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_2.x;
-  const uint x_23 = x_5.Load((4u * x_21));
-  const uint x_25 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(((asint(x_23) >= asint(x_25)) ? 1u : 0u)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.msl
deleted file mode 100644
index 0620282..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_5.field0[x_21];
-  uint const x_25 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) >= as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.spvasm
deleted file mode 100644
index 50ed035..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-         %35 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSGreaterThanEqual %bool %29 %31
-         %28 = OpSelect %uint %32 %uint_1 %uint_0
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %35
-  %x_2_param = OpFunctionParameter %v3uint
-         %38 = OpLabel
-               OpStore %x_2 %x_2_param
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %41 = OpLabel
-         %43 = OpLoad %v3uint %x_2_param_1
-         %42 = OpFunctionCall %void %main_inner %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.wgsl
deleted file mode 100644
index 4aba7ac..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_2.x;
-  let x_23 : u32 = x_5.field0[x_21];
-  let x_25 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (bitcast<i32>(x_23) >= bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.hlsl
deleted file mode 100644
index 5eaf81f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_2.x;
-  const uint x_23 = x_5.Load((4u * x_21));
-  const uint x_25 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(((asint(x_23) >= asint(x_25)) ? 1u : 0u)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.msl
deleted file mode 100644
index 0620282..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_5.field0[x_21];
-  uint const x_25 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) >= as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.spvasm
deleted file mode 100644
index 50ed035..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-         %35 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSGreaterThanEqual %bool %29 %31
-         %28 = OpSelect %uint %32 %uint_1 %uint_0
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %35
-  %x_2_param = OpFunctionParameter %v3uint
-         %38 = OpLabel
-               OpStore %x_2 %x_2_param
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %41 = OpLabel
-         %43 = OpLoad %v3uint %x_2_param_1
-         %42 = OpFunctionCall %void %main_inner %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.wgsl
deleted file mode 100644
index 4aba7ac..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_2.x;
-  let x_23 : u32 = x_5.field0[x_21];
-  let x_25 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (bitcast<i32>(x_23) >= bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.hlsl
deleted file mode 100644
index 4523f9a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_2.x;
-  const uint x_23 = x_5.Load((4u * x_21));
-  const uint x_25 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(((asint(x_23) < asint(x_25)) ? 1u : 0u)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.msl
deleted file mode 100644
index 5ca55a5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_5.field0[x_21];
-  uint const x_25 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) < as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.spvasm
deleted file mode 100644
index c6e2686..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-         %35 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSLessThan %bool %29 %31
-         %28 = OpSelect %uint %32 %uint_1 %uint_0
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %35
-  %x_2_param = OpFunctionParameter %v3uint
-         %38 = OpLabel
-               OpStore %x_2 %x_2_param
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %41 = OpLabel
-         %43 = OpLoad %v3uint %x_2_param_1
-         %42 = OpFunctionCall %void %main_inner %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.wgsl
deleted file mode 100644
index c8fe707..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_2.x;
-  let x_23 : u32 = x_5.field0[x_21];
-  let x_25 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (bitcast<i32>(x_23) < bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.hlsl
deleted file mode 100644
index 4523f9a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_2.x;
-  const uint x_23 = x_5.Load((4u * x_21));
-  const uint x_25 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(((asint(x_23) < asint(x_25)) ? 1u : 0u)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.msl
deleted file mode 100644
index 5ca55a5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_5.field0[x_21];
-  uint const x_25 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) < as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.spvasm
deleted file mode 100644
index c6e2686..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-         %35 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSLessThan %bool %29 %31
-         %28 = OpSelect %uint %32 %uint_1 %uint_0
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %35
-  %x_2_param = OpFunctionParameter %v3uint
-         %38 = OpLabel
-               OpStore %x_2 %x_2_param
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %41 = OpLabel
-         %43 = OpLoad %v3uint %x_2_param_1
-         %42 = OpFunctionCall %void %main_inner %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.wgsl
deleted file mode 100644
index c8fe707..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_2.x;
-  let x_23 : u32 = x_5.field0[x_21];
-  let x_25 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (bitcast<i32>(x_23) < bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.hlsl
deleted file mode 100644
index 5a28ab5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_2.x;
-  const uint x_23 = x_5.Load((4u * x_21));
-  const uint x_25 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(((asint(x_23) <= asint(x_25)) ? 1u : 0u)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.msl
deleted file mode 100644
index 6e1788b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_5.field0[x_21];
-  uint const x_25 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) <= as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.spvasm
deleted file mode 100644
index 6590d65..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-         %35 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSLessThanEqual %bool %29 %31
-         %28 = OpSelect %uint %32 %uint_1 %uint_0
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %35
-  %x_2_param = OpFunctionParameter %v3uint
-         %38 = OpLabel
-               OpStore %x_2 %x_2_param
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %41 = OpLabel
-         %43 = OpLoad %v3uint %x_2_param_1
-         %42 = OpFunctionCall %void %main_inner %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.wgsl
deleted file mode 100644
index a8c97bf..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_2.x;
-  let x_23 : u32 = x_5.field0[x_21];
-  let x_25 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (bitcast<i32>(x_23) <= bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.hlsl
deleted file mode 100644
index 5a28ab5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_2.x;
-  const uint x_23 = x_5.Load((4u * x_21));
-  const uint x_25 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(((asint(x_23) <= asint(x_25)) ? 1u : 0u)));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.msl
deleted file mode 100644
index 6e1788b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_5.field0[x_21];
-  uint const x_25 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) <= as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.spvasm
deleted file mode 100644
index 6590d65..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,81 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-       %bool = OpTypeBool
-     %uint_1 = OpConstant %uint 1
-         %35 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSLessThanEqual %bool %29 %31
-         %28 = OpSelect %uint %32 %uint_1 %uint_0
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %35
-  %x_2_param = OpFunctionParameter %v3uint
-         %38 = OpLabel
-               OpStore %x_2 %x_2_param
-         %39 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %41 = OpLabel
-         %43 = OpLoad %v3uint %x_2_param_1
-         %42 = OpFunctionCall %void %main_inner %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.wgsl
deleted file mode 100644
index a8c97bf..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_2.x;
-  let x_23 : u32 = x_5.field0[x_21];
-  let x_25 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = select(0u, 1u, (bitcast<i32>(x_23) <= bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index c13ebb0..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-RWByteAddressBuffer x_8 : register(u2, space0);
-RWByteAddressBuffer x_9 : register(u3, space0);
-
-void main_1() {
-  const uint x_26 = x_3.x;
-  const int x_28 = asint(x_6.Load((4u * x_26)));
-  const int x_30 = asint(x_7.Load((4u * x_26)));
-  const int x_32 = asint(x_8.Load((4u * x_26)));
-  x_9.Store((4u * x_26), asuint(asint(clamp(asuint(x_28), asuint(x_30), asuint(x_32)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.msl
deleted file mode 100644
index 128a186..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ int field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, device S& x_8, device S& x_9, thread uint3* const tint_symbol_1) {
-  uint const x_26 = (*(tint_symbol_1)).x;
-  int const x_28 = x_6.field0[x_26];
-  int const x_30 = x_7.field0[x_26];
-  int const x_32 = x_8.field0[x_26];
-  x_9.field0[x_26] = as_type<int>(clamp(as_type<uint>(x_28), as_type<uint>(x_30), as_type<uint>(x_32)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, device S& x_8, device S& x_9, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, x_8, x_9, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]], device S& x_8 [[buffer(2)]], device S& x_9 [[buffer(3)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_8, x_9, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ecaadcb..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 3
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-        %int = OpTypeInt 32 1
-%_runtimearr_int = OpTypeRuntimeArray %int
-          %S = OpTypeStruct %_runtimearr_int
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_8 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_9 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %38 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-         %22 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %23 = OpLoad %uint %22
-         %25 = OpAccessChain %_ptr_StorageBuffer_int %x_6 %uint_0 %23
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_int %x_7 %uint_0 %23
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_StorageBuffer_int %x_8 %uint_0 %23
-         %30 = OpLoad %int %29
-         %31 = OpAccessChain %_ptr_StorageBuffer_int %x_9 %uint_0 %23
-         %35 = OpBitcast %uint %26
-         %36 = OpBitcast %uint %28
-         %37 = OpBitcast %uint %30
-         %33 = OpExtInst %uint %34 UClamp %35 %36 %37
-         %32 = OpBitcast %int %33
-               OpStore %31 %32
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %38
-  %x_3_param = OpFunctionParameter %v3uint
-         %41 = OpLabel
-               OpStore %x_3 %x_3_param
-         %42 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %44 = OpLabel
-         %46 = OpLoad %v3uint %x_3_param_1
-         %45 = OpFunctionCall %void %main_inner %46
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index d03857b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
-
-[[group(0), binding(3)]] var<storage, read_write> x_9 : S;
-
-fn main_1() {
-  let x_26 : u32 = x_3.x;
-  let x_28 : i32 = x_6.field0[x_26];
-  let x_30 : i32 = x_7.field0[x_26];
-  let x_32 : i32 = x_8.field0[x_26];
-  x_9.field0[x_26] = bitcast<i32>(clamp(bitcast<u32>(x_28), bitcast<u32>(x_30), bitcast<u32>(x_32)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index c13ebb0..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-RWByteAddressBuffer x_8 : register(u2, space0);
-RWByteAddressBuffer x_9 : register(u3, space0);
-
-void main_1() {
-  const uint x_26 = x_3.x;
-  const int x_28 = asint(x_6.Load((4u * x_26)));
-  const int x_30 = asint(x_7.Load((4u * x_26)));
-  const int x_32 = asint(x_8.Load((4u * x_26)));
-  x_9.Store((4u * x_26), asuint(asint(clamp(asuint(x_28), asuint(x_30), asuint(x_32)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.msl
deleted file mode 100644
index 128a186..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ int field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, device S& x_8, device S& x_9, thread uint3* const tint_symbol_1) {
-  uint const x_26 = (*(tint_symbol_1)).x;
-  int const x_28 = x_6.field0[x_26];
-  int const x_30 = x_7.field0[x_26];
-  int const x_32 = x_8.field0[x_26];
-  x_9.field0[x_26] = as_type<int>(clamp(as_type<uint>(x_28), as_type<uint>(x_30), as_type<uint>(x_32)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, device S& x_8, device S& x_9, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, x_8, x_9, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]], device S& x_8 [[buffer(2)]], device S& x_9 [[buffer(3)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_8, x_9, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ecaadcb..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 3
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-        %int = OpTypeInt 32 1
-%_runtimearr_int = OpTypeRuntimeArray %int
-          %S = OpTypeStruct %_runtimearr_int
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_8 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_9 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-         %38 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-         %22 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %23 = OpLoad %uint %22
-         %25 = OpAccessChain %_ptr_StorageBuffer_int %x_6 %uint_0 %23
-         %26 = OpLoad %int %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_int %x_7 %uint_0 %23
-         %28 = OpLoad %int %27
-         %29 = OpAccessChain %_ptr_StorageBuffer_int %x_8 %uint_0 %23
-         %30 = OpLoad %int %29
-         %31 = OpAccessChain %_ptr_StorageBuffer_int %x_9 %uint_0 %23
-         %35 = OpBitcast %uint %26
-         %36 = OpBitcast %uint %28
-         %37 = OpBitcast %uint %30
-         %33 = OpExtInst %uint %34 UClamp %35 %36 %37
-         %32 = OpBitcast %int %33
-               OpStore %31 %32
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %38
-  %x_3_param = OpFunctionParameter %v3uint
-         %41 = OpLabel
-               OpStore %x_3 %x_3_param
-         %42 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %44 = OpLabel
-         %46 = OpLoad %v3uint %x_3_param_1
-         %45 = OpFunctionCall %void %main_inner %46
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index d03857b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_int_uclamp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
-
-[[group(0), binding(3)]] var<storage, read_write> x_9 : S;
-
-fn main_1() {
-  let x_26 : u32 = x_3.x;
-  let x_28 : i32 = x_6.field0[x_26];
-  let x_30 : i32 = x_7.field0[x_26];
-  let x_32 : i32 = x_8.field0[x_26];
-  x_9.field0[x_26] = bitcast<i32>(clamp(bitcast<u32>(x_28), bitcast<u32>(x_30), bitcast<u32>(x_32)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 86f9413..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-
-void main_1() {
-  const uint x_21 = x_3.x;
-  const uint x_23 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(asuint(abs(asint(x_23)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.msl
deleted file mode 100644
index e2a3991..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_6.field0[x_21];
-  x_7.field0[x_21] = as_type<uint>(abs(as_type<int>(x_23)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 53216ba..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %30 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-         %19 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %20 = OpLoad %uint %19
-         %22 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %20
-         %23 = OpLoad %uint %22
-         %24 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %20
-         %29 = OpBitcast %int %23
-         %26 = OpExtInst %int %28 SAbs %29
-         %25 = OpBitcast %uint %26
-               OpStore %24 %25
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %30
-  %x_3_param = OpFunctionParameter %v3uint
-         %33 = OpLabel
-               OpStore %x_3 %x_3_param
-         %34 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %36 = OpLabel
-         %38 = OpLoad %v3uint %x_3_param_1
-         %37 = OpFunctionCall %void %main_inner %38
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 52b1532..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_3.x;
-  let x_23 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = bitcast<u32>(abs(bitcast<i32>(x_23)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 86f9413..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-
-void main_1() {
-  const uint x_21 = x_3.x;
-  const uint x_23 = x_6.Load((4u * x_21));
-  x_7.Store((4u * x_21), asuint(asuint(abs(asint(x_23)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.msl
deleted file mode 100644
index e2a3991..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_6.field0[x_21];
-  x_7.field0[x_21] = as_type<uint>(abs(as_type<int>(x_23)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 53216ba..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 39
-; Schema: 0
-               OpCapability Shader
-         %28 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %30 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-         %19 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %20 = OpLoad %uint %19
-         %22 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %20
-         %23 = OpLoad %uint %22
-         %24 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %20
-         %29 = OpBitcast %int %23
-         %26 = OpExtInst %int %28 SAbs %29
-         %25 = OpBitcast %uint %26
-               OpStore %24 %25
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %30
-  %x_3_param = OpFunctionParameter %v3uint
-         %33 = OpLabel
-               OpStore %x_3 %x_3_param
-         %34 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %36 = OpLabel
-         %38 = OpLoad %v3uint %x_3_param_1
-         %37 = OpFunctionCall %void %main_inner %38
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 52b1532..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sabs/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_3.x;
-  let x_23 : u32 = x_6.field0[x_21];
-  x_7.field0[x_21] = bitcast<u32>(abs(bitcast<i32>(x_23)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 4a2880e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-RWByteAddressBuffer x_8 : register(u2, space0);
-RWByteAddressBuffer x_9 : register(u3, space0);
-
-void main_1() {
-  const uint x_23 = x_3.x;
-  const uint x_25 = x_6.Load((4u * x_23));
-  const uint x_27 = x_7.Load((4u * x_23));
-  const uint x_29 = x_8.Load((4u * x_23));
-  x_9.Store((4u * x_23), asuint(asuint(clamp(asint(x_25), asint(x_27), asint(x_29)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.msl
deleted file mode 100644
index ecdf99e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, device S& x_8, device S& x_9, thread uint3* const tint_symbol_1) {
-  uint const x_23 = (*(tint_symbol_1)).x;
-  uint const x_25 = x_6.field0[x_23];
-  uint const x_27 = x_7.field0[x_23];
-  uint const x_29 = x_8.field0[x_23];
-  x_9.field0[x_23] = as_type<uint>(clamp(as_type<int>(x_25), as_type<int>(x_27), as_type<int>(x_29)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, device S& x_8, device S& x_9, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, x_8, x_9, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]], device S& x_8 [[buffer(2)]], device S& x_9 [[buffer(3)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_8, x_9, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 1453ca0..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 3
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_8 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_9 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %38 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %21 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %22 = OpLoad %uint %21
-         %24 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %22
-         %25 = OpLoad %uint %24
-         %26 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %22
-         %27 = OpLoad %uint %26
-         %28 = OpAccessChain %_ptr_StorageBuffer_uint %x_8 %uint_0 %22
-         %29 = OpLoad %uint %28
-         %30 = OpAccessChain %_ptr_StorageBuffer_uint %x_9 %uint_0 %22
-         %35 = OpBitcast %int %25
-         %36 = OpBitcast %int %27
-         %37 = OpBitcast %int %29
-         %32 = OpExtInst %int %34 SClamp %35 %36 %37
-         %31 = OpBitcast %uint %32
-               OpStore %30 %31
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %38
-  %x_3_param = OpFunctionParameter %v3uint
-         %41 = OpLabel
-               OpStore %x_3 %x_3_param
-         %42 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %44 = OpLabel
-         %46 = OpLoad %v3uint %x_3_param_1
-         %45 = OpFunctionCall %void %main_inner %46
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index e582903..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
-
-[[group(0), binding(3)]] var<storage, read_write> x_9 : S;
-
-fn main_1() {
-  let x_23 : u32 = x_3.x;
-  let x_25 : u32 = x_6.field0[x_23];
-  let x_27 : u32 = x_7.field0[x_23];
-  let x_29 : u32 = x_8.field0[x_23];
-  x_9.field0[x_23] = bitcast<u32>(clamp(bitcast<i32>(x_25), bitcast<i32>(x_27), bitcast<i32>(x_29)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 4a2880e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,29 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-RWByteAddressBuffer x_8 : register(u2, space0);
-RWByteAddressBuffer x_9 : register(u3, space0);
-
-void main_1() {
-  const uint x_23 = x_3.x;
-  const uint x_25 = x_6.Load((4u * x_23));
-  const uint x_27 = x_7.Load((4u * x_23));
-  const uint x_29 = x_8.Load((4u * x_23));
-  x_9.Store((4u * x_23), asuint(asuint(clamp(asint(x_25), asint(x_27), asint(x_29)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.msl
deleted file mode 100644
index ecdf99e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,27 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, device S& x_8, device S& x_9, thread uint3* const tint_symbol_1) {
-  uint const x_23 = (*(tint_symbol_1)).x;
-  uint const x_25 = x_6.field0[x_23];
-  uint const x_27 = x_7.field0[x_23];
-  uint const x_29 = x_8.field0[x_23];
-  x_9.field0[x_23] = as_type<uint>(clamp(as_type<int>(x_25), as_type<int>(x_27), as_type<int>(x_29)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, device S& x_8, device S& x_9, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, x_8, x_9, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]], device S& x_8 [[buffer(2)]], device S& x_9 [[buffer(3)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_8, x_9, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 1453ca0..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,87 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 47
-; Schema: 0
-               OpCapability Shader
-         %34 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %x_9 "x_9"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-               OpDecorate %x_9 DescriptorSet 0
-               OpDecorate %x_9 Binding 3
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_8 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_9 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %15 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %38 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %15
-         %18 = OpLabel
-         %21 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %22 = OpLoad %uint %21
-         %24 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %22
-         %25 = OpLoad %uint %24
-         %26 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %22
-         %27 = OpLoad %uint %26
-         %28 = OpAccessChain %_ptr_StorageBuffer_uint %x_8 %uint_0 %22
-         %29 = OpLoad %uint %28
-         %30 = OpAccessChain %_ptr_StorageBuffer_uint %x_9 %uint_0 %22
-         %35 = OpBitcast %int %25
-         %36 = OpBitcast %int %27
-         %37 = OpBitcast %int %29
-         %32 = OpExtInst %int %34 SClamp %35 %36 %37
-         %31 = OpBitcast %uint %32
-               OpStore %30 %31
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %38
-  %x_3_param = OpFunctionParameter %v3uint
-         %41 = OpLabel
-               OpStore %x_3 %x_3_param
-         %42 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %15
-         %44 = OpLabel
-         %46 = OpLoad %v3uint %x_3_param_1
-         %45 = OpFunctionCall %void %main_inner %46
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index e582903..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_sclamp/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,31 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
-
-[[group(0), binding(3)]] var<storage, read_write> x_9 : S;
-
-fn main_1() {
-  let x_23 : u32 = x_3.x;
-  let x_25 : u32 = x_6.field0[x_23];
-  let x_27 : u32 = x_7.field0[x_23];
-  let x_29 : u32 = x_8.field0[x_23];
-  x_9.field0[x_23] = bitcast<u32>(clamp(bitcast<i32>(x_25), bitcast<i32>(x_27), bitcast<i32>(x_29)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 60e8412..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-RWByteAddressBuffer x_8 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_3.x;
-  const uint x_23 = x_6.Load((4u * x_21));
-  const uint x_25 = x_7.Load((4u * x_21));
-  x_8.Store((4u * x_21), asuint(asuint(max(asint(x_23), asint(x_25)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.msl
deleted file mode 100644
index f31bb6f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, device S& x_8, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_6.field0[x_21];
-  uint const x_25 = x_7.field0[x_21];
-  x_8.field0[x_21] = as_type<uint>(max(as_type<int>(x_23), as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, device S& x_8, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, x_8, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]], device S& x_8 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_8, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index a2d9363..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-         %31 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_8 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %34 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_8 %uint_0 %21
-         %32 = OpBitcast %int %24
-         %33 = OpBitcast %int %26
-         %29 = OpExtInst %int %31 SMax %32 %33
-         %28 = OpBitcast %uint %29
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %34
-  %x_3_param = OpFunctionParameter %v3uint
-         %37 = OpLabel
-               OpStore %x_3 %x_3_param
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %40 = OpLabel
-         %42 = OpLoad %v3uint %x_3_param_1
-         %41 = OpFunctionCall %void %main_inner %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 883eb2a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_3.x;
-  let x_23 : u32 = x_6.field0[x_21];
-  let x_25 : u32 = x_7.field0[x_21];
-  x_8.field0[x_21] = bitcast<u32>(max(bitcast<i32>(x_23), bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 60e8412..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-RWByteAddressBuffer x_8 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_3.x;
-  const uint x_23 = x_6.Load((4u * x_21));
-  const uint x_25 = x_7.Load((4u * x_21));
-  x_8.Store((4u * x_21), asuint(asuint(max(asint(x_23), asint(x_25)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.msl
deleted file mode 100644
index f31bb6f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, device S& x_8, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_6.field0[x_21];
-  uint const x_25 = x_7.field0[x_21];
-  x_8.field0[x_21] = as_type<uint>(max(as_type<int>(x_23), as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, device S& x_8, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, x_8, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]], device S& x_8 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_8, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index a2d9363..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-         %31 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_8 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %34 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_8 %uint_0 %21
-         %32 = OpBitcast %int %24
-         %33 = OpBitcast %int %26
-         %29 = OpExtInst %int %31 SMax %32 %33
-         %28 = OpBitcast %uint %29
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %34
-  %x_3_param = OpFunctionParameter %v3uint
-         %37 = OpLabel
-               OpStore %x_3 %x_3_param
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %40 = OpLabel
-         %42 = OpLoad %v3uint %x_3_param_1
-         %41 = OpFunctionCall %void %main_inner %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 883eb2a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smax/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_3.x;
-  let x_23 : u32 = x_6.field0[x_21];
-  let x_25 : u32 = x_7.field0[x_21];
-  x_8.field0[x_21] = bitcast<u32>(max(bitcast<i32>(x_23), bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 00a6492..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-RWByteAddressBuffer x_8 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_3.x;
-  const uint x_23 = x_6.Load((4u * x_21));
-  const uint x_25 = x_7.Load((4u * x_21));
-  x_8.Store((4u * x_21), asuint(asuint(min(asint(x_23), asint(x_25)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.msl
deleted file mode 100644
index 2eb6a5d..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, device S& x_8, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_6.field0[x_21];
-  uint const x_25 = x_7.field0[x_21];
-  x_8.field0[x_21] = as_type<uint>(min(as_type<int>(x_23), as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, device S& x_8, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, x_8, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]], device S& x_8 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_8, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 35ca746..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-         %31 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_8 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %34 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_8 %uint_0 %21
-         %32 = OpBitcast %int %24
-         %33 = OpBitcast %int %26
-         %29 = OpExtInst %int %31 SMin %32 %33
-         %28 = OpBitcast %uint %29
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %34
-  %x_3_param = OpFunctionParameter %v3uint
-         %37 = OpLabel
-               OpStore %x_3 %x_3_param
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %40 = OpLabel
-         %42 = OpLoad %v3uint %x_3_param_1
-         %41 = OpFunctionCall %void %main_inner %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 93b1988..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_3.x;
-  let x_23 : u32 = x_6.field0[x_21];
-  let x_25 : u32 = x_7.field0[x_21];
-  x_8.field0[x_21] = bitcast<u32>(min(bitcast<i32>(x_23), bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 00a6492..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_3 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_6 : register(u0, space0);
-RWByteAddressBuffer x_7 : register(u1, space0);
-RWByteAddressBuffer x_8 : register(u2, space0);
-
-void main_1() {
-  const uint x_21 = x_3.x;
-  const uint x_23 = x_6.Load((4u * x_21));
-  const uint x_25 = x_7.Load((4u * x_21));
-  x_8.Store((4u * x_21), asuint(asuint(min(asint(x_23), asint(x_25)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_3_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_3_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.msl
deleted file mode 100644
index 2eb6a5d..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_6, device S& x_7, device S& x_8, thread uint3* const tint_symbol_1) {
-  uint const x_21 = (*(tint_symbol_1)).x;
-  uint const x_23 = x_6.field0[x_21];
-  uint const x_25 = x_7.field0[x_21];
-  x_8.field0[x_21] = as_type<uint>(min(as_type<int>(x_23), as_type<int>(x_25)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_6, device S& x_7, device S& x_8, uint3 x_3_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_3_param;
-  main_1(x_6, x_7, x_8, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_3_param [[thread_position_in_grid]], device S& x_6 [[buffer(0)]], device S& x_7 [[buffer(1)]], device S& x_8 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_6, x_7, x_8, x_3_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 35ca746..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,80 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 43
-; Schema: 0
-               OpCapability Shader
-         %31 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_3_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_3 "x_3"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %x_8 "x_8"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 0
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 1
-               OpDecorate %x_8 DescriptorSet 0
-               OpDecorate %x_8 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_3_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_3 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_8 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %34 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_3 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_8 %uint_0 %21
-         %32 = OpBitcast %int %24
-         %33 = OpBitcast %int %26
-         %29 = OpExtInst %int %31 SMin %32 %33
-         %28 = OpBitcast %uint %29
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %34
-  %x_3_param = OpFunctionParameter %v3uint
-         %37 = OpLabel
-               OpStore %x_3 %x_3_param
-         %38 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %40 = OpLabel
-         %42 = OpLoad %v3uint %x_3_param_1
-         %41 = OpFunctionCall %void %main_inner %42
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 93b1988..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/glsl_uint_smin/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_3 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_7 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_8 : S;
-
-fn main_1() {
-  let x_21 : u32 = x_3.x;
-  let x_23 : u32 = x_6.field0[x_21];
-  let x_25 : u32 = x_7.field0[x_21];
-  x_8.field0[x_21] = bitcast<u32>(min(bitcast<i32>(x_23), bitcast<i32>(x_25)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_3_param : vec3<u32>) {
-  x_3 = x_3_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f049f3f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_20 = x_2.x;
-  const uint x_22 = x_5.Load((4u * x_20));
-  const uint x_24 = x_6.Load((4u * x_20));
-  x_7.Store((4u * x_20), asuint(asuint((asint(x_22) / asint(x_24)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.msl
deleted file mode 100644
index 9ecbc0f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_20 = (*(tint_symbol_1)).x;
-  uint const x_22 = x_5.field0[x_20];
-  uint const x_24 = x_6.field0[x_20];
-  x_7.field0[x_20] = as_type<uint>((as_type<int>(x_22) / as_type<int>(x_24)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 34651de..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 42
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %33 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSDiv %int %29 %31
-         %28 = OpBitcast %uint %32
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %33
-  %x_2_param = OpFunctionParameter %v3uint
-         %36 = OpLabel
-               OpStore %x_2 %x_2_param
-         %37 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %39 = OpLabel
-         %41 = OpLoad %v3uint %x_2_param_1
-         %40 = OpFunctionCall %void %main_inner %41
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index c6a7af6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_20 : u32 = x_2.x;
-  let x_22 : u32 = x_5.field0[x_20];
-  let x_24 : u32 = x_6.field0[x_20];
-  x_7.field0[x_20] = bitcast<u32>((bitcast<i32>(x_22) / bitcast<i32>(x_24)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f049f3f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,27 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-RWByteAddressBuffer x_7 : register(u2, space0);
-
-void main_1() {
-  const uint x_20 = x_2.x;
-  const uint x_22 = x_5.Load((4u * x_20));
-  const uint x_24 = x_6.Load((4u * x_20));
-  x_7.Store((4u * x_20), asuint(asuint((asint(x_22) / asint(x_24)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.msl
deleted file mode 100644
index 9ecbc0f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
-  uint const x_20 = (*(tint_symbol_1)).x;
-  uint const x_22 = x_5.field0[x_20];
-  uint const x_24 = x_6.field0[x_20];
-  x_7.field0[x_20] = as_type<uint>((as_type<int>(x_22) / as_type<int>(x_24)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, x_7, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 34651de..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 42
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %x_7 "x_7"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-               OpDecorate %x_7 DescriptorSet 0
-               OpDecorate %x_7 Binding 2
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_7 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %33 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %20 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %21 = OpLoad %uint %20
-         %23 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %21
-         %24 = OpLoad %uint %23
-         %25 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %21
-         %26 = OpLoad %uint %25
-         %27 = OpAccessChain %_ptr_StorageBuffer_uint %x_7 %uint_0 %21
-         %29 = OpBitcast %int %24
-         %31 = OpBitcast %int %26
-         %32 = OpSDiv %int %29 %31
-         %28 = OpBitcast %uint %32
-               OpStore %27 %28
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %33
-  %x_2_param = OpFunctionParameter %v3uint
-         %36 = OpLabel
-               OpStore %x_2 %x_2_param
-         %37 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %39 = OpLabel
-         %41 = OpLoad %v3uint %x_2_param_1
-         %40 = OpFunctionCall %void %main_inner %41
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index c6a7af6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_sdiv/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-[[group(0), binding(2)]] var<storage, read_write> x_7 : S;
-
-fn main_1() {
-  let x_20 : u32 = x_2.x;
-  let x_22 : u32 = x_5.field0[x_20];
-  let x_24 : u32 = x_6.field0[x_20];
-  x_7.field0[x_20] = bitcast<u32>((bitcast<i32>(x_22) / bitcast<i32>(x_24)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index b99e573..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-
-void main_1() {
-  const uint x_20 = x_2.x;
-  const uint x_22 = x_5.Load((4u * x_20));
-  x_6.Store((4u * x_20), asuint(asuint(-(asint(x_22)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.msl
deleted file mode 100644
index 4e6d9bd..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, thread uint3* const tint_symbol_1) {
-  uint const x_20 = (*(tint_symbol_1)).x;
-  uint const x_22 = x_5.field0[x_20];
-  x_6.field0[x_20] = as_type<uint>(tint_unary_minus(as_type<int>(x_22)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 5bef5a6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %29 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-         %19 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %20 = OpLoad %uint %19
-         %22 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %20
-         %23 = OpLoad %uint %22
-         %24 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %20
-         %27 = OpBitcast %int %23
-         %26 = OpSNegate %int %27
-         %25 = OpBitcast %uint %26
-               OpStore %24 %25
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %29
-  %x_2_param = OpFunctionParameter %v3uint
-         %32 = OpLabel
-               OpStore %x_2 %x_2_param
-         %33 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %35 = OpLabel
-         %37 = OpLoad %v3uint %x_2_param_1
-         %36 = OpFunctionCall %void %main_inner %37
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1956524..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-fn main_1() {
-  let x_20 : u32 = x_2.x;
-  let x_22 : u32 = x_5.field0[x_20];
-  x_6.field0[x_20] = bitcast<u32>(-(bitcast<i32>(x_22)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index b99e573..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-static uint3 x_2 = uint3(0u, 0u, 0u);
-RWByteAddressBuffer x_5 : register(u0, space0);
-RWByteAddressBuffer x_6 : register(u1, space0);
-
-void main_1() {
-  const uint x_20 = x_2.x;
-  const uint x_22 = x_5.Load((4u * x_20));
-  x_6.Store((4u * x_20), asuint(asuint(-(asint(x_22)))));
-  return;
-}
-
-struct tint_symbol_1 {
-  uint3 x_2_param : SV_DispatchThreadID;
-};
-
-void main_inner(uint3 x_2_param) {
-  x_2 = x_2_param;
-  main_1();
-}
-
-[numthreads(1, 1, 1)]
-void main(tint_symbol_1 tint_symbol) {
-  main_inner(tint_symbol.x_2_param);
-  return;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.msl
deleted file mode 100644
index 4e6d9bd..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,30 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-
-int tint_unary_minus(const int v) {
-  return select(-v, v, v == -2147483648);
-}
-
-struct S {
-  /* 0x0000 */ uint field0[1];
-};
-
-void main_1(device S& x_5, device S& x_6, thread uint3* const tint_symbol_1) {
-  uint const x_20 = (*(tint_symbol_1)).x;
-  uint const x_22 = x_5.field0[x_20];
-  x_6.field0[x_20] = as_type<uint>(tint_unary_minus(as_type<int>(x_22)));
-  return;
-}
-
-void tint_symbol_inner(device S& x_5, device S& x_6, uint3 x_2_param, thread uint3* const tint_symbol_2) {
-  *(tint_symbol_2) = x_2_param;
-  main_1(x_5, x_6, tint_symbol_2);
-}
-
-kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]]) {
-  thread uint3 tint_symbol_3 = 0u;
-  tint_symbol_inner(x_5, x_6, x_2_param, &(tint_symbol_3));
-  return;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 5bef5a6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 38
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint GLCompute %main "main" %x_2_param_1
-               OpExecutionMode %main LocalSize 1 1 1
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_2 "x_2"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %x_6 "x_6"
-               OpName %main_1 "main_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn GlobalInvocationId
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_uint ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpDecorate %x_6 DescriptorSet 0
-               OpDecorate %x_6 Binding 1
-       %uint = OpTypeInt 32 0
-     %v3uint = OpTypeVector %uint 3
-%_ptr_Input_v3uint = OpTypePointer Input %v3uint
-%x_2_param_1 = OpVariable %_ptr_Input_v3uint Input
-%_ptr_Private_v3uint = OpTypePointer Private %v3uint
-          %7 = OpConstantNull %v3uint
-        %x_2 = OpVariable %_ptr_Private_v3uint Private %7
-%_runtimearr_uint = OpTypeRuntimeArray %uint
-          %S = OpTypeStruct %_runtimearr_uint
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-        %x_6 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_uint = OpTypePointer Private %uint
-%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
-        %int = OpTypeInt 32 1
-         %29 = OpTypeFunction %void %v3uint
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-         %19 = OpAccessChain %_ptr_Private_uint %x_2 %uint_0
-         %20 = OpLoad %uint %19
-         %22 = OpAccessChain %_ptr_StorageBuffer_uint %x_5 %uint_0 %20
-         %23 = OpLoad %uint %22
-         %24 = OpAccessChain %_ptr_StorageBuffer_uint %x_6 %uint_0 %20
-         %27 = OpBitcast %int %23
-         %26 = OpSNegate %int %27
-         %25 = OpBitcast %uint %26
-               OpStore %24 %25
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %void None %29
-  %x_2_param = OpFunctionParameter %v3uint
-         %32 = OpLabel
-               OpStore %x_2 %x_2_param
-         %33 = OpFunctionCall %void %main_1
-               OpReturn
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %35 = OpLabel
-         %37 = OpLoad %v3uint %x_2_param_1
-         %36 = OpFunctionCall %void %main_inner %37
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1956524..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/compute/signed_op/uint_snegate/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,25 +0,0 @@
-type RTArr = [[stride(4)]] array<u32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec3<u32>;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-[[group(0), binding(1)]] var<storage, read_write> x_6 : S;
-
-fn main_1() {
-  let x_20 : u32 = x_2.x;
-  let x_22 : u32 = x_5.field0[x_20];
-  x_6.field0[x_20] = bitcast<u32>(-(bitcast<i32>(x_22)));
-  return;
-}
-
-[[stage(compute), workgroup_size(1, 1, 1)]]
-fn main([[builtin(global_invocation_id)]] x_2_param : vec3<u32>) {
-  x_2 = x_2_param;
-  main_1();
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.hlsl
deleted file mode 100644
index 000a6ee..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float2 x_3 = float2(0.0f, 0.0f);
-static uint x_4 = 0u;
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_30 = x_3.x;
-  const float x_36 = x_3.y;
-  x_4 = (uint((((x_30 + 1.027777791f) * 18.0f) - 1.0f)) + (uint((((x_36 + 1.027777791f) * 18.0f) - 1.0f)) * 36u));
-  const float2 x_43 = x_3;
-  gl_Position = float4(x_43.x, x_43.y, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  uint x_4_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float2 x_3_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  uint x_4_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float2 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4, gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.msl
deleted file mode 100644
index 95eaa19..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.msl
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  uint x_4_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float2 x_3_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  uint x_4_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float2* const tint_symbol_5, thread uint* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float const x_30 = (*(tint_symbol_5)).x;
-  float const x_36 = (*(tint_symbol_5)).y;
-  *(tint_symbol_6) = (uint((((x_30 + 1.027777791f) * 18.0f) - 1.0f)) + (uint((((x_36 + 1.027777791f) * 18.0f) - 1.0f)) * 36u));
-  float2 const x_43 = *(tint_symbol_5);
-  *(tint_symbol_7) = float4(x_43.x, x_43.y, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float2 x_3_param, thread float2* const tint_symbol_8, thread uint* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = x_3_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_9), .gl_Position=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float2 tint_symbol_11 = 0.0f;
-  thread uint tint_symbol_12 = 0u;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.spvasm
deleted file mode 100644
index e91609f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,108 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_3_param_1 %x_4_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %x_4_1_1 Flat
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%_ptr_Input_v2float = OpTypePointer Input %v2float
-%x_3_param_1 = OpVariable %_ptr_Input_v2float Input
-       %uint = OpTypeInt 32 0
-%_ptr_Output_uint = OpTypePointer Output %uint
-          %8 = OpConstantNull %uint
-    %x_4_1_1 = OpVariable %_ptr_Output_uint Output %8
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-         %12 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %12
-%_ptr_Output_float = OpTypePointer Output %float
-         %15 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %15
-%_ptr_Private_v2float = OpTypePointer Private %v2float
-         %18 = OpConstantNull %v2float
-        %x_3 = OpVariable %_ptr_Private_v2float Private %18
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %12
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-%float_1_02777779 = OpConstant %float 1.02777779
-   %float_18 = OpConstant %float 18
-    %float_1 = OpConstant %float 1
-    %uint_36 = OpConstant %uint 36
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %uint %v4float
-         %53 = OpTypeFunction %main_out %v2float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-         %29 = OpAccessChain %_ptr_Private_float %x_3 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Private_float %x_3 %uint_1
-         %33 = OpLoad %float %32
-         %36 = OpFAdd %float %30 %float_1_02777779
-         %38 = OpFMul %float %36 %float_18
-         %40 = OpFSub %float %38 %float_1
-         %34 = OpConvertFToU %uint %40
-         %42 = OpFAdd %float %33 %float_1_02777779
-         %43 = OpFMul %float %42 %float_18
-         %44 = OpFSub %float %43 %float_1
-         %41 = OpConvertFToU %uint %44
-         %46 = OpIMul %uint %41 %uint_36
-         %47 = OpIAdd %uint %34 %46
-               OpStore %x_4 %47
-         %48 = OpLoad %v2float %x_3
-         %49 = OpCompositeExtract %float %48 0
-         %50 = OpCompositeExtract %float %48 1
-         %52 = OpCompositeConstruct %v4float %49 %50 %float_0 %float_1
-               OpStore %gl_Position %52
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-  %x_3_param = OpFunctionParameter %v2float
-         %57 = OpLabel
-               OpStore %x_3 %x_3_param
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %uint %x_4
-         %60 = OpLoad %v4float %gl_Position
-         %61 = OpCompositeConstruct %main_out %59 %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %63 = OpLabel
-         %65 = OpLoad %v2float %x_3_param_1
-         %64 = OpFunctionCall %main_out %main_inner %65
-         %66 = OpCompositeExtract %uint %64 0
-               OpStore %x_4_1_1 %66
-         %67 = OpCompositeExtract %v4float %64 1
-               OpStore %gl_Position_1 %67
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.wgsl
deleted file mode 100644
index eef9fd1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> x_3 : vec2<f32>;
-
-var<private> x_4 : u32;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_30 : f32 = x_3.x;
-  let x_36 : f32 = x_3.y;
-  x_4 = (u32((((x_30 + 1.027777791) * 18.0) - 1.0)) + (u32((((x_36 + 1.027777791) * 18.0) - 1.0)) * 36u));
-  let x_43 : vec2<f32> = x_3;
-  gl_Position = vec4<f32>(x_43.x, x_43.y, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : u32;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_3_param : vec2<f32>) -> main_out {
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4, gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.hlsl
deleted file mode 100644
index 000a6ee..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float2 x_3 = float2(0.0f, 0.0f);
-static uint x_4 = 0u;
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_30 = x_3.x;
-  const float x_36 = x_3.y;
-  x_4 = (uint((((x_30 + 1.027777791f) * 18.0f) - 1.0f)) + (uint((((x_36 + 1.027777791f) * 18.0f) - 1.0f)) * 36u));
-  const float2 x_43 = x_3;
-  gl_Position = float4(x_43.x, x_43.y, 0.0f, 1.0f);
-  return;
-}
-
-struct main_out {
-  uint x_4_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float2 x_3_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  uint x_4_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float2 x_3_param) {
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4, gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.msl
deleted file mode 100644
index 95eaa19..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.msl
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  uint x_4_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float2 x_3_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  uint x_4_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float2* const tint_symbol_5, thread uint* const tint_symbol_6, thread float4* const tint_symbol_7) {
-  float const x_30 = (*(tint_symbol_5)).x;
-  float const x_36 = (*(tint_symbol_5)).y;
-  *(tint_symbol_6) = (uint((((x_30 + 1.027777791f) * 18.0f) - 1.0f)) + (uint((((x_36 + 1.027777791f) * 18.0f) - 1.0f)) * 36u));
-  float2 const x_43 = *(tint_symbol_5);
-  *(tint_symbol_7) = float4(x_43.x, x_43.y, 0.0f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float2 x_3_param, thread float2* const tint_symbol_8, thread uint* const tint_symbol_9, thread float4* const tint_symbol_10) {
-  *(tint_symbol_8) = x_3_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_9), .gl_Position=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float2 tint_symbol_11 = 0.0f;
-  thread uint tint_symbol_12 = 0u;
-  thread float4 tint_symbol_13 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.spvasm
deleted file mode 100644
index e91609f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,108 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 68
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_3_param_1 %x_4_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %x_4_1_1 Flat
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v2float = OpTypeVector %float 2
-%_ptr_Input_v2float = OpTypePointer Input %v2float
-%x_3_param_1 = OpVariable %_ptr_Input_v2float Input
-       %uint = OpTypeInt 32 0
-%_ptr_Output_uint = OpTypePointer Output %uint
-          %8 = OpConstantNull %uint
-    %x_4_1_1 = OpVariable %_ptr_Output_uint Output %8
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-         %12 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %12
-%_ptr_Output_float = OpTypePointer Output %float
-         %15 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %15
-%_ptr_Private_v2float = OpTypePointer Private %v2float
-         %18 = OpConstantNull %v2float
-        %x_3 = OpVariable %_ptr_Private_v2float Private %18
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %x_4 = OpVariable %_ptr_Private_uint Private %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %12
-       %void = OpTypeVoid
-         %23 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-%float_1_02777779 = OpConstant %float 1.02777779
-   %float_18 = OpConstant %float 18
-    %float_1 = OpConstant %float 1
-    %uint_36 = OpConstant %uint 36
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %uint %v4float
-         %53 = OpTypeFunction %main_out %v2float
-     %main_1 = OpFunction %void None %23
-         %26 = OpLabel
-         %29 = OpAccessChain %_ptr_Private_float %x_3 %uint_0
-         %30 = OpLoad %float %29
-         %32 = OpAccessChain %_ptr_Private_float %x_3 %uint_1
-         %33 = OpLoad %float %32
-         %36 = OpFAdd %float %30 %float_1_02777779
-         %38 = OpFMul %float %36 %float_18
-         %40 = OpFSub %float %38 %float_1
-         %34 = OpConvertFToU %uint %40
-         %42 = OpFAdd %float %33 %float_1_02777779
-         %43 = OpFMul %float %42 %float_18
-         %44 = OpFSub %float %43 %float_1
-         %41 = OpConvertFToU %uint %44
-         %46 = OpIMul %uint %41 %uint_36
-         %47 = OpIAdd %uint %34 %46
-               OpStore %x_4 %47
-         %48 = OpLoad %v2float %x_3
-         %49 = OpCompositeExtract %float %48 0
-         %50 = OpCompositeExtract %float %48 1
-         %52 = OpCompositeConstruct %v4float %49 %50 %float_0 %float_1
-               OpStore %gl_Position %52
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %53
-  %x_3_param = OpFunctionParameter %v2float
-         %57 = OpLabel
-               OpStore %x_3 %x_3_param
-         %58 = OpFunctionCall %void %main_1
-         %59 = OpLoad %uint %x_4
-         %60 = OpLoad %v4float %gl_Position
-         %61 = OpCompositeConstruct %main_out %59 %60
-               OpReturnValue %61
-               OpFunctionEnd
-       %main = OpFunction %void None %23
-         %63 = OpLabel
-         %65 = OpLoad %v2float %x_3_param_1
-         %64 = OpFunctionCall %main_out %main_inner %65
-         %66 = OpCompositeExtract %uint %64 0
-               OpStore %x_4_1_1 %66
-         %67 = OpCompositeExtract %v4float %64 1
-               OpStore %gl_Position_1 %67
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.wgsl
deleted file mode 100644
index eef9fd1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> x_3 : vec2<f32>;
-
-var<private> x_4 : u32;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_30 : f32 = x_3.x;
-  let x_36 : f32 = x_3.y;
-  x_4 = (u32((((x_30 + 1.027777791) * 18.0) - 1.0)) + (u32((((x_36 + 1.027777791) * 18.0) - 1.0)) * 36u));
-  let x_43 : vec2<f32> = x_3;
-  gl_Position = vec4<f32>(x_43.x, x_43.y, 0.0, 1.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : u32;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_3_param : vec2<f32>) -> main_out {
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4, gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1d2fad3..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.5f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.msl
deleted file mode 100644
index 632dea0..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.5f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 36e21e1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_5 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index bf7b1a4..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.5, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1d2fad3..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.5f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.msl
deleted file mode 100644
index 632dea0..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.5f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 36e21e1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-  %float_0_5 = OpConstant %float 0.5
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_5 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index bf7b1a4..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.5, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.hlsl
deleted file mode 100644
index c8a4ba6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  gl_FragDepth = 0.300000012f;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 color_out_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color_out, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.msl
deleted file mode 100644
index 228d014..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 color_out_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_4) = 0.300000012f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.color_out_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.spvasm
deleted file mode 100644
index a9e4b3b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_out_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %color_out "color_out"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-%float_0_300000012 = OpConstant %float 0.300000012
-   %main_out = OpTypeStruct %v4float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %color_out %19
-               OpStore %gl_FragDepth %float_0_300000012
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %v4float %color_out
-         %27 = OpLoad %float %gl_FragDepth
-         %28 = OpCompositeConstruct %main_out %26 %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %32 = OpCompositeExtract %v4float %31 0
-               OpStore %color_out_1_1 %32
-         %33 = OpCompositeExtract %float %31 1
-               OpStore %gl_FragDepth_1_1 %33
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.wgsl
deleted file mode 100644
index 48a9583..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  gl_FragDepth = 0.300000012;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color_out, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.hlsl
deleted file mode 100644
index c8a4ba6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  gl_FragDepth = 0.300000012f;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 color_out_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color_out, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.msl
deleted file mode 100644
index 228d014..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 color_out_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_4) = 0.300000012f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.color_out_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.spvasm
deleted file mode 100644
index a9e4b3b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_out_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %color_out "color_out"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-%float_0_300000012 = OpConstant %float 0.300000012
-   %main_out = OpTypeStruct %v4float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %color_out %19
-               OpStore %gl_FragDepth %float_0_300000012
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %v4float %color_out
-         %27 = OpLoad %float %gl_FragDepth
-         %28 = OpCompositeConstruct %main_out %26 %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %32 = OpCompositeExtract %v4float %31 0
-               OpStore %color_out_1_1 %32
-         %33 = OpCompositeExtract %float %31 1
-               OpStore %gl_FragDepth_1_1 %33
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.wgsl
deleted file mode 100644
index 48a9583..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_equal/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  gl_FragDepth = 0.300000012;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color_out, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f0f4322..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.600000024f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.msl
deleted file mode 100644
index e57b904..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.600000024f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index ce0cee5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_600000024 = OpConstant %float 0.600000024
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_600000024 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 574d2de..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.600000024, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index f0f4322..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.600000024f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.msl
deleted file mode 100644
index e57b904..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.600000024f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index ce0cee5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_600000024 = OpConstant %float 0.600000024
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_600000024 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 574d2de..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.600000024, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.hlsl
deleted file mode 100644
index 22d54fa..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  gl_FragDepth = 0.400000006f;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 color_out_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color_out, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.msl
deleted file mode 100644
index e4a6bc2..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 color_out_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_4) = 0.400000006f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.color_out_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.spvasm
deleted file mode 100644
index 2d93057..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_out_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %color_out "color_out"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-%float_0_400000006 = OpConstant %float 0.400000006
-   %main_out = OpTypeStruct %v4float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %color_out %19
-               OpStore %gl_FragDepth %float_0_400000006
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %v4float %color_out
-         %27 = OpLoad %float %gl_FragDepth
-         %28 = OpCompositeConstruct %main_out %26 %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %32 = OpCompositeExtract %v4float %31 0
-               OpStore %color_out_1_1 %32
-         %33 = OpCompositeExtract %float %31 1
-               OpStore %gl_FragDepth_1_1 %33
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.wgsl
deleted file mode 100644
index df3c7e3..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  gl_FragDepth = 0.400000006;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color_out, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.hlsl
deleted file mode 100644
index 22d54fa..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  gl_FragDepth = 0.400000006f;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 color_out_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color_out, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.msl
deleted file mode 100644
index e4a6bc2..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 color_out_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_4) = 0.400000006f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.color_out_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.spvasm
deleted file mode 100644
index 2d93057..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_out_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %color_out "color_out"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-%float_0_400000006 = OpConstant %float 0.400000006
-   %main_out = OpTypeStruct %v4float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %color_out %19
-               OpStore %gl_FragDepth %float_0_400000006
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %v4float %color_out
-         %27 = OpLoad %float %gl_FragDepth
-         %28 = OpCompositeConstruct %main_out %26 %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %32 = OpCompositeExtract %v4float %31 0
-               OpStore %color_out_1_1 %32
-         %33 = OpCompositeExtract %float %31 1
-               OpStore %gl_FragDepth_1_1 %33
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.wgsl
deleted file mode 100644
index df3c7e3..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_greater/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  gl_FragDepth = 0.400000006;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color_out, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 557eaf1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.400000006f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.msl
deleted file mode 100644
index 46d663f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.400000006f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index b003b8e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_400000006 = OpConstant %float 0.400000006
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_400000006 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f3aec87..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.400000006, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 557eaf1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.400000006f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.msl
deleted file mode 100644
index 46d663f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.400000006f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index b003b8e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_400000006 = OpConstant %float 0.400000006
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_400000006 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f3aec87..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.400000006, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.hlsl
deleted file mode 100644
index 5c6665b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  gl_FragDepth = 0.699999988f;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 color_out_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color_out, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.msl
deleted file mode 100644
index 242a626..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 color_out_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_4) = 0.699999988f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.color_out_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.spvasm
deleted file mode 100644
index 158850c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_out_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %color_out "color_out"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-%float_0_699999988 = OpConstant %float 0.699999988
-   %main_out = OpTypeStruct %v4float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %color_out %19
-               OpStore %gl_FragDepth %float_0_699999988
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %v4float %color_out
-         %27 = OpLoad %float %gl_FragDepth
-         %28 = OpCompositeConstruct %main_out %26 %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %32 = OpCompositeExtract %v4float %31 0
-               OpStore %color_out_1_1 %32
-         %33 = OpCompositeExtract %float %31 1
-               OpStore %gl_FragDepth_1_1 %33
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.wgsl
deleted file mode 100644
index 8bf833a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  gl_FragDepth = 0.699999988;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color_out, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.hlsl
deleted file mode 100644
index 5c6665b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  gl_FragDepth = 0.699999988f;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 color_out_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color_out, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.msl
deleted file mode 100644
index 242a626..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 color_out_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_4) = 0.699999988f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.color_out_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.spvasm
deleted file mode 100644
index 158850c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_out_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %color_out "color_out"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-%float_0_699999988 = OpConstant %float 0.699999988
-   %main_out = OpTypeStruct %v4float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %color_out %19
-               OpStore %gl_FragDepth %float_0_699999988
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %v4float %color_out
-         %27 = OpLoad %float %gl_FragDepth
-         %28 = OpCompositeConstruct %main_out %26 %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %32 = OpCompositeExtract %v4float %31 0
-               OpStore %color_out_1_1 %32
-         %33 = OpCompositeExtract %float %31 1
-               OpStore %gl_FragDepth_1_1 %33
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.wgsl
deleted file mode 100644
index 8bf833a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_less_or_equal/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  gl_FragDepth = 0.699999988;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color_out, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 1efaec9..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.300000012f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.msl
deleted file mode 100644
index 08f92dc..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.300000012f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index cada7d9..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_300000012 = OpConstant %float 0.300000012
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_300000012 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 1cc00dd..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.300000012, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1efaec9..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.300000012f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.msl
deleted file mode 100644
index 08f92dc..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.300000012f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index cada7d9..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_300000012 = OpConstant %float 0.300000012
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_300000012 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 1cc00dd..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.300000012, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.hlsl
deleted file mode 100644
index 394204a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  gl_FragDepth = 0.5f;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 color_out_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color_out, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.msl
deleted file mode 100644
index 006be2c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 color_out_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_4) = 0.5f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.color_out_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.spvasm
deleted file mode 100644
index af0bf2a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_out_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %color_out "color_out"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-   %main_out = OpTypeStruct %v4float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %color_out %19
-               OpStore %gl_FragDepth %float_0_5
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %v4float %color_out
-         %27 = OpLoad %float %gl_FragDepth
-         %28 = OpCompositeConstruct %main_out %26 %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %32 = OpCompositeExtract %v4float %31 0
-               OpStore %color_out_1_1 %32
-         %33 = OpCompositeExtract %float %31 1
-               OpStore %gl_FragDepth_1_1 %33
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.wgsl
deleted file mode 100644
index 5051169..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  gl_FragDepth = 0.5;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color_out, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.hlsl
deleted file mode 100644
index 394204a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  color_out = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  gl_FragDepth = 0.5f;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 color_out_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {color_out, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.msl
deleted file mode 100644
index 006be2c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 color_out_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(1.0f, 0.0f, 0.0f, 1.0f);
-  *(tint_symbol_4) = 0.5f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.color_out_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.spvasm
deleted file mode 100644
index af0bf2a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,67 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 34
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_out_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %color_out "color_out"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %color_out_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-    %float_0 = OpConstant %float 0
-         %19 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
-  %float_0_5 = OpConstant %float 0.5
-   %main_out = OpTypeStruct %v4float %float
-         %21 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %color_out %19
-               OpStore %gl_FragDepth %float_0_5
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %21
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %main_1
-         %26 = OpLoad %v4float %color_out
-         %27 = OpLoad %float %gl_FragDepth
-         %28 = OpCompositeConstruct %main_out %26 %27
-               OpReturnValue %28
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %30 = OpLabel
-         %31 = OpFunctionCall %main_out %main_inner
-         %32 = OpCompositeExtract %v4float %31 0
-               OpStore %color_out_1_1 %32
-         %33 = OpCompositeExtract %float %31 1
-               OpStore %gl_FragDepth_1_1 %33
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.wgsl
deleted file mode 100644
index 5051169..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/early_fragment/depth_not_equal/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  color_out = vec4<f32>(1.0, 0.0, 0.0, 1.0);
-  gl_FragDepth = 0.5;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(color_out, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 7fb044e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.699999988f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.msl
deleted file mode 100644
index 98cbda3..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.699999988f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index fab5f54..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_699999988 = OpConstant %float 0.699999988
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_699999988 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 788ee5b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.699999988, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 7fb044e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.699999988f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.msl
deleted file mode 100644
index 98cbda3..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.699999988f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index fab5f54..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_699999988 = OpConstant %float 0.699999988
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_699999988 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 788ee5b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_1/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.699999988, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 6408262..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.200000003f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.msl
deleted file mode 100644
index ac1e543..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.200000003f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 4bd131f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_200000003 = OpConstant %float 0.200000003
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_200000003 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index f71b320..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.200000003, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 6408262..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float4 x_22 = position;
-  const float2 x_23 = float2(x_22.x, x_22.y);
-  gl_Position = float4(x_23.x, x_23.y, 0.200000003f, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.msl
deleted file mode 100644
index ac1e543..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_22 = *(tint_symbol_5);
-  float2 const x_23 = float2(x_22.x, x_22.y);
-  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.200000003f, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 4bd131f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,73 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-%float_0_200000003 = OpConstant %float 0.200000003
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %28 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-         %18 = OpLoad %v4float %position
-         %20 = OpCompositeExtract %float %18 0
-         %21 = OpCompositeExtract %float %18 1
-         %22 = OpCompositeConstruct %v2float %20 %21
-         %23 = OpCompositeExtract %float %22 0
-         %24 = OpCompositeExtract %float %22 1
-         %27 = OpCompositeConstruct %v4float %23 %24 %float_0_200000003 %float_1
-               OpStore %gl_Position %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %28
-%position_param = OpFunctionParameter %v4float
-         %32 = OpLabel
-               OpStore %position %position_param
-         %33 = OpFunctionCall %void %main_1
-         %34 = OpLoad %v4float %gl_Position
-         %35 = OpCompositeConstruct %main_out %34
-               OpReturnValue %35
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %37 = OpLabel
-         %39 = OpLoad %v4float %position_param_1
-         %38 = OpFunctionCall %main_out %main_inner %39
-         %40 = OpCompositeExtract %v4float %38 0
-               OpStore %gl_Position_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index f71b320..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  let x_23 : vec2<f32> = vec2<f32>(x_22.x, x_22.y);
-  gl_Position = vec4<f32>(x_23.x, x_23.y, 0.200000003, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.hlsl
deleted file mode 100644
index 9de36ca..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.300000012f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.msl
deleted file mode 100644
index 8dce2e2..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.300000012f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.spvasm
deleted file mode 100644
index 40ec065..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_300000012 = OpConstant %float 0.300000012
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_300000012
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.wgsl
deleted file mode 100644
index b6e0701..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.300000012;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.hlsl
deleted file mode 100644
index 9de36ca..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.300000012f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.msl
deleted file mode 100644
index 8dce2e2..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.300000012f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.spvasm
deleted file mode 100644
index 40ec065..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_300000012 = OpConstant %float 0.300000012
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_300000012
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.wgsl
deleted file mode 100644
index b6e0701..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthgreater_2/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.300000012;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.hlsl
deleted file mode 100644
index cba38b5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.100000001f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.msl
deleted file mode 100644
index 347959b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.100000001f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.spvasm
deleted file mode 100644
index a43363c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_100000001 = OpConstant %float 0.100000001
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_100000001
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.wgsl
deleted file mode 100644
index 9f726a7..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.100000001;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.hlsl
deleted file mode 100644
index cba38b5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.100000001f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.msl
deleted file mode 100644
index 347959b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.100000001f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.spvasm
deleted file mode 100644
index a43363c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_100000001 = OpConstant %float 0.100000001
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_100000001
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.wgsl
deleted file mode 100644
index 9f726a7..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_0/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.100000001;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.hlsl
deleted file mode 100644
index d452ed7..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.600000024f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.msl
deleted file mode 100644
index 0189aa6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.600000024f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.spvasm
deleted file mode 100644
index a04b224..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_600000024 = OpConstant %float 0.600000024
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_600000024
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.wgsl
deleted file mode 100644
index bc535ca..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.600000024;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.hlsl
deleted file mode 100644
index d452ed7..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.600000024f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.msl
deleted file mode 100644
index 0189aa6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.600000024f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.spvasm
deleted file mode 100644
index a04b224..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_600000024 = OpConstant %float 0.600000024
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_600000024
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.wgsl
deleted file mode 100644
index bc535ca..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthless_2/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.600000024;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.hlsl
deleted file mode 100644
index c913f71..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_20 = gl_FragCoord.z;
-  gl_FragDepth = x_20;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {outColor, gl_FragDepth};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.msl
deleted file mode 100644
index fa4eb0b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4, thread float* const tint_symbol_5) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float const x_20 = (*(tint_symbol_4)).z;
-  *(tint_symbol_5) = x_20;
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7, thread float* const tint_symbol_8) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_7, tint_symbol_6, tint_symbol_8);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_7), .gl_FragDepth_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.spvasm
deleted file mode 100644
index 4eb6e6e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %10
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float %float
-         %26 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-               OpStore %outColor %21
-         %24 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_2
-         %25 = OpLoad %float %24
-               OpStore %gl_FragDepth %25
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %26
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %30 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %31 = OpFunctionCall %void %main_1
-         %32 = OpLoad %v4float %outColor
-         %33 = OpLoad %float %gl_FragDepth
-         %34 = OpCompositeConstruct %main_out %32 %33
-               OpReturnValue %34
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %36 = OpLabel
-         %38 = OpLoad %v4float %gl_FragCoord_param_1
-         %37 = OpFunctionCall %main_out %main_inner %38
-         %39 = OpCompositeExtract %v4float %37 0
-               OpStore %outColor_1_1 %39
-         %40 = OpCompositeExtract %float %37 1
-               OpStore %gl_FragDepth_1_1 %40
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.wgsl
deleted file mode 100644
index 0fe24e6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_20 : f32 = gl_FragCoord.z;
-  gl_FragDepth = x_20;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.hlsl
deleted file mode 100644
index c913f71..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  const float x_20 = gl_FragCoord.z;
-  gl_FragDepth = x_20;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {outColor, gl_FragDepth};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.msl
deleted file mode 100644
index fa4eb0b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.msl
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4, thread float* const tint_symbol_5) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  float const x_20 = (*(tint_symbol_4)).z;
-  *(tint_symbol_5) = x_20;
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7, thread float* const tint_symbol_8) {
-  *(tint_symbol_6) = gl_FragCoord_param;
-  main_1(tint_symbol_7, tint_symbol_6, tint_symbol_8);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_7), .gl_FragDepth_1=*(tint_symbol_8)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  thread float tint_symbol_11 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.spvasm
deleted file mode 100644
index 4eb6e6e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,79 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 41
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Output_float = OpTypePointer Output %float
-         %10 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %10
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %16 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %21 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-       %uint = OpTypeInt 32 0
-     %uint_2 = OpConstant %uint 2
-   %main_out = OpTypeStruct %v4float %float
-         %26 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %16
-         %19 = OpLabel
-               OpStore %outColor %21
-         %24 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_2
-         %25 = OpLoad %float %24
-               OpStore %gl_FragDepth %25
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %26
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %30 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %31 = OpFunctionCall %void %main_1
-         %32 = OpLoad %v4float %outColor
-         %33 = OpLoad %float %gl_FragDepth
-         %34 = OpCompositeConstruct %main_out %32 %33
-               OpReturnValue %34
-               OpFunctionEnd
-       %main = OpFunction %void None %16
-         %36 = OpLabel
-         %38 = OpLoad %v4float %gl_FragCoord_param_1
-         %37 = OpFunctionCall %main_out %main_inner %38
-         %39 = OpCompositeExtract %v4float %37 0
-               OpStore %outColor_1_1 %39
-         %40 = OpCompositeExtract %float %37 1
-               OpStore %gl_FragDepth_1_1 %40
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.wgsl
deleted file mode 100644
index 0fe24e6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_0/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  let x_20 : f32 = gl_FragCoord.z;
-  gl_FragDepth = x_20;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.hlsl
deleted file mode 100644
index ed109b4..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.699999988f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.msl
deleted file mode 100644
index e3b4625..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.699999988f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.spvasm
deleted file mode 100644
index c901282..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_699999988 = OpConstant %float 0.699999988
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_699999988
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.wgsl
deleted file mode 100644
index 04a6db7..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.699999988;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.hlsl
deleted file mode 100644
index ed109b4..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.699999988f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.msl
deleted file mode 100644
index e3b4625..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.699999988f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.spvasm
deleted file mode 100644
index c901282..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_699999988 = OpConstant %float 0.699999988
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_699999988
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.wgsl
deleted file mode 100644
index 04a6db7..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_2/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.699999988;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.hlsl
deleted file mode 100644
index 45f2a5a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.400000006f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.msl
deleted file mode 100644
index 5b76309..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.400000006f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.spvasm
deleted file mode 100644
index 778afc2..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_400000006 = OpConstant %float 0.400000006
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_400000006
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.wgsl
deleted file mode 100644
index f6cb3ea..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.400000006;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.hlsl
deleted file mode 100644
index 45f2a5a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float gl_FragDepth = 0.0f;
-
-void main_1() {
-  outColor = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  gl_FragDepth = 0.400000006f;
-  return;
-}
-
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol {
-  float4 outColor_1 : SV_Target0;
-  float gl_FragDepth_1 : SV_Depth;
-};
-
-main_out main_inner() {
-  main_1();
-  const main_out tint_symbol_1 = {outColor, gl_FragDepth};
-  return tint_symbol_1;
-}
-
-tint_symbol main() {
-  const main_out inner_result = main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.msl
deleted file mode 100644
index 5b76309..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.msl
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 outColor_1;
-  float gl_FragDepth_1;
-};
-struct tint_symbol_1 {
-  float4 outColor_1 [[color(0)]];
-  float gl_FragDepth_1 [[depth(any)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float* const tint_symbol_4) {
-  *(tint_symbol_3) = float4(0.0f, 0.0f, 0.0f, 0.0f);
-  *(tint_symbol_4) = 0.400000006f;
-  return;
-}
-
-main_out tint_symbol_inner(thread float4* const tint_symbol_5, thread float* const tint_symbol_6) {
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.outColor_1=*(tint_symbol_5), .gl_FragDepth_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol() {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(&(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.outColor_1 = inner_result.outColor_1;
-  wrapper_result.gl_FragDepth_1 = inner_result.gl_FragDepth_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.spvasm
deleted file mode 100644
index 778afc2..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,66 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 33
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %outColor_1_1 %gl_FragDepth_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpExecutionMode %main DepthReplacing
-               OpName %outColor_1_1 "outColor_1_1"
-               OpName %gl_FragDepth_1_1 "gl_FragDepth_1_1"
-               OpName %outColor "outColor"
-               OpName %gl_FragDepth "gl_FragDepth"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "outColor_1"
-               OpMemberName %main_out 1 "gl_FragDepth_1"
-               OpName %main_inner "main_inner"
-               OpName %main "main"
-               OpDecorate %outColor_1_1 Location 0
-               OpDecorate %gl_FragDepth_1_1 BuiltIn FragDepth
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %5 = OpConstantNull %v4float
-%outColor_1_1 = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
-          %8 = OpConstantNull %float
-%gl_FragDepth_1_1 = OpVariable %_ptr_Output_float Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %outColor = OpVariable %_ptr_Private_v4float Private %5
-%_ptr_Private_float = OpTypePointer Private %float
-%gl_FragDepth = OpVariable %_ptr_Private_float Private %8
-       %void = OpTypeVoid
-         %13 = OpTypeFunction %void
-    %float_0 = OpConstant %float 0
-         %18 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
-%float_0_400000006 = OpConstant %float 0.400000006
-   %main_out = OpTypeStruct %v4float %float
-         %20 = OpTypeFunction %main_out
-     %main_1 = OpFunction %void None %13
-         %16 = OpLabel
-               OpStore %outColor %18
-               OpStore %gl_FragDepth %float_0_400000006
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %20
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %main_1
-         %25 = OpLoad %v4float %outColor
-         %26 = OpLoad %float %gl_FragDepth
-         %27 = OpCompositeConstruct %main_out %25 %26
-               OpReturnValue %27
-               OpFunctionEnd
-       %main = OpFunction %void None %13
-         %29 = OpLabel
-         %30 = OpFunctionCall %main_out %main_inner
-         %31 = OpCompositeExtract %v4float %30 0
-               OpStore %outColor_1_1 %31
-         %32 = OpCompositeExtract %float %30 1
-               OpStore %gl_FragDepth_1_1 %32
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.wgsl
deleted file mode 100644
index f6cb3ea..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/graphics/execution_mode/depthunchanged_3/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> outColor : vec4<f32>;
-
-var<private> gl_FragDepth : f32;
-
-fn main_1() {
-  outColor = vec4<f32>(0.0, 0.0, 0.0, 0.0);
-  gl_FragDepth = 0.400000006;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  outColor_1 : vec4<f32>;
-  [[builtin(frag_depth)]]
-  gl_FragDepth_1 : f32;
-};
-
-[[stage(fragment)]]
-fn main() -> main_out {
-  main_1();
-  return main_out(outColor, gl_FragDepth);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.hlsl
deleted file mode 100644
index 1e0df3f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static uint pos = 0u;
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = position;
-  pos = 0u;
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-  uint pos_1;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  uint pos_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position, pos};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.pos_1 = inner_result.pos_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.msl
deleted file mode 100644
index 44d4a1f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-  uint pos_1;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  uint pos_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6, thread uint* const tint_symbol_7) {
-  float4 const x_22 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_22;
-  *(tint_symbol_7) = 0u;
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread uint* const tint_symbol_10) {
-  *(tint_symbol_8) = position_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_9), .pos_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  thread uint tint_symbol_13 = 0u;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.pos_1 = inner_result.pos_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.spvasm
deleted file mode 100644
index 8378860..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 42
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %pos_1_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %pos_1_1 "pos_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %pos "pos"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpMemberName %main_out 1 "pos_1"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %pos_1_1 Location 0
-               OpDecorate %pos_1_1 Flat
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-%_ptr_Output_uint = OpTypePointer Output %uint
-         %11 = OpConstantNull %uint
-    %pos_1_1 = OpVariable %_ptr_Output_uint Output %11
-%_ptr_Output_float = OpTypePointer Output %float
-         %14 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %pos = OpVariable %_ptr_Private_uint Private %11
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-   %main_out = OpTypeStruct %v4float %uint
-         %26 = OpTypeFunction %main_out %v4float
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %24 = OpLoad %v4float %position
-               OpStore %gl_Position %24
-               OpStore %pos %uint_0
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %26
-%position_param = OpFunctionParameter %v4float
-         %30 = OpLabel
-               OpStore %position %position_param
-         %31 = OpFunctionCall %void %main_1
-         %32 = OpLoad %v4float %gl_Position
-         %33 = OpLoad %uint %pos
-         %34 = OpCompositeConstruct %main_out %32 %33
-               OpReturnValue %34
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %36 = OpLabel
-         %38 = OpLoad %v4float %position_param_1
-         %37 = OpFunctionCall %main_out %main_inner %38
-         %39 = OpCompositeExtract %v4float %37 0
-               OpStore %gl_Position_1 %39
-         %40 = OpCompositeExtract %uint %37 1
-               OpStore %pos_1_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.wgsl
deleted file mode 100644
index 081740c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> pos : u32;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  gl_Position = x_22;
-  pos = 0u;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-  [[location(0)]]
-  pos_1 : u32;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position, pos);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.hlsl
deleted file mode 100644
index 1e0df3f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,36 +0,0 @@
-static float4 position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static uint pos = 0u;
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = position;
-  pos = 0u;
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-  uint pos_1;
-};
-struct tint_symbol_1 {
-  float4 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  uint pos_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position, pos};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.pos_1 = inner_result.pos_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.msl
deleted file mode 100644
index 44d4a1f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-  uint pos_1;
-};
-struct tint_symbol_2 {
-  float4 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  uint pos_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6, thread uint* const tint_symbol_7) {
-  float4 const x_22 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_22;
-  *(tint_symbol_7) = 0u;
-  return;
-}
-
-main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_8, thread float4* const tint_symbol_9, thread uint* const tint_symbol_10) {
-  *(tint_symbol_8) = position_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_9), .pos_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread float4 tint_symbol_12 = 0.0f;
-  thread uint tint_symbol_13 = 0u;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  wrapper_result.pos_1 = inner_result.pos_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.spvasm
deleted file mode 100644
index 8378860..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,82 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 42
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %pos_1_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %pos_1_1 "pos_1_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %pos "pos"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpMemberName %main_out 1 "pos_1"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %pos_1_1 Location 0
-               OpDecorate %pos_1_1 Flat
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%position_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %7
-       %uint = OpTypeInt 32 0
-%_ptr_Output_uint = OpTypePointer Output %uint
-         %11 = OpConstantNull %uint
-    %pos_1_1 = OpVariable %_ptr_Output_uint Output %11
-%_ptr_Output_float = OpTypePointer Output %float
-         %14 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-   %position = OpVariable %_ptr_Private_v4float Private %7
-%_ptr_Private_uint = OpTypePointer Private %uint
-        %pos = OpVariable %_ptr_Private_uint Private %11
-%gl_Position = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-     %uint_0 = OpConstant %uint 0
-   %main_out = OpTypeStruct %v4float %uint
-         %26 = OpTypeFunction %main_out %v4float
-    %float_1 = OpConstant %float 1
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-         %24 = OpLoad %v4float %position
-               OpStore %gl_Position %24
-               OpStore %pos %uint_0
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %26
-%position_param = OpFunctionParameter %v4float
-         %30 = OpLabel
-               OpStore %position %position_param
-         %31 = OpFunctionCall %void %main_1
-         %32 = OpLoad %v4float %gl_Position
-         %33 = OpLoad %uint %pos
-         %34 = OpCompositeConstruct %main_out %32 %33
-               OpReturnValue %34
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %36 = OpLabel
-         %38 = OpLoad %v4float %position_param_1
-         %37 = OpFunctionCall %main_out %main_inner %38
-         %39 = OpCompositeExtract %v4float %37 0
-               OpStore %gl_Position_1 %39
-         %40 = OpCompositeExtract %uint %37 1
-               OpStore %pos_1_1 %40
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.wgsl
deleted file mode 100644
index 081740c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/spirv1p4/hlsl_functionality1/decorate_string/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,26 +0,0 @@
-var<private> position : vec4<f32>;
-
-var<private> pos : u32;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec4<f32> = position;
-  gl_Position = x_22;
-  pos = 0u;
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-  [[location(0)]]
-  pos_1 : u32;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec4<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position, pos);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index a4751f1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float3 x_2 = float3(0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = float4(x_2, 1.0f);
-  x_4 = x_3;
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float3 x_2_param : TEXCOORD0;
-  int x_3_param : TEXCOORD1;
-};
-struct tint_symbol_2 {
-  int x_4_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float3 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4, gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.msl
deleted file mode 100644
index 0dfb3a1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float3 x_2_param [[attribute(0)]];
-  int x_3_param [[attribute(1)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float3* const tint_symbol_5, thread float4* const tint_symbol_6, thread int* const tint_symbol_7, thread int* const tint_symbol_8) {
-  float3 const x_22 = *(tint_symbol_5);
-  *(tint_symbol_6) = float4(x_22, 1.0f);
-  *(tint_symbol_7) = *(tint_symbol_8);
-  return;
-}
-
-main_out tint_symbol_inner(float3 x_2_param, int x_3_param, thread float3* const tint_symbol_9, thread int* const tint_symbol_10, thread float4* const tint_symbol_11, thread int* const tint_symbol_12) {
-  *(tint_symbol_9) = x_2_param;
-  *(tint_symbol_10) = x_3_param;
-  main_1(tint_symbol_9, tint_symbol_11, tint_symbol_12, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_12), .gl_Position=*(tint_symbol_11)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float3 tint_symbol_13 = 0.0f;
-  thread int tint_symbol_14 = 0;
-  thread float4 tint_symbol_15 = 0.0f;
-  thread int tint_symbol_16 = 0;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index 845718e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 Location 0
-               OpDecorate %x_3_param_1 Location 1
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %x_4_1_1 Flat
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-%_ptr_Input_v3float = OpTypePointer Input %v3float
-%x_2_param_1 = OpVariable %_ptr_Input_v3float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-         %14 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %14
-%_ptr_Output_float = OpTypePointer Output %float
-         %17 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %17
-%_ptr_Private_v3float = OpTypePointer Private %v3float
-         %20 = OpConstantNull %v3float
-        %x_2 = OpVariable %_ptr_Private_v3float Private %20
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %14
-       %void = OpTypeVoid
-         %26 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %int %v4float
-         %37 = OpTypeFunction %main_out %v3float %int
-     %main_1 = OpFunction %void None %26
-         %29 = OpLabel
-         %30 = OpLoad %v3float %x_2
-         %31 = OpCompositeExtract %float %30 0
-         %32 = OpCompositeExtract %float %30 1
-         %33 = OpCompositeExtract %float %30 2
-         %35 = OpCompositeConstruct %v4float %31 %32 %33 %float_1
-               OpStore %gl_Position %35
-         %36 = OpLoad %int %x_3
-               OpStore %x_4 %36
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %37
-  %x_2_param = OpFunctionParameter %v3float
-  %x_3_param = OpFunctionParameter %int
-         %42 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %int %x_4
-         %45 = OpLoad %v4float %gl_Position
-         %46 = OpCompositeConstruct %main_out %44 %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %26
-         %48 = OpLabel
-         %50 = OpLoad %v3float %x_2_param_1
-         %51 = OpLoad %int %x_3_param_1
-         %49 = OpFunctionCall %main_out %main_inner %50 %51
-         %52 = OpCompositeExtract %int %49 0
-               OpStore %x_4_1_1 %52
-         %53 = OpCompositeExtract %v4float %49 1
-               OpStore %gl_Position_1 %53
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 9959aa6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> x_2 : vec3<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec3<f32> = x_2;
-  gl_Position = vec4<f32>(x_22, 1.0);
-  x_4 = x_3;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_2_param : vec3<f32>, [[location(1)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4, gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index a4751f1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,39 +0,0 @@
-static float3 x_2 = float3(0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  gl_Position = float4(x_2, 1.0f);
-  x_4 = x_3;
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float3 x_2_param : TEXCOORD0;
-  int x_3_param : TEXCOORD1;
-};
-struct tint_symbol_2 {
-  int x_4_1 : TEXCOORD0;
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float3 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4, gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.msl
deleted file mode 100644
index 0dfb3a1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float3 x_2_param [[attribute(0)]];
-  int x_3_param [[attribute(1)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[user(locn0)]];
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float3* const tint_symbol_5, thread float4* const tint_symbol_6, thread int* const tint_symbol_7, thread int* const tint_symbol_8) {
-  float3 const x_22 = *(tint_symbol_5);
-  *(tint_symbol_6) = float4(x_22, 1.0f);
-  *(tint_symbol_7) = *(tint_symbol_8);
-  return;
-}
-
-main_out tint_symbol_inner(float3 x_2_param, int x_3_param, thread float3* const tint_symbol_9, thread int* const tint_symbol_10, thread float4* const tint_symbol_11, thread int* const tint_symbol_12) {
-  *(tint_symbol_9) = x_2_param;
-  *(tint_symbol_10) = x_3_param;
-  main_1(tint_symbol_9, tint_symbol_11, tint_symbol_12, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_12), .gl_Position=*(tint_symbol_11)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float3 tint_symbol_13 = 0.0f;
-  thread int tint_symbol_14 = 0;
-  thread float4 tint_symbol_15 = 0.0f;
-  thread int tint_symbol_16 = 0;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index 845718e..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,99 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 54
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1 %gl_Position_1 %vertex_point_size
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpMemberName %main_out 1 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 Location 0
-               OpDecorate %x_3_param_1 Location 1
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %x_4_1_1 Flat
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-               OpMemberDecorate %main_out 1 Offset 16
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-%_ptr_Input_v3float = OpTypePointer Input %v3float
-%x_2_param_1 = OpVariable %_ptr_Input_v3float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-         %14 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %14
-%_ptr_Output_float = OpTypePointer Output %float
-         %17 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %17
-%_ptr_Private_v3float = OpTypePointer Private %v3float
-         %20 = OpConstantNull %v3float
-        %x_2 = OpVariable %_ptr_Private_v3float Private %20
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %14
-       %void = OpTypeVoid
-         %26 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %int %v4float
-         %37 = OpTypeFunction %main_out %v3float %int
-     %main_1 = OpFunction %void None %26
-         %29 = OpLabel
-         %30 = OpLoad %v3float %x_2
-         %31 = OpCompositeExtract %float %30 0
-         %32 = OpCompositeExtract %float %30 1
-         %33 = OpCompositeExtract %float %30 2
-         %35 = OpCompositeConstruct %v4float %31 %32 %33 %float_1
-               OpStore %gl_Position %35
-         %36 = OpLoad %int %x_3
-               OpStore %x_4 %36
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %37
-  %x_2_param = OpFunctionParameter %v3float
-  %x_3_param = OpFunctionParameter %int
-         %42 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %43 = OpFunctionCall %void %main_1
-         %44 = OpLoad %int %x_4
-         %45 = OpLoad %v4float %gl_Position
-         %46 = OpCompositeConstruct %main_out %44 %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %26
-         %48 = OpLabel
-         %50 = OpLoad %v3float %x_2_param_1
-         %51 = OpLoad %int %x_3_param_1
-         %49 = OpFunctionCall %main_out %main_inner %50 %51
-         %52 = OpCompositeExtract %int %49 0
-               OpStore %x_4_1_1 %52
-         %53 = OpCompositeExtract %v4float %49 1
-               OpStore %gl_Position_1 %53
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 9959aa6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_atomic/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,29 +0,0 @@
-var<private> x_2 : vec3<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_22 : vec3<f32> = x_2;
-  gl_Position = vec4<f32>(x_22, 1.0);
-  x_4 = x_3;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] x_2_param : vec3<f32>, [[location(1)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4, gl_Position);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.hlsl
deleted file mode 100644
index 05960c1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-RWTexture2D<int4> x_5 : register(u0, space0);
-
-void main_1() {
-  x_4 = 1;
-  const float4 x_23 = x_2;
-  const int x_27 = int(x_23.x);
-  const int x_28 = int(x_23.y);
-  if (((((x_27 & 1) + (x_28 & 1)) + x_3) == int(x_23.z))) {
-  }
-  x_5[int2(x_27, x_28)] = int4(x_27, 0, 0, 0);
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.msl
deleted file mode 100644
index 061fbbe..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(thread int* const tint_symbol_5, thread float4* const tint_symbol_6, thread int* const tint_symbol_7, texture2d<int, access::write> tint_symbol_8) {
-  *(tint_symbol_5) = 1;
-  float4 const x_23 = *(tint_symbol_6);
-  int const x_27 = int(x_23.x);
-  int const x_28 = int(x_23.y);
-  int const x_33 = *(tint_symbol_7);
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((x_27 & 1)) + as_type<uint>((x_28 & 1))))) + as_type<uint>(x_33))) == int(x_23.z))) {
-  }
-  tint_symbol_8.write(int4(x_27, 0, 0, 0), uint2(int2(x_27, x_28)));
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_2_param, int x_3_param, thread float4* const tint_symbol_9, thread int* const tint_symbol_10, thread int* const tint_symbol_11, texture2d<int, access::write> tint_symbol_12) {
-  *(tint_symbol_9) = x_2_param;
-  *(tint_symbol_10) = x_3_param;
-  main_1(tint_symbol_11, tint_symbol_9, tint_symbol_10, tint_symbol_12);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_11)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(texture2d<int, access::write> tint_symbol_16 [[texture(0)]], float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_13 = 0.0f;
-  thread int tint_symbol_14 = 0;
-  thread int tint_symbol_15 = 0;
-  main_out const inner_result = tint_symbol_inner(x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), tint_symbol_16);
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.spvasm
deleted file mode 100644
index 27651db..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %x_5 NonReadable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-         %19 = OpTypeImage %int 2D 0 0 0 2 R32i
-%_ptr_UniformConstant_19 = OpTypePointer UniformConstant %19
-        %x_5 = OpVariable %_ptr_UniformConstant_19 UniformConstant
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %v2int = OpTypeVector %int 2
-      %v4int = OpTypeVector %int 4
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %int
-         %48 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-               OpStore %x_4 %int_1
-         %25 = OpLoad %v4float %x_2
-         %27 = OpCompositeExtract %float %25 0
-         %26 = OpConvertFToS %int %27
-         %29 = OpCompositeExtract %float %25 1
-         %28 = OpConvertFToS %int %29
-         %30 = OpLoad %int %x_3
-         %31 = OpBitwiseAnd %int %26 %int_1
-         %32 = OpBitwiseAnd %int %28 %int_1
-         %33 = OpIAdd %int %31 %32
-         %34 = OpIAdd %int %33 %30
-         %36 = OpCompositeExtract %float %25 2
-         %35 = OpConvertFToS %int %36
-         %37 = OpIEqual %bool %34 %35
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %39
-         %40 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-         %42 = OpLoad %19 %x_5
-         %44 = OpCompositeConstruct %v2int %26 %28
-         %47 = OpCompositeConstruct %v4int %26 %int_0 %int_0 %int_0
-               OpImageWrite %42 %44 %47
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %48
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %53 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %int %x_4
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %58 = OpLabel
-         %60 = OpLoad %v4float %x_2_param_1
-         %61 = OpLoad %int %x_3_param_1
-         %59 = OpFunctionCall %main_out %main_inner %60 %61
-         %62 = OpCompositeExtract %int %59 0
-               OpStore %x_4_1_1 %62
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.wgsl
deleted file mode 100644
index 0f3c732..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-[[group(0), binding(0)]] var x_5 : texture_storage_2d<r32sint, write>;
-
-fn main_1() {
-  x_4 = 1;
-  let x_23 : vec4<f32> = x_2;
-  let x_27 : i32 = i32(x_23.x);
-  let x_28 : i32 = i32(x_23.y);
-  let x_33 : i32 = x_3;
-  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == i32(x_23.z))) {
-  }
-  textureStore(x_5, vec2<i32>(x_27, x_28), vec4<i32>(x_27, 0, 0, 0));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.hlsl
deleted file mode 100644
index 05960c1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-RWTexture2D<int4> x_5 : register(u0, space0);
-
-void main_1() {
-  x_4 = 1;
-  const float4 x_23 = x_2;
-  const int x_27 = int(x_23.x);
-  const int x_28 = int(x_23.y);
-  if (((((x_27 & 1) + (x_28 & 1)) + x_3) == int(x_23.z))) {
-  }
-  x_5[int2(x_27, x_28)] = int4(x_27, 0, 0, 0);
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.msl
deleted file mode 100644
index 061fbbe..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.msl
+++ /dev/null
@@ -1,43 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(thread int* const tint_symbol_5, thread float4* const tint_symbol_6, thread int* const tint_symbol_7, texture2d<int, access::write> tint_symbol_8) {
-  *(tint_symbol_5) = 1;
-  float4 const x_23 = *(tint_symbol_6);
-  int const x_27 = int(x_23.x);
-  int const x_28 = int(x_23.y);
-  int const x_33 = *(tint_symbol_7);
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((x_27 & 1)) + as_type<uint>((x_28 & 1))))) + as_type<uint>(x_33))) == int(x_23.z))) {
-  }
-  tint_symbol_8.write(int4(x_27, 0, 0, 0), uint2(int2(x_27, x_28)));
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_2_param, int x_3_param, thread float4* const tint_symbol_9, thread int* const tint_symbol_10, thread int* const tint_symbol_11, texture2d<int, access::write> tint_symbol_12) {
-  *(tint_symbol_9) = x_2_param;
-  *(tint_symbol_10) = x_3_param;
-  main_1(tint_symbol_11, tint_symbol_9, tint_symbol_10, tint_symbol_12);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_11)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(texture2d<int, access::write> tint_symbol_16 [[texture(0)]], float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_13 = 0.0f;
-  thread int tint_symbol_14 = 0;
-  thread int tint_symbol_15 = 0;
-  main_out const inner_result = tint_symbol_inner(x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_13), &(tint_symbol_14), &(tint_symbol_15), tint_symbol_16);
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.spvasm
deleted file mode 100644
index 27651db..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,106 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 63
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %x_5 NonReadable
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-         %19 = OpTypeImage %int 2D 0 0 0 2 R32i
-%_ptr_UniformConstant_19 = OpTypePointer UniformConstant %19
-        %x_5 = OpVariable %_ptr_UniformConstant_19 UniformConstant
-       %void = OpTypeVoid
-         %20 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-      %v2int = OpTypeVector %int 2
-      %v4int = OpTypeVector %int 4
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %int
-         %48 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %20
-         %23 = OpLabel
-               OpStore %x_4 %int_1
-         %25 = OpLoad %v4float %x_2
-         %27 = OpCompositeExtract %float %25 0
-         %26 = OpConvertFToS %int %27
-         %29 = OpCompositeExtract %float %25 1
-         %28 = OpConvertFToS %int %29
-         %30 = OpLoad %int %x_3
-         %31 = OpBitwiseAnd %int %26 %int_1
-         %32 = OpBitwiseAnd %int %28 %int_1
-         %33 = OpIAdd %int %31 %32
-         %34 = OpIAdd %int %33 %30
-         %36 = OpCompositeExtract %float %25 2
-         %35 = OpConvertFToS %int %36
-         %37 = OpIEqual %bool %34 %35
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %39
-         %40 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-         %42 = OpLoad %19 %x_5
-         %44 = OpCompositeConstruct %v2int %26 %28
-         %47 = OpCompositeConstruct %v4int %26 %int_0 %int_0 %int_0
-               OpImageWrite %42 %44 %47
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %48
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %53 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %54 = OpFunctionCall %void %main_1
-         %55 = OpLoad %int %x_4
-         %56 = OpCompositeConstruct %main_out %55
-               OpReturnValue %56
-               OpFunctionEnd
-       %main = OpFunction %void None %20
-         %58 = OpLabel
-         %60 = OpLoad %v4float %x_2_param_1
-         %61 = OpLoad %int %x_3_param_1
-         %59 = OpFunctionCall %main_out %main_inner %60 %61
-         %62 = OpCompositeExtract %int %59 0
-               OpStore %x_4_1_1 %62
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.wgsl
deleted file mode 100644
index 0f3c732..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_image_store/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,32 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-[[group(0), binding(0)]] var x_5 : texture_storage_2d<r32sint, write>;
-
-fn main_1() {
-  x_4 = 1;
-  let x_23 : vec4<f32> = x_2;
-  let x_27 : i32 = i32(x_23.x);
-  let x_28 : i32 = i32(x_23.y);
-  let x_33 : i32 = x_3;
-  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == i32(x_23.z))) {
-  }
-  textureStore(x_5, vec2<i32>(x_27, x_28), vec4<i32>(x_27, 0, 0, 0));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.hlsl
deleted file mode 100644
index 8f93c98..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-
-void main_1() {
-  const float4 x_16 = x_2;
-  if (((((int(x_16.x) & 1) + (int(x_16.y) & 1)) + x_3) == int(x_16.z))) {
-  }
-  x_4 = 1;
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.msl
deleted file mode 100644
index 5511519..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread int* const tint_symbol_6, thread int* const tint_symbol_7) {
-  float4 const x_16 = *(tint_symbol_5);
-  int const x_26 = *(tint_symbol_6);
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((int(x_16.x) & 1)) + as_type<uint>((int(x_16.y) & 1))))) + as_type<uint>(x_26))) == int(x_16.z))) {
-  }
-  *(tint_symbol_7) = 1;
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.spvasm
deleted file mode 100644
index 6946b61..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %int
-         %38 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %v4float %x_2
-         %22 = OpLoad %int %x_3
-         %24 = OpCompositeExtract %float %21 0
-         %23 = OpConvertFToS %int %24
-         %26 = OpBitwiseAnd %int %23 %int_1
-         %28 = OpCompositeExtract %float %21 1
-         %27 = OpConvertFToS %int %28
-         %29 = OpBitwiseAnd %int %27 %int_1
-         %30 = OpIAdd %int %26 %29
-         %31 = OpIAdd %int %30 %22
-         %33 = OpCompositeExtract %float %21 2
-         %32 = OpConvertFToS %int %33
-         %34 = OpIEqual %bool %31 %32
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %36
-         %37 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-               OpStore %x_4 %int_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %43 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %44 = OpFunctionCall %void %main_1
-         %45 = OpLoad %int %x_4
-         %46 = OpCompositeConstruct %main_out %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %48 = OpLabel
-         %50 = OpLoad %v4float %x_2_param_1
-         %51 = OpLoad %int %x_3_param_1
-         %49 = OpFunctionCall %main_out %main_inner %50 %51
-         %52 = OpCompositeExtract %int %49 0
-               OpStore %x_4_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.wgsl
deleted file mode 100644
index affcd63..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-fn main_1() {
-  let x_16 : vec4<f32> = x_2;
-  let x_26 : i32 = x_3;
-  if (((((i32(x_16.x) & 1) + (i32(x_16.y) & 1)) + x_26) == i32(x_16.z))) {
-  }
-  x_4 = 1;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.hlsl
deleted file mode 100644
index 8f93c98..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-
-void main_1() {
-  const float4 x_16 = x_2;
-  if (((((int(x_16.x) & 1) + (int(x_16.y) & 1)) + x_3) == int(x_16.z))) {
-  }
-  x_4 = 1;
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.msl
deleted file mode 100644
index 5511519..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread int* const tint_symbol_6, thread int* const tint_symbol_7) {
-  float4 const x_16 = *(tint_symbol_5);
-  int const x_26 = *(tint_symbol_6);
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((int(x_16.x) & 1)) + as_type<uint>((int(x_16.y) & 1))))) + as_type<uint>(x_26))) == int(x_16.z))) {
-  }
-  *(tint_symbol_7) = 1;
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.spvasm
deleted file mode 100644
index 6946b61..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %int
-         %38 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %v4float %x_2
-         %22 = OpLoad %int %x_3
-         %24 = OpCompositeExtract %float %21 0
-         %23 = OpConvertFToS %int %24
-         %26 = OpBitwiseAnd %int %23 %int_1
-         %28 = OpCompositeExtract %float %21 1
-         %27 = OpConvertFToS %int %28
-         %29 = OpBitwiseAnd %int %27 %int_1
-         %30 = OpIAdd %int %26 %29
-         %31 = OpIAdd %int %30 %22
-         %33 = OpCompositeExtract %float %21 2
-         %32 = OpConvertFToS %int %33
-         %34 = OpIEqual %bool %31 %32
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %36
-         %37 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-               OpStore %x_4 %int_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %43 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %44 = OpFunctionCall %void %main_1
-         %45 = OpLoad %int %x_4
-         %46 = OpCompositeConstruct %main_out %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %48 = OpLabel
-         %50 = OpLoad %v4float %x_2_param_1
-         %51 = OpLoad %int %x_3_param_1
-         %49 = OpFunctionCall %main_out %main_inner %50 %51
-         %52 = OpCompositeExtract %int %49 0
-               OpStore %x_4_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.wgsl
deleted file mode 100644
index affcd63..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-fn main_1() {
-  let x_16 : vec4<f32> = x_2;
-  let x_26 : i32 = x_3;
-  if (((((i32(x_16.x) & 1) + (i32(x_16.y) & 1)) + x_26) == i32(x_16.z))) {
-  }
-  x_4 = 1;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.hlsl
deleted file mode 100644
index be97366..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,37 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int out_data = 0;
-
-void main_1() {
-  bool x_is_odd = false;
-  bool y_is_odd = false;
-  const float x_24 = gl_FragCoord.x;
-  x_is_odd = ((int(x_24) & 1) == 1);
-  const float x_29 = gl_FragCoord.y;
-  y_is_odd = ((int(x_29) & 1) == 1);
-  out_data = ((x_is_odd | y_is_odd) ? 1 : 0);
-  return;
-}
-
-struct main_out {
-  int out_data_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int out_data_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {out_data};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.out_data_1 = inner_result.out_data_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.msl
deleted file mode 100644
index 33340cd..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int out_data_1;
-};
-struct tint_symbol_1 {
-  int out_data_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread int* const tint_symbol_4) {
-  bool x_is_odd = false;
-  bool y_is_odd = false;
-  float const x_24 = (*(tint_symbol_3)).x;
-  x_is_odd = ((int(x_24) & 1) == 1);
-  float const x_29 = (*(tint_symbol_3)).y;
-  y_is_odd = ((int(x_29) & 1) == 1);
-  bool const x_33 = x_is_odd;
-  bool const x_34 = y_is_odd;
-  *(tint_symbol_4) = select(0, 1, (x_33 | x_34));
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread int* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.out_data_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread int tint_symbol_8 = 0;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.out_data_1 = inner_result.out_data_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.spvasm
deleted file mode 100644
index 54f0b56..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,90 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 56
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %out_data_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %out_data_1_1 "out_data_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %out_data "out_data"
-               OpName %main_1 "main_1"
-               OpName %x_is_odd "x_is_odd"
-               OpName %y_is_odd "y_is_odd"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "out_data_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %out_data_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Output_int = OpTypePointer Output %int
-          %8 = OpConstantNull %int
-%out_data_1_1 = OpVariable %_ptr_Output_int Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %11 = OpConstantNull %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %11
-%_ptr_Private_int = OpTypePointer Private %int
-   %out_data = OpVariable %_ptr_Private_int Private %8
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %21 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %int
-         %43 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-   %x_is_odd = OpVariable %_ptr_Function_bool Function %21
-   %y_is_odd = OpVariable %_ptr_Function_bool Function %21
-         %26 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %27 = OpLoad %float %26
-         %28 = OpConvertFToS %int %27
-         %30 = OpBitwiseAnd %int %28 %int_1
-         %31 = OpIEqual %bool %30 %int_1
-               OpStore %x_is_odd %31
-         %33 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %34 = OpLoad %float %33
-         %35 = OpConvertFToS %int %34
-         %36 = OpBitwiseAnd %int %35 %int_1
-         %37 = OpIEqual %bool %36 %int_1
-               OpStore %y_is_odd %37
-         %38 = OpLoad %bool %x_is_odd
-         %39 = OpLoad %bool %y_is_odd
-         %41 = OpLogicalOr %bool %38 %39
-         %40 = OpSelect %int %41 %int_1 %int_0
-               OpStore %out_data %40
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %43
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %47 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %48 = OpFunctionCall %void %main_1
-         %49 = OpLoad %int %out_data
-         %50 = OpCompositeConstruct %main_out %49
-               OpReturnValue %50
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %52 = OpLabel
-         %54 = OpLoad %v4float %gl_FragCoord_param_1
-         %53 = OpFunctionCall %main_out %main_inner %54
-         %55 = OpCompositeExtract %int %53 0
-               OpStore %out_data_1_1 %55
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.wgsl
deleted file mode 100644
index 5610438..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> out_data : i32;
-
-fn main_1() {
-  var x_is_odd : bool;
-  var y_is_odd : bool;
-  let x_24 : f32 = gl_FragCoord.x;
-  x_is_odd = ((i32(x_24) & 1) == 1);
-  let x_29 : f32 = gl_FragCoord.y;
-  y_is_odd = ((i32(x_29) & 1) == 1);
-  let x_33 : bool = x_is_odd;
-  let x_34 : bool = y_is_odd;
-  out_data = select(0, 1, (x_33 | x_34));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  out_data_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(out_data);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.hlsl
deleted file mode 100644
index ee7668f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int out_data = 0;
-
-void main_1() {
-  bool x_is_odd = false;
-  bool y_is_odd = false;
-  const float x_24 = gl_FragCoord.x;
-  x_is_odd = ((int(x_24) & 1) == 1);
-  const float x_29 = gl_FragCoord.y;
-  y_is_odd = ((int(x_29) & 1) == 1);
-  bool tint_tmp = x_is_odd;
-  if (!tint_tmp) {
-    tint_tmp = y_is_odd;
-  }
-  out_data = ((tint_tmp) ? 1 : 0);
-  return;
-}
-
-struct main_out {
-  int out_data_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int out_data_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {out_data};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.out_data_1 = inner_result.out_data_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.msl
deleted file mode 100644
index 104e462..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int out_data_1;
-};
-struct tint_symbol_1 {
-  int out_data_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread int* const tint_symbol_4) {
-  bool x_is_odd = false;
-  bool y_is_odd = false;
-  float const x_24 = (*(tint_symbol_3)).x;
-  x_is_odd = ((int(x_24) & 1) == 1);
-  float const x_29 = (*(tint_symbol_3)).y;
-  y_is_odd = ((int(x_29) & 1) == 1);
-  bool const x_33 = x_is_odd;
-  bool const x_34 = y_is_odd;
-  *(tint_symbol_4) = select(0, 1, (x_33 || x_34));
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread int* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.out_data_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread int tint_symbol_8 = 0;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.out_data_1 = inner_result.out_data_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.spvasm
deleted file mode 100644
index 3a924c0..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,95 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 58
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %out_data_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %out_data_1_1 "out_data_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %out_data "out_data"
-               OpName %main_1 "main_1"
-               OpName %x_is_odd "x_is_odd"
-               OpName %y_is_odd "y_is_odd"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "out_data_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %out_data_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Output_int = OpTypePointer Output %int
-          %8 = OpConstantNull %int
-%out_data_1_1 = OpVariable %_ptr_Output_int Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %11 = OpConstantNull %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %11
-%_ptr_Private_int = OpTypePointer Private %int
-   %out_data = OpVariable %_ptr_Private_int Private %8
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %21 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-      %int_1 = OpConstant %int 1
-     %uint_1 = OpConstant %uint 1
-      %int_0 = OpConstant %int 0
-   %main_out = OpTypeStruct %int
-         %45 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-   %x_is_odd = OpVariable %_ptr_Function_bool Function %21
-   %y_is_odd = OpVariable %_ptr_Function_bool Function %21
-         %26 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %27 = OpLoad %float %26
-         %28 = OpConvertFToS %int %27
-         %30 = OpBitwiseAnd %int %28 %int_1
-         %31 = OpIEqual %bool %30 %int_1
-               OpStore %x_is_odd %31
-         %33 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %34 = OpLoad %float %33
-         %35 = OpConvertFToS %int %34
-         %36 = OpBitwiseAnd %int %35 %int_1
-         %37 = OpIEqual %bool %36 %int_1
-               OpStore %y_is_odd %37
-         %38 = OpLoad %bool %x_is_odd
-         %39 = OpLoad %bool %y_is_odd
-               OpSelectionMerge %41 None
-               OpBranchConditional %38 %41 %42
-         %42 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-         %43 = OpPhi %bool %38 %17 %39 %42
-         %40 = OpSelect %int %43 %int_1 %int_0
-               OpStore %out_data %40
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %45
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %49 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %50 = OpFunctionCall %void %main_1
-         %51 = OpLoad %int %out_data
-         %52 = OpCompositeConstruct %main_out %51
-               OpReturnValue %52
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %54 = OpLabel
-         %56 = OpLoad %v4float %gl_FragCoord_param_1
-         %55 = OpFunctionCall %main_out %main_inner %56
-         %57 = OpCompositeExtract %int %55 0
-               OpStore %out_data_1_1 %57
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.wgsl
deleted file mode 100644
index 3820a70..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,28 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> out_data : i32;
-
-fn main_1() {
-  var x_is_odd : bool;
-  var y_is_odd : bool;
-  let x_24 : f32 = gl_FragCoord.x;
-  x_is_odd = ((i32(x_24) & 1) == 1);
-  let x_29 : f32 = gl_FragCoord.y;
-  y_is_odd = ((i32(x_29) & 1) == 1);
-  let x_33 : bool = x_is_odd;
-  let x_34 : bool = y_is_odd;
-  out_data = select(0, 1, (x_33 || x_34));
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  out_data_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(out_data);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.hlsl
deleted file mode 100644
index c728eae..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-
-void main_1() {
-  const float4 x_16 = x_2;
-  const int x_26 = x_3;
-  x_4 = 1;
-  if (((((int(x_16.x) & 1) + (int(x_16.y) & 1)) + x_26) == int(x_16.z))) {
-  }
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.msl
deleted file mode 100644
index f7875f8..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread int* const tint_symbol_6, thread int* const tint_symbol_7) {
-  float4 const x_16 = *(tint_symbol_5);
-  int const x_26 = *(tint_symbol_6);
-  *(tint_symbol_7) = 1;
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((int(x_16.x) & 1)) + as_type<uint>((int(x_16.y) & 1))))) + as_type<uint>(x_26))) == int(x_16.z))) {
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.spvasm
deleted file mode 100644
index f08c812..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %int
-         %38 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %v4float %x_2
-         %22 = OpLoad %int %x_3
-               OpStore %x_4 %int_1
-         %25 = OpCompositeExtract %float %21 0
-         %24 = OpConvertFToS %int %25
-         %26 = OpBitwiseAnd %int %24 %int_1
-         %28 = OpCompositeExtract %float %21 1
-         %27 = OpConvertFToS %int %28
-         %29 = OpBitwiseAnd %int %27 %int_1
-         %30 = OpIAdd %int %26 %29
-         %31 = OpIAdd %int %30 %22
-         %33 = OpCompositeExtract %float %21 2
-         %32 = OpConvertFToS %int %33
-         %34 = OpIEqual %bool %31 %32
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %36
-         %37 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %43 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %44 = OpFunctionCall %void %main_1
-         %45 = OpLoad %int %x_4
-         %46 = OpCompositeConstruct %main_out %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %48 = OpLabel
-         %50 = OpLoad %v4float %x_2_param_1
-         %51 = OpLoad %int %x_3_param_1
-         %49 = OpFunctionCall %main_out %main_inner %50 %51
-         %52 = OpCompositeExtract %int %49 0
-               OpStore %x_4_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.wgsl
deleted file mode 100644
index e0e933a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-fn main_1() {
-  let x_16 : vec4<f32> = x_2;
-  let x_26 : i32 = x_3;
-  x_4 = 1;
-  if (((((i32(x_16.x) & 1) + (i32(x_16.y) & 1)) + x_26) == i32(x_16.z))) {
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.hlsl
deleted file mode 100644
index c728eae..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,38 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-
-void main_1() {
-  const float4 x_16 = x_2;
-  const int x_26 = x_3;
-  x_4 = 1;
-  if (((((int(x_16.x) & 1) + (int(x_16.y) & 1)) + x_26) == int(x_16.z))) {
-  }
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.msl
deleted file mode 100644
index f7875f8..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.msl
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread int* const tint_symbol_6, thread int* const tint_symbol_7) {
-  float4 const x_16 = *(tint_symbol_5);
-  int const x_26 = *(tint_symbol_6);
-  *(tint_symbol_7) = 1;
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((int(x_16.x) & 1)) + as_type<uint>((int(x_16.y) & 1))))) + as_type<uint>(x_26))) == int(x_16.z))) {
-  }
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.spvasm
deleted file mode 100644
index f08c812..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,92 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 53
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %int
-         %38 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %v4float %x_2
-         %22 = OpLoad %int %x_3
-               OpStore %x_4 %int_1
-         %25 = OpCompositeExtract %float %21 0
-         %24 = OpConvertFToS %int %25
-         %26 = OpBitwiseAnd %int %24 %int_1
-         %28 = OpCompositeExtract %float %21 1
-         %27 = OpConvertFToS %int %28
-         %29 = OpBitwiseAnd %int %27 %int_1
-         %30 = OpIAdd %int %26 %29
-         %31 = OpIAdd %int %30 %22
-         %33 = OpCompositeExtract %float %21 2
-         %32 = OpConvertFToS %int %33
-         %34 = OpIEqual %bool %31 %32
-               OpSelectionMerge %36 None
-               OpBranchConditional %34 %37 %36
-         %37 = OpLabel
-               OpBranch %36
-         %36 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %38
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %43 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %44 = OpFunctionCall %void %main_1
-         %45 = OpLoad %int %x_4
-         %46 = OpCompositeConstruct %main_out %45
-               OpReturnValue %46
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %48 = OpLabel
-         %50 = OpLoad %v4float %x_2_param_1
-         %51 = OpLoad %int %x_3_param_1
-         %49 = OpFunctionCall %main_out %main_inner %50 %51
-         %52 = OpCompositeExtract %int %49 0
-               OpStore %x_4_1_1 %52
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.wgsl
deleted file mode 100644
index e0e933a..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,27 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-fn main_1() {
-  let x_16 : vec4<f32> = x_2;
-  let x_26 : i32 = x_3;
-  x_4 = 1;
-  if (((((i32(x_16.x) & 1) + (i32(x_16.y) & 1)) + x_26) == i32(x_16.z))) {
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.hlsl
deleted file mode 100644
index 36856ff..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-RWByteAddressBuffer x_5 : register(u0, space0);
-
-void main_1() {
-  x_4 = 1;
-  const float4 x_23 = x_2;
-  const int x_27 = int(x_23.x);
-  const int x_28 = int(x_23.y);
-  if (((((x_27 & 1) + (x_28 & 1)) + x_3) == int(x_23.z))) {
-  }
-  x_5.Store((4u * uint((x_27 + (x_28 * 8)))), asuint(x_27));
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_4};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.msl
deleted file mode 100644
index 8d43f0f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ int field0[1];
-};
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(device S& x_5, thread int* const tint_symbol_5, thread float4* const tint_symbol_6, thread int* const tint_symbol_7) {
-  *(tint_symbol_5) = 1;
-  float4 const x_23 = *(tint_symbol_6);
-  int const x_27 = int(x_23.x);
-  int const x_28 = int(x_23.y);
-  int const x_33 = *(tint_symbol_7);
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((x_27 & 1)) + as_type<uint>((x_28 & 1))))) + as_type<uint>(x_33))) == int(x_23.z))) {
-  }
-  x_5.field0[as_type<int>((as_type<uint>(x_27) + as_type<uint>(as_type<int>((as_type<uint>(x_28) * as_type<uint>(8))))))] = x_27;
-  return;
-}
-
-main_out tint_symbol_inner(device S& x_5, float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(x_5, tint_symbol_10, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]], device S& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_5, x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.spvasm
deleted file mode 100644
index 09c1dd6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-%_runtimearr_int = OpTypeRuntimeArray %int
-          %S = OpTypeStruct %_runtimearr_int
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-      %int_8 = OpConstant %int 8
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-   %main_out = OpTypeStruct %int
-         %49 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %21
-         %24 = OpLabel
-               OpStore %x_4 %int_1
-         %26 = OpLoad %v4float %x_2
-         %28 = OpCompositeExtract %float %26 0
-         %27 = OpConvertFToS %int %28
-         %30 = OpCompositeExtract %float %26 1
-         %29 = OpConvertFToS %int %30
-         %31 = OpLoad %int %x_3
-         %32 = OpBitwiseAnd %int %27 %int_1
-         %33 = OpBitwiseAnd %int %29 %int_1
-         %34 = OpIAdd %int %32 %33
-         %35 = OpIAdd %int %34 %31
-         %37 = OpCompositeExtract %float %26 2
-         %36 = OpConvertFToS %int %37
-         %38 = OpIEqual %bool %35 %36
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-         %45 = OpIMul %int %29 %int_8
-         %46 = OpIAdd %int %27 %45
-         %48 = OpAccessChain %_ptr_StorageBuffer_int %x_5 %uint_0 %46
-               OpStore %48 %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %54 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %int %x_4
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %21
-         %59 = OpLabel
-         %61 = OpLoad %v4float %x_2_param_1
-         %62 = OpLoad %int %x_3_param_1
-         %60 = OpFunctionCall %main_out %main_inner %61 %62
-         %63 = OpCompositeExtract %int %60 0
-               OpStore %x_4_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.wgsl
deleted file mode 100644
index 8bf85f1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-fn main_1() {
-  x_4 = 1;
-  let x_23 : vec4<f32> = x_2;
-  let x_27 : i32 = i32(x_23.x);
-  let x_28 : i32 = i32(x_23.y);
-  let x_33 : i32 = x_3;
-  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == i32(x_23.z))) {
-  }
-  x_5.field0[(x_27 + (x_28 * 8))] = x_27;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.hlsl
deleted file mode 100644
index 36856ff..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-RWByteAddressBuffer x_5 : register(u0, space0);
-
-void main_1() {
-  x_4 = 1;
-  const float4 x_23 = x_2;
-  const int x_27 = int(x_23.x);
-  const int x_28 = int(x_23.y);
-  if (((((x_27 & 1) + (x_28 & 1)) + x_3) == int(x_23.z))) {
-  }
-  x_5.Store((4u * uint((x_27 + (x_28 * 8)))), asuint(x_27));
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_4};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.msl
deleted file mode 100644
index 8d43f0f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ int field0[1];
-};
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(device S& x_5, thread int* const tint_symbol_5, thread float4* const tint_symbol_6, thread int* const tint_symbol_7) {
-  *(tint_symbol_5) = 1;
-  float4 const x_23 = *(tint_symbol_6);
-  int const x_27 = int(x_23.x);
-  int const x_28 = int(x_23.y);
-  int const x_33 = *(tint_symbol_7);
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((x_27 & 1)) + as_type<uint>((x_28 & 1))))) + as_type<uint>(x_33))) == int(x_23.z))) {
-  }
-  x_5.field0[as_type<int>((as_type<uint>(x_27) + as_type<uint>(as_type<int>((as_type<uint>(x_28) * as_type<uint>(8))))))] = x_27;
-  return;
-}
-
-main_out tint_symbol_inner(device S& x_5, float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(x_5, tint_symbol_10, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]], device S& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_5, x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.spvasm
deleted file mode 100644
index 09c1dd6..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-%_runtimearr_int = OpTypeRuntimeArray %int
-          %S = OpTypeStruct %_runtimearr_int
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-      %int_8 = OpConstant %int 8
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-   %main_out = OpTypeStruct %int
-         %49 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %21
-         %24 = OpLabel
-               OpStore %x_4 %int_1
-         %26 = OpLoad %v4float %x_2
-         %28 = OpCompositeExtract %float %26 0
-         %27 = OpConvertFToS %int %28
-         %30 = OpCompositeExtract %float %26 1
-         %29 = OpConvertFToS %int %30
-         %31 = OpLoad %int %x_3
-         %32 = OpBitwiseAnd %int %27 %int_1
-         %33 = OpBitwiseAnd %int %29 %int_1
-         %34 = OpIAdd %int %32 %33
-         %35 = OpIAdd %int %34 %31
-         %37 = OpCompositeExtract %float %26 2
-         %36 = OpConvertFToS %int %37
-         %38 = OpIEqual %bool %35 %36
-               OpSelectionMerge %40 None
-               OpBranchConditional %38 %41 %40
-         %41 = OpLabel
-               OpBranch %40
-         %40 = OpLabel
-         %45 = OpIMul %int %29 %int_8
-         %46 = OpIAdd %int %27 %45
-         %48 = OpAccessChain %_ptr_StorageBuffer_int %x_5 %uint_0 %46
-               OpStore %48 %27
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %54 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %int %x_4
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %21
-         %59 = OpLabel
-         %61 = OpLoad %v4float %x_2_param_1
-         %62 = OpLoad %int %x_3_param_1
-         %60 = OpFunctionCall %main_out %main_inner %61 %62
-         %63 = OpCompositeExtract %int %60 0
-               OpStore %x_4_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.wgsl
deleted file mode 100644
index 8bf85f1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-fn main_1() {
-  x_4 = 1;
-  let x_23 : vec4<f32> = x_2;
-  let x_27 : i32 = i32(x_23.x);
-  let x_28 : i32 = i32(x_23.y);
-  let x_33 : i32 = x_3;
-  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == i32(x_23.z))) {
-  }
-  x_5.field0[(x_27 + (x_28 * 8))] = x_27;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.hlsl
deleted file mode 100644
index 6740df5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-RWByteAddressBuffer x_5 : register(u0, space0);
-
-void main_1() {
-  x_4 = 1;
-  const float4 x_23 = x_2;
-  const int x_27 = int(x_23.x);
-  const int x_28 = int(x_23.y);
-  const int x_33 = x_3;
-  x_5.Store((4u * uint((x_27 + (x_28 * 8)))), asuint(x_27));
-  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == int(x_23.z))) {
-  }
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_4};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.msl
deleted file mode 100644
index 1358df1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ int field0[1];
-};
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(device S& x_5, thread int* const tint_symbol_5, thread float4* const tint_symbol_6, thread int* const tint_symbol_7) {
-  *(tint_symbol_5) = 1;
-  float4 const x_23 = *(tint_symbol_6);
-  int const x_27 = int(x_23.x);
-  int const x_28 = int(x_23.y);
-  int const x_33 = *(tint_symbol_7);
-  x_5.field0[as_type<int>((as_type<uint>(x_27) + as_type<uint>(as_type<int>((as_type<uint>(x_28) * as_type<uint>(8))))))] = x_27;
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((x_27 & 1)) + as_type<uint>((x_28 & 1))))) + as_type<uint>(x_33))) == int(x_23.z))) {
-  }
-  return;
-}
-
-main_out tint_symbol_inner(device S& x_5, float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(x_5, tint_symbol_10, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]], device S& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_5, x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.spvasm
deleted file mode 100644
index 2a1715f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-%_runtimearr_int = OpTypeRuntimeArray %int
-          %S = OpTypeStruct %_runtimearr_int
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-      %int_8 = OpConstant %int 8
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %int
-         %49 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %21
-         %24 = OpLabel
-               OpStore %x_4 %int_1
-         %26 = OpLoad %v4float %x_2
-         %28 = OpCompositeExtract %float %26 0
-         %27 = OpConvertFToS %int %28
-         %30 = OpCompositeExtract %float %26 1
-         %29 = OpConvertFToS %int %30
-         %31 = OpLoad %int %x_3
-         %35 = OpIMul %int %29 %int_8
-         %36 = OpIAdd %int %27 %35
-         %38 = OpAccessChain %_ptr_StorageBuffer_int %x_5 %uint_0 %36
-               OpStore %38 %27
-         %39 = OpBitwiseAnd %int %27 %int_1
-         %40 = OpBitwiseAnd %int %29 %int_1
-         %41 = OpIAdd %int %39 %40
-         %42 = OpIAdd %int %41 %31
-         %44 = OpCompositeExtract %float %26 2
-         %43 = OpConvertFToS %int %44
-         %45 = OpIEqual %bool %42 %43
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %47
-         %48 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %54 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %int %x_4
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %21
-         %59 = OpLabel
-         %61 = OpLoad %v4float %x_2_param_1
-         %62 = OpLoad %int %x_3_param_1
-         %60 = OpFunctionCall %main_out %main_inner %61 %62
-         %63 = OpCompositeExtract %int %60 0
-               OpStore %x_4_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.wgsl
deleted file mode 100644
index 55cb745..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-fn main_1() {
-  x_4 = 1;
-  let x_23 : vec4<f32> = x_2;
-  let x_27 : i32 = i32(x_23.x);
-  let x_28 : i32 = i32(x_23.y);
-  let x_33 : i32 = x_3;
-  x_5.field0[(x_27 + (x_28 * 8))] = x_27;
-  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == i32(x_23.z))) {
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.hlsl
deleted file mode 100644
index 6740df5..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-RWByteAddressBuffer x_5 : register(u0, space0);
-
-void main_1() {
-  x_4 = 1;
-  const float4 x_23 = x_2;
-  const int x_27 = int(x_23.x);
-  const int x_28 = int(x_23.y);
-  const int x_33 = x_3;
-  x_5.Store((4u * uint((x_27 + (x_28 * 8)))), asuint(x_27));
-  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == int(x_23.z))) {
-  }
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_4 = {x_4};
-  return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.msl
deleted file mode 100644
index 1358df1..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.msl
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct S {
-  /* 0x0000 */ int field0[1];
-};
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(device S& x_5, thread int* const tint_symbol_5, thread float4* const tint_symbol_6, thread int* const tint_symbol_7) {
-  *(tint_symbol_5) = 1;
-  float4 const x_23 = *(tint_symbol_6);
-  int const x_27 = int(x_23.x);
-  int const x_28 = int(x_23.y);
-  int const x_33 = *(tint_symbol_7);
-  x_5.field0[as_type<int>((as_type<uint>(x_27) + as_type<uint>(as_type<int>((as_type<uint>(x_28) * as_type<uint>(8))))))] = x_27;
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((x_27 & 1)) + as_type<uint>((x_28 & 1))))) + as_type<uint>(x_33))) == int(x_23.z))) {
-  }
-  return;
-}
-
-main_out tint_symbol_inner(device S& x_5, float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(x_5, tint_symbol_10, tint_symbol_8, tint_symbol_9);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]], device S& x_5 [[buffer(0)]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_5, x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.spvasm
deleted file mode 100644
index 2a1715f..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,112 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 64
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %S "S"
-               OpMemberName %S 0 "field0"
-               OpName %x_5 "x_5"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpDecorate %S Block
-               OpMemberDecorate %S 0 Offset 0
-               OpDecorate %_runtimearr_int ArrayStride 4
-               OpDecorate %x_5 DescriptorSet 0
-               OpDecorate %x_5 Binding 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-%_runtimearr_int = OpTypeRuntimeArray %int
-          %S = OpTypeStruct %_runtimearr_int
-%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
-        %x_5 = OpVariable %_ptr_StorageBuffer_S StorageBuffer
-       %void = OpTypeVoid
-         %21 = OpTypeFunction %void
-      %int_1 = OpConstant %int 1
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-      %int_8 = OpConstant %int 8
-%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
-       %bool = OpTypeBool
-   %main_out = OpTypeStruct %int
-         %49 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %21
-         %24 = OpLabel
-               OpStore %x_4 %int_1
-         %26 = OpLoad %v4float %x_2
-         %28 = OpCompositeExtract %float %26 0
-         %27 = OpConvertFToS %int %28
-         %30 = OpCompositeExtract %float %26 1
-         %29 = OpConvertFToS %int %30
-         %31 = OpLoad %int %x_3
-         %35 = OpIMul %int %29 %int_8
-         %36 = OpIAdd %int %27 %35
-         %38 = OpAccessChain %_ptr_StorageBuffer_int %x_5 %uint_0 %36
-               OpStore %38 %27
-         %39 = OpBitwiseAnd %int %27 %int_1
-         %40 = OpBitwiseAnd %int %29 %int_1
-         %41 = OpIAdd %int %39 %40
-         %42 = OpIAdd %int %41 %31
-         %44 = OpCompositeExtract %float %26 2
-         %43 = OpConvertFToS %int %44
-         %45 = OpIEqual %bool %42 %43
-               OpSelectionMerge %47 None
-               OpBranchConditional %45 %48 %47
-         %48 = OpLabel
-               OpBranch %47
-         %47 = OpLabel
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %49
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %54 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %55 = OpFunctionCall %void %main_1
-         %56 = OpLoad %int %x_4
-         %57 = OpCompositeConstruct %main_out %56
-               OpReturnValue %57
-               OpFunctionEnd
-       %main = OpFunction %void None %21
-         %59 = OpLabel
-         %61 = OpLoad %v4float %x_2_param_1
-         %62 = OpLoad %int %x_3_param_1
-         %60 = OpFunctionCall %main_out %main_inner %61 %62
-         %63 = OpCompositeExtract %int %60 0
-               OpStore %x_4_1_1 %63
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.wgsl
deleted file mode 100644
index 55cb745..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,39 +0,0 @@
-type RTArr = [[stride(4)]] array<i32>;
-
-[[block]]
-struct S {
-  field0 : RTArr;
-};
-
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-[[group(0), binding(0)]] var<storage, read_write> x_5 : S;
-
-fn main_1() {
-  x_4 = 1;
-  let x_23 : vec4<f32> = x_2;
-  let x_27 : i32 = i32(x_23.x);
-  let x_28 : i32 = i32(x_23.y);
-  let x_33 : i32 = x_3;
-  x_5.field0[(x_27 + (x_28 * 8))] = x_27;
-  if (((((x_27 & 1) + (x_28 & 1)) + x_33) == i32(x_23.z))) {
-  }
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.hlsl
deleted file mode 100644
index 184a98b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,52 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-
-void main_1() {
-  int x_33_phi = 0;
-  const float4 x_18 = x_2;
-  const int x_28 = x_3;
-  x_33_phi = 0;
-  if (((((int(x_18.x) & 1) + (int(x_18.y) & 1)) + x_28) == int(x_18.z))) {
-    while (true) {
-      int x_34 = 0;
-      const int x_33 = x_33_phi;
-      if ((asuint(x_33) < asuint(10))) {
-      } else {
-        break;
-      }
-      {
-        x_34 = (x_33 + 1);
-        x_33_phi = x_34;
-      }
-    }
-  }
-  x_4 = 1;
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.msl
deleted file mode 100644
index 89bd13c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread int* const tint_symbol_6, thread int* const tint_symbol_7) {
-  int x_33_phi = 0;
-  float4 const x_18 = *(tint_symbol_5);
-  int const x_28 = *(tint_symbol_6);
-  x_33_phi = 0;
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((int(x_18.x) & 1)) + as_type<uint>((int(x_18.y) & 1))))) + as_type<uint>(x_28))) == int(x_18.z))) {
-    while (true) {
-      int x_34 = 0;
-      int const x_33 = x_33_phi;
-      if ((as_type<uint>(x_33) < as_type<uint>(10))) {
-      } else {
-        break;
-      }
-      {
-        x_34 = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
-        x_33_phi = x_34;
-      }
-    }
-  }
-  *(tint_symbol_7) = 1;
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.spvasm
deleted file mode 100644
index aaa9420..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,125 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %x_33_phi "x_33_phi"
-               OpName %x_34 "x_34"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %int_10 = OpConstant %int 10
-   %main_out = OpTypeStruct %int
-         %57 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-   %x_33_phi = OpVariable %_ptr_Function_int Function %10
-       %x_34 = OpVariable %_ptr_Function_int Function %10
-         %23 = OpLoad %v4float %x_2
-         %24 = OpLoad %int %x_3
-               OpStore %x_33_phi %int_0
-         %27 = OpCompositeExtract %float %23 0
-         %26 = OpConvertFToS %int %27
-         %29 = OpBitwiseAnd %int %26 %int_1
-         %31 = OpCompositeExtract %float %23 1
-         %30 = OpConvertFToS %int %31
-         %32 = OpBitwiseAnd %int %30 %int_1
-         %33 = OpIAdd %int %29 %32
-         %34 = OpIAdd %int %33 %24
-         %36 = OpCompositeExtract %float %23 2
-         %35 = OpConvertFToS %int %36
-         %37 = OpIEqual %bool %34 %35
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %39
-         %40 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %46 = OpLoad %int %x_33_phi
-         %47 = OpBitcast %uint %46
-         %49 = OpBitcast %uint %int_10
-         %51 = OpULessThan %bool %47 %49
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %42
-         %52 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-         %55 = OpIAdd %int %46 %int_1
-               OpStore %x_34 %55
-         %56 = OpLoad %int %x_34
-               OpStore %x_33_phi %56
-               OpBranch %41
-         %42 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-               OpStore %x_4 %int_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %62 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %int %x_4
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %67 = OpLabel
-         %69 = OpLoad %v4float %x_2_param_1
-         %70 = OpLoad %int %x_3_param_1
-         %68 = OpFunctionCall %main_out %main_inner %69 %70
-         %71 = OpCompositeExtract %int %68 0
-               OpStore %x_4_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.wgsl
deleted file mode 100644
index 5142f3d..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-fn main_1() {
-  var x_33_phi : i32;
-  let x_18 : vec4<f32> = x_2;
-  let x_28 : i32 = x_3;
-  x_33_phi = 0;
-  if (((((i32(x_18.x) & 1) + (i32(x_18.y) & 1)) + x_28) == i32(x_18.z))) {
-    loop {
-      var x_34 : i32;
-      let x_33 : i32 = x_33_phi;
-      if ((bitcast<u32>(x_33) < bitcast<u32>(10))) {
-      } else {
-        break;
-      }
-
-      continuing {
-        x_34 = (x_33 + 1);
-        x_33_phi = x_34;
-      }
-    }
-  }
-  x_4 = 1;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.hlsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.hlsl
deleted file mode 100644
index 184a98b..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,52 +0,0 @@
-static float4 x_2 = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int x_3 = 0;
-static int x_4 = 0;
-
-void main_1() {
-  int x_33_phi = 0;
-  const float4 x_18 = x_2;
-  const int x_28 = x_3;
-  x_33_phi = 0;
-  if (((((int(x_18.x) & 1) + (int(x_18.y) & 1)) + x_28) == int(x_18.z))) {
-    while (true) {
-      int x_34 = 0;
-      const int x_33 = x_33_phi;
-      if ((asuint(x_33) < asuint(10))) {
-      } else {
-        break;
-      }
-      {
-        x_34 = (x_33 + 1);
-        x_33_phi = x_34;
-      }
-    }
-  }
-  x_4 = 1;
-  return;
-}
-
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_1 {
-  int x_3_param : TEXCOORD0;
-  float4 x_2_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int x_4_1 : SV_Target0;
-};
-
-main_out main_inner(float4 x_2_param, int x_3_param) {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  const main_out tint_symbol_3 = {x_4};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.x_2_param, tint_symbol.x_3_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.msl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.msl
deleted file mode 100644
index 89bd13c..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.msl
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int x_4_1;
-};
-struct tint_symbol_2 {
-  int x_3_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  int x_4_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread int* const tint_symbol_6, thread int* const tint_symbol_7) {
-  int x_33_phi = 0;
-  float4 const x_18 = *(tint_symbol_5);
-  int const x_28 = *(tint_symbol_6);
-  x_33_phi = 0;
-  if ((as_type<int>((as_type<uint>(as_type<int>((as_type<uint>((int(x_18.x) & 1)) + as_type<uint>((int(x_18.y) & 1))))) + as_type<uint>(x_28))) == int(x_18.z))) {
-    while (true) {
-      int x_34 = 0;
-      int const x_33 = x_33_phi;
-      if ((as_type<uint>(x_33) < as_type<uint>(10))) {
-      } else {
-        break;
-      }
-      {
-        x_34 = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
-        x_33_phi = x_34;
-      }
-    }
-  }
-  *(tint_symbol_7) = 1;
-  return;
-}
-
-main_out tint_symbol_inner(float4 x_2_param, int x_3_param, thread float4* const tint_symbol_8, thread int* const tint_symbol_9, thread int* const tint_symbol_10) {
-  *(tint_symbol_8) = x_2_param;
-  *(tint_symbol_9) = x_3_param;
-  main_1(tint_symbol_8, tint_symbol_9, tint_symbol_10);
-  main_out const tint_symbol_4 = {.x_4_1=*(tint_symbol_10)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_11 = 0.0f;
-  thread int tint_symbol_12 = 0;
-  thread int tint_symbol_13 = 0;
-  main_out const inner_result = tint_symbol_inner(x_2_param, tint_symbol_1.x_3_param, &(tint_symbol_11), &(tint_symbol_12), &(tint_symbol_13));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.x_4_1 = inner_result.x_4_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.spvasm b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.spvasm
deleted file mode 100644
index aaa9420..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,125 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 72
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %x_2_param_1 %x_3_param_1 %x_4_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %x_2_param_1 "x_2_param_1"
-               OpName %x_3_param_1 "x_3_param_1"
-               OpName %x_4_1_1 "x_4_1_1"
-               OpName %x_2 "x_2"
-               OpName %x_3 "x_3"
-               OpName %x_4 "x_4"
-               OpName %main_1 "main_1"
-               OpName %x_33_phi "x_33_phi"
-               OpName %x_34 "x_34"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "x_4_1"
-               OpName %main_inner "main_inner"
-               OpName %x_2_param "x_2_param"
-               OpName %x_3_param "x_3_param"
-               OpName %main "main"
-               OpDecorate %x_2_param_1 BuiltIn FragCoord
-               OpDecorate %x_3_param_1 Location 0
-               OpDecorate %x_3_param_1 Flat
-               OpDecorate %x_4_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%x_2_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Input_int = OpTypePointer Input %int
-%x_3_param_1 = OpVariable %_ptr_Input_int Input
-%_ptr_Output_int = OpTypePointer Output %int
-         %10 = OpConstantNull %int
-    %x_4_1_1 = OpVariable %_ptr_Output_int Output %10
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %13 = OpConstantNull %v4float
-        %x_2 = OpVariable %_ptr_Private_v4float Private %13
-%_ptr_Private_int = OpTypePointer Private %int
-        %x_3 = OpVariable %_ptr_Private_int Private %10
-        %x_4 = OpVariable %_ptr_Private_int Private %10
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-%_ptr_Function_int = OpTypePointer Function %int
-      %int_0 = OpConstant %int 0
-      %int_1 = OpConstant %int 1
-       %bool = OpTypeBool
-       %uint = OpTypeInt 32 0
-     %int_10 = OpConstant %int 10
-   %main_out = OpTypeStruct %int
-         %57 = OpTypeFunction %main_out %v4float %int
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-   %x_33_phi = OpVariable %_ptr_Function_int Function %10
-       %x_34 = OpVariable %_ptr_Function_int Function %10
-         %23 = OpLoad %v4float %x_2
-         %24 = OpLoad %int %x_3
-               OpStore %x_33_phi %int_0
-         %27 = OpCompositeExtract %float %23 0
-         %26 = OpConvertFToS %int %27
-         %29 = OpBitwiseAnd %int %26 %int_1
-         %31 = OpCompositeExtract %float %23 1
-         %30 = OpConvertFToS %int %31
-         %32 = OpBitwiseAnd %int %30 %int_1
-         %33 = OpIAdd %int %29 %32
-         %34 = OpIAdd %int %33 %24
-         %36 = OpCompositeExtract %float %23 2
-         %35 = OpConvertFToS %int %36
-         %37 = OpIEqual %bool %34 %35
-               OpSelectionMerge %39 None
-               OpBranchConditional %37 %40 %39
-         %40 = OpLabel
-               OpBranch %41
-         %41 = OpLabel
-               OpLoopMerge %42 %43 None
-               OpBranch %44
-         %44 = OpLabel
-         %46 = OpLoad %int %x_33_phi
-         %47 = OpBitcast %uint %46
-         %49 = OpBitcast %uint %int_10
-         %51 = OpULessThan %bool %47 %49
-               OpSelectionMerge %52 None
-               OpBranchConditional %51 %53 %54
-         %53 = OpLabel
-               OpBranch %52
-         %54 = OpLabel
-               OpBranch %42
-         %52 = OpLabel
-               OpBranch %43
-         %43 = OpLabel
-         %55 = OpIAdd %int %46 %int_1
-               OpStore %x_34 %55
-         %56 = OpLoad %int %x_34
-               OpStore %x_33_phi %56
-               OpBranch %41
-         %42 = OpLabel
-               OpBranch %39
-         %39 = OpLabel
-               OpStore %x_4 %int_1
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %57
-  %x_2_param = OpFunctionParameter %v4float
-  %x_3_param = OpFunctionParameter %int
-         %62 = OpLabel
-               OpStore %x_2 %x_2_param
-               OpStore %x_3 %x_3_param
-         %63 = OpFunctionCall %void %main_1
-         %64 = OpLoad %int %x_4
-         %65 = OpCompositeConstruct %main_out %64
-               OpReturnValue %65
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %67 = OpLabel
-         %69 = OpLoad %v4float %x_2_param_1
-         %70 = OpLoad %int %x_3_param_1
-         %68 = OpFunctionCall %main_out %main_inner %69 %70
-         %71 = OpCompositeExtract %int %68 0
-               OpStore %x_4_1_1 %71
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.wgsl b/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.wgsl
deleted file mode 100644
index 5142f3d..0000000
--- a/test/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,42 +0,0 @@
-var<private> x_2 : vec4<f32>;
-
-var<private> x_3 : i32;
-
-var<private> x_4 : i32;
-
-fn main_1() {
-  var x_33_phi : i32;
-  let x_18 : vec4<f32> = x_2;
-  let x_28 : i32 = x_3;
-  x_33_phi = 0;
-  if (((((i32(x_18.x) & 1) + (i32(x_18.y) & 1)) + x_28) == i32(x_18.z))) {
-    loop {
-      var x_34 : i32;
-      let x_33 : i32 = x_33_phi;
-      if ((bitcast<u32>(x_33) < bitcast<u32>(10))) {
-      } else {
-        break;
-      }
-
-      continuing {
-        x_34 = (x_33 + 1);
-        x_33_phi = x_34;
-      }
-    }
-  }
-  x_4 = 1;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  x_4_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] x_2_param : vec4<f32>, [[location(0)]] x_3_param : i32) -> main_out {
-  x_2 = x_2_param;
-  x_3 = x_3_param;
-  main_1();
-  return main_out(x_4);
-}
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.hlsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.hlsl
deleted file mode 100644
index 909ad79..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float3 position = float3(0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float3 x_21 = position;
-  gl_Position = float4(x_21.x, x_21.y, x_21.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float3 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float3 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.msl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.msl
deleted file mode 100644
index 7ef967c..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float3 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float3* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float3 const x_21 = *(tint_symbol_5);
-  *(tint_symbol_6) = float4(x_21.x, x_21.y, x_21.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float3 position_param, thread float3* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float3 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.spvasm b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.spvasm
deleted file mode 100644
index 2428fec..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-%_ptr_Input_v3float = OpTypePointer Input %v3float
-%position_param_1 = OpVariable %_ptr_Input_v3float Input
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_v3float = OpTypePointer Private %v3float
-         %14 = OpConstantNull %v3float
-   %position = OpVariable %_ptr_Private_v3float Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %27 = OpTypeFunction %main_out %v3float
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %v3float %position
-         %22 = OpCompositeExtract %float %21 0
-         %23 = OpCompositeExtract %float %21 1
-         %24 = OpCompositeExtract %float %21 2
-         %26 = OpCompositeConstruct %v4float %22 %23 %24 %float_1
-               OpStore %gl_Position %26
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %27
-%position_param = OpFunctionParameter %v3float
-         %31 = OpLabel
-               OpStore %position %position_param
-         %32 = OpFunctionCall %void %main_1
-         %33 = OpLoad %v4float %gl_Position
-         %34 = OpCompositeConstruct %main_out %33
-               OpReturnValue %34
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %36 = OpLabel
-         %38 = OpLoad %v3float %position_param_1
-         %37 = OpFunctionCall %main_out %main_inner %38
-         %39 = OpCompositeExtract %v4float %37 0
-               OpStore %gl_Position_1 %39
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.wgsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.wgsl
deleted file mode 100644
index cfebf74..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> position : vec3<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_21 : vec3<f32> = position;
-  gl_Position = vec4<f32>(x_21.x, x_21.y, x_21.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec3<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.hlsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.hlsl
deleted file mode 100644
index 909ad79..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,32 +0,0 @@
-static float3 position = float3(0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float3 x_21 = position;
-  gl_Position = float4(x_21.x, x_21.y, x_21.z, 1.0f);
-  return;
-}
-
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_1 {
-  float3 position_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float3 position_param) {
-  position = position_param;
-  main_1();
-  const main_out tint_symbol_3 = {gl_Position};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.position_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.msl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.msl
deleted file mode 100644
index 7ef967c..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 gl_Position;
-};
-struct tint_symbol_2 {
-  float3 position_param [[attribute(0)]];
-};
-struct tint_symbol_3 {
-  float4 gl_Position [[position]];
-};
-
-void main_1(thread float3* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float3 const x_21 = *(tint_symbol_5);
-  *(tint_symbol_6) = float4(x_21.x, x_21.y, x_21.z, 1.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float3 position_param, thread float3* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = position_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float3 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.gl_Position = inner_result.gl_Position;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.spvasm b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.spvasm
deleted file mode 100644
index 2428fec..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.spvasm
+++ /dev/null
@@ -1,72 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 40
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Vertex %main "main" %position_param_1 %gl_Position_1 %vertex_point_size
-               OpName %position_param_1 "position_param_1"
-               OpName %gl_Position_1 "gl_Position_1"
-               OpName %vertex_point_size "vertex_point_size"
-               OpName %position "position"
-               OpName %gl_Position "gl_Position"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "gl_Position"
-               OpName %main_inner "main_inner"
-               OpName %position_param "position_param"
-               OpName %main "main"
-               OpDecorate %position_param_1 Location 0
-               OpDecorate %gl_Position_1 BuiltIn Position
-               OpDecorate %vertex_point_size BuiltIn PointSize
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v3float = OpTypeVector %float 3
-%_ptr_Input_v3float = OpTypePointer Input %v3float
-%position_param_1 = OpVariable %_ptr_Input_v3float Input
-    %v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %8 = OpConstantNull %v4float
-%gl_Position_1 = OpVariable %_ptr_Output_v4float Output %8
-%_ptr_Output_float = OpTypePointer Output %float
-         %11 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %11
-%_ptr_Private_v3float = OpTypePointer Private %v3float
-         %14 = OpConstantNull %v3float
-   %position = OpVariable %_ptr_Private_v3float Private %14
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-%gl_Position = OpVariable %_ptr_Private_v4float Private %8
-       %void = OpTypeVoid
-         %17 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-   %main_out = OpTypeStruct %v4float
-         %27 = OpTypeFunction %main_out %v3float
-     %main_1 = OpFunction %void None %17
-         %20 = OpLabel
-         %21 = OpLoad %v3float %position
-         %22 = OpCompositeExtract %float %21 0
-         %23 = OpCompositeExtract %float %21 1
-         %24 = OpCompositeExtract %float %21 2
-         %26 = OpCompositeConstruct %v4float %22 %23 %24 %float_1
-               OpStore %gl_Position %26
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %27
-%position_param = OpFunctionParameter %v3float
-         %31 = OpLabel
-               OpStore %position %position_param
-         %32 = OpFunctionCall %void %main_1
-         %33 = OpLoad %v4float %gl_Position
-         %34 = OpCompositeConstruct %main_out %33
-               OpReturnValue %34
-               OpFunctionEnd
-       %main = OpFunction %void None %17
-         %36 = OpLabel
-         %38 = OpLoad %v3float %position_param_1
-         %37 = OpFunctionCall %main_out %main_inner %38
-         %39 = OpCompositeExtract %v4float %37 0
-               OpStore %gl_Position_1 %39
-               OpStore %vertex_point_size %float_1
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.wgsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.wgsl
deleted file mode 100644
index cfebf74..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/0.wgsl.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> position : vec3<f32>;
-
-var<private> gl_Position : vec4<f32>;
-
-fn main_1() {
-  let x_21 : vec3<f32> = position;
-  gl_Position = vec4<f32>(x_21.x, x_21.y, x_21.z, 1.0);
-  return;
-}
-
-struct main_out {
-  [[builtin(position)]]
-  gl_Position : vec4<f32>;
-};
-
-[[stage(vertex)]]
-fn main([[location(0)]] position_param : vec3<f32>) -> main_out {
-  position = position_param;
-  main_1();
-  return main_out(gl_Position);
-}
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.hlsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.hlsl
deleted file mode 100644
index 25f61b0..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int expect = 0;
-
-void main_1() {
-  bool inbounds = false;
-  bool x_31 = false;
-  bool x_32_phi = false;
-  const float x_24 = gl_FragCoord.x;
-  const bool x_25 = (x_24 < 128.0f);
-  x_32_phi = x_25;
-  if (!(x_25)) {
-    const float x_30 = gl_FragCoord.y;
-    x_31 = (x_30 < 128.0f);
-    x_32_phi = x_31;
-  }
-  inbounds = x_32_phi;
-  expect = (inbounds ? 1 : -1);
-  return;
-}
-
-struct main_out {
-  int expect_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int expect_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {expect};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.expect_1 = inner_result.expect_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.msl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.msl
deleted file mode 100644
index 49c13b0..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int expect_1;
-};
-struct tint_symbol_1 {
-  int expect_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread int* const tint_symbol_4) {
-  bool inbounds = false;
-  bool x_31 = false;
-  bool x_32_phi = false;
-  float const x_24 = (*(tint_symbol_3)).x;
-  bool const x_25 = (x_24 < 128.0f);
-  x_32_phi = x_25;
-  if (!(x_25)) {
-    float const x_30 = (*(tint_symbol_3)).y;
-    x_31 = (x_30 < 128.0f);
-    x_32_phi = x_31;
-  }
-  bool const x_32 = x_32_phi;
-  inbounds = x_32;
-  bool const x_33 = inbounds;
-  *(tint_symbol_4) = select(-1, 1, x_33);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread int* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.expect_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread int tint_symbol_8 = 0;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.expect_1 = inner_result.expect_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.spvasm b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.spvasm
deleted file mode 100644
index 553335c..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,97 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %expect_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %expect_1_1 "expect_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %expect "expect"
-               OpName %main_1 "main_1"
-               OpName %inbounds "inbounds"
-               OpName %x_31 "x_31"
-               OpName %x_32_phi "x_32_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "expect_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %expect_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Output_int = OpTypePointer Output %int
-          %8 = OpConstantNull %int
- %expect_1_1 = OpVariable %_ptr_Output_int Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %11 = OpConstantNull %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %11
-%_ptr_Private_int = OpTypePointer Private %int
-     %expect = OpVariable %_ptr_Private_int Private %8
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %21 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_128 = OpConstant %float 128
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-   %main_out = OpTypeStruct %int
-         %44 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-   %inbounds = OpVariable %_ptr_Function_bool Function %21
-       %x_31 = OpVariable %_ptr_Function_bool Function %21
-   %x_32_phi = OpVariable %_ptr_Function_bool Function %21
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %28 = OpLoad %float %27
-         %30 = OpFOrdLessThan %bool %28 %float_128
-               OpStore %x_32_phi %30
-         %31 = OpLogicalNot %bool %30
-               OpSelectionMerge %32 None
-               OpBranchConditional %31 %33 %32
-         %33 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFOrdLessThan %bool %36 %float_128
-               OpStore %x_31 %37
-         %38 = OpLoad %bool %x_31
-               OpStore %x_32_phi %38
-               OpBranch %32
-         %32 = OpLabel
-         %39 = OpLoad %bool %x_32_phi
-               OpStore %inbounds %39
-         %40 = OpLoad %bool %inbounds
-         %41 = OpSelect %int %40 %int_1 %int_n1
-               OpStore %expect %41
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %48 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %int %expect
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %53 = OpLabel
-         %55 = OpLoad %v4float %gl_FragCoord_param_1
-         %54 = OpFunctionCall %main_out %main_inner %55
-         %56 = OpCompositeExtract %int %54 0
-               OpStore %expect_1_1 %56
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.wgsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.wgsl
deleted file mode 100644
index a3e9f61..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> expect : i32;
-
-fn main_1() {
-  var inbounds : bool;
-  var x_31 : bool;
-  var x_32_phi : bool;
-  let x_24 : f32 = gl_FragCoord.x;
-  let x_25 : bool = (x_24 < 128.0);
-  x_32_phi = x_25;
-  if (!(x_25)) {
-    let x_30 : f32 = gl_FragCoord.y;
-    x_31 = (x_30 < 128.0);
-    x_32_phi = x_31;
-  }
-  let x_32 : bool = x_32_phi;
-  inbounds = x_32;
-  let x_33 : bool = inbounds;
-  expect = select(-1, 1, x_33);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  expect_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(expect);
-}
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.hlsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.hlsl
deleted file mode 100644
index 25f61b0..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,43 +0,0 @@
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static int expect = 0;
-
-void main_1() {
-  bool inbounds = false;
-  bool x_31 = false;
-  bool x_32_phi = false;
-  const float x_24 = gl_FragCoord.x;
-  const bool x_25 = (x_24 < 128.0f);
-  x_32_phi = x_25;
-  if (!(x_25)) {
-    const float x_30 = gl_FragCoord.y;
-    x_31 = (x_30 < 128.0f);
-    x_32_phi = x_31;
-  }
-  inbounds = x_32_phi;
-  expect = (inbounds ? 1 : -1);
-  return;
-}
-
-struct main_out {
-  int expect_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  int expect_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {expect};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.expect_1 = inner_result.expect_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.msl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.msl
deleted file mode 100644
index 49c13b0..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  int expect_1;
-};
-struct tint_symbol_1 {
-  int expect_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread int* const tint_symbol_4) {
-  bool inbounds = false;
-  bool x_31 = false;
-  bool x_32_phi = false;
-  float const x_24 = (*(tint_symbol_3)).x;
-  bool const x_25 = (x_24 < 128.0f);
-  x_32_phi = x_25;
-  if (!(x_25)) {
-    float const x_30 = (*(tint_symbol_3)).y;
-    x_31 = (x_30 < 128.0f);
-    x_32_phi = x_31;
-  }
-  bool const x_32 = x_32_phi;
-  inbounds = x_32;
-  bool const x_33 = inbounds;
-  *(tint_symbol_4) = select(-1, 1, x_33);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread int* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.expect_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread int tint_symbol_8 = 0;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.expect_1 = inner_result.expect_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.spvasm b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.spvasm
deleted file mode 100644
index 553335c..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,97 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 57
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %expect_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %expect_1_1 "expect_1_1"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %expect "expect"
-               OpName %main_1 "main_1"
-               OpName %inbounds "inbounds"
-               OpName %x_31 "x_31"
-               OpName %x_32_phi "x_32_phi"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "expect_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %expect_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-        %int = OpTypeInt 32 1
-%_ptr_Output_int = OpTypePointer Output %int
-          %8 = OpConstantNull %int
- %expect_1_1 = OpVariable %_ptr_Output_int Output %8
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-         %11 = OpConstantNull %v4float
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %11
-%_ptr_Private_int = OpTypePointer Private %int
-     %expect = OpVariable %_ptr_Private_int Private %8
-       %void = OpTypeVoid
-         %14 = OpTypeFunction %void
-       %bool = OpTypeBool
-%_ptr_Function_bool = OpTypePointer Function %bool
-         %21 = OpConstantNull %bool
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-  %float_128 = OpConstant %float 128
-     %uint_1 = OpConstant %uint 1
-      %int_1 = OpConstant %int 1
-     %int_n1 = OpConstant %int -1
-   %main_out = OpTypeStruct %int
-         %44 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %14
-         %17 = OpLabel
-   %inbounds = OpVariable %_ptr_Function_bool Function %21
-       %x_31 = OpVariable %_ptr_Function_bool Function %21
-   %x_32_phi = OpVariable %_ptr_Function_bool Function %21
-         %27 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %28 = OpLoad %float %27
-         %30 = OpFOrdLessThan %bool %28 %float_128
-               OpStore %x_32_phi %30
-         %31 = OpLogicalNot %bool %30
-               OpSelectionMerge %32 None
-               OpBranchConditional %31 %33 %32
-         %33 = OpLabel
-         %35 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %36 = OpLoad %float %35
-         %37 = OpFOrdLessThan %bool %36 %float_128
-               OpStore %x_31 %37
-         %38 = OpLoad %bool %x_31
-               OpStore %x_32_phi %38
-               OpBranch %32
-         %32 = OpLabel
-         %39 = OpLoad %bool %x_32_phi
-               OpStore %inbounds %39
-         %40 = OpLoad %bool %inbounds
-         %41 = OpSelect %int %40 %int_1 %int_n1
-               OpStore %expect %41
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %44
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %48 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %49 = OpFunctionCall %void %main_1
-         %50 = OpLoad %int %expect
-         %51 = OpCompositeConstruct %main_out %50
-               OpReturnValue %51
-               OpFunctionEnd
-       %main = OpFunction %void None %14
-         %53 = OpLabel
-         %55 = OpLoad %v4float %gl_FragCoord_param_1
-         %54 = OpFunctionCall %main_out %main_inner %55
-         %56 = OpCompositeExtract %int %54 0
-               OpStore %expect_1_1 %56
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.wgsl b/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.wgsl
deleted file mode 100644
index a3e9f61..0000000
--- a/test/vk-gl-cts/subgroup_uniform_control_flow/discard/subgroup_reconverge_discard00/2-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,34 +0,0 @@
-var<private> gl_FragCoord : vec4<f32>;
-
-var<private> expect : i32;
-
-fn main_1() {
-  var inbounds : bool;
-  var x_31 : bool;
-  var x_32_phi : bool;
-  let x_24 : f32 = gl_FragCoord.x;
-  let x_25 : bool = (x_24 < 128.0);
-  x_32_phi = x_25;
-  if (!(x_25)) {
-    let x_30 : f32 = gl_FragCoord.y;
-    x_31 = (x_30 < 128.0);
-    x_32_phi = x_31;
-  }
-  let x_32 : bool = x_32_phi;
-  inbounds = x_32;
-  let x_33 : bool = inbounds;
-  expect = select(-1, 1, x_33);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  expect_1 : i32;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(expect);
-}
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.hlsl b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.hlsl
deleted file mode 100644
index 7dac578..0000000
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 color_in = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  color_out = color_in;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_1 {
-  float4 color_in_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 color_out_1 : SV_Target0;
-};
-
-main_out main_inner(float4 color_in_param) {
-  color_in = color_in_param;
-  main_1();
-  const main_out tint_symbol_3 = {color_out};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.color_in_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.msl b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.msl
deleted file mode 100644
index 2b0c4f2..0000000
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_2 {
-  float4 color_in_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  float4 color_out_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_12 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_12;
-  return;
-}
-
-main_out tint_symbol_inner(float4 color_in_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = color_in_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.color_out_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.color_in_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.spvasm b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.spvasm
deleted file mode 100644
index b31dbf7..0000000
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_in_param_1 %color_out_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %color_in_param_1 "color_in_param_1"
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %color_out "color_out"
-               OpName %color_in "color_in"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpName %main_inner "main_inner"
-               OpName %color_in_param "color_in_param"
-               OpName %main "main"
-               OpDecorate %color_in_param_1 Location 0
-               OpDecorate %color_out_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%color_in_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %7
-   %color_in = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %16 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %15 = OpLoad %v4float %color_in
-               OpStore %color_out %15
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %16
-%color_in_param = OpFunctionParameter %v4float
-         %20 = OpLabel
-               OpStore %color_in %color_in_param
-         %21 = OpFunctionCall %void %main_1
-         %22 = OpLoad %v4float %color_out
-         %23 = OpCompositeConstruct %main_out %22
-               OpReturnValue %23
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %27 = OpLoad %v4float %color_in_param_1
-         %26 = OpFunctionCall %main_out %main_inner %27
-         %28 = OpCompositeExtract %v4float %26 0
-               OpStore %color_out_1_1 %28
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.wgsl b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.wgsl
deleted file mode 100644
index cd7d76c..0000000
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.spvasm.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> color_in : vec4<f32>;
-
-fn main_1() {
-  let x_12 : vec4<f32> = color_in;
-  color_out = x_12;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[location(0)]] color_in_param : vec4<f32>) -> main_out {
-  color_in = color_in_param;
-  main_1();
-  return main_out(color_out);
-}
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.hlsl b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.hlsl
deleted file mode 100644
index 7dac578..0000000
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,31 +0,0 @@
-static float4 color_out = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 color_in = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  color_out = color_in;
-  return;
-}
-
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_1 {
-  float4 color_in_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
-  float4 color_out_1 : SV_Target0;
-};
-
-main_out main_inner(float4 color_in_param) {
-  color_in = color_in_param;
-  main_1();
-  const main_out tint_symbol_3 = {color_out};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.color_in_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.msl b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.msl
deleted file mode 100644
index 2b0c4f2..0000000
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.msl
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 color_out_1;
-};
-struct tint_symbol_2 {
-  float4 color_in_param [[user(locn0)]];
-};
-struct tint_symbol_3 {
-  float4 color_out_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  float4 const x_12 = *(tint_symbol_5);
-  *(tint_symbol_6) = x_12;
-  return;
-}
-
-main_out tint_symbol_inner(float4 color_in_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
-  *(tint_symbol_7) = color_in_param;
-  main_1(tint_symbol_7, tint_symbol_8);
-  main_out const tint_symbol_4 = {.color_out_1=*(tint_symbol_8)};
-  return tint_symbol_4;
-}
-
-fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
-  thread float4 tint_symbol_9 = 0.0f;
-  thread float4 tint_symbol_10 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(tint_symbol_1.color_in_param, &(tint_symbol_9), &(tint_symbol_10));
-  tint_symbol_3 wrapper_result = {};
-  wrapper_result.color_out_1 = inner_result.color_out_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.spvasm b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.spvasm
deleted file mode 100644
index b31dbf7..0000000
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.spvasm
+++ /dev/null
@@ -1,59 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 29
-; Schema: 0
-               OpCapability Shader
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %color_in_param_1 %color_out_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %color_in_param_1 "color_in_param_1"
-               OpName %color_out_1_1 "color_out_1_1"
-               OpName %color_out "color_out"
-               OpName %color_in "color_in"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "color_out_1"
-               OpName %main_inner "main_inner"
-               OpName %color_in_param "color_in_param"
-               OpName %main "main"
-               OpDecorate %color_in_param_1 Location 0
-               OpDecorate %color_out_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%color_in_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
-%color_out_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-  %color_out = OpVariable %_ptr_Private_v4float Private %7
-   %color_in = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-   %main_out = OpTypeStruct %v4float
-         %16 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %15 = OpLoad %v4float %color_in
-               OpStore %color_out %15
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %16
-%color_in_param = OpFunctionParameter %v4float
-         %20 = OpLabel
-               OpStore %color_in %color_in_param
-         %21 = OpFunctionCall %void %main_1
-         %22 = OpLoad %v4float %color_out
-         %23 = OpCompositeConstruct %main_out %22
-               OpReturnValue %23
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %25 = OpLabel
-         %27 = OpLoad %v4float %color_in_param_1
-         %26 = OpFunctionCall %main_out %main_inner %27
-         %28 = OpCompositeExtract %v4float %26 0
-               OpStore %color_out_1_1 %28
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.wgsl b/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.wgsl
deleted file mode 100644
index cd7d76c..0000000
--- a/test/vk-gl-cts/texture/subgroup_lod/texel_fetch/1.wgsl.expected.wgsl
+++ /dev/null
@@ -1,21 +0,0 @@
-var<private> color_out : vec4<f32>;
-
-var<private> color_in : vec4<f32>;
-
-fn main_1() {
-  let x_12 : vec4<f32> = color_in;
-  color_out = x_12;
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  color_out_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[location(0)]] color_in_param : vec4<f32>) -> main_out {
-  color_in = color_in_param;
-  main_1();
-  return main_out(color_out);
-}
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index d0664b3..0000000
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 result = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_19 = gl_FragCoord.x;
-  const float x_23 = gl_FragCoord.y;
-  result = float4((floor(x_19) / 255.0f), (floor(x_23) / 255.0f), 0.0f, 0.0f);
-  return;
-}
-
-struct main_out {
-  float4 result_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 result_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {result};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.result_1 = inner_result.result_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.msl b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.msl
deleted file mode 100644
index 6a977de..0000000
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.msl
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 result_1;
-};
-struct tint_symbol_1 {
-  float4 result_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_19 = (*(tint_symbol_3)).x;
-  float const x_23 = (*(tint_symbol_3)).y;
-  *(tint_symbol_4) = float4((floor(x_19) / 255.0f), (floor(x_23) / 255.0f), 0.0f, 0.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.result_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.result_1 = inner_result.result_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.spvasm b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.spvasm
deleted file mode 100644
index c199929..0000000
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.spvasm
+++ /dev/null
@@ -1,74 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-         %24 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %result_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %result_1_1 "result_1_1"
-               OpName %result "result"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "result_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %result_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
- %result_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-     %result = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-  %float_255 = OpConstant %float 255
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-         %31 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %19 = OpLoad %float %18
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %22 = OpLoad %float %21
-         %23 = OpExtInst %float %24 Floor %19
-         %26 = OpFDiv %float %23 %float_255
-         %27 = OpExtInst %float %24 Floor %22
-         %28 = OpFDiv %float %27 %float_255
-         %30 = OpCompositeConstruct %v4float %26 %28 %float_0 %float_0
-               OpStore %result %30
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %31
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %35 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %result
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %40 = OpLabel
-         %42 = OpLoad %v4float %gl_FragCoord_param_1
-         %41 = OpFunctionCall %main_out %main_inner %42
-         %43 = OpCompositeExtract %v4float %41 0
-               OpStore %result_1_1 %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.wgsl b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.wgsl
deleted file mode 100644
index 2130c1a..0000000
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.spvasm.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> result : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  let x_19 : f32 = gl_FragCoord.x;
-  let x_23 : f32 = gl_FragCoord.y;
-  result = vec4<f32>((floor(x_19) / 255.0), (floor(x_23) / 255.0), 0.0, 0.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  result_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(result);
-}
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index d0664b3..0000000
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,33 +0,0 @@
-static float4 result = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
-  const float x_19 = gl_FragCoord.x;
-  const float x_23 = gl_FragCoord.y;
-  result = float4((floor(x_19) / 255.0f), (floor(x_23) / 255.0f), 0.0f, 0.0f);
-  return;
-}
-
-struct main_out {
-  float4 result_1;
-};
-struct tint_symbol_1 {
-  float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
-  float4 result_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  const main_out tint_symbol_3 = {result};
-  return tint_symbol_3;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
-  const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
-  tint_symbol_2 wrapper_result = (tint_symbol_2)0;
-  wrapper_result.result_1 = inner_result.result_1;
-  return wrapper_result;
-}
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.msl b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.msl
deleted file mode 100644
index 6a977de..0000000
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.msl
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <metal_stdlib>
-
-using namespace metal;
-struct main_out {
-  float4 result_1;
-};
-struct tint_symbol_1 {
-  float4 result_1 [[color(0)]];
-};
-
-void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
-  float const x_19 = (*(tint_symbol_3)).x;
-  float const x_23 = (*(tint_symbol_3)).y;
-  *(tint_symbol_4) = float4((floor(x_19) / 255.0f), (floor(x_23) / 255.0f), 0.0f, 0.0f);
-  return;
-}
-
-main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
-  *(tint_symbol_5) = gl_FragCoord_param;
-  main_1(tint_symbol_5, tint_symbol_6);
-  main_out const tint_symbol_2 = {.result_1=*(tint_symbol_6)};
-  return tint_symbol_2;
-}
-
-fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
-  thread float4 tint_symbol_7 = 0.0f;
-  thread float4 tint_symbol_8 = 0.0f;
-  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
-  tint_symbol_1 wrapper_result = {};
-  wrapper_result.result_1 = inner_result.result_1;
-  return wrapper_result;
-}
-
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.spvasm b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.spvasm
deleted file mode 100644
index c199929..0000000
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.spvasm
+++ /dev/null
@@ -1,74 +0,0 @@
-; SPIR-V
-; Version: 1.3
-; Generator: Google Tint Compiler; 0
-; Bound: 44
-; Schema: 0
-               OpCapability Shader
-         %24 = OpExtInstImport "GLSL.std.450"
-               OpMemoryModel Logical GLSL450
-               OpEntryPoint Fragment %main "main" %gl_FragCoord_param_1 %result_1_1
-               OpExecutionMode %main OriginUpperLeft
-               OpName %gl_FragCoord_param_1 "gl_FragCoord_param_1"
-               OpName %result_1_1 "result_1_1"
-               OpName %result "result"
-               OpName %gl_FragCoord "gl_FragCoord"
-               OpName %main_1 "main_1"
-               OpName %main_out "main_out"
-               OpMemberName %main_out 0 "result_1"
-               OpName %main_inner "main_inner"
-               OpName %gl_FragCoord_param "gl_FragCoord_param"
-               OpName %main "main"
-               OpDecorate %gl_FragCoord_param_1 BuiltIn FragCoord
-               OpDecorate %result_1_1 Location 0
-               OpMemberDecorate %main_out 0 Offset 0
-      %float = OpTypeFloat 32
-    %v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord_param_1 = OpVariable %_ptr_Input_v4float Input
-%_ptr_Output_v4float = OpTypePointer Output %v4float
-          %7 = OpConstantNull %v4float
- %result_1_1 = OpVariable %_ptr_Output_v4float Output %7
-%_ptr_Private_v4float = OpTypePointer Private %v4float
-     %result = OpVariable %_ptr_Private_v4float Private %7
-%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %7
-       %void = OpTypeVoid
-         %11 = OpTypeFunction %void
-       %uint = OpTypeInt 32 0
-     %uint_0 = OpConstant %uint 0
-%_ptr_Private_float = OpTypePointer Private %float
-     %uint_1 = OpConstant %uint 1
-  %float_255 = OpConstant %float 255
-    %float_0 = OpConstant %float 0
-   %main_out = OpTypeStruct %v4float
-         %31 = OpTypeFunction %main_out %v4float
-     %main_1 = OpFunction %void None %11
-         %14 = OpLabel
-         %18 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_0
-         %19 = OpLoad %float %18
-         %21 = OpAccessChain %_ptr_Private_float %gl_FragCoord %uint_1
-         %22 = OpLoad %float %21
-         %23 = OpExtInst %float %24 Floor %19
-         %26 = OpFDiv %float %23 %float_255
-         %27 = OpExtInst %float %24 Floor %22
-         %28 = OpFDiv %float %27 %float_255
-         %30 = OpCompositeConstruct %v4float %26 %28 %float_0 %float_0
-               OpStore %result %30
-               OpReturn
-               OpFunctionEnd
- %main_inner = OpFunction %main_out None %31
-%gl_FragCoord_param = OpFunctionParameter %v4float
-         %35 = OpLabel
-               OpStore %gl_FragCoord %gl_FragCoord_param
-         %36 = OpFunctionCall %void %main_1
-         %37 = OpLoad %v4float %result
-         %38 = OpCompositeConstruct %main_out %37
-               OpReturnValue %38
-               OpFunctionEnd
-       %main = OpFunction %void None %11
-         %40 = OpLabel
-         %42 = OpLoad %v4float %gl_FragCoord_param_1
-         %41 = OpFunctionCall %main_out %main_inner %42
-         %43 = OpCompositeExtract %v4float %41 0
-               OpStore %result_1_1 %43
-               OpReturn
-               OpFunctionEnd
diff --git a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.wgsl b/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.wgsl
deleted file mode 100644
index 2130c1a..0000000
--- a/test/vk-gl-cts/texture/texel_offset/texel_offset/0-opt.wgsl.expected.wgsl
+++ /dev/null
@@ -1,22 +0,0 @@
-var<private> result : vec4<f32>;
-
-var<private> gl_FragCoord : vec4<f32>;
-
-fn main_1() {
-  let x_19 : f32 = gl_FragCoord.x;
-  let x_23 : f32 = gl_FragCoord.y;
-  result = vec4<f32>((floor(x_19) / 255.0), (floor(x_23) / 255.0), 0.0, 0.0);
-  return;
-}
-
-struct main_out {
-  [[location(0)]]
-  result_1 : vec4<f32>;
-};
-
-[[stage(fragment)]]
-fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
-  gl_FragCoord = gl_FragCoord_param;
-  main_1();
-  return main_out(result);
-}
diff --git a/tools/src/cmd/test-runner/main.go b/tools/src/cmd/test-runner/main.go
index d480db0..07ddab0 100644
--- a/tools/src/cmd/test-runner/main.go
+++ b/tools/src/cmd/test-runner/main.go
@@ -539,7 +539,18 @@
 		matched := expected == "" || expected == out
 
 		if ok && generateExpected && (validate || !skipped) {
-			saveExpectedFile(j.file, j.format, out)
+			// Don't generate expected results for certain directories that contain
+			// large corpora of tests for which the generated code is uninteresting.
+			saveResult := true
+			for _, exclude := range []string{"/test/unittest/", "/test/vk-gl-cts/"} {
+				if strings.Contains(j.file, exclude) {
+					saveResult = false
+				}
+			}
+
+			if saveResult {
+				saveExpectedFile(j.file, j.format, out)
+			}
 			matched = true
 		}
 
